From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tonghao Zhang Subject: Re: [PATCH net-next v7 3/4] net: vhost: factor out busy polling logic to vhost_net_busy_poll() Date: Wed, 1 Aug 2018 17:52:05 +0800 Message-ID: References: <1533092454-37196-1-git-send-email-xiangxia.m.yue@gmail.com> <1533092454-37196-4-git-send-email-xiangxia.m.yue@gmail.com> <30e62749-3cbd-ae88-6582-c20087884b20@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: Linux Kernel Network Developers , virtualization@lists.linux-foundation.org, mst@redhat.com To: jasowang@redhat.com Return-path: In-Reply-To: <30e62749-3cbd-ae88-6582-c20087884b20@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: virtualization-bounces@lists.linux-foundation.org Errors-To: virtualization-bounces@lists.linux-foundation.org List-Id: netdev.vger.kernel.org T24gV2VkLCBBdWcgMSwgMjAxOCBhdCAyOjAxIFBNIEphc29uIFdhbmcgPGphc293YW5nQHJlZGhh dC5jb20+IHdyb3RlOgo+Cj4KPgo+IE9uIDIwMTjlubQwOOaciDAx5pelIDExOjAwLCB4aWFuZ3hp YS5tLnl1ZUBnbWFpbC5jb20gd3JvdGU6Cj4gPiBGcm9tOiBUb25naGFvIFpoYW5nIDx4aWFuZ3hp YS5tLnl1ZUBnbWFpbC5jb20+Cj4gPgo+ID4gRmFjdG9yIG91dCBnZW5lcmljIGJ1c3kgcG9sbGlu ZyBsb2dpYyBhbmQgd2lsbCBiZQo+ID4gdXNlZCBmb3IgaW4gdHggcGF0aCBpbiB0aGUgbmV4dCBw YXRjaC4gQW5kIHdpdGggdGhlIHBhdGNoLAo+ID4gcWVtdSBjYW4gc2V0IGRpZmZlcmVudGx5IHRo ZSBidXN5bG9vcF90aW1lb3V0IGZvciByeCBxdWV1ZS4KPiA+Cj4gPiBJbiB0aGUgaGFuZGxlX3R4 LCB0aGUgYnVzeXBvbGwgd2lsbCB2aG9zdF9uZXRfZGlzYWJsZS9lbmFibGVfdnEKPiA+IGJlY2F1 c2Ugd2UgaGF2ZSBwb2xsIHRoZSBzb2NrLiBUaGlzIGNhbiBpbXByb3ZlIHBlcmZvcm1hbmNlLgo+ ID4gW1RoaXMgaXMgc3VnZ2VzdGVkIGJ5IFRvc2hpYWtpIE1ha2l0YSA8bWFraXRhLnRvc2hpYWtp QGxhYi5udHQuY28uanA+XQo+ID4KPiA+IEFuZCB3aGVuIHRoZSBzb2NrIHJlY2VpdmUgc2tiLCB3 ZSBzaG91bGQgcXVldWUgdGhlIHBvbGwgaWYgbmVjZXNzYXJ5Lgo+ID4KPiA+IFNpZ25lZC1vZmYt Ynk6IFRvbmdoYW8gWmhhbmcgPHhpYW5neGlhLm0ueXVlQGdtYWlsLmNvbT4KPiA+IC0tLQo+ID4g ICBkcml2ZXJzL3Zob3N0L25ldC5jIHwgMTMxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKy0tLS0tLS0tLS0tLS0tLS0KPiA+ICAgMSBmaWxlIGNoYW5nZWQsIDkxIGluc2VydGlv bnMoKyksIDQwIGRlbGV0aW9ucygtKQo+ID4KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0 L25ldC5jIGIvZHJpdmVycy92aG9zdC9uZXQuYwo+ID4gaW5kZXggMzJjMWI1Mi4uNWI0NTQ2MyAx MDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvdmhvc3QvbmV0LmMKPiA+ICsrKyBiL2RyaXZlcnMvdmhv c3QvbmV0LmMKPiA+IEBAIC00NDAsNiArNDQwLDk1IEBAIHN0YXRpYyB2b2lkIHZob3N0X25ldF9z aWduYWxfdXNlZChzdHJ1Y3Qgdmhvc3RfbmV0X3ZpcnRxdWV1ZSAqbnZxKQo+ID4gICAgICAgbnZx LT5kb25lX2lkeCA9IDA7Cj4gPiAgIH0KPiA+Cj4gPiArc3RhdGljIGludCBza19oYXNfcnhfZGF0 YShzdHJ1Y3Qgc29jayAqc2spCj4gPiArewo+ID4gKyAgICAgc3RydWN0IHNvY2tldCAqc29jayA9 IHNrLT5za19zb2NrZXQ7Cj4gPiArCj4gPiArICAgICBpZiAoc29jay0+b3BzLT5wZWVrX2xlbikK PiA+ICsgICAgICAgICAgICAgcmV0dXJuIHNvY2stPm9wcy0+cGVla19sZW4oc29jayk7Cj4gPiAr Cj4gPiArICAgICByZXR1cm4gc2tiX3F1ZXVlX2VtcHR5KCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSk7 Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIHZob3N0X25ldF9idXN5X3BvbGxfdHJ5X3F1 ZXVlKHN0cnVjdCB2aG9zdF9uZXQgKm5ldCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSkKPiA+ICt7Cj4gPiArICAg ICBpZiAoIXZob3N0X3ZxX2F2YWlsX2VtcHR5KCZuZXQtPmRldiwgdnEpKSB7Cj4gPiArICAgICAg ICAgICAgIHZob3N0X3BvbGxfcXVldWUoJnZxLT5wb2xsKTsKPiA+ICsgICAgIH0gZWxzZSBpZiAo dW5saWtlbHkodmhvc3RfZW5hYmxlX25vdGlmeSgmbmV0LT5kZXYsIHZxKSkpIHsKPiA+ICsgICAg ICAgICAgICAgdmhvc3RfZGlzYWJsZV9ub3RpZnkoJm5ldC0+ZGV2LCB2cSk7Cj4gPiArICAgICAg ICAgICAgIHZob3N0X3BvbGxfcXVldWUoJnZxLT5wb2xsKTsKPiA+ICsgICAgIH0KPiA+ICt9Cj4g PiArCj4gPiArc3RhdGljIHZvaWQgdmhvc3RfbmV0X2J1c3lfcG9sbF9jaGVjayhzdHJ1Y3Qgdmhv c3RfbmV0ICpuZXQsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3Qgdmhvc3RfdmlydHF1ZXVlICpydnEsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp0dnEsCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBib29sIHJ4KQo+ID4gK3sKPiA+ICsgICAgIHN0cnVjdCBzb2Nr ZXQgKnNvY2sgPSBydnEtPnByaXZhdGVfZGF0YTsKPiA+ICsKPiA+ICsgICAgIGlmIChyeCkKPiA+ ICsgICAgICAgICAgICAgdmhvc3RfbmV0X2J1c3lfcG9sbF90cnlfcXVldWUobmV0LCB0dnEpOwo+ ID4gKyAgICAgZWxzZSBpZiAoc29jayAmJiBza19oYXNfcnhfZGF0YShzb2NrLT5zaykpCj4gPiAr ICAgICAgICAgICAgIHZob3N0X25ldF9idXN5X3BvbGxfdHJ5X3F1ZXVlKG5ldCwgcnZxKTsKPiA+ ICsgICAgIGVsc2Ugewo+ID4gKyAgICAgICAgICAgICAvKiBPbiB0eCBoZXJlLCBzb2NrIGhhcyBu byByeCBkYXRhLCBzbyB3ZQo+ID4gKyAgICAgICAgICAgICAgKiB3aWxsIHdhaXQgZm9yIHNvY2sg d2FrZXVwIGZvciByeCwgYW5kCj4gPiArICAgICAgICAgICAgICAqIHZob3N0X2VuYWJsZV9ub3Rp ZnkoKSBpcyBub3QgbmVlZGVkLiAqLwo+Cj4gQSBwb3NzaWJsZSBjYXNlIGlzIHdlIGRvIGhhdmUg cnggZGF0YSBidXQgZ3Vlc3QgZG9lcyBub3QgcmVmaWxsIHRoZSByeAo+IHF1ZXVlLiBJbiB0aGlz IGNhc2Ugd2UgbWF5IGxvc2Ugbm90aWZpY2F0aW9ucyBmcm9tIGd1ZXN0LgpZZXMsIHNob3VsZCBj b25zaWRlciB0aGlzIGNhc2UuIHRoYW5rcy4KPiA+ICsgICAgIH0KPiA+ICt9Cj4gPiArCj4gPiAr c3RhdGljIHZvaWQgdmhvc3RfbmV0X2J1c3lfcG9sbChzdHJ1Y3Qgdmhvc3RfbmV0ICpuZXQsCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICpy dnEsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgdmhvc3RfdmlydHF1 ZXVlICp0dnEsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpidXN5bG9v cF9pbnRyLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByeCkKPiA+ICt7 Cj4gPiArICAgICB1bnNpZ25lZCBsb25nIGJ1c3lsb29wX3RpbWVvdXQ7Cj4gPiArICAgICB1bnNp Z25lZCBsb25nIGVuZHRpbWU7Cj4gPiArICAgICBzdHJ1Y3Qgc29ja2V0ICpzb2NrOwo+ID4gKyAg ICAgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSByeCA/IHR2cSA6IHJ2cTsKPiA+ICsKPiA+ ICsgICAgIG11dGV4X2xvY2tfbmVzdGVkKCZ2cS0+bXV0ZXgsIHJ4ID8gVkhPU1RfTkVUX1ZRX1RY OiBWSE9TVF9ORVRfVlFfUlgpOwo+ID4gKyAgICAgdmhvc3RfZGlzYWJsZV9ub3RpZnkoJm5ldC0+ ZGV2LCB2cSk7Cj4gPiArICAgICBzb2NrID0gcnZxLT5wcml2YXRlX2RhdGE7Cj4gPiArCj4gPiAr ICAgICBidXN5bG9vcF90aW1lb3V0ID0gcnggPyBydnEtPmJ1c3lsb29wX3RpbWVvdXQ6Cj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dnEtPmJ1c3lsb29wX3RpbWVvdXQ7Cj4gPiAr Cj4gPiArCj4gPiArICAgICAvKiBCdXN5cG9sbCB0aGUgc29jaywgc28gZG9uJ3QgbmVlZCByeCB3 YWtldXBzIGR1cmluZyBpdC4gKi8KPiA+ICsgICAgIGlmICghcngpCj4gPiArICAgICAgICAgICAg IHZob3N0X25ldF9kaXNhYmxlX3ZxKG5ldCwgdnEpOwo+Cj4gQWN0dWFsbHkgdGhpcyBwaWVjZSBv ZiBjb2RlIGlzIG5vdCBhIGZhY3RvcmluZyBvdXQuIEkgd291bGQgc3VnZ2VzdCB0bwo+IGFkZCB0 aGlzIGluIGFub3RoZXIgcGF0Y2gsIG9yIG9uIHRvcCBvZiB0aGlzIHNlcmllcy4KSSB3aWxsIGFk ZCB0aGlzIGluIGFub3RoZXIgcGF0Y2guCj4gPiArCj4gPiArICAgICBwcmVlbXB0X2Rpc2FibGUo KTsKPiA+ICsgICAgIGVuZHRpbWUgPSBidXN5X2Nsb2NrKCkgKyBidXN5bG9vcF90aW1lb3V0Owo+ ID4gKwo+ID4gKyAgICAgd2hpbGUgKHZob3N0X2Nhbl9idXN5X3BvbGwoZW5kdGltZSkpIHsKPiA+ ICsgICAgICAgICAgICAgaWYgKHZob3N0X2hhc193b3JrKCZuZXQtPmRldikpIHsKPiA+ICsgICAg ICAgICAgICAgICAgICAgICAqYnVzeWxvb3BfaW50ciA9IHRydWU7Cj4gPiArICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAgICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgICAg ICAgaWYgKChzb2NrICYmIHNrX2hhc19yeF9kYXRhKHNvY2stPnNrKSAmJgo+ID4gKyAgICAgICAg ICAgICAgICAgICF2aG9zdF92cV9hdmFpbF9lbXB0eSgmbmV0LT5kZXYsIHJ2cSkpIHx8Cj4gPiAr ICAgICAgICAgICAgICAgICAhdmhvc3RfdnFfYXZhaWxfZW1wdHkoJm5ldC0+ZGV2LCB0dnEpKQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+Cj4gU29tZSBjaGVja3Mgd2VyZSBkdXBs aWNhdGVkIGluIHZob3N0X25ldF9idXN5X3BvbGxfY2hlY2soKS4gTmVlZAo+IGNvbnNpZGVyIHRv IHVuaWZ5IHRoZW0uCk9LCj4gPiArCj4gPiArICAgICAgICAgICAgIGNwdV9yZWxheCgpOwo+ID4g KyAgICAgfQo+ID4gKwo+ID4gKyAgICAgcHJlZW1wdF9lbmFibGUoKTsKPiA+ICsKPiA+ICsgICAg IGlmICghcngpCj4gPiArICAgICAgICAgICAgIHZob3N0X25ldF9lbmFibGVfdnEobmV0LCB2cSk7 Cj4KPiBObyBuZWVkIHRvIGVuYWJsZSByeCB2aXJ0cXVldWUsIGlmIHdlIGFyZSBzdXJlIGhhbmRs ZV9yeCgpIHdpbGwgYmUKPiBjYWxsZWQgc29vbi4KSWYgd2UgZGlzYWJsZSByeCB2aXJ0cXVldWUg aW4gaGFuZGxlX3R4IGFuZCBkb24ndCBzZW5kIHBhY2tldHMgZnJvbQpndWVzdCBhbnltb3JlKGhh bmRsZV90eCBpcyBub3QgY2FsbGVkKSwgc28gd2UgY2FuIHdha2UgdXAgZm9yIHNvY2sgcnguCnNv IHRoZSBuZXR3b3JrIGlzIGJyb2tlbi4KPiA+ICsKPiA+ICsgICAgIHZob3N0X25ldF9idXN5X3Bv bGxfY2hlY2sobmV0LCBydnEsIHR2cSwgcngpOwo+Cj4gSXQgbG9va3MgdG8gbWUganVzdCBvcGVu IGNvZGUgYWxsIGNoZWNrIGhlcmUgaXMgYmV0dGVyIGFuZCBlYXNpZXIgdG8gYmUKPiByZXZpZXdl ZC4Kd2lsbCBiZSBjaGFuZ2VkLgo+IFRoYW5rcwo+Cj4gPiArCj4gPiArICAgICBtdXRleF91bmxv Y2soJnZxLT5tdXRleCk7Cj4gPiArfQo+ID4gKwo+ID4gICBzdGF0aWMgaW50IHZob3N0X25ldF90 eF9nZXRfdnFfZGVzYyhzdHJ1Y3Qgdmhvc3RfbmV0ICpuZXQsCj4gPiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSwKPiA+ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKm91dF9udW0sIHVu c2lnbmVkIGludCAqaW5fbnVtLAo+ID4gQEAgLTc1MywxNiArODQyLDYgQEAgc3RhdGljIGludCBw ZWVrX2hlYWRfbGVuKHN0cnVjdCB2aG9zdF9uZXRfdmlydHF1ZXVlICpydnEsIHN0cnVjdCBzb2Nr ICpzaykKPiA+ICAgICAgIHJldHVybiBsZW47Cj4gPiAgIH0KPiA+Cj4gPiAtc3RhdGljIGludCBz a19oYXNfcnhfZGF0YShzdHJ1Y3Qgc29jayAqc2spCj4gPiAtewo+ID4gLSAgICAgc3RydWN0IHNv Y2tldCAqc29jayA9IHNrLT5za19zb2NrZXQ7Cj4gPiAtCj4gPiAtICAgICBpZiAoc29jay0+b3Bz LT5wZWVrX2xlbikKPiA+IC0gICAgICAgICAgICAgcmV0dXJuIHNvY2stPm9wcy0+cGVla19sZW4o c29jayk7Cj4gPiAtCj4gPiAtICAgICByZXR1cm4gc2tiX3F1ZXVlX2VtcHR5KCZzay0+c2tfcmVj ZWl2ZV9xdWV1ZSk7Cj4gPiAtfQo+ID4gLQo+ID4gICBzdGF0aWMgaW50IHZob3N0X25ldF9yeF9w ZWVrX2hlYWRfbGVuKHN0cnVjdCB2aG9zdF9uZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLAo+ID4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqYnVzeWxvb3BfaW50cikK PiA+ICAgewo+ID4gQEAgLTc3MCw0MSArODQ5LDEzIEBAIHN0YXRpYyBpbnQgdmhvc3RfbmV0X3J4 X3BlZWtfaGVhZF9sZW4oc3RydWN0IHZob3N0X25ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssCj4g PiAgICAgICBzdHJ1Y3Qgdmhvc3RfbmV0X3ZpcnRxdWV1ZSAqdG52cSA9ICZuZXQtPnZxc1tWSE9T VF9ORVRfVlFfVFhdOwo+ID4gICAgICAgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqcnZxID0gJnJu dnEtPnZxOwo+ID4gICAgICAgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdHZxID0gJnRudnEtPnZx Owo+ID4gLSAgICAgdW5zaWduZWQgbG9uZyB1bmluaXRpYWxpemVkX3ZhcihlbmR0aW1lKTsKPiA+ ICAgICAgIGludCBsZW4gPSBwZWVrX2hlYWRfbGVuKHJudnEsIHNrKTsKPiA+Cj4gPiAtICAgICBp ZiAoIWxlbiAmJiB0dnEtPmJ1c3lsb29wX3RpbWVvdXQpIHsKPiA+ICsgICAgIGlmICghbGVuICYm IHJ2cS0+YnVzeWxvb3BfdGltZW91dCkgewo+ID4gICAgICAgICAgICAgICAvKiBGbHVzaCBiYXRj aGVkIGhlYWRzIGZpcnN0ICovCj4gPiAgICAgICAgICAgICAgIHZob3N0X25ldF9zaWduYWxfdXNl ZChybnZxKTsKPiA+ICAgICAgICAgICAgICAgLyogQm90aCB0eCB2cSBhbmQgcnggc29ja2V0IHdl cmUgcG9sbGVkIGhlcmUgKi8KPiA+IC0gICAgICAgICAgICAgbXV0ZXhfbG9ja19uZXN0ZWQoJnR2 cS0+bXV0ZXgsIFZIT1NUX05FVF9WUV9UWCk7Cj4gPiAtICAgICAgICAgICAgIHZob3N0X2Rpc2Fi bGVfbm90aWZ5KCZuZXQtPmRldiwgdHZxKTsKPiA+IC0KPiA+IC0gICAgICAgICAgICAgcHJlZW1w dF9kaXNhYmxlKCk7Cj4gPiAtICAgICAgICAgICAgIGVuZHRpbWUgPSBidXN5X2Nsb2NrKCkgKyB0 dnEtPmJ1c3lsb29wX3RpbWVvdXQ7Cj4gPiAtCj4gPiAtICAgICAgICAgICAgIHdoaWxlICh2aG9z dF9jYW5fYnVzeV9wb2xsKGVuZHRpbWUpKSB7Cj4gPiAtICAgICAgICAgICAgICAgICAgICAgaWYg KHZob3N0X2hhc193b3JrKCZuZXQtPmRldikpIHsKPiA+IC0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICpidXN5bG9vcF9pbnRyID0gdHJ1ZTsKPiA+IC0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOwo+ID4gLSAgICAgICAgICAgICAgICAgICAgIH0KPiA+IC0gICAgICAgICAg ICAgICAgICAgICBpZiAoKHNrX2hhc19yeF9kYXRhKHNrKSAmJgo+ID4gLSAgICAgICAgICAgICAg ICAgICAgICAgICAgIXZob3N0X3ZxX2F2YWlsX2VtcHR5KCZuZXQtPmRldiwgcnZxKSkgfHwKPiA+ IC0gICAgICAgICAgICAgICAgICAgICAgICAgIXZob3N0X3ZxX2F2YWlsX2VtcHR5KCZuZXQtPmRl diwgdHZxKSkKPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+ID4gLSAg ICAgICAgICAgICAgICAgICAgIGNwdV9yZWxheCgpOwo+ID4gLSAgICAgICAgICAgICB9Cj4gPiAt Cj4gPiAtICAgICAgICAgICAgIHByZWVtcHRfZW5hYmxlKCk7Cj4gPiAtCj4gPiAtICAgICAgICAg ICAgIGlmICghdmhvc3RfdnFfYXZhaWxfZW1wdHkoJm5ldC0+ZGV2LCB0dnEpKSB7Cj4gPiAtICAg ICAgICAgICAgICAgICAgICAgdmhvc3RfcG9sbF9xdWV1ZSgmdHZxLT5wb2xsKTsKPiA+IC0gICAg ICAgICAgICAgfSBlbHNlIGlmICh1bmxpa2VseSh2aG9zdF9lbmFibGVfbm90aWZ5KCZuZXQtPmRl diwgdHZxKSkpIHsKPiA+IC0gICAgICAgICAgICAgICAgICAgICB2aG9zdF9kaXNhYmxlX25vdGlm eSgmbmV0LT5kZXYsIHR2cSk7Cj4gPiAtICAgICAgICAgICAgICAgICAgICAgdmhvc3RfcG9sbF9x dWV1ZSgmdHZxLT5wb2xsKTsKPiA+IC0gICAgICAgICAgICAgfQo+ID4gLQo+ID4gLSAgICAgICAg ICAgICBtdXRleF91bmxvY2soJnR2cS0+bXV0ZXgpOwo+ID4gKyAgICAgICAgICAgICB2aG9zdF9u ZXRfYnVzeV9wb2xsKG5ldCwgcnZxLCB0dnEsIGJ1c3lsb29wX2ludHIsIHRydWUpOwo+ID4KPiA+ ICAgICAgICAgICAgICAgbGVuID0gcGVla19oZWFkX2xlbihybnZxLCBzayk7Cj4gPiAgICAgICB9 Cj4KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KVmlydHVh bGl6YXRpb24gbWFpbGluZyBsaXN0ClZpcnR1YWxpemF0aW9uQGxpc3RzLmxpbnV4LWZvdW5kYXRp b24ub3JnCmh0dHBzOi8vbGlzdHMubGludXhmb3VuZGF0aW9uLm9yZy9tYWlsbWFuL2xpc3RpbmZv L3ZpcnR1YWxpemF0aW9u