From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [202.204.80.6] (helo=bit.edu.cn) by canuck.infradead.org with esmtp (Exim 4.52 #1 (Red Hat Linux)) id 1E74N7-0002E0-LZ for linux-mtd@lists.infradead.org; Mon, 22 Aug 2005 00:57:29 -0400 Message-ID: <324685678.22043@bit.edu.cn> From: "ÂíÔÆ" To: linux-mtd@lists.infradead.org Date: Mon, 22 Aug 2005 12:41:18 +0800 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_1124685678_22041.attach" Subject: [PATCH] XATTR support in JFFS2 Reply-To: ÂíÔÆ List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , ------=_1124685678_22041.attach Content-Type: text/plain Hi! I've implemented the extended attributes for JFFS2. The implementation mechanism is simple, but it can work:). This implementation support standard extended attributes system call, such as setxattr, getxattr .... but does not support ACL. The patch is based on Linux-2.6.10 Comments are welcome... Signed-off-by: Yun Ma =========================== Best Regards Yun Ma ------=_1124685678_22041.attach Content-Type: text/plain; name="patch-jffs2-xattr.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="patch-jffs2-xattr.patch" ZGlmZiAtdU5yIGxpbnV4LTIuNi4xMC5teGMvZnMvamZmczIvZmlsZS5jIGxpbnV4LTIuNi4x MC5qZmZzMi9mcy9qZmZzMi9maWxlLmMKLS0tIGxpbnV4LTIuNi4xMC5teGMvZnMvamZmczIv ZmlsZS5jCTIwMDUtMDgtMTkgMTU6NDA6MjYuMDAwMDAwMDAwICswODAwCisrKyBsaW51eC0y LjYuMTAuamZmczIvZnMvamZmczIvZmlsZS5jCTIwMDUtMDgtMTkgMTU6NDg6NDAuMDAwMDAw MDAwICswODAwCkBAIC0yMCw2ICsyMCw5IEBACiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5o PgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAjaW5jbHVkZSA8bGludXgvamZmczIuaD4K KyNpZmRlZiBDT05GSUdfSkZGUzJfRlNfWEFUVFIKKyNpbmNsdWRlIDxsaW51eC9qZmZzMl94 YXR0ci5oPgorI2VuZGlmCiAjaW5jbHVkZSAibm9kZWxpc3QuaCIKIAogZXh0ZXJuIGludCBn ZW5lcmljX2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKikgX19hdHRy aWJ1dGVfXygod2VhaykpOwpAQCAtNTUsNiArNTgsMTIgQEAKIAogc3RydWN0IGlub2RlX29w ZXJhdGlvbnMgamZmczJfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0KIHsKKyNpZmRlZiBDT05G SUdfSkZGUzJfRlNfWEFUVFIKKyAgICAgICAgLnNldHhhdHRyID0gamZmczJfc2V0eGF0dHIs CisgICAgICAgIC5nZXR4YXR0ciA9IGpmZnMyX2dldHhhdHRyLAorICAgICAgICAubGlzdHhh dHRyID0gamZmczJfbGlzdHhhdHRyLAorICAgICAgICAucmVtb3ZleGF0dHIgPSBqZmZzMl9y ZW1vdmV4YXR0ciwKKyNlbmRpZgogCS5zZXRhdHRyID0JamZmczJfc2V0YXR0cgogfTsKIApk aWZmIC11TnIgbGludXgtMi42LjEwLm14Yy9mcy9qZmZzMi9NYWtlZmlsZSBsaW51eC0yLjYu MTAuamZmczIvZnMvamZmczIvTWFrZWZpbGUKLS0tIGxpbnV4LTIuNi4xMC5teGMvZnMvamZm czIvTWFrZWZpbGUJMjAwNS0wOC0xOSAxNTo0MDoyNi4wMDAwMDAwMDAgKzA4MDAKKysrIGxp bnV4LTIuNi4xMC5qZmZzMi9mcy9qZmZzMi9NYWtlZmlsZQkyMDA1LTA4LTE5IDE1OjQ0OjM5 LjAwMDAwMDAwMCArMDgwMApAQCAtMTEsNiArMTEsNyBAQAogamZmczIteQkrPSBzeW1saW5r Lm8gYnVpbGQubyBlcmFzZS5vIGJhY2tncm91bmQubyBmcy5vIHdyaXRldi5vCiBqZmZzMi15 CSs9IHN1cGVyLm8KIAoramZmczItJChDT05GSUdfSkZGUzJfRlNfWEFUVFIpCSs9IHhhdHRy Lm8KIGpmZnMyLSQoQ09ORklHX0pGRlMyX0ZTX05BTkQpCSs9IHdidWYubwogamZmczItJChD T05GSUdfSkZGUzJfRlNfTk9SX0VDQykgKz0gd2J1Zi5vCiBqZmZzMi0kKENPTkZJR19KRkZT Ml9SVUJJTikJKz0gY29tcHJfcnViaW4ubwpkaWZmIC11TnIgbGludXgtMi42LjEwLm14Yy9m cy9qZmZzMi9ub2RlbGlzdC5jIGxpbnV4LTIuNi4xMC5qZmZzMi9mcy9qZmZzMi9ub2RlbGlz dC5jCi0tLSBsaW51eC0yLjYuMTAubXhjL2ZzL2pmZnMyL25vZGVsaXN0LmMJMjAwNS0wOC0x OSAxNTo0MDoyNi4wMDAwMDAwMDAgKzA4MDAKKysrIGxpbnV4LTIuNi4xMC5qZmZzMi9mcy9q ZmZzMi9ub2RlbGlzdC5jCTIwMDUtMDgtMTkgMTU6NDc6MTIuMDAwMDAwMDAwICswODAwCkBA IC0xNzMsNiArMTczLDcgQEAKIAkJCQlnb3RvIGZyZWVfb3V0OwogCQkJfQogCQkJLyogc2Fu aXR5IGNoZWNrICovCisJCQkjaWZuZGVmIENPTkZJR19KRkZTMl9GU19YQVRUUgogCQkJaWYg KFBBRCgobm9kZS5kLm5zaXplICsgc2l6ZW9mIChub2RlLmQpKSkgIT0gUEFEKGplMzJfdG9f Y3B1IChub2RlLmQudG90bGVuKSkpIHsKIAkJCQlwcmludGsoS0VSTl9OT1RJQ0UgImpmZnMy X2dldF9pbm9kZV9ub2RlcygpOiBJbGxlZ2FsIG5zaXplIGluIG5vZGUgYXQgMHglMDh4OiBu c2l6ZSAweCUwMngsIHRvdGxlbiAlMDR4XG4iLAogCQkJCSAgICAgICByZWZfb2Zmc2V0KHJl ZiksIG5vZGUuZC5uc2l6ZSwgamUzMl90b19jcHUobm9kZS5kLnRvdGxlbikpOwpAQCAtMTgw LDYgKzE4MSw3IEBACiAJCQkJc3Bpbl9sb2NrKCZjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2sp OwogCQkJCWNvbnRpbnVlOwogCQkJfQorCQkJI2VuZGlmCiAJCQlpZiAoamUzMl90b19jcHUo bm9kZS5kLnZlcnNpb24pID4gKmhpZ2hlc3RfdmVyc2lvbikKIAkJCQkqaGlnaGVzdF92ZXJz aW9uID0gamUzMl90b19jcHUobm9kZS5kLnZlcnNpb24pOwogCQkJaWYgKHJlZl9vYnNvbGV0 ZShyZWYpKSB7CmRpZmYgLXVOciBsaW51eC0yLjYuMTAubXhjL2ZzL2pmZnMyL3hhdHRyLmMg bGludXgtMi42LjEwLmpmZnMyL2ZzL2pmZnMyL3hhdHRyLmMKLS0tIGxpbnV4LTIuNi4xMC5t eGMvZnMvamZmczIveGF0dHIuYwkxOTcwLTAxLTAxIDA4OjAwOjAwLjAwMDAwMDAwMCArMDgw MAorKysgbGludXgtMi42LjEwLmpmZnMyL2ZzL2pmZnMyL3hhdHRyLmMJMjAwNS0wOC0xOSAx NjoxNzoyOS4wMDAwMDAwMDAgKzA4MDAKQEAgLTAsMCArMSw0NjcgQEAKKy8qCisgKgorICog Q29weXJpZ2h0IDIwMDUgTW90b3JvbGEsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAq IAorICogQ3JlYXRlZCBieSBNYSB5dW4gPHl1bm1hQHNjLm1jZWwubW90LmNvbT4KKyAqCisg KiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisg KiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp dGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisg KiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9u LCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5o PgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgor I2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgveGF0dHIuaD4KKyNpbmNs dWRlIDxsaW51eC9jcmMzMi5oPgorI2luY2x1ZGUgPGxpbnV4L2pmZnMyLmg+CisjaW5jbHVk ZSA8bGludXgvamZmczJfZnNfaS5oPgorI2luY2x1ZGUgPGxpbnV4L2pmZnMyX2ZzX3NiLmg+ CisjaW5jbHVkZSA8bGludXgvamZmczJfeGF0dHIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQv bXRkLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgIm5vZGVsaXN0Lmgi CisKKworc3RydWN0IHhhdHRyX2J1ZmZlciB7CisJaW50IHNpemU7CQkJCS8qIHRoZSBzaXpl IG9mIGN1cnJlbnQgdXNlICBidWZmZXIgKi8KKwlzdHJ1Y3QgamZmczJfeGF0dHJfbGlzdCAq eGF0dHI7CQkvKiBidWZmZXIgY29udGFpbmluZyBFQXMgbGlzdCAqLworfTsKKworc3RhdGlj IGludCBlYV9nZXQoc3RydWN0IGRlbnRyeSAqcGFyZW50LCBzdHJ1Y3QgaW5vZGUgKmlub2Rl LCBzdHJ1Y3QgeGF0dHJfYnVmZmVyICplYV9idWYsIGludCBtaW5fc2l6ZSkKK3sKKwlzdHJ1 Y3QgamZmczJfc2JfaW5mbyAqYyA9IEpGRlMyX1NCX0lORk8oaW5vZGUtPmlfc2IpOworCXN0 cnVjdCBqZmZzMl9pbm9kZV9pbmZvICpmID0gSkZGUzJfSU5PREVfSU5GTyhpbm9kZSksICpw OworCXN0cnVjdCBqZmZzMl9yYXdfZGlyZW50CWZpbmRub2RlOworCXN0cnVjdCBqZmZzMl9y YXdfbm9kZV9yZWYgKnJhdyA9IE5VTEw7CisJc3RydWN0IGpmZnMyX2Z1bGxfZGlyZW50ICpm ZF9saXN0ID0gTlVMTDsKKwlzaXplX3QgcmVhZGxlbjsKKwlpbnQgc2l6ZTsKKwl1aW50MzJf dCBvZmZzZXQgPSAwOwkKKwl1aW50MzJfdCBpbm8gPSBmLT5pbm9jYWNoZS0+aW5vOworCWlu dAltZW1fc2l6ZSA9IDA7CisJaW50CXJldCA9IDA7CQorCWludAluX3ZlcnNpb24gPTAgOwor CisJbWVtc2V0KCZmaW5kbm9kZSwgMCwgc2l6ZW9mKGZpbmRub2RlKSk7CisJLyogbG9va3Vw IHRoZSBkaXJlbnQgbGlzdCBhbmQgZmluZCByYXcgZGlyZW50Ki8KKworCXAgPSBKRkZTMl9J Tk9ERV9JTkZPKHBhcmVudC0+ZF9pbm9kZSk7CisJZG93bigmcC0+c2VtKTsKKwlmb3IoZmRf bGlzdCA9IHAtPmRlbnRzOyBmZF9saXN0OyBmZF9saXN0ID0gZmRfbGlzdC0+bmV4dCl7CisJ CWlmIChmZF9saXN0LT5pbm8gPT0gaW5vICYmIGZkX2xpc3QtPnZlcnNpb24gPj0gbl92ZXJz aW9uKSBuX3ZlcnNpb24gPSBmZF9saXN0LT52ZXJzaW9uOworCX0KKworCWZvcihmZF9saXN0 ID0gcC0+ZGVudHM7IGZkX2xpc3Q7IGZkX2xpc3QgPSBmZF9saXN0LT5uZXh0KXsKKyAgICAg ICAgICAgICAgICBpZiAoZmRfbGlzdC0+aW5vID09IGlubyAmJiBmZF9saXN0LT52ZXJzaW9u ID09IG5fdmVyc2lvbikgYnJlYWs7CisgICAgICAgIH0KKwkKKwlpZiAoZmRfbGlzdC0+aW5v ID09IGlubykgeworCQlmb3IocmF3ID0gZmRfbGlzdC0+cmF3OyByYXcgJiYgcmF3LT5uZXh0 X2luX2lubzsgcmF3ID0gcmF3LT5uZXh0X2luX2lubyl7CisJCQlvZmZzZXQgPSByZWZfb2Zm c2V0KHJhdyk7CisJCQlyZXQgPSBqZmZzMl9mbGFzaF9yZWFkKGMsIG9mZnNldCwgc2l6ZW9m KGZpbmRub2RlKSwgJnJlYWRsZW4sKGNoYXIgKikmZmluZG5vZGUpOworCQkJaWYgKHJlYWRs ZW4gIT0gc2l6ZW9mKGZpbmRub2RlKSB8fCByZXQpIHsKKwkJCQl1cCgmcC0+c2VtKTsKKwkJ CQlwcmludGsoS0VSTl9XQVJOSU5HIkVycm9yIHJlYWRpbmcgbm9kZSBmcm9tIDB4JTA4eDog JWRcbiIsb2Zmc2V0LHJldCk7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJCWlmICgoamUz Ml90b19jcHUoZmluZG5vZGUuaW5vKSA9PSBpbm8pICYmIGplMTZfdG9fY3B1KGZpbmRub2Rl Lm5vZGV0eXBlKSA9PSBKRkZTMl9OT0RFVFlQRV9ESVJFTlQpIGJyZWFrOworCQl9CisJfSBl bHNlIHsKKwkJdXAoJnAtPnNlbSk7CisJCXByaW50ayhLRVJOX1dBUk5JTkciZWFfZ2V0OiBj YW4gbm90IGZpbmQgdGhlIGZpbGUiICk7CisJCXJldHVybiAtMTsKKwl9CisJdXAoJnAtPnNl bSk7CisJLyogYWN0dWFsbHksIHdlIHNob3VsZCBjaGVjayBDUkMgKi8KKwkKKwkvKiBlbmQg b2YgQ1JDIGNoZWNrICovCisJc2l6ZSA9IGplMzJfdG9fY3B1KGZpbmRub2RlLnRvdGxlbikg LSAoZmluZG5vZGUubnNpemUpIC0gc2l6ZW9mKGZpbmRub2RlKTsKKwltZW1fc2l6ZSA9IG1h eChzaXplLCBtaW5fc2l6ZSk7CisJaWYgKCFtZW1fc2l6ZSkgeworCQllYV9idWYtPnNpemUg PSAwOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQkvKiBhbGxvYGNhdGUgYSBidWZmZXIg dG8gd29yayB3aXRoICovCisJCWVhX2J1Zi0+c2l6ZSA9IG1lbV9zaXplOworCQllYV9idWYt PnhhdHRyID0ga21hbGxvYyhtZW1fc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCQorCQlpZiAoZWFf YnVmLT54YXR0ciA9PSBOVUxMKSB7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQkvKiBj b3B5IHJkIEVBcyB0byBlYV9idWYgKi8KKwkJb2Zmc2V0ID0gcmVmX29mZnNldChyYXcpOwor CQlyZXQgPSBqZmZzMl9mbGFzaF9yZWFkKGMsIG9mZnNldCArIHNpemVvZihmaW5kbm9kZSkg KyBmaW5kbm9kZS5uc2l6ZSwgc2l6ZSwgJnJlYWRsZW4sIChjaGFyICopZWFfYnVmLT54YXR0 cik7CisJCWlmIChyZXR8fCByZWFkbGVuICE9IHNpemUpeworCQkJcHJpbnRrKEtFUk5fV0FS TklORyJFcnJvciByZWFkaW5nIG5vZGUgZm9ybSAweCUwOHg6ICVkXG4iLCBvZmZzZXQsIHJl dCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCXJldHVybiBzaXplOwkKKwl9IAkKK30KKwor CitzdGF0aWMgaW50IGVhX3B1dChzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIHN0cnVjdCBpbm9k ZSAqaW5vZGUsIHN0cnVjdCB4YXR0cl9idWZmZXIgKmVhX2J1ZiwgaW50IG5ld19zaXplKQor eworCXN0cnVjdCBqZmZzMl9zYl9pbmZvICpjID0gSkZGUzJfU0JfSU5GTyhpbm9kZS0+aV9z Yik7CQorCXN0cnVjdCBqZmZzMl9pbm9kZV9pbmZvICpmID0gSkZGUzJfSU5PREVfSU5GTyhp bm9kZSksICpwOworCXN0cnVjdCBqZmZzMl9yYXdfZGlyZW50ICpyZCwgZmluZG5vZGU7Cisg ICAgICAgIHN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKnJhdzsKKyAgICAgICAgc3RydWN0 IGpmZnMyX2Z1bGxfZGlyZW50ICpmZCwgKmZkX2xpc3QgPSBOVUxMOworCXVpbnQzMl90IGRp cmVudGxlbiwgb2Zmc2V0LCBhbGxvY2xlbiwgcmVhZGxlbjsKKwlpbnQgcmV0ID0gMDsKKwlj aGFyICpuYW1lLCAqd3JpdGVfYnVmID0gTlVMTDsKKwlpbnQgbmFtZWxlbiA9IDA7CisJdWlu dDMyX3QgaW5vID0gZi0+aW5vY2FjaGUtPmlubzsKKwlpbnQgICAgIG5fdmVyc2lvbiA9MCA7 CisKKwltZW1zZXQoJmZpbmRub2RlLCAwLCBzaXplb2YoZmluZG5vZGUpKTsKKwkvKiBsb29r dXAgdGhlIGRpcmVudCBsaXN0IGFuZCBmaW5kIHJhdyBkaXJlbnQqLworICAgICAgICBwID0g SkZGUzJfSU5PREVfSU5GTyhwYXJlbnQtPmRfaW5vZGUpOworICAgICAgIAlkb3duKCZwLT5z ZW0pOyAKKwkKKwlmb3IoZmRfbGlzdCA9IHAtPmRlbnRzOyBmZF9saXN0OyBmZF9saXN0ID0g ZmRfbGlzdC0+bmV4dCl7CisgICAgICAgICAgICAgICAgaWYgKGZkX2xpc3QtPmlubyA9PSBp bm8gJiYgZmRfbGlzdC0+dmVyc2lvbiA+PSBuX3ZlcnNpb24pIG5fdmVyc2lvbiA9IGZkX2xp c3QtPnZlcnNpb247CisgICAgICAgIH0KKworCWZvcihmZF9saXN0ID0gcC0+ZGVudHM7IGZk X2xpc3Q7IGZkX2xpc3QgPSBmZF9saXN0LT5uZXh0KQorICAgICAgICAgICAgICAgIGlmIChm ZF9saXN0LT5pbm8gPT0gaW5vICYmIGZkX2xpc3QtPnZlcnNpb24gPT0gZmRfbGlzdC0+dmVy c2lvbikgYnJlYWs7CisKKyAgICAgICAgaWYgKGZkX2xpc3QtPmlubyA9PSBpbm8peworICAg ICAgICAgICAgICAgIGZvcihyYXcgPSBmZF9saXN0LT5yYXc7IHJhdyAmJiByYXctPm5leHRf aW5faW5vOyByYXcgPSByYXctPm5leHRfaW5faW5vKSB7CisgICAgICAgICAgICAgICAgICAg ICAgICBvZmZzZXQgPSByZWZfb2Zmc2V0KHJhdyk7CisgICAgICAgICAgICAgICAgICAgICAg ICByZXQgPSBqZmZzMl9mbGFzaF9yZWFkKGMsIG9mZnNldCwgc2l6ZW9mKGZpbmRub2RlKSwg JnJlYWRsZW4sKGNoYXIgKikmZmluZG5vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAg aWYgKHJldHx8cmVhZGxlbiAhPSBzaXplb2YoZmluZG5vZGUpKSB7CisJCQkJdXAoJnAtPnNl bSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5J TkciRXJyb3IgcmVhZGluZyBub2RlIGZyb20gMHglMDh4OiAlZFxuIixvZmZzZXQscmV0KTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoamUzMl90 b19jcHUoZmluZG5vZGUuaW5vKSA9PSBpbm8pICYmIGplMTZfdG9fY3B1KGZpbmRub2RlLm5v ZGV0eXBlKSA9PSBKRkZTMl9OT0RFVFlQRV9ESVJFTlQpIGJyZWFrOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKwkJdXAoJnAtPnNlbSk7CisgICAgICAgICAgICAg ICAgcHJpbnRrKEtFUk5fV0FSTklORyJlYV9wdXQ6IGNhbiBub3QgZmluZCB0aGUgZmlsZSIg KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKwl1cCgmcC0+c2Vt KTsKKwkKKwluYW1lbGVuID0gZmluZG5vZGUubnNpemU7CisKKwkvKiBhbGxvYyB3cml0ZV9i dWYgZm9yIHdyaXRlIGZsYXNoICovCQorCXdyaXRlX2J1ZiAgPSBrbWFsbG9jKG5hbWVsZW4g KyBuZXdfc2l6ZSwgR0ZQX0tFUk5FTCk7CisgICAgICAgIGlmICghd3JpdGVfYnVmKSB7Cisg ICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisgICAgICAgIH0KKwkvKiBnZXQgdGhl IG5hbWUgaW4gd3JpdGVfYnVmICovCisgICAgICAgIHJldCA9IGpmZnMyX2ZsYXNoX3JlYWQo Yywgb2Zmc2V0ICsgc2l6ZW9mKGZpbmRub2RlKSwgZmluZG5vZGUubnNpemUsICZyZWFkbGVu LCB3cml0ZV9idWYpOyAgICAgICAgCisJaWYgKHJldHx8cmVhZGxlbiAhPSBmaW5kbm9kZS5u c2l6ZSl7CisJCXByaW50ayhLRVJOX1dBUk5JTkciRXJyb3IgcmVhZGluZyBub2RlIGZvcm0g MHglMDh4OiAlZFxuIiwgb2Zmc2V0LCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwkvKiBn ZXQgdGhlIG5hbWUgaW4gIm5hbWUiICovCisJbmFtZSA9IGttYWxsb2MobmFtZWxlbiArIDEs IEdGUF9LRVJORUwpOworCWlmICghbmFtZSkgeworCQlpZiAod3JpdGVfYnVmKQorCQkJa2Zy ZWUod3JpdGVfYnVmKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbWNweShuYW1lLCB3 cml0ZV9idWYsIG5hbWVsZW4pOworCS8qIGZpbmQgdGhlIHNwYWNlIGZvciB3cml0ZSAqLwor CWRpcmVudGxlbiA9IHNpemVvZihmaW5kbm9kZSkgKyBuYW1lbGVuICsgbmV3X3NpemU7CisJ cmV0ID0gamZmczJfcmVzZXJ2ZV9zcGFjZShjLCBkaXJlbnRsZW4sICZvZmZzZXQsICZhbGxv Y2xlbiwgQUxMT0NfTk9STUFMKTsKKwlpZiAocmV0KSB7CisJCXJldHVybiByZXQ7CisJfQor CS8qIGFsbG9jIHRoZSByYXdfZGlyZW50IGNhY2hlICovCisJcmQgPSBqZmZzMl9hbGxvY19y YXdfZGlyZW50KCk7CisJaWYgKCFyZCkgeworCQlpZiAod3JpdGVfYnVmKQorCQkJa2ZyZWUo d3JpdGVfYnVmKTsKKwkJaWYgKG5hbWUpCisJCQlrZnJlZShuYW1lKTsKKwkJcmV0dXJuIC1F Tk9NRU07CisJfQorCisJZG93bigmcC0+c2VtKTsKKwkKKwlyZC0+bWFnaWMgPSBjcHVfdG9f amUxNihKRkZTMl9NQUdJQ19CSVRNQVNLKTsKKwlyZC0+bm9kZXR5cGUgPSBjcHVfdG9famUx NihKRkZTMl9OT0RFVFlQRV9ESVJFTlQpOworCXJkLT50b3RsZW4gPSBjcHVfdG9famUzMihk aXJlbnRsZW4pOworCXJkLT5oZHJfY3JjID0gY3B1X3RvX2plMzIoY3JjMzIoMCwgcmQsIHNp emVvZihzdHJ1Y3QgamZmczJfdW5rbm93bl9ub2RlKSAtIDQpKTsKKwkKKwlyZC0+cGlubyA9 IGNwdV90b19qZTMyKHAtPmlub2NhY2hlLT5pbm8pOworCXJkLT52ZXJzaW9uID0gY3B1X3Rv X2plMzIoKytwLT5oaWdoZXN0X3ZlcnNpb24pOworCXJkLT5pbm8JPSBmaW5kbm9kZS5pbm87 CisJcmQtPm1jdGltZSA9IGNwdV90b19qZTMyKGdldF9zZWNvbmRzKCkpOworCXJkLT5uc2l6 ZSA9IG5hbWVsZW47CisJcmQtPnVudXNlZFswXSA9IGVhX2J1Zi0+c2l6ZTsKKwkvKiBmaXgg bWUqLworCW1lbWNweSgmKHdyaXRlX2J1ZltuYW1lbGVuXSksIGVhX2J1Zi0+eGF0dHIsIG5l d19zaXplKTsKKwlyZC0+dHlwZSA9IGZpbmRub2RlLnR5cGU7CisJcmQtPm5vZGVfY3JjID0g Y3B1X3RvX2plMzIoY3JjMzIoMCwgcmQsIHNpemVvZigqcmQpIC0gOCkpOworCXJkLT5uYW1l X2NyYyA9IGNwdV90b19qZTMyKGNyYzMyKDAsIHdyaXRlX2J1ZiwgbmFtZWxlbikpOworCQor CWZkID0gamZmczJfd3JpdGVfZGlyZW50KGMsIHAsIHJkLCB3cml0ZV9idWYsIG5hbWVsZW4g KyBuZXdfc2l6ZSwgb2Zmc2V0LCBBTExPQ19OT1JNQUwpOworCS8qIHJlc3RvcmUgdGhlIG5h bWUgKi8KKwlmZC0+bmhhc2ggPSBmdWxsX25hbWVfaGFzaChuYW1lLCBuYW1lbGVuKTsKKwlm ZC0+bmFtZVtuYW1lbGVuXSA9IDA7CisJaWYgKElTX0VSUihmZCkpIHsKKwkJaWYgKHdyaXRl X2J1ZikgCisJCQlrZnJlZSh3cml0ZV9idWYpOworCQlpZiAobmFtZSkKKwkJCWtmcmVlKG5h bWUpOworCQlqZmZzMl9mcmVlX3Jhd19kaXJlbnQocmQpOworCQlqZmZzMl9jb21wbGV0ZV9y ZXNlcnZhdGlvbihjKTsKKwkJdXAoJnAtPnNlbSk7CisJCXJldHVybiBQVFJfRVJSKGZkKTsK Kwl9CisJamZmczJfYWRkX2ZkX3RvX2xpc3QoYywgZmQsICZwLT5kZW50cyk7CisJamZmczJf Y29tcGxldGVfcmVzZXJ2YXRpb24oYyk7CisJamZmczJfZnJlZV9yYXdfZGlyZW50KHJkKTsK Kwl1cCgmcC0+c2VtKTsKKwlpZiAod3JpdGVfYnVmKSAKKwkJa2ZyZWUod3JpdGVfYnVmKTsK KwlpZiAobmFtZSkKKwkJa2ZyZWUobmFtZSk7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0 aWMgdm9pZCBlYV9yZWxlYXNlKHN0cnVjdCB4YXR0cl9idWZmZXIgKmVhX2J1ZikKK3sKKwlp ZiAoZWFfYnVmLT5zaXplKSAKKwkJa2ZyZWUoZWFfYnVmLT54YXR0cik7Cit9Citzc2l6ZV90 IGpmZnMyX2dldHhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFt ZSwgdm9pZCAqZGF0YSwgc2l6ZV90IGJ1Zl9zaXplKQoreworCXN0cnVjdCBpbm9kZSAqaW5v ZGUgPSBkZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGRlbnRyeSAqcGFyZW50OworCXN0cnVj dCBqZmZzMl94YXR0cl9saXN0ICplYWxpc3Q7CisJc3RydWN0IGpmZnMyX3hhdHRyCSplYTsK KwlzdHJ1Y3QgeGF0dHJfYnVmZmVyCWVhX2J1ZjsKKwlpbnQgeGF0dHJfc2l6ZTsKKwlzc2l6 ZV90CXNpemU7CisJaW50IG5hbWVsZW4gPSBzdHJsZW4obmFtZSk7CisJY2hhciAqdmFsdWU7 CisKKwlpZiAobmFtZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCUQxKHByaW50 ayhLRVJOX0RFQlVHImpmZnMyX2dldHhhdHRyOiBuYW1lPSVzLCBidWZmZXI9JXAsIGJ1ZmZl cl9zaXplPSVsZCIsbmFtZSxkYXRhLChsb25nKWJ1Zl9zaXplKSk7CisKKy8vCWRvd25fcmVh ZCgmSkZGUzJfSU5PREVfSU5GTyhpbm9kZSktPnhhdHRyX3NlbSk7CisJcGFyZW50ID0gZGVu dHJ5LT5kX3BhcmVudDsKKwl4YXR0cl9zaXplID0gZWFfZ2V0KHBhcmVudCwgaW5vZGUsICZl YV9idWYsIDApOworCWlmICh4YXR0cl9zaXplIDwgMCkgeworCQlzaXplID0geGF0dHJfc2l6 ZTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHhhdHRyX3NpemUgPT0gMCkgeworCQlnb3Rv IG5vdF9mb3VuZDsKKwl9CisKKwllYWxpc3QgPSAoc3RydWN0IGpmZnMyX3hhdHRyX2xpc3Qg KillYV9idWYueGF0dHI7CisJCisJLyogRmluZCB0aGUgbmFtZWQgYXR0cmlidXRlKi8KKwlm b3IgKGVhPUZJUlNUX1hBVFRSKGVhbGlzdCk7IGVhIDwgRU5EX1hBVFRSKGVhbGlzdCx4YXR0 cl9zaXplKTsgZWEgPSBORVhUX1hBVFRSKGVhKSkKKwkJaWYgKChuYW1lbGVuID09IGVhLT5u YW1lbGVuKSAmJgorCQkJbWVtY21wKG5hbWUsZWEtPm5hbWUsbmFtZWxlbik9PTApIHsKKwkJ LyogRm91bmQgKi8KKwkJc2l6ZSA9IGVhLT52YWx1ZWxlbjsKKwkJaWYgKCFkYXRhKQorCQkJ Z290byByZWxlYXNlOworCQllbHNlIGlmIChzaXplID4gYnVmX3NpemUpIHsKKwkJCXNpemUg PSAtRVJBTkdFOworCQkJZ290byByZWxlYXNlOworCQl9CisJCXZhbHVlID0gKChjaGFyICop JmVhLT5uYW1lKSArIGVhLT5uYW1lbGVuICsgMTsKKwkJbWVtY3B5KGRhdGEsdmFsdWUsc2l6 ZSk7CisJCWdvdG8gcmVsZWFzZTsKKwl9Citub3RfZm91bmQ6CisJZGF0YSA9IE5VTEw7CisJ c2l6ZSA9IC1FTk9EQVRBOworcmVsZWFzZToKKwllYV9yZWxlYXNlKCZlYV9idWYpOworb3V0 OgorLy8JdXBfcmVhZCgmSkZGUzJfSU5PREVfSU5GTyhpbm9kZSktPnhhdHRyX3NlbSk7CisJ cmV0dXJuIHNpemU7Cit9CisKK2ludCBqZmZzMl9zZXR4YXR0cihzdHJ1Y3QgZGVudHJ5ICpk ZW50cnksIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3QgdmFs dWVfbGVuLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ ZF9pbm9kZTsKKwlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQ7CisJc3RydWN0IGpmZnMyX3hhdHRy X2xpc3QgKmVhbGlzdDsKKwlzdHJ1Y3QgamZmczJfeGF0dHIJKmVhLCAqb2xkX2VhID0gTlVM TCwgKm5leHRfZWEgPSBOVUxMOwkJCQorCXN0cnVjdCB4YXR0cl9idWZmZXIJZWFfYnVmOwor CWludCBmb3VuZD0wOworCWludCB4YXR0cl9zaXplID0gMDsKKwlpbnQgbmFtZWxlbiA9IHN0 cmxlbihuYW1lKTsKKwlpbnQgb2xkX2VhX3NpemUgPSAwOworCWludCBuZXdfc2l6ZTsJCQkv KiB0aGUgc2l6ZSBvZiBuZXcgRUFzICovCisJaW50IGxlbmd0aDsKKwlpbnQgcmV0OworCQor CWlmICh2YWx1ZSA9PSBOVUxMIHx8IHZhbHVlX2xlbiA9PSAwKSB7CisJCXZhbHVlID0gIiI7 CisJCXZhbHVlX2xlbiA9IDA7CisJfQorCQorCXBhcmVudCA9IGRlbnRyeS0+ZF9wYXJlbnQ7 CisJLyogcmVhZCB0aGUgaW5vZGUncyBFQXMgKi8KKwl4YXR0cl9zaXplID0gZWFfZ2V0KHBh cmVudCwgaW5vZGUsICZlYV9idWYsIDApOworCWlmICh4YXR0cl9zaXplIDwgMCkgeworCQly ZXQgPSB4YXR0cl9zaXplOworCQlnb3RvIG91dDsKKwl9CisKKyAgYWdhaW46CisJZWFsaXN0 ID0gKHN0cnVjdCBqZmZzMl94YXR0cl9saXN0ICopZWFfYnVmLnhhdHRyOworCW5ld19zaXpl ID0gc2l6ZW9mKHN0cnVjdCBqZmZzMl94YXR0cl9saXN0KTsKKworCWlmICh4YXR0cl9zaXpl KSB7CisJCWZvciAoZWEgPSBGSVJTVF9YQVRUUihlYWxpc3QpOyBlYSA8IEVORF9YQVRUUihl YWxpc3QseGF0dHJfc2l6ZSk7IGVhID0gTkVYVF9YQVRUUihlYSkpIHsKKwkJCWlmICgobmFt ZWxlbiA9PSBlYS0+bmFtZWxlbikgJiYKKwkJCQkobWVtY21wKG5hbWUsIGVhLT5uYW1lLG5h bWVsZW4pID09IDApKSB7CisJCQkJZm91bmQgPSAxOworCQkJCWlmIChmbGFncyAmIFhBVFRS X0NSRUFURSkgeworCQkJCQlyZXQgPSAtRUVYSVNUOworCQkJCQlnb3RvIHJlbGVhc2U7CisJ CQkJfQorCQkJCW9sZF9lYSA9IGVhOworCQkJCW9sZF9lYV9zaXplID0gSkZGUzJfWEFUVFJf U0laRShlYSk7CisJCQkJbmV4dF9lYSA9IE5FWFRfWEFUVFIoZWEpOworCQkJfSBlbHNlIAor CQkJCW5ld19zaXplICs9IEpGRlMyX1hBVFRSX1NJWkUoZWEpOworCQl9CisJfQorCQorCWlm ICghZm91bmQpIHsKKwkJaWYgKGZsYWdzICYgWEFUVFJfUkVQTEFDRSkgeworCQkJcmV0ID0g LUVOT0RBVEE7CisJCQlnb3RvIHJlbGVhc2U7CisJCX0KKwkJaWYgKHZhbHVlID09IE5VTEwp IHsKKwkJCXJldCA9IDA7CisJCQlnb3RvIHJlbGVhc2U7CisJCX0KKwl9CisJaWYgKHZhbHVl ICYmIHZhbHVlX2xlbikKKwkJbmV3X3NpemUgKz0gc2l6ZW9mKHN0cnVjdCBqZmZzMl94YXR0 cikgKyBuYW1lbGVuICsgMSArIHZhbHVlX2xlbjsKKwkKKwkvKiBjb21wYXJlIHdpdGggdGhl IHNpemUgb2YgY3VycmVudCBidWZmZXIgKi8KKwlpZiAobmV3X3NpemUgPiBlYV9idWYuc2l6 ZSkgeworCQkvKgorCQkgKiBXZSBuZWVkIHRvIHJlYWxsb2NhdGUgbW9yZSBzcGFjZSBmb3Ig bWVyZ2VkIGVhIGxpc3QKKwkJICovCisJCWVhX3JlbGVhc2UoJmVhX2J1Zik7CisJCXhhdHRy X3NpemUgPSBlYV9nZXQocGFyZW50LCBpbm9kZSwgJmVhX2J1ZiwgbmV3X3NpemUpOworCQlp ZiAoeGF0dHJfc2l6ZSA8IDApIHsKKwkJCXJldCA9IHhhdHRyX3NpemU7CisJCQlnb3RvIG91 dDsKKwkJfSAKKwkJZ290byBhZ2FpbjsJCisJfQorCisJLyogcmVtb3ZlIHRoZSBvbGQgZWEg b2YgdGhlIHNhbWUgbmFtZSAqLworCWlmIChmb3VuZCkgeworCQlsZW5ndGggPSAoY2hhciAq KUVORF9YQVRUUihlYWxpc3QseGF0dHJfc2l6ZSkgLSAoY2hhciAqKW5leHRfZWE7CisJCWlm IChsZW5ndGggPiAwKQorCQkJbWVtbW92ZShvbGRfZWEsbmV4dF9lYSxsZW5ndGgpOworCQl4 YXR0cl9zaXplIC09IG9sZF9lYV9zaXplOworCX0KKwkvKiBhZGQgbmV3IEVBIHRvIHRoZSBl bmQgKi8KKwlpZiAodmFsdWUgJiYgdmFsdWVfbGVuKSB7CisJCWVhID0gKHN0cnVjdCBqZmZz Ml94YXR0ciAqKSgoY2hhciAqKWVhbGlzdCArIHhhdHRyX3NpemUpOworCQllYS0+bmFtZWxl biA9IG5hbWVsZW47CisJCWVhLT52YWx1ZWxlbiA9IHZhbHVlX2xlbjsKKwkJbWVtY3B5KGVh LT5uYW1lLCBuYW1lLCBuYW1lbGVuKTsKKwkJZWEtPm5hbWVbbmFtZWxlbl0gPSAwOworCQlp ZiAodmFsdWVfbGVuKQorCQkJbWVtY3B5KGVhLT5uYW1lICsgbmFtZWxlbiArIDEsIHZhbHVl LCB2YWx1ZV9sZW4pOworCQl4YXR0cl9zaXplICs9IEpGRlMyX1hBVFRSX1NJWkUoZWEpOwkJ CisJfQorCS8qIERFR1VHKi8KKwlpZiAobmV3X3NpemUgIT0geGF0dHJfc2l6ZSkgeworCQlw cmludGsoS0VSTl9FUlIiamZmczJfc2V0eGF0dHI6IHhhdHRyX3NpemUgPSAlZCwgbmV3X3Np emUgPSAlZFxuIiwgeGF0dHJfc2l6ZSwgbmV3X3NpemUpOworCQlyZXQgPSAtRUlOVkFMOwor CQlnb3RvIHJlbGVhc2U7CisJfQorCWlmIChuZXdfc2l6ZSA9PSBzaXplb2Yoc3RydWN0IGpm ZnMyX3hhdHRyX2xpc3QpKQorCQluZXdfc2l6ZSA9IDA7CisJCisJcmV0ID0gZWFfcHV0KHBh cmVudCwgaW5vZGUsICZlYV9idWYsIG5ld19zaXplKTsKKwlnb3RvIG91dDsKKyAgIHJlbGVh c2U6CisJZWFfcmVsZWFzZSgmZWFfYnVmKTsKKyAgIG91dDoKKwkvL3VwX3dyaXRlKCZKRkZT Ml9JTk9ERV9JTkZPKGlub2RlKS0+eGF0dHJfc2VtKTsKKwlyZXR1cm4gcmV0OworfQorCitz c2l6ZV90IGpmZnMyX2xpc3R4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKmRh dGEsIHNpemVfdCBidWZfc2l6ZSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5 LT5kX2lub2RlOworCXN0cnVjdCBkZW50cnkgKnBhcmVudDsKKwljaGFyICpidWZmZXI7CisJ c3NpemVfdCBzaXplID0gMDsKKwlpbnQgeGF0dHJfc2l6ZTsKKwlzdHJ1Y3QgamZmczJfeGF0 dHJfbGlzdCAqZWFsaXN0OworCXN0cnVjdCBqZmZzMl94YXR0ciAqZWE7CisJc3RydWN0IHhh dHRyX2J1ZmZlciBlYV9idWY7CisJCisJbWVtc2V0KGRhdGEsIDAsIGJ1Zl9zaXplKTsKKwkv L2Rvd25fcmVhZCgmSkZGUzJfSU5PREVfSU5GTyhpbm9kZSktPnhhdHRyX3NlbSk7CisJcGFy ZW50ID0gZGVudHJ5LT5kX3BhcmVudDsKKwl4YXR0cl9zaXplID0gZWFfZ2V0KHBhcmVudCwg aW5vZGUsICZlYV9idWYsIDApOworCWlmICh4YXR0cl9zaXplIDwgMCkgeworCQlzaXplID0g eGF0dHJfc2l6ZTsKKwkJZ290byBvdXQ7CisJfQorCWlmICh4YXR0cl9zaXplID09IDApIHsK KwkJZ290byByZWxlYXNlOworCX0KKwkKKwllYWxpc3QgPSAoc3RydWN0IGpmZnMyX3hhdHRy X2xpc3QgKillYV9idWYueGF0dHI7CisJCisJZm9yIChlYSA9IEZJUlNUX1hBVFRSKGVhbGlz dCk7IGVhIDwgRU5EX1hBVFRSKGVhbGlzdCwgeGF0dHJfc2l6ZSk7IGVhID0gTkVYVF9YQVRU UihlYSkpCisJCXNpemUgKz0gZWEtPm5hbWVsZW4gKzE7CisKKwlpZiAoIWRhdGEpIAorCQln b3RvIHJlbGVhc2U7CisKKwlpZiAoc2l6ZSA+IGJ1Zl9zaXplKSB7CisJCXNpemUgPSAtRVJB TkdFOworCQlnb3RvIHJlbGVhc2U7CisJfQorCWJ1ZmZlciA9IGRhdGE7CisJZm9yIChlYSA9 IEZJUlNUX1hBVFRSKGVhbGlzdCk7IGVhIDwgRU5EX1hBVFRSKGVhbGlzdCwgeGF0dHJfc2l6 ZSk7IGVhID0gTkVYVF9YQVRUUihlYSkpIHsKKwkJbWVtY3B5KGJ1ZmZlciwgZWEtPm5hbWUs IGVhLT5uYW1lbGVuKTsKKwkJYnVmZmVyW2VhLT5uYW1lbGVuXSA9ICdcXCc7CisJCWJ1ZmZl ciArPSBlYS0+bmFtZWxlbiArMTsKKwl9CisgICByZWxlYXNlOgorCWVhX3JlbGVhc2UoJmVh X2J1Zik7CisgICBvdXQ6CisvLwl1cF9yZWFkKCZKRkZTMl9JTk9ERV9JTkZPKGlub2RlKS0+ eGF0dHJfc2VtKTsKKwlyZXR1cm4gc2l6ZTsKK30KKworaW50IGpmZnMyX3JlbW92ZXhhdHRy KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlyZXR1cm4g amZmczJfc2V0eGF0dHIoZGVudHJ5LCBuYW1lLCBOVUxMLCAwLCBYQVRUUl9SRVBMQUNFKTsK K30gIApkaWZmIC11TnIgbGludXgtMi42LjEwLm14Yy9mcy9LY29uZmlnIGxpbnV4LTIuNi4x MC5qZmZzMi9mcy9LY29uZmlnCi0tLSBsaW51eC0yLjYuMTAubXhjL2ZzL0tjb25maWcJMjAw NS0wOC0xOSAxNTo0MDoyNi4wMDAwMDAwMDAgKzA4MDAKKysrIGxpbnV4LTIuNi4xMC5qZmZz Mi9mcy9LY29uZmlnCTIwMDUtMDgtMTkgMTU6NTA6NTIuMDAwMDAwMDAwICswODAwCkBAIC0x MjAxLDYgKzEyMDEsMTIgQEAKIAkgIEZ1cnRoZXIgaW5mb3JtYXRpb24gb24gdGhlIGRlc2ln biBhbmQgaW1wbGVtZW50YXRpb24gb2YgSkZGUzIgaXMKIAkgIGF2YWlsYWJsZSBhdCA8aHR0 cDovL3NvdXJjZXMucmVkaGF0LmNvbS9qZmZzMi8+LgogCitjb25maWcgSkZGUzJfRlNfWEFU VFIKKwlib29sICJKRkZTMiBleHRlbmRlZCBhdHRyaWJ1dGVzIgorCWRlcGVuZHMgb24gSkZG UzJfRlMKKwloZWxwCisJIEpGRlMyIGV4dGVuZGVkIGF0dHJpYnV0ZXMKKwogY29uZmlnIEpG RlMyX0ZTX0RFQlVHCiAJaW50ICJKRkZTMiBkZWJ1Z2dpbmcgdmVyYm9zaXR5ICgwID0gcXVp ZXQsIDIgPSBub2lzeSkiCiAJZGVwZW5kcyBvbiBKRkZTMl9GUwpkaWZmIC11TnIgbGludXgt Mi42LjEwLm14Yy9pbmNsdWRlL2xpbnV4L2pmZnMyX3hhdHRyLmggbGludXgtMi42LjEwLmpm ZnMyL2luY2x1ZGUvbGludXgvamZmczJfeGF0dHIuaAotLS0gbGludXgtMi42LjEwLm14Yy9p bmNsdWRlL2xpbnV4L2pmZnMyX3hhdHRyLmgJMTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAw MDAgKzA4MDAKKysrIGxpbnV4LTIuNi4xMC5qZmZzMi9pbmNsdWRlL2xpbnV4L2pmZnMyX3hh dHRyLmgJMjAwNS0wOC0xOSAxNjoyMDoxOC4wMDAwMDAwMDAgKzA4MDAKQEAgLTAsMCArMSw1 OSBAQAorLyoKKyAqCisgKiBDb3B5cmlnaHQgMjAwNSBNb3Rvcm9sYSwgSW5jLiBBbGwgUmln aHRzIFJlc2VydmVkLgorICoKKyAqIENyZWF0ZWQgYnkgTWEgeXVuIDx5dW5tYUBzYy5tY2Vs Lm1vdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cisg KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRo ZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUg RnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBT dWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpZm5kZWYg IF9KRkZTMl9YQVRUUgorI2RlZmluZSAgX0pGRlMyX1hBVFRSCisKKy8qIGpmZnMyX3hhdHRy IGRlc2NyaWJlIHRoZSBvbi1kaXNrIGZvcm1hdCBvZiB0aGUgZXh0ZW5kZWQgYXR0cmlidXRl cy4KKyAqCisgKi8KK3N0cnVjdCBqZmZzMl94YXR0ciB7CisJdWludDhfdCBuYW1lbGVuOwkv KiBMZW5ndGggb2YgbmFtZSAqLworCXVpbnQ4X3QgdmFsdWVsZW47CS8qIExlbmd0aCBvZiB2 YWx1ZSAqLworCWNoYXIgbmFtZVswXTsJCS8qIEF0dHJpYnV0ZSBuYW1lIChpbmNsdWRlIG51 bGwtdGVybWluYXRvcikqLworCQkJCS8qIEF0dHJpYnV0ZSBWYWx1ZGUgaW1tZWRpYXRlbHkg Zm9sbG93cyBuYW1lICovCit9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBq ZmZzMl94YXR0cl9saXN0IHsKKwlzdHJ1Y3QgamZmczJfeGF0dHIgeGF0dHJbMF07CS8qIEVB cyBsaXN0ICovCit9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKworLyogCisgKiBTb21l IG1hY3JvcyBmb3IgZGVhbGluZyB3aXRoIHZhcmlhYmxlIGxlbmd0aCBFQSBsaXN0cy4KKyAq LworI2RlZmluZSBKRkZTMl9YQVRUUl9TSVpFKHhhdHRyKQlcCisJKHNpemVvZihzdHJ1Y3Qg amZmczJfeGF0dHIpICsgKHhhdHRyKS0+bmFtZWxlbiArIDEgKyBcCisJKHhhdHRyKS0+dmFs dWVsZW4pCisjZGVmaW5lIE5FWFRfWEFUVFIoeGF0dHIpCVwKKwkoKHN0cnVjdCBqZmZzMl94 YXR0ciAqKSgoKGNoYXIgKikoeGF0dHIpKSArIChKRkZTMl9YQVRUUl9TSVpFKHhhdHRyKSkp KQorI2RlZmluZSBGSVJTVF9YQVRUUih4YXR0cl9saXN0KQlcCisJKCh4YXR0cl9saXN0KS0+ eGF0dHIpCisjZGVmaW5lIEVORF9YQVRUUih4YXR0cl9saXN0LHNpemUpCVwKKwkoKHN0cnVj dCBqZmZzMl94YXR0ciAqKSgoKGNoYXIgKikoeGF0dHJfbGlzdCkpICsgc2l6ZSkpCisKK2V4 dGVybiBpbnQgamZmczJfc2V0eGF0dHIoc3RydWN0IGRlbnRyeSAqLCBjb25zdCBjaGFyICos IGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQpOworZXh0ZXJuIHNzaXplX3QgamZmczJfZ2V0 eGF0dHIoc3RydWN0IGRlbnRyeSAqLCBjb25zdCBjaGFyICosIHZvaWQgKiwgc2l6ZV90KTsK K2V4dGVybiBzc2l6ZV90IGpmZnMyX2xpc3R4YXR0cihzdHJ1Y3QgZGVudHJ5ICosIGNoYXIg Kiwgc2l6ZV90KTsKK2V4dGVybiBpbnQgamZmczJfcmVtb3ZleGF0dHIoc3RydWN0IGRlbnRy eSAqLCBjb25zdCBjaGFyICopOworCisjZW5kaWYKKwo= ------=_1124685678_22041.attach--