Name: series-workflowm7bqc Phase: Succeeded StartedAt: 2026-08-01 04:19:36 +0000 UTC FinishedAt: 2026-08-01 08:35:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7bqc[0] Phase: Succeeded StartedAt: 2026-08-01 04:19:36 +0000 UTC FinishedAt: 2026-08-01 04:36:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7bqc[0].run-triage Phase: Succeeded StartedAt: 2026-08-01 04:19:36 +0000 UTC FinishedAt: 2026-08-01 04:36:03 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "4a0bd262df757b25fc4e2a53c947317c119ced4e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211", "MAC80211_HWSIM", "CFG80211" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "4a0bd262df757b25fc4e2a53c947317c119ced4e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211", "MAC80211_HWSIM", "CFG80211" ], "series_id": "743524f3-6661-4a2d-9deb-711774fced14" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ieee80211_rx_list", "ieee80211_rx_napi", "ieee80211_mgmt_tx", "nl80211_tx_mgmt", "nl80211_send_mgmt", "ieee80211_tx_skb_tid" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA0OjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjExX3J4X2xpc3QmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3J4X25hcGkmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX21nbXRfdHgmIzM0OywKICAgICYjMzQ7bmw4MDIxMV90eF9tZ210JiMzNDssCiAgICAmIzM0O25sODAyMTFfc2VuZF9tZ210JiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV90eF9za2JfdGlkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtYWM4MDIxMSBSWCBwYXRoIHRvIGhhbmRsZSBNTE8gKE11bHRpLUxpbmsgT3BlcmF0aW9uKSBsaW5rIElEcyBtb3JlIHJvYnVzdGx5LCByZW1vdmluZyBgbGlua192YWxpZGAgYW5kIHBhc3NpbmcgYGxpbmtfc3RhYCBkaXJlY3RseS4gSXQgYWxzbyBhZGRzIGEgYG5vX3N0YWAgZmxhZyBmb3IgbWFuYWdlbWVudCBmcmFtZSBUWC9SWC4gVGhlc2UgYXJlIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIG1hYzgwMjExIGFuZCBjZmc4MDIxMSwgcmVhY2hhYmxlIHZpYSBtYWM4MDIxMV9od3NpbSBhbmQgbmw4MDIxMSBuZXRsaW5rIGludGVyZmFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNDozNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDllMTJhZTMxNWZlZTUwZTdjZDYwMjI2N2VlNjVkN2I4YmU0YjI1YjVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDA0OjM1OjIwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZHBfcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZHBfcnguY1xuaW5kZXggMzM0MjU3MDdjMDg0Mi4uZmJiM2QxOGY1NWRkZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZHBfcnguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kcF9yeC5jXG5AQCAtMjUwMCw3ICYjNDM7MjUwMCw3IEBAIHN0YXRpYyB2b2lkIGF0aDExa19kcF9yeF9kZWxpdmVyX21zZHUoc3RydWN0IGF0aDExayAqYXIsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwXG4gXHQgICAgIShpc19tY2JjIFx1MDAyNlx1MDAyNiByeF9zdGF0dXMtXHUwMDNlZmxhZyBcdTAwMjYgUlhfRkxBR19ERUNSWVBURUQpKVxuIFx0XHRyeF9zdGF0dXMtXHUwMDNlZmxhZyB8PSBSWF9GTEFHXzgwMjM7XG4gXG4tXHRpZWVlODAyMTFfcnhfbmFwaShhci1cdTAwM2VodywgcHVic3RhLCBtc2R1LCBuYXBpKTtcbiYjNDM7XHRpZWVlODAyMTFfcnhfbmFwaShhci1cdTAwM2VodywgcHVic3RhID8gXHUwMDI2cHVic3RhLVx1MDAzZWRlZmxpbmsgOiBOVUxMLCBtc2R1LCBuYXBpKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgYXRoMTFrX2RwX3J4X2NoZWNrX253aWZpX2hkcl9sZW5fdmFsaWQoc3RydWN0IGF0aDExa19iYXNlICphYixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX21vbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9tb24uY1xuaW5kZXggN2Q1YmU3N2IwODFmOC4uMWZhZjE4OTZkMGFiMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfbW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfbW9uLmNcbkBAIC01MDMsOCAmIzQzOzUwMyw2IEBAIHZvaWQgYXRoMTJrX2RwX21vbl9yeF9kZWxpdmVyX21zZHUoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LFxuIFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cztcbiBcdHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGUgKmhlID0gTlVMTDtcbiBcbi1cdHN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkID0gMDtcbi1cbiBcdGlmICgoc3RhdHVzLVx1MDAzZWVuY29kaW5nID09IFJYX0VOQ19IRSkgXHUwMDI2XHUwMDI2ICEoc3RhdHVzLVx1MDAzZWZsYWcgXHUwMDI2IFJYX0ZMQUdfUkFESU9UQVBfSEUpIFx1MDAyNlx1MDAyNlxuIFx0ICAgICEoc3RhdHVzLVx1MDAzZWZsYWcgXHUwMDI2IFJYX0ZMQUdfU0tJUF9NT05JVE9SKSkge1xuIFx0XHRoZSA9IHNrYl9wdXNoKG1zZHUsIHNpemVvZihrbm93bikpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcnguY1xuaW5kZXggOGZhMGU5MGI0NTMxNi4uODQ3YWQyOGZkMzBiMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcnguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9yeC5jXG5AQCAtMTM3NSw2ICYjNDM7MTM3NSw3IEBAIHZvaWQgYXRoMTJrX2RwX3J4X2RlbGl2ZXJfbXNkdShzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsIHN0cnVjdCBuYXBpX3N0cnVjXG4gXHRzdHJ1Y3QgYXRoMTJrX2RwICpkcCA9IGRwX3BkZXYtXHUwMDNlZHA7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzO1xuIFx0c3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YTtcbiYjNDM7XHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3B1YnN0YSA9IE5VTEw7XG4gXHRzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKnBlZXI7XG4gXHRzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiID0gQVRIMTJLX1NLQl9SWENCKG1zZHUpO1xuIFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IHJ4X2luZm8tXHUwMDNlcnhfc3RhdHVzO1xuQEAgLTEzODQsOSAmIzQzOzEzODUsMTkgQEAgdm9pZCBhdGgxMmtfZHBfcnhfZGVsaXZlcl9tc2R1KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwgc3RydWN0IG5hcGlfc3RydWNcbiBcbiBcdHB1YnN0YSA9IHBlZXIgPyBwZWVyLVx1MDAzZXN0YSA6IE5VTEw7XG4gXG4tXHRzdGF0dXMtXHUwMDNlbGlua192YWxpZCA9IDA7XG4tXHRpZiAocHVic3RhIFx1MDAyNlx1MDAyNiBwdWJzdGEtXHUwMDNldmFsaWRfbGlua3MpXG4tXHRcdGF0aDEya19od19zZXRfcnhfbGlua19pZChkcC1cdTAwM2Vod19wYXJhbXMsIHBlZXIsIHJ4Y2IsIHN0YXR1cyk7XG4mIzQzO1x0aWYgKHB1YnN0YSkge1xuJiM0MztcdFx0aWYgKHB1YnN0YS1cdTAwM2V2YWxpZF9saW5rcykge1xuJiM0MztcdFx0XHR1OCBsaW5rX2lkID1cbiYjNDM7XHRcdFx0XHRhdGgxMmtfaHdfZ2V0X3J4X2xpbmtfaWQoZHAtXHUwMDNlaHdfcGFyYW1zLCBwZWVyLFxuJiM0MztcdFx0XHRcdFx0XHRcdCByeGNiLCBzdGF0dXMpO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKGxpbmtfaWQgXHUwMDNlIDApXG4mIzQzO1x0XHRcdFx0bGlua19wdWJzdGEgPVxuJiM0MztcdFx0XHRcdFx0cmN1X2RlcmVmZXJlbmNlKHB1YnN0YS1cdTAwM2VsaW5rW2xpbmtfaWRdKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGxpbmtfcHVic3RhID0gXHUwMDI2cHVic3RhLVx1MDAzZWRlZmxpbms7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuIFxuIFx0YXRoMTJrX2RiZyhkcC1cdTAwM2VhYiwgQVRIMTJLX0RCR19EQVRBLFxuIFx0XHQgICBcJiMzNDtyeCBza2IgJXAgbGVuICV1IHBlZXIgJXBNICVkICVzIHNuICV1ICVzJXMlcyVzJXMlcyVzJXMlcyVzIHJhdGVfaWR4ICV1IHZodF9uc3MgJXUgZnJlcSAldSBiYW5kICV1IGZsYWcgMHgleCBmY3MtZXJyICVpIG1pYy1lcnIgJWkgYW1zZHUtbW9yZSAlaVxcblwmIzM0OyxcbkBAIC0xNDIyLDcgJiM0MzsxNDMzLDggQEAgdm9pZCBhdGgxMmtfZHBfcnhfZGVsaXZlcl9tc2R1KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwgc3RydWN0IG5hcGlfc3RydWNcbiBcbiBcdC8qIFRPRE86IHRyYWNlIHJ4IHBhY2tldCAqL1xuIFxuLVx0aWVlZTgwMjExX3J4X25hcGkoYXRoMTJrX3BkZXZfZHBfdG9faHcoZHBfcGRldiksIHB1YnN0YSwgbXNkdSwgbmFwaSk7XG4mIzQzO1x0aWVlZTgwMjExX3J4X25hcGkoYXRoMTJrX3BkZXZfZHBfdG9faHcoZHBfcGRldiksIGxpbmtfcHVic3RhLCBtc2R1LFxuJiM0MztcdFx0XHQgIG5hcGkpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGF0aDEya19kcF9yeF9kZWxpdmVyX21zZHUpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaHcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaHcuaFxuaW5kZXggNDljZmQ1ZGZjNzBhNi4uMjY4ZjBhOGZkNDZkZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaHcuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9ody5oXG5AQCAtMjQ4LDkgJiM0MzsyNDgsOSBAQCBzdHJ1Y3QgYXRoMTJrX2h3X29wcyB7XG4gXHRib29sICgqZHBfc3JuZ19pc190eF9jb21wX3JpbmcpKGludCByaW5nX251bSk7XG4gXHRib29sICgqaXNfZnJhbWVfbGlua19hZ25vc3RpYykoc3RydWN0IGF0aDEya19saW5rX3ZpZiAqYXJ2aWYsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210KTtcbi1cdHZvaWQgKCpzZXRfcnhfbGlua19pZCkoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLFxuLVx0XHRcdCAgICAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxuLVx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKTtcbiYjNDM7XHRpbnQgKCpnZXRfcnhfbGlua19pZCkoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKTtcbiB9O1xuIFxuIHN0YXRpYyBpbmxpbmVcbkBAIC0yODEsMTMgJiM0MzsyODEsMTUgQEAgc3RhdGljIGlubGluZSBpbnQgYXRoMTJrX2h3X21hY19pZF90b19zcm5nX2lkKGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfcGFyYW1zICpodyxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgYXRoMTJrX2h3X3NldF9yeF9saW5rX2lkKGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfcGFyYW1zICpodyxcbi1cdFx0XHRcdFx0ICAgIHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcbi1cdFx0XHRcdFx0ICAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsXG4tXHRcdFx0XHRcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBhdGgxMmtfaHdfZ2V0X3J4X2xpbmtfaWQoY29uc3Qgc3RydWN0IGF0aDEya19od19wYXJhbXMgKmh3LFxuJiM0MztcdFx0XHRcdFx0ICAgc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLFxuJiM0MztcdFx0XHRcdFx0ICAgc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYixcbiYjNDM7XHRcdFx0XHRcdCAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpXG4ge1xuLVx0aWYgKGh3LVx1MDAzZWh3X29wcy1cdTAwM2VzZXRfcnhfbGlua19pZClcbi1cdFx0aHctXHUwMDNlaHdfb3BzLVx1MDAzZXNldF9yeF9saW5rX2lkKGRwX3BlZXIsIHJ4Y2IsIHN0YXR1cyk7XG4mIzQzO1x0aWYgKGh3LVx1MDAzZWh3X29wcy1cdTAwM2VnZXRfcnhfbGlua19pZClcbiYjNDM7XHRcdHJldHVybiBody1cdTAwM2Vod19vcHMtXHUwMDNlZ2V0X3J4X2xpbmtfaWQoZHBfcGVlciwgcnhjYiwgc3RhdHVzKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC0xO1xuIH1cbiBcbiBzdHJ1Y3QgYXRoMTJrX2Z3X2llIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmNcbmluZGV4IDk1ZDg3ZGQ2Nzg3MmYuLjhiNzIyZWUwYWQ4ZmEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguY1xuQEAgLTIzMTcsMTcgJiM0MzsyMzE3LDE2IEBAIGF0aDEya193aWZpN19kcF9yeGRlc2NfbXBkdV92YWxpZChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLFxuIFx0cmV0dXJuIHRsdl90YWcgPT0gSEFMX1JYX01QRFVfU1RBUlQ7XG4gfVxuIFxuLXZvaWRcbi1hdGgxMmtfd2lmaTdfZHBfcnhfc2V0X2xpbmtfaWRfcWNuOTI3NChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXG4mIzQzO2ludFxuJiM0MzthdGgxMmtfd2lmaTdfZHBfcnhfZ2V0X2xpbmtfaWRfcWNuOTI3NChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYixcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKVxuIHtcbi1cdHN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkID0gMTtcbi1cdHN0YXR1cy1cdTAwM2VsaW5rX2lkID0gZHBfcGVlci1cdTAwM2Vod19saW5rc1tyeGNiLVx1MDAzZWh3X2xpbmtfaWRdO1xuJiM0MztcdHJldHVybiBkcF9wZWVyLVx1MDAzZWh3X2xpbmtzW3J4Y2ItXHUwMDNlaHdfbGlua19pZF07XG4gfVxuIFxuLXZvaWRcbi1hdGgxMmtfd2lmaTdfZHBfcnhfc2V0X2xpbmtfaWRfd2NuNzg1MChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXG4mIzQzO2ludFxuJiM0MzthdGgxMmtfd2lmaTdfZHBfcnhfZ2V0X2xpbmtfaWRfd2NuNzg1MChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYixcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKVxuIHtcbkBAIC0yMzQxLDEwICYjNDM7MjM0MCw5IEBAIGF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF93Y243ODUwKHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcbiBcdGxpbmtzX21hcCA9IFJFQURfT05DRShkcF9wZWVyLVx1MDAzZWxpbmtfcGVlcnNfbWFwKTtcbiBcdGZvcl9lYWNoX3NldF9iaXQoaSwgXHUwMDI2bGlua3NfbWFwLCBBVEgxMktfTlVNX01BWF9MSU5LUykge1xuIFx0XHRsaW5rX3BlZXIgPSByY3VfZGVyZWZlcmVuY2UoZHBfcGVlci1cdTAwM2VsaW5rX3BlZXJzW2ldKTtcbi1cdFx0aWYgKGxpbmtfcGVlciBcdTAwMjZcdTAwMjYgbGlua19wZWVyLVx1MDAzZXBlZXJfaWQgPT0gcnhjYi1cdTAwM2VwZWVyX2lkKSB7XG4tXHRcdFx0c3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQgPSAxO1xuLVx0XHRcdHN0YXR1cy1cdTAwM2VsaW5rX2lkID0gbGlua19wZWVyLVx1MDAzZWxpbmtfaWQ7XG4tXHRcdFx0cmV0dXJuO1xuLVx0XHR9XG4mIzQzO1x0XHRpZiAobGlua19wZWVyIFx1MDAyNlx1MDAyNiBsaW5rX3BlZXItXHUwMDNlcGVlcl9pZCA9PSByeGNiLVx1MDAzZXBlZXJfaWQpXG4mIzQzO1x0XHRcdHJldHVybiBsaW5rX3BlZXItXHUwMDNlbGlua19pZDtcbiBcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC0xO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmhcbmluZGV4IDFkM2E0Nzg4YTJkZDkuLmQ2ODQ4OWZmN2IwMzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguaFxuQEAgLTU3LDEwICYjNDM7NTcsMTAgQEAgYXRoMTJrX3dpZmk3X2RwX3J4ZGVzY19tcGR1X3ZhbGlkKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsXG4gXHRcdFx0XHQgIHN0cnVjdCBoYWxfcnhfZGVzYyAqcnhfZGVzYyk7XG4gaW50IGF0aDEya193aWZpN19kcF9yeF90aWRfZGVsZXRlX2hhbmRsZXIoc3RydWN0IGF0aDEya19iYXNlICphYixcbiBcdFx0XHRcdFx0ICBzdHJ1Y3QgYXRoMTJrX2RwX3J4X3RpZF9yeHEgKnJ4X3RpZCk7XG4tdm9pZCBhdGgxMmtfd2lmaTdfZHBfcnhfc2V0X2xpbmtfaWRfcWNuOTI3NChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXG4tXHRcdFx0XHRcdCAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxuLVx0XHRcdFx0XHQgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyk7XG4tdm9pZCBhdGgxMmtfd2lmaTdfZHBfcnhfc2V0X2xpbmtfaWRfd2NuNzg1MChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXG4tXHRcdFx0XHRcdCAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxuLVx0XHRcdFx0XHQgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyk7XG4mIzQzO2ludCBhdGgxMmtfd2lmaTdfZHBfcnhfZ2V0X2xpbmtfaWRfcWNuOTI3NChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXG4mIzQzO1x0XHRcdFx0XHQgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxuJiM0MztcdFx0XHRcdFx0ICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyk7XG4mIzQzO2ludCBhdGgxMmtfd2lmaTdfZHBfcnhfZ2V0X2xpbmtfaWRfd2NuNzg1MChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXG4mIzQzO1x0XHRcdFx0XHQgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxuJiM0MztcdFx0XHRcdFx0ICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyk7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9ody5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9ody5jXG5pbmRleCA0YzExMTllZGNhZWRjLi4zY2QzNTE0NjQyOTZjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9ody5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2h3LmNcbkBAIC0xNTgsNyAmIzQzOzE1OCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoMTJrX2h3X29wcyBxY245Mjc0X29wcyA9IHtcbiBcdC5nZXRfcmluZ19zZWxlY3RvciA9IGF0aDEya193aWZpN19od19nZXRfcmluZ19zZWxlY3Rvcl9xY245Mjc0LFxuIFx0LmRwX3NybmdfaXNfdHhfY29tcF9yaW5nID0gYXRoMTJrX3dpZmk3X2RwX3NybmdfaXNfY29tcF9yaW5nX3FjbjkyNzQsXG4gXHQuaXNfZnJhbWVfbGlua19hZ25vc3RpYyA9IGF0aDEya193aWZpN19pc19mcmFtZV9saW5rX2Fnbm9zdGljX3FjbjkyNzQsXG4tXHQuc2V0X3J4X2xpbmtfaWQgPSBhdGgxMmtfd2lmaTdfZHBfcnhfc2V0X2xpbmtfaWRfcWNuOTI3NCxcbiYjNDM7XHQuZ2V0X3J4X2xpbmtfaWQgPSBhdGgxMmtfd2lmaTdfZHBfcnhfZ2V0X2xpbmtfaWRfcWNuOTI3NCxcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoMTJrX2h3X29wcyB3Y243ODUwX29wcyA9IHtcbkBAIC0xNjksNyAmIzQzOzE2OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoMTJrX2h3X29wcyB3Y243ODUwX29wcyA9IHtcbiBcdC5nZXRfcmluZ19zZWxlY3RvciA9IGF0aDEya193aWZpN19od19nZXRfcmluZ19zZWxlY3Rvcl93Y243ODUwLFxuIFx0LmRwX3NybmdfaXNfdHhfY29tcF9yaW5nID0gYXRoMTJrX3dpZmk3X2RwX3NybmdfaXNfY29tcF9yaW5nX3djbjc4NTAsXG4gXHQuaXNfZnJhbWVfbGlua19hZ25vc3RpYyA9IGF0aDEya193aWZpN19pc19mcmFtZV9saW5rX2Fnbm9zdGljX3djbjc4NTAsXG4tXHQuc2V0X3J4X2xpbmtfaWQgPSBhdGgxMmtfd2lmaTdfZHBfcnhfc2V0X2xpbmtfaWRfd2NuNzg1MCxcbiYjNDM7XHQuZ2V0X3J4X2xpbmtfaWQgPSBhdGgxMmtfd2lmaTdfZHBfcnhfZ2V0X2xpbmtfaWRfd2NuNzg1MCxcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoMTJrX2h3X29wcyBxY2MyMDcyX29wcyA9IHtcbkBAIC0xODAsNyAmIzQzOzE4MCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoMTJrX2h3X29wcyBxY2MyMDcyX29wcyA9IHtcbiBcdC5nZXRfcmluZ19zZWxlY3RvciA9IGF0aDEya193aWZpN19od19nZXRfcmluZ19zZWxlY3Rvcl93Y243ODUwLFxuIFx0LmRwX3NybmdfaXNfdHhfY29tcF9yaW5nID0gYXRoMTJrX3dpZmk3X2RwX3NybmdfaXNfY29tcF9yaW5nX3djbjc4NTAsXG4gXHQuaXNfZnJhbWVfbGlua19hZ25vc3RpYyA9IGF0aDEya193aWZpN19pc19mcmFtZV9saW5rX2Fnbm9zdGljX3djbjc4NTAsXG4tXHQuc2V0X3J4X2xpbmtfaWQgPSBhdGgxMmtfd2lmaTdfZHBfcnhfc2V0X2xpbmtfaWRfd2NuNzg1MCxcbiYjNDM7XHQuZ2V0X3J4X2xpbmtfaWQgPSBhdGgxMmtfd2lmaTdfZHBfcnhfZ2V0X2xpbmtfaWRfd2NuNzg1MCxcbiB9O1xuIFxuICNkZWZpbmUgQVRIMTJLX1RYX1JJTkdfTUFTS18wIDB4MVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jXG5pbmRleCAyYjcwN2ZmYzFhMjBmLi41ZDYyYzRjODYxYmI5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuY1xuQEAgLTcyNjAsNyAmIzQzOzcyNjAsNiBAQCBzdGF0aWMgdm9pZCBhdGgxMmtfbWdtdF9yeF9ldmVudChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c3RydWN0IGF0aDEya193bWlfbWdtdF9yeF9hcmcgcnhfZXYgPSB7fTtcbiBcdHN0cnVjdCBhdGgxMmsgKmFyO1xuIFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpO1xuLVx0c3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSA9IE5VTEw7XG4gXHRzdHJ1Y3QgYXRoMTJrX2RwX2xpbmtfcGVlciAqcGVlcjtcbiBcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7XG4gXHRib29sIGlzXzRhZGRyX251bGxfcGt0O1xuQEAgLTczNjIsMTEgJiM0Mzs3MzYxLDYgQEAgc3RhdGljIHZvaWQgYXRoMTJrX21nbXRfcnhfZXZlbnQoc3RydWN0IGF0aDEya19iYXNlICphYiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0XHRkZXZfa2ZyZWVfc2tiKHNrYik7XG4gXHRcdFx0Z290byBleGl0O1xuIFx0XHR9XG4tXHRcdHB1YnN0YSA9IHBlZXItXHUwMDNlc3RhO1xuLVx0XHRpZiAocHVic3RhIFx1MDAyNlx1MDAyNiBwdWJzdGEtXHUwMDNldmFsaWRfbGlua3MpIHtcbi1cdFx0XHRzdGF0dXMtXHUwMDNlbGlua192YWxpZCA9IDE7XG4tXHRcdFx0c3RhdHVzLVx1MDAzZWxpbmtfaWQgPSBwZWVyLVx1MDAzZWxpbmtfaWQ7XG4tXHRcdH1cbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2ZHAtXHUwMDNlZHBfbG9jayk7XG4gXHRcdGdvdG8gc2VuZF9yeDtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hZ2cuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FnZy5jXG5pbmRleCA5NjEwMmQyYWYyY2Y5Li5jNDVjNDczMzc1MDllIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYWdnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FnZy5jXG5AQCAtNyw3ICYjNDM7Nyw4IEBAXG4gI2luY2x1ZGUgXCYjMzQ7aGNtZC5oXCYjMzQ7XG4gXG4gc3RhdGljIHZvaWRcbi1pd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbiYjNDM7aXdsX21sZF9yZW9yZGVyX3JlbGVhc2VfZnJhbWVzKHN0cnVjdCBpd2xfbWxkICptbGQsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSxcbiBcdFx0XHQgICAgICAgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgaXdsX21sZF9iYWlkX2RhdGEgKmJhaWRfZGF0YSxcbiBcdFx0XHQgICAgICAgc3RydWN0IGl3bF9tbGRfcmVvcmRlcl9idWZmZXIgKnJlb3JkZXJfYnVmLFxuQEAgLTMyLDcgJiM0MzszMyw3IEBAIGl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxuIFx0XHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoc2tiX2xpc3QpKSkge1xuIFx0XHRcdGl3bF9tbGRfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEobWxkLCBuYXBpLCBza2IsXG4gXHRcdFx0XHRcdFx0XHRyZW9yZGVyX2J1Zi1cdTAwM2VxdWV1ZSxcbi1cdFx0XHRcdFx0XHRcdHN0YSk7XG4mIzQzO1x0XHRcdFx0XHRcdFx0bGlua19zdGEpO1xuIFx0XHRcdHJlb3JkZXJfYnVmLVx1MDAzZW51bV9zdG9yZWQtLTtcbiBcdFx0fVxuIFx0fVxuQEAgLTc0LDcgJiM0Mzs3NSw3IEBAIHN0YXRpYyB2b2lkIGl3bF9tbGRfcmVsZWFzZV9mcmFtZXNfZnJvbV9ub3RpZihzdHJ1Y3QgaXdsX21sZCAqbWxkLFxuIFxuIFx0cmVvcmRlcl9idWYgPSBcdTAwMjZiYV9kYXRhLVx1MDAzZXJlb3JkZXJfYnVmW3F1ZXVlXTtcbiBcbi1cdGl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhtbGQsIGxpbmtfc3RhLVx1MDAzZXN0YSwgbmFwaSwgYmFfZGF0YSxcbiYjNDM7XHRpd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMobWxkLCBsaW5rX3N0YSwgbmFwaSwgYmFfZGF0YSxcbiBcdFx0XHRcdCAgICAgICByZW9yZGVyX2J1ZiwgbnNzbik7XG4gb3V0X3VubG9jazpcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuQEAgLTE4MCw3ICYjNDM7MTgxLDcgQEAgdm9pZCBpd2xfbWxkX2RlbF9iYShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBpbnQgcXVldWUsXG4gXHRyZW9yZGVyX2J1ZiA9IFx1MDAyNmJhX2RhdGEtXHUwMDNlcmVvcmRlcl9idWZbcXVldWVdO1xuIFxuIFx0LyogcmVsZWFzZSBhbGwgZnJhbWVzIHRoYXQgYXJlIGluIHRoZSByZW9yZGVyIGJ1ZmZlciB0byB0aGUgc3RhY2sgKi9cbi1cdGl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhtbGQsIGxpbmtfc3RhLVx1MDAzZXN0YSwgTlVMTCxcbiYjNDM7XHRpd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMobWxkLCBsaW5rX3N0YSwgTlVMTCxcbiBcdFx0XHRcdCAgICAgICBiYV9kYXRhLCByZW9yZGVyX2J1ZixcbiBcdFx0XHRcdCAgICAgICBpZWVlODAyMTFfc25fYWRkKHJlb3JkZXJfYnVmLVx1MDAzZWhlYWRfc24sXG4gXHRcdFx0XHRcdFx0XHRiYV9kYXRhLVx1MDAzZWJ1Zl9zaXplKSk7XG5AQCAtMTkzLDcgJiM0MzsxOTQsNyBAQCB2b2lkIGl3bF9tbGRfZGVsX2JhKHN0cnVjdCBpd2xfbWxkICptbGQsIGludCBxdWV1ZSxcbiAgKi9cbiBlbnVtIGl3bF9tbGRfcmVvcmRlcl9yZXN1bHRcbiBpd2xfbWxkX3Jlb3JkZXIoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuLVx0XHRpbnQgcXVldWUsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXG4mIzQzO1x0XHRpbnQgcXVldWUsIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhLFxuIFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXdsX3J4X21wZHVfZGVzYyAqZGVzYylcbiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKilza2JfbWFjX2hlYWRlcihza2IpO1xuQEAgLTIyOCwxMiAmIzQzOzIyOSwxMiBAQCBpd2xfbWxkX3Jlb3JkZXIoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuIFx0XHRyZXR1cm4gSVdMX01MRF9QQVNTX1NLQjtcbiBcbiBcdC8qIG5vIHN0YSB5ZXQgKi9cbi1cdGlmIChJV0xfRldfQ0hFQ0sobWxkLCAhc3RhLFxuJiM0MztcdGlmIChJV0xfRldfQ0hFQ0sobWxkLCAhbGlua19zdGEsXG4gXHRcdFx0IFwmIzM0O0dvdCB2YWxpZCBCQUlEIHdpdGhvdXQgYSB2YWxpZCBzdGF0aW9uIGFzc2lnbmVkIC0gJWRcXG5cJiMzNDssXG4gXHRcdFx0IGJhaWQpKVxuIFx0XHRyZXR1cm4gSVdMX01MRF9QQVNTX1NLQjtcbiBcbi1cdG1sZF9zdGEgPSBpd2xfbWxkX3N0YV9mcm9tX21hYzgwMjExKHN0YSk7XG4mIzQzO1x0bWxkX3N0YSA9IGl3bF9tbGRfc3RhX2Zyb21fbWFjODAyMTEobGlua19zdGEtXHUwMDNlc3RhKTtcbiBcbiBcdC8qIG5vdCBhIGRhdGEgcGFja2V0ICovXG4gXHRpZiAoIWllZWU4MDIxMV9pc19kYXRhX3FvcyhoZHItXHUwMDNlZnJhbWVfY29udHJvbCkgfHxcbkBAIC0zMjQsNyAmIzQzOzMyNSw3IEBAIGl3bF9tbGRfcmVvcmRlcihzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHQgKiB3aWxsIGJlIHJlbGVhc2VkIHdoZW4gdGhlIGZyYW1lIHJlbGVhc2Ugbm90aWZpY2F0aW9uIGFycml2ZXMuXG4gXHQgKi9cbiBcdGlmICghYW1zZHUgfHwgbGFzdF9zdWJmcmFtZSlcbi1cdFx0aXdsX21sZF9yZW9yZGVyX3JlbGVhc2VfZnJhbWVzKG1sZCwgc3RhLCBuYXBpLCBiYWlkX2RhdGEsXG4mIzQzO1x0XHRpd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMobWxkLCBsaW5rX3N0YSwgbmFwaSwgYmFpZF9kYXRhLFxuIFx0XHRcdFx0XHQgICAgICAgYnVmZmVyLCBuc3NuKTtcbiBcdGVsc2UgaWYgKGJ1ZmZlci1cdTAwM2VudW1fc3RvcmVkID09IDEpXG4gXHRcdGJ1ZmZlci1cdTAwM2VoZWFkX3NuID0gbnNzbjtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hZ2cuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FnZy5oXG5pbmRleCA2NTFjODBkMWM3Y2RhLi5jNmNkNWZhMjE5YmVkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYWdnLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FnZy5oXG5AQCAtMSw2ICYjNDM7MSw2IEBAXG4gLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgQlNELTMtQ2xhdXNlICovXG4gLypcbi0gKiBDb3B5cmlnaHQgKEMpIDIwMjQgSW50ZWwgQ29ycG9yYXRpb25cbiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI0LCAyMDI2IEludGVsIENvcnBvcmF0aW9uXG4gICovXG4gI2lmbmRlZiBfX2l3bF9hZ2dfaF9fXG4gI2RlZmluZSBfX2l3bF9hZ2dfaF9fXG5AQCAtMTA2LDcgJiM0MzsxMDYsNyBAQCBpbnQgaXdsX21sZF9hbXBkdV9yeF9zdG9wKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXG4gXG4gZW51bSBpd2xfbWxkX3Jlb3JkZXJfcmVzdWx0XG4gaXdsX21sZF9yZW9yZGVyKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbi1cdFx0aW50IHF1ZXVlLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxuJiM0MztcdFx0aW50IHF1ZXVlLCBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSxcbiBcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGl3bF9yeF9tcGR1X2Rlc2MgKmRlc2MpO1xuIFxuIHZvaWQgaXdsX21sZF9oYW5kbGVfZnJhbWVfcmVsZWFzZV9ub3RpZihzdHJ1Y3QgaXdsX21sZCAqbWxkLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5jXG5pbmRleCAyNjk0MzlkNzg5ZjQ2Li4wMmJkZjZjY2JjZGM5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguY1xuQEAgLTQ3LDcgJiM0Mzs0Nyw4IEBAIGl3bF9tbGRfZmlsbF9waHlfZGF0YV9mcm9tX21wZHUoc3RydWN0IGl3bF9tbGQgKm1sZCxcbiB9XG4gXG4gc3RhdGljIGlubGluZSBpbnQgaXdsX21sZF9jaGVja19wbihzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0ICAgaW50IHF1ZXVlLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKVxuJiM0MztcdFx0XHRcdCAgIGludCBxdWV1ZSxcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSlcbiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKilza2JfbWFjX2hlYWRlcihza2IpO1xuIFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXRzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG5AQCAtNzEsMTMgJiM0Mzs3MiwxMyBAQCBzdGF0aWMgaW5saW5lIGludCBpd2xfbWxkX2NoZWNrX3BuKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0LyogaWYgd2UgYXJlIGhlcmUgLSB0aGlzIGZvciBzdXJlIGlzIGVpdGhlciBDQ01QIG9yIEdDTVAgKi9cbi1cdGlmICghc3RhKSB7XG4mIzQzO1x0aWYgKCFsaW5rX3N0YSkge1xuIFx0XHRJV0xfREVCVUdfRFJPUChtbGQsXG4gXHRcdFx0ICAgICAgIFwmIzM0O2V4cGVjdGVkIGh3LWRlY3J5cHRlZCB1bmljYXN0IGZyYW1lIGZvciBzdGF0aW9uXFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC0xO1xuIFx0fVxuIFxuLVx0bWxkX3N0YSA9IGl3bF9tbGRfc3RhX2Zyb21fbWFjODAyMTEoc3RhKTtcbiYjNDM7XHRtbGRfc3RhID0gaXdsX21sZF9zdGFfZnJvbV9tYWM4MDIxMShsaW5rX3N0YS1cdTAwM2VzdGEpO1xuIFxuIFx0ZXh0aXYgPSAodTggKiloZHIgJiM0MzsgaWVlZTgwMjExX2hkcmxlbihoZHItXHUwMDNlZnJhbWVfY29udHJvbCk7XG4gXHRrZXlpZHggPSBleHRpdlszXSBcdTAwM2VcdTAwM2UgNjtcbkBAIC0xMTksMTcgJiM0MzsxMjAsMTcgQEAgc3RhdGljIGlubGluZSBpbnQgaXdsX21sZF9jaGVja19wbihzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIHZvaWQgaXdsX21sZF9wYXNzX3BhY2tldF90b19tYWM4MDIxMShzdHJ1Y3QgaXdsX21sZCAqbWxkLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBxdWV1ZSxcbi1cdFx0XHRcdCAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSlcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhKVxuIHtcbiBcdEtVTklUX1NUQVRJQ19TVFVCX1JFRElSRUNUKGl3bF9tbGRfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEsXG4tXHRcdFx0XHQgICBtbGQsIG5hcGksIHNrYiwgcXVldWUsIHN0YSk7XG4mIzQzO1x0XHRcdFx0ICAgbWxkLCBuYXBpLCBza2IsIHF1ZXVlLCBsaW5rX3N0YSk7XG4gXG4tXHRpZiAodW5saWtlbHkoaXdsX21sZF9jaGVja19wbihtbGQsIHNrYiwgcXVldWUsIHN0YSkpKSB7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGl3bF9tbGRfY2hlY2tfcG4obWxkLCBza2IsIHF1ZXVlLCBsaW5rX3N0YSkpKSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRpZWVlODAyMTFfcnhfbmFwaShtbGQtXHUwMDNlaHcsIHN0YSwgc2tiLCBuYXBpKTtcbiYjNDM7XHRpZWVlODAyMTFfcnhfbmFwaShtbGQtXHUwMDNlaHcsIGxpbmtfc3RhLCBza2IsIG5hcGkpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0lGX0lXTFdJRklfS1VOSVQoaXdsX21sZF9wYXNzX3BhY2tldF90b19tYWM4MDIxMSk7XG4gXG5AQCAtMTcyOCw3ICYjNDM7MTcyOSw3IEBAIHN0YXRpYyB2b2lkIGl3bF9tbGRfdXBkYXRlX2xhc3RfcnhfdGltZXN0YW1wKHN0cnVjdCBpd2xfbWxkICptbGQsIHU4IGJhaWQpXG4gICogU2V0cyAqZHJvcCB0byB0cnVlIGlmIHRoZSBwYWNrZXQgc2hvdWxkIGJlIGRyb3BwZWQuXG4gICogUmV0dXJucyB0aGUgc3RhdGlvbiBpZiBmb3VuZCwgb3IgTlVMTCBvdGhlcndpc2UuXG4gICovXG4tc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfc3RhICpcbiYjNDM7c3RhdGljIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKlxuIGl3bF9tbGRfcnhfd2l0aF9zdGEoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcixcbiBcdFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdCAgICBjb25zdCBzdHJ1Y3QgaXdsX3J4X21wZHVfZGVzYyAqbXBkdV9kZXNjLFxuQEAgLTE3NjQsMTEgJiM0MzsxNzY1LDYgQEAgaXdsX21sZF9yeF93aXRoX3N0YShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLFxuIFxuIFx0cnhfc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4gXG4tXHRpZiAobGlua19zdGEgXHUwMDI2XHUwMDI2IHN0YS1cdTAwM2V2YWxpZF9saW5rcykge1xuLVx0XHRyeF9zdGF0dXMtXHUwMDNlbGlua192YWxpZCA9IHRydWU7XG4tXHRcdHJ4X3N0YXR1cy1cdTAwM2VsaW5rX2lkID0gbGlua19zdGEtXHUwMDNlbGlua19pZDtcbi1cdH1cbi1cbiBcdC8qIGZpbGwgY2hlY2tzdW0gKi9cbiBcdGlmIChpZWVlODAyMTFfaXNfZGF0YShoZHItXHUwMDNlZnJhbWVfY29udHJvbCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgcGt0LVx1MDAzZWxlbl9uX2ZsYWdzIFx1MDAyNiBjcHVfdG9fbGUzMihGSF9SU0NTUl9SUEFfRU4pKSB7XG5AQCAtMTgwMywxMCAmIzQzOzE3OTksMTAgQEAgaXdsX21sZF9yeF93aXRoX3N0YShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLFxuIFx0XHRcdFx0XHRcdFx0ICAgIHF1ZXVlKTtcbiBcdH1cbiBcbi1cdHJldHVybiBzdGE7XG4mIzQzO1x0cmV0dXJuIGxpbmtfc3RhO1xuIH1cbiBcbi1zdGF0aWMgaW50IGl3bF9tbGRfcnhfbWdtdF9wcm90KHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXG4mIzQzO3N0YXRpYyBpbnQgaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEsXG4gXHRcdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLFxuIFx0XHRcdFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cyxcbiBcdFx0XHRcdHUzMiBtcGR1X3N0YXR1cyxcbkBAIC0xODIwLDcgJiM0MzsxODE2LDYgQEAgc3RhdGljIGludCBpd2xfbWxkX3J4X21nbXRfcHJvdChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxuIFx0c3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5O1xuIFx0Y29uc3QgdTggKmZyYW1lID0gKHZvaWQgKiloZHI7XG4gXHRjb25zdCB1OCAqbW1pZTtcbi1cdHU4IGxpbmtfaWQ7XG4gXG4gXHRpZiAoKG1wZHVfc3RhdHVzIFx1MDAyNiBJV0xfUlhfTVBEVV9TVEFUVVNfU0VDX01BU0spID09XG4gXHQgICAgIElXTF9SWF9NUERVX1NUQVRVU19TRUNfTk9ORSlcbkBAIC0xODM2LDEwICYjNDM7MTgzMSwxMCBAQCBzdGF0aWMgaW50IGl3bF9tbGRfcnhfbWdtdF9wcm90KHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXG4gXHRpZiAoIWllZWU4MDIxMV9pc19iZWFjb24oaGRyLVx1MDAzZWZyYW1lX2NvbnRyb2wpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmICghc3RhKVxuJiM0MztcdGlmICghbGlua19zdGEpXG4gXHRcdHJldHVybiAtMTtcbiBcbi1cdG1sZF9zdGEgPSBpd2xfbWxkX3N0YV9mcm9tX21hYzgwMjExKHN0YSk7XG4mIzQzO1x0bWxkX3N0YSA9IGl3bF9tbGRfc3RhX2Zyb21fbWFjODAyMTEobGlua19zdGEtXHUwMDNlc3RhKTtcbiBcdG1sZF92aWYgPSBpd2xfbWxkX3ZpZl9mcm9tX21hYzgwMjExKG1sZF9zdGEtXHUwMDNldmlmKTtcbiBcbiBcdC8qIGtleSBtaXNtYXRjaCAtIHdpbGwgYWxzbyByZXBvcnQgIU1JQ19PSyBidXQgd2Ugc2hvdWxkbiYjMzk7dCBjb3VudCBpdCAqL1xuQEAgLTE4NTMsOCAmIzQzOzE4NDgsNyBAQCBzdGF0aWMgaW50IGl3bF9tbGRfcnhfbWdtdF9wcm90KHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuLVx0bGlua19pZCA9IHJ4X3N0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkID8gcnhfc3RhdHVzLVx1MDAzZWxpbmtfaWQgOiAwO1xuLVx0bGluayA9IHJjdV9kZXJlZmVyZW5jZShtbGRfdmlmLVx1MDAzZWxpbmtbbGlua19pZF0pO1xuJiM0MztcdGxpbmsgPSByY3VfZGVyZWZlcmVuY2UobWxkX3ZpZi1cdTAwM2VsaW5rW2xpbmtfc3RhLVx1MDAzZWxpbmtfaWRdKTtcbiBcdGlmIChXQVJOX09OX09OQ0UoIWxpbmspKVxuIFx0XHRyZXR1cm4gLTE7XG4gXG5AQCAtMTkwNSw3ICYjNDM7MTg5OSw3IEBAIHN0YXRpYyBpbnQgaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbiB9XG4gXG4gc3RhdGljIGludCBpd2xfbWxkX3J4X2NyeXB0byhzdHJ1Y3QgaXdsX21sZCAqbWxkLFxuLVx0XHRcdCAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbiYjNDM7XHRcdFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSxcbiBcdFx0XHQgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzLFxuIFx0XHRcdCAgICAgc3RydWN0IGl3bF9yeF9tcGR1X2Rlc2MgKmRlc2MsIGludCBxdWV1ZSxcbkBAIC0xOTE1LDcgJiM0MzsxOTA5LDcgQEAgc3RhdGljIGludCBpd2xfbWxkX3J4X2NyeXB0byhzdHJ1Y3QgaXdsX21sZCAqbWxkLFxuIFxuIFx0aWYgKHVubGlrZWx5KGllZWU4MDIxMV9pc19tZ210KGhkci1cdTAwM2VmcmFtZV9jb250cm9sKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICAhaWVlZTgwMjExX2hhc19wcm90ZWN0ZWQoaGRyLVx1MDAzZWZyYW1lX2NvbnRyb2wpKSlcbi1cdFx0cmV0dXJuIGl3bF9tbGRfcnhfbWdtdF9wcm90KHN0YSwgaGRyLCByeF9zdGF0dXMsIHN0YXR1cyxcbiYjNDM7XHRcdHJldHVybiBpd2xfbWxkX3J4X21nbXRfcHJvdChsaW5rX3N0YSwgaGRyLCByeF9zdGF0dXMsIHN0YXR1cyxcbiBcdFx0XHRcdFx0ICAgIGxlMTZfdG9fY3B1KGRlc2MtXHUwMDNlbXBkdV9sZW4pKTtcbiBcbiBcdGlmICghaWVlZTgwMjExX2hhc19wcm90ZWN0ZWQoaGRyLVx1MDAzZWZyYW1lX2NvbnRyb2wpIHx8XG5AQCAtMjAyMyw3ICYjNDM7MjAxNyw3IEBAIHZvaWQgaXdsX21sZF9yeF9tcGR1KHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbiBcdHN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSByeGJfYWRkcihyeGIpO1xuIFx0c3RydWN0IGl3bF9tbGRfcnhfcGh5X2RhdGEgcGh5X2RhdGEgPSB7fTtcbiBcdHN0cnVjdCBpd2xfcnhfbXBkdV9kZXNjICptcGR1X2Rlc2MgPSAodm9pZCAqKXBrdC1cdTAwM2VkYXRhO1xuLVx0c3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTtcbiYjNDM7XHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFx0c2l6ZV90IG1wZHVfZGVzY19zaXplID0gc2l6ZW9mKCptcGR1X2Rlc2MpO1xuQEAgLTIwODYsNyAmIzQzOzIwODAsOCBAQCB2b2lkIGl3bF9tbGRfcnhfbXBkdShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXG4tXHRzdGEgPSBpd2xfbWxkX3J4X3dpdGhfc3RhKG1sZCwgaGRyLCBza2IsIG1wZHVfZGVzYywgcGt0LCBxdWV1ZSwgXHUwMDI2ZHJvcCk7XG4mIzQzO1x0bGlua19zdGEgPSBpd2xfbWxkX3J4X3dpdGhfc3RhKG1sZCwgaGRyLCBza2IsIG1wZHVfZGVzYywgcGt0LCBxdWV1ZSxcbiYjNDM7XHRcdFx0XHQgICAgICAgXHUwMDI2ZHJvcCk7XG4gXHRpZiAoZHJvcClcbiBcdFx0Z290byBkcm9wO1xuIFxuQEAgLTIxMjcsNyAmIzQzOzIxMjIsNyBAQCB2b2lkIGl3bF9tbGRfcnhfbXBkdShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXG4gXHRpd2xfbWxkX3J4X2ZpbGxfc3RhdHVzKG1sZCwgbGlua19pZCwgaGRyLCBza2IsIFx1MDAyNnBoeV9kYXRhKTtcbiBcbi1cdGlmIChpd2xfbWxkX3J4X2NyeXB0byhtbGQsIHN0YSwgaGRyLCByeF9zdGF0dXMsIG1wZHVfZGVzYywgcXVldWUsXG4mIzQzO1x0aWYgKGl3bF9tbGRfcnhfY3J5cHRvKG1sZCwgbGlua19zdGEsIGhkciwgcnhfc3RhdHVzLCBtcGR1X2Rlc2MsIHF1ZXVlLFxuIFx0XHRcdCAgICAgIGxlMzJfdG9fY3B1KHBrdC1cdTAwM2VsZW5fbl9mbGFncyksIFx1MDAyNmNyeXB0b19sZW4pKVxuIFx0XHRnb3RvIGRyb3A7XG4gXG5AQCAtMjE0MCw3ICYjNDM7MjEzNSw4IEBAIHZvaWQgaXdsX21sZF9yeF9tcGR1KHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbiBcdGlmIChpd2xfbWxkX3RpbWVfc3luY19mcmFtZShtbGQsIHNrYiwgaGRyLVx1MDAzZWFkZHIyKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRyZW9yZGVyX3JlcyA9IGl3bF9tbGRfcmVvcmRlcihtbGQsIG5hcGksIHF1ZXVlLCBzdGEsIHNrYiwgbXBkdV9kZXNjKTtcbiYjNDM7XHRyZW9yZGVyX3JlcyA9IGl3bF9tbGRfcmVvcmRlcihtbGQsIG5hcGksIHF1ZXVlLCBsaW5rX3N0YSwgc2tiLFxuJiM0MztcdFx0XHRcdCAgICAgIG1wZHVfZGVzYyk7XG4gXHRzd2l0Y2ggKHJlb3JkZXJfcmVzKSB7XG4gXHRjYXNlIElXTF9NTERfUEFTU19TS0I6XG4gXHRcdGJyZWFrO1xuQEAgLTIxNTMsNyAmIzQzOzIxNDksNyBAQCB2b2lkIGl3bF9tbGRfcnhfbXBkdShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHRcdGdvdG8gZHJvcDtcbiBcdH1cbiBcbi1cdGl3bF9tbGRfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEobWxkLCBuYXBpLCBza2IsIHF1ZXVlLCBzdGEpO1xuJiM0MztcdGl3bF9tbGRfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEobWxkLCBuYXBpLCBza2IsIHF1ZXVlLCBsaW5rX3N0YSk7XG4gXG4gXHRnb3RvIG91dDtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguaFxuaW5kZXggNTczYjg5YzNjOWM2MS4uYjA4YzVhZGUzZGI4ZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmhcbkBAIC02OSw3ICYjNDM7NjksNyBAQCB2b2lkIGl3bF9tbGRfaGFuZGxlX3JzY19ub3RpZihzdHJ1Y3QgaXdsX21sZCAqbWxkLFxuIHZvaWQgaXdsX21sZF9wYXNzX3BhY2tldF90b19tYWM4MDIxMShzdHJ1Y3QgaXdsX21sZCAqbWxkLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBxdWV1ZSxcbi1cdFx0XHRcdCAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSk7XG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSk7XG4gXG4gdm9pZCBpd2xfbWxkX2hhbmRsZV9waHlfYWlyX3NuaWZmZXJfbm90aWYoc3RydWN0IGl3bF9tbGQgKm1sZCxcbiBcdFx0XHRcdFx0ICBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvdGVzdHMvYWdnLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC90ZXN0cy9hZ2cuY1xuaW5kZXggMjliMDI0OGNlYzNkZi4uZTllZmUyOTk2ZjA3MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3Rlc3RzL2FnZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC90ZXN0cy9hZ2cuY1xuQEAgLTIsNyAmIzQzOzIsNyBAQFxuIC8qXG4gICogS1VuaXQgdGVzdHMgZm9yIGNoYW5uZWwgaGVscGVyIGZ1bmN0aW9uc1xuICAqXG4tICogQ29weXJpZ2h0IChDKSAyMDI0LTIwMjUgSW50ZWwgQ29ycG9yYXRpb25cbiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI0LTIwMjYgSW50ZWwgQ29ycG9yYXRpb25cbiAgKi9cbiAjaW5jbHVkZSBcdTAwM2NrdW5pdC90ZXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NrdW5pdC9zdGF0aWNfc3R1Yi5oXHUwMDNlXG5AQCAtNDQxLDcgJiM0Mzs0NDEsNyBAQCBzdGF0aWMgdm9pZFxuIGZha2VfaXdsX21sZF9wYXNzX3BhY2tldF90b19tYWM4MDIxMShzdHJ1Y3QgaXdsX21sZCAqbWxkLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBxdWV1ZSxcbi1cdFx0XHRcdCAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSlcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhKVxuIHtcbiBcdF9fc2tiX3F1ZXVlX3RhaWwoXHUwMDI2Z19yZWxlYXNlZF9za2JzLCBza2IpO1xuIFx0Z19udW1fcmVsZWFzZWRfc2ticyYjNDM7JiM0Mzs7XG5AQCAtNjMwLDcgJiM0Mzs2MzAsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3Jlb3JkZXJfYnVmZmVyKHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdG1wZHVfZGVzYyA9IHNldHVwX21wZHVfZGVzYygpO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0cmVvcmRlcl9yZXMgPSBpd2xfbWxkX3Jlb3JkZXIobWxkLCBOVUxMLCBRVUVVRSwgc3RhLCBza2IsIG1wZHVfZGVzYyk7XG4mIzQzO1x0cmVvcmRlcl9yZXMgPSBpd2xfbWxkX3Jlb3JkZXIobWxkLCBOVUxMLCBRVUVVRSwgXHUwMDI2c3RhLVx1MDAzZWRlZmxpbmssIHNrYixcbiYjNDM7XHRcdFx0XHQgICAgICBtcGR1X2Rlc2MpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmVvcmRlcl9yZXMsIHBhcmFtLVx1MDAzZWV4cGVjdGVkLnJlb3JkZXJfcmVzKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnguY1xuaW5kZXggYWIxZWIyZWIwYzNjZC4uOGMxOTdhMDkwYzJiMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4LmNcbkBAIC05MCw3ICYjNDM7OTAsNyBAQCBzdGF0aWMgdm9pZCBpd2xfbXZtX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKHN0cnVjdCBpd2xfbXZtICptdm0sXG4gXHRcdFx0XHRmcmFnbGVuLCByeGItXHUwMDNldHJ1ZXNpemUpO1xuIFx0fVxuIFxuLVx0aWVlZTgwMjExX3J4X25hcGkobXZtLVx1MDAzZWh3LCBzdGEsIHNrYiwgbmFwaSk7XG4mIzQzO1x0aWVlZTgwMjExX3J4X25hcGkobXZtLVx1MDAzZWh3LCBzdGEgPyBcdTAwMjZzdGEtXHUwMDNlZGVmbGluayA6IE5VTEwsIHNrYiwgbmFwaSk7XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnhtcS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnhtcS5jXG5pbmRleCA3ZjBiNGY1ZGFhMjE0Li44YzQwMDlkM2EwMGNhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnhtcS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeG1xLmNcbkBAIC0xLDYgJiM0MzsxLDYgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBCU0QtMy1DbGF1c2VcbiAvKlxuLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE0LCAyMDE4LTIwMjUgSW50ZWwgQ29ycG9yYXRpb25cbiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTQsIDIwMTgtMjAyNiBJbnRlbCBDb3Jwb3JhdGlvblxuICAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEludGVsIE1vYmlsZSBDb21tdW5pY2F0aW9ucyBHbWJIXG4gICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgSW50ZWwgRGV1dHNjaGxhbmQgR21iSFxuICAqL1xuQEAgLTI0Myw3ICYjNDM7MjQzLDcgQEAgc3RhdGljIHZvaWQgaXdsX212bV9wYXNzX3BhY2tldF90b19tYWM4MDIxMShzdHJ1Y3QgaXdsX212bSAqbXZtLFxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRpZWVlODAyMTFfcnhfbmFwaShtdm0tXHUwMDNlaHcsIHN0YSwgc2tiLCBuYXBpKTtcbiYjNDM7XHRpZWVlODAyMTFfcnhfbmFwaShtdm0tXHUwMDNlaHcsIHN0YSA/IFx1MDAyNnN0YS1cdTAwM2VkZWZsaW5rIDogTlVMTCwgc2tiLCBuYXBpKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgaXdsX212bV91c2VkX2F2ZXJhZ2VfZW5lcmd5KHN0cnVjdCBpd2xfbXZtICptdm0sXG5AQCAtMjUyOCw3ICYjNDM7MjUyOCw3IEBAIHZvaWQgaXdsX212bV9yeF9tb25pdG9yX25vX2RhdGEoc3RydWN0IGl3bF9tdm0gKm12bSwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuIFx0fVxuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0aWVlZTgwMjExX3J4X25hcGkobXZtLVx1MDAzZWh3LCBzdGEsIHNrYiwgbmFwaSk7XG4mIzQzO1x0aWVlZTgwMjExX3J4X25hcGkobXZtLVx1MDAzZWh3LCBzdGEgPyBcdTAwMjZzdGEtXHUwMDNlZGVmbGluayA6IE5VTEwsIHNrYiwgbmFwaSk7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tYWM4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tYWM4MDIxMS5jXG5pbmRleCAxM2M0ZThhYmUyODE5Li5kNWE0N2FiMjlmNTg0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tYWM4MDIxMS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21hYzgwMjExLmNcbkBAIC0xMjM5LDcgJiM0MzsxMjM5LDcgQEAgRVhQT1JUX1NZTUJPTChtdDc2X3J4X3NpZ25hbCk7XG4gc3RhdGljIHZvaWRcbiBtdDc2X3J4X2NvbnZlcnQoc3RydWN0IG10NzZfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHN0cnVjdCBpZWVlODAyMTFfaHcgKipodyxcbi1cdFx0c3RydWN0IGllZWU4MDIxMV9zdGEgKipzdGEpXG4mIzQzO1x0XHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICoqbGlua19zdGEpXG4ge1xuIFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpO1xuIFx0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IG10NzZfc2tiX2dldF9oZHIoc2tiKTtcbkBAIC0xMjg2LDExICYjNDM7MTI4NiwxNSBAQCBtdDc2X3J4X2NvbnZlcnQoc3RydWN0IG10NzZfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHQgICAgICAgc2l6ZW9mKG1zdGF0LmNoYWluX3NpZ25hbCkpO1xuIFxuIFx0aWYgKG1zdGF0LndjaWQpIHtcbi1cdFx0c3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQgPSBtc3RhdC53Y2lkLVx1MDAzZWxpbmtfdmFsaWQ7XG4tXHRcdHN0YXR1cy1cdTAwM2VsaW5rX2lkID0gbXN0YXQud2NpZC1cdTAwM2VsaW5rX2lkO1xuJiM0MztcdFx0c3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSA9IHdjaWRfdG9fc3RhKG1zdGF0LndjaWQpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChtc3RhdC53Y2lkLVx1MDAzZWxpbmtfdmFsaWQpXG4mIzQzO1x0XHRcdCpsaW5rX3N0YSA9XG4mIzQzO1x0XHRcdFx0cmN1X2RlcmVmZXJlbmNlKHN0YS1cdTAwM2VsaW5rW21zdGF0LndjaWQtXHUwMDNlbGlua19pZF0pO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHQqbGlua19zdGEgPSBcdTAwMjZzdGEtXHUwMDNlZGVmbGluaztcbiBcdH1cbiBcbi1cdCpzdGEgPSB3Y2lkX3RvX3N0YShtc3RhdC53Y2lkKTtcbiBcdCpodyA9IG10NzZfcGh5X2h3KGRldiwgbXN0YXQucGh5X2lkeCk7XG4gfVxuIFxuQEAgLTE1MTQsNyAmIzQzOzE1MTgsNyBAQCBtdDc2X2NoZWNrX3N0YShzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB2b2lkIG10NzZfcnhfY29tcGxldGUoc3RydWN0IG10NzZfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmX2hlYWQgKmZyYW1lcyxcbiBcdFx0ICAgICAgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKVxuIHtcbi1cdHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGE7XG4mIzQzO1x0c3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGE7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodztcbiBcdHN0cnVjdCBza19idWZmICpza2IsICp0bXA7XG4gXHRMSVNUX0hFQUQobGlzdCk7XG5AQCAtMTUyNSw4ICYjNDM7MTUyOSw4IEBAIHZvaWQgbXQ3Nl9yeF9jb21wbGV0ZShzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqZnJhbWVzLFxuIFxuIFx0XHRtdDc2X2NoZWNrX2NjbXBfcG4oc2tiKTtcbiBcdFx0c2tiX3NoaW5mbyhza2IpLVx1MDAzZWZyYWdfbGlzdCA9IE5VTEw7XG4tXHRcdG10NzZfcnhfY29udmVydChkZXYsIHNrYiwgXHUwMDI2aHcsIFx1MDAyNnN0YSk7XG4tXHRcdGllZWU4MDIxMV9yeF9saXN0KGh3LCBzdGEsIHNrYiwgXHUwMDI2bGlzdCk7XG4mIzQzO1x0XHRtdDc2X3J4X2NvbnZlcnQoZGV2LCBza2IsIFx1MDAyNmh3LCBcdTAwMjZsaW5rX3N0YSk7XG4mIzQzO1x0XHRpZWVlODAyMTFfcnhfbGlzdChodywgbGlua19zdGEsIHNrYiwgXHUwMDI2bGlzdCk7XG4gXG4gXHRcdC8qIHN1YnNlcXVlbnQgYW1zZHUgZnJhbWVzICovXG4gXHRcdHdoaWxlIChuc2tiKSB7XG5AQCAtMTUzNCw4ICYjNDM7MTUzOCw4IEBAIHZvaWQgbXQ3Nl9yeF9jb21wbGV0ZShzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqZnJhbWVzLFxuIFx0XHRcdG5za2IgPSBuc2tiLVx1MDAzZW5leHQ7XG4gXHRcdFx0c2tiLVx1MDAzZW5leHQgPSBOVUxMO1xuIFxuLVx0XHRcdG10NzZfcnhfY29udmVydChkZXYsIHNrYiwgXHUwMDI2aHcsIFx1MDAyNnN0YSk7XG4tXHRcdFx0aWVlZTgwMjExX3J4X2xpc3QoaHcsIHN0YSwgc2tiLCBcdTAwMjZsaXN0KTtcbiYjNDM7XHRcdFx0bXQ3Nl9yeF9jb252ZXJ0KGRldiwgc2tiLCBcdTAwMjZodywgXHUwMDI2bGlua19zdGEpO1xuJiM0MztcdFx0XHRpZWVlODAyMTFfcnhfbGlzdChodywgbGlua19zdGEsIHNrYiwgXHUwMDI2bGlzdCk7XG4gXHRcdH1cbiBcdH1cbiBcdHNwaW5fdW5sb2NrKFx1MDAyNmRldi1cdTAwM2VyeF9sb2NrKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2NvcmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY29yZS5jXG5pbmRleCAwZjBlNDZjYjQyNjA1Li5kZjk2ZDBhOTY3ODczIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY29yZS5jXG5AQCAtMzAzNiw3ICYjNDM7MzAzNiw2IEBAIHN0YXRpYyB2b2lkIHJ0dzg5X3ZpZl9yeF9zdGF0c19pdGVyKHZvaWQgKmRhdGEsIHU4ICptYWMsXG4gXHRzdHJ1Y3QgcnR3ODlfdmlmICpydHd2aWYgPSB2aWZfdG9fcnR3dmlmKHZpZik7XG4gXHRzdHJ1Y3QgcnR3ODlfcnhfZGVzY19pbmZvICpkZXNjX2luZm8gPSBpdGVyX2RhdGEtXHUwMDNlZGVzY19pbmZvO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGl0ZXJfZGF0YS1cdTAwM2Vza2I7XG4tXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLVx1MDAzZWRhdGE7XG4gXHRzdHJ1Y3QgcnR3ODlfcnhfcGh5X3BwZHUgKnBoeV9wcGR1ID0gaXRlcl9kYXRhLVx1MDAzZXBoeV9wcGR1O1xuIFx0Ym9vbCBpc19tbGQgPSBpZWVlODAyMTFfdmlmX2lzX21sZCh2aWYpO1xuQEAgLTMwNzMsMTEgJiM0MzszMDcyLDYgQEAgc3RhdGljIHZvaWQgcnR3ODlfdmlmX3J4X3N0YXRzX2l0ZXIodm9pZCAqZGF0YSwgdTggKm1hYyxcbiBcdGlmICghZXRoZXJfYWRkcl9lcXVhbCh0YXJnZXRfYnNzaWQsIGJzc2lkKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRpZiAoaXNfbWxkKSB7XG4tXHRcdHJ4X3N0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkID0gdHJ1ZTtcbi1cdFx0cnhfc3RhdHVzLVx1MDAzZWxpbmtfaWQgPSBydHd2aWZfbGluay1cdTAwM2VsaW5rX2lkO1xuLVx0fVxuLVxuIFx0YmIgPSBydHc4OV9nZXRfYmJfY3R4KHJ0d2RldiwgcnR3dmlmX2xpbmstXHUwMDNlcGh5X2lkeCk7XG4gXHRwa3Rfc3RhdCA9IFx1MDAyNmJiLVx1MDAzZWN1cl9wa3Rfc3RhdDtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXG5pbmRleCAwMmI2ZDgxY2NjZDExLi5hMGQ1MTljZDljNGZhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXG5AQCAtMTg4MCw5ICYjNDM7MTg4MCw2IEBAIHN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX3J4KHN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICpkYXRhLFxuIFx0XHRcdFx0c3AtXHUwMDNlYWN0aXZlX2xpbmtzX3J4IFx1MDAyNj0gfkJJVChsaW5rX2lkKTtcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRzcC1cdTAwM2VhY3RpdmVfbGlua3NfcnggfD0gQklUKGxpbmtfaWQpO1xuLVxuLVx0XHRcdHJ4X3N0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkID0gdHJ1ZTtcbi1cdFx0XHRyeF9zdGF0dXMtXHUwMDNlbGlua19pZCA9IGxpbmtfaWQ7XG4gXHRcdH1cbiBcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaCBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmhcbmluZGV4IGRjYmIwZTU1YzMyZWMuLjU5YmQxNTMyMzIyZDcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oXG5AQCAtNDAwOSw2ICYjNDM7NDAwOSw3IEBAIHN0cnVjdCBjZmc4MDIxMV91cGRhdGVfZnRfaWVzX3BhcmFtcyB7XG4gICogQGxpbmtfaWQ6IGZvciBNTE8sIHRoZSBsaW5rIElEIHRvIHRyYW5zbWl0IG9uLCAtMSBpZiBub3QgZ2l2ZW47IG5vdGVcbiAgKlx0dGhhdCB0aGUgbGluayBJRCBpc24mIzM5O3QgdmFsaWRhdGVkIChtdWNoKSwgaXQmIzM5O3MgaW4gcmFuZ2UgYnV0IHRoZVxuICAqXHRsaW5rIG1pZ2h0IG5vdCBleGlzdCAob3IgYmUgdXNlZCBieSB0aGUgcmVjZWl2ZXIgU1RBKVxuJiM0MzsgKiBAbm9fc3RhOiBzZXQgaWYgdGhlIGZyYW1lIHNob3VsZCBub3QgYmUgdHJhbnNtaXR0ZWQgdXNpbmcgYW4gZXhpc3RpbmcgU1RBXG4gICovXG4gc3RydWN0IGNmZzgwMjExX21nbXRfdHhfcGFyYW1zIHtcbiBcdHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbjtcbkBAIC00MDIxLDYgJiM0Mzs0MDIyLDcgQEAgc3RydWN0IGNmZzgwMjExX21nbXRfdHhfcGFyYW1zIHtcbiBcdGludCBuX2NzYV9vZmZzZXRzO1xuIFx0Y29uc3QgdTE2ICpjc2Ffb2Zmc2V0cztcbiBcdGludCBsaW5rX2lkO1xuJiM0MztcdGJvb2wgbm9fc3RhO1xuIH07XG4gXG4gLyoqXG5AQCAtOTQ5OSw2ICYjNDM7OTUwMSw3IEBAIHZvaWQgY2ZnODAyMTFfY29ubl9mYWlsZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKm1hY19hZGRyLFxuICAqIEBmbGFnczogZmxhZ3MsIGFzIGRlZmluZWQgaW4gXHUwMDI2ZW51bSBubDgwMjExX3J4bWdtdF9mbGFnc1xuICAqIEByeF90c3RhbXA6IEhhcmR3YXJlIHRpbWVzdGFtcCBvZiBmcmFtZSBSWCBpbiBuYW5vc2Vjb25kc1xuICAqIEBhY2tfdHN0YW1wOiBIYXJkd2FyZSB0aW1lc3RhbXAgb2YgYWNrIFRYIGluIG5hbm9zZWNvbmRzXG4mIzQzOyAqIEBub19zdGE6IHNldCBpZiBubyBzdGF0aW9uIGlzIGtub3duIGZvciB0aGUgZnJhbWUgKHJlbGV2YW50IGZvciBNTEQpXG4gICovXG4gc3RydWN0IGNmZzgwMjExX3J4X2luZm8ge1xuIFx0aW50IGZyZXE7XG5AQCAtOTUxMCw2ICYjNDM7OTUxMyw3IEBAIHN0cnVjdCBjZmc4MDIxMV9yeF9pbmZvIHtcbiBcdHUzMiBmbGFncztcbiBcdHU2NCByeF90c3RhbXA7XG4gXHR1NjQgYWNrX3RzdGFtcDtcbiYjNDM7XHRib29sIG5vX3N0YTtcbiB9O1xuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmggYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXG5pbmRleCA5ZDFmYWM2ZTgwODI5Li43YWFlNzI4ZTk2ZDg0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaFxuQEAgLTE3NzAsMTAgJiM0MzsxNzcwLDkgQEAgZW51bSBtYWM4MDIxMV9yeF9lbmNvZGluZyB7XG4gICogQGFtcGR1X3JlZmVyZW5jZTogQS1NUERVIHJlZmVyZW5jZSBudW1iZXIsIG11c3QgYmUgYSBkaWZmZXJlbnQgdmFsdWUgZm9yXG4gICpcdGVhY2ggQS1NUERVIGJ1dCB0aGUgc2FtZSBmb3IgZWFjaCBzdWJmcmFtZSB3aXRoaW4gb25lIEEtTVBEVVxuICAqIEB6ZXJvX2xlbmd0aF9wc2R1X3R5cGU6IHJhZGlvdGFwIHR5cGUgb2YgdGhlIDAtbGVuZ3RoIFBTRFVcbi0gKiBAbGlua192YWxpZDogaWYgdGhlIGxpbmsgd2hpY2ggaXMgaWRlbnRpZmllZCBieSBAbGlua19pZCBpcyB2YWxpZC4gVGhpcyBmbGFnXG4tICpcdGlzIHNldCBvbmx5IHdoZW4gY29ubmVjdGlvbiBpcyBNTE8uXG4tICogQGxpbmtfaWQ6IGlkIG9mIHRoZSBsaW5rIHVzZWQgdG8gcmVjZWl2ZSB0aGUgcGFja2V0LiBUaGlzIGlzIHVzZWQgYWxvbmcgd2l0aFxuLSAqXHRAbGlua192YWxpZC5cbiYjNDM7ICogQGxpbmtfaWQ6IGlkIG9mIHRoZSBsaW5rIHVzZWQgdG8gcmVjZWl2ZSB0aGUgcGFja2V0LiBTZXQgYW5kIHVzZWQgYnlcbiYjNDM7ICpcdG1hYzgwMjExIGludGVybmFsbHksIGl0IHVzZXMgQGZyZXEgc2V0IGJ5IHRoZSBkcml2ZXIgdG8gaWRlbnRpZnkgdGhlXG4mIzQzOyAqXHRjb3JyZWN0IGxpbmsgcGVyIHZpZi5cbiAgKi9cbiBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyB7XG4gXHR1NjQgbWFjdGltZTtcbkBAIC0xODEzLDcgJiM0MzsxODEyLDcgQEAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMge1xuIFx0dTggY2hhaW5zO1xuIFx0czggY2hhaW5fc2lnbmFsW0lFRUU4MDIxMV9NQVhfQ0hBSU5TXTtcbiBcdHU4IHplcm9fbGVuZ3RoX3BzZHVfdHlwZTtcbi1cdHU4IGxpbmtfdmFsaWQ6MSwgbGlua19pZDo0O1xuJiM0MztcdHU4IGxpbmtfaWQ6NDtcbiB9O1xuIFxuIHN0YXRpY19hc3NlcnQoc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzKSBcdTAwM2M9IHNpemVvZl9maWVsZChzdHJ1Y3Qgc2tfYnVmZiwgY2IpKTtcbkBAIC01Mzg5LDE0ICYjNDM7NTM4OCwxOCBAQCB2b2lkIGllZWU4MDIxMV9yZXN0YXJ0X2h3KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTtcbiAgKiBtaXhlZCBmb3IgYSBzaW5nbGUgaGFyZHdhcmUuIE11c3Qgbm90IHJ1biBjb25jdXJyZW50bHkgd2l0aFxuICAqIGllZWU4MDIxMV90eF9zdGF0dXNfc2tiKCkgb3IgaWVlZTgwMjExX3R4X3N0YXR1c19uaSgpLlxuICAqXG4mIzQzOyAqIEZvciBkYXRhIGZyYW1lcywgd2hlbiBoYXJkd2FyZSBoYXMgZG9uZSBhZGRyZXNzIHRyYW5zbGF0aW9uLCBhIGxpbmsgc3RhdGlvblxuJiM0MzsgKiBoYXMgdG8gYmUgcHJvdmlkZWQgYW5kIHRoZSBmcmVxdWVuY3kgaW5mb3JtYXRpb24gbWF5IGJlIHNraXBwZWQuXG4mIzQzOyAqXG4gICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIEJIcyBkaXNhYmxlZCBhbmQgUkNVIHJlYWQgbG9ja1xuICAqXG4gICogQGh3OiB0aGUgaGFyZHdhcmUgdGhpcyBmcmFtZSBjYW1lIGluIG9uXG4tICogQHN0YTogdGhlIHN0YXRpb24gdGhlIGZyYW1lIHdhcyByZWNlaXZlZCBmcm9tLCBvciAlTlVMTFxuJiM0MzsgKiBAbGlua19zdGE6IHRoZSBsaW5rIHN0YXRpb24gdGhlIGRhdGEgZnJhbWUgd2FzIHJlY2VpdmVkIGZyb20sIG9yICVOVUxMXG4gICogQHNrYjogdGhlIGJ1ZmZlciB0byByZWNlaXZlLCBvd25lZCBieSBtYWM4MDIxMSBhZnRlciB0aGlzIGNhbGxcbiAgKiBAbGlzdDogdGhlIGRlc3RpbmF0aW9uIGxpc3RcbiAgKi9cbi12b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxuJiM0Mzt2b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuJiM0MztcdFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhLFxuIFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCk7XG4gXG4gLyoqXG5AQCAtNTQxNCwxNCAmIzQzOzU0MTcsMTggQEAgdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbiAgKiBtaXhlZCBmb3IgYSBzaW5nbGUgaGFyZHdhcmUuIE11c3Qgbm90IHJ1biBjb25jdXJyZW50bHkgd2l0aFxuICAqIGllZWU4MDIxMV90eF9zdGF0dXNfc2tiKCkgb3IgaWVlZTgwMjExX3R4X3N0YXR1c19uaSgpLlxuICAqXG4mIzQzOyAqIEZvciBkYXRhIGZyYW1lcywgd2hlbiBoYXJkd2FyZSBoYXMgZG9uZSBhZGRyZXNzIHRyYW5zbGF0aW9uLCBhIGxpbmsgc3RhdGlvblxuJiM0MzsgKiBoYXMgdG8gYmUgcHJvdmlkZWQgYW5kIHRoZSBmcmVxdWVuY3kgaW5mb3JtYXRpb24gbWF5IGJlIHNraXBwZWQuXG4mIzQzOyAqXG4gICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIEJIcyBkaXNhYmxlZC5cbiAgKlxuICAqIEBodzogdGhlIGhhcmR3YXJlIHRoaXMgZnJhbWUgY2FtZSBpbiBvblxuLSAqIEBzdGE6IHRoZSBzdGF0aW9uIHRoZSBmcmFtZSB3YXMgcmVjZWl2ZWQgZnJvbSwgb3IgJU5VTExcbiYjNDM7ICogQGxpbmtfc3RhOiB0aGUgbGluayBzdGF0aW9uIHRoZSBkYXRhIGZyYW1lIHdhcyByZWNlaXZlZCBmcm9tLCBvciAlTlVMTFxuICAqIEBza2I6IHRoZSBidWZmZXIgdG8gcmVjZWl2ZSwgb3duZWQgYnkgbWFjODAyMTEgYWZ0ZXIgdGhpcyBjYWxsXG4gICogQG5hcGk6IHRoZSBOQVBJIGNvbnRleHRcbiAgKi9cbi12b2lkIGllZWU4MDIxMV9yeF9uYXBpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxuJiM0Mzt2b2lkIGllZWU4MDIxMV9yeF9uYXBpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuJiM0MztcdFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhLFxuIFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKTtcbiBcbiAvKipcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaFxuaW5kZXggMDIwMzg3ZDc2NDEyMi4uNDY1M2Y4ZjI2ZWU3MCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmhcbkBAIC0zMTg1LDYgJiM0MzszMTg1LDExIEBAIGVudW0gbmw4MDIxMV9jb21tYW5kcyB7XG4gICpcdFRoZSBhZ2dyZWdhdGVkIG1lc3NhZ2UgYWx3YXlzIHByZWNlZGVzIHRoZSBwZXItbGluayBtZXNzYWdlcyBmb3IgdGhlXG4gICpcdHNhbWUgc3RhdGlvbiB3aXRoaW4gYSBkdW1wIHNlcXVlbmNlLlxuICAqXG4mIzQzOyAqIEBOTDgwMjExX0FUVFJfRlJBTUVfQ01EX05PX1NUQTogVmFsaWQgZm9yIE5MODAyMTFfQ01EX0ZSQU1FIHRvIGRlbm90ZSB0aGF0XG4mIzQzOyAqXHR0aGUga2VybmVsIGhhZCBubyBzdGF0aW9uIGZvciBhIHJlY2VpdmVkIGZyYW1lIG9yIHNob3VsZCBub3QgdXNlIGFcbiYjNDM7ICpcdGtub3duIHN0YXRpb24gdG8gdHJhbnNtaXQgYSBmcmFtZS4gVGhpcyBpcyByZWxldmFudCB0byBrbm93IHdoZXRoZXJcbiYjNDM7ICpcdE1MRCBhZGRyZXNzIHRyYW5zbGF0aW9uIGhhcHBlbmVkIG9yIHRvIGRpc2FibGUgaXQgd2hlbiBzZW5kaW5nIGEgZnJhbWUuXG4mIzQzOyAqXG4gICogQE5VTV9OTDgwMjExX0FUVFI6IHRvdGFsIG51bWJlciBvZiBubDgwMjExX2F0dHJzIGF2YWlsYWJsZVxuICAqIEBOTDgwMjExX0FUVFJfTUFYOiBoaWdoZXN0IGF0dHJpYnV0ZSBudW1iZXIgY3VycmVudGx5IGRlZmluZWRcbiAgKiBAX19OTDgwMjExX0FUVFJfQUZURVJfTEFTVDogaW50ZXJuYWwgdXNlXG5AQCAtMzc4NSw2ICYjNDM7Mzc5MCw4IEBAIGVudW0gbmw4MDIxMV9hdHRycyB7XG4gXG4gXHROTDgwMjExX0FUVFJfU1RBX0RVTVBfTElOS19TVEFUUyxcbiBcbiYjNDM7XHROTDgwMjExX0FUVFJfRlJBTUVfQ01EX05PX1NUQSxcbiYjNDM7XG4gXHQvKiBhZGQgYXR0cmlidXRlcyBoZXJlLCB1cGRhdGUgdGhlIHBvbGljeSBpbiBubDgwMjExLmMgKi9cbiBcbiBcdF9fTkw4MDIxMV9BVFRSX0FGVEVSX0xBU1QsXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2FnZy10eC5jIGIvbmV0L21hYzgwMjExL2FnZy10eC5jXG5pbmRleCA0ODMzYjQ2NzcwYjYyLi5kZDhhMTFlZjZlNTJiIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2FnZy10eC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvYWdnLXR4LmNcbkBAIC05OCw3ICYjNDM7OTgsNyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9hZGRiYV9yZXF1ZXN0KHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1MTYgdGlkLFxuIFx0aWYgKHN0YS1cdTAwM2VzdGEuZGVmbGluay5oZV9jYXAuaGFzX2hlKVxuIFx0XHRpZWVlODAyMTFfYWRkX2FkZGJhZXh0KHNrYiwgMCwgYWdnX3NpemUpO1xuIFxuLVx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgdGlkLCAtMSk7XG4mIzQzO1x0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgTlVMTCwgdGlkLCAtMSk7XG4gfVxuIFxuIHZvaWQgaWVlZTgwMjExX3NlbmRfYmFyKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHU4ICpyYSwgdTE2IHRpZCwgdTE2IHNzbilcbkBAIC0xMjcsNyAmIzQzOzEyNyw3IEBAIHZvaWQgaWVlZTgwMjExX3NlbmRfYmFyKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHU4ICpyYSwgdTE2IHRpZCwgdTE2IHNzbilcbiBcbiBcdElFRUU4MDIxMV9TS0JfQ0Ioc2tiKS1cdTAwM2VmbGFncyB8PSBJRUVFODAyMTFfVFhfSU5URkxfRE9OVF9FTkNSWVBUIHxcbiBcdFx0XHRcdFx0SUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTO1xuLVx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgdGlkLCAtMSk7XG4mIzQzO1x0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgTlVMTCwgdGlkLCAtMSk7XG4gfVxuIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3NlbmRfYmFyKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvYXAuYyBiL25ldC9tYWM4MDIxMS9hcC5jXG5pbmRleCBlN2FjOTljNWEyMmViLi5mZTI1NTg5MWMzNWYwIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2FwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9hcC5jXG5AQCAtODIsOSAmIzQzOzgyLDYgQEAgaWVlZTgwMjExX3J4X2VtbF9vcF9tb2RlX25vdGlmKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0aWYgKCFpZnRfZXh0X2NhcGEpXG4gXHRcdHJldHVybjtcbiBcbi1cdGlmICghc3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQpXG4tXHRcdHJldHVybjtcbi1cbiBcdHN0YSA9IHN0YV9pbmZvX2dldF9ic3Moc2RhdGEsIG1nbXQtXHUwMDNlc2EpO1xuIFx0aWYgKCFzdGEpXG4gXHRcdHJldHVybjtcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaHQuYyBiL25ldC9tYWM4MDIxMS9odC5jXG5pbmRleCBlMWUxYjdmODJmM2ZlLi5jNWMyMTEzZmE0Zjc5IDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2h0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9odC5jXG5AQCAtNTQ1LDcgJiM0Mzs1NDUsNyBAQCBpbnQgaWVlZTgwMjExX3NlbmRfc21wc19hY3Rpb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRpbmZvLVx1MDAzZXN0YXR1c19kYXRhID0gSUVFRTgwMjExX1NUQVRVU19UWVBFX1NNUFMgfFxuIFx0XHRcdCAgICB1MTZfZW5jb2RlX2JpdHMoc3RhdHVzX2xpbmtfaWQgXHUwMDNjXHUwMDNjIDIgfCBzbXBzLFxuIFx0XHRcdFx0XHQgICAgSUVFRTgwMjExX1NUQVRVU19TVUJEQVRBX01BU0spO1xuLVx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgNywgbGlua19pZCk7XG4mIzQzO1x0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgTlVMTCwgNywgbGlua19pZCk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmggYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxuaW5kZXggYTFlZjg4ZmU4NDZkZC4uMzhkODZiMGExMGY1YSAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxuQEAgLTI0NjYsNyAmIzQzOzI0NjYsOCBAQCB2b2lkIGllZWU4MDIxMV94bWl0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHQgICAgc3RydWN0IHN0YV9pbmZvICpzdGEsIHN0cnVjdCBza19idWZmICpza2IpO1xuIFxuIHZvaWQgX19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLVx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCB0aWQsIGludCBsaW5rX2lkLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcbiYjNDM7XHRcdFx0XHQgaW50IHRpZCwgaW50IGxpbmtfaWQsXG4gXHRcdFx0XHQgZW51bSBubDgwMjExX2JhbmQgYmFuZCk7XG4gXG4gc3RhdGljIGlubGluZSBib29sIGllZWU4MDIxMV9yZXF1aXJlX2VuY3J5cHRlZF9hc3NvYyhfX2xlMTYgZmMsXG5AQCAtMjQ4NiwxOCAmIzQzOzI0ODcsMjAgQEAgaWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0XHQgIGVudW0gbmw4MDIxMV9iYW5kIGJhbmQpXG4ge1xuIFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0X19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHNkYXRhLCBza2IsIHRpZCwgLTEsIGJhbmQpO1xuJiM0MztcdF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzZGF0YSwgc2tiLCBFUlJfUFRSKC1FTk9FTlQpLFxuJiM0MztcdFx0XHRcdCAgICB0aWQsIC0xLCBiYW5kKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiB2b2lkIGllZWU4MDIxMV90eF9za2JfdGlkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLVx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRpZCwgaW50IGxpbmtfaWQpO1xuJiM0MztcdFx0XHQgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxuJiM0MztcdFx0XHQgIGludCB0aWQsIGludCBsaW5rX2lkKTtcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX3R4X3NrYihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdC8qIFNlbmQgYWxsIGludGVybmFsIG1nbXQgZnJhbWVzIG9uIFZPLiBBY2NvcmRpbmdseSBzZXQgVElEIHRvIDcuICovXG4tXHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCA3LCAtMSk7XG4mIzQzO1x0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgTlVMTCwgNywgLTEpO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWZhY2UuYyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jXG5pbmRleCA0MzQ2MGE3MDVhNmJkLi5hMGIyMTRkYmI4YWY4IDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2lmYWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jXG5AQCAtMTY3MywxMSAmIzQzOzE2NzMsOCBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfaWZhY2VfcHJvY2Vzc19za2Ioc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4gXHRcdFx0XHRicmVhaztcbiBcbiBcdFx0XHRzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcbi1cdFx0XHRpZiAoIXN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkKVxuLVx0XHRcdFx0bGlua19zdGEgPSBcdTAwMjZzdGEtXHUwMDNlZGVmbGluaztcbi1cdFx0XHRlbHNlXG4tXHRcdFx0XHRsaW5rX3N0YSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoc3RhLVx1MDAzZWxpbmtbc3RhdHVzLVx1MDAzZWxpbmtfaWRdLFxuLVx0XHRcdFx0XHRcdFx0bG9ja2RlcF9pc19oZWxkKFx1MDAyNmxvY2FsLVx1MDAzZWh3LndpcGh5LVx1MDAzZW10eCkpO1xuJiM0MztcdFx0XHRsaW5rX3N0YSA9IHdpcGh5X2RlcmVmZXJlbmNlKGxvY2FsLVx1MDAzZWh3LndpcGh5LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIHN0YS1cdTAwM2VsaW5rW3N0YXR1cy1cdTAwM2VsaW5rX2lkXSk7XG4gXHRcdFx0aWYgKGxpbmtfc3RhKVxuIFx0XHRcdFx0aWVlZTgwMjExX2h0X2hhbmRsZV9jaGFud2lkdGhfbm90aWYobG9jYWwsIHNkYXRhLCBzdGEsXG4gXHRcdFx0XHRcdFx0XHRcdCAgICBsaW5rX3N0YSwgY2hhbndpZHRoLFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tbG1lLmMgYi9uZXQvbWFjODAyMTEvbWxtZS5jXG5pbmRleCBmNTExNjdmMGZjNDZkLi4zNjE3NzVmYjkzMWVjIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL21sbWUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL21sbWUuY1xuQEAgLTExODMxLDEyICYjNDM7MTE4MzEsMTAgQEAgdm9pZCBpZWVlODAyMTFfc3RhX3J4X3F1ZXVlZF9mcmFtZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdHJ4X3N0YXR1cyA9IChzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqKSBza2ItXHUwMDNlY2I7XG4gXHRmYyA9IGxlMTZfdG9fY3B1KG1nbXQtXHUwMDNlZnJhbWVfY29udHJvbCk7XG4gXG4tXHRpZiAocnhfc3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQpIHtcbi1cdFx0bGluayA9IHNkYXRhX2RlcmVmZXJlbmNlKHNkYXRhLVx1MDAzZWxpbmtbcnhfc3RhdHVzLVx1MDAzZWxpbmtfaWRdLFxuLVx0XHRcdFx0XHQgc2RhdGEpO1xuLVx0XHRpZiAoIWxpbmspXG4tXHRcdFx0cmV0dXJuO1xuLVx0fVxuJiM0MztcdGxpbmsgPSBzZGF0YV9kZXJlZmVyZW5jZShzZGF0YS1cdTAwM2VsaW5rW3J4X3N0YXR1cy1cdTAwM2VsaW5rX2lkXSxcbiYjNDM7XHRcdFx0XHQgc2RhdGEpO1xuJiM0MztcdGlmICghbGluaylcbiYjNDM7XHRcdHJldHVybjtcbiBcbiBcdHN3aXRjaCAoZmMgXHUwMDI2IElFRUU4MDIxMV9GQ1RMX1NUWVBFKSB7XG4gXHRjYXNlIElFRUU4MDIxMV9TVFlQRV9CRUFDT046XG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL29mZmNoYW5uZWwuYyBiL25ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmNcbmluZGV4IDJiY2ViNzM3MTdjNjYuLjM4MzRmNTk2YWYxNzggMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jXG5AQCAtODU2LDggJiM0Mzs4NTYsMTAgQEAgaW50IGllZWU4MDIxMV9tZ210X3R4KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXHRcdFx0bmVlZF9vZmZjaGFuID0gdHJ1ZTtcbiBcbiBcdFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0XHRzdGEgPSBzdGFfaW5mb19nZXRfYnNzKHNkYXRhLCBtZ210LVx1MDAzZWRhKTtcbi1cdFx0bWxvX3N0YSA9IHN0YSBcdTAwMjZcdTAwMjYgc3RhLVx1MDAzZXN0YS5tbG87XG4mIzQzO1x0XHRpZiAoIXBhcmFtcy1cdTAwM2Vub19zdGEpIHtcbiYjNDM7XHRcdFx0c3RhID0gc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgbWdtdC1cdTAwM2VkYSk7XG4mIzQzO1x0XHRcdG1sb19zdGEgPSBzdGEgXHUwMDI2XHUwMDI2IHN0YS1cdTAwM2VzdGEubWxvO1xuJiM0MztcdFx0fVxuIFxuIFx0XHRpZiAoIWllZWU4MDIxMV9pc19hY3Rpb24obWdtdC1cdTAwM2VmcmFtZV9jb250cm9sKSB8fFxuIFx0XHQgICAgbWdtdC1cdTAwM2V1LmFjdGlvbi5jYXRlZ29yeSA9PSBXTEFOX0NBVEVHT1JZX1BVQkxJQyB8fFxuQEAgLTg4Niw3ICYjNDM7ODg4LDggQEAgaW50IGllZWU4MDIxMV9tZ210X3R4KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXHRcdCAgICAgbG9jYWwtXHUwMDNlb3BzLVx1MDAzZXJlbWFpbl9vbl9jaGFubmVsIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgIG1lbWNtcChzZGF0YS1cdTAwM2V2aWYuY2ZnLmFwX2FkZHIsIG1nbXQtXHUwMDNlYnNzaWQsIEVUSF9BTEVOKSkpIHtcbiBcdFx0XHRuZWVkX29mZmNoYW4gPSB0cnVlO1xuLVx0XHR9IGVsc2UgaWYgKHNkYXRhLVx1MDAzZXUubWdkLmFzc29jaWF0ZWQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHR9IGVsc2UgaWYgKCFwYXJhbXMtXHUwMDNlbm9fc3RhIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICBzZGF0YS1cdTAwM2V1Lm1nZC5hc3NvY2lhdGVkIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgIGV0aGVyX2FkZHJfZXF1YWwoc2RhdGEtXHUwMDNldmlmLmNmZy5hcF9hZGRyLCBtZ210LVx1MDAzZWRhKSkge1xuIFx0XHRcdHN0YSA9IHN0YV9pbmZvX2dldF9ic3Moc2RhdGEsIG1nbXQtXHUwMDNlZGEpO1xuIFx0XHRcdG1sb19zdGEgPSBzdGEgXHUwMDI2XHUwMDI2IHN0YS1cdTAwM2VzdGEubWxvO1xuQEAgLTEwMzEsNyAmIzQzOzEwMzQsOSBAQCBpbnQgaWVlZTgwMjExX21nbXRfdHgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbiBcdH1cbiBcbiBcdGlmICghbmVlZF9vZmZjaGFuKSB7XG4tXHRcdGllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIDcsIGxpbmtfaWQpO1xuJiM0MztcdFx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYixcbiYjNDM7XHRcdFx0XHQgICAgIHBhcmFtcy1cdTAwM2Vub19zdGEgPyBzdGEgOiBFUlJfUFRSKC1FTk9FTlQpLFxuJiM0MztcdFx0XHRcdCAgICAgNywgbGlua19pZCk7XG4gXHRcdHJldCA9IDA7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcnguYyBiL25ldC9tYWM4MDIxMS9yeC5jXG5pbmRleCA1ZTI2YmU4ZTI3ZDhmLi5lZDVhMmUwNTkwNzU3IDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL3J4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9yeC5jXG5AQCAtMjIyLDQzICYjNDM7MjIyLDIxIEBAIGllZWU4MDIxMV9yeF9yYWRpb3RhcF9oZHJsZW4oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi1cdFx0XHRcdFx0ICAgaW50IGxpbmtfaWQsXG4tXHRcdFx0XHRcdCAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxuJiM0MztcdFx0XHRcdFx0ICAgc3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhLFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcbi1cbi1cdGlmIChsaW5rX2lkIFx1MDAzZT0gMCkge1xuLVx0XHRzdGF0dXMtXHUwMDNlbGlua192YWxpZCA9IDE7XG4tXHRcdHN0YXR1cy1cdTAwM2VsaW5rX2lkID0gbGlua19pZDtcbi1cdH0gZWxzZSB7XG4tXHRcdHN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkID0gMDtcbi1cdH1cbi1cbiBcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNnNkYXRhLVx1MDAzZXNrYl9xdWV1ZSwgc2tiKTtcbiBcdHdpcGh5X3dvcmtfcXVldWUoc2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlaHcud2lwaHksIFx1MDAyNnNkYXRhLVx1MDAzZXdvcmspO1xuLVx0aWYgKHN0YSkge1xuLVx0XHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGFfaW5mbztcbi1cbi1cdFx0aWYgKGxpbmtfaWQgXHUwMDNlPSAwKSB7XG4tXHRcdFx0bGlua19zdGFfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZShzdGEtXHUwMDNlbGlua1tsaW5rX2lkXSk7XG4tXHRcdFx0aWYgKCFsaW5rX3N0YV9pbmZvKVxuLVx0XHRcdFx0cmV0dXJuO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdGxpbmtfc3RhX2luZm8gPSBcdTAwMjZzdGEtXHUwMDNlZGVmbGluaztcbi1cdFx0fVxuLVxuLVx0XHRsaW5rX3N0YV9pbmZvLVx1MDAzZXJ4X3N0YXRzLnBhY2tldHMmIzQzOyYjNDM7O1xuLVx0fVxuJiM0MztcdGlmIChsaW5rX3N0YSlcbiYjNDM7XHRcdGxpbmtfc3RhLVx1MDAzZXJ4X3N0YXRzLnBhY2tldHMmIzQzOyYjNDM7O1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLVx0XHRcdFx0XHQgaW50IGxpbmtfaWQsXG4tXHRcdFx0XHRcdCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcbiYjNDM7XHRcdFx0XHRcdCBzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEsXG4gXHRcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IDA7XG4tXHRfX2llZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIGxpbmtfaWQsIHN0YSwgc2tiKTtcbiYjNDM7XHRfX2llZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIGxpbmtfc3RhLCBza2IpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfaGFuZGxlX211X21pbW9fbW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuQEAgLTMwMSw3ICYjNDM7Mjc5LDcgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX2hhbmRsZV9tdV9taW1vX21vbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdGlmICghc2tiKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCAtMSwgTlVMTCwgc2tiKTtcbiYjNDM7XHRpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCBOVUxMLCBza2IpO1xuIH1cbiBcbiAvKlxuQEAgLTE0OTgsNyAmIzQzOzE0NzYsNyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfcmVvcmRlcl9hbXBkdShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxuIFx0LyogaWYgdGhpcyBtcGR1IGlzIGZyYWdtZW50ZWQgLSB0ZXJtaW5hdGUgcnggYWdncmVnYXRpb24gc2Vzc2lvbiAqL1xuIFx0c2MgPSBsZTE2X3RvX2NwdShoZHItXHUwMDNlc2VxX2N0cmwpO1xuIFx0aWYgKHNjIFx1MDAyNiBJRUVFODAyMTFfU0NUTF9GUkFHKSB7XG4tXHRcdGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2UocngtXHUwMDNlc2RhdGEsIHJ4LVx1MDAzZWxpbmtfaWQsIE5VTEwsIHNrYik7XG4mIzQzO1x0XHRpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHJ4LVx1MDAzZXNkYXRhLCBOVUxMLCBza2IpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG5AQCAtMjUyNCw3ICYjNDM7MjUwMiw3IEBAIGllZWU4MDIxMV9yeF9oX2RlZnJhZ21lbnQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeClcbiBcbiAgb3V0OlxuIFx0aWVlZTgwMjExX2xlZF9yeChyeC1cdTAwM2Vsb2NhbCk7XG4tXHRpZiAocngtXHUwMDNlc3RhKVxuJiM0MztcdGlmIChyeC1cdTAwM2VsaW5rX3N0YSlcbiBcdFx0cngtXHUwMDNlbGlua19zdGEtXHUwMDNlcnhfc3RhdHMucGFja2V0cyYjNDM7JiM0Mzs7XG4gXHRyZXR1cm4gUlhfQ09OVElOVUU7XG4gfVxuQEAgLTMzMzUsOCAmIzQzOzMzMTMsOCBAQCBpZWVlODAyMTFfcnhfaF9kYXRhKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpXG4gXHRcdCAgICAodGYtXHUwMDNlYWN0aW9uX2NvZGUgPT0gV0xBTl9URExTX0NIQU5ORUxfU1dJVENIX1JFUVVFU1QgfHxcbiBcdFx0ICAgICB0Zi1cdTAwM2VhY3Rpb25fY29kZSA9PSBXTEFOX1RETFNfQ0hBTk5FTF9TV0lUQ0hfUkVTUE9OU0UpKSB7XG4gXHRcdFx0cngtXHUwMDNlc2tiLVx1MDAzZXByb3RvY29sID0gY3B1X3RvX2JlMTYoRVRIX1BfVERMUyk7XG4tXHRcdFx0X19pZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC1cdTAwM2VsaW5rX2lkLFxuLVx0XHRcdFx0XHRcdCAgICAgICByeC1cdTAwM2VzdGEsIHJ4LVx1MDAzZXNrYik7XG4mIzQzO1x0XHRcdF9faWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgcngtXHUwMDNlbGlua19zdGEsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICByeC1cdTAwM2Vza2IpO1xuIFx0XHRcdHJldHVybiBSWF9RVUVVRUQ7XG4gXHRcdH1cbiBcdH1cbkBAIC0zOTkxLDcgJiM0MzszOTY5LDcgQEAgaWVlZTgwMjExX3J4X2hfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpXG4gXHRyZXR1cm4gUlhfUVVFVUVEO1xuIFxuICBxdWV1ZTpcbi1cdGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIHJ4LVx1MDAzZWxpbmtfaWQsIHJ4LVx1MDAzZXN0YSwgcngtXHUwMDNlc2tiKTtcbiYjNDM7XHRpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC1cdTAwM2VsaW5rX3N0YSwgcngtXHUwMDNlc2tiKTtcbiBcdHJldHVybiBSWF9RVUVVRUQ7XG4gfVxuIFxuQEAgLTQwMDUsNiAmIzQzOzM5ODMsNyBAQCBpZWVlODAyMTFfcnhfaF91c2Vyc3BhY2VfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxuIFx0XHQubGVuID0gcngtXHUwMDNlc2tiLVx1MDAzZWxlbixcbiBcdFx0LmxpbmtfaWQgPSByeC1cdTAwM2VsaW5rX2lkLFxuIFx0XHQuaGF2ZV9saW5rX2lkID0gcngtXHUwMDNlbGlua19pZCBcdTAwM2U9IDAsXG4mIzQzO1x0XHQubm9fc3RhID0gIXJ4LVx1MDAzZXN0YSxcbiBcdH07XG4gXG4gXHQvKiBza2lwIGtub3duLWJhZCBhY3Rpb24gZnJhbWVzIGFuZCByZXR1cm4gdGhlbSBpbiB0aGUgbmV4dCBoYW5kbGVyICovXG5AQCAtNDEyNyw3ICYjNDM7NDEwNiw3IEBAIGllZWU4MDIxMV9yeF9oX2FjdGlvbl9yZXR1cm4oc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeClcbiBcdFx0XHRcdFx0bG9jYWwtXHUwMDNlaHcub2ZmY2hhbm5lbF90eF9od19xdWV1ZTtcbiBcdFx0fVxuIFxuLVx0XHRfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQocngtXHUwMDNlc2RhdGEsIG5za2IsIDcsIC0xLFxuJiM0MztcdFx0X19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHJ4LVx1MDAzZXNkYXRhLCBuc2tiLCByeC1cdTAwM2VzdGEsIDcsIC0xLFxuIFx0XHRcdFx0XHQgICAgc3RhdHVzLVx1MDAzZWJhbmQpO1xuIFx0fVxuIFxuQEAgLTQxNDcsNyAmIzQzOzQxMjYsNyBAQCBpZWVlODAyMTFfcnhfaF9leHQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeClcbiBcdFx0cmV0dXJuIFJYX0RST1BfVV9VTkVYUEVDVEVEX0VYVF9GUkFNRTtcbiBcbiBcdC8qIGZvciBub3cgb25seSBiZWFjb25zIGFyZSBleHQsIHNvIHF1ZXVlIHRoZW0gKi9cbi1cdGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIHJ4LVx1MDAzZWxpbmtfaWQsIHJ4LVx1MDAzZXN0YSwgcngtXHUwMDNlc2tiKTtcbiYjNDM7XHRpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC1cdTAwM2VsaW5rX3N0YSwgcngtXHUwMDNlc2tiKTtcbiBcbiBcdHJldHVybiBSWF9RVUVVRUQ7XG4gfVxuQEAgLTQyMDQsNyAmIzQzOzQxODMsNyBAQCBpZWVlODAyMTFfcnhfaF9tZ210KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpXG4gXHRcdHJldHVybiBSWF9EUk9QX1VfVU5IQU5ETEVEX01HTVRfU1RZUEU7XG4gXHR9XG4gXG4tXHRpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC1cdTAwM2VsaW5rX2lkLCByeC1cdTAwM2VzdGEsIHJ4LVx1MDAzZXNrYik7XG4mIzQzO1x0aWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgcngtXHUwMDNlbGlua19zdGEsIHJ4LVx1MDAzZXNrYik7XG4gXG4gXHRyZXR1cm4gUlhfUVVFVUVEO1xuIH1cbkBAIC00MjQ4LDEyICYjNDM7NDIyNywyOCBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfaGFuZGxlcnMoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZyeC1cdTAwM2Vsb2NhbC1cdTAwM2VyeF9wYXRoX2xvY2spO1xuIFxuIFx0d2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKGZyYW1lcykpKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4mIzQzO1xuIFx0XHQvKlxuLVx0XHQgKiBhbGwgdGhlIG90aGVyIGZpZWxkcyBhcmUgdmFsaWQgYWNyb3NzIGZyYW1lc1xuLVx0XHQgKiB0aGF0IGJlbG9uZyB0byBhbiBhTVBEVSBzaW5jZSB0aGV5IGFyZSBvbiB0aGVcbi1cdFx0ICogc2FtZSBUSUQgZnJvbSB0aGUgc2FtZSBzdGF0aW9uXG4mIzQzO1x0XHQgKiBNb3N0IGZpZWxkcyBhcmUgdmFsaWQgYWNyb3NzIGZyYW1lcy4gSG93ZXZlcixcbiYjNDM7XHRcdCAqIGluIHRoZSBjYXNlIG9mIHJlb3JkZXJpbmcgZnJhbWVzIG1heSBoYXZlIGFycml2ZWRcbiYjNDM7XHRcdCAqIG9uIGRpZmZlcmVudCBsaW5rcywgc28gYWRqdXN0IHRoZSBsaW5rX2lkLCBsaW5rXG4mIzQzO1x0XHQgKiBhbmQgbGlua19zdGEgYWNjb3JkaW5nbHkuXG4gXHRcdCAqL1xuIFx0XHRyeC1cdTAwM2Vza2IgPSBza2I7XG4mIzQzO1x0XHRpZiAoaWVlZTgwMjExX3ZpZl9pc19tbGQoXHUwMDI2cngtXHUwMDNlc2RhdGEtXHUwMDNldmlmKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICB1bmxpa2VseShyeC1cdTAwM2VsaW5rX2lkICE9IHN0YXR1cy1cdTAwM2VsaW5rX2lkKSkge1xuJiM0MztcdFx0XHRpZiAocngtXHUwMDNlc3RhKSB7XG4mIzQzO1x0XHRcdFx0cngtXHUwMDNlbGlua19zdGEgPVxuJiM0MztcdFx0XHRcdFx0cmN1X2RlcmVmZXJlbmNlKHJ4LVx1MDAzZXN0YS1cdTAwM2VsaW5rW3J4LVx1MDAzZWxpbmtfaWRdKTtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0LyogTGluayBnb3QgZGlzYWJsZWQsIGp1c3QgdXNlIGRlZmxpbmsgKi9cbiYjNDM7XHRcdFx0XHRpZiAoIXJ4LVx1MDAzZWxpbmtfc3RhKVxuJiM0MztcdFx0XHRcdFx0cngtXHUwMDNlbGlua19zdGEgPSBcdTAwMjZyeC1cdTAwM2VzdGEtXHUwMDNlZGVmbGluaztcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRyeC1cdTAwM2VsaW5rX2lkID0gc3RhdHVzLVx1MDAzZWxpbmtfaWQ7XG4mIzQzO1x0XHRcdHJ4LVx1MDAzZWxpbmsgPSByY3VfZGVyZWZlcmVuY2UocngtXHUwMDNlc2RhdGEtXHUwMDNlbGlua1tzdGF0dXMtXHUwMDNlbGlua19pZF0pO1xuJiM0MztcdFx0fVxuIFxuIFx0XHRpZiAoV0FSTl9PTl9PTkNFKCFyeC1cdTAwM2VsaW5rKSkge1xuIFx0XHRcdHJlcyA9IFJYX0RST1BfVV9OT19MSU5LO1xuQEAgLTQzMjMsNyAmIzQzOzQzMTgsMzQgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX2ludm9rZV9yeF9oYW5kbGVycyhzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxuIHN0YXRpYyBib29sXG4gaWVlZTgwMjExX3J4X2lzX3ZhbGlkX3N0YV9saW5rX2lkKHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHU4IGxpbmtfaWQpXG4ge1xuLVx0cmV0dXJuICEhKHN0YS1cdTAwM2V2YWxpZF9saW5rcyBcdTAwMjYgQklUKGxpbmtfaWQpKTtcbiYjNDM7XHRpZiAoc3RhLVx1MDAzZW1sbylcbiYjNDM7XHRcdHJldHVybiBzdGEtXHUwMDNldmFsaWRfbGlua3MgXHUwMDI2IEJJVChsaW5rX2lkKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHN0YS1cdTAwM2VkZWZsaW5rLmxpbmtfaWQgPT0gbGlua19pZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgaWVlZTgwMjExX3J4X2RhdGFfc2V0X2xpbmtfc3RhKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXG4mIzQzO1x0XHRcdFx0XHQgICBzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YTtcbiYjNDM7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRSghbGlua19zdGEpIHx8XG4mIzQzO1x0ICAgICFpZWVlODAyMTFfcnhfaXNfdmFsaWRfc3RhX2xpbmtfaWQoXHUwMDI2bGlua19zdGEtXHUwMDNlc3RhLVx1MDAzZXN0YSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBsaW5rX3N0YS1cdTAwM2VsaW5rX2lkKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0c3RhID0gbGlua19zdGEtXHUwMDNlc3RhO1xuJiM0MztcbiYjNDM7XHRyeC1cdTAwM2VzdGEgPSBzdGE7XG4mIzQzO1x0cngtXHUwMDNlbG9jYWwgPSBzdGEtXHUwMDNlc2RhdGEtXHUwMDNlbG9jYWw7XG4mIzQzO1x0cngtXHUwMDNlbGluayA9IHJjdV9kZXJlZmVyZW5jZShzdGEtXHUwMDNlc2RhdGEtXHUwMDNlbGlua1tsaW5rX3N0YS1cdTAwM2VsaW5rX2lkXSk7XG4mIzQzO1x0aWYgKCFyeC1cdTAwM2VsaW5rKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyeC1cdTAwM2VsaW5rX2lkID0gcngtXHUwMDNlbGluay1cdTAwM2VsaW5rX2lkO1xuJiM0MztcdHJ4LVx1MDAzZWxpbmtfc3RhID0gbGlua19zdGE7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGluayhzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxuQEAgLTQzNjAsMTEgJiM0Mzs0MzgyLDEzIEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcbiBcbiBcdGlmIChsaW5rX2lkIFx1MDAzYyAwKSB7XG4gXHRcdGlmIChpZWVlODAyMTFfdmlmX2lzX21sZChcdTAwMjZyeC1cdTAwM2VzZGF0YS1cdTAwM2V2aWYpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgc3RhIFx1MDAyNlx1MDAyNiAhc3RhLVx1MDAzZXN0YS52YWxpZF9saW5rcylcbiYjNDM7XHRcdCAgICBzdGEgXHUwMDI2XHUwMDI2ICFzdGEtXHUwMDNlc3RhLnZhbGlkX2xpbmtzKSB7XG4gXHRcdFx0cngtXHUwMDNlbGluayA9XG4gXHRcdFx0XHRyY3VfZGVyZWZlcmVuY2UocngtXHUwMDNlc2RhdGEtXHUwMDNlbGlua1tzdGEtXHUwMDNlZGVmbGluay5saW5rX2lkXSk7XG4tXHRcdGVsc2VcbiYjNDM7XHRcdFx0cngtXHUwMDNlbGlua19zdGEgPSByY3VfZGVyZWZlcmVuY2UocngtXHUwMDNlc3RhLVx1MDAzZWxpbmtbbGlua19pZF0pO1xuJiM0MztcdFx0fSBlbHNlIHtcbiBcdFx0XHRyeC1cdTAwM2VsaW5rID0gXHUwMDI2cngtXHUwMDNlc2RhdGEtXHUwMDNlZGVmbGluaztcbiYjNDM7XHRcdH1cbiBcdH0gZWxzZSBpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9saW5rKHJ4LCBsaW5rX2lkKSkge1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5AQCAtNDM4Nyw3ICYjNDM7NDQxMSw3IEBAIHZvaWQgaWVlZTgwMjExX3JlbGVhc2VfcmVvcmRlcl90aW1lb3V0KHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBpbnQgdGlkKVxuIFx0c3RydWN0IHRpZF9hbXBkdV9yeCAqdGlkX2FnZ19yeDtcbiBcdGludCBsaW5rX2lkID0gLTE7XG4gXG4tXHQvKiBGSVhNRTogc3RhdGlzdGljcyB3b24mIzM5O3QgYmUgcmlnaHQgd2l0aCB0aGlzICovXG4mIzQzO1x0LyogTk9URTogdGhlIGNvcnJlY3QgbGluayBTVEEgZm9yIHRoZSBmcmFtZSBpcyBzZXQgbGF0ZXIgKi9cbiBcdGlmIChzdGEtXHUwMDNlc3RhLnZhbGlkX2xpbmtzKVxuIFx0XHRsaW5rX2lkID0gZmZzKHN0YS1cdTAwM2VzdGEudmFsaWRfbGlua3MpIC0gMTtcbiBcbkBAIC00OTE0LDIwICYjNDM7NDkzOCwxNCBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfODAyMyhzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxuIHtcbiBcdHN0cnVjdCBpZWVlODAyMTFfc3RhX3J4X3N0YXRzICpzdGF0cztcbiBcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0IocngtXHUwMDNlc2tiKTtcbi1cdHN0cnVjdCBzdGFfaW5mbyAqc3RhID0gcngtXHUwMDNlc3RhO1xuLVx0c3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhO1xuJiM0MztcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSA9IHJ4LVx1MDAzZWxpbmtfc3RhO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJ4LVx1MDAzZXNrYjtcbiBcdHZvaWQgKnNhID0gc2tiLVx1MDAzZWRhdGEgJiM0MzsgRVRIX0FMRU47XG4gXHR2b2lkICpkYSA9IHNrYi1cdTAwM2VkYXRhO1xuIFxuLVx0aWYgKHJ4LVx1MDAzZWxpbmtfaWQgXHUwMDNlPSAwKSB7XG4tXHRcdGxpbmtfc3RhID0gcmN1X2RlcmVmZXJlbmNlKHN0YS1cdTAwM2VsaW5rW3J4LVx1MDAzZWxpbmtfaWRdKTtcbi1cdFx0aWYgKFdBUk5fT05fT05DRSghbGlua19zdGEpKSB7XG4tXHRcdFx0ZGV2X2tmcmVlX3NrYihyeC1cdTAwM2Vza2IpO1xuLVx0XHRcdHJldHVybjtcbi1cdFx0fVxuLVx0fSBlbHNlIHtcbi1cdFx0bGlua19zdGEgPSBcdTAwMjZzdGEtXHUwMDNlZGVmbGluaztcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKCFsaW5rX3N0YSkpIHtcbiYjNDM7XHRcdGRldl9rZnJlZV9za2IocngtXHUwMDNlc2tiKTtcbiYjNDM7XHRcdHJldHVybjtcbiBcdH1cbiBcbiBcdHN0YXRzID0gXHUwMDI2bGlua19zdGEtXHUwMDNlcnhfc3RhdHM7XG5AQCAtNTE1NCw2ICYjNDM7NTE3Miw5IEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9pbnZva2VfZmFzdF9yeChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxuIFx0XHRnb3RvIGRyb3A7XG4gXHR9XG4gXG4mIzQzO1x0c3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4mIzQzO1x0c3RhdHVzLVx1MDAzZWxpbmtfaWQgPSByeC1cdTAwM2VsaW5rX2lkIFx1MDAzYyAwID8gMCA6IHJ4LVx1MDAzZWxpbmtfaWQ7XG4mIzQzO1xuIFx0aWVlZTgwMjExX3J4XzgwMjMocngsIGZhc3RfcngsIG9yaWdfbGVuKTtcbiBcbiBcdHJldHVybiB0cnVlO1xuQEAgLTUxNzgsNiAmIzQzOzUxOTksNyBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YTtcbiBcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSA9IHJ4LVx1MDAzZWxpbmtfc3RhO1xuIFx0c3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmsgPSByeC1cdTAwM2VsaW5rO1xuJiM0MztcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXM7XG4gXG4gXHRyeC1cdTAwM2Vza2IgPSBza2I7XG4gXG5AQCAtNTIyMSw2ICYjNDM7NTI0Myw5IEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcbiBcdFx0aGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopcngtXHUwMDNlc2tiLVx1MDAzZWRhdGE7XG4gXHR9XG4gXG4mIzQzO1x0c3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHJ4LVx1MDAzZXNrYik7XG4mIzQzO1x0c3RhdHVzLVx1MDAzZWxpbmtfaWQgPSByeC1cdTAwM2VsaW5rX2lkIFx1MDAzYyAwID8gMCA6IHJ4LVx1MDAzZWxpbmtfaWQ7XG4mIzQzO1xuIFx0aWYgKGllZWU4MDIxMV9pc19zMWdfYmVhY29uKGhkci1cdTAwM2VmcmFtZV9jb250cm9sKSkge1xuIFx0XHRpZWVlODAyMTFfaW52b2tlX3J4X2hhbmRsZXJzKHJ4KTtcbiBcdFx0cmV0dXJuIHRydWU7XG5AQCAtNTI1NiwyMiAmIzQzOzUyODEsMTkgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfODAyMyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3B1YnN0YSxcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4ge1xuIFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7XG4tXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2Zhc3RfcnggKmZhc3Rfcng7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgcng7XG4gXHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YTtcbi1cdGludCBsaW5rX2lkID0gLTE7XG4gXG4gXHRtZW1zZXQoXHUwMDI2cngsIDAsIHNpemVvZihyeCkpO1xuIFx0cnguc2tiID0gc2tiO1xuIFx0cngubG9jYWwgPSBsb2NhbDtcbiBcdHJ4Lmxpc3QgPSBsaXN0O1xuLVx0cngubGlua19pZCA9IC0xO1xuIFxuIFx0STgwMl9ERUJVR19JTkMobG9jYWwtXHUwMDNlZG90MTFSZWNlaXZlZEZyYWdtZW50Q291bnQpO1xuIFxuQEAgLTUyNzksMjMgJiM0Mzs1MzAxLDE1IEBAIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J4X2hhbmRsZV84MDIzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuIFx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSlcbiBcdFx0Z290byBkcm9wO1xuIFxuLVx0aWYgKCFwdWJzdGEpXG4mIzQzO1x0aWYgKCFsaW5rX3B1YnN0YSlcbiBcdFx0Z290byBkcm9wO1xuIFxuLVx0aWYgKHN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkKVxuLVx0XHRsaW5rX2lkID0gc3RhdHVzLVx1MDAzZWxpbmtfaWQ7XG4tXG4tXHQvKlxuLVx0ICogVE9ETzogU2hvdWxkIHRoZSBmcmFtZSBiZSBkcm9wcGVkIGlmIHRoZSByaWdodCBsaW5rX2lkIGlzIG5vdFxuLVx0ICogYXZhaWxhYmxlPyBPciBtYXkgYmUgaXQgaXMgZmluZSBpbiB0aGUgY3VycmVudCBmb3JtIHRvIHByb2NlZWQgd2l0aFxuLVx0ICogdGhlIGZyYW1lIHByb2Nlc3NpbmcgYmVjYXVzZSB3aXRoIGZyYW1lIGJlaW5nIGluIDgwMi4zIGZvcm1hdCxcbi1cdCAqIGxpbmtfaWQgaXMgdXNlZCBvbmx5IGZvciBzdGF0cyBwdXJwb3NlIGFuZCB1cGRhdGluZyB0aGUgc3RhdHMgb25cbi1cdCAqIHRoZSBkZWZsaW5rIGlzIGZpbmU/XG4tXHQgKi9cbi1cdHN0YSA9IGNvbnRhaW5lcl9vZihwdWJzdGEsIHN0cnVjdCBzdGFfaW5mbywgc3RhKTtcbi1cdGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X3N0YShcdTAwMjZyeCwgc3RhLCBsaW5rX2lkKSlcbiYjNDM7XHRzdGEgPSBjb250YWluZXJfb2YobGlua19wdWJzdGEtXHUwMDNlc3RhLCBzdHJ1Y3Qgc3RhX2luZm8sIHN0YSk7XG4mIzQzO1x0aWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfc3RhKFx1MDAyNnJ4LCBzdGEsIGxpbmtfcHVic3RhLVx1MDAzZWxpbmtfaWQpKVxuIFx0XHRnb3RvIGRyb3A7XG4gXG4mIzQzO1x0cngubGlua19pZCA9IGxpbmtfcHVic3RhLVx1MDAzZWxpbmtfaWQ7XG4mIzQzO1xuIFx0ZmFzdF9yeCA9IHJjdV9kZXJlZmVyZW5jZShyeC5zdGEtXHUwMDNlZmFzdF9yeCk7XG4gXHRpZiAoIWZhc3RfcngpXG4gXHRcdGdvdG8gZHJvcDtcbkBAIC01MzA3LDU5ICYjNDM7NTMyMSwxOSBAQCBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfODAyMyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcdGRldl9rZnJlZV9za2Ioc2tiKTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgaWVlZTgwMjExX3J4X2Zvcl9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIGNvbnN1bWUpXG4mIzQzO3N0YXRpYyBib29sIGllZWU4MDIxMV9yeF92YWxpZF9mcmVxKGludCBmcmVxLCBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluaylcbiB7XG4tXHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGE7XG4tXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YTtcbi1cdHN0cnVjdCBzdGFfaW5mbyAqc3RhO1xuLVx0aW50IGxpbmtfaWQgPSAtMTtcbi1cbi1cdGlmIChpZWVlODAyMTFfaXNfczFnX2JlYWNvbihoZHItXHUwMDNlZnJhbWVfY29udHJvbCkpIHtcbi1cdFx0aWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfc3RhKHJ4LCBOVUxMLCAtMSkpXG4tXHRcdFx0cmV0dXJuIGZhbHNlO1xuLVxuLVx0XHRyZXR1cm4gaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShyeCwgc2tiLCBjb25zdW1lKTtcbi1cdH1cbiYjNDM7XHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZjtcbiBcbi1cdC8qXG4tXHQgKiBMb29rIHVwIGxpbmsgc3RhdGlvbiBmaXJzdCwgaW4gY2FzZSB0aGVyZSYjMzk7cyBhXG4tXHQgKiBjaGFuY2UgdGhhdCB0aGV5IG1pZ2h0IGhhdmUgYSBsaW5rIGFkZHJlc3MgdGhhdFxuLVx0ICogaXMgaWRlbnRpY2FsIHRvIHRoZSBNTEQgYWRkcmVzcywgdGhhdCB3YXkgd2UmIzM5O2xsXG4tXHQgKiBoYXZlIHRoZSBsaW5rIGluZm9ybWF0aW9uIGlmIG5lZWRlZC5cbi1cdCAqL1xuLVx0bGlua19zdGEgPSBsaW5rX3N0YV9pbmZvX2dldF9ic3MocngtXHUwMDNlc2RhdGEsIGhkci1cdTAwM2VhZGRyMik7XG4tXHRpZiAobGlua19zdGEpIHtcbi1cdFx0c3RhID0gbGlua19zdGEtXHUwMDNlc3RhO1xuLVx0XHRsaW5rX2lkID0gbGlua19zdGEtXHUwMDNlbGlua19pZDtcbi1cdH0gZWxzZSB7XG4tXHRcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcbi1cbi1cdFx0c3RhID0gc3RhX2luZm9fZ2V0X2JzcyhyeC1cdTAwM2VzZGF0YSwgaGRyLVx1MDAzZWFkZHIyKTtcbi1cdFx0aWYgKHN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkKSB7XG4tXHRcdFx0bGlua19pZCA9IHN0YXR1cy1cdTAwM2VsaW5rX2lkO1xuLVx0XHR9IGVsc2UgaWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKFx1MDAyNnJ4LVx1MDAzZXNkYXRhLVx1MDAzZXZpZikgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgc3RhdHVzLVx1MDAzZWZyZXEpIHtcbi1cdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluaztcbi1cdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZjtcbi1cbi1cdFx0XHRmb3JfZWFjaF9saW5rX2RhdGFfcmN1KHJ4LVx1MDAzZXNkYXRhLCBsaW5rKSB7XG4tXHRcdFx0XHRjb25mID0gcmN1X2RlcmVmZXJlbmNlKGxpbmstXHUwMDNlY29uZi1cdTAwM2VjaGFuY3R4X2NvbmYpO1xuLVx0XHRcdFx0aWYgKCFjb25mIHx8ICFjb25mLVx1MDAzZWRlZi5jaGFuKVxuLVx0XHRcdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0XHRcdGlmIChzdGF0dXMtXHUwMDNlZnJlcSA9PSBjb25mLVx1MDAzZWRlZi5jaGFuLVx1MDAzZWNlbnRlcl9mcmVxKSB7XG4tXHRcdFx0XHRcdGxpbmtfaWQgPSBsaW5rLVx1MDAzZWxpbmtfaWQ7XG4tXHRcdFx0XHRcdGJyZWFrO1xuLVx0XHRcdFx0fVxuLVx0XHRcdH1cbi1cdFx0fVxuLVx0fVxuJiM0MztcdGlmICghZnJlcSB8fCBsaW5rLVx1MDAzZXNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX05BTiB8fFxuJiM0MztcdCAgICBsaW5rLVx1MDAzZXNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX05BTl9EQVRBKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEocngsIHN0YSwgbGlua19pZCkpXG4mIzQzO1x0Y29uZiA9IHJjdV9kZXJlZmVyZW5jZShsaW5rLVx1MDAzZWNvbmYtXHUwMDNlY2hhbmN0eF9jb25mKTtcbiYjNDM7XHRpZiAoIWNvbmYgfHwgIWNvbmYtXHUwMDNlZGVmLmNoYW4pXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdHJldHVybiBpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKHJ4LCBza2IsIGNvbnN1bWUpO1xuJiM0MztcdHJldHVybiBmcmVxID09IGNvbmYtXHUwMDNlZGVmLmNoYW4tXHUwMDNlY2VudGVyX2ZyZXE7XG4gfVxuIFxuIC8qXG5AQCAtNTM2NywxOCAmIzQzOzUzNDEsMjAgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX3J4X2Zvcl9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcbiAgKiBiZSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrIHByb3RlY3Rpb24uXG4gICovXG4gc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi1cdFx0XHRcdFx0IHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsXG4mIzQzO1x0XHRcdFx0XHQgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19wdWJzdGEsXG4gXHRcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0XHQgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTtcbi1cdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhO1xuJiM0MztcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7XG4mIzQzO1x0c3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhO1xuJiM0MztcdHN0cnVjdCBzdGFfaW5mbyAqc3RhO1xuIFx0X19sZTE2IGZjO1xuIFx0c3RydWN0IGllZWU4MDIxMV9yeF9kYXRhIHJ4O1xuLVx0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqcHJldjtcbiBcdHN0cnVjdCByaGxpc3RfaGVhZCAqdG1wO1xuJiM0MztcdGJvb2wgcnhfZGF0YV9wZW5kaW5nO1xuIFx0aW50IGVyciA9IDA7XG4gXG4gXHRmYyA9ICgoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItXHUwMDNlZGF0YSktXHUwMDNlZnJhbWVfY29udHJvbDtcbkBAIC01Mzg2LDcgJiM0Mzs1MzYyLDYgQEAgc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcdHJ4LnNrYiA9IHNrYjtcbiBcdHJ4LmxvY2FsID0gbG9jYWw7XG4gXHRyeC5saXN0ID0gbGlzdDtcbi1cdHJ4LmxpbmtfaWQgPSAtMTtcbiBcbiBcdGlmIChpZWVlODAyMTFfaXNfZGF0YShmYykgfHwgaWVlZTgwMjExX2lzX21nbXQoZmMpKVxuIFx0XHRJODAyX0RFQlVHX0lOQyhsb2NhbC1cdTAwM2Vkb3QxMVJlY2VpdmVkRnJhZ21lbnRDb3VudCk7XG5AQCAtNTQyNiw5NyAmIzQzOzU0MDEsMTAyIEBAIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gXHRcdCAgICAgaWVlZTgwMjExX2lzX3MxZ19iZWFjb24oaGRyLVx1MDAzZWZyYW1lX2NvbnRyb2wpKSlcbiBcdFx0aWVlZTgwMjExX3NjYW5fcngobG9jYWwsIHNrYik7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSWCBvZiBhIGRhdGEgZnJhbWUgc2hvdWxkIG9ubHkgaGFwcGVuIHRvIGV4aXN0aW5nIHN0YXRpb25zLlxuJiM0MztcdCAqIEl0IGlzIHRoZXJlZm9yZSBtb3JlIGVmZmljaWVudCB0byB1c2UgdGhlIG9uZSBwcm92aWRlZCBieSB0aGUgZHJpdmVyXG4mIzQzO1x0ICogb3Igc2VhcmNoIGJhc2VkIG9uIHRoZSBzdGF0aW9uJiMzOTtzIGFkZHJlc3MuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBOb3RlIHdlIHdpbGwgZmFsbCB0aHJvdWdoIGFuZCBoYW5kbGUgYSBzcHVyaW91cyBkYXRhIGZyYW1lIGluIHRoZVxuJiM0MztcdCAqIHNhbWUgd2F5IGFzIGEgbWFuYWdlbWVudCBmcmFtZS5cbiYjNDM7XHQgKi9cbiBcdGlmIChpZWVlODAyMTFfaXNfZGF0YShmYykpIHtcbi1cdFx0c3RydWN0IHN0YV9pbmZvICpzdGEsICpwcmV2X3N0YTtcbi1cdFx0aW50IGxpbmtfaWQgPSAtMTtcbi1cbi1cdFx0aWYgKHN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkKVxuLVx0XHRcdGxpbmtfaWQgPSBzdGF0dXMtXHUwMDNlbGlua19pZDtcbi1cbi1cdFx0aWYgKHB1YnN0YSkge1xuLVx0XHRcdHN0YSA9IGNvbnRhaW5lcl9vZihwdWJzdGEsIHN0cnVjdCBzdGFfaW5mbywgc3RhKTtcbi1cdFx0XHRpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEoXHUwMDI2cngsIHN0YSwgbGlua19pZCkpXG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cbi1cdFx0XHQvKlxuLVx0XHRcdCAqIEluIE1MTyBjb25uZWN0aW9uLCBmZXRjaCB0aGUgbGlua19pZCB1c2luZyBhZGRyMlxuLVx0XHRcdCAqIHdoZW4gdGhlIGRyaXZlciBkb2VzIG5vdCBwYXNzIGxpbmtfaWQgaW4gc3RhdHVzLlxuLVx0XHRcdCAqIFdoZW4gdGhlIGFkZHJlc3MgdHJhbnNsYXRpb24gaXMgYWxyZWFkeSBwZXJmb3JtZWQgYnlcbi1cdFx0XHQgKiBkcml2ZXIvaHcsIHRoZSB2YWxpZCBsaW5rX2lkIG11c3QgYmUgcGFzc2VkIGluXG4tXHRcdFx0ICogc3RhdHVzLlxuLVx0XHRcdCAqL1xuLVxuLVx0XHRcdGlmICghc3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQgXHUwMDI2XHUwMDI2IHB1YnN0YS1cdTAwM2VtbG8pIHtcbi1cdFx0XHRcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YTtcbi1cbi1cdFx0XHRcdGxpbmtfc3RhID0gbGlua19zdGFfaW5mb19nZXRfYnNzKHJ4LnNkYXRhLFxuLVx0XHRcdFx0XHRcdFx0XHQgaGRyLVx1MDAzZWFkZHIyKTtcbi1cdFx0XHRcdGlmICghbGlua19zdGEpXG4tXHRcdFx0XHRcdGdvdG8gb3V0O1xuLVxuLVx0XHRcdFx0aWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGluayhcdTAwMjZyeCxcbi1cdFx0XHRcdFx0XHRcdFx0bGlua19zdGEtXHUwMDNlbGlua19pZCkpXG4tXHRcdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbi1cbi1cdFx0XHRpZiAoaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShcdTAwMjZyeCwgc2tiLCB0cnVlKSlcbiYjNDM7XHRcdGlmIChsaW5rX3B1YnN0YSkge1xuJiM0MztcdFx0XHRzdGEgPSBjb250YWluZXJfb2YobGlua19wdWJzdGEtXHUwMDNlc3RhLCBzdHJ1Y3Qgc3RhX2luZm8sXG4mIzQzO1x0XHRcdFx0XHQgICBzdGEpO1xuJiM0MztcdFx0XHRsaW5rX3N0YSA9IHJjdV9kZXJlZmVyZW5jZShzdGEtXHUwMDNlbGlua1tsaW5rX3B1YnN0YS1cdTAwM2VsaW5rX2lkXSk7XG4mIzQzO1xuJiM0MztcdFx0XHRyeC5zZGF0YSA9IHN0YS1cdTAwM2VzZGF0YTtcbiYjNDM7XHRcdFx0aWYgKGllZWU4MDIxMV9yeF9kYXRhX3NldF9saW5rX3N0YShcdTAwMjZyeCwgbGlua19zdGEpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShcdTAwMjZyeCwgc2tiLCB0cnVlKSlcbiBcdFx0XHRcdHJldHVybjtcbiYjNDM7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbi1cdFx0cHJldl9zdGEgPSBOVUxMO1xuJiM0MztcdFx0cnhfZGF0YV9wZW5kaW5nID0gZmFsc2U7XG4gXG4mIzQzO1x0XHQvKiBTZWFyY2ggZm9yIHN0YXRpb25zIG9uIG5vbi1NTEQgaW50ZXJmYWNlcyAqL1xuIFx0XHRmb3JfZWFjaF9zdGFfaW5mbyhsb2NhbCwgaGRyLVx1MDAzZWFkZHIyLCBzdGEsIHRtcCkge1xuLVx0XHRcdGlmICghcHJldl9zdGEpIHtcbi1cdFx0XHRcdHByZXZfc3RhID0gc3RhO1xuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0fVxuJiM0MztcdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluaztcbiBcbi1cdFx0XHRyeC5zZGF0YSA9IHByZXZfc3RhLVx1MDAzZXNkYXRhO1xuLVx0XHRcdGlmICghc3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQgXHUwMDI2XHUwMDI2IHByZXZfc3RhLVx1MDAzZXN0YS5tbG8pIHtcbi1cdFx0XHRcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YTtcbiYjNDM7XHRcdFx0aWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKFx1MDAyNnN0YS1cdTAwM2VzZGF0YS1cdTAwM2V2aWYpKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdFx0bGlua19zdGEgPSBsaW5rX3N0YV9pbmZvX2dldF9ic3Mocnguc2RhdGEsXG4tXHRcdFx0XHRcdFx0XHRcdCBoZHItXHUwMDNlYWRkcjIpO1xuLVx0XHRcdFx0aWYgKCFsaW5rX3N0YSlcbi1cdFx0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdGxpbmsgPSBcdTAwMjZzdGEtXHUwMDNlc2RhdGEtXHUwMDNlZGVmbGluaztcbiYjNDM7XHRcdFx0aWYgKCFpZWVlODAyMTFfcnhfdmFsaWRfZnJlcShzdGF0dXMtXHUwMDNlZnJlcSwgbGluaykpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0XHRsaW5rX2lkID0gbGlua19zdGEtXHUwMDNlbGlua19pZDtcbiYjNDM7XHRcdFx0aWYgKHJ4X2RhdGFfcGVuZGluZykge1xuJiM0MztcdFx0XHRcdGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoXHUwMDI2cngsIHNrYixcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdGZhbHNlKTtcbiYjNDM7XHRcdFx0XHRyeF9kYXRhX3BlbmRpbmcgPSBmYWxzZTtcbiBcdFx0XHR9XG4gXG4tXHRcdFx0aWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfc3RhKFx1MDAyNnJ4LCBwcmV2X3N0YSwgbGlua19pZCkpXG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cbi1cdFx0XHRpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKFx1MDAyNnJ4LCBza2IsIGZhbHNlKTtcbiYjNDM7XHRcdFx0cnguc2RhdGEgPSBzdGEtXHUwMDNlc2RhdGE7XG4mIzQzO1x0XHRcdGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X2xpbmtfc3RhKFx1MDAyNnJ4LCBcdTAwMjZzdGEtXHUwMDNlZGVmbGluaykpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0cHJldl9zdGEgPSBzdGE7XG4mIzQzO1x0XHRcdHJ4X2RhdGFfcGVuZGluZyA9IHRydWU7XG4gXHRcdH1cbiBcbi1cdFx0aWYgKHByZXZfc3RhKSB7XG4tXHRcdFx0cnguc2RhdGEgPSBwcmV2X3N0YS1cdTAwM2VzZGF0YTtcbi1cdFx0XHRpZiAoIXN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkIFx1MDAyNlx1MDAyNiBwcmV2X3N0YS1cdTAwM2VzdGEubWxvKSB7XG4tXHRcdFx0XHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGE7XG4mIzQzO1x0XHQvKiBBbmQgc2VhcmNoIHN0YXRpb25zIG9uIE1MRCBpbnRlcmZhY2VzICovXG4mIzQzO1x0XHRmb3JfZWFjaF9saW5rX3N0YV9pbmZvKGxvY2FsLCBoZHItXHUwMDNlYWRkcjIsIGxpbmtfc3RhLCB0bXApIHtcbiYjNDM7XHRcdFx0c3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbms7XG4gXG4tXHRcdFx0XHRsaW5rX3N0YSA9IGxpbmtfc3RhX2luZm9fZ2V0X2JzcyhyeC5zZGF0YSxcbi1cdFx0XHRcdFx0XHRcdFx0IGhkci1cdTAwM2VhZGRyMik7XG4tXHRcdFx0XHRpZiAoIWxpbmtfc3RhKVxuLVx0XHRcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdFx0c3RhID0gbGlua19zdGEtXHUwMDNlc3RhO1xuJiM0MztcdFx0XHRzZGF0YSA9XHRzdGEtXHUwMDNlc2RhdGE7XG4mIzQzO1x0XHRcdGxpbmsgPSByY3VfZGVyZWZlcmVuY2Uoc2RhdGEtXHUwMDNlbGlua1tsaW5rX3N0YS1cdTAwM2VsaW5rX2lkXSk7XG4gXG4tXHRcdFx0XHRsaW5rX2lkID0gbGlua19zdGEtXHUwMDNlbGlua19pZDtcbiYjNDM7XHRcdFx0aWYgKCFpZWVlODAyMTFfcnhfdmFsaWRfZnJlcShzdGF0dXMtXHUwMDNlZnJlcSwgbGluaykpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAocnhfZGF0YV9wZW5kaW5nKSB7XG4mIzQzO1x0XHRcdFx0aWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShcdTAwMjZyeCwgc2tiLFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0ZmFsc2UpO1xuJiM0MztcdFx0XHRcdHJ4X2RhdGFfcGVuZGluZyA9IGZhbHNlO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHRpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEoXHUwMDI2cngsIHByZXZfc3RhLCBsaW5rX2lkKSlcbi1cdFx0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0XHRyeC5zZGF0YSA9IHN0YS1cdTAwM2VzZGF0YTtcbiYjNDM7XHRcdFx0aWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGlua19zdGEoXHUwMDI2cngsIGxpbmtfc3RhKSlcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJ4X2RhdGFfcGVuZGluZyA9IHRydWU7XG4mIzQzO1x0XHR9XG4gXG4mIzQzO1x0XHRpZiAocnhfZGF0YV9wZW5kaW5nKSB7XG4gXHRcdFx0aWYgKGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoXHUwMDI2cngsIHNrYiwgdHJ1ZSkpXG4gXHRcdFx0XHRyZXR1cm47XG4mIzQzO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0LyogZmFsbCB0aHJvdWdoLCBlLmcuIGZvciBzcHVyaW91cyBmcmFtZSBub3RpZmljYXRpb24gKi9cbiBcdH1cbiBcbi1cdHByZXYgPSBOVUxMO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhpcyBpcyBhIG1hbmFnZW1lbnQgZnJhbWUgKG9yIGEgZGF0YSBmcmFtZSB3aXRob3V0IGEgc3RhdGlvbikgYW5kXG4mIzQzO1x0ICogaXQgd2lsbCBiZSBkZWxpdmVyZWQgaW5kZXBlbmRlbnQgb2Ygd2hldGhlciBhIHN0YXRpb24gZXhpc3RzLFxuJiM0MztcdCAqIHNvIGl0ZXJhdGUgdGhlIGludGVyZmFjZXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0cnhfZGF0YV9wZW5kaW5nID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdC8qIFdlIGV4cGVjdCB0aGUgZHJpdmVyIHRvIHByb3ZpZGUgZnJlcXVlbmN5IGluZm9ybWF0aW9uICovXG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRSghbG9jYWwtXHUwMDNlZW11bGF0ZV9jaGFuY3R4IFx1MDAyNlx1MDAyNiAhc3RhdHVzLVx1MDAzZWZyZXEpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgXHUwMDI2bG9jYWwtXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xuJiM0MztcdFx0c3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmsgPSBOVUxMO1xuJiM0MztcbiBcdFx0aWYgKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG5AQCAtNTUyNCwzMCAmIzQzOzU1MDQsODUgQEAgc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcdFx0ICAgIHNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pXG4gXHRcdFx0Y29udGludWU7XG4gXG4mIzQzO1x0XHRsaW5rX3N0YSA9IE5VTEw7XG4mIzQzO1x0XHRsaW5rID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBUcnkgdG8gcmVzb2x2ZSB0aGUgc3RhdGlvbiAqL1xuJiM0MztcdFx0aWYgKCFpZWVlODAyMTFfdmlmX2lzX21sZChcdTAwMjZzZGF0YS1cdTAwM2V2aWYpKSB7XG4mIzQzO1x0XHRcdHN0YSA9IHN0YV9pbmZvX2dldF9ic3Moc2RhdGEsIGhkci1cdTAwM2VhZGRyMik7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoc3RhKSB7XG4mIzQzO1x0XHRcdFx0bGlua19zdGEgPSBcdTAwMjZzdGEtXHUwMDNlZGVmbGluaztcbiYjNDM7XHRcdFx0XHRsaW5rID0gXHUwMDI2c2RhdGEtXHUwMDNlZGVmbGluaztcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0bGlua19zdGEgPSBsaW5rX3N0YV9pbmZvX2dldF9ic3Moc2RhdGEsIGhkci1cdTAwM2VhZGRyMik7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAobGlua19zdGEpXG4mIzQzO1x0XHRcdFx0bGluayA9IHJjdV9kZXJlZmVyZW5jZShzZGF0YS1cdTAwM2VsaW5rW2xpbmtfc3RhLVx1MDAzZWxpbmtfaWRdKTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdC8qXG4tXHRcdCAqIGZyYW1lIGlzIGRlc3RpbmVkIGZvciB0aGlzIGludGVyZmFjZSwgYnV0IGlmIGl0JiMzOTtzXG4tXHRcdCAqIG5vdCBhbHNvIGZvciB0aGUgcHJldmlvdXMgb25lIHdlIGhhbmRsZSB0aGF0IGFmdGVyXG4tXHRcdCAqIHRoZSBsb29wIHRvIGF2b2lkIGNvcHlpbmcgdGhlIFNLQiBvbmNlIHRvbyBtdWNoXG4mIzQzO1x0XHQgKiBJZiB3ZSBmb3VuZCBhIFNUQSBhbmQgaXQgaGFzIGEgdmFsaWQgbGluayBpbmZvcm1hdGlvbiwgdGhlblxuJiM0MztcdFx0ICogUlggdXNpbmcgdGhlIHN0YXRpb24uXG4gXHRcdCAqL1xuJiM0MztcdFx0aWYgKGxpbmtfc3RhIFx1MDAyNlx1MDAyNiBsaW5rIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGllZWU4MDIxMV9yeF92YWxpZF9mcmVxKHN0YXR1cy1cdTAwM2VmcmVxLCBsaW5rKSkge1xuJiM0MztcdFx0XHRpZiAocnhfZGF0YV9wZW5kaW5nKSB7XG4mIzQzO1x0XHRcdFx0aWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShcdTAwMjZyeCwgc2tiLCBmYWxzZSk7XG4mIzQzO1x0XHRcdFx0cnhfZGF0YV9wZW5kaW5nID0gZmFsc2U7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRcdC8qIE5vIHZhbGlkX2xpbmtzIGNoZWNrIGFzIHdlIG5lZWQgdG8gUlggYmVhY29ucyAqL1xuJiM0MztcbiYjNDM7XHRcdFx0cnguc2RhdGEgPSBzZGF0YTtcbiYjNDM7XHRcdFx0aWYgKGllZWU4MDIxMV9yeF9kYXRhX3NldF9saW5rX3N0YShcdTAwMjZyeCwgbGlua19zdGEpKVxuJiM0MztcdFx0XHRcdHJ4X2RhdGFfcGVuZGluZyA9IHRydWU7XG4gXG4tXHRcdGlmICghcHJldikge1xuLVx0XHRcdHByZXYgPSBzZGF0YTtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuLVx0XHRyeC5zZGF0YSA9IHByZXY7XG4tXHRcdGllZWU4MDIxMV9yeF9mb3JfaW50ZXJmYWNlKFx1MDAyNnJ4LCBza2IsIGZhbHNlKTtcbiYjNDM7XHRcdC8qIE5vIHN0YXRpb24sIHRyeSB0byByZXNvbHZlIHRoZSBsaW5rIGFuZCBSWCAqL1xuJiM0MztcdFx0aWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKFx1MDAyNnNkYXRhLVx1MDAzZXZpZikpIHtcbiYjNDM7XHRcdFx0c3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmY7XG4mIzQzO1x0XHRcdGJvb2wgZm91bmQgPSBmYWxzZTtcbiBcbi1cdFx0cHJldiA9IHNkYXRhO1xuLVx0fVxuJiM0MztcdFx0XHRmb3JfZWFjaF9saW5rX2RhdGFfcmN1KHNkYXRhLCBsaW5rKSB7XG4mIzQzO1x0XHRcdFx0Y29uZiA9IHJjdV9kZXJlZmVyZW5jZShsaW5rLVx1MDAzZWNvbmYtXHUwMDNlY2hhbmN0eF9jb25mKTtcbiYjNDM7XHRcdFx0XHRpZiAoIWNvbmYgfHwgIWNvbmYtXHUwMDNlZGVmLmNoYW4pXG4mIzQzO1x0XHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdGlmIChwcmV2KSB7XG4tXHRcdHJ4LnNkYXRhID0gcHJldjtcbiYjNDM7XHRcdFx0XHRpZiAoc3RhdHVzLVx1MDAzZWZyZXEgPT0gY29uZi1cdTAwM2VkZWYuY2hhbi1cdTAwM2VjZW50ZXJfZnJlcSkge1xuJiM0MztcdFx0XHRcdFx0Zm91bmQgPSB0cnVlO1xuJiM0MztcdFx0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdFx0fVxuJiM0MztcdFx0XHR9XG4gXG4tXHRcdGlmIChpZWVlODAyMTFfcnhfZm9yX2ludGVyZmFjZShcdTAwMjZyeCwgc2tiLCB0cnVlKSlcbi1cdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdGlmICghZm91bmQpXG4mIzQzO1x0XHRcdFx0bGluayA9IFx1MDAyNnNkYXRhLVx1MDAzZWRlZmxpbms7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRsaW5rID0gXHUwMDI2c2RhdGEtXHUwMDNlZGVmbGluaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAocnhfZGF0YV9wZW5kaW5nKSB7XG4mIzQzO1x0XHRcdGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoXHUwMDI2cngsIHNrYiwgZmFsc2UpO1xuJiM0MztcdFx0XHRyeF9kYXRhX3BlbmRpbmcgPSBmYWxzZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRyeC5zZGF0YSA9IHNkYXRhO1xuJiM0MztcdFx0cngubG9jYWwgPSBzZGF0YS1cdTAwM2Vsb2NhbDtcbiYjNDM7XHRcdHJ4LmxpbmsgPSBsaW5rO1xuJiM0MztcdFx0cngubGlua19pZCA9IGxpbmstXHUwMDNlbGlua19pZDtcbiYjNDM7XHRcdHJ4LnN0YSA9IE5VTEw7XG4mIzQzO1x0XHRyeC5saW5rX3N0YSA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdFx0cnhfZGF0YV9wZW5kaW5nID0gdHJ1ZTtcbiBcdH1cbiBcbiYjNDM7XHRpZiAocnhfZGF0YV9wZW5kaW5nIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKFx1MDAyNnJ4LCBza2IsIHRydWUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiAgb3V0OlxuIFx0ZGV2X2tmcmVlX3NrYihza2IpO1xuIH1cbkBAIC01NTU2LDcgJiM0Mzs1NTkxLDggQEAgc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiAgKiBUaGlzIGlzIHRoZSByZWNlaXZlIHBhdGggaGFuZGxlci4gSXQgaXMgY2FsbGVkIGJ5IGEgbG93IGxldmVsIGRyaXZlciB3aGVuIGFuXG4gICogODAyLjExIE1QRFUgaXMgcmVjZWl2ZWQgZnJvbSB0aGUgaGFyZHdhcmUuXG4gICovXG4tdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSxcbiYjNDM7dm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiYjNDM7XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3B1YnN0YSxcbiBcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4ge1xuIFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7XG5AQCAtNTY5NCw5ICYjNDM7NTczMCw2IEBAIHZvaWQgaWVlZTgwMjExX3J4X2xpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlmIChXQVJOX09OX09OQ0Uoc3RhdHVzLVx1MDAzZWxpbmtfaWQgXHUwMDNlPSBJRUVFODAyMTFfTElOS19VTlNQRUNJRklFRCkpXG4tXHRcdGdvdG8gZHJvcDtcbi1cbiBcdHN0YXR1cy1cdTAwM2VyeF9mbGFncyA9IDA7XG4gXG4gXHRrY292X3JlbW90ZV9zdGFydF9jb21tb24oc2tiX2dldF9rY292X2hhbmRsZShza2IpKTtcbkBAIC01NzE1LDkgJiM0Mzs1NzQ4LDEwIEBAIHZvaWQgaWVlZTgwMjExX3J4X2xpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsXG4gXHRcdFx0aWVlZTgwMjExX3RwdF9sZWRfdHJpZ19yeChsb2NhbCwgc2tiLVx1MDAzZWxlbik7XG4gXG4gXHRcdGlmIChzdGF0dXMtXHUwMDNlZmxhZyBcdTAwMjYgUlhfRkxBR184MDIzKVxuLVx0XHRcdF9faWVlZTgwMjExX3J4X2hhbmRsZV84MDIzKGh3LCBwdWJzdGEsIHNrYiwgbGlzdCk7XG4mIzQzO1x0XHRcdF9faWVlZTgwMjExX3J4X2hhbmRsZV84MDIzKGh3LCBsaW5rX3B1YnN0YSwgc2tiLCBsaXN0KTtcbiBcdFx0ZWxzZVxuLVx0XHRcdF9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXQoaHcsIHB1YnN0YSwgc2tiLCBsaXN0KTtcbiYjNDM7XHRcdFx0X19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChodywgbGlua19wdWJzdGEsIHNrYixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBsaXN0KTtcbiBcdH1cbiBcbiBcdGtjb3ZfcmVtb3RlX3N0b3AoKTtcbkBAIC01NzI3LDcgJiM0Mzs1NzYxLDggQEAgdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSxcbiB9XG4gRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfcnhfbGlzdCk7XG4gXG4tdm9pZCBpZWVlODAyMTFfcnhfbmFwaShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSxcbiYjNDM7dm9pZCBpZWVlODAyMTFfcnhfbmFwaShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiYjNDM7XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3B1YnN0YSxcbiBcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSlcbiB7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqdG1wO1xuQEAgLTU3NDAsNyAmIzQzOzU3NzUsNyBAQCB2b2lkIGllZWU4MDIxMV9yeF9uYXBpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLFxuIFx0ICogcmVjZWl2ZSBwcm9jZXNzaW5nXG4gXHQgKi9cbiBcdHJjdV9yZWFkX2xvY2soKTtcbi1cdGllZWU4MDIxMV9yeF9saXN0KGh3LCBwdWJzdGEsIHNrYiwgXHUwMDI2bGlzdCk7XG4mIzQzO1x0aWVlZTgwMjExX3J4X2xpc3QoaHcsIGxpbmtfcHVic3RhLCBza2IsIFx1MDAyNmxpc3QpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRpZiAoIW5hcGkpIHtcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc2Nhbi5jIGIvbmV0L21hYzgwMjExL3NjYW4uY1xuaW5kZXggZWVmZjIzMGJkOTA5Zi4uMzI0YzJiNmQ3Y2UxYiAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9zY2FuLmNcbkBAIC05LDcgJiM0Mzs5LDcgQEBcbiAgKiBDb3B5cmlnaHQgMjAwNywgTWljaGFlbCBXdSBcdTAwM2NmbGFtaW5naWNlQHNvdXJtaWxrLm5ldFx1MDAzZVxuICAqIENvcHlyaWdodCAyMDEzLTIwMTUgIEludGVsIE1vYmlsZSBDb21tdW5pY2F0aW9ucyBHbWJIXG4gICogQ29weXJpZ2h0IDIwMTYtMjAxNyAgSW50ZWwgRGV1dHNjaGxhbmQgR21iSFxuLSAqIENvcHlyaWdodCAoQykgMjAxOC0yMDI1IEludGVsIENvcnBvcmF0aW9uXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDI2IEludGVsIENvcnBvcmF0aW9uXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfYXJwLmhcdTAwM2VcbkBAIC0yMDQsMTIgJiM0MzsyMDQsMTAgQEAgaWVlZTgwMjExX2Jzc19pbmZvX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcbiBcdFx0ICogYW4gaW5kaWNhdGlvbiBvbiB3aGljaCBvZiB0aGUgbGlua3MgdGhlIGZyYW1lIHdhcyByZWNlaXZlZFxuIFx0XHQgKi9cbiBcdFx0aWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKFx1MDAyNnNjYW5fc2RhdGEtXHUwMDNldmlmKSkge1xuLVx0XHRcdGlmIChyeF9zdGF0dXMtXHUwMDNlbGlua192YWxpZCkge1xuLVx0XHRcdFx0czggbGlua19pZCA9IHJ4X3N0YXR1cy1cdTAwM2VsaW5rX2lkO1xuJiM0MztcdFx0XHRzOCBsaW5rX2lkID0gcnhfc3RhdHVzLVx1MDAzZWxpbmtfaWQ7XG4gXG4tXHRcdFx0XHRsaW5rX2NvbmYgPVxuLVx0XHRcdFx0XHRyY3VfZGVyZWZlcmVuY2Uoc2Nhbl9zZGF0YS1cdTAwM2V2aWYubGlua19jb25mW2xpbmtfaWRdKTtcbi1cdFx0XHR9XG4mIzQzO1x0XHRcdGxpbmtfY29uZiA9XG4mIzQzO1x0XHRcdFx0cmN1X2RlcmVmZXJlbmNlKHNjYW5fc2RhdGEtXHUwMDNldmlmLmxpbmtfY29uZltsaW5rX2lkXSk7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0bGlua19jb25mID0gXHUwMDI2c2Nhbl9zZGF0YS1cdTAwM2V2aWYuYnNzX2NvbmY7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdGRscy5jIGIvbmV0L21hYzgwMjExL3RkbHMuY1xuaW5kZXggZmZkNTc1YThkMTg4Zi4uYTg5YzY1NjliOWNmNSAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS90ZGxzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS90ZGxzLmNcbkBAIC0xMDY2LDcgJiM0MzsxMDY2LDcgQEAgaWVlZTgwMjExX3RkbHNfcHJlcF9tZ210X3BhY2tldChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0fVxuIFxuIFx0aWYgKGFjdGlvbl9jb2RlID09IFdMQU5fUFVCX0FDVElPTl9URExTX0RJU0NPVkVSX1JFUykge1xuLVx0XHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCA3LCBsaW5rX2lkKTtcbiYjNDM7XHRcdGllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIHN0YSwgNywgbGlua19pZCk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS90eC5jIGIvbmV0L21hYzgwMjExL3R4LmNcbmluZGV4IDBjZjVmNmVjNzVlNjcuLmYzZjlmMTI0ODFjNDAgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvdHguY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL3R4LmNcbkBAIC02NDQxLDcgJiM0Mzs2NDQxLDggQEAgdm9pZCBpZWVlODAyMTFfdW5yZXNlcnZlX3RpZChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLCB1OCB0aWQpXG4gRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfdW5yZXNlcnZlX3RpZCk7XG4gXG4gdm9pZCBfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRpZCwgaW50IGxpbmtfaWQsXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxuJiM0MztcdFx0XHRcdCBpbnQgdGlkLCBpbnQgbGlua19pZCxcbiBcdFx0XHRcdCBlbnVtIG5sODAyMTFfYmFuZCBiYW5kKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAodm9pZCAqKXNrYi1cdTAwM2VkYXRhO1xuQEAgLTY0OTMsMTIgJiM0Mzs2NDk0LDEzIEBAIHZvaWQgX19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0ICovXG4gXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gXHRJRUVFODAyMTFfU0tCX0NCKHNrYiktXHUwMDNlYmFuZCA9IGJhbmQ7XG4tXHRpZWVlODAyMTFfeG1pdChzZGF0YSwgTlVMTCwgc2tiKTtcbiYjNDM7XHRpZWVlODAyMTFfeG1pdChzZGF0YSwgc3RhLCBza2IpO1xuIFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4gfVxuIFxuIHZvaWQgaWVlZTgwMjExX3R4X3NrYl90aWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tXHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGlkLCBpbnQgbGlua19pZClcbiYjNDM7XHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcbiYjNDM7XHRcdFx0ICBpbnQgdGlkLCBpbnQgbGlua19pZClcbiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY2hhbmN0eF9jb25mO1xuIFx0ZW51bSBubDgwMjExX2JhbmQgYmFuZDtcbkBAIC02NTI0LDcgJiM0Mzs2NTI2LDcgQEAgdm9pZCBpZWVlODAyMTFfdHhfc2tiX3RpZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0YmFuZCA9IDA7XG4gXHR9XG4gXG4tXHRfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc2RhdGEsIHNrYiwgdGlkLCBsaW5rX2lkLCBiYW5kKTtcbiYjNDM7XHRfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc2RhdGEsIHNrYiwgc3RhLCB0aWQsIGxpbmtfaWQsIGJhbmQpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG5pbmRleCA4YWRiZWY1ZjA0NDI1Li4wYWIyOTA3ZTY2ZjY4IDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuQEAgLTEwOTYsNiAmIzQzOzEwOTYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmw4MDIxMV9wb2xpY3lbTlVNX05MODAyMTFfQVRUUl0gPSB7XG4gXHRbTkw4MDIxMV9BVFRSX05QQ0FfUFVOQ1RfQklUTUFQXSA9XG4gXHRcdE5MQV9QT0xJQ1lfRlVMTF9SQU5HRShOTEFfVTMyLCBcdTAwMjZubDgwMjExX3B1bmN0X2JpdG1hcF9yYW5nZSksXG4gXHRbTkw4MDIxMV9BVFRSX1NUQV9EVU1QX0xJTktfU1RBVFNdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sXG4mIzQzO1x0W05MODAyMTFfQVRUUl9GUkFNRV9DTURfTk9fU1RBXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LFxuIH07XG4gXG4gLyogcG9saWN5IGZvciB0aGUga2V5IGF0dHJpYnV0ZXMgKi9cbkBAIC0xNDg1OSw2ICYjNDM7MTQ4NjAsOSBAQCBzdGF0aWMgaW50IG5sODAyMTFfdHhfbWdtdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0ICAgICEod2Rldi1cdTAwM2V2YWxpZF9saW5rcyBcdTAwMjYgQklUKHBhcmFtcy5saW5rX2lkKSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiM0MztcdHBhcmFtcy5ub19zdGEgPVxuJiM0MztcdFx0bmxhX2dldF9mbGFnKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0ZSQU1FX0NNRF9OT19TVEFdKTtcbiYjNDM7XG4gXHRwYXJhbXMuYnVmID0gbmxhX2RhdGEoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfRlJBTUVdKTtcbiBcdHBhcmFtcy5sZW4gPSBubGFfbGVuKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0ZSQU1FXSk7XG4gXG5AQCAtMjIwMjAsNyAmIzQzOzIyMDI0LDkgQEAgaW50IG5sODAyMTFfc2VuZF9tZ210KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdCAgICAoaW5mby1cdTAwM2VhY2tfdHN0YW1wIFx1MDAyNlx1MDAyNiBubGFfcHV0X3U2NF82NGJpdChtc2csXG4gXHRcdFx0XHRcdFx0ICAgTkw4MDIxMV9BVFRSX1RYX0hXX1RJTUVTVEFNUCxcbiBcdFx0XHRcdFx0XHQgICBpbmZvLVx1MDAzZWFja190c3RhbXAsXG4tXHRcdFx0XHRcdFx0ICAgTkw4MDIxMV9BVFRSX1BBRCkpKVxuJiM0MztcdFx0XHRcdFx0XHQgICBOTDgwMjExX0FUVFJfUEFEKSkgfHxcbiYjNDM7XHQgICAgKGluZm8tXHUwMDNlbm9fc3RhIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgbmxhX3B1dF9mbGFnKG1zZywgTkw4MDIxMV9BVFRSX0ZSQU1FX0NNRF9OT19TVEEpKSlcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG4gXHRnZW5sbXNnX2VuZChtc2csIGhkcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDQ6MzU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjExX3J4X2xpc3QmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3J4X25hcGkmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX21nbXRfdHgmIzM0OywKICAgICYjMzQ7bmw4MDIxMV90eF9tZ210JiMzNDssCiAgICAmIzM0O25sODAyMTFfc2VuZF9tZ210JiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV90eF9za2JfdGlkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtYWM4MDIxMSBSWCBwYXRoIHRvIGhhbmRsZSBNTE8gKE11bHRpLUxpbmsgT3BlcmF0aW9uKSBsaW5rIElEcyBtb3JlIHJvYnVzdGx5LCByZW1vdmluZyBgbGlua192YWxpZGAgYW5kIHBhc3NpbmcgYGxpbmtfc3RhYCBkaXJlY3RseS4gSXQgYWxzbyBhZGRzIGEgYG5vX3N0YWAgZmxhZyBmb3IgbWFuYWdlbWVudCBmcmFtZSBUWC9SWC4gVGhlc2UgYXJlIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIG1hYzgwMjExIGFuZCBjZmc4MDIxMSwgcmVhY2hhYmxlIHZpYSBtYWM4MDIxMV9od3NpbSBhbmQgbmw4MDIxMSBuZXRsaW5rIGludGVyZmFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDllMTJhZTMxNWZlZTUwZTdjZDYwMjI2N2VlNjVkN2I4YmU0YjI1YjUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAxIDA0OjM1OjIwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kcF9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kcF9yeC5jCmluZGV4IDMzNDI1NzA3YzA4NDIuLmZiYjNkMThmNTVkZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZHBfcnguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RwX3J4LmMKQEAgLTI1MDAsNyAmIzQzOzI1MDAsNyBAQCBzdGF0aWMgdm9pZCBhdGgxMWtfZHBfcnhfZGVsaXZlcl9tc2R1KHN0cnVjdCBhdGgxMWsgKmFyLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcAogCSAgICAhKGlzX21jYmMgJmFtcDsmYW1wOyByeF9zdGF0dXMtJmd0O2ZsYWcgJmFtcDsgUlhfRkxBR19ERUNSWVBURUQpKQogCQlyeF9zdGF0dXMtJmd0O2ZsYWcgfD0gUlhfRkxBR184MDIzOwogCi0JaWVlZTgwMjExX3J4X25hcGkoYXItJmd0O2h3LCBwdWJzdGEsIG1zZHUsIG5hcGkpOwomIzQzOwlpZWVlODAyMTFfcnhfbmFwaShhci0mZ3Q7aHcsIHB1YnN0YSA/ICZhbXA7cHVic3RhLSZndDtkZWZsaW5rIDogTlVMTCwgbXNkdSwgbmFwaSk7CiB9CiAKIHN0YXRpYyBib29sIGF0aDExa19kcF9yeF9jaGVja19ud2lmaV9oZHJfbGVuX3ZhbGlkKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX21vbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9tb24uYwppbmRleCA3ZDViZTc3YjA4MWY4Li4xZmFmMTg5NmQwYWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX21vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfbW9uLmMKQEAgLTUwMyw4ICYjNDM7NTAzLDYgQEAgdm9pZCBhdGgxMmtfZHBfbW9uX3J4X2RlbGl2ZXJfbXNkdShzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsCiAJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1czsKIAlzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlICpoZSA9IE5VTEw7CiAKLQlzdGF0dXMtJmd0O2xpbmtfdmFsaWQgPSAwOwotCiAJaWYgKChzdGF0dXMtJmd0O2VuY29kaW5nID09IFJYX0VOQ19IRSkgJmFtcDsmYW1wOyAhKHN0YXR1cy0mZ3Q7ZmxhZyAmYW1wOyBSWF9GTEFHX1JBRElPVEFQX0hFKSAmYW1wOyZhbXA7CiAJICAgICEoc3RhdHVzLSZndDtmbGFnICZhbXA7IFJYX0ZMQUdfU0tJUF9NT05JVE9SKSkgewogCQloZSA9IHNrYl9wdXNoKG1zZHUsIHNpemVvZihrbm93bikpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9yeC5jCmluZGV4IDhmYTBlOTBiNDUzMTYuLjg0N2FkMjhmZDMwYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcnguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3J4LmMKQEAgLTEzNzUsNiAmIzQzOzEzNzUsNyBAQCB2b2lkIGF0aDEya19kcF9yeF9kZWxpdmVyX21zZHUoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LCBzdHJ1Y3QgbmFwaV9zdHJ1YwogCXN0cnVjdCBhdGgxMmtfZHAgKmRwID0gZHBfcGRldi0mZ3Q7ZHA7CiAJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1czsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhOwomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3B1YnN0YSA9IE5VTEw7CiAJc3RydWN0IGF0aDEya19kcF9wZWVyICpwZWVyOwogCXN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IgPSBBVEgxMktfU0tCX1JYQ0IobXNkdSk7CiAJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IHJ4X2luZm8tJmd0O3J4X3N0YXR1czsKQEAgLTEzODQsOSAmIzQzOzEzODUsMTkgQEAgdm9pZCBhdGgxMmtfZHBfcnhfZGVsaXZlcl9tc2R1KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwgc3RydWN0IG5hcGlfc3RydWMKIAogCXB1YnN0YSA9IHBlZXIgPyBwZWVyLSZndDtzdGEgOiBOVUxMOwogCi0Jc3RhdHVzLSZndDtsaW5rX3ZhbGlkID0gMDsKLQlpZiAocHVic3RhICZhbXA7JmFtcDsgcHVic3RhLSZndDt2YWxpZF9saW5rcykKLQkJYXRoMTJrX2h3X3NldF9yeF9saW5rX2lkKGRwLSZndDtod19wYXJhbXMsIHBlZXIsIHJ4Y2IsIHN0YXR1cyk7CiYjNDM7CWlmIChwdWJzdGEpIHsKJiM0MzsJCWlmIChwdWJzdGEtJmd0O3ZhbGlkX2xpbmtzKSB7CiYjNDM7CQkJdTggbGlua19pZCA9CiYjNDM7CQkJCWF0aDEya19od19nZXRfcnhfbGlua19pZChkcC0mZ3Q7aHdfcGFyYW1zLCBwZWVyLAomIzQzOwkJCQkJCQkgcnhjYiwgc3RhdHVzKTsKJiM0MzsKJiM0MzsJCQlpZiAobGlua19pZCAmZ3Q7IDApCiYjNDM7CQkJCWxpbmtfcHVic3RhID0KJiM0MzsJCQkJCXJjdV9kZXJlZmVyZW5jZShwdWJzdGEtJmd0O2xpbmtbbGlua19pZF0pOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlsaW5rX3B1YnN0YSA9ICZhbXA7cHVic3RhLSZndDtkZWZsaW5rOwomIzQzOwkJfQomIzQzOwl9CiAKIAlhdGgxMmtfZGJnKGRwLSZndDthYiwgQVRIMTJLX0RCR19EQVRBLAogCQkgICAmIzM0O3J4IHNrYiAlcCBsZW4gJXUgcGVlciAlcE0gJWQgJXMgc24gJXUgJXMlcyVzJXMlcyVzJXMlcyVzJXMgcmF0ZV9pZHggJXUgdmh0X25zcyAldSBmcmVxICV1IGJhbmQgJXUgZmxhZyAweCV4IGZjcy1lcnIgJWkgbWljLWVyciAlaSBhbXNkdS1tb3JlICVpXG4mIzM0OywKQEAgLTE0MjIsNyAmIzQzOzE0MzMsOCBAQCB2b2lkIGF0aDEya19kcF9yeF9kZWxpdmVyX21zZHUoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LCBzdHJ1Y3QgbmFwaV9zdHJ1YwogCiAJLyogVE9ETzogdHJhY2UgcnggcGFja2V0ICovCiAKLQlpZWVlODAyMTFfcnhfbmFwaShhdGgxMmtfcGRldl9kcF90b19odyhkcF9wZGV2KSwgcHVic3RhLCBtc2R1LCBuYXBpKTsKJiM0MzsJaWVlZTgwMjExX3J4X25hcGkoYXRoMTJrX3BkZXZfZHBfdG9faHcoZHBfcGRldiksIGxpbmtfcHVic3RhLCBtc2R1LAomIzQzOwkJCSAgbmFwaSk7CiB9CiBFWFBPUlRfU1lNQk9MKGF0aDEya19kcF9yeF9kZWxpdmVyX21zZHUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2h3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2h3LmgKaW5kZXggNDljZmQ1ZGZjNzBhNi4uMjY4ZjBhOGZkNDZkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9ody5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaHcuaApAQCAtMjQ4LDkgJiM0MzsyNDgsOSBAQCBzdHJ1Y3QgYXRoMTJrX2h3X29wcyB7CiAJYm9vbCAoKmRwX3NybmdfaXNfdHhfY29tcF9yaW5nKShpbnQgcmluZ19udW0pOwogCWJvb2wgKCppc19mcmFtZV9saW5rX2Fnbm9zdGljKShzdHJ1Y3QgYXRoMTJrX2xpbmtfdmlmICphcnZpZiwKIAkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210KTsKLQl2b2lkICgqc2V0X3J4X2xpbmtfaWQpKHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlciwKLQkJCSAgICAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLAotCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpOwomIzQzOwlpbnQgKCpnZXRfcnhfbGlua19pZCkoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLAomIzQzOwkJCSAgICAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsCiYjNDM7CQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyk7CiB9OwogCiBzdGF0aWMgaW5saW5lCkBAIC0yODEsMTMgJiM0MzsyODEsMTUgQEAgc3RhdGljIGlubGluZSBpbnQgYXRoMTJrX2h3X21hY19pZF90b19zcm5nX2lkKGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfcGFyYW1zICpodywKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGF0aDEya19od19zZXRfcnhfbGlua19pZChjb25zdCBzdHJ1Y3QgYXRoMTJrX2h3X3BhcmFtcyAqaHcsCi0JCQkJCSAgICBzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsCi0JCQkJCSAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLAotCQkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cykKJiM0MztzdGF0aWMgaW5saW5lIGludCBhdGgxMmtfaHdfZ2V0X3J4X2xpbmtfaWQoY29uc3Qgc3RydWN0IGF0aDEya19od19wYXJhbXMgKmh3LAomIzQzOwkJCQkJICAgc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLAomIzQzOwkJCQkJICAgc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYiwKJiM0MzsJCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpCiB7Ci0JaWYgKGh3LSZndDtod19vcHMtJmd0O3NldF9yeF9saW5rX2lkKQotCQlody0mZ3Q7aHdfb3BzLSZndDtzZXRfcnhfbGlua19pZChkcF9wZWVyLCByeGNiLCBzdGF0dXMpOwomIzQzOwlpZiAoaHctJmd0O2h3X29wcy0mZ3Q7Z2V0X3J4X2xpbmtfaWQpCiYjNDM7CQlyZXR1cm4gaHctJmd0O2h3X29wcy0mZ3Q7Z2V0X3J4X2xpbmtfaWQoZHBfcGVlciwgcnhjYiwgc3RhdHVzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIC0xOwogfQogCiBzdHJ1Y3QgYXRoMTJrX2Z3X2llIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguYwppbmRleCA5NWQ4N2RkNjc4NzJmLi44YjcyMmVlMGFkOGZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5jCkBAIC0yMzE3LDE3ICYjNDM7MjMxNywxNiBAQCBhdGgxMmtfd2lmaTdfZHBfcnhkZXNjX21wZHVfdmFsaWQoc3RydWN0IGF0aDEya19iYXNlICphYiwKIAlyZXR1cm4gdGx2X3RhZyA9PSBIQUxfUlhfTVBEVV9TVEFSVDsKIH0KIAotdm9pZAotYXRoMTJrX3dpZmk3X2RwX3J4X3NldF9saW5rX2lkX3FjbjkyNzQoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLAomIzQzO2ludAomIzQzO2F0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF9xY245Mjc0KHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlciwKIAkJCQkgICAgICAgc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYiwKIAkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cykKIHsKLQlzdGF0dXMtJmd0O2xpbmtfdmFsaWQgPSAxOwotCXN0YXR1cy0mZ3Q7bGlua19pZCA9IGRwX3BlZXItJmd0O2h3X2xpbmtzW3J4Y2ItJmd0O2h3X2xpbmtfaWRdOwomIzQzOwlyZXR1cm4gZHBfcGVlci0mZ3Q7aHdfbGlua3NbcnhjYi0mZ3Q7aHdfbGlua19pZF07CiB9CiAKLXZvaWQKLWF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF93Y243ODUwKHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlciwKJiM0MztpbnQKJiM0MzthdGgxMmtfd2lmaTdfZHBfcnhfZ2V0X2xpbmtfaWRfd2NuNzg1MChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsCiAJCQkJICAgICAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsCiAJCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpCiB7CkBAIC0yMzQxLDEwICYjNDM7MjM0MCw5IEBAIGF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF93Y243ODUwKHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlciwKIAlsaW5rc19tYXAgPSBSRUFEX09OQ0UoZHBfcGVlci0mZ3Q7bGlua19wZWVyc19tYXApOwogCWZvcl9lYWNoX3NldF9iaXQoaSwgJmFtcDtsaW5rc19tYXAsIEFUSDEyS19OVU1fTUFYX0xJTktTKSB7CiAJCWxpbmtfcGVlciA9IHJjdV9kZXJlZmVyZW5jZShkcF9wZWVyLSZndDtsaW5rX3BlZXJzW2ldKTsKLQkJaWYgKGxpbmtfcGVlciAmYW1wOyZhbXA7IGxpbmtfcGVlci0mZ3Q7cGVlcl9pZCA9PSByeGNiLSZndDtwZWVyX2lkKSB7Ci0JCQlzdGF0dXMtJmd0O2xpbmtfdmFsaWQgPSAxOwotCQkJc3RhdHVzLSZndDtsaW5rX2lkID0gbGlua19wZWVyLSZndDtsaW5rX2lkOwotCQkJcmV0dXJuOwotCQl9CiYjNDM7CQlpZiAobGlua19wZWVyICZhbXA7JmFtcDsgbGlua19wZWVyLSZndDtwZWVyX2lkID09IHJ4Y2ItJmd0O3BlZXJfaWQpCiYjNDM7CQkJcmV0dXJuIGxpbmtfcGVlci0mZ3Q7bGlua19pZDsKIAl9CiYjNDM7CiYjNDM7CXJldHVybiAtMTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguaAppbmRleCAxZDNhNDc4OGEyZGQ5Li5kNjg0ODlmZjdiMDM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5oCkBAIC01NywxMCAmIzQzOzU3LDEwIEBAIGF0aDEya193aWZpN19kcF9yeGRlc2NfbXBkdV92YWxpZChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLAogCQkJCSAgc3RydWN0IGhhbF9yeF9kZXNjICpyeF9kZXNjKTsKIGludCBhdGgxMmtfd2lmaTdfZHBfcnhfdGlkX2RlbGV0ZV9oYW5kbGVyKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsCiAJCQkJCSAgc3RydWN0IGF0aDEya19kcF9yeF90aWRfcnhxICpyeF90aWQpOwotdm9pZCBhdGgxMmtfd2lmaTdfZHBfcnhfc2V0X2xpbmtfaWRfcWNuOTI3NChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsCi0JCQkJCSAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLAotCQkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyk7Ci12b2lkIGF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF93Y243ODUwKHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlciwKLQkJCQkJICAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsCi0JCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKTsKJiM0MztpbnQgYXRoMTJrX3dpZmk3X2RwX3J4X2dldF9saW5rX2lkX3FjbjkyNzQoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLAomIzQzOwkJCQkJICAgc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYiwKJiM0MzsJCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpOwomIzQzO2ludCBhdGgxMmtfd2lmaTdfZHBfcnhfZ2V0X2xpbmtfaWRfd2NuNzg1MChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsCiYjNDM7CQkJCQkgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLAomIzQzOwkJCQkJICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaHcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaHcuYwppbmRleCA0YzExMTllZGNhZWRjLi4zY2QzNTE0NjQyOTZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2h3LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9ody5jCkBAIC0xNTgsNyAmIzQzOzE1OCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoMTJrX2h3X29wcyBxY245Mjc0X29wcyA9IHsKIAkuZ2V0X3Jpbmdfc2VsZWN0b3IgPSBhdGgxMmtfd2lmaTdfaHdfZ2V0X3Jpbmdfc2VsZWN0b3JfcWNuOTI3NCwKIAkuZHBfc3JuZ19pc190eF9jb21wX3JpbmcgPSBhdGgxMmtfd2lmaTdfZHBfc3JuZ19pc19jb21wX3JpbmdfcWNuOTI3NCwKIAkuaXNfZnJhbWVfbGlua19hZ25vc3RpYyA9IGF0aDEya193aWZpN19pc19mcmFtZV9saW5rX2Fnbm9zdGljX3FjbjkyNzQsCi0JLnNldF9yeF9saW5rX2lkID0gYXRoMTJrX3dpZmk3X2RwX3J4X3NldF9saW5rX2lkX3FjbjkyNzQsCiYjNDM7CS5nZXRfcnhfbGlua19pZCA9IGF0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF9xY245Mjc0LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfb3BzIHdjbjc4NTBfb3BzID0gewpAQCAtMTY5LDcgJiM0MzsxNjksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDEya19od19vcHMgd2NuNzg1MF9vcHMgPSB7CiAJLmdldF9yaW5nX3NlbGVjdG9yID0gYXRoMTJrX3dpZmk3X2h3X2dldF9yaW5nX3NlbGVjdG9yX3djbjc4NTAsCiAJLmRwX3NybmdfaXNfdHhfY29tcF9yaW5nID0gYXRoMTJrX3dpZmk3X2RwX3NybmdfaXNfY29tcF9yaW5nX3djbjc4NTAsCiAJLmlzX2ZyYW1lX2xpbmtfYWdub3N0aWMgPSBhdGgxMmtfd2lmaTdfaXNfZnJhbWVfbGlua19hZ25vc3RpY193Y243ODUwLAotCS5zZXRfcnhfbGlua19pZCA9IGF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF93Y243ODUwLAomIzQzOwkuZ2V0X3J4X2xpbmtfaWQgPSBhdGgxMmtfd2lmaTdfZHBfcnhfZ2V0X2xpbmtfaWRfd2NuNzg1MCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoMTJrX2h3X29wcyBxY2MyMDcyX29wcyA9IHsKQEAgLTE4MCw3ICYjNDM7MTgwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfb3BzIHFjYzIwNzJfb3BzID0gewogCS5nZXRfcmluZ19zZWxlY3RvciA9IGF0aDEya193aWZpN19od19nZXRfcmluZ19zZWxlY3Rvcl93Y243ODUwLAogCS5kcF9zcm5nX2lzX3R4X2NvbXBfcmluZyA9IGF0aDEya193aWZpN19kcF9zcm5nX2lzX2NvbXBfcmluZ193Y243ODUwLAogCS5pc19mcmFtZV9saW5rX2Fnbm9zdGljID0gYXRoMTJrX3dpZmk3X2lzX2ZyYW1lX2xpbmtfYWdub3N0aWNfd2NuNzg1MCwKLQkuc2V0X3J4X2xpbmtfaWQgPSBhdGgxMmtfd2lmaTdfZHBfcnhfc2V0X2xpbmtfaWRfd2NuNzg1MCwKJiM0MzsJLmdldF9yeF9saW5rX2lkID0gYXRoMTJrX3dpZmk3X2RwX3J4X2dldF9saW5rX2lkX3djbjc4NTAsCiB9OwogCiAjZGVmaW5lIEFUSDEyS19UWF9SSU5HX01BU0tfMCAweDEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jCmluZGV4IDJiNzA3ZmZjMWEyMGYuLjVkNjJjNGM4NjFiYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuYwpAQCAtNzI2MCw3ICYjNDM7NzI2MCw2IEBAIHN0YXRpYyB2b2lkIGF0aDEya19tZ210X3J4X2V2ZW50KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIHN0cnVjdCBza19idWZmICpza2IpCiAJc3RydWN0IGF0aDEya193bWlfbWdtdF9yeF9hcmcgcnhfZXYgPSB7fTsKIAlzdHJ1Y3QgYXRoMTJrICphcjsKIAlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSA9IE5VTEw7CiAJc3RydWN0IGF0aDEya19kcF9saW5rX3BlZXIgKnBlZXI7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAlib29sIGlzXzRhZGRyX251bGxfcGt0OwpAQCAtNzM2MiwxMSAmIzQzOzczNjEsNiBAQCBzdGF0aWMgdm9pZCBhdGgxMmtfbWdtdF9yeF9ldmVudChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQkJZGV2X2tmcmVlX3NrYihza2IpOwogCQkJZ290byBleGl0OwogCQl9Ci0JCXB1YnN0YSA9IHBlZXItJmd0O3N0YTsKLQkJaWYgKHB1YnN0YSAmYW1wOyZhbXA7IHB1YnN0YS0mZ3Q7dmFsaWRfbGlua3MpIHsKLQkJCXN0YXR1cy0mZ3Q7bGlua192YWxpZCA9IDE7Ci0JCQlzdGF0dXMtJmd0O2xpbmtfaWQgPSBwZWVyLSZndDtsaW5rX2lkOwotCQl9CiAJCXNwaW5fdW5sb2NrX2JoKCZhbXA7ZHAtJmd0O2RwX2xvY2spOwogCQlnb3RvIHNlbmRfcng7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYWdnLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hZ2cuYwppbmRleCA5NjEwMmQyYWYyY2Y5Li5jNDVjNDczMzc1MDllIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hZ2cuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hZ2cuYwpAQCAtNyw3ICYjNDM7Nyw4IEBACiAjaW5jbHVkZSAmIzM0O2hjbWQuaCYjMzQ7CiAKIHN0YXRpYyB2b2lkCi1pd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKJiM0Mztpd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMoc3RydWN0IGl3bF9tbGQgKm1sZCwKJiM0MzsJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEsCiAJCQkgICAgICAgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLAogCQkJICAgICAgIHN0cnVjdCBpd2xfbWxkX2JhaWRfZGF0YSAqYmFpZF9kYXRhLAogCQkJICAgICAgIHN0cnVjdCBpd2xfbWxkX3Jlb3JkZXJfYnVmZmVyICpyZW9yZGVyX2J1ZiwKQEAgLTMyLDcgJiM0MzszMyw3IEBAIGl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogCQl3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoc2tiX2xpc3QpKSkgewogCQkJaXdsX21sZF9wYXNzX3BhY2tldF90b19tYWM4MDIxMShtbGQsIG5hcGksIHNrYiwKIAkJCQkJCQlyZW9yZGVyX2J1Zi0mZ3Q7cXVldWUsCi0JCQkJCQkJc3RhKTsKJiM0MzsJCQkJCQkJbGlua19zdGEpOwogCQkJcmVvcmRlcl9idWYtJmd0O251bV9zdG9yZWQtLTsKIAkJfQogCX0KQEAgLTc0LDcgJiM0Mzs3NSw3IEBAIHN0YXRpYyB2b2lkIGl3bF9tbGRfcmVsZWFzZV9mcmFtZXNfZnJvbV9ub3RpZihzdHJ1Y3QgaXdsX21sZCAqbWxkLAogCiAJcmVvcmRlcl9idWYgPSAmYW1wO2JhX2RhdGEtJmd0O3Jlb3JkZXJfYnVmW3F1ZXVlXTsKIAotCWl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhtbGQsIGxpbmtfc3RhLSZndDtzdGEsIG5hcGksIGJhX2RhdGEsCiYjNDM7CWl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhtbGQsIGxpbmtfc3RhLCBuYXBpLCBiYV9kYXRhLAogCQkJCSAgICAgICByZW9yZGVyX2J1ZiwgbnNzbik7CiBvdXRfdW5sb2NrOgogCXJjdV9yZWFkX3VubG9jaygpOwpAQCAtMTgwLDcgJiM0MzsxODEsNyBAQCB2b2lkIGl3bF9tbGRfZGVsX2JhKHN0cnVjdCBpd2xfbWxkICptbGQsIGludCBxdWV1ZSwKIAlyZW9yZGVyX2J1ZiA9ICZhbXA7YmFfZGF0YS0mZ3Q7cmVvcmRlcl9idWZbcXVldWVdOwogCiAJLyogcmVsZWFzZSBhbGwgZnJhbWVzIHRoYXQgYXJlIGluIHRoZSByZW9yZGVyIGJ1ZmZlciB0byB0aGUgc3RhY2sgKi8KLQlpd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMobWxkLCBsaW5rX3N0YS0mZ3Q7c3RhLCBOVUxMLAomIzQzOwlpd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMobWxkLCBsaW5rX3N0YSwgTlVMTCwKIAkJCQkgICAgICAgYmFfZGF0YSwgcmVvcmRlcl9idWYsCiAJCQkJICAgICAgIGllZWU4MDIxMV9zbl9hZGQocmVvcmRlcl9idWYtJmd0O2hlYWRfc24sCiAJCQkJCQkJYmFfZGF0YS0mZ3Q7YnVmX3NpemUpKTsKQEAgLTE5Myw3ICYjNDM7MTk0LDcgQEAgdm9pZCBpd2xfbWxkX2RlbF9iYShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBpbnQgcXVldWUsCiAgKi8KIGVudW0gaXdsX21sZF9yZW9yZGVyX3Jlc3VsdAogaXdsX21sZF9yZW9yZGVyKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwKLQkJaW50IHF1ZXVlLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAomIzQzOwkJaW50IHF1ZXVlLCBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSwKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGl3bF9yeF9tcGR1X2Rlc2MgKmRlc2MpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9ICh2b2lkICopc2tiX21hY19oZWFkZXIoc2tiKTsKQEAgLTIyOCwxMiAmIzQzOzIyOSwxMiBAQCBpd2xfbWxkX3Jlb3JkZXIoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLAogCQlyZXR1cm4gSVdMX01MRF9QQVNTX1NLQjsKIAogCS8qIG5vIHN0YSB5ZXQgKi8KLQlpZiAoSVdMX0ZXX0NIRUNLKG1sZCwgIXN0YSwKJiM0MzsJaWYgKElXTF9GV19DSEVDSyhtbGQsICFsaW5rX3N0YSwKIAkJCSAmIzM0O0dvdCB2YWxpZCBCQUlEIHdpdGhvdXQgYSB2YWxpZCBzdGF0aW9uIGFzc2lnbmVkIC0gJWRcbiYjMzQ7LAogCQkJIGJhaWQpKQogCQlyZXR1cm4gSVdMX01MRF9QQVNTX1NLQjsKIAotCW1sZF9zdGEgPSBpd2xfbWxkX3N0YV9mcm9tX21hYzgwMjExKHN0YSk7CiYjNDM7CW1sZF9zdGEgPSBpd2xfbWxkX3N0YV9mcm9tX21hYzgwMjExKGxpbmtfc3RhLSZndDtzdGEpOwogCiAJLyogbm90IGEgZGF0YSBwYWNrZXQgKi8KIAlpZiAoIWllZWU4MDIxMV9pc19kYXRhX3FvcyhoZHItJmd0O2ZyYW1lX2NvbnRyb2wpIHx8CkBAIC0zMjQsNyAmIzQzOzMyNSw3IEBAIGl3bF9tbGRfcmVvcmRlcihzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCiAJICogd2lsbCBiZSByZWxlYXNlZCB3aGVuIHRoZSBmcmFtZSByZWxlYXNlIG5vdGlmaWNhdGlvbiBhcnJpdmVzLgogCSAqLwogCWlmICghYW1zZHUgfHwgbGFzdF9zdWJmcmFtZSkKLQkJaXdsX21sZF9yZW9yZGVyX3JlbGVhc2VfZnJhbWVzKG1sZCwgc3RhLCBuYXBpLCBiYWlkX2RhdGEsCiYjNDM7CQlpd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMobWxkLCBsaW5rX3N0YSwgbmFwaSwgYmFpZF9kYXRhLAogCQkJCQkgICAgICAgYnVmZmVyLCBuc3NuKTsKIAllbHNlIGlmIChidWZmZXItJmd0O251bV9zdG9yZWQgPT0gMSkKIAkJYnVmZmVyLSZndDtoZWFkX3NuID0gbnNzbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FnZy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYWdnLmgKaW5kZXggNjUxYzgwZDFjN2NkYS4uYzZjZDVmYTIxOWJlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYWdnLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYWdnLmgKQEAgLTEsNiAmIzQzOzEsNiBAQAogLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgQlNELTMtQ2xhdXNlICovCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDI0IEludGVsIENvcnBvcmF0aW9uCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI0LCAyMDI2IEludGVsIENvcnBvcmF0aW9uCiAgKi8KICNpZm5kZWYgX19pd2xfYWdnX2hfXwogI2RlZmluZSBfX2l3bF9hZ2dfaF9fCkBAIC0xMDYsNyAmIzQzOzEwNiw3IEBAIGludCBpd2xfbWxkX2FtcGR1X3J4X3N0b3Aoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKIAogZW51bSBpd2xfbWxkX3Jlb3JkZXJfcmVzdWx0CiBpd2xfbWxkX3Jlb3JkZXIoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLAotCQlpbnQgcXVldWUsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiYjNDM7CQlpbnQgcXVldWUsIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhLAogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXdsX3J4X21wZHVfZGVzYyAqZGVzYyk7CiAKIHZvaWQgaXdsX21sZF9oYW5kbGVfZnJhbWVfcmVsZWFzZV9ub3RpZihzdHJ1Y3QgaXdsX21sZCAqbWxkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmMKaW5kZXggMjY5NDM5ZDc4OWY0Ni4uMDJiZGY2Y2NiY2RjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5jCkBAIC00Nyw3ICYjNDM7NDcsOCBAQCBpd2xfbWxkX2ZpbGxfcGh5X2RhdGFfZnJvbV9tcGR1KHN0cnVjdCBpd2xfbWxkICptbGQsCiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGl3bF9tbGRfY2hlY2tfcG4oc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgICBpbnQgcXVldWUsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCiYjNDM7CQkJCSAgIGludCBxdWV1ZSwKJiM0MzsJCQkJICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9ICh2b2lkICopc2tiX21hY19oZWFkZXIoc2tiKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTsKQEAgLTcxLDEzICYjNDM7NzIsMTMgQEAgc3RhdGljIGlubGluZSBpbnQgaXdsX21sZF9jaGVja19wbihzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQlyZXR1cm4gMDsKIAogCS8qIGlmIHdlIGFyZSBoZXJlIC0gdGhpcyBmb3Igc3VyZSBpcyBlaXRoZXIgQ0NNUCBvciBHQ01QICovCi0JaWYgKCFzdGEpIHsKJiM0MzsJaWYgKCFsaW5rX3N0YSkgewogCQlJV0xfREVCVUdfRFJPUChtbGQsCiAJCQkgICAgICAgJiMzNDtleHBlY3RlZCBody1kZWNyeXB0ZWQgdW5pY2FzdCBmcmFtZSBmb3Igc3RhdGlvblxuJiMzNDspOwogCQlyZXR1cm4gLTE7CiAJfQogCi0JbWxkX3N0YSA9IGl3bF9tbGRfc3RhX2Zyb21fbWFjODAyMTEoc3RhKTsKJiM0MzsJbWxkX3N0YSA9IGl3bF9tbGRfc3RhX2Zyb21fbWFjODAyMTEobGlua19zdGEtJmd0O3N0YSk7CiAKIAlleHRpdiA9ICh1OCAqKWhkciAmIzQzOyBpZWVlODAyMTFfaGRybGVuKGhkci0mZ3Q7ZnJhbWVfY29udHJvbCk7CiAJa2V5aWR4ID0gZXh0aXZbM10gJmd0OyZndDsgNjsKQEAgLTExOSwxNyAmIzQzOzEyMCwxNyBAQCBzdGF0aWMgaW5saW5lIGludCBpd2xfbWxkX2NoZWNrX3BuKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBza19idWZmICpza2IsCiB2b2lkIGl3bF9tbGRfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEoc3RydWN0IGl3bF9tbGQgKm1sZCwKIAkJCQkgICAgIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwKIAkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBxdWV1ZSwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCiYjNDM7CQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEpCiB7CiAJS1VOSVRfU1RBVElDX1NUVUJfUkVESVJFQ1QoaXdsX21sZF9wYXNzX3BhY2tldF90b19tYWM4MDIxMSwKLQkJCQkgICBtbGQsIG5hcGksIHNrYiwgcXVldWUsIHN0YSk7CiYjNDM7CQkJCSAgIG1sZCwgbmFwaSwgc2tiLCBxdWV1ZSwgbGlua19zdGEpOwogCi0JaWYgKHVubGlrZWx5KGl3bF9tbGRfY2hlY2tfcG4obWxkLCBza2IsIHF1ZXVlLCBzdGEpKSkgewomIzQzOwlpZiAodW5saWtlbHkoaXdsX21sZF9jaGVja19wbihtbGQsIHNrYiwgcXVldWUsIGxpbmtfc3RhKSkpIHsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybjsKIAl9CiAKLQlpZWVlODAyMTFfcnhfbmFwaShtbGQtJmd0O2h3LCBzdGEsIHNrYiwgbmFwaSk7CiYjNDM7CWllZWU4MDIxMV9yeF9uYXBpKG1sZC0mZ3Q7aHcsIGxpbmtfc3RhLCBza2IsIG5hcGkpOwogfQogRVhQT1JUX1NZTUJPTF9JRl9JV0xXSUZJX0tVTklUKGl3bF9tbGRfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEpOwogCkBAIC0xNzI4LDcgJiM0MzsxNzI5LDcgQEAgc3RhdGljIHZvaWQgaXdsX21sZF91cGRhdGVfbGFzdF9yeF90aW1lc3RhbXAoc3RydWN0IGl3bF9tbGQgKm1sZCwgdTggYmFpZCkKICAqIFNldHMgKmRyb3AgdG8gdHJ1ZSBpZiB0aGUgcGFja2V0IHNob3VsZCBiZSBkcm9wcGVkLgogICogUmV0dXJucyB0aGUgc3RhdGlvbiBpZiBmb3VuZCwgb3IgTlVMTCBvdGhlcndpc2UuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqCiYjNDM7c3RhdGljIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKgogaXdsX21sZF9yeF93aXRoX3N0YShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAogCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJICAgIGNvbnN0IHN0cnVjdCBpd2xfcnhfbXBkdV9kZXNjICptcGR1X2Rlc2MsCkBAIC0xNzY0LDExICYjNDM7MTc2NSw2IEBAIGl3bF9tbGRfcnhfd2l0aF9zdGEoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwKIAogCXJ4X3N0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpOwogCi0JaWYgKGxpbmtfc3RhICZhbXA7JmFtcDsgc3RhLSZndDt2YWxpZF9saW5rcykgewotCQlyeF9zdGF0dXMtJmd0O2xpbmtfdmFsaWQgPSB0cnVlOwotCQlyeF9zdGF0dXMtJmd0O2xpbmtfaWQgPSBsaW5rX3N0YS0mZ3Q7bGlua19pZDsKLQl9Ci0KIAkvKiBmaWxsIGNoZWNrc3VtICovCiAJaWYgKGllZWU4MDIxMV9pc19kYXRhKGhkci0mZ3Q7ZnJhbWVfY29udHJvbCkgJmFtcDsmYW1wOwogCSAgICBwa3QtJmd0O2xlbl9uX2ZsYWdzICZhbXA7IGNwdV90b19sZTMyKEZIX1JTQ1NSX1JQQV9FTikpIHsKQEAgLTE4MDMsMTAgJiM0MzsxNzk5LDEwIEBAIGl3bF9tbGRfcnhfd2l0aF9zdGEoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwKIAkJCQkJCQkgICAgcXVldWUpOwogCX0KIAotCXJldHVybiBzdGE7CiYjNDM7CXJldHVybiBsaW5rX3N0YTsKIH0KIAotc3RhdGljIGludCBpd2xfbWxkX3J4X21nbXRfcHJvdChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAomIzQzO3N0YXRpYyBpbnQgaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEsCiAJCQkJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwKIAkJCQlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzLAogCQkJCXUzMiBtcGR1X3N0YXR1cywKQEAgLTE4MjAsNyAmIzQzOzE4MTYsNiBAQCBzdGF0aWMgaW50IGl3bF9tbGRfcnhfbWdtdF9wcm90KHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5OwogCWNvbnN0IHU4ICpmcmFtZSA9ICh2b2lkICopaGRyOwogCWNvbnN0IHU4ICptbWllOwotCXU4IGxpbmtfaWQ7CiAKIAlpZiAoKG1wZHVfc3RhdHVzICZhbXA7IElXTF9SWF9NUERVX1NUQVRVU19TRUNfTUFTSykgPT0KIAkgICAgIElXTF9SWF9NUERVX1NUQVRVU19TRUNfTk9ORSkKQEAgLTE4MzYsMTAgJiM0MzsxODMxLDEwIEBAIHN0YXRpYyBpbnQgaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKIAlpZiAoIWllZWU4MDIxMV9pc19iZWFjb24oaGRyLSZndDtmcmFtZV9jb250cm9sKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoIXN0YSkKJiM0MzsJaWYgKCFsaW5rX3N0YSkKIAkJcmV0dXJuIC0xOwogCi0JbWxkX3N0YSA9IGl3bF9tbGRfc3RhX2Zyb21fbWFjODAyMTEoc3RhKTsKJiM0MzsJbWxkX3N0YSA9IGl3bF9tbGRfc3RhX2Zyb21fbWFjODAyMTEobGlua19zdGEtJmd0O3N0YSk7CiAJbWxkX3ZpZiA9IGl3bF9tbGRfdmlmX2Zyb21fbWFjODAyMTEobWxkX3N0YS0mZ3Q7dmlmKTsKIAogCS8qIGtleSBtaXNtYXRjaCAtIHdpbGwgYWxzbyByZXBvcnQgIU1JQ19PSyBidXQgd2Ugc2hvdWxkbiYjMzk7dCBjb3VudCBpdCAqLwpAQCAtMTg1Myw4ICYjNDM7MTg0OCw3IEBAIHN0YXRpYyBpbnQgaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKIAkJcmV0dXJuIDA7CiAJfQogCi0JbGlua19pZCA9IHJ4X3N0YXR1cy0mZ3Q7bGlua192YWxpZCA/IHJ4X3N0YXR1cy0mZ3Q7bGlua19pZCA6IDA7Ci0JbGluayA9IHJjdV9kZXJlZmVyZW5jZShtbGRfdmlmLSZndDtsaW5rW2xpbmtfaWRdKTsKJiM0MzsJbGluayA9IHJjdV9kZXJlZmVyZW5jZShtbGRfdmlmLSZndDtsaW5rW2xpbmtfc3RhLSZndDtsaW5rX2lkXSk7CiAJaWYgKFdBUk5fT05fT05DRSghbGluaykpCiAJCXJldHVybiAtMTsKIApAQCAtMTkwNSw3ICYjNDM7MTg5OSw3IEBAIHN0YXRpYyBpbnQgaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKIH0KIAogc3RhdGljIGludCBpd2xfbWxkX3J4X2NyeXB0byhzdHJ1Y3QgaXdsX21sZCAqbWxkLAotCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAomIzQzOwkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEsCiAJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsCiAJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMsCiAJCQkgICAgIHN0cnVjdCBpd2xfcnhfbXBkdV9kZXNjICpkZXNjLCBpbnQgcXVldWUsCkBAIC0xOTE1LDcgJiM0MzsxOTA5LDcgQEAgc3RhdGljIGludCBpd2xfbWxkX3J4X2NyeXB0byhzdHJ1Y3QgaXdsX21sZCAqbWxkLAogCiAJaWYgKHVubGlrZWx5KGllZWU4MDIxMV9pc19tZ210KGhkci0mZ3Q7ZnJhbWVfY29udHJvbCkgJmFtcDsmYW1wOwogCQkgICAgICFpZWVlODAyMTFfaGFzX3Byb3RlY3RlZChoZHItJmd0O2ZyYW1lX2NvbnRyb2wpKSkKLQkJcmV0dXJuIGl3bF9tbGRfcnhfbWdtdF9wcm90KHN0YSwgaGRyLCByeF9zdGF0dXMsIHN0YXR1cywKJiM0MzsJCXJldHVybiBpd2xfbWxkX3J4X21nbXRfcHJvdChsaW5rX3N0YSwgaGRyLCByeF9zdGF0dXMsIHN0YXR1cywKIAkJCQkJICAgIGxlMTZfdG9fY3B1KGRlc2MtJmd0O21wZHVfbGVuKSk7CiAKIAlpZiAoIWllZWU4MDIxMV9oYXNfcHJvdGVjdGVkKGhkci0mZ3Q7ZnJhbWVfY29udHJvbCkgfHwKQEAgLTIwMjMsNyAmIzQzOzIwMTcsNyBAQCB2b2lkIGl3bF9tbGRfcnhfbXBkdShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCiAJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IHJ4Yl9hZGRyKHJ4Yik7CiAJc3RydWN0IGl3bF9tbGRfcnhfcGh5X2RhdGEgcGh5X2RhdGEgPSB7fTsKIAlzdHJ1Y3QgaXdsX3J4X21wZHVfZGVzYyAqbXBkdV9kZXNjID0gKHZvaWQgKilwa3QtJmd0O2RhdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsKJiM0MzsJc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGE7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXNpemVfdCBtcGR1X2Rlc2Nfc2l6ZSA9IHNpemVvZigqbXBkdV9kZXNjKTsKQEAgLTIwODYsNyAmIzQzOzIwODAsOCBAQCB2b2lkIGl3bF9tbGRfcnhfbXBkdShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKLQlzdGEgPSBpd2xfbWxkX3J4X3dpdGhfc3RhKG1sZCwgaGRyLCBza2IsIG1wZHVfZGVzYywgcGt0LCBxdWV1ZSwgJmFtcDtkcm9wKTsKJiM0MzsJbGlua19zdGEgPSBpd2xfbWxkX3J4X3dpdGhfc3RhKG1sZCwgaGRyLCBza2IsIG1wZHVfZGVzYywgcGt0LCBxdWV1ZSwKJiM0MzsJCQkJICAgICAgICZhbXA7ZHJvcCk7CiAJaWYgKGRyb3ApCiAJCWdvdG8gZHJvcDsKIApAQCAtMjEyNyw3ICYjNDM7MjEyMiw3IEBAIHZvaWQgaXdsX21sZF9yeF9tcGR1KHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwKIAogCWl3bF9tbGRfcnhfZmlsbF9zdGF0dXMobWxkLCBsaW5rX2lkLCBoZHIsIHNrYiwgJmFtcDtwaHlfZGF0YSk7CiAKLQlpZiAoaXdsX21sZF9yeF9jcnlwdG8obWxkLCBzdGEsIGhkciwgcnhfc3RhdHVzLCBtcGR1X2Rlc2MsIHF1ZXVlLAomIzQzOwlpZiAoaXdsX21sZF9yeF9jcnlwdG8obWxkLCBsaW5rX3N0YSwgaGRyLCByeF9zdGF0dXMsIG1wZHVfZGVzYywgcXVldWUsCiAJCQkgICAgICBsZTMyX3RvX2NwdShwa3QtJmd0O2xlbl9uX2ZsYWdzKSwgJmFtcDtjcnlwdG9fbGVuKSkKIAkJZ290byBkcm9wOwogCkBAIC0yMTQwLDcgJiM0MzsyMTM1LDggQEAgdm9pZCBpd2xfbWxkX3J4X21wZHUoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLAogCWlmIChpd2xfbWxkX3RpbWVfc3luY19mcmFtZShtbGQsIHNrYiwgaGRyLSZndDthZGRyMikpCiAJCWdvdG8gb3V0OwogCi0JcmVvcmRlcl9yZXMgPSBpd2xfbWxkX3Jlb3JkZXIobWxkLCBuYXBpLCBxdWV1ZSwgc3RhLCBza2IsIG1wZHVfZGVzYyk7CiYjNDM7CXJlb3JkZXJfcmVzID0gaXdsX21sZF9yZW9yZGVyKG1sZCwgbmFwaSwgcXVldWUsIGxpbmtfc3RhLCBza2IsCiYjNDM7CQkJCSAgICAgIG1wZHVfZGVzYyk7CiAJc3dpdGNoIChyZW9yZGVyX3JlcykgewogCWNhc2UgSVdMX01MRF9QQVNTX1NLQjoKIAkJYnJlYWs7CkBAIC0yMTUzLDcgJiM0MzsyMTQ5LDcgQEAgdm9pZCBpd2xfbWxkX3J4X21wZHUoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLAogCQlnb3RvIGRyb3A7CiAJfQogCi0JaXdsX21sZF9wYXNzX3BhY2tldF90b19tYWM4MDIxMShtbGQsIG5hcGksIHNrYiwgcXVldWUsIHN0YSk7CiYjNDM7CWl3bF9tbGRfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEobWxkLCBuYXBpLCBza2IsIHF1ZXVlLCBsaW5rX3N0YSk7CiAKIAlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmgKaW5kZXggNTczYjg5YzNjOWM2MS4uYjA4YzVhZGUzZGI4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5oCkBAIC02OSw3ICYjNDM7NjksNyBAQCB2b2lkIGl3bF9tbGRfaGFuZGxlX3JzY19ub3RpZihzdHJ1Y3QgaXdsX21sZCAqbWxkLAogdm9pZCBpd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKHN0cnVjdCBpd2xfbWxkICptbGQsCiAJCQkJICAgICBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCiAJCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcXVldWUsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKTsKJiM0MzsJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSk7CiAKIHZvaWQgaXdsX21sZF9oYW5kbGVfcGh5X2Fpcl9zbmlmZmVyX25vdGlmKHN0cnVjdCBpd2xfbWxkICptbGQsCiAJCQkJCSAgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvdGVzdHMvYWdnLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC90ZXN0cy9hZ2cuYwppbmRleCAyOWIwMjQ4Y2VjM2RmLi5lOWVmZTI5OTZmMDcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC90ZXN0cy9hZ2cuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC90ZXN0cy9hZ2cuYwpAQCAtMiw3ICYjNDM7Miw3IEBACiAvKgogICogS1VuaXQgdGVzdHMgZm9yIGNoYW5uZWwgaGVscGVyIGZ1bmN0aW9ucwogICoKLSAqIENvcHlyaWdodCAoQykgMjAyNC0yMDI1IEludGVsIENvcnBvcmF0aW9uCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI0LTIwMjYgSW50ZWwgQ29ycG9yYXRpb24KICAqLwogI2luY2x1ZGUgJmx0O2t1bml0L3Rlc3QuaCZndDsKICNpbmNsdWRlICZsdDtrdW5pdC9zdGF0aWNfc3R1Yi5oJmd0OwpAQCAtNDQxLDcgJiM0Mzs0NDEsNyBAQCBzdGF0aWMgdm9pZAogZmFrZV9pd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKHN0cnVjdCBpd2xfbWxkICptbGQsCiAJCQkJICAgICBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCiAJCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcXVldWUsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQomIzQzOwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhKQogewogCV9fc2tiX3F1ZXVlX3RhaWwoJmFtcDtnX3JlbGVhc2VkX3NrYnMsIHNrYik7CiAJZ19udW1fcmVsZWFzZWRfc2ticyYjNDM7JiM0Mzs7CkBAIC02MzAsNyAmIzQzOzYzMCw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfcmVvcmRlcl9idWZmZXIoc3RydWN0IGt1bml0ICp0ZXN0KQogCW1wZHVfZGVzYyA9IHNldHVwX21wZHVfZGVzYygpOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCXJlb3JkZXJfcmVzID0gaXdsX21sZF9yZW9yZGVyKG1sZCwgTlVMTCwgUVVFVUUsIHN0YSwgc2tiLCBtcGR1X2Rlc2MpOwomIzQzOwlyZW9yZGVyX3JlcyA9IGl3bF9tbGRfcmVvcmRlcihtbGQsIE5VTEwsIFFVRVVFLCAmYW1wO3N0YS0mZ3Q7ZGVmbGluaywgc2tiLAomIzQzOwkJCQkgICAgICBtcGR1X2Rlc2MpOwogCXJjdV9yZWFkX3VubG9jaygpOwogCiAJS1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJlb3JkZXJfcmVzLCBwYXJhbS0mZ3Q7ZXhwZWN0ZWQucmVvcmRlcl9yZXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4LmMKaW5kZXggYWIxZWIyZWIwYzNjZC4uOGMxOTdhMDkwYzJiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeC5jCkBAIC05MCw3ICYjNDM7OTAsNyBAQCBzdGF0aWMgdm9pZCBpd2xfbXZtX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKHN0cnVjdCBpd2xfbXZtICptdm0sCiAJCQkJZnJhZ2xlbiwgcnhiLSZndDt0cnVlc2l6ZSk7CiAJfQogCi0JaWVlZTgwMjExX3J4X25hcGkobXZtLSZndDtodywgc3RhLCBza2IsIG5hcGkpOwomIzQzOwlpZWVlODAyMTFfcnhfbmFwaShtdm0tJmd0O2h3LCBzdGEgPyAmYW1wO3N0YS0mZ3Q7ZGVmbGluayA6IE5VTEwsIHNrYiwgbmFwaSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeG1xLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeG1xLmMKaW5kZXggN2YwYjRmNWRhYTIxNC4uOGM0MDA5ZDNhMDBjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnhtcS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4bXEuYwpAQCAtMSw2ICYjNDM7MSw2IEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBCU0QtMy1DbGF1c2UKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCwgMjAxOC0yMDI1IEludGVsIENvcnBvcmF0aW9uCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTQsIDIwMTgtMjAyNiBJbnRlbCBDb3Jwb3JhdGlvbgogICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgSW50ZWwgTW9iaWxlIENvbW11bmljYXRpb25zIEdtYkgKICAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEludGVsIERldXRzY2hsYW5kIEdtYkgKICAqLwpAQCAtMjQzLDcgJiM0MzsyNDMsNyBAQCBzdGF0aWMgdm9pZCBpd2xfbXZtX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKHN0cnVjdCBpd2xfbXZtICptdm0sCiAJCXJldHVybjsKIAl9CiAKLQlpZWVlODAyMTFfcnhfbmFwaShtdm0tJmd0O2h3LCBzdGEsIHNrYiwgbmFwaSk7CiYjNDM7CWllZWU4MDIxMV9yeF9uYXBpKG12bS0mZ3Q7aHcsIHN0YSA/ICZhbXA7c3RhLSZndDtkZWZsaW5rIDogTlVMTCwgc2tiLCBuYXBpKTsKIH0KIAogc3RhdGljIGJvb2wgaXdsX212bV91c2VkX2F2ZXJhZ2VfZW5lcmd5KHN0cnVjdCBpd2xfbXZtICptdm0sCkBAIC0yNTI4LDcgJiM0MzsyNTI4LDcgQEAgdm9pZCBpd2xfbXZtX3J4X21vbml0b3Jfbm9fZGF0YShzdHJ1Y3QgaXdsX212bSAqbXZtLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCiAJfQogCiAJcmN1X3JlYWRfbG9jaygpOwotCWllZWU4MDIxMV9yeF9uYXBpKG12bS0mZ3Q7aHcsIHN0YSwgc2tiLCBuYXBpKTsKJiM0MzsJaWVlZTgwMjExX3J4X25hcGkobXZtLSZndDtodywgc3RhID8gJmFtcDtzdGEtJmd0O2RlZmxpbmsgOiBOVUxMLCBza2IsIG5hcGkpOwogCXJjdV9yZWFkX3VubG9jaygpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21hYzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21hYzgwMjExLmMKaW5kZXggMTNjNGU4YWJlMjgxOS4uZDVhNDdhYjI5ZjU4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tYWM4MDIxMS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbWFjODAyMTEuYwpAQCAtMTIzOSw3ICYjNDM7MTIzOSw3IEBAIEVYUE9SVF9TWU1CT0wobXQ3Nl9yeF9zaWduYWwpOwogc3RhdGljIHZvaWQKIG10NzZfcnhfY29udmVydChzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJc3RydWN0IGllZWU4MDIxMV9odyAqKmh3LAotCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqKnN0YSkKJiM0MzsJCXN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKipsaW5rX3N0YSkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IG10NzZfc2tiX2dldF9oZHIoc2tiKTsKQEAgLTEyODYsMTEgJiM0MzsxMjg2LDE1IEBAIG10NzZfcnhfY29udmVydChzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkgICAgICAgc2l6ZW9mKG1zdGF0LmNoYWluX3NpZ25hbCkpOwogCiAJaWYgKG1zdGF0LndjaWQpIHsKLQkJc3RhdHVzLSZndDtsaW5rX3ZhbGlkID0gbXN0YXQud2NpZC0mZ3Q7bGlua192YWxpZDsKLQkJc3RhdHVzLSZndDtsaW5rX2lkID0gbXN0YXQud2NpZC0mZ3Q7bGlua19pZDsKJiM0MzsJCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEgPSB3Y2lkX3RvX3N0YShtc3RhdC53Y2lkKTsKJiM0MzsKJiM0MzsJCWlmIChtc3RhdC53Y2lkLSZndDtsaW5rX3ZhbGlkKQomIzQzOwkJCSpsaW5rX3N0YSA9CiYjNDM7CQkJCXJjdV9kZXJlZmVyZW5jZShzdGEtJmd0O2xpbmtbbXN0YXQud2NpZC0mZ3Q7bGlua19pZF0pOwomIzQzOwkJZWxzZQomIzQzOwkJCSpsaW5rX3N0YSA9ICZhbXA7c3RhLSZndDtkZWZsaW5rOwogCX0KIAotCSpzdGEgPSB3Y2lkX3RvX3N0YShtc3RhdC53Y2lkKTsKIAkqaHcgPSBtdDc2X3BoeV9odyhkZXYsIG1zdGF0LnBoeV9pZHgpOwogfQogCkBAIC0xNTE0LDcgJiM0MzsxNTE4LDcgQEAgbXQ3Nl9jaGVja19zdGEoc3RydWN0IG10NzZfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB2b2lkIG10NzZfcnhfY29tcGxldGUoc3RydWN0IG10NzZfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmX2hlYWQgKmZyYW1lcywKIAkJICAgICAgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKQogewotCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGE7CiYjNDM7CXN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhOwogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OwogCXN0cnVjdCBza19idWZmICpza2IsICp0bXA7CiAJTElTVF9IRUFEKGxpc3QpOwpAQCAtMTUyNSw4ICYjNDM7MTUyOSw4IEBAIHZvaWQgbXQ3Nl9yeF9jb21wbGV0ZShzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqZnJhbWVzLAogCiAJCW10NzZfY2hlY2tfY2NtcF9wbihza2IpOwogCQlza2Jfc2hpbmZvKHNrYiktJmd0O2ZyYWdfbGlzdCA9IE5VTEw7Ci0JCW10NzZfcnhfY29udmVydChkZXYsIHNrYiwgJmFtcDtodywgJmFtcDtzdGEpOwotCQlpZWVlODAyMTFfcnhfbGlzdChodywgc3RhLCBza2IsICZhbXA7bGlzdCk7CiYjNDM7CQltdDc2X3J4X2NvbnZlcnQoZGV2LCBza2IsICZhbXA7aHcsICZhbXA7bGlua19zdGEpOwomIzQzOwkJaWVlZTgwMjExX3J4X2xpc3QoaHcsIGxpbmtfc3RhLCBza2IsICZhbXA7bGlzdCk7CiAKIAkJLyogc3Vic2VxdWVudCBhbXNkdSBmcmFtZXMgKi8KIAkJd2hpbGUgKG5za2IpIHsKQEAgLTE1MzQsOCAmIzQzOzE1MzgsOCBAQCB2b2lkIG10NzZfcnhfY29tcGxldGUoc3RydWN0IG10NzZfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmX2hlYWQgKmZyYW1lcywKIAkJCW5za2IgPSBuc2tiLSZndDtuZXh0OwogCQkJc2tiLSZndDtuZXh0ID0gTlVMTDsKIAotCQkJbXQ3Nl9yeF9jb252ZXJ0KGRldiwgc2tiLCAmYW1wO2h3LCAmYW1wO3N0YSk7Ci0JCQlpZWVlODAyMTFfcnhfbGlzdChodywgc3RhLCBza2IsICZhbXA7bGlzdCk7CiYjNDM7CQkJbXQ3Nl9yeF9jb252ZXJ0KGRldiwgc2tiLCAmYW1wO2h3LCAmYW1wO2xpbmtfc3RhKTsKJiM0MzsJCQlpZWVlODAyMTFfcnhfbGlzdChodywgbGlua19zdGEsIHNrYiwgJmFtcDtsaXN0KTsKIAkJfQogCX0KIAlzcGluX3VubG9jaygmYW1wO2Rldi0mZ3Q7cnhfbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2NvcmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY29yZS5jCmluZGV4IDBmMGU0NmNiNDI2MDUuLmRmOTZkMGE5Njc4NzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY29yZS5jCkBAIC0zMDM2LDcgJiM0MzszMDM2LDYgQEAgc3RhdGljIHZvaWQgcnR3ODlfdmlmX3J4X3N0YXRzX2l0ZXIodm9pZCAqZGF0YSwgdTggKm1hYywKIAlzdHJ1Y3QgcnR3ODlfdmlmICpydHd2aWYgPSB2aWZfdG9fcnR3dmlmKHZpZik7CiAJc3RydWN0IHJ0dzg5X3J4X2Rlc2NfaW5mbyAqZGVzY19pbmZvID0gaXRlcl9kYXRhLSZndDtkZXNjX2luZm87CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGl0ZXJfZGF0YS0mZ3Q7c2tiOwotCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLSZndDtkYXRhOwogCXN0cnVjdCBydHc4OV9yeF9waHlfcHBkdSAqcGh5X3BwZHUgPSBpdGVyX2RhdGEtJmd0O3BoeV9wcGR1OwogCWJvb2wgaXNfbWxkID0gaWVlZTgwMjExX3ZpZl9pc19tbGQodmlmKTsKQEAgLTMwNzMsMTEgJiM0MzszMDcyLDYgQEAgc3RhdGljIHZvaWQgcnR3ODlfdmlmX3J4X3N0YXRzX2l0ZXIodm9pZCAqZGF0YSwgdTggKm1hYywKIAlpZiAoIWV0aGVyX2FkZHJfZXF1YWwodGFyZ2V0X2Jzc2lkLCBic3NpZCkpCiAJCWdvdG8gb3V0OwogCi0JaWYgKGlzX21sZCkgewotCQlyeF9zdGF0dXMtJmd0O2xpbmtfdmFsaWQgPSB0cnVlOwotCQlyeF9zdGF0dXMtJmd0O2xpbmtfaWQgPSBydHd2aWZfbGluay0mZ3Q7bGlua19pZDsKLQl9Ci0KIAliYiA9IHJ0dzg5X2dldF9iYl9jdHgocnR3ZGV2LCBydHd2aWZfbGluay0mZ3Q7cGh5X2lkeCk7CiAJcGt0X3N0YXQgPSAmYW1wO2JiLSZndDtjdXJfcGt0X3N0YXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMKaW5kZXggMDJiNmQ4MWNjY2QxMS4uYTBkNTE5Y2Q5YzRmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMKQEAgLTE4ODAsOSAmIzQzOzE4ODAsNiBAQCBzdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9yeChzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YSwKIAkJCQlzcC0mZ3Q7YWN0aXZlX2xpbmtzX3J4ICZhbXA7PSB+QklUKGxpbmtfaWQpOwogCQkJZWxzZQogCQkJCXNwLSZndDthY3RpdmVfbGlua3NfcnggfD0gQklUKGxpbmtfaWQpOwotCi0JCQlyeF9zdGF0dXMtJmd0O2xpbmtfdmFsaWQgPSB0cnVlOwotCQkJcnhfc3RhdHVzLSZndDtsaW5rX2lkID0gbGlua19pZDsKIAkJfQogCQlyY3VfcmVhZF91bmxvY2soKTsKIAl9CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oIGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaAppbmRleCBkY2JiMGU1NWMzMmVjLi41OWJkMTUzMjMyMmQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmgKQEAgLTQwMDksNiAmIzQzOzQwMDksNyBAQCBzdHJ1Y3QgY2ZnODAyMTFfdXBkYXRlX2Z0X2llc19wYXJhbXMgewogICogQGxpbmtfaWQ6IGZvciBNTE8sIHRoZSBsaW5rIElEIHRvIHRyYW5zbWl0IG9uLCAtMSBpZiBub3QgZ2l2ZW47IG5vdGUKICAqCXRoYXQgdGhlIGxpbmsgSUQgaXNuJiMzOTt0IHZhbGlkYXRlZCAobXVjaCksIGl0JiMzOTtzIGluIHJhbmdlIGJ1dCB0aGUKICAqCWxpbmsgbWlnaHQgbm90IGV4aXN0IChvciBiZSB1c2VkIGJ5IHRoZSByZWNlaXZlciBTVEEpCiYjNDM7ICogQG5vX3N0YTogc2V0IGlmIHRoZSBmcmFtZSBzaG91bGQgbm90IGJlIHRyYW5zbWl0dGVkIHVzaW5nIGFuIGV4aXN0aW5nIFNUQQogICovCiBzdHJ1Y3QgY2ZnODAyMTFfbWdtdF90eF9wYXJhbXMgewogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbjsKQEAgLTQwMjEsNiAmIzQzOzQwMjIsNyBAQCBzdHJ1Y3QgY2ZnODAyMTFfbWdtdF90eF9wYXJhbXMgewogCWludCBuX2NzYV9vZmZzZXRzOwogCWNvbnN0IHUxNiAqY3NhX29mZnNldHM7CiAJaW50IGxpbmtfaWQ7CiYjNDM7CWJvb2wgbm9fc3RhOwogfTsKIAogLyoqCkBAIC05NDk5LDYgJiM0Mzs5NTAxLDcgQEAgdm9pZCBjZmc4MDIxMV9jb25uX2ZhaWxlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqbWFjX2FkZHIsCiAgKiBAZmxhZ3M6IGZsYWdzLCBhcyBkZWZpbmVkIGluICZhbXA7ZW51bSBubDgwMjExX3J4bWdtdF9mbGFncwogICogQHJ4X3RzdGFtcDogSGFyZHdhcmUgdGltZXN0YW1wIG9mIGZyYW1lIFJYIGluIG5hbm9zZWNvbmRzCiAgKiBAYWNrX3RzdGFtcDogSGFyZHdhcmUgdGltZXN0YW1wIG9mIGFjayBUWCBpbiBuYW5vc2Vjb25kcwomIzQzOyAqIEBub19zdGE6IHNldCBpZiBubyBzdGF0aW9uIGlzIGtub3duIGZvciB0aGUgZnJhbWUgKHJlbGV2YW50IGZvciBNTEQpCiAgKi8KIHN0cnVjdCBjZmc4MDIxMV9yeF9pbmZvIHsKIAlpbnQgZnJlcTsKQEAgLTk1MTAsNiAmIzQzOzk1MTMsNyBAQCBzdHJ1Y3QgY2ZnODAyMTFfcnhfaW5mbyB7CiAJdTMyIGZsYWdzOwogCXU2NCByeF90c3RhbXA7CiAJdTY0IGFja190c3RhbXA7CiYjNDM7CWJvb2wgbm9fc3RhOwogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaAppbmRleCA5ZDFmYWM2ZTgwODI5Li43YWFlNzI4ZTk2ZDg0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKQEAgLTE3NzAsMTAgJiM0MzsxNzcwLDkgQEAgZW51bSBtYWM4MDIxMV9yeF9lbmNvZGluZyB7CiAgKiBAYW1wZHVfcmVmZXJlbmNlOiBBLU1QRFUgcmVmZXJlbmNlIG51bWJlciwgbXVzdCBiZSBhIGRpZmZlcmVudCB2YWx1ZSBmb3IKICAqCWVhY2ggQS1NUERVIGJ1dCB0aGUgc2FtZSBmb3IgZWFjaCBzdWJmcmFtZSB3aXRoaW4gb25lIEEtTVBEVQogICogQHplcm9fbGVuZ3RoX3BzZHVfdHlwZTogcmFkaW90YXAgdHlwZSBvZiB0aGUgMC1sZW5ndGggUFNEVQotICogQGxpbmtfdmFsaWQ6IGlmIHRoZSBsaW5rIHdoaWNoIGlzIGlkZW50aWZpZWQgYnkgQGxpbmtfaWQgaXMgdmFsaWQuIFRoaXMgZmxhZwotICoJaXMgc2V0IG9ubHkgd2hlbiBjb25uZWN0aW9uIGlzIE1MTy4KLSAqIEBsaW5rX2lkOiBpZCBvZiB0aGUgbGluayB1c2VkIHRvIHJlY2VpdmUgdGhlIHBhY2tldC4gVGhpcyBpcyB1c2VkIGFsb25nIHdpdGgKLSAqCUBsaW5rX3ZhbGlkLgomIzQzOyAqIEBsaW5rX2lkOiBpZCBvZiB0aGUgbGluayB1c2VkIHRvIHJlY2VpdmUgdGhlIHBhY2tldC4gU2V0IGFuZCB1c2VkIGJ5CiYjNDM7ICoJbWFjODAyMTEgaW50ZXJuYWxseSwgaXQgdXNlcyBAZnJlcSBzZXQgYnkgdGhlIGRyaXZlciB0byBpZGVudGlmeSB0aGUKJiM0MzsgKgljb3JyZWN0IGxpbmsgcGVyIHZpZi4KICAqLwogc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgewogCXU2NCBtYWN0aW1lOwpAQCAtMTgxMyw3ICYjNDM7MTgxMiw3IEBAIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzIHsKIAl1OCBjaGFpbnM7CiAJczggY2hhaW5fc2lnbmFsW0lFRUU4MDIxMV9NQVhfQ0hBSU5TXTsKIAl1OCB6ZXJvX2xlbmd0aF9wc2R1X3R5cGU7Ci0JdTggbGlua192YWxpZDoxLCBsaW5rX2lkOjQ7CiYjNDM7CXU4IGxpbmtfaWQ6NDsKIH07CiAKIHN0YXRpY19hc3NlcnQoc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzKSAmbHQ7PSBzaXplb2ZfZmllbGQoc3RydWN0IHNrX2J1ZmYsIGNiKSk7CkBAIC01Mzg5LDE0ICYjNDM7NTM4OCwxOCBAQCB2b2lkIGllZWU4MDIxMV9yZXN0YXJ0X2h3KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKICAqIG1peGVkIGZvciBhIHNpbmdsZSBoYXJkd2FyZS4gTXVzdCBub3QgcnVuIGNvbmN1cnJlbnRseSB3aXRoCiAgKiBpZWVlODAyMTFfdHhfc3RhdHVzX3NrYigpIG9yIGllZWU4MDIxMV90eF9zdGF0dXNfbmkoKS4KICAqCiYjNDM7ICogRm9yIGRhdGEgZnJhbWVzLCB3aGVuIGhhcmR3YXJlIGhhcyBkb25lIGFkZHJlc3MgdHJhbnNsYXRpb24sIGEgbGluayBzdGF0aW9uCiYjNDM7ICogaGFzIHRvIGJlIHByb3ZpZGVkIGFuZCB0aGUgZnJlcXVlbmN5IGluZm9ybWF0aW9uIG1heSBiZSBza2lwcGVkLgomIzQzOyAqCiAgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggQkhzIGRpc2FibGVkIGFuZCBSQ1UgcmVhZCBsb2NrCiAgKgogICogQGh3OiB0aGUgaGFyZHdhcmUgdGhpcyBmcmFtZSBjYW1lIGluIG9uCi0gKiBAc3RhOiB0aGUgc3RhdGlvbiB0aGUgZnJhbWUgd2FzIHJlY2VpdmVkIGZyb20sIG9yICVOVUxMCiYjNDM7ICogQGxpbmtfc3RhOiB0aGUgbGluayBzdGF0aW9uIHRoZSBkYXRhIGZyYW1lIHdhcyByZWNlaXZlZCBmcm9tLCBvciAlTlVMTAogICogQHNrYjogdGhlIGJ1ZmZlciB0byByZWNlaXZlLCBvd25lZCBieSBtYWM4MDIxMSBhZnRlciB0aGlzIGNhbGwKICAqIEBsaXN0OiB0aGUgZGVzdGluYXRpb24gbGlzdAogICovCi12b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAomIzQzO3ZvaWQgaWVlZTgwMjExX3J4X2xpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiYjNDM7CQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEsCiAJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KTsKIAogLyoqCkBAIC01NDE0LDE0ICYjNDM7NTQxNywxOCBAQCB2b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogICogbWl4ZWQgZm9yIGEgc2luZ2xlIGhhcmR3YXJlLiBNdXN0IG5vdCBydW4gY29uY3VycmVudGx5IHdpdGgKICAqIGllZWU4MDIxMV90eF9zdGF0dXNfc2tiKCkgb3IgaWVlZTgwMjExX3R4X3N0YXR1c19uaSgpLgogICoKJiM0MzsgKiBGb3IgZGF0YSBmcmFtZXMsIHdoZW4gaGFyZHdhcmUgaGFzIGRvbmUgYWRkcmVzcyB0cmFuc2xhdGlvbiwgYSBsaW5rIHN0YXRpb24KJiM0MzsgKiBoYXMgdG8gYmUgcHJvdmlkZWQgYW5kIHRoZSBmcmVxdWVuY3kgaW5mb3JtYXRpb24gbWF5IGJlIHNraXBwZWQuCiYjNDM7ICoKICAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBCSHMgZGlzYWJsZWQuCiAgKgogICogQGh3OiB0aGUgaGFyZHdhcmUgdGhpcyBmcmFtZSBjYW1lIGluIG9uCi0gKiBAc3RhOiB0aGUgc3RhdGlvbiB0aGUgZnJhbWUgd2FzIHJlY2VpdmVkIGZyb20sIG9yICVOVUxMCiYjNDM7ICogQGxpbmtfc3RhOiB0aGUgbGluayBzdGF0aW9uIHRoZSBkYXRhIGZyYW1lIHdhcyByZWNlaXZlZCBmcm9tLCBvciAlTlVMTAogICogQHNrYjogdGhlIGJ1ZmZlciB0byByZWNlaXZlLCBvd25lZCBieSBtYWM4MDIxMSBhZnRlciB0aGlzIGNhbGwKICAqIEBuYXBpOiB0aGUgTkFQSSBjb250ZXh0CiAgKi8KLXZvaWQgaWVlZTgwMjExX3J4X25hcGkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiYjNDM7dm9pZCBpZWVlODAyMTFfcnhfbmFwaShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKJiM0MzsJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSwKIAkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSk7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmgKaW5kZXggMDIwMzg3ZDc2NDEyMi4uNDY1M2Y4ZjI2ZWU3MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oCkBAIC0zMTg1LDYgJiM0MzszMTg1LDExIEBAIGVudW0gbmw4MDIxMV9jb21tYW5kcyB7CiAgKglUaGUgYWdncmVnYXRlZCBtZXNzYWdlIGFsd2F5cyBwcmVjZWRlcyB0aGUgcGVyLWxpbmsgbWVzc2FnZXMgZm9yIHRoZQogICoJc2FtZSBzdGF0aW9uIHdpdGhpbiBhIGR1bXAgc2VxdWVuY2UuCiAgKgomIzQzOyAqIEBOTDgwMjExX0FUVFJfRlJBTUVfQ01EX05PX1NUQTogVmFsaWQgZm9yIE5MODAyMTFfQ01EX0ZSQU1FIHRvIGRlbm90ZSB0aGF0CiYjNDM7ICoJdGhlIGtlcm5lbCBoYWQgbm8gc3RhdGlvbiBmb3IgYSByZWNlaXZlZCBmcmFtZSBvciBzaG91bGQgbm90IHVzZSBhCiYjNDM7ICoJa25vd24gc3RhdGlvbiB0byB0cmFuc21pdCBhIGZyYW1lLiBUaGlzIGlzIHJlbGV2YW50IHRvIGtub3cgd2hldGhlcgomIzQzOyAqCU1MRCBhZGRyZXNzIHRyYW5zbGF0aW9uIGhhcHBlbmVkIG9yIHRvIGRpc2FibGUgaXQgd2hlbiBzZW5kaW5nIGEgZnJhbWUuCiYjNDM7ICoKICAqIEBOVU1fTkw4MDIxMV9BVFRSOiB0b3RhbCBudW1iZXIgb2Ygbmw4MDIxMV9hdHRycyBhdmFpbGFibGUKICAqIEBOTDgwMjExX0FUVFJfTUFYOiBoaWdoZXN0IGF0dHJpYnV0ZSBudW1iZXIgY3VycmVudGx5IGRlZmluZWQKICAqIEBfX05MODAyMTFfQVRUUl9BRlRFUl9MQVNUOiBpbnRlcm5hbCB1c2UKQEAgLTM3ODUsNiAmIzQzOzM3OTAsOCBAQCBlbnVtIG5sODAyMTFfYXR0cnMgewogCiAJTkw4MDIxMV9BVFRSX1NUQV9EVU1QX0xJTktfU1RBVFMsCiAKJiM0MzsJTkw4MDIxMV9BVFRSX0ZSQU1FX0NNRF9OT19TVEEsCiYjNDM7CiAJLyogYWRkIGF0dHJpYnV0ZXMgaGVyZSwgdXBkYXRlIHRoZSBwb2xpY3kgaW4gbmw4MDIxMS5jICovCiAKIAlfX05MODAyMTFfQVRUUl9BRlRFUl9MQVNULApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2FnZy10eC5jIGIvbmV0L21hYzgwMjExL2FnZy10eC5jCmluZGV4IDQ4MzNiNDY3NzBiNjIuLmRkOGExMWVmNmU1MmIgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9hZ2ctdHguYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvYWdnLXR4LmMKQEAgLTk4LDcgJiM0Mzs5OCw3IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zZW5kX2FkZGJhX3JlcXVlc3Qoc3RydWN0IHN0YV9pbmZvICpzdGEsIHUxNiB0aWQsCiAJaWYgKHN0YS0mZ3Q7c3RhLmRlZmxpbmsuaGVfY2FwLmhhc19oZSkKIAkJaWVlZTgwMjExX2FkZF9hZGRiYWV4dChza2IsIDAsIGFnZ19zaXplKTsKIAotCWllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIHRpZCwgLTEpOwomIzQzOwlpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCBOVUxMLCB0aWQsIC0xKTsKIH0KIAogdm9pZCBpZWVlODAyMTFfc2VuZF9iYXIoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgdTggKnJhLCB1MTYgdGlkLCB1MTYgc3NuKQpAQCAtMTI3LDcgJiM0MzsxMjcsNyBAQCB2b2lkIGllZWU4MDIxMV9zZW5kX2JhcihzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCB1OCAqcmEsIHUxNiB0aWQsIHUxNiBzc24pCiAKIAlJRUVFODAyMTFfU0tCX0NCKHNrYiktJmd0O2ZsYWdzIHw9IElFRUU4MDIxMV9UWF9JTlRGTF9ET05UX0VOQ1JZUFQgfAogCQkJCQlJRUVFODAyMTFfVFhfQ1RMX1JFUV9UWF9TVEFUVVM7Ci0JaWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgdGlkLCAtMSk7CiYjNDM7CWllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIE5VTEwsIHRpZCwgLTEpOwogfQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc2VuZF9iYXIpOwogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvYXAuYyBiL25ldC9tYWM4MDIxMS9hcC5jCmluZGV4IGU3YWM5OWM1YTIyZWIuLmZlMjU1ODkxYzM1ZjAgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9hcC5jCkBAIC04Miw5ICYjNDM7ODIsNiBAQCBpZWVlODAyMTFfcnhfZW1sX29wX21vZGVfbm90aWYoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJaWYgKCFpZnRfZXh0X2NhcGEpCiAJCXJldHVybjsKIAotCWlmICghc3RhdHVzLSZndDtsaW5rX3ZhbGlkKQotCQlyZXR1cm47Ci0KIAlzdGEgPSBzdGFfaW5mb19nZXRfYnNzKHNkYXRhLCBtZ210LSZndDtzYSk7CiAJaWYgKCFzdGEpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9odC5jIGIvbmV0L21hYzgwMjExL2h0LmMKaW5kZXggZTFlMWI3ZjgyZjNmZS4uYzVjMjExM2ZhNGY3OSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2h0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2h0LmMKQEAgLTU0NSw3ICYjNDM7NTQ1LDcgQEAgaW50IGllZWU4MDIxMV9zZW5kX3NtcHNfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCWluZm8tJmd0O3N0YXR1c19kYXRhID0gSUVFRTgwMjExX1NUQVRVU19UWVBFX1NNUFMgfAogCQkJICAgIHUxNl9lbmNvZGVfYml0cyhzdGF0dXNfbGlua19pZCAmbHQ7Jmx0OyAyIHwgc21wcywKIAkJCQkJICAgIElFRUU4MDIxMV9TVEFUVVNfU1VCREFUQV9NQVNLKTsKLQlpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCA3LCBsaW5rX2lkKTsKJiM0MzsJaWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgTlVMTCwgNywgbGlua19pZCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKaW5kZXggYTFlZjg4ZmU4NDZkZC4uMzhkODZiMGExMGY1YSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKQEAgLTI0NjYsNyAmIzQzOzI0NjYsOCBAQCB2b2lkIGllZWU4MDIxMV94bWl0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkgICAgc3RydWN0IHN0YV9pbmZvICpzdGEsIHN0cnVjdCBza19idWZmICpza2IpOwogCiB2b2lkIF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRpZCwgaW50IGxpbmtfaWQsCiYjNDM7CQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKJiM0MzsJCQkJIGludCB0aWQsIGludCBsaW5rX2lkLAogCQkJCSBlbnVtIG5sODAyMTFfYmFuZCBiYW5kKTsKIAogc3RhdGljIGlubGluZSBib29sIGllZWU4MDIxMV9yZXF1aXJlX2VuY3J5cHRlZF9hc3NvYyhfX2xlMTYgZmMsCkBAIC0yNDg2LDE4ICYjNDM7MjQ4NywyMCBAQCBpZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJICBlbnVtIG5sODAyMTFfYmFuZCBiYW5kKQogewogCXJjdV9yZWFkX2xvY2soKTsKLQlfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc2RhdGEsIHNrYiwgdGlkLCAtMSwgYmFuZCk7CiYjNDM7CV9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzZGF0YSwgc2tiLCBFUlJfUFRSKC1FTk9FTlQpLAomIzQzOwkJCQkgICAgdGlkLCAtMSwgYmFuZCk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKIHZvaWQgaWVlZTgwMjExX3R4X3NrYl90aWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkgIHN0cnVjdCBza19idWZmICpza2IsIGludCB0aWQsIGludCBsaW5rX2lkKTsKJiM0MzsJCQkgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzdGFfaW5mbyAqc3RhLAomIzQzOwkJCSAgaW50IHRpZCwgaW50IGxpbmtfaWQpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX3R4X3NrYihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAkvKiBTZW5kIGFsbCBpbnRlcm5hbCBtZ210IGZyYW1lcyBvbiBWTy4gQWNjb3JkaW5nbHkgc2V0IFRJRCB0byA3LiAqLwotCWllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIDcsIC0xKTsKJiM0MzsJaWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgTlVMTCwgNywgLTEpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZmFjZS5jIGIvbmV0L21hYzgwMjExL2lmYWNlLmMKaW5kZXggNDM0NjBhNzA1YTZiZC4uYTBiMjE0ZGJiOGFmOCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2lmYWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2lmYWNlLmMKQEAgLTE2NzMsMTEgJiM0MzsxNjczLDggQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX2lmYWNlX3Byb2Nlc3Nfc2tiKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJCWJyZWFrOwogCiAJCQlzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTsKLQkJCWlmICghc3RhdHVzLSZndDtsaW5rX3ZhbGlkKQotCQkJCWxpbmtfc3RhID0gJmFtcDtzdGEtJmd0O2RlZmxpbms7Ci0JCQllbHNlCi0JCQkJbGlua19zdGEgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHN0YS0mZ3Q7bGlua1tzdGF0dXMtJmd0O2xpbmtfaWRdLAotCQkJCQkJCWxvY2tkZXBfaXNfaGVsZCgmYW1wO2xvY2FsLSZndDtody53aXBoeS0mZ3Q7bXR4KSk7CiYjNDM7CQkJbGlua19zdGEgPSB3aXBoeV9kZXJlZmVyZW5jZShsb2NhbC0mZ3Q7aHcud2lwaHksCiYjNDM7CQkJCQkJICAgICBzdGEtJmd0O2xpbmtbc3RhdHVzLSZndDtsaW5rX2lkXSk7CiAJCQlpZiAobGlua19zdGEpCiAJCQkJaWVlZTgwMjExX2h0X2hhbmRsZV9jaGFud2lkdGhfbm90aWYobG9jYWwsIHNkYXRhLCBzdGEsCiAJCQkJCQkJCSAgICBsaW5rX3N0YSwgY2hhbndpZHRoLApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21sbWUuYyBiL25ldC9tYWM4MDIxMS9tbG1lLmMKaW5kZXggZjUxMTY3ZjBmYzQ2ZC4uMzYxNzc1ZmI5MzFlYyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21sbWUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvbWxtZS5jCkBAIC0xMTgzMSwxMiAmIzQzOzExODMxLDEwIEBAIHZvaWQgaWVlZTgwMjExX3N0YV9yeF9xdWV1ZWRfZnJhbWUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJcnhfc3RhdHVzID0gKHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICopIHNrYi0mZ3Q7Y2I7CiAJZmMgPSBsZTE2X3RvX2NwdShtZ210LSZndDtmcmFtZV9jb250cm9sKTsKIAotCWlmIChyeF9zdGF0dXMtJmd0O2xpbmtfdmFsaWQpIHsKLQkJbGluayA9IHNkYXRhX2RlcmVmZXJlbmNlKHNkYXRhLSZndDtsaW5rW3J4X3N0YXR1cy0mZ3Q7bGlua19pZF0sCi0JCQkJCSBzZGF0YSk7Ci0JCWlmICghbGluaykKLQkJCXJldHVybjsKLQl9CiYjNDM7CWxpbmsgPSBzZGF0YV9kZXJlZmVyZW5jZShzZGF0YS0mZ3Q7bGlua1tyeF9zdGF0dXMtJmd0O2xpbmtfaWRdLAomIzQzOwkJCQkgc2RhdGEpOwomIzQzOwlpZiAoIWxpbmspCiYjNDM7CQlyZXR1cm47CiAKIAlzd2l0Y2ggKGZjICZhbXA7IElFRUU4MDIxMV9GQ1RMX1NUWVBFKSB7CiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfQkVBQ09OOgpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL29mZmNoYW5uZWwuYyBiL25ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmMKaW5kZXggMmJjZWI3MzcxN2M2Ni4uMzgzNGY1OTZhZjE3OCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL29mZmNoYW5uZWwuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jCkBAIC04NTYsOCAmIzQzOzg1NiwxMCBAQCBpbnQgaWVlZTgwMjExX21nbXRfdHgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKIAkJCW5lZWRfb2ZmY2hhbiA9IHRydWU7CiAKIAkJcmN1X3JlYWRfbG9jaygpOwotCQlzdGEgPSBzdGFfaW5mb19nZXRfYnNzKHNkYXRhLCBtZ210LSZndDtkYSk7Ci0JCW1sb19zdGEgPSBzdGEgJmFtcDsmYW1wOyBzdGEtJmd0O3N0YS5tbG87CiYjNDM7CQlpZiAoIXBhcmFtcy0mZ3Q7bm9fc3RhKSB7CiYjNDM7CQkJc3RhID0gc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgbWdtdC0mZ3Q7ZGEpOwomIzQzOwkJCW1sb19zdGEgPSBzdGEgJmFtcDsmYW1wOyBzdGEtJmd0O3N0YS5tbG87CiYjNDM7CQl9CiAKIAkJaWYgKCFpZWVlODAyMTFfaXNfYWN0aW9uKG1nbXQtJmd0O2ZyYW1lX2NvbnRyb2wpIHx8CiAJCSAgICBtZ210LSZndDt1LmFjdGlvbi5jYXRlZ29yeSA9PSBXTEFOX0NBVEVHT1JZX1BVQkxJQyB8fApAQCAtODg2LDcgJiM0Mzs4ODgsOCBAQCBpbnQgaWVlZTgwMjExX21nbXRfdHgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKIAkJICAgICBsb2NhbC0mZ3Q7b3BzLSZndDtyZW1haW5fb25fY2hhbm5lbCAmYW1wOyZhbXA7CiAJCSAgICAgbWVtY21wKHNkYXRhLSZndDt2aWYuY2ZnLmFwX2FkZHIsIG1nbXQtJmd0O2Jzc2lkLCBFVEhfQUxFTikpKSB7CiAJCQluZWVkX29mZmNoYW4gPSB0cnVlOwotCQl9IGVsc2UgaWYgKHNkYXRhLSZndDt1Lm1nZC5hc3NvY2lhdGVkICZhbXA7JmFtcDsKJiM0MzsJCX0gZWxzZSBpZiAoIXBhcmFtcy0mZ3Q7bm9fc3RhICZhbXA7JmFtcDsKJiM0MzsJCQkgICBzZGF0YS0mZ3Q7dS5tZ2QuYXNzb2NpYXRlZCAmYW1wOyZhbXA7CiAJCQkgICBldGhlcl9hZGRyX2VxdWFsKHNkYXRhLSZndDt2aWYuY2ZnLmFwX2FkZHIsIG1nbXQtJmd0O2RhKSkgewogCQkJc3RhID0gc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgbWdtdC0mZ3Q7ZGEpOwogCQkJbWxvX3N0YSA9IHN0YSAmYW1wOyZhbXA7IHN0YS0mZ3Q7c3RhLm1sbzsKQEAgLTEwMzEsNyAmIzQzOzEwMzQsOSBAQCBpbnQgaWVlZTgwMjExX21nbXRfdHgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKIAl9CiAKIAlpZiAoIW5lZWRfb2ZmY2hhbikgewotCQlpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCA3LCBsaW5rX2lkKTsKJiM0MzsJCWllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsCiYjNDM7CQkJCSAgICAgcGFyYW1zLSZndDtub19zdGEgPyBzdGEgOiBFUlJfUFRSKC1FTk9FTlQpLAomIzQzOwkJCQkgICAgIDcsIGxpbmtfaWQpOwogCQlyZXQgPSAwOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3J4LmMgYi9uZXQvbWFjODAyMTEvcnguYwppbmRleCA1ZTI2YmU4ZTI3ZDhmLi5lZDVhMmUwNTkwNzU3IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvcnguYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvcnguYwpAQCAtMjIyLDQzICYjNDM7MjIyLDIxIEBAIGllZWU4MDIxMV9yeF9yYWRpb3RhcF9oZHJsZW4oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiB9CiAKIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkJICAgaW50IGxpbmtfaWQsCi0JCQkJCSAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLAomIzQzOwkJCQkJICAgc3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhLAogCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTsKLQotCWlmIChsaW5rX2lkICZndDs9IDApIHsKLQkJc3RhdHVzLSZndDtsaW5rX3ZhbGlkID0gMTsKLQkJc3RhdHVzLSZndDtsaW5rX2lkID0gbGlua19pZDsKLQl9IGVsc2UgewotCQlzdGF0dXMtJmd0O2xpbmtfdmFsaWQgPSAwOwotCX0KLQogCXNrYl9xdWV1ZV90YWlsKCZhbXA7c2RhdGEtJmd0O3NrYl9xdWV1ZSwgc2tiKTsKIAl3aXBoeV93b3JrX3F1ZXVlKHNkYXRhLSZndDtsb2NhbC0mZ3Q7aHcud2lwaHksICZhbXA7c2RhdGEtJmd0O3dvcmspOwotCWlmIChzdGEpIHsKLQkJc3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhX2luZm87Ci0KLQkJaWYgKGxpbmtfaWQgJmd0Oz0gMCkgewotCQkJbGlua19zdGFfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZShzdGEtJmd0O2xpbmtbbGlua19pZF0pOwotCQkJaWYgKCFsaW5rX3N0YV9pbmZvKQotCQkJCXJldHVybjsKLQkJfSBlbHNlIHsKLQkJCWxpbmtfc3RhX2luZm8gPSAmYW1wO3N0YS0mZ3Q7ZGVmbGluazsKLQkJfQotCi0JCWxpbmtfc3RhX2luZm8tJmd0O3J4X3N0YXRzLnBhY2tldHMmIzQzOyYjNDM7OwotCX0KJiM0MzsJaWYgKGxpbmtfc3RhKQomIzQzOwkJbGlua19zdGEtJmd0O3J4X3N0YXRzLnBhY2tldHMmIzQzOyYjNDM7OwogfQogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCQkgaW50IGxpbmtfaWQsCi0JCQkJCSBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKJiM0MzsJCQkJCSBzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEsCiAJCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXNrYi0mZ3Q7cHJvdG9jb2wgPSAwOwotCV9faWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgbGlua19pZCwgc3RhLCBza2IpOwomIzQzOwlfX2llZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIGxpbmtfc3RhLCBza2IpOwogfQogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfaGFuZGxlX211X21pbW9fbW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLApAQCAtMzAxLDcgJiM0MzsyNzksNyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfaGFuZGxlX211X21pbW9fbW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCWlmICghc2tiKQogCQlyZXR1cm47CiAKLQlpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCAtMSwgTlVMTCwgc2tiKTsKJiM0MzsJaWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgTlVMTCwgc2tiKTsKIH0KIAogLyoKQEAgLTE0OTgsNyAmIzQzOzE0NzYsNyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfcmVvcmRlcl9hbXBkdShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LAogCS8qIGlmIHRoaXMgbXBkdSBpcyBmcmFnbWVudGVkIC0gdGVybWluYXRlIHJ4IGFnZ3JlZ2F0aW9uIHNlc3Npb24gKi8KIAlzYyA9IGxlMTZfdG9fY3B1KGhkci0mZ3Q7c2VxX2N0cmwpOwogCWlmIChzYyAmYW1wOyBJRUVFODAyMTFfU0NUTF9GUkFHKSB7Ci0JCWllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2UocngtJmd0O3NkYXRhLCByeC0mZ3Q7bGlua19pZCwgTlVMTCwgc2tiKTsKJiM0MzsJCWllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2UocngtJmd0O3NkYXRhLCBOVUxMLCBza2IpOwogCQlyZXR1cm47CiAJfQogCkBAIC0yNTI0LDcgJiM0MzsyNTAyLDcgQEAgaWVlZTgwMjExX3J4X2hfZGVmcmFnbWVudChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQogCiAgb3V0OgogCWllZWU4MDIxMV9sZWRfcngocngtJmd0O2xvY2FsKTsKLQlpZiAocngtJmd0O3N0YSkKJiM0MzsJaWYgKHJ4LSZndDtsaW5rX3N0YSkKIAkJcngtJmd0O2xpbmtfc3RhLSZndDtyeF9zdGF0cy5wYWNrZXRzJiM0MzsmIzQzOzsKIAlyZXR1cm4gUlhfQ09OVElOVUU7CiB9CkBAIC0zMzM1LDggJiM0MzszMzEzLDggQEAgaWVlZTgwMjExX3J4X2hfZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQogCQkgICAgKHRmLSZndDthY3Rpb25fY29kZSA9PSBXTEFOX1RETFNfQ0hBTk5FTF9TV0lUQ0hfUkVRVUVTVCB8fAogCQkgICAgIHRmLSZndDthY3Rpb25fY29kZSA9PSBXTEFOX1RETFNfQ0hBTk5FTF9TV0lUQ0hfUkVTUE9OU0UpKSB7CiAJCQlyeC0mZ3Q7c2tiLSZndDtwcm90b2NvbCA9IGNwdV90b19iZTE2KEVUSF9QX1RETFMpOwotCQkJX19pZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC0mZ3Q7bGlua19pZCwKLQkJCQkJCSAgICAgICByeC0mZ3Q7c3RhLCByeC0mZ3Q7c2tiKTsKJiM0MzsJCQlfX2llZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIHJ4LSZndDtsaW5rX3N0YSwKJiM0MzsJCQkJCQkgICAgICAgcngtJmd0O3NrYik7CiAJCQlyZXR1cm4gUlhfUVVFVUVEOwogCQl9CiAJfQpAQCAtMzk5MSw3ICYjNDM7Mzk2OSw3IEBAIGllZWU4MDIxMV9yeF9oX2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQogCXJldHVybiBSWF9RVUVVRUQ7CiAKICBxdWV1ZToKLQlpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC0mZ3Q7bGlua19pZCwgcngtJmd0O3N0YSwgcngtJmd0O3NrYik7CiYjNDM7CWllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIHJ4LSZndDtsaW5rX3N0YSwgcngtJmd0O3NrYik7CiAJcmV0dXJuIFJYX1FVRVVFRDsKIH0KIApAQCAtNDAwNSw2ICYjNDM7Mzk4Myw3IEBAIGllZWU4MDIxMV9yeF9oX3VzZXJzcGFjZV9tZ210KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpCiAJCS5sZW4gPSByeC0mZ3Q7c2tiLSZndDtsZW4sCiAJCS5saW5rX2lkID0gcngtJmd0O2xpbmtfaWQsCiAJCS5oYXZlX2xpbmtfaWQgPSByeC0mZ3Q7bGlua19pZCAmZ3Q7PSAwLAomIzQzOwkJLm5vX3N0YSA9ICFyeC0mZ3Q7c3RhLAogCX07CiAKIAkvKiBza2lwIGtub3duLWJhZCBhY3Rpb24gZnJhbWVzIGFuZCByZXR1cm4gdGhlbSBpbiB0aGUgbmV4dCBoYW5kbGVyICovCkBAIC00MTI3LDcgJiM0Mzs0MTA2LDcgQEAgaWVlZTgwMjExX3J4X2hfYWN0aW9uX3JldHVybihzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQogCQkJCQlsb2NhbC0mZ3Q7aHcub2ZmY2hhbm5lbF90eF9od19xdWV1ZTsKIAkJfQogCi0JCV9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChyeC0mZ3Q7c2RhdGEsIG5za2IsIDcsIC0xLAomIzQzOwkJX19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHJ4LSZndDtzZGF0YSwgbnNrYiwgcngtJmd0O3N0YSwgNywgLTEsCiAJCQkJCSAgICBzdGF0dXMtJmd0O2JhbmQpOwogCX0KIApAQCAtNDE0Nyw3ICYjNDM7NDEyNiw3IEBAIGllZWU4MDIxMV9yeF9oX2V4dChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQogCQlyZXR1cm4gUlhfRFJPUF9VX1VORVhQRUNURURfRVhUX0ZSQU1FOwogCiAJLyogZm9yIG5vdyBvbmx5IGJlYWNvbnMgYXJlIGV4dCwgc28gcXVldWUgdGhlbSAqLwotCWllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIHJ4LSZndDtsaW5rX2lkLCByeC0mZ3Q7c3RhLCByeC0mZ3Q7c2tiKTsKJiM0MzsJaWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgcngtJmd0O2xpbmtfc3RhLCByeC0mZ3Q7c2tiKTsKIAogCXJldHVybiBSWF9RVUVVRUQ7CiB9CkBAIC00MjA0LDcgJiM0Mzs0MTgzLDcgQEAgaWVlZTgwMjExX3J4X2hfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQogCQlyZXR1cm4gUlhfRFJPUF9VX1VOSEFORExFRF9NR01UX1NUWVBFOwogCX0KIAotCWllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIHJ4LSZndDtsaW5rX2lkLCByeC0mZ3Q7c3RhLCByeC0mZ3Q7c2tiKTsKJiM0MzsJaWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgcngtJmd0O2xpbmtfc3RhLCByeC0mZ3Q7c2tiKTsKIAogCXJldHVybiBSWF9RVUVVRUQ7CiB9CkBAIC00MjQ4LDEyICYjNDM7NDIyNywyOCBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfaGFuZGxlcnMoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCwKIAlzcGluX2xvY2tfYmgoJmFtcDtyeC0mZ3Q7bG9jYWwtJmd0O3J4X3BhdGhfbG9jayk7CiAKIAl3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoZnJhbWVzKSkpIHsKJiM0MzsJCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTsKJiM0MzsKIAkJLyoKLQkJICogYWxsIHRoZSBvdGhlciBmaWVsZHMgYXJlIHZhbGlkIGFjcm9zcyBmcmFtZXMKLQkJICogdGhhdCBiZWxvbmcgdG8gYW4gYU1QRFUgc2luY2UgdGhleSBhcmUgb24gdGhlCi0JCSAqIHNhbWUgVElEIGZyb20gdGhlIHNhbWUgc3RhdGlvbgomIzQzOwkJICogTW9zdCBmaWVsZHMgYXJlIHZhbGlkIGFjcm9zcyBmcmFtZXMuIEhvd2V2ZXIsCiYjNDM7CQkgKiBpbiB0aGUgY2FzZSBvZiByZW9yZGVyaW5nIGZyYW1lcyBtYXkgaGF2ZSBhcnJpdmVkCiYjNDM7CQkgKiBvbiBkaWZmZXJlbnQgbGlua3MsIHNvIGFkanVzdCB0aGUgbGlua19pZCwgbGluawomIzQzOwkJICogYW5kIGxpbmtfc3RhIGFjY29yZGluZ2x5LgogCQkgKi8KIAkJcngtJmd0O3NrYiA9IHNrYjsKJiM0MzsJCWlmIChpZWVlODAyMTFfdmlmX2lzX21sZCgmYW1wO3J4LSZndDtzZGF0YS0mZ3Q7dmlmKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgdW5saWtlbHkocngtJmd0O2xpbmtfaWQgIT0gc3RhdHVzLSZndDtsaW5rX2lkKSkgewomIzQzOwkJCWlmIChyeC0mZ3Q7c3RhKSB7CiYjNDM7CQkJCXJ4LSZndDtsaW5rX3N0YSA9CiYjNDM7CQkJCQlyY3VfZGVyZWZlcmVuY2UocngtJmd0O3N0YS0mZ3Q7bGlua1tyeC0mZ3Q7bGlua19pZF0pOwomIzQzOwomIzQzOwkJCQkvKiBMaW5rIGdvdCBkaXNhYmxlZCwganVzdCB1c2UgZGVmbGluayAqLwomIzQzOwkJCQlpZiAoIXJ4LSZndDtsaW5rX3N0YSkKJiM0MzsJCQkJCXJ4LSZndDtsaW5rX3N0YSA9ICZhbXA7cngtJmd0O3N0YS0mZ3Q7ZGVmbGluazsKJiM0MzsJCQl9CiYjNDM7CQkJcngtJmd0O2xpbmtfaWQgPSBzdGF0dXMtJmd0O2xpbmtfaWQ7CiYjNDM7CQkJcngtJmd0O2xpbmsgPSByY3VfZGVyZWZlcmVuY2UocngtJmd0O3NkYXRhLSZndDtsaW5rW3N0YXR1cy0mZ3Q7bGlua19pZF0pOwomIzQzOwkJfQogCiAJCWlmIChXQVJOX09OX09OQ0UoIXJ4LSZndDtsaW5rKSkgewogCQkJcmVzID0gUlhfRFJPUF9VX05PX0xJTks7CkBAIC00MzIzLDcgJiM0Mzs0MzE4LDM0IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9pbnZva2VfcnhfaGFuZGxlcnMoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKIHN0YXRpYyBib29sCiBpZWVlODAyMTFfcnhfaXNfdmFsaWRfc3RhX2xpbmtfaWQoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTggbGlua19pZCkKIHsKLQlyZXR1cm4gISEoc3RhLSZndDt2YWxpZF9saW5rcyAmYW1wOyBCSVQobGlua19pZCkpOwomIzQzOwlpZiAoc3RhLSZndDttbG8pCiYjNDM7CQlyZXR1cm4gc3RhLSZndDt2YWxpZF9saW5rcyAmYW1wOyBCSVQobGlua19pZCk7CiYjNDM7CiYjNDM7CXJldHVybiBzdGEtJmd0O2RlZmxpbmsubGlua19pZCA9PSBsaW5rX2lkOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGlua19zdGEoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCwKJiM0MzsJCQkJCSAgIHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzdGFfaW5mbyAqc3RhOwomIzQzOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCFsaW5rX3N0YSkgfHwKJiM0MzsJICAgICFpZWVlODAyMTFfcnhfaXNfdmFsaWRfc3RhX2xpbmtfaWQoJmFtcDtsaW5rX3N0YS0mZ3Q7c3RhLSZndDtzdGEsCiYjNDM7CQkJCQkgICAgICAgbGlua19zdGEtJmd0O2xpbmtfaWQpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlzdGEgPSBsaW5rX3N0YS0mZ3Q7c3RhOwomIzQzOwomIzQzOwlyeC0mZ3Q7c3RhID0gc3RhOwomIzQzOwlyeC0mZ3Q7bG9jYWwgPSBzdGEtJmd0O3NkYXRhLSZndDtsb2NhbDsKJiM0MzsJcngtJmd0O2xpbmsgPSByY3VfZGVyZWZlcmVuY2Uoc3RhLSZndDtzZGF0YS0mZ3Q7bGlua1tsaW5rX3N0YS0mZ3Q7bGlua19pZF0pOwomIzQzOwlpZiAoIXJ4LSZndDtsaW5rKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyeC0mZ3Q7bGlua19pZCA9IHJ4LSZndDtsaW5rLSZndDtsaW5rX2lkOwomIzQzOwlyeC0mZ3Q7bGlua19zdGEgPSBsaW5rX3N0YTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBib29sIGllZWU4MDIxMV9yeF9kYXRhX3NldF9saW5rKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsCkBAIC00MzYwLDExICYjNDM7NDM4MiwxMyBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfcnhfZGF0YV9zZXRfc3RhKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsCiAKIAlpZiAobGlua19pZCAmbHQ7IDApIHsKIAkJaWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKCZhbXA7cngtJmd0O3NkYXRhLSZndDt2aWYpICZhbXA7JmFtcDsKLQkJICAgIHN0YSAmYW1wOyZhbXA7ICFzdGEtJmd0O3N0YS52YWxpZF9saW5rcykKJiM0MzsJCSAgICBzdGEgJmFtcDsmYW1wOyAhc3RhLSZndDtzdGEudmFsaWRfbGlua3MpIHsKIAkJCXJ4LSZndDtsaW5rID0KIAkJCQlyY3VfZGVyZWZlcmVuY2UocngtJmd0O3NkYXRhLSZndDtsaW5rW3N0YS0mZ3Q7ZGVmbGluay5saW5rX2lkXSk7Ci0JCWVsc2UKJiM0MzsJCQlyeC0mZ3Q7bGlua19zdGEgPSByY3VfZGVyZWZlcmVuY2UocngtJmd0O3N0YS0mZ3Q7bGlua1tsaW5rX2lkXSk7CiYjNDM7CQl9IGVsc2UgewogCQkJcngtJmd0O2xpbmsgPSAmYW1wO3J4LSZndDtzZGF0YS0mZ3Q7ZGVmbGluazsKJiM0MzsJCX0KIAl9IGVsc2UgaWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGluayhyeCwgbGlua19pZCkpIHsKIAkJcmV0dXJuIGZhbHNlOwogCX0KQEAgLTQzODcsNyAmIzQzOzQ0MTEsNyBAQCB2b2lkIGllZWU4MDIxMV9yZWxlYXNlX3Jlb3JkZXJfdGltZW91dChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgaW50IHRpZCkKIAlzdHJ1Y3QgdGlkX2FtcGR1X3J4ICp0aWRfYWdnX3J4OwogCWludCBsaW5rX2lkID0gLTE7CiAKLQkvKiBGSVhNRTogc3RhdGlzdGljcyB3b24mIzM5O3QgYmUgcmlnaHQgd2l0aCB0aGlzICovCiYjNDM7CS8qIE5PVEU6IHRoZSBjb3JyZWN0IGxpbmsgU1RBIGZvciB0aGUgZnJhbWUgaXMgc2V0IGxhdGVyICovCiAJaWYgKHN0YS0mZ3Q7c3RhLnZhbGlkX2xpbmtzKQogCQlsaW5rX2lkID0gZmZzKHN0YS0mZ3Q7c3RhLnZhbGlkX2xpbmtzKSAtIDE7CiAKQEAgLTQ5MTQsMjAgJiM0Mzs0OTM4LDE0IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF84MDIzKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsCiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdGFfcnhfc3RhdHMgKnN0YXRzOwogCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0IocngtJmd0O3NrYik7Ci0Jc3RydWN0IHN0YV9pbmZvICpzdGEgPSByeC0mZ3Q7c3RhOwotCXN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YTsKJiM0MzsJc3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhID0gcngtJmd0O2xpbmtfc3RhOwogCXN0cnVjdCBza19idWZmICpza2IgPSByeC0mZ3Q7c2tiOwogCXZvaWQgKnNhID0gc2tiLSZndDtkYXRhICYjNDM7IEVUSF9BTEVOOwogCXZvaWQgKmRhID0gc2tiLSZndDtkYXRhOwogCi0JaWYgKHJ4LSZndDtsaW5rX2lkICZndDs9IDApIHsKLQkJbGlua19zdGEgPSByY3VfZGVyZWZlcmVuY2Uoc3RhLSZndDtsaW5rW3J4LSZndDtsaW5rX2lkXSk7Ci0JCWlmIChXQVJOX09OX09OQ0UoIWxpbmtfc3RhKSkgewotCQkJZGV2X2tmcmVlX3NrYihyeC0mZ3Q7c2tiKTsKLQkJCXJldHVybjsKLQkJfQotCX0gZWxzZSB7Ci0JCWxpbmtfc3RhID0gJmFtcDtzdGEtJmd0O2RlZmxpbms7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UoIWxpbmtfc3RhKSkgewomIzQzOwkJZGV2X2tmcmVlX3NrYihyeC0mZ3Q7c2tiKTsKJiM0MzsJCXJldHVybjsKIAl9CiAKIAlzdGF0cyA9ICZhbXA7bGlua19zdGEtJmd0O3J4X3N0YXRzOwpAQCAtNTE1NCw2ICYjNDM7NTE3Miw5IEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9pbnZva2VfZmFzdF9yeChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LAogCQlnb3RvIGRyb3A7CiAJfQogCiYjNDM7CXN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpOwomIzQzOwlzdGF0dXMtJmd0O2xpbmtfaWQgPSByeC0mZ3Q7bGlua19pZCAmbHQ7IDAgPyAwIDogcngtJmd0O2xpbmtfaWQ7CiYjNDM7CiAJaWVlZTgwMjExX3J4XzgwMjMocngsIGZhc3RfcngsIG9yaWdfbGVuKTsKIAogCXJldHVybiB0cnVlOwpAQCAtNTE3OCw2ICYjNDM7NTE5OSw3IEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCwKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKilza2ItJmd0O2RhdGE7CiAJc3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhID0gcngtJmd0O2xpbmtfc3RhOwogCXN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rID0gcngtJmd0O2xpbms7CiYjNDM7CXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXM7CiAKIAlyeC0mZ3Q7c2tiID0gc2tiOwogCkBAIC01MjIxLDYgJiM0Mzs1MjQzLDkgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LAogCQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilyeC0mZ3Q7c2tiLSZndDtkYXRhOwogCX0KIAomIzQzOwlzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0IocngtJmd0O3NrYik7CiYjNDM7CXN0YXR1cy0mZ3Q7bGlua19pZCA9IHJ4LSZndDtsaW5rX2lkICZsdDsgMCA/IDAgOiByeC0mZ3Q7bGlua19pZDsKJiM0MzsKIAlpZiAoaWVlZTgwMjExX2lzX3MxZ19iZWFjb24oaGRyLSZndDtmcmFtZV9jb250cm9sKSkgewogCQlpZWVlODAyMTFfaW52b2tlX3J4X2hhbmRsZXJzKHJ4KTsKIAkJcmV0dXJuIHRydWU7CkBAIC01MjU2LDIyICYjNDM7NTI4MSwxOSBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsCiB9CiAKIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J4X2hhbmRsZV84MDIzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLAomIzQzOwkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19wdWJzdGEsCiAJCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7Ci0Jc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpOwogCXN0cnVjdCBpZWVlODAyMTFfZmFzdF9yeCAqZmFzdF9yeDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgcng7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7Ci0JaW50IGxpbmtfaWQgPSAtMTsKIAogCW1lbXNldCgmYW1wO3J4LCAwLCBzaXplb2YocngpKTsKIAlyeC5za2IgPSBza2I7CiAJcngubG9jYWwgPSBsb2NhbDsKIAlyeC5saXN0ID0gbGlzdDsKLQlyeC5saW5rX2lkID0gLTE7CiAKIAlJODAyX0RFQlVHX0lOQyhsb2NhbC0mZ3Q7ZG90MTFSZWNlaXZlZEZyYWdtZW50Q291bnQpOwogCkBAIC01Mjc5LDIzICYjNDM7NTMwMSwxNSBAQCBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfODAyMyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAlpZiAoc2tiLSZndDtsZW4gJmx0OyBzaXplb2Yoc3RydWN0IGV0aGhkcikpCiAJCWdvdG8gZHJvcDsKIAotCWlmICghcHVic3RhKQomIzQzOwlpZiAoIWxpbmtfcHVic3RhKQogCQlnb3RvIGRyb3A7CiAKLQlpZiAoc3RhdHVzLSZndDtsaW5rX3ZhbGlkKQotCQlsaW5rX2lkID0gc3RhdHVzLSZndDtsaW5rX2lkOwotCi0JLyoKLQkgKiBUT0RPOiBTaG91bGQgdGhlIGZyYW1lIGJlIGRyb3BwZWQgaWYgdGhlIHJpZ2h0IGxpbmtfaWQgaXMgbm90Ci0JICogYXZhaWxhYmxlPyBPciBtYXkgYmUgaXQgaXMgZmluZSBpbiB0aGUgY3VycmVudCBmb3JtIHRvIHByb2NlZWQgd2l0aAotCSAqIHRoZSBmcmFtZSBwcm9jZXNzaW5nIGJlY2F1c2Ugd2l0aCBmcmFtZSBiZWluZyBpbiA4MDIuMyBmb3JtYXQsCi0JICogbGlua19pZCBpcyB1c2VkIG9ubHkgZm9yIHN0YXRzIHB1cnBvc2UgYW5kIHVwZGF0aW5nIHRoZSBzdGF0cyBvbgotCSAqIHRoZSBkZWZsaW5rIGlzIGZpbmU/Ci0JICovCi0Jc3RhID0gY29udGFpbmVyX29mKHB1YnN0YSwgc3RydWN0IHN0YV9pbmZvLCBzdGEpOwotCWlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X3N0YSgmYW1wO3J4LCBzdGEsIGxpbmtfaWQpKQomIzQzOwlzdGEgPSBjb250YWluZXJfb2YobGlua19wdWJzdGEtJmd0O3N0YSwgc3RydWN0IHN0YV9pbmZvLCBzdGEpOwomIzQzOwlpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEoJmFtcDtyeCwgc3RhLCBsaW5rX3B1YnN0YS0mZ3Q7bGlua19pZCkpCiAJCWdvdG8gZHJvcDsKIAomIzQzOwlyeC5saW5rX2lkID0gbGlua19wdWJzdGEtJmd0O2xpbmtfaWQ7CiYjNDM7CiAJZmFzdF9yeCA9IHJjdV9kZXJlZmVyZW5jZShyeC5zdGEtJmd0O2Zhc3RfcngpOwogCWlmICghZmFzdF9yeCkKIAkJZ290byBkcm9wOwpAQCAtNTMwNyw1OSAmIzQzOzUzMjEsMTkgQEAgc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlXzgwMjMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJZGV2X2tmcmVlX3NrYihza2IpOwogfQogCi1zdGF0aWMgYm9vbCBpZWVlODAyMTFfcnhfZm9yX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LAotCQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIGNvbnN1bWUpCiYjNDM7c3RhdGljIGJvb2wgaWVlZTgwMjExX3J4X3ZhbGlkX2ZyZXEoaW50IGZyZXEsIHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rKQogewotCXN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKilza2ItJmd0O2RhdGE7Ci0Jc3RydWN0IHN0YV9pbmZvICpzdGE7Ci0JaW50IGxpbmtfaWQgPSAtMTsKLQotCWlmIChpZWVlODAyMTFfaXNfczFnX2JlYWNvbihoZHItJmd0O2ZyYW1lX2NvbnRyb2wpKSB7Ci0JCWlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X3N0YShyeCwgTlVMTCwgLTEpKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCXJldHVybiBpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKHJ4LCBza2IsIGNvbnN1bWUpOwotCX0KJiM0MzsJc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmY7CiAKLQkvKgotCSAqIExvb2sgdXAgbGluayBzdGF0aW9uIGZpcnN0LCBpbiBjYXNlIHRoZXJlJiMzOTtzIGEKLQkgKiBjaGFuY2UgdGhhdCB0aGV5IG1pZ2h0IGhhdmUgYSBsaW5rIGFkZHJlc3MgdGhhdAotCSAqIGlzIGlkZW50aWNhbCB0byB0aGUgTUxEIGFkZHJlc3MsIHRoYXQgd2F5IHdlJiMzOTtsbAotCSAqIGhhdmUgdGhlIGxpbmsgaW5mb3JtYXRpb24gaWYgbmVlZGVkLgotCSAqLwotCWxpbmtfc3RhID0gbGlua19zdGFfaW5mb19nZXRfYnNzKHJ4LSZndDtzZGF0YSwgaGRyLSZndDthZGRyMik7Ci0JaWYgKGxpbmtfc3RhKSB7Ci0JCXN0YSA9IGxpbmtfc3RhLSZndDtzdGE7Ci0JCWxpbmtfaWQgPSBsaW5rX3N0YS0mZ3Q7bGlua19pZDsKLQl9IGVsc2UgewotCQlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7Ci0KLQkJc3RhID0gc3RhX2luZm9fZ2V0X2JzcyhyeC0mZ3Q7c2RhdGEsIGhkci0mZ3Q7YWRkcjIpOwotCQlpZiAoc3RhdHVzLSZndDtsaW5rX3ZhbGlkKSB7Ci0JCQlsaW5rX2lkID0gc3RhdHVzLSZndDtsaW5rX2lkOwotCQl9IGVsc2UgaWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKCZhbXA7cngtJmd0O3NkYXRhLSZndDt2aWYpICZhbXA7JmFtcDsKLQkJCSAgIHN0YXR1cy0mZ3Q7ZnJlcSkgewotCQkJc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbms7Ci0JCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZjsKLQotCQkJZm9yX2VhY2hfbGlua19kYXRhX3JjdShyeC0mZ3Q7c2RhdGEsIGxpbmspIHsKLQkJCQljb25mID0gcmN1X2RlcmVmZXJlbmNlKGxpbmstJmd0O2NvbmYtJmd0O2NoYW5jdHhfY29uZik7Ci0JCQkJaWYgKCFjb25mIHx8ICFjb25mLSZndDtkZWYuY2hhbikKLQkJCQkJY29udGludWU7Ci0KLQkJCQlpZiAoc3RhdHVzLSZndDtmcmVxID09IGNvbmYtJmd0O2RlZi5jaGFuLSZndDtjZW50ZXJfZnJlcSkgewotCQkJCQlsaW5rX2lkID0gbGluay0mZ3Q7bGlua19pZDsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQomIzQzOwlpZiAoIWZyZXEgfHwgbGluay0mZ3Q7c2RhdGEtJmd0O3ZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX05BTiB8fAomIzQzOwkgICAgbGluay0mZ3Q7c2RhdGEtJmd0O3ZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX05BTl9EQVRBKQomIzQzOwkJcmV0dXJuIHRydWU7CiAKLQlpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEocngsIHN0YSwgbGlua19pZCkpCiYjNDM7CWNvbmYgPSByY3VfZGVyZWZlcmVuY2UobGluay0mZ3Q7Y29uZi0mZ3Q7Y2hhbmN0eF9jb25mKTsKJiM0MzsJaWYgKCFjb25mIHx8ICFjb25mLSZndDtkZWYuY2hhbikKIAkJcmV0dXJuIGZhbHNlOwogCi0JcmV0dXJuIGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUocngsIHNrYiwgY29uc3VtZSk7CiYjNDM7CXJldHVybiBmcmVxID09IGNvbmYtJmd0O2RlZi5jaGFuLSZndDtjZW50ZXJfZnJlcTsKIH0KIAogLyoKQEAgLTUzNjcsMTggJiM0Mzs1MzQxLDIwIEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9yeF9mb3JfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsCiAgKiBiZSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrIHByb3RlY3Rpb24uCiAgKi8KIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLAomIzQzOwkJCQkJIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfcHVic3RhLAogCQkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7Ci0Jc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKJiM0MzsJc3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhOwomIzQzOwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAlfX2xlMTYgZmM7CiAJc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhIHJ4OwotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnByZXY7CiAJc3RydWN0IHJobGlzdF9oZWFkICp0bXA7CiYjNDM7CWJvb2wgcnhfZGF0YV9wZW5kaW5nOwogCWludCBlcnIgPSAwOwogCiAJZmMgPSAoKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLSZndDtkYXRhKS0mZ3Q7ZnJhbWVfY29udHJvbDsKQEAgLTUzODYsNyAmIzQzOzUzNjIsNiBAQCBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfcGFja2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCXJ4LnNrYiA9IHNrYjsKIAlyeC5sb2NhbCA9IGxvY2FsOwogCXJ4Lmxpc3QgPSBsaXN0OwotCXJ4LmxpbmtfaWQgPSAtMTsKIAogCWlmIChpZWVlODAyMTFfaXNfZGF0YShmYykgfHwgaWVlZTgwMjExX2lzX21nbXQoZmMpKQogCQlJODAyX0RFQlVHX0lOQyhsb2NhbC0mZ3Q7ZG90MTFSZWNlaXZlZEZyYWdtZW50Q291bnQpOwpAQCAtNTQyNiw5NyAmIzQzOzU0MDEsMTAyIEBAIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCSAgICAgaWVlZTgwMjExX2lzX3MxZ19iZWFjb24oaGRyLSZndDtmcmFtZV9jb250cm9sKSkpCiAJCWllZWU4MDIxMV9zY2FuX3J4KGxvY2FsLCBza2IpOwogCiYjNDM7CS8qCiYjNDM7CSAqIFJYIG9mIGEgZGF0YSBmcmFtZSBzaG91bGQgb25seSBoYXBwZW4gdG8gZXhpc3Rpbmcgc3RhdGlvbnMuCiYjNDM7CSAqIEl0IGlzIHRoZXJlZm9yZSBtb3JlIGVmZmljaWVudCB0byB1c2UgdGhlIG9uZSBwcm92aWRlZCBieSB0aGUgZHJpdmVyCiYjNDM7CSAqIG9yIHNlYXJjaCBiYXNlZCBvbiB0aGUgc3RhdGlvbiYjMzk7cyBhZGRyZXNzLgomIzQzOwkgKgomIzQzOwkgKiBOb3RlIHdlIHdpbGwgZmFsbCB0aHJvdWdoIGFuZCBoYW5kbGUgYSBzcHVyaW91cyBkYXRhIGZyYW1lIGluIHRoZQomIzQzOwkgKiBzYW1lIHdheSBhcyBhIG1hbmFnZW1lbnQgZnJhbWUuCiYjNDM7CSAqLwogCWlmIChpZWVlODAyMTFfaXNfZGF0YShmYykpIHsKLQkJc3RydWN0IHN0YV9pbmZvICpzdGEsICpwcmV2X3N0YTsKLQkJaW50IGxpbmtfaWQgPSAtMTsKLQotCQlpZiAoc3RhdHVzLSZndDtsaW5rX3ZhbGlkKQotCQkJbGlua19pZCA9IHN0YXR1cy0mZ3Q7bGlua19pZDsKLQotCQlpZiAocHVic3RhKSB7Ci0JCQlzdGEgPSBjb250YWluZXJfb2YocHVic3RhLCBzdHJ1Y3Qgc3RhX2luZm8sIHN0YSk7Ci0JCQlpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEoJmFtcDtyeCwgc3RhLCBsaW5rX2lkKSkKLQkJCQlnb3RvIG91dDsKLQotCQkJLyoKLQkJCSAqIEluIE1MTyBjb25uZWN0aW9uLCBmZXRjaCB0aGUgbGlua19pZCB1c2luZyBhZGRyMgotCQkJICogd2hlbiB0aGUgZHJpdmVyIGRvZXMgbm90IHBhc3MgbGlua19pZCBpbiBzdGF0dXMuCi0JCQkgKiBXaGVuIHRoZSBhZGRyZXNzIHRyYW5zbGF0aW9uIGlzIGFscmVhZHkgcGVyZm9ybWVkIGJ5Ci0JCQkgKiBkcml2ZXIvaHcsIHRoZSB2YWxpZCBsaW5rX2lkIG11c3QgYmUgcGFzc2VkIGluCi0JCQkgKiBzdGF0dXMuCi0JCQkgKi8KLQotCQkJaWYgKCFzdGF0dXMtJmd0O2xpbmtfdmFsaWQgJmFtcDsmYW1wOyBwdWJzdGEtJmd0O21sbykgewotCQkJCXN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YTsKLQotCQkJCWxpbmtfc3RhID0gbGlua19zdGFfaW5mb19nZXRfYnNzKHJ4LnNkYXRhLAotCQkJCQkJCQkgaGRyLSZndDthZGRyMik7Ci0JCQkJaWYgKCFsaW5rX3N0YSkKLQkJCQkJZ290byBvdXQ7Ci0KLQkJCQlpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9saW5rKCZhbXA7cngsCi0JCQkJCQkJCWxpbmtfc3RhLSZndDtsaW5rX2lkKSkKLQkJCQkJZ290byBvdXQ7Ci0JCQl9Ci0KLQkJCWlmIChpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKCZhbXA7cngsIHNrYiwgdHJ1ZSkpCiYjNDM7CQlpZiAobGlua19wdWJzdGEpIHsKJiM0MzsJCQlzdGEgPSBjb250YWluZXJfb2YobGlua19wdWJzdGEtJmd0O3N0YSwgc3RydWN0IHN0YV9pbmZvLAomIzQzOwkJCQkJICAgc3RhKTsKJiM0MzsJCQlsaW5rX3N0YSA9IHJjdV9kZXJlZmVyZW5jZShzdGEtJmd0O2xpbmtbbGlua19wdWJzdGEtJmd0O2xpbmtfaWRdKTsKJiM0MzsKJiM0MzsJCQlyeC5zZGF0YSA9IHN0YS0mZ3Q7c2RhdGE7CiYjNDM7CQkJaWYgKGllZWU4MDIxMV9yeF9kYXRhX3NldF9saW5rX3N0YSgmYW1wO3J4LCBsaW5rX3N0YSkgJmFtcDsmYW1wOwomIzQzOwkJCSAgICBpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKCZhbXA7cngsIHNrYiwgdHJ1ZSkpCiAJCQkJcmV0dXJuOwomIzQzOwogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlwcmV2X3N0YSA9IE5VTEw7CiYjNDM7CQlyeF9kYXRhX3BlbmRpbmcgPSBmYWxzZTsKIAomIzQzOwkJLyogU2VhcmNoIGZvciBzdGF0aW9ucyBvbiBub24tTUxEIGludGVyZmFjZXMgKi8KIAkJZm9yX2VhY2hfc3RhX2luZm8obG9jYWwsIGhkci0mZ3Q7YWRkcjIsIHN0YSwgdG1wKSB7Ci0JCQlpZiAoIXByZXZfc3RhKSB7Ci0JCQkJcHJldl9zdGEgPSBzdGE7Ci0JCQkJY29udGludWU7Ci0JCQl9CiYjNDM7CQkJc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbms7CiAKLQkJCXJ4LnNkYXRhID0gcHJldl9zdGEtJmd0O3NkYXRhOwotCQkJaWYgKCFzdGF0dXMtJmd0O2xpbmtfdmFsaWQgJmFtcDsmYW1wOyBwcmV2X3N0YS0mZ3Q7c3RhLm1sbykgewotCQkJCXN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YTsKJiM0MzsJCQlpZiAoaWVlZTgwMjExX3ZpZl9pc19tbGQoJmFtcDtzdGEtJmd0O3NkYXRhLSZndDt2aWYpKQomIzQzOwkJCQljb250aW51ZTsKIAotCQkJCWxpbmtfc3RhID0gbGlua19zdGFfaW5mb19nZXRfYnNzKHJ4LnNkYXRhLAotCQkJCQkJCQkgaGRyLSZndDthZGRyMik7Ci0JCQkJaWYgKCFsaW5rX3N0YSkKLQkJCQkJY29udGludWU7CiYjNDM7CQkJbGluayA9ICZhbXA7c3RhLSZndDtzZGF0YS0mZ3Q7ZGVmbGluazsKJiM0MzsJCQlpZiAoIWllZWU4MDIxMV9yeF92YWxpZF9mcmVxKHN0YXR1cy0mZ3Q7ZnJlcSwgbGluaykpCiYjNDM7CQkJCWNvbnRpbnVlOwogCi0JCQkJbGlua19pZCA9IGxpbmtfc3RhLSZndDtsaW5rX2lkOwomIzQzOwkJCWlmIChyeF9kYXRhX3BlbmRpbmcpIHsKJiM0MzsJCQkJaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZSgmYW1wO3J4LCBza2IsCiYjNDM7CQkJCQkJCQlmYWxzZSk7CiYjNDM7CQkJCXJ4X2RhdGFfcGVuZGluZyA9IGZhbHNlOwogCQkJfQogCi0JCQlpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEoJmFtcDtyeCwgcHJldl9zdGEsIGxpbmtfaWQpKQotCQkJCWdvdG8gb3V0OwotCi0JCQlpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKCZhbXA7cngsIHNrYiwgZmFsc2UpOwomIzQzOwkJCXJ4LnNkYXRhID0gc3RhLSZndDtzZGF0YTsKJiM0MzsJCQlpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9saW5rX3N0YSgmYW1wO3J4LCAmYW1wO3N0YS0mZ3Q7ZGVmbGluaykpCiYjNDM7CQkJCWNvbnRpbnVlOwogCi0JCQlwcmV2X3N0YSA9IHN0YTsKJiM0MzsJCQlyeF9kYXRhX3BlbmRpbmcgPSB0cnVlOwogCQl9CiAKLQkJaWYgKHByZXZfc3RhKSB7Ci0JCQlyeC5zZGF0YSA9IHByZXZfc3RhLSZndDtzZGF0YTsKLQkJCWlmICghc3RhdHVzLSZndDtsaW5rX3ZhbGlkICZhbXA7JmFtcDsgcHJldl9zdGEtJmd0O3N0YS5tbG8pIHsKLQkJCQlzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGE7CiYjNDM7CQkvKiBBbmQgc2VhcmNoIHN0YXRpb25zIG9uIE1MRCBpbnRlcmZhY2VzICovCiYjNDM7CQlmb3JfZWFjaF9saW5rX3N0YV9pbmZvKGxvY2FsLCBoZHItJmd0O2FkZHIyLCBsaW5rX3N0YSwgdG1wKSB7CiYjNDM7CQkJc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbms7CiAKLQkJCQlsaW5rX3N0YSA9IGxpbmtfc3RhX2luZm9fZ2V0X2JzcyhyeC5zZGF0YSwKLQkJCQkJCQkJIGhkci0mZ3Q7YWRkcjIpOwotCQkJCWlmICghbGlua19zdGEpCi0JCQkJCWdvdG8gb3V0OwomIzQzOwkJCXN0YSA9IGxpbmtfc3RhLSZndDtzdGE7CiYjNDM7CQkJc2RhdGEgPQlzdGEtJmd0O3NkYXRhOwomIzQzOwkJCWxpbmsgPSByY3VfZGVyZWZlcmVuY2Uoc2RhdGEtJmd0O2xpbmtbbGlua19zdGEtJmd0O2xpbmtfaWRdKTsKIAotCQkJCWxpbmtfaWQgPSBsaW5rX3N0YS0mZ3Q7bGlua19pZDsKJiM0MzsJCQlpZiAoIWllZWU4MDIxMV9yeF92YWxpZF9mcmVxKHN0YXR1cy0mZ3Q7ZnJlcSwgbGluaykpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJCWlmIChyeF9kYXRhX3BlbmRpbmcpIHsKJiM0MzsJCQkJaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZSgmYW1wO3J4LCBza2IsCiYjNDM7CQkJCQkJCQlmYWxzZSk7CiYjNDM7CQkJCXJ4X2RhdGFfcGVuZGluZyA9IGZhbHNlOwogCQkJfQogCi0JCQlpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEoJmFtcDtyeCwgcHJldl9zdGEsIGxpbmtfaWQpKQotCQkJCWdvdG8gb3V0OwomIzQzOwkJCXJ4LnNkYXRhID0gc3RhLSZndDtzZGF0YTsKJiM0MzsJCQlpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9saW5rX3N0YSgmYW1wO3J4LCBsaW5rX3N0YSkpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJCXJ4X2RhdGFfcGVuZGluZyA9IHRydWU7CiYjNDM7CQl9CiAKJiM0MzsJCWlmIChyeF9kYXRhX3BlbmRpbmcpIHsKIAkJCWlmIChpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKCZhbXA7cngsIHNrYiwgdHJ1ZSkpCiAJCQkJcmV0dXJuOwomIzQzOwogCQkJZ290byBvdXQ7CiAJCX0KJiM0MzsKJiM0MzsJCS8qIGZhbGwgdGhyb3VnaCwgZS5nLiBmb3Igc3B1cmlvdXMgZnJhbWUgbm90aWZpY2F0aW9uICovCiAJfQogCi0JcHJldiA9IE5VTEw7CiYjNDM7CS8qCiYjNDM7CSAqIFRoaXMgaXMgYSBtYW5hZ2VtZW50IGZyYW1lIChvciBhIGRhdGEgZnJhbWUgd2l0aG91dCBhIHN0YXRpb24pIGFuZAomIzQzOwkgKiBpdCB3aWxsIGJlIGRlbGl2ZXJlZCBpbmRlcGVuZGVudCBvZiB3aGV0aGVyIGEgc3RhdGlvbiBleGlzdHMsCiYjNDM7CSAqIHNvIGl0ZXJhdGUgdGhlIGludGVyZmFjZXMuCiYjNDM7CSAqLwomIzQzOwlyeF9kYXRhX3BlbmRpbmcgPSBmYWxzZTsKJiM0MzsKJiM0MzsJLyogV2UgZXhwZWN0IHRoZSBkcml2ZXIgdG8gcHJvdmlkZSBmcmVxdWVuY3kgaW5mb3JtYXRpb24gKi8KJiM0MzsJaWYgKFdBUk5fT05fT05DRSghbG9jYWwtJmd0O2VtdWxhdGVfY2hhbmN0eCAmYW1wOyZhbXA7ICFzdGF0dXMtJmd0O2ZyZXEpKQomIzQzOwkJZ290byBvdXQ7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgJmFtcDtsb2NhbC0mZ3Q7aW50ZXJmYWNlcywgbGlzdCkgewomIzQzOwkJc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmsgPSBOVUxMOwomIzQzOwogCQlpZiAoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSkKIAkJCWNvbnRpbnVlOwogCkBAIC01NTI0LDMwICYjNDM7NTUwNCw4NSBAQCBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfcGFja2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkgICAgc2RhdGEtJmd0O3ZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pCiAJCQljb250aW51ZTsKIAomIzQzOwkJbGlua19zdGEgPSBOVUxMOwomIzQzOwkJbGluayA9IE5VTEw7CiYjNDM7CiYjNDM7CQkvKiBUcnkgdG8gcmVzb2x2ZSB0aGUgc3RhdGlvbiAqLwomIzQzOwkJaWYgKCFpZWVlODAyMTFfdmlmX2lzX21sZCgmYW1wO3NkYXRhLSZndDt2aWYpKSB7CiYjNDM7CQkJc3RhID0gc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgaGRyLSZndDthZGRyMik7CiYjNDM7CiYjNDM7CQkJaWYgKHN0YSkgewomIzQzOwkJCQlsaW5rX3N0YSA9ICZhbXA7c3RhLSZndDtkZWZsaW5rOwomIzQzOwkJCQlsaW5rID0gJmFtcDtzZGF0YS0mZ3Q7ZGVmbGluazsKJiM0MzsJCQl9CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWxpbmtfc3RhID0gbGlua19zdGFfaW5mb19nZXRfYnNzKHNkYXRhLCBoZHItJmd0O2FkZHIyKTsKJiM0MzsKJiM0MzsJCQlpZiAobGlua19zdGEpCiYjNDM7CQkJCWxpbmsgPSByY3VfZGVyZWZlcmVuY2Uoc2RhdGEtJmd0O2xpbmtbbGlua19zdGEtJmd0O2xpbmtfaWRdKTsKJiM0MzsJCX0KJiM0MzsKIAkJLyoKLQkJICogZnJhbWUgaXMgZGVzdGluZWQgZm9yIHRoaXMgaW50ZXJmYWNlLCBidXQgaWYgaXQmIzM5O3MKLQkJICogbm90IGFsc28gZm9yIHRoZSBwcmV2aW91cyBvbmUgd2UgaGFuZGxlIHRoYXQgYWZ0ZXIKLQkJICogdGhlIGxvb3AgdG8gYXZvaWQgY29weWluZyB0aGUgU0tCIG9uY2UgdG9vIG11Y2gKJiM0MzsJCSAqIElmIHdlIGZvdW5kIGEgU1RBIGFuZCBpdCBoYXMgYSB2YWxpZCBsaW5rIGluZm9ybWF0aW9uLCB0aGVuCiYjNDM7CQkgKiBSWCB1c2luZyB0aGUgc3RhdGlvbi4KIAkJICovCiYjNDM7CQlpZiAobGlua19zdGEgJmFtcDsmYW1wOyBsaW5rICZhbXA7JmFtcDsKJiM0MzsJCSAgICBpZWVlODAyMTFfcnhfdmFsaWRfZnJlcShzdGF0dXMtJmd0O2ZyZXEsIGxpbmspKSB7CiYjNDM7CQkJaWYgKHJ4X2RhdGFfcGVuZGluZykgewomIzQzOwkJCQlpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKCZhbXA7cngsIHNrYiwgZmFsc2UpOwomIzQzOwkJCQlyeF9kYXRhX3BlbmRpbmcgPSBmYWxzZTsKJiM0MzsJCQl9CiYjNDM7CiYjNDM7CQkJLyogTm8gdmFsaWRfbGlua3MgY2hlY2sgYXMgd2UgbmVlZCB0byBSWCBiZWFjb25zICovCiYjNDM7CiYjNDM7CQkJcnguc2RhdGEgPSBzZGF0YTsKJiM0MzsJCQlpZiAoaWVlZTgwMjExX3J4X2RhdGFfc2V0X2xpbmtfc3RhKCZhbXA7cngsIGxpbmtfc3RhKSkKJiM0MzsJCQkJcnhfZGF0YV9wZW5kaW5nID0gdHJ1ZTsKIAotCQlpZiAoIXByZXYpIHsKLQkJCXByZXYgPSBzZGF0YTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJcnguc2RhdGEgPSBwcmV2OwotCQlpZWVlODAyMTFfcnhfZm9yX2ludGVyZmFjZSgmYW1wO3J4LCBza2IsIGZhbHNlKTsKJiM0MzsJCS8qIE5vIHN0YXRpb24sIHRyeSB0byByZXNvbHZlIHRoZSBsaW5rIGFuZCBSWCAqLwomIzQzOwkJaWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKCZhbXA7c2RhdGEtJmd0O3ZpZikpIHsKJiM0MzsJCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZjsKJiM0MzsJCQlib29sIGZvdW5kID0gZmFsc2U7CiAKLQkJcHJldiA9IHNkYXRhOwotCX0KJiM0MzsJCQlmb3JfZWFjaF9saW5rX2RhdGFfcmN1KHNkYXRhLCBsaW5rKSB7CiYjNDM7CQkJCWNvbmYgPSByY3VfZGVyZWZlcmVuY2UobGluay0mZ3Q7Y29uZi0mZ3Q7Y2hhbmN0eF9jb25mKTsKJiM0MzsJCQkJaWYgKCFjb25mIHx8ICFjb25mLSZndDtkZWYuY2hhbikKJiM0MzsJCQkJCWNvbnRpbnVlOwogCi0JaWYgKHByZXYpIHsKLQkJcnguc2RhdGEgPSBwcmV2OwomIzQzOwkJCQlpZiAoc3RhdHVzLSZndDtmcmVxID09IGNvbmYtJmd0O2RlZi5jaGFuLSZndDtjZW50ZXJfZnJlcSkgewomIzQzOwkJCQkJZm91bmQgPSB0cnVlOwomIzQzOwkJCQkJYnJlYWs7CiYjNDM7CQkJCX0KJiM0MzsJCQl9CiAKLQkJaWYgKGllZWU4MDIxMV9yeF9mb3JfaW50ZXJmYWNlKCZhbXA7cngsIHNrYiwgdHJ1ZSkpCi0JCQlyZXR1cm47CiYjNDM7CQkJaWYgKCFmb3VuZCkKJiM0MzsJCQkJbGluayA9ICZhbXA7c2RhdGEtJmd0O2RlZmxpbms7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWxpbmsgPSAmYW1wO3NkYXRhLSZndDtkZWZsaW5rOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKHJ4X2RhdGFfcGVuZGluZykgewomIzQzOwkJCWllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoJmFtcDtyeCwgc2tiLCBmYWxzZSk7CiYjNDM7CQkJcnhfZGF0YV9wZW5kaW5nID0gZmFsc2U7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlyeC5zZGF0YSA9IHNkYXRhOwomIzQzOwkJcngubG9jYWwgPSBzZGF0YS0mZ3Q7bG9jYWw7CiYjNDM7CQlyeC5saW5rID0gbGluazsKJiM0MzsJCXJ4LmxpbmtfaWQgPSBsaW5rLSZndDtsaW5rX2lkOwomIzQzOwkJcnguc3RhID0gTlVMTDsKJiM0MzsJCXJ4Lmxpbmtfc3RhID0gTlVMTDsKJiM0MzsKJiM0MzsJCXJ4X2RhdGFfcGVuZGluZyA9IHRydWU7CiAJfQogCiYjNDM7CWlmIChyeF9kYXRhX3BlbmRpbmcgJmFtcDsmYW1wOwomIzQzOwkgICAgaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZSgmYW1wO3J4LCBza2IsIHRydWUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogIG91dDoKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiB9CkBAIC01NTU2LDcgJiM0Mzs1NTkxLDggQEAgc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKICAqIFRoaXMgaXMgdGhlIHJlY2VpdmUgcGF0aCBoYW5kbGVyLiBJdCBpcyBjYWxsZWQgYnkgYSBsb3cgbGV2ZWwgZHJpdmVyIHdoZW4gYW4KICAqIDgwMi4xMSBNUERVIGlzIHJlY2VpdmVkIGZyb20gdGhlIGhhcmR3YXJlLgogICovCi12b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLAomIzQzO3ZvaWQgaWVlZTgwMjExX3J4X2xpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiYjNDM7CQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19wdWJzdGEsCiAJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwpAQCAtNTY5NCw5ICYjNDM7NTczMCw2IEBAIHZvaWQgaWVlZTgwMjExX3J4X2xpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsCiAJCX0KIAl9CiAKLQlpZiAoV0FSTl9PTl9PTkNFKHN0YXR1cy0mZ3Q7bGlua19pZCAmZ3Q7PSBJRUVFODAyMTFfTElOS19VTlNQRUNJRklFRCkpCi0JCWdvdG8gZHJvcDsKLQogCXN0YXR1cy0mZ3Q7cnhfZmxhZ3MgPSAwOwogCiAJa2Nvdl9yZW1vdGVfc3RhcnRfY29tbW9uKHNrYl9nZXRfa2Nvdl9oYW5kbGUoc2tiKSk7CkBAIC01NzE1LDkgJiM0Mzs1NzQ4LDEwIEBAIHZvaWQgaWVlZTgwMjExX3J4X2xpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsCiAJCQlpZWVlODAyMTFfdHB0X2xlZF90cmlnX3J4KGxvY2FsLCBza2ItJmd0O2xlbik7CiAKIAkJaWYgKHN0YXR1cy0mZ3Q7ZmxhZyAmYW1wOyBSWF9GTEFHXzgwMjMpCi0JCQlfX2llZWU4MDIxMV9yeF9oYW5kbGVfODAyMyhodywgcHVic3RhLCBza2IsIGxpc3QpOwomIzQzOwkJCV9faWVlZTgwMjExX3J4X2hhbmRsZV84MDIzKGh3LCBsaW5rX3B1YnN0YSwgc2tiLCBsaXN0KTsKIAkJZWxzZQotCQkJX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChodywgcHVic3RhLCBza2IsIGxpc3QpOwomIzQzOwkJCV9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXQoaHcsIGxpbmtfcHVic3RhLCBza2IsCiYjNDM7CQkJCQkJICAgICBsaXN0KTsKIAl9CiAKIAlrY292X3JlbW90ZV9zdG9wKCk7CkBAIC01NzI3LDcgJiM0Mzs1NzYxLDggQEAgdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSwKIH0KIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3J4X2xpc3QpOwogCi12b2lkIGllZWU4MDIxMV9yeF9uYXBpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLAomIzQzO3ZvaWQgaWVlZTgwMjExX3J4X25hcGkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiYjNDM7CQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19wdWJzdGEsCiAJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnRtcDsKQEAgLTU3NDAsNyAmIzQzOzU3NzUsNyBAQCB2b2lkIGllZWU4MDIxMV9yeF9uYXBpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLAogCSAqIHJlY2VpdmUgcHJvY2Vzc2luZwogCSAqLwogCXJjdV9yZWFkX2xvY2soKTsKLQlpZWVlODAyMTFfcnhfbGlzdChodywgcHVic3RhLCBza2IsICZhbXA7bGlzdCk7CiYjNDM7CWllZWU4MDIxMV9yeF9saXN0KGh3LCBsaW5rX3B1YnN0YSwgc2tiLCAmYW1wO2xpc3QpOwogCXJjdV9yZWFkX3VubG9jaygpOwogCiAJaWYgKCFuYXBpKSB7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc2Nhbi5jIGIvbmV0L21hYzgwMjExL3NjYW4uYwppbmRleCBlZWZmMjMwYmQ5MDlmLi4zMjRjMmI2ZDdjZTFiIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9zY2FuLmMKQEAgLTksNyAmIzQzOzksNyBAQAogICogQ29weXJpZ2h0IDIwMDcsIE1pY2hhZWwgV3UgJmx0O2ZsYW1pbmdpY2VAc291cm1pbGsubmV0Jmd0OwogICogQ29weXJpZ2h0IDIwMTMtMjAxNSAgSW50ZWwgTW9iaWxlIENvbW11bmljYXRpb25zIEdtYkgKICAqIENvcHlyaWdodCAyMDE2LTIwMTcgIEludGVsIERldXRzY2hsYW5kIEdtYkgKLSAqIENvcHlyaWdodCAoQykgMjAxOC0yMDI1IEludGVsIENvcnBvcmF0aW9uCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjYgSW50ZWwgQ29ycG9yYXRpb24KICAqLwogCiAjaW5jbHVkZSAmbHQ7bGludXgvaWZfYXJwLmgmZ3Q7CkBAIC0yMDQsMTIgJiM0MzsyMDQsMTAgQEAgaWVlZTgwMjExX2Jzc19pbmZvX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJICogYW4gaW5kaWNhdGlvbiBvbiB3aGljaCBvZiB0aGUgbGlua3MgdGhlIGZyYW1lIHdhcyByZWNlaXZlZAogCQkgKi8KIAkJaWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKCZhbXA7c2Nhbl9zZGF0YS0mZ3Q7dmlmKSkgewotCQkJaWYgKHJ4X3N0YXR1cy0mZ3Q7bGlua192YWxpZCkgewotCQkJCXM4IGxpbmtfaWQgPSByeF9zdGF0dXMtJmd0O2xpbmtfaWQ7CiYjNDM7CQkJczggbGlua19pZCA9IHJ4X3N0YXR1cy0mZ3Q7bGlua19pZDsKIAotCQkJCWxpbmtfY29uZiA9Ci0JCQkJCXJjdV9kZXJlZmVyZW5jZShzY2FuX3NkYXRhLSZndDt2aWYubGlua19jb25mW2xpbmtfaWRdKTsKLQkJCX0KJiM0MzsJCQlsaW5rX2NvbmYgPQomIzQzOwkJCQlyY3VfZGVyZWZlcmVuY2Uoc2Nhbl9zZGF0YS0mZ3Q7dmlmLmxpbmtfY29uZltsaW5rX2lkXSk7CiAJCX0gZWxzZSB7CiAJCQlsaW5rX2NvbmYgPSAmYW1wO3NjYW5fc2RhdGEtJmd0O3ZpZi5ic3NfY29uZjsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3RkbHMuYyBiL25ldC9tYWM4MDIxMS90ZGxzLmMKaW5kZXggZmZkNTc1YThkMTg4Zi4uYTg5YzY1NjliOWNmNSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3RkbHMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvdGRscy5jCkBAIC0xMDY2LDcgJiM0MzsxMDY2LDcgQEAgaWVlZTgwMjExX3RkbHNfcHJlcF9tZ210X3BhY2tldChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCX0KIAogCWlmIChhY3Rpb25fY29kZSA9PSBXTEFOX1BVQl9BQ1RJT05fVERMU19ESVNDT1ZFUl9SRVMpIHsKLQkJaWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgNywgbGlua19pZCk7CiYjNDM7CQlpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCBzdGEsIDcsIGxpbmtfaWQpOwogCQlyZXR1cm4gMDsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS90eC5jIGIvbmV0L21hYzgwMjExL3R4LmMKaW5kZXggMGNmNWY2ZWM3NWU2Ny4uZjNmOWYxMjQ4MWM0MCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3R4LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL3R4LmMKQEAgLTY0NDEsNyAmIzQzOzY0NDEsOCBAQCB2b2lkIGllZWU4MDIxMV91bnJlc2VydmVfdGlkKHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsIHU4IHRpZCkKIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3VucmVzZXJ2ZV90aWQpOwogCiB2b2lkIF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRpZCwgaW50IGxpbmtfaWQsCiYjNDM7CQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKJiM0MzsJCQkJIGludCB0aWQsIGludCBsaW5rX2lkLAogCQkJCSBlbnVtIG5sODAyMTFfYmFuZCBiYW5kKQogewogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAodm9pZCAqKXNrYi0mZ3Q7ZGF0YTsKQEAgLTY0OTMsMTIgJiM0Mzs2NDk0LDEzIEBAIHZvaWQgX19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCSAqLwogCWxvY2FsX2JoX2Rpc2FibGUoKTsKIAlJRUVFODAyMTFfU0tCX0NCKHNrYiktJmd0O2JhbmQgPSBiYW5kOwotCWllZWU4MDIxMV94bWl0KHNkYXRhLCBOVUxMLCBza2IpOwomIzQzOwlpZWVlODAyMTFfeG1pdChzZGF0YSwgc3RhLCBza2IpOwogCWxvY2FsX2JoX2VuYWJsZSgpOwogfQogCiB2b2lkIGllZWU4MDIxMV90eF9za2JfdGlkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGlkLCBpbnQgbGlua19pZCkKJiM0MzsJCQkgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzdGFfaW5mbyAqc3RhLAomIzQzOwkJCSAgaW50IHRpZCwgaW50IGxpbmtfaWQpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNoYW5jdHhfY29uZjsKIAllbnVtIG5sODAyMTFfYmFuZCBiYW5kOwpAQCAtNjUyNCw3ICYjNDM7NjUyNiw3IEBAIHZvaWQgaWVlZTgwMjExX3R4X3NrYl90aWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCWJhbmQgPSAwOwogCX0KIAotCV9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzZGF0YSwgc2tiLCB0aWQsIGxpbmtfaWQsIGJhbmQpOwomIzQzOwlfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc2RhdGEsIHNrYiwgc3RhLCB0aWQsIGxpbmtfaWQsIGJhbmQpOwogCXJjdV9yZWFkX3VubG9jaygpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuYwppbmRleCA4YWRiZWY1ZjA0NDI1Li4wYWIyOTA3ZTY2ZjY4IDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmMKQEAgLTEwOTYsNiAmIzQzOzEwOTYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmw4MDIxMV9wb2xpY3lbTlVNX05MODAyMTFfQVRUUl0gPSB7CiAJW05MODAyMTFfQVRUUl9OUENBX1BVTkNUX0JJVE1BUF0gPQogCQlOTEFfUE9MSUNZX0ZVTExfUkFOR0UoTkxBX1UzMiwgJmFtcDtubDgwMjExX3B1bmN0X2JpdG1hcF9yYW5nZSksCiAJW05MODAyMTFfQVRUUl9TVEFfRFVNUF9MSU5LX1NUQVRTXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LAomIzQzOwlbTkw4MDIxMV9BVFRSX0ZSQU1FX0NNRF9OT19TVEFdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sCiB9OwogCiAvKiBwb2xpY3kgZm9yIHRoZSBrZXkgYXR0cmlidXRlcyAqLwpAQCAtMTQ4NTksNiAmIzQzOzE0ODYwLDkgQEAgc3RhdGljIGludCBubDgwMjExX3R4X21nbXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkgICAgISh3ZGV2LSZndDt2YWxpZF9saW5rcyAmYW1wOyBCSVQocGFyYW1zLmxpbmtfaWQpKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJcGFyYW1zLm5vX3N0YSA9CiYjNDM7CQlubGFfZ2V0X2ZsYWcoaW5mby0mZ3Q7YXR0cnNbTkw4MDIxMV9BVFRSX0ZSQU1FX0NNRF9OT19TVEFdKTsKJiM0MzsKIAlwYXJhbXMuYnVmID0gbmxhX2RhdGEoaW5mby0mZ3Q7YXR0cnNbTkw4MDIxMV9BVFRSX0ZSQU1FXSk7CiAJcGFyYW1zLmxlbiA9IG5sYV9sZW4oaW5mby0mZ3Q7YXR0cnNbTkw4MDIxMV9BVFRSX0ZSQU1FXSk7CiAKQEAgLTIyMDIwLDcgJiM0MzsyMjAyNCw5IEBAIGludCBubDgwMjExX3NlbmRfbWdtdChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJICAgIChpbmZvLSZndDthY2tfdHN0YW1wICZhbXA7JmFtcDsgbmxhX3B1dF91NjRfNjRiaXQobXNnLAogCQkJCQkJICAgTkw4MDIxMV9BVFRSX1RYX0hXX1RJTUVTVEFNUCwKIAkJCQkJCSAgIGluZm8tJmd0O2Fja190c3RhbXAsCi0JCQkJCQkgICBOTDgwMjExX0FUVFJfUEFEKSkpCiYjNDM7CQkJCQkJICAgTkw4MDIxMV9BVFRSX1BBRCkpIHx8CiYjNDM7CSAgICAoaW5mby0mZ3Q7bm9fc3RhICZhbXA7JmFtcDsKJiM0MzsJICAgICBubGFfcHV0X2ZsYWcobXNnLCBOTDgwMjExX0FUVFJfRlJBTUVfQ01EX05PX1NUQSkpKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAogCWdlbmxtc2dfZW5kKG1zZywgaGRyKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDQ6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMxMzkKCQkJCQkJCW91dHB1dDogMjQ5CgkJCQkJCQl0aG91Z2h0czogMTcxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBtYWM4MDIxMSBSWCBQYXRoIFRyYW5zZm9ybWF0aW9uIGZvciBNTE8gU3VwcG9ydCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMsIGFuZCBteSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCYjMzk7cyBmdW5kYW1lbnRhbGx5IHJld29ya2luZyB0aGUgbWFjODAyMTEgUlggcGF0aCwgcGFydGljdWxhcmx5IGluIHJlbGF0aW9uIHRvIE11bHRpLUxpbmsgT3BlcmF0aW9uIChNTE8pLiBUaGUgY2hhbmdlcyBhcmUgcHJldHR5IGJyb2FkLCB0b3VjaGluZyBhIHNpZ25pZmljYW50IG51bWJlciBvZiBkcml2ZXJzIOKAkyBhdGgxMWssIGF0aDEyaywgaXdsd2lmaSwgbXQ3NiwgcnR3ODksIGFuZCwgaW1wb3J0YW50bHksIG1hYzgwMjExX2h3c2ltLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IHRlbGxpbmcgbWUgdGhhdCB0aGlzIGlzbiYjMzk7dCBzb21lIG1pbm9yIHR3ZWFrOyB0aGlzIGlzIGEgY29yZSBhcmNoaXRlY3R1cmFsIHNoaWZ0LgoKVGhlIGZpcnN0IHRoaW5nIHRoYXQgZ3JhYnMgbXkgYXR0ZW50aW9uIGlzIHRoZSByZW1vdmFsIG9mIGBsaW5rX3ZhbGlkYCBmcm9tIGBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1c2AuIFRoaXMsIGNvbWJpbmVkIHdpdGggdGhlIGNoYW5nZSBpbiBob3cgYGxpbmtfaWRgIGlzIGhhbmRsZWQsIHNwZWNpZmljYWxseSBwYXNzaW5nIGBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpgIGluc3RlYWQgb2YgYHN0cnVjdCBpZWVlODAyMTFfc3RhICpgIHRvIGBpZWVlODAyMTFfcnhfbmFwaWAgYW5kIGBpZWVlODAyMTFfcnhfbGlzdGAsIHN1Z2dlc3RzIGEgcmVmYWN0b3JpbmcgdG8gaGFuZGxlIGxpbmstc3BlY2lmaWMgU1RBIGluZm9ybWF0aW9uIG1vcmUgZXhwbGljaXRseS4gSSBzZWUgdGhpcyBhcyBhIHNvbGlkIHN0ZXAgdG8gZ2V0IHRoaW5ncyByaWdodCBpbiB0aGUgTUxPIGNvbnRleHQsIHdoZXJlIHRoZSBhc3NvY2lhdGlvbiB3aXRoIHRoZSBTVEEgaXNuJiMzOTt0IGFzIHN0cmFpZ2h0Zm9yd2FyZCBiZWNhdXNlIG9mIG11bHRpcGxlIGxpbmtzLgoKVGhlIGFkZGl0aW9uIG9mIGBub19zdGFgIHRvIGBjZmc4MDIxMV9tZ210X3R4X3BhcmFtc2AgYW5kIGBjZmc4MDIxMV9yeF9pbmZvYCwgYW5kIHRoZSBoYW5kbGluZyBvZiB0aGlzIGZsYWcgaW4gYG5sODAyMTEuY2AsIHN0cm9uZ2x5IGluZGljYXRlcyBhIG1vZGlmaWNhdGlvbiB0byB0aGUgbWFuYWdlbWVudCBmcmFtZSBUWC9SWCBwYXRoLCB3aGljaCBpcyBhbHNvIGxpbmtlZCB0byBNTE8uCgpOb3csIGxldCYjMzk7cyBzZWUgaWYgdGhpcyBpcyByZWFjaGFibGUgdGhyb3VnaCBRRU1VLiBUaGFua2Z1bGx5LCB0aGUgcGF0Y2ggbW9kaWZpZXMgYG1hYzgwMjExX2h3c2ltYCwgYW5kIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBgbWFjODAyMTFfaHdzaW1gIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCBpcyBmcmVxdWVudGx5IHVzZWQgZm9yIGZ1enppbmcgbWFjODAyMTEuIFRoaXMgaXMgYSB2ZXJ5IGdvb2Qgc2lnbi4gV2UgY2FuIGRlZmluaXRlbHkgcmVwcm9kdWNlIHRoZSBjaGFuZ2VzIGFuZCBkbyBkZWJ1Z2dpbmcuCgpEaXZpbmcgZGVlcGVyLCB0aGUgcGF0Y2ggaGFzIGEgbWFqb3IgaW1wYWN0IG9uIGBuZXQvbWFjODAyMTEvcnguY2AuIEkmIzM5O20gc2VlaW5nIGNoYW5nZXMgaW4gZnVuY3Rpb25zIGxpa2UgYGllZWU4MDIxMV9yeF9saXN0YCwgYF9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXRgLCBhbmQgYGllZWU4MDIxMV9yeF9uYXBpYC4gRnVydGhlcm1vcmUsIGNoYW5nZXMgdG8gYG5sODAyMTFfdHhfbWdtdGAgYW5kIGBubDgwMjExX3NlbmRfbWdtdGAgcmVpbmZvcmNlIHRoZSBNTE8gYW5nbGUuCgpJJiMzOTttIHplcm9pbmcgaW4gb24gYSBmZXcga2V5IHN5bWJvbHMgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGlzOiBgaWVlZTgwMjExX3J4X2xpc3RgLCBgaWVlZTgwMjExX3J4X25hcGlgLCBgbmw4MDIxMV90eF9tZ210YCwgYG5sODAyMTFfc2VuZF9tZ210YCwgYW5kIGBpZWVlODAyMTFfbWdtdF90eGAuIFRoZSBtb2RpZmljYXRpb25zIHRvIHRob3NlIGZ1bmN0aW9ucyBhbmQgdGhlIGFkZGl0aW9uIG9mIHRoaXMgbmV3IGZsYWcgYXJlIHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VyaWVzLgoKUXVpY2sgc2FuaXR5IGNoZWNrOiBJJiMzOTtsbCBjb25maXJtIHRoYXQgYGllZWU4MDIxMV9yeF9saXN0YCBhbmQgYGllZWU4MDIxMV9yeF9uYXBpYCBhcmUgaW5kZWVkIGV4cG9ydGVkLCBhbmQgdGhhdCBgaWVlZTgwMjExX21nbXRfdHhgIGlzIGluIGBuZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jYC4gQWxzbyB2ZXJpZnlpbmcgdGhhdCB0aGUgYG5sODAyMTFgIGZ1bmN0aW9ucyBhcmUgaW4gYG5ldC93aXJlbGVzcy9ubDgwMjExLmNgLiBZZXAsIGFsbCBjb3JyZWN0LgoKQSBmdXJ0aGVyIGNoZWNrOiBgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldGAgaXMgc3RhdGljLCB3aGljaCBpcyBleHBlY3RlZCBmb3IgYW4gaW50ZXJuYWwgaGVscGVyLiBBbmQgaXQgaXMuIGBpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGlua19zdGFgIGFuZCBgaWVlZTgwMjExX3J4X2RhdGFfc2V0X3N0YWAgYXJlIGFsc28gc3RhdGljLCBhcyBleHBlY3RlZC4KCkkgd2lsbCBhbHNvIGluY2x1ZGUgYGllZWU4MDIxMV90eF9za2JfdGlkYCBhcyB0aGlzIGhhcyBhIHNpZ25hdHVyZSBjaGFuZ2UgYXMgd2VsbC4KClRoZSBjaGFuZ2VzIHRvIHRoZSBzaWduYXR1cmVzIG9mIGBpZWVlODAyMTFfcnhfbGlzdGAsIGBpZWVlODAyMTFfcnhfbmFwaWAsIGFuZCBgaWVlZTgwMjExX3R4X3NrYl90aWRgIGFyZSBzaWduaWZpY2FudCwgd2hpY2ggaXMgcmVtb3ZpbmcgYHN0YWAgZnJvbSB0aGUgaW5wdXQgcGFyYW1ldGVyIGFuZCB1c2luZyBgbGlua19zdGFgIGluc3RlYWQuCgoqKkluIGVzc2VuY2UsIHRoaXMgcGF0Y2ggaXMgYSBmdW5kYW1lbnRhbCByZXN0cnVjdHVyaW5nIG9mIHRoZSBtYWM4MDIxMSBSWCBwYXRoIHRvIGltcHJvdmUgTUxPIHN1cHBvcnQuIEl0JiMzOTtzIG1ha2luZyB0aGUgUlgvVFggcGF0aHMgaGFuZGxlIGxpbmstc3BlY2lmaWMgU1RBIGluZm9ybWF0aW9uLCB3aGljaCBpcyBhIGtleSByZXF1aXJlbWVudCB0byBoYW5kbGUgbXVsdGlwbGUgbGlua3MuIFRoZSBjaGFuZ2VzIGluY2x1ZGUgYWRkaW5nIGEgbmV3IGBub19zdGFgIGZsYWcgdG8KCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA0OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMV9IV1NJTSYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2llZWU4MDIxMV9yeF9saXN0JiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9yeF9uYXBpJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9tZ210X3R4JiMzNDssCiAgICAmIzM0O25sODAyMTFfdHhfbWdtdCYjMzQ7LAogICAgJiMzNDtubDgwMjExX3NlbmRfbWdtdCYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfdHhfc2tiX3RpZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWFjODAyMTEgUlggcGF0aCB0byBoYW5kbGUgTUxPIChNdWx0aS1MaW5rIE9wZXJhdGlvbikgbGluayBJRHMgbW9yZSByb2J1c3RseSwgcmVtb3ZpbmcgYGxpbmtfdmFsaWRgIGFuZCBwYXNzaW5nIGBsaW5rX3N0YWAgZGlyZWN0bHkuIEl0IGFsc28gYWRkcyBhIGBub19zdGFgIGZsYWcgZm9yIG1hbmFnZW1lbnQgZnJhbWUgVFgvUlguIFRoZXNlIGFyZSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBtYWM4MDIxMSBhbmQgY2ZnODAyMTEsIHJlYWNoYWJsZSB2aWEgbWFjODAyMTFfaHdzaW0gYW5kIG5sODAyMTEgbmV0bGluayBpbnRlcmZhY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjExX3J4X2xpc3QmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3J4X25hcGkmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX21nbXRfdHgmIzM0OywKICAgICYjMzQ7bmw4MDIxMV90eF9tZ210JiMzNDssCiAgICAmIzM0O25sODAyMTFfc2VuZF9tZ210JiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV90eF9za2JfdGlkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtYWM4MDIxMSBSWCBwYXRoIHRvIGhhbmRsZSBNTE8gKE11bHRpLUxpbmsgT3BlcmF0aW9uKSBsaW5rIElEcyBtb3JlIHJvYnVzdGx5LCByZW1vdmluZyBgbGlua192YWxpZGAgYW5kIHBhc3NpbmcgYGxpbmtfc3RhYCBkaXJlY3RseS4gSXQgYWxzbyBhZGRzIGEgYG5vX3N0YWAgZmxhZyBmb3IgbWFuYWdlbWVudCBmcmFtZSBUWC9SWC4gVGhlc2UgYXJlIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIG1hYzgwMjExIGFuZCBjZmc4MDIxMSwgcmVhY2hhYmxlIHZpYSBtYWM4MDIxMV9od3NpbSBhbmQgbmw4MDIxMSBuZXRsaW5rIGludGVyZmFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA0OjM1OjIxLjYxOTQ2ODQ4M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzU4MDQxMzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiLFxuICAgIFwiQ0ZHODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZWVlODAyMTFfcnhfbGlzdFwiLFxuICAgIFwiaWVlZTgwMjExX3J4X25hcGlcIixcbiAgICBcImllZWU4MDIxMV9tZ210X3R4XCIsXG4gICAgXCJubDgwMjExX3R4X21nbXRcIixcbiAgICBcIm5sODAyMTFfc2VuZF9tZ210XCIsXG4gICAgXCJpZWVlODAyMTFfdHhfc2tiX3RpZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtYWM4MDIxMSBSWCBwYXRoIHRvIGhhbmRsZSBNTE8gKE11bHRpLUxpbmsgT3BlcmF0aW9uKSBsaW5rIElEcyBtb3JlIHJvYnVzdGx5LCByZW1vdmluZyBgbGlua192YWxpZGAgYW5kIHBhc3NpbmcgYGxpbmtfc3RhYCBkaXJlY3RseS4gSXQgYWxzbyBhZGRzIGEgYG5vX3N0YWAgZmxhZyBmb3IgbWFuYWdlbWVudCBmcmFtZSBUWC9SWC4gVGhlc2UgYXJlIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIG1hYzgwMjExIGFuZCBjZmc4MDIxMSwgcmVhY2hhYmxlIHZpYSBtYWM4MDIxMV9od3NpbSBhbmQgbmw4MDIxMSBuZXRsaW5rIGludGVyZmFjZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDQ6MzU6MjEuNjE5NDc1MjQzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzY5MDk4MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5ZTEyYWUzMTVmZWU1MGU3Y2Q2MDIyNjdlZTY1ZDdiOGJlNGIyNWI1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDEgMDQ6MzU6MjAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kcF9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kcF9yeC5jXFxuaW5kZXggMzM0MjU3MDdjMDg0Mi4uZmJiM2QxOGY1NWRkZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RwX3J4LmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RwX3J4LmNcXG5AQCAtMjUwMCw3ICsyNTAwLDcgQEAgc3RhdGljIHZvaWQgYXRoMTFrX2RwX3J4X2RlbGl2ZXJfbXNkdShzdHJ1Y3QgYXRoMTFrICphciwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBcXG4gXFx0ICAgICEoaXNfbWNiYyBcXHUwMDI2XFx1MDAyNiByeF9zdGF0dXMtXFx1MDAzZWZsYWcgXFx1MDAyNiBSWF9GTEFHX0RFQ1JZUFRFRCkpXFxuIFxcdFxcdHJ4X3N0YXR1cy1cXHUwMDNlZmxhZyB8PSBSWF9GTEFHXzgwMjM7XFxuIFxcbi1cXHRpZWVlODAyMTFfcnhfbmFwaShhci1cXHUwMDNlaHcsIHB1YnN0YSwgbXNkdSwgbmFwaSk7XFxuK1xcdGllZWU4MDIxMV9yeF9uYXBpKGFyLVxcdTAwM2VodywgcHVic3RhID8gXFx1MDAyNnB1YnN0YS1cXHUwMDNlZGVmbGluayA6IE5VTEwsIG1zZHUsIG5hcGkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCBhdGgxMWtfZHBfcnhfY2hlY2tfbndpZmlfaGRyX2xlbl92YWxpZChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX21vbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9tb24uY1xcbmluZGV4IDdkNWJlNzdiMDgxZjguLjFmYWYxODk2ZDBhYjEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9tb24uY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfbW9uLmNcXG5AQCAtNTAzLDggKzUwMyw2IEBAIHZvaWQgYXRoMTJrX2RwX21vbl9yeF9kZWxpdmVyX21zZHUoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LFxcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzO1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlICpoZSA9IE5VTEw7XFxuIFxcbi1cXHRzdGF0dXMtXFx1MDAzZWxpbmtfdmFsaWQgPSAwO1xcbi1cXG4gXFx0aWYgKChzdGF0dXMtXFx1MDAzZWVuY29kaW5nID09IFJYX0VOQ19IRSkgXFx1MDAyNlxcdTAwMjYgIShzdGF0dXMtXFx1MDAzZWZsYWcgXFx1MDAyNiBSWF9GTEFHX1JBRElPVEFQX0hFKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgIShzdGF0dXMtXFx1MDAzZWZsYWcgXFx1MDAyNiBSWF9GTEFHX1NLSVBfTU9OSVRPUikpIHtcXG4gXFx0XFx0aGUgPSBza2JfcHVzaChtc2R1LCBzaXplb2Yoa25vd24pKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9yeC5jXFxuaW5kZXggOGZhMGU5MGI0NTMxNi4uODQ3YWQyOGZkMzBiMiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3J4LmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3J4LmNcXG5AQCAtMTM3NSw2ICsxMzc1LDcgQEAgdm9pZCBhdGgxMmtfZHBfcnhfZGVsaXZlcl9tc2R1KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwgc3RydWN0IG5hcGlfc3RydWNcXG4gXFx0c3RydWN0IGF0aDEya19kcCAqZHAgPSBkcF9wZGV2LVxcdTAwM2VkcDtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cztcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YTtcXG4rXFx0c3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19wdWJzdGEgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKnBlZXI7XFxuIFxcdHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IgPSBBVEgxMktfU0tCX1JYQ0IobXNkdSk7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSByeF9pbmZvLVxcdTAwM2VyeF9zdGF0dXM7XFxuQEAgLTEzODQsOSArMTM4NSwxOSBAQCB2b2lkIGF0aDEya19kcF9yeF9kZWxpdmVyX21zZHUoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LCBzdHJ1Y3QgbmFwaV9zdHJ1Y1xcbiBcXG4gXFx0cHVic3RhID0gcGVlciA/IHBlZXItXFx1MDAzZXN0YSA6IE5VTEw7XFxuIFxcbi1cXHRzdGF0dXMtXFx1MDAzZWxpbmtfdmFsaWQgPSAwO1xcbi1cXHRpZiAocHVic3RhIFxcdTAwMjZcXHUwMDI2IHB1YnN0YS1cXHUwMDNldmFsaWRfbGlua3MpXFxuLVxcdFxcdGF0aDEya19od19zZXRfcnhfbGlua19pZChkcC1cXHUwMDNlaHdfcGFyYW1zLCBwZWVyLCByeGNiLCBzdGF0dXMpO1xcbitcXHRpZiAocHVic3RhKSB7XFxuK1xcdFxcdGlmIChwdWJzdGEtXFx1MDAzZXZhbGlkX2xpbmtzKSB7XFxuK1xcdFxcdFxcdHU4IGxpbmtfaWQgPVxcbitcXHRcXHRcXHRcXHRhdGgxMmtfaHdfZ2V0X3J4X2xpbmtfaWQoZHAtXFx1MDAzZWh3X3BhcmFtcywgcGVlcixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IHJ4Y2IsIHN0YXR1cyk7XFxuK1xcbitcXHRcXHRcXHRpZiAobGlua19pZCBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdFxcdGxpbmtfcHVic3RhID1cXG4rXFx0XFx0XFx0XFx0XFx0cmN1X2RlcmVmZXJlbmNlKHB1YnN0YS1cXHUwMDNlbGlua1tsaW5rX2lkXSk7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGxpbmtfcHVic3RhID0gXFx1MDAyNnB1YnN0YS1cXHUwMDNlZGVmbGluaztcXG4rXFx0XFx0fVxcbitcXHR9XFxuIFxcbiBcXHRhdGgxMmtfZGJnKGRwLVxcdTAwM2VhYiwgQVRIMTJLX0RCR19EQVRBLFxcbiBcXHRcXHQgICBcXFwicnggc2tiICVwIGxlbiAldSBwZWVyICVwTSAlZCAlcyBzbiAldSAlcyVzJXMlcyVzJXMlcyVzJXMlcyByYXRlX2lkeCAldSB2aHRfbnNzICV1IGZyZXEgJXUgYmFuZCAldSBmbGFnIDB4JXggZmNzLWVyciAlaSBtaWMtZXJyICVpIGFtc2R1LW1vcmUgJWlcXFxcblxcXCIsXFxuQEAgLTE0MjIsNyArMTQzMyw4IEBAIHZvaWQgYXRoMTJrX2RwX3J4X2RlbGl2ZXJfbXNkdShzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsIHN0cnVjdCBuYXBpX3N0cnVjXFxuIFxcbiBcXHQvKiBUT0RPOiB0cmFjZSByeCBwYWNrZXQgKi9cXG4gXFxuLVxcdGllZWU4MDIxMV9yeF9uYXBpKGF0aDEya19wZGV2X2RwX3RvX2h3KGRwX3BkZXYpLCBwdWJzdGEsIG1zZHUsIG5hcGkpO1xcbitcXHRpZWVlODAyMTFfcnhfbmFwaShhdGgxMmtfcGRldl9kcF90b19odyhkcF9wZGV2KSwgbGlua19wdWJzdGEsIG1zZHUsXFxuK1xcdFxcdFxcdCAgbmFwaSk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChhdGgxMmtfZHBfcnhfZGVsaXZlcl9tc2R1KTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaHcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaHcuaFxcbmluZGV4IDQ5Y2ZkNWRmYzcwYTYuLjI2OGYwYThmZDQ2ZGQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9ody5oXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9ody5oXFxuQEAgLTI0OCw5ICsyNDgsOSBAQCBzdHJ1Y3QgYXRoMTJrX2h3X29wcyB7XFxuIFxcdGJvb2wgKCpkcF9zcm5nX2lzX3R4X2NvbXBfcmluZykoaW50IHJpbmdfbnVtKTtcXG4gXFx0Ym9vbCAoKmlzX2ZyYW1lX2xpbmtfYWdub3N0aWMpKHN0cnVjdCBhdGgxMmtfbGlua192aWYgKmFydmlmLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210KTtcXG4tXFx0dm9pZCAoKnNldF9yeF9saW5rX2lkKShzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXFxuLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxcbi1cXHRcXHRcXHQgICAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyk7XFxuK1xcdGludCAoKmdldF9yeF9saW5rX2lkKShzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpO1xcbiB9O1xcbiBcXG4gc3RhdGljIGlubGluZVxcbkBAIC0yODEsMTMgKzI4MSwxNSBAQCBzdGF0aWMgaW5saW5lIGludCBhdGgxMmtfaHdfbWFjX2lkX3RvX3NybmdfaWQoY29uc3Qgc3RydWN0IGF0aDEya19od19wYXJhbXMgKmh3LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkIGF0aDEya19od19zZXRfcnhfbGlua19pZChjb25zdCBzdHJ1Y3QgYXRoMTJrX2h3X3BhcmFtcyAqaHcsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cylcXG4rc3RhdGljIGlubGluZSBpbnQgYXRoMTJrX2h3X2dldF9yeF9saW5rX2lkKGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfcGFyYW1zICpodyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLFxcbitcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxcbitcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKVxcbiB7XFxuLVxcdGlmIChody1cXHUwMDNlaHdfb3BzLVxcdTAwM2VzZXRfcnhfbGlua19pZClcXG4tXFx0XFx0aHctXFx1MDAzZWh3X29wcy1cXHUwMDNlc2V0X3J4X2xpbmtfaWQoZHBfcGVlciwgcnhjYiwgc3RhdHVzKTtcXG4rXFx0aWYgKGh3LVxcdTAwM2Vod19vcHMtXFx1MDAzZWdldF9yeF9saW5rX2lkKVxcbitcXHRcXHRyZXR1cm4gaHctXFx1MDAzZWh3X29wcy1cXHUwMDNlZ2V0X3J4X2xpbmtfaWQoZHBfcGVlciwgcnhjYiwgc3RhdHVzKTtcXG4rXFxuK1xcdHJldHVybiAtMTtcXG4gfVxcbiBcXG4gc3RydWN0IGF0aDEya19md19pZSB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguY1xcbmluZGV4IDk1ZDg3ZGQ2Nzg3MmYuLjhiNzIyZWUwYWQ4ZmEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5jXFxuQEAgLTIzMTcsMTcgKzIzMTcsMTYgQEAgYXRoMTJrX3dpZmk3X2RwX3J4ZGVzY19tcGR1X3ZhbGlkKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsXFxuIFxcdHJldHVybiB0bHZfdGFnID09IEhBTF9SWF9NUERVX1NUQVJUO1xcbiB9XFxuIFxcbi12b2lkXFxuLWF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF9xY245Mjc0KHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcXG4raW50XFxuK2F0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF9xY245Mjc0KHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKVxcbiB7XFxuLVxcdHN0YXR1cy1cXHUwMDNlbGlua192YWxpZCA9IDE7XFxuLVxcdHN0YXR1cy1cXHUwMDNlbGlua19pZCA9IGRwX3BlZXItXFx1MDAzZWh3X2xpbmtzW3J4Y2ItXFx1MDAzZWh3X2xpbmtfaWRdO1xcbitcXHRyZXR1cm4gZHBfcGVlci1cXHUwMDNlaHdfbGlua3NbcnhjYi1cXHUwMDNlaHdfbGlua19pZF07XFxuIH1cXG4gXFxuLXZvaWRcXG4tYXRoMTJrX3dpZmk3X2RwX3J4X3NldF9saW5rX2lkX3djbjc4NTAoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLFxcbitpbnRcXG4rYXRoMTJrX3dpZmk3X2RwX3J4X2dldF9saW5rX2lkX3djbjc4NTAoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYixcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpXFxuIHtcXG5AQCAtMjM0MSwxMCArMjM0MCw5IEBAIGF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF93Y243ODUwKHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcXG4gXFx0bGlua3NfbWFwID0gUkVBRF9PTkNFKGRwX3BlZXItXFx1MDAzZWxpbmtfcGVlcnNfbWFwKTtcXG4gXFx0Zm9yX2VhY2hfc2V0X2JpdChpLCBcXHUwMDI2bGlua3NfbWFwLCBBVEgxMktfTlVNX01BWF9MSU5LUykge1xcbiBcXHRcXHRsaW5rX3BlZXIgPSByY3VfZGVyZWZlcmVuY2UoZHBfcGVlci1cXHUwMDNlbGlua19wZWVyc1tpXSk7XFxuLVxcdFxcdGlmIChsaW5rX3BlZXIgXFx1MDAyNlxcdTAwMjYgbGlua19wZWVyLVxcdTAwM2VwZWVyX2lkID09IHJ4Y2ItXFx1MDAzZXBlZXJfaWQpIHtcXG4tXFx0XFx0XFx0c3RhdHVzLVxcdTAwM2VsaW5rX3ZhbGlkID0gMTtcXG4tXFx0XFx0XFx0c3RhdHVzLVxcdTAwM2VsaW5rX2lkID0gbGlua19wZWVyLVxcdTAwM2VsaW5rX2lkO1xcbi1cXHRcXHRcXHRyZXR1cm47XFxuLVxcdFxcdH1cXG4rXFx0XFx0aWYgKGxpbmtfcGVlciBcXHUwMDI2XFx1MDAyNiBsaW5rX3BlZXItXFx1MDAzZXBlZXJfaWQgPT0gcnhjYi1cXHUwMDNlcGVlcl9pZClcXG4rXFx0XFx0XFx0cmV0dXJuIGxpbmtfcGVlci1cXHUwMDNlbGlua19pZDtcXG4gXFx0fVxcbitcXG4rXFx0cmV0dXJuIC0xO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguaFxcbmluZGV4IDFkM2E0Nzg4YTJkZDkuLmQ2ODQ4OWZmN2IwMzcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5oXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5oXFxuQEAgLTU3LDEwICs1NywxMCBAQCBhdGgxMmtfd2lmaTdfZHBfcnhkZXNjX21wZHVfdmFsaWQoc3RydWN0IGF0aDEya19iYXNlICphYixcXG4gXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaGFsX3J4X2Rlc2MgKnJ4X2Rlc2MpO1xcbiBpbnQgYXRoMTJrX3dpZmk3X2RwX3J4X3RpZF9kZWxldGVfaGFuZGxlcihzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLFxcbiBcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBhdGgxMmtfZHBfcnhfdGlkX3J4cSAqcnhfdGlkKTtcXG4tdm9pZCBhdGgxMmtfd2lmaTdfZHBfcnhfc2V0X2xpbmtfaWRfcWNuOTI3NChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyk7XFxuLXZvaWQgYXRoMTJrX3dpZmk3X2RwX3J4X3NldF9saW5rX2lkX3djbjc4NTAoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpO1xcbitpbnQgYXRoMTJrX3dpZmk3X2RwX3J4X2dldF9saW5rX2lkX3FjbjkyNzQoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLFxcbitcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxcbitcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKTtcXG4raW50IGF0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF93Y243ODUwKHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyk7XFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2h3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2h3LmNcXG5pbmRleCA0YzExMTllZGNhZWRjLi4zY2QzNTE0NjQyOTZjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaHcuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaHcuY1xcbkBAIC0xNTgsNyArMTU4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfb3BzIHFjbjkyNzRfb3BzID0ge1xcbiBcXHQuZ2V0X3Jpbmdfc2VsZWN0b3IgPSBhdGgxMmtfd2lmaTdfaHdfZ2V0X3Jpbmdfc2VsZWN0b3JfcWNuOTI3NCxcXG4gXFx0LmRwX3NybmdfaXNfdHhfY29tcF9yaW5nID0gYXRoMTJrX3dpZmk3X2RwX3NybmdfaXNfY29tcF9yaW5nX3FjbjkyNzQsXFxuIFxcdC5pc19mcmFtZV9saW5rX2Fnbm9zdGljID0gYXRoMTJrX3dpZmk3X2lzX2ZyYW1lX2xpbmtfYWdub3N0aWNfcWNuOTI3NCxcXG4tXFx0LnNldF9yeF9saW5rX2lkID0gYXRoMTJrX3dpZmk3X2RwX3J4X3NldF9saW5rX2lkX3FjbjkyNzQsXFxuK1xcdC5nZXRfcnhfbGlua19pZCA9IGF0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF9xY245Mjc0LFxcbiB9O1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfb3BzIHdjbjc4NTBfb3BzID0ge1xcbkBAIC0xNjksNyArMTY5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfb3BzIHdjbjc4NTBfb3BzID0ge1xcbiBcXHQuZ2V0X3Jpbmdfc2VsZWN0b3IgPSBhdGgxMmtfd2lmaTdfaHdfZ2V0X3Jpbmdfc2VsZWN0b3Jfd2NuNzg1MCxcXG4gXFx0LmRwX3NybmdfaXNfdHhfY29tcF9yaW5nID0gYXRoMTJrX3dpZmk3X2RwX3NybmdfaXNfY29tcF9yaW5nX3djbjc4NTAsXFxuIFxcdC5pc19mcmFtZV9saW5rX2Fnbm9zdGljID0gYXRoMTJrX3dpZmk3X2lzX2ZyYW1lX2xpbmtfYWdub3N0aWNfd2NuNzg1MCxcXG4tXFx0LnNldF9yeF9saW5rX2lkID0gYXRoMTJrX3dpZmk3X2RwX3J4X3NldF9saW5rX2lkX3djbjc4NTAsXFxuK1xcdC5nZXRfcnhfbGlua19pZCA9IGF0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF93Y243ODUwLFxcbiB9O1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfb3BzIHFjYzIwNzJfb3BzID0ge1xcbkBAIC0xODAsNyArMTgwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfb3BzIHFjYzIwNzJfb3BzID0ge1xcbiBcXHQuZ2V0X3Jpbmdfc2VsZWN0b3IgPSBhdGgxMmtfd2lmaTdfaHdfZ2V0X3Jpbmdfc2VsZWN0b3Jfd2NuNzg1MCxcXG4gXFx0LmRwX3NybmdfaXNfdHhfY29tcF9yaW5nID0gYXRoMTJrX3dpZmk3X2RwX3NybmdfaXNfY29tcF9yaW5nX3djbjc4NTAsXFxuIFxcdC5pc19mcmFtZV9saW5rX2Fnbm9zdGljID0gYXRoMTJrX3dpZmk3X2lzX2ZyYW1lX2xpbmtfYWdub3N0aWNfd2NuNzg1MCxcXG4tXFx0LnNldF9yeF9saW5rX2lkID0gYXRoMTJrX3dpZmk3X2RwX3J4X3NldF9saW5rX2lkX3djbjc4NTAsXFxuK1xcdC5nZXRfcnhfbGlua19pZCA9IGF0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF93Y243ODUwLFxcbiB9O1xcbiBcXG4gI2RlZmluZSBBVEgxMktfVFhfUklOR19NQVNLXzAgMHgxXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jXFxuaW5kZXggMmI3MDdmZmMxYTIwZi4uNWQ2MmM0Yzg2MWJiOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuY1xcbkBAIC03MjYwLDcgKzcyNjAsNiBAQCBzdGF0aWMgdm9pZCBhdGgxMmtfbWdtdF9yeF9ldmVudChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRzdHJ1Y3QgYXRoMTJrX3dtaV9tZ210X3J4X2FyZyByeF9ldiA9IHt9O1xcbiBcXHRzdHJ1Y3QgYXRoMTJrICphcjtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpO1xcbi1cXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhID0gTlVMTDtcXG4gXFx0c3RydWN0IGF0aDEya19kcF9saW5rX3BlZXIgKnBlZXI7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7XFxuIFxcdGJvb2wgaXNfNGFkZHJfbnVsbF9wa3Q7XFxuQEAgLTczNjIsMTEgKzczNjEsNiBAQCBzdGF0aWMgdm9pZCBhdGgxMmtfbWdtdF9yeF9ldmVudChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHRcXHRkZXZfa2ZyZWVfc2tiKHNrYik7XFxuIFxcdFxcdFxcdGdvdG8gZXhpdDtcXG4gXFx0XFx0fVxcbi1cXHRcXHRwdWJzdGEgPSBwZWVyLVxcdTAwM2VzdGE7XFxuLVxcdFxcdGlmIChwdWJzdGEgXFx1MDAyNlxcdTAwMjYgcHVic3RhLVxcdTAwM2V2YWxpZF9saW5rcykge1xcbi1cXHRcXHRcXHRzdGF0dXMtXFx1MDAzZWxpbmtfdmFsaWQgPSAxO1xcbi1cXHRcXHRcXHRzdGF0dXMtXFx1MDAzZWxpbmtfaWQgPSBwZWVyLVxcdTAwM2VsaW5rX2lkO1xcbi1cXHRcXHR9XFxuIFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZkcC1cXHUwMDNlZHBfbG9jayk7XFxuIFxcdFxcdGdvdG8gc2VuZF9yeDtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hZ2cuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FnZy5jXFxuaW5kZXggOTYxMDJkMmFmMmNmOS4uYzQ1YzQ3MzM3NTA5ZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hZ2cuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FnZy5jXFxuQEAgLTcsNyArNyw4IEBAXFxuICNpbmNsdWRlIFxcXCJoY21kLmhcXFwiXFxuIFxcbiBzdGF0aWMgdm9pZFxcbi1pd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcXG4raXdsX21sZF9yZW9yZGVyX3JlbGVhc2VfZnJhbWVzKHN0cnVjdCBpd2xfbWxkICptbGQsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSxcXG4gXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcXG4gXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpd2xfbWxkX2JhaWRfZGF0YSAqYmFpZF9kYXRhLFxcbiBcXHRcXHRcXHQgICAgICAgc3RydWN0IGl3bF9tbGRfcmVvcmRlcl9idWZmZXIgKnJlb3JkZXJfYnVmLFxcbkBAIC0zMiw3ICszMyw3IEBAIGl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxcbiBcXHRcXHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoc2tiX2xpc3QpKSkge1xcbiBcXHRcXHRcXHRpd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKG1sZCwgbmFwaSwgc2tiLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHRyZW9yZGVyX2J1Zi1cXHUwMDNlcXVldWUsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdHN0YSk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdGxpbmtfc3RhKTtcXG4gXFx0XFx0XFx0cmVvcmRlcl9idWYtXFx1MDAzZW51bV9zdG9yZWQtLTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuQEAgLTc0LDcgKzc1LDcgQEAgc3RhdGljIHZvaWQgaXdsX21sZF9yZWxlYXNlX2ZyYW1lc19mcm9tX25vdGlmKHN0cnVjdCBpd2xfbWxkICptbGQsXFxuIFxcbiBcXHRyZW9yZGVyX2J1ZiA9IFxcdTAwMjZiYV9kYXRhLVxcdTAwM2VyZW9yZGVyX2J1ZltxdWV1ZV07XFxuIFxcbi1cXHRpd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMobWxkLCBsaW5rX3N0YS1cXHUwMDNlc3RhLCBuYXBpLCBiYV9kYXRhLFxcbitcXHRpd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMobWxkLCBsaW5rX3N0YSwgbmFwaSwgYmFfZGF0YSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHJlb3JkZXJfYnVmLCBuc3NuKTtcXG4gb3V0X3VubG9jazpcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuQEAgLTE4MCw3ICsxODEsNyBAQCB2b2lkIGl3bF9tbGRfZGVsX2JhKHN0cnVjdCBpd2xfbWxkICptbGQsIGludCBxdWV1ZSxcXG4gXFx0cmVvcmRlcl9idWYgPSBcXHUwMDI2YmFfZGF0YS1cXHUwMDNlcmVvcmRlcl9idWZbcXVldWVdO1xcbiBcXG4gXFx0LyogcmVsZWFzZSBhbGwgZnJhbWVzIHRoYXQgYXJlIGluIHRoZSByZW9yZGVyIGJ1ZmZlciB0byB0aGUgc3RhY2sgKi9cXG4tXFx0aXdsX21sZF9yZW9yZGVyX3JlbGVhc2VfZnJhbWVzKG1sZCwgbGlua19zdGEtXFx1MDAzZXN0YSwgTlVMTCxcXG4rXFx0aXdsX21sZF9yZW9yZGVyX3JlbGVhc2VfZnJhbWVzKG1sZCwgbGlua19zdGEsIE5VTEwsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBiYV9kYXRhLCByZW9yZGVyX2J1ZixcXG4gXFx0XFx0XFx0XFx0ICAgICAgIGllZWU4MDIxMV9zbl9hZGQocmVvcmRlcl9idWYtXFx1MDAzZWhlYWRfc24sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdGJhX2RhdGEtXFx1MDAzZWJ1Zl9zaXplKSk7XFxuQEAgLTE5Myw3ICsxOTQsNyBAQCB2b2lkIGl3bF9tbGRfZGVsX2JhKHN0cnVjdCBpd2xfbWxkICptbGQsIGludCBxdWV1ZSxcXG4gICovXFxuIGVudW0gaXdsX21sZF9yZW9yZGVyX3Jlc3VsdFxcbiBpd2xfbWxkX3Jlb3JkZXIoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbi1cXHRcXHRpbnQgcXVldWUsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXFxuK1xcdFxcdGludCBxdWV1ZSwgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEsXFxuIFxcdFxcdHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpd2xfcnhfbXBkdV9kZXNjICpkZXNjKVxcbiB7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAodm9pZCAqKXNrYl9tYWNfaGVhZGVyKHNrYik7XFxuQEAgLTIyOCwxMiArMjI5LDEyIEBAIGl3bF9tbGRfcmVvcmRlcihzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxuIFxcdFxcdHJldHVybiBJV0xfTUxEX1BBU1NfU0tCO1xcbiBcXG4gXFx0Lyogbm8gc3RhIHlldCAqL1xcbi1cXHRpZiAoSVdMX0ZXX0NIRUNLKG1sZCwgIXN0YSxcXG4rXFx0aWYgKElXTF9GV19DSEVDSyhtbGQsICFsaW5rX3N0YSxcXG4gXFx0XFx0XFx0IFxcXCJHb3QgdmFsaWQgQkFJRCB3aXRob3V0IGEgdmFsaWQgc3RhdGlvbiBhc3NpZ25lZCAtICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgYmFpZCkpXFxuIFxcdFxcdHJldHVybiBJV0xfTUxEX1BBU1NfU0tCO1xcbiBcXG4tXFx0bWxkX3N0YSA9IGl3bF9tbGRfc3RhX2Zyb21fbWFjODAyMTEoc3RhKTtcXG4rXFx0bWxkX3N0YSA9IGl3bF9tbGRfc3RhX2Zyb21fbWFjODAyMTEobGlua19zdGEtXFx1MDAzZXN0YSk7XFxuIFxcbiBcXHQvKiBub3QgYSBkYXRhIHBhY2tldCAqL1xcbiBcXHRpZiAoIWllZWU4MDIxMV9pc19kYXRhX3FvcyhoZHItXFx1MDAzZWZyYW1lX2NvbnRyb2wpIHx8XFxuQEAgLTMyNCw3ICszMjUsNyBAQCBpd2xfbWxkX3Jlb3JkZXIoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbiBcXHQgKiB3aWxsIGJlIHJlbGVhc2VkIHdoZW4gdGhlIGZyYW1lIHJlbGVhc2Ugbm90aWZpY2F0aW9uIGFycml2ZXMuXFxuIFxcdCAqL1xcbiBcXHRpZiAoIWFtc2R1IHx8IGxhc3Rfc3ViZnJhbWUpXFxuLVxcdFxcdGl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhtbGQsIHN0YSwgbmFwaSwgYmFpZF9kYXRhLFxcbitcXHRcXHRpd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMobWxkLCBsaW5rX3N0YSwgbmFwaSwgYmFpZF9kYXRhLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICAgYnVmZmVyLCBuc3NuKTtcXG4gXFx0ZWxzZSBpZiAoYnVmZmVyLVxcdTAwM2VudW1fc3RvcmVkID09IDEpXFxuIFxcdFxcdGJ1ZmZlci1cXHUwMDNlaGVhZF9zbiA9IG5zc247XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FnZy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYWdnLmhcXG5pbmRleCA2NTFjODBkMWM3Y2RhLi5jNmNkNWZhMjE5YmVkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FnZy5oXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYWdnLmhcXG5AQCAtMSw2ICsxLDYgQEBcXG4gLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgQlNELTMtQ2xhdXNlICovXFxuIC8qXFxuLSAqIENvcHlyaWdodCAoQykgMjAyNCBJbnRlbCBDb3Jwb3JhdGlvblxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjQsIDIwMjYgSW50ZWwgQ29ycG9yYXRpb25cXG4gICovXFxuICNpZm5kZWYgX19pd2xfYWdnX2hfX1xcbiAjZGVmaW5lIF9faXdsX2FnZ19oX19cXG5AQCAtMTA2LDcgKzEwNiw3IEBAIGludCBpd2xfbWxkX2FtcGR1X3J4X3N0b3Aoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcXG4gXFxuIGVudW0gaXdsX21sZF9yZW9yZGVyX3Jlc3VsdFxcbiBpd2xfbWxkX3Jlb3JkZXIoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbi1cXHRcXHRpbnQgcXVldWUsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXFxuK1xcdFxcdGludCBxdWV1ZSwgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEsXFxuIFxcdFxcdHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpd2xfcnhfbXBkdV9kZXNjICpkZXNjKTtcXG4gXFxuIHZvaWQgaXdsX21sZF9oYW5kbGVfZnJhbWVfcmVsZWFzZV9ub3RpZihzdHJ1Y3QgaXdsX21sZCAqbWxkLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguY1xcbmluZGV4IDI2OTQzOWQ3ODlmNDYuLjAyYmRmNmNjYmNkYzkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmNcXG5AQCAtNDcsNyArNDcsOCBAQCBpd2xfbWxkX2ZpbGxfcGh5X2RhdGFfZnJvbV9tcGR1KHN0cnVjdCBpd2xfbWxkICptbGQsXFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgaW50IGl3bF9tbGRfY2hlY2tfcG4oc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tXFx0XFx0XFx0XFx0ICAgaW50IHF1ZXVlLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKVxcbitcXHRcXHRcXHRcXHQgICBpbnQgcXVldWUsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhKVxcbiB7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAodm9pZCAqKXNrYl9tYWNfaGVhZGVyKHNrYik7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpO1xcbkBAIC03MSwxMyArNzIsMTMgQEAgc3RhdGljIGlubGluZSBpbnQgaXdsX21sZF9jaGVja19wbihzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdC8qIGlmIHdlIGFyZSBoZXJlIC0gdGhpcyBmb3Igc3VyZSBpcyBlaXRoZXIgQ0NNUCBvciBHQ01QICovXFxuLVxcdGlmICghc3RhKSB7XFxuK1xcdGlmICghbGlua19zdGEpIHtcXG4gXFx0XFx0SVdMX0RFQlVHX0RST1AobWxkLFxcbiBcXHRcXHRcXHQgICAgICAgXFxcImV4cGVjdGVkIGh3LWRlY3J5cHRlZCB1bmljYXN0IGZyYW1lIGZvciBzdGF0aW9uXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIC0xO1xcbiBcXHR9XFxuIFxcbi1cXHRtbGRfc3RhID0gaXdsX21sZF9zdGFfZnJvbV9tYWM4MDIxMShzdGEpO1xcbitcXHRtbGRfc3RhID0gaXdsX21sZF9zdGFfZnJvbV9tYWM4MDIxMShsaW5rX3N0YS1cXHUwMDNlc3RhKTtcXG4gXFxuIFxcdGV4dGl2ID0gKHU4ICopaGRyICsgaWVlZTgwMjExX2hkcmxlbihoZHItXFx1MDAzZWZyYW1lX2NvbnRyb2wpO1xcbiBcXHRrZXlpZHggPSBleHRpdlszXSBcXHUwMDNlXFx1MDAzZSA2O1xcbkBAIC0xMTksMTcgKzEyMCwxNyBAQCBzdGF0aWMgaW5saW5lIGludCBpd2xfbWxkX2NoZWNrX3BuKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBza19idWZmICpza2IsXFxuIHZvaWQgaXdsX21sZF9wYXNzX3BhY2tldF90b19tYWM4MDIxMShzdHJ1Y3QgaXdsX21sZCAqbWxkLFxcbiBcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcXG4gXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcXVldWUsXFxuLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSlcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSlcXG4ge1xcbiBcXHRLVU5JVF9TVEFUSUNfU1RVQl9SRURJUkVDVChpd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExLFxcbi1cXHRcXHRcXHRcXHQgICBtbGQsIG5hcGksIHNrYiwgcXVldWUsIHN0YSk7XFxuK1xcdFxcdFxcdFxcdCAgIG1sZCwgbmFwaSwgc2tiLCBxdWV1ZSwgbGlua19zdGEpO1xcbiBcXG4tXFx0aWYgKHVubGlrZWx5KGl3bF9tbGRfY2hlY2tfcG4obWxkLCBza2IsIHF1ZXVlLCBzdGEpKSkge1xcbitcXHRpZiAodW5saWtlbHkoaXdsX21sZF9jaGVja19wbihtbGQsIHNrYiwgcXVldWUsIGxpbmtfc3RhKSkpIHtcXG4gXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4tXFx0aWVlZTgwMjExX3J4X25hcGkobWxkLVxcdTAwM2Vodywgc3RhLCBza2IsIG5hcGkpO1xcbitcXHRpZWVlODAyMTFfcnhfbmFwaShtbGQtXFx1MDAzZWh3LCBsaW5rX3N0YSwgc2tiLCBuYXBpKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0lGX0lXTFdJRklfS1VOSVQoaXdsX21sZF9wYXNzX3BhY2tldF90b19tYWM4MDIxMSk7XFxuIFxcbkBAIC0xNzI4LDcgKzE3MjksNyBAQCBzdGF0aWMgdm9pZCBpd2xfbWxkX3VwZGF0ZV9sYXN0X3J4X3RpbWVzdGFtcChzdHJ1Y3QgaXdsX21sZCAqbWxkLCB1OCBiYWlkKVxcbiAgKiBTZXRzICpkcm9wIHRvIHRydWUgaWYgdGhlIHBhY2tldCBzaG91bGQgYmUgZHJvcHBlZC5cXG4gICogUmV0dXJucyB0aGUgc3RhdGlvbiBpZiBmb3VuZCwgb3IgTlVMTCBvdGhlcndpc2UuXFxuICAqL1xcbi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9zdGEgKlxcbitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqXFxuIGl3bF9tbGRfcnhfd2l0aF9zdGEoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcixcXG4gXFx0XFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgaXdsX3J4X21wZHVfZGVzYyAqbXBkdV9kZXNjLFxcbkBAIC0xNzY0LDExICsxNzY1LDYgQEAgaXdsX21sZF9yeF93aXRoX3N0YShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLFxcbiBcXG4gXFx0cnhfc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XFxuIFxcbi1cXHRpZiAobGlua19zdGEgXFx1MDAyNlxcdTAwMjYgc3RhLVxcdTAwM2V2YWxpZF9saW5rcykge1xcbi1cXHRcXHRyeF9zdGF0dXMtXFx1MDAzZWxpbmtfdmFsaWQgPSB0cnVlO1xcbi1cXHRcXHRyeF9zdGF0dXMtXFx1MDAzZWxpbmtfaWQgPSBsaW5rX3N0YS1cXHUwMDNlbGlua19pZDtcXG4tXFx0fVxcbi1cXG4gXFx0LyogZmlsbCBjaGVja3N1bSAqL1xcbiBcXHRpZiAoaWVlZTgwMjExX2lzX2RhdGEoaGRyLVxcdTAwM2VmcmFtZV9jb250cm9sKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgcGt0LVxcdTAwM2VsZW5fbl9mbGFncyBcXHUwMDI2IGNwdV90b19sZTMyKEZIX1JTQ1NSX1JQQV9FTikpIHtcXG5AQCAtMTgwMywxMCArMTc5OSwxMCBAQCBpd2xfbWxkX3J4X3dpdGhfc3RhKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBxdWV1ZSk7XFxuIFxcdH1cXG4gXFxuLVxcdHJldHVybiBzdGE7XFxuK1xcdHJldHVybiBsaW5rX3N0YTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBpd2xfbWxkX3J4X21nbXRfcHJvdChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxcbitzdGF0aWMgaW50IGl3bF9tbGRfcnhfbWdtdF9wcm90KHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhLFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzLFxcbiBcXHRcXHRcXHRcXHR1MzIgbXBkdV9zdGF0dXMsXFxuQEAgLTE4MjAsNyArMTgxNiw2IEBAIHN0YXRpYyBpbnQgaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5O1xcbiBcXHRjb25zdCB1OCAqZnJhbWUgPSAodm9pZCAqKWhkcjtcXG4gXFx0Y29uc3QgdTggKm1taWU7XFxuLVxcdHU4IGxpbmtfaWQ7XFxuIFxcbiBcXHRpZiAoKG1wZHVfc3RhdHVzIFxcdTAwMjYgSVdMX1JYX01QRFVfU1RBVFVTX1NFQ19NQVNLKSA9PVxcbiBcXHQgICAgIElXTF9SWF9NUERVX1NUQVRVU19TRUNfTk9ORSlcXG5AQCAtMTgzNiwxMCArMTgzMSwxMCBAQCBzdGF0aWMgaW50IGl3bF9tbGRfcnhfbWdtdF9wcm90KHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXFxuIFxcdGlmICghaWVlZTgwMjExX2lzX2JlYWNvbihoZHItXFx1MDAzZWZyYW1lX2NvbnRyb2wpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGlmICghc3RhKVxcbitcXHRpZiAoIWxpbmtfc3RhKVxcbiBcXHRcXHRyZXR1cm4gLTE7XFxuIFxcbi1cXHRtbGRfc3RhID0gaXdsX21sZF9zdGFfZnJvbV9tYWM4MDIxMShzdGEpO1xcbitcXHRtbGRfc3RhID0gaXdsX21sZF9zdGFfZnJvbV9tYWM4MDIxMShsaW5rX3N0YS1cXHUwMDNlc3RhKTtcXG4gXFx0bWxkX3ZpZiA9IGl3bF9tbGRfdmlmX2Zyb21fbWFjODAyMTEobWxkX3N0YS1cXHUwMDNldmlmKTtcXG4gXFxuIFxcdC8qIGtleSBtaXNtYXRjaCAtIHdpbGwgYWxzbyByZXBvcnQgIU1JQ19PSyBidXQgd2Ugc2hvdWxkbid0IGNvdW50IGl0ICovXFxuQEAgLTE4NTMsOCArMTg0OCw3IEBAIHN0YXRpYyBpbnQgaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFxuLVxcdGxpbmtfaWQgPSByeF9zdGF0dXMtXFx1MDAzZWxpbmtfdmFsaWQgPyByeF9zdGF0dXMtXFx1MDAzZWxpbmtfaWQgOiAwO1xcbi1cXHRsaW5rID0gcmN1X2RlcmVmZXJlbmNlKG1sZF92aWYtXFx1MDAzZWxpbmtbbGlua19pZF0pO1xcbitcXHRsaW5rID0gcmN1X2RlcmVmZXJlbmNlKG1sZF92aWYtXFx1MDAzZWxpbmtbbGlua19zdGEtXFx1MDAzZWxpbmtfaWRdKTtcXG4gXFx0aWYgKFdBUk5fT05fT05DRSghbGluaykpXFxuIFxcdFxcdHJldHVybiAtMTtcXG4gXFxuQEAgLTE5MDUsNyArMTg5OSw3IEBAIHN0YXRpYyBpbnQgaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcXG4gfVxcbiBcXG4gc3RhdGljIGludCBpd2xfbWxkX3J4X2NyeXB0byhzdHJ1Y3QgaXdsX21sZCAqbWxkLFxcbi1cXHRcXHRcXHQgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXFxuK1xcdFxcdFxcdCAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEsXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcixcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzLFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCBpd2xfcnhfbXBkdV9kZXNjICpkZXNjLCBpbnQgcXVldWUsXFxuQEAgLTE5MTUsNyArMTkwOSw3IEBAIHN0YXRpYyBpbnQgaXdsX21sZF9yeF9jcnlwdG8oc3RydWN0IGl3bF9tbGQgKm1sZCxcXG4gXFxuIFxcdGlmICh1bmxpa2VseShpZWVlODAyMTFfaXNfbWdtdChoZHItXFx1MDAzZWZyYW1lX2NvbnRyb2wpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICAgIWllZWU4MDIxMV9oYXNfcHJvdGVjdGVkKGhkci1cXHUwMDNlZnJhbWVfY29udHJvbCkpKVxcbi1cXHRcXHRyZXR1cm4gaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RhLCBoZHIsIHJ4X3N0YXR1cywgc3RhdHVzLFxcbitcXHRcXHRyZXR1cm4gaXdsX21sZF9yeF9tZ210X3Byb3QobGlua19zdGEsIGhkciwgcnhfc3RhdHVzLCBzdGF0dXMsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBsZTE2X3RvX2NwdShkZXNjLVxcdTAwM2VtcGR1X2xlbikpO1xcbiBcXG4gXFx0aWYgKCFpZWVlODAyMTFfaGFzX3Byb3RlY3RlZChoZHItXFx1MDAzZWZyYW1lX2NvbnRyb2wpIHx8XFxuQEAgLTIwMjMsNyArMjAxNyw3IEBAIHZvaWQgaXdsX21sZF9yeF9tcGR1KHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcXG4gXFx0c3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IHJ4Yl9hZGRyKHJ4Yik7XFxuIFxcdHN0cnVjdCBpd2xfbWxkX3J4X3BoeV9kYXRhIHBoeV9kYXRhID0ge307XFxuIFxcdHN0cnVjdCBpd2xfcnhfbXBkdV9kZXNjICptcGR1X2Rlc2MgPSAodm9pZCAqKXBrdC1cXHUwMDNlZGF0YTtcXG4tXFx0c3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTtcXG4rXFx0c3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGE7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7XFxuIFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIFxcdHNpemVfdCBtcGR1X2Rlc2Nfc2l6ZSA9IHNpemVvZigqbXBkdV9kZXNjKTtcXG5AQCAtMjA4Niw3ICsyMDgwLDggQEAgdm9pZCBpd2xfbWxkX3J4X21wZHUoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbiBcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXG4tXFx0c3RhID0gaXdsX21sZF9yeF93aXRoX3N0YShtbGQsIGhkciwgc2tiLCBtcGR1X2Rlc2MsIHBrdCwgcXVldWUsIFxcdTAwMjZkcm9wKTtcXG4rXFx0bGlua19zdGEgPSBpd2xfbWxkX3J4X3dpdGhfc3RhKG1sZCwgaGRyLCBza2IsIG1wZHVfZGVzYywgcGt0LCBxdWV1ZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZkcm9wKTtcXG4gXFx0aWYgKGRyb3ApXFxuIFxcdFxcdGdvdG8gZHJvcDtcXG4gXFxuQEAgLTIxMjcsNyArMjEyMiw3IEBAIHZvaWQgaXdsX21sZF9yeF9tcGR1KHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcXG4gXFxuIFxcdGl3bF9tbGRfcnhfZmlsbF9zdGF0dXMobWxkLCBsaW5rX2lkLCBoZHIsIHNrYiwgXFx1MDAyNnBoeV9kYXRhKTtcXG4gXFxuLVxcdGlmIChpd2xfbWxkX3J4X2NyeXB0byhtbGQsIHN0YSwgaGRyLCByeF9zdGF0dXMsIG1wZHVfZGVzYywgcXVldWUsXFxuK1xcdGlmIChpd2xfbWxkX3J4X2NyeXB0byhtbGQsIGxpbmtfc3RhLCBoZHIsIHJ4X3N0YXR1cywgbXBkdV9kZXNjLCBxdWV1ZSxcXG4gXFx0XFx0XFx0ICAgICAgbGUzMl90b19jcHUocGt0LVxcdTAwM2VsZW5fbl9mbGFncyksIFxcdTAwMjZjcnlwdG9fbGVuKSlcXG4gXFx0XFx0Z290byBkcm9wO1xcbiBcXG5AQCAtMjE0MCw3ICsyMTM1LDggQEAgdm9pZCBpd2xfbWxkX3J4X21wZHUoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbiBcXHRpZiAoaXdsX21sZF90aW1lX3N5bmNfZnJhbWUobWxkLCBza2IsIGhkci1cXHUwMDNlYWRkcjIpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuLVxcdHJlb3JkZXJfcmVzID0gaXdsX21sZF9yZW9yZGVyKG1sZCwgbmFwaSwgcXVldWUsIHN0YSwgc2tiLCBtcGR1X2Rlc2MpO1xcbitcXHRyZW9yZGVyX3JlcyA9IGl3bF9tbGRfcmVvcmRlcihtbGQsIG5hcGksIHF1ZXVlLCBsaW5rX3N0YSwgc2tiLFxcbitcXHRcXHRcXHRcXHQgICAgICBtcGR1X2Rlc2MpO1xcbiBcXHRzd2l0Y2ggKHJlb3JkZXJfcmVzKSB7XFxuIFxcdGNhc2UgSVdMX01MRF9QQVNTX1NLQjpcXG4gXFx0XFx0YnJlYWs7XFxuQEAgLTIxNTMsNyArMjE0OSw3IEBAIHZvaWQgaXdsX21sZF9yeF9tcGR1KHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcXG4gXFx0XFx0Z290byBkcm9wO1xcbiBcXHR9XFxuIFxcbi1cXHRpd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKG1sZCwgbmFwaSwgc2tiLCBxdWV1ZSwgc3RhKTtcXG4rXFx0aXdsX21sZF9wYXNzX3BhY2tldF90b19tYWM4MDIxMShtbGQsIG5hcGksIHNrYiwgcXVldWUsIGxpbmtfc3RhKTtcXG4gXFxuIFxcdGdvdG8gb3V0O1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmhcXG5pbmRleCA1NzNiODljM2M5YzYxLi5iMDhjNWFkZTNkYjhmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmhcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5oXFxuQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBpd2xfbWxkX2hhbmRsZV9yc2Nfbm90aWYoc3RydWN0IGl3bF9tbGQgKm1sZCxcXG4gdm9pZCBpd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKHN0cnVjdCBpd2xfbWxkICptbGQsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbiBcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBxdWV1ZSxcXG4tXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKTtcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSk7XFxuIFxcbiB2b2lkIGl3bF9tbGRfaGFuZGxlX3BoeV9haXJfc25pZmZlcl9ub3RpZihzdHJ1Y3QgaXdsX21sZCAqbWxkLFxcbiBcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvdGVzdHMvYWdnLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC90ZXN0cy9hZ2cuY1xcbmluZGV4IDI5YjAyNDhjZWMzZGYuLmU5ZWZlMjk5NmYwNzEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvdGVzdHMvYWdnLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC90ZXN0cy9hZ2cuY1xcbkBAIC0yLDcgKzIsNyBAQFxcbiAvKlxcbiAgKiBLVW5pdCB0ZXN0cyBmb3IgY2hhbm5lbCBoZWxwZXIgZnVuY3Rpb25zXFxuICAqXFxuLSAqIENvcHlyaWdodCAoQykgMjAyNC0yMDI1IEludGVsIENvcnBvcmF0aW9uXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNC0yMDI2IEludGVsIENvcnBvcmF0aW9uXFxuICAqL1xcbiAjaW5jbHVkZSBcXHUwMDNja3VuaXQvdGVzdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNja3VuaXQvc3RhdGljX3N0dWIuaFxcdTAwM2VcXG5AQCAtNDQxLDcgKzQ0MSw3IEBAIHN0YXRpYyB2b2lkXFxuIGZha2VfaXdsX21sZF9wYXNzX3BhY2tldF90b19tYWM4MDIxMShzdHJ1Y3QgaXdsX21sZCAqbWxkLFxcbiBcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcXG4gXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcXVldWUsXFxuLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSlcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSlcXG4ge1xcbiBcXHRfX3NrYl9xdWV1ZV90YWlsKFxcdTAwMjZnX3JlbGVhc2VkX3NrYnMsIHNrYik7XFxuIFxcdGdfbnVtX3JlbGVhc2VkX3NrYnMrKztcXG5AQCAtNjMwLDcgKzYzMCw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfcmVvcmRlcl9idWZmZXIoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiBcXHRtcGR1X2Rlc2MgPSBzZXR1cF9tcGR1X2Rlc2MoKTtcXG4gXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG4tXFx0cmVvcmRlcl9yZXMgPSBpd2xfbWxkX3Jlb3JkZXIobWxkLCBOVUxMLCBRVUVVRSwgc3RhLCBza2IsIG1wZHVfZGVzYyk7XFxuK1xcdHJlb3JkZXJfcmVzID0gaXdsX21sZF9yZW9yZGVyKG1sZCwgTlVMTCwgUVVFVUUsIFxcdTAwMjZzdGEtXFx1MDAzZWRlZmxpbmssIHNrYixcXG4rXFx0XFx0XFx0XFx0ICAgICAgbXBkdV9kZXNjKTtcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcbiBcXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmVvcmRlcl9yZXMsIHBhcmFtLVxcdTAwM2VleHBlY3RlZC5yZW9yZGVyX3Jlcyk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeC5jXFxuaW5kZXggYWIxZWIyZWIwYzNjZC4uOGMxOTdhMDkwYzJiMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeC5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnguY1xcbkBAIC05MCw3ICs5MCw3IEBAIHN0YXRpYyB2b2lkIGl3bF9tdm1fcGFzc19wYWNrZXRfdG9fbWFjODAyMTEoc3RydWN0IGl3bF9tdm0gKm12bSxcXG4gXFx0XFx0XFx0XFx0ZnJhZ2xlbiwgcnhiLVxcdTAwM2V0cnVlc2l6ZSk7XFxuIFxcdH1cXG4gXFxuLVxcdGllZWU4MDIxMV9yeF9uYXBpKG12bS1cXHUwMDNlaHcsIHN0YSwgc2tiLCBuYXBpKTtcXG4rXFx0aWVlZTgwMjExX3J4X25hcGkobXZtLVxcdTAwM2Vodywgc3RhID8gXFx1MDAyNnN0YS1cXHUwMDNlZGVmbGluayA6IE5VTEwsIHNrYiwgbmFwaSk7XFxuIH1cXG4gXFxuIC8qXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4bXEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4bXEuY1xcbmluZGV4IDdmMGI0ZjVkYWEyMTQuLjhjNDAwOWQzYTAwY2EgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnhtcS5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnhtcS5jXFxuQEAgLTEsNiArMSw2IEBAXFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIEJTRC0zLUNsYXVzZVxcbiAvKlxcbi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCwgMjAxOC0yMDI1IEludGVsIENvcnBvcmF0aW9uXFxuKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE0LCAyMDE4LTIwMjYgSW50ZWwgQ29ycG9yYXRpb25cXG4gICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgSW50ZWwgTW9iaWxlIENvbW11bmljYXRpb25zIEdtYkhcXG4gICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgSW50ZWwgRGV1dHNjaGxhbmQgR21iSFxcbiAgKi9cXG5AQCAtMjQzLDcgKzI0Myw3IEBAIHN0YXRpYyB2b2lkIGl3bF9tdm1fcGFzc19wYWNrZXRfdG9fbWFjODAyMTEoc3RydWN0IGl3bF9tdm0gKm12bSxcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcbi1cXHRpZWVlODAyMTFfcnhfbmFwaShtdm0tXFx1MDAzZWh3LCBzdGEsIHNrYiwgbmFwaSk7XFxuK1xcdGllZWU4MDIxMV9yeF9uYXBpKG12bS1cXHUwMDNlaHcsIHN0YSA/IFxcdTAwMjZzdGEtXFx1MDAzZWRlZmxpbmsgOiBOVUxMLCBza2IsIG5hcGkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCBpd2xfbXZtX3VzZWRfYXZlcmFnZV9lbmVyZ3koc3RydWN0IGl3bF9tdm0gKm12bSxcXG5AQCAtMjUyOCw3ICsyNTI4LDcgQEAgdm9pZCBpd2xfbXZtX3J4X21vbml0b3Jfbm9fZGF0YShzdHJ1Y3QgaXdsX212bSAqbXZtLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxuIFxcdH1cXG4gXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG4tXFx0aWVlZTgwMjExX3J4X25hcGkobXZtLVxcdTAwM2Vodywgc3RhLCBza2IsIG5hcGkpO1xcbitcXHRpZWVlODAyMTFfcnhfbmFwaShtdm0tXFx1MDAzZWh3LCBzdGEgPyBcXHUwMDI2c3RhLVxcdTAwM2VkZWZsaW5rIDogTlVMTCwgc2tiLCBuYXBpKTtcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbWFjODAyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbWFjODAyMTEuY1xcbmluZGV4IDEzYzRlOGFiZTI4MTkuLmQ1YTQ3YWIyOWY1ODQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tYWM4MDIxMS5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tYWM4MDIxMS5jXFxuQEAgLTEyMzksNyArMTIzOSw3IEBAIEVYUE9SVF9TWU1CT0wobXQ3Nl9yeF9zaWduYWwpO1xcbiBzdGF0aWMgdm9pZFxcbiBtdDc2X3J4X2NvbnZlcnQoc3RydWN0IG10NzZfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdHN0cnVjdCBpZWVlODAyMTFfaHcgKipodyxcXG4tXFx0XFx0c3RydWN0IGllZWU4MDIxMV9zdGEgKipzdGEpXFxuK1xcdFxcdHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKipsaW5rX3N0YSlcXG4ge1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSBtdDc2X3NrYl9nZXRfaGRyKHNrYik7XFxuQEAgLTEyODYsMTEgKzEyODYsMTUgQEAgbXQ3Nl9yeF9jb252ZXJ0KHN0cnVjdCBtdDc2X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHQgICAgICAgc2l6ZW9mKG1zdGF0LmNoYWluX3NpZ25hbCkpO1xcbiBcXG4gXFx0aWYgKG1zdGF0LndjaWQpIHtcXG4tXFx0XFx0c3RhdHVzLVxcdTAwM2VsaW5rX3ZhbGlkID0gbXN0YXQud2NpZC1cXHUwMDNlbGlua192YWxpZDtcXG4tXFx0XFx0c3RhdHVzLVxcdTAwM2VsaW5rX2lkID0gbXN0YXQud2NpZC1cXHUwMDNlbGlua19pZDtcXG4rXFx0XFx0c3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSA9IHdjaWRfdG9fc3RhKG1zdGF0LndjaWQpO1xcbitcXG4rXFx0XFx0aWYgKG1zdGF0LndjaWQtXFx1MDAzZWxpbmtfdmFsaWQpXFxuK1xcdFxcdFxcdCpsaW5rX3N0YSA9XFxuK1xcdFxcdFxcdFxcdHJjdV9kZXJlZmVyZW5jZShzdGEtXFx1MDAzZWxpbmtbbXN0YXQud2NpZC1cXHUwMDNlbGlua19pZF0pO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdCpsaW5rX3N0YSA9IFxcdTAwMjZzdGEtXFx1MDAzZWRlZmxpbms7XFxuIFxcdH1cXG4gXFxuLVxcdCpzdGEgPSB3Y2lkX3RvX3N0YShtc3RhdC53Y2lkKTtcXG4gXFx0Kmh3ID0gbXQ3Nl9waHlfaHcoZGV2LCBtc3RhdC5waHlfaWR4KTtcXG4gfVxcbiBcXG5AQCAtMTUxNCw3ICsxNTE4LDcgQEAgbXQ3Nl9jaGVja19zdGEoc3RydWN0IG10NzZfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuIHZvaWQgbXQ3Nl9yeF9jb21wbGV0ZShzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqZnJhbWVzLFxcbiBcXHRcXHQgICAgICBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXFxuIHtcXG4tXFx0c3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTtcXG4rXFx0c3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGE7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3O1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqdG1wO1xcbiBcXHRMSVNUX0hFQUQobGlzdCk7XFxuQEAgLTE1MjUsOCArMTUyOSw4IEBAIHZvaWQgbXQ3Nl9yeF9jb21wbGV0ZShzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqZnJhbWVzLFxcbiBcXG4gXFx0XFx0bXQ3Nl9jaGVja19jY21wX3BuKHNrYik7XFxuIFxcdFxcdHNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZnJhZ19saXN0ID0gTlVMTDtcXG4tXFx0XFx0bXQ3Nl9yeF9jb252ZXJ0KGRldiwgc2tiLCBcXHUwMDI2aHcsIFxcdTAwMjZzdGEpO1xcbi1cXHRcXHRpZWVlODAyMTFfcnhfbGlzdChodywgc3RhLCBza2IsIFxcdTAwMjZsaXN0KTtcXG4rXFx0XFx0bXQ3Nl9yeF9jb252ZXJ0KGRldiwgc2tiLCBcXHUwMDI2aHcsIFxcdTAwMjZsaW5rX3N0YSk7XFxuK1xcdFxcdGllZWU4MDIxMV9yeF9saXN0KGh3LCBsaW5rX3N0YSwgc2tiLCBcXHUwMDI2bGlzdCk7XFxuIFxcbiBcXHRcXHQvKiBzdWJzZXF1ZW50IGFtc2R1IGZyYW1lcyAqL1xcbiBcXHRcXHR3aGlsZSAobnNrYikge1xcbkBAIC0xNTM0LDggKzE1MzgsOCBAQCB2b2lkIG10NzZfcnhfY29tcGxldGUoc3RydWN0IG10NzZfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmX2hlYWQgKmZyYW1lcyxcXG4gXFx0XFx0XFx0bnNrYiA9IG5za2ItXFx1MDAzZW5leHQ7XFxuIFxcdFxcdFxcdHNrYi1cXHUwMDNlbmV4dCA9IE5VTEw7XFxuIFxcbi1cXHRcXHRcXHRtdDc2X3J4X2NvbnZlcnQoZGV2LCBza2IsIFxcdTAwMjZodywgXFx1MDAyNnN0YSk7XFxuLVxcdFxcdFxcdGllZWU4MDIxMV9yeF9saXN0KGh3LCBzdGEsIHNrYiwgXFx1MDAyNmxpc3QpO1xcbitcXHRcXHRcXHRtdDc2X3J4X2NvbnZlcnQoZGV2LCBza2IsIFxcdTAwMjZodywgXFx1MDAyNmxpbmtfc3RhKTtcXG4rXFx0XFx0XFx0aWVlZTgwMjExX3J4X2xpc3QoaHcsIGxpbmtfc3RhLCBza2IsIFxcdTAwMjZsaXN0KTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZXJ4X2xvY2spO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2NvcmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY29yZS5jXFxuaW5kZXggMGYwZTQ2Y2I0MjYwNS4uZGY5NmQwYTk2Nzg3MyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2NvcmUuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY29yZS5jXFxuQEAgLTMwMzYsNyArMzAzNiw2IEBAIHN0YXRpYyB2b2lkIHJ0dzg5X3ZpZl9yeF9zdGF0c19pdGVyKHZvaWQgKmRhdGEsIHU4ICptYWMsXFxuIFxcdHN0cnVjdCBydHc4OV92aWYgKnJ0d3ZpZiA9IHZpZl90b19ydHd2aWYodmlmKTtcXG4gXFx0c3RydWN0IHJ0dzg5X3J4X2Rlc2NfaW5mbyAqZGVzY19pbmZvID0gaXRlcl9kYXRhLVxcdTAwM2VkZXNjX2luZm87XFxuIFxcdHN0cnVjdCBza19idWZmICpza2IgPSBpdGVyX2RhdGEtXFx1MDAzZXNrYjtcXG4tXFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpO1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLVxcdTAwM2VkYXRhO1xcbiBcXHRzdHJ1Y3QgcnR3ODlfcnhfcGh5X3BwZHUgKnBoeV9wcGR1ID0gaXRlcl9kYXRhLVxcdTAwM2VwaHlfcHBkdTtcXG4gXFx0Ym9vbCBpc19tbGQgPSBpZWVlODAyMTFfdmlmX2lzX21sZCh2aWYpO1xcbkBAIC0zMDczLDExICszMDcyLDYgQEAgc3RhdGljIHZvaWQgcnR3ODlfdmlmX3J4X3N0YXRzX2l0ZXIodm9pZCAqZGF0YSwgdTggKm1hYyxcXG4gXFx0aWYgKCFldGhlcl9hZGRyX2VxdWFsKHRhcmdldF9ic3NpZCwgYnNzaWQpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuLVxcdGlmIChpc19tbGQpIHtcXG4tXFx0XFx0cnhfc3RhdHVzLVxcdTAwM2VsaW5rX3ZhbGlkID0gdHJ1ZTtcXG4tXFx0XFx0cnhfc3RhdHVzLVxcdTAwM2VsaW5rX2lkID0gcnR3dmlmX2xpbmstXFx1MDAzZWxpbmtfaWQ7XFxuLVxcdH1cXG4tXFxuIFxcdGJiID0gcnR3ODlfZ2V0X2JiX2N0eChydHdkZXYsIHJ0d3ZpZl9saW5rLVxcdTAwM2VwaHlfaWR4KTtcXG4gXFx0cGt0X3N0YXQgPSBcXHUwMDI2YmItXFx1MDAzZWN1cl9wa3Rfc3RhdDtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcXG5pbmRleCAwMmI2ZDgxY2NjZDExLi5hMGQ1MTljZDljNGZhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcXG5AQCAtMTg4MCw5ICsxODgwLDYgQEAgc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fcngoc3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEsXFxuIFxcdFxcdFxcdFxcdHNwLVxcdTAwM2VhY3RpdmVfbGlua3NfcnggXFx1MDAyNj0gfkJJVChsaW5rX2lkKTtcXG4gXFx0XFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRcXHRzcC1cXHUwMDNlYWN0aXZlX2xpbmtzX3J4IHw9IEJJVChsaW5rX2lkKTtcXG4tXFxuLVxcdFxcdFxcdHJ4X3N0YXR1cy1cXHUwMDNlbGlua192YWxpZCA9IHRydWU7XFxuLVxcdFxcdFxcdHJ4X3N0YXR1cy1cXHUwMDNlbGlua19pZCA9IGxpbmtfaWQ7XFxuIFxcdFxcdH1cXG4gXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaCBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmhcXG5pbmRleCBkY2JiMGU1NWMzMmVjLi41OWJkMTUzMjMyMmQ3IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L2NmZzgwMjExLmhcXG4rKysgYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oXFxuQEAgLTQwMDksNiArNDAwOSw3IEBAIHN0cnVjdCBjZmc4MDIxMV91cGRhdGVfZnRfaWVzX3BhcmFtcyB7XFxuICAqIEBsaW5rX2lkOiBmb3IgTUxPLCB0aGUgbGluayBJRCB0byB0cmFuc21pdCBvbiwgLTEgaWYgbm90IGdpdmVuOyBub3RlXFxuICAqXFx0dGhhdCB0aGUgbGluayBJRCBpc24ndCB2YWxpZGF0ZWQgKG11Y2gpLCBpdCdzIGluIHJhbmdlIGJ1dCB0aGVcXG4gICpcXHRsaW5rIG1pZ2h0IG5vdCBleGlzdCAob3IgYmUgdXNlZCBieSB0aGUgcmVjZWl2ZXIgU1RBKVxcbisgKiBAbm9fc3RhOiBzZXQgaWYgdGhlIGZyYW1lIHNob3VsZCBub3QgYmUgdHJhbnNtaXR0ZWQgdXNpbmcgYW4gZXhpc3RpbmcgU1RBXFxuICAqL1xcbiBzdHJ1Y3QgY2ZnODAyMTFfbWdtdF90eF9wYXJhbXMge1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47XFxuQEAgLTQwMjEsNiArNDAyMiw3IEBAIHN0cnVjdCBjZmc4MDIxMV9tZ210X3R4X3BhcmFtcyB7XFxuIFxcdGludCBuX2NzYV9vZmZzZXRzO1xcbiBcXHRjb25zdCB1MTYgKmNzYV9vZmZzZXRzO1xcbiBcXHRpbnQgbGlua19pZDtcXG4rXFx0Ym9vbCBub19zdGE7XFxuIH07XFxuIFxcbiAvKipcXG5AQCAtOTQ5OSw2ICs5NTAxLDcgQEAgdm9pZCBjZmc4MDIxMV9jb25uX2ZhaWxlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqbWFjX2FkZHIsXFxuICAqIEBmbGFnczogZmxhZ3MsIGFzIGRlZmluZWQgaW4gXFx1MDAyNmVudW0gbmw4MDIxMV9yeG1nbXRfZmxhZ3NcXG4gICogQHJ4X3RzdGFtcDogSGFyZHdhcmUgdGltZXN0YW1wIG9mIGZyYW1lIFJYIGluIG5hbm9zZWNvbmRzXFxuICAqIEBhY2tfdHN0YW1wOiBIYXJkd2FyZSB0aW1lc3RhbXAgb2YgYWNrIFRYIGluIG5hbm9zZWNvbmRzXFxuKyAqIEBub19zdGE6IHNldCBpZiBubyBzdGF0aW9uIGlzIGtub3duIGZvciB0aGUgZnJhbWUgKHJlbGV2YW50IGZvciBNTEQpXFxuICAqL1xcbiBzdHJ1Y3QgY2ZnODAyMTFfcnhfaW5mbyB7XFxuIFxcdGludCBmcmVxO1xcbkBAIC05NTEwLDYgKzk1MTMsNyBAQCBzdHJ1Y3QgY2ZnODAyMTFfcnhfaW5mbyB7XFxuIFxcdHUzMiBmbGFncztcXG4gXFx0dTY0IHJ4X3RzdGFtcDtcXG4gXFx0dTY0IGFja190c3RhbXA7XFxuK1xcdGJvb2wgbm9fc3RhO1xcbiB9O1xcbiBcXG4gLyoqXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmggYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXFxuaW5kZXggOWQxZmFjNmU4MDgyOS4uN2FhZTcyOGU5NmQ4NCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXFxuKysrIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaFxcbkBAIC0xNzcwLDEwICsxNzcwLDkgQEAgZW51bSBtYWM4MDIxMV9yeF9lbmNvZGluZyB7XFxuICAqIEBhbXBkdV9yZWZlcmVuY2U6IEEtTVBEVSByZWZlcmVuY2UgbnVtYmVyLCBtdXN0IGJlIGEgZGlmZmVyZW50IHZhbHVlIGZvclxcbiAgKlxcdGVhY2ggQS1NUERVIGJ1dCB0aGUgc2FtZSBmb3IgZWFjaCBzdWJmcmFtZSB3aXRoaW4gb25lIEEtTVBEVVxcbiAgKiBAemVyb19sZW5ndGhfcHNkdV90eXBlOiByYWRpb3RhcCB0eXBlIG9mIHRoZSAwLWxlbmd0aCBQU0RVXFxuLSAqIEBsaW5rX3ZhbGlkOiBpZiB0aGUgbGluayB3aGljaCBpcyBpZGVudGlmaWVkIGJ5IEBsaW5rX2lkIGlzIHZhbGlkLiBUaGlzIGZsYWdcXG4tICpcXHRpcyBzZXQgb25seSB3aGVuIGNvbm5lY3Rpb24gaXMgTUxPLlxcbi0gKiBAbGlua19pZDogaWQgb2YgdGhlIGxpbmsgdXNlZCB0byByZWNlaXZlIHRoZSBwYWNrZXQuIFRoaXMgaXMgdXNlZCBhbG9uZyB3aXRoXFxuLSAqXFx0QGxpbmtfdmFsaWQuXFxuKyAqIEBsaW5rX2lkOiBpZCBvZiB0aGUgbGluayB1c2VkIHRvIHJlY2VpdmUgdGhlIHBhY2tldC4gU2V0IGFuZCB1c2VkIGJ5XFxuKyAqXFx0bWFjODAyMTEgaW50ZXJuYWxseSwgaXQgdXNlcyBAZnJlcSBzZXQgYnkgdGhlIGRyaXZlciB0byBpZGVudGlmeSB0aGVcXG4rICpcXHRjb3JyZWN0IGxpbmsgcGVyIHZpZi5cXG4gICovXFxuIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzIHtcXG4gXFx0dTY0IG1hY3RpbWU7XFxuQEAgLTE4MTMsNyArMTgxMiw3IEBAIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzIHtcXG4gXFx0dTggY2hhaW5zO1xcbiBcXHRzOCBjaGFpbl9zaWduYWxbSUVFRTgwMjExX01BWF9DSEFJTlNdO1xcbiBcXHR1OCB6ZXJvX2xlbmd0aF9wc2R1X3R5cGU7XFxuLVxcdHU4IGxpbmtfdmFsaWQ6MSwgbGlua19pZDo0O1xcbitcXHR1OCBsaW5rX2lkOjQ7XFxuIH07XFxuIFxcbiBzdGF0aWNfYXNzZXJ0KHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cykgXFx1MDAzYz0gc2l6ZW9mX2ZpZWxkKHN0cnVjdCBza19idWZmLCBjYikpO1xcbkBAIC01Mzg5LDE0ICs1Mzg4LDE4IEBAIHZvaWQgaWVlZTgwMjExX3Jlc3RhcnRfaHcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpO1xcbiAgKiBtaXhlZCBmb3IgYSBzaW5nbGUgaGFyZHdhcmUuIE11c3Qgbm90IHJ1biBjb25jdXJyZW50bHkgd2l0aFxcbiAgKiBpZWVlODAyMTFfdHhfc3RhdHVzX3NrYigpIG9yIGllZWU4MDIxMV90eF9zdGF0dXNfbmkoKS5cXG4gICpcXG4rICogRm9yIGRhdGEgZnJhbWVzLCB3aGVuIGhhcmR3YXJlIGhhcyBkb25lIGFkZHJlc3MgdHJhbnNsYXRpb24sIGEgbGluayBzdGF0aW9uXFxuKyAqIGhhcyB0byBiZSBwcm92aWRlZCBhbmQgdGhlIGZyZXF1ZW5jeSBpbmZvcm1hdGlvbiBtYXkgYmUgc2tpcHBlZC5cXG4rICpcXG4gICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIEJIcyBkaXNhYmxlZCBhbmQgUkNVIHJlYWQgbG9ja1xcbiAgKlxcbiAgKiBAaHc6IHRoZSBoYXJkd2FyZSB0aGlzIGZyYW1lIGNhbWUgaW4gb25cXG4tICogQHN0YTogdGhlIHN0YXRpb24gdGhlIGZyYW1lIHdhcyByZWNlaXZlZCBmcm9tLCBvciAlTlVMTFxcbisgKiBAbGlua19zdGE6IHRoZSBsaW5rIHN0YXRpb24gdGhlIGRhdGEgZnJhbWUgd2FzIHJlY2VpdmVkIGZyb20sIG9yICVOVUxMXFxuICAqIEBza2I6IHRoZSBidWZmZXIgdG8gcmVjZWl2ZSwgb3duZWQgYnkgbWFjODAyMTEgYWZ0ZXIgdGhpcyBjYWxsXFxuICAqIEBsaXN0OiB0aGUgZGVzdGluYXRpb24gbGlzdFxcbiAgKi9cXG4tdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcXG4rdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4rXFx0XFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhLFxcbiBcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCk7XFxuIFxcbiAvKipcXG5AQCAtNTQxNCwxNCArNTQxNywxOCBAQCB2b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxcbiAgKiBtaXhlZCBmb3IgYSBzaW5nbGUgaGFyZHdhcmUuIE11c3Qgbm90IHJ1biBjb25jdXJyZW50bHkgd2l0aFxcbiAgKiBpZWVlODAyMTFfdHhfc3RhdHVzX3NrYigpIG9yIGllZWU4MDIxMV90eF9zdGF0dXNfbmkoKS5cXG4gICpcXG4rICogRm9yIGRhdGEgZnJhbWVzLCB3aGVuIGhhcmR3YXJlIGhhcyBkb25lIGFkZHJlc3MgdHJhbnNsYXRpb24sIGEgbGluayBzdGF0aW9uXFxuKyAqIGhhcyB0byBiZSBwcm92aWRlZCBhbmQgdGhlIGZyZXF1ZW5jeSBpbmZvcm1hdGlvbiBtYXkgYmUgc2tpcHBlZC5cXG4rICpcXG4gICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIEJIcyBkaXNhYmxlZC5cXG4gICpcXG4gICogQGh3OiB0aGUgaGFyZHdhcmUgdGhpcyBmcmFtZSBjYW1lIGluIG9uXFxuLSAqIEBzdGE6IHRoZSBzdGF0aW9uIHRoZSBmcmFtZSB3YXMgcmVjZWl2ZWQgZnJvbSwgb3IgJU5VTExcXG4rICogQGxpbmtfc3RhOiB0aGUgbGluayBzdGF0aW9uIHRoZSBkYXRhIGZyYW1lIHdhcyByZWNlaXZlZCBmcm9tLCBvciAlTlVMTFxcbiAgKiBAc2tiOiB0aGUgYnVmZmVyIHRvIHJlY2VpdmUsIG93bmVkIGJ5IG1hYzgwMjExIGFmdGVyIHRoaXMgY2FsbFxcbiAgKiBAbmFwaTogdGhlIE5BUEkgY29udGV4dFxcbiAgKi9cXG4tdm9pZCBpZWVlODAyMTFfcnhfbmFwaShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcXG4rdm9pZCBpZWVlODAyMTFfcnhfbmFwaShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4rXFx0XFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhLFxcbiBcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKTtcXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaFxcbmluZGV4IDAyMDM4N2Q3NjQxMjIuLjQ2NTNmOGYyNmVlNzAgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaFxcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmhcXG5AQCAtMzE4NSw2ICszMTg1LDExIEBAIGVudW0gbmw4MDIxMV9jb21tYW5kcyB7XFxuICAqXFx0VGhlIGFnZ3JlZ2F0ZWQgbWVzc2FnZSBhbHdheXMgcHJlY2VkZXMgdGhlIHBlci1saW5rIG1lc3NhZ2VzIGZvciB0aGVcXG4gICpcXHRzYW1lIHN0YXRpb24gd2l0aGluIGEgZHVtcCBzZXF1ZW5jZS5cXG4gICpcXG4rICogQE5MODAyMTFfQVRUUl9GUkFNRV9DTURfTk9fU1RBOiBWYWxpZCBmb3IgTkw4MDIxMV9DTURfRlJBTUUgdG8gZGVub3RlIHRoYXRcXG4rICpcXHR0aGUga2VybmVsIGhhZCBubyBzdGF0aW9uIGZvciBhIHJlY2VpdmVkIGZyYW1lIG9yIHNob3VsZCBub3QgdXNlIGFcXG4rICpcXHRrbm93biBzdGF0aW9uIHRvIHRyYW5zbWl0IGEgZnJhbWUuIFRoaXMgaXMgcmVsZXZhbnQgdG8ga25vdyB3aGV0aGVyXFxuKyAqXFx0TUxEIGFkZHJlc3MgdHJhbnNsYXRpb24gaGFwcGVuZWQgb3IgdG8gZGlzYWJsZSBpdCB3aGVuIHNlbmRpbmcgYSBmcmFtZS5cXG4rICpcXG4gICogQE5VTV9OTDgwMjExX0FUVFI6IHRvdGFsIG51bWJlciBvZiBubDgwMjExX2F0dHJzIGF2YWlsYWJsZVxcbiAgKiBATkw4MDIxMV9BVFRSX01BWDogaGlnaGVzdCBhdHRyaWJ1dGUgbnVtYmVyIGN1cnJlbnRseSBkZWZpbmVkXFxuICAqIEBfX05MODAyMTFfQVRUUl9BRlRFUl9MQVNUOiBpbnRlcm5hbCB1c2VcXG5AQCAtMzc4NSw2ICszNzkwLDggQEAgZW51bSBubDgwMjExX2F0dHJzIHtcXG4gXFxuIFxcdE5MODAyMTFfQVRUUl9TVEFfRFVNUF9MSU5LX1NUQVRTLFxcbiBcXG4rXFx0Tkw4MDIxMV9BVFRSX0ZSQU1FX0NNRF9OT19TVEEsXFxuK1xcbiBcXHQvKiBhZGQgYXR0cmlidXRlcyBoZXJlLCB1cGRhdGUgdGhlIHBvbGljeSBpbiBubDgwMjExLmMgKi9cXG4gXFxuIFxcdF9fTkw4MDIxMV9BVFRSX0FGVEVSX0xBU1QsXFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9hZ2ctdHguYyBiL25ldC9tYWM4MDIxMS9hZ2ctdHguY1xcbmluZGV4IDQ4MzNiNDY3NzBiNjIuLmRkOGExMWVmNmU1MmIgMTAwNjQ0XFxuLS0tIGEvbmV0L21hYzgwMjExL2FnZy10eC5jXFxuKysrIGIvbmV0L21hYzgwMjExL2FnZy10eC5jXFxuQEAgLTk4LDcgKzk4LDcgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX3NlbmRfYWRkYmFfcmVxdWVzdChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTE2IHRpZCxcXG4gXFx0aWYgKHN0YS1cXHUwMDNlc3RhLmRlZmxpbmsuaGVfY2FwLmhhc19oZSlcXG4gXFx0XFx0aWVlZTgwMjExX2FkZF9hZGRiYWV4dChza2IsIDAsIGFnZ19zaXplKTtcXG4gXFxuLVxcdGllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIHRpZCwgLTEpO1xcbitcXHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCBOVUxMLCB0aWQsIC0xKTtcXG4gfVxcbiBcXG4gdm9pZCBpZWVlODAyMTFfc2VuZF9iYXIoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgdTggKnJhLCB1MTYgdGlkLCB1MTYgc3NuKVxcbkBAIC0xMjcsNyArMTI3LDcgQEAgdm9pZCBpZWVlODAyMTFfc2VuZF9iYXIoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgdTggKnJhLCB1MTYgdGlkLCB1MTYgc3NuKVxcbiBcXG4gXFx0SUVFRTgwMjExX1NLQl9DQihza2IpLVxcdTAwM2VmbGFncyB8PSBJRUVFODAyMTFfVFhfSU5URkxfRE9OVF9FTkNSWVBUIHxcXG4gXFx0XFx0XFx0XFx0XFx0SUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTO1xcbi1cXHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCB0aWQsIC0xKTtcXG4rXFx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgTlVMTCwgdGlkLCAtMSk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc2VuZF9iYXIpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2FwLmMgYi9uZXQvbWFjODAyMTEvYXAuY1xcbmluZGV4IGU3YWM5OWM1YTIyZWIuLmZlMjU1ODkxYzM1ZjAgMTAwNjQ0XFxuLS0tIGEvbmV0L21hYzgwMjExL2FwLmNcXG4rKysgYi9uZXQvbWFjODAyMTEvYXAuY1xcbkBAIC04Miw5ICs4Miw2IEBAIGllZWU4MDIxMV9yeF9lbWxfb3BfbW9kZV9ub3RpZihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0aWYgKCFpZnRfZXh0X2NhcGEpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGlmICghc3RhdHVzLVxcdTAwM2VsaW5rX3ZhbGlkKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbiBcXHRzdGEgPSBzdGFfaW5mb19nZXRfYnNzKHNkYXRhLCBtZ210LVxcdTAwM2VzYSk7XFxuIFxcdGlmICghc3RhKVxcbiBcXHRcXHRyZXR1cm47XFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9odC5jIGIvbmV0L21hYzgwMjExL2h0LmNcXG5pbmRleCBlMWUxYjdmODJmM2ZlLi5jNWMyMTEzZmE0Zjc5IDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS9odC5jXFxuKysrIGIvbmV0L21hYzgwMjExL2h0LmNcXG5AQCAtNTQ1LDcgKzU0NSw3IEBAIGludCBpZWVlODAyMTFfc2VuZF9zbXBzX2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0aW5mby1cXHUwMDNlc3RhdHVzX2RhdGEgPSBJRUVFODAyMTFfU1RBVFVTX1RZUEVfU01QUyB8XFxuIFxcdFxcdFxcdCAgICB1MTZfZW5jb2RlX2JpdHMoc3RhdHVzX2xpbmtfaWQgXFx1MDAzY1xcdTAwM2MgMiB8IHNtcHMsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBJRUVFODAyMTFfU1RBVFVTX1NVQkRBVEFfTUFTSyk7XFxuLVxcdGllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIDcsIGxpbmtfaWQpO1xcbitcXHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCBOVUxMLCA3LCBsaW5rX2lkKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcXG5pbmRleCBhMWVmODhmZTg0NmRkLi4zOGQ4NmIwYTEwZjVhIDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXFxuKysrIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcXG5AQCAtMjQ2Niw3ICsyNDY2LDggQEAgdm9pZCBpZWVlODAyMTFfeG1pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0XFx0ICAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4gXFxuIHZvaWQgX19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi1cXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRpZCwgaW50IGxpbmtfaWQsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcXG4rXFx0XFx0XFx0XFx0IGludCB0aWQsIGludCBsaW5rX2lkLFxcbiBcXHRcXHRcXHRcXHQgZW51bSBubDgwMjExX2JhbmQgYmFuZCk7XFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgaWVlZTgwMjExX3JlcXVpcmVfZW5jcnlwdGVkX2Fzc29jKF9fbGUxNiBmYyxcXG5AQCAtMjQ4NiwxOCArMjQ4NywyMCBAQCBpZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbiBcXHRcXHRcXHQgIGVudW0gbmw4MDIxMV9iYW5kIGJhbmQpXFxuIHtcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc2RhdGEsIHNrYiwgdGlkLCAtMSwgYmFuZCk7XFxuK1xcdF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzZGF0YSwgc2tiLCBFUlJfUFRSKC1FTk9FTlQpLFxcbitcXHRcXHRcXHRcXHQgICAgdGlkLCAtMSwgYmFuZCk7XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiB9XFxuIFxcbiB2b2lkIGllZWU4MDIxMV90eF9za2JfdGlkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi1cXHRcXHRcXHQgIHN0cnVjdCBza19idWZmICpza2IsIGludCB0aWQsIGludCBsaW5rX2lkKTtcXG4rXFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcXG4rXFx0XFx0XFx0ICBpbnQgdGlkLCBpbnQgbGlua19pZCk7XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX3R4X3NrYihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4gXFx0LyogU2VuZCBhbGwgaW50ZXJuYWwgbWdtdCBmcmFtZXMgb24gVk8uIEFjY29yZGluZ2x5IHNldCBUSUQgdG8gNy4gKi9cXG4tXFx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgNywgLTEpO1xcbitcXHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCBOVUxMLCA3LCAtMSk7XFxuIH1cXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWZhY2UuYyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jXFxuaW5kZXggNDM0NjBhNzA1YTZiZC4uYTBiMjE0ZGJiOGFmOCAxMDA2NDRcXG4tLS0gYS9uZXQvbWFjODAyMTEvaWZhY2UuY1xcbisrKyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jXFxuQEAgLTE2NzMsMTEgKzE2NzMsOCBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfaWZhY2VfcHJvY2Vzc19za2Ioc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0XFx0XFx0c3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XFxuLVxcdFxcdFxcdGlmICghc3RhdHVzLVxcdTAwM2VsaW5rX3ZhbGlkKVxcbi1cXHRcXHRcXHRcXHRsaW5rX3N0YSA9IFxcdTAwMjZzdGEtXFx1MDAzZWRlZmxpbms7XFxuLVxcdFxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0XFx0bGlua19zdGEgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHN0YS1cXHUwMDNlbGlua1tzdGF0dXMtXFx1MDAzZWxpbmtfaWRdLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNmxvY2FsLVxcdTAwM2Vody53aXBoeS1cXHUwMDNlbXR4KSk7XFxuK1xcdFxcdFxcdGxpbmtfc3RhID0gd2lwaHlfZGVyZWZlcmVuY2UobG9jYWwtXFx1MDAzZWh3LndpcGh5LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHN0YS1cXHUwMDNlbGlua1tzdGF0dXMtXFx1MDAzZWxpbmtfaWRdKTtcXG4gXFx0XFx0XFx0aWYgKGxpbmtfc3RhKVxcbiBcXHRcXHRcXHRcXHRpZWVlODAyMTFfaHRfaGFuZGxlX2NoYW53aWR0aF9ub3RpZihsb2NhbCwgc2RhdGEsIHN0YSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGxpbmtfc3RhLCBjaGFud2lkdGgsXFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tbG1lLmMgYi9uZXQvbWFjODAyMTEvbWxtZS5jXFxuaW5kZXggZjUxMTY3ZjBmYzQ2ZC4uMzYxNzc1ZmI5MzFlYyAxMDA2NDRcXG4tLS0gYS9uZXQvbWFjODAyMTEvbWxtZS5jXFxuKysrIGIvbmV0L21hYzgwMjExL21sbWUuY1xcbkBAIC0xMTgzMSwxMiArMTE4MzEsMTAgQEAgdm9pZCBpZWVlODAyMTFfc3RhX3J4X3F1ZXVlZF9mcmFtZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0cnhfc3RhdHVzID0gKHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICopIHNrYi1cXHUwMDNlY2I7XFxuIFxcdGZjID0gbGUxNl90b19jcHUobWdtdC1cXHUwMDNlZnJhbWVfY29udHJvbCk7XFxuIFxcbi1cXHRpZiAocnhfc3RhdHVzLVxcdTAwM2VsaW5rX3ZhbGlkKSB7XFxuLVxcdFxcdGxpbmsgPSBzZGF0YV9kZXJlZmVyZW5jZShzZGF0YS1cXHUwMDNlbGlua1tyeF9zdGF0dXMtXFx1MDAzZWxpbmtfaWRdLFxcbi1cXHRcXHRcXHRcXHRcXHQgc2RhdGEpO1xcbi1cXHRcXHRpZiAoIWxpbmspXFxuLVxcdFxcdFxcdHJldHVybjtcXG4tXFx0fVxcbitcXHRsaW5rID0gc2RhdGFfZGVyZWZlcmVuY2Uoc2RhdGEtXFx1MDAzZWxpbmtbcnhfc3RhdHVzLVxcdTAwM2VsaW5rX2lkXSxcXG4rXFx0XFx0XFx0XFx0IHNkYXRhKTtcXG4rXFx0aWYgKCFsaW5rKVxcbitcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRzd2l0Y2ggKGZjIFxcdTAwMjYgSUVFRTgwMjExX0ZDVExfU1RZUEUpIHtcXG4gXFx0Y2FzZSBJRUVFODAyMTFfU1RZUEVfQkVBQ09OOlxcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jIGIvbmV0L21hYzgwMjExL29mZmNoYW5uZWwuY1xcbmluZGV4IDJiY2ViNzM3MTdjNjYuLjM4MzRmNTk2YWYxNzggMTAwNjQ0XFxuLS0tIGEvbmV0L21hYzgwMjExL29mZmNoYW5uZWwuY1xcbisrKyBiL25ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmNcXG5AQCAtODU2LDggKzg1NiwxMCBAQCBpbnQgaWVlZTgwMjExX21nbXRfdHgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4gXFx0XFx0XFx0bmVlZF9vZmZjaGFuID0gdHJ1ZTtcXG4gXFxuIFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4tXFx0XFx0c3RhID0gc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgbWdtdC1cXHUwMDNlZGEpO1xcbi1cXHRcXHRtbG9fc3RhID0gc3RhIFxcdTAwMjZcXHUwMDI2IHN0YS1cXHUwMDNlc3RhLm1sbztcXG4rXFx0XFx0aWYgKCFwYXJhbXMtXFx1MDAzZW5vX3N0YSkge1xcbitcXHRcXHRcXHRzdGEgPSBzdGFfaW5mb19nZXRfYnNzKHNkYXRhLCBtZ210LVxcdTAwM2VkYSk7XFxuK1xcdFxcdFxcdG1sb19zdGEgPSBzdGEgXFx1MDAyNlxcdTAwMjYgc3RhLVxcdTAwM2VzdGEubWxvO1xcbitcXHRcXHR9XFxuIFxcbiBcXHRcXHRpZiAoIWllZWU4MDIxMV9pc19hY3Rpb24obWdtdC1cXHUwMDNlZnJhbWVfY29udHJvbCkgfHxcXG4gXFx0XFx0ICAgIG1nbXQtXFx1MDAzZXUuYWN0aW9uLmNhdGVnb3J5ID09IFdMQU5fQ0FURUdPUllfUFVCTElDIHx8XFxuQEAgLTg4Niw3ICs4ODgsOCBAQCBpbnQgaWVlZTgwMjExX21nbXRfdHgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4gXFx0XFx0ICAgICBsb2NhbC1cXHUwMDNlb3BzLVxcdTAwM2VyZW1haW5fb25fY2hhbm5lbCBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgIG1lbWNtcChzZGF0YS1cXHUwMDNldmlmLmNmZy5hcF9hZGRyLCBtZ210LVxcdTAwM2Vic3NpZCwgRVRIX0FMRU4pKSkge1xcbiBcXHRcXHRcXHRuZWVkX29mZmNoYW4gPSB0cnVlO1xcbi1cXHRcXHR9IGVsc2UgaWYgKHNkYXRhLVxcdTAwM2V1Lm1nZC5hc3NvY2lhdGVkIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdH0gZWxzZSBpZiAoIXBhcmFtcy1cXHUwMDNlbm9fc3RhIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgIHNkYXRhLVxcdTAwM2V1Lm1nZC5hc3NvY2lhdGVkIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdCAgIGV0aGVyX2FkZHJfZXF1YWwoc2RhdGEtXFx1MDAzZXZpZi5jZmcuYXBfYWRkciwgbWdtdC1cXHUwMDNlZGEpKSB7XFxuIFxcdFxcdFxcdHN0YSA9IHN0YV9pbmZvX2dldF9ic3Moc2RhdGEsIG1nbXQtXFx1MDAzZWRhKTtcXG4gXFx0XFx0XFx0bWxvX3N0YSA9IHN0YSBcXHUwMDI2XFx1MDAyNiBzdGEtXFx1MDAzZXN0YS5tbG87XFxuQEAgLTEwMzEsNyArMTAzNCw5IEBAIGludCBpZWVlODAyMTFfbWdtdF90eChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbiBcXHR9XFxuIFxcbiBcXHRpZiAoIW5lZWRfb2ZmY2hhbikge1xcbi1cXHRcXHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCA3LCBsaW5rX2lkKTtcXG4rXFx0XFx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYixcXG4rXFx0XFx0XFx0XFx0ICAgICBwYXJhbXMtXFx1MDAzZW5vX3N0YSA/IHN0YSA6IEVSUl9QVFIoLUVOT0VOVCksXFxuK1xcdFxcdFxcdFxcdCAgICAgNywgbGlua19pZCk7XFxuIFxcdFxcdHJldCA9IDA7XFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcnguYyBiL25ldC9tYWM4MDIxMS9yeC5jXFxuaW5kZXggNWUyNmJlOGUyN2Q4Zi4uZWQ1YTJlMDU5MDc1NyAxMDA2NDRcXG4tLS0gYS9uZXQvbWFjODAyMTEvcnguY1xcbisrKyBiL25ldC9tYWM4MDIxMS9yeC5jXFxuQEAgLTIyMiw0MyArMjIyLDIxIEBAIGllZWU4MDIxMV9yeF9yYWRpb3RhcF9oZHJsZW4oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgaW50IGxpbmtfaWQsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxcbitcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4tXFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpO1xcbi1cXG4tXFx0aWYgKGxpbmtfaWQgXFx1MDAzZT0gMCkge1xcbi1cXHRcXHRzdGF0dXMtXFx1MDAzZWxpbmtfdmFsaWQgPSAxO1xcbi1cXHRcXHRzdGF0dXMtXFx1MDAzZWxpbmtfaWQgPSBsaW5rX2lkO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRzdGF0dXMtXFx1MDAzZWxpbmtfdmFsaWQgPSAwO1xcbi1cXHR9XFxuLVxcbiBcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2c2RhdGEtXFx1MDAzZXNrYl9xdWV1ZSwgc2tiKTtcXG4gXFx0d2lwaHlfd29ya19xdWV1ZShzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZWh3LndpcGh5LCBcXHUwMDI2c2RhdGEtXFx1MDAzZXdvcmspO1xcbi1cXHRpZiAoc3RhKSB7XFxuLVxcdFxcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YV9pbmZvO1xcbi1cXG4tXFx0XFx0aWYgKGxpbmtfaWQgXFx1MDAzZT0gMCkge1xcbi1cXHRcXHRcXHRsaW5rX3N0YV9pbmZvID0gcmN1X2RlcmVmZXJlbmNlKHN0YS1cXHUwMDNlbGlua1tsaW5rX2lkXSk7XFxuLVxcdFxcdFxcdGlmICghbGlua19zdGFfaW5mbylcXG4tXFx0XFx0XFx0XFx0cmV0dXJuO1xcbi1cXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRsaW5rX3N0YV9pbmZvID0gXFx1MDAyNnN0YS1cXHUwMDNlZGVmbGluaztcXG4tXFx0XFx0fVxcbi1cXG4tXFx0XFx0bGlua19zdGFfaW5mby1cXHUwMDNlcnhfc3RhdHMucGFja2V0cysrO1xcbi1cXHR9XFxuK1xcdGlmIChsaW5rX3N0YSlcXG4rXFx0XFx0bGlua19zdGEtXFx1MDAzZXJ4X3N0YXRzLnBhY2tldHMrKztcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgaWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tXFx0XFx0XFx0XFx0XFx0IGludCBsaW5rX2lkLFxcbi1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IHN0YV9pbmZvICpzdGEsXFxuK1xcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEsXFxuIFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuIFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSAwO1xcbi1cXHRfX2llZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIGxpbmtfaWQsIHN0YSwgc2tiKTtcXG4rXFx0X19pZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCBsaW5rX3N0YSwgc2tiKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgaWVlZTgwMjExX2hhbmRsZV9tdV9taW1vX21vbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG5AQCAtMzAxLDcgKzI3OSw3IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9oYW5kbGVfbXVfbWltb19tb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuIFxcdGlmICghc2tiKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCAtMSwgTlVMTCwgc2tiKTtcXG4rXFx0aWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgTlVMTCwgc2tiKTtcXG4gfVxcbiBcXG4gLypcXG5AQCAtMTQ5OCw3ICsxNDc2LDcgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X3Jlb3JkZXJfYW1wZHUoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcXG4gXFx0LyogaWYgdGhpcyBtcGR1IGlzIGZyYWdtZW50ZWQgLSB0ZXJtaW5hdGUgcnggYWdncmVnYXRpb24gc2Vzc2lvbiAqL1xcbiBcXHRzYyA9IGxlMTZfdG9fY3B1KGhkci1cXHUwMDNlc2VxX2N0cmwpO1xcbiBcXHRpZiAoc2MgXFx1MDAyNiBJRUVFODAyMTFfU0NUTF9GUkFHKSB7XFxuLVxcdFxcdGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2UocngtXFx1MDAzZXNkYXRhLCByeC1cXHUwMDNlbGlua19pZCwgTlVMTCwgc2tiKTtcXG4rXFx0XFx0aWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShyeC1cXHUwMDNlc2RhdGEsIE5VTEwsIHNrYik7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG5AQCAtMjUyNCw3ICsyNTAyLDcgQEAgaWVlZTgwMjExX3J4X2hfZGVmcmFnbWVudChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxcbiBcXG4gIG91dDpcXG4gXFx0aWVlZTgwMjExX2xlZF9yeChyeC1cXHUwMDNlbG9jYWwpO1xcbi1cXHRpZiAocngtXFx1MDAzZXN0YSlcXG4rXFx0aWYgKHJ4LVxcdTAwM2VsaW5rX3N0YSlcXG4gXFx0XFx0cngtXFx1MDAzZWxpbmtfc3RhLVxcdTAwM2VyeF9zdGF0cy5wYWNrZXRzKys7XFxuIFxcdHJldHVybiBSWF9DT05USU5VRTtcXG4gfVxcbkBAIC0zMzM1LDggKzMzMTMsOCBAQCBpZWVlODAyMTFfcnhfaF9kYXRhKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpXFxuIFxcdFxcdCAgICAodGYtXFx1MDAzZWFjdGlvbl9jb2RlID09IFdMQU5fVERMU19DSEFOTkVMX1NXSVRDSF9SRVFVRVNUIHx8XFxuIFxcdFxcdCAgICAgdGYtXFx1MDAzZWFjdGlvbl9jb2RlID09IFdMQU5fVERMU19DSEFOTkVMX1NXSVRDSF9SRVNQT05TRSkpIHtcXG4gXFx0XFx0XFx0cngtXFx1MDAzZXNrYi1cXHUwMDNlcHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF9URExTKTtcXG4tXFx0XFx0XFx0X19pZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC1cXHUwMDNlbGlua19pZCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHJ4LVxcdTAwM2VzdGEsIHJ4LVxcdTAwM2Vza2IpO1xcbitcXHRcXHRcXHRfX2llZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIHJ4LVxcdTAwM2VsaW5rX3N0YSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHJ4LVxcdTAwM2Vza2IpO1xcbiBcXHRcXHRcXHRyZXR1cm4gUlhfUVVFVUVEO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG5AQCAtMzk5MSw3ICszOTY5LDcgQEAgaWVlZTgwMjExX3J4X2hfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpXFxuIFxcdHJldHVybiBSWF9RVUVVRUQ7XFxuIFxcbiAgcXVldWU6XFxuLVxcdGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIHJ4LVxcdTAwM2VsaW5rX2lkLCByeC1cXHUwMDNlc3RhLCByeC1cXHUwMDNlc2tiKTtcXG4rXFx0aWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgcngtXFx1MDAzZWxpbmtfc3RhLCByeC1cXHUwMDNlc2tiKTtcXG4gXFx0cmV0dXJuIFJYX1FVRVVFRDtcXG4gfVxcbiBcXG5AQCAtNDAwNSw2ICszOTgzLDcgQEAgaWVlZTgwMjExX3J4X2hfdXNlcnNwYWNlX21nbXQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeClcXG4gXFx0XFx0LmxlbiA9IHJ4LVxcdTAwM2Vza2ItXFx1MDAzZWxlbixcXG4gXFx0XFx0LmxpbmtfaWQgPSByeC1cXHUwMDNlbGlua19pZCxcXG4gXFx0XFx0LmhhdmVfbGlua19pZCA9IHJ4LVxcdTAwM2VsaW5rX2lkIFxcdTAwM2U9IDAsXFxuK1xcdFxcdC5ub19zdGEgPSAhcngtXFx1MDAzZXN0YSxcXG4gXFx0fTtcXG4gXFxuIFxcdC8qIHNraXAga25vd24tYmFkIGFjdGlvbiBmcmFtZXMgYW5kIHJldHVybiB0aGVtIGluIHRoZSBuZXh0IGhhbmRsZXIgKi9cXG5AQCAtNDEyNyw3ICs0MTA2LDcgQEAgaWVlZTgwMjExX3J4X2hfYWN0aW9uX3JldHVybihzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxcbiBcXHRcXHRcXHRcXHRcXHRsb2NhbC1cXHUwMDNlaHcub2ZmY2hhbm5lbF90eF9od19xdWV1ZTtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0X19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHJ4LVxcdTAwM2VzZGF0YSwgbnNrYiwgNywgLTEsXFxuK1xcdFxcdF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChyeC1cXHUwMDNlc2RhdGEsIG5za2IsIHJ4LVxcdTAwM2VzdGEsIDcsIC0xLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgc3RhdHVzLVxcdTAwM2ViYW5kKTtcXG4gXFx0fVxcbiBcXG5AQCAtNDE0Nyw3ICs0MTI2LDcgQEAgaWVlZTgwMjExX3J4X2hfZXh0KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpXFxuIFxcdFxcdHJldHVybiBSWF9EUk9QX1VfVU5FWFBFQ1RFRF9FWFRfRlJBTUU7XFxuIFxcbiBcXHQvKiBmb3Igbm93IG9ubHkgYmVhY29ucyBhcmUgZXh0LCBzbyBxdWV1ZSB0aGVtICovXFxuLVxcdGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIHJ4LVxcdTAwM2VsaW5rX2lkLCByeC1cXHUwMDNlc3RhLCByeC1cXHUwMDNlc2tiKTtcXG4rXFx0aWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgcngtXFx1MDAzZWxpbmtfc3RhLCByeC1cXHUwMDNlc2tiKTtcXG4gXFxuIFxcdHJldHVybiBSWF9RVUVVRUQ7XFxuIH1cXG5AQCAtNDIwNCw3ICs0MTgzLDcgQEAgaWVlZTgwMjExX3J4X2hfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxcbiBcXHRcXHRyZXR1cm4gUlhfRFJPUF9VX1VOSEFORExFRF9NR01UX1NUWVBFO1xcbiBcXHR9XFxuIFxcbi1cXHRpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC1cXHUwMDNlbGlua19pZCwgcngtXFx1MDAzZXN0YSwgcngtXFx1MDAzZXNrYik7XFxuK1xcdGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIHJ4LVxcdTAwM2VsaW5rX3N0YSwgcngtXFx1MDAzZXNrYik7XFxuIFxcbiBcXHRyZXR1cm4gUlhfUVVFVUVEO1xcbiB9XFxuQEAgLTQyNDgsMTIgKzQyMjcsMjggQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X2hhbmRsZXJzKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXFxuIFxcdHNwaW5fbG9ja19iaChcXHUwMDI2cngtXFx1MDAzZWxvY2FsLVxcdTAwM2VyeF9wYXRoX2xvY2spO1xcbiBcXG4gXFx0d2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKGZyYW1lcykpKSB7XFxuK1xcdFxcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcXG4rXFxuIFxcdFxcdC8qXFxuLVxcdFxcdCAqIGFsbCB0aGUgb3RoZXIgZmllbGRzIGFyZSB2YWxpZCBhY3Jvc3MgZnJhbWVzXFxuLVxcdFxcdCAqIHRoYXQgYmVsb25nIHRvIGFuIGFNUERVIHNpbmNlIHRoZXkgYXJlIG9uIHRoZVxcbi1cXHRcXHQgKiBzYW1lIFRJRCBmcm9tIHRoZSBzYW1lIHN0YXRpb25cXG4rXFx0XFx0ICogTW9zdCBmaWVsZHMgYXJlIHZhbGlkIGFjcm9zcyBmcmFtZXMuIEhvd2V2ZXIsXFxuK1xcdFxcdCAqIGluIHRoZSBjYXNlIG9mIHJlb3JkZXJpbmcgZnJhbWVzIG1heSBoYXZlIGFycml2ZWRcXG4rXFx0XFx0ICogb24gZGlmZmVyZW50IGxpbmtzLCBzbyBhZGp1c3QgdGhlIGxpbmtfaWQsIGxpbmtcXG4rXFx0XFx0ICogYW5kIGxpbmtfc3RhIGFjY29yZGluZ2x5LlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0cngtXFx1MDAzZXNrYiA9IHNrYjtcXG4rXFx0XFx0aWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKFxcdTAwMjZyeC1cXHUwMDNlc2RhdGEtXFx1MDAzZXZpZikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIHVubGlrZWx5KHJ4LVxcdTAwM2VsaW5rX2lkICE9IHN0YXR1cy1cXHUwMDNlbGlua19pZCkpIHtcXG4rXFx0XFx0XFx0aWYgKHJ4LVxcdTAwM2VzdGEpIHtcXG4rXFx0XFx0XFx0XFx0cngtXFx1MDAzZWxpbmtfc3RhID1cXG4rXFx0XFx0XFx0XFx0XFx0cmN1X2RlcmVmZXJlbmNlKHJ4LVxcdTAwM2VzdGEtXFx1MDAzZWxpbmtbcngtXFx1MDAzZWxpbmtfaWRdKTtcXG4rXFxuK1xcdFxcdFxcdFxcdC8qIExpbmsgZ290IGRpc2FibGVkLCBqdXN0IHVzZSBkZWZsaW5rICovXFxuK1xcdFxcdFxcdFxcdGlmICghcngtXFx1MDAzZWxpbmtfc3RhKVxcbitcXHRcXHRcXHRcXHRcXHRyeC1cXHUwMDNlbGlua19zdGEgPSBcXHUwMDI2cngtXFx1MDAzZXN0YS1cXHUwMDNlZGVmbGluaztcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRyeC1cXHUwMDNlbGlua19pZCA9IHN0YXR1cy1cXHUwMDNlbGlua19pZDtcXG4rXFx0XFx0XFx0cngtXFx1MDAzZWxpbmsgPSByY3VfZGVyZWZlcmVuY2UocngtXFx1MDAzZXNkYXRhLVxcdTAwM2VsaW5rW3N0YXR1cy1cXHUwMDNlbGlua19pZF0pO1xcbitcXHRcXHR9XFxuIFxcbiBcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCFyeC1cXHUwMDNlbGluaykpIHtcXG4gXFx0XFx0XFx0cmVzID0gUlhfRFJPUF9VX05PX0xJTks7XFxuQEAgLTQzMjMsNyArNDMxOCwzNCBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfaW52b2tlX3J4X2hhbmRsZXJzKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpXFxuIHN0YXRpYyBib29sXFxuIGllZWU4MDIxMV9yeF9pc192YWxpZF9zdGFfbGlua19pZChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1OCBsaW5rX2lkKVxcbiB7XFxuLVxcdHJldHVybiAhIShzdGEtXFx1MDAzZXZhbGlkX2xpbmtzIFxcdTAwMjYgQklUKGxpbmtfaWQpKTtcXG4rXFx0aWYgKHN0YS1cXHUwMDNlbWxvKVxcbitcXHRcXHRyZXR1cm4gc3RhLVxcdTAwM2V2YWxpZF9saW5rcyBcXHUwMDI2IEJJVChsaW5rX2lkKTtcXG4rXFxuK1xcdHJldHVybiBzdGEtXFx1MDAzZWRlZmxpbmsubGlua19pZCA9PSBsaW5rX2lkO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGlua19zdGEoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhKVxcbit7XFxuK1xcdHN0cnVjdCBzdGFfaW5mbyAqc3RhO1xcbitcXG4rXFx0aWYgKFdBUk5fT05fT05DRSghbGlua19zdGEpIHx8XFxuK1xcdCAgICAhaWVlZTgwMjExX3J4X2lzX3ZhbGlkX3N0YV9saW5rX2lkKFxcdTAwMjZsaW5rX3N0YS1cXHUwMDNlc3RhLVxcdTAwM2VzdGEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBsaW5rX3N0YS1cXHUwMDNlbGlua19pZCkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHN0YSA9IGxpbmtfc3RhLVxcdTAwM2VzdGE7XFxuK1xcbitcXHRyeC1cXHUwMDNlc3RhID0gc3RhO1xcbitcXHRyeC1cXHUwMDNlbG9jYWwgPSBzdGEtXFx1MDAzZXNkYXRhLVxcdTAwM2Vsb2NhbDtcXG4rXFx0cngtXFx1MDAzZWxpbmsgPSByY3VfZGVyZWZlcmVuY2Uoc3RhLVxcdTAwM2VzZGF0YS1cXHUwMDNlbGlua1tsaW5rX3N0YS1cXHUwMDNlbGlua19pZF0pO1xcbitcXHRpZiAoIXJ4LVxcdTAwM2VsaW5rKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRyeC1cXHUwMDNlbGlua19pZCA9IHJ4LVxcdTAwM2VsaW5rLVxcdTAwM2VsaW5rX2lkO1xcbitcXHRyeC1cXHUwMDNlbGlua19zdGEgPSBsaW5rX3N0YTtcXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCBpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGluayhzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxcbkBAIC00MzYwLDExICs0MzgyLDEzIEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcXG4gXFxuIFxcdGlmIChsaW5rX2lkIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRpZiAoaWVlZTgwMjExX3ZpZl9pc19tbGQoXFx1MDAyNnJ4LVxcdTAwM2VzZGF0YS1cXHUwMDNldmlmKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgc3RhIFxcdTAwMjZcXHUwMDI2ICFzdGEtXFx1MDAzZXN0YS52YWxpZF9saW5rcylcXG4rXFx0XFx0ICAgIHN0YSBcXHUwMDI2XFx1MDAyNiAhc3RhLVxcdTAwM2VzdGEudmFsaWRfbGlua3MpIHtcXG4gXFx0XFx0XFx0cngtXFx1MDAzZWxpbmsgPVxcbiBcXHRcXHRcXHRcXHRyY3VfZGVyZWZlcmVuY2UocngtXFx1MDAzZXNkYXRhLVxcdTAwM2VsaW5rW3N0YS1cXHUwMDNlZGVmbGluay5saW5rX2lkXSk7XFxuLVxcdFxcdGVsc2VcXG4rXFx0XFx0XFx0cngtXFx1MDAzZWxpbmtfc3RhID0gcmN1X2RlcmVmZXJlbmNlKHJ4LVxcdTAwM2VzdGEtXFx1MDAzZWxpbmtbbGlua19pZF0pO1xcbitcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRyeC1cXHUwMDNlbGluayA9IFxcdTAwMjZyeC1cXHUwMDNlc2RhdGEtXFx1MDAzZWRlZmxpbms7XFxuK1xcdFxcdH1cXG4gXFx0fSBlbHNlIGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X2xpbmsocngsIGxpbmtfaWQpKSB7XFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0fVxcbkBAIC00Mzg3LDcgKzQ0MTEsNyBAQCB2b2lkIGllZWU4MDIxMV9yZWxlYXNlX3Jlb3JkZXJfdGltZW91dChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgaW50IHRpZClcXG4gXFx0c3RydWN0IHRpZF9hbXBkdV9yeCAqdGlkX2FnZ19yeDtcXG4gXFx0aW50IGxpbmtfaWQgPSAtMTtcXG4gXFxuLVxcdC8qIEZJWE1FOiBzdGF0aXN0aWNzIHdvbid0IGJlIHJpZ2h0IHdpdGggdGhpcyAqL1xcbitcXHQvKiBOT1RFOiB0aGUgY29ycmVjdCBsaW5rIFNUQSBmb3IgdGhlIGZyYW1lIGlzIHNldCBsYXRlciAqL1xcbiBcXHRpZiAoc3RhLVxcdTAwM2VzdGEudmFsaWRfbGlua3MpXFxuIFxcdFxcdGxpbmtfaWQgPSBmZnMoc3RhLVxcdTAwM2VzdGEudmFsaWRfbGlua3MpIC0gMTtcXG4gXFxuQEAgLTQ5MTQsMjAgKzQ5MzgsMTQgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4XzgwMjMoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcXG4ge1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YV9yeF9zdGF0cyAqc3RhdHM7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0IocngtXFx1MDAzZXNrYik7XFxuLVxcdHN0cnVjdCBzdGFfaW5mbyAqc3RhID0gcngtXFx1MDAzZXN0YTtcXG4tXFx0c3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhO1xcbitcXHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEgPSByeC1cXHUwMDNlbGlua19zdGE7XFxuIFxcdHN0cnVjdCBza19idWZmICpza2IgPSByeC1cXHUwMDNlc2tiO1xcbiBcXHR2b2lkICpzYSA9IHNrYi1cXHUwMDNlZGF0YSArIEVUSF9BTEVOO1xcbiBcXHR2b2lkICpkYSA9IHNrYi1cXHUwMDNlZGF0YTtcXG4gXFxuLVxcdGlmIChyeC1cXHUwMDNlbGlua19pZCBcXHUwMDNlPSAwKSB7XFxuLVxcdFxcdGxpbmtfc3RhID0gcmN1X2RlcmVmZXJlbmNlKHN0YS1cXHUwMDNlbGlua1tyeC1cXHUwMDNlbGlua19pZF0pO1xcbi1cXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCFsaW5rX3N0YSkpIHtcXG4tXFx0XFx0XFx0ZGV2X2tmcmVlX3NrYihyeC1cXHUwMDNlc2tiKTtcXG4tXFx0XFx0XFx0cmV0dXJuO1xcbi1cXHRcXHR9XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdGxpbmtfc3RhID0gXFx1MDAyNnN0YS1cXHUwMDNlZGVmbGluaztcXG4rXFx0aWYgKFdBUk5fT05fT05DRSghbGlua19zdGEpKSB7XFxuK1xcdFxcdGRldl9rZnJlZV9za2IocngtXFx1MDAzZXNrYik7XFxuK1xcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4gXFx0c3RhdHMgPSBcXHUwMDI2bGlua19zdGEtXFx1MDAzZXJ4X3N0YXRzO1xcbkBAIC01MTU0LDYgKzUxNzIsOSBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfaW52b2tlX2Zhc3Rfcngoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcXG4gXFx0XFx0Z290byBkcm9wO1xcbiBcXHR9XFxuIFxcbitcXHRzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcXG4rXFx0c3RhdHVzLVxcdTAwM2VsaW5rX2lkID0gcngtXFx1MDAzZWxpbmtfaWQgXFx1MDAzYyAwID8gMCA6IHJ4LVxcdTAwM2VsaW5rX2lkO1xcbitcXG4gXFx0aWVlZTgwMjExX3J4XzgwMjMocngsIGZhc3RfcngsIG9yaWdfbGVuKTtcXG4gXFxuIFxcdHJldHVybiB0cnVlO1xcbkBAIC01MTc4LDYgKzUxOTksNyBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAodm9pZCAqKXNrYi1cXHUwMDNlZGF0YTtcXG4gXFx0c3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhID0gcngtXFx1MDAzZWxpbmtfc3RhO1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluayA9IHJ4LVxcdTAwM2VsaW5rO1xcbitcXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzO1xcbiBcXG4gXFx0cngtXFx1MDAzZXNrYiA9IHNrYjtcXG4gXFxuQEAgLTUyMjEsNiArNTI0Myw5IEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcXG4gXFx0XFx0aGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopcngtXFx1MDAzZXNrYi1cXHUwMDNlZGF0YTtcXG4gXFx0fVxcbiBcXG4rXFx0c3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHJ4LVxcdTAwM2Vza2IpO1xcbitcXHRzdGF0dXMtXFx1MDAzZWxpbmtfaWQgPSByeC1cXHUwMDNlbGlua19pZCBcXHUwMDNjIDAgPyAwIDogcngtXFx1MDAzZWxpbmtfaWQ7XFxuK1xcbiBcXHRpZiAoaWVlZTgwMjExX2lzX3MxZ19iZWFjb24oaGRyLVxcdTAwM2VmcmFtZV9jb250cm9sKSkge1xcbiBcXHRcXHRpZWVlODAyMTFfaW52b2tlX3J4X2hhbmRsZXJzKHJ4KTtcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuQEAgLTUyNTYsMjIgKzUyODEsMTkgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfODAyMyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3B1YnN0YSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbiB7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpO1xcbi1cXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfZmFzdF9yeCAqZmFzdF9yeDtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9yeF9kYXRhIHJ4O1xcbiBcXHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YTtcXG4tXFx0aW50IGxpbmtfaWQgPSAtMTtcXG4gXFxuIFxcdG1lbXNldChcXHUwMDI2cngsIDAsIHNpemVvZihyeCkpO1xcbiBcXHRyeC5za2IgPSBza2I7XFxuIFxcdHJ4LmxvY2FsID0gbG9jYWw7XFxuIFxcdHJ4Lmxpc3QgPSBsaXN0O1xcbi1cXHRyeC5saW5rX2lkID0gLTE7XFxuIFxcbiBcXHRJODAyX0RFQlVHX0lOQyhsb2NhbC1cXHUwMDNlZG90MTFSZWNlaXZlZEZyYWdtZW50Q291bnQpO1xcbiBcXG5AQCAtNTI3OSwyMyArNTMwMSwxNSBAQCBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfODAyMyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4gXFx0aWYgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBldGhoZHIpKVxcbiBcXHRcXHRnb3RvIGRyb3A7XFxuIFxcbi1cXHRpZiAoIXB1YnN0YSlcXG4rXFx0aWYgKCFsaW5rX3B1YnN0YSlcXG4gXFx0XFx0Z290byBkcm9wO1xcbiBcXG4tXFx0aWYgKHN0YXR1cy1cXHUwMDNlbGlua192YWxpZClcXG4tXFx0XFx0bGlua19pZCA9IHN0YXR1cy1cXHUwMDNlbGlua19pZDtcXG4tXFxuLVxcdC8qXFxuLVxcdCAqIFRPRE86IFNob3VsZCB0aGUgZnJhbWUgYmUgZHJvcHBlZCBpZiB0aGUgcmlnaHQgbGlua19pZCBpcyBub3RcXG4tXFx0ICogYXZhaWxhYmxlPyBPciBtYXkgYmUgaXQgaXMgZmluZSBpbiB0aGUgY3VycmVudCBmb3JtIHRvIHByb2NlZWQgd2l0aFxcbi1cXHQgKiB0aGUgZnJhbWUgcHJvY2Vzc2luZyBiZWNhdXNlIHdpdGggZnJhbWUgYmVpbmcgaW4gODAyLjMgZm9ybWF0LFxcbi1cXHQgKiBsaW5rX2lkIGlzIHVzZWQgb25seSBmb3Igc3RhdHMgcHVycG9zZSBhbmQgdXBkYXRpbmcgdGhlIHN0YXRzIG9uXFxuLVxcdCAqIHRoZSBkZWZsaW5rIGlzIGZpbmU/XFxuLVxcdCAqL1xcbi1cXHRzdGEgPSBjb250YWluZXJfb2YocHVic3RhLCBzdHJ1Y3Qgc3RhX2luZm8sIHN0YSk7XFxuLVxcdGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X3N0YShcXHUwMDI2cngsIHN0YSwgbGlua19pZCkpXFxuK1xcdHN0YSA9IGNvbnRhaW5lcl9vZihsaW5rX3B1YnN0YS1cXHUwMDNlc3RhLCBzdHJ1Y3Qgc3RhX2luZm8sIHN0YSk7XFxuK1xcdGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X3N0YShcXHUwMDI2cngsIHN0YSwgbGlua19wdWJzdGEtXFx1MDAzZWxpbmtfaWQpKVxcbiBcXHRcXHRnb3RvIGRyb3A7XFxuIFxcbitcXHRyeC5saW5rX2lkID0gbGlua19wdWJzdGEtXFx1MDAzZWxpbmtfaWQ7XFxuK1xcbiBcXHRmYXN0X3J4ID0gcmN1X2RlcmVmZXJlbmNlKHJ4LnN0YS1cXHUwMDNlZmFzdF9yeCk7XFxuIFxcdGlmICghZmFzdF9yeClcXG4gXFx0XFx0Z290byBkcm9wO1xcbkBAIC01MzA3LDU5ICs1MzIxLDE5IEBAIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J4X2hhbmRsZV84MDIzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbiBcXHRkZXZfa2ZyZWVfc2tiKHNrYik7XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sIGllZWU4MDIxMV9yeF9mb3JfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIGNvbnN1bWUpXFxuK3N0YXRpYyBib29sIGllZWU4MDIxMV9yeF92YWxpZF9mcmVxKGludCBmcmVxLCBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluaylcXG4ge1xcbi1cXHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGE7XFxuLVxcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAodm9pZCAqKXNrYi1cXHUwMDNlZGF0YTtcXG4tXFx0c3RydWN0IHN0YV9pbmZvICpzdGE7XFxuLVxcdGludCBsaW5rX2lkID0gLTE7XFxuLVxcbi1cXHRpZiAoaWVlZTgwMjExX2lzX3MxZ19iZWFjb24oaGRyLVxcdTAwM2VmcmFtZV9jb250cm9sKSkge1xcbi1cXHRcXHRpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEocngsIE5VTEwsIC0xKSlcXG4tXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbi1cXG4tXFx0XFx0cmV0dXJuIGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUocngsIHNrYiwgY29uc3VtZSk7XFxuLVxcdH1cXG4rXFx0c3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmY7XFxuIFxcbi1cXHQvKlxcbi1cXHQgKiBMb29rIHVwIGxpbmsgc3RhdGlvbiBmaXJzdCwgaW4gY2FzZSB0aGVyZSdzIGFcXG4tXFx0ICogY2hhbmNlIHRoYXQgdGhleSBtaWdodCBoYXZlIGEgbGluayBhZGRyZXNzIHRoYXRcXG4tXFx0ICogaXMgaWRlbnRpY2FsIHRvIHRoZSBNTEQgYWRkcmVzcywgdGhhdCB3YXkgd2UnbGxcXG4tXFx0ICogaGF2ZSB0aGUgbGluayBpbmZvcm1hdGlvbiBpZiBuZWVkZWQuXFxuLVxcdCAqL1xcbi1cXHRsaW5rX3N0YSA9IGxpbmtfc3RhX2luZm9fZ2V0X2JzcyhyeC1cXHUwMDNlc2RhdGEsIGhkci1cXHUwMDNlYWRkcjIpO1xcbi1cXHRpZiAobGlua19zdGEpIHtcXG4tXFx0XFx0c3RhID0gbGlua19zdGEtXFx1MDAzZXN0YTtcXG4tXFx0XFx0bGlua19pZCA9IGxpbmtfc3RhLVxcdTAwM2VsaW5rX2lkO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XFxuLVxcbi1cXHRcXHRzdGEgPSBzdGFfaW5mb19nZXRfYnNzKHJ4LVxcdTAwM2VzZGF0YSwgaGRyLVxcdTAwM2VhZGRyMik7XFxuLVxcdFxcdGlmIChzdGF0dXMtXFx1MDAzZWxpbmtfdmFsaWQpIHtcXG4tXFx0XFx0XFx0bGlua19pZCA9IHN0YXR1cy1cXHUwMDNlbGlua19pZDtcXG4tXFx0XFx0fSBlbHNlIGlmIChpZWVlODAyMTFfdmlmX2lzX21sZChcXHUwMDI2cngtXFx1MDAzZXNkYXRhLVxcdTAwM2V2aWYpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdCAgIHN0YXR1cy1cXHUwMDNlZnJlcSkge1xcbi1cXHRcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluaztcXG4tXFx0XFx0XFx0c3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmY7XFxuLVxcbi1cXHRcXHRcXHRmb3JfZWFjaF9saW5rX2RhdGFfcmN1KHJ4LVxcdTAwM2VzZGF0YSwgbGluaykge1xcbi1cXHRcXHRcXHRcXHRjb25mID0gcmN1X2RlcmVmZXJlbmNlKGxpbmstXFx1MDAzZWNvbmYtXFx1MDAzZWNoYW5jdHhfY29uZik7XFxuLVxcdFxcdFxcdFxcdGlmICghY29uZiB8fCAhY29uZi1cXHUwMDNlZGVmLmNoYW4pXFxuLVxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4tXFx0XFx0XFx0XFx0aWYgKHN0YXR1cy1cXHUwMDNlZnJlcSA9PSBjb25mLVxcdTAwM2VkZWYuY2hhbi1cXHUwMDNlY2VudGVyX2ZyZXEpIHtcXG4tXFx0XFx0XFx0XFx0XFx0bGlua19pZCA9IGxpbmstXFx1MDAzZWxpbmtfaWQ7XFxuLVxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0fVxcbi1cXHR9XFxuK1xcdGlmICghZnJlcSB8fCBsaW5rLVxcdTAwM2VzZGF0YS1cXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTkFOIHx8XFxuK1xcdCAgICBsaW5rLVxcdTAwM2VzZGF0YS1cXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTkFOX0RBVEEpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbiBcXG4tXFx0aWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfc3RhKHJ4LCBzdGEsIGxpbmtfaWQpKVxcbitcXHRjb25mID0gcmN1X2RlcmVmZXJlbmNlKGxpbmstXFx1MDAzZWNvbmYtXFx1MDAzZWNoYW5jdHhfY29uZik7XFxuK1xcdGlmICghY29uZiB8fCAhY29uZi1cXHUwMDNlZGVmLmNoYW4pXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuLVxcdHJldHVybiBpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKHJ4LCBza2IsIGNvbnN1bWUpO1xcbitcXHRyZXR1cm4gZnJlcSA9PSBjb25mLVxcdTAwM2VkZWYuY2hhbi1cXHUwMDNlY2VudGVyX2ZyZXE7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTUzNjcsMTggKzUzNDEsMjAgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX3J4X2Zvcl9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcXG4gICogYmUgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jayBwcm90ZWN0aW9uLlxcbiAgKi9cXG4gc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4tXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsXFxuK1xcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3B1YnN0YSxcXG4gXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbiB7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpO1xcbi1cXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhO1xcbitcXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7XFxuK1xcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YTtcXG4rXFx0c3RydWN0IHN0YV9pbmZvICpzdGE7XFxuIFxcdF9fbGUxNiBmYztcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9yeF9kYXRhIHJ4O1xcbi1cXHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpwcmV2O1xcbiBcXHRzdHJ1Y3QgcmhsaXN0X2hlYWQgKnRtcDtcXG4rXFx0Ym9vbCByeF9kYXRhX3BlbmRpbmc7XFxuIFxcdGludCBlcnIgPSAwO1xcbiBcXG4gXFx0ZmMgPSAoKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLVxcdTAwM2VkYXRhKS1cXHUwMDNlZnJhbWVfY29udHJvbDtcXG5AQCAtNTM4Niw3ICs1MzYyLDYgQEAgc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4gXFx0cnguc2tiID0gc2tiO1xcbiBcXHRyeC5sb2NhbCA9IGxvY2FsO1xcbiBcXHRyeC5saXN0ID0gbGlzdDtcXG4tXFx0cngubGlua19pZCA9IC0xO1xcbiBcXG4gXFx0aWYgKGllZWU4MDIxMV9pc19kYXRhKGZjKSB8fCBpZWVlODAyMTFfaXNfbWdtdChmYykpXFxuIFxcdFxcdEk4MDJfREVCVUdfSU5DKGxvY2FsLVxcdTAwM2Vkb3QxMVJlY2VpdmVkRnJhZ21lbnRDb3VudCk7XFxuQEAgLTU0MjYsOTcgKzU0MDEsMTAyIEBAIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuIFxcdFxcdCAgICAgaWVlZTgwMjExX2lzX3MxZ19iZWFjb24oaGRyLVxcdTAwM2VmcmFtZV9jb250cm9sKSkpXFxuIFxcdFxcdGllZWU4MDIxMV9zY2FuX3J4KGxvY2FsLCBza2IpO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogUlggb2YgYSBkYXRhIGZyYW1lIHNob3VsZCBvbmx5IGhhcHBlbiB0byBleGlzdGluZyBzdGF0aW9ucy5cXG4rXFx0ICogSXQgaXMgdGhlcmVmb3JlIG1vcmUgZWZmaWNpZW50IHRvIHVzZSB0aGUgb25lIHByb3ZpZGVkIGJ5IHRoZSBkcml2ZXJcXG4rXFx0ICogb3Igc2VhcmNoIGJhc2VkIG9uIHRoZSBzdGF0aW9uJ3MgYWRkcmVzcy5cXG4rXFx0ICpcXG4rXFx0ICogTm90ZSB3ZSB3aWxsIGZhbGwgdGhyb3VnaCBhbmQgaGFuZGxlIGEgc3B1cmlvdXMgZGF0YSBmcmFtZSBpbiB0aGVcXG4rXFx0ICogc2FtZSB3YXkgYXMgYSBtYW5hZ2VtZW50IGZyYW1lLlxcbitcXHQgKi9cXG4gXFx0aWYgKGllZWU4MDIxMV9pc19kYXRhKGZjKSkge1xcbi1cXHRcXHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgKnByZXZfc3RhO1xcbi1cXHRcXHRpbnQgbGlua19pZCA9IC0xO1xcbi1cXG4tXFx0XFx0aWYgKHN0YXR1cy1cXHUwMDNlbGlua192YWxpZClcXG4tXFx0XFx0XFx0bGlua19pZCA9IHN0YXR1cy1cXHUwMDNlbGlua19pZDtcXG4tXFxuLVxcdFxcdGlmIChwdWJzdGEpIHtcXG4tXFx0XFx0XFx0c3RhID0gY29udGFpbmVyX29mKHB1YnN0YSwgc3RydWN0IHN0YV9pbmZvLCBzdGEpO1xcbi1cXHRcXHRcXHRpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEoXFx1MDAyNnJ4LCBzdGEsIGxpbmtfaWQpKVxcbi1cXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4tXFxuLVxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIEluIE1MTyBjb25uZWN0aW9uLCBmZXRjaCB0aGUgbGlua19pZCB1c2luZyBhZGRyMlxcbi1cXHRcXHRcXHQgKiB3aGVuIHRoZSBkcml2ZXIgZG9lcyBub3QgcGFzcyBsaW5rX2lkIGluIHN0YXR1cy5cXG4tXFx0XFx0XFx0ICogV2hlbiB0aGUgYWRkcmVzcyB0cmFuc2xhdGlvbiBpcyBhbHJlYWR5IHBlcmZvcm1lZCBieVxcbi1cXHRcXHRcXHQgKiBkcml2ZXIvaHcsIHRoZSB2YWxpZCBsaW5rX2lkIG11c3QgYmUgcGFzc2VkIGluXFxuLVxcdFxcdFxcdCAqIHN0YXR1cy5cXG4tXFx0XFx0XFx0ICovXFxuLVxcbi1cXHRcXHRcXHRpZiAoIXN0YXR1cy1cXHUwMDNlbGlua192YWxpZCBcXHUwMDI2XFx1MDAyNiBwdWJzdGEtXFx1MDAzZW1sbykge1xcbi1cXHRcXHRcXHRcXHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGE7XFxuLVxcbi1cXHRcXHRcXHRcXHRsaW5rX3N0YSA9IGxpbmtfc3RhX2luZm9fZ2V0X2JzcyhyeC5zZGF0YSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGhkci1cXHUwMDNlYWRkcjIpO1xcbi1cXHRcXHRcXHRcXHRpZiAoIWxpbmtfc3RhKVxcbi1cXHRcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4tXFxuLVxcdFxcdFxcdFxcdGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X2xpbmsoXFx1MDAyNnJ4LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRsaW5rX3N0YS1cXHUwMDNlbGlua19pZCkpXFxuLVxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbi1cXHRcXHRcXHR9XFxuLVxcbi1cXHRcXHRcXHRpZiAoaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShcXHUwMDI2cngsIHNrYiwgdHJ1ZSkpXFxuK1xcdFxcdGlmIChsaW5rX3B1YnN0YSkge1xcbitcXHRcXHRcXHRzdGEgPSBjb250YWluZXJfb2YobGlua19wdWJzdGEtXFx1MDAzZXN0YSwgc3RydWN0IHN0YV9pbmZvLFxcbitcXHRcXHRcXHRcXHRcXHQgICBzdGEpO1xcbitcXHRcXHRcXHRsaW5rX3N0YSA9IHJjdV9kZXJlZmVyZW5jZShzdGEtXFx1MDAzZWxpbmtbbGlua19wdWJzdGEtXFx1MDAzZWxpbmtfaWRdKTtcXG4rXFxuK1xcdFxcdFxcdHJ4LnNkYXRhID0gc3RhLVxcdTAwM2VzZGF0YTtcXG4rXFx0XFx0XFx0aWYgKGllZWU4MDIxMV9yeF9kYXRhX3NldF9saW5rX3N0YShcXHUwMDI2cngsIGxpbmtfc3RhKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAgaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShcXHUwMDI2cngsIHNrYiwgdHJ1ZSkpXFxuIFxcdFxcdFxcdFxcdHJldHVybjtcXG4rXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRwcmV2X3N0YSA9IE5VTEw7XFxuK1xcdFxcdHJ4X2RhdGFfcGVuZGluZyA9IGZhbHNlO1xcbiBcXG4rXFx0XFx0LyogU2VhcmNoIGZvciBzdGF0aW9ucyBvbiBub24tTUxEIGludGVyZmFjZXMgKi9cXG4gXFx0XFx0Zm9yX2VhY2hfc3RhX2luZm8obG9jYWwsIGhkci1cXHUwMDNlYWRkcjIsIHN0YSwgdG1wKSB7XFxuLVxcdFxcdFxcdGlmICghcHJldl9zdGEpIHtcXG4tXFx0XFx0XFx0XFx0cHJldl9zdGEgPSBzdGE7XFxuLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRcXHR9XFxuK1xcdFxcdFxcdHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rO1xcbiBcXG4tXFx0XFx0XFx0cnguc2RhdGEgPSBwcmV2X3N0YS1cXHUwMDNlc2RhdGE7XFxuLVxcdFxcdFxcdGlmICghc3RhdHVzLVxcdTAwM2VsaW5rX3ZhbGlkIFxcdTAwMjZcXHUwMDI2IHByZXZfc3RhLVxcdTAwM2VzdGEubWxvKSB7XFxuLVxcdFxcdFxcdFxcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YTtcXG4rXFx0XFx0XFx0aWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKFxcdTAwMjZzdGEtXFx1MDAzZXNkYXRhLVxcdTAwM2V2aWYpKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdFxcdFxcdGxpbmtfc3RhID0gbGlua19zdGFfaW5mb19nZXRfYnNzKHJ4LnNkYXRhLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgaGRyLVxcdTAwM2VhZGRyMik7XFxuLVxcdFxcdFxcdFxcdGlmICghbGlua19zdGEpXFxuLVxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHRsaW5rID0gXFx1MDAyNnN0YS1cXHUwMDNlc2RhdGEtXFx1MDAzZWRlZmxpbms7XFxuK1xcdFxcdFxcdGlmICghaWVlZTgwMjExX3J4X3ZhbGlkX2ZyZXEoc3RhdHVzLVxcdTAwM2VmcmVxLCBsaW5rKSlcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRcXHRcXHRsaW5rX2lkID0gbGlua19zdGEtXFx1MDAzZWxpbmtfaWQ7XFxuK1xcdFxcdFxcdGlmIChyeF9kYXRhX3BlbmRpbmcpIHtcXG4rXFx0XFx0XFx0XFx0aWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShcXHUwMDI2cngsIHNrYixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ZmFsc2UpO1xcbitcXHRcXHRcXHRcXHRyeF9kYXRhX3BlbmRpbmcgPSBmYWxzZTtcXG4gXFx0XFx0XFx0fVxcbiBcXG4tXFx0XFx0XFx0aWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfc3RhKFxcdTAwMjZyeCwgcHJldl9zdGEsIGxpbmtfaWQpKVxcbi1cXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4tXFxuLVxcdFxcdFxcdGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoXFx1MDAyNnJ4LCBza2IsIGZhbHNlKTtcXG4rXFx0XFx0XFx0cnguc2RhdGEgPSBzdGEtXFx1MDAzZXNkYXRhO1xcbitcXHRcXHRcXHRpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9saW5rX3N0YShcXHUwMDI2cngsIFxcdTAwMjZzdGEtXFx1MDAzZWRlZmxpbmspKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdFxcdHByZXZfc3RhID0gc3RhO1xcbitcXHRcXHRcXHRyeF9kYXRhX3BlbmRpbmcgPSB0cnVlO1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRpZiAocHJldl9zdGEpIHtcXG4tXFx0XFx0XFx0cnguc2RhdGEgPSBwcmV2X3N0YS1cXHUwMDNlc2RhdGE7XFxuLVxcdFxcdFxcdGlmICghc3RhdHVzLVxcdTAwM2VsaW5rX3ZhbGlkIFxcdTAwMjZcXHUwMDI2IHByZXZfc3RhLVxcdTAwM2VzdGEubWxvKSB7XFxuLVxcdFxcdFxcdFxcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YTtcXG4rXFx0XFx0LyogQW5kIHNlYXJjaCBzdGF0aW9ucyBvbiBNTEQgaW50ZXJmYWNlcyAqL1xcbitcXHRcXHRmb3JfZWFjaF9saW5rX3N0YV9pbmZvKGxvY2FsLCBoZHItXFx1MDAzZWFkZHIyLCBsaW5rX3N0YSwgdG1wKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rO1xcbiBcXG4tXFx0XFx0XFx0XFx0bGlua19zdGEgPSBsaW5rX3N0YV9pbmZvX2dldF9ic3Mocnguc2RhdGEsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBoZHItXFx1MDAzZWFkZHIyKTtcXG4tXFx0XFx0XFx0XFx0aWYgKCFsaW5rX3N0YSlcXG4tXFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdFxcdHN0YSA9IGxpbmtfc3RhLVxcdTAwM2VzdGE7XFxuK1xcdFxcdFxcdHNkYXRhID1cXHRzdGEtXFx1MDAzZXNkYXRhO1xcbitcXHRcXHRcXHRsaW5rID0gcmN1X2RlcmVmZXJlbmNlKHNkYXRhLVxcdTAwM2VsaW5rW2xpbmtfc3RhLVxcdTAwM2VsaW5rX2lkXSk7XFxuIFxcbi1cXHRcXHRcXHRcXHRsaW5rX2lkID0gbGlua19zdGEtXFx1MDAzZWxpbmtfaWQ7XFxuK1xcdFxcdFxcdGlmICghaWVlZTgwMjExX3J4X3ZhbGlkX2ZyZXEoc3RhdHVzLVxcdTAwM2VmcmVxLCBsaW5rKSlcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRcXHRpZiAocnhfZGF0YV9wZW5kaW5nKSB7XFxuK1xcdFxcdFxcdFxcdGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoXFx1MDAyNnJ4LCBza2IsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGZhbHNlKTtcXG4rXFx0XFx0XFx0XFx0cnhfZGF0YV9wZW5kaW5nID0gZmFsc2U7XFxuIFxcdFxcdFxcdH1cXG4gXFxuLVxcdFxcdFxcdGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X3N0YShcXHUwMDI2cngsIHByZXZfc3RhLCBsaW5rX2lkKSlcXG4tXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdFxcdHJ4LnNkYXRhID0gc3RhLVxcdTAwM2VzZGF0YTtcXG4rXFx0XFx0XFx0aWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGlua19zdGEoXFx1MDAyNnJ4LCBsaW5rX3N0YSkpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0XFx0cnhfZGF0YV9wZW5kaW5nID0gdHJ1ZTtcXG4rXFx0XFx0fVxcbiBcXG4rXFx0XFx0aWYgKHJ4X2RhdGFfcGVuZGluZykge1xcbiBcXHRcXHRcXHRpZiAoaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShcXHUwMDI2cngsIHNrYiwgdHJ1ZSkpXFxuIFxcdFxcdFxcdFxcdHJldHVybjtcXG4rXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHR9XFxuK1xcbitcXHRcXHQvKiBmYWxsIHRocm91Z2gsIGUuZy4gZm9yIHNwdXJpb3VzIGZyYW1lIG5vdGlmaWNhdGlvbiAqL1xcbiBcXHR9XFxuIFxcbi1cXHRwcmV2ID0gTlVMTDtcXG4rXFx0LypcXG4rXFx0ICogVGhpcyBpcyBhIG1hbmFnZW1lbnQgZnJhbWUgKG9yIGEgZGF0YSBmcmFtZSB3aXRob3V0IGEgc3RhdGlvbikgYW5kXFxuK1xcdCAqIGl0IHdpbGwgYmUgZGVsaXZlcmVkIGluZGVwZW5kZW50IG9mIHdoZXRoZXIgYSBzdGF0aW9uIGV4aXN0cyxcXG4rXFx0ICogc28gaXRlcmF0ZSB0aGUgaW50ZXJmYWNlcy5cXG4rXFx0ICovXFxuK1xcdHJ4X2RhdGFfcGVuZGluZyA9IGZhbHNlO1xcbitcXG4rXFx0LyogV2UgZXhwZWN0IHRoZSBkcml2ZXIgdG8gcHJvdmlkZSBmcmVxdWVuY3kgaW5mb3JtYXRpb24gKi9cXG4rXFx0aWYgKFdBUk5fT05fT05DRSghbG9jYWwtXFx1MDAzZWVtdWxhdGVfY2hhbmN0eCBcXHUwMDI2XFx1MDAyNiAhc3RhdHVzLVxcdTAwM2VmcmVxKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuIFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgXFx1MDAyNmxvY2FsLVxcdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XFxuK1xcdFxcdHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rID0gTlVMTDtcXG4rXFxuIFxcdFxcdGlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuQEAgLTU1MjQsMzAgKzU1MDQsODUgQEAgc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4gXFx0XFx0ICAgIHNkYXRhLVxcdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuK1xcdFxcdGxpbmtfc3RhID0gTlVMTDtcXG4rXFx0XFx0bGluayA9IE5VTEw7XFxuK1xcbitcXHRcXHQvKiBUcnkgdG8gcmVzb2x2ZSB0aGUgc3RhdGlvbiAqL1xcbitcXHRcXHRpZiAoIWllZWU4MDIxMV92aWZfaXNfbWxkKFxcdTAwMjZzZGF0YS1cXHUwMDNldmlmKSkge1xcbitcXHRcXHRcXHRzdGEgPSBzdGFfaW5mb19nZXRfYnNzKHNkYXRhLCBoZHItXFx1MDAzZWFkZHIyKTtcXG4rXFxuK1xcdFxcdFxcdGlmIChzdGEpIHtcXG4rXFx0XFx0XFx0XFx0bGlua19zdGEgPSBcXHUwMDI2c3RhLVxcdTAwM2VkZWZsaW5rO1xcbitcXHRcXHRcXHRcXHRsaW5rID0gXFx1MDAyNnNkYXRhLVxcdTAwM2VkZWZsaW5rO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGxpbmtfc3RhID0gbGlua19zdGFfaW5mb19nZXRfYnNzKHNkYXRhLCBoZHItXFx1MDAzZWFkZHIyKTtcXG4rXFxuK1xcdFxcdFxcdGlmIChsaW5rX3N0YSlcXG4rXFx0XFx0XFx0XFx0bGluayA9IHJjdV9kZXJlZmVyZW5jZShzZGF0YS1cXHUwMDNlbGlua1tsaW5rX3N0YS1cXHUwMDNlbGlua19pZF0pO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHQvKlxcbi1cXHRcXHQgKiBmcmFtZSBpcyBkZXN0aW5lZCBmb3IgdGhpcyBpbnRlcmZhY2UsIGJ1dCBpZiBpdCdzXFxuLVxcdFxcdCAqIG5vdCBhbHNvIGZvciB0aGUgcHJldmlvdXMgb25lIHdlIGhhbmRsZSB0aGF0IGFmdGVyXFxuLVxcdFxcdCAqIHRoZSBsb29wIHRvIGF2b2lkIGNvcHlpbmcgdGhlIFNLQiBvbmNlIHRvbyBtdWNoXFxuK1xcdFxcdCAqIElmIHdlIGZvdW5kIGEgU1RBIGFuZCBpdCBoYXMgYSB2YWxpZCBsaW5rIGluZm9ybWF0aW9uLCB0aGVuXFxuK1xcdFxcdCAqIFJYIHVzaW5nIHRoZSBzdGF0aW9uLlxcbiBcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKGxpbmtfc3RhIFxcdTAwMjZcXHUwMDI2IGxpbmsgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIGllZWU4MDIxMV9yeF92YWxpZF9mcmVxKHN0YXR1cy1cXHUwMDNlZnJlcSwgbGluaykpIHtcXG4rXFx0XFx0XFx0aWYgKHJ4X2RhdGFfcGVuZGluZykge1xcbitcXHRcXHRcXHRcXHRpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKFxcdTAwMjZyeCwgc2tiLCBmYWxzZSk7XFxuK1xcdFxcdFxcdFxcdHJ4X2RhdGFfcGVuZGluZyA9IGZhbHNlO1xcbitcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHQvKiBObyB2YWxpZF9saW5rcyBjaGVjayBhcyB3ZSBuZWVkIHRvIFJYIGJlYWNvbnMgKi9cXG4rXFxuK1xcdFxcdFxcdHJ4LnNkYXRhID0gc2RhdGE7XFxuK1xcdFxcdFxcdGlmIChpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGlua19zdGEoXFx1MDAyNnJ4LCBsaW5rX3N0YSkpXFxuK1xcdFxcdFxcdFxcdHJ4X2RhdGFfcGVuZGluZyA9IHRydWU7XFxuIFxcbi1cXHRcXHRpZiAoIXByZXYpIHtcXG4tXFx0XFx0XFx0cHJldiA9IHNkYXRhO1xcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0cnguc2RhdGEgPSBwcmV2O1xcbi1cXHRcXHRpZWVlODAyMTFfcnhfZm9yX2ludGVyZmFjZShcXHUwMDI2cngsIHNrYiwgZmFsc2UpO1xcbitcXHRcXHQvKiBObyBzdGF0aW9uLCB0cnkgdG8gcmVzb2x2ZSB0aGUgbGluayBhbmQgUlggKi9cXG4rXFx0XFx0aWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKFxcdTAwMjZzZGF0YS1cXHUwMDNldmlmKSkge1xcbitcXHRcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZjtcXG4rXFx0XFx0XFx0Ym9vbCBmb3VuZCA9IGZhbHNlO1xcbiBcXG4tXFx0XFx0cHJldiA9IHNkYXRhO1xcbi1cXHR9XFxuK1xcdFxcdFxcdGZvcl9lYWNoX2xpbmtfZGF0YV9yY3Uoc2RhdGEsIGxpbmspIHtcXG4rXFx0XFx0XFx0XFx0Y29uZiA9IHJjdV9kZXJlZmVyZW5jZShsaW5rLVxcdTAwM2Vjb25mLVxcdTAwM2VjaGFuY3R4X2NvbmYpO1xcbitcXHRcXHRcXHRcXHRpZiAoIWNvbmYgfHwgIWNvbmYtXFx1MDAzZWRlZi5jaGFuKVxcbitcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdGlmIChwcmV2KSB7XFxuLVxcdFxcdHJ4LnNkYXRhID0gcHJldjtcXG4rXFx0XFx0XFx0XFx0aWYgKHN0YXR1cy1cXHUwMDNlZnJlcSA9PSBjb25mLVxcdTAwM2VkZWYuY2hhbi1cXHUwMDNlY2VudGVyX2ZyZXEpIHtcXG4rXFx0XFx0XFx0XFx0XFx0Zm91bmQgPSB0cnVlO1xcbitcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0XFx0fVxcbitcXHRcXHRcXHR9XFxuIFxcbi1cXHRcXHRpZiAoaWVlZTgwMjExX3J4X2Zvcl9pbnRlcmZhY2UoXFx1MDAyNnJ4LCBza2IsIHRydWUpKVxcbi1cXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdFxcdGlmICghZm91bmQpXFxuK1xcdFxcdFxcdFxcdGxpbmsgPSBcXHUwMDI2c2RhdGEtXFx1MDAzZWRlZmxpbms7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGxpbmsgPSBcXHUwMDI2c2RhdGEtXFx1MDAzZWRlZmxpbms7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChyeF9kYXRhX3BlbmRpbmcpIHtcXG4rXFx0XFx0XFx0aWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShcXHUwMDI2cngsIHNrYiwgZmFsc2UpO1xcbitcXHRcXHRcXHRyeF9kYXRhX3BlbmRpbmcgPSBmYWxzZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0cnguc2RhdGEgPSBzZGF0YTtcXG4rXFx0XFx0cngubG9jYWwgPSBzZGF0YS1cXHUwMDNlbG9jYWw7XFxuK1xcdFxcdHJ4LmxpbmsgPSBsaW5rO1xcbitcXHRcXHRyeC5saW5rX2lkID0gbGluay1cXHUwMDNlbGlua19pZDtcXG4rXFx0XFx0cnguc3RhID0gTlVMTDtcXG4rXFx0XFx0cngubGlua19zdGEgPSBOVUxMO1xcbitcXG4rXFx0XFx0cnhfZGF0YV9wZW5kaW5nID0gdHJ1ZTtcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKHJ4X2RhdGFfcGVuZGluZyBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShcXHUwMDI2cngsIHNrYiwgdHJ1ZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuICBvdXQ6XFxuIFxcdGRldl9rZnJlZV9za2Ioc2tiKTtcXG4gfVxcbkBAIC01NTU2LDcgKzU1OTEsOCBAQCBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfcGFja2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbiAgKiBUaGlzIGlzIHRoZSByZWNlaXZlIHBhdGggaGFuZGxlci4gSXQgaXMgY2FsbGVkIGJ5IGEgbG93IGxldmVsIGRyaXZlciB3aGVuIGFuXFxuICAqIDgwMi4xMSBNUERVIGlzIHJlY2VpdmVkIGZyb20gdGhlIGhhcmR3YXJlLlxcbiAgKi9cXG4tdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSxcXG4rdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4rXFx0XFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfcHVic3RhLFxcbiBcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG4ge1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTtcXG5AQCAtNTY5NCw5ICs1NzMwLDYgQEAgdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSxcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRpZiAoV0FSTl9PTl9PTkNFKHN0YXR1cy1cXHUwMDNlbGlua19pZCBcXHUwMDNlPSBJRUVFODAyMTFfTElOS19VTlNQRUNJRklFRCkpXFxuLVxcdFxcdGdvdG8gZHJvcDtcXG4tXFxuIFxcdHN0YXR1cy1cXHUwMDNlcnhfZmxhZ3MgPSAwO1xcbiBcXG4gXFx0a2Nvdl9yZW1vdGVfc3RhcnRfY29tbW9uKHNrYl9nZXRfa2Nvdl9oYW5kbGUoc2tiKSk7XFxuQEAgLTU3MTUsOSArNTc0OCwxMCBAQCB2b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLFxcbiBcXHRcXHRcXHRpZWVlODAyMTFfdHB0X2xlZF90cmlnX3J4KGxvY2FsLCBza2ItXFx1MDAzZWxlbik7XFxuIFxcbiBcXHRcXHRpZiAoc3RhdHVzLVxcdTAwM2VmbGFnIFxcdTAwMjYgUlhfRkxBR184MDIzKVxcbi1cXHRcXHRcXHRfX2llZWU4MDIxMV9yeF9oYW5kbGVfODAyMyhodywgcHVic3RhLCBza2IsIGxpc3QpO1xcbitcXHRcXHRcXHRfX2llZWU4MDIxMV9yeF9oYW5kbGVfODAyMyhodywgbGlua19wdWJzdGEsIHNrYiwgbGlzdCk7XFxuIFxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0X19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChodywgcHVic3RhLCBza2IsIGxpc3QpO1xcbitcXHRcXHRcXHRfX2llZWU4MDIxMV9yeF9oYW5kbGVfcGFja2V0KGh3LCBsaW5rX3B1YnN0YSwgc2tiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGxpc3QpO1xcbiBcXHR9XFxuIFxcbiBcXHRrY292X3JlbW90ZV9zdG9wKCk7XFxuQEAgLTU3MjcsNyArNTc2MSw4IEBAIHZvaWQgaWVlZTgwMjExX3J4X2xpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsXFxuIH1cXG4gRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfcnhfbGlzdCk7XFxuIFxcbi12b2lkIGllZWU4MDIxMV9yeF9uYXBpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLFxcbit2b2lkIGllZWU4MDIxMV9yeF9uYXBpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbitcXHRcXHQgICAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19wdWJzdGEsXFxuIFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXFxuIHtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnRtcDtcXG5AQCAtNTc0MCw3ICs1Nzc1LDcgQEAgdm9pZCBpZWVlODAyMTFfcnhfbmFwaShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSxcXG4gXFx0ICogcmVjZWl2ZSBwcm9jZXNzaW5nXFxuIFxcdCAqL1xcbiBcXHRyY3VfcmVhZF9sb2NrKCk7XFxuLVxcdGllZWU4MDIxMV9yeF9saXN0KGh3LCBwdWJzdGEsIHNrYiwgXFx1MDAyNmxpc3QpO1xcbitcXHRpZWVlODAyMTFfcnhfbGlzdChodywgbGlua19wdWJzdGEsIHNrYiwgXFx1MDAyNmxpc3QpO1xcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFxuIFxcdGlmICghbmFwaSkge1xcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc2Nhbi5jIGIvbmV0L21hYzgwMjExL3NjYW4uY1xcbmluZGV4IGVlZmYyMzBiZDkwOWYuLjMyNGMyYjZkN2NlMWIgMTAwNjQ0XFxuLS0tIGEvbmV0L21hYzgwMjExL3NjYW4uY1xcbisrKyBiL25ldC9tYWM4MDIxMS9zY2FuLmNcXG5AQCAtOSw3ICs5LDcgQEBcXG4gICogQ29weXJpZ2h0IDIwMDcsIE1pY2hhZWwgV3UgXFx1MDAzY2ZsYW1pbmdpY2VAc291cm1pbGsubmV0XFx1MDAzZVxcbiAgKiBDb3B5cmlnaHQgMjAxMy0yMDE1ICBJbnRlbCBNb2JpbGUgQ29tbXVuaWNhdGlvbnMgR21iSFxcbiAgKiBDb3B5cmlnaHQgMjAxNi0yMDE3ICBJbnRlbCBEZXV0c2NobGFuZCBHbWJIXFxuLSAqIENvcHlyaWdodCAoQykgMjAxOC0yMDI1IEludGVsIENvcnBvcmF0aW9uXFxuKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDI2IEludGVsIENvcnBvcmF0aW9uXFxuICAqL1xcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX2FycC5oXFx1MDAzZVxcbkBAIC0yMDQsMTIgKzIwNCwxMCBAQCBpZWVlODAyMTFfYnNzX2luZm9fdXBkYXRlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxcbiBcXHRcXHQgKiBhbiBpbmRpY2F0aW9uIG9uIHdoaWNoIG9mIHRoZSBsaW5rcyB0aGUgZnJhbWUgd2FzIHJlY2VpdmVkXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoaWVlZTgwMjExX3ZpZl9pc19tbGQoXFx1MDAyNnNjYW5fc2RhdGEtXFx1MDAzZXZpZikpIHtcXG4tXFx0XFx0XFx0aWYgKHJ4X3N0YXR1cy1cXHUwMDNlbGlua192YWxpZCkge1xcbi1cXHRcXHRcXHRcXHRzOCBsaW5rX2lkID0gcnhfc3RhdHVzLVxcdTAwM2VsaW5rX2lkO1xcbitcXHRcXHRcXHRzOCBsaW5rX2lkID0gcnhfc3RhdHVzLVxcdTAwM2VsaW5rX2lkO1xcbiBcXG4tXFx0XFx0XFx0XFx0bGlua19jb25mID1cXG4tXFx0XFx0XFx0XFx0XFx0cmN1X2RlcmVmZXJlbmNlKHNjYW5fc2RhdGEtXFx1MDAzZXZpZi5saW5rX2NvbmZbbGlua19pZF0pO1xcbi1cXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGxpbmtfY29uZiA9XFxuK1xcdFxcdFxcdFxcdHJjdV9kZXJlZmVyZW5jZShzY2FuX3NkYXRhLVxcdTAwM2V2aWYubGlua19jb25mW2xpbmtfaWRdKTtcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0bGlua19jb25mID0gXFx1MDAyNnNjYW5fc2RhdGEtXFx1MDAzZXZpZi5ic3NfY29uZjtcXG4gXFx0XFx0fVxcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdGRscy5jIGIvbmV0L21hYzgwMjExL3RkbHMuY1xcbmluZGV4IGZmZDU3NWE4ZDE4OGYuLmE4OWM2NTY5YjljZjUgMTAwNjQ0XFxuLS0tIGEvbmV0L21hYzgwMjExL3RkbHMuY1xcbisrKyBiL25ldC9tYWM4MDIxMS90ZGxzLmNcXG5AQCAtMTA2Niw3ICsxMDY2LDcgQEAgaWVlZTgwMjExX3RkbHNfcHJlcF9tZ210X3BhY2tldChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHR9XFxuIFxcbiBcXHRpZiAoYWN0aW9uX2NvZGUgPT0gV0xBTl9QVUJfQUNUSU9OX1RETFNfRElTQ09WRVJfUkVTKSB7XFxuLVxcdFxcdGllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIDcsIGxpbmtfaWQpO1xcbitcXHRcXHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCBzdGEsIDcsIGxpbmtfaWQpO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3R4LmMgYi9uZXQvbWFjODAyMTEvdHguY1xcbmluZGV4IDBjZjVmNmVjNzVlNjcuLmYzZjlmMTI0ODFjNDAgMTAwNjQ0XFxuLS0tIGEvbmV0L21hYzgwMjExL3R4LmNcXG4rKysgYi9uZXQvbWFjODAyMTEvdHguY1xcbkBAIC02NDQxLDcgKzY0NDEsOCBAQCB2b2lkIGllZWU4MDIxMV91bnJlc2VydmVfdGlkKHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsIHU4IHRpZClcXG4gRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfdW5yZXNlcnZlX3RpZCk7XFxuIFxcbiB2b2lkIF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCB0aWQsIGludCBsaW5rX2lkLFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN0YV9pbmZvICpzdGEsXFxuK1xcdFxcdFxcdFxcdCBpbnQgdGlkLCBpbnQgbGlua19pZCxcXG4gXFx0XFx0XFx0XFx0IGVudW0gbmw4MDIxMV9iYW5kIGJhbmQpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9ICh2b2lkICopc2tiLVxcdTAwM2VkYXRhO1xcbkBAIC02NDkzLDEyICs2NDk0LDEzIEBAIHZvaWQgX19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbiBcXHQgKi9cXG4gXFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbiBcXHRJRUVFODAyMTFfU0tCX0NCKHNrYiktXFx1MDAzZWJhbmQgPSBiYW5kO1xcbi1cXHRpZWVlODAyMTFfeG1pdChzZGF0YSwgTlVMTCwgc2tiKTtcXG4rXFx0aWVlZTgwMjExX3htaXQoc2RhdGEsIHN0YSwgc2tiKTtcXG4gXFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuIH1cXG4gXFxuIHZvaWQgaWVlZTgwMjExX3R4X3NrYl90aWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLVxcdFxcdFxcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRpZCwgaW50IGxpbmtfaWQpXFxuK1xcdFxcdFxcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN0YV9pbmZvICpzdGEsXFxuK1xcdFxcdFxcdCAgaW50IHRpZCwgaW50IGxpbmtfaWQpXFxuIHtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNoYW5jdHhfY29uZjtcXG4gXFx0ZW51bSBubDgwMjExX2JhbmQgYmFuZDtcXG5AQCAtNjUyNCw3ICs2NTI2LDcgQEAgdm9pZCBpZWVlODAyMTFfdHhfc2tiX3RpZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0XFx0YmFuZCA9IDA7XFxuIFxcdH1cXG4gXFxuLVxcdF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzZGF0YSwgc2tiLCB0aWQsIGxpbmtfaWQsIGJhbmQpO1xcbitcXHRfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc2RhdGEsIHNrYiwgc3RhLCB0aWQsIGxpbmtfaWQsIGJhbmQpO1xcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmNcXG5pbmRleCA4YWRiZWY1ZjA0NDI1Li4wYWIyOTA3ZTY2ZjY4IDEwMDY0NFxcbi0tLSBhL25ldC93aXJlbGVzcy9ubDgwMjExLmNcXG4rKysgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXFxuQEAgLTEwOTYsNiArMTA5Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubDgwMjExX3BvbGljeVtOVU1fTkw4MDIxMV9BVFRSXSA9IHtcXG4gXFx0W05MODAyMTFfQVRUUl9OUENBX1BVTkNUX0JJVE1BUF0gPVxcbiBcXHRcXHROTEFfUE9MSUNZX0ZVTExfUkFOR0UoTkxBX1UzMiwgXFx1MDAyNm5sODAyMTFfcHVuY3RfYml0bWFwX3JhbmdlKSxcXG4gXFx0W05MODAyMTFfQVRUUl9TVEFfRFVNUF9MSU5LX1NUQVRTXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LFxcbitcXHRbTkw4MDIxMV9BVFRSX0ZSQU1FX0NNRF9OT19TVEFdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sXFxuIH07XFxuIFxcbiAvKiBwb2xpY3kgZm9yIHRoZSBrZXkgYXR0cmlidXRlcyAqL1xcbkBAIC0xNDg1OSw2ICsxNDg2MCw5IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV90eF9tZ210KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdCAgICAhKHdkZXYtXFx1MDAzZXZhbGlkX2xpbmtzIFxcdTAwMjYgQklUKHBhcmFtcy5saW5rX2lkKSkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4rXFx0cGFyYW1zLm5vX3N0YSA9XFxuK1xcdFxcdG5sYV9nZXRfZmxhZyhpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfRlJBTUVfQ01EX05PX1NUQV0pO1xcbitcXG4gXFx0cGFyYW1zLmJ1ZiA9IG5sYV9kYXRhKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9GUkFNRV0pO1xcbiBcXHRwYXJhbXMubGVuID0gbmxhX2xlbihpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfRlJBTUVdKTtcXG4gXFxuQEAgLTIyMDIwLDcgKzIyMDI0LDkgQEAgaW50IG5sODAyMTFfc2VuZF9tZ210KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4gXFx0ICAgIChpbmZvLVxcdTAwM2VhY2tfdHN0YW1wIFxcdTAwMjZcXHUwMDI2IG5sYV9wdXRfdTY0XzY0Yml0KG1zZyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgTkw4MDIxMV9BVFRSX1RYX0hXX1RJTUVTVEFNUCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgaW5mby1cXHUwMDNlYWNrX3RzdGFtcCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgTkw4MDIxMV9BVFRSX1BBRCkpKVxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBOTDgwMjExX0FUVFJfUEFEKSkgfHxcXG4rXFx0ICAgIChpbmZvLVxcdTAwM2Vub19zdGEgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICBubGFfcHV0X2ZsYWcobXNnLCBOTDgwMjExX0FUVFJfRlJBTUVfQ01EX05PX1NUQSkpKVxcbiBcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gXFxuIFxcdGdlbmxtc2dfZW5kKG1zZywgaGRyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDQ6MzU6MjIuMDU3MDM0MTE1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTc5MjA0NjU4OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIk1BQzgwMjExX0hXU0lNXCIsXG4gICAgXCJDRkc4MDIxMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImllZWU4MDIxMV9yeF9saXN0XCIsXG4gICAgXCJpZWVlODAyMTFfcnhfbmFwaVwiLFxuICAgIFwiaWVlZTgwMjExX21nbXRfdHhcIixcbiAgICBcIm5sODAyMTFfdHhfbWdtdFwiLFxuICAgIFwibmw4MDIxMV9zZW5kX21nbXRcIixcbiAgICBcImllZWU4MDIxMV90eF9za2JfdGlkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1hYzgwMjExIFJYIHBhdGggdG8gaGFuZGxlIE1MTyAoTXVsdGktTGluayBPcGVyYXRpb24pIGxpbmsgSURzIG1vcmUgcm9idXN0bHksIHJlbW92aW5nIGBsaW5rX3ZhbGlkYCBhbmQgcGFzc2luZyBgbGlua19zdGFgIGRpcmVjdGx5LiBJdCBhbHNvIGFkZHMgYSBgbm9fc3RhYCBmbGFnIGZvciBtYW5hZ2VtZW50IGZyYW1lIFRYL1JYLiBUaGVzZSBhcmUgY29yZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gbWFjODAyMTEgYW5kIGNmZzgwMjExLCByZWFjaGFibGUgdmlhIG1hYzgwMjExX2h3c2ltIGFuZCBubDgwMjExIG5ldGxpbmsgaW50ZXJmYWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5ZTEyYWUzMTVmZWU1MGU3Y2Q2MDIyNjdlZTY1ZDdiOGJlNGIyNWI1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAwNDozNToyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZHBfcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZHBfcnguY1xuaW5kZXggMzM0MjU3MDdjMDg0Mi4uZmJiM2QxOGY1NWRkZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZHBfcnguY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kcF9yeC5jXG5AQCAtMjUwMCw3ICsyNTAwLDcgQEAgc3RhdGljIHZvaWQgYXRoMTFrX2RwX3J4X2RlbGl2ZXJfbXNkdShzdHJ1Y3QgYXRoMTFrICphciwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBcbiBcdCAgICAhKGlzX21jYmMgXHUwMDI2XHUwMDI2IHJ4X3N0YXR1cy1cdTAwM2VmbGFnIFx1MDAyNiBSWF9GTEFHX0RFQ1JZUFRFRCkpXG4gXHRcdHJ4X3N0YXR1cy1cdTAwM2VmbGFnIHw9IFJYX0ZMQUdfODAyMztcbiBcbi1cdGllZWU4MDIxMV9yeF9uYXBpKGFyLVx1MDAzZWh3LCBwdWJzdGEsIG1zZHUsIG5hcGkpO1xuK1x0aWVlZTgwMjExX3J4X25hcGkoYXItXHUwMDNlaHcsIHB1YnN0YSA/IFx1MDAyNnB1YnN0YS1cdTAwM2VkZWZsaW5rIDogTlVMTCwgbXNkdSwgbmFwaSk7XG4gfVxuIFxuIHN0YXRpYyBib29sIGF0aDExa19kcF9yeF9jaGVja19ud2lmaV9oZHJfbGVuX3ZhbGlkKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9tb24uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfbW9uLmNcbmluZGV4IDdkNWJlNzdiMDgxZjguLjFmYWYxODk2ZDBhYjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX21vbi5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX21vbi5jXG5AQCAtNTAzLDggKzUwMyw2IEBAIHZvaWQgYXRoMTJrX2RwX21vbl9yeF9kZWxpdmVyX21zZHUoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LFxuIFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cztcbiBcdHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGUgKmhlID0gTlVMTDtcbiBcbi1cdHN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkID0gMDtcbi1cbiBcdGlmICgoc3RhdHVzLVx1MDAzZWVuY29kaW5nID09IFJYX0VOQ19IRSkgXHUwMDI2XHUwMDI2ICEoc3RhdHVzLVx1MDAzZWZsYWcgXHUwMDI2IFJYX0ZMQUdfUkFESU9UQVBfSEUpIFx1MDAyNlx1MDAyNlxuIFx0ICAgICEoc3RhdHVzLVx1MDAzZWZsYWcgXHUwMDI2IFJYX0ZMQUdfU0tJUF9NT05JVE9SKSkge1xuIFx0XHRoZSA9IHNrYl9wdXNoKG1zZHUsIHNpemVvZihrbm93bikpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcnguY1xuaW5kZXggOGZhMGU5MGI0NTMxNi4uODQ3YWQyOGZkMzBiMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcnguY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9yeC5jXG5AQCAtMTM3NSw2ICsxMzc1LDcgQEAgdm9pZCBhdGgxMmtfZHBfcnhfZGVsaXZlcl9tc2R1KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwgc3RydWN0IG5hcGlfc3RydWNcbiBcdHN0cnVjdCBhdGgxMmtfZHAgKmRwID0gZHBfcGRldi1cdTAwM2VkcDtcbiBcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXM7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhO1xuK1x0c3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19wdWJzdGEgPSBOVUxMO1xuIFx0c3RydWN0IGF0aDEya19kcF9wZWVyICpwZWVyO1xuIFx0c3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYiA9IEFUSDEyS19TS0JfUlhDQihtc2R1KTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSByeF9pbmZvLVx1MDAzZXJ4X3N0YXR1cztcbkBAIC0xMzg0LDkgKzEzODUsMTkgQEAgdm9pZCBhdGgxMmtfZHBfcnhfZGVsaXZlcl9tc2R1KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwgc3RydWN0IG5hcGlfc3RydWNcbiBcbiBcdHB1YnN0YSA9IHBlZXIgPyBwZWVyLVx1MDAzZXN0YSA6IE5VTEw7XG4gXG4tXHRzdGF0dXMtXHUwMDNlbGlua192YWxpZCA9IDA7XG4tXHRpZiAocHVic3RhIFx1MDAyNlx1MDAyNiBwdWJzdGEtXHUwMDNldmFsaWRfbGlua3MpXG4tXHRcdGF0aDEya19od19zZXRfcnhfbGlua19pZChkcC1cdTAwM2Vod19wYXJhbXMsIHBlZXIsIHJ4Y2IsIHN0YXR1cyk7XG4rXHRpZiAocHVic3RhKSB7XG4rXHRcdGlmIChwdWJzdGEtXHUwMDNldmFsaWRfbGlua3MpIHtcbitcdFx0XHR1OCBsaW5rX2lkID1cbitcdFx0XHRcdGF0aDEya19od19nZXRfcnhfbGlua19pZChkcC1cdTAwM2Vod19wYXJhbXMsIHBlZXIsXG4rXHRcdFx0XHRcdFx0XHQgcnhjYiwgc3RhdHVzKTtcbitcbitcdFx0XHRpZiAobGlua19pZCBcdTAwM2UgMClcbitcdFx0XHRcdGxpbmtfcHVic3RhID1cbitcdFx0XHRcdFx0cmN1X2RlcmVmZXJlbmNlKHB1YnN0YS1cdTAwM2VsaW5rW2xpbmtfaWRdKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRsaW5rX3B1YnN0YSA9IFx1MDAyNnB1YnN0YS1cdTAwM2VkZWZsaW5rO1xuK1x0XHR9XG4rXHR9XG4gXG4gXHRhdGgxMmtfZGJnKGRwLVx1MDAzZWFiLCBBVEgxMktfREJHX0RBVEEsXG4gXHRcdCAgIFwicnggc2tiICVwIGxlbiAldSBwZWVyICVwTSAlZCAlcyBzbiAldSAlcyVzJXMlcyVzJXMlcyVzJXMlcyByYXRlX2lkeCAldSB2aHRfbnNzICV1IGZyZXEgJXUgYmFuZCAldSBmbGFnIDB4JXggZmNzLWVyciAlaSBtaWMtZXJyICVpIGFtc2R1LW1vcmUgJWlcXG5cIixcbkBAIC0xNDIyLDcgKzE0MzMsOCBAQCB2b2lkIGF0aDEya19kcF9yeF9kZWxpdmVyX21zZHUoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LCBzdHJ1Y3QgbmFwaV9zdHJ1Y1xuIFxuIFx0LyogVE9ETzogdHJhY2UgcnggcGFja2V0ICovXG4gXG4tXHRpZWVlODAyMTFfcnhfbmFwaShhdGgxMmtfcGRldl9kcF90b19odyhkcF9wZGV2KSwgcHVic3RhLCBtc2R1LCBuYXBpKTtcbitcdGllZWU4MDIxMV9yeF9uYXBpKGF0aDEya19wZGV2X2RwX3RvX2h3KGRwX3BkZXYpLCBsaW5rX3B1YnN0YSwgbXNkdSxcbitcdFx0XHQgIG5hcGkpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGF0aDEya19kcF9yeF9kZWxpdmVyX21zZHUpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaHcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaHcuaFxuaW5kZXggNDljZmQ1ZGZjNzBhNi4uMjY4ZjBhOGZkNDZkZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaHcuaFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9ody5oXG5AQCAtMjQ4LDkgKzI0OCw5IEBAIHN0cnVjdCBhdGgxMmtfaHdfb3BzIHtcbiBcdGJvb2wgKCpkcF9zcm5nX2lzX3R4X2NvbXBfcmluZykoaW50IHJpbmdfbnVtKTtcbiBcdGJvb2wgKCppc19mcmFtZV9saW5rX2Fnbm9zdGljKShzdHJ1Y3QgYXRoMTJrX2xpbmtfdmlmICphcnZpZixcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQpO1xuLVx0dm9pZCAoKnNldF9yeF9saW5rX2lkKShzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXG4tXHRcdFx0ICAgICAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsXG4tXHRcdFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpO1xuK1x0aW50ICgqZ2V0X3J4X2xpbmtfaWQpKHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcbitcdFx0XHQgICAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxuK1x0XHRcdCAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpO1xuIH07XG4gXG4gc3RhdGljIGlubGluZVxuQEAgLTI4MSwxMyArMjgxLDE1IEBAIHN0YXRpYyBpbmxpbmUgaW50IGF0aDEya19od19tYWNfaWRfdG9fc3JuZ19pZChjb25zdCBzdHJ1Y3QgYXRoMTJrX2h3X3BhcmFtcyAqaHcsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGF0aDEya19od19zZXRfcnhfbGlua19pZChjb25zdCBzdHJ1Y3QgYXRoMTJrX2h3X3BhcmFtcyAqaHcsXG4tXHRcdFx0XHRcdCAgICBzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXG4tXHRcdFx0XHRcdCAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxuLVx0XHRcdFx0XHQgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cylcbitzdGF0aWMgaW5saW5lIGludCBhdGgxMmtfaHdfZ2V0X3J4X2xpbmtfaWQoY29uc3Qgc3RydWN0IGF0aDEya19od19wYXJhbXMgKmh3LFxuK1x0XHRcdFx0XHQgICBzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXG4rXHRcdFx0XHRcdCAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsXG4rXHRcdFx0XHRcdCAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpXG4ge1xuLVx0aWYgKGh3LVx1MDAzZWh3X29wcy1cdTAwM2VzZXRfcnhfbGlua19pZClcbi1cdFx0aHctXHUwMDNlaHdfb3BzLVx1MDAzZXNldF9yeF9saW5rX2lkKGRwX3BlZXIsIHJ4Y2IsIHN0YXR1cyk7XG4rXHRpZiAoaHctXHUwMDNlaHdfb3BzLVx1MDAzZWdldF9yeF9saW5rX2lkKVxuK1x0XHRyZXR1cm4gaHctXHUwMDNlaHdfb3BzLVx1MDAzZWdldF9yeF9saW5rX2lkKGRwX3BlZXIsIHJ4Y2IsIHN0YXR1cyk7XG4rXG4rXHRyZXR1cm4gLTE7XG4gfVxuIFxuIHN0cnVjdCBhdGgxMmtfZndfaWUge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguY1xuaW5kZXggOTVkODdkZDY3ODcyZi4uOGI3MjJlZTBhZDhmYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5jXG5AQCAtMjMxNywxNyArMjMxNywxNiBAQCBhdGgxMmtfd2lmaTdfZHBfcnhkZXNjX21wZHVfdmFsaWQoc3RydWN0IGF0aDEya19iYXNlICphYixcbiBcdHJldHVybiB0bHZfdGFnID09IEhBTF9SWF9NUERVX1NUQVJUO1xuIH1cbiBcbi12b2lkXG4tYXRoMTJrX3dpZmk3X2RwX3J4X3NldF9saW5rX2lkX3FjbjkyNzQoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLFxuK2ludFxuK2F0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF9xY245Mjc0KHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpXG4ge1xuLVx0c3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQgPSAxO1xuLVx0c3RhdHVzLVx1MDAzZWxpbmtfaWQgPSBkcF9wZWVyLVx1MDAzZWh3X2xpbmtzW3J4Y2ItXHUwMDNlaHdfbGlua19pZF07XG4rXHRyZXR1cm4gZHBfcGVlci1cdTAwM2Vod19saW5rc1tyeGNiLVx1MDAzZWh3X2xpbmtfaWRdO1xuIH1cbiBcbi12b2lkXG4tYXRoMTJrX3dpZmk3X2RwX3J4X3NldF9saW5rX2lkX3djbjc4NTAoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLFxuK2ludFxuK2F0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF93Y243ODUwKHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpXG4ge1xuQEAgLTIzNDEsMTAgKzIzNDAsOSBAQCBhdGgxMmtfd2lmaTdfZHBfcnhfc2V0X2xpbmtfaWRfd2NuNzg1MChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXG4gXHRsaW5rc19tYXAgPSBSRUFEX09OQ0UoZHBfcGVlci1cdTAwM2VsaW5rX3BlZXJzX21hcCk7XG4gXHRmb3JfZWFjaF9zZXRfYml0KGksIFx1MDAyNmxpbmtzX21hcCwgQVRIMTJLX05VTV9NQVhfTElOS1MpIHtcbiBcdFx0bGlua19wZWVyID0gcmN1X2RlcmVmZXJlbmNlKGRwX3BlZXItXHUwMDNlbGlua19wZWVyc1tpXSk7XG4tXHRcdGlmIChsaW5rX3BlZXIgXHUwMDI2XHUwMDI2IGxpbmtfcGVlci1cdTAwM2VwZWVyX2lkID09IHJ4Y2ItXHUwMDNlcGVlcl9pZCkge1xuLVx0XHRcdHN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkID0gMTtcbi1cdFx0XHRzdGF0dXMtXHUwMDNlbGlua19pZCA9IGxpbmtfcGVlci1cdTAwM2VsaW5rX2lkO1xuLVx0XHRcdHJldHVybjtcbi1cdFx0fVxuK1x0XHRpZiAobGlua19wZWVyIFx1MDAyNlx1MDAyNiBsaW5rX3BlZXItXHUwMDNlcGVlcl9pZCA9PSByeGNiLVx1MDAzZXBlZXJfaWQpXG4rXHRcdFx0cmV0dXJuIGxpbmtfcGVlci1cdTAwM2VsaW5rX2lkO1xuIFx0fVxuK1xuK1x0cmV0dXJuIC0xO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmhcbmluZGV4IDFkM2E0Nzg4YTJkZDkuLmQ2ODQ4OWZmN2IwMzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmhcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguaFxuQEAgLTU3LDEwICs1NywxMCBAQCBhdGgxMmtfd2lmaTdfZHBfcnhkZXNjX21wZHVfdmFsaWQoc3RydWN0IGF0aDEya19iYXNlICphYixcbiBcdFx0XHRcdCAgc3RydWN0IGhhbF9yeF9kZXNjICpyeF9kZXNjKTtcbiBpbnQgYXRoMTJrX3dpZmk3X2RwX3J4X3RpZF9kZWxldGVfaGFuZGxlcihzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBhdGgxMmtfZHBfcnhfdGlkX3J4cSAqcnhfdGlkKTtcbi12b2lkIGF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF9xY245Mjc0KHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcbi1cdFx0XHRcdFx0ICAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsXG4tXHRcdFx0XHRcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKTtcbi12b2lkIGF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF93Y243ODUwKHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcbi1cdFx0XHRcdFx0ICAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsXG4tXHRcdFx0XHRcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKTtcbitpbnQgYXRoMTJrX3dpZmk3X2RwX3J4X2dldF9saW5rX2lkX3FjbjkyNzQoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLFxuK1x0XHRcdFx0XHQgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxuK1x0XHRcdFx0XHQgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKTtcbitpbnQgYXRoMTJrX3dpZmk3X2RwX3J4X2dldF9saW5rX2lkX3djbjc4NTAoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLFxuK1x0XHRcdFx0XHQgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxuK1x0XHRcdFx0XHQgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2h3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2h3LmNcbmluZGV4IDRjMTExOWVkY2FlZGMuLjNjZDM1MTQ2NDI5NmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2h3LmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaHcuY1xuQEAgLTE1OCw3ICsxNTgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDEya19od19vcHMgcWNuOTI3NF9vcHMgPSB7XG4gXHQuZ2V0X3Jpbmdfc2VsZWN0b3IgPSBhdGgxMmtfd2lmaTdfaHdfZ2V0X3Jpbmdfc2VsZWN0b3JfcWNuOTI3NCxcbiBcdC5kcF9zcm5nX2lzX3R4X2NvbXBfcmluZyA9IGF0aDEya193aWZpN19kcF9zcm5nX2lzX2NvbXBfcmluZ19xY245Mjc0LFxuIFx0LmlzX2ZyYW1lX2xpbmtfYWdub3N0aWMgPSBhdGgxMmtfd2lmaTdfaXNfZnJhbWVfbGlua19hZ25vc3RpY19xY245Mjc0LFxuLVx0LnNldF9yeF9saW5rX2lkID0gYXRoMTJrX3dpZmk3X2RwX3J4X3NldF9saW5rX2lkX3FjbjkyNzQsXG4rXHQuZ2V0X3J4X2xpbmtfaWQgPSBhdGgxMmtfd2lmaTdfZHBfcnhfZ2V0X2xpbmtfaWRfcWNuOTI3NCxcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoMTJrX2h3X29wcyB3Y243ODUwX29wcyA9IHtcbkBAIC0xNjksNyArMTY5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfb3BzIHdjbjc4NTBfb3BzID0ge1xuIFx0LmdldF9yaW5nX3NlbGVjdG9yID0gYXRoMTJrX3dpZmk3X2h3X2dldF9yaW5nX3NlbGVjdG9yX3djbjc4NTAsXG4gXHQuZHBfc3JuZ19pc190eF9jb21wX3JpbmcgPSBhdGgxMmtfd2lmaTdfZHBfc3JuZ19pc19jb21wX3Jpbmdfd2NuNzg1MCxcbiBcdC5pc19mcmFtZV9saW5rX2Fnbm9zdGljID0gYXRoMTJrX3dpZmk3X2lzX2ZyYW1lX2xpbmtfYWdub3N0aWNfd2NuNzg1MCxcbi1cdC5zZXRfcnhfbGlua19pZCA9IGF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF93Y243ODUwLFxuK1x0LmdldF9yeF9saW5rX2lkID0gYXRoMTJrX3dpZmk3X2RwX3J4X2dldF9saW5rX2lkX3djbjc4NTAsXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDEya19od19vcHMgcWNjMjA3Ml9vcHMgPSB7XG5AQCAtMTgwLDcgKzE4MCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoMTJrX2h3X29wcyBxY2MyMDcyX29wcyA9IHtcbiBcdC5nZXRfcmluZ19zZWxlY3RvciA9IGF0aDEya193aWZpN19od19nZXRfcmluZ19zZWxlY3Rvcl93Y243ODUwLFxuIFx0LmRwX3NybmdfaXNfdHhfY29tcF9yaW5nID0gYXRoMTJrX3dpZmk3X2RwX3NybmdfaXNfY29tcF9yaW5nX3djbjc4NTAsXG4gXHQuaXNfZnJhbWVfbGlua19hZ25vc3RpYyA9IGF0aDEya193aWZpN19pc19mcmFtZV9saW5rX2Fnbm9zdGljX3djbjc4NTAsXG4tXHQuc2V0X3J4X2xpbmtfaWQgPSBhdGgxMmtfd2lmaTdfZHBfcnhfc2V0X2xpbmtfaWRfd2NuNzg1MCxcbitcdC5nZXRfcnhfbGlua19pZCA9IGF0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF93Y243ODUwLFxuIH07XG4gXG4gI2RlZmluZSBBVEgxMktfVFhfUklOR19NQVNLXzAgMHgxXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmNcbmluZGV4IDJiNzA3ZmZjMWEyMGYuLjVkNjJjNGM4NjFiYjkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jXG5AQCAtNzI2MCw3ICs3MjYwLDYgQEAgc3RhdGljIHZvaWQgYXRoMTJrX21nbXRfcnhfZXZlbnQoc3RydWN0IGF0aDEya19iYXNlICphYiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHN0cnVjdCBhdGgxMmtfd21pX21nbXRfcnhfYXJnIHJ4X2V2ID0ge307XG4gXHRzdHJ1Y3QgYXRoMTJrICphcjtcbiBcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcbi1cdHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEgPSBOVUxMO1xuIFx0c3RydWN0IGF0aDEya19kcF9saW5rX3BlZXIgKnBlZXI7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyO1xuIFx0Ym9vbCBpc180YWRkcl9udWxsX3BrdDtcbkBAIC03MzYyLDExICs3MzYxLDYgQEAgc3RhdGljIHZvaWQgYXRoMTJrX21nbXRfcnhfZXZlbnQoc3RydWN0IGF0aDEya19iYXNlICphYiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0XHRkZXZfa2ZyZWVfc2tiKHNrYik7XG4gXHRcdFx0Z290byBleGl0O1xuIFx0XHR9XG4tXHRcdHB1YnN0YSA9IHBlZXItXHUwMDNlc3RhO1xuLVx0XHRpZiAocHVic3RhIFx1MDAyNlx1MDAyNiBwdWJzdGEtXHUwMDNldmFsaWRfbGlua3MpIHtcbi1cdFx0XHRzdGF0dXMtXHUwMDNlbGlua192YWxpZCA9IDE7XG4tXHRcdFx0c3RhdHVzLVx1MDAzZWxpbmtfaWQgPSBwZWVyLVx1MDAzZWxpbmtfaWQ7XG4tXHRcdH1cbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2ZHAtXHUwMDNlZHBfbG9jayk7XG4gXHRcdGdvdG8gc2VuZF9yeDtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hZ2cuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FnZy5jXG5pbmRleCA5NjEwMmQyYWYyY2Y5Li5jNDVjNDczMzc1MDllIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYWdnLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FnZy5jXG5AQCAtNyw3ICs3LDggQEBcbiAjaW5jbHVkZSBcImhjbWQuaFwiXG4gXG4gc3RhdGljIHZvaWRcbi1pd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbitpd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMoc3RydWN0IGl3bF9tbGQgKm1sZCxcbitcdFx0XHQgICAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEsXG4gXHRcdFx0ICAgICAgIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbiBcdFx0XHQgICAgICAgc3RydWN0IGl3bF9tbGRfYmFpZF9kYXRhICpiYWlkX2RhdGEsXG4gXHRcdFx0ICAgICAgIHN0cnVjdCBpd2xfbWxkX3Jlb3JkZXJfYnVmZmVyICpyZW9yZGVyX2J1ZixcbkBAIC0zMiw3ICszMyw3IEBAIGl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxuIFx0XHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoc2tiX2xpc3QpKSkge1xuIFx0XHRcdGl3bF9tbGRfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEobWxkLCBuYXBpLCBza2IsXG4gXHRcdFx0XHRcdFx0XHRyZW9yZGVyX2J1Zi1cdTAwM2VxdWV1ZSxcbi1cdFx0XHRcdFx0XHRcdHN0YSk7XG4rXHRcdFx0XHRcdFx0XHRsaW5rX3N0YSk7XG4gXHRcdFx0cmVvcmRlcl9idWYtXHUwMDNlbnVtX3N0b3JlZC0tO1xuIFx0XHR9XG4gXHR9XG5AQCAtNzQsNyArNzUsNyBAQCBzdGF0aWMgdm9pZCBpd2xfbWxkX3JlbGVhc2VfZnJhbWVzX2Zyb21fbm90aWYoc3RydWN0IGl3bF9tbGQgKm1sZCxcbiBcbiBcdHJlb3JkZXJfYnVmID0gXHUwMDI2YmFfZGF0YS1cdTAwM2VyZW9yZGVyX2J1ZltxdWV1ZV07XG4gXG4tXHRpd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMobWxkLCBsaW5rX3N0YS1cdTAwM2VzdGEsIG5hcGksIGJhX2RhdGEsXG4rXHRpd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMobWxkLCBsaW5rX3N0YSwgbmFwaSwgYmFfZGF0YSxcbiBcdFx0XHRcdCAgICAgICByZW9yZGVyX2J1ZiwgbnNzbik7XG4gb3V0X3VubG9jazpcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuQEAgLTE4MCw3ICsxODEsNyBAQCB2b2lkIGl3bF9tbGRfZGVsX2JhKHN0cnVjdCBpd2xfbWxkICptbGQsIGludCBxdWV1ZSxcbiBcdHJlb3JkZXJfYnVmID0gXHUwMDI2YmFfZGF0YS1cdTAwM2VyZW9yZGVyX2J1ZltxdWV1ZV07XG4gXG4gXHQvKiByZWxlYXNlIGFsbCBmcmFtZXMgdGhhdCBhcmUgaW4gdGhlIHJlb3JkZXIgYnVmZmVyIHRvIHRoZSBzdGFjayAqL1xuLVx0aXdsX21sZF9yZW9yZGVyX3JlbGVhc2VfZnJhbWVzKG1sZCwgbGlua19zdGEtXHUwMDNlc3RhLCBOVUxMLFxuK1x0aXdsX21sZF9yZW9yZGVyX3JlbGVhc2VfZnJhbWVzKG1sZCwgbGlua19zdGEsIE5VTEwsXG4gXHRcdFx0XHQgICAgICAgYmFfZGF0YSwgcmVvcmRlcl9idWYsXG4gXHRcdFx0XHQgICAgICAgaWVlZTgwMjExX3NuX2FkZChyZW9yZGVyX2J1Zi1cdTAwM2VoZWFkX3NuLFxuIFx0XHRcdFx0XHRcdFx0YmFfZGF0YS1cdTAwM2VidWZfc2l6ZSkpO1xuQEAgLTE5Myw3ICsxOTQsNyBAQCB2b2lkIGl3bF9tbGRfZGVsX2JhKHN0cnVjdCBpd2xfbWxkICptbGQsIGludCBxdWV1ZSxcbiAgKi9cbiBlbnVtIGl3bF9tbGRfcmVvcmRlcl9yZXN1bHRcbiBpd2xfbWxkX3Jlb3JkZXIoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuLVx0XHRpbnQgcXVldWUsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXG4rXHRcdGludCBxdWV1ZSwgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEsXG4gXHRcdHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpd2xfcnhfbXBkdV9kZXNjICpkZXNjKVxuIHtcbiBcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAodm9pZCAqKXNrYl9tYWNfaGVhZGVyKHNrYik7XG5AQCAtMjI4LDEyICsyMjksMTIgQEAgaXdsX21sZF9yZW9yZGVyKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbiBcdFx0cmV0dXJuIElXTF9NTERfUEFTU19TS0I7XG4gXG4gXHQvKiBubyBzdGEgeWV0ICovXG4tXHRpZiAoSVdMX0ZXX0NIRUNLKG1sZCwgIXN0YSxcbitcdGlmIChJV0xfRldfQ0hFQ0sobWxkLCAhbGlua19zdGEsXG4gXHRcdFx0IFwiR290IHZhbGlkIEJBSUQgd2l0aG91dCBhIHZhbGlkIHN0YXRpb24gYXNzaWduZWQgLSAlZFxcblwiLFxuIFx0XHRcdCBiYWlkKSlcbiBcdFx0cmV0dXJuIElXTF9NTERfUEFTU19TS0I7XG4gXG4tXHRtbGRfc3RhID0gaXdsX21sZF9zdGFfZnJvbV9tYWM4MDIxMShzdGEpO1xuK1x0bWxkX3N0YSA9IGl3bF9tbGRfc3RhX2Zyb21fbWFjODAyMTEobGlua19zdGEtXHUwMDNlc3RhKTtcbiBcbiBcdC8qIG5vdCBhIGRhdGEgcGFja2V0ICovXG4gXHRpZiAoIWllZWU4MDIxMV9pc19kYXRhX3FvcyhoZHItXHUwMDNlZnJhbWVfY29udHJvbCkgfHxcbkBAIC0zMjQsNyArMzI1LDcgQEAgaXdsX21sZF9yZW9yZGVyKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbiBcdCAqIHdpbGwgYmUgcmVsZWFzZWQgd2hlbiB0aGUgZnJhbWUgcmVsZWFzZSBub3RpZmljYXRpb24gYXJyaXZlcy5cbiBcdCAqL1xuIFx0aWYgKCFhbXNkdSB8fCBsYXN0X3N1YmZyYW1lKVxuLVx0XHRpd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMobWxkLCBzdGEsIG5hcGksIGJhaWRfZGF0YSxcbitcdFx0aXdsX21sZF9yZW9yZGVyX3JlbGVhc2VfZnJhbWVzKG1sZCwgbGlua19zdGEsIG5hcGksIGJhaWRfZGF0YSxcbiBcdFx0XHRcdFx0ICAgICAgIGJ1ZmZlciwgbnNzbik7XG4gXHRlbHNlIGlmIChidWZmZXItXHUwMDNlbnVtX3N0b3JlZCA9PSAxKVxuIFx0XHRidWZmZXItXHUwMDNlaGVhZF9zbiA9IG5zc247XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYWdnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hZ2cuaFxuaW5kZXggNjUxYzgwZDFjN2NkYS4uYzZjZDVmYTIxOWJlZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FnZy5oXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hZ2cuaFxuQEAgLTEsNiArMSw2IEBAXG4gLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgQlNELTMtQ2xhdXNlICovXG4gLypcbi0gKiBDb3B5cmlnaHQgKEMpIDIwMjQgSW50ZWwgQ29ycG9yYXRpb25cbisgKiBDb3B5cmlnaHQgKEMpIDIwMjQsIDIwMjYgSW50ZWwgQ29ycG9yYXRpb25cbiAgKi9cbiAjaWZuZGVmIF9faXdsX2FnZ19oX19cbiAjZGVmaW5lIF9faXdsX2FnZ19oX19cbkBAIC0xMDYsNyArMTA2LDcgQEAgaW50IGl3bF9tbGRfYW1wZHVfcnhfc3RvcChzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxuIFxuIGVudW0gaXdsX21sZF9yZW9yZGVyX3Jlc3VsdFxuIGl3bF9tbGRfcmVvcmRlcihzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4tXHRcdGludCBxdWV1ZSwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbitcdFx0aW50IHF1ZXVlLCBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSxcbiBcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGl3bF9yeF9tcGR1X2Rlc2MgKmRlc2MpO1xuIFxuIHZvaWQgaXdsX21sZF9oYW5kbGVfZnJhbWVfcmVsZWFzZV9ub3RpZihzdHJ1Y3QgaXdsX21sZCAqbWxkLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5jXG5pbmRleCAyNjk0MzlkNzg5ZjQ2Li4wMmJkZjZjY2JjZGM5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguY1xuQEAgLTQ3LDcgKzQ3LDggQEAgaXdsX21sZF9maWxsX3BoeV9kYXRhX2Zyb21fbXBkdShzdHJ1Y3QgaXdsX21sZCAqbWxkLFxuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGludCBpd2xfbWxkX2NoZWNrX3BuKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0XHQgICBpbnQgcXVldWUsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpXG4rXHRcdFx0XHQgICBpbnQgcXVldWUsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSlcbiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKilza2JfbWFjX2hlYWRlcihza2IpO1xuIFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXRzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG5AQCAtNzEsMTMgKzcyLDEzIEBAIHN0YXRpYyBpbmxpbmUgaW50IGl3bF9tbGRfY2hlY2tfcG4oc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHQvKiBpZiB3ZSBhcmUgaGVyZSAtIHRoaXMgZm9yIHN1cmUgaXMgZWl0aGVyIENDTVAgb3IgR0NNUCAqL1xuLVx0aWYgKCFzdGEpIHtcbitcdGlmICghbGlua19zdGEpIHtcbiBcdFx0SVdMX0RFQlVHX0RST1AobWxkLFxuIFx0XHRcdCAgICAgICBcImV4cGVjdGVkIGh3LWRlY3J5cHRlZCB1bmljYXN0IGZyYW1lIGZvciBzdGF0aW9uXFxuXCIpO1xuIFx0XHRyZXR1cm4gLTE7XG4gXHR9XG4gXG4tXHRtbGRfc3RhID0gaXdsX21sZF9zdGFfZnJvbV9tYWM4MDIxMShzdGEpO1xuK1x0bWxkX3N0YSA9IGl3bF9tbGRfc3RhX2Zyb21fbWFjODAyMTEobGlua19zdGEtXHUwMDNlc3RhKTtcbiBcbiBcdGV4dGl2ID0gKHU4ICopaGRyICsgaWVlZTgwMjExX2hkcmxlbihoZHItXHUwMDNlZnJhbWVfY29udHJvbCk7XG4gXHRrZXlpZHggPSBleHRpdlszXSBcdTAwM2VcdTAwM2UgNjtcbkBAIC0xMTksMTcgKzEyMCwxNyBAQCBzdGF0aWMgaW5saW5lIGludCBpd2xfbWxkX2NoZWNrX3BuKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBza19idWZmICpza2IsXG4gdm9pZCBpd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKHN0cnVjdCBpd2xfbWxkICptbGQsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbiBcdFx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHF1ZXVlLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKVxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSlcbiB7XG4gXHRLVU5JVF9TVEFUSUNfU1RVQl9SRURJUkVDVChpd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExLFxuLVx0XHRcdFx0ICAgbWxkLCBuYXBpLCBza2IsIHF1ZXVlLCBzdGEpO1xuK1x0XHRcdFx0ICAgbWxkLCBuYXBpLCBza2IsIHF1ZXVlLCBsaW5rX3N0YSk7XG4gXG4tXHRpZiAodW5saWtlbHkoaXdsX21sZF9jaGVja19wbihtbGQsIHNrYiwgcXVldWUsIHN0YSkpKSB7XG4rXHRpZiAodW5saWtlbHkoaXdsX21sZF9jaGVja19wbihtbGQsIHNrYiwgcXVldWUsIGxpbmtfc3RhKSkpIHtcbiBcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdGllZWU4MDIxMV9yeF9uYXBpKG1sZC1cdTAwM2Vodywgc3RhLCBza2IsIG5hcGkpO1xuK1x0aWVlZTgwMjExX3J4X25hcGkobWxkLVx1MDAzZWh3LCBsaW5rX3N0YSwgc2tiLCBuYXBpKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9JRl9JV0xXSUZJX0tVTklUKGl3bF9tbGRfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEpO1xuIFxuQEAgLTE3MjgsNyArMTcyOSw3IEBAIHN0YXRpYyB2b2lkIGl3bF9tbGRfdXBkYXRlX2xhc3RfcnhfdGltZXN0YW1wKHN0cnVjdCBpd2xfbWxkICptbGQsIHU4IGJhaWQpXG4gICogU2V0cyAqZHJvcCB0byB0cnVlIGlmIHRoZSBwYWNrZXQgc2hvdWxkIGJlIGRyb3BwZWQuXG4gICogUmV0dXJucyB0aGUgc3RhdGlvbiBpZiBmb3VuZCwgb3IgTlVMTCBvdGhlcndpc2UuXG4gICovXG4tc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfc3RhICpcbitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqXG4gaXdsX21sZF9yeF93aXRoX3N0YShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLFxuIFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0ICAgIGNvbnN0IHN0cnVjdCBpd2xfcnhfbXBkdV9kZXNjICptcGR1X2Rlc2MsXG5AQCAtMTc2NCwxMSArMTc2NSw2IEBAIGl3bF9tbGRfcnhfd2l0aF9zdGEoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcixcbiBcbiBcdHJ4X3N0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpO1xuIFxuLVx0aWYgKGxpbmtfc3RhIFx1MDAyNlx1MDAyNiBzdGEtXHUwMDNldmFsaWRfbGlua3MpIHtcbi1cdFx0cnhfc3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQgPSB0cnVlO1xuLVx0XHRyeF9zdGF0dXMtXHUwMDNlbGlua19pZCA9IGxpbmtfc3RhLVx1MDAzZWxpbmtfaWQ7XG4tXHR9XG4tXG4gXHQvKiBmaWxsIGNoZWNrc3VtICovXG4gXHRpZiAoaWVlZTgwMjExX2lzX2RhdGEoaGRyLVx1MDAzZWZyYW1lX2NvbnRyb2wpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHBrdC1cdTAwM2VsZW5fbl9mbGFncyBcdTAwMjYgY3B1X3RvX2xlMzIoRkhfUlNDU1JfUlBBX0VOKSkge1xuQEAgLTE4MDMsMTAgKzE3OTksMTAgQEAgaXdsX21sZF9yeF93aXRoX3N0YShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLFxuIFx0XHRcdFx0XHRcdFx0ICAgIHF1ZXVlKTtcbiBcdH1cbiBcbi1cdHJldHVybiBzdGE7XG4rXHRyZXR1cm4gbGlua19zdGE7XG4gfVxuIFxuLXN0YXRpYyBpbnQgaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbitzdGF0aWMgaW50IGl3bF9tbGRfcnhfbWdtdF9wcm90KHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhLFxuIFx0XHRcdFx0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcixcbiBcdFx0XHRcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMsXG4gXHRcdFx0XHR1MzIgbXBkdV9zdGF0dXMsXG5AQCAtMTgyMCw3ICsxODE2LDYgQEAgc3RhdGljIGludCBpd2xfbWxkX3J4X21nbXRfcHJvdChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxuIFx0c3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5O1xuIFx0Y29uc3QgdTggKmZyYW1lID0gKHZvaWQgKiloZHI7XG4gXHRjb25zdCB1OCAqbW1pZTtcbi1cdHU4IGxpbmtfaWQ7XG4gXG4gXHRpZiAoKG1wZHVfc3RhdHVzIFx1MDAyNiBJV0xfUlhfTVBEVV9TVEFUVVNfU0VDX01BU0spID09XG4gXHQgICAgIElXTF9SWF9NUERVX1NUQVRVU19TRUNfTk9ORSlcbkBAIC0xODM2LDEwICsxODMxLDEwIEBAIHN0YXRpYyBpbnQgaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbiBcdGlmICghaWVlZTgwMjExX2lzX2JlYWNvbihoZHItXHUwMDNlZnJhbWVfY29udHJvbCkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWYgKCFzdGEpXG4rXHRpZiAoIWxpbmtfc3RhKVxuIFx0XHRyZXR1cm4gLTE7XG4gXG4tXHRtbGRfc3RhID0gaXdsX21sZF9zdGFfZnJvbV9tYWM4MDIxMShzdGEpO1xuK1x0bWxkX3N0YSA9IGl3bF9tbGRfc3RhX2Zyb21fbWFjODAyMTEobGlua19zdGEtXHUwMDNlc3RhKTtcbiBcdG1sZF92aWYgPSBpd2xfbWxkX3ZpZl9mcm9tX21hYzgwMjExKG1sZF9zdGEtXHUwMDNldmlmKTtcbiBcbiBcdC8qIGtleSBtaXNtYXRjaCAtIHdpbGwgYWxzbyByZXBvcnQgIU1JQ19PSyBidXQgd2Ugc2hvdWxkbid0IGNvdW50IGl0ICovXG5AQCAtMTg1Myw4ICsxODQ4LDcgQEAgc3RhdGljIGludCBpd2xfbWxkX3J4X21nbXRfcHJvdChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbi1cdGxpbmtfaWQgPSByeF9zdGF0dXMtXHUwMDNlbGlua192YWxpZCA/IHJ4X3N0YXR1cy1cdTAwM2VsaW5rX2lkIDogMDtcbi1cdGxpbmsgPSByY3VfZGVyZWZlcmVuY2UobWxkX3ZpZi1cdTAwM2VsaW5rW2xpbmtfaWRdKTtcbitcdGxpbmsgPSByY3VfZGVyZWZlcmVuY2UobWxkX3ZpZi1cdTAwM2VsaW5rW2xpbmtfc3RhLVx1MDAzZWxpbmtfaWRdKTtcbiBcdGlmIChXQVJOX09OX09OQ0UoIWxpbmspKVxuIFx0XHRyZXR1cm4gLTE7XG4gXG5AQCAtMTkwNSw3ICsxODk5LDcgQEAgc3RhdGljIGludCBpd2xfbWxkX3J4X21nbXRfcHJvdChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxuIH1cbiBcbiBzdGF0aWMgaW50IGl3bF9tbGRfcnhfY3J5cHRvKHN0cnVjdCBpd2xfbWxkICptbGQsXG4tXHRcdFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxuK1x0XHRcdCAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLFxuIFx0XHRcdCAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cyxcbiBcdFx0XHQgICAgIHN0cnVjdCBpd2xfcnhfbXBkdV9kZXNjICpkZXNjLCBpbnQgcXVldWUsXG5AQCAtMTkxNSw3ICsxOTA5LDcgQEAgc3RhdGljIGludCBpd2xfbWxkX3J4X2NyeXB0byhzdHJ1Y3QgaXdsX21sZCAqbWxkLFxuIFxuIFx0aWYgKHVubGlrZWx5KGllZWU4MDIxMV9pc19tZ210KGhkci1cdTAwM2VmcmFtZV9jb250cm9sKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICAhaWVlZTgwMjExX2hhc19wcm90ZWN0ZWQoaGRyLVx1MDAzZWZyYW1lX2NvbnRyb2wpKSlcbi1cdFx0cmV0dXJuIGl3bF9tbGRfcnhfbWdtdF9wcm90KHN0YSwgaGRyLCByeF9zdGF0dXMsIHN0YXR1cyxcbitcdFx0cmV0dXJuIGl3bF9tbGRfcnhfbWdtdF9wcm90KGxpbmtfc3RhLCBoZHIsIHJ4X3N0YXR1cywgc3RhdHVzLFxuIFx0XHRcdFx0XHQgICAgbGUxNl90b19jcHUoZGVzYy1cdTAwM2VtcGR1X2xlbikpO1xuIFxuIFx0aWYgKCFpZWVlODAyMTFfaGFzX3Byb3RlY3RlZChoZHItXHUwMDNlZnJhbWVfY29udHJvbCkgfHxcbkBAIC0yMDIzLDcgKzIwMTcsNyBAQCB2b2lkIGl3bF9tbGRfcnhfbXBkdShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHRzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gcnhiX2FkZHIocnhiKTtcbiBcdHN0cnVjdCBpd2xfbWxkX3J4X3BoeV9kYXRhIHBoeV9kYXRhID0ge307XG4gXHRzdHJ1Y3QgaXdsX3J4X21wZHVfZGVzYyAqbXBkdV9kZXNjID0gKHZvaWQgKilwa3QtXHUwMDNlZGF0YTtcbi1cdHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGE7XG4rXHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFx0c2l6ZV90IG1wZHVfZGVzY19zaXplID0gc2l6ZW9mKCptcGR1X2Rlc2MpO1xuQEAgLTIwODYsNyArMjA4MCw4IEBAIHZvaWQgaXdsX21sZF9yeF9tcGR1KHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcbi1cdHN0YSA9IGl3bF9tbGRfcnhfd2l0aF9zdGEobWxkLCBoZHIsIHNrYiwgbXBkdV9kZXNjLCBwa3QsIHF1ZXVlLCBcdTAwMjZkcm9wKTtcbitcdGxpbmtfc3RhID0gaXdsX21sZF9yeF93aXRoX3N0YShtbGQsIGhkciwgc2tiLCBtcGR1X2Rlc2MsIHBrdCwgcXVldWUsXG4rXHRcdFx0XHQgICAgICAgXHUwMDI2ZHJvcCk7XG4gXHRpZiAoZHJvcClcbiBcdFx0Z290byBkcm9wO1xuIFxuQEAgLTIxMjcsNyArMjEyMiw3IEBAIHZvaWQgaXdsX21sZF9yeF9tcGR1KHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbiBcbiBcdGl3bF9tbGRfcnhfZmlsbF9zdGF0dXMobWxkLCBsaW5rX2lkLCBoZHIsIHNrYiwgXHUwMDI2cGh5X2RhdGEpO1xuIFxuLVx0aWYgKGl3bF9tbGRfcnhfY3J5cHRvKG1sZCwgc3RhLCBoZHIsIHJ4X3N0YXR1cywgbXBkdV9kZXNjLCBxdWV1ZSxcbitcdGlmIChpd2xfbWxkX3J4X2NyeXB0byhtbGQsIGxpbmtfc3RhLCBoZHIsIHJ4X3N0YXR1cywgbXBkdV9kZXNjLCBxdWV1ZSxcbiBcdFx0XHQgICAgICBsZTMyX3RvX2NwdShwa3QtXHUwMDNlbGVuX25fZmxhZ3MpLCBcdTAwMjZjcnlwdG9fbGVuKSlcbiBcdFx0Z290byBkcm9wO1xuIFxuQEAgLTIxNDAsNyArMjEzNSw4IEBAIHZvaWQgaXdsX21sZF9yeF9tcGR1KHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbiBcdGlmIChpd2xfbWxkX3RpbWVfc3luY19mcmFtZShtbGQsIHNrYiwgaGRyLVx1MDAzZWFkZHIyKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRyZW9yZGVyX3JlcyA9IGl3bF9tbGRfcmVvcmRlcihtbGQsIG5hcGksIHF1ZXVlLCBzdGEsIHNrYiwgbXBkdV9kZXNjKTtcbitcdHJlb3JkZXJfcmVzID0gaXdsX21sZF9yZW9yZGVyKG1sZCwgbmFwaSwgcXVldWUsIGxpbmtfc3RhLCBza2IsXG4rXHRcdFx0XHQgICAgICBtcGR1X2Rlc2MpO1xuIFx0c3dpdGNoIChyZW9yZGVyX3Jlcykge1xuIFx0Y2FzZSBJV0xfTUxEX1BBU1NfU0tCOlxuIFx0XHRicmVhaztcbkBAIC0yMTUzLDcgKzIxNDksNyBAQCB2b2lkIGl3bF9tbGRfcnhfbXBkdShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHRcdGdvdG8gZHJvcDtcbiBcdH1cbiBcbi1cdGl3bF9tbGRfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEobWxkLCBuYXBpLCBza2IsIHF1ZXVlLCBzdGEpO1xuK1x0aXdsX21sZF9wYXNzX3BhY2tldF90b19tYWM4MDIxMShtbGQsIG5hcGksIHNrYiwgcXVldWUsIGxpbmtfc3RhKTtcbiBcbiBcdGdvdG8gb3V0O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5oXG5pbmRleCA1NzNiODljM2M5YzYxLi5iMDhjNWFkZTNkYjhmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguaFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguaFxuQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBpd2xfbWxkX2hhbmRsZV9yc2Nfbm90aWYoc3RydWN0IGl3bF9tbGQgKm1sZCxcbiB2b2lkIGl3bF9tbGRfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEoc3RydWN0IGl3bF9tbGQgKm1sZCxcbiBcdFx0XHRcdCAgICAgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcXVldWUsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpO1xuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSk7XG4gXG4gdm9pZCBpd2xfbWxkX2hhbmRsZV9waHlfYWlyX3NuaWZmZXJfbm90aWYoc3RydWN0IGl3bF9tbGQgKm1sZCxcbiBcdFx0XHRcdFx0ICBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvdGVzdHMvYWdnLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC90ZXN0cy9hZ2cuY1xuaW5kZXggMjliMDI0OGNlYzNkZi4uZTllZmUyOTk2ZjA3MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3Rlc3RzL2FnZy5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC90ZXN0cy9hZ2cuY1xuQEAgLTIsNyArMiw3IEBAXG4gLypcbiAgKiBLVW5pdCB0ZXN0cyBmb3IgY2hhbm5lbCBoZWxwZXIgZnVuY3Rpb25zXG4gICpcbi0gKiBDb3B5cmlnaHQgKEMpIDIwMjQtMjAyNSBJbnRlbCBDb3Jwb3JhdGlvblxuKyAqIENvcHlyaWdodCAoQykgMjAyNC0yMDI2IEludGVsIENvcnBvcmF0aW9uXG4gICovXG4gI2luY2x1ZGUgXHUwMDNja3VuaXQvdGVzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNja3VuaXQvc3RhdGljX3N0dWIuaFx1MDAzZVxuQEAgLTQ0MSw3ICs0NDEsNyBAQCBzdGF0aWMgdm9pZFxuIGZha2VfaXdsX21sZF9wYXNzX3BhY2tldF90b19tYWM4MDIxMShzdHJ1Y3QgaXdsX21sZCAqbWxkLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBxdWV1ZSxcbi1cdFx0XHRcdCAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSlcbitcdFx0XHRcdCAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEpXG4ge1xuIFx0X19za2JfcXVldWVfdGFpbChcdTAwMjZnX3JlbGVhc2VkX3NrYnMsIHNrYik7XG4gXHRnX251bV9yZWxlYXNlZF9za2JzKys7XG5AQCAtNjMwLDcgKzYzMCw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfcmVvcmRlcl9idWZmZXIoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0bXBkdV9kZXNjID0gc2V0dXBfbXBkdV9kZXNjKCk7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRyZW9yZGVyX3JlcyA9IGl3bF9tbGRfcmVvcmRlcihtbGQsIE5VTEwsIFFVRVVFLCBzdGEsIHNrYiwgbXBkdV9kZXNjKTtcbitcdHJlb3JkZXJfcmVzID0gaXdsX21sZF9yZW9yZGVyKG1sZCwgTlVMTCwgUVVFVUUsIFx1MDAyNnN0YS1cdTAwM2VkZWZsaW5rLCBza2IsXG4rXHRcdFx0XHQgICAgICBtcGR1X2Rlc2MpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmVvcmRlcl9yZXMsIHBhcmFtLVx1MDAzZWV4cGVjdGVkLnJlb3JkZXJfcmVzKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnguY1xuaW5kZXggYWIxZWIyZWIwYzNjZC4uOGMxOTdhMDkwYzJiMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4LmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4LmNcbkBAIC05MCw3ICs5MCw3IEBAIHN0YXRpYyB2b2lkIGl3bF9tdm1fcGFzc19wYWNrZXRfdG9fbWFjODAyMTEoc3RydWN0IGl3bF9tdm0gKm12bSxcbiBcdFx0XHRcdGZyYWdsZW4sIHJ4Yi1cdTAwM2V0cnVlc2l6ZSk7XG4gXHR9XG4gXG4tXHRpZWVlODAyMTFfcnhfbmFwaShtdm0tXHUwMDNlaHcsIHN0YSwgc2tiLCBuYXBpKTtcbitcdGllZWU4MDIxMV9yeF9uYXBpKG12bS1cdTAwM2Vodywgc3RhID8gXHUwMDI2c3RhLVx1MDAzZWRlZmxpbmsgOiBOVUxMLCBza2IsIG5hcGkpO1xuIH1cbiBcbiAvKlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4bXEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4bXEuY1xuaW5kZXggN2YwYjRmNWRhYTIxNC4uOGM0MDA5ZDNhMDBjYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4bXEuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnhtcS5jXG5AQCAtMSw2ICsxLDYgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBCU0QtMy1DbGF1c2VcbiAvKlxuLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE0LCAyMDE4LTIwMjUgSW50ZWwgQ29ycG9yYXRpb25cbisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCwgMjAxOC0yMDI2IEludGVsIENvcnBvcmF0aW9uXG4gICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgSW50ZWwgTW9iaWxlIENvbW11bmljYXRpb25zIEdtYkhcbiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBJbnRlbCBEZXV0c2NobGFuZCBHbWJIXG4gICovXG5AQCAtMjQzLDcgKzI0Myw3IEBAIHN0YXRpYyB2b2lkIGl3bF9tdm1fcGFzc19wYWNrZXRfdG9fbWFjODAyMTEoc3RydWN0IGl3bF9tdm0gKm12bSxcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0aWVlZTgwMjExX3J4X25hcGkobXZtLVx1MDAzZWh3LCBzdGEsIHNrYiwgbmFwaSk7XG4rXHRpZWVlODAyMTFfcnhfbmFwaShtdm0tXHUwMDNlaHcsIHN0YSA/IFx1MDAyNnN0YS1cdTAwM2VkZWZsaW5rIDogTlVMTCwgc2tiLCBuYXBpKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgaXdsX212bV91c2VkX2F2ZXJhZ2VfZW5lcmd5KHN0cnVjdCBpd2xfbXZtICptdm0sXG5AQCAtMjUyOCw3ICsyNTI4LDcgQEAgdm9pZCBpd2xfbXZtX3J4X21vbml0b3Jfbm9fZGF0YShzdHJ1Y3QgaXdsX212bSAqbXZtLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHR9XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRpZWVlODAyMTFfcnhfbmFwaShtdm0tXHUwMDNlaHcsIHN0YSwgc2tiLCBuYXBpKTtcbitcdGllZWU4MDIxMV9yeF9uYXBpKG12bS1cdTAwM2Vodywgc3RhID8gXHUwMDI2c3RhLVx1MDAzZWRlZmxpbmsgOiBOVUxMLCBza2IsIG5hcGkpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbWFjODAyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbWFjODAyMTEuY1xuaW5kZXggMTNjNGU4YWJlMjgxOS4uZDVhNDdhYjI5ZjU4NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbWFjODAyMTEuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tYWM4MDIxMS5jXG5AQCAtMTIzOSw3ICsxMjM5LDcgQEAgRVhQT1JUX1NZTUJPTChtdDc2X3J4X3NpZ25hbCk7XG4gc3RhdGljIHZvaWRcbiBtdDc2X3J4X2NvbnZlcnQoc3RydWN0IG10NzZfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHN0cnVjdCBpZWVlODAyMTFfaHcgKipodyxcbi1cdFx0c3RydWN0IGllZWU4MDIxMV9zdGEgKipzdGEpXG4rXHRcdHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKipsaW5rX3N0YSlcbiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gbXQ3Nl9za2JfZ2V0X2hkcihza2IpO1xuQEAgLTEyODYsMTEgKzEyODYsMTUgQEAgbXQ3Nl9yeF9jb252ZXJ0KHN0cnVjdCBtdDc2X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0ICAgICAgIHNpemVvZihtc3RhdC5jaGFpbl9zaWduYWwpKTtcbiBcbiBcdGlmIChtc3RhdC53Y2lkKSB7XG4tXHRcdHN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkID0gbXN0YXQud2NpZC1cdTAwM2VsaW5rX3ZhbGlkO1xuLVx0XHRzdGF0dXMtXHUwMDNlbGlua19pZCA9IG1zdGF0LndjaWQtXHUwMDNlbGlua19pZDtcbitcdFx0c3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSA9IHdjaWRfdG9fc3RhKG1zdGF0LndjaWQpO1xuK1xuK1x0XHRpZiAobXN0YXQud2NpZC1cdTAwM2VsaW5rX3ZhbGlkKVxuK1x0XHRcdCpsaW5rX3N0YSA9XG4rXHRcdFx0XHRyY3VfZGVyZWZlcmVuY2Uoc3RhLVx1MDAzZWxpbmtbbXN0YXQud2NpZC1cdTAwM2VsaW5rX2lkXSk7XG4rXHRcdGVsc2VcbitcdFx0XHQqbGlua19zdGEgPSBcdTAwMjZzdGEtXHUwMDNlZGVmbGluaztcbiBcdH1cbiBcbi1cdCpzdGEgPSB3Y2lkX3RvX3N0YShtc3RhdC53Y2lkKTtcbiBcdCpodyA9IG10NzZfcGh5X2h3KGRldiwgbXN0YXQucGh5X2lkeCk7XG4gfVxuIFxuQEAgLTE1MTQsNyArMTUxOCw3IEBAIG10NzZfY2hlY2tfc3RhKHN0cnVjdCBtdDc2X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHZvaWQgbXQ3Nl9yeF9jb21wbGV0ZShzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqZnJhbWVzLFxuIFx0XHQgICAgICBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXG4ge1xuLVx0c3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTtcbitcdHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhO1xuIFx0c3RydWN0IGllZWU4MDIxMV9odyAqaHc7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqdG1wO1xuIFx0TElTVF9IRUFEKGxpc3QpO1xuQEAgLTE1MjUsOCArMTUyOSw4IEBAIHZvaWQgbXQ3Nl9yeF9jb21wbGV0ZShzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqZnJhbWVzLFxuIFxuIFx0XHRtdDc2X2NoZWNrX2NjbXBfcG4oc2tiKTtcbiBcdFx0c2tiX3NoaW5mbyhza2IpLVx1MDAzZWZyYWdfbGlzdCA9IE5VTEw7XG4tXHRcdG10NzZfcnhfY29udmVydChkZXYsIHNrYiwgXHUwMDI2aHcsIFx1MDAyNnN0YSk7XG4tXHRcdGllZWU4MDIxMV9yeF9saXN0KGh3LCBzdGEsIHNrYiwgXHUwMDI2bGlzdCk7XG4rXHRcdG10NzZfcnhfY29udmVydChkZXYsIHNrYiwgXHUwMDI2aHcsIFx1MDAyNmxpbmtfc3RhKTtcbitcdFx0aWVlZTgwMjExX3J4X2xpc3QoaHcsIGxpbmtfc3RhLCBza2IsIFx1MDAyNmxpc3QpO1xuIFxuIFx0XHQvKiBzdWJzZXF1ZW50IGFtc2R1IGZyYW1lcyAqL1xuIFx0XHR3aGlsZSAobnNrYikge1xuQEAgLTE1MzQsOCArMTUzOCw4IEBAIHZvaWQgbXQ3Nl9yeF9jb21wbGV0ZShzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqZnJhbWVzLFxuIFx0XHRcdG5za2IgPSBuc2tiLVx1MDAzZW5leHQ7XG4gXHRcdFx0c2tiLVx1MDAzZW5leHQgPSBOVUxMO1xuIFxuLVx0XHRcdG10NzZfcnhfY29udmVydChkZXYsIHNrYiwgXHUwMDI2aHcsIFx1MDAyNnN0YSk7XG4tXHRcdFx0aWVlZTgwMjExX3J4X2xpc3QoaHcsIHN0YSwgc2tiLCBcdTAwMjZsaXN0KTtcbitcdFx0XHRtdDc2X3J4X2NvbnZlcnQoZGV2LCBza2IsIFx1MDAyNmh3LCBcdTAwMjZsaW5rX3N0YSk7XG4rXHRcdFx0aWVlZTgwMjExX3J4X2xpc3QoaHcsIGxpbmtfc3RhLCBza2IsIFx1MDAyNmxpc3QpO1xuIFx0XHR9XG4gXHR9XG4gXHRzcGluX3VubG9jayhcdTAwMjZkZXYtXHUwMDNlcnhfbG9jayk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9jb3JlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2NvcmUuY1xuaW5kZXggMGYwZTQ2Y2I0MjYwNS4uZGY5NmQwYTk2Nzg3MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY29yZS5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2NvcmUuY1xuQEAgLTMwMzYsNyArMzAzNiw2IEBAIHN0YXRpYyB2b2lkIHJ0dzg5X3ZpZl9yeF9zdGF0c19pdGVyKHZvaWQgKmRhdGEsIHU4ICptYWMsXG4gXHRzdHJ1Y3QgcnR3ODlfdmlmICpydHd2aWYgPSB2aWZfdG9fcnR3dmlmKHZpZik7XG4gXHRzdHJ1Y3QgcnR3ODlfcnhfZGVzY19pbmZvICpkZXNjX2luZm8gPSBpdGVyX2RhdGEtXHUwMDNlZGVzY19pbmZvO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGl0ZXJfZGF0YS1cdTAwM2Vza2I7XG4tXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLVx1MDAzZWRhdGE7XG4gXHRzdHJ1Y3QgcnR3ODlfcnhfcGh5X3BwZHUgKnBoeV9wcGR1ID0gaXRlcl9kYXRhLVx1MDAzZXBoeV9wcGR1O1xuIFx0Ym9vbCBpc19tbGQgPSBpZWVlODAyMTFfdmlmX2lzX21sZCh2aWYpO1xuQEAgLTMwNzMsMTEgKzMwNzIsNiBAQCBzdGF0aWMgdm9pZCBydHc4OV92aWZfcnhfc3RhdHNfaXRlcih2b2lkICpkYXRhLCB1OCAqbWFjLFxuIFx0aWYgKCFldGhlcl9hZGRyX2VxdWFsKHRhcmdldF9ic3NpZCwgYnNzaWQpKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdGlmIChpc19tbGQpIHtcbi1cdFx0cnhfc3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQgPSB0cnVlO1xuLVx0XHRyeF9zdGF0dXMtXHUwMDNlbGlua19pZCA9IHJ0d3ZpZl9saW5rLVx1MDAzZWxpbmtfaWQ7XG4tXHR9XG4tXG4gXHRiYiA9IHJ0dzg5X2dldF9iYl9jdHgocnR3ZGV2LCBydHd2aWZfbGluay1cdTAwM2VwaHlfaWR4KTtcbiBcdHBrdF9zdGF0ID0gXHUwMDI2YmItXHUwMDNlY3VyX3BrdF9zdGF0O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcbmluZGV4IDAyYjZkODFjY2NkMTEuLmEwZDUxOWNkOWM0ZmEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcbkBAIC0xODgwLDkgKzE4ODAsNiBAQCBzdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9yeChzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YSxcbiBcdFx0XHRcdHNwLVx1MDAzZWFjdGl2ZV9saW5rc19yeCBcdTAwMjY9IH5CSVQobGlua19pZCk7XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0c3AtXHUwMDNlYWN0aXZlX2xpbmtzX3J4IHw9IEJJVChsaW5rX2lkKTtcbi1cbi1cdFx0XHRyeF9zdGF0dXMtXHUwMDNlbGlua192YWxpZCA9IHRydWU7XG4tXHRcdFx0cnhfc3RhdHVzLVx1MDAzZWxpbmtfaWQgPSBsaW5rX2lkO1xuIFx0XHR9XG4gXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NmZzgwMjExLmggYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oXG5pbmRleCBkY2JiMGU1NWMzMmVjLi41OWJkMTUzMjMyMmQ3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxuKysrIGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxuQEAgLTQwMDksNiArNDAwOSw3IEBAIHN0cnVjdCBjZmc4MDIxMV91cGRhdGVfZnRfaWVzX3BhcmFtcyB7XG4gICogQGxpbmtfaWQ6IGZvciBNTE8sIHRoZSBsaW5rIElEIHRvIHRyYW5zbWl0IG9uLCAtMSBpZiBub3QgZ2l2ZW47IG5vdGVcbiAgKlx0dGhhdCB0aGUgbGluayBJRCBpc24ndCB2YWxpZGF0ZWQgKG11Y2gpLCBpdCdzIGluIHJhbmdlIGJ1dCB0aGVcbiAgKlx0bGluayBtaWdodCBub3QgZXhpc3QgKG9yIGJlIHVzZWQgYnkgdGhlIHJlY2VpdmVyIFNUQSlcbisgKiBAbm9fc3RhOiBzZXQgaWYgdGhlIGZyYW1lIHNob3VsZCBub3QgYmUgdHJhbnNtaXR0ZWQgdXNpbmcgYW4gZXhpc3RpbmcgU1RBXG4gICovXG4gc3RydWN0IGNmZzgwMjExX21nbXRfdHhfcGFyYW1zIHtcbiBcdHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbjtcbkBAIC00MDIxLDYgKzQwMjIsNyBAQCBzdHJ1Y3QgY2ZnODAyMTFfbWdtdF90eF9wYXJhbXMge1xuIFx0aW50IG5fY3NhX29mZnNldHM7XG4gXHRjb25zdCB1MTYgKmNzYV9vZmZzZXRzO1xuIFx0aW50IGxpbmtfaWQ7XG4rXHRib29sIG5vX3N0YTtcbiB9O1xuIFxuIC8qKlxuQEAgLTk0OTksNiArOTUwMSw3IEBAIHZvaWQgY2ZnODAyMTFfY29ubl9mYWlsZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKm1hY19hZGRyLFxuICAqIEBmbGFnczogZmxhZ3MsIGFzIGRlZmluZWQgaW4gXHUwMDI2ZW51bSBubDgwMjExX3J4bWdtdF9mbGFnc1xuICAqIEByeF90c3RhbXA6IEhhcmR3YXJlIHRpbWVzdGFtcCBvZiBmcmFtZSBSWCBpbiBuYW5vc2Vjb25kc1xuICAqIEBhY2tfdHN0YW1wOiBIYXJkd2FyZSB0aW1lc3RhbXAgb2YgYWNrIFRYIGluIG5hbm9zZWNvbmRzXG4rICogQG5vX3N0YTogc2V0IGlmIG5vIHN0YXRpb24gaXMga25vd24gZm9yIHRoZSBmcmFtZSAocmVsZXZhbnQgZm9yIE1MRClcbiAgKi9cbiBzdHJ1Y3QgY2ZnODAyMTFfcnhfaW5mbyB7XG4gXHRpbnQgZnJlcTtcbkBAIC05NTEwLDYgKzk1MTMsNyBAQCBzdHJ1Y3QgY2ZnODAyMTFfcnhfaW5mbyB7XG4gXHR1MzIgZmxhZ3M7XG4gXHR1NjQgcnhfdHN0YW1wO1xuIFx0dTY0IGFja190c3RhbXA7XG4rXHRib29sIG5vX3N0YTtcbiB9O1xuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmggYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXG5pbmRleCA5ZDFmYWM2ZTgwODI5Li43YWFlNzI4ZTk2ZDg0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaFxuKysrIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaFxuQEAgLTE3NzAsMTAgKzE3NzAsOSBAQCBlbnVtIG1hYzgwMjExX3J4X2VuY29kaW5nIHtcbiAgKiBAYW1wZHVfcmVmZXJlbmNlOiBBLU1QRFUgcmVmZXJlbmNlIG51bWJlciwgbXVzdCBiZSBhIGRpZmZlcmVudCB2YWx1ZSBmb3JcbiAgKlx0ZWFjaCBBLU1QRFUgYnV0IHRoZSBzYW1lIGZvciBlYWNoIHN1YmZyYW1lIHdpdGhpbiBvbmUgQS1NUERVXG4gICogQHplcm9fbGVuZ3RoX3BzZHVfdHlwZTogcmFkaW90YXAgdHlwZSBvZiB0aGUgMC1sZW5ndGggUFNEVVxuLSAqIEBsaW5rX3ZhbGlkOiBpZiB0aGUgbGluayB3aGljaCBpcyBpZGVudGlmaWVkIGJ5IEBsaW5rX2lkIGlzIHZhbGlkLiBUaGlzIGZsYWdcbi0gKlx0aXMgc2V0IG9ubHkgd2hlbiBjb25uZWN0aW9uIGlzIE1MTy5cbi0gKiBAbGlua19pZDogaWQgb2YgdGhlIGxpbmsgdXNlZCB0byByZWNlaXZlIHRoZSBwYWNrZXQuIFRoaXMgaXMgdXNlZCBhbG9uZyB3aXRoXG4tICpcdEBsaW5rX3ZhbGlkLlxuKyAqIEBsaW5rX2lkOiBpZCBvZiB0aGUgbGluayB1c2VkIHRvIHJlY2VpdmUgdGhlIHBhY2tldC4gU2V0IGFuZCB1c2VkIGJ5XG4rICpcdG1hYzgwMjExIGludGVybmFsbHksIGl0IHVzZXMgQGZyZXEgc2V0IGJ5IHRoZSBkcml2ZXIgdG8gaWRlbnRpZnkgdGhlXG4rICpcdGNvcnJlY3QgbGluayBwZXIgdmlmLlxuICAqL1xuIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzIHtcbiBcdHU2NCBtYWN0aW1lO1xuQEAgLTE4MTMsNyArMTgxMiw3IEBAIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzIHtcbiBcdHU4IGNoYWlucztcbiBcdHM4IGNoYWluX3NpZ25hbFtJRUVFODAyMTFfTUFYX0NIQUlOU107XG4gXHR1OCB6ZXJvX2xlbmd0aF9wc2R1X3R5cGU7XG4tXHR1OCBsaW5rX3ZhbGlkOjEsIGxpbmtfaWQ6NDtcbitcdHU4IGxpbmtfaWQ6NDtcbiB9O1xuIFxuIHN0YXRpY19hc3NlcnQoc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzKSBcdTAwM2M9IHNpemVvZl9maWVsZChzdHJ1Y3Qgc2tfYnVmZiwgY2IpKTtcbkBAIC01Mzg5LDE0ICs1Mzg4LDE4IEBAIHZvaWQgaWVlZTgwMjExX3Jlc3RhcnRfaHcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpO1xuICAqIG1peGVkIGZvciBhIHNpbmdsZSBoYXJkd2FyZS4gTXVzdCBub3QgcnVuIGNvbmN1cnJlbnRseSB3aXRoXG4gICogaWVlZTgwMjExX3R4X3N0YXR1c19za2IoKSBvciBpZWVlODAyMTFfdHhfc3RhdHVzX25pKCkuXG4gICpcbisgKiBGb3IgZGF0YSBmcmFtZXMsIHdoZW4gaGFyZHdhcmUgaGFzIGRvbmUgYWRkcmVzcyB0cmFuc2xhdGlvbiwgYSBsaW5rIHN0YXRpb25cbisgKiBoYXMgdG8gYmUgcHJvdmlkZWQgYW5kIHRoZSBmcmVxdWVuY3kgaW5mb3JtYXRpb24gbWF5IGJlIHNraXBwZWQuXG4rICpcbiAgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggQkhzIGRpc2FibGVkIGFuZCBSQ1UgcmVhZCBsb2NrXG4gICpcbiAgKiBAaHc6IHRoZSBoYXJkd2FyZSB0aGlzIGZyYW1lIGNhbWUgaW4gb25cbi0gKiBAc3RhOiB0aGUgc3RhdGlvbiB0aGUgZnJhbWUgd2FzIHJlY2VpdmVkIGZyb20sIG9yICVOVUxMXG4rICogQGxpbmtfc3RhOiB0aGUgbGluayBzdGF0aW9uIHRoZSBkYXRhIGZyYW1lIHdhcyByZWNlaXZlZCBmcm9tLCBvciAlTlVMTFxuICAqIEBza2I6IHRoZSBidWZmZXIgdG8gcmVjZWl2ZSwgb3duZWQgYnkgbWFjODAyMTEgYWZ0ZXIgdGhpcyBjYWxsXG4gICogQGxpc3Q6IHRoZSBkZXN0aW5hdGlvbiBsaXN0XG4gICovXG4tdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbit2b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuK1x0XHQgICAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEsXG4gXHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KTtcbiBcbiAvKipcbkBAIC01NDE0LDE0ICs1NDE3LDE4IEBAIHZvaWQgaWVlZTgwMjExX3J4X2xpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXG4gICogbWl4ZWQgZm9yIGEgc2luZ2xlIGhhcmR3YXJlLiBNdXN0IG5vdCBydW4gY29uY3VycmVudGx5IHdpdGhcbiAgKiBpZWVlODAyMTFfdHhfc3RhdHVzX3NrYigpIG9yIGllZWU4MDIxMV90eF9zdGF0dXNfbmkoKS5cbiAgKlxuKyAqIEZvciBkYXRhIGZyYW1lcywgd2hlbiBoYXJkd2FyZSBoYXMgZG9uZSBhZGRyZXNzIHRyYW5zbGF0aW9uLCBhIGxpbmsgc3RhdGlvblxuKyAqIGhhcyB0byBiZSBwcm92aWRlZCBhbmQgdGhlIGZyZXF1ZW5jeSBpbmZvcm1hdGlvbiBtYXkgYmUgc2tpcHBlZC5cbisgKlxuICAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBCSHMgZGlzYWJsZWQuXG4gICpcbiAgKiBAaHc6IHRoZSBoYXJkd2FyZSB0aGlzIGZyYW1lIGNhbWUgaW4gb25cbi0gKiBAc3RhOiB0aGUgc3RhdGlvbiB0aGUgZnJhbWUgd2FzIHJlY2VpdmVkIGZyb20sIG9yICVOVUxMXG4rICogQGxpbmtfc3RhOiB0aGUgbGluayBzdGF0aW9uIHRoZSBkYXRhIGZyYW1lIHdhcyByZWNlaXZlZCBmcm9tLCBvciAlTlVMTFxuICAqIEBza2I6IHRoZSBidWZmZXIgdG8gcmVjZWl2ZSwgb3duZWQgYnkgbWFjODAyMTEgYWZ0ZXIgdGhpcyBjYWxsXG4gICogQG5hcGk6IHRoZSBOQVBJIGNvbnRleHRcbiAgKi9cbi12b2lkIGllZWU4MDIxMV9yeF9uYXBpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxuK3ZvaWQgaWVlZTgwMjExX3J4X25hcGkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4rXHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSxcbiBcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSk7XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmhcbmluZGV4IDAyMDM4N2Q3NjQxMjIuLjQ2NTNmOGYyNmVlNzAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oXG5AQCAtMzE4NSw2ICszMTg1LDExIEBAIGVudW0gbmw4MDIxMV9jb21tYW5kcyB7XG4gICpcdFRoZSBhZ2dyZWdhdGVkIG1lc3NhZ2UgYWx3YXlzIHByZWNlZGVzIHRoZSBwZXItbGluayBtZXNzYWdlcyBmb3IgdGhlXG4gICpcdHNhbWUgc3RhdGlvbiB3aXRoaW4gYSBkdW1wIHNlcXVlbmNlLlxuICAqXG4rICogQE5MODAyMTFfQVRUUl9GUkFNRV9DTURfTk9fU1RBOiBWYWxpZCBmb3IgTkw4MDIxMV9DTURfRlJBTUUgdG8gZGVub3RlIHRoYXRcbisgKlx0dGhlIGtlcm5lbCBoYWQgbm8gc3RhdGlvbiBmb3IgYSByZWNlaXZlZCBmcmFtZSBvciBzaG91bGQgbm90IHVzZSBhXG4rICpcdGtub3duIHN0YXRpb24gdG8gdHJhbnNtaXQgYSBmcmFtZS4gVGhpcyBpcyByZWxldmFudCB0byBrbm93IHdoZXRoZXJcbisgKlx0TUxEIGFkZHJlc3MgdHJhbnNsYXRpb24gaGFwcGVuZWQgb3IgdG8gZGlzYWJsZSBpdCB3aGVuIHNlbmRpbmcgYSBmcmFtZS5cbisgKlxuICAqIEBOVU1fTkw4MDIxMV9BVFRSOiB0b3RhbCBudW1iZXIgb2Ygbmw4MDIxMV9hdHRycyBhdmFpbGFibGVcbiAgKiBATkw4MDIxMV9BVFRSX01BWDogaGlnaGVzdCBhdHRyaWJ1dGUgbnVtYmVyIGN1cnJlbnRseSBkZWZpbmVkXG4gICogQF9fTkw4MDIxMV9BVFRSX0FGVEVSX0xBU1Q6IGludGVybmFsIHVzZVxuQEAgLTM3ODUsNiArMzc5MCw4IEBAIGVudW0gbmw4MDIxMV9hdHRycyB7XG4gXG4gXHROTDgwMjExX0FUVFJfU1RBX0RVTVBfTElOS19TVEFUUyxcbiBcbitcdE5MODAyMTFfQVRUUl9GUkFNRV9DTURfTk9fU1RBLFxuK1xuIFx0LyogYWRkIGF0dHJpYnV0ZXMgaGVyZSwgdXBkYXRlIHRoZSBwb2xpY3kgaW4gbmw4MDIxMS5jICovXG4gXG4gXHRfX05MODAyMTFfQVRUUl9BRlRFUl9MQVNULFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9hZ2ctdHguYyBiL25ldC9tYWM4MDIxMS9hZ2ctdHguY1xuaW5kZXggNDgzM2I0Njc3MGI2Mi4uZGQ4YTExZWY2ZTUyYiAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9hZ2ctdHguY1xuKysrIGIvbmV0L21hYzgwMjExL2FnZy10eC5jXG5AQCAtOTgsNyArOTgsNyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9hZGRiYV9yZXF1ZXN0KHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1MTYgdGlkLFxuIFx0aWYgKHN0YS1cdTAwM2VzdGEuZGVmbGluay5oZV9jYXAuaGFzX2hlKVxuIFx0XHRpZWVlODAyMTFfYWRkX2FkZGJhZXh0KHNrYiwgMCwgYWdnX3NpemUpO1xuIFxuLVx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgdGlkLCAtMSk7XG4rXHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCBOVUxMLCB0aWQsIC0xKTtcbiB9XG4gXG4gdm9pZCBpZWVlODAyMTFfc2VuZF9iYXIoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgdTggKnJhLCB1MTYgdGlkLCB1MTYgc3NuKVxuQEAgLTEyNyw3ICsxMjcsNyBAQCB2b2lkIGllZWU4MDIxMV9zZW5kX2JhcihzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCB1OCAqcmEsIHUxNiB0aWQsIHUxNiBzc24pXG4gXG4gXHRJRUVFODAyMTFfU0tCX0NCKHNrYiktXHUwMDNlZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0lOVEZMX0RPTlRfRU5DUllQVCB8XG4gXHRcdFx0XHRcdElFRUU4MDIxMV9UWF9DVExfUkVRX1RYX1NUQVRVUztcbi1cdGllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIHRpZCwgLTEpO1xuK1x0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgTlVMTCwgdGlkLCAtMSk7XG4gfVxuIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3NlbmRfYmFyKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvYXAuYyBiL25ldC9tYWM4MDIxMS9hcC5jXG5pbmRleCBlN2FjOTljNWEyMmViLi5mZTI1NTg5MWMzNWYwIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2FwLmNcbisrKyBiL25ldC9tYWM4MDIxMS9hcC5jXG5AQCAtODIsOSArODIsNiBAQCBpZWVlODAyMTFfcnhfZW1sX29wX21vZGVfbm90aWYoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRpZiAoIWlmdF9leHRfY2FwYSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aWYgKCFzdGF0dXMtXHUwMDNlbGlua192YWxpZClcbi1cdFx0cmV0dXJuO1xuLVxuIFx0c3RhID0gc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgbWdtdC1cdTAwM2VzYSk7XG4gXHRpZiAoIXN0YSlcbiBcdFx0cmV0dXJuO1xuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9odC5jIGIvbmV0L21hYzgwMjExL2h0LmNcbmluZGV4IGUxZTFiN2Y4MmYzZmUuLmM1YzIxMTNmYTRmNzkgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvaHQuY1xuKysrIGIvbmV0L21hYzgwMjExL2h0LmNcbkBAIC01NDUsNyArNTQ1LDcgQEAgaW50IGllZWU4MDIxMV9zZW5kX3NtcHNfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0aW5mby1cdTAwM2VzdGF0dXNfZGF0YSA9IElFRUU4MDIxMV9TVEFUVVNfVFlQRV9TTVBTIHxcbiBcdFx0XHQgICAgdTE2X2VuY29kZV9iaXRzKHN0YXR1c19saW5rX2lkIFx1MDAzY1x1MDAzYyAyIHwgc21wcyxcbiBcdFx0XHRcdFx0ICAgIElFRUU4MDIxMV9TVEFUVVNfU1VCREFUQV9NQVNLKTtcbi1cdGllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIDcsIGxpbmtfaWQpO1xuK1x0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgTlVMTCwgNywgbGlua19pZCk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmggYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxuaW5kZXggYTFlZjg4ZmU4NDZkZC4uMzhkODZiMGExMGY1YSAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXG4rKysgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxuQEAgLTI0NjYsNyArMjQ2Niw4IEBAIHZvaWQgaWVlZTgwMjExX3htaXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdCAgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gXG4gdm9pZCBfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRpZCwgaW50IGxpbmtfaWQsXG4rXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN0YV9pbmZvICpzdGEsXG4rXHRcdFx0XHQgaW50IHRpZCwgaW50IGxpbmtfaWQsXG4gXHRcdFx0XHQgZW51bSBubDgwMjExX2JhbmQgYmFuZCk7XG4gXG4gc3RhdGljIGlubGluZSBib29sIGllZWU4MDIxMV9yZXF1aXJlX2VuY3J5cHRlZF9hc3NvYyhfX2xlMTYgZmMsXG5AQCAtMjQ4NiwxOCArMjQ4NywyMCBAQCBpZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRcdCAgZW51bSBubDgwMjExX2JhbmQgYmFuZClcbiB7XG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc2RhdGEsIHNrYiwgdGlkLCAtMSwgYmFuZCk7XG4rXHRfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc2RhdGEsIHNrYiwgRVJSX1BUUigtRU5PRU5UKSxcbitcdFx0XHRcdCAgICB0aWQsIC0xLCBiYW5kKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiB2b2lkIGllZWU4MDIxMV90eF9za2JfdGlkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLVx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRpZCwgaW50IGxpbmtfaWQpO1xuK1x0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN0YV9pbmZvICpzdGEsXG4rXHRcdFx0ICBpbnQgdGlkLCBpbnQgbGlua19pZCk7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGllZWU4MDIxMV90eF9za2Ioc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHQvKiBTZW5kIGFsbCBpbnRlcm5hbCBtZ210IGZyYW1lcyBvbiBWTy4gQWNjb3JkaW5nbHkgc2V0IFRJRCB0byA3LiAqL1xuLVx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgNywgLTEpO1xuK1x0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgTlVMTCwgNywgLTEpO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWZhY2UuYyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jXG5pbmRleCA0MzQ2MGE3MDVhNmJkLi5hMGIyMTRkYmI4YWY4IDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2lmYWNlLmNcbisrKyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jXG5AQCAtMTY3MywxMSArMTY3Myw4IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9pZmFjZV9wcm9jZXNzX3NrYihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcbiBcdFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRcdHN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpO1xuLVx0XHRcdGlmICghc3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQpXG4tXHRcdFx0XHRsaW5rX3N0YSA9IFx1MDAyNnN0YS1cdTAwM2VkZWZsaW5rO1xuLVx0XHRcdGVsc2Vcbi1cdFx0XHRcdGxpbmtfc3RhID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChzdGEtXHUwMDNlbGlua1tzdGF0dXMtXHUwMDNlbGlua19pZF0sXG4tXHRcdFx0XHRcdFx0XHRsb2NrZGVwX2lzX2hlbGQoXHUwMDI2bG9jYWwtXHUwMDNlaHcud2lwaHktXHUwMDNlbXR4KSk7XG4rXHRcdFx0bGlua19zdGEgPSB3aXBoeV9kZXJlZmVyZW5jZShsb2NhbC1cdTAwM2Vody53aXBoeSxcbitcdFx0XHRcdFx0XHQgICAgIHN0YS1cdTAwM2VsaW5rW3N0YXR1cy1cdTAwM2VsaW5rX2lkXSk7XG4gXHRcdFx0aWYgKGxpbmtfc3RhKVxuIFx0XHRcdFx0aWVlZTgwMjExX2h0X2hhbmRsZV9jaGFud2lkdGhfbm90aWYobG9jYWwsIHNkYXRhLCBzdGEsXG4gXHRcdFx0XHRcdFx0XHRcdCAgICBsaW5rX3N0YSwgY2hhbndpZHRoLFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tbG1lLmMgYi9uZXQvbWFjODAyMTEvbWxtZS5jXG5pbmRleCBmNTExNjdmMGZjNDZkLi4zNjE3NzVmYjkzMWVjIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL21sbWUuY1xuKysrIGIvbmV0L21hYzgwMjExL21sbWUuY1xuQEAgLTExODMxLDEyICsxMTgzMSwxMCBAQCB2b2lkIGllZWU4MDIxMV9zdGFfcnhfcXVldWVkX2ZyYW1lKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0cnhfc3RhdHVzID0gKHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICopIHNrYi1cdTAwM2VjYjtcbiBcdGZjID0gbGUxNl90b19jcHUobWdtdC1cdTAwM2VmcmFtZV9jb250cm9sKTtcbiBcbi1cdGlmIChyeF9zdGF0dXMtXHUwMDNlbGlua192YWxpZCkge1xuLVx0XHRsaW5rID0gc2RhdGFfZGVyZWZlcmVuY2Uoc2RhdGEtXHUwMDNlbGlua1tyeF9zdGF0dXMtXHUwMDNlbGlua19pZF0sXG4tXHRcdFx0XHRcdCBzZGF0YSk7XG4tXHRcdGlmICghbGluaylcbi1cdFx0XHRyZXR1cm47XG4tXHR9XG4rXHRsaW5rID0gc2RhdGFfZGVyZWZlcmVuY2Uoc2RhdGEtXHUwMDNlbGlua1tyeF9zdGF0dXMtXHUwMDNlbGlua19pZF0sXG4rXHRcdFx0XHQgc2RhdGEpO1xuK1x0aWYgKCFsaW5rKVxuK1x0XHRyZXR1cm47XG4gXG4gXHRzd2l0Y2ggKGZjIFx1MDAyNiBJRUVFODAyMTFfRkNUTF9TVFlQRSkge1xuIFx0Y2FzZSBJRUVFODAyMTFfU1RZUEVfQkVBQ09OOlxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmMgYi9uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jXG5pbmRleCAyYmNlYjczNzE3YzY2Li4zODM0ZjU5NmFmMTc4IDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL29mZmNoYW5uZWwuY1xuKysrIGIvbmV0L21hYzgwMjExL29mZmNoYW5uZWwuY1xuQEAgLTg1Niw4ICs4NTYsMTAgQEAgaW50IGllZWU4MDIxMV9tZ210X3R4KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXHRcdFx0bmVlZF9vZmZjaGFuID0gdHJ1ZTtcbiBcbiBcdFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0XHRzdGEgPSBzdGFfaW5mb19nZXRfYnNzKHNkYXRhLCBtZ210LVx1MDAzZWRhKTtcbi1cdFx0bWxvX3N0YSA9IHN0YSBcdTAwMjZcdTAwMjYgc3RhLVx1MDAzZXN0YS5tbG87XG4rXHRcdGlmICghcGFyYW1zLVx1MDAzZW5vX3N0YSkge1xuK1x0XHRcdHN0YSA9IHN0YV9pbmZvX2dldF9ic3Moc2RhdGEsIG1nbXQtXHUwMDNlZGEpO1xuK1x0XHRcdG1sb19zdGEgPSBzdGEgXHUwMDI2XHUwMDI2IHN0YS1cdTAwM2VzdGEubWxvO1xuK1x0XHR9XG4gXG4gXHRcdGlmICghaWVlZTgwMjExX2lzX2FjdGlvbihtZ210LVx1MDAzZWZyYW1lX2NvbnRyb2wpIHx8XG4gXHRcdCAgICBtZ210LVx1MDAzZXUuYWN0aW9uLmNhdGVnb3J5ID09IFdMQU5fQ0FURUdPUllfUFVCTElDIHx8XG5AQCAtODg2LDcgKzg4OCw4IEBAIGludCBpZWVlODAyMTFfbWdtdF90eChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIFx0XHQgICAgIGxvY2FsLVx1MDAzZW9wcy1cdTAwM2VyZW1haW5fb25fY2hhbm5lbCBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICBtZW1jbXAoc2RhdGEtXHUwMDNldmlmLmNmZy5hcF9hZGRyLCBtZ210LVx1MDAzZWJzc2lkLCBFVEhfQUxFTikpKSB7XG4gXHRcdFx0bmVlZF9vZmZjaGFuID0gdHJ1ZTtcbi1cdFx0fSBlbHNlIGlmIChzZGF0YS1cdTAwM2V1Lm1nZC5hc3NvY2lhdGVkIFx1MDAyNlx1MDAyNlxuK1x0XHR9IGVsc2UgaWYgKCFwYXJhbXMtXHUwMDNlbm9fc3RhIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgIHNkYXRhLVx1MDAzZXUubWdkLmFzc29jaWF0ZWQgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgZXRoZXJfYWRkcl9lcXVhbChzZGF0YS1cdTAwM2V2aWYuY2ZnLmFwX2FkZHIsIG1nbXQtXHUwMDNlZGEpKSB7XG4gXHRcdFx0c3RhID0gc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgbWdtdC1cdTAwM2VkYSk7XG4gXHRcdFx0bWxvX3N0YSA9IHN0YSBcdTAwMjZcdTAwMjYgc3RhLVx1MDAzZXN0YS5tbG87XG5AQCAtMTAzMSw3ICsxMDM0LDkgQEAgaW50IGllZWU4MDIxMV9tZ210X3R4KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXHR9XG4gXG4gXHRpZiAoIW5lZWRfb2ZmY2hhbikge1xuLVx0XHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCA3LCBsaW5rX2lkKTtcbitcdFx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYixcbitcdFx0XHRcdCAgICAgcGFyYW1zLVx1MDAzZW5vX3N0YSA/IHN0YSA6IEVSUl9QVFIoLUVOT0VOVCksXG4rXHRcdFx0XHQgICAgIDcsIGxpbmtfaWQpO1xuIFx0XHRyZXQgPSAwO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3J4LmMgYi9uZXQvbWFjODAyMTEvcnguY1xuaW5kZXggNWUyNmJlOGUyN2Q4Zi4uZWQ1YTJlMDU5MDc1NyAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9yeC5jXG4rKysgYi9uZXQvbWFjODAyMTEvcnguY1xuQEAgLTIyMiw0MyArMjIyLDIxIEBAIGllZWU4MDIxMV9yeF9yYWRpb3RhcF9oZHJsZW4oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi1cdFx0XHRcdFx0ICAgaW50IGxpbmtfaWQsXG4tXHRcdFx0XHRcdCAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxuK1x0XHRcdFx0XHQgICBzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpO1xuLVxuLVx0aWYgKGxpbmtfaWQgXHUwMDNlPSAwKSB7XG4tXHRcdHN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkID0gMTtcbi1cdFx0c3RhdHVzLVx1MDAzZWxpbmtfaWQgPSBsaW5rX2lkO1xuLVx0fSBlbHNlIHtcbi1cdFx0c3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQgPSAwO1xuLVx0fVxuLVxuIFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2c2RhdGEtXHUwMDNlc2tiX3F1ZXVlLCBza2IpO1xuIFx0d2lwaHlfd29ya19xdWV1ZShzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2Vody53aXBoeSwgXHUwMDI2c2RhdGEtXHUwMDNld29yayk7XG4tXHRpZiAoc3RhKSB7XG4tXHRcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YV9pbmZvO1xuLVxuLVx0XHRpZiAobGlua19pZCBcdTAwM2U9IDApIHtcbi1cdFx0XHRsaW5rX3N0YV9pbmZvID0gcmN1X2RlcmVmZXJlbmNlKHN0YS1cdTAwM2VsaW5rW2xpbmtfaWRdKTtcbi1cdFx0XHRpZiAoIWxpbmtfc3RhX2luZm8pXG4tXHRcdFx0XHRyZXR1cm47XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0bGlua19zdGFfaW5mbyA9IFx1MDAyNnN0YS1cdTAwM2VkZWZsaW5rO1xuLVx0XHR9XG4tXG4tXHRcdGxpbmtfc3RhX2luZm8tXHUwMDNlcnhfc3RhdHMucGFja2V0cysrO1xuLVx0fVxuK1x0aWYgKGxpbmtfc3RhKVxuK1x0XHRsaW5rX3N0YS1cdTAwM2VyeF9zdGF0cy5wYWNrZXRzKys7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tXHRcdFx0XHRcdCBpbnQgbGlua19pZCxcbi1cdFx0XHRcdFx0IHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxuK1x0XHRcdFx0XHQgc3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhLFxuIFx0XHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRza2ItXHUwMDNlcHJvdG9jb2wgPSAwO1xuLVx0X19pZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCBsaW5rX2lkLCBzdGEsIHNrYik7XG4rXHRfX2llZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIGxpbmtfc3RhLCBza2IpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfaGFuZGxlX211X21pbW9fbW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuQEAgLTMwMSw3ICsyNzksNyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfaGFuZGxlX211X21pbW9fbW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0aWYgKCFza2IpXG4gXHRcdHJldHVybjtcbiBcbi1cdGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIC0xLCBOVUxMLCBza2IpO1xuK1x0aWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgTlVMTCwgc2tiKTtcbiB9XG4gXG4gLypcbkBAIC0xNDk4LDcgKzE0NzYsNyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfcmVvcmRlcl9hbXBkdShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxuIFx0LyogaWYgdGhpcyBtcGR1IGlzIGZyYWdtZW50ZWQgLSB0ZXJtaW5hdGUgcnggYWdncmVnYXRpb24gc2Vzc2lvbiAqL1xuIFx0c2MgPSBsZTE2X3RvX2NwdShoZHItXHUwMDNlc2VxX2N0cmwpO1xuIFx0aWYgKHNjIFx1MDAyNiBJRUVFODAyMTFfU0NUTF9GUkFHKSB7XG4tXHRcdGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2UocngtXHUwMDNlc2RhdGEsIHJ4LVx1MDAzZWxpbmtfaWQsIE5VTEwsIHNrYik7XG4rXHRcdGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2UocngtXHUwMDNlc2RhdGEsIE5VTEwsIHNrYik7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbkBAIC0yNTI0LDcgKzI1MDIsNyBAQCBpZWVlODAyMTFfcnhfaF9kZWZyYWdtZW50KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpXG4gXG4gIG91dDpcbiBcdGllZWU4MDIxMV9sZWRfcngocngtXHUwMDNlbG9jYWwpO1xuLVx0aWYgKHJ4LVx1MDAzZXN0YSlcbitcdGlmIChyeC1cdTAwM2VsaW5rX3N0YSlcbiBcdFx0cngtXHUwMDNlbGlua19zdGEtXHUwMDNlcnhfc3RhdHMucGFja2V0cysrO1xuIFx0cmV0dXJuIFJYX0NPTlRJTlVFO1xuIH1cbkBAIC0zMzM1LDggKzMzMTMsOCBAQCBpZWVlODAyMTFfcnhfaF9kYXRhKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpXG4gXHRcdCAgICAodGYtXHUwMDNlYWN0aW9uX2NvZGUgPT0gV0xBTl9URExTX0NIQU5ORUxfU1dJVENIX1JFUVVFU1QgfHxcbiBcdFx0ICAgICB0Zi1cdTAwM2VhY3Rpb25fY29kZSA9PSBXTEFOX1RETFNfQ0hBTk5FTF9TV0lUQ0hfUkVTUE9OU0UpKSB7XG4gXHRcdFx0cngtXHUwMDNlc2tiLVx1MDAzZXByb3RvY29sID0gY3B1X3RvX2JlMTYoRVRIX1BfVERMUyk7XG4tXHRcdFx0X19pZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC1cdTAwM2VsaW5rX2lkLFxuLVx0XHRcdFx0XHRcdCAgICAgICByeC1cdTAwM2VzdGEsIHJ4LVx1MDAzZXNrYik7XG4rXHRcdFx0X19pZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC1cdTAwM2VsaW5rX3N0YSxcbitcdFx0XHRcdFx0XHQgICAgICAgcngtXHUwMDNlc2tiKTtcbiBcdFx0XHRyZXR1cm4gUlhfUVVFVUVEO1xuIFx0XHR9XG4gXHR9XG5AQCAtMzk5MSw3ICszOTY5LDcgQEAgaWVlZTgwMjExX3J4X2hfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpXG4gXHRyZXR1cm4gUlhfUVVFVUVEO1xuIFxuICBxdWV1ZTpcbi1cdGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIHJ4LVx1MDAzZWxpbmtfaWQsIHJ4LVx1MDAzZXN0YSwgcngtXHUwMDNlc2tiKTtcbitcdGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIHJ4LVx1MDAzZWxpbmtfc3RhLCByeC1cdTAwM2Vza2IpO1xuIFx0cmV0dXJuIFJYX1FVRVVFRDtcbiB9XG4gXG5AQCAtNDAwNSw2ICszOTgzLDcgQEAgaWVlZTgwMjExX3J4X2hfdXNlcnNwYWNlX21nbXQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeClcbiBcdFx0LmxlbiA9IHJ4LVx1MDAzZXNrYi1cdTAwM2VsZW4sXG4gXHRcdC5saW5rX2lkID0gcngtXHUwMDNlbGlua19pZCxcbiBcdFx0LmhhdmVfbGlua19pZCA9IHJ4LVx1MDAzZWxpbmtfaWQgXHUwMDNlPSAwLFxuK1x0XHQubm9fc3RhID0gIXJ4LVx1MDAzZXN0YSxcbiBcdH07XG4gXG4gXHQvKiBza2lwIGtub3duLWJhZCBhY3Rpb24gZnJhbWVzIGFuZCByZXR1cm4gdGhlbSBpbiB0aGUgbmV4dCBoYW5kbGVyICovXG5AQCAtNDEyNyw3ICs0MTA2LDcgQEAgaWVlZTgwMjExX3J4X2hfYWN0aW9uX3JldHVybihzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxuIFx0XHRcdFx0XHRsb2NhbC1cdTAwM2Vody5vZmZjaGFubmVsX3R4X2h3X3F1ZXVlO1xuIFx0XHR9XG4gXG4tXHRcdF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChyeC1cdTAwM2VzZGF0YSwgbnNrYiwgNywgLTEsXG4rXHRcdF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChyeC1cdTAwM2VzZGF0YSwgbnNrYiwgcngtXHUwMDNlc3RhLCA3LCAtMSxcbiBcdFx0XHRcdFx0ICAgIHN0YXR1cy1cdTAwM2ViYW5kKTtcbiBcdH1cbiBcbkBAIC00MTQ3LDcgKzQxMjYsNyBAQCBpZWVlODAyMTFfcnhfaF9leHQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeClcbiBcdFx0cmV0dXJuIFJYX0RST1BfVV9VTkVYUEVDVEVEX0VYVF9GUkFNRTtcbiBcbiBcdC8qIGZvciBub3cgb25seSBiZWFjb25zIGFyZSBleHQsIHNvIHF1ZXVlIHRoZW0gKi9cbi1cdGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIHJ4LVx1MDAzZWxpbmtfaWQsIHJ4LVx1MDAzZXN0YSwgcngtXHUwMDNlc2tiKTtcbitcdGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIHJ4LVx1MDAzZWxpbmtfc3RhLCByeC1cdTAwM2Vza2IpO1xuIFxuIFx0cmV0dXJuIFJYX1FVRVVFRDtcbiB9XG5AQCAtNDIwNCw3ICs0MTgzLDcgQEAgaWVlZTgwMjExX3J4X2hfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxuIFx0XHRyZXR1cm4gUlhfRFJPUF9VX1VOSEFORExFRF9NR01UX1NUWVBFO1xuIFx0fVxuIFxuLVx0aWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgcngtXHUwMDNlbGlua19pZCwgcngtXHUwMDNlc3RhLCByeC1cdTAwM2Vza2IpO1xuK1x0aWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgcngtXHUwMDNlbGlua19zdGEsIHJ4LVx1MDAzZXNrYik7XG4gXG4gXHRyZXR1cm4gUlhfUVVFVUVEO1xuIH1cbkBAIC00MjQ4LDEyICs0MjI3LDI4IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9oYW5kbGVycyhzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnJ4LVx1MDAzZWxvY2FsLVx1MDAzZXJ4X3BhdGhfbG9jayk7XG4gXG4gXHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoZnJhbWVzKSkpIHtcbitcdFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpO1xuK1xuIFx0XHQvKlxuLVx0XHQgKiBhbGwgdGhlIG90aGVyIGZpZWxkcyBhcmUgdmFsaWQgYWNyb3NzIGZyYW1lc1xuLVx0XHQgKiB0aGF0IGJlbG9uZyB0byBhbiBhTVBEVSBzaW5jZSB0aGV5IGFyZSBvbiB0aGVcbi1cdFx0ICogc2FtZSBUSUQgZnJvbSB0aGUgc2FtZSBzdGF0aW9uXG4rXHRcdCAqIE1vc3QgZmllbGRzIGFyZSB2YWxpZCBhY3Jvc3MgZnJhbWVzLiBIb3dldmVyLFxuK1x0XHQgKiBpbiB0aGUgY2FzZSBvZiByZW9yZGVyaW5nIGZyYW1lcyBtYXkgaGF2ZSBhcnJpdmVkXG4rXHRcdCAqIG9uIGRpZmZlcmVudCBsaW5rcywgc28gYWRqdXN0IHRoZSBsaW5rX2lkLCBsaW5rXG4rXHRcdCAqIGFuZCBsaW5rX3N0YSBhY2NvcmRpbmdseS5cbiBcdFx0ICovXG4gXHRcdHJ4LVx1MDAzZXNrYiA9IHNrYjtcbitcdFx0aWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKFx1MDAyNnJ4LVx1MDAzZXNkYXRhLVx1MDAzZXZpZikgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICB1bmxpa2VseShyeC1cdTAwM2VsaW5rX2lkICE9IHN0YXR1cy1cdTAwM2VsaW5rX2lkKSkge1xuK1x0XHRcdGlmIChyeC1cdTAwM2VzdGEpIHtcbitcdFx0XHRcdHJ4LVx1MDAzZWxpbmtfc3RhID1cbitcdFx0XHRcdFx0cmN1X2RlcmVmZXJlbmNlKHJ4LVx1MDAzZXN0YS1cdTAwM2VsaW5rW3J4LVx1MDAzZWxpbmtfaWRdKTtcbitcbitcdFx0XHRcdC8qIExpbmsgZ290IGRpc2FibGVkLCBqdXN0IHVzZSBkZWZsaW5rICovXG4rXHRcdFx0XHRpZiAoIXJ4LVx1MDAzZWxpbmtfc3RhKVxuK1x0XHRcdFx0XHRyeC1cdTAwM2VsaW5rX3N0YSA9IFx1MDAyNnJ4LVx1MDAzZXN0YS1cdTAwM2VkZWZsaW5rO1xuK1x0XHRcdH1cbitcdFx0XHRyeC1cdTAwM2VsaW5rX2lkID0gc3RhdHVzLVx1MDAzZWxpbmtfaWQ7XG4rXHRcdFx0cngtXHUwMDNlbGluayA9IHJjdV9kZXJlZmVyZW5jZShyeC1cdTAwM2VzZGF0YS1cdTAwM2VsaW5rW3N0YXR1cy1cdTAwM2VsaW5rX2lkXSk7XG4rXHRcdH1cbiBcbiBcdFx0aWYgKFdBUk5fT05fT05DRSghcngtXHUwMDNlbGluaykpIHtcbiBcdFx0XHRyZXMgPSBSWF9EUk9QX1VfTk9fTElOSztcbkBAIC00MzIzLDcgKzQzMTgsMzQgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX2ludm9rZV9yeF9oYW5kbGVycyhzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxuIHN0YXRpYyBib29sXG4gaWVlZTgwMjExX3J4X2lzX3ZhbGlkX3N0YV9saW5rX2lkKHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHU4IGxpbmtfaWQpXG4ge1xuLVx0cmV0dXJuICEhKHN0YS1cdTAwM2V2YWxpZF9saW5rcyBcdTAwMjYgQklUKGxpbmtfaWQpKTtcbitcdGlmIChzdGEtXHUwMDNlbWxvKVxuK1x0XHRyZXR1cm4gc3RhLVx1MDAzZXZhbGlkX2xpbmtzIFx1MDAyNiBCSVQobGlua19pZCk7XG4rXG4rXHRyZXR1cm4gc3RhLVx1MDAzZWRlZmxpbmsubGlua19pZCA9PSBsaW5rX2lkO1xuK31cbitcbitzdGF0aWMgYm9vbCBpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGlua19zdGEoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcbitcdFx0XHRcdFx0ICAgc3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhKVxuK3tcbitcdHN0cnVjdCBzdGFfaW5mbyAqc3RhO1xuK1xuK1x0aWYgKFdBUk5fT05fT05DRSghbGlua19zdGEpIHx8XG4rXHQgICAgIWllZWU4MDIxMV9yeF9pc192YWxpZF9zdGFfbGlua19pZChcdTAwMjZsaW5rX3N0YS1cdTAwM2VzdGEtXHUwMDNlc3RhLFxuK1x0XHRcdFx0XHQgICAgICAgbGlua19zdGEtXHUwMDNlbGlua19pZCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHN0YSA9IGxpbmtfc3RhLVx1MDAzZXN0YTtcbitcbitcdHJ4LVx1MDAzZXN0YSA9IHN0YTtcbitcdHJ4LVx1MDAzZWxvY2FsID0gc3RhLVx1MDAzZXNkYXRhLVx1MDAzZWxvY2FsO1xuK1x0cngtXHUwMDNlbGluayA9IHJjdV9kZXJlZmVyZW5jZShzdGEtXHUwMDNlc2RhdGEtXHUwMDNlbGlua1tsaW5rX3N0YS1cdTAwM2VsaW5rX2lkXSk7XG4rXHRpZiAoIXJ4LVx1MDAzZWxpbmspXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJ4LVx1MDAzZWxpbmtfaWQgPSByeC1cdTAwM2VsaW5rLVx1MDAzZWxpbmtfaWQ7XG4rXHRyeC1cdTAwM2VsaW5rX3N0YSA9IGxpbmtfc3RhO1xuK1xuK1x0cmV0dXJuIHRydWU7XG4gfVxuIFxuIHN0YXRpYyBib29sIGllZWU4MDIxMV9yeF9kYXRhX3NldF9saW5rKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXG5AQCAtNDM2MCwxMSArNDM4MiwxMyBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfcnhfZGF0YV9zZXRfc3RhKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXG4gXG4gXHRpZiAobGlua19pZCBcdTAwM2MgMCkge1xuIFx0XHRpZiAoaWVlZTgwMjExX3ZpZl9pc19tbGQoXHUwMDI2cngtXHUwMDNlc2RhdGEtXHUwMDNldmlmKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIHN0YSBcdTAwMjZcdTAwMjYgIXN0YS1cdTAwM2VzdGEudmFsaWRfbGlua3MpXG4rXHRcdCAgICBzdGEgXHUwMDI2XHUwMDI2ICFzdGEtXHUwMDNlc3RhLnZhbGlkX2xpbmtzKSB7XG4gXHRcdFx0cngtXHUwMDNlbGluayA9XG4gXHRcdFx0XHRyY3VfZGVyZWZlcmVuY2UocngtXHUwMDNlc2RhdGEtXHUwMDNlbGlua1tzdGEtXHUwMDNlZGVmbGluay5saW5rX2lkXSk7XG4tXHRcdGVsc2VcbitcdFx0XHRyeC1cdTAwM2VsaW5rX3N0YSA9IHJjdV9kZXJlZmVyZW5jZShyeC1cdTAwM2VzdGEtXHUwMDNlbGlua1tsaW5rX2lkXSk7XG4rXHRcdH0gZWxzZSB7XG4gXHRcdFx0cngtXHUwMDNlbGluayA9IFx1MDAyNnJ4LVx1MDAzZXNkYXRhLVx1MDAzZWRlZmxpbms7XG4rXHRcdH1cbiBcdH0gZWxzZSBpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9saW5rKHJ4LCBsaW5rX2lkKSkge1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5AQCAtNDM4Nyw3ICs0NDExLDcgQEAgdm9pZCBpZWVlODAyMTFfcmVsZWFzZV9yZW9yZGVyX3RpbWVvdXQoc3RydWN0IHN0YV9pbmZvICpzdGEsIGludCB0aWQpXG4gXHRzdHJ1Y3QgdGlkX2FtcGR1X3J4ICp0aWRfYWdnX3J4O1xuIFx0aW50IGxpbmtfaWQgPSAtMTtcbiBcbi1cdC8qIEZJWE1FOiBzdGF0aXN0aWNzIHdvbid0IGJlIHJpZ2h0IHdpdGggdGhpcyAqL1xuK1x0LyogTk9URTogdGhlIGNvcnJlY3QgbGluayBTVEEgZm9yIHRoZSBmcmFtZSBpcyBzZXQgbGF0ZXIgKi9cbiBcdGlmIChzdGEtXHUwMDNlc3RhLnZhbGlkX2xpbmtzKVxuIFx0XHRsaW5rX2lkID0gZmZzKHN0YS1cdTAwM2VzdGEudmFsaWRfbGlua3MpIC0gMTtcbiBcbkBAIC00OTE0LDIwICs0OTM4LDE0IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF84MDIzKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXG4ge1xuIFx0c3RydWN0IGllZWU4MDIxMV9zdGFfcnhfc3RhdHMgKnN0YXRzO1xuIFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihyeC1cdTAwM2Vza2IpO1xuLVx0c3RydWN0IHN0YV9pbmZvICpzdGEgPSByeC1cdTAwM2VzdGE7XG4tXHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGE7XG4rXHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEgPSByeC1cdTAwM2VsaW5rX3N0YTtcbiBcdHN0cnVjdCBza19idWZmICpza2IgPSByeC1cdTAwM2Vza2I7XG4gXHR2b2lkICpzYSA9IHNrYi1cdTAwM2VkYXRhICsgRVRIX0FMRU47XG4gXHR2b2lkICpkYSA9IHNrYi1cdTAwM2VkYXRhO1xuIFxuLVx0aWYgKHJ4LVx1MDAzZWxpbmtfaWQgXHUwMDNlPSAwKSB7XG4tXHRcdGxpbmtfc3RhID0gcmN1X2RlcmVmZXJlbmNlKHN0YS1cdTAwM2VsaW5rW3J4LVx1MDAzZWxpbmtfaWRdKTtcbi1cdFx0aWYgKFdBUk5fT05fT05DRSghbGlua19zdGEpKSB7XG4tXHRcdFx0ZGV2X2tmcmVlX3NrYihyeC1cdTAwM2Vza2IpO1xuLVx0XHRcdHJldHVybjtcbi1cdFx0fVxuLVx0fSBlbHNlIHtcbi1cdFx0bGlua19zdGEgPSBcdTAwMjZzdGEtXHUwMDNlZGVmbGluaztcbitcdGlmIChXQVJOX09OX09OQ0UoIWxpbmtfc3RhKSkge1xuK1x0XHRkZXZfa2ZyZWVfc2tiKHJ4LVx1MDAzZXNrYik7XG4rXHRcdHJldHVybjtcbiBcdH1cbiBcbiBcdHN0YXRzID0gXHUwMDI2bGlua19zdGEtXHUwMDNlcnhfc3RhdHM7XG5AQCAtNTE1NCw2ICs1MTcyLDkgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX2ludm9rZV9mYXN0X3J4KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXG4gXHRcdGdvdG8gZHJvcDtcbiBcdH1cbiBcbitcdHN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpO1xuK1x0c3RhdHVzLVx1MDAzZWxpbmtfaWQgPSByeC1cdTAwM2VsaW5rX2lkIFx1MDAzYyAwID8gMCA6IHJ4LVx1MDAzZWxpbmtfaWQ7XG4rXG4gXHRpZWVlODAyMTFfcnhfODAyMyhyeCwgZmFzdF9yeCwgb3JpZ19sZW4pO1xuIFxuIFx0cmV0dXJuIHRydWU7XG5AQCAtNTE3OCw2ICs1MTk5LDcgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxuIFx0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9ICh2b2lkICopc2tiLVx1MDAzZWRhdGE7XG4gXHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEgPSByeC1cdTAwM2VsaW5rX3N0YTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rID0gcngtXHUwMDNlbGluaztcbitcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXM7XG4gXG4gXHRyeC1cdTAwM2Vza2IgPSBza2I7XG4gXG5AQCAtNTIyMSw2ICs1MjQzLDkgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxuIFx0XHRoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilyeC1cdTAwM2Vza2ItXHUwMDNlZGF0YTtcbiBcdH1cbiBcbitcdHN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihyeC1cdTAwM2Vza2IpO1xuK1x0c3RhdHVzLVx1MDAzZWxpbmtfaWQgPSByeC1cdTAwM2VsaW5rX2lkIFx1MDAzYyAwID8gMCA6IHJ4LVx1MDAzZWxpbmtfaWQ7XG4rXG4gXHRpZiAoaWVlZTgwMjExX2lzX3MxZ19iZWFjb24oaGRyLVx1MDAzZWZyYW1lX2NvbnRyb2wpKSB7XG4gXHRcdGllZWU4MDIxMV9pbnZva2VfcnhfaGFuZGxlcnMocngpO1xuIFx0XHRyZXR1cm4gdHJ1ZTtcbkBAIC01MjU2LDIyICs1MjgxLDE5IEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlXzgwMjMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3B1YnN0YSxcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4ge1xuIFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7XG4tXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2Zhc3RfcnggKmZhc3Rfcng7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgcng7XG4gXHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YTtcbi1cdGludCBsaW5rX2lkID0gLTE7XG4gXG4gXHRtZW1zZXQoXHUwMDI2cngsIDAsIHNpemVvZihyeCkpO1xuIFx0cnguc2tiID0gc2tiO1xuIFx0cngubG9jYWwgPSBsb2NhbDtcbiBcdHJ4Lmxpc3QgPSBsaXN0O1xuLVx0cngubGlua19pZCA9IC0xO1xuIFxuIFx0STgwMl9ERUJVR19JTkMobG9jYWwtXHUwMDNlZG90MTFSZWNlaXZlZEZyYWdtZW50Q291bnQpO1xuIFxuQEAgLTUyNzksMjMgKzUzMDEsMTUgQEAgc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlXzgwMjMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gXHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBldGhoZHIpKVxuIFx0XHRnb3RvIGRyb3A7XG4gXG4tXHRpZiAoIXB1YnN0YSlcbitcdGlmICghbGlua19wdWJzdGEpXG4gXHRcdGdvdG8gZHJvcDtcbiBcbi1cdGlmIChzdGF0dXMtXHUwMDNlbGlua192YWxpZClcbi1cdFx0bGlua19pZCA9IHN0YXR1cy1cdTAwM2VsaW5rX2lkO1xuLVxuLVx0Lypcbi1cdCAqIFRPRE86IFNob3VsZCB0aGUgZnJhbWUgYmUgZHJvcHBlZCBpZiB0aGUgcmlnaHQgbGlua19pZCBpcyBub3Rcbi1cdCAqIGF2YWlsYWJsZT8gT3IgbWF5IGJlIGl0IGlzIGZpbmUgaW4gdGhlIGN1cnJlbnQgZm9ybSB0byBwcm9jZWVkIHdpdGhcbi1cdCAqIHRoZSBmcmFtZSBwcm9jZXNzaW5nIGJlY2F1c2Ugd2l0aCBmcmFtZSBiZWluZyBpbiA4MDIuMyBmb3JtYXQsXG4tXHQgKiBsaW5rX2lkIGlzIHVzZWQgb25seSBmb3Igc3RhdHMgcHVycG9zZSBhbmQgdXBkYXRpbmcgdGhlIHN0YXRzIG9uXG4tXHQgKiB0aGUgZGVmbGluayBpcyBmaW5lP1xuLVx0ICovXG4tXHRzdGEgPSBjb250YWluZXJfb2YocHVic3RhLCBzdHJ1Y3Qgc3RhX2luZm8sIHN0YSk7XG4tXHRpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEoXHUwMDI2cngsIHN0YSwgbGlua19pZCkpXG4rXHRzdGEgPSBjb250YWluZXJfb2YobGlua19wdWJzdGEtXHUwMDNlc3RhLCBzdHJ1Y3Qgc3RhX2luZm8sIHN0YSk7XG4rXHRpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEoXHUwMDI2cngsIHN0YSwgbGlua19wdWJzdGEtXHUwMDNlbGlua19pZCkpXG4gXHRcdGdvdG8gZHJvcDtcbiBcbitcdHJ4LmxpbmtfaWQgPSBsaW5rX3B1YnN0YS1cdTAwM2VsaW5rX2lkO1xuK1xuIFx0ZmFzdF9yeCA9IHJjdV9kZXJlZmVyZW5jZShyeC5zdGEtXHUwMDNlZmFzdF9yeCk7XG4gXHRpZiAoIWZhc3RfcngpXG4gXHRcdGdvdG8gZHJvcDtcbkBAIC01MzA3LDU5ICs1MzIxLDE5IEBAIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J4X2hhbmRsZV84MDIzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuIFx0ZGV2X2tmcmVlX3NrYihza2IpO1xuIH1cbiBcbi1zdGF0aWMgYm9vbCBpZWVlODAyMTFfcnhfZm9yX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgY29uc3VtZSlcbitzdGF0aWMgYm9vbCBpZWVlODAyMTFfcnhfdmFsaWRfZnJlcShpbnQgZnJlcSwgc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmspXG4ge1xuLVx0c3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhO1xuLVx0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9ICh2b2lkICopc2tiLVx1MDAzZWRhdGE7XG4tXHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YTtcbi1cdGludCBsaW5rX2lkID0gLTE7XG4tXG4tXHRpZiAoaWVlZTgwMjExX2lzX3MxZ19iZWFjb24oaGRyLVx1MDAzZWZyYW1lX2NvbnRyb2wpKSB7XG4tXHRcdGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X3N0YShyeCwgTlVMTCwgLTEpKVxuLVx0XHRcdHJldHVybiBmYWxzZTtcbi1cbi1cdFx0cmV0dXJuIGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUocngsIHNrYiwgY29uc3VtZSk7XG4tXHR9XG4rXHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZjtcbiBcbi1cdC8qXG4tXHQgKiBMb29rIHVwIGxpbmsgc3RhdGlvbiBmaXJzdCwgaW4gY2FzZSB0aGVyZSdzIGFcbi1cdCAqIGNoYW5jZSB0aGF0IHRoZXkgbWlnaHQgaGF2ZSBhIGxpbmsgYWRkcmVzcyB0aGF0XG4tXHQgKiBpcyBpZGVudGljYWwgdG8gdGhlIE1MRCBhZGRyZXNzLCB0aGF0IHdheSB3ZSdsbFxuLVx0ICogaGF2ZSB0aGUgbGluayBpbmZvcm1hdGlvbiBpZiBuZWVkZWQuXG4tXHQgKi9cbi1cdGxpbmtfc3RhID0gbGlua19zdGFfaW5mb19nZXRfYnNzKHJ4LVx1MDAzZXNkYXRhLCBoZHItXHUwMDNlYWRkcjIpO1xuLVx0aWYgKGxpbmtfc3RhKSB7XG4tXHRcdHN0YSA9IGxpbmtfc3RhLVx1MDAzZXN0YTtcbi1cdFx0bGlua19pZCA9IGxpbmtfc3RhLVx1MDAzZWxpbmtfaWQ7XG4tXHR9IGVsc2Uge1xuLVx0XHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4tXG4tXHRcdHN0YSA9IHN0YV9pbmZvX2dldF9ic3MocngtXHUwMDNlc2RhdGEsIGhkci1cdTAwM2VhZGRyMik7XG4tXHRcdGlmIChzdGF0dXMtXHUwMDNlbGlua192YWxpZCkge1xuLVx0XHRcdGxpbmtfaWQgPSBzdGF0dXMtXHUwMDNlbGlua19pZDtcbi1cdFx0fSBlbHNlIGlmIChpZWVlODAyMTFfdmlmX2lzX21sZChcdTAwMjZyeC1cdTAwM2VzZGF0YS1cdTAwM2V2aWYpIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgIHN0YXR1cy1cdTAwM2VmcmVxKSB7XG4tXHRcdFx0c3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbms7XG4tXHRcdFx0c3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmY7XG4tXG4tXHRcdFx0Zm9yX2VhY2hfbGlua19kYXRhX3JjdShyeC1cdTAwM2VzZGF0YSwgbGluaykge1xuLVx0XHRcdFx0Y29uZiA9IHJjdV9kZXJlZmVyZW5jZShsaW5rLVx1MDAzZWNvbmYtXHUwMDNlY2hhbmN0eF9jb25mKTtcbi1cdFx0XHRcdGlmICghY29uZiB8fCAhY29uZi1cdTAwM2VkZWYuY2hhbilcbi1cdFx0XHRcdFx0Y29udGludWU7XG4tXG4tXHRcdFx0XHRpZiAoc3RhdHVzLVx1MDAzZWZyZXEgPT0gY29uZi1cdTAwM2VkZWYuY2hhbi1cdTAwM2VjZW50ZXJfZnJlcSkge1xuLVx0XHRcdFx0XHRsaW5rX2lkID0gbGluay1cdTAwM2VsaW5rX2lkO1xuLVx0XHRcdFx0XHRicmVhaztcbi1cdFx0XHRcdH1cbi1cdFx0XHR9XG4tXHRcdH1cbi1cdH1cbitcdGlmICghZnJlcSB8fCBsaW5rLVx1MDAzZXNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX05BTiB8fFxuK1x0ICAgIGxpbmstXHUwMDNlc2RhdGEtXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTkFOX0RBVEEpXG4rXHRcdHJldHVybiB0cnVlO1xuIFxuLVx0aWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfc3RhKHJ4LCBzdGEsIGxpbmtfaWQpKVxuK1x0Y29uZiA9IHJjdV9kZXJlZmVyZW5jZShsaW5rLVx1MDAzZWNvbmYtXHUwMDNlY2hhbmN0eF9jb25mKTtcbitcdGlmICghY29uZiB8fCAhY29uZi1cdTAwM2VkZWYuY2hhbilcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0cmV0dXJuIGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUocngsIHNrYiwgY29uc3VtZSk7XG4rXHRyZXR1cm4gZnJlcSA9PSBjb25mLVx1MDAzZWRlZi5jaGFuLVx1MDAzZWNlbnRlcl9mcmVxO1xuIH1cbiBcbiAvKlxuQEAgLTUzNjcsMTggKzUzNDEsMjAgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX3J4X2Zvcl9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcbiAgKiBiZSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrIHByb3RlY3Rpb24uXG4gICovXG4gc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi1cdFx0XHRcdFx0IHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsXG4rXHRcdFx0XHRcdCBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3B1YnN0YSxcbiBcdFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHRcdCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxuIHtcbiBcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpO1xuLVx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpO1xuIFx0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7XG4rXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyO1xuK1x0c3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhO1xuK1x0c3RydWN0IHN0YV9pbmZvICpzdGE7XG4gXHRfX2xlMTYgZmM7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgcng7XG4tXHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpwcmV2O1xuIFx0c3RydWN0IHJobGlzdF9oZWFkICp0bXA7XG4rXHRib29sIHJ4X2RhdGFfcGVuZGluZztcbiBcdGludCBlcnIgPSAwO1xuIFxuIFx0ZmMgPSAoKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLVx1MDAzZWRhdGEpLVx1MDAzZWZyYW1lX2NvbnRyb2w7XG5AQCAtNTM4Niw3ICs1MzYyLDYgQEAgc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcdHJ4LnNrYiA9IHNrYjtcbiBcdHJ4LmxvY2FsID0gbG9jYWw7XG4gXHRyeC5saXN0ID0gbGlzdDtcbi1cdHJ4LmxpbmtfaWQgPSAtMTtcbiBcbiBcdGlmIChpZWVlODAyMTFfaXNfZGF0YShmYykgfHwgaWVlZTgwMjExX2lzX21nbXQoZmMpKVxuIFx0XHRJODAyX0RFQlVHX0lOQyhsb2NhbC1cdTAwM2Vkb3QxMVJlY2VpdmVkRnJhZ21lbnRDb3VudCk7XG5AQCAtNTQyNiw5NyArNTQwMSwxMDIgQEAgc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcdFx0ICAgICBpZWVlODAyMTFfaXNfczFnX2JlYWNvbihoZHItXHUwMDNlZnJhbWVfY29udHJvbCkpKVxuIFx0XHRpZWVlODAyMTFfc2Nhbl9yeChsb2NhbCwgc2tiKTtcbiBcbitcdC8qXG4rXHQgKiBSWCBvZiBhIGRhdGEgZnJhbWUgc2hvdWxkIG9ubHkgaGFwcGVuIHRvIGV4aXN0aW5nIHN0YXRpb25zLlxuK1x0ICogSXQgaXMgdGhlcmVmb3JlIG1vcmUgZWZmaWNpZW50IHRvIHVzZSB0aGUgb25lIHByb3ZpZGVkIGJ5IHRoZSBkcml2ZXJcbitcdCAqIG9yIHNlYXJjaCBiYXNlZCBvbiB0aGUgc3RhdGlvbidzIGFkZHJlc3MuXG4rXHQgKlxuK1x0ICogTm90ZSB3ZSB3aWxsIGZhbGwgdGhyb3VnaCBhbmQgaGFuZGxlIGEgc3B1cmlvdXMgZGF0YSBmcmFtZSBpbiB0aGVcbitcdCAqIHNhbWUgd2F5IGFzIGEgbWFuYWdlbWVudCBmcmFtZS5cbitcdCAqL1xuIFx0aWYgKGllZWU4MDIxMV9pc19kYXRhKGZjKSkge1xuLVx0XHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgKnByZXZfc3RhO1xuLVx0XHRpbnQgbGlua19pZCA9IC0xO1xuLVxuLVx0XHRpZiAoc3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQpXG4tXHRcdFx0bGlua19pZCA9IHN0YXR1cy1cdTAwM2VsaW5rX2lkO1xuLVxuLVx0XHRpZiAocHVic3RhKSB7XG4tXHRcdFx0c3RhID0gY29udGFpbmVyX29mKHB1YnN0YSwgc3RydWN0IHN0YV9pbmZvLCBzdGEpO1xuLVx0XHRcdGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X3N0YShcdTAwMjZyeCwgc3RhLCBsaW5rX2lkKSlcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVxuLVx0XHRcdC8qXG4tXHRcdFx0ICogSW4gTUxPIGNvbm5lY3Rpb24sIGZldGNoIHRoZSBsaW5rX2lkIHVzaW5nIGFkZHIyXG4tXHRcdFx0ICogd2hlbiB0aGUgZHJpdmVyIGRvZXMgbm90IHBhc3MgbGlua19pZCBpbiBzdGF0dXMuXG4tXHRcdFx0ICogV2hlbiB0aGUgYWRkcmVzcyB0cmFuc2xhdGlvbiBpcyBhbHJlYWR5IHBlcmZvcm1lZCBieVxuLVx0XHRcdCAqIGRyaXZlci9odywgdGhlIHZhbGlkIGxpbmtfaWQgbXVzdCBiZSBwYXNzZWQgaW5cbi1cdFx0XHQgKiBzdGF0dXMuXG4tXHRcdFx0ICovXG4tXG4tXHRcdFx0aWYgKCFzdGF0dXMtXHUwMDNlbGlua192YWxpZCBcdTAwMjZcdTAwMjYgcHVic3RhLVx1MDAzZW1sbykge1xuLVx0XHRcdFx0c3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhO1xuLVxuLVx0XHRcdFx0bGlua19zdGEgPSBsaW5rX3N0YV9pbmZvX2dldF9ic3Mocnguc2RhdGEsXG4tXHRcdFx0XHRcdFx0XHRcdCBoZHItXHUwMDNlYWRkcjIpO1xuLVx0XHRcdFx0aWYgKCFsaW5rX3N0YSlcbi1cdFx0XHRcdFx0Z290byBvdXQ7XG4tXG4tXHRcdFx0XHRpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9saW5rKFx1MDAyNnJ4LFxuLVx0XHRcdFx0XHRcdFx0XHRsaW5rX3N0YS1cdTAwM2VsaW5rX2lkKSlcbi1cdFx0XHRcdFx0Z290byBvdXQ7XG4tXHRcdFx0fVxuLVxuLVx0XHRcdGlmIChpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKFx1MDAyNnJ4LCBza2IsIHRydWUpKVxuK1x0XHRpZiAobGlua19wdWJzdGEpIHtcbitcdFx0XHRzdGEgPSBjb250YWluZXJfb2YobGlua19wdWJzdGEtXHUwMDNlc3RhLCBzdHJ1Y3Qgc3RhX2luZm8sXG4rXHRcdFx0XHRcdCAgIHN0YSk7XG4rXHRcdFx0bGlua19zdGEgPSByY3VfZGVyZWZlcmVuY2Uoc3RhLVx1MDAzZWxpbmtbbGlua19wdWJzdGEtXHUwMDNlbGlua19pZF0pO1xuK1xuK1x0XHRcdHJ4LnNkYXRhID0gc3RhLVx1MDAzZXNkYXRhO1xuK1x0XHRcdGlmIChpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGlua19zdGEoXHUwMDI2cngsIGxpbmtfc3RhKSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShcdTAwMjZyeCwgc2tiLCB0cnVlKSlcbiBcdFx0XHRcdHJldHVybjtcbitcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuLVx0XHRwcmV2X3N0YSA9IE5VTEw7XG4rXHRcdHJ4X2RhdGFfcGVuZGluZyA9IGZhbHNlO1xuIFxuK1x0XHQvKiBTZWFyY2ggZm9yIHN0YXRpb25zIG9uIG5vbi1NTEQgaW50ZXJmYWNlcyAqL1xuIFx0XHRmb3JfZWFjaF9zdGFfaW5mbyhsb2NhbCwgaGRyLVx1MDAzZWFkZHIyLCBzdGEsIHRtcCkge1xuLVx0XHRcdGlmICghcHJldl9zdGEpIHtcbi1cdFx0XHRcdHByZXZfc3RhID0gc3RhO1xuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0fVxuK1x0XHRcdHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rO1xuIFxuLVx0XHRcdHJ4LnNkYXRhID0gcHJldl9zdGEtXHUwMDNlc2RhdGE7XG4tXHRcdFx0aWYgKCFzdGF0dXMtXHUwMDNlbGlua192YWxpZCBcdTAwMjZcdTAwMjYgcHJldl9zdGEtXHUwMDNlc3RhLm1sbykge1xuLVx0XHRcdFx0c3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhO1xuK1x0XHRcdGlmIChpZWVlODAyMTFfdmlmX2lzX21sZChcdTAwMjZzdGEtXHUwMDNlc2RhdGEtXHUwMDNldmlmKSlcbitcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdFx0bGlua19zdGEgPSBsaW5rX3N0YV9pbmZvX2dldF9ic3Mocnguc2RhdGEsXG4tXHRcdFx0XHRcdFx0XHRcdCBoZHItXHUwMDNlYWRkcjIpO1xuLVx0XHRcdFx0aWYgKCFsaW5rX3N0YSlcbi1cdFx0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0bGluayA9IFx1MDAyNnN0YS1cdTAwM2VzZGF0YS1cdTAwM2VkZWZsaW5rO1xuK1x0XHRcdGlmICghaWVlZTgwMjExX3J4X3ZhbGlkX2ZyZXEoc3RhdHVzLVx1MDAzZWZyZXEsIGxpbmspKVxuK1x0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0XHRsaW5rX2lkID0gbGlua19zdGEtXHUwMDNlbGlua19pZDtcbitcdFx0XHRpZiAocnhfZGF0YV9wZW5kaW5nKSB7XG4rXHRcdFx0XHRpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKFx1MDAyNnJ4LCBza2IsXG4rXHRcdFx0XHRcdFx0XHRcdGZhbHNlKTtcbitcdFx0XHRcdHJ4X2RhdGFfcGVuZGluZyA9IGZhbHNlO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHRpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEoXHUwMDI2cngsIHByZXZfc3RhLCBsaW5rX2lkKSlcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVxuLVx0XHRcdGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoXHUwMDI2cngsIHNrYiwgZmFsc2UpO1xuK1x0XHRcdHJ4LnNkYXRhID0gc3RhLVx1MDAzZXNkYXRhO1xuK1x0XHRcdGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X2xpbmtfc3RhKFx1MDAyNnJ4LCBcdTAwMjZzdGEtXHUwMDNlZGVmbGluaykpXG4rXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRwcmV2X3N0YSA9IHN0YTtcbitcdFx0XHRyeF9kYXRhX3BlbmRpbmcgPSB0cnVlO1xuIFx0XHR9XG4gXG4tXHRcdGlmIChwcmV2X3N0YSkge1xuLVx0XHRcdHJ4LnNkYXRhID0gcHJldl9zdGEtXHUwMDNlc2RhdGE7XG4tXHRcdFx0aWYgKCFzdGF0dXMtXHUwMDNlbGlua192YWxpZCBcdTAwMjZcdTAwMjYgcHJldl9zdGEtXHUwMDNlc3RhLm1sbykge1xuLVx0XHRcdFx0c3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhO1xuK1x0XHQvKiBBbmQgc2VhcmNoIHN0YXRpb25zIG9uIE1MRCBpbnRlcmZhY2VzICovXG4rXHRcdGZvcl9lYWNoX2xpbmtfc3RhX2luZm8obG9jYWwsIGhkci1cdTAwM2VhZGRyMiwgbGlua19zdGEsIHRtcCkge1xuK1x0XHRcdHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rO1xuIFxuLVx0XHRcdFx0bGlua19zdGEgPSBsaW5rX3N0YV9pbmZvX2dldF9ic3Mocnguc2RhdGEsXG4tXHRcdFx0XHRcdFx0XHRcdCBoZHItXHUwMDNlYWRkcjIpO1xuLVx0XHRcdFx0aWYgKCFsaW5rX3N0YSlcbi1cdFx0XHRcdFx0Z290byBvdXQ7XG4rXHRcdFx0c3RhID0gbGlua19zdGEtXHUwMDNlc3RhO1xuK1x0XHRcdHNkYXRhID1cdHN0YS1cdTAwM2VzZGF0YTtcbitcdFx0XHRsaW5rID0gcmN1X2RlcmVmZXJlbmNlKHNkYXRhLVx1MDAzZWxpbmtbbGlua19zdGEtXHUwMDNlbGlua19pZF0pO1xuIFxuLVx0XHRcdFx0bGlua19pZCA9IGxpbmtfc3RhLVx1MDAzZWxpbmtfaWQ7XG4rXHRcdFx0aWYgKCFpZWVlODAyMTFfcnhfdmFsaWRfZnJlcShzdGF0dXMtXHUwMDNlZnJlcSwgbGluaykpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbitcdFx0XHRpZiAocnhfZGF0YV9wZW5kaW5nKSB7XG4rXHRcdFx0XHRpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKFx1MDAyNnJ4LCBza2IsXG4rXHRcdFx0XHRcdFx0XHRcdGZhbHNlKTtcbitcdFx0XHRcdHJ4X2RhdGFfcGVuZGluZyA9IGZhbHNlO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHRpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEoXHUwMDI2cngsIHByZXZfc3RhLCBsaW5rX2lkKSlcbi1cdFx0XHRcdGdvdG8gb3V0O1xuK1x0XHRcdHJ4LnNkYXRhID0gc3RhLVx1MDAzZXNkYXRhO1xuK1x0XHRcdGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X2xpbmtfc3RhKFx1MDAyNnJ4LCBsaW5rX3N0YSkpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbitcdFx0XHRyeF9kYXRhX3BlbmRpbmcgPSB0cnVlO1xuK1x0XHR9XG4gXG4rXHRcdGlmIChyeF9kYXRhX3BlbmRpbmcpIHtcbiBcdFx0XHRpZiAoaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShcdTAwMjZyeCwgc2tiLCB0cnVlKSlcbiBcdFx0XHRcdHJldHVybjtcbitcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuK1xuK1x0XHQvKiBmYWxsIHRocm91Z2gsIGUuZy4gZm9yIHNwdXJpb3VzIGZyYW1lIG5vdGlmaWNhdGlvbiAqL1xuIFx0fVxuIFxuLVx0cHJldiA9IE5VTEw7XG4rXHQvKlxuK1x0ICogVGhpcyBpcyBhIG1hbmFnZW1lbnQgZnJhbWUgKG9yIGEgZGF0YSBmcmFtZSB3aXRob3V0IGEgc3RhdGlvbikgYW5kXG4rXHQgKiBpdCB3aWxsIGJlIGRlbGl2ZXJlZCBpbmRlcGVuZGVudCBvZiB3aGV0aGVyIGEgc3RhdGlvbiBleGlzdHMsXG4rXHQgKiBzbyBpdGVyYXRlIHRoZSBpbnRlcmZhY2VzLlxuK1x0ICovXG4rXHRyeF9kYXRhX3BlbmRpbmcgPSBmYWxzZTtcbitcbitcdC8qIFdlIGV4cGVjdCB0aGUgZHJpdmVyIHRvIHByb3ZpZGUgZnJlcXVlbmN5IGluZm9ybWF0aW9uICovXG4rXHRpZiAoV0FSTl9PTl9PTkNFKCFsb2NhbC1cdTAwM2VlbXVsYXRlX2NoYW5jdHggXHUwMDI2XHUwMDI2ICFzdGF0dXMtXHUwMDNlZnJlcSkpXG4rXHRcdGdvdG8gb3V0O1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2RhdGEsIFx1MDAyNmxvY2FsLVx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcbitcdFx0c3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmsgPSBOVUxMO1xuK1xuIFx0XHRpZiAoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbkBAIC01NTI0LDMwICs1NTA0LDg1IEBAIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gXHRcdCAgICBzZGF0YS1cdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuK1x0XHRsaW5rX3N0YSA9IE5VTEw7XG4rXHRcdGxpbmsgPSBOVUxMO1xuK1xuK1x0XHQvKiBUcnkgdG8gcmVzb2x2ZSB0aGUgc3RhdGlvbiAqL1xuK1x0XHRpZiAoIWllZWU4MDIxMV92aWZfaXNfbWxkKFx1MDAyNnNkYXRhLVx1MDAzZXZpZikpIHtcbitcdFx0XHRzdGEgPSBzdGFfaW5mb19nZXRfYnNzKHNkYXRhLCBoZHItXHUwMDNlYWRkcjIpO1xuK1xuK1x0XHRcdGlmIChzdGEpIHtcbitcdFx0XHRcdGxpbmtfc3RhID0gXHUwMDI2c3RhLVx1MDAzZWRlZmxpbms7XG4rXHRcdFx0XHRsaW5rID0gXHUwMDI2c2RhdGEtXHUwMDNlZGVmbGluaztcbitcdFx0XHR9XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0bGlua19zdGEgPSBsaW5rX3N0YV9pbmZvX2dldF9ic3Moc2RhdGEsIGhkci1cdTAwM2VhZGRyMik7XG4rXG4rXHRcdFx0aWYgKGxpbmtfc3RhKVxuK1x0XHRcdFx0bGluayA9IHJjdV9kZXJlZmVyZW5jZShzZGF0YS1cdTAwM2VsaW5rW2xpbmtfc3RhLVx1MDAzZWxpbmtfaWRdKTtcbitcdFx0fVxuK1xuIFx0XHQvKlxuLVx0XHQgKiBmcmFtZSBpcyBkZXN0aW5lZCBmb3IgdGhpcyBpbnRlcmZhY2UsIGJ1dCBpZiBpdCdzXG4tXHRcdCAqIG5vdCBhbHNvIGZvciB0aGUgcHJldmlvdXMgb25lIHdlIGhhbmRsZSB0aGF0IGFmdGVyXG4tXHRcdCAqIHRoZSBsb29wIHRvIGF2b2lkIGNvcHlpbmcgdGhlIFNLQiBvbmNlIHRvbyBtdWNoXG4rXHRcdCAqIElmIHdlIGZvdW5kIGEgU1RBIGFuZCBpdCBoYXMgYSB2YWxpZCBsaW5rIGluZm9ybWF0aW9uLCB0aGVuXG4rXHRcdCAqIFJYIHVzaW5nIHRoZSBzdGF0aW9uLlxuIFx0XHQgKi9cbitcdFx0aWYgKGxpbmtfc3RhIFx1MDAyNlx1MDAyNiBsaW5rIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgaWVlZTgwMjExX3J4X3ZhbGlkX2ZyZXEoc3RhdHVzLVx1MDAzZWZyZXEsIGxpbmspKSB7XG4rXHRcdFx0aWYgKHJ4X2RhdGFfcGVuZGluZykge1xuK1x0XHRcdFx0aWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShcdTAwMjZyeCwgc2tiLCBmYWxzZSk7XG4rXHRcdFx0XHRyeF9kYXRhX3BlbmRpbmcgPSBmYWxzZTtcbitcdFx0XHR9XG4rXG4rXHRcdFx0LyogTm8gdmFsaWRfbGlua3MgY2hlY2sgYXMgd2UgbmVlZCB0byBSWCBiZWFjb25zICovXG4rXG4rXHRcdFx0cnguc2RhdGEgPSBzZGF0YTtcbitcdFx0XHRpZiAoaWVlZTgwMjExX3J4X2RhdGFfc2V0X2xpbmtfc3RhKFx1MDAyNnJ4LCBsaW5rX3N0YSkpXG4rXHRcdFx0XHRyeF9kYXRhX3BlbmRpbmcgPSB0cnVlO1xuIFxuLVx0XHRpZiAoIXByZXYpIHtcbi1cdFx0XHRwcmV2ID0gc2RhdGE7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbi1cdFx0cnguc2RhdGEgPSBwcmV2O1xuLVx0XHRpZWVlODAyMTFfcnhfZm9yX2ludGVyZmFjZShcdTAwMjZyeCwgc2tiLCBmYWxzZSk7XG4rXHRcdC8qIE5vIHN0YXRpb24sIHRyeSB0byByZXNvbHZlIHRoZSBsaW5rIGFuZCBSWCAqL1xuK1x0XHRpZiAoaWVlZTgwMjExX3ZpZl9pc19tbGQoXHUwMDI2c2RhdGEtXHUwMDNldmlmKSkge1xuK1x0XHRcdHN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjb25mO1xuK1x0XHRcdGJvb2wgZm91bmQgPSBmYWxzZTtcbiBcbi1cdFx0cHJldiA9IHNkYXRhO1xuLVx0fVxuK1x0XHRcdGZvcl9lYWNoX2xpbmtfZGF0YV9yY3Uoc2RhdGEsIGxpbmspIHtcbitcdFx0XHRcdGNvbmYgPSByY3VfZGVyZWZlcmVuY2UobGluay1cdTAwM2Vjb25mLVx1MDAzZWNoYW5jdHhfY29uZik7XG4rXHRcdFx0XHRpZiAoIWNvbmYgfHwgIWNvbmYtXHUwMDNlZGVmLmNoYW4pXG4rXHRcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0aWYgKHByZXYpIHtcbi1cdFx0cnguc2RhdGEgPSBwcmV2O1xuK1x0XHRcdFx0aWYgKHN0YXR1cy1cdTAwM2VmcmVxID09IGNvbmYtXHUwMDNlZGVmLmNoYW4tXHUwMDNlY2VudGVyX2ZyZXEpIHtcbitcdFx0XHRcdFx0Zm91bmQgPSB0cnVlO1xuK1x0XHRcdFx0XHRicmVhaztcbitcdFx0XHRcdH1cbitcdFx0XHR9XG4gXG4tXHRcdGlmIChpZWVlODAyMTFfcnhfZm9yX2ludGVyZmFjZShcdTAwMjZyeCwgc2tiLCB0cnVlKSlcbi1cdFx0XHRyZXR1cm47XG4rXHRcdFx0aWYgKCFmb3VuZClcbitcdFx0XHRcdGxpbmsgPSBcdTAwMjZzZGF0YS1cdTAwM2VkZWZsaW5rO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGxpbmsgPSBcdTAwMjZzZGF0YS1cdTAwM2VkZWZsaW5rO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChyeF9kYXRhX3BlbmRpbmcpIHtcbitcdFx0XHRpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKFx1MDAyNnJ4LCBza2IsIGZhbHNlKTtcbitcdFx0XHRyeF9kYXRhX3BlbmRpbmcgPSBmYWxzZTtcbitcdFx0fVxuK1xuK1x0XHRyeC5zZGF0YSA9IHNkYXRhO1xuK1x0XHRyeC5sb2NhbCA9IHNkYXRhLVx1MDAzZWxvY2FsO1xuK1x0XHRyeC5saW5rID0gbGluaztcbitcdFx0cngubGlua19pZCA9IGxpbmstXHUwMDNlbGlua19pZDtcbitcdFx0cnguc3RhID0gTlVMTDtcbitcdFx0cngubGlua19zdGEgPSBOVUxMO1xuK1xuK1x0XHRyeF9kYXRhX3BlbmRpbmcgPSB0cnVlO1xuIFx0fVxuIFxuK1x0aWYgKHJ4X2RhdGFfcGVuZGluZyBcdTAwMjZcdTAwMjZcbitcdCAgICBpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKFx1MDAyNnJ4LCBza2IsIHRydWUpKVxuK1x0XHRyZXR1cm47XG4rXG4gIG91dDpcbiBcdGRldl9rZnJlZV9za2Ioc2tiKTtcbiB9XG5AQCAtNTU1Niw3ICs1NTkxLDggQEAgc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiAgKiBUaGlzIGlzIHRoZSByZWNlaXZlIHBhdGggaGFuZGxlci4gSXQgaXMgY2FsbGVkIGJ5IGEgbG93IGxldmVsIGRyaXZlciB3aGVuIGFuXG4gICogODAyLjExIE1QRFUgaXMgcmVjZWl2ZWQgZnJvbSB0aGUgaGFyZHdhcmUuXG4gICovXG4tdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSxcbit2b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuK1x0XHQgICAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19wdWJzdGEsXG4gXHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxuIHtcbiBcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpO1xuQEAgLTU2OTQsOSArNTczMCw2IEBAIHZvaWQgaWVlZTgwMjExX3J4X2xpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlmIChXQVJOX09OX09OQ0Uoc3RhdHVzLVx1MDAzZWxpbmtfaWQgXHUwMDNlPSBJRUVFODAyMTFfTElOS19VTlNQRUNJRklFRCkpXG4tXHRcdGdvdG8gZHJvcDtcbi1cbiBcdHN0YXR1cy1cdTAwM2VyeF9mbGFncyA9IDA7XG4gXG4gXHRrY292X3JlbW90ZV9zdGFydF9jb21tb24oc2tiX2dldF9rY292X2hhbmRsZShza2IpKTtcbkBAIC01NzE1LDkgKzU3NDgsMTAgQEAgdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSxcbiBcdFx0XHRpZWVlODAyMTFfdHB0X2xlZF90cmlnX3J4KGxvY2FsLCBza2ItXHUwMDNlbGVuKTtcbiBcbiBcdFx0aWYgKHN0YXR1cy1cdTAwM2VmbGFnIFx1MDAyNiBSWF9GTEFHXzgwMjMpXG4tXHRcdFx0X19pZWVlODAyMTFfcnhfaGFuZGxlXzgwMjMoaHcsIHB1YnN0YSwgc2tiLCBsaXN0KTtcbitcdFx0XHRfX2llZWU4MDIxMV9yeF9oYW5kbGVfODAyMyhodywgbGlua19wdWJzdGEsIHNrYiwgbGlzdCk7XG4gXHRcdGVsc2Vcbi1cdFx0XHRfX2llZWU4MDIxMV9yeF9oYW5kbGVfcGFja2V0KGh3LCBwdWJzdGEsIHNrYiwgbGlzdCk7XG4rXHRcdFx0X19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChodywgbGlua19wdWJzdGEsIHNrYixcbitcdFx0XHRcdFx0XHQgICAgIGxpc3QpO1xuIFx0fVxuIFxuIFx0a2Nvdl9yZW1vdGVfc3RvcCgpO1xuQEAgLTU3MjcsNyArNTc2MSw4IEBAIHZvaWQgaWVlZTgwMjExX3J4X2xpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsXG4gfVxuIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3J4X2xpc3QpO1xuIFxuLXZvaWQgaWVlZTgwMjExX3J4X25hcGkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsXG4rdm9pZCBpZWVlODAyMTFfcnhfbmFwaShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbitcdFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfcHVic3RhLFxuIFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKVxuIHtcbiBcdHN0cnVjdCBza19idWZmICp0bXA7XG5AQCAtNTc0MCw3ICs1Nzc1LDcgQEAgdm9pZCBpZWVlODAyMTFfcnhfbmFwaShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSxcbiBcdCAqIHJlY2VpdmUgcHJvY2Vzc2luZ1xuIFx0ICovXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRpZWVlODAyMTFfcnhfbGlzdChodywgcHVic3RhLCBza2IsIFx1MDAyNmxpc3QpO1xuK1x0aWVlZTgwMjExX3J4X2xpc3QoaHcsIGxpbmtfcHVic3RhLCBza2IsIFx1MDAyNmxpc3QpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRpZiAoIW5hcGkpIHtcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc2Nhbi5jIGIvbmV0L21hYzgwMjExL3NjYW4uY1xuaW5kZXggZWVmZjIzMGJkOTA5Zi4uMzI0YzJiNmQ3Y2UxYiAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9zY2FuLmNcbisrKyBiL25ldC9tYWM4MDIxMS9zY2FuLmNcbkBAIC05LDcgKzksNyBAQFxuICAqIENvcHlyaWdodCAyMDA3LCBNaWNoYWVsIFd1IFx1MDAzY2ZsYW1pbmdpY2VAc291cm1pbGsubmV0XHUwMDNlXG4gICogQ29weXJpZ2h0IDIwMTMtMjAxNSAgSW50ZWwgTW9iaWxlIENvbW11bmljYXRpb25zIEdtYkhcbiAgKiBDb3B5cmlnaHQgMjAxNi0yMDE3ICBJbnRlbCBEZXV0c2NobGFuZCBHbWJIXG4tICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjUgSW50ZWwgQ29ycG9yYXRpb25cbisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyNiBJbnRlbCBDb3Jwb3JhdGlvblxuICAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2FycC5oXHUwMDNlXG5AQCAtMjA0LDEyICsyMDQsMTAgQEAgaWVlZTgwMjExX2Jzc19pbmZvX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcbiBcdFx0ICogYW4gaW5kaWNhdGlvbiBvbiB3aGljaCBvZiB0aGUgbGlua3MgdGhlIGZyYW1lIHdhcyByZWNlaXZlZFxuIFx0XHQgKi9cbiBcdFx0aWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKFx1MDAyNnNjYW5fc2RhdGEtXHUwMDNldmlmKSkge1xuLVx0XHRcdGlmIChyeF9zdGF0dXMtXHUwMDNlbGlua192YWxpZCkge1xuLVx0XHRcdFx0czggbGlua19pZCA9IHJ4X3N0YXR1cy1cdTAwM2VsaW5rX2lkO1xuK1x0XHRcdHM4IGxpbmtfaWQgPSByeF9zdGF0dXMtXHUwMDNlbGlua19pZDtcbiBcbi1cdFx0XHRcdGxpbmtfY29uZiA9XG4tXHRcdFx0XHRcdHJjdV9kZXJlZmVyZW5jZShzY2FuX3NkYXRhLVx1MDAzZXZpZi5saW5rX2NvbmZbbGlua19pZF0pO1xuLVx0XHRcdH1cbitcdFx0XHRsaW5rX2NvbmYgPVxuK1x0XHRcdFx0cmN1X2RlcmVmZXJlbmNlKHNjYW5fc2RhdGEtXHUwMDNldmlmLmxpbmtfY29uZltsaW5rX2lkXSk7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0bGlua19jb25mID0gXHUwMDI2c2Nhbl9zZGF0YS1cdTAwM2V2aWYuYnNzX2NvbmY7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdGRscy5jIGIvbmV0L21hYzgwMjExL3RkbHMuY1xuaW5kZXggZmZkNTc1YThkMTg4Zi4uYTg5YzY1NjliOWNmNSAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS90ZGxzLmNcbisrKyBiL25ldC9tYWM4MDIxMS90ZGxzLmNcbkBAIC0xMDY2LDcgKzEwNjYsNyBAQCBpZWVlODAyMTFfdGRsc19wcmVwX21nbXRfcGFja2V0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHR9XG4gXG4gXHRpZiAoYWN0aW9uX2NvZGUgPT0gV0xBTl9QVUJfQUNUSU9OX1RETFNfRElTQ09WRVJfUkVTKSB7XG4tXHRcdGllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIDcsIGxpbmtfaWQpO1xuK1x0XHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCBzdGEsIDcsIGxpbmtfaWQpO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdHguYyBiL25ldC9tYWM4MDIxMS90eC5jXG5pbmRleCAwY2Y1ZjZlYzc1ZTY3Li5mM2Y5ZjEyNDgxYzQwIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL3R4LmNcbisrKyBiL25ldC9tYWM4MDIxMS90eC5jXG5AQCAtNjQ0MSw3ICs2NDQxLDggQEAgdm9pZCBpZWVlODAyMTFfdW5yZXNlcnZlX3RpZChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLCB1OCB0aWQpXG4gRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfdW5yZXNlcnZlX3RpZCk7XG4gXG4gdm9pZCBfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRpZCwgaW50IGxpbmtfaWQsXG4rXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN0YV9pbmZvICpzdGEsXG4rXHRcdFx0XHQgaW50IHRpZCwgaW50IGxpbmtfaWQsXG4gXHRcdFx0XHQgZW51bSBubDgwMjExX2JhbmQgYmFuZClcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YTtcbkBAIC02NDkzLDEyICs2NDk0LDEzIEBAIHZvaWQgX19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0ICovXG4gXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gXHRJRUVFODAyMTFfU0tCX0NCKHNrYiktXHUwMDNlYmFuZCA9IGJhbmQ7XG4tXHRpZWVlODAyMTFfeG1pdChzZGF0YSwgTlVMTCwgc2tiKTtcbitcdGllZWU4MDIxMV94bWl0KHNkYXRhLCBzdGEsIHNrYik7XG4gXHRsb2NhbF9iaF9lbmFibGUoKTtcbiB9XG4gXG4gdm9pZCBpZWVlODAyMTFfdHhfc2tiX3RpZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi1cdFx0XHQgIHN0cnVjdCBza19idWZmICpza2IsIGludCB0aWQsIGludCBsaW5rX2lkKVxuK1x0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN0YV9pbmZvICpzdGEsXG4rXHRcdFx0ICBpbnQgdGlkLCBpbnQgbGlua19pZClcbiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY2hhbmN0eF9jb25mO1xuIFx0ZW51bSBubDgwMjExX2JhbmQgYmFuZDtcbkBAIC02NTI0LDcgKzY1MjYsNyBAQCB2b2lkIGllZWU4MDIxMV90eF9za2JfdGlkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRiYW5kID0gMDtcbiBcdH1cbiBcbi1cdF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzZGF0YSwgc2tiLCB0aWQsIGxpbmtfaWQsIGJhbmQpO1xuK1x0X19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHNkYXRhLCBza2IsIHN0YSwgdGlkLCBsaW5rX2lkLCBiYW5kKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuaW5kZXggOGFkYmVmNWYwNDQyNS4uMGFiMjkwN2U2NmY2OCAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy9ubDgwMjExLmNcbisrKyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmNcbkBAIC0xMDk2LDYgKzEwOTYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmw4MDIxMV9wb2xpY3lbTlVNX05MODAyMTFfQVRUUl0gPSB7XG4gXHRbTkw4MDIxMV9BVFRSX05QQ0FfUFVOQ1RfQklUTUFQXSA9XG4gXHRcdE5MQV9QT0xJQ1lfRlVMTF9SQU5HRShOTEFfVTMyLCBcdTAwMjZubDgwMjExX3B1bmN0X2JpdG1hcF9yYW5nZSksXG4gXHRbTkw4MDIxMV9BVFRSX1NUQV9EVU1QX0xJTktfU1RBVFNdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sXG4rXHRbTkw4MDIxMV9BVFRSX0ZSQU1FX0NNRF9OT19TVEFdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sXG4gfTtcbiBcbiAvKiBwb2xpY3kgZm9yIHRoZSBrZXkgYXR0cmlidXRlcyAqL1xuQEAgLTE0ODU5LDYgKzE0ODYwLDkgQEAgc3RhdGljIGludCBubDgwMjExX3R4X21nbXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdCAgICAhKHdkZXYtXHUwMDNldmFsaWRfbGlua3MgXHUwMDI2IEJJVChwYXJhbXMubGlua19pZCkpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbitcdHBhcmFtcy5ub19zdGEgPVxuK1x0XHRubGFfZ2V0X2ZsYWcoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfRlJBTUVfQ01EX05PX1NUQV0pO1xuK1xuIFx0cGFyYW1zLmJ1ZiA9IG5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0ZSQU1FXSk7XG4gXHRwYXJhbXMubGVuID0gbmxhX2xlbihpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9GUkFNRV0pO1xuIFxuQEAgLTIyMDIwLDcgKzIyMDI0LDkgQEAgaW50IG5sODAyMTFfc2VuZF9tZ210KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdCAgICAoaW5mby1cdTAwM2VhY2tfdHN0YW1wIFx1MDAyNlx1MDAyNiBubGFfcHV0X3U2NF82NGJpdChtc2csXG4gXHRcdFx0XHRcdFx0ICAgTkw4MDIxMV9BVFRSX1RYX0hXX1RJTUVTVEFNUCxcbiBcdFx0XHRcdFx0XHQgICBpbmZvLVx1MDAzZWFja190c3RhbXAsXG4tXHRcdFx0XHRcdFx0ICAgTkw4MDIxMV9BVFRSX1BBRCkpKVxuK1x0XHRcdFx0XHRcdCAgIE5MODAyMTFfQVRUUl9QQUQpKSB8fFxuK1x0ICAgIChpbmZvLVx1MDAzZW5vX3N0YSBcdTAwMjZcdTAwMjZcbitcdCAgICAgbmxhX3B1dF9mbGFnKG1zZywgTkw4MDIxMV9BVFRSX0ZSQU1FX0NNRF9OT19TVEEpKSlcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG4gXHRnZW5sbXNnX2VuZChtc2csIGhkcik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNDozNToyMi4wNTcwMzUzMzVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzg0MDY4NTQ2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBtYWM4MDIxMSBSWCBQYXRoIFRyYW5zZm9ybWF0aW9uIGZvciBNTE8gU3VwcG9ydCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzLCBhbmQgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQncyBmdW5kYW1lbnRhbGx5IHJld29ya2luZyB0aGUgbWFjODAyMTEgUlggcGF0aCwgcGFydGljdWxhcmx5IGluIHJlbGF0aW9uIHRvIE11bHRpLUxpbmsgT3BlcmF0aW9uIChNTE8pLiBUaGUgY2hhbmdlcyBhcmUgcHJldHR5IGJyb2FkLCB0b3VjaGluZyBhIHNpZ25pZmljYW50IG51bWJlciBvZiBkcml2ZXJzIOKAkyBhdGgxMWssIGF0aDEyaywgaXdsd2lmaSwgbXQ3NiwgcnR3ODksIGFuZCwgaW1wb3J0YW50bHksIG1hYzgwMjExX2h3c2ltLiBUaGF0J3MgaW1tZWRpYXRlbHkgdGVsbGluZyBtZSB0aGF0IHRoaXMgaXNuJ3Qgc29tZSBtaW5vciB0d2VhazsgdGhpcyBpcyBhIGNvcmUgYXJjaGl0ZWN0dXJhbCBzaGlmdC5cblxuVGhlIGZpcnN0IHRoaW5nIHRoYXQgZ3JhYnMgbXkgYXR0ZW50aW9uIGlzIHRoZSByZW1vdmFsIG9mIGBsaW5rX3ZhbGlkYCBmcm9tIGBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1c2AuIFRoaXMsIGNvbWJpbmVkIHdpdGggdGhlIGNoYW5nZSBpbiBob3cgYGxpbmtfaWRgIGlzIGhhbmRsZWQsIHNwZWNpZmljYWxseSBwYXNzaW5nIGBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpgIGluc3RlYWQgb2YgYHN0cnVjdCBpZWVlODAyMTFfc3RhICpgIHRvIGBpZWVlODAyMTFfcnhfbmFwaWAgYW5kIGBpZWVlODAyMTFfcnhfbGlzdGAsIHN1Z2dlc3RzIGEgcmVmYWN0b3JpbmcgdG8gaGFuZGxlIGxpbmstc3BlY2lmaWMgU1RBIGluZm9ybWF0aW9uIG1vcmUgZXhwbGljaXRseS4gSSBzZWUgdGhpcyBhcyBhIHNvbGlkIHN0ZXAgdG8gZ2V0IHRoaW5ncyByaWdodCBpbiB0aGUgTUxPIGNvbnRleHQsIHdoZXJlIHRoZSBhc3NvY2lhdGlvbiB3aXRoIHRoZSBTVEEgaXNuJ3QgYXMgc3RyYWlnaHRmb3J3YXJkIGJlY2F1c2Ugb2YgbXVsdGlwbGUgbGlua3MuXG5cblRoZSBhZGRpdGlvbiBvZiBgbm9fc3RhYCB0byBgY2ZnODAyMTFfbWdtdF90eF9wYXJhbXNgIGFuZCBgY2ZnODAyMTFfcnhfaW5mb2AsIGFuZCB0aGUgaGFuZGxpbmcgb2YgdGhpcyBmbGFnIGluIGBubDgwMjExLmNgLCBzdHJvbmdseSBpbmRpY2F0ZXMgYSBtb2RpZmljYXRpb24gdG8gdGhlIG1hbmFnZW1lbnQgZnJhbWUgVFgvUlggcGF0aCwgd2hpY2ggaXMgYWxzbyBsaW5rZWQgdG8gTUxPLlxuXG5Ob3csIGxldCdzIHNlZSBpZiB0aGlzIGlzIHJlYWNoYWJsZSB0aHJvdWdoIFFFTVUuIFRoYW5rZnVsbHksIHRoZSBwYXRjaCBtb2RpZmllcyBgbWFjODAyMTFfaHdzaW1gLCBhbmQgSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IGBtYWM4MDIxMV9od3NpbWAgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIGlzIGZyZXF1ZW50bHkgdXNlZCBmb3IgZnV6emluZyBtYWM4MDIxMS4gVGhpcyBpcyBhIHZlcnkgZ29vZCBzaWduLiBXZSBjYW4gZGVmaW5pdGVseSByZXByb2R1Y2UgdGhlIGNoYW5nZXMgYW5kIGRvIGRlYnVnZ2luZy5cblxuRGl2aW5nIGRlZXBlciwgdGhlIHBhdGNoIGhhcyBhIG1ham9yIGltcGFjdCBvbiBgbmV0L21hYzgwMjExL3J4LmNgLiBJJ20gc2VlaW5nIGNoYW5nZXMgaW4gZnVuY3Rpb25zIGxpa2UgYGllZWU4MDIxMV9yeF9saXN0YCwgYF9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXRgLCBhbmQgYGllZWU4MDIxMV9yeF9uYXBpYC4gRnVydGhlcm1vcmUsIGNoYW5nZXMgdG8gYG5sODAyMTFfdHhfbWdtdGAgYW5kIGBubDgwMjExX3NlbmRfbWdtdGAgcmVpbmZvcmNlIHRoZSBNTE8gYW5nbGUuXG5cbkknbSB6ZXJvaW5nIGluIG9uIGEgZmV3IGtleSBzeW1ib2xzIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhpczogYGllZWU4MDIxMV9yeF9saXN0YCwgYGllZWU4MDIxMV9yeF9uYXBpYCwgYG5sODAyMTFfdHhfbWdtdGAsIGBubDgwMjExX3NlbmRfbWdtdGAsIGFuZCBgaWVlZTgwMjExX21nbXRfdHhgLiBUaGUgbW9kaWZpY2F0aW9ucyB0byB0aG9zZSBmdW5jdGlvbnMgYW5kIHRoZSBhZGRpdGlvbiBvZiB0aGlzIG5ldyBmbGFnIGFyZSB0aGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlcmllcy5cblxuUXVpY2sgc2FuaXR5IGNoZWNrOiBJJ2xsIGNvbmZpcm0gdGhhdCBgaWVlZTgwMjExX3J4X2xpc3RgIGFuZCBgaWVlZTgwMjExX3J4X25hcGlgIGFyZSBpbmRlZWQgZXhwb3J0ZWQsIGFuZCB0aGF0IGBpZWVlODAyMTFfbWdtdF90eGAgaXMgaW4gYG5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmNgLiBBbHNvIHZlcmlmeWluZyB0aGF0IHRoZSBgbmw4MDIxMWAgZnVuY3Rpb25zIGFyZSBpbiBgbmV0L3dpcmVsZXNzL25sODAyMTEuY2AuIFllcCwgYWxsIGNvcnJlY3QuXG5cbkEgZnVydGhlciBjaGVjazogYF9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXRgIGlzIHN0YXRpYywgd2hpY2ggaXMgZXhwZWN0ZWQgZm9yIGFuIGludGVybmFsIGhlbHBlci4gQW5kIGl0IGlzLiBgaWVlZTgwMjExX3J4X2RhdGFfc2V0X2xpbmtfc3RhYCBhbmQgYGllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGFgIGFyZSBhbHNvIHN0YXRpYywgYXMgZXhwZWN0ZWQuXG5cbkkgd2lsbCBhbHNvIGluY2x1ZGUgYGllZWU4MDIxMV90eF9za2JfdGlkYCBhcyB0aGlzIGhhcyBhIHNpZ25hdHVyZSBjaGFuZ2UgYXMgd2VsbC5cblxuVGhlIGNoYW5nZXMgdG8gdGhlIHNpZ25hdHVyZXMgb2YgYGllZWU4MDIxMV9yeF9saXN0YCwgYGllZWU4MDIxMV9yeF9uYXBpYCwgYW5kIGBpZWVlODAyMTFfdHhfc2tiX3RpZGAgYXJlIHNpZ25pZmljYW50LCB3aGljaCBpcyByZW1vdmluZyBgc3RhYCBmcm9tIHRoZSBpbnB1dCBwYXJhbWV0ZXIgYW5kIHVzaW5nIGBsaW5rX3N0YWAgaW5zdGVhZC5cblxuKipJbiBlc3NlbmNlLCB0aGlzIHBhdGNoIGlzIGEgZnVuZGFtZW50YWwgcmVzdHJ1Y3R1cmluZyBvZiB0aGUgbWFjODAyMTEgUlggcGF0aCB0byBpbXByb3ZlIE1MTyBzdXBwb3J0LiBJdCdzIG1ha2luZyB0aGUgUlgvVFggcGF0aHMgaGFuZGxlIGxpbmstc3BlY2lmaWMgU1RBIGluZm9ybWF0aW9uLCB3aGljaCBpcyBhIGtleSByZXF1aXJlbWVudCB0byBoYW5kbGUgbXVsdGlwbGUgbGlua3MuIFRoZSBjaGFuZ2VzIGluY2x1ZGUgYWRkaW5nIGEgbmV3IGBub19zdGFgIGZsYWcgdG9cblxuIiwiSW5wdXRUb2tlbnMiOjMzMTM5LCJPdXRwdXRUb2tlbnMiOjI0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNDozNTozOS44OTc3MjMwNDdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5Nzc0MTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIixcbiAgICBcIkNGRzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWVlZTgwMjExX3J4X2xpc3RcIixcbiAgICBcImllZWU4MDIxMV9yeF9uYXBpXCIsXG4gICAgXCJpZWVlODAyMTFfbWdtdF90eFwiLFxuICAgIFwibmw4MDIxMV90eF9tZ210XCIsXG4gICAgXCJubDgwMjExX3NlbmRfbWdtdFwiLFxuICAgIFwiaWVlZTgwMjExX3R4X3NrYl90aWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWFjODAyMTEgUlggcGF0aCB0byBoYW5kbGUgTUxPIChNdWx0aS1MaW5rIE9wZXJhdGlvbikgbGluayBJRHMgbW9yZSByb2J1c3RseSwgcmVtb3ZpbmcgYGxpbmtfdmFsaWRgIGFuZCBwYXNzaW5nIGBsaW5rX3N0YWAgZGlyZWN0bHkuIEl0IGFsc28gYWRkcyBhIGBub19zdGFgIGZsYWcgZm9yIG1hbmFnZW1lbnQgZnJhbWUgVFgvUlguIFRoZXNlIGFyZSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBtYWM4MDIxMSBhbmQgY2ZnODAyMTEsIHJlYWNoYWJsZSB2aWEgbWFjODAyMTFfaHdzaW0gYW5kIG5sODAyMTEgbmV0bGluayBpbnRlcmZhY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIk1BQzgwMjExX0hXU0lNXCIsXG4gICAgXCJDRkc4MDIxMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImllZWU4MDIxMV9yeF9saXN0XCIsXG4gICAgXCJpZWVlODAyMTFfcnhfbmFwaVwiLFxuICAgIFwiaWVlZTgwMjExX21nbXRfdHhcIixcbiAgICBcIm5sODAyMTFfdHhfbWdtdFwiLFxuICAgIFwibmw4MDIxMV9zZW5kX21nbXRcIixcbiAgICBcImllZWU4MDIxMV90eF9za2JfdGlkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1hYzgwMjExIFJYIHBhdGggdG8gaGFuZGxlIE1MTyAoTXVsdGktTGluayBPcGVyYXRpb24pIGxpbmsgSURzIG1vcmUgcm9idXN0bHksIHJlbW92aW5nIGBsaW5rX3ZhbGlkYCBhbmQgcGFzc2luZyBgbGlua19zdGFgIGRpcmVjdGx5LiBJdCBhbHNvIGFkZHMgYSBgbm9fc3RhYCBmbGFnIGZvciBtYW5hZ2VtZW50IGZyYW1lIFRYL1JYLiBUaGVzZSBhcmUgY29yZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gbWFjODAyMTEgYW5kIGNmZzgwMjExLCByZWFjaGFibGUgdmlhIG1hYzgwMjExX2h3c2ltIGFuZCBubDgwMjExIG5ldGxpbmsgaW50ZXJmYWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowm7bqc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-01 04:19:36 +0000 UTC FinishedAt: 2026-08-01 04:35:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "4a0bd262df757b25fc4e2a53c947317c119ced4e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211", "MAC80211_HWSIM", "CFG80211" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "4a0bd262df757b25fc4e2a53c947317c119ced4e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211", "MAC80211_HWSIM", "CFG80211" ], "series_id": "743524f3-6661-4a2d-9deb-711774fced14" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ieee80211_rx_list", "ieee80211_rx_napi", "ieee80211_mgmt_tx", "nl80211_tx_mgmt", "nl80211_send_mgmt", "ieee80211_tx_skb_tid" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA0OjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjExX3J4X2xpc3QmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3J4X25hcGkmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX21nbXRfdHgmIzM0OywKICAgICYjMzQ7bmw4MDIxMV90eF9tZ210JiMzNDssCiAgICAmIzM0O25sODAyMTFfc2VuZF9tZ210JiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV90eF9za2JfdGlkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtYWM4MDIxMSBSWCBwYXRoIHRvIGhhbmRsZSBNTE8gKE11bHRpLUxpbmsgT3BlcmF0aW9uKSBsaW5rIElEcyBtb3JlIHJvYnVzdGx5LCByZW1vdmluZyBgbGlua192YWxpZGAgYW5kIHBhc3NpbmcgYGxpbmtfc3RhYCBkaXJlY3RseS4gSXQgYWxzbyBhZGRzIGEgYG5vX3N0YWAgZmxhZyBmb3IgbWFuYWdlbWVudCBmcmFtZSBUWC9SWC4gVGhlc2UgYXJlIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIG1hYzgwMjExIGFuZCBjZmc4MDIxMSwgcmVhY2hhYmxlIHZpYSBtYWM4MDIxMV9od3NpbSBhbmQgbmw4MDIxMSBuZXRsaW5rIGludGVyZmFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNDozNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDllMTJhZTMxNWZlZTUwZTdjZDYwMjI2N2VlNjVkN2I4YmU0YjI1YjVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDA0OjM1OjIwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZHBfcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZHBfcnguY1xuaW5kZXggMzM0MjU3MDdjMDg0Mi4uZmJiM2QxOGY1NWRkZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZHBfcnguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kcF9yeC5jXG5AQCAtMjUwMCw3ICYjNDM7MjUwMCw3IEBAIHN0YXRpYyB2b2lkIGF0aDExa19kcF9yeF9kZWxpdmVyX21zZHUoc3RydWN0IGF0aDExayAqYXIsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwXG4gXHQgICAgIShpc19tY2JjIFx1MDAyNlx1MDAyNiByeF9zdGF0dXMtXHUwMDNlZmxhZyBcdTAwMjYgUlhfRkxBR19ERUNSWVBURUQpKVxuIFx0XHRyeF9zdGF0dXMtXHUwMDNlZmxhZyB8PSBSWF9GTEFHXzgwMjM7XG4gXG4tXHRpZWVlODAyMTFfcnhfbmFwaShhci1cdTAwM2VodywgcHVic3RhLCBtc2R1LCBuYXBpKTtcbiYjNDM7XHRpZWVlODAyMTFfcnhfbmFwaShhci1cdTAwM2VodywgcHVic3RhID8gXHUwMDI2cHVic3RhLVx1MDAzZWRlZmxpbmsgOiBOVUxMLCBtc2R1LCBuYXBpKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgYXRoMTFrX2RwX3J4X2NoZWNrX253aWZpX2hkcl9sZW5fdmFsaWQoc3RydWN0IGF0aDExa19iYXNlICphYixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX21vbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9tb24uY1xuaW5kZXggN2Q1YmU3N2IwODFmOC4uMWZhZjE4OTZkMGFiMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfbW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfbW9uLmNcbkBAIC01MDMsOCAmIzQzOzUwMyw2IEBAIHZvaWQgYXRoMTJrX2RwX21vbl9yeF9kZWxpdmVyX21zZHUoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LFxuIFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cztcbiBcdHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGUgKmhlID0gTlVMTDtcbiBcbi1cdHN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkID0gMDtcbi1cbiBcdGlmICgoc3RhdHVzLVx1MDAzZWVuY29kaW5nID09IFJYX0VOQ19IRSkgXHUwMDI2XHUwMDI2ICEoc3RhdHVzLVx1MDAzZWZsYWcgXHUwMDI2IFJYX0ZMQUdfUkFESU9UQVBfSEUpIFx1MDAyNlx1MDAyNlxuIFx0ICAgICEoc3RhdHVzLVx1MDAzZWZsYWcgXHUwMDI2IFJYX0ZMQUdfU0tJUF9NT05JVE9SKSkge1xuIFx0XHRoZSA9IHNrYl9wdXNoKG1zZHUsIHNpemVvZihrbm93bikpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcnguY1xuaW5kZXggOGZhMGU5MGI0NTMxNi4uODQ3YWQyOGZkMzBiMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcnguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9yeC5jXG5AQCAtMTM3NSw2ICYjNDM7MTM3NSw3IEBAIHZvaWQgYXRoMTJrX2RwX3J4X2RlbGl2ZXJfbXNkdShzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsIHN0cnVjdCBuYXBpX3N0cnVjXG4gXHRzdHJ1Y3QgYXRoMTJrX2RwICpkcCA9IGRwX3BkZXYtXHUwMDNlZHA7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzO1xuIFx0c3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YTtcbiYjNDM7XHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3B1YnN0YSA9IE5VTEw7XG4gXHRzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKnBlZXI7XG4gXHRzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiID0gQVRIMTJLX1NLQl9SWENCKG1zZHUpO1xuIFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IHJ4X2luZm8tXHUwMDNlcnhfc3RhdHVzO1xuQEAgLTEzODQsOSAmIzQzOzEzODUsMTkgQEAgdm9pZCBhdGgxMmtfZHBfcnhfZGVsaXZlcl9tc2R1KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwgc3RydWN0IG5hcGlfc3RydWNcbiBcbiBcdHB1YnN0YSA9IHBlZXIgPyBwZWVyLVx1MDAzZXN0YSA6IE5VTEw7XG4gXG4tXHRzdGF0dXMtXHUwMDNlbGlua192YWxpZCA9IDA7XG4tXHRpZiAocHVic3RhIFx1MDAyNlx1MDAyNiBwdWJzdGEtXHUwMDNldmFsaWRfbGlua3MpXG4tXHRcdGF0aDEya19od19zZXRfcnhfbGlua19pZChkcC1cdTAwM2Vod19wYXJhbXMsIHBlZXIsIHJ4Y2IsIHN0YXR1cyk7XG4mIzQzO1x0aWYgKHB1YnN0YSkge1xuJiM0MztcdFx0aWYgKHB1YnN0YS1cdTAwM2V2YWxpZF9saW5rcykge1xuJiM0MztcdFx0XHR1OCBsaW5rX2lkID1cbiYjNDM7XHRcdFx0XHRhdGgxMmtfaHdfZ2V0X3J4X2xpbmtfaWQoZHAtXHUwMDNlaHdfcGFyYW1zLCBwZWVyLFxuJiM0MztcdFx0XHRcdFx0XHRcdCByeGNiLCBzdGF0dXMpO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKGxpbmtfaWQgXHUwMDNlIDApXG4mIzQzO1x0XHRcdFx0bGlua19wdWJzdGEgPVxuJiM0MztcdFx0XHRcdFx0cmN1X2RlcmVmZXJlbmNlKHB1YnN0YS1cdTAwM2VsaW5rW2xpbmtfaWRdKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGxpbmtfcHVic3RhID0gXHUwMDI2cHVic3RhLVx1MDAzZWRlZmxpbms7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuIFxuIFx0YXRoMTJrX2RiZyhkcC1cdTAwM2VhYiwgQVRIMTJLX0RCR19EQVRBLFxuIFx0XHQgICBcJiMzNDtyeCBza2IgJXAgbGVuICV1IHBlZXIgJXBNICVkICVzIHNuICV1ICVzJXMlcyVzJXMlcyVzJXMlcyVzIHJhdGVfaWR4ICV1IHZodF9uc3MgJXUgZnJlcSAldSBiYW5kICV1IGZsYWcgMHgleCBmY3MtZXJyICVpIG1pYy1lcnIgJWkgYW1zZHUtbW9yZSAlaVxcblwmIzM0OyxcbkBAIC0xNDIyLDcgJiM0MzsxNDMzLDggQEAgdm9pZCBhdGgxMmtfZHBfcnhfZGVsaXZlcl9tc2R1KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwgc3RydWN0IG5hcGlfc3RydWNcbiBcbiBcdC8qIFRPRE86IHRyYWNlIHJ4IHBhY2tldCAqL1xuIFxuLVx0aWVlZTgwMjExX3J4X25hcGkoYXRoMTJrX3BkZXZfZHBfdG9faHcoZHBfcGRldiksIHB1YnN0YSwgbXNkdSwgbmFwaSk7XG4mIzQzO1x0aWVlZTgwMjExX3J4X25hcGkoYXRoMTJrX3BkZXZfZHBfdG9faHcoZHBfcGRldiksIGxpbmtfcHVic3RhLCBtc2R1LFxuJiM0MztcdFx0XHQgIG5hcGkpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGF0aDEya19kcF9yeF9kZWxpdmVyX21zZHUpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaHcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaHcuaFxuaW5kZXggNDljZmQ1ZGZjNzBhNi4uMjY4ZjBhOGZkNDZkZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaHcuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9ody5oXG5AQCAtMjQ4LDkgJiM0MzsyNDgsOSBAQCBzdHJ1Y3QgYXRoMTJrX2h3X29wcyB7XG4gXHRib29sICgqZHBfc3JuZ19pc190eF9jb21wX3JpbmcpKGludCByaW5nX251bSk7XG4gXHRib29sICgqaXNfZnJhbWVfbGlua19hZ25vc3RpYykoc3RydWN0IGF0aDEya19saW5rX3ZpZiAqYXJ2aWYsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210KTtcbi1cdHZvaWQgKCpzZXRfcnhfbGlua19pZCkoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLFxuLVx0XHRcdCAgICAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxuLVx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKTtcbiYjNDM7XHRpbnQgKCpnZXRfcnhfbGlua19pZCkoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKTtcbiB9O1xuIFxuIHN0YXRpYyBpbmxpbmVcbkBAIC0yODEsMTMgJiM0MzsyODEsMTUgQEAgc3RhdGljIGlubGluZSBpbnQgYXRoMTJrX2h3X21hY19pZF90b19zcm5nX2lkKGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfcGFyYW1zICpodyxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgYXRoMTJrX2h3X3NldF9yeF9saW5rX2lkKGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfcGFyYW1zICpodyxcbi1cdFx0XHRcdFx0ICAgIHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcbi1cdFx0XHRcdFx0ICAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsXG4tXHRcdFx0XHRcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBhdGgxMmtfaHdfZ2V0X3J4X2xpbmtfaWQoY29uc3Qgc3RydWN0IGF0aDEya19od19wYXJhbXMgKmh3LFxuJiM0MztcdFx0XHRcdFx0ICAgc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLFxuJiM0MztcdFx0XHRcdFx0ICAgc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYixcbiYjNDM7XHRcdFx0XHRcdCAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpXG4ge1xuLVx0aWYgKGh3LVx1MDAzZWh3X29wcy1cdTAwM2VzZXRfcnhfbGlua19pZClcbi1cdFx0aHctXHUwMDNlaHdfb3BzLVx1MDAzZXNldF9yeF9saW5rX2lkKGRwX3BlZXIsIHJ4Y2IsIHN0YXR1cyk7XG4mIzQzO1x0aWYgKGh3LVx1MDAzZWh3X29wcy1cdTAwM2VnZXRfcnhfbGlua19pZClcbiYjNDM7XHRcdHJldHVybiBody1cdTAwM2Vod19vcHMtXHUwMDNlZ2V0X3J4X2xpbmtfaWQoZHBfcGVlciwgcnhjYiwgc3RhdHVzKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC0xO1xuIH1cbiBcbiBzdHJ1Y3QgYXRoMTJrX2Z3X2llIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmNcbmluZGV4IDk1ZDg3ZGQ2Nzg3MmYuLjhiNzIyZWUwYWQ4ZmEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguY1xuQEAgLTIzMTcsMTcgJiM0MzsyMzE3LDE2IEBAIGF0aDEya193aWZpN19kcF9yeGRlc2NfbXBkdV92YWxpZChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLFxuIFx0cmV0dXJuIHRsdl90YWcgPT0gSEFMX1JYX01QRFVfU1RBUlQ7XG4gfVxuIFxuLXZvaWRcbi1hdGgxMmtfd2lmaTdfZHBfcnhfc2V0X2xpbmtfaWRfcWNuOTI3NChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXG4mIzQzO2ludFxuJiM0MzthdGgxMmtfd2lmaTdfZHBfcnhfZ2V0X2xpbmtfaWRfcWNuOTI3NChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYixcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKVxuIHtcbi1cdHN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkID0gMTtcbi1cdHN0YXR1cy1cdTAwM2VsaW5rX2lkID0gZHBfcGVlci1cdTAwM2Vod19saW5rc1tyeGNiLVx1MDAzZWh3X2xpbmtfaWRdO1xuJiM0MztcdHJldHVybiBkcF9wZWVyLVx1MDAzZWh3X2xpbmtzW3J4Y2ItXHUwMDNlaHdfbGlua19pZF07XG4gfVxuIFxuLXZvaWRcbi1hdGgxMmtfd2lmaTdfZHBfcnhfc2V0X2xpbmtfaWRfd2NuNzg1MChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXG4mIzQzO2ludFxuJiM0MzthdGgxMmtfd2lmaTdfZHBfcnhfZ2V0X2xpbmtfaWRfd2NuNzg1MChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYixcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKVxuIHtcbkBAIC0yMzQxLDEwICYjNDM7MjM0MCw5IEBAIGF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF93Y243ODUwKHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcbiBcdGxpbmtzX21hcCA9IFJFQURfT05DRShkcF9wZWVyLVx1MDAzZWxpbmtfcGVlcnNfbWFwKTtcbiBcdGZvcl9lYWNoX3NldF9iaXQoaSwgXHUwMDI2bGlua3NfbWFwLCBBVEgxMktfTlVNX01BWF9MSU5LUykge1xuIFx0XHRsaW5rX3BlZXIgPSByY3VfZGVyZWZlcmVuY2UoZHBfcGVlci1cdTAwM2VsaW5rX3BlZXJzW2ldKTtcbi1cdFx0aWYgKGxpbmtfcGVlciBcdTAwMjZcdTAwMjYgbGlua19wZWVyLVx1MDAzZXBlZXJfaWQgPT0gcnhjYi1cdTAwM2VwZWVyX2lkKSB7XG4tXHRcdFx0c3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQgPSAxO1xuLVx0XHRcdHN0YXR1cy1cdTAwM2VsaW5rX2lkID0gbGlua19wZWVyLVx1MDAzZWxpbmtfaWQ7XG4tXHRcdFx0cmV0dXJuO1xuLVx0XHR9XG4mIzQzO1x0XHRpZiAobGlua19wZWVyIFx1MDAyNlx1MDAyNiBsaW5rX3BlZXItXHUwMDNlcGVlcl9pZCA9PSByeGNiLVx1MDAzZXBlZXJfaWQpXG4mIzQzO1x0XHRcdHJldHVybiBsaW5rX3BlZXItXHUwMDNlbGlua19pZDtcbiBcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC0xO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmhcbmluZGV4IDFkM2E0Nzg4YTJkZDkuLmQ2ODQ4OWZmN2IwMzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguaFxuQEAgLTU3LDEwICYjNDM7NTcsMTAgQEAgYXRoMTJrX3dpZmk3X2RwX3J4ZGVzY19tcGR1X3ZhbGlkKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsXG4gXHRcdFx0XHQgIHN0cnVjdCBoYWxfcnhfZGVzYyAqcnhfZGVzYyk7XG4gaW50IGF0aDEya193aWZpN19kcF9yeF90aWRfZGVsZXRlX2hhbmRsZXIoc3RydWN0IGF0aDEya19iYXNlICphYixcbiBcdFx0XHRcdFx0ICBzdHJ1Y3QgYXRoMTJrX2RwX3J4X3RpZF9yeHEgKnJ4X3RpZCk7XG4tdm9pZCBhdGgxMmtfd2lmaTdfZHBfcnhfc2V0X2xpbmtfaWRfcWNuOTI3NChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXG4tXHRcdFx0XHRcdCAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxuLVx0XHRcdFx0XHQgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyk7XG4tdm9pZCBhdGgxMmtfd2lmaTdfZHBfcnhfc2V0X2xpbmtfaWRfd2NuNzg1MChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXG4tXHRcdFx0XHRcdCAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxuLVx0XHRcdFx0XHQgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyk7XG4mIzQzO2ludCBhdGgxMmtfd2lmaTdfZHBfcnhfZ2V0X2xpbmtfaWRfcWNuOTI3NChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXG4mIzQzO1x0XHRcdFx0XHQgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxuJiM0MztcdFx0XHRcdFx0ICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyk7XG4mIzQzO2ludCBhdGgxMmtfd2lmaTdfZHBfcnhfZ2V0X2xpbmtfaWRfd2NuNzg1MChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXG4mIzQzO1x0XHRcdFx0XHQgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxuJiM0MztcdFx0XHRcdFx0ICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyk7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9ody5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9ody5jXG5pbmRleCA0YzExMTllZGNhZWRjLi4zY2QzNTE0NjQyOTZjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9ody5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2h3LmNcbkBAIC0xNTgsNyAmIzQzOzE1OCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoMTJrX2h3X29wcyBxY245Mjc0X29wcyA9IHtcbiBcdC5nZXRfcmluZ19zZWxlY3RvciA9IGF0aDEya193aWZpN19od19nZXRfcmluZ19zZWxlY3Rvcl9xY245Mjc0LFxuIFx0LmRwX3NybmdfaXNfdHhfY29tcF9yaW5nID0gYXRoMTJrX3dpZmk3X2RwX3NybmdfaXNfY29tcF9yaW5nX3FjbjkyNzQsXG4gXHQuaXNfZnJhbWVfbGlua19hZ25vc3RpYyA9IGF0aDEya193aWZpN19pc19mcmFtZV9saW5rX2Fnbm9zdGljX3FjbjkyNzQsXG4tXHQuc2V0X3J4X2xpbmtfaWQgPSBhdGgxMmtfd2lmaTdfZHBfcnhfc2V0X2xpbmtfaWRfcWNuOTI3NCxcbiYjNDM7XHQuZ2V0X3J4X2xpbmtfaWQgPSBhdGgxMmtfd2lmaTdfZHBfcnhfZ2V0X2xpbmtfaWRfcWNuOTI3NCxcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoMTJrX2h3X29wcyB3Y243ODUwX29wcyA9IHtcbkBAIC0xNjksNyAmIzQzOzE2OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoMTJrX2h3X29wcyB3Y243ODUwX29wcyA9IHtcbiBcdC5nZXRfcmluZ19zZWxlY3RvciA9IGF0aDEya193aWZpN19od19nZXRfcmluZ19zZWxlY3Rvcl93Y243ODUwLFxuIFx0LmRwX3NybmdfaXNfdHhfY29tcF9yaW5nID0gYXRoMTJrX3dpZmk3X2RwX3NybmdfaXNfY29tcF9yaW5nX3djbjc4NTAsXG4gXHQuaXNfZnJhbWVfbGlua19hZ25vc3RpYyA9IGF0aDEya193aWZpN19pc19mcmFtZV9saW5rX2Fnbm9zdGljX3djbjc4NTAsXG4tXHQuc2V0X3J4X2xpbmtfaWQgPSBhdGgxMmtfd2lmaTdfZHBfcnhfc2V0X2xpbmtfaWRfd2NuNzg1MCxcbiYjNDM7XHQuZ2V0X3J4X2xpbmtfaWQgPSBhdGgxMmtfd2lmaTdfZHBfcnhfZ2V0X2xpbmtfaWRfd2NuNzg1MCxcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoMTJrX2h3X29wcyBxY2MyMDcyX29wcyA9IHtcbkBAIC0xODAsNyAmIzQzOzE4MCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoMTJrX2h3X29wcyBxY2MyMDcyX29wcyA9IHtcbiBcdC5nZXRfcmluZ19zZWxlY3RvciA9IGF0aDEya193aWZpN19od19nZXRfcmluZ19zZWxlY3Rvcl93Y243ODUwLFxuIFx0LmRwX3NybmdfaXNfdHhfY29tcF9yaW5nID0gYXRoMTJrX3dpZmk3X2RwX3NybmdfaXNfY29tcF9yaW5nX3djbjc4NTAsXG4gXHQuaXNfZnJhbWVfbGlua19hZ25vc3RpYyA9IGF0aDEya193aWZpN19pc19mcmFtZV9saW5rX2Fnbm9zdGljX3djbjc4NTAsXG4tXHQuc2V0X3J4X2xpbmtfaWQgPSBhdGgxMmtfd2lmaTdfZHBfcnhfc2V0X2xpbmtfaWRfd2NuNzg1MCxcbiYjNDM7XHQuZ2V0X3J4X2xpbmtfaWQgPSBhdGgxMmtfd2lmaTdfZHBfcnhfZ2V0X2xpbmtfaWRfd2NuNzg1MCxcbiB9O1xuIFxuICNkZWZpbmUgQVRIMTJLX1RYX1JJTkdfTUFTS18wIDB4MVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jXG5pbmRleCAyYjcwN2ZmYzFhMjBmLi41ZDYyYzRjODYxYmI5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuY1xuQEAgLTcyNjAsNyAmIzQzOzcyNjAsNiBAQCBzdGF0aWMgdm9pZCBhdGgxMmtfbWdtdF9yeF9ldmVudChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c3RydWN0IGF0aDEya193bWlfbWdtdF9yeF9hcmcgcnhfZXYgPSB7fTtcbiBcdHN0cnVjdCBhdGgxMmsgKmFyO1xuIFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpO1xuLVx0c3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSA9IE5VTEw7XG4gXHRzdHJ1Y3QgYXRoMTJrX2RwX2xpbmtfcGVlciAqcGVlcjtcbiBcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7XG4gXHRib29sIGlzXzRhZGRyX251bGxfcGt0O1xuQEAgLTczNjIsMTEgJiM0Mzs3MzYxLDYgQEAgc3RhdGljIHZvaWQgYXRoMTJrX21nbXRfcnhfZXZlbnQoc3RydWN0IGF0aDEya19iYXNlICphYiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0XHRkZXZfa2ZyZWVfc2tiKHNrYik7XG4gXHRcdFx0Z290byBleGl0O1xuIFx0XHR9XG4tXHRcdHB1YnN0YSA9IHBlZXItXHUwMDNlc3RhO1xuLVx0XHRpZiAocHVic3RhIFx1MDAyNlx1MDAyNiBwdWJzdGEtXHUwMDNldmFsaWRfbGlua3MpIHtcbi1cdFx0XHRzdGF0dXMtXHUwMDNlbGlua192YWxpZCA9IDE7XG4tXHRcdFx0c3RhdHVzLVx1MDAzZWxpbmtfaWQgPSBwZWVyLVx1MDAzZWxpbmtfaWQ7XG4tXHRcdH1cbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2ZHAtXHUwMDNlZHBfbG9jayk7XG4gXHRcdGdvdG8gc2VuZF9yeDtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hZ2cuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FnZy5jXG5pbmRleCA5NjEwMmQyYWYyY2Y5Li5jNDVjNDczMzc1MDllIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYWdnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FnZy5jXG5AQCAtNyw3ICYjNDM7Nyw4IEBAXG4gI2luY2x1ZGUgXCYjMzQ7aGNtZC5oXCYjMzQ7XG4gXG4gc3RhdGljIHZvaWRcbi1pd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbiYjNDM7aXdsX21sZF9yZW9yZGVyX3JlbGVhc2VfZnJhbWVzKHN0cnVjdCBpd2xfbWxkICptbGQsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSxcbiBcdFx0XHQgICAgICAgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgaXdsX21sZF9iYWlkX2RhdGEgKmJhaWRfZGF0YSxcbiBcdFx0XHQgICAgICAgc3RydWN0IGl3bF9tbGRfcmVvcmRlcl9idWZmZXIgKnJlb3JkZXJfYnVmLFxuQEAgLTMyLDcgJiM0MzszMyw3IEBAIGl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxuIFx0XHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoc2tiX2xpc3QpKSkge1xuIFx0XHRcdGl3bF9tbGRfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEobWxkLCBuYXBpLCBza2IsXG4gXHRcdFx0XHRcdFx0XHRyZW9yZGVyX2J1Zi1cdTAwM2VxdWV1ZSxcbi1cdFx0XHRcdFx0XHRcdHN0YSk7XG4mIzQzO1x0XHRcdFx0XHRcdFx0bGlua19zdGEpO1xuIFx0XHRcdHJlb3JkZXJfYnVmLVx1MDAzZW51bV9zdG9yZWQtLTtcbiBcdFx0fVxuIFx0fVxuQEAgLTc0LDcgJiM0Mzs3NSw3IEBAIHN0YXRpYyB2b2lkIGl3bF9tbGRfcmVsZWFzZV9mcmFtZXNfZnJvbV9ub3RpZihzdHJ1Y3QgaXdsX21sZCAqbWxkLFxuIFxuIFx0cmVvcmRlcl9idWYgPSBcdTAwMjZiYV9kYXRhLVx1MDAzZXJlb3JkZXJfYnVmW3F1ZXVlXTtcbiBcbi1cdGl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhtbGQsIGxpbmtfc3RhLVx1MDAzZXN0YSwgbmFwaSwgYmFfZGF0YSxcbiYjNDM7XHRpd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMobWxkLCBsaW5rX3N0YSwgbmFwaSwgYmFfZGF0YSxcbiBcdFx0XHRcdCAgICAgICByZW9yZGVyX2J1ZiwgbnNzbik7XG4gb3V0X3VubG9jazpcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuQEAgLTE4MCw3ICYjNDM7MTgxLDcgQEAgdm9pZCBpd2xfbWxkX2RlbF9iYShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBpbnQgcXVldWUsXG4gXHRyZW9yZGVyX2J1ZiA9IFx1MDAyNmJhX2RhdGEtXHUwMDNlcmVvcmRlcl9idWZbcXVldWVdO1xuIFxuIFx0LyogcmVsZWFzZSBhbGwgZnJhbWVzIHRoYXQgYXJlIGluIHRoZSByZW9yZGVyIGJ1ZmZlciB0byB0aGUgc3RhY2sgKi9cbi1cdGl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhtbGQsIGxpbmtfc3RhLVx1MDAzZXN0YSwgTlVMTCxcbiYjNDM7XHRpd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMobWxkLCBsaW5rX3N0YSwgTlVMTCxcbiBcdFx0XHRcdCAgICAgICBiYV9kYXRhLCByZW9yZGVyX2J1ZixcbiBcdFx0XHRcdCAgICAgICBpZWVlODAyMTFfc25fYWRkKHJlb3JkZXJfYnVmLVx1MDAzZWhlYWRfc24sXG4gXHRcdFx0XHRcdFx0XHRiYV9kYXRhLVx1MDAzZWJ1Zl9zaXplKSk7XG5AQCAtMTkzLDcgJiM0MzsxOTQsNyBAQCB2b2lkIGl3bF9tbGRfZGVsX2JhKHN0cnVjdCBpd2xfbWxkICptbGQsIGludCBxdWV1ZSxcbiAgKi9cbiBlbnVtIGl3bF9tbGRfcmVvcmRlcl9yZXN1bHRcbiBpd2xfbWxkX3Jlb3JkZXIoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuLVx0XHRpbnQgcXVldWUsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXG4mIzQzO1x0XHRpbnQgcXVldWUsIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhLFxuIFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXdsX3J4X21wZHVfZGVzYyAqZGVzYylcbiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKilza2JfbWFjX2hlYWRlcihza2IpO1xuQEAgLTIyOCwxMiAmIzQzOzIyOSwxMiBAQCBpd2xfbWxkX3Jlb3JkZXIoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuIFx0XHRyZXR1cm4gSVdMX01MRF9QQVNTX1NLQjtcbiBcbiBcdC8qIG5vIHN0YSB5ZXQgKi9cbi1cdGlmIChJV0xfRldfQ0hFQ0sobWxkLCAhc3RhLFxuJiM0MztcdGlmIChJV0xfRldfQ0hFQ0sobWxkLCAhbGlua19zdGEsXG4gXHRcdFx0IFwmIzM0O0dvdCB2YWxpZCBCQUlEIHdpdGhvdXQgYSB2YWxpZCBzdGF0aW9uIGFzc2lnbmVkIC0gJWRcXG5cJiMzNDssXG4gXHRcdFx0IGJhaWQpKVxuIFx0XHRyZXR1cm4gSVdMX01MRF9QQVNTX1NLQjtcbiBcbi1cdG1sZF9zdGEgPSBpd2xfbWxkX3N0YV9mcm9tX21hYzgwMjExKHN0YSk7XG4mIzQzO1x0bWxkX3N0YSA9IGl3bF9tbGRfc3RhX2Zyb21fbWFjODAyMTEobGlua19zdGEtXHUwMDNlc3RhKTtcbiBcbiBcdC8qIG5vdCBhIGRhdGEgcGFja2V0ICovXG4gXHRpZiAoIWllZWU4MDIxMV9pc19kYXRhX3FvcyhoZHItXHUwMDNlZnJhbWVfY29udHJvbCkgfHxcbkBAIC0zMjQsNyAmIzQzOzMyNSw3IEBAIGl3bF9tbGRfcmVvcmRlcihzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHQgKiB3aWxsIGJlIHJlbGVhc2VkIHdoZW4gdGhlIGZyYW1lIHJlbGVhc2Ugbm90aWZpY2F0aW9uIGFycml2ZXMuXG4gXHQgKi9cbiBcdGlmICghYW1zZHUgfHwgbGFzdF9zdWJmcmFtZSlcbi1cdFx0aXdsX21sZF9yZW9yZGVyX3JlbGVhc2VfZnJhbWVzKG1sZCwgc3RhLCBuYXBpLCBiYWlkX2RhdGEsXG4mIzQzO1x0XHRpd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMobWxkLCBsaW5rX3N0YSwgbmFwaSwgYmFpZF9kYXRhLFxuIFx0XHRcdFx0XHQgICAgICAgYnVmZmVyLCBuc3NuKTtcbiBcdGVsc2UgaWYgKGJ1ZmZlci1cdTAwM2VudW1fc3RvcmVkID09IDEpXG4gXHRcdGJ1ZmZlci1cdTAwM2VoZWFkX3NuID0gbnNzbjtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hZ2cuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FnZy5oXG5pbmRleCA2NTFjODBkMWM3Y2RhLi5jNmNkNWZhMjE5YmVkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYWdnLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FnZy5oXG5AQCAtMSw2ICYjNDM7MSw2IEBAXG4gLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgQlNELTMtQ2xhdXNlICovXG4gLypcbi0gKiBDb3B5cmlnaHQgKEMpIDIwMjQgSW50ZWwgQ29ycG9yYXRpb25cbiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI0LCAyMDI2IEludGVsIENvcnBvcmF0aW9uXG4gICovXG4gI2lmbmRlZiBfX2l3bF9hZ2dfaF9fXG4gI2RlZmluZSBfX2l3bF9hZ2dfaF9fXG5AQCAtMTA2LDcgJiM0MzsxMDYsNyBAQCBpbnQgaXdsX21sZF9hbXBkdV9yeF9zdG9wKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXG4gXG4gZW51bSBpd2xfbWxkX3Jlb3JkZXJfcmVzdWx0XG4gaXdsX21sZF9yZW9yZGVyKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbi1cdFx0aW50IHF1ZXVlLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxuJiM0MztcdFx0aW50IHF1ZXVlLCBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSxcbiBcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGl3bF9yeF9tcGR1X2Rlc2MgKmRlc2MpO1xuIFxuIHZvaWQgaXdsX21sZF9oYW5kbGVfZnJhbWVfcmVsZWFzZV9ub3RpZihzdHJ1Y3QgaXdsX21sZCAqbWxkLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5jXG5pbmRleCAyNjk0MzlkNzg5ZjQ2Li4wMmJkZjZjY2JjZGM5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguY1xuQEAgLTQ3LDcgJiM0Mzs0Nyw4IEBAIGl3bF9tbGRfZmlsbF9waHlfZGF0YV9mcm9tX21wZHUoc3RydWN0IGl3bF9tbGQgKm1sZCxcbiB9XG4gXG4gc3RhdGljIGlubGluZSBpbnQgaXdsX21sZF9jaGVja19wbihzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0ICAgaW50IHF1ZXVlLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKVxuJiM0MztcdFx0XHRcdCAgIGludCBxdWV1ZSxcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSlcbiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKilza2JfbWFjX2hlYWRlcihza2IpO1xuIFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXRzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG5AQCAtNzEsMTMgJiM0Mzs3MiwxMyBAQCBzdGF0aWMgaW5saW5lIGludCBpd2xfbWxkX2NoZWNrX3BuKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0LyogaWYgd2UgYXJlIGhlcmUgLSB0aGlzIGZvciBzdXJlIGlzIGVpdGhlciBDQ01QIG9yIEdDTVAgKi9cbi1cdGlmICghc3RhKSB7XG4mIzQzO1x0aWYgKCFsaW5rX3N0YSkge1xuIFx0XHRJV0xfREVCVUdfRFJPUChtbGQsXG4gXHRcdFx0ICAgICAgIFwmIzM0O2V4cGVjdGVkIGh3LWRlY3J5cHRlZCB1bmljYXN0IGZyYW1lIGZvciBzdGF0aW9uXFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC0xO1xuIFx0fVxuIFxuLVx0bWxkX3N0YSA9IGl3bF9tbGRfc3RhX2Zyb21fbWFjODAyMTEoc3RhKTtcbiYjNDM7XHRtbGRfc3RhID0gaXdsX21sZF9zdGFfZnJvbV9tYWM4MDIxMShsaW5rX3N0YS1cdTAwM2VzdGEpO1xuIFxuIFx0ZXh0aXYgPSAodTggKiloZHIgJiM0MzsgaWVlZTgwMjExX2hkcmxlbihoZHItXHUwMDNlZnJhbWVfY29udHJvbCk7XG4gXHRrZXlpZHggPSBleHRpdlszXSBcdTAwM2VcdTAwM2UgNjtcbkBAIC0xMTksMTcgJiM0MzsxMjAsMTcgQEAgc3RhdGljIGlubGluZSBpbnQgaXdsX21sZF9jaGVja19wbihzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIHZvaWQgaXdsX21sZF9wYXNzX3BhY2tldF90b19tYWM4MDIxMShzdHJ1Y3QgaXdsX21sZCAqbWxkLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBxdWV1ZSxcbi1cdFx0XHRcdCAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSlcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhKVxuIHtcbiBcdEtVTklUX1NUQVRJQ19TVFVCX1JFRElSRUNUKGl3bF9tbGRfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEsXG4tXHRcdFx0XHQgICBtbGQsIG5hcGksIHNrYiwgcXVldWUsIHN0YSk7XG4mIzQzO1x0XHRcdFx0ICAgbWxkLCBuYXBpLCBza2IsIHF1ZXVlLCBsaW5rX3N0YSk7XG4gXG4tXHRpZiAodW5saWtlbHkoaXdsX21sZF9jaGVja19wbihtbGQsIHNrYiwgcXVldWUsIHN0YSkpKSB7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGl3bF9tbGRfY2hlY2tfcG4obWxkLCBza2IsIHF1ZXVlLCBsaW5rX3N0YSkpKSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRpZWVlODAyMTFfcnhfbmFwaShtbGQtXHUwMDNlaHcsIHN0YSwgc2tiLCBuYXBpKTtcbiYjNDM7XHRpZWVlODAyMTFfcnhfbmFwaShtbGQtXHUwMDNlaHcsIGxpbmtfc3RhLCBza2IsIG5hcGkpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0lGX0lXTFdJRklfS1VOSVQoaXdsX21sZF9wYXNzX3BhY2tldF90b19tYWM4MDIxMSk7XG4gXG5AQCAtMTcyOCw3ICYjNDM7MTcyOSw3IEBAIHN0YXRpYyB2b2lkIGl3bF9tbGRfdXBkYXRlX2xhc3RfcnhfdGltZXN0YW1wKHN0cnVjdCBpd2xfbWxkICptbGQsIHU4IGJhaWQpXG4gICogU2V0cyAqZHJvcCB0byB0cnVlIGlmIHRoZSBwYWNrZXQgc2hvdWxkIGJlIGRyb3BwZWQuXG4gICogUmV0dXJucyB0aGUgc3RhdGlvbiBpZiBmb3VuZCwgb3IgTlVMTCBvdGhlcndpc2UuXG4gICovXG4tc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfc3RhICpcbiYjNDM7c3RhdGljIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKlxuIGl3bF9tbGRfcnhfd2l0aF9zdGEoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcixcbiBcdFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdCAgICBjb25zdCBzdHJ1Y3QgaXdsX3J4X21wZHVfZGVzYyAqbXBkdV9kZXNjLFxuQEAgLTE3NjQsMTEgJiM0MzsxNzY1LDYgQEAgaXdsX21sZF9yeF93aXRoX3N0YShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLFxuIFxuIFx0cnhfc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4gXG4tXHRpZiAobGlua19zdGEgXHUwMDI2XHUwMDI2IHN0YS1cdTAwM2V2YWxpZF9saW5rcykge1xuLVx0XHRyeF9zdGF0dXMtXHUwMDNlbGlua192YWxpZCA9IHRydWU7XG4tXHRcdHJ4X3N0YXR1cy1cdTAwM2VsaW5rX2lkID0gbGlua19zdGEtXHUwMDNlbGlua19pZDtcbi1cdH1cbi1cbiBcdC8qIGZpbGwgY2hlY2tzdW0gKi9cbiBcdGlmIChpZWVlODAyMTFfaXNfZGF0YShoZHItXHUwMDNlZnJhbWVfY29udHJvbCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgcGt0LVx1MDAzZWxlbl9uX2ZsYWdzIFx1MDAyNiBjcHVfdG9fbGUzMihGSF9SU0NTUl9SUEFfRU4pKSB7XG5AQCAtMTgwMywxMCAmIzQzOzE3OTksMTAgQEAgaXdsX21sZF9yeF93aXRoX3N0YShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLFxuIFx0XHRcdFx0XHRcdFx0ICAgIHF1ZXVlKTtcbiBcdH1cbiBcbi1cdHJldHVybiBzdGE7XG4mIzQzO1x0cmV0dXJuIGxpbmtfc3RhO1xuIH1cbiBcbi1zdGF0aWMgaW50IGl3bF9tbGRfcnhfbWdtdF9wcm90KHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXG4mIzQzO3N0YXRpYyBpbnQgaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEsXG4gXHRcdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLFxuIFx0XHRcdFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cyxcbiBcdFx0XHRcdHUzMiBtcGR1X3N0YXR1cyxcbkBAIC0xODIwLDcgJiM0MzsxODE2LDYgQEAgc3RhdGljIGludCBpd2xfbWxkX3J4X21nbXRfcHJvdChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxuIFx0c3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5O1xuIFx0Y29uc3QgdTggKmZyYW1lID0gKHZvaWQgKiloZHI7XG4gXHRjb25zdCB1OCAqbW1pZTtcbi1cdHU4IGxpbmtfaWQ7XG4gXG4gXHRpZiAoKG1wZHVfc3RhdHVzIFx1MDAyNiBJV0xfUlhfTVBEVV9TVEFUVVNfU0VDX01BU0spID09XG4gXHQgICAgIElXTF9SWF9NUERVX1NUQVRVU19TRUNfTk9ORSlcbkBAIC0xODM2LDEwICYjNDM7MTgzMSwxMCBAQCBzdGF0aWMgaW50IGl3bF9tbGRfcnhfbWdtdF9wcm90KHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXG4gXHRpZiAoIWllZWU4MDIxMV9pc19iZWFjb24oaGRyLVx1MDAzZWZyYW1lX2NvbnRyb2wpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmICghc3RhKVxuJiM0MztcdGlmICghbGlua19zdGEpXG4gXHRcdHJldHVybiAtMTtcbiBcbi1cdG1sZF9zdGEgPSBpd2xfbWxkX3N0YV9mcm9tX21hYzgwMjExKHN0YSk7XG4mIzQzO1x0bWxkX3N0YSA9IGl3bF9tbGRfc3RhX2Zyb21fbWFjODAyMTEobGlua19zdGEtXHUwMDNlc3RhKTtcbiBcdG1sZF92aWYgPSBpd2xfbWxkX3ZpZl9mcm9tX21hYzgwMjExKG1sZF9zdGEtXHUwMDNldmlmKTtcbiBcbiBcdC8qIGtleSBtaXNtYXRjaCAtIHdpbGwgYWxzbyByZXBvcnQgIU1JQ19PSyBidXQgd2Ugc2hvdWxkbiYjMzk7dCBjb3VudCBpdCAqL1xuQEAgLTE4NTMsOCAmIzQzOzE4NDgsNyBAQCBzdGF0aWMgaW50IGl3bF9tbGRfcnhfbWdtdF9wcm90KHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuLVx0bGlua19pZCA9IHJ4X3N0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkID8gcnhfc3RhdHVzLVx1MDAzZWxpbmtfaWQgOiAwO1xuLVx0bGluayA9IHJjdV9kZXJlZmVyZW5jZShtbGRfdmlmLVx1MDAzZWxpbmtbbGlua19pZF0pO1xuJiM0MztcdGxpbmsgPSByY3VfZGVyZWZlcmVuY2UobWxkX3ZpZi1cdTAwM2VsaW5rW2xpbmtfc3RhLVx1MDAzZWxpbmtfaWRdKTtcbiBcdGlmIChXQVJOX09OX09OQ0UoIWxpbmspKVxuIFx0XHRyZXR1cm4gLTE7XG4gXG5AQCAtMTkwNSw3ICYjNDM7MTg5OSw3IEBAIHN0YXRpYyBpbnQgaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbiB9XG4gXG4gc3RhdGljIGludCBpd2xfbWxkX3J4X2NyeXB0byhzdHJ1Y3QgaXdsX21sZCAqbWxkLFxuLVx0XHRcdCAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbiYjNDM7XHRcdFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSxcbiBcdFx0XHQgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzLFxuIFx0XHRcdCAgICAgc3RydWN0IGl3bF9yeF9tcGR1X2Rlc2MgKmRlc2MsIGludCBxdWV1ZSxcbkBAIC0xOTE1LDcgJiM0MzsxOTA5LDcgQEAgc3RhdGljIGludCBpd2xfbWxkX3J4X2NyeXB0byhzdHJ1Y3QgaXdsX21sZCAqbWxkLFxuIFxuIFx0aWYgKHVubGlrZWx5KGllZWU4MDIxMV9pc19tZ210KGhkci1cdTAwM2VmcmFtZV9jb250cm9sKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICAhaWVlZTgwMjExX2hhc19wcm90ZWN0ZWQoaGRyLVx1MDAzZWZyYW1lX2NvbnRyb2wpKSlcbi1cdFx0cmV0dXJuIGl3bF9tbGRfcnhfbWdtdF9wcm90KHN0YSwgaGRyLCByeF9zdGF0dXMsIHN0YXR1cyxcbiYjNDM7XHRcdHJldHVybiBpd2xfbWxkX3J4X21nbXRfcHJvdChsaW5rX3N0YSwgaGRyLCByeF9zdGF0dXMsIHN0YXR1cyxcbiBcdFx0XHRcdFx0ICAgIGxlMTZfdG9fY3B1KGRlc2MtXHUwMDNlbXBkdV9sZW4pKTtcbiBcbiBcdGlmICghaWVlZTgwMjExX2hhc19wcm90ZWN0ZWQoaGRyLVx1MDAzZWZyYW1lX2NvbnRyb2wpIHx8XG5AQCAtMjAyMyw3ICYjNDM7MjAxNyw3IEBAIHZvaWQgaXdsX21sZF9yeF9tcGR1KHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbiBcdHN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSByeGJfYWRkcihyeGIpO1xuIFx0c3RydWN0IGl3bF9tbGRfcnhfcGh5X2RhdGEgcGh5X2RhdGEgPSB7fTtcbiBcdHN0cnVjdCBpd2xfcnhfbXBkdV9kZXNjICptcGR1X2Rlc2MgPSAodm9pZCAqKXBrdC1cdTAwM2VkYXRhO1xuLVx0c3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTtcbiYjNDM7XHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFx0c2l6ZV90IG1wZHVfZGVzY19zaXplID0gc2l6ZW9mKCptcGR1X2Rlc2MpO1xuQEAgLTIwODYsNyAmIzQzOzIwODAsOCBAQCB2b2lkIGl3bF9tbGRfcnhfbXBkdShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXG4tXHRzdGEgPSBpd2xfbWxkX3J4X3dpdGhfc3RhKG1sZCwgaGRyLCBza2IsIG1wZHVfZGVzYywgcGt0LCBxdWV1ZSwgXHUwMDI2ZHJvcCk7XG4mIzQzO1x0bGlua19zdGEgPSBpd2xfbWxkX3J4X3dpdGhfc3RhKG1sZCwgaGRyLCBza2IsIG1wZHVfZGVzYywgcGt0LCBxdWV1ZSxcbiYjNDM7XHRcdFx0XHQgICAgICAgXHUwMDI2ZHJvcCk7XG4gXHRpZiAoZHJvcClcbiBcdFx0Z290byBkcm9wO1xuIFxuQEAgLTIxMjcsNyAmIzQzOzIxMjIsNyBAQCB2b2lkIGl3bF9tbGRfcnhfbXBkdShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXG4gXHRpd2xfbWxkX3J4X2ZpbGxfc3RhdHVzKG1sZCwgbGlua19pZCwgaGRyLCBza2IsIFx1MDAyNnBoeV9kYXRhKTtcbiBcbi1cdGlmIChpd2xfbWxkX3J4X2NyeXB0byhtbGQsIHN0YSwgaGRyLCByeF9zdGF0dXMsIG1wZHVfZGVzYywgcXVldWUsXG4mIzQzO1x0aWYgKGl3bF9tbGRfcnhfY3J5cHRvKG1sZCwgbGlua19zdGEsIGhkciwgcnhfc3RhdHVzLCBtcGR1X2Rlc2MsIHF1ZXVlLFxuIFx0XHRcdCAgICAgIGxlMzJfdG9fY3B1KHBrdC1cdTAwM2VsZW5fbl9mbGFncyksIFx1MDAyNmNyeXB0b19sZW4pKVxuIFx0XHRnb3RvIGRyb3A7XG4gXG5AQCAtMjE0MCw3ICYjNDM7MjEzNSw4IEBAIHZvaWQgaXdsX21sZF9yeF9tcGR1KHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbiBcdGlmIChpd2xfbWxkX3RpbWVfc3luY19mcmFtZShtbGQsIHNrYiwgaGRyLVx1MDAzZWFkZHIyKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRyZW9yZGVyX3JlcyA9IGl3bF9tbGRfcmVvcmRlcihtbGQsIG5hcGksIHF1ZXVlLCBzdGEsIHNrYiwgbXBkdV9kZXNjKTtcbiYjNDM7XHRyZW9yZGVyX3JlcyA9IGl3bF9tbGRfcmVvcmRlcihtbGQsIG5hcGksIHF1ZXVlLCBsaW5rX3N0YSwgc2tiLFxuJiM0MztcdFx0XHRcdCAgICAgIG1wZHVfZGVzYyk7XG4gXHRzd2l0Y2ggKHJlb3JkZXJfcmVzKSB7XG4gXHRjYXNlIElXTF9NTERfUEFTU19TS0I6XG4gXHRcdGJyZWFrO1xuQEAgLTIxNTMsNyAmIzQzOzIxNDksNyBAQCB2b2lkIGl3bF9tbGRfcnhfbXBkdShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHRcdGdvdG8gZHJvcDtcbiBcdH1cbiBcbi1cdGl3bF9tbGRfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEobWxkLCBuYXBpLCBza2IsIHF1ZXVlLCBzdGEpO1xuJiM0MztcdGl3bF9tbGRfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEobWxkLCBuYXBpLCBza2IsIHF1ZXVlLCBsaW5rX3N0YSk7XG4gXG4gXHRnb3RvIG91dDtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguaFxuaW5kZXggNTczYjg5YzNjOWM2MS4uYjA4YzVhZGUzZGI4ZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmhcbkBAIC02OSw3ICYjNDM7NjksNyBAQCB2b2lkIGl3bF9tbGRfaGFuZGxlX3JzY19ub3RpZihzdHJ1Y3QgaXdsX21sZCAqbWxkLFxuIHZvaWQgaXdsX21sZF9wYXNzX3BhY2tldF90b19tYWM4MDIxMShzdHJ1Y3QgaXdsX21sZCAqbWxkLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBxdWV1ZSxcbi1cdFx0XHRcdCAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSk7XG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSk7XG4gXG4gdm9pZCBpd2xfbWxkX2hhbmRsZV9waHlfYWlyX3NuaWZmZXJfbm90aWYoc3RydWN0IGl3bF9tbGQgKm1sZCxcbiBcdFx0XHRcdFx0ICBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvdGVzdHMvYWdnLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC90ZXN0cy9hZ2cuY1xuaW5kZXggMjliMDI0OGNlYzNkZi4uZTllZmUyOTk2ZjA3MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3Rlc3RzL2FnZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC90ZXN0cy9hZ2cuY1xuQEAgLTIsNyAmIzQzOzIsNyBAQFxuIC8qXG4gICogS1VuaXQgdGVzdHMgZm9yIGNoYW5uZWwgaGVscGVyIGZ1bmN0aW9uc1xuICAqXG4tICogQ29weXJpZ2h0IChDKSAyMDI0LTIwMjUgSW50ZWwgQ29ycG9yYXRpb25cbiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI0LTIwMjYgSW50ZWwgQ29ycG9yYXRpb25cbiAgKi9cbiAjaW5jbHVkZSBcdTAwM2NrdW5pdC90ZXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NrdW5pdC9zdGF0aWNfc3R1Yi5oXHUwMDNlXG5AQCAtNDQxLDcgJiM0Mzs0NDEsNyBAQCBzdGF0aWMgdm9pZFxuIGZha2VfaXdsX21sZF9wYXNzX3BhY2tldF90b19tYWM4MDIxMShzdHJ1Y3QgaXdsX21sZCAqbWxkLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBxdWV1ZSxcbi1cdFx0XHRcdCAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSlcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhKVxuIHtcbiBcdF9fc2tiX3F1ZXVlX3RhaWwoXHUwMDI2Z19yZWxlYXNlZF9za2JzLCBza2IpO1xuIFx0Z19udW1fcmVsZWFzZWRfc2ticyYjNDM7JiM0Mzs7XG5AQCAtNjMwLDcgJiM0Mzs2MzAsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3Jlb3JkZXJfYnVmZmVyKHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdG1wZHVfZGVzYyA9IHNldHVwX21wZHVfZGVzYygpO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0cmVvcmRlcl9yZXMgPSBpd2xfbWxkX3Jlb3JkZXIobWxkLCBOVUxMLCBRVUVVRSwgc3RhLCBza2IsIG1wZHVfZGVzYyk7XG4mIzQzO1x0cmVvcmRlcl9yZXMgPSBpd2xfbWxkX3Jlb3JkZXIobWxkLCBOVUxMLCBRVUVVRSwgXHUwMDI2c3RhLVx1MDAzZWRlZmxpbmssIHNrYixcbiYjNDM7XHRcdFx0XHQgICAgICBtcGR1X2Rlc2MpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmVvcmRlcl9yZXMsIHBhcmFtLVx1MDAzZWV4cGVjdGVkLnJlb3JkZXJfcmVzKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnguY1xuaW5kZXggYWIxZWIyZWIwYzNjZC4uOGMxOTdhMDkwYzJiMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4LmNcbkBAIC05MCw3ICYjNDM7OTAsNyBAQCBzdGF0aWMgdm9pZCBpd2xfbXZtX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKHN0cnVjdCBpd2xfbXZtICptdm0sXG4gXHRcdFx0XHRmcmFnbGVuLCByeGItXHUwMDNldHJ1ZXNpemUpO1xuIFx0fVxuIFxuLVx0aWVlZTgwMjExX3J4X25hcGkobXZtLVx1MDAzZWh3LCBzdGEsIHNrYiwgbmFwaSk7XG4mIzQzO1x0aWVlZTgwMjExX3J4X25hcGkobXZtLVx1MDAzZWh3LCBzdGEgPyBcdTAwMjZzdGEtXHUwMDNlZGVmbGluayA6IE5VTEwsIHNrYiwgbmFwaSk7XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnhtcS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnhtcS5jXG5pbmRleCA3ZjBiNGY1ZGFhMjE0Li44YzQwMDlkM2EwMGNhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnhtcS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeG1xLmNcbkBAIC0xLDYgJiM0MzsxLDYgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBCU0QtMy1DbGF1c2VcbiAvKlxuLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE0LCAyMDE4LTIwMjUgSW50ZWwgQ29ycG9yYXRpb25cbiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTQsIDIwMTgtMjAyNiBJbnRlbCBDb3Jwb3JhdGlvblxuICAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEludGVsIE1vYmlsZSBDb21tdW5pY2F0aW9ucyBHbWJIXG4gICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgSW50ZWwgRGV1dHNjaGxhbmQgR21iSFxuICAqL1xuQEAgLTI0Myw3ICYjNDM7MjQzLDcgQEAgc3RhdGljIHZvaWQgaXdsX212bV9wYXNzX3BhY2tldF90b19tYWM4MDIxMShzdHJ1Y3QgaXdsX212bSAqbXZtLFxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRpZWVlODAyMTFfcnhfbmFwaShtdm0tXHUwMDNlaHcsIHN0YSwgc2tiLCBuYXBpKTtcbiYjNDM7XHRpZWVlODAyMTFfcnhfbmFwaShtdm0tXHUwMDNlaHcsIHN0YSA/IFx1MDAyNnN0YS1cdTAwM2VkZWZsaW5rIDogTlVMTCwgc2tiLCBuYXBpKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgaXdsX212bV91c2VkX2F2ZXJhZ2VfZW5lcmd5KHN0cnVjdCBpd2xfbXZtICptdm0sXG5AQCAtMjUyOCw3ICYjNDM7MjUyOCw3IEBAIHZvaWQgaXdsX212bV9yeF9tb25pdG9yX25vX2RhdGEoc3RydWN0IGl3bF9tdm0gKm12bSwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuIFx0fVxuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0aWVlZTgwMjExX3J4X25hcGkobXZtLVx1MDAzZWh3LCBzdGEsIHNrYiwgbmFwaSk7XG4mIzQzO1x0aWVlZTgwMjExX3J4X25hcGkobXZtLVx1MDAzZWh3LCBzdGEgPyBcdTAwMjZzdGEtXHUwMDNlZGVmbGluayA6IE5VTEwsIHNrYiwgbmFwaSk7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tYWM4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tYWM4MDIxMS5jXG5pbmRleCAxM2M0ZThhYmUyODE5Li5kNWE0N2FiMjlmNTg0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tYWM4MDIxMS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21hYzgwMjExLmNcbkBAIC0xMjM5LDcgJiM0MzsxMjM5LDcgQEAgRVhQT1JUX1NZTUJPTChtdDc2X3J4X3NpZ25hbCk7XG4gc3RhdGljIHZvaWRcbiBtdDc2X3J4X2NvbnZlcnQoc3RydWN0IG10NzZfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHN0cnVjdCBpZWVlODAyMTFfaHcgKipodyxcbi1cdFx0c3RydWN0IGllZWU4MDIxMV9zdGEgKipzdGEpXG4mIzQzO1x0XHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICoqbGlua19zdGEpXG4ge1xuIFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpO1xuIFx0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IG10NzZfc2tiX2dldF9oZHIoc2tiKTtcbkBAIC0xMjg2LDExICYjNDM7MTI4NiwxNSBAQCBtdDc2X3J4X2NvbnZlcnQoc3RydWN0IG10NzZfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHQgICAgICAgc2l6ZW9mKG1zdGF0LmNoYWluX3NpZ25hbCkpO1xuIFxuIFx0aWYgKG1zdGF0LndjaWQpIHtcbi1cdFx0c3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQgPSBtc3RhdC53Y2lkLVx1MDAzZWxpbmtfdmFsaWQ7XG4tXHRcdHN0YXR1cy1cdTAwM2VsaW5rX2lkID0gbXN0YXQud2NpZC1cdTAwM2VsaW5rX2lkO1xuJiM0MztcdFx0c3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSA9IHdjaWRfdG9fc3RhKG1zdGF0LndjaWQpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChtc3RhdC53Y2lkLVx1MDAzZWxpbmtfdmFsaWQpXG4mIzQzO1x0XHRcdCpsaW5rX3N0YSA9XG4mIzQzO1x0XHRcdFx0cmN1X2RlcmVmZXJlbmNlKHN0YS1cdTAwM2VsaW5rW21zdGF0LndjaWQtXHUwMDNlbGlua19pZF0pO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHQqbGlua19zdGEgPSBcdTAwMjZzdGEtXHUwMDNlZGVmbGluaztcbiBcdH1cbiBcbi1cdCpzdGEgPSB3Y2lkX3RvX3N0YShtc3RhdC53Y2lkKTtcbiBcdCpodyA9IG10NzZfcGh5X2h3KGRldiwgbXN0YXQucGh5X2lkeCk7XG4gfVxuIFxuQEAgLTE1MTQsNyAmIzQzOzE1MTgsNyBAQCBtdDc2X2NoZWNrX3N0YShzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB2b2lkIG10NzZfcnhfY29tcGxldGUoc3RydWN0IG10NzZfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmX2hlYWQgKmZyYW1lcyxcbiBcdFx0ICAgICAgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKVxuIHtcbi1cdHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGE7XG4mIzQzO1x0c3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGE7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodztcbiBcdHN0cnVjdCBza19idWZmICpza2IsICp0bXA7XG4gXHRMSVNUX0hFQUQobGlzdCk7XG5AQCAtMTUyNSw4ICYjNDM7MTUyOSw4IEBAIHZvaWQgbXQ3Nl9yeF9jb21wbGV0ZShzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqZnJhbWVzLFxuIFxuIFx0XHRtdDc2X2NoZWNrX2NjbXBfcG4oc2tiKTtcbiBcdFx0c2tiX3NoaW5mbyhza2IpLVx1MDAzZWZyYWdfbGlzdCA9IE5VTEw7XG4tXHRcdG10NzZfcnhfY29udmVydChkZXYsIHNrYiwgXHUwMDI2aHcsIFx1MDAyNnN0YSk7XG4tXHRcdGllZWU4MDIxMV9yeF9saXN0KGh3LCBzdGEsIHNrYiwgXHUwMDI2bGlzdCk7XG4mIzQzO1x0XHRtdDc2X3J4X2NvbnZlcnQoZGV2LCBza2IsIFx1MDAyNmh3LCBcdTAwMjZsaW5rX3N0YSk7XG4mIzQzO1x0XHRpZWVlODAyMTFfcnhfbGlzdChodywgbGlua19zdGEsIHNrYiwgXHUwMDI2bGlzdCk7XG4gXG4gXHRcdC8qIHN1YnNlcXVlbnQgYW1zZHUgZnJhbWVzICovXG4gXHRcdHdoaWxlIChuc2tiKSB7XG5AQCAtMTUzNCw4ICYjNDM7MTUzOCw4IEBAIHZvaWQgbXQ3Nl9yeF9jb21wbGV0ZShzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqZnJhbWVzLFxuIFx0XHRcdG5za2IgPSBuc2tiLVx1MDAzZW5leHQ7XG4gXHRcdFx0c2tiLVx1MDAzZW5leHQgPSBOVUxMO1xuIFxuLVx0XHRcdG10NzZfcnhfY29udmVydChkZXYsIHNrYiwgXHUwMDI2aHcsIFx1MDAyNnN0YSk7XG4tXHRcdFx0aWVlZTgwMjExX3J4X2xpc3QoaHcsIHN0YSwgc2tiLCBcdTAwMjZsaXN0KTtcbiYjNDM7XHRcdFx0bXQ3Nl9yeF9jb252ZXJ0KGRldiwgc2tiLCBcdTAwMjZodywgXHUwMDI2bGlua19zdGEpO1xuJiM0MztcdFx0XHRpZWVlODAyMTFfcnhfbGlzdChodywgbGlua19zdGEsIHNrYiwgXHUwMDI2bGlzdCk7XG4gXHRcdH1cbiBcdH1cbiBcdHNwaW5fdW5sb2NrKFx1MDAyNmRldi1cdTAwM2VyeF9sb2NrKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2NvcmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY29yZS5jXG5pbmRleCAwZjBlNDZjYjQyNjA1Li5kZjk2ZDBhOTY3ODczIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY29yZS5jXG5AQCAtMzAzNiw3ICYjNDM7MzAzNiw2IEBAIHN0YXRpYyB2b2lkIHJ0dzg5X3ZpZl9yeF9zdGF0c19pdGVyKHZvaWQgKmRhdGEsIHU4ICptYWMsXG4gXHRzdHJ1Y3QgcnR3ODlfdmlmICpydHd2aWYgPSB2aWZfdG9fcnR3dmlmKHZpZik7XG4gXHRzdHJ1Y3QgcnR3ODlfcnhfZGVzY19pbmZvICpkZXNjX2luZm8gPSBpdGVyX2RhdGEtXHUwMDNlZGVzY19pbmZvO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGl0ZXJfZGF0YS1cdTAwM2Vza2I7XG4tXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLVx1MDAzZWRhdGE7XG4gXHRzdHJ1Y3QgcnR3ODlfcnhfcGh5X3BwZHUgKnBoeV9wcGR1ID0gaXRlcl9kYXRhLVx1MDAzZXBoeV9wcGR1O1xuIFx0Ym9vbCBpc19tbGQgPSBpZWVlODAyMTFfdmlmX2lzX21sZCh2aWYpO1xuQEAgLTMwNzMsMTEgJiM0MzszMDcyLDYgQEAgc3RhdGljIHZvaWQgcnR3ODlfdmlmX3J4X3N0YXRzX2l0ZXIodm9pZCAqZGF0YSwgdTggKm1hYyxcbiBcdGlmICghZXRoZXJfYWRkcl9lcXVhbCh0YXJnZXRfYnNzaWQsIGJzc2lkKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRpZiAoaXNfbWxkKSB7XG4tXHRcdHJ4X3N0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkID0gdHJ1ZTtcbi1cdFx0cnhfc3RhdHVzLVx1MDAzZWxpbmtfaWQgPSBydHd2aWZfbGluay1cdTAwM2VsaW5rX2lkO1xuLVx0fVxuLVxuIFx0YmIgPSBydHc4OV9nZXRfYmJfY3R4KHJ0d2RldiwgcnR3dmlmX2xpbmstXHUwMDNlcGh5X2lkeCk7XG4gXHRwa3Rfc3RhdCA9IFx1MDAyNmJiLVx1MDAzZWN1cl9wa3Rfc3RhdDtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXG5pbmRleCAwMmI2ZDgxY2NjZDExLi5hMGQ1MTljZDljNGZhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXG5AQCAtMTg4MCw5ICYjNDM7MTg4MCw2IEBAIHN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX3J4KHN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICpkYXRhLFxuIFx0XHRcdFx0c3AtXHUwMDNlYWN0aXZlX2xpbmtzX3J4IFx1MDAyNj0gfkJJVChsaW5rX2lkKTtcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRzcC1cdTAwM2VhY3RpdmVfbGlua3NfcnggfD0gQklUKGxpbmtfaWQpO1xuLVxuLVx0XHRcdHJ4X3N0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkID0gdHJ1ZTtcbi1cdFx0XHRyeF9zdGF0dXMtXHUwMDNlbGlua19pZCA9IGxpbmtfaWQ7XG4gXHRcdH1cbiBcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaCBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmhcbmluZGV4IGRjYmIwZTU1YzMyZWMuLjU5YmQxNTMyMzIyZDcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oXG5AQCAtNDAwOSw2ICYjNDM7NDAwOSw3IEBAIHN0cnVjdCBjZmc4MDIxMV91cGRhdGVfZnRfaWVzX3BhcmFtcyB7XG4gICogQGxpbmtfaWQ6IGZvciBNTE8sIHRoZSBsaW5rIElEIHRvIHRyYW5zbWl0IG9uLCAtMSBpZiBub3QgZ2l2ZW47IG5vdGVcbiAgKlx0dGhhdCB0aGUgbGluayBJRCBpc24mIzM5O3QgdmFsaWRhdGVkIChtdWNoKSwgaXQmIzM5O3MgaW4gcmFuZ2UgYnV0IHRoZVxuICAqXHRsaW5rIG1pZ2h0IG5vdCBleGlzdCAob3IgYmUgdXNlZCBieSB0aGUgcmVjZWl2ZXIgU1RBKVxuJiM0MzsgKiBAbm9fc3RhOiBzZXQgaWYgdGhlIGZyYW1lIHNob3VsZCBub3QgYmUgdHJhbnNtaXR0ZWQgdXNpbmcgYW4gZXhpc3RpbmcgU1RBXG4gICovXG4gc3RydWN0IGNmZzgwMjExX21nbXRfdHhfcGFyYW1zIHtcbiBcdHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbjtcbkBAIC00MDIxLDYgJiM0Mzs0MDIyLDcgQEAgc3RydWN0IGNmZzgwMjExX21nbXRfdHhfcGFyYW1zIHtcbiBcdGludCBuX2NzYV9vZmZzZXRzO1xuIFx0Y29uc3QgdTE2ICpjc2Ffb2Zmc2V0cztcbiBcdGludCBsaW5rX2lkO1xuJiM0MztcdGJvb2wgbm9fc3RhO1xuIH07XG4gXG4gLyoqXG5AQCAtOTQ5OSw2ICYjNDM7OTUwMSw3IEBAIHZvaWQgY2ZnODAyMTFfY29ubl9mYWlsZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKm1hY19hZGRyLFxuICAqIEBmbGFnczogZmxhZ3MsIGFzIGRlZmluZWQgaW4gXHUwMDI2ZW51bSBubDgwMjExX3J4bWdtdF9mbGFnc1xuICAqIEByeF90c3RhbXA6IEhhcmR3YXJlIHRpbWVzdGFtcCBvZiBmcmFtZSBSWCBpbiBuYW5vc2Vjb25kc1xuICAqIEBhY2tfdHN0YW1wOiBIYXJkd2FyZSB0aW1lc3RhbXAgb2YgYWNrIFRYIGluIG5hbm9zZWNvbmRzXG4mIzQzOyAqIEBub19zdGE6IHNldCBpZiBubyBzdGF0aW9uIGlzIGtub3duIGZvciB0aGUgZnJhbWUgKHJlbGV2YW50IGZvciBNTEQpXG4gICovXG4gc3RydWN0IGNmZzgwMjExX3J4X2luZm8ge1xuIFx0aW50IGZyZXE7XG5AQCAtOTUxMCw2ICYjNDM7OTUxMyw3IEBAIHN0cnVjdCBjZmc4MDIxMV9yeF9pbmZvIHtcbiBcdHUzMiBmbGFncztcbiBcdHU2NCByeF90c3RhbXA7XG4gXHR1NjQgYWNrX3RzdGFtcDtcbiYjNDM7XHRib29sIG5vX3N0YTtcbiB9O1xuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmggYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXG5pbmRleCA5ZDFmYWM2ZTgwODI5Li43YWFlNzI4ZTk2ZDg0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaFxuQEAgLTE3NzAsMTAgJiM0MzsxNzcwLDkgQEAgZW51bSBtYWM4MDIxMV9yeF9lbmNvZGluZyB7XG4gICogQGFtcGR1X3JlZmVyZW5jZTogQS1NUERVIHJlZmVyZW5jZSBudW1iZXIsIG11c3QgYmUgYSBkaWZmZXJlbnQgdmFsdWUgZm9yXG4gICpcdGVhY2ggQS1NUERVIGJ1dCB0aGUgc2FtZSBmb3IgZWFjaCBzdWJmcmFtZSB3aXRoaW4gb25lIEEtTVBEVVxuICAqIEB6ZXJvX2xlbmd0aF9wc2R1X3R5cGU6IHJhZGlvdGFwIHR5cGUgb2YgdGhlIDAtbGVuZ3RoIFBTRFVcbi0gKiBAbGlua192YWxpZDogaWYgdGhlIGxpbmsgd2hpY2ggaXMgaWRlbnRpZmllZCBieSBAbGlua19pZCBpcyB2YWxpZC4gVGhpcyBmbGFnXG4tICpcdGlzIHNldCBvbmx5IHdoZW4gY29ubmVjdGlvbiBpcyBNTE8uXG4tICogQGxpbmtfaWQ6IGlkIG9mIHRoZSBsaW5rIHVzZWQgdG8gcmVjZWl2ZSB0aGUgcGFja2V0LiBUaGlzIGlzIHVzZWQgYWxvbmcgd2l0aFxuLSAqXHRAbGlua192YWxpZC5cbiYjNDM7ICogQGxpbmtfaWQ6IGlkIG9mIHRoZSBsaW5rIHVzZWQgdG8gcmVjZWl2ZSB0aGUgcGFja2V0LiBTZXQgYW5kIHVzZWQgYnlcbiYjNDM7ICpcdG1hYzgwMjExIGludGVybmFsbHksIGl0IHVzZXMgQGZyZXEgc2V0IGJ5IHRoZSBkcml2ZXIgdG8gaWRlbnRpZnkgdGhlXG4mIzQzOyAqXHRjb3JyZWN0IGxpbmsgcGVyIHZpZi5cbiAgKi9cbiBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyB7XG4gXHR1NjQgbWFjdGltZTtcbkBAIC0xODEzLDcgJiM0MzsxODEyLDcgQEAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMge1xuIFx0dTggY2hhaW5zO1xuIFx0czggY2hhaW5fc2lnbmFsW0lFRUU4MDIxMV9NQVhfQ0hBSU5TXTtcbiBcdHU4IHplcm9fbGVuZ3RoX3BzZHVfdHlwZTtcbi1cdHU4IGxpbmtfdmFsaWQ6MSwgbGlua19pZDo0O1xuJiM0MztcdHU4IGxpbmtfaWQ6NDtcbiB9O1xuIFxuIHN0YXRpY19hc3NlcnQoc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzKSBcdTAwM2M9IHNpemVvZl9maWVsZChzdHJ1Y3Qgc2tfYnVmZiwgY2IpKTtcbkBAIC01Mzg5LDE0ICYjNDM7NTM4OCwxOCBAQCB2b2lkIGllZWU4MDIxMV9yZXN0YXJ0X2h3KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTtcbiAgKiBtaXhlZCBmb3IgYSBzaW5nbGUgaGFyZHdhcmUuIE11c3Qgbm90IHJ1biBjb25jdXJyZW50bHkgd2l0aFxuICAqIGllZWU4MDIxMV90eF9zdGF0dXNfc2tiKCkgb3IgaWVlZTgwMjExX3R4X3N0YXR1c19uaSgpLlxuICAqXG4mIzQzOyAqIEZvciBkYXRhIGZyYW1lcywgd2hlbiBoYXJkd2FyZSBoYXMgZG9uZSBhZGRyZXNzIHRyYW5zbGF0aW9uLCBhIGxpbmsgc3RhdGlvblxuJiM0MzsgKiBoYXMgdG8gYmUgcHJvdmlkZWQgYW5kIHRoZSBmcmVxdWVuY3kgaW5mb3JtYXRpb24gbWF5IGJlIHNraXBwZWQuXG4mIzQzOyAqXG4gICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIEJIcyBkaXNhYmxlZCBhbmQgUkNVIHJlYWQgbG9ja1xuICAqXG4gICogQGh3OiB0aGUgaGFyZHdhcmUgdGhpcyBmcmFtZSBjYW1lIGluIG9uXG4tICogQHN0YTogdGhlIHN0YXRpb24gdGhlIGZyYW1lIHdhcyByZWNlaXZlZCBmcm9tLCBvciAlTlVMTFxuJiM0MzsgKiBAbGlua19zdGE6IHRoZSBsaW5rIHN0YXRpb24gdGhlIGRhdGEgZnJhbWUgd2FzIHJlY2VpdmVkIGZyb20sIG9yICVOVUxMXG4gICogQHNrYjogdGhlIGJ1ZmZlciB0byByZWNlaXZlLCBvd25lZCBieSBtYWM4MDIxMSBhZnRlciB0aGlzIGNhbGxcbiAgKiBAbGlzdDogdGhlIGRlc3RpbmF0aW9uIGxpc3RcbiAgKi9cbi12b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxuJiM0Mzt2b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuJiM0MztcdFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhLFxuIFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCk7XG4gXG4gLyoqXG5AQCAtNTQxNCwxNCAmIzQzOzU0MTcsMTggQEAgdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbiAgKiBtaXhlZCBmb3IgYSBzaW5nbGUgaGFyZHdhcmUuIE11c3Qgbm90IHJ1biBjb25jdXJyZW50bHkgd2l0aFxuICAqIGllZWU4MDIxMV90eF9zdGF0dXNfc2tiKCkgb3IgaWVlZTgwMjExX3R4X3N0YXR1c19uaSgpLlxuICAqXG4mIzQzOyAqIEZvciBkYXRhIGZyYW1lcywgd2hlbiBoYXJkd2FyZSBoYXMgZG9uZSBhZGRyZXNzIHRyYW5zbGF0aW9uLCBhIGxpbmsgc3RhdGlvblxuJiM0MzsgKiBoYXMgdG8gYmUgcHJvdmlkZWQgYW5kIHRoZSBmcmVxdWVuY3kgaW5mb3JtYXRpb24gbWF5IGJlIHNraXBwZWQuXG4mIzQzOyAqXG4gICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIEJIcyBkaXNhYmxlZC5cbiAgKlxuICAqIEBodzogdGhlIGhhcmR3YXJlIHRoaXMgZnJhbWUgY2FtZSBpbiBvblxuLSAqIEBzdGE6IHRoZSBzdGF0aW9uIHRoZSBmcmFtZSB3YXMgcmVjZWl2ZWQgZnJvbSwgb3IgJU5VTExcbiYjNDM7ICogQGxpbmtfc3RhOiB0aGUgbGluayBzdGF0aW9uIHRoZSBkYXRhIGZyYW1lIHdhcyByZWNlaXZlZCBmcm9tLCBvciAlTlVMTFxuICAqIEBza2I6IHRoZSBidWZmZXIgdG8gcmVjZWl2ZSwgb3duZWQgYnkgbWFjODAyMTEgYWZ0ZXIgdGhpcyBjYWxsXG4gICogQG5hcGk6IHRoZSBOQVBJIGNvbnRleHRcbiAgKi9cbi12b2lkIGllZWU4MDIxMV9yeF9uYXBpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxuJiM0Mzt2b2lkIGllZWU4MDIxMV9yeF9uYXBpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuJiM0MztcdFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhLFxuIFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKTtcbiBcbiAvKipcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaFxuaW5kZXggMDIwMzg3ZDc2NDEyMi4uNDY1M2Y4ZjI2ZWU3MCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmhcbkBAIC0zMTg1LDYgJiM0MzszMTg1LDExIEBAIGVudW0gbmw4MDIxMV9jb21tYW5kcyB7XG4gICpcdFRoZSBhZ2dyZWdhdGVkIG1lc3NhZ2UgYWx3YXlzIHByZWNlZGVzIHRoZSBwZXItbGluayBtZXNzYWdlcyBmb3IgdGhlXG4gICpcdHNhbWUgc3RhdGlvbiB3aXRoaW4gYSBkdW1wIHNlcXVlbmNlLlxuICAqXG4mIzQzOyAqIEBOTDgwMjExX0FUVFJfRlJBTUVfQ01EX05PX1NUQTogVmFsaWQgZm9yIE5MODAyMTFfQ01EX0ZSQU1FIHRvIGRlbm90ZSB0aGF0XG4mIzQzOyAqXHR0aGUga2VybmVsIGhhZCBubyBzdGF0aW9uIGZvciBhIHJlY2VpdmVkIGZyYW1lIG9yIHNob3VsZCBub3QgdXNlIGFcbiYjNDM7ICpcdGtub3duIHN0YXRpb24gdG8gdHJhbnNtaXQgYSBmcmFtZS4gVGhpcyBpcyByZWxldmFudCB0byBrbm93IHdoZXRoZXJcbiYjNDM7ICpcdE1MRCBhZGRyZXNzIHRyYW5zbGF0aW9uIGhhcHBlbmVkIG9yIHRvIGRpc2FibGUgaXQgd2hlbiBzZW5kaW5nIGEgZnJhbWUuXG4mIzQzOyAqXG4gICogQE5VTV9OTDgwMjExX0FUVFI6IHRvdGFsIG51bWJlciBvZiBubDgwMjExX2F0dHJzIGF2YWlsYWJsZVxuICAqIEBOTDgwMjExX0FUVFJfTUFYOiBoaWdoZXN0IGF0dHJpYnV0ZSBudW1iZXIgY3VycmVudGx5IGRlZmluZWRcbiAgKiBAX19OTDgwMjExX0FUVFJfQUZURVJfTEFTVDogaW50ZXJuYWwgdXNlXG5AQCAtMzc4NSw2ICYjNDM7Mzc5MCw4IEBAIGVudW0gbmw4MDIxMV9hdHRycyB7XG4gXG4gXHROTDgwMjExX0FUVFJfU1RBX0RVTVBfTElOS19TVEFUUyxcbiBcbiYjNDM7XHROTDgwMjExX0FUVFJfRlJBTUVfQ01EX05PX1NUQSxcbiYjNDM7XG4gXHQvKiBhZGQgYXR0cmlidXRlcyBoZXJlLCB1cGRhdGUgdGhlIHBvbGljeSBpbiBubDgwMjExLmMgKi9cbiBcbiBcdF9fTkw4MDIxMV9BVFRSX0FGVEVSX0xBU1QsXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2FnZy10eC5jIGIvbmV0L21hYzgwMjExL2FnZy10eC5jXG5pbmRleCA0ODMzYjQ2NzcwYjYyLi5kZDhhMTFlZjZlNTJiIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2FnZy10eC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvYWdnLXR4LmNcbkBAIC05OCw3ICYjNDM7OTgsNyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9hZGRiYV9yZXF1ZXN0KHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1MTYgdGlkLFxuIFx0aWYgKHN0YS1cdTAwM2VzdGEuZGVmbGluay5oZV9jYXAuaGFzX2hlKVxuIFx0XHRpZWVlODAyMTFfYWRkX2FkZGJhZXh0KHNrYiwgMCwgYWdnX3NpemUpO1xuIFxuLVx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgdGlkLCAtMSk7XG4mIzQzO1x0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgTlVMTCwgdGlkLCAtMSk7XG4gfVxuIFxuIHZvaWQgaWVlZTgwMjExX3NlbmRfYmFyKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHU4ICpyYSwgdTE2IHRpZCwgdTE2IHNzbilcbkBAIC0xMjcsNyAmIzQzOzEyNyw3IEBAIHZvaWQgaWVlZTgwMjExX3NlbmRfYmFyKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHU4ICpyYSwgdTE2IHRpZCwgdTE2IHNzbilcbiBcbiBcdElFRUU4MDIxMV9TS0JfQ0Ioc2tiKS1cdTAwM2VmbGFncyB8PSBJRUVFODAyMTFfVFhfSU5URkxfRE9OVF9FTkNSWVBUIHxcbiBcdFx0XHRcdFx0SUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTO1xuLVx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgdGlkLCAtMSk7XG4mIzQzO1x0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgTlVMTCwgdGlkLCAtMSk7XG4gfVxuIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3NlbmRfYmFyKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvYXAuYyBiL25ldC9tYWM4MDIxMS9hcC5jXG5pbmRleCBlN2FjOTljNWEyMmViLi5mZTI1NTg5MWMzNWYwIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2FwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9hcC5jXG5AQCAtODIsOSAmIzQzOzgyLDYgQEAgaWVlZTgwMjExX3J4X2VtbF9vcF9tb2RlX25vdGlmKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0aWYgKCFpZnRfZXh0X2NhcGEpXG4gXHRcdHJldHVybjtcbiBcbi1cdGlmICghc3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQpXG4tXHRcdHJldHVybjtcbi1cbiBcdHN0YSA9IHN0YV9pbmZvX2dldF9ic3Moc2RhdGEsIG1nbXQtXHUwMDNlc2EpO1xuIFx0aWYgKCFzdGEpXG4gXHRcdHJldHVybjtcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaHQuYyBiL25ldC9tYWM4MDIxMS9odC5jXG5pbmRleCBlMWUxYjdmODJmM2ZlLi5jNWMyMTEzZmE0Zjc5IDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2h0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9odC5jXG5AQCAtNTQ1LDcgJiM0Mzs1NDUsNyBAQCBpbnQgaWVlZTgwMjExX3NlbmRfc21wc19hY3Rpb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRpbmZvLVx1MDAzZXN0YXR1c19kYXRhID0gSUVFRTgwMjExX1NUQVRVU19UWVBFX1NNUFMgfFxuIFx0XHRcdCAgICB1MTZfZW5jb2RlX2JpdHMoc3RhdHVzX2xpbmtfaWQgXHUwMDNjXHUwMDNjIDIgfCBzbXBzLFxuIFx0XHRcdFx0XHQgICAgSUVFRTgwMjExX1NUQVRVU19TVUJEQVRBX01BU0spO1xuLVx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgNywgbGlua19pZCk7XG4mIzQzO1x0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgTlVMTCwgNywgbGlua19pZCk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmggYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxuaW5kZXggYTFlZjg4ZmU4NDZkZC4uMzhkODZiMGExMGY1YSAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxuQEAgLTI0NjYsNyAmIzQzOzI0NjYsOCBAQCB2b2lkIGllZWU4MDIxMV94bWl0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHQgICAgc3RydWN0IHN0YV9pbmZvICpzdGEsIHN0cnVjdCBza19idWZmICpza2IpO1xuIFxuIHZvaWQgX19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLVx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCB0aWQsIGludCBsaW5rX2lkLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcbiYjNDM7XHRcdFx0XHQgaW50IHRpZCwgaW50IGxpbmtfaWQsXG4gXHRcdFx0XHQgZW51bSBubDgwMjExX2JhbmQgYmFuZCk7XG4gXG4gc3RhdGljIGlubGluZSBib29sIGllZWU4MDIxMV9yZXF1aXJlX2VuY3J5cHRlZF9hc3NvYyhfX2xlMTYgZmMsXG5AQCAtMjQ4NiwxOCAmIzQzOzI0ODcsMjAgQEAgaWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0XHQgIGVudW0gbmw4MDIxMV9iYW5kIGJhbmQpXG4ge1xuIFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0X19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHNkYXRhLCBza2IsIHRpZCwgLTEsIGJhbmQpO1xuJiM0MztcdF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzZGF0YSwgc2tiLCBFUlJfUFRSKC1FTk9FTlQpLFxuJiM0MztcdFx0XHRcdCAgICB0aWQsIC0xLCBiYW5kKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiB2b2lkIGllZWU4MDIxMV90eF9za2JfdGlkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLVx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRpZCwgaW50IGxpbmtfaWQpO1xuJiM0MztcdFx0XHQgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxuJiM0MztcdFx0XHQgIGludCB0aWQsIGludCBsaW5rX2lkKTtcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX3R4X3NrYihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdC8qIFNlbmQgYWxsIGludGVybmFsIG1nbXQgZnJhbWVzIG9uIFZPLiBBY2NvcmRpbmdseSBzZXQgVElEIHRvIDcuICovXG4tXHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCA3LCAtMSk7XG4mIzQzO1x0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgTlVMTCwgNywgLTEpO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWZhY2UuYyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jXG5pbmRleCA0MzQ2MGE3MDVhNmJkLi5hMGIyMTRkYmI4YWY4IDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2lmYWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jXG5AQCAtMTY3MywxMSAmIzQzOzE2NzMsOCBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfaWZhY2VfcHJvY2Vzc19za2Ioc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4gXHRcdFx0XHRicmVhaztcbiBcbiBcdFx0XHRzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcbi1cdFx0XHRpZiAoIXN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkKVxuLVx0XHRcdFx0bGlua19zdGEgPSBcdTAwMjZzdGEtXHUwMDNlZGVmbGluaztcbi1cdFx0XHRlbHNlXG4tXHRcdFx0XHRsaW5rX3N0YSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoc3RhLVx1MDAzZWxpbmtbc3RhdHVzLVx1MDAzZWxpbmtfaWRdLFxuLVx0XHRcdFx0XHRcdFx0bG9ja2RlcF9pc19oZWxkKFx1MDAyNmxvY2FsLVx1MDAzZWh3LndpcGh5LVx1MDAzZW10eCkpO1xuJiM0MztcdFx0XHRsaW5rX3N0YSA9IHdpcGh5X2RlcmVmZXJlbmNlKGxvY2FsLVx1MDAzZWh3LndpcGh5LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIHN0YS1cdTAwM2VsaW5rW3N0YXR1cy1cdTAwM2VsaW5rX2lkXSk7XG4gXHRcdFx0aWYgKGxpbmtfc3RhKVxuIFx0XHRcdFx0aWVlZTgwMjExX2h0X2hhbmRsZV9jaGFud2lkdGhfbm90aWYobG9jYWwsIHNkYXRhLCBzdGEsXG4gXHRcdFx0XHRcdFx0XHRcdCAgICBsaW5rX3N0YSwgY2hhbndpZHRoLFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tbG1lLmMgYi9uZXQvbWFjODAyMTEvbWxtZS5jXG5pbmRleCBmNTExNjdmMGZjNDZkLi4zNjE3NzVmYjkzMWVjIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL21sbWUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL21sbWUuY1xuQEAgLTExODMxLDEyICYjNDM7MTE4MzEsMTAgQEAgdm9pZCBpZWVlODAyMTFfc3RhX3J4X3F1ZXVlZF9mcmFtZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdHJ4X3N0YXR1cyA9IChzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqKSBza2ItXHUwMDNlY2I7XG4gXHRmYyA9IGxlMTZfdG9fY3B1KG1nbXQtXHUwMDNlZnJhbWVfY29udHJvbCk7XG4gXG4tXHRpZiAocnhfc3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQpIHtcbi1cdFx0bGluayA9IHNkYXRhX2RlcmVmZXJlbmNlKHNkYXRhLVx1MDAzZWxpbmtbcnhfc3RhdHVzLVx1MDAzZWxpbmtfaWRdLFxuLVx0XHRcdFx0XHQgc2RhdGEpO1xuLVx0XHRpZiAoIWxpbmspXG4tXHRcdFx0cmV0dXJuO1xuLVx0fVxuJiM0MztcdGxpbmsgPSBzZGF0YV9kZXJlZmVyZW5jZShzZGF0YS1cdTAwM2VsaW5rW3J4X3N0YXR1cy1cdTAwM2VsaW5rX2lkXSxcbiYjNDM7XHRcdFx0XHQgc2RhdGEpO1xuJiM0MztcdGlmICghbGluaylcbiYjNDM7XHRcdHJldHVybjtcbiBcbiBcdHN3aXRjaCAoZmMgXHUwMDI2IElFRUU4MDIxMV9GQ1RMX1NUWVBFKSB7XG4gXHRjYXNlIElFRUU4MDIxMV9TVFlQRV9CRUFDT046XG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL29mZmNoYW5uZWwuYyBiL25ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmNcbmluZGV4IDJiY2ViNzM3MTdjNjYuLjM4MzRmNTk2YWYxNzggMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jXG5AQCAtODU2LDggJiM0Mzs4NTYsMTAgQEAgaW50IGllZWU4MDIxMV9tZ210X3R4KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXHRcdFx0bmVlZF9vZmZjaGFuID0gdHJ1ZTtcbiBcbiBcdFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0XHRzdGEgPSBzdGFfaW5mb19nZXRfYnNzKHNkYXRhLCBtZ210LVx1MDAzZWRhKTtcbi1cdFx0bWxvX3N0YSA9IHN0YSBcdTAwMjZcdTAwMjYgc3RhLVx1MDAzZXN0YS5tbG87XG4mIzQzO1x0XHRpZiAoIXBhcmFtcy1cdTAwM2Vub19zdGEpIHtcbiYjNDM7XHRcdFx0c3RhID0gc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgbWdtdC1cdTAwM2VkYSk7XG4mIzQzO1x0XHRcdG1sb19zdGEgPSBzdGEgXHUwMDI2XHUwMDI2IHN0YS1cdTAwM2VzdGEubWxvO1xuJiM0MztcdFx0fVxuIFxuIFx0XHRpZiAoIWllZWU4MDIxMV9pc19hY3Rpb24obWdtdC1cdTAwM2VmcmFtZV9jb250cm9sKSB8fFxuIFx0XHQgICAgbWdtdC1cdTAwM2V1LmFjdGlvbi5jYXRlZ29yeSA9PSBXTEFOX0NBVEVHT1JZX1BVQkxJQyB8fFxuQEAgLTg4Niw3ICYjNDM7ODg4LDggQEAgaW50IGllZWU4MDIxMV9tZ210X3R4KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXHRcdCAgICAgbG9jYWwtXHUwMDNlb3BzLVx1MDAzZXJlbWFpbl9vbl9jaGFubmVsIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgIG1lbWNtcChzZGF0YS1cdTAwM2V2aWYuY2ZnLmFwX2FkZHIsIG1nbXQtXHUwMDNlYnNzaWQsIEVUSF9BTEVOKSkpIHtcbiBcdFx0XHRuZWVkX29mZmNoYW4gPSB0cnVlO1xuLVx0XHR9IGVsc2UgaWYgKHNkYXRhLVx1MDAzZXUubWdkLmFzc29jaWF0ZWQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHR9IGVsc2UgaWYgKCFwYXJhbXMtXHUwMDNlbm9fc3RhIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICBzZGF0YS1cdTAwM2V1Lm1nZC5hc3NvY2lhdGVkIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgIGV0aGVyX2FkZHJfZXF1YWwoc2RhdGEtXHUwMDNldmlmLmNmZy5hcF9hZGRyLCBtZ210LVx1MDAzZWRhKSkge1xuIFx0XHRcdHN0YSA9IHN0YV9pbmZvX2dldF9ic3Moc2RhdGEsIG1nbXQtXHUwMDNlZGEpO1xuIFx0XHRcdG1sb19zdGEgPSBzdGEgXHUwMDI2XHUwMDI2IHN0YS1cdTAwM2VzdGEubWxvO1xuQEAgLTEwMzEsNyAmIzQzOzEwMzQsOSBAQCBpbnQgaWVlZTgwMjExX21nbXRfdHgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbiBcdH1cbiBcbiBcdGlmICghbmVlZF9vZmZjaGFuKSB7XG4tXHRcdGllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIDcsIGxpbmtfaWQpO1xuJiM0MztcdFx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYixcbiYjNDM7XHRcdFx0XHQgICAgIHBhcmFtcy1cdTAwM2Vub19zdGEgPyBzdGEgOiBFUlJfUFRSKC1FTk9FTlQpLFxuJiM0MztcdFx0XHRcdCAgICAgNywgbGlua19pZCk7XG4gXHRcdHJldCA9IDA7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcnguYyBiL25ldC9tYWM4MDIxMS9yeC5jXG5pbmRleCA1ZTI2YmU4ZTI3ZDhmLi5lZDVhMmUwNTkwNzU3IDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL3J4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9yeC5jXG5AQCAtMjIyLDQzICYjNDM7MjIyLDIxIEBAIGllZWU4MDIxMV9yeF9yYWRpb3RhcF9oZHJsZW4oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi1cdFx0XHRcdFx0ICAgaW50IGxpbmtfaWQsXG4tXHRcdFx0XHRcdCAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxuJiM0MztcdFx0XHRcdFx0ICAgc3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhLFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcbi1cbi1cdGlmIChsaW5rX2lkIFx1MDAzZT0gMCkge1xuLVx0XHRzdGF0dXMtXHUwMDNlbGlua192YWxpZCA9IDE7XG4tXHRcdHN0YXR1cy1cdTAwM2VsaW5rX2lkID0gbGlua19pZDtcbi1cdH0gZWxzZSB7XG4tXHRcdHN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkID0gMDtcbi1cdH1cbi1cbiBcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNnNkYXRhLVx1MDAzZXNrYl9xdWV1ZSwgc2tiKTtcbiBcdHdpcGh5X3dvcmtfcXVldWUoc2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlaHcud2lwaHksIFx1MDAyNnNkYXRhLVx1MDAzZXdvcmspO1xuLVx0aWYgKHN0YSkge1xuLVx0XHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGFfaW5mbztcbi1cbi1cdFx0aWYgKGxpbmtfaWQgXHUwMDNlPSAwKSB7XG4tXHRcdFx0bGlua19zdGFfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZShzdGEtXHUwMDNlbGlua1tsaW5rX2lkXSk7XG4tXHRcdFx0aWYgKCFsaW5rX3N0YV9pbmZvKVxuLVx0XHRcdFx0cmV0dXJuO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdGxpbmtfc3RhX2luZm8gPSBcdTAwMjZzdGEtXHUwMDNlZGVmbGluaztcbi1cdFx0fVxuLVxuLVx0XHRsaW5rX3N0YV9pbmZvLVx1MDAzZXJ4X3N0YXRzLnBhY2tldHMmIzQzOyYjNDM7O1xuLVx0fVxuJiM0MztcdGlmIChsaW5rX3N0YSlcbiYjNDM7XHRcdGxpbmtfc3RhLVx1MDAzZXJ4X3N0YXRzLnBhY2tldHMmIzQzOyYjNDM7O1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLVx0XHRcdFx0XHQgaW50IGxpbmtfaWQsXG4tXHRcdFx0XHRcdCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcbiYjNDM7XHRcdFx0XHRcdCBzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEsXG4gXHRcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IDA7XG4tXHRfX2llZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIGxpbmtfaWQsIHN0YSwgc2tiKTtcbiYjNDM7XHRfX2llZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIGxpbmtfc3RhLCBza2IpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfaGFuZGxlX211X21pbW9fbW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuQEAgLTMwMSw3ICYjNDM7Mjc5LDcgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX2hhbmRsZV9tdV9taW1vX21vbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdGlmICghc2tiKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCAtMSwgTlVMTCwgc2tiKTtcbiYjNDM7XHRpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCBOVUxMLCBza2IpO1xuIH1cbiBcbiAvKlxuQEAgLTE0OTgsNyAmIzQzOzE0NzYsNyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfcmVvcmRlcl9hbXBkdShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxuIFx0LyogaWYgdGhpcyBtcGR1IGlzIGZyYWdtZW50ZWQgLSB0ZXJtaW5hdGUgcnggYWdncmVnYXRpb24gc2Vzc2lvbiAqL1xuIFx0c2MgPSBsZTE2X3RvX2NwdShoZHItXHUwMDNlc2VxX2N0cmwpO1xuIFx0aWYgKHNjIFx1MDAyNiBJRUVFODAyMTFfU0NUTF9GUkFHKSB7XG4tXHRcdGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2UocngtXHUwMDNlc2RhdGEsIHJ4LVx1MDAzZWxpbmtfaWQsIE5VTEwsIHNrYik7XG4mIzQzO1x0XHRpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHJ4LVx1MDAzZXNkYXRhLCBOVUxMLCBza2IpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG5AQCAtMjUyNCw3ICYjNDM7MjUwMiw3IEBAIGllZWU4MDIxMV9yeF9oX2RlZnJhZ21lbnQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeClcbiBcbiAgb3V0OlxuIFx0aWVlZTgwMjExX2xlZF9yeChyeC1cdTAwM2Vsb2NhbCk7XG4tXHRpZiAocngtXHUwMDNlc3RhKVxuJiM0MztcdGlmIChyeC1cdTAwM2VsaW5rX3N0YSlcbiBcdFx0cngtXHUwMDNlbGlua19zdGEtXHUwMDNlcnhfc3RhdHMucGFja2V0cyYjNDM7JiM0Mzs7XG4gXHRyZXR1cm4gUlhfQ09OVElOVUU7XG4gfVxuQEAgLTMzMzUsOCAmIzQzOzMzMTMsOCBAQCBpZWVlODAyMTFfcnhfaF9kYXRhKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpXG4gXHRcdCAgICAodGYtXHUwMDNlYWN0aW9uX2NvZGUgPT0gV0xBTl9URExTX0NIQU5ORUxfU1dJVENIX1JFUVVFU1QgfHxcbiBcdFx0ICAgICB0Zi1cdTAwM2VhY3Rpb25fY29kZSA9PSBXTEFOX1RETFNfQ0hBTk5FTF9TV0lUQ0hfUkVTUE9OU0UpKSB7XG4gXHRcdFx0cngtXHUwMDNlc2tiLVx1MDAzZXByb3RvY29sID0gY3B1X3RvX2JlMTYoRVRIX1BfVERMUyk7XG4tXHRcdFx0X19pZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC1cdTAwM2VsaW5rX2lkLFxuLVx0XHRcdFx0XHRcdCAgICAgICByeC1cdTAwM2VzdGEsIHJ4LVx1MDAzZXNrYik7XG4mIzQzO1x0XHRcdF9faWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgcngtXHUwMDNlbGlua19zdGEsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICByeC1cdTAwM2Vza2IpO1xuIFx0XHRcdHJldHVybiBSWF9RVUVVRUQ7XG4gXHRcdH1cbiBcdH1cbkBAIC0zOTkxLDcgJiM0MzszOTY5LDcgQEAgaWVlZTgwMjExX3J4X2hfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpXG4gXHRyZXR1cm4gUlhfUVVFVUVEO1xuIFxuICBxdWV1ZTpcbi1cdGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIHJ4LVx1MDAzZWxpbmtfaWQsIHJ4LVx1MDAzZXN0YSwgcngtXHUwMDNlc2tiKTtcbiYjNDM7XHRpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC1cdTAwM2VsaW5rX3N0YSwgcngtXHUwMDNlc2tiKTtcbiBcdHJldHVybiBSWF9RVUVVRUQ7XG4gfVxuIFxuQEAgLTQwMDUsNiAmIzQzOzM5ODMsNyBAQCBpZWVlODAyMTFfcnhfaF91c2Vyc3BhY2VfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxuIFx0XHQubGVuID0gcngtXHUwMDNlc2tiLVx1MDAzZWxlbixcbiBcdFx0LmxpbmtfaWQgPSByeC1cdTAwM2VsaW5rX2lkLFxuIFx0XHQuaGF2ZV9saW5rX2lkID0gcngtXHUwMDNlbGlua19pZCBcdTAwM2U9IDAsXG4mIzQzO1x0XHQubm9fc3RhID0gIXJ4LVx1MDAzZXN0YSxcbiBcdH07XG4gXG4gXHQvKiBza2lwIGtub3duLWJhZCBhY3Rpb24gZnJhbWVzIGFuZCByZXR1cm4gdGhlbSBpbiB0aGUgbmV4dCBoYW5kbGVyICovXG5AQCAtNDEyNyw3ICYjNDM7NDEwNiw3IEBAIGllZWU4MDIxMV9yeF9oX2FjdGlvbl9yZXR1cm4oc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeClcbiBcdFx0XHRcdFx0bG9jYWwtXHUwMDNlaHcub2ZmY2hhbm5lbF90eF9od19xdWV1ZTtcbiBcdFx0fVxuIFxuLVx0XHRfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQocngtXHUwMDNlc2RhdGEsIG5za2IsIDcsIC0xLFxuJiM0MztcdFx0X19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHJ4LVx1MDAzZXNkYXRhLCBuc2tiLCByeC1cdTAwM2VzdGEsIDcsIC0xLFxuIFx0XHRcdFx0XHQgICAgc3RhdHVzLVx1MDAzZWJhbmQpO1xuIFx0fVxuIFxuQEAgLTQxNDcsNyAmIzQzOzQxMjYsNyBAQCBpZWVlODAyMTFfcnhfaF9leHQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeClcbiBcdFx0cmV0dXJuIFJYX0RST1BfVV9VTkVYUEVDVEVEX0VYVF9GUkFNRTtcbiBcbiBcdC8qIGZvciBub3cgb25seSBiZWFjb25zIGFyZSBleHQsIHNvIHF1ZXVlIHRoZW0gKi9cbi1cdGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIHJ4LVx1MDAzZWxpbmtfaWQsIHJ4LVx1MDAzZXN0YSwgcngtXHUwMDNlc2tiKTtcbiYjNDM7XHRpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC1cdTAwM2VsaW5rX3N0YSwgcngtXHUwMDNlc2tiKTtcbiBcbiBcdHJldHVybiBSWF9RVUVVRUQ7XG4gfVxuQEAgLTQyMDQsNyAmIzQzOzQxODMsNyBAQCBpZWVlODAyMTFfcnhfaF9tZ210KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpXG4gXHRcdHJldHVybiBSWF9EUk9QX1VfVU5IQU5ETEVEX01HTVRfU1RZUEU7XG4gXHR9XG4gXG4tXHRpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC1cdTAwM2VsaW5rX2lkLCByeC1cdTAwM2VzdGEsIHJ4LVx1MDAzZXNrYik7XG4mIzQzO1x0aWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgcngtXHUwMDNlbGlua19zdGEsIHJ4LVx1MDAzZXNrYik7XG4gXG4gXHRyZXR1cm4gUlhfUVVFVUVEO1xuIH1cbkBAIC00MjQ4LDEyICYjNDM7NDIyNywyOCBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfaGFuZGxlcnMoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZyeC1cdTAwM2Vsb2NhbC1cdTAwM2VyeF9wYXRoX2xvY2spO1xuIFxuIFx0d2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKGZyYW1lcykpKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4mIzQzO1xuIFx0XHQvKlxuLVx0XHQgKiBhbGwgdGhlIG90aGVyIGZpZWxkcyBhcmUgdmFsaWQgYWNyb3NzIGZyYW1lc1xuLVx0XHQgKiB0aGF0IGJlbG9uZyB0byBhbiBhTVBEVSBzaW5jZSB0aGV5IGFyZSBvbiB0aGVcbi1cdFx0ICogc2FtZSBUSUQgZnJvbSB0aGUgc2FtZSBzdGF0aW9uXG4mIzQzO1x0XHQgKiBNb3N0IGZpZWxkcyBhcmUgdmFsaWQgYWNyb3NzIGZyYW1lcy4gSG93ZXZlcixcbiYjNDM7XHRcdCAqIGluIHRoZSBjYXNlIG9mIHJlb3JkZXJpbmcgZnJhbWVzIG1heSBoYXZlIGFycml2ZWRcbiYjNDM7XHRcdCAqIG9uIGRpZmZlcmVudCBsaW5rcywgc28gYWRqdXN0IHRoZSBsaW5rX2lkLCBsaW5rXG4mIzQzO1x0XHQgKiBhbmQgbGlua19zdGEgYWNjb3JkaW5nbHkuXG4gXHRcdCAqL1xuIFx0XHRyeC1cdTAwM2Vza2IgPSBza2I7XG4mIzQzO1x0XHRpZiAoaWVlZTgwMjExX3ZpZl9pc19tbGQoXHUwMDI2cngtXHUwMDNlc2RhdGEtXHUwMDNldmlmKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICB1bmxpa2VseShyeC1cdTAwM2VsaW5rX2lkICE9IHN0YXR1cy1cdTAwM2VsaW5rX2lkKSkge1xuJiM0MztcdFx0XHRpZiAocngtXHUwMDNlc3RhKSB7XG4mIzQzO1x0XHRcdFx0cngtXHUwMDNlbGlua19zdGEgPVxuJiM0MztcdFx0XHRcdFx0cmN1X2RlcmVmZXJlbmNlKHJ4LVx1MDAzZXN0YS1cdTAwM2VsaW5rW3J4LVx1MDAzZWxpbmtfaWRdKTtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0LyogTGluayBnb3QgZGlzYWJsZWQsIGp1c3QgdXNlIGRlZmxpbmsgKi9cbiYjNDM7XHRcdFx0XHRpZiAoIXJ4LVx1MDAzZWxpbmtfc3RhKVxuJiM0MztcdFx0XHRcdFx0cngtXHUwMDNlbGlua19zdGEgPSBcdTAwMjZyeC1cdTAwM2VzdGEtXHUwMDNlZGVmbGluaztcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRyeC1cdTAwM2VsaW5rX2lkID0gc3RhdHVzLVx1MDAzZWxpbmtfaWQ7XG4mIzQzO1x0XHRcdHJ4LVx1MDAzZWxpbmsgPSByY3VfZGVyZWZlcmVuY2UocngtXHUwMDNlc2RhdGEtXHUwMDNlbGlua1tzdGF0dXMtXHUwMDNlbGlua19pZF0pO1xuJiM0MztcdFx0fVxuIFxuIFx0XHRpZiAoV0FSTl9PTl9PTkNFKCFyeC1cdTAwM2VsaW5rKSkge1xuIFx0XHRcdHJlcyA9IFJYX0RST1BfVV9OT19MSU5LO1xuQEAgLTQzMjMsNyAmIzQzOzQzMTgsMzQgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX2ludm9rZV9yeF9oYW5kbGVycyhzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxuIHN0YXRpYyBib29sXG4gaWVlZTgwMjExX3J4X2lzX3ZhbGlkX3N0YV9saW5rX2lkKHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHU4IGxpbmtfaWQpXG4ge1xuLVx0cmV0dXJuICEhKHN0YS1cdTAwM2V2YWxpZF9saW5rcyBcdTAwMjYgQklUKGxpbmtfaWQpKTtcbiYjNDM7XHRpZiAoc3RhLVx1MDAzZW1sbylcbiYjNDM7XHRcdHJldHVybiBzdGEtXHUwMDNldmFsaWRfbGlua3MgXHUwMDI2IEJJVChsaW5rX2lkKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHN0YS1cdTAwM2VkZWZsaW5rLmxpbmtfaWQgPT0gbGlua19pZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgaWVlZTgwMjExX3J4X2RhdGFfc2V0X2xpbmtfc3RhKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXG4mIzQzO1x0XHRcdFx0XHQgICBzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YTtcbiYjNDM7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRSghbGlua19zdGEpIHx8XG4mIzQzO1x0ICAgICFpZWVlODAyMTFfcnhfaXNfdmFsaWRfc3RhX2xpbmtfaWQoXHUwMDI2bGlua19zdGEtXHUwMDNlc3RhLVx1MDAzZXN0YSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBsaW5rX3N0YS1cdTAwM2VsaW5rX2lkKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0c3RhID0gbGlua19zdGEtXHUwMDNlc3RhO1xuJiM0MztcbiYjNDM7XHRyeC1cdTAwM2VzdGEgPSBzdGE7XG4mIzQzO1x0cngtXHUwMDNlbG9jYWwgPSBzdGEtXHUwMDNlc2RhdGEtXHUwMDNlbG9jYWw7XG4mIzQzO1x0cngtXHUwMDNlbGluayA9IHJjdV9kZXJlZmVyZW5jZShzdGEtXHUwMDNlc2RhdGEtXHUwMDNlbGlua1tsaW5rX3N0YS1cdTAwM2VsaW5rX2lkXSk7XG4mIzQzO1x0aWYgKCFyeC1cdTAwM2VsaW5rKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyeC1cdTAwM2VsaW5rX2lkID0gcngtXHUwMDNlbGluay1cdTAwM2VsaW5rX2lkO1xuJiM0MztcdHJ4LVx1MDAzZWxpbmtfc3RhID0gbGlua19zdGE7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGluayhzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxuQEAgLTQzNjAsMTEgJiM0Mzs0MzgyLDEzIEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcbiBcbiBcdGlmIChsaW5rX2lkIFx1MDAzYyAwKSB7XG4gXHRcdGlmIChpZWVlODAyMTFfdmlmX2lzX21sZChcdTAwMjZyeC1cdTAwM2VzZGF0YS1cdTAwM2V2aWYpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgc3RhIFx1MDAyNlx1MDAyNiAhc3RhLVx1MDAzZXN0YS52YWxpZF9saW5rcylcbiYjNDM7XHRcdCAgICBzdGEgXHUwMDI2XHUwMDI2ICFzdGEtXHUwMDNlc3RhLnZhbGlkX2xpbmtzKSB7XG4gXHRcdFx0cngtXHUwMDNlbGluayA9XG4gXHRcdFx0XHRyY3VfZGVyZWZlcmVuY2UocngtXHUwMDNlc2RhdGEtXHUwMDNlbGlua1tzdGEtXHUwMDNlZGVmbGluay5saW5rX2lkXSk7XG4tXHRcdGVsc2VcbiYjNDM7XHRcdFx0cngtXHUwMDNlbGlua19zdGEgPSByY3VfZGVyZWZlcmVuY2UocngtXHUwMDNlc3RhLVx1MDAzZWxpbmtbbGlua19pZF0pO1xuJiM0MztcdFx0fSBlbHNlIHtcbiBcdFx0XHRyeC1cdTAwM2VsaW5rID0gXHUwMDI2cngtXHUwMDNlc2RhdGEtXHUwMDNlZGVmbGluaztcbiYjNDM7XHRcdH1cbiBcdH0gZWxzZSBpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9saW5rKHJ4LCBsaW5rX2lkKSkge1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5AQCAtNDM4Nyw3ICYjNDM7NDQxMSw3IEBAIHZvaWQgaWVlZTgwMjExX3JlbGVhc2VfcmVvcmRlcl90aW1lb3V0KHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBpbnQgdGlkKVxuIFx0c3RydWN0IHRpZF9hbXBkdV9yeCAqdGlkX2FnZ19yeDtcbiBcdGludCBsaW5rX2lkID0gLTE7XG4gXG4tXHQvKiBGSVhNRTogc3RhdGlzdGljcyB3b24mIzM5O3QgYmUgcmlnaHQgd2l0aCB0aGlzICovXG4mIzQzO1x0LyogTk9URTogdGhlIGNvcnJlY3QgbGluayBTVEEgZm9yIHRoZSBmcmFtZSBpcyBzZXQgbGF0ZXIgKi9cbiBcdGlmIChzdGEtXHUwMDNlc3RhLnZhbGlkX2xpbmtzKVxuIFx0XHRsaW5rX2lkID0gZmZzKHN0YS1cdTAwM2VzdGEudmFsaWRfbGlua3MpIC0gMTtcbiBcbkBAIC00OTE0LDIwICYjNDM7NDkzOCwxNCBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfODAyMyhzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxuIHtcbiBcdHN0cnVjdCBpZWVlODAyMTFfc3RhX3J4X3N0YXRzICpzdGF0cztcbiBcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0IocngtXHUwMDNlc2tiKTtcbi1cdHN0cnVjdCBzdGFfaW5mbyAqc3RhID0gcngtXHUwMDNlc3RhO1xuLVx0c3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhO1xuJiM0MztcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSA9IHJ4LVx1MDAzZWxpbmtfc3RhO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJ4LVx1MDAzZXNrYjtcbiBcdHZvaWQgKnNhID0gc2tiLVx1MDAzZWRhdGEgJiM0MzsgRVRIX0FMRU47XG4gXHR2b2lkICpkYSA9IHNrYi1cdTAwM2VkYXRhO1xuIFxuLVx0aWYgKHJ4LVx1MDAzZWxpbmtfaWQgXHUwMDNlPSAwKSB7XG4tXHRcdGxpbmtfc3RhID0gcmN1X2RlcmVmZXJlbmNlKHN0YS1cdTAwM2VsaW5rW3J4LVx1MDAzZWxpbmtfaWRdKTtcbi1cdFx0aWYgKFdBUk5fT05fT05DRSghbGlua19zdGEpKSB7XG4tXHRcdFx0ZGV2X2tmcmVlX3NrYihyeC1cdTAwM2Vza2IpO1xuLVx0XHRcdHJldHVybjtcbi1cdFx0fVxuLVx0fSBlbHNlIHtcbi1cdFx0bGlua19zdGEgPSBcdTAwMjZzdGEtXHUwMDNlZGVmbGluaztcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKCFsaW5rX3N0YSkpIHtcbiYjNDM7XHRcdGRldl9rZnJlZV9za2IocngtXHUwMDNlc2tiKTtcbiYjNDM7XHRcdHJldHVybjtcbiBcdH1cbiBcbiBcdHN0YXRzID0gXHUwMDI2bGlua19zdGEtXHUwMDNlcnhfc3RhdHM7XG5AQCAtNTE1NCw2ICYjNDM7NTE3Miw5IEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9pbnZva2VfZmFzdF9yeChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxuIFx0XHRnb3RvIGRyb3A7XG4gXHR9XG4gXG4mIzQzO1x0c3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4mIzQzO1x0c3RhdHVzLVx1MDAzZWxpbmtfaWQgPSByeC1cdTAwM2VsaW5rX2lkIFx1MDAzYyAwID8gMCA6IHJ4LVx1MDAzZWxpbmtfaWQ7XG4mIzQzO1xuIFx0aWVlZTgwMjExX3J4XzgwMjMocngsIGZhc3RfcngsIG9yaWdfbGVuKTtcbiBcbiBcdHJldHVybiB0cnVlO1xuQEAgLTUxNzgsNiAmIzQzOzUxOTksNyBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YTtcbiBcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSA9IHJ4LVx1MDAzZWxpbmtfc3RhO1xuIFx0c3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmsgPSByeC1cdTAwM2VsaW5rO1xuJiM0MztcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXM7XG4gXG4gXHRyeC1cdTAwM2Vza2IgPSBza2I7XG4gXG5AQCAtNTIyMSw2ICYjNDM7NTI0Myw5IEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcbiBcdFx0aGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopcngtXHUwMDNlc2tiLVx1MDAzZWRhdGE7XG4gXHR9XG4gXG4mIzQzO1x0c3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHJ4LVx1MDAzZXNrYik7XG4mIzQzO1x0c3RhdHVzLVx1MDAzZWxpbmtfaWQgPSByeC1cdTAwM2VsaW5rX2lkIFx1MDAzYyAwID8gMCA6IHJ4LVx1MDAzZWxpbmtfaWQ7XG4mIzQzO1xuIFx0aWYgKGllZWU4MDIxMV9pc19zMWdfYmVhY29uKGhkci1cdTAwM2VmcmFtZV9jb250cm9sKSkge1xuIFx0XHRpZWVlODAyMTFfaW52b2tlX3J4X2hhbmRsZXJzKHJ4KTtcbiBcdFx0cmV0dXJuIHRydWU7XG5AQCAtNTI1NiwyMiAmIzQzOzUyODEsMTkgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfODAyMyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3B1YnN0YSxcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4ge1xuIFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7XG4tXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2Zhc3RfcnggKmZhc3Rfcng7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgcng7XG4gXHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YTtcbi1cdGludCBsaW5rX2lkID0gLTE7XG4gXG4gXHRtZW1zZXQoXHUwMDI2cngsIDAsIHNpemVvZihyeCkpO1xuIFx0cnguc2tiID0gc2tiO1xuIFx0cngubG9jYWwgPSBsb2NhbDtcbiBcdHJ4Lmxpc3QgPSBsaXN0O1xuLVx0cngubGlua19pZCA9IC0xO1xuIFxuIFx0STgwMl9ERUJVR19JTkMobG9jYWwtXHUwMDNlZG90MTFSZWNlaXZlZEZyYWdtZW50Q291bnQpO1xuIFxuQEAgLTUyNzksMjMgJiM0Mzs1MzAxLDE1IEBAIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J4X2hhbmRsZV84MDIzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuIFx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSlcbiBcdFx0Z290byBkcm9wO1xuIFxuLVx0aWYgKCFwdWJzdGEpXG4mIzQzO1x0aWYgKCFsaW5rX3B1YnN0YSlcbiBcdFx0Z290byBkcm9wO1xuIFxuLVx0aWYgKHN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkKVxuLVx0XHRsaW5rX2lkID0gc3RhdHVzLVx1MDAzZWxpbmtfaWQ7XG4tXG4tXHQvKlxuLVx0ICogVE9ETzogU2hvdWxkIHRoZSBmcmFtZSBiZSBkcm9wcGVkIGlmIHRoZSByaWdodCBsaW5rX2lkIGlzIG5vdFxuLVx0ICogYXZhaWxhYmxlPyBPciBtYXkgYmUgaXQgaXMgZmluZSBpbiB0aGUgY3VycmVudCBmb3JtIHRvIHByb2NlZWQgd2l0aFxuLVx0ICogdGhlIGZyYW1lIHByb2Nlc3NpbmcgYmVjYXVzZSB3aXRoIGZyYW1lIGJlaW5nIGluIDgwMi4zIGZvcm1hdCxcbi1cdCAqIGxpbmtfaWQgaXMgdXNlZCBvbmx5IGZvciBzdGF0cyBwdXJwb3NlIGFuZCB1cGRhdGluZyB0aGUgc3RhdHMgb25cbi1cdCAqIHRoZSBkZWZsaW5rIGlzIGZpbmU/XG4tXHQgKi9cbi1cdHN0YSA9IGNvbnRhaW5lcl9vZihwdWJzdGEsIHN0cnVjdCBzdGFfaW5mbywgc3RhKTtcbi1cdGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X3N0YShcdTAwMjZyeCwgc3RhLCBsaW5rX2lkKSlcbiYjNDM7XHRzdGEgPSBjb250YWluZXJfb2YobGlua19wdWJzdGEtXHUwMDNlc3RhLCBzdHJ1Y3Qgc3RhX2luZm8sIHN0YSk7XG4mIzQzO1x0aWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfc3RhKFx1MDAyNnJ4LCBzdGEsIGxpbmtfcHVic3RhLVx1MDAzZWxpbmtfaWQpKVxuIFx0XHRnb3RvIGRyb3A7XG4gXG4mIzQzO1x0cngubGlua19pZCA9IGxpbmtfcHVic3RhLVx1MDAzZWxpbmtfaWQ7XG4mIzQzO1xuIFx0ZmFzdF9yeCA9IHJjdV9kZXJlZmVyZW5jZShyeC5zdGEtXHUwMDNlZmFzdF9yeCk7XG4gXHRpZiAoIWZhc3RfcngpXG4gXHRcdGdvdG8gZHJvcDtcbkBAIC01MzA3LDU5ICYjNDM7NTMyMSwxOSBAQCBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfODAyMyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcdGRldl9rZnJlZV9za2Ioc2tiKTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgaWVlZTgwMjExX3J4X2Zvcl9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIGNvbnN1bWUpXG4mIzQzO3N0YXRpYyBib29sIGllZWU4MDIxMV9yeF92YWxpZF9mcmVxKGludCBmcmVxLCBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluaylcbiB7XG4tXHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGE7XG4tXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YTtcbi1cdHN0cnVjdCBzdGFfaW5mbyAqc3RhO1xuLVx0aW50IGxpbmtfaWQgPSAtMTtcbi1cbi1cdGlmIChpZWVlODAyMTFfaXNfczFnX2JlYWNvbihoZHItXHUwMDNlZnJhbWVfY29udHJvbCkpIHtcbi1cdFx0aWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfc3RhKHJ4LCBOVUxMLCAtMSkpXG4tXHRcdFx0cmV0dXJuIGZhbHNlO1xuLVxuLVx0XHRyZXR1cm4gaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShyeCwgc2tiLCBjb25zdW1lKTtcbi1cdH1cbiYjNDM7XHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZjtcbiBcbi1cdC8qXG4tXHQgKiBMb29rIHVwIGxpbmsgc3RhdGlvbiBmaXJzdCwgaW4gY2FzZSB0aGVyZSYjMzk7cyBhXG4tXHQgKiBjaGFuY2UgdGhhdCB0aGV5IG1pZ2h0IGhhdmUgYSBsaW5rIGFkZHJlc3MgdGhhdFxuLVx0ICogaXMgaWRlbnRpY2FsIHRvIHRoZSBNTEQgYWRkcmVzcywgdGhhdCB3YXkgd2UmIzM5O2xsXG4tXHQgKiBoYXZlIHRoZSBsaW5rIGluZm9ybWF0aW9uIGlmIG5lZWRlZC5cbi1cdCAqL1xuLVx0bGlua19zdGEgPSBsaW5rX3N0YV9pbmZvX2dldF9ic3MocngtXHUwMDNlc2RhdGEsIGhkci1cdTAwM2VhZGRyMik7XG4tXHRpZiAobGlua19zdGEpIHtcbi1cdFx0c3RhID0gbGlua19zdGEtXHUwMDNlc3RhO1xuLVx0XHRsaW5rX2lkID0gbGlua19zdGEtXHUwMDNlbGlua19pZDtcbi1cdH0gZWxzZSB7XG4tXHRcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcbi1cbi1cdFx0c3RhID0gc3RhX2luZm9fZ2V0X2JzcyhyeC1cdTAwM2VzZGF0YSwgaGRyLVx1MDAzZWFkZHIyKTtcbi1cdFx0aWYgKHN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkKSB7XG4tXHRcdFx0bGlua19pZCA9IHN0YXR1cy1cdTAwM2VsaW5rX2lkO1xuLVx0XHR9IGVsc2UgaWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKFx1MDAyNnJ4LVx1MDAzZXNkYXRhLVx1MDAzZXZpZikgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgc3RhdHVzLVx1MDAzZWZyZXEpIHtcbi1cdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluaztcbi1cdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZjtcbi1cbi1cdFx0XHRmb3JfZWFjaF9saW5rX2RhdGFfcmN1KHJ4LVx1MDAzZXNkYXRhLCBsaW5rKSB7XG4tXHRcdFx0XHRjb25mID0gcmN1X2RlcmVmZXJlbmNlKGxpbmstXHUwMDNlY29uZi1cdTAwM2VjaGFuY3R4X2NvbmYpO1xuLVx0XHRcdFx0aWYgKCFjb25mIHx8ICFjb25mLVx1MDAzZWRlZi5jaGFuKVxuLVx0XHRcdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0XHRcdGlmIChzdGF0dXMtXHUwMDNlZnJlcSA9PSBjb25mLVx1MDAzZWRlZi5jaGFuLVx1MDAzZWNlbnRlcl9mcmVxKSB7XG4tXHRcdFx0XHRcdGxpbmtfaWQgPSBsaW5rLVx1MDAzZWxpbmtfaWQ7XG4tXHRcdFx0XHRcdGJyZWFrO1xuLVx0XHRcdFx0fVxuLVx0XHRcdH1cbi1cdFx0fVxuLVx0fVxuJiM0MztcdGlmICghZnJlcSB8fCBsaW5rLVx1MDAzZXNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX05BTiB8fFxuJiM0MztcdCAgICBsaW5rLVx1MDAzZXNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX05BTl9EQVRBKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEocngsIHN0YSwgbGlua19pZCkpXG4mIzQzO1x0Y29uZiA9IHJjdV9kZXJlZmVyZW5jZShsaW5rLVx1MDAzZWNvbmYtXHUwMDNlY2hhbmN0eF9jb25mKTtcbiYjNDM7XHRpZiAoIWNvbmYgfHwgIWNvbmYtXHUwMDNlZGVmLmNoYW4pXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdHJldHVybiBpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKHJ4LCBza2IsIGNvbnN1bWUpO1xuJiM0MztcdHJldHVybiBmcmVxID09IGNvbmYtXHUwMDNlZGVmLmNoYW4tXHUwMDNlY2VudGVyX2ZyZXE7XG4gfVxuIFxuIC8qXG5AQCAtNTM2NywxOCAmIzQzOzUzNDEsMjAgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX3J4X2Zvcl9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcbiAgKiBiZSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrIHByb3RlY3Rpb24uXG4gICovXG4gc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi1cdFx0XHRcdFx0IHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsXG4mIzQzO1x0XHRcdFx0XHQgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19wdWJzdGEsXG4gXHRcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0XHQgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTtcbi1cdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhO1xuJiM0MztcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7XG4mIzQzO1x0c3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhO1xuJiM0MztcdHN0cnVjdCBzdGFfaW5mbyAqc3RhO1xuIFx0X19sZTE2IGZjO1xuIFx0c3RydWN0IGllZWU4MDIxMV9yeF9kYXRhIHJ4O1xuLVx0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqcHJldjtcbiBcdHN0cnVjdCByaGxpc3RfaGVhZCAqdG1wO1xuJiM0MztcdGJvb2wgcnhfZGF0YV9wZW5kaW5nO1xuIFx0aW50IGVyciA9IDA7XG4gXG4gXHRmYyA9ICgoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItXHUwMDNlZGF0YSktXHUwMDNlZnJhbWVfY29udHJvbDtcbkBAIC01Mzg2LDcgJiM0Mzs1MzYyLDYgQEAgc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcdHJ4LnNrYiA9IHNrYjtcbiBcdHJ4LmxvY2FsID0gbG9jYWw7XG4gXHRyeC5saXN0ID0gbGlzdDtcbi1cdHJ4LmxpbmtfaWQgPSAtMTtcbiBcbiBcdGlmIChpZWVlODAyMTFfaXNfZGF0YShmYykgfHwgaWVlZTgwMjExX2lzX21nbXQoZmMpKVxuIFx0XHRJODAyX0RFQlVHX0lOQyhsb2NhbC1cdTAwM2Vkb3QxMVJlY2VpdmVkRnJhZ21lbnRDb3VudCk7XG5AQCAtNTQyNiw5NyAmIzQzOzU0MDEsMTAyIEBAIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gXHRcdCAgICAgaWVlZTgwMjExX2lzX3MxZ19iZWFjb24oaGRyLVx1MDAzZWZyYW1lX2NvbnRyb2wpKSlcbiBcdFx0aWVlZTgwMjExX3NjYW5fcngobG9jYWwsIHNrYik7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSWCBvZiBhIGRhdGEgZnJhbWUgc2hvdWxkIG9ubHkgaGFwcGVuIHRvIGV4aXN0aW5nIHN0YXRpb25zLlxuJiM0MztcdCAqIEl0IGlzIHRoZXJlZm9yZSBtb3JlIGVmZmljaWVudCB0byB1c2UgdGhlIG9uZSBwcm92aWRlZCBieSB0aGUgZHJpdmVyXG4mIzQzO1x0ICogb3Igc2VhcmNoIGJhc2VkIG9uIHRoZSBzdGF0aW9uJiMzOTtzIGFkZHJlc3MuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBOb3RlIHdlIHdpbGwgZmFsbCB0aHJvdWdoIGFuZCBoYW5kbGUgYSBzcHVyaW91cyBkYXRhIGZyYW1lIGluIHRoZVxuJiM0MztcdCAqIHNhbWUgd2F5IGFzIGEgbWFuYWdlbWVudCBmcmFtZS5cbiYjNDM7XHQgKi9cbiBcdGlmIChpZWVlODAyMTFfaXNfZGF0YShmYykpIHtcbi1cdFx0c3RydWN0IHN0YV9pbmZvICpzdGEsICpwcmV2X3N0YTtcbi1cdFx0aW50IGxpbmtfaWQgPSAtMTtcbi1cbi1cdFx0aWYgKHN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkKVxuLVx0XHRcdGxpbmtfaWQgPSBzdGF0dXMtXHUwMDNlbGlua19pZDtcbi1cbi1cdFx0aWYgKHB1YnN0YSkge1xuLVx0XHRcdHN0YSA9IGNvbnRhaW5lcl9vZihwdWJzdGEsIHN0cnVjdCBzdGFfaW5mbywgc3RhKTtcbi1cdFx0XHRpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEoXHUwMDI2cngsIHN0YSwgbGlua19pZCkpXG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cbi1cdFx0XHQvKlxuLVx0XHRcdCAqIEluIE1MTyBjb25uZWN0aW9uLCBmZXRjaCB0aGUgbGlua19pZCB1c2luZyBhZGRyMlxuLVx0XHRcdCAqIHdoZW4gdGhlIGRyaXZlciBkb2VzIG5vdCBwYXNzIGxpbmtfaWQgaW4gc3RhdHVzLlxuLVx0XHRcdCAqIFdoZW4gdGhlIGFkZHJlc3MgdHJhbnNsYXRpb24gaXMgYWxyZWFkeSBwZXJmb3JtZWQgYnlcbi1cdFx0XHQgKiBkcml2ZXIvaHcsIHRoZSB2YWxpZCBsaW5rX2lkIG11c3QgYmUgcGFzc2VkIGluXG4tXHRcdFx0ICogc3RhdHVzLlxuLVx0XHRcdCAqL1xuLVxuLVx0XHRcdGlmICghc3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQgXHUwMDI2XHUwMDI2IHB1YnN0YS1cdTAwM2VtbG8pIHtcbi1cdFx0XHRcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YTtcbi1cbi1cdFx0XHRcdGxpbmtfc3RhID0gbGlua19zdGFfaW5mb19nZXRfYnNzKHJ4LnNkYXRhLFxuLVx0XHRcdFx0XHRcdFx0XHQgaGRyLVx1MDAzZWFkZHIyKTtcbi1cdFx0XHRcdGlmICghbGlua19zdGEpXG4tXHRcdFx0XHRcdGdvdG8gb3V0O1xuLVxuLVx0XHRcdFx0aWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGluayhcdTAwMjZyeCxcbi1cdFx0XHRcdFx0XHRcdFx0bGlua19zdGEtXHUwMDNlbGlua19pZCkpXG4tXHRcdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbi1cbi1cdFx0XHRpZiAoaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShcdTAwMjZyeCwgc2tiLCB0cnVlKSlcbiYjNDM7XHRcdGlmIChsaW5rX3B1YnN0YSkge1xuJiM0MztcdFx0XHRzdGEgPSBjb250YWluZXJfb2YobGlua19wdWJzdGEtXHUwMDNlc3RhLCBzdHJ1Y3Qgc3RhX2luZm8sXG4mIzQzO1x0XHRcdFx0XHQgICBzdGEpO1xuJiM0MztcdFx0XHRsaW5rX3N0YSA9IHJjdV9kZXJlZmVyZW5jZShzdGEtXHUwMDNlbGlua1tsaW5rX3B1YnN0YS1cdTAwM2VsaW5rX2lkXSk7XG4mIzQzO1xuJiM0MztcdFx0XHRyeC5zZGF0YSA9IHN0YS1cdTAwM2VzZGF0YTtcbiYjNDM7XHRcdFx0aWYgKGllZWU4MDIxMV9yeF9kYXRhX3NldF9saW5rX3N0YShcdTAwMjZyeCwgbGlua19zdGEpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShcdTAwMjZyeCwgc2tiLCB0cnVlKSlcbiBcdFx0XHRcdHJldHVybjtcbiYjNDM7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbi1cdFx0cHJldl9zdGEgPSBOVUxMO1xuJiM0MztcdFx0cnhfZGF0YV9wZW5kaW5nID0gZmFsc2U7XG4gXG4mIzQzO1x0XHQvKiBTZWFyY2ggZm9yIHN0YXRpb25zIG9uIG5vbi1NTEQgaW50ZXJmYWNlcyAqL1xuIFx0XHRmb3JfZWFjaF9zdGFfaW5mbyhsb2NhbCwgaGRyLVx1MDAzZWFkZHIyLCBzdGEsIHRtcCkge1xuLVx0XHRcdGlmICghcHJldl9zdGEpIHtcbi1cdFx0XHRcdHByZXZfc3RhID0gc3RhO1xuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0fVxuJiM0MztcdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluaztcbiBcbi1cdFx0XHRyeC5zZGF0YSA9IHByZXZfc3RhLVx1MDAzZXNkYXRhO1xuLVx0XHRcdGlmICghc3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQgXHUwMDI2XHUwMDI2IHByZXZfc3RhLVx1MDAzZXN0YS5tbG8pIHtcbi1cdFx0XHRcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YTtcbiYjNDM7XHRcdFx0aWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKFx1MDAyNnN0YS1cdTAwM2VzZGF0YS1cdTAwM2V2aWYpKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdFx0bGlua19zdGEgPSBsaW5rX3N0YV9pbmZvX2dldF9ic3Mocnguc2RhdGEsXG4tXHRcdFx0XHRcdFx0XHRcdCBoZHItXHUwMDNlYWRkcjIpO1xuLVx0XHRcdFx0aWYgKCFsaW5rX3N0YSlcbi1cdFx0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdGxpbmsgPSBcdTAwMjZzdGEtXHUwMDNlc2RhdGEtXHUwMDNlZGVmbGluaztcbiYjNDM7XHRcdFx0aWYgKCFpZWVlODAyMTFfcnhfdmFsaWRfZnJlcShzdGF0dXMtXHUwMDNlZnJlcSwgbGluaykpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0XHRsaW5rX2lkID0gbGlua19zdGEtXHUwMDNlbGlua19pZDtcbiYjNDM7XHRcdFx0aWYgKHJ4X2RhdGFfcGVuZGluZykge1xuJiM0MztcdFx0XHRcdGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoXHUwMDI2cngsIHNrYixcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdGZhbHNlKTtcbiYjNDM7XHRcdFx0XHRyeF9kYXRhX3BlbmRpbmcgPSBmYWxzZTtcbiBcdFx0XHR9XG4gXG4tXHRcdFx0aWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfc3RhKFx1MDAyNnJ4LCBwcmV2X3N0YSwgbGlua19pZCkpXG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cbi1cdFx0XHRpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKFx1MDAyNnJ4LCBza2IsIGZhbHNlKTtcbiYjNDM7XHRcdFx0cnguc2RhdGEgPSBzdGEtXHUwMDNlc2RhdGE7XG4mIzQzO1x0XHRcdGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X2xpbmtfc3RhKFx1MDAyNnJ4LCBcdTAwMjZzdGEtXHUwMDNlZGVmbGluaykpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0cHJldl9zdGEgPSBzdGE7XG4mIzQzO1x0XHRcdHJ4X2RhdGFfcGVuZGluZyA9IHRydWU7XG4gXHRcdH1cbiBcbi1cdFx0aWYgKHByZXZfc3RhKSB7XG4tXHRcdFx0cnguc2RhdGEgPSBwcmV2X3N0YS1cdTAwM2VzZGF0YTtcbi1cdFx0XHRpZiAoIXN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkIFx1MDAyNlx1MDAyNiBwcmV2X3N0YS1cdTAwM2VzdGEubWxvKSB7XG4tXHRcdFx0XHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGE7XG4mIzQzO1x0XHQvKiBBbmQgc2VhcmNoIHN0YXRpb25zIG9uIE1MRCBpbnRlcmZhY2VzICovXG4mIzQzO1x0XHRmb3JfZWFjaF9saW5rX3N0YV9pbmZvKGxvY2FsLCBoZHItXHUwMDNlYWRkcjIsIGxpbmtfc3RhLCB0bXApIHtcbiYjNDM7XHRcdFx0c3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbms7XG4gXG4tXHRcdFx0XHRsaW5rX3N0YSA9IGxpbmtfc3RhX2luZm9fZ2V0X2JzcyhyeC5zZGF0YSxcbi1cdFx0XHRcdFx0XHRcdFx0IGhkci1cdTAwM2VhZGRyMik7XG4tXHRcdFx0XHRpZiAoIWxpbmtfc3RhKVxuLVx0XHRcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdFx0c3RhID0gbGlua19zdGEtXHUwMDNlc3RhO1xuJiM0MztcdFx0XHRzZGF0YSA9XHRzdGEtXHUwMDNlc2RhdGE7XG4mIzQzO1x0XHRcdGxpbmsgPSByY3VfZGVyZWZlcmVuY2Uoc2RhdGEtXHUwMDNlbGlua1tsaW5rX3N0YS1cdTAwM2VsaW5rX2lkXSk7XG4gXG4tXHRcdFx0XHRsaW5rX2lkID0gbGlua19zdGEtXHUwMDNlbGlua19pZDtcbiYjNDM7XHRcdFx0aWYgKCFpZWVlODAyMTFfcnhfdmFsaWRfZnJlcShzdGF0dXMtXHUwMDNlZnJlcSwgbGluaykpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAocnhfZGF0YV9wZW5kaW5nKSB7XG4mIzQzO1x0XHRcdFx0aWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShcdTAwMjZyeCwgc2tiLFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0ZmFsc2UpO1xuJiM0MztcdFx0XHRcdHJ4X2RhdGFfcGVuZGluZyA9IGZhbHNlO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHRpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEoXHUwMDI2cngsIHByZXZfc3RhLCBsaW5rX2lkKSlcbi1cdFx0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0XHRyeC5zZGF0YSA9IHN0YS1cdTAwM2VzZGF0YTtcbiYjNDM7XHRcdFx0aWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGlua19zdGEoXHUwMDI2cngsIGxpbmtfc3RhKSlcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJ4X2RhdGFfcGVuZGluZyA9IHRydWU7XG4mIzQzO1x0XHR9XG4gXG4mIzQzO1x0XHRpZiAocnhfZGF0YV9wZW5kaW5nKSB7XG4gXHRcdFx0aWYgKGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoXHUwMDI2cngsIHNrYiwgdHJ1ZSkpXG4gXHRcdFx0XHRyZXR1cm47XG4mIzQzO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0LyogZmFsbCB0aHJvdWdoLCBlLmcuIGZvciBzcHVyaW91cyBmcmFtZSBub3RpZmljYXRpb24gKi9cbiBcdH1cbiBcbi1cdHByZXYgPSBOVUxMO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhpcyBpcyBhIG1hbmFnZW1lbnQgZnJhbWUgKG9yIGEgZGF0YSBmcmFtZSB3aXRob3V0IGEgc3RhdGlvbikgYW5kXG4mIzQzO1x0ICogaXQgd2lsbCBiZSBkZWxpdmVyZWQgaW5kZXBlbmRlbnQgb2Ygd2hldGhlciBhIHN0YXRpb24gZXhpc3RzLFxuJiM0MztcdCAqIHNvIGl0ZXJhdGUgdGhlIGludGVyZmFjZXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0cnhfZGF0YV9wZW5kaW5nID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdC8qIFdlIGV4cGVjdCB0aGUgZHJpdmVyIHRvIHByb3ZpZGUgZnJlcXVlbmN5IGluZm9ybWF0aW9uICovXG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRSghbG9jYWwtXHUwMDNlZW11bGF0ZV9jaGFuY3R4IFx1MDAyNlx1MDAyNiAhc3RhdHVzLVx1MDAzZWZyZXEpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgXHUwMDI2bG9jYWwtXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xuJiM0MztcdFx0c3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmsgPSBOVUxMO1xuJiM0MztcbiBcdFx0aWYgKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG5AQCAtNTUyNCwzMCAmIzQzOzU1MDQsODUgQEAgc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcdFx0ICAgIHNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pXG4gXHRcdFx0Y29udGludWU7XG4gXG4mIzQzO1x0XHRsaW5rX3N0YSA9IE5VTEw7XG4mIzQzO1x0XHRsaW5rID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBUcnkgdG8gcmVzb2x2ZSB0aGUgc3RhdGlvbiAqL1xuJiM0MztcdFx0aWYgKCFpZWVlODAyMTFfdmlmX2lzX21sZChcdTAwMjZzZGF0YS1cdTAwM2V2aWYpKSB7XG4mIzQzO1x0XHRcdHN0YSA9IHN0YV9pbmZvX2dldF9ic3Moc2RhdGEsIGhkci1cdTAwM2VhZGRyMik7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoc3RhKSB7XG4mIzQzO1x0XHRcdFx0bGlua19zdGEgPSBcdTAwMjZzdGEtXHUwMDNlZGVmbGluaztcbiYjNDM7XHRcdFx0XHRsaW5rID0gXHUwMDI2c2RhdGEtXHUwMDNlZGVmbGluaztcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0bGlua19zdGEgPSBsaW5rX3N0YV9pbmZvX2dldF9ic3Moc2RhdGEsIGhkci1cdTAwM2VhZGRyMik7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAobGlua19zdGEpXG4mIzQzO1x0XHRcdFx0bGluayA9IHJjdV9kZXJlZmVyZW5jZShzZGF0YS1cdTAwM2VsaW5rW2xpbmtfc3RhLVx1MDAzZWxpbmtfaWRdKTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdC8qXG4tXHRcdCAqIGZyYW1lIGlzIGRlc3RpbmVkIGZvciB0aGlzIGludGVyZmFjZSwgYnV0IGlmIGl0JiMzOTtzXG4tXHRcdCAqIG5vdCBhbHNvIGZvciB0aGUgcHJldmlvdXMgb25lIHdlIGhhbmRsZSB0aGF0IGFmdGVyXG4tXHRcdCAqIHRoZSBsb29wIHRvIGF2b2lkIGNvcHlpbmcgdGhlIFNLQiBvbmNlIHRvbyBtdWNoXG4mIzQzO1x0XHQgKiBJZiB3ZSBmb3VuZCBhIFNUQSBhbmQgaXQgaGFzIGEgdmFsaWQgbGluayBpbmZvcm1hdGlvbiwgdGhlblxuJiM0MztcdFx0ICogUlggdXNpbmcgdGhlIHN0YXRpb24uXG4gXHRcdCAqL1xuJiM0MztcdFx0aWYgKGxpbmtfc3RhIFx1MDAyNlx1MDAyNiBsaW5rIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGllZWU4MDIxMV9yeF92YWxpZF9mcmVxKHN0YXR1cy1cdTAwM2VmcmVxLCBsaW5rKSkge1xuJiM0MztcdFx0XHRpZiAocnhfZGF0YV9wZW5kaW5nKSB7XG4mIzQzO1x0XHRcdFx0aWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShcdTAwMjZyeCwgc2tiLCBmYWxzZSk7XG4mIzQzO1x0XHRcdFx0cnhfZGF0YV9wZW5kaW5nID0gZmFsc2U7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRcdC8qIE5vIHZhbGlkX2xpbmtzIGNoZWNrIGFzIHdlIG5lZWQgdG8gUlggYmVhY29ucyAqL1xuJiM0MztcbiYjNDM7XHRcdFx0cnguc2RhdGEgPSBzZGF0YTtcbiYjNDM7XHRcdFx0aWYgKGllZWU4MDIxMV9yeF9kYXRhX3NldF9saW5rX3N0YShcdTAwMjZyeCwgbGlua19zdGEpKVxuJiM0MztcdFx0XHRcdHJ4X2RhdGFfcGVuZGluZyA9IHRydWU7XG4gXG4tXHRcdGlmICghcHJldikge1xuLVx0XHRcdHByZXYgPSBzZGF0YTtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuLVx0XHRyeC5zZGF0YSA9IHByZXY7XG4tXHRcdGllZWU4MDIxMV9yeF9mb3JfaW50ZXJmYWNlKFx1MDAyNnJ4LCBza2IsIGZhbHNlKTtcbiYjNDM7XHRcdC8qIE5vIHN0YXRpb24sIHRyeSB0byByZXNvbHZlIHRoZSBsaW5rIGFuZCBSWCAqL1xuJiM0MztcdFx0aWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKFx1MDAyNnNkYXRhLVx1MDAzZXZpZikpIHtcbiYjNDM7XHRcdFx0c3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmY7XG4mIzQzO1x0XHRcdGJvb2wgZm91bmQgPSBmYWxzZTtcbiBcbi1cdFx0cHJldiA9IHNkYXRhO1xuLVx0fVxuJiM0MztcdFx0XHRmb3JfZWFjaF9saW5rX2RhdGFfcmN1KHNkYXRhLCBsaW5rKSB7XG4mIzQzO1x0XHRcdFx0Y29uZiA9IHJjdV9kZXJlZmVyZW5jZShsaW5rLVx1MDAzZWNvbmYtXHUwMDNlY2hhbmN0eF9jb25mKTtcbiYjNDM7XHRcdFx0XHRpZiAoIWNvbmYgfHwgIWNvbmYtXHUwMDNlZGVmLmNoYW4pXG4mIzQzO1x0XHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdGlmIChwcmV2KSB7XG4tXHRcdHJ4LnNkYXRhID0gcHJldjtcbiYjNDM7XHRcdFx0XHRpZiAoc3RhdHVzLVx1MDAzZWZyZXEgPT0gY29uZi1cdTAwM2VkZWYuY2hhbi1cdTAwM2VjZW50ZXJfZnJlcSkge1xuJiM0MztcdFx0XHRcdFx0Zm91bmQgPSB0cnVlO1xuJiM0MztcdFx0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdFx0fVxuJiM0MztcdFx0XHR9XG4gXG4tXHRcdGlmIChpZWVlODAyMTFfcnhfZm9yX2ludGVyZmFjZShcdTAwMjZyeCwgc2tiLCB0cnVlKSlcbi1cdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdGlmICghZm91bmQpXG4mIzQzO1x0XHRcdFx0bGluayA9IFx1MDAyNnNkYXRhLVx1MDAzZWRlZmxpbms7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRsaW5rID0gXHUwMDI2c2RhdGEtXHUwMDNlZGVmbGluaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAocnhfZGF0YV9wZW5kaW5nKSB7XG4mIzQzO1x0XHRcdGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoXHUwMDI2cngsIHNrYiwgZmFsc2UpO1xuJiM0MztcdFx0XHRyeF9kYXRhX3BlbmRpbmcgPSBmYWxzZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRyeC5zZGF0YSA9IHNkYXRhO1xuJiM0MztcdFx0cngubG9jYWwgPSBzZGF0YS1cdTAwM2Vsb2NhbDtcbiYjNDM7XHRcdHJ4LmxpbmsgPSBsaW5rO1xuJiM0MztcdFx0cngubGlua19pZCA9IGxpbmstXHUwMDNlbGlua19pZDtcbiYjNDM7XHRcdHJ4LnN0YSA9IE5VTEw7XG4mIzQzO1x0XHRyeC5saW5rX3N0YSA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdFx0cnhfZGF0YV9wZW5kaW5nID0gdHJ1ZTtcbiBcdH1cbiBcbiYjNDM7XHRpZiAocnhfZGF0YV9wZW5kaW5nIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKFx1MDAyNnJ4LCBza2IsIHRydWUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiAgb3V0OlxuIFx0ZGV2X2tmcmVlX3NrYihza2IpO1xuIH1cbkBAIC01NTU2LDcgJiM0Mzs1NTkxLDggQEAgc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiAgKiBUaGlzIGlzIHRoZSByZWNlaXZlIHBhdGggaGFuZGxlci4gSXQgaXMgY2FsbGVkIGJ5IGEgbG93IGxldmVsIGRyaXZlciB3aGVuIGFuXG4gICogODAyLjExIE1QRFUgaXMgcmVjZWl2ZWQgZnJvbSB0aGUgaGFyZHdhcmUuXG4gICovXG4tdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSxcbiYjNDM7dm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiYjNDM7XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3B1YnN0YSxcbiBcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4ge1xuIFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7XG5AQCAtNTY5NCw5ICYjNDM7NTczMCw2IEBAIHZvaWQgaWVlZTgwMjExX3J4X2xpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlmIChXQVJOX09OX09OQ0Uoc3RhdHVzLVx1MDAzZWxpbmtfaWQgXHUwMDNlPSBJRUVFODAyMTFfTElOS19VTlNQRUNJRklFRCkpXG4tXHRcdGdvdG8gZHJvcDtcbi1cbiBcdHN0YXR1cy1cdTAwM2VyeF9mbGFncyA9IDA7XG4gXG4gXHRrY292X3JlbW90ZV9zdGFydF9jb21tb24oc2tiX2dldF9rY292X2hhbmRsZShza2IpKTtcbkBAIC01NzE1LDkgJiM0Mzs1NzQ4LDEwIEBAIHZvaWQgaWVlZTgwMjExX3J4X2xpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsXG4gXHRcdFx0aWVlZTgwMjExX3RwdF9sZWRfdHJpZ19yeChsb2NhbCwgc2tiLVx1MDAzZWxlbik7XG4gXG4gXHRcdGlmIChzdGF0dXMtXHUwMDNlZmxhZyBcdTAwMjYgUlhfRkxBR184MDIzKVxuLVx0XHRcdF9faWVlZTgwMjExX3J4X2hhbmRsZV84MDIzKGh3LCBwdWJzdGEsIHNrYiwgbGlzdCk7XG4mIzQzO1x0XHRcdF9faWVlZTgwMjExX3J4X2hhbmRsZV84MDIzKGh3LCBsaW5rX3B1YnN0YSwgc2tiLCBsaXN0KTtcbiBcdFx0ZWxzZVxuLVx0XHRcdF9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXQoaHcsIHB1YnN0YSwgc2tiLCBsaXN0KTtcbiYjNDM7XHRcdFx0X19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChodywgbGlua19wdWJzdGEsIHNrYixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBsaXN0KTtcbiBcdH1cbiBcbiBcdGtjb3ZfcmVtb3RlX3N0b3AoKTtcbkBAIC01NzI3LDcgJiM0Mzs1NzYxLDggQEAgdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSxcbiB9XG4gRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfcnhfbGlzdCk7XG4gXG4tdm9pZCBpZWVlODAyMTFfcnhfbmFwaShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSxcbiYjNDM7dm9pZCBpZWVlODAyMTFfcnhfbmFwaShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiYjNDM7XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3B1YnN0YSxcbiBcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSlcbiB7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqdG1wO1xuQEAgLTU3NDAsNyAmIzQzOzU3NzUsNyBAQCB2b2lkIGllZWU4MDIxMV9yeF9uYXBpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLFxuIFx0ICogcmVjZWl2ZSBwcm9jZXNzaW5nXG4gXHQgKi9cbiBcdHJjdV9yZWFkX2xvY2soKTtcbi1cdGllZWU4MDIxMV9yeF9saXN0KGh3LCBwdWJzdGEsIHNrYiwgXHUwMDI2bGlzdCk7XG4mIzQzO1x0aWVlZTgwMjExX3J4X2xpc3QoaHcsIGxpbmtfcHVic3RhLCBza2IsIFx1MDAyNmxpc3QpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRpZiAoIW5hcGkpIHtcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc2Nhbi5jIGIvbmV0L21hYzgwMjExL3NjYW4uY1xuaW5kZXggZWVmZjIzMGJkOTA5Zi4uMzI0YzJiNmQ3Y2UxYiAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9zY2FuLmNcbkBAIC05LDcgJiM0Mzs5LDcgQEBcbiAgKiBDb3B5cmlnaHQgMjAwNywgTWljaGFlbCBXdSBcdTAwM2NmbGFtaW5naWNlQHNvdXJtaWxrLm5ldFx1MDAzZVxuICAqIENvcHlyaWdodCAyMDEzLTIwMTUgIEludGVsIE1vYmlsZSBDb21tdW5pY2F0aW9ucyBHbWJIXG4gICogQ29weXJpZ2h0IDIwMTYtMjAxNyAgSW50ZWwgRGV1dHNjaGxhbmQgR21iSFxuLSAqIENvcHlyaWdodCAoQykgMjAxOC0yMDI1IEludGVsIENvcnBvcmF0aW9uXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDI2IEludGVsIENvcnBvcmF0aW9uXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfYXJwLmhcdTAwM2VcbkBAIC0yMDQsMTIgJiM0MzsyMDQsMTAgQEAgaWVlZTgwMjExX2Jzc19pbmZvX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcbiBcdFx0ICogYW4gaW5kaWNhdGlvbiBvbiB3aGljaCBvZiB0aGUgbGlua3MgdGhlIGZyYW1lIHdhcyByZWNlaXZlZFxuIFx0XHQgKi9cbiBcdFx0aWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKFx1MDAyNnNjYW5fc2RhdGEtXHUwMDNldmlmKSkge1xuLVx0XHRcdGlmIChyeF9zdGF0dXMtXHUwMDNlbGlua192YWxpZCkge1xuLVx0XHRcdFx0czggbGlua19pZCA9IHJ4X3N0YXR1cy1cdTAwM2VsaW5rX2lkO1xuJiM0MztcdFx0XHRzOCBsaW5rX2lkID0gcnhfc3RhdHVzLVx1MDAzZWxpbmtfaWQ7XG4gXG4tXHRcdFx0XHRsaW5rX2NvbmYgPVxuLVx0XHRcdFx0XHRyY3VfZGVyZWZlcmVuY2Uoc2Nhbl9zZGF0YS1cdTAwM2V2aWYubGlua19jb25mW2xpbmtfaWRdKTtcbi1cdFx0XHR9XG4mIzQzO1x0XHRcdGxpbmtfY29uZiA9XG4mIzQzO1x0XHRcdFx0cmN1X2RlcmVmZXJlbmNlKHNjYW5fc2RhdGEtXHUwMDNldmlmLmxpbmtfY29uZltsaW5rX2lkXSk7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0bGlua19jb25mID0gXHUwMDI2c2Nhbl9zZGF0YS1cdTAwM2V2aWYuYnNzX2NvbmY7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdGRscy5jIGIvbmV0L21hYzgwMjExL3RkbHMuY1xuaW5kZXggZmZkNTc1YThkMTg4Zi4uYTg5YzY1NjliOWNmNSAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS90ZGxzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS90ZGxzLmNcbkBAIC0xMDY2LDcgJiM0MzsxMDY2LDcgQEAgaWVlZTgwMjExX3RkbHNfcHJlcF9tZ210X3BhY2tldChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0fVxuIFxuIFx0aWYgKGFjdGlvbl9jb2RlID09IFdMQU5fUFVCX0FDVElPTl9URExTX0RJU0NPVkVSX1JFUykge1xuLVx0XHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCA3LCBsaW5rX2lkKTtcbiYjNDM7XHRcdGllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIHN0YSwgNywgbGlua19pZCk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS90eC5jIGIvbmV0L21hYzgwMjExL3R4LmNcbmluZGV4IDBjZjVmNmVjNzVlNjcuLmYzZjlmMTI0ODFjNDAgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvdHguY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL3R4LmNcbkBAIC02NDQxLDcgJiM0Mzs2NDQxLDggQEAgdm9pZCBpZWVlODAyMTFfdW5yZXNlcnZlX3RpZChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLCB1OCB0aWQpXG4gRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfdW5yZXNlcnZlX3RpZCk7XG4gXG4gdm9pZCBfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRpZCwgaW50IGxpbmtfaWQsXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxuJiM0MztcdFx0XHRcdCBpbnQgdGlkLCBpbnQgbGlua19pZCxcbiBcdFx0XHRcdCBlbnVtIG5sODAyMTFfYmFuZCBiYW5kKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAodm9pZCAqKXNrYi1cdTAwM2VkYXRhO1xuQEAgLTY0OTMsMTIgJiM0Mzs2NDk0LDEzIEBAIHZvaWQgX19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0ICovXG4gXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gXHRJRUVFODAyMTFfU0tCX0NCKHNrYiktXHUwMDNlYmFuZCA9IGJhbmQ7XG4tXHRpZWVlODAyMTFfeG1pdChzZGF0YSwgTlVMTCwgc2tiKTtcbiYjNDM7XHRpZWVlODAyMTFfeG1pdChzZGF0YSwgc3RhLCBza2IpO1xuIFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4gfVxuIFxuIHZvaWQgaWVlZTgwMjExX3R4X3NrYl90aWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tXHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGlkLCBpbnQgbGlua19pZClcbiYjNDM7XHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcbiYjNDM7XHRcdFx0ICBpbnQgdGlkLCBpbnQgbGlua19pZClcbiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY2hhbmN0eF9jb25mO1xuIFx0ZW51bSBubDgwMjExX2JhbmQgYmFuZDtcbkBAIC02NTI0LDcgJiM0Mzs2NTI2LDcgQEAgdm9pZCBpZWVlODAyMTFfdHhfc2tiX3RpZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0YmFuZCA9IDA7XG4gXHR9XG4gXG4tXHRfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc2RhdGEsIHNrYiwgdGlkLCBsaW5rX2lkLCBiYW5kKTtcbiYjNDM7XHRfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc2RhdGEsIHNrYiwgc3RhLCB0aWQsIGxpbmtfaWQsIGJhbmQpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG5pbmRleCA4YWRiZWY1ZjA0NDI1Li4wYWIyOTA3ZTY2ZjY4IDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuQEAgLTEwOTYsNiAmIzQzOzEwOTYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmw4MDIxMV9wb2xpY3lbTlVNX05MODAyMTFfQVRUUl0gPSB7XG4gXHRbTkw4MDIxMV9BVFRSX05QQ0FfUFVOQ1RfQklUTUFQXSA9XG4gXHRcdE5MQV9QT0xJQ1lfRlVMTF9SQU5HRShOTEFfVTMyLCBcdTAwMjZubDgwMjExX3B1bmN0X2JpdG1hcF9yYW5nZSksXG4gXHRbTkw4MDIxMV9BVFRSX1NUQV9EVU1QX0xJTktfU1RBVFNdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sXG4mIzQzO1x0W05MODAyMTFfQVRUUl9GUkFNRV9DTURfTk9fU1RBXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LFxuIH07XG4gXG4gLyogcG9saWN5IGZvciB0aGUga2V5IGF0dHJpYnV0ZXMgKi9cbkBAIC0xNDg1OSw2ICYjNDM7MTQ4NjAsOSBAQCBzdGF0aWMgaW50IG5sODAyMTFfdHhfbWdtdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0ICAgICEod2Rldi1cdTAwM2V2YWxpZF9saW5rcyBcdTAwMjYgQklUKHBhcmFtcy5saW5rX2lkKSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiM0MztcdHBhcmFtcy5ub19zdGEgPVxuJiM0MztcdFx0bmxhX2dldF9mbGFnKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0ZSQU1FX0NNRF9OT19TVEFdKTtcbiYjNDM7XG4gXHRwYXJhbXMuYnVmID0gbmxhX2RhdGEoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfRlJBTUVdKTtcbiBcdHBhcmFtcy5sZW4gPSBubGFfbGVuKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0ZSQU1FXSk7XG4gXG5AQCAtMjIwMjAsNyAmIzQzOzIyMDI0LDkgQEAgaW50IG5sODAyMTFfc2VuZF9tZ210KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdCAgICAoaW5mby1cdTAwM2VhY2tfdHN0YW1wIFx1MDAyNlx1MDAyNiBubGFfcHV0X3U2NF82NGJpdChtc2csXG4gXHRcdFx0XHRcdFx0ICAgTkw4MDIxMV9BVFRSX1RYX0hXX1RJTUVTVEFNUCxcbiBcdFx0XHRcdFx0XHQgICBpbmZvLVx1MDAzZWFja190c3RhbXAsXG4tXHRcdFx0XHRcdFx0ICAgTkw4MDIxMV9BVFRSX1BBRCkpKVxuJiM0MztcdFx0XHRcdFx0XHQgICBOTDgwMjExX0FUVFJfUEFEKSkgfHxcbiYjNDM7XHQgICAgKGluZm8tXHUwMDNlbm9fc3RhIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgbmxhX3B1dF9mbGFnKG1zZywgTkw4MDIxMV9BVFRSX0ZSQU1FX0NNRF9OT19TVEEpKSlcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG4gXHRnZW5sbXNnX2VuZChtc2csIGhkcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDQ6MzU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjExX3J4X2xpc3QmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3J4X25hcGkmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX21nbXRfdHgmIzM0OywKICAgICYjMzQ7bmw4MDIxMV90eF9tZ210JiMzNDssCiAgICAmIzM0O25sODAyMTFfc2VuZF9tZ210JiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV90eF9za2JfdGlkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtYWM4MDIxMSBSWCBwYXRoIHRvIGhhbmRsZSBNTE8gKE11bHRpLUxpbmsgT3BlcmF0aW9uKSBsaW5rIElEcyBtb3JlIHJvYnVzdGx5LCByZW1vdmluZyBgbGlua192YWxpZGAgYW5kIHBhc3NpbmcgYGxpbmtfc3RhYCBkaXJlY3RseS4gSXQgYWxzbyBhZGRzIGEgYG5vX3N0YWAgZmxhZyBmb3IgbWFuYWdlbWVudCBmcmFtZSBUWC9SWC4gVGhlc2UgYXJlIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIG1hYzgwMjExIGFuZCBjZmc4MDIxMSwgcmVhY2hhYmxlIHZpYSBtYWM4MDIxMV9od3NpbSBhbmQgbmw4MDIxMSBuZXRsaW5rIGludGVyZmFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDllMTJhZTMxNWZlZTUwZTdjZDYwMjI2N2VlNjVkN2I4YmU0YjI1YjUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAxIDA0OjM1OjIwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kcF9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kcF9yeC5jCmluZGV4IDMzNDI1NzA3YzA4NDIuLmZiYjNkMThmNTVkZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZHBfcnguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RwX3J4LmMKQEAgLTI1MDAsNyAmIzQzOzI1MDAsNyBAQCBzdGF0aWMgdm9pZCBhdGgxMWtfZHBfcnhfZGVsaXZlcl9tc2R1KHN0cnVjdCBhdGgxMWsgKmFyLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcAogCSAgICAhKGlzX21jYmMgJmFtcDsmYW1wOyByeF9zdGF0dXMtJmd0O2ZsYWcgJmFtcDsgUlhfRkxBR19ERUNSWVBURUQpKQogCQlyeF9zdGF0dXMtJmd0O2ZsYWcgfD0gUlhfRkxBR184MDIzOwogCi0JaWVlZTgwMjExX3J4X25hcGkoYXItJmd0O2h3LCBwdWJzdGEsIG1zZHUsIG5hcGkpOwomIzQzOwlpZWVlODAyMTFfcnhfbmFwaShhci0mZ3Q7aHcsIHB1YnN0YSA/ICZhbXA7cHVic3RhLSZndDtkZWZsaW5rIDogTlVMTCwgbXNkdSwgbmFwaSk7CiB9CiAKIHN0YXRpYyBib29sIGF0aDExa19kcF9yeF9jaGVja19ud2lmaV9oZHJfbGVuX3ZhbGlkKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX21vbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9tb24uYwppbmRleCA3ZDViZTc3YjA4MWY4Li4xZmFmMTg5NmQwYWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX21vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfbW9uLmMKQEAgLTUwMyw4ICYjNDM7NTAzLDYgQEAgdm9pZCBhdGgxMmtfZHBfbW9uX3J4X2RlbGl2ZXJfbXNkdShzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsCiAJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1czsKIAlzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlICpoZSA9IE5VTEw7CiAKLQlzdGF0dXMtJmd0O2xpbmtfdmFsaWQgPSAwOwotCiAJaWYgKChzdGF0dXMtJmd0O2VuY29kaW5nID09IFJYX0VOQ19IRSkgJmFtcDsmYW1wOyAhKHN0YXR1cy0mZ3Q7ZmxhZyAmYW1wOyBSWF9GTEFHX1JBRElPVEFQX0hFKSAmYW1wOyZhbXA7CiAJICAgICEoc3RhdHVzLSZndDtmbGFnICZhbXA7IFJYX0ZMQUdfU0tJUF9NT05JVE9SKSkgewogCQloZSA9IHNrYl9wdXNoKG1zZHUsIHNpemVvZihrbm93bikpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9yeC5jCmluZGV4IDhmYTBlOTBiNDUzMTYuLjg0N2FkMjhmZDMwYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcnguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3J4LmMKQEAgLTEzNzUsNiAmIzQzOzEzNzUsNyBAQCB2b2lkIGF0aDEya19kcF9yeF9kZWxpdmVyX21zZHUoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LCBzdHJ1Y3QgbmFwaV9zdHJ1YwogCXN0cnVjdCBhdGgxMmtfZHAgKmRwID0gZHBfcGRldi0mZ3Q7ZHA7CiAJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1czsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhOwomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3B1YnN0YSA9IE5VTEw7CiAJc3RydWN0IGF0aDEya19kcF9wZWVyICpwZWVyOwogCXN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IgPSBBVEgxMktfU0tCX1JYQ0IobXNkdSk7CiAJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IHJ4X2luZm8tJmd0O3J4X3N0YXR1czsKQEAgLTEzODQsOSAmIzQzOzEzODUsMTkgQEAgdm9pZCBhdGgxMmtfZHBfcnhfZGVsaXZlcl9tc2R1KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwgc3RydWN0IG5hcGlfc3RydWMKIAogCXB1YnN0YSA9IHBlZXIgPyBwZWVyLSZndDtzdGEgOiBOVUxMOwogCi0Jc3RhdHVzLSZndDtsaW5rX3ZhbGlkID0gMDsKLQlpZiAocHVic3RhICZhbXA7JmFtcDsgcHVic3RhLSZndDt2YWxpZF9saW5rcykKLQkJYXRoMTJrX2h3X3NldF9yeF9saW5rX2lkKGRwLSZndDtod19wYXJhbXMsIHBlZXIsIHJ4Y2IsIHN0YXR1cyk7CiYjNDM7CWlmIChwdWJzdGEpIHsKJiM0MzsJCWlmIChwdWJzdGEtJmd0O3ZhbGlkX2xpbmtzKSB7CiYjNDM7CQkJdTggbGlua19pZCA9CiYjNDM7CQkJCWF0aDEya19od19nZXRfcnhfbGlua19pZChkcC0mZ3Q7aHdfcGFyYW1zLCBwZWVyLAomIzQzOwkJCQkJCQkgcnhjYiwgc3RhdHVzKTsKJiM0MzsKJiM0MzsJCQlpZiAobGlua19pZCAmZ3Q7IDApCiYjNDM7CQkJCWxpbmtfcHVic3RhID0KJiM0MzsJCQkJCXJjdV9kZXJlZmVyZW5jZShwdWJzdGEtJmd0O2xpbmtbbGlua19pZF0pOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlsaW5rX3B1YnN0YSA9ICZhbXA7cHVic3RhLSZndDtkZWZsaW5rOwomIzQzOwkJfQomIzQzOwl9CiAKIAlhdGgxMmtfZGJnKGRwLSZndDthYiwgQVRIMTJLX0RCR19EQVRBLAogCQkgICAmIzM0O3J4IHNrYiAlcCBsZW4gJXUgcGVlciAlcE0gJWQgJXMgc24gJXUgJXMlcyVzJXMlcyVzJXMlcyVzJXMgcmF0ZV9pZHggJXUgdmh0X25zcyAldSBmcmVxICV1IGJhbmQgJXUgZmxhZyAweCV4IGZjcy1lcnIgJWkgbWljLWVyciAlaSBhbXNkdS1tb3JlICVpXG4mIzM0OywKQEAgLTE0MjIsNyAmIzQzOzE0MzMsOCBAQCB2b2lkIGF0aDEya19kcF9yeF9kZWxpdmVyX21zZHUoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LCBzdHJ1Y3QgbmFwaV9zdHJ1YwogCiAJLyogVE9ETzogdHJhY2UgcnggcGFja2V0ICovCiAKLQlpZWVlODAyMTFfcnhfbmFwaShhdGgxMmtfcGRldl9kcF90b19odyhkcF9wZGV2KSwgcHVic3RhLCBtc2R1LCBuYXBpKTsKJiM0MzsJaWVlZTgwMjExX3J4X25hcGkoYXRoMTJrX3BkZXZfZHBfdG9faHcoZHBfcGRldiksIGxpbmtfcHVic3RhLCBtc2R1LAomIzQzOwkJCSAgbmFwaSk7CiB9CiBFWFBPUlRfU1lNQk9MKGF0aDEya19kcF9yeF9kZWxpdmVyX21zZHUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2h3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2h3LmgKaW5kZXggNDljZmQ1ZGZjNzBhNi4uMjY4ZjBhOGZkNDZkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9ody5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaHcuaApAQCAtMjQ4LDkgJiM0MzsyNDgsOSBAQCBzdHJ1Y3QgYXRoMTJrX2h3X29wcyB7CiAJYm9vbCAoKmRwX3NybmdfaXNfdHhfY29tcF9yaW5nKShpbnQgcmluZ19udW0pOwogCWJvb2wgKCppc19mcmFtZV9saW5rX2Fnbm9zdGljKShzdHJ1Y3QgYXRoMTJrX2xpbmtfdmlmICphcnZpZiwKIAkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210KTsKLQl2b2lkICgqc2V0X3J4X2xpbmtfaWQpKHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlciwKLQkJCSAgICAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLAotCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpOwomIzQzOwlpbnQgKCpnZXRfcnhfbGlua19pZCkoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLAomIzQzOwkJCSAgICAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsCiYjNDM7CQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyk7CiB9OwogCiBzdGF0aWMgaW5saW5lCkBAIC0yODEsMTMgJiM0MzsyODEsMTUgQEAgc3RhdGljIGlubGluZSBpbnQgYXRoMTJrX2h3X21hY19pZF90b19zcm5nX2lkKGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfcGFyYW1zICpodywKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGF0aDEya19od19zZXRfcnhfbGlua19pZChjb25zdCBzdHJ1Y3QgYXRoMTJrX2h3X3BhcmFtcyAqaHcsCi0JCQkJCSAgICBzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsCi0JCQkJCSAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLAotCQkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cykKJiM0MztzdGF0aWMgaW5saW5lIGludCBhdGgxMmtfaHdfZ2V0X3J4X2xpbmtfaWQoY29uc3Qgc3RydWN0IGF0aDEya19od19wYXJhbXMgKmh3LAomIzQzOwkJCQkJICAgc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLAomIzQzOwkJCQkJICAgc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYiwKJiM0MzsJCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpCiB7Ci0JaWYgKGh3LSZndDtod19vcHMtJmd0O3NldF9yeF9saW5rX2lkKQotCQlody0mZ3Q7aHdfb3BzLSZndDtzZXRfcnhfbGlua19pZChkcF9wZWVyLCByeGNiLCBzdGF0dXMpOwomIzQzOwlpZiAoaHctJmd0O2h3X29wcy0mZ3Q7Z2V0X3J4X2xpbmtfaWQpCiYjNDM7CQlyZXR1cm4gaHctJmd0O2h3X29wcy0mZ3Q7Z2V0X3J4X2xpbmtfaWQoZHBfcGVlciwgcnhjYiwgc3RhdHVzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIC0xOwogfQogCiBzdHJ1Y3QgYXRoMTJrX2Z3X2llIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguYwppbmRleCA5NWQ4N2RkNjc4NzJmLi44YjcyMmVlMGFkOGZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5jCkBAIC0yMzE3LDE3ICYjNDM7MjMxNywxNiBAQCBhdGgxMmtfd2lmaTdfZHBfcnhkZXNjX21wZHVfdmFsaWQoc3RydWN0IGF0aDEya19iYXNlICphYiwKIAlyZXR1cm4gdGx2X3RhZyA9PSBIQUxfUlhfTVBEVV9TVEFSVDsKIH0KIAotdm9pZAotYXRoMTJrX3dpZmk3X2RwX3J4X3NldF9saW5rX2lkX3FjbjkyNzQoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLAomIzQzO2ludAomIzQzO2F0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF9xY245Mjc0KHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlciwKIAkJCQkgICAgICAgc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYiwKIAkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cykKIHsKLQlzdGF0dXMtJmd0O2xpbmtfdmFsaWQgPSAxOwotCXN0YXR1cy0mZ3Q7bGlua19pZCA9IGRwX3BlZXItJmd0O2h3X2xpbmtzW3J4Y2ItJmd0O2h3X2xpbmtfaWRdOwomIzQzOwlyZXR1cm4gZHBfcGVlci0mZ3Q7aHdfbGlua3NbcnhjYi0mZ3Q7aHdfbGlua19pZF07CiB9CiAKLXZvaWQKLWF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF93Y243ODUwKHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlciwKJiM0MztpbnQKJiM0MzthdGgxMmtfd2lmaTdfZHBfcnhfZ2V0X2xpbmtfaWRfd2NuNzg1MChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsCiAJCQkJICAgICAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsCiAJCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpCiB7CkBAIC0yMzQxLDEwICYjNDM7MjM0MCw5IEBAIGF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF93Y243ODUwKHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlciwKIAlsaW5rc19tYXAgPSBSRUFEX09OQ0UoZHBfcGVlci0mZ3Q7bGlua19wZWVyc19tYXApOwogCWZvcl9lYWNoX3NldF9iaXQoaSwgJmFtcDtsaW5rc19tYXAsIEFUSDEyS19OVU1fTUFYX0xJTktTKSB7CiAJCWxpbmtfcGVlciA9IHJjdV9kZXJlZmVyZW5jZShkcF9wZWVyLSZndDtsaW5rX3BlZXJzW2ldKTsKLQkJaWYgKGxpbmtfcGVlciAmYW1wOyZhbXA7IGxpbmtfcGVlci0mZ3Q7cGVlcl9pZCA9PSByeGNiLSZndDtwZWVyX2lkKSB7Ci0JCQlzdGF0dXMtJmd0O2xpbmtfdmFsaWQgPSAxOwotCQkJc3RhdHVzLSZndDtsaW5rX2lkID0gbGlua19wZWVyLSZndDtsaW5rX2lkOwotCQkJcmV0dXJuOwotCQl9CiYjNDM7CQlpZiAobGlua19wZWVyICZhbXA7JmFtcDsgbGlua19wZWVyLSZndDtwZWVyX2lkID09IHJ4Y2ItJmd0O3BlZXJfaWQpCiYjNDM7CQkJcmV0dXJuIGxpbmtfcGVlci0mZ3Q7bGlua19pZDsKIAl9CiYjNDM7CiYjNDM7CXJldHVybiAtMTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguaAppbmRleCAxZDNhNDc4OGEyZGQ5Li5kNjg0ODlmZjdiMDM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5oCkBAIC01NywxMCAmIzQzOzU3LDEwIEBAIGF0aDEya193aWZpN19kcF9yeGRlc2NfbXBkdV92YWxpZChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLAogCQkJCSAgc3RydWN0IGhhbF9yeF9kZXNjICpyeF9kZXNjKTsKIGludCBhdGgxMmtfd2lmaTdfZHBfcnhfdGlkX2RlbGV0ZV9oYW5kbGVyKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsCiAJCQkJCSAgc3RydWN0IGF0aDEya19kcF9yeF90aWRfcnhxICpyeF90aWQpOwotdm9pZCBhdGgxMmtfd2lmaTdfZHBfcnhfc2V0X2xpbmtfaWRfcWNuOTI3NChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsCi0JCQkJCSAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLAotCQkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyk7Ci12b2lkIGF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF93Y243ODUwKHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlciwKLQkJCQkJICAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsCi0JCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKTsKJiM0MztpbnQgYXRoMTJrX3dpZmk3X2RwX3J4X2dldF9saW5rX2lkX3FjbjkyNzQoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLAomIzQzOwkJCQkJICAgc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYiwKJiM0MzsJCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpOwomIzQzO2ludCBhdGgxMmtfd2lmaTdfZHBfcnhfZ2V0X2xpbmtfaWRfd2NuNzg1MChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsCiYjNDM7CQkJCQkgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLAomIzQzOwkJCQkJICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaHcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaHcuYwppbmRleCA0YzExMTllZGNhZWRjLi4zY2QzNTE0NjQyOTZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2h3LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9ody5jCkBAIC0xNTgsNyAmIzQzOzE1OCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoMTJrX2h3X29wcyBxY245Mjc0X29wcyA9IHsKIAkuZ2V0X3Jpbmdfc2VsZWN0b3IgPSBhdGgxMmtfd2lmaTdfaHdfZ2V0X3Jpbmdfc2VsZWN0b3JfcWNuOTI3NCwKIAkuZHBfc3JuZ19pc190eF9jb21wX3JpbmcgPSBhdGgxMmtfd2lmaTdfZHBfc3JuZ19pc19jb21wX3JpbmdfcWNuOTI3NCwKIAkuaXNfZnJhbWVfbGlua19hZ25vc3RpYyA9IGF0aDEya193aWZpN19pc19mcmFtZV9saW5rX2Fnbm9zdGljX3FjbjkyNzQsCi0JLnNldF9yeF9saW5rX2lkID0gYXRoMTJrX3dpZmk3X2RwX3J4X3NldF9saW5rX2lkX3FjbjkyNzQsCiYjNDM7CS5nZXRfcnhfbGlua19pZCA9IGF0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF9xY245Mjc0LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfb3BzIHdjbjc4NTBfb3BzID0gewpAQCAtMTY5LDcgJiM0MzsxNjksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDEya19od19vcHMgd2NuNzg1MF9vcHMgPSB7CiAJLmdldF9yaW5nX3NlbGVjdG9yID0gYXRoMTJrX3dpZmk3X2h3X2dldF9yaW5nX3NlbGVjdG9yX3djbjc4NTAsCiAJLmRwX3NybmdfaXNfdHhfY29tcF9yaW5nID0gYXRoMTJrX3dpZmk3X2RwX3NybmdfaXNfY29tcF9yaW5nX3djbjc4NTAsCiAJLmlzX2ZyYW1lX2xpbmtfYWdub3N0aWMgPSBhdGgxMmtfd2lmaTdfaXNfZnJhbWVfbGlua19hZ25vc3RpY193Y243ODUwLAotCS5zZXRfcnhfbGlua19pZCA9IGF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF93Y243ODUwLAomIzQzOwkuZ2V0X3J4X2xpbmtfaWQgPSBhdGgxMmtfd2lmaTdfZHBfcnhfZ2V0X2xpbmtfaWRfd2NuNzg1MCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoMTJrX2h3X29wcyBxY2MyMDcyX29wcyA9IHsKQEAgLTE4MCw3ICYjNDM7MTgwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfb3BzIHFjYzIwNzJfb3BzID0gewogCS5nZXRfcmluZ19zZWxlY3RvciA9IGF0aDEya193aWZpN19od19nZXRfcmluZ19zZWxlY3Rvcl93Y243ODUwLAogCS5kcF9zcm5nX2lzX3R4X2NvbXBfcmluZyA9IGF0aDEya193aWZpN19kcF9zcm5nX2lzX2NvbXBfcmluZ193Y243ODUwLAogCS5pc19mcmFtZV9saW5rX2Fnbm9zdGljID0gYXRoMTJrX3dpZmk3X2lzX2ZyYW1lX2xpbmtfYWdub3N0aWNfd2NuNzg1MCwKLQkuc2V0X3J4X2xpbmtfaWQgPSBhdGgxMmtfd2lmaTdfZHBfcnhfc2V0X2xpbmtfaWRfd2NuNzg1MCwKJiM0MzsJLmdldF9yeF9saW5rX2lkID0gYXRoMTJrX3dpZmk3X2RwX3J4X2dldF9saW5rX2lkX3djbjc4NTAsCiB9OwogCiAjZGVmaW5lIEFUSDEyS19UWF9SSU5HX01BU0tfMCAweDEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jCmluZGV4IDJiNzA3ZmZjMWEyMGYuLjVkNjJjNGM4NjFiYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuYwpAQCAtNzI2MCw3ICYjNDM7NzI2MCw2IEBAIHN0YXRpYyB2b2lkIGF0aDEya19tZ210X3J4X2V2ZW50KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIHN0cnVjdCBza19idWZmICpza2IpCiAJc3RydWN0IGF0aDEya193bWlfbWdtdF9yeF9hcmcgcnhfZXYgPSB7fTsKIAlzdHJ1Y3QgYXRoMTJrICphcjsKIAlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSA9IE5VTEw7CiAJc3RydWN0IGF0aDEya19kcF9saW5rX3BlZXIgKnBlZXI7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAlib29sIGlzXzRhZGRyX251bGxfcGt0OwpAQCAtNzM2MiwxMSAmIzQzOzczNjEsNiBAQCBzdGF0aWMgdm9pZCBhdGgxMmtfbWdtdF9yeF9ldmVudChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQkJZGV2X2tmcmVlX3NrYihza2IpOwogCQkJZ290byBleGl0OwogCQl9Ci0JCXB1YnN0YSA9IHBlZXItJmd0O3N0YTsKLQkJaWYgKHB1YnN0YSAmYW1wOyZhbXA7IHB1YnN0YS0mZ3Q7dmFsaWRfbGlua3MpIHsKLQkJCXN0YXR1cy0mZ3Q7bGlua192YWxpZCA9IDE7Ci0JCQlzdGF0dXMtJmd0O2xpbmtfaWQgPSBwZWVyLSZndDtsaW5rX2lkOwotCQl9CiAJCXNwaW5fdW5sb2NrX2JoKCZhbXA7ZHAtJmd0O2RwX2xvY2spOwogCQlnb3RvIHNlbmRfcng7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYWdnLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hZ2cuYwppbmRleCA5NjEwMmQyYWYyY2Y5Li5jNDVjNDczMzc1MDllIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hZ2cuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hZ2cuYwpAQCAtNyw3ICYjNDM7Nyw4IEBACiAjaW5jbHVkZSAmIzM0O2hjbWQuaCYjMzQ7CiAKIHN0YXRpYyB2b2lkCi1pd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKJiM0Mztpd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMoc3RydWN0IGl3bF9tbGQgKm1sZCwKJiM0MzsJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEsCiAJCQkgICAgICAgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLAogCQkJICAgICAgIHN0cnVjdCBpd2xfbWxkX2JhaWRfZGF0YSAqYmFpZF9kYXRhLAogCQkJICAgICAgIHN0cnVjdCBpd2xfbWxkX3Jlb3JkZXJfYnVmZmVyICpyZW9yZGVyX2J1ZiwKQEAgLTMyLDcgJiM0MzszMyw3IEBAIGl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogCQl3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoc2tiX2xpc3QpKSkgewogCQkJaXdsX21sZF9wYXNzX3BhY2tldF90b19tYWM4MDIxMShtbGQsIG5hcGksIHNrYiwKIAkJCQkJCQlyZW9yZGVyX2J1Zi0mZ3Q7cXVldWUsCi0JCQkJCQkJc3RhKTsKJiM0MzsJCQkJCQkJbGlua19zdGEpOwogCQkJcmVvcmRlcl9idWYtJmd0O251bV9zdG9yZWQtLTsKIAkJfQogCX0KQEAgLTc0LDcgJiM0Mzs3NSw3IEBAIHN0YXRpYyB2b2lkIGl3bF9tbGRfcmVsZWFzZV9mcmFtZXNfZnJvbV9ub3RpZihzdHJ1Y3QgaXdsX21sZCAqbWxkLAogCiAJcmVvcmRlcl9idWYgPSAmYW1wO2JhX2RhdGEtJmd0O3Jlb3JkZXJfYnVmW3F1ZXVlXTsKIAotCWl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhtbGQsIGxpbmtfc3RhLSZndDtzdGEsIG5hcGksIGJhX2RhdGEsCiYjNDM7CWl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhtbGQsIGxpbmtfc3RhLCBuYXBpLCBiYV9kYXRhLAogCQkJCSAgICAgICByZW9yZGVyX2J1ZiwgbnNzbik7CiBvdXRfdW5sb2NrOgogCXJjdV9yZWFkX3VubG9jaygpOwpAQCAtMTgwLDcgJiM0MzsxODEsNyBAQCB2b2lkIGl3bF9tbGRfZGVsX2JhKHN0cnVjdCBpd2xfbWxkICptbGQsIGludCBxdWV1ZSwKIAlyZW9yZGVyX2J1ZiA9ICZhbXA7YmFfZGF0YS0mZ3Q7cmVvcmRlcl9idWZbcXVldWVdOwogCiAJLyogcmVsZWFzZSBhbGwgZnJhbWVzIHRoYXQgYXJlIGluIHRoZSByZW9yZGVyIGJ1ZmZlciB0byB0aGUgc3RhY2sgKi8KLQlpd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMobWxkLCBsaW5rX3N0YS0mZ3Q7c3RhLCBOVUxMLAomIzQzOwlpd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMobWxkLCBsaW5rX3N0YSwgTlVMTCwKIAkJCQkgICAgICAgYmFfZGF0YSwgcmVvcmRlcl9idWYsCiAJCQkJICAgICAgIGllZWU4MDIxMV9zbl9hZGQocmVvcmRlcl9idWYtJmd0O2hlYWRfc24sCiAJCQkJCQkJYmFfZGF0YS0mZ3Q7YnVmX3NpemUpKTsKQEAgLTE5Myw3ICYjNDM7MTk0LDcgQEAgdm9pZCBpd2xfbWxkX2RlbF9iYShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBpbnQgcXVldWUsCiAgKi8KIGVudW0gaXdsX21sZF9yZW9yZGVyX3Jlc3VsdAogaXdsX21sZF9yZW9yZGVyKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwKLQkJaW50IHF1ZXVlLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAomIzQzOwkJaW50IHF1ZXVlLCBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSwKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGl3bF9yeF9tcGR1X2Rlc2MgKmRlc2MpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9ICh2b2lkICopc2tiX21hY19oZWFkZXIoc2tiKTsKQEAgLTIyOCwxMiAmIzQzOzIyOSwxMiBAQCBpd2xfbWxkX3Jlb3JkZXIoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLAogCQlyZXR1cm4gSVdMX01MRF9QQVNTX1NLQjsKIAogCS8qIG5vIHN0YSB5ZXQgKi8KLQlpZiAoSVdMX0ZXX0NIRUNLKG1sZCwgIXN0YSwKJiM0MzsJaWYgKElXTF9GV19DSEVDSyhtbGQsICFsaW5rX3N0YSwKIAkJCSAmIzM0O0dvdCB2YWxpZCBCQUlEIHdpdGhvdXQgYSB2YWxpZCBzdGF0aW9uIGFzc2lnbmVkIC0gJWRcbiYjMzQ7LAogCQkJIGJhaWQpKQogCQlyZXR1cm4gSVdMX01MRF9QQVNTX1NLQjsKIAotCW1sZF9zdGEgPSBpd2xfbWxkX3N0YV9mcm9tX21hYzgwMjExKHN0YSk7CiYjNDM7CW1sZF9zdGEgPSBpd2xfbWxkX3N0YV9mcm9tX21hYzgwMjExKGxpbmtfc3RhLSZndDtzdGEpOwogCiAJLyogbm90IGEgZGF0YSBwYWNrZXQgKi8KIAlpZiAoIWllZWU4MDIxMV9pc19kYXRhX3FvcyhoZHItJmd0O2ZyYW1lX2NvbnRyb2wpIHx8CkBAIC0zMjQsNyAmIzQzOzMyNSw3IEBAIGl3bF9tbGRfcmVvcmRlcihzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCiAJICogd2lsbCBiZSByZWxlYXNlZCB3aGVuIHRoZSBmcmFtZSByZWxlYXNlIG5vdGlmaWNhdGlvbiBhcnJpdmVzLgogCSAqLwogCWlmICghYW1zZHUgfHwgbGFzdF9zdWJmcmFtZSkKLQkJaXdsX21sZF9yZW9yZGVyX3JlbGVhc2VfZnJhbWVzKG1sZCwgc3RhLCBuYXBpLCBiYWlkX2RhdGEsCiYjNDM7CQlpd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMobWxkLCBsaW5rX3N0YSwgbmFwaSwgYmFpZF9kYXRhLAogCQkJCQkgICAgICAgYnVmZmVyLCBuc3NuKTsKIAllbHNlIGlmIChidWZmZXItJmd0O251bV9zdG9yZWQgPT0gMSkKIAkJYnVmZmVyLSZndDtoZWFkX3NuID0gbnNzbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FnZy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYWdnLmgKaW5kZXggNjUxYzgwZDFjN2NkYS4uYzZjZDVmYTIxOWJlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYWdnLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYWdnLmgKQEAgLTEsNiAmIzQzOzEsNiBAQAogLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgQlNELTMtQ2xhdXNlICovCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDI0IEludGVsIENvcnBvcmF0aW9uCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI0LCAyMDI2IEludGVsIENvcnBvcmF0aW9uCiAgKi8KICNpZm5kZWYgX19pd2xfYWdnX2hfXwogI2RlZmluZSBfX2l3bF9hZ2dfaF9fCkBAIC0xMDYsNyAmIzQzOzEwNiw3IEBAIGludCBpd2xfbWxkX2FtcGR1X3J4X3N0b3Aoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKIAogZW51bSBpd2xfbWxkX3Jlb3JkZXJfcmVzdWx0CiBpd2xfbWxkX3Jlb3JkZXIoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLAotCQlpbnQgcXVldWUsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiYjNDM7CQlpbnQgcXVldWUsIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhLAogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXdsX3J4X21wZHVfZGVzYyAqZGVzYyk7CiAKIHZvaWQgaXdsX21sZF9oYW5kbGVfZnJhbWVfcmVsZWFzZV9ub3RpZihzdHJ1Y3QgaXdsX21sZCAqbWxkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmMKaW5kZXggMjY5NDM5ZDc4OWY0Ni4uMDJiZGY2Y2NiY2RjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5jCkBAIC00Nyw3ICYjNDM7NDcsOCBAQCBpd2xfbWxkX2ZpbGxfcGh5X2RhdGFfZnJvbV9tcGR1KHN0cnVjdCBpd2xfbWxkICptbGQsCiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGl3bF9tbGRfY2hlY2tfcG4oc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgICBpbnQgcXVldWUsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCiYjNDM7CQkJCSAgIGludCBxdWV1ZSwKJiM0MzsJCQkJICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9ICh2b2lkICopc2tiX21hY19oZWFkZXIoc2tiKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTsKQEAgLTcxLDEzICYjNDM7NzIsMTMgQEAgc3RhdGljIGlubGluZSBpbnQgaXdsX21sZF9jaGVja19wbihzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQlyZXR1cm4gMDsKIAogCS8qIGlmIHdlIGFyZSBoZXJlIC0gdGhpcyBmb3Igc3VyZSBpcyBlaXRoZXIgQ0NNUCBvciBHQ01QICovCi0JaWYgKCFzdGEpIHsKJiM0MzsJaWYgKCFsaW5rX3N0YSkgewogCQlJV0xfREVCVUdfRFJPUChtbGQsCiAJCQkgICAgICAgJiMzNDtleHBlY3RlZCBody1kZWNyeXB0ZWQgdW5pY2FzdCBmcmFtZSBmb3Igc3RhdGlvblxuJiMzNDspOwogCQlyZXR1cm4gLTE7CiAJfQogCi0JbWxkX3N0YSA9IGl3bF9tbGRfc3RhX2Zyb21fbWFjODAyMTEoc3RhKTsKJiM0MzsJbWxkX3N0YSA9IGl3bF9tbGRfc3RhX2Zyb21fbWFjODAyMTEobGlua19zdGEtJmd0O3N0YSk7CiAKIAlleHRpdiA9ICh1OCAqKWhkciAmIzQzOyBpZWVlODAyMTFfaGRybGVuKGhkci0mZ3Q7ZnJhbWVfY29udHJvbCk7CiAJa2V5aWR4ID0gZXh0aXZbM10gJmd0OyZndDsgNjsKQEAgLTExOSwxNyAmIzQzOzEyMCwxNyBAQCBzdGF0aWMgaW5saW5lIGludCBpd2xfbWxkX2NoZWNrX3BuKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBza19idWZmICpza2IsCiB2b2lkIGl3bF9tbGRfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEoc3RydWN0IGl3bF9tbGQgKm1sZCwKIAkJCQkgICAgIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwKIAkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBxdWV1ZSwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCiYjNDM7CQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEpCiB7CiAJS1VOSVRfU1RBVElDX1NUVUJfUkVESVJFQ1QoaXdsX21sZF9wYXNzX3BhY2tldF90b19tYWM4MDIxMSwKLQkJCQkgICBtbGQsIG5hcGksIHNrYiwgcXVldWUsIHN0YSk7CiYjNDM7CQkJCSAgIG1sZCwgbmFwaSwgc2tiLCBxdWV1ZSwgbGlua19zdGEpOwogCi0JaWYgKHVubGlrZWx5KGl3bF9tbGRfY2hlY2tfcG4obWxkLCBza2IsIHF1ZXVlLCBzdGEpKSkgewomIzQzOwlpZiAodW5saWtlbHkoaXdsX21sZF9jaGVja19wbihtbGQsIHNrYiwgcXVldWUsIGxpbmtfc3RhKSkpIHsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybjsKIAl9CiAKLQlpZWVlODAyMTFfcnhfbmFwaShtbGQtJmd0O2h3LCBzdGEsIHNrYiwgbmFwaSk7CiYjNDM7CWllZWU4MDIxMV9yeF9uYXBpKG1sZC0mZ3Q7aHcsIGxpbmtfc3RhLCBza2IsIG5hcGkpOwogfQogRVhQT1JUX1NZTUJPTF9JRl9JV0xXSUZJX0tVTklUKGl3bF9tbGRfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEpOwogCkBAIC0xNzI4LDcgJiM0MzsxNzI5LDcgQEAgc3RhdGljIHZvaWQgaXdsX21sZF91cGRhdGVfbGFzdF9yeF90aW1lc3RhbXAoc3RydWN0IGl3bF9tbGQgKm1sZCwgdTggYmFpZCkKICAqIFNldHMgKmRyb3AgdG8gdHJ1ZSBpZiB0aGUgcGFja2V0IHNob3VsZCBiZSBkcm9wcGVkLgogICogUmV0dXJucyB0aGUgc3RhdGlvbiBpZiBmb3VuZCwgb3IgTlVMTCBvdGhlcndpc2UuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqCiYjNDM7c3RhdGljIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKgogaXdsX21sZF9yeF93aXRoX3N0YShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAogCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJICAgIGNvbnN0IHN0cnVjdCBpd2xfcnhfbXBkdV9kZXNjICptcGR1X2Rlc2MsCkBAIC0xNzY0LDExICYjNDM7MTc2NSw2IEBAIGl3bF9tbGRfcnhfd2l0aF9zdGEoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwKIAogCXJ4X3N0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpOwogCi0JaWYgKGxpbmtfc3RhICZhbXA7JmFtcDsgc3RhLSZndDt2YWxpZF9saW5rcykgewotCQlyeF9zdGF0dXMtJmd0O2xpbmtfdmFsaWQgPSB0cnVlOwotCQlyeF9zdGF0dXMtJmd0O2xpbmtfaWQgPSBsaW5rX3N0YS0mZ3Q7bGlua19pZDsKLQl9Ci0KIAkvKiBmaWxsIGNoZWNrc3VtICovCiAJaWYgKGllZWU4MDIxMV9pc19kYXRhKGhkci0mZ3Q7ZnJhbWVfY29udHJvbCkgJmFtcDsmYW1wOwogCSAgICBwa3QtJmd0O2xlbl9uX2ZsYWdzICZhbXA7IGNwdV90b19sZTMyKEZIX1JTQ1NSX1JQQV9FTikpIHsKQEAgLTE4MDMsMTAgJiM0MzsxNzk5LDEwIEBAIGl3bF9tbGRfcnhfd2l0aF9zdGEoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwKIAkJCQkJCQkgICAgcXVldWUpOwogCX0KIAotCXJldHVybiBzdGE7CiYjNDM7CXJldHVybiBsaW5rX3N0YTsKIH0KIAotc3RhdGljIGludCBpd2xfbWxkX3J4X21nbXRfcHJvdChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAomIzQzO3N0YXRpYyBpbnQgaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEsCiAJCQkJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwKIAkJCQlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzLAogCQkJCXUzMiBtcGR1X3N0YXR1cywKQEAgLTE4MjAsNyAmIzQzOzE4MTYsNiBAQCBzdGF0aWMgaW50IGl3bF9tbGRfcnhfbWdtdF9wcm90KHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5OwogCWNvbnN0IHU4ICpmcmFtZSA9ICh2b2lkICopaGRyOwogCWNvbnN0IHU4ICptbWllOwotCXU4IGxpbmtfaWQ7CiAKIAlpZiAoKG1wZHVfc3RhdHVzICZhbXA7IElXTF9SWF9NUERVX1NUQVRVU19TRUNfTUFTSykgPT0KIAkgICAgIElXTF9SWF9NUERVX1NUQVRVU19TRUNfTk9ORSkKQEAgLTE4MzYsMTAgJiM0MzsxODMxLDEwIEBAIHN0YXRpYyBpbnQgaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKIAlpZiAoIWllZWU4MDIxMV9pc19iZWFjb24oaGRyLSZndDtmcmFtZV9jb250cm9sKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoIXN0YSkKJiM0MzsJaWYgKCFsaW5rX3N0YSkKIAkJcmV0dXJuIC0xOwogCi0JbWxkX3N0YSA9IGl3bF9tbGRfc3RhX2Zyb21fbWFjODAyMTEoc3RhKTsKJiM0MzsJbWxkX3N0YSA9IGl3bF9tbGRfc3RhX2Zyb21fbWFjODAyMTEobGlua19zdGEtJmd0O3N0YSk7CiAJbWxkX3ZpZiA9IGl3bF9tbGRfdmlmX2Zyb21fbWFjODAyMTEobWxkX3N0YS0mZ3Q7dmlmKTsKIAogCS8qIGtleSBtaXNtYXRjaCAtIHdpbGwgYWxzbyByZXBvcnQgIU1JQ19PSyBidXQgd2Ugc2hvdWxkbiYjMzk7dCBjb3VudCBpdCAqLwpAQCAtMTg1Myw4ICYjNDM7MTg0OCw3IEBAIHN0YXRpYyBpbnQgaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKIAkJcmV0dXJuIDA7CiAJfQogCi0JbGlua19pZCA9IHJ4X3N0YXR1cy0mZ3Q7bGlua192YWxpZCA/IHJ4X3N0YXR1cy0mZ3Q7bGlua19pZCA6IDA7Ci0JbGluayA9IHJjdV9kZXJlZmVyZW5jZShtbGRfdmlmLSZndDtsaW5rW2xpbmtfaWRdKTsKJiM0MzsJbGluayA9IHJjdV9kZXJlZmVyZW5jZShtbGRfdmlmLSZndDtsaW5rW2xpbmtfc3RhLSZndDtsaW5rX2lkXSk7CiAJaWYgKFdBUk5fT05fT05DRSghbGluaykpCiAJCXJldHVybiAtMTsKIApAQCAtMTkwNSw3ICYjNDM7MTg5OSw3IEBAIHN0YXRpYyBpbnQgaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKIH0KIAogc3RhdGljIGludCBpd2xfbWxkX3J4X2NyeXB0byhzdHJ1Y3QgaXdsX21sZCAqbWxkLAotCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAomIzQzOwkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEsCiAJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsCiAJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMsCiAJCQkgICAgIHN0cnVjdCBpd2xfcnhfbXBkdV9kZXNjICpkZXNjLCBpbnQgcXVldWUsCkBAIC0xOTE1LDcgJiM0MzsxOTA5LDcgQEAgc3RhdGljIGludCBpd2xfbWxkX3J4X2NyeXB0byhzdHJ1Y3QgaXdsX21sZCAqbWxkLAogCiAJaWYgKHVubGlrZWx5KGllZWU4MDIxMV9pc19tZ210KGhkci0mZ3Q7ZnJhbWVfY29udHJvbCkgJmFtcDsmYW1wOwogCQkgICAgICFpZWVlODAyMTFfaGFzX3Byb3RlY3RlZChoZHItJmd0O2ZyYW1lX2NvbnRyb2wpKSkKLQkJcmV0dXJuIGl3bF9tbGRfcnhfbWdtdF9wcm90KHN0YSwgaGRyLCByeF9zdGF0dXMsIHN0YXR1cywKJiM0MzsJCXJldHVybiBpd2xfbWxkX3J4X21nbXRfcHJvdChsaW5rX3N0YSwgaGRyLCByeF9zdGF0dXMsIHN0YXR1cywKIAkJCQkJICAgIGxlMTZfdG9fY3B1KGRlc2MtJmd0O21wZHVfbGVuKSk7CiAKIAlpZiAoIWllZWU4MDIxMV9oYXNfcHJvdGVjdGVkKGhkci0mZ3Q7ZnJhbWVfY29udHJvbCkgfHwKQEAgLTIwMjMsNyAmIzQzOzIwMTcsNyBAQCB2b2lkIGl3bF9tbGRfcnhfbXBkdShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCiAJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IHJ4Yl9hZGRyKHJ4Yik7CiAJc3RydWN0IGl3bF9tbGRfcnhfcGh5X2RhdGEgcGh5X2RhdGEgPSB7fTsKIAlzdHJ1Y3QgaXdsX3J4X21wZHVfZGVzYyAqbXBkdV9kZXNjID0gKHZvaWQgKilwa3QtJmd0O2RhdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsKJiM0MzsJc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGE7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXNpemVfdCBtcGR1X2Rlc2Nfc2l6ZSA9IHNpemVvZigqbXBkdV9kZXNjKTsKQEAgLTIwODYsNyAmIzQzOzIwODAsOCBAQCB2b2lkIGl3bF9tbGRfcnhfbXBkdShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKLQlzdGEgPSBpd2xfbWxkX3J4X3dpdGhfc3RhKG1sZCwgaGRyLCBza2IsIG1wZHVfZGVzYywgcGt0LCBxdWV1ZSwgJmFtcDtkcm9wKTsKJiM0MzsJbGlua19zdGEgPSBpd2xfbWxkX3J4X3dpdGhfc3RhKG1sZCwgaGRyLCBza2IsIG1wZHVfZGVzYywgcGt0LCBxdWV1ZSwKJiM0MzsJCQkJICAgICAgICZhbXA7ZHJvcCk7CiAJaWYgKGRyb3ApCiAJCWdvdG8gZHJvcDsKIApAQCAtMjEyNyw3ICYjNDM7MjEyMiw3IEBAIHZvaWQgaXdsX21sZF9yeF9tcGR1KHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwKIAogCWl3bF9tbGRfcnhfZmlsbF9zdGF0dXMobWxkLCBsaW5rX2lkLCBoZHIsIHNrYiwgJmFtcDtwaHlfZGF0YSk7CiAKLQlpZiAoaXdsX21sZF9yeF9jcnlwdG8obWxkLCBzdGEsIGhkciwgcnhfc3RhdHVzLCBtcGR1X2Rlc2MsIHF1ZXVlLAomIzQzOwlpZiAoaXdsX21sZF9yeF9jcnlwdG8obWxkLCBsaW5rX3N0YSwgaGRyLCByeF9zdGF0dXMsIG1wZHVfZGVzYywgcXVldWUsCiAJCQkgICAgICBsZTMyX3RvX2NwdShwa3QtJmd0O2xlbl9uX2ZsYWdzKSwgJmFtcDtjcnlwdG9fbGVuKSkKIAkJZ290byBkcm9wOwogCkBAIC0yMTQwLDcgJiM0MzsyMTM1LDggQEAgdm9pZCBpd2xfbWxkX3J4X21wZHUoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLAogCWlmIChpd2xfbWxkX3RpbWVfc3luY19mcmFtZShtbGQsIHNrYiwgaGRyLSZndDthZGRyMikpCiAJCWdvdG8gb3V0OwogCi0JcmVvcmRlcl9yZXMgPSBpd2xfbWxkX3Jlb3JkZXIobWxkLCBuYXBpLCBxdWV1ZSwgc3RhLCBza2IsIG1wZHVfZGVzYyk7CiYjNDM7CXJlb3JkZXJfcmVzID0gaXdsX21sZF9yZW9yZGVyKG1sZCwgbmFwaSwgcXVldWUsIGxpbmtfc3RhLCBza2IsCiYjNDM7CQkJCSAgICAgIG1wZHVfZGVzYyk7CiAJc3dpdGNoIChyZW9yZGVyX3JlcykgewogCWNhc2UgSVdMX01MRF9QQVNTX1NLQjoKIAkJYnJlYWs7CkBAIC0yMTUzLDcgJiM0MzsyMTQ5LDcgQEAgdm9pZCBpd2xfbWxkX3J4X21wZHUoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLAogCQlnb3RvIGRyb3A7CiAJfQogCi0JaXdsX21sZF9wYXNzX3BhY2tldF90b19tYWM4MDIxMShtbGQsIG5hcGksIHNrYiwgcXVldWUsIHN0YSk7CiYjNDM7CWl3bF9tbGRfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEobWxkLCBuYXBpLCBza2IsIHF1ZXVlLCBsaW5rX3N0YSk7CiAKIAlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmgKaW5kZXggNTczYjg5YzNjOWM2MS4uYjA4YzVhZGUzZGI4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5oCkBAIC02OSw3ICYjNDM7NjksNyBAQCB2b2lkIGl3bF9tbGRfaGFuZGxlX3JzY19ub3RpZihzdHJ1Y3QgaXdsX21sZCAqbWxkLAogdm9pZCBpd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKHN0cnVjdCBpd2xfbWxkICptbGQsCiAJCQkJICAgICBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCiAJCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcXVldWUsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKTsKJiM0MzsJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSk7CiAKIHZvaWQgaXdsX21sZF9oYW5kbGVfcGh5X2Fpcl9zbmlmZmVyX25vdGlmKHN0cnVjdCBpd2xfbWxkICptbGQsCiAJCQkJCSAgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvdGVzdHMvYWdnLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC90ZXN0cy9hZ2cuYwppbmRleCAyOWIwMjQ4Y2VjM2RmLi5lOWVmZTI5OTZmMDcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC90ZXN0cy9hZ2cuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC90ZXN0cy9hZ2cuYwpAQCAtMiw3ICYjNDM7Miw3IEBACiAvKgogICogS1VuaXQgdGVzdHMgZm9yIGNoYW5uZWwgaGVscGVyIGZ1bmN0aW9ucwogICoKLSAqIENvcHlyaWdodCAoQykgMjAyNC0yMDI1IEludGVsIENvcnBvcmF0aW9uCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI0LTIwMjYgSW50ZWwgQ29ycG9yYXRpb24KICAqLwogI2luY2x1ZGUgJmx0O2t1bml0L3Rlc3QuaCZndDsKICNpbmNsdWRlICZsdDtrdW5pdC9zdGF0aWNfc3R1Yi5oJmd0OwpAQCAtNDQxLDcgJiM0Mzs0NDEsNyBAQCBzdGF0aWMgdm9pZAogZmFrZV9pd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKHN0cnVjdCBpd2xfbWxkICptbGQsCiAJCQkJICAgICBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCiAJCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcXVldWUsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQomIzQzOwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhKQogewogCV9fc2tiX3F1ZXVlX3RhaWwoJmFtcDtnX3JlbGVhc2VkX3NrYnMsIHNrYik7CiAJZ19udW1fcmVsZWFzZWRfc2ticyYjNDM7JiM0Mzs7CkBAIC02MzAsNyAmIzQzOzYzMCw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfcmVvcmRlcl9idWZmZXIoc3RydWN0IGt1bml0ICp0ZXN0KQogCW1wZHVfZGVzYyA9IHNldHVwX21wZHVfZGVzYygpOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCXJlb3JkZXJfcmVzID0gaXdsX21sZF9yZW9yZGVyKG1sZCwgTlVMTCwgUVVFVUUsIHN0YSwgc2tiLCBtcGR1X2Rlc2MpOwomIzQzOwlyZW9yZGVyX3JlcyA9IGl3bF9tbGRfcmVvcmRlcihtbGQsIE5VTEwsIFFVRVVFLCAmYW1wO3N0YS0mZ3Q7ZGVmbGluaywgc2tiLAomIzQzOwkJCQkgICAgICBtcGR1X2Rlc2MpOwogCXJjdV9yZWFkX3VubG9jaygpOwogCiAJS1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJlb3JkZXJfcmVzLCBwYXJhbS0mZ3Q7ZXhwZWN0ZWQucmVvcmRlcl9yZXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4LmMKaW5kZXggYWIxZWIyZWIwYzNjZC4uOGMxOTdhMDkwYzJiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeC5jCkBAIC05MCw3ICYjNDM7OTAsNyBAQCBzdGF0aWMgdm9pZCBpd2xfbXZtX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKHN0cnVjdCBpd2xfbXZtICptdm0sCiAJCQkJZnJhZ2xlbiwgcnhiLSZndDt0cnVlc2l6ZSk7CiAJfQogCi0JaWVlZTgwMjExX3J4X25hcGkobXZtLSZndDtodywgc3RhLCBza2IsIG5hcGkpOwomIzQzOwlpZWVlODAyMTFfcnhfbmFwaShtdm0tJmd0O2h3LCBzdGEgPyAmYW1wO3N0YS0mZ3Q7ZGVmbGluayA6IE5VTEwsIHNrYiwgbmFwaSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeG1xLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeG1xLmMKaW5kZXggN2YwYjRmNWRhYTIxNC4uOGM0MDA5ZDNhMDBjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnhtcS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4bXEuYwpAQCAtMSw2ICYjNDM7MSw2IEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBCU0QtMy1DbGF1c2UKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCwgMjAxOC0yMDI1IEludGVsIENvcnBvcmF0aW9uCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTQsIDIwMTgtMjAyNiBJbnRlbCBDb3Jwb3JhdGlvbgogICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgSW50ZWwgTW9iaWxlIENvbW11bmljYXRpb25zIEdtYkgKICAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEludGVsIERldXRzY2hsYW5kIEdtYkgKICAqLwpAQCAtMjQzLDcgJiM0MzsyNDMsNyBAQCBzdGF0aWMgdm9pZCBpd2xfbXZtX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKHN0cnVjdCBpd2xfbXZtICptdm0sCiAJCXJldHVybjsKIAl9CiAKLQlpZWVlODAyMTFfcnhfbmFwaShtdm0tJmd0O2h3LCBzdGEsIHNrYiwgbmFwaSk7CiYjNDM7CWllZWU4MDIxMV9yeF9uYXBpKG12bS0mZ3Q7aHcsIHN0YSA/ICZhbXA7c3RhLSZndDtkZWZsaW5rIDogTlVMTCwgc2tiLCBuYXBpKTsKIH0KIAogc3RhdGljIGJvb2wgaXdsX212bV91c2VkX2F2ZXJhZ2VfZW5lcmd5KHN0cnVjdCBpd2xfbXZtICptdm0sCkBAIC0yNTI4LDcgJiM0MzsyNTI4LDcgQEAgdm9pZCBpd2xfbXZtX3J4X21vbml0b3Jfbm9fZGF0YShzdHJ1Y3QgaXdsX212bSAqbXZtLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCiAJfQogCiAJcmN1X3JlYWRfbG9jaygpOwotCWllZWU4MDIxMV9yeF9uYXBpKG12bS0mZ3Q7aHcsIHN0YSwgc2tiLCBuYXBpKTsKJiM0MzsJaWVlZTgwMjExX3J4X25hcGkobXZtLSZndDtodywgc3RhID8gJmFtcDtzdGEtJmd0O2RlZmxpbmsgOiBOVUxMLCBza2IsIG5hcGkpOwogCXJjdV9yZWFkX3VubG9jaygpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21hYzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21hYzgwMjExLmMKaW5kZXggMTNjNGU4YWJlMjgxOS4uZDVhNDdhYjI5ZjU4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tYWM4MDIxMS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbWFjODAyMTEuYwpAQCAtMTIzOSw3ICYjNDM7MTIzOSw3IEBAIEVYUE9SVF9TWU1CT0wobXQ3Nl9yeF9zaWduYWwpOwogc3RhdGljIHZvaWQKIG10NzZfcnhfY29udmVydChzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJc3RydWN0IGllZWU4MDIxMV9odyAqKmh3LAotCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqKnN0YSkKJiM0MzsJCXN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKipsaW5rX3N0YSkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IG10NzZfc2tiX2dldF9oZHIoc2tiKTsKQEAgLTEyODYsMTEgJiM0MzsxMjg2LDE1IEBAIG10NzZfcnhfY29udmVydChzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkgICAgICAgc2l6ZW9mKG1zdGF0LmNoYWluX3NpZ25hbCkpOwogCiAJaWYgKG1zdGF0LndjaWQpIHsKLQkJc3RhdHVzLSZndDtsaW5rX3ZhbGlkID0gbXN0YXQud2NpZC0mZ3Q7bGlua192YWxpZDsKLQkJc3RhdHVzLSZndDtsaW5rX2lkID0gbXN0YXQud2NpZC0mZ3Q7bGlua19pZDsKJiM0MzsJCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEgPSB3Y2lkX3RvX3N0YShtc3RhdC53Y2lkKTsKJiM0MzsKJiM0MzsJCWlmIChtc3RhdC53Y2lkLSZndDtsaW5rX3ZhbGlkKQomIzQzOwkJCSpsaW5rX3N0YSA9CiYjNDM7CQkJCXJjdV9kZXJlZmVyZW5jZShzdGEtJmd0O2xpbmtbbXN0YXQud2NpZC0mZ3Q7bGlua19pZF0pOwomIzQzOwkJZWxzZQomIzQzOwkJCSpsaW5rX3N0YSA9ICZhbXA7c3RhLSZndDtkZWZsaW5rOwogCX0KIAotCSpzdGEgPSB3Y2lkX3RvX3N0YShtc3RhdC53Y2lkKTsKIAkqaHcgPSBtdDc2X3BoeV9odyhkZXYsIG1zdGF0LnBoeV9pZHgpOwogfQogCkBAIC0xNTE0LDcgJiM0MzsxNTE4LDcgQEAgbXQ3Nl9jaGVja19zdGEoc3RydWN0IG10NzZfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB2b2lkIG10NzZfcnhfY29tcGxldGUoc3RydWN0IG10NzZfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmX2hlYWQgKmZyYW1lcywKIAkJICAgICAgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKQogewotCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGE7CiYjNDM7CXN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhOwogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OwogCXN0cnVjdCBza19idWZmICpza2IsICp0bXA7CiAJTElTVF9IRUFEKGxpc3QpOwpAQCAtMTUyNSw4ICYjNDM7MTUyOSw4IEBAIHZvaWQgbXQ3Nl9yeF9jb21wbGV0ZShzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqZnJhbWVzLAogCiAJCW10NzZfY2hlY2tfY2NtcF9wbihza2IpOwogCQlza2Jfc2hpbmZvKHNrYiktJmd0O2ZyYWdfbGlzdCA9IE5VTEw7Ci0JCW10NzZfcnhfY29udmVydChkZXYsIHNrYiwgJmFtcDtodywgJmFtcDtzdGEpOwotCQlpZWVlODAyMTFfcnhfbGlzdChodywgc3RhLCBza2IsICZhbXA7bGlzdCk7CiYjNDM7CQltdDc2X3J4X2NvbnZlcnQoZGV2LCBza2IsICZhbXA7aHcsICZhbXA7bGlua19zdGEpOwomIzQzOwkJaWVlZTgwMjExX3J4X2xpc3QoaHcsIGxpbmtfc3RhLCBza2IsICZhbXA7bGlzdCk7CiAKIAkJLyogc3Vic2VxdWVudCBhbXNkdSBmcmFtZXMgKi8KIAkJd2hpbGUgKG5za2IpIHsKQEAgLTE1MzQsOCAmIzQzOzE1MzgsOCBAQCB2b2lkIG10NzZfcnhfY29tcGxldGUoc3RydWN0IG10NzZfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmX2hlYWQgKmZyYW1lcywKIAkJCW5za2IgPSBuc2tiLSZndDtuZXh0OwogCQkJc2tiLSZndDtuZXh0ID0gTlVMTDsKIAotCQkJbXQ3Nl9yeF9jb252ZXJ0KGRldiwgc2tiLCAmYW1wO2h3LCAmYW1wO3N0YSk7Ci0JCQlpZWVlODAyMTFfcnhfbGlzdChodywgc3RhLCBza2IsICZhbXA7bGlzdCk7CiYjNDM7CQkJbXQ3Nl9yeF9jb252ZXJ0KGRldiwgc2tiLCAmYW1wO2h3LCAmYW1wO2xpbmtfc3RhKTsKJiM0MzsJCQlpZWVlODAyMTFfcnhfbGlzdChodywgbGlua19zdGEsIHNrYiwgJmFtcDtsaXN0KTsKIAkJfQogCX0KIAlzcGluX3VubG9jaygmYW1wO2Rldi0mZ3Q7cnhfbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2NvcmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY29yZS5jCmluZGV4IDBmMGU0NmNiNDI2MDUuLmRmOTZkMGE5Njc4NzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY29yZS5jCkBAIC0zMDM2LDcgJiM0MzszMDM2LDYgQEAgc3RhdGljIHZvaWQgcnR3ODlfdmlmX3J4X3N0YXRzX2l0ZXIodm9pZCAqZGF0YSwgdTggKm1hYywKIAlzdHJ1Y3QgcnR3ODlfdmlmICpydHd2aWYgPSB2aWZfdG9fcnR3dmlmKHZpZik7CiAJc3RydWN0IHJ0dzg5X3J4X2Rlc2NfaW5mbyAqZGVzY19pbmZvID0gaXRlcl9kYXRhLSZndDtkZXNjX2luZm87CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGl0ZXJfZGF0YS0mZ3Q7c2tiOwotCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLSZndDtkYXRhOwogCXN0cnVjdCBydHc4OV9yeF9waHlfcHBkdSAqcGh5X3BwZHUgPSBpdGVyX2RhdGEtJmd0O3BoeV9wcGR1OwogCWJvb2wgaXNfbWxkID0gaWVlZTgwMjExX3ZpZl9pc19tbGQodmlmKTsKQEAgLTMwNzMsMTEgJiM0MzszMDcyLDYgQEAgc3RhdGljIHZvaWQgcnR3ODlfdmlmX3J4X3N0YXRzX2l0ZXIodm9pZCAqZGF0YSwgdTggKm1hYywKIAlpZiAoIWV0aGVyX2FkZHJfZXF1YWwodGFyZ2V0X2Jzc2lkLCBic3NpZCkpCiAJCWdvdG8gb3V0OwogCi0JaWYgKGlzX21sZCkgewotCQlyeF9zdGF0dXMtJmd0O2xpbmtfdmFsaWQgPSB0cnVlOwotCQlyeF9zdGF0dXMtJmd0O2xpbmtfaWQgPSBydHd2aWZfbGluay0mZ3Q7bGlua19pZDsKLQl9Ci0KIAliYiA9IHJ0dzg5X2dldF9iYl9jdHgocnR3ZGV2LCBydHd2aWZfbGluay0mZ3Q7cGh5X2lkeCk7CiAJcGt0X3N0YXQgPSAmYW1wO2JiLSZndDtjdXJfcGt0X3N0YXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMKaW5kZXggMDJiNmQ4MWNjY2QxMS4uYTBkNTE5Y2Q5YzRmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMKQEAgLTE4ODAsOSAmIzQzOzE4ODAsNiBAQCBzdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9yeChzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YSwKIAkJCQlzcC0mZ3Q7YWN0aXZlX2xpbmtzX3J4ICZhbXA7PSB+QklUKGxpbmtfaWQpOwogCQkJZWxzZQogCQkJCXNwLSZndDthY3RpdmVfbGlua3NfcnggfD0gQklUKGxpbmtfaWQpOwotCi0JCQlyeF9zdGF0dXMtJmd0O2xpbmtfdmFsaWQgPSB0cnVlOwotCQkJcnhfc3RhdHVzLSZndDtsaW5rX2lkID0gbGlua19pZDsKIAkJfQogCQlyY3VfcmVhZF91bmxvY2soKTsKIAl9CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oIGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaAppbmRleCBkY2JiMGU1NWMzMmVjLi41OWJkMTUzMjMyMmQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmgKQEAgLTQwMDksNiAmIzQzOzQwMDksNyBAQCBzdHJ1Y3QgY2ZnODAyMTFfdXBkYXRlX2Z0X2llc19wYXJhbXMgewogICogQGxpbmtfaWQ6IGZvciBNTE8sIHRoZSBsaW5rIElEIHRvIHRyYW5zbWl0IG9uLCAtMSBpZiBub3QgZ2l2ZW47IG5vdGUKICAqCXRoYXQgdGhlIGxpbmsgSUQgaXNuJiMzOTt0IHZhbGlkYXRlZCAobXVjaCksIGl0JiMzOTtzIGluIHJhbmdlIGJ1dCB0aGUKICAqCWxpbmsgbWlnaHQgbm90IGV4aXN0IChvciBiZSB1c2VkIGJ5IHRoZSByZWNlaXZlciBTVEEpCiYjNDM7ICogQG5vX3N0YTogc2V0IGlmIHRoZSBmcmFtZSBzaG91bGQgbm90IGJlIHRyYW5zbWl0dGVkIHVzaW5nIGFuIGV4aXN0aW5nIFNUQQogICovCiBzdHJ1Y3QgY2ZnODAyMTFfbWdtdF90eF9wYXJhbXMgewogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbjsKQEAgLTQwMjEsNiAmIzQzOzQwMjIsNyBAQCBzdHJ1Y3QgY2ZnODAyMTFfbWdtdF90eF9wYXJhbXMgewogCWludCBuX2NzYV9vZmZzZXRzOwogCWNvbnN0IHUxNiAqY3NhX29mZnNldHM7CiAJaW50IGxpbmtfaWQ7CiYjNDM7CWJvb2wgbm9fc3RhOwogfTsKIAogLyoqCkBAIC05NDk5LDYgJiM0Mzs5NTAxLDcgQEAgdm9pZCBjZmc4MDIxMV9jb25uX2ZhaWxlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqbWFjX2FkZHIsCiAgKiBAZmxhZ3M6IGZsYWdzLCBhcyBkZWZpbmVkIGluICZhbXA7ZW51bSBubDgwMjExX3J4bWdtdF9mbGFncwogICogQHJ4X3RzdGFtcDogSGFyZHdhcmUgdGltZXN0YW1wIG9mIGZyYW1lIFJYIGluIG5hbm9zZWNvbmRzCiAgKiBAYWNrX3RzdGFtcDogSGFyZHdhcmUgdGltZXN0YW1wIG9mIGFjayBUWCBpbiBuYW5vc2Vjb25kcwomIzQzOyAqIEBub19zdGE6IHNldCBpZiBubyBzdGF0aW9uIGlzIGtub3duIGZvciB0aGUgZnJhbWUgKHJlbGV2YW50IGZvciBNTEQpCiAgKi8KIHN0cnVjdCBjZmc4MDIxMV9yeF9pbmZvIHsKIAlpbnQgZnJlcTsKQEAgLTk1MTAsNiAmIzQzOzk1MTMsNyBAQCBzdHJ1Y3QgY2ZnODAyMTFfcnhfaW5mbyB7CiAJdTMyIGZsYWdzOwogCXU2NCByeF90c3RhbXA7CiAJdTY0IGFja190c3RhbXA7CiYjNDM7CWJvb2wgbm9fc3RhOwogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaAppbmRleCA5ZDFmYWM2ZTgwODI5Li43YWFlNzI4ZTk2ZDg0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKQEAgLTE3NzAsMTAgJiM0MzsxNzcwLDkgQEAgZW51bSBtYWM4MDIxMV9yeF9lbmNvZGluZyB7CiAgKiBAYW1wZHVfcmVmZXJlbmNlOiBBLU1QRFUgcmVmZXJlbmNlIG51bWJlciwgbXVzdCBiZSBhIGRpZmZlcmVudCB2YWx1ZSBmb3IKICAqCWVhY2ggQS1NUERVIGJ1dCB0aGUgc2FtZSBmb3IgZWFjaCBzdWJmcmFtZSB3aXRoaW4gb25lIEEtTVBEVQogICogQHplcm9fbGVuZ3RoX3BzZHVfdHlwZTogcmFkaW90YXAgdHlwZSBvZiB0aGUgMC1sZW5ndGggUFNEVQotICogQGxpbmtfdmFsaWQ6IGlmIHRoZSBsaW5rIHdoaWNoIGlzIGlkZW50aWZpZWQgYnkgQGxpbmtfaWQgaXMgdmFsaWQuIFRoaXMgZmxhZwotICoJaXMgc2V0IG9ubHkgd2hlbiBjb25uZWN0aW9uIGlzIE1MTy4KLSAqIEBsaW5rX2lkOiBpZCBvZiB0aGUgbGluayB1c2VkIHRvIHJlY2VpdmUgdGhlIHBhY2tldC4gVGhpcyBpcyB1c2VkIGFsb25nIHdpdGgKLSAqCUBsaW5rX3ZhbGlkLgomIzQzOyAqIEBsaW5rX2lkOiBpZCBvZiB0aGUgbGluayB1c2VkIHRvIHJlY2VpdmUgdGhlIHBhY2tldC4gU2V0IGFuZCB1c2VkIGJ5CiYjNDM7ICoJbWFjODAyMTEgaW50ZXJuYWxseSwgaXQgdXNlcyBAZnJlcSBzZXQgYnkgdGhlIGRyaXZlciB0byBpZGVudGlmeSB0aGUKJiM0MzsgKgljb3JyZWN0IGxpbmsgcGVyIHZpZi4KICAqLwogc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgewogCXU2NCBtYWN0aW1lOwpAQCAtMTgxMyw3ICYjNDM7MTgxMiw3IEBAIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzIHsKIAl1OCBjaGFpbnM7CiAJczggY2hhaW5fc2lnbmFsW0lFRUU4MDIxMV9NQVhfQ0hBSU5TXTsKIAl1OCB6ZXJvX2xlbmd0aF9wc2R1X3R5cGU7Ci0JdTggbGlua192YWxpZDoxLCBsaW5rX2lkOjQ7CiYjNDM7CXU4IGxpbmtfaWQ6NDsKIH07CiAKIHN0YXRpY19hc3NlcnQoc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzKSAmbHQ7PSBzaXplb2ZfZmllbGQoc3RydWN0IHNrX2J1ZmYsIGNiKSk7CkBAIC01Mzg5LDE0ICYjNDM7NTM4OCwxOCBAQCB2b2lkIGllZWU4MDIxMV9yZXN0YXJ0X2h3KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKICAqIG1peGVkIGZvciBhIHNpbmdsZSBoYXJkd2FyZS4gTXVzdCBub3QgcnVuIGNvbmN1cnJlbnRseSB3aXRoCiAgKiBpZWVlODAyMTFfdHhfc3RhdHVzX3NrYigpIG9yIGllZWU4MDIxMV90eF9zdGF0dXNfbmkoKS4KICAqCiYjNDM7ICogRm9yIGRhdGEgZnJhbWVzLCB3aGVuIGhhcmR3YXJlIGhhcyBkb25lIGFkZHJlc3MgdHJhbnNsYXRpb24sIGEgbGluayBzdGF0aW9uCiYjNDM7ICogaGFzIHRvIGJlIHByb3ZpZGVkIGFuZCB0aGUgZnJlcXVlbmN5IGluZm9ybWF0aW9uIG1heSBiZSBza2lwcGVkLgomIzQzOyAqCiAgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggQkhzIGRpc2FibGVkIGFuZCBSQ1UgcmVhZCBsb2NrCiAgKgogICogQGh3OiB0aGUgaGFyZHdhcmUgdGhpcyBmcmFtZSBjYW1lIGluIG9uCi0gKiBAc3RhOiB0aGUgc3RhdGlvbiB0aGUgZnJhbWUgd2FzIHJlY2VpdmVkIGZyb20sIG9yICVOVUxMCiYjNDM7ICogQGxpbmtfc3RhOiB0aGUgbGluayBzdGF0aW9uIHRoZSBkYXRhIGZyYW1lIHdhcyByZWNlaXZlZCBmcm9tLCBvciAlTlVMTAogICogQHNrYjogdGhlIGJ1ZmZlciB0byByZWNlaXZlLCBvd25lZCBieSBtYWM4MDIxMSBhZnRlciB0aGlzIGNhbGwKICAqIEBsaXN0OiB0aGUgZGVzdGluYXRpb24gbGlzdAogICovCi12b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAomIzQzO3ZvaWQgaWVlZTgwMjExX3J4X2xpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiYjNDM7CQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEsCiAJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KTsKIAogLyoqCkBAIC01NDE0LDE0ICYjNDM7NTQxNywxOCBAQCB2b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogICogbWl4ZWQgZm9yIGEgc2luZ2xlIGhhcmR3YXJlLiBNdXN0IG5vdCBydW4gY29uY3VycmVudGx5IHdpdGgKICAqIGllZWU4MDIxMV90eF9zdGF0dXNfc2tiKCkgb3IgaWVlZTgwMjExX3R4X3N0YXR1c19uaSgpLgogICoKJiM0MzsgKiBGb3IgZGF0YSBmcmFtZXMsIHdoZW4gaGFyZHdhcmUgaGFzIGRvbmUgYWRkcmVzcyB0cmFuc2xhdGlvbiwgYSBsaW5rIHN0YXRpb24KJiM0MzsgKiBoYXMgdG8gYmUgcHJvdmlkZWQgYW5kIHRoZSBmcmVxdWVuY3kgaW5mb3JtYXRpb24gbWF5IGJlIHNraXBwZWQuCiYjNDM7ICoKICAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBCSHMgZGlzYWJsZWQuCiAgKgogICogQGh3OiB0aGUgaGFyZHdhcmUgdGhpcyBmcmFtZSBjYW1lIGluIG9uCi0gKiBAc3RhOiB0aGUgc3RhdGlvbiB0aGUgZnJhbWUgd2FzIHJlY2VpdmVkIGZyb20sIG9yICVOVUxMCiYjNDM7ICogQGxpbmtfc3RhOiB0aGUgbGluayBzdGF0aW9uIHRoZSBkYXRhIGZyYW1lIHdhcyByZWNlaXZlZCBmcm9tLCBvciAlTlVMTAogICogQHNrYjogdGhlIGJ1ZmZlciB0byByZWNlaXZlLCBvd25lZCBieSBtYWM4MDIxMSBhZnRlciB0aGlzIGNhbGwKICAqIEBuYXBpOiB0aGUgTkFQSSBjb250ZXh0CiAgKi8KLXZvaWQgaWVlZTgwMjExX3J4X25hcGkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiYjNDM7dm9pZCBpZWVlODAyMTFfcnhfbmFwaShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKJiM0MzsJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSwKIAkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSk7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmgKaW5kZXggMDIwMzg3ZDc2NDEyMi4uNDY1M2Y4ZjI2ZWU3MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oCkBAIC0zMTg1LDYgJiM0MzszMTg1LDExIEBAIGVudW0gbmw4MDIxMV9jb21tYW5kcyB7CiAgKglUaGUgYWdncmVnYXRlZCBtZXNzYWdlIGFsd2F5cyBwcmVjZWRlcyB0aGUgcGVyLWxpbmsgbWVzc2FnZXMgZm9yIHRoZQogICoJc2FtZSBzdGF0aW9uIHdpdGhpbiBhIGR1bXAgc2VxdWVuY2UuCiAgKgomIzQzOyAqIEBOTDgwMjExX0FUVFJfRlJBTUVfQ01EX05PX1NUQTogVmFsaWQgZm9yIE5MODAyMTFfQ01EX0ZSQU1FIHRvIGRlbm90ZSB0aGF0CiYjNDM7ICoJdGhlIGtlcm5lbCBoYWQgbm8gc3RhdGlvbiBmb3IgYSByZWNlaXZlZCBmcmFtZSBvciBzaG91bGQgbm90IHVzZSBhCiYjNDM7ICoJa25vd24gc3RhdGlvbiB0byB0cmFuc21pdCBhIGZyYW1lLiBUaGlzIGlzIHJlbGV2YW50IHRvIGtub3cgd2hldGhlcgomIzQzOyAqCU1MRCBhZGRyZXNzIHRyYW5zbGF0aW9uIGhhcHBlbmVkIG9yIHRvIGRpc2FibGUgaXQgd2hlbiBzZW5kaW5nIGEgZnJhbWUuCiYjNDM7ICoKICAqIEBOVU1fTkw4MDIxMV9BVFRSOiB0b3RhbCBudW1iZXIgb2Ygbmw4MDIxMV9hdHRycyBhdmFpbGFibGUKICAqIEBOTDgwMjExX0FUVFJfTUFYOiBoaWdoZXN0IGF0dHJpYnV0ZSBudW1iZXIgY3VycmVudGx5IGRlZmluZWQKICAqIEBfX05MODAyMTFfQVRUUl9BRlRFUl9MQVNUOiBpbnRlcm5hbCB1c2UKQEAgLTM3ODUsNiAmIzQzOzM3OTAsOCBAQCBlbnVtIG5sODAyMTFfYXR0cnMgewogCiAJTkw4MDIxMV9BVFRSX1NUQV9EVU1QX0xJTktfU1RBVFMsCiAKJiM0MzsJTkw4MDIxMV9BVFRSX0ZSQU1FX0NNRF9OT19TVEEsCiYjNDM7CiAJLyogYWRkIGF0dHJpYnV0ZXMgaGVyZSwgdXBkYXRlIHRoZSBwb2xpY3kgaW4gbmw4MDIxMS5jICovCiAKIAlfX05MODAyMTFfQVRUUl9BRlRFUl9MQVNULApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2FnZy10eC5jIGIvbmV0L21hYzgwMjExL2FnZy10eC5jCmluZGV4IDQ4MzNiNDY3NzBiNjIuLmRkOGExMWVmNmU1MmIgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9hZ2ctdHguYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvYWdnLXR4LmMKQEAgLTk4LDcgJiM0Mzs5OCw3IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zZW5kX2FkZGJhX3JlcXVlc3Qoc3RydWN0IHN0YV9pbmZvICpzdGEsIHUxNiB0aWQsCiAJaWYgKHN0YS0mZ3Q7c3RhLmRlZmxpbmsuaGVfY2FwLmhhc19oZSkKIAkJaWVlZTgwMjExX2FkZF9hZGRiYWV4dChza2IsIDAsIGFnZ19zaXplKTsKIAotCWllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIHRpZCwgLTEpOwomIzQzOwlpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCBOVUxMLCB0aWQsIC0xKTsKIH0KIAogdm9pZCBpZWVlODAyMTFfc2VuZF9iYXIoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgdTggKnJhLCB1MTYgdGlkLCB1MTYgc3NuKQpAQCAtMTI3LDcgJiM0MzsxMjcsNyBAQCB2b2lkIGllZWU4MDIxMV9zZW5kX2JhcihzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCB1OCAqcmEsIHUxNiB0aWQsIHUxNiBzc24pCiAKIAlJRUVFODAyMTFfU0tCX0NCKHNrYiktJmd0O2ZsYWdzIHw9IElFRUU4MDIxMV9UWF9JTlRGTF9ET05UX0VOQ1JZUFQgfAogCQkJCQlJRUVFODAyMTFfVFhfQ1RMX1JFUV9UWF9TVEFUVVM7Ci0JaWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgdGlkLCAtMSk7CiYjNDM7CWllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIE5VTEwsIHRpZCwgLTEpOwogfQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc2VuZF9iYXIpOwogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvYXAuYyBiL25ldC9tYWM4MDIxMS9hcC5jCmluZGV4IGU3YWM5OWM1YTIyZWIuLmZlMjU1ODkxYzM1ZjAgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9hcC5jCkBAIC04Miw5ICYjNDM7ODIsNiBAQCBpZWVlODAyMTFfcnhfZW1sX29wX21vZGVfbm90aWYoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJaWYgKCFpZnRfZXh0X2NhcGEpCiAJCXJldHVybjsKIAotCWlmICghc3RhdHVzLSZndDtsaW5rX3ZhbGlkKQotCQlyZXR1cm47Ci0KIAlzdGEgPSBzdGFfaW5mb19nZXRfYnNzKHNkYXRhLCBtZ210LSZndDtzYSk7CiAJaWYgKCFzdGEpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9odC5jIGIvbmV0L21hYzgwMjExL2h0LmMKaW5kZXggZTFlMWI3ZjgyZjNmZS4uYzVjMjExM2ZhNGY3OSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2h0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2h0LmMKQEAgLTU0NSw3ICYjNDM7NTQ1LDcgQEAgaW50IGllZWU4MDIxMV9zZW5kX3NtcHNfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCWluZm8tJmd0O3N0YXR1c19kYXRhID0gSUVFRTgwMjExX1NUQVRVU19UWVBFX1NNUFMgfAogCQkJICAgIHUxNl9lbmNvZGVfYml0cyhzdGF0dXNfbGlua19pZCAmbHQ7Jmx0OyAyIHwgc21wcywKIAkJCQkJICAgIElFRUU4MDIxMV9TVEFUVVNfU1VCREFUQV9NQVNLKTsKLQlpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCA3LCBsaW5rX2lkKTsKJiM0MzsJaWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgTlVMTCwgNywgbGlua19pZCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKaW5kZXggYTFlZjg4ZmU4NDZkZC4uMzhkODZiMGExMGY1YSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKQEAgLTI0NjYsNyAmIzQzOzI0NjYsOCBAQCB2b2lkIGllZWU4MDIxMV94bWl0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkgICAgc3RydWN0IHN0YV9pbmZvICpzdGEsIHN0cnVjdCBza19idWZmICpza2IpOwogCiB2b2lkIF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRpZCwgaW50IGxpbmtfaWQsCiYjNDM7CQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKJiM0MzsJCQkJIGludCB0aWQsIGludCBsaW5rX2lkLAogCQkJCSBlbnVtIG5sODAyMTFfYmFuZCBiYW5kKTsKIAogc3RhdGljIGlubGluZSBib29sIGllZWU4MDIxMV9yZXF1aXJlX2VuY3J5cHRlZF9hc3NvYyhfX2xlMTYgZmMsCkBAIC0yNDg2LDE4ICYjNDM7MjQ4NywyMCBAQCBpZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJICBlbnVtIG5sODAyMTFfYmFuZCBiYW5kKQogewogCXJjdV9yZWFkX2xvY2soKTsKLQlfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc2RhdGEsIHNrYiwgdGlkLCAtMSwgYmFuZCk7CiYjNDM7CV9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzZGF0YSwgc2tiLCBFUlJfUFRSKC1FTk9FTlQpLAomIzQzOwkJCQkgICAgdGlkLCAtMSwgYmFuZCk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKIHZvaWQgaWVlZTgwMjExX3R4X3NrYl90aWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkgIHN0cnVjdCBza19idWZmICpza2IsIGludCB0aWQsIGludCBsaW5rX2lkKTsKJiM0MzsJCQkgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzdGFfaW5mbyAqc3RhLAomIzQzOwkJCSAgaW50IHRpZCwgaW50IGxpbmtfaWQpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX3R4X3NrYihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAkvKiBTZW5kIGFsbCBpbnRlcm5hbCBtZ210IGZyYW1lcyBvbiBWTy4gQWNjb3JkaW5nbHkgc2V0IFRJRCB0byA3LiAqLwotCWllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIDcsIC0xKTsKJiM0MzsJaWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgTlVMTCwgNywgLTEpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZmFjZS5jIGIvbmV0L21hYzgwMjExL2lmYWNlLmMKaW5kZXggNDM0NjBhNzA1YTZiZC4uYTBiMjE0ZGJiOGFmOCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2lmYWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2lmYWNlLmMKQEAgLTE2NzMsMTEgJiM0MzsxNjczLDggQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX2lmYWNlX3Byb2Nlc3Nfc2tiKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJCWJyZWFrOwogCiAJCQlzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTsKLQkJCWlmICghc3RhdHVzLSZndDtsaW5rX3ZhbGlkKQotCQkJCWxpbmtfc3RhID0gJmFtcDtzdGEtJmd0O2RlZmxpbms7Ci0JCQllbHNlCi0JCQkJbGlua19zdGEgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHN0YS0mZ3Q7bGlua1tzdGF0dXMtJmd0O2xpbmtfaWRdLAotCQkJCQkJCWxvY2tkZXBfaXNfaGVsZCgmYW1wO2xvY2FsLSZndDtody53aXBoeS0mZ3Q7bXR4KSk7CiYjNDM7CQkJbGlua19zdGEgPSB3aXBoeV9kZXJlZmVyZW5jZShsb2NhbC0mZ3Q7aHcud2lwaHksCiYjNDM7CQkJCQkJICAgICBzdGEtJmd0O2xpbmtbc3RhdHVzLSZndDtsaW5rX2lkXSk7CiAJCQlpZiAobGlua19zdGEpCiAJCQkJaWVlZTgwMjExX2h0X2hhbmRsZV9jaGFud2lkdGhfbm90aWYobG9jYWwsIHNkYXRhLCBzdGEsCiAJCQkJCQkJCSAgICBsaW5rX3N0YSwgY2hhbndpZHRoLApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21sbWUuYyBiL25ldC9tYWM4MDIxMS9tbG1lLmMKaW5kZXggZjUxMTY3ZjBmYzQ2ZC4uMzYxNzc1ZmI5MzFlYyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21sbWUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvbWxtZS5jCkBAIC0xMTgzMSwxMiAmIzQzOzExODMxLDEwIEBAIHZvaWQgaWVlZTgwMjExX3N0YV9yeF9xdWV1ZWRfZnJhbWUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJcnhfc3RhdHVzID0gKHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICopIHNrYi0mZ3Q7Y2I7CiAJZmMgPSBsZTE2X3RvX2NwdShtZ210LSZndDtmcmFtZV9jb250cm9sKTsKIAotCWlmIChyeF9zdGF0dXMtJmd0O2xpbmtfdmFsaWQpIHsKLQkJbGluayA9IHNkYXRhX2RlcmVmZXJlbmNlKHNkYXRhLSZndDtsaW5rW3J4X3N0YXR1cy0mZ3Q7bGlua19pZF0sCi0JCQkJCSBzZGF0YSk7Ci0JCWlmICghbGluaykKLQkJCXJldHVybjsKLQl9CiYjNDM7CWxpbmsgPSBzZGF0YV9kZXJlZmVyZW5jZShzZGF0YS0mZ3Q7bGlua1tyeF9zdGF0dXMtJmd0O2xpbmtfaWRdLAomIzQzOwkJCQkgc2RhdGEpOwomIzQzOwlpZiAoIWxpbmspCiYjNDM7CQlyZXR1cm47CiAKIAlzd2l0Y2ggKGZjICZhbXA7IElFRUU4MDIxMV9GQ1RMX1NUWVBFKSB7CiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfQkVBQ09OOgpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL29mZmNoYW5uZWwuYyBiL25ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmMKaW5kZXggMmJjZWI3MzcxN2M2Ni4uMzgzNGY1OTZhZjE3OCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL29mZmNoYW5uZWwuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jCkBAIC04NTYsOCAmIzQzOzg1NiwxMCBAQCBpbnQgaWVlZTgwMjExX21nbXRfdHgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKIAkJCW5lZWRfb2ZmY2hhbiA9IHRydWU7CiAKIAkJcmN1X3JlYWRfbG9jaygpOwotCQlzdGEgPSBzdGFfaW5mb19nZXRfYnNzKHNkYXRhLCBtZ210LSZndDtkYSk7Ci0JCW1sb19zdGEgPSBzdGEgJmFtcDsmYW1wOyBzdGEtJmd0O3N0YS5tbG87CiYjNDM7CQlpZiAoIXBhcmFtcy0mZ3Q7bm9fc3RhKSB7CiYjNDM7CQkJc3RhID0gc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgbWdtdC0mZ3Q7ZGEpOwomIzQzOwkJCW1sb19zdGEgPSBzdGEgJmFtcDsmYW1wOyBzdGEtJmd0O3N0YS5tbG87CiYjNDM7CQl9CiAKIAkJaWYgKCFpZWVlODAyMTFfaXNfYWN0aW9uKG1nbXQtJmd0O2ZyYW1lX2NvbnRyb2wpIHx8CiAJCSAgICBtZ210LSZndDt1LmFjdGlvbi5jYXRlZ29yeSA9PSBXTEFOX0NBVEVHT1JZX1BVQkxJQyB8fApAQCAtODg2LDcgJiM0Mzs4ODgsOCBAQCBpbnQgaWVlZTgwMjExX21nbXRfdHgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKIAkJICAgICBsb2NhbC0mZ3Q7b3BzLSZndDtyZW1haW5fb25fY2hhbm5lbCAmYW1wOyZhbXA7CiAJCSAgICAgbWVtY21wKHNkYXRhLSZndDt2aWYuY2ZnLmFwX2FkZHIsIG1nbXQtJmd0O2Jzc2lkLCBFVEhfQUxFTikpKSB7CiAJCQluZWVkX29mZmNoYW4gPSB0cnVlOwotCQl9IGVsc2UgaWYgKHNkYXRhLSZndDt1Lm1nZC5hc3NvY2lhdGVkICZhbXA7JmFtcDsKJiM0MzsJCX0gZWxzZSBpZiAoIXBhcmFtcy0mZ3Q7bm9fc3RhICZhbXA7JmFtcDsKJiM0MzsJCQkgICBzZGF0YS0mZ3Q7dS5tZ2QuYXNzb2NpYXRlZCAmYW1wOyZhbXA7CiAJCQkgICBldGhlcl9hZGRyX2VxdWFsKHNkYXRhLSZndDt2aWYuY2ZnLmFwX2FkZHIsIG1nbXQtJmd0O2RhKSkgewogCQkJc3RhID0gc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgbWdtdC0mZ3Q7ZGEpOwogCQkJbWxvX3N0YSA9IHN0YSAmYW1wOyZhbXA7IHN0YS0mZ3Q7c3RhLm1sbzsKQEAgLTEwMzEsNyAmIzQzOzEwMzQsOSBAQCBpbnQgaWVlZTgwMjExX21nbXRfdHgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwKIAl9CiAKIAlpZiAoIW5lZWRfb2ZmY2hhbikgewotCQlpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCA3LCBsaW5rX2lkKTsKJiM0MzsJCWllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsCiYjNDM7CQkJCSAgICAgcGFyYW1zLSZndDtub19zdGEgPyBzdGEgOiBFUlJfUFRSKC1FTk9FTlQpLAomIzQzOwkJCQkgICAgIDcsIGxpbmtfaWQpOwogCQlyZXQgPSAwOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3J4LmMgYi9uZXQvbWFjODAyMTEvcnguYwppbmRleCA1ZTI2YmU4ZTI3ZDhmLi5lZDVhMmUwNTkwNzU3IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvcnguYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvcnguYwpAQCAtMjIyLDQzICYjNDM7MjIyLDIxIEBAIGllZWU4MDIxMV9yeF9yYWRpb3RhcF9oZHJsZW4oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiB9CiAKIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkJICAgaW50IGxpbmtfaWQsCi0JCQkJCSAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLAomIzQzOwkJCQkJICAgc3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhLAogCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTsKLQotCWlmIChsaW5rX2lkICZndDs9IDApIHsKLQkJc3RhdHVzLSZndDtsaW5rX3ZhbGlkID0gMTsKLQkJc3RhdHVzLSZndDtsaW5rX2lkID0gbGlua19pZDsKLQl9IGVsc2UgewotCQlzdGF0dXMtJmd0O2xpbmtfdmFsaWQgPSAwOwotCX0KLQogCXNrYl9xdWV1ZV90YWlsKCZhbXA7c2RhdGEtJmd0O3NrYl9xdWV1ZSwgc2tiKTsKIAl3aXBoeV93b3JrX3F1ZXVlKHNkYXRhLSZndDtsb2NhbC0mZ3Q7aHcud2lwaHksICZhbXA7c2RhdGEtJmd0O3dvcmspOwotCWlmIChzdGEpIHsKLQkJc3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhX2luZm87Ci0KLQkJaWYgKGxpbmtfaWQgJmd0Oz0gMCkgewotCQkJbGlua19zdGFfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZShzdGEtJmd0O2xpbmtbbGlua19pZF0pOwotCQkJaWYgKCFsaW5rX3N0YV9pbmZvKQotCQkJCXJldHVybjsKLQkJfSBlbHNlIHsKLQkJCWxpbmtfc3RhX2luZm8gPSAmYW1wO3N0YS0mZ3Q7ZGVmbGluazsKLQkJfQotCi0JCWxpbmtfc3RhX2luZm8tJmd0O3J4X3N0YXRzLnBhY2tldHMmIzQzOyYjNDM7OwotCX0KJiM0MzsJaWYgKGxpbmtfc3RhKQomIzQzOwkJbGlua19zdGEtJmd0O3J4X3N0YXRzLnBhY2tldHMmIzQzOyYjNDM7OwogfQogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCQkgaW50IGxpbmtfaWQsCi0JCQkJCSBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKJiM0MzsJCQkJCSBzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEsCiAJCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXNrYi0mZ3Q7cHJvdG9jb2wgPSAwOwotCV9faWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgbGlua19pZCwgc3RhLCBza2IpOwomIzQzOwlfX2llZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIGxpbmtfc3RhLCBza2IpOwogfQogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfaGFuZGxlX211X21pbW9fbW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLApAQCAtMzAxLDcgJiM0MzsyNzksNyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfaGFuZGxlX211X21pbW9fbW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCWlmICghc2tiKQogCQlyZXR1cm47CiAKLQlpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCAtMSwgTlVMTCwgc2tiKTsKJiM0MzsJaWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgTlVMTCwgc2tiKTsKIH0KIAogLyoKQEAgLTE0OTgsNyAmIzQzOzE0NzYsNyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfcmVvcmRlcl9hbXBkdShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LAogCS8qIGlmIHRoaXMgbXBkdSBpcyBmcmFnbWVudGVkIC0gdGVybWluYXRlIHJ4IGFnZ3JlZ2F0aW9uIHNlc3Npb24gKi8KIAlzYyA9IGxlMTZfdG9fY3B1KGhkci0mZ3Q7c2VxX2N0cmwpOwogCWlmIChzYyAmYW1wOyBJRUVFODAyMTFfU0NUTF9GUkFHKSB7Ci0JCWllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2UocngtJmd0O3NkYXRhLCByeC0mZ3Q7bGlua19pZCwgTlVMTCwgc2tiKTsKJiM0MzsJCWllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2UocngtJmd0O3NkYXRhLCBOVUxMLCBza2IpOwogCQlyZXR1cm47CiAJfQogCkBAIC0yNTI0LDcgJiM0MzsyNTAyLDcgQEAgaWVlZTgwMjExX3J4X2hfZGVmcmFnbWVudChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQogCiAgb3V0OgogCWllZWU4MDIxMV9sZWRfcngocngtJmd0O2xvY2FsKTsKLQlpZiAocngtJmd0O3N0YSkKJiM0MzsJaWYgKHJ4LSZndDtsaW5rX3N0YSkKIAkJcngtJmd0O2xpbmtfc3RhLSZndDtyeF9zdGF0cy5wYWNrZXRzJiM0MzsmIzQzOzsKIAlyZXR1cm4gUlhfQ09OVElOVUU7CiB9CkBAIC0zMzM1LDggJiM0MzszMzEzLDggQEAgaWVlZTgwMjExX3J4X2hfZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQogCQkgICAgKHRmLSZndDthY3Rpb25fY29kZSA9PSBXTEFOX1RETFNfQ0hBTk5FTF9TV0lUQ0hfUkVRVUVTVCB8fAogCQkgICAgIHRmLSZndDthY3Rpb25fY29kZSA9PSBXTEFOX1RETFNfQ0hBTk5FTF9TV0lUQ0hfUkVTUE9OU0UpKSB7CiAJCQlyeC0mZ3Q7c2tiLSZndDtwcm90b2NvbCA9IGNwdV90b19iZTE2KEVUSF9QX1RETFMpOwotCQkJX19pZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC0mZ3Q7bGlua19pZCwKLQkJCQkJCSAgICAgICByeC0mZ3Q7c3RhLCByeC0mZ3Q7c2tiKTsKJiM0MzsJCQlfX2llZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIHJ4LSZndDtsaW5rX3N0YSwKJiM0MzsJCQkJCQkgICAgICAgcngtJmd0O3NrYik7CiAJCQlyZXR1cm4gUlhfUVVFVUVEOwogCQl9CiAJfQpAQCAtMzk5MSw3ICYjNDM7Mzk2OSw3IEBAIGllZWU4MDIxMV9yeF9oX2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQogCXJldHVybiBSWF9RVUVVRUQ7CiAKICBxdWV1ZToKLQlpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC0mZ3Q7bGlua19pZCwgcngtJmd0O3N0YSwgcngtJmd0O3NrYik7CiYjNDM7CWllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIHJ4LSZndDtsaW5rX3N0YSwgcngtJmd0O3NrYik7CiAJcmV0dXJuIFJYX1FVRVVFRDsKIH0KIApAQCAtNDAwNSw2ICYjNDM7Mzk4Myw3IEBAIGllZWU4MDIxMV9yeF9oX3VzZXJzcGFjZV9tZ210KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpCiAJCS5sZW4gPSByeC0mZ3Q7c2tiLSZndDtsZW4sCiAJCS5saW5rX2lkID0gcngtJmd0O2xpbmtfaWQsCiAJCS5oYXZlX2xpbmtfaWQgPSByeC0mZ3Q7bGlua19pZCAmZ3Q7PSAwLAomIzQzOwkJLm5vX3N0YSA9ICFyeC0mZ3Q7c3RhLAogCX07CiAKIAkvKiBza2lwIGtub3duLWJhZCBhY3Rpb24gZnJhbWVzIGFuZCByZXR1cm4gdGhlbSBpbiB0aGUgbmV4dCBoYW5kbGVyICovCkBAIC00MTI3LDcgJiM0Mzs0MTA2LDcgQEAgaWVlZTgwMjExX3J4X2hfYWN0aW9uX3JldHVybihzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQogCQkJCQlsb2NhbC0mZ3Q7aHcub2ZmY2hhbm5lbF90eF9od19xdWV1ZTsKIAkJfQogCi0JCV9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChyeC0mZ3Q7c2RhdGEsIG5za2IsIDcsIC0xLAomIzQzOwkJX19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHJ4LSZndDtzZGF0YSwgbnNrYiwgcngtJmd0O3N0YSwgNywgLTEsCiAJCQkJCSAgICBzdGF0dXMtJmd0O2JhbmQpOwogCX0KIApAQCAtNDE0Nyw3ICYjNDM7NDEyNiw3IEBAIGllZWU4MDIxMV9yeF9oX2V4dChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQogCQlyZXR1cm4gUlhfRFJPUF9VX1VORVhQRUNURURfRVhUX0ZSQU1FOwogCiAJLyogZm9yIG5vdyBvbmx5IGJlYWNvbnMgYXJlIGV4dCwgc28gcXVldWUgdGhlbSAqLwotCWllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIHJ4LSZndDtsaW5rX2lkLCByeC0mZ3Q7c3RhLCByeC0mZ3Q7c2tiKTsKJiM0MzsJaWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgcngtJmd0O2xpbmtfc3RhLCByeC0mZ3Q7c2tiKTsKIAogCXJldHVybiBSWF9RVUVVRUQ7CiB9CkBAIC00MjA0LDcgJiM0Mzs0MTgzLDcgQEAgaWVlZTgwMjExX3J4X2hfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQogCQlyZXR1cm4gUlhfRFJPUF9VX1VOSEFORExFRF9NR01UX1NUWVBFOwogCX0KIAotCWllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIHJ4LSZndDtsaW5rX2lkLCByeC0mZ3Q7c3RhLCByeC0mZ3Q7c2tiKTsKJiM0MzsJaWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgcngtJmd0O2xpbmtfc3RhLCByeC0mZ3Q7c2tiKTsKIAogCXJldHVybiBSWF9RVUVVRUQ7CiB9CkBAIC00MjQ4LDEyICYjNDM7NDIyNywyOCBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfaGFuZGxlcnMoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCwKIAlzcGluX2xvY2tfYmgoJmFtcDtyeC0mZ3Q7bG9jYWwtJmd0O3J4X3BhdGhfbG9jayk7CiAKIAl3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoZnJhbWVzKSkpIHsKJiM0MzsJCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTsKJiM0MzsKIAkJLyoKLQkJICogYWxsIHRoZSBvdGhlciBmaWVsZHMgYXJlIHZhbGlkIGFjcm9zcyBmcmFtZXMKLQkJICogdGhhdCBiZWxvbmcgdG8gYW4gYU1QRFUgc2luY2UgdGhleSBhcmUgb24gdGhlCi0JCSAqIHNhbWUgVElEIGZyb20gdGhlIHNhbWUgc3RhdGlvbgomIzQzOwkJICogTW9zdCBmaWVsZHMgYXJlIHZhbGlkIGFjcm9zcyBmcmFtZXMuIEhvd2V2ZXIsCiYjNDM7CQkgKiBpbiB0aGUgY2FzZSBvZiByZW9yZGVyaW5nIGZyYW1lcyBtYXkgaGF2ZSBhcnJpdmVkCiYjNDM7CQkgKiBvbiBkaWZmZXJlbnQgbGlua3MsIHNvIGFkanVzdCB0aGUgbGlua19pZCwgbGluawomIzQzOwkJICogYW5kIGxpbmtfc3RhIGFjY29yZGluZ2x5LgogCQkgKi8KIAkJcngtJmd0O3NrYiA9IHNrYjsKJiM0MzsJCWlmIChpZWVlODAyMTFfdmlmX2lzX21sZCgmYW1wO3J4LSZndDtzZGF0YS0mZ3Q7dmlmKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgdW5saWtlbHkocngtJmd0O2xpbmtfaWQgIT0gc3RhdHVzLSZndDtsaW5rX2lkKSkgewomIzQzOwkJCWlmIChyeC0mZ3Q7c3RhKSB7CiYjNDM7CQkJCXJ4LSZndDtsaW5rX3N0YSA9CiYjNDM7CQkJCQlyY3VfZGVyZWZlcmVuY2UocngtJmd0O3N0YS0mZ3Q7bGlua1tyeC0mZ3Q7bGlua19pZF0pOwomIzQzOwomIzQzOwkJCQkvKiBMaW5rIGdvdCBkaXNhYmxlZCwganVzdCB1c2UgZGVmbGluayAqLwomIzQzOwkJCQlpZiAoIXJ4LSZndDtsaW5rX3N0YSkKJiM0MzsJCQkJCXJ4LSZndDtsaW5rX3N0YSA9ICZhbXA7cngtJmd0O3N0YS0mZ3Q7ZGVmbGluazsKJiM0MzsJCQl9CiYjNDM7CQkJcngtJmd0O2xpbmtfaWQgPSBzdGF0dXMtJmd0O2xpbmtfaWQ7CiYjNDM7CQkJcngtJmd0O2xpbmsgPSByY3VfZGVyZWZlcmVuY2UocngtJmd0O3NkYXRhLSZndDtsaW5rW3N0YXR1cy0mZ3Q7bGlua19pZF0pOwomIzQzOwkJfQogCiAJCWlmIChXQVJOX09OX09OQ0UoIXJ4LSZndDtsaW5rKSkgewogCQkJcmVzID0gUlhfRFJPUF9VX05PX0xJTks7CkBAIC00MzIzLDcgJiM0Mzs0MzE4LDM0IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9pbnZva2VfcnhfaGFuZGxlcnMoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKIHN0YXRpYyBib29sCiBpZWVlODAyMTFfcnhfaXNfdmFsaWRfc3RhX2xpbmtfaWQoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTggbGlua19pZCkKIHsKLQlyZXR1cm4gISEoc3RhLSZndDt2YWxpZF9saW5rcyAmYW1wOyBCSVQobGlua19pZCkpOwomIzQzOwlpZiAoc3RhLSZndDttbG8pCiYjNDM7CQlyZXR1cm4gc3RhLSZndDt2YWxpZF9saW5rcyAmYW1wOyBCSVQobGlua19pZCk7CiYjNDM7CiYjNDM7CXJldHVybiBzdGEtJmd0O2RlZmxpbmsubGlua19pZCA9PSBsaW5rX2lkOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGlua19zdGEoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCwKJiM0MzsJCQkJCSAgIHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzdGFfaW5mbyAqc3RhOwomIzQzOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCFsaW5rX3N0YSkgfHwKJiM0MzsJICAgICFpZWVlODAyMTFfcnhfaXNfdmFsaWRfc3RhX2xpbmtfaWQoJmFtcDtsaW5rX3N0YS0mZ3Q7c3RhLSZndDtzdGEsCiYjNDM7CQkJCQkgICAgICAgbGlua19zdGEtJmd0O2xpbmtfaWQpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlzdGEgPSBsaW5rX3N0YS0mZ3Q7c3RhOwomIzQzOwomIzQzOwlyeC0mZ3Q7c3RhID0gc3RhOwomIzQzOwlyeC0mZ3Q7bG9jYWwgPSBzdGEtJmd0O3NkYXRhLSZndDtsb2NhbDsKJiM0MzsJcngtJmd0O2xpbmsgPSByY3VfZGVyZWZlcmVuY2Uoc3RhLSZndDtzZGF0YS0mZ3Q7bGlua1tsaW5rX3N0YS0mZ3Q7bGlua19pZF0pOwomIzQzOwlpZiAoIXJ4LSZndDtsaW5rKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyeC0mZ3Q7bGlua19pZCA9IHJ4LSZndDtsaW5rLSZndDtsaW5rX2lkOwomIzQzOwlyeC0mZ3Q7bGlua19zdGEgPSBsaW5rX3N0YTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBib29sIGllZWU4MDIxMV9yeF9kYXRhX3NldF9saW5rKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsCkBAIC00MzYwLDExICYjNDM7NDM4MiwxMyBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfcnhfZGF0YV9zZXRfc3RhKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsCiAKIAlpZiAobGlua19pZCAmbHQ7IDApIHsKIAkJaWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKCZhbXA7cngtJmd0O3NkYXRhLSZndDt2aWYpICZhbXA7JmFtcDsKLQkJICAgIHN0YSAmYW1wOyZhbXA7ICFzdGEtJmd0O3N0YS52YWxpZF9saW5rcykKJiM0MzsJCSAgICBzdGEgJmFtcDsmYW1wOyAhc3RhLSZndDtzdGEudmFsaWRfbGlua3MpIHsKIAkJCXJ4LSZndDtsaW5rID0KIAkJCQlyY3VfZGVyZWZlcmVuY2UocngtJmd0O3NkYXRhLSZndDtsaW5rW3N0YS0mZ3Q7ZGVmbGluay5saW5rX2lkXSk7Ci0JCWVsc2UKJiM0MzsJCQlyeC0mZ3Q7bGlua19zdGEgPSByY3VfZGVyZWZlcmVuY2UocngtJmd0O3N0YS0mZ3Q7bGlua1tsaW5rX2lkXSk7CiYjNDM7CQl9IGVsc2UgewogCQkJcngtJmd0O2xpbmsgPSAmYW1wO3J4LSZndDtzZGF0YS0mZ3Q7ZGVmbGluazsKJiM0MzsJCX0KIAl9IGVsc2UgaWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGluayhyeCwgbGlua19pZCkpIHsKIAkJcmV0dXJuIGZhbHNlOwogCX0KQEAgLTQzODcsNyAmIzQzOzQ0MTEsNyBAQCB2b2lkIGllZWU4MDIxMV9yZWxlYXNlX3Jlb3JkZXJfdGltZW91dChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgaW50IHRpZCkKIAlzdHJ1Y3QgdGlkX2FtcGR1X3J4ICp0aWRfYWdnX3J4OwogCWludCBsaW5rX2lkID0gLTE7CiAKLQkvKiBGSVhNRTogc3RhdGlzdGljcyB3b24mIzM5O3QgYmUgcmlnaHQgd2l0aCB0aGlzICovCiYjNDM7CS8qIE5PVEU6IHRoZSBjb3JyZWN0IGxpbmsgU1RBIGZvciB0aGUgZnJhbWUgaXMgc2V0IGxhdGVyICovCiAJaWYgKHN0YS0mZ3Q7c3RhLnZhbGlkX2xpbmtzKQogCQlsaW5rX2lkID0gZmZzKHN0YS0mZ3Q7c3RhLnZhbGlkX2xpbmtzKSAtIDE7CiAKQEAgLTQ5MTQsMjAgJiM0Mzs0OTM4LDE0IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF84MDIzKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsCiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdGFfcnhfc3RhdHMgKnN0YXRzOwogCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0IocngtJmd0O3NrYik7Ci0Jc3RydWN0IHN0YV9pbmZvICpzdGEgPSByeC0mZ3Q7c3RhOwotCXN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YTsKJiM0MzsJc3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhID0gcngtJmd0O2xpbmtfc3RhOwogCXN0cnVjdCBza19idWZmICpza2IgPSByeC0mZ3Q7c2tiOwogCXZvaWQgKnNhID0gc2tiLSZndDtkYXRhICYjNDM7IEVUSF9BTEVOOwogCXZvaWQgKmRhID0gc2tiLSZndDtkYXRhOwogCi0JaWYgKHJ4LSZndDtsaW5rX2lkICZndDs9IDApIHsKLQkJbGlua19zdGEgPSByY3VfZGVyZWZlcmVuY2Uoc3RhLSZndDtsaW5rW3J4LSZndDtsaW5rX2lkXSk7Ci0JCWlmIChXQVJOX09OX09OQ0UoIWxpbmtfc3RhKSkgewotCQkJZGV2X2tmcmVlX3NrYihyeC0mZ3Q7c2tiKTsKLQkJCXJldHVybjsKLQkJfQotCX0gZWxzZSB7Ci0JCWxpbmtfc3RhID0gJmFtcDtzdGEtJmd0O2RlZmxpbms7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UoIWxpbmtfc3RhKSkgewomIzQzOwkJZGV2X2tmcmVlX3NrYihyeC0mZ3Q7c2tiKTsKJiM0MzsJCXJldHVybjsKIAl9CiAKIAlzdGF0cyA9ICZhbXA7bGlua19zdGEtJmd0O3J4X3N0YXRzOwpAQCAtNTE1NCw2ICYjNDM7NTE3Miw5IEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9pbnZva2VfZmFzdF9yeChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LAogCQlnb3RvIGRyb3A7CiAJfQogCiYjNDM7CXN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpOwomIzQzOwlzdGF0dXMtJmd0O2xpbmtfaWQgPSByeC0mZ3Q7bGlua19pZCAmbHQ7IDAgPyAwIDogcngtJmd0O2xpbmtfaWQ7CiYjNDM7CiAJaWVlZTgwMjExX3J4XzgwMjMocngsIGZhc3RfcngsIG9yaWdfbGVuKTsKIAogCXJldHVybiB0cnVlOwpAQCAtNTE3OCw2ICYjNDM7NTE5OSw3IEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCwKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKilza2ItJmd0O2RhdGE7CiAJc3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhID0gcngtJmd0O2xpbmtfc3RhOwogCXN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rID0gcngtJmd0O2xpbms7CiYjNDM7CXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXM7CiAKIAlyeC0mZ3Q7c2tiID0gc2tiOwogCkBAIC01MjIxLDYgJiM0Mzs1MjQzLDkgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LAogCQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilyeC0mZ3Q7c2tiLSZndDtkYXRhOwogCX0KIAomIzQzOwlzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0IocngtJmd0O3NrYik7CiYjNDM7CXN0YXR1cy0mZ3Q7bGlua19pZCA9IHJ4LSZndDtsaW5rX2lkICZsdDsgMCA/IDAgOiByeC0mZ3Q7bGlua19pZDsKJiM0MzsKIAlpZiAoaWVlZTgwMjExX2lzX3MxZ19iZWFjb24oaGRyLSZndDtmcmFtZV9jb250cm9sKSkgewogCQlpZWVlODAyMTFfaW52b2tlX3J4X2hhbmRsZXJzKHJ4KTsKIAkJcmV0dXJuIHRydWU7CkBAIC01MjU2LDIyICYjNDM7NTI4MSwxOSBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsCiB9CiAKIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J4X2hhbmRsZV84MDIzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLAomIzQzOwkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19wdWJzdGEsCiAJCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7Ci0Jc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpOwogCXN0cnVjdCBpZWVlODAyMTFfZmFzdF9yeCAqZmFzdF9yeDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgcng7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7Ci0JaW50IGxpbmtfaWQgPSAtMTsKIAogCW1lbXNldCgmYW1wO3J4LCAwLCBzaXplb2YocngpKTsKIAlyeC5za2IgPSBza2I7CiAJcngubG9jYWwgPSBsb2NhbDsKIAlyeC5saXN0ID0gbGlzdDsKLQlyeC5saW5rX2lkID0gLTE7CiAKIAlJODAyX0RFQlVHX0lOQyhsb2NhbC0mZ3Q7ZG90MTFSZWNlaXZlZEZyYWdtZW50Q291bnQpOwogCkBAIC01Mjc5LDIzICYjNDM7NTMwMSwxNSBAQCBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfODAyMyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAlpZiAoc2tiLSZndDtsZW4gJmx0OyBzaXplb2Yoc3RydWN0IGV0aGhkcikpCiAJCWdvdG8gZHJvcDsKIAotCWlmICghcHVic3RhKQomIzQzOwlpZiAoIWxpbmtfcHVic3RhKQogCQlnb3RvIGRyb3A7CiAKLQlpZiAoc3RhdHVzLSZndDtsaW5rX3ZhbGlkKQotCQlsaW5rX2lkID0gc3RhdHVzLSZndDtsaW5rX2lkOwotCi0JLyoKLQkgKiBUT0RPOiBTaG91bGQgdGhlIGZyYW1lIGJlIGRyb3BwZWQgaWYgdGhlIHJpZ2h0IGxpbmtfaWQgaXMgbm90Ci0JICogYXZhaWxhYmxlPyBPciBtYXkgYmUgaXQgaXMgZmluZSBpbiB0aGUgY3VycmVudCBmb3JtIHRvIHByb2NlZWQgd2l0aAotCSAqIHRoZSBmcmFtZSBwcm9jZXNzaW5nIGJlY2F1c2Ugd2l0aCBmcmFtZSBiZWluZyBpbiA4MDIuMyBmb3JtYXQsCi0JICogbGlua19pZCBpcyB1c2VkIG9ubHkgZm9yIHN0YXRzIHB1cnBvc2UgYW5kIHVwZGF0aW5nIHRoZSBzdGF0cyBvbgotCSAqIHRoZSBkZWZsaW5rIGlzIGZpbmU/Ci0JICovCi0Jc3RhID0gY29udGFpbmVyX29mKHB1YnN0YSwgc3RydWN0IHN0YV9pbmZvLCBzdGEpOwotCWlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X3N0YSgmYW1wO3J4LCBzdGEsIGxpbmtfaWQpKQomIzQzOwlzdGEgPSBjb250YWluZXJfb2YobGlua19wdWJzdGEtJmd0O3N0YSwgc3RydWN0IHN0YV9pbmZvLCBzdGEpOwomIzQzOwlpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEoJmFtcDtyeCwgc3RhLCBsaW5rX3B1YnN0YS0mZ3Q7bGlua19pZCkpCiAJCWdvdG8gZHJvcDsKIAomIzQzOwlyeC5saW5rX2lkID0gbGlua19wdWJzdGEtJmd0O2xpbmtfaWQ7CiYjNDM7CiAJZmFzdF9yeCA9IHJjdV9kZXJlZmVyZW5jZShyeC5zdGEtJmd0O2Zhc3RfcngpOwogCWlmICghZmFzdF9yeCkKIAkJZ290byBkcm9wOwpAQCAtNTMwNyw1OSAmIzQzOzUzMjEsMTkgQEAgc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlXzgwMjMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJZGV2X2tmcmVlX3NrYihza2IpOwogfQogCi1zdGF0aWMgYm9vbCBpZWVlODAyMTFfcnhfZm9yX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LAotCQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIGNvbnN1bWUpCiYjNDM7c3RhdGljIGJvb2wgaWVlZTgwMjExX3J4X3ZhbGlkX2ZyZXEoaW50IGZyZXEsIHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rKQogewotCXN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKilza2ItJmd0O2RhdGE7Ci0Jc3RydWN0IHN0YV9pbmZvICpzdGE7Ci0JaW50IGxpbmtfaWQgPSAtMTsKLQotCWlmIChpZWVlODAyMTFfaXNfczFnX2JlYWNvbihoZHItJmd0O2ZyYW1lX2NvbnRyb2wpKSB7Ci0JCWlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X3N0YShyeCwgTlVMTCwgLTEpKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCXJldHVybiBpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKHJ4LCBza2IsIGNvbnN1bWUpOwotCX0KJiM0MzsJc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmY7CiAKLQkvKgotCSAqIExvb2sgdXAgbGluayBzdGF0aW9uIGZpcnN0LCBpbiBjYXNlIHRoZXJlJiMzOTtzIGEKLQkgKiBjaGFuY2UgdGhhdCB0aGV5IG1pZ2h0IGhhdmUgYSBsaW5rIGFkZHJlc3MgdGhhdAotCSAqIGlzIGlkZW50aWNhbCB0byB0aGUgTUxEIGFkZHJlc3MsIHRoYXQgd2F5IHdlJiMzOTtsbAotCSAqIGhhdmUgdGhlIGxpbmsgaW5mb3JtYXRpb24gaWYgbmVlZGVkLgotCSAqLwotCWxpbmtfc3RhID0gbGlua19zdGFfaW5mb19nZXRfYnNzKHJ4LSZndDtzZGF0YSwgaGRyLSZndDthZGRyMik7Ci0JaWYgKGxpbmtfc3RhKSB7Ci0JCXN0YSA9IGxpbmtfc3RhLSZndDtzdGE7Ci0JCWxpbmtfaWQgPSBsaW5rX3N0YS0mZ3Q7bGlua19pZDsKLQl9IGVsc2UgewotCQlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7Ci0KLQkJc3RhID0gc3RhX2luZm9fZ2V0X2JzcyhyeC0mZ3Q7c2RhdGEsIGhkci0mZ3Q7YWRkcjIpOwotCQlpZiAoc3RhdHVzLSZndDtsaW5rX3ZhbGlkKSB7Ci0JCQlsaW5rX2lkID0gc3RhdHVzLSZndDtsaW5rX2lkOwotCQl9IGVsc2UgaWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKCZhbXA7cngtJmd0O3NkYXRhLSZndDt2aWYpICZhbXA7JmFtcDsKLQkJCSAgIHN0YXR1cy0mZ3Q7ZnJlcSkgewotCQkJc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbms7Ci0JCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZjsKLQotCQkJZm9yX2VhY2hfbGlua19kYXRhX3JjdShyeC0mZ3Q7c2RhdGEsIGxpbmspIHsKLQkJCQljb25mID0gcmN1X2RlcmVmZXJlbmNlKGxpbmstJmd0O2NvbmYtJmd0O2NoYW5jdHhfY29uZik7Ci0JCQkJaWYgKCFjb25mIHx8ICFjb25mLSZndDtkZWYuY2hhbikKLQkJCQkJY29udGludWU7Ci0KLQkJCQlpZiAoc3RhdHVzLSZndDtmcmVxID09IGNvbmYtJmd0O2RlZi5jaGFuLSZndDtjZW50ZXJfZnJlcSkgewotCQkJCQlsaW5rX2lkID0gbGluay0mZ3Q7bGlua19pZDsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQomIzQzOwlpZiAoIWZyZXEgfHwgbGluay0mZ3Q7c2RhdGEtJmd0O3ZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX05BTiB8fAomIzQzOwkgICAgbGluay0mZ3Q7c2RhdGEtJmd0O3ZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX05BTl9EQVRBKQomIzQzOwkJcmV0dXJuIHRydWU7CiAKLQlpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEocngsIHN0YSwgbGlua19pZCkpCiYjNDM7CWNvbmYgPSByY3VfZGVyZWZlcmVuY2UobGluay0mZ3Q7Y29uZi0mZ3Q7Y2hhbmN0eF9jb25mKTsKJiM0MzsJaWYgKCFjb25mIHx8ICFjb25mLSZndDtkZWYuY2hhbikKIAkJcmV0dXJuIGZhbHNlOwogCi0JcmV0dXJuIGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUocngsIHNrYiwgY29uc3VtZSk7CiYjNDM7CXJldHVybiBmcmVxID09IGNvbmYtJmd0O2RlZi5jaGFuLSZndDtjZW50ZXJfZnJlcTsKIH0KIAogLyoKQEAgLTUzNjcsMTggJiM0Mzs1MzQxLDIwIEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9yeF9mb3JfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsCiAgKiBiZSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrIHByb3RlY3Rpb24uCiAgKi8KIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLAomIzQzOwkJCQkJIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfcHVic3RhLAogCQkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7Ci0Jc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKJiM0MzsJc3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhOwomIzQzOwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAlfX2xlMTYgZmM7CiAJc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhIHJ4OwotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnByZXY7CiAJc3RydWN0IHJobGlzdF9oZWFkICp0bXA7CiYjNDM7CWJvb2wgcnhfZGF0YV9wZW5kaW5nOwogCWludCBlcnIgPSAwOwogCiAJZmMgPSAoKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLSZndDtkYXRhKS0mZ3Q7ZnJhbWVfY29udHJvbDsKQEAgLTUzODYsNyAmIzQzOzUzNjIsNiBAQCBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfcGFja2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCXJ4LnNrYiA9IHNrYjsKIAlyeC5sb2NhbCA9IGxvY2FsOwogCXJ4Lmxpc3QgPSBsaXN0OwotCXJ4LmxpbmtfaWQgPSAtMTsKIAogCWlmIChpZWVlODAyMTFfaXNfZGF0YShmYykgfHwgaWVlZTgwMjExX2lzX21nbXQoZmMpKQogCQlJODAyX0RFQlVHX0lOQyhsb2NhbC0mZ3Q7ZG90MTFSZWNlaXZlZEZyYWdtZW50Q291bnQpOwpAQCAtNTQyNiw5NyAmIzQzOzU0MDEsMTAyIEBAIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCSAgICAgaWVlZTgwMjExX2lzX3MxZ19iZWFjb24oaGRyLSZndDtmcmFtZV9jb250cm9sKSkpCiAJCWllZWU4MDIxMV9zY2FuX3J4KGxvY2FsLCBza2IpOwogCiYjNDM7CS8qCiYjNDM7CSAqIFJYIG9mIGEgZGF0YSBmcmFtZSBzaG91bGQgb25seSBoYXBwZW4gdG8gZXhpc3Rpbmcgc3RhdGlvbnMuCiYjNDM7CSAqIEl0IGlzIHRoZXJlZm9yZSBtb3JlIGVmZmljaWVudCB0byB1c2UgdGhlIG9uZSBwcm92aWRlZCBieSB0aGUgZHJpdmVyCiYjNDM7CSAqIG9yIHNlYXJjaCBiYXNlZCBvbiB0aGUgc3RhdGlvbiYjMzk7cyBhZGRyZXNzLgomIzQzOwkgKgomIzQzOwkgKiBOb3RlIHdlIHdpbGwgZmFsbCB0aHJvdWdoIGFuZCBoYW5kbGUgYSBzcHVyaW91cyBkYXRhIGZyYW1lIGluIHRoZQomIzQzOwkgKiBzYW1lIHdheSBhcyBhIG1hbmFnZW1lbnQgZnJhbWUuCiYjNDM7CSAqLwogCWlmIChpZWVlODAyMTFfaXNfZGF0YShmYykpIHsKLQkJc3RydWN0IHN0YV9pbmZvICpzdGEsICpwcmV2X3N0YTsKLQkJaW50IGxpbmtfaWQgPSAtMTsKLQotCQlpZiAoc3RhdHVzLSZndDtsaW5rX3ZhbGlkKQotCQkJbGlua19pZCA9IHN0YXR1cy0mZ3Q7bGlua19pZDsKLQotCQlpZiAocHVic3RhKSB7Ci0JCQlzdGEgPSBjb250YWluZXJfb2YocHVic3RhLCBzdHJ1Y3Qgc3RhX2luZm8sIHN0YSk7Ci0JCQlpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEoJmFtcDtyeCwgc3RhLCBsaW5rX2lkKSkKLQkJCQlnb3RvIG91dDsKLQotCQkJLyoKLQkJCSAqIEluIE1MTyBjb25uZWN0aW9uLCBmZXRjaCB0aGUgbGlua19pZCB1c2luZyBhZGRyMgotCQkJICogd2hlbiB0aGUgZHJpdmVyIGRvZXMgbm90IHBhc3MgbGlua19pZCBpbiBzdGF0dXMuCi0JCQkgKiBXaGVuIHRoZSBhZGRyZXNzIHRyYW5zbGF0aW9uIGlzIGFscmVhZHkgcGVyZm9ybWVkIGJ5Ci0JCQkgKiBkcml2ZXIvaHcsIHRoZSB2YWxpZCBsaW5rX2lkIG11c3QgYmUgcGFzc2VkIGluCi0JCQkgKiBzdGF0dXMuCi0JCQkgKi8KLQotCQkJaWYgKCFzdGF0dXMtJmd0O2xpbmtfdmFsaWQgJmFtcDsmYW1wOyBwdWJzdGEtJmd0O21sbykgewotCQkJCXN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YTsKLQotCQkJCWxpbmtfc3RhID0gbGlua19zdGFfaW5mb19nZXRfYnNzKHJ4LnNkYXRhLAotCQkJCQkJCQkgaGRyLSZndDthZGRyMik7Ci0JCQkJaWYgKCFsaW5rX3N0YSkKLQkJCQkJZ290byBvdXQ7Ci0KLQkJCQlpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9saW5rKCZhbXA7cngsCi0JCQkJCQkJCWxpbmtfc3RhLSZndDtsaW5rX2lkKSkKLQkJCQkJZ290byBvdXQ7Ci0JCQl9Ci0KLQkJCWlmIChpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKCZhbXA7cngsIHNrYiwgdHJ1ZSkpCiYjNDM7CQlpZiAobGlua19wdWJzdGEpIHsKJiM0MzsJCQlzdGEgPSBjb250YWluZXJfb2YobGlua19wdWJzdGEtJmd0O3N0YSwgc3RydWN0IHN0YV9pbmZvLAomIzQzOwkJCQkJICAgc3RhKTsKJiM0MzsJCQlsaW5rX3N0YSA9IHJjdV9kZXJlZmVyZW5jZShzdGEtJmd0O2xpbmtbbGlua19wdWJzdGEtJmd0O2xpbmtfaWRdKTsKJiM0MzsKJiM0MzsJCQlyeC5zZGF0YSA9IHN0YS0mZ3Q7c2RhdGE7CiYjNDM7CQkJaWYgKGllZWU4MDIxMV9yeF9kYXRhX3NldF9saW5rX3N0YSgmYW1wO3J4LCBsaW5rX3N0YSkgJmFtcDsmYW1wOwomIzQzOwkJCSAgICBpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKCZhbXA7cngsIHNrYiwgdHJ1ZSkpCiAJCQkJcmV0dXJuOwomIzQzOwogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlwcmV2X3N0YSA9IE5VTEw7CiYjNDM7CQlyeF9kYXRhX3BlbmRpbmcgPSBmYWxzZTsKIAomIzQzOwkJLyogU2VhcmNoIGZvciBzdGF0aW9ucyBvbiBub24tTUxEIGludGVyZmFjZXMgKi8KIAkJZm9yX2VhY2hfc3RhX2luZm8obG9jYWwsIGhkci0mZ3Q7YWRkcjIsIHN0YSwgdG1wKSB7Ci0JCQlpZiAoIXByZXZfc3RhKSB7Ci0JCQkJcHJldl9zdGEgPSBzdGE7Ci0JCQkJY29udGludWU7Ci0JCQl9CiYjNDM7CQkJc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbms7CiAKLQkJCXJ4LnNkYXRhID0gcHJldl9zdGEtJmd0O3NkYXRhOwotCQkJaWYgKCFzdGF0dXMtJmd0O2xpbmtfdmFsaWQgJmFtcDsmYW1wOyBwcmV2X3N0YS0mZ3Q7c3RhLm1sbykgewotCQkJCXN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YTsKJiM0MzsJCQlpZiAoaWVlZTgwMjExX3ZpZl9pc19tbGQoJmFtcDtzdGEtJmd0O3NkYXRhLSZndDt2aWYpKQomIzQzOwkJCQljb250aW51ZTsKIAotCQkJCWxpbmtfc3RhID0gbGlua19zdGFfaW5mb19nZXRfYnNzKHJ4LnNkYXRhLAotCQkJCQkJCQkgaGRyLSZndDthZGRyMik7Ci0JCQkJaWYgKCFsaW5rX3N0YSkKLQkJCQkJY29udGludWU7CiYjNDM7CQkJbGluayA9ICZhbXA7c3RhLSZndDtzZGF0YS0mZ3Q7ZGVmbGluazsKJiM0MzsJCQlpZiAoIWllZWU4MDIxMV9yeF92YWxpZF9mcmVxKHN0YXR1cy0mZ3Q7ZnJlcSwgbGluaykpCiYjNDM7CQkJCWNvbnRpbnVlOwogCi0JCQkJbGlua19pZCA9IGxpbmtfc3RhLSZndDtsaW5rX2lkOwomIzQzOwkJCWlmIChyeF9kYXRhX3BlbmRpbmcpIHsKJiM0MzsJCQkJaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZSgmYW1wO3J4LCBza2IsCiYjNDM7CQkJCQkJCQlmYWxzZSk7CiYjNDM7CQkJCXJ4X2RhdGFfcGVuZGluZyA9IGZhbHNlOwogCQkJfQogCi0JCQlpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEoJmFtcDtyeCwgcHJldl9zdGEsIGxpbmtfaWQpKQotCQkJCWdvdG8gb3V0OwotCi0JCQlpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKCZhbXA7cngsIHNrYiwgZmFsc2UpOwomIzQzOwkJCXJ4LnNkYXRhID0gc3RhLSZndDtzZGF0YTsKJiM0MzsJCQlpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9saW5rX3N0YSgmYW1wO3J4LCAmYW1wO3N0YS0mZ3Q7ZGVmbGluaykpCiYjNDM7CQkJCWNvbnRpbnVlOwogCi0JCQlwcmV2X3N0YSA9IHN0YTsKJiM0MzsJCQlyeF9kYXRhX3BlbmRpbmcgPSB0cnVlOwogCQl9CiAKLQkJaWYgKHByZXZfc3RhKSB7Ci0JCQlyeC5zZGF0YSA9IHByZXZfc3RhLSZndDtzZGF0YTsKLQkJCWlmICghc3RhdHVzLSZndDtsaW5rX3ZhbGlkICZhbXA7JmFtcDsgcHJldl9zdGEtJmd0O3N0YS5tbG8pIHsKLQkJCQlzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGE7CiYjNDM7CQkvKiBBbmQgc2VhcmNoIHN0YXRpb25zIG9uIE1MRCBpbnRlcmZhY2VzICovCiYjNDM7CQlmb3JfZWFjaF9saW5rX3N0YV9pbmZvKGxvY2FsLCBoZHItJmd0O2FkZHIyLCBsaW5rX3N0YSwgdG1wKSB7CiYjNDM7CQkJc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbms7CiAKLQkJCQlsaW5rX3N0YSA9IGxpbmtfc3RhX2luZm9fZ2V0X2JzcyhyeC5zZGF0YSwKLQkJCQkJCQkJIGhkci0mZ3Q7YWRkcjIpOwotCQkJCWlmICghbGlua19zdGEpCi0JCQkJCWdvdG8gb3V0OwomIzQzOwkJCXN0YSA9IGxpbmtfc3RhLSZndDtzdGE7CiYjNDM7CQkJc2RhdGEgPQlzdGEtJmd0O3NkYXRhOwomIzQzOwkJCWxpbmsgPSByY3VfZGVyZWZlcmVuY2Uoc2RhdGEtJmd0O2xpbmtbbGlua19zdGEtJmd0O2xpbmtfaWRdKTsKIAotCQkJCWxpbmtfaWQgPSBsaW5rX3N0YS0mZ3Q7bGlua19pZDsKJiM0MzsJCQlpZiAoIWllZWU4MDIxMV9yeF92YWxpZF9mcmVxKHN0YXR1cy0mZ3Q7ZnJlcSwgbGluaykpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJCWlmIChyeF9kYXRhX3BlbmRpbmcpIHsKJiM0MzsJCQkJaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZSgmYW1wO3J4LCBza2IsCiYjNDM7CQkJCQkJCQlmYWxzZSk7CiYjNDM7CQkJCXJ4X2RhdGFfcGVuZGluZyA9IGZhbHNlOwogCQkJfQogCi0JCQlpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEoJmFtcDtyeCwgcHJldl9zdGEsIGxpbmtfaWQpKQotCQkJCWdvdG8gb3V0OwomIzQzOwkJCXJ4LnNkYXRhID0gc3RhLSZndDtzZGF0YTsKJiM0MzsJCQlpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9saW5rX3N0YSgmYW1wO3J4LCBsaW5rX3N0YSkpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJCXJ4X2RhdGFfcGVuZGluZyA9IHRydWU7CiYjNDM7CQl9CiAKJiM0MzsJCWlmIChyeF9kYXRhX3BlbmRpbmcpIHsKIAkJCWlmIChpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKCZhbXA7cngsIHNrYiwgdHJ1ZSkpCiAJCQkJcmV0dXJuOwomIzQzOwogCQkJZ290byBvdXQ7CiAJCX0KJiM0MzsKJiM0MzsJCS8qIGZhbGwgdGhyb3VnaCwgZS5nLiBmb3Igc3B1cmlvdXMgZnJhbWUgbm90aWZpY2F0aW9uICovCiAJfQogCi0JcHJldiA9IE5VTEw7CiYjNDM7CS8qCiYjNDM7CSAqIFRoaXMgaXMgYSBtYW5hZ2VtZW50IGZyYW1lIChvciBhIGRhdGEgZnJhbWUgd2l0aG91dCBhIHN0YXRpb24pIGFuZAomIzQzOwkgKiBpdCB3aWxsIGJlIGRlbGl2ZXJlZCBpbmRlcGVuZGVudCBvZiB3aGV0aGVyIGEgc3RhdGlvbiBleGlzdHMsCiYjNDM7CSAqIHNvIGl0ZXJhdGUgdGhlIGludGVyZmFjZXMuCiYjNDM7CSAqLwomIzQzOwlyeF9kYXRhX3BlbmRpbmcgPSBmYWxzZTsKJiM0MzsKJiM0MzsJLyogV2UgZXhwZWN0IHRoZSBkcml2ZXIgdG8gcHJvdmlkZSBmcmVxdWVuY3kgaW5mb3JtYXRpb24gKi8KJiM0MzsJaWYgKFdBUk5fT05fT05DRSghbG9jYWwtJmd0O2VtdWxhdGVfY2hhbmN0eCAmYW1wOyZhbXA7ICFzdGF0dXMtJmd0O2ZyZXEpKQomIzQzOwkJZ290byBvdXQ7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgJmFtcDtsb2NhbC0mZ3Q7aW50ZXJmYWNlcywgbGlzdCkgewomIzQzOwkJc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmsgPSBOVUxMOwomIzQzOwogCQlpZiAoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSkKIAkJCWNvbnRpbnVlOwogCkBAIC01NTI0LDMwICYjNDM7NTUwNCw4NSBAQCBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfcGFja2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkgICAgc2RhdGEtJmd0O3ZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pCiAJCQljb250aW51ZTsKIAomIzQzOwkJbGlua19zdGEgPSBOVUxMOwomIzQzOwkJbGluayA9IE5VTEw7CiYjNDM7CiYjNDM7CQkvKiBUcnkgdG8gcmVzb2x2ZSB0aGUgc3RhdGlvbiAqLwomIzQzOwkJaWYgKCFpZWVlODAyMTFfdmlmX2lzX21sZCgmYW1wO3NkYXRhLSZndDt2aWYpKSB7CiYjNDM7CQkJc3RhID0gc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgaGRyLSZndDthZGRyMik7CiYjNDM7CiYjNDM7CQkJaWYgKHN0YSkgewomIzQzOwkJCQlsaW5rX3N0YSA9ICZhbXA7c3RhLSZndDtkZWZsaW5rOwomIzQzOwkJCQlsaW5rID0gJmFtcDtzZGF0YS0mZ3Q7ZGVmbGluazsKJiM0MzsJCQl9CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWxpbmtfc3RhID0gbGlua19zdGFfaW5mb19nZXRfYnNzKHNkYXRhLCBoZHItJmd0O2FkZHIyKTsKJiM0MzsKJiM0MzsJCQlpZiAobGlua19zdGEpCiYjNDM7CQkJCWxpbmsgPSByY3VfZGVyZWZlcmVuY2Uoc2RhdGEtJmd0O2xpbmtbbGlua19zdGEtJmd0O2xpbmtfaWRdKTsKJiM0MzsJCX0KJiM0MzsKIAkJLyoKLQkJICogZnJhbWUgaXMgZGVzdGluZWQgZm9yIHRoaXMgaW50ZXJmYWNlLCBidXQgaWYgaXQmIzM5O3MKLQkJICogbm90IGFsc28gZm9yIHRoZSBwcmV2aW91cyBvbmUgd2UgaGFuZGxlIHRoYXQgYWZ0ZXIKLQkJICogdGhlIGxvb3AgdG8gYXZvaWQgY29weWluZyB0aGUgU0tCIG9uY2UgdG9vIG11Y2gKJiM0MzsJCSAqIElmIHdlIGZvdW5kIGEgU1RBIGFuZCBpdCBoYXMgYSB2YWxpZCBsaW5rIGluZm9ybWF0aW9uLCB0aGVuCiYjNDM7CQkgKiBSWCB1c2luZyB0aGUgc3RhdGlvbi4KIAkJICovCiYjNDM7CQlpZiAobGlua19zdGEgJmFtcDsmYW1wOyBsaW5rICZhbXA7JmFtcDsKJiM0MzsJCSAgICBpZWVlODAyMTFfcnhfdmFsaWRfZnJlcShzdGF0dXMtJmd0O2ZyZXEsIGxpbmspKSB7CiYjNDM7CQkJaWYgKHJ4X2RhdGFfcGVuZGluZykgewomIzQzOwkJCQlpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKCZhbXA7cngsIHNrYiwgZmFsc2UpOwomIzQzOwkJCQlyeF9kYXRhX3BlbmRpbmcgPSBmYWxzZTsKJiM0MzsJCQl9CiYjNDM7CiYjNDM7CQkJLyogTm8gdmFsaWRfbGlua3MgY2hlY2sgYXMgd2UgbmVlZCB0byBSWCBiZWFjb25zICovCiYjNDM7CiYjNDM7CQkJcnguc2RhdGEgPSBzZGF0YTsKJiM0MzsJCQlpZiAoaWVlZTgwMjExX3J4X2RhdGFfc2V0X2xpbmtfc3RhKCZhbXA7cngsIGxpbmtfc3RhKSkKJiM0MzsJCQkJcnhfZGF0YV9wZW5kaW5nID0gdHJ1ZTsKIAotCQlpZiAoIXByZXYpIHsKLQkJCXByZXYgPSBzZGF0YTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJcnguc2RhdGEgPSBwcmV2OwotCQlpZWVlODAyMTFfcnhfZm9yX2ludGVyZmFjZSgmYW1wO3J4LCBza2IsIGZhbHNlKTsKJiM0MzsJCS8qIE5vIHN0YXRpb24sIHRyeSB0byByZXNvbHZlIHRoZSBsaW5rIGFuZCBSWCAqLwomIzQzOwkJaWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKCZhbXA7c2RhdGEtJmd0O3ZpZikpIHsKJiM0MzsJCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZjsKJiM0MzsJCQlib29sIGZvdW5kID0gZmFsc2U7CiAKLQkJcHJldiA9IHNkYXRhOwotCX0KJiM0MzsJCQlmb3JfZWFjaF9saW5rX2RhdGFfcmN1KHNkYXRhLCBsaW5rKSB7CiYjNDM7CQkJCWNvbmYgPSByY3VfZGVyZWZlcmVuY2UobGluay0mZ3Q7Y29uZi0mZ3Q7Y2hhbmN0eF9jb25mKTsKJiM0MzsJCQkJaWYgKCFjb25mIHx8ICFjb25mLSZndDtkZWYuY2hhbikKJiM0MzsJCQkJCWNvbnRpbnVlOwogCi0JaWYgKHByZXYpIHsKLQkJcnguc2RhdGEgPSBwcmV2OwomIzQzOwkJCQlpZiAoc3RhdHVzLSZndDtmcmVxID09IGNvbmYtJmd0O2RlZi5jaGFuLSZndDtjZW50ZXJfZnJlcSkgewomIzQzOwkJCQkJZm91bmQgPSB0cnVlOwomIzQzOwkJCQkJYnJlYWs7CiYjNDM7CQkJCX0KJiM0MzsJCQl9CiAKLQkJaWYgKGllZWU4MDIxMV9yeF9mb3JfaW50ZXJmYWNlKCZhbXA7cngsIHNrYiwgdHJ1ZSkpCi0JCQlyZXR1cm47CiYjNDM7CQkJaWYgKCFmb3VuZCkKJiM0MzsJCQkJbGluayA9ICZhbXA7c2RhdGEtJmd0O2RlZmxpbms7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWxpbmsgPSAmYW1wO3NkYXRhLSZndDtkZWZsaW5rOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKHJ4X2RhdGFfcGVuZGluZykgewomIzQzOwkJCWllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoJmFtcDtyeCwgc2tiLCBmYWxzZSk7CiYjNDM7CQkJcnhfZGF0YV9wZW5kaW5nID0gZmFsc2U7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlyeC5zZGF0YSA9IHNkYXRhOwomIzQzOwkJcngubG9jYWwgPSBzZGF0YS0mZ3Q7bG9jYWw7CiYjNDM7CQlyeC5saW5rID0gbGluazsKJiM0MzsJCXJ4LmxpbmtfaWQgPSBsaW5rLSZndDtsaW5rX2lkOwomIzQzOwkJcnguc3RhID0gTlVMTDsKJiM0MzsJCXJ4Lmxpbmtfc3RhID0gTlVMTDsKJiM0MzsKJiM0MzsJCXJ4X2RhdGFfcGVuZGluZyA9IHRydWU7CiAJfQogCiYjNDM7CWlmIChyeF9kYXRhX3BlbmRpbmcgJmFtcDsmYW1wOwomIzQzOwkgICAgaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZSgmYW1wO3J4LCBza2IsIHRydWUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwogIG91dDoKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiB9CkBAIC01NTU2LDcgJiM0Mzs1NTkxLDggQEAgc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKICAqIFRoaXMgaXMgdGhlIHJlY2VpdmUgcGF0aCBoYW5kbGVyLiBJdCBpcyBjYWxsZWQgYnkgYSBsb3cgbGV2ZWwgZHJpdmVyIHdoZW4gYW4KICAqIDgwMi4xMSBNUERVIGlzIHJlY2VpdmVkIGZyb20gdGhlIGhhcmR3YXJlLgogICovCi12b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLAomIzQzO3ZvaWQgaWVlZTgwMjExX3J4X2xpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiYjNDM7CQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19wdWJzdGEsCiAJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwpAQCAtNTY5NCw5ICYjNDM7NTczMCw2IEBAIHZvaWQgaWVlZTgwMjExX3J4X2xpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsCiAJCX0KIAl9CiAKLQlpZiAoV0FSTl9PTl9PTkNFKHN0YXR1cy0mZ3Q7bGlua19pZCAmZ3Q7PSBJRUVFODAyMTFfTElOS19VTlNQRUNJRklFRCkpCi0JCWdvdG8gZHJvcDsKLQogCXN0YXR1cy0mZ3Q7cnhfZmxhZ3MgPSAwOwogCiAJa2Nvdl9yZW1vdGVfc3RhcnRfY29tbW9uKHNrYl9nZXRfa2Nvdl9oYW5kbGUoc2tiKSk7CkBAIC01NzE1LDkgJiM0Mzs1NzQ4LDEwIEBAIHZvaWQgaWVlZTgwMjExX3J4X2xpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsCiAJCQlpZWVlODAyMTFfdHB0X2xlZF90cmlnX3J4KGxvY2FsLCBza2ItJmd0O2xlbik7CiAKIAkJaWYgKHN0YXR1cy0mZ3Q7ZmxhZyAmYW1wOyBSWF9GTEFHXzgwMjMpCi0JCQlfX2llZWU4MDIxMV9yeF9oYW5kbGVfODAyMyhodywgcHVic3RhLCBza2IsIGxpc3QpOwomIzQzOwkJCV9faWVlZTgwMjExX3J4X2hhbmRsZV84MDIzKGh3LCBsaW5rX3B1YnN0YSwgc2tiLCBsaXN0KTsKIAkJZWxzZQotCQkJX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChodywgcHVic3RhLCBza2IsIGxpc3QpOwomIzQzOwkJCV9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXQoaHcsIGxpbmtfcHVic3RhLCBza2IsCiYjNDM7CQkJCQkJICAgICBsaXN0KTsKIAl9CiAKIAlrY292X3JlbW90ZV9zdG9wKCk7CkBAIC01NzI3LDcgJiM0Mzs1NzYxLDggQEAgdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSwKIH0KIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3J4X2xpc3QpOwogCi12b2lkIGllZWU4MDIxMV9yeF9uYXBpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLAomIzQzO3ZvaWQgaWVlZTgwMjExX3J4X25hcGkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiYjNDM7CQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19wdWJzdGEsCiAJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnRtcDsKQEAgLTU3NDAsNyAmIzQzOzU3NzUsNyBAQCB2b2lkIGllZWU4MDIxMV9yeF9uYXBpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLAogCSAqIHJlY2VpdmUgcHJvY2Vzc2luZwogCSAqLwogCXJjdV9yZWFkX2xvY2soKTsKLQlpZWVlODAyMTFfcnhfbGlzdChodywgcHVic3RhLCBza2IsICZhbXA7bGlzdCk7CiYjNDM7CWllZWU4MDIxMV9yeF9saXN0KGh3LCBsaW5rX3B1YnN0YSwgc2tiLCAmYW1wO2xpc3QpOwogCXJjdV9yZWFkX3VubG9jaygpOwogCiAJaWYgKCFuYXBpKSB7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc2Nhbi5jIGIvbmV0L21hYzgwMjExL3NjYW4uYwppbmRleCBlZWZmMjMwYmQ5MDlmLi4zMjRjMmI2ZDdjZTFiIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9zY2FuLmMKQEAgLTksNyAmIzQzOzksNyBAQAogICogQ29weXJpZ2h0IDIwMDcsIE1pY2hhZWwgV3UgJmx0O2ZsYW1pbmdpY2VAc291cm1pbGsubmV0Jmd0OwogICogQ29weXJpZ2h0IDIwMTMtMjAxNSAgSW50ZWwgTW9iaWxlIENvbW11bmljYXRpb25zIEdtYkgKICAqIENvcHlyaWdodCAyMDE2LTIwMTcgIEludGVsIERldXRzY2hsYW5kIEdtYkgKLSAqIENvcHlyaWdodCAoQykgMjAxOC0yMDI1IEludGVsIENvcnBvcmF0aW9uCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjYgSW50ZWwgQ29ycG9yYXRpb24KICAqLwogCiAjaW5jbHVkZSAmbHQ7bGludXgvaWZfYXJwLmgmZ3Q7CkBAIC0yMDQsMTIgJiM0MzsyMDQsMTAgQEAgaWVlZTgwMjExX2Jzc19pbmZvX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJICogYW4gaW5kaWNhdGlvbiBvbiB3aGljaCBvZiB0aGUgbGlua3MgdGhlIGZyYW1lIHdhcyByZWNlaXZlZAogCQkgKi8KIAkJaWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKCZhbXA7c2Nhbl9zZGF0YS0mZ3Q7dmlmKSkgewotCQkJaWYgKHJ4X3N0YXR1cy0mZ3Q7bGlua192YWxpZCkgewotCQkJCXM4IGxpbmtfaWQgPSByeF9zdGF0dXMtJmd0O2xpbmtfaWQ7CiYjNDM7CQkJczggbGlua19pZCA9IHJ4X3N0YXR1cy0mZ3Q7bGlua19pZDsKIAotCQkJCWxpbmtfY29uZiA9Ci0JCQkJCXJjdV9kZXJlZmVyZW5jZShzY2FuX3NkYXRhLSZndDt2aWYubGlua19jb25mW2xpbmtfaWRdKTsKLQkJCX0KJiM0MzsJCQlsaW5rX2NvbmYgPQomIzQzOwkJCQlyY3VfZGVyZWZlcmVuY2Uoc2Nhbl9zZGF0YS0mZ3Q7dmlmLmxpbmtfY29uZltsaW5rX2lkXSk7CiAJCX0gZWxzZSB7CiAJCQlsaW5rX2NvbmYgPSAmYW1wO3NjYW5fc2RhdGEtJmd0O3ZpZi5ic3NfY29uZjsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3RkbHMuYyBiL25ldC9tYWM4MDIxMS90ZGxzLmMKaW5kZXggZmZkNTc1YThkMTg4Zi4uYTg5YzY1NjliOWNmNSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3RkbHMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvdGRscy5jCkBAIC0xMDY2LDcgJiM0MzsxMDY2LDcgQEAgaWVlZTgwMjExX3RkbHNfcHJlcF9tZ210X3BhY2tldChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCX0KIAogCWlmIChhY3Rpb25fY29kZSA9PSBXTEFOX1BVQl9BQ1RJT05fVERMU19ESVNDT1ZFUl9SRVMpIHsKLQkJaWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgNywgbGlua19pZCk7CiYjNDM7CQlpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCBzdGEsIDcsIGxpbmtfaWQpOwogCQlyZXR1cm4gMDsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS90eC5jIGIvbmV0L21hYzgwMjExL3R4LmMKaW5kZXggMGNmNWY2ZWM3NWU2Ny4uZjNmOWYxMjQ4MWM0MCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3R4LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL3R4LmMKQEAgLTY0NDEsNyAmIzQzOzY0NDEsOCBAQCB2b2lkIGllZWU4MDIxMV91bnJlc2VydmVfdGlkKHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsIHU4IHRpZCkKIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3VucmVzZXJ2ZV90aWQpOwogCiB2b2lkIF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRpZCwgaW50IGxpbmtfaWQsCiYjNDM7CQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKJiM0MzsJCQkJIGludCB0aWQsIGludCBsaW5rX2lkLAogCQkJCSBlbnVtIG5sODAyMTFfYmFuZCBiYW5kKQogewogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAodm9pZCAqKXNrYi0mZ3Q7ZGF0YTsKQEAgLTY0OTMsMTIgJiM0Mzs2NDk0LDEzIEBAIHZvaWQgX19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCSAqLwogCWxvY2FsX2JoX2Rpc2FibGUoKTsKIAlJRUVFODAyMTFfU0tCX0NCKHNrYiktJmd0O2JhbmQgPSBiYW5kOwotCWllZWU4MDIxMV94bWl0KHNkYXRhLCBOVUxMLCBza2IpOwomIzQzOwlpZWVlODAyMTFfeG1pdChzZGF0YSwgc3RhLCBza2IpOwogCWxvY2FsX2JoX2VuYWJsZSgpOwogfQogCiB2b2lkIGllZWU4MDIxMV90eF9za2JfdGlkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGlkLCBpbnQgbGlua19pZCkKJiM0MzsJCQkgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzdGFfaW5mbyAqc3RhLAomIzQzOwkJCSAgaW50IHRpZCwgaW50IGxpbmtfaWQpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNoYW5jdHhfY29uZjsKIAllbnVtIG5sODAyMTFfYmFuZCBiYW5kOwpAQCAtNjUyNCw3ICYjNDM7NjUyNiw3IEBAIHZvaWQgaWVlZTgwMjExX3R4X3NrYl90aWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCWJhbmQgPSAwOwogCX0KIAotCV9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzZGF0YSwgc2tiLCB0aWQsIGxpbmtfaWQsIGJhbmQpOwomIzQzOwlfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc2RhdGEsIHNrYiwgc3RhLCB0aWQsIGxpbmtfaWQsIGJhbmQpOwogCXJjdV9yZWFkX3VubG9jaygpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuYwppbmRleCA4YWRiZWY1ZjA0NDI1Li4wYWIyOTA3ZTY2ZjY4IDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmMKQEAgLTEwOTYsNiAmIzQzOzEwOTYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmw4MDIxMV9wb2xpY3lbTlVNX05MODAyMTFfQVRUUl0gPSB7CiAJW05MODAyMTFfQVRUUl9OUENBX1BVTkNUX0JJVE1BUF0gPQogCQlOTEFfUE9MSUNZX0ZVTExfUkFOR0UoTkxBX1UzMiwgJmFtcDtubDgwMjExX3B1bmN0X2JpdG1hcF9yYW5nZSksCiAJW05MODAyMTFfQVRUUl9TVEFfRFVNUF9MSU5LX1NUQVRTXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LAomIzQzOwlbTkw4MDIxMV9BVFRSX0ZSQU1FX0NNRF9OT19TVEFdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sCiB9OwogCiAvKiBwb2xpY3kgZm9yIHRoZSBrZXkgYXR0cmlidXRlcyAqLwpAQCAtMTQ4NTksNiAmIzQzOzE0ODYwLDkgQEAgc3RhdGljIGludCBubDgwMjExX3R4X21nbXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkgICAgISh3ZGV2LSZndDt2YWxpZF9saW5rcyAmYW1wOyBCSVQocGFyYW1zLmxpbmtfaWQpKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJcGFyYW1zLm5vX3N0YSA9CiYjNDM7CQlubGFfZ2V0X2ZsYWcoaW5mby0mZ3Q7YXR0cnNbTkw4MDIxMV9BVFRSX0ZSQU1FX0NNRF9OT19TVEFdKTsKJiM0MzsKIAlwYXJhbXMuYnVmID0gbmxhX2RhdGEoaW5mby0mZ3Q7YXR0cnNbTkw4MDIxMV9BVFRSX0ZSQU1FXSk7CiAJcGFyYW1zLmxlbiA9IG5sYV9sZW4oaW5mby0mZ3Q7YXR0cnNbTkw4MDIxMV9BVFRSX0ZSQU1FXSk7CiAKQEAgLTIyMDIwLDcgJiM0MzsyMjAyNCw5IEBAIGludCBubDgwMjExX3NlbmRfbWdtdChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJICAgIChpbmZvLSZndDthY2tfdHN0YW1wICZhbXA7JmFtcDsgbmxhX3B1dF91NjRfNjRiaXQobXNnLAogCQkJCQkJICAgTkw4MDIxMV9BVFRSX1RYX0hXX1RJTUVTVEFNUCwKIAkJCQkJCSAgIGluZm8tJmd0O2Fja190c3RhbXAsCi0JCQkJCQkgICBOTDgwMjExX0FUVFJfUEFEKSkpCiYjNDM7CQkJCQkJICAgTkw4MDIxMV9BVFRSX1BBRCkpIHx8CiYjNDM7CSAgICAoaW5mby0mZ3Q7bm9fc3RhICZhbXA7JmFtcDsKJiM0MzsJICAgICBubGFfcHV0X2ZsYWcobXNnLCBOTDgwMjExX0FUVFJfRlJBTUVfQ01EX05PX1NUQSkpKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAogCWdlbmxtc2dfZW5kKG1zZywgaGRyKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDQ6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMxMzkKCQkJCQkJCW91dHB1dDogMjQ5CgkJCQkJCQl0aG91Z2h0czogMTcxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBtYWM4MDIxMSBSWCBQYXRoIFRyYW5zZm9ybWF0aW9uIGZvciBNTE8gU3VwcG9ydCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMsIGFuZCBteSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCYjMzk7cyBmdW5kYW1lbnRhbGx5IHJld29ya2luZyB0aGUgbWFjODAyMTEgUlggcGF0aCwgcGFydGljdWxhcmx5IGluIHJlbGF0aW9uIHRvIE11bHRpLUxpbmsgT3BlcmF0aW9uIChNTE8pLiBUaGUgY2hhbmdlcyBhcmUgcHJldHR5IGJyb2FkLCB0b3VjaGluZyBhIHNpZ25pZmljYW50IG51bWJlciBvZiBkcml2ZXJzIOKAkyBhdGgxMWssIGF0aDEyaywgaXdsd2lmaSwgbXQ3NiwgcnR3ODksIGFuZCwgaW1wb3J0YW50bHksIG1hYzgwMjExX2h3c2ltLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IHRlbGxpbmcgbWUgdGhhdCB0aGlzIGlzbiYjMzk7dCBzb21lIG1pbm9yIHR3ZWFrOyB0aGlzIGlzIGEgY29yZSBhcmNoaXRlY3R1cmFsIHNoaWZ0LgoKVGhlIGZpcnN0IHRoaW5nIHRoYXQgZ3JhYnMgbXkgYXR0ZW50aW9uIGlzIHRoZSByZW1vdmFsIG9mIGBsaW5rX3ZhbGlkYCBmcm9tIGBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1c2AuIFRoaXMsIGNvbWJpbmVkIHdpdGggdGhlIGNoYW5nZSBpbiBob3cgYGxpbmtfaWRgIGlzIGhhbmRsZWQsIHNwZWNpZmljYWxseSBwYXNzaW5nIGBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpgIGluc3RlYWQgb2YgYHN0cnVjdCBpZWVlODAyMTFfc3RhICpgIHRvIGBpZWVlODAyMTFfcnhfbmFwaWAgYW5kIGBpZWVlODAyMTFfcnhfbGlzdGAsIHN1Z2dlc3RzIGEgcmVmYWN0b3JpbmcgdG8gaGFuZGxlIGxpbmstc3BlY2lmaWMgU1RBIGluZm9ybWF0aW9uIG1vcmUgZXhwbGljaXRseS4gSSBzZWUgdGhpcyBhcyBhIHNvbGlkIHN0ZXAgdG8gZ2V0IHRoaW5ncyByaWdodCBpbiB0aGUgTUxPIGNvbnRleHQsIHdoZXJlIHRoZSBhc3NvY2lhdGlvbiB3aXRoIHRoZSBTVEEgaXNuJiMzOTt0IGFzIHN0cmFpZ2h0Zm9yd2FyZCBiZWNhdXNlIG9mIG11bHRpcGxlIGxpbmtzLgoKVGhlIGFkZGl0aW9uIG9mIGBub19zdGFgIHRvIGBjZmc4MDIxMV9tZ210X3R4X3BhcmFtc2AgYW5kIGBjZmc4MDIxMV9yeF9pbmZvYCwgYW5kIHRoZSBoYW5kbGluZyBvZiB0aGlzIGZsYWcgaW4gYG5sODAyMTEuY2AsIHN0cm9uZ2x5IGluZGljYXRlcyBhIG1vZGlmaWNhdGlvbiB0byB0aGUgbWFuYWdlbWVudCBmcmFtZSBUWC9SWCBwYXRoLCB3aGljaCBpcyBhbHNvIGxpbmtlZCB0byBNTE8uCgpOb3csIGxldCYjMzk7cyBzZWUgaWYgdGhpcyBpcyByZWFjaGFibGUgdGhyb3VnaCBRRU1VLiBUaGFua2Z1bGx5LCB0aGUgcGF0Y2ggbW9kaWZpZXMgYG1hYzgwMjExX2h3c2ltYCwgYW5kIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBgbWFjODAyMTFfaHdzaW1gIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCBpcyBmcmVxdWVudGx5IHVzZWQgZm9yIGZ1enppbmcgbWFjODAyMTEuIFRoaXMgaXMgYSB2ZXJ5IGdvb2Qgc2lnbi4gV2UgY2FuIGRlZmluaXRlbHkgcmVwcm9kdWNlIHRoZSBjaGFuZ2VzIGFuZCBkbyBkZWJ1Z2dpbmcuCgpEaXZpbmcgZGVlcGVyLCB0aGUgcGF0Y2ggaGFzIGEgbWFqb3IgaW1wYWN0IG9uIGBuZXQvbWFjODAyMTEvcnguY2AuIEkmIzM5O20gc2VlaW5nIGNoYW5nZXMgaW4gZnVuY3Rpb25zIGxpa2UgYGllZWU4MDIxMV9yeF9saXN0YCwgYF9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXRgLCBhbmQgYGllZWU4MDIxMV9yeF9uYXBpYC4gRnVydGhlcm1vcmUsIGNoYW5nZXMgdG8gYG5sODAyMTFfdHhfbWdtdGAgYW5kIGBubDgwMjExX3NlbmRfbWdtdGAgcmVpbmZvcmNlIHRoZSBNTE8gYW5nbGUuCgpJJiMzOTttIHplcm9pbmcgaW4gb24gYSBmZXcga2V5IHN5bWJvbHMgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGlzOiBgaWVlZTgwMjExX3J4X2xpc3RgLCBgaWVlZTgwMjExX3J4X25hcGlgLCBgbmw4MDIxMV90eF9tZ210YCwgYG5sODAyMTFfc2VuZF9tZ210YCwgYW5kIGBpZWVlODAyMTFfbWdtdF90eGAuIFRoZSBtb2RpZmljYXRpb25zIHRvIHRob3NlIGZ1bmN0aW9ucyBhbmQgdGhlIGFkZGl0aW9uIG9mIHRoaXMgbmV3IGZsYWcgYXJlIHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VyaWVzLgoKUXVpY2sgc2FuaXR5IGNoZWNrOiBJJiMzOTtsbCBjb25maXJtIHRoYXQgYGllZWU4MDIxMV9yeF9saXN0YCBhbmQgYGllZWU4MDIxMV9yeF9uYXBpYCBhcmUgaW5kZWVkIGV4cG9ydGVkLCBhbmQgdGhhdCBgaWVlZTgwMjExX21nbXRfdHhgIGlzIGluIGBuZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jYC4gQWxzbyB2ZXJpZnlpbmcgdGhhdCB0aGUgYG5sODAyMTFgIGZ1bmN0aW9ucyBhcmUgaW4gYG5ldC93aXJlbGVzcy9ubDgwMjExLmNgLiBZZXAsIGFsbCBjb3JyZWN0LgoKQSBmdXJ0aGVyIGNoZWNrOiBgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldGAgaXMgc3RhdGljLCB3aGljaCBpcyBleHBlY3RlZCBmb3IgYW4gaW50ZXJuYWwgaGVscGVyLiBBbmQgaXQgaXMuIGBpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGlua19zdGFgIGFuZCBgaWVlZTgwMjExX3J4X2RhdGFfc2V0X3N0YWAgYXJlIGFsc28gc3RhdGljLCBhcyBleHBlY3RlZC4KCkkgd2lsbCBhbHNvIGluY2x1ZGUgYGllZWU4MDIxMV90eF9za2JfdGlkYCBhcyB0aGlzIGhhcyBhIHNpZ25hdHVyZSBjaGFuZ2UgYXMgd2VsbC4KClRoZSBjaGFuZ2VzIHRvIHRoZSBzaWduYXR1cmVzIG9mIGBpZWVlODAyMTFfcnhfbGlzdGAsIGBpZWVlODAyMTFfcnhfbmFwaWAsIGFuZCBgaWVlZTgwMjExX3R4X3NrYl90aWRgIGFyZSBzaWduaWZpY2FudCwgd2hpY2ggaXMgcmVtb3ZpbmcgYHN0YWAgZnJvbSB0aGUgaW5wdXQgcGFyYW1ldGVyIGFuZCB1c2luZyBgbGlua19zdGFgIGluc3RlYWQuCgoqKkluIGVzc2VuY2UsIHRoaXMgcGF0Y2ggaXMgYSBmdW5kYW1lbnRhbCByZXN0cnVjdHVyaW5nIG9mIHRoZSBtYWM4MDIxMSBSWCBwYXRoIHRvIGltcHJvdmUgTUxPIHN1cHBvcnQuIEl0JiMzOTtzIG1ha2luZyB0aGUgUlgvVFggcGF0aHMgaGFuZGxlIGxpbmstc3BlY2lmaWMgU1RBIGluZm9ybWF0aW9uLCB3aGljaCBpcyBhIGtleSByZXF1aXJlbWVudCB0byBoYW5kbGUgbXVsdGlwbGUgbGlua3MuIFRoZSBjaGFuZ2VzIGluY2x1ZGUgYWRkaW5nIGEgbmV3IGBub19zdGFgIGZsYWcgdG8KCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA0OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMV9IV1NJTSYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2llZWU4MDIxMV9yeF9saXN0JiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9yeF9uYXBpJiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9tZ210X3R4JiMzNDssCiAgICAmIzM0O25sODAyMTFfdHhfbWdtdCYjMzQ7LAogICAgJiMzNDtubDgwMjExX3NlbmRfbWdtdCYjMzQ7LAogICAgJiMzNDtpZWVlODAyMTFfdHhfc2tiX3RpZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWFjODAyMTEgUlggcGF0aCB0byBoYW5kbGUgTUxPIChNdWx0aS1MaW5rIE9wZXJhdGlvbikgbGluayBJRHMgbW9yZSByb2J1c3RseSwgcmVtb3ZpbmcgYGxpbmtfdmFsaWRgIGFuZCBwYXNzaW5nIGBsaW5rX3N0YWAgZGlyZWN0bHkuIEl0IGFsc28gYWRkcyBhIGBub19zdGFgIGZsYWcgZm9yIG1hbmFnZW1lbnQgZnJhbWUgVFgvUlguIFRoZXNlIGFyZSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBtYWM4MDIxMSBhbmQgY2ZnODAyMTEsIHJlYWNoYWJsZSB2aWEgbWFjODAyMTFfaHdzaW0gYW5kIG5sODAyMTEgbmV0bGluayBpbnRlcmZhY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWVlZTgwMjExX3J4X2xpc3QmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3J4X25hcGkmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX21nbXRfdHgmIzM0OywKICAgICYjMzQ7bmw4MDIxMV90eF9tZ210JiMzNDssCiAgICAmIzM0O25sODAyMTFfc2VuZF9tZ210JiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV90eF9za2JfdGlkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtYWM4MDIxMSBSWCBwYXRoIHRvIGhhbmRsZSBNTE8gKE11bHRpLUxpbmsgT3BlcmF0aW9uKSBsaW5rIElEcyBtb3JlIHJvYnVzdGx5LCByZW1vdmluZyBgbGlua192YWxpZGAgYW5kIHBhc3NpbmcgYGxpbmtfc3RhYCBkaXJlY3RseS4gSXQgYWxzbyBhZGRzIGEgYG5vX3N0YWAgZmxhZyBmb3IgbWFuYWdlbWVudCBmcmFtZSBUWC9SWC4gVGhlc2UgYXJlIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIG1hYzgwMjExIGFuZCBjZmc4MDIxMSwgcmVhY2hhYmxlIHZpYSBtYWM4MDIxMV9od3NpbSBhbmQgbmw4MDIxMSBuZXRsaW5rIGludGVyZmFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA0OjM1OjIxLjYxOTQ2ODQ4M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzU4MDQxMzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiLFxuICAgIFwiQ0ZHODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpZWVlODAyMTFfcnhfbGlzdFwiLFxuICAgIFwiaWVlZTgwMjExX3J4X25hcGlcIixcbiAgICBcImllZWU4MDIxMV9tZ210X3R4XCIsXG4gICAgXCJubDgwMjExX3R4X21nbXRcIixcbiAgICBcIm5sODAyMTFfc2VuZF9tZ210XCIsXG4gICAgXCJpZWVlODAyMTFfdHhfc2tiX3RpZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtYWM4MDIxMSBSWCBwYXRoIHRvIGhhbmRsZSBNTE8gKE11bHRpLUxpbmsgT3BlcmF0aW9uKSBsaW5rIElEcyBtb3JlIHJvYnVzdGx5LCByZW1vdmluZyBgbGlua192YWxpZGAgYW5kIHBhc3NpbmcgYGxpbmtfc3RhYCBkaXJlY3RseS4gSXQgYWxzbyBhZGRzIGEgYG5vX3N0YWAgZmxhZyBmb3IgbWFuYWdlbWVudCBmcmFtZSBUWC9SWC4gVGhlc2UgYXJlIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIG1hYzgwMjExIGFuZCBjZmc4MDIxMSwgcmVhY2hhYmxlIHZpYSBtYWM4MDIxMV9od3NpbSBhbmQgbmw4MDIxMSBuZXRsaW5rIGludGVyZmFjZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDQ6MzU6MjEuNjE5NDc1MjQzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzY5MDk4MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5ZTEyYWUzMTVmZWU1MGU3Y2Q2MDIyNjdlZTY1ZDdiOGJlNGIyNWI1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDEgMDQ6MzU6MjAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kcF9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kcF9yeC5jXFxuaW5kZXggMzM0MjU3MDdjMDg0Mi4uZmJiM2QxOGY1NWRkZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RwX3J4LmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RwX3J4LmNcXG5AQCAtMjUwMCw3ICsyNTAwLDcgQEAgc3RhdGljIHZvaWQgYXRoMTFrX2RwX3J4X2RlbGl2ZXJfbXNkdShzdHJ1Y3QgYXRoMTFrICphciwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBcXG4gXFx0ICAgICEoaXNfbWNiYyBcXHUwMDI2XFx1MDAyNiByeF9zdGF0dXMtXFx1MDAzZWZsYWcgXFx1MDAyNiBSWF9GTEFHX0RFQ1JZUFRFRCkpXFxuIFxcdFxcdHJ4X3N0YXR1cy1cXHUwMDNlZmxhZyB8PSBSWF9GTEFHXzgwMjM7XFxuIFxcbi1cXHRpZWVlODAyMTFfcnhfbmFwaShhci1cXHUwMDNlaHcsIHB1YnN0YSwgbXNkdSwgbmFwaSk7XFxuK1xcdGllZWU4MDIxMV9yeF9uYXBpKGFyLVxcdTAwM2VodywgcHVic3RhID8gXFx1MDAyNnB1YnN0YS1cXHUwMDNlZGVmbGluayA6IE5VTEwsIG1zZHUsIG5hcGkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCBhdGgxMWtfZHBfcnhfY2hlY2tfbndpZmlfaGRyX2xlbl92YWxpZChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX21vbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9tb24uY1xcbmluZGV4IDdkNWJlNzdiMDgxZjguLjFmYWYxODk2ZDBhYjEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9tb24uY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfbW9uLmNcXG5AQCAtNTAzLDggKzUwMyw2IEBAIHZvaWQgYXRoMTJrX2RwX21vbl9yeF9kZWxpdmVyX21zZHUoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LFxcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzO1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlICpoZSA9IE5VTEw7XFxuIFxcbi1cXHRzdGF0dXMtXFx1MDAzZWxpbmtfdmFsaWQgPSAwO1xcbi1cXG4gXFx0aWYgKChzdGF0dXMtXFx1MDAzZWVuY29kaW5nID09IFJYX0VOQ19IRSkgXFx1MDAyNlxcdTAwMjYgIShzdGF0dXMtXFx1MDAzZWZsYWcgXFx1MDAyNiBSWF9GTEFHX1JBRElPVEFQX0hFKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgIShzdGF0dXMtXFx1MDAzZWZsYWcgXFx1MDAyNiBSWF9GTEFHX1NLSVBfTU9OSVRPUikpIHtcXG4gXFx0XFx0aGUgPSBza2JfcHVzaChtc2R1LCBzaXplb2Yoa25vd24pKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9yeC5jXFxuaW5kZXggOGZhMGU5MGI0NTMxNi4uODQ3YWQyOGZkMzBiMiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3J4LmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3J4LmNcXG5AQCAtMTM3NSw2ICsxMzc1LDcgQEAgdm9pZCBhdGgxMmtfZHBfcnhfZGVsaXZlcl9tc2R1KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwgc3RydWN0IG5hcGlfc3RydWNcXG4gXFx0c3RydWN0IGF0aDEya19kcCAqZHAgPSBkcF9wZGV2LVxcdTAwM2VkcDtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cztcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YTtcXG4rXFx0c3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19wdWJzdGEgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKnBlZXI7XFxuIFxcdHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IgPSBBVEgxMktfU0tCX1JYQ0IobXNkdSk7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSByeF9pbmZvLVxcdTAwM2VyeF9zdGF0dXM7XFxuQEAgLTEzODQsOSArMTM4NSwxOSBAQCB2b2lkIGF0aDEya19kcF9yeF9kZWxpdmVyX21zZHUoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LCBzdHJ1Y3QgbmFwaV9zdHJ1Y1xcbiBcXG4gXFx0cHVic3RhID0gcGVlciA/IHBlZXItXFx1MDAzZXN0YSA6IE5VTEw7XFxuIFxcbi1cXHRzdGF0dXMtXFx1MDAzZWxpbmtfdmFsaWQgPSAwO1xcbi1cXHRpZiAocHVic3RhIFxcdTAwMjZcXHUwMDI2IHB1YnN0YS1cXHUwMDNldmFsaWRfbGlua3MpXFxuLVxcdFxcdGF0aDEya19od19zZXRfcnhfbGlua19pZChkcC1cXHUwMDNlaHdfcGFyYW1zLCBwZWVyLCByeGNiLCBzdGF0dXMpO1xcbitcXHRpZiAocHVic3RhKSB7XFxuK1xcdFxcdGlmIChwdWJzdGEtXFx1MDAzZXZhbGlkX2xpbmtzKSB7XFxuK1xcdFxcdFxcdHU4IGxpbmtfaWQgPVxcbitcXHRcXHRcXHRcXHRhdGgxMmtfaHdfZ2V0X3J4X2xpbmtfaWQoZHAtXFx1MDAzZWh3X3BhcmFtcywgcGVlcixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IHJ4Y2IsIHN0YXR1cyk7XFxuK1xcbitcXHRcXHRcXHRpZiAobGlua19pZCBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdFxcdGxpbmtfcHVic3RhID1cXG4rXFx0XFx0XFx0XFx0XFx0cmN1X2RlcmVmZXJlbmNlKHB1YnN0YS1cXHUwMDNlbGlua1tsaW5rX2lkXSk7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGxpbmtfcHVic3RhID0gXFx1MDAyNnB1YnN0YS1cXHUwMDNlZGVmbGluaztcXG4rXFx0XFx0fVxcbitcXHR9XFxuIFxcbiBcXHRhdGgxMmtfZGJnKGRwLVxcdTAwM2VhYiwgQVRIMTJLX0RCR19EQVRBLFxcbiBcXHRcXHQgICBcXFwicnggc2tiICVwIGxlbiAldSBwZWVyICVwTSAlZCAlcyBzbiAldSAlcyVzJXMlcyVzJXMlcyVzJXMlcyByYXRlX2lkeCAldSB2aHRfbnNzICV1IGZyZXEgJXUgYmFuZCAldSBmbGFnIDB4JXggZmNzLWVyciAlaSBtaWMtZXJyICVpIGFtc2R1LW1vcmUgJWlcXFxcblxcXCIsXFxuQEAgLTE0MjIsNyArMTQzMyw4IEBAIHZvaWQgYXRoMTJrX2RwX3J4X2RlbGl2ZXJfbXNkdShzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsIHN0cnVjdCBuYXBpX3N0cnVjXFxuIFxcbiBcXHQvKiBUT0RPOiB0cmFjZSByeCBwYWNrZXQgKi9cXG4gXFxuLVxcdGllZWU4MDIxMV9yeF9uYXBpKGF0aDEya19wZGV2X2RwX3RvX2h3KGRwX3BkZXYpLCBwdWJzdGEsIG1zZHUsIG5hcGkpO1xcbitcXHRpZWVlODAyMTFfcnhfbmFwaShhdGgxMmtfcGRldl9kcF90b19odyhkcF9wZGV2KSwgbGlua19wdWJzdGEsIG1zZHUsXFxuK1xcdFxcdFxcdCAgbmFwaSk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChhdGgxMmtfZHBfcnhfZGVsaXZlcl9tc2R1KTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaHcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaHcuaFxcbmluZGV4IDQ5Y2ZkNWRmYzcwYTYuLjI2OGYwYThmZDQ2ZGQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9ody5oXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9ody5oXFxuQEAgLTI0OCw5ICsyNDgsOSBAQCBzdHJ1Y3QgYXRoMTJrX2h3X29wcyB7XFxuIFxcdGJvb2wgKCpkcF9zcm5nX2lzX3R4X2NvbXBfcmluZykoaW50IHJpbmdfbnVtKTtcXG4gXFx0Ym9vbCAoKmlzX2ZyYW1lX2xpbmtfYWdub3N0aWMpKHN0cnVjdCBhdGgxMmtfbGlua192aWYgKmFydmlmLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210KTtcXG4tXFx0dm9pZCAoKnNldF9yeF9saW5rX2lkKShzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXFxuLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxcbi1cXHRcXHRcXHQgICAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyk7XFxuK1xcdGludCAoKmdldF9yeF9saW5rX2lkKShzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpO1xcbiB9O1xcbiBcXG4gc3RhdGljIGlubGluZVxcbkBAIC0yODEsMTMgKzI4MSwxNSBAQCBzdGF0aWMgaW5saW5lIGludCBhdGgxMmtfaHdfbWFjX2lkX3RvX3NybmdfaWQoY29uc3Qgc3RydWN0IGF0aDEya19od19wYXJhbXMgKmh3LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkIGF0aDEya19od19zZXRfcnhfbGlua19pZChjb25zdCBzdHJ1Y3QgYXRoMTJrX2h3X3BhcmFtcyAqaHcsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cylcXG4rc3RhdGljIGlubGluZSBpbnQgYXRoMTJrX2h3X2dldF9yeF9saW5rX2lkKGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfcGFyYW1zICpodyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLFxcbitcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxcbitcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKVxcbiB7XFxuLVxcdGlmIChody1cXHUwMDNlaHdfb3BzLVxcdTAwM2VzZXRfcnhfbGlua19pZClcXG4tXFx0XFx0aHctXFx1MDAzZWh3X29wcy1cXHUwMDNlc2V0X3J4X2xpbmtfaWQoZHBfcGVlciwgcnhjYiwgc3RhdHVzKTtcXG4rXFx0aWYgKGh3LVxcdTAwM2Vod19vcHMtXFx1MDAzZWdldF9yeF9saW5rX2lkKVxcbitcXHRcXHRyZXR1cm4gaHctXFx1MDAzZWh3X29wcy1cXHUwMDNlZ2V0X3J4X2xpbmtfaWQoZHBfcGVlciwgcnhjYiwgc3RhdHVzKTtcXG4rXFxuK1xcdHJldHVybiAtMTtcXG4gfVxcbiBcXG4gc3RydWN0IGF0aDEya19md19pZSB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguY1xcbmluZGV4IDk1ZDg3ZGQ2Nzg3MmYuLjhiNzIyZWUwYWQ4ZmEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5jXFxuQEAgLTIzMTcsMTcgKzIzMTcsMTYgQEAgYXRoMTJrX3dpZmk3X2RwX3J4ZGVzY19tcGR1X3ZhbGlkKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsXFxuIFxcdHJldHVybiB0bHZfdGFnID09IEhBTF9SWF9NUERVX1NUQVJUO1xcbiB9XFxuIFxcbi12b2lkXFxuLWF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF9xY245Mjc0KHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcXG4raW50XFxuK2F0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF9xY245Mjc0KHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKVxcbiB7XFxuLVxcdHN0YXR1cy1cXHUwMDNlbGlua192YWxpZCA9IDE7XFxuLVxcdHN0YXR1cy1cXHUwMDNlbGlua19pZCA9IGRwX3BlZXItXFx1MDAzZWh3X2xpbmtzW3J4Y2ItXFx1MDAzZWh3X2xpbmtfaWRdO1xcbitcXHRyZXR1cm4gZHBfcGVlci1cXHUwMDNlaHdfbGlua3NbcnhjYi1cXHUwMDNlaHdfbGlua19pZF07XFxuIH1cXG4gXFxuLXZvaWRcXG4tYXRoMTJrX3dpZmk3X2RwX3J4X3NldF9saW5rX2lkX3djbjc4NTAoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLFxcbitpbnRcXG4rYXRoMTJrX3dpZmk3X2RwX3J4X2dldF9saW5rX2lkX3djbjc4NTAoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYixcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpXFxuIHtcXG5AQCAtMjM0MSwxMCArMjM0MCw5IEBAIGF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF93Y243ODUwKHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcXG4gXFx0bGlua3NfbWFwID0gUkVBRF9PTkNFKGRwX3BlZXItXFx1MDAzZWxpbmtfcGVlcnNfbWFwKTtcXG4gXFx0Zm9yX2VhY2hfc2V0X2JpdChpLCBcXHUwMDI2bGlua3NfbWFwLCBBVEgxMktfTlVNX01BWF9MSU5LUykge1xcbiBcXHRcXHRsaW5rX3BlZXIgPSByY3VfZGVyZWZlcmVuY2UoZHBfcGVlci1cXHUwMDNlbGlua19wZWVyc1tpXSk7XFxuLVxcdFxcdGlmIChsaW5rX3BlZXIgXFx1MDAyNlxcdTAwMjYgbGlua19wZWVyLVxcdTAwM2VwZWVyX2lkID09IHJ4Y2ItXFx1MDAzZXBlZXJfaWQpIHtcXG4tXFx0XFx0XFx0c3RhdHVzLVxcdTAwM2VsaW5rX3ZhbGlkID0gMTtcXG4tXFx0XFx0XFx0c3RhdHVzLVxcdTAwM2VsaW5rX2lkID0gbGlua19wZWVyLVxcdTAwM2VsaW5rX2lkO1xcbi1cXHRcXHRcXHRyZXR1cm47XFxuLVxcdFxcdH1cXG4rXFx0XFx0aWYgKGxpbmtfcGVlciBcXHUwMDI2XFx1MDAyNiBsaW5rX3BlZXItXFx1MDAzZXBlZXJfaWQgPT0gcnhjYi1cXHUwMDNlcGVlcl9pZClcXG4rXFx0XFx0XFx0cmV0dXJuIGxpbmtfcGVlci1cXHUwMDNlbGlua19pZDtcXG4gXFx0fVxcbitcXG4rXFx0cmV0dXJuIC0xO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguaFxcbmluZGV4IDFkM2E0Nzg4YTJkZDkuLmQ2ODQ4OWZmN2IwMzcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5oXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5oXFxuQEAgLTU3LDEwICs1NywxMCBAQCBhdGgxMmtfd2lmaTdfZHBfcnhkZXNjX21wZHVfdmFsaWQoc3RydWN0IGF0aDEya19iYXNlICphYixcXG4gXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaGFsX3J4X2Rlc2MgKnJ4X2Rlc2MpO1xcbiBpbnQgYXRoMTJrX3dpZmk3X2RwX3J4X3RpZF9kZWxldGVfaGFuZGxlcihzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLFxcbiBcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBhdGgxMmtfZHBfcnhfdGlkX3J4cSAqcnhfdGlkKTtcXG4tdm9pZCBhdGgxMmtfd2lmaTdfZHBfcnhfc2V0X2xpbmtfaWRfcWNuOTI3NChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyk7XFxuLXZvaWQgYXRoMTJrX3dpZmk3X2RwX3J4X3NldF9saW5rX2lkX3djbjc4NTAoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpO1xcbitpbnQgYXRoMTJrX3dpZmk3X2RwX3J4X2dldF9saW5rX2lkX3FjbjkyNzQoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLFxcbitcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxcbitcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKTtcXG4raW50IGF0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF93Y243ODUwKHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyk7XFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2h3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2h3LmNcXG5pbmRleCA0YzExMTllZGNhZWRjLi4zY2QzNTE0NjQyOTZjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaHcuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaHcuY1xcbkBAIC0xNTgsNyArMTU4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfb3BzIHFjbjkyNzRfb3BzID0ge1xcbiBcXHQuZ2V0X3Jpbmdfc2VsZWN0b3IgPSBhdGgxMmtfd2lmaTdfaHdfZ2V0X3Jpbmdfc2VsZWN0b3JfcWNuOTI3NCxcXG4gXFx0LmRwX3NybmdfaXNfdHhfY29tcF9yaW5nID0gYXRoMTJrX3dpZmk3X2RwX3NybmdfaXNfY29tcF9yaW5nX3FjbjkyNzQsXFxuIFxcdC5pc19mcmFtZV9saW5rX2Fnbm9zdGljID0gYXRoMTJrX3dpZmk3X2lzX2ZyYW1lX2xpbmtfYWdub3N0aWNfcWNuOTI3NCxcXG4tXFx0LnNldF9yeF9saW5rX2lkID0gYXRoMTJrX3dpZmk3X2RwX3J4X3NldF9saW5rX2lkX3FjbjkyNzQsXFxuK1xcdC5nZXRfcnhfbGlua19pZCA9IGF0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF9xY245Mjc0LFxcbiB9O1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfb3BzIHdjbjc4NTBfb3BzID0ge1xcbkBAIC0xNjksNyArMTY5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfb3BzIHdjbjc4NTBfb3BzID0ge1xcbiBcXHQuZ2V0X3Jpbmdfc2VsZWN0b3IgPSBhdGgxMmtfd2lmaTdfaHdfZ2V0X3Jpbmdfc2VsZWN0b3Jfd2NuNzg1MCxcXG4gXFx0LmRwX3NybmdfaXNfdHhfY29tcF9yaW5nID0gYXRoMTJrX3dpZmk3X2RwX3NybmdfaXNfY29tcF9yaW5nX3djbjc4NTAsXFxuIFxcdC5pc19mcmFtZV9saW5rX2Fnbm9zdGljID0gYXRoMTJrX3dpZmk3X2lzX2ZyYW1lX2xpbmtfYWdub3N0aWNfd2NuNzg1MCxcXG4tXFx0LnNldF9yeF9saW5rX2lkID0gYXRoMTJrX3dpZmk3X2RwX3J4X3NldF9saW5rX2lkX3djbjc4NTAsXFxuK1xcdC5nZXRfcnhfbGlua19pZCA9IGF0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF93Y243ODUwLFxcbiB9O1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfb3BzIHFjYzIwNzJfb3BzID0ge1xcbkBAIC0xODAsNyArMTgwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfb3BzIHFjYzIwNzJfb3BzID0ge1xcbiBcXHQuZ2V0X3Jpbmdfc2VsZWN0b3IgPSBhdGgxMmtfd2lmaTdfaHdfZ2V0X3Jpbmdfc2VsZWN0b3Jfd2NuNzg1MCxcXG4gXFx0LmRwX3NybmdfaXNfdHhfY29tcF9yaW5nID0gYXRoMTJrX3dpZmk3X2RwX3NybmdfaXNfY29tcF9yaW5nX3djbjc4NTAsXFxuIFxcdC5pc19mcmFtZV9saW5rX2Fnbm9zdGljID0gYXRoMTJrX3dpZmk3X2lzX2ZyYW1lX2xpbmtfYWdub3N0aWNfd2NuNzg1MCxcXG4tXFx0LnNldF9yeF9saW5rX2lkID0gYXRoMTJrX3dpZmk3X2RwX3J4X3NldF9saW5rX2lkX3djbjc4NTAsXFxuK1xcdC5nZXRfcnhfbGlua19pZCA9IGF0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF93Y243ODUwLFxcbiB9O1xcbiBcXG4gI2RlZmluZSBBVEgxMktfVFhfUklOR19NQVNLXzAgMHgxXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jXFxuaW5kZXggMmI3MDdmZmMxYTIwZi4uNWQ2MmM0Yzg2MWJiOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuY1xcbkBAIC03MjYwLDcgKzcyNjAsNiBAQCBzdGF0aWMgdm9pZCBhdGgxMmtfbWdtdF9yeF9ldmVudChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRzdHJ1Y3QgYXRoMTJrX3dtaV9tZ210X3J4X2FyZyByeF9ldiA9IHt9O1xcbiBcXHRzdHJ1Y3QgYXRoMTJrICphcjtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpO1xcbi1cXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhID0gTlVMTDtcXG4gXFx0c3RydWN0IGF0aDEya19kcF9saW5rX3BlZXIgKnBlZXI7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7XFxuIFxcdGJvb2wgaXNfNGFkZHJfbnVsbF9wa3Q7XFxuQEAgLTczNjIsMTEgKzczNjEsNiBAQCBzdGF0aWMgdm9pZCBhdGgxMmtfbWdtdF9yeF9ldmVudChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHRcXHRkZXZfa2ZyZWVfc2tiKHNrYik7XFxuIFxcdFxcdFxcdGdvdG8gZXhpdDtcXG4gXFx0XFx0fVxcbi1cXHRcXHRwdWJzdGEgPSBwZWVyLVxcdTAwM2VzdGE7XFxuLVxcdFxcdGlmIChwdWJzdGEgXFx1MDAyNlxcdTAwMjYgcHVic3RhLVxcdTAwM2V2YWxpZF9saW5rcykge1xcbi1cXHRcXHRcXHRzdGF0dXMtXFx1MDAzZWxpbmtfdmFsaWQgPSAxO1xcbi1cXHRcXHRcXHRzdGF0dXMtXFx1MDAzZWxpbmtfaWQgPSBwZWVyLVxcdTAwM2VsaW5rX2lkO1xcbi1cXHRcXHR9XFxuIFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZkcC1cXHUwMDNlZHBfbG9jayk7XFxuIFxcdFxcdGdvdG8gc2VuZF9yeDtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hZ2cuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FnZy5jXFxuaW5kZXggOTYxMDJkMmFmMmNmOS4uYzQ1YzQ3MzM3NTA5ZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hZ2cuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FnZy5jXFxuQEAgLTcsNyArNyw4IEBAXFxuICNpbmNsdWRlIFxcXCJoY21kLmhcXFwiXFxuIFxcbiBzdGF0aWMgdm9pZFxcbi1pd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcXG4raXdsX21sZF9yZW9yZGVyX3JlbGVhc2VfZnJhbWVzKHN0cnVjdCBpd2xfbWxkICptbGQsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSxcXG4gXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcXG4gXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpd2xfbWxkX2JhaWRfZGF0YSAqYmFpZF9kYXRhLFxcbiBcXHRcXHRcXHQgICAgICAgc3RydWN0IGl3bF9tbGRfcmVvcmRlcl9idWZmZXIgKnJlb3JkZXJfYnVmLFxcbkBAIC0zMiw3ICszMyw3IEBAIGl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxcbiBcXHRcXHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoc2tiX2xpc3QpKSkge1xcbiBcXHRcXHRcXHRpd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKG1sZCwgbmFwaSwgc2tiLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHRyZW9yZGVyX2J1Zi1cXHUwMDNlcXVldWUsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdHN0YSk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdGxpbmtfc3RhKTtcXG4gXFx0XFx0XFx0cmVvcmRlcl9idWYtXFx1MDAzZW51bV9zdG9yZWQtLTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuQEAgLTc0LDcgKzc1LDcgQEAgc3RhdGljIHZvaWQgaXdsX21sZF9yZWxlYXNlX2ZyYW1lc19mcm9tX25vdGlmKHN0cnVjdCBpd2xfbWxkICptbGQsXFxuIFxcbiBcXHRyZW9yZGVyX2J1ZiA9IFxcdTAwMjZiYV9kYXRhLVxcdTAwM2VyZW9yZGVyX2J1ZltxdWV1ZV07XFxuIFxcbi1cXHRpd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMobWxkLCBsaW5rX3N0YS1cXHUwMDNlc3RhLCBuYXBpLCBiYV9kYXRhLFxcbitcXHRpd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMobWxkLCBsaW5rX3N0YSwgbmFwaSwgYmFfZGF0YSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHJlb3JkZXJfYnVmLCBuc3NuKTtcXG4gb3V0X3VubG9jazpcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuQEAgLTE4MCw3ICsxODEsNyBAQCB2b2lkIGl3bF9tbGRfZGVsX2JhKHN0cnVjdCBpd2xfbWxkICptbGQsIGludCBxdWV1ZSxcXG4gXFx0cmVvcmRlcl9idWYgPSBcXHUwMDI2YmFfZGF0YS1cXHUwMDNlcmVvcmRlcl9idWZbcXVldWVdO1xcbiBcXG4gXFx0LyogcmVsZWFzZSBhbGwgZnJhbWVzIHRoYXQgYXJlIGluIHRoZSByZW9yZGVyIGJ1ZmZlciB0byB0aGUgc3RhY2sgKi9cXG4tXFx0aXdsX21sZF9yZW9yZGVyX3JlbGVhc2VfZnJhbWVzKG1sZCwgbGlua19zdGEtXFx1MDAzZXN0YSwgTlVMTCxcXG4rXFx0aXdsX21sZF9yZW9yZGVyX3JlbGVhc2VfZnJhbWVzKG1sZCwgbGlua19zdGEsIE5VTEwsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBiYV9kYXRhLCByZW9yZGVyX2J1ZixcXG4gXFx0XFx0XFx0XFx0ICAgICAgIGllZWU4MDIxMV9zbl9hZGQocmVvcmRlcl9idWYtXFx1MDAzZWhlYWRfc24sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdGJhX2RhdGEtXFx1MDAzZWJ1Zl9zaXplKSk7XFxuQEAgLTE5Myw3ICsxOTQsNyBAQCB2b2lkIGl3bF9tbGRfZGVsX2JhKHN0cnVjdCBpd2xfbWxkICptbGQsIGludCBxdWV1ZSxcXG4gICovXFxuIGVudW0gaXdsX21sZF9yZW9yZGVyX3Jlc3VsdFxcbiBpd2xfbWxkX3Jlb3JkZXIoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbi1cXHRcXHRpbnQgcXVldWUsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXFxuK1xcdFxcdGludCBxdWV1ZSwgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEsXFxuIFxcdFxcdHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpd2xfcnhfbXBkdV9kZXNjICpkZXNjKVxcbiB7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAodm9pZCAqKXNrYl9tYWNfaGVhZGVyKHNrYik7XFxuQEAgLTIyOCwxMiArMjI5LDEyIEBAIGl3bF9tbGRfcmVvcmRlcihzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxuIFxcdFxcdHJldHVybiBJV0xfTUxEX1BBU1NfU0tCO1xcbiBcXG4gXFx0Lyogbm8gc3RhIHlldCAqL1xcbi1cXHRpZiAoSVdMX0ZXX0NIRUNLKG1sZCwgIXN0YSxcXG4rXFx0aWYgKElXTF9GV19DSEVDSyhtbGQsICFsaW5rX3N0YSxcXG4gXFx0XFx0XFx0IFxcXCJHb3QgdmFsaWQgQkFJRCB3aXRob3V0IGEgdmFsaWQgc3RhdGlvbiBhc3NpZ25lZCAtICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgYmFpZCkpXFxuIFxcdFxcdHJldHVybiBJV0xfTUxEX1BBU1NfU0tCO1xcbiBcXG4tXFx0bWxkX3N0YSA9IGl3bF9tbGRfc3RhX2Zyb21fbWFjODAyMTEoc3RhKTtcXG4rXFx0bWxkX3N0YSA9IGl3bF9tbGRfc3RhX2Zyb21fbWFjODAyMTEobGlua19zdGEtXFx1MDAzZXN0YSk7XFxuIFxcbiBcXHQvKiBub3QgYSBkYXRhIHBhY2tldCAqL1xcbiBcXHRpZiAoIWllZWU4MDIxMV9pc19kYXRhX3FvcyhoZHItXFx1MDAzZWZyYW1lX2NvbnRyb2wpIHx8XFxuQEAgLTMyNCw3ICszMjUsNyBAQCBpd2xfbWxkX3Jlb3JkZXIoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbiBcXHQgKiB3aWxsIGJlIHJlbGVhc2VkIHdoZW4gdGhlIGZyYW1lIHJlbGVhc2Ugbm90aWZpY2F0aW9uIGFycml2ZXMuXFxuIFxcdCAqL1xcbiBcXHRpZiAoIWFtc2R1IHx8IGxhc3Rfc3ViZnJhbWUpXFxuLVxcdFxcdGl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhtbGQsIHN0YSwgbmFwaSwgYmFpZF9kYXRhLFxcbitcXHRcXHRpd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMobWxkLCBsaW5rX3N0YSwgbmFwaSwgYmFpZF9kYXRhLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICAgYnVmZmVyLCBuc3NuKTtcXG4gXFx0ZWxzZSBpZiAoYnVmZmVyLVxcdTAwM2VudW1fc3RvcmVkID09IDEpXFxuIFxcdFxcdGJ1ZmZlci1cXHUwMDNlaGVhZF9zbiA9IG5zc247XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FnZy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYWdnLmhcXG5pbmRleCA2NTFjODBkMWM3Y2RhLi5jNmNkNWZhMjE5YmVkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FnZy5oXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYWdnLmhcXG5AQCAtMSw2ICsxLDYgQEBcXG4gLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgQlNELTMtQ2xhdXNlICovXFxuIC8qXFxuLSAqIENvcHlyaWdodCAoQykgMjAyNCBJbnRlbCBDb3Jwb3JhdGlvblxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjQsIDIwMjYgSW50ZWwgQ29ycG9yYXRpb25cXG4gICovXFxuICNpZm5kZWYgX19pd2xfYWdnX2hfX1xcbiAjZGVmaW5lIF9faXdsX2FnZ19oX19cXG5AQCAtMTA2LDcgKzEwNiw3IEBAIGludCBpd2xfbWxkX2FtcGR1X3J4X3N0b3Aoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcXG4gXFxuIGVudW0gaXdsX21sZF9yZW9yZGVyX3Jlc3VsdFxcbiBpd2xfbWxkX3Jlb3JkZXIoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbi1cXHRcXHRpbnQgcXVldWUsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXFxuK1xcdFxcdGludCBxdWV1ZSwgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEsXFxuIFxcdFxcdHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpd2xfcnhfbXBkdV9kZXNjICpkZXNjKTtcXG4gXFxuIHZvaWQgaXdsX21sZF9oYW5kbGVfZnJhbWVfcmVsZWFzZV9ub3RpZihzdHJ1Y3QgaXdsX21sZCAqbWxkLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguY1xcbmluZGV4IDI2OTQzOWQ3ODlmNDYuLjAyYmRmNmNjYmNkYzkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmNcXG5AQCAtNDcsNyArNDcsOCBAQCBpd2xfbWxkX2ZpbGxfcGh5X2RhdGFfZnJvbV9tcGR1KHN0cnVjdCBpd2xfbWxkICptbGQsXFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgaW50IGl3bF9tbGRfY2hlY2tfcG4oc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tXFx0XFx0XFx0XFx0ICAgaW50IHF1ZXVlLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKVxcbitcXHRcXHRcXHRcXHQgICBpbnQgcXVldWUsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhKVxcbiB7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAodm9pZCAqKXNrYl9tYWNfaGVhZGVyKHNrYik7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpO1xcbkBAIC03MSwxMyArNzIsMTMgQEAgc3RhdGljIGlubGluZSBpbnQgaXdsX21sZF9jaGVja19wbihzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdC8qIGlmIHdlIGFyZSBoZXJlIC0gdGhpcyBmb3Igc3VyZSBpcyBlaXRoZXIgQ0NNUCBvciBHQ01QICovXFxuLVxcdGlmICghc3RhKSB7XFxuK1xcdGlmICghbGlua19zdGEpIHtcXG4gXFx0XFx0SVdMX0RFQlVHX0RST1AobWxkLFxcbiBcXHRcXHRcXHQgICAgICAgXFxcImV4cGVjdGVkIGh3LWRlY3J5cHRlZCB1bmljYXN0IGZyYW1lIGZvciBzdGF0aW9uXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIC0xO1xcbiBcXHR9XFxuIFxcbi1cXHRtbGRfc3RhID0gaXdsX21sZF9zdGFfZnJvbV9tYWM4MDIxMShzdGEpO1xcbitcXHRtbGRfc3RhID0gaXdsX21sZF9zdGFfZnJvbV9tYWM4MDIxMShsaW5rX3N0YS1cXHUwMDNlc3RhKTtcXG4gXFxuIFxcdGV4dGl2ID0gKHU4ICopaGRyICsgaWVlZTgwMjExX2hkcmxlbihoZHItXFx1MDAzZWZyYW1lX2NvbnRyb2wpO1xcbiBcXHRrZXlpZHggPSBleHRpdlszXSBcXHUwMDNlXFx1MDAzZSA2O1xcbkBAIC0xMTksMTcgKzEyMCwxNyBAQCBzdGF0aWMgaW5saW5lIGludCBpd2xfbWxkX2NoZWNrX3BuKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBza19idWZmICpza2IsXFxuIHZvaWQgaXdsX21sZF9wYXNzX3BhY2tldF90b19tYWM4MDIxMShzdHJ1Y3QgaXdsX21sZCAqbWxkLFxcbiBcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcXG4gXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcXVldWUsXFxuLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSlcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSlcXG4ge1xcbiBcXHRLVU5JVF9TVEFUSUNfU1RVQl9SRURJUkVDVChpd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExLFxcbi1cXHRcXHRcXHRcXHQgICBtbGQsIG5hcGksIHNrYiwgcXVldWUsIHN0YSk7XFxuK1xcdFxcdFxcdFxcdCAgIG1sZCwgbmFwaSwgc2tiLCBxdWV1ZSwgbGlua19zdGEpO1xcbiBcXG4tXFx0aWYgKHVubGlrZWx5KGl3bF9tbGRfY2hlY2tfcG4obWxkLCBza2IsIHF1ZXVlLCBzdGEpKSkge1xcbitcXHRpZiAodW5saWtlbHkoaXdsX21sZF9jaGVja19wbihtbGQsIHNrYiwgcXVldWUsIGxpbmtfc3RhKSkpIHtcXG4gXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4tXFx0aWVlZTgwMjExX3J4X25hcGkobWxkLVxcdTAwM2Vodywgc3RhLCBza2IsIG5hcGkpO1xcbitcXHRpZWVlODAyMTFfcnhfbmFwaShtbGQtXFx1MDAzZWh3LCBsaW5rX3N0YSwgc2tiLCBuYXBpKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0lGX0lXTFdJRklfS1VOSVQoaXdsX21sZF9wYXNzX3BhY2tldF90b19tYWM4MDIxMSk7XFxuIFxcbkBAIC0xNzI4LDcgKzE3MjksNyBAQCBzdGF0aWMgdm9pZCBpd2xfbWxkX3VwZGF0ZV9sYXN0X3J4X3RpbWVzdGFtcChzdHJ1Y3QgaXdsX21sZCAqbWxkLCB1OCBiYWlkKVxcbiAgKiBTZXRzICpkcm9wIHRvIHRydWUgaWYgdGhlIHBhY2tldCBzaG91bGQgYmUgZHJvcHBlZC5cXG4gICogUmV0dXJucyB0aGUgc3RhdGlvbiBpZiBmb3VuZCwgb3IgTlVMTCBvdGhlcndpc2UuXFxuICAqL1xcbi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9zdGEgKlxcbitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqXFxuIGl3bF9tbGRfcnhfd2l0aF9zdGEoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcixcXG4gXFx0XFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgaXdsX3J4X21wZHVfZGVzYyAqbXBkdV9kZXNjLFxcbkBAIC0xNzY0LDExICsxNzY1LDYgQEAgaXdsX21sZF9yeF93aXRoX3N0YShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLFxcbiBcXG4gXFx0cnhfc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XFxuIFxcbi1cXHRpZiAobGlua19zdGEgXFx1MDAyNlxcdTAwMjYgc3RhLVxcdTAwM2V2YWxpZF9saW5rcykge1xcbi1cXHRcXHRyeF9zdGF0dXMtXFx1MDAzZWxpbmtfdmFsaWQgPSB0cnVlO1xcbi1cXHRcXHRyeF9zdGF0dXMtXFx1MDAzZWxpbmtfaWQgPSBsaW5rX3N0YS1cXHUwMDNlbGlua19pZDtcXG4tXFx0fVxcbi1cXG4gXFx0LyogZmlsbCBjaGVja3N1bSAqL1xcbiBcXHRpZiAoaWVlZTgwMjExX2lzX2RhdGEoaGRyLVxcdTAwM2VmcmFtZV9jb250cm9sKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgcGt0LVxcdTAwM2VsZW5fbl9mbGFncyBcXHUwMDI2IGNwdV90b19sZTMyKEZIX1JTQ1NSX1JQQV9FTikpIHtcXG5AQCAtMTgwMywxMCArMTc5OSwxMCBAQCBpd2xfbWxkX3J4X3dpdGhfc3RhKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBxdWV1ZSk7XFxuIFxcdH1cXG4gXFxuLVxcdHJldHVybiBzdGE7XFxuK1xcdHJldHVybiBsaW5rX3N0YTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBpd2xfbWxkX3J4X21nbXRfcHJvdChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxcbitzdGF0aWMgaW50IGl3bF9tbGRfcnhfbWdtdF9wcm90KHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhLFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzLFxcbiBcXHRcXHRcXHRcXHR1MzIgbXBkdV9zdGF0dXMsXFxuQEAgLTE4MjAsNyArMTgxNiw2IEBAIHN0YXRpYyBpbnQgaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5O1xcbiBcXHRjb25zdCB1OCAqZnJhbWUgPSAodm9pZCAqKWhkcjtcXG4gXFx0Y29uc3QgdTggKm1taWU7XFxuLVxcdHU4IGxpbmtfaWQ7XFxuIFxcbiBcXHRpZiAoKG1wZHVfc3RhdHVzIFxcdTAwMjYgSVdMX1JYX01QRFVfU1RBVFVTX1NFQ19NQVNLKSA9PVxcbiBcXHQgICAgIElXTF9SWF9NUERVX1NUQVRVU19TRUNfTk9ORSlcXG5AQCAtMTgzNiwxMCArMTgzMSwxMCBAQCBzdGF0aWMgaW50IGl3bF9tbGRfcnhfbWdtdF9wcm90KHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXFxuIFxcdGlmICghaWVlZTgwMjExX2lzX2JlYWNvbihoZHItXFx1MDAzZWZyYW1lX2NvbnRyb2wpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGlmICghc3RhKVxcbitcXHRpZiAoIWxpbmtfc3RhKVxcbiBcXHRcXHRyZXR1cm4gLTE7XFxuIFxcbi1cXHRtbGRfc3RhID0gaXdsX21sZF9zdGFfZnJvbV9tYWM4MDIxMShzdGEpO1xcbitcXHRtbGRfc3RhID0gaXdsX21sZF9zdGFfZnJvbV9tYWM4MDIxMShsaW5rX3N0YS1cXHUwMDNlc3RhKTtcXG4gXFx0bWxkX3ZpZiA9IGl3bF9tbGRfdmlmX2Zyb21fbWFjODAyMTEobWxkX3N0YS1cXHUwMDNldmlmKTtcXG4gXFxuIFxcdC8qIGtleSBtaXNtYXRjaCAtIHdpbGwgYWxzbyByZXBvcnQgIU1JQ19PSyBidXQgd2Ugc2hvdWxkbid0IGNvdW50IGl0ICovXFxuQEAgLTE4NTMsOCArMTg0OCw3IEBAIHN0YXRpYyBpbnQgaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFxuLVxcdGxpbmtfaWQgPSByeF9zdGF0dXMtXFx1MDAzZWxpbmtfdmFsaWQgPyByeF9zdGF0dXMtXFx1MDAzZWxpbmtfaWQgOiAwO1xcbi1cXHRsaW5rID0gcmN1X2RlcmVmZXJlbmNlKG1sZF92aWYtXFx1MDAzZWxpbmtbbGlua19pZF0pO1xcbitcXHRsaW5rID0gcmN1X2RlcmVmZXJlbmNlKG1sZF92aWYtXFx1MDAzZWxpbmtbbGlua19zdGEtXFx1MDAzZWxpbmtfaWRdKTtcXG4gXFx0aWYgKFdBUk5fT05fT05DRSghbGluaykpXFxuIFxcdFxcdHJldHVybiAtMTtcXG4gXFxuQEAgLTE5MDUsNyArMTg5OSw3IEBAIHN0YXRpYyBpbnQgaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcXG4gfVxcbiBcXG4gc3RhdGljIGludCBpd2xfbWxkX3J4X2NyeXB0byhzdHJ1Y3QgaXdsX21sZCAqbWxkLFxcbi1cXHRcXHRcXHQgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXFxuK1xcdFxcdFxcdCAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEsXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcixcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzLFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCBpd2xfcnhfbXBkdV9kZXNjICpkZXNjLCBpbnQgcXVldWUsXFxuQEAgLTE5MTUsNyArMTkwOSw3IEBAIHN0YXRpYyBpbnQgaXdsX21sZF9yeF9jcnlwdG8oc3RydWN0IGl3bF9tbGQgKm1sZCxcXG4gXFxuIFxcdGlmICh1bmxpa2VseShpZWVlODAyMTFfaXNfbWdtdChoZHItXFx1MDAzZWZyYW1lX2NvbnRyb2wpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICAgIWllZWU4MDIxMV9oYXNfcHJvdGVjdGVkKGhkci1cXHUwMDNlZnJhbWVfY29udHJvbCkpKVxcbi1cXHRcXHRyZXR1cm4gaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RhLCBoZHIsIHJ4X3N0YXR1cywgc3RhdHVzLFxcbitcXHRcXHRyZXR1cm4gaXdsX21sZF9yeF9tZ210X3Byb3QobGlua19zdGEsIGhkciwgcnhfc3RhdHVzLCBzdGF0dXMsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBsZTE2X3RvX2NwdShkZXNjLVxcdTAwM2VtcGR1X2xlbikpO1xcbiBcXG4gXFx0aWYgKCFpZWVlODAyMTFfaGFzX3Byb3RlY3RlZChoZHItXFx1MDAzZWZyYW1lX2NvbnRyb2wpIHx8XFxuQEAgLTIwMjMsNyArMjAxNyw3IEBAIHZvaWQgaXdsX21sZF9yeF9tcGR1KHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcXG4gXFx0c3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IHJ4Yl9hZGRyKHJ4Yik7XFxuIFxcdHN0cnVjdCBpd2xfbWxkX3J4X3BoeV9kYXRhIHBoeV9kYXRhID0ge307XFxuIFxcdHN0cnVjdCBpd2xfcnhfbXBkdV9kZXNjICptcGR1X2Rlc2MgPSAodm9pZCAqKXBrdC1cXHUwMDNlZGF0YTtcXG4tXFx0c3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTtcXG4rXFx0c3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGE7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7XFxuIFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIFxcdHNpemVfdCBtcGR1X2Rlc2Nfc2l6ZSA9IHNpemVvZigqbXBkdV9kZXNjKTtcXG5AQCAtMjA4Niw3ICsyMDgwLDggQEAgdm9pZCBpd2xfbWxkX3J4X21wZHUoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbiBcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXG4tXFx0c3RhID0gaXdsX21sZF9yeF93aXRoX3N0YShtbGQsIGhkciwgc2tiLCBtcGR1X2Rlc2MsIHBrdCwgcXVldWUsIFxcdTAwMjZkcm9wKTtcXG4rXFx0bGlua19zdGEgPSBpd2xfbWxkX3J4X3dpdGhfc3RhKG1sZCwgaGRyLCBza2IsIG1wZHVfZGVzYywgcGt0LCBxdWV1ZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZkcm9wKTtcXG4gXFx0aWYgKGRyb3ApXFxuIFxcdFxcdGdvdG8gZHJvcDtcXG4gXFxuQEAgLTIxMjcsNyArMjEyMiw3IEBAIHZvaWQgaXdsX21sZF9yeF9tcGR1KHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcXG4gXFxuIFxcdGl3bF9tbGRfcnhfZmlsbF9zdGF0dXMobWxkLCBsaW5rX2lkLCBoZHIsIHNrYiwgXFx1MDAyNnBoeV9kYXRhKTtcXG4gXFxuLVxcdGlmIChpd2xfbWxkX3J4X2NyeXB0byhtbGQsIHN0YSwgaGRyLCByeF9zdGF0dXMsIG1wZHVfZGVzYywgcXVldWUsXFxuK1xcdGlmIChpd2xfbWxkX3J4X2NyeXB0byhtbGQsIGxpbmtfc3RhLCBoZHIsIHJ4X3N0YXR1cywgbXBkdV9kZXNjLCBxdWV1ZSxcXG4gXFx0XFx0XFx0ICAgICAgbGUzMl90b19jcHUocGt0LVxcdTAwM2VsZW5fbl9mbGFncyksIFxcdTAwMjZjcnlwdG9fbGVuKSlcXG4gXFx0XFx0Z290byBkcm9wO1xcbiBcXG5AQCAtMjE0MCw3ICsyMTM1LDggQEAgdm9pZCBpd2xfbWxkX3J4X21wZHUoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbiBcXHRpZiAoaXdsX21sZF90aW1lX3N5bmNfZnJhbWUobWxkLCBza2IsIGhkci1cXHUwMDNlYWRkcjIpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuLVxcdHJlb3JkZXJfcmVzID0gaXdsX21sZF9yZW9yZGVyKG1sZCwgbmFwaSwgcXVldWUsIHN0YSwgc2tiLCBtcGR1X2Rlc2MpO1xcbitcXHRyZW9yZGVyX3JlcyA9IGl3bF9tbGRfcmVvcmRlcihtbGQsIG5hcGksIHF1ZXVlLCBsaW5rX3N0YSwgc2tiLFxcbitcXHRcXHRcXHRcXHQgICAgICBtcGR1X2Rlc2MpO1xcbiBcXHRzd2l0Y2ggKHJlb3JkZXJfcmVzKSB7XFxuIFxcdGNhc2UgSVdMX01MRF9QQVNTX1NLQjpcXG4gXFx0XFx0YnJlYWs7XFxuQEAgLTIxNTMsNyArMjE0OSw3IEBAIHZvaWQgaXdsX21sZF9yeF9tcGR1KHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcXG4gXFx0XFx0Z290byBkcm9wO1xcbiBcXHR9XFxuIFxcbi1cXHRpd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKG1sZCwgbmFwaSwgc2tiLCBxdWV1ZSwgc3RhKTtcXG4rXFx0aXdsX21sZF9wYXNzX3BhY2tldF90b19tYWM4MDIxMShtbGQsIG5hcGksIHNrYiwgcXVldWUsIGxpbmtfc3RhKTtcXG4gXFxuIFxcdGdvdG8gb3V0O1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmhcXG5pbmRleCA1NzNiODljM2M5YzYxLi5iMDhjNWFkZTNkYjhmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmhcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5oXFxuQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBpd2xfbWxkX2hhbmRsZV9yc2Nfbm90aWYoc3RydWN0IGl3bF9tbGQgKm1sZCxcXG4gdm9pZCBpd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKHN0cnVjdCBpd2xfbWxkICptbGQsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbiBcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBxdWV1ZSxcXG4tXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKTtcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSk7XFxuIFxcbiB2b2lkIGl3bF9tbGRfaGFuZGxlX3BoeV9haXJfc25pZmZlcl9ub3RpZihzdHJ1Y3QgaXdsX21sZCAqbWxkLFxcbiBcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvdGVzdHMvYWdnLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC90ZXN0cy9hZ2cuY1xcbmluZGV4IDI5YjAyNDhjZWMzZGYuLmU5ZWZlMjk5NmYwNzEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvdGVzdHMvYWdnLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC90ZXN0cy9hZ2cuY1xcbkBAIC0yLDcgKzIsNyBAQFxcbiAvKlxcbiAgKiBLVW5pdCB0ZXN0cyBmb3IgY2hhbm5lbCBoZWxwZXIgZnVuY3Rpb25zXFxuICAqXFxuLSAqIENvcHlyaWdodCAoQykgMjAyNC0yMDI1IEludGVsIENvcnBvcmF0aW9uXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNC0yMDI2IEludGVsIENvcnBvcmF0aW9uXFxuICAqL1xcbiAjaW5jbHVkZSBcXHUwMDNja3VuaXQvdGVzdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNja3VuaXQvc3RhdGljX3N0dWIuaFxcdTAwM2VcXG5AQCAtNDQxLDcgKzQ0MSw3IEBAIHN0YXRpYyB2b2lkXFxuIGZha2VfaXdsX21sZF9wYXNzX3BhY2tldF90b19tYWM4MDIxMShzdHJ1Y3QgaXdsX21sZCAqbWxkLFxcbiBcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcXG4gXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcXVldWUsXFxuLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSlcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSlcXG4ge1xcbiBcXHRfX3NrYl9xdWV1ZV90YWlsKFxcdTAwMjZnX3JlbGVhc2VkX3NrYnMsIHNrYik7XFxuIFxcdGdfbnVtX3JlbGVhc2VkX3NrYnMrKztcXG5AQCAtNjMwLDcgKzYzMCw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfcmVvcmRlcl9idWZmZXIoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiBcXHRtcGR1X2Rlc2MgPSBzZXR1cF9tcGR1X2Rlc2MoKTtcXG4gXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG4tXFx0cmVvcmRlcl9yZXMgPSBpd2xfbWxkX3Jlb3JkZXIobWxkLCBOVUxMLCBRVUVVRSwgc3RhLCBza2IsIG1wZHVfZGVzYyk7XFxuK1xcdHJlb3JkZXJfcmVzID0gaXdsX21sZF9yZW9yZGVyKG1sZCwgTlVMTCwgUVVFVUUsIFxcdTAwMjZzdGEtXFx1MDAzZWRlZmxpbmssIHNrYixcXG4rXFx0XFx0XFx0XFx0ICAgICAgbXBkdV9kZXNjKTtcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcbiBcXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmVvcmRlcl9yZXMsIHBhcmFtLVxcdTAwM2VleHBlY3RlZC5yZW9yZGVyX3Jlcyk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeC5jXFxuaW5kZXggYWIxZWIyZWIwYzNjZC4uOGMxOTdhMDkwYzJiMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeC5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnguY1xcbkBAIC05MCw3ICs5MCw3IEBAIHN0YXRpYyB2b2lkIGl3bF9tdm1fcGFzc19wYWNrZXRfdG9fbWFjODAyMTEoc3RydWN0IGl3bF9tdm0gKm12bSxcXG4gXFx0XFx0XFx0XFx0ZnJhZ2xlbiwgcnhiLVxcdTAwM2V0cnVlc2l6ZSk7XFxuIFxcdH1cXG4gXFxuLVxcdGllZWU4MDIxMV9yeF9uYXBpKG12bS1cXHUwMDNlaHcsIHN0YSwgc2tiLCBuYXBpKTtcXG4rXFx0aWVlZTgwMjExX3J4X25hcGkobXZtLVxcdTAwM2Vodywgc3RhID8gXFx1MDAyNnN0YS1cXHUwMDNlZGVmbGluayA6IE5VTEwsIHNrYiwgbmFwaSk7XFxuIH1cXG4gXFxuIC8qXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4bXEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4bXEuY1xcbmluZGV4IDdmMGI0ZjVkYWEyMTQuLjhjNDAwOWQzYTAwY2EgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnhtcS5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnhtcS5jXFxuQEAgLTEsNiArMSw2IEBAXFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIEJTRC0zLUNsYXVzZVxcbiAvKlxcbi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCwgMjAxOC0yMDI1IEludGVsIENvcnBvcmF0aW9uXFxuKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE0LCAyMDE4LTIwMjYgSW50ZWwgQ29ycG9yYXRpb25cXG4gICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgSW50ZWwgTW9iaWxlIENvbW11bmljYXRpb25zIEdtYkhcXG4gICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgSW50ZWwgRGV1dHNjaGxhbmQgR21iSFxcbiAgKi9cXG5AQCAtMjQzLDcgKzI0Myw3IEBAIHN0YXRpYyB2b2lkIGl3bF9tdm1fcGFzc19wYWNrZXRfdG9fbWFjODAyMTEoc3RydWN0IGl3bF9tdm0gKm12bSxcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcbi1cXHRpZWVlODAyMTFfcnhfbmFwaShtdm0tXFx1MDAzZWh3LCBzdGEsIHNrYiwgbmFwaSk7XFxuK1xcdGllZWU4MDIxMV9yeF9uYXBpKG12bS1cXHUwMDNlaHcsIHN0YSA/IFxcdTAwMjZzdGEtXFx1MDAzZWRlZmxpbmsgOiBOVUxMLCBza2IsIG5hcGkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCBpd2xfbXZtX3VzZWRfYXZlcmFnZV9lbmVyZ3koc3RydWN0IGl3bF9tdm0gKm12bSxcXG5AQCAtMjUyOCw3ICsyNTI4LDcgQEAgdm9pZCBpd2xfbXZtX3J4X21vbml0b3Jfbm9fZGF0YShzdHJ1Y3QgaXdsX212bSAqbXZtLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxuIFxcdH1cXG4gXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG4tXFx0aWVlZTgwMjExX3J4X25hcGkobXZtLVxcdTAwM2Vodywgc3RhLCBza2IsIG5hcGkpO1xcbitcXHRpZWVlODAyMTFfcnhfbmFwaShtdm0tXFx1MDAzZWh3LCBzdGEgPyBcXHUwMDI2c3RhLVxcdTAwM2VkZWZsaW5rIDogTlVMTCwgc2tiLCBuYXBpKTtcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbWFjODAyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbWFjODAyMTEuY1xcbmluZGV4IDEzYzRlOGFiZTI4MTkuLmQ1YTQ3YWIyOWY1ODQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tYWM4MDIxMS5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tYWM4MDIxMS5jXFxuQEAgLTEyMzksNyArMTIzOSw3IEBAIEVYUE9SVF9TWU1CT0wobXQ3Nl9yeF9zaWduYWwpO1xcbiBzdGF0aWMgdm9pZFxcbiBtdDc2X3J4X2NvbnZlcnQoc3RydWN0IG10NzZfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdHN0cnVjdCBpZWVlODAyMTFfaHcgKipodyxcXG4tXFx0XFx0c3RydWN0IGllZWU4MDIxMV9zdGEgKipzdGEpXFxuK1xcdFxcdHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKipsaW5rX3N0YSlcXG4ge1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSBtdDc2X3NrYl9nZXRfaGRyKHNrYik7XFxuQEAgLTEyODYsMTEgKzEyODYsMTUgQEAgbXQ3Nl9yeF9jb252ZXJ0KHN0cnVjdCBtdDc2X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHQgICAgICAgc2l6ZW9mKG1zdGF0LmNoYWluX3NpZ25hbCkpO1xcbiBcXG4gXFx0aWYgKG1zdGF0LndjaWQpIHtcXG4tXFx0XFx0c3RhdHVzLVxcdTAwM2VsaW5rX3ZhbGlkID0gbXN0YXQud2NpZC1cXHUwMDNlbGlua192YWxpZDtcXG4tXFx0XFx0c3RhdHVzLVxcdTAwM2VsaW5rX2lkID0gbXN0YXQud2NpZC1cXHUwMDNlbGlua19pZDtcXG4rXFx0XFx0c3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSA9IHdjaWRfdG9fc3RhKG1zdGF0LndjaWQpO1xcbitcXG4rXFx0XFx0aWYgKG1zdGF0LndjaWQtXFx1MDAzZWxpbmtfdmFsaWQpXFxuK1xcdFxcdFxcdCpsaW5rX3N0YSA9XFxuK1xcdFxcdFxcdFxcdHJjdV9kZXJlZmVyZW5jZShzdGEtXFx1MDAzZWxpbmtbbXN0YXQud2NpZC1cXHUwMDNlbGlua19pZF0pO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdCpsaW5rX3N0YSA9IFxcdTAwMjZzdGEtXFx1MDAzZWRlZmxpbms7XFxuIFxcdH1cXG4gXFxuLVxcdCpzdGEgPSB3Y2lkX3RvX3N0YShtc3RhdC53Y2lkKTtcXG4gXFx0Kmh3ID0gbXQ3Nl9waHlfaHcoZGV2LCBtc3RhdC5waHlfaWR4KTtcXG4gfVxcbiBcXG5AQCAtMTUxNCw3ICsxNTE4LDcgQEAgbXQ3Nl9jaGVja19zdGEoc3RydWN0IG10NzZfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuIHZvaWQgbXQ3Nl9yeF9jb21wbGV0ZShzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqZnJhbWVzLFxcbiBcXHRcXHQgICAgICBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXFxuIHtcXG4tXFx0c3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTtcXG4rXFx0c3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGE7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3O1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqdG1wO1xcbiBcXHRMSVNUX0hFQUQobGlzdCk7XFxuQEAgLTE1MjUsOCArMTUyOSw4IEBAIHZvaWQgbXQ3Nl9yeF9jb21wbGV0ZShzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqZnJhbWVzLFxcbiBcXG4gXFx0XFx0bXQ3Nl9jaGVja19jY21wX3BuKHNrYik7XFxuIFxcdFxcdHNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZnJhZ19saXN0ID0gTlVMTDtcXG4tXFx0XFx0bXQ3Nl9yeF9jb252ZXJ0KGRldiwgc2tiLCBcXHUwMDI2aHcsIFxcdTAwMjZzdGEpO1xcbi1cXHRcXHRpZWVlODAyMTFfcnhfbGlzdChodywgc3RhLCBza2IsIFxcdTAwMjZsaXN0KTtcXG4rXFx0XFx0bXQ3Nl9yeF9jb252ZXJ0KGRldiwgc2tiLCBcXHUwMDI2aHcsIFxcdTAwMjZsaW5rX3N0YSk7XFxuK1xcdFxcdGllZWU4MDIxMV9yeF9saXN0KGh3LCBsaW5rX3N0YSwgc2tiLCBcXHUwMDI2bGlzdCk7XFxuIFxcbiBcXHRcXHQvKiBzdWJzZXF1ZW50IGFtc2R1IGZyYW1lcyAqL1xcbiBcXHRcXHR3aGlsZSAobnNrYikge1xcbkBAIC0xNTM0LDggKzE1MzgsOCBAQCB2b2lkIG10NzZfcnhfY29tcGxldGUoc3RydWN0IG10NzZfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmX2hlYWQgKmZyYW1lcyxcXG4gXFx0XFx0XFx0bnNrYiA9IG5za2ItXFx1MDAzZW5leHQ7XFxuIFxcdFxcdFxcdHNrYi1cXHUwMDNlbmV4dCA9IE5VTEw7XFxuIFxcbi1cXHRcXHRcXHRtdDc2X3J4X2NvbnZlcnQoZGV2LCBza2IsIFxcdTAwMjZodywgXFx1MDAyNnN0YSk7XFxuLVxcdFxcdFxcdGllZWU4MDIxMV9yeF9saXN0KGh3LCBzdGEsIHNrYiwgXFx1MDAyNmxpc3QpO1xcbitcXHRcXHRcXHRtdDc2X3J4X2NvbnZlcnQoZGV2LCBza2IsIFxcdTAwMjZodywgXFx1MDAyNmxpbmtfc3RhKTtcXG4rXFx0XFx0XFx0aWVlZTgwMjExX3J4X2xpc3QoaHcsIGxpbmtfc3RhLCBza2IsIFxcdTAwMjZsaXN0KTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZXJ4X2xvY2spO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2NvcmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY29yZS5jXFxuaW5kZXggMGYwZTQ2Y2I0MjYwNS4uZGY5NmQwYTk2Nzg3MyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2NvcmUuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY29yZS5jXFxuQEAgLTMwMzYsNyArMzAzNiw2IEBAIHN0YXRpYyB2b2lkIHJ0dzg5X3ZpZl9yeF9zdGF0c19pdGVyKHZvaWQgKmRhdGEsIHU4ICptYWMsXFxuIFxcdHN0cnVjdCBydHc4OV92aWYgKnJ0d3ZpZiA9IHZpZl90b19ydHd2aWYodmlmKTtcXG4gXFx0c3RydWN0IHJ0dzg5X3J4X2Rlc2NfaW5mbyAqZGVzY19pbmZvID0gaXRlcl9kYXRhLVxcdTAwM2VkZXNjX2luZm87XFxuIFxcdHN0cnVjdCBza19idWZmICpza2IgPSBpdGVyX2RhdGEtXFx1MDAzZXNrYjtcXG4tXFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpO1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLVxcdTAwM2VkYXRhO1xcbiBcXHRzdHJ1Y3QgcnR3ODlfcnhfcGh5X3BwZHUgKnBoeV9wcGR1ID0gaXRlcl9kYXRhLVxcdTAwM2VwaHlfcHBkdTtcXG4gXFx0Ym9vbCBpc19tbGQgPSBpZWVlODAyMTFfdmlmX2lzX21sZCh2aWYpO1xcbkBAIC0zMDczLDExICszMDcyLDYgQEAgc3RhdGljIHZvaWQgcnR3ODlfdmlmX3J4X3N0YXRzX2l0ZXIodm9pZCAqZGF0YSwgdTggKm1hYyxcXG4gXFx0aWYgKCFldGhlcl9hZGRyX2VxdWFsKHRhcmdldF9ic3NpZCwgYnNzaWQpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuLVxcdGlmIChpc19tbGQpIHtcXG4tXFx0XFx0cnhfc3RhdHVzLVxcdTAwM2VsaW5rX3ZhbGlkID0gdHJ1ZTtcXG4tXFx0XFx0cnhfc3RhdHVzLVxcdTAwM2VsaW5rX2lkID0gcnR3dmlmX2xpbmstXFx1MDAzZWxpbmtfaWQ7XFxuLVxcdH1cXG4tXFxuIFxcdGJiID0gcnR3ODlfZ2V0X2JiX2N0eChydHdkZXYsIHJ0d3ZpZl9saW5rLVxcdTAwM2VwaHlfaWR4KTtcXG4gXFx0cGt0X3N0YXQgPSBcXHUwMDI2YmItXFx1MDAzZWN1cl9wa3Rfc3RhdDtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcXG5pbmRleCAwMmI2ZDgxY2NjZDExLi5hMGQ1MTljZDljNGZhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcXG5AQCAtMTg4MCw5ICsxODgwLDYgQEAgc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fcngoc3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEsXFxuIFxcdFxcdFxcdFxcdHNwLVxcdTAwM2VhY3RpdmVfbGlua3NfcnggXFx1MDAyNj0gfkJJVChsaW5rX2lkKTtcXG4gXFx0XFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRcXHRzcC1cXHUwMDNlYWN0aXZlX2xpbmtzX3J4IHw9IEJJVChsaW5rX2lkKTtcXG4tXFxuLVxcdFxcdFxcdHJ4X3N0YXR1cy1cXHUwMDNlbGlua192YWxpZCA9IHRydWU7XFxuLVxcdFxcdFxcdHJ4X3N0YXR1cy1cXHUwMDNlbGlua19pZCA9IGxpbmtfaWQ7XFxuIFxcdFxcdH1cXG4gXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaCBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmhcXG5pbmRleCBkY2JiMGU1NWMzMmVjLi41OWJkMTUzMjMyMmQ3IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L2NmZzgwMjExLmhcXG4rKysgYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oXFxuQEAgLTQwMDksNiArNDAwOSw3IEBAIHN0cnVjdCBjZmc4MDIxMV91cGRhdGVfZnRfaWVzX3BhcmFtcyB7XFxuICAqIEBsaW5rX2lkOiBmb3IgTUxPLCB0aGUgbGluayBJRCB0byB0cmFuc21pdCBvbiwgLTEgaWYgbm90IGdpdmVuOyBub3RlXFxuICAqXFx0dGhhdCB0aGUgbGluayBJRCBpc24ndCB2YWxpZGF0ZWQgKG11Y2gpLCBpdCdzIGluIHJhbmdlIGJ1dCB0aGVcXG4gICpcXHRsaW5rIG1pZ2h0IG5vdCBleGlzdCAob3IgYmUgdXNlZCBieSB0aGUgcmVjZWl2ZXIgU1RBKVxcbisgKiBAbm9fc3RhOiBzZXQgaWYgdGhlIGZyYW1lIHNob3VsZCBub3QgYmUgdHJhbnNtaXR0ZWQgdXNpbmcgYW4gZXhpc3RpbmcgU1RBXFxuICAqL1xcbiBzdHJ1Y3QgY2ZnODAyMTFfbWdtdF90eF9wYXJhbXMge1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47XFxuQEAgLTQwMjEsNiArNDAyMiw3IEBAIHN0cnVjdCBjZmc4MDIxMV9tZ210X3R4X3BhcmFtcyB7XFxuIFxcdGludCBuX2NzYV9vZmZzZXRzO1xcbiBcXHRjb25zdCB1MTYgKmNzYV9vZmZzZXRzO1xcbiBcXHRpbnQgbGlua19pZDtcXG4rXFx0Ym9vbCBub19zdGE7XFxuIH07XFxuIFxcbiAvKipcXG5AQCAtOTQ5OSw2ICs5NTAxLDcgQEAgdm9pZCBjZmc4MDIxMV9jb25uX2ZhaWxlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqbWFjX2FkZHIsXFxuICAqIEBmbGFnczogZmxhZ3MsIGFzIGRlZmluZWQgaW4gXFx1MDAyNmVudW0gbmw4MDIxMV9yeG1nbXRfZmxhZ3NcXG4gICogQHJ4X3RzdGFtcDogSGFyZHdhcmUgdGltZXN0YW1wIG9mIGZyYW1lIFJYIGluIG5hbm9zZWNvbmRzXFxuICAqIEBhY2tfdHN0YW1wOiBIYXJkd2FyZSB0aW1lc3RhbXAgb2YgYWNrIFRYIGluIG5hbm9zZWNvbmRzXFxuKyAqIEBub19zdGE6IHNldCBpZiBubyBzdGF0aW9uIGlzIGtub3duIGZvciB0aGUgZnJhbWUgKHJlbGV2YW50IGZvciBNTEQpXFxuICAqL1xcbiBzdHJ1Y3QgY2ZnODAyMTFfcnhfaW5mbyB7XFxuIFxcdGludCBmcmVxO1xcbkBAIC05NTEwLDYgKzk1MTMsNyBAQCBzdHJ1Y3QgY2ZnODAyMTFfcnhfaW5mbyB7XFxuIFxcdHUzMiBmbGFncztcXG4gXFx0dTY0IHJ4X3RzdGFtcDtcXG4gXFx0dTY0IGFja190c3RhbXA7XFxuK1xcdGJvb2wgbm9fc3RhO1xcbiB9O1xcbiBcXG4gLyoqXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmggYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXFxuaW5kZXggOWQxZmFjNmU4MDgyOS4uN2FhZTcyOGU5NmQ4NCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXFxuKysrIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaFxcbkBAIC0xNzcwLDEwICsxNzcwLDkgQEAgZW51bSBtYWM4MDIxMV9yeF9lbmNvZGluZyB7XFxuICAqIEBhbXBkdV9yZWZlcmVuY2U6IEEtTVBEVSByZWZlcmVuY2UgbnVtYmVyLCBtdXN0IGJlIGEgZGlmZmVyZW50IHZhbHVlIGZvclxcbiAgKlxcdGVhY2ggQS1NUERVIGJ1dCB0aGUgc2FtZSBmb3IgZWFjaCBzdWJmcmFtZSB3aXRoaW4gb25lIEEtTVBEVVxcbiAgKiBAemVyb19sZW5ndGhfcHNkdV90eXBlOiByYWRpb3RhcCB0eXBlIG9mIHRoZSAwLWxlbmd0aCBQU0RVXFxuLSAqIEBsaW5rX3ZhbGlkOiBpZiB0aGUgbGluayB3aGljaCBpcyBpZGVudGlmaWVkIGJ5IEBsaW5rX2lkIGlzIHZhbGlkLiBUaGlzIGZsYWdcXG4tICpcXHRpcyBzZXQgb25seSB3aGVuIGNvbm5lY3Rpb24gaXMgTUxPLlxcbi0gKiBAbGlua19pZDogaWQgb2YgdGhlIGxpbmsgdXNlZCB0byByZWNlaXZlIHRoZSBwYWNrZXQuIFRoaXMgaXMgdXNlZCBhbG9uZyB3aXRoXFxuLSAqXFx0QGxpbmtfdmFsaWQuXFxuKyAqIEBsaW5rX2lkOiBpZCBvZiB0aGUgbGluayB1c2VkIHRvIHJlY2VpdmUgdGhlIHBhY2tldC4gU2V0IGFuZCB1c2VkIGJ5XFxuKyAqXFx0bWFjODAyMTEgaW50ZXJuYWxseSwgaXQgdXNlcyBAZnJlcSBzZXQgYnkgdGhlIGRyaXZlciB0byBpZGVudGlmeSB0aGVcXG4rICpcXHRjb3JyZWN0IGxpbmsgcGVyIHZpZi5cXG4gICovXFxuIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzIHtcXG4gXFx0dTY0IG1hY3RpbWU7XFxuQEAgLTE4MTMsNyArMTgxMiw3IEBAIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzIHtcXG4gXFx0dTggY2hhaW5zO1xcbiBcXHRzOCBjaGFpbl9zaWduYWxbSUVFRTgwMjExX01BWF9DSEFJTlNdO1xcbiBcXHR1OCB6ZXJvX2xlbmd0aF9wc2R1X3R5cGU7XFxuLVxcdHU4IGxpbmtfdmFsaWQ6MSwgbGlua19pZDo0O1xcbitcXHR1OCBsaW5rX2lkOjQ7XFxuIH07XFxuIFxcbiBzdGF0aWNfYXNzZXJ0KHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cykgXFx1MDAzYz0gc2l6ZW9mX2ZpZWxkKHN0cnVjdCBza19idWZmLCBjYikpO1xcbkBAIC01Mzg5LDE0ICs1Mzg4LDE4IEBAIHZvaWQgaWVlZTgwMjExX3Jlc3RhcnRfaHcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpO1xcbiAgKiBtaXhlZCBmb3IgYSBzaW5nbGUgaGFyZHdhcmUuIE11c3Qgbm90IHJ1biBjb25jdXJyZW50bHkgd2l0aFxcbiAgKiBpZWVlODAyMTFfdHhfc3RhdHVzX3NrYigpIG9yIGllZWU4MDIxMV90eF9zdGF0dXNfbmkoKS5cXG4gICpcXG4rICogRm9yIGRhdGEgZnJhbWVzLCB3aGVuIGhhcmR3YXJlIGhhcyBkb25lIGFkZHJlc3MgdHJhbnNsYXRpb24sIGEgbGluayBzdGF0aW9uXFxuKyAqIGhhcyB0byBiZSBwcm92aWRlZCBhbmQgdGhlIGZyZXF1ZW5jeSBpbmZvcm1hdGlvbiBtYXkgYmUgc2tpcHBlZC5cXG4rICpcXG4gICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIEJIcyBkaXNhYmxlZCBhbmQgUkNVIHJlYWQgbG9ja1xcbiAgKlxcbiAgKiBAaHc6IHRoZSBoYXJkd2FyZSB0aGlzIGZyYW1lIGNhbWUgaW4gb25cXG4tICogQHN0YTogdGhlIHN0YXRpb24gdGhlIGZyYW1lIHdhcyByZWNlaXZlZCBmcm9tLCBvciAlTlVMTFxcbisgKiBAbGlua19zdGE6IHRoZSBsaW5rIHN0YXRpb24gdGhlIGRhdGEgZnJhbWUgd2FzIHJlY2VpdmVkIGZyb20sIG9yICVOVUxMXFxuICAqIEBza2I6IHRoZSBidWZmZXIgdG8gcmVjZWl2ZSwgb3duZWQgYnkgbWFjODAyMTEgYWZ0ZXIgdGhpcyBjYWxsXFxuICAqIEBsaXN0OiB0aGUgZGVzdGluYXRpb24gbGlzdFxcbiAgKi9cXG4tdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcXG4rdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4rXFx0XFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhLFxcbiBcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCk7XFxuIFxcbiAvKipcXG5AQCAtNTQxNCwxNCArNTQxNywxOCBAQCB2b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxcbiAgKiBtaXhlZCBmb3IgYSBzaW5nbGUgaGFyZHdhcmUuIE11c3Qgbm90IHJ1biBjb25jdXJyZW50bHkgd2l0aFxcbiAgKiBpZWVlODAyMTFfdHhfc3RhdHVzX3NrYigpIG9yIGllZWU4MDIxMV90eF9zdGF0dXNfbmkoKS5cXG4gICpcXG4rICogRm9yIGRhdGEgZnJhbWVzLCB3aGVuIGhhcmR3YXJlIGhhcyBkb25lIGFkZHJlc3MgdHJhbnNsYXRpb24sIGEgbGluayBzdGF0aW9uXFxuKyAqIGhhcyB0byBiZSBwcm92aWRlZCBhbmQgdGhlIGZyZXF1ZW5jeSBpbmZvcm1hdGlvbiBtYXkgYmUgc2tpcHBlZC5cXG4rICpcXG4gICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIEJIcyBkaXNhYmxlZC5cXG4gICpcXG4gICogQGh3OiB0aGUgaGFyZHdhcmUgdGhpcyBmcmFtZSBjYW1lIGluIG9uXFxuLSAqIEBzdGE6IHRoZSBzdGF0aW9uIHRoZSBmcmFtZSB3YXMgcmVjZWl2ZWQgZnJvbSwgb3IgJU5VTExcXG4rICogQGxpbmtfc3RhOiB0aGUgbGluayBzdGF0aW9uIHRoZSBkYXRhIGZyYW1lIHdhcyByZWNlaXZlZCBmcm9tLCBvciAlTlVMTFxcbiAgKiBAc2tiOiB0aGUgYnVmZmVyIHRvIHJlY2VpdmUsIG93bmVkIGJ5IG1hYzgwMjExIGFmdGVyIHRoaXMgY2FsbFxcbiAgKiBAbmFwaTogdGhlIE5BUEkgY29udGV4dFxcbiAgKi9cXG4tdm9pZCBpZWVlODAyMTFfcnhfbmFwaShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcXG4rdm9pZCBpZWVlODAyMTFfcnhfbmFwaShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4rXFx0XFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhLFxcbiBcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKTtcXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaFxcbmluZGV4IDAyMDM4N2Q3NjQxMjIuLjQ2NTNmOGYyNmVlNzAgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaFxcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmhcXG5AQCAtMzE4NSw2ICszMTg1LDExIEBAIGVudW0gbmw4MDIxMV9jb21tYW5kcyB7XFxuICAqXFx0VGhlIGFnZ3JlZ2F0ZWQgbWVzc2FnZSBhbHdheXMgcHJlY2VkZXMgdGhlIHBlci1saW5rIG1lc3NhZ2VzIGZvciB0aGVcXG4gICpcXHRzYW1lIHN0YXRpb24gd2l0aGluIGEgZHVtcCBzZXF1ZW5jZS5cXG4gICpcXG4rICogQE5MODAyMTFfQVRUUl9GUkFNRV9DTURfTk9fU1RBOiBWYWxpZCBmb3IgTkw4MDIxMV9DTURfRlJBTUUgdG8gZGVub3RlIHRoYXRcXG4rICpcXHR0aGUga2VybmVsIGhhZCBubyBzdGF0aW9uIGZvciBhIHJlY2VpdmVkIGZyYW1lIG9yIHNob3VsZCBub3QgdXNlIGFcXG4rICpcXHRrbm93biBzdGF0aW9uIHRvIHRyYW5zbWl0IGEgZnJhbWUuIFRoaXMgaXMgcmVsZXZhbnQgdG8ga25vdyB3aGV0aGVyXFxuKyAqXFx0TUxEIGFkZHJlc3MgdHJhbnNsYXRpb24gaGFwcGVuZWQgb3IgdG8gZGlzYWJsZSBpdCB3aGVuIHNlbmRpbmcgYSBmcmFtZS5cXG4rICpcXG4gICogQE5VTV9OTDgwMjExX0FUVFI6IHRvdGFsIG51bWJlciBvZiBubDgwMjExX2F0dHJzIGF2YWlsYWJsZVxcbiAgKiBATkw4MDIxMV9BVFRSX01BWDogaGlnaGVzdCBhdHRyaWJ1dGUgbnVtYmVyIGN1cnJlbnRseSBkZWZpbmVkXFxuICAqIEBfX05MODAyMTFfQVRUUl9BRlRFUl9MQVNUOiBpbnRlcm5hbCB1c2VcXG5AQCAtMzc4NSw2ICszNzkwLDggQEAgZW51bSBubDgwMjExX2F0dHJzIHtcXG4gXFxuIFxcdE5MODAyMTFfQVRUUl9TVEFfRFVNUF9MSU5LX1NUQVRTLFxcbiBcXG4rXFx0Tkw4MDIxMV9BVFRSX0ZSQU1FX0NNRF9OT19TVEEsXFxuK1xcbiBcXHQvKiBhZGQgYXR0cmlidXRlcyBoZXJlLCB1cGRhdGUgdGhlIHBvbGljeSBpbiBubDgwMjExLmMgKi9cXG4gXFxuIFxcdF9fTkw4MDIxMV9BVFRSX0FGVEVSX0xBU1QsXFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9hZ2ctdHguYyBiL25ldC9tYWM4MDIxMS9hZ2ctdHguY1xcbmluZGV4IDQ4MzNiNDY3NzBiNjIuLmRkOGExMWVmNmU1MmIgMTAwNjQ0XFxuLS0tIGEvbmV0L21hYzgwMjExL2FnZy10eC5jXFxuKysrIGIvbmV0L21hYzgwMjExL2FnZy10eC5jXFxuQEAgLTk4LDcgKzk4LDcgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX3NlbmRfYWRkYmFfcmVxdWVzdChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTE2IHRpZCxcXG4gXFx0aWYgKHN0YS1cXHUwMDNlc3RhLmRlZmxpbmsuaGVfY2FwLmhhc19oZSlcXG4gXFx0XFx0aWVlZTgwMjExX2FkZF9hZGRiYWV4dChza2IsIDAsIGFnZ19zaXplKTtcXG4gXFxuLVxcdGllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIHRpZCwgLTEpO1xcbitcXHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCBOVUxMLCB0aWQsIC0xKTtcXG4gfVxcbiBcXG4gdm9pZCBpZWVlODAyMTFfc2VuZF9iYXIoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgdTggKnJhLCB1MTYgdGlkLCB1MTYgc3NuKVxcbkBAIC0xMjcsNyArMTI3LDcgQEAgdm9pZCBpZWVlODAyMTFfc2VuZF9iYXIoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgdTggKnJhLCB1MTYgdGlkLCB1MTYgc3NuKVxcbiBcXG4gXFx0SUVFRTgwMjExX1NLQl9DQihza2IpLVxcdTAwM2VmbGFncyB8PSBJRUVFODAyMTFfVFhfSU5URkxfRE9OVF9FTkNSWVBUIHxcXG4gXFx0XFx0XFx0XFx0XFx0SUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTO1xcbi1cXHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCB0aWQsIC0xKTtcXG4rXFx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgTlVMTCwgdGlkLCAtMSk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc2VuZF9iYXIpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2FwLmMgYi9uZXQvbWFjODAyMTEvYXAuY1xcbmluZGV4IGU3YWM5OWM1YTIyZWIuLmZlMjU1ODkxYzM1ZjAgMTAwNjQ0XFxuLS0tIGEvbmV0L21hYzgwMjExL2FwLmNcXG4rKysgYi9uZXQvbWFjODAyMTEvYXAuY1xcbkBAIC04Miw5ICs4Miw2IEBAIGllZWU4MDIxMV9yeF9lbWxfb3BfbW9kZV9ub3RpZihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0aWYgKCFpZnRfZXh0X2NhcGEpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGlmICghc3RhdHVzLVxcdTAwM2VsaW5rX3ZhbGlkKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbiBcXHRzdGEgPSBzdGFfaW5mb19nZXRfYnNzKHNkYXRhLCBtZ210LVxcdTAwM2VzYSk7XFxuIFxcdGlmICghc3RhKVxcbiBcXHRcXHRyZXR1cm47XFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9odC5jIGIvbmV0L21hYzgwMjExL2h0LmNcXG5pbmRleCBlMWUxYjdmODJmM2ZlLi5jNWMyMTEzZmE0Zjc5IDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS9odC5jXFxuKysrIGIvbmV0L21hYzgwMjExL2h0LmNcXG5AQCAtNTQ1LDcgKzU0NSw3IEBAIGludCBpZWVlODAyMTFfc2VuZF9zbXBzX2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0aW5mby1cXHUwMDNlc3RhdHVzX2RhdGEgPSBJRUVFODAyMTFfU1RBVFVTX1RZUEVfU01QUyB8XFxuIFxcdFxcdFxcdCAgICB1MTZfZW5jb2RlX2JpdHMoc3RhdHVzX2xpbmtfaWQgXFx1MDAzY1xcdTAwM2MgMiB8IHNtcHMsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBJRUVFODAyMTFfU1RBVFVTX1NVQkRBVEFfTUFTSyk7XFxuLVxcdGllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIDcsIGxpbmtfaWQpO1xcbitcXHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCBOVUxMLCA3LCBsaW5rX2lkKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcXG5pbmRleCBhMWVmODhmZTg0NmRkLi4zOGQ4NmIwYTEwZjVhIDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXFxuKysrIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcXG5AQCAtMjQ2Niw3ICsyNDY2LDggQEAgdm9pZCBpZWVlODAyMTFfeG1pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0XFx0ICAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4gXFxuIHZvaWQgX19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi1cXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRpZCwgaW50IGxpbmtfaWQsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcXG4rXFx0XFx0XFx0XFx0IGludCB0aWQsIGludCBsaW5rX2lkLFxcbiBcXHRcXHRcXHRcXHQgZW51bSBubDgwMjExX2JhbmQgYmFuZCk7XFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgaWVlZTgwMjExX3JlcXVpcmVfZW5jcnlwdGVkX2Fzc29jKF9fbGUxNiBmYyxcXG5AQCAtMjQ4NiwxOCArMjQ4NywyMCBAQCBpZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbiBcXHRcXHRcXHQgIGVudW0gbmw4MDIxMV9iYW5kIGJhbmQpXFxuIHtcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc2RhdGEsIHNrYiwgdGlkLCAtMSwgYmFuZCk7XFxuK1xcdF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzZGF0YSwgc2tiLCBFUlJfUFRSKC1FTk9FTlQpLFxcbitcXHRcXHRcXHRcXHQgICAgdGlkLCAtMSwgYmFuZCk7XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiB9XFxuIFxcbiB2b2lkIGllZWU4MDIxMV90eF9za2JfdGlkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi1cXHRcXHRcXHQgIHN0cnVjdCBza19idWZmICpza2IsIGludCB0aWQsIGludCBsaW5rX2lkKTtcXG4rXFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcXG4rXFx0XFx0XFx0ICBpbnQgdGlkLCBpbnQgbGlua19pZCk7XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX3R4X3NrYihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4gXFx0LyogU2VuZCBhbGwgaW50ZXJuYWwgbWdtdCBmcmFtZXMgb24gVk8uIEFjY29yZGluZ2x5IHNldCBUSUQgdG8gNy4gKi9cXG4tXFx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgNywgLTEpO1xcbitcXHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCBOVUxMLCA3LCAtMSk7XFxuIH1cXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWZhY2UuYyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jXFxuaW5kZXggNDM0NjBhNzA1YTZiZC4uYTBiMjE0ZGJiOGFmOCAxMDA2NDRcXG4tLS0gYS9uZXQvbWFjODAyMTEvaWZhY2UuY1xcbisrKyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jXFxuQEAgLTE2NzMsMTEgKzE2NzMsOCBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfaWZhY2VfcHJvY2Vzc19za2Ioc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0XFx0XFx0c3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XFxuLVxcdFxcdFxcdGlmICghc3RhdHVzLVxcdTAwM2VsaW5rX3ZhbGlkKVxcbi1cXHRcXHRcXHRcXHRsaW5rX3N0YSA9IFxcdTAwMjZzdGEtXFx1MDAzZWRlZmxpbms7XFxuLVxcdFxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0XFx0bGlua19zdGEgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHN0YS1cXHUwMDNlbGlua1tzdGF0dXMtXFx1MDAzZWxpbmtfaWRdLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNmxvY2FsLVxcdTAwM2Vody53aXBoeS1cXHUwMDNlbXR4KSk7XFxuK1xcdFxcdFxcdGxpbmtfc3RhID0gd2lwaHlfZGVyZWZlcmVuY2UobG9jYWwtXFx1MDAzZWh3LndpcGh5LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHN0YS1cXHUwMDNlbGlua1tzdGF0dXMtXFx1MDAzZWxpbmtfaWRdKTtcXG4gXFx0XFx0XFx0aWYgKGxpbmtfc3RhKVxcbiBcXHRcXHRcXHRcXHRpZWVlODAyMTFfaHRfaGFuZGxlX2NoYW53aWR0aF9ub3RpZihsb2NhbCwgc2RhdGEsIHN0YSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGxpbmtfc3RhLCBjaGFud2lkdGgsXFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tbG1lLmMgYi9uZXQvbWFjODAyMTEvbWxtZS5jXFxuaW5kZXggZjUxMTY3ZjBmYzQ2ZC4uMzYxNzc1ZmI5MzFlYyAxMDA2NDRcXG4tLS0gYS9uZXQvbWFjODAyMTEvbWxtZS5jXFxuKysrIGIvbmV0L21hYzgwMjExL21sbWUuY1xcbkBAIC0xMTgzMSwxMiArMTE4MzEsMTAgQEAgdm9pZCBpZWVlODAyMTFfc3RhX3J4X3F1ZXVlZF9mcmFtZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0cnhfc3RhdHVzID0gKHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICopIHNrYi1cXHUwMDNlY2I7XFxuIFxcdGZjID0gbGUxNl90b19jcHUobWdtdC1cXHUwMDNlZnJhbWVfY29udHJvbCk7XFxuIFxcbi1cXHRpZiAocnhfc3RhdHVzLVxcdTAwM2VsaW5rX3ZhbGlkKSB7XFxuLVxcdFxcdGxpbmsgPSBzZGF0YV9kZXJlZmVyZW5jZShzZGF0YS1cXHUwMDNlbGlua1tyeF9zdGF0dXMtXFx1MDAzZWxpbmtfaWRdLFxcbi1cXHRcXHRcXHRcXHRcXHQgc2RhdGEpO1xcbi1cXHRcXHRpZiAoIWxpbmspXFxuLVxcdFxcdFxcdHJldHVybjtcXG4tXFx0fVxcbitcXHRsaW5rID0gc2RhdGFfZGVyZWZlcmVuY2Uoc2RhdGEtXFx1MDAzZWxpbmtbcnhfc3RhdHVzLVxcdTAwM2VsaW5rX2lkXSxcXG4rXFx0XFx0XFx0XFx0IHNkYXRhKTtcXG4rXFx0aWYgKCFsaW5rKVxcbitcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRzd2l0Y2ggKGZjIFxcdTAwMjYgSUVFRTgwMjExX0ZDVExfU1RZUEUpIHtcXG4gXFx0Y2FzZSBJRUVFODAyMTFfU1RZUEVfQkVBQ09OOlxcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jIGIvbmV0L21hYzgwMjExL29mZmNoYW5uZWwuY1xcbmluZGV4IDJiY2ViNzM3MTdjNjYuLjM4MzRmNTk2YWYxNzggMTAwNjQ0XFxuLS0tIGEvbmV0L21hYzgwMjExL29mZmNoYW5uZWwuY1xcbisrKyBiL25ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmNcXG5AQCAtODU2LDggKzg1NiwxMCBAQCBpbnQgaWVlZTgwMjExX21nbXRfdHgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4gXFx0XFx0XFx0bmVlZF9vZmZjaGFuID0gdHJ1ZTtcXG4gXFxuIFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4tXFx0XFx0c3RhID0gc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgbWdtdC1cXHUwMDNlZGEpO1xcbi1cXHRcXHRtbG9fc3RhID0gc3RhIFxcdTAwMjZcXHUwMDI2IHN0YS1cXHUwMDNlc3RhLm1sbztcXG4rXFx0XFx0aWYgKCFwYXJhbXMtXFx1MDAzZW5vX3N0YSkge1xcbitcXHRcXHRcXHRzdGEgPSBzdGFfaW5mb19nZXRfYnNzKHNkYXRhLCBtZ210LVxcdTAwM2VkYSk7XFxuK1xcdFxcdFxcdG1sb19zdGEgPSBzdGEgXFx1MDAyNlxcdTAwMjYgc3RhLVxcdTAwM2VzdGEubWxvO1xcbitcXHRcXHR9XFxuIFxcbiBcXHRcXHRpZiAoIWllZWU4MDIxMV9pc19hY3Rpb24obWdtdC1cXHUwMDNlZnJhbWVfY29udHJvbCkgfHxcXG4gXFx0XFx0ICAgIG1nbXQtXFx1MDAzZXUuYWN0aW9uLmNhdGVnb3J5ID09IFdMQU5fQ0FURUdPUllfUFVCTElDIHx8XFxuQEAgLTg4Niw3ICs4ODgsOCBAQCBpbnQgaWVlZTgwMjExX21nbXRfdHgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4gXFx0XFx0ICAgICBsb2NhbC1cXHUwMDNlb3BzLVxcdTAwM2VyZW1haW5fb25fY2hhbm5lbCBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgIG1lbWNtcChzZGF0YS1cXHUwMDNldmlmLmNmZy5hcF9hZGRyLCBtZ210LVxcdTAwM2Vic3NpZCwgRVRIX0FMRU4pKSkge1xcbiBcXHRcXHRcXHRuZWVkX29mZmNoYW4gPSB0cnVlO1xcbi1cXHRcXHR9IGVsc2UgaWYgKHNkYXRhLVxcdTAwM2V1Lm1nZC5hc3NvY2lhdGVkIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdH0gZWxzZSBpZiAoIXBhcmFtcy1cXHUwMDNlbm9fc3RhIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgIHNkYXRhLVxcdTAwM2V1Lm1nZC5hc3NvY2lhdGVkIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdCAgIGV0aGVyX2FkZHJfZXF1YWwoc2RhdGEtXFx1MDAzZXZpZi5jZmcuYXBfYWRkciwgbWdtdC1cXHUwMDNlZGEpKSB7XFxuIFxcdFxcdFxcdHN0YSA9IHN0YV9pbmZvX2dldF9ic3Moc2RhdGEsIG1nbXQtXFx1MDAzZWRhKTtcXG4gXFx0XFx0XFx0bWxvX3N0YSA9IHN0YSBcXHUwMDI2XFx1MDAyNiBzdGEtXFx1MDAzZXN0YS5tbG87XFxuQEAgLTEwMzEsNyArMTAzNCw5IEBAIGludCBpZWVlODAyMTFfbWdtdF90eChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxcbiBcXHR9XFxuIFxcbiBcXHRpZiAoIW5lZWRfb2ZmY2hhbikge1xcbi1cXHRcXHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCA3LCBsaW5rX2lkKTtcXG4rXFx0XFx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYixcXG4rXFx0XFx0XFx0XFx0ICAgICBwYXJhbXMtXFx1MDAzZW5vX3N0YSA/IHN0YSA6IEVSUl9QVFIoLUVOT0VOVCksXFxuK1xcdFxcdFxcdFxcdCAgICAgNywgbGlua19pZCk7XFxuIFxcdFxcdHJldCA9IDA7XFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcnguYyBiL25ldC9tYWM4MDIxMS9yeC5jXFxuaW5kZXggNWUyNmJlOGUyN2Q4Zi4uZWQ1YTJlMDU5MDc1NyAxMDA2NDRcXG4tLS0gYS9uZXQvbWFjODAyMTEvcnguY1xcbisrKyBiL25ldC9tYWM4MDIxMS9yeC5jXFxuQEAgLTIyMiw0MyArMjIyLDIxIEBAIGllZWU4MDIxMV9yeF9yYWRpb3RhcF9oZHJsZW4oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgaW50IGxpbmtfaWQsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxcbitcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4tXFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpO1xcbi1cXG4tXFx0aWYgKGxpbmtfaWQgXFx1MDAzZT0gMCkge1xcbi1cXHRcXHRzdGF0dXMtXFx1MDAzZWxpbmtfdmFsaWQgPSAxO1xcbi1cXHRcXHRzdGF0dXMtXFx1MDAzZWxpbmtfaWQgPSBsaW5rX2lkO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRzdGF0dXMtXFx1MDAzZWxpbmtfdmFsaWQgPSAwO1xcbi1cXHR9XFxuLVxcbiBcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2c2RhdGEtXFx1MDAzZXNrYl9xdWV1ZSwgc2tiKTtcXG4gXFx0d2lwaHlfd29ya19xdWV1ZShzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZWh3LndpcGh5LCBcXHUwMDI2c2RhdGEtXFx1MDAzZXdvcmspO1xcbi1cXHRpZiAoc3RhKSB7XFxuLVxcdFxcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YV9pbmZvO1xcbi1cXG4tXFx0XFx0aWYgKGxpbmtfaWQgXFx1MDAzZT0gMCkge1xcbi1cXHRcXHRcXHRsaW5rX3N0YV9pbmZvID0gcmN1X2RlcmVmZXJlbmNlKHN0YS1cXHUwMDNlbGlua1tsaW5rX2lkXSk7XFxuLVxcdFxcdFxcdGlmICghbGlua19zdGFfaW5mbylcXG4tXFx0XFx0XFx0XFx0cmV0dXJuO1xcbi1cXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRsaW5rX3N0YV9pbmZvID0gXFx1MDAyNnN0YS1cXHUwMDNlZGVmbGluaztcXG4tXFx0XFx0fVxcbi1cXG4tXFx0XFx0bGlua19zdGFfaW5mby1cXHUwMDNlcnhfc3RhdHMucGFja2V0cysrO1xcbi1cXHR9XFxuK1xcdGlmIChsaW5rX3N0YSlcXG4rXFx0XFx0bGlua19zdGEtXFx1MDAzZXJ4X3N0YXRzLnBhY2tldHMrKztcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgaWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tXFx0XFx0XFx0XFx0XFx0IGludCBsaW5rX2lkLFxcbi1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IHN0YV9pbmZvICpzdGEsXFxuK1xcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEsXFxuIFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuIFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSAwO1xcbi1cXHRfX2llZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIGxpbmtfaWQsIHN0YSwgc2tiKTtcXG4rXFx0X19pZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCBsaW5rX3N0YSwgc2tiKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgaWVlZTgwMjExX2hhbmRsZV9tdV9taW1vX21vbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG5AQCAtMzAxLDcgKzI3OSw3IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9oYW5kbGVfbXVfbWltb19tb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuIFxcdGlmICghc2tiKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCAtMSwgTlVMTCwgc2tiKTtcXG4rXFx0aWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgTlVMTCwgc2tiKTtcXG4gfVxcbiBcXG4gLypcXG5AQCAtMTQ5OCw3ICsxNDc2LDcgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X3Jlb3JkZXJfYW1wZHUoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcXG4gXFx0LyogaWYgdGhpcyBtcGR1IGlzIGZyYWdtZW50ZWQgLSB0ZXJtaW5hdGUgcnggYWdncmVnYXRpb24gc2Vzc2lvbiAqL1xcbiBcXHRzYyA9IGxlMTZfdG9fY3B1KGhkci1cXHUwMDNlc2VxX2N0cmwpO1xcbiBcXHRpZiAoc2MgXFx1MDAyNiBJRUVFODAyMTFfU0NUTF9GUkFHKSB7XFxuLVxcdFxcdGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2UocngtXFx1MDAzZXNkYXRhLCByeC1cXHUwMDNlbGlua19pZCwgTlVMTCwgc2tiKTtcXG4rXFx0XFx0aWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShyeC1cXHUwMDNlc2RhdGEsIE5VTEwsIHNrYik7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG5AQCAtMjUyNCw3ICsyNTAyLDcgQEAgaWVlZTgwMjExX3J4X2hfZGVmcmFnbWVudChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxcbiBcXG4gIG91dDpcXG4gXFx0aWVlZTgwMjExX2xlZF9yeChyeC1cXHUwMDNlbG9jYWwpO1xcbi1cXHRpZiAocngtXFx1MDAzZXN0YSlcXG4rXFx0aWYgKHJ4LVxcdTAwM2VsaW5rX3N0YSlcXG4gXFx0XFx0cngtXFx1MDAzZWxpbmtfc3RhLVxcdTAwM2VyeF9zdGF0cy5wYWNrZXRzKys7XFxuIFxcdHJldHVybiBSWF9DT05USU5VRTtcXG4gfVxcbkBAIC0zMzM1LDggKzMzMTMsOCBAQCBpZWVlODAyMTFfcnhfaF9kYXRhKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpXFxuIFxcdFxcdCAgICAodGYtXFx1MDAzZWFjdGlvbl9jb2RlID09IFdMQU5fVERMU19DSEFOTkVMX1NXSVRDSF9SRVFVRVNUIHx8XFxuIFxcdFxcdCAgICAgdGYtXFx1MDAzZWFjdGlvbl9jb2RlID09IFdMQU5fVERMU19DSEFOTkVMX1NXSVRDSF9SRVNQT05TRSkpIHtcXG4gXFx0XFx0XFx0cngtXFx1MDAzZXNrYi1cXHUwMDNlcHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF9URExTKTtcXG4tXFx0XFx0XFx0X19pZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC1cXHUwMDNlbGlua19pZCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHJ4LVxcdTAwM2VzdGEsIHJ4LVxcdTAwM2Vza2IpO1xcbitcXHRcXHRcXHRfX2llZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIHJ4LVxcdTAwM2VsaW5rX3N0YSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHJ4LVxcdTAwM2Vza2IpO1xcbiBcXHRcXHRcXHRyZXR1cm4gUlhfUVVFVUVEO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG5AQCAtMzk5MSw3ICszOTY5LDcgQEAgaWVlZTgwMjExX3J4X2hfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpXFxuIFxcdHJldHVybiBSWF9RVUVVRUQ7XFxuIFxcbiAgcXVldWU6XFxuLVxcdGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIHJ4LVxcdTAwM2VsaW5rX2lkLCByeC1cXHUwMDNlc3RhLCByeC1cXHUwMDNlc2tiKTtcXG4rXFx0aWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgcngtXFx1MDAzZWxpbmtfc3RhLCByeC1cXHUwMDNlc2tiKTtcXG4gXFx0cmV0dXJuIFJYX1FVRVVFRDtcXG4gfVxcbiBcXG5AQCAtNDAwNSw2ICszOTgzLDcgQEAgaWVlZTgwMjExX3J4X2hfdXNlcnNwYWNlX21nbXQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeClcXG4gXFx0XFx0LmxlbiA9IHJ4LVxcdTAwM2Vza2ItXFx1MDAzZWxlbixcXG4gXFx0XFx0LmxpbmtfaWQgPSByeC1cXHUwMDNlbGlua19pZCxcXG4gXFx0XFx0LmhhdmVfbGlua19pZCA9IHJ4LVxcdTAwM2VsaW5rX2lkIFxcdTAwM2U9IDAsXFxuK1xcdFxcdC5ub19zdGEgPSAhcngtXFx1MDAzZXN0YSxcXG4gXFx0fTtcXG4gXFxuIFxcdC8qIHNraXAga25vd24tYmFkIGFjdGlvbiBmcmFtZXMgYW5kIHJldHVybiB0aGVtIGluIHRoZSBuZXh0IGhhbmRsZXIgKi9cXG5AQCAtNDEyNyw3ICs0MTA2LDcgQEAgaWVlZTgwMjExX3J4X2hfYWN0aW9uX3JldHVybihzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxcbiBcXHRcXHRcXHRcXHRcXHRsb2NhbC1cXHUwMDNlaHcub2ZmY2hhbm5lbF90eF9od19xdWV1ZTtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0X19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHJ4LVxcdTAwM2VzZGF0YSwgbnNrYiwgNywgLTEsXFxuK1xcdFxcdF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChyeC1cXHUwMDNlc2RhdGEsIG5za2IsIHJ4LVxcdTAwM2VzdGEsIDcsIC0xLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgc3RhdHVzLVxcdTAwM2ViYW5kKTtcXG4gXFx0fVxcbiBcXG5AQCAtNDE0Nyw3ICs0MTI2LDcgQEAgaWVlZTgwMjExX3J4X2hfZXh0KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpXFxuIFxcdFxcdHJldHVybiBSWF9EUk9QX1VfVU5FWFBFQ1RFRF9FWFRfRlJBTUU7XFxuIFxcbiBcXHQvKiBmb3Igbm93IG9ubHkgYmVhY29ucyBhcmUgZXh0LCBzbyBxdWV1ZSB0aGVtICovXFxuLVxcdGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIHJ4LVxcdTAwM2VsaW5rX2lkLCByeC1cXHUwMDNlc3RhLCByeC1cXHUwMDNlc2tiKTtcXG4rXFx0aWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgcngtXFx1MDAzZWxpbmtfc3RhLCByeC1cXHUwMDNlc2tiKTtcXG4gXFxuIFxcdHJldHVybiBSWF9RVUVVRUQ7XFxuIH1cXG5AQCAtNDIwNCw3ICs0MTgzLDcgQEAgaWVlZTgwMjExX3J4X2hfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxcbiBcXHRcXHRyZXR1cm4gUlhfRFJPUF9VX1VOSEFORExFRF9NR01UX1NUWVBFO1xcbiBcXHR9XFxuIFxcbi1cXHRpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC1cXHUwMDNlbGlua19pZCwgcngtXFx1MDAzZXN0YSwgcngtXFx1MDAzZXNrYik7XFxuK1xcdGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIHJ4LVxcdTAwM2VsaW5rX3N0YSwgcngtXFx1MDAzZXNrYik7XFxuIFxcbiBcXHRyZXR1cm4gUlhfUVVFVUVEO1xcbiB9XFxuQEAgLTQyNDgsMTIgKzQyMjcsMjggQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X2hhbmRsZXJzKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXFxuIFxcdHNwaW5fbG9ja19iaChcXHUwMDI2cngtXFx1MDAzZWxvY2FsLVxcdTAwM2VyeF9wYXRoX2xvY2spO1xcbiBcXG4gXFx0d2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKGZyYW1lcykpKSB7XFxuK1xcdFxcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcXG4rXFxuIFxcdFxcdC8qXFxuLVxcdFxcdCAqIGFsbCB0aGUgb3RoZXIgZmllbGRzIGFyZSB2YWxpZCBhY3Jvc3MgZnJhbWVzXFxuLVxcdFxcdCAqIHRoYXQgYmVsb25nIHRvIGFuIGFNUERVIHNpbmNlIHRoZXkgYXJlIG9uIHRoZVxcbi1cXHRcXHQgKiBzYW1lIFRJRCBmcm9tIHRoZSBzYW1lIHN0YXRpb25cXG4rXFx0XFx0ICogTW9zdCBmaWVsZHMgYXJlIHZhbGlkIGFjcm9zcyBmcmFtZXMuIEhvd2V2ZXIsXFxuK1xcdFxcdCAqIGluIHRoZSBjYXNlIG9mIHJlb3JkZXJpbmcgZnJhbWVzIG1heSBoYXZlIGFycml2ZWRcXG4rXFx0XFx0ICogb24gZGlmZmVyZW50IGxpbmtzLCBzbyBhZGp1c3QgdGhlIGxpbmtfaWQsIGxpbmtcXG4rXFx0XFx0ICogYW5kIGxpbmtfc3RhIGFjY29yZGluZ2x5LlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0cngtXFx1MDAzZXNrYiA9IHNrYjtcXG4rXFx0XFx0aWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKFxcdTAwMjZyeC1cXHUwMDNlc2RhdGEtXFx1MDAzZXZpZikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIHVubGlrZWx5KHJ4LVxcdTAwM2VsaW5rX2lkICE9IHN0YXR1cy1cXHUwMDNlbGlua19pZCkpIHtcXG4rXFx0XFx0XFx0aWYgKHJ4LVxcdTAwM2VzdGEpIHtcXG4rXFx0XFx0XFx0XFx0cngtXFx1MDAzZWxpbmtfc3RhID1cXG4rXFx0XFx0XFx0XFx0XFx0cmN1X2RlcmVmZXJlbmNlKHJ4LVxcdTAwM2VzdGEtXFx1MDAzZWxpbmtbcngtXFx1MDAzZWxpbmtfaWRdKTtcXG4rXFxuK1xcdFxcdFxcdFxcdC8qIExpbmsgZ290IGRpc2FibGVkLCBqdXN0IHVzZSBkZWZsaW5rICovXFxuK1xcdFxcdFxcdFxcdGlmICghcngtXFx1MDAzZWxpbmtfc3RhKVxcbitcXHRcXHRcXHRcXHRcXHRyeC1cXHUwMDNlbGlua19zdGEgPSBcXHUwMDI2cngtXFx1MDAzZXN0YS1cXHUwMDNlZGVmbGluaztcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRyeC1cXHUwMDNlbGlua19pZCA9IHN0YXR1cy1cXHUwMDNlbGlua19pZDtcXG4rXFx0XFx0XFx0cngtXFx1MDAzZWxpbmsgPSByY3VfZGVyZWZlcmVuY2UocngtXFx1MDAzZXNkYXRhLVxcdTAwM2VsaW5rW3N0YXR1cy1cXHUwMDNlbGlua19pZF0pO1xcbitcXHRcXHR9XFxuIFxcbiBcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCFyeC1cXHUwMDNlbGluaykpIHtcXG4gXFx0XFx0XFx0cmVzID0gUlhfRFJPUF9VX05PX0xJTks7XFxuQEAgLTQzMjMsNyArNDMxOCwzNCBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfaW52b2tlX3J4X2hhbmRsZXJzKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpXFxuIHN0YXRpYyBib29sXFxuIGllZWU4MDIxMV9yeF9pc192YWxpZF9zdGFfbGlua19pZChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1OCBsaW5rX2lkKVxcbiB7XFxuLVxcdHJldHVybiAhIShzdGEtXFx1MDAzZXZhbGlkX2xpbmtzIFxcdTAwMjYgQklUKGxpbmtfaWQpKTtcXG4rXFx0aWYgKHN0YS1cXHUwMDNlbWxvKVxcbitcXHRcXHRyZXR1cm4gc3RhLVxcdTAwM2V2YWxpZF9saW5rcyBcXHUwMDI2IEJJVChsaW5rX2lkKTtcXG4rXFxuK1xcdHJldHVybiBzdGEtXFx1MDAzZWRlZmxpbmsubGlua19pZCA9PSBsaW5rX2lkO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGlua19zdGEoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhKVxcbit7XFxuK1xcdHN0cnVjdCBzdGFfaW5mbyAqc3RhO1xcbitcXG4rXFx0aWYgKFdBUk5fT05fT05DRSghbGlua19zdGEpIHx8XFxuK1xcdCAgICAhaWVlZTgwMjExX3J4X2lzX3ZhbGlkX3N0YV9saW5rX2lkKFxcdTAwMjZsaW5rX3N0YS1cXHUwMDNlc3RhLVxcdTAwM2VzdGEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBsaW5rX3N0YS1cXHUwMDNlbGlua19pZCkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHN0YSA9IGxpbmtfc3RhLVxcdTAwM2VzdGE7XFxuK1xcbitcXHRyeC1cXHUwMDNlc3RhID0gc3RhO1xcbitcXHRyeC1cXHUwMDNlbG9jYWwgPSBzdGEtXFx1MDAzZXNkYXRhLVxcdTAwM2Vsb2NhbDtcXG4rXFx0cngtXFx1MDAzZWxpbmsgPSByY3VfZGVyZWZlcmVuY2Uoc3RhLVxcdTAwM2VzZGF0YS1cXHUwMDNlbGlua1tsaW5rX3N0YS1cXHUwMDNlbGlua19pZF0pO1xcbitcXHRpZiAoIXJ4LVxcdTAwM2VsaW5rKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRyeC1cXHUwMDNlbGlua19pZCA9IHJ4LVxcdTAwM2VsaW5rLVxcdTAwM2VsaW5rX2lkO1xcbitcXHRyeC1cXHUwMDNlbGlua19zdGEgPSBsaW5rX3N0YTtcXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCBpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGluayhzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxcbkBAIC00MzYwLDExICs0MzgyLDEzIEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcXG4gXFxuIFxcdGlmIChsaW5rX2lkIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRpZiAoaWVlZTgwMjExX3ZpZl9pc19tbGQoXFx1MDAyNnJ4LVxcdTAwM2VzZGF0YS1cXHUwMDNldmlmKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgc3RhIFxcdTAwMjZcXHUwMDI2ICFzdGEtXFx1MDAzZXN0YS52YWxpZF9saW5rcylcXG4rXFx0XFx0ICAgIHN0YSBcXHUwMDI2XFx1MDAyNiAhc3RhLVxcdTAwM2VzdGEudmFsaWRfbGlua3MpIHtcXG4gXFx0XFx0XFx0cngtXFx1MDAzZWxpbmsgPVxcbiBcXHRcXHRcXHRcXHRyY3VfZGVyZWZlcmVuY2UocngtXFx1MDAzZXNkYXRhLVxcdTAwM2VsaW5rW3N0YS1cXHUwMDNlZGVmbGluay5saW5rX2lkXSk7XFxuLVxcdFxcdGVsc2VcXG4rXFx0XFx0XFx0cngtXFx1MDAzZWxpbmtfc3RhID0gcmN1X2RlcmVmZXJlbmNlKHJ4LVxcdTAwM2VzdGEtXFx1MDAzZWxpbmtbbGlua19pZF0pO1xcbitcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRyeC1cXHUwMDNlbGluayA9IFxcdTAwMjZyeC1cXHUwMDNlc2RhdGEtXFx1MDAzZWRlZmxpbms7XFxuK1xcdFxcdH1cXG4gXFx0fSBlbHNlIGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X2xpbmsocngsIGxpbmtfaWQpKSB7XFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0fVxcbkBAIC00Mzg3LDcgKzQ0MTEsNyBAQCB2b2lkIGllZWU4MDIxMV9yZWxlYXNlX3Jlb3JkZXJfdGltZW91dChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgaW50IHRpZClcXG4gXFx0c3RydWN0IHRpZF9hbXBkdV9yeCAqdGlkX2FnZ19yeDtcXG4gXFx0aW50IGxpbmtfaWQgPSAtMTtcXG4gXFxuLVxcdC8qIEZJWE1FOiBzdGF0aXN0aWNzIHdvbid0IGJlIHJpZ2h0IHdpdGggdGhpcyAqL1xcbitcXHQvKiBOT1RFOiB0aGUgY29ycmVjdCBsaW5rIFNUQSBmb3IgdGhlIGZyYW1lIGlzIHNldCBsYXRlciAqL1xcbiBcXHRpZiAoc3RhLVxcdTAwM2VzdGEudmFsaWRfbGlua3MpXFxuIFxcdFxcdGxpbmtfaWQgPSBmZnMoc3RhLVxcdTAwM2VzdGEudmFsaWRfbGlua3MpIC0gMTtcXG4gXFxuQEAgLTQ5MTQsMjAgKzQ5MzgsMTQgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4XzgwMjMoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcXG4ge1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YV9yeF9zdGF0cyAqc3RhdHM7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0IocngtXFx1MDAzZXNrYik7XFxuLVxcdHN0cnVjdCBzdGFfaW5mbyAqc3RhID0gcngtXFx1MDAzZXN0YTtcXG4tXFx0c3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhO1xcbitcXHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEgPSByeC1cXHUwMDNlbGlua19zdGE7XFxuIFxcdHN0cnVjdCBza19idWZmICpza2IgPSByeC1cXHUwMDNlc2tiO1xcbiBcXHR2b2lkICpzYSA9IHNrYi1cXHUwMDNlZGF0YSArIEVUSF9BTEVOO1xcbiBcXHR2b2lkICpkYSA9IHNrYi1cXHUwMDNlZGF0YTtcXG4gXFxuLVxcdGlmIChyeC1cXHUwMDNlbGlua19pZCBcXHUwMDNlPSAwKSB7XFxuLVxcdFxcdGxpbmtfc3RhID0gcmN1X2RlcmVmZXJlbmNlKHN0YS1cXHUwMDNlbGlua1tyeC1cXHUwMDNlbGlua19pZF0pO1xcbi1cXHRcXHRpZiAoV0FSTl9PTl9PTkNFKCFsaW5rX3N0YSkpIHtcXG4tXFx0XFx0XFx0ZGV2X2tmcmVlX3NrYihyeC1cXHUwMDNlc2tiKTtcXG4tXFx0XFx0XFx0cmV0dXJuO1xcbi1cXHRcXHR9XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdGxpbmtfc3RhID0gXFx1MDAyNnN0YS1cXHUwMDNlZGVmbGluaztcXG4rXFx0aWYgKFdBUk5fT05fT05DRSghbGlua19zdGEpKSB7XFxuK1xcdFxcdGRldl9rZnJlZV9za2IocngtXFx1MDAzZXNrYik7XFxuK1xcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4gXFx0c3RhdHMgPSBcXHUwMDI2bGlua19zdGEtXFx1MDAzZXJ4X3N0YXRzO1xcbkBAIC01MTU0LDYgKzUxNzIsOSBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfaW52b2tlX2Zhc3Rfcngoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcXG4gXFx0XFx0Z290byBkcm9wO1xcbiBcXHR9XFxuIFxcbitcXHRzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcXG4rXFx0c3RhdHVzLVxcdTAwM2VsaW5rX2lkID0gcngtXFx1MDAzZWxpbmtfaWQgXFx1MDAzYyAwID8gMCA6IHJ4LVxcdTAwM2VsaW5rX2lkO1xcbitcXG4gXFx0aWVlZTgwMjExX3J4XzgwMjMocngsIGZhc3RfcngsIG9yaWdfbGVuKTtcXG4gXFxuIFxcdHJldHVybiB0cnVlO1xcbkBAIC01MTc4LDYgKzUxOTksNyBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAodm9pZCAqKXNrYi1cXHUwMDNlZGF0YTtcXG4gXFx0c3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhID0gcngtXFx1MDAzZWxpbmtfc3RhO1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluayA9IHJ4LVxcdTAwM2VsaW5rO1xcbitcXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzO1xcbiBcXG4gXFx0cngtXFx1MDAzZXNrYiA9IHNrYjtcXG4gXFxuQEAgLTUyMjEsNiArNTI0Myw5IEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcXG4gXFx0XFx0aGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopcngtXFx1MDAzZXNrYi1cXHUwMDNlZGF0YTtcXG4gXFx0fVxcbiBcXG4rXFx0c3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHJ4LVxcdTAwM2Vza2IpO1xcbitcXHRzdGF0dXMtXFx1MDAzZWxpbmtfaWQgPSByeC1cXHUwMDNlbGlua19pZCBcXHUwMDNjIDAgPyAwIDogcngtXFx1MDAzZWxpbmtfaWQ7XFxuK1xcbiBcXHRpZiAoaWVlZTgwMjExX2lzX3MxZ19iZWFjb24oaGRyLVxcdTAwM2VmcmFtZV9jb250cm9sKSkge1xcbiBcXHRcXHRpZWVlODAyMTFfaW52b2tlX3J4X2hhbmRsZXJzKHJ4KTtcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuQEAgLTUyNTYsMjIgKzUyODEsMTkgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfODAyMyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3B1YnN0YSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbiB7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpO1xcbi1cXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfZmFzdF9yeCAqZmFzdF9yeDtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9yeF9kYXRhIHJ4O1xcbiBcXHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YTtcXG4tXFx0aW50IGxpbmtfaWQgPSAtMTtcXG4gXFxuIFxcdG1lbXNldChcXHUwMDI2cngsIDAsIHNpemVvZihyeCkpO1xcbiBcXHRyeC5za2IgPSBza2I7XFxuIFxcdHJ4LmxvY2FsID0gbG9jYWw7XFxuIFxcdHJ4Lmxpc3QgPSBsaXN0O1xcbi1cXHRyeC5saW5rX2lkID0gLTE7XFxuIFxcbiBcXHRJODAyX0RFQlVHX0lOQyhsb2NhbC1cXHUwMDNlZG90MTFSZWNlaXZlZEZyYWdtZW50Q291bnQpO1xcbiBcXG5AQCAtNTI3OSwyMyArNTMwMSwxNSBAQCBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfODAyMyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4gXFx0aWYgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBldGhoZHIpKVxcbiBcXHRcXHRnb3RvIGRyb3A7XFxuIFxcbi1cXHRpZiAoIXB1YnN0YSlcXG4rXFx0aWYgKCFsaW5rX3B1YnN0YSlcXG4gXFx0XFx0Z290byBkcm9wO1xcbiBcXG4tXFx0aWYgKHN0YXR1cy1cXHUwMDNlbGlua192YWxpZClcXG4tXFx0XFx0bGlua19pZCA9IHN0YXR1cy1cXHUwMDNlbGlua19pZDtcXG4tXFxuLVxcdC8qXFxuLVxcdCAqIFRPRE86IFNob3VsZCB0aGUgZnJhbWUgYmUgZHJvcHBlZCBpZiB0aGUgcmlnaHQgbGlua19pZCBpcyBub3RcXG4tXFx0ICogYXZhaWxhYmxlPyBPciBtYXkgYmUgaXQgaXMgZmluZSBpbiB0aGUgY3VycmVudCBmb3JtIHRvIHByb2NlZWQgd2l0aFxcbi1cXHQgKiB0aGUgZnJhbWUgcHJvY2Vzc2luZyBiZWNhdXNlIHdpdGggZnJhbWUgYmVpbmcgaW4gODAyLjMgZm9ybWF0LFxcbi1cXHQgKiBsaW5rX2lkIGlzIHVzZWQgb25seSBmb3Igc3RhdHMgcHVycG9zZSBhbmQgdXBkYXRpbmcgdGhlIHN0YXRzIG9uXFxuLVxcdCAqIHRoZSBkZWZsaW5rIGlzIGZpbmU/XFxuLVxcdCAqL1xcbi1cXHRzdGEgPSBjb250YWluZXJfb2YocHVic3RhLCBzdHJ1Y3Qgc3RhX2luZm8sIHN0YSk7XFxuLVxcdGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X3N0YShcXHUwMDI2cngsIHN0YSwgbGlua19pZCkpXFxuK1xcdHN0YSA9IGNvbnRhaW5lcl9vZihsaW5rX3B1YnN0YS1cXHUwMDNlc3RhLCBzdHJ1Y3Qgc3RhX2luZm8sIHN0YSk7XFxuK1xcdGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X3N0YShcXHUwMDI2cngsIHN0YSwgbGlua19wdWJzdGEtXFx1MDAzZWxpbmtfaWQpKVxcbiBcXHRcXHRnb3RvIGRyb3A7XFxuIFxcbitcXHRyeC5saW5rX2lkID0gbGlua19wdWJzdGEtXFx1MDAzZWxpbmtfaWQ7XFxuK1xcbiBcXHRmYXN0X3J4ID0gcmN1X2RlcmVmZXJlbmNlKHJ4LnN0YS1cXHUwMDNlZmFzdF9yeCk7XFxuIFxcdGlmICghZmFzdF9yeClcXG4gXFx0XFx0Z290byBkcm9wO1xcbkBAIC01MzA3LDU5ICs1MzIxLDE5IEBAIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J4X2hhbmRsZV84MDIzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbiBcXHRkZXZfa2ZyZWVfc2tiKHNrYik7XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sIGllZWU4MDIxMV9yeF9mb3JfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIGNvbnN1bWUpXFxuK3N0YXRpYyBib29sIGllZWU4MDIxMV9yeF92YWxpZF9mcmVxKGludCBmcmVxLCBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluaylcXG4ge1xcbi1cXHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGE7XFxuLVxcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAodm9pZCAqKXNrYi1cXHUwMDNlZGF0YTtcXG4tXFx0c3RydWN0IHN0YV9pbmZvICpzdGE7XFxuLVxcdGludCBsaW5rX2lkID0gLTE7XFxuLVxcbi1cXHRpZiAoaWVlZTgwMjExX2lzX3MxZ19iZWFjb24oaGRyLVxcdTAwM2VmcmFtZV9jb250cm9sKSkge1xcbi1cXHRcXHRpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEocngsIE5VTEwsIC0xKSlcXG4tXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbi1cXG4tXFx0XFx0cmV0dXJuIGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUocngsIHNrYiwgY29uc3VtZSk7XFxuLVxcdH1cXG4rXFx0c3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmY7XFxuIFxcbi1cXHQvKlxcbi1cXHQgKiBMb29rIHVwIGxpbmsgc3RhdGlvbiBmaXJzdCwgaW4gY2FzZSB0aGVyZSdzIGFcXG4tXFx0ICogY2hhbmNlIHRoYXQgdGhleSBtaWdodCBoYXZlIGEgbGluayBhZGRyZXNzIHRoYXRcXG4tXFx0ICogaXMgaWRlbnRpY2FsIHRvIHRoZSBNTEQgYWRkcmVzcywgdGhhdCB3YXkgd2UnbGxcXG4tXFx0ICogaGF2ZSB0aGUgbGluayBpbmZvcm1hdGlvbiBpZiBuZWVkZWQuXFxuLVxcdCAqL1xcbi1cXHRsaW5rX3N0YSA9IGxpbmtfc3RhX2luZm9fZ2V0X2JzcyhyeC1cXHUwMDNlc2RhdGEsIGhkci1cXHUwMDNlYWRkcjIpO1xcbi1cXHRpZiAobGlua19zdGEpIHtcXG4tXFx0XFx0c3RhID0gbGlua19zdGEtXFx1MDAzZXN0YTtcXG4tXFx0XFx0bGlua19pZCA9IGxpbmtfc3RhLVxcdTAwM2VsaW5rX2lkO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XFxuLVxcbi1cXHRcXHRzdGEgPSBzdGFfaW5mb19nZXRfYnNzKHJ4LVxcdTAwM2VzZGF0YSwgaGRyLVxcdTAwM2VhZGRyMik7XFxuLVxcdFxcdGlmIChzdGF0dXMtXFx1MDAzZWxpbmtfdmFsaWQpIHtcXG4tXFx0XFx0XFx0bGlua19pZCA9IHN0YXR1cy1cXHUwMDNlbGlua19pZDtcXG4tXFx0XFx0fSBlbHNlIGlmIChpZWVlODAyMTFfdmlmX2lzX21sZChcXHUwMDI2cngtXFx1MDAzZXNkYXRhLVxcdTAwM2V2aWYpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdCAgIHN0YXR1cy1cXHUwMDNlZnJlcSkge1xcbi1cXHRcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluaztcXG4tXFx0XFx0XFx0c3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmY7XFxuLVxcbi1cXHRcXHRcXHRmb3JfZWFjaF9saW5rX2RhdGFfcmN1KHJ4LVxcdTAwM2VzZGF0YSwgbGluaykge1xcbi1cXHRcXHRcXHRcXHRjb25mID0gcmN1X2RlcmVmZXJlbmNlKGxpbmstXFx1MDAzZWNvbmYtXFx1MDAzZWNoYW5jdHhfY29uZik7XFxuLVxcdFxcdFxcdFxcdGlmICghY29uZiB8fCAhY29uZi1cXHUwMDNlZGVmLmNoYW4pXFxuLVxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4tXFx0XFx0XFx0XFx0aWYgKHN0YXR1cy1cXHUwMDNlZnJlcSA9PSBjb25mLVxcdTAwM2VkZWYuY2hhbi1cXHUwMDNlY2VudGVyX2ZyZXEpIHtcXG4tXFx0XFx0XFx0XFx0XFx0bGlua19pZCA9IGxpbmstXFx1MDAzZWxpbmtfaWQ7XFxuLVxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0fVxcbi1cXHR9XFxuK1xcdGlmICghZnJlcSB8fCBsaW5rLVxcdTAwM2VzZGF0YS1cXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTkFOIHx8XFxuK1xcdCAgICBsaW5rLVxcdTAwM2VzZGF0YS1cXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTkFOX0RBVEEpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbiBcXG4tXFx0aWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfc3RhKHJ4LCBzdGEsIGxpbmtfaWQpKVxcbitcXHRjb25mID0gcmN1X2RlcmVmZXJlbmNlKGxpbmstXFx1MDAzZWNvbmYtXFx1MDAzZWNoYW5jdHhfY29uZik7XFxuK1xcdGlmICghY29uZiB8fCAhY29uZi1cXHUwMDNlZGVmLmNoYW4pXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuLVxcdHJldHVybiBpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKHJ4LCBza2IsIGNvbnN1bWUpO1xcbitcXHRyZXR1cm4gZnJlcSA9PSBjb25mLVxcdTAwM2VkZWYuY2hhbi1cXHUwMDNlY2VudGVyX2ZyZXE7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTUzNjcsMTggKzUzNDEsMjAgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX3J4X2Zvcl9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcXG4gICogYmUgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jayBwcm90ZWN0aW9uLlxcbiAgKi9cXG4gc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4tXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsXFxuK1xcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3B1YnN0YSxcXG4gXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbiB7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpO1xcbi1cXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhO1xcbitcXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7XFxuK1xcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YTtcXG4rXFx0c3RydWN0IHN0YV9pbmZvICpzdGE7XFxuIFxcdF9fbGUxNiBmYztcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9yeF9kYXRhIHJ4O1xcbi1cXHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpwcmV2O1xcbiBcXHRzdHJ1Y3QgcmhsaXN0X2hlYWQgKnRtcDtcXG4rXFx0Ym9vbCByeF9kYXRhX3BlbmRpbmc7XFxuIFxcdGludCBlcnIgPSAwO1xcbiBcXG4gXFx0ZmMgPSAoKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLVxcdTAwM2VkYXRhKS1cXHUwMDNlZnJhbWVfY29udHJvbDtcXG5AQCAtNTM4Niw3ICs1MzYyLDYgQEAgc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4gXFx0cnguc2tiID0gc2tiO1xcbiBcXHRyeC5sb2NhbCA9IGxvY2FsO1xcbiBcXHRyeC5saXN0ID0gbGlzdDtcXG4tXFx0cngubGlua19pZCA9IC0xO1xcbiBcXG4gXFx0aWYgKGllZWU4MDIxMV9pc19kYXRhKGZjKSB8fCBpZWVlODAyMTFfaXNfbWdtdChmYykpXFxuIFxcdFxcdEk4MDJfREVCVUdfSU5DKGxvY2FsLVxcdTAwM2Vkb3QxMVJlY2VpdmVkRnJhZ21lbnRDb3VudCk7XFxuQEAgLTU0MjYsOTcgKzU0MDEsMTAyIEBAIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuIFxcdFxcdCAgICAgaWVlZTgwMjExX2lzX3MxZ19iZWFjb24oaGRyLVxcdTAwM2VmcmFtZV9jb250cm9sKSkpXFxuIFxcdFxcdGllZWU4MDIxMV9zY2FuX3J4KGxvY2FsLCBza2IpO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogUlggb2YgYSBkYXRhIGZyYW1lIHNob3VsZCBvbmx5IGhhcHBlbiB0byBleGlzdGluZyBzdGF0aW9ucy5cXG4rXFx0ICogSXQgaXMgdGhlcmVmb3JlIG1vcmUgZWZmaWNpZW50IHRvIHVzZSB0aGUgb25lIHByb3ZpZGVkIGJ5IHRoZSBkcml2ZXJcXG4rXFx0ICogb3Igc2VhcmNoIGJhc2VkIG9uIHRoZSBzdGF0aW9uJ3MgYWRkcmVzcy5cXG4rXFx0ICpcXG4rXFx0ICogTm90ZSB3ZSB3aWxsIGZhbGwgdGhyb3VnaCBhbmQgaGFuZGxlIGEgc3B1cmlvdXMgZGF0YSBmcmFtZSBpbiB0aGVcXG4rXFx0ICogc2FtZSB3YXkgYXMgYSBtYW5hZ2VtZW50IGZyYW1lLlxcbitcXHQgKi9cXG4gXFx0aWYgKGllZWU4MDIxMV9pc19kYXRhKGZjKSkge1xcbi1cXHRcXHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgKnByZXZfc3RhO1xcbi1cXHRcXHRpbnQgbGlua19pZCA9IC0xO1xcbi1cXG4tXFx0XFx0aWYgKHN0YXR1cy1cXHUwMDNlbGlua192YWxpZClcXG4tXFx0XFx0XFx0bGlua19pZCA9IHN0YXR1cy1cXHUwMDNlbGlua19pZDtcXG4tXFxuLVxcdFxcdGlmIChwdWJzdGEpIHtcXG4tXFx0XFx0XFx0c3RhID0gY29udGFpbmVyX29mKHB1YnN0YSwgc3RydWN0IHN0YV9pbmZvLCBzdGEpO1xcbi1cXHRcXHRcXHRpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEoXFx1MDAyNnJ4LCBzdGEsIGxpbmtfaWQpKVxcbi1cXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4tXFxuLVxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIEluIE1MTyBjb25uZWN0aW9uLCBmZXRjaCB0aGUgbGlua19pZCB1c2luZyBhZGRyMlxcbi1cXHRcXHRcXHQgKiB3aGVuIHRoZSBkcml2ZXIgZG9lcyBub3QgcGFzcyBsaW5rX2lkIGluIHN0YXR1cy5cXG4tXFx0XFx0XFx0ICogV2hlbiB0aGUgYWRkcmVzcyB0cmFuc2xhdGlvbiBpcyBhbHJlYWR5IHBlcmZvcm1lZCBieVxcbi1cXHRcXHRcXHQgKiBkcml2ZXIvaHcsIHRoZSB2YWxpZCBsaW5rX2lkIG11c3QgYmUgcGFzc2VkIGluXFxuLVxcdFxcdFxcdCAqIHN0YXR1cy5cXG4tXFx0XFx0XFx0ICovXFxuLVxcbi1cXHRcXHRcXHRpZiAoIXN0YXR1cy1cXHUwMDNlbGlua192YWxpZCBcXHUwMDI2XFx1MDAyNiBwdWJzdGEtXFx1MDAzZW1sbykge1xcbi1cXHRcXHRcXHRcXHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGE7XFxuLVxcbi1cXHRcXHRcXHRcXHRsaW5rX3N0YSA9IGxpbmtfc3RhX2luZm9fZ2V0X2JzcyhyeC5zZGF0YSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGhkci1cXHUwMDNlYWRkcjIpO1xcbi1cXHRcXHRcXHRcXHRpZiAoIWxpbmtfc3RhKVxcbi1cXHRcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4tXFxuLVxcdFxcdFxcdFxcdGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X2xpbmsoXFx1MDAyNnJ4LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRsaW5rX3N0YS1cXHUwMDNlbGlua19pZCkpXFxuLVxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbi1cXHRcXHRcXHR9XFxuLVxcbi1cXHRcXHRcXHRpZiAoaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShcXHUwMDI2cngsIHNrYiwgdHJ1ZSkpXFxuK1xcdFxcdGlmIChsaW5rX3B1YnN0YSkge1xcbitcXHRcXHRcXHRzdGEgPSBjb250YWluZXJfb2YobGlua19wdWJzdGEtXFx1MDAzZXN0YSwgc3RydWN0IHN0YV9pbmZvLFxcbitcXHRcXHRcXHRcXHRcXHQgICBzdGEpO1xcbitcXHRcXHRcXHRsaW5rX3N0YSA9IHJjdV9kZXJlZmVyZW5jZShzdGEtXFx1MDAzZWxpbmtbbGlua19wdWJzdGEtXFx1MDAzZWxpbmtfaWRdKTtcXG4rXFxuK1xcdFxcdFxcdHJ4LnNkYXRhID0gc3RhLVxcdTAwM2VzZGF0YTtcXG4rXFx0XFx0XFx0aWYgKGllZWU4MDIxMV9yeF9kYXRhX3NldF9saW5rX3N0YShcXHUwMDI2cngsIGxpbmtfc3RhKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAgaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShcXHUwMDI2cngsIHNrYiwgdHJ1ZSkpXFxuIFxcdFxcdFxcdFxcdHJldHVybjtcXG4rXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRwcmV2X3N0YSA9IE5VTEw7XFxuK1xcdFxcdHJ4X2RhdGFfcGVuZGluZyA9IGZhbHNlO1xcbiBcXG4rXFx0XFx0LyogU2VhcmNoIGZvciBzdGF0aW9ucyBvbiBub24tTUxEIGludGVyZmFjZXMgKi9cXG4gXFx0XFx0Zm9yX2VhY2hfc3RhX2luZm8obG9jYWwsIGhkci1cXHUwMDNlYWRkcjIsIHN0YSwgdG1wKSB7XFxuLVxcdFxcdFxcdGlmICghcHJldl9zdGEpIHtcXG4tXFx0XFx0XFx0XFx0cHJldl9zdGEgPSBzdGE7XFxuLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRcXHR9XFxuK1xcdFxcdFxcdHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rO1xcbiBcXG4tXFx0XFx0XFx0cnguc2RhdGEgPSBwcmV2X3N0YS1cXHUwMDNlc2RhdGE7XFxuLVxcdFxcdFxcdGlmICghc3RhdHVzLVxcdTAwM2VsaW5rX3ZhbGlkIFxcdTAwMjZcXHUwMDI2IHByZXZfc3RhLVxcdTAwM2VzdGEubWxvKSB7XFxuLVxcdFxcdFxcdFxcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YTtcXG4rXFx0XFx0XFx0aWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKFxcdTAwMjZzdGEtXFx1MDAzZXNkYXRhLVxcdTAwM2V2aWYpKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdFxcdFxcdGxpbmtfc3RhID0gbGlua19zdGFfaW5mb19nZXRfYnNzKHJ4LnNkYXRhLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgaGRyLVxcdTAwM2VhZGRyMik7XFxuLVxcdFxcdFxcdFxcdGlmICghbGlua19zdGEpXFxuLVxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHRsaW5rID0gXFx1MDAyNnN0YS1cXHUwMDNlc2RhdGEtXFx1MDAzZWRlZmxpbms7XFxuK1xcdFxcdFxcdGlmICghaWVlZTgwMjExX3J4X3ZhbGlkX2ZyZXEoc3RhdHVzLVxcdTAwM2VmcmVxLCBsaW5rKSlcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRcXHRcXHRsaW5rX2lkID0gbGlua19zdGEtXFx1MDAzZWxpbmtfaWQ7XFxuK1xcdFxcdFxcdGlmIChyeF9kYXRhX3BlbmRpbmcpIHtcXG4rXFx0XFx0XFx0XFx0aWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShcXHUwMDI2cngsIHNrYixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ZmFsc2UpO1xcbitcXHRcXHRcXHRcXHRyeF9kYXRhX3BlbmRpbmcgPSBmYWxzZTtcXG4gXFx0XFx0XFx0fVxcbiBcXG4tXFx0XFx0XFx0aWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfc3RhKFxcdTAwMjZyeCwgcHJldl9zdGEsIGxpbmtfaWQpKVxcbi1cXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4tXFxuLVxcdFxcdFxcdGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoXFx1MDAyNnJ4LCBza2IsIGZhbHNlKTtcXG4rXFx0XFx0XFx0cnguc2RhdGEgPSBzdGEtXFx1MDAzZXNkYXRhO1xcbitcXHRcXHRcXHRpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9saW5rX3N0YShcXHUwMDI2cngsIFxcdTAwMjZzdGEtXFx1MDAzZWRlZmxpbmspKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdFxcdHByZXZfc3RhID0gc3RhO1xcbitcXHRcXHRcXHRyeF9kYXRhX3BlbmRpbmcgPSB0cnVlO1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRpZiAocHJldl9zdGEpIHtcXG4tXFx0XFx0XFx0cnguc2RhdGEgPSBwcmV2X3N0YS1cXHUwMDNlc2RhdGE7XFxuLVxcdFxcdFxcdGlmICghc3RhdHVzLVxcdTAwM2VsaW5rX3ZhbGlkIFxcdTAwMjZcXHUwMDI2IHByZXZfc3RhLVxcdTAwM2VzdGEubWxvKSB7XFxuLVxcdFxcdFxcdFxcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YTtcXG4rXFx0XFx0LyogQW5kIHNlYXJjaCBzdGF0aW9ucyBvbiBNTEQgaW50ZXJmYWNlcyAqL1xcbitcXHRcXHRmb3JfZWFjaF9saW5rX3N0YV9pbmZvKGxvY2FsLCBoZHItXFx1MDAzZWFkZHIyLCBsaW5rX3N0YSwgdG1wKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rO1xcbiBcXG4tXFx0XFx0XFx0XFx0bGlua19zdGEgPSBsaW5rX3N0YV9pbmZvX2dldF9ic3Mocnguc2RhdGEsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBoZHItXFx1MDAzZWFkZHIyKTtcXG4tXFx0XFx0XFx0XFx0aWYgKCFsaW5rX3N0YSlcXG4tXFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdFxcdHN0YSA9IGxpbmtfc3RhLVxcdTAwM2VzdGE7XFxuK1xcdFxcdFxcdHNkYXRhID1cXHRzdGEtXFx1MDAzZXNkYXRhO1xcbitcXHRcXHRcXHRsaW5rID0gcmN1X2RlcmVmZXJlbmNlKHNkYXRhLVxcdTAwM2VsaW5rW2xpbmtfc3RhLVxcdTAwM2VsaW5rX2lkXSk7XFxuIFxcbi1cXHRcXHRcXHRcXHRsaW5rX2lkID0gbGlua19zdGEtXFx1MDAzZWxpbmtfaWQ7XFxuK1xcdFxcdFxcdGlmICghaWVlZTgwMjExX3J4X3ZhbGlkX2ZyZXEoc3RhdHVzLVxcdTAwM2VmcmVxLCBsaW5rKSlcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRcXHRpZiAocnhfZGF0YV9wZW5kaW5nKSB7XFxuK1xcdFxcdFxcdFxcdGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoXFx1MDAyNnJ4LCBza2IsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGZhbHNlKTtcXG4rXFx0XFx0XFx0XFx0cnhfZGF0YV9wZW5kaW5nID0gZmFsc2U7XFxuIFxcdFxcdFxcdH1cXG4gXFxuLVxcdFxcdFxcdGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X3N0YShcXHUwMDI2cngsIHByZXZfc3RhLCBsaW5rX2lkKSlcXG4tXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdFxcdHJ4LnNkYXRhID0gc3RhLVxcdTAwM2VzZGF0YTtcXG4rXFx0XFx0XFx0aWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGlua19zdGEoXFx1MDAyNnJ4LCBsaW5rX3N0YSkpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0XFx0cnhfZGF0YV9wZW5kaW5nID0gdHJ1ZTtcXG4rXFx0XFx0fVxcbiBcXG4rXFx0XFx0aWYgKHJ4X2RhdGFfcGVuZGluZykge1xcbiBcXHRcXHRcXHRpZiAoaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShcXHUwMDI2cngsIHNrYiwgdHJ1ZSkpXFxuIFxcdFxcdFxcdFxcdHJldHVybjtcXG4rXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHR9XFxuK1xcbitcXHRcXHQvKiBmYWxsIHRocm91Z2gsIGUuZy4gZm9yIHNwdXJpb3VzIGZyYW1lIG5vdGlmaWNhdGlvbiAqL1xcbiBcXHR9XFxuIFxcbi1cXHRwcmV2ID0gTlVMTDtcXG4rXFx0LypcXG4rXFx0ICogVGhpcyBpcyBhIG1hbmFnZW1lbnQgZnJhbWUgKG9yIGEgZGF0YSBmcmFtZSB3aXRob3V0IGEgc3RhdGlvbikgYW5kXFxuK1xcdCAqIGl0IHdpbGwgYmUgZGVsaXZlcmVkIGluZGVwZW5kZW50IG9mIHdoZXRoZXIgYSBzdGF0aW9uIGV4aXN0cyxcXG4rXFx0ICogc28gaXRlcmF0ZSB0aGUgaW50ZXJmYWNlcy5cXG4rXFx0ICovXFxuK1xcdHJ4X2RhdGFfcGVuZGluZyA9IGZhbHNlO1xcbitcXG4rXFx0LyogV2UgZXhwZWN0IHRoZSBkcml2ZXIgdG8gcHJvdmlkZSBmcmVxdWVuY3kgaW5mb3JtYXRpb24gKi9cXG4rXFx0aWYgKFdBUk5fT05fT05DRSghbG9jYWwtXFx1MDAzZWVtdWxhdGVfY2hhbmN0eCBcXHUwMDI2XFx1MDAyNiAhc3RhdHVzLVxcdTAwM2VmcmVxKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuIFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgXFx1MDAyNmxvY2FsLVxcdTAwM2VpbnRlcmZhY2VzLCBsaXN0KSB7XFxuK1xcdFxcdHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rID0gTlVMTDtcXG4rXFxuIFxcdFxcdGlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuQEAgLTU1MjQsMzAgKzU1MDQsODUgQEAgc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4gXFx0XFx0ICAgIHNkYXRhLVxcdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuK1xcdFxcdGxpbmtfc3RhID0gTlVMTDtcXG4rXFx0XFx0bGluayA9IE5VTEw7XFxuK1xcbitcXHRcXHQvKiBUcnkgdG8gcmVzb2x2ZSB0aGUgc3RhdGlvbiAqL1xcbitcXHRcXHRpZiAoIWllZWU4MDIxMV92aWZfaXNfbWxkKFxcdTAwMjZzZGF0YS1cXHUwMDNldmlmKSkge1xcbitcXHRcXHRcXHRzdGEgPSBzdGFfaW5mb19nZXRfYnNzKHNkYXRhLCBoZHItXFx1MDAzZWFkZHIyKTtcXG4rXFxuK1xcdFxcdFxcdGlmIChzdGEpIHtcXG4rXFx0XFx0XFx0XFx0bGlua19zdGEgPSBcXHUwMDI2c3RhLVxcdTAwM2VkZWZsaW5rO1xcbitcXHRcXHRcXHRcXHRsaW5rID0gXFx1MDAyNnNkYXRhLVxcdTAwM2VkZWZsaW5rO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGxpbmtfc3RhID0gbGlua19zdGFfaW5mb19nZXRfYnNzKHNkYXRhLCBoZHItXFx1MDAzZWFkZHIyKTtcXG4rXFxuK1xcdFxcdFxcdGlmIChsaW5rX3N0YSlcXG4rXFx0XFx0XFx0XFx0bGluayA9IHJjdV9kZXJlZmVyZW5jZShzZGF0YS1cXHUwMDNlbGlua1tsaW5rX3N0YS1cXHUwMDNlbGlua19pZF0pO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHQvKlxcbi1cXHRcXHQgKiBmcmFtZSBpcyBkZXN0aW5lZCBmb3IgdGhpcyBpbnRlcmZhY2UsIGJ1dCBpZiBpdCdzXFxuLVxcdFxcdCAqIG5vdCBhbHNvIGZvciB0aGUgcHJldmlvdXMgb25lIHdlIGhhbmRsZSB0aGF0IGFmdGVyXFxuLVxcdFxcdCAqIHRoZSBsb29wIHRvIGF2b2lkIGNvcHlpbmcgdGhlIFNLQiBvbmNlIHRvbyBtdWNoXFxuK1xcdFxcdCAqIElmIHdlIGZvdW5kIGEgU1RBIGFuZCBpdCBoYXMgYSB2YWxpZCBsaW5rIGluZm9ybWF0aW9uLCB0aGVuXFxuK1xcdFxcdCAqIFJYIHVzaW5nIHRoZSBzdGF0aW9uLlxcbiBcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKGxpbmtfc3RhIFxcdTAwMjZcXHUwMDI2IGxpbmsgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIGllZWU4MDIxMV9yeF92YWxpZF9mcmVxKHN0YXR1cy1cXHUwMDNlZnJlcSwgbGluaykpIHtcXG4rXFx0XFx0XFx0aWYgKHJ4X2RhdGFfcGVuZGluZykge1xcbitcXHRcXHRcXHRcXHRpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKFxcdTAwMjZyeCwgc2tiLCBmYWxzZSk7XFxuK1xcdFxcdFxcdFxcdHJ4X2RhdGFfcGVuZGluZyA9IGZhbHNlO1xcbitcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHQvKiBObyB2YWxpZF9saW5rcyBjaGVjayBhcyB3ZSBuZWVkIHRvIFJYIGJlYWNvbnMgKi9cXG4rXFxuK1xcdFxcdFxcdHJ4LnNkYXRhID0gc2RhdGE7XFxuK1xcdFxcdFxcdGlmIChpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGlua19zdGEoXFx1MDAyNnJ4LCBsaW5rX3N0YSkpXFxuK1xcdFxcdFxcdFxcdHJ4X2RhdGFfcGVuZGluZyA9IHRydWU7XFxuIFxcbi1cXHRcXHRpZiAoIXByZXYpIHtcXG4tXFx0XFx0XFx0cHJldiA9IHNkYXRhO1xcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0cnguc2RhdGEgPSBwcmV2O1xcbi1cXHRcXHRpZWVlODAyMTFfcnhfZm9yX2ludGVyZmFjZShcXHUwMDI2cngsIHNrYiwgZmFsc2UpO1xcbitcXHRcXHQvKiBObyBzdGF0aW9uLCB0cnkgdG8gcmVzb2x2ZSB0aGUgbGluayBhbmQgUlggKi9cXG4rXFx0XFx0aWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKFxcdTAwMjZzZGF0YS1cXHUwMDNldmlmKSkge1xcbitcXHRcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZjtcXG4rXFx0XFx0XFx0Ym9vbCBmb3VuZCA9IGZhbHNlO1xcbiBcXG4tXFx0XFx0cHJldiA9IHNkYXRhO1xcbi1cXHR9XFxuK1xcdFxcdFxcdGZvcl9lYWNoX2xpbmtfZGF0YV9yY3Uoc2RhdGEsIGxpbmspIHtcXG4rXFx0XFx0XFx0XFx0Y29uZiA9IHJjdV9kZXJlZmVyZW5jZShsaW5rLVxcdTAwM2Vjb25mLVxcdTAwM2VjaGFuY3R4X2NvbmYpO1xcbitcXHRcXHRcXHRcXHRpZiAoIWNvbmYgfHwgIWNvbmYtXFx1MDAzZWRlZi5jaGFuKVxcbitcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdGlmIChwcmV2KSB7XFxuLVxcdFxcdHJ4LnNkYXRhID0gcHJldjtcXG4rXFx0XFx0XFx0XFx0aWYgKHN0YXR1cy1cXHUwMDNlZnJlcSA9PSBjb25mLVxcdTAwM2VkZWYuY2hhbi1cXHUwMDNlY2VudGVyX2ZyZXEpIHtcXG4rXFx0XFx0XFx0XFx0XFx0Zm91bmQgPSB0cnVlO1xcbitcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0XFx0fVxcbitcXHRcXHRcXHR9XFxuIFxcbi1cXHRcXHRpZiAoaWVlZTgwMjExX3J4X2Zvcl9pbnRlcmZhY2UoXFx1MDAyNnJ4LCBza2IsIHRydWUpKVxcbi1cXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdFxcdGlmICghZm91bmQpXFxuK1xcdFxcdFxcdFxcdGxpbmsgPSBcXHUwMDI2c2RhdGEtXFx1MDAzZWRlZmxpbms7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGxpbmsgPSBcXHUwMDI2c2RhdGEtXFx1MDAzZWRlZmxpbms7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChyeF9kYXRhX3BlbmRpbmcpIHtcXG4rXFx0XFx0XFx0aWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShcXHUwMDI2cngsIHNrYiwgZmFsc2UpO1xcbitcXHRcXHRcXHRyeF9kYXRhX3BlbmRpbmcgPSBmYWxzZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0cnguc2RhdGEgPSBzZGF0YTtcXG4rXFx0XFx0cngubG9jYWwgPSBzZGF0YS1cXHUwMDNlbG9jYWw7XFxuK1xcdFxcdHJ4LmxpbmsgPSBsaW5rO1xcbitcXHRcXHRyeC5saW5rX2lkID0gbGluay1cXHUwMDNlbGlua19pZDtcXG4rXFx0XFx0cnguc3RhID0gTlVMTDtcXG4rXFx0XFx0cngubGlua19zdGEgPSBOVUxMO1xcbitcXG4rXFx0XFx0cnhfZGF0YV9wZW5kaW5nID0gdHJ1ZTtcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKHJ4X2RhdGFfcGVuZGluZyBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShcXHUwMDI2cngsIHNrYiwgdHJ1ZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuICBvdXQ6XFxuIFxcdGRldl9rZnJlZV9za2Ioc2tiKTtcXG4gfVxcbkBAIC01NTU2LDcgKzU1OTEsOCBAQCBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfcGFja2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbiAgKiBUaGlzIGlzIHRoZSByZWNlaXZlIHBhdGggaGFuZGxlci4gSXQgaXMgY2FsbGVkIGJ5IGEgbG93IGxldmVsIGRyaXZlciB3aGVuIGFuXFxuICAqIDgwMi4xMSBNUERVIGlzIHJlY2VpdmVkIGZyb20gdGhlIGhhcmR3YXJlLlxcbiAgKi9cXG4tdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSxcXG4rdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4rXFx0XFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfcHVic3RhLFxcbiBcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG4ge1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTtcXG5AQCAtNTY5NCw5ICs1NzMwLDYgQEAgdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSxcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRpZiAoV0FSTl9PTl9PTkNFKHN0YXR1cy1cXHUwMDNlbGlua19pZCBcXHUwMDNlPSBJRUVFODAyMTFfTElOS19VTlNQRUNJRklFRCkpXFxuLVxcdFxcdGdvdG8gZHJvcDtcXG4tXFxuIFxcdHN0YXR1cy1cXHUwMDNlcnhfZmxhZ3MgPSAwO1xcbiBcXG4gXFx0a2Nvdl9yZW1vdGVfc3RhcnRfY29tbW9uKHNrYl9nZXRfa2Nvdl9oYW5kbGUoc2tiKSk7XFxuQEAgLTU3MTUsOSArNTc0OCwxMCBAQCB2b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLFxcbiBcXHRcXHRcXHRpZWVlODAyMTFfdHB0X2xlZF90cmlnX3J4KGxvY2FsLCBza2ItXFx1MDAzZWxlbik7XFxuIFxcbiBcXHRcXHRpZiAoc3RhdHVzLVxcdTAwM2VmbGFnIFxcdTAwMjYgUlhfRkxBR184MDIzKVxcbi1cXHRcXHRcXHRfX2llZWU4MDIxMV9yeF9oYW5kbGVfODAyMyhodywgcHVic3RhLCBza2IsIGxpc3QpO1xcbitcXHRcXHRcXHRfX2llZWU4MDIxMV9yeF9oYW5kbGVfODAyMyhodywgbGlua19wdWJzdGEsIHNrYiwgbGlzdCk7XFxuIFxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0X19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChodywgcHVic3RhLCBza2IsIGxpc3QpO1xcbitcXHRcXHRcXHRfX2llZWU4MDIxMV9yeF9oYW5kbGVfcGFja2V0KGh3LCBsaW5rX3B1YnN0YSwgc2tiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGxpc3QpO1xcbiBcXHR9XFxuIFxcbiBcXHRrY292X3JlbW90ZV9zdG9wKCk7XFxuQEAgLTU3MjcsNyArNTc2MSw4IEBAIHZvaWQgaWVlZTgwMjExX3J4X2xpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsXFxuIH1cXG4gRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfcnhfbGlzdCk7XFxuIFxcbi12b2lkIGllZWU4MDIxMV9yeF9uYXBpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLFxcbit2b2lkIGllZWU4MDIxMV9yeF9uYXBpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbitcXHRcXHQgICAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19wdWJzdGEsXFxuIFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXFxuIHtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnRtcDtcXG5AQCAtNTc0MCw3ICs1Nzc1LDcgQEAgdm9pZCBpZWVlODAyMTFfcnhfbmFwaShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSxcXG4gXFx0ICogcmVjZWl2ZSBwcm9jZXNzaW5nXFxuIFxcdCAqL1xcbiBcXHRyY3VfcmVhZF9sb2NrKCk7XFxuLVxcdGllZWU4MDIxMV9yeF9saXN0KGh3LCBwdWJzdGEsIHNrYiwgXFx1MDAyNmxpc3QpO1xcbitcXHRpZWVlODAyMTFfcnhfbGlzdChodywgbGlua19wdWJzdGEsIHNrYiwgXFx1MDAyNmxpc3QpO1xcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFxuIFxcdGlmICghbmFwaSkge1xcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc2Nhbi5jIGIvbmV0L21hYzgwMjExL3NjYW4uY1xcbmluZGV4IGVlZmYyMzBiZDkwOWYuLjMyNGMyYjZkN2NlMWIgMTAwNjQ0XFxuLS0tIGEvbmV0L21hYzgwMjExL3NjYW4uY1xcbisrKyBiL25ldC9tYWM4MDIxMS9zY2FuLmNcXG5AQCAtOSw3ICs5LDcgQEBcXG4gICogQ29weXJpZ2h0IDIwMDcsIE1pY2hhZWwgV3UgXFx1MDAzY2ZsYW1pbmdpY2VAc291cm1pbGsubmV0XFx1MDAzZVxcbiAgKiBDb3B5cmlnaHQgMjAxMy0yMDE1ICBJbnRlbCBNb2JpbGUgQ29tbXVuaWNhdGlvbnMgR21iSFxcbiAgKiBDb3B5cmlnaHQgMjAxNi0yMDE3ICBJbnRlbCBEZXV0c2NobGFuZCBHbWJIXFxuLSAqIENvcHlyaWdodCAoQykgMjAxOC0yMDI1IEludGVsIENvcnBvcmF0aW9uXFxuKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDI2IEludGVsIENvcnBvcmF0aW9uXFxuICAqL1xcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX2FycC5oXFx1MDAzZVxcbkBAIC0yMDQsMTIgKzIwNCwxMCBAQCBpZWVlODAyMTFfYnNzX2luZm9fdXBkYXRlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxcbiBcXHRcXHQgKiBhbiBpbmRpY2F0aW9uIG9uIHdoaWNoIG9mIHRoZSBsaW5rcyB0aGUgZnJhbWUgd2FzIHJlY2VpdmVkXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoaWVlZTgwMjExX3ZpZl9pc19tbGQoXFx1MDAyNnNjYW5fc2RhdGEtXFx1MDAzZXZpZikpIHtcXG4tXFx0XFx0XFx0aWYgKHJ4X3N0YXR1cy1cXHUwMDNlbGlua192YWxpZCkge1xcbi1cXHRcXHRcXHRcXHRzOCBsaW5rX2lkID0gcnhfc3RhdHVzLVxcdTAwM2VsaW5rX2lkO1xcbitcXHRcXHRcXHRzOCBsaW5rX2lkID0gcnhfc3RhdHVzLVxcdTAwM2VsaW5rX2lkO1xcbiBcXG4tXFx0XFx0XFx0XFx0bGlua19jb25mID1cXG4tXFx0XFx0XFx0XFx0XFx0cmN1X2RlcmVmZXJlbmNlKHNjYW5fc2RhdGEtXFx1MDAzZXZpZi5saW5rX2NvbmZbbGlua19pZF0pO1xcbi1cXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGxpbmtfY29uZiA9XFxuK1xcdFxcdFxcdFxcdHJjdV9kZXJlZmVyZW5jZShzY2FuX3NkYXRhLVxcdTAwM2V2aWYubGlua19jb25mW2xpbmtfaWRdKTtcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0bGlua19jb25mID0gXFx1MDAyNnNjYW5fc2RhdGEtXFx1MDAzZXZpZi5ic3NfY29uZjtcXG4gXFx0XFx0fVxcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdGRscy5jIGIvbmV0L21hYzgwMjExL3RkbHMuY1xcbmluZGV4IGZmZDU3NWE4ZDE4OGYuLmE4OWM2NTY5YjljZjUgMTAwNjQ0XFxuLS0tIGEvbmV0L21hYzgwMjExL3RkbHMuY1xcbisrKyBiL25ldC9tYWM4MDIxMS90ZGxzLmNcXG5AQCAtMTA2Niw3ICsxMDY2LDcgQEAgaWVlZTgwMjExX3RkbHNfcHJlcF9tZ210X3BhY2tldChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHR9XFxuIFxcbiBcXHRpZiAoYWN0aW9uX2NvZGUgPT0gV0xBTl9QVUJfQUNUSU9OX1RETFNfRElTQ09WRVJfUkVTKSB7XFxuLVxcdFxcdGllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIDcsIGxpbmtfaWQpO1xcbitcXHRcXHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCBzdGEsIDcsIGxpbmtfaWQpO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3R4LmMgYi9uZXQvbWFjODAyMTEvdHguY1xcbmluZGV4IDBjZjVmNmVjNzVlNjcuLmYzZjlmMTI0ODFjNDAgMTAwNjQ0XFxuLS0tIGEvbmV0L21hYzgwMjExL3R4LmNcXG4rKysgYi9uZXQvbWFjODAyMTEvdHguY1xcbkBAIC02NDQxLDcgKzY0NDEsOCBAQCB2b2lkIGllZWU4MDIxMV91bnJlc2VydmVfdGlkKHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsIHU4IHRpZClcXG4gRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfdW5yZXNlcnZlX3RpZCk7XFxuIFxcbiB2b2lkIF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCB0aWQsIGludCBsaW5rX2lkLFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN0YV9pbmZvICpzdGEsXFxuK1xcdFxcdFxcdFxcdCBpbnQgdGlkLCBpbnQgbGlua19pZCxcXG4gXFx0XFx0XFx0XFx0IGVudW0gbmw4MDIxMV9iYW5kIGJhbmQpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9ICh2b2lkICopc2tiLVxcdTAwM2VkYXRhO1xcbkBAIC02NDkzLDEyICs2NDk0LDEzIEBAIHZvaWQgX19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbiBcXHQgKi9cXG4gXFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbiBcXHRJRUVFODAyMTFfU0tCX0NCKHNrYiktXFx1MDAzZWJhbmQgPSBiYW5kO1xcbi1cXHRpZWVlODAyMTFfeG1pdChzZGF0YSwgTlVMTCwgc2tiKTtcXG4rXFx0aWVlZTgwMjExX3htaXQoc2RhdGEsIHN0YSwgc2tiKTtcXG4gXFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuIH1cXG4gXFxuIHZvaWQgaWVlZTgwMjExX3R4X3NrYl90aWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLVxcdFxcdFxcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRpZCwgaW50IGxpbmtfaWQpXFxuK1xcdFxcdFxcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN0YV9pbmZvICpzdGEsXFxuK1xcdFxcdFxcdCAgaW50IHRpZCwgaW50IGxpbmtfaWQpXFxuIHtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNoYW5jdHhfY29uZjtcXG4gXFx0ZW51bSBubDgwMjExX2JhbmQgYmFuZDtcXG5AQCAtNjUyNCw3ICs2NTI2LDcgQEAgdm9pZCBpZWVlODAyMTFfdHhfc2tiX3RpZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0XFx0YmFuZCA9IDA7XFxuIFxcdH1cXG4gXFxuLVxcdF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzZGF0YSwgc2tiLCB0aWQsIGxpbmtfaWQsIGJhbmQpO1xcbitcXHRfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc2RhdGEsIHNrYiwgc3RhLCB0aWQsIGxpbmtfaWQsIGJhbmQpO1xcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmNcXG5pbmRleCA4YWRiZWY1ZjA0NDI1Li4wYWIyOTA3ZTY2ZjY4IDEwMDY0NFxcbi0tLSBhL25ldC93aXJlbGVzcy9ubDgwMjExLmNcXG4rKysgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXFxuQEAgLTEwOTYsNiArMTA5Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubDgwMjExX3BvbGljeVtOVU1fTkw4MDIxMV9BVFRSXSA9IHtcXG4gXFx0W05MODAyMTFfQVRUUl9OUENBX1BVTkNUX0JJVE1BUF0gPVxcbiBcXHRcXHROTEFfUE9MSUNZX0ZVTExfUkFOR0UoTkxBX1UzMiwgXFx1MDAyNm5sODAyMTFfcHVuY3RfYml0bWFwX3JhbmdlKSxcXG4gXFx0W05MODAyMTFfQVRUUl9TVEFfRFVNUF9MSU5LX1NUQVRTXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LFxcbitcXHRbTkw4MDIxMV9BVFRSX0ZSQU1FX0NNRF9OT19TVEFdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sXFxuIH07XFxuIFxcbiAvKiBwb2xpY3kgZm9yIHRoZSBrZXkgYXR0cmlidXRlcyAqL1xcbkBAIC0xNDg1OSw2ICsxNDg2MCw5IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV90eF9tZ210KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcdCAgICAhKHdkZXYtXFx1MDAzZXZhbGlkX2xpbmtzIFxcdTAwMjYgQklUKHBhcmFtcy5saW5rX2lkKSkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4rXFx0cGFyYW1zLm5vX3N0YSA9XFxuK1xcdFxcdG5sYV9nZXRfZmxhZyhpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfRlJBTUVfQ01EX05PX1NUQV0pO1xcbitcXG4gXFx0cGFyYW1zLmJ1ZiA9IG5sYV9kYXRhKGluZm8tXFx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9GUkFNRV0pO1xcbiBcXHRwYXJhbXMubGVuID0gbmxhX2xlbihpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfRlJBTUVdKTtcXG4gXFxuQEAgLTIyMDIwLDcgKzIyMDI0LDkgQEAgaW50IG5sODAyMTFfc2VuZF9tZ210KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcXG4gXFx0ICAgIChpbmZvLVxcdTAwM2VhY2tfdHN0YW1wIFxcdTAwMjZcXHUwMDI2IG5sYV9wdXRfdTY0XzY0Yml0KG1zZyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgTkw4MDIxMV9BVFRSX1RYX0hXX1RJTUVTVEFNUCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgaW5mby1cXHUwMDNlYWNrX3RzdGFtcCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgTkw4MDIxMV9BVFRSX1BBRCkpKVxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBOTDgwMjExX0FUVFJfUEFEKSkgfHxcXG4rXFx0ICAgIChpbmZvLVxcdTAwM2Vub19zdGEgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICBubGFfcHV0X2ZsYWcobXNnLCBOTDgwMjExX0FUVFJfRlJBTUVfQ01EX05PX1NUQSkpKVxcbiBcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gXFxuIFxcdGdlbmxtc2dfZW5kKG1zZywgaGRyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDQ6MzU6MjIuMDU3MDM0MTE1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTc5MjA0NjU4OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIk1BQzgwMjExX0hXU0lNXCIsXG4gICAgXCJDRkc4MDIxMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImllZWU4MDIxMV9yeF9saXN0XCIsXG4gICAgXCJpZWVlODAyMTFfcnhfbmFwaVwiLFxuICAgIFwiaWVlZTgwMjExX21nbXRfdHhcIixcbiAgICBcIm5sODAyMTFfdHhfbWdtdFwiLFxuICAgIFwibmw4MDIxMV9zZW5kX21nbXRcIixcbiAgICBcImllZWU4MDIxMV90eF9za2JfdGlkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1hYzgwMjExIFJYIHBhdGggdG8gaGFuZGxlIE1MTyAoTXVsdGktTGluayBPcGVyYXRpb24pIGxpbmsgSURzIG1vcmUgcm9idXN0bHksIHJlbW92aW5nIGBsaW5rX3ZhbGlkYCBhbmQgcGFzc2luZyBgbGlua19zdGFgIGRpcmVjdGx5LiBJdCBhbHNvIGFkZHMgYSBgbm9fc3RhYCBmbGFnIGZvciBtYW5hZ2VtZW50IGZyYW1lIFRYL1JYLiBUaGVzZSBhcmUgY29yZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gbWFjODAyMTEgYW5kIGNmZzgwMjExLCByZWFjaGFibGUgdmlhIG1hYzgwMjExX2h3c2ltIGFuZCBubDgwMjExIG5ldGxpbmsgaW50ZXJmYWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5ZTEyYWUzMTVmZWU1MGU3Y2Q2MDIyNjdlZTY1ZDdiOGJlNGIyNWI1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAwNDozNToyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZHBfcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZHBfcnguY1xuaW5kZXggMzM0MjU3MDdjMDg0Mi4uZmJiM2QxOGY1NWRkZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZHBfcnguY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kcF9yeC5jXG5AQCAtMjUwMCw3ICsyNTAwLDcgQEAgc3RhdGljIHZvaWQgYXRoMTFrX2RwX3J4X2RlbGl2ZXJfbXNkdShzdHJ1Y3QgYXRoMTFrICphciwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBcbiBcdCAgICAhKGlzX21jYmMgXHUwMDI2XHUwMDI2IHJ4X3N0YXR1cy1cdTAwM2VmbGFnIFx1MDAyNiBSWF9GTEFHX0RFQ1JZUFRFRCkpXG4gXHRcdHJ4X3N0YXR1cy1cdTAwM2VmbGFnIHw9IFJYX0ZMQUdfODAyMztcbiBcbi1cdGllZWU4MDIxMV9yeF9uYXBpKGFyLVx1MDAzZWh3LCBwdWJzdGEsIG1zZHUsIG5hcGkpO1xuK1x0aWVlZTgwMjExX3J4X25hcGkoYXItXHUwMDNlaHcsIHB1YnN0YSA/IFx1MDAyNnB1YnN0YS1cdTAwM2VkZWZsaW5rIDogTlVMTCwgbXNkdSwgbmFwaSk7XG4gfVxuIFxuIHN0YXRpYyBib29sIGF0aDExa19kcF9yeF9jaGVja19ud2lmaV9oZHJfbGVuX3ZhbGlkKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9tb24uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfbW9uLmNcbmluZGV4IDdkNWJlNzdiMDgxZjguLjFmYWYxODk2ZDBhYjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX21vbi5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX21vbi5jXG5AQCAtNTAzLDggKzUwMyw2IEBAIHZvaWQgYXRoMTJrX2RwX21vbl9yeF9kZWxpdmVyX21zZHUoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LFxuIFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cztcbiBcdHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGUgKmhlID0gTlVMTDtcbiBcbi1cdHN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkID0gMDtcbi1cbiBcdGlmICgoc3RhdHVzLVx1MDAzZWVuY29kaW5nID09IFJYX0VOQ19IRSkgXHUwMDI2XHUwMDI2ICEoc3RhdHVzLVx1MDAzZWZsYWcgXHUwMDI2IFJYX0ZMQUdfUkFESU9UQVBfSEUpIFx1MDAyNlx1MDAyNlxuIFx0ICAgICEoc3RhdHVzLVx1MDAzZWZsYWcgXHUwMDI2IFJYX0ZMQUdfU0tJUF9NT05JVE9SKSkge1xuIFx0XHRoZSA9IHNrYl9wdXNoKG1zZHUsIHNpemVvZihrbm93bikpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcnguY1xuaW5kZXggOGZhMGU5MGI0NTMxNi4uODQ3YWQyOGZkMzBiMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcnguY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9yeC5jXG5AQCAtMTM3NSw2ICsxMzc1LDcgQEAgdm9pZCBhdGgxMmtfZHBfcnhfZGVsaXZlcl9tc2R1KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwgc3RydWN0IG5hcGlfc3RydWNcbiBcdHN0cnVjdCBhdGgxMmtfZHAgKmRwID0gZHBfcGRldi1cdTAwM2VkcDtcbiBcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXM7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhO1xuK1x0c3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19wdWJzdGEgPSBOVUxMO1xuIFx0c3RydWN0IGF0aDEya19kcF9wZWVyICpwZWVyO1xuIFx0c3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYiA9IEFUSDEyS19TS0JfUlhDQihtc2R1KTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSByeF9pbmZvLVx1MDAzZXJ4X3N0YXR1cztcbkBAIC0xMzg0LDkgKzEzODUsMTkgQEAgdm9pZCBhdGgxMmtfZHBfcnhfZGVsaXZlcl9tc2R1KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwgc3RydWN0IG5hcGlfc3RydWNcbiBcbiBcdHB1YnN0YSA9IHBlZXIgPyBwZWVyLVx1MDAzZXN0YSA6IE5VTEw7XG4gXG4tXHRzdGF0dXMtXHUwMDNlbGlua192YWxpZCA9IDA7XG4tXHRpZiAocHVic3RhIFx1MDAyNlx1MDAyNiBwdWJzdGEtXHUwMDNldmFsaWRfbGlua3MpXG4tXHRcdGF0aDEya19od19zZXRfcnhfbGlua19pZChkcC1cdTAwM2Vod19wYXJhbXMsIHBlZXIsIHJ4Y2IsIHN0YXR1cyk7XG4rXHRpZiAocHVic3RhKSB7XG4rXHRcdGlmIChwdWJzdGEtXHUwMDNldmFsaWRfbGlua3MpIHtcbitcdFx0XHR1OCBsaW5rX2lkID1cbitcdFx0XHRcdGF0aDEya19od19nZXRfcnhfbGlua19pZChkcC1cdTAwM2Vod19wYXJhbXMsIHBlZXIsXG4rXHRcdFx0XHRcdFx0XHQgcnhjYiwgc3RhdHVzKTtcbitcbitcdFx0XHRpZiAobGlua19pZCBcdTAwM2UgMClcbitcdFx0XHRcdGxpbmtfcHVic3RhID1cbitcdFx0XHRcdFx0cmN1X2RlcmVmZXJlbmNlKHB1YnN0YS1cdTAwM2VsaW5rW2xpbmtfaWRdKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRsaW5rX3B1YnN0YSA9IFx1MDAyNnB1YnN0YS1cdTAwM2VkZWZsaW5rO1xuK1x0XHR9XG4rXHR9XG4gXG4gXHRhdGgxMmtfZGJnKGRwLVx1MDAzZWFiLCBBVEgxMktfREJHX0RBVEEsXG4gXHRcdCAgIFwicnggc2tiICVwIGxlbiAldSBwZWVyICVwTSAlZCAlcyBzbiAldSAlcyVzJXMlcyVzJXMlcyVzJXMlcyByYXRlX2lkeCAldSB2aHRfbnNzICV1IGZyZXEgJXUgYmFuZCAldSBmbGFnIDB4JXggZmNzLWVyciAlaSBtaWMtZXJyICVpIGFtc2R1LW1vcmUgJWlcXG5cIixcbkBAIC0xNDIyLDcgKzE0MzMsOCBAQCB2b2lkIGF0aDEya19kcF9yeF9kZWxpdmVyX21zZHUoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LCBzdHJ1Y3QgbmFwaV9zdHJ1Y1xuIFxuIFx0LyogVE9ETzogdHJhY2UgcnggcGFja2V0ICovXG4gXG4tXHRpZWVlODAyMTFfcnhfbmFwaShhdGgxMmtfcGRldl9kcF90b19odyhkcF9wZGV2KSwgcHVic3RhLCBtc2R1LCBuYXBpKTtcbitcdGllZWU4MDIxMV9yeF9uYXBpKGF0aDEya19wZGV2X2RwX3RvX2h3KGRwX3BkZXYpLCBsaW5rX3B1YnN0YSwgbXNkdSxcbitcdFx0XHQgIG5hcGkpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGF0aDEya19kcF9yeF9kZWxpdmVyX21zZHUpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaHcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaHcuaFxuaW5kZXggNDljZmQ1ZGZjNzBhNi4uMjY4ZjBhOGZkNDZkZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaHcuaFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9ody5oXG5AQCAtMjQ4LDkgKzI0OCw5IEBAIHN0cnVjdCBhdGgxMmtfaHdfb3BzIHtcbiBcdGJvb2wgKCpkcF9zcm5nX2lzX3R4X2NvbXBfcmluZykoaW50IHJpbmdfbnVtKTtcbiBcdGJvb2wgKCppc19mcmFtZV9saW5rX2Fnbm9zdGljKShzdHJ1Y3QgYXRoMTJrX2xpbmtfdmlmICphcnZpZixcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQpO1xuLVx0dm9pZCAoKnNldF9yeF9saW5rX2lkKShzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXG4tXHRcdFx0ICAgICAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsXG4tXHRcdFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpO1xuK1x0aW50ICgqZ2V0X3J4X2xpbmtfaWQpKHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcbitcdFx0XHQgICAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxuK1x0XHRcdCAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpO1xuIH07XG4gXG4gc3RhdGljIGlubGluZVxuQEAgLTI4MSwxMyArMjgxLDE1IEBAIHN0YXRpYyBpbmxpbmUgaW50IGF0aDEya19od19tYWNfaWRfdG9fc3JuZ19pZChjb25zdCBzdHJ1Y3QgYXRoMTJrX2h3X3BhcmFtcyAqaHcsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGF0aDEya19od19zZXRfcnhfbGlua19pZChjb25zdCBzdHJ1Y3QgYXRoMTJrX2h3X3BhcmFtcyAqaHcsXG4tXHRcdFx0XHRcdCAgICBzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXG4tXHRcdFx0XHRcdCAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxuLVx0XHRcdFx0XHQgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cylcbitzdGF0aWMgaW5saW5lIGludCBhdGgxMmtfaHdfZ2V0X3J4X2xpbmtfaWQoY29uc3Qgc3RydWN0IGF0aDEya19od19wYXJhbXMgKmh3LFxuK1x0XHRcdFx0XHQgICBzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXG4rXHRcdFx0XHRcdCAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsXG4rXHRcdFx0XHRcdCAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpXG4ge1xuLVx0aWYgKGh3LVx1MDAzZWh3X29wcy1cdTAwM2VzZXRfcnhfbGlua19pZClcbi1cdFx0aHctXHUwMDNlaHdfb3BzLVx1MDAzZXNldF9yeF9saW5rX2lkKGRwX3BlZXIsIHJ4Y2IsIHN0YXR1cyk7XG4rXHRpZiAoaHctXHUwMDNlaHdfb3BzLVx1MDAzZWdldF9yeF9saW5rX2lkKVxuK1x0XHRyZXR1cm4gaHctXHUwMDNlaHdfb3BzLVx1MDAzZWdldF9yeF9saW5rX2lkKGRwX3BlZXIsIHJ4Y2IsIHN0YXR1cyk7XG4rXG4rXHRyZXR1cm4gLTE7XG4gfVxuIFxuIHN0cnVjdCBhdGgxMmtfZndfaWUge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguY1xuaW5kZXggOTVkODdkZDY3ODcyZi4uOGI3MjJlZTBhZDhmYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5jXG5AQCAtMjMxNywxNyArMjMxNywxNiBAQCBhdGgxMmtfd2lmaTdfZHBfcnhkZXNjX21wZHVfdmFsaWQoc3RydWN0IGF0aDEya19iYXNlICphYixcbiBcdHJldHVybiB0bHZfdGFnID09IEhBTF9SWF9NUERVX1NUQVJUO1xuIH1cbiBcbi12b2lkXG4tYXRoMTJrX3dpZmk3X2RwX3J4X3NldF9saW5rX2lkX3FjbjkyNzQoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLFxuK2ludFxuK2F0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF9xY245Mjc0KHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpXG4ge1xuLVx0c3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQgPSAxO1xuLVx0c3RhdHVzLVx1MDAzZWxpbmtfaWQgPSBkcF9wZWVyLVx1MDAzZWh3X2xpbmtzW3J4Y2ItXHUwMDNlaHdfbGlua19pZF07XG4rXHRyZXR1cm4gZHBfcGVlci1cdTAwM2Vod19saW5rc1tyeGNiLVx1MDAzZWh3X2xpbmtfaWRdO1xuIH1cbiBcbi12b2lkXG4tYXRoMTJrX3dpZmk3X2RwX3J4X3NldF9saW5rX2lkX3djbjc4NTAoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLFxuK2ludFxuK2F0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF93Y243ODUwKHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpXG4ge1xuQEAgLTIzNDEsMTAgKzIzNDAsOSBAQCBhdGgxMmtfd2lmaTdfZHBfcnhfc2V0X2xpbmtfaWRfd2NuNzg1MChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXG4gXHRsaW5rc19tYXAgPSBSRUFEX09OQ0UoZHBfcGVlci1cdTAwM2VsaW5rX3BlZXJzX21hcCk7XG4gXHRmb3JfZWFjaF9zZXRfYml0KGksIFx1MDAyNmxpbmtzX21hcCwgQVRIMTJLX05VTV9NQVhfTElOS1MpIHtcbiBcdFx0bGlua19wZWVyID0gcmN1X2RlcmVmZXJlbmNlKGRwX3BlZXItXHUwMDNlbGlua19wZWVyc1tpXSk7XG4tXHRcdGlmIChsaW5rX3BlZXIgXHUwMDI2XHUwMDI2IGxpbmtfcGVlci1cdTAwM2VwZWVyX2lkID09IHJ4Y2ItXHUwMDNlcGVlcl9pZCkge1xuLVx0XHRcdHN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkID0gMTtcbi1cdFx0XHRzdGF0dXMtXHUwMDNlbGlua19pZCA9IGxpbmtfcGVlci1cdTAwM2VsaW5rX2lkO1xuLVx0XHRcdHJldHVybjtcbi1cdFx0fVxuK1x0XHRpZiAobGlua19wZWVyIFx1MDAyNlx1MDAyNiBsaW5rX3BlZXItXHUwMDNlcGVlcl9pZCA9PSByeGNiLVx1MDAzZXBlZXJfaWQpXG4rXHRcdFx0cmV0dXJuIGxpbmtfcGVlci1cdTAwM2VsaW5rX2lkO1xuIFx0fVxuK1xuK1x0cmV0dXJuIC0xO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmhcbmluZGV4IDFkM2E0Nzg4YTJkZDkuLmQ2ODQ4OWZmN2IwMzcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmhcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguaFxuQEAgLTU3LDEwICs1NywxMCBAQCBhdGgxMmtfd2lmaTdfZHBfcnhkZXNjX21wZHVfdmFsaWQoc3RydWN0IGF0aDEya19iYXNlICphYixcbiBcdFx0XHRcdCAgc3RydWN0IGhhbF9yeF9kZXNjICpyeF9kZXNjKTtcbiBpbnQgYXRoMTJrX3dpZmk3X2RwX3J4X3RpZF9kZWxldGVfaGFuZGxlcihzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBhdGgxMmtfZHBfcnhfdGlkX3J4cSAqcnhfdGlkKTtcbi12b2lkIGF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF9xY245Mjc0KHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcbi1cdFx0XHRcdFx0ICAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsXG4tXHRcdFx0XHRcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKTtcbi12b2lkIGF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF93Y243ODUwKHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcbi1cdFx0XHRcdFx0ICAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsXG4tXHRcdFx0XHRcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKTtcbitpbnQgYXRoMTJrX3dpZmk3X2RwX3J4X2dldF9saW5rX2lkX3FjbjkyNzQoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLFxuK1x0XHRcdFx0XHQgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxuK1x0XHRcdFx0XHQgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKTtcbitpbnQgYXRoMTJrX3dpZmk3X2RwX3J4X2dldF9saW5rX2lkX3djbjc4NTAoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLFxuK1x0XHRcdFx0XHQgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxuK1x0XHRcdFx0XHQgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2h3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2h3LmNcbmluZGV4IDRjMTExOWVkY2FlZGMuLjNjZDM1MTQ2NDI5NmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2h3LmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaHcuY1xuQEAgLTE1OCw3ICsxNTgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDEya19od19vcHMgcWNuOTI3NF9vcHMgPSB7XG4gXHQuZ2V0X3Jpbmdfc2VsZWN0b3IgPSBhdGgxMmtfd2lmaTdfaHdfZ2V0X3Jpbmdfc2VsZWN0b3JfcWNuOTI3NCxcbiBcdC5kcF9zcm5nX2lzX3R4X2NvbXBfcmluZyA9IGF0aDEya193aWZpN19kcF9zcm5nX2lzX2NvbXBfcmluZ19xY245Mjc0LFxuIFx0LmlzX2ZyYW1lX2xpbmtfYWdub3N0aWMgPSBhdGgxMmtfd2lmaTdfaXNfZnJhbWVfbGlua19hZ25vc3RpY19xY245Mjc0LFxuLVx0LnNldF9yeF9saW5rX2lkID0gYXRoMTJrX3dpZmk3X2RwX3J4X3NldF9saW5rX2lkX3FjbjkyNzQsXG4rXHQuZ2V0X3J4X2xpbmtfaWQgPSBhdGgxMmtfd2lmaTdfZHBfcnhfZ2V0X2xpbmtfaWRfcWNuOTI3NCxcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoMTJrX2h3X29wcyB3Y243ODUwX29wcyA9IHtcbkBAIC0xNjksNyArMTY5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfb3BzIHdjbjc4NTBfb3BzID0ge1xuIFx0LmdldF9yaW5nX3NlbGVjdG9yID0gYXRoMTJrX3dpZmk3X2h3X2dldF9yaW5nX3NlbGVjdG9yX3djbjc4NTAsXG4gXHQuZHBfc3JuZ19pc190eF9jb21wX3JpbmcgPSBhdGgxMmtfd2lmaTdfZHBfc3JuZ19pc19jb21wX3Jpbmdfd2NuNzg1MCxcbiBcdC5pc19mcmFtZV9saW5rX2Fnbm9zdGljID0gYXRoMTJrX3dpZmk3X2lzX2ZyYW1lX2xpbmtfYWdub3N0aWNfd2NuNzg1MCxcbi1cdC5zZXRfcnhfbGlua19pZCA9IGF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF93Y243ODUwLFxuK1x0LmdldF9yeF9saW5rX2lkID0gYXRoMTJrX3dpZmk3X2RwX3J4X2dldF9saW5rX2lkX3djbjc4NTAsXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDEya19od19vcHMgcWNjMjA3Ml9vcHMgPSB7XG5AQCAtMTgwLDcgKzE4MCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoMTJrX2h3X29wcyBxY2MyMDcyX29wcyA9IHtcbiBcdC5nZXRfcmluZ19zZWxlY3RvciA9IGF0aDEya193aWZpN19od19nZXRfcmluZ19zZWxlY3Rvcl93Y243ODUwLFxuIFx0LmRwX3NybmdfaXNfdHhfY29tcF9yaW5nID0gYXRoMTJrX3dpZmk3X2RwX3NybmdfaXNfY29tcF9yaW5nX3djbjc4NTAsXG4gXHQuaXNfZnJhbWVfbGlua19hZ25vc3RpYyA9IGF0aDEya193aWZpN19pc19mcmFtZV9saW5rX2Fnbm9zdGljX3djbjc4NTAsXG4tXHQuc2V0X3J4X2xpbmtfaWQgPSBhdGgxMmtfd2lmaTdfZHBfcnhfc2V0X2xpbmtfaWRfd2NuNzg1MCxcbitcdC5nZXRfcnhfbGlua19pZCA9IGF0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF93Y243ODUwLFxuIH07XG4gXG4gI2RlZmluZSBBVEgxMktfVFhfUklOR19NQVNLXzAgMHgxXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmNcbmluZGV4IDJiNzA3ZmZjMWEyMGYuLjVkNjJjNGM4NjFiYjkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jXG5AQCAtNzI2MCw3ICs3MjYwLDYgQEAgc3RhdGljIHZvaWQgYXRoMTJrX21nbXRfcnhfZXZlbnQoc3RydWN0IGF0aDEya19iYXNlICphYiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHN0cnVjdCBhdGgxMmtfd21pX21nbXRfcnhfYXJnIHJ4X2V2ID0ge307XG4gXHRzdHJ1Y3QgYXRoMTJrICphcjtcbiBcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcbi1cdHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEgPSBOVUxMO1xuIFx0c3RydWN0IGF0aDEya19kcF9saW5rX3BlZXIgKnBlZXI7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyO1xuIFx0Ym9vbCBpc180YWRkcl9udWxsX3BrdDtcbkBAIC03MzYyLDExICs3MzYxLDYgQEAgc3RhdGljIHZvaWQgYXRoMTJrX21nbXRfcnhfZXZlbnQoc3RydWN0IGF0aDEya19iYXNlICphYiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0XHRkZXZfa2ZyZWVfc2tiKHNrYik7XG4gXHRcdFx0Z290byBleGl0O1xuIFx0XHR9XG4tXHRcdHB1YnN0YSA9IHBlZXItXHUwMDNlc3RhO1xuLVx0XHRpZiAocHVic3RhIFx1MDAyNlx1MDAyNiBwdWJzdGEtXHUwMDNldmFsaWRfbGlua3MpIHtcbi1cdFx0XHRzdGF0dXMtXHUwMDNlbGlua192YWxpZCA9IDE7XG4tXHRcdFx0c3RhdHVzLVx1MDAzZWxpbmtfaWQgPSBwZWVyLVx1MDAzZWxpbmtfaWQ7XG4tXHRcdH1cbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2ZHAtXHUwMDNlZHBfbG9jayk7XG4gXHRcdGdvdG8gc2VuZF9yeDtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hZ2cuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FnZy5jXG5pbmRleCA5NjEwMmQyYWYyY2Y5Li5jNDVjNDczMzc1MDllIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYWdnLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FnZy5jXG5AQCAtNyw3ICs3LDggQEBcbiAjaW5jbHVkZSBcImhjbWQuaFwiXG4gXG4gc3RhdGljIHZvaWRcbi1pd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbitpd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMoc3RydWN0IGl3bF9tbGQgKm1sZCxcbitcdFx0XHQgICAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEsXG4gXHRcdFx0ICAgICAgIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbiBcdFx0XHQgICAgICAgc3RydWN0IGl3bF9tbGRfYmFpZF9kYXRhICpiYWlkX2RhdGEsXG4gXHRcdFx0ICAgICAgIHN0cnVjdCBpd2xfbWxkX3Jlb3JkZXJfYnVmZmVyICpyZW9yZGVyX2J1ZixcbkBAIC0zMiw3ICszMyw3IEBAIGl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxuIFx0XHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoc2tiX2xpc3QpKSkge1xuIFx0XHRcdGl3bF9tbGRfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEobWxkLCBuYXBpLCBza2IsXG4gXHRcdFx0XHRcdFx0XHRyZW9yZGVyX2J1Zi1cdTAwM2VxdWV1ZSxcbi1cdFx0XHRcdFx0XHRcdHN0YSk7XG4rXHRcdFx0XHRcdFx0XHRsaW5rX3N0YSk7XG4gXHRcdFx0cmVvcmRlcl9idWYtXHUwMDNlbnVtX3N0b3JlZC0tO1xuIFx0XHR9XG4gXHR9XG5AQCAtNzQsNyArNzUsNyBAQCBzdGF0aWMgdm9pZCBpd2xfbWxkX3JlbGVhc2VfZnJhbWVzX2Zyb21fbm90aWYoc3RydWN0IGl3bF9tbGQgKm1sZCxcbiBcbiBcdHJlb3JkZXJfYnVmID0gXHUwMDI2YmFfZGF0YS1cdTAwM2VyZW9yZGVyX2J1ZltxdWV1ZV07XG4gXG4tXHRpd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMobWxkLCBsaW5rX3N0YS1cdTAwM2VzdGEsIG5hcGksIGJhX2RhdGEsXG4rXHRpd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMobWxkLCBsaW5rX3N0YSwgbmFwaSwgYmFfZGF0YSxcbiBcdFx0XHRcdCAgICAgICByZW9yZGVyX2J1ZiwgbnNzbik7XG4gb3V0X3VubG9jazpcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuQEAgLTE4MCw3ICsxODEsNyBAQCB2b2lkIGl3bF9tbGRfZGVsX2JhKHN0cnVjdCBpd2xfbWxkICptbGQsIGludCBxdWV1ZSxcbiBcdHJlb3JkZXJfYnVmID0gXHUwMDI2YmFfZGF0YS1cdTAwM2VyZW9yZGVyX2J1ZltxdWV1ZV07XG4gXG4gXHQvKiByZWxlYXNlIGFsbCBmcmFtZXMgdGhhdCBhcmUgaW4gdGhlIHJlb3JkZXIgYnVmZmVyIHRvIHRoZSBzdGFjayAqL1xuLVx0aXdsX21sZF9yZW9yZGVyX3JlbGVhc2VfZnJhbWVzKG1sZCwgbGlua19zdGEtXHUwMDNlc3RhLCBOVUxMLFxuK1x0aXdsX21sZF9yZW9yZGVyX3JlbGVhc2VfZnJhbWVzKG1sZCwgbGlua19zdGEsIE5VTEwsXG4gXHRcdFx0XHQgICAgICAgYmFfZGF0YSwgcmVvcmRlcl9idWYsXG4gXHRcdFx0XHQgICAgICAgaWVlZTgwMjExX3NuX2FkZChyZW9yZGVyX2J1Zi1cdTAwM2VoZWFkX3NuLFxuIFx0XHRcdFx0XHRcdFx0YmFfZGF0YS1cdTAwM2VidWZfc2l6ZSkpO1xuQEAgLTE5Myw3ICsxOTQsNyBAQCB2b2lkIGl3bF9tbGRfZGVsX2JhKHN0cnVjdCBpd2xfbWxkICptbGQsIGludCBxdWV1ZSxcbiAgKi9cbiBlbnVtIGl3bF9tbGRfcmVvcmRlcl9yZXN1bHRcbiBpd2xfbWxkX3Jlb3JkZXIoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuLVx0XHRpbnQgcXVldWUsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXG4rXHRcdGludCBxdWV1ZSwgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEsXG4gXHRcdHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpd2xfcnhfbXBkdV9kZXNjICpkZXNjKVxuIHtcbiBcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAodm9pZCAqKXNrYl9tYWNfaGVhZGVyKHNrYik7XG5AQCAtMjI4LDEyICsyMjksMTIgQEAgaXdsX21sZF9yZW9yZGVyKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbiBcdFx0cmV0dXJuIElXTF9NTERfUEFTU19TS0I7XG4gXG4gXHQvKiBubyBzdGEgeWV0ICovXG4tXHRpZiAoSVdMX0ZXX0NIRUNLKG1sZCwgIXN0YSxcbitcdGlmIChJV0xfRldfQ0hFQ0sobWxkLCAhbGlua19zdGEsXG4gXHRcdFx0IFwiR290IHZhbGlkIEJBSUQgd2l0aG91dCBhIHZhbGlkIHN0YXRpb24gYXNzaWduZWQgLSAlZFxcblwiLFxuIFx0XHRcdCBiYWlkKSlcbiBcdFx0cmV0dXJuIElXTF9NTERfUEFTU19TS0I7XG4gXG4tXHRtbGRfc3RhID0gaXdsX21sZF9zdGFfZnJvbV9tYWM4MDIxMShzdGEpO1xuK1x0bWxkX3N0YSA9IGl3bF9tbGRfc3RhX2Zyb21fbWFjODAyMTEobGlua19zdGEtXHUwMDNlc3RhKTtcbiBcbiBcdC8qIG5vdCBhIGRhdGEgcGFja2V0ICovXG4gXHRpZiAoIWllZWU4MDIxMV9pc19kYXRhX3FvcyhoZHItXHUwMDNlZnJhbWVfY29udHJvbCkgfHxcbkBAIC0zMjQsNyArMzI1LDcgQEAgaXdsX21sZF9yZW9yZGVyKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbiBcdCAqIHdpbGwgYmUgcmVsZWFzZWQgd2hlbiB0aGUgZnJhbWUgcmVsZWFzZSBub3RpZmljYXRpb24gYXJyaXZlcy5cbiBcdCAqL1xuIFx0aWYgKCFhbXNkdSB8fCBsYXN0X3N1YmZyYW1lKVxuLVx0XHRpd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMobWxkLCBzdGEsIG5hcGksIGJhaWRfZGF0YSxcbitcdFx0aXdsX21sZF9yZW9yZGVyX3JlbGVhc2VfZnJhbWVzKG1sZCwgbGlua19zdGEsIG5hcGksIGJhaWRfZGF0YSxcbiBcdFx0XHRcdFx0ICAgICAgIGJ1ZmZlciwgbnNzbik7XG4gXHRlbHNlIGlmIChidWZmZXItXHUwMDNlbnVtX3N0b3JlZCA9PSAxKVxuIFx0XHRidWZmZXItXHUwMDNlaGVhZF9zbiA9IG5zc247XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYWdnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hZ2cuaFxuaW5kZXggNjUxYzgwZDFjN2NkYS4uYzZjZDVmYTIxOWJlZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FnZy5oXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hZ2cuaFxuQEAgLTEsNiArMSw2IEBAXG4gLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgQlNELTMtQ2xhdXNlICovXG4gLypcbi0gKiBDb3B5cmlnaHQgKEMpIDIwMjQgSW50ZWwgQ29ycG9yYXRpb25cbisgKiBDb3B5cmlnaHQgKEMpIDIwMjQsIDIwMjYgSW50ZWwgQ29ycG9yYXRpb25cbiAgKi9cbiAjaWZuZGVmIF9faXdsX2FnZ19oX19cbiAjZGVmaW5lIF9faXdsX2FnZ19oX19cbkBAIC0xMDYsNyArMTA2LDcgQEAgaW50IGl3bF9tbGRfYW1wZHVfcnhfc3RvcChzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxuIFxuIGVudW0gaXdsX21sZF9yZW9yZGVyX3Jlc3VsdFxuIGl3bF9tbGRfcmVvcmRlcihzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4tXHRcdGludCBxdWV1ZSwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbitcdFx0aW50IHF1ZXVlLCBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSxcbiBcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGl3bF9yeF9tcGR1X2Rlc2MgKmRlc2MpO1xuIFxuIHZvaWQgaXdsX21sZF9oYW5kbGVfZnJhbWVfcmVsZWFzZV9ub3RpZihzdHJ1Y3QgaXdsX21sZCAqbWxkLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5jXG5pbmRleCAyNjk0MzlkNzg5ZjQ2Li4wMmJkZjZjY2JjZGM5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguY1xuQEAgLTQ3LDcgKzQ3LDggQEAgaXdsX21sZF9maWxsX3BoeV9kYXRhX2Zyb21fbXBkdShzdHJ1Y3QgaXdsX21sZCAqbWxkLFxuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGludCBpd2xfbWxkX2NoZWNrX3BuKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0XHQgICBpbnQgcXVldWUsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpXG4rXHRcdFx0XHQgICBpbnQgcXVldWUsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSlcbiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKilza2JfbWFjX2hlYWRlcihza2IpO1xuIFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXRzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG5AQCAtNzEsMTMgKzcyLDEzIEBAIHN0YXRpYyBpbmxpbmUgaW50IGl3bF9tbGRfY2hlY2tfcG4oc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHQvKiBpZiB3ZSBhcmUgaGVyZSAtIHRoaXMgZm9yIHN1cmUgaXMgZWl0aGVyIENDTVAgb3IgR0NNUCAqL1xuLVx0aWYgKCFzdGEpIHtcbitcdGlmICghbGlua19zdGEpIHtcbiBcdFx0SVdMX0RFQlVHX0RST1AobWxkLFxuIFx0XHRcdCAgICAgICBcImV4cGVjdGVkIGh3LWRlY3J5cHRlZCB1bmljYXN0IGZyYW1lIGZvciBzdGF0aW9uXFxuXCIpO1xuIFx0XHRyZXR1cm4gLTE7XG4gXHR9XG4gXG4tXHRtbGRfc3RhID0gaXdsX21sZF9zdGFfZnJvbV9tYWM4MDIxMShzdGEpO1xuK1x0bWxkX3N0YSA9IGl3bF9tbGRfc3RhX2Zyb21fbWFjODAyMTEobGlua19zdGEtXHUwMDNlc3RhKTtcbiBcbiBcdGV4dGl2ID0gKHU4ICopaGRyICsgaWVlZTgwMjExX2hkcmxlbihoZHItXHUwMDNlZnJhbWVfY29udHJvbCk7XG4gXHRrZXlpZHggPSBleHRpdlszXSBcdTAwM2VcdTAwM2UgNjtcbkBAIC0xMTksMTcgKzEyMCwxNyBAQCBzdGF0aWMgaW5saW5lIGludCBpd2xfbWxkX2NoZWNrX3BuKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBza19idWZmICpza2IsXG4gdm9pZCBpd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKHN0cnVjdCBpd2xfbWxkICptbGQsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbiBcdFx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHF1ZXVlLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKVxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSlcbiB7XG4gXHRLVU5JVF9TVEFUSUNfU1RVQl9SRURJUkVDVChpd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExLFxuLVx0XHRcdFx0ICAgbWxkLCBuYXBpLCBza2IsIHF1ZXVlLCBzdGEpO1xuK1x0XHRcdFx0ICAgbWxkLCBuYXBpLCBza2IsIHF1ZXVlLCBsaW5rX3N0YSk7XG4gXG4tXHRpZiAodW5saWtlbHkoaXdsX21sZF9jaGVja19wbihtbGQsIHNrYiwgcXVldWUsIHN0YSkpKSB7XG4rXHRpZiAodW5saWtlbHkoaXdsX21sZF9jaGVja19wbihtbGQsIHNrYiwgcXVldWUsIGxpbmtfc3RhKSkpIHtcbiBcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdGllZWU4MDIxMV9yeF9uYXBpKG1sZC1cdTAwM2Vodywgc3RhLCBza2IsIG5hcGkpO1xuK1x0aWVlZTgwMjExX3J4X25hcGkobWxkLVx1MDAzZWh3LCBsaW5rX3N0YSwgc2tiLCBuYXBpKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9JRl9JV0xXSUZJX0tVTklUKGl3bF9tbGRfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEpO1xuIFxuQEAgLTE3MjgsNyArMTcyOSw3IEBAIHN0YXRpYyB2b2lkIGl3bF9tbGRfdXBkYXRlX2xhc3RfcnhfdGltZXN0YW1wKHN0cnVjdCBpd2xfbWxkICptbGQsIHU4IGJhaWQpXG4gICogU2V0cyAqZHJvcCB0byB0cnVlIGlmIHRoZSBwYWNrZXQgc2hvdWxkIGJlIGRyb3BwZWQuXG4gICogUmV0dXJucyB0aGUgc3RhdGlvbiBpZiBmb3VuZCwgb3IgTlVMTCBvdGhlcndpc2UuXG4gICovXG4tc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfc3RhICpcbitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqXG4gaXdsX21sZF9yeF93aXRoX3N0YShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLFxuIFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0ICAgIGNvbnN0IHN0cnVjdCBpd2xfcnhfbXBkdV9kZXNjICptcGR1X2Rlc2MsXG5AQCAtMTc2NCwxMSArMTc2NSw2IEBAIGl3bF9tbGRfcnhfd2l0aF9zdGEoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcixcbiBcbiBcdHJ4X3N0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpO1xuIFxuLVx0aWYgKGxpbmtfc3RhIFx1MDAyNlx1MDAyNiBzdGEtXHUwMDNldmFsaWRfbGlua3MpIHtcbi1cdFx0cnhfc3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQgPSB0cnVlO1xuLVx0XHRyeF9zdGF0dXMtXHUwMDNlbGlua19pZCA9IGxpbmtfc3RhLVx1MDAzZWxpbmtfaWQ7XG4tXHR9XG4tXG4gXHQvKiBmaWxsIGNoZWNrc3VtICovXG4gXHRpZiAoaWVlZTgwMjExX2lzX2RhdGEoaGRyLVx1MDAzZWZyYW1lX2NvbnRyb2wpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHBrdC1cdTAwM2VsZW5fbl9mbGFncyBcdTAwMjYgY3B1X3RvX2xlMzIoRkhfUlNDU1JfUlBBX0VOKSkge1xuQEAgLTE4MDMsMTAgKzE3OTksMTAgQEAgaXdsX21sZF9yeF93aXRoX3N0YShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLFxuIFx0XHRcdFx0XHRcdFx0ICAgIHF1ZXVlKTtcbiBcdH1cbiBcbi1cdHJldHVybiBzdGE7XG4rXHRyZXR1cm4gbGlua19zdGE7XG4gfVxuIFxuLXN0YXRpYyBpbnQgaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbitzdGF0aWMgaW50IGl3bF9tbGRfcnhfbWdtdF9wcm90KHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhLFxuIFx0XHRcdFx0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcixcbiBcdFx0XHRcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMsXG4gXHRcdFx0XHR1MzIgbXBkdV9zdGF0dXMsXG5AQCAtMTgyMCw3ICsxODE2LDYgQEAgc3RhdGljIGludCBpd2xfbWxkX3J4X21nbXRfcHJvdChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxuIFx0c3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5O1xuIFx0Y29uc3QgdTggKmZyYW1lID0gKHZvaWQgKiloZHI7XG4gXHRjb25zdCB1OCAqbW1pZTtcbi1cdHU4IGxpbmtfaWQ7XG4gXG4gXHRpZiAoKG1wZHVfc3RhdHVzIFx1MDAyNiBJV0xfUlhfTVBEVV9TVEFUVVNfU0VDX01BU0spID09XG4gXHQgICAgIElXTF9SWF9NUERVX1NUQVRVU19TRUNfTk9ORSlcbkBAIC0xODM2LDEwICsxODMxLDEwIEBAIHN0YXRpYyBpbnQgaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbiBcdGlmICghaWVlZTgwMjExX2lzX2JlYWNvbihoZHItXHUwMDNlZnJhbWVfY29udHJvbCkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWYgKCFzdGEpXG4rXHRpZiAoIWxpbmtfc3RhKVxuIFx0XHRyZXR1cm4gLTE7XG4gXG4tXHRtbGRfc3RhID0gaXdsX21sZF9zdGFfZnJvbV9tYWM4MDIxMShzdGEpO1xuK1x0bWxkX3N0YSA9IGl3bF9tbGRfc3RhX2Zyb21fbWFjODAyMTEobGlua19zdGEtXHUwMDNlc3RhKTtcbiBcdG1sZF92aWYgPSBpd2xfbWxkX3ZpZl9mcm9tX21hYzgwMjExKG1sZF9zdGEtXHUwMDNldmlmKTtcbiBcbiBcdC8qIGtleSBtaXNtYXRjaCAtIHdpbGwgYWxzbyByZXBvcnQgIU1JQ19PSyBidXQgd2Ugc2hvdWxkbid0IGNvdW50IGl0ICovXG5AQCAtMTg1Myw4ICsxODQ4LDcgQEAgc3RhdGljIGludCBpd2xfbWxkX3J4X21nbXRfcHJvdChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbi1cdGxpbmtfaWQgPSByeF9zdGF0dXMtXHUwMDNlbGlua192YWxpZCA/IHJ4X3N0YXR1cy1cdTAwM2VsaW5rX2lkIDogMDtcbi1cdGxpbmsgPSByY3VfZGVyZWZlcmVuY2UobWxkX3ZpZi1cdTAwM2VsaW5rW2xpbmtfaWRdKTtcbitcdGxpbmsgPSByY3VfZGVyZWZlcmVuY2UobWxkX3ZpZi1cdTAwM2VsaW5rW2xpbmtfc3RhLVx1MDAzZWxpbmtfaWRdKTtcbiBcdGlmIChXQVJOX09OX09OQ0UoIWxpbmspKVxuIFx0XHRyZXR1cm4gLTE7XG4gXG5AQCAtMTkwNSw3ICsxODk5LDcgQEAgc3RhdGljIGludCBpd2xfbWxkX3J4X21nbXRfcHJvdChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxuIH1cbiBcbiBzdGF0aWMgaW50IGl3bF9tbGRfcnhfY3J5cHRvKHN0cnVjdCBpd2xfbWxkICptbGQsXG4tXHRcdFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxuK1x0XHRcdCAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLFxuIFx0XHRcdCAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cyxcbiBcdFx0XHQgICAgIHN0cnVjdCBpd2xfcnhfbXBkdV9kZXNjICpkZXNjLCBpbnQgcXVldWUsXG5AQCAtMTkxNSw3ICsxOTA5LDcgQEAgc3RhdGljIGludCBpd2xfbWxkX3J4X2NyeXB0byhzdHJ1Y3QgaXdsX21sZCAqbWxkLFxuIFxuIFx0aWYgKHVubGlrZWx5KGllZWU4MDIxMV9pc19tZ210KGhkci1cdTAwM2VmcmFtZV9jb250cm9sKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICAhaWVlZTgwMjExX2hhc19wcm90ZWN0ZWQoaGRyLVx1MDAzZWZyYW1lX2NvbnRyb2wpKSlcbi1cdFx0cmV0dXJuIGl3bF9tbGRfcnhfbWdtdF9wcm90KHN0YSwgaGRyLCByeF9zdGF0dXMsIHN0YXR1cyxcbitcdFx0cmV0dXJuIGl3bF9tbGRfcnhfbWdtdF9wcm90KGxpbmtfc3RhLCBoZHIsIHJ4X3N0YXR1cywgc3RhdHVzLFxuIFx0XHRcdFx0XHQgICAgbGUxNl90b19jcHUoZGVzYy1cdTAwM2VtcGR1X2xlbikpO1xuIFxuIFx0aWYgKCFpZWVlODAyMTFfaGFzX3Byb3RlY3RlZChoZHItXHUwMDNlZnJhbWVfY29udHJvbCkgfHxcbkBAIC0yMDIzLDcgKzIwMTcsNyBAQCB2b2lkIGl3bF9tbGRfcnhfbXBkdShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHRzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gcnhiX2FkZHIocnhiKTtcbiBcdHN0cnVjdCBpd2xfbWxkX3J4X3BoeV9kYXRhIHBoeV9kYXRhID0ge307XG4gXHRzdHJ1Y3QgaXdsX3J4X21wZHVfZGVzYyAqbXBkdV9kZXNjID0gKHZvaWQgKilwa3QtXHUwMDNlZGF0YTtcbi1cdHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGE7XG4rXHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFx0c2l6ZV90IG1wZHVfZGVzY19zaXplID0gc2l6ZW9mKCptcGR1X2Rlc2MpO1xuQEAgLTIwODYsNyArMjA4MCw4IEBAIHZvaWQgaXdsX21sZF9yeF9tcGR1KHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcbi1cdHN0YSA9IGl3bF9tbGRfcnhfd2l0aF9zdGEobWxkLCBoZHIsIHNrYiwgbXBkdV9kZXNjLCBwa3QsIHF1ZXVlLCBcdTAwMjZkcm9wKTtcbitcdGxpbmtfc3RhID0gaXdsX21sZF9yeF93aXRoX3N0YShtbGQsIGhkciwgc2tiLCBtcGR1X2Rlc2MsIHBrdCwgcXVldWUsXG4rXHRcdFx0XHQgICAgICAgXHUwMDI2ZHJvcCk7XG4gXHRpZiAoZHJvcClcbiBcdFx0Z290byBkcm9wO1xuIFxuQEAgLTIxMjcsNyArMjEyMiw3IEBAIHZvaWQgaXdsX21sZF9yeF9tcGR1KHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbiBcbiBcdGl3bF9tbGRfcnhfZmlsbF9zdGF0dXMobWxkLCBsaW5rX2lkLCBoZHIsIHNrYiwgXHUwMDI2cGh5X2RhdGEpO1xuIFxuLVx0aWYgKGl3bF9tbGRfcnhfY3J5cHRvKG1sZCwgc3RhLCBoZHIsIHJ4X3N0YXR1cywgbXBkdV9kZXNjLCBxdWV1ZSxcbitcdGlmIChpd2xfbWxkX3J4X2NyeXB0byhtbGQsIGxpbmtfc3RhLCBoZHIsIHJ4X3N0YXR1cywgbXBkdV9kZXNjLCBxdWV1ZSxcbiBcdFx0XHQgICAgICBsZTMyX3RvX2NwdShwa3QtXHUwMDNlbGVuX25fZmxhZ3MpLCBcdTAwMjZjcnlwdG9fbGVuKSlcbiBcdFx0Z290byBkcm9wO1xuIFxuQEAgLTIxNDAsNyArMjEzNSw4IEBAIHZvaWQgaXdsX21sZF9yeF9tcGR1KHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbiBcdGlmIChpd2xfbWxkX3RpbWVfc3luY19mcmFtZShtbGQsIHNrYiwgaGRyLVx1MDAzZWFkZHIyKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRyZW9yZGVyX3JlcyA9IGl3bF9tbGRfcmVvcmRlcihtbGQsIG5hcGksIHF1ZXVlLCBzdGEsIHNrYiwgbXBkdV9kZXNjKTtcbitcdHJlb3JkZXJfcmVzID0gaXdsX21sZF9yZW9yZGVyKG1sZCwgbmFwaSwgcXVldWUsIGxpbmtfc3RhLCBza2IsXG4rXHRcdFx0XHQgICAgICBtcGR1X2Rlc2MpO1xuIFx0c3dpdGNoIChyZW9yZGVyX3Jlcykge1xuIFx0Y2FzZSBJV0xfTUxEX1BBU1NfU0tCOlxuIFx0XHRicmVhaztcbkBAIC0yMTUzLDcgKzIxNDksNyBAQCB2b2lkIGl3bF9tbGRfcnhfbXBkdShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHRcdGdvdG8gZHJvcDtcbiBcdH1cbiBcbi1cdGl3bF9tbGRfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEobWxkLCBuYXBpLCBza2IsIHF1ZXVlLCBzdGEpO1xuK1x0aXdsX21sZF9wYXNzX3BhY2tldF90b19tYWM4MDIxMShtbGQsIG5hcGksIHNrYiwgcXVldWUsIGxpbmtfc3RhKTtcbiBcbiBcdGdvdG8gb3V0O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5oXG5pbmRleCA1NzNiODljM2M5YzYxLi5iMDhjNWFkZTNkYjhmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguaFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguaFxuQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBpd2xfbWxkX2hhbmRsZV9yc2Nfbm90aWYoc3RydWN0IGl3bF9tbGQgKm1sZCxcbiB2b2lkIGl3bF9tbGRfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEoc3RydWN0IGl3bF9tbGQgKm1sZCxcbiBcdFx0XHRcdCAgICAgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcXVldWUsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpO1xuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSk7XG4gXG4gdm9pZCBpd2xfbWxkX2hhbmRsZV9waHlfYWlyX3NuaWZmZXJfbm90aWYoc3RydWN0IGl3bF9tbGQgKm1sZCxcbiBcdFx0XHRcdFx0ICBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvdGVzdHMvYWdnLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC90ZXN0cy9hZ2cuY1xuaW5kZXggMjliMDI0OGNlYzNkZi4uZTllZmUyOTk2ZjA3MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3Rlc3RzL2FnZy5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC90ZXN0cy9hZ2cuY1xuQEAgLTIsNyArMiw3IEBAXG4gLypcbiAgKiBLVW5pdCB0ZXN0cyBmb3IgY2hhbm5lbCBoZWxwZXIgZnVuY3Rpb25zXG4gICpcbi0gKiBDb3B5cmlnaHQgKEMpIDIwMjQtMjAyNSBJbnRlbCBDb3Jwb3JhdGlvblxuKyAqIENvcHlyaWdodCAoQykgMjAyNC0yMDI2IEludGVsIENvcnBvcmF0aW9uXG4gICovXG4gI2luY2x1ZGUgXHUwMDNja3VuaXQvdGVzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNja3VuaXQvc3RhdGljX3N0dWIuaFx1MDAzZVxuQEAgLTQ0MSw3ICs0NDEsNyBAQCBzdGF0aWMgdm9pZFxuIGZha2VfaXdsX21sZF9wYXNzX3BhY2tldF90b19tYWM4MDIxMShzdHJ1Y3QgaXdsX21sZCAqbWxkLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBxdWV1ZSxcbi1cdFx0XHRcdCAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSlcbitcdFx0XHRcdCAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEpXG4ge1xuIFx0X19za2JfcXVldWVfdGFpbChcdTAwMjZnX3JlbGVhc2VkX3NrYnMsIHNrYik7XG4gXHRnX251bV9yZWxlYXNlZF9za2JzKys7XG5AQCAtNjMwLDcgKzYzMCw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfcmVvcmRlcl9idWZmZXIoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0bXBkdV9kZXNjID0gc2V0dXBfbXBkdV9kZXNjKCk7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRyZW9yZGVyX3JlcyA9IGl3bF9tbGRfcmVvcmRlcihtbGQsIE5VTEwsIFFVRVVFLCBzdGEsIHNrYiwgbXBkdV9kZXNjKTtcbitcdHJlb3JkZXJfcmVzID0gaXdsX21sZF9yZW9yZGVyKG1sZCwgTlVMTCwgUVVFVUUsIFx1MDAyNnN0YS1cdTAwM2VkZWZsaW5rLCBza2IsXG4rXHRcdFx0XHQgICAgICBtcGR1X2Rlc2MpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmVvcmRlcl9yZXMsIHBhcmFtLVx1MDAzZWV4cGVjdGVkLnJlb3JkZXJfcmVzKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnguY1xuaW5kZXggYWIxZWIyZWIwYzNjZC4uOGMxOTdhMDkwYzJiMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4LmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4LmNcbkBAIC05MCw3ICs5MCw3IEBAIHN0YXRpYyB2b2lkIGl3bF9tdm1fcGFzc19wYWNrZXRfdG9fbWFjODAyMTEoc3RydWN0IGl3bF9tdm0gKm12bSxcbiBcdFx0XHRcdGZyYWdsZW4sIHJ4Yi1cdTAwM2V0cnVlc2l6ZSk7XG4gXHR9XG4gXG4tXHRpZWVlODAyMTFfcnhfbmFwaShtdm0tXHUwMDNlaHcsIHN0YSwgc2tiLCBuYXBpKTtcbitcdGllZWU4MDIxMV9yeF9uYXBpKG12bS1cdTAwM2Vodywgc3RhID8gXHUwMDI2c3RhLVx1MDAzZWRlZmxpbmsgOiBOVUxMLCBza2IsIG5hcGkpO1xuIH1cbiBcbiAvKlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4bXEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4bXEuY1xuaW5kZXggN2YwYjRmNWRhYTIxNC4uOGM0MDA5ZDNhMDBjYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4bXEuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnhtcS5jXG5AQCAtMSw2ICsxLDYgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBCU0QtMy1DbGF1c2VcbiAvKlxuLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE0LCAyMDE4LTIwMjUgSW50ZWwgQ29ycG9yYXRpb25cbisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCwgMjAxOC0yMDI2IEludGVsIENvcnBvcmF0aW9uXG4gICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgSW50ZWwgTW9iaWxlIENvbW11bmljYXRpb25zIEdtYkhcbiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBJbnRlbCBEZXV0c2NobGFuZCBHbWJIXG4gICovXG5AQCAtMjQzLDcgKzI0Myw3IEBAIHN0YXRpYyB2b2lkIGl3bF9tdm1fcGFzc19wYWNrZXRfdG9fbWFjODAyMTEoc3RydWN0IGl3bF9tdm0gKm12bSxcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0aWVlZTgwMjExX3J4X25hcGkobXZtLVx1MDAzZWh3LCBzdGEsIHNrYiwgbmFwaSk7XG4rXHRpZWVlODAyMTFfcnhfbmFwaShtdm0tXHUwMDNlaHcsIHN0YSA/IFx1MDAyNnN0YS1cdTAwM2VkZWZsaW5rIDogTlVMTCwgc2tiLCBuYXBpKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgaXdsX212bV91c2VkX2F2ZXJhZ2VfZW5lcmd5KHN0cnVjdCBpd2xfbXZtICptdm0sXG5AQCAtMjUyOCw3ICsyNTI4LDcgQEAgdm9pZCBpd2xfbXZtX3J4X21vbml0b3Jfbm9fZGF0YShzdHJ1Y3QgaXdsX212bSAqbXZtLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHR9XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRpZWVlODAyMTFfcnhfbmFwaShtdm0tXHUwMDNlaHcsIHN0YSwgc2tiLCBuYXBpKTtcbitcdGllZWU4MDIxMV9yeF9uYXBpKG12bS1cdTAwM2Vodywgc3RhID8gXHUwMDI2c3RhLVx1MDAzZWRlZmxpbmsgOiBOVUxMLCBza2IsIG5hcGkpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbWFjODAyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbWFjODAyMTEuY1xuaW5kZXggMTNjNGU4YWJlMjgxOS4uZDVhNDdhYjI5ZjU4NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbWFjODAyMTEuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tYWM4MDIxMS5jXG5AQCAtMTIzOSw3ICsxMjM5LDcgQEAgRVhQT1JUX1NZTUJPTChtdDc2X3J4X3NpZ25hbCk7XG4gc3RhdGljIHZvaWRcbiBtdDc2X3J4X2NvbnZlcnQoc3RydWN0IG10NzZfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHN0cnVjdCBpZWVlODAyMTFfaHcgKipodyxcbi1cdFx0c3RydWN0IGllZWU4MDIxMV9zdGEgKipzdGEpXG4rXHRcdHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKipsaW5rX3N0YSlcbiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gbXQ3Nl9za2JfZ2V0X2hkcihza2IpO1xuQEAgLTEyODYsMTEgKzEyODYsMTUgQEAgbXQ3Nl9yeF9jb252ZXJ0KHN0cnVjdCBtdDc2X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0ICAgICAgIHNpemVvZihtc3RhdC5jaGFpbl9zaWduYWwpKTtcbiBcbiBcdGlmIChtc3RhdC53Y2lkKSB7XG4tXHRcdHN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkID0gbXN0YXQud2NpZC1cdTAwM2VsaW5rX3ZhbGlkO1xuLVx0XHRzdGF0dXMtXHUwMDNlbGlua19pZCA9IG1zdGF0LndjaWQtXHUwMDNlbGlua19pZDtcbitcdFx0c3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSA9IHdjaWRfdG9fc3RhKG1zdGF0LndjaWQpO1xuK1xuK1x0XHRpZiAobXN0YXQud2NpZC1cdTAwM2VsaW5rX3ZhbGlkKVxuK1x0XHRcdCpsaW5rX3N0YSA9XG4rXHRcdFx0XHRyY3VfZGVyZWZlcmVuY2Uoc3RhLVx1MDAzZWxpbmtbbXN0YXQud2NpZC1cdTAwM2VsaW5rX2lkXSk7XG4rXHRcdGVsc2VcbitcdFx0XHQqbGlua19zdGEgPSBcdTAwMjZzdGEtXHUwMDNlZGVmbGluaztcbiBcdH1cbiBcbi1cdCpzdGEgPSB3Y2lkX3RvX3N0YShtc3RhdC53Y2lkKTtcbiBcdCpodyA9IG10NzZfcGh5X2h3KGRldiwgbXN0YXQucGh5X2lkeCk7XG4gfVxuIFxuQEAgLTE1MTQsNyArMTUxOCw3IEBAIG10NzZfY2hlY2tfc3RhKHN0cnVjdCBtdDc2X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHZvaWQgbXQ3Nl9yeF9jb21wbGV0ZShzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqZnJhbWVzLFxuIFx0XHQgICAgICBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXG4ge1xuLVx0c3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTtcbitcdHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhO1xuIFx0c3RydWN0IGllZWU4MDIxMV9odyAqaHc7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqdG1wO1xuIFx0TElTVF9IRUFEKGxpc3QpO1xuQEAgLTE1MjUsOCArMTUyOSw4IEBAIHZvaWQgbXQ3Nl9yeF9jb21wbGV0ZShzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqZnJhbWVzLFxuIFxuIFx0XHRtdDc2X2NoZWNrX2NjbXBfcG4oc2tiKTtcbiBcdFx0c2tiX3NoaW5mbyhza2IpLVx1MDAzZWZyYWdfbGlzdCA9IE5VTEw7XG4tXHRcdG10NzZfcnhfY29udmVydChkZXYsIHNrYiwgXHUwMDI2aHcsIFx1MDAyNnN0YSk7XG4tXHRcdGllZWU4MDIxMV9yeF9saXN0KGh3LCBzdGEsIHNrYiwgXHUwMDI2bGlzdCk7XG4rXHRcdG10NzZfcnhfY29udmVydChkZXYsIHNrYiwgXHUwMDI2aHcsIFx1MDAyNmxpbmtfc3RhKTtcbitcdFx0aWVlZTgwMjExX3J4X2xpc3QoaHcsIGxpbmtfc3RhLCBza2IsIFx1MDAyNmxpc3QpO1xuIFxuIFx0XHQvKiBzdWJzZXF1ZW50IGFtc2R1IGZyYW1lcyAqL1xuIFx0XHR3aGlsZSAobnNrYikge1xuQEAgLTE1MzQsOCArMTUzOCw4IEBAIHZvaWQgbXQ3Nl9yeF9jb21wbGV0ZShzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqZnJhbWVzLFxuIFx0XHRcdG5za2IgPSBuc2tiLVx1MDAzZW5leHQ7XG4gXHRcdFx0c2tiLVx1MDAzZW5leHQgPSBOVUxMO1xuIFxuLVx0XHRcdG10NzZfcnhfY29udmVydChkZXYsIHNrYiwgXHUwMDI2aHcsIFx1MDAyNnN0YSk7XG4tXHRcdFx0aWVlZTgwMjExX3J4X2xpc3QoaHcsIHN0YSwgc2tiLCBcdTAwMjZsaXN0KTtcbitcdFx0XHRtdDc2X3J4X2NvbnZlcnQoZGV2LCBza2IsIFx1MDAyNmh3LCBcdTAwMjZsaW5rX3N0YSk7XG4rXHRcdFx0aWVlZTgwMjExX3J4X2xpc3QoaHcsIGxpbmtfc3RhLCBza2IsIFx1MDAyNmxpc3QpO1xuIFx0XHR9XG4gXHR9XG4gXHRzcGluX3VubG9jayhcdTAwMjZkZXYtXHUwMDNlcnhfbG9jayk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9jb3JlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2NvcmUuY1xuaW5kZXggMGYwZTQ2Y2I0MjYwNS4uZGY5NmQwYTk2Nzg3MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY29yZS5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2NvcmUuY1xuQEAgLTMwMzYsNyArMzAzNiw2IEBAIHN0YXRpYyB2b2lkIHJ0dzg5X3ZpZl9yeF9zdGF0c19pdGVyKHZvaWQgKmRhdGEsIHU4ICptYWMsXG4gXHRzdHJ1Y3QgcnR3ODlfdmlmICpydHd2aWYgPSB2aWZfdG9fcnR3dmlmKHZpZik7XG4gXHRzdHJ1Y3QgcnR3ODlfcnhfZGVzY19pbmZvICpkZXNjX2luZm8gPSBpdGVyX2RhdGEtXHUwMDNlZGVzY19pbmZvO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGl0ZXJfZGF0YS1cdTAwM2Vza2I7XG4tXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLVx1MDAzZWRhdGE7XG4gXHRzdHJ1Y3QgcnR3ODlfcnhfcGh5X3BwZHUgKnBoeV9wcGR1ID0gaXRlcl9kYXRhLVx1MDAzZXBoeV9wcGR1O1xuIFx0Ym9vbCBpc19tbGQgPSBpZWVlODAyMTFfdmlmX2lzX21sZCh2aWYpO1xuQEAgLTMwNzMsMTEgKzMwNzIsNiBAQCBzdGF0aWMgdm9pZCBydHc4OV92aWZfcnhfc3RhdHNfaXRlcih2b2lkICpkYXRhLCB1OCAqbWFjLFxuIFx0aWYgKCFldGhlcl9hZGRyX2VxdWFsKHRhcmdldF9ic3NpZCwgYnNzaWQpKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdGlmIChpc19tbGQpIHtcbi1cdFx0cnhfc3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQgPSB0cnVlO1xuLVx0XHRyeF9zdGF0dXMtXHUwMDNlbGlua19pZCA9IHJ0d3ZpZl9saW5rLVx1MDAzZWxpbmtfaWQ7XG4tXHR9XG4tXG4gXHRiYiA9IHJ0dzg5X2dldF9iYl9jdHgocnR3ZGV2LCBydHd2aWZfbGluay1cdTAwM2VwaHlfaWR4KTtcbiBcdHBrdF9zdGF0ID0gXHUwMDI2YmItXHUwMDNlY3VyX3BrdF9zdGF0O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcbmluZGV4IDAyYjZkODFjY2NkMTEuLmEwZDUxOWNkOWM0ZmEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcbkBAIC0xODgwLDkgKzE4ODAsNiBAQCBzdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9yeChzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YSxcbiBcdFx0XHRcdHNwLVx1MDAzZWFjdGl2ZV9saW5rc19yeCBcdTAwMjY9IH5CSVQobGlua19pZCk7XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0c3AtXHUwMDNlYWN0aXZlX2xpbmtzX3J4IHw9IEJJVChsaW5rX2lkKTtcbi1cbi1cdFx0XHRyeF9zdGF0dXMtXHUwMDNlbGlua192YWxpZCA9IHRydWU7XG4tXHRcdFx0cnhfc3RhdHVzLVx1MDAzZWxpbmtfaWQgPSBsaW5rX2lkO1xuIFx0XHR9XG4gXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NmZzgwMjExLmggYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oXG5pbmRleCBkY2JiMGU1NWMzMmVjLi41OWJkMTUzMjMyMmQ3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxuKysrIGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxuQEAgLTQwMDksNiArNDAwOSw3IEBAIHN0cnVjdCBjZmc4MDIxMV91cGRhdGVfZnRfaWVzX3BhcmFtcyB7XG4gICogQGxpbmtfaWQ6IGZvciBNTE8sIHRoZSBsaW5rIElEIHRvIHRyYW5zbWl0IG9uLCAtMSBpZiBub3QgZ2l2ZW47IG5vdGVcbiAgKlx0dGhhdCB0aGUgbGluayBJRCBpc24ndCB2YWxpZGF0ZWQgKG11Y2gpLCBpdCdzIGluIHJhbmdlIGJ1dCB0aGVcbiAgKlx0bGluayBtaWdodCBub3QgZXhpc3QgKG9yIGJlIHVzZWQgYnkgdGhlIHJlY2VpdmVyIFNUQSlcbisgKiBAbm9fc3RhOiBzZXQgaWYgdGhlIGZyYW1lIHNob3VsZCBub3QgYmUgdHJhbnNtaXR0ZWQgdXNpbmcgYW4gZXhpc3RpbmcgU1RBXG4gICovXG4gc3RydWN0IGNmZzgwMjExX21nbXRfdHhfcGFyYW1zIHtcbiBcdHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbjtcbkBAIC00MDIxLDYgKzQwMjIsNyBAQCBzdHJ1Y3QgY2ZnODAyMTFfbWdtdF90eF9wYXJhbXMge1xuIFx0aW50IG5fY3NhX29mZnNldHM7XG4gXHRjb25zdCB1MTYgKmNzYV9vZmZzZXRzO1xuIFx0aW50IGxpbmtfaWQ7XG4rXHRib29sIG5vX3N0YTtcbiB9O1xuIFxuIC8qKlxuQEAgLTk0OTksNiArOTUwMSw3IEBAIHZvaWQgY2ZnODAyMTFfY29ubl9mYWlsZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKm1hY19hZGRyLFxuICAqIEBmbGFnczogZmxhZ3MsIGFzIGRlZmluZWQgaW4gXHUwMDI2ZW51bSBubDgwMjExX3J4bWdtdF9mbGFnc1xuICAqIEByeF90c3RhbXA6IEhhcmR3YXJlIHRpbWVzdGFtcCBvZiBmcmFtZSBSWCBpbiBuYW5vc2Vjb25kc1xuICAqIEBhY2tfdHN0YW1wOiBIYXJkd2FyZSB0aW1lc3RhbXAgb2YgYWNrIFRYIGluIG5hbm9zZWNvbmRzXG4rICogQG5vX3N0YTogc2V0IGlmIG5vIHN0YXRpb24gaXMga25vd24gZm9yIHRoZSBmcmFtZSAocmVsZXZhbnQgZm9yIE1MRClcbiAgKi9cbiBzdHJ1Y3QgY2ZnODAyMTFfcnhfaW5mbyB7XG4gXHRpbnQgZnJlcTtcbkBAIC05NTEwLDYgKzk1MTMsNyBAQCBzdHJ1Y3QgY2ZnODAyMTFfcnhfaW5mbyB7XG4gXHR1MzIgZmxhZ3M7XG4gXHR1NjQgcnhfdHN0YW1wO1xuIFx0dTY0IGFja190c3RhbXA7XG4rXHRib29sIG5vX3N0YTtcbiB9O1xuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmggYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXG5pbmRleCA5ZDFmYWM2ZTgwODI5Li43YWFlNzI4ZTk2ZDg0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaFxuKysrIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaFxuQEAgLTE3NzAsMTAgKzE3NzAsOSBAQCBlbnVtIG1hYzgwMjExX3J4X2VuY29kaW5nIHtcbiAgKiBAYW1wZHVfcmVmZXJlbmNlOiBBLU1QRFUgcmVmZXJlbmNlIG51bWJlciwgbXVzdCBiZSBhIGRpZmZlcmVudCB2YWx1ZSBmb3JcbiAgKlx0ZWFjaCBBLU1QRFUgYnV0IHRoZSBzYW1lIGZvciBlYWNoIHN1YmZyYW1lIHdpdGhpbiBvbmUgQS1NUERVXG4gICogQHplcm9fbGVuZ3RoX3BzZHVfdHlwZTogcmFkaW90YXAgdHlwZSBvZiB0aGUgMC1sZW5ndGggUFNEVVxuLSAqIEBsaW5rX3ZhbGlkOiBpZiB0aGUgbGluayB3aGljaCBpcyBpZGVudGlmaWVkIGJ5IEBsaW5rX2lkIGlzIHZhbGlkLiBUaGlzIGZsYWdcbi0gKlx0aXMgc2V0IG9ubHkgd2hlbiBjb25uZWN0aW9uIGlzIE1MTy5cbi0gKiBAbGlua19pZDogaWQgb2YgdGhlIGxpbmsgdXNlZCB0byByZWNlaXZlIHRoZSBwYWNrZXQuIFRoaXMgaXMgdXNlZCBhbG9uZyB3aXRoXG4tICpcdEBsaW5rX3ZhbGlkLlxuKyAqIEBsaW5rX2lkOiBpZCBvZiB0aGUgbGluayB1c2VkIHRvIHJlY2VpdmUgdGhlIHBhY2tldC4gU2V0IGFuZCB1c2VkIGJ5XG4rICpcdG1hYzgwMjExIGludGVybmFsbHksIGl0IHVzZXMgQGZyZXEgc2V0IGJ5IHRoZSBkcml2ZXIgdG8gaWRlbnRpZnkgdGhlXG4rICpcdGNvcnJlY3QgbGluayBwZXIgdmlmLlxuICAqL1xuIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzIHtcbiBcdHU2NCBtYWN0aW1lO1xuQEAgLTE4MTMsNyArMTgxMiw3IEBAIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzIHtcbiBcdHU4IGNoYWlucztcbiBcdHM4IGNoYWluX3NpZ25hbFtJRUVFODAyMTFfTUFYX0NIQUlOU107XG4gXHR1OCB6ZXJvX2xlbmd0aF9wc2R1X3R5cGU7XG4tXHR1OCBsaW5rX3ZhbGlkOjEsIGxpbmtfaWQ6NDtcbitcdHU4IGxpbmtfaWQ6NDtcbiB9O1xuIFxuIHN0YXRpY19hc3NlcnQoc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzKSBcdTAwM2M9IHNpemVvZl9maWVsZChzdHJ1Y3Qgc2tfYnVmZiwgY2IpKTtcbkBAIC01Mzg5LDE0ICs1Mzg4LDE4IEBAIHZvaWQgaWVlZTgwMjExX3Jlc3RhcnRfaHcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpO1xuICAqIG1peGVkIGZvciBhIHNpbmdsZSBoYXJkd2FyZS4gTXVzdCBub3QgcnVuIGNvbmN1cnJlbnRseSB3aXRoXG4gICogaWVlZTgwMjExX3R4X3N0YXR1c19za2IoKSBvciBpZWVlODAyMTFfdHhfc3RhdHVzX25pKCkuXG4gICpcbisgKiBGb3IgZGF0YSBmcmFtZXMsIHdoZW4gaGFyZHdhcmUgaGFzIGRvbmUgYWRkcmVzcyB0cmFuc2xhdGlvbiwgYSBsaW5rIHN0YXRpb25cbisgKiBoYXMgdG8gYmUgcHJvdmlkZWQgYW5kIHRoZSBmcmVxdWVuY3kgaW5mb3JtYXRpb24gbWF5IGJlIHNraXBwZWQuXG4rICpcbiAgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggQkhzIGRpc2FibGVkIGFuZCBSQ1UgcmVhZCBsb2NrXG4gICpcbiAgKiBAaHc6IHRoZSBoYXJkd2FyZSB0aGlzIGZyYW1lIGNhbWUgaW4gb25cbi0gKiBAc3RhOiB0aGUgc3RhdGlvbiB0aGUgZnJhbWUgd2FzIHJlY2VpdmVkIGZyb20sIG9yICVOVUxMXG4rICogQGxpbmtfc3RhOiB0aGUgbGluayBzdGF0aW9uIHRoZSBkYXRhIGZyYW1lIHdhcyByZWNlaXZlZCBmcm9tLCBvciAlTlVMTFxuICAqIEBza2I6IHRoZSBidWZmZXIgdG8gcmVjZWl2ZSwgb3duZWQgYnkgbWFjODAyMTEgYWZ0ZXIgdGhpcyBjYWxsXG4gICogQGxpc3Q6IHRoZSBkZXN0aW5hdGlvbiBsaXN0XG4gICovXG4tdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbit2b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuK1x0XHQgICAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEsXG4gXHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KTtcbiBcbiAvKipcbkBAIC01NDE0LDE0ICs1NDE3LDE4IEBAIHZvaWQgaWVlZTgwMjExX3J4X2xpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXG4gICogbWl4ZWQgZm9yIGEgc2luZ2xlIGhhcmR3YXJlLiBNdXN0IG5vdCBydW4gY29uY3VycmVudGx5IHdpdGhcbiAgKiBpZWVlODAyMTFfdHhfc3RhdHVzX3NrYigpIG9yIGllZWU4MDIxMV90eF9zdGF0dXNfbmkoKS5cbiAgKlxuKyAqIEZvciBkYXRhIGZyYW1lcywgd2hlbiBoYXJkd2FyZSBoYXMgZG9uZSBhZGRyZXNzIHRyYW5zbGF0aW9uLCBhIGxpbmsgc3RhdGlvblxuKyAqIGhhcyB0byBiZSBwcm92aWRlZCBhbmQgdGhlIGZyZXF1ZW5jeSBpbmZvcm1hdGlvbiBtYXkgYmUgc2tpcHBlZC5cbisgKlxuICAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBCSHMgZGlzYWJsZWQuXG4gICpcbiAgKiBAaHc6IHRoZSBoYXJkd2FyZSB0aGlzIGZyYW1lIGNhbWUgaW4gb25cbi0gKiBAc3RhOiB0aGUgc3RhdGlvbiB0aGUgZnJhbWUgd2FzIHJlY2VpdmVkIGZyb20sIG9yICVOVUxMXG4rICogQGxpbmtfc3RhOiB0aGUgbGluayBzdGF0aW9uIHRoZSBkYXRhIGZyYW1lIHdhcyByZWNlaXZlZCBmcm9tLCBvciAlTlVMTFxuICAqIEBza2I6IHRoZSBidWZmZXIgdG8gcmVjZWl2ZSwgb3duZWQgYnkgbWFjODAyMTEgYWZ0ZXIgdGhpcyBjYWxsXG4gICogQG5hcGk6IHRoZSBOQVBJIGNvbnRleHRcbiAgKi9cbi12b2lkIGllZWU4MDIxMV9yeF9uYXBpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxuK3ZvaWQgaWVlZTgwMjExX3J4X25hcGkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4rXHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSxcbiBcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSk7XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmhcbmluZGV4IDAyMDM4N2Q3NjQxMjIuLjQ2NTNmOGYyNmVlNzAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oXG5AQCAtMzE4NSw2ICszMTg1LDExIEBAIGVudW0gbmw4MDIxMV9jb21tYW5kcyB7XG4gICpcdFRoZSBhZ2dyZWdhdGVkIG1lc3NhZ2UgYWx3YXlzIHByZWNlZGVzIHRoZSBwZXItbGluayBtZXNzYWdlcyBmb3IgdGhlXG4gICpcdHNhbWUgc3RhdGlvbiB3aXRoaW4gYSBkdW1wIHNlcXVlbmNlLlxuICAqXG4rICogQE5MODAyMTFfQVRUUl9GUkFNRV9DTURfTk9fU1RBOiBWYWxpZCBmb3IgTkw4MDIxMV9DTURfRlJBTUUgdG8gZGVub3RlIHRoYXRcbisgKlx0dGhlIGtlcm5lbCBoYWQgbm8gc3RhdGlvbiBmb3IgYSByZWNlaXZlZCBmcmFtZSBvciBzaG91bGQgbm90IHVzZSBhXG4rICpcdGtub3duIHN0YXRpb24gdG8gdHJhbnNtaXQgYSBmcmFtZS4gVGhpcyBpcyByZWxldmFudCB0byBrbm93IHdoZXRoZXJcbisgKlx0TUxEIGFkZHJlc3MgdHJhbnNsYXRpb24gaGFwcGVuZWQgb3IgdG8gZGlzYWJsZSBpdCB3aGVuIHNlbmRpbmcgYSBmcmFtZS5cbisgKlxuICAqIEBOVU1fTkw4MDIxMV9BVFRSOiB0b3RhbCBudW1iZXIgb2Ygbmw4MDIxMV9hdHRycyBhdmFpbGFibGVcbiAgKiBATkw4MDIxMV9BVFRSX01BWDogaGlnaGVzdCBhdHRyaWJ1dGUgbnVtYmVyIGN1cnJlbnRseSBkZWZpbmVkXG4gICogQF9fTkw4MDIxMV9BVFRSX0FGVEVSX0xBU1Q6IGludGVybmFsIHVzZVxuQEAgLTM3ODUsNiArMzc5MCw4IEBAIGVudW0gbmw4MDIxMV9hdHRycyB7XG4gXG4gXHROTDgwMjExX0FUVFJfU1RBX0RVTVBfTElOS19TVEFUUyxcbiBcbitcdE5MODAyMTFfQVRUUl9GUkFNRV9DTURfTk9fU1RBLFxuK1xuIFx0LyogYWRkIGF0dHJpYnV0ZXMgaGVyZSwgdXBkYXRlIHRoZSBwb2xpY3kgaW4gbmw4MDIxMS5jICovXG4gXG4gXHRfX05MODAyMTFfQVRUUl9BRlRFUl9MQVNULFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9hZ2ctdHguYyBiL25ldC9tYWM4MDIxMS9hZ2ctdHguY1xuaW5kZXggNDgzM2I0Njc3MGI2Mi4uZGQ4YTExZWY2ZTUyYiAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9hZ2ctdHguY1xuKysrIGIvbmV0L21hYzgwMjExL2FnZy10eC5jXG5AQCAtOTgsNyArOTgsNyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9hZGRiYV9yZXF1ZXN0KHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1MTYgdGlkLFxuIFx0aWYgKHN0YS1cdTAwM2VzdGEuZGVmbGluay5oZV9jYXAuaGFzX2hlKVxuIFx0XHRpZWVlODAyMTFfYWRkX2FkZGJhZXh0KHNrYiwgMCwgYWdnX3NpemUpO1xuIFxuLVx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgdGlkLCAtMSk7XG4rXHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCBOVUxMLCB0aWQsIC0xKTtcbiB9XG4gXG4gdm9pZCBpZWVlODAyMTFfc2VuZF9iYXIoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgdTggKnJhLCB1MTYgdGlkLCB1MTYgc3NuKVxuQEAgLTEyNyw3ICsxMjcsNyBAQCB2b2lkIGllZWU4MDIxMV9zZW5kX2JhcihzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCB1OCAqcmEsIHUxNiB0aWQsIHUxNiBzc24pXG4gXG4gXHRJRUVFODAyMTFfU0tCX0NCKHNrYiktXHUwMDNlZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0lOVEZMX0RPTlRfRU5DUllQVCB8XG4gXHRcdFx0XHRcdElFRUU4MDIxMV9UWF9DVExfUkVRX1RYX1NUQVRVUztcbi1cdGllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIHRpZCwgLTEpO1xuK1x0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgTlVMTCwgdGlkLCAtMSk7XG4gfVxuIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3NlbmRfYmFyKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvYXAuYyBiL25ldC9tYWM4MDIxMS9hcC5jXG5pbmRleCBlN2FjOTljNWEyMmViLi5mZTI1NTg5MWMzNWYwIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2FwLmNcbisrKyBiL25ldC9tYWM4MDIxMS9hcC5jXG5AQCAtODIsOSArODIsNiBAQCBpZWVlODAyMTFfcnhfZW1sX29wX21vZGVfbm90aWYoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRpZiAoIWlmdF9leHRfY2FwYSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aWYgKCFzdGF0dXMtXHUwMDNlbGlua192YWxpZClcbi1cdFx0cmV0dXJuO1xuLVxuIFx0c3RhID0gc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgbWdtdC1cdTAwM2VzYSk7XG4gXHRpZiAoIXN0YSlcbiBcdFx0cmV0dXJuO1xuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9odC5jIGIvbmV0L21hYzgwMjExL2h0LmNcbmluZGV4IGUxZTFiN2Y4MmYzZmUuLmM1YzIxMTNmYTRmNzkgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvaHQuY1xuKysrIGIvbmV0L21hYzgwMjExL2h0LmNcbkBAIC01NDUsNyArNTQ1LDcgQEAgaW50IGllZWU4MDIxMV9zZW5kX3NtcHNfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0aW5mby1cdTAwM2VzdGF0dXNfZGF0YSA9IElFRUU4MDIxMV9TVEFUVVNfVFlQRV9TTVBTIHxcbiBcdFx0XHQgICAgdTE2X2VuY29kZV9iaXRzKHN0YXR1c19saW5rX2lkIFx1MDAzY1x1MDAzYyAyIHwgc21wcyxcbiBcdFx0XHRcdFx0ICAgIElFRUU4MDIxMV9TVEFUVVNfU1VCREFUQV9NQVNLKTtcbi1cdGllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIDcsIGxpbmtfaWQpO1xuK1x0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgTlVMTCwgNywgbGlua19pZCk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmggYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxuaW5kZXggYTFlZjg4ZmU4NDZkZC4uMzhkODZiMGExMGY1YSAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXG4rKysgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxuQEAgLTI0NjYsNyArMjQ2Niw4IEBAIHZvaWQgaWVlZTgwMjExX3htaXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdCAgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gXG4gdm9pZCBfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRpZCwgaW50IGxpbmtfaWQsXG4rXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN0YV9pbmZvICpzdGEsXG4rXHRcdFx0XHQgaW50IHRpZCwgaW50IGxpbmtfaWQsXG4gXHRcdFx0XHQgZW51bSBubDgwMjExX2JhbmQgYmFuZCk7XG4gXG4gc3RhdGljIGlubGluZSBib29sIGllZWU4MDIxMV9yZXF1aXJlX2VuY3J5cHRlZF9hc3NvYyhfX2xlMTYgZmMsXG5AQCAtMjQ4NiwxOCArMjQ4NywyMCBAQCBpZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRcdCAgZW51bSBubDgwMjExX2JhbmQgYmFuZClcbiB7XG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc2RhdGEsIHNrYiwgdGlkLCAtMSwgYmFuZCk7XG4rXHRfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc2RhdGEsIHNrYiwgRVJSX1BUUigtRU5PRU5UKSxcbitcdFx0XHRcdCAgICB0aWQsIC0xLCBiYW5kKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiB2b2lkIGllZWU4MDIxMV90eF9za2JfdGlkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLVx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRpZCwgaW50IGxpbmtfaWQpO1xuK1x0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN0YV9pbmZvICpzdGEsXG4rXHRcdFx0ICBpbnQgdGlkLCBpbnQgbGlua19pZCk7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGllZWU4MDIxMV90eF9za2Ioc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHQvKiBTZW5kIGFsbCBpbnRlcm5hbCBtZ210IGZyYW1lcyBvbiBWTy4gQWNjb3JkaW5nbHkgc2V0IFRJRCB0byA3LiAqL1xuLVx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgNywgLTEpO1xuK1x0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgTlVMTCwgNywgLTEpO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWZhY2UuYyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jXG5pbmRleCA0MzQ2MGE3MDVhNmJkLi5hMGIyMTRkYmI4YWY4IDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2lmYWNlLmNcbisrKyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jXG5AQCAtMTY3MywxMSArMTY3Myw4IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9pZmFjZV9wcm9jZXNzX3NrYihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcbiBcdFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRcdHN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpO1xuLVx0XHRcdGlmICghc3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQpXG4tXHRcdFx0XHRsaW5rX3N0YSA9IFx1MDAyNnN0YS1cdTAwM2VkZWZsaW5rO1xuLVx0XHRcdGVsc2Vcbi1cdFx0XHRcdGxpbmtfc3RhID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChzdGEtXHUwMDNlbGlua1tzdGF0dXMtXHUwMDNlbGlua19pZF0sXG4tXHRcdFx0XHRcdFx0XHRsb2NrZGVwX2lzX2hlbGQoXHUwMDI2bG9jYWwtXHUwMDNlaHcud2lwaHktXHUwMDNlbXR4KSk7XG4rXHRcdFx0bGlua19zdGEgPSB3aXBoeV9kZXJlZmVyZW5jZShsb2NhbC1cdTAwM2Vody53aXBoeSxcbitcdFx0XHRcdFx0XHQgICAgIHN0YS1cdTAwM2VsaW5rW3N0YXR1cy1cdTAwM2VsaW5rX2lkXSk7XG4gXHRcdFx0aWYgKGxpbmtfc3RhKVxuIFx0XHRcdFx0aWVlZTgwMjExX2h0X2hhbmRsZV9jaGFud2lkdGhfbm90aWYobG9jYWwsIHNkYXRhLCBzdGEsXG4gXHRcdFx0XHRcdFx0XHRcdCAgICBsaW5rX3N0YSwgY2hhbndpZHRoLFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tbG1lLmMgYi9uZXQvbWFjODAyMTEvbWxtZS5jXG5pbmRleCBmNTExNjdmMGZjNDZkLi4zNjE3NzVmYjkzMWVjIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL21sbWUuY1xuKysrIGIvbmV0L21hYzgwMjExL21sbWUuY1xuQEAgLTExODMxLDEyICsxMTgzMSwxMCBAQCB2b2lkIGllZWU4MDIxMV9zdGFfcnhfcXVldWVkX2ZyYW1lKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0cnhfc3RhdHVzID0gKHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICopIHNrYi1cdTAwM2VjYjtcbiBcdGZjID0gbGUxNl90b19jcHUobWdtdC1cdTAwM2VmcmFtZV9jb250cm9sKTtcbiBcbi1cdGlmIChyeF9zdGF0dXMtXHUwMDNlbGlua192YWxpZCkge1xuLVx0XHRsaW5rID0gc2RhdGFfZGVyZWZlcmVuY2Uoc2RhdGEtXHUwMDNlbGlua1tyeF9zdGF0dXMtXHUwMDNlbGlua19pZF0sXG4tXHRcdFx0XHRcdCBzZGF0YSk7XG4tXHRcdGlmICghbGluaylcbi1cdFx0XHRyZXR1cm47XG4tXHR9XG4rXHRsaW5rID0gc2RhdGFfZGVyZWZlcmVuY2Uoc2RhdGEtXHUwMDNlbGlua1tyeF9zdGF0dXMtXHUwMDNlbGlua19pZF0sXG4rXHRcdFx0XHQgc2RhdGEpO1xuK1x0aWYgKCFsaW5rKVxuK1x0XHRyZXR1cm47XG4gXG4gXHRzd2l0Y2ggKGZjIFx1MDAyNiBJRUVFODAyMTFfRkNUTF9TVFlQRSkge1xuIFx0Y2FzZSBJRUVFODAyMTFfU1RZUEVfQkVBQ09OOlxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmMgYi9uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jXG5pbmRleCAyYmNlYjczNzE3YzY2Li4zODM0ZjU5NmFmMTc4IDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL29mZmNoYW5uZWwuY1xuKysrIGIvbmV0L21hYzgwMjExL29mZmNoYW5uZWwuY1xuQEAgLTg1Niw4ICs4NTYsMTAgQEAgaW50IGllZWU4MDIxMV9tZ210X3R4KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXHRcdFx0bmVlZF9vZmZjaGFuID0gdHJ1ZTtcbiBcbiBcdFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0XHRzdGEgPSBzdGFfaW5mb19nZXRfYnNzKHNkYXRhLCBtZ210LVx1MDAzZWRhKTtcbi1cdFx0bWxvX3N0YSA9IHN0YSBcdTAwMjZcdTAwMjYgc3RhLVx1MDAzZXN0YS5tbG87XG4rXHRcdGlmICghcGFyYW1zLVx1MDAzZW5vX3N0YSkge1xuK1x0XHRcdHN0YSA9IHN0YV9pbmZvX2dldF9ic3Moc2RhdGEsIG1nbXQtXHUwMDNlZGEpO1xuK1x0XHRcdG1sb19zdGEgPSBzdGEgXHUwMDI2XHUwMDI2IHN0YS1cdTAwM2VzdGEubWxvO1xuK1x0XHR9XG4gXG4gXHRcdGlmICghaWVlZTgwMjExX2lzX2FjdGlvbihtZ210LVx1MDAzZWZyYW1lX2NvbnRyb2wpIHx8XG4gXHRcdCAgICBtZ210LVx1MDAzZXUuYWN0aW9uLmNhdGVnb3J5ID09IFdMQU5fQ0FURUdPUllfUFVCTElDIHx8XG5AQCAtODg2LDcgKzg4OCw4IEBAIGludCBpZWVlODAyMTFfbWdtdF90eChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuIFx0XHQgICAgIGxvY2FsLVx1MDAzZW9wcy1cdTAwM2VyZW1haW5fb25fY2hhbm5lbCBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICBtZW1jbXAoc2RhdGEtXHUwMDNldmlmLmNmZy5hcF9hZGRyLCBtZ210LVx1MDAzZWJzc2lkLCBFVEhfQUxFTikpKSB7XG4gXHRcdFx0bmVlZF9vZmZjaGFuID0gdHJ1ZTtcbi1cdFx0fSBlbHNlIGlmIChzZGF0YS1cdTAwM2V1Lm1nZC5hc3NvY2lhdGVkIFx1MDAyNlx1MDAyNlxuK1x0XHR9IGVsc2UgaWYgKCFwYXJhbXMtXHUwMDNlbm9fc3RhIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgIHNkYXRhLVx1MDAzZXUubWdkLmFzc29jaWF0ZWQgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgZXRoZXJfYWRkcl9lcXVhbChzZGF0YS1cdTAwM2V2aWYuY2ZnLmFwX2FkZHIsIG1nbXQtXHUwMDNlZGEpKSB7XG4gXHRcdFx0c3RhID0gc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgbWdtdC1cdTAwM2VkYSk7XG4gXHRcdFx0bWxvX3N0YSA9IHN0YSBcdTAwMjZcdTAwMjYgc3RhLVx1MDAzZXN0YS5tbG87XG5AQCAtMTAzMSw3ICsxMDM0LDkgQEAgaW50IGllZWU4MDIxMV9tZ210X3R4KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXHR9XG4gXG4gXHRpZiAoIW5lZWRfb2ZmY2hhbikge1xuLVx0XHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCA3LCBsaW5rX2lkKTtcbitcdFx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYixcbitcdFx0XHRcdCAgICAgcGFyYW1zLVx1MDAzZW5vX3N0YSA/IHN0YSA6IEVSUl9QVFIoLUVOT0VOVCksXG4rXHRcdFx0XHQgICAgIDcsIGxpbmtfaWQpO1xuIFx0XHRyZXQgPSAwO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3J4LmMgYi9uZXQvbWFjODAyMTEvcnguY1xuaW5kZXggNWUyNmJlOGUyN2Q4Zi4uZWQ1YTJlMDU5MDc1NyAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9yeC5jXG4rKysgYi9uZXQvbWFjODAyMTEvcnguY1xuQEAgLTIyMiw0MyArMjIyLDIxIEBAIGllZWU4MDIxMV9yeF9yYWRpb3RhcF9oZHJsZW4oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi1cdFx0XHRcdFx0ICAgaW50IGxpbmtfaWQsXG4tXHRcdFx0XHRcdCAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxuK1x0XHRcdFx0XHQgICBzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpO1xuLVxuLVx0aWYgKGxpbmtfaWQgXHUwMDNlPSAwKSB7XG4tXHRcdHN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkID0gMTtcbi1cdFx0c3RhdHVzLVx1MDAzZWxpbmtfaWQgPSBsaW5rX2lkO1xuLVx0fSBlbHNlIHtcbi1cdFx0c3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQgPSAwO1xuLVx0fVxuLVxuIFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2c2RhdGEtXHUwMDNlc2tiX3F1ZXVlLCBza2IpO1xuIFx0d2lwaHlfd29ya19xdWV1ZShzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2Vody53aXBoeSwgXHUwMDI2c2RhdGEtXHUwMDNld29yayk7XG4tXHRpZiAoc3RhKSB7XG4tXHRcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YV9pbmZvO1xuLVxuLVx0XHRpZiAobGlua19pZCBcdTAwM2U9IDApIHtcbi1cdFx0XHRsaW5rX3N0YV9pbmZvID0gcmN1X2RlcmVmZXJlbmNlKHN0YS1cdTAwM2VsaW5rW2xpbmtfaWRdKTtcbi1cdFx0XHRpZiAoIWxpbmtfc3RhX2luZm8pXG4tXHRcdFx0XHRyZXR1cm47XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0bGlua19zdGFfaW5mbyA9IFx1MDAyNnN0YS1cdTAwM2VkZWZsaW5rO1xuLVx0XHR9XG4tXG4tXHRcdGxpbmtfc3RhX2luZm8tXHUwMDNlcnhfc3RhdHMucGFja2V0cysrO1xuLVx0fVxuK1x0aWYgKGxpbmtfc3RhKVxuK1x0XHRsaW5rX3N0YS1cdTAwM2VyeF9zdGF0cy5wYWNrZXRzKys7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tXHRcdFx0XHRcdCBpbnQgbGlua19pZCxcbi1cdFx0XHRcdFx0IHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxuK1x0XHRcdFx0XHQgc3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhLFxuIFx0XHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRza2ItXHUwMDNlcHJvdG9jb2wgPSAwO1xuLVx0X19pZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCBsaW5rX2lkLCBzdGEsIHNrYik7XG4rXHRfX2llZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIGxpbmtfc3RhLCBza2IpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfaGFuZGxlX211X21pbW9fbW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuQEAgLTMwMSw3ICsyNzksNyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfaGFuZGxlX211X21pbW9fbW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0aWYgKCFza2IpXG4gXHRcdHJldHVybjtcbiBcbi1cdGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIC0xLCBOVUxMLCBza2IpO1xuK1x0aWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgTlVMTCwgc2tiKTtcbiB9XG4gXG4gLypcbkBAIC0xNDk4LDcgKzE0NzYsNyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfcmVvcmRlcl9hbXBkdShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxuIFx0LyogaWYgdGhpcyBtcGR1IGlzIGZyYWdtZW50ZWQgLSB0ZXJtaW5hdGUgcnggYWdncmVnYXRpb24gc2Vzc2lvbiAqL1xuIFx0c2MgPSBsZTE2X3RvX2NwdShoZHItXHUwMDNlc2VxX2N0cmwpO1xuIFx0aWYgKHNjIFx1MDAyNiBJRUVFODAyMTFfU0NUTF9GUkFHKSB7XG4tXHRcdGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2UocngtXHUwMDNlc2RhdGEsIHJ4LVx1MDAzZWxpbmtfaWQsIE5VTEwsIHNrYik7XG4rXHRcdGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2UocngtXHUwMDNlc2RhdGEsIE5VTEwsIHNrYik7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbkBAIC0yNTI0LDcgKzI1MDIsNyBAQCBpZWVlODAyMTFfcnhfaF9kZWZyYWdtZW50KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpXG4gXG4gIG91dDpcbiBcdGllZWU4MDIxMV9sZWRfcngocngtXHUwMDNlbG9jYWwpO1xuLVx0aWYgKHJ4LVx1MDAzZXN0YSlcbitcdGlmIChyeC1cdTAwM2VsaW5rX3N0YSlcbiBcdFx0cngtXHUwMDNlbGlua19zdGEtXHUwMDNlcnhfc3RhdHMucGFja2V0cysrO1xuIFx0cmV0dXJuIFJYX0NPTlRJTlVFO1xuIH1cbkBAIC0zMzM1LDggKzMzMTMsOCBAQCBpZWVlODAyMTFfcnhfaF9kYXRhKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpXG4gXHRcdCAgICAodGYtXHUwMDNlYWN0aW9uX2NvZGUgPT0gV0xBTl9URExTX0NIQU5ORUxfU1dJVENIX1JFUVVFU1QgfHxcbiBcdFx0ICAgICB0Zi1cdTAwM2VhY3Rpb25fY29kZSA9PSBXTEFOX1RETFNfQ0hBTk5FTF9TV0lUQ0hfUkVTUE9OU0UpKSB7XG4gXHRcdFx0cngtXHUwMDNlc2tiLVx1MDAzZXByb3RvY29sID0gY3B1X3RvX2JlMTYoRVRIX1BfVERMUyk7XG4tXHRcdFx0X19pZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC1cdTAwM2VsaW5rX2lkLFxuLVx0XHRcdFx0XHRcdCAgICAgICByeC1cdTAwM2VzdGEsIHJ4LVx1MDAzZXNrYik7XG4rXHRcdFx0X19pZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC1cdTAwM2VsaW5rX3N0YSxcbitcdFx0XHRcdFx0XHQgICAgICAgcngtXHUwMDNlc2tiKTtcbiBcdFx0XHRyZXR1cm4gUlhfUVVFVUVEO1xuIFx0XHR9XG4gXHR9XG5AQCAtMzk5MSw3ICszOTY5LDcgQEAgaWVlZTgwMjExX3J4X2hfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpXG4gXHRyZXR1cm4gUlhfUVVFVUVEO1xuIFxuICBxdWV1ZTpcbi1cdGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIHJ4LVx1MDAzZWxpbmtfaWQsIHJ4LVx1MDAzZXN0YSwgcngtXHUwMDNlc2tiKTtcbitcdGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIHJ4LVx1MDAzZWxpbmtfc3RhLCByeC1cdTAwM2Vza2IpO1xuIFx0cmV0dXJuIFJYX1FVRVVFRDtcbiB9XG4gXG5AQCAtNDAwNSw2ICszOTgzLDcgQEAgaWVlZTgwMjExX3J4X2hfdXNlcnNwYWNlX21nbXQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeClcbiBcdFx0LmxlbiA9IHJ4LVx1MDAzZXNrYi1cdTAwM2VsZW4sXG4gXHRcdC5saW5rX2lkID0gcngtXHUwMDNlbGlua19pZCxcbiBcdFx0LmhhdmVfbGlua19pZCA9IHJ4LVx1MDAzZWxpbmtfaWQgXHUwMDNlPSAwLFxuK1x0XHQubm9fc3RhID0gIXJ4LVx1MDAzZXN0YSxcbiBcdH07XG4gXG4gXHQvKiBza2lwIGtub3duLWJhZCBhY3Rpb24gZnJhbWVzIGFuZCByZXR1cm4gdGhlbSBpbiB0aGUgbmV4dCBoYW5kbGVyICovXG5AQCAtNDEyNyw3ICs0MTA2LDcgQEAgaWVlZTgwMjExX3J4X2hfYWN0aW9uX3JldHVybihzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxuIFx0XHRcdFx0XHRsb2NhbC1cdTAwM2Vody5vZmZjaGFubmVsX3R4X2h3X3F1ZXVlO1xuIFx0XHR9XG4gXG4tXHRcdF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChyeC1cdTAwM2VzZGF0YSwgbnNrYiwgNywgLTEsXG4rXHRcdF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChyeC1cdTAwM2VzZGF0YSwgbnNrYiwgcngtXHUwMDNlc3RhLCA3LCAtMSxcbiBcdFx0XHRcdFx0ICAgIHN0YXR1cy1cdTAwM2ViYW5kKTtcbiBcdH1cbiBcbkBAIC00MTQ3LDcgKzQxMjYsNyBAQCBpZWVlODAyMTFfcnhfaF9leHQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeClcbiBcdFx0cmV0dXJuIFJYX0RST1BfVV9VTkVYUEVDVEVEX0VYVF9GUkFNRTtcbiBcbiBcdC8qIGZvciBub3cgb25seSBiZWFjb25zIGFyZSBleHQsIHNvIHF1ZXVlIHRoZW0gKi9cbi1cdGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIHJ4LVx1MDAzZWxpbmtfaWQsIHJ4LVx1MDAzZXN0YSwgcngtXHUwMDNlc2tiKTtcbitcdGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIHJ4LVx1MDAzZWxpbmtfc3RhLCByeC1cdTAwM2Vza2IpO1xuIFxuIFx0cmV0dXJuIFJYX1FVRVVFRDtcbiB9XG5AQCAtNDIwNCw3ICs0MTgzLDcgQEAgaWVlZTgwMjExX3J4X2hfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxuIFx0XHRyZXR1cm4gUlhfRFJPUF9VX1VOSEFORExFRF9NR01UX1NUWVBFO1xuIFx0fVxuIFxuLVx0aWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgcngtXHUwMDNlbGlua19pZCwgcngtXHUwMDNlc3RhLCByeC1cdTAwM2Vza2IpO1xuK1x0aWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgcngtXHUwMDNlbGlua19zdGEsIHJ4LVx1MDAzZXNrYik7XG4gXG4gXHRyZXR1cm4gUlhfUVVFVUVEO1xuIH1cbkBAIC00MjQ4LDEyICs0MjI3LDI4IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9oYW5kbGVycyhzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnJ4LVx1MDAzZWxvY2FsLVx1MDAzZXJ4X3BhdGhfbG9jayk7XG4gXG4gXHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoZnJhbWVzKSkpIHtcbitcdFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpO1xuK1xuIFx0XHQvKlxuLVx0XHQgKiBhbGwgdGhlIG90aGVyIGZpZWxkcyBhcmUgdmFsaWQgYWNyb3NzIGZyYW1lc1xuLVx0XHQgKiB0aGF0IGJlbG9uZyB0byBhbiBhTVBEVSBzaW5jZSB0aGV5IGFyZSBvbiB0aGVcbi1cdFx0ICogc2FtZSBUSUQgZnJvbSB0aGUgc2FtZSBzdGF0aW9uXG4rXHRcdCAqIE1vc3QgZmllbGRzIGFyZSB2YWxpZCBhY3Jvc3MgZnJhbWVzLiBIb3dldmVyLFxuK1x0XHQgKiBpbiB0aGUgY2FzZSBvZiByZW9yZGVyaW5nIGZyYW1lcyBtYXkgaGF2ZSBhcnJpdmVkXG4rXHRcdCAqIG9uIGRpZmZlcmVudCBsaW5rcywgc28gYWRqdXN0IHRoZSBsaW5rX2lkLCBsaW5rXG4rXHRcdCAqIGFuZCBsaW5rX3N0YSBhY2NvcmRpbmdseS5cbiBcdFx0ICovXG4gXHRcdHJ4LVx1MDAzZXNrYiA9IHNrYjtcbitcdFx0aWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKFx1MDAyNnJ4LVx1MDAzZXNkYXRhLVx1MDAzZXZpZikgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICB1bmxpa2VseShyeC1cdTAwM2VsaW5rX2lkICE9IHN0YXR1cy1cdTAwM2VsaW5rX2lkKSkge1xuK1x0XHRcdGlmIChyeC1cdTAwM2VzdGEpIHtcbitcdFx0XHRcdHJ4LVx1MDAzZWxpbmtfc3RhID1cbitcdFx0XHRcdFx0cmN1X2RlcmVmZXJlbmNlKHJ4LVx1MDAzZXN0YS1cdTAwM2VsaW5rW3J4LVx1MDAzZWxpbmtfaWRdKTtcbitcbitcdFx0XHRcdC8qIExpbmsgZ290IGRpc2FibGVkLCBqdXN0IHVzZSBkZWZsaW5rICovXG4rXHRcdFx0XHRpZiAoIXJ4LVx1MDAzZWxpbmtfc3RhKVxuK1x0XHRcdFx0XHRyeC1cdTAwM2VsaW5rX3N0YSA9IFx1MDAyNnJ4LVx1MDAzZXN0YS1cdTAwM2VkZWZsaW5rO1xuK1x0XHRcdH1cbitcdFx0XHRyeC1cdTAwM2VsaW5rX2lkID0gc3RhdHVzLVx1MDAzZWxpbmtfaWQ7XG4rXHRcdFx0cngtXHUwMDNlbGluayA9IHJjdV9kZXJlZmVyZW5jZShyeC1cdTAwM2VzZGF0YS1cdTAwM2VsaW5rW3N0YXR1cy1cdTAwM2VsaW5rX2lkXSk7XG4rXHRcdH1cbiBcbiBcdFx0aWYgKFdBUk5fT05fT05DRSghcngtXHUwMDNlbGluaykpIHtcbiBcdFx0XHRyZXMgPSBSWF9EUk9QX1VfTk9fTElOSztcbkBAIC00MzIzLDcgKzQzMTgsMzQgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX2ludm9rZV9yeF9oYW5kbGVycyhzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxuIHN0YXRpYyBib29sXG4gaWVlZTgwMjExX3J4X2lzX3ZhbGlkX3N0YV9saW5rX2lkKHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHU4IGxpbmtfaWQpXG4ge1xuLVx0cmV0dXJuICEhKHN0YS1cdTAwM2V2YWxpZF9saW5rcyBcdTAwMjYgQklUKGxpbmtfaWQpKTtcbitcdGlmIChzdGEtXHUwMDNlbWxvKVxuK1x0XHRyZXR1cm4gc3RhLVx1MDAzZXZhbGlkX2xpbmtzIFx1MDAyNiBCSVQobGlua19pZCk7XG4rXG4rXHRyZXR1cm4gc3RhLVx1MDAzZWRlZmxpbmsubGlua19pZCA9PSBsaW5rX2lkO1xuK31cbitcbitzdGF0aWMgYm9vbCBpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGlua19zdGEoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcbitcdFx0XHRcdFx0ICAgc3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhKVxuK3tcbitcdHN0cnVjdCBzdGFfaW5mbyAqc3RhO1xuK1xuK1x0aWYgKFdBUk5fT05fT05DRSghbGlua19zdGEpIHx8XG4rXHQgICAgIWllZWU4MDIxMV9yeF9pc192YWxpZF9zdGFfbGlua19pZChcdTAwMjZsaW5rX3N0YS1cdTAwM2VzdGEtXHUwMDNlc3RhLFxuK1x0XHRcdFx0XHQgICAgICAgbGlua19zdGEtXHUwMDNlbGlua19pZCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHN0YSA9IGxpbmtfc3RhLVx1MDAzZXN0YTtcbitcbitcdHJ4LVx1MDAzZXN0YSA9IHN0YTtcbitcdHJ4LVx1MDAzZWxvY2FsID0gc3RhLVx1MDAzZXNkYXRhLVx1MDAzZWxvY2FsO1xuK1x0cngtXHUwMDNlbGluayA9IHJjdV9kZXJlZmVyZW5jZShzdGEtXHUwMDNlc2RhdGEtXHUwMDNlbGlua1tsaW5rX3N0YS1cdTAwM2VsaW5rX2lkXSk7XG4rXHRpZiAoIXJ4LVx1MDAzZWxpbmspXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJ4LVx1MDAzZWxpbmtfaWQgPSByeC1cdTAwM2VsaW5rLVx1MDAzZWxpbmtfaWQ7XG4rXHRyeC1cdTAwM2VsaW5rX3N0YSA9IGxpbmtfc3RhO1xuK1xuK1x0cmV0dXJuIHRydWU7XG4gfVxuIFxuIHN0YXRpYyBib29sIGllZWU4MDIxMV9yeF9kYXRhX3NldF9saW5rKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXG5AQCAtNDM2MCwxMSArNDM4MiwxMyBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfcnhfZGF0YV9zZXRfc3RhKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXG4gXG4gXHRpZiAobGlua19pZCBcdTAwM2MgMCkge1xuIFx0XHRpZiAoaWVlZTgwMjExX3ZpZl9pc19tbGQoXHUwMDI2cngtXHUwMDNlc2RhdGEtXHUwMDNldmlmKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIHN0YSBcdTAwMjZcdTAwMjYgIXN0YS1cdTAwM2VzdGEudmFsaWRfbGlua3MpXG4rXHRcdCAgICBzdGEgXHUwMDI2XHUwMDI2ICFzdGEtXHUwMDNlc3RhLnZhbGlkX2xpbmtzKSB7XG4gXHRcdFx0cngtXHUwMDNlbGluayA9XG4gXHRcdFx0XHRyY3VfZGVyZWZlcmVuY2UocngtXHUwMDNlc2RhdGEtXHUwMDNlbGlua1tzdGEtXHUwMDNlZGVmbGluay5saW5rX2lkXSk7XG4tXHRcdGVsc2VcbitcdFx0XHRyeC1cdTAwM2VsaW5rX3N0YSA9IHJjdV9kZXJlZmVyZW5jZShyeC1cdTAwM2VzdGEtXHUwMDNlbGlua1tsaW5rX2lkXSk7XG4rXHRcdH0gZWxzZSB7XG4gXHRcdFx0cngtXHUwMDNlbGluayA9IFx1MDAyNnJ4LVx1MDAzZXNkYXRhLVx1MDAzZWRlZmxpbms7XG4rXHRcdH1cbiBcdH0gZWxzZSBpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9saW5rKHJ4LCBsaW5rX2lkKSkge1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5AQCAtNDM4Nyw3ICs0NDExLDcgQEAgdm9pZCBpZWVlODAyMTFfcmVsZWFzZV9yZW9yZGVyX3RpbWVvdXQoc3RydWN0IHN0YV9pbmZvICpzdGEsIGludCB0aWQpXG4gXHRzdHJ1Y3QgdGlkX2FtcGR1X3J4ICp0aWRfYWdnX3J4O1xuIFx0aW50IGxpbmtfaWQgPSAtMTtcbiBcbi1cdC8qIEZJWE1FOiBzdGF0aXN0aWNzIHdvbid0IGJlIHJpZ2h0IHdpdGggdGhpcyAqL1xuK1x0LyogTk9URTogdGhlIGNvcnJlY3QgbGluayBTVEEgZm9yIHRoZSBmcmFtZSBpcyBzZXQgbGF0ZXIgKi9cbiBcdGlmIChzdGEtXHUwMDNlc3RhLnZhbGlkX2xpbmtzKVxuIFx0XHRsaW5rX2lkID0gZmZzKHN0YS1cdTAwM2VzdGEudmFsaWRfbGlua3MpIC0gMTtcbiBcbkBAIC00OTE0LDIwICs0OTM4LDE0IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF84MDIzKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXG4ge1xuIFx0c3RydWN0IGllZWU4MDIxMV9zdGFfcnhfc3RhdHMgKnN0YXRzO1xuIFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihyeC1cdTAwM2Vza2IpO1xuLVx0c3RydWN0IHN0YV9pbmZvICpzdGEgPSByeC1cdTAwM2VzdGE7XG4tXHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGE7XG4rXHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEgPSByeC1cdTAwM2VsaW5rX3N0YTtcbiBcdHN0cnVjdCBza19idWZmICpza2IgPSByeC1cdTAwM2Vza2I7XG4gXHR2b2lkICpzYSA9IHNrYi1cdTAwM2VkYXRhICsgRVRIX0FMRU47XG4gXHR2b2lkICpkYSA9IHNrYi1cdTAwM2VkYXRhO1xuIFxuLVx0aWYgKHJ4LVx1MDAzZWxpbmtfaWQgXHUwMDNlPSAwKSB7XG4tXHRcdGxpbmtfc3RhID0gcmN1X2RlcmVmZXJlbmNlKHN0YS1cdTAwM2VsaW5rW3J4LVx1MDAzZWxpbmtfaWRdKTtcbi1cdFx0aWYgKFdBUk5fT05fT05DRSghbGlua19zdGEpKSB7XG4tXHRcdFx0ZGV2X2tmcmVlX3NrYihyeC1cdTAwM2Vza2IpO1xuLVx0XHRcdHJldHVybjtcbi1cdFx0fVxuLVx0fSBlbHNlIHtcbi1cdFx0bGlua19zdGEgPSBcdTAwMjZzdGEtXHUwMDNlZGVmbGluaztcbitcdGlmIChXQVJOX09OX09OQ0UoIWxpbmtfc3RhKSkge1xuK1x0XHRkZXZfa2ZyZWVfc2tiKHJ4LVx1MDAzZXNrYik7XG4rXHRcdHJldHVybjtcbiBcdH1cbiBcbiBcdHN0YXRzID0gXHUwMDI2bGlua19zdGEtXHUwMDNlcnhfc3RhdHM7XG5AQCAtNTE1NCw2ICs1MTcyLDkgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX2ludm9rZV9mYXN0X3J4KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXG4gXHRcdGdvdG8gZHJvcDtcbiBcdH1cbiBcbitcdHN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpO1xuK1x0c3RhdHVzLVx1MDAzZWxpbmtfaWQgPSByeC1cdTAwM2VsaW5rX2lkIFx1MDAzYyAwID8gMCA6IHJ4LVx1MDAzZWxpbmtfaWQ7XG4rXG4gXHRpZWVlODAyMTFfcnhfODAyMyhyeCwgZmFzdF9yeCwgb3JpZ19sZW4pO1xuIFxuIFx0cmV0dXJuIHRydWU7XG5AQCAtNTE3OCw2ICs1MTk5LDcgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxuIFx0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9ICh2b2lkICopc2tiLVx1MDAzZWRhdGE7XG4gXHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEgPSByeC1cdTAwM2VsaW5rX3N0YTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rID0gcngtXHUwMDNlbGluaztcbitcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXM7XG4gXG4gXHRyeC1cdTAwM2Vza2IgPSBza2I7XG4gXG5AQCAtNTIyMSw2ICs1MjQzLDkgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxuIFx0XHRoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilyeC1cdTAwM2Vza2ItXHUwMDNlZGF0YTtcbiBcdH1cbiBcbitcdHN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihyeC1cdTAwM2Vza2IpO1xuK1x0c3RhdHVzLVx1MDAzZWxpbmtfaWQgPSByeC1cdTAwM2VsaW5rX2lkIFx1MDAzYyAwID8gMCA6IHJ4LVx1MDAzZWxpbmtfaWQ7XG4rXG4gXHRpZiAoaWVlZTgwMjExX2lzX3MxZ19iZWFjb24oaGRyLVx1MDAzZWZyYW1lX2NvbnRyb2wpKSB7XG4gXHRcdGllZWU4MDIxMV9pbnZva2VfcnhfaGFuZGxlcnMocngpO1xuIFx0XHRyZXR1cm4gdHJ1ZTtcbkBAIC01MjU2LDIyICs1MjgxLDE5IEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlXzgwMjMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3B1YnN0YSxcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4ge1xuIFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7XG4tXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2Zhc3RfcnggKmZhc3Rfcng7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgcng7XG4gXHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YTtcbi1cdGludCBsaW5rX2lkID0gLTE7XG4gXG4gXHRtZW1zZXQoXHUwMDI2cngsIDAsIHNpemVvZihyeCkpO1xuIFx0cnguc2tiID0gc2tiO1xuIFx0cngubG9jYWwgPSBsb2NhbDtcbiBcdHJ4Lmxpc3QgPSBsaXN0O1xuLVx0cngubGlua19pZCA9IC0xO1xuIFxuIFx0STgwMl9ERUJVR19JTkMobG9jYWwtXHUwMDNlZG90MTFSZWNlaXZlZEZyYWdtZW50Q291bnQpO1xuIFxuQEAgLTUyNzksMjMgKzUzMDEsMTUgQEAgc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlXzgwMjMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gXHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBldGhoZHIpKVxuIFx0XHRnb3RvIGRyb3A7XG4gXG4tXHRpZiAoIXB1YnN0YSlcbitcdGlmICghbGlua19wdWJzdGEpXG4gXHRcdGdvdG8gZHJvcDtcbiBcbi1cdGlmIChzdGF0dXMtXHUwMDNlbGlua192YWxpZClcbi1cdFx0bGlua19pZCA9IHN0YXR1cy1cdTAwM2VsaW5rX2lkO1xuLVxuLVx0Lypcbi1cdCAqIFRPRE86IFNob3VsZCB0aGUgZnJhbWUgYmUgZHJvcHBlZCBpZiB0aGUgcmlnaHQgbGlua19pZCBpcyBub3Rcbi1cdCAqIGF2YWlsYWJsZT8gT3IgbWF5IGJlIGl0IGlzIGZpbmUgaW4gdGhlIGN1cnJlbnQgZm9ybSB0byBwcm9jZWVkIHdpdGhcbi1cdCAqIHRoZSBmcmFtZSBwcm9jZXNzaW5nIGJlY2F1c2Ugd2l0aCBmcmFtZSBiZWluZyBpbiA4MDIuMyBmb3JtYXQsXG4tXHQgKiBsaW5rX2lkIGlzIHVzZWQgb25seSBmb3Igc3RhdHMgcHVycG9zZSBhbmQgdXBkYXRpbmcgdGhlIHN0YXRzIG9uXG4tXHQgKiB0aGUgZGVmbGluayBpcyBmaW5lP1xuLVx0ICovXG4tXHRzdGEgPSBjb250YWluZXJfb2YocHVic3RhLCBzdHJ1Y3Qgc3RhX2luZm8sIHN0YSk7XG4tXHRpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEoXHUwMDI2cngsIHN0YSwgbGlua19pZCkpXG4rXHRzdGEgPSBjb250YWluZXJfb2YobGlua19wdWJzdGEtXHUwMDNlc3RhLCBzdHJ1Y3Qgc3RhX2luZm8sIHN0YSk7XG4rXHRpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEoXHUwMDI2cngsIHN0YSwgbGlua19wdWJzdGEtXHUwMDNlbGlua19pZCkpXG4gXHRcdGdvdG8gZHJvcDtcbiBcbitcdHJ4LmxpbmtfaWQgPSBsaW5rX3B1YnN0YS1cdTAwM2VsaW5rX2lkO1xuK1xuIFx0ZmFzdF9yeCA9IHJjdV9kZXJlZmVyZW5jZShyeC5zdGEtXHUwMDNlZmFzdF9yeCk7XG4gXHRpZiAoIWZhc3RfcngpXG4gXHRcdGdvdG8gZHJvcDtcbkBAIC01MzA3LDU5ICs1MzIxLDE5IEBAIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J4X2hhbmRsZV84MDIzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuIFx0ZGV2X2tmcmVlX3NrYihza2IpO1xuIH1cbiBcbi1zdGF0aWMgYm9vbCBpZWVlODAyMTFfcnhfZm9yX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgY29uc3VtZSlcbitzdGF0aWMgYm9vbCBpZWVlODAyMTFfcnhfdmFsaWRfZnJlcShpbnQgZnJlcSwgc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmspXG4ge1xuLVx0c3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhO1xuLVx0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9ICh2b2lkICopc2tiLVx1MDAzZWRhdGE7XG4tXHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YTtcbi1cdGludCBsaW5rX2lkID0gLTE7XG4tXG4tXHRpZiAoaWVlZTgwMjExX2lzX3MxZ19iZWFjb24oaGRyLVx1MDAzZWZyYW1lX2NvbnRyb2wpKSB7XG4tXHRcdGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X3N0YShyeCwgTlVMTCwgLTEpKVxuLVx0XHRcdHJldHVybiBmYWxzZTtcbi1cbi1cdFx0cmV0dXJuIGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUocngsIHNrYiwgY29uc3VtZSk7XG4tXHR9XG4rXHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZjtcbiBcbi1cdC8qXG4tXHQgKiBMb29rIHVwIGxpbmsgc3RhdGlvbiBmaXJzdCwgaW4gY2FzZSB0aGVyZSdzIGFcbi1cdCAqIGNoYW5jZSB0aGF0IHRoZXkgbWlnaHQgaGF2ZSBhIGxpbmsgYWRkcmVzcyB0aGF0XG4tXHQgKiBpcyBpZGVudGljYWwgdG8gdGhlIE1MRCBhZGRyZXNzLCB0aGF0IHdheSB3ZSdsbFxuLVx0ICogaGF2ZSB0aGUgbGluayBpbmZvcm1hdGlvbiBpZiBuZWVkZWQuXG4tXHQgKi9cbi1cdGxpbmtfc3RhID0gbGlua19zdGFfaW5mb19nZXRfYnNzKHJ4LVx1MDAzZXNkYXRhLCBoZHItXHUwMDNlYWRkcjIpO1xuLVx0aWYgKGxpbmtfc3RhKSB7XG4tXHRcdHN0YSA9IGxpbmtfc3RhLVx1MDAzZXN0YTtcbi1cdFx0bGlua19pZCA9IGxpbmtfc3RhLVx1MDAzZWxpbmtfaWQ7XG4tXHR9IGVsc2Uge1xuLVx0XHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4tXG4tXHRcdHN0YSA9IHN0YV9pbmZvX2dldF9ic3MocngtXHUwMDNlc2RhdGEsIGhkci1cdTAwM2VhZGRyMik7XG4tXHRcdGlmIChzdGF0dXMtXHUwMDNlbGlua192YWxpZCkge1xuLVx0XHRcdGxpbmtfaWQgPSBzdGF0dXMtXHUwMDNlbGlua19pZDtcbi1cdFx0fSBlbHNlIGlmIChpZWVlODAyMTFfdmlmX2lzX21sZChcdTAwMjZyeC1cdTAwM2VzZGF0YS1cdTAwM2V2aWYpIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgIHN0YXR1cy1cdTAwM2VmcmVxKSB7XG4tXHRcdFx0c3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbms7XG4tXHRcdFx0c3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmY7XG4tXG4tXHRcdFx0Zm9yX2VhY2hfbGlua19kYXRhX3JjdShyeC1cdTAwM2VzZGF0YSwgbGluaykge1xuLVx0XHRcdFx0Y29uZiA9IHJjdV9kZXJlZmVyZW5jZShsaW5rLVx1MDAzZWNvbmYtXHUwMDNlY2hhbmN0eF9jb25mKTtcbi1cdFx0XHRcdGlmICghY29uZiB8fCAhY29uZi1cdTAwM2VkZWYuY2hhbilcbi1cdFx0XHRcdFx0Y29udGludWU7XG4tXG4tXHRcdFx0XHRpZiAoc3RhdHVzLVx1MDAzZWZyZXEgPT0gY29uZi1cdTAwM2VkZWYuY2hhbi1cdTAwM2VjZW50ZXJfZnJlcSkge1xuLVx0XHRcdFx0XHRsaW5rX2lkID0gbGluay1cdTAwM2VsaW5rX2lkO1xuLVx0XHRcdFx0XHRicmVhaztcbi1cdFx0XHRcdH1cbi1cdFx0XHR9XG4tXHRcdH1cbi1cdH1cbitcdGlmICghZnJlcSB8fCBsaW5rLVx1MDAzZXNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX05BTiB8fFxuK1x0ICAgIGxpbmstXHUwMDNlc2RhdGEtXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTkFOX0RBVEEpXG4rXHRcdHJldHVybiB0cnVlO1xuIFxuLVx0aWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfc3RhKHJ4LCBzdGEsIGxpbmtfaWQpKVxuK1x0Y29uZiA9IHJjdV9kZXJlZmVyZW5jZShsaW5rLVx1MDAzZWNvbmYtXHUwMDNlY2hhbmN0eF9jb25mKTtcbitcdGlmICghY29uZiB8fCAhY29uZi1cdTAwM2VkZWYuY2hhbilcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0cmV0dXJuIGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUocngsIHNrYiwgY29uc3VtZSk7XG4rXHRyZXR1cm4gZnJlcSA9PSBjb25mLVx1MDAzZWRlZi5jaGFuLVx1MDAzZWNlbnRlcl9mcmVxO1xuIH1cbiBcbiAvKlxuQEAgLTUzNjcsMTggKzUzNDEsMjAgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX3J4X2Zvcl9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcbiAgKiBiZSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrIHByb3RlY3Rpb24uXG4gICovXG4gc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi1cdFx0XHRcdFx0IHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsXG4rXHRcdFx0XHRcdCBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3B1YnN0YSxcbiBcdFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHRcdCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxuIHtcbiBcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpO1xuLVx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpO1xuIFx0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7XG4rXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyO1xuK1x0c3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhO1xuK1x0c3RydWN0IHN0YV9pbmZvICpzdGE7XG4gXHRfX2xlMTYgZmM7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgcng7XG4tXHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpwcmV2O1xuIFx0c3RydWN0IHJobGlzdF9oZWFkICp0bXA7XG4rXHRib29sIHJ4X2RhdGFfcGVuZGluZztcbiBcdGludCBlcnIgPSAwO1xuIFxuIFx0ZmMgPSAoKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLVx1MDAzZWRhdGEpLVx1MDAzZWZyYW1lX2NvbnRyb2w7XG5AQCAtNTM4Niw3ICs1MzYyLDYgQEAgc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcdHJ4LnNrYiA9IHNrYjtcbiBcdHJ4LmxvY2FsID0gbG9jYWw7XG4gXHRyeC5saXN0ID0gbGlzdDtcbi1cdHJ4LmxpbmtfaWQgPSAtMTtcbiBcbiBcdGlmIChpZWVlODAyMTFfaXNfZGF0YShmYykgfHwgaWVlZTgwMjExX2lzX21nbXQoZmMpKVxuIFx0XHRJODAyX0RFQlVHX0lOQyhsb2NhbC1cdTAwM2Vkb3QxMVJlY2VpdmVkRnJhZ21lbnRDb3VudCk7XG5AQCAtNTQyNiw5NyArNTQwMSwxMDIgQEAgc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcdFx0ICAgICBpZWVlODAyMTFfaXNfczFnX2JlYWNvbihoZHItXHUwMDNlZnJhbWVfY29udHJvbCkpKVxuIFx0XHRpZWVlODAyMTFfc2Nhbl9yeChsb2NhbCwgc2tiKTtcbiBcbitcdC8qXG4rXHQgKiBSWCBvZiBhIGRhdGEgZnJhbWUgc2hvdWxkIG9ubHkgaGFwcGVuIHRvIGV4aXN0aW5nIHN0YXRpb25zLlxuK1x0ICogSXQgaXMgdGhlcmVmb3JlIG1vcmUgZWZmaWNpZW50IHRvIHVzZSB0aGUgb25lIHByb3ZpZGVkIGJ5IHRoZSBkcml2ZXJcbitcdCAqIG9yIHNlYXJjaCBiYXNlZCBvbiB0aGUgc3RhdGlvbidzIGFkZHJlc3MuXG4rXHQgKlxuK1x0ICogTm90ZSB3ZSB3aWxsIGZhbGwgdGhyb3VnaCBhbmQgaGFuZGxlIGEgc3B1cmlvdXMgZGF0YSBmcmFtZSBpbiB0aGVcbitcdCAqIHNhbWUgd2F5IGFzIGEgbWFuYWdlbWVudCBmcmFtZS5cbitcdCAqL1xuIFx0aWYgKGllZWU4MDIxMV9pc19kYXRhKGZjKSkge1xuLVx0XHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgKnByZXZfc3RhO1xuLVx0XHRpbnQgbGlua19pZCA9IC0xO1xuLVxuLVx0XHRpZiAoc3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQpXG4tXHRcdFx0bGlua19pZCA9IHN0YXR1cy1cdTAwM2VsaW5rX2lkO1xuLVxuLVx0XHRpZiAocHVic3RhKSB7XG4tXHRcdFx0c3RhID0gY29udGFpbmVyX29mKHB1YnN0YSwgc3RydWN0IHN0YV9pbmZvLCBzdGEpO1xuLVx0XHRcdGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X3N0YShcdTAwMjZyeCwgc3RhLCBsaW5rX2lkKSlcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVxuLVx0XHRcdC8qXG4tXHRcdFx0ICogSW4gTUxPIGNvbm5lY3Rpb24sIGZldGNoIHRoZSBsaW5rX2lkIHVzaW5nIGFkZHIyXG4tXHRcdFx0ICogd2hlbiB0aGUgZHJpdmVyIGRvZXMgbm90IHBhc3MgbGlua19pZCBpbiBzdGF0dXMuXG4tXHRcdFx0ICogV2hlbiB0aGUgYWRkcmVzcyB0cmFuc2xhdGlvbiBpcyBhbHJlYWR5IHBlcmZvcm1lZCBieVxuLVx0XHRcdCAqIGRyaXZlci9odywgdGhlIHZhbGlkIGxpbmtfaWQgbXVzdCBiZSBwYXNzZWQgaW5cbi1cdFx0XHQgKiBzdGF0dXMuXG4tXHRcdFx0ICovXG4tXG4tXHRcdFx0aWYgKCFzdGF0dXMtXHUwMDNlbGlua192YWxpZCBcdTAwMjZcdTAwMjYgcHVic3RhLVx1MDAzZW1sbykge1xuLVx0XHRcdFx0c3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhO1xuLVxuLVx0XHRcdFx0bGlua19zdGEgPSBsaW5rX3N0YV9pbmZvX2dldF9ic3Mocnguc2RhdGEsXG4tXHRcdFx0XHRcdFx0XHRcdCBoZHItXHUwMDNlYWRkcjIpO1xuLVx0XHRcdFx0aWYgKCFsaW5rX3N0YSlcbi1cdFx0XHRcdFx0Z290byBvdXQ7XG4tXG4tXHRcdFx0XHRpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9saW5rKFx1MDAyNnJ4LFxuLVx0XHRcdFx0XHRcdFx0XHRsaW5rX3N0YS1cdTAwM2VsaW5rX2lkKSlcbi1cdFx0XHRcdFx0Z290byBvdXQ7XG4tXHRcdFx0fVxuLVxuLVx0XHRcdGlmIChpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKFx1MDAyNnJ4LCBza2IsIHRydWUpKVxuK1x0XHRpZiAobGlua19wdWJzdGEpIHtcbitcdFx0XHRzdGEgPSBjb250YWluZXJfb2YobGlua19wdWJzdGEtXHUwMDNlc3RhLCBzdHJ1Y3Qgc3RhX2luZm8sXG4rXHRcdFx0XHRcdCAgIHN0YSk7XG4rXHRcdFx0bGlua19zdGEgPSByY3VfZGVyZWZlcmVuY2Uoc3RhLVx1MDAzZWxpbmtbbGlua19wdWJzdGEtXHUwMDNlbGlua19pZF0pO1xuK1xuK1x0XHRcdHJ4LnNkYXRhID0gc3RhLVx1MDAzZXNkYXRhO1xuK1x0XHRcdGlmIChpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGlua19zdGEoXHUwMDI2cngsIGxpbmtfc3RhKSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShcdTAwMjZyeCwgc2tiLCB0cnVlKSlcbiBcdFx0XHRcdHJldHVybjtcbitcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuLVx0XHRwcmV2X3N0YSA9IE5VTEw7XG4rXHRcdHJ4X2RhdGFfcGVuZGluZyA9IGZhbHNlO1xuIFxuK1x0XHQvKiBTZWFyY2ggZm9yIHN0YXRpb25zIG9uIG5vbi1NTEQgaW50ZXJmYWNlcyAqL1xuIFx0XHRmb3JfZWFjaF9zdGFfaW5mbyhsb2NhbCwgaGRyLVx1MDAzZWFkZHIyLCBzdGEsIHRtcCkge1xuLVx0XHRcdGlmICghcHJldl9zdGEpIHtcbi1cdFx0XHRcdHByZXZfc3RhID0gc3RhO1xuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0fVxuK1x0XHRcdHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rO1xuIFxuLVx0XHRcdHJ4LnNkYXRhID0gcHJldl9zdGEtXHUwMDNlc2RhdGE7XG4tXHRcdFx0aWYgKCFzdGF0dXMtXHUwMDNlbGlua192YWxpZCBcdTAwMjZcdTAwMjYgcHJldl9zdGEtXHUwMDNlc3RhLm1sbykge1xuLVx0XHRcdFx0c3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhO1xuK1x0XHRcdGlmIChpZWVlODAyMTFfdmlmX2lzX21sZChcdTAwMjZzdGEtXHUwMDNlc2RhdGEtXHUwMDNldmlmKSlcbitcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdFx0bGlua19zdGEgPSBsaW5rX3N0YV9pbmZvX2dldF9ic3Mocnguc2RhdGEsXG4tXHRcdFx0XHRcdFx0XHRcdCBoZHItXHUwMDNlYWRkcjIpO1xuLVx0XHRcdFx0aWYgKCFsaW5rX3N0YSlcbi1cdFx0XHRcdFx0Y29udGludWU7XG4rXHRcdFx0bGluayA9IFx1MDAyNnN0YS1cdTAwM2VzZGF0YS1cdTAwM2VkZWZsaW5rO1xuK1x0XHRcdGlmICghaWVlZTgwMjExX3J4X3ZhbGlkX2ZyZXEoc3RhdHVzLVx1MDAzZWZyZXEsIGxpbmspKVxuK1x0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0XHRsaW5rX2lkID0gbGlua19zdGEtXHUwMDNlbGlua19pZDtcbitcdFx0XHRpZiAocnhfZGF0YV9wZW5kaW5nKSB7XG4rXHRcdFx0XHRpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKFx1MDAyNnJ4LCBza2IsXG4rXHRcdFx0XHRcdFx0XHRcdGZhbHNlKTtcbitcdFx0XHRcdHJ4X2RhdGFfcGVuZGluZyA9IGZhbHNlO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHRpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEoXHUwMDI2cngsIHByZXZfc3RhLCBsaW5rX2lkKSlcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVxuLVx0XHRcdGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoXHUwMDI2cngsIHNrYiwgZmFsc2UpO1xuK1x0XHRcdHJ4LnNkYXRhID0gc3RhLVx1MDAzZXNkYXRhO1xuK1x0XHRcdGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X2xpbmtfc3RhKFx1MDAyNnJ4LCBcdTAwMjZzdGEtXHUwMDNlZGVmbGluaykpXG4rXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRwcmV2X3N0YSA9IHN0YTtcbitcdFx0XHRyeF9kYXRhX3BlbmRpbmcgPSB0cnVlO1xuIFx0XHR9XG4gXG4tXHRcdGlmIChwcmV2X3N0YSkge1xuLVx0XHRcdHJ4LnNkYXRhID0gcHJldl9zdGEtXHUwMDNlc2RhdGE7XG4tXHRcdFx0aWYgKCFzdGF0dXMtXHUwMDNlbGlua192YWxpZCBcdTAwMjZcdTAwMjYgcHJldl9zdGEtXHUwMDNlc3RhLm1sbykge1xuLVx0XHRcdFx0c3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhO1xuK1x0XHQvKiBBbmQgc2VhcmNoIHN0YXRpb25zIG9uIE1MRCBpbnRlcmZhY2VzICovXG4rXHRcdGZvcl9lYWNoX2xpbmtfc3RhX2luZm8obG9jYWwsIGhkci1cdTAwM2VhZGRyMiwgbGlua19zdGEsIHRtcCkge1xuK1x0XHRcdHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rO1xuIFxuLVx0XHRcdFx0bGlua19zdGEgPSBsaW5rX3N0YV9pbmZvX2dldF9ic3Mocnguc2RhdGEsXG4tXHRcdFx0XHRcdFx0XHRcdCBoZHItXHUwMDNlYWRkcjIpO1xuLVx0XHRcdFx0aWYgKCFsaW5rX3N0YSlcbi1cdFx0XHRcdFx0Z290byBvdXQ7XG4rXHRcdFx0c3RhID0gbGlua19zdGEtXHUwMDNlc3RhO1xuK1x0XHRcdHNkYXRhID1cdHN0YS1cdTAwM2VzZGF0YTtcbitcdFx0XHRsaW5rID0gcmN1X2RlcmVmZXJlbmNlKHNkYXRhLVx1MDAzZWxpbmtbbGlua19zdGEtXHUwMDNlbGlua19pZF0pO1xuIFxuLVx0XHRcdFx0bGlua19pZCA9IGxpbmtfc3RhLVx1MDAzZWxpbmtfaWQ7XG4rXHRcdFx0aWYgKCFpZWVlODAyMTFfcnhfdmFsaWRfZnJlcShzdGF0dXMtXHUwMDNlZnJlcSwgbGluaykpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbitcdFx0XHRpZiAocnhfZGF0YV9wZW5kaW5nKSB7XG4rXHRcdFx0XHRpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKFx1MDAyNnJ4LCBza2IsXG4rXHRcdFx0XHRcdFx0XHRcdGZhbHNlKTtcbitcdFx0XHRcdHJ4X2RhdGFfcGVuZGluZyA9IGZhbHNlO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHRpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEoXHUwMDI2cngsIHByZXZfc3RhLCBsaW5rX2lkKSlcbi1cdFx0XHRcdGdvdG8gb3V0O1xuK1x0XHRcdHJ4LnNkYXRhID0gc3RhLVx1MDAzZXNkYXRhO1xuK1x0XHRcdGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X2xpbmtfc3RhKFx1MDAyNnJ4LCBsaW5rX3N0YSkpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbitcdFx0XHRyeF9kYXRhX3BlbmRpbmcgPSB0cnVlO1xuK1x0XHR9XG4gXG4rXHRcdGlmIChyeF9kYXRhX3BlbmRpbmcpIHtcbiBcdFx0XHRpZiAoaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShcdTAwMjZyeCwgc2tiLCB0cnVlKSlcbiBcdFx0XHRcdHJldHVybjtcbitcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuK1xuK1x0XHQvKiBmYWxsIHRocm91Z2gsIGUuZy4gZm9yIHNwdXJpb3VzIGZyYW1lIG5vdGlmaWNhdGlvbiAqL1xuIFx0fVxuIFxuLVx0cHJldiA9IE5VTEw7XG4rXHQvKlxuK1x0ICogVGhpcyBpcyBhIG1hbmFnZW1lbnQgZnJhbWUgKG9yIGEgZGF0YSBmcmFtZSB3aXRob3V0IGEgc3RhdGlvbikgYW5kXG4rXHQgKiBpdCB3aWxsIGJlIGRlbGl2ZXJlZCBpbmRlcGVuZGVudCBvZiB3aGV0aGVyIGEgc3RhdGlvbiBleGlzdHMsXG4rXHQgKiBzbyBpdGVyYXRlIHRoZSBpbnRlcmZhY2VzLlxuK1x0ICovXG4rXHRyeF9kYXRhX3BlbmRpbmcgPSBmYWxzZTtcbitcbitcdC8qIFdlIGV4cGVjdCB0aGUgZHJpdmVyIHRvIHByb3ZpZGUgZnJlcXVlbmN5IGluZm9ybWF0aW9uICovXG4rXHRpZiAoV0FSTl9PTl9PTkNFKCFsb2NhbC1cdTAwM2VlbXVsYXRlX2NoYW5jdHggXHUwMDI2XHUwMDI2ICFzdGF0dXMtXHUwMDNlZnJlcSkpXG4rXHRcdGdvdG8gb3V0O1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2RhdGEsIFx1MDAyNmxvY2FsLVx1MDAzZWludGVyZmFjZXMsIGxpc3QpIHtcbitcdFx0c3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmsgPSBOVUxMO1xuK1xuIFx0XHRpZiAoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbkBAIC01NTI0LDMwICs1NTA0LDg1IEBAIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gXHRcdCAgICBzZGF0YS1cdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuK1x0XHRsaW5rX3N0YSA9IE5VTEw7XG4rXHRcdGxpbmsgPSBOVUxMO1xuK1xuK1x0XHQvKiBUcnkgdG8gcmVzb2x2ZSB0aGUgc3RhdGlvbiAqL1xuK1x0XHRpZiAoIWllZWU4MDIxMV92aWZfaXNfbWxkKFx1MDAyNnNkYXRhLVx1MDAzZXZpZikpIHtcbitcdFx0XHRzdGEgPSBzdGFfaW5mb19nZXRfYnNzKHNkYXRhLCBoZHItXHUwMDNlYWRkcjIpO1xuK1xuK1x0XHRcdGlmIChzdGEpIHtcbitcdFx0XHRcdGxpbmtfc3RhID0gXHUwMDI2c3RhLVx1MDAzZWRlZmxpbms7XG4rXHRcdFx0XHRsaW5rID0gXHUwMDI2c2RhdGEtXHUwMDNlZGVmbGluaztcbitcdFx0XHR9XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0bGlua19zdGEgPSBsaW5rX3N0YV9pbmZvX2dldF9ic3Moc2RhdGEsIGhkci1cdTAwM2VhZGRyMik7XG4rXG4rXHRcdFx0aWYgKGxpbmtfc3RhKVxuK1x0XHRcdFx0bGluayA9IHJjdV9kZXJlZmVyZW5jZShzZGF0YS1cdTAwM2VsaW5rW2xpbmtfc3RhLVx1MDAzZWxpbmtfaWRdKTtcbitcdFx0fVxuK1xuIFx0XHQvKlxuLVx0XHQgKiBmcmFtZSBpcyBkZXN0aW5lZCBmb3IgdGhpcyBpbnRlcmZhY2UsIGJ1dCBpZiBpdCdzXG4tXHRcdCAqIG5vdCBhbHNvIGZvciB0aGUgcHJldmlvdXMgb25lIHdlIGhhbmRsZSB0aGF0IGFmdGVyXG4tXHRcdCAqIHRoZSBsb29wIHRvIGF2b2lkIGNvcHlpbmcgdGhlIFNLQiBvbmNlIHRvbyBtdWNoXG4rXHRcdCAqIElmIHdlIGZvdW5kIGEgU1RBIGFuZCBpdCBoYXMgYSB2YWxpZCBsaW5rIGluZm9ybWF0aW9uLCB0aGVuXG4rXHRcdCAqIFJYIHVzaW5nIHRoZSBzdGF0aW9uLlxuIFx0XHQgKi9cbitcdFx0aWYgKGxpbmtfc3RhIFx1MDAyNlx1MDAyNiBsaW5rIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgaWVlZTgwMjExX3J4X3ZhbGlkX2ZyZXEoc3RhdHVzLVx1MDAzZWZyZXEsIGxpbmspKSB7XG4rXHRcdFx0aWYgKHJ4X2RhdGFfcGVuZGluZykge1xuK1x0XHRcdFx0aWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShcdTAwMjZyeCwgc2tiLCBmYWxzZSk7XG4rXHRcdFx0XHRyeF9kYXRhX3BlbmRpbmcgPSBmYWxzZTtcbitcdFx0XHR9XG4rXG4rXHRcdFx0LyogTm8gdmFsaWRfbGlua3MgY2hlY2sgYXMgd2UgbmVlZCB0byBSWCBiZWFjb25zICovXG4rXG4rXHRcdFx0cnguc2RhdGEgPSBzZGF0YTtcbitcdFx0XHRpZiAoaWVlZTgwMjExX3J4X2RhdGFfc2V0X2xpbmtfc3RhKFx1MDAyNnJ4LCBsaW5rX3N0YSkpXG4rXHRcdFx0XHRyeF9kYXRhX3BlbmRpbmcgPSB0cnVlO1xuIFxuLVx0XHRpZiAoIXByZXYpIHtcbi1cdFx0XHRwcmV2ID0gc2RhdGE7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbi1cdFx0cnguc2RhdGEgPSBwcmV2O1xuLVx0XHRpZWVlODAyMTFfcnhfZm9yX2ludGVyZmFjZShcdTAwMjZyeCwgc2tiLCBmYWxzZSk7XG4rXHRcdC8qIE5vIHN0YXRpb24sIHRyeSB0byByZXNvbHZlIHRoZSBsaW5rIGFuZCBSWCAqL1xuK1x0XHRpZiAoaWVlZTgwMjExX3ZpZl9pc19tbGQoXHUwMDI2c2RhdGEtXHUwMDNldmlmKSkge1xuK1x0XHRcdHN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjb25mO1xuK1x0XHRcdGJvb2wgZm91bmQgPSBmYWxzZTtcbiBcbi1cdFx0cHJldiA9IHNkYXRhO1xuLVx0fVxuK1x0XHRcdGZvcl9lYWNoX2xpbmtfZGF0YV9yY3Uoc2RhdGEsIGxpbmspIHtcbitcdFx0XHRcdGNvbmYgPSByY3VfZGVyZWZlcmVuY2UobGluay1cdTAwM2Vjb25mLVx1MDAzZWNoYW5jdHhfY29uZik7XG4rXHRcdFx0XHRpZiAoIWNvbmYgfHwgIWNvbmYtXHUwMDNlZGVmLmNoYW4pXG4rXHRcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0aWYgKHByZXYpIHtcbi1cdFx0cnguc2RhdGEgPSBwcmV2O1xuK1x0XHRcdFx0aWYgKHN0YXR1cy1cdTAwM2VmcmVxID09IGNvbmYtXHUwMDNlZGVmLmNoYW4tXHUwMDNlY2VudGVyX2ZyZXEpIHtcbitcdFx0XHRcdFx0Zm91bmQgPSB0cnVlO1xuK1x0XHRcdFx0XHRicmVhaztcbitcdFx0XHRcdH1cbitcdFx0XHR9XG4gXG4tXHRcdGlmIChpZWVlODAyMTFfcnhfZm9yX2ludGVyZmFjZShcdTAwMjZyeCwgc2tiLCB0cnVlKSlcbi1cdFx0XHRyZXR1cm47XG4rXHRcdFx0aWYgKCFmb3VuZClcbitcdFx0XHRcdGxpbmsgPSBcdTAwMjZzZGF0YS1cdTAwM2VkZWZsaW5rO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGxpbmsgPSBcdTAwMjZzZGF0YS1cdTAwM2VkZWZsaW5rO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChyeF9kYXRhX3BlbmRpbmcpIHtcbitcdFx0XHRpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKFx1MDAyNnJ4LCBza2IsIGZhbHNlKTtcbitcdFx0XHRyeF9kYXRhX3BlbmRpbmcgPSBmYWxzZTtcbitcdFx0fVxuK1xuK1x0XHRyeC5zZGF0YSA9IHNkYXRhO1xuK1x0XHRyeC5sb2NhbCA9IHNkYXRhLVx1MDAzZWxvY2FsO1xuK1x0XHRyeC5saW5rID0gbGluaztcbitcdFx0cngubGlua19pZCA9IGxpbmstXHUwMDNlbGlua19pZDtcbitcdFx0cnguc3RhID0gTlVMTDtcbitcdFx0cngubGlua19zdGEgPSBOVUxMO1xuK1xuK1x0XHRyeF9kYXRhX3BlbmRpbmcgPSB0cnVlO1xuIFx0fVxuIFxuK1x0aWYgKHJ4X2RhdGFfcGVuZGluZyBcdTAwMjZcdTAwMjZcbitcdCAgICBpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKFx1MDAyNnJ4LCBza2IsIHRydWUpKVxuK1x0XHRyZXR1cm47XG4rXG4gIG91dDpcbiBcdGRldl9rZnJlZV9za2Ioc2tiKTtcbiB9XG5AQCAtNTU1Niw3ICs1NTkxLDggQEAgc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiAgKiBUaGlzIGlzIHRoZSByZWNlaXZlIHBhdGggaGFuZGxlci4gSXQgaXMgY2FsbGVkIGJ5IGEgbG93IGxldmVsIGRyaXZlciB3aGVuIGFuXG4gICogODAyLjExIE1QRFUgaXMgcmVjZWl2ZWQgZnJvbSB0aGUgaGFyZHdhcmUuXG4gICovXG4tdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSxcbit2b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuK1x0XHQgICAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19wdWJzdGEsXG4gXHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxuIHtcbiBcdHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpO1xuQEAgLTU2OTQsOSArNTczMCw2IEBAIHZvaWQgaWVlZTgwMjExX3J4X2xpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlmIChXQVJOX09OX09OQ0Uoc3RhdHVzLVx1MDAzZWxpbmtfaWQgXHUwMDNlPSBJRUVFODAyMTFfTElOS19VTlNQRUNJRklFRCkpXG4tXHRcdGdvdG8gZHJvcDtcbi1cbiBcdHN0YXR1cy1cdTAwM2VyeF9mbGFncyA9IDA7XG4gXG4gXHRrY292X3JlbW90ZV9zdGFydF9jb21tb24oc2tiX2dldF9rY292X2hhbmRsZShza2IpKTtcbkBAIC01NzE1LDkgKzU3NDgsMTAgQEAgdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSxcbiBcdFx0XHRpZWVlODAyMTFfdHB0X2xlZF90cmlnX3J4KGxvY2FsLCBza2ItXHUwMDNlbGVuKTtcbiBcbiBcdFx0aWYgKHN0YXR1cy1cdTAwM2VmbGFnIFx1MDAyNiBSWF9GTEFHXzgwMjMpXG4tXHRcdFx0X19pZWVlODAyMTFfcnhfaGFuZGxlXzgwMjMoaHcsIHB1YnN0YSwgc2tiLCBsaXN0KTtcbitcdFx0XHRfX2llZWU4MDIxMV9yeF9oYW5kbGVfODAyMyhodywgbGlua19wdWJzdGEsIHNrYiwgbGlzdCk7XG4gXHRcdGVsc2Vcbi1cdFx0XHRfX2llZWU4MDIxMV9yeF9oYW5kbGVfcGFja2V0KGh3LCBwdWJzdGEsIHNrYiwgbGlzdCk7XG4rXHRcdFx0X19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChodywgbGlua19wdWJzdGEsIHNrYixcbitcdFx0XHRcdFx0XHQgICAgIGxpc3QpO1xuIFx0fVxuIFxuIFx0a2Nvdl9yZW1vdGVfc3RvcCgpO1xuQEAgLTU3MjcsNyArNTc2MSw4IEBAIHZvaWQgaWVlZTgwMjExX3J4X2xpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsXG4gfVxuIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3J4X2xpc3QpO1xuIFxuLXZvaWQgaWVlZTgwMjExX3J4X25hcGkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsXG4rdm9pZCBpZWVlODAyMTFfcnhfbmFwaShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbitcdFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfcHVic3RhLFxuIFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKVxuIHtcbiBcdHN0cnVjdCBza19idWZmICp0bXA7XG5AQCAtNTc0MCw3ICs1Nzc1LDcgQEAgdm9pZCBpZWVlODAyMTFfcnhfbmFwaShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSxcbiBcdCAqIHJlY2VpdmUgcHJvY2Vzc2luZ1xuIFx0ICovXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRpZWVlODAyMTFfcnhfbGlzdChodywgcHVic3RhLCBza2IsIFx1MDAyNmxpc3QpO1xuK1x0aWVlZTgwMjExX3J4X2xpc3QoaHcsIGxpbmtfcHVic3RhLCBza2IsIFx1MDAyNmxpc3QpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRpZiAoIW5hcGkpIHtcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc2Nhbi5jIGIvbmV0L21hYzgwMjExL3NjYW4uY1xuaW5kZXggZWVmZjIzMGJkOTA5Zi4uMzI0YzJiNmQ3Y2UxYiAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9zY2FuLmNcbisrKyBiL25ldC9tYWM4MDIxMS9zY2FuLmNcbkBAIC05LDcgKzksNyBAQFxuICAqIENvcHlyaWdodCAyMDA3LCBNaWNoYWVsIFd1IFx1MDAzY2ZsYW1pbmdpY2VAc291cm1pbGsubmV0XHUwMDNlXG4gICogQ29weXJpZ2h0IDIwMTMtMjAxNSAgSW50ZWwgTW9iaWxlIENvbW11bmljYXRpb25zIEdtYkhcbiAgKiBDb3B5cmlnaHQgMjAxNi0yMDE3ICBJbnRlbCBEZXV0c2NobGFuZCBHbWJIXG4tICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjUgSW50ZWwgQ29ycG9yYXRpb25cbisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyNiBJbnRlbCBDb3Jwb3JhdGlvblxuICAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2FycC5oXHUwMDNlXG5AQCAtMjA0LDEyICsyMDQsMTAgQEAgaWVlZTgwMjExX2Jzc19pbmZvX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcbiBcdFx0ICogYW4gaW5kaWNhdGlvbiBvbiB3aGljaCBvZiB0aGUgbGlua3MgdGhlIGZyYW1lIHdhcyByZWNlaXZlZFxuIFx0XHQgKi9cbiBcdFx0aWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKFx1MDAyNnNjYW5fc2RhdGEtXHUwMDNldmlmKSkge1xuLVx0XHRcdGlmIChyeF9zdGF0dXMtXHUwMDNlbGlua192YWxpZCkge1xuLVx0XHRcdFx0czggbGlua19pZCA9IHJ4X3N0YXR1cy1cdTAwM2VsaW5rX2lkO1xuK1x0XHRcdHM4IGxpbmtfaWQgPSByeF9zdGF0dXMtXHUwMDNlbGlua19pZDtcbiBcbi1cdFx0XHRcdGxpbmtfY29uZiA9XG4tXHRcdFx0XHRcdHJjdV9kZXJlZmVyZW5jZShzY2FuX3NkYXRhLVx1MDAzZXZpZi5saW5rX2NvbmZbbGlua19pZF0pO1xuLVx0XHRcdH1cbitcdFx0XHRsaW5rX2NvbmYgPVxuK1x0XHRcdFx0cmN1X2RlcmVmZXJlbmNlKHNjYW5fc2RhdGEtXHUwMDNldmlmLmxpbmtfY29uZltsaW5rX2lkXSk7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0bGlua19jb25mID0gXHUwMDI2c2Nhbl9zZGF0YS1cdTAwM2V2aWYuYnNzX2NvbmY7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdGRscy5jIGIvbmV0L21hYzgwMjExL3RkbHMuY1xuaW5kZXggZmZkNTc1YThkMTg4Zi4uYTg5YzY1NjliOWNmNSAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS90ZGxzLmNcbisrKyBiL25ldC9tYWM4MDIxMS90ZGxzLmNcbkBAIC0xMDY2LDcgKzEwNjYsNyBAQCBpZWVlODAyMTFfdGRsc19wcmVwX21nbXRfcGFja2V0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHR9XG4gXG4gXHRpZiAoYWN0aW9uX2NvZGUgPT0gV0xBTl9QVUJfQUNUSU9OX1RETFNfRElTQ09WRVJfUkVTKSB7XG4tXHRcdGllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIDcsIGxpbmtfaWQpO1xuK1x0XHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCBzdGEsIDcsIGxpbmtfaWQpO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdHguYyBiL25ldC9tYWM4MDIxMS90eC5jXG5pbmRleCAwY2Y1ZjZlYzc1ZTY3Li5mM2Y5ZjEyNDgxYzQwIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL3R4LmNcbisrKyBiL25ldC9tYWM4MDIxMS90eC5jXG5AQCAtNjQ0MSw3ICs2NDQxLDggQEAgdm9pZCBpZWVlODAyMTFfdW5yZXNlcnZlX3RpZChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLCB1OCB0aWQpXG4gRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfdW5yZXNlcnZlX3RpZCk7XG4gXG4gdm9pZCBfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRpZCwgaW50IGxpbmtfaWQsXG4rXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN0YV9pbmZvICpzdGEsXG4rXHRcdFx0XHQgaW50IHRpZCwgaW50IGxpbmtfaWQsXG4gXHRcdFx0XHQgZW51bSBubDgwMjExX2JhbmQgYmFuZClcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YTtcbkBAIC02NDkzLDEyICs2NDk0LDEzIEBAIHZvaWQgX19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0ICovXG4gXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gXHRJRUVFODAyMTFfU0tCX0NCKHNrYiktXHUwMDNlYmFuZCA9IGJhbmQ7XG4tXHRpZWVlODAyMTFfeG1pdChzZGF0YSwgTlVMTCwgc2tiKTtcbitcdGllZWU4MDIxMV94bWl0KHNkYXRhLCBzdGEsIHNrYik7XG4gXHRsb2NhbF9iaF9lbmFibGUoKTtcbiB9XG4gXG4gdm9pZCBpZWVlODAyMTFfdHhfc2tiX3RpZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi1cdFx0XHQgIHN0cnVjdCBza19idWZmICpza2IsIGludCB0aWQsIGludCBsaW5rX2lkKVxuK1x0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN0YV9pbmZvICpzdGEsXG4rXHRcdFx0ICBpbnQgdGlkLCBpbnQgbGlua19pZClcbiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY2hhbmN0eF9jb25mO1xuIFx0ZW51bSBubDgwMjExX2JhbmQgYmFuZDtcbkBAIC02NTI0LDcgKzY1MjYsNyBAQCB2b2lkIGllZWU4MDIxMV90eF9za2JfdGlkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRiYW5kID0gMDtcbiBcdH1cbiBcbi1cdF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzZGF0YSwgc2tiLCB0aWQsIGxpbmtfaWQsIGJhbmQpO1xuK1x0X19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHNkYXRhLCBza2IsIHN0YSwgdGlkLCBsaW5rX2lkLCBiYW5kKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuaW5kZXggOGFkYmVmNWYwNDQyNS4uMGFiMjkwN2U2NmY2OCAxMDA2NDRcbi0tLSBhL25ldC93aXJlbGVzcy9ubDgwMjExLmNcbisrKyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmNcbkBAIC0xMDk2LDYgKzEwOTYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmw4MDIxMV9wb2xpY3lbTlVNX05MODAyMTFfQVRUUl0gPSB7XG4gXHRbTkw4MDIxMV9BVFRSX05QQ0FfUFVOQ1RfQklUTUFQXSA9XG4gXHRcdE5MQV9QT0xJQ1lfRlVMTF9SQU5HRShOTEFfVTMyLCBcdTAwMjZubDgwMjExX3B1bmN0X2JpdG1hcF9yYW5nZSksXG4gXHRbTkw4MDIxMV9BVFRSX1NUQV9EVU1QX0xJTktfU1RBVFNdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sXG4rXHRbTkw4MDIxMV9BVFRSX0ZSQU1FX0NNRF9OT19TVEFdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sXG4gfTtcbiBcbiAvKiBwb2xpY3kgZm9yIHRoZSBrZXkgYXR0cmlidXRlcyAqL1xuQEAgLTE0ODU5LDYgKzE0ODYwLDkgQEAgc3RhdGljIGludCBubDgwMjExX3R4X21nbXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcdCAgICAhKHdkZXYtXHUwMDNldmFsaWRfbGlua3MgXHUwMDI2IEJJVChwYXJhbXMubGlua19pZCkpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbitcdHBhcmFtcy5ub19zdGEgPVxuK1x0XHRubGFfZ2V0X2ZsYWcoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfRlJBTUVfQ01EX05PX1NUQV0pO1xuK1xuIFx0cGFyYW1zLmJ1ZiA9IG5sYV9kYXRhKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0ZSQU1FXSk7XG4gXHRwYXJhbXMubGVuID0gbmxhX2xlbihpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9GUkFNRV0pO1xuIFxuQEAgLTIyMDIwLDcgKzIyMDI0LDkgQEAgaW50IG5sODAyMTFfc2VuZF9tZ210KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdCAgICAoaW5mby1cdTAwM2VhY2tfdHN0YW1wIFx1MDAyNlx1MDAyNiBubGFfcHV0X3U2NF82NGJpdChtc2csXG4gXHRcdFx0XHRcdFx0ICAgTkw4MDIxMV9BVFRSX1RYX0hXX1RJTUVTVEFNUCxcbiBcdFx0XHRcdFx0XHQgICBpbmZvLVx1MDAzZWFja190c3RhbXAsXG4tXHRcdFx0XHRcdFx0ICAgTkw4MDIxMV9BVFRSX1BBRCkpKVxuK1x0XHRcdFx0XHRcdCAgIE5MODAyMTFfQVRUUl9QQUQpKSB8fFxuK1x0ICAgIChpbmZvLVx1MDAzZW5vX3N0YSBcdTAwMjZcdTAwMjZcbitcdCAgICAgbmxhX3B1dF9mbGFnKG1zZywgTkw4MDIxMV9BVFRSX0ZSQU1FX0NNRF9OT19TVEEpKSlcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG4gXHRnZW5sbXNnX2VuZChtc2csIGhkcik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNDozNToyMi4wNTcwMzUzMzVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzg0MDY4NTQ2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBtYWM4MDIxMSBSWCBQYXRoIFRyYW5zZm9ybWF0aW9uIGZvciBNTE8gU3VwcG9ydCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzLCBhbmQgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQncyBmdW5kYW1lbnRhbGx5IHJld29ya2luZyB0aGUgbWFjODAyMTEgUlggcGF0aCwgcGFydGljdWxhcmx5IGluIHJlbGF0aW9uIHRvIE11bHRpLUxpbmsgT3BlcmF0aW9uIChNTE8pLiBUaGUgY2hhbmdlcyBhcmUgcHJldHR5IGJyb2FkLCB0b3VjaGluZyBhIHNpZ25pZmljYW50IG51bWJlciBvZiBkcml2ZXJzIOKAkyBhdGgxMWssIGF0aDEyaywgaXdsd2lmaSwgbXQ3NiwgcnR3ODksIGFuZCwgaW1wb3J0YW50bHksIG1hYzgwMjExX2h3c2ltLiBUaGF0J3MgaW1tZWRpYXRlbHkgdGVsbGluZyBtZSB0aGF0IHRoaXMgaXNuJ3Qgc29tZSBtaW5vciB0d2VhazsgdGhpcyBpcyBhIGNvcmUgYXJjaGl0ZWN0dXJhbCBzaGlmdC5cblxuVGhlIGZpcnN0IHRoaW5nIHRoYXQgZ3JhYnMgbXkgYXR0ZW50aW9uIGlzIHRoZSByZW1vdmFsIG9mIGBsaW5rX3ZhbGlkYCBmcm9tIGBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1c2AuIFRoaXMsIGNvbWJpbmVkIHdpdGggdGhlIGNoYW5nZSBpbiBob3cgYGxpbmtfaWRgIGlzIGhhbmRsZWQsIHNwZWNpZmljYWxseSBwYXNzaW5nIGBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpgIGluc3RlYWQgb2YgYHN0cnVjdCBpZWVlODAyMTFfc3RhICpgIHRvIGBpZWVlODAyMTFfcnhfbmFwaWAgYW5kIGBpZWVlODAyMTFfcnhfbGlzdGAsIHN1Z2dlc3RzIGEgcmVmYWN0b3JpbmcgdG8gaGFuZGxlIGxpbmstc3BlY2lmaWMgU1RBIGluZm9ybWF0aW9uIG1vcmUgZXhwbGljaXRseS4gSSBzZWUgdGhpcyBhcyBhIHNvbGlkIHN0ZXAgdG8gZ2V0IHRoaW5ncyByaWdodCBpbiB0aGUgTUxPIGNvbnRleHQsIHdoZXJlIHRoZSBhc3NvY2lhdGlvbiB3aXRoIHRoZSBTVEEgaXNuJ3QgYXMgc3RyYWlnaHRmb3J3YXJkIGJlY2F1c2Ugb2YgbXVsdGlwbGUgbGlua3MuXG5cblRoZSBhZGRpdGlvbiBvZiBgbm9fc3RhYCB0byBgY2ZnODAyMTFfbWdtdF90eF9wYXJhbXNgIGFuZCBgY2ZnODAyMTFfcnhfaW5mb2AsIGFuZCB0aGUgaGFuZGxpbmcgb2YgdGhpcyBmbGFnIGluIGBubDgwMjExLmNgLCBzdHJvbmdseSBpbmRpY2F0ZXMgYSBtb2RpZmljYXRpb24gdG8gdGhlIG1hbmFnZW1lbnQgZnJhbWUgVFgvUlggcGF0aCwgd2hpY2ggaXMgYWxzbyBsaW5rZWQgdG8gTUxPLlxuXG5Ob3csIGxldCdzIHNlZSBpZiB0aGlzIGlzIHJlYWNoYWJsZSB0aHJvdWdoIFFFTVUuIFRoYW5rZnVsbHksIHRoZSBwYXRjaCBtb2RpZmllcyBgbWFjODAyMTFfaHdzaW1gLCBhbmQgSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IGBtYWM4MDIxMV9od3NpbWAgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIGlzIGZyZXF1ZW50bHkgdXNlZCBmb3IgZnV6emluZyBtYWM4MDIxMS4gVGhpcyBpcyBhIHZlcnkgZ29vZCBzaWduLiBXZSBjYW4gZGVmaW5pdGVseSByZXByb2R1Y2UgdGhlIGNoYW5nZXMgYW5kIGRvIGRlYnVnZ2luZy5cblxuRGl2aW5nIGRlZXBlciwgdGhlIHBhdGNoIGhhcyBhIG1ham9yIGltcGFjdCBvbiBgbmV0L21hYzgwMjExL3J4LmNgLiBJJ20gc2VlaW5nIGNoYW5nZXMgaW4gZnVuY3Rpb25zIGxpa2UgYGllZWU4MDIxMV9yeF9saXN0YCwgYF9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXRgLCBhbmQgYGllZWU4MDIxMV9yeF9uYXBpYC4gRnVydGhlcm1vcmUsIGNoYW5nZXMgdG8gYG5sODAyMTFfdHhfbWdtdGAgYW5kIGBubDgwMjExX3NlbmRfbWdtdGAgcmVpbmZvcmNlIHRoZSBNTE8gYW5nbGUuXG5cbkknbSB6ZXJvaW5nIGluIG9uIGEgZmV3IGtleSBzeW1ib2xzIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhpczogYGllZWU4MDIxMV9yeF9saXN0YCwgYGllZWU4MDIxMV9yeF9uYXBpYCwgYG5sODAyMTFfdHhfbWdtdGAsIGBubDgwMjExX3NlbmRfbWdtdGAsIGFuZCBgaWVlZTgwMjExX21nbXRfdHhgLiBUaGUgbW9kaWZpY2F0aW9ucyB0byB0aG9zZSBmdW5jdGlvbnMgYW5kIHRoZSBhZGRpdGlvbiBvZiB0aGlzIG5ldyBmbGFnIGFyZSB0aGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlcmllcy5cblxuUXVpY2sgc2FuaXR5IGNoZWNrOiBJJ2xsIGNvbmZpcm0gdGhhdCBgaWVlZTgwMjExX3J4X2xpc3RgIGFuZCBgaWVlZTgwMjExX3J4X25hcGlgIGFyZSBpbmRlZWQgZXhwb3J0ZWQsIGFuZCB0aGF0IGBpZWVlODAyMTFfbWdtdF90eGAgaXMgaW4gYG5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmNgLiBBbHNvIHZlcmlmeWluZyB0aGF0IHRoZSBgbmw4MDIxMWAgZnVuY3Rpb25zIGFyZSBpbiBgbmV0L3dpcmVsZXNzL25sODAyMTEuY2AuIFllcCwgYWxsIGNvcnJlY3QuXG5cbkEgZnVydGhlciBjaGVjazogYF9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXRgIGlzIHN0YXRpYywgd2hpY2ggaXMgZXhwZWN0ZWQgZm9yIGFuIGludGVybmFsIGhlbHBlci4gQW5kIGl0IGlzLiBgaWVlZTgwMjExX3J4X2RhdGFfc2V0X2xpbmtfc3RhYCBhbmQgYGllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGFgIGFyZSBhbHNvIHN0YXRpYywgYXMgZXhwZWN0ZWQuXG5cbkkgd2lsbCBhbHNvIGluY2x1ZGUgYGllZWU4MDIxMV90eF9za2JfdGlkYCBhcyB0aGlzIGhhcyBhIHNpZ25hdHVyZSBjaGFuZ2UgYXMgd2VsbC5cblxuVGhlIGNoYW5nZXMgdG8gdGhlIHNpZ25hdHVyZXMgb2YgYGllZWU4MDIxMV9yeF9saXN0YCwgYGllZWU4MDIxMV9yeF9uYXBpYCwgYW5kIGBpZWVlODAyMTFfdHhfc2tiX3RpZGAgYXJlIHNpZ25pZmljYW50LCB3aGljaCBpcyByZW1vdmluZyBgc3RhYCBmcm9tIHRoZSBpbnB1dCBwYXJhbWV0ZXIgYW5kIHVzaW5nIGBsaW5rX3N0YWAgaW5zdGVhZC5cblxuKipJbiBlc3NlbmNlLCB0aGlzIHBhdGNoIGlzIGEgZnVuZGFtZW50YWwgcmVzdHJ1Y3R1cmluZyBvZiB0aGUgbWFjODAyMTEgUlggcGF0aCB0byBpbXByb3ZlIE1MTyBzdXBwb3J0LiBJdCdzIG1ha2luZyB0aGUgUlgvVFggcGF0aHMgaGFuZGxlIGxpbmstc3BlY2lmaWMgU1RBIGluZm9ybWF0aW9uLCB3aGljaCBpcyBhIGtleSByZXF1aXJlbWVudCB0byBoYW5kbGUgbXVsdGlwbGUgbGlua3MuIFRoZSBjaGFuZ2VzIGluY2x1ZGUgYWRkaW5nIGEgbmV3IGBub19zdGFgIGZsYWcgdG9cblxuIiwiSW5wdXRUb2tlbnMiOjMzMTM5LCJPdXRwdXRUb2tlbnMiOjI0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNDozNTozOS44OTc3MjMwNDdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5Nzc0MTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIixcbiAgICBcIkNGRzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWVlZTgwMjExX3J4X2xpc3RcIixcbiAgICBcImllZWU4MDIxMV9yeF9uYXBpXCIsXG4gICAgXCJpZWVlODAyMTFfbWdtdF90eFwiLFxuICAgIFwibmw4MDIxMV90eF9tZ210XCIsXG4gICAgXCJubDgwMjExX3NlbmRfbWdtdFwiLFxuICAgIFwiaWVlZTgwMjExX3R4X3NrYl90aWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWFjODAyMTEgUlggcGF0aCB0byBoYW5kbGUgTUxPIChNdWx0aS1MaW5rIE9wZXJhdGlvbikgbGluayBJRHMgbW9yZSByb2J1c3RseSwgcmVtb3ZpbmcgYGxpbmtfdmFsaWRgIGFuZCBwYXNzaW5nIGBsaW5rX3N0YWAgZGlyZWN0bHkuIEl0IGFsc28gYWRkcyBhIGBub19zdGFgIGZsYWcgZm9yIG1hbmFnZW1lbnQgZnJhbWUgVFgvUlguIFRoZXNlIGFyZSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBtYWM4MDIxMSBhbmQgY2ZnODAyMTEsIHJlYWNoYWJsZSB2aWEgbWFjODAyMTFfaHdzaW0gYW5kIG5sODAyMTEgbmV0bGluayBpbnRlcmZhY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIk1BQzgwMjExX0hXU0lNXCIsXG4gICAgXCJDRkc4MDIxMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImllZWU4MDIxMV9yeF9saXN0XCIsXG4gICAgXCJpZWVlODAyMTFfcnhfbmFwaVwiLFxuICAgIFwiaWVlZTgwMjExX21nbXRfdHhcIixcbiAgICBcIm5sODAyMTFfdHhfbWdtdFwiLFxuICAgIFwibmw4MDIxMV9zZW5kX21nbXRcIixcbiAgICBcImllZWU4MDIxMV90eF9za2JfdGlkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1hYzgwMjExIFJYIHBhdGggdG8gaGFuZGxlIE1MTyAoTXVsdGktTGluayBPcGVyYXRpb24pIGxpbmsgSURzIG1vcmUgcm9idXN0bHksIHJlbW92aW5nIGBsaW5rX3ZhbGlkYCBhbmQgcGFzc2luZyBgbGlua19zdGFgIGRpcmVjdGx5LiBJdCBhbHNvIGFkZHMgYSBgbm9fc3RhYCBmbGFnIGZvciBtYW5hZ2VtZW50IGZyYW1lIFRYL1JYLiBUaGVzZSBhcmUgY29yZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gbWFjODAyMTEgYW5kIGNmZzgwMjExLCByZWFjaGFibGUgdmlhIG1hYzgwMjExX2h3c2ltIGFuZCBubDgwMjExIG5ldGxpbmsgaW50ZXJmYWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowm7bqc[1] Phase: Succeeded StartedAt: 2026-08-01 04:36:03 +0000 UTC FinishedAt: 2026-08-01 04:36:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7bqc[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-01 04:36:03 +0000 UTC FinishedAt: 2026-08-01 04:36:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7bqc[2] Phase: Succeeded StartedAt: 2026-08-01 04:36:03 +0000 UTC FinishedAt: 2026-08-01 08:35:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7bqc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_rx_list","ieee80211_rx_napi","ieee80211_mgmt_tx","nl80211_tx_mgmt","nl80211_send_mgmt","ieee80211_tx_skb_tid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"743524f3-6661-4a2d-9deb-711774fced14","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-01 04:36:03 +0000 UTC FinishedAt: 2026-08-01 08:35:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_rx_list","ieee80211_rx_napi","ieee80211_mgmt_tx","nl80211_tx_mgmt","nl80211_send_mgmt","ieee80211_tx_skb_tid"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"743524f3-6661-4a2d-9deb-711774fced14","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowm7bqc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_rx_list","ieee80211_rx_napi","ieee80211_mgmt_tx","nl80211_tx_mgmt","nl80211_send_mgmt","ieee80211_tx_skb_tid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"743524f3-6661-4a2d-9deb-711774fced14","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-01 04:36:03 +0000 UTC FinishedAt: 2026-08-01 04:36:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7bqc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_rx_list","ieee80211_rx_napi","ieee80211_mgmt_tx","nl80211_tx_mgmt","nl80211_send_mgmt","ieee80211_tx_skb_tid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"743524f3-6661-4a2d-9deb-711774fced14","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-01 04:36:03 +0000 UTC FinishedAt: 2026-08-01 04:36:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm7bqc/series-workflowm7bqc-convert-artifact-1351876618/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm7bqc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_rx_list","ieee80211_rx_napi","ieee80211_mgmt_tx","nl80211_tx_mgmt","nl80211_send_mgmt","ieee80211_tx_skb_tid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"743524f3-6661-4a2d-9deb-711774fced14","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-01 04:36:13 +0000 UTC FinishedAt: 2026-08-01 05:01:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7bqc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_rx_list","ieee80211_rx_napi","ieee80211_mgmt_tx","nl80211_tx_mgmt","nl80211_send_mgmt","ieee80211_tx_skb_tid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"743524f3-6661-4a2d-9deb-711774fced14","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-01 04:36:13 +0000 UTC FinishedAt: 2026-08-01 05:01:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b7196790-70a4-4e80-8ebc-499cc6d28e1b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm7bqc/series-workflowm7bqc-convert-artifact-1351876618/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "9f495746-88ab-4fd9-8cd6-35c3af470a75", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm7bqc/series-workflowm7bqc-build-action-2053417720/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm7bqc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_rx_list","ieee80211_rx_napi","ieee80211_mgmt_tx","nl80211_tx_mgmt","nl80211_send_mgmt","ieee80211_tx_skb_tid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"743524f3-6661-4a2d-9deb-711774fced14","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-01 04:36:13 +0000 UTC FinishedAt: 2026-08-01 05:01:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b7196790-70a4-4e80-8ebc-499cc6d28e1b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm7bqc/series-workflowm7bqc-convert-artifact-1351876618/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "9f495746-88ab-4fd9-8cd6-35c3af470a75", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm7bqc/series-workflowm7bqc-build-action-2053417720/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm7bqc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_rx_list","ieee80211_rx_napi","ieee80211_mgmt_tx","nl80211_tx_mgmt","nl80211_send_mgmt","ieee80211_tx_skb_tid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"743524f3-6661-4a2d-9deb-711774fced14","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-01 05:01:34 +0000 UTC FinishedAt: 2026-08-01 05:01:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7bqc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_rx_list","ieee80211_rx_napi","ieee80211_mgmt_tx","nl80211_tx_mgmt","nl80211_send_mgmt","ieee80211_tx_skb_tid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"743524f3-6661-4a2d-9deb-711774fced14","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-01 05:01:34 +0000 UTC FinishedAt: 2026-08-01 05:01:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7bqc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_rx_list","ieee80211_rx_napi","ieee80211_mgmt_tx","nl80211_tx_mgmt","nl80211_send_mgmt","ieee80211_tx_skb_tid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"743524f3-6661-4a2d-9deb-711774fced14","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-01 05:01:34 +0000 UTC FinishedAt: 2026-08-01 05:01:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7bqc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_rx_list","ieee80211_rx_napi","ieee80211_mgmt_tx","nl80211_tx_mgmt","nl80211_send_mgmt","ieee80211_tx_skb_tid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"743524f3-6661-4a2d-9deb-711774fced14","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-01 05:01:34 +0000 UTC FinishedAt: 2026-08-01 05:01:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"743524f3-6661-4a2d-9deb-711774fced14","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm7bqc/series-workflowm7bqc-convert-artifact-1840207525/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm7bqc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_rx_list","ieee80211_rx_napi","ieee80211_mgmt_tx","nl80211_tx_mgmt","nl80211_send_mgmt","ieee80211_tx_skb_tid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"743524f3-6661-4a2d-9deb-711774fced14","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-01 05:01:44 +0000 UTC FinishedAt: 2026-08-01 05:03:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7bqc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_rx_list","ieee80211_rx_napi","ieee80211_mgmt_tx","nl80211_tx_mgmt","nl80211_send_mgmt","ieee80211_tx_skb_tid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"743524f3-6661-4a2d-9deb-711774fced14","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-01 05:01:44 +0000 UTC FinishedAt: 2026-08-01 05:03:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9f495746-88ab-4fd9-8cd6-35c3af470a75,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm7bqc/series-workflowm7bqc-build-action-2053417720/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflowm7bqc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_rx_list","ieee80211_rx_napi","ieee80211_mgmt_tx","nl80211_tx_mgmt","nl80211_send_mgmt","ieee80211_tx_skb_tid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"743524f3-6661-4a2d-9deb-711774fced14","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-01 05:03:54 +0000 UTC FinishedAt: 2026-08-01 05:03:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7bqc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_rx_list","ieee80211_rx_napi","ieee80211_mgmt_tx","nl80211_tx_mgmt","nl80211_send_mgmt","ieee80211_tx_skb_tid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"743524f3-6661-4a2d-9deb-711774fced14","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-01 05:03:54 +0000 UTC FinishedAt: 2026-08-01 05:03:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7bqc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_rx_list","ieee80211_rx_napi","ieee80211_mgmt_tx","nl80211_tx_mgmt","nl80211_send_mgmt","ieee80211_tx_skb_tid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"743524f3-6661-4a2d-9deb-711774fced14","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-01 05:03:54 +0000 UTC FinishedAt: 2026-08-01 05:31:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7bqc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_rx_list","ieee80211_rx_napi","ieee80211_mgmt_tx","nl80211_tx_mgmt","nl80211_send_mgmt","ieee80211_tx_skb_tid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"743524f3-6661-4a2d-9deb-711774fced14","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-01 05:03:54 +0000 UTC FinishedAt: 2026-08-01 05:31:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b7196790-70a4-4e80-8ebc-499cc6d28e1b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm7bqc/series-workflowm7bqc-convert-artifact-1840207525/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "587d2c43-7a68-4948-be22-c2ed8d69193c", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm7bqc/series-workflowm7bqc-build-action-82349809/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm7bqc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_rx_list","ieee80211_rx_napi","ieee80211_mgmt_tx","nl80211_tx_mgmt","nl80211_send_mgmt","ieee80211_tx_skb_tid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"743524f3-6661-4a2d-9deb-711774fced14","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-01 05:03:54 +0000 UTC FinishedAt: 2026-08-01 05:30:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b7196790-70a4-4e80-8ebc-499cc6d28e1b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm7bqc/series-workflowm7bqc-convert-artifact-1840207525/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "587d2c43-7a68-4948-be22-c2ed8d69193c", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm7bqc/series-workflowm7bqc-build-action-82349809/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm7bqc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_rx_list","ieee80211_rx_napi","ieee80211_mgmt_tx","nl80211_tx_mgmt","nl80211_send_mgmt","ieee80211_tx_skb_tid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"743524f3-6661-4a2d-9deb-711774fced14","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-01 05:31:13 +0000 UTC FinishedAt: 2026-08-01 05:31:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7bqc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_rx_list","ieee80211_rx_napi","ieee80211_mgmt_tx","nl80211_tx_mgmt","nl80211_send_mgmt","ieee80211_tx_skb_tid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"743524f3-6661-4a2d-9deb-711774fced14","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-01 05:31:13 +0000 UTC FinishedAt: 2026-08-01 05:31:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7bqc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_rx_list","ieee80211_rx_napi","ieee80211_mgmt_tx","nl80211_tx_mgmt","nl80211_send_mgmt","ieee80211_tx_skb_tid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"743524f3-6661-4a2d-9deb-711774fced14","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-01 05:31:13 +0000 UTC FinishedAt: 2026-08-01 05:33:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7bqc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_rx_list","ieee80211_rx_napi","ieee80211_mgmt_tx","nl80211_tx_mgmt","nl80211_send_mgmt","ieee80211_tx_skb_tid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"743524f3-6661-4a2d-9deb-711774fced14","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-01 05:31:13 +0000 UTC FinishedAt: 2026-08-01 05:32:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*587d2c43-7a68-4948-be22-c2ed8d69193c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm7bqc/series-workflowm7bqc-build-action-82349809/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflowm7bqc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_rx_list","ieee80211_rx_napi","ieee80211_mgmt_tx","nl80211_tx_mgmt","nl80211_send_mgmt","ieee80211_tx_skb_tid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"743524f3-6661-4a2d-9deb-711774fced14","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-01 05:33:08 +0000 UTC FinishedAt: 2026-08-01 08:35:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7bqc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_rx_list","ieee80211_rx_napi","ieee80211_mgmt_tx","nl80211_tx_mgmt","nl80211_send_mgmt","ieee80211_tx_skb_tid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"743524f3-6661-4a2d-9deb-711774fced14","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-01 05:33:08 +0000 UTC FinishedAt: 2026-08-01 08:35:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_rx_list","ieee80211_rx_napi","ieee80211_mgmt_tx","nl80211_tx_mgmt","nl80211_send_mgmt","ieee80211_tx_skb_tid"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*9f495746-88ab-4fd9-8cd6-35c3af470a75,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*587d2c43-7a68-4948-be22-c2ed8d69193c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm7bqc/series-workflowm7bqc-build-action-2053417720/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm7bqc/series-workflowm7bqc-build-action-82349809/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowm7bqc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_rx_list","ieee80211_rx_napi","ieee80211_mgmt_tx","nl80211_tx_mgmt","nl80211_send_mgmt","ieee80211_tx_skb_tid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"743524f3-6661-4a2d-9deb-711774fced14","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-01 05:33:08 +0000 UTC FinishedAt: 2026-08-01 05:33:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7bqc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_rx_list","ieee80211_rx_napi","ieee80211_mgmt_tx","nl80211_tx_mgmt","nl80211_send_mgmt","ieee80211_tx_skb_tid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"743524f3-6661-4a2d-9deb-711774fced14","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-01 05:33:08 +0000 UTC FinishedAt: 2026-08-01 05:33:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_rx_list","ieee80211_rx_napi","ieee80211_mgmt_tx","nl80211_tx_mgmt","nl80211_send_mgmt","ieee80211_tx_skb_tid"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm7bqc/series-workflowm7bqc-convert-artifact-842613290/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm7bqc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_rx_list","ieee80211_rx_napi","ieee80211_mgmt_tx","nl80211_tx_mgmt","nl80211_send_mgmt","ieee80211_tx_skb_tid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"743524f3-6661-4a2d-9deb-711774fced14","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-01 05:33:08 +0000 UTC FinishedAt: 2026-08-01 05:33:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7bqc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_rx_list","ieee80211_rx_napi","ieee80211_mgmt_tx","nl80211_tx_mgmt","nl80211_send_mgmt","ieee80211_tx_skb_tid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"743524f3-6661-4a2d-9deb-711774fced14","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-01 05:33:08 +0000 UTC FinishedAt: 2026-08-01 05:33:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7bqc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_rx_list","ieee80211_rx_napi","ieee80211_mgmt_tx","nl80211_tx_mgmt","nl80211_send_mgmt","ieee80211_tx_skb_tid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"743524f3-6661-4a2d-9deb-711774fced14","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-01 05:33:08 +0000 UTC FinishedAt: 2026-08-01 05:33:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7bqc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_rx_list","ieee80211_rx_napi","ieee80211_mgmt_tx","nl80211_tx_mgmt","nl80211_send_mgmt","ieee80211_tx_skb_tid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"743524f3-6661-4a2d-9deb-711774fced14","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-01 05:33:18 +0000 UTC FinishedAt: 2026-08-01 08:35:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm7bqc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ieee80211_rx_list","ieee80211_rx_napi","ieee80211_mgmt_tx","nl80211_tx_mgmt","nl80211_send_mgmt","ieee80211_tx_skb_tid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a0bd262df757b25fc4e2a53c947317c119ced4e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_HWSIM","CFG80211"],"series_id":"743524f3-6661-4a2d-9deb-711774fced14","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-01 05:33:18 +0000 UTC FinishedAt: 2026-08-01 08:35:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9f495746-88ab-4fd9-8cd6-35c3af470a75,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*587d2c43-7a68-4948-be22-c2ed8d69193c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm7bqc/series-workflowm7bqc-build-action-2053417720/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm7bqc/series-workflowm7bqc-build-action-82349809/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowm7bqc/series-workflowm7bqc-convert-artifact-842613290/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}