From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qLPcz-004Jw2-0Y for linux-arm-kernel@lists.infradead.org; Mon, 17 Jul 2023 14:55:20 +0000 Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-3fc07d4c2f4so27081905e9.1 for ; Mon, 17 Jul 2023 07:55:03 -0700 (PDT) Message-ID: Date: Mon, 17 Jul 2023 16:55:00 +0200 MIME-Version: 1.0 Subject: Re: [PATCH v3 3/4] mm: FLEXIBLE_THP for improved performance References: <20230714160407.4142030-1-ryan.roberts@arm.com> <20230714161733.4144503-3-ryan.roberts@arm.com> <82c934af-a777-3437-8d87-ff453ad94bfd@redhat.com> <2c4b2a41-1c98-0782-ac30-80e65bdb2b0c@arm.com> <2e7d5692-8ba7-1e56-a03f-449f1671b100@redhat.com> <4f89d7bf-2fe2-fa53-c7ca-e4f152ca0edf@arm.com> From: David Hildenbrand In-Reply-To: <4f89d7bf-2fe2-fa53-c7ca-e4f152ca0edf@arm.com> Content-Language: en-US List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+lwn-linux-arm-kernel=archive.lwn.net@lists.infradead.org List-Archive: To: Ryan Roberts , Yu Zhao Cc: Andrew Morton , Matthew Wilcox , "Kirill A. Shutemov" , Yin Fengwei , Catalin Marinas , Will Deacon , Anshuman Khandual , Yang Shi , "Huang, Ying" , Zi Yan , Luis Chamberlain , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org T24gMTcuMDcuMjMgMTY6NDcsIFJ5YW4gUm9iZXJ0cyB3cm90ZToKPiBPbiAxNy8wNy8yMDIzIDE0 OjU2LCBEYXZpZCBIaWxkZW5icmFuZCB3cm90ZToKPj4gT24gMTcuMDcuMjMgMTU6MjAsIFJ5YW4g Um9iZXJ0cyB3cm90ZToKPj4+IE9uIDE3LzA3LzIwMjMgMTQ6MDYsIERhdmlkIEhpbGRlbmJyYW5k IHdyb3RlOgo+Pj4+IE9uIDE0LjA3LjIzIDE5OjE3LCBZdSBaaGFvIHdyb3RlOgo+Pj4+PiBPbiBG cmksIEp1bCAxNCwgMjAyMyBhdCAxMDoxN+KAr0FNIFJ5YW4gUm9iZXJ0cyA8cnlhbi5yb2JlcnRz QGFybS5jb20+IHdyb3RlOgo+Pj4+Pj4KPj4+Pj4+IEludHJvZHVjZSBGTEVYSUJMRV9USFAgZmVh dHVyZSwgd2hpY2ggYWxsb3dzIGFub255bW91cyBtZW1vcnkgdG8gYmUKPj4+Pj4+IGFsbG9jYXRl ZCBpbiBsYXJnZSBmb2xpb3Mgb2YgYSBkZXRlcm1pbmVkIG9yZGVyLiBBbGwgcGFnZXMgb2YgdGhl IGxhcmdlCj4+Pj4+PiBmb2xpbyBhcmUgcHRlLW1hcHBlZCBkdXJpbmcgdGhlIHNhbWUgcGFnZSBm YXVsdCwgc2lnbmlmaWNhbnRseSByZWR1Y2luZwo+Pj4+Pj4gdGhlIG51bWJlciBvZiBwYWdlIGZh dWx0cy4gVGhlIG51bWJlciBvZiBwZXItcGFnZSBvcGVyYXRpb25zIChlLmcuIHJlZgo+Pj4+Pj4g Y291bnRpbmcsIHJtYXAgbWFuYWdlbWVudCBscnUgbGlzdCBtYW5hZ2VtZW50KSBhcmUgYWxzbyBz aWduaWZpY2FudGx5Cj4+Pj4+PiByZWR1Y2VkIHNpbmNlIHRob3NlIG9wcyBub3cgYmVjb21lIHBl ci1mb2xpby4KPj4+Pj4+Cj4+Pj4+PiBUaGUgbmV3IGJlaGF2aW91ciBpcyBoaWRkZW4gYmVoaW5k IHRoZSBuZXcgRkxFWElCTEVfVEhQIEtjb25maWcsIHdoaWNoCj4+Pj4+PiBkZWZhdWx0cyB0byBk aXNhYmxlZCBmb3Igbm93OyBUaGUgbG9uZyB0ZXJtIGFpbSBpcyBmb3IgdGhpcyB0byBkZWZhdXQg dG8KPj4+Pj4+IGVuYWJsZWQsIGJ1dCB0aGVyZSBhcmUgc29tZSByaXNrcyBhcm91bmQgaW50ZXJu YWwgZnJhZ21lbnRhdGlvbiB0aGF0Cj4+Pj4+PiBuZWVkIHRvIGJlIGJldHRlciB1bmRlcnN0b29k IGZpcnN0Lgo+Pj4+Pj4KPj4+Pj4+IFdoZW4gZW5hYmxlZCwgdGhlIGZvbGlvIG9yZGVyIGlzIGRl dGVybWluZWQgYXMgc3VjaDogRm9yIGEgdm1hLCBwcm9jZXNzCj4+Pj4+PiBvciBzeXN0ZW0gdGhh dCBoYXMgZXhwbGljaXRseSBkaXNhYmxlZCBUSFAsIHdlIGNvbnRpbnVlIHRvIGFsbG9jYXRlCj4+ Pj4+PiBvcmRlci0wLiBUSFAgaXMgbW9zdCBsaWtlbHkgZGlzYWJsZWQgdG8gYXZvaWQgYW55IHBv c3NpYmxlIGludGVybmFsCj4+Pj4+PiBmcmFnbWVudGF0aW9uIHNvIHdlIGhvbm91ciB0aGF0IHJl cXVlc3QuCj4+Pj4+Pgo+Pj4+Pj4gT3RoZXJ3aXNlLCB0aGUgcmV0dXJuIHZhbHVlIG9mIGFyY2hf d2FudHNfcHRlX29yZGVyKCkgaXMgdXNlZC4gRm9yIHZtYXMKPj4+Pj4+IHRoYXQgaGF2ZSBub3Qg ZXhwbGljaXRseSBvcHRlZC1pbiB0byB1c2UgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzIChlLmcuCj4+ Pj4+PiB3aGVyZSB0aHA9bWFkdmlzZSBhbmQgdGhlIHZtYSBkb2VzIG5vdCBoYXZlIE1BRFZfSFVH RVBBR0UpLCB0aGVuCj4+Pj4+PiBhcmNoX3dhbnRzX3B0ZV9vcmRlcigpIGlzIGxpbWl0ZWQgYnkg dGhlIG5ldyBjbWRsaW5lIHBhcmFtZXRlciwKPj4+Pj4+IGBmbGV4dGhwX3VuaGludGVkX21heGAu IFRoaXMgYWxsb3dzIGZvciBhIHBlcmZvcm1hbmNlIGJvb3N0IHdpdGhvdXQKPj4+Pj4+IHJlcXVp cmluZyBhbnkgZXhwbGljaXQgb3B0LWluIGZyb20gdGhlIHdvcmtsb2FkIHdoaWxlIGFsbG93aW5n IHRoZQo+Pj4+Pj4gc3lzYWRtaW4gdG8gdHVuZSBiZXR3ZWVuIHBlcmZvcm1hbmNlIGFuZCBpbnRl cm5hbCBmcmFnbWVudGF0aW9uLgo+Pj4+Pj4KPj4+Pj4+IGFyY2hfd2FudHNfcHRlX29yZGVyKCkg Y2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGFyY2hpdGVjdHVyZSBpZiBkZXNpcmVkLgo+Pj4+Pj4g U29tZSBhcmNoaXRlY3R1cmVzIChlLmcuIGFybTY0KSBjYW4gY29hbHNlY2UgVExCIGVudHJpZXMg aWYgYSBjb250aWd1b3VzCj4+Pj4+PiBzZXQgb2YgcHRlcyBtYXAgcGh5c2ljYWxseSBjb250aWdp b3VzLCBuYXR1cmFsbHkgYWxpZ25lZCBtZW1vcnksIHNvIHRoaXMKPj4+Pj4+IG1lY2hhbmlzbSBh bGxvd3MgdGhlIGFyY2hpdGVjdHVyZSB0byBvcHRpbWl6ZSBhcyByZXF1aXJlZC4KPj4+Pj4+Cj4+ Pj4+PiBJZiB0aGUgcHJlZmVycmVkIG9yZGVyIGNhbid0IGJlIHVzZWQgKGUuZy4gYmVjYXVzZSB0 aGUgZm9saW8gd291bGQKPj4+Pj4+IGJyZWFjaCB0aGUgYm91bmRzIG9mIHRoZSB2bWEsIG9yIGJl Y2F1c2UgcHRlcyBpbiB0aGUgcmVnaW9uIGFyZSBhbHJlYWR5Cj4+Pj4+PiBtYXBwZWQpIHRoZW4g d2UgZmFsbCBiYWNrIHRvIGEgc3VpdGFibGUgbG93ZXIgb3JkZXI7IGZpcnN0Cj4+Pj4+PiBQQUdF X0FMTE9DX0NPU1RMWV9PUkRFUiwgdGhlbiBvcmRlci0wLgo+Pj4+Pj4KPj4+Pj4+IFNpZ25lZC1v ZmYtYnk6IFJ5YW4gUm9iZXJ0cyA8cnlhbi5yb2JlcnRzQGFybS5jb20+Cj4+Pj4+PiAtLS0KPj4+ Pj4+ICDCoMKgIC4uLi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHTCoMKgwqDCoMKg wqDCoMKgIHzCoCAxMCArCj4+Pj4+PiAgwqDCoCBtbS9LY29uZmlnwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqAg MTAgKwo+Pj4+Pj4gIMKgwqAgbW0vbWVtb3J5LmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8IDE4NyArKysrKysrKysr KysrKysrLS0KPj4+Pj4+ICDCoMKgIDMgZmlsZXMgY2hhbmdlZCwgMTkwIGluc2VydGlvbnMoKyks IDE3IGRlbGV0aW9ucygtKQo+Pj4+Pj4KPj4+Pj4+IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9u L2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAo+Pj4+Pj4gYi9Eb2N1bWVudGF0aW9u L2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAo+Pj4+Pj4gaW5kZXggYTE0NTc5OTVm ZDQxLi40MDVkNjI0ZTIxOTEgMTAwNjQ0Cj4+Pj4+PiAtLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWlu LWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAo+Pj4+Pj4gKysrIGIvRG9jdW1lbnRhdGlvbi9h ZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKPj4+Pj4+IEBAIC0xNDk3LDYgKzE0OTcs MTYgQEAKPj4+Pj4+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBTZWUgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvbmV0LnJzdCBmb3IK Pj4+Pj4+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBmYl90dW5uZWxzX29ubHlfZm9yX2luaXRfbnMKPj4+Pj4+Cj4+Pj4+PiArwqDCoMKgwqDCoMKg IGZsZXh0aHBfdW5oaW50ZWRfbWF4PQo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIFtLTkxdIFJlcXVpcmVzIENPTkZJR19GTEVYSUJMRV9USFAgZW5h YmxlZC4gVGhlCj4+Pj4+PiBtYXhpbXVtCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgZm9saW8gc2l6ZSB0aGF0IHdpbGwgYmUgYWxsb2NhdGVkIGZv ciBhbiBhbm9ueW1vdXMgdm1hCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgdGhhdCBoYXMgbmVpdGhlciBleHBsaWNpdGx5IG9wdGVkIGluIG5vciBv dXQgb2YgdXNpbmcKPj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCB0cmFuc3BhcmVudCBodWdlcGFnZXMuIFRoZSBzaXplIG11c3QgYmUgYQo+Pj4+Pj4g cG93ZXItb2YtMiBpbgo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHRoZSByYW5nZSBbUEFHRV9TSVpFLCBQTURfU0laRSkuIEEgbGFyZ2VyIHNpemUK Pj4+Pj4+IGltcHJvdmVzCj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcGVyZm9ybWFuY2UgYnkgcmVkdWNpbmcgcGFnZSBmYXVsdHMsIHdoaWxlIGEg c21hbGxlcgo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHNpemUgcmVkdWNlcyBpbnRlcm5hbCBmcmFnbWVudGF0aW9uLiBEZWZhdWx0OiBtYXgoNjRL LAo+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFBB R0VfU0laRSkuIEZvcm1hdDogc2l6ZVtLTUddLgo+Pj4+Pj4gKwo+Pj4+Pgo+Pj4+PiBMZXQncyBz cGxpdCB0aGlzIHBhcmFtZXRlciBpbnRvIGEgc2VwYXJhdGUgcGF0Y2guCj4+Pj4+Cj4+Pj4KPj4+ PiBKdXN0IGEgZ2VuZXJhbCBjb21tZW50IGFmdGVyIHN0dW1ibGluZyBvdmVyIHBhdGNoICMyLCBs ZXQncyBub3Qgc3RhcnQgc3BsaXR0aW5nCj4+Pj4gcGF0Y2hlcyBpbnRvIHRoaW5ncyB0aGF0IGRv bid0IG1ha2UgYW55IHNlbnNlIG9uIHRoZWlyIG93bjsgdGhhdCBqdXN0IG1ha2VzCj4+Pj4gcmV2 aWV3IGEgbG90IGhhcmRlci4KPj4+Cj4+PiBBQ0sKPj4+Cj4+Pj4KPj4+PiBGb3IgdGhpcyBjYXNl IGhlcmUsIEknZCBzdWdnZXN0IGZpcnN0IGFkZGluZyB0aGUgZ2VuZXJhbCBpbmZyYXN0cnVjdHVy ZSBhbmQgdGhlbgo+Pj4+IGFkZGluZyB0dW5hYmxlcyB3ZSB3YW50IHRvIGhhdmUgb24gdG9wLgo+ Pj4KPj4+IE9LLCBzbyAxIHBhdGNoIGZvciB0aGUgbWFpbiBpbmZyYXN0cnVjdHVyZSwgdGhlbiBh IHBhdGNoIHRvIGRpc2FibGUgZm9yCj4+PiBNQURWX05PSFVHRVBBR0UgYW5kIGZyaWVuZHMsIHRo ZW4gYSBmdXJ0aGVyIHBhdGNoIHRvIHNldCBmbGV4dGhwX3VuaGludGVkX21heAo+Pj4gdmlhIGEg c3lzY3RsPwo+Pgo+PiBNQURWX05PSFVHRVBBR0UgaGFuZGxpbmcgZm9yIG1lIGZhbGxzIHVuZGVy IHRoZSBjYXRlZ29yeSAicmVxdWlyZWQgZm9yCj4+IGNvcnJlY3RuZXNzIHRvIG5vdCBicmVhayBl eGlzdGluZyB3b3JrbG9hZHMiIGFuZCBoYXMgdG8gYmUgdGhlcmUgaW5pdGlhbGx5Lgo+Pgo+PiBB bnl0aGluZyB0aGF0IGlzIHJhdGhlciBhIHBlcmZvcm1hbmNlIHR1bmFibGUgKGUuZy4sIGEgc3lz Y3RsIHRvIG9wdGltaXplKSBjYW4KPj4gYmUgYWRkZWQgb24gdG9wIGFuZCBkaXNjdXNzZWQgc2Vw YXJhdGVseS4+Cj4+IEF0IGxlYXN0IElNSE8gOikKPj4KPj4+Cj4+Pj4KPj4+PiBJIGFncmVlIHRo YXQgdG9nZ2xpbmcgdGhhdCBhdCBydW50aW1lIChmb3IgZXhhbXBsZSB2aWEgc3lzZnMgYXMgcmFp c2VkIGJ5IG1lCj4+Pj4gcHJldmlvdXNseSkgd291bGQgYmUgbmljZXIuCj4+Pgo+Pj4gT0ssIEkg Y2xlYXJseSBtaXN1bmRlcnN0b29kLCBJIHRob3VnaHQgeW91IHdlcmUgcmVxdWVzdGluZyBhIGJv b3QgcGFyYW1ldGVyLgo+Pgo+PiBPaCwgc29ycnkgYWJvdXQgdGhhdC4gSSB3YW50ZWQgdG8gYWN0 dWFsbHkgZXhwcmVzcwo+PiAiL3N5cy9rZXJuZWwvbW0vdHJhbnNwYXJlbnRfaHVnZXBhZ2UvIiBz eXNjdGxzIHdoZXJlIHdlIGNhbiB0b2dnbGUgdGhhdCBsYXRlciBhdAo+PiBydW50aW1lIGFzIHdl bGwuCj4+Cj4+PiBXaGF0J3MgdGhlIEFCSSBjb21wYXQgZ3VhcnJhbnRlZSBmb3Igc3lzY3Rscz8g SSBhc3N1bWVkIHRoYXQgZm9yIGEgYm9vdAo+Pj4gcGFyYW1ldGVyIGl0IHdvdWxkIGJlIGVhc2ll ciB0byByZW1vdmUgaW4gZnV0dXJlIGlmIHdlIHdhbnRlZCwgYnV0IGZvciBzeXNjdGwsCj4+PiBp dHMgdGhlcmUgZm9yZXZlcj8KPj4KPj4gc3lzY3RsIGFyZSBoYXJkL2ltcG9zc2libGUgdG8gcmVt b3ZlLCB5ZXMuIFNvIHdlIGJldHRlciBtYWtlIHN1cmUgd2hhdCB3ZSBhZGQKPj4gaGFzIGNsZWFy IHNlbWFudGljcy4KPj4KPj4gSWYgd2UgZXZlciB3YW50IHNvbWUgcmVhbCBhdXRvLXR1bmFibGUg bW9kZSAoYW5kIGNhbiBhY3R1YWxseSBpbXBsZW1lbnQgaXQKPj4gd2l0aG91dCBoYXJtaW5nIHBl cmZvcm1hbmNlOyBhbmQgSSBhbSBza2VwdGljYWwpLCB3ZSBtaWdodCB3YW50IHRvIGFsbG93IGZv cgo+PiBzZXR0aW5nIHN1Y2ggYSBwYXJhbWV0ZXIgdG8gImF1dG8iLCBmb3IgZXhhbXBsZS4KPj4K Pj4+Cj4+PiBBbHNvLCBob3cgZG8geW91IGZlZWwgYWJvdXQgdGhlIG5hbWluZyBhbmQgYmVoYXZp b3Igb2YgdGhlIHBhcmFtZXRlcj8KPj4KPj4gVmVyeSBnb29kIHF1ZXN0aW9uLiAiZmxleHRocF91 bmhpbnRlZF9tYXgiIG5hbWluZyBpcyBhIGJpdCBzdWJvcHRpbWFsLgo+Pgo+PiBGb3IgZXhhbXBs ZSwgSSdtIG5vdCBzbyBzdXJlIGlmIHdlIHNob3VsZCBleHBvc2UgdGhlIGZlYXR1cmUgdG8gdXNl ciBzcGFjZSBhcwo+PiAiZmxleHRocCIgYXQgYWxsLiBJIHRoaW5rIHdlIHNob3VsZCBmaW5kIGEg Y2xlYXJlciBmZWF0dXJlIG5hbWUgdG8gYmVnaW4gd2l0aC4KPj4KPj4gLi4uIG1heWJlIHdlIGNh biBpbml0aWFsbHkgZ2V0IGF3YXkgd2l0aCBkcm9wcGluZyB0aGF0IHBhcmFtZXRlciBhbmQgZGVm YXVsdCB0bwo+PiBzb21ldGhpbmcgcmVhc29uYWJseSBzbWFsbCAoaS5lLiwgNjRrIGFzIHlvdSBo YXZlIGFib3ZlKT8KPiAKPiBUaGF0IHdvdWxkIGNlcnRhaW5seSBnZXQgbXkgdm90ZS4gQnV0IGl0 IHdhcyB5b3Ugd2hvIHdhcyBhcmd1aW5nIGZvciBhIHR1bmFibGUKPiBwcmV2aW91c2x5IDstKS4g SSBwcm9wb3NlIHdlIHVzZSB0aGUgZm9sbG93aW5nIGFzIHRoZSAidW5oaW50ZWQgY2VpbGluZyIg Zm9yCgpZZXMsIEkgc3RpbGwgdGhpbmsgaGF2aW5nIHR1bmFibGVzIG1ha2VzIHNlbnNlLgoKCkJ1 dCBpdCdzIGNlcnRhaW5seSBzb21ldGhpbmcgdG8gYWRkIHNlcGFyYXRlbHksIGVzcGVjaWFsbHkg aWYgaXQgbWFrZXMgCnlvdXIgd29yayBoZXJlIGVhc2llci4KCkFzIGxvbmcgYXMgaXQgY2FuIGJl IGRpc2FibGVkLCBnb29kIGVub3VnaCBmb3IgbWUgZm9yIHRoZSBpbml0aWFsIHZlcnNpb24uCgot LSAKQ2hlZXJzLAoKRGF2aWQgLyBkaGlsZGVuYgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4 LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK