From mboxrd@z Thu Jan 1 00:00:00 1970 From: robert.foss@collabora.com Subject: [PATCH i-g-t v6 01/21] lib/sw_sync: Add helper functions for managing synchronization primitives Date: Fri, 18 Nov 2016 09:59:55 -0500 Message-ID: <20161118150015.10745-2-robert.foss@collabora.com> References: <20161118150015.10745-1-robert.foss@collabora.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from bhuna.collabora.co.uk (bhuna.collabora.co.uk [46.235.227.227]) by gabe.freedesktop.org (Postfix) with ESMTPS id A932C6E9D4 for ; Fri, 18 Nov 2016 15:00:24 +0000 (UTC) In-Reply-To: <20161118150015.10745-1-robert.foss@collabora.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org, Gustavo Padovan , Daniel Stone , Daniel Vetter , Marius Vlad , Eric Engestrom , Chris Wilson , Tomeu Vizoso Cc: Gustavo Padovan List-Id: intel-gfx@lists.freedesktop.org RnJvbTogUm9iZXJ0IEZvc3MgPHJvYmVydC5mb3NzQGNvbGxhYm9yYS5jb20+CgpCYXNlIGZ1bmN0 aW9ucyB0byBoZWxwIHRlc3RpbmcgdGhlIFN5bmMgRmlsZSBGcmFtZXdvcmsgKGV4cGxpY2l0IGZl bmNpbmcKbWVjaGFuaXNtIHBvcnRlZCBmcm9tIEFuZHJvaWQpLgpUaGVzZSBmdW5jdGlvbnMgYWxs b3cgeW91IHRvIGNyZWF0ZSwgdXNlIGFuZCBkZXN0cm95IHRpbWVsaW5lcyBhbmQgZmVuY2VzLgoK U2lnbmVkLW9mZi1ieTogUm9iZXJ0IEZvc3MgPHJvYmVydC5mb3NzQGNvbGxhYm9yYS5jb20+ClNp Z25lZC1vZmYtYnk6IEd1c3Rhdm8gUGFkb3ZhbiA8Z3VzdGF2by5wYWRvdmFuQGNvbGxhYm9yYS5j by51az4KUmV2aWV3ZWQtYnk6IEVyaWMgRW5nZXN0cm9tIDxlcmljQGVuZ2VzdHJvbS5jaD4KLS0t CiBsaWIvTWFrZWZpbGUuc291cmNlcyB8ICAgMiArCiBsaWIvc3dfc3luYy5jICAgICAgICB8IDE5 OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGxp Yi9zd19zeW5jLmggICAgICAgIHwgIDQ4ICsrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwg MjQ5IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvc3dfc3luYy5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgbGliL3N3X3N5bmMuaAoKZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZS5z b3VyY2VzIGIvbGliL01ha2VmaWxlLnNvdXJjZXMKaW5kZXggZThlMjc3Yi4uN2FhZjQyZiAxMDA2 NDQKLS0tIGEvbGliL01ha2VmaWxlLnNvdXJjZXMKKysrIGIvbGliL01ha2VmaWxlLnNvdXJjZXMK QEAgLTYzLDYgKzYzLDggQEAgbGliX3NvdXJjZV9saXN0ID0JIAlcCiAJcmVuZGVyY29weV9nZW44 LmMJXAogCXJlbmRlcmNvcHlfZ2VuOS5jCVwKIAlyZW5kZXJjb3B5LmgJCVwKKwlzd19zeW5jLmMJ CVwKKwlzd19zeW5jLmgJCVwKIAlpbnRlbF9yZWdfbWFwLmMJCVwKIAlpbnRlbF9pb3NmLmMJCVwK IAlpZ3Rfa21zLmMJCVwKZGlmZiAtLWdpdCBhL2xpYi9zd19zeW5jLmMgYi9saWIvc3dfc3luYy5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MTExOWUKLS0tIC9kZXYvbnVs bAorKysgYi9saWIvc3dfc3luYy5jCkBAIC0wLDAgKzEsMTk5IEBACisvKgorICogQ29weXJpZ2h0 IDIwMTIgR29vZ2xlLCBJbmMKKyAqIENvcHlyaWdodCDCqSAyMDE2IENvbGxhYm9yYSwgTHRkLgor ICoKKyAqIEJhc2VkIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBBbmRyb2lkIE9wZW4g U291cmNlIFByb2plY3QKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVl IG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNv ZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUi KSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1 ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2Rp ZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNl bGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20g dGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZv bGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFu ZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFw aCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9u cyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAi QVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBM SUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05J TkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJ R0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAq IExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RI RVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRI RSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdB UkUuCisgKgorICogQXV0aG9yczoKKyAqICAgIFJvYmVydCBGb3NzIDxyb2JlcnQuZm9zc0Bjb2xs YWJvcmEuY29tPgorICovCisKKyNpZm5kZWYgQU5EUk9JRAorI2RlZmluZSBfR05VX1NPVVJDRQor I2Vsc2UKKyNpbmNsdWRlIDxsaWJnZW4uaD4KKyNlbmRpZgorI2luY2x1ZGUgPGZjbnRsLmg+Cisj aW5jbHVkZSA8cG9sbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5 bmNfZmlsZS5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorCisjaW5jbHVkZSAic3dfc3luYy5o IgorI2luY2x1ZGUgImRybXRlc3QuaCIKKyNpbmNsdWRlICJpb2N0bF93cmFwcGVycy5oIgorCisj aWZuZGVmIFNXX1NZTkNfSU9DX0lOQworc3RydWN0IHN3X3N5bmNfY3JlYXRlX2ZlbmNlX2RhdGEg eworCV9fdTMyCXZhbHVlOworCWNoYXIJbmFtZVszMl07CisJX19zMzIJZmVuY2U7Cit9OworCisj ZGVmaW5lIFNXX1NZTkNfSU9DX01BR0lDCQknVycKKyNkZWZpbmUgU1dfU1lOQ19JT0NfQ1JFQVRF X0ZFTkNFCV9JT1dSKFNXX1NZTkNfSU9DX01BR0lDLCAwLFwKKwkJCQkJCXN0cnVjdCBzd19zeW5j X2NyZWF0ZV9mZW5jZV9kYXRhKQorI2RlZmluZSBTV19TWU5DX0lPQ19JTkMJCQlfSU9XKFNXX1NZ TkNfSU9DX01BR0lDLCAxLCBfX3UzMikKKyNlbmRpZgorCisjZGVmaW5lIERFVkZTX1NXX1NZTkMg ICAiL2Rldi9zd19zeW5jIgorI2RlZmluZSBERUJVR0ZTX1NXX1NZTkMgIi9zeXMva2VybmVsL2Rl YnVnL3N5bmMvc3dfc3luYyIKKworCitpbnQgc3dfc3luY19mZF9pc192YWxpZChpbnQgZmQpCit7 CisJaW50IHN0YXR1czsKKworCWlmIChmZCA8IDApCisJCXJldHVybiAwOworCisJc3RhdHVzID0g ZmNudGwoZmQsIEZfR0VURkQsIDApOworCXJldHVybiBzdGF0dXMgPj0gMDsKK30KKworaW50IHN3 X3N5bmNfdGltZWxpbmVfY3JlYXRlKHZvaWQpCit7CisJaW50IGZkID0gb3BlbihERVZGU19TV19T WU5DLCBPX1JEV1IpOworCisJaWYgKGZkIDwgMCkKKwkJZmQgPSBvcGVuKERFQlVHRlNfU1dfU1lO QywgT19SRFdSKTsKKworCWlndF9hc3NlcnQoc3dfc3luY19mZF9pc192YWxpZChmZCkpOworCisJ cmV0dXJuIGZkOworfQorCitpbnQgX19zd19zeW5jX2ZlbmNlX2NyZWF0ZShpbnQgZmQsIHVpbnQz Ml90IHNlcW5vKQoreworCisJc3RydWN0IHN3X3N5bmNfY3JlYXRlX2ZlbmNlX2RhdGEgZGF0YTsK KworCW1lbXNldCgmZGF0YSwgMCwgc2l6ZW9mKGRhdGEpKTsKKwlkYXRhLnZhbHVlID0gc2Vxbm87 CisKKwlpZiAoaWd0X2lvY3RsKGZkLCBTV19TWU5DX0lPQ19DUkVBVEVfRkVOQ0UsICZkYXRhKSkK KwkJcmV0dXJuIC1lcnJubzsKKworCXJldHVybiBkYXRhLmZlbmNlOworfQorCitpbnQgc3dfc3lu Y19mZW5jZV9jcmVhdGUoaW50IGZkLCB1aW50MzJfdCBzZXFubykKK3sKKwlpbnQgZmVuY2UgPSBf X3N3X3N5bmNfZmVuY2VfY3JlYXRlKGZkLCBzZXFubyk7CisJaWd0X2Fzc2VydChmZW5jZSA+PSAw KTsKKwlyZXR1cm4gZmVuY2U7Cit9CisKK3ZvaWQgc3dfc3luY190aW1lbGluZV9pbmMoaW50IGZk LCB1aW50MzJfdCBjb3VudCkKK3sKKwl1aW50MzJfdCBhcmcgPSBjb3VudDsKKworCWRvX2lvY3Rs KGZkLCBTV19TWU5DX0lPQ19JTkMsICZhcmcpOworfQorCitpbnQgc3dfc3luY19tZXJnZShpbnQg ZmQxLCBpbnQgZmQyKQoreworCXN0cnVjdCBzeW5jX21lcmdlX2RhdGEgZGF0YSA9IHt9OworCWlu dCBlcnI7CisKKwlkYXRhLmZkMiA9IGZkMjsKKworCWVyciA9IGlvY3RsKGZkMSwgU1lOQ19JT0Nf TUVSR0UsICZkYXRhKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIC1lcnJubzsKKworCXN3X3N5 bmNfZmRfaXNfdmFsaWQoZGF0YS5mZW5jZSk7CisKKwlyZXR1cm4gZGF0YS5mZW5jZTsKK30KKwor aW50IHN3X3N5bmNfd2FpdChpbnQgZmQsIGludCB0aW1lb3V0KQoreworCXN0cnVjdCBwb2xsZmQg ZmRzID0gezB9OworCWludCByZXQ7CisKKwlmZHMuZmQgPSBmZDsKKwlmZHMuZXZlbnRzID0gUE9M TElOOworCisJZG8geworCQkgcmV0ID0gcG9sbCgmZmRzLCAxLCB0aW1lb3V0KTsKKwkJIGlmIChy ZXQgPiAwKSB7CisJCQkgIGlmIChmZHMucmV2ZW50cyAmIChQT0xMRVJSIHwgUE9MTE5WQUwpKSB7 CisJCQkJICAgZXJybm8gPSBFSU5WQUw7CisJCQkJICAgcmV0dXJuIC0xOworCQkJICB9CisJCQkg IHJldHVybiAwOworCQkgfSBlbHNlIGlmIChyZXQgPT0gMCkgeworCQkJICBlcnJubyA9IEVUSU1F OworCQkJICByZXR1cm4gLTE7CisJCSB9CisJfSB3aGlsZSAocmV0ID09IC0xICYmIChlcnJubyA9 PSBFSU5UUiB8fCBlcnJubyA9PSBFQUdBSU4pKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBz d19zeW5jX2ZlbmNlX2NvdW50KGludCBmZCkKK3sKKwlzdHJ1Y3Qgc3luY19maWxlX2luZm8gaW5m bzsKKworCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKGluZm8pKTsKKwlpZiAoaW9jdGwoZmQsIFNZ TkNfSU9DX0ZJTEVfSU5GTywgJmluZm8pKQorCQlyZXR1cm4gLWVycm5vOworCisJcmV0dXJuIGlu Zm8ubnVtX2ZlbmNlczsKK30KKworc3RhdGljIGludCBfX3N3X3N5bmNfZmVuY2VfY291bnRfc3Rh dHVzKGludCBmZCwgaW50IHN0YXR1cykKK3sKKwlzdHJ1Y3Qgc3luY19maWxlX2luZm8gaW5mbzsK KwlzdHJ1Y3Qgc3luY19mZW5jZV9pbmZvICpmZW5jZV9pbmZvOworCWludCBjb3VudDsKKwlpbnQg aTsKKworCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKGluZm8pKTsKKwlpZiAoaW9jdGwoZmQsIFNZ TkNfSU9DX0ZJTEVfSU5GTywgJmluZm8pKQorCQlyZXR1cm4gLWVycm5vOworCisJZmVuY2VfaW5m byA9IGNhbGxvYyhpbmZvLm51bV9mZW5jZXMsIHNpemVvZigqZmVuY2VfaW5mbykpOworCWlmICgh ZmVuY2VfaW5mbykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpbmZvLnN5bmNfZmVuY2VfaW5mbyA9 ICh1aW50cHRyX3QpZmVuY2VfaW5mbzsKKwlpZiAoaW9jdGwoZmQsIFNZTkNfSU9DX0ZJTEVfSU5G TywgJmluZm8pKSB7CisJCWNvdW50ID0gLWVycm5vOworCX0gZWxzZSB7CisJCWNvdW50ID0gMDsK KwkJZm9yIChpID0gMCA7IGkgPCBpbmZvLm51bV9mZW5jZXMgOyBpKyspCisJCQljb3VudCArPSBm ZW5jZV9pbmZvW2ldLnN0YXR1cyA9PSBzdGF0dXM7CisJfQorCisJZnJlZShmZW5jZV9pbmZvKTsK KworCXJldHVybiBjb3VudDsKK30KKworaW50IHN3X3N5bmNfZmVuY2VfY291bnRfc3RhdHVzKGlu dCBmZCwgaW50IHN0YXR1cykKK3sKKwlpbnQgY291bnQgPSBfX3N3X3N5bmNfZmVuY2VfY291bnRf c3RhdHVzKGZkLCBzdGF0dXMpOworCWlndF9hc3NlcnQoY291bnQgPj0gMCk7CisJcmV0dXJuIGNv dW50OworfQpkaWZmIC0tZ2l0IGEvbGliL3N3X3N5bmMuaCBiL2xpYi9zd19zeW5jLmgKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVlOTI0OQotLS0gL2Rldi9udWxsCisrKyBi L2xpYi9zd19zeW5jLmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEyIEdv b2dsZSwgSW5jCisgKiBDb3B5cmlnaHQgwqkgMjAxNiBDb2xsYWJvcmEsIEx0ZC4KKyAqCisgKiBC YXNlZCBvbiB0aGUgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQ cm9qZWN0CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFy Z2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBh bmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0 byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0 aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJn ZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGll cyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICog U29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBw ZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxs IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhl CisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwg V0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5D TFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VN RU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xE RVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwg QVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdB UkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoK KyAqIEF1dGhvcnM6CisgKiAgICBSb2JlcnQgRm9zcyA8cm9iZXJ0LmZvc3NAY29sbGFib3JhLmNv bT4KKyAqLworCisjaWZuZGVmIFNXX1NZTkNfSAorI2RlZmluZSBTV19TWU5DX0gKKworI2RlZmlu ZSBTV19TWU5DX0ZFTkNFX1NUQVRVU19FUlJPUgkJKC0xKQorI2RlZmluZSBTV19TWU5DX0ZFTkNF X1NUQVRVU19BQ1RJVkUJCSgwKQorI2RlZmluZSBTV19TWU5DX0ZFTkNFX1NUQVRVU19TSUdOQUxF RAkoMSkKKworaW50IHN3X3N5bmNfZmRfaXNfdmFsaWQoaW50IGZkKTsKK2ludCBzd19zeW5jX3Rp bWVsaW5lX2NyZWF0ZSh2b2lkKTsKK2ludCBfX3N3X3N5bmNfZmVuY2VfY3JlYXRlKGludCBmZCwg dWludDMyX3Qgc2Vxbm8pOworaW50IHN3X3N5bmNfZmVuY2VfY3JlYXRlKGludCBmZCwgdWludDMy X3Qgc2Vxbm8pOwordm9pZCBzd19zeW5jX3RpbWVsaW5lX2luYyhpbnQgZmQsIHVpbnQzMl90IGNv dW50KTsKK2ludCBzd19zeW5jX21lcmdlKGludCBmZDEsIGludCBmZDIpOworaW50IHN3X3N5bmNf d2FpdChpbnQgZmVuY2UsIGludCB0aW1lb3V0KTsKK2ludCBzd19zeW5jX2ZlbmNlX2NvdW50KGlu dCBmZCk7CitpbnQgc3dfc3luY19mZW5jZV9jb3VudF9zdGF0dXMoaW50IGZkLCBpbnQgc3RhdHVz KTsKKworI2VuZGlmCisKLS0gCjIuMTAuMgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vaW50ZWwtZ2Z4Cg==