From mboxrd@z Thu Jan 1 00:00:00 1970 From: Robert Foss Subject: [PATCH i-g-t v11 01/21] lib/sw_sync: Add helper functions for managing synchronization primitives Date: Wed, 7 Dec 2016 15:07:34 -0500 Message-ID: <20161207200754.7690-2-robert.foss@collabora.com> References: <20161207200754.7690-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 326B76E634 for ; Wed, 7 Dec 2016 20:08:12 +0000 (UTC) In-Reply-To: <20161207200754.7690-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 , Petri Latvala Cc: Gustavo Padovan List-Id: intel-gfx@lists.freedesktop.org QmFzZSBmdW5jdGlvbnMgdG8gaGVscCB0ZXN0aW5nIHRoZSBTeW5jIEZpbGUgRnJhbWV3b3JrIChl eHBsaWNpdCBmZW5jaW5nCm1lY2hhbmlzbSBwb3J0ZWQgZnJvbSBBbmRyb2lkKS4KVGhlc2UgZnVu Y3Rpb25zIGFsbG93IHlvdSB0byBjcmVhdGUsIHVzZSBhbmQgZGVzdHJveSB0aW1lbGluZXMgYW5k IGZlbmNlcy4KClNpZ25lZC1vZmYtYnk6IFJvYmVydCBGb3NzIDxyb2JlcnQuZm9zc0Bjb2xsYWJv cmEuY29tPgpTaWduZWQtb2ZmLWJ5OiBHdXN0YXZvIFBhZG92YW4gPGd1c3Rhdm8ucGFkb3ZhbkBj b2xsYWJvcmEuY28udWs+ClJldmlld2VkLWJ5OiBFcmljIEVuZ2VzdHJvbSA8ZXJpY0Blbmdlc3Ry b20uY2g+ClJldmlld2VkLWJ5OiBUb21ldSBWaXpvc28gPHRvbWV1LnZpem9zb0Bjb2xsYWJvcmEu Y29tPgotLS0KIGxpYi9NYWtlZmlsZS5zb3VyY2VzIHwgICAyICsKIGxpYi9zd19zeW5jLmMgICAg ICAgIHwgMjE0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKwogbGliL3N3X3N5bmMuaCAgICAgICAgfCAgNDQgKysrKysrKysrKysKIDMgZmlsZXMgY2hh bmdlZCwgMjYwIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvc3dfc3luYy5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3N3X3N5bmMuaAoKZGlmZiAtLWdpdCBhL2xpYi9NYWtl ZmlsZS5zb3VyY2VzIGIvbGliL01ha2VmaWxlLnNvdXJjZXMKaW5kZXggNjAyZTNmNjguLjUzZmRi NTRjIDEwMDY0NAotLS0gYS9saWIvTWFrZWZpbGUuc291cmNlcworKysgYi9saWIvTWFrZWZpbGUu c291cmNlcwpAQCAtNjMsNiArNjMsOCBAQCBsaWJfc291cmNlX2xpc3QgPQkgCVwKIAlyZW5kZXJj b3B5X2dlbjguYwlcCiAJcmVuZGVyY29weV9nZW45LmMJXAogCXJlbmRlcmNvcHkuaAkJXAorCXN3 X3N5bmMuYwkJXAorCXN3X3N5bmMuaAkJXAogCWludGVsX3JlZ19tYXAuYwkJXAogCWludGVsX2lv c2YuYwkJXAogCWlndF9rbXMuYwkJXApkaWZmIC0tZ2l0IGEvbGliL3N3X3N5bmMuYyBiL2xpYi9z d19zeW5jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmFhOGZlZWZlCi0t LSAvZGV2L251bGwKKysrIGIvbGliL3N3X3N5bmMuYwpAQCAtMCwwICsxLDIxNCBAQAorLyoKKyAq IENvcHlyaWdodCDCqSAyMDE2IENvbGxhYm9yYSwgTHRkLgorICoKKyAqIFBlcm1pc3Npb24gaXMg aGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBh CisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBm aWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91 dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0 cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1Ymxp Y2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVy bWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBz bywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3Zl IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0 aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9y IHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNP RlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQs IEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhF IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBU SEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwg REFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBD T05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJ TiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElO R1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICogICAgUm9iZXJ0IEZv c3MgPHJvYmVydC5mb3NzQGNvbGxhYm9yYS5jb20+CisgKi8KKworI2lmbmRlZiBBTkRST0lECisj ZGVmaW5lIF9HTlVfU09VUkNFCisjZWxzZQorI2luY2x1ZGUgPGxpYmdlbi5oPgorI2VuZGlmCisj aW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxwb2xsLmg+CisjaW5jbHVkZSA8c3RkYm9vbC5o PgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5bmNfZmlsZS5oPgorI2lu Y2x1ZGUgPHN5cy9pb2N0bC5oPgorCisjaW5jbHVkZSAiaWd0X2RlYnVnZnMuaCIKKyNpbmNsdWRl ICJzd19zeW5jLmgiCisjaW5jbHVkZSAiZHJtdGVzdC5oIgorI2luY2x1ZGUgImlvY3RsX3dyYXBw ZXJzLmgiCisKKyNpZm5kZWYgU1dfU1lOQ19JT0NfSU5DCitzdHJ1Y3Qgc3dfc3luY19jcmVhdGVf ZmVuY2VfZGF0YSB7CisJX191MzIJdmFsdWU7CisJY2hhcgluYW1lWzMyXTsKKwlfX3MzMglmZW5j ZTsKK307CisKKyNkZWZpbmUgTE9DQUxfU1dfU1lOQ19JT0NfTUFHSUMJCSAgICAnVycKKyNkZWZp bmUgTE9DQUxfU1dfU1lOQ19JT0NfQ1JFQVRFX0ZFTkNFCV9JT1dSKExPQ0FMX1NXX1NZTkNfSU9D X01BR0lDLCAwLFwKKwkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzd19zeW5j X2NyZWF0ZV9mZW5jZV9kYXRhKQorI2RlZmluZSBMT0NBTF9TV19TWU5DX0lPQ19JTkMJCQlfSU9X KExPQ0FMX1NXX1NZTkNfSU9DX01BR0lDLCAxLCBfX3UzMikKKyNlbmRpZgorCisKK3N0YXRpYyBi b29sIGtlcm5lbF9zd19zeW5jX3BhdGgoY2hhciAqcGF0aCwgaW50IGxlbmd0aCkKK3sKKwlzbnBy aW50ZihwYXRoLCBsZW5ndGgsICIlcyIsICIvZGV2L3N3X3N5bmMiKTsKKwlpZiAoYWNjZXNzKHBh dGgsIFJfT0sgfCBXX09LKSA9PSAwKSB7CisJICAgIHJldHVybiB0cnVlOworCX0KKworCXNucHJp bnRmKHBhdGgsIGxlbmd0aCwgIiVzIiwgIi9zeXMva2VybmVsL2RlYnVnL3N5bmMvc3dfc3luYyIp OworCWlmIChhY2Nlc3MocGF0aCwgUl9PSyB8IFdfT0spID09IDApIHsKKwkgICAgcmV0dXJuIHRy dWU7CisJfQorCisJc25wcmludGYocGF0aCwgbGVuZ3RoLCAiJXMvc3dfc3luYyIsIGlndF9kZWJ1 Z2ZzX21vdW50KCkpOworCWlmIChhY2Nlc3MocGF0aCwgUl9PSyB8IFdfT0spID09IDApIHsKKwkg ICAgcmV0dXJuIHRydWU7CisJfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9v bCBzd19zeW5jX2ZkX2lzX3ZhbGlkKGludCBmZCkKK3sKKwlpbnQgc3RhdHVzOworCisJaWYgKGZk IDwgMCkKKwkJcmV0dXJuIDA7CisKKwlzdGF0dXMgPSBmY250bChmZCwgRl9HRVRGRCwgMCk7CisJ cmV0dXJuIHN0YXR1cyA+PSAwOworfQorCitpbnQgc3dfc3luY190aW1lbGluZV9jcmVhdGUodm9p ZCkKK3sKKwljaGFyIGJ1ZlsxMjhdOworCWludCBmZDsKKworCWlndF9hc3NlcnRfZihrZXJuZWxf c3dfc3luY19wYXRoKGJ1Ziwgc2l6ZW9mKGJ1ZikpLAorCSAgICAiVW5hYmxlIHRvIGZpbmQgdmFs aWQgcGF0aCBmb3Igc3dfc3luY1xuIik7CisKKwlmZCA9IG9wZW4oYnVmLCBPX1JEV1IpOworCWln dF9hc3NlcnRfZihzd19zeW5jX2ZkX2lzX3ZhbGlkKGZkKSwgIkNyZWF0ZWQgaW52YWxpZCB0aW1l bGluZVxuIik7CisKKwlyZXR1cm4gZmQ7Cit9CisKK2ludCBfX3N3X3N5bmNfZmVuY2VfY3JlYXRl KGludCBmZCwgdWludDMyX3Qgc2Vxbm8pCit7CisJc3RydWN0IHN3X3N5bmNfY3JlYXRlX2ZlbmNl X2RhdGEgZGF0YSA9IHswfTsKKwlkYXRhLnZhbHVlID0gc2Vxbm87CisKKwlpZiAoaWd0X2lvY3Rs KGZkLCBMT0NBTF9TV19TWU5DX0lPQ19DUkVBVEVfRkVOQ0UsICZkYXRhKSkKKwkJcmV0dXJuIC1l cnJubzsKKworCXJldHVybiBkYXRhLmZlbmNlOworfQorCitpbnQgc3dfc3luY19mZW5jZV9jcmVh dGUoaW50IGZkLCB1aW50MzJfdCBzZXFubykKK3sKKwlpbnQgZmVuY2UgPSBfX3N3X3N5bmNfZmVu Y2VfY3JlYXRlKGZkLCBzZXFubyk7CisKKwlpZ3RfYXNzZXJ0X2Yoc3dfc3luY19mZF9pc192YWxp ZChmZW5jZSksICJDcmVhdGVkIGludmFsaWQgZmVuY2VcbiIpOworCisJcmV0dXJuIGZlbmNlOwor fQorCit2b2lkIHN3X3N5bmNfdGltZWxpbmVfaW5jKGludCBmZCwgdWludDMyX3QgY291bnQpCit7 CisJdWludDMyX3QgYXJnID0gY291bnQ7CisKKwlkb19pb2N0bChmZCwgTE9DQUxfU1dfU1lOQ19J T0NfSU5DLCAmYXJnKTsKK30KKworaW50IHN5bmNfbWVyZ2UoaW50IGZkMSwgaW50IGZkMikKK3sK KwlzdHJ1Y3Qgc3luY19tZXJnZV9kYXRhIGRhdGEgPSB7fTsKKwlpbnQgZXJyOworCisJZGF0YS5m ZDIgPSBmZDI7CisKKwllcnIgPSBpb2N0bChmZDEsIFNZTkNfSU9DX01FUkdFLCAmZGF0YSk7CisJ aWYgKGVyciA8IDApCisJCXJldHVybiAtZXJybm87CisKKwlyZXR1cm4gZGF0YS5mZW5jZTsKK30K KworaW50IHN5bmNfd2FpdChpbnQgZmQsIGludCB0aW1lb3V0KQoreworCXN0cnVjdCBwb2xsZmQg ZmRzID0gezB9OworCWludCByZXQ7CisKKwlmZHMuZmQgPSBmZDsKKwlmZHMuZXZlbnRzID0gUE9M TElOOworCisJZG8geworCQkgcmV0ID0gcG9sbCgmZmRzLCAxLCB0aW1lb3V0KTsKKwkJIGlmIChy ZXQgPiAwKSB7CisJCQkgIGlmIChmZHMucmV2ZW50cyAmIChQT0xMRVJSIHwgUE9MTE5WQUwpKSB7 CisJCQkJICAgZXJybm8gPSBFSU5WQUw7CisJCQkJICAgcmV0dXJuIC0xOworCQkJICB9CisJCQkg IHJldHVybiAwOworCQkgfSBlbHNlIGlmIChyZXQgPT0gMCkgeworCQkJICBlcnJubyA9IEVUSU1F OworCQkJICByZXR1cm4gLTE7CisJCSB9CisJfSB3aGlsZSAocmV0ID09IC0xICYmIChlcnJubyA9 PSBFSU5UUiB8fCBlcnJubyA9PSBFQUdBSU4pKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBz eW5jX2ZlbmNlX2NvdW50KGludCBmZCkKK3sKKwlzdHJ1Y3Qgc3luY19maWxlX2luZm8gaW5mbyA9 IHswfTsKKworCWlmIChpb2N0bChmZCwgU1lOQ19JT0NfRklMRV9JTkZPLCAmaW5mbykpCisJCXJl dHVybiAtZXJybm87CisKKwlyZXR1cm4gaW5mby5udW1fZmVuY2VzOworfQorCitzdGF0aWMgaW50 IF9fc3luY19mZW5jZV9jb3VudF9zdGF0dXMoaW50IGZkLCBpbnQgc3RhdHVzKQoreworCXN0cnVj dCBzeW5jX2ZpbGVfaW5mbyBpbmZvID0gezB9OworCXN0cnVjdCBzeW5jX2ZlbmNlX2luZm8gKmZl bmNlX2luZm87CisJaW50IGNvdW50OworCWludCBpOworCisJaWYgKGlvY3RsKGZkLCBTWU5DX0lP Q19GSUxFX0lORk8sICZpbmZvKSkKKwkJcmV0dXJuIC1lcnJubzsKKworCWZlbmNlX2luZm8gPSBj YWxsb2MoaW5mby5udW1fZmVuY2VzLCBzaXplb2YoKmZlbmNlX2luZm8pKTsKKwlpZiAoIWZlbmNl X2luZm8pCisJCXJldHVybiAtRU5PTUVNOworCisJaW5mby5zeW5jX2ZlbmNlX2luZm8gPSAodWlu dHB0cl90KWZlbmNlX2luZm87CisJaWYgKGlvY3RsKGZkLCBTWU5DX0lPQ19GSUxFX0lORk8sICZp bmZvKSkgeworCQljb3VudCA9IC1lcnJubzsKKwl9IGVsc2UgeworCQljb3VudCA9IDA7CisJCWZv ciAoaSA9IDAgOyBpIDwgaW5mby5udW1fZmVuY2VzIDsgaSsrKQorCQkJaWYgKGZlbmNlX2luZm9b aV0uc3RhdHVzID09IHN0YXR1cykKKwkJCQljb3VudCsrOworCX0KKworCWZyZWUoZmVuY2VfaW5m byk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK2ludCBzeW5jX2ZlbmNlX2NvdW50X3N0YXR1cyhp bnQgZmQsIGludCBzdGF0dXMpCit7CisJaW50IGNvdW50ID0gX19zeW5jX2ZlbmNlX2NvdW50X3N0 YXR1cyhmZCwgc3RhdHVzKTsKKwlpZ3RfYXNzZXJ0X2YoY291bnQgPj0gMCwgIk5vIGZlbmNlcyB3 aXRoIHN1cHBsaWVkIHN0YXR1cyBmb3VuZFxuIik7CisKKwlyZXR1cm4gY291bnQ7Cit9CmRpZmYg LS1naXQgYS9saWIvc3dfc3luYy5oIGIvbGliL3N3X3N5bmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMC4uY2VhNWE2MDMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvc3dfc3lu Yy5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxNiBDb2xsYWJvcmEs IEx0ZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJn ZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFu ZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRv IGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRo b3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdl LCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVz IG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBT b2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBj b25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBl cm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwg YmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUK KyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBX SVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNM VURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1F TlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERF UlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElU WSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBB UklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FS RSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgor ICogQXV0aG9yczoKKyAqICAgIFJvYmVydCBGb3NzIDxyb2JlcnQuZm9zc0Bjb2xsYWJvcmEuY29t PgorICovCisKKyNpZm5kZWYgU1dfU1lOQ19ICisjZGVmaW5lIFNXX1NZTkNfSAorCisjZGVmaW5l IFNXX1NZTkNfRkVOQ0VfU1RBVFVTX0VSUk9SCQkoLTEpCisjZGVmaW5lIFNXX1NZTkNfRkVOQ0Vf U1RBVFVTX0FDVElWRQkJKDApCisjZGVmaW5lIFNXX1NZTkNfRkVOQ0VfU1RBVFVTX1NJR05BTEVE CSgxKQorCitpbnQgc3dfc3luY190aW1lbGluZV9jcmVhdGUodm9pZCk7CitpbnQgX19zd19zeW5j X2ZlbmNlX2NyZWF0ZShpbnQgZmQsIHVpbnQzMl90IHNlcW5vKTsKK2ludCBzd19zeW5jX2ZlbmNl X2NyZWF0ZShpbnQgZmQsIHVpbnQzMl90IHNlcW5vKTsKK3ZvaWQgc3dfc3luY190aW1lbGluZV9p bmMoaW50IGZkLCB1aW50MzJfdCBjb3VudCk7CitpbnQgc3luY19tZXJnZShpbnQgZmQxLCBpbnQg ZmQyKTsKK2ludCBzeW5jX3dhaXQoaW50IGZlbmNlLCBpbnQgdGltZW91dCk7CitpbnQgc3luY19m ZW5jZV9jb3VudChpbnQgZmQpOworaW50IHN5bmNfZmVuY2VfY291bnRfc3RhdHVzKGludCBmZCwg aW50IHN0YXR1cyk7CisKKyNlbmRpZgorCi0tIAoyLjExLjAKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=