Name: series-workflowr97jk Phase: Failed StartedAt: 2026-06-30 01:57:42 +0000 UTC FinishedAt: 2026-06-30 02:08:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr97jk[0] Phase: Succeeded StartedAt: 2026-06-30 01:57:42 +0000 UTC FinishedAt: 2026-06-30 02:08:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr97jk[0].run-triage Phase: Succeeded StartedAt: 2026-06-30 01:57:42 +0000 UTC FinishedAt: 2026-06-30 02:08:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAyOjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnNpc3RzIGVudGlyZWx5IG9mIHJlZmFjdG9yaW5nIChjaGFuZ2luZyBpbnQgdG8gZW51bSBtaWdyYXRlX3JlYXNvbiksIGludHJvZHVjaW5nIGEgaGVscGVyIGZ1bmN0aW9uIGZvciBza2lwcGluZyBidWRkeSBwYWdlcyAod2l0aCBubyBmdW5jdGlvbmFsIGNoYW5nZSksIHJlbmFtaW5nIHZhcmlhYmxlcy9mdW5jdGlvbnMsIGFuZCBtb2RpZnlpbmcgcHJpbnRrL3RyYWNlcG9pbnQgb3V0cHV0cy4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgbG9naWMgY2hhbmdlcyB0aGF0IHdhcnJhbnQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDI6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyM2MyODhhMjMxNTMyMWZhZjQ1NDUwMTlmZTEwN2ZhY2RjM2U1MzJjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdW4gMzAgMDI6MDc6NDUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuaW5kZXggMmFiYWY5OTMyMWU5MGQuLmZhODI4MjMyZGZjYzE4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG5AQCAtMTU0LDcgJiM0MzsxNTQsOCBAQCBsb25nIGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgc3RhcnQsIGxvbmcgZW5kLFxuIGJvb2wgZm9saW9faXNvbGF0ZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpO1xuIGludCBnZXRfaHdwb2lzb25faHVnZXRsYl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sICpodWdldGxiLCBib29sIHVucG9pc29uKTtcbiB2b2lkIGZvbGlvX3B1dGJhY2tfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi12b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGludCByZWFzb24pO1xuJiM0Mzt2b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sXG4mIzQzO1x0XHRcdGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKTtcbiB2b2lkIGh1Z2V0bGJfZml4X3Jlc2VydmVfY291bnRzKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIGV4dGVybiBzdHJ1Y3QgbXV0ZXggKmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGU7XG4gdTMyIGh1Z2V0bGJfZmF1bHRfbXV0ZXhfaGFzaChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBpZHgpO1xuQEAgLTQyNCw3ICYjNDM7NDI1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3B1dGJhY2tfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLFxuLVx0XHRcdFx0XHRzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgaW50IHJlYXNvbilcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbilcbiB7XG4gfVxuIFxuQEAgLTk1Niw3ICYjNDM7OTU3LDcgQEAgc3RhdGljIGlubGluZSBnZnBfdCBodGxiX21vZGlmeV9hbGxvY19tYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGdmcF90IGdmcF9tYXNrKVxuIFx0cmV0dXJuIG1vZGlmaWVkX21hc2s7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBodGxiX2FsbG93X2FsbG9jX2ZhbGxiYWNrKGludCByZWFzb24pXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBodGxiX2FsbG93X2FsbG9jX2ZhbGxiYWNrKGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxuIHtcbiBcdGJvb2wgYWxsb3dlZF9mYWxsYmFjayA9IGZhbHNlO1xuIFxuQEAgLTEyMzgsNyAmIzQzOzEyMzksNyBAQCBzdGF0aWMgaW5saW5lIGdmcF90IGh0bGJfbW9kaWZ5X2FsbG9jX21hc2soc3RydWN0IGhzdGF0ZSAqaCwgZ2ZwX3QgZ2ZwX21hc2spXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIGh0bGJfYWxsb3dfYWxsb2NfZmFsbGJhY2soaW50IHJlYXNvbilcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGh0bGJfYWxsb3dfYWxsb2NfZmFsbGJhY2soZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pXG4ge1xuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaCBiL2luY2x1ZGUvbGludXgvbWlncmF0ZS5oXG5pbmRleCBkNWFmMmI3ZjU3N2IzMy4uMWY4MzkyNDYxNWQ2ZDMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9taWdyYXRlLmhcbkBAIC01Nyw3ICYjNDM7NTcsOCBAQCB2b2lkIHB1dGJhY2tfbW92YWJsZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsKTtcbiBpbnQgbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpkc3QsXG4gXHRcdHN0cnVjdCBmb2xpbyAqc3JjLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlKTtcbiBpbnQgbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsLCBuZXdfZm9saW9fdCBuZXcsIGZyZWVfZm9saW9fdCBmcmVlLFxuLVx0XHQgIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbixcbiYjNDM7XHRcdCAgdW5zaWduZWQgbG9uZyBwcml2YXRlLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLFxuJiM0MztcdFx0ICBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbixcbiBcdFx0ICB1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpO1xuIHN0cnVjdCBmb2xpbyAqYWxsb2NfbWlncmF0aW9uX3RhcmdldChzdHJ1Y3QgZm9saW8gKnNyYywgdW5zaWduZWQgbG9uZyBwcml2YXRlKTtcbiBib29sIGlzb2xhdGVfbW92YWJsZV9vcHNfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaXNvbGF0ZV9tb2RlX3QgbW9kZSk7XG5AQCAtNzcsNyAmIzQzOzc4LDggQEAgaW50IHNldF9tb3ZhYmxlX29wcyhjb25zdCBzdHJ1Y3QgbW92YWJsZV9vcGVyYXRpb25zICpvcHMsIGVudW0gcGFnZXR5cGUgdHlwZSk7XG4gc3RhdGljIGlubGluZSB2b2lkIHB1dGJhY2tfbW92YWJsZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsKSB7fVxuIHN0YXRpYyBpbmxpbmUgaW50IG1pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbCwgbmV3X2ZvbGlvX3QgbmV3LFxuIFx0XHRmcmVlX2ZvbGlvX3QgZnJlZSwgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxuLVx0XHRlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLCB1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpXG4mIzQzO1x0XHRlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbixcbiYjNDM7XHRcdHVuc2lnbmVkIGludCAqcmV0X3N1Y2NlZWRlZClcbiBcdHsgcmV0dXJuIC1FTk9TWVM7IH1cbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqYWxsb2NfbWlncmF0aW9uX3RhcmdldChzdHJ1Y3QgZm9saW8gKnNyYyxcbiBcdFx0dW5zaWduZWQgbG9uZyBwcml2YXRlKVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWlncmF0ZV9tb2RlLmggYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGVfbW9kZS5oXG5pbmRleCAyNjVjNDMyOGIzNmFkNS4uMDUxMDJkNGQyNDkwZTYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21pZ3JhdGVfbW9kZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGVfbW9kZS5oXG5AQCAtMjUsNiAmIzQzOzI1LDcgQEAgZW51bSBtaWdyYXRlX3JlYXNvbiB7XG4gXHRNUl9MT05HVEVSTV9QSU4sXG4gXHRNUl9ERU1PVElPTixcbiBcdE1SX0RBTU9OLFxuJiM0MztcdE1SX05FVkVSLFx0XHQvKiBwYWdlIGhhcyBuZXZlciBiZWVuIG1pZ3JhdGVkICovXG4gXHRNUl9UWVBFU1xuIH07XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaFxuaW5kZXggMzMyODM1N2Y2ZGJhNzIuLjlmZTUxZGZjY2YyNjg1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZV9vd25lci5oXG5AQCAtMyw2ICYjNDM7Myw3IEBAXG4gI2RlZmluZSBfX0xJTlVYX1BBR0VfT1dORVJfSFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2p1bXBfbGFiZWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9taWdyYXRlX21vZGUuaFx1MDAzZVxuIFxuICNpZmRlZiBDT05GSUdfUEFHRV9PV05FUlxuIGV4dGVybiBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBwYWdlX293bmVyX2luaXRlZDtcbkBAIC0xNCw3ICYjNDM7MTUsNyBAQCBleHRlcm4gdm9pZCBfX3NldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLFxuIGV4dGVybiB2b2lkIF9fc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlcixcbiBcdFx0XHRpbnQgbmV3X29yZGVyKTtcbiBleHRlcm4gdm9pZCBfX2ZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpO1xuLWV4dGVybiB2b2lkIF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCByZWFzb24pO1xuJiM0MztleHRlcm4gdm9pZCBfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbik7XG4gZXh0ZXJuIHZvaWQgX19kdW1wX3BhZ2Vfb3duZXIoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpO1xuIGV4dGVybiB2b2lkIHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXG4gXHRcdFx0XHRcdHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCB6b25lICp6b25lKTtcbkBAIC00Myw3ICYjNDM7NDQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZClcbiBcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnBhZ2Vfb3duZXJfaW5pdGVkKSlcbiBcdFx0X19mb2xpb19jb3B5X293bmVyKG5ld2ZvbGlvLCBvbGQpO1xuIH1cbi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCByZWFzb24pXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pXG4ge1xuIFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2cGFnZV9vd25lcl9pbml0ZWQpKVxuIFx0XHRfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihmb2xpbywgcmVhc29uKTtcbkBAIC02OCw3ICYjNDM7NjksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlcixcbiBzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiB9XG4tc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcmVhc29uKVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxuIHtcbiB9XG4gc3RhdGljIGlubGluZSB2b2lkIGR1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmhcbmluZGV4IGNkMDFkZDdiMzY0MGRjLi4xNWVlMmVmMjAxYjVmOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oXG5AQCAtMjMsNyAmIzQzOzIzLDggQEBcbiBcdEVNKCBNUl9DT05USUdfUkFOR0UsXHRcJiMzNDtjb250aWdfcmFuZ2VcJiMzNDspXHRcdFx0XFxcbiBcdEVNKCBNUl9MT05HVEVSTV9QSU4sXHRcJiMzNDtsb25ndGVybV9waW5cJiMzNDspXHRcdFx0XFxcbiBcdEVNKCBNUl9ERU1PVElPTixcdFwmIzM0O2RlbW90aW9uXCYjMzQ7KVx0XHRcdFxcXG4tXHRFTWUoTVJfREFNT04sXHRcdFwmIzM0O2RhbW9uXCYjMzQ7KVxuJiM0MztcdEVNKCBNUl9EQU1PTixcdFx0XCYjMzQ7ZGFtb25cJiMzNDspXHRcdFx0XFxcbiYjNDM7XHRFTWUoTVJfTkVWRVIsXHRcdFwmIzM0O25ldmVyX21pZ3JhdGVkXCYjMzQ7KVxuIFxuIC8qXG4gICogRmlyc3QgZGVmaW5lIHRoZSBlbnVtcyBpbiB0aGUgYWJvdmUgbWFjcm9zIHRvIGJlIGV4cG9ydGVkIHRvIHVzZXJzcGFjZVxuQEAgLTUxLDcgJiM0Mzs1Miw3IEBAIFRSQUNFX0VWRU5UKG1tX21pZ3JhdGVfcGFnZXMsXG4gXHRUUF9QUk9UTyh1bnNpZ25lZCBsb25nIHN1Y2NlZWRlZCwgdW5zaWduZWQgbG9uZyBmYWlsZWQsXG4gXHRcdCB1bnNpZ25lZCBsb25nIHRocF9zdWNjZWVkZWQsIHVuc2lnbmVkIGxvbmcgdGhwX2ZhaWxlZCxcbiBcdFx0IHVuc2lnbmVkIGxvbmcgdGhwX3NwbGl0LCB1bnNpZ25lZCBsb25nIGxhcmdlX2ZvbGlvX3NwbGl0LFxuLVx0XHQgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiksXG4mIzQzO1x0XHQgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pLFxuIFxuIFx0VFBfQVJHUyhzdWNjZWVkZWQsIGZhaWxlZCwgdGhwX3N1Y2NlZWRlZCwgdGhwX2ZhaWxlZCxcbiBcdFx0dGhwX3NwbGl0LCBsYXJnZV9mb2xpb19zcGxpdCwgbW9kZSwgcmVhc29uKSxcbkBAIC02NCw3ICYjNDM7NjUsNyBAQCBUUkFDRV9FVkVOVChtbV9taWdyYXRlX3BhZ2VzLFxuIFx0XHRfX2ZpZWxkKFx0dW5zaWduZWQgbG9uZyxcdFx0dGhwX3NwbGl0KVxuIFx0XHRfX2ZpZWxkKFx0dW5zaWduZWQgbG9uZyxcdFx0bGFyZ2VfZm9saW9fc3BsaXQpXG4gXHRcdF9fZmllbGQoXHRlbnVtIG1pZ3JhdGVfbW9kZSxcdG1vZGUpXG4tXHRcdF9fZmllbGQoXHRpbnQsXHRcdFx0cmVhc29uKVxuJiM0MztcdFx0X19maWVsZChcdGVudW0gbWlncmF0ZV9yZWFzb24sXHRyZWFzb24pXG4gXHQpLFxuIFxuIFx0VFBfZmFzdF9hc3NpZ24oXG5AQCAtOTEsMTMgJiM0Mzs5MiwxMyBAQCBUUkFDRV9FVkVOVChtbV9taWdyYXRlX3BhZ2VzLFxuIFxuIFRSQUNFX0VWRU5UKG1tX21pZ3JhdGVfcGFnZXNfc3RhcnQsXG4gXG4tXHRUUF9QUk9UTyhlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uKSxcbiYjNDM7XHRUUF9QUk9UTyhlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiksXG4gXG4gXHRUUF9BUkdTKG1vZGUsIHJlYXNvbiksXG4gXG4gXHRUUF9TVFJVQ1RfX2VudHJ5KFxuIFx0XHRfX2ZpZWxkKGVudW0gbWlncmF0ZV9tb2RlLCBtb2RlKVxuLVx0XHRfX2ZpZWxkKGludCwgcmVhc29uKVxuJiM0MztcdFx0X19maWVsZChlbnVtIG1pZ3JhdGVfcmVhc29uLCByZWFzb24pXG4gXHQpLFxuIFxuIFx0VFBfZmFzdF9hc3NpZ24oXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jXG5pbmRleCA1NzEyMTJiODA4MzVlYy4uMTc3MzJkMWZkYzVlZmQgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGIuY1xuQEAgLTcxODIsNyAmIzQzOzcxODIsOCBAQCB2b2lkIGZvbGlvX3B1dGJhY2tfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0Zm9saW9fcHV0KGZvbGlvKTtcbiB9XG4gXG4tdm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBpbnQgcmVhc29uKVxuJiM0Mzt2b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sXG4mIzQzO1x0XHRcdGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBoc3RhdGUgKmggPSBmb2xpb19oc3RhdGUob2xkX2ZvbGlvKTtcbiBcbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmNcbmluZGV4IGQ5YjIzOTA5ZDcxNmM2Li40OWUxMGZlZWIwOTRmMCAxMDA2NDRcbi0tLSBhL21tL21pZ3JhdGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWlncmF0ZS5jXG5AQCAtMTQ2OSw3ICYjNDM7MTQ2OSw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV9mb2xpb19tb3ZlKGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXG4gc3RhdGljIGludCB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2UobmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbiBcdFx0ZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcbiBcdFx0c3RydWN0IGZvbGlvICpzcmMsIGludCBmb3JjZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSxcbi1cdFx0aW50IHJlYXNvbiwgc3RydWN0IGxpc3RfaGVhZCAqcmV0KVxuJiM0MztcdFx0ZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sIHN0cnVjdCBsaXN0X2hlYWQgKnJldClcbiB7XG4gXHRzdHJ1Y3QgZm9saW8gKmRzdDtcbiBcdGludCByYyA9IC1FQUdBSU47XG5AQCAtMTYyNiw3ICYjNDM7MTYyNiw3IEBAIHN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzIHtcbiAgKi9cbiBzdGF0aWMgaW50IG1pZ3JhdGVfaHVnZXRsYnMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbiBcdFx0XHQgICAgZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcbi1cdFx0XHQgICAgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbixcbiYjNDM7XHRcdFx0ICAgIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLFxuIFx0XHRcdCAgICBzdHJ1Y3QgbWlncmF0ZV9wYWdlc19zdGF0cyAqc3RhdHMsXG4gXHRcdFx0ICAgIHN0cnVjdCBsaXN0X2hlYWQgKnJldF9mb2xpb3MpXG4ge1xuQEAgLTE3MTYsNyAmIzQzOzE3MTYsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfaHVnZXRsYnMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbiBzdGF0aWMgdm9pZCBtaWdyYXRlX2ZvbGlvc19tb3ZlKHN0cnVjdCBsaXN0X2hlYWQgKnNyY19mb2xpb3MsXG4gXHRcdHN0cnVjdCBsaXN0X2hlYWQgKmRzdF9mb2xpb3MsXG4gXHRcdGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXG4tXHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sXG4mIzQzO1x0XHRlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbixcbiBcdFx0c3RydWN0IGxpc3RfaGVhZCAqcmV0X2ZvbGlvcyxcbiBcdFx0c3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzLFxuIFx0XHRpbnQgKnJldHJ5LCBpbnQgKnRocF9yZXRyeSwgaW50ICpucl9mYWlsZWQsXG5AQCAtMTc5OSw3ICYjNDM7MTc5OSw3IEBAIHN0YXRpYyB2b2lkIG1pZ3JhdGVfZm9saW9zX3VuZG8oc3RydWN0IGxpc3RfaGVhZCAqc3JjX2ZvbGlvcyxcbiAgKi9cbiBzdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqZnJvbSxcbiBcdFx0bmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbywgZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sXG4tXHRcdHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbixcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sXG4gXHRcdHN0cnVjdCBsaXN0X2hlYWQgKnJldF9mb2xpb3MsIHN0cnVjdCBsaXN0X2hlYWQgKnNwbGl0X2ZvbGlvcyxcbiBcdFx0c3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzLCBpbnQgbnJfcGFzcylcbiB7XG5AQCAtMjAxMSw3ICYjNDM7MjAxMSw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlc19iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLFxuIFxuIHN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlc19zeW5jKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXG4gXHRcdGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXG4tXHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sXG4mIzQzO1x0XHRlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbixcbiBcdFx0c3RydWN0IGxpc3RfaGVhZCAqcmV0X2ZvbGlvcywgc3RydWN0IGxpc3RfaGVhZCAqc3BsaXRfZm9saW9zLFxuIFx0XHRzdHJ1Y3QgbWlncmF0ZV9wYWdlc19zdGF0cyAqc3RhdHMpXG4ge1xuQEAgLTIwODgsNyAmIzQzOzIwODgsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfc3luYyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxuICAqL1xuIGludCBtaWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXG4gXHRcdGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXG4tXHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sIHVuc2lnbmVkIGludCAqcmV0X3N1Y2NlZWRlZClcbiYjNDM7XHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLCB1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpXG4ge1xuIFx0aW50IHJjLCByY19nYXRoZXI7XG4gXHRpbnQgbnJfcGFnZXM7XG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9vd25lci5jIGIvbW0vcGFnZV9vd25lci5jXG5pbmRleCAyZGRkY2I2NTEwYWExZS4uNDZhOTMzZjljMjI5YmQgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX293bmVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2Vfb3duZXIuY1xuQEAgLTMzOSwxMyAmIzQzOzMzOSwxMyBAQCBub2lubGluZSB2b2lkIF9fc2V0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIHNob3J0IG9yZGVyLFxuIFx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlO1xuIFxuIFx0aGFuZGxlID0gc2F2ZV9zdGFjayhnZnBfbWFzayk7XG4tXHRfX3VwZGF0ZV9wYWdlX293bmVyX2hhbmRsZShwYWdlLCBoYW5kbGUsIG9yZGVyLCBnZnBfbWFzaywgLTEsXG4mIzQzO1x0X191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUocGFnZSwgaGFuZGxlLCBvcmRlciwgZ2ZwX21hc2ssIE1SX05FVkVSLFxuIFx0XHRcdFx0ICAgdHNfbnNlYywgY3VycmVudC1cdTAwM2VwaWQsIGN1cnJlbnQtXHUwMDNldGdpZCxcbiBcdFx0XHRcdCAgIGN1cnJlbnQtXHUwMDNlY29tbSk7XG4gXHRpbmNfc3RhY2tfcmVjb3JkX2NvdW50KGhhbmRsZSwgZ2ZwX21hc2ssIDEgXHUwMDNjXHUwMDNjIG9yZGVyKTtcbiB9XG4gXG4tdm9pZCBfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcmVhc29uKVxuJiM0Mzt2b2lkIF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBwYWdlX2V4dCAqcGFnZV9leHQgPSBwYWdlX2V4dF9nZXQoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSk7XG4gXHRzdHJ1Y3QgcGFnZV9vd25lciAqcGFnZV9vd25lcjtcbkBAIC00MjIsNiAmIzQzOzQyMiwyOSBAQCB2b2lkIF9fZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZClcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogQ2hlY2sgaWYgYSBwYWdlIGlzIGEgYnVkZHkgcGFnZSBhbmQgYWR2YW5jZSBAcGZuIHBhc3QgdGhlIGVudGlyZSBidWRkeSBibG9jay5cbiYjNDM7ICogVGhpcyBzYWZlbHkgcmVhZHMgdGhlIGJ1ZGR5IG9yZGVyIHdpdGhvdXQgdGhlIHpvbmUgbG9jaywgd2hpY2ggbWF5IGNhdXNlIHVzXG4mIzQzOyAqIHRvIHNraXAgbGVzcyB0aGFuIHRoZSBmdWxsIGJ1ZGR5IGJsb2NrLCBidXQgdGhhdCBpcyBhY2NlcHRhYmxlIGZvciBwYWdlIG93bmVyXG4mIzQzOyAqIGl0ZXJhdGlvbiBwdXJwb3Nlcy5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIHRoZSBwYWdlIHdhcyBza2lwcGVkIChjYWxsZXIgc2hvdWxkIGNvbnRpbnVlIGl0cyBsb29wKSxcbiYjNDM7ICogICAgICAgICBmYWxzZSBpZiB0aGUgcGFnZSBpcyBub3QgYSBidWRkeSBwYWdlIGFuZCBzaG91bGQgYmUgcHJvY2Vzc2VkIG5vcm1hbGx5LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBib29sIHNraXBfYnVkZHlfcGFnZXModW5zaWduZWQgbG9uZyAqcGZuLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgb3JkZXI7XG4mIzQzO1xuJiM0MztcdGlmICghUGFnZUJ1ZGR5KHBhZ2UpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRvcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcbiYjNDM7XHRpZiAob3JkZXIgXHUwMDNjPSBNQVhfUEFHRV9PUkRFUilcbiYjNDM7XHRcdCpwZm4gJiM0Mzs9ICgxVUwgXHUwMDNjXHUwMDNjIG9yZGVyKSAtIDE7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSxcbiBcdFx0XHRcdCAgICAgICBwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgem9uZSAqem9uZSlcbiB7XG5AQCAtNDYxLDE0ICYjNDM7NDg0LDggQEAgdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLFxuIFx0XHRcdGlmIChwYWdlX3pvbmUocGFnZSkgIT0gem9uZSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdGlmIChQYWdlQnVkZHkocGFnZSkpIHtcbi1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgZnJlZXBhZ2Vfb3JkZXI7XG4tXG4tXHRcdFx0XHRmcmVlcGFnZV9vcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcbi1cdFx0XHRcdGlmIChmcmVlcGFnZV9vcmRlciBcdTAwM2M9IE1BWF9QQUdFX09SREVSKVxuLVx0XHRcdFx0XHRwZm4gJiM0Mzs9ICgxVUwgXHUwMDNjXHUwMDNjIGZyZWVwYWdlX29yZGVyKSAtIDE7XG4mIzQzO1x0XHRcdGlmIChza2lwX2J1ZGR5X3BhZ2VzKFx1MDAyNnBmbiwgcGFnZSkpXG4gXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHR9XG4gXG4gXHRcdFx0aWYgKFBhZ2VSZXNlcnZlZChwYWdlKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuQEAgLTUwNSwxMyAmIzQzOzUyMiwxMyBAQCB2b2lkIHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXG4gXHRzZXFfcHV0YyhtLCAmIzM5O1xcbiYjMzk7KTtcbiB9XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfTUVNQ0dcbiAvKlxuICAqIExvb2tpbmcgZm9yIG1lbWNnIGluZm9ybWF0aW9uIGFuZCBwcmludCBpdCBvdXRcbiAgKi9cbiBzdGF0aWMgaW5saW5lIGludCBwcmludF9wYWdlX293bmVyX21lbWNnKGNoYXIgKmtidWYsIHNpemVfdCBjb3VudCwgaW50IHJldCxcbiBcdFx0XHRcdFx0IHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbi0jaWZkZWYgQ09ORklHX01FTUNHXG4gXHR1bnNpZ25lZCBsb25nIG1lbWNnX2RhdGE7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4gXHRib29sIG9ubGluZTtcbkBAIC01MzksMTAgJiM0Mzs1NTYsMTYgQEAgc3RhdGljIGlubGluZSBpbnQgcHJpbnRfcGFnZV9vd25lcl9tZW1jZyhjaGFyICprYnVmLCBzaXplX3QgY291bnQsIGludCByZXQsXG4gXHRcdFx0bmFtZSk7XG4gb3V0X3VubG9jazpcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuLSNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBwcmludF9wYWdlX293bmVyX21lbWNnKGNoYXIgKmtidWYsIHNpemVfdCBjb3VudCwgaW50IHJldCxcbiYjNDM7XHRcdFx0XHRcdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4gXG4gc3RhdGljIHNzaXplX3RcbiBwcmludF9wYWdlX293bmVyKGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgbG9uZyBwZm4sXG5AQCAtNTc5LDcgJiM0Mzs2MDIsNyBAQCBwcmludF9wYWdlX293bmVyKGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgbG9uZyBwZm4sXG4gXHRpZiAocmV0IFx1MDAzZT0gY291bnQpXG4gXHRcdGdvdG8gZXJyO1xuIFxuLVx0aWYgKHBhZ2Vfb3duZXItXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSAtMSkge1xuJiM0MztcdGlmIChwYWdlX293bmVyLVx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb24gIT0gTVJfTkVWRVIpIHtcbiBcdFx0cmV0ICYjNDM7PSBzY25wcmludGYoa2J1ZiAmIzQzOyByZXQsIGNvdW50IC0gcmV0LFxuIFx0XHRcdFwmIzM0O1BhZ2UgaGFzIGJlZW4gbWlncmF0ZWQsIGxhc3QgbWlncmF0ZSByZWFzb246ICVzXFxuXCYjMzQ7LFxuIFx0XHRcdG1pZ3JhdGVfcmVhc29uX25hbWVzW3BhZ2Vfb3duZXItXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbl0pO1xuQEAgLTYzMCwxMCAmIzQzOzY1MywxMCBAQCB2b2lkIF9fZHVtcF9wYWdlX293bmVyKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIFx0ZWxzZVxuIFx0XHRwcl9hbGVydChcJiMzNDtwYWdlX293bmVyIHRyYWNrcyB0aGUgcGFnZSBhcyBmcmVlZFxcblwmIzM0Oyk7XG4gXG4tXHRwcl9hbGVydChcJiMzNDtwYWdlIGxhc3QgYWxsb2NhdGVkIHZpYSBvcmRlciAldSwgbWlncmF0ZXR5cGUgJXMsIGdmcF9tYXNrICUjeCglcEdnKSwgcGlkICVkLCB0Z2lkICVkICglcyksIHRzICVsbHUsIGZyZWVfdHMgJWxsdVxcblwmIzM0OyxcbiYjNDM7XHRwcl9hbGVydChcJiMzNDtwYWdlIGxhc3QgYWxsb2NhdGVkIHZpYSBvcmRlciAldSwgbWlncmF0ZXR5cGUgJXMsIGdmcF9tYXNrICUjeCglcEdnKSwgcGlkICVkLCB0Z2lkICVkICglcyksIHRzICVsbHVcXG5cJiMzNDssXG4gXHRcdCBwYWdlX293bmVyLVx1MDAzZW9yZGVyLCBtaWdyYXRldHlwZV9uYW1lc1ttdF0sIGdmcF9tYXNrLCBcdTAwMjZnZnBfbWFzayxcbiBcdFx0IHBhZ2Vfb3duZXItXHUwMDNlcGlkLCBwYWdlX293bmVyLVx1MDAzZXRnaWQsIHBhZ2Vfb3duZXItXHUwMDNlY29tbSxcbi1cdFx0IHBhZ2Vfb3duZXItXHUwMDNldHNfbnNlYywgcGFnZV9vd25lci1cdTAwM2VmcmVlX3RzX25zZWMpO1xuJiM0MztcdFx0IHBhZ2Vfb3duZXItXHUwMDNldHNfbnNlYyk7XG4gXG4gXHRoYW5kbGUgPSBSRUFEX09OQ0UocGFnZV9vd25lci1cdTAwM2VoYW5kbGUpO1xuIFx0aWYgKCFoYW5kbGUpXG5AQCAtNjQ1LDEyICYjNDM7NjY4LDEzIEBAIHZvaWQgX19kdW1wX3BhZ2Vfb3duZXIoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4gXHRpZiAoIWhhbmRsZSkge1xuIFx0XHRwcl9hbGVydChcJiMzNDtwYWdlX293bmVyIGZyZWUgc3RhY2sgdHJhY2UgbWlzc2luZ1xcblwmIzM0Oyk7XG4gXHR9IGVsc2Uge1xuLVx0XHRwcl9hbGVydChcJiMzNDtwYWdlIGxhc3QgZnJlZSBwaWQgJWQgdGdpZCAlZCBzdGFjayB0cmFjZTpcXG5cJiMzNDssXG4tXHRcdFx0ICBwYWdlX293bmVyLVx1MDAzZWZyZWVfcGlkLCBwYWdlX293bmVyLVx1MDAzZWZyZWVfdGdpZCk7XG4mIzQzO1x0XHRwcl9hbGVydChcJiMzNDtwYWdlIGxhc3QgZnJlZSBwaWQgJWQgdGdpZCAlZCB0cyAlbGx1IHN0YWNrIHRyYWNlOlxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICBwYWdlX293bmVyLVx1MDAzZWZyZWVfcGlkLCBwYWdlX293bmVyLVx1MDAzZWZyZWVfdGdpZCxcbiYjNDM7XHRcdFx0ICBwYWdlX293bmVyLVx1MDAzZWZyZWVfdHNfbnNlYyk7XG4gXHRcdHN0YWNrX2RlcG90X3ByaW50KGhhbmRsZSk7XG4gXHR9XG4gXG4tXHRpZiAocGFnZV9vd25lci1cdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uICE9IC0xKVxuJiM0MztcdGlmIChwYWdlX293bmVyLVx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb24gIT0gTVJfTkVWRVIpXG4gXHRcdHByX2FsZXJ0KFwmIzM0O3BhZ2UgaGFzIGJlZW4gbWlncmF0ZWQsIGxhc3QgbWlncmF0ZSByZWFzb246ICVzXFxuXCYjMzQ7LFxuIFx0XHRcdG1pZ3JhdGVfcmVhc29uX25hbWVzW3BhZ2Vfb3duZXItXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbl0pO1xuIFx0cGFnZV9leHRfcHV0KHBhZ2VfZXh0KTtcbkBAIC02OTcsMTMgJiM0Mzs3MjEsOCBAQCByZWFkX3BhZ2Vfb3duZXIoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuIFx0XHR9XG4gXG4gXHRcdHBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuLVx0XHRpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7XG4tXHRcdFx0dW5zaWduZWQgbG9uZyBmcmVlcGFnZV9vcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcbi1cbi1cdFx0XHRpZiAoZnJlZXBhZ2Vfb3JkZXIgXHUwMDNjPSBNQVhfUEFHRV9PUkRFUilcbi1cdFx0XHRcdHBmbiAmIzQzOz0gKDFVTCBcdTAwM2NcdTAwM2MgZnJlZXBhZ2Vfb3JkZXIpIC0gMTtcbiYjNDM7XHRcdGlmIChza2lwX2J1ZGR5X3BhZ2VzKFx1MDAyNnBmbiwgcGFnZSkpXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdH1cbiBcbiBcdFx0cGFnZV9leHQgPSBwYWdlX2V4dF9nZXQocGFnZSk7XG4gXHRcdGlmICh1bmxpa2VseSghcGFnZV9leHQpKVxuQEAgLTc5OCwyMCAmIzQzOzgxNyw4IEBAIHN0YXRpYyB2b2lkIGluaXRfcGFnZXNfaW5fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSlcbiBcdFx0XHRpZiAocGFnZV96b25lKHBhZ2UpICE9IHpvbmUpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIFRvIGF2b2lkIGhhdmluZyB0byBncmFiIHpvbmUtXHUwMDNlbG9jaywgYmUgYSBsaXR0bGVcbi1cdFx0XHQgKiBjYXJlZnVsIHdoZW4gcmVhZGluZyBidWRkeSBwYWdlIG9yZGVyLiBUaGUgb25seVxuLVx0XHRcdCAqIGRhbmdlciBpcyB0aGF0IHdlIHNraXAgdG9vIG11Y2ggYW5kIHBvdGVudGlhbGx5IG1pc3Ncbi1cdFx0XHQgKiBzb21lIGVhcmx5IGFsbG9jYXRlZCBwYWdlcywgd2hpY2ggaXMgYmV0dGVyIHRoYW5cbi1cdFx0XHQgKiBoZWF2eSBsb2NrIGNvbnRlbnRpb24uXG4tXHRcdFx0ICovXG4tXHRcdFx0aWYgKFBhZ2VCdWRkeShwYWdlKSkge1xuLVx0XHRcdFx0dW5zaWduZWQgbG9uZyBvcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcbi1cbi1cdFx0XHRcdGlmIChvcmRlciBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgb3JkZXIgXHUwMDNjPSBNQVhfUEFHRV9PUkRFUilcbi1cdFx0XHRcdFx0cGZuICYjNDM7PSAoMVVMIFx1MDAzY1x1MDAzYyBvcmRlcikgLSAxO1xuJiM0MztcdFx0XHRpZiAoc2tpcF9idWRkeV9wYWdlcyhcdTAwMjZwZm4sIHBhZ2UpKVxuIFx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0fVxuIFxuIFx0XHRcdGlmIChQYWdlUmVzZXJ2ZWQocGFnZSkpXG4gXHRcdFx0XHRjb250aW51ZTtcbkBAIC04MjYsNyAmIzQzOzgzMyw3IEBAIHN0YXRpYyB2b2lkIGluaXRfcGFnZXNfaW5fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSlcbiBcbiBcdFx0XHQvKiBGb3VuZCBlYXJseSBhbGxvY2F0ZWQgcGFnZSAqL1xuIFx0XHRcdF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGVhcmx5X2hhbmRsZSwgMCwgMCxcbi1cdFx0XHRcdFx0XHQgICAtMSwgbG9jYWxfY2xvY2soKSwgY3VycmVudC1cdTAwM2VwaWQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIE1SX05FVkVSLCBsb2NhbF9jbG9jaygpLCBjdXJyZW50LVx1MDAzZXBpZCxcbiBcdFx0XHRcdFx0XHQgICBjdXJyZW50LVx1MDAzZXRnaWQsIGN1cnJlbnQtXHUwMDNlY29tbSk7XG4gXHRcdFx0Y291bnQmIzQzOyYjNDM7O1xuIGV4dF9wdXRfY29udGludWU6XG5AQCAtODg3LDcgJiM0Mzs4OTQsNyBAQCBzdGF0aWMgdm9pZCAqc3RhY2tfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxvZmZfdCAqcHBvcylcbiBcdHJldHVybiBzdGFjaztcbiB9XG4gXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgcGFnZV9vd25lcl9wYWdlc190aHJlc2hvbGQ7XG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2VzX3RocmVzaG9sZDtcbiBcbiBzdGF0aWMgaW50IHN0YWNrX3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbiB7XG5AQCAtOTA0LDcgJiM0Mzs5MTEsNyBAQCBzdGF0aWMgaW50IHN0YWNrX3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbiBcdG5yX2Jhc2VfcGFnZXMgPSByZWZjb3VudF9yZWFkKFx1MDAyNnN0YWNrX3JlY29yZC1cdTAwM2Vjb3VudCkgLSAxO1xuIFxuIFx0aWYgKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgU1RBQ0tfUFJJTlRfRkxBR19QQUdFUyBcdTAwMjZcdTAwMjZcbi1cdCAgICAobnJfYmFzZV9wYWdlcyBcdTAwM2MgMSB8fCBucl9iYXNlX3BhZ2VzIFx1MDAzYyBwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZCkpXG4mIzQzO1x0ICAgIChucl9iYXNlX3BhZ2VzIFx1MDAzYyAxIHx8IG5yX2Jhc2VfcGFnZXMgXHUwMDNjIHBhZ2VzX3RocmVzaG9sZCkpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0aWYgKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgU1RBQ0tfUFJJTlRfRkxBR19TVEFDSykge1xuQEAgLTkyNiwxNiAmIzQzOzkzMywxNiBAQCBzdGF0aWMgdm9pZCBzdGFja19zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbiB7XG4gfVxuIFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgcGFnZV9vd25lcl9zdGFja19vcCA9IHtcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzdGFja19vcCA9IHtcbiBcdC5zdGFydFx0PSBzdGFja19zdGFydCxcbiBcdC5uZXh0XHQ9IHN0YWNrX25leHQsXG4gXHQuc3RvcFx0PSBzdGFja19zdG9wLFxuIFx0LnNob3dcdD0gc3RhY2tfcHJpbnRcbiB9O1xuIFxuLXN0YXRpYyBpbnQgcGFnZV9vd25lcl9zdGFja19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuJiM0MztzdGF0aWMgaW50IHN0YWNrX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4ge1xuLVx0aW50IHJldCA9IHNlcV9vcGVuX3ByaXZhdGUoZmlsZSwgXHUwMDI2cGFnZV9vd25lcl9zdGFja19vcCxcbiYjNDM7XHRpbnQgcmV0ID0gc2VxX29wZW5fcHJpdmF0ZShmaWxlLCBcdTAwMjZzdGFja19vcCxcbiBcdFx0XHRcdCAgIHNpemVvZihzdHJ1Y3Qgc3RhY2tfcHJpbnRfY3R4KSk7XG4gXG4gXHRpZiAoIXJldCkge1xuQEAgLTk0OCwyOCAmIzQzOzk1NSwyNiBAQCBzdGF0aWMgaW50IHBhZ2Vfb3duZXJfc3RhY2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBhZ2Vfb3duZXJfc3RhY2tfZm9wcyA9IHtcbi1cdC5vcGVuXHRcdD0gcGFnZV9vd25lcl9zdGFja19vcGVuLFxuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzdGFja19mb3BzID0ge1xuJiM0MztcdC5vcGVuXHRcdD0gc3RhY2tfb3BlbixcbiBcdC5yZWFkXHRcdD0gc2VxX3JlYWQsXG4gXHQubGxzZWVrXHRcdD0gc2VxX2xzZWVrLFxuIFx0LnJlbGVhc2VcdD0gc2VxX3JlbGVhc2VfcHJpdmF0ZSxcbiB9O1xuIFxuLXN0YXRpYyBpbnQgcGFnZV9vd25lcl90aHJlc2hvbGRfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKVxuJiM0MztzdGF0aWMgaW50IHRocmVzaG9sZF9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpXG4ge1xuLVx0KnZhbCA9IFJFQURfT05DRShwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZCk7XG4mIzQzO1x0KnZhbCA9IFJFQURfT05DRShwYWdlc190aHJlc2hvbGQpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcGFnZV9vd25lcl90aHJlc2hvbGRfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpXG4mIzQzO3N0YXRpYyBpbnQgdGhyZXNob2xkX3NldCh2b2lkICpkYXRhLCB1NjQgdmFsKVxuIHtcbi1cdFdSSVRFX09OQ0UocGFnZV9vd25lcl9wYWdlc190aHJlc2hvbGQsIHZhbCk7XG4mIzQzO1x0V1JJVEVfT05DRShwYWdlc190aHJlc2hvbGQsIHZhbCk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUocGFnZV9vd25lcl90aHJlc2hvbGRfZm9wcywgXHUwMDI2cGFnZV9vd25lcl90aHJlc2hvbGRfZ2V0LFxuLVx0XHRcdFx1MDAyNnBhZ2Vfb3duZXJfdGhyZXNob2xkX3NldCwgXCYjMzQ7JWxsdVwmIzM0Oyk7XG4tXG4mIzQzO0RFRklORV9TSU1QTEVfQVRUUklCVVRFKHRocmVzaG9sZF9mb3BzLCBcdTAwMjZ0aHJlc2hvbGRfZ2V0LCBcdTAwMjZ0aHJlc2hvbGRfc2V0LCBcJiMzNDslbGx1XFxuXCYjMzQ7KTtcbiBcbiBzdGF0aWMgaW50IF9faW5pdCBwYWdlb3duZXJfaW5pdCh2b2lkKVxuIHtcbkBAIC05ODUsMTcgJiM0Mzs5OTAsMTcgQEAgc3RhdGljIGludCBfX2luaXQgcGFnZW93bmVyX2luaXQodm9pZClcbiBcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7c2hvd19zdGFja3NcJiMzNDssIDA0MDAsIGRpcixcbiBcdFx0XHQgICAgKHZvaWQgKikoU1RBQ0tfUFJJTlRfRkxBR19TVEFDSyB8XG4gXHRcdFx0XHQgICAgIFNUQUNLX1BSSU5UX0ZMQUdfUEFHRVMpLFxuLVx0XHRcdCAgICAgXHUwMDI2cGFnZV9vd25lcl9zdGFja19mb3BzKTtcbiYjNDM7XHRcdFx0ICAgICBcdTAwMjZzdGFja19mb3BzKTtcbiBcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7c2hvd19oYW5kbGVzXCYjMzQ7LCAwNDAwLCBkaXIsXG4gXHRcdFx0ICAgICh2b2lkICopKFNUQUNLX1BSSU5UX0ZMQUdfSEFORExFIHxcbiBcdFx0XHRcdCAgICAgU1RBQ0tfUFJJTlRfRkxBR19QQUdFUyksXG4tXHRcdFx0ICAgIFx1MDAyNnBhZ2Vfb3duZXJfc3RhY2tfZm9wcyk7XG4mIzQzO1x0XHRcdCAgICBcdTAwMjZzdGFja19mb3BzKTtcbiBcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7c2hvd19zdGFja3NfaGFuZGxlc1wmIzM0OywgMDQwMCwgZGlyLFxuIFx0XHRcdCAgICAodm9pZCAqKShTVEFDS19QUklOVF9GTEFHX1NUQUNLIHxcbiBcdFx0XHRcdCAgICAgU1RBQ0tfUFJJTlRfRkxBR19IQU5ETEUpLFxuLVx0XHRcdCAgICBcdTAwMjZwYWdlX293bmVyX3N0YWNrX2ZvcHMpO1xuJiM0MztcdFx0XHQgICAgXHUwMDI2c3RhY2tfZm9wcyk7XG4gXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O2NvdW50X3RocmVzaG9sZFwmIzM0OywgMDYwMCwgZGlyLCBOVUxMLFxuLVx0XHRcdCAgICBcdTAwMjZwYWdlX293bmVyX3RocmVzaG9sZF9mb3BzKTtcbiYjNDM7XHRcdFx0ICAgIFx1MDAyNnRocmVzaG9sZF9mb3BzKTtcbiBcdHJldHVybiAwO1xuIH1cbiBsYXRlX2luaXRjYWxsKHBhZ2Vvd25lcl9pbml0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAyOjA3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnNpc3RzIGVudGlyZWx5IG9mIHJlZmFjdG9yaW5nIChjaGFuZ2luZyBpbnQgdG8gZW51bSBtaWdyYXRlX3JlYXNvbiksIGludHJvZHVjaW5nIGEgaGVscGVyIGZ1bmN0aW9uIGZvciBza2lwcGluZyBidWRkeSBwYWdlcyAod2l0aCBubyBmdW5jdGlvbmFsIGNoYW5nZSksIHJlbmFtaW5nIHZhcmlhYmxlcy9mdW5jdGlvbnMsIGFuZCBtb2RpZnlpbmcgcHJpbnRrL3RyYWNlcG9pbnQgb3V0cHV0cy4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgbG9naWMgY2hhbmdlcyB0aGF0IHdhcnJhbnQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDIzYzI4OGEyMzE1MzIxZmFmNDU0NTAxOWZlMTA3ZmFjZGMzZTUzMmMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1biAzMCAwMjowNzo0NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmgKaW5kZXggMmFiYWY5OTMyMWU5MGQuLmZhODI4MjMyZGZjYzE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaApAQCAtMTU0LDcgJiM0MzsxNTQsOCBAQCBsb25nIGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgc3RhcnQsIGxvbmcgZW5kLAogYm9vbCBmb2xpb19pc29sYXRlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCk7CiBpbnQgZ2V0X2h3cG9pc29uX2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCAqaHVnZXRsYiwgYm9vbCB1bnBvaXNvbik7CiB2b2lkIGZvbGlvX3B1dGJhY2tfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKLXZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgaW50IHJlYXNvbik7CiYjNDM7dm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLAomIzQzOwkJCWVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKTsKIHZvaWQgaHVnZXRsYl9maXhfcmVzZXJ2ZV9jb3VudHMoc3RydWN0IGlub2RlICppbm9kZSk7CiBleHRlcm4gc3RydWN0IG11dGV4ICpodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlOwogdTMyIGh1Z2V0bGJfZmF1bHRfbXV0ZXhfaGFzaChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBpZHgpOwpAQCAtNDI0LDcgJiM0Mzs0MjUsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fcHV0YmFja19odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8pCiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sCi0JCQkJCXN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBpbnQgcmVhc29uKQomIzQzOwkJCQkJc3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKQogewogfQogCkBAIC05NTYsNyAmIzQzOzk1Nyw3IEBAIHN0YXRpYyBpbmxpbmUgZ2ZwX3QgaHRsYl9tb2RpZnlfYWxsb2NfbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBnZnBfdCBnZnBfbWFzaykKIAlyZXR1cm4gbW9kaWZpZWRfbWFzazsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGh0bGJfYWxsb3dfYWxsb2NfZmFsbGJhY2soaW50IHJlYXNvbikKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaHRsYl9hbGxvd19hbGxvY19mYWxsYmFjayhlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbikKIHsKIAlib29sIGFsbG93ZWRfZmFsbGJhY2sgPSBmYWxzZTsKIApAQCAtMTIzOCw3ICYjNDM7MTIzOSw3IEBAIHN0YXRpYyBpbmxpbmUgZ2ZwX3QgaHRsYl9tb2RpZnlfYWxsb2NfbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBnZnBfdCBnZnBfbWFzaykKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGh0bGJfYWxsb3dfYWxsb2NfZmFsbGJhY2soaW50IHJlYXNvbikKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaHRsYl9hbGxvd19hbGxvY19mYWxsYmFjayhlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbikKIHsKIAlyZXR1cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaCBiL2luY2x1ZGUvbGludXgvbWlncmF0ZS5oCmluZGV4IGQ1YWYyYjdmNTc3YjMzLi4xZjgzOTI0NjE1ZDZkMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9taWdyYXRlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9taWdyYXRlLmgKQEAgLTU3LDcgJiM0Mzs1Nyw4IEBAIHZvaWQgcHV0YmFja19tb3ZhYmxlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmwpOwogaW50IG1pZ3JhdGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZHN0LAogCQlzdHJ1Y3QgZm9saW8gKnNyYywgZW51bSBtaWdyYXRlX21vZGUgbW9kZSk7CiBpbnQgbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsLCBuZXdfZm9saW9fdCBuZXcsIGZyZWVfZm9saW9fdCBmcmVlLAotCQkgIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiwKJiM0MzsJCSAgdW5zaWduZWQgbG9uZyBwcml2YXRlLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLAomIzQzOwkJICBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiwKIAkJICB1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpOwogc3RydWN0IGZvbGlvICphbGxvY19taWdyYXRpb25fdGFyZ2V0KHN0cnVjdCBmb2xpbyAqc3JjLCB1bnNpZ25lZCBsb25nIHByaXZhdGUpOwogYm9vbCBpc29sYXRlX21vdmFibGVfb3BzX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGlzb2xhdGVfbW9kZV90IG1vZGUpOwpAQCAtNzcsNyAmIzQzOzc4LDggQEAgaW50IHNldF9tb3ZhYmxlX29wcyhjb25zdCBzdHJ1Y3QgbW92YWJsZV9vcGVyYXRpb25zICpvcHMsIGVudW0gcGFnZXR5cGUgdHlwZSk7CiBzdGF0aWMgaW5saW5lIHZvaWQgcHV0YmFja19tb3ZhYmxlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmwpIHt9CiBzdGF0aWMgaW5saW5lIGludCBtaWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmwsIG5ld19mb2xpb190IG5ldywKIAkJZnJlZV9mb2xpb190IGZyZWUsIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwKLQkJZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiwgdW5zaWduZWQgaW50ICpyZXRfc3VjY2VlZGVkKQomIzQzOwkJZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sCiYjNDM7CQl1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpCiAJeyByZXR1cm4gLUVOT1NZUzsgfQogc3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pZ3JhdGlvbl90YXJnZXQoc3RydWN0IGZvbGlvICpzcmMsCiAJCXVuc2lnbmVkIGxvbmcgcHJpdmF0ZSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWlncmF0ZV9tb2RlLmggYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGVfbW9kZS5oCmluZGV4IDI2NWM0MzI4YjM2YWQ1Li4wNTEwMmQ0ZDI0OTBlNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9taWdyYXRlX21vZGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGVfbW9kZS5oCkBAIC0yNSw2ICYjNDM7MjUsNyBAQCBlbnVtIG1pZ3JhdGVfcmVhc29uIHsKIAlNUl9MT05HVEVSTV9QSU4sCiAJTVJfREVNT1RJT04sCiAJTVJfREFNT04sCiYjNDM7CU1SX05FVkVSLAkJLyogcGFnZSBoYXMgbmV2ZXIgYmVlbiBtaWdyYXRlZCAqLwogCU1SX1RZUEVTCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaCBiL2luY2x1ZGUvbGludXgvcGFnZV9vd25lci5oCmluZGV4IDMzMjgzNTdmNmRiYTcyLi45ZmU1MWRmY2NmMjY4NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgKQEAgLTMsNiAmIzQzOzMsNyBAQAogI2RlZmluZSBfX0xJTlVYX1BBR0VfT1dORVJfSAogCiAjaW5jbHVkZSAmbHQ7bGludXgvanVtcF9sYWJlbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9taWdyYXRlX21vZGUuaCZndDsKIAogI2lmZGVmIENPTkZJR19QQUdFX09XTkVSCiBleHRlcm4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcGFnZV9vd25lcl9pbml0ZWQ7CkBAIC0xNCw3ICYjNDM7MTUsNyBAQCBleHRlcm4gdm9pZCBfX3NldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLAogZXh0ZXJuIHZvaWQgX19zcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLAogCQkJaW50IG5ld19vcmRlcik7CiBleHRlcm4gdm9pZCBfX2ZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpOwotZXh0ZXJuIHZvaWQgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJlYXNvbik7CiYjNDM7ZXh0ZXJuIHZvaWQgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pOwogZXh0ZXJuIHZvaWQgX19kdW1wX3BhZ2Vfb3duZXIoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpOwogZXh0ZXJuIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSwKIAkJCQkJcGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHpvbmUgKnpvbmUpOwpAQCAtNDMsNyAmIzQzOzQ0LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpCiAJaWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoJmFtcDtwYWdlX293bmVyX2luaXRlZCkpCiAJCV9fZm9saW9fY29weV9vd25lcihuZXdmb2xpbywgb2xkKTsKIH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJlYXNvbikKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKQogewogCWlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KCZhbXA7cGFnZV9vd25lcl9pbml0ZWQpKQogCQlfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihmb2xpbywgcmVhc29uKTsKQEAgLTY4LDcgJiM0Mzs2OSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLAogc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJlYXNvbikKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKQogewogfQogc3RhdGljIGlubGluZSB2b2lkIGR1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaAppbmRleCBjZDAxZGQ3YjM2NDBkYy4uMTVlZTJlZjIwMWI1ZjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmgKQEAgLTIzLDcgJiM0MzsyMyw4IEBACiAJRU0oIE1SX0NPTlRJR19SQU5HRSwJJiMzNDtjb250aWdfcmFuZ2UmIzM0OykJCQlcCiAJRU0oIE1SX0xPTkdURVJNX1BJTiwJJiMzNDtsb25ndGVybV9waW4mIzM0OykJCQlcCiAJRU0oIE1SX0RFTU9USU9OLAkmIzM0O2RlbW90aW9uJiMzNDspCQkJXAotCUVNZShNUl9EQU1PTiwJCSYjMzQ7ZGFtb24mIzM0OykKJiM0MzsJRU0oIE1SX0RBTU9OLAkJJiMzNDtkYW1vbiYjMzQ7KQkJCVwKJiM0MzsJRU1lKE1SX05FVkVSLAkJJiMzNDtuZXZlcl9taWdyYXRlZCYjMzQ7KQogCiAvKgogICogRmlyc3QgZGVmaW5lIHRoZSBlbnVtcyBpbiB0aGUgYWJvdmUgbWFjcm9zIHRvIGJlIGV4cG9ydGVkIHRvIHVzZXJzcGFjZQpAQCAtNTEsNyAmIzQzOzUyLDcgQEAgVFJBQ0VfRVZFTlQobW1fbWlncmF0ZV9wYWdlcywKIAlUUF9QUk9UTyh1bnNpZ25lZCBsb25nIHN1Y2NlZWRlZCwgdW5zaWduZWQgbG9uZyBmYWlsZWQsCiAJCSB1bnNpZ25lZCBsb25nIHRocF9zdWNjZWVkZWQsIHVuc2lnbmVkIGxvbmcgdGhwX2ZhaWxlZCwKIAkJIHVuc2lnbmVkIGxvbmcgdGhwX3NwbGl0LCB1bnNpZ25lZCBsb25nIGxhcmdlX2ZvbGlvX3NwbGl0LAotCQkgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiksCiYjNDM7CQkgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pLAogCiAJVFBfQVJHUyhzdWNjZWVkZWQsIGZhaWxlZCwgdGhwX3N1Y2NlZWRlZCwgdGhwX2ZhaWxlZCwKIAkJdGhwX3NwbGl0LCBsYXJnZV9mb2xpb19zcGxpdCwgbW9kZSwgcmVhc29uKSwKQEAgLTY0LDcgJiM0Mzs2NSw3IEBAIFRSQUNFX0VWRU5UKG1tX21pZ3JhdGVfcGFnZXMsCiAJCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCQl0aHBfc3BsaXQpCiAJCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCQlsYXJnZV9mb2xpb19zcGxpdCkKIAkJX19maWVsZCgJZW51bSBtaWdyYXRlX21vZGUsCW1vZGUpCi0JCV9fZmllbGQoCWludCwJCQlyZWFzb24pCiYjNDM7CQlfX2ZpZWxkKAllbnVtIG1pZ3JhdGVfcmVhc29uLAlyZWFzb24pCiAJKSwKIAogCVRQX2Zhc3RfYXNzaWduKApAQCAtOTEsMTMgJiM0Mzs5MiwxMyBAQCBUUkFDRV9FVkVOVChtbV9taWdyYXRlX3BhZ2VzLAogCiBUUkFDRV9FVkVOVChtbV9taWdyYXRlX3BhZ2VzX3N0YXJ0LAogCi0JVFBfUFJPVE8oZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiksCiYjNDM7CVRQX1BST1RPKGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKSwKIAogCVRQX0FSR1MobW9kZSwgcmVhc29uKSwKIAogCVRQX1NUUlVDVF9fZW50cnkoCiAJCV9fZmllbGQoZW51bSBtaWdyYXRlX21vZGUsIG1vZGUpCi0JCV9fZmllbGQoaW50LCByZWFzb24pCiYjNDM7CQlfX2ZpZWxkKGVudW0gbWlncmF0ZV9yZWFzb24sIHJlYXNvbikKIAkpLAogCiAJVFBfZmFzdF9hc3NpZ24oCmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmMKaW5kZXggNTcxMjEyYjgwODM1ZWMuLjE3NzMyZDFmZGM1ZWZkIDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jCkBAIC03MTgyLDcgJiM0Mzs3MTgyLDggQEAgdm9pZCBmb2xpb19wdXRiYWNrX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbykKIAlmb2xpb19wdXQoZm9saW8pOwogfQogCi12b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGludCByZWFzb24pCiYjNDM7dm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLAomIzQzOwkJCWVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKQogewogCXN0cnVjdCBoc3RhdGUgKmggPSBmb2xpb19oc3RhdGUob2xkX2ZvbGlvKTsKIApkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jCmluZGV4IGQ5YjIzOTA5ZDcxNmM2Li40OWUxMGZlZWIwOTRmMCAxMDA2NDQKLS0tIGEvbW0vbWlncmF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21pZ3JhdGUuYwpAQCAtMTQ2OSw3ICYjNDM7MTQ2OSw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV9mb2xpb19tb3ZlKGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsCiBzdGF0aWMgaW50IHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZShuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLAogCQlmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLAogCQlzdHJ1Y3QgZm9saW8gKnNyYywgaW50IGZvcmNlLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLAotCQlpbnQgcmVhc29uLCBzdHJ1Y3QgbGlzdF9oZWFkICpyZXQpCiYjNDM7CQllbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiwgc3RydWN0IGxpc3RfaGVhZCAqcmV0KQogewogCXN0cnVjdCBmb2xpbyAqZHN0OwogCWludCByYyA9IC1FQUdBSU47CkBAIC0xNjI2LDcgJiM0MzsxNjI2LDcgQEAgc3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgewogICovCiBzdGF0aWMgaW50IG1pZ3JhdGVfaHVnZXRsYnMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbywKIAkJCSAgICBmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLAotCQkJICAgIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sCiYjNDM7CQkJICAgIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLAogCQkJICAgIHN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzICpzdGF0cywKIAkJCSAgICBzdHJ1Y3QgbGlzdF9oZWFkICpyZXRfZm9saW9zKQogewpAQCAtMTcxNiw3ICYjNDM7MTcxNiw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV9odWdldGxicyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLAogc3RhdGljIHZvaWQgbWlncmF0ZV9mb2xpb3NfbW92ZShzdHJ1Y3QgbGlzdF9oZWFkICpzcmNfZm9saW9zLAogCQlzdHJ1Y3QgbGlzdF9oZWFkICpkc3RfZm9saW9zLAogCQlmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLAotCQllbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLAomIzQzOwkJZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sCiAJCXN0cnVjdCBsaXN0X2hlYWQgKnJldF9mb2xpb3MsCiAJCXN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzICpzdGF0cywKIAkJaW50ICpyZXRyeSwgaW50ICp0aHBfcmV0cnksIGludCAqbnJfZmFpbGVkLApAQCAtMTc5OSw3ICYjNDM7MTc5OSw3IEBAIHN0YXRpYyB2b2lkIG1pZ3JhdGVfZm9saW9zX3VuZG8oc3RydWN0IGxpc3RfaGVhZCAqc3JjX2ZvbGlvcywKICAqLwogc3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sCiAJCW5ld19mb2xpb190IGdldF9uZXdfZm9saW8sIGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLAotCQl1bnNpZ25lZCBsb25nIHByaXZhdGUsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sCiYjNDM7CQl1bnNpZ25lZCBsb25nIHByaXZhdGUsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLAogCQlzdHJ1Y3QgbGlzdF9oZWFkICpyZXRfZm9saW9zLCBzdHJ1Y3QgbGlzdF9oZWFkICpzcGxpdF9mb2xpb3MsCiAJCXN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzICpzdGF0cywgaW50IG5yX3Bhc3MpCiB7CkBAIC0yMDExLDcgJiM0MzsyMDExLDcgQEAgc3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sCiAKIHN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlc19zeW5jKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sCiAJCWZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsCi0JCWVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sCiYjNDM7CQllbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiwKIAkJc3RydWN0IGxpc3RfaGVhZCAqcmV0X2ZvbGlvcywgc3RydWN0IGxpc3RfaGVhZCAqc3BsaXRfZm9saW9zLAogCQlzdHJ1Y3QgbWlncmF0ZV9wYWdlc19zdGF0cyAqc3RhdHMpCiB7CkBAIC0yMDg4LDcgJiM0MzsyMDg4LDcgQEAgc3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX3N5bmMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbywKICAqLwogaW50IG1pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbywKIAkJZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwKLQkJZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiwgdW5zaWduZWQgaW50ICpyZXRfc3VjY2VlZGVkKQomIzQzOwkJZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sIHVuc2lnbmVkIGludCAqcmV0X3N1Y2NlZWRlZCkKIHsKIAlpbnQgcmMsIHJjX2dhdGhlcjsKIAlpbnQgbnJfcGFnZXM7CmRpZmYgLS1naXQgYS9tbS9wYWdlX293bmVyLmMgYi9tbS9wYWdlX293bmVyLmMKaW5kZXggMmRkZGNiNjUxMGFhMWUuLjQ2YTkzM2Y5YzIyOWJkIDEwMDY0NAotLS0gYS9tbS9wYWdlX293bmVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9vd25lci5jCkBAIC0zMzksMTMgJiM0MzszMzksMTMgQEAgbm9pbmxpbmUgdm9pZCBfX3NldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBzaG9ydCBvcmRlciwKIAlkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGU7CiAKIAloYW5kbGUgPSBzYXZlX3N0YWNrKGdmcF9tYXNrKTsKLQlfX3VwZGF0ZV9wYWdlX293bmVyX2hhbmRsZShwYWdlLCBoYW5kbGUsIG9yZGVyLCBnZnBfbWFzaywgLTEsCiYjNDM7CV9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGhhbmRsZSwgb3JkZXIsIGdmcF9tYXNrLCBNUl9ORVZFUiwKIAkJCQkgICB0c19uc2VjLCBjdXJyZW50LSZndDtwaWQsIGN1cnJlbnQtJmd0O3RnaWQsCiAJCQkJICAgY3VycmVudC0mZ3Q7Y29tbSk7CiAJaW5jX3N0YWNrX3JlY29yZF9jb3VudChoYW5kbGUsIGdmcF9tYXNrLCAxICZsdDsmbHQ7IG9yZGVyKTsKIH0KIAotdm9pZCBfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcmVhc29uKQomIzQzO3ZvaWQgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pCiB7CiAJc3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dCA9IHBhZ2VfZXh0X2dldCgmYW1wO2ZvbGlvLSZndDtwYWdlKTsKIAlzdHJ1Y3QgcGFnZV9vd25lciAqcGFnZV9vd25lcjsKQEAgLTQyMiw2ICYjNDM7NDIyLDI5IEBAIHZvaWQgX19mb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKQogCXJjdV9yZWFkX3VubG9jaygpOwogfQogCiYjNDM7LyoKJiM0MzsgKiBDaGVjayBpZiBhIHBhZ2UgaXMgYSBidWRkeSBwYWdlIGFuZCBhZHZhbmNlIEBwZm4gcGFzdCB0aGUgZW50aXJlIGJ1ZGR5IGJsb2NrLgomIzQzOyAqIFRoaXMgc2FmZWx5IHJlYWRzIHRoZSBidWRkeSBvcmRlciB3aXRob3V0IHRoZSB6b25lIGxvY2ssIHdoaWNoIG1heSBjYXVzZSB1cwomIzQzOyAqIHRvIHNraXAgbGVzcyB0aGFuIHRoZSBmdWxsIGJ1ZGR5IGJsb2NrLCBidXQgdGhhdCBpcyBhY2NlcHRhYmxlIGZvciBwYWdlIG93bmVyCiYjNDM7ICogaXRlcmF0aW9uIHB1cnBvc2VzLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIHRoZSBwYWdlIHdhcyBza2lwcGVkIChjYWxsZXIgc2hvdWxkIGNvbnRpbnVlIGl0cyBsb29wKSwKJiM0MzsgKiAgICAgICAgIGZhbHNlIGlmIHRoZSBwYWdlIGlzIG5vdCBhIGJ1ZGR5IHBhZ2UgYW5kIHNob3VsZCBiZSBwcm9jZXNzZWQgbm9ybWFsbHkuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBib29sIHNraXBfYnVkZHlfcGFnZXModW5zaWduZWQgbG9uZyAqcGZuLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgb3JkZXI7CiYjNDM7CiYjNDM7CWlmICghUGFnZUJ1ZGR5KHBhZ2UpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlvcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTsKJiM0MzsJaWYgKG9yZGVyICZsdDs9IE1BWF9QQUdFX09SREVSKQomIzQzOwkJKnBmbiAmIzQzOz0gKDFVTCAmbHQ7Jmx0OyBvcmRlcikgLSAxOwomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiB2b2lkIHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sCiAJCQkJICAgICAgIHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCB6b25lICp6b25lKQogewpAQCAtNDYxLDE0ICYjNDM7NDg0LDggQEAgdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLAogCQkJaWYgKHBhZ2Vfem9uZShwYWdlKSAhPSB6b25lKQogCQkJCWNvbnRpbnVlOwogCi0JCQlpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7Ci0JCQkJdW5zaWduZWQgbG9uZyBmcmVlcGFnZV9vcmRlcjsKLQotCQkJCWZyZWVwYWdlX29yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpOwotCQkJCWlmIChmcmVlcGFnZV9vcmRlciAmbHQ7PSBNQVhfUEFHRV9PUkRFUikKLQkJCQkJcGZuICYjNDM7PSAoMVVMICZsdDsmbHQ7IGZyZWVwYWdlX29yZGVyKSAtIDE7CiYjNDM7CQkJaWYgKHNraXBfYnVkZHlfcGFnZXMoJmFtcDtwZm4sIHBhZ2UpKQogCQkJCWNvbnRpbnVlOwotCQkJfQogCiAJCQlpZiAoUGFnZVJlc2VydmVkKHBhZ2UpKQogCQkJCWNvbnRpbnVlOwpAQCAtNTA1LDEzICYjNDM7NTIyLDEzIEBAIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSwKIAlzZXFfcHV0YyhtLCAmIzM5O1xuJiMzOTspOwogfQogCiYjNDM7I2lmZGVmIENPTkZJR19NRU1DRwogLyoKICAqIExvb2tpbmcgZm9yIG1lbWNnIGluZm9ybWF0aW9uIGFuZCBwcmludCBpdCBvdXQKICAqLwogc3RhdGljIGlubGluZSBpbnQgcHJpbnRfcGFnZV9vd25lcl9tZW1jZyhjaGFyICprYnVmLCBzaXplX3QgY291bnQsIGludCByZXQsCiAJCQkJCSBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLSNpZmRlZiBDT05GSUdfTUVNQ0cKIAl1bnNpZ25lZCBsb25nIG1lbWNnX2RhdGE7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwogCWJvb2wgb25saW5lOwpAQCAtNTM5LDEwICYjNDM7NTU2LDE2IEBAIHN0YXRpYyBpbmxpbmUgaW50IHByaW50X3BhZ2Vfb3duZXJfbWVtY2coY2hhciAqa2J1Ziwgc2l6ZV90IGNvdW50LCBpbnQgcmV0LAogCQkJbmFtZSk7CiBvdXRfdW5sb2NrOgogCXJjdV9yZWFkX3VubG9jaygpOwotI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqLwogCiAJcmV0dXJuIHJldDsKIH0KJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHByaW50X3BhZ2Vfb3duZXJfbWVtY2coY2hhciAqa2J1Ziwgc2l6ZV90IGNvdW50LCBpbnQgcmV0LAomIzQzOwkJCQkJIHN0cnVjdCBwYWdlICpwYWdlKQomIzQzO3sKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7I2VuZGlmCiAKIHN0YXRpYyBzc2l6ZV90CiBwcmludF9wYWdlX293bmVyKGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgbG9uZyBwZm4sCkBAIC01NzksNyAmIzQzOzYwMiw3IEBAIHByaW50X3BhZ2Vfb3duZXIoY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBsb25nIHBmbiwKIAlpZiAocmV0ICZndDs9IGNvdW50KQogCQlnb3RvIGVycjsKIAotCWlmIChwYWdlX293bmVyLSZndDtsYXN0X21pZ3JhdGVfcmVhc29uICE9IC0xKSB7CiYjNDM7CWlmIChwYWdlX293bmVyLSZndDtsYXN0X21pZ3JhdGVfcmVhc29uICE9IE1SX05FVkVSKSB7CiAJCXJldCAmIzQzOz0gc2NucHJpbnRmKGtidWYgJiM0MzsgcmV0LCBjb3VudCAtIHJldCwKIAkJCSYjMzQ7UGFnZSBoYXMgYmVlbiBtaWdyYXRlZCwgbGFzdCBtaWdyYXRlIHJlYXNvbjogJXNcbiYjMzQ7LAogCQkJbWlncmF0ZV9yZWFzb25fbmFtZXNbcGFnZV9vd25lci0mZ3Q7bGFzdF9taWdyYXRlX3JlYXNvbl0pOwpAQCAtNjMwLDEwICYjNDM7NjUzLDEwIEBAIHZvaWQgX19kdW1wX3BhZ2Vfb3duZXIoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpCiAJZWxzZQogCQlwcl9hbGVydCgmIzM0O3BhZ2Vfb3duZXIgdHJhY2tzIHRoZSBwYWdlIGFzIGZyZWVkXG4mIzM0Oyk7CiAKLQlwcl9hbGVydCgmIzM0O3BhZ2UgbGFzdCBhbGxvY2F0ZWQgdmlhIG9yZGVyICV1LCBtaWdyYXRldHlwZSAlcywgZ2ZwX21hc2sgJSN4KCVwR2cpLCBwaWQgJWQsIHRnaWQgJWQgKCVzKSwgdHMgJWxsdSwgZnJlZV90cyAlbGx1XG4mIzM0OywKJiM0MzsJcHJfYWxlcnQoJiMzNDtwYWdlIGxhc3QgYWxsb2NhdGVkIHZpYSBvcmRlciAldSwgbWlncmF0ZXR5cGUgJXMsIGdmcF9tYXNrICUjeCglcEdnKSwgcGlkICVkLCB0Z2lkICVkICglcyksIHRzICVsbHVcbiYjMzQ7LAogCQkgcGFnZV9vd25lci0mZ3Q7b3JkZXIsIG1pZ3JhdGV0eXBlX25hbWVzW210XSwgZ2ZwX21hc2ssICZhbXA7Z2ZwX21hc2ssCiAJCSBwYWdlX293bmVyLSZndDtwaWQsIHBhZ2Vfb3duZXItJmd0O3RnaWQsIHBhZ2Vfb3duZXItJmd0O2NvbW0sCi0JCSBwYWdlX293bmVyLSZndDt0c19uc2VjLCBwYWdlX293bmVyLSZndDtmcmVlX3RzX25zZWMpOwomIzQzOwkJIHBhZ2Vfb3duZXItJmd0O3RzX25zZWMpOwogCiAJaGFuZGxlID0gUkVBRF9PTkNFKHBhZ2Vfb3duZXItJmd0O2hhbmRsZSk7CiAJaWYgKCFoYW5kbGUpCkBAIC02NDUsMTIgJiM0Mzs2NjgsMTMgQEAgdm9pZCBfX2R1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIAlpZiAoIWhhbmRsZSkgewogCQlwcl9hbGVydCgmIzM0O3BhZ2Vfb3duZXIgZnJlZSBzdGFjayB0cmFjZSBtaXNzaW5nXG4mIzM0Oyk7CiAJfSBlbHNlIHsKLQkJcHJfYWxlcnQoJiMzNDtwYWdlIGxhc3QgZnJlZSBwaWQgJWQgdGdpZCAlZCBzdGFjayB0cmFjZTpcbiYjMzQ7LAotCQkJICBwYWdlX293bmVyLSZndDtmcmVlX3BpZCwgcGFnZV9vd25lci0mZ3Q7ZnJlZV90Z2lkKTsKJiM0MzsJCXByX2FsZXJ0KCYjMzQ7cGFnZSBsYXN0IGZyZWUgcGlkICVkIHRnaWQgJWQgdHMgJWxsdSBzdGFjayB0cmFjZTpcbiYjMzQ7LAomIzQzOwkJCSAgcGFnZV9vd25lci0mZ3Q7ZnJlZV9waWQsIHBhZ2Vfb3duZXItJmd0O2ZyZWVfdGdpZCwKJiM0MzsJCQkgIHBhZ2Vfb3duZXItJmd0O2ZyZWVfdHNfbnNlYyk7CiAJCXN0YWNrX2RlcG90X3ByaW50KGhhbmRsZSk7CiAJfQogCi0JaWYgKHBhZ2Vfb3duZXItJmd0O2xhc3RfbWlncmF0ZV9yZWFzb24gIT0gLTEpCiYjNDM7CWlmIChwYWdlX293bmVyLSZndDtsYXN0X21pZ3JhdGVfcmVhc29uICE9IE1SX05FVkVSKQogCQlwcl9hbGVydCgmIzM0O3BhZ2UgaGFzIGJlZW4gbWlncmF0ZWQsIGxhc3QgbWlncmF0ZSByZWFzb246ICVzXG4mIzM0OywKIAkJCW1pZ3JhdGVfcmVhc29uX25hbWVzW3BhZ2Vfb3duZXItJmd0O2xhc3RfbWlncmF0ZV9yZWFzb25dKTsKIAlwYWdlX2V4dF9wdXQocGFnZV9leHQpOwpAQCAtNjk3LDEzICYjNDM7NzIxLDggQEAgcmVhZF9wYWdlX293bmVyKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIAkJfQogCiAJCXBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwotCQlpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7Ci0JCQl1bnNpZ25lZCBsb25nIGZyZWVwYWdlX29yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpOwotCi0JCQlpZiAoZnJlZXBhZ2Vfb3JkZXIgJmx0Oz0gTUFYX1BBR0VfT1JERVIpCi0JCQkJcGZuICYjNDM7PSAoMVVMICZsdDsmbHQ7IGZyZWVwYWdlX29yZGVyKSAtIDE7CiYjNDM7CQlpZiAoc2tpcF9idWRkeV9wYWdlcygmYW1wO3BmbiwgcGFnZSkpCiAJCQljb250aW51ZTsKLQkJfQogCiAJCXBhZ2VfZXh0ID0gcGFnZV9leHRfZ2V0KHBhZ2UpOwogCQlpZiAodW5saWtlbHkoIXBhZ2VfZXh0KSkKQEAgLTc5OCwyMCAmIzQzOzgxNyw4IEBAIHN0YXRpYyB2b2lkIGluaXRfcGFnZXNfaW5fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSkKIAkJCWlmIChwYWdlX3pvbmUocGFnZSkgIT0gem9uZSkKIAkJCQljb250aW51ZTsKIAotCQkJLyoKLQkJCSAqIFRvIGF2b2lkIGhhdmluZyB0byBncmFiIHpvbmUtJmd0O2xvY2ssIGJlIGEgbGl0dGxlCi0JCQkgKiBjYXJlZnVsIHdoZW4gcmVhZGluZyBidWRkeSBwYWdlIG9yZGVyLiBUaGUgb25seQotCQkJICogZGFuZ2VyIGlzIHRoYXQgd2Ugc2tpcCB0b28gbXVjaCBhbmQgcG90ZW50aWFsbHkgbWlzcwotCQkJICogc29tZSBlYXJseSBhbGxvY2F0ZWQgcGFnZXMsIHdoaWNoIGlzIGJldHRlciB0aGFuCi0JCQkgKiBoZWF2eSBsb2NrIGNvbnRlbnRpb24uCi0JCQkgKi8KLQkJCWlmIChQYWdlQnVkZHkocGFnZSkpIHsKLQkJCQl1bnNpZ25lZCBsb25nIG9yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpOwotCi0JCQkJaWYgKG9yZGVyICZndDsgMCAmYW1wOyZhbXA7IG9yZGVyICZsdDs9IE1BWF9QQUdFX09SREVSKQotCQkJCQlwZm4gJiM0Mzs9ICgxVUwgJmx0OyZsdDsgb3JkZXIpIC0gMTsKJiM0MzsJCQlpZiAoc2tpcF9idWRkeV9wYWdlcygmYW1wO3BmbiwgcGFnZSkpCiAJCQkJY29udGludWU7Ci0JCQl9CiAKIAkJCWlmIChQYWdlUmVzZXJ2ZWQocGFnZSkpCiAJCQkJY29udGludWU7CkBAIC04MjYsNyAmIzQzOzgzMyw3IEBAIHN0YXRpYyB2b2lkIGluaXRfcGFnZXNfaW5fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSkKIAogCQkJLyogRm91bmQgZWFybHkgYWxsb2NhdGVkIHBhZ2UgKi8KIAkJCV9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGVhcmx5X2hhbmRsZSwgMCwgMCwKLQkJCQkJCSAgIC0xLCBsb2NhbF9jbG9jaygpLCBjdXJyZW50LSZndDtwaWQsCiYjNDM7CQkJCQkJICAgTVJfTkVWRVIsIGxvY2FsX2Nsb2NrKCksIGN1cnJlbnQtJmd0O3BpZCwKIAkJCQkJCSAgIGN1cnJlbnQtJmd0O3RnaWQsIGN1cnJlbnQtJmd0O2NvbW0pOwogCQkJY291bnQmIzQzOyYjNDM7OwogZXh0X3B1dF9jb250aW51ZToKQEAgLTg4Nyw3ICYjNDM7ODk0LDcgQEAgc3RhdGljIHZvaWQgKnN0YWNrX25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBwb3MpCiAJcmV0dXJuIHN0YWNrOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZDsKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlc190aHJlc2hvbGQ7CiAKIHN0YXRpYyBpbnQgc3RhY2tfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewpAQCAtOTA0LDcgJiM0Mzs5MTEsNyBAQCBzdGF0aWMgaW50IHN0YWNrX3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIAlucl9iYXNlX3BhZ2VzID0gcmVmY291bnRfcmVhZCgmYW1wO3N0YWNrX3JlY29yZC0mZ3Q7Y291bnQpIC0gMTsKIAogCWlmIChjdHgtJmd0O2ZsYWdzICZhbXA7IFNUQUNLX1BSSU5UX0ZMQUdfUEFHRVMgJmFtcDsmYW1wOwotCSAgICAobnJfYmFzZV9wYWdlcyAmbHQ7IDEgfHwgbnJfYmFzZV9wYWdlcyAmbHQ7IHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkKSkKJiM0MzsJICAgIChucl9iYXNlX3BhZ2VzICZsdDsgMSB8fCBucl9iYXNlX3BhZ2VzICZsdDsgcGFnZXNfdGhyZXNob2xkKSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoY3R4LSZndDtmbGFncyAmYW1wOyBTVEFDS19QUklOVF9GTEFHX1NUQUNLKSB7CkBAIC05MjYsMTYgJiM0Mzs5MzMsMTYgQEAgc3RhdGljIHZvaWQgc3RhY2tfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgcGFnZV9vd25lcl9zdGFja19vcCA9IHsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHN0YWNrX29wID0gewogCS5zdGFydAk9IHN0YWNrX3N0YXJ0LAogCS5uZXh0CT0gc3RhY2tfbmV4dCwKIAkuc3RvcAk9IHN0YWNrX3N0b3AsCiAJLnNob3cJPSBzdGFja19wcmludAogfTsKIAotc3RhdGljIGludCBwYWdlX293bmVyX3N0YWNrX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiYjNDM7c3RhdGljIGludCBzdGFja19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCWludCByZXQgPSBzZXFfb3Blbl9wcml2YXRlKGZpbGUsICZhbXA7cGFnZV9vd25lcl9zdGFja19vcCwKJiM0MzsJaW50IHJldCA9IHNlcV9vcGVuX3ByaXZhdGUoZmlsZSwgJmFtcDtzdGFja19vcCwKIAkJCQkgICBzaXplb2Yoc3RydWN0IHN0YWNrX3ByaW50X2N0eCkpOwogCiAJaWYgKCFyZXQpIHsKQEAgLTk0OCwyOCAmIzQzOzk1NSwyNiBAQCBzdGF0aWMgaW50IHBhZ2Vfb3duZXJfc3RhY2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwYWdlX293bmVyX3N0YWNrX2ZvcHMgPSB7Ci0JLm9wZW4JCT0gcGFnZV9vd25lcl9zdGFja19vcGVuLAomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN0YWNrX2ZvcHMgPSB7CiYjNDM7CS5vcGVuCQk9IHN0YWNrX29wZW4sCiAJLnJlYWQJCT0gc2VxX3JlYWQsCiAJLmxsc2VlawkJPSBzZXFfbHNlZWssCiAJLnJlbGVhc2UJPSBzZXFfcmVsZWFzZV9wcml2YXRlLAogfTsKIAotc3RhdGljIGludCBwYWdlX293bmVyX3RocmVzaG9sZF9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpCiYjNDM7c3RhdGljIGludCB0aHJlc2hvbGRfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKQogewotCSp2YWwgPSBSRUFEX09OQ0UocGFnZV9vd25lcl9wYWdlc190aHJlc2hvbGQpOwomIzQzOwkqdmFsID0gUkVBRF9PTkNFKHBhZ2VzX3RocmVzaG9sZCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcGFnZV9vd25lcl90aHJlc2hvbGRfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpCiYjNDM7c3RhdGljIGludCB0aHJlc2hvbGRfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpCiB7Ci0JV1JJVEVfT05DRShwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZCwgdmFsKTsKJiM0MzsJV1JJVEVfT05DRShwYWdlc190aHJlc2hvbGQsIHZhbCk7CiAJcmV0dXJuIDA7CiB9CiAKLURFRklORV9TSU1QTEVfQVRUUklCVVRFKHBhZ2Vfb3duZXJfdGhyZXNob2xkX2ZvcHMsICZhbXA7cGFnZV9vd25lcl90aHJlc2hvbGRfZ2V0LAotCQkJJmFtcDtwYWdlX293bmVyX3RocmVzaG9sZF9zZXQsICYjMzQ7JWxsdSYjMzQ7KTsKLQomIzQzO0RFRklORV9TSU1QTEVfQVRUUklCVVRFKHRocmVzaG9sZF9mb3BzLCAmYW1wO3RocmVzaG9sZF9nZXQsICZhbXA7dGhyZXNob2xkX3NldCwgJiMzNDslbGx1XG4mIzM0Oyk7CiAKIHN0YXRpYyBpbnQgX19pbml0IHBhZ2Vvd25lcl9pbml0KHZvaWQpCiB7CkBAIC05ODUsMTcgJiM0Mzs5OTAsMTcgQEAgc3RhdGljIGludCBfX2luaXQgcGFnZW93bmVyX2luaXQodm9pZCkKIAlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCYjMzQ7c2hvd19zdGFja3MmIzM0OywgMDQwMCwgZGlyLAogCQkJICAgICh2b2lkICopKFNUQUNLX1BSSU5UX0ZMQUdfU1RBQ0sgfAogCQkJCSAgICAgU1RBQ0tfUFJJTlRfRkxBR19QQUdFUyksCi0JCQkgICAgICZhbXA7cGFnZV9vd25lcl9zdGFja19mb3BzKTsKJiM0MzsJCQkgICAgICZhbXA7c3RhY2tfZm9wcyk7CiAJZGVidWdmc19jcmVhdGVfZmlsZSgmIzM0O3Nob3dfaGFuZGxlcyYjMzQ7LCAwNDAwLCBkaXIsCiAJCQkgICAgKHZvaWQgKikoU1RBQ0tfUFJJTlRfRkxBR19IQU5ETEUgfAogCQkJCSAgICAgU1RBQ0tfUFJJTlRfRkxBR19QQUdFUyksCi0JCQkgICAgJmFtcDtwYWdlX293bmVyX3N0YWNrX2ZvcHMpOwomIzQzOwkJCSAgICAmYW1wO3N0YWNrX2ZvcHMpOwogCWRlYnVnZnNfY3JlYXRlX2ZpbGUoJiMzNDtzaG93X3N0YWNrc19oYW5kbGVzJiMzNDssIDA0MDAsIGRpciwKIAkJCSAgICAodm9pZCAqKShTVEFDS19QUklOVF9GTEFHX1NUQUNLIHwKIAkJCQkgICAgIFNUQUNLX1BSSU5UX0ZMQUdfSEFORExFKSwKLQkJCSAgICAmYW1wO3BhZ2Vfb3duZXJfc3RhY2tfZm9wcyk7CiYjNDM7CQkJICAgICZhbXA7c3RhY2tfZm9wcyk7CiAJZGVidWdmc19jcmVhdGVfZmlsZSgmIzM0O2NvdW50X3RocmVzaG9sZCYjMzQ7LCAwNjAwLCBkaXIsIE5VTEwsCi0JCQkgICAgJmFtcDtwYWdlX293bmVyX3RocmVzaG9sZF9mb3BzKTsKJiM0MzsJCQkgICAgJmFtcDt0aHJlc2hvbGRfZm9wcyk7CiAJcmV0dXJuIDA7CiB9CiBsYXRlX2luaXRjYWxsKHBhZ2Vvd25lcl9pbml0KQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMjowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODEzCgkJCQkJCQlvdXRwdXQ6IDg2CgkJCQkJCQl0aG91Z2h0czogMTQzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpczogUGFnZSBNaWdyYXRpb24gYW5kIE93bmVyIFJlZmFjdG9yaW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIHBhdGNoIGRvd24uIFRoZSBwcmltYXJ5IGZvY3VzIHNlZW1zIHRvIGJlIGEgY2xlYW51cCBhbmQgcmVmYWN0b3JpbmcgZWZmb3J0IGFyb3VuZCBwYWdlIG1pZ3JhdGlvbiBhbmQgdGhlIHBhZ2Ugb3duZXIgZnVuY3Rpb25hbGl0eS4gVGhlIGZpcnN0IHRoaW5nIEkgbm90aWNlIGlzIGEgcGVydmFzaXZlIHR5cGUgY2hhbmdlOiBgaW50IHJlYXNvbmAgaXMgYmVpbmcgc3dhcHBlZCBmb3IgYGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uYCBhY3Jvc3Mgc2V2ZXJhbCBmdW5jdGlvbnMgcmVsYXRlZCB0byBwYWdlIG1pZ3JhdGlvbiBhbmQgdGhlIHBhZ2Ugb3duZXIuIFRoZXkmIzM5O3ZlIGFsc28gaW50cm9kdWNlZCBgTVJfTkVWRVJgIHRvIHRoZSBgZW51bSBtaWdyYXRlX3JlYXNvbmAgZW51bSBhbmQgYXJlIHVzaW5nIGl0IGluIGBwYWdlX293bmVyLmNgIHdoZXJlIGAtMWAgd2FzIHByZXZpb3VzbHkgdXNlZC4KCkxvb2tpbmcgaW50byB0aGUgYG1tL3BhZ2Vfb3duZXIuY2AgY2hhbmdlcyBtb3JlIGNsb3NlbHksIHRoZXJlJiMzOTtzIGEgaGVscGVyIGZ1bmN0aW9uLCBgc2tpcF9idWRkeV9wYWdlc2AsIGludHJvZHVjZWQuIFRoaXMgc2VlbXMgdG8gY29uc29saWRhdGUgc29tZSBidWRkeSBwYWdlIHNraXBwaW5nIGxvZ2ljLiBFeGFtaW5pbmcgdGhlIGNvZGUsIHRoZSBjaGFuZ2UgaW4gYHNraXBfYnVkZHlfcGFnZXNgIHJlcGxhY2VzIGlubGluZSBjb2RlIHRoYXQgd2FzIHByZXZpb3VzbHkgaW5saW5lZDsgdGhlcmUmIzM5O3MgYSBtaW5vciBsb2dpY2FsIGNoYW5nZSBpbiBgaW5pdF9wYWdlc19pbl96b25lYCwgd2hlcmUgYGlmIChvcmRlciAmZ3Q7IDAgJmFtcDsmYW1wOyBvcmRlciAmbHQ7PSBNQVhfUEFHRV9PUkRFUilgIGJlY29tZXMgYGlmIChvcmRlciAmbHQ7PSBNQVhfUEFHRV9PUkRFUilgLiBUaGlzIG1lYW5zIGl0IHdpbGwgcGVyZm9ybSBhIG5vLW9wIHdoZW4gYG9yZGVyID09IDBgIChhZGRpbmcgMCB0byB0aGUgcGFnZSBmcmFtZSBudW1iZXIpLCBhbmQgSSBkb24mIzM5O3Qgc2VlIGFueSBmdW5jdGlvbmFsIGRpZmZlcmVuY2UgaW4gdGhhdC4KCldlJiMzOTt2ZSBnb3Qgc29tZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBmb3IgbWVtY2cgc3VwcG9ydCwgYW5kIHRoZXJlJiMzOTtzIGEgdHdlYWsgdG8gdGhlIG91dHB1dCBvZiBgX19kdW1wX3BhZ2Vfb3duZXJgLCBzcGVjaWZpY2FsbHkgdGhlIGBwcl9hbGVydGAgY2FsbHMuIFRoZSBgZnJlZV90c19uc2VjYCBmaWVsZCBpcyBtb3ZlZCBiZXR3ZWVuIHRoZSBwcmludCBzdGF0ZW1lbnRzLCBhbmQgSSBzZWUgYSBjaGFuZ2UgYWRkaW5nIGEgbmV3bGluZSBjaGFyYWN0ZXIgdG8gb25lIG9mIHRoZSBmb3JtYXQgc3RyaW5ncy4gTWlub3IgY2hhbmdlcywgYnV0IG5vdGhpbmcgdGhhdCB3b3VsZCBsaWtlbHkgYmUgZnVuY3Rpb25hbGx5IGltcGFjdGZ1bC4KClRoZXJlJiMzOTtzIGFsc28gc29tZSByZW5hbWluZyBnb2luZyBvbjogdmFyaWFibGVzIGFuZCBkZWJ1Z2ZzIGZpbGUgbmFtZXMgYXJlIGJlaW5nIG1hZGUgbW9yZSBjb25zaXN0ZW50LiBgcGFnZV9vd25lcl9wYWdlc190aHJlc2hvbGRgIGJlY29tZXMgYHBhZ2VzX3RocmVzaG9sZGAsIGBwYWdlX293bmVyX3N0YWNrX29wYCBiZWNvbWVzIGBzdGFja19vcGAsIGV0Yy4gSXQmIzM5O3MgYWxsIHJlZmFjdG9yaW5nLCBtb3N0bHkgdG8gaW1wcm92ZSByZWFkYWJpbGl0eS4KCkxldCYjMzk7cyBzZWU6IGBNUl9ORVZFUmAgaXMgYmVpbmcgdXNlZCBpbiBgX191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGVgLiBUaGUgY29tcGFyaXNvbiBgcGFnZV9vd25lci0mZ3Q7bGFzdF9taWdyYXRlX3JlYXNvbiAhPSBNUl9ORVZFUmAgcmVwbGFjZXMgYCE9IC0xYC4KCkFscmlnaHQsIEkmIzM5O20gbm90IHNlZWluZyBhbnkgaW50cm9kdWN0aW9uIG9mIG5ldyAqZnVuY3Rpb25hbCogbG9naWMgdGhhdCB3b3VsZCBiZSB3b3J0aCBmdXp6aW5nLiBUaGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IHR5cGUgY29udmVyc2lvbnMsIG1pbm9yIGxvZ2ljIGFkanVzdG1lbnRzIChsaWtlIHRoZSBuby1vcCBpbiBgc2tpcF9idWRkeV9wYWdlc2ApLCByZWZhY3RvcmluZywgYW5kIGNvc21ldGljIGNoYW5nZXMgdG8gcHJpbnQgb3V0cHV0IGFuZCB2YXJpYWJsZSBuYW1lcy4gSXQmIzM5O3MgZXNzZW50aWFsbHkgYSBjbGVhbnVwIHBhdGNoIHRoYXQgZW5oYW5jZXMgbWFpbnRhaW5hYmlsaXR5IGFuZCByZWFkYWJpbGl0eSwgYnV0IGRvZXNuJiMzOTt0IGNoYW5nZSB3aGF0IHRoZSBjb2RlIGFjdHVhbGx5ICpkb2VzKi4gSSBkb24mIzM5O3QgdGhpbmsgYW55IG9mIHRoaXMgcmVxdWlyZXMgZnV6emluZywgaXQgY2FuIGJlIHNhZmVseSBtYXJrZWQgYXMgV29ydGhGdXp6aW5nPWZhbHNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAyOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29uc2lzdHMgZW50aXJlbHkgb2YgcmVmYWN0b3JpbmcgKGNoYW5naW5nIGludCB0byBlbnVtIG1pZ3JhdGVfcmVhc29uKSwgaW50cm9kdWNpbmcgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIHNraXBwaW5nIGJ1ZGR5IHBhZ2VzICh3aXRoIG5vIGZ1bmN0aW9uYWwgY2hhbmdlKSwgcmVuYW1pbmcgdmFyaWFibGVzL2Z1bmN0aW9ucywgYW5kIG1vZGlmeWluZyBwcmludGsvdHJhY2Vwb2ludCBvdXRwdXRzLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBsb2dpYyBjaGFuZ2VzIHRoYXQgd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29uc2lzdHMgZW50aXJlbHkgb2YgcmVmYWN0b3JpbmcgKGNoYW5naW5nIGludCB0byBlbnVtIG1pZ3JhdGVfcmVhc29uKSwgaW50cm9kdWNpbmcgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIHNraXBwaW5nIGJ1ZGR5IHBhZ2VzICh3aXRoIG5vIGZ1bmN0aW9uYWwgY2hhbmdlKSwgcmVuYW1pbmcgdmFyaWFibGVzL2Z1bmN0aW9ucywgYW5kIG1vZGlmeWluZyBwcmludGsvdHJhY2Vwb2ludCBvdXRwdXRzLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBsb2dpYyBjaGFuZ2VzIHRoYXQgd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAyOjA3OjQ2LjQwMTY0NDUzOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTExNTAyNzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb25zaXN0cyBlbnRpcmVseSBvZiByZWZhY3RvcmluZyAoY2hhbmdpbmcgaW50IHRvIGVudW0gbWlncmF0ZV9yZWFzb24pLCBpbnRyb2R1Y2luZyBhIGhlbHBlciBmdW5jdGlvbiBmb3Igc2tpcHBpbmcgYnVkZHkgcGFnZXMgKHdpdGggbm8gZnVuY3Rpb25hbCBjaGFuZ2UpLCByZW5hbWluZyB2YXJpYWJsZXMvZnVuY3Rpb25zLCBhbmQgbW9kaWZ5aW5nIHByaW50ay90cmFjZXBvaW50IG91dHB1dHMuIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGxvZ2ljIGNoYW5nZXMgdGhhdCB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwMjowNzo0Ni40MDE2NDk4ODhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MTYzMzcxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDIzYzI4OGEyMzE1MzIxZmFmNDU0NTAxOWZlMTA3ZmFjZGMzZTUzMmNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdW4gMzAgMDI6MDc6NDUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxcbmluZGV4IDJhYmFmOTkzMjFlOTBkLi5mYTgyODIzMmRmY2MxOCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXFxuQEAgLTE1NCw3ICsxNTQsOCBAQCBsb25nIGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgc3RhcnQsIGxvbmcgZW5kLFxcbiBib29sIGZvbGlvX2lzb2xhdGVfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KTtcXG4gaW50IGdldF9od3BvaXNvbl9odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgKmh1Z2V0bGIsIGJvb2wgdW5wb2lzb24pO1xcbiB2b2lkIGZvbGlvX3B1dGJhY2tfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4tdm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBpbnQgcmVhc29uKTtcXG4rdm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLFxcbitcXHRcXHRcXHRlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbik7XFxuIHZvaWQgaHVnZXRsYl9maXhfcmVzZXJ2ZV9jb3VudHMoc3RydWN0IGlub2RlICppbm9kZSk7XFxuIGV4dGVybiBzdHJ1Y3QgbXV0ZXggKmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGU7XFxuIHUzMiBodWdldGxiX2ZhdWx0X211dGV4X2hhc2goc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgaWR4KTtcXG5AQCAtNDI0LDcgKzQyNSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19wdXRiYWNrX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbyxcXG4tXFx0XFx0XFx0XFx0XFx0c3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGludCByZWFzb24pXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbilcXG4ge1xcbiB9XFxuIFxcbkBAIC05NTYsNyArOTU3LDcgQEAgc3RhdGljIGlubGluZSBnZnBfdCBodGxiX21vZGlmeV9hbGxvY19tYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGdmcF90IGdmcF9tYXNrKVxcbiBcXHRyZXR1cm4gbW9kaWZpZWRfbWFzaztcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBib29sIGh0bGJfYWxsb3dfYWxsb2NfZmFsbGJhY2soaW50IHJlYXNvbilcXG4rc3RhdGljIGlubGluZSBib29sIGh0bGJfYWxsb3dfYWxsb2NfZmFsbGJhY2soZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pXFxuIHtcXG4gXFx0Ym9vbCBhbGxvd2VkX2ZhbGxiYWNrID0gZmFsc2U7XFxuIFxcbkBAIC0xMjM4LDcgKzEyMzksNyBAQCBzdGF0aWMgaW5saW5lIGdmcF90IGh0bGJfbW9kaWZ5X2FsbG9jX21hc2soc3RydWN0IGhzdGF0ZSAqaCwgZ2ZwX3QgZ2ZwX21hc2spXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGJvb2wgaHRsYl9hbGxvd19hbGxvY19mYWxsYmFjayhpbnQgcmVhc29uKVxcbitzdGF0aWMgaW5saW5lIGJvb2wgaHRsYl9hbGxvd19hbGxvY19mYWxsYmFjayhlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbilcXG4ge1xcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9taWdyYXRlLmggYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaFxcbmluZGV4IGQ1YWYyYjdmNTc3YjMzLi4xZjgzOTI0NjE1ZDZkMyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbWlncmF0ZS5oXFxuQEAgLTU3LDcgKzU3LDggQEAgdm9pZCBwdXRiYWNrX21vdmFibGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbCk7XFxuIGludCBtaWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmRzdCxcXG4gXFx0XFx0c3RydWN0IGZvbGlvICpzcmMsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUpO1xcbiBpbnQgbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsLCBuZXdfZm9saW9fdCBuZXcsIGZyZWVfZm9saW9fdCBmcmVlLFxcbi1cXHRcXHQgIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbixcXG4rXFx0XFx0ICB1bnNpZ25lZCBsb25nIHByaXZhdGUsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsXFxuK1xcdFxcdCAgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sXFxuIFxcdFxcdCAgdW5zaWduZWQgaW50ICpyZXRfc3VjY2VlZGVkKTtcXG4gc3RydWN0IGZvbGlvICphbGxvY19taWdyYXRpb25fdGFyZ2V0KHN0cnVjdCBmb2xpbyAqc3JjLCB1bnNpZ25lZCBsb25nIHByaXZhdGUpO1xcbiBib29sIGlzb2xhdGVfbW92YWJsZV9vcHNfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaXNvbGF0ZV9tb2RlX3QgbW9kZSk7XFxuQEAgLTc3LDcgKzc4LDggQEAgaW50IHNldF9tb3ZhYmxlX29wcyhjb25zdCBzdHJ1Y3QgbW92YWJsZV9vcGVyYXRpb25zICpvcHMsIGVudW0gcGFnZXR5cGUgdHlwZSk7XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRiYWNrX21vdmFibGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbCkge31cXG4gc3RhdGljIGlubGluZSBpbnQgbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsLCBuZXdfZm9saW9fdCBuZXcsXFxuIFxcdFxcdGZyZWVfZm9saW9fdCBmcmVlLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXFxuLVxcdFxcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sIHVuc2lnbmVkIGludCAqcmV0X3N1Y2NlZWRlZClcXG4rXFx0XFx0ZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sXFxuK1xcdFxcdHVuc2lnbmVkIGludCAqcmV0X3N1Y2NlZWRlZClcXG4gXFx0eyByZXR1cm4gLUVOT1NZUzsgfVxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqYWxsb2NfbWlncmF0aW9uX3RhcmdldChzdHJ1Y3QgZm9saW8gKnNyYyxcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyBwcml2YXRlKVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21pZ3JhdGVfbW9kZS5oIGIvaW5jbHVkZS9saW51eC9taWdyYXRlX21vZGUuaFxcbmluZGV4IDI2NWM0MzI4YjM2YWQ1Li4wNTEwMmQ0ZDI0OTBlNiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21pZ3JhdGVfbW9kZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9taWdyYXRlX21vZGUuaFxcbkBAIC0yNSw2ICsyNSw3IEBAIGVudW0gbWlncmF0ZV9yZWFzb24ge1xcbiBcXHRNUl9MT05HVEVSTV9QSU4sXFxuIFxcdE1SX0RFTU9USU9OLFxcbiBcXHRNUl9EQU1PTixcXG4rXFx0TVJfTkVWRVIsXFx0XFx0LyogcGFnZSBoYXMgbmV2ZXIgYmVlbiBtaWdyYXRlZCAqL1xcbiBcXHRNUl9UWVBFU1xcbiB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaFxcbmluZGV4IDMzMjgzNTdmNmRiYTcyLi45ZmU1MWRmY2NmMjY4NSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZV9vd25lci5oXFxuQEAgLTMsNiArMyw3IEBAXFxuICNkZWZpbmUgX19MSU5VWF9QQUdFX09XTkVSX0hcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9qdW1wX2xhYmVsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9taWdyYXRlX21vZGUuaFxcdTAwM2VcXG4gXFxuICNpZmRlZiBDT05GSUdfUEFHRV9PV05FUlxcbiBleHRlcm4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcGFnZV9vd25lcl9pbml0ZWQ7XFxuQEAgLTE0LDcgKzE1LDcgQEAgZXh0ZXJuIHZvaWQgX19zZXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4gZXh0ZXJuIHZvaWQgX19zcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLFxcbiBcXHRcXHRcXHRpbnQgbmV3X29yZGVyKTtcXG4gZXh0ZXJuIHZvaWQgX19mb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKTtcXG4tZXh0ZXJuIHZvaWQgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJlYXNvbik7XFxuK2V4dGVybiB2b2lkIF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKTtcXG4gZXh0ZXJuIHZvaWQgX19kdW1wX3BhZ2Vfb3duZXIoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbiBleHRlcm4gdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLFxcbiBcXHRcXHRcXHRcXHRcXHRwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgem9uZSAqem9uZSk7XFxuQEAgLTQzLDcgKzQ0LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpXFxuIFxcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZwYWdlX293bmVyX2luaXRlZCkpXFxuIFxcdFxcdF9fZm9saW9fY29weV9vd25lcihuZXdmb2xpbywgb2xkKTtcXG4gfVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCByZWFzb24pXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pXFxuIHtcXG4gXFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNnBhZ2Vfb3duZXJfaW5pdGVkKSlcXG4gXFx0XFx0X19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oZm9saW8sIHJlYXNvbik7XFxuQEAgLTY4LDcgKzY5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNwbGl0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvbGRfb3JkZXIsXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gfVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCByZWFzb24pXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pXFxuIHtcXG4gfVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgZHVtcF9wYWdlX293bmVyKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmhcXG5pbmRleCBjZDAxZGQ3YjM2NDBkYy4uMTVlZTJlZjIwMWI1ZjkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oXFxuKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oXFxuQEAgLTIzLDcgKzIzLDggQEBcXG4gXFx0RU0oIE1SX0NPTlRJR19SQU5HRSxcXHRcXFwiY29udGlnX3JhbmdlXFxcIilcXHRcXHRcXHRcXFxcXFxuIFxcdEVNKCBNUl9MT05HVEVSTV9QSU4sXFx0XFxcImxvbmd0ZXJtX3BpblxcXCIpXFx0XFx0XFx0XFxcXFxcbiBcXHRFTSggTVJfREVNT1RJT04sXFx0XFxcImRlbW90aW9uXFxcIilcXHRcXHRcXHRcXFxcXFxuLVxcdEVNZShNUl9EQU1PTixcXHRcXHRcXFwiZGFtb25cXFwiKVxcbitcXHRFTSggTVJfREFNT04sXFx0XFx0XFxcImRhbW9uXFxcIilcXHRcXHRcXHRcXFxcXFxuK1xcdEVNZShNUl9ORVZFUixcXHRcXHRcXFwibmV2ZXJfbWlncmF0ZWRcXFwiKVxcbiBcXG4gLypcXG4gICogRmlyc3QgZGVmaW5lIHRoZSBlbnVtcyBpbiB0aGUgYWJvdmUgbWFjcm9zIHRvIGJlIGV4cG9ydGVkIHRvIHVzZXJzcGFjZVxcbkBAIC01MSw3ICs1Miw3IEBAIFRSQUNFX0VWRU5UKG1tX21pZ3JhdGVfcGFnZXMsXFxuIFxcdFRQX1BST1RPKHVuc2lnbmVkIGxvbmcgc3VjY2VlZGVkLCB1bnNpZ25lZCBsb25nIGZhaWxlZCxcXG4gXFx0XFx0IHVuc2lnbmVkIGxvbmcgdGhwX3N1Y2NlZWRlZCwgdW5zaWduZWQgbG9uZyB0aHBfZmFpbGVkLFxcbiBcXHRcXHQgdW5zaWduZWQgbG9uZyB0aHBfc3BsaXQsIHVuc2lnbmVkIGxvbmcgbGFyZ2VfZm9saW9fc3BsaXQsXFxuLVxcdFxcdCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uKSxcXG4rXFx0XFx0IGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKSxcXG4gXFxuIFxcdFRQX0FSR1Moc3VjY2VlZGVkLCBmYWlsZWQsIHRocF9zdWNjZWVkZWQsIHRocF9mYWlsZWQsXFxuIFxcdFxcdHRocF9zcGxpdCwgbGFyZ2VfZm9saW9fc3BsaXQsIG1vZGUsIHJlYXNvbiksXFxuQEAgLTY0LDcgKzY1LDcgQEAgVFJBQ0VfRVZFTlQobW1fbWlncmF0ZV9wYWdlcyxcXG4gXFx0XFx0X19maWVsZChcXHR1bnNpZ25lZCBsb25nLFxcdFxcdHRocF9zcGxpdClcXG4gXFx0XFx0X19maWVsZChcXHR1bnNpZ25lZCBsb25nLFxcdFxcdGxhcmdlX2ZvbGlvX3NwbGl0KVxcbiBcXHRcXHRfX2ZpZWxkKFxcdGVudW0gbWlncmF0ZV9tb2RlLFxcdG1vZGUpXFxuLVxcdFxcdF9fZmllbGQoXFx0aW50LFxcdFxcdFxcdHJlYXNvbilcXG4rXFx0XFx0X19maWVsZChcXHRlbnVtIG1pZ3JhdGVfcmVhc29uLFxcdHJlYXNvbilcXG4gXFx0KSxcXG4gXFxuIFxcdFRQX2Zhc3RfYXNzaWduKFxcbkBAIC05MSwxMyArOTIsMTMgQEAgVFJBQ0VfRVZFTlQobW1fbWlncmF0ZV9wYWdlcyxcXG4gXFxuIFRSQUNFX0VWRU5UKG1tX21pZ3JhdGVfcGFnZXNfc3RhcnQsXFxuIFxcbi1cXHRUUF9QUk9UTyhlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uKSxcXG4rXFx0VFBfUFJPVE8oZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pLFxcbiBcXG4gXFx0VFBfQVJHUyhtb2RlLCByZWFzb24pLFxcbiBcXG4gXFx0VFBfU1RSVUNUX19lbnRyeShcXG4gXFx0XFx0X19maWVsZChlbnVtIG1pZ3JhdGVfbW9kZSwgbW9kZSlcXG4tXFx0XFx0X19maWVsZChpbnQsIHJlYXNvbilcXG4rXFx0XFx0X19maWVsZChlbnVtIG1pZ3JhdGVfcmVhc29uLCByZWFzb24pXFxuIFxcdCksXFxuIFxcbiBcXHRUUF9mYXN0X2Fzc2lnbihcXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jXFxuaW5kZXggNTcxMjEyYjgwODM1ZWMuLjE3NzMyZDFmZGM1ZWZkIDEwMDY0NFxcbi0tLSBhL21tL2h1Z2V0bGIuY1xcbisrKyBiL21tL2h1Z2V0bGIuY1xcbkBAIC03MTgyLDcgKzcxODIsOCBAQCB2b2lkIGZvbGlvX3B1dGJhY2tfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRmb2xpb19wdXQoZm9saW8pO1xcbiB9XFxuIFxcbi12b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGludCByZWFzb24pXFxuK3ZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbyxcXG4rXFx0XFx0XFx0ZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pXFxuIHtcXG4gXFx0c3RydWN0IGhzdGF0ZSAqaCA9IGZvbGlvX2hzdGF0ZShvbGRfZm9saW8pO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jXFxuaW5kZXggZDliMjM5MDlkNzE2YzYuLjQ5ZTEwZmVlYjA5NGYwIDEwMDY0NFxcbi0tLSBhL21tL21pZ3JhdGUuY1xcbisrKyBiL21tL21pZ3JhdGUuY1xcbkBAIC0xNDY5LDcgKzE0NjksNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfZm9saW9fbW92ZShmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxcbiBzdGF0aWMgaW50IHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZShuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxcbiBcXHRcXHRmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxcbiBcXHRcXHRzdHJ1Y3QgZm9saW8gKnNyYywgaW50IGZvcmNlLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLFxcbi1cXHRcXHRpbnQgcmVhc29uLCBzdHJ1Y3QgbGlzdF9oZWFkICpyZXQpXFxuK1xcdFxcdGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLCBzdHJ1Y3QgbGlzdF9oZWFkICpyZXQpXFxuIHtcXG4gXFx0c3RydWN0IGZvbGlvICpkc3Q7XFxuIFxcdGludCByYyA9IC1FQUdBSU47XFxuQEAgLTE2MjYsNyArMTYyNiw3IEBAIHN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzIHtcXG4gICovXFxuIHN0YXRpYyBpbnQgbWlncmF0ZV9odWdldGxicyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxcbiBcXHRcXHRcXHQgICAgZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcXG4tXFx0XFx0XFx0ICAgIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sXFxuK1xcdFxcdFxcdCAgICBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbixcXG4gXFx0XFx0XFx0ICAgIHN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzICpzdGF0cyxcXG4gXFx0XFx0XFx0ICAgIHN0cnVjdCBsaXN0X2hlYWQgKnJldF9mb2xpb3MpXFxuIHtcXG5AQCAtMTcxNiw3ICsxNzE2LDcgQEAgc3RhdGljIGludCBtaWdyYXRlX2h1Z2V0bGJzKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXFxuIHN0YXRpYyB2b2lkIG1pZ3JhdGVfZm9saW9zX21vdmUoc3RydWN0IGxpc3RfaGVhZCAqc3JjX2ZvbGlvcyxcXG4gXFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqZHN0X2ZvbGlvcyxcXG4gXFx0XFx0ZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcXG4tXFx0XFx0ZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbixcXG4rXFx0XFx0ZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sXFxuIFxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKnJldF9mb2xpb3MsXFxuIFxcdFxcdHN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzICpzdGF0cyxcXG4gXFx0XFx0aW50ICpyZXRyeSwgaW50ICp0aHBfcmV0cnksIGludCAqbnJfZmFpbGVkLFxcbkBAIC0xNzk5LDcgKzE3OTksNyBAQCBzdGF0aWMgdm9pZCBtaWdyYXRlX2ZvbGlvc191bmRvKHN0cnVjdCBsaXN0X2hlYWQgKnNyY19mb2xpb3MsXFxuICAqL1xcbiBzdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqZnJvbSxcXG4gXFx0XFx0bmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbywgZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sXFxuLVxcdFxcdHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbixcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBwcml2YXRlLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbixcXG4gXFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqcmV0X2ZvbGlvcywgc3RydWN0IGxpc3RfaGVhZCAqc3BsaXRfZm9saW9zLFxcbiBcXHRcXHRzdHJ1Y3QgbWlncmF0ZV9wYWdlc19zdGF0cyAqc3RhdHMsIGludCBucl9wYXNzKVxcbiB7XFxuQEAgLTIwMTEsNyArMjAxMSw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlc19iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLFxcbiBcXG4gc3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX3N5bmMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcXG4gXFx0XFx0ZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcXG4tXFx0XFx0ZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbixcXG4rXFx0XFx0ZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sXFxuIFxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKnJldF9mb2xpb3MsIHN0cnVjdCBsaXN0X2hlYWQgKnNwbGl0X2ZvbGlvcyxcXG4gXFx0XFx0c3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzKVxcbiB7XFxuQEAgLTIwODgsNyArMjA4OCw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlc19zeW5jKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXFxuICAqL1xcbiBpbnQgbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxcbiBcXHRcXHRmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxcbi1cXHRcXHRlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLCB1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpXFxuK1xcdFxcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLCB1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpXFxuIHtcXG4gXFx0aW50IHJjLCByY19nYXRoZXI7XFxuIFxcdGludCBucl9wYWdlcztcXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9vd25lci5jIGIvbW0vcGFnZV9vd25lci5jXFxuaW5kZXggMmRkZGNiNjUxMGFhMWUuLjQ2YTkzM2Y5YzIyOWJkIDEwMDY0NFxcbi0tLSBhL21tL3BhZ2Vfb3duZXIuY1xcbisrKyBiL21tL3BhZ2Vfb3duZXIuY1xcbkBAIC0zMzksMTMgKzMzOSwxMyBAQCBub2lubGluZSB2b2lkIF9fc2V0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIHNob3J0IG9yZGVyLFxcbiBcXHRkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGU7XFxuIFxcbiBcXHRoYW5kbGUgPSBzYXZlX3N0YWNrKGdmcF9tYXNrKTtcXG4tXFx0X191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUocGFnZSwgaGFuZGxlLCBvcmRlciwgZ2ZwX21hc2ssIC0xLFxcbitcXHRfX3VwZGF0ZV9wYWdlX293bmVyX2hhbmRsZShwYWdlLCBoYW5kbGUsIG9yZGVyLCBnZnBfbWFzaywgTVJfTkVWRVIsXFxuIFxcdFxcdFxcdFxcdCAgIHRzX25zZWMsIGN1cnJlbnQtXFx1MDAzZXBpZCwgY3VycmVudC1cXHUwMDNldGdpZCxcXG4gXFx0XFx0XFx0XFx0ICAgY3VycmVudC1cXHUwMDNlY29tbSk7XFxuIFxcdGluY19zdGFja19yZWNvcmRfY291bnQoaGFuZGxlLCBnZnBfbWFzaywgMSBcXHUwMDNjXFx1MDAzYyBvcmRlcik7XFxuIH1cXG4gXFxuLXZvaWQgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJlYXNvbilcXG4rdm9pZCBfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbilcXG4ge1xcbiBcXHRzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0ID0gcGFnZV9leHRfZ2V0KFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSk7XFxuIFxcdHN0cnVjdCBwYWdlX293bmVyICpwYWdlX293bmVyO1xcbkBAIC00MjIsNiArNDIyLDI5IEBAIHZvaWQgX19mb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKVxcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gfVxcbiBcXG4rLypcXG4rICogQ2hlY2sgaWYgYSBwYWdlIGlzIGEgYnVkZHkgcGFnZSBhbmQgYWR2YW5jZSBAcGZuIHBhc3QgdGhlIGVudGlyZSBidWRkeSBibG9jay5cXG4rICogVGhpcyBzYWZlbHkgcmVhZHMgdGhlIGJ1ZGR5IG9yZGVyIHdpdGhvdXQgdGhlIHpvbmUgbG9jaywgd2hpY2ggbWF5IGNhdXNlIHVzXFxuKyAqIHRvIHNraXAgbGVzcyB0aGFuIHRoZSBmdWxsIGJ1ZGR5IGJsb2NrLCBidXQgdGhhdCBpcyBhY2NlcHRhYmxlIGZvciBwYWdlIG93bmVyXFxuKyAqIGl0ZXJhdGlvbiBwdXJwb3Nlcy5cXG4rICpcXG4rICogUmV0dXJuOiB0cnVlIGlmIHRoZSBwYWdlIHdhcyBza2lwcGVkIChjYWxsZXIgc2hvdWxkIGNvbnRpbnVlIGl0cyBsb29wKSxcXG4rICogICAgICAgICBmYWxzZSBpZiB0aGUgcGFnZSBpcyBub3QgYSBidWRkeSBwYWdlIGFuZCBzaG91bGQgYmUgcHJvY2Vzc2VkIG5vcm1hbGx5LlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBib29sIHNraXBfYnVkZHlfcGFnZXModW5zaWduZWQgbG9uZyAqcGZuLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIG9yZGVyO1xcbitcXG4rXFx0aWYgKCFQYWdlQnVkZHkocGFnZSkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdG9yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xcbitcXHRpZiAob3JkZXIgXFx1MDAzYz0gTUFYX1BBR0VfT1JERVIpXFxuK1xcdFxcdCpwZm4gKz0gKDFVTCBcXHUwMDNjXFx1MDAzYyBvcmRlcikgLSAxO1xcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCB6b25lICp6b25lKVxcbiB7XFxuQEAgLTQ2MSwxNCArNDg0LDggQEAgdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLFxcbiBcXHRcXHRcXHRpZiAocGFnZV96b25lKHBhZ2UpICE9IHpvbmUpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0XFx0aWYgKFBhZ2VCdWRkeShwYWdlKSkge1xcbi1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGZyZWVwYWdlX29yZGVyO1xcbi1cXG4tXFx0XFx0XFx0XFx0ZnJlZXBhZ2Vfb3JkZXIgPSBidWRkeV9vcmRlcl91bnNhZmUocGFnZSk7XFxuLVxcdFxcdFxcdFxcdGlmIChmcmVlcGFnZV9vcmRlciBcXHUwMDNjPSBNQVhfUEFHRV9PUkRFUilcXG4tXFx0XFx0XFx0XFx0XFx0cGZuICs9ICgxVUwgXFx1MDAzY1xcdTAwM2MgZnJlZXBhZ2Vfb3JkZXIpIC0gMTtcXG4rXFx0XFx0XFx0aWYgKHNraXBfYnVkZHlfcGFnZXMoXFx1MDAyNnBmbiwgcGFnZSkpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRcXHR9XFxuIFxcbiBcXHRcXHRcXHRpZiAoUGFnZVJlc2VydmVkKHBhZ2UpKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG5AQCAtNTA1LDEzICs1MjIsMTMgQEAgdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLFxcbiBcXHRzZXFfcHV0YyhtLCAnXFxcXG4nKTtcXG4gfVxcbiBcXG4rI2lmZGVmIENPTkZJR19NRU1DR1xcbiAvKlxcbiAgKiBMb29raW5nIGZvciBtZW1jZyBpbmZvcm1hdGlvbiBhbmQgcHJpbnQgaXQgb3V0XFxuICAqL1xcbiBzdGF0aWMgaW5saW5lIGludCBwcmludF9wYWdlX293bmVyX21lbWNnKGNoYXIgKmtidWYsIHNpemVfdCBjb3VudCwgaW50IHJldCxcXG4gXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBwYWdlICpwYWdlKVxcbiB7XFxuLSNpZmRlZiBDT05GSUdfTUVNQ0dcXG4gXFx0dW5zaWduZWQgbG9uZyBtZW1jZ19kYXRhO1xcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuIFxcdGJvb2wgb25saW5lO1xcbkBAIC01MzksMTAgKzU1NiwxNiBAQCBzdGF0aWMgaW5saW5lIGludCBwcmludF9wYWdlX293bmVyX21lbWNnKGNoYXIgKmtidWYsIHNpemVfdCBjb3VudCwgaW50IHJldCxcXG4gXFx0XFx0XFx0bmFtZSk7XFxuIG91dF91bmxvY2s6XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0jZW5kaWYgLyogQ09ORklHX01FTUNHICovXFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuKyNlbHNlXFxuK3N0YXRpYyBpbmxpbmUgaW50IHByaW50X3BhZ2Vfb3duZXJfbWVtY2coY2hhciAqa2J1Ziwgc2l6ZV90IGNvdW50LCBpbnQgcmV0LFxcbitcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuK3tcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbisjZW5kaWZcXG4gXFxuIHN0YXRpYyBzc2l6ZV90XFxuIHByaW50X3BhZ2Vfb3duZXIoY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBsb25nIHBmbixcXG5AQCAtNTc5LDcgKzYwMiw3IEBAIHByaW50X3BhZ2Vfb3duZXIoY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBsb25nIHBmbixcXG4gXFx0aWYgKHJldCBcXHUwMDNlPSBjb3VudClcXG4gXFx0XFx0Z290byBlcnI7XFxuIFxcbi1cXHRpZiAocGFnZV9vd25lci1cXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSAtMSkge1xcbitcXHRpZiAocGFnZV9vd25lci1cXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSBNUl9ORVZFUikge1xcbiBcXHRcXHRyZXQgKz0gc2NucHJpbnRmKGtidWYgKyByZXQsIGNvdW50IC0gcmV0LFxcbiBcXHRcXHRcXHRcXFwiUGFnZSBoYXMgYmVlbiBtaWdyYXRlZCwgbGFzdCBtaWdyYXRlIHJlYXNvbjogJXNcXFxcblxcXCIsXFxuIFxcdFxcdFxcdG1pZ3JhdGVfcmVhc29uX25hbWVzW3BhZ2Vfb3duZXItXFx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb25dKTtcXG5AQCAtNjMwLDEwICs2NTMsMTAgQEAgdm9pZCBfX2R1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4gXFx0ZWxzZVxcbiBcXHRcXHRwcl9hbGVydChcXFwicGFnZV9vd25lciB0cmFja3MgdGhlIHBhZ2UgYXMgZnJlZWRcXFxcblxcXCIpO1xcbiBcXG4tXFx0cHJfYWxlcnQoXFxcInBhZ2UgbGFzdCBhbGxvY2F0ZWQgdmlhIG9yZGVyICV1LCBtaWdyYXRldHlwZSAlcywgZ2ZwX21hc2sgJSN4KCVwR2cpLCBwaWQgJWQsIHRnaWQgJWQgKCVzKSwgdHMgJWxsdSwgZnJlZV90cyAlbGx1XFxcXG5cXFwiLFxcbitcXHRwcl9hbGVydChcXFwicGFnZSBsYXN0IGFsbG9jYXRlZCB2aWEgb3JkZXIgJXUsIG1pZ3JhdGV0eXBlICVzLCBnZnBfbWFzayAlI3goJXBHZyksIHBpZCAlZCwgdGdpZCAlZCAoJXMpLCB0cyAlbGx1XFxcXG5cXFwiLFxcbiBcXHRcXHQgcGFnZV9vd25lci1cXHUwMDNlb3JkZXIsIG1pZ3JhdGV0eXBlX25hbWVzW210XSwgZ2ZwX21hc2ssIFxcdTAwMjZnZnBfbWFzayxcXG4gXFx0XFx0IHBhZ2Vfb3duZXItXFx1MDAzZXBpZCwgcGFnZV9vd25lci1cXHUwMDNldGdpZCwgcGFnZV9vd25lci1cXHUwMDNlY29tbSxcXG4tXFx0XFx0IHBhZ2Vfb3duZXItXFx1MDAzZXRzX25zZWMsIHBhZ2Vfb3duZXItXFx1MDAzZWZyZWVfdHNfbnNlYyk7XFxuK1xcdFxcdCBwYWdlX293bmVyLVxcdTAwM2V0c19uc2VjKTtcXG4gXFxuIFxcdGhhbmRsZSA9IFJFQURfT05DRShwYWdlX293bmVyLVxcdTAwM2VoYW5kbGUpO1xcbiBcXHRpZiAoIWhhbmRsZSlcXG5AQCAtNjQ1LDEyICs2NjgsMTMgQEAgdm9pZCBfX2R1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4gXFx0aWYgKCFoYW5kbGUpIHtcXG4gXFx0XFx0cHJfYWxlcnQoXFxcInBhZ2Vfb3duZXIgZnJlZSBzdGFjayB0cmFjZSBtaXNzaW5nXFxcXG5cXFwiKTtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0cHJfYWxlcnQoXFxcInBhZ2UgbGFzdCBmcmVlIHBpZCAlZCB0Z2lkICVkIHN0YWNrIHRyYWNlOlxcXFxuXFxcIixcXG4tXFx0XFx0XFx0ICBwYWdlX293bmVyLVxcdTAwM2VmcmVlX3BpZCwgcGFnZV9vd25lci1cXHUwMDNlZnJlZV90Z2lkKTtcXG4rXFx0XFx0cHJfYWxlcnQoXFxcInBhZ2UgbGFzdCBmcmVlIHBpZCAlZCB0Z2lkICVkIHRzICVsbHUgc3RhY2sgdHJhY2U6XFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgIHBhZ2Vfb3duZXItXFx1MDAzZWZyZWVfcGlkLCBwYWdlX293bmVyLVxcdTAwM2VmcmVlX3RnaWQsXFxuK1xcdFxcdFxcdCAgcGFnZV9vd25lci1cXHUwMDNlZnJlZV90c19uc2VjKTtcXG4gXFx0XFx0c3RhY2tfZGVwb3RfcHJpbnQoaGFuZGxlKTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHBhZ2Vfb3duZXItXFx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb24gIT0gLTEpXFxuK1xcdGlmIChwYWdlX293bmVyLVxcdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uICE9IE1SX05FVkVSKVxcbiBcXHRcXHRwcl9hbGVydChcXFwicGFnZSBoYXMgYmVlbiBtaWdyYXRlZCwgbGFzdCBtaWdyYXRlIHJlYXNvbjogJXNcXFxcblxcXCIsXFxuIFxcdFxcdFxcdG1pZ3JhdGVfcmVhc29uX25hbWVzW3BhZ2Vfb3duZXItXFx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb25dKTtcXG4gXFx0cGFnZV9leHRfcHV0KHBhZ2VfZXh0KTtcXG5AQCAtNjk3LDEzICs3MjEsOCBAQCByZWFkX3BhZ2Vfb3duZXIoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTtcXG4tXFx0XFx0aWYgKFBhZ2VCdWRkeShwYWdlKSkge1xcbi1cXHRcXHRcXHR1bnNpZ25lZCBsb25nIGZyZWVwYWdlX29yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xcbi1cXG4tXFx0XFx0XFx0aWYgKGZyZWVwYWdlX29yZGVyIFxcdTAwM2M9IE1BWF9QQUdFX09SREVSKVxcbi1cXHRcXHRcXHRcXHRwZm4gKz0gKDFVTCBcXHUwMDNjXFx1MDAzYyBmcmVlcGFnZV9vcmRlcikgLSAxO1xcbitcXHRcXHRpZiAoc2tpcF9idWRkeV9wYWdlcyhcXHUwMDI2cGZuLCBwYWdlKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdH1cXG4gXFxuIFxcdFxcdHBhZ2VfZXh0ID0gcGFnZV9leHRfZ2V0KHBhZ2UpO1xcbiBcXHRcXHRpZiAodW5saWtlbHkoIXBhZ2VfZXh0KSlcXG5AQCAtNzk4LDIwICs4MTcsOCBAQCBzdGF0aWMgdm9pZCBpbml0X3BhZ2VzX2luX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUpXFxuIFxcdFxcdFxcdGlmIChwYWdlX3pvbmUocGFnZSkgIT0gem9uZSlcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBUbyBhdm9pZCBoYXZpbmcgdG8gZ3JhYiB6b25lLVxcdTAwM2Vsb2NrLCBiZSBhIGxpdHRsZVxcbi1cXHRcXHRcXHQgKiBjYXJlZnVsIHdoZW4gcmVhZGluZyBidWRkeSBwYWdlIG9yZGVyLiBUaGUgb25seVxcbi1cXHRcXHRcXHQgKiBkYW5nZXIgaXMgdGhhdCB3ZSBza2lwIHRvbyBtdWNoIGFuZCBwb3RlbnRpYWxseSBtaXNzXFxuLVxcdFxcdFxcdCAqIHNvbWUgZWFybHkgYWxsb2NhdGVkIHBhZ2VzLCB3aGljaCBpcyBiZXR0ZXIgdGhhblxcbi1cXHRcXHRcXHQgKiBoZWF2eSBsb2NrIGNvbnRlbnRpb24uXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7XFxuLVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgb3JkZXIgPSBidWRkeV9vcmRlcl91bnNhZmUocGFnZSk7XFxuLVxcbi1cXHRcXHRcXHRcXHRpZiAob3JkZXIgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IG9yZGVyIFxcdTAwM2M9IE1BWF9QQUdFX09SREVSKVxcbi1cXHRcXHRcXHRcXHRcXHRwZm4gKz0gKDFVTCBcXHUwMDNjXFx1MDAzYyBvcmRlcikgLSAxO1xcbitcXHRcXHRcXHRpZiAoc2tpcF9idWRkeV9wYWdlcyhcXHUwMDI2cGZuLCBwYWdlKSlcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdFxcdH1cXG4gXFxuIFxcdFxcdFxcdGlmIChQYWdlUmVzZXJ2ZWQocGFnZSkpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbkBAIC04MjYsNyArODMzLDcgQEAgc3RhdGljIHZvaWQgaW5pdF9wYWdlc19pbl96b25lKHN0cnVjdCB6b25lICp6b25lKVxcbiBcXG4gXFx0XFx0XFx0LyogRm91bmQgZWFybHkgYWxsb2NhdGVkIHBhZ2UgKi9cXG4gXFx0XFx0XFx0X191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUocGFnZSwgZWFybHlfaGFuZGxlLCAwLCAwLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAtMSwgbG9jYWxfY2xvY2soKSwgY3VycmVudC1cXHUwMDNlcGlkLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBNUl9ORVZFUiwgbG9jYWxfY2xvY2soKSwgY3VycmVudC1cXHUwMDNlcGlkLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICBjdXJyZW50LVxcdTAwM2V0Z2lkLCBjdXJyZW50LVxcdTAwM2Vjb21tKTtcXG4gXFx0XFx0XFx0Y291bnQrKztcXG4gZXh0X3B1dF9jb250aW51ZTpcXG5AQCAtODg3LDcgKzg5NCw3IEBAIHN0YXRpYyB2b2lkICpzdGFja19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdiwgbG9mZl90ICpwcG9zKVxcbiBcXHRyZXR1cm4gc3RhY2s7XFxuIH1cXG4gXFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkO1xcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlc190aHJlc2hvbGQ7XFxuIFxcbiBzdGF0aWMgaW50IHN0YWNrX3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4ge1xcbkBAIC05MDQsNyArOTExLDcgQEAgc3RhdGljIGludCBzdGFja19wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuIFxcdG5yX2Jhc2VfcGFnZXMgPSByZWZjb3VudF9yZWFkKFxcdTAwMjZzdGFja19yZWNvcmQtXFx1MDAzZWNvdW50KSAtIDE7XFxuIFxcbiBcXHRpZiAoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IFNUQUNLX1BSSU5UX0ZMQUdfUEFHRVMgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIChucl9iYXNlX3BhZ2VzIFxcdTAwM2MgMSB8fCBucl9iYXNlX3BhZ2VzIFxcdTAwM2MgcGFnZV9vd25lcl9wYWdlc190aHJlc2hvbGQpKVxcbitcXHQgICAgKG5yX2Jhc2VfcGFnZXMgXFx1MDAzYyAxIHx8IG5yX2Jhc2VfcGFnZXMgXFx1MDAzYyBwYWdlc190aHJlc2hvbGQpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdGlmIChjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgU1RBQ0tfUFJJTlRfRkxBR19TVEFDSykge1xcbkBAIC05MjYsMTYgKzkzMywxNiBAQCBzdGF0aWMgdm9pZCBzdGFja19zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4ge1xcbiB9XFxuIFxcbi1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHBhZ2Vfb3duZXJfc3RhY2tfb3AgPSB7XFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc3RhY2tfb3AgPSB7XFxuIFxcdC5zdGFydFxcdD0gc3RhY2tfc3RhcnQsXFxuIFxcdC5uZXh0XFx0PSBzdGFja19uZXh0LFxcbiBcXHQuc3RvcFxcdD0gc3RhY2tfc3RvcCxcXG4gXFx0LnNob3dcXHQ9IHN0YWNrX3ByaW50XFxuIH07XFxuIFxcbi1zdGF0aWMgaW50IHBhZ2Vfb3duZXJfc3RhY2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4rc3RhdGljIGludCBzdGFja19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbiB7XFxuLVxcdGludCByZXQgPSBzZXFfb3Blbl9wcml2YXRlKGZpbGUsIFxcdTAwMjZwYWdlX293bmVyX3N0YWNrX29wLFxcbitcXHRpbnQgcmV0ID0gc2VxX29wZW5fcHJpdmF0ZShmaWxlLCBcXHUwMDI2c3RhY2tfb3AsXFxuIFxcdFxcdFxcdFxcdCAgIHNpemVvZihzdHJ1Y3Qgc3RhY2tfcHJpbnRfY3R4KSk7XFxuIFxcbiBcXHRpZiAoIXJldCkge1xcbkBAIC05NDgsMjggKzk1NSwyNiBAQCBzdGF0aWMgaW50IHBhZ2Vfb3duZXJfc3RhY2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGFnZV9vd25lcl9zdGFja19mb3BzID0ge1xcbi1cXHQub3BlblxcdFxcdD0gcGFnZV9vd25lcl9zdGFja19vcGVuLFxcbitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzdGFja19mb3BzID0ge1xcbitcXHQub3BlblxcdFxcdD0gc3RhY2tfb3BlbixcXG4gXFx0LnJlYWRcXHRcXHQ9IHNlcV9yZWFkLFxcbiBcXHQubGxzZWVrXFx0XFx0PSBzZXFfbHNlZWssXFxuIFxcdC5yZWxlYXNlXFx0PSBzZXFfcmVsZWFzZV9wcml2YXRlLFxcbiB9O1xcbiBcXG4tc3RhdGljIGludCBwYWdlX293bmVyX3RocmVzaG9sZF9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpXFxuK3N0YXRpYyBpbnQgdGhyZXNob2xkX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbClcXG4ge1xcbi1cXHQqdmFsID0gUkVBRF9PTkNFKHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkKTtcXG4rXFx0KnZhbCA9IFJFQURfT05DRShwYWdlc190aHJlc2hvbGQpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBwYWdlX293bmVyX3RocmVzaG9sZF9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbClcXG4rc3RhdGljIGludCB0aHJlc2hvbGRfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpXFxuIHtcXG4tXFx0V1JJVEVfT05DRShwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZCwgdmFsKTtcXG4rXFx0V1JJVEVfT05DRShwYWdlc190aHJlc2hvbGQsIHZhbCk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1ERUZJTkVfU0lNUExFX0FUVFJJQlVURShwYWdlX293bmVyX3RocmVzaG9sZF9mb3BzLCBcXHUwMDI2cGFnZV9vd25lcl90aHJlc2hvbGRfZ2V0LFxcbi1cXHRcXHRcXHRcXHUwMDI2cGFnZV9vd25lcl90aHJlc2hvbGRfc2V0LCBcXFwiJWxsdVxcXCIpO1xcbi1cXG4rREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUodGhyZXNob2xkX2ZvcHMsIFxcdTAwMjZ0aHJlc2hvbGRfZ2V0LCBcXHUwMDI2dGhyZXNob2xkX3NldCwgXFxcIiVsbHVcXFxcblxcXCIpO1xcbiBcXG4gc3RhdGljIGludCBfX2luaXQgcGFnZW93bmVyX2luaXQodm9pZClcXG4ge1xcbkBAIC05ODUsMTcgKzk5MCwxNyBAQCBzdGF0aWMgaW50IF9faW5pdCBwYWdlb3duZXJfaW5pdCh2b2lkKVxcbiBcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJzaG93X3N0YWNrc1xcXCIsIDA0MDAsIGRpcixcXG4gXFx0XFx0XFx0ICAgICh2b2lkICopKFNUQUNLX1BSSU5UX0ZMQUdfU1RBQ0sgfFxcbiBcXHRcXHRcXHRcXHQgICAgIFNUQUNLX1BSSU5UX0ZMQUdfUEFHRVMpLFxcbi1cXHRcXHRcXHQgICAgIFxcdTAwMjZwYWdlX293bmVyX3N0YWNrX2ZvcHMpO1xcbitcXHRcXHRcXHQgICAgIFxcdTAwMjZzdGFja19mb3BzKTtcXG4gXFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwic2hvd19oYW5kbGVzXFxcIiwgMDQwMCwgZGlyLFxcbiBcXHRcXHRcXHQgICAgKHZvaWQgKikoU1RBQ0tfUFJJTlRfRkxBR19IQU5ETEUgfFxcbiBcXHRcXHRcXHRcXHQgICAgIFNUQUNLX1BSSU5UX0ZMQUdfUEFHRVMpLFxcbi1cXHRcXHRcXHQgICAgXFx1MDAyNnBhZ2Vfb3duZXJfc3RhY2tfZm9wcyk7XFxuK1xcdFxcdFxcdCAgICBcXHUwMDI2c3RhY2tfZm9wcyk7XFxuIFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcInNob3dfc3RhY2tzX2hhbmRsZXNcXFwiLCAwNDAwLCBkaXIsXFxuIFxcdFxcdFxcdCAgICAodm9pZCAqKShTVEFDS19QUklOVF9GTEFHX1NUQUNLIHxcXG4gXFx0XFx0XFx0XFx0ICAgICBTVEFDS19QUklOVF9GTEFHX0hBTkRMRSksXFxuLVxcdFxcdFxcdCAgICBcXHUwMDI2cGFnZV9vd25lcl9zdGFja19mb3BzKTtcXG4rXFx0XFx0XFx0ICAgIFxcdTAwMjZzdGFja19mb3BzKTtcXG4gXFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwiY291bnRfdGhyZXNob2xkXFxcIiwgMDYwMCwgZGlyLCBOVUxMLFxcbi1cXHRcXHRcXHQgICAgXFx1MDAyNnBhZ2Vfb3duZXJfdGhyZXNob2xkX2ZvcHMpO1xcbitcXHRcXHRcXHQgICAgXFx1MDAyNnRocmVzaG9sZF9mb3BzKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gbGF0ZV9pbml0Y2FsbChwYWdlb3duZXJfaW5pdClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDI6MDc6NDcuMDUzOTMwODU0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDI1OTIwNTMxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29uc2lzdHMgZW50aXJlbHkgb2YgcmVmYWN0b3JpbmcgKGNoYW5naW5nIGludCB0byBlbnVtIG1pZ3JhdGVfcmVhc29uKSwgaW50cm9kdWNpbmcgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIHNraXBwaW5nIGJ1ZGR5IHBhZ2VzICh3aXRoIG5vIGZ1bmN0aW9uYWwgY2hhbmdlKSwgcmVuYW1pbmcgdmFyaWFibGVzL2Z1bmN0aW9ucywgYW5kIG1vZGlmeWluZyBwcmludGsvdHJhY2Vwb2ludCBvdXRwdXRzLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBsb2dpYyBjaGFuZ2VzIHRoYXQgd2FycmFudCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyM2MyODhhMjMxNTMyMWZhZjQ1NDUwMTlmZTEwN2ZhY2RjM2U1MzJjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdW4gMzAgMDI6MDc6NDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG5pbmRleCAyYWJhZjk5MzIxZTkwZC4uZmE4MjgyMzJkZmNjMTggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuKysrIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbkBAIC0xNTQsNyArMTU0LDggQEAgbG9uZyBodWdldGxiX3VucmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb25nIHN0YXJ0LCBsb25nIGVuZCxcbiBib29sIGZvbGlvX2lzb2xhdGVfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KTtcbiBpbnQgZ2V0X2h3cG9pc29uX2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCAqaHVnZXRsYiwgYm9vbCB1bnBvaXNvbik7XG4gdm9pZCBmb2xpb19wdXRiYWNrX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tdm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBpbnQgcmVhc29uKTtcbit2b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sXG4rXHRcdFx0ZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pO1xuIHZvaWQgaHVnZXRsYl9maXhfcmVzZXJ2ZV9jb3VudHMoc3RydWN0IGlub2RlICppbm9kZSk7XG4gZXh0ZXJuIHN0cnVjdCBtdXRleCAqaHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZTtcbiB1MzIgaHVnZXRsYl9mYXVsdF9tdXRleF9oYXNoKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IGlkeCk7XG5AQCAtNDI0LDcgKzQyNSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19wdXRiYWNrX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbylcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbyxcbi1cdFx0XHRcdFx0c3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGludCByZWFzb24pXG4rXHRcdFx0XHRcdHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbilcbiB7XG4gfVxuIFxuQEAgLTk1Niw3ICs5NTcsNyBAQCBzdGF0aWMgaW5saW5lIGdmcF90IGh0bGJfbW9kaWZ5X2FsbG9jX21hc2soc3RydWN0IGhzdGF0ZSAqaCwgZ2ZwX3QgZ2ZwX21hc2spXG4gXHRyZXR1cm4gbW9kaWZpZWRfbWFzaztcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIGh0bGJfYWxsb3dfYWxsb2NfZmFsbGJhY2soaW50IHJlYXNvbilcbitzdGF0aWMgaW5saW5lIGJvb2wgaHRsYl9hbGxvd19hbGxvY19mYWxsYmFjayhlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbilcbiB7XG4gXHRib29sIGFsbG93ZWRfZmFsbGJhY2sgPSBmYWxzZTtcbiBcbkBAIC0xMjM4LDcgKzEyMzksNyBAQCBzdGF0aWMgaW5saW5lIGdmcF90IGh0bGJfbW9kaWZ5X2FsbG9jX21hc2soc3RydWN0IGhzdGF0ZSAqaCwgZ2ZwX3QgZ2ZwX21hc2spXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIGh0bGJfYWxsb3dfYWxsb2NfZmFsbGJhY2soaW50IHJlYXNvbilcbitzdGF0aWMgaW5saW5lIGJvb2wgaHRsYl9hbGxvd19hbGxvY19mYWxsYmFjayhlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbilcbiB7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWlncmF0ZS5oIGIvaW5jbHVkZS9saW51eC9taWdyYXRlLmhcbmluZGV4IGQ1YWYyYjdmNTc3YjMzLi4xZjgzOTI0NjE1ZDZkMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWlncmF0ZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaFxuQEAgLTU3LDcgKzU3LDggQEAgdm9pZCBwdXRiYWNrX21vdmFibGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbCk7XG4gaW50IG1pZ3JhdGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZHN0LFxuIFx0XHRzdHJ1Y3QgZm9saW8gKnNyYywgZW51bSBtaWdyYXRlX21vZGUgbW9kZSk7XG4gaW50IG1pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbCwgbmV3X2ZvbGlvX3QgbmV3LCBmcmVlX2ZvbGlvX3QgZnJlZSxcbi1cdFx0ICB1bnNpZ25lZCBsb25nIHByaXZhdGUsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sXG4rXHRcdCAgdW5zaWduZWQgbG9uZyBwcml2YXRlLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLFxuK1x0XHQgIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLFxuIFx0XHQgIHVuc2lnbmVkIGludCAqcmV0X3N1Y2NlZWRlZCk7XG4gc3RydWN0IGZvbGlvICphbGxvY19taWdyYXRpb25fdGFyZ2V0KHN0cnVjdCBmb2xpbyAqc3JjLCB1bnNpZ25lZCBsb25nIHByaXZhdGUpO1xuIGJvb2wgaXNvbGF0ZV9tb3ZhYmxlX29wc19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpc29sYXRlX21vZGVfdCBtb2RlKTtcbkBAIC03Nyw3ICs3OCw4IEBAIGludCBzZXRfbW92YWJsZV9vcHMoY29uc3Qgc3RydWN0IG1vdmFibGVfb3BlcmF0aW9ucyAqb3BzLCBlbnVtIHBhZ2V0eXBlIHR5cGUpO1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRiYWNrX21vdmFibGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbCkge31cbiBzdGF0aWMgaW5saW5lIGludCBtaWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmwsIG5ld19mb2xpb190IG5ldyxcbiBcdFx0ZnJlZV9mb2xpb190IGZyZWUsIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcbi1cdFx0ZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiwgdW5zaWduZWQgaW50ICpyZXRfc3VjY2VlZGVkKVxuK1x0XHRlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbixcbitcdFx0dW5zaWduZWQgaW50ICpyZXRfc3VjY2VlZGVkKVxuIFx0eyByZXR1cm4gLUVOT1NZUzsgfVxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICphbGxvY19taWdyYXRpb25fdGFyZ2V0KHN0cnVjdCBmb2xpbyAqc3JjLFxuIFx0XHR1bnNpZ25lZCBsb25nIHByaXZhdGUpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9taWdyYXRlX21vZGUuaCBiL2luY2x1ZGUvbGludXgvbWlncmF0ZV9tb2RlLmhcbmluZGV4IDI2NWM0MzI4YjM2YWQ1Li4wNTEwMmQ0ZDI0OTBlNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWlncmF0ZV9tb2RlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWlncmF0ZV9tb2RlLmhcbkBAIC0yNSw2ICsyNSw3IEBAIGVudW0gbWlncmF0ZV9yZWFzb24ge1xuIFx0TVJfTE9OR1RFUk1fUElOLFxuIFx0TVJfREVNT1RJT04sXG4gXHRNUl9EQU1PTixcbitcdE1SX05FVkVSLFx0XHQvKiBwYWdlIGhhcyBuZXZlciBiZWVuIG1pZ3JhdGVkICovXG4gXHRNUl9UWVBFU1xuIH07XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaFxuaW5kZXggMzMyODM1N2Y2ZGJhNzIuLjlmZTUxZGZjY2YyNjg1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZV9vd25lci5oXG5AQCAtMyw2ICszLDcgQEBcbiAjZGVmaW5lIF9fTElOVVhfUEFHRV9PV05FUl9IXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvanVtcF9sYWJlbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWlncmF0ZV9tb2RlLmhcdTAwM2VcbiBcbiAjaWZkZWYgQ09ORklHX1BBR0VfT1dORVJcbiBleHRlcm4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcGFnZV9vd25lcl9pbml0ZWQ7XG5AQCAtMTQsNyArMTUsNyBAQCBleHRlcm4gdm9pZCBfX3NldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLFxuIGV4dGVybiB2b2lkIF9fc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlcixcbiBcdFx0XHRpbnQgbmV3X29yZGVyKTtcbiBleHRlcm4gdm9pZCBfX2ZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpO1xuLWV4dGVybiB2b2lkIF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCByZWFzb24pO1xuK2V4dGVybiB2b2lkIF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKTtcbiBleHRlcm4gdm9pZCBfX2R1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4gZXh0ZXJuIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSxcbiBcdFx0XHRcdFx0cGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHpvbmUgKnpvbmUpO1xuQEAgLTQzLDcgKzQ0LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpXG4gXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZwYWdlX293bmVyX2luaXRlZCkpXG4gXHRcdF9fZm9saW9fY29weV9vd25lcihuZXdmb2xpbywgb2xkKTtcbiB9XG4tc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcmVhc29uKVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pXG4ge1xuIFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2cGFnZV9vd25lcl9pbml0ZWQpKVxuIFx0XHRfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihmb2xpbywgcmVhc29uKTtcbkBAIC02OCw3ICs2OSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIH1cbi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCByZWFzb24pXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbilcbiB7XG4gfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wX3BhZ2Vfb3duZXIoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oXG5pbmRleCBjZDAxZGQ3YjM2NDBkYy4uMTVlZTJlZjIwMWI1ZjkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmhcbisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaFxuQEAgLTIzLDcgKzIzLDggQEBcbiBcdEVNKCBNUl9DT05USUdfUkFOR0UsXHRcImNvbnRpZ19yYW5nZVwiKVx0XHRcdFxcXG4gXHRFTSggTVJfTE9OR1RFUk1fUElOLFx0XCJsb25ndGVybV9waW5cIilcdFx0XHRcXFxuIFx0RU0oIE1SX0RFTU9USU9OLFx0XCJkZW1vdGlvblwiKVx0XHRcdFxcXG4tXHRFTWUoTVJfREFNT04sXHRcdFwiZGFtb25cIilcbitcdEVNKCBNUl9EQU1PTixcdFx0XCJkYW1vblwiKVx0XHRcdFxcXG4rXHRFTWUoTVJfTkVWRVIsXHRcdFwibmV2ZXJfbWlncmF0ZWRcIilcbiBcbiAvKlxuICAqIEZpcnN0IGRlZmluZSB0aGUgZW51bXMgaW4gdGhlIGFib3ZlIG1hY3JvcyB0byBiZSBleHBvcnRlZCB0byB1c2Vyc3BhY2VcbkBAIC01MSw3ICs1Miw3IEBAIFRSQUNFX0VWRU5UKG1tX21pZ3JhdGVfcGFnZXMsXG4gXHRUUF9QUk9UTyh1bnNpZ25lZCBsb25nIHN1Y2NlZWRlZCwgdW5zaWduZWQgbG9uZyBmYWlsZWQsXG4gXHRcdCB1bnNpZ25lZCBsb25nIHRocF9zdWNjZWVkZWQsIHVuc2lnbmVkIGxvbmcgdGhwX2ZhaWxlZCxcbiBcdFx0IHVuc2lnbmVkIGxvbmcgdGhwX3NwbGl0LCB1bnNpZ25lZCBsb25nIGxhcmdlX2ZvbGlvX3NwbGl0LFxuLVx0XHQgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiksXG4rXHRcdCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiksXG4gXG4gXHRUUF9BUkdTKHN1Y2NlZWRlZCwgZmFpbGVkLCB0aHBfc3VjY2VlZGVkLCB0aHBfZmFpbGVkLFxuIFx0XHR0aHBfc3BsaXQsIGxhcmdlX2ZvbGlvX3NwbGl0LCBtb2RlLCByZWFzb24pLFxuQEAgLTY0LDcgKzY1LDcgQEAgVFJBQ0VfRVZFTlQobW1fbWlncmF0ZV9wYWdlcyxcbiBcdFx0X19maWVsZChcdHVuc2lnbmVkIGxvbmcsXHRcdHRocF9zcGxpdClcbiBcdFx0X19maWVsZChcdHVuc2lnbmVkIGxvbmcsXHRcdGxhcmdlX2ZvbGlvX3NwbGl0KVxuIFx0XHRfX2ZpZWxkKFx0ZW51bSBtaWdyYXRlX21vZGUsXHRtb2RlKVxuLVx0XHRfX2ZpZWxkKFx0aW50LFx0XHRcdHJlYXNvbilcbitcdFx0X19maWVsZChcdGVudW0gbWlncmF0ZV9yZWFzb24sXHRyZWFzb24pXG4gXHQpLFxuIFxuIFx0VFBfZmFzdF9hc3NpZ24oXG5AQCAtOTEsMTMgKzkyLDEzIEBAIFRSQUNFX0VWRU5UKG1tX21pZ3JhdGVfcGFnZXMsXG4gXG4gVFJBQ0VfRVZFTlQobW1fbWlncmF0ZV9wYWdlc19zdGFydCxcbiBcbi1cdFRQX1BST1RPKGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24pLFxuK1x0VFBfUFJPVE8oZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pLFxuIFxuIFx0VFBfQVJHUyhtb2RlLCByZWFzb24pLFxuIFxuIFx0VFBfU1RSVUNUX19lbnRyeShcbiBcdFx0X19maWVsZChlbnVtIG1pZ3JhdGVfbW9kZSwgbW9kZSlcbi1cdFx0X19maWVsZChpbnQsIHJlYXNvbilcbitcdFx0X19maWVsZChlbnVtIG1pZ3JhdGVfcmVhc29uLCByZWFzb24pXG4gXHQpLFxuIFxuIFx0VFBfZmFzdF9hc3NpZ24oXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jXG5pbmRleCA1NzEyMTJiODA4MzVlYy4uMTc3MzJkMWZkYzVlZmQgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbisrKyBiL21tL2h1Z2V0bGIuY1xuQEAgLTcxODIsNyArNzE4Miw4IEBAIHZvaWQgZm9saW9fcHV0YmFja19odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRmb2xpb19wdXQoZm9saW8pO1xuIH1cbiBcbi12b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGludCByZWFzb24pXG4rdm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLFxuK1x0XHRcdGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBoc3RhdGUgKmggPSBmb2xpb19oc3RhdGUob2xkX2ZvbGlvKTtcbiBcbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmNcbmluZGV4IGQ5YjIzOTA5ZDcxNmM2Li40OWUxMGZlZWIwOTRmMCAxMDA2NDRcbi0tLSBhL21tL21pZ3JhdGUuY1xuKysrIGIvbW0vbWlncmF0ZS5jXG5AQCAtMTQ2OSw3ICsxNDY5LDcgQEAgc3RhdGljIGludCBtaWdyYXRlX2ZvbGlvX21vdmUoZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcbiBzdGF0aWMgaW50IHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZShuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxuIFx0XHRmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxuIFx0XHRzdHJ1Y3QgZm9saW8gKnNyYywgaW50IGZvcmNlLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLFxuLVx0XHRpbnQgcmVhc29uLCBzdHJ1Y3QgbGlzdF9oZWFkICpyZXQpXG4rXHRcdGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLCBzdHJ1Y3QgbGlzdF9oZWFkICpyZXQpXG4ge1xuIFx0c3RydWN0IGZvbGlvICpkc3Q7XG4gXHRpbnQgcmMgPSAtRUFHQUlOO1xuQEAgLTE2MjYsNyArMTYyNiw3IEBAIHN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzIHtcbiAgKi9cbiBzdGF0aWMgaW50IG1pZ3JhdGVfaHVnZXRsYnMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbiBcdFx0XHQgICAgZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcbi1cdFx0XHQgICAgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbixcbitcdFx0XHQgICAgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sXG4gXHRcdFx0ICAgIHN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzICpzdGF0cyxcbiBcdFx0XHQgICAgc3RydWN0IGxpc3RfaGVhZCAqcmV0X2ZvbGlvcylcbiB7XG5AQCAtMTcxNiw3ICsxNzE2LDcgQEAgc3RhdGljIGludCBtaWdyYXRlX2h1Z2V0bGJzKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXG4gc3RhdGljIHZvaWQgbWlncmF0ZV9mb2xpb3NfbW92ZShzdHJ1Y3QgbGlzdF9oZWFkICpzcmNfZm9saW9zLFxuIFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpkc3RfZm9saW9zLFxuIFx0XHRmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxuLVx0XHRlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLFxuK1x0XHRlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbixcbiBcdFx0c3RydWN0IGxpc3RfaGVhZCAqcmV0X2ZvbGlvcyxcbiBcdFx0c3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzLFxuIFx0XHRpbnQgKnJldHJ5LCBpbnQgKnRocF9yZXRyeSwgaW50ICpucl9mYWlsZWQsXG5AQCAtMTc5OSw3ICsxNzk5LDcgQEAgc3RhdGljIHZvaWQgbWlncmF0ZV9mb2xpb3NfdW5kbyhzdHJ1Y3QgbGlzdF9oZWFkICpzcmNfZm9saW9zLFxuICAqL1xuIHN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlc19iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLFxuIFx0XHRuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLCBmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbyxcbi1cdFx0dW5zaWduZWQgbG9uZyBwcml2YXRlLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLFxuK1x0XHR1bnNpZ25lZCBsb25nIHByaXZhdGUsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLFxuIFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpyZXRfZm9saW9zLCBzdHJ1Y3QgbGlzdF9oZWFkICpzcGxpdF9mb2xpb3MsXG4gXHRcdHN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzICpzdGF0cywgaW50IG5yX3Bhc3MpXG4ge1xuQEAgLTIwMTEsNyArMjAxMSw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlc19iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLFxuIFxuIHN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlc19zeW5jKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXG4gXHRcdGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXG4tXHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sXG4rXHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLFxuIFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpyZXRfZm9saW9zLCBzdHJ1Y3QgbGlzdF9oZWFkICpzcGxpdF9mb2xpb3MsXG4gXHRcdHN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzICpzdGF0cylcbiB7XG5AQCAtMjA4OCw3ICsyMDg4LDcgQEAgc3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX3N5bmMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbiAgKi9cbiBpbnQgbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxuIFx0XHRmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxuLVx0XHRlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLCB1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpXG4rXHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLCB1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpXG4ge1xuIFx0aW50IHJjLCByY19nYXRoZXI7XG4gXHRpbnQgbnJfcGFnZXM7XG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9vd25lci5jIGIvbW0vcGFnZV9vd25lci5jXG5pbmRleCAyZGRkY2I2NTEwYWExZS4uNDZhOTMzZjljMjI5YmQgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX293bmVyLmNcbisrKyBiL21tL3BhZ2Vfb3duZXIuY1xuQEAgLTMzOSwxMyArMzM5LDEzIEBAIG5vaW5saW5lIHZvaWQgX19zZXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgc2hvcnQgb3JkZXIsXG4gXHRkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGU7XG4gXG4gXHRoYW5kbGUgPSBzYXZlX3N0YWNrKGdmcF9tYXNrKTtcbi1cdF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGhhbmRsZSwgb3JkZXIsIGdmcF9tYXNrLCAtMSxcbitcdF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGhhbmRsZSwgb3JkZXIsIGdmcF9tYXNrLCBNUl9ORVZFUixcbiBcdFx0XHRcdCAgIHRzX25zZWMsIGN1cnJlbnQtXHUwMDNlcGlkLCBjdXJyZW50LVx1MDAzZXRnaWQsXG4gXHRcdFx0XHQgICBjdXJyZW50LVx1MDAzZWNvbW0pO1xuIFx0aW5jX3N0YWNrX3JlY29yZF9jb3VudChoYW5kbGUsIGdmcF9tYXNrLCAxIFx1MDAzY1x1MDAzYyBvcmRlcik7XG4gfVxuIFxuLXZvaWQgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJlYXNvbilcbit2b2lkIF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBwYWdlX2V4dCAqcGFnZV9leHQgPSBwYWdlX2V4dF9nZXQoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSk7XG4gXHRzdHJ1Y3QgcGFnZV9vd25lciAqcGFnZV9vd25lcjtcbkBAIC00MjIsNiArNDIyLDI5IEBAIHZvaWQgX19mb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKVxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuKy8qXG4rICogQ2hlY2sgaWYgYSBwYWdlIGlzIGEgYnVkZHkgcGFnZSBhbmQgYWR2YW5jZSBAcGZuIHBhc3QgdGhlIGVudGlyZSBidWRkeSBibG9jay5cbisgKiBUaGlzIHNhZmVseSByZWFkcyB0aGUgYnVkZHkgb3JkZXIgd2l0aG91dCB0aGUgem9uZSBsb2NrLCB3aGljaCBtYXkgY2F1c2UgdXNcbisgKiB0byBza2lwIGxlc3MgdGhhbiB0aGUgZnVsbCBidWRkeSBibG9jaywgYnV0IHRoYXQgaXMgYWNjZXB0YWJsZSBmb3IgcGFnZSBvd25lclxuKyAqIGl0ZXJhdGlvbiBwdXJwb3Nlcy5cbisgKlxuKyAqIFJldHVybjogdHJ1ZSBpZiB0aGUgcGFnZSB3YXMgc2tpcHBlZCAoY2FsbGVyIHNob3VsZCBjb250aW51ZSBpdHMgbG9vcCksXG4rICogICAgICAgICBmYWxzZSBpZiB0aGUgcGFnZSBpcyBub3QgYSBidWRkeSBwYWdlIGFuZCBzaG91bGQgYmUgcHJvY2Vzc2VkIG5vcm1hbGx5LlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBza2lwX2J1ZGR5X3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnBmbiwgc3RydWN0IHBhZ2UgKnBhZ2UpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBvcmRlcjtcbitcbitcdGlmICghUGFnZUJ1ZGR5KHBhZ2UpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRvcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcbitcdGlmIChvcmRlciBcdTAwM2M9IE1BWF9QQUdFX09SREVSKVxuK1x0XHQqcGZuICs9ICgxVUwgXHUwMDNjXHUwMDNjIG9yZGVyKSAtIDE7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4gdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLFxuIFx0XHRcdFx0ICAgICAgIHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCB6b25lICp6b25lKVxuIHtcbkBAIC00NjEsMTQgKzQ4NCw4IEBAIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSxcbiBcdFx0XHRpZiAocGFnZV96b25lKHBhZ2UpICE9IHpvbmUpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7XG4tXHRcdFx0XHR1bnNpZ25lZCBsb25nIGZyZWVwYWdlX29yZGVyO1xuLVxuLVx0XHRcdFx0ZnJlZXBhZ2Vfb3JkZXIgPSBidWRkeV9vcmRlcl91bnNhZmUocGFnZSk7XG4tXHRcdFx0XHRpZiAoZnJlZXBhZ2Vfb3JkZXIgXHUwMDNjPSBNQVhfUEFHRV9PUkRFUilcbi1cdFx0XHRcdFx0cGZuICs9ICgxVUwgXHUwMDNjXHUwMDNjIGZyZWVwYWdlX29yZGVyKSAtIDE7XG4rXHRcdFx0aWYgKHNraXBfYnVkZHlfcGFnZXMoXHUwMDI2cGZuLCBwYWdlKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdH1cbiBcbiBcdFx0XHRpZiAoUGFnZVJlc2VydmVkKHBhZ2UpKVxuIFx0XHRcdFx0Y29udGludWU7XG5AQCAtNTA1LDEzICs1MjIsMTMgQEAgdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLFxuIFx0c2VxX3B1dGMobSwgJ1xcbicpO1xuIH1cbiBcbisjaWZkZWYgQ09ORklHX01FTUNHXG4gLypcbiAgKiBMb29raW5nIGZvciBtZW1jZyBpbmZvcm1hdGlvbiBhbmQgcHJpbnQgaXQgb3V0XG4gICovXG4gc3RhdGljIGlubGluZSBpbnQgcHJpbnRfcGFnZV9vd25lcl9tZW1jZyhjaGFyICprYnVmLCBzaXplX3QgY291bnQsIGludCByZXQsXG4gXHRcdFx0XHRcdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4tI2lmZGVmIENPTkZJR19NRU1DR1xuIFx0dW5zaWduZWQgbG9uZyBtZW1jZ19kYXRhO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIFx0Ym9vbCBvbmxpbmU7XG5AQCAtNTM5LDEwICs1NTYsMTYgQEAgc3RhdGljIGlubGluZSBpbnQgcHJpbnRfcGFnZV9vd25lcl9tZW1jZyhjaGFyICprYnVmLCBzaXplX3QgY291bnQsIGludCByZXQsXG4gXHRcdFx0bmFtZSk7XG4gb3V0X3VubG9jazpcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuLSNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuKyNlbHNlXG4rc3RhdGljIGlubGluZSBpbnQgcHJpbnRfcGFnZV9vd25lcl9tZW1jZyhjaGFyICprYnVmLCBzaXplX3QgY291bnQsIGludCByZXQsXG4rXHRcdFx0XHRcdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbit7XG4rXHRyZXR1cm4gcmV0O1xuK31cbisjZW5kaWZcbiBcbiBzdGF0aWMgc3NpemVfdFxuIHByaW50X3BhZ2Vfb3duZXIoY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBsb25nIHBmbixcbkBAIC01NzksNyArNjAyLDcgQEAgcHJpbnRfcGFnZV9vd25lcihjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIHVuc2lnbmVkIGxvbmcgcGZuLFxuIFx0aWYgKHJldCBcdTAwM2U9IGNvdW50KVxuIFx0XHRnb3RvIGVycjtcbiBcbi1cdGlmIChwYWdlX293bmVyLVx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb24gIT0gLTEpIHtcbitcdGlmIChwYWdlX293bmVyLVx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb24gIT0gTVJfTkVWRVIpIHtcbiBcdFx0cmV0ICs9IHNjbnByaW50ZihrYnVmICsgcmV0LCBjb3VudCAtIHJldCxcbiBcdFx0XHRcIlBhZ2UgaGFzIGJlZW4gbWlncmF0ZWQsIGxhc3QgbWlncmF0ZSByZWFzb246ICVzXFxuXCIsXG4gXHRcdFx0bWlncmF0ZV9yZWFzb25fbmFtZXNbcGFnZV9vd25lci1cdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uXSk7XG5AQCAtNjMwLDEwICs2NTMsMTAgQEAgdm9pZCBfX2R1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcdGVsc2VcbiBcdFx0cHJfYWxlcnQoXCJwYWdlX293bmVyIHRyYWNrcyB0aGUgcGFnZSBhcyBmcmVlZFxcblwiKTtcbiBcbi1cdHByX2FsZXJ0KFwicGFnZSBsYXN0IGFsbG9jYXRlZCB2aWEgb3JkZXIgJXUsIG1pZ3JhdGV0eXBlICVzLCBnZnBfbWFzayAlI3goJXBHZyksIHBpZCAlZCwgdGdpZCAlZCAoJXMpLCB0cyAlbGx1LCBmcmVlX3RzICVsbHVcXG5cIixcbitcdHByX2FsZXJ0KFwicGFnZSBsYXN0IGFsbG9jYXRlZCB2aWEgb3JkZXIgJXUsIG1pZ3JhdGV0eXBlICVzLCBnZnBfbWFzayAlI3goJXBHZyksIHBpZCAlZCwgdGdpZCAlZCAoJXMpLCB0cyAlbGx1XFxuXCIsXG4gXHRcdCBwYWdlX293bmVyLVx1MDAzZW9yZGVyLCBtaWdyYXRldHlwZV9uYW1lc1ttdF0sIGdmcF9tYXNrLCBcdTAwMjZnZnBfbWFzayxcbiBcdFx0IHBhZ2Vfb3duZXItXHUwMDNlcGlkLCBwYWdlX293bmVyLVx1MDAzZXRnaWQsIHBhZ2Vfb3duZXItXHUwMDNlY29tbSxcbi1cdFx0IHBhZ2Vfb3duZXItXHUwMDNldHNfbnNlYywgcGFnZV9vd25lci1cdTAwM2VmcmVlX3RzX25zZWMpO1xuK1x0XHQgcGFnZV9vd25lci1cdTAwM2V0c19uc2VjKTtcbiBcbiBcdGhhbmRsZSA9IFJFQURfT05DRShwYWdlX293bmVyLVx1MDAzZWhhbmRsZSk7XG4gXHRpZiAoIWhhbmRsZSlcbkBAIC02NDUsMTIgKzY2OCwxMyBAQCB2b2lkIF9fZHVtcF9wYWdlX293bmVyKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIFx0aWYgKCFoYW5kbGUpIHtcbiBcdFx0cHJfYWxlcnQoXCJwYWdlX293bmVyIGZyZWUgc3RhY2sgdHJhY2UgbWlzc2luZ1xcblwiKTtcbiBcdH0gZWxzZSB7XG4tXHRcdHByX2FsZXJ0KFwicGFnZSBsYXN0IGZyZWUgcGlkICVkIHRnaWQgJWQgc3RhY2sgdHJhY2U6XFxuXCIsXG4tXHRcdFx0ICBwYWdlX293bmVyLVx1MDAzZWZyZWVfcGlkLCBwYWdlX293bmVyLVx1MDAzZWZyZWVfdGdpZCk7XG4rXHRcdHByX2FsZXJ0KFwicGFnZSBsYXN0IGZyZWUgcGlkICVkIHRnaWQgJWQgdHMgJWxsdSBzdGFjayB0cmFjZTpcXG5cIixcbitcdFx0XHQgIHBhZ2Vfb3duZXItXHUwMDNlZnJlZV9waWQsIHBhZ2Vfb3duZXItXHUwMDNlZnJlZV90Z2lkLFxuK1x0XHRcdCAgcGFnZV9vd25lci1cdTAwM2VmcmVlX3RzX25zZWMpO1xuIFx0XHRzdGFja19kZXBvdF9wcmludChoYW5kbGUpO1xuIFx0fVxuIFxuLVx0aWYgKHBhZ2Vfb3duZXItXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSAtMSlcbitcdGlmIChwYWdlX293bmVyLVx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb24gIT0gTVJfTkVWRVIpXG4gXHRcdHByX2FsZXJ0KFwicGFnZSBoYXMgYmVlbiBtaWdyYXRlZCwgbGFzdCBtaWdyYXRlIHJlYXNvbjogJXNcXG5cIixcbiBcdFx0XHRtaWdyYXRlX3JlYXNvbl9uYW1lc1twYWdlX293bmVyLVx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb25dKTtcbiBcdHBhZ2VfZXh0X3B1dChwYWdlX2V4dCk7XG5AQCAtNjk3LDEzICs3MjEsOCBAQCByZWFkX3BhZ2Vfb3duZXIoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuIFx0XHR9XG4gXG4gXHRcdHBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuLVx0XHRpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7XG4tXHRcdFx0dW5zaWduZWQgbG9uZyBmcmVlcGFnZV9vcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcbi1cbi1cdFx0XHRpZiAoZnJlZXBhZ2Vfb3JkZXIgXHUwMDNjPSBNQVhfUEFHRV9PUkRFUilcbi1cdFx0XHRcdHBmbiArPSAoMVVMIFx1MDAzY1x1MDAzYyBmcmVlcGFnZV9vcmRlcikgLSAxO1xuK1x0XHRpZiAoc2tpcF9idWRkeV9wYWdlcyhcdTAwMjZwZm4sIHBhZ2UpKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9XG4gXG4gXHRcdHBhZ2VfZXh0ID0gcGFnZV9leHRfZ2V0KHBhZ2UpO1xuIFx0XHRpZiAodW5saWtlbHkoIXBhZ2VfZXh0KSlcbkBAIC03OTgsMjAgKzgxNyw4IEBAIHN0YXRpYyB2b2lkIGluaXRfcGFnZXNfaW5fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSlcbiBcdFx0XHRpZiAocGFnZV96b25lKHBhZ2UpICE9IHpvbmUpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIFRvIGF2b2lkIGhhdmluZyB0byBncmFiIHpvbmUtXHUwMDNlbG9jaywgYmUgYSBsaXR0bGVcbi1cdFx0XHQgKiBjYXJlZnVsIHdoZW4gcmVhZGluZyBidWRkeSBwYWdlIG9yZGVyLiBUaGUgb25seVxuLVx0XHRcdCAqIGRhbmdlciBpcyB0aGF0IHdlIHNraXAgdG9vIG11Y2ggYW5kIHBvdGVudGlhbGx5IG1pc3Ncbi1cdFx0XHQgKiBzb21lIGVhcmx5IGFsbG9jYXRlZCBwYWdlcywgd2hpY2ggaXMgYmV0dGVyIHRoYW5cbi1cdFx0XHQgKiBoZWF2eSBsb2NrIGNvbnRlbnRpb24uXG4tXHRcdFx0ICovXG4tXHRcdFx0aWYgKFBhZ2VCdWRkeShwYWdlKSkge1xuLVx0XHRcdFx0dW5zaWduZWQgbG9uZyBvcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcbi1cbi1cdFx0XHRcdGlmIChvcmRlciBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgb3JkZXIgXHUwMDNjPSBNQVhfUEFHRV9PUkRFUilcbi1cdFx0XHRcdFx0cGZuICs9ICgxVUwgXHUwMDNjXHUwMDNjIG9yZGVyKSAtIDE7XG4rXHRcdFx0aWYgKHNraXBfYnVkZHlfcGFnZXMoXHUwMDI2cGZuLCBwYWdlKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdH1cbiBcbiBcdFx0XHRpZiAoUGFnZVJlc2VydmVkKHBhZ2UpKVxuIFx0XHRcdFx0Y29udGludWU7XG5AQCAtODI2LDcgKzgzMyw3IEBAIHN0YXRpYyB2b2lkIGluaXRfcGFnZXNfaW5fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSlcbiBcbiBcdFx0XHQvKiBGb3VuZCBlYXJseSBhbGxvY2F0ZWQgcGFnZSAqL1xuIFx0XHRcdF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGVhcmx5X2hhbmRsZSwgMCwgMCxcbi1cdFx0XHRcdFx0XHQgICAtMSwgbG9jYWxfY2xvY2soKSwgY3VycmVudC1cdTAwM2VwaWQsXG4rXHRcdFx0XHRcdFx0ICAgTVJfTkVWRVIsIGxvY2FsX2Nsb2NrKCksIGN1cnJlbnQtXHUwMDNlcGlkLFxuIFx0XHRcdFx0XHRcdCAgIGN1cnJlbnQtXHUwMDNldGdpZCwgY3VycmVudC1cdTAwM2Vjb21tKTtcbiBcdFx0XHRjb3VudCsrO1xuIGV4dF9wdXRfY29udGludWU6XG5AQCAtODg3LDcgKzg5NCw3IEBAIHN0YXRpYyB2b2lkICpzdGFja19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdiwgbG9mZl90ICpwcG9zKVxuIFx0cmV0dXJuIHN0YWNrO1xuIH1cbiBcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZDtcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlc190aHJlc2hvbGQ7XG4gXG4gc3RhdGljIGludCBzdGFja19wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4ge1xuQEAgLTkwNCw3ICs5MTEsNyBAQCBzdGF0aWMgaW50IHN0YWNrX3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbiBcdG5yX2Jhc2VfcGFnZXMgPSByZWZjb3VudF9yZWFkKFx1MDAyNnN0YWNrX3JlY29yZC1cdTAwM2Vjb3VudCkgLSAxO1xuIFxuIFx0aWYgKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgU1RBQ0tfUFJJTlRfRkxBR19QQUdFUyBcdTAwMjZcdTAwMjZcbi1cdCAgICAobnJfYmFzZV9wYWdlcyBcdTAwM2MgMSB8fCBucl9iYXNlX3BhZ2VzIFx1MDAzYyBwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZCkpXG4rXHQgICAgKG5yX2Jhc2VfcGFnZXMgXHUwMDNjIDEgfHwgbnJfYmFzZV9wYWdlcyBcdTAwM2MgcGFnZXNfdGhyZXNob2xkKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBTVEFDS19QUklOVF9GTEFHX1NUQUNLKSB7XG5AQCAtOTI2LDE2ICs5MzMsMTYgQEAgc3RhdGljIHZvaWQgc3RhY2tfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4ge1xuIH1cbiBcbi1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHBhZ2Vfb3duZXJfc3RhY2tfb3AgPSB7XG4rc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzdGFja19vcCA9IHtcbiBcdC5zdGFydFx0PSBzdGFja19zdGFydCxcbiBcdC5uZXh0XHQ9IHN0YWNrX25leHQsXG4gXHQuc3RvcFx0PSBzdGFja19zdG9wLFxuIFx0LnNob3dcdD0gc3RhY2tfcHJpbnRcbiB9O1xuIFxuLXN0YXRpYyBpbnQgcGFnZV9vd25lcl9zdGFja19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuK3N0YXRpYyBpbnQgc3RhY2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB7XG4tXHRpbnQgcmV0ID0gc2VxX29wZW5fcHJpdmF0ZShmaWxlLCBcdTAwMjZwYWdlX293bmVyX3N0YWNrX29wLFxuK1x0aW50IHJldCA9IHNlcV9vcGVuX3ByaXZhdGUoZmlsZSwgXHUwMDI2c3RhY2tfb3AsXG4gXHRcdFx0XHQgICBzaXplb2Yoc3RydWN0IHN0YWNrX3ByaW50X2N0eCkpO1xuIFxuIFx0aWYgKCFyZXQpIHtcbkBAIC05NDgsMjggKzk1NSwyNiBAQCBzdGF0aWMgaW50IHBhZ2Vfb3duZXJfc3RhY2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBhZ2Vfb3duZXJfc3RhY2tfZm9wcyA9IHtcbi1cdC5vcGVuXHRcdD0gcGFnZV9vd25lcl9zdGFja19vcGVuLFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN0YWNrX2ZvcHMgPSB7XG4rXHQub3Blblx0XHQ9IHN0YWNrX29wZW4sXG4gXHQucmVhZFx0XHQ9IHNlcV9yZWFkLFxuIFx0Lmxsc2Vla1x0XHQ9IHNlcV9sc2VlayxcbiBcdC5yZWxlYXNlXHQ9IHNlcV9yZWxlYXNlX3ByaXZhdGUsXG4gfTtcbiBcbi1zdGF0aWMgaW50IHBhZ2Vfb3duZXJfdGhyZXNob2xkX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbClcbitzdGF0aWMgaW50IHRocmVzaG9sZF9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpXG4ge1xuLVx0KnZhbCA9IFJFQURfT05DRShwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZCk7XG4rXHQqdmFsID0gUkVBRF9PTkNFKHBhZ2VzX3RocmVzaG9sZCk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBwYWdlX293bmVyX3RocmVzaG9sZF9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbClcbitzdGF0aWMgaW50IHRocmVzaG9sZF9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbClcbiB7XG4tXHRXUklURV9PTkNFKHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkLCB2YWwpO1xuK1x0V1JJVEVfT05DRShwYWdlc190aHJlc2hvbGQsIHZhbCk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUocGFnZV9vd25lcl90aHJlc2hvbGRfZm9wcywgXHUwMDI2cGFnZV9vd25lcl90aHJlc2hvbGRfZ2V0LFxuLVx0XHRcdFx1MDAyNnBhZ2Vfb3duZXJfdGhyZXNob2xkX3NldCwgXCIlbGx1XCIpO1xuLVxuK0RFRklORV9TSU1QTEVfQVRUUklCVVRFKHRocmVzaG9sZF9mb3BzLCBcdTAwMjZ0aHJlc2hvbGRfZ2V0LCBcdTAwMjZ0aHJlc2hvbGRfc2V0LCBcIiVsbHVcXG5cIik7XG4gXG4gc3RhdGljIGludCBfX2luaXQgcGFnZW93bmVyX2luaXQodm9pZClcbiB7XG5AQCAtOTg1LDE3ICs5OTAsMTcgQEAgc3RhdGljIGludCBfX2luaXQgcGFnZW93bmVyX2luaXQodm9pZClcbiBcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCJzaG93X3N0YWNrc1wiLCAwNDAwLCBkaXIsXG4gXHRcdFx0ICAgICh2b2lkICopKFNUQUNLX1BSSU5UX0ZMQUdfU1RBQ0sgfFxuIFx0XHRcdFx0ICAgICBTVEFDS19QUklOVF9GTEFHX1BBR0VTKSxcbi1cdFx0XHQgICAgIFx1MDAyNnBhZ2Vfb3duZXJfc3RhY2tfZm9wcyk7XG4rXHRcdFx0ICAgICBcdTAwMjZzdGFja19mb3BzKTtcbiBcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCJzaG93X2hhbmRsZXNcIiwgMDQwMCwgZGlyLFxuIFx0XHRcdCAgICAodm9pZCAqKShTVEFDS19QUklOVF9GTEFHX0hBTkRMRSB8XG4gXHRcdFx0XHQgICAgIFNUQUNLX1BSSU5UX0ZMQUdfUEFHRVMpLFxuLVx0XHRcdCAgICBcdTAwMjZwYWdlX293bmVyX3N0YWNrX2ZvcHMpO1xuK1x0XHRcdCAgICBcdTAwMjZzdGFja19mb3BzKTtcbiBcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCJzaG93X3N0YWNrc19oYW5kbGVzXCIsIDA0MDAsIGRpcixcbiBcdFx0XHQgICAgKHZvaWQgKikoU1RBQ0tfUFJJTlRfRkxBR19TVEFDSyB8XG4gXHRcdFx0XHQgICAgIFNUQUNLX1BSSU5UX0ZMQUdfSEFORExFKSxcbi1cdFx0XHQgICAgXHUwMDI2cGFnZV9vd25lcl9zdGFja19mb3BzKTtcbitcdFx0XHQgICAgXHUwMDI2c3RhY2tfZm9wcyk7XG4gXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwiY291bnRfdGhyZXNob2xkXCIsIDA2MDAsIGRpciwgTlVMTCxcbi1cdFx0XHQgICAgXHUwMDI2cGFnZV9vd25lcl90aHJlc2hvbGRfZm9wcyk7XG4rXHRcdFx0ICAgIFx1MDAyNnRocmVzaG9sZF9mb3BzKTtcbiBcdHJldHVybiAwO1xuIH1cbiBsYXRlX2luaXRjYWxsKHBhZ2Vvd25lcl9pbml0KVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDI6MDc6NDcuMDUzOTMyMzY0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQyNTkxNzY3OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXM6IFBhZ2UgTWlncmF0aW9uIGFuZCBPd25lciBSZWZhY3RvcmluZyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgcGF0Y2ggZG93bi4gVGhlIHByaW1hcnkgZm9jdXMgc2VlbXMgdG8gYmUgYSBjbGVhbnVwIGFuZCByZWZhY3RvcmluZyBlZmZvcnQgYXJvdW5kIHBhZ2UgbWlncmF0aW9uIGFuZCB0aGUgcGFnZSBvd25lciBmdW5jdGlvbmFsaXR5LiBUaGUgZmlyc3QgdGhpbmcgSSBub3RpY2UgaXMgYSBwZXJ2YXNpdmUgdHlwZSBjaGFuZ2U6IGBpbnQgcmVhc29uYCBpcyBiZWluZyBzd2FwcGVkIGZvciBgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb25gIGFjcm9zcyBzZXZlcmFsIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHBhZ2UgbWlncmF0aW9uIGFuZCB0aGUgcGFnZSBvd25lci4gVGhleSd2ZSBhbHNvIGludHJvZHVjZWQgYE1SX05FVkVSYCB0byB0aGUgYGVudW0gbWlncmF0ZV9yZWFzb25gIGVudW0gYW5kIGFyZSB1c2luZyBpdCBpbiBgcGFnZV9vd25lci5jYCB3aGVyZSBgLTFgIHdhcyBwcmV2aW91c2x5IHVzZWQuXG5cbkxvb2tpbmcgaW50byB0aGUgYG1tL3BhZ2Vfb3duZXIuY2AgY2hhbmdlcyBtb3JlIGNsb3NlbHksIHRoZXJlJ3MgYSBoZWxwZXIgZnVuY3Rpb24sIGBza2lwX2J1ZGR5X3BhZ2VzYCwgaW50cm9kdWNlZC4gVGhpcyBzZWVtcyB0byBjb25zb2xpZGF0ZSBzb21lIGJ1ZGR5IHBhZ2Ugc2tpcHBpbmcgbG9naWMuIEV4YW1pbmluZyB0aGUgY29kZSwgdGhlIGNoYW5nZSBpbiBgc2tpcF9idWRkeV9wYWdlc2AgcmVwbGFjZXMgaW5saW5lIGNvZGUgdGhhdCB3YXMgcHJldmlvdXNseSBpbmxpbmVkOyB0aGVyZSdzIGEgbWlub3IgbG9naWNhbCBjaGFuZ2UgaW4gYGluaXRfcGFnZXNfaW5fem9uZWAsIHdoZXJlIGBpZiAob3JkZXIgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IG9yZGVyIFx1MDAzYz0gTUFYX1BBR0VfT1JERVIpYCBiZWNvbWVzIGBpZiAob3JkZXIgXHUwMDNjPSBNQVhfUEFHRV9PUkRFUilgLiBUaGlzIG1lYW5zIGl0IHdpbGwgcGVyZm9ybSBhIG5vLW9wIHdoZW4gYG9yZGVyID09IDBgIChhZGRpbmcgMCB0byB0aGUgcGFnZSBmcmFtZSBudW1iZXIpLCBhbmQgSSBkb24ndCBzZWUgYW55IGZ1bmN0aW9uYWwgZGlmZmVyZW5jZSBpbiB0aGF0LlxuXG5XZSd2ZSBnb3Qgc29tZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBmb3IgbWVtY2cgc3VwcG9ydCwgYW5kIHRoZXJlJ3MgYSB0d2VhayB0byB0aGUgb3V0cHV0IG9mIGBfX2R1bXBfcGFnZV9vd25lcmAsIHNwZWNpZmljYWxseSB0aGUgYHByX2FsZXJ0YCBjYWxscy4gVGhlIGBmcmVlX3RzX25zZWNgIGZpZWxkIGlzIG1vdmVkIGJldHdlZW4gdGhlIHByaW50IHN0YXRlbWVudHMsIGFuZCBJIHNlZSBhIGNoYW5nZSBhZGRpbmcgYSBuZXdsaW5lIGNoYXJhY3RlciB0byBvbmUgb2YgdGhlIGZvcm1hdCBzdHJpbmdzLiBNaW5vciBjaGFuZ2VzLCBidXQgbm90aGluZyB0aGF0IHdvdWxkIGxpa2VseSBiZSBmdW5jdGlvbmFsbHkgaW1wYWN0ZnVsLlxuXG5UaGVyZSdzIGFsc28gc29tZSByZW5hbWluZyBnb2luZyBvbjogdmFyaWFibGVzIGFuZCBkZWJ1Z2ZzIGZpbGUgbmFtZXMgYXJlIGJlaW5nIG1hZGUgbW9yZSBjb25zaXN0ZW50LiBgcGFnZV9vd25lcl9wYWdlc190aHJlc2hvbGRgIGJlY29tZXMgYHBhZ2VzX3RocmVzaG9sZGAsIGBwYWdlX293bmVyX3N0YWNrX29wYCBiZWNvbWVzIGBzdGFja19vcGAsIGV0Yy4gSXQncyBhbGwgcmVmYWN0b3JpbmcsIG1vc3RseSB0byBpbXByb3ZlIHJlYWRhYmlsaXR5LlxuXG5MZXQncyBzZWU6IGBNUl9ORVZFUmAgaXMgYmVpbmcgdXNlZCBpbiBgX191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGVgLiBUaGUgY29tcGFyaXNvbiBgcGFnZV9vd25lci1cdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uICE9IE1SX05FVkVSYCByZXBsYWNlcyBgIT0gLTFgLlxuXG5BbHJpZ2h0LCBJJ20gbm90IHNlZWluZyBhbnkgaW50cm9kdWN0aW9uIG9mIG5ldyAqZnVuY3Rpb25hbCogbG9naWMgdGhhdCB3b3VsZCBiZSB3b3J0aCBmdXp6aW5nLiBUaGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IHR5cGUgY29udmVyc2lvbnMsIG1pbm9yIGxvZ2ljIGFkanVzdG1lbnRzIChsaWtlIHRoZSBuby1vcCBpbiBgc2tpcF9idWRkeV9wYWdlc2ApLCByZWZhY3RvcmluZywgYW5kIGNvc21ldGljIGNoYW5nZXMgdG8gcHJpbnQgb3V0cHV0IGFuZCB2YXJpYWJsZSBuYW1lcy4gSXQncyBlc3NlbnRpYWxseSBhIGNsZWFudXAgcGF0Y2ggdGhhdCBlbmhhbmNlcyBtYWludGFpbmFiaWxpdHkgYW5kIHJlYWRhYmlsaXR5LCBidXQgZG9lc24ndCBjaGFuZ2Ugd2hhdCB0aGUgY29kZSBhY3R1YWxseSAqZG9lcyouIEkgZG9uJ3QgdGhpbmsgYW55IG9mIHRoaXMgcmVxdWlyZXMgZnV6emluZywgaXQgY2FuIGJlIHNhZmVseSBtYXJrZWQgYXMgV29ydGhGdXp6aW5nPWZhbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODEzLCJPdXRwdXRUb2tlbnMiOjg2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQzNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAyOjA4OjAxLjMxMzExMDczM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29uc2lzdHMgZW50aXJlbHkgb2YgcmVmYWN0b3JpbmcgKGNoYW5naW5nIGludCB0byBlbnVtIG1pZ3JhdGVfcmVhc29uKSwgaW50cm9kdWNpbmcgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIHNraXBwaW5nIGJ1ZGR5IHBhZ2VzICh3aXRoIG5vIGZ1bmN0aW9uYWwgY2hhbmdlKSwgcmVuYW1pbmcgdmFyaWFibGVzL2Z1bmN0aW9ucywgYW5kIG1vZGlmeWluZyBwcmludGsvdHJhY2Vwb2ludCBvdXRwdXRzLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBsb2dpYyBjaGFuZ2VzIHRoYXQgd2FycmFudCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29uc2lzdHMgZW50aXJlbHkgb2YgcmVmYWN0b3JpbmcgKGNoYW5naW5nIGludCB0byBlbnVtIG1pZ3JhdGVfcmVhc29uKSwgaW50cm9kdWNpbmcgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIHNraXBwaW5nIGJ1ZGR5IHBhZ2VzICh3aXRoIG5vIGZ1bmN0aW9uYWwgY2hhbmdlKSwgcmVuYW1pbmcgdmFyaWFibGVzL2Z1bmN0aW9ucywgYW5kIG1vZGlmeWluZyBwcmludGsvdHJhY2Vwb2ludCBvdXRwdXRzLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBsb2dpYyBjaGFuZ2VzIHRoYXQgd2FycmFudCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowr97jk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-30 01:57:42 +0000 UTC FinishedAt: 2026-06-30 02:08:02 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAyOjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnNpc3RzIGVudGlyZWx5IG9mIHJlZmFjdG9yaW5nIChjaGFuZ2luZyBpbnQgdG8gZW51bSBtaWdyYXRlX3JlYXNvbiksIGludHJvZHVjaW5nIGEgaGVscGVyIGZ1bmN0aW9uIGZvciBza2lwcGluZyBidWRkeSBwYWdlcyAod2l0aCBubyBmdW5jdGlvbmFsIGNoYW5nZSksIHJlbmFtaW5nIHZhcmlhYmxlcy9mdW5jdGlvbnMsIGFuZCBtb2RpZnlpbmcgcHJpbnRrL3RyYWNlcG9pbnQgb3V0cHV0cy4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgbG9naWMgY2hhbmdlcyB0aGF0IHdhcnJhbnQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDI6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyM2MyODhhMjMxNTMyMWZhZjQ1NDUwMTlmZTEwN2ZhY2RjM2U1MzJjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdW4gMzAgMDI6MDc6NDUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuaW5kZXggMmFiYWY5OTMyMWU5MGQuLmZhODI4MjMyZGZjYzE4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG5AQCAtMTU0LDcgJiM0MzsxNTQsOCBAQCBsb25nIGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgc3RhcnQsIGxvbmcgZW5kLFxuIGJvb2wgZm9saW9faXNvbGF0ZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpO1xuIGludCBnZXRfaHdwb2lzb25faHVnZXRsYl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sICpodWdldGxiLCBib29sIHVucG9pc29uKTtcbiB2b2lkIGZvbGlvX3B1dGJhY2tfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi12b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGludCByZWFzb24pO1xuJiM0Mzt2b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sXG4mIzQzO1x0XHRcdGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKTtcbiB2b2lkIGh1Z2V0bGJfZml4X3Jlc2VydmVfY291bnRzKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIGV4dGVybiBzdHJ1Y3QgbXV0ZXggKmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGU7XG4gdTMyIGh1Z2V0bGJfZmF1bHRfbXV0ZXhfaGFzaChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBpZHgpO1xuQEAgLTQyNCw3ICYjNDM7NDI1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3B1dGJhY2tfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLFxuLVx0XHRcdFx0XHRzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgaW50IHJlYXNvbilcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbilcbiB7XG4gfVxuIFxuQEAgLTk1Niw3ICYjNDM7OTU3LDcgQEAgc3RhdGljIGlubGluZSBnZnBfdCBodGxiX21vZGlmeV9hbGxvY19tYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGdmcF90IGdmcF9tYXNrKVxuIFx0cmV0dXJuIG1vZGlmaWVkX21hc2s7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBodGxiX2FsbG93X2FsbG9jX2ZhbGxiYWNrKGludCByZWFzb24pXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBodGxiX2FsbG93X2FsbG9jX2ZhbGxiYWNrKGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxuIHtcbiBcdGJvb2wgYWxsb3dlZF9mYWxsYmFjayA9IGZhbHNlO1xuIFxuQEAgLTEyMzgsNyAmIzQzOzEyMzksNyBAQCBzdGF0aWMgaW5saW5lIGdmcF90IGh0bGJfbW9kaWZ5X2FsbG9jX21hc2soc3RydWN0IGhzdGF0ZSAqaCwgZ2ZwX3QgZ2ZwX21hc2spXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIGh0bGJfYWxsb3dfYWxsb2NfZmFsbGJhY2soaW50IHJlYXNvbilcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGh0bGJfYWxsb3dfYWxsb2NfZmFsbGJhY2soZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pXG4ge1xuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaCBiL2luY2x1ZGUvbGludXgvbWlncmF0ZS5oXG5pbmRleCBkNWFmMmI3ZjU3N2IzMy4uMWY4MzkyNDYxNWQ2ZDMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9taWdyYXRlLmhcbkBAIC01Nyw3ICYjNDM7NTcsOCBAQCB2b2lkIHB1dGJhY2tfbW92YWJsZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsKTtcbiBpbnQgbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpkc3QsXG4gXHRcdHN0cnVjdCBmb2xpbyAqc3JjLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlKTtcbiBpbnQgbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsLCBuZXdfZm9saW9fdCBuZXcsIGZyZWVfZm9saW9fdCBmcmVlLFxuLVx0XHQgIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbixcbiYjNDM7XHRcdCAgdW5zaWduZWQgbG9uZyBwcml2YXRlLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLFxuJiM0MztcdFx0ICBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbixcbiBcdFx0ICB1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpO1xuIHN0cnVjdCBmb2xpbyAqYWxsb2NfbWlncmF0aW9uX3RhcmdldChzdHJ1Y3QgZm9saW8gKnNyYywgdW5zaWduZWQgbG9uZyBwcml2YXRlKTtcbiBib29sIGlzb2xhdGVfbW92YWJsZV9vcHNfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaXNvbGF0ZV9tb2RlX3QgbW9kZSk7XG5AQCAtNzcsNyAmIzQzOzc4LDggQEAgaW50IHNldF9tb3ZhYmxlX29wcyhjb25zdCBzdHJ1Y3QgbW92YWJsZV9vcGVyYXRpb25zICpvcHMsIGVudW0gcGFnZXR5cGUgdHlwZSk7XG4gc3RhdGljIGlubGluZSB2b2lkIHB1dGJhY2tfbW92YWJsZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsKSB7fVxuIHN0YXRpYyBpbmxpbmUgaW50IG1pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbCwgbmV3X2ZvbGlvX3QgbmV3LFxuIFx0XHRmcmVlX2ZvbGlvX3QgZnJlZSwgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxuLVx0XHRlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLCB1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpXG4mIzQzO1x0XHRlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbixcbiYjNDM7XHRcdHVuc2lnbmVkIGludCAqcmV0X3N1Y2NlZWRlZClcbiBcdHsgcmV0dXJuIC1FTk9TWVM7IH1cbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqYWxsb2NfbWlncmF0aW9uX3RhcmdldChzdHJ1Y3QgZm9saW8gKnNyYyxcbiBcdFx0dW5zaWduZWQgbG9uZyBwcml2YXRlKVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWlncmF0ZV9tb2RlLmggYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGVfbW9kZS5oXG5pbmRleCAyNjVjNDMyOGIzNmFkNS4uMDUxMDJkNGQyNDkwZTYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21pZ3JhdGVfbW9kZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGVfbW9kZS5oXG5AQCAtMjUsNiAmIzQzOzI1LDcgQEAgZW51bSBtaWdyYXRlX3JlYXNvbiB7XG4gXHRNUl9MT05HVEVSTV9QSU4sXG4gXHRNUl9ERU1PVElPTixcbiBcdE1SX0RBTU9OLFxuJiM0MztcdE1SX05FVkVSLFx0XHQvKiBwYWdlIGhhcyBuZXZlciBiZWVuIG1pZ3JhdGVkICovXG4gXHRNUl9UWVBFU1xuIH07XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaFxuaW5kZXggMzMyODM1N2Y2ZGJhNzIuLjlmZTUxZGZjY2YyNjg1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZV9vd25lci5oXG5AQCAtMyw2ICYjNDM7Myw3IEBAXG4gI2RlZmluZSBfX0xJTlVYX1BBR0VfT1dORVJfSFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2p1bXBfbGFiZWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9taWdyYXRlX21vZGUuaFx1MDAzZVxuIFxuICNpZmRlZiBDT05GSUdfUEFHRV9PV05FUlxuIGV4dGVybiBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBwYWdlX293bmVyX2luaXRlZDtcbkBAIC0xNCw3ICYjNDM7MTUsNyBAQCBleHRlcm4gdm9pZCBfX3NldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLFxuIGV4dGVybiB2b2lkIF9fc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlcixcbiBcdFx0XHRpbnQgbmV3X29yZGVyKTtcbiBleHRlcm4gdm9pZCBfX2ZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpO1xuLWV4dGVybiB2b2lkIF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCByZWFzb24pO1xuJiM0MztleHRlcm4gdm9pZCBfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbik7XG4gZXh0ZXJuIHZvaWQgX19kdW1wX3BhZ2Vfb3duZXIoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpO1xuIGV4dGVybiB2b2lkIHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXG4gXHRcdFx0XHRcdHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCB6b25lICp6b25lKTtcbkBAIC00Myw3ICYjNDM7NDQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZClcbiBcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNnBhZ2Vfb3duZXJfaW5pdGVkKSlcbiBcdFx0X19mb2xpb19jb3B5X293bmVyKG5ld2ZvbGlvLCBvbGQpO1xuIH1cbi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCByZWFzb24pXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pXG4ge1xuIFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2cGFnZV9vd25lcl9pbml0ZWQpKVxuIFx0XHRfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihmb2xpbywgcmVhc29uKTtcbkBAIC02OCw3ICYjNDM7NjksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlcixcbiBzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiB9XG4tc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcmVhc29uKVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxuIHtcbiB9XG4gc3RhdGljIGlubGluZSB2b2lkIGR1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmhcbmluZGV4IGNkMDFkZDdiMzY0MGRjLi4xNWVlMmVmMjAxYjVmOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oXG5AQCAtMjMsNyAmIzQzOzIzLDggQEBcbiBcdEVNKCBNUl9DT05USUdfUkFOR0UsXHRcJiMzNDtjb250aWdfcmFuZ2VcJiMzNDspXHRcdFx0XFxcbiBcdEVNKCBNUl9MT05HVEVSTV9QSU4sXHRcJiMzNDtsb25ndGVybV9waW5cJiMzNDspXHRcdFx0XFxcbiBcdEVNKCBNUl9ERU1PVElPTixcdFwmIzM0O2RlbW90aW9uXCYjMzQ7KVx0XHRcdFxcXG4tXHRFTWUoTVJfREFNT04sXHRcdFwmIzM0O2RhbW9uXCYjMzQ7KVxuJiM0MztcdEVNKCBNUl9EQU1PTixcdFx0XCYjMzQ7ZGFtb25cJiMzNDspXHRcdFx0XFxcbiYjNDM7XHRFTWUoTVJfTkVWRVIsXHRcdFwmIzM0O25ldmVyX21pZ3JhdGVkXCYjMzQ7KVxuIFxuIC8qXG4gICogRmlyc3QgZGVmaW5lIHRoZSBlbnVtcyBpbiB0aGUgYWJvdmUgbWFjcm9zIHRvIGJlIGV4cG9ydGVkIHRvIHVzZXJzcGFjZVxuQEAgLTUxLDcgJiM0Mzs1Miw3IEBAIFRSQUNFX0VWRU5UKG1tX21pZ3JhdGVfcGFnZXMsXG4gXHRUUF9QUk9UTyh1bnNpZ25lZCBsb25nIHN1Y2NlZWRlZCwgdW5zaWduZWQgbG9uZyBmYWlsZWQsXG4gXHRcdCB1bnNpZ25lZCBsb25nIHRocF9zdWNjZWVkZWQsIHVuc2lnbmVkIGxvbmcgdGhwX2ZhaWxlZCxcbiBcdFx0IHVuc2lnbmVkIGxvbmcgdGhwX3NwbGl0LCB1bnNpZ25lZCBsb25nIGxhcmdlX2ZvbGlvX3NwbGl0LFxuLVx0XHQgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiksXG4mIzQzO1x0XHQgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pLFxuIFxuIFx0VFBfQVJHUyhzdWNjZWVkZWQsIGZhaWxlZCwgdGhwX3N1Y2NlZWRlZCwgdGhwX2ZhaWxlZCxcbiBcdFx0dGhwX3NwbGl0LCBsYXJnZV9mb2xpb19zcGxpdCwgbW9kZSwgcmVhc29uKSxcbkBAIC02NCw3ICYjNDM7NjUsNyBAQCBUUkFDRV9FVkVOVChtbV9taWdyYXRlX3BhZ2VzLFxuIFx0XHRfX2ZpZWxkKFx0dW5zaWduZWQgbG9uZyxcdFx0dGhwX3NwbGl0KVxuIFx0XHRfX2ZpZWxkKFx0dW5zaWduZWQgbG9uZyxcdFx0bGFyZ2VfZm9saW9fc3BsaXQpXG4gXHRcdF9fZmllbGQoXHRlbnVtIG1pZ3JhdGVfbW9kZSxcdG1vZGUpXG4tXHRcdF9fZmllbGQoXHRpbnQsXHRcdFx0cmVhc29uKVxuJiM0MztcdFx0X19maWVsZChcdGVudW0gbWlncmF0ZV9yZWFzb24sXHRyZWFzb24pXG4gXHQpLFxuIFxuIFx0VFBfZmFzdF9hc3NpZ24oXG5AQCAtOTEsMTMgJiM0Mzs5MiwxMyBAQCBUUkFDRV9FVkVOVChtbV9taWdyYXRlX3BhZ2VzLFxuIFxuIFRSQUNFX0VWRU5UKG1tX21pZ3JhdGVfcGFnZXNfc3RhcnQsXG4gXG4tXHRUUF9QUk9UTyhlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uKSxcbiYjNDM7XHRUUF9QUk9UTyhlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiksXG4gXG4gXHRUUF9BUkdTKG1vZGUsIHJlYXNvbiksXG4gXG4gXHRUUF9TVFJVQ1RfX2VudHJ5KFxuIFx0XHRfX2ZpZWxkKGVudW0gbWlncmF0ZV9tb2RlLCBtb2RlKVxuLVx0XHRfX2ZpZWxkKGludCwgcmVhc29uKVxuJiM0MztcdFx0X19maWVsZChlbnVtIG1pZ3JhdGVfcmVhc29uLCByZWFzb24pXG4gXHQpLFxuIFxuIFx0VFBfZmFzdF9hc3NpZ24oXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jXG5pbmRleCA1NzEyMTJiODA4MzVlYy4uMTc3MzJkMWZkYzVlZmQgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGIuY1xuQEAgLTcxODIsNyAmIzQzOzcxODIsOCBAQCB2b2lkIGZvbGlvX3B1dGJhY2tfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0Zm9saW9fcHV0KGZvbGlvKTtcbiB9XG4gXG4tdm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBpbnQgcmVhc29uKVxuJiM0Mzt2b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sXG4mIzQzO1x0XHRcdGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBoc3RhdGUgKmggPSBmb2xpb19oc3RhdGUob2xkX2ZvbGlvKTtcbiBcbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmNcbmluZGV4IGQ5YjIzOTA5ZDcxNmM2Li40OWUxMGZlZWIwOTRmMCAxMDA2NDRcbi0tLSBhL21tL21pZ3JhdGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWlncmF0ZS5jXG5AQCAtMTQ2OSw3ICYjNDM7MTQ2OSw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV9mb2xpb19tb3ZlKGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXG4gc3RhdGljIGludCB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2UobmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbiBcdFx0ZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcbiBcdFx0c3RydWN0IGZvbGlvICpzcmMsIGludCBmb3JjZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSxcbi1cdFx0aW50IHJlYXNvbiwgc3RydWN0IGxpc3RfaGVhZCAqcmV0KVxuJiM0MztcdFx0ZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sIHN0cnVjdCBsaXN0X2hlYWQgKnJldClcbiB7XG4gXHRzdHJ1Y3QgZm9saW8gKmRzdDtcbiBcdGludCByYyA9IC1FQUdBSU47XG5AQCAtMTYyNiw3ICYjNDM7MTYyNiw3IEBAIHN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzIHtcbiAgKi9cbiBzdGF0aWMgaW50IG1pZ3JhdGVfaHVnZXRsYnMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbiBcdFx0XHQgICAgZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcbi1cdFx0XHQgICAgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbixcbiYjNDM7XHRcdFx0ICAgIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLFxuIFx0XHRcdCAgICBzdHJ1Y3QgbWlncmF0ZV9wYWdlc19zdGF0cyAqc3RhdHMsXG4gXHRcdFx0ICAgIHN0cnVjdCBsaXN0X2hlYWQgKnJldF9mb2xpb3MpXG4ge1xuQEAgLTE3MTYsNyAmIzQzOzE3MTYsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfaHVnZXRsYnMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbiBzdGF0aWMgdm9pZCBtaWdyYXRlX2ZvbGlvc19tb3ZlKHN0cnVjdCBsaXN0X2hlYWQgKnNyY19mb2xpb3MsXG4gXHRcdHN0cnVjdCBsaXN0X2hlYWQgKmRzdF9mb2xpb3MsXG4gXHRcdGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXG4tXHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sXG4mIzQzO1x0XHRlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbixcbiBcdFx0c3RydWN0IGxpc3RfaGVhZCAqcmV0X2ZvbGlvcyxcbiBcdFx0c3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzLFxuIFx0XHRpbnQgKnJldHJ5LCBpbnQgKnRocF9yZXRyeSwgaW50ICpucl9mYWlsZWQsXG5AQCAtMTc5OSw3ICYjNDM7MTc5OSw3IEBAIHN0YXRpYyB2b2lkIG1pZ3JhdGVfZm9saW9zX3VuZG8oc3RydWN0IGxpc3RfaGVhZCAqc3JjX2ZvbGlvcyxcbiAgKi9cbiBzdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqZnJvbSxcbiBcdFx0bmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbywgZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sXG4tXHRcdHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbixcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sXG4gXHRcdHN0cnVjdCBsaXN0X2hlYWQgKnJldF9mb2xpb3MsIHN0cnVjdCBsaXN0X2hlYWQgKnNwbGl0X2ZvbGlvcyxcbiBcdFx0c3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzLCBpbnQgbnJfcGFzcylcbiB7XG5AQCAtMjAxMSw3ICYjNDM7MjAxMSw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlc19iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLFxuIFxuIHN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlc19zeW5jKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXG4gXHRcdGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXG4tXHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sXG4mIzQzO1x0XHRlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbixcbiBcdFx0c3RydWN0IGxpc3RfaGVhZCAqcmV0X2ZvbGlvcywgc3RydWN0IGxpc3RfaGVhZCAqc3BsaXRfZm9saW9zLFxuIFx0XHRzdHJ1Y3QgbWlncmF0ZV9wYWdlc19zdGF0cyAqc3RhdHMpXG4ge1xuQEAgLTIwODgsNyAmIzQzOzIwODgsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfc3luYyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxuICAqL1xuIGludCBtaWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXG4gXHRcdGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXG4tXHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sIHVuc2lnbmVkIGludCAqcmV0X3N1Y2NlZWRlZClcbiYjNDM7XHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLCB1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpXG4ge1xuIFx0aW50IHJjLCByY19nYXRoZXI7XG4gXHRpbnQgbnJfcGFnZXM7XG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9vd25lci5jIGIvbW0vcGFnZV9vd25lci5jXG5pbmRleCAyZGRkY2I2NTEwYWExZS4uNDZhOTMzZjljMjI5YmQgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX293bmVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2Vfb3duZXIuY1xuQEAgLTMzOSwxMyAmIzQzOzMzOSwxMyBAQCBub2lubGluZSB2b2lkIF9fc2V0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIHNob3J0IG9yZGVyLFxuIFx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlO1xuIFxuIFx0aGFuZGxlID0gc2F2ZV9zdGFjayhnZnBfbWFzayk7XG4tXHRfX3VwZGF0ZV9wYWdlX293bmVyX2hhbmRsZShwYWdlLCBoYW5kbGUsIG9yZGVyLCBnZnBfbWFzaywgLTEsXG4mIzQzO1x0X191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUocGFnZSwgaGFuZGxlLCBvcmRlciwgZ2ZwX21hc2ssIE1SX05FVkVSLFxuIFx0XHRcdFx0ICAgdHNfbnNlYywgY3VycmVudC1cdTAwM2VwaWQsIGN1cnJlbnQtXHUwMDNldGdpZCxcbiBcdFx0XHRcdCAgIGN1cnJlbnQtXHUwMDNlY29tbSk7XG4gXHRpbmNfc3RhY2tfcmVjb3JkX2NvdW50KGhhbmRsZSwgZ2ZwX21hc2ssIDEgXHUwMDNjXHUwMDNjIG9yZGVyKTtcbiB9XG4gXG4tdm9pZCBfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcmVhc29uKVxuJiM0Mzt2b2lkIF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBwYWdlX2V4dCAqcGFnZV9leHQgPSBwYWdlX2V4dF9nZXQoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSk7XG4gXHRzdHJ1Y3QgcGFnZV9vd25lciAqcGFnZV9vd25lcjtcbkBAIC00MjIsNiAmIzQzOzQyMiwyOSBAQCB2b2lkIF9fZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZClcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogQ2hlY2sgaWYgYSBwYWdlIGlzIGEgYnVkZHkgcGFnZSBhbmQgYWR2YW5jZSBAcGZuIHBhc3QgdGhlIGVudGlyZSBidWRkeSBibG9jay5cbiYjNDM7ICogVGhpcyBzYWZlbHkgcmVhZHMgdGhlIGJ1ZGR5IG9yZGVyIHdpdGhvdXQgdGhlIHpvbmUgbG9jaywgd2hpY2ggbWF5IGNhdXNlIHVzXG4mIzQzOyAqIHRvIHNraXAgbGVzcyB0aGFuIHRoZSBmdWxsIGJ1ZGR5IGJsb2NrLCBidXQgdGhhdCBpcyBhY2NlcHRhYmxlIGZvciBwYWdlIG93bmVyXG4mIzQzOyAqIGl0ZXJhdGlvbiBwdXJwb3Nlcy5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIHRoZSBwYWdlIHdhcyBza2lwcGVkIChjYWxsZXIgc2hvdWxkIGNvbnRpbnVlIGl0cyBsb29wKSxcbiYjNDM7ICogICAgICAgICBmYWxzZSBpZiB0aGUgcGFnZSBpcyBub3QgYSBidWRkeSBwYWdlIGFuZCBzaG91bGQgYmUgcHJvY2Vzc2VkIG5vcm1hbGx5LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBib29sIHNraXBfYnVkZHlfcGFnZXModW5zaWduZWQgbG9uZyAqcGZuLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgb3JkZXI7XG4mIzQzO1xuJiM0MztcdGlmICghUGFnZUJ1ZGR5KHBhZ2UpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRvcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcbiYjNDM7XHRpZiAob3JkZXIgXHUwMDNjPSBNQVhfUEFHRV9PUkRFUilcbiYjNDM7XHRcdCpwZm4gJiM0Mzs9ICgxVUwgXHUwMDNjXHUwMDNjIG9yZGVyKSAtIDE7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSxcbiBcdFx0XHRcdCAgICAgICBwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgem9uZSAqem9uZSlcbiB7XG5AQCAtNDYxLDE0ICYjNDM7NDg0LDggQEAgdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLFxuIFx0XHRcdGlmIChwYWdlX3pvbmUocGFnZSkgIT0gem9uZSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdGlmIChQYWdlQnVkZHkocGFnZSkpIHtcbi1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgZnJlZXBhZ2Vfb3JkZXI7XG4tXG4tXHRcdFx0XHRmcmVlcGFnZV9vcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcbi1cdFx0XHRcdGlmIChmcmVlcGFnZV9vcmRlciBcdTAwM2M9IE1BWF9QQUdFX09SREVSKVxuLVx0XHRcdFx0XHRwZm4gJiM0Mzs9ICgxVUwgXHUwMDNjXHUwMDNjIGZyZWVwYWdlX29yZGVyKSAtIDE7XG4mIzQzO1x0XHRcdGlmIChza2lwX2J1ZGR5X3BhZ2VzKFx1MDAyNnBmbiwgcGFnZSkpXG4gXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHR9XG4gXG4gXHRcdFx0aWYgKFBhZ2VSZXNlcnZlZChwYWdlKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuQEAgLTUwNSwxMyAmIzQzOzUyMiwxMyBAQCB2b2lkIHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXG4gXHRzZXFfcHV0YyhtLCAmIzM5O1xcbiYjMzk7KTtcbiB9XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfTUVNQ0dcbiAvKlxuICAqIExvb2tpbmcgZm9yIG1lbWNnIGluZm9ybWF0aW9uIGFuZCBwcmludCBpdCBvdXRcbiAgKi9cbiBzdGF0aWMgaW5saW5lIGludCBwcmludF9wYWdlX293bmVyX21lbWNnKGNoYXIgKmtidWYsIHNpemVfdCBjb3VudCwgaW50IHJldCxcbiBcdFx0XHRcdFx0IHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbi0jaWZkZWYgQ09ORklHX01FTUNHXG4gXHR1bnNpZ25lZCBsb25nIG1lbWNnX2RhdGE7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4gXHRib29sIG9ubGluZTtcbkBAIC01MzksMTAgJiM0Mzs1NTYsMTYgQEAgc3RhdGljIGlubGluZSBpbnQgcHJpbnRfcGFnZV9vd25lcl9tZW1jZyhjaGFyICprYnVmLCBzaXplX3QgY291bnQsIGludCByZXQsXG4gXHRcdFx0bmFtZSk7XG4gb3V0X3VubG9jazpcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuLSNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBwcmludF9wYWdlX293bmVyX21lbWNnKGNoYXIgKmtidWYsIHNpemVfdCBjb3VudCwgaW50IHJldCxcbiYjNDM7XHRcdFx0XHRcdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4gXG4gc3RhdGljIHNzaXplX3RcbiBwcmludF9wYWdlX293bmVyKGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgbG9uZyBwZm4sXG5AQCAtNTc5LDcgJiM0Mzs2MDIsNyBAQCBwcmludF9wYWdlX293bmVyKGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgbG9uZyBwZm4sXG4gXHRpZiAocmV0IFx1MDAzZT0gY291bnQpXG4gXHRcdGdvdG8gZXJyO1xuIFxuLVx0aWYgKHBhZ2Vfb3duZXItXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSAtMSkge1xuJiM0MztcdGlmIChwYWdlX293bmVyLVx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb24gIT0gTVJfTkVWRVIpIHtcbiBcdFx0cmV0ICYjNDM7PSBzY25wcmludGYoa2J1ZiAmIzQzOyByZXQsIGNvdW50IC0gcmV0LFxuIFx0XHRcdFwmIzM0O1BhZ2UgaGFzIGJlZW4gbWlncmF0ZWQsIGxhc3QgbWlncmF0ZSByZWFzb246ICVzXFxuXCYjMzQ7LFxuIFx0XHRcdG1pZ3JhdGVfcmVhc29uX25hbWVzW3BhZ2Vfb3duZXItXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbl0pO1xuQEAgLTYzMCwxMCAmIzQzOzY1MywxMCBAQCB2b2lkIF9fZHVtcF9wYWdlX293bmVyKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIFx0ZWxzZVxuIFx0XHRwcl9hbGVydChcJiMzNDtwYWdlX293bmVyIHRyYWNrcyB0aGUgcGFnZSBhcyBmcmVlZFxcblwmIzM0Oyk7XG4gXG4tXHRwcl9hbGVydChcJiMzNDtwYWdlIGxhc3QgYWxsb2NhdGVkIHZpYSBvcmRlciAldSwgbWlncmF0ZXR5cGUgJXMsIGdmcF9tYXNrICUjeCglcEdnKSwgcGlkICVkLCB0Z2lkICVkICglcyksIHRzICVsbHUsIGZyZWVfdHMgJWxsdVxcblwmIzM0OyxcbiYjNDM7XHRwcl9hbGVydChcJiMzNDtwYWdlIGxhc3QgYWxsb2NhdGVkIHZpYSBvcmRlciAldSwgbWlncmF0ZXR5cGUgJXMsIGdmcF9tYXNrICUjeCglcEdnKSwgcGlkICVkLCB0Z2lkICVkICglcyksIHRzICVsbHVcXG5cJiMzNDssXG4gXHRcdCBwYWdlX293bmVyLVx1MDAzZW9yZGVyLCBtaWdyYXRldHlwZV9uYW1lc1ttdF0sIGdmcF9tYXNrLCBcdTAwMjZnZnBfbWFzayxcbiBcdFx0IHBhZ2Vfb3duZXItXHUwMDNlcGlkLCBwYWdlX293bmVyLVx1MDAzZXRnaWQsIHBhZ2Vfb3duZXItXHUwMDNlY29tbSxcbi1cdFx0IHBhZ2Vfb3duZXItXHUwMDNldHNfbnNlYywgcGFnZV9vd25lci1cdTAwM2VmcmVlX3RzX25zZWMpO1xuJiM0MztcdFx0IHBhZ2Vfb3duZXItXHUwMDNldHNfbnNlYyk7XG4gXG4gXHRoYW5kbGUgPSBSRUFEX09OQ0UocGFnZV9vd25lci1cdTAwM2VoYW5kbGUpO1xuIFx0aWYgKCFoYW5kbGUpXG5AQCAtNjQ1LDEyICYjNDM7NjY4LDEzIEBAIHZvaWQgX19kdW1wX3BhZ2Vfb3duZXIoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4gXHRpZiAoIWhhbmRsZSkge1xuIFx0XHRwcl9hbGVydChcJiMzNDtwYWdlX293bmVyIGZyZWUgc3RhY2sgdHJhY2UgbWlzc2luZ1xcblwmIzM0Oyk7XG4gXHR9IGVsc2Uge1xuLVx0XHRwcl9hbGVydChcJiMzNDtwYWdlIGxhc3QgZnJlZSBwaWQgJWQgdGdpZCAlZCBzdGFjayB0cmFjZTpcXG5cJiMzNDssXG4tXHRcdFx0ICBwYWdlX293bmVyLVx1MDAzZWZyZWVfcGlkLCBwYWdlX293bmVyLVx1MDAzZWZyZWVfdGdpZCk7XG4mIzQzO1x0XHRwcl9hbGVydChcJiMzNDtwYWdlIGxhc3QgZnJlZSBwaWQgJWQgdGdpZCAlZCB0cyAlbGx1IHN0YWNrIHRyYWNlOlxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICBwYWdlX293bmVyLVx1MDAzZWZyZWVfcGlkLCBwYWdlX293bmVyLVx1MDAzZWZyZWVfdGdpZCxcbiYjNDM7XHRcdFx0ICBwYWdlX293bmVyLVx1MDAzZWZyZWVfdHNfbnNlYyk7XG4gXHRcdHN0YWNrX2RlcG90X3ByaW50KGhhbmRsZSk7XG4gXHR9XG4gXG4tXHRpZiAocGFnZV9vd25lci1cdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uICE9IC0xKVxuJiM0MztcdGlmIChwYWdlX293bmVyLVx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb24gIT0gTVJfTkVWRVIpXG4gXHRcdHByX2FsZXJ0KFwmIzM0O3BhZ2UgaGFzIGJlZW4gbWlncmF0ZWQsIGxhc3QgbWlncmF0ZSByZWFzb246ICVzXFxuXCYjMzQ7LFxuIFx0XHRcdG1pZ3JhdGVfcmVhc29uX25hbWVzW3BhZ2Vfb3duZXItXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbl0pO1xuIFx0cGFnZV9leHRfcHV0KHBhZ2VfZXh0KTtcbkBAIC02OTcsMTMgJiM0Mzs3MjEsOCBAQCByZWFkX3BhZ2Vfb3duZXIoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuIFx0XHR9XG4gXG4gXHRcdHBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuLVx0XHRpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7XG4tXHRcdFx0dW5zaWduZWQgbG9uZyBmcmVlcGFnZV9vcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcbi1cbi1cdFx0XHRpZiAoZnJlZXBhZ2Vfb3JkZXIgXHUwMDNjPSBNQVhfUEFHRV9PUkRFUilcbi1cdFx0XHRcdHBmbiAmIzQzOz0gKDFVTCBcdTAwM2NcdTAwM2MgZnJlZXBhZ2Vfb3JkZXIpIC0gMTtcbiYjNDM7XHRcdGlmIChza2lwX2J1ZGR5X3BhZ2VzKFx1MDAyNnBmbiwgcGFnZSkpXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdH1cbiBcbiBcdFx0cGFnZV9leHQgPSBwYWdlX2V4dF9nZXQocGFnZSk7XG4gXHRcdGlmICh1bmxpa2VseSghcGFnZV9leHQpKVxuQEAgLTc5OCwyMCAmIzQzOzgxNyw4IEBAIHN0YXRpYyB2b2lkIGluaXRfcGFnZXNfaW5fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSlcbiBcdFx0XHRpZiAocGFnZV96b25lKHBhZ2UpICE9IHpvbmUpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIFRvIGF2b2lkIGhhdmluZyB0byBncmFiIHpvbmUtXHUwMDNlbG9jaywgYmUgYSBsaXR0bGVcbi1cdFx0XHQgKiBjYXJlZnVsIHdoZW4gcmVhZGluZyBidWRkeSBwYWdlIG9yZGVyLiBUaGUgb25seVxuLVx0XHRcdCAqIGRhbmdlciBpcyB0aGF0IHdlIHNraXAgdG9vIG11Y2ggYW5kIHBvdGVudGlhbGx5IG1pc3Ncbi1cdFx0XHQgKiBzb21lIGVhcmx5IGFsbG9jYXRlZCBwYWdlcywgd2hpY2ggaXMgYmV0dGVyIHRoYW5cbi1cdFx0XHQgKiBoZWF2eSBsb2NrIGNvbnRlbnRpb24uXG4tXHRcdFx0ICovXG4tXHRcdFx0aWYgKFBhZ2VCdWRkeShwYWdlKSkge1xuLVx0XHRcdFx0dW5zaWduZWQgbG9uZyBvcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcbi1cbi1cdFx0XHRcdGlmIChvcmRlciBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgb3JkZXIgXHUwMDNjPSBNQVhfUEFHRV9PUkRFUilcbi1cdFx0XHRcdFx0cGZuICYjNDM7PSAoMVVMIFx1MDAzY1x1MDAzYyBvcmRlcikgLSAxO1xuJiM0MztcdFx0XHRpZiAoc2tpcF9idWRkeV9wYWdlcyhcdTAwMjZwZm4sIHBhZ2UpKVxuIFx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0fVxuIFxuIFx0XHRcdGlmIChQYWdlUmVzZXJ2ZWQocGFnZSkpXG4gXHRcdFx0XHRjb250aW51ZTtcbkBAIC04MjYsNyAmIzQzOzgzMyw3IEBAIHN0YXRpYyB2b2lkIGluaXRfcGFnZXNfaW5fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSlcbiBcbiBcdFx0XHQvKiBGb3VuZCBlYXJseSBhbGxvY2F0ZWQgcGFnZSAqL1xuIFx0XHRcdF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGVhcmx5X2hhbmRsZSwgMCwgMCxcbi1cdFx0XHRcdFx0XHQgICAtMSwgbG9jYWxfY2xvY2soKSwgY3VycmVudC1cdTAwM2VwaWQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIE1SX05FVkVSLCBsb2NhbF9jbG9jaygpLCBjdXJyZW50LVx1MDAzZXBpZCxcbiBcdFx0XHRcdFx0XHQgICBjdXJyZW50LVx1MDAzZXRnaWQsIGN1cnJlbnQtXHUwMDNlY29tbSk7XG4gXHRcdFx0Y291bnQmIzQzOyYjNDM7O1xuIGV4dF9wdXRfY29udGludWU6XG5AQCAtODg3LDcgJiM0Mzs4OTQsNyBAQCBzdGF0aWMgdm9pZCAqc3RhY2tfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxvZmZfdCAqcHBvcylcbiBcdHJldHVybiBzdGFjaztcbiB9XG4gXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgcGFnZV9vd25lcl9wYWdlc190aHJlc2hvbGQ7XG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2VzX3RocmVzaG9sZDtcbiBcbiBzdGF0aWMgaW50IHN0YWNrX3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbiB7XG5AQCAtOTA0LDcgJiM0Mzs5MTEsNyBAQCBzdGF0aWMgaW50IHN0YWNrX3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbiBcdG5yX2Jhc2VfcGFnZXMgPSByZWZjb3VudF9yZWFkKFx1MDAyNnN0YWNrX3JlY29yZC1cdTAwM2Vjb3VudCkgLSAxO1xuIFxuIFx0aWYgKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgU1RBQ0tfUFJJTlRfRkxBR19QQUdFUyBcdTAwMjZcdTAwMjZcbi1cdCAgICAobnJfYmFzZV9wYWdlcyBcdTAwM2MgMSB8fCBucl9iYXNlX3BhZ2VzIFx1MDAzYyBwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZCkpXG4mIzQzO1x0ICAgIChucl9iYXNlX3BhZ2VzIFx1MDAzYyAxIHx8IG5yX2Jhc2VfcGFnZXMgXHUwMDNjIHBhZ2VzX3RocmVzaG9sZCkpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0aWYgKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgU1RBQ0tfUFJJTlRfRkxBR19TVEFDSykge1xuQEAgLTkyNiwxNiAmIzQzOzkzMywxNiBAQCBzdGF0aWMgdm9pZCBzdGFja19zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbiB7XG4gfVxuIFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgcGFnZV9vd25lcl9zdGFja19vcCA9IHtcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzdGFja19vcCA9IHtcbiBcdC5zdGFydFx0PSBzdGFja19zdGFydCxcbiBcdC5uZXh0XHQ9IHN0YWNrX25leHQsXG4gXHQuc3RvcFx0PSBzdGFja19zdG9wLFxuIFx0LnNob3dcdD0gc3RhY2tfcHJpbnRcbiB9O1xuIFxuLXN0YXRpYyBpbnQgcGFnZV9vd25lcl9zdGFja19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuJiM0MztzdGF0aWMgaW50IHN0YWNrX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4ge1xuLVx0aW50IHJldCA9IHNlcV9vcGVuX3ByaXZhdGUoZmlsZSwgXHUwMDI2cGFnZV9vd25lcl9zdGFja19vcCxcbiYjNDM7XHRpbnQgcmV0ID0gc2VxX29wZW5fcHJpdmF0ZShmaWxlLCBcdTAwMjZzdGFja19vcCxcbiBcdFx0XHRcdCAgIHNpemVvZihzdHJ1Y3Qgc3RhY2tfcHJpbnRfY3R4KSk7XG4gXG4gXHRpZiAoIXJldCkge1xuQEAgLTk0OCwyOCAmIzQzOzk1NSwyNiBAQCBzdGF0aWMgaW50IHBhZ2Vfb3duZXJfc3RhY2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBhZ2Vfb3duZXJfc3RhY2tfZm9wcyA9IHtcbi1cdC5vcGVuXHRcdD0gcGFnZV9vd25lcl9zdGFja19vcGVuLFxuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzdGFja19mb3BzID0ge1xuJiM0MztcdC5vcGVuXHRcdD0gc3RhY2tfb3BlbixcbiBcdC5yZWFkXHRcdD0gc2VxX3JlYWQsXG4gXHQubGxzZWVrXHRcdD0gc2VxX2xzZWVrLFxuIFx0LnJlbGVhc2VcdD0gc2VxX3JlbGVhc2VfcHJpdmF0ZSxcbiB9O1xuIFxuLXN0YXRpYyBpbnQgcGFnZV9vd25lcl90aHJlc2hvbGRfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKVxuJiM0MztzdGF0aWMgaW50IHRocmVzaG9sZF9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpXG4ge1xuLVx0KnZhbCA9IFJFQURfT05DRShwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZCk7XG4mIzQzO1x0KnZhbCA9IFJFQURfT05DRShwYWdlc190aHJlc2hvbGQpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcGFnZV9vd25lcl90aHJlc2hvbGRfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpXG4mIzQzO3N0YXRpYyBpbnQgdGhyZXNob2xkX3NldCh2b2lkICpkYXRhLCB1NjQgdmFsKVxuIHtcbi1cdFdSSVRFX09OQ0UocGFnZV9vd25lcl9wYWdlc190aHJlc2hvbGQsIHZhbCk7XG4mIzQzO1x0V1JJVEVfT05DRShwYWdlc190aHJlc2hvbGQsIHZhbCk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUocGFnZV9vd25lcl90aHJlc2hvbGRfZm9wcywgXHUwMDI2cGFnZV9vd25lcl90aHJlc2hvbGRfZ2V0LFxuLVx0XHRcdFx1MDAyNnBhZ2Vfb3duZXJfdGhyZXNob2xkX3NldCwgXCYjMzQ7JWxsdVwmIzM0Oyk7XG4tXG4mIzQzO0RFRklORV9TSU1QTEVfQVRUUklCVVRFKHRocmVzaG9sZF9mb3BzLCBcdTAwMjZ0aHJlc2hvbGRfZ2V0LCBcdTAwMjZ0aHJlc2hvbGRfc2V0LCBcJiMzNDslbGx1XFxuXCYjMzQ7KTtcbiBcbiBzdGF0aWMgaW50IF9faW5pdCBwYWdlb3duZXJfaW5pdCh2b2lkKVxuIHtcbkBAIC05ODUsMTcgJiM0Mzs5OTAsMTcgQEAgc3RhdGljIGludCBfX2luaXQgcGFnZW93bmVyX2luaXQodm9pZClcbiBcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7c2hvd19zdGFja3NcJiMzNDssIDA0MDAsIGRpcixcbiBcdFx0XHQgICAgKHZvaWQgKikoU1RBQ0tfUFJJTlRfRkxBR19TVEFDSyB8XG4gXHRcdFx0XHQgICAgIFNUQUNLX1BSSU5UX0ZMQUdfUEFHRVMpLFxuLVx0XHRcdCAgICAgXHUwMDI2cGFnZV9vd25lcl9zdGFja19mb3BzKTtcbiYjNDM7XHRcdFx0ICAgICBcdTAwMjZzdGFja19mb3BzKTtcbiBcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7c2hvd19oYW5kbGVzXCYjMzQ7LCAwNDAwLCBkaXIsXG4gXHRcdFx0ICAgICh2b2lkICopKFNUQUNLX1BSSU5UX0ZMQUdfSEFORExFIHxcbiBcdFx0XHRcdCAgICAgU1RBQ0tfUFJJTlRfRkxBR19QQUdFUyksXG4tXHRcdFx0ICAgIFx1MDAyNnBhZ2Vfb3duZXJfc3RhY2tfZm9wcyk7XG4mIzQzO1x0XHRcdCAgICBcdTAwMjZzdGFja19mb3BzKTtcbiBcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7c2hvd19zdGFja3NfaGFuZGxlc1wmIzM0OywgMDQwMCwgZGlyLFxuIFx0XHRcdCAgICAodm9pZCAqKShTVEFDS19QUklOVF9GTEFHX1NUQUNLIHxcbiBcdFx0XHRcdCAgICAgU1RBQ0tfUFJJTlRfRkxBR19IQU5ETEUpLFxuLVx0XHRcdCAgICBcdTAwMjZwYWdlX293bmVyX3N0YWNrX2ZvcHMpO1xuJiM0MztcdFx0XHQgICAgXHUwMDI2c3RhY2tfZm9wcyk7XG4gXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O2NvdW50X3RocmVzaG9sZFwmIzM0OywgMDYwMCwgZGlyLCBOVUxMLFxuLVx0XHRcdCAgICBcdTAwMjZwYWdlX293bmVyX3RocmVzaG9sZF9mb3BzKTtcbiYjNDM7XHRcdFx0ICAgIFx1MDAyNnRocmVzaG9sZF9mb3BzKTtcbiBcdHJldHVybiAwO1xuIH1cbiBsYXRlX2luaXRjYWxsKHBhZ2Vvd25lcl9pbml0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAyOjA3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnNpc3RzIGVudGlyZWx5IG9mIHJlZmFjdG9yaW5nIChjaGFuZ2luZyBpbnQgdG8gZW51bSBtaWdyYXRlX3JlYXNvbiksIGludHJvZHVjaW5nIGEgaGVscGVyIGZ1bmN0aW9uIGZvciBza2lwcGluZyBidWRkeSBwYWdlcyAod2l0aCBubyBmdW5jdGlvbmFsIGNoYW5nZSksIHJlbmFtaW5nIHZhcmlhYmxlcy9mdW5jdGlvbnMsIGFuZCBtb2RpZnlpbmcgcHJpbnRrL3RyYWNlcG9pbnQgb3V0cHV0cy4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgbG9naWMgY2hhbmdlcyB0aGF0IHdhcnJhbnQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDIzYzI4OGEyMzE1MzIxZmFmNDU0NTAxOWZlMTA3ZmFjZGMzZTUzMmMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1biAzMCAwMjowNzo0NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmgKaW5kZXggMmFiYWY5OTMyMWU5MGQuLmZhODI4MjMyZGZjYzE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaApAQCAtMTU0LDcgJiM0MzsxNTQsOCBAQCBsb25nIGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgc3RhcnQsIGxvbmcgZW5kLAogYm9vbCBmb2xpb19pc29sYXRlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCk7CiBpbnQgZ2V0X2h3cG9pc29uX2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCAqaHVnZXRsYiwgYm9vbCB1bnBvaXNvbik7CiB2b2lkIGZvbGlvX3B1dGJhY2tfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKLXZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgaW50IHJlYXNvbik7CiYjNDM7dm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLAomIzQzOwkJCWVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKTsKIHZvaWQgaHVnZXRsYl9maXhfcmVzZXJ2ZV9jb3VudHMoc3RydWN0IGlub2RlICppbm9kZSk7CiBleHRlcm4gc3RydWN0IG11dGV4ICpodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlOwogdTMyIGh1Z2V0bGJfZmF1bHRfbXV0ZXhfaGFzaChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBpZHgpOwpAQCAtNDI0LDcgJiM0Mzs0MjUsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fcHV0YmFja19odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8pCiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sCi0JCQkJCXN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBpbnQgcmVhc29uKQomIzQzOwkJCQkJc3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKQogewogfQogCkBAIC05NTYsNyAmIzQzOzk1Nyw3IEBAIHN0YXRpYyBpbmxpbmUgZ2ZwX3QgaHRsYl9tb2RpZnlfYWxsb2NfbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBnZnBfdCBnZnBfbWFzaykKIAlyZXR1cm4gbW9kaWZpZWRfbWFzazsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGh0bGJfYWxsb3dfYWxsb2NfZmFsbGJhY2soaW50IHJlYXNvbikKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaHRsYl9hbGxvd19hbGxvY19mYWxsYmFjayhlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbikKIHsKIAlib29sIGFsbG93ZWRfZmFsbGJhY2sgPSBmYWxzZTsKIApAQCAtMTIzOCw3ICYjNDM7MTIzOSw3IEBAIHN0YXRpYyBpbmxpbmUgZ2ZwX3QgaHRsYl9tb2RpZnlfYWxsb2NfbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBnZnBfdCBnZnBfbWFzaykKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGh0bGJfYWxsb3dfYWxsb2NfZmFsbGJhY2soaW50IHJlYXNvbikKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaHRsYl9hbGxvd19hbGxvY19mYWxsYmFjayhlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbikKIHsKIAlyZXR1cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaCBiL2luY2x1ZGUvbGludXgvbWlncmF0ZS5oCmluZGV4IGQ1YWYyYjdmNTc3YjMzLi4xZjgzOTI0NjE1ZDZkMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9taWdyYXRlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9taWdyYXRlLmgKQEAgLTU3LDcgJiM0Mzs1Nyw4IEBAIHZvaWQgcHV0YmFja19tb3ZhYmxlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmwpOwogaW50IG1pZ3JhdGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZHN0LAogCQlzdHJ1Y3QgZm9saW8gKnNyYywgZW51bSBtaWdyYXRlX21vZGUgbW9kZSk7CiBpbnQgbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsLCBuZXdfZm9saW9fdCBuZXcsIGZyZWVfZm9saW9fdCBmcmVlLAotCQkgIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiwKJiM0MzsJCSAgdW5zaWduZWQgbG9uZyBwcml2YXRlLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLAomIzQzOwkJICBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiwKIAkJICB1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpOwogc3RydWN0IGZvbGlvICphbGxvY19taWdyYXRpb25fdGFyZ2V0KHN0cnVjdCBmb2xpbyAqc3JjLCB1bnNpZ25lZCBsb25nIHByaXZhdGUpOwogYm9vbCBpc29sYXRlX21vdmFibGVfb3BzX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGlzb2xhdGVfbW9kZV90IG1vZGUpOwpAQCAtNzcsNyAmIzQzOzc4LDggQEAgaW50IHNldF9tb3ZhYmxlX29wcyhjb25zdCBzdHJ1Y3QgbW92YWJsZV9vcGVyYXRpb25zICpvcHMsIGVudW0gcGFnZXR5cGUgdHlwZSk7CiBzdGF0aWMgaW5saW5lIHZvaWQgcHV0YmFja19tb3ZhYmxlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmwpIHt9CiBzdGF0aWMgaW5saW5lIGludCBtaWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmwsIG5ld19mb2xpb190IG5ldywKIAkJZnJlZV9mb2xpb190IGZyZWUsIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwKLQkJZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiwgdW5zaWduZWQgaW50ICpyZXRfc3VjY2VlZGVkKQomIzQzOwkJZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sCiYjNDM7CQl1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpCiAJeyByZXR1cm4gLUVOT1NZUzsgfQogc3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pZ3JhdGlvbl90YXJnZXQoc3RydWN0IGZvbGlvICpzcmMsCiAJCXVuc2lnbmVkIGxvbmcgcHJpdmF0ZSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWlncmF0ZV9tb2RlLmggYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGVfbW9kZS5oCmluZGV4IDI2NWM0MzI4YjM2YWQ1Li4wNTEwMmQ0ZDI0OTBlNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9taWdyYXRlX21vZGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGVfbW9kZS5oCkBAIC0yNSw2ICYjNDM7MjUsNyBAQCBlbnVtIG1pZ3JhdGVfcmVhc29uIHsKIAlNUl9MT05HVEVSTV9QSU4sCiAJTVJfREVNT1RJT04sCiAJTVJfREFNT04sCiYjNDM7CU1SX05FVkVSLAkJLyogcGFnZSBoYXMgbmV2ZXIgYmVlbiBtaWdyYXRlZCAqLwogCU1SX1RZUEVTCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaCBiL2luY2x1ZGUvbGludXgvcGFnZV9vd25lci5oCmluZGV4IDMzMjgzNTdmNmRiYTcyLi45ZmU1MWRmY2NmMjY4NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmgKQEAgLTMsNiAmIzQzOzMsNyBAQAogI2RlZmluZSBfX0xJTlVYX1BBR0VfT1dORVJfSAogCiAjaW5jbHVkZSAmbHQ7bGludXgvanVtcF9sYWJlbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9taWdyYXRlX21vZGUuaCZndDsKIAogI2lmZGVmIENPTkZJR19QQUdFX09XTkVSCiBleHRlcm4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcGFnZV9vd25lcl9pbml0ZWQ7CkBAIC0xNCw3ICYjNDM7MTUsNyBAQCBleHRlcm4gdm9pZCBfX3NldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLAogZXh0ZXJuIHZvaWQgX19zcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLAogCQkJaW50IG5ld19vcmRlcik7CiBleHRlcm4gdm9pZCBfX2ZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpOwotZXh0ZXJuIHZvaWQgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJlYXNvbik7CiYjNDM7ZXh0ZXJuIHZvaWQgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pOwogZXh0ZXJuIHZvaWQgX19kdW1wX3BhZ2Vfb3duZXIoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpOwogZXh0ZXJuIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSwKIAkJCQkJcGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHpvbmUgKnpvbmUpOwpAQCAtNDMsNyAmIzQzOzQ0LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpCiAJaWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoJmFtcDtwYWdlX293bmVyX2luaXRlZCkpCiAJCV9fZm9saW9fY29weV9vd25lcihuZXdmb2xpbywgb2xkKTsKIH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJlYXNvbikKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKQogewogCWlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KCZhbXA7cGFnZV9vd25lcl9pbml0ZWQpKQogCQlfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihmb2xpbywgcmVhc29uKTsKQEAgLTY4LDcgJiM0Mzs2OSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLAogc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJlYXNvbikKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKQogewogfQogc3RhdGljIGlubGluZSB2b2lkIGR1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaAppbmRleCBjZDAxZGQ3YjM2NDBkYy4uMTVlZTJlZjIwMWI1ZjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmgKQEAgLTIzLDcgJiM0MzsyMyw4IEBACiAJRU0oIE1SX0NPTlRJR19SQU5HRSwJJiMzNDtjb250aWdfcmFuZ2UmIzM0OykJCQlcCiAJRU0oIE1SX0xPTkdURVJNX1BJTiwJJiMzNDtsb25ndGVybV9waW4mIzM0OykJCQlcCiAJRU0oIE1SX0RFTU9USU9OLAkmIzM0O2RlbW90aW9uJiMzNDspCQkJXAotCUVNZShNUl9EQU1PTiwJCSYjMzQ7ZGFtb24mIzM0OykKJiM0MzsJRU0oIE1SX0RBTU9OLAkJJiMzNDtkYW1vbiYjMzQ7KQkJCVwKJiM0MzsJRU1lKE1SX05FVkVSLAkJJiMzNDtuZXZlcl9taWdyYXRlZCYjMzQ7KQogCiAvKgogICogRmlyc3QgZGVmaW5lIHRoZSBlbnVtcyBpbiB0aGUgYWJvdmUgbWFjcm9zIHRvIGJlIGV4cG9ydGVkIHRvIHVzZXJzcGFjZQpAQCAtNTEsNyAmIzQzOzUyLDcgQEAgVFJBQ0VfRVZFTlQobW1fbWlncmF0ZV9wYWdlcywKIAlUUF9QUk9UTyh1bnNpZ25lZCBsb25nIHN1Y2NlZWRlZCwgdW5zaWduZWQgbG9uZyBmYWlsZWQsCiAJCSB1bnNpZ25lZCBsb25nIHRocF9zdWNjZWVkZWQsIHVuc2lnbmVkIGxvbmcgdGhwX2ZhaWxlZCwKIAkJIHVuc2lnbmVkIGxvbmcgdGhwX3NwbGl0LCB1bnNpZ25lZCBsb25nIGxhcmdlX2ZvbGlvX3NwbGl0LAotCQkgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiksCiYjNDM7CQkgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pLAogCiAJVFBfQVJHUyhzdWNjZWVkZWQsIGZhaWxlZCwgdGhwX3N1Y2NlZWRlZCwgdGhwX2ZhaWxlZCwKIAkJdGhwX3NwbGl0LCBsYXJnZV9mb2xpb19zcGxpdCwgbW9kZSwgcmVhc29uKSwKQEAgLTY0LDcgJiM0Mzs2NSw3IEBAIFRSQUNFX0VWRU5UKG1tX21pZ3JhdGVfcGFnZXMsCiAJCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCQl0aHBfc3BsaXQpCiAJCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCQlsYXJnZV9mb2xpb19zcGxpdCkKIAkJX19maWVsZCgJZW51bSBtaWdyYXRlX21vZGUsCW1vZGUpCi0JCV9fZmllbGQoCWludCwJCQlyZWFzb24pCiYjNDM7CQlfX2ZpZWxkKAllbnVtIG1pZ3JhdGVfcmVhc29uLAlyZWFzb24pCiAJKSwKIAogCVRQX2Zhc3RfYXNzaWduKApAQCAtOTEsMTMgJiM0Mzs5MiwxMyBAQCBUUkFDRV9FVkVOVChtbV9taWdyYXRlX3BhZ2VzLAogCiBUUkFDRV9FVkVOVChtbV9taWdyYXRlX3BhZ2VzX3N0YXJ0LAogCi0JVFBfUFJPVE8oZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiksCiYjNDM7CVRQX1BST1RPKGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKSwKIAogCVRQX0FSR1MobW9kZSwgcmVhc29uKSwKIAogCVRQX1NUUlVDVF9fZW50cnkoCiAJCV9fZmllbGQoZW51bSBtaWdyYXRlX21vZGUsIG1vZGUpCi0JCV9fZmllbGQoaW50LCByZWFzb24pCiYjNDM7CQlfX2ZpZWxkKGVudW0gbWlncmF0ZV9yZWFzb24sIHJlYXNvbikKIAkpLAogCiAJVFBfZmFzdF9hc3NpZ24oCmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmMKaW5kZXggNTcxMjEyYjgwODM1ZWMuLjE3NzMyZDFmZGM1ZWZkIDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jCkBAIC03MTgyLDcgJiM0Mzs3MTgyLDggQEAgdm9pZCBmb2xpb19wdXRiYWNrX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbykKIAlmb2xpb19wdXQoZm9saW8pOwogfQogCi12b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGludCByZWFzb24pCiYjNDM7dm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLAomIzQzOwkJCWVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKQogewogCXN0cnVjdCBoc3RhdGUgKmggPSBmb2xpb19oc3RhdGUob2xkX2ZvbGlvKTsKIApkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jCmluZGV4IGQ5YjIzOTA5ZDcxNmM2Li40OWUxMGZlZWIwOTRmMCAxMDA2NDQKLS0tIGEvbW0vbWlncmF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21pZ3JhdGUuYwpAQCAtMTQ2OSw3ICYjNDM7MTQ2OSw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV9mb2xpb19tb3ZlKGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsCiBzdGF0aWMgaW50IHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZShuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLAogCQlmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLAogCQlzdHJ1Y3QgZm9saW8gKnNyYywgaW50IGZvcmNlLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLAotCQlpbnQgcmVhc29uLCBzdHJ1Y3QgbGlzdF9oZWFkICpyZXQpCiYjNDM7CQllbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiwgc3RydWN0IGxpc3RfaGVhZCAqcmV0KQogewogCXN0cnVjdCBmb2xpbyAqZHN0OwogCWludCByYyA9IC1FQUdBSU47CkBAIC0xNjI2LDcgJiM0MzsxNjI2LDcgQEAgc3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgewogICovCiBzdGF0aWMgaW50IG1pZ3JhdGVfaHVnZXRsYnMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbywKIAkJCSAgICBmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLAotCQkJICAgIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sCiYjNDM7CQkJICAgIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLAogCQkJICAgIHN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzICpzdGF0cywKIAkJCSAgICBzdHJ1Y3QgbGlzdF9oZWFkICpyZXRfZm9saW9zKQogewpAQCAtMTcxNiw3ICYjNDM7MTcxNiw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV9odWdldGxicyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLAogc3RhdGljIHZvaWQgbWlncmF0ZV9mb2xpb3NfbW92ZShzdHJ1Y3QgbGlzdF9oZWFkICpzcmNfZm9saW9zLAogCQlzdHJ1Y3QgbGlzdF9oZWFkICpkc3RfZm9saW9zLAogCQlmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLAotCQllbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLAomIzQzOwkJZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sCiAJCXN0cnVjdCBsaXN0X2hlYWQgKnJldF9mb2xpb3MsCiAJCXN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzICpzdGF0cywKIAkJaW50ICpyZXRyeSwgaW50ICp0aHBfcmV0cnksIGludCAqbnJfZmFpbGVkLApAQCAtMTc5OSw3ICYjNDM7MTc5OSw3IEBAIHN0YXRpYyB2b2lkIG1pZ3JhdGVfZm9saW9zX3VuZG8oc3RydWN0IGxpc3RfaGVhZCAqc3JjX2ZvbGlvcywKICAqLwogc3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sCiAJCW5ld19mb2xpb190IGdldF9uZXdfZm9saW8sIGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLAotCQl1bnNpZ25lZCBsb25nIHByaXZhdGUsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sCiYjNDM7CQl1bnNpZ25lZCBsb25nIHByaXZhdGUsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLAogCQlzdHJ1Y3QgbGlzdF9oZWFkICpyZXRfZm9saW9zLCBzdHJ1Y3QgbGlzdF9oZWFkICpzcGxpdF9mb2xpb3MsCiAJCXN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzICpzdGF0cywgaW50IG5yX3Bhc3MpCiB7CkBAIC0yMDExLDcgJiM0MzsyMDExLDcgQEAgc3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sCiAKIHN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlc19zeW5jKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sCiAJCWZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsCi0JCWVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sCiYjNDM7CQllbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiwKIAkJc3RydWN0IGxpc3RfaGVhZCAqcmV0X2ZvbGlvcywgc3RydWN0IGxpc3RfaGVhZCAqc3BsaXRfZm9saW9zLAogCQlzdHJ1Y3QgbWlncmF0ZV9wYWdlc19zdGF0cyAqc3RhdHMpCiB7CkBAIC0yMDg4LDcgJiM0MzsyMDg4LDcgQEAgc3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX3N5bmMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbywKICAqLwogaW50IG1pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbywKIAkJZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwKLQkJZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiwgdW5zaWduZWQgaW50ICpyZXRfc3VjY2VlZGVkKQomIzQzOwkJZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sIHVuc2lnbmVkIGludCAqcmV0X3N1Y2NlZWRlZCkKIHsKIAlpbnQgcmMsIHJjX2dhdGhlcjsKIAlpbnQgbnJfcGFnZXM7CmRpZmYgLS1naXQgYS9tbS9wYWdlX293bmVyLmMgYi9tbS9wYWdlX293bmVyLmMKaW5kZXggMmRkZGNiNjUxMGFhMWUuLjQ2YTkzM2Y5YzIyOWJkIDEwMDY0NAotLS0gYS9tbS9wYWdlX293bmVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9vd25lci5jCkBAIC0zMzksMTMgJiM0MzszMzksMTMgQEAgbm9pbmxpbmUgdm9pZCBfX3NldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBzaG9ydCBvcmRlciwKIAlkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGU7CiAKIAloYW5kbGUgPSBzYXZlX3N0YWNrKGdmcF9tYXNrKTsKLQlfX3VwZGF0ZV9wYWdlX293bmVyX2hhbmRsZShwYWdlLCBoYW5kbGUsIG9yZGVyLCBnZnBfbWFzaywgLTEsCiYjNDM7CV9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGhhbmRsZSwgb3JkZXIsIGdmcF9tYXNrLCBNUl9ORVZFUiwKIAkJCQkgICB0c19uc2VjLCBjdXJyZW50LSZndDtwaWQsIGN1cnJlbnQtJmd0O3RnaWQsCiAJCQkJICAgY3VycmVudC0mZ3Q7Y29tbSk7CiAJaW5jX3N0YWNrX3JlY29yZF9jb3VudChoYW5kbGUsIGdmcF9tYXNrLCAxICZsdDsmbHQ7IG9yZGVyKTsKIH0KIAotdm9pZCBfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcmVhc29uKQomIzQzO3ZvaWQgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pCiB7CiAJc3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dCA9IHBhZ2VfZXh0X2dldCgmYW1wO2ZvbGlvLSZndDtwYWdlKTsKIAlzdHJ1Y3QgcGFnZV9vd25lciAqcGFnZV9vd25lcjsKQEAgLTQyMiw2ICYjNDM7NDIyLDI5IEBAIHZvaWQgX19mb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKQogCXJjdV9yZWFkX3VubG9jaygpOwogfQogCiYjNDM7LyoKJiM0MzsgKiBDaGVjayBpZiBhIHBhZ2UgaXMgYSBidWRkeSBwYWdlIGFuZCBhZHZhbmNlIEBwZm4gcGFzdCB0aGUgZW50aXJlIGJ1ZGR5IGJsb2NrLgomIzQzOyAqIFRoaXMgc2FmZWx5IHJlYWRzIHRoZSBidWRkeSBvcmRlciB3aXRob3V0IHRoZSB6b25lIGxvY2ssIHdoaWNoIG1heSBjYXVzZSB1cwomIzQzOyAqIHRvIHNraXAgbGVzcyB0aGFuIHRoZSBmdWxsIGJ1ZGR5IGJsb2NrLCBidXQgdGhhdCBpcyBhY2NlcHRhYmxlIGZvciBwYWdlIG93bmVyCiYjNDM7ICogaXRlcmF0aW9uIHB1cnBvc2VzLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIHRoZSBwYWdlIHdhcyBza2lwcGVkIChjYWxsZXIgc2hvdWxkIGNvbnRpbnVlIGl0cyBsb29wKSwKJiM0MzsgKiAgICAgICAgIGZhbHNlIGlmIHRoZSBwYWdlIGlzIG5vdCBhIGJ1ZGR5IHBhZ2UgYW5kIHNob3VsZCBiZSBwcm9jZXNzZWQgbm9ybWFsbHkuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBib29sIHNraXBfYnVkZHlfcGFnZXModW5zaWduZWQgbG9uZyAqcGZuLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgb3JkZXI7CiYjNDM7CiYjNDM7CWlmICghUGFnZUJ1ZGR5KHBhZ2UpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlvcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTsKJiM0MzsJaWYgKG9yZGVyICZsdDs9IE1BWF9QQUdFX09SREVSKQomIzQzOwkJKnBmbiAmIzQzOz0gKDFVTCAmbHQ7Jmx0OyBvcmRlcikgLSAxOwomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiB2b2lkIHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sCiAJCQkJICAgICAgIHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCB6b25lICp6b25lKQogewpAQCAtNDYxLDE0ICYjNDM7NDg0LDggQEAgdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLAogCQkJaWYgKHBhZ2Vfem9uZShwYWdlKSAhPSB6b25lKQogCQkJCWNvbnRpbnVlOwogCi0JCQlpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7Ci0JCQkJdW5zaWduZWQgbG9uZyBmcmVlcGFnZV9vcmRlcjsKLQotCQkJCWZyZWVwYWdlX29yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpOwotCQkJCWlmIChmcmVlcGFnZV9vcmRlciAmbHQ7PSBNQVhfUEFHRV9PUkRFUikKLQkJCQkJcGZuICYjNDM7PSAoMVVMICZsdDsmbHQ7IGZyZWVwYWdlX29yZGVyKSAtIDE7CiYjNDM7CQkJaWYgKHNraXBfYnVkZHlfcGFnZXMoJmFtcDtwZm4sIHBhZ2UpKQogCQkJCWNvbnRpbnVlOwotCQkJfQogCiAJCQlpZiAoUGFnZVJlc2VydmVkKHBhZ2UpKQogCQkJCWNvbnRpbnVlOwpAQCAtNTA1LDEzICYjNDM7NTIyLDEzIEBAIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSwKIAlzZXFfcHV0YyhtLCAmIzM5O1xuJiMzOTspOwogfQogCiYjNDM7I2lmZGVmIENPTkZJR19NRU1DRwogLyoKICAqIExvb2tpbmcgZm9yIG1lbWNnIGluZm9ybWF0aW9uIGFuZCBwcmludCBpdCBvdXQKICAqLwogc3RhdGljIGlubGluZSBpbnQgcHJpbnRfcGFnZV9vd25lcl9tZW1jZyhjaGFyICprYnVmLCBzaXplX3QgY291bnQsIGludCByZXQsCiAJCQkJCSBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLSNpZmRlZiBDT05GSUdfTUVNQ0cKIAl1bnNpZ25lZCBsb25nIG1lbWNnX2RhdGE7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwogCWJvb2wgb25saW5lOwpAQCAtNTM5LDEwICYjNDM7NTU2LDE2IEBAIHN0YXRpYyBpbmxpbmUgaW50IHByaW50X3BhZ2Vfb3duZXJfbWVtY2coY2hhciAqa2J1Ziwgc2l6ZV90IGNvdW50LCBpbnQgcmV0LAogCQkJbmFtZSk7CiBvdXRfdW5sb2NrOgogCXJjdV9yZWFkX3VubG9jaygpOwotI2VuZGlmIC8qIENPTkZJR19NRU1DRyAqLwogCiAJcmV0dXJuIHJldDsKIH0KJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHByaW50X3BhZ2Vfb3duZXJfbWVtY2coY2hhciAqa2J1Ziwgc2l6ZV90IGNvdW50LCBpbnQgcmV0LAomIzQzOwkJCQkJIHN0cnVjdCBwYWdlICpwYWdlKQomIzQzO3sKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7I2VuZGlmCiAKIHN0YXRpYyBzc2l6ZV90CiBwcmludF9wYWdlX293bmVyKGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgbG9uZyBwZm4sCkBAIC01NzksNyAmIzQzOzYwMiw3IEBAIHByaW50X3BhZ2Vfb3duZXIoY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBsb25nIHBmbiwKIAlpZiAocmV0ICZndDs9IGNvdW50KQogCQlnb3RvIGVycjsKIAotCWlmIChwYWdlX293bmVyLSZndDtsYXN0X21pZ3JhdGVfcmVhc29uICE9IC0xKSB7CiYjNDM7CWlmIChwYWdlX293bmVyLSZndDtsYXN0X21pZ3JhdGVfcmVhc29uICE9IE1SX05FVkVSKSB7CiAJCXJldCAmIzQzOz0gc2NucHJpbnRmKGtidWYgJiM0MzsgcmV0LCBjb3VudCAtIHJldCwKIAkJCSYjMzQ7UGFnZSBoYXMgYmVlbiBtaWdyYXRlZCwgbGFzdCBtaWdyYXRlIHJlYXNvbjogJXNcbiYjMzQ7LAogCQkJbWlncmF0ZV9yZWFzb25fbmFtZXNbcGFnZV9vd25lci0mZ3Q7bGFzdF9taWdyYXRlX3JlYXNvbl0pOwpAQCAtNjMwLDEwICYjNDM7NjUzLDEwIEBAIHZvaWQgX19kdW1wX3BhZ2Vfb3duZXIoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpCiAJZWxzZQogCQlwcl9hbGVydCgmIzM0O3BhZ2Vfb3duZXIgdHJhY2tzIHRoZSBwYWdlIGFzIGZyZWVkXG4mIzM0Oyk7CiAKLQlwcl9hbGVydCgmIzM0O3BhZ2UgbGFzdCBhbGxvY2F0ZWQgdmlhIG9yZGVyICV1LCBtaWdyYXRldHlwZSAlcywgZ2ZwX21hc2sgJSN4KCVwR2cpLCBwaWQgJWQsIHRnaWQgJWQgKCVzKSwgdHMgJWxsdSwgZnJlZV90cyAlbGx1XG4mIzM0OywKJiM0MzsJcHJfYWxlcnQoJiMzNDtwYWdlIGxhc3QgYWxsb2NhdGVkIHZpYSBvcmRlciAldSwgbWlncmF0ZXR5cGUgJXMsIGdmcF9tYXNrICUjeCglcEdnKSwgcGlkICVkLCB0Z2lkICVkICglcyksIHRzICVsbHVcbiYjMzQ7LAogCQkgcGFnZV9vd25lci0mZ3Q7b3JkZXIsIG1pZ3JhdGV0eXBlX25hbWVzW210XSwgZ2ZwX21hc2ssICZhbXA7Z2ZwX21hc2ssCiAJCSBwYWdlX293bmVyLSZndDtwaWQsIHBhZ2Vfb3duZXItJmd0O3RnaWQsIHBhZ2Vfb3duZXItJmd0O2NvbW0sCi0JCSBwYWdlX293bmVyLSZndDt0c19uc2VjLCBwYWdlX293bmVyLSZndDtmcmVlX3RzX25zZWMpOwomIzQzOwkJIHBhZ2Vfb3duZXItJmd0O3RzX25zZWMpOwogCiAJaGFuZGxlID0gUkVBRF9PTkNFKHBhZ2Vfb3duZXItJmd0O2hhbmRsZSk7CiAJaWYgKCFoYW5kbGUpCkBAIC02NDUsMTIgJiM0Mzs2NjgsMTMgQEAgdm9pZCBfX2R1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIAlpZiAoIWhhbmRsZSkgewogCQlwcl9hbGVydCgmIzM0O3BhZ2Vfb3duZXIgZnJlZSBzdGFjayB0cmFjZSBtaXNzaW5nXG4mIzM0Oyk7CiAJfSBlbHNlIHsKLQkJcHJfYWxlcnQoJiMzNDtwYWdlIGxhc3QgZnJlZSBwaWQgJWQgdGdpZCAlZCBzdGFjayB0cmFjZTpcbiYjMzQ7LAotCQkJICBwYWdlX293bmVyLSZndDtmcmVlX3BpZCwgcGFnZV9vd25lci0mZ3Q7ZnJlZV90Z2lkKTsKJiM0MzsJCXByX2FsZXJ0KCYjMzQ7cGFnZSBsYXN0IGZyZWUgcGlkICVkIHRnaWQgJWQgdHMgJWxsdSBzdGFjayB0cmFjZTpcbiYjMzQ7LAomIzQzOwkJCSAgcGFnZV9vd25lci0mZ3Q7ZnJlZV9waWQsIHBhZ2Vfb3duZXItJmd0O2ZyZWVfdGdpZCwKJiM0MzsJCQkgIHBhZ2Vfb3duZXItJmd0O2ZyZWVfdHNfbnNlYyk7CiAJCXN0YWNrX2RlcG90X3ByaW50KGhhbmRsZSk7CiAJfQogCi0JaWYgKHBhZ2Vfb3duZXItJmd0O2xhc3RfbWlncmF0ZV9yZWFzb24gIT0gLTEpCiYjNDM7CWlmIChwYWdlX293bmVyLSZndDtsYXN0X21pZ3JhdGVfcmVhc29uICE9IE1SX05FVkVSKQogCQlwcl9hbGVydCgmIzM0O3BhZ2UgaGFzIGJlZW4gbWlncmF0ZWQsIGxhc3QgbWlncmF0ZSByZWFzb246ICVzXG4mIzM0OywKIAkJCW1pZ3JhdGVfcmVhc29uX25hbWVzW3BhZ2Vfb3duZXItJmd0O2xhc3RfbWlncmF0ZV9yZWFzb25dKTsKIAlwYWdlX2V4dF9wdXQocGFnZV9leHQpOwpAQCAtNjk3LDEzICYjNDM7NzIxLDggQEAgcmVhZF9wYWdlX293bmVyKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIAkJfQogCiAJCXBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwotCQlpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7Ci0JCQl1bnNpZ25lZCBsb25nIGZyZWVwYWdlX29yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpOwotCi0JCQlpZiAoZnJlZXBhZ2Vfb3JkZXIgJmx0Oz0gTUFYX1BBR0VfT1JERVIpCi0JCQkJcGZuICYjNDM7PSAoMVVMICZsdDsmbHQ7IGZyZWVwYWdlX29yZGVyKSAtIDE7CiYjNDM7CQlpZiAoc2tpcF9idWRkeV9wYWdlcygmYW1wO3BmbiwgcGFnZSkpCiAJCQljb250aW51ZTsKLQkJfQogCiAJCXBhZ2VfZXh0ID0gcGFnZV9leHRfZ2V0KHBhZ2UpOwogCQlpZiAodW5saWtlbHkoIXBhZ2VfZXh0KSkKQEAgLTc5OCwyMCAmIzQzOzgxNyw4IEBAIHN0YXRpYyB2b2lkIGluaXRfcGFnZXNfaW5fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSkKIAkJCWlmIChwYWdlX3pvbmUocGFnZSkgIT0gem9uZSkKIAkJCQljb250aW51ZTsKIAotCQkJLyoKLQkJCSAqIFRvIGF2b2lkIGhhdmluZyB0byBncmFiIHpvbmUtJmd0O2xvY2ssIGJlIGEgbGl0dGxlCi0JCQkgKiBjYXJlZnVsIHdoZW4gcmVhZGluZyBidWRkeSBwYWdlIG9yZGVyLiBUaGUgb25seQotCQkJICogZGFuZ2VyIGlzIHRoYXQgd2Ugc2tpcCB0b28gbXVjaCBhbmQgcG90ZW50aWFsbHkgbWlzcwotCQkJICogc29tZSBlYXJseSBhbGxvY2F0ZWQgcGFnZXMsIHdoaWNoIGlzIGJldHRlciB0aGFuCi0JCQkgKiBoZWF2eSBsb2NrIGNvbnRlbnRpb24uCi0JCQkgKi8KLQkJCWlmIChQYWdlQnVkZHkocGFnZSkpIHsKLQkJCQl1bnNpZ25lZCBsb25nIG9yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpOwotCi0JCQkJaWYgKG9yZGVyICZndDsgMCAmYW1wOyZhbXA7IG9yZGVyICZsdDs9IE1BWF9QQUdFX09SREVSKQotCQkJCQlwZm4gJiM0Mzs9ICgxVUwgJmx0OyZsdDsgb3JkZXIpIC0gMTsKJiM0MzsJCQlpZiAoc2tpcF9idWRkeV9wYWdlcygmYW1wO3BmbiwgcGFnZSkpCiAJCQkJY29udGludWU7Ci0JCQl9CiAKIAkJCWlmIChQYWdlUmVzZXJ2ZWQocGFnZSkpCiAJCQkJY29udGludWU7CkBAIC04MjYsNyAmIzQzOzgzMyw3IEBAIHN0YXRpYyB2b2lkIGluaXRfcGFnZXNfaW5fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSkKIAogCQkJLyogRm91bmQgZWFybHkgYWxsb2NhdGVkIHBhZ2UgKi8KIAkJCV9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGVhcmx5X2hhbmRsZSwgMCwgMCwKLQkJCQkJCSAgIC0xLCBsb2NhbF9jbG9jaygpLCBjdXJyZW50LSZndDtwaWQsCiYjNDM7CQkJCQkJICAgTVJfTkVWRVIsIGxvY2FsX2Nsb2NrKCksIGN1cnJlbnQtJmd0O3BpZCwKIAkJCQkJCSAgIGN1cnJlbnQtJmd0O3RnaWQsIGN1cnJlbnQtJmd0O2NvbW0pOwogCQkJY291bnQmIzQzOyYjNDM7OwogZXh0X3B1dF9jb250aW51ZToKQEAgLTg4Nyw3ICYjNDM7ODk0LDcgQEAgc3RhdGljIHZvaWQgKnN0YWNrX25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBwb3MpCiAJcmV0dXJuIHN0YWNrOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZDsKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlc190aHJlc2hvbGQ7CiAKIHN0YXRpYyBpbnQgc3RhY2tfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewpAQCAtOTA0LDcgJiM0Mzs5MTEsNyBAQCBzdGF0aWMgaW50IHN0YWNrX3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIAlucl9iYXNlX3BhZ2VzID0gcmVmY291bnRfcmVhZCgmYW1wO3N0YWNrX3JlY29yZC0mZ3Q7Y291bnQpIC0gMTsKIAogCWlmIChjdHgtJmd0O2ZsYWdzICZhbXA7IFNUQUNLX1BSSU5UX0ZMQUdfUEFHRVMgJmFtcDsmYW1wOwotCSAgICAobnJfYmFzZV9wYWdlcyAmbHQ7IDEgfHwgbnJfYmFzZV9wYWdlcyAmbHQ7IHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkKSkKJiM0MzsJICAgIChucl9iYXNlX3BhZ2VzICZsdDsgMSB8fCBucl9iYXNlX3BhZ2VzICZsdDsgcGFnZXNfdGhyZXNob2xkKSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoY3R4LSZndDtmbGFncyAmYW1wOyBTVEFDS19QUklOVF9GTEFHX1NUQUNLKSB7CkBAIC05MjYsMTYgJiM0Mzs5MzMsMTYgQEAgc3RhdGljIHZvaWQgc3RhY2tfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgcGFnZV9vd25lcl9zdGFja19vcCA9IHsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHN0YWNrX29wID0gewogCS5zdGFydAk9IHN0YWNrX3N0YXJ0LAogCS5uZXh0CT0gc3RhY2tfbmV4dCwKIAkuc3RvcAk9IHN0YWNrX3N0b3AsCiAJLnNob3cJPSBzdGFja19wcmludAogfTsKIAotc3RhdGljIGludCBwYWdlX293bmVyX3N0YWNrX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiYjNDM7c3RhdGljIGludCBzdGFja19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCWludCByZXQgPSBzZXFfb3Blbl9wcml2YXRlKGZpbGUsICZhbXA7cGFnZV9vd25lcl9zdGFja19vcCwKJiM0MzsJaW50IHJldCA9IHNlcV9vcGVuX3ByaXZhdGUoZmlsZSwgJmFtcDtzdGFja19vcCwKIAkJCQkgICBzaXplb2Yoc3RydWN0IHN0YWNrX3ByaW50X2N0eCkpOwogCiAJaWYgKCFyZXQpIHsKQEAgLTk0OCwyOCAmIzQzOzk1NSwyNiBAQCBzdGF0aWMgaW50IHBhZ2Vfb3duZXJfc3RhY2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwYWdlX293bmVyX3N0YWNrX2ZvcHMgPSB7Ci0JLm9wZW4JCT0gcGFnZV9vd25lcl9zdGFja19vcGVuLAomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN0YWNrX2ZvcHMgPSB7CiYjNDM7CS5vcGVuCQk9IHN0YWNrX29wZW4sCiAJLnJlYWQJCT0gc2VxX3JlYWQsCiAJLmxsc2VlawkJPSBzZXFfbHNlZWssCiAJLnJlbGVhc2UJPSBzZXFfcmVsZWFzZV9wcml2YXRlLAogfTsKIAotc3RhdGljIGludCBwYWdlX293bmVyX3RocmVzaG9sZF9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpCiYjNDM7c3RhdGljIGludCB0aHJlc2hvbGRfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKQogewotCSp2YWwgPSBSRUFEX09OQ0UocGFnZV9vd25lcl9wYWdlc190aHJlc2hvbGQpOwomIzQzOwkqdmFsID0gUkVBRF9PTkNFKHBhZ2VzX3RocmVzaG9sZCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcGFnZV9vd25lcl90aHJlc2hvbGRfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpCiYjNDM7c3RhdGljIGludCB0aHJlc2hvbGRfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpCiB7Ci0JV1JJVEVfT05DRShwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZCwgdmFsKTsKJiM0MzsJV1JJVEVfT05DRShwYWdlc190aHJlc2hvbGQsIHZhbCk7CiAJcmV0dXJuIDA7CiB9CiAKLURFRklORV9TSU1QTEVfQVRUUklCVVRFKHBhZ2Vfb3duZXJfdGhyZXNob2xkX2ZvcHMsICZhbXA7cGFnZV9vd25lcl90aHJlc2hvbGRfZ2V0LAotCQkJJmFtcDtwYWdlX293bmVyX3RocmVzaG9sZF9zZXQsICYjMzQ7JWxsdSYjMzQ7KTsKLQomIzQzO0RFRklORV9TSU1QTEVfQVRUUklCVVRFKHRocmVzaG9sZF9mb3BzLCAmYW1wO3RocmVzaG9sZF9nZXQsICZhbXA7dGhyZXNob2xkX3NldCwgJiMzNDslbGx1XG4mIzM0Oyk7CiAKIHN0YXRpYyBpbnQgX19pbml0IHBhZ2Vvd25lcl9pbml0KHZvaWQpCiB7CkBAIC05ODUsMTcgJiM0Mzs5OTAsMTcgQEAgc3RhdGljIGludCBfX2luaXQgcGFnZW93bmVyX2luaXQodm9pZCkKIAlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCYjMzQ7c2hvd19zdGFja3MmIzM0OywgMDQwMCwgZGlyLAogCQkJICAgICh2b2lkICopKFNUQUNLX1BSSU5UX0ZMQUdfU1RBQ0sgfAogCQkJCSAgICAgU1RBQ0tfUFJJTlRfRkxBR19QQUdFUyksCi0JCQkgICAgICZhbXA7cGFnZV9vd25lcl9zdGFja19mb3BzKTsKJiM0MzsJCQkgICAgICZhbXA7c3RhY2tfZm9wcyk7CiAJZGVidWdmc19jcmVhdGVfZmlsZSgmIzM0O3Nob3dfaGFuZGxlcyYjMzQ7LCAwNDAwLCBkaXIsCiAJCQkgICAgKHZvaWQgKikoU1RBQ0tfUFJJTlRfRkxBR19IQU5ETEUgfAogCQkJCSAgICAgU1RBQ0tfUFJJTlRfRkxBR19QQUdFUyksCi0JCQkgICAgJmFtcDtwYWdlX293bmVyX3N0YWNrX2ZvcHMpOwomIzQzOwkJCSAgICAmYW1wO3N0YWNrX2ZvcHMpOwogCWRlYnVnZnNfY3JlYXRlX2ZpbGUoJiMzNDtzaG93X3N0YWNrc19oYW5kbGVzJiMzNDssIDA0MDAsIGRpciwKIAkJCSAgICAodm9pZCAqKShTVEFDS19QUklOVF9GTEFHX1NUQUNLIHwKIAkJCQkgICAgIFNUQUNLX1BSSU5UX0ZMQUdfSEFORExFKSwKLQkJCSAgICAmYW1wO3BhZ2Vfb3duZXJfc3RhY2tfZm9wcyk7CiYjNDM7CQkJICAgICZhbXA7c3RhY2tfZm9wcyk7CiAJZGVidWdmc19jcmVhdGVfZmlsZSgmIzM0O2NvdW50X3RocmVzaG9sZCYjMzQ7LCAwNjAwLCBkaXIsIE5VTEwsCi0JCQkgICAgJmFtcDtwYWdlX293bmVyX3RocmVzaG9sZF9mb3BzKTsKJiM0MzsJCQkgICAgJmFtcDt0aHJlc2hvbGRfZm9wcyk7CiAJcmV0dXJuIDA7CiB9CiBsYXRlX2luaXRjYWxsKHBhZ2Vvd25lcl9pbml0KQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMjowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODEzCgkJCQkJCQlvdXRwdXQ6IDg2CgkJCQkJCQl0aG91Z2h0czogMTQzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpczogUGFnZSBNaWdyYXRpb24gYW5kIE93bmVyIFJlZmFjdG9yaW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIHBhdGNoIGRvd24uIFRoZSBwcmltYXJ5IGZvY3VzIHNlZW1zIHRvIGJlIGEgY2xlYW51cCBhbmQgcmVmYWN0b3JpbmcgZWZmb3J0IGFyb3VuZCBwYWdlIG1pZ3JhdGlvbiBhbmQgdGhlIHBhZ2Ugb3duZXIgZnVuY3Rpb25hbGl0eS4gVGhlIGZpcnN0IHRoaW5nIEkgbm90aWNlIGlzIGEgcGVydmFzaXZlIHR5cGUgY2hhbmdlOiBgaW50IHJlYXNvbmAgaXMgYmVpbmcgc3dhcHBlZCBmb3IgYGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uYCBhY3Jvc3Mgc2V2ZXJhbCBmdW5jdGlvbnMgcmVsYXRlZCB0byBwYWdlIG1pZ3JhdGlvbiBhbmQgdGhlIHBhZ2Ugb3duZXIuIFRoZXkmIzM5O3ZlIGFsc28gaW50cm9kdWNlZCBgTVJfTkVWRVJgIHRvIHRoZSBgZW51bSBtaWdyYXRlX3JlYXNvbmAgZW51bSBhbmQgYXJlIHVzaW5nIGl0IGluIGBwYWdlX293bmVyLmNgIHdoZXJlIGAtMWAgd2FzIHByZXZpb3VzbHkgdXNlZC4KCkxvb2tpbmcgaW50byB0aGUgYG1tL3BhZ2Vfb3duZXIuY2AgY2hhbmdlcyBtb3JlIGNsb3NlbHksIHRoZXJlJiMzOTtzIGEgaGVscGVyIGZ1bmN0aW9uLCBgc2tpcF9idWRkeV9wYWdlc2AsIGludHJvZHVjZWQuIFRoaXMgc2VlbXMgdG8gY29uc29saWRhdGUgc29tZSBidWRkeSBwYWdlIHNraXBwaW5nIGxvZ2ljLiBFeGFtaW5pbmcgdGhlIGNvZGUsIHRoZSBjaGFuZ2UgaW4gYHNraXBfYnVkZHlfcGFnZXNgIHJlcGxhY2VzIGlubGluZSBjb2RlIHRoYXQgd2FzIHByZXZpb3VzbHkgaW5saW5lZDsgdGhlcmUmIzM5O3MgYSBtaW5vciBsb2dpY2FsIGNoYW5nZSBpbiBgaW5pdF9wYWdlc19pbl96b25lYCwgd2hlcmUgYGlmIChvcmRlciAmZ3Q7IDAgJmFtcDsmYW1wOyBvcmRlciAmbHQ7PSBNQVhfUEFHRV9PUkRFUilgIGJlY29tZXMgYGlmIChvcmRlciAmbHQ7PSBNQVhfUEFHRV9PUkRFUilgLiBUaGlzIG1lYW5zIGl0IHdpbGwgcGVyZm9ybSBhIG5vLW9wIHdoZW4gYG9yZGVyID09IDBgIChhZGRpbmcgMCB0byB0aGUgcGFnZSBmcmFtZSBudW1iZXIpLCBhbmQgSSBkb24mIzM5O3Qgc2VlIGFueSBmdW5jdGlvbmFsIGRpZmZlcmVuY2UgaW4gdGhhdC4KCldlJiMzOTt2ZSBnb3Qgc29tZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBmb3IgbWVtY2cgc3VwcG9ydCwgYW5kIHRoZXJlJiMzOTtzIGEgdHdlYWsgdG8gdGhlIG91dHB1dCBvZiBgX19kdW1wX3BhZ2Vfb3duZXJgLCBzcGVjaWZpY2FsbHkgdGhlIGBwcl9hbGVydGAgY2FsbHMuIFRoZSBgZnJlZV90c19uc2VjYCBmaWVsZCBpcyBtb3ZlZCBiZXR3ZWVuIHRoZSBwcmludCBzdGF0ZW1lbnRzLCBhbmQgSSBzZWUgYSBjaGFuZ2UgYWRkaW5nIGEgbmV3bGluZSBjaGFyYWN0ZXIgdG8gb25lIG9mIHRoZSBmb3JtYXQgc3RyaW5ncy4gTWlub3IgY2hhbmdlcywgYnV0IG5vdGhpbmcgdGhhdCB3b3VsZCBsaWtlbHkgYmUgZnVuY3Rpb25hbGx5IGltcGFjdGZ1bC4KClRoZXJlJiMzOTtzIGFsc28gc29tZSByZW5hbWluZyBnb2luZyBvbjogdmFyaWFibGVzIGFuZCBkZWJ1Z2ZzIGZpbGUgbmFtZXMgYXJlIGJlaW5nIG1hZGUgbW9yZSBjb25zaXN0ZW50LiBgcGFnZV9vd25lcl9wYWdlc190aHJlc2hvbGRgIGJlY29tZXMgYHBhZ2VzX3RocmVzaG9sZGAsIGBwYWdlX293bmVyX3N0YWNrX29wYCBiZWNvbWVzIGBzdGFja19vcGAsIGV0Yy4gSXQmIzM5O3MgYWxsIHJlZmFjdG9yaW5nLCBtb3N0bHkgdG8gaW1wcm92ZSByZWFkYWJpbGl0eS4KCkxldCYjMzk7cyBzZWU6IGBNUl9ORVZFUmAgaXMgYmVpbmcgdXNlZCBpbiBgX191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGVgLiBUaGUgY29tcGFyaXNvbiBgcGFnZV9vd25lci0mZ3Q7bGFzdF9taWdyYXRlX3JlYXNvbiAhPSBNUl9ORVZFUmAgcmVwbGFjZXMgYCE9IC0xYC4KCkFscmlnaHQsIEkmIzM5O20gbm90IHNlZWluZyBhbnkgaW50cm9kdWN0aW9uIG9mIG5ldyAqZnVuY3Rpb25hbCogbG9naWMgdGhhdCB3b3VsZCBiZSB3b3J0aCBmdXp6aW5nLiBUaGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IHR5cGUgY29udmVyc2lvbnMsIG1pbm9yIGxvZ2ljIGFkanVzdG1lbnRzIChsaWtlIHRoZSBuby1vcCBpbiBgc2tpcF9idWRkeV9wYWdlc2ApLCByZWZhY3RvcmluZywgYW5kIGNvc21ldGljIGNoYW5nZXMgdG8gcHJpbnQgb3V0cHV0IGFuZCB2YXJpYWJsZSBuYW1lcy4gSXQmIzM5O3MgZXNzZW50aWFsbHkgYSBjbGVhbnVwIHBhdGNoIHRoYXQgZW5oYW5jZXMgbWFpbnRhaW5hYmlsaXR5IGFuZCByZWFkYWJpbGl0eSwgYnV0IGRvZXNuJiMzOTt0IGNoYW5nZSB3aGF0IHRoZSBjb2RlIGFjdHVhbGx5ICpkb2VzKi4gSSBkb24mIzM5O3QgdGhpbmsgYW55IG9mIHRoaXMgcmVxdWlyZXMgZnV6emluZywgaXQgY2FuIGJlIHNhZmVseSBtYXJrZWQgYXMgV29ydGhGdXp6aW5nPWZhbHNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAyOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29uc2lzdHMgZW50aXJlbHkgb2YgcmVmYWN0b3JpbmcgKGNoYW5naW5nIGludCB0byBlbnVtIG1pZ3JhdGVfcmVhc29uKSwgaW50cm9kdWNpbmcgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIHNraXBwaW5nIGJ1ZGR5IHBhZ2VzICh3aXRoIG5vIGZ1bmN0aW9uYWwgY2hhbmdlKSwgcmVuYW1pbmcgdmFyaWFibGVzL2Z1bmN0aW9ucywgYW5kIG1vZGlmeWluZyBwcmludGsvdHJhY2Vwb2ludCBvdXRwdXRzLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBsb2dpYyBjaGFuZ2VzIHRoYXQgd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29uc2lzdHMgZW50aXJlbHkgb2YgcmVmYWN0b3JpbmcgKGNoYW5naW5nIGludCB0byBlbnVtIG1pZ3JhdGVfcmVhc29uKSwgaW50cm9kdWNpbmcgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIHNraXBwaW5nIGJ1ZGR5IHBhZ2VzICh3aXRoIG5vIGZ1bmN0aW9uYWwgY2hhbmdlKSwgcmVuYW1pbmcgdmFyaWFibGVzL2Z1bmN0aW9ucywgYW5kIG1vZGlmeWluZyBwcmludGsvdHJhY2Vwb2ludCBvdXRwdXRzLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBsb2dpYyBjaGFuZ2VzIHRoYXQgd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAyOjA3OjQ2LjQwMTY0NDUzOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTExNTAyNzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb25zaXN0cyBlbnRpcmVseSBvZiByZWZhY3RvcmluZyAoY2hhbmdpbmcgaW50IHRvIGVudW0gbWlncmF0ZV9yZWFzb24pLCBpbnRyb2R1Y2luZyBhIGhlbHBlciBmdW5jdGlvbiBmb3Igc2tpcHBpbmcgYnVkZHkgcGFnZXMgKHdpdGggbm8gZnVuY3Rpb25hbCBjaGFuZ2UpLCByZW5hbWluZyB2YXJpYWJsZXMvZnVuY3Rpb25zLCBhbmQgbW9kaWZ5aW5nIHByaW50ay90cmFjZXBvaW50IG91dHB1dHMuIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGxvZ2ljIGNoYW5nZXMgdGhhdCB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwMjowNzo0Ni40MDE2NDk4ODhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MTYzMzcxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDIzYzI4OGEyMzE1MzIxZmFmNDU0NTAxOWZlMTA3ZmFjZGMzZTUzMmNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdW4gMzAgMDI6MDc6NDUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxcbmluZGV4IDJhYmFmOTkzMjFlOTBkLi5mYTgyODIzMmRmY2MxOCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXFxuQEAgLTE1NCw3ICsxNTQsOCBAQCBsb25nIGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgc3RhcnQsIGxvbmcgZW5kLFxcbiBib29sIGZvbGlvX2lzb2xhdGVfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KTtcXG4gaW50IGdldF9od3BvaXNvbl9odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgKmh1Z2V0bGIsIGJvb2wgdW5wb2lzb24pO1xcbiB2b2lkIGZvbGlvX3B1dGJhY2tfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4tdm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBpbnQgcmVhc29uKTtcXG4rdm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLFxcbitcXHRcXHRcXHRlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbik7XFxuIHZvaWQgaHVnZXRsYl9maXhfcmVzZXJ2ZV9jb3VudHMoc3RydWN0IGlub2RlICppbm9kZSk7XFxuIGV4dGVybiBzdHJ1Y3QgbXV0ZXggKmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGU7XFxuIHUzMiBodWdldGxiX2ZhdWx0X211dGV4X2hhc2goc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgaWR4KTtcXG5AQCAtNDI0LDcgKzQyNSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19wdXRiYWNrX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbyxcXG4tXFx0XFx0XFx0XFx0XFx0c3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGludCByZWFzb24pXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbilcXG4ge1xcbiB9XFxuIFxcbkBAIC05NTYsNyArOTU3LDcgQEAgc3RhdGljIGlubGluZSBnZnBfdCBodGxiX21vZGlmeV9hbGxvY19tYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGdmcF90IGdmcF9tYXNrKVxcbiBcXHRyZXR1cm4gbW9kaWZpZWRfbWFzaztcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBib29sIGh0bGJfYWxsb3dfYWxsb2NfZmFsbGJhY2soaW50IHJlYXNvbilcXG4rc3RhdGljIGlubGluZSBib29sIGh0bGJfYWxsb3dfYWxsb2NfZmFsbGJhY2soZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pXFxuIHtcXG4gXFx0Ym9vbCBhbGxvd2VkX2ZhbGxiYWNrID0gZmFsc2U7XFxuIFxcbkBAIC0xMjM4LDcgKzEyMzksNyBAQCBzdGF0aWMgaW5saW5lIGdmcF90IGh0bGJfbW9kaWZ5X2FsbG9jX21hc2soc3RydWN0IGhzdGF0ZSAqaCwgZ2ZwX3QgZ2ZwX21hc2spXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGJvb2wgaHRsYl9hbGxvd19hbGxvY19mYWxsYmFjayhpbnQgcmVhc29uKVxcbitzdGF0aWMgaW5saW5lIGJvb2wgaHRsYl9hbGxvd19hbGxvY19mYWxsYmFjayhlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbilcXG4ge1xcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9taWdyYXRlLmggYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaFxcbmluZGV4IGQ1YWYyYjdmNTc3YjMzLi4xZjgzOTI0NjE1ZDZkMyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbWlncmF0ZS5oXFxuQEAgLTU3LDcgKzU3LDggQEAgdm9pZCBwdXRiYWNrX21vdmFibGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbCk7XFxuIGludCBtaWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmRzdCxcXG4gXFx0XFx0c3RydWN0IGZvbGlvICpzcmMsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUpO1xcbiBpbnQgbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsLCBuZXdfZm9saW9fdCBuZXcsIGZyZWVfZm9saW9fdCBmcmVlLFxcbi1cXHRcXHQgIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbixcXG4rXFx0XFx0ICB1bnNpZ25lZCBsb25nIHByaXZhdGUsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsXFxuK1xcdFxcdCAgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sXFxuIFxcdFxcdCAgdW5zaWduZWQgaW50ICpyZXRfc3VjY2VlZGVkKTtcXG4gc3RydWN0IGZvbGlvICphbGxvY19taWdyYXRpb25fdGFyZ2V0KHN0cnVjdCBmb2xpbyAqc3JjLCB1bnNpZ25lZCBsb25nIHByaXZhdGUpO1xcbiBib29sIGlzb2xhdGVfbW92YWJsZV9vcHNfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaXNvbGF0ZV9tb2RlX3QgbW9kZSk7XFxuQEAgLTc3LDcgKzc4LDggQEAgaW50IHNldF9tb3ZhYmxlX29wcyhjb25zdCBzdHJ1Y3QgbW92YWJsZV9vcGVyYXRpb25zICpvcHMsIGVudW0gcGFnZXR5cGUgdHlwZSk7XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRiYWNrX21vdmFibGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbCkge31cXG4gc3RhdGljIGlubGluZSBpbnQgbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpsLCBuZXdfZm9saW9fdCBuZXcsXFxuIFxcdFxcdGZyZWVfZm9saW9fdCBmcmVlLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXFxuLVxcdFxcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sIHVuc2lnbmVkIGludCAqcmV0X3N1Y2NlZWRlZClcXG4rXFx0XFx0ZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sXFxuK1xcdFxcdHVuc2lnbmVkIGludCAqcmV0X3N1Y2NlZWRlZClcXG4gXFx0eyByZXR1cm4gLUVOT1NZUzsgfVxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqYWxsb2NfbWlncmF0aW9uX3RhcmdldChzdHJ1Y3QgZm9saW8gKnNyYyxcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyBwcml2YXRlKVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21pZ3JhdGVfbW9kZS5oIGIvaW5jbHVkZS9saW51eC9taWdyYXRlX21vZGUuaFxcbmluZGV4IDI2NWM0MzI4YjM2YWQ1Li4wNTEwMmQ0ZDI0OTBlNiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21pZ3JhdGVfbW9kZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9taWdyYXRlX21vZGUuaFxcbkBAIC0yNSw2ICsyNSw3IEBAIGVudW0gbWlncmF0ZV9yZWFzb24ge1xcbiBcXHRNUl9MT05HVEVSTV9QSU4sXFxuIFxcdE1SX0RFTU9USU9OLFxcbiBcXHRNUl9EQU1PTixcXG4rXFx0TVJfTkVWRVIsXFx0XFx0LyogcGFnZSBoYXMgbmV2ZXIgYmVlbiBtaWdyYXRlZCAqL1xcbiBcXHRNUl9UWVBFU1xcbiB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaFxcbmluZGV4IDMzMjgzNTdmNmRiYTcyLi45ZmU1MWRmY2NmMjY4NSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZV9vd25lci5oXFxuQEAgLTMsNiArMyw3IEBAXFxuICNkZWZpbmUgX19MSU5VWF9QQUdFX09XTkVSX0hcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9qdW1wX2xhYmVsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9taWdyYXRlX21vZGUuaFxcdTAwM2VcXG4gXFxuICNpZmRlZiBDT05GSUdfUEFHRV9PV05FUlxcbiBleHRlcm4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcGFnZV9vd25lcl9pbml0ZWQ7XFxuQEAgLTE0LDcgKzE1LDcgQEAgZXh0ZXJuIHZvaWQgX19zZXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4gZXh0ZXJuIHZvaWQgX19zcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLFxcbiBcXHRcXHRcXHRpbnQgbmV3X29yZGVyKTtcXG4gZXh0ZXJuIHZvaWQgX19mb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKTtcXG4tZXh0ZXJuIHZvaWQgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJlYXNvbik7XFxuK2V4dGVybiB2b2lkIF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKTtcXG4gZXh0ZXJuIHZvaWQgX19kdW1wX3BhZ2Vfb3duZXIoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpO1xcbiBleHRlcm4gdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLFxcbiBcXHRcXHRcXHRcXHRcXHRwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgem9uZSAqem9uZSk7XFxuQEAgLTQzLDcgKzQ0LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpXFxuIFxcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZwYWdlX293bmVyX2luaXRlZCkpXFxuIFxcdFxcdF9fZm9saW9fY29weV9vd25lcihuZXdmb2xpbywgb2xkKTtcXG4gfVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCByZWFzb24pXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pXFxuIHtcXG4gXFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNnBhZ2Vfb3duZXJfaW5pdGVkKSlcXG4gXFx0XFx0X19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oZm9saW8sIHJlYXNvbik7XFxuQEAgLTY4LDcgKzY5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNwbGl0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvbGRfb3JkZXIsXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gfVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCByZWFzb24pXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pXFxuIHtcXG4gfVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgZHVtcF9wYWdlX293bmVyKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmhcXG5pbmRleCBjZDAxZGQ3YjM2NDBkYy4uMTVlZTJlZjIwMWI1ZjkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oXFxuKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oXFxuQEAgLTIzLDcgKzIzLDggQEBcXG4gXFx0RU0oIE1SX0NPTlRJR19SQU5HRSxcXHRcXFwiY29udGlnX3JhbmdlXFxcIilcXHRcXHRcXHRcXFxcXFxuIFxcdEVNKCBNUl9MT05HVEVSTV9QSU4sXFx0XFxcImxvbmd0ZXJtX3BpblxcXCIpXFx0XFx0XFx0XFxcXFxcbiBcXHRFTSggTVJfREVNT1RJT04sXFx0XFxcImRlbW90aW9uXFxcIilcXHRcXHRcXHRcXFxcXFxuLVxcdEVNZShNUl9EQU1PTixcXHRcXHRcXFwiZGFtb25cXFwiKVxcbitcXHRFTSggTVJfREFNT04sXFx0XFx0XFxcImRhbW9uXFxcIilcXHRcXHRcXHRcXFxcXFxuK1xcdEVNZShNUl9ORVZFUixcXHRcXHRcXFwibmV2ZXJfbWlncmF0ZWRcXFwiKVxcbiBcXG4gLypcXG4gICogRmlyc3QgZGVmaW5lIHRoZSBlbnVtcyBpbiB0aGUgYWJvdmUgbWFjcm9zIHRvIGJlIGV4cG9ydGVkIHRvIHVzZXJzcGFjZVxcbkBAIC01MSw3ICs1Miw3IEBAIFRSQUNFX0VWRU5UKG1tX21pZ3JhdGVfcGFnZXMsXFxuIFxcdFRQX1BST1RPKHVuc2lnbmVkIGxvbmcgc3VjY2VlZGVkLCB1bnNpZ25lZCBsb25nIGZhaWxlZCxcXG4gXFx0XFx0IHVuc2lnbmVkIGxvbmcgdGhwX3N1Y2NlZWRlZCwgdW5zaWduZWQgbG9uZyB0aHBfZmFpbGVkLFxcbiBcXHRcXHQgdW5zaWduZWQgbG9uZyB0aHBfc3BsaXQsIHVuc2lnbmVkIGxvbmcgbGFyZ2VfZm9saW9fc3BsaXQsXFxuLVxcdFxcdCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uKSxcXG4rXFx0XFx0IGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKSxcXG4gXFxuIFxcdFRQX0FSR1Moc3VjY2VlZGVkLCBmYWlsZWQsIHRocF9zdWNjZWVkZWQsIHRocF9mYWlsZWQsXFxuIFxcdFxcdHRocF9zcGxpdCwgbGFyZ2VfZm9saW9fc3BsaXQsIG1vZGUsIHJlYXNvbiksXFxuQEAgLTY0LDcgKzY1LDcgQEAgVFJBQ0VfRVZFTlQobW1fbWlncmF0ZV9wYWdlcyxcXG4gXFx0XFx0X19maWVsZChcXHR1bnNpZ25lZCBsb25nLFxcdFxcdHRocF9zcGxpdClcXG4gXFx0XFx0X19maWVsZChcXHR1bnNpZ25lZCBsb25nLFxcdFxcdGxhcmdlX2ZvbGlvX3NwbGl0KVxcbiBcXHRcXHRfX2ZpZWxkKFxcdGVudW0gbWlncmF0ZV9tb2RlLFxcdG1vZGUpXFxuLVxcdFxcdF9fZmllbGQoXFx0aW50LFxcdFxcdFxcdHJlYXNvbilcXG4rXFx0XFx0X19maWVsZChcXHRlbnVtIG1pZ3JhdGVfcmVhc29uLFxcdHJlYXNvbilcXG4gXFx0KSxcXG4gXFxuIFxcdFRQX2Zhc3RfYXNzaWduKFxcbkBAIC05MSwxMyArOTIsMTMgQEAgVFJBQ0VfRVZFTlQobW1fbWlncmF0ZV9wYWdlcyxcXG4gXFxuIFRSQUNFX0VWRU5UKG1tX21pZ3JhdGVfcGFnZXNfc3RhcnQsXFxuIFxcbi1cXHRUUF9QUk9UTyhlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uKSxcXG4rXFx0VFBfUFJPVE8oZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pLFxcbiBcXG4gXFx0VFBfQVJHUyhtb2RlLCByZWFzb24pLFxcbiBcXG4gXFx0VFBfU1RSVUNUX19lbnRyeShcXG4gXFx0XFx0X19maWVsZChlbnVtIG1pZ3JhdGVfbW9kZSwgbW9kZSlcXG4tXFx0XFx0X19maWVsZChpbnQsIHJlYXNvbilcXG4rXFx0XFx0X19maWVsZChlbnVtIG1pZ3JhdGVfcmVhc29uLCByZWFzb24pXFxuIFxcdCksXFxuIFxcbiBcXHRUUF9mYXN0X2Fzc2lnbihcXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jXFxuaW5kZXggNTcxMjEyYjgwODM1ZWMuLjE3NzMyZDFmZGM1ZWZkIDEwMDY0NFxcbi0tLSBhL21tL2h1Z2V0bGIuY1xcbisrKyBiL21tL2h1Z2V0bGIuY1xcbkBAIC03MTgyLDcgKzcxODIsOCBAQCB2b2lkIGZvbGlvX3B1dGJhY2tfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRmb2xpb19wdXQoZm9saW8pO1xcbiB9XFxuIFxcbi12b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGludCByZWFzb24pXFxuK3ZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbyxcXG4rXFx0XFx0XFx0ZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pXFxuIHtcXG4gXFx0c3RydWN0IGhzdGF0ZSAqaCA9IGZvbGlvX2hzdGF0ZShvbGRfZm9saW8pO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jXFxuaW5kZXggZDliMjM5MDlkNzE2YzYuLjQ5ZTEwZmVlYjA5NGYwIDEwMDY0NFxcbi0tLSBhL21tL21pZ3JhdGUuY1xcbisrKyBiL21tL21pZ3JhdGUuY1xcbkBAIC0xNDY5LDcgKzE0NjksNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfZm9saW9fbW92ZShmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxcbiBzdGF0aWMgaW50IHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZShuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxcbiBcXHRcXHRmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxcbiBcXHRcXHRzdHJ1Y3QgZm9saW8gKnNyYywgaW50IGZvcmNlLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLFxcbi1cXHRcXHRpbnQgcmVhc29uLCBzdHJ1Y3QgbGlzdF9oZWFkICpyZXQpXFxuK1xcdFxcdGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLCBzdHJ1Y3QgbGlzdF9oZWFkICpyZXQpXFxuIHtcXG4gXFx0c3RydWN0IGZvbGlvICpkc3Q7XFxuIFxcdGludCByYyA9IC1FQUdBSU47XFxuQEAgLTE2MjYsNyArMTYyNiw3IEBAIHN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzIHtcXG4gICovXFxuIHN0YXRpYyBpbnQgbWlncmF0ZV9odWdldGxicyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxcbiBcXHRcXHRcXHQgICAgZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcXG4tXFx0XFx0XFx0ICAgIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sXFxuK1xcdFxcdFxcdCAgICBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbixcXG4gXFx0XFx0XFx0ICAgIHN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzICpzdGF0cyxcXG4gXFx0XFx0XFx0ICAgIHN0cnVjdCBsaXN0X2hlYWQgKnJldF9mb2xpb3MpXFxuIHtcXG5AQCAtMTcxNiw3ICsxNzE2LDcgQEAgc3RhdGljIGludCBtaWdyYXRlX2h1Z2V0bGJzKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXFxuIHN0YXRpYyB2b2lkIG1pZ3JhdGVfZm9saW9zX21vdmUoc3RydWN0IGxpc3RfaGVhZCAqc3JjX2ZvbGlvcyxcXG4gXFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqZHN0X2ZvbGlvcyxcXG4gXFx0XFx0ZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcXG4tXFx0XFx0ZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbixcXG4rXFx0XFx0ZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sXFxuIFxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKnJldF9mb2xpb3MsXFxuIFxcdFxcdHN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzICpzdGF0cyxcXG4gXFx0XFx0aW50ICpyZXRyeSwgaW50ICp0aHBfcmV0cnksIGludCAqbnJfZmFpbGVkLFxcbkBAIC0xNzk5LDcgKzE3OTksNyBAQCBzdGF0aWMgdm9pZCBtaWdyYXRlX2ZvbGlvc191bmRvKHN0cnVjdCBsaXN0X2hlYWQgKnNyY19mb2xpb3MsXFxuICAqL1xcbiBzdGF0aWMgaW50IG1pZ3JhdGVfcGFnZXNfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqZnJvbSxcXG4gXFx0XFx0bmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbywgZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sXFxuLVxcdFxcdHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbixcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBwcml2YXRlLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbixcXG4gXFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqcmV0X2ZvbGlvcywgc3RydWN0IGxpc3RfaGVhZCAqc3BsaXRfZm9saW9zLFxcbiBcXHRcXHRzdHJ1Y3QgbWlncmF0ZV9wYWdlc19zdGF0cyAqc3RhdHMsIGludCBucl9wYXNzKVxcbiB7XFxuQEAgLTIwMTEsNyArMjAxMSw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlc19iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLFxcbiBcXG4gc3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX3N5bmMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcXG4gXFx0XFx0ZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcXG4tXFx0XFx0ZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbixcXG4rXFx0XFx0ZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sXFxuIFxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKnJldF9mb2xpb3MsIHN0cnVjdCBsaXN0X2hlYWQgKnNwbGl0X2ZvbGlvcyxcXG4gXFx0XFx0c3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzKVxcbiB7XFxuQEAgLTIwODgsNyArMjA4OCw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlc19zeW5jKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXFxuICAqL1xcbiBpbnQgbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxcbiBcXHRcXHRmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxcbi1cXHRcXHRlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLCB1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpXFxuK1xcdFxcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLCB1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpXFxuIHtcXG4gXFx0aW50IHJjLCByY19nYXRoZXI7XFxuIFxcdGludCBucl9wYWdlcztcXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9vd25lci5jIGIvbW0vcGFnZV9vd25lci5jXFxuaW5kZXggMmRkZGNiNjUxMGFhMWUuLjQ2YTkzM2Y5YzIyOWJkIDEwMDY0NFxcbi0tLSBhL21tL3BhZ2Vfb3duZXIuY1xcbisrKyBiL21tL3BhZ2Vfb3duZXIuY1xcbkBAIC0zMzksMTMgKzMzOSwxMyBAQCBub2lubGluZSB2b2lkIF9fc2V0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIHNob3J0IG9yZGVyLFxcbiBcXHRkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGU7XFxuIFxcbiBcXHRoYW5kbGUgPSBzYXZlX3N0YWNrKGdmcF9tYXNrKTtcXG4tXFx0X191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUocGFnZSwgaGFuZGxlLCBvcmRlciwgZ2ZwX21hc2ssIC0xLFxcbitcXHRfX3VwZGF0ZV9wYWdlX293bmVyX2hhbmRsZShwYWdlLCBoYW5kbGUsIG9yZGVyLCBnZnBfbWFzaywgTVJfTkVWRVIsXFxuIFxcdFxcdFxcdFxcdCAgIHRzX25zZWMsIGN1cnJlbnQtXFx1MDAzZXBpZCwgY3VycmVudC1cXHUwMDNldGdpZCxcXG4gXFx0XFx0XFx0XFx0ICAgY3VycmVudC1cXHUwMDNlY29tbSk7XFxuIFxcdGluY19zdGFja19yZWNvcmRfY291bnQoaGFuZGxlLCBnZnBfbWFzaywgMSBcXHUwMDNjXFx1MDAzYyBvcmRlcik7XFxuIH1cXG4gXFxuLXZvaWQgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJlYXNvbilcXG4rdm9pZCBfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbilcXG4ge1xcbiBcXHRzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0ID0gcGFnZV9leHRfZ2V0KFxcdTAwMjZmb2xpby1cXHUwMDNlcGFnZSk7XFxuIFxcdHN0cnVjdCBwYWdlX293bmVyICpwYWdlX293bmVyO1xcbkBAIC00MjIsNiArNDIyLDI5IEBAIHZvaWQgX19mb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKVxcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gfVxcbiBcXG4rLypcXG4rICogQ2hlY2sgaWYgYSBwYWdlIGlzIGEgYnVkZHkgcGFnZSBhbmQgYWR2YW5jZSBAcGZuIHBhc3QgdGhlIGVudGlyZSBidWRkeSBibG9jay5cXG4rICogVGhpcyBzYWZlbHkgcmVhZHMgdGhlIGJ1ZGR5IG9yZGVyIHdpdGhvdXQgdGhlIHpvbmUgbG9jaywgd2hpY2ggbWF5IGNhdXNlIHVzXFxuKyAqIHRvIHNraXAgbGVzcyB0aGFuIHRoZSBmdWxsIGJ1ZGR5IGJsb2NrLCBidXQgdGhhdCBpcyBhY2NlcHRhYmxlIGZvciBwYWdlIG93bmVyXFxuKyAqIGl0ZXJhdGlvbiBwdXJwb3Nlcy5cXG4rICpcXG4rICogUmV0dXJuOiB0cnVlIGlmIHRoZSBwYWdlIHdhcyBza2lwcGVkIChjYWxsZXIgc2hvdWxkIGNvbnRpbnVlIGl0cyBsb29wKSxcXG4rICogICAgICAgICBmYWxzZSBpZiB0aGUgcGFnZSBpcyBub3QgYSBidWRkeSBwYWdlIGFuZCBzaG91bGQgYmUgcHJvY2Vzc2VkIG5vcm1hbGx5LlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBib29sIHNraXBfYnVkZHlfcGFnZXModW5zaWduZWQgbG9uZyAqcGZuLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIG9yZGVyO1xcbitcXG4rXFx0aWYgKCFQYWdlQnVkZHkocGFnZSkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdG9yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xcbitcXHRpZiAob3JkZXIgXFx1MDAzYz0gTUFYX1BBR0VfT1JERVIpXFxuK1xcdFxcdCpwZm4gKz0gKDFVTCBcXHUwMDNjXFx1MDAzYyBvcmRlcikgLSAxO1xcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCB6b25lICp6b25lKVxcbiB7XFxuQEAgLTQ2MSwxNCArNDg0LDggQEAgdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLFxcbiBcXHRcXHRcXHRpZiAocGFnZV96b25lKHBhZ2UpICE9IHpvbmUpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0XFx0aWYgKFBhZ2VCdWRkeShwYWdlKSkge1xcbi1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGZyZWVwYWdlX29yZGVyO1xcbi1cXG4tXFx0XFx0XFx0XFx0ZnJlZXBhZ2Vfb3JkZXIgPSBidWRkeV9vcmRlcl91bnNhZmUocGFnZSk7XFxuLVxcdFxcdFxcdFxcdGlmIChmcmVlcGFnZV9vcmRlciBcXHUwMDNjPSBNQVhfUEFHRV9PUkRFUilcXG4tXFx0XFx0XFx0XFx0XFx0cGZuICs9ICgxVUwgXFx1MDAzY1xcdTAwM2MgZnJlZXBhZ2Vfb3JkZXIpIC0gMTtcXG4rXFx0XFx0XFx0aWYgKHNraXBfYnVkZHlfcGFnZXMoXFx1MDAyNnBmbiwgcGFnZSkpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRcXHR9XFxuIFxcbiBcXHRcXHRcXHRpZiAoUGFnZVJlc2VydmVkKHBhZ2UpKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG5AQCAtNTA1LDEzICs1MjIsMTMgQEAgdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLFxcbiBcXHRzZXFfcHV0YyhtLCAnXFxcXG4nKTtcXG4gfVxcbiBcXG4rI2lmZGVmIENPTkZJR19NRU1DR1xcbiAvKlxcbiAgKiBMb29raW5nIGZvciBtZW1jZyBpbmZvcm1hdGlvbiBhbmQgcHJpbnQgaXQgb3V0XFxuICAqL1xcbiBzdGF0aWMgaW5saW5lIGludCBwcmludF9wYWdlX293bmVyX21lbWNnKGNoYXIgKmtidWYsIHNpemVfdCBjb3VudCwgaW50IHJldCxcXG4gXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBwYWdlICpwYWdlKVxcbiB7XFxuLSNpZmRlZiBDT05GSUdfTUVNQ0dcXG4gXFx0dW5zaWduZWQgbG9uZyBtZW1jZ19kYXRhO1xcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuIFxcdGJvb2wgb25saW5lO1xcbkBAIC01MzksMTAgKzU1NiwxNiBAQCBzdGF0aWMgaW5saW5lIGludCBwcmludF9wYWdlX293bmVyX21lbWNnKGNoYXIgKmtidWYsIHNpemVfdCBjb3VudCwgaW50IHJldCxcXG4gXFx0XFx0XFx0bmFtZSk7XFxuIG91dF91bmxvY2s6XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0jZW5kaWYgLyogQ09ORklHX01FTUNHICovXFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuKyNlbHNlXFxuK3N0YXRpYyBpbmxpbmUgaW50IHByaW50X3BhZ2Vfb3duZXJfbWVtY2coY2hhciAqa2J1Ziwgc2l6ZV90IGNvdW50LCBpbnQgcmV0LFxcbitcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuK3tcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbisjZW5kaWZcXG4gXFxuIHN0YXRpYyBzc2l6ZV90XFxuIHByaW50X3BhZ2Vfb3duZXIoY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBsb25nIHBmbixcXG5AQCAtNTc5LDcgKzYwMiw3IEBAIHByaW50X3BhZ2Vfb3duZXIoY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBsb25nIHBmbixcXG4gXFx0aWYgKHJldCBcXHUwMDNlPSBjb3VudClcXG4gXFx0XFx0Z290byBlcnI7XFxuIFxcbi1cXHRpZiAocGFnZV9vd25lci1cXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSAtMSkge1xcbitcXHRpZiAocGFnZV9vd25lci1cXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSBNUl9ORVZFUikge1xcbiBcXHRcXHRyZXQgKz0gc2NucHJpbnRmKGtidWYgKyByZXQsIGNvdW50IC0gcmV0LFxcbiBcXHRcXHRcXHRcXFwiUGFnZSBoYXMgYmVlbiBtaWdyYXRlZCwgbGFzdCBtaWdyYXRlIHJlYXNvbjogJXNcXFxcblxcXCIsXFxuIFxcdFxcdFxcdG1pZ3JhdGVfcmVhc29uX25hbWVzW3BhZ2Vfb3duZXItXFx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb25dKTtcXG5AQCAtNjMwLDEwICs2NTMsMTAgQEAgdm9pZCBfX2R1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4gXFx0ZWxzZVxcbiBcXHRcXHRwcl9hbGVydChcXFwicGFnZV9vd25lciB0cmFja3MgdGhlIHBhZ2UgYXMgZnJlZWRcXFxcblxcXCIpO1xcbiBcXG4tXFx0cHJfYWxlcnQoXFxcInBhZ2UgbGFzdCBhbGxvY2F0ZWQgdmlhIG9yZGVyICV1LCBtaWdyYXRldHlwZSAlcywgZ2ZwX21hc2sgJSN4KCVwR2cpLCBwaWQgJWQsIHRnaWQgJWQgKCVzKSwgdHMgJWxsdSwgZnJlZV90cyAlbGx1XFxcXG5cXFwiLFxcbitcXHRwcl9hbGVydChcXFwicGFnZSBsYXN0IGFsbG9jYXRlZCB2aWEgb3JkZXIgJXUsIG1pZ3JhdGV0eXBlICVzLCBnZnBfbWFzayAlI3goJXBHZyksIHBpZCAlZCwgdGdpZCAlZCAoJXMpLCB0cyAlbGx1XFxcXG5cXFwiLFxcbiBcXHRcXHQgcGFnZV9vd25lci1cXHUwMDNlb3JkZXIsIG1pZ3JhdGV0eXBlX25hbWVzW210XSwgZ2ZwX21hc2ssIFxcdTAwMjZnZnBfbWFzayxcXG4gXFx0XFx0IHBhZ2Vfb3duZXItXFx1MDAzZXBpZCwgcGFnZV9vd25lci1cXHUwMDNldGdpZCwgcGFnZV9vd25lci1cXHUwMDNlY29tbSxcXG4tXFx0XFx0IHBhZ2Vfb3duZXItXFx1MDAzZXRzX25zZWMsIHBhZ2Vfb3duZXItXFx1MDAzZWZyZWVfdHNfbnNlYyk7XFxuK1xcdFxcdCBwYWdlX293bmVyLVxcdTAwM2V0c19uc2VjKTtcXG4gXFxuIFxcdGhhbmRsZSA9IFJFQURfT05DRShwYWdlX293bmVyLVxcdTAwM2VoYW5kbGUpO1xcbiBcXHRpZiAoIWhhbmRsZSlcXG5AQCAtNjQ1LDEyICs2NjgsMTMgQEAgdm9pZCBfX2R1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4gXFx0aWYgKCFoYW5kbGUpIHtcXG4gXFx0XFx0cHJfYWxlcnQoXFxcInBhZ2Vfb3duZXIgZnJlZSBzdGFjayB0cmFjZSBtaXNzaW5nXFxcXG5cXFwiKTtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0cHJfYWxlcnQoXFxcInBhZ2UgbGFzdCBmcmVlIHBpZCAlZCB0Z2lkICVkIHN0YWNrIHRyYWNlOlxcXFxuXFxcIixcXG4tXFx0XFx0XFx0ICBwYWdlX293bmVyLVxcdTAwM2VmcmVlX3BpZCwgcGFnZV9vd25lci1cXHUwMDNlZnJlZV90Z2lkKTtcXG4rXFx0XFx0cHJfYWxlcnQoXFxcInBhZ2UgbGFzdCBmcmVlIHBpZCAlZCB0Z2lkICVkIHRzICVsbHUgc3RhY2sgdHJhY2U6XFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgIHBhZ2Vfb3duZXItXFx1MDAzZWZyZWVfcGlkLCBwYWdlX293bmVyLVxcdTAwM2VmcmVlX3RnaWQsXFxuK1xcdFxcdFxcdCAgcGFnZV9vd25lci1cXHUwMDNlZnJlZV90c19uc2VjKTtcXG4gXFx0XFx0c3RhY2tfZGVwb3RfcHJpbnQoaGFuZGxlKTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHBhZ2Vfb3duZXItXFx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb24gIT0gLTEpXFxuK1xcdGlmIChwYWdlX293bmVyLVxcdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uICE9IE1SX05FVkVSKVxcbiBcXHRcXHRwcl9hbGVydChcXFwicGFnZSBoYXMgYmVlbiBtaWdyYXRlZCwgbGFzdCBtaWdyYXRlIHJlYXNvbjogJXNcXFxcblxcXCIsXFxuIFxcdFxcdFxcdG1pZ3JhdGVfcmVhc29uX25hbWVzW3BhZ2Vfb3duZXItXFx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb25dKTtcXG4gXFx0cGFnZV9leHRfcHV0KHBhZ2VfZXh0KTtcXG5AQCAtNjk3LDEzICs3MjEsOCBAQCByZWFkX3BhZ2Vfb3duZXIoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTtcXG4tXFx0XFx0aWYgKFBhZ2VCdWRkeShwYWdlKSkge1xcbi1cXHRcXHRcXHR1bnNpZ25lZCBsb25nIGZyZWVwYWdlX29yZGVyID0gYnVkZHlfb3JkZXJfdW5zYWZlKHBhZ2UpO1xcbi1cXG4tXFx0XFx0XFx0aWYgKGZyZWVwYWdlX29yZGVyIFxcdTAwM2M9IE1BWF9QQUdFX09SREVSKVxcbi1cXHRcXHRcXHRcXHRwZm4gKz0gKDFVTCBcXHUwMDNjXFx1MDAzYyBmcmVlcGFnZV9vcmRlcikgLSAxO1xcbitcXHRcXHRpZiAoc2tpcF9idWRkeV9wYWdlcyhcXHUwMDI2cGZuLCBwYWdlKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdH1cXG4gXFxuIFxcdFxcdHBhZ2VfZXh0ID0gcGFnZV9leHRfZ2V0KHBhZ2UpO1xcbiBcXHRcXHRpZiAodW5saWtlbHkoIXBhZ2VfZXh0KSlcXG5AQCAtNzk4LDIwICs4MTcsOCBAQCBzdGF0aWMgdm9pZCBpbml0X3BhZ2VzX2luX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUpXFxuIFxcdFxcdFxcdGlmIChwYWdlX3pvbmUocGFnZSkgIT0gem9uZSlcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBUbyBhdm9pZCBoYXZpbmcgdG8gZ3JhYiB6b25lLVxcdTAwM2Vsb2NrLCBiZSBhIGxpdHRsZVxcbi1cXHRcXHRcXHQgKiBjYXJlZnVsIHdoZW4gcmVhZGluZyBidWRkeSBwYWdlIG9yZGVyLiBUaGUgb25seVxcbi1cXHRcXHRcXHQgKiBkYW5nZXIgaXMgdGhhdCB3ZSBza2lwIHRvbyBtdWNoIGFuZCBwb3RlbnRpYWxseSBtaXNzXFxuLVxcdFxcdFxcdCAqIHNvbWUgZWFybHkgYWxsb2NhdGVkIHBhZ2VzLCB3aGljaCBpcyBiZXR0ZXIgdGhhblxcbi1cXHRcXHRcXHQgKiBoZWF2eSBsb2NrIGNvbnRlbnRpb24uXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7XFxuLVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgb3JkZXIgPSBidWRkeV9vcmRlcl91bnNhZmUocGFnZSk7XFxuLVxcbi1cXHRcXHRcXHRcXHRpZiAob3JkZXIgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IG9yZGVyIFxcdTAwM2M9IE1BWF9QQUdFX09SREVSKVxcbi1cXHRcXHRcXHRcXHRcXHRwZm4gKz0gKDFVTCBcXHUwMDNjXFx1MDAzYyBvcmRlcikgLSAxO1xcbitcXHRcXHRcXHRpZiAoc2tpcF9idWRkeV9wYWdlcyhcXHUwMDI2cGZuLCBwYWdlKSlcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdFxcdH1cXG4gXFxuIFxcdFxcdFxcdGlmIChQYWdlUmVzZXJ2ZWQocGFnZSkpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbkBAIC04MjYsNyArODMzLDcgQEAgc3RhdGljIHZvaWQgaW5pdF9wYWdlc19pbl96b25lKHN0cnVjdCB6b25lICp6b25lKVxcbiBcXG4gXFx0XFx0XFx0LyogRm91bmQgZWFybHkgYWxsb2NhdGVkIHBhZ2UgKi9cXG4gXFx0XFx0XFx0X191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUocGFnZSwgZWFybHlfaGFuZGxlLCAwLCAwLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAtMSwgbG9jYWxfY2xvY2soKSwgY3VycmVudC1cXHUwMDNlcGlkLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBNUl9ORVZFUiwgbG9jYWxfY2xvY2soKSwgY3VycmVudC1cXHUwMDNlcGlkLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICBjdXJyZW50LVxcdTAwM2V0Z2lkLCBjdXJyZW50LVxcdTAwM2Vjb21tKTtcXG4gXFx0XFx0XFx0Y291bnQrKztcXG4gZXh0X3B1dF9jb250aW51ZTpcXG5AQCAtODg3LDcgKzg5NCw3IEBAIHN0YXRpYyB2b2lkICpzdGFja19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdiwgbG9mZl90ICpwcG9zKVxcbiBcXHRyZXR1cm4gc3RhY2s7XFxuIH1cXG4gXFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkO1xcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlc190aHJlc2hvbGQ7XFxuIFxcbiBzdGF0aWMgaW50IHN0YWNrX3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4ge1xcbkBAIC05MDQsNyArOTExLDcgQEAgc3RhdGljIGludCBzdGFja19wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuIFxcdG5yX2Jhc2VfcGFnZXMgPSByZWZjb3VudF9yZWFkKFxcdTAwMjZzdGFja19yZWNvcmQtXFx1MDAzZWNvdW50KSAtIDE7XFxuIFxcbiBcXHRpZiAoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IFNUQUNLX1BSSU5UX0ZMQUdfUEFHRVMgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIChucl9iYXNlX3BhZ2VzIFxcdTAwM2MgMSB8fCBucl9iYXNlX3BhZ2VzIFxcdTAwM2MgcGFnZV9vd25lcl9wYWdlc190aHJlc2hvbGQpKVxcbitcXHQgICAgKG5yX2Jhc2VfcGFnZXMgXFx1MDAzYyAxIHx8IG5yX2Jhc2VfcGFnZXMgXFx1MDAzYyBwYWdlc190aHJlc2hvbGQpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdGlmIChjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgU1RBQ0tfUFJJTlRfRkxBR19TVEFDSykge1xcbkBAIC05MjYsMTYgKzkzMywxNiBAQCBzdGF0aWMgdm9pZCBzdGFja19zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4ge1xcbiB9XFxuIFxcbi1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHBhZ2Vfb3duZXJfc3RhY2tfb3AgPSB7XFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc3RhY2tfb3AgPSB7XFxuIFxcdC5zdGFydFxcdD0gc3RhY2tfc3RhcnQsXFxuIFxcdC5uZXh0XFx0PSBzdGFja19uZXh0LFxcbiBcXHQuc3RvcFxcdD0gc3RhY2tfc3RvcCxcXG4gXFx0LnNob3dcXHQ9IHN0YWNrX3ByaW50XFxuIH07XFxuIFxcbi1zdGF0aWMgaW50IHBhZ2Vfb3duZXJfc3RhY2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4rc3RhdGljIGludCBzdGFja19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbiB7XFxuLVxcdGludCByZXQgPSBzZXFfb3Blbl9wcml2YXRlKGZpbGUsIFxcdTAwMjZwYWdlX293bmVyX3N0YWNrX29wLFxcbitcXHRpbnQgcmV0ID0gc2VxX29wZW5fcHJpdmF0ZShmaWxlLCBcXHUwMDI2c3RhY2tfb3AsXFxuIFxcdFxcdFxcdFxcdCAgIHNpemVvZihzdHJ1Y3Qgc3RhY2tfcHJpbnRfY3R4KSk7XFxuIFxcbiBcXHRpZiAoIXJldCkge1xcbkBAIC05NDgsMjggKzk1NSwyNiBAQCBzdGF0aWMgaW50IHBhZ2Vfb3duZXJfc3RhY2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGFnZV9vd25lcl9zdGFja19mb3BzID0ge1xcbi1cXHQub3BlblxcdFxcdD0gcGFnZV9vd25lcl9zdGFja19vcGVuLFxcbitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzdGFja19mb3BzID0ge1xcbitcXHQub3BlblxcdFxcdD0gc3RhY2tfb3BlbixcXG4gXFx0LnJlYWRcXHRcXHQ9IHNlcV9yZWFkLFxcbiBcXHQubGxzZWVrXFx0XFx0PSBzZXFfbHNlZWssXFxuIFxcdC5yZWxlYXNlXFx0PSBzZXFfcmVsZWFzZV9wcml2YXRlLFxcbiB9O1xcbiBcXG4tc3RhdGljIGludCBwYWdlX293bmVyX3RocmVzaG9sZF9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpXFxuK3N0YXRpYyBpbnQgdGhyZXNob2xkX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbClcXG4ge1xcbi1cXHQqdmFsID0gUkVBRF9PTkNFKHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkKTtcXG4rXFx0KnZhbCA9IFJFQURfT05DRShwYWdlc190aHJlc2hvbGQpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBwYWdlX293bmVyX3RocmVzaG9sZF9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbClcXG4rc3RhdGljIGludCB0aHJlc2hvbGRfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpXFxuIHtcXG4tXFx0V1JJVEVfT05DRShwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZCwgdmFsKTtcXG4rXFx0V1JJVEVfT05DRShwYWdlc190aHJlc2hvbGQsIHZhbCk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1ERUZJTkVfU0lNUExFX0FUVFJJQlVURShwYWdlX293bmVyX3RocmVzaG9sZF9mb3BzLCBcXHUwMDI2cGFnZV9vd25lcl90aHJlc2hvbGRfZ2V0LFxcbi1cXHRcXHRcXHRcXHUwMDI2cGFnZV9vd25lcl90aHJlc2hvbGRfc2V0LCBcXFwiJWxsdVxcXCIpO1xcbi1cXG4rREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUodGhyZXNob2xkX2ZvcHMsIFxcdTAwMjZ0aHJlc2hvbGRfZ2V0LCBcXHUwMDI2dGhyZXNob2xkX3NldCwgXFxcIiVsbHVcXFxcblxcXCIpO1xcbiBcXG4gc3RhdGljIGludCBfX2luaXQgcGFnZW93bmVyX2luaXQodm9pZClcXG4ge1xcbkBAIC05ODUsMTcgKzk5MCwxNyBAQCBzdGF0aWMgaW50IF9faW5pdCBwYWdlb3duZXJfaW5pdCh2b2lkKVxcbiBcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxcXCJzaG93X3N0YWNrc1xcXCIsIDA0MDAsIGRpcixcXG4gXFx0XFx0XFx0ICAgICh2b2lkICopKFNUQUNLX1BSSU5UX0ZMQUdfU1RBQ0sgfFxcbiBcXHRcXHRcXHRcXHQgICAgIFNUQUNLX1BSSU5UX0ZMQUdfUEFHRVMpLFxcbi1cXHRcXHRcXHQgICAgIFxcdTAwMjZwYWdlX293bmVyX3N0YWNrX2ZvcHMpO1xcbitcXHRcXHRcXHQgICAgIFxcdTAwMjZzdGFja19mb3BzKTtcXG4gXFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwic2hvd19oYW5kbGVzXFxcIiwgMDQwMCwgZGlyLFxcbiBcXHRcXHRcXHQgICAgKHZvaWQgKikoU1RBQ0tfUFJJTlRfRkxBR19IQU5ETEUgfFxcbiBcXHRcXHRcXHRcXHQgICAgIFNUQUNLX1BSSU5UX0ZMQUdfUEFHRVMpLFxcbi1cXHRcXHRcXHQgICAgXFx1MDAyNnBhZ2Vfb3duZXJfc3RhY2tfZm9wcyk7XFxuK1xcdFxcdFxcdCAgICBcXHUwMDI2c3RhY2tfZm9wcyk7XFxuIFxcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcInNob3dfc3RhY2tzX2hhbmRsZXNcXFwiLCAwNDAwLCBkaXIsXFxuIFxcdFxcdFxcdCAgICAodm9pZCAqKShTVEFDS19QUklOVF9GTEFHX1NUQUNLIHxcXG4gXFx0XFx0XFx0XFx0ICAgICBTVEFDS19QUklOVF9GTEFHX0hBTkRMRSksXFxuLVxcdFxcdFxcdCAgICBcXHUwMDI2cGFnZV9vd25lcl9zdGFja19mb3BzKTtcXG4rXFx0XFx0XFx0ICAgIFxcdTAwMjZzdGFja19mb3BzKTtcXG4gXFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwiY291bnRfdGhyZXNob2xkXFxcIiwgMDYwMCwgZGlyLCBOVUxMLFxcbi1cXHRcXHRcXHQgICAgXFx1MDAyNnBhZ2Vfb3duZXJfdGhyZXNob2xkX2ZvcHMpO1xcbitcXHRcXHRcXHQgICAgXFx1MDAyNnRocmVzaG9sZF9mb3BzKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gbGF0ZV9pbml0Y2FsbChwYWdlb3duZXJfaW5pdClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDI6MDc6NDcuMDUzOTMwODU0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDI1OTIwNTMxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29uc2lzdHMgZW50aXJlbHkgb2YgcmVmYWN0b3JpbmcgKGNoYW5naW5nIGludCB0byBlbnVtIG1pZ3JhdGVfcmVhc29uKSwgaW50cm9kdWNpbmcgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIHNraXBwaW5nIGJ1ZGR5IHBhZ2VzICh3aXRoIG5vIGZ1bmN0aW9uYWwgY2hhbmdlKSwgcmVuYW1pbmcgdmFyaWFibGVzL2Z1bmN0aW9ucywgYW5kIG1vZGlmeWluZyBwcmludGsvdHJhY2Vwb2ludCBvdXRwdXRzLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBsb2dpYyBjaGFuZ2VzIHRoYXQgd2FycmFudCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyM2MyODhhMjMxNTMyMWZhZjQ1NDUwMTlmZTEwN2ZhY2RjM2U1MzJjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdW4gMzAgMDI6MDc6NDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG5pbmRleCAyYWJhZjk5MzIxZTkwZC4uZmE4MjgyMzJkZmNjMTggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuKysrIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbkBAIC0xNTQsNyArMTU0LDggQEAgbG9uZyBodWdldGxiX3VucmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb25nIHN0YXJ0LCBsb25nIGVuZCxcbiBib29sIGZvbGlvX2lzb2xhdGVfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KTtcbiBpbnQgZ2V0X2h3cG9pc29uX2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCAqaHVnZXRsYiwgYm9vbCB1bnBvaXNvbik7XG4gdm9pZCBmb2xpb19wdXRiYWNrX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tdm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBpbnQgcmVhc29uKTtcbit2b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sXG4rXHRcdFx0ZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pO1xuIHZvaWQgaHVnZXRsYl9maXhfcmVzZXJ2ZV9jb3VudHMoc3RydWN0IGlub2RlICppbm9kZSk7XG4gZXh0ZXJuIHN0cnVjdCBtdXRleCAqaHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZTtcbiB1MzIgaHVnZXRsYl9mYXVsdF9tdXRleF9oYXNoKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IGlkeCk7XG5AQCAtNDI0LDcgKzQyNSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19wdXRiYWNrX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbylcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbyxcbi1cdFx0XHRcdFx0c3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGludCByZWFzb24pXG4rXHRcdFx0XHRcdHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbilcbiB7XG4gfVxuIFxuQEAgLTk1Niw3ICs5NTcsNyBAQCBzdGF0aWMgaW5saW5lIGdmcF90IGh0bGJfbW9kaWZ5X2FsbG9jX21hc2soc3RydWN0IGhzdGF0ZSAqaCwgZ2ZwX3QgZ2ZwX21hc2spXG4gXHRyZXR1cm4gbW9kaWZpZWRfbWFzaztcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIGh0bGJfYWxsb3dfYWxsb2NfZmFsbGJhY2soaW50IHJlYXNvbilcbitzdGF0aWMgaW5saW5lIGJvb2wgaHRsYl9hbGxvd19hbGxvY19mYWxsYmFjayhlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbilcbiB7XG4gXHRib29sIGFsbG93ZWRfZmFsbGJhY2sgPSBmYWxzZTtcbiBcbkBAIC0xMjM4LDcgKzEyMzksNyBAQCBzdGF0aWMgaW5saW5lIGdmcF90IGh0bGJfbW9kaWZ5X2FsbG9jX21hc2soc3RydWN0IGhzdGF0ZSAqaCwgZ2ZwX3QgZ2ZwX21hc2spXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIGh0bGJfYWxsb3dfYWxsb2NfZmFsbGJhY2soaW50IHJlYXNvbilcbitzdGF0aWMgaW5saW5lIGJvb2wgaHRsYl9hbGxvd19hbGxvY19mYWxsYmFjayhlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbilcbiB7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWlncmF0ZS5oIGIvaW5jbHVkZS9saW51eC9taWdyYXRlLmhcbmluZGV4IGQ1YWYyYjdmNTc3YjMzLi4xZjgzOTI0NjE1ZDZkMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWlncmF0ZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaFxuQEAgLTU3LDcgKzU3LDggQEAgdm9pZCBwdXRiYWNrX21vdmFibGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbCk7XG4gaW50IG1pZ3JhdGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZHN0LFxuIFx0XHRzdHJ1Y3QgZm9saW8gKnNyYywgZW51bSBtaWdyYXRlX21vZGUgbW9kZSk7XG4gaW50IG1pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbCwgbmV3X2ZvbGlvX3QgbmV3LCBmcmVlX2ZvbGlvX3QgZnJlZSxcbi1cdFx0ICB1bnNpZ25lZCBsb25nIHByaXZhdGUsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sXG4rXHRcdCAgdW5zaWduZWQgbG9uZyBwcml2YXRlLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLFxuK1x0XHQgIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLFxuIFx0XHQgIHVuc2lnbmVkIGludCAqcmV0X3N1Y2NlZWRlZCk7XG4gc3RydWN0IGZvbGlvICphbGxvY19taWdyYXRpb25fdGFyZ2V0KHN0cnVjdCBmb2xpbyAqc3JjLCB1bnNpZ25lZCBsb25nIHByaXZhdGUpO1xuIGJvb2wgaXNvbGF0ZV9tb3ZhYmxlX29wc19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpc29sYXRlX21vZGVfdCBtb2RlKTtcbkBAIC03Nyw3ICs3OCw4IEBAIGludCBzZXRfbW92YWJsZV9vcHMoY29uc3Qgc3RydWN0IG1vdmFibGVfb3BlcmF0aW9ucyAqb3BzLCBlbnVtIHBhZ2V0eXBlIHR5cGUpO1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRiYWNrX21vdmFibGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqbCkge31cbiBzdGF0aWMgaW5saW5lIGludCBtaWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmwsIG5ld19mb2xpb190IG5ldyxcbiBcdFx0ZnJlZV9mb2xpb190IGZyZWUsIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcbi1cdFx0ZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiwgdW5zaWduZWQgaW50ICpyZXRfc3VjY2VlZGVkKVxuK1x0XHRlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbixcbitcdFx0dW5zaWduZWQgaW50ICpyZXRfc3VjY2VlZGVkKVxuIFx0eyByZXR1cm4gLUVOT1NZUzsgfVxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICphbGxvY19taWdyYXRpb25fdGFyZ2V0KHN0cnVjdCBmb2xpbyAqc3JjLFxuIFx0XHR1bnNpZ25lZCBsb25nIHByaXZhdGUpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9taWdyYXRlX21vZGUuaCBiL2luY2x1ZGUvbGludXgvbWlncmF0ZV9tb2RlLmhcbmluZGV4IDI2NWM0MzI4YjM2YWQ1Li4wNTEwMmQ0ZDI0OTBlNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWlncmF0ZV9tb2RlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWlncmF0ZV9tb2RlLmhcbkBAIC0yNSw2ICsyNSw3IEBAIGVudW0gbWlncmF0ZV9yZWFzb24ge1xuIFx0TVJfTE9OR1RFUk1fUElOLFxuIFx0TVJfREVNT1RJT04sXG4gXHRNUl9EQU1PTixcbitcdE1SX05FVkVSLFx0XHQvKiBwYWdlIGhhcyBuZXZlciBiZWVuIG1pZ3JhdGVkICovXG4gXHRNUl9UWVBFU1xuIH07XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2Vfb3duZXIuaFxuaW5kZXggMzMyODM1N2Y2ZGJhNzIuLjlmZTUxZGZjY2YyNjg1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlX293bmVyLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZV9vd25lci5oXG5AQCAtMyw2ICszLDcgQEBcbiAjZGVmaW5lIF9fTElOVVhfUEFHRV9PV05FUl9IXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvanVtcF9sYWJlbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWlncmF0ZV9tb2RlLmhcdTAwM2VcbiBcbiAjaWZkZWYgQ09ORklHX1BBR0VfT1dORVJcbiBleHRlcm4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgcGFnZV9vd25lcl9pbml0ZWQ7XG5AQCAtMTQsNyArMTUsNyBAQCBleHRlcm4gdm9pZCBfX3NldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLFxuIGV4dGVybiB2b2lkIF9fc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlcixcbiBcdFx0XHRpbnQgbmV3X29yZGVyKTtcbiBleHRlcm4gdm9pZCBfX2ZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpO1xuLWV4dGVybiB2b2lkIF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCByZWFzb24pO1xuK2V4dGVybiB2b2lkIF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKTtcbiBleHRlcm4gdm9pZCBfX2R1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4gZXh0ZXJuIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSxcbiBcdFx0XHRcdFx0cGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHpvbmUgKnpvbmUpO1xuQEAgLTQzLDcgKzQ0LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpXG4gXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZwYWdlX293bmVyX2luaXRlZCkpXG4gXHRcdF9fZm9saW9fY29weV9vd25lcihuZXdmb2xpbywgb2xkKTtcbiB9XG4tc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcmVhc29uKVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pXG4ge1xuIFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2cGFnZV9vd25lcl9pbml0ZWQpKVxuIFx0XHRfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihmb2xpbywgcmVhc29uKTtcbkBAIC02OCw3ICs2OSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIH1cbi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCByZWFzb24pXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbilcbiB7XG4gfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wX3BhZ2Vfb3duZXIoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvbWlncmF0ZS5oXG5pbmRleCBjZDAxZGQ3YjM2NDBkYy4uMTVlZTJlZjIwMWI1ZjkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9taWdyYXRlLmhcbisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL21pZ3JhdGUuaFxuQEAgLTIzLDcgKzIzLDggQEBcbiBcdEVNKCBNUl9DT05USUdfUkFOR0UsXHRcImNvbnRpZ19yYW5nZVwiKVx0XHRcdFxcXG4gXHRFTSggTVJfTE9OR1RFUk1fUElOLFx0XCJsb25ndGVybV9waW5cIilcdFx0XHRcXFxuIFx0RU0oIE1SX0RFTU9USU9OLFx0XCJkZW1vdGlvblwiKVx0XHRcdFxcXG4tXHRFTWUoTVJfREFNT04sXHRcdFwiZGFtb25cIilcbitcdEVNKCBNUl9EQU1PTixcdFx0XCJkYW1vblwiKVx0XHRcdFxcXG4rXHRFTWUoTVJfTkVWRVIsXHRcdFwibmV2ZXJfbWlncmF0ZWRcIilcbiBcbiAvKlxuICAqIEZpcnN0IGRlZmluZSB0aGUgZW51bXMgaW4gdGhlIGFib3ZlIG1hY3JvcyB0byBiZSBleHBvcnRlZCB0byB1c2Vyc3BhY2VcbkBAIC01MSw3ICs1Miw3IEBAIFRSQUNFX0VWRU5UKG1tX21pZ3JhdGVfcGFnZXMsXG4gXHRUUF9QUk9UTyh1bnNpZ25lZCBsb25nIHN1Y2NlZWRlZCwgdW5zaWduZWQgbG9uZyBmYWlsZWQsXG4gXHRcdCB1bnNpZ25lZCBsb25nIHRocF9zdWNjZWVkZWQsIHVuc2lnbmVkIGxvbmcgdGhwX2ZhaWxlZCxcbiBcdFx0IHVuc2lnbmVkIGxvbmcgdGhwX3NwbGl0LCB1bnNpZ25lZCBsb25nIGxhcmdlX2ZvbGlvX3NwbGl0LFxuLVx0XHQgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbiksXG4rXHRcdCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbiksXG4gXG4gXHRUUF9BUkdTKHN1Y2NlZWRlZCwgZmFpbGVkLCB0aHBfc3VjY2VlZGVkLCB0aHBfZmFpbGVkLFxuIFx0XHR0aHBfc3BsaXQsIGxhcmdlX2ZvbGlvX3NwbGl0LCBtb2RlLCByZWFzb24pLFxuQEAgLTY0LDcgKzY1LDcgQEAgVFJBQ0VfRVZFTlQobW1fbWlncmF0ZV9wYWdlcyxcbiBcdFx0X19maWVsZChcdHVuc2lnbmVkIGxvbmcsXHRcdHRocF9zcGxpdClcbiBcdFx0X19maWVsZChcdHVuc2lnbmVkIGxvbmcsXHRcdGxhcmdlX2ZvbGlvX3NwbGl0KVxuIFx0XHRfX2ZpZWxkKFx0ZW51bSBtaWdyYXRlX21vZGUsXHRtb2RlKVxuLVx0XHRfX2ZpZWxkKFx0aW50LFx0XHRcdHJlYXNvbilcbitcdFx0X19maWVsZChcdGVudW0gbWlncmF0ZV9yZWFzb24sXHRyZWFzb24pXG4gXHQpLFxuIFxuIFx0VFBfZmFzdF9hc3NpZ24oXG5AQCAtOTEsMTMgKzkyLDEzIEBAIFRSQUNFX0VWRU5UKG1tX21pZ3JhdGVfcGFnZXMsXG4gXG4gVFJBQ0VfRVZFTlQobW1fbWlncmF0ZV9wYWdlc19zdGFydCxcbiBcbi1cdFRQX1BST1RPKGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24pLFxuK1x0VFBfUFJPVE8oZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pLFxuIFxuIFx0VFBfQVJHUyhtb2RlLCByZWFzb24pLFxuIFxuIFx0VFBfU1RSVUNUX19lbnRyeShcbiBcdFx0X19maWVsZChlbnVtIG1pZ3JhdGVfbW9kZSwgbW9kZSlcbi1cdFx0X19maWVsZChpbnQsIHJlYXNvbilcbitcdFx0X19maWVsZChlbnVtIG1pZ3JhdGVfcmVhc29uLCByZWFzb24pXG4gXHQpLFxuIFxuIFx0VFBfZmFzdF9hc3NpZ24oXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jXG5pbmRleCA1NzEyMTJiODA4MzVlYy4uMTc3MzJkMWZkYzVlZmQgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbisrKyBiL21tL2h1Z2V0bGIuY1xuQEAgLTcxODIsNyArNzE4Miw4IEBAIHZvaWQgZm9saW9fcHV0YmFja19odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRmb2xpb19wdXQoZm9saW8pO1xuIH1cbiBcbi12b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGludCByZWFzb24pXG4rdm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLFxuK1x0XHRcdGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBoc3RhdGUgKmggPSBmb2xpb19oc3RhdGUob2xkX2ZvbGlvKTtcbiBcbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmNcbmluZGV4IGQ5YjIzOTA5ZDcxNmM2Li40OWUxMGZlZWIwOTRmMCAxMDA2NDRcbi0tLSBhL21tL21pZ3JhdGUuY1xuKysrIGIvbW0vbWlncmF0ZS5jXG5AQCAtMTQ2OSw3ICsxNDY5LDcgQEAgc3RhdGljIGludCBtaWdyYXRlX2ZvbGlvX21vdmUoZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcbiBzdGF0aWMgaW50IHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZShuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxuIFx0XHRmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxuIFx0XHRzdHJ1Y3QgZm9saW8gKnNyYywgaW50IGZvcmNlLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLFxuLVx0XHRpbnQgcmVhc29uLCBzdHJ1Y3QgbGlzdF9oZWFkICpyZXQpXG4rXHRcdGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLCBzdHJ1Y3QgbGlzdF9oZWFkICpyZXQpXG4ge1xuIFx0c3RydWN0IGZvbGlvICpkc3Q7XG4gXHRpbnQgcmMgPSAtRUFHQUlOO1xuQEAgLTE2MjYsNyArMTYyNiw3IEBAIHN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzIHtcbiAgKi9cbiBzdGF0aWMgaW50IG1pZ3JhdGVfaHVnZXRsYnMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbiBcdFx0XHQgICAgZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcbi1cdFx0XHQgICAgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50IHJlYXNvbixcbitcdFx0XHQgICAgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24sXG4gXHRcdFx0ICAgIHN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzICpzdGF0cyxcbiBcdFx0XHQgICAgc3RydWN0IGxpc3RfaGVhZCAqcmV0X2ZvbGlvcylcbiB7XG5AQCAtMTcxNiw3ICsxNzE2LDcgQEAgc3RhdGljIGludCBtaWdyYXRlX2h1Z2V0bGJzKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXG4gc3RhdGljIHZvaWQgbWlncmF0ZV9mb2xpb3NfbW92ZShzdHJ1Y3QgbGlzdF9oZWFkICpzcmNfZm9saW9zLFxuIFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpkc3RfZm9saW9zLFxuIFx0XHRmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxuLVx0XHRlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLFxuK1x0XHRlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbixcbiBcdFx0c3RydWN0IGxpc3RfaGVhZCAqcmV0X2ZvbGlvcyxcbiBcdFx0c3RydWN0IG1pZ3JhdGVfcGFnZXNfc3RhdHMgKnN0YXRzLFxuIFx0XHRpbnQgKnJldHJ5LCBpbnQgKnRocF9yZXRyeSwgaW50ICpucl9mYWlsZWQsXG5AQCAtMTc5OSw3ICsxNzk5LDcgQEAgc3RhdGljIHZvaWQgbWlncmF0ZV9mb2xpb3NfdW5kbyhzdHJ1Y3QgbGlzdF9oZWFkICpzcmNfZm9saW9zLFxuICAqL1xuIHN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlc19iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLFxuIFx0XHRuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLCBmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbyxcbi1cdFx0dW5zaWduZWQgbG9uZyBwcml2YXRlLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLFxuK1x0XHR1bnNpZ25lZCBsb25nIHByaXZhdGUsIGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLFxuIFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpyZXRfZm9saW9zLCBzdHJ1Y3QgbGlzdF9oZWFkICpzcGxpdF9mb2xpb3MsXG4gXHRcdHN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzICpzdGF0cywgaW50IG5yX3Bhc3MpXG4ge1xuQEAgLTIwMTEsNyArMjAxMSw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlc19iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLFxuIFxuIHN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlc19zeW5jKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXG4gXHRcdGZyZWVfZm9saW9fdCBwdXRfbmV3X2ZvbGlvLCB1bnNpZ25lZCBsb25nIHByaXZhdGUsXG4tXHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCByZWFzb24sXG4rXHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLFxuIFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpyZXRfZm9saW9zLCBzdHJ1Y3QgbGlzdF9oZWFkICpzcGxpdF9mb2xpb3MsXG4gXHRcdHN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzICpzdGF0cylcbiB7XG5AQCAtMjA4OCw3ICsyMDg4LDcgQEAgc3RhdGljIGludCBtaWdyYXRlX3BhZ2VzX3N5bmMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbiAgKi9cbiBpbnQgbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxuIFx0XHRmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxuLVx0XHRlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgcmVhc29uLCB1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpXG4rXHRcdGVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uLCB1bnNpZ25lZCBpbnQgKnJldF9zdWNjZWVkZWQpXG4ge1xuIFx0aW50IHJjLCByY19nYXRoZXI7XG4gXHRpbnQgbnJfcGFnZXM7XG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9vd25lci5jIGIvbW0vcGFnZV9vd25lci5jXG5pbmRleCAyZGRkY2I2NTEwYWExZS4uNDZhOTMzZjljMjI5YmQgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX293bmVyLmNcbisrKyBiL21tL3BhZ2Vfb3duZXIuY1xuQEAgLTMzOSwxMyArMzM5LDEzIEBAIG5vaW5saW5lIHZvaWQgX19zZXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgc2hvcnQgb3JkZXIsXG4gXHRkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGU7XG4gXG4gXHRoYW5kbGUgPSBzYXZlX3N0YWNrKGdmcF9tYXNrKTtcbi1cdF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGhhbmRsZSwgb3JkZXIsIGdmcF9tYXNrLCAtMSxcbitcdF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGhhbmRsZSwgb3JkZXIsIGdmcF9tYXNrLCBNUl9ORVZFUixcbiBcdFx0XHRcdCAgIHRzX25zZWMsIGN1cnJlbnQtXHUwMDNlcGlkLCBjdXJyZW50LVx1MDAzZXRnaWQsXG4gXHRcdFx0XHQgICBjdXJyZW50LVx1MDAzZWNvbW0pO1xuIFx0aW5jX3N0YWNrX3JlY29yZF9jb3VudChoYW5kbGUsIGdmcF9tYXNrLCAxIFx1MDAzY1x1MDAzYyBvcmRlcik7XG4gfVxuIFxuLXZvaWQgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJlYXNvbilcbit2b2lkIF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBwYWdlX2V4dCAqcGFnZV9leHQgPSBwYWdlX2V4dF9nZXQoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSk7XG4gXHRzdHJ1Y3QgcGFnZV9vd25lciAqcGFnZV9vd25lcjtcbkBAIC00MjIsNiArNDIyLDI5IEBAIHZvaWQgX19mb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKVxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuKy8qXG4rICogQ2hlY2sgaWYgYSBwYWdlIGlzIGEgYnVkZHkgcGFnZSBhbmQgYWR2YW5jZSBAcGZuIHBhc3QgdGhlIGVudGlyZSBidWRkeSBibG9jay5cbisgKiBUaGlzIHNhZmVseSByZWFkcyB0aGUgYnVkZHkgb3JkZXIgd2l0aG91dCB0aGUgem9uZSBsb2NrLCB3aGljaCBtYXkgY2F1c2UgdXNcbisgKiB0byBza2lwIGxlc3MgdGhhbiB0aGUgZnVsbCBidWRkeSBibG9jaywgYnV0IHRoYXQgaXMgYWNjZXB0YWJsZSBmb3IgcGFnZSBvd25lclxuKyAqIGl0ZXJhdGlvbiBwdXJwb3Nlcy5cbisgKlxuKyAqIFJldHVybjogdHJ1ZSBpZiB0aGUgcGFnZSB3YXMgc2tpcHBlZCAoY2FsbGVyIHNob3VsZCBjb250aW51ZSBpdHMgbG9vcCksXG4rICogICAgICAgICBmYWxzZSBpZiB0aGUgcGFnZSBpcyBub3QgYSBidWRkeSBwYWdlIGFuZCBzaG91bGQgYmUgcHJvY2Vzc2VkIG5vcm1hbGx5LlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBza2lwX2J1ZGR5X3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnBmbiwgc3RydWN0IHBhZ2UgKnBhZ2UpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBvcmRlcjtcbitcbitcdGlmICghUGFnZUJ1ZGR5KHBhZ2UpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRvcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcbitcdGlmIChvcmRlciBcdTAwM2M9IE1BWF9QQUdFX09SREVSKVxuK1x0XHQqcGZuICs9ICgxVUwgXHUwMDNjXHUwMDNjIG9yZGVyKSAtIDE7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4gdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLFxuIFx0XHRcdFx0ICAgICAgIHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCB6b25lICp6b25lKVxuIHtcbkBAIC00NjEsMTQgKzQ4NCw4IEBAIHZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSxcbiBcdFx0XHRpZiAocGFnZV96b25lKHBhZ2UpICE9IHpvbmUpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7XG4tXHRcdFx0XHR1bnNpZ25lZCBsb25nIGZyZWVwYWdlX29yZGVyO1xuLVxuLVx0XHRcdFx0ZnJlZXBhZ2Vfb3JkZXIgPSBidWRkeV9vcmRlcl91bnNhZmUocGFnZSk7XG4tXHRcdFx0XHRpZiAoZnJlZXBhZ2Vfb3JkZXIgXHUwMDNjPSBNQVhfUEFHRV9PUkRFUilcbi1cdFx0XHRcdFx0cGZuICs9ICgxVUwgXHUwMDNjXHUwMDNjIGZyZWVwYWdlX29yZGVyKSAtIDE7XG4rXHRcdFx0aWYgKHNraXBfYnVkZHlfcGFnZXMoXHUwMDI2cGZuLCBwYWdlKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdH1cbiBcbiBcdFx0XHRpZiAoUGFnZVJlc2VydmVkKHBhZ2UpKVxuIFx0XHRcdFx0Y29udGludWU7XG5AQCAtNTA1LDEzICs1MjIsMTMgQEAgdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnRfcHJpbnQoc3RydWN0IHNlcV9maWxlICptLFxuIFx0c2VxX3B1dGMobSwgJ1xcbicpO1xuIH1cbiBcbisjaWZkZWYgQ09ORklHX01FTUNHXG4gLypcbiAgKiBMb29raW5nIGZvciBtZW1jZyBpbmZvcm1hdGlvbiBhbmQgcHJpbnQgaXQgb3V0XG4gICovXG4gc3RhdGljIGlubGluZSBpbnQgcHJpbnRfcGFnZV9vd25lcl9tZW1jZyhjaGFyICprYnVmLCBzaXplX3QgY291bnQsIGludCByZXQsXG4gXHRcdFx0XHRcdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4tI2lmZGVmIENPTkZJR19NRU1DR1xuIFx0dW5zaWduZWQgbG9uZyBtZW1jZ19kYXRhO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIFx0Ym9vbCBvbmxpbmU7XG5AQCAtNTM5LDEwICs1NTYsMTYgQEAgc3RhdGljIGlubGluZSBpbnQgcHJpbnRfcGFnZV9vd25lcl9tZW1jZyhjaGFyICprYnVmLCBzaXplX3QgY291bnQsIGludCByZXQsXG4gXHRcdFx0bmFtZSk7XG4gb3V0X3VubG9jazpcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuLSNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuKyNlbHNlXG4rc3RhdGljIGlubGluZSBpbnQgcHJpbnRfcGFnZV9vd25lcl9tZW1jZyhjaGFyICprYnVmLCBzaXplX3QgY291bnQsIGludCByZXQsXG4rXHRcdFx0XHRcdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbit7XG4rXHRyZXR1cm4gcmV0O1xuK31cbisjZW5kaWZcbiBcbiBzdGF0aWMgc3NpemVfdFxuIHByaW50X3BhZ2Vfb3duZXIoY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBsb25nIHBmbixcbkBAIC01NzksNyArNjAyLDcgQEAgcHJpbnRfcGFnZV9vd25lcihjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIHVuc2lnbmVkIGxvbmcgcGZuLFxuIFx0aWYgKHJldCBcdTAwM2U9IGNvdW50KVxuIFx0XHRnb3RvIGVycjtcbiBcbi1cdGlmIChwYWdlX293bmVyLVx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb24gIT0gLTEpIHtcbitcdGlmIChwYWdlX293bmVyLVx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb24gIT0gTVJfTkVWRVIpIHtcbiBcdFx0cmV0ICs9IHNjbnByaW50ZihrYnVmICsgcmV0LCBjb3VudCAtIHJldCxcbiBcdFx0XHRcIlBhZ2UgaGFzIGJlZW4gbWlncmF0ZWQsIGxhc3QgbWlncmF0ZSByZWFzb246ICVzXFxuXCIsXG4gXHRcdFx0bWlncmF0ZV9yZWFzb25fbmFtZXNbcGFnZV9vd25lci1cdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uXSk7XG5AQCAtNjMwLDEwICs2NTMsMTAgQEAgdm9pZCBfX2R1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcdGVsc2VcbiBcdFx0cHJfYWxlcnQoXCJwYWdlX293bmVyIHRyYWNrcyB0aGUgcGFnZSBhcyBmcmVlZFxcblwiKTtcbiBcbi1cdHByX2FsZXJ0KFwicGFnZSBsYXN0IGFsbG9jYXRlZCB2aWEgb3JkZXIgJXUsIG1pZ3JhdGV0eXBlICVzLCBnZnBfbWFzayAlI3goJXBHZyksIHBpZCAlZCwgdGdpZCAlZCAoJXMpLCB0cyAlbGx1LCBmcmVlX3RzICVsbHVcXG5cIixcbitcdHByX2FsZXJ0KFwicGFnZSBsYXN0IGFsbG9jYXRlZCB2aWEgb3JkZXIgJXUsIG1pZ3JhdGV0eXBlICVzLCBnZnBfbWFzayAlI3goJXBHZyksIHBpZCAlZCwgdGdpZCAlZCAoJXMpLCB0cyAlbGx1XFxuXCIsXG4gXHRcdCBwYWdlX293bmVyLVx1MDAzZW9yZGVyLCBtaWdyYXRldHlwZV9uYW1lc1ttdF0sIGdmcF9tYXNrLCBcdTAwMjZnZnBfbWFzayxcbiBcdFx0IHBhZ2Vfb3duZXItXHUwMDNlcGlkLCBwYWdlX293bmVyLVx1MDAzZXRnaWQsIHBhZ2Vfb3duZXItXHUwMDNlY29tbSxcbi1cdFx0IHBhZ2Vfb3duZXItXHUwMDNldHNfbnNlYywgcGFnZV9vd25lci1cdTAwM2VmcmVlX3RzX25zZWMpO1xuK1x0XHQgcGFnZV9vd25lci1cdTAwM2V0c19uc2VjKTtcbiBcbiBcdGhhbmRsZSA9IFJFQURfT05DRShwYWdlX293bmVyLVx1MDAzZWhhbmRsZSk7XG4gXHRpZiAoIWhhbmRsZSlcbkBAIC02NDUsMTIgKzY2OCwxMyBAQCB2b2lkIF9fZHVtcF9wYWdlX293bmVyKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuIFx0aWYgKCFoYW5kbGUpIHtcbiBcdFx0cHJfYWxlcnQoXCJwYWdlX293bmVyIGZyZWUgc3RhY2sgdHJhY2UgbWlzc2luZ1xcblwiKTtcbiBcdH0gZWxzZSB7XG4tXHRcdHByX2FsZXJ0KFwicGFnZSBsYXN0IGZyZWUgcGlkICVkIHRnaWQgJWQgc3RhY2sgdHJhY2U6XFxuXCIsXG4tXHRcdFx0ICBwYWdlX293bmVyLVx1MDAzZWZyZWVfcGlkLCBwYWdlX293bmVyLVx1MDAzZWZyZWVfdGdpZCk7XG4rXHRcdHByX2FsZXJ0KFwicGFnZSBsYXN0IGZyZWUgcGlkICVkIHRnaWQgJWQgdHMgJWxsdSBzdGFjayB0cmFjZTpcXG5cIixcbitcdFx0XHQgIHBhZ2Vfb3duZXItXHUwMDNlZnJlZV9waWQsIHBhZ2Vfb3duZXItXHUwMDNlZnJlZV90Z2lkLFxuK1x0XHRcdCAgcGFnZV9vd25lci1cdTAwM2VmcmVlX3RzX25zZWMpO1xuIFx0XHRzdGFja19kZXBvdF9wcmludChoYW5kbGUpO1xuIFx0fVxuIFxuLVx0aWYgKHBhZ2Vfb3duZXItXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbiAhPSAtMSlcbitcdGlmIChwYWdlX293bmVyLVx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb24gIT0gTVJfTkVWRVIpXG4gXHRcdHByX2FsZXJ0KFwicGFnZSBoYXMgYmVlbiBtaWdyYXRlZCwgbGFzdCBtaWdyYXRlIHJlYXNvbjogJXNcXG5cIixcbiBcdFx0XHRtaWdyYXRlX3JlYXNvbl9uYW1lc1twYWdlX293bmVyLVx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb25dKTtcbiBcdHBhZ2VfZXh0X3B1dChwYWdlX2V4dCk7XG5AQCAtNjk3LDEzICs3MjEsOCBAQCByZWFkX3BhZ2Vfb3duZXIoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxuIFx0XHR9XG4gXG4gXHRcdHBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xuLVx0XHRpZiAoUGFnZUJ1ZGR5KHBhZ2UpKSB7XG4tXHRcdFx0dW5zaWduZWQgbG9uZyBmcmVlcGFnZV9vcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcbi1cbi1cdFx0XHRpZiAoZnJlZXBhZ2Vfb3JkZXIgXHUwMDNjPSBNQVhfUEFHRV9PUkRFUilcbi1cdFx0XHRcdHBmbiArPSAoMVVMIFx1MDAzY1x1MDAzYyBmcmVlcGFnZV9vcmRlcikgLSAxO1xuK1x0XHRpZiAoc2tpcF9idWRkeV9wYWdlcyhcdTAwMjZwZm4sIHBhZ2UpKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9XG4gXG4gXHRcdHBhZ2VfZXh0ID0gcGFnZV9leHRfZ2V0KHBhZ2UpO1xuIFx0XHRpZiAodW5saWtlbHkoIXBhZ2VfZXh0KSlcbkBAIC03OTgsMjAgKzgxNyw4IEBAIHN0YXRpYyB2b2lkIGluaXRfcGFnZXNfaW5fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSlcbiBcdFx0XHRpZiAocGFnZV96b25lKHBhZ2UpICE9IHpvbmUpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIFRvIGF2b2lkIGhhdmluZyB0byBncmFiIHpvbmUtXHUwMDNlbG9jaywgYmUgYSBsaXR0bGVcbi1cdFx0XHQgKiBjYXJlZnVsIHdoZW4gcmVhZGluZyBidWRkeSBwYWdlIG9yZGVyLiBUaGUgb25seVxuLVx0XHRcdCAqIGRhbmdlciBpcyB0aGF0IHdlIHNraXAgdG9vIG11Y2ggYW5kIHBvdGVudGlhbGx5IG1pc3Ncbi1cdFx0XHQgKiBzb21lIGVhcmx5IGFsbG9jYXRlZCBwYWdlcywgd2hpY2ggaXMgYmV0dGVyIHRoYW5cbi1cdFx0XHQgKiBoZWF2eSBsb2NrIGNvbnRlbnRpb24uXG4tXHRcdFx0ICovXG4tXHRcdFx0aWYgKFBhZ2VCdWRkeShwYWdlKSkge1xuLVx0XHRcdFx0dW5zaWduZWQgbG9uZyBvcmRlciA9IGJ1ZGR5X29yZGVyX3Vuc2FmZShwYWdlKTtcbi1cbi1cdFx0XHRcdGlmIChvcmRlciBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgb3JkZXIgXHUwMDNjPSBNQVhfUEFHRV9PUkRFUilcbi1cdFx0XHRcdFx0cGZuICs9ICgxVUwgXHUwMDNjXHUwMDNjIG9yZGVyKSAtIDE7XG4rXHRcdFx0aWYgKHNraXBfYnVkZHlfcGFnZXMoXHUwMDI2cGZuLCBwYWdlKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdH1cbiBcbiBcdFx0XHRpZiAoUGFnZVJlc2VydmVkKHBhZ2UpKVxuIFx0XHRcdFx0Y29udGludWU7XG5AQCAtODI2LDcgKzgzMyw3IEBAIHN0YXRpYyB2b2lkIGluaXRfcGFnZXNfaW5fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSlcbiBcbiBcdFx0XHQvKiBGb3VuZCBlYXJseSBhbGxvY2F0ZWQgcGFnZSAqL1xuIFx0XHRcdF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGVhcmx5X2hhbmRsZSwgMCwgMCxcbi1cdFx0XHRcdFx0XHQgICAtMSwgbG9jYWxfY2xvY2soKSwgY3VycmVudC1cdTAwM2VwaWQsXG4rXHRcdFx0XHRcdFx0ICAgTVJfTkVWRVIsIGxvY2FsX2Nsb2NrKCksIGN1cnJlbnQtXHUwMDNlcGlkLFxuIFx0XHRcdFx0XHRcdCAgIGN1cnJlbnQtXHUwMDNldGdpZCwgY3VycmVudC1cdTAwM2Vjb21tKTtcbiBcdFx0XHRjb3VudCsrO1xuIGV4dF9wdXRfY29udGludWU6XG5AQCAtODg3LDcgKzg5NCw3IEBAIHN0YXRpYyB2b2lkICpzdGFja19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdiwgbG9mZl90ICpwcG9zKVxuIFx0cmV0dXJuIHN0YWNrO1xuIH1cbiBcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZDtcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWdlc190aHJlc2hvbGQ7XG4gXG4gc3RhdGljIGludCBzdGFja19wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4ge1xuQEAgLTkwNCw3ICs5MTEsNyBAQCBzdGF0aWMgaW50IHN0YWNrX3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbiBcdG5yX2Jhc2VfcGFnZXMgPSByZWZjb3VudF9yZWFkKFx1MDAyNnN0YWNrX3JlY29yZC1cdTAwM2Vjb3VudCkgLSAxO1xuIFxuIFx0aWYgKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgU1RBQ0tfUFJJTlRfRkxBR19QQUdFUyBcdTAwMjZcdTAwMjZcbi1cdCAgICAobnJfYmFzZV9wYWdlcyBcdTAwM2MgMSB8fCBucl9iYXNlX3BhZ2VzIFx1MDAzYyBwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZCkpXG4rXHQgICAgKG5yX2Jhc2VfcGFnZXMgXHUwMDNjIDEgfHwgbnJfYmFzZV9wYWdlcyBcdTAwM2MgcGFnZXNfdGhyZXNob2xkKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRpZiAoY3R4LVx1MDAzZWZsYWdzIFx1MDAyNiBTVEFDS19QUklOVF9GTEFHX1NUQUNLKSB7XG5AQCAtOTI2LDE2ICs5MzMsMTYgQEAgc3RhdGljIHZvaWQgc3RhY2tfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4ge1xuIH1cbiBcbi1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHBhZ2Vfb3duZXJfc3RhY2tfb3AgPSB7XG4rc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzdGFja19vcCA9IHtcbiBcdC5zdGFydFx0PSBzdGFja19zdGFydCxcbiBcdC5uZXh0XHQ9IHN0YWNrX25leHQsXG4gXHQuc3RvcFx0PSBzdGFja19zdG9wLFxuIFx0LnNob3dcdD0gc3RhY2tfcHJpbnRcbiB9O1xuIFxuLXN0YXRpYyBpbnQgcGFnZV9vd25lcl9zdGFja19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuK3N0YXRpYyBpbnQgc3RhY2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB7XG4tXHRpbnQgcmV0ID0gc2VxX29wZW5fcHJpdmF0ZShmaWxlLCBcdTAwMjZwYWdlX293bmVyX3N0YWNrX29wLFxuK1x0aW50IHJldCA9IHNlcV9vcGVuX3ByaXZhdGUoZmlsZSwgXHUwMDI2c3RhY2tfb3AsXG4gXHRcdFx0XHQgICBzaXplb2Yoc3RydWN0IHN0YWNrX3ByaW50X2N0eCkpO1xuIFxuIFx0aWYgKCFyZXQpIHtcbkBAIC05NDgsMjggKzk1NSwyNiBAQCBzdGF0aWMgaW50IHBhZ2Vfb3duZXJfc3RhY2tfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBhZ2Vfb3duZXJfc3RhY2tfZm9wcyA9IHtcbi1cdC5vcGVuXHRcdD0gcGFnZV9vd25lcl9zdGFja19vcGVuLFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN0YWNrX2ZvcHMgPSB7XG4rXHQub3Blblx0XHQ9IHN0YWNrX29wZW4sXG4gXHQucmVhZFx0XHQ9IHNlcV9yZWFkLFxuIFx0Lmxsc2Vla1x0XHQ9IHNlcV9sc2VlayxcbiBcdC5yZWxlYXNlXHQ9IHNlcV9yZWxlYXNlX3ByaXZhdGUsXG4gfTtcbiBcbi1zdGF0aWMgaW50IHBhZ2Vfb3duZXJfdGhyZXNob2xkX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbClcbitzdGF0aWMgaW50IHRocmVzaG9sZF9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpXG4ge1xuLVx0KnZhbCA9IFJFQURfT05DRShwYWdlX293bmVyX3BhZ2VzX3RocmVzaG9sZCk7XG4rXHQqdmFsID0gUkVBRF9PTkNFKHBhZ2VzX3RocmVzaG9sZCk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBwYWdlX293bmVyX3RocmVzaG9sZF9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbClcbitzdGF0aWMgaW50IHRocmVzaG9sZF9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbClcbiB7XG4tXHRXUklURV9PTkNFKHBhZ2Vfb3duZXJfcGFnZXNfdGhyZXNob2xkLCB2YWwpO1xuK1x0V1JJVEVfT05DRShwYWdlc190aHJlc2hvbGQsIHZhbCk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUocGFnZV9vd25lcl90aHJlc2hvbGRfZm9wcywgXHUwMDI2cGFnZV9vd25lcl90aHJlc2hvbGRfZ2V0LFxuLVx0XHRcdFx1MDAyNnBhZ2Vfb3duZXJfdGhyZXNob2xkX3NldCwgXCIlbGx1XCIpO1xuLVxuK0RFRklORV9TSU1QTEVfQVRUUklCVVRFKHRocmVzaG9sZF9mb3BzLCBcdTAwMjZ0aHJlc2hvbGRfZ2V0LCBcdTAwMjZ0aHJlc2hvbGRfc2V0LCBcIiVsbHVcXG5cIik7XG4gXG4gc3RhdGljIGludCBfX2luaXQgcGFnZW93bmVyX2luaXQodm9pZClcbiB7XG5AQCAtOTg1LDE3ICs5OTAsMTcgQEAgc3RhdGljIGludCBfX2luaXQgcGFnZW93bmVyX2luaXQodm9pZClcbiBcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCJzaG93X3N0YWNrc1wiLCAwNDAwLCBkaXIsXG4gXHRcdFx0ICAgICh2b2lkICopKFNUQUNLX1BSSU5UX0ZMQUdfU1RBQ0sgfFxuIFx0XHRcdFx0ICAgICBTVEFDS19QUklOVF9GTEFHX1BBR0VTKSxcbi1cdFx0XHQgICAgIFx1MDAyNnBhZ2Vfb3duZXJfc3RhY2tfZm9wcyk7XG4rXHRcdFx0ICAgICBcdTAwMjZzdGFja19mb3BzKTtcbiBcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCJzaG93X2hhbmRsZXNcIiwgMDQwMCwgZGlyLFxuIFx0XHRcdCAgICAodm9pZCAqKShTVEFDS19QUklOVF9GTEFHX0hBTkRMRSB8XG4gXHRcdFx0XHQgICAgIFNUQUNLX1BSSU5UX0ZMQUdfUEFHRVMpLFxuLVx0XHRcdCAgICBcdTAwMjZwYWdlX293bmVyX3N0YWNrX2ZvcHMpO1xuK1x0XHRcdCAgICBcdTAwMjZzdGFja19mb3BzKTtcbiBcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCJzaG93X3N0YWNrc19oYW5kbGVzXCIsIDA0MDAsIGRpcixcbiBcdFx0XHQgICAgKHZvaWQgKikoU1RBQ0tfUFJJTlRfRkxBR19TVEFDSyB8XG4gXHRcdFx0XHQgICAgIFNUQUNLX1BSSU5UX0ZMQUdfSEFORExFKSxcbi1cdFx0XHQgICAgXHUwMDI2cGFnZV9vd25lcl9zdGFja19mb3BzKTtcbitcdFx0XHQgICAgXHUwMDI2c3RhY2tfZm9wcyk7XG4gXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwiY291bnRfdGhyZXNob2xkXCIsIDA2MDAsIGRpciwgTlVMTCxcbi1cdFx0XHQgICAgXHUwMDI2cGFnZV9vd25lcl90aHJlc2hvbGRfZm9wcyk7XG4rXHRcdFx0ICAgIFx1MDAyNnRocmVzaG9sZF9mb3BzKTtcbiBcdHJldHVybiAwO1xuIH1cbiBsYXRlX2luaXRjYWxsKHBhZ2Vvd25lcl9pbml0KVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDI6MDc6NDcuMDUzOTMyMzY0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQyNTkxNzY3OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXM6IFBhZ2UgTWlncmF0aW9uIGFuZCBPd25lciBSZWZhY3RvcmluZyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgcGF0Y2ggZG93bi4gVGhlIHByaW1hcnkgZm9jdXMgc2VlbXMgdG8gYmUgYSBjbGVhbnVwIGFuZCByZWZhY3RvcmluZyBlZmZvcnQgYXJvdW5kIHBhZ2UgbWlncmF0aW9uIGFuZCB0aGUgcGFnZSBvd25lciBmdW5jdGlvbmFsaXR5LiBUaGUgZmlyc3QgdGhpbmcgSSBub3RpY2UgaXMgYSBwZXJ2YXNpdmUgdHlwZSBjaGFuZ2U6IGBpbnQgcmVhc29uYCBpcyBiZWluZyBzd2FwcGVkIGZvciBgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb25gIGFjcm9zcyBzZXZlcmFsIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHBhZ2UgbWlncmF0aW9uIGFuZCB0aGUgcGFnZSBvd25lci4gVGhleSd2ZSBhbHNvIGludHJvZHVjZWQgYE1SX05FVkVSYCB0byB0aGUgYGVudW0gbWlncmF0ZV9yZWFzb25gIGVudW0gYW5kIGFyZSB1c2luZyBpdCBpbiBgcGFnZV9vd25lci5jYCB3aGVyZSBgLTFgIHdhcyBwcmV2aW91c2x5IHVzZWQuXG5cbkxvb2tpbmcgaW50byB0aGUgYG1tL3BhZ2Vfb3duZXIuY2AgY2hhbmdlcyBtb3JlIGNsb3NlbHksIHRoZXJlJ3MgYSBoZWxwZXIgZnVuY3Rpb24sIGBza2lwX2J1ZGR5X3BhZ2VzYCwgaW50cm9kdWNlZC4gVGhpcyBzZWVtcyB0byBjb25zb2xpZGF0ZSBzb21lIGJ1ZGR5IHBhZ2Ugc2tpcHBpbmcgbG9naWMuIEV4YW1pbmluZyB0aGUgY29kZSwgdGhlIGNoYW5nZSBpbiBgc2tpcF9idWRkeV9wYWdlc2AgcmVwbGFjZXMgaW5saW5lIGNvZGUgdGhhdCB3YXMgcHJldmlvdXNseSBpbmxpbmVkOyB0aGVyZSdzIGEgbWlub3IgbG9naWNhbCBjaGFuZ2UgaW4gYGluaXRfcGFnZXNfaW5fem9uZWAsIHdoZXJlIGBpZiAob3JkZXIgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IG9yZGVyIFx1MDAzYz0gTUFYX1BBR0VfT1JERVIpYCBiZWNvbWVzIGBpZiAob3JkZXIgXHUwMDNjPSBNQVhfUEFHRV9PUkRFUilgLiBUaGlzIG1lYW5zIGl0IHdpbGwgcGVyZm9ybSBhIG5vLW9wIHdoZW4gYG9yZGVyID09IDBgIChhZGRpbmcgMCB0byB0aGUgcGFnZSBmcmFtZSBudW1iZXIpLCBhbmQgSSBkb24ndCBzZWUgYW55IGZ1bmN0aW9uYWwgZGlmZmVyZW5jZSBpbiB0aGF0LlxuXG5XZSd2ZSBnb3Qgc29tZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBmb3IgbWVtY2cgc3VwcG9ydCwgYW5kIHRoZXJlJ3MgYSB0d2VhayB0byB0aGUgb3V0cHV0IG9mIGBfX2R1bXBfcGFnZV9vd25lcmAsIHNwZWNpZmljYWxseSB0aGUgYHByX2FsZXJ0YCBjYWxscy4gVGhlIGBmcmVlX3RzX25zZWNgIGZpZWxkIGlzIG1vdmVkIGJldHdlZW4gdGhlIHByaW50IHN0YXRlbWVudHMsIGFuZCBJIHNlZSBhIGNoYW5nZSBhZGRpbmcgYSBuZXdsaW5lIGNoYXJhY3RlciB0byBvbmUgb2YgdGhlIGZvcm1hdCBzdHJpbmdzLiBNaW5vciBjaGFuZ2VzLCBidXQgbm90aGluZyB0aGF0IHdvdWxkIGxpa2VseSBiZSBmdW5jdGlvbmFsbHkgaW1wYWN0ZnVsLlxuXG5UaGVyZSdzIGFsc28gc29tZSByZW5hbWluZyBnb2luZyBvbjogdmFyaWFibGVzIGFuZCBkZWJ1Z2ZzIGZpbGUgbmFtZXMgYXJlIGJlaW5nIG1hZGUgbW9yZSBjb25zaXN0ZW50LiBgcGFnZV9vd25lcl9wYWdlc190aHJlc2hvbGRgIGJlY29tZXMgYHBhZ2VzX3RocmVzaG9sZGAsIGBwYWdlX293bmVyX3N0YWNrX29wYCBiZWNvbWVzIGBzdGFja19vcGAsIGV0Yy4gSXQncyBhbGwgcmVmYWN0b3JpbmcsIG1vc3RseSB0byBpbXByb3ZlIHJlYWRhYmlsaXR5LlxuXG5MZXQncyBzZWU6IGBNUl9ORVZFUmAgaXMgYmVpbmcgdXNlZCBpbiBgX191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGVgLiBUaGUgY29tcGFyaXNvbiBgcGFnZV9vd25lci1cdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uICE9IE1SX05FVkVSYCByZXBsYWNlcyBgIT0gLTFgLlxuXG5BbHJpZ2h0LCBJJ20gbm90IHNlZWluZyBhbnkgaW50cm9kdWN0aW9uIG9mIG5ldyAqZnVuY3Rpb25hbCogbG9naWMgdGhhdCB3b3VsZCBiZSB3b3J0aCBmdXp6aW5nLiBUaGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IHR5cGUgY29udmVyc2lvbnMsIG1pbm9yIGxvZ2ljIGFkanVzdG1lbnRzIChsaWtlIHRoZSBuby1vcCBpbiBgc2tpcF9idWRkeV9wYWdlc2ApLCByZWZhY3RvcmluZywgYW5kIGNvc21ldGljIGNoYW5nZXMgdG8gcHJpbnQgb3V0cHV0IGFuZCB2YXJpYWJsZSBuYW1lcy4gSXQncyBlc3NlbnRpYWxseSBhIGNsZWFudXAgcGF0Y2ggdGhhdCBlbmhhbmNlcyBtYWludGFpbmFiaWxpdHkgYW5kIHJlYWRhYmlsaXR5LCBidXQgZG9lc24ndCBjaGFuZ2Ugd2hhdCB0aGUgY29kZSBhY3R1YWxseSAqZG9lcyouIEkgZG9uJ3QgdGhpbmsgYW55IG9mIHRoaXMgcmVxdWlyZXMgZnV6emluZywgaXQgY2FuIGJlIHNhZmVseSBtYXJrZWQgYXMgV29ydGhGdXp6aW5nPWZhbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODEzLCJPdXRwdXRUb2tlbnMiOjg2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQzNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAyOjA4OjAxLjMxMzExMDczM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29uc2lzdHMgZW50aXJlbHkgb2YgcmVmYWN0b3JpbmcgKGNoYW5naW5nIGludCB0byBlbnVtIG1pZ3JhdGVfcmVhc29uKSwgaW50cm9kdWNpbmcgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIHNraXBwaW5nIGJ1ZGR5IHBhZ2VzICh3aXRoIG5vIGZ1bmN0aW9uYWwgY2hhbmdlKSwgcmVuYW1pbmcgdmFyaWFibGVzL2Z1bmN0aW9ucywgYW5kIG1vZGlmeWluZyBwcmludGsvdHJhY2Vwb2ludCBvdXRwdXRzLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBsb2dpYyBjaGFuZ2VzIHRoYXQgd2FycmFudCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29uc2lzdHMgZW50aXJlbHkgb2YgcmVmYWN0b3JpbmcgKGNoYW5naW5nIGludCB0byBlbnVtIG1pZ3JhdGVfcmVhc29uKSwgaW50cm9kdWNpbmcgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIHNraXBwaW5nIGJ1ZGR5IHBhZ2VzICh3aXRoIG5vIGZ1bmN0aW9uYWwgY2hhbmdlKSwgcmVuYW1pbmcgdmFyaWFibGVzL2Z1bmN0aW9ucywgYW5kIG1vZGlmeWluZyBwcmludGsvdHJhY2Vwb2ludCBvdXRwdXRzLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBsb2dpYyBjaGFuZ2VzIHRoYXQgd2FycmFudCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowr97jk[1] Phase: Running StartedAt: 2026-06-30 02:08:12 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr97jk[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-06-30 02:08:12 +0000 UTC FinishedAt: 2026-06-30 02:08:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}