From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Gibson Subject: [PATCHv2 1/2] coroutine: New module Date: Thu, 1 Dec 2016 22:28:39 +1100 Message-ID: <20161201112840.32213-1-david@gibson.dropbear.id.au> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from ozlabs.org (ozlabs.org [103.22.144.67]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 3tTw5t5ZKrzDvyl for ; Thu, 1 Dec 2016 22:28:50 +1100 (AEDT) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ccan-bounces+gclcc-ccan=m.gmane.org@lists.ozlabs.org Sender: "ccan" To: ccan@lists.ozlabs.org, rusty@rustcorp.com.au List-Id: ccan@lists.ozlabs.org VGhpcyBpcyBlc3NlbnRpYWxseSBhIHdyYXBwZXIgYXJvdW5kIHVjb250ZXh0LmgsIGJ1dCB0aGUg aWRlYSBpcyB0aGF0CmFsdGVybmF0aXZlIGJhY2sgZW5kIGltcGxlbWVudGF0aW9ucyBjb3VsZCBi ZSB1c2VkIGluIGZ1dHVyZS4KClNpZ25lZC1vZmYtYnk6IERhdmlkIEdpYnNvbiA8ZGF2aWRAZ2li c29uLmRyb3BiZWFyLmlkLmF1PgotLS0KIGNjYW4vY29yb3V0aW5lL0xJQ0VOU0UgICAgICB8ICAg MSArCiBjY2FuL2Nvcm91dGluZS9faW5mbyAgICAgICAgfCAgNDQgKysrKysrKysrCiBjY2FuL2Nv cm91dGluZS9jb3JvdXRpbmUuYyAgfCAxMzYgKysrKysrKysrKysrKysrKysrKysrKysrKysKIGNj YW4vY29yb3V0aW5lL2Nvcm91dGluZS5oICB8IDIzMSArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKwogY2Nhbi9jb3JvdXRpbmUvdGVzdC9hcGktMS5jIHwgIDUyICsr KysrKysrKysKIGNjYW4vY29yb3V0aW5lL3Rlc3QvYXBpLTIuYyB8IDExMCArKysrKysrKysrKysr KysrKysrKysKIGNjYW4vY29yb3V0aW5lL3Rlc3QvYXBpLTMuYyB8ICA5MCArKysrKysrKysrKysr KysrKwogNyBmaWxlcyBjaGFuZ2VkLCA2NjQgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTIw MDAwIGNjYW4vY29yb3V0aW5lL0xJQ0VOU0UKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjY2FuL2Nvcm91 dGluZS9faW5mbwogY3JlYXRlIG1vZGUgMTAwNjQ0IGNjYW4vY29yb3V0aW5lL2Nvcm91dGluZS5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgY2Nhbi9jb3JvdXRpbmUvY29yb3V0aW5lLmgKIGNyZWF0ZSBt b2RlIDEwMDY0NCBjY2FuL2Nvcm91dGluZS90ZXN0L2FwaS0xLmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBjY2FuL2Nvcm91dGluZS90ZXN0L2FwaS0yLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjY2FuL2Nv cm91dGluZS90ZXN0L2FwaS0zLmMKCmRpZmYgLS1naXQgYS9jY2FuL2Nvcm91dGluZS9MSUNFTlNF IGIvY2Nhbi9jb3JvdXRpbmUvTElDRU5TRQpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAw MDAwLi5kYzMxNGVjCi0tLSAvZGV2L251bGwKKysrIGIvY2Nhbi9jb3JvdXRpbmUvTElDRU5TRQpA QCAtMCwwICsxIEBACisuLi8uLi9saWNlbnNlcy9MR1BMLTIuMQpcIE5vIG5ld2xpbmUgYXQgZW5k IG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NjYW4vY29yb3V0aW5lL19pbmZvIGIvY2Nhbi9jb3JvdXRp bmUvX2luZm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk5NjI5YwotLS0g L2Rldi9udWxsCisrKyBiL2NjYW4vY29yb3V0aW5lL19pbmZvCkBAIC0wLDAgKzEsNDQgQEAKKyNp bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5o PgorCisvKioKKyAqIGNvcm91dGluZSAtIENvLXJvdXRpbmVzCisgKgorICogVGhpcyBjb2RlIGhh cyBoZWxwZXIgZnVuY3Rpb25zIGZvciBpbXBsZW1lbnRpbmcgY28tcm91dGluZXMsIHRoYXQKKyAq IGlzLCBleHBsaWNpdCBjby1vcGVyYXRpdmUgY29udGV4dCBzd2l0Y2hpbmcuICBJdCdzIGludGVu ZGVkIHRvCisgKiBwcm92aWRlIHNpbWlsYXIgZnVuY3Rpb25hbGl0eSB0byB1Y29udGV4dCwgYnV0 IHdpdGggYSBjbGVhbmVyCisgKiBpbnRlcmZhY2UuICBBdCB0aGUgbW9tZW50IHRoaXMgaXMgaW1w bGVtZW50ZWQgaW4gdGVybXMgb2YgdWNvbnRleHQsCisgKiBidXQgdGhlIGhvcGUgaXMgdG8gYWRk IG90aGVyIGltcGxlbWVudGF0aW9ucyBmb3IgcGxhdGZvcm1zIHRoYXQKKyAqIGRvbid0IGhhdmUg dWNvbnRleHQgaW4gZnV0dXJlLgorICoKKyAqIEF1dGhvcjogRGF2aWQgR2lic29uIDxkYXZpZEBn aWJzb24uZHJvcGJlYXIuaWQuYXU+CisgKiBMaWNlbnNlOiBMR1BMICh2Mi4xIG9yIGFueSBsYXRl ciB2ZXJzaW9uKQorICoKKyAqIENjYW5saW50OgorICoJLy8gQ29udGV4dCBzd2l0Y2hpbmcgcmVh bGx5IGNvbmZ1c2VzIHZhbGdyaW5kCisgKgl0ZXN0c19wYXNzX3ZhbGdyaW5kIEZBSUwKKyAqLwor aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwkvKiBFeHBlY3QgZXhhY3RseSBv bmUgYXJndW1lbnQgKi8KKwlpZiAoYXJnYyAhPSAyKQorCQlyZXR1cm4gMTsKKworCWlmIChzdHJj bXAoYXJndlsxXSwgImRlcGVuZHMiKSA9PSAwKSB7CisJCXByaW50ZigiY2Nhbi9wdHJpbnRcbiIp OworCQlwcmludGYoImNjYW4vY29tcGlsZXJcbiIpOworCQlwcmludGYoImNjYW4vYnVpbGRfYXNz ZXJ0XG4iKTsKKwkJcHJpbnRmKCJjY2FuL3R5cGVzYWZlX2NiXG4iKTsKKwkJcmV0dXJuIDA7CisJ fQorCisJaWYgKHN0cmNtcChhcmd2WzFdLCAicG9ydGVkIikgPT0gMCkgeworI2lmICFIQVZFX1VD T05URVhUCisJCXByaW50ZigiUmVxdWlyZXMgd29ya2luZyB1Y29udGV4dC5oXG4iKTsKKyNlbmRp ZgorCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL2NjYW4vY29y b3V0aW5lL2Nvcm91dGluZS5jIGIvY2Nhbi9jb3JvdXRpbmUvY29yb3V0aW5lLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYwMWJkZQotLS0gL2Rldi9udWxsCisrKyBiL2Nj YW4vY29yb3V0aW5lL2Nvcm91dGluZS5jCkBAIC0wLDAgKzEsMTM2IEBACisvKiBHTlUgTEdQTCB2 ZXJzaW9uIDIgKG9yIGxhdGVyKSAtIHNlZSBMSUNFTlNFIGZpbGUgZm9yIGRldGFpbHMgKi8KKyNp bmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRpby5o PgorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRl IDxjY2FuL3B0cmludC9wdHJpbnQuaD4KKyNpbmNsdWRlIDxjY2FuL2NvbXBpbGVyL2NvbXBpbGVy Lmg+CisjaW5jbHVkZSA8Y2Nhbi9idWlsZF9hc3NlcnQvYnVpbGRfYXNzZXJ0Lmg+CisjaW5jbHVk ZSA8Y2Nhbi9jb3JvdXRpbmUvY29yb3V0aW5lLmg+CisKKy8qCisgKiBTdGFjayBtYW5hZ2VtZW50 CisgKi8KKworc3RydWN0IGNvcm91dGluZV9zdGFjayB7CisJdWludDY0X3QgbWFnaWM7CisJc2l6 ZV90IHNpemU7Cit9OworCisvKiBSZXR1cm5zIGxvd2VzdCBzdGFjayBhZGRyZXMsIHJlZ2FyZGxl c3Mgb2YgZ3Jvd3RoIGRpcmVjdGlvbiAqLworc3RhdGljIFVOTkVFREVEIHZvaWQgKmNvcm91dGlu ZV9zdGFja19iYXNlKHN0cnVjdCBjb3JvdXRpbmVfc3RhY2sgKnN0YWNrKQoreworI2lmIEhBVkVf U1RBQ0tfR1JPV1NfVVBXQVJEUworCXJldHVybiAoY2hhciAqKShzdGFjayArIDEpOworI2Vsc2UK KwlyZXR1cm4gKGNoYXIgKilzdGFjayAtIHN0YWNrLT5zaXplOworI2VuZGlmCit9CisKK3N0cnVj dCBjb3JvdXRpbmVfc3RhY2sgKmNvcm91dGluZV9zdGFja19pbml0KHZvaWQgKmJ1Ziwgc2l6ZV90 IGJ1ZnNpemUsCisJCQkJCSAgICAgc2l6ZV90IG1ldGFzaXplKQoreworCXN0cnVjdCBjb3JvdXRp bmVfc3RhY2sgKnN0YWNrOworCisJQlVJTERfQVNTRVJUKENPUk9VVElORV9TVEtfT1ZFUkhFQUQg PT0gc2l6ZW9mKCpzdGFjaykpOworI2lmZGVmIE1JTlNJR1NUS1NaCisJQlVJTERfQVNTRVJUKENP Uk9VVElORV9NSU5fU1RLU1ogPj0gTUlOU0lHU1RLU1opOworI2VuZGlmCisKKwlpZiAoYnVmc2l6 ZSA8IChDT1JPVVRJTkVfTUlOX1NUS1NaICsgc2l6ZW9mKCpzdGFjaykgKyBtZXRhc2l6ZSkpCisJ CXJldHVybiBOVUxMOworCisjaWYgSEFWRV9TVEFDS19HUk9XU19VUFdBUkRTCisJc3RhY2sgPSAo Y2hhciAqKWJ1ZiArIG1ldGFzaXplOworI2Vsc2UKKwlzdGFjayA9IChzdHJ1Y3QgY29yb3V0aW5l X3N0YWNrICopCisJCSgoY2hhciAqKWJ1ZiArIGJ1ZnNpemUgLSBtZXRhc2l6ZSkgLSAxOworI2Vu ZGlmCisKKwlzdGFjay0+bWFnaWMgPSBDT1JPVVRJTkVfU1RBQ0tfTUFHSUM7CisJc3RhY2stPnNp emUgPSBidWZzaXplIC0gc2l6ZW9mKCpzdGFjaykgLSBtZXRhc2l6ZTsKKworCXJldHVybiBzdGFj azsKK30KKwordm9pZCBjb3JvdXRpbmVfc3RhY2tfcmVsZWFzZShzdHJ1Y3QgY29yb3V0aW5lX3N0 YWNrICpzdGFjaykKK3sKKwltZW1zZXQoc3RhY2ssIDAsIHNpemVvZigqc3RhY2spKTsKK30KKwor c3RydWN0IGNvcm91dGluZV9zdGFjayAqY29yb3V0aW5lX3N0YWNrX2NoZWNrKHN0cnVjdCBjb3Jv dXRpbmVfc3RhY2sgKnN0YWNrLAorCQkJCQkgICAgICBjb25zdCBjaGFyICphYm9ydHN0cikKK3sK KwlpZiAoc3RhY2sgJiYgKHN0YWNrLT5tYWdpYyA9PSBDT1JPVVRJTkVfU1RBQ0tfTUFHSUMpCisJ ICAgICYmIChzdGFjay0+c2l6ZSA+PSBDT1JPVVRJTkVfTUlOX1NUS1NaKSkKKwkJcmV0dXJuIHN0 YWNrOworCisJaWYgKGFib3J0c3RyKSB7CisJCWlmICghc3RhY2spCisJCQlmcHJpbnRmKHN0ZGVy ciwgIiVzOiBOVUxMIGNvcm91dGluZSBzdGFja1xuIiwgYWJvcnRzdHIpOworCQllbHNlCisJCQlm cHJpbnRmKHN0ZGVyciwKKwkJCQkiJXM6IEJhZCBjb3JvdXRpbmUgc3RhY2sgYXQgJXAgKG1hZ2lj PTB4JSJQUkl4NjQiIHNpemU9JXpkKVxuIiwKKwkJCQlhYm9ydHN0ciwgc3RhY2ssIHN0YWNrLT5t YWdpYywgc3RhY2stPnNpemUpOworCQlhYm9ydCgpOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKwor c2l6ZV90IGNvcm91dGluZV9zdGFja19zaXplKGNvbnN0IHN0cnVjdCBjb3JvdXRpbmVfc3RhY2sg KnN0YWNrKQoreworCXJldHVybiBzdGFjay0+c2l6ZTsKK30KKworI2lmIEhBVkVfVUNPTlRFWFQK K3N0YXRpYyB2b2lkIGNvcm91dGluZV91Y19zdGFjayhzdGFja190ICp1Y19zdGFjaywKKwkJCSAg ICAgICBjb25zdCBzdHJ1Y3QgY29yb3V0aW5lX3N0YWNrICpzdGFjaykKK3sKKwl1Y19zdGFjay0+ c3Nfc2l6ZSA9IGNvcm91dGluZV9zdGFja19zaXplKHN0YWNrKTsKKwl1Y19zdGFjay0+c3Nfc3Ag PSBjb3JvdXRpbmVfc3RhY2tfYmFzZSgoc3RydWN0IGNvcm91dGluZV9zdGFjayAqKXN0YWNrKTsK K30KKyNlbmRpZiAvKiBIQVZFX1VDT05URVhUICovCisKKy8qCisgKiBDb3JvdXRpbmUgc3dpdGNo aW5nCisgKi8KKworI2lmIEhBVkVfVUNPTlRFWFQKK3ZvaWQgY29yb3V0aW5lX2luaXRfKHN0cnVj dCBjb3JvdXRpbmVfc3RhdGUgKmNzLAorCQkgICAgIHZvaWQgKCpmbikodm9pZCAqKSwgdm9pZCAq YXJnLAorCQkgICAgIHN0cnVjdCBjb3JvdXRpbmVfc3RhY2sgKnN0YWNrKQoreworCWdldGNvbnRl eHQgKCZjcy0+dWMpOworCisJY29yb3V0aW5lX3VjX3N0YWNrKCZjcy0+dWMudWNfc3RhY2ssIHN0 YWNrKTsKKworICAgICAgICBpZiAoSEFWRV9QT0lOVEVSX1NBRkVfTUFLRUNPTlRFWFQpIHsKKyAg ICAgICAgICAgICAgICBtYWtlY29udGV4dCgmY3MtPnVjLCAodm9pZCAqKWZuLCAxLCBhcmcpOwor ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHB0cmRpZmZfdCBzaSA9IHB0cjJpbnQo YXJnKTsKKyAgICAgICAgICAgICAgICBwdHJkaWZmX3QgbWFzayA9ICgxVUwgPDwgKHNpemVvZihp bnQpICogOCkpIC0gMTsKKyAgICAgICAgICAgICAgICBpbnQgbG8gPSBzaSAmIG1hc2s7CisgICAg ICAgICAgICAgICAgaW50IGhpID0gc2kgPj4gKHNpemVvZihpbnQpICogOCk7CisKKyAgICAgICAg ICAgICAgICBtYWtlY29udGV4dCgmY3MtPnVjLCAodm9pZCAqKWZuLCAyLCBsbywgaGkpOworICAg ICAgICB9CisJCit9CisKK3ZvaWQgY29yb3V0aW5lX2p1bXAoY29uc3Qgc3RydWN0IGNvcm91dGlu ZV9zdGF0ZSAqdG8pCit7CisJc2V0Y29udGV4dCgmdG8tPnVjKTsKKwlhc3NlcnQoMCk7Cit9CisK K3ZvaWQgY29yb3V0aW5lX3N3aXRjaChzdHJ1Y3QgY29yb3V0aW5lX3N0YXRlICpmcm9tLAorCQkg ICAgICBjb25zdCBzdHJ1Y3QgY29yb3V0aW5lX3N0YXRlICp0bykKK3sKKwlpbnQgcmM7CisKKwly YyA9IHN3YXBjb250ZXh0KCZmcm9tLT51YywgJnRvLT51Yyk7CisJYXNzZXJ0KHJjID09IDApOwor fQorI2VuZGlmIC8qIEhBVkVfVUNPTlRFWFQgKi8KZGlmZiAtLWdpdCBhL2NjYW4vY29yb3V0aW5l L2Nvcm91dGluZS5oIGIvY2Nhbi9jb3JvdXRpbmUvY29yb3V0aW5lLmgKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uY2I0NzQ5YwotLS0gL2Rldi9udWxsCisrKyBiL2NjYW4vY29y b3V0aW5lL2Nvcm91dGluZS5oCkBAIC0wLDAgKzEsMjMxIEBACisvKiBMaWNlbnNlZCB1bmRlciBM R1BMdjIuMSsgLSBzZWUgTElDRU5TRSBmaWxlIGZvciBkZXRhaWxzICovCisjaWZuZGVmIENDQU5f Q09ST1VUSU5FX0gKKyNkZWZpbmUgQ0NBTl9DT1JPVVRJTkVfSAorLyojZGVmaW5lIENDQU5fQ09S T1VUSU5FX0RFQlVHIDEqLworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8c3RkZGVm Lmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUg PGFzc2VydC5oPgorCisjaW5jbHVkZSA8Y2Nhbi9jb21waWxlci9jb21waWxlci5oPgorI2luY2x1 ZGUgPGNjYW4vdHlwZXNhZmVfY2IvdHlwZXNhZmVfY2IuaD4KKworLyoqCisgKiBzdHJ1Y3QgY29y b3V0aW5lX3N0YWNrCisgKgorICogRGVzY3JpYmVzIGEgc3RhY2sgc3VpdGFibGUgZm9yIGV4ZWN1 dGluZyBhIGNvcm91dGluZS4gIFRoaXMKKyAqIHN0cnVjdHVyZSBpcyBhbHdheXMgY29udGFpbmVk IHdpdGhpbiB0aGUgc3RhY2sgaXQgZGVzY3JpYmVzLgorICovCitzdHJ1Y3QgY29yb3V0aW5lX3N0 YWNrOworCisvKioKKyAqIHN0cnVjdCBjb3JvdXRpbmVfc3RhdGUKKyAqCisgKiBEZXNjcmliZXMg dGhlIHN0YXRlIG9mIGFuIGluLXByb2dyZXNzIGNvcm91dGluZS4KKyAqLworc3RydWN0IGNvcm91 dGluZV9zdGF0ZTsKKworLyoKKyAqIFN0YWNrIG1hbmFnZW1lbnQKKyAqLworCisvKioKKyAqIENP Uk9VVElORV9TVEtfT1ZFUkhFQUQgLSBpbnRlcm5hbCBzdGFjayBvdmVyaGVhZAorICoKKyAqIE51 bWJlciBvZiBieXRlcyBvZiBhIHN0YWNrIHdoaWNoIGNvcm91dGluZSBuZWVkcyBmb3IgaXRzIG93 bgorICogdHJhY2tpbmcgaW5mb3JtYXRpb24uCisgKi8KKyNkZWZpbmUgQ09ST1VUSU5FX1NUS19P VkVSSEVBRAkJKHNpemVvZih1aW50NjRfdCkgKyBzaXplb2Yoc2l6ZV90KSkKKworLyoqCisgKiBD T1JPVVRJTkVfTUlOX1NUS1NaIC0gTWluaW11bSBjb3JvdXRpbmUgc3RhY2sgc2l6ZQorICoKKyAq IENvbnRhaW5zIHRoZSBtaW5pbXVtIHNpemUgZm9yIGEgY29yb3V0aW5lIHN0YWNrIChub3QgaW5j bHVkaW5nCisgKiBvdmVyaGVhZCkuICBPbiBzeXN0ZW1zIHdpdGggTUlOU1RLU1osIGd1YXJhbnRl ZWQgdG8gYmUgYXQgbGVhc3QgYXMKKyAqIGxhcmdlIGFzIE1JTlNUS1NaLgorICovCisjZGVmaW5l IENPUk9VVElORV9NSU5fU1RLU1oJCTIwNDgKKworLyoqCisgKiBDT1JPVVRJTkVfU1RBQ0tfTUFH SUMgLSBNYWdpYyBudW1iZXIgZm9yIGNvcm91dGluZSBzdGFja3MKKyAqLworI2RlZmluZSBDT1JP VVRJTkVfU1RBQ0tfTUFHSUMJCTB4YzA0MGMwNDA1NzRjNTc0YworCisKKy8qKgorICogY29yb3V0 aW5lX3N0YWNrX2luaXQgLSBQcmVwYXJlIGEgY29yb3V0aW5lIHN0YWNrIGluIGFuIGV4aXN0aW5n IGJ1ZmZlcgorICogQGJ1ZjogYnVmZmVyIHRvIHVzZSBmb3IgdGhlIGNvcm91dGluZSBzdGFjawor ICogQGJ1ZnNpemU6IHNpemUgb2YgQGJ1ZgorICogQG1ldGFzaXplOiBzaXplIG9mIG1ldGFkYXRh IHRvIGFkZCB0byB0aGUgc3RhY2sgKG5vdCBpbmNsdWRpbmcKKyAqICAgICAgICAgICAgY29yb3V0 aW5lIGludGVybmFsIG92ZXJoZWFkKQorICoKKyAqIFByZXBhcmVzIEBidWYgZm9yIHVzZSBhcyBh IGNvcm91dGluZSBzdGFjaywgcmV0dXJuaW5nIGEKKyAqIGNvcm91dGluZV9zdGFjayAqLCBhbGxv Y2F0ZWQgZnJvbSB3aXRoaW4gdGhlIGJ1ZmZlci4gIFJldHVybnMgTlVMTAorICogb24gZmFpbHVy ZS4KKyAqCisgKiBUaGlzIHdpbGwgZmFpbCBpZiB0aGUgYnVmc2l6ZSA8IChDT1JPVVRJTkVfTUlO X1NUS1NaICsKKyAqIENPUk9VVElORV9TVEtfT1ZFUkhFQUQgKyBtZXRhc2l6ZSkuCisgKi8KK3N0 cnVjdCBjb3JvdXRpbmVfc3RhY2sgKmNvcm91dGluZV9zdGFja19pbml0KHZvaWQgKmJ1Ziwgc2l6 ZV90IGJ1ZnNpemUsCisJCQkJCSAgICAgc2l6ZV90IG1ldGFzaXplKTsKKworLyoqCisgKiBjb3Jv dXRpbmVfc3RhY2tfaW5pdCAtIFN0b3AgdXNpbmcgYSBjb3JvdXRpbmUgc3RhY2sKKyAqIEBzdGFj azogY29yb3V0aW5lIHN0YWNrIHRvIHJlbGVhc2UKKyAqCisgKiBUaGlzIHJlbGVhc2VzIEBzdGFj aywgbWFraW5nIGl0IG5vIGxvbmdlciBzdWl0YWJsZSBmb3IgdXNlIGFzIGEKKyAqIGNvcm91dGlu ZSBzdGFjay4KKyAqLwordm9pZCBjb3JvdXRpbmVfc3RhY2tfcmVsZWFzZShzdHJ1Y3QgY29yb3V0 aW5lX3N0YWNrICpzdGFjayk7CisKKy8qKgorICogY29yb3V0aW5lX3N0YWNrX2NoZWNrIC0gVmFs aWRhdGUgYW5kIHJldHVybiBhIGNvcm91dGluZSBzdGFjaworICogQHN0YWNrOiBzdGFjayB0byBj aGVjaworICogQGFib3J0c3RyOiB0aGUgbG9jYXRpb24gdG8gcHJpbnQgb24gYWJvcnRpbmcsIG9y IE5VTEwuCisgKgorICogRGVidWdnaW5nIGNoZWNrIGlmIEBzdGFjayBkb2Vzbid0IGFwcGVhciB0 byBiZSBhIHZhbGlkIGNvcm91dGluZQorICogc3RhY2ssIGFuZCBAYWJvcnRzdHIgaXMgbm9uLU5V TEwgaXQgd2lsbCBiZSBwcmludGVkIGFuZCB0aGUKKyAqIGZ1bmN0aW9uIHdpbGwgYWJvcnQuCisg KgorICogUmV0dXJucyBAc3RhY2sgaWYgaXQgYXBwZWFycyB2YWxpZCwgTlVMTCBpZiBub3QgKGl0 IGNhbiBuZXZlcgorICogcmV0dXJuIE5VTEwgaWYgQGFib3J0c3RyIGlzIHNldCkuCisgKi8KK3N0 cnVjdCBjb3JvdXRpbmVfc3RhY2sgKmNvcm91dGluZV9zdGFja19jaGVjayhzdHJ1Y3QgY29yb3V0 aW5lX3N0YWNrICpzdGFjaywKKwkJCQkJICAgICAgY29uc3QgY2hhciAqYWJvcnRzdHIpOworCisv KioKKyAqIGNvcm91dGluZV9zdGFja190b19tZXRhZGF0YSAtIFJldHVybnMgcG9pbnRlciB0byB1 c2VyJ3MgbWV0YWRhdGEKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRl ZCB3aXRoaW4gdGhlIHN0YWNrCisgKiBAc3RhY2s6IGNvcm91dGluZSBzdGFjaworICogQG1ldGFz aXplOiBzaXplIG9mIG1ldGFkYXRhCisgKgorICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIG1l dGFkYXRhIGFyZWEgd2l0aGluIEBzdGFjay4gIFRoaXMgaXMgb2YKKyAqIHNpemUgZ2l2ZW4gYXQg aW5pdGlhbGl6YXRpb24gdGltZSwgYW5kIHdvbid0IGJlIG92ZXJ3cml0dGVuIGJ5CisgKiBjb3Jv dXRpbmVzIGV4ZWN1dGluZyBvbiB0aGUgc3RhY2suICBJdCdzIHVwIHRvIHRoZSBjYWxsZXIgd2hh dCB0bworICogcHV0IGluIGhlcmUuIEBtZXRhc2l6ZSBtdXN0IGJlIGVxdWFsIHRvIHRoZSB2YWx1 ZSBwYXNzZWQgdG8KKyAqIGNvcm91dGluZV9zdGFja19pbml0KCkuCisgKi8KK3N0YXRpYyBpbmxp bmUgdm9pZCAqY29yb3V0aW5lX3N0YWNrX3RvX21ldGFkYXRhKHN0cnVjdCBjb3JvdXRpbmVfc3Rh Y2sgKnN0YWNrLAorCQkJCQkJc2l6ZV90IG1ldGFzaXplKQoreworI2lmIEhBVkVfU1RBQ0tfR1JP V1NfVVBXQVJEUworCXJldHVybiAoY2hhciAqKXN0YWNrIC0gbWV0YXNpemU7CisjZWxzZQorCXJl dHVybiAoY2hhciAqKXN0YWNrICsgQ09ST1VUSU5FX1NUS19PVkVSSEVBRDsKKyNlbmRpZgorfQor CisvKioKKyAqIGNvcm91dGluZV9zdGFja19mcm9tX21ldGFkYXRhIC0gUmV0dXJucyBwb2ludGVy IHRvIGNvcm91dGluZSBzdGFjaworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw b2ludGVyIGdpdmVuIHBvaW50ZXIgdG8gdXNlciBtZXRhZGF0YQorICogQG1ldGFkYXQ6IHVzZXIg bWV0YWRhdGEgd2l0aGluIGEgc3RhY2sKKyAqIEBtZXRhc2l6ZTogc2l6ZSBvZiBtZXRhZGF0YQor ICoKKyAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBjb3JvdXRpbmVfc3RhY2sgaGFuZGxlIHdp dGhpbiBhIHN0YWNrLgorICogVGhlIGFyZ3VtZW50IG11c3QgYmUgYSBwb2ludGVyIHJldHVybmVk IGJ5CisgKiBjb3JvdXRpbmVfc3RhY2tfdG9fbWV0YWRhdGEoKSBhdCBhbiBlYXJsaWVyIHRpbWUu IEBtZXRhc2l6ZSBtdXN0IGJlCisgKiBlcXVhbCB0byB0aGUgdmFsdWUgcGFzc2VkIHRvIGNvcm91 dGluZV9zdGFja19pbml0KCkuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNvcm91dGluZV9z dGFjayAqCitjb3JvdXRpbmVfc3RhY2tfZnJvbV9tZXRhZGF0YSh2b2lkICptZXRhZGF0YSwgc2l6 ZV90IG1ldGFzaXplKQoreworI2lmIEhBVkVfU1RBQ0tfR1JPV1NfVVBXQVJEUworCXJldHVybiAo c3RydWN0IGNvcm91dGluZV9zdGFjayAqKSgoY2hhciAqKW1ldGFkYXRhICsgbWV0YXNpemUpOwor I2Vsc2UKKwlyZXR1cm4gKHN0cnVjdCBjb3JvdXRpbmVfc3RhY2sgKikoKGNoYXIgKiltZXRhZGF0 YQorCQkJCQkgIC0gQ09ST1VUSU5FX1NUS19PVkVSSEVBRCk7CisjZW5kaWYKK30KKworLyoqCisg KiBjb3JvdXRpbmVfc3RhY2tfc2l6ZSAtIFJldHVybiBzaXplIG9mIGEgY29yb3V0aW5lIHN0YWNr CisgKiBAc3RhY2s6IGNvcm91dGluZSBzdGFjaworICoKKyAqIFJldHVybnMgdGhlIHNpemUgb2Yg dGhlIGNvcm91dGluZSBzdGFjayBAc3RhY2suICBUaGlzIGRvZXMgbm90CisgKiBpbmNsdWRlIHRo ZSBvdmVyaGVhZCBvZiBzdHJ1Y3QgY29yb3V0aW5lX3N0YWNrIG9yIG1ldGRhdGEuCisgKi8KK3Np emVfdCBjb3JvdXRpbmVfc3RhY2tfc2l6ZShjb25zdCBzdHJ1Y3QgY29yb3V0aW5lX3N0YWNrICpz dGFjayk7CisKKy8qCisgKiBDb3JvdXRpbmUgc3dpdGNoaW5nCisgKi8KKworI2lmIEhBVkVfVUNP TlRFWFQKKyNpbmNsdWRlIDx1Y29udGV4dC5oPgorI2RlZmluZSBDT1JPVVRJTkVfQVZBSUxBQkxF CQkxCisjZWxzZQorI2RlZmluZSBDT1JPVVRJTkVfQVZBSUxBQkxFCQkwCisjZW5kaWYKKworc3Ry dWN0IGNvcm91dGluZV9zdGF0ZSB7CisjaWYgSEFWRV9VQ09OVEVYVAorCXVjb250ZXh0X3QgdWM7 CisjZW5kaWYgLyogSEFWRV9VQ09OVEVYVCAqLworfTsKKworI2lmIENPUk9VVElORV9BVkFJTEFC TEUKKworLyoqCisgKiBjb3JvdXRpbmVfaW5pdCAtIFByZXBhcmUgYSBjb3JvdXRpbmUgZm9yIGV4 ZWN1dGlvbgorICogQGNzOiBjb3JvdXRpbmVfc3RhdGUgc3RydWN0dXJlIHRvIGluaXRpYWxpemUK KyAqIEBmbjogZnVuY3Rpb24gdG8gc3RhcnQgZXhlY3V0aW5nIGluIHRoZSBjb3JvdXRpbmUKKyAq IEBhcmc6IGFyZ3VtZW50IGZvciBAZm4KKyAqIEBzdGFjazogc3RhY2sgdG8gdXNlIGZvciB0aGUg Y29yb3V0aW5lCisgKgorICogUHJlcGFyZXMgQGNzIGFzIGEgbmV3IGNvcm91dGluZSB3aGljaCB3 aWxsIGV4ZWN1dGUgc3RhcnRpbmcgd2l0aAorICogZnVuY3Rpb24gQGZuLCB1c2luZyBzdGFjayBA c3RhY2suCisgKi8KK3ZvaWQgY29yb3V0aW5lX2luaXRfKHN0cnVjdCBjb3JvdXRpbmVfc3RhdGUg KmNzLAorCQkgICAgIHZvaWQgKCpmbikodm9pZCAqKSwgdm9pZCAqYXJnLAorCQkgICAgIHN0cnVj dCBjb3JvdXRpbmVfc3RhY2sgKnN0YWNrKTsKKyNkZWZpbmUgY29yb3V0aW5lX2luaXQoY3MsIGZu LCBhcmcsIHN0YWNrKQkJCQlcCisJY29yb3V0aW5lX2luaXRfKChjcyksICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCXR5cGVzYWZlX2NiKHZvaWQsIHZvaWQg KiwgKGZuKSwgKGFyZykpLAkJXAorCQkJKGFyZyksIChzdGFjaykpCisKKy8qKgorICogY29yb3V0 aW5lX2p1bXAgLSBJcnJldmVyc2libHkgc3dpdGNoIHRvIGV4ZWN1dGluZyBhIGNvcm91dGluZQor ICogQHRvOiBjb3JvdXRpbmUgdG8gc3dpdGNoIHRvCisgKgorICogSW1tZWRpYXRlbHkganVtcCB0 byBleGVjdXRpbmcgY29yb3V0aW5lIEB0byAoYXQgd2hhdGV2ZXIgcG9pbnQgaW4KKyAqIGV4ZWN1 dGlvbiBpdCB3YXMgdXAgdG8pLiAgTmV2ZXIgcmV0dXJucy4KKyAqLwordm9pZCBOT1JFVFVSTiBj b3JvdXRpbmVfanVtcChjb25zdCBzdHJ1Y3QgY29yb3V0aW5lX3N0YXRlICp0byk7CisKKy8qKgor ICogY29yb3V0aW5lX3N3aXRjaCAtIFN3aXRjaCBjb3JvdXRpbmVzCisgKiBAZnJvbTogY29yb3V0 aW5lIGluIHdoaWNoIHRvIHN0b3JlIGN1cnJlbnQgZXhlY3V0aW9uIHN0YXRlCisgKiBAdG86IGNv cm91dGluZSB0byBzd2l0Y2ggdG8KKyAqCisgKiBTdG9wIGV4ZWN1dGluZyB0aGUgY3VycmVudCBy b3V0aW5lLCBzYXZpbmcgaXRzIHN0YXRlIGluIEBmcm9tLCBhbmQKKyAqIHN3aXRjaCB0byBleGVj dXRpbmcgdGhlIGNvcm91dGluZSBAdG8uICBSZXR1cm5zIG9ubHkgd2hlbiBzb21ldGhpbmcKKyAq IHN3aXRjaGVzIG9yIGp1bXBzIGJhY2sgdG8gQGZyb20uCisgKi8KK3ZvaWQgY29yb3V0aW5lX3N3 aXRjaChzdHJ1Y3QgY29yb3V0aW5lX3N0YXRlICpmcm9tLAorCQkgICAgICBjb25zdCBzdHJ1Y3Qg Y29yb3V0aW5lX3N0YXRlICp0byk7CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3Jv dXRpbmVfaW5pdChzdHJ1Y3QgY29yb3V0aW5lX3N0YXRlICpjcywKKwkJCQkgIHZvaWQgKCpmbiko dm9pZCAqKSwgdm9pZCAqYXJnLAorCQkJCSAgc3RydWN0IGNvcm91dGluZV9zdGFjayAqc3RhY2sp Cit7CisJYXNzZXJ0KDApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgTk9SRVRVUk4gY29yb3V0 aW5lX2p1bXAoY29uc3Qgc3RydWN0IGNvcm91dGluZV9zdGF0ZSAqdG8pCit7CisJYXNzZXJ0KDAp OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29yb3V0aW5lX3N3aXRjaChzdHJ1Y3QgY29yb3V0 aW5lX3N0YXRlICpmcm9tLAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgY29yb3V0aW5lX3N0YXRlICp0 bykKK3sKKwlhc3NlcnQoMCk7Cit9CisKKyNlbmRpZiAvKiAhQ09ST1VUSU5FX0FWQUlMQUJMRSAq LworCisjZW5kaWYgLyogQ0NBTl9DT1JPVVRJTkVfSCAqLwpkaWZmIC0tZ2l0IGEvY2Nhbi9jb3Jv dXRpbmUvdGVzdC9hcGktMS5jIGIvY2Nhbi9jb3JvdXRpbmUvdGVzdC9hcGktMS5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNjEwZDMKLS0tIC9kZXYvbnVsbAorKysgYi9j Y2FuL2Nvcm91dGluZS90ZXN0L2FwaS0xLmMKQEAgLTAsMCArMSw1MiBAQAorI2luY2x1ZGUgPHN0 ZGxpYi5oPgorCisjaW5jbHVkZSA8Y2Nhbi9jb3JvdXRpbmUvY29yb3V0aW5lLmg+CisjaW5jbHVk ZSA8Y2Nhbi90YXAvdGFwLmg+CisKK3N0YXRpYyBpbnQgZ2xvYmFsID0gMDsKKworc3RhdGljIHZv aWQgdHJpdmlhbF9mbih2b2lkICpwKQoreworCXN0cnVjdCBjb3JvdXRpbmVfc3RhdGUgKnJldCA9 IChzdHJ1Y3QgY29yb3V0aW5lX3N0YXRlICopcDsKKworCWdsb2JhbCA9IDE7CisKKwljb3JvdXRp bmVfanVtcChyZXQpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3RyaXZpYWwoc3RydWN0IGNvcm91 dGluZV9zdGFjayAqc3RhY2spCit7CisJc3RydWN0IGNvcm91dGluZV9zdGF0ZSB0LCBtYXN0ZXI7 CisKKwlpZiAoIUNPUk9VVElORV9BVkFJTEFCTEUpIHsKKwkJc2tpcCgxLCAiQ29yb3V0aW5lcyBu b3QgYXZhaWxhYmxlIik7CisJCXJldHVybjsKKwl9CisKKwljb3JvdXRpbmVfaW5pdCgmdCwgdHJp dmlhbF9mbiwgJm1hc3Rlciwgc3RhY2spOworCWNvcm91dGluZV9zd2l0Y2goJm1hc3RlciwgJnQp OworCisJb2sxKGdsb2JhbCA9PSAxKTsKK30KKworCitpbnQgbWFpbih2b2lkKQoreworCWNoYXIg YnVmW0NPUk9VVElORV9NSU5fU1RLU1ogKyBDT1JPVVRJTkVfU1RLX09WRVJIRUFEXTsKKwlzdHJ1 Y3QgY29yb3V0aW5lX3N0YWNrICpzdGFjazsKKworCS8qIFRoaXMgaXMgaG93IG1hbnkgdGVzdHMg eW91IHBsYW4gdG8gcnVuICovCisJcGxhbl90ZXN0cyg0KTsKKworCXN0YWNrID0gY29yb3V0aW5l X3N0YWNrX2luaXQoYnVmLCBzaXplb2YoYnVmKSwgMCk7CisJb2sxKHN0YWNrICE9IE5VTEwpOwor CW9rMShjb3JvdXRpbmVfc3RhY2tfY2hlY2soc3RhY2ssIE5VTEwpID09IHN0YWNrKTsKKwlvazEo Y29yb3V0aW5lX3N0YWNrX3NpemUoc3RhY2spID09IENPUk9VVElORV9NSU5fU1RLU1opOworCisJ dGVzdF90cml2aWFsKHN0YWNrKTsKKworCWNvcm91dGluZV9zdGFja19yZWxlYXNlKHN0YWNrKTsK KworCS8qIFRoaXMgZXhpdHMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgYWxsIHRlc3RzIHBhc3NlZCAq LworCXJldHVybiBleGl0X3N0YXR1cygpOworfQpkaWZmIC0tZ2l0IGEvY2Nhbi9jb3JvdXRpbmUv dGVzdC9hcGktMi5jIGIvY2Nhbi9jb3JvdXRpbmUvdGVzdC9hcGktMi5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NzQyNzAKLS0tIC9kZXYvbnVsbAorKysgYi9jY2FuL2Nv cm91dGluZS90ZXN0L2FwaS0yLmMKQEAgLTAsMCArMSwxMTAgQEAKKyNpbmNsdWRlIDxzdGRsaWIu aD4KKworI2luY2x1ZGUgPGNjYW4vY29yb3V0aW5lL2Nvcm91dGluZS5oPgorI2luY2x1ZGUgPGNj YW4vdGFwL3RhcC5oPgorCitzdHJ1Y3Qgc3RhdGUgeworCXN0cnVjdCBjb3JvdXRpbmVfc3RhdGUg YzEsIGMyOworCXN0cnVjdCBjb3JvdXRpbmVfc3RhdGUgbWFzdGVyOworCWludCB2YWw7Cit9Owor CitzdGF0aWMgdm9pZCBmMSh2b2lkICpwKQoreworCXN0cnVjdCBzdGF0ZSAqc3RhdGUgPSAoc3Ry dWN0IHN0YXRlICopcDsKKworCWNvcm91dGluZV9zd2l0Y2goJnN0YXRlLT5jMSwgJnN0YXRlLT5j Mik7CisKKwlvayhzdGF0ZS0+dmFsID09IDE3LCAic3RhdGUtPnZhbCA9PSAlZCBbZXhwZWN0ZWQg MTddIiwgc3RhdGUtPnZhbCk7CisJc3RhdGUtPnZhbCA9IDIzOworCisJY29yb3V0aW5lX3N3aXRj aCgmc3RhdGUtPmMxLCAmc3RhdGUtPmMyKTsKKworCW9rKHN0YXRlLT52YWwgPT0gMjQsICJzdGF0 ZS0+dmFsID09ICVkIFtleHBlY3RlZCAyNF0iLCBzdGF0ZS0+dmFsKTsKKworCWNvcm91dGluZV9z d2l0Y2goJnN0YXRlLT5jMSwgJnN0YXRlLT5jMik7CisKKwlvayhzdGF0ZS0+dmFsID09IDI2LCAi c3RhdGUtPnZhbCA9PSAlZCBbZXhwZWN0ZWQgMjZdIiwgc3RhdGUtPnZhbCk7CisKKwljb3JvdXRp bmVfc3dpdGNoKCZzdGF0ZS0+YzEsICZzdGF0ZS0+YzIpOworCisJb2soc3RhdGUtPnZhbCA9PSAy OSwgInN0YXRlLT52YWwgPT0gJWQgW2V4cGVjdGVkIDI5XSIsIHN0YXRlLT52YWwpOworCisJY29y b3V0aW5lX3N3aXRjaCgmc3RhdGUtPmMxLCAmc3RhdGUtPmMyKTsKK30KKworc3RhdGljIHZvaWQg ZjIodm9pZCAqcCkKK3sKKwlzdHJ1Y3Qgc3RhdGUgKnN0YXRlID0gKHN0cnVjdCBzdGF0ZSAqKXA7 CisKKwlzdGF0ZS0+dmFsID0gMTc7CisKKwljb3JvdXRpbmVfc3dpdGNoKCZzdGF0ZS0+YzIsICZz dGF0ZS0+YzEpOworCisJb2soc3RhdGUtPnZhbCA9PSAyMywgInN0YXRlLT52YWwgPT0gJWQgW2V4 cGVjdGVkIDIzXSIsIHN0YXRlLT52YWwpOworCXN0YXRlLT52YWwgKz0gMTsKKworCWNvcm91dGlu ZV9zd2l0Y2goJnN0YXRlLT5jMiwgJnN0YXRlLT5jMSk7CisKKwlzdGF0ZS0+dmFsICs9IDI7CisK Kwljb3JvdXRpbmVfc3dpdGNoKCZzdGF0ZS0+YzIsICZzdGF0ZS0+YzEpOworCisJc3RhdGUtPnZh bCArPSAzOworCisJY29yb3V0aW5lX3N3aXRjaCgmc3RhdGUtPmMyLCAmc3RhdGUtPmMxKTsKKwor CWNvcm91dGluZV9qdW1wKCZzdGF0ZS0+bWFzdGVyKTsKK30KKworc3RhdGljIHZvaWQgdGVzdDEo c2l6ZV90IGJ1ZnN6KQoreworCXZvaWQgKmJ1ZjEsICpidWYyOworCXN0cnVjdCBjb3JvdXRpbmVf c3RhY2sgKnN0YWNrMSwgKnN0YWNrMjsKKworCWJ1ZjEgPSBtYWxsb2MoYnVmc3opOworCW9rMShi dWYxICE9IE5VTEwpOworCXN0YWNrMSA9IGNvcm91dGluZV9zdGFja19pbml0KGJ1ZjEsIGJ1ZnN6 LCAwKTsKKwlkaWFnKCJidWYxPSVwIHN0YWNrMT0lcCBidWZzej0weCV6eCBvdmVyaGVhZD0weCV6 eFxuIiwKKwkgICAgIGJ1ZjEsIHN0YWNrMSwgYnVmc3osIENPUk9VVElORV9TVEtfT1ZFUkhFQUQp OworCW9rMShjb3JvdXRpbmVfc3RhY2tfY2hlY2soc3RhY2sxLCBOVUxMKSA9PSBzdGFjazEpOwor CW9rMShjb3JvdXRpbmVfc3RhY2tfc2l6ZShzdGFjazEpID09IGJ1ZnN6IC0gQ09ST1VUSU5FX1NU S19PVkVSSEVBRCk7CisKKwlidWYyID0gbWFsbG9jKGJ1ZnN6KTsKKwlvazEoYnVmMiAhPSBOVUxM KTsKKwlzdGFjazIgPSBjb3JvdXRpbmVfc3RhY2tfaW5pdChidWYyLCBidWZzeiwgMCk7CisJb2sx KGNvcm91dGluZV9zdGFja19jaGVjayhzdGFjazIsIE5VTEwpID09IHN0YWNrMik7CisJb2sxKGNv cm91dGluZV9zdGFja19zaXplKHN0YWNrMikgPT0gYnVmc3ogLSBDT1JPVVRJTkVfU1RLX09WRVJI RUFEKTsKKworCWlmIChDT1JPVVRJTkVfQVZBSUxBQkxFKSB7CisJCXN0cnVjdCBzdGF0ZSBzOwor CisJCWNvcm91dGluZV9pbml0KCZzLmMxLCBmMSwgJnMsIHN0YWNrMSk7CisJCWNvcm91dGluZV9p bml0KCZzLmMyLCBmMiwgJnMsIHN0YWNrMik7CisKKwkJY29yb3V0aW5lX3N3aXRjaCgmcy5tYXN0 ZXIsICZzLmMxKTsKKwl9IGVsc2UgeworCQlza2lwKDUsICJDb3JvdXRpbmVzIG5vdCBhdmFpbGFi bGUiKTsKKwl9CisKKwlvaygxLCAiQ29tcGxldGVkIHRlc3QxIik7CisKKwljb3JvdXRpbmVfc3Rh Y2tfcmVsZWFzZShzdGFjazEpOworCW9rMShjb3JvdXRpbmVfc3RhY2tfY2hlY2soc3RhY2sxLCBO VUxMKSA9PSBOVUxMKTsKKwlmcmVlKGJ1ZjEpOworCWNvcm91dGluZV9zdGFja19yZWxlYXNlKHN0 YWNrMik7CisJb2sxKGNvcm91dGluZV9zdGFja19jaGVjayhzdGFjazIsIE5VTEwpID09IE5VTEwp OworCWZyZWUoYnVmMik7Cit9CisKKworaW50IG1haW4odm9pZCkKK3sKKwkvKiBUaGlzIGlzIGhv dyBtYW55IHRlc3RzIHlvdSBwbGFuIHRvIHJ1biAqLworCXBsYW5fdGVzdHMoMTQpOworCisJdGVz dDEoODE5Mik7CisKKwkvKiBUaGlzIGV4aXRzIGRlcGVuZGluZyBvbiB3aGV0aGVyIGFsbCB0ZXN0 cyBwYXNzZWQgKi8KKwlyZXR1cm4gZXhpdF9zdGF0dXMoKTsKK30KZGlmZiAtLWdpdCBhL2NjYW4v Y29yb3V0aW5lL3Rlc3QvYXBpLTMuYyBiL2NjYW4vY29yb3V0aW5lL3Rlc3QvYXBpLTMuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTFhN2RhCi0tLSAvZGV2L251bGwKKysr IGIvY2Nhbi9jb3JvdXRpbmUvdGVzdC9hcGktMy5jCkBAIC0wLDAgKzEsOTAgQEAKKyNpbmNsdWRl IDxzdGRsaWIuaD4KKworI2luY2x1ZGUgPGNjYW4vY29yb3V0aW5lL2Nvcm91dGluZS5oPgorI2lu Y2x1ZGUgPGNjYW4vdGFwL3RhcC5oPgorCisvKiBUZXN0IG1ldGFkYXRhICovCisjZGVmaW5lIE1F VEFfTUFHSUMgMHg0ZDg2YWE4MmVjMTg5MmY2CisjZGVmaW5lIEJVRlNJWkUgICAgODE5MgorCitz dHJ1Y3QgbWV0YWRhdGEgeworCXVpbnQ2NF90IG1hZ2ljOworfTsKKworc3RydWN0IHN0YXRlIHsK KwlzdHJ1Y3QgY29yb3V0aW5lX3N0YXRlIHJldDsKKwl1bnNpZ25lZCBsb25nIHRvdGFsOworfTsK KworLyogVG91Y2ggYSBidW5jaCBvZiBzdGFjayAqLworc3RhdGljIHZvaWQgY2xvYmJlcih2b2lk ICpwKQoreworCXN0cnVjdCBzdGF0ZSAqcyA9IChzdHJ1Y3Qgc3RhdGUgKilwOworCWNoYXIgYnVm W0JVRlNJWkUgLSBDT1JPVVRJTkVfTUlOX1NUS1NaXTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7 IGkgPCBzaXplb2YoYnVmKTsgaSsrKSB7CisJCWJ1ZltpXSA9IHJhbmRvbSgpICYgMHhmZjsKKwl9 CisKKwlkaWFnKCJXcm90ZSByYW5kb20gdG8gYnVmZmVyXG4iKTsKKworCXMtPnRvdGFsID0gMDsK Kwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGJ1Zik7IGkrKykgeworCQlzLT50b3RhbCArPSBidWZb aV07CisJfQorCisJY29yb3V0aW5lX2p1bXAoJnMtPnJldCk7Cit9CisKK3N0YXRpYyB2b2lkIHRl c3RfbWV0YWRhdGEoc3RydWN0IGNvcm91dGluZV9zdGFjayAqc3RhY2spCit7CisJc3RydWN0IG1l dGFkYXRhICptZXRhOworCisJbWV0YSA9IGNvcm91dGluZV9zdGFja190b19tZXRhZGF0YShzdGFj aywgc2l6ZW9mKCptZXRhKSk7CisJb2sxKGNvcm91dGluZV9zdGFja19mcm9tX21ldGFkYXRhKG1l dGEsIHNpemVvZigqbWV0YSkpID09IHN0YWNrKTsKKworCW1ldGEtPm1hZ2ljID0gTUVUQV9NQUdJ QzsKKwlvazEobWV0YS0+bWFnaWMgPT0gTUVUQV9NQUdJQyk7CisKKwlpZiAoQ09ST1VUSU5FX0FW QUlMQUJMRSkgeworCQlzdHJ1Y3QgY29yb3V0aW5lX3N0YXRlIHQ7CisJCXN0cnVjdCBzdGF0ZSBz ID0geworCQl9OworCisJCWNvcm91dGluZV9pbml0KCZ0LCBjbG9iYmVyLCAmcywgc3RhY2spOwor CQljb3JvdXRpbmVfc3dpdGNoKCZzLnJldCwgJnQpOworCQlvazEocy50b3RhbCAhPSAwKTsKKwl9 IGVsc2UgeworCQlza2lwKDEsICJDb3JvdXRpbmVzIG5vdCBhdmFpbGFibGUiKTsKKwl9CisKKwlv azEoY29yb3V0aW5lX3N0YWNrX3RvX21ldGFkYXRhKHN0YWNrLCBzaXplb2YoKm1ldGEpKSA9PSBt ZXRhKTsKKwlvazEoY29yb3V0aW5lX3N0YWNrX2Zyb21fbWV0YWRhdGEobWV0YSwgc2l6ZW9mKCpt ZXRhKSkgPT0gc3RhY2spOworCW9rMShtZXRhLT5tYWdpYyA9PSBNRVRBX01BR0lDKTsKK30KKwor aW50IG1haW4odm9pZCkKK3sKKwljaGFyIGJ1ZltCVUZTSVpFXTsKKwlzdHJ1Y3QgY29yb3V0aW5l X3N0YWNrICpzdGFjazsKKworCS8qIFRoaXMgaXMgaG93IG1hbnkgdGVzdHMgeW91IHBsYW4gdG8g cnVuICovCisJcGxhbl90ZXN0cyg5KTsKKworCS8qIEZpeCBzZWVkIHNvIHdlIGdldCBjb25zaXN0 ZW50LCB0aG91Z2ggcHNldWRvLXJhbmRvbSByZXN1bHRzICovCQorCXNyYW5kb20oMCk7CisKKwlz dGFjayA9IGNvcm91dGluZV9zdGFja19pbml0KGJ1Ziwgc2l6ZW9mKGJ1ZiksIHNpemVvZihzdHJ1 Y3QgbWV0YWRhdGEpKTsKKwlvazEoc3RhY2sgIT0gTlVMTCk7CisJb2sxKGNvcm91dGluZV9zdGFj a19jaGVjayhzdGFjaywgTlVMTCkgPT0gc3RhY2spOworCW9rMShjb3JvdXRpbmVfc3RhY2tfc2l6 ZShzdGFjaykKKwkgICAgPT0gQlVGU0laRSAtIENPUk9VVElORV9TVEtfT1ZFUkhFQUQgLSBzaXpl b2Yoc3RydWN0IG1ldGFkYXRhKSk7CisKKwl0ZXN0X21ldGFkYXRhKHN0YWNrKTsKKworCWNvcm91 dGluZV9zdGFja19yZWxlYXNlKHN0YWNrKTsKKworCS8qIFRoaXMgZXhpdHMgZGVwZW5kaW5nIG9u IHdoZXRoZXIgYWxsIHRlc3RzIHBhc3NlZCAqLworCXJldHVybiBleGl0X3N0YXR1cygpOworfQot LSAKMi45LjMKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CmNjYW4gbWFpbGluZyBsaXN0CmNjYW5AbGlzdHMub3psYWJzLm9yZwpodHRwczovL2xpc3RzLm96 bGFicy5vcmcvbGlzdGluZm8vY2Nhbgo=