From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chao Gao Subject: Re: [PATCH v2] x86/apicv: enhance posted-interrupt processing Date: Wed, 1 Mar 2017 14:23:37 +0800 Message-ID: <20170301062337.GA65989@skl-2s3.sh.intel.com> References: <58B5A060020000780013E513@prv-mh.provo.novell.com> <58B6888F020000780013E812@prv-mh.provo.novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <58B6888F020000780013E812@prv-mh.provo.novell.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Jan Beulich , "Xuquan (Quan Xu)" Cc: "yang.zhang.wz@gmail.com" , KevinTian , "quan.xu0@gmail.com" , Andrew Cooper , "xen-devel@lists.xen.org" , Jun Nakajima List-Id: xen-devel@lists.xenproject.org T24gV2VkLCBNYXIgMDEsIDIwMTcgYXQgMTI6Mzg6MzlBTSAtMDcwMCwgSmFuIEJldWxpY2ggd3Jv dGU6Cj4+Pj4gT24gMDEuMDMuMTcgYXQgMDQ6MjMsIDx4dXF1YW44QGh1YXdlaS5jb20+IHdyb3Rl Ogo+PiBPbiBGZWJydWFyeSAyOCwgMjAxNyAxMTowOCBQTSwgSmFuIEJldWxpY2ggd3JvdGU6Cj4+ Pj4+PiBPbiAyNy4wMi4xNyBhdCAxMTo1MywgPHh1cXVhbjhAaHVhd2VpLmNvbT4gd3JvdGU6Cj4+ Pj4gSWYgZ3Vlc3QgaXMgYWxyZWFkeSBpbiBub24tcm9vdCBtb2RlLCBhbiBwb3N0ZWQgaW50ZXJy dXB0IHdpbGwgYmUKPj4+PiBkaXJlY3RseSBkZWxpdmVyZWQgdG8gZ3Vlc3QgKGxlYXZpbmcgc29m dGlycSBiZWluZyBzZXQgd2l0aG91dAo+Pj4+IGFjdHVhbGx5IGluY3VycmluZyBhIFZNLUV4aXQg LSBicmVha2luZyBkZXNpcmVkIHNvZnRpcnEgYmVoYXZpb3IpLgo+Pj4KPj4+VGhpcyBpcyBpcnJp dGF0aW5nIC0gYXJlIHlvdSBkZXNjcmliaW5nIGEgcHJvYmxlbSB5b3UgbWVhbiB0byBmaXggd2l0 aCB0aGlzIHBhdGNoLAo+Pj53aXRob3V0IG1ha2luZyBjbGVhciB3aGF0IHRoZSBmaXggaXM/IE9y IGFyZSB5b3UgZGVzY3JpYmluZyBzdGF0ZSBhZnRlciB0aGlzCj4+PnBhdGNoICh3aGljaCB0aGUg Y29kZSBiZWxvdyBzdWdnZXN0cyksIGluIHdoaWNoIGNhc2UgSSBoYXZlIHRvIHNheSBubywgd2UK Pj4+Y2VydGFpbmx5IGRvbid0IHdhbnQgdGhpcy4KPj4+Cj4+IAo+PiBTb3JyeS4gSSBrbmV3IHlv dSB3b3VsZCBub3QgbGlrZSBhbnkgYXNzdW1wdGlvbiBpbiBwYXRjaCBkZXNjcmlwdGlvbi4uIAo+ PiBCdXQgSSB0aGluayB0aGlzIG9uZSByZWFsbHkgaGVscCBjb21tdW5pdHkgdW5kZXJzdGFuZCB3 aGF0IHRoZSBwcm9ibGVtIGlzKCAKPj4gdGhpcyBpcyBhbHNvIHZhbHVhYmxlKS4KPj4gQWxzbywg YXMgeW91IGtub3csIEkgYW0gYSBjbHVtc3kgaW4gcGF0Y2ggZGVzY3JpcHRpb24gYW5kIGFsd2F5 cyBvcGVuIHRvIAo+PiB5b3VyIHN1Z2dlc3Rpb24uCj4+IDopIHBsZWFzZSBkb24ndCBiZSBpcnJp dGF0ZWQuLiBpZiB5b3UgaGF2ZSBhIGJldHRlciBkZXNjcmlwdGlvbiwgSSBhbSBhbHdheXMgCj4+ IG9wZW4gdG8gaXQuCj4KPldlbGwsIHRoZSBwcm9ibGVtIGhlcmUgaXMgdGhhdCBhIHN1aXRhYmxl IHBhdGNoIGRlc2NyaXB0aW9uIGlzIHZpdGFsIHRvCj51bmRlcnN0YW5kIHdoYXQgd2FzIHdyb25n IGFuZCB3aHkgdGhlIG5ldyBiZWhhdmlvciBpcyB3aGF0IHdlCj53YW50LiBIZW5jZSB5b3UgcmVh bGx5IG5lZWQgdG8gdmlldyBtZSBhcyB0aGUgY29uc3VtZXIgb2YgaXQsIGkuZS4KPnlvdSBjYW4n dCByZWx5IG9uIG1lIHRvIGRlc2NyaWJlIHlvdXIgY2hhbmdlIGFuZC9vciBmaW5kaW5ncy4KPgo+ Pj4+IFRoZW4gZnVydGhlciBwb3N0ZWQgaW50ZXJydXB0cyB3aWxsIHNraXAgdGhlIElQSSwgc3Rh eSBpbiBQSVIgYW5kIG5vdAo+Pj4+IG5vdGVkIHVudGlsIGFub3RoZXIgVk0tRXhpdCBoYXBwZW5z Lgo+Pj4+Cj4+Pj4gV2hlbiB0YXJnZXQgdkNQVSBpcyBpbiBub24tcm9vdCBtb2RlIGFuZCBydW5u aW5nIG9uIHJlbW90ZSBDUFUsIHBvc3RlZAo+Pj4+IHdheSBpcyB0cmlnZ2VyZWQgdG8gaW5qZWN0 IGludGVycnVwdCB3aXRob3V0IFZNLUV4aXQuCj4+Pj4gT3RoZXJ3aXNlLCBzZXQgVkNQVV9LSUNL X1NPRlRJUlEgYml0IHRvIGluamVjdCBpbnRlcnJ1cHQgdW50aWwgYW5vdGhlcgo+Pj4+IFZNLUVu dHJ5IGFzIGEgYmVzdCBlZmZvcnQuCj4+Pgo+Pj5GdXJ0aGVybW9yZSB5b3UgdGFsa2luZyBhYm91 dCBub24tcm9vdCBtb2RlIGhlcmUgZG9lc24ndCBmaXQgd2l0aCB0aGUgY29kZQo+Pj5jaGFuZ2Us IGFzIHlvdSBjYW4ndCBmaW5kIG91dCB3aGV0aGVyIHRoZSBndWVzdCBpcyBpbiBub24tcm9vdCBt b2RlLgo+Pj4KPj4gCj4+IFJlcGx5IGluIGJlbG93Li4KPj4gCj4+Pj4gLS0tIGEveGVuL2FyY2gv eDg2L2h2bS92bXgvdm14LmMKPj4+PiArKysgYi94ZW4vYXJjaC94ODYvaHZtL3ZteC92bXguYwo+ Pj4+IEBAIC0xODM5LDE3ICsxODM5LDE0IEBAIHN0YXRpYyB2b2lkIHZteF9wcm9jZXNzX2lzcihp bnQgaXNyLCBzdHJ1Y3QKPj4+PiB2Y3B1ICp2KQo+Pj4+Cj4+Pj4gIHN0YXRpYyB2b2lkIF9fdm14 X2RlbGl2ZXJfcG9zdGVkX2ludGVycnVwdChzdHJ1Y3QgdmNwdSAqdikgIHsKPj4+PiAtICAgIGJv b2xfdCBydW5uaW5nID0gdi0+aXNfcnVubmluZzsKPj4+PiArICAgIHVuc2lnbmVkIGludCBjcHUg PSB2LT5wcm9jZXNzb3I7Cj4+Pj4KPj4+PiAgICAgIHZjcHVfdW5ibG9jayh2KTsKPj4+PiAtICAg IGlmICggcnVubmluZyAmJiAoaW5faXJxKCkgfHwgKHYgIT0gY3VycmVudCkpICkKPj4+PiAtICAg IHsKPj4+PiAtICAgICAgICB1bnNpZ25lZCBpbnQgY3B1ID0gdi0+cHJvY2Vzc29yOwo+Pj4+IC0K Pj4+PiAtICAgICAgICBpZiAoICF0ZXN0X2FuZF9zZXRfYml0KFZDUFVfS0lDS19TT0ZUSVJRLAo+ Pj4mc29mdGlycV9wZW5kaW5nKGNwdSkpCj4+Pj4gLSAgICAgICAgICAgICAmJiAoY3B1ICE9IHNt cF9wcm9jZXNzb3JfaWQoKSkgKQo+Pj4+IC0gICAgICAgICAgICBzZW5kX0lQSV9tYXNrKGNwdW1h c2tfb2YoY3B1KSwgcG9zdGVkX2ludHJfdmVjdG9yKTsKPj4+PiAtICAgIH0KPj4+PiArICAgIGlm ICggdi0+aXNfcnVubmluZyAmJiAoaW5faXJxKCkgfHwgKHYgIT0gY3VycmVudCkpICYmCj4+Pj4g KyAgICAgICAgIChjcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKSApCj4+Pj4gKyAgICAgICAgc2Vu ZF9JUElfbWFzayhjcHVtYXNrX29mKGNwdSksIHBvc3RlZF9pbnRyX3ZlY3Rvcik7Cj4+Pj4gKyAg ICBlbHNlCj4+Pj4gKyAgICAgICAgc2V0X2JpdChWQ1BVX0tJQ0tfU09GVElSUSwgJnNvZnRpcnFf cGVuZGluZyhjcHUpKTsKPj4+Cj4+PldoeSBkb24ndCB5b3Ugc2ltcGx5IGNhbGwgcmFpc2Vfc29m dGlycSgpIGhlcmU/Cj4+Pgo+PiAKPj4gcmFpc2Vfc29mdGlycSgpIGlzIGEgYmV0dGVyIHdyYXBw ZXIsIGJ1dCBJIGRpZG4ndCBnZXQgaXQgdW50aWwgeW91IHRvbGQgbWUuCj4+IAo+PiAKPj4+UGx1 cywgaWYgd2UgYWxyZWFkeSB3YW50IHRvIGZpeCB0aGlzIGFuZCBfZWxpbWluYXRlXyAocmF0aGVy IHRoYW4KPj4+c2hyaW5rKSBhbnkgdGltZSB3aW5kb3dzLCBpcyBuYW1lbHkgbG9va2luZyBhdCB2 LT5pc19ydW5uaW5nIHJlYWxseSB1c2VmdWwKPj4+aGVyZT8gQnkgdGhlIHRpbWUgeW91IGRvIHRo ZSBuZXh0IHBhcnQgb2YgdGhlIGNvbmRpdGlvbmFsIChvciBjYWxsIGludG8KPj4+c2VuZF9JUElf bWFzaygpKSB0aGF0IG1heSBhbHJlYWR5IGhhdmUgY2hhbmdlZC4gCj4+IAo+PiBTbyBmYXIsIEkg Y2FuJ3QgZmluZCBhIGJldHRlciBvbmUgdG8gY2hlY2sgd2hldGhlciB0aGUgdmNwdSBpcyBpbiBu b24tcm9vdCBvciBub3QuCj4+IEFueSBzdWdnZXN0aW9uPwo+Cj5BcyBzYWlkIGJlZm9yZSAtIHlv dSBjYW4ndCBmaW5kIG91dCBlYXNpbHksIGFuZCBpZiB5b3UgbWFuYWdlZCB0bywKPmJ5IHRoZSB0 aW1lIHlvdSBsb29rIGF0IHRoZSByZXN1bHQgdGhhdCByZXN1bHQgbWlnaHQgYmUgc3RhbGUuIEhl bmNlCj50aGUgcHJvYmxlbSBhbmQvb3IgcGF0Y2ggZGVzY3JpcHRpb24gc2hvdWxkIGJlIHdyaXR0 ZW4gaW4gZGlmZmVyZW50Cj50ZXJtcy4gWW91IG1heSwgZm9yIGV4YW1wbGUsIGV4cGxhaW4gKGlm IHRoYXQncyB0aGUgY2FzZSwgb2YgY291cnNlKQo+Li4uCj4KPj4gSSBhbSBhZnJhaWQgd2UgY291 bGQgbm90IGVsaW1pbmF0ZSBhbnkgdGltZSB3aW5kb3dzLCBidXQgdHJ5IG91ciBiZXN0Lgo+Cj4u Li4gdGhhdCB2LT5pc19ydW5uaW5nIHNldCBjb3ZlcnMgYSBzdXBlcnNldCBvZiB0aGUgdGltZSB0 aGUgdkNQVQo+c3BlbmRzIGluIG5vbi1yb290IG1vZGUsIHdpdGggaXQgYmVpbmcgYWNjZXB0YWJs ZSB0byBfYWxzb18gZG8gdGhlCj5zYW1lIGFjdGlvbnMgaWYgdGhlIGZsYWcgaXMgc2V0IGJ1dCB0 aGUgdkNQVSBpcyBpbiByb290IG1vZGUuIEluIHN1Y2gKPmEgc2NlbmFyaW8gdGhlcmUgd291bGQg aW5kZWVkIGJlIG5vIHRpbWUgd2luZG93IGxlZnQuIEJ1dCBhcyBJCj5jb250aW51ZSB0byBub3Qg ZnVsbHkgdW5kZXJzdGFuZCB5b3UgaW50ZW50aW9ucywgSSBjYW4ndCBqdWRnZQo+d2hldGhlciB0 aGlzIGFwcGxpZXMgaGVyZS4KPgo+Pj5TaW1pbGFybHksIHdoaWxlIHRoaXMgaXNuJ3QKPj4+c29t ZXRoaW5nIHlvdSBjaGFuZ2UsIEkgZG9uJ3QgcmVhbGx5IHVuZGVyc3RhbmQgdGhlIHJlbGV2YW5j ZSBvZiB1c2luZyBpbl9pcnEoKQo+Pj5oZXJlLiBIZW5jZSBhdCB0aGUgdmVyeSBsZWFzdCBhIGNv ZGUgY29tbWVudCBzaG91bGQgYmUgYWRkZWQgaW1vLCBjbGFyaWZ5aW5nCj4+PndoYXQgYWxsIHRo aXMgbWFnaWMgaXMgYWJvdXQuCj4+Pgo+PiAKPj4gR29uZSB0aHJvdWdoIHRoZSBjb2RlLCBpbl9p cnEoKSBtZWFucyB0aGF0IHRoZSBjcHUgaXMgZGlzcGF0Y2hpbmcgYW4gCj4+IGludGVycnVwdC4u Cj4+IEkgYW0gcmVhbGx5IGhlc2l0YXRlZCB3aGV0aGVyIHRvIGRyb3AgJyAoaW5faXJxKCkgfHwg KHYgIT0gY3VycmVudCkpICcgb3IgCj4+IG5vdCBpbiB2MiwgYnV0IEkgZm91bmQgdGhlcmUgaXMg YSBzYW1lIG9uZSBpbiB2Y3B1X2tpY2soKS4uCj4+IFNvIEkgbGVhdmUgaXQgYXMgaXMgZm9yIGZ1 cnRoZXIgZGlzY3Vzc2lvbi4gTm93IEkgdGVuZCB0byBkcm9wIGl0Lgo+Cj5XZWxsLCBpdCBiZWlu ZyB0aGF0IHdheSBpbiB2Y3B1X2tpY2soKSByYXRoZXIgc3VnZ2VzdHMgdGhhdCB5b3UKPmFsc28g d2FudCB0aGUgc2FtZSB0aGluZyBoZXJlIC0gYWZ0ZXIgYWxsIHRoaXMgbG9va3MgdG8gYmUgYW4K Pm9wZW4tY29kZWQgc2xpZ2h0IHZhcmlhdGlvbiBvZiB0aGF0IGZ1bmN0aW9uLiBfVGhhdCdzXyBs aWtlbHkKPndoYXQgaXMgbWlzc2luZyB0byBiZSBzYWlkIGhlcmUgaW4gYSBjb21tZW50IChhbmQg eW91IHdvdWxkbid0Cj5ldmVuIG5lZWQgdG8gcmVwZWF0IGFueSBvZiB0aGUgY29tbWVudGFyeSB0 aGVyZSBbd2hpY2ggc2FkbHkKPmxvb2tzIHRvIGJlIHNvbWV3aGF0IHN0YWxlXSwgYnV0IHNpbXBs eSByZWZlciB0byBpdCkuIEhvd2V2ZXIsCj50aGlzIGFsc28gcG9pbnRzIG91dCB0aGF0IHlvdXIg bG9jYWwgdmFyaWFibGUgYXJlIGxpa2VseSB3cm9uZzoKPnYtPmlzX3J1bm5pbmcgd2FudHMgZXZh bHVhdGluZyBiZWZvcmUgY2FsbGluZyB2Y3B1X3BhdXNlKCksCj53aGlsZSB2LT5wcm9jZXNzb3Ig d2FudHMgdG8gYmUgZXZhbHVhdGVkIG9ubHkgYWZ0ZXIgdGhlIGNhbGwuCj4KPlRoZSBtYWluIHRo aW5nIHRvIGV4cGxhaW4gdGhlbiBpcyB3aHkgdi0+cHJvY2Vzc29yIGNoYW5naW5nCj5hZnRlciBo YXZpbmcgZXZhbHVhdGVkIGl0IGlzIG5vdCBhIHByb2JsZW0uIFdoaWxlIHJlbGF0aXZlbHkKPm9i dmlvdXMgaW4gdmNwdV9raWNrKCkgLSB0aGUgZmllbGQgY2hhbmdpbmcgbWVhbnMgdGhlIHZDUFUK PmlzIHJ1bm5pbmcsIGFuZCBnZXR0aW5nIGl0IHRvIHJ1biBpcyBhbGwgdmNwdV9raWNrKCkgd2Fu dHMgdG8KPmFjaGlldmUgLSwgdGhlIGdvYWwgaGVyZSAtIGF2b2lkaW5nIHRvIG1pc3MgZGVsaXZl cmluZyBhbgo+aW50ZXJydXB0IC0gaXMgZGlmZmVyZW50LCBhbmQgc28gaXMgcmF0aW9uYWxpemlu ZyB0aGUgY29ycmVjdG5lc3MKPm9mIHRoZSBjb2RlLgoKR29vZCBwb2ludC4gSSBpZ25vcmUgdi0+ cHJvY2Vzc29yIG1heWJlIGNoYW5nZS4gSSBoYXZlIHRob3VnaHQgb3ZlcgogX192bXhfZGVsaXZl cl9wb3N0ZWRfaW50ZXJydXB0KCkgYWdhaW4gYW5kIHdhbnQgdG8gc2hhcmUgeW91IG15Cm9waW5p b24uIApGaXJzdCBvZiBhbGwsIF9fdm14X2RlbGl2ZXJfcG9zdGVkX2ludGVycnVwdCgpIGlzIHRv IGxldCB0aGUgdGFyZ2V0CnZDUFUgc3luYyBQSVIgdG8gdklSUiBBU0FQLgpkaWZmZXJlbnQgc3Ry YXRlZ2llcyB3ZSB3aWxsIHVzZWQgdG8gZGVhbCB3aXRoIGRpZmZlcmVudCBjYXNlcy4KT25lIGlz IHdlIGp1c3QgdW5ibG9jayB0aGUgdGFyZ2V0IHZDUFUgd2hlbiB0aGUgdkNQVSBpcyBibG9ja2Vk LiBUaGlzIGNhbgptYWtlIHN1cmUgdGhlIHZDUFUgd2lsbCBnbyB0byAgdm14X2ludHJfYXNzaXN0 KCkgd2hlcmUgd2UgYWNoaWV2ZSB0aGUgZ29hbC4KVGhlIHNlY29uZCBvbmUgaXMgdGhlIHZDUFUg aXMgcnVubmFibGUsIHdlIHdpbGwgYWNoaWV2ZSB0aGUgZ29hbCBhdXRvbWF0aWNhbGx5CndoZW4g dGhlIHZDUFUgaXMgY2hvc2VuIHRvIHJ1bi4KVGhlIHRoaXJkIG9uZSBpcyB0aGUgdkNQVSBpcyBy dW5uaW5nIGFuZCBydW5uaW5nIG9uIHRoZSBzYW1lIHBDUFUgd2l0aCB0aGUgCnNvdXJjZSB2Q1BV LiBJdCBqdXN0IHdhbnRzIHRvIG5vdGlmeSBpdHNlbGYuIEp1c3QgcmFpc2UgYSBzb2Z0aXJxIGlz IGVub3VnaC4KVGhlIGZvdXJ0aCBvbmUgaXMgdGhlIHZDUFUgaXMgcnVubmluZyBvbiBvdGhlciBw Q1BVLiBUbyBub3RpZnkgdGhlIHRhcmdldCB2Q1BVLAp3ZSBzZW5kIGEgSVBJIHRvIHRoZSB0YXJn ZXQgUENQVSB3aGljaCB0aGUgdkNQVSBpcyBvbi4gTm90ZSB0aGF0IHdoZW4gdGhlIG5vdGlmaWNh dGlvbgphcnJpdmVzIHRvIHRoZSB0YXJnZXQgUENQVSwgdGhlIHRhcmdldCB2Q1BVIG1heWJlIGlz IGJsb2NrZWQsIHJ1bm5hYmxlLCBydW5uaW5nIGluIHJvb3QgbW9kZSwKb3IgcnVubmluZyBpbiBu b24tcm9vdCBtb2RlLiBJZiB0aGUgdGFyZ2V0IHZDUFUgaXMgcnVubmluZyBpbiBub24tcm9vdCBt b2RlLCBoYXJkd2FyZQp3aWxsIHN5bmMgUElSIHRvIHZJUlIuIElmIHRoZSB0YXJnZXQgdkNQVSBp cyBpbiBub24tcm9vdCBtb2RlLCB0aGUgSW50ZXJydXB0IGhhbmRsZXIKc3RhcnRzIHRvIHJ1bi4g VG8gbWFrZSBzdXJlLCB3ZSBjYW4gZ28gYmFjayB0byB2bXhfaW50cl9hc3Npc3QoKSwgSSBoYXZl IHN1Z2dlc3RlZCB0aGF0CnRoZSBpbnRlcnJ1cHQgaGFuZGxlciBzaG91bGQgcmFpc2UgYSBzb2Z0 aXJxLiBJZiB0aGUgdGFyZ2V0IHZDUFUgaXMgcnVubmFibGUsIHdlIHdpbGwKcmFpc2UgYSBzb2Z0 aXJxIHRvIGEgd3JvbmcgdkNQVS4gTWF5YmUgaXQgaXNuJ3QgYSBiaWcgaXNzdWUuIElmIHRoZSB0 YXJnZXQgdkNQVSBpcwpibG9ja2VkLCBzaW5jZSBiZWZvcmUgd2UgYmxvY2sgYSB2Q1BVIHdlIHdp bGwgY2hlY2sgZXZlbnRzIHRocm91Z2ggbG9jYWxfZXZlbnRzX25lZWRfZGVsaXZlcnkoKQosIHRo ZSBnb2FsIG11c3QgaGFzIGJlZW4gYWNoaWV2ZWQuIEFsc28gaW5jdXIgYSBJUEkgYW5kIHNvZnRp cnEgdG8gYSB3cm9uZyB2Q1BVLgoKQ29tYmluaW5nIHdpdGggSmFuJ3MgZXhwbGFpbmF0aW9uIGFi b3V0IHdoeSB2LT5wcm9jZXNzb3IgY2hhbmdpbmcgaXMgbm90IGEgcHJvYmxlbSwgSSB0aGluawp3 ZSBoYW5kbGUgYWxsIHRoZSBwb3NzaWJsZSBjYXNlcy4gUGxlYXNlIGxldCBtZSBrbm93IGlmIHRo ZXJlIGlzIHNvbWV0aGluZyB3cm9uZyBvciBub3QgY2xlYXIuCgpUaGFua3MsCkNoYW8KCj4KPkph bgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRl dmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhl bi5vcmcveGVuLWRldmVsCg==