From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [CI 2/2] drm/i915: Use SSE4.1 movntdqa to accelerate reads from WC memory Date: Fri, 12 Aug 2016 15:30:55 +0300 Message-ID: <20160812123055.GZ4329@intel.com> References: <1471001999-17787-1-git-send-email-chris@chris-wilson.co.uk> <1471001999-17787-2-git-send-email-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTP id 9F6036EB42 for ; Fri, 12 Aug 2016 12:30:58 +0000 (UTC) Content-Disposition: inline In-Reply-To: <1471001999-17787-2-git-send-email-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCBBdWcgMTIsIDIwMTYgYXQgMTI6Mzk6NTlQTSArMDEwMCwgQ2hyaXMgV2lsc29uIHdy b3RlOgo+IFRoaXMgcGF0Y2ggcHJvdmlkZXMgdGhlIGluZnJhc3RydWN0dXJlIGZvciBwZXJmb3Jt aW5nIGEgMTYtYnl0ZSBhbGlnbmVkCj4gcmVhZCBmcm9tIFdDIG1lbW9yeSB1c2luZyBub24tdGVt cG9yYWwgaW5zdHJ1Y3Rpb25zIGludHJvZHVjZWQgd2l0aCBzc2U0LjEuCj4gVXNpbmcgbW92bnRk cWEgd2UgY2FuIGJ5cGFzcyB0aGUgQ1BVIGNhY2hlcyBhbmQgcmVhZCBkaXJlY3RseSBmcm9tIG1l bW9yeQo+IGFuZCBpZ25vcmluZyB0aGUgcGFnZSBhdHRyaWJ1dGVzIHNldCBvbiB0aGUgQ1BVIFBU RSBpLmUuIG5lZ2F0aW5nIHRoZQo+IGltcGFjdCBvZiBhbiBvdGhlcndpc2UgVUMgYWNjZXNzLiBD b3B5aW5nIHVzaW5nIG1vdm50ZHFhIGZyb20gV0MgaXMgYWxtb3N0Cj4gYXMgZmFzdCBhcyByZWFk aW5nIGZyb20gV0IgbWVtb3J5LCBtb2R1bG8gdGhlIHBvc3NpYmlsaXR5IG9mIGJvdGggaGl0dGlu Zwo+IHRoZSBDUFUgY2FjaGUgb3IgbGVhdmluZyB0aGUgZGF0YSBpbiB0aGUgQ1BVIGNhY2hlIGZv ciB0aGUgbmV4dCBjb25zdW1lci4KPiAoVGhlIENQVSBjYWNoZSBpdHNlbGYgbXkgYmUgZmx1c2hl ZCBmb3IgdGhlIHJlZ2lvbiBvZiB0aGUgbW92bnRkcWEgYW5kIG9uCj4gbGF0ZXIgYWNjZXNzIHRo ZSBtb3ZudGRxYSByZWFkcyBmcm9tIGEgc2VwYXJhdGUgaW50ZXJuYWwgYnVmZmVyIGZvciB0aGUK PiBjYWNoZWxpbmUuKSBUaGUgd3JpdGUgYmFjayB0byB0aGUgbWVtb3J5IGlzIGhvd2V2ZXIgY2Fj aGVkLgo+IAo+IFRoaXMgd2lsbCBiZSB1c2VkIGluIGxhdGVyIHBhdGNoZXMgdG8gYWNjZWxlcmF0 ZSBhY2Nlc3NpbmcgV0MgbWVtb3J5Lgo+IAo+IHYyOiBSZXBvcnQgd2hldGhlciB0aGUgYWNjZWxl cmF0ZWQgY29weSBpcyBzdWNjZXNzZnVsL3Bvc3NpYmxlLgo+IHYzOiBGdW5jdGlvbiBhbGlnbm1l bnQgb3ZlcnJpZGUgd2FzIG9ubHkgbmVjZXNzYXJ5IHdoZW4gdXNpbmcgdGhlCj4gZnVuY3Rpb24g dGFyZ2V0KCJzc2U0LjEiKSAtIHdoaWNoIGlzIG5vdCBuZWNlc3NhcnkgZm9yIGVtaXR0aW5nIG1v dm50ZHFhCj4gZnJvbSBfX2FzbV9fLgo+IHY0OiBJbXByb3ZlIG5vdGVzIG9uIENQVSBjYWNoZSBi ZWhhdmlvdXIgdnMgbm9uLXRlbXBvcmFsIHN0b3Jlcy4KPiB2NTogRml4IGJ5dGUgb2Zmc2V0cyBm b3IgdW5yb2xsZWQgbW92ZXMuCj4gdjY6IEZpbmQgYWxsIHJlbWFpbmluZyB0eXBvcyBvZiAibW92 bnRxZGEiLCB1c2Uga2VybmVsX2ZwdV9iZWdpbi4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBDaHJpcyBX aWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPiBDYzogQWthc2ggR29lbCA8YWthc2gu Z29lbEBpbnRlbC5jb20+Cj4gQ2M6IERhbWllbiBMZXNwaWF1IDxkYW1pZW4ubGVzcGlhdUBpbnRl bC5jb20+Cj4gQ2M6IE1pa2EgS3VvcHBhbGEgPG1pa2Eua3VvcHBhbGFAaW50ZWwuY29tPgo+IENj OiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgo+IFJldmlld2VkLWJ5 OiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgo+IC0tLQo+ICBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgIHwgICAzICsrCj4gIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmMgICAgfCAgIDIgKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5oICAgIHwgICAzICsrCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfbWVtY3B5LmMg fCAxMDEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICA0IGZpbGVzIGNo YW5nZWQsIDEwOSBpbnNlcnRpb25zKCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X21lbWNweS5jCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiBpbmRleCBk ZGE3MjRmMDQ0NDUuLjM0MTI0MTM0MDhjMCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gQEAg LTMsMTIgKzMsMTUgQEAKPiAgIyBEaXJlY3QgUmVuZGVyaW5nIEluZnJhc3RydWN0dXJlIChEUkkp IGluIFhGcmVlODYgNC4xLjAgYW5kIGhpZ2hlci4KPiAgCj4gIHN1YmRpci1jY2ZsYWdzLSQoQ09O RklHX0RSTV9JOTE1X1dFUlJPUikgOj0gLVdlcnJvcgo+ICtzdWJkaXItY2NmbGFncy15ICs9IFwK PiArCSQoY2FsbCBhcy1pbnN0cixtb3ZudGRxYSAoJWVheCkkKGNvbW1hKSV4bW0wLC1EQ09ORklH X0FTX01PVk5URFFBKQo+ICAKPiAgIyBQbGVhc2Uga2VlcCB0aGVzZSBidWlsZCBsaXN0cyBzb3J0 ZWQhCj4gIAo+ICAjIGNvcmUgZHJpdmVyIGNvZGUKPiAgaTkxNS15IDo9IGk5MTVfZHJ2Lm8gXAo+ ICAJICBpOTE1X2lycS5vIFwKPiArCSAgaTkxNV9tZW1jcHkubyBcCj4gIAkgIGk5MTVfcGFyYW1z Lm8gXAo+ICAJICBpOTE1X3BjaS5vIFwKPiAgICAgICAgICAgIGk5MTVfc3VzcGVuZC5vIFwKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZHJ2LmMKPiBpbmRleCBkODJmOTZiMmE0N2UuLjEzYWUzNDBlZjFmMyAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwo+IEBAIC04MjcsNiArODI3LDggQEAgc3RhdGlj IGludCBpOTE1X2RyaXZlcl9pbml0X2Vhcmx5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwKPiAgCW11dGV4X2luaXQoJmRldl9wcml2LT53bS53bV9tdXRleCk7Cj4gIAltdXRleF9p bml0KCZkZXZfcHJpdi0+cHBzX211dGV4KTsKPiAgCj4gKwlpOTE1X21lbWNweV9pbml0X2Vhcmx5 KGRldl9wcml2KTsKPiArCj4gIAlyZXQgPSBpOTE1X3dvcmtxdWV1ZXNfaW5pdChkZXZfcHJpdik7 Cj4gIAlpZiAocmV0IDwgMCkKPiAgCQlyZXR1cm4gcmV0Owo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYu aAo+IGluZGV4IDY1NGFhYmU3NmVmYy4uYmYxOTNiYTE1NzRlIDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2Rydi5oCj4gQEAgLTM5MDcsNiArMzkwNyw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBfX2k5 MTVfcmVxdWVzdF9pcnFfY29tcGxldGUoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEp Cj4gIAlyZXR1cm4gZmFsc2U7Cj4gIH0KPiAgCj4gK3ZvaWQgaTkxNV9tZW1jcHlfaW5pdF9lYXJs eShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ICtib29sIGk5MTVfbWVtY3B5 X2Zyb21fd2Modm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgbGVuKTsK PiArCj4gICNkZWZpbmUgcHRyX3VucGFja19iaXRzKHB0ciwgYml0cykgKHsJCQkJCVwKPiAgCXVu c2lnbmVkIGxvbmcgX192ID0gKHVuc2lnbmVkIGxvbmcpKHB0cik7CQkJXAo+ICAJKGJpdHMpID0g X192ICYgflBBR0VfTUFTSzsJCQkJCVwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9tZW1jcHkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfbWVtY3B5LmMKPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uNmYxZGYwZWM4YTgxCj4g LS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfbWVtY3B5LmMK PiBAQCAtMCwwICsxLDEwMSBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgwqkgMjAxNiBJbnRlbCBD b3Jwb3JhdGlvbgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVl IG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMg c29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2Fy ZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBp bmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5 LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBh bmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMg dG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0 IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoKPiArICogVGhlIGFib3ZlIGNvcHly aWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4 dAo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vi c3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gKyAqIFNvZnR3YXJlLgo+ICsgKgo+ICsgKiBUSEUg U09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO RCwgRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRP IFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiArICogRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxM Cj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5Z IENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBB Q1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4gKyAqIEZST00s IE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1Ig T1RIRVIgREVBTElOR1MKPiArICogSU4gVEhFIFNPRlRXQVJFLgo+ICsgKgo+ICsgKi8KPiArCj4g KyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KPiArI2luY2x1ZGUgPGFzbS9mcHUvYXBpLmg+Cj4g Kwo+ICsjaW5jbHVkZSAiaTkxNV9kcnYuaCIKPiArCj4gK0RFRklORV9TVEFUSUNfS0VZX0ZBTFNF KGhhc19tb3ZudGRxYSk7Cj4gKwo+ICsjaWZkZWYgQ09ORklHX0FTX01PVk5URFFBCj4gK3N0YXRp YyB2b2lkIF9fbWVtY3B5X250ZHFhKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25l ZCBsb25nIGxlbikKPiArewo+ICsJa2VybmVsX2ZwdV9iZWdpbigpOwo+ICsKPiArCWxlbiA+Pj0g NDsKPiArCXdoaWxlIChsZW4gPj0gNCkgewo+ICsJCWFzbSgibW92bnRkcWEgICAoJTApLCAlJXht bTBcbiIKPiArCQkgICAgIm1vdm50ZHFhIDE2KCUwKSwgJSV4bW0xXG4iCj4gKwkJICAgICJtb3Zu dGRxYSAzMiglMCksICUleG1tMlxuIgo+ICsJCSAgICAibW92bnRkcWEgNDgoJTApLCAlJXhtbTNc biIKPiArCQkgICAgIm1vdmFwcyAlJXhtbTAsICAgKCUxKVxuIgo+ICsJCSAgICAibW92YXBzICUl eG1tMSwgMTYoJTEpXG4iCj4gKwkJICAgICJtb3ZhcHMgJSV4bW0yLCAzMiglMSlcbiIKPiArCQkg ICAgIm1vdmFwcyAlJXhtbTMsIDQ4KCUxKVxuIgoKTm90IHVzaW5nIHNzZTIgbW92bnRkcSBmb3Ig dGhlIHN0b3JlPyBObyBiZW5lZml0IG9yPwoKPiArCQkgICAgOjogInIiIChzcmMpLCAiciIgKGRz dCkgOiAibWVtb3J5Iik7Cj4gKwkJc3JjICs9IDY0Owo+ICsJCWRzdCArPSA2NDsKPiArCQlsZW4g LT0gNDsKPiArCX0KPiArCXdoaWxlIChsZW4tLSkgewo+ICsJCWFzbSgibW92bnRkcWEgKCUwKSwg JSV4bW0wXG4iCj4gKwkJICAgICJtb3ZhcHMgJSV4bW0wLCAoJTEpXG4iCj4gKwkJICAgIDo6ICJy IiAoc3JjKSwgInIiIChkc3QpIDogIm1lbW9yeSIpOwo+ICsJCXNyYyArPSAxNjsKPiArCQlkc3Qg Kz0gMTY7Cj4gKwl9Cj4gKwo+ICsJa2VybmVsX2ZwdV9lbmQoKTsKPiArfQo+ICsjZW5kaWYKPiAr Cj4gKy8qKgo+ICsgKiBpOTE1X21lbWNweV9mcm9tX3djOiBwZXJmb3JtIGFuIGFjY2VsZXJhdGVk ICphbGlnbmVkKiByZWFkIGZyb20gV0MKPiArICogQGRzdDogZGVzdGluYXRpb24gcG9pbnRlcgo+ ICsgKiBAc3JjOiBzb3VyY2UgcG9pbnRlcgo+ICsgKiBAbGVuOiBob3cgbWFueSBieXRlcyB0byBj b3B5Cj4gKyAqCj4gKyAqIGk5MTVfbWVtY3B5X2Zyb21fd2MgY29waWVzIEBsZW4gYnl0ZXMgZnJv bSBAc3JjIHRvIEBkc3QgdXNpbmcKPiArICogbm9uLXRlbXBvcmFsIGluc3RydWN0aW9ucyB3aGVy ZSBhdmFpbGFibGUuIE5vdGUgdGhhdCBhbGwgYXJndW1lbnRzCj4gKyAqIChAc3JjLCBAZHN0KSBt dXN0IGJlIGFsaWduZWQgdG8gMTYgYnl0ZXMgYW5kIEBsZW4gbXVzdCBiZSBhIG11bHRpcGxlCj4g KyAqIG9mIDE2Lgo+ICsgKgo+ICsgKiBUbyB0ZXN0IHdoZXRoZXIgYWNjZWxlcmF0ZWQgcmVhZHMg ZnJvbSBXQyBhcmUgc3VwcG9ydGVkLCB1c2UKPiArICogaTkxNV9tZW1jcHlfZnJvbV93YyhOVUxM LCBOVUxMLCAwKTsKPiArICoKPiArICogUmV0dXJucyB0cnVlIGlmIHRoZSBjb3B5IHdhcyBzdWNj ZXNzZnVsLCBmYWxzZSBpZiB0aGUgcHJlY29uZGl0aW9ucwo+ICsgKiBhcmUgbm90IG1ldC4KPiAr ICovCj4gK2Jvb2wgaTkxNV9tZW1jcHlfZnJvbV93Yyh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNy YywgdW5zaWduZWQgbG9uZyBsZW4pCj4gK3sKPiArCWlmICh1bmxpa2VseSgoKHVuc2lnbmVkIGxv bmcpZHN0IHwgKHVuc2lnbmVkIGxvbmcpc3JjIHwgbGVuKSAmIDE1KSkKPiArCQlyZXR1cm4gZmFs c2U7Cj4gKwo+ICsjaWZkZWYgQ09ORklHX0FTX01PVk5URFFBCj4gKwlpZiAoc3RhdGljX2JyYW5j aF9saWtlbHkoJmhhc19tb3ZudGRxYSkpIHsKPiArCQlpZiAobGlrZWx5KGxlbikpCj4gKwkJCV9f bWVtY3B5X250ZHFhKGRzdCwgc3JjLCBsZW4pOwo+ICsJCXJldHVybiB0cnVlOwo+ICsJfQo+ICsj ZW5kaWYKPiArCj4gKwlyZXR1cm4gZmFsc2U7Cj4gK30KPiArCj4gK3ZvaWQgaTkxNV9tZW1jcHlf aW5pdF9lYXJseShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3sKPiArCWlm IChzdGF0aWNfY3B1X2hhcyhYODZfRkVBVFVSRV9YTU00XzEpKQo+ICsJCXN0YXRpY19icmFuY2hf ZW5hYmxlKCZoYXNfbW92bnRkcWEpOwo+ICt9Cj4gLS0gCj4gMi44LjEKPiAKPiBfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IEludGVsLWdmeCBtYWlsaW5n IGxpc3QKPiBJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngKCi0tIApWaWxsZSBTeXJq w6Rsw6QKSW50ZWwgT1RDCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVs LWdmeAo=