From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jeykumar Sankaran Subject: Re: [DPU PATCH 11/11] drm/msm: Remove dpu input fences Date: Fri, 02 Mar 2018 16:50:37 -0800 Message-ID: <95e182e0c7589d1e19d4aaea1acc9c37@codeaurora.org> References: <20180228191906.185417-1-seanpaul@chromium.org> <20180228191906.185417-12-seanpaul@chromium.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180228191906.185417-12-seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: Sean Paul Cc: linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, abhinavk-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, hoegsberg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: dri-devel@lists.freedesktop.org T24gMjAxOC0wMi0yOCAxMToxOSwgU2VhbiBQYXVsIHdyb3RlOgo+IFRoZXNlIGFyZSBhbHJlYWR5 IHByb3ZpZGVkIGJ5IGRybSBhdG9taWMgY29yZS4KPiAKPiBJbiBjb25qdW5jdGlvbiB3aXRoIHRo ZSBvdXRwdXQgZmVuY2VzIHJlbW92ZWQgZWFybGllciwgdGhpcyBvYnNvbGV0ZXMKPiBkcHVfZmVu Y2UsIGFuZCBpdCBjYW4gYmUgZW50aXJlbHkgcmVtb3ZlZCBhcyB3ZWxsLgo+IAo+IENoYW5nZS1J ZDogSWRhNDkyNGEwOWM0NTVkN2E4NGJmZWU1NjliZDBkMmZiNDM2NDE4ZGUKPiBTaWduZWQtb2Zm LWJ5OiBTZWFuIFBhdWwgPHNlYW5wYXVsQGNocm9taXVtLm9yZz4KClJldmlld2VkLWJ5OiBKZXlr dW1hciBTYW5rYXJhbiA8anNhbmthQGNvZGVhdXJvcmEub3JnPgoKPiAtLS0KPiAgZHJpdmVycy9n cHUvZHJtL21zbS9NYWtlZmlsZSAgICAgICAgICAgICAgfCAgIDEgLQo+ICBkcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5jICB8ICA4NCAtLS0tLQo+ICBkcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfZmVuY2UuYyB8IDQwNCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t Cj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9mZW5jZS5oIHwgMTkwIC0tLS0t LS0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3BsYW5lLmMgfCAxMDQg LS0tLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oICAgICAgICAgICAgIHwgICA0 ICstCj4gIDYgZmlsZXMgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDc4NiBkZWxldGlvbnMoLSkK PiAgZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9m ZW5jZS5jCj4gIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfZmVuY2UuaAo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2Vm aWxlIAo+IGIvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZQo+IGluZGV4IDJmYjliYTExZGYx OS4uYjQ3ZWY1MjY3ZTE5IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZp bGUKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlCj4gQEAgLTU1LDcgKzU1LDYg QEAgbXNtLXkgOj0gXAo+ICAJZGlzcC9kcHUxL2RwdV9lbmNvZGVyLm8gXAo+ICAJZGlzcC9kcHUx L2RwdV9lbmNvZGVyX3BoeXNfY21kLm8gXAo+ICAJZGlzcC9kcHUxL2RwdV9lbmNvZGVyX3BoeXNf dmlkLm8gXAo+IC0JZGlzcC9kcHUxL2RwdV9mZW5jZS5vIFwKPiAgCWRpc3AvZHB1MS9kcHVfZm9y bWF0cy5vIFwKPiAgCWRpc3AvZHB1MS9kcHVfaHdfYWQ0Lm8gXAo+ICAJZGlzcC9kcHUxL2RwdV9o d19ibGsubyBcCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9jcnRjLmMKPiBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMKPiBp bmRleCAyZDQ0OTg5YWRlN2EuLjhkZDk4NmU0NzZiZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X2NydGMuYwo+IEBAIC02NCwxNiArNjQsNiBAQCBzdGF0aWMgc3RydWN0 IGRwdV9jcnRjX2N1c3RvbV9ldmVudHMgY3VzdG9tX2V2ZW50c1tdIAo+ID0KPiB7Cj4gIAl7RFJN X0VWRU5UX0lETEVfTk9USUZZLCBkcHVfY3J0Y19pZGxlX2ludGVycnVwdF9oYW5kbGVyfQo+ICB9 Owo+IAo+IC0vKiBkZWZhdWx0IGlucHV0IGZlbmNlIHRpbWVvdXQsIGluIG1zICovCj4gLSNkZWZp bmUgRFBVX0NSVENfSU5QVVRfRkVOQ0VfVElNRU9VVCAgICAxMDAwMAo+IC0KPiAtLyoKPiAtICog VGhlIGRlZmF1bHQgaW5wdXQgZmVuY2UgdGltZW91dCBpcyAyIHNlY29uZHMgd2hpbGUgbWF4IGFs bG93ZWQKPiAtICogcmFuZ2UgaXMgMTAgc2Vjb25kcy4gQW55IHZhbHVlIGFib3ZlIDEwIHNlY29u ZHMgYWRkcyBnbGl0Y2hlcyAKPiBiZXlvbmQKPiAtICogdG9sZXJhbmNlIGxpbWl0Lgo+IC0gKi8K PiAtI2RlZmluZSBEUFVfQ1JUQ19NQVhfSU5QVVRfRkVOQ0VfVElNRU9VVCAxMDAwMAo+IC0KPiAg LyogbGF5ZXIgbWl4ZXIgaW5kZXggb24gZHB1X2NydGMgKi8KPiAgI2RlZmluZSBMRUZUX01JWEVS IDAKPiAgI2RlZmluZSBSSUdIVF9NSVhFUiAxCj4gQEAgLTE5NDYsMjEgKzE5MzYsNiBAQCBzdGF0 aWMgdm9pZCBfZHB1X2NydGNfc2V0X2lkbGVfdGltZW91dChzdHJ1Y3QKPiBkcm1fY3J0YyAqY3J0 YywgdTY0IHZhbCkKPiAgCX0KPiAgfQo+IAo+IC0vKioKPiAtICogX2RwdV9jcnRjX3NldF9pbnB1 dF9mZW5jZV90aW1lb3V0IC0gdXBkYXRlIG5zIHZlcnNpb24gb2YgaW4gZmVuY2UKPiB0aW1lb3V0 Cj4gLSAqIEBjc3RhdGU6IFBvaW50ZXIgdG8gZHB1IGNydGMgc3RhdGUKPiAtICovCj4gLXN0YXRp YyB2b2lkIF9kcHVfY3J0Y19zZXRfaW5wdXRfZmVuY2VfdGltZW91dChzdHJ1Y3QgZHB1X2NydGNf c3RhdGUKPiAqY3N0YXRlKQo+IC17Cj4gLQlpZiAoIWNzdGF0ZSkgewo+IC0JCURQVV9FUlJPUigi aW52YWxpZCBjc3RhdGVcbiIpOwo+IC0JCXJldHVybjsKPiAtCX0KPiAtCWNzdGF0ZS0+aW5wdXRf ZmVuY2VfdGltZW91dF9ucyA9Cj4gLQkJZHB1X2NydGNfZ2V0X3Byb3BlcnR5KGNzdGF0ZSwKPiBD UlRDX1BST1BfSU5QVVRfRkVOQ0VfVElNRU9VVCk7Cj4gLQljc3RhdGUtPmlucHV0X2ZlbmNlX3Rp bWVvdXRfbnMgKj0gTlNFQ19QRVJfTVNFQzsKPiAtfQo+IC0KPiAgLyoqCj4gICAqIF9kcHVfY3J0 Y19zZXRfZGltX2xheWVyX3YxIC0gY29weSBkaW0gbGF5ZXIgc2V0dGluZ3MgZnJvbSB1c2Vyc3Bh Y2UKPiAgICogQGNzdGF0ZTogICAgICBQb2ludGVyIHRvIGRwdSBjcnRjIHN0YXRlCj4gQEAgLTIz ODUsNTMgKzIzNjAsNiBAQCBzdGF0aWMgaW50IAo+IF9kcHVfY3J0Y19jaGVja19kZXN0X3NjYWxl cl9kYXRhKHN0cnVjdAo+IGRybV9jcnRjICpjcnRjLAo+ICAJcmV0dXJuIHJldDsKPiAgfQo+IAo+ IC0vKioKPiAtICogX2RwdV9jcnRjX3dhaXRfZm9yX2ZlbmNlcyAtIHdhaXQgZm9yIGluY29taW5n IGZyYW1lYnVmZmVyIHN5bmMgCj4gZmVuY2VzCj4gLSAqIEBjcnRjOiBQb2ludGVyIHRvIENSVEMg b2JqZWN0Cj4gLSAqLwo+IC1zdGF0aWMgdm9pZCBfZHB1X2NydGNfd2FpdF9mb3JfZmVuY2VzKHN0 cnVjdCBkcm1fY3J0YyAqY3J0YykKPiAtewo+IC0Jc3RydWN0IGRybV9wbGFuZSAqcGxhbmUgPSBO VUxMOwo+IC0JdWludDMyX3Qgd2FpdF9tcyA9IDE7Cj4gLQlrdGltZV90IGt0X2VuZCwga3Rfd2Fp dDsKPiAtCWludCByYyA9IDA7Cj4gLQo+IC0JRFBVX0RFQlVHKCJcbiIpOwo+IC0KPiAtCWlmICgh Y3J0YyB8fCAhY3J0Yy0+c3RhdGUpIHsKPiAtCQlEUFVfRVJST1IoImludmFsaWQgY3J0Yy9zdGF0 ZSAlcEtcbiIsIGNydGMpOwo+IC0JCXJldHVybjsKPiAtCX0KPiAtCj4gLQkvKiB1c2UgbW9ub3Rv bmljIHRpbWVyIHRvIGxpbWl0IHRvdGFsIGZlbmNlIHdhaXQgdGltZSAqLwo+IC0Ja3RfZW5kID0g a3RpbWVfYWRkX25zKGt0aW1lX2dldCgpLAo+IC0JCXRvX2RwdV9jcnRjX3N0YXRlKGNydGMtPnN0 YXRlKS0+aW5wdXRfZmVuY2VfdGltZW91dF9ucyk7Cj4gLQo+IC0JLyoKPiAtCSAqIFdhaXQgZm9y IGZlbmNlcyBzZXF1ZW50aWFsbHksIGFzIGFsbCBvZiB0aGVtIG5lZWQgdG8gYmUKPiBzaWduYWxs ZWQKPiAtCSAqIGJlZm9yZSB3ZSBjYW4gcHJvY2VlZC4KPiAtCSAqCj4gLQkgKiBMaW1pdCB0b3Rh bCB3YWl0IHRpbWUgdG8gSU5QVVRfRkVOQ0VfVElNRU9VVCwgYnV0IHN0aWxsIGNhbGwKPiAtCSAq IGRwdV9wbGFuZV93YWl0X2lucHV0X2ZlbmNlIHdpdGggd2FpdF9tcyA9PSAwIGFmdGVyIHRoZSB0 aW1lb3V0Cj4gc28KPiAtCSAqIHRoYXQgZWFjaCBwbGFuZSBjYW4gY2hlY2sgaXRzIGZlbmNlIHN0 YXR1cyBhbmQgcmVhY3QKPiBhcHByb3ByaWF0ZWx5Cj4gLQkgKiBpZiBpdHMgZmVuY2UgaGFzIHRp bWVkIG91dC4gQ2FsbCBpbnB1dCBmZW5jZSB3YWl0IG11bHRpcGxlCj4gdGltZXMgaWYKPiAtCSAq IGZlbmNlIHdhaXQgaXMgaW50ZXJydXB0ZWQgZHVlIHRvIGludGVycnVwdCBjYWxsLgo+IC0JICov Cj4gLQlEUFVfQVRSQUNFX0JFR0lOKCJwbGFuZV93YWl0X2lucHV0X2ZlbmNlIik7Cj4gLQlkcm1f YXRvbWljX2NydGNfZm9yX2VhY2hfcGxhbmUocGxhbmUsIGNydGMpIHsKPiAtCQlkbyB7Cj4gLQkJ CWt0X3dhaXQgPSBrdGltZV9zdWIoa3RfZW5kLCBrdGltZV9nZXQoKSk7Cj4gLQkJCWlmIChrdGlt ZV9jb21wYXJlKGt0X3dhaXQsIGt0aW1lX3NldCgwLCAwKSkgPj0gMCkKPiAtCQkJCXdhaXRfbXMg PSBrdGltZV90b19tcyhrdF93YWl0KTsKPiAtCQkJZWxzZQo+IC0JCQkJd2FpdF9tcyA9IDA7Cj4g LQo+IC0JCQlyYyA9IGRwdV9wbGFuZV93YWl0X2lucHV0X2ZlbmNlKHBsYW5lLCB3YWl0X21zKTsK PiAtCQl9IHdoaWxlICh3YWl0X21zICYmIHJjID09IC1FUkVTVEFSVFNZUyk7Cj4gLQl9Cj4gLQlE UFVfQVRSQUNFX0VORCgicGxhbmVfd2FpdF9pbnB1dF9mZW5jZSIpOwo+IC19Cj4gLQo+ICBzdGF0 aWMgdm9pZCBfZHB1X2NydGNfc2V0dXBfbWl4ZXJfZm9yX2VuY29kZXIoCj4gIAkJc3RydWN0IGRy bV9jcnRjICpjcnRjLAo+ICAJCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jKQo+IEBAIC0yNzE2LDkg KzI2NDQsNiBAQCBzdGF0aWMgdm9pZCBkcHVfY3J0Y19hdG9taWNfZmx1c2goc3RydWN0IGRybV9j cnRjCj4gKmNydGMsCj4gIAlkcm1fYXRvbWljX2NydGNfZm9yX2VhY2hfcGxhbmUocGxhbmUsIGNy dGMpCj4gIAkJZHB1X3BsYW5lX3Jlc3RvcmUocGxhbmUpOwo+IAo+IC0JLyogd2FpdCBmb3IgYWNx dWlyZSBmZW5jZXMgYmVmb3JlIGFueXRoaW5nIGVsc2UgaXMgZG9uZSAqLwo+IC0JX2RwdV9jcnRj X3dhaXRfZm9yX2ZlbmNlcyhjcnRjKTsKPiAtCj4gIAlpZiAoIWNzdGF0ZS0+cnNjX3VwZGF0ZSkg ewo+ICAJCWRybV9mb3JfZWFjaF9lbmNvZGVyKGVuY29kZXIsIGRldikgewo+ICAJCQlpZiAoZW5j b2Rlci0+Y3J0YyAhPSBjcnRjKQo+IEBAIC0zMTc4LDggKzMxMDMsNiBAQCBzdGF0aWMgdm9pZCBk cHVfY3J0Y19yZXNldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4gIAkJCSZjc3RhdGUtPnByb3Bl cnR5X3N0YXRlLAo+ICAJCQljc3RhdGUtPnByb3BlcnR5X3ZhbHVlcyk7Cj4gCj4gLQlfZHB1X2Ny dGNfc2V0X2lucHV0X2ZlbmNlX3RpbWVvdXQoY3N0YXRlKTsKPiAtCj4gIAlfZHB1X2NydGNfcnBf cmVzZXQoJmNzdGF0ZS0+cnAsICZkcHVfY3J0Yy0+cnBfbG9jaywKPiAgCQkJJmRwdV9jcnRjLT5y cF9oZWFkKTsKPiAKPiBAQCAtMzkyOSwxMCArMzg1Miw2IEBAIHN0YXRpYyB2b2lkIGRwdV9jcnRj X2luc3RhbGxfcHJvcGVydGllcyhzdHJ1Y3QKPiBkcm1fY3J0YyAqY3J0YywKPiAgCX0KPiAKPiAg CS8qIHJhbmdlIHByb3BlcnRpZXMgKi8KPiAtCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX3JhbmdlKCZk cHVfY3J0Yy0+cHJvcGVydHlfaW5mbywKPiAtCQkiaW5wdXRfZmVuY2VfdGltZW91dCIsIDB4MCwg MCwKPiBEUFVfQ1JUQ19NQVhfSU5QVVRfRkVOQ0VfVElNRU9VVCwKPiAtCQlEUFVfQ1JUQ19JTlBV VF9GRU5DRV9USU1FT1VULAo+IENSVENfUFJPUF9JTlBVVF9GRU5DRV9USU1FT1VUKTsKPiAtCj4g IAltc21fcHJvcGVydHlfaW5zdGFsbF9yYW5nZSgmZHB1X2NydGMtPnByb3BlcnR5X2luZm8sCj4g IAkJCSJjb3JlX2NsayIsIDB4MCwgMCwgVTY0X01BWCwKPiAgCQkJZHB1X2ttcy0+cGVyZi5tYXhf Y29yZV9jbGtfcmF0ZSwKPiBAQCAtNDEyMSw5ICs0MDQwLDYgQEAgc3RhdGljIGludCBkcHVfY3J0 Y19hdG9taWNfc2V0X3Byb3BlcnR5KHN0cnVjdAo+IGRybV9jcnRjICpjcnRjLAo+ICAJCQlpZHgg PSBtc21fcHJvcGVydHlfaW5kZXgoJmRwdV9jcnRjLT5wcm9wZXJ0eV9pbmZvLAo+ICAJCQkJCXBy b3BlcnR5KTsKPiAgCQkJc3dpdGNoIChpZHgpIHsKPiAtCQkJY2FzZSBDUlRDX1BST1BfSU5QVVRf RkVOQ0VfVElNRU9VVDoKPiAtCQkJCV9kcHVfY3J0Y19zZXRfaW5wdXRfZmVuY2VfdGltZW91dChj c3RhdGUpOwo+IC0JCQkJYnJlYWs7Cj4gIAkJCWNhc2UgQ1JUQ19QUk9QX0RJTV9MQVlFUl9WMToK PiAgCQkJCV9kcHVfY3J0Y19zZXRfZGltX2xheWVyX3YxKGNzdGF0ZSwKPiAgCQkJCQkJCSh2b2lk IF9fdXNlcgo+ICopdmFsKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2ZlbmNlLmMKPiBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9m ZW5jZS5jCj4gZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggNDlmZmQ3MTM4ZWJhLi4w MDAwMDAwMDAwMDAKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZmVu Y2UuYwo+ICsrKyAvZGV2L251bGwKPiBAQCAtMSw0MDQgKzAsMCBAQAo+IC0vKiBDb3B5cmlnaHQg KGMpIDIwMTYtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu Cj4gLSAqCj4gLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgCj4gbW9kaWZ5Cj4gLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAo+IC0gKiBvbmx5IHZl cnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPiAt ICoKPiAtICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCj4gLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPiAtICogR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiAtICovCj4gLQo+IC0jaW5jbHVkZSA8 bGludXgvc3luY19maWxlLmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9kbWEtZmVuY2UuaD4KPiAtI2lu Y2x1ZGUgIm1zbV9kcnYuaCIKPiAtI2luY2x1ZGUgImRwdV9rbXMuaCIKPiAtI2luY2x1ZGUgImRw dV9mZW5jZS5oIgo+IC0KPiAtI2RlZmluZSBUSU1FTElORV9WQUxfTEVOR1RICQkxMjgKPiAtCj4g LXZvaWQgKmRwdV9zeW5jX2dldCh1aW50NjRfdCBmZCkKPiAtewo+IC0JLyogZm9yY2Ugc2lnbmVk IGNvbXBhcmUsIGZkZ2V0IGFjY2VwdHMgYW4gaW50IGFyZ3VtZW50ICovCj4gLQlyZXR1cm4gKHNp Z25lZCBpbnQpZmQgPj0gMCA/IHN5bmNfZmlsZV9nZXRfZmVuY2UoZmQpIDogTlVMTDsKPiAtfQo+ IC0KPiAtdm9pZCBkcHVfc3luY19wdXQodm9pZCAqZmVuY2UpCj4gLXsKPiAtCWlmIChmZW5jZSkK PiAtCQlkbWFfZmVuY2VfcHV0KGZlbmNlKTsKPiAtfQo+IC0KPiAtc2lnbmVkIGxvbmcgZHB1X3N5 bmNfd2FpdCh2b2lkICpmbmMsIGxvbmcgdGltZW91dF9tcykKPiAtewo+IC0Jc3RydWN0IGRtYV9m ZW5jZSAqZmVuY2UgPSBmbmM7Cj4gLQlpbnQgcmM7Cj4gLQljaGFyIHRpbWVsaW5lX3N0cltUSU1F TElORV9WQUxfTEVOR1RIXTsKPiAtCj4gLQlpZiAoIWZlbmNlKQo+IC0JCXJldHVybiAtRUlOVkFM Owo+IC0JZWxzZSBpZiAoZG1hX2ZlbmNlX2lzX3NpZ25hbGVkKGZlbmNlKSkKPiAtCQlyZXR1cm4g dGltZW91dF9tcyA/IG1zZWNzX3RvX2ppZmZpZXModGltZW91dF9tcykgOiAxOwo+IC0KPiAtCXJj ID0gZG1hX2ZlbmNlX3dhaXRfdGltZW91dChmZW5jZSwgdHJ1ZSwKPiAtCQkJCW1zZWNzX3RvX2pp ZmZpZXModGltZW91dF9tcykpOwo+IC0JaWYgKCFyYyB8fCAocmMgPT0gLUVJTlZBTCkpIHsKPiAt CQlpZiAoZmVuY2UtPm9wcy0+dGltZWxpbmVfdmFsdWVfc3RyKQo+IC0JCQlmZW5jZS0+b3BzLT50 aW1lbGluZV92YWx1ZV9zdHIoZmVuY2UsCj4gLQkJCQkJdGltZWxpbmVfc3RyLAo+IFRJTUVMSU5F X1ZBTF9MRU5HVEgpOwo+IC0KPiAtCQlEUFVfRVJST1IoCj4gLQkJCSJmZW5jZSBkcml2ZXIgbmFt ZTolcyB0aW1lbGluZSBuYW1lOiVzIHNlcW5vOjB4JXgKPiB0aW1lbGluZTolcyBzaWduYWxlZDow eCV4XG4iLAo+IC0JCQlmZW5jZS0+b3BzLT5nZXRfZHJpdmVyX25hbWUoZmVuY2UpLAo+IC0JCQlm ZW5jZS0+b3BzLT5nZXRfdGltZWxpbmVfbmFtZShmZW5jZSksCj4gLQkJCWZlbmNlLT5zZXFubywg dGltZWxpbmVfc3RyLAo+IC0JCQlmZW5jZS0+b3BzLT5zaWduYWxlZCA/Cj4gLQkJCQlmZW5jZS0+ b3BzLT5zaWduYWxlZChmZW5jZSkgOiAweGZmZmZmZmZmKTsKPiAtCX0KPiAtCj4gLQlyZXR1cm4g cmM7Cj4gLX0KPiAtCj4gLXVpbnQzMl90IGRwdV9zeW5jX2dldF9uYW1lX3ByZWZpeCh2b2lkICpm ZW5jZSkKPiAtewo+IC0JY29uc3QgY2hhciAqbmFtZTsKPiAtCXVpbnQzMl90IGksIHByZWZpeDsK PiAtCXN0cnVjdCBkbWFfZmVuY2UgKmYgPSBmZW5jZTsKPiAtCj4gLQlpZiAoIWZlbmNlKQo+IC0J CXJldHVybiAwOwo+IC0KPiAtCW5hbWUgPSBmLT5vcHMtPmdldF9kcml2ZXJfbmFtZShmKTsKPiAt CWlmICghbmFtZSkKPiAtCQlyZXR1cm4gMDsKPiAtCj4gLQlwcmVmaXggPSAweDA7Cj4gLQlmb3Ig KGkgPSAwOyBpIDwgc2l6ZW9mKHVpbnQzMl90KSAmJiBuYW1lW2ldOyArK2kpCj4gLQkJcHJlZml4 ID0gKHByZWZpeCA8PCBDSEFSX0JJVCkgfCBuYW1lW2ldOwo+IC0KPiAtCXJldHVybiBwcmVmaXg7 Cj4gLX0KPiAtCj4gLS8qKgo+IC0gKiBzdHJ1Y3QgZHB1X2ZlbmNlIC0gcmVsZWFzZS9yZXRpcmUg ZmVuY2Ugc3RydWN0dXJlCj4gLSAqIEBmZW5jZTogYmFzZSBmZW5jZSBzdHJ1Y3R1cmUKPiAtICog QG5hbWU6IG5hbWUgb2YgZWFjaCBmZW5jZS0gaXQgaXMgZmVuY2UgdGltZWxpbmUgKyBjb21taXRf Y291bnQKPiAtICogQGZlbmNlX2xpc3Q6IGxpc3QgdG8gYXNzb2NpYXRlZCB0aGlzIGZlbmNlIG9u IHRpbWVsaW5lL2NvbnRleHQKPiAtICogQGZkOiBmZCBhdHRhY2hlZCB0byB0aGlzIGZlbmNlIC0g ZGVidWdnaW5nIHB1cnBvc2UuCj4gLSAqLwo+IC1zdHJ1Y3QgZHB1X2ZlbmNlIHsKPiAtCXN0cnVj dCBkbWFfZmVuY2UgYmFzZTsKPiAtCXN0cnVjdCBkcHVfZmVuY2VfY29udGV4dCAqY3R4Owo+IC0J Y2hhciBuYW1lW0RQVV9GRU5DRV9OQU1FX1NJWkVdOwo+IC0Jc3RydWN0IGxpc3RfaGVhZAlmZW5j ZV9saXN0Owo+IC0JaW50IGZkOwo+IC19Owo+IC0KPiAtc3RhdGljIHZvaWQgZHB1X2ZlbmNlX2Rl c3Ryb3koc3RydWN0IGtyZWYgKmtyZWYpCj4gLXsKPiAtfQo+IC0KPiAtc3RhdGljIGlubGluZSBz dHJ1Y3QgZHB1X2ZlbmNlICp0b19kcHVfZmVuY2Uoc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpCj4g LXsKPiAtCXJldHVybiBjb250YWluZXJfb2YoZmVuY2UsIHN0cnVjdCBkcHVfZmVuY2UsIGJhc2Up Owo+IC19Cj4gLQo+IC1zdGF0aWMgY29uc3QgY2hhciAqZHB1X2ZlbmNlX2dldF9kcml2ZXJfbmFt ZShzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSkKPiAtewo+IC0Jc3RydWN0IGRwdV9mZW5jZSAqZiA9 IHRvX2RwdV9mZW5jZShmZW5jZSk7Cj4gLQo+IC0JcmV0dXJuIGYtPm5hbWU7Cj4gLX0KPiAtCj4g LXN0YXRpYyBjb25zdCBjaGFyICpkcHVfZmVuY2VfZ2V0X3RpbWVsaW5lX25hbWUoc3RydWN0IGRt YV9mZW5jZSAKPiAqZmVuY2UpCj4gLXsKPiAtCXN0cnVjdCBkcHVfZmVuY2UgKmYgPSB0b19kcHVf ZmVuY2UoZmVuY2UpOwo+IC0KPiAtCXJldHVybiBmLT5jdHgtPm5hbWU7Cj4gLX0KPiAtCj4gLXN0 YXRpYyBib29sIGRwdV9mZW5jZV9lbmFibGVfc2lnbmFsaW5nKHN0cnVjdCBkbWFfZmVuY2UgKmZl bmNlKQo+IC17Cj4gLQlyZXR1cm4gdHJ1ZTsKPiAtfQo+IC0KPiAtc3RhdGljIGJvb2wgZHB1X2Zl bmNlX3NpZ25hbGVkKHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKQo+IC17Cj4gLQlzdHJ1Y3QgZHB1 X2ZlbmNlICpmID0gdG9fZHB1X2ZlbmNlKGZlbmNlKTsKPiAtCWJvb2wgc3RhdHVzOwo+IC0KPiAt CXN0YXR1cyA9IChpbnQpKGZlbmNlLT5zZXFubyAtIGYtPmN0eC0+ZG9uZV9jb3VudCkgPD0gMCA/ IHRydWUgOgo+IGZhbHNlOwo+IC0JRFBVX0RFQlVHKCJzdGF0dXM6JWQgZmVuY2Ugc2VxOiVkIGFu ZCB0aW1lbGluZTolZFxuIiwKPiAtCQkJc3RhdHVzLCBmZW5jZS0+c2Vxbm8sIGYtPmN0eC0+ZG9u ZV9jb3VudCk7Cj4gLQlyZXR1cm4gc3RhdHVzOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBkcHVf ZmVuY2VfcmVsZWFzZShzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSkKPiAtewo+IC0Jc3RydWN0IGRw dV9mZW5jZSAqZjsKPiAtCj4gLQlpZiAoZmVuY2UpIHsKPiAtCQlmID0gdG9fZHB1X2ZlbmNlKGZl bmNlKTsKPiAtCQlrZnJlZShmKTsKPiAtCX0KPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgZHB1X2Zl bmNlX3ZhbHVlX3N0cihzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSwgY2hhciAqc3RyLCAKPiBpbnQK PiBzaXplKQo+IC17Cj4gLQlpZiAoIWZlbmNlIHx8ICFzdHIpCj4gLQkJcmV0dXJuOwo+IC0KPiAt CXNucHJpbnRmKHN0ciwgc2l6ZSwgIiVkIiwgZmVuY2UtPnNlcW5vKTsKPiAtfQo+IC0KPiAtc3Rh dGljIHZvaWQgZHB1X2ZlbmNlX3RpbWVsaW5lX3ZhbHVlX3N0cihzdHJ1Y3QgZG1hX2ZlbmNlICpm ZW5jZSwgY2hhcgo+ICpzdHIsCj4gLQkJaW50IHNpemUpCj4gLXsKPiAtCXN0cnVjdCBkcHVfZmVu Y2UgKmYgPSB0b19kcHVfZmVuY2UoZmVuY2UpOwo+IC0KPiAtCWlmICghZmVuY2UgfHwgIWYtPmN0 eCB8fCAhc3RyKQo+IC0JCXJldHVybjsKPiAtCj4gLQlzbnByaW50ZihzdHIsIHNpemUsICIlZCIs IGYtPmN0eC0+ZG9uZV9jb3VudCk7Cj4gLX0KPiAtCj4gLXN0YXRpYyBzdHJ1Y3QgZG1hX2ZlbmNl X29wcyBkcHVfZmVuY2Vfb3BzID0gewo+IC0JLmdldF9kcml2ZXJfbmFtZSA9IGRwdV9mZW5jZV9n ZXRfZHJpdmVyX25hbWUsCj4gLQkuZ2V0X3RpbWVsaW5lX25hbWUgPSBkcHVfZmVuY2VfZ2V0X3Rp bWVsaW5lX25hbWUsCj4gLQkuZW5hYmxlX3NpZ25hbGluZyA9IGRwdV9mZW5jZV9lbmFibGVfc2ln bmFsaW5nLAo+IC0JLnNpZ25hbGVkID0gZHB1X2ZlbmNlX3NpZ25hbGVkLAo+IC0JLndhaXQgPSBk bWFfZmVuY2VfZGVmYXVsdF93YWl0LAo+IC0JLnJlbGVhc2UgPSBkcHVfZmVuY2VfcmVsZWFzZSwK PiAtCS5mZW5jZV92YWx1ZV9zdHIgPSBkcHVfZmVuY2VfdmFsdWVfc3RyLAo+IC0JLnRpbWVsaW5l X3ZhbHVlX3N0ciA9IGRwdV9mZW5jZV90aW1lbGluZV92YWx1ZV9zdHIsCj4gLX07Cj4gLQo+IC0v KioKPiAtICogX2RwdV9mZW5jZV9jcmVhdGVfZmQgLSBjcmVhdGUgZmVuY2Ugb2JqZWN0IGFuZCBy ZXR1cm4gYW4gZmQgZm9yIGl0Cj4gLSAqIFRoaXMgZnVuY3Rpb24gaXMgTk9UIHRocmVhZC1zYWZl Lgo+IC0gKiBAdGltZWxpbmU6IFRpbWVsaW5lIHRvIGFzc29jaWF0ZSB3aXRoIGZlbmNlCj4gLSAq IEB2YWw6IFRpbWVsaW5lIHZhbHVlIGF0IHdoaWNoIHRvIHNpZ25hbCB0aGUgZmVuY2UKPiAtICog UmV0dXJuOiBGaWxlIGRlc2NyaXB0b3Igb24gc3VjY2Vzcywgb3IgZXJyb3IgY29kZSBvbiBlcnJv cgo+IC0gKi8KPiAtc3RhdGljIGludCBfZHB1X2ZlbmNlX2NyZWF0ZV9mZCh2b2lkICpmZW5jZV9j dHgsIHVpbnQzMl90IHZhbCkKPiAtewo+IC0Jc3RydWN0IGRwdV9mZW5jZSAqZHB1X2ZlbmNlOwo+ IC0Jc3RydWN0IHN5bmNfZmlsZSAqc3luY19maWxlOwo+IC0Jc2lnbmVkIGludCBmZCA9IC1FSU5W QUw7Cj4gLQlzdHJ1Y3QgZHB1X2ZlbmNlX2NvbnRleHQgKmN0eCA9IGZlbmNlX2N0eDsKPiAtCj4g LQlpZiAoIWN0eCkgewo+IC0JCURQVV9FUlJPUigiaW52YWxpZCBjb250ZXh0XG4iKTsKPiAtCQln b3RvIGV4aXQ7Cj4gLQl9Cj4gLQo+IC0JZHB1X2ZlbmNlID0ga3phbGxvYyhzaXplb2YoKmRwdV9m ZW5jZSksIEdGUF9LRVJORUwpOwo+IC0JaWYgKCFkcHVfZmVuY2UpCj4gLQkJcmV0dXJuIC1FTk9N RU07Cj4gLQo+IC0JZHB1X2ZlbmNlLT5jdHggPSBmZW5jZV9jdHg7Cj4gLQlzbnByaW50ZihkcHVf ZmVuY2UtPm5hbWUsIERQVV9GRU5DRV9OQU1FX1NJWkUsICJkcHVfZmVuY2U6JXM6JXUiLAo+IC0J CQkJCQlkcHVfZmVuY2UtPmN0eC0+bmFtZSwKPiB2YWwpOwo+IC0JZG1hX2ZlbmNlX2luaXQoJmRw dV9mZW5jZS0+YmFzZSwgJmRwdV9mZW5jZV9vcHMsICZjdHgtPmxvY2ssCj4gLQkJY3R4LT5jb250 ZXh0LCB2YWwpOwo+IC0KPiAtCS8qIGNyZWF0ZSBmZCAqLwo+IC0JZmQgPSBnZXRfdW51c2VkX2Zk X2ZsYWdzKDApOwo+IC0JaWYgKGZkIDwgMCkgewo+IC0JCWRtYV9mZW5jZV9wdXQoJmRwdV9mZW5j ZS0+YmFzZSk7Cj4gLQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gZ2V0X3VudXNlZF9mZF9mbGFncygp LCAlc1xuIiwKPiAtCQkJCQkJCWRwdV9mZW5jZS0+bmFtZSk7Cj4gLQkJZ290byBleGl0Owo+IC0J fQo+IC0KPiAtCS8qIGNyZWF0ZSBmZW5jZSAqLwo+IC0Jc3luY19maWxlID0gc3luY19maWxlX2Ny ZWF0ZSgmZHB1X2ZlbmNlLT5iYXNlKTsKPiAtCWlmIChzeW5jX2ZpbGUgPT0gTlVMTCkgewo+IC0J CXB1dF91bnVzZWRfZmQoZmQpOwo+IC0JCWZkID0gLUVJTlZBTDsKPiAtCQlkbWFfZmVuY2VfcHV0 KCZkcHVfZmVuY2UtPmJhc2UpOwo+IC0JCURQVV9FUlJPUigiY291bGRuJ3QgY3JlYXRlIGZlbmNl LCAlc1xuIiwgZHB1X2ZlbmNlLT5uYW1lKTsKPiAtCQlnb3RvIGV4aXQ7Cj4gLQl9Cj4gLQo+IC0J ZmRfaW5zdGFsbChmZCwgc3luY19maWxlLT5maWxlKTsKPiAtCWRwdV9mZW5jZS0+ZmQgPSBmZDsK PiAtCWtyZWZfZ2V0KCZjdHgtPmtyZWYpOwo+IC0KPiAtCXNwaW5fbG9jaygmY3R4LT5saXN0X2xv Y2spOwo+IC0JbGlzdF9hZGRfdGFpbCgmZHB1X2ZlbmNlLT5mZW5jZV9saXN0LCAmY3R4LT5mZW5j ZV9saXN0X2hlYWQpOwo+IC0Jc3Bpbl91bmxvY2soJmN0eC0+bGlzdF9sb2NrKTsKPiAtCj4gLWV4 aXQ6Cj4gLQlyZXR1cm4gZmQ7Cj4gLX0KPiAtCj4gLWludCBkcHVfZmVuY2VfaW5pdChzdHJ1Y3Qg ZHB1X2ZlbmNlX2NvbnRleHQgKmN0eCwKPiAtCQljb25zdCBjaGFyICpuYW1lLCB1aW50MzJfdCBk cm1faWQpCj4gLXsKPiAtCWlmICghY3R4IHx8ICFuYW1lKSB7Cj4gLQkJRFBVX0VSUk9SKCJpbnZh bGlkIGFyZ3VtZW50KHMpXG4iKTsKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAtCX0KPiAtCW1lbXNl dChjdHgsIDAsIHNpemVvZigqY3R4KSk7Cj4gLQo+IC0Jc3RybGNweShjdHgtPm5hbWUsIG5hbWUs IEFSUkFZX1NJWkUoY3R4LT5uYW1lKSk7Cj4gLQljdHgtPmRybV9pZCA9IGRybV9pZDsKPiAtCWty ZWZfaW5pdCgmY3R4LT5rcmVmKTsKPiAtCWN0eC0+Y29udGV4dCA9IGRtYV9mZW5jZV9jb250ZXh0 X2FsbG9jKDEpOwo+IC0KPiAtCXNwaW5fbG9ja19pbml0KCZjdHgtPmxvY2spOwo+IC0Jc3Bpbl9s b2NrX2luaXQoJmN0eC0+bGlzdF9sb2NrKTsKPiAtCUlOSVRfTElTVF9IRUFEKCZjdHgtPmZlbmNl X2xpc3RfaGVhZCk7Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLXZvaWQgZHB1X2ZlbmNl X2RlaW5pdChzdHJ1Y3QgZHB1X2ZlbmNlX2NvbnRleHQgKmN0eCkKPiAtewo+IC0JaWYgKCFjdHgp IHsKPiAtCQlEUFVfRVJST1IoImludmFsaWQgZmVuY2VcbiIpOwo+IC0JCXJldHVybjsKPiAtCX0K PiAtCj4gLQlrcmVmX3B1dCgmY3R4LT5rcmVmLCBkcHVfZmVuY2VfZGVzdHJveSk7Cj4gLX0KPiAt Cj4gLXZvaWQgZHB1X2ZlbmNlX3ByZXBhcmUoc3RydWN0IGRwdV9mZW5jZV9jb250ZXh0ICpjdHgp Cj4gLXsKPiAtCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gLQo+IC0JaWYgKCFjdHgpIHsKPiAtCQlE UFVfRVJST1IoImludmFsaWQgYXJndW1lbnQocyksIGZlbmNlICVwS1xuIiwgY3R4KTsKPiAtCX0g ZWxzZSB7Cj4gLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmN0eC0+bG9jaywgZmxhZ3MpOwo+IC0JCSsr Y3R4LT5jb21taXRfY291bnQ7Cj4gLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3R4LT5sb2Nr LCBmbGFncyk7Cj4gLQl9Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIF9kcHVfZmVuY2VfdHJpZ2dl cihzdHJ1Y3QgZHB1X2ZlbmNlX2NvbnRleHQgKmN0eCwga3RpbWVfdCAKPiB0cykKPiAtewo+IC0J dW5zaWduZWQgbG9uZyBmbGFnczsKPiAtCXN0cnVjdCBkcHVfZmVuY2UgKmZjLCAqbmV4dDsKPiAt CWJvb2wgaXNfc2lnbmFsZWQgPSBmYWxzZTsKPiAtCXN0cnVjdCBsaXN0X2hlYWQgbG9jYWxfbGlz dF9oZWFkOwo+IC0KPiAtCUlOSVRfTElTVF9IRUFEKCZsb2NhbF9saXN0X2hlYWQpOwo+IC0KPiAt CXNwaW5fbG9jaygmY3R4LT5saXN0X2xvY2spOwo+IC0JaWYgKGxpc3RfZW1wdHkoJmN0eC0+ZmVu Y2VfbGlzdF9oZWFkKSkgewo+IC0JCURQVV9ERUJVRygibm90aGluZyB0byB0cmlnZ2VyIVxuIik7 Cj4gLQkJc3Bpbl91bmxvY2soJmN0eC0+bGlzdF9sb2NrKTsKPiAtCQlyZXR1cm47Cj4gLQl9Cj4g LQo+IC0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZjLCBuZXh0LCAmY3R4LT5mZW5jZV9saXN0 X2hlYWQsCj4gZmVuY2VfbGlzdCkKPiAtCQlsaXN0X21vdmUoJmZjLT5mZW5jZV9saXN0LCAmbG9j YWxfbGlzdF9oZWFkKTsKPiAtCXNwaW5fdW5sb2NrKCZjdHgtPmxpc3RfbG9jayk7Cj4gLQo+IC0J bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZjLCBuZXh0LCAmbG9jYWxfbGlzdF9oZWFkLCBmZW5j ZV9saXN0KSB7Cj4gLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmN0eC0+bG9jaywgZmxhZ3MpOwo+IC0J CWZjLT5iYXNlLnRpbWVzdGFtcCA9IHRzOwo+IC0JCWlzX3NpZ25hbGVkID0gZG1hX2ZlbmNlX2lz X3NpZ25hbGVkX2xvY2tlZCgmZmMtPmJhc2UpOwo+IC0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUo JmN0eC0+bG9jaywgZmxhZ3MpOwo+IC0KPiAtCQlpZiAoaXNfc2lnbmFsZWQpIHsKPiAtCQkJbGlz dF9kZWxfaW5pdCgmZmMtPmZlbmNlX2xpc3QpOwo+IC0JCQlkbWFfZmVuY2VfcHV0KCZmYy0+YmFz ZSk7Cj4gLQkJCWtyZWZfcHV0KCZjdHgtPmtyZWYsIGRwdV9mZW5jZV9kZXN0cm95KTsKPiAtCQl9 IGVsc2Ugewo+IC0JCQlzcGluX2xvY2soJmN0eC0+bGlzdF9sb2NrKTsKPiAtCQkJbGlzdF9tb3Zl KCZmYy0+ZmVuY2VfbGlzdCwgJmN0eC0+ZmVuY2VfbGlzdF9oZWFkKTsKPiAtCQkJc3Bpbl91bmxv Y2soJmN0eC0+bGlzdF9sb2NrKTsKPiAtCQl9Cj4gLQl9Cj4gLX0KPiAtCj4gLWludCBkcHVfZmVu Y2VfY3JlYXRlKHN0cnVjdCBkcHVfZmVuY2VfY29udGV4dCAqY3R4LCB1aW50NjRfdCAqdmFsLAo+ IC0JCQkJCQkJdWludDMyX3Qgb2Zmc2V0KQo+IC17Cj4gLQl1aW50MzJfdCB0cmlnZ2VyX3ZhbHVl Owo+IC0JaW50IGZkLCByYyA9IC1FSU5WQUw7Cj4gLQl1bnNpZ25lZCBsb25nIGZsYWdzOwo+IC0K PiAtCWlmICghY3R4IHx8ICF2YWwpIHsKPiAtCQlEUFVfRVJST1IoImludmFsaWQgYXJndW1lbnQo cyksIGZlbmNlICVkLCBwdmFsICVkXG4iLAo+IC0JCQkJY3R4ICE9IE5VTEwsIHZhbCAhPSBOVUxM KTsKPiAtCQlyZXR1cm4gcmM7Cj4gLQl9Cj4gLQo+IC0JLyoKPiAtCSAqIEFsbG93IGNyZWF0ZWQg ZmVuY2VzIHRvIGhhdmUgYSBjb25zdGFudCBvZmZzZXQgd2l0aCByZXNwZWN0Cj4gLQkgKiB0byB0 aGUgdGltZWxpbmUuIFRoaXMgYWxsb3dzIHVzIHRvIGRlbGF5IHRoZSBmZW5jZSBzaWduYWxsaW5n Cj4gLQkgKiB3LnIudC4gdGhlIGNvbW1pdCBjb21wbGV0aW9uIChlLmcuLCBhbiBvZmZzZXQgb2Yg KzEgd291bGQKPiAtCSAqIGNhdXNlIGZlbmNlcyByZXR1cm5lZCBkdXJpbmcgYSBwYXJ0aWN1bGFy IGNvbW1pdCB0byBzaWduYWwKPiAtCSAqIGFmdGVyIGFuIGFkZGl0aW9uYWwgZGVsYXkgb2Ygb25l IGNvbW1pdCwgcmF0aGVyIHRoYW4gYXQgdGhlCj4gLQkgKiBlbmQgb2YgdGhlIGN1cnJlbnQgb25l Lgo+IC0JICovCj4gLQlzcGluX2xvY2tfaXJxc2F2ZSgmY3R4LT5sb2NrLCBmbGFncyk7Cj4gLQl0 cmlnZ2VyX3ZhbHVlID0gY3R4LT5jb21taXRfY291bnQgKyBvZmZzZXQ7Cj4gLQo+IC0Jc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmY3R4LT5sb2NrLCBmbGFncyk7Cj4gLQo+IC0JZmQgPSBfZHB1X2Zl bmNlX2NyZWF0ZV9mZChjdHgsIHRyaWdnZXJfdmFsdWUpOwo+IC0JKnZhbCA9IGZkOwo+IC0JRFBV X0RFQlVHKCJmZW5jZV9jcmVhdGU6OmZkOiVkIHRyaWdnZXI6JWQgY29tbWl0OiVkIG9mZnNldDol ZFxuIiwKPiAtCQkJCWZkLCB0cmlnZ2VyX3ZhbHVlLCBjdHgtPmNvbW1pdF9jb3VudCwKPiBvZmZz ZXQpOwo+IC0KPiAtCURQVV9FVlQzMihjdHgtPmRybV9pZCwgdHJpZ2dlcl92YWx1ZSwgZmQpOwo+ IC0KPiAtCWlmIChmZCA+PSAwKSB7Cj4gLQkJcmMgPSAwOwo+IC0JCV9kcHVfZmVuY2VfdHJpZ2dl cihjdHgsIGt0aW1lX2dldCgpKTsKPiAtCX0gZWxzZSB7Cj4gLQkJcmMgPSBmZDsKPiAtCX0KPiAt Cj4gLQlyZXR1cm4gcmM7Cj4gLX0KPiAtCj4gLXZvaWQgZHB1X2ZlbmNlX3NpZ25hbChzdHJ1Y3Qg ZHB1X2ZlbmNlX2NvbnRleHQgKmN0eCwga3RpbWVfdCB0cywKPiAtCQkJCQkJCWJvb2wKPiByZXNl dF90aW1lbGluZSkKPiAtewo+IC0JdW5zaWduZWQgbG9uZyBmbGFnczsKPiAtCj4gLQlpZiAoIWN0 eCkgewo+IC0JCURQVV9FUlJPUigiaW52YWxpZCBjdHgsICVwS1xuIiwgY3R4KTsKPiAtCQlyZXR1 cm47Cj4gLQl9Cj4gLQo+IC0Jc3Bpbl9sb2NrX2lycXNhdmUoJmN0eC0+bG9jaywgZmxhZ3MpOwo+ IC0JaWYgKHJlc2V0X3RpbWVsaW5lKSB7Cj4gLQkJaWYgKChpbnQpKGN0eC0+ZG9uZV9jb3VudCAt IGN0eC0+Y29tbWl0X2NvdW50KSA8IDApIHsKPiAtCQkJRFBVX0VSUk9SKAo+IC0JCQkJInRpbWVs aW5lIHJlc2V0IGF0dGVtcHQhIGRvbmUgY291bnQ6JWQKPiBjb21taXQ6JWRcbiIsCj4gLQkJCQlj dHgtPmRvbmVfY291bnQsIGN0eC0+Y29tbWl0X2NvdW50KTsKPiAtCQkJY3R4LT5kb25lX2NvdW50 ID0gY3R4LT5jb21taXRfY291bnQ7Cj4gLQkJCURQVV9FVlQzMihjdHgtPmRybV9pZCwgY3R4LT5k b25lX2NvdW50LAo+IC0JCQkJY3R4LT5jb21taXRfY291bnQsIGt0aW1lX3RvX3VzKHRzKSwKPiAt CQkJCXJlc2V0X3RpbWVsaW5lLCBEUFVfRVZUTE9HX0ZBVEFMKTsKPiAtCQl9IGVsc2Ugewo+IC0J CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdHgtPmxvY2ssIGZsYWdzKTsKPiAtCQkJcmV0dXJu Owo+IC0JCX0KPiAtCX0gZWxzZSBpZiAoKGludCkoY3R4LT5kb25lX2NvdW50IC0gY3R4LT5jb21t aXRfY291bnQpIDwgMCkgewo+IC0JCSsrY3R4LT5kb25lX2NvdW50Owo+IC0JCURQVV9ERUJVRygi ZmVuY2Vfc2lnbmFsOmRvbmUgY291bnQ6JWQgY29tbWl0IGNvdW50OiVkXG4iLAo+IC0JCQkJCWN0 eC0+ZG9uZV9jb3VudCwKPiBjdHgtPmNvbW1pdF9jb3VudCk7Cj4gLQl9IGVsc2Ugewo+IC0JCURQ VV9FUlJPUigiZXh0cmEgc2lnbmFsIGF0dGVtcHQhIGRvbmUgY291bnQ6JWQKPiBjb21taXQ6JWRc biIsCj4gLQkJCQkJY3R4LT5kb25lX2NvdW50LAo+IGN0eC0+Y29tbWl0X2NvdW50KTsKPiAtCQlE UFVfRVZUMzIoY3R4LT5kcm1faWQsIGN0eC0+ZG9uZV9jb3VudCwgY3R4LT5jb21taXRfY291bnQs Cj4gLQkJCWt0aW1lX3RvX3VzKHRzKSwgcmVzZXRfdGltZWxpbmUsCj4gRFBVX0VWVExPR19GQVRB TCk7Cj4gLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3R4LT5sb2NrLCBmbGFncyk7Cj4gLQkJ cmV0dXJuOwo+IC0JfQo+IC0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3R4LT5sb2NrLCBmbGFn cyk7Cj4gLQo+IC0JRFBVX0VWVDMyKGN0eC0+ZHJtX2lkLCBjdHgtPmRvbmVfY291bnQsIGN0eC0+ Y29tbWl0X2NvdW50LAo+IC0JCQlrdGltZV90b191cyh0cykpOwo+IC0KPiAtCV9kcHVfZmVuY2Vf dHJpZ2dlcihjdHgsIHRzKTsKPiAtfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfZmVuY2UuaAo+IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2ZlbmNlLmgKPiBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCBmOTQzMDQ2ZDk2 YjguLjAwMDAwMDAwMDAwMAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9mZW5jZS5oCj4gKysrIC9kZXYvbnVsbAo+IEBAIC0xLDE5MCArMCwwIEBACj4gLS8qIENvcHly aWdodCAoYykgMjAxNi0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNl cnZlZC4KPiAtICoKPiAtICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciAKPiBtb2RpZnkKPiAtICogaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCj4gLSAqIG9u bHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u Lgo+IC0gKgo+IC0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiAtICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiAtICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+IC0gKiBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+IC0gKi8KPiAtCj4gLSNpZm5k ZWYgX0RQVV9GRU5DRV9IXwo+IC0jZGVmaW5lIF9EUFVfRkVOQ0VfSF8KPiAtCj4gLSNpbmNsdWRl IDxsaW51eC9rZXJuZWwuaD4KPiAtI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Cj4gLSNpbmNsdWRl IDxsaW51eC9tdXRleC5oPgo+IC0KPiAtI2lmbmRlZiBDSEFSX0JJVAo+IC0jZGVmaW5lIENIQVJf QklUIDggLyogZGVmaW5lIHRoaXMgaWYgbGltaXRzLmggbm90IGF2YWlsYWJsZSAqLwo+IC0jZW5k aWYKPiAtCj4gLSNkZWZpbmUgRFBVX0ZFTkNFX05BTUVfU0laRQkyNAo+IC0KPiAtLyoqCj4gLSAq IHN0cnVjdCBkcHVfZmVuY2VfY29udGV4dCAtIHJlbGVhc2UvcmV0aXJlIGZlbmNlIGNvbnRleHQv dGltZWxpbmUKPiBzdHJ1Y3R1cmUKPiAtICogQGNvbW1pdF9jb3VudDogTnVtYmVyIG9mIGRldGVj dGVkIGNvbW1pdHMgc2luY2UgYm9vdHVwCj4gLSAqIEBkb25lX2NvdW50OiBOdW1iZXIgb2YgY29t cGxldGVkIGNvbW1pdHMgc2luY2UgYm9vdHVwCj4gLSAqIEBkcm1faWQ6IElEIG51bWJlciBvZiBv d25pbmcgRFJNIE9iamVjdAo+IC0gKiBAcmVmOiBrcmVmIGNvdW50ZXIgb24gdGltZWxpbmUKPiAt ICogQGxvY2s6IHNwaW5sb2NrIGZvciBmZW5jZSBjb3VudGVyIHByb3RlY3Rpb24KPiAtICogQGxp c3RfbG9jazogc3BpbmxvY2sgZm9yIHRpbWVsaW5lIHByb3RlY3Rpb24KPiAtICogQGNvbnRleHQ6 IGZlbmNlIGNvbnRleHQKPiAtICogQGxpc3RfaGVhZDogZmVuY2UgbGlzdCB0byBob2xkIGFsbCB0 aGUgZmVuY2UgY3JlYXRlZCBvbiB0aGlzIAo+IGNvbnRleHQKPiAtICogQG5hbWU6IG5hbWUgb2Yg ZmVuY2UgY29udGV4dC90aW1lbGluZQo+IC0gKi8KPiAtc3RydWN0IGRwdV9mZW5jZV9jb250ZXh0 IHsKPiAtCXVuc2lnbmVkIGludCBjb21taXRfY291bnQ7Cj4gLQl1bnNpZ25lZCBpbnQgZG9uZV9j b3VudDsKPiAtCXVpbnQzMl90IGRybV9pZDsKPiAtCXN0cnVjdCBrcmVmIGtyZWY7Cj4gLQlzcGlu bG9ja190IGxvY2s7Cj4gLQlzcGlubG9ja190IGxpc3RfbG9jazsKPiAtCXU2NCBjb250ZXh0Owo+ IC0Jc3RydWN0IGxpc3RfaGVhZCBmZW5jZV9saXN0X2hlYWQ7Cj4gLQljaGFyIG5hbWVbRFBVX0ZF TkNFX05BTUVfU0laRV07Cj4gLX07Cj4gLQo+IC0jaWYgSVNfRU5BQkxFRChDT05GSUdfU1lOQ19G SUxFKQo+IC0vKioKPiAtICogZHB1X3N5bmNfZ2V0IC0gUXVlcnkgc3luYyBmZW5jZSBvYmplY3Qg ZnJvbSBhIGZpbGUgaGFuZGxlCj4gLSAqCj4gLSAqIE9uIHN1Y2Nlc3MsIHRoaXMgZnVuY3Rpb24g YWxzbyBpbmNyZW1lbnRzIHRoZSByZWZjb3VudCBvZiB0aGUgc3luYwo+IGZlbmNlCj4gLSAqCj4g LSAqIEBmZDogSW50ZWdlciBzeW5jIGZlbmNlIGhhbmRsZQo+IC0gKgo+IC0gKiBSZXR1cm46IFBv aW50ZXIgdG8gc3luYyBmZW5jZSBvYmplY3QsIG9yIE5VTEwKPiAtICovCj4gLXZvaWQgKmRwdV9z eW5jX2dldCh1aW50NjRfdCBmZCk7Cj4gLQo+IC0vKioKPiAtICogZHB1X3N5bmNfcHV0IC0gUmVs ZWFzZXMgYSBzeW5jIGZlbmNlIG9iamVjdCBhY3F1aXJlZCBieSAKPiBAZHB1X3N5bmNfZ2V0Cj4g LSAqCj4gLSAqIFRoaXMgZnVuY3Rpb24gZGVjcmVtZW50cyB0aGUgc3luYyBmZW5jZSdzIHJlZmVy ZW5jZSBjb3VudDsgdGhlIAo+IG9iamVjdAo+IHdpbGwKPiAtICogYmUgcmVsZWFzZWQgaWYgdGhl IHJlZmVyZW5jZSBjb3VudCBnb2VzIHRvIHplcm8uCj4gLSAqCj4gLSAqIEBmZW5jZTogUG9pbnRl ciB0byBzeW5jIGZlbmNlCj4gLSAqLwo+IC12b2lkIGRwdV9zeW5jX3B1dCh2b2lkICpmZW5jZSk7 Cj4gLQo+IC0vKioKPiAtICogZHB1X3N5bmNfd2FpdCAtIFF1ZXJ5IHN5bmMgZmVuY2Ugb2JqZWN0 IGZyb20gYSBmaWxlIGhhbmRsZQo+IC0gKgo+IC0gKiBAZmVuY2U6IFBvaW50ZXIgdG8gc3luYyBm ZW5jZQo+IC0gKiBAdGltZW91dF9tczogVGltZSB0byB3YWl0LCBpbiBtaWxsaXNlY29uZHMuIFdh aXRzIGZvcmV2ZXIgaWYKPiB0aW1lb3V0X21zIDwgMAo+IC0gKgo+IC0gKiBSZXR1cm46Cj4gLSAq IFplcm8gaWYgdGltZWQgb3V0Cj4gLSAqIC1FUkVTVEFSVFNZUyBpZiB3YWl0IGludGVycnVwdGVk Cj4gLSAqIHJlbWFpbmluZyBqaWZmaWVzIGluIGFsbCBvdGhlciBzdWNjZXNzIGNhc2VzLgo+IC0g Ki8KPiAtc2lnbmVkIGxvbmcgZHB1X3N5bmNfd2FpdCh2b2lkICpmZW5jZSwgbG9uZyB0aW1lb3V0 X21zKTsKPiAtCj4gLS8qKgo+IC0gKiBkcHVfc3luY19nZXRfbmFtZV9wcmVmaXggLSBnZXQgaW50 ZWdlciByZXByZXNlbnRhdGlvbiBvZiBmZW5jZSBuYW1lCj4gcHJlZml4Cj4gLSAqIEBmZW5jZTog UG9pbnRlciB0byBvcGFxdWUgZmVuY2Ugc3RydWN0dXJlCj4gLSAqCj4gLSAqIFJldHVybjogMzIt Yml0IGludGVnZXIgY29udGFpbmluZyBmaXJzdCA0IGNoYXJhY3RlcnMgb2YgZmVuY2UgbmFtZSwK PiAtICogICAgICAgICBiaWctZW5kaWFuIG5vdGF0aW9uCj4gLSAqLwo+IC11aW50MzJfdCBkcHVf c3luY19nZXRfbmFtZV9wcmVmaXgodm9pZCAqZmVuY2UpOwo+IC0KPiAtLyoqCj4gLSAqIGRwdV9m ZW5jZV9pbml0IC0gaW5pdGlhbGl6ZSBmZW5jZSBvYmplY3QKPiAtICogQGZlbmNlOiBQb2ludGVy IHRvIGNydGMgZmVuY2Ugb2JqZWN0Cj4gLSAqIEBkcm1faWQ6IElEIG51bWJlciBvZiBvd25pbmcg RFJNIE9iamVjdAo+IC0gKiBAbmFtZTogVGltZWxpbmUgbmFtZQo+IC0gKiBSZXR1cm5zOiBaZXJv IG9uIHN1Y2Nlc3MKPiAtICovCj4gLWludCBkcHVfZmVuY2VfaW5pdChzdHJ1Y3QgZHB1X2ZlbmNl X2NvbnRleHQgKmZlbmNlLAo+IC0JCWNvbnN0IGNoYXIgKm5hbWUsCj4gLQkJdWludDMyX3QgZHJt X2lkKTsKPiAtCj4gLS8qKgo+IC0gKiBkcHVfZmVuY2VfZGVpbml0IC0gZGVpbml0IGZlbmNlIGNv bnRhaW5lcgo+IC0gKiBAZmVuY2U6IFBvaW50ZXIgZmVuY2UgY29udGFpbmVyCj4gLSAqLwo+IC12 b2lkIGRwdV9mZW5jZV9kZWluaXQoc3RydWN0IGRwdV9mZW5jZV9jb250ZXh0ICpmZW5jZSk7Cj4g LQo+IC0vKioKPiAtICogZHB1X2ZlbmNlX3ByZXBhcmUgLSBwcmVwYXJlIHRvIHJldHVybiBmZW5j ZXMgZm9yIGN1cnJlbnQgY29tbWl0Cj4gLSAqIEBmZW5jZTogUG9pbnRlciBmZW5jZSBjb250YWlu ZXIKPiAtICogUmV0dXJuczogWmVybyBvbiBzdWNjZXNzCj4gLSAqLwo+IC12b2lkIGRwdV9mZW5j ZV9wcmVwYXJlKHN0cnVjdCBkcHVfZmVuY2VfY29udGV4dCAqZmVuY2UpOwo+IC0vKioKPiAtICog ZHB1X2ZlbmNlX2NyZWF0ZSAtIGNyZWF0ZSBvdXRwdXQgZmVuY2Ugb2JqZWN0Cj4gLSAqIEBmZW5j ZTogUG9pbnRlciBmZW5jZSBjb250YWluZXIKPiAtICogQHZhbDogUG9pbnRlciB0byBvdXRwdXQg dmFsdWUgdmFyaWFibGUsIGZlbmNlIGZkIHdpbGwgYmUgcGxhY2VkIAo+IGhlcmUKPiAtICogQG9m ZnNldDogRmVuY2Ugc2lnbmFsIGNvbW1pdCBvZmZzZXQsIGUuZy4sICsxIHRvIHNpZ25hbCBvbiBu ZXh0IAo+IGNvbW1pdAo+IC0gKiBSZXR1cm5zOiBaZXJvIG9uIHN1Y2Nlc3MKPiAtICovCj4gLWlu dCBkcHVfZmVuY2VfY3JlYXRlKHN0cnVjdCBkcHVfZmVuY2VfY29udGV4dCAqZmVuY2UsIHVpbnQ2 NF90ICp2YWwsCj4gLQkJCQkJCQl1aW50MzJfdCBvZmZzZXQpOwo+IC0KPiAtLyoqCj4gLSAqIGRw dV9mZW5jZV9zaWduYWwgLSBhZHZhbmNlIGZlbmNlIHRpbWVsaW5lIHRvIHNpZ25hbCBvdXRzdGFu ZGluZyAKPiBmZW5jZXMKPiAtICogQGZlbmNlOiBQb2ludGVyIGZlbmNlIGNvbnRhaW5lcgo+IC0g KiBAdHM6IGZlbmNlIHRpbWVzdGFtcAo+IC0gKiBAcmVzZXRfdGltZWxpbmU6IHJlc2V0IHRoZSBm ZW5jZSB0aW1lbGluZSB0byBkb25lIGNvdW50IGVxdWFsIHRvCj4gY29tbWl0IGNvdW50Cj4gLSAq Lwo+IC12b2lkIGRwdV9mZW5jZV9zaWduYWwoc3RydWN0IGRwdV9mZW5jZV9jb250ZXh0ICpmZW5j ZSwga3RpbWVfdCB0cywKPiAtCQlib29sIHJlc2V0X3RpbWVsaW5lKTsKPiAtI2Vsc2UKPiAtc3Rh dGljIGlubGluZSB2b2lkICpkcHVfc3luY19nZXQodWludDY0X3QgZmQpCj4gLXsKPiAtCXJldHVy biBOVUxMOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW5saW5lIHZvaWQgZHB1X3N5bmNfcHV0KHZvaWQg KmZlbmNlKQo+IC17Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbmxpbmUgc2lnbmVkIGxvbmcgZHB1X3N5 bmNfd2FpdCh2b2lkICpmZW5jZSwgbG9uZyB0aW1lb3V0X21zKQo+IC17Cj4gLQlyZXR1cm4gMDsK PiAtfQo+IC0KPiAtc3RhdGljIGlubGluZSB1aW50MzJfdCBkcHVfc3luY19nZXRfbmFtZV9wcmVm aXgodm9pZCAqZmVuY2UpCj4gLXsKPiAtCXJldHVybiAweDA7Cj4gLX0KPiAtc3RhdGljIGlubGlu ZSBpbnQgZHB1X2ZlbmNlX2luaXQoc3RydWN0IGRwdV9mZW5jZV9jb250ZXh0ICpmZW5jZSwKPiAt CQljb25zdCBjaGFyICpuYW1lLAo+IC0JCXVpbnQzMl90IGRybV9pZCkKPiAtewo+IC0JLyogZG8g bm90aGluZyAqLwo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbmxpbmUgdm9pZCBk cHVfZmVuY2VfZGVpbml0KHN0cnVjdCBkcHVfZmVuY2VfY29udGV4dCAqZmVuY2UpCj4gLXsKPiAt CS8qIGRvIG5vdGhpbmcgKi8KPiAtfQo+IC0KPiAtc3RhdGljIGlubGluZSBpbnQgZHB1X2ZlbmNl X2dldChzdHJ1Y3QgZHB1X2ZlbmNlX2NvbnRleHQgKmZlbmNlLCAKPiB1aW50NjRfdAo+ICp2YWwp Cj4gLXsKPiAtCXJldHVybiAtRUlOVkFMOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW5saW5lIHZvaWQg ZHB1X2ZlbmNlX3NpZ25hbChzdHJ1Y3QgZHB1X2ZlbmNlX2NvbnRleHQgKmZlbmNlLAo+IC0JCQkJ CQlrdGltZV90IHRzLCBib29sCj4gcmVzZXRfdGltZWxpbmUpCj4gLXsKPiAtCS8qIGRvIG5vdGhp bmcgKi8KPiAtfQo+IC0KPiAtc3RhdGljIGlubGluZSB2b2lkIGRwdV9mZW5jZV9wcmVwYXJlKHN0 cnVjdCBkcHVfZmVuY2VfY29udGV4dCAqZmVuY2UpCj4gLXsKPiAtCS8qIGRvIG5vdGhpbmcgKi8K PiAtfQo+IC0KPiAtc3RhdGljIGlubGluZSBpbnQgZHB1X2ZlbmNlX2NyZWF0ZShzdHJ1Y3QgZHB1 X2ZlbmNlX2NvbnRleHQgKmZlbmNlLAo+IC0JCQkJCQl1aW50NjRfdCAqdmFsLCB1aW50MzJfdAo+ IG9mZnNldCkKPiAtewo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtI2VuZGlmIC8qIElTX0VOQUJMRUQo Q09ORklHX1NXX1NZTkMpICovCj4gLQo+IC0jZW5kaWYgLyogX0RQVV9GRU5DRV9IXyAqLwo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcGxhbmUuYwo+IGIv ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3BsYW5lLmMKPiBpbmRleCAyOWU3MmIz OWZkNzIuLjYxMGU2MTZmMmU3NCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfcGxhbmUuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9wbGFuZS5jCj4gQEAgLTI3LDcgKzI3LDYgQEAKPiAgI2luY2x1ZGUgIm1zbV9kcnYuaCIK PiAKPiAgI2luY2x1ZGUgImRwdV9rbXMuaCIKPiAtI2luY2x1ZGUgImRwdV9mZW5jZS5oIgo+ICAj aW5jbHVkZSAiZHB1X2Zvcm1hdHMuaCIKPiAgI2luY2x1ZGUgImRwdV9od19zc3BwLmgiCj4gICNp bmNsdWRlICJkcHVfaHdfY2F0YWxvZ19mb3JtYXQuaCIKPiBAQCAtNjc2LDI2ICs2NzUsNiBAQCBz dGF0aWMgdm9pZCBfZHB1X3BsYW5lX3NldF90c19wcmVmaWxsKHN0cnVjdAo+IGRybV9wbGFuZSAq cGxhbmUsCj4gIAkJCXBzdGF0ZS0+bXVsdGlyZWN0X2luZGV4KTsKPiAgfQo+IAo+IC0vKiBoZWxw ZXIgdG8gdXBkYXRlIGEgc3RhdGUncyBpbnB1dCBmZW5jZSBwb2ludGVyIGZyb20gdGhlIHByb3Bl cnR5ICovCj4gLXN0YXRpYyB2b2lkIF9kcHVfcGxhbmVfc2V0X2lucHV0X2ZlbmNlKHN0cnVjdCBk cHVfcGxhbmUgKnBkcHUsCj4gLQkJc3RydWN0IGRwdV9wbGFuZV9zdGF0ZSAqcHN0YXRlLCB1aW50 NjRfdCBmZCkKPiAtewo+IC0JaWYgKCFwZHB1IHx8ICFwc3RhdGUpIHsKPiAtCQlEUFVfRVJST1Io ImludmFsaWQgYXJnKHMpLCBwbGFuZSAlZCBzdGF0ZSAlZFxuIiwKPiAtCQkJCXBkcHUgIT0gMCwg cHN0YXRlICE9IDApOwo+IC0JCXJldHVybjsKPiAtCX0KPiAtCj4gLQkvKiBjbGVhciBwcmV2aW91 cyByZWZlcmVuY2UgKi8KPiAtCWlmIChwc3RhdGUtPmlucHV0X2ZlbmNlKQo+IC0JCWRwdV9zeW5j X3B1dChwc3RhdGUtPmlucHV0X2ZlbmNlKTsKPiAtCj4gLQkvKiBnZXQgZmVuY2UgcG9pbnRlciBm b3IgbGF0ZXIgKi8KPiAtCXBzdGF0ZS0+aW5wdXRfZmVuY2UgPSBkcHVfc3luY19nZXQoZmQpOwo+ IC0KPiAtCURQVV9ERUJVR19QTEFORShwZHB1LCAiMHglbGxYXG4iLCBmZCk7Cj4gLX0KPiAtCj4g IC8qKgo+ICAgKiBfZHB1X3BsYW5lX2lubGluZV9yb3Rfc2V0X290X2xpbWl0IC0gc2V0IE9UIGxp bWl0IGZvciB0aGUgZ2l2ZW4gCj4gaW5saW5lCj4gICAqIHJvdGF0aW9uIHhpbiBjbGllbnQKPiBA QCAtNzgwLDY0ICs3NTksNiBAQCBzdGF0aWMgdm9pZAo+IF9kcHVfcGxhbmVfaW5saW5lX3JvdF9z ZXRfcW9zX3JlbWFwKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAJZHB1X3ZiaWZfc2V0X3Fv c19yZW1hcChkcHVfa21zLCAmcW9zX3BhcmFtcyk7Cj4gIH0KPiAKPiAtaW50IGRwdV9wbGFuZV93 YWl0X2lucHV0X2ZlbmNlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLCB1aW50MzJfdCAKPiB3YWl0 X21zKQo+IC17Cj4gLQlzdHJ1Y3QgZHB1X3BsYW5lICpwZHB1Owo+IC0Jc3RydWN0IGRwdV9wbGFu ZV9zdGF0ZSAqcHN0YXRlOwo+IC0JdWludDMyX3QgcHJlZml4Owo+IC0Jdm9pZCAqaW5wdXRfZmVu Y2U7Cj4gLQlpbnQgcmV0ID0gLUVJTlZBTDsKPiAtCXNpZ25lZCBsb25nIHJjOwo+IC0KPiAtCWlm ICghcGxhbmUpIHsKPiAtCQlEUFVfRVJST1IoImludmFsaWQgcGxhbmVcbiIpOwo+IC0JfSBlbHNl IGlmICghcGxhbmUtPnN0YXRlKSB7Cj4gLQkJRFBVX0VSUk9SX1BMQU5FKHRvX2RwdV9wbGFuZShw bGFuZSksICJpbnZhbGlkIHN0YXRlXG4iKTsKPiAtCX0gZWxzZSB7Cj4gLQkJcGRwdSA9IHRvX2Rw dV9wbGFuZShwbGFuZSk7Cj4gLQkJcHN0YXRlID0gdG9fZHB1X3BsYW5lX3N0YXRlKHBsYW5lLT5z dGF0ZSk7Cj4gLQkJaW5wdXRfZmVuY2UgPSBwc3RhdGUtPmlucHV0X2ZlbmNlOwo+IC0KPiAtCQlp ZiAoaW5wdXRfZmVuY2UpIHsKPiAtCQkJcGRwdS0+aXNfZXJyb3IgPSBmYWxzZTsKPiAtCQkJcHJl Zml4ID0gZHB1X3N5bmNfZ2V0X25hbWVfcHJlZml4KGlucHV0X2ZlbmNlKTsKPiAtCQkJcmMgPSBk cHVfc3luY193YWl0KGlucHV0X2ZlbmNlLCB3YWl0X21zKTsKPiAtCj4gLQkJCXN3aXRjaCAocmMp IHsKPiAtCQkJY2FzZSAwOgo+IC0JCQkJRFBVX0VSUk9SX1BMQU5FKHBkcHUsICIldW1zIHRpbWVv dXQgb24KPiAlMDhYXG4iLAo+IC0JCQkJCQl3YWl0X21zLCBwcmVmaXgpOwo+IC0JCQkJcGRwdS0+ aXNfZXJyb3IgPSB0cnVlOwo+IC0JCQkJcmV0ID0gLUVUSU1FRE9VVDsKPiAtCQkJCWJyZWFrOwo+ IC0JCQljYXNlIC1FUkVTVEFSVFNZUzoKPiAtCQkJCURQVV9FUlJPUl9QTEFORShwZHB1LAo+IC0J CQkJCSIldW1zIHdhaXQgaW50ZXJydXB0ZWQgb24gJTA4WFxuIiwKPiAtCQkJCQl3YWl0X21zLCBw cmVmaXgpOwo+IC0JCQkJcGRwdS0+aXNfZXJyb3IgPSB0cnVlOwo+IC0JCQkJcmV0ID0gLUVSRVNU QVJUU1lTOwo+IC0JCQkJYnJlYWs7Cj4gLQkJCWNhc2UgLUVJTlZBTDoKPiAtCQkJCURQVV9FUlJP Ul9QTEFORShwZHB1LAo+IC0JCQkJCSJpbnZhbGlkIGZlbmNlIHBhcmFtIGZvciAlMDhYXG4iLAo+ IC0JCQkJCQlwcmVmaXgpOwo+IC0JCQkJcGRwdS0+aXNfZXJyb3IgPSB0cnVlOwo+IC0JCQkJcmV0 ID0gLUVJTlZBTDsKPiAtCQkJCWJyZWFrOwo+IC0JCQlkZWZhdWx0Ogo+IC0JCQkJRFBVX0RFQlVH X1BMQU5FKHBkcHUsICJzaWduYWxlZFxuIik7Cj4gLQkJCQlyZXQgPSAwOwo+IC0JCQkJYnJlYWs7 Cj4gLQkJCX0KPiAtCj4gLQkJCURQVV9FVlQzMl9WRVJCT1NFKERSTUlEKHBsYW5lKSwgLXJldCwg cHJlZml4KTsKPiAtCQl9IGVsc2Ugewo+IC0JCQlyZXQgPSAwOwo+IC0JCX0KPiAtCX0KPiAtCXJl dHVybiByZXQ7Cj4gLX0KPiAtCj4gIC8qKgo+ICAgKiBfZHB1X3BsYW5lX2dldF9hc3BhY2U6IGdl dHMgdGhlIGFkZHJlc3Mgc3BhY2UKPiAgICovCj4gQEAgLTMzMzIsNyArMzI1Myw2IEBAIHN0YXRp YyBpbnQgZHB1X3BsYW5lX3NzcHBfYXRvbWljX3VwZGF0ZShzdHJ1Y3QKPiBkcm1fcGxhbmUgKnBs YW5lLAo+ICAJCQlicmVhazsKPiAgCQljYXNlIFBMQU5FX1BST1BfSU5GTzoKPiAgCQljYXNlIFBM QU5FX1BST1BfQUxQSEE6Cj4gLQkJY2FzZSBQTEFORV9QUk9QX0lOUFVUX0ZFTkNFOgo+ICAJCWNh c2UgUExBTkVfUFJPUF9CTEVORF9PUDoKPiAgCQkJLyogbm8gc3BlY2lhbCBhY3Rpb24gcmVxdWly ZWQgKi8KPiAgCQkJYnJlYWs7Cj4gQEAgLTM3MDMsMTAgKzM2MjMsNiBAQCBzdGF0aWMgdm9pZCBf ZHB1X3BsYW5lX2luc3RhbGxfcHJvcGVydGllcyhzdHJ1Y3QKPiBkcm1fcGxhbmUgKnBsYW5lLAo+ ICAJbXNtX3Byb3BlcnR5X2luc3RhbGxfcmFuZ2UoJnBkcHUtPnByb3BlcnR5X2luZm8sICJhbHBo YSIsCj4gIAkJMHgwLCAwLCAyNTUsIDI1NSwgUExBTkVfUFJPUF9BTFBIQSk7Cj4gCj4gLQkvKiBs aW51eCBkZWZhdWx0IGZpbGUgZGVzY3JpcHRvciByYW5nZSBvbiBlYWNoIHByb2Nlc3MgKi8KPiAt CW1zbV9wcm9wZXJ0eV9pbnN0YWxsX3JhbmdlKCZwZHB1LT5wcm9wZXJ0eV9pbmZvLCAiaW5wdXRf ZmVuY2UiLAo+IC0JCTB4MCwgMCwgSU5SX09QRU5fTUFYLCAwLCBQTEFORV9QUk9QX0lOUFVUX0ZF TkNFKTsKPiAtCj4gIAlpZiAoIW1hc3Rlcl9wbGFuZV9pZCkgewo+ICAJCWlmIChwZHB1LT5waXBl X3NibGstPm1heGhkZWNpZXhwKSB7Cj4gIAkJCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX3JhbmdlKCZw ZHB1LT5wcm9wZXJ0eV9pbmZvLAo+IEBAIC00MDc2LDkgKzM5OTIsNiBAQCBzdGF0aWMgaW50IGRw dV9wbGFuZV9hdG9taWNfc2V0X3Byb3BlcnR5KHN0cnVjdAo+IGRybV9wbGFuZSAqcGxhbmUsCj4g IAkJCWlkeCA9IG1zbV9wcm9wZXJ0eV9pbmRleCgmcGRwdS0+cHJvcGVydHlfaW5mbywKPiAgCQkJ CQlwcm9wZXJ0eSk7Cj4gIAkJCXN3aXRjaCAoaWR4KSB7Cj4gLQkJCWNhc2UgUExBTkVfUFJPUF9J TlBVVF9GRU5DRToKPiAtCQkJCV9kcHVfcGxhbmVfc2V0X2lucHV0X2ZlbmNlKHBkcHUsIHBzdGF0 ZSwKPiB2YWwpOwo+IC0JCQkJYnJlYWs7Cj4gIAkJCWNhc2UgUExBTkVfUFJPUF9DU0NfVjE6Cj4g IAkJCQlfZHB1X3BsYW5lX3NldF9jc2NfdjEocGRwdSwgKHZvaWQgKil2YWwpOwo+ICAJCQkJYnJl YWs7Cj4gQEAgLTQxOTAsMTAgKzQxMDMsNiBAQCBzdGF0aWMgdm9pZCBkcHVfcGxhbmVfZGVzdHJv eV9zdGF0ZShzdHJ1Y3QKPiBkcm1fcGxhbmUgKnBsYW5lLAo+ICAJaWYgKHN0YXRlLT5mYikKPiAg CQlkcm1fZnJhbWVidWZmZXJfcHV0KHN0YXRlLT5mYik7Cj4gCj4gLQkvKiByZW1vdmUgcmVmIGNv dW50IGZvciBmZW5jZSAqLwo+IC0JaWYgKHBzdGF0ZS0+aW5wdXRfZmVuY2UpCj4gLQkJZHB1X3N5 bmNfcHV0KHBzdGF0ZS0+aW5wdXRfZmVuY2UpOwo+IC0KPiAgCS8qIGRlc3Ryb3kgdmFsdWUgaGVs cGVyICovCj4gIAltc21fcHJvcGVydHlfZGVzdHJveV9zdGF0ZSgmcGRwdS0+cHJvcGVydHlfaW5m bywgcHN0YXRlLAo+ICAJCQkmcHN0YXRlLT5wcm9wZXJ0eV9zdGF0ZSk7Cj4gQEAgLTQyMDYsNyAr NDExNSw2IEBAIGRwdV9wbGFuZV9kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRybV9wbGFuZSAKPiAq cGxhbmUpCj4gIAlzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRlICpwc3RhdGU7Cj4gIAlzdHJ1Y3QgZHB1 X3BsYW5lX3N0YXRlICpvbGRfc3RhdGU7Cj4gIAlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpkcm1fcHJv cDsKPiAtCXVpbnQ2NF90IGlucHV0X2ZlbmNlX2RlZmF1bHQ7Cj4gCj4gIAlpZiAoIXBsYW5lKSB7 Cj4gIAkJRFBVX0VSUk9SKCJpbnZhbGlkIHBsYW5lXG4iKTsKPiBAQCAtNDIzMCwxOCArNDEzOCw2 IEBAIGRwdV9wbGFuZV9kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRybV9wbGFuZSAKPiAqcGxhbmUp Cj4gIAltc21fcHJvcGVydHlfZHVwbGljYXRlX3N0YXRlKCZwZHB1LT5wcm9wZXJ0eV9pbmZvLCBv bGRfc3RhdGUsCj4gcHN0YXRlLAo+ICAJCQkmcHN0YXRlLT5wcm9wZXJ0eV9zdGF0ZSwgcHN0YXRl LT5wcm9wZXJ0eV92YWx1ZXMpOwo+IAo+IC0JLyogY2xlYXIgb3V0IGFueSBpbnB1dCBmZW5jZSAq Lwo+IC0JcHN0YXRlLT5pbnB1dF9mZW5jZSA9IDA7Cj4gLQlpbnB1dF9mZW5jZV9kZWZhdWx0ID0g bXNtX3Byb3BlcnR5X2dldF9kZWZhdWx0KAo+IC0JCQkmcGRwdS0+cHJvcGVydHlfaW5mbywgUExB TkVfUFJPUF9JTlBVVF9GRU5DRSk7Cj4gLQlkcm1fcHJvcCA9IG1zbV9wcm9wZXJ0eV9pbmRleF90 b19kcm1fcHJvcGVydHkoCj4gLQkJCQkmcGRwdS0+cHJvcGVydHlfaW5mbywKPiBQTEFORV9QUk9Q X0lOUFVUX0ZFTkNFKTsKPiAtCWlmIChtc21fcHJvcGVydHlfYXRvbWljX3NldCgmcGRwdS0+cHJv cGVydHlfaW5mbywKPiAtCQkJCSZwc3RhdGUtPnByb3BlcnR5X3N0YXRlLCBkcm1fcHJvcCwKPiAt CQkJCWlucHV0X2ZlbmNlX2RlZmF1bHQpKQo+IC0JCURQVV9ERUJVR19QTEFORShwZHB1LAo+IC0J CQkJImVycm9yIGNsZWFyaW5nIGR1cGxpY2F0ZWQgaW5wdXQKPiBmZW5jZVxuIik7Cj4gLQo+ICAJ cHN0YXRlLT5kaXJ0eSA9IDB4MDsKPiAgCXBzdGF0ZS0+cGVuZGluZyA9IGZhbHNlOwo+IAo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuaCAKPiBiL2RyaXZlcnMvZ3B1 L2RybS9tc20vbXNtX2Rydi5oCj4gaW5kZXggNjU3ZWEwNTJhMWVlLi43NWEyNGI4MWM4OWEgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmgKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vbXNtL21zbV9kcnYuaAo+IEBAIC05OSw3ICs5OSw2IEBAIGVudW0gbXNtX21kcF9w bGFuZV9wcm9wZXJ0eSB7Cj4gIAlQTEFORV9QUk9QX0NPTE9SX0ZJTEwsCj4gIAlQTEFORV9QUk9Q X0hfREVDSU1BVEUsCj4gIAlQTEFORV9QUk9QX1ZfREVDSU1BVEUsCj4gLQlQTEFORV9QUk9QX0lO UFVUX0ZFTkNFLAo+ICAJUExBTkVfUFJPUF9IVUVfQURKVVNULAo+ICAJUExBTkVfUFJPUF9TQVRV UkFUSU9OX0FESlVTVCwKPiAgCVBMQU5FX1BST1BfVkFMVUVfQURKVVNULAo+IEBAIC0xMzEsOCAr MTMwLDcgQEAgZW51bSBtc21fbWRwX2NydGNfcHJvcGVydHkgewo+ICAJQ1JUQ19QUk9QX0JMT0JD T1VOVCwKPiAKPiAgCS8qIHJhbmdlIHByb3BlcnRpZXMgKi8KPiAtCUNSVENfUFJPUF9JTlBVVF9G RU5DRV9USU1FT1VUID0gQ1JUQ19QUk9QX0JMT0JDT1VOVCwKPiAtCUNSVENfUFJPUF9ESU1fTEFZ RVJfVjEsCj4gKwlDUlRDX1BST1BfRElNX0xBWUVSX1YxID0gQ1JUQ19QUk9QX0JMT0JDT1VOVCwK PiAgCUNSVENfUFJPUF9DT1JFX0NMSywKPiAgCUNSVENfUFJPUF9DT1JFX0FCLAo+ICAJQ1JUQ19Q Uk9QX0NPUkVfSUIsCgotLSAKSmV5a3VtYXIgUwpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpGcmVlZHJlbm8gbWFpbGluZyBsaXN0CkZyZWVkcmVub0BsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9mcmVlZHJlbm8K