From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Anholt Subject: [PATCH v2 8/9] drm/vc4: Add support for async pageflips. Date: Tue, 8 Dec 2015 10:30:17 -0800 Message-ID: <1449599418-20780-9-git-send-email-eric@anholt.net> References: <1449599418-20780-1-git-send-email-eric@anholt.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1449599418-20780-1-git-send-email-eric@anholt.net> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: linux-kernel@vger.kernel.org List-Id: dri-devel@lists.freedesktop.org QW4gYXN5bmMgcGFnZWZsaXAgc3RvcmVzIHRoZSBtb2Rlc2V0IHRvIGJlIGRvbmUgYW5kIGV4ZWN1 dGVzIGl0IG9uY2UKdGhlIEJPcyBhcmUgcmVhZHkgdG8gYmUgZGlzcGxheWVkLiAgVGhpcyBnZXRz IHVzIGFib3V0IDN4IHBlcmZvcm1hbmNlCmluIGZ1bGwgc2NyZWVuIHJlbmRlcmluZyB3aXRoIHBh Z2VmbGlwcGluZy4KClNpZ25lZC1vZmYtYnk6IEVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+ Ci0tLQogZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfY3J0Yy5jICB8ICA5OSArKysrKysrKysrKysr KysrKysrKysrKysrLQogZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2LmggICB8ICAxNiArKysr KwogZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZ2VtLmMgICB8ICA0MCArKysrKysrKysrKwogZHJp dmVycy9ncHUvZHJtL3ZjNC92YzRfa21zLmMgICB8IDE0OSArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKystCiBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9wbGFuZS5jIHwgIDQw ICsrKysrKysrKysrCiA1IGZpbGVzIGNoYW5nZWQsIDM0MiBpbnNlcnRpb25zKCspLCAyIGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2NydGMuYyBiL2Ry aXZlcnMvZ3B1L2RybS92YzQvdmM0X2NydGMuYwppbmRleCA3YTlmNDc2Li5hMzE5MzMyIDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUv ZHJtL3ZjNC92YzRfY3J0Yy5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiZHJtX2F0b21p Y19oZWxwZXIuaCIKICNpbmNsdWRlICJkcm1fY3J0Y19oZWxwZXIuaCIKICNpbmNsdWRlICJsaW51 eC9jbGsuaCIKKyNpbmNsdWRlICJkcm1fZmJfY21hX2hlbHBlci5oIgogI2luY2x1ZGUgImxpbnV4 L2NvbXBvbmVudC5oIgogI2luY2x1ZGUgImxpbnV4L29mX2RldmljZS5oIgogI2luY2x1ZGUgInZj NF9kcnYuaCIKQEAgLTQ3NSwxMCArNDc2LDEwNiBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgdmM0X2Ny dGNfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKIAlyZXR1cm4gcmV0OwogfQogCitz dHJ1Y3QgdmM0X2FzeW5jX2ZsaXBfc3RhdGUgeworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKKwlz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKKwlzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2 ZW50ICpldmVudDsKKworCXN0cnVjdCB2YzRfc2Vxbm9fY2IgY2I7Cit9OworCisvKiBDYWxsZWQg d2hlbiB0aGUgVjNEIGV4ZWN1dGlvbiBmb3IgdGhlIEJPIGJlaW5nIGZsaXBwZWQgdG8gaXMgZG9u ZSwgc28gdGhhdAorICogd2UgY2FuIGFjdHVhbGx5IHVwZGF0ZSB0aGUgcGxhbmUncyBhZGRyZXNz IHRvIHBvaW50IHRvIGl0LgorICovCitzdGF0aWMgdm9pZAordmM0X2FzeW5jX3BhZ2VfZmxpcF9j b21wbGV0ZShzdHJ1Y3QgdmM0X3NlcW5vX2NiICpjYikKK3sKKwlzdHJ1Y3QgdmM0X2FzeW5jX2Zs aXBfc3RhdGUgKmZsaXBfc3RhdGUgPQorCQljb250YWluZXJfb2YoY2IsIHN0cnVjdCB2YzRfYXN5 bmNfZmxpcF9zdGF0ZSwgY2IpOworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IGZsaXBfc3RhdGUt PmNydGM7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgdmM0 X2RldiAqdmM0ID0gdG9fdmM0X2RldihkZXYpOworCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0g Y3J0Yy0+cHJpbWFyeTsKKworCXZjNF9wbGFuZV9hc3luY19zZXRfZmIocGxhbmUsIGZsaXBfc3Rh dGUtPmZiKTsKKwlpZiAoZmxpcF9zdGF0ZS0+ZXZlbnQpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFn czsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CisJCWRy bV9jcnRjX3NlbmRfdmJsYW5rX2V2ZW50KGNydGMsIGZsaXBfc3RhdGUtPmV2ZW50KTsKKwkJc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CisJfQorCisJZHJt X2ZyYW1lYnVmZmVyX3VucmVmZXJlbmNlKGZsaXBfc3RhdGUtPmZiKTsKKwlrZnJlZShmbGlwX3N0 YXRlKTsKKworCXVwKCZ2YzQtPmFzeW5jX21vZGVzZXQpOworfQorCisvKiBJbXBsZW1lbnRzIGFz eW5jIChub24tdmJsYW5rLXN5bmNlZCkgcGFnZSBmbGlwcy4KKyAqCisgKiBUaGUgcGFnZSBmbGlw IGlvY3RsIG5lZWRzIHRvIHJldHVybiBpbW1lZGlhdGVseSwgc28gd2UgZ3JhYiB0aGUKKyAqIG1v ZGVzZXQgc2VtYXBob3JlIG9uIHRoZSBwaXBlLCBhbmQgcXVldWUgdGhlIGFkZHJlc3MgdXBkYXRl IGZvcgorICogd2hlbiBWM0QgaXMgZG9uZSB3aXRoIHRoZSBCTyBiZWluZyBmbGlwcGVkIHRvLgor ICovCitzdGF0aWMgaW50IHZjNF9hc3luY19wYWdlX2ZsaXAoc3RydWN0IGRybV9jcnRjICpjcnRj LAorCQkJICAgICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAorCQkJICAgICAgIHN0cnVj dCBkcm1fcGVuZGluZ192YmxhbmtfZXZlbnQgKmV2ZW50LAorCQkJICAgICAgIHVpbnQzMl90IGZs YWdzKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJc3RydWN0IHZj NF9kZXYgKnZjNCA9IHRvX3ZjNF9kZXYoZGV2KTsKKwlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9 IGNydGMtPnByaW1hcnk7CisJaW50IHJldCA9IDA7CisJc3RydWN0IHZjNF9hc3luY19mbGlwX3N0 YXRlICpmbGlwX3N0YXRlOworCXN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QgKmNtYV9ibyA9IGRy bV9mYl9jbWFfZ2V0X2dlbV9vYmooZmIsIDApOworCXN0cnVjdCB2YzRfYm8gKmJvID0gdG9fdmM0 X2JvKCZjbWFfYm8tPmJhc2UpOworCisJZmxpcF9zdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKCpmbGlw X3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmbGlwX3N0YXRlKQorCQlyZXR1cm4gLUVOT01F TTsKKworCWRybV9mcmFtZWJ1ZmZlcl9yZWZlcmVuY2UoZmIpOworCWZsaXBfc3RhdGUtPmZiID0g ZmI7CisJZmxpcF9zdGF0ZS0+Y3J0YyA9IGNydGM7CisJZmxpcF9zdGF0ZS0+ZXZlbnQgPSBldmVu dDsKKworCS8qIE1ha2Ugc3VyZSBhbGwgb3RoZXIgYXN5bmMgbW9kZXNldGVzIGhhdmUgbGFuZGVk LiAqLworCXJldCA9IGRvd25faW50ZXJydXB0aWJsZSgmdmM0LT5hc3luY19tb2Rlc2V0KTsKKwlp ZiAocmV0KSB7CisJCWtmcmVlKGZsaXBfc3RhdGUpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8q IEltbWVkaWF0ZWx5IHVwZGF0ZSB0aGUgcGxhbmUncyBsZWdhY3kgZmIgcG9pbnRlciwgc28gdGhh dCBsYXRlcgorCSAqIG1vZGVzZXQgcHJlcCBzZWVzIHRoZSBzdGF0ZSB0aGF0IHdpbGwgYmUgcHJl c2VudCB3aGVuIHRoZSBzZW1hcGhvcmUKKwkgKiBpcyByZWxlYXNlZC4KKwkgKi8KKwlkcm1fYXRv bWljX3NldF9mYl9mb3JfcGxhbmUocGxhbmUtPnN0YXRlLCBmYik7CisJcGxhbmUtPmZiID0gZmI7 CisKKwl2YzRfcXVldWVfc2Vxbm9fY2IoZGV2LCAmZmxpcF9zdGF0ZS0+Y2IsIGJvLT5zZXFubywK KwkJCSAgIHZjNF9hc3luY19wYWdlX2ZsaXBfY29tcGxldGUpOworCisJLyogRHJpdmVyIHRha2Vz IG93bmVyc2hpcCBvZiBzdGF0ZSBvbiBzdWNjZXNzZnVsIGFzeW5jIGNvbW1pdC4gKi8KKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGludCB2YzRfcGFnZV9mbGlwKHN0cnVjdCBkcm1fY3J0YyAqY3J0 YywKKwkJCSBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKKwkJCSBzdHJ1Y3QgZHJtX3BlbmRp bmdfdmJsYW5rX2V2ZW50ICpldmVudCwKKwkJCSB1aW50MzJfdCBmbGFncykKK3sKKwlpZiAoZmxh Z3MgJiBEUk1fTU9ERV9QQUdFX0ZMSVBfQVNZTkMpCisJCXJldHVybiB2YzRfYXN5bmNfcGFnZV9m bGlwKGNydGMsIGZiLCBldmVudCwgZmxhZ3MpOworCWVsc2UKKwkJcmV0dXJuIGRybV9hdG9taWNf aGVscGVyX3BhZ2VfZmxpcChjcnRjLCBmYiwgZXZlbnQsIGZsYWdzKTsKK30KKwogc3RhdGljIGNv bnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5jcyB2YzRfY3J0Y19mdW5jcyA9IHsKIAkuc2V0X2NvbmZp ZyA9IGRybV9hdG9taWNfaGVscGVyX3NldF9jb25maWcsCiAJLmRlc3Ryb3kgPSB2YzRfY3J0Y19k ZXN0cm95LAotCS5wYWdlX2ZsaXAgPSBkcm1fYXRvbWljX2hlbHBlcl9wYWdlX2ZsaXAsCisJLnBh Z2VfZmxpcCA9IHZjNF9wYWdlX2ZsaXAsCiAJLnNldF9wcm9wZXJ0eSA9IE5VTEwsCiAJLmN1cnNv cl9zZXQgPSBOVUxMLCAvKiBoYW5kbGVkIGJ5IGRybV9tb2RlX2N1cnNvcl91bml2ZXJzYWwgKi8K IAkuY3Vyc29yX21vdmUgPSBOVUxMLCAvKiBoYW5kbGVkIGJ5IGRybV9tb2RlX2N1cnNvcl91bml2 ZXJzYWwgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5oIGIvZHJp dmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2LmgKaW5kZXggMGJjOGM1Ny4uZjk5MjdkOCAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJt L3ZjNC92YzRfZHJ2LmgKQEAgLTc2LDYgKzc2LDExIEBAIHN0cnVjdCB2YzRfZGV2IHsKIAl3YWl0 X3F1ZXVlX2hlYWRfdCBqb2Jfd2FpdF9xdWV1ZTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgam9iX2Rv bmVfd29yazsKIAorCS8qIExpc3Qgb2Ygc3RydWN0IHZjNF9zZXFub19jYiBmb3IgY2FsbGJhY2tz IHRvIGJlIG1hZGUgZnJvbSBhCisJICogd29ya3F1ZXVlIHdoZW4gdGhlIGdpdmVuIHNlcW5vIGlz IHBhc3NlZC4KKwkgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHNlcW5vX2NiX2xpc3Q7CisKIAkvKiBU aGUgYmlubmVyIG92ZXJmbG93IG1lbW9yeSB0aGF0J3MgY3VycmVudGx5IHNldCB1cCBpbgogCSAq IEJQT0EvQlBPUyByZWdpc3RlcnMuICBXaGVuIG92ZXJmbG93IG9jY3VycyBhbmQgYSBuZXcgb25l IGlzCiAJICogYWxsb2NhdGVkLCB0aGUgcHJldmlvdXMgb25lIHdpbGwgYmUgbW92ZWQgdG8KQEAg LTEyOCw2ICsxMzMsMTIgQEAgdG9fdmM0X2JvKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqYm8pCiAJ cmV0dXJuIChzdHJ1Y3QgdmM0X2JvICopYm87CiB9CiAKK3N0cnVjdCB2YzRfc2Vxbm9fY2Igewor CXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCXVpbnQ2NF90IHNlcW5vOworCXZvaWQgKCpmdW5j KShzdHJ1Y3QgdmM0X3NlcW5vX2NiICpjYik7Cit9OworCiBzdHJ1Y3QgdmM0X3YzZCB7CiAJc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKIAl2b2lkIF9faW9tZW0gKnJlZ3M7CkBAIC0zODQs NiArMzk1LDkgQEAgdm9pZCB2YzRfc3VibWl0X25leHRfam9iKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYpOwogaW50IHZjNF93YWl0X2Zvcl9zZXFubyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1aW50 NjRfdCBzZXFubywKIAkJICAgICAgIHVpbnQ2NF90IHRpbWVvdXRfbnMsIGJvb2wgaW50ZXJydXB0 aWJsZSk7CiB2b2lkIHZjNF9qb2JfaGFuZGxlX2NvbXBsZXRlZChzdHJ1Y3QgdmM0X2RldiAqdmM0 KTsKK2ludCB2YzRfcXVldWVfc2Vxbm9fY2Ioc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJICAg ICAgIHN0cnVjdCB2YzRfc2Vxbm9fY2IgKmNiLCB1aW50NjRfdCBzZXFubywKKwkJICAgICAgIHZv aWQgKCpmdW5jKShzdHJ1Y3QgdmM0X3NlcW5vX2NiICpjYikpOwogCiAvKiB2YzRfaGRtaS5jICov CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciB2YzRfaGRtaV9kcml2ZXI7CkBAIC00MDks NiArNDIzLDggQEAgc3RydWN0IGRybV9wbGFuZSAqdmM0X3BsYW5lX2luaXQoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwKIAkJCQkgZW51bSBkcm1fcGxhbmVfdHlwZSB0eXBlKTsKIHUzMiB2YzRfcGxh bmVfd3JpdGVfZGxpc3Qoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsIHUzMiBfX2lvbWVtICpkbGlz dCk7CiB1MzIgdmM0X3BsYW5lX2RsaXN0X3NpemUoc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3Rh dGUpOwordm9pZCB2YzRfcGxhbmVfYXN5bmNfc2V0X2ZiKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5l LAorCQkJICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKTsKIAogLyogdmM0X3YzZC5jICov CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciB2YzRfdjNkX2RyaXZlcjsKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92 YzRfZ2VtLmMKaW5kZXggOTM2ZGRkZi4uNWZiMDU1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL3ZjNC92YzRfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZ2VtLmMKQEAg LTQ2MSw2ICs0NjEsNyBAQCB2b2lkCiB2YzRfam9iX2hhbmRsZV9jb21wbGV0ZWQoc3RydWN0IHZj NF9kZXYgKnZjNCkKIHsKIAl1bnNpZ25lZCBsb25nIGlycWZsYWdzOworCXN0cnVjdCB2YzRfc2Vx bm9fY2IgKmNiLCAqY2JfdGVtcDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ2YzQtPmpvYl9sb2Nr LCBpcnFmbGFncyk7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZ2YzQtPmpvYl9kb25lX2xpc3QpKSB7 CkBAIC00NzMsNyArNDc0LDQ1IEBAIHZjNF9qb2JfaGFuZGxlX2NvbXBsZXRlZChzdHJ1Y3QgdmM0 X2RldiAqdmM0KQogCQl2YzRfY29tcGxldGVfZXhlYyh2YzQtPmRldiwgZXhlYyk7CiAJCXNwaW5f bG9ja19pcnFzYXZlKCZ2YzQtPmpvYl9sb2NrLCBpcnFmbGFncyk7CiAJfQorCisJbGlzdF9mb3Jf ZWFjaF9lbnRyeV9zYWZlKGNiLCBjYl90ZW1wLCAmdmM0LT5zZXFub19jYl9saXN0LCB3b3JrLmVu dHJ5KSB7CisJCWlmIChjYi0+c2Vxbm8gPD0gdmM0LT5maW5pc2hlZF9zZXFubykgeworCQkJbGlz dF9kZWxfaW5pdCgmY2ItPndvcmsuZW50cnkpOworCQkJc2NoZWR1bGVfd29yaygmY2ItPndvcmsp OworCQl9CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmM0LT5qb2JfbG9jaywgaXJx ZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCB2YzRfc2Vxbm9fY2Jfd29yayhzdHJ1Y3Qgd29ya19z dHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHZjNF9zZXFub19jYiAqY2IgPSBjb250YWluZXJfb2Yo d29yaywgc3RydWN0IHZjNF9zZXFub19jYiwgd29yayk7CisKKwljYi0+ZnVuYyhjYik7Cit9CisK K2ludCB2YzRfcXVldWVfc2Vxbm9fY2Ioc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJICAgICAg IHN0cnVjdCB2YzRfc2Vxbm9fY2IgKmNiLCB1aW50NjRfdCBzZXFubywKKwkJICAgICAgIHZvaWQg KCpmdW5jKShzdHJ1Y3QgdmM0X3NlcW5vX2NiICpjYikpCit7CisJc3RydWN0IHZjNF9kZXYgKnZj NCA9IHRvX3ZjNF9kZXYoZGV2KTsKKwlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nIGlycWZs YWdzOworCisJY2ItPmZ1bmMgPSBmdW5jOworCUlOSVRfV09SSygmY2ItPndvcmssIHZjNF9zZXFu b19jYl93b3JrKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ2YzQtPmpvYl9sb2NrLCBpcnFmbGFn cyk7CisJaWYgKHNlcW5vID4gdmM0LT5maW5pc2hlZF9zZXFubykgeworCQljYi0+c2Vxbm8gPSBz ZXFubzsKKwkJbGlzdF9hZGRfdGFpbCgmY2ItPndvcmsuZW50cnksICZ2YzQtPnNlcW5vX2NiX2xp c3QpOworCX0gZWxzZSB7CisJCXNjaGVkdWxlX3dvcmsoJmNiLT53b3JrKTsKKwl9CiAJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmdmM0LT5qb2JfbG9jaywgaXJxZmxhZ3MpOworCisJcmV0dXJuIHJl dDsKIH0KIAogLyogU2NoZWR1bGVkIHdoZW4gYW55IGpvYiBoYXMgYmVlbiBjb21wbGV0ZWQsIHRo aXMgd2Fsa3MgdGhlIGxpc3Qgb2YKQEAgLTYxMCw2ICs2NDksNyBAQCB2YzRfZ2VtX2luaXQoc3Ry dWN0IGRybV9kZXZpY2UgKmRldikKIAogCUlOSVRfTElTVF9IRUFEKCZ2YzQtPmpvYl9saXN0KTsK IAlJTklUX0xJU1RfSEVBRCgmdmM0LT5qb2JfZG9uZV9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgm dmM0LT5zZXFub19jYl9saXN0KTsKIAlzcGluX2xvY2tfaW5pdCgmdmM0LT5qb2JfbG9jayk7CiAK IAlJTklUX1dPUksoJnZjNC0+aGFuZ2NoZWNrLnJlc2V0X3dvcmssIHZjNF9yZXNldF93b3JrKTsK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2ttcy5jIGIvZHJpdmVycy9ncHUv ZHJtL3ZjNC92YzRfa21zLmMKaW5kZXggMmU1NTk3ZC4uZjk1ZjJkZiAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL3ZjNC92YzRfa21zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRf a21zLmMKQEAgLTE1LDYgKzE1LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiZHJtX2NydGMuaCIKKyNp bmNsdWRlICJkcm1fYXRvbWljLmgiCiAjaW5jbHVkZSAiZHJtX2F0b21pY19oZWxwZXIuaCIKICNp bmNsdWRlICJkcm1fY3J0Y19oZWxwZXIuaCIKICNpbmNsdWRlICJkcm1fcGxhbmVfaGVscGVyLmgi CkBAIC0yOSwxMCArMzAsMTUyIEBAIHN0YXRpYyB2b2lkIHZjNF9vdXRwdXRfcG9sbF9jaGFuZ2Vk KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiAJCWRybV9mYmRldl9jbWFfaG90cGx1Z19ldmVudCh2 YzQtPmZiZGV2KTsKIH0KIAorc3RydWN0IHZjNF9jb21taXQgeworCXN0cnVjdCBkcm1fZGV2aWNl ICpkZXY7CisJc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlOworCXN0cnVjdCB2YzRfc2Vx bm9fY2IgY2I7Cit9OworCitzdGF0aWMgdm9pZAordmM0X2F0b21pY19jb21wbGV0ZV9jb21taXQo c3RydWN0IHZjNF9jb21taXQgKmMpCit7CisJc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRl ID0gYy0+c3RhdGU7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHN0YXRlLT5kZXY7CisJc3Ry dWN0IHZjNF9kZXYgKnZjNCA9IHRvX3ZjNF9kZXYoZGV2KTsKKworCWRybV9hdG9taWNfaGVscGVy X2NvbW1pdF9tb2Rlc2V0X2Rpc2FibGVzKGRldiwgc3RhdGUpOworCisJZHJtX2F0b21pY19oZWxw ZXJfY29tbWl0X3BsYW5lcyhkZXYsIHN0YXRlLCBmYWxzZSk7CisKKwlkcm1fYXRvbWljX2hlbHBl cl9jb21taXRfbW9kZXNldF9lbmFibGVzKGRldiwgc3RhdGUpOworCisJZHJtX2F0b21pY19oZWxw ZXJfd2FpdF9mb3JfdmJsYW5rcyhkZXYsIHN0YXRlKTsKKworCWRybV9hdG9taWNfaGVscGVyX2Ns ZWFudXBfcGxhbmVzKGRldiwgc3RhdGUpOworCisJZHJtX2F0b21pY19zdGF0ZV9mcmVlKHN0YXRl KTsKKworCXVwKCZ2YzQtPmFzeW5jX21vZGVzZXQpOworCisJa2ZyZWUoYyk7Cit9CisKK3N0YXRp YyB2b2lkCit2YzRfYXRvbWljX2NvbXBsZXRlX2NvbW1pdF9zZXFub19jYihzdHJ1Y3QgdmM0X3Nl cW5vX2NiICpjYikKK3sKKwlzdHJ1Y3QgdmM0X2NvbW1pdCAqYyA9IGNvbnRhaW5lcl9vZihjYiwg c3RydWN0IHZjNF9jb21taXQsIGNiKTsKKworCXZjNF9hdG9taWNfY29tcGxldGVfY29tbWl0KGMp OworfQorCitzdGF0aWMgc3RydWN0IHZjNF9jb21taXQgKmNvbW1pdF9pbml0KHN0cnVjdCBkcm1f YXRvbWljX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgdmM0X2NvbW1pdCAqYyA9IGt6YWxsb2Mo c2l6ZW9mKCpjKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWMpCisJCXJldHVybiBOVUxMOworCWMt PmRldiA9IHN0YXRlLT5kZXY7CisJYy0+c3RhdGUgPSBzdGF0ZTsKKworCXJldHVybiBjOworfQor CisvKioKKyAqIHZjNF9hdG9taWNfY29tbWl0IC0gY29tbWl0IHZhbGlkYXRlZCBzdGF0ZSBvYmpl Y3QKKyAqIEBkZXY6IERSTSBkZXZpY2UKKyAqIEBzdGF0ZTogdGhlIGRyaXZlciBzdGF0ZSBvYmpl Y3QKKyAqIEBhc3luYzogYXN5bmNocm9ub3VzIGNvbW1pdAorICoKKyAqIFRoaXMgZnVuY3Rpb24g Y29tbWl0cyBhIHdpdGggZHJtX2F0b21pY19oZWxwZXJfY2hlY2soKSBwcmUtdmFsaWRhdGVkIHN0 YXRlCisgKiBvYmplY3QuIFRoaXMgY2FuIHN0aWxsIGZhaWwgd2hlbiBlLmcuIHRoZSBmcmFtZWJ1 ZmZlciByZXNlcnZhdGlvbiBmYWlscy4gRm9yCisgKiBub3cgdGhpcyBkb2Vzbid0IGltcGxlbWVu dCBhc3luY2hyb25vdXMgY29tbWl0cy4KKyAqCisgKiBSRVRVUk5TCisgKiBaZXJvIGZvciBzdWNj ZXNzIG9yIC1lcnJuby4KKyAqLworc3RhdGljIGludCB2YzRfYXRvbWljX2NvbW1pdChzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LAorCQkJICAgICBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUs CisJCQkgICAgIGJvb2wgYXN5bmMpCit7CisJc3RydWN0IHZjNF9kZXYgKnZjNCA9IHRvX3ZjNF9k ZXYoZGV2KTsKKwlpbnQgcmV0OworCWludCBpOworCXVpbnQ2NF90IHdhaXRfc2Vxbm8gPSAwOwor CXN0cnVjdCB2YzRfY29tbWl0ICpjOworCisJYyA9IGNvbW1pdF9pbml0KHN0YXRlKTsKKwlpZiAo IWMpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogTWFrZSBzdXJlIHRoYXQgYW55IG91dHN0YW5k aW5nIG1vZGVzZXRzIGhhdmUgZmluaXNoZWQuICovCisJcmV0ID0gZG93bl9pbnRlcnJ1cHRpYmxl KCZ2YzQtPmFzeW5jX21vZGVzZXQpOworCWlmIChyZXQpIHsKKwkJa2ZyZWUoYyk7CisJCXJldHVy biByZXQ7CisJfQorCisJcmV0ID0gZHJtX2F0b21pY19oZWxwZXJfcHJlcGFyZV9wbGFuZXMoZGV2 LCBzdGF0ZSk7CisJaWYgKHJldCkgeworCQlrZnJlZShjKTsKKwkJdXAoJnZjNC0+YXN5bmNfbW9k ZXNldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGRldi0+bW9kZV9j b25maWcubnVtX3RvdGFsX3BsYW5lOyBpKyspIHsKKwkJc3RydWN0IGRybV9wbGFuZSAqcGxhbmUg PSBzdGF0ZS0+cGxhbmVzW2ldOworCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpuZXdfc3RhdGUg PSBzdGF0ZS0+cGxhbmVfc3RhdGVzW2ldOworCisJCWlmICghcGxhbmUpCisJCQljb250aW51ZTsK KworCQlpZiAoKHBsYW5lLT5zdGF0ZS0+ZmIgIT0gbmV3X3N0YXRlLT5mYikgJiYgbmV3X3N0YXRl LT5mYikgeworCQkJc3RydWN0IGRybV9nZW1fY21hX29iamVjdCAqY21hX2JvID0KKwkJCQlkcm1f ZmJfY21hX2dldF9nZW1fb2JqKG5ld19zdGF0ZS0+ZmIsIDApOworCQkJc3RydWN0IHZjNF9ibyAq Ym8gPSB0b192YzRfYm8oJmNtYV9iby0+YmFzZSk7CisKKwkJCXdhaXRfc2Vxbm8gPSBtYXgoYm8t PnNlcW5vLCB3YWl0X3NlcW5vKTsKKwkJfQorCX0KKworCS8qCisJICogVGhpcyBpcyB0aGUgcG9p bnQgb2Ygbm8gcmV0dXJuIC0gZXZlcnl0aGluZyBiZWxvdyBuZXZlciBmYWlscyBleGNlcHQKKwkg KiB3aGVuIHRoZSBodyBnb2VzIGJvbmdoaXRzLiBXaGljaCBtZWFucyB3ZSBjYW4gY29tbWl0IHRo ZSBuZXcgc3RhdGUgb24KKwkgKiB0aGUgc29mdHdhcmUgc2lkZSBub3cuCisJICovCisKKwlkcm1f YXRvbWljX2hlbHBlcl9zd2FwX3N0YXRlKGRldiwgc3RhdGUpOworCisJLyoKKwkgKiBFdmVyeXRo aW5nIGJlbG93IGNhbiBiZSBydW4gYXN5bmNocm9ub3VzbHkgd2l0aG91dCB0aGUgbmVlZCB0byBn cmFiCisJICogYW55IG1vZGVzZXQgbG9ja3MgYXQgYWxsIHVuZGVyIG9uZSBjb25kaXRpb246IEl0 IG11c3QgYmUgZ3VhcmFudGVlZAorCSAqIHRoYXQgdGhlIGFzeW5jaHJvbm91cyB3b3JrIGhhcyBl aXRoZXIgYmVlbiBjYW5jZWxsZWQgKGlmIHRoZSBkcml2ZXIKKwkgKiBzdXBwb3J0cyBpdCwgd2hp Y2ggYXQgbGVhc3QgcmVxdWlyZXMgdGhhdCB0aGUgZnJhbWVidWZmZXJzIGdldAorCSAqIGNsZWFu ZWQgdXAgd2l0aCBkcm1fYXRvbWljX2hlbHBlcl9jbGVhbnVwX3BsYW5lcygpKSBvciBjb21wbGV0 ZWQKKwkgKiBiZWZvcmUgdGhlIG5ldyBzdGF0ZSBnZXRzIGNvbW1pdHRlZCBvbiB0aGUgc29mdHdh cmUgc2lkZSB3aXRoCisJICogZHJtX2F0b21pY19oZWxwZXJfc3dhcF9zdGF0ZSgpLgorCSAqCisJ ICogVGhpcyBzY2hlbWUgYWxsb3dzIG5ldyBhdG9taWMgc3RhdGUgdXBkYXRlcyB0byBiZSBwcmVw YXJlZCBhbmQKKwkgKiBjaGVja2VkIGluIHBhcmFsbGVsIHRvIHRoZSBhc3luY2hyb25vdXMgY29t cGxldGlvbiBvZiB0aGUgcHJldmlvdXMKKwkgKiB1cGRhdGUuIFdoaWNoIGlzIGltcG9ydGFudCBz aW5jZSBjb21wb3NpdG9ycyBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlCisJICogY29tcG9zaXRpb24g b2YgdGhlIG5leHQgZnJhbWUgcmlnaHQgYWZ0ZXIgaGF2aW5nIHN1Ym1pdHRlZCB0aGUKKwkgKiBj dXJyZW50IGxheW91dC4KKwkgKi8KKworCWlmIChhc3luYykgeworCQl2YzRfcXVldWVfc2Vxbm9f Y2IoZGV2LCAmYy0+Y2IsIHdhaXRfc2Vxbm8sCisJCQkJICAgdmM0X2F0b21pY19jb21wbGV0ZV9j b21taXRfc2Vxbm9fY2IpOworCX0gZWxzZSB7CisJCXZjNF93YWl0X2Zvcl9zZXFubyhkZXYsIHdh aXRfc2Vxbm8sIH4wdWxsLCBmYWxzZSk7CisJCXZjNF9hdG9taWNfY29tcGxldGVfY29tbWl0KGMp OworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9tb2RlX2Nv bmZpZ19mdW5jcyB2YzRfbW9kZV9mdW5jcyA9IHsKIAkub3V0cHV0X3BvbGxfY2hhbmdlZCA9IHZj NF9vdXRwdXRfcG9sbF9jaGFuZ2VkLAogCS5hdG9taWNfY2hlY2sgPSBkcm1fYXRvbWljX2hlbHBl cl9jaGVjaywKLQkuYXRvbWljX2NvbW1pdCA9IGRybV9hdG9taWNfaGVscGVyX2NvbW1pdCwKKwku YXRvbWljX2NvbW1pdCA9IHZjNF9hdG9taWNfY29tbWl0LAogCS5mYl9jcmVhdGUgPSBkcm1fZmJf Y21hX2NyZWF0ZSwKIH07CiAKQEAgLTQxLDYgKzE4NCw4IEBAIGludCB2YzRfa21zX2xvYWQoc3Ry dWN0IGRybV9kZXZpY2UgKmRldikKIAlzdHJ1Y3QgdmM0X2RldiAqdmM0ID0gdG9fdmM0X2Rldihk ZXYpOwogCWludCByZXQ7CiAKKwlzZW1hX2luaXQoJnZjNC0+YXN5bmNfbW9kZXNldCwgMSk7CisK IAlyZXQgPSBkcm1fdmJsYW5rX2luaXQoZGV2LCBkZXYtPm1vZGVfY29uZmlnLm51bV9jcnRjKTsK IAlpZiAocmV0IDwgMCkgewogCQlkZXZfZXJyKGRldi0+ZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxp emUgdmJsYW5rXG4iKTsKQEAgLTUxLDYgKzE5Niw4IEBAIGludCB2YzRfa21zX2xvYWQoc3RydWN0 IGRybV9kZXZpY2UgKmRldikKIAlkZXYtPm1vZGVfY29uZmlnLm1heF9oZWlnaHQgPSAyMDQ4Owog CWRldi0+bW9kZV9jb25maWcuZnVuY3MgPSAmdmM0X21vZGVfZnVuY3M7CiAJZGV2LT5tb2RlX2Nv bmZpZy5wcmVmZXJyZWRfZGVwdGggPSAyNDsKKwlkZXYtPm1vZGVfY29uZmlnLmFzeW5jX3BhZ2Vf ZmxpcCA9IHRydWU7CisKIAlkZXYtPnZibGFua19kaXNhYmxlX2FsbG93ZWQgPSB0cnVlOwogCiAJ ZHJtX21vZGVfY29uZmlnX3Jlc2V0KGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v dmM0L3ZjNF9wbGFuZS5jIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfcGxhbmUuYwppbmRleCBj ZGQ4YjEwLi5kYjMyYzM3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfcGxh bmUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9wbGFuZS5jCkBAIC0yOSw2ICsyOSwx NCBAQCBzdHJ1Y3QgdmM0X3BsYW5lX3N0YXRlIHsKIAl1MzIgKmRsaXN0OwogCXUzMiBkbGlzdF9z aXplOyAvKiBOdW1iZXIgb2YgZHdvcmRzIGluIGFsbG9jYXRlZCBmb3IgdGhlIGRpc3BsYXkgbGlz dCAqLwogCXUzMiBkbGlzdF9jb3VudDsgLyogTnVtYmVyIG9mIHVzZWQgZHdvcmRzIGluIHRoZSBk aXNwbGF5IGxpc3QuICovCisKKwkvKiBPZmZzZXQgaW4gdGhlIGRsaXN0IHRvIHBvaW50ZXIgd29y ZCAwLiAqLworCXUzMiBwdzBfb2Zmc2V0OworCisJLyogT2Zmc2V0IHdoZXJlIHRoZSBwbGFuZSdz IGRsaXN0IHdhcyBsYXN0IHN0b3JlZCBpbiB0aGUKKwkgICBoYXJkd2FyZSBhdCB2YzRfY3J0Y19h dG9taWNfZmx1c2goKSB0aW1lLgorCSovCisJdTMyICpod19kbGlzdDsKIH07CiAKIHN0YXRpYyBp bmxpbmUgc3RydWN0IHZjNF9wbGFuZV9zdGF0ZSAqCkBAIC0xOTcsNiArMjA1LDggQEAgc3RhdGlj IGludCB2YzRfcGxhbmVfbW9kZV9zZXQoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJLyogUG9z aXRpb24gV29yZCAzOiBDb250ZXh0LiAgV3JpdHRlbiBieSB0aGUgSFZTLiAqLwogCXZjNF9kbGlz dF93cml0ZSh2YzRfc3RhdGUsIDB4YzBjMGMwYzApOwogCisJdmM0X3N0YXRlLT5wdzBfb2Zmc2V0 ID0gdmM0X3N0YXRlLT5kbGlzdF9jb3VudDsKKwogCS8qIFBvaW50ZXIgV29yZCAwOiBSR0IgLyBZ IFBvaW50ZXIgKi8KIAl2YzRfZGxpc3Rfd3JpdGUodmM0X3N0YXRlLCBiby0+cGFkZHIgKyBvZmZz ZXQpOwogCkBAIC0yNDgsNiArMjU4LDggQEAgdTMyIHZjNF9wbGFuZV93cml0ZV9kbGlzdChzdHJ1 Y3QgZHJtX3BsYW5lICpwbGFuZSwgdTMyIF9faW9tZW0gKmRsaXN0KQogCXN0cnVjdCB2YzRfcGxh bmVfc3RhdGUgKnZjNF9zdGF0ZSA9IHRvX3ZjNF9wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUpOwog CWludCBpOwogCisJdmM0X3N0YXRlLT5od19kbGlzdCA9IGRsaXN0OworCiAJLyogQ2FuJ3QgbWVt Y3B5X3RvaW8oKSBiZWNhdXNlIGl0IG5lZWRzIHRvIGJlIDMyLWJpdCB3cml0ZXMuICovCiAJZm9y IChpID0gMDsgaSA8IHZjNF9zdGF0ZS0+ZGxpc3RfY291bnQ7IGkrKykKIAkJd3JpdGVsKHZjNF9z dGF0ZS0+ZGxpc3RbaV0sICZkbGlzdFtpXSk7CkBAIC0yNjIsNiArMjc0LDM0IEBAIHUzMiB2YzRf cGxhbmVfZGxpc3Rfc2l6ZShzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKIAlyZXR1cm4g dmM0X3N0YXRlLT5kbGlzdF9jb3VudDsKIH0KIAorLyogVXBkYXRlcyB0aGUgcGxhbmUgdG8gaW1t ZWRpYXRlbHkgKHdlbGwsIG9uY2UgdGhlIEZJRk8gbmVlZHMKKyAqIHJlZmlsbGluZykgc2NhbiBv dXQgZnJvbSBhdCBhIG5ldyBmcmFtZWJ1ZmZlci4KKyAqLwordm9pZCB2YzRfcGxhbmVfYXN5bmNf c2V0X2ZiKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpm YikKK3sKKwlzdHJ1Y3QgdmM0X3BsYW5lX3N0YXRlICp2YzRfc3RhdGUgPSB0b192YzRfcGxhbmVf c3RhdGUocGxhbmUtPnN0YXRlKTsKKwlzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICpibyA9IGRy bV9mYl9jbWFfZ2V0X2dlbV9vYmooZmIsIDApOworCXVpbnQzMl90IGFkZHI7CisKKwkvKiBXZSdy ZSBza2lwcGluZyB0aGUgYWRkcmVzcyBhZGp1c3RtZW50IGZvciBuZWdhdGl2ZSBvcmlnaW4sCisJ ICogYmVjYXVzZSB0aGlzIGlzIG9ubHkgY2FsbGVkIG9uIHRoZSBwcmltYXJ5IHBsYW5lLgorCSAq LworCVdBUk5fT05fT05DRShwbGFuZS0+c3RhdGUtPmNydGNfeCA8IDAgfHwgcGxhbmUtPnN0YXRl LT5jcnRjX3kgPCAwKTsKKwlhZGRyID0gYm8tPnBhZGRyICsgZmItPm9mZnNldHNbMF07CisKKwkv KiBXcml0ZSB0aGUgbmV3IGFkZHJlc3MgaW50byB0aGUgaGFyZHdhcmUgaW1tZWRpYXRlbHkuICBU aGUKKwkgKiBzY2Fub3V0IHdpbGwgc3RhcnQgZnJvbSB0aGlzIGFkZHJlc3MgYXMgc29vbiBhcyB0 aGUgRklGTworCSAqIG5lZWRzIHRvIHJlZmlsbCB3aXRoIHBpeGVscy4KKwkgKi8KKwl3cml0ZWwo YWRkciwgJnZjNF9zdGF0ZS0+aHdfZGxpc3RbdmM0X3N0YXRlLT5wdzBfb2Zmc2V0XSk7CisKKwkv KiBBbHNvIHVwZGF0ZSB0aGUgQ1BVLXNpZGUgZGxpc3QgY29weSwgc28gdGhhdCBhbnkgbGF0ZXIK KwkgKiBhdG9taWMgdXBkYXRlcyB0aGF0IGRvbid0IGRvIGEgbmV3IG1vZGVzZXQgb24gb3VyIHBs YW5lCisJICogYWxzbyB1c2Ugb3VyIHVwZGF0ZWQgYWRkcmVzcy4KKwkgKi8KKwl2YzRfc3RhdGUt PmRsaXN0W3ZjNF9zdGF0ZS0+cHcwX29mZnNldF0gPSBhZGRyOworfQorCiBzdGF0aWMgY29uc3Qg c3RydWN0IGRybV9wbGFuZV9oZWxwZXJfZnVuY3MgdmM0X3BsYW5lX2hlbHBlcl9mdW5jcyA9IHsK IAkucHJlcGFyZV9mYiA9IE5VTEwsCiAJLmNsZWFudXBfZmIgPSBOVUxMLAotLSAKMi42LjIKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBt YWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==