From mboxrd@z Thu Jan 1 00:00:00 1970 From: saeed bishara Subject: Re: [PATCH] MMC: add support for the Marvell platform SDHCI controller Date: Tue, 25 May 2010 10:21:41 +0300 Message-ID: References: <1272990283-18699-1-git-send-email-saeed@marvell.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=00163646cf3a421b9b04876602b1 Return-path: Received: from mail-wy0-f174.google.com ([74.125.82.174]:40221 "EHLO mail-wy0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752834Ab0EYHVm (ORCPT ); Tue, 25 May 2010 03:21:42 -0400 Received: by wyb29 with SMTP id 29so2116588wyb.19 for ; Tue, 25 May 2010 00:21:41 -0700 (PDT) In-Reply-To: Sender: linux-mmc-owner@vger.kernel.org List-Id: linux-mmc@vger.kernel.org To: linux-mmc@vger.kernel.org Cc: Saeed Bishara --00163646cf3a421b9b04876602b1 Content-Type: text/plain; charset=UTF-8 guys, any comments for the attached patch? saeed --00163646cf3a421b9b04876602b1 Content-Type: application/octet-stream; name="0001-MMC-add-support-for-the-Marvell-platform-SDHCI-cont.patch" Content-Disposition: attachment; filename="0001-MMC-add-support-for-the-Marvell-platform-SDHCI-cont.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g8u721fh0 RnJvbSA0ZDhhYmVjNDQyZDk0ODk1ZDNkMmM3ZDdmOWQ1OWM1ZTE5ZDM3OWIyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTYWVlZCBCaXNoYXJhIDxzYWVlZEBtYXJ2ZWxsLmNvbT4KRGF0 ZTogVHVlLCA0IE1heSAyMDEwIDE5OjEzOjI0ICswMzAwClN1YmplY3Q6IFtQQVRDSHYyXSBNTUM6 IGFkZCBzdXBwb3J0IGZvciB0aGUgTWFydmVsbCBwbGF0Zm9ybSBTREhDSSBjb250cm9sbGVyCgpU aGlzIHBhdGNoIGltcGxlbWVudHMgdGhlIGRyaXZlciBmb3IgdGhlIHBsYXRmcm9tIFNESENJIGNv bnRyb2xsZXJzIHRoYXQgZm91bmQgb24gc29tZSBvZiBNYXJ2ZWxsJ3MgU29DJ3MuCgpTaWduZWQt b2ZmLWJ5OiBTYWVlZCBCaXNoYXJhIDxzYWVlZEBtYXJ2ZWxsLmNvbT4KLS0tCiBkcml2ZXJzL21t Yy9ob3N0L0tjb25maWcgICAgfCAgIDEyICsrCiBkcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlICAg fCAgICAxICsKIGRyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktbXYuYyB8ICAyNDMgKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCAyNTYgaW5z ZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21t Yy9ob3N0L3NkaGNpLW12LmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L0tjb25maWcg Yi9kcml2ZXJzL21tYy9ob3N0L0tjb25maWcKaW5kZXggMmUxM2I5NC4uZDEzMjI1NiAxMDA2NDQK LS0tIGEvZHJpdmVycy9tbWMvaG9zdC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvS2Nv bmZpZwpAQCAtMTQ2LDYgKzE0NiwxOCBAQCBjb25maWcgTU1DX1NESENJX1MzQ19ETUEKIAogCSAg WU1NVi4KIAorY29uZmlnIE1NQ19TREhDSV9NVgorCXRyaXN0YXRlICJTREhDSSBzdXBwb3J0IG9u IE1hcnZlbGwncyBzb2MiCisJZGVwZW5kcyBvbiBNTUNfU0RIQ0kKKwlzZWxlY3QgTU1DX1NESENJ X0lPX0FDQ0VTU09SUworCWhlbHAKKwkgIFRoaXMgc2VsZWN0cyB0aGUgU2VjdXJlIERpZ2l0YWwg SG9zdCBDb250cm9sbGVyIEludGVyZmFjZSBpbgorCSAgTWFydmVsbCdzIFNvQyBjb250cm9sbGVy cy4KKworCSAgSWYgeW91IGhhdmUgYSBjb250cm9sbGVyIHdpdGggdGhpcyBpbnRlcmZhY2UsIHNh eSBZIG9yIE0gaGVyZS4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKwogY29uZmlnIE1NQ19PTUFQ CiAJdHJpc3RhdGUgIlRJIE9NQVAgTXVsdGltZWRpYSBDYXJkIEludGVyZmFjZSBzdXBwb3J0Igog CWRlcGVuZHMgb24gQVJDSF9PTUFQCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L01ha2Vm aWxlIGIvZHJpdmVycy9tbWMvaG9zdC9NYWtlZmlsZQppbmRleCBmNDgwMzk3Li4zYTU1MTlhIDEw MDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbW1jL2hv c3QvTWFrZWZpbGUKQEAgLTE0LDYgKzE0LDcgQEAgb2JqLSQoQ09ORklHX01NQ19TREhDSSkJCSs9 IHNkaGNpLm8KIG9iai0kKENPTkZJR19NTUNfU0RIQ0lfUENJKQkrPSBzZGhjaS1wY2kubwogb2Jq LSQoQ09ORklHX01NQ19TREhDSV9QTFRGTSkJKz0gc2RoY2ktcGx0Zm0ubwogb2JqLSQoQ09ORklH X01NQ19TREhDSV9TM0MpCSs9IHNkaGNpLXMzYy5vCitvYmotJChDT05GSUdfTU1DX1NESENJX01W KQkrPSBzZGhjaS1tdi5vCiBvYmotJChDT05GSUdfTU1DX1dCU0QpCQkrPSB3YnNkLm8KIG9iai0k KENPTkZJR19NTUNfQVUxWCkJCSs9IGF1MXhtbWMubwogb2JqLSQoQ09ORklHX01NQ19PTUFQKQkJ Kz0gb21hcC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLW12LmMgYi9kcml2 ZXJzL21tYy9ob3N0L3NkaGNpLW12LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uOTNhZGYyYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktbXYu YwpAQCAtMCwwICsxLDI0MyBAQAorLyoKKyAqIHNkaGNpLW12LmMgU3VwcG9ydCBmb3IgU0RIQ0kg cGxhdGZvcm0gZGV2aWNlcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlm IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3 NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKy8qIFN1cHBvcnRz OgorICogU0RIQ0kgcGxhdGZvcm0gZGV2aWNlcyBmb3VuZCBvbiBNYXJ2ZWxsIFNvQydzCisgKgor ICogQmFzZWQgb24gIHNkaGNpLXBsdGZtLmMKKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+ CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNs dWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2lu Y2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CisjaW5jbHVkZSAic2RoY2kuaCIKKworc3RydWN0IHNk aGNpX212X2hvc3QgeworI2lmIGRlZmluZWQoQ09ORklHX0hBVkVfQ0xLKQorCXN0cnVjdCBjbGsJ CSpjbGs7CisjZW5kaWYKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKKyAqICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKgorICogU0RIQ0kgY29yZSBjYWxsYmFja3MgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoK K1wqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB1MTYgbXZfcmVhZHcoc3RydWN0IHNkaGNp X2hvc3QgKmhvc3QsIGludCByZWcpCit7CisJdTE2IHJldDsKKworCXN3aXRjaCAocmVnKSB7CisJ Y2FzZSBTREhDSV9IT1NUX1ZFUlNJT046CisJY2FzZSBTREhDSV9TTE9UX0lOVF9TVEFUVVM6CisJ CS8qIHRob3NlIHJlZ2lzdGVycyBkb24ndCBleGlzdCAqLworCQlyZXR1cm4gMDsKKwlkZWZhdWx0 OgorCQlyZXQgPSByZWFkdyhob3N0LT5pb2FkZHIgKyByZWcpOworCX0KKwlyZXR1cm4gcmV0Owor fQorCitzdGF0aWMgdTMyIG12X3JlYWRsKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCBpbnQgcmVn KQoreworCXUzMiByZXQ7CisKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgU0RIQ0lfQ0FQQUJJTElU SUVTOgorCQlyZXQgPSByZWFkbChob3N0LT5pb2FkZHIgKyByZWcpOworCQkvKiBNYXNrIHRoZSBz dXBwb3J0IGZvciAzLjBWICovCisJCXJldCAmPSB+U0RIQ0lfQ0FOX1ZERF8zMDA7CisJCWJyZWFr OworCWRlZmF1bHQ6CisJCXJldCA9IHJlYWRsKGhvc3QtPmlvYWRkciArIHJlZyk7CisJfQorCXJl dHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2RoY2lfb3BzIHNkaGNpX212X29wcyA9IHsK KwkucmVhZF93ID0gbXZfcmVhZHcsCisJLnJlYWRfbCA9IG12X3JlYWRsLAorfTsKKworLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqXAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBEZXZpY2UgcHJvYmlu Zy9yZW1vdmFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorXCoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitz dGF0aWMgaW50IF9fZGV2aW5pdCBzZGhjaV9tdl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2KQoreworCXN0cnVjdCBzZGhjaV9ob3N0ICpob3N0OworCXN0cnVjdCBzZGhjaV9tdl9o b3N0ICptdl9ob3N0OworCXN0cnVjdCByZXNvdXJjZSAqaW9tZW07CisJaW50IHJldDsKKworCUJV R19PTihwZGV2ID09IE5VTEwpOworCisJaW9tZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRl diwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghaW9tZW0pIHsKKwkJcmV0ID0gLUVOT01FTTsK KwkJZ290byBlcnI7CisJfQorCisJaWYgKHJlc291cmNlX3NpemUoaW9tZW0pICE9IDB4MTAwKQor CQlkZXZfZXJyKCZwZGV2LT5kZXYsICJJbnZhbGlkIGlvbWVtIHNpemUuIFlvdSBtYXkgIgorCQkJ ImV4cGVyaWVuY2UgcHJvYmxlbXMuXG4iKTsKKworCWlmIChwZGV2LT5kZXYucGFyZW50KQorCQlo b3N0ID0gc2RoY2lfYWxsb2NfaG9zdChwZGV2LT5kZXYucGFyZW50LCBzaXplb2YoKm12X2hvc3Qp KTsKKwllbHNlCisJCWhvc3QgPSBzZGhjaV9hbGxvY19ob3N0KCZwZGV2LT5kZXYsIHNpemVvZigq bXZfaG9zdCkpOworCisJaWYgKElTX0VSUihob3N0KSkgeworCQlyZXQgPSBQVFJfRVJSKGhvc3Qp OworCQlnb3RvIGVycjsKKwl9CisKKwltdl9ob3N0ID0gc2RoY2lfcHJpdihob3N0KTsKKwlob3N0 LT5od19uYW1lID0gIm1hcnZlbGwtc2RoY2kiOworCWhvc3QtPm9wcyA9ICZzZGhjaV9tdl9vcHM7 CisJaG9zdC0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlob3N0LT5xdWlya3Mg PSAgU0RIQ0lfUVVJUktfTk9fU0lNVUxUX1ZERF9BTkRfUE9XRVIgfAorCQkJU0RIQ0lfUVVJUktf Tk9fQlVTWV9JUlEgfAorCQkJU0RIQ0lfUVVJUktfQlJPS0VOX1RJTUVPVVRfVkFMIHwKKwkJCVNE SENJX1FVSVJLX0ZPUkNFX0RNQTsKKworCWlmICghZGV2bV9yZXF1ZXN0X21lbV9yZWdpb24oJnBk ZXYtPmRldiwgaW9tZW0tPnN0YXJ0LAorCQkJCSAgICAgcmVzb3VyY2Vfc2l6ZShpb21lbSksCisJ CQkJICAgICBtbWNfaG9zdG5hbWUoaG9zdC0+bW1jKSkpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2 LCAiY2Fubm90IHJlcXVlc3QgcmVnaW9uXG4iKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGVy cl9yZXF1ZXN0OworCX0KKworCWhvc3QtPmlvYWRkciA9IGRldm1faW9yZW1hcCgmcGRldi0+ZGV2 LCBpb21lbS0+c3RhcnQsCisJCQkJICAgIHJlc291cmNlX3NpemUoaW9tZW0pKTsKKwlpZiAoIWhv c3QtPmlvYWRkcikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVtYXAgcmVn aXN0ZXJzXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfcmVxdWVzdDsKKwl9CisK KyNpZiBkZWZpbmVkKENPTkZJR19IQVZFX0NMSykKKwltdl9ob3N0LT5jbGsgPSBjbGtfZ2V0KCZw ZGV2LT5kZXYsIE5VTEwpOworCWlmIChJU19FUlIobXZfaG9zdC0+Y2xrKSkKKwkJZGV2X25vdGlj ZSgmcGRldi0+ZGV2LCAiY2Fubm90IGdldCBjbGtkZXZcbiIpOworCWVsc2UKKwkJY2xrX2VuYWJs ZShtdl9ob3N0LT5jbGspOworI2VuZGlmCisKKwlyZXQgPSBzZGhjaV9hZGRfaG9zdChob3N0KTsK KwlpZiAocmV0KQorCQlnb3RvIGVycl9yZXF1ZXN0OworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEo cGRldiwgaG9zdCk7CisKKwlyZXR1cm4gMDsKKworZXJyX3JlcXVlc3Q6CisJc2RoY2lfZnJlZV9o b3N0KGhvc3QpOworZXJyOgorCXByaW50ayhLRVJOX0VSUiJQcm9iaW5nIG9mIHNkaGNpLW12IGZh aWxlZDogJWRcbiIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4 aXQgc2RoY2lfbXZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3Ry dWN0IHNkaGNpX2hvc3QgKmhvc3QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKyNpZiBk ZWZpbmVkKENPTkZJR19IQVZFX0NMSykKKwlzdHJ1Y3Qgc2RoY2lfbXZfaG9zdCAqbXZfaG9zdCA9 IHNkaGNpX3ByaXYoaG9zdCk7CisJc3RydWN0IGNsayAqY2xrID0gbXZfaG9zdC0+Y2xrOworI2Vu ZGlmCisJaW50IGRlYWQ7CisJdTMyIHNjcmF0Y2g7CisKKwlkZWFkID0gMDsKKwlzY3JhdGNoID0g cmVhZGwoaG9zdC0+aW9hZGRyICsgU0RIQ0lfSU5UX1NUQVRVUyk7CisJaWYgKHNjcmF0Y2ggPT0g KHUzMiktMSkKKwkJZGVhZCA9IDE7CisKKwlzZGhjaV9yZW1vdmVfaG9zdChob3N0LCBkZWFkKTsK KwlzZGhjaV9mcmVlX2hvc3QoaG9zdCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVM TCk7CisjaWYgZGVmaW5lZChDT05GSUdfSEFWRV9DTEspCisJaWYgKCFJU19FUlIoY2xrKSkgewor CQljbGtfZGlzYWJsZShjbGspOworCQljbGtfcHV0KGNsayk7CisJfQorI2VuZGlmCisKKwlyZXR1 cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBzZGhjaV9tdl9zdXNwZW5k KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlz dHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKwor CXJldHVybiBzZGhjaV9zdXNwZW5kX2hvc3QoaG9zdCwgc3RhdGUpOworfQorCitzdGF0aWMgaW50 IHNkaGNpX212X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVj dCBzZGhjaV9ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCisJcmV0 dXJuIHNkaGNpX3Jlc3VtZV9ob3N0KGhvc3QpOworfQorI2Vsc2UKKyNkZWZpbmUgc2RoY2lfbXZf c3VzcGVuZCBOVUxMCisjZGVmaW5lIHNkaGNpX212X3Jlc3VtZSBOVUxMCisjZW5kaWYKKworc3Rh dGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2RoY2lfbXZfZHJpdmVyID0geworCS5kcml2ZXIg PSB7CisJCS5uYW1lCT0gInNkaGNpLW12IiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwK KwkucHJvYmUJCT0gc2RoY2lfbXZfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzZGhj aV9tdl9yZW1vdmUpLAorCS5zdXNwZW5kCT0gc2RoY2lfbXZfc3VzcGVuZCwKKwkucmVzdW1lCQk9 IHNkaGNpX212X3Jlc3VtZSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKKyAqICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKgorICogRHJpdmVyIGluaXQvZXhpdCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICoKK1wqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBfX2luaXQgc2RoY2lfbXZf aW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNkaGNpX212 X2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzZGhjaV9tdl9leGl0KHZvaWQpCit7 CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNkaGNpX212X2RyaXZlcik7Cit9CisKK21v ZHVsZV9pbml0KHNkaGNpX212X2luaXQpOworbW9kdWxlX2V4aXQoc2RoY2lfbXZfZXhpdCk7CisK K01PRFVMRV9ERVNDUklQVElPTigiTWFydmVsbCBTREhDSSBwbGF0Zm9ybSBkcml2ZXIiKTsKK01P RFVMRV9BVVRIT1IoIlNhZWVkIEJpc2hhcmEgPHNhZWVkQG1hcnZlbGwuY29tPiIpOworTU9EVUxF X0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpzZGhjaS1tdiIpOwor Ci0tIAoxLjYuMC40Cgo= --00163646cf3a421b9b04876602b1--