From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: Re: [PATCH v8] x86/mem-sharing: mem-sharing a range of memory Date: Wed, 27 Jul 2016 10:59:50 +0100 Message-ID: References: <1469037669-29097-1-git-send-email-tamas.lengyel@zentific.com> <8765faf5-318c-f8c2-f120-cbe2fc0e5bae@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta14.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bSLd5-0007hV-Dl for xen-devel@lists.xenproject.org; Wed, 27 Jul 2016 09:59:55 +0000 In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: George Dunlap , Tamas K Lengyel Cc: xen-devel , Ian Jackson , Andres Lagar-Cavilla , Jan Beulich , Tim Deegan List-Id: xen-devel@lists.xenproject.org T24gMjcvMDcvMTYgMTA6MDEsIEdlb3JnZSBEdW5sYXAgd3JvdGU6Cj4gT24gMjYvMDcvMTYgMjM6 NDMsIEFuZHJldyBDb29wZXIgd3JvdGU6Cj4+IE9uIDI2LzA3LzIwMTYgMTY6NDksIEdlb3JnZSBE dW5sYXAgd3JvdGU6Cj4+PiBPbiBUdWUsIEp1bCAyNiwgMjAxNiBhdCA0OjIyIFBNLCBUYW1hcyBL IExlbmd5ZWwKPj4+IDx0YW1hcy5sZW5neWVsQHplbnRpZmljLmNvbT4gd3JvdGU6Cj4+Pj4gT24g VHVlLCBKdWwgMjYsIDIwMTYgYXQgMzoxMiBBTSwgR2VvcmdlIER1bmxhcCA8Z2VvcmdlLmR1bmxh cEBjaXRyaXguY29tPiB3cm90ZToKPj4+Pj4gT24gV2VkLCBKdWwgMjAsIDIwMTYgYXQgNzowMSBQ TSwgVGFtYXMgSyBMZW5neWVsCj4+Pj4+IDx0YW1hcy5sZW5neWVsQHplbnRpZmljLmNvbT4gd3Jv dGU6Cj4+Pj4+PiBDdXJyZW50bHkgbWVtLXNoYXJpbmcgY2FuIGJlIHBlcmZvcm1lZCBvbiBhIHBh Z2UtYnktcGFnZSBiYXNpcyBmcm9tIHRoZSBjb250cm9sCj4+Pj4+PiBkb21haW4uIEhvd2V2ZXIs IHRoaXMgcHJvY2VzcyBpcyBxdWl0ZSB3YXN0ZWZ1bCB3aGVuIGEgcmFuZ2Ugb2YgcGFnZXMgaGF2 ZSB0bwo+Pj4+Pj4gYmUgZGVkdXBsaWNhdGVkLgo+Pj4+Pj4KPj4+Pj4+IFRoaXMgcGF0Y2ggaW50 cm9kdWNlcyBhIG5ldyBtZW1fc2hhcmluZyBtZW1vcCBmb3IgcmFuZ2Ugc2hhcmluZyB3aGVyZQo+ Pj4+Pj4gdGhlIHVzZXIgZG9lc24ndCBoYXZlIHRvIHNlcGFyYXRlbHkgbm9taW5hdGUgZWFjaCBw YWdlIGluIGJvdGggdGhlIHNvdXJjZSBhbmQKPj4+Pj4+IGRlc3RpbmF0aW9uIGRvbWFpbiwgYW5k IHRoZSBsb29waW5nIG92ZXIgYWxsIHBhZ2VzIGhhcHBlbiBpbiB0aGUgaHlwZXJ2aXNvci4KPj4+ Pj4+IFRoaXMgc2lnbmlmaWNhbnRseSByZWR1Y2VzIHRoZSBvdmVyaGVhZCBvZiBzaGFyaW5nIGEg cmFuZ2Ugb2YgbWVtb3J5Lgo+Pj4+Pj4KPj4+Pj4+IFNpZ25lZC1vZmYtYnk6IFRhbWFzIEsgTGVu Z3llbCA8dGFtYXMubGVuZ3llbEB6ZW50aWZpYy5jb20+Cj4+Pj4+PiBBY2tlZC1ieTogV2VpIExp dSA8d2VpLmxpdTJAY2l0cml4LmNvbT4KPj4+Pj4+IFJldmlld2VkLWJ5OiBBbmRyZXcgQ29vcGVy IDxhbmRyZXcuY29vcGVyM0BjaXRyaXguY29tPgo+Pj4+Pj4gLS0tCj4+Pj4+PiBDYzogSWFuIEph Y2tzb24gPGlhbi5qYWNrc29uQGV1LmNpdHJpeC5jb20+Cj4+Pj4+PiBDYzogR2VvcmdlIER1bmxh cCA8Z2VvcmdlLmR1bmxhcEBldS5jaXRyaXguY29tPgo+Pj4+Pj4gQ2M6IEphbiBCZXVsaWNoIDxq YmV1bGljaEBzdXNlLmNvbT4KPj4+Pj4+IENjOiBBbmRyZXcgQ29vcGVyIDxhbmRyZXcuY29vcGVy M0BjaXRyaXguY29tPgo+Pj4+Pj4KPj4+Pj4+IHY4OiBzdHlsZSBmaXhlcyBhbmQgbWlub3IgYWRq dXN0bWVudHMKPj4+Pj4+IC0tLQo+Pj4+Pj4gIHRvb2xzL2xpYnhjL2luY2x1ZGUveGVuY3RybC5o ICAgICAgICB8ICAxNSArKysrCj4+Pj4+PiAgdG9vbHMvbGlieGMveGNfbWVtc2hyLmMgICAgICAg ICAgICAgIHwgIDE5ICsrKysrCj4+Pj4+PiAgdG9vbHMvdGVzdHMvbWVtLXNoYXJpbmcvbWVtc2hy dG9vbC5jIHwgIDIyICsrKysrKwo+Pj4+Pj4gIHhlbi9hcmNoL3g4Ni9tbS9tZW1fc2hhcmluZy5j ICAgICAgICB8IDE0MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+Pj4+Pj4g IHhlbi9pbmNsdWRlL3B1YmxpYy9tZW1vcnkuaCAgICAgICAgICB8ICAxMCArKy0KPj4+Pj4+ICA1 IGZpbGVzIGNoYW5nZWQsIDIwNSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCj4+Pj4+Pgo+ Pj4+Pj4gZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhjL2luY2x1ZGUveGVuY3RybC5oIGIvdG9vbHMv bGlieGMvaW5jbHVkZS94ZW5jdHJsLmgKPj4+Pj4+IGluZGV4IGU5MDRiZDUuLjM3ODJlZmYgMTAw NjQ0Cj4+Pj4+PiAtLS0gYS90b29scy9saWJ4Yy9pbmNsdWRlL3hlbmN0cmwuaAo+Pj4+Pj4gKysr IGIvdG9vbHMvbGlieGMvaW5jbHVkZS94ZW5jdHJsLmgKPj4+Pj4+IEBAIC0yMzM0LDYgKzIzMzQs MjEgQEAgaW50IHhjX21lbXNocl9hZGRfdG9fcGh5c21hcCh4Y19pbnRlcmZhY2UgKnhjaCwKPj4+ Pj4+ICAgICAgICAgICAgICAgICAgICAgIGRvbWlkX3QgY2xpZW50X2RvbWFpbiwKPj4+Pj4+ICAg ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgY2xpZW50X2dmbik7Cj4+Pj4+Pgo+Pj4+ Pj4gKy8qIEFsbG93cyB0byBkZWR1cGxpY2F0ZSBhIHJhbmdlIG9mIG1lbW9yeSBvZiBhIGNsaWVu dCBkb21haW4uIFVzaW5nCj4+Pj4+PiArICogdGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IG9m IGNhbGxpbmcgeGNfbWVtc2hyX25vbWluYXRlX2dmbiBmb3IgZWFjaCBnZm4KPj4+Pj4+ICsgKiBp biB0aGUgdHdvIGRvbWFpbnMgZm9sbG93ZWQgYnkgeGNfbWVtc2hyX3NoYXJlX2dmbnMuCj4+Pj4+ PiArICoKPj4+Pj4+ICsgKiBNYXkgZmFpbCB3aXRoIC1FSU5WQUwgaWYgdGhlIHNvdXJjZSBhbmQg Y2xpZW50IGRvbWFpbiBoYXZlIGRpZmZlcmVudAo+Pj4+Pj4gKyAqIG1lbW9yeSBzaXplIG9yIGlm IG1lbW9yeSBzaGFyaW5nIGlzIG5vdCBlbmFibGVkIG9uIGVpdGhlciBvZiB0aGUgZG9tYWlucy4K Pj4+Pj4+ICsgKiBNYXkgYWxzbyBmYWlsIHdpdGggLUVOT01FTSBpZiB0aGVyZSBpc24ndCBlbm91 Z2ggbWVtb3J5IGF2YWlsYWJsZSB0byBzdG9yZQo+Pj4+Pj4gKyAqIHRoZSBzaGFyaW5nIG1ldGFk YXRhIGJlZm9yZSBkZWR1cGxpY2F0aW9uIGNhbiBoYXBwZW4uCj4+Pj4+PiArICovCj4+Pj4+PiAr aW50IHhjX21lbXNocl9yYW5nZV9zaGFyZSh4Y19pbnRlcmZhY2UgKnhjaCwKPj4+Pj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgIGRvbWlkX3Qgc291cmNlX2RvbWFpbiwKPj4+Pj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgIGRvbWlkX3QgY2xpZW50X2RvbWFpbiwKPj4+Pj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHN0YXJ0LAo+Pj4+Pj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgdWludDY0X3QgZW5kKTsKPj4+Pj4+ICsKPj4+Pj4+ICAvKiBEZWJ1ZyBj YWxsczogcmV0dXJuIHRoZSBudW1iZXIgb2YgcGFnZXMgcmVmZXJlbmNpbmcgdGhlIHNoYXJlZCBm cmFtZSBiYWNraW5nCj4+Pj4+PiAgICogdGhlIGlucHV0IGFyZ3VtZW50LiBTaG91bGQgYmUgb25l IG9yIGdyZWF0ZXIuCj4+Pj4+PiAgICoKPj4+Pj4+IGRpZmYgLS1naXQgYS90b29scy9saWJ4Yy94 Y19tZW1zaHIuYyBiL3Rvb2xzL2xpYnhjL3hjX21lbXNoci5jCj4+Pj4+PiBpbmRleCBkZWIwYWE0 Li4yYjg3MWM3IDEwMDY0NAo+Pj4+Pj4gLS0tIGEvdG9vbHMvbGlieGMveGNfbWVtc2hyLmMKPj4+ Pj4+ICsrKyBiL3Rvb2xzL2xpYnhjL3hjX21lbXNoci5jCj4+Pj4+PiBAQCAtMTgxLDYgKzE4MSwy NSBAQCBpbnQgeGNfbWVtc2hyX2FkZF90b19waHlzbWFwKHhjX2ludGVyZmFjZSAqeGNoLAo+Pj4+ Pj4gICAgICByZXR1cm4geGNfbWVtc2hyX21lbW9wKHhjaCwgc291cmNlX2RvbWFpbiwgJm1zbyk7 Cj4+Pj4+PiAgfQo+Pj4+Pj4KPj4+Pj4+ICtpbnQgeGNfbWVtc2hyX3JhbmdlX3NoYXJlKHhjX2lu dGVyZmFjZSAqeGNoLAo+Pj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgZG9taWRfdCBz b3VyY2VfZG9tYWluLAo+Pj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgZG9taWRfdCBj bGllbnRfZG9tYWluLAo+Pj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3Qg c3RhcnQsCj4+Pj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBlbmQpCj4+ Pj4+PiArewo+Pj4+Pj4gKyAgICB4ZW5fbWVtX3NoYXJpbmdfb3BfdCBtc287Cj4+Pj4+PiArCj4+ Pj4+PiArICAgIG1lbXNldCgmbXNvLCAwLCBzaXplb2YobXNvKSk7Cj4+Pj4+PiArCj4+Pj4+PiAr ICAgIG1zby5vcCA9IFhFTk1FTV9zaGFyaW5nX29wX3JhbmdlX3NoYXJlOwo+Pj4+Pj4gKwo+Pj4+ Pj4gKyAgICBtc28udS5yYW5nZS5jbGllbnRfZG9tYWluID0gY2xpZW50X2RvbWFpbjsKPj4+Pj4+ ICsgICAgbXNvLnUucmFuZ2Uuc3RhcnQgPSBzdGFydDsKPj4+Pj4+ICsgICAgbXNvLnUucmFuZ2Uu ZW5kID0gZW5kOwo+Pj4+Pj4gKwo+Pj4+Pj4gKyAgICByZXR1cm4geGNfbWVtc2hyX21lbW9wKHhj aCwgc291cmNlX2RvbWFpbiwgJm1zbyk7Cj4+Pj4+PiArfQo+Pj4+Pj4gKwo+Pj4+Pj4gIGludCB4 Y19tZW1zaHJfZG9tYWluX3Jlc3VtZSh4Y19pbnRlcmZhY2UgKnhjaCwKPj4+Pj4+ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZG9taWRfdCBkb21pZCkKPj4+Pj4+ICB7Cj4+Pj4+PiBkaWZm IC0tZ2l0IGEvdG9vbHMvdGVzdHMvbWVtLXNoYXJpbmcvbWVtc2hydG9vbC5jIGIvdG9vbHMvdGVz dHMvbWVtLXNoYXJpbmcvbWVtc2hydG9vbC5jCj4+Pj4+PiBpbmRleCA0MzdjN2M5Li4yYWY2YTll IDEwMDY0NAo+Pj4+Pj4gLS0tIGEvdG9vbHMvdGVzdHMvbWVtLXNoYXJpbmcvbWVtc2hydG9vbC5j Cj4+Pj4+PiArKysgYi90b29scy90ZXN0cy9tZW0tc2hhcmluZy9tZW1zaHJ0b29sLmMKPj4+Pj4+ IEBAIC0yNCw2ICsyNCw4IEBAIHN0YXRpYyBpbnQgdXNhZ2UoY29uc3QgY2hhciogcHJvZykKPj4+ Pj4+ICAgICAgcHJpbnRmKCIgIG5vbWluYXRlIDxkb21pZD4gPGdmbj4gIC0gTm9taW5hdGUgYSBw YWdlIGZvciBzaGFyaW5nLlxuIik7Cj4+Pj4+PiAgICAgIHByaW50ZigiICBzaGFyZSA8ZG9taWQ+ IDxnZm4+IDxoYW5kbGU+IDxzb3VyY2U+IDxzb3VyY2UtZ2ZuPiA8c291cmNlLWhhbmRsZT5cbiIp Owo+Pj4+Pj4gICAgICBwcmludGYoIiAgICAgICAgICAgICAgICAgICAgICAgICAgLSBTaGFyZSB0 d28gcGFnZXMuXG4iKTsKPj4+Pj4+ICsgICAgcHJpbnRmKCIgIHJhbmdlIDxzb3VyY2UtZG9taWQ+ IDxkZXN0aW5hdGlvbi1kb21pZD4gPHN0YXJ0LWdmbj4gPGVuZC1nZm4+XG4iKTsKPj4+Pj4+ICsg ICAgcHJpbnRmKCIgICAgICAgICAgICAgICAgICAgICAgICAgIC0gU2hhcmUgcGFnZXMgYmV0d2Vl biBkb21haW5zIGluIHJhbmdlLlxuIik7Cj4+Pj4+PiAgICAgIHByaW50ZigiICB1bnNoYXJlIDxk b21pZD4gPGdmbj4gICAtIFVuc2hhcmUgYSBwYWdlIGJ5IGdyYWJiaW5nIGEgd3JpdGFibGUgbWFw LlxuIik7Cj4+Pj4+PiAgICAgIHByaW50ZigiICBhZGQtdG8tcGh5c21hcCA8ZG9taWQ+IDxnZm4+ IDxzb3VyY2U+IDxzb3VyY2UtZ2ZuPiA8c291cmNlLWhhbmRsZT5cbiIpOwo+Pj4+Pj4gICAgICBw cmludGYoIiAgICAgICAgICAgICAgICAgICAgICAgICAgLSBQb3B1bGF0ZSBhIHBhZ2UgaW4gYSBk b21haW4gd2l0aCBhIHNoYXJlZCBwYWdlLlxuIik7Cj4+Pj4+PiBAQCAtMTgwLDYgKzE4MiwyNiBA QCBpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhcioqIGFyZ3YpCj4+Pj4+PiAgICAgICAgICB9 Cj4+Pj4+PiAgICAgICAgICBwcmludGYoIkF1ZGl0IHJldHVybmVkICVkIGVycm9ycy5cbiIsIHJj KTsKPj4+Pj4+ICAgICAgfQo+Pj4+Pj4gKyAgICBlbHNlIGlmKCAhc3RyY2FzZWNtcChjbWQsICJy YW5nZSIpICkKPj4+Pj4+ICsgICAgewo+Pj4+Pj4gKyAgICAgICAgZG9taWRfdCBzZG9taWQsIGNk b21pZDsKPj4+Pj4+ICsgICAgICAgIGludCByYzsKPj4+Pj4+ICsgICAgICAgIHVpbnQ2NF90IHN0 YXJ0LCBlbmQ7Cj4+Pj4+PiArCj4+Pj4+PiArICAgICAgICBpZiAoIGFyZ2MgIT0gNiApCj4+Pj4+ PiArICAgICAgICAgICAgcmV0dXJuIHVzYWdlKGFyZ3ZbMF0pOwo+Pj4+Pj4KPj4+Pj4+ICsgICAg ICAgIHNkb21pZCA9IHN0cnRvbChhcmd2WzJdLCBOVUxMLCAwKTsKPj4+Pj4+ICsgICAgICAgIGNk b21pZCA9IHN0cnRvbChhcmd2WzNdLCBOVUxMLCAwKTsKPj4+Pj4+ICsgICAgICAgIHN0YXJ0ID0g c3RydG91bChhcmd2WzRdLCBOVUxMLCAwKTsKPj4+Pj4+ICsgICAgICAgIGVuZCA9IHN0cnRvdWwo YXJndls1XSwgTlVMTCwgMCk7Cj4+Pj4+PiArCj4+Pj4+PiArICAgICAgICByYyA9IHhjX21lbXNo cl9yYW5nZV9zaGFyZSh4Y2gsIHNkb21pZCwgY2RvbWlkLCBzdGFydCwgZW5kKTsKPj4+Pj4+ICsg ICAgICAgIGlmICggcmMgPCAwICkKPj4+Pj4+ICsgICAgICAgIHsKPj4+Pj4+ICsgICAgICAgICAg ICBwcmludGYoImVycm9yIGV4ZWN1dGluZyB4Y19tZW1zaHJfcmFuZ2Vfc2hhcmU6ICVzXG4iLCBz dHJlcnJvcihlcnJubykpOwo+Pj4+Pj4gKyAgICAgICAgICAgIHJldHVybiByYzsKPj4+Pj4+ICsg ICAgICAgIH0KPj4+Pj4+ICsgICAgfQo+Pj4+Pj4gICAgICByZXR1cm4gMDsKPj4+Pj4+ICB9Cj4+ Pj4+PiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L21tL21lbV9zaGFyaW5nLmMgYi94ZW4vYXJj aC94ODYvbW0vbWVtX3NoYXJpbmcuYwo+Pj4+Pj4gaW5kZXggYTUyMjQyMy4uMzI5ZmJkOSAxMDA2 NDQKPj4+Pj4+IC0tLSBhL3hlbi9hcmNoL3g4Ni9tbS9tZW1fc2hhcmluZy5jCj4+Pj4+PiArKysg Yi94ZW4vYXJjaC94ODYvbW0vbWVtX3NoYXJpbmcuYwo+Pj4+Pj4gQEAgLTEyOTQsNiArMTI5NCw1 OCBAQCBpbnQgcmVsaW5xdWlzaF9zaGFyZWRfcGFnZXMoc3RydWN0IGRvbWFpbiAqZCkKPj4+Pj4+ ICAgICAgcmV0dXJuIHJjOwo+Pj4+Pj4gIH0KPj4+Pj4+Cj4+Pj4+PiArc3RhdGljIGludCByYW5n ZV9zaGFyZShzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3QgZG9tYWluICpjZCwKPj4+Pj4+ICsgICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtZW1fc2hhcmluZ19vcF9yYW5nZSAqcmFuZ2UpCj4+ Pj4+PiArewo+Pj4+Pj4gKyAgICBpbnQgcmMgPSAwOwo+Pj4+Pj4gKyAgICBzaHJfaGFuZGxlX3Qg c2gsIGNoOwo+Pj4+Pj4gKyAgICB1bnNpZ25lZCBsb25nIHN0YXJ0ID0gcmFuZ2UtPl9zY3JhdGNo c3BhY2UgPzogcmFuZ2UtPnN0YXJ0Owo+Pj4+Pj4gKwo+Pj4+Pj4gKyAgICB3aGlsZSggcmFuZ2Ut PmVuZCA+PSBzdGFydCApCj4+Pj4+PiArICAgIHsKPj4+Pj4+ICsgICAgICAgIC8qCj4+Pj4+PiAr ICAgICAgICAgKiBXZSBvbmx5IGJyZWFrIG91dCBpZiB3ZSBydW4gb3V0IG9mIG1lbW9yeSBhcyBp bmRpdmlkdWFsIHBhZ2VzIG1heQo+Pj4+Pj4gKyAgICAgICAgICogbGVnaXRpbWF0ZWx5IGJlIHVu c2hhcmFibGUgYW5kIHdlIGp1c3Qgd2FudCB0byBza2lwIG92ZXIgdGhvc2UuCj4+Pj4+PiArICAg ICAgICAgKi8KPj4+Pj4+ICsgICAgICAgIHJjID0gbWVtX3NoYXJpbmdfbm9taW5hdGVfcGFnZShk LCBzdGFydCwgMCwgJnNoKTsKPj4+Pj4+ICsgICAgICAgIGlmICggcmMgPT0gLUVOT01FTSApCj4+ Pj4+PiArICAgICAgICAgICAgYnJlYWs7Cj4+Pj4+PiArCj4+Pj4+PiArICAgICAgICBpZiAoICFy YyApCj4+Pj4+PiArICAgICAgICB7Cj4+Pj4+PiArICAgICAgICAgICAgcmMgPSBtZW1fc2hhcmlu Z19ub21pbmF0ZV9wYWdlKGNkLCBzdGFydCwgMCwgJmNoKTsKPj4+Pj4+ICsgICAgICAgICAgICBp ZiAoIHJjID09IC1FTk9NRU0gKQo+Pj4+Pj4gKyAgICAgICAgICAgICAgICBicmVhazsKPj4+Pj4+ ICsKPj4+Pj4+ICsgICAgICAgICAgICBpZiAoICFyYyApCj4+Pj4+PiArICAgICAgICAgICAgewo+ Pj4+Pj4gKyAgICAgICAgICAgICAgICAvKiBJZiB3ZSBnZXQgaGVyZSB0aGlzIHNob3VsZCBiZSBn dWFyYW50ZWVkIHRvIHN1Y2NlZWQuICovCj4+Pj4+PiArICAgICAgICAgICAgICAgIHJjID0gbWVt X3NoYXJpbmdfc2hhcmVfcGFnZXMoZCwgc3RhcnQsIHNoLAo+Pj4+Pj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNkLCBzdGFydCwgY2gpOwo+Pj4+Pj4gKyAg ICAgICAgICAgICAgICBBU1NFUlQoIXJjKTsKPj4+Pj4+ICsgICAgICAgICAgICB9Cj4+Pj4+PiAr ICAgICAgICB9Cj4+Pj4+PiArCj4+Pj4+PiArICAgICAgICAvKiBDaGVjayBmb3IgY29udGludWF0 aW9uIGlmIGl0J3Mgbm90IHRoZSBsYXN0IGl0ZXJhdGlvbi4gKi8KPj4+Pj4+ICsgICAgICAgIGlm ICggcmFuZ2UtPmVuZCA+PSArK3N0YXJ0ICYmIGh5cGVyY2FsbF9wcmVlbXB0X2NoZWNrKCkgKQo+ Pj4+Pj4gKyAgICAgICAgewo+Pj4+Pj4gKyAgICAgICAgICAgIHJjID0gMTsKPj4+Pj4+ICsgICAg ICAgICAgICBicmVhazsKPj4+Pj4+ICsgICAgICAgIH0KPj4+Pj4+ICsgICAgfQo+Pj4+Pj4gKwo+ Pj4+Pj4gKyAgICByYW5nZS0+X3NjcmF0Y2hzcGFjZSA9IHN0YXJ0Owo+Pj4+Pj4gKwo+Pj4+Pj4g KyAgICAvKgo+Pj4+Pj4gKyAgICAgKiBUaGUgbGFzdCBwYWdlIG1heSBmYWlsIHdpdGggLUVJTlZB TCwgYW5kIGZvciByYW5nZSBzaGFyaW5nIHdlIGRvbid0Cj4+Pj4+PiArICAgICAqIGNhcmUgYWJv dXQgdGhhdC4KPj4+Pj4+ICsgICAgICovCj4+Pj4+PiArICAgIGlmICggcmFuZ2UtPmVuZCA8IHN0 YXJ0ICYmIHJjID09IC1FSU5WQUwgKQo+Pj4+Pj4gKyAgICAgICAgcmMgPSAwOwo+Pj4+Pj4gKwo+ Pj4+Pj4gKyAgICByZXR1cm4gcmM7Cj4+Pj4+PiArfQo+Pj4+Pj4gKwo+Pj4+Pj4gIGludCBtZW1f c2hhcmluZ19tZW1vcChYRU5fR1VFU1RfSEFORExFX1BBUkFNKHhlbl9tZW1fc2hhcmluZ19vcF90 KSBhcmcpCj4+Pj4+PiAgewo+Pj4+Pj4gICAgICBpbnQgcmM7Cj4+Pj4+PiBAQCAtMTQ2OCw2ICsx NTIwLDk0IEBAIGludCBtZW1fc2hhcmluZ19tZW1vcChYRU5fR1VFU1RfSEFORExFX1BBUkFNKHhl bl9tZW1fc2hhcmluZ19vcF90KSBhcmcpCj4+Pj4+PiAgICAgICAgICB9Cj4+Pj4+PiAgICAgICAg ICBicmVhazsKPj4+Pj4+Cj4+Pj4+PiArICAgICAgICBjYXNlIFhFTk1FTV9zaGFyaW5nX29wX3Jh bmdlX3NoYXJlOgo+Pj4+Pj4gKyAgICAgICAgewo+Pj4+Pj4gKyAgICAgICAgICAgIHVuc2lnbmVk IGxvbmcgbWF4X3NnZm4sIG1heF9jZ2ZuOwo+Pj4+Pj4gKyAgICAgICAgICAgIHN0cnVjdCBkb21h aW4gKmNkOwo+Pj4+Pj4gKwo+Pj4+Pj4gKyAgICAgICAgICAgIHJjID0gLUVJTlZBTDsKPj4+Pj4+ ICsgICAgICAgICAgICBpZiAoIG1zby51LnJhbmdlLl9wYWRbMF0gfHwgbXNvLnUucmFuZ2UuX3Bh ZFsxXSB8fAo+Pj4+Pj4gKyAgICAgICAgICAgICAgICAgbXNvLnUucmFuZ2UuX3BhZFsyXSApCj4+ Pj4+PiArICAgICAgICAgICAgICAgICBnb3RvIG91dDsKPj4+Pj4+ICsKPj4+Pj4+ICsgICAgICAg ICAgICAvKgo+Pj4+Pj4gKyAgICAgICAgICAgICAqIFdlIHVzZSBfc2NyYXRjaHNjYXBlIGZvciB0 aGUgaHlwZXJjYWxsIGNvbnRpbnVhdGlvbiB2YWx1ZS4KPj4+Pj4+ICsgICAgICAgICAgICAgKiBJ ZGVhbGx5IHRoZSB1c2VyIHNldHMgdGhpcyB0byAwIGluIHRoZSBiZWdpbm5pbmcgYnV0Cj4+Pj4+ PiArICAgICAgICAgICAgICogdGhlcmUgaXMgbm8gZ29vZCB3YXkgb2YgZW5mb3JjaW5nIHRoYXQg aGVyZSwgc28gd2UganVzdCBjaGVjawo+Pj4+Pj4gKyAgICAgICAgICAgICAqIHRoYXQgaXQncyBh dCBsZWFzdCBpbiByYW5nZS4KPj4+Pj4+ICsgICAgICAgICAgICAgKi8KPj4+Pj4+ICsgICAgICAg ICAgICBpZiAoIG1zby51LnJhbmdlLl9zY3JhdGNoc3BhY2UgJiYKPj4+Pj4+ICsgICAgICAgICAg ICAgICAgIChtc28udS5yYW5nZS5fc2NyYXRjaHNwYWNlIDwgbXNvLnUucmFuZ2Uuc3RhcnQgfHwK Pj4+Pj4+ICsgICAgICAgICAgICAgICAgICBtc28udS5yYW5nZS5fc2NyYXRjaHNwYWNlID4gbXNv LnUucmFuZ2UuZW5kKSApCj4+Pj4+PiArICAgICAgICAgICAgICAgIGdvdG8gb3V0Owo+Pj4+Pj4g Kwo+Pj4+Pj4gKyAgICAgICAgICAgIGlmICggIW1lbV9zaGFyaW5nX2VuYWJsZWQoZCkgKQo+Pj4+ Pj4gKyAgICAgICAgICAgICAgICBnb3RvIG91dDsKPj4+Pj4+ICsKPj4+Pj4+ICsgICAgICAgICAg ICByYyA9IHJjdV9sb2NrX2xpdmVfcmVtb3RlX2RvbWFpbl9ieV9pZChtc28udS5yYW5nZS5jbGll bnRfZG9tYWluLAo+Pj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZjZCk7Cj4+Pj4+PiArICAgICAgICAgICAgaWYgKCByYyApCj4+Pj4+PiAr ICAgICAgICAgICAgICAgIGdvdG8gb3V0Owo+Pj4+Pj4gKwo+Pj4+Pj4gKyAgICAgICAgICAgIC8q Cj4+Pj4+PiArICAgICAgICAgICAgICogV2UgcmV1c2UgWEVOTUVNX3NoYXJpbmdfb3Bfc2hhcmUg WFNNIGNoZWNrIGhlcmUgYXMgdGhpcyBpcwo+Pj4+Pj4gKyAgICAgICAgICAgICAqIGVzc2VudGlh bGx5IHRoZSBzYW1lIGNvbmNlcHQgcmVwZWF0ZWQgb3ZlciBtdWx0aXBsZSBwYWdlcy4KPj4+Pj4+ ICsgICAgICAgICAgICAgKi8KPj4+Pj4+ICsgICAgICAgICAgICByYyA9IHhzbV9tZW1fc2hhcmlu Z19vcChYU01fRE1fUFJJViwgZCwgY2QsCj4+Pj4+PiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgWEVOTUVNX3NoYXJpbmdfb3Bfc2hhcmUpOwo+Pj4+Pj4gKyAgICAgICAgICAg IGlmICggcmMgKQo+Pj4+Pj4gKyAgICAgICAgICAgIHsKPj4+Pj4+ICsgICAgICAgICAgICAgICAg cmN1X3VubG9ja19kb21haW4oY2QpOwo+Pj4+Pj4gKyAgICAgICAgICAgICAgICBnb3RvIG91dDsK Pj4+Pj4+ICsgICAgICAgICAgICB9Cj4+Pj4+PiArCj4+Pj4+PiArICAgICAgICAgICAgaWYgKCAh bWVtX3NoYXJpbmdfZW5hYmxlZChjZCkgKQo+Pj4+Pj4gKyAgICAgICAgICAgIHsKPj4+Pj4+ICsg ICAgICAgICAgICAgICAgcmN1X3VubG9ja19kb21haW4oY2QpOwo+Pj4+Pj4gKyAgICAgICAgICAg ICAgICByYyA9IC1FSU5WQUw7Cj4+Pj4+PiArICAgICAgICAgICAgICAgIGdvdG8gb3V0Owo+Pj4+ Pj4gKyAgICAgICAgICAgIH0KPj4+Pj4+ICsKPj4+Pj4+ICsgICAgICAgICAgICAvKgo+Pj4+Pj4g KyAgICAgICAgICAgICAqIFNhbml0eSBjaGVjayBvbmx5LCB0aGUgY2xpZW50IHNob3VsZCBrZWVw IHRoZSBkb21haW5zIHBhdXNlZCBmb3IKPj4+Pj4+ICsgICAgICAgICAgICAgKiB0aGUgZHVyYXRp b24gb2YgdGhpcyBvcC4KPj4+Pj4+ICsgICAgICAgICAgICAgKi8KPj4+Pj4+ICsgICAgICAgICAg ICBpZiAoICFhdG9taWNfcmVhZCgmZC0+cGF1c2VfY291bnQpIHx8Cj4+Pj4+PiArICAgICAgICAg ICAgICAgICAhYXRvbWljX3JlYWQoJmNkLT5wYXVzZV9jb3VudCkgKQo+Pj4+Pj4gKyAgICAgICAg ICAgIHsKPj4+Pj4+ICsgICAgICAgICAgICAgICAgcmN1X3VubG9ja19kb21haW4oY2QpOwo+Pj4+ Pj4gKyAgICAgICAgICAgICAgICByYyA9IC1FSU5WQUw7Cj4+Pj4+PiArICAgICAgICAgICAgICAg IGdvdG8gb3V0Owo+Pj4+Pj4gKyAgICAgICAgICAgIH0KPj4+Pj4+ICsKPj4+Pj4+ICsgICAgICAg ICAgICBtYXhfc2dmbiA9IGRvbWFpbl9nZXRfbWF4aW11bV9ncGZuKGQpOwo+Pj4+Pj4gKyAgICAg ICAgICAgIG1heF9jZ2ZuID0gZG9tYWluX2dldF9tYXhpbXVtX2dwZm4oY2QpOwo+Pj4+Pj4gKwo+ Pj4+Pj4gKyAgICAgICAgICAgIGlmICggbWF4X3NnZm4gPCBtc28udS5yYW5nZS5zdGFydCB8fCBt YXhfc2dmbiA8IG1zby51LnJhbmdlLmVuZCB8fAo+Pj4+Pj4gKyAgICAgICAgICAgICAgICAgbWF4 X2NnZm4gPCBtc28udS5yYW5nZS5zdGFydCB8fCBtYXhfY2dmbiA8IG1zby51LnJhbmdlLmVuZCAp Cj4+Pj4+PiArICAgICAgICAgICAgewo+Pj4+Pj4gKyAgICAgICAgICAgICAgICByY3VfdW5sb2Nr X2RvbWFpbihjZCk7Cj4+Pj4+PiArICAgICAgICAgICAgICAgIHJjID0gLUVJTlZBTDsKPj4+Pj4+ ICsgICAgICAgICAgICAgICAgZ290byBvdXQ7Cj4+Pj4+PiArICAgICAgICAgICAgfQo+Pj4+Pj4g Kwo+Pj4+Pj4gKyAgICAgICAgICAgIHJjID0gcmFuZ2Vfc2hhcmUoZCwgY2QsICZtc28udS5yYW5n ZSk7Cj4+Pj4+PiArICAgICAgICAgICAgcmN1X3VubG9ja19kb21haW4oY2QpOwo+Pj4+Pj4gKwo+ Pj4+Pj4gKyAgICAgICAgICAgIGlmICggcmMgPiAwICkKPj4+Pj4+ICsgICAgICAgICAgICB7Cj4+ Pj4+PiArICAgICAgICAgICAgICAgIGlmICggX19jb3B5X3RvX2d1ZXN0KGFyZywgJm1zbywgMSkg KQo+Pj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgcmMgPSAtRUZBVUxUOwo+Pj4+Pj4gKyAgICAg ICAgICAgICAgICBlbHNlCj4+Pj4+PiArICAgICAgICAgICAgICAgICAgICByYyA9IGh5cGVyY2Fs bF9jcmVhdGVfY29udGludWF0aW9uKF9fSFlQRVJWSVNPUl9tZW1vcnlfb3AsCj4+Pj4+PiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaCIs IFhFTk1FTV9zaGFyaW5nX29wLAo+Pj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcpOwo+Pj4+Pj4gKyAgICAgICAgICAgIH0KPj4+ Pj4+ICsgICAgICAgICAgICBlbHNlCj4+Pj4+PiArICAgICAgICAgICAgICAgIG1zby51LnJhbmdl Ll9zY3JhdGNoc3BhY2UgPSAwOwo+Pj4+Pj4gKyAgICAgICAgfQo+Pj4+Pj4gKyAgICAgICAgYnJl YWs7Cj4+Pj4+PiArCj4+Pj4+PiAgICAgICAgICBjYXNlIFhFTk1FTV9zaGFyaW5nX29wX2RlYnVn X2dmbjoKPj4+Pj4+ICAgICAgICAgIHsKPj4+Pj4+ICAgICAgICAgICAgICB1bnNpZ25lZCBsb25n IGdmbiA9IG1zby51LmRlYnVnLnUuZ2ZuOwo+Pj4+Pj4gZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRl L3B1YmxpYy9tZW1vcnkuaCBiL3hlbi9pbmNsdWRlL3B1YmxpYy9tZW1vcnkuaAo+Pj4+Pj4gaW5k ZXggMjllYzU3MS4uZTBiYzAxOCAxMDA2NDQKPj4+Pj4+IC0tLSBhL3hlbi9pbmNsdWRlL3B1Ymxp Yy9tZW1vcnkuaAo+Pj4+Pj4gKysrIGIveGVuL2luY2x1ZGUvcHVibGljL21lbW9yeS5oCj4+Pj4+ PiBAQCAtNDY1LDYgKzQ2NSw3IEBAIERFRklORV9YRU5fR1VFU1RfSEFORExFKHhlbl9tZW1fYWNj ZXNzX29wX3QpOwo+Pj4+Pj4gICNkZWZpbmUgWEVOTUVNX3NoYXJpbmdfb3BfZGVidWdfZ3JlZiAg ICAgICAgNQo+Pj4+Pj4gICNkZWZpbmUgWEVOTUVNX3NoYXJpbmdfb3BfYWRkX3BoeXNtYXAgICAg ICAgNgo+Pj4+Pj4gICNkZWZpbmUgWEVOTUVNX3NoYXJpbmdfb3BfYXVkaXQgICAgICAgICAgICAg Nwo+Pj4+Pj4gKyNkZWZpbmUgWEVOTUVNX3NoYXJpbmdfb3BfcmFuZ2Vfc2hhcmUgICAgICAgOAo+ Pj4+Pj4KPj4+Pj4+ICAjZGVmaW5lIFhFTk1FTV9TSEFSSU5HX09QX1NfSEFORExFX0lOVkFMSUQg ICgtMTApCj4+Pj4+PiAgI2RlZmluZSBYRU5NRU1fU0hBUklOR19PUF9DX0hBTkRMRV9JTlZBTElE ICAoLTkpCj4+Pj4+PiBAQCAtNTAwLDcgKzUwMSwxNCBAQCBzdHJ1Y3QgeGVuX21lbV9zaGFyaW5n X29wIHsKPj4+Pj4+ICAgICAgICAgICAgICB1aW50NjRfYWxpZ25lZF90IGNsaWVudF9nZm47ICAg IC8qIElOOiB0aGUgY2xpZW50IGdmbiAqLwo+Pj4+Pj4gICAgICAgICAgICAgIHVpbnQ2NF9hbGln bmVkX3QgY2xpZW50X2hhbmRsZTsgLyogSU46IGhhbmRsZSB0byB0aGUgY2xpZW50IHBhZ2UgKi8K Pj4+Pj4+ICAgICAgICAgICAgICBkb21pZF90ICBjbGllbnRfZG9tYWluOyAvKiBJTjogdGhlIGNs aWVudCBkb21haW4gaWQgKi8KPj4+Pj4+IC0gICAgICAgIH0gc2hhcmU7Cj4+Pj4+PiArICAgICAg ICB9IHNoYXJlOwo+Pj4+Pj4gKyAgICAgICAgc3RydWN0IG1lbV9zaGFyaW5nX29wX3JhbmdlIHsg ICAgICAgICAvKiBPUF9SQU5HRV9TSEFSRSAqLwo+Pj4+Pj4gKyAgICAgICAgICAgIHVpbnQ2NF9h bGlnbmVkX3Qgc3RhcnQ7ICAgICAgICAgIC8qIElOOiBzdGFydCBnZm4uICovCj4+Pj4+PiArICAg ICAgICAgICAgdWludDY0X2FsaWduZWRfdCBlbmQ7ICAgICAgICAgICAgLyogSU46IGVuZCBnZm4g KGluY2x1c2l2ZSkgKi8KPj4+Pj4+ICsgICAgICAgICAgICB1aW50NjRfYWxpZ25lZF90IF9zY3Jh dGNoc3BhY2U7ICAvKiBNdXN0IGJlIHNldCB0byAwICovCj4+Pj4+IFRhbWFzLAo+Pj4+Pgo+Pj4+ PiBXaHkgaW5jbHVkZSB0aGlzICJzY3JhdGNoc3BhY2UiIHRoYXQncyBub3QgdXNlZCBpbiB0aGUg aW50ZXJmYWNlLAo+Pj4+PiByYXRoZXIgdGhhbiBqdXN0IGRvaW5nIHdoYXQgdGhlIG1lbW9yeSBv cGVyYXRpb25zIGluCj4+Pj4+IHhlbi9jb21tb24vbWVtb3J5LmMgZG8sIGFuZCBzdG9yZSBpdCBp biBFQVggYnkgc2hpZnRpbmcgaXQgb3ZlciBieQo+Pj4+PiBNRU1PUF9FWFRFTlRfU0hJRlQ/ICBJ IGxvb2tlZCB0aHJvdWdoIHRoZSBoaXN0b3J5IGFuZCBJIHNlZSB0aGF0IHYxCj4+Pj4+IGRpZCBz b21ldGhpbmcgdmVyeSBtdWNoIGxpa2UgdGhhdCwgYnV0IGl0IHdhcyBjaGFuZ2VkIHRvIHVzaW5n IHRoZQo+Pj4+PiBzY3JhdGNoIHNwYWNlIHdpdGhvdXQgYW55IGV4cGxhbmF0aW9uLgo+Pj4+Pgo+ Pj4+PiBIYXZpbmcgdGhpcyBpbiB0aGUgcHVibGljIGludGVyZmFjZSBpcyB1Z2x5OyBhbmQgd2hh dCdzIHdvcnNlLCBpdAo+Pj4+PiBleHBvc2VzIHNvbWUgb2YgdGhlIGludGVybmFsIG1lY2hhbmlz bSB0byB0aGUgZ3Vlc3QuCj4+Pj4+Cj4+Pj4+ICAtR2VvcmdlCj4+Pj4gV2VsbCwgdGhhdCdzIGV4 YWN0bHkgd2hhdCBJIGRpZCBpbiBhbiBlYXJsaWVyIHZlcnNpb24gb2YgdGhlIHBhdGNoIGJ1dAo+ Pj4+IGl0IHdhcyByZXF1ZXN0ZWQgdGhhdCBJIGNoYW5nZSBpdCB0byBzb21ldGhpbmcgbGlrZSB0 aGlzIGJ5IEFuZHJldwo+Pj4+IChzZWUgaHR0cHM6Ly9saXN0cy54ZW4ub3JnL2FyY2hpdmVzL2h0 bWwveGVuLWRldmVsLzIwMTUtMTAvbXNnMDA0MzQuaHRtbCkuCj4+Pj4gVGhlbiBvdmVyIHRoZSB2 YXJpb3VzIGl0ZXJhdGlvbnMgaXQgZW5kZWQgdXAgbGlrZSBsb29raW5nIGxpa2UgdGhpcy4KPj4+ IE9oIHJpZ2h0IC0tIHNvcnJ5LCBJIGRpZCBsb29rIGJ1dCBzb21laG93IEkgbWlzc2VkIHRoYXQg QW5kcmV3IGhhZCByZXF1ZXN0ZWQgaXQuCj4+Pgo+Pj4gSSB3b3VsZCBoYXZlIHJlYWQgaGlzIGNv bW1lbnQgdG8gIG1lYW4gdG8gcHV0IHRoZSBfc2NyYXRjaHNwYWNlCj4+PiB2YXJpYWJsZSBpbiB0 aGUgbGFyZ2VyIHN0cnVjdHVyZS4gIEJ1dCBpdCBoYXMgaGlzIFItYiwgc28gSSdsbAo+Pj4gY29u c2lkZXIgbXlzZWxmIGFuc3dlcmVkLgo+PiBJIGFtIG9wZW4gdG8gb3RoZXIgc3VnZ2VzdGlvbiB3 cnQgbmFtaW5nLCBidXQgd2Fzbid0IGxvb2tpbmcgdG8gYmlrZXNoZWQKPj4gdGhlIGlzc3VlLgo+ IE15IHF1ZXN0aW9uIHdhc24ndCBhYm91dCBuYW1pbmcgc28gbXVjaCBhcyB0aGUgaWRlYSBvZiBz dGFzaGluZyBpbnRlcm5hbAo+IGltcGxlbWVudGF0aW9uIG1lY2hhbmlzbSBpbiB0aGUgcHVibGlj IGludGVyZmFjZSBpbiB0aGUgZmlyc3QgcGxhY2UsCj4gcmF0aGVyIHRoYW4ganVzdCBkb2luZyB3 aGF0IGFsbCB0aGUgb3RoZXIgbWVtb3J5IG9wZXJhdGlvbnMgZG8sIHdoaWNoIGlzCj4gc3Rhc2gg aXQgaW4gRUFYLgoKU3Rhc2hpbmcgaW4gZWF4IGlzIGEgZ3Jvc3MgaGFjayBeVyBuZWNlc3Nhcnkg cmVzb3J0IChmb3IgYSBwcmV2aW91cyBYU0EKaWlyYykgd2hlcmUgd2UgbmVlZGVkIHRvIHJldHJv Zml0IGNvbnRpbnVhdGlvbnMgaW50byBhbiBpbnRlcmZhY2Ugd2hpY2gKY291bGRuJ3Qgc3VwcG9y dCB0aGVtLgoKU2luY2UgdGhlbiwgYWxsIG5ldyBpbnRlcmZhY2VzIGxpYWJsZSB0byByZXF1aXJl IGNvbnRpbnVhdGlvbnMgaGF2ZSBiZWVuCmhhdmluZyBleHBsaWNpdCByb29tIHRvIGRvIHNvLCB0 byBhdm9pZCBzdGFzaGluZyBpbiBlYXguCgp+QW5kcmV3CgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZl bEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK