From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rajesh Yadav Subject: [DPU PATCH v2 00/12] Refactor DPU device/driver hierarchy and add runtime_pm support Date: Fri, 11 May 2018 20:19:26 +0530 Message-ID: <1526050178-31893-1-git-send-email-ryadav@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, Rajesh Yadav , hoegsberg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org U29DcyBjb250YWluaW5nIG1kcDUgb3IgZHB1IGhhdmUgYSBNRFNTIHRvcCBsZXZlbCB3cmFwcGVy IHdoaWNoIGluY2x1ZGVzCnN1Yi1ibG9ja3MgYXMgbWRwNS9kcHUsIGRzaSwgZHAsIGhkbWkgZXRj LiBUaGUgTURTUyB0b3AgbGV2ZWwgd3JhcHBlcgptYW5hZ2VzIGNvbW1vbiByZXNvdXJjZXMgbGlr ZSBjb21tb24gY2xvY2tzLCBtYWluIHBvd2VyIHN1cHBseSBhbmQKaW50ZXJydXB0cyBmb3IgaXRz IHN1Yi1ibG9ja3MuCgpCdXQgY3VycmVudCBkcHUgZHJpdmVyIGltcGxlbWVudGF0aW9uIGlzIGJh c2VkIG9uIGEgZmxhdCBkZXZpY2UgaGllcmFyY2h5CndoZXJlIE1EU1MvRFBVIEhXIGJsb2NrcyB3 ZXJlIHJlcHJlc2VudGVkIGJ5IHNpbmdsZSBkZXZpY2UgYW5kIERTSS9EUCBldGMuCmFyZSByZXBy ZXNlbnRlZCBhcyBpbmRlcGVuZGVudCBkZXZpY2VzIHcvbyBhbnkgcmVsYXRpb25zaGlwcyBiL3Qg dGhlc2UKbm9kZXMgd2hpY2ggZG9lc24ndCBtb2RlbCB0aGUgSFcgYXNzb2NpYXRpb25zIHByZWNp c2VseS4KCkEgbWluaW1hbCBNRFNTIGFuZCBEUFUgY29udHJvbGxlciBkZXZpY2Ugc2VwYXJhdGlv biBpcyBkb25lIGluIGZvbGxvd2luZwpwYXRjaCBzZXJpZXMgWzFdIGJ1dCBjdXJyZW50bHkgYm90 aCB0aGVzZSBkZXZpY2VzIG1hdGNoIHRvIGEgc2luZ2xlIGRyaXZlcgp3aGljaCBpcyBnZXR0aW5n IHByb2JlZCB0d28gdGltZXMgYW5kIGFsbCB0aGUgcmVzb3VyY2VzIGFyZSBzdGlsbCB0aWVkIHRv CkRQVSBkZXZpY2UuCgpNb3Jlb3ZlciwgYWxsIHRoZSBwb3dlciByZXNvdXJjZSBtYW5hZ2VtZW50 IGluIERQVSBkcml2ZXIgaXMgcGFydCBvZgpwb3dlcl9oYW5kbGUgbW9kdWxlIHdoaWNoIG1hbmFn ZXMgdGhlc2UgcmVzb3VyY2VzIHZpYSBhIGN1c3RvbQppbXBsZW1lbnRhdGlvbi4KCklycSBkb21h aW4gaGFuZGxpbmcgaXMgcGFydCBvZiBEUFUgZGV2aWNlLCBkdWUgdG8gbGFjayBvZiBhIGRlZGlj YXRlZApkcml2ZXIgZm9yIE1EU1MgdG9wIGxldmVsIHdyYXBwZXIgZGV2aWNlLgoKVGhpcyBwYXRj aCBzZXJpZXMgYWltcyBhdCBhZGRpbmcgc2VwYXJhdGUgZHJpdmVycyBmb3IgTURTUyB0b3AgbGV2 ZWwKd3JhcHBlciBkZXZpY2UgYW5kIERQVSBjaGlsZCBkZXZpY2UuIE1EUDUgZGV2aWNlL2RyaXZl ciBpcyB1c2VkIGFzIGEKcmVmZXJlbmNlIGZvciB0aGlzIHJlZmFjdG9yaW5nIGVmZm9ydC4gQm90 aCB0aGUgZHJpdmVycyBpbXBsZW1lbnQKcnVudGltZV9wbSBzdXBwb3J0IGZvciB0aGVpciBwb3dl ciByZXNvdXJjZSBtYW5hZ2VtZW50LiBDaGlsZCBub2RlcyBjYW4KY29udHJvbCBjb21tb24gcmVz b3VyY2VzIG1hbmFnZWQgYnkgcGFyZW50IGRldmljZSBkdWUgdG8gcGFyZW50IGNoaWxkCnJlbGF0 aW9uc2hpcCBkZWZpbmVkIGluIGR0LiBUaGUgdG9wIGxldmVsIE1EU1MgZGV2aWNlIGFjdHMgYXMg YW4KaW50ZXJydXB0IGNvbnRyb2xsZXIgYW5kIG1hbmFnZXMgaHdpcnEgbWFwcGluZ3MgZm9yIGl0 cyBjaGlsZCBkZXZpY2VzLiAKCklub3JkZXIgdG8gYWRkIE1EUDUgYW5kIERQVSBzcGVjaWZpYyBN RFNTIGRyaXZlciBpbXBsZW1lbnRhdGlvbiwgdGhpcyBwYXRjaApzZXJpZXMgYWxzbyBzdWJjbGFz c2VzIGV4aXN0aW5nIG1zbV9tZHNzIGRlZmluZS4gQSBoZWxwZXIgaW50ZXJmYWNlCihtc21fbWRz c19mdW5jcykgaXMgYWRkZWQgdG8gaW52b2tlIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBpbXBsZW1l bnRhdGlvbnMuCgpUaGlzIGNoYW5nZSBhbHNvIGNvcnJlY3RzIGh3IGNhdGFsb2cgb2Zmc2V0cyBm b3IgYWxsIHN1YiBibG9ja3MgcHJlc2VudAp3aXRoaW4gRFBVIGRldmljZS4gVGhlIG9mZnNldCBh cmUgbm93IGRlZmluZWQgd3J0IERQVSBiYXNlIGFkZHJlc3MKKGluc3RlYWQgb2YgdXNpbmcgTURT UyBiYXNlIGFkZHJlc3MpLgoKQ2xvY2sgYW5kIFBvd2VyIGhhbmRsaW5nIGNvZGUgaGF2ZSBiZWVu IHJlbW92ZWQgZnJvbSBkcHVfcG93ZXJfaGFuZGxlIHNpbmNlCmVhY2ggZGV2aWNlIG1hbmFnZXMg aXQncyByZXNvdXJjZXMgdmlhIHJ1bnRpbWVfcG0uIE5vdywgc2luY2UKZHB1X3Bvd2VyX2hhbmRs ZSBtYW5hZ2VzIG9ubHkgYnVzIHNjYWxpbmcgYW5kIHBvd2VyIGVuYWJsZS9kaXNhYmxlCm5vdGlm aWNhdGlvbnMgYW5kIGl0J3MgdXNhZ2UgaXMgcmVzdHJpY3RlZCB0byBEUFUgZHJpdmVyIG9ubHks IG1vdmVkCmRwdV9wb3dlcl9oYW5kbGUgY29kZSB0byBEUFUgZm9sZGVyLgoKVGhlIGR0IGJpbmRp bmdzIHVwZGF0ZSBwYXRjaCB3aWxsIGJlIHNlbnQgc3Vic2VxdWVudGx5LgoKVGhpcyBwYXRjaCBz ZXJpZXMgZGVwZW5kcyBvbiBbMV0uCgoxIC0gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv YXJjaGl2ZXMvZnJlZWRyZW5vLzIwMTgtQXByaWwvMDAyMzU0Lmh0bWwKCkNoYW5nZXMgaW4gdjI6 CgktIGZpeCBpbmRlbnRhdGlvbiBpc3N1ZXMgaW4gZHB1X21kc3MgKFNlYW4gUGF1bCkKCS0gbWVy Z2UgdGlueSBzdGF0aWMgZnVuY3Rpb25zIChsaWtlIF9kcHVfbWRzc19od19yZXZfaW5pdCgpCgkg IGFuZCBfZHB1X21kc3NfZ2V0X2ludHJfc291cmNlcygpKSBpbiBjYWxsZXIgZnVuY3Rpb25zIChT ZWFuIFBhdWwpCgktIHJlbW92ZSB1bm5lY2Vzc2FyeSBnb3RvIHN0YXRlbWVudHMgZnJvbSBkcHVf bWRzc19pcnEgKFNlYW4gUGF1bCkKCS0gcmVtb3ZlIHJlZHVuZGFudCBpbnB1dCBwYXJhbSBjaGVj a3MgZnJvbSBkcHVfbWRzcwoJICBhbmQgZHB1X2ttcyAoU2VhbiBQYXVsL0pvcmRhbiBDcm91c2Up CgktIHJldHVybiBlcnJvciBjb2RlIGZyb20gZHB1X21kc3NfZW5hYmxlL2Rpc2FibGUgKFNlYW4g UGF1bC9Kb3JkYW4gQ3JvdXNlKQoJLSByZW1vdmUgZXhwbGljaXQgY2FsbHMgdG8gZGV2bV9rZnJl ZSAoU2VhbiBQYXVsL0pvcmRhbiBDcm91c2UpCgktIHJlbW92ZSBjb21wYXRpYmlsaXR5IGNoZWNr IGZyb20gZHB1X21kc3NfaW5pdCBhcwoJICBpdCBpcyBjb25kaXRpb25hbGx5IGNhbGxlZCBmcm9t IG1zbV9kcnYgKFNlYW4gUGF1bCkKCS0gcmV3b3JrZWQgbXNtX2Rzc19wYXJzZV9jbG9jaygpIHRv IGFkZCByZXR1cm4gY2hlY2tzIGZvcgoJICBvZl9wcm9wZXJ0eV9yZWFkXyogY2FsbHMsIGZpeCBs b2cgbWVzc2FnZSBhbmQKCSAgZml4IGFsaWdubWVudCBpc3N1ZXMgKFNlYW4gUGF1bC9Kb3JkYW4g Q3JvdXNlKQoJLSByZW1vdmUgcmVkdW5kYW50IHBhcmFtIGNoZWNrcyBmcm9tIF9faW50cl9vZmZz ZXQgYW5kCgkgIG1ha2UgaXQgYSB2b2lkIGZ1bmN0aW9uIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGVy cm9yCgkgIGhhbmRsaW5nIGZyb20gY2FsbGVyIChKb3JkYW4gQ3JvdXNlKQoJLSB1c2UgJXBLIGZv ciBrZXJuZWwgcG9pbnRlcnMgKEpvcmRhbiBDcm91c2UpCgktIGRvbid0IGV4cG9ydCBtc21fZHNz X3BhcnNlX2Nsb2NrIHNpbmNlIGl0IGlzIHVzZWQKCSAgb25seSBieSBkcHUgZHJpdmVyIChKb3Jk YW4gQ3JvdXNlKQoJLSBtZXJnZSBkcHVfaW5pdCBpbnRvIGRwdV9iaW5kIGFuZCBkcHVfZGVzdHJv eSBpbnRvIGRwdV91bmJpbmQgKFNlYW4gUGF1bCkKCS0gcmVtb3ZlIGV4cGxpY2l0IGRldm0gYWxs b2NhdGlvbiBmYWlsdXJlIG1lc3NhZ2UgKEpvcmRhbiBDcm91c2UpCgktIHJlbW92ZSBsb2NhbCB2 YXJpYWJsZSB0byBob2xkIGFuZCByZXR1cm4gZXJyb3IgY29kZQoJICBpbiBfZHB1X2NvcmVfcGVy Zl9zZXRfY29yZV9jbGtfcmF0ZSgpIGluc3RlYWQgcmV0dXJuCgkgIHJldGNvZGUgZGlyZWN0bHkg ZnJvbSBtc21fZHNzX2Nsa19zZXRfcmF0ZSgpIGNhbGwgKFNlYW4gUGF1bCkKCS0gcmV0dXJuICZt cC0+Y2xrX2NvbmZpZ1tpXSBkaXJlY3RseSB0byBhdm9pZCBsb2NhbCB2YXJpYWJsZQoJICBpbiBf ZHB1X2ttc19nZXRfY2xrKCkgKFNlYW4gUGF1bCkKCS0gaW52ZXJ0IGNvbmRpdGlvbmFsIGNoZWNr IHRvIGVsaW1pbmF0ZSBsb2NhbCByYXRlIHZhcmlhYmxlCgkgIGZyb20gZHB1X2ttc19nZXRfY2xr X3JhdGUoKSAoU2VhbiBQYXVsKQoJLSByZW1vdmUgZW5kIGxhYmVsIGZyb20gZHB1X3Bvd2VyX3Jl c291cmNlX2luaXQoKSBhbmQgcmV0dXJuCgkgIGRpcmVjdGx5IG9uIGRwdV9wb3dlcl9wYXJzZV9k dF9zdXBwbHkoKSBmYWlsdXJlIGFzIG5vIGNsZWFudXAKCSAgaXMgbmVlZGVkIChTZWFuIFBhdWwp CgktIHJlbW92ZSBjaGVja3MgZm9yIHZ0b3RhbCBhbmQgdnJlZnJlc2ggZnJvbQogCSAgZHB1X2Vu Y29kZXJfcGh5c19jbWRfdGVhcmNoZWNrX2NvbmZpZygpIGFzIHRoZXkgc2hvdWxkIGJlCgkgIHZh bGlkIGluIG1vZGVfc2V0KCkgY2FsbCAoU2VhbiBQYXVsKQoJLSBhZGQgZXJyb3IgaGFuZGxpbmcg aW4gZHB1X2NvcmVfcGVyZl9jcnRjX3VwZGF0ZSgpIChTZWFuIFBhdWwpCgpSYWplc2ggWWFkYXYg KDEyKToKICBkcm0vbXNtOiByZW1vdmUgcG1fcnVudGltZV9lbmFibGUgY2FsbCBmcm9tIG1zbV9k cnYKICBkcm0vbXNtL21kcDU6IHN1YmNsYXNzIG1zbV9tZHNzIGZvciBtZHA1CiAgZHJtL21zbS9k cHU6IGFkZCBNRFNTIHRvcCBsZXZlbCBkcml2ZXIgZm9yIGRwdQogIGRybS9tc20vZHB1OiBjcmVh dGUgbmV3IHBsYXRmb3JtIGRyaXZlciBmb3IgZHB1IGRldmljZQogIGRybS9tc20vZHB1OiB1cGRh dGUgZHB1IHN1Yi1ibG9jayBvZmZzZXRzIHdydCBkcHUgYmFzZSBhZGRyZXNzCiAgZHJtL21zbS9k cHU6IHVzZSBydW50aW1lX3BtIGNhbGxzIG9uIGRwdSBkZXZpY2UKICBkcm0vbXNtL2RwdTogcmVt b3ZlIGNsb2NrIG1hbmFnZW1lbnQgY29kZSBmcm9tIGRwdV9wb3dlcl9oYW5kbGUKICBkcm0vbXNt L2RwdTogcmVtb3ZlIHBvd2VyIG1hbmFnZW1lbnQgY29kZSBmcm9tIGRwdV9wb3dlcl9oYW5kbGUK ICBkcm0vbXNtL2RwOiByZW1vdmUgZHB1X3Bvd2VyX2hhbmRsZSBjYWxscyBmcm9tIGRwIGRyaXZl cgogIGRybS9tc20vZHB1OiB1c2UgcnVudGltZV9wbSBjYWxscyBpbiBkcHVfZGJnCiAgZHJtL21z bS9kcHU6IG1vdmUgZHB1X3Bvd2VyX2hhbmRsZSB0byBkcHUgZm9sZGVyCiAgZHJtL21zbS9kcHU6 IGFkZCBlcnJvciBoYW5kbGluZyBpbiBkcHVfY29yZV9wZXJmX2NydGNfdXBkYXRlCgogZHJpdmVy cy9ncHUvZHJtL21zbS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgfCAgICAzICstCiBk cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29yZV9pcnEuYyAgICAgICB8ICAxMDYg Ky0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb3JlX2lycS5oICAgICAgIHwg ICAxNCAtCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29yZV9wZXJmLmMgICAg ICB8ICAgODIgKy0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb3JlX3BlcmYu aCAgICAgIHwgICAxNSArLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMu YyAgICAgICAgICAgfCAgIDE5ICstCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf Y3J0Yy5oICAgICAgICAgICB8ICAgIDIgKwogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2VuY29kZXIuYyAgICAgICAgfCAgIDE3ICstCiAuLi4vZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9lbmNvZGVyX3BoeXNfY21kLmMgICB8ICAgIDkgKy0KIGRyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9od19jYXRhbG9nLmMgICAgIHwgICA3NyArLQogZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X2h3X2NhdGFsb2cuaCAgICAgfCAgICA3IC0KIGRyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19pbnRlcnJ1cHRzLmMgIHwgICA0NiArLQogZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2ludGVycnVwdHMuaCAgfCAgIDExIC0KIGRy aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9pcnEuYyAgICAgICAgICAgIHwgICA0OCAr LQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttcy5jICAgICAgICAgICAgfCAg MzM3ICsrKystLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttcy5oICAgICAg ICAgICAgfCAgIDE2ICstCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfbWRzcy5j ICAgICAgICAgICB8ICAyNTQgKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9wbGFuZS5jICAgICAgICAgIHwgICAgNiArLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X3Bvd2VyX2hhbmRsZS5jICAgfCAgNjkzICsrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wb3dlcl9oYW5kbGUuaCAgIHwgIDI4OCArKysrKysKIGRy aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9tZHA1L21kcDVfbWRzcy5jICAgICAgICAgIHwgIDE1NCAr LS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcG93ZXIuYyAgICAgICAgICAgICAgICAgIHwg ICAzMiArLQogZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wb3dlci5oICAgICAgICAgICAgICAg ICAgfCAgICA0ICstCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9kYmcuYyAgICAgICAgICAgICAg ICAgICAgICB8ICAgMTggKy0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZHB1X2RiZy5oICAgICAgICAg ICAgICAgICAgICAgIHwgICAxMyArLQogZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfaW9fdXRpbC5j ICAgICAgICAgICAgICAgICAgfCAgIDU3ICsrCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9wb3dl cl9oYW5kbGUuYyAgICAgICAgICAgICB8IDEwNzUgLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGRyaXZl cnMvZ3B1L2RybS9tc20vZHB1X3Bvd2VyX2hhbmRsZS5oICAgICAgICAgICAgIHwgIDMzMCAtLS0t LS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5jICAgICAgICAgICAgICAgICAgICAgIHwg ICA4NiArLQogZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmggICAgICAgICAgICAgICAgICAg ICAgfCAgIDEwICstCiBkcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9rbXMuaCAgICAgICAgICAgICAg ICAgICAgICB8ICAgMjEgKy0KIGluY2x1ZGUvbGludXgvZHB1X2lvX3V0aWwuaCAgICAgICAgICAg ICAgICAgICAgICAgIHwgICAgMiArCiAzMiBmaWxlcyBjaGFuZ2VkLCAxODE4IGluc2VydGlvbnMo KyksIDIwMzQgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X21kc3MuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wb3dlcl9oYW5kbGUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wb3dlcl9oYW5kbGUuaAogZGVsZXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHB1X3Bvd2VyX2hhbmRsZS5jCiBkZWxl dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfcG93ZXJfaGFuZGxlLmgKCi0t IApUaGUgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4gaXMgYSBtZW1iZXIgb2YgdGhl IENvZGUgQXVyb3JhIEZvcnVtLAphIExpbnV4IEZvdW5kYXRpb24gQ29sbGFib3JhdGl2ZSBQcm9q ZWN0CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpGcmVl ZHJlbm8gbWFpbGluZyBsaXN0CkZyZWVkcmVub0BsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9mcmVlZHJlbm8K