From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex Deucher Subject: [PATCH 4/6 v3] ASoC: AMD: DMA driver changes for Stoney Platform Date: Wed, 13 Sep 2017 13:57:53 -0400 Message-ID: <1505325475-22602-5-git-send-email-alexander.deucher@amd.com> References: <1505325475-22602-1-git-send-email-alexander.deucher@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1505325475-22602-1-git-send-email-alexander.deucher-5C7GfCeVMHo@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, airlied-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, alsa-devel-K7yf7f+aM1XWsZ/bQMPhNw@public.gmane.org, broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org, Vijendar.Mukunda-5C7GfCeVMHo@public.gmane.org, rajeevkumar.linux-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, perex-/Fr2/VpizcU@public.gmane.org Cc: tiwai-l3A5Bk7waGM@public.gmane.org, Alex Deucher , lgirdwood-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org List-Id: dri-devel@lists.freedesktop.org RnJvbTogVmlqZW5kYXIgTXVrdW5kYSA8VmlqZW5kYXIuTXVrdW5kYUBhbWQuY29tPgoKQWRkZWQg RE1BIGRyaXZlciBjaGFuZ2VzIGZvciBTdG9uZXkgcGxhdGZvcm0uCkJlbG93IGFyZSB0aGUga2V5 IGRpZmZlcmVuY2VzIGJldHdlZW4gU3RvbmV5IGFuZCBDWgoKSW4gU3RvbmV5LCBNZW1vcnkgR2F0 aW5nIGlzIGRpc2FibGVkLlNSQU0gQmFua3Mgd29uJ3QKYmUgdHVybmVkIG9mZi5ObyBPZiBTUkFN IEJhbmtzIHJlZHVjZWQgdG8gNi4KREFHQiBHYXJsaWMgSW50ZXJmYWNlIHVzZWQgYW5kIDE2IGJp dCByZXNvbHV0aW9uIGlzIHN1cHBvcnRlZC4KU1JBTSBiYW5rIDEgJiBTUkFNIGJhbmsgMiB3aWxs IGJlIHVzZWQgZm9yIHBsYXliYWNrIHNjZW5hcmlvLgpTUkFNIEJhbmsgMyAmIFNSQU0gQmFuayA0 IHdpbGwgYmUgdXNlZCBmb3IgQ2FwdHVyZSBzY2VuYXJpby4KCkFja2VkLWJ5OiBNYXJrIEJyb3du IDxicm9vbmllQGtlcm5lbC5vcmc+ClJldmlld2VkLWJ5OiBBbGV4IERldWNoZXIgPGFsZXhhbmRl ci5kZXVjaGVyQGFtZC5jb20+ClNpZ25lZC1vZmYtYnk6IFZpamVuZGFyIE11a3VuZGEgPFZpamVu ZGFyLk11a3VuZGFAYW1kLmNvbT4KU2lnbmVkLW9mZi1ieTogQWxleCBEZXVjaGVyIDxhbGV4YW5k ZXIuZGV1Y2hlckBhbWQuY29tPgotLS0KCnYyOiBBZGRlZCBzd2l0Y2ggY2FzZXMgZm9yIGFzaWMg dHlwZS4KdjM6IEFkZCBSLWIsIHJlc2VuZAp2NDogQWRkIE1hcmsncyBBY2sKCiBzb3VuZC9zb2Mv YW1kL2FjcC1wY20tZG1hLmMgfCA4NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyst LS0tLS0tLS0tLS0KIHNvdW5kL3NvYy9hbWQvYWNwLmggICAgICAgICB8ICAyICsrCiAyIGZpbGVz IGNoYW5nZWQsIDY3IGluc2VydGlvbnMoKyksIDIyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh L3NvdW5kL3NvYy9hbWQvYWNwLXBjbS1kbWEuYyBiL3NvdW5kL3NvYy9hbWQvYWNwLXBjbS1kbWEu YwppbmRleCBmMDBiNmI5Li5mMTZlMGI4IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYW1kL2FjcC1w Y20tZG1hLmMKKysrIGIvc291bmQvc29jL2FtZC9hY3AtcGNtLWRtYS5jCkBAIC0xMzcsOCArMTM3 LDggQEAgc3RhdGljIHZvaWQgY29uZmlnX2RtYV9kZXNjcmlwdG9yX2luX3NyYW0odm9pZCBfX2lv bWVtICphY3BfbW1pbywKICAqIHN5c3RlbSBtZW1vcnkgPC0+IEFDUCBTUkFNCiAgKi8KIHN0YXRp YyB2b2lkIHNldF9hY3Bfc3lzbWVtX2RtYV9kZXNjcmlwdG9ycyh2b2lkIF9faW9tZW0gKmFjcF9t bWlvLAotCQkJCQkgICB1MzIgc2l6ZSwgaW50IGRpcmVjdGlvbiwKLQkJCQkJICAgdTMyIHB0ZV9v ZmZzZXQpCisJCQkJCXUzMiBzaXplLCBpbnQgZGlyZWN0aW9uLAorCQkJCQl1MzIgcHRlX29mZnNl dCwgdTMyIGFzaWNfdHlwZSkKIHsKIAl1MTYgaTsKIAl1MTYgZG1hX2RzY3JfaWR4ID0gUExBWUJB Q0tfU1RBUlRfRE1BX0RFU0NSX0NIMTI7CkBAIC0xNTIsMjAgKzE1Miw0MiBAQCBzdGF0aWMgdm9p ZCBzZXRfYWNwX3N5c21lbV9kbWFfZGVzY3JpcHRvcnModm9pZCBfX2lvbWVtICphY3BfbW1pbywK IAkJCQkJKHNpemUgLyAyKSAtIChpICogKHNpemUvMikpOwogCQkJZG1hZHNjcltpXS5zcmMgPSBB Q1BfSU5URVJOQUxfQVBFUlRVUkVfV0lORE9XXzBfQUREUkVTUwogCQkJCSsgKHB0ZV9vZmZzZXQg KiBTWl80SykgKyAoaSAqIChzaXplLzIpKTsKLQkJCWRtYWRzY3JbaV0ueGZlcl92YWwgfD0KLQkJ CShBQ1BfRE1BX0FUVFJJQlVURVNfREFHQl9PTklPTl9UT19TSEFSRURNRU0gPDwgMTYpIHwKLQkJ CShzaXplIC8gMik7CisJCQlzd2l0Y2ggKGFzaWNfdHlwZSkgeworCQkJY2FzZSBDSElQX1NUT05F WToKKwkJCQlkbWFkc2NyW2ldLnhmZXJfdmFsIHw9CisJCQkJKEFDUF9ETUFfQVRUUklCVVRFU19E QUdCX0dBUkxJQ19UT19TSEFSRURNRU0gIDw8IDE2KSB8CisJCQkJKHNpemUgLyAyKTsKKwkJCQli cmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZG1hZHNjcltpXS54ZmVyX3ZhbCB8PQorCQkJCShBQ1Bf RE1BX0FUVFJJQlVURVNfREFHQl9PTklPTl9UT19TSEFSRURNRU0gIDw8IDE2KSB8CisJCQkJKHNp emUgLyAyKTsKKwkJCX0KIAkJfSBlbHNlIHsKIAkJCWRtYV9kc2NyX2lkeCA9IENBUFRVUkVfU1RB UlRfRE1BX0RFU0NSX0NIMTQgKyBpOwotCQkJZG1hZHNjcltpXS5zcmMgPSBBQ1BfU0hBUkVEX1JB TV9CQU5LXzVfQUREUkVTUyArCi0JCQkJCShpICogKHNpemUvMikpOwotCQkJZG1hZHNjcltpXS5k ZXN0ID0gQUNQX0lOVEVSTkFMX0FQRVJUVVJFX1dJTkRPV18wX0FERFJFU1MKLQkJCQkJCSsgKHB0 ZV9vZmZzZXQgKiBTWl80SykgKwotCQkJCQkJKGkgKiAoc2l6ZS8yKSk7Ci0JCQlkbWFkc2NyW2ld LnhmZXJfdmFsIHw9Ci0JCQlCSVQoMjIpIHwKLQkJCShBQ1BfRE1BX0FUVFJJQlVURVNfU0hBUkVE TUVNX1RPX0RBR0JfT05JT04gPDwgMTYpIHwKLQkJCShzaXplIC8gMik7CisJCQlzd2l0Y2ggKGFz aWNfdHlwZSkgeworCQkJY2FzZSBDSElQX1NUT05FWToKKwkJCQlkbWFkc2NyW2ldLnNyYyA9IEFD UF9TSEFSRURfUkFNX0JBTktfM19BRERSRVNTICsKKwkJCQkoaSAqIChzaXplLzIpKTsKKwkJCQlk bWFkc2NyW2ldLmRlc3QgPQorCQkJCUFDUF9JTlRFUk5BTF9BUEVSVFVSRV9XSU5ET1dfMF9BRERS RVNTICsKKwkJCQkocHRlX29mZnNldCAqIFNaXzRLKSArIChpICogKHNpemUvMikpOworCQkJCWRt YWRzY3JbaV0ueGZlcl92YWwgfD0KKwkJCQlCSVQoMjIpIHwKKwkJCQkoQUNQX0RNQV9BVFRSSUJV VEVTX1NIQVJFRF9NRU1fVE9fREFHQl9HQVJMSUMgPDwgMTYpIHwKKwkJCQkoc2l6ZSAvIDIpOwor CQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlkbWFkc2NyW2ldLnNyYyA9IEFDUF9TSEFSRURf UkFNX0JBTktfNV9BRERSRVNTICsKKwkJCQkoaSAqIChzaXplLzIpKTsKKwkJCQlkbWFkc2NyW2ld LmRlc3QgPQorCQkJCUFDUF9JTlRFUk5BTF9BUEVSVFVSRV9XSU5ET1dfMF9BRERSRVNTICsKKwkJ CQkocHRlX29mZnNldCAqIFNaXzRLKSArIChpICogKHNpemUvMikpOworCQkJCWRtYWRzY3JbaV0u eGZlcl92YWwgfD0KKwkJCQlCSVQoMjIpIHwKKwkJCQkoQUNQX0RNQV9BVFRSSUJVVEVTX1NIQVJF RE1FTV9UT19EQUdCX09OSU9OIDw8IDE2KSB8CisJCQkJKHNpemUgLyAyKTsKKwkJCX0KIAkJfQog CQljb25maWdfZG1hX2Rlc2NyaXB0b3JfaW5fc3JhbShhY3BfbW1pbywgZG1hX2RzY3JfaWR4LAog CQkJCQkJJmRtYWRzY3JbaV0pOwpAQCAtMTg2LDcgKzIwOCw4IEBAIHN0YXRpYyB2b2lkIHNldF9h Y3Bfc3lzbWVtX2RtYV9kZXNjcmlwdG9ycyh2b2lkIF9faW9tZW0gKmFjcF9tbWlvLAogICogQUNQ IFNSQU0gPC0+IEkyUwogICovCiBzdGF0aWMgdm9pZCBzZXRfYWNwX3RvX2kyc19kbWFfZGVzY3Jp cHRvcnModm9pZCBfX2lvbWVtICphY3BfbW1pbywKLQkJCQkJICAgdTMyIHNpemUsIGludCBkaXJl Y3Rpb24pCisJCQkJCXUzMiBzaXplLCBpbnQgZGlyZWN0aW9uLAorCQkJCQl1MzIgYXNpY190eXBl KQogewogCiAJdTE2IGk7CkBAIC0yMDcsOCArMjMwLDE3IEBAIHN0YXRpYyB2b2lkIHNldF9hY3Bf dG9faTJzX2RtYV9kZXNjcmlwdG9ycyh2b2lkIF9faW9tZW0gKmFjcF9tbWlvLAogCQkJZG1hX2Rz Y3JfaWR4ID0gQ0FQVFVSRV9TVEFSVF9ETUFfREVTQ1JfQ0gxNSArIGk7CiAJCQkvKiBkbWFkc2Ny W2ldLnNyYyBpcyB1bnVzZWQgYnkgaGFyZHdhcmUuICovCiAJCQlkbWFkc2NyW2ldLnNyYyA9IDA7 Ci0JCQlkbWFkc2NyW2ldLmRlc3QgPSBBQ1BfU0hBUkVEX1JBTV9CQU5LXzVfQUREUkVTUyArCisJ CQlzd2l0Y2ggKGFzaWNfdHlwZSkgeworCQkJY2FzZSBDSElQX1NUT05FWToKKwkJCQlkbWFkc2Ny W2ldLmRlc3QgPQorCQkJCQkgQUNQX1NIQVJFRF9SQU1fQkFOS18zX0FERFJFU1MgKwogCQkJCQko aSAqIChzaXplIC8gMikpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlkbWFkc2NyW2ld LmRlc3QgPQorCQkJCQkgQUNQX1NIQVJFRF9SQU1fQkFOS181X0FERFJFU1MgKworCQkJCQkoaSAq IChzaXplIC8gMikpOworCQkJfQogCQkJZG1hZHNjcltpXS54ZmVyX3ZhbCB8PSBCSVQoMjIpIHwK IAkJCQkJKEZST01fQUNQX0kyU18xIDw8IDE2KSB8IChzaXplIC8gMik7CiAJCX0KQEAgLTI2NCw3 ICsyOTYsOCBAQCBzdGF0aWMgdm9pZCBhY3BfcHRlX2NvbmZpZyh2b2lkIF9faW9tZW0gKmFjcF9t bWlvLCBzdHJ1Y3QgcGFnZSAqcGcsCiB9CiAKIHN0YXRpYyB2b2lkIGNvbmZpZ19hY3BfZG1hKHZv aWQgX19pb21lbSAqYWNwX21taW8sCi0JCQkgICBzdHJ1Y3QgYXVkaW9fc3Vic3RyZWFtX2RhdGEg KmF1ZGlvX2NvbmZpZykKKwkJCXN0cnVjdCBhdWRpb19zdWJzdHJlYW1fZGF0YSAqYXVkaW9fY29u ZmlnLAorCQkJdTMyIGFzaWNfdHlwZSkKIHsKIAl1MzIgcHRlX29mZnNldDsKIApAQCAtMjc4LDEx ICszMTEsMTEgQEAgc3RhdGljIHZvaWQgY29uZmlnX2FjcF9kbWEodm9pZCBfX2lvbWVtICphY3Bf bW1pbywKIAogCS8qIENvbmZpZ3VyZSBTeXN0ZW0gbWVtb3J5IDwtPiBBQ1AgU1JBTSBETUEgZGVz Y3JpcHRvcnMgKi8KIAlzZXRfYWNwX3N5c21lbV9kbWFfZGVzY3JpcHRvcnMoYWNwX21taW8sIGF1 ZGlvX2NvbmZpZy0+c2l6ZSwKLQkJCQkgICAgICAgYXVkaW9fY29uZmlnLT5kaXJlY3Rpb24sIHB0 ZV9vZmZzZXQpOworCQkJCWF1ZGlvX2NvbmZpZy0+ZGlyZWN0aW9uLCBwdGVfb2Zmc2V0LCBhc2lj X3R5cGUpOwogCiAJLyogQ29uZmlndXJlIEFDUCBTUkFNIDwtPiBJMlMgRE1BIGRlc2NyaXB0b3Jz ICovCiAJc2V0X2FjcF90b19pMnNfZG1hX2Rlc2NyaXB0b3JzKGFjcF9tbWlvLCBhdWRpb19jb25m aWctPnNpemUsCi0JCQkJCWF1ZGlvX2NvbmZpZy0+ZGlyZWN0aW9uKTsKKwkJCQlhdWRpb19jb25m aWctPmRpcmVjdGlvbiwgYXNpY190eXBlKTsKIH0KIAogLyogU3RhcnQgYSBnaXZlbiBETUEgY2hh bm5lbCB0cmFuc2ZlciAqLwpAQCAtNTAyLDYgKzUzNSwxMiBAQCBzdGF0aWMgaW50IGFjcF9pbml0 KHZvaWQgX19pb21lbSAqYWNwX21taW8sIHUzMiBhc2ljX3R5cGUpCiAJCQlhY3Bfc2V0X3NyYW1f YmFua19zdGF0ZShhY3BfbW1pbywgYmFuaywgZmFsc2UpOwogCX0KIAorCS8qIFN0b25leSBzdXBw b3J0cyAxNmJpdCByZXNvbHV0aW9uICovCisJaWYgKGFzaWNfdHlwZSA9PSBDSElQX1NUT05FWSkg eworCQl2YWwgPSBhY3BfcmVnX3JlYWQoYWNwX21taW8sIG1tQUNQX0kyU18xNkJJVF9SRVNPTFVU SU9OX0VOKTsKKwkJdmFsIHw9IDB4MDM7CisJCWFjcF9yZWdfd3JpdGUodmFsLCBhY3BfbW1pbywg bW1BQ1BfSTJTXzE2QklUX1JFU09MVVRJT05fRU4pOworCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAt NjgwLDYgKzcxOSw4IEBAIHN0YXRpYyBpbnQgYWNwX2RtYV9od19wYXJhbXMoc3RydWN0IHNuZF9w Y21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCiAJc3RydWN0IHBhZ2UgKnBnOwogCXN0cnVjdCBzbmRf cGNtX3J1bnRpbWUgKnJ1bnRpbWU7CiAJc3RydWN0IGF1ZGlvX3N1YnN0cmVhbV9kYXRhICpydGQ7 CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnBydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVf ZGF0YTsKKwlzdHJ1Y3QgYXVkaW9fZHJ2X2RhdGEgKmFkYXRhID0gZGV2X2dldF9kcnZkYXRhKHBy dGQtPnBsYXRmb3JtLT5kZXYpOwogCiAJcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAly dGQgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CkBAIC03MDcsNyArNzQ4LDcgQEAgc3RhdGljIGlu dCBhY3BfZG1hX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwK IAkJcnRkLT5udW1fb2ZfcGFnZXMgPSBQQUdFX0FMSUdOKHNpemUpID4+IFBBR0VfU0hJRlQ7CiAJ CXJ0ZC0+ZGlyZWN0aW9uID0gc3Vic3RyZWFtLT5zdHJlYW07CiAKLQkJY29uZmlnX2FjcF9kbWEo cnRkLT5hY3BfbW1pbywgcnRkKTsKKwkJY29uZmlnX2FjcF9kbWEocnRkLT5hY3BfbW1pbywgcnRk LCBhZGF0YS0+YXNpY190eXBlKTsKIAkJc3RhdHVzID0gMDsKIAl9IGVsc2UgewogCQlzdGF0dXMg PSAtRU5PTUVNOwpAQCAtMTAxMSw3ICsxMDUyLDggQEAgc3RhdGljIGludCBhY3BfcGNtX3Jlc3Vt ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJCQkJCQl0cnVlKTsKIAkJfQogCQljb25maWdfYWNwX2Rt YShhZGF0YS0+YWNwX21taW8sCi0JCQkJYWRhdGEtPnBsYXlfc3RyZWFtLT5ydW50aW1lLT5wcml2 YXRlX2RhdGEpOworCQkJYWRhdGEtPnBsYXlfc3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGEs CisJCQlhZGF0YS0+YXNpY190eXBlKTsKIAl9CiAJaWYgKGFkYXRhLT5jYXB0dXJlX3N0cmVhbSAm JiBhZGF0YS0+Y2FwdHVyZV9zdHJlYW0tPnJ1bnRpbWUpIHsKIAkJaWYgKGFkYXRhLT5hc2ljX3R5 cGUgIT0gQ0hJUF9TVE9ORVkpIHsKQEAgLTEwMjAsNyArMTA2Miw4IEBAIHN0YXRpYyBpbnQgYWNw X3BjbV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogCQkJCQkJdHJ1ZSk7CiAJCX0KIAkJY29u ZmlnX2FjcF9kbWEoYWRhdGEtPmFjcF9tbWlvLAotCQkJCWFkYXRhLT5jYXB0dXJlX3N0cmVhbS0+ cnVudGltZS0+cHJpdmF0ZV9kYXRhKTsKKwkJCWFkYXRhLT5jYXB0dXJlX3N0cmVhbS0+cnVudGlt ZS0+cHJpdmF0ZV9kYXRhLAorCQkJYWRhdGEtPmFzaWNfdHlwZSk7CiAJfQogCWFjcF9yZWdfd3Jp dGUoMSwgYWRhdGEtPmFjcF9tbWlvLCBtbUFDUF9FWFRFUk5BTF9JTlRSX0VOQik7CiAJcmV0dXJu IDA7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYW1kL2FjcC5oIGIvc291bmQvc29jL2FtZC9hY3Au aAppbmRleCAyOGNmOTE0Li5hMzMwYTk5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYW1kL2FjcC5o CisrKyBiL3NvdW5kL3NvYy9hbWQvYWNwLmgKQEAgLTE5LDYgKzE5LDcgQEAKIAogLyogQ2FwdHVy ZSBTUkFNIGFkZHJlc3MgKGFzIGEgc291cmNlIGluIGRtYSBkZXNjcmlwdG9yKSAqLwogI2RlZmlu ZSBBQ1BfU0hBUkVEX1JBTV9CQU5LXzVfQUREUkVTUwkJMHg0MDBBMDAwCisjZGVmaW5lIEFDUF9T SEFSRURfUkFNX0JBTktfM19BRERSRVNTCQkweDQwMDYwMDAKIAogI2RlZmluZSBBQ1BfRE1BX1JF U0VUX1RJTUUJCQkxMDAwMAogI2RlZmluZSBBQ1BfQ0xPQ0tfRU5fVElNRV9PVVRfVkFMVUUJCTB4 MDAwMDAwRkYKQEAgLTY3LDYgKzY4LDcgQEAKICNkZWZpbmUgQ0FQVFVSRV9TVEFSVF9ETUFfREVT Q1JfQ0gxNSA2CiAjZGVmaW5lIENBUFRVUkVfRU5EX0RNQV9ERVNDUl9DSDE1IDcKIAorI2RlZmlu ZSBtbUFDUF9JMlNfMTZCSVRfUkVTT0xVVElPTl9FTiAgICAgICAweDUyMDkKIGVudW0gYWNwX2Rt YV9wcmlvcml0eV9sZXZlbCB7CiAJLyogMHgwIFNwZWNpZmllcyB0aGUgRE1BIGNoYW5uZWwgaXMg Z2l2ZW4gbm9ybWFsIHByaW9yaXR5ICovCiAJQUNQX0RNQV9QUklPUklUWV9MRVZFTF9OT1JNQUwg PSAweDAsCi0tIAoyLjUuNQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KYW1kLWdmeCBtYWlsaW5nIGxpc3QKYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4 Cg==