Name: series-workflown7h9z Phase: Succeeded StartedAt: 2026-07-30 17:30:06 +0000 UTC FinishedAt: 2026-07-30 21:31:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7h9z[0] Phase: Succeeded StartedAt: 2026-07-30 17:30:06 +0000 UTC FinishedAt: 2026-07-30 17:53:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7h9z[0].run-triage Phase: Succeeded StartedAt: 2026-07-30 17:30:06 +0000 UTC FinishedAt: 2026-07-30 17:53:39 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "451c9075d6c53f2438d110addbeeeea6fac18567", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET_DIAG", "INET_TCP_DIAG", "MPTCP", "INET_MPTCP_DIAG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "451c9075d6c53f2438d110addbeeeea6fac18567", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET_DIAG", "INET_TCP_DIAG", "MPTCP", "INET_MPTCP_DIAG" ], "series_id": "226acf33-fa5d-40f1-bdad-1c5a96a3187a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tcp_diag_dump", "mptcp_diag_dump_listeners", "inet_diag_dump_clear_cursor" ], "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+CgkJCTx0ZD4yMDI2LzA3LzMwIDE3OjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVRfRElBRyYjMzQ7LAogICAgJiMzNDtJTkVUX1RDUF9ESUFHJiMzNDssCiAgICAmIzM0O01QVENQJiMzNDssCiAgICAmIzM0O0lORVRfTVBUQ1BfRElBRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF9kaWFnX2R1bXAmIzM0OywKICAgICYjMzQ7bXB0Y3BfZGlhZ19kdW1wX2xpc3RlbmVycyYjMzQ7LAogICAgJiMzNDtpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGN1cnNvciBtZWNoYW5pc20gZm9yIGR1bXBpbmcgVENQIGFuZCBNUFRDUCBzb2NrZXRzIHZpYSB0aGUgaW5ldF9kaWFnIG5ldGxpbmsgaW50ZXJmYWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayB0aGF0IGFmZmVjdHMgaG93IHNvY2tldHMgYXJlIGl0ZXJhdGVkIGFuZCBkdW1wZWQsIHByZXZlbnRpbmcgZHVwbGljYXRlcyBvciBtaXNzZWQgc29ja2V0cyB3aGVuIHRoZSBoYXNoIHRhYmxlIGNoYW5nZXMgZHVyaW5nIHRoZSBkdW1wLiBJdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE3OjUyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjI5YTMxNTE5ZGNlZTJiY2Q1OWZmZTJkYTRkMjVkMTZiYWU2OWRiN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDMwIDE3OjUyOjUwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5ldF9kaWFnLmggYi9pbmNsdWRlL2xpbnV4L2luZXRfZGlhZy5oXG5pbmRleCA3MDRmZDQxNWMyYjQ5Li40ODU5ZTc3YTI4YzdhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9pbmV0X2RpYWcuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9pbmV0X2RpYWcuaFxuQEAgLTYsNiAmIzQzOzYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvaW5ldF9kaWFnLmhcdTAwM2VcbiBcbiBzdHJ1Y3QgaW5ldF9oYXNoaW5mbztcbiYjNDM7c3RydWN0IHNvY2s7XG4gXG4gc3RydWN0IGluZXRfZGlhZ19oYW5kbGVyIHtcbiBcdHN0cnVjdCBtb2R1bGVcdCpvd25lcjtcbkBAIC0zMiwxMiAmIzQzOzMzLDI0IEBAIHN0cnVjdCBpbmV0X2RpYWdfaGFuZGxlciB7XG4gfTtcbiBcbiBzdHJ1Y3QgYnBmX3NrX3N0b3JhZ2VfZGlhZztcbiYjNDM7XG4mIzQzO2VudW0gaW5ldF9kaWFnX2R1bXBfY3Vyc29yX3R5cGUge1xuJiM0MztcdElORVRfRElBR19EVU1QX0NVUlNPUl9OT05FLFxuJiM0MztcdElORVRfRElBR19EVU1QX0NVUlNPUl9UQ1BfTElTVEVOLFxuJiM0MztcdElORVRfRElBR19EVU1QX0NVUlNPUl9UQ1BfQklORCxcbiYjNDM7XHRJTkVUX0RJQUdfRFVNUF9DVVJTT1JfVENQX0VIQVNILFxuJiM0MztcdElORVRfRElBR19EVU1QX0NVUlNPUl9NUFRDUF9MSVNURU4sXG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCBpbmV0X2RpYWdfZHVtcF9kYXRhIHtcbiBcdHN0cnVjdCBubGF0dHIgKnJlcV9ubGFzW19fSU5FVF9ESUFHX1JFUV9NQVhdO1xuICNkZWZpbmUgaW5ldF9kaWFnX25sYV9iYyByZXFfbmxhc1tJTkVUX0RJQUdfUkVRX0JZVEVDT0RFXVxuICNkZWZpbmUgaW5ldF9kaWFnX25sYV9icGZfc3RncyByZXFfbmxhc1tJTkVUX0RJQUdfUkVRX1NLX0JQRl9TVE9SQUdFU11cbiBcbiBcdHN0cnVjdCBicGZfc2tfc3RvcmFnZV9kaWFnICpicGZfc3RnX2RpYWc7XG4mIzQzO1x0c3RydWN0IHNvY2sgKmR1bXBfY3Vyc29yO1xuJiM0MztcdHVuc2lnbmVkIGludCBkdW1wX2N1cnNvcl9zbG90O1xuJiM0MztcdHU4IGR1bXBfY3Vyc29yX3R5cGU7XG4gXHRib29sIG1hcmtfbmVlZGVkO1x0LyogSU5FVF9ESUFHX0JDX01BUktfQ09ORCBwcmVzZW50LiAqL1xuICNpZmRlZiBDT05GSUdfU09DS19DR1JPVVBfREFUQVxuIFx0Ym9vbCBjZ3JvdXBfbmVlZGVkO1x0LyogSU5FVF9ESUFHX0JDX0NHUk9VUF9DT05EIHByZXNlbnQuICovXG5AQCAtNTMsNiAmIzQzOzY2LDggQEAgaW50IGluZXRfc2tfZGlhZ19maWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrLFxuIFxuIGludCBpbmV0X2RpYWdfYmNfc2soY29uc3Qgc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEsIHN0cnVjdCBzb2NrICpzayk7XG4gXG4mIzQzO3ZvaWQgaW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKHN0cnVjdCBpbmV0X2RpYWdfZHVtcF9kYXRhICpjYl9kYXRhKTtcbiYjNDM7XG4gdm9pZCBpbmV0X2RpYWdfbXNnX2NvbW1vbl9maWxsKHN0cnVjdCBpbmV0X2RpYWdfbXNnICpyLCBzdHJ1Y3Qgc29jayAqc2spO1xuIFxuIHN0YXRpYyBpbmxpbmUgc2l6ZV90IGluZXRfZGlhZ19tc2dfYXR0cnNfc2l6ZSh2b2lkKVxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRfZGlhZy5jIGIvbmV0L2lwdjQvaW5ldF9kaWFnLmNcbmluZGV4IDM0Yjc3YWE4N2QwYTQuLjQxMTQ4ZTg4MDA1NDUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pbmV0X2RpYWcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaW5ldF9kaWFnLmNcbkBAIC04OTEsMTAgJiM0Mzs4OTEsMjMgQEAgc3RhdGljIGludCBpbmV0X2RpYWdfZHVtcF9zdGFydF9jb21wYXQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0cmV0dXJuIF9faW5ldF9kaWFnX2R1bXBfc3RhcnQoY2IsIHNpemVvZihzdHJ1Y3QgaW5ldF9kaWFnX3JlcSkpO1xuIH1cbiBcbiYjNDM7dm9pZCBpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3Ioc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWNiX2RhdGEtXHUwMDNlZHVtcF9jdXJzb3IpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHNvY2tfZ2VuX3B1dChjYl9kYXRhLVx1MDAzZWR1bXBfY3Vyc29yKTtcbiYjNDM7XHRjYl9kYXRhLVx1MDAzZWR1bXBfY3Vyc29yID0gTlVMTDtcbiYjNDM7XHRjYl9kYXRhLVx1MDAzZWR1bXBfY3Vyc29yX3Nsb3QgPSAwO1xuJiM0MztcdGNiX2RhdGEtXHUwMDNlZHVtcF9jdXJzb3JfdHlwZSA9IElORVRfRElBR19EVU1QX0NVUlNPUl9OT05FO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGluZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvcik7XG4mIzQzO1xuIHN0YXRpYyBpbnQgaW5ldF9kaWFnX2R1bXBfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4ge1xuIFx0c3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEgPSBjYi1cdTAwM2VkYXRhO1xuIFxuJiM0MztcdGluZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvcihjYl9kYXRhKTtcbiBcdGJwZl9za19zdG9yYWdlX2RpYWdfZnJlZShjYl9kYXRhLVx1MDAzZWJwZl9zdGdfZGlhZyk7XG4gXHRrZnJlZShjYi1cdTAwM2VkYXRhKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfZGlhZy5jIGIvbmV0L2lwdjQvdGNwX2RpYWcuY1xuaW5kZXggYmExZmRiZTk4MDdmZC4uYmUwYzIyY2M0NDViMiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9kaWFnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9kaWFnLmNcbkBAIC0yODUsNiAmIzQzOzI4NSw2NSBAQCBzdGF0aWMgaW50IHNrX2RpYWdfZmlsbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHQgbmV0X2FkbWluKTtcbiB9XG4gXG4mIzQzOy8qIFByb2Nlc3MgYSBtYXhpbXVtIG9mIFNLQVJSX1NaIHNvY2tldHMgYXQgYSB0aW1lIHdoZW4gd2Fsa2luZyBoYXNoIGJ1Y2tldHNcbiYjNDM7ICogd2l0aCBiaCBkaXNhYmxlZC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgU0tBUlJfU1ogMTZcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRjcF9kaWFnX3NhdmVfY3Vyc29yKHN0cnVjdCBpbmV0X2RpYWdfZHVtcF9kYXRhICpjYl9kYXRhLCBpbnQgdHlwZSxcbiYjNDM7XHRcdFx0XHQgdW5zaWduZWQgaW50IHNsb3QsIHN0cnVjdCBzb2NrICpzaylcbiYjNDM7e1xuJiM0MztcdHNvY2tfaG9sZChzayk7XG4mIzQzO1x0aW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKGNiX2RhdGEpO1xuJiM0MztcdGNiX2RhdGEtXHUwMDNlZHVtcF9jdXJzb3IgPSBzaztcbiYjNDM7XHRjYl9kYXRhLVx1MDAzZWR1bXBfY3Vyc29yX3Nsb3QgPSBzbG90O1xuJiM0MztcdGNiX2RhdGEtXHUwMDNlZHVtcF9jdXJzb3JfdHlwZSA9IHR5cGU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHRjcF9kaWFnX2JpbmRfY29sbGVjdF9zb2NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKipza19hcnIsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGludCAqbnVtX2FyciwgaW50ICphY2N1bSwgaW50IG51bSlcbiYjNDM7e1xuJiM0MztcdHNvY2tfaG9sZChzayk7XG4mIzQzO1x0bnVtX2FyclsqYWNjdW1dID0gbnVtO1xuJiM0MztcdHNrX2FyclsqYWNjdW1dID0gc2s7XG4mIzQzO1xuJiM0MztcdHJldHVybiAmIzQzOyYjNDM7KmFjY3VtID09IFNLQVJSX1NaO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCB0Y3BfZGlhZ19iaW5kX2NvbGxlY3Rfb3duZXJzKHN0cnVjdCBobGlzdF9oZWFkICpvd25lcnMsXG4mIzQzO1x0XHRcdFx0XHQgc3RydWN0IHNvY2sgKipza19hcnIsIGludCAqbnVtX2FycixcbiYjNDM7XHRcdFx0XHRcdCBpbnQgKmFjY3VtLCBpbnQgKm51bSwgaW50IHNfbnVtKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNvY2sgKnNrO1xuJiM0MztcbiYjNDM7XHRza19mb3JfZWFjaF9ib3VuZChzaywgb3duZXJzKSB7XG4mIzQzO1x0XHRpZiAoKm51bSBcdTAwM2Mgc19udW0pIHtcbiYjNDM7XHRcdFx0KCpudW0pJiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKHRjcF9kaWFnX2JpbmRfY29sbGVjdF9zb2NrKHNrLCBza19hcnIsIG51bV9hcnIsIGFjY3VtLCAqbnVtKSlcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHQoKm51bSkmIzQzOyYjNDM7O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCB0Y3BfZGlhZ19iaW5kX2NvbGxlY3Rfb3duZXJzX2NvbnRpbnVlKHN0cnVjdCBzb2NrICpzayxcbiYjNDM7XHRcdFx0XHRcdFx0ICBzdHJ1Y3Qgc29jayAqKnNrX2FycixcbiYjNDM7XHRcdFx0XHRcdFx0ICBpbnQgKm51bV9hcnIsIGludCAqYWNjdW0sXG4mIzQzO1x0XHRcdFx0XHRcdCAgaW50ICpudW0pXG4mIzQzO3tcbiYjNDM7XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZShzaywgc2tfYmluZF9ub2RlKSB7XG4mIzQzO1x0XHRpZiAodGNwX2RpYWdfYmluZF9jb2xsZWN0X3NvY2soc2ssIHNrX2FyciwgbnVtX2FyciwgYWNjdW0sICpudW0pKVxuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdCgqbnVtKSYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgdHdza19idWlsZF9hc3NlcnQodm9pZClcbiB7XG4gXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGluZXRfdGltZXdhaXRfc29jaywgdHdfZmFtaWx5KSAhPVxuQEAgLTMzNSw4ICYjNDM7Mzk0LDE1IEBAIHN0YXRpYyB2b2lkIHRjcF9kaWFnX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxuIFx0XHRmb3IgKGkgPSBzX2k7IGkgXHUwMDNjPSBoYXNoaW5mby1cdTAwM2VsaGFzaDJfbWFzazsgaSYjNDM7JiM0MzspIHtcbiBcdFx0XHRzdHJ1Y3QgaW5ldF9saXN0ZW5faGFzaGJ1Y2tldCAqaWxiO1xuIFx0XHRcdHN0cnVjdCBobGlzdF9udWxsc19ub2RlICpub2RlO1xuJiM0MztcdFx0XHRzdHJ1Y3Qgc29jayAqc2tfYXJyW1NLQVJSX1NaXTtcbiYjNDM7XHRcdFx0c3RydWN0IHNvY2sgKmN1cnNvcjtcbiYjNDM7XHRcdFx0aW50IG51bV9hcnJbU0tBUlJfU1pdO1xuJiM0MztcdFx0XHRpbnQgaWR4LCBhY2N1bSwgcmVzO1xuJiM0MztcdFx0XHRib29sIHVzZV9jdXJzb3I7XG4gXG4mIzQzO3Jlc3VtZV9saXN0ZW5fd2FsazpcbiBcdFx0XHRudW0gPSAwO1xuJiM0MztcdFx0XHRhY2N1bSA9IDA7XG4gXHRcdFx0aWxiID0gXHUwMDI2aGFzaGluZm8tXHUwMDNlbGhhc2gyW2ldO1xuIFxuIFx0XHRcdGlmIChobGlzdF9udWxsc19lbXB0eShcdTAwMjZpbGItXHUwMDNlbnVsbHNfaGVhZCkpIHtcbkBAIC0zNDQsNTIgJiM0Mzs0MTAsODAgQEAgc3RhdGljIHZvaWQgdGNwX2RpYWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHR9XG4gXHRcdFx0c3Bpbl9sb2NrKFx1MDAyNmlsYi1cdTAwM2Vsb2NrKTtcbi1cdFx0XHRza19udWxsc19mb3JfZWFjaChzaywgbm9kZSwgXHUwMDI2aWxiLVx1MDAzZW51bGxzX2hlYWQpIHtcbi1cdFx0XHRcdHN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTtcbiYjNDM7XHRcdFx0Y3Vyc29yID0gY2JfZGF0YS1cdTAwM2VkdW1wX2N1cnNvcjtcbiYjNDM7XHRcdFx0dXNlX2N1cnNvciA9IGN1cnNvciBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0XHQgICAgIGNiX2RhdGEtXHUwMDNlZHVtcF9jdXJzb3JfdHlwZSA9PVxuJiM0MztcdFx0XHRcdCAgICAgSU5FVF9ESUFHX0RVTVBfQ1VSU09SX1RDUF9MSVNURU4gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdFx0ICAgICBjYl9kYXRhLVx1MDAzZWR1bXBfY3Vyc29yX3Nsb3QgPT0gaSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0XHQgICAgICFobGlzdF9udWxsc191bmhhc2hlZChcdTAwMjZjdXJzb3ItXHUwMDNlc2tfbnVsbHNfbm9kZSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdFx0ICAgICBjdXJzb3ItXHUwMDNlc2tfbnVsbHNfbm9kZS5wcHJldiAhPSBMSVNUX1BPSVNPTjI7XG4mIzQzO1x0XHRcdG5vZGUgPSB1c2VfY3Vyc29yID8gY3Vyc29yLVx1MDAzZXNrX251bGxzX25vZGUubmV4dCA6XG4mIzQzO1x0XHRcdFx0XHQgICAgaWxiLVx1MDAzZW51bGxzX2hlYWQuZmlyc3Q7XG4mIzQzO1x0XHRcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X2Zyb20oc2ssIG5vZGUsIHNrX251bGxzX25vZGUpIHtcbiYjNDM7XHRcdFx0XHRpZiAoIXVzZV9jdXJzb3IgXHUwMDI2XHUwMDI2IG51bSBcdTAwM2Mgc19udW0pXG4mIzQzO1x0XHRcdFx0XHRnb3RvIG5leHRfbGlzdGVuO1xuIFxuLVx0XHRcdFx0aWYgKCFuZXRfZXEoc29ja19uZXQoc2spLCBuZXQpKVxuLVx0XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0XHRzb2NrX2hvbGQoc2spO1xuJiM0MztcdFx0XHRcdG51bV9hcnJbYWNjdW1dID0gbnVtO1xuJiM0MztcdFx0XHRcdHNrX2FyclthY2N1bV0gPSBzaztcbiYjNDM7XHRcdFx0XHRpZiAoJiM0MzsmIzQzO2FjY3VtID09IFNLQVJSX1NaKVxuJiM0MztcdFx0XHRcdFx0YnJlYWs7XG4gXG4tXHRcdFx0XHRpZiAobnVtIFx1MDAzYyBzX251bSkge1xuLVx0XHRcdFx0XHRudW0mIzQzOyYjNDM7O1xuLVx0XHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHRcdH1cbiYjNDM7bmV4dF9saXN0ZW46XG4mIzQzO1x0XHRcdFx0JiM0MzsmIzQzO251bTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRzcGluX3VubG9jayhcdTAwMjZpbGItXHUwMDNlbG9jayk7XG4gXG4mIzQzO1x0XHRcdHJlcyA9IDA7XG4mIzQzO1x0XHRcdGZvciAoaWR4ID0gMDsgaWR4IFx1MDAzYyBhY2N1bTsgaWR4JiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRcdHN0cnVjdCBpbmV0X3NvY2sgKmluZXQ7XG4mIzQzO1xuJiM0MztcdFx0XHRcdHNrID0gc2tfYXJyW2lkeF07XG4mIzQzO1x0XHRcdFx0aWYgKCFuZXRfZXEoc29ja19uZXQoc2spLCBuZXQpKVxuJiM0MztcdFx0XHRcdFx0Z290byBwcm9jZXNzZWRfbGlzdGVuX3NrO1xuJiM0MztcbiYjNDM7XHRcdFx0XHRpbmV0ID0gaW5ldF9zayhzayk7XG4gXHRcdFx0XHRpZiAoci1cdTAwM2VzZGlhZ19mYW1pbHkgIT0gQUZfVU5TUEVDIFx1MDAyNlx1MDAyNlxuIFx0XHRcdFx0ICAgIHNrLVx1MDAzZXNrX2ZhbWlseSAhPSByLVx1MDAzZXNkaWFnX2ZhbWlseSlcbi1cdFx0XHRcdFx0Z290byBuZXh0X2xpc3RlbjtcbiYjNDM7XHRcdFx0XHRcdGdvdG8gcHJvY2Vzc2VkX2xpc3Rlbl9zaztcbiBcbiBcdFx0XHRcdGlmIChyLVx1MDAzZWlkLmlkaWFnX3Nwb3J0ICE9IGluZXQtXHUwMDNlaW5ldF9zcG9ydCBcdTAwMjZcdTAwMjZcbiBcdFx0XHRcdCAgICByLVx1MDAzZWlkLmlkaWFnX3Nwb3J0KVxuLVx0XHRcdFx0XHRnb3RvIG5leHRfbGlzdGVuO1xuLVxuLVx0XHRcdFx0aWYgKCFpbmV0X2RpYWdfYmNfc2soY2JfZGF0YSwgc2spKVxuLVx0XHRcdFx0XHRnb3RvIG5leHRfbGlzdGVuO1xuJiM0MztcdFx0XHRcdFx0Z290byBwcm9jZXNzZWRfbGlzdGVuX3NrO1xuIFxuLVx0XHRcdFx0aWYgKGluZXRfc2tfZGlhZ19maWxsKHNrLCBpbmV0X2NzayhzayksIHNrYixcbi1cdFx0XHRcdFx0XHQgICAgICBjYiwgciwgTkxNX0ZfTVVMVEksXG4tXHRcdFx0XHRcdFx0ICAgICAgbmV0X2FkbWluKSBcdTAwM2MgMCkge1xuLVx0XHRcdFx0XHRzcGluX3VubG9jayhcdTAwMjZpbGItXHUwMDNlbG9jayk7XG4tXHRcdFx0XHRcdGdvdG8gZG9uZTtcbiYjNDM7XHRcdFx0XHRpZiAocmVzIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgaW5ldF9kaWFnX2JjX3NrKGNiX2RhdGEsIHNrKSkge1xuJiM0MztcdFx0XHRcdFx0cmVzID0gaW5ldF9za19kaWFnX2ZpbGwoc2ssIGluZXRfY3NrKHNrKSxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdHNrYiwgY2IsIHIsIE5MTV9GX01VTFRJLFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0bmV0X2FkbWluKTtcbiYjNDM7XHRcdFx0XHRcdGlmIChyZXMgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0XHRcdG51bSA9IG51bV9hcnJbaWR4XTtcbiBcdFx0XHRcdH1cbiYjNDM7cHJvY2Vzc2VkX2xpc3Rlbl9zazpcbiYjNDM7XHRcdFx0XHRpZiAocmVzIFx1MDAzZT0gMClcbiYjNDM7XHRcdFx0XHRcdHRjcF9kaWFnX3NhdmVfY3Vyc29yKGNiX2RhdGEsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICBJTkVUX0RJQUdfRFVNUF9DVVJTT1JfVENQX0xJU1RFTixcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgIGksIHNrKTtcbiYjNDM7XHRcdFx0XHRzb2NrX3B1dChzayk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0aWYgKHJlcyBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGRvbmU7XG4gXG4tbmV4dF9saXN0ZW46XG4tXHRcdFx0XHQmIzQzOyYjNDM7bnVtO1xuJiM0MztcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChhY2N1bSA9PSBTS0FSUl9TWikge1xuJiM0MztcdFx0XHRcdHNfbnVtID0gMDtcbiYjNDM7XHRcdFx0XHRnb3RvIHJlc3VtZV9saXN0ZW5fd2FsaztcbiBcdFx0XHR9XG4tXHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2aWxiLVx1MDAzZWxvY2spO1xuIFxuJiM0MztcdFx0XHRpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3IoY2JfZGF0YSk7XG4gXHRcdFx0c19udW0gPSAwO1xuIFx0XHR9XG4gc2tpcF9saXN0ZW5faHQ6XG4mIzQzO1x0XHRpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3IoY2JfZGF0YSk7XG4gXHRcdGNiLVx1MDAzZWFyZ3NbMF0gPSAxO1xuIFx0XHRzX2kgPSBudW0gPSBzX251bSA9IDA7XG4gXHR9XG4gXG4tLyogUHJvY2VzcyBhIG1heGltdW0gb2YgU0tBUlJfU1ogc29ja2V0cyBhdCBhIHRpbWUgd2hlbiB3YWxraW5nIGhhc2ggYnVja2V0c1xuLSAqIHdpdGggYmggZGlzYWJsZWQuXG4tICovXG4tI2RlZmluZSBTS0FSUl9TWiAxNlxuLVxuIFx0LyogRHVtcCBib3VuZCBidXQgaW5hY3RpdmUgKG5vdCBsaXN0ZW5pbmcsIGNvbm5lY3RpbmcsIGV0Yy4pIHNvY2tldHMgKi9cbiBcdGlmIChjYi1cdTAwM2VhcmdzWzBdID09IDEpIHtcbiBcdFx0aWYgKCEoaWRpYWdfc3RhdGVzIFx1MDAyNiBUQ1BGX0JPVU5EX0lOQUNUSVZFKSlcbkBAIC0zOTksOCAmIzQzOzQ5MywxMCBAQCBzdGF0aWMgdm9pZCB0Y3BfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbiBcdFx0XHRzdHJ1Y3QgaW5ldF9iaW5kX2hhc2hidWNrZXQgKmliYjtcbiBcdFx0XHRzdHJ1Y3QgaW5ldF9iaW5kMl9idWNrZXQgKnRiMjtcbiBcdFx0XHRzdHJ1Y3Qgc29jayAqc2tfYXJyW1NLQVJSX1NaXTtcbiYjNDM7XHRcdFx0c3RydWN0IHNvY2sgKmN1cnNvcjtcbiBcdFx0XHRpbnQgbnVtX2FycltTS0FSUl9TWl07XG4gXHRcdFx0aW50IGlkeCwgYWNjdW0sIHJlcztcbiYjNDM7XHRcdFx0Ym9vbCB1c2VfY3Vyc29yO1xuIFxuIHJlc3VtZV9iaW5kX3dhbGs6XG4gXHRcdFx0bnVtID0gMDtcbkBAIC00MTIsMzQgJiM0Mzs1MDgsMzggQEAgc3RhdGljIHZvaWQgdGNwX2RpYWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHR9XG4gXHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmliYi1cdTAwM2Vsb2NrKTtcbi1cdFx0XHRpbmV0X2JpbmRfYnVja2V0X2Zvcl9lYWNoKHRiMiwgXHUwMDI2aWJiLVx1MDAzZWNoYWluKSB7XG4tXHRcdFx0XHRpZiAoIW5ldF9lcShpYjJfbmV0KHRiMiksIG5ldCkpXG4tXHRcdFx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRcdFx0c2tfZm9yX2VhY2hfYm91bmQoc2ssIFx1MDAyNnRiMi1cdTAwM2Vvd25lcnMpIHtcbi1cdFx0XHRcdFx0c3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spO1xuLVxuLVx0XHRcdFx0XHRpZiAobnVtIFx1MDAzYyBzX251bSlcbi1cdFx0XHRcdFx0XHRnb3RvIG5leHRfYmluZDtcbi1cbi1cdFx0XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9DTE9TRSB8fFxuLVx0XHRcdFx0XHQgICAgIWluZXQtXHUwMDNlaW5ldF9udW0pXG4tXHRcdFx0XHRcdFx0Z290byBuZXh0X2JpbmQ7XG4tXG4tXHRcdFx0XHRcdGlmIChyLVx1MDAzZXNkaWFnX2ZhbWlseSAhPSBBRl9VTlNQRUMgXHUwMDI2XHUwMDI2XG4tXHRcdFx0XHRcdCAgICByLVx1MDAzZXNkaWFnX2ZhbWlseSAhPSBzay1cdTAwM2Vza19mYW1pbHkpXG4tXHRcdFx0XHRcdFx0Z290byBuZXh0X2JpbmQ7XG4tXG4tXHRcdFx0XHRcdGlmICghaW5ldF9kaWFnX2JjX3NrKGNiX2RhdGEsIHNrKSlcbi1cdFx0XHRcdFx0XHRnb3RvIG5leHRfYmluZDtcbi1cbi1cdFx0XHRcdFx0c29ja19ob2xkKHNrKTtcbi1cdFx0XHRcdFx0bnVtX2FyclthY2N1bV0gPSBudW07XG4tXHRcdFx0XHRcdHNrX2FyclthY2N1bV0gPSBzaztcbi1cdFx0XHRcdFx0aWYgKCYjNDM7JiM0MzthY2N1bSA9PSBTS0FSUl9TWilcbiYjNDM7XHRcdFx0Y3Vyc29yID0gY2JfZGF0YS1cdTAwM2VkdW1wX2N1cnNvcjtcbiYjNDM7XHRcdFx0dXNlX2N1cnNvciA9IGN1cnNvciBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0XHQgICAgIGNiX2RhdGEtXHUwMDNlZHVtcF9jdXJzb3JfdHlwZSA9PVxuJiM0MztcdFx0XHRcdCAgICAgSU5FVF9ESUFHX0RVTVBfQ1VSU09SX1RDUF9CSU5EIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHRcdCAgICAgY2JfZGF0YS1cdTAwM2VkdW1wX2N1cnNvcl9zbG90ID09IGkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdFx0ICAgICAhaGxpc3RfdW5oYXNoZWQoXHUwMDI2Y3Vyc29yLVx1MDAzZXNrX2JpbmRfbm9kZSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdFx0ICAgICBjdXJzb3ItXHUwMDNlc2tfYmluZF9ub2RlLnBwcmV2ICE9IExJU1RfUE9JU09OMiBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0XHQgICAgIGluZXRfY3NrKGN1cnNvciktXHUwMDNlaWNza19iaW5kMl9oYXNoO1xuJiM0MztcdFx0XHRpZiAodXNlX2N1cnNvcikge1xuJiM0MztcdFx0XHRcdHRiMiA9IGluZXRfY3NrKGN1cnNvciktXHUwMDNlaWNza19iaW5kMl9oYXNoO1xuJiM0MztcdFx0XHRcdHNrID0gY3Vyc29yO1xuJiM0MztcdFx0XHRcdGlmICh0Y3BfZGlhZ19iaW5kX2NvbGxlY3Rfb3duZXJzX2NvbnRpbnVlKHNrLCBza19hcnIsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRcdCAgbnVtX2FycixcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdFx0ICBcdTAwMjZhY2N1bSxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdFx0ICBcdTAwMjZudW0pKVxuJiM0MztcdFx0XHRcdFx0Z290byBwYXVzZV9iaW5kX3dhbGs7XG4mIzQzO1x0XHRcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWUodGIyLCBub2RlKSB7XG4mIzQzO1x0XHRcdFx0XHRpZiAodGNwX2RpYWdfYmluZF9jb2xsZWN0X293bmVycyhcdTAwMjZ0YjItXHUwMDNlb3duZXJzLFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0XHQgc2tfYXJyLFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0XHQgbnVtX2FycixcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdFx0IFx1MDAyNmFjY3VtLFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0XHQgXHUwMDI2bnVtLCAwKSlcbiYjNDM7XHRcdFx0XHRcdFx0Z290byBwYXVzZV9iaW5kX3dhbGs7XG4mIzQzO1x0XHRcdFx0fVxuJiM0MztcdFx0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRcdGluZXRfYmluZF9idWNrZXRfZm9yX2VhY2godGIyLCBcdTAwMjZpYmItXHUwMDNlY2hhaW4pIHtcbiYjNDM7XHRcdFx0XHRcdGlmICh0Y3BfZGlhZ19iaW5kX2NvbGxlY3Rfb3duZXJzKFx1MDAyNnRiMi1cdTAwM2Vvd25lcnMsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRcdCBza19hcnIsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRcdCBudW1fYXJyLFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0XHQgXHUwMDI2YWNjdW0sXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRcdCBcdTAwMjZudW0sIHNfbnVtKSlcbiBcdFx0XHRcdFx0XHRnb3RvIHBhdXNlX2JpbmRfd2Fsaztcbi1uZXh0X2JpbmQ6XG4tXHRcdFx0XHRcdG51bSYjNDM7JiM0Mzs7XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuIHBhdXNlX2JpbmRfd2FsazpcbkBAIC00NDcsMTUgJiM0Mzs1NDcsMzMgQEAgc3RhdGljIHZvaWQgdGNwX2RpYWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG4gXG4gXHRcdFx0cmVzID0gMDtcbiBcdFx0XHRmb3IgKGlkeCA9IDA7IGlkeCBcdTAwM2MgYWNjdW07IGlkeCYjNDM7JiM0MzspIHtcbi1cdFx0XHRcdGlmIChyZXMgXHUwMDNlPSAwKSB7XG4tXHRcdFx0XHRcdHJlcyA9IGluZXRfc2tfZGlhZ19maWxsKHNrX2FycltpZHhdLFxuLVx0XHRcdFx0XHRcdFx0XHROVUxMLCBza2IsIGNiLFxuJiM0MztcdFx0XHRcdHN0cnVjdCBpbmV0X3NvY2sgKmluZXQ7XG4mIzQzO1xuJiM0MztcdFx0XHRcdHNrID0gc2tfYXJyW2lkeF07XG4mIzQzO1x0XHRcdFx0aWYgKCFuZXRfZXEoc29ja19uZXQoc2spLCBuZXQpKVxuJiM0MztcdFx0XHRcdFx0Z290byBwdXRfYmluZF9zaztcbiYjNDM7XG4mIzQzO1x0XHRcdFx0aW5ldCA9IGluZXRfc2soc2spO1xuJiM0MztcdFx0XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSAhPSBUQ1BfQ0xPU0UgfHwgIWluZXQtXHUwMDNlaW5ldF9udW0pXG4mIzQzO1x0XHRcdFx0XHRnb3RvIHB1dF9iaW5kX3NrO1xuJiM0MztcbiYjNDM7XHRcdFx0XHRpZiAoci1cdTAwM2VzZGlhZ19mYW1pbHkgIT0gQUZfVU5TUEVDIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHRcdCAgICByLVx1MDAzZXNkaWFnX2ZhbWlseSAhPSBzay1cdTAwM2Vza19mYW1pbHkpXG4mIzQzO1x0XHRcdFx0XHRnb3RvIHB1dF9iaW5kX3NrO1xuJiM0MztcbiYjNDM7XHRcdFx0XHRpZiAocmVzIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgaW5ldF9kaWFnX2JjX3NrKGNiX2RhdGEsIHNrKSkge1xuJiM0MztcdFx0XHRcdFx0cmVzID0gaW5ldF9za19kaWFnX2ZpbGwoc2ssIE5VTEwsIHNrYiwgY2IsXG4gXHRcdFx0XHRcdFx0XHRcdHIsIE5MTV9GX01VTFRJLFxuIFx0XHRcdFx0XHRcdFx0XHRuZXRfYWRtaW4pO1xuIFx0XHRcdFx0XHRpZiAocmVzIFx1MDAzYyAwKVxuIFx0XHRcdFx0XHRcdG51bSA9IG51bV9hcnJbaWR4XTtcbiBcdFx0XHRcdH1cbi1cdFx0XHRcdHNvY2tfcHV0KHNrX2FycltpZHhdKTtcbiYjNDM7XHRcdFx0XHRpZiAocmVzIFx1MDAzZT0gMClcbiYjNDM7XHRcdFx0XHRcdHRjcF9kaWFnX3NhdmVfY3Vyc29yKGNiX2RhdGEsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICBJTkVUX0RJQUdfRFVNUF9DVVJTT1JfVENQX0JJTkQsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICBpLCBzayk7XG4mIzQzO3B1dF9iaW5kX3NrOlxuJiM0MztcdFx0XHRcdHNvY2tfcHV0KHNrKTtcbiBcdFx0XHR9XG4gXHRcdFx0aWYgKHJlcyBcdTAwM2MgMClcbiBcdFx0XHRcdGdvdG8gZG9uZTtcbkBAIC00NjMsMTMgJiM0Mzs1ODEsMTUgQEAgc3RhdGljIHZvaWQgdGNwX2RpYWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG4gXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4gXG4gXHRcdFx0aWYgKGFjY3VtID09IFNLQVJSX1NaKSB7XG4tXHRcdFx0XHRzX251bSA9IG51bSAmIzQzOyAxO1xuJiM0MztcdFx0XHRcdHNfbnVtID0gMDtcbiBcdFx0XHRcdGdvdG8gcmVzdW1lX2JpbmRfd2FsaztcbiBcdFx0XHR9XG4gXG4mIzQzO1x0XHRcdGluZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvcihjYl9kYXRhKTtcbiBcdFx0XHRzX251bSA9IDA7XG4gXHRcdH1cbiBza2lwX2JpbmRfaHQ6XG4mIzQzO1x0XHRpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3IoY2JfZGF0YSk7XG4gXHRcdGNiLVx1MDAzZWFyZ3NbMF0gPSAyO1xuIFx0XHRzX2kgPSBudW0gPSBzX251bSA9IDA7XG4gXHR9XG5AQCAtNDgyLDQyICYjNDM7NjAyLDMzIEBAIHN0YXRpYyB2b2lkIHRjcF9kaWFnX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxuIFx0XHRzcGlubG9ja190ICpsb2NrID0gaW5ldF9laGFzaF9sb2NrcChoYXNoaW5mbywgaSk7XG4gXHRcdHN0cnVjdCBobGlzdF9udWxsc19ub2RlICpub2RlO1xuIFx0XHRzdHJ1Y3Qgc29jayAqc2tfYXJyW1NLQVJSX1NaXTtcbiYjNDM7XHRcdHN0cnVjdCBzb2NrICpjdXJzb3I7XG4gXHRcdGludCBudW1fYXJyW1NLQVJSX1NaXTtcbiBcdFx0aW50IGlkeCwgYWNjdW0sIHJlcztcbiYjNDM7XHRcdGJvb2wgdXNlX2N1cnNvcjtcbiBcbiBcdFx0aWYgKGhsaXN0X251bGxzX2VtcHR5KFx1MDAyNmhlYWQtXHUwMDNlY2hhaW4pKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRpZiAoaSBcdTAwM2Ugc19pKVxuJiM0MztcdFx0aWYgKGkgXHUwMDNlIHNfaSkge1xuJiM0MztcdFx0XHRpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3IoY2JfZGF0YSk7XG4gXHRcdFx0c19udW0gPSAwO1xuJiM0MztcdFx0fVxuIFxuIG5leHRfY2h1bms6XG4gXHRcdG51bSA9IDA7XG4gXHRcdGFjY3VtID0gMDtcbiBcdFx0c3Bpbl9sb2NrX2JoKGxvY2spO1xuLVx0XHRza19udWxsc19mb3JfZWFjaChzaywgbm9kZSwgXHUwMDI2aGVhZC1cdTAwM2VjaGFpbikge1xuLVx0XHRcdGludCBzdGF0ZTtcbi1cbi1cdFx0XHRpZiAoIW5ldF9lcShzb2NrX25ldChzayksIG5ldCkpXG4tXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHRpZiAobnVtIFx1MDAzYyBzX251bSlcbi1cdFx0XHRcdGdvdG8gbmV4dF9ub3JtYWw7XG4tXHRcdFx0c3RhdGUgPSAoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX1RJTUVfV0FJVCkgP1xuLVx0XHRcdFx0UkVBRF9PTkNFKGluZXRfdHdzayhzayktXHUwMDNldHdfc3Vic3RhdGUpIDogc2stXHUwMDNlc2tfc3RhdGU7XG4tXHRcdFx0aWYgKCEoaWRpYWdfc3RhdGVzIFx1MDAyNiAoMSBcdTAwM2NcdTAwM2Mgc3RhdGUpKSlcbi1cdFx0XHRcdGdvdG8gbmV4dF9ub3JtYWw7XG4tXHRcdFx0aWYgKHItXHUwMDNlc2RpYWdfZmFtaWx5ICE9IEFGX1VOU1BFQyBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgc2stXHUwMDNlc2tfZmFtaWx5ICE9IHItXHUwMDNlc2RpYWdfZmFtaWx5KVxuLVx0XHRcdFx0Z290byBuZXh0X25vcm1hbDtcbi1cdFx0XHRpZiAoci1cdTAwM2VpZC5pZGlhZ19zcG9ydCAhPSBodG9ucyhSRUFEX09OQ0Uoc2stXHUwMDNlc2tfbnVtKSkgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIHItXHUwMDNlaWQuaWRpYWdfc3BvcnQpXG4tXHRcdFx0XHRnb3RvIG5leHRfbm9ybWFsO1xuLVx0XHRcdGlmIChyLVx1MDAzZWlkLmlkaWFnX2Rwb3J0ICE9IHNrLVx1MDAzZXNrX2Rwb3J0IFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICByLVx1MDAzZWlkLmlkaWFnX2Rwb3J0KVxuLVx0XHRcdFx0Z290byBuZXh0X25vcm1hbDtcbi1cdFx0XHR0d3NrX2J1aWxkX2Fzc2VydCgpO1xuLVxuLVx0XHRcdGlmICghaW5ldF9kaWFnX2JjX3NrKGNiX2RhdGEsIHNrKSlcbiYjNDM7XHRcdGN1cnNvciA9IGNiX2RhdGEtXHUwMDNlZHVtcF9jdXJzb3I7XG4mIzQzO1x0XHR1c2VfY3Vyc29yID0gY3Vyc29yIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgIGNiX2RhdGEtXHUwMDNlZHVtcF9jdXJzb3JfdHlwZSA9PVxuJiM0MztcdFx0XHQgICAgIElORVRfRElBR19EVU1QX0NVUlNPUl9UQ1BfRUhBU0ggXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICAgY2JfZGF0YS1cdTAwM2VkdW1wX2N1cnNvcl9zbG90ID09IGkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICAgIWhsaXN0X251bGxzX3VuaGFzaGVkKFx1MDAyNmN1cnNvci1cdTAwM2Vza19udWxsc19ub2RlKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgICBjdXJzb3ItXHUwMDNlc2tfbnVsbHNfbm9kZS5wcHJldiAhPSBMSVNUX1BPSVNPTjI7XG4mIzQzO1x0XHRub2RlID0gdXNlX2N1cnNvciA/IGN1cnNvci1cdTAwM2Vza19udWxsc19ub2RlLm5leHQgOiBoZWFkLVx1MDAzZWNoYWluLmZpcnN0O1xuJiM0MztcdFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfZnJvbShzaywgbm9kZSwgc2tfbnVsbHNfbm9kZSkge1xuJiM0MztcdFx0XHRpZiAoIXVzZV9jdXJzb3IgXHUwMDI2XHUwMDI2IG51bSBcdTAwM2Mgc19udW0pXG4gXHRcdFx0XHRnb3RvIG5leHRfbm9ybWFsO1xuIFxuIFx0XHRcdGlmICghcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNnNrLVx1MDAzZXNrX3JlZmNudCkpXG5AQCAtNTM0LDEzICYjNDM7NjQ1LDQyIEBAIHN0YXRpYyB2b2lkIHRjcF9kaWFnX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxuIFxuIFx0XHRyZXMgPSAwO1xuIFx0XHRmb3IgKGlkeCA9IDA7IGlkeCBcdTAwM2MgYWNjdW07IGlkeCYjNDM7JiM0MzspIHtcbi1cdFx0XHRpZiAocmVzIFx1MDAzZT0gMCkge1xuLVx0XHRcdFx0cmVzID0gc2tfZGlhZ19maWxsKHNrX2FycltpZHhdLCBza2IsIGNiLCByLFxuLVx0XHRcdFx0XHRcdCAgIE5MTV9GX01VTFRJLCBuZXRfYWRtaW4pO1xuJiM0MztcdFx0XHRpbnQgc3RhdGU7XG4mIzQzO1xuJiM0MztcdFx0XHRzayA9IHNrX2FycltpZHhdO1xuJiM0MztcdFx0XHRpZiAoIW5ldF9lcShzb2NrX25ldChzayksIG5ldCkpXG4mIzQzO1x0XHRcdFx0Z290byBwdXRfZXN0YWJfc2s7XG4mIzQzO1xuJiM0MztcdFx0XHRzdGF0ZSA9IChzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfVElNRV9XQUlUKSA/XG4mIzQzO1x0XHRcdFx0UkVBRF9PTkNFKGluZXRfdHdzayhzayktXHUwMDNldHdfc3Vic3RhdGUpIDogc2stXHUwMDNlc2tfc3RhdGU7XG4mIzQzO1x0XHRcdGlmICghKGlkaWFnX3N0YXRlcyBcdTAwMjYgKDEgXHUwMDNjXHUwMDNjIHN0YXRlKSkpXG4mIzQzO1x0XHRcdFx0Z290byBwdXRfZXN0YWJfc2s7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoci1cdTAwM2VzZGlhZ19mYW1pbHkgIT0gQUZfVU5TUEVDIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgc2stXHUwMDNlc2tfZmFtaWx5ICE9IHItXHUwMDNlc2RpYWdfZmFtaWx5KVxuJiM0MztcdFx0XHRcdGdvdG8gcHV0X2VzdGFiX3NrO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKHItXHUwMDNlaWQuaWRpYWdfc3BvcnQgIT0gaHRvbnMoUkVBRF9PTkNFKHNrLVx1MDAzZXNrX251bSkpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgci1cdTAwM2VpZC5pZGlhZ19zcG9ydClcbiYjNDM7XHRcdFx0XHRnb3RvIHB1dF9lc3RhYl9zaztcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChyLVx1MDAzZWlkLmlkaWFnX2Rwb3J0ICE9IHNrLVx1MDAzZXNrX2Rwb3J0IFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgci1cdTAwM2VpZC5pZGlhZ19kcG9ydClcbiYjNDM7XHRcdFx0XHRnb3RvIHB1dF9lc3RhYl9zaztcbiYjNDM7XG4mIzQzO1x0XHRcdHR3c2tfYnVpbGRfYXNzZXJ0KCk7XG4mIzQzO1x0XHRcdGlmIChyZXMgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBpbmV0X2RpYWdfYmNfc2soY2JfZGF0YSwgc2spKSB7XG4mIzQzO1x0XHRcdFx0cmVzID0gc2tfZGlhZ19maWxsKHNrLCBza2IsIGNiLCByLCBOTE1fRl9NVUxUSSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgbmV0X2FkbWluKTtcbiBcdFx0XHRcdGlmIChyZXMgXHUwMDNjIDApXG4gXHRcdFx0XHRcdG51bSA9IG51bV9hcnJbaWR4XTtcbiBcdFx0XHR9XG4tXHRcdFx0c29ja19nZW5fcHV0KHNrX2FycltpZHhdKTtcbiYjNDM7XHRcdFx0aWYgKHJlcyBcdTAwM2U9IDApXG4mIzQzO1x0XHRcdFx0dGNwX2RpYWdfc2F2ZV9jdXJzb3IoY2JfZGF0YSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBJTkVUX0RJQUdfRFVNUF9DVVJTT1JfVENQX0VIQVNILFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIGksIHNrKTtcbiYjNDM7cHV0X2VzdGFiX3NrOlxuJiM0MztcdFx0XHRzb2NrX2dlbl9wdXQoc2spO1xuIFx0XHR9XG4gXHRcdGlmIChyZXMgXHUwMDNjIDApXG4gXHRcdFx0YnJlYWs7XG5AQCAtNTQ4LDkgJiM0Mzs2ODgsMTEgQEAgc3RhdGljIHZvaWQgdGNwX2RpYWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFxuIFx0XHRpZiAoYWNjdW0gPT0gU0tBUlJfU1opIHtcbi1cdFx0XHRzX251bSA9IG51bSAmIzQzOyAxO1xuJiM0MztcdFx0XHRzX251bSA9IDA7XG4gXHRcdFx0Z290byBuZXh0X2NodW5rO1xuIFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0aW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKGNiX2RhdGEpO1xuIFx0fVxuIFxuIGRvbmU6XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL21wdGNwX2RpYWcuYyBiL25ldC9tcHRjcC9tcHRjcF9kaWFnLmNcbmluZGV4IDEzNmMyZDA1YzBlZWIuLjk4MWU2NDM0MzAzOTAgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jXG5AQCAtNiwxMiAmIzQzOzYsMjUgQEBcbiAgKiBBdXRob3I6IFBhb2xvIEFiZW5pIFx1MDAzY3BhYmVuaUByZWRoYXQuY29tXHUwMDNlXG4gICovXG4gXG4mIzQzOy8qIFByb2Nlc3MgYSBib3VuZGVkIG51bWJlciBvZiBsaXN0ZW5lcnMgcGVyIGJ1Y2tldCBsb2NrIGhvbGQuICovXG4mIzQzOyNkZWZpbmUgTVBUQ1BfRElBR19CVUxLX1NaIDE2XG4mIzQzO1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbmV0X2RpYWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtwcm90b2NvbC5oXCYjMzQ7XG4gXG4mIzQzO3N0YXRpYyB2b2lkIG1wdGNwX2RpYWdfc2F2ZV9jdXJzb3Ioc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEsXG4mIzQzO1x0XHRcdFx0ICAgdW5zaWduZWQgaW50IHNsb3QsIHN0cnVjdCBzb2NrICpzaylcbiYjNDM7e1xuJiM0MztcdHNvY2tfaG9sZChzayk7XG4mIzQzO1x0aW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKGNiX2RhdGEpO1xuJiM0MztcdGNiX2RhdGEtXHUwMDNlZHVtcF9jdXJzb3IgPSBzaztcbiYjNDM7XHRjYl9kYXRhLVx1MDAzZWR1bXBfY3Vyc29yX3Nsb3QgPSBzbG90O1xuJiM0MztcdGNiX2RhdGEtXHUwMDNlZHVtcF9jdXJzb3JfdHlwZSA9IElORVRfRElBR19EVU1QX0NVUlNPUl9NUFRDUF9MSVNURU47XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBza19kaWFnX2R1bXAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbiBcdFx0XHRjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX3JlcV92MiAqcmVxLFxuQEAgLTc3LDYgJiM0Mzs5MCw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2RpYWdfZHVtcF9saXN0ZW5lcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhXG4gXHRcdFx0XHQgICAgICBib29sIG5ldF9hZG1pbilcbiB7XG4gXHRzdHJ1Y3QgbXB0Y3BfZGlhZ19jdHggKmRpYWdfY3R4ID0gKHZvaWQgKiljYi1cdTAwM2VjdHg7XG4mIzQzO1x0c3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEgPSBjYi1cdTAwM2VkYXRhO1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVx1MDAzZXNrKTtcbiBcdHN0cnVjdCBpbmV0X2hhc2hpbmZvICpoaW5mbztcbiBcdGludCBpO1xuQEAgLTg2LDYyICYjNDM7MTAwLDk4IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2RpYWdfZHVtcF9saXN0ZW5lcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhXG4gXHRmb3IgKGkgPSBkaWFnX2N0eC1cdTAwM2VsX3Nsb3Q7IGkgXHUwMDNjPSBoaW5mby1cdTAwM2VsaGFzaDJfbWFzazsgaSYjNDM7JiM0MzspIHtcbiBcdFx0c3RydWN0IGluZXRfbGlzdGVuX2hhc2hidWNrZXQgKmlsYjtcbiBcdFx0c3RydWN0IGhsaXN0X251bGxzX25vZGUgKm5vZGU7XG4tXHRcdHN0cnVjdCBzb2NrICpzaztcbi1cdFx0aW50IG51bSA9IDA7XG4tXG4mIzQzO1x0XHRzdHJ1Y3Qgc29jayAqdG1wLCAqc2ssICpza19hcnJbTVBUQ1BfRElBR19CVUxLX1NaXTtcbiYjNDM7XHRcdHN0cnVjdCBzb2NrICpjdXJzb3I7XG4mIzQzO1x0XHRpbnQgYWNjdW0sIGlkeCwgbnVtLCByZXQ7XG4mIzQzO1x0XHRpbnQgbnVtX2FycltNUFRDUF9ESUFHX0JVTEtfU1pdO1xuJiM0MztcdFx0Ym9vbCB1c2VfY3Vyc29yO1xuJiM0MztcbiYjNDM7cmVzdW1lX2xpc3Rlbl93YWxrOlxuJiM0MztcdFx0bnVtID0gMDtcbiYjNDM7XHRcdGFjY3VtID0gMDtcbiBcdFx0aWxiID0gXHUwMDI2aGluZm8tXHUwMDNlbGhhc2gyW2ldO1xuJiM0MztcdFx0cmV0ID0gMDtcbiBcbiBcdFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0XHRzcGluX2xvY2soXHUwMDI2aWxiLVx1MDAzZWxvY2spO1xuLVx0XHRza19udWxsc19mb3JfZWFjaChzaywgbm9kZSwgXHUwMDI2aWxiLVx1MDAzZW51bGxzX2hlYWQpIHtcbi1cdFx0XHRjb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpjdHggPSBtcHRjcF9zdWJmbG93X2N0eChzayk7XG4tXHRcdFx0c3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spO1xuLVx0XHRcdGludCByZXQ7XG4tXG4tXHRcdFx0aWYgKG51bSBcdTAwM2MgZGlhZ19jdHgtXHUwMDNlbF9udW0pXG4tXHRcdFx0XHRnb3RvIG5leHRfbGlzdGVuO1xuLVxuLVx0XHRcdGlmICghY3R4IHx8IHN0cmNtcChpbmV0X2NzayhzayktXHUwMDNlaWNza191bHBfb3BzLVx1MDAzZW5hbWUsIFwmIzM0O21wdGNwXCYjMzQ7KSlcbi1cdFx0XHRcdGdvdG8gbmV4dF9saXN0ZW47XG4tXG4tXHRcdFx0c2sgPSBjdHgtXHUwMDNlY29ubjtcbi1cdFx0XHRpZiAoIXNrIHx8ICFuZXRfZXEoc29ja19uZXQoc2spLCBuZXQpKVxuLVx0XHRcdFx0Z290byBuZXh0X2xpc3Rlbjtcbi1cbi1cdFx0XHRpZiAoci1cdTAwM2VzZGlhZ19mYW1pbHkgIT0gQUZfVU5TUEVDIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICBzay1cdTAwM2Vza19mYW1pbHkgIT0gci1cdTAwM2VzZGlhZ19mYW1pbHkpXG4tXHRcdFx0XHRnb3RvIG5leHRfbGlzdGVuO1xuLVxuLVx0XHRcdGlmIChyLVx1MDAzZWlkLmlkaWFnX3Nwb3J0ICE9IGluZXQtXHUwMDNlaW5ldF9zcG9ydCBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgci1cdTAwM2VpZC5pZGlhZ19zcG9ydClcbiYjNDM7XHRcdGN1cnNvciA9IGNiX2RhdGEtXHUwMDNlZHVtcF9jdXJzb3I7XG4mIzQzO1x0XHR1c2VfY3Vyc29yID0gY3Vyc29yIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgIGNiX2RhdGEtXHUwMDNlZHVtcF9jdXJzb3JfdHlwZSA9PVxuJiM0MztcdFx0XHQgICAgIElORVRfRElBR19EVU1QX0NVUlNPUl9NUFRDUF9MSVNURU4gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICAgY2JfZGF0YS1cdTAwM2VkdW1wX2N1cnNvcl9zbG90ID09IGkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICAgIWhsaXN0X251bGxzX3VuaGFzaGVkKFx1MDAyNmN1cnNvci1cdTAwM2Vza19udWxsc19ub2RlKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgICBjdXJzb3ItXHUwMDNlc2tfbnVsbHNfbm9kZS5wcHJldiAhPSBMSVNUX1BPSVNPTjI7XG4mIzQzO1x0XHRub2RlID0gdXNlX2N1cnNvciA/IGN1cnNvci1cdTAwM2Vza19udWxsc19ub2RlLm5leHQgOlxuJiM0MztcdFx0XHRcdCAgICBpbGItXHUwMDNlbnVsbHNfaGVhZC5maXJzdDtcbiYjNDM7XHRcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X2Zyb20oc2ssIG5vZGUsIHNrX251bGxzX25vZGUpIHtcbiYjNDM7XHRcdFx0aWYgKCF1c2VfY3Vyc29yIFx1MDAyNlx1MDAyNiBudW0gXHUwMDNjIGRpYWdfY3R4LVx1MDAzZWxfbnVtKVxuIFx0XHRcdFx0Z290byBuZXh0X2xpc3RlbjtcbiBcbiBcdFx0XHRpZiAoIXJlZmNvdW50X2luY19ub3RfemVybyhcdTAwMjZzay1cdTAwM2Vza19yZWZjbnQpKVxuIFx0XHRcdFx0Z290byBuZXh0X2xpc3RlbjtcbiBcbi1cdFx0XHRyZXQgPSBza19kaWFnX2R1bXAoc2ssIHNrYiwgY2IsIHIsIG5ldF9hZG1pbik7XG4tXG4tXHRcdFx0c29ja19wdXQoc2spO1xuLVxuLVx0XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbi1cdFx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmlsYi1cdTAwM2Vsb2NrKTtcbi1cdFx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0XHRcdFx0ZGlhZ19jdHgtXHUwMDNlbF9zbG90ID0gaTtcbi1cdFx0XHRcdGRpYWdfY3R4LVx1MDAzZWxfbnVtID0gbnVtO1xuLVx0XHRcdFx0cmV0dXJuO1xuLVx0XHRcdH1cbi1cdFx0XHRkaWFnX2N0eC1cdTAwM2VsX251bSA9IG51bSAmIzQzOyAxO1xuLVx0XHRcdG51bSA9IDA7XG4mIzQzO1x0XHRcdG51bV9hcnJbYWNjdW1dID0gbnVtO1xuJiM0MztcdFx0XHRza19hcnJbYWNjdW1dID0gc2s7XG4mIzQzO1x0XHRcdGlmICgmIzQzOyYjNDM7YWNjdW0gPT0gTVBUQ1BfRElBR19CVUxLX1NaKVxuJiM0MztcdFx0XHRcdGJyZWFrO1xuIG5leHRfbGlzdGVuOlxuIFx0XHRcdCYjNDM7JiM0MztudW07XG4gXHRcdH1cbiBcdFx0c3Bpbl91bmxvY2soXHUwMDI2aWxiLVx1MDAzZWxvY2spO1xuIFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiYjNDM7XHRcdGZvciAoaWR4ID0gMDsgaWR4IFx1MDAzYyBhY2N1bTsgaWR4JiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRjb25zdCBzdHJ1Y3QgdGNwX3VscF9vcHMgKnVscF9vcHM7XG4mIzQzO1x0XHRcdGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKmN0eDtcbiYjNDM7XHRcdFx0c3RydWN0IGluZXRfc29jayAqaW5ldDtcbiYjNDM7XG4mIzQzO1x0XHRcdHNrID0gc2tfYXJyW2lkeF07XG4mIzQzO1x0XHRcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRcdFx0Y3R4ID0gbXB0Y3Bfc3ViZmxvd19jdHgoc2spO1xuJiM0MztcdFx0XHR1bHBfb3BzID0gUkVBRF9PTkNFKGluZXRfY3NrKHNrKS1cdTAwM2VpY3NrX3VscF9vcHMpO1xuJiM0MztcdFx0XHRpbmV0ID0gaW5ldF9zayhzayk7XG4mIzQzO1x0XHRcdHRtcCA9IGN0eCA/IGN0eC1cdTAwM2Vjb25uIDogTlVMTDtcbiYjNDM7XHRcdFx0aWYgKCFjdHggfHwgIXVscF9vcHMgfHwgc3RyY21wKHVscF9vcHMtXHUwMDNlbmFtZSwgXCYjMzQ7bXB0Y3BcJiMzNDspIHx8XG4mIzQzO1x0XHRcdCAgICAhdG1wIHx8ICFuZXRfZXEoc29ja19uZXQodG1wKSwgbmV0KSB8fFxuJiM0MztcdFx0XHQgICAgKHItXHUwMDNlc2RpYWdfZmFtaWx5ICE9IEFGX1VOU1BFQyBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgICB0bXAtXHUwMDNlc2tfZmFtaWx5ICE9IHItXHUwMDNlc2RpYWdfZmFtaWx5KSB8fFxuJiM0MztcdFx0XHQgICAgKHItXHUwMDNlaWQuaWRpYWdfc3BvcnQgIT0gaW5ldC1cdTAwM2VpbmV0X3Nwb3J0IFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgIHItXHUwMDNlaWQuaWRpYWdfc3BvcnQpIHx8XG4mIzQzO1x0XHRcdCAgICAhcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNnRtcC1cdTAwM2Vza19yZWZjbnQpKSB7XG4mIzQzO1x0XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0XHRcdFx0Z290byBwcm9jZXNzZWRfbGlzdGVuZXJfc2s7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNlPSAwKSB7XG4mIzQzO1x0XHRcdFx0cmV0ID0gc2tfZGlhZ19kdW1wKHRtcCwgc2tiLCBjYiwgciwgbmV0X2FkbWluKTtcbiYjNDM7XHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdFx0bnVtID0gbnVtX2FycltpZHhdO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdHNvY2tfcHV0KHRtcCk7XG4mIzQzO3Byb2Nlc3NlZF9saXN0ZW5lcl9zazpcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2U9IDApXG4mIzQzO1x0XHRcdFx0bXB0Y3BfZGlhZ19zYXZlX2N1cnNvcihjYl9kYXRhLCBpLCBzayk7XG4mIzQzO1x0XHRcdHNvY2tfcHV0KHNrKTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRcdGRpYWdfY3R4LVx1MDAzZWxfc2xvdCA9IGk7XG4mIzQzO1x0XHRcdGRpYWdfY3R4LVx1MDAzZWxfbnVtID0gbnVtO1xuJiM0MztcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHRjb25kX3Jlc2NoZWQoKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoYWNjdW0gPT0gTVBUQ1BfRElBR19CVUxLX1NaKSB7XG4mIzQzO1x0XHRcdGRpYWdfY3R4LVx1MDAzZWxfbnVtID0gMDtcbiYjNDM7XHRcdFx0Z290byByZXN1bWVfbGlzdGVuX3dhbGs7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKGNiX2RhdGEpO1xuIFx0XHRkaWFnX2N0eC1cdTAwM2VsX251bSA9IDA7XG4gXHR9XG4gXG4mIzQzO1x0aW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKGNiX2RhdGEpO1xuIFx0ZGlhZ19jdHgtXHUwMDNlbF9udW0gPSAwO1xuIFx0ZGlhZ19jdHgtXHUwMDNlbF9zbG90ID0gaTtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTc6NTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVRfRElBRyYjMzQ7LAogICAgJiMzNDtJTkVUX1RDUF9ESUFHJiMzNDssCiAgICAmIzM0O01QVENQJiMzNDssCiAgICAmIzM0O0lORVRfTVBUQ1BfRElBRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF9kaWFnX2R1bXAmIzM0OywKICAgICYjMzQ7bXB0Y3BfZGlhZ19kdW1wX2xpc3RlbmVycyYjMzQ7LAogICAgJiMzNDtpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGN1cnNvciBtZWNoYW5pc20gZm9yIGR1bXBpbmcgVENQIGFuZCBNUFRDUCBzb2NrZXRzIHZpYSB0aGUgaW5ldF9kaWFnIG5ldGxpbmsgaW50ZXJmYWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayB0aGF0IGFmZmVjdHMgaG93IHNvY2tldHMgYXJlIGl0ZXJhdGVkIGFuZCBkdW1wZWQsIHByZXZlbnRpbmcgZHVwbGljYXRlcyBvciBtaXNzZWQgc29ja2V0cyB3aGVuIHRoZSBoYXNoIHRhYmxlIGNoYW5nZXMgZHVyaW5nIHRoZSBkdW1wLiBJdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjI5YTMxNTE5ZGNlZTJiY2Q1OWZmZTJkYTRkMjVkMTZiYWU2OWRiNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDMwIDE3OjUyOjUwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbmV0X2RpYWcuaCBiL2luY2x1ZGUvbGludXgvaW5ldF9kaWFnLmgKaW5kZXggNzA0ZmQ0MTVjMmI0OS4uNDg1OWU3N2EyOGM3YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbmV0X2RpYWcuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2luZXRfZGlhZy5oCkBAIC02LDYgJiM0Mzs2LDcgQEAKICNpbmNsdWRlICZsdDt1YXBpL2xpbnV4L2luZXRfZGlhZy5oJmd0OwogCiBzdHJ1Y3QgaW5ldF9oYXNoaW5mbzsKJiM0MztzdHJ1Y3Qgc29jazsKIAogc3RydWN0IGluZXRfZGlhZ19oYW5kbGVyIHsKIAlzdHJ1Y3QgbW9kdWxlCSpvd25lcjsKQEAgLTMyLDEyICYjNDM7MzMsMjQgQEAgc3RydWN0IGluZXRfZGlhZ19oYW5kbGVyIHsKIH07CiAKIHN0cnVjdCBicGZfc2tfc3RvcmFnZV9kaWFnOwomIzQzOwomIzQzO2VudW0gaW5ldF9kaWFnX2R1bXBfY3Vyc29yX3R5cGUgewomIzQzOwlJTkVUX0RJQUdfRFVNUF9DVVJTT1JfTk9ORSwKJiM0MzsJSU5FVF9ESUFHX0RVTVBfQ1VSU09SX1RDUF9MSVNURU4sCiYjNDM7CUlORVRfRElBR19EVU1QX0NVUlNPUl9UQ1BfQklORCwKJiM0MzsJSU5FVF9ESUFHX0RVTVBfQ1VSU09SX1RDUF9FSEFTSCwKJiM0MzsJSU5FVF9ESUFHX0RVTVBfQ1VSU09SX01QVENQX0xJU1RFTiwKJiM0Mzt9OwomIzQzOwogc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgewogCXN0cnVjdCBubGF0dHIgKnJlcV9ubGFzW19fSU5FVF9ESUFHX1JFUV9NQVhdOwogI2RlZmluZSBpbmV0X2RpYWdfbmxhX2JjIHJlcV9ubGFzW0lORVRfRElBR19SRVFfQllURUNPREVdCiAjZGVmaW5lIGluZXRfZGlhZ19ubGFfYnBmX3N0Z3MgcmVxX25sYXNbSU5FVF9ESUFHX1JFUV9TS19CUEZfU1RPUkFHRVNdCiAKIAlzdHJ1Y3QgYnBmX3NrX3N0b3JhZ2VfZGlhZyAqYnBmX3N0Z19kaWFnOwomIzQzOwlzdHJ1Y3Qgc29jayAqZHVtcF9jdXJzb3I7CiYjNDM7CXVuc2lnbmVkIGludCBkdW1wX2N1cnNvcl9zbG90OwomIzQzOwl1OCBkdW1wX2N1cnNvcl90eXBlOwogCWJvb2wgbWFya19uZWVkZWQ7CS8qIElORVRfRElBR19CQ19NQVJLX0NPTkQgcHJlc2VudC4gKi8KICNpZmRlZiBDT05GSUdfU09DS19DR1JPVVBfREFUQQogCWJvb2wgY2dyb3VwX25lZWRlZDsJLyogSU5FVF9ESUFHX0JDX0NHUk9VUF9DT05EIHByZXNlbnQuICovCkBAIC01Myw2ICYjNDM7NjYsOCBAQCBpbnQgaW5ldF9za19kaWFnX2ZpbGwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2ssCiAKIGludCBpbmV0X2RpYWdfYmNfc2soY29uc3Qgc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEsIHN0cnVjdCBzb2NrICpzayk7CiAKJiM0Mzt2b2lkIGluZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvcihzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSAqY2JfZGF0YSk7CiYjNDM7CiB2b2lkIGluZXRfZGlhZ19tc2dfY29tbW9uX2ZpbGwoc3RydWN0IGluZXRfZGlhZ19tc2cgKnIsIHN0cnVjdCBzb2NrICpzayk7CiAKIHN0YXRpYyBpbmxpbmUgc2l6ZV90IGluZXRfZGlhZ19tc2dfYXR0cnNfc2l6ZSh2b2lkKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9kaWFnLmMgYi9uZXQvaXB2NC9pbmV0X2RpYWcuYwppbmRleCAzNGI3N2FhODdkMGE0Li40MTE0OGU4ODAwNTQ1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0X2RpYWcuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pbmV0X2RpYWcuYwpAQCAtODkxLDEwICYjNDM7ODkxLDIzIEBAIHN0YXRpYyBpbnQgaW5ldF9kaWFnX2R1bXBfc3RhcnRfY29tcGF0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIAlyZXR1cm4gX19pbmV0X2RpYWdfZHVtcF9zdGFydChjYiwgc2l6ZW9mKHN0cnVjdCBpbmV0X2RpYWdfcmVxKSk7CiB9CiAKJiM0Mzt2b2lkIGluZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvcihzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSAqY2JfZGF0YSkKJiM0Mzt7CiYjNDM7CWlmICghY2JfZGF0YS0mZ3Q7ZHVtcF9jdXJzb3IpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXNvY2tfZ2VuX3B1dChjYl9kYXRhLSZndDtkdW1wX2N1cnNvcik7CiYjNDM7CWNiX2RhdGEtJmd0O2R1bXBfY3Vyc29yID0gTlVMTDsKJiM0MzsJY2JfZGF0YS0mZ3Q7ZHVtcF9jdXJzb3Jfc2xvdCA9IDA7CiYjNDM7CWNiX2RhdGEtJmd0O2R1bXBfY3Vyc29yX3R5cGUgPSBJTkVUX0RJQUdfRFVNUF9DVVJTT1JfTk9ORTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoaW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKTsKJiM0MzsKIHN0YXRpYyBpbnQgaW5ldF9kaWFnX2R1bXBfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiB7CiAJc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEgPSBjYi0mZ3Q7ZGF0YTsKIAomIzQzOwlpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3IoY2JfZGF0YSk7CiAJYnBmX3NrX3N0b3JhZ2VfZGlhZ19mcmVlKGNiX2RhdGEtJmd0O2JwZl9zdGdfZGlhZyk7CiAJa2ZyZWUoY2ItJmd0O2RhdGEpOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfZGlhZy5jIGIvbmV0L2lwdjQvdGNwX2RpYWcuYwppbmRleCBiYTFmZGJlOTgwN2ZkLi5iZTBjMjJjYzQ0NWIyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfZGlhZy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9kaWFnLmMKQEAgLTI4NSw2ICYjNDM7Mjg1LDY1IEBAIHN0YXRpYyBpbnQgc2tfZGlhZ19maWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgbmV0X2FkbWluKTsKIH0KIAomIzQzOy8qIFByb2Nlc3MgYSBtYXhpbXVtIG9mIFNLQVJSX1NaIHNvY2tldHMgYXQgYSB0aW1lIHdoZW4gd2Fsa2luZyBoYXNoIGJ1Y2tldHMKJiM0MzsgKiB3aXRoIGJoIGRpc2FibGVkLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgU0tBUlJfU1ogMTYKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0Y3BfZGlhZ19zYXZlX2N1cnNvcihzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSAqY2JfZGF0YSwgaW50IHR5cGUsCiYjNDM7CQkJCSB1bnNpZ25lZCBpbnQgc2xvdCwgc3RydWN0IHNvY2sgKnNrKQomIzQzO3sKJiM0MzsJc29ja19ob2xkKHNrKTsKJiM0MzsJaW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKGNiX2RhdGEpOwomIzQzOwljYl9kYXRhLSZndDtkdW1wX2N1cnNvciA9IHNrOwomIzQzOwljYl9kYXRhLSZndDtkdW1wX2N1cnNvcl9zbG90ID0gc2xvdDsKJiM0MzsJY2JfZGF0YS0mZ3Q7ZHVtcF9jdXJzb3JfdHlwZSA9IHR5cGU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHRjcF9kaWFnX2JpbmRfY29sbGVjdF9zb2NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKipza19hcnIsCiYjNDM7CQkJCSAgICAgICBpbnQgKm51bV9hcnIsIGludCAqYWNjdW0sIGludCBudW0pCiYjNDM7ewomIzQzOwlzb2NrX2hvbGQoc2spOwomIzQzOwludW1fYXJyWyphY2N1bV0gPSBudW07CiYjNDM7CXNrX2FyclsqYWNjdW1dID0gc2s7CiYjNDM7CiYjNDM7CXJldHVybiAmIzQzOyYjNDM7KmFjY3VtID09IFNLQVJSX1NaOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCB0Y3BfZGlhZ19iaW5kX2NvbGxlY3Rfb3duZXJzKHN0cnVjdCBobGlzdF9oZWFkICpvd25lcnMsCiYjNDM7CQkJCQkgc3RydWN0IHNvY2sgKipza19hcnIsIGludCAqbnVtX2FyciwKJiM0MzsJCQkJCSBpbnQgKmFjY3VtLCBpbnQgKm51bSwgaW50IHNfbnVtKQomIzQzO3sKJiM0MzsJc3RydWN0IHNvY2sgKnNrOwomIzQzOwomIzQzOwlza19mb3JfZWFjaF9ib3VuZChzaywgb3duZXJzKSB7CiYjNDM7CQlpZiAoKm51bSAmbHQ7IHNfbnVtKSB7CiYjNDM7CQkJKCpudW0pJiM0MzsmIzQzOzsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmICh0Y3BfZGlhZ19iaW5kX2NvbGxlY3Rfc29jayhzaywgc2tfYXJyLCBudW1fYXJyLCBhY2N1bSwgKm51bSkpCiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CQkoKm51bSkmIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgdGNwX2RpYWdfYmluZF9jb2xsZWN0X293bmVyc19jb250aW51ZShzdHJ1Y3Qgc29jayAqc2ssCiYjNDM7CQkJCQkJICBzdHJ1Y3Qgc29jayAqKnNrX2FyciwKJiM0MzsJCQkJCQkgIGludCAqbnVtX2FyciwgaW50ICphY2N1bSwKJiM0MzsJCQkJCQkgIGludCAqbnVtKQomIzQzO3sKJiM0MzsJaGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWUoc2ssIHNrX2JpbmRfbm9kZSkgewomIzQzOwkJaWYgKHRjcF9kaWFnX2JpbmRfY29sbGVjdF9zb2NrKHNrLCBza19hcnIsIG51bV9hcnIsIGFjY3VtLCAqbnVtKSkKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCSgqbnVtKSYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHR3c2tfYnVpbGRfYXNzZXJ0KHZvaWQpCiB7CiAJQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2ssIHR3X2ZhbWlseSkgIT0KQEAgLTMzNSw4ICYjNDM7Mzk0LDE1IEBAIHN0YXRpYyB2b2lkIHRjcF9kaWFnX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLAogCQlmb3IgKGkgPSBzX2k7IGkgJmx0Oz0gaGFzaGluZm8tJmd0O2xoYXNoMl9tYXNrOyBpJiM0MzsmIzQzOykgewogCQkJc3RydWN0IGluZXRfbGlzdGVuX2hhc2hidWNrZXQgKmlsYjsKIAkJCXN0cnVjdCBobGlzdF9udWxsc19ub2RlICpub2RlOwomIzQzOwkJCXN0cnVjdCBzb2NrICpza19hcnJbU0tBUlJfU1pdOwomIzQzOwkJCXN0cnVjdCBzb2NrICpjdXJzb3I7CiYjNDM7CQkJaW50IG51bV9hcnJbU0tBUlJfU1pdOwomIzQzOwkJCWludCBpZHgsIGFjY3VtLCByZXM7CiYjNDM7CQkJYm9vbCB1c2VfY3Vyc29yOwogCiYjNDM7cmVzdW1lX2xpc3Rlbl93YWxrOgogCQkJbnVtID0gMDsKJiM0MzsJCQlhY2N1bSA9IDA7CiAJCQlpbGIgPSAmYW1wO2hhc2hpbmZvLSZndDtsaGFzaDJbaV07CiAKIAkJCWlmIChobGlzdF9udWxsc19lbXB0eSgmYW1wO2lsYi0mZ3Q7bnVsbHNfaGVhZCkpIHsKQEAgLTM0NCw1MiAmIzQzOzQxMCw4MCBAQCBzdGF0aWMgdm9pZCB0Y3BfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCXNwaW5fbG9jaygmYW1wO2lsYi0mZ3Q7bG9jayk7Ci0JCQlza19udWxsc19mb3JfZWFjaChzaywgbm9kZSwgJmFtcDtpbGItJmd0O251bGxzX2hlYWQpIHsKLQkJCQlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CiYjNDM7CQkJY3Vyc29yID0gY2JfZGF0YS0mZ3Q7ZHVtcF9jdXJzb3I7CiYjNDM7CQkJdXNlX2N1cnNvciA9IGN1cnNvciAmYW1wOyZhbXA7CiYjNDM7CQkJCSAgICAgY2JfZGF0YS0mZ3Q7ZHVtcF9jdXJzb3JfdHlwZSA9PQomIzQzOwkJCQkgICAgIElORVRfRElBR19EVU1QX0NVUlNPUl9UQ1BfTElTVEVOICZhbXA7JmFtcDsKJiM0MzsJCQkJICAgICBjYl9kYXRhLSZndDtkdW1wX2N1cnNvcl9zbG90ID09IGkgJmFtcDsmYW1wOwomIzQzOwkJCQkgICAgICFobGlzdF9udWxsc191bmhhc2hlZCgmYW1wO2N1cnNvci0mZ3Q7c2tfbnVsbHNfbm9kZSkgJmFtcDsmYW1wOwomIzQzOwkJCQkgICAgIGN1cnNvci0mZ3Q7c2tfbnVsbHNfbm9kZS5wcHJldiAhPSBMSVNUX1BPSVNPTjI7CiYjNDM7CQkJbm9kZSA9IHVzZV9jdXJzb3IgPyBjdXJzb3ItJmd0O3NrX251bGxzX25vZGUubmV4dCA6CiYjNDM7CQkJCQkgICAgaWxiLSZndDtudWxsc19oZWFkLmZpcnN0OwomIzQzOwkJCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X2Zyb20oc2ssIG5vZGUsIHNrX251bGxzX25vZGUpIHsKJiM0MzsJCQkJaWYgKCF1c2VfY3Vyc29yICZhbXA7JmFtcDsgbnVtICZsdDsgc19udW0pCiYjNDM7CQkJCQlnb3RvIG5leHRfbGlzdGVuOwogCi0JCQkJaWYgKCFuZXRfZXEoc29ja19uZXQoc2spLCBuZXQpKQotCQkJCQljb250aW51ZTsKJiM0MzsJCQkJc29ja19ob2xkKHNrKTsKJiM0MzsJCQkJbnVtX2FyclthY2N1bV0gPSBudW07CiYjNDM7CQkJCXNrX2FyclthY2N1bV0gPSBzazsKJiM0MzsJCQkJaWYgKCYjNDM7JiM0MzthY2N1bSA9PSBTS0FSUl9TWikKJiM0MzsJCQkJCWJyZWFrOwogCi0JCQkJaWYgKG51bSAmbHQ7IHNfbnVtKSB7Ci0JCQkJCW51bSYjNDM7JiM0Mzs7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KJiM0MztuZXh0X2xpc3RlbjoKJiM0MzsJCQkJJiM0MzsmIzQzO251bTsKJiM0MzsJCQl9CiYjNDM7CQkJc3Bpbl91bmxvY2soJmFtcDtpbGItJmd0O2xvY2spOwogCiYjNDM7CQkJcmVzID0gMDsKJiM0MzsJCQlmb3IgKGlkeCA9IDA7IGlkeCAmbHQ7IGFjY3VtOyBpZHgmIzQzOyYjNDM7KSB7CiYjNDM7CQkJCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQ7CiYjNDM7CiYjNDM7CQkJCXNrID0gc2tfYXJyW2lkeF07CiYjNDM7CQkJCWlmICghbmV0X2VxKHNvY2tfbmV0KHNrKSwgbmV0KSkKJiM0MzsJCQkJCWdvdG8gcHJvY2Vzc2VkX2xpc3Rlbl9zazsKJiM0MzsKJiM0MzsJCQkJaW5ldCA9IGluZXRfc2soc2spOwogCQkJCWlmIChyLSZndDtzZGlhZ19mYW1pbHkgIT0gQUZfVU5TUEVDICZhbXA7JmFtcDsKIAkJCQkgICAgc2stJmd0O3NrX2ZhbWlseSAhPSByLSZndDtzZGlhZ19mYW1pbHkpCi0JCQkJCWdvdG8gbmV4dF9saXN0ZW47CiYjNDM7CQkJCQlnb3RvIHByb2Nlc3NlZF9saXN0ZW5fc2s7CiAKIAkJCQlpZiAoci0mZ3Q7aWQuaWRpYWdfc3BvcnQgIT0gaW5ldC0mZ3Q7aW5ldF9zcG9ydCAmYW1wOyZhbXA7CiAJCQkJICAgIHItJmd0O2lkLmlkaWFnX3Nwb3J0KQotCQkJCQlnb3RvIG5leHRfbGlzdGVuOwotCi0JCQkJaWYgKCFpbmV0X2RpYWdfYmNfc2soY2JfZGF0YSwgc2spKQotCQkJCQlnb3RvIG5leHRfbGlzdGVuOwomIzQzOwkJCQkJZ290byBwcm9jZXNzZWRfbGlzdGVuX3NrOwogCi0JCQkJaWYgKGluZXRfc2tfZGlhZ19maWxsKHNrLCBpbmV0X2NzayhzayksIHNrYiwKLQkJCQkJCSAgICAgIGNiLCByLCBOTE1fRl9NVUxUSSwKLQkJCQkJCSAgICAgIG5ldF9hZG1pbikgJmx0OyAwKSB7Ci0JCQkJCXNwaW5fdW5sb2NrKCZhbXA7aWxiLSZndDtsb2NrKTsKLQkJCQkJZ290byBkb25lOwomIzQzOwkJCQlpZiAocmVzICZndDs9IDAgJmFtcDsmYW1wOyBpbmV0X2RpYWdfYmNfc2soY2JfZGF0YSwgc2spKSB7CiYjNDM7CQkJCQlyZXMgPSBpbmV0X3NrX2RpYWdfZmlsbChzaywgaW5ldF9jc2soc2spLAomIzQzOwkJCQkJCQkJc2tiLCBjYiwgciwgTkxNX0ZfTVVMVEksCiYjNDM7CQkJCQkJCQluZXRfYWRtaW4pOwomIzQzOwkJCQkJaWYgKHJlcyAmbHQ7IDApCiYjNDM7CQkJCQkJbnVtID0gbnVtX2FycltpZHhdOwogCQkJCX0KJiM0Mztwcm9jZXNzZWRfbGlzdGVuX3NrOgomIzQzOwkJCQlpZiAocmVzICZndDs9IDApCiYjNDM7CQkJCQl0Y3BfZGlhZ19zYXZlX2N1cnNvcihjYl9kYXRhLAomIzQzOwkJCQkJCQkgICAgIElORVRfRElBR19EVU1QX0NVUlNPUl9UQ1BfTElTVEVOLAomIzQzOwkJCQkJCQkgICAgIGksIHNrKTsKJiM0MzsJCQkJc29ja19wdXQoc2spOwomIzQzOwkJCX0KJiM0MzsJCQlpZiAocmVzICZsdDsgMCkKJiM0MzsJCQkJZ290byBkb25lOwogCi1uZXh0X2xpc3RlbjoKLQkJCQkmIzQzOyYjNDM7bnVtOwomIzQzOwkJCWNvbmRfcmVzY2hlZCgpOwomIzQzOwomIzQzOwkJCWlmIChhY2N1bSA9PSBTS0FSUl9TWikgewomIzQzOwkJCQlzX251bSA9IDA7CiYjNDM7CQkJCWdvdG8gcmVzdW1lX2xpc3Rlbl93YWxrOwogCQkJfQotCQkJc3Bpbl91bmxvY2soJmFtcDtpbGItJmd0O2xvY2spOwogCiYjNDM7CQkJaW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKGNiX2RhdGEpOwogCQkJc19udW0gPSAwOwogCQl9CiBza2lwX2xpc3Rlbl9odDoKJiM0MzsJCWluZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvcihjYl9kYXRhKTsKIAkJY2ItJmd0O2FyZ3NbMF0gPSAxOwogCQlzX2kgPSBudW0gPSBzX251bSA9IDA7CiAJfQogCi0vKiBQcm9jZXNzIGEgbWF4aW11bSBvZiBTS0FSUl9TWiBzb2NrZXRzIGF0IGEgdGltZSB3aGVuIHdhbGtpbmcgaGFzaCBidWNrZXRzCi0gKiB3aXRoIGJoIGRpc2FibGVkLgotICovCi0jZGVmaW5lIFNLQVJSX1NaIDE2Ci0KIAkvKiBEdW1wIGJvdW5kIGJ1dCBpbmFjdGl2ZSAobm90IGxpc3RlbmluZywgY29ubmVjdGluZywgZXRjLikgc29ja2V0cyAqLwogCWlmIChjYi0mZ3Q7YXJnc1swXSA9PSAxKSB7CiAJCWlmICghKGlkaWFnX3N0YXRlcyAmYW1wOyBUQ1BGX0JPVU5EX0lOQUNUSVZFKSkKQEAgLTM5OSw4ICYjNDM7NDkzLDEwIEBAIHN0YXRpYyB2b2lkIHRjcF9kaWFnX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLAogCQkJc3RydWN0IGluZXRfYmluZF9oYXNoYnVja2V0ICppYmI7CiAJCQlzdHJ1Y3QgaW5ldF9iaW5kMl9idWNrZXQgKnRiMjsKIAkJCXN0cnVjdCBzb2NrICpza19hcnJbU0tBUlJfU1pdOwomIzQzOwkJCXN0cnVjdCBzb2NrICpjdXJzb3I7CiAJCQlpbnQgbnVtX2FycltTS0FSUl9TWl07CiAJCQlpbnQgaWR4LCBhY2N1bSwgcmVzOwomIzQzOwkJCWJvb2wgdXNlX2N1cnNvcjsKIAogcmVzdW1lX2JpbmRfd2FsazoKIAkJCW51bSA9IDA7CkBAIC00MTIsMzQgJiM0Mzs1MDgsMzggQEAgc3RhdGljIHZvaWQgdGNwX2RpYWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsCiAJCQkJY29udGludWU7CiAJCQl9CiAJCQlzcGluX2xvY2tfYmgoJmFtcDtpYmItJmd0O2xvY2spOwotCQkJaW5ldF9iaW5kX2J1Y2tldF9mb3JfZWFjaCh0YjIsICZhbXA7aWJiLSZndDtjaGFpbikgewotCQkJCWlmICghbmV0X2VxKGliMl9uZXQodGIyKSwgbmV0KSkKLQkJCQkJY29udGludWU7Ci0KLQkJCQlza19mb3JfZWFjaF9ib3VuZChzaywgJmFtcDt0YjItJmd0O293bmVycykgewotCQkJCQlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7Ci0KLQkJCQkJaWYgKG51bSAmbHQ7IHNfbnVtKQotCQkJCQkJZ290byBuZXh0X2JpbmQ7Ci0KLQkJCQkJaWYgKHNrLSZndDtza19zdGF0ZSAhPSBUQ1BfQ0xPU0UgfHwKLQkJCQkJICAgICFpbmV0LSZndDtpbmV0X251bSkKLQkJCQkJCWdvdG8gbmV4dF9iaW5kOwotCi0JCQkJCWlmIChyLSZndDtzZGlhZ19mYW1pbHkgIT0gQUZfVU5TUEVDICZhbXA7JmFtcDsKLQkJCQkJICAgIHItJmd0O3NkaWFnX2ZhbWlseSAhPSBzay0mZ3Q7c2tfZmFtaWx5KQotCQkJCQkJZ290byBuZXh0X2JpbmQ7Ci0KLQkJCQkJaWYgKCFpbmV0X2RpYWdfYmNfc2soY2JfZGF0YSwgc2spKQotCQkJCQkJZ290byBuZXh0X2JpbmQ7Ci0KLQkJCQkJc29ja19ob2xkKHNrKTsKLQkJCQkJbnVtX2FyclthY2N1bV0gPSBudW07Ci0JCQkJCXNrX2FyclthY2N1bV0gPSBzazsKLQkJCQkJaWYgKCYjNDM7JiM0MzthY2N1bSA9PSBTS0FSUl9TWikKJiM0MzsJCQljdXJzb3IgPSBjYl9kYXRhLSZndDtkdW1wX2N1cnNvcjsKJiM0MzsJCQl1c2VfY3Vyc29yID0gY3Vyc29yICZhbXA7JmFtcDsKJiM0MzsJCQkJICAgICBjYl9kYXRhLSZndDtkdW1wX2N1cnNvcl90eXBlID09CiYjNDM7CQkJCSAgICAgSU5FVF9ESUFHX0RVTVBfQ1VSU09SX1RDUF9CSU5EICZhbXA7JmFtcDsKJiM0MzsJCQkJICAgICBjYl9kYXRhLSZndDtkdW1wX2N1cnNvcl9zbG90ID09IGkgJmFtcDsmYW1wOwomIzQzOwkJCQkgICAgICFobGlzdF91bmhhc2hlZCgmYW1wO2N1cnNvci0mZ3Q7c2tfYmluZF9ub2RlKSAmYW1wOyZhbXA7CiYjNDM7CQkJCSAgICAgY3Vyc29yLSZndDtza19iaW5kX25vZGUucHByZXYgIT0gTElTVF9QT0lTT04yICZhbXA7JmFtcDsKJiM0MzsJCQkJICAgICBpbmV0X2NzayhjdXJzb3IpLSZndDtpY3NrX2JpbmQyX2hhc2g7CiYjNDM7CQkJaWYgKHVzZV9jdXJzb3IpIHsKJiM0MzsJCQkJdGIyID0gaW5ldF9jc2soY3Vyc29yKS0mZ3Q7aWNza19iaW5kMl9oYXNoOwomIzQzOwkJCQlzayA9IGN1cnNvcjsKJiM0MzsJCQkJaWYgKHRjcF9kaWFnX2JpbmRfY29sbGVjdF9vd25lcnNfY29udGludWUoc2ssIHNrX2FyciwKJiM0MzsJCQkJCQkJCQkgIG51bV9hcnIsCiYjNDM7CQkJCQkJCQkJICAmYW1wO2FjY3VtLAomIzQzOwkJCQkJCQkJCSAgJmFtcDtudW0pKQomIzQzOwkJCQkJZ290byBwYXVzZV9iaW5kX3dhbGs7CiYjNDM7CQkJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlKHRiMiwgbm9kZSkgewomIzQzOwkJCQkJaWYgKHRjcF9kaWFnX2JpbmRfY29sbGVjdF9vd25lcnMoJmFtcDt0YjItJmd0O293bmVycywKJiM0MzsJCQkJCQkJCQkgc2tfYXJyLAomIzQzOwkJCQkJCQkJCSBudW1fYXJyLAomIzQzOwkJCQkJCQkJCSAmYW1wO2FjY3VtLAomIzQzOwkJCQkJCQkJCSAmYW1wO251bSwgMCkpCiYjNDM7CQkJCQkJZ290byBwYXVzZV9iaW5kX3dhbGs7CiYjNDM7CQkJCX0KJiM0MzsJCQl9IGVsc2UgewomIzQzOwkJCQlpbmV0X2JpbmRfYnVja2V0X2Zvcl9lYWNoKHRiMiwgJmFtcDtpYmItJmd0O2NoYWluKSB7CiYjNDM7CQkJCQlpZiAodGNwX2RpYWdfYmluZF9jb2xsZWN0X293bmVycygmYW1wO3RiMi0mZ3Q7b3duZXJzLAomIzQzOwkJCQkJCQkJCSBza19hcnIsCiYjNDM7CQkJCQkJCQkJIG51bV9hcnIsCiYjNDM7CQkJCQkJCQkJICZhbXA7YWNjdW0sCiYjNDM7CQkJCQkJCQkJICZhbXA7bnVtLCBzX251bSkpCiAJCQkJCQlnb3RvIHBhdXNlX2JpbmRfd2FsazsKLW5leHRfYmluZDoKLQkJCQkJbnVtJiM0MzsmIzQzOzsKIAkJCQl9CiAJCQl9CiBwYXVzZV9iaW5kX3dhbGs6CkBAIC00NDcsMTUgJiM0Mzs1NDcsMzMgQEAgc3RhdGljIHZvaWQgdGNwX2RpYWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsCiAKIAkJCXJlcyA9IDA7CiAJCQlmb3IgKGlkeCA9IDA7IGlkeCAmbHQ7IGFjY3VtOyBpZHgmIzQzOyYjNDM7KSB7Ci0JCQkJaWYgKHJlcyAmZ3Q7PSAwKSB7Ci0JCQkJCXJlcyA9IGluZXRfc2tfZGlhZ19maWxsKHNrX2FycltpZHhdLAotCQkJCQkJCQlOVUxMLCBza2IsIGNiLAomIzQzOwkJCQlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0OwomIzQzOwomIzQzOwkJCQlzayA9IHNrX2FycltpZHhdOwomIzQzOwkJCQlpZiAoIW5ldF9lcShzb2NrX25ldChzayksIG5ldCkpCiYjNDM7CQkJCQlnb3RvIHB1dF9iaW5kX3NrOwomIzQzOwomIzQzOwkJCQlpbmV0ID0gaW5ldF9zayhzayk7CiYjNDM7CQkJCWlmIChzay0mZ3Q7c2tfc3RhdGUgIT0gVENQX0NMT1NFIHx8ICFpbmV0LSZndDtpbmV0X251bSkKJiM0MzsJCQkJCWdvdG8gcHV0X2JpbmRfc2s7CiYjNDM7CiYjNDM7CQkJCWlmIChyLSZndDtzZGlhZ19mYW1pbHkgIT0gQUZfVU5TUEVDICZhbXA7JmFtcDsKJiM0MzsJCQkJICAgIHItJmd0O3NkaWFnX2ZhbWlseSAhPSBzay0mZ3Q7c2tfZmFtaWx5KQomIzQzOwkJCQkJZ290byBwdXRfYmluZF9zazsKJiM0MzsKJiM0MzsJCQkJaWYgKHJlcyAmZ3Q7PSAwICZhbXA7JmFtcDsgaW5ldF9kaWFnX2JjX3NrKGNiX2RhdGEsIHNrKSkgewomIzQzOwkJCQkJcmVzID0gaW5ldF9za19kaWFnX2ZpbGwoc2ssIE5VTEwsIHNrYiwgY2IsCiAJCQkJCQkJCXIsIE5MTV9GX01VTFRJLAogCQkJCQkJCQluZXRfYWRtaW4pOwogCQkJCQlpZiAocmVzICZsdDsgMCkKIAkJCQkJCW51bSA9IG51bV9hcnJbaWR4XTsKIAkJCQl9Ci0JCQkJc29ja19wdXQoc2tfYXJyW2lkeF0pOwomIzQzOwkJCQlpZiAocmVzICZndDs9IDApCiYjNDM7CQkJCQl0Y3BfZGlhZ19zYXZlX2N1cnNvcihjYl9kYXRhLAomIzQzOwkJCQkJCQkgICAgIElORVRfRElBR19EVU1QX0NVUlNPUl9UQ1BfQklORCwKJiM0MzsJCQkJCQkJICAgICBpLCBzayk7CiYjNDM7cHV0X2JpbmRfc2s6CiYjNDM7CQkJCXNvY2tfcHV0KHNrKTsKIAkJCX0KIAkJCWlmIChyZXMgJmx0OyAwKQogCQkJCWdvdG8gZG9uZTsKQEAgLTQ2MywxMyAmIzQzOzU4MSwxNSBAQCBzdGF0aWMgdm9pZCB0Y3BfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwKIAkJCWNvbmRfcmVzY2hlZCgpOwogCiAJCQlpZiAoYWNjdW0gPT0gU0tBUlJfU1opIHsKLQkJCQlzX251bSA9IG51bSAmIzQzOyAxOwomIzQzOwkJCQlzX251bSA9IDA7CiAJCQkJZ290byByZXN1bWVfYmluZF93YWxrOwogCQkJfQogCiYjNDM7CQkJaW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKGNiX2RhdGEpOwogCQkJc19udW0gPSAwOwogCQl9CiBza2lwX2JpbmRfaHQ6CiYjNDM7CQlpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3IoY2JfZGF0YSk7CiAJCWNiLSZndDthcmdzWzBdID0gMjsKIAkJc19pID0gbnVtID0gc19udW0gPSAwOwogCX0KQEAgLTQ4Miw0MiAmIzQzOzYwMiwzMyBAQCBzdGF0aWMgdm9pZCB0Y3BfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwKIAkJc3BpbmxvY2tfdCAqbG9jayA9IGluZXRfZWhhc2hfbG9ja3AoaGFzaGluZm8sIGkpOwogCQlzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbm9kZTsKIAkJc3RydWN0IHNvY2sgKnNrX2FycltTS0FSUl9TWl07CiYjNDM7CQlzdHJ1Y3Qgc29jayAqY3Vyc29yOwogCQlpbnQgbnVtX2FycltTS0FSUl9TWl07CiAJCWludCBpZHgsIGFjY3VtLCByZXM7CiYjNDM7CQlib29sIHVzZV9jdXJzb3I7CiAKIAkJaWYgKGhsaXN0X251bGxzX2VtcHR5KCZhbXA7aGVhZC0mZ3Q7Y2hhaW4pKQogCQkJY29udGludWU7CiAKLQkJaWYgKGkgJmd0OyBzX2kpCiYjNDM7CQlpZiAoaSAmZ3Q7IHNfaSkgewomIzQzOwkJCWluZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvcihjYl9kYXRhKTsKIAkJCXNfbnVtID0gMDsKJiM0MzsJCX0KIAogbmV4dF9jaHVuazoKIAkJbnVtID0gMDsKIAkJYWNjdW0gPSAwOwogCQlzcGluX2xvY2tfYmgobG9jayk7Ci0JCXNrX251bGxzX2Zvcl9lYWNoKHNrLCBub2RlLCAmYW1wO2hlYWQtJmd0O2NoYWluKSB7Ci0JCQlpbnQgc3RhdGU7Ci0KLQkJCWlmICghbmV0X2VxKHNvY2tfbmV0KHNrKSwgbmV0KSkKLQkJCQljb250aW51ZTsKLQkJCWlmIChudW0gJmx0OyBzX251bSkKLQkJCQlnb3RvIG5leHRfbm9ybWFsOwotCQkJc3RhdGUgPSAoc2stJmd0O3NrX3N0YXRlID09IFRDUF9USU1FX1dBSVQpID8KLQkJCQlSRUFEX09OQ0UoaW5ldF90d3NrKHNrKS0mZ3Q7dHdfc3Vic3RhdGUpIDogc2stJmd0O3NrX3N0YXRlOwotCQkJaWYgKCEoaWRpYWdfc3RhdGVzICZhbXA7ICgxICZsdDsmbHQ7IHN0YXRlKSkpCi0JCQkJZ290byBuZXh0X25vcm1hbDsKLQkJCWlmIChyLSZndDtzZGlhZ19mYW1pbHkgIT0gQUZfVU5TUEVDICZhbXA7JmFtcDsKLQkJCSAgICBzay0mZ3Q7c2tfZmFtaWx5ICE9IHItJmd0O3NkaWFnX2ZhbWlseSkKLQkJCQlnb3RvIG5leHRfbm9ybWFsOwotCQkJaWYgKHItJmd0O2lkLmlkaWFnX3Nwb3J0ICE9IGh0b25zKFJFQURfT05DRShzay0mZ3Q7c2tfbnVtKSkgJmFtcDsmYW1wOwotCQkJICAgIHItJmd0O2lkLmlkaWFnX3Nwb3J0KQotCQkJCWdvdG8gbmV4dF9ub3JtYWw7Ci0JCQlpZiAoci0mZ3Q7aWQuaWRpYWdfZHBvcnQgIT0gc2stJmd0O3NrX2Rwb3J0ICZhbXA7JmFtcDsKLQkJCSAgICByLSZndDtpZC5pZGlhZ19kcG9ydCkKLQkJCQlnb3RvIG5leHRfbm9ybWFsOwotCQkJdHdza19idWlsZF9hc3NlcnQoKTsKLQotCQkJaWYgKCFpbmV0X2RpYWdfYmNfc2soY2JfZGF0YSwgc2spKQomIzQzOwkJY3Vyc29yID0gY2JfZGF0YS0mZ3Q7ZHVtcF9jdXJzb3I7CiYjNDM7CQl1c2VfY3Vyc29yID0gY3Vyc29yICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgIGNiX2RhdGEtJmd0O2R1bXBfY3Vyc29yX3R5cGUgPT0KJiM0MzsJCQkgICAgIElORVRfRElBR19EVU1QX0NVUlNPUl9UQ1BfRUhBU0ggJmFtcDsmYW1wOwomIzQzOwkJCSAgICAgY2JfZGF0YS0mZ3Q7ZHVtcF9jdXJzb3Jfc2xvdCA9PSBpICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgICFobGlzdF9udWxsc191bmhhc2hlZCgmYW1wO2N1cnNvci0mZ3Q7c2tfbnVsbHNfbm9kZSkgJmFtcDsmYW1wOwomIzQzOwkJCSAgICAgY3Vyc29yLSZndDtza19udWxsc19ub2RlLnBwcmV2ICE9IExJU1RfUE9JU09OMjsKJiM0MzsJCW5vZGUgPSB1c2VfY3Vyc29yID8gY3Vyc29yLSZndDtza19udWxsc19ub2RlLm5leHQgOiBoZWFkLSZndDtjaGFpbi5maXJzdDsKJiM0MzsJCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X2Zyb20oc2ssIG5vZGUsIHNrX251bGxzX25vZGUpIHsKJiM0MzsJCQlpZiAoIXVzZV9jdXJzb3IgJmFtcDsmYW1wOyBudW0gJmx0OyBzX251bSkKIAkJCQlnb3RvIG5leHRfbm9ybWFsOwogCiAJCQlpZiAoIXJlZmNvdW50X2luY19ub3RfemVybygmYW1wO3NrLSZndDtza19yZWZjbnQpKQpAQCAtNTM0LDEzICYjNDM7NjQ1LDQyIEBAIHN0YXRpYyB2b2lkIHRjcF9kaWFnX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLAogCiAJCXJlcyA9IDA7CiAJCWZvciAoaWR4ID0gMDsgaWR4ICZsdDsgYWNjdW07IGlkeCYjNDM7JiM0MzspIHsKLQkJCWlmIChyZXMgJmd0Oz0gMCkgewotCQkJCXJlcyA9IHNrX2RpYWdfZmlsbChza19hcnJbaWR4XSwgc2tiLCBjYiwgciwKLQkJCQkJCSAgIE5MTV9GX01VTFRJLCBuZXRfYWRtaW4pOwomIzQzOwkJCWludCBzdGF0ZTsKJiM0MzsKJiM0MzsJCQlzayA9IHNrX2FycltpZHhdOwomIzQzOwkJCWlmICghbmV0X2VxKHNvY2tfbmV0KHNrKSwgbmV0KSkKJiM0MzsJCQkJZ290byBwdXRfZXN0YWJfc2s7CiYjNDM7CiYjNDM7CQkJc3RhdGUgPSAoc2stJmd0O3NrX3N0YXRlID09IFRDUF9USU1FX1dBSVQpID8KJiM0MzsJCQkJUkVBRF9PTkNFKGluZXRfdHdzayhzayktJmd0O3R3X3N1YnN0YXRlKSA6IHNrLSZndDtza19zdGF0ZTsKJiM0MzsJCQlpZiAoIShpZGlhZ19zdGF0ZXMgJmFtcDsgKDEgJmx0OyZsdDsgc3RhdGUpKSkKJiM0MzsJCQkJZ290byBwdXRfZXN0YWJfc2s7CiYjNDM7CiYjNDM7CQkJaWYgKHItJmd0O3NkaWFnX2ZhbWlseSAhPSBBRl9VTlNQRUMgJmFtcDsmYW1wOwomIzQzOwkJCSAgICBzay0mZ3Q7c2tfZmFtaWx5ICE9IHItJmd0O3NkaWFnX2ZhbWlseSkKJiM0MzsJCQkJZ290byBwdXRfZXN0YWJfc2s7CiYjNDM7CiYjNDM7CQkJaWYgKHItJmd0O2lkLmlkaWFnX3Nwb3J0ICE9IGh0b25zKFJFQURfT05DRShzay0mZ3Q7c2tfbnVtKSkgJmFtcDsmYW1wOwomIzQzOwkJCSAgICByLSZndDtpZC5pZGlhZ19zcG9ydCkKJiM0MzsJCQkJZ290byBwdXRfZXN0YWJfc2s7CiYjNDM7CiYjNDM7CQkJaWYgKHItJmd0O2lkLmlkaWFnX2Rwb3J0ICE9IHNrLSZndDtza19kcG9ydCAmYW1wOyZhbXA7CiYjNDM7CQkJICAgIHItJmd0O2lkLmlkaWFnX2Rwb3J0KQomIzQzOwkJCQlnb3RvIHB1dF9lc3RhYl9zazsKJiM0MzsKJiM0MzsJCQl0d3NrX2J1aWxkX2Fzc2VydCgpOwomIzQzOwkJCWlmIChyZXMgJmd0Oz0gMCAmYW1wOyZhbXA7IGluZXRfZGlhZ19iY19zayhjYl9kYXRhLCBzaykpIHsKJiM0MzsJCQkJcmVzID0gc2tfZGlhZ19maWxsKHNrLCBza2IsIGNiLCByLCBOTE1fRl9NVUxUSSwKJiM0MzsJCQkJCQkgICBuZXRfYWRtaW4pOwogCQkJCWlmIChyZXMgJmx0OyAwKQogCQkJCQludW0gPSBudW1fYXJyW2lkeF07CiAJCQl9Ci0JCQlzb2NrX2dlbl9wdXQoc2tfYXJyW2lkeF0pOwomIzQzOwkJCWlmIChyZXMgJmd0Oz0gMCkKJiM0MzsJCQkJdGNwX2RpYWdfc2F2ZV9jdXJzb3IoY2JfZGF0YSwKJiM0MzsJCQkJCQkgICAgIElORVRfRElBR19EVU1QX0NVUlNPUl9UQ1BfRUhBU0gsCiYjNDM7CQkJCQkJICAgICBpLCBzayk7CiYjNDM7cHV0X2VzdGFiX3NrOgomIzQzOwkJCXNvY2tfZ2VuX3B1dChzayk7CiAJCX0KIAkJaWYgKHJlcyAmbHQ7IDApCiAJCQlicmVhazsKQEAgLTU0OCw5ICYjNDM7Njg4LDExIEBAIHN0YXRpYyB2b2lkIHRjcF9kaWFnX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLAogCQljb25kX3Jlc2NoZWQoKTsKIAogCQlpZiAoYWNjdW0gPT0gU0tBUlJfU1opIHsKLQkJCXNfbnVtID0gbnVtICYjNDM7IDE7CiYjNDM7CQkJc19udW0gPSAwOwogCQkJZ290byBuZXh0X2NodW5rOwogCQl9CiYjNDM7CiYjNDM7CQlpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3IoY2JfZGF0YSk7CiAJfQogCiBkb25lOgpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL21wdGNwX2RpYWcuYyBiL25ldC9tcHRjcC9tcHRjcF9kaWFnLmMKaW5kZXggMTM2YzJkMDVjMGVlYi4uOTgxZTY0MzQzMDM5MCAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL21wdGNwX2RpYWcuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jCkBAIC02LDEyICYjNDM7NiwyNSBAQAogICogQXV0aG9yOiBQYW9sbyBBYmVuaSAmbHQ7cGFiZW5pQHJlZGhhdC5jb20mZ3Q7CiAgKi8KIAomIzQzOy8qIFByb2Nlc3MgYSBib3VuZGVkIG51bWJlciBvZiBsaXN0ZW5lcnMgcGVyIGJ1Y2tldCBsb2NrIGhvbGQuICovCiYjNDM7I2RlZmluZSBNUFRDUF9ESUFHX0JVTEtfU1ogMTYKJiM0MzsKICNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9uZXQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pbmV0X2RpYWcuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvbmV0bGluay5oJmd0OwogI2luY2x1ZGUgJiMzNDtwcm90b2NvbC5oJiMzNDsKIAomIzQzO3N0YXRpYyB2b2lkIG1wdGNwX2RpYWdfc2F2ZV9jdXJzb3Ioc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEsCiYjNDM7CQkJCSAgIHVuc2lnbmVkIGludCBzbG90LCBzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOwlzb2NrX2hvbGQoc2spOwomIzQzOwlpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3IoY2JfZGF0YSk7CiYjNDM7CWNiX2RhdGEtJmd0O2R1bXBfY3Vyc29yID0gc2s7CiYjNDM7CWNiX2RhdGEtJmd0O2R1bXBfY3Vyc29yX3Nsb3QgPSBzbG90OwomIzQzOwljYl9kYXRhLSZndDtkdW1wX2N1cnNvcl90eXBlID0gSU5FVF9ESUFHX0RVTVBfQ1VSU09SX01QVENQX0xJU1RFTjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHNrX2RpYWdfZHVtcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsCiAJCQlzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsCiAJCQljb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX3JlcV92MiAqcmVxLApAQCAtNzcsNiAmIzQzOzkwLDcgQEAgc3RhdGljIHZvaWQgbXB0Y3BfZGlhZ19kdW1wX2xpc3RlbmVycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmEKIAkJCQkgICAgICBib29sIG5ldF9hZG1pbikKIHsKIAlzdHJ1Y3QgbXB0Y3BfZGlhZ19jdHggKmRpYWdfY3R4ID0gKHZvaWQgKiljYi0mZ3Q7Y3R4OwomIzQzOwlzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSAqY2JfZGF0YSA9IGNiLSZndDtkYXRhOwogCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0mZ3Q7c2spOwogCXN0cnVjdCBpbmV0X2hhc2hpbmZvICpoaW5mbzsKIAlpbnQgaTsKQEAgLTg2LDYyICYjNDM7MTAwLDk4IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2RpYWdfZHVtcF9saXN0ZW5lcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhCiAJZm9yIChpID0gZGlhZ19jdHgtJmd0O2xfc2xvdDsgaSAmbHQ7PSBoaW5mby0mZ3Q7bGhhc2gyX21hc2s7IGkmIzQzOyYjNDM7KSB7CiAJCXN0cnVjdCBpbmV0X2xpc3Rlbl9oYXNoYnVja2V0ICppbGI7CiAJCXN0cnVjdCBobGlzdF9udWxsc19ub2RlICpub2RlOwotCQlzdHJ1Y3Qgc29jayAqc2s7Ci0JCWludCBudW0gPSAwOwotCiYjNDM7CQlzdHJ1Y3Qgc29jayAqdG1wLCAqc2ssICpza19hcnJbTVBUQ1BfRElBR19CVUxLX1NaXTsKJiM0MzsJCXN0cnVjdCBzb2NrICpjdXJzb3I7CiYjNDM7CQlpbnQgYWNjdW0sIGlkeCwgbnVtLCByZXQ7CiYjNDM7CQlpbnQgbnVtX2FycltNUFRDUF9ESUFHX0JVTEtfU1pdOwomIzQzOwkJYm9vbCB1c2VfY3Vyc29yOwomIzQzOwomIzQzO3Jlc3VtZV9saXN0ZW5fd2FsazoKJiM0MzsJCW51bSA9IDA7CiYjNDM7CQlhY2N1bSA9IDA7CiAJCWlsYiA9ICZhbXA7aGluZm8tJmd0O2xoYXNoMltpXTsKJiM0MzsJCXJldCA9IDA7CiAKIAkJcmN1X3JlYWRfbG9jaygpOwogCQlzcGluX2xvY2soJmFtcDtpbGItJmd0O2xvY2spOwotCQlza19udWxsc19mb3JfZWFjaChzaywgbm9kZSwgJmFtcDtpbGItJmd0O251bGxzX2hlYWQpIHsKLQkJCWNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKmN0eCA9IG1wdGNwX3N1YmZsb3dfY3R4KHNrKTsKLQkJCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKLQkJCWludCByZXQ7Ci0KLQkJCWlmIChudW0gJmx0OyBkaWFnX2N0eC0mZ3Q7bF9udW0pCi0JCQkJZ290byBuZXh0X2xpc3RlbjsKLQotCQkJaWYgKCFjdHggfHwgc3RyY21wKGluZXRfY3NrKHNrKS0mZ3Q7aWNza191bHBfb3BzLSZndDtuYW1lLCAmIzM0O21wdGNwJiMzNDspKQotCQkJCWdvdG8gbmV4dF9saXN0ZW47Ci0KLQkJCXNrID0gY3R4LSZndDtjb25uOwotCQkJaWYgKCFzayB8fCAhbmV0X2VxKHNvY2tfbmV0KHNrKSwgbmV0KSkKLQkJCQlnb3RvIG5leHRfbGlzdGVuOwotCi0JCQlpZiAoci0mZ3Q7c2RpYWdfZmFtaWx5ICE9IEFGX1VOU1BFQyAmYW1wOyZhbXA7Ci0JCQkgICAgc2stJmd0O3NrX2ZhbWlseSAhPSByLSZndDtzZGlhZ19mYW1pbHkpCi0JCQkJZ290byBuZXh0X2xpc3RlbjsKLQotCQkJaWYgKHItJmd0O2lkLmlkaWFnX3Nwb3J0ICE9IGluZXQtJmd0O2luZXRfc3BvcnQgJmFtcDsmYW1wOwotCQkJICAgIHItJmd0O2lkLmlkaWFnX3Nwb3J0KQomIzQzOwkJY3Vyc29yID0gY2JfZGF0YS0mZ3Q7ZHVtcF9jdXJzb3I7CiYjNDM7CQl1c2VfY3Vyc29yID0gY3Vyc29yICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgIGNiX2RhdGEtJmd0O2R1bXBfY3Vyc29yX3R5cGUgPT0KJiM0MzsJCQkgICAgIElORVRfRElBR19EVU1QX0NVUlNPUl9NUFRDUF9MSVNURU4gJmFtcDsmYW1wOwomIzQzOwkJCSAgICAgY2JfZGF0YS0mZ3Q7ZHVtcF9jdXJzb3Jfc2xvdCA9PSBpICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgICFobGlzdF9udWxsc191bmhhc2hlZCgmYW1wO2N1cnNvci0mZ3Q7c2tfbnVsbHNfbm9kZSkgJmFtcDsmYW1wOwomIzQzOwkJCSAgICAgY3Vyc29yLSZndDtza19udWxsc19ub2RlLnBwcmV2ICE9IExJU1RfUE9JU09OMjsKJiM0MzsJCW5vZGUgPSB1c2VfY3Vyc29yID8gY3Vyc29yLSZndDtza19udWxsc19ub2RlLm5leHQgOgomIzQzOwkJCQkgICAgaWxiLSZndDtudWxsc19oZWFkLmZpcnN0OwomIzQzOwkJaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfZnJvbShzaywgbm9kZSwgc2tfbnVsbHNfbm9kZSkgewomIzQzOwkJCWlmICghdXNlX2N1cnNvciAmYW1wOyZhbXA7IG51bSAmbHQ7IGRpYWdfY3R4LSZndDtsX251bSkKIAkJCQlnb3RvIG5leHRfbGlzdGVuOwogCiAJCQlpZiAoIXJlZmNvdW50X2luY19ub3RfemVybygmYW1wO3NrLSZndDtza19yZWZjbnQpKQogCQkJCWdvdG8gbmV4dF9saXN0ZW47CiAKLQkJCXJldCA9IHNrX2RpYWdfZHVtcChzaywgc2tiLCBjYiwgciwgbmV0X2FkbWluKTsKLQotCQkJc29ja19wdXQoc2spOwotCi0JCQlpZiAocmV0ICZsdDsgMCkgewotCQkJCXNwaW5fdW5sb2NrKCZhbXA7aWxiLSZndDtsb2NrKTsKLQkJCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJCQlkaWFnX2N0eC0mZ3Q7bF9zbG90ID0gaTsKLQkJCQlkaWFnX2N0eC0mZ3Q7bF9udW0gPSBudW07Ci0JCQkJcmV0dXJuOwotCQkJfQotCQkJZGlhZ19jdHgtJmd0O2xfbnVtID0gbnVtICYjNDM7IDE7Ci0JCQludW0gPSAwOwomIzQzOwkJCW51bV9hcnJbYWNjdW1dID0gbnVtOwomIzQzOwkJCXNrX2FyclthY2N1bV0gPSBzazsKJiM0MzsJCQlpZiAoJiM0MzsmIzQzO2FjY3VtID09IE1QVENQX0RJQUdfQlVMS19TWikKJiM0MzsJCQkJYnJlYWs7CiBuZXh0X2xpc3RlbjoKIAkJCSYjNDM7JiM0MztudW07CiAJCX0KIAkJc3Bpbl91bmxvY2soJmFtcDtpbGItJmd0O2xvY2spOwogCQlyY3VfcmVhZF91bmxvY2soKTsKIAomIzQzOwkJZm9yIChpZHggPSAwOyBpZHggJmx0OyBhY2N1bTsgaWR4JiM0MzsmIzQzOykgewomIzQzOwkJCWNvbnN0IHN0cnVjdCB0Y3BfdWxwX29wcyAqdWxwX29wczsKJiM0MzsJCQljb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpjdHg7CiYjNDM7CQkJc3RydWN0IGluZXRfc29jayAqaW5ldDsKJiM0MzsKJiM0MzsJCQlzayA9IHNrX2FycltpZHhdOwomIzQzOwkJCXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJCQljdHggPSBtcHRjcF9zdWJmbG93X2N0eChzayk7CiYjNDM7CQkJdWxwX29wcyA9IFJFQURfT05DRShpbmV0X2NzayhzayktJmd0O2ljc2tfdWxwX29wcyk7CiYjNDM7CQkJaW5ldCA9IGluZXRfc2soc2spOwomIzQzOwkJCXRtcCA9IGN0eCA/IGN0eC0mZ3Q7Y29ubiA6IE5VTEw7CiYjNDM7CQkJaWYgKCFjdHggfHwgIXVscF9vcHMgfHwgc3RyY21wKHVscF9vcHMtJmd0O25hbWUsICYjMzQ7bXB0Y3AmIzM0OykgfHwKJiM0MzsJCQkgICAgIXRtcCB8fCAhbmV0X2VxKHNvY2tfbmV0KHRtcCksIG5ldCkgfHwKJiM0MzsJCQkgICAgKHItJmd0O3NkaWFnX2ZhbWlseSAhPSBBRl9VTlNQRUMgJmFtcDsmYW1wOwomIzQzOwkJCSAgICAgdG1wLSZndDtza19mYW1pbHkgIT0gci0mZ3Q7c2RpYWdfZmFtaWx5KSB8fAomIzQzOwkJCSAgICAoci0mZ3Q7aWQuaWRpYWdfc3BvcnQgIT0gaW5ldC0mZ3Q7aW5ldF9zcG9ydCAmYW1wOyZhbXA7CiYjNDM7CQkJICAgICByLSZndDtpZC5pZGlhZ19zcG9ydCkgfHwKJiM0MzsJCQkgICAgIXJlZmNvdW50X2luY19ub3RfemVybygmYW1wO3RtcC0mZ3Q7c2tfcmVmY250KSkgewomIzQzOwkJCQlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJCQkJZ290byBwcm9jZXNzZWRfbGlzdGVuZXJfc2s7CiYjNDM7CQkJfQomIzQzOwkJCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwkJCWlmIChyZXQgJmd0Oz0gMCkgewomIzQzOwkJCQlyZXQgPSBza19kaWFnX2R1bXAodG1wLCBza2IsIGNiLCByLCBuZXRfYWRtaW4pOwomIzQzOwkJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJCW51bSA9IG51bV9hcnJbaWR4XTsKJiM0MzsJCQl9CiYjNDM7CQkJc29ja19wdXQodG1wKTsKJiM0Mztwcm9jZXNzZWRfbGlzdGVuZXJfc2s6CiYjNDM7CQkJaWYgKHJldCAmZ3Q7PSAwKQomIzQzOwkJCQltcHRjcF9kaWFnX3NhdmVfY3Vyc29yKGNiX2RhdGEsIGksIHNrKTsKJiM0MzsJCQlzb2NrX3B1dChzayk7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkgewomIzQzOwkJCWRpYWdfY3R4LSZndDtsX3Nsb3QgPSBpOwomIzQzOwkJCWRpYWdfY3R4LSZndDtsX251bSA9IG51bTsKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQl9CiYjNDM7CiAJCWNvbmRfcmVzY2hlZCgpOwomIzQzOwomIzQzOwkJaWYgKGFjY3VtID09IE1QVENQX0RJQUdfQlVMS19TWikgewomIzQzOwkJCWRpYWdfY3R4LSZndDtsX251bSA9IDA7CiYjNDM7CQkJZ290byByZXN1bWVfbGlzdGVuX3dhbGs7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3IoY2JfZGF0YSk7CiAJCWRpYWdfY3R4LSZndDtsX251bSA9IDA7CiAJfQogCiYjNDM7CWluZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvcihjYl9kYXRhKTsKIAlkaWFnX2N0eC0mZ3Q7bF9udW0gPSAwOwogCWRpYWdfY3R4LSZndDtsX3Nsb3QgPSBpOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDEzMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDM1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXR3b3JraW5nIFN0YWNrIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdOKAmXMgdG91Y2hpbmcgc29tZSBjcnVjaWFsIGFyZWFzIG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrOiBgaW5ldF9kaWFnLmhgLCBgaW5ldF9kaWFnLmNgLCBgdGNwX2RpYWcuY2AsIGFuZCBgbXB0Y3BfZGlhZy5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyB0aGlzIG5ldyBjdXJzb3IgbWVjaGFuaXNtLCBzcGVjaWZpY2FsbHkgd2l0aGluIGB0Y3BfZGlhZ2AgYW5kIGBtcHRjcF9kaWFnYCwgZm9yIGR1bXBpbmcgc29ja2V0IGluZm9ybWF0aW9uLiBUaGlzIGlzIHNtYXJ0OyB0aGV5JiMzOTtyZSBhZGRpbmcgYGR1bXBfY3Vyc29yYCwgYGR1bXBfY3Vyc29yX3Nsb3RgLCBhbmQgYGR1bXBfY3Vyc29yX3R5cGVgIHRvIHRoZSBgc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGFgLiAgVGhhdCYjMzk7cyB0aGUga2V5IHRvIG1ha2luZyB0aGUgZHVtcGluZyBwcm9jZXNzIHJvYnVzdC4KClRoZSByZWFzb24gZm9yIHRoaXMgY2hhbmdlIGlzIGNsZWFyOiAgdGhlIGN1cnJlbnQgbWV0aG9kIHdhcyBwcm9uZSB0byBlcnJvcnMuIEl0IHdhcyBza2lwcGluZyBzb2NrZXRzIGJhc2VkIG9uIGEgY291bnQgKGBzX251bWApIHdoaWNoIGlzIHByb2JsZW1hdGljIHdoZW4gdGhlIGhhc2ggdGFibGUgc3RydWN0dXJlIGlzIGR5bmFtaWMuICBUaGlzIG5ldyBjdXJzb3IgbGV0cyBgdGNwX2RpYWdfZHVtcGAgcGljayB1cCAqZXhhY3RseSogd2hlcmUgaXQgbGVmdCBvZmYsIGF2b2lkaW5nIGJvdGggZHVwbGljYXRlZCBhbmQgbWlzc2VkIHNvY2tldHMuICBFeGNlbGxlbnQsIHRoYXQmIzM5O3MgYWRkcmVzc2luZyBhIHJlYWwgaXNzdWUuICBBbmQgdGhlIHNhbWUgZml4IGlzIGJlaW5nIGFwcGxpZWQgdG8gYG1wdGNwX2RpYWdfZHVtcF9saXN0ZW5lcnNgLCB3aGljaCBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gdGFrZSB0aGlzLgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGNvcmUgbmV0d29yayBjb21wb25lbnQuICBSZWFjaGFiaWxpdHkgYW5kIHRlc3RhYmlsaXR5IGFyZSBoaWdoOyBpdCYjMzk7cyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSBuZWVkIHRvIGZ1enogdGhvcm91Z2hseS4gTGV0JiMzOTtzIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGZvY3VzIHNob3VsZCBiZToKCiogICBJbiBgbmV0L2lwdjQvdGNwX2RpYWcuY2AsIHdlJiMzOTt2ZSBnb3QgYHRjcF9kaWFnX2R1bXBgIHdoaWNoIGlzIHRoZSBmdW5jdGlvbiB0aGF0IHJlcXVpcmVzIHNjcnV0aW55LgoqICAgSW4gYG5ldC9tcHRjcC9tcHRjcF9kaWFnLmNgLCB3ZSYjMzk7dmUgZ290IGBtcHRjcF9kaWFnX2R1bXBfbGlzdGVuZXJzYCwgd2hpY2ggaXMgYSBrZXkgb25lLiAgQW5kLCBhbHRob3VnaCBgbXB0Y3BfZGlhZ19kdW1wYCBpc24mIzM5O3QgZGlyZWN0bHkgbW9kaWZpZWQsIGl0IGNhbGxzIGBtcHRjcF9kaWFnX2R1bXBfbGlzdGVuZXJzYCwgc28gaXQmIzM5O3MgcHJvYmFibHkgd29ydGggYSBsb29rIGluIGZ1enppbmcgYXMgd2VsbCwgdG8gc2VlIGhvdyB0aGUgY3Vyc29yIHByb3BhZ2F0ZXMuCgpOb3csIGxldCYjMzk7cyBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uIHNldHRpbmdzIGVuYWJsZWQ6IGBDT05GSUdfSU5FVF9ESUFHYCwgYENPTkZJR19UQ1BfRElBR2AsIGFuZCBgQ09ORklHX01QVENQYCBhcmUgYWxsIGdvaW5nIHRvIGJlIHJlcXVpcmVkLCBvYnZpb3VzbHkuICBJJiMzOTtsbCBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgZm9yIE1QVENQIGFuZCBJTkVUX0RJQUcgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHdlIGhhdmVu4oCZdCBtaXNzZWQgYW55dGhpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgb3VyIGZ1enppbmcgYnVpbGRzIGFyZSBzZXQgdXAgY29ycmVjdGx5LiBUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBpbXByb3ZlbWVudCBpbiB0aGUgbmV0d29yayBkaWFnbm9zdGljIHRvb2xzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE3OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNUFRDUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9LY29uZmlnLTEtXG5uZXQvbXB0Y3AvS2NvbmZpZzoyOmNvbmZpZyBNUFRDUFxubmV0L21wdGNwL0tjb25maWctMy1cdGJvb2wgXCYjMzQ7TVBUQ1A6IE11bHRpcGF0aCBUQ1BcJiMzNDtcbi0tXG5uZXQvbXB0Y3AvS2NvbmZpZz0xNj1jb25maWcgSU5FVF9NUFRDUF9ESUFHXG4tLVxubmV0L21wdGNwL0tjb25maWctMTktXG5uZXQvbXB0Y3AvS2NvbmZpZzoyMDpjb25maWcgTVBUQ1BfSVBWNlxubmV0L21wdGNwL0tjb25maWctMjEtXHRib29sIFwmIzM0O01QVENQOiBJUHY2IHN1cHBvcnQgZm9yIE11bHRpcGF0aCBUQ1BcJiMzNDtcbi0tXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNC1cbm5ldC9tcHRjcC9LY29uZmlnOjI1OmNvbmZpZyBNUFRDUF9LVU5JVF9URVNUXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNi1cdHRyaXN0YXRlIFwmIzM0O1RoaXMgYnVpbGRzIHRoZSBNUFRDUCBLVW5pdCB0ZXN0c1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTc6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyNzkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJTkVUX01QVENQX0RJQUcgSW52ZXN0aWdhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gVGhlIGZpcnN0IHRob3VnaHQgaXMgY2xlYXI6IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBgSU5FVF9NUFRDUF9ESUFHYC4gVGhpcyBpcyB3aGVyZSBJJiMzOTtkIGltbWVkaWF0ZWx5IGZvY3VzLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBjb250ZXh0IG9mIHdoYXRldmVyIHByb2JsZW0gb3IgcGVyZm9ybWFuY2UgYW5vbWFseSBpcyBhdCBoYW5kLiBJdCYjMzk7cyB0aGUgZGlhZ25vc3RpYyBpbnRlcmZhY2UgZm9yIE11bHRpcGF0aCBUQ1AsIHNvIHRoaXMgaXMgd2hlcmUgSSYjMzk7ZCBnbyB0byBnZXQgYSBxdWljayBvdmVydmlldyBvZiB0aGUgY3VycmVudCBzdGF0dXMuIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgd2FudCB0byBpbnNwZWN0IHRoZSBjb25uZWN0aW9uIHN0YXRlcywgc3ViZmxvdyBzdGF0aXN0aWNzLCB0aGUgb3ZlcmFsbCBNUFRDUCBjb25maWd1cmF0aW9uLCBhbmQgcG90ZW50aWFsbHkgYW55IGVycm9yIGNvZGVzIG9yIGZsYWdzIHRoYXQgbWlnaHQgYmUgcHJlc2VudC4gTXkgbWluZCBpcyBhbHJlYWR5IHJhY2luZyB0aHJvdWdoIHRoZSBsaWtlbHkgb3V0cHV0IGZpZWxkcyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcga2VybmVsIGNvZGUgSSBtaWdodCBuZWVkIHRvIHJlZmVyIHRvIGlmIHNvbWV0aGluZyBsb29rcyBzdXNwaWNpb3VzLiBJJiMzOTttIGV4cGVjdGluZyBzb21lIHNwZWNpZmljIGZpZWxkcyBhbmQgYSBnZW5lcmFsIGlkZWEgb2YgaG93IHRvIHVzZSBpdCwgYnV0IEkgYWx3YXlzIGFwcHJvYWNoIHRoZXNlIGNoZWNrcyB3aXRoIGFuIGV4cGVjdGF0aW9uIHRoYXQgSSBtaWdodCBuZWVkIHRvIGNyb3NzLXJlZmVyZW5jZSB3aXRoIG90aGVyIHRvb2xzIG9yIGtlcm5lbCBkZWJ1Z2dpbmcgdGVjaG5pcXVlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU5FVF9NUFRDUF9ESUFHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL0tjb25maWc9MTQ9aWYgTVBUQ1Bcbm5ldC9tcHRjcC9LY29uZmlnLTE1LVxubmV0L21wdGNwL0tjb25maWc6MTY6Y29uZmlnIElORVRfTVBUQ1BfRElBR1xubmV0L21wdGNwL0tjb25maWctMTctXHRkZXBlbmRzIG9uIElORVRfRElBR1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE3OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjMwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBEaWFnbm9zdGljcyBpbiB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgbmV0d29yayBkaWFnbm9zdGljcyBhcmUgY29uZmlndXJlZCBpbiB0aGUga2VybmVsLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIHplcm8gaW4gb24gYG5ldC9pcHY0L0tjb25maWdgLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBpbnRlcm5ldCBkaWFnbm9zdGljcywgYW5kIGVzcGVjaWFsbHkgb3B0aW9ucyBjb25jZXJuaW5nIFRDUCBkaWFnbm9zdGljcy4gTXkgcHJpbWFyeSB0YXJnZXRzIGFyZSBgY29uZmlnIElORVRfRElBR2AgYW5kIGBjb25maWcgVENQX0RJQUdgLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBhcmUgZGVmaW5lZCwgd2hhdCBkZXBlbmRlbmNpZXMgdGhleSBoYXZlLCB3aGF0IHRoZWlyIGRlZmF1bHQgdmFsdWVzIGFyZSwgYW5kIHdoZXRoZXIgdGhleSBhcmUgdHJpc3RhdGUgb3IgYm9vbGVhbi4gVGhpcyB3aWxsIHByb3ZpZGUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyBJIGNhbiBjb25maWd1cmUgYW5kIHBvdGVudGlhbGx5IHRyb3VibGVzaG9vdCB0aGUga2VybmVsJiMzOTtzIG5ldHdvcmsgZGlhZ25vc3RpY3MgY2FwYWJpbGl0aWVzLiBUaGlzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIG5ldHdvcmsgZGlhZ25vc3RpYyBsYW5kc2NhcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTc6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElORVRfRElBRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz00MTk9Y29uZmlnIElORVRfVFVOTkVMXG4tLVxubmV0L2lwdjQvS2NvbmZpZy00MjItXG5uZXQvaXB2NC9LY29uZmlnOjQyMzpjb25maWcgSU5FVF9ESUFHXG5uZXQvaXB2NC9LY29uZmlnLTQyNC1cdHRyaXN0YXRlIFwmIzM0O0lORVQ6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWc9NDQ3PWNvbmZpZyBJTkVUX1JBV19ESUFHXG4tLVxubmV0L2lwdjQvS2NvbmZpZy00NTQtXG5uZXQvaXB2NC9LY29uZmlnOjQ1NTpjb25maWcgSU5FVF9ESUFHX0RFU1RST1lcbm5ldC9pcHY0L0tjb25maWctNDU2LVx0Ym9vbCBcJiMzNDtJTkVUOiBhbGxvdyBwcml2aWxlZ2VkIHByb2Nlc3MgdG8gYWRtaW5pc3RyYXRpdmVseSBjbG9zZSBzb2NrZXRzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTc6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwNjkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gUXVlcnkqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCB0aGlua2luZyBhYm91dCBUQ1AgZGlhZ25vc3RpY3MuIFdhaXQgYSBtaW51dGUuLi4gV2hhdCBhYm91dCBgY29uZmlnIElORVRfVENQX0RJQUdgPyBUaGlzIGlzIGEgY3JpdGljYWwgY29uZmlndXJhdGlvbiBvcHRpb24sIGlzbiYjMzk7dCBpdD8gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIGhvdyB0aGF0JiMzOTtzIGhhbmRsZWQsIHdoYXQgaW1wbGljYXRpb25zIGl0IGhhcyBmb3IgdGhlIGRpYWdub3N0aWMgdG9vbHMgd2UgaGF2ZSBhdCBvdXIgZGlzcG9zYWwuIElzIGl0IGVuYWJsZWQ/IERpc2FibGVkPyBXaGF0IGZlYXR1cmVzIGFyZSB0aWVkIHRvIHRoYXQgZmxhZywgYW5kIGhvdyBkb2VzIGl0IGludGVyZmFjZSB3aXRoIHRoZSB2YXJpb3VzIG5ldGxpbmsgYW5kIHNvY2tldCBvcHRpb25zPyBUaGlua2luZyBhYm91dCBob3cgdmFyaW91cyBhc3BlY3RzIG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrIHdpbGwgYmVoYXZlIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoaXMgaXMgZW5hYmxlZC4gVGltZSB0byBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBoZXJlLiBJIGNhbiYjMzk7dCBwcm9jZWVkIHdpdGhvdXQgY2xhcmlmeWluZyB0aGUgc3RhdHVzIG9mIHRoYXQgY29uZmlnIG9wdGlvbi4gSXQmIzM5O3MgZnVuZGFtZW50YWwgdG8gdGhpcyBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTc6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElORVRfVENQX0RJQUcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWc9NDIzPWNvbmZpZyBJTkVUX0RJQUdcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQzNC1cbm5ldC9pcHY0L0tjb25maWc6NDM1OmNvbmZpZyBJTkVUX1RDUF9ESUFHXG5uZXQvaXB2NC9LY29uZmlnLTQzNi1cdGRlcGVuZHMgb24gSU5FVF9ESUFHXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE3OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzg1CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOZXR3b3JrIERpYWdub3N0aWNzIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBuZXR3b3JrIGRpYWdub3N0aWNzLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBUQ1AgYW5kIE1QVENQLiBUaGUga2V5IGNvbmZpZ3VyYXRpb25zIEkmIzM5O20gY29uc2lkZXJpbmcgYXJlIGBJTkVUX0RJQUdgLCBgSU5FVF9UQ1BfRElBR2AsIGBNUFRDUGAsIGFuZCBgSU5FVF9NUFRDUF9ESUFHYC4gVGhlc2UgZmxhZ3MgbGlrZWx5IGNvbnRyb2wgdGhlIGluY2x1c2lvbiBvciBleGNsdXNpb24gb2YgY2VydGFpbiBkaWFnbm9zdGljIGZlYXR1cmVzIHdpdGhpbiB0aGUga2VybmVsLiBNeSBwcmltYXJ5IGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgdGhlIGFjdHVhbCBkYXRhIGR1bXBpbmcg4oCTIHRoZSBoZWFydCBvZiB0aGUgZGlhZ25vc3RpY3MuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2UmIzM5O3JlIGV4dHJhY3RpbmcgYW5kIHByZXNlbnRpbmcgdGhpcyBpbmZvcm1hdGlvbi4gVGhlIGZ1bmN0aW9ucyBoaWdobGlnaHRlZCBhcmUgYHRjcF9kaWFnX2R1bXBgLCBgbXB0Y3BfZGlhZ19kdW1wX2xpc3RlbmVyc2AsIGFuZCBgbXB0Y3BfZGlhZ19kdW1wYC4gYG1wdGNwX2RpYWdfZHVtcGAgc2VlbXMgdG8gYmUgdGhlIGNlbnRyYWwgZW50cnkgcG9pbnQgZm9yIGFsbCB0aGluZ3MgTVBUQ1AtcmVsYXRlZC4KCk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBjb25maXJtIHRoZSBleGlzdGVuY2UgYW5kIHN0cnVjdHVyZSBvZiB0aGlzIGBtcHRjcF9kaWFnX2R1bXBgIGZ1bmN0aW9uLiBJIHdhbnQgdG8gZW5zdXJlIGl04oCZcyB0aGVyZSBhbmQgZ2V0IGEgaGFuZGxlIG9uIGl0cyBpbnB1dHMsIG91dHB1dHMsIGFuZCBvdmVyYWxsIHB1cnBvc2UuIFRoaXMgaXMgdGhlIGx5bmNocGluIEkgd2lsbCBzdGFydCB3aXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF9kaWFnX2R1bXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9tcHRjcF9kaWFnLmM9Mjg9c3RhdGljIGludCBza19kaWFnX2R1bXAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9tcHRjcC9tcHRjcF9kaWFnLmMtMzktXG5uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jOjQwOnN0YXRpYyBpbnQgbXB0Y3BfZGlhZ19kdW1wX29uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG5uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jLTQxLVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX3JlcV92MiAqcmVxKVxuLS1cbm5ldC9tcHRjcC9tcHRjcF9kaWFnLmM9ODE9c3RydWN0IG1wdGNwX2RpYWdfY3R4IHtcbi0tXG5uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jLTg3LVxubmV0L21wdGNwL21wdGNwX2RpYWcuYzo4ODpzdGF0aWMgdm9pZCBtcHRjcF9kaWFnX2R1bXBfbGlzdGVuZXJzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbm5ldC9tcHRjcC9tcHRjcF9kaWFnLmMtODktXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX3JlcV92MiAqcixcbi0tXG5uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jLTE5OC1cbm5ldC9tcHRjcC9tcHRjcF9kaWFnLmM6MTk5OnN0YXRpYyB2b2lkIG1wdGNwX2RpYWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG5uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jLTIwMC1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGluZXRfZGlhZ19yZXFfdjIgKnIpXG4tLVxubmV0L21wdGNwL21wdGNwX2RpYWcuYy0yMzgtXHRpZiAoKHItXHUwMDNlaWRpYWdfc3RhdGVzIFx1MDAyNiBUQ1BGX0xJU1RFTikgXHUwMDI2XHUwMDI2IHItXHUwMDNlaWQuaWRpYWdfZHBvcnQgPT0gMClcbm5ldC9tcHRjcC9tcHRjcF9kaWFnLmM6MjM5Olx0XHRtcHRjcF9kaWFnX2R1bXBfbGlzdGVuZXJzKHNrYiwgY2IsIHIsIG5ldF9hZG1pbik7XG5uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jLTI0MC19XG4tLVxubmV0L21wdGNwL21wdGNwX2RpYWcuYz0yNzA9c3RhdGljIGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfaGFuZGxlciBtcHRjcF9kaWFnX2hhbmRsZXIgPSB7XG5uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jLTI3MS1cdC5vd25lclx0XHQgPSBUSElTX01PRFVMRSxcbm5ldC9tcHRjcC9tcHRjcF9kaWFnLmM6MjcyOlx0LmR1bXBcdFx0ID0gbXB0Y3BfZGlhZ19kdW1wLFxubmV0L21wdGNwL21wdGNwX2RpYWcuYzoyNzM6XHQuZHVtcF9vbmVcdCA9IG1wdGNwX2RpYWdfZHVtcF9vbmUsXG5uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jLTI3NC1cdC5pZGlhZ19nZXRfaW5mbyAgPSBtcHRjcF9kaWFnX2dldF9pbmZvLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQyNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBEaWFnbm9zdGljIEZ1bmN0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGVzZSBkaWFnbm9zdGljIGZ1bmN0aW9ucy4gV2UgaGF2ZSBgdGNwX2RpYWdfZHVtcGAsIGBtcHRjcF9kaWFnX2R1bXBgLCBhbmQgYG1wdGNwX2RpYWdfZHVtcF9saXN0ZW5lcnNgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBpbnZlc3RpZ2F0ZSB0aGUgc2NvcGUgb2YgYHRjcF9kaWFnX2R1bXBgLiBJcyBpdCBkZWNsYXJlZCBgc3RhdGljYD8gVGhhdCB3b3VsZCBpbmZsdWVuY2UgaG93IGFuZCB3aGVyZSBpdCBjYW4gYmUgY2FsbGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgdmlzaWJpbGl0eSB3aXRoaW4gdGhlIG1vZHVsZSwgc2luY2UgdGhpcyBhZmZlY3RzIGhvdyBlYXNpbHkgaXQgY2FuIGJlIGludGVncmF0ZWQgd2l0aCBvdGhlciBzeXN0ZW1zIG9yIGRlYnVnZ2luZyB0b29scy4gS25vd2luZyBpdHMgc2NvcGUgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgaW50ZW5kZWQgdXNlIGNhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE3OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9kaWFnX2R1bXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfZGlhZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9kaWFnLmM9MzQ3PXN0YXRpYyB2b2lkIHR3c2tfYnVpbGRfYXNzZXJ0KHZvaWQpXG4tLVxubmV0L2lwdjQvdGNwX2RpYWcuYy0zNzItXG5uZXQvaXB2NC90Y3BfZGlhZy5jOjM3MzpzdGF0aWMgdm9pZCB0Y3BfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbm5ldC9pcHY0L3RjcF9kaWFnLmMtMzc0LVx0XHRcdCAgY29uc3Qgc3RydWN0IGluZXRfZGlhZ19yZXFfdjIgKnIpXG4tLVxubmV0L2lwdjQvdGNwX2RpYWcuYz03MDU9c3RhdGljIHN0cnVjdCBzb2NrICp0Y3BfZGlhZ19maW5kX29uZV9pY3NrKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvaXB2NC90Y3BfZGlhZy5jLTc0NS1cbm5ldC9pcHY0L3RjcF9kaWFnLmM6NzQ2OnN0YXRpYyBpbnQgdGNwX2RpYWdfZHVtcF9vbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxubmV0L2lwdjQvdGNwX2RpYWcuYy03NDctXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX3JlcV92MiAqcmVxKVxuLS1cbm5ldC9pcHY0L3RjcF9kaWFnLmM9ODAzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2hhbmRsZXIgdGNwX2RpYWdfaGFuZGxlciA9IHtcbm5ldC9pcHY0L3RjcF9kaWFnLmMtODA0LVx0Lm93bmVyXHRcdFx0PSBUSElTX01PRFVMRSxcbm5ldC9pcHY0L3RjcF9kaWFnLmM6ODA1Olx0LmR1bXBcdFx0XHQ9IHRjcF9kaWFnX2R1bXAsXG5uZXQvaXB2NC90Y3BfZGlhZy5jOjgwNjpcdC5kdW1wX29uZVx0XHQ9IHRjcF9kaWFnX2R1bXBfb25lLFxubmV0L2lwdjQvdGNwX2RpYWcuYy04MDctXHQuaWRpYWdfZ2V0X2luZm9cdFx0PSB0Y3BfZGlhZ19nZXRfaW5mbyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTc6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwMzQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXJuZWwmIzM5O3MgRGlhZ25vc3RpYyBGdW5jdGlvbiBDYWxscyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZGlhZ25vc3RpYyBmdW5jdGlvbnMuIEkgaW5pdGlhbGx5IGNvbnNpZGVyZWQgdGhlbSBhcyBzdGF0aWMsIGJ1dCB0aGVuIEkgcmVtZW1iZXJlZCB0aGV5IGFyZSByZWdpc3RlcmVkIHdpdGhpbiB0aGUgYGluZXRfZGlhZ19oYW5kbGVyYCBzdHJ1Y3R1cmUuIFRoYXQgc2hpZnRzIHRoaW5ncy4KCkFscmlnaHQsIGxldCBtZSBsaXN0IHRoZW0gYW55d2F5LiBJdCYjMzk7cyBnb29kIHRvIGtlZXAgdGhpbmdzIGNsZWFyLCBlc3BlY2lhbGx5IGFzIHRoZXNlIGFyZSB0aGUgY29yZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQuCgpXYWl0IGEgc2Vjb25kLiBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSB3YW50cyBtZSB0byBwcmlvcml0aXplIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhhdCBtYWtlcyBzZW5zZSwgYXZvaWRpbmcgdGhvc2UgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgaW5saW5lZCBoZWxwZXIgZnVuY3Rpb25zLgoKUmlnaHQsIGB0Y3BfZGlhZ19kdW1wYCBhbmQgYG1wdGNwX2RpYWdfZHVtcGAuIEV4Y2VsbGVudC4gVGhleSBhcmUgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMgd2l0aGluIGEgc3RydWN0LCBtZWFuaW5nIHRoZXkgd29uJiMzOTt0IGJlIGlubGluZWQuIFRoZWlyIHN5bWJvbCBhZGRyZXNzZXMgd2lsbCBiZSBkaXN0aW5jdC4gVGhhdCBtYWtlcyB0aGVtIHBlcmZlY3QgZW50cnkgcG9pbnRzIGZvciB0aGUgZHVtcGluZyBwcm9jZXNzLgoKTm93IGxldCYjMzk7cyB2ZXJpZnkgYGluZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvcmAuIEFoLCBpdCYjMzk7cyBleHBvcnRlZCEgTm9uLXN0YXRpYywgY29uZmlybWVkLiBHb29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pbmV0X2RpYWcuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pbmV0X2RpYWcuYz04ODk9c3RhdGljIGludCBpbmV0X2RpYWdfZHVtcF9zdGFydF9jb21wYXQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9pcHY0L2luZXRfZGlhZy5jLTg5My1cbm5ldC9pcHY0L2luZXRfZGlhZy5jOjg5NDp2b2lkIGluZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvcihzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSAqY2JfZGF0YSlcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTg5NS17XG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtOTAzLX1cbm5ldC9pcHY0L2luZXRfZGlhZy5jOjkwNDpFWFBPUlRfU1lNQk9MX0dQTChpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3IpO1xubmV0L2lwdjQvaW5ldF9kaWFnLmMtOTA1LVxubmV0L2lwdjQvaW5ldF9kaWFnLmM9OTA2PXN0YXRpYyBpbnQgaW5ldF9kaWFnX2R1bXBfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtOTA5LVxubmV0L2lwdjQvaW5ldF9kaWFnLmM6OTEwOlx0aW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKGNiX2RhdGEpO1xubmV0L2lwdjQvaW5ldF9kaWFnLmMtOTExLVx0YnBmX3NrX3N0b3JhZ2VfZGlhZ19mcmVlKGNiX2RhdGEtXHUwMDNlYnBmX3N0Z19kaWFnKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTc6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3NTAKCQkJCQkJCW91dHB1dDogMTY0CgkJCQkJCQl0aG91Z2h0czogMTU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipEaWFnbm9zdGljIER1bXAgQ29uc2lkZXJhdGlvbnMqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlc2UgZnVuY3Rpb25zOiBgdGNwX2RpYWdfZHVtcGAsIGBtcHRjcF9kaWFnX2R1bXBfbGlzdGVuZXJzYCwgYW5kIGBpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3JgLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBjb3JlIHJvdXRpbmVzIGludm9sdmVkIGluIHdoYXRldmVyIGRpYWdub3N0aWMgZnVuY3Rpb25hbGl0eSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLiBLbm93aW5nIHdoYXQgdGhleSYjMzk7cmUgZG9pbmcgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSB3aG9sZSBwaWN0dXJlLgoKTm93LCBhcyBmb3IgdGhlIGNvbmZpZ3VyYXRpb25zIHRoYXQgY29udHJvbCBhbGwgdGhpcywgSSBzZWUgYSBjbGVhciBzZXQ6IGBJTkVUX0RJQUdgLCBgSU5FVF9UQ1BfRElBR2AsIGBNUFRDUGAsIGFuZCBgSU5FVF9NUFRDUF9ESUFHYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb25zIGFyZSBzZXQgaW4gb3JkZXIgdG8gZW5zdXJlIHRoZSBkaWFnbm9zdGljIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZS4KCkl0JiMzOTtzIGFsd2F5cyBhIGdvb2QgcHJhY3RpY2UgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWdzIGluIHBsYXkuIExldCYjMzk7cyBzZWUuLi4gbG9va2luZyBhdCB0aGUgZGV0YWlscywgYENPTkZJR19JTkVUX0RJQUdgIGFuZCBgQ09ORklHX0lORVRfVENQX0RJQUdgIGFyZSB0cmlzdGF0ZSwgbWVhbmluZyB0aGV5IGNhbiBiZSBlbmFibGVkIGFzIGEgbW9kdWxlLCBidWlsdC1pbiwgb3IgZGlzYWJsZWQuIGBDT05GSUdfTVBUQ1BgIGlzIGEgc2ltcGxlIGJvb2xlYW47IGVpdGhlciBpdCYjMzk7cyBlbmFibGVkIG9yIGRpc2FibGVkLiBBbmQgZmluYWxseSwgYENPTkZJR19JTkVUX01QVENQX0RJQUdgIGlzIGFub3RoZXIgdHJpc3RhdGUuCgpJJiMzOTt2ZSBnb3QgdGhlIHBpZWNlcyBmaWd1cmVkIG91dCBhbmQgSSYjMzk7bGwgbm93IHNldCB0aGUgY29ycmVzcG9uZGluZyBjb25maWd1cmF0aW9uIHNldHRpbmdzIGFjY29yZGluZ2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVF9ESUFHJiMzNDssCiAgICAmIzM0O0lORVRfVENQX0RJQUcmIzM0OywKICAgICYjMzQ7TVBUQ1AmIzM0OywKICAgICYjMzQ7SU5FVF9NUFRDUF9ESUFHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX2RpYWdfZHVtcCYjMzQ7LAogICAgJiMzNDttcHRjcF9kaWFnX2R1bXBfbGlzdGVuZXJzJiMzNDssCiAgICAmIzM0O2luZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY3Vyc29yIG1lY2hhbmlzbSBmb3IgZHVtcGluZyBUQ1AgYW5kIE1QVENQIHNvY2tldHMgdmlhIHRoZSBpbmV0X2RpYWcgbmV0bGluayBpbnRlcmZhY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIHRoYXQgYWZmZWN0cyBob3cgc29ja2V0cyBhcmUgaXRlcmF0ZWQgYW5kIGR1bXBlZCwgcHJldmVudGluZyBkdXBsaWNhdGVzIG9yIG1pc3NlZCBzb2NrZXRzIHdoZW4gdGhlIGhhc2ggdGFibGUgY2hhbmdlcyBkdXJpbmcgdGhlIGR1bXAuIEl0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmsgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVRfRElBRyYjMzQ7LAogICAgJiMzNDtJTkVUX1RDUF9ESUFHJiMzNDssCiAgICAmIzM0O01QVENQJiMzNDssCiAgICAmIzM0O0lORVRfTVBUQ1BfRElBRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF9kaWFnX2R1bXAmIzM0OywKICAgICYjMzQ7bXB0Y3BfZGlhZ19kdW1wX2xpc3RlbmVycyYjMzQ7LAogICAgJiMzNDtpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGN1cnNvciBtZWNoYW5pc20gZm9yIGR1bXBpbmcgVENQIGFuZCBNUFRDUCBzb2NrZXRzIHZpYSB0aGUgaW5ldF9kaWFnIG5ldGxpbmsgaW50ZXJmYWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayB0aGF0IGFmZmVjdHMgaG93IHNvY2tldHMgYXJlIGl0ZXJhdGVkIGFuZCBkdW1wZWQsIHByZXZlbnRpbmcgZHVwbGljYXRlcyBvciBtaXNzZWQgc29ja2V0cyB3aGVuIHRoZSBoYXNoIHRhYmxlIGNoYW5nZXMgZHVyaW5nIHRoZSBkdW1wLiBJdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMzBUMTc6NTI6NTAuOTg5NjgxODhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzM4MDcyNzE0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUX0RJQUdcIixcbiAgICBcIklORVRfVENQX0RJQUdcIixcbiAgICBcIk1QVENQXCIsXG4gICAgXCJJTkVUX01QVENQX0RJQUdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfZGlhZ19kdW1wXCIsXG4gICAgXCJtcHRjcF9kaWFnX2R1bXBfbGlzdGVuZXJzXCIsXG4gICAgXCJpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY3Vyc29yIG1lY2hhbmlzbSBmb3IgZHVtcGluZyBUQ1AgYW5kIE1QVENQIHNvY2tldHMgdmlhIHRoZSBpbmV0X2RpYWcgbmV0bGluayBpbnRlcmZhY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIHRoYXQgYWZmZWN0cyBob3cgc29ja2V0cyBhcmUgaXRlcmF0ZWQgYW5kIGR1bXBlZCwgcHJldmVudGluZyBkdXBsaWNhdGVzIG9yIG1pc3NlZCBzb2NrZXRzIHdoZW4gdGhlIGhhc2ggdGFibGUgY2hhbmdlcyBkdXJpbmcgdGhlIGR1bXAuIEl0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmsgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE3OjUyOjUwLjk4OTY4NzEyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjM2ODAwOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiMjlhMzE1MTlkY2VlMmJjZDU5ZmZlMmRhNGQyNWQxNmJhZTY5ZGI3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDMwIDE3OjUyOjUwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5ldF9kaWFnLmggYi9pbmNsdWRlL2xpbnV4L2luZXRfZGlhZy5oXFxuaW5kZXggNzA0ZmQ0MTVjMmI0OS4uNDg1OWU3N2EyOGM3YSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2luZXRfZGlhZy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9pbmV0X2RpYWcuaFxcbkBAIC02LDYgKzYsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9pbmV0X2RpYWcuaFxcdTAwM2VcXG4gXFxuIHN0cnVjdCBpbmV0X2hhc2hpbmZvO1xcbitzdHJ1Y3Qgc29jaztcXG4gXFxuIHN0cnVjdCBpbmV0X2RpYWdfaGFuZGxlciB7XFxuIFxcdHN0cnVjdCBtb2R1bGVcXHQqb3duZXI7XFxuQEAgLTMyLDEyICszMywyNCBAQCBzdHJ1Y3QgaW5ldF9kaWFnX2hhbmRsZXIge1xcbiB9O1xcbiBcXG4gc3RydWN0IGJwZl9za19zdG9yYWdlX2RpYWc7XFxuK1xcbitlbnVtIGluZXRfZGlhZ19kdW1wX2N1cnNvcl90eXBlIHtcXG4rXFx0SU5FVF9ESUFHX0RVTVBfQ1VSU09SX05PTkUsXFxuK1xcdElORVRfRElBR19EVU1QX0NVUlNPUl9UQ1BfTElTVEVOLFxcbitcXHRJTkVUX0RJQUdfRFVNUF9DVVJTT1JfVENQX0JJTkQsXFxuK1xcdElORVRfRElBR19EVU1QX0NVUlNPUl9UQ1BfRUhBU0gsXFxuK1xcdElORVRfRElBR19EVU1QX0NVUlNPUl9NUFRDUF9MSVNURU4sXFxuK307XFxuK1xcbiBzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSB7XFxuIFxcdHN0cnVjdCBubGF0dHIgKnJlcV9ubGFzW19fSU5FVF9ESUFHX1JFUV9NQVhdO1xcbiAjZGVmaW5lIGluZXRfZGlhZ19ubGFfYmMgcmVxX25sYXNbSU5FVF9ESUFHX1JFUV9CWVRFQ09ERV1cXG4gI2RlZmluZSBpbmV0X2RpYWdfbmxhX2JwZl9zdGdzIHJlcV9ubGFzW0lORVRfRElBR19SRVFfU0tfQlBGX1NUT1JBR0VTXVxcbiBcXG4gXFx0c3RydWN0IGJwZl9za19zdG9yYWdlX2RpYWcgKmJwZl9zdGdfZGlhZztcXG4rXFx0c3RydWN0IHNvY2sgKmR1bXBfY3Vyc29yO1xcbitcXHR1bnNpZ25lZCBpbnQgZHVtcF9jdXJzb3Jfc2xvdDtcXG4rXFx0dTggZHVtcF9jdXJzb3JfdHlwZTtcXG4gXFx0Ym9vbCBtYXJrX25lZWRlZDtcXHQvKiBJTkVUX0RJQUdfQkNfTUFSS19DT05EIHByZXNlbnQuICovXFxuICNpZmRlZiBDT05GSUdfU09DS19DR1JPVVBfREFUQVxcbiBcXHRib29sIGNncm91cF9uZWVkZWQ7XFx0LyogSU5FVF9ESUFHX0JDX0NHUk9VUF9DT05EIHByZXNlbnQuICovXFxuQEAgLTUzLDYgKzY2LDggQEAgaW50IGluZXRfc2tfZGlhZ19maWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrLFxcbiBcXG4gaW50IGluZXRfZGlhZ19iY19zayhjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSAqY2JfZGF0YSwgc3RydWN0IHNvY2sgKnNrKTtcXG4gXFxuK3ZvaWQgaW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKHN0cnVjdCBpbmV0X2RpYWdfZHVtcF9kYXRhICpjYl9kYXRhKTtcXG4rXFxuIHZvaWQgaW5ldF9kaWFnX21zZ19jb21tb25fZmlsbChzdHJ1Y3QgaW5ldF9kaWFnX21zZyAqciwgc3RydWN0IHNvY2sgKnNrKTtcXG4gXFxuIHN0YXRpYyBpbmxpbmUgc2l6ZV90IGluZXRfZGlhZ19tc2dfYXR0cnNfc2l6ZSh2b2lkKVxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2RpYWcuYyBiL25ldC9pcHY0L2luZXRfZGlhZy5jXFxuaW5kZXggMzRiNzdhYTg3ZDBhNC4uNDExNDhlODgwMDU0NSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9pbmV0X2RpYWcuY1xcbisrKyBiL25ldC9pcHY0L2luZXRfZGlhZy5jXFxuQEAgLTg5MSwxMCArODkxLDIzIEBAIHN0YXRpYyBpbnQgaW5ldF9kaWFnX2R1bXBfc3RhcnRfY29tcGF0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4gXFx0cmV0dXJuIF9faW5ldF9kaWFnX2R1bXBfc3RhcnQoY2IsIHNpemVvZihzdHJ1Y3QgaW5ldF9kaWFnX3JlcSkpO1xcbiB9XFxuIFxcbit2b2lkIGluZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvcihzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSAqY2JfZGF0YSlcXG4re1xcbitcXHRpZiAoIWNiX2RhdGEtXFx1MDAzZWR1bXBfY3Vyc29yKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzb2NrX2dlbl9wdXQoY2JfZGF0YS1cXHUwMDNlZHVtcF9jdXJzb3IpO1xcbitcXHRjYl9kYXRhLVxcdTAwM2VkdW1wX2N1cnNvciA9IE5VTEw7XFxuK1xcdGNiX2RhdGEtXFx1MDAzZWR1bXBfY3Vyc29yX3Nsb3QgPSAwO1xcbitcXHRjYl9kYXRhLVxcdTAwM2VkdW1wX2N1cnNvcl90eXBlID0gSU5FVF9ESUFHX0RVTVBfQ1VSU09SX05PTkU7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoaW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKTtcXG4rXFxuIHN0YXRpYyBpbnQgaW5ldF9kaWFnX2R1bXBfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuIHtcXG4gXFx0c3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEgPSBjYi1cXHUwMDNlZGF0YTtcXG4gXFxuK1xcdGluZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvcihjYl9kYXRhKTtcXG4gXFx0YnBmX3NrX3N0b3JhZ2VfZGlhZ19mcmVlKGNiX2RhdGEtXFx1MDAzZWJwZl9zdGdfZGlhZyk7XFxuIFxcdGtmcmVlKGNiLVxcdTAwM2VkYXRhKTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9kaWFnLmMgYi9uZXQvaXB2NC90Y3BfZGlhZy5jXFxuaW5kZXggYmExZmRiZTk4MDdmZC4uYmUwYzIyY2M0NDViMiAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC90Y3BfZGlhZy5jXFxuKysrIGIvbmV0L2lwdjQvdGNwX2RpYWcuY1xcbkBAIC0yODUsNiArMjg1LDY1IEBAIHN0YXRpYyBpbnQgc2tfZGlhZ19maWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0XFx0IG5ldF9hZG1pbik7XFxuIH1cXG4gXFxuKy8qIFByb2Nlc3MgYSBtYXhpbXVtIG9mIFNLQVJSX1NaIHNvY2tldHMgYXQgYSB0aW1lIHdoZW4gd2Fsa2luZyBoYXNoIGJ1Y2tldHNcXG4rICogd2l0aCBiaCBkaXNhYmxlZC5cXG4rICovXFxuKyNkZWZpbmUgU0tBUlJfU1ogMTZcXG4rXFxuK3N0YXRpYyB2b2lkIHRjcF9kaWFnX3NhdmVfY3Vyc29yKHN0cnVjdCBpbmV0X2RpYWdfZHVtcF9kYXRhICpjYl9kYXRhLCBpbnQgdHlwZSxcXG4rXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBzbG90LCBzdHJ1Y3Qgc29jayAqc2spXFxuK3tcXG4rXFx0c29ja19ob2xkKHNrKTtcXG4rXFx0aW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKGNiX2RhdGEpO1xcbitcXHRjYl9kYXRhLVxcdTAwM2VkdW1wX2N1cnNvciA9IHNrO1xcbitcXHRjYl9kYXRhLVxcdTAwM2VkdW1wX2N1cnNvcl9zbG90ID0gc2xvdDtcXG4rXFx0Y2JfZGF0YS1cXHUwMDNlZHVtcF9jdXJzb3JfdHlwZSA9IHR5cGU7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIHRjcF9kaWFnX2JpbmRfY29sbGVjdF9zb2NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKipza19hcnIsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBpbnQgKm51bV9hcnIsIGludCAqYWNjdW0sIGludCBudW0pXFxuK3tcXG4rXFx0c29ja19ob2xkKHNrKTtcXG4rXFx0bnVtX2FyclsqYWNjdW1dID0gbnVtO1xcbitcXHRza19hcnJbKmFjY3VtXSA9IHNrO1xcbitcXG4rXFx0cmV0dXJuICsrKmFjY3VtID09IFNLQVJSX1NaO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCB0Y3BfZGlhZ19iaW5kX2NvbGxlY3Rfb3duZXJzKHN0cnVjdCBobGlzdF9oZWFkICpvd25lcnMsXFxuK1xcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc29jayAqKnNrX2FyciwgaW50ICpudW1fYXJyLFxcbitcXHRcXHRcXHRcXHRcXHQgaW50ICphY2N1bSwgaW50ICpudW0sIGludCBzX251bSlcXG4re1xcbitcXHRzdHJ1Y3Qgc29jayAqc2s7XFxuK1xcbitcXHRza19mb3JfZWFjaF9ib3VuZChzaywgb3duZXJzKSB7XFxuK1xcdFxcdGlmICgqbnVtIFxcdTAwM2Mgc19udW0pIHtcXG4rXFx0XFx0XFx0KCpudW0pKys7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAodGNwX2RpYWdfYmluZF9jb2xsZWN0X3NvY2soc2ssIHNrX2FyciwgbnVtX2FyciwgYWNjdW0sICpudW0pKVxcbitcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0KCpudW0pKys7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgdGNwX2RpYWdfYmluZF9jb2xsZWN0X293bmVyc19jb250aW51ZShzdHJ1Y3Qgc29jayAqc2ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNvY2sgKipza19hcnIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgaW50ICpudW1fYXJyLCBpbnQgKmFjY3VtLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIGludCAqbnVtKVxcbit7XFxuK1xcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlKHNrLCBza19iaW5kX25vZGUpIHtcXG4rXFx0XFx0aWYgKHRjcF9kaWFnX2JpbmRfY29sbGVjdF9zb2NrKHNrLCBza19hcnIsIG51bV9hcnIsIGFjY3VtLCAqbnVtKSlcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdFxcdCgqbnVtKSsrO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHR3c2tfYnVpbGRfYXNzZXJ0KHZvaWQpXFxuIHtcXG4gXFx0QlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2ssIHR3X2ZhbWlseSkgIT1cXG5AQCAtMzM1LDggKzM5NCwxNSBAQCBzdGF0aWMgdm9pZCB0Y3BfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcXG4gXFx0XFx0Zm9yIChpID0gc19pOyBpIFxcdTAwM2M9IGhhc2hpbmZvLVxcdTAwM2VsaGFzaDJfbWFzazsgaSsrKSB7XFxuIFxcdFxcdFxcdHN0cnVjdCBpbmV0X2xpc3Rlbl9oYXNoYnVja2V0ICppbGI7XFxuIFxcdFxcdFxcdHN0cnVjdCBobGlzdF9udWxsc19ub2RlICpub2RlO1xcbitcXHRcXHRcXHRzdHJ1Y3Qgc29jayAqc2tfYXJyW1NLQVJSX1NaXTtcXG4rXFx0XFx0XFx0c3RydWN0IHNvY2sgKmN1cnNvcjtcXG4rXFx0XFx0XFx0aW50IG51bV9hcnJbU0tBUlJfU1pdO1xcbitcXHRcXHRcXHRpbnQgaWR4LCBhY2N1bSwgcmVzO1xcbitcXHRcXHRcXHRib29sIHVzZV9jdXJzb3I7XFxuIFxcbityZXN1bWVfbGlzdGVuX3dhbGs6XFxuIFxcdFxcdFxcdG51bSA9IDA7XFxuK1xcdFxcdFxcdGFjY3VtID0gMDtcXG4gXFx0XFx0XFx0aWxiID0gXFx1MDAyNmhhc2hpbmZvLVxcdTAwM2VsaGFzaDJbaV07XFxuIFxcbiBcXHRcXHRcXHRpZiAoaGxpc3RfbnVsbHNfZW1wdHkoXFx1MDAyNmlsYi1cXHUwMDNlbnVsbHNfaGVhZCkpIHtcXG5AQCAtMzQ0LDUyICs0MTAsODAgQEAgc3RhdGljIHZvaWQgdGNwX2RpYWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2aWxiLVxcdTAwM2Vsb2NrKTtcXG4tXFx0XFx0XFx0c2tfbnVsbHNfZm9yX2VhY2goc2ssIG5vZGUsIFxcdTAwMjZpbGItXFx1MDAzZW51bGxzX2hlYWQpIHtcXG4tXFx0XFx0XFx0XFx0c3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spO1xcbitcXHRcXHRcXHRjdXJzb3IgPSBjYl9kYXRhLVxcdTAwM2VkdW1wX2N1cnNvcjtcXG4rXFx0XFx0XFx0dXNlX2N1cnNvciA9IGN1cnNvciBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgICAgIGNiX2RhdGEtXFx1MDAzZWR1bXBfY3Vyc29yX3R5cGUgPT1cXG4rXFx0XFx0XFx0XFx0ICAgICBJTkVUX0RJQUdfRFVNUF9DVVJTT1JfVENQX0xJU1RFTiBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgICAgIGNiX2RhdGEtXFx1MDAzZWR1bXBfY3Vyc29yX3Nsb3QgPT0gaSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgICAgICFobGlzdF9udWxsc191bmhhc2hlZChcXHUwMDI2Y3Vyc29yLVxcdTAwM2Vza19udWxsc19ub2RlKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgICAgIGN1cnNvci1cXHUwMDNlc2tfbnVsbHNfbm9kZS5wcHJldiAhPSBMSVNUX1BPSVNPTjI7XFxuK1xcdFxcdFxcdG5vZGUgPSB1c2VfY3Vyc29yID8gY3Vyc29yLVxcdTAwM2Vza19udWxsc19ub2RlLm5leHQgOlxcbitcXHRcXHRcXHRcXHRcXHQgICAgaWxiLVxcdTAwM2VudWxsc19oZWFkLmZpcnN0O1xcbitcXHRcXHRcXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9mcm9tKHNrLCBub2RlLCBza19udWxsc19ub2RlKSB7XFxuK1xcdFxcdFxcdFxcdGlmICghdXNlX2N1cnNvciBcXHUwMDI2XFx1MDAyNiBudW0gXFx1MDAzYyBzX251bSlcXG4rXFx0XFx0XFx0XFx0XFx0Z290byBuZXh0X2xpc3RlbjtcXG4gXFxuLVxcdFxcdFxcdFxcdGlmICghbmV0X2VxKHNvY2tfbmV0KHNrKSwgbmV0KSlcXG4tXFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdFxcdHNvY2tfaG9sZChzayk7XFxuK1xcdFxcdFxcdFxcdG51bV9hcnJbYWNjdW1dID0gbnVtO1xcbitcXHRcXHRcXHRcXHRza19hcnJbYWNjdW1dID0gc2s7XFxuK1xcdFxcdFxcdFxcdGlmICgrK2FjY3VtID09IFNLQVJSX1NaKVxcbitcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gXFxuLVxcdFxcdFxcdFxcdGlmIChudW0gXFx1MDAzYyBzX251bSkge1xcbi1cXHRcXHRcXHRcXHRcXHRudW0rKztcXG4tXFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdFxcdFxcdH1cXG4rbmV4dF9saXN0ZW46XFxuK1xcdFxcdFxcdFxcdCsrbnVtO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZpbGItXFx1MDAzZWxvY2spO1xcbiBcXG4rXFx0XFx0XFx0cmVzID0gMDtcXG4rXFx0XFx0XFx0Zm9yIChpZHggPSAwOyBpZHggXFx1MDAzYyBhY2N1bTsgaWR4KyspIHtcXG4rXFx0XFx0XFx0XFx0c3RydWN0IGluZXRfc29jayAqaW5ldDtcXG4rXFxuK1xcdFxcdFxcdFxcdHNrID0gc2tfYXJyW2lkeF07XFxuK1xcdFxcdFxcdFxcdGlmICghbmV0X2VxKHNvY2tfbmV0KHNrKSwgbmV0KSlcXG4rXFx0XFx0XFx0XFx0XFx0Z290byBwcm9jZXNzZWRfbGlzdGVuX3NrO1xcbitcXG4rXFx0XFx0XFx0XFx0aW5ldCA9IGluZXRfc2soc2spO1xcbiBcXHRcXHRcXHRcXHRpZiAoci1cXHUwMDNlc2RpYWdfZmFtaWx5ICE9IEFGX1VOU1BFQyBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHRcXHQgICAgc2stXFx1MDAzZXNrX2ZhbWlseSAhPSByLVxcdTAwM2VzZGlhZ19mYW1pbHkpXFxuLVxcdFxcdFxcdFxcdFxcdGdvdG8gbmV4dF9saXN0ZW47XFxuK1xcdFxcdFxcdFxcdFxcdGdvdG8gcHJvY2Vzc2VkX2xpc3Rlbl9zaztcXG4gXFxuIFxcdFxcdFxcdFxcdGlmIChyLVxcdTAwM2VpZC5pZGlhZ19zcG9ydCAhPSBpbmV0LVxcdTAwM2VpbmV0X3Nwb3J0IFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdFxcdCAgICByLVxcdTAwM2VpZC5pZGlhZ19zcG9ydClcXG4tXFx0XFx0XFx0XFx0XFx0Z290byBuZXh0X2xpc3RlbjtcXG4tXFxuLVxcdFxcdFxcdFxcdGlmICghaW5ldF9kaWFnX2JjX3NrKGNiX2RhdGEsIHNrKSlcXG4tXFx0XFx0XFx0XFx0XFx0Z290byBuZXh0X2xpc3RlbjtcXG4rXFx0XFx0XFx0XFx0XFx0Z290byBwcm9jZXNzZWRfbGlzdGVuX3NrO1xcbiBcXG4tXFx0XFx0XFx0XFx0aWYgKGluZXRfc2tfZGlhZ19maWxsKHNrLCBpbmV0X2NzayhzayksIHNrYixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgY2IsIHIsIE5MTV9GX01VTFRJLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBuZXRfYWRtaW4pIFxcdTAwM2MgMCkge1xcbi1cXHRcXHRcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2aWxiLVxcdTAwM2Vsb2NrKTtcXG4tXFx0XFx0XFx0XFx0XFx0Z290byBkb25lO1xcbitcXHRcXHRcXHRcXHRpZiAocmVzIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgaW5ldF9kaWFnX2JjX3NrKGNiX2RhdGEsIHNrKSkge1xcbitcXHRcXHRcXHRcXHRcXHRyZXMgPSBpbmV0X3NrX2RpYWdfZmlsbChzaywgaW5ldF9jc2soc2spLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRza2IsIGNiLCByLCBOTE1fRl9NVUxUSSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0bmV0X2FkbWluKTtcXG4rXFx0XFx0XFx0XFx0XFx0aWYgKHJlcyBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdFxcdFxcdG51bSA9IG51bV9hcnJbaWR4XTtcXG4gXFx0XFx0XFx0XFx0fVxcbitwcm9jZXNzZWRfbGlzdGVuX3NrOlxcbitcXHRcXHRcXHRcXHRpZiAocmVzIFxcdTAwM2U9IDApXFxuK1xcdFxcdFxcdFxcdFxcdHRjcF9kaWFnX3NhdmVfY3Vyc29yKGNiX2RhdGEsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgSU5FVF9ESUFHX0RVTVBfQ1VSU09SX1RDUF9MSVNURU4sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgaSwgc2spO1xcbitcXHRcXHRcXHRcXHRzb2NrX3B1dChzayk7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0aWYgKHJlcyBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZG9uZTtcXG4gXFxuLW5leHRfbGlzdGVuOlxcbi1cXHRcXHRcXHRcXHQrK251bTtcXG4rXFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuK1xcbitcXHRcXHRcXHRpZiAoYWNjdW0gPT0gU0tBUlJfU1opIHtcXG4rXFx0XFx0XFx0XFx0c19udW0gPSAwO1xcbitcXHRcXHRcXHRcXHRnb3RvIHJlc3VtZV9saXN0ZW5fd2FsaztcXG4gXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2aWxiLVxcdTAwM2Vsb2NrKTtcXG4gXFxuK1xcdFxcdFxcdGluZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvcihjYl9kYXRhKTtcXG4gXFx0XFx0XFx0c19udW0gPSAwO1xcbiBcXHRcXHR9XFxuIHNraXBfbGlzdGVuX2h0OlxcbitcXHRcXHRpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3IoY2JfZGF0YSk7XFxuIFxcdFxcdGNiLVxcdTAwM2VhcmdzWzBdID0gMTtcXG4gXFx0XFx0c19pID0gbnVtID0gc19udW0gPSAwO1xcbiBcXHR9XFxuIFxcbi0vKiBQcm9jZXNzIGEgbWF4aW11bSBvZiBTS0FSUl9TWiBzb2NrZXRzIGF0IGEgdGltZSB3aGVuIHdhbGtpbmcgaGFzaCBidWNrZXRzXFxuLSAqIHdpdGggYmggZGlzYWJsZWQuXFxuLSAqL1xcbi0jZGVmaW5lIFNLQVJSX1NaIDE2XFxuLVxcbiBcXHQvKiBEdW1wIGJvdW5kIGJ1dCBpbmFjdGl2ZSAobm90IGxpc3RlbmluZywgY29ubmVjdGluZywgZXRjLikgc29ja2V0cyAqL1xcbiBcXHRpZiAoY2ItXFx1MDAzZWFyZ3NbMF0gPT0gMSkge1xcbiBcXHRcXHRpZiAoIShpZGlhZ19zdGF0ZXMgXFx1MDAyNiBUQ1BGX0JPVU5EX0lOQUNUSVZFKSlcXG5AQCAtMzk5LDggKzQ5MywxMCBAQCBzdGF0aWMgdm9pZCB0Y3BfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcXG4gXFx0XFx0XFx0c3RydWN0IGluZXRfYmluZF9oYXNoYnVja2V0ICppYmI7XFxuIFxcdFxcdFxcdHN0cnVjdCBpbmV0X2JpbmQyX2J1Y2tldCAqdGIyO1xcbiBcXHRcXHRcXHRzdHJ1Y3Qgc29jayAqc2tfYXJyW1NLQVJSX1NaXTtcXG4rXFx0XFx0XFx0c3RydWN0IHNvY2sgKmN1cnNvcjtcXG4gXFx0XFx0XFx0aW50IG51bV9hcnJbU0tBUlJfU1pdO1xcbiBcXHRcXHRcXHRpbnQgaWR4LCBhY2N1bSwgcmVzO1xcbitcXHRcXHRcXHRib29sIHVzZV9jdXJzb3I7XFxuIFxcbiByZXN1bWVfYmluZF93YWxrOlxcbiBcXHRcXHRcXHRudW0gPSAwO1xcbkBAIC00MTIsMzQgKzUwOCwzOCBAQCBzdGF0aWMgdm9pZCB0Y3BfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZpYmItXFx1MDAzZWxvY2spO1xcbi1cXHRcXHRcXHRpbmV0X2JpbmRfYnVja2V0X2Zvcl9lYWNoKHRiMiwgXFx1MDAyNmliYi1cXHUwMDNlY2hhaW4pIHtcXG4tXFx0XFx0XFx0XFx0aWYgKCFuZXRfZXEoaWIyX25ldCh0YjIpLCBuZXQpKVxcbi1cXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tXFxuLVxcdFxcdFxcdFxcdHNrX2Zvcl9lYWNoX2JvdW5kKHNrLCBcXHUwMDI2dGIyLVxcdTAwM2Vvd25lcnMpIHtcXG4tXFx0XFx0XFx0XFx0XFx0c3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spO1xcbi1cXG4tXFx0XFx0XFx0XFx0XFx0aWYgKG51bSBcXHUwMDNjIHNfbnVtKVxcbi1cXHRcXHRcXHRcXHRcXHRcXHRnb3RvIG5leHRfYmluZDtcXG4tXFxuLVxcdFxcdFxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgIT0gVENQX0NMT1NFIHx8XFxuLVxcdFxcdFxcdFxcdFxcdCAgICAhaW5ldC1cXHUwMDNlaW5ldF9udW0pXFxuLVxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gbmV4dF9iaW5kO1xcbi1cXG4tXFx0XFx0XFx0XFx0XFx0aWYgKHItXFx1MDAzZXNkaWFnX2ZhbWlseSAhPSBBRl9VTlNQRUMgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIHItXFx1MDAzZXNkaWFnX2ZhbWlseSAhPSBzay1cXHUwMDNlc2tfZmFtaWx5KVxcbi1cXHRcXHRcXHRcXHRcXHRcXHRnb3RvIG5leHRfYmluZDtcXG4tXFxuLVxcdFxcdFxcdFxcdFxcdGlmICghaW5ldF9kaWFnX2JjX3NrKGNiX2RhdGEsIHNrKSlcXG4tXFx0XFx0XFx0XFx0XFx0XFx0Z290byBuZXh0X2JpbmQ7XFxuLVxcbi1cXHRcXHRcXHRcXHRcXHRzb2NrX2hvbGQoc2spO1xcbi1cXHRcXHRcXHRcXHRcXHRudW1fYXJyW2FjY3VtXSA9IG51bTtcXG4tXFx0XFx0XFx0XFx0XFx0c2tfYXJyW2FjY3VtXSA9IHNrO1xcbi1cXHRcXHRcXHRcXHRcXHRpZiAoKythY2N1bSA9PSBTS0FSUl9TWilcXG4rXFx0XFx0XFx0Y3Vyc29yID0gY2JfZGF0YS1cXHUwMDNlZHVtcF9jdXJzb3I7XFxuK1xcdFxcdFxcdHVzZV9jdXJzb3IgPSBjdXJzb3IgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0XFx0ICAgICBjYl9kYXRhLVxcdTAwM2VkdW1wX2N1cnNvcl90eXBlID09XFxuK1xcdFxcdFxcdFxcdCAgICAgSU5FVF9ESUFHX0RVTVBfQ1VSU09SX1RDUF9CSU5EIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdFxcdCAgICAgY2JfZGF0YS1cXHUwMDNlZHVtcF9jdXJzb3Jfc2xvdCA9PSBpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdFxcdCAgICAgIWhsaXN0X3VuaGFzaGVkKFxcdTAwMjZjdXJzb3ItXFx1MDAzZXNrX2JpbmRfbm9kZSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0XFx0ICAgICBjdXJzb3ItXFx1MDAzZXNrX2JpbmRfbm9kZS5wcHJldiAhPSBMSVNUX1BPSVNPTjIgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0XFx0ICAgICBpbmV0X2NzayhjdXJzb3IpLVxcdTAwM2VpY3NrX2JpbmQyX2hhc2g7XFxuK1xcdFxcdFxcdGlmICh1c2VfY3Vyc29yKSB7XFxuK1xcdFxcdFxcdFxcdHRiMiA9IGluZXRfY3NrKGN1cnNvciktXFx1MDAzZWljc2tfYmluZDJfaGFzaDtcXG4rXFx0XFx0XFx0XFx0c2sgPSBjdXJzb3I7XFxuK1xcdFxcdFxcdFxcdGlmICh0Y3BfZGlhZ19iaW5kX2NvbGxlY3Rfb3duZXJzX2NvbnRpbnVlKHNrLCBza19hcnIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgbnVtX2FycixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2YWNjdW0sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNm51bSkpXFxuK1xcdFxcdFxcdFxcdFxcdGdvdG8gcGF1c2VfYmluZF93YWxrO1xcbitcXHRcXHRcXHRcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZSh0YjIsIG5vZGUpIHtcXG4rXFx0XFx0XFx0XFx0XFx0aWYgKHRjcF9kaWFnX2JpbmRfY29sbGVjdF9vd25lcnMoXFx1MDAyNnRiMi1cXHUwMDNlb3duZXJzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgc2tfYXJyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgbnVtX2FycixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZhY2N1bSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZudW0sIDApKVxcbitcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIHBhdXNlX2JpbmRfd2FsaztcXG4rXFx0XFx0XFx0XFx0fVxcbitcXHRcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRcXHRpbmV0X2JpbmRfYnVja2V0X2Zvcl9lYWNoKHRiMiwgXFx1MDAyNmliYi1cXHUwMDNlY2hhaW4pIHtcXG4rXFx0XFx0XFx0XFx0XFx0aWYgKHRjcF9kaWFnX2JpbmRfY29sbGVjdF9vd25lcnMoXFx1MDAyNnRiMi1cXHUwMDNlb3duZXJzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgc2tfYXJyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgbnVtX2FycixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZhY2N1bSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZudW0sIHNfbnVtKSlcXG4gXFx0XFx0XFx0XFx0XFx0XFx0Z290byBwYXVzZV9iaW5kX3dhbGs7XFxuLW5leHRfYmluZDpcXG4tXFx0XFx0XFx0XFx0XFx0bnVtKys7XFxuIFxcdFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0fVxcbiBwYXVzZV9iaW5kX3dhbGs6XFxuQEAgLTQ0NywxNSArNTQ3LDMzIEBAIHN0YXRpYyB2b2lkIHRjcF9kaWFnX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxcbiBcXG4gXFx0XFx0XFx0cmVzID0gMDtcXG4gXFx0XFx0XFx0Zm9yIChpZHggPSAwOyBpZHggXFx1MDAzYyBhY2N1bTsgaWR4KyspIHtcXG4tXFx0XFx0XFx0XFx0aWYgKHJlcyBcXHUwMDNlPSAwKSB7XFxuLVxcdFxcdFxcdFxcdFxcdHJlcyA9IGluZXRfc2tfZGlhZ19maWxsKHNrX2FycltpZHhdLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHROVUxMLCBza2IsIGNiLFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgaW5ldF9zb2NrICppbmV0O1xcbitcXG4rXFx0XFx0XFx0XFx0c2sgPSBza19hcnJbaWR4XTtcXG4rXFx0XFx0XFx0XFx0aWYgKCFuZXRfZXEoc29ja19uZXQoc2spLCBuZXQpKVxcbitcXHRcXHRcXHRcXHRcXHRnb3RvIHB1dF9iaW5kX3NrO1xcbitcXG4rXFx0XFx0XFx0XFx0aW5ldCA9IGluZXRfc2soc2spO1xcbitcXHRcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlICE9IFRDUF9DTE9TRSB8fCAhaW5ldC1cXHUwMDNlaW5ldF9udW0pXFxuK1xcdFxcdFxcdFxcdFxcdGdvdG8gcHV0X2JpbmRfc2s7XFxuK1xcbitcXHRcXHRcXHRcXHRpZiAoci1cXHUwMDNlc2RpYWdfZmFtaWx5ICE9IEFGX1VOU1BFQyBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgICAgci1cXHUwMDNlc2RpYWdfZmFtaWx5ICE9IHNrLVxcdTAwM2Vza19mYW1pbHkpXFxuK1xcdFxcdFxcdFxcdFxcdGdvdG8gcHV0X2JpbmRfc2s7XFxuK1xcbitcXHRcXHRcXHRcXHRpZiAocmVzIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgaW5ldF9kaWFnX2JjX3NrKGNiX2RhdGEsIHNrKSkge1xcbitcXHRcXHRcXHRcXHRcXHRyZXMgPSBpbmV0X3NrX2RpYWdfZmlsbChzaywgTlVMTCwgc2tiLCBjYixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ciwgTkxNX0ZfTVVMVEksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdG5ldF9hZG1pbik7XFxuIFxcdFxcdFxcdFxcdFxcdGlmIChyZXMgXFx1MDAzYyAwKVxcbiBcXHRcXHRcXHRcXHRcXHRcXHRudW0gPSBudW1fYXJyW2lkeF07XFxuIFxcdFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0XFx0c29ja19wdXQoc2tfYXJyW2lkeF0pO1xcbitcXHRcXHRcXHRcXHRpZiAocmVzIFxcdTAwM2U9IDApXFxuK1xcdFxcdFxcdFxcdFxcdHRjcF9kaWFnX3NhdmVfY3Vyc29yKGNiX2RhdGEsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgSU5FVF9ESUFHX0RVTVBfQ1VSU09SX1RDUF9CSU5ELFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGksIHNrKTtcXG4rcHV0X2JpbmRfc2s6XFxuK1xcdFxcdFxcdFxcdHNvY2tfcHV0KHNrKTtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRpZiAocmVzIFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0XFx0Z290byBkb25lO1xcbkBAIC00NjMsMTMgKzU4MSwxNSBAQCBzdGF0aWMgdm9pZCB0Y3BfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcXG4gXFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuIFxcbiBcXHRcXHRcXHRpZiAoYWNjdW0gPT0gU0tBUlJfU1opIHtcXG4tXFx0XFx0XFx0XFx0c19udW0gPSBudW0gKyAxO1xcbitcXHRcXHRcXHRcXHRzX251bSA9IDA7XFxuIFxcdFxcdFxcdFxcdGdvdG8gcmVzdW1lX2JpbmRfd2FsaztcXG4gXFx0XFx0XFx0fVxcbiBcXG4rXFx0XFx0XFx0aW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKGNiX2RhdGEpO1xcbiBcXHRcXHRcXHRzX251bSA9IDA7XFxuIFxcdFxcdH1cXG4gc2tpcF9iaW5kX2h0OlxcbitcXHRcXHRpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3IoY2JfZGF0YSk7XFxuIFxcdFxcdGNiLVxcdTAwM2VhcmdzWzBdID0gMjtcXG4gXFx0XFx0c19pID0gbnVtID0gc19udW0gPSAwO1xcbiBcXHR9XFxuQEAgLTQ4Miw0MiArNjAyLDMzIEBAIHN0YXRpYyB2b2lkIHRjcF9kaWFnX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxcbiBcXHRcXHRzcGlubG9ja190ICpsb2NrID0gaW5ldF9laGFzaF9sb2NrcChoYXNoaW5mbywgaSk7XFxuIFxcdFxcdHN0cnVjdCBobGlzdF9udWxsc19ub2RlICpub2RlO1xcbiBcXHRcXHRzdHJ1Y3Qgc29jayAqc2tfYXJyW1NLQVJSX1NaXTtcXG4rXFx0XFx0c3RydWN0IHNvY2sgKmN1cnNvcjtcXG4gXFx0XFx0aW50IG51bV9hcnJbU0tBUlJfU1pdO1xcbiBcXHRcXHRpbnQgaWR4LCBhY2N1bSwgcmVzO1xcbitcXHRcXHRib29sIHVzZV9jdXJzb3I7XFxuIFxcbiBcXHRcXHRpZiAoaGxpc3RfbnVsbHNfZW1wdHkoXFx1MDAyNmhlYWQtXFx1MDAzZWNoYWluKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRpZiAoaSBcXHUwMDNlIHNfaSlcXG4rXFx0XFx0aWYgKGkgXFx1MDAzZSBzX2kpIHtcXG4rXFx0XFx0XFx0aW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKGNiX2RhdGEpO1xcbiBcXHRcXHRcXHRzX251bSA9IDA7XFxuK1xcdFxcdH1cXG4gXFxuIG5leHRfY2h1bms6XFxuIFxcdFxcdG51bSA9IDA7XFxuIFxcdFxcdGFjY3VtID0gMDtcXG4gXFx0XFx0c3Bpbl9sb2NrX2JoKGxvY2spO1xcbi1cXHRcXHRza19udWxsc19mb3JfZWFjaChzaywgbm9kZSwgXFx1MDAyNmhlYWQtXFx1MDAzZWNoYWluKSB7XFxuLVxcdFxcdFxcdGludCBzdGF0ZTtcXG4tXFxuLVxcdFxcdFxcdGlmICghbmV0X2VxKHNvY2tfbmV0KHNrKSwgbmV0KSlcXG4tXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdFxcdGlmIChudW0gXFx1MDAzYyBzX251bSlcXG4tXFx0XFx0XFx0XFx0Z290byBuZXh0X25vcm1hbDtcXG4tXFx0XFx0XFx0c3RhdGUgPSAoc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9USU1FX1dBSVQpID9cXG4tXFx0XFx0XFx0XFx0UkVBRF9PTkNFKGluZXRfdHdzayhzayktXFx1MDAzZXR3X3N1YnN0YXRlKSA6IHNrLVxcdTAwM2Vza19zdGF0ZTtcXG4tXFx0XFx0XFx0aWYgKCEoaWRpYWdfc3RhdGVzIFxcdTAwMjYgKDEgXFx1MDAzY1xcdTAwM2Mgc3RhdGUpKSlcXG4tXFx0XFx0XFx0XFx0Z290byBuZXh0X25vcm1hbDtcXG4tXFx0XFx0XFx0aWYgKHItXFx1MDAzZXNkaWFnX2ZhbWlseSAhPSBBRl9VTlNQRUMgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0ICAgIHNrLVxcdTAwM2Vza19mYW1pbHkgIT0gci1cXHUwMDNlc2RpYWdfZmFtaWx5KVxcbi1cXHRcXHRcXHRcXHRnb3RvIG5leHRfbm9ybWFsO1xcbi1cXHRcXHRcXHRpZiAoci1cXHUwMDNlaWQuaWRpYWdfc3BvcnQgIT0gaHRvbnMoUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19udW0pKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQgICAgci1cXHUwMDNlaWQuaWRpYWdfc3BvcnQpXFxuLVxcdFxcdFxcdFxcdGdvdG8gbmV4dF9ub3JtYWw7XFxuLVxcdFxcdFxcdGlmIChyLVxcdTAwM2VpZC5pZGlhZ19kcG9ydCAhPSBzay1cXHUwMDNlc2tfZHBvcnQgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0ICAgIHItXFx1MDAzZWlkLmlkaWFnX2Rwb3J0KVxcbi1cXHRcXHRcXHRcXHRnb3RvIG5leHRfbm9ybWFsO1xcbi1cXHRcXHRcXHR0d3NrX2J1aWxkX2Fzc2VydCgpO1xcbi1cXG4tXFx0XFx0XFx0aWYgKCFpbmV0X2RpYWdfYmNfc2soY2JfZGF0YSwgc2spKVxcbitcXHRcXHRjdXJzb3IgPSBjYl9kYXRhLVxcdTAwM2VkdW1wX2N1cnNvcjtcXG4rXFx0XFx0dXNlX2N1cnNvciA9IGN1cnNvciBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAgIGNiX2RhdGEtXFx1MDAzZWR1bXBfY3Vyc29yX3R5cGUgPT1cXG4rXFx0XFx0XFx0ICAgICBJTkVUX0RJQUdfRFVNUF9DVVJTT1JfVENQX0VIQVNIIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICAgY2JfZGF0YS1cXHUwMDNlZHVtcF9jdXJzb3Jfc2xvdCA9PSBpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICAgIWhsaXN0X251bGxzX3VuaGFzaGVkKFxcdTAwMjZjdXJzb3ItXFx1MDAzZXNrX251bGxzX25vZGUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICAgY3Vyc29yLVxcdTAwM2Vza19udWxsc19ub2RlLnBwcmV2ICE9IExJU1RfUE9JU09OMjtcXG4rXFx0XFx0bm9kZSA9IHVzZV9jdXJzb3IgPyBjdXJzb3ItXFx1MDAzZXNrX251bGxzX25vZGUubmV4dCA6IGhlYWQtXFx1MDAzZWNoYWluLmZpcnN0O1xcbitcXHRcXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9mcm9tKHNrLCBub2RlLCBza19udWxsc19ub2RlKSB7XFxuK1xcdFxcdFxcdGlmICghdXNlX2N1cnNvciBcXHUwMDI2XFx1MDAyNiBudW0gXFx1MDAzYyBzX251bSlcXG4gXFx0XFx0XFx0XFx0Z290byBuZXh0X25vcm1hbDtcXG4gXFxuIFxcdFxcdFxcdGlmICghcmVmY291bnRfaW5jX25vdF96ZXJvKFxcdTAwMjZzay1cXHUwMDNlc2tfcmVmY250KSlcXG5AQCAtNTM0LDEzICs2NDUsNDIgQEAgc3RhdGljIHZvaWQgdGNwX2RpYWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXFxuIFxcbiBcXHRcXHRyZXMgPSAwO1xcbiBcXHRcXHRmb3IgKGlkeCA9IDA7IGlkeCBcXHUwMDNjIGFjY3VtOyBpZHgrKykge1xcbi1cXHRcXHRcXHRpZiAocmVzIFxcdTAwM2U9IDApIHtcXG4tXFx0XFx0XFx0XFx0cmVzID0gc2tfZGlhZ19maWxsKHNrX2FycltpZHhdLCBza2IsIGNiLCByLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICBOTE1fRl9NVUxUSSwgbmV0X2FkbWluKTtcXG4rXFx0XFx0XFx0aW50IHN0YXRlO1xcbitcXG4rXFx0XFx0XFx0c2sgPSBza19hcnJbaWR4XTtcXG4rXFx0XFx0XFx0aWYgKCFuZXRfZXEoc29ja19uZXQoc2spLCBuZXQpKVxcbitcXHRcXHRcXHRcXHRnb3RvIHB1dF9lc3RhYl9zaztcXG4rXFxuK1xcdFxcdFxcdHN0YXRlID0gKHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBUQ1BfVElNRV9XQUlUKSA/XFxuK1xcdFxcdFxcdFxcdFJFQURfT05DRShpbmV0X3R3c2soc2spLVxcdTAwM2V0d19zdWJzdGF0ZSkgOiBzay1cXHUwMDNlc2tfc3RhdGU7XFxuK1xcdFxcdFxcdGlmICghKGlkaWFnX3N0YXRlcyBcXHUwMDI2ICgxIFxcdTAwM2NcXHUwMDNjIHN0YXRlKSkpXFxuK1xcdFxcdFxcdFxcdGdvdG8gcHV0X2VzdGFiX3NrO1xcbitcXG4rXFx0XFx0XFx0aWYgKHItXFx1MDAzZXNkaWFnX2ZhbWlseSAhPSBBRl9VTlNQRUMgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgIHNrLVxcdTAwM2Vza19mYW1pbHkgIT0gci1cXHUwMDNlc2RpYWdfZmFtaWx5KVxcbitcXHRcXHRcXHRcXHRnb3RvIHB1dF9lc3RhYl9zaztcXG4rXFxuK1xcdFxcdFxcdGlmIChyLVxcdTAwM2VpZC5pZGlhZ19zcG9ydCAhPSBodG9ucyhSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX251bSkpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICByLVxcdTAwM2VpZC5pZGlhZ19zcG9ydClcXG4rXFx0XFx0XFx0XFx0Z290byBwdXRfZXN0YWJfc2s7XFxuK1xcbitcXHRcXHRcXHRpZiAoci1cXHUwMDNlaWQuaWRpYWdfZHBvcnQgIT0gc2stXFx1MDAzZXNrX2Rwb3J0IFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICByLVxcdTAwM2VpZC5pZGlhZ19kcG9ydClcXG4rXFx0XFx0XFx0XFx0Z290byBwdXRfZXN0YWJfc2s7XFxuK1xcbitcXHRcXHRcXHR0d3NrX2J1aWxkX2Fzc2VydCgpO1xcbitcXHRcXHRcXHRpZiAocmVzIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgaW5ldF9kaWFnX2JjX3NrKGNiX2RhdGEsIHNrKSkge1xcbitcXHRcXHRcXHRcXHRyZXMgPSBza19kaWFnX2ZpbGwoc2ssIHNrYiwgY2IsIHIsIE5MTV9GX01VTFRJLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBuZXRfYWRtaW4pO1xcbiBcXHRcXHRcXHRcXHRpZiAocmVzIFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0XFx0XFx0bnVtID0gbnVtX2FycltpZHhdO1xcbiBcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdHNvY2tfZ2VuX3B1dChza19hcnJbaWR4XSk7XFxuK1xcdFxcdFxcdGlmIChyZXMgXFx1MDAzZT0gMClcXG4rXFx0XFx0XFx0XFx0dGNwX2RpYWdfc2F2ZV9jdXJzb3IoY2JfZGF0YSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBJTkVUX0RJQUdfRFVNUF9DVVJTT1JfVENQX0VIQVNILFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGksIHNrKTtcXG4rcHV0X2VzdGFiX3NrOlxcbitcXHRcXHRcXHRzb2NrX2dlbl9wdXQoc2spO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlmIChyZXMgXFx1MDAzYyAwKVxcbiBcXHRcXHRcXHRicmVhaztcXG5AQCAtNTQ4LDkgKzY4OCwxMSBAQCBzdGF0aWMgdm9pZCB0Y3BfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcXG4gXFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuIFxcbiBcXHRcXHRpZiAoYWNjdW0gPT0gU0tBUlJfU1opIHtcXG4tXFx0XFx0XFx0c19udW0gPSBudW0gKyAxO1xcbitcXHRcXHRcXHRzX251bSA9IDA7XFxuIFxcdFxcdFxcdGdvdG8gbmV4dF9jaHVuaztcXG4gXFx0XFx0fVxcbitcXG4rXFx0XFx0aW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKGNiX2RhdGEpO1xcbiBcXHR9XFxuIFxcbiBkb25lOlxcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jIGIvbmV0L21wdGNwL21wdGNwX2RpYWcuY1xcbmluZGV4IDEzNmMyZDA1YzBlZWIuLjk4MWU2NDM0MzAzOTAgMTAwNjQ0XFxuLS0tIGEvbmV0L21wdGNwL21wdGNwX2RpYWcuY1xcbisrKyBiL25ldC9tcHRjcC9tcHRjcF9kaWFnLmNcXG5AQCAtNiwxMiArNiwyNSBAQFxcbiAgKiBBdXRob3I6IFBhb2xvIEFiZW5pIFxcdTAwM2NwYWJlbmlAcmVkaGF0LmNvbVxcdTAwM2VcXG4gICovXFxuIFxcbisvKiBQcm9jZXNzIGEgYm91bmRlZCBudW1iZXIgb2YgbGlzdGVuZXJzIHBlciBidWNrZXQgbG9jayBob2xkLiAqL1xcbisjZGVmaW5lIE1QVENQX0RJQUdfQlVMS19TWiAxNlxcbitcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbmV0X2RpYWcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRsaW5rLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJwcm90b2NvbC5oXFxcIlxcbiBcXG4rc3RhdGljIHZvaWQgbXB0Y3BfZGlhZ19zYXZlX2N1cnNvcihzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSAqY2JfZGF0YSxcXG4rXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IHNsb3QsIHN0cnVjdCBzb2NrICpzaylcXG4re1xcbitcXHRzb2NrX2hvbGQoc2spO1xcbitcXHRpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3IoY2JfZGF0YSk7XFxuK1xcdGNiX2RhdGEtXFx1MDAzZWR1bXBfY3Vyc29yID0gc2s7XFxuK1xcdGNiX2RhdGEtXFx1MDAzZWR1bXBfY3Vyc29yX3Nsb3QgPSBzbG90O1xcbitcXHRjYl9kYXRhLVxcdTAwM2VkdW1wX2N1cnNvcl90eXBlID0gSU5FVF9ESUFHX0RVTVBfQ1VSU09SX01QVENQX0xJU1RFTjtcXG4rfVxcbitcXG4gc3RhdGljIGludCBza19kaWFnX2R1bXAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXFxuIFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfcmVxX3YyICpyZXEsXFxuQEAgLTc3LDYgKzkwLDcgQEAgc3RhdGljIHZvaWQgbXB0Y3BfZGlhZ19kdW1wX2xpc3RlbmVycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFcXG4gXFx0XFx0XFx0XFx0ICAgICAgYm9vbCBuZXRfYWRtaW4pXFxuIHtcXG4gXFx0c3RydWN0IG1wdGNwX2RpYWdfY3R4ICpkaWFnX2N0eCA9ICh2b2lkICopY2ItXFx1MDAzZWN0eDtcXG4rXFx0c3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEgPSBjYi1cXHUwMDNlZGF0YTtcXG4gXFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVxcdTAwM2Vzayk7XFxuIFxcdHN0cnVjdCBpbmV0X2hhc2hpbmZvICpoaW5mbztcXG4gXFx0aW50IGk7XFxuQEAgLTg2LDYyICsxMDAsOTggQEAgc3RhdGljIHZvaWQgbXB0Y3BfZGlhZ19kdW1wX2xpc3RlbmVycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFcXG4gXFx0Zm9yIChpID0gZGlhZ19jdHgtXFx1MDAzZWxfc2xvdDsgaSBcXHUwMDNjPSBoaW5mby1cXHUwMDNlbGhhc2gyX21hc2s7IGkrKykge1xcbiBcXHRcXHRzdHJ1Y3QgaW5ldF9saXN0ZW5faGFzaGJ1Y2tldCAqaWxiO1xcbiBcXHRcXHRzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbm9kZTtcXG4tXFx0XFx0c3RydWN0IHNvY2sgKnNrO1xcbi1cXHRcXHRpbnQgbnVtID0gMDtcXG4tXFxuK1xcdFxcdHN0cnVjdCBzb2NrICp0bXAsICpzaywgKnNrX2FycltNUFRDUF9ESUFHX0JVTEtfU1pdO1xcbitcXHRcXHRzdHJ1Y3Qgc29jayAqY3Vyc29yO1xcbitcXHRcXHRpbnQgYWNjdW0sIGlkeCwgbnVtLCByZXQ7XFxuK1xcdFxcdGludCBudW1fYXJyW01QVENQX0RJQUdfQlVMS19TWl07XFxuK1xcdFxcdGJvb2wgdXNlX2N1cnNvcjtcXG4rXFxuK3Jlc3VtZV9saXN0ZW5fd2FsazpcXG4rXFx0XFx0bnVtID0gMDtcXG4rXFx0XFx0YWNjdW0gPSAwO1xcbiBcXHRcXHRpbGIgPSBcXHUwMDI2aGluZm8tXFx1MDAzZWxoYXNoMltpXTtcXG4rXFx0XFx0cmV0ID0gMDtcXG4gXFxuIFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZpbGItXFx1MDAzZWxvY2spO1xcbi1cXHRcXHRza19udWxsc19mb3JfZWFjaChzaywgbm9kZSwgXFx1MDAyNmlsYi1cXHUwMDNlbnVsbHNfaGVhZCkge1xcbi1cXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpjdHggPSBtcHRjcF9zdWJmbG93X2N0eChzayk7XFxuLVxcdFxcdFxcdHN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTtcXG4tXFx0XFx0XFx0aW50IHJldDtcXG4tXFxuLVxcdFxcdFxcdGlmIChudW0gXFx1MDAzYyBkaWFnX2N0eC1cXHUwMDNlbF9udW0pXFxuLVxcdFxcdFxcdFxcdGdvdG8gbmV4dF9saXN0ZW47XFxuLVxcbi1cXHRcXHRcXHRpZiAoIWN0eCB8fCBzdHJjbXAoaW5ldF9jc2soc2spLVxcdTAwM2VpY3NrX3VscF9vcHMtXFx1MDAzZW5hbWUsIFxcXCJtcHRjcFxcXCIpKVxcbi1cXHRcXHRcXHRcXHRnb3RvIG5leHRfbGlzdGVuO1xcbi1cXG4tXFx0XFx0XFx0c2sgPSBjdHgtXFx1MDAzZWNvbm47XFxuLVxcdFxcdFxcdGlmICghc2sgfHwgIW5ldF9lcShzb2NrX25ldChzayksIG5ldCkpXFxuLVxcdFxcdFxcdFxcdGdvdG8gbmV4dF9saXN0ZW47XFxuLVxcbi1cXHRcXHRcXHRpZiAoci1cXHUwMDNlc2RpYWdfZmFtaWx5ICE9IEFGX1VOU1BFQyBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQgICAgc2stXFx1MDAzZXNrX2ZhbWlseSAhPSByLVxcdTAwM2VzZGlhZ19mYW1pbHkpXFxuLVxcdFxcdFxcdFxcdGdvdG8gbmV4dF9saXN0ZW47XFxuLVxcbi1cXHRcXHRcXHRpZiAoci1cXHUwMDNlaWQuaWRpYWdfc3BvcnQgIT0gaW5ldC1cXHUwMDNlaW5ldF9zcG9ydCBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQgICAgci1cXHUwMDNlaWQuaWRpYWdfc3BvcnQpXFxuK1xcdFxcdGN1cnNvciA9IGNiX2RhdGEtXFx1MDAzZWR1bXBfY3Vyc29yO1xcbitcXHRcXHR1c2VfY3Vyc29yID0gY3Vyc29yIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICAgY2JfZGF0YS1cXHUwMDNlZHVtcF9jdXJzb3JfdHlwZSA9PVxcbitcXHRcXHRcXHQgICAgIElORVRfRElBR19EVU1QX0NVUlNPUl9NUFRDUF9MSVNURU4gXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgICBjYl9kYXRhLVxcdTAwM2VkdW1wX2N1cnNvcl9zbG90ID09IGkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgICAhaGxpc3RfbnVsbHNfdW5oYXNoZWQoXFx1MDAyNmN1cnNvci1cXHUwMDNlc2tfbnVsbHNfbm9kZSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgICBjdXJzb3ItXFx1MDAzZXNrX251bGxzX25vZGUucHByZXYgIT0gTElTVF9QT0lTT04yO1xcbitcXHRcXHRub2RlID0gdXNlX2N1cnNvciA/IGN1cnNvci1cXHUwMDNlc2tfbnVsbHNfbm9kZS5uZXh0IDpcXG4rXFx0XFx0XFx0XFx0ICAgIGlsYi1cXHUwMDNlbnVsbHNfaGVhZC5maXJzdDtcXG4rXFx0XFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfZnJvbShzaywgbm9kZSwgc2tfbnVsbHNfbm9kZSkge1xcbitcXHRcXHRcXHRpZiAoIXVzZV9jdXJzb3IgXFx1MDAyNlxcdTAwMjYgbnVtIFxcdTAwM2MgZGlhZ19jdHgtXFx1MDAzZWxfbnVtKVxcbiBcXHRcXHRcXHRcXHRnb3RvIG5leHRfbGlzdGVuO1xcbiBcXG4gXFx0XFx0XFx0aWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oXFx1MDAyNnNrLVxcdTAwM2Vza19yZWZjbnQpKVxcbiBcXHRcXHRcXHRcXHRnb3RvIG5leHRfbGlzdGVuO1xcbiBcXG4tXFx0XFx0XFx0cmV0ID0gc2tfZGlhZ19kdW1wKHNrLCBza2IsIGNiLCByLCBuZXRfYWRtaW4pO1xcbi1cXG4tXFx0XFx0XFx0c29ja19wdXQoc2spO1xcbi1cXG4tXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tXFx0XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmlsYi1cXHUwMDNlbG9jayk7XFxuLVxcdFxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi1cXHRcXHRcXHRcXHRkaWFnX2N0eC1cXHUwMDNlbF9zbG90ID0gaTtcXG4tXFx0XFx0XFx0XFx0ZGlhZ19jdHgtXFx1MDAzZWxfbnVtID0gbnVtO1xcbi1cXHRcXHRcXHRcXHRyZXR1cm47XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0ZGlhZ19jdHgtXFx1MDAzZWxfbnVtID0gbnVtICsgMTtcXG4tXFx0XFx0XFx0bnVtID0gMDtcXG4rXFx0XFx0XFx0bnVtX2FyclthY2N1bV0gPSBudW07XFxuK1xcdFxcdFxcdHNrX2FyclthY2N1bV0gPSBzaztcXG4rXFx0XFx0XFx0aWYgKCsrYWNjdW0gPT0gTVBUQ1BfRElBR19CVUxLX1NaKVxcbitcXHRcXHRcXHRcXHRicmVhaztcXG4gbmV4dF9saXN0ZW46XFxuIFxcdFxcdFxcdCsrbnVtO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZpbGItXFx1MDAzZWxvY2spO1xcbiBcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFxuK1xcdFxcdGZvciAoaWR4ID0gMDsgaWR4IFxcdTAwM2MgYWNjdW07IGlkeCsrKSB7XFxuK1xcdFxcdFxcdGNvbnN0IHN0cnVjdCB0Y3BfdWxwX29wcyAqdWxwX29wcztcXG4rXFx0XFx0XFx0Y29uc3Qgc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqY3R4O1xcbitcXHRcXHRcXHRzdHJ1Y3QgaW5ldF9zb2NrICppbmV0O1xcbitcXG4rXFx0XFx0XFx0c2sgPSBza19hcnJbaWR4XTtcXG4rXFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRcXHRcXHRjdHggPSBtcHRjcF9zdWJmbG93X2N0eChzayk7XFxuK1xcdFxcdFxcdHVscF9vcHMgPSBSRUFEX09OQ0UoaW5ldF9jc2soc2spLVxcdTAwM2VpY3NrX3VscF9vcHMpO1xcbitcXHRcXHRcXHRpbmV0ID0gaW5ldF9zayhzayk7XFxuK1xcdFxcdFxcdHRtcCA9IGN0eCA/IGN0eC1cXHUwMDNlY29ubiA6IE5VTEw7XFxuK1xcdFxcdFxcdGlmICghY3R4IHx8ICF1bHBfb3BzIHx8IHN0cmNtcCh1bHBfb3BzLVxcdTAwM2VuYW1lLCBcXFwibXB0Y3BcXFwiKSB8fFxcbitcXHRcXHRcXHQgICAgIXRtcCB8fCAhbmV0X2VxKHNvY2tfbmV0KHRtcCksIG5ldCkgfHxcXG4rXFx0XFx0XFx0ICAgIChyLVxcdTAwM2VzZGlhZ19mYW1pbHkgIT0gQUZfVU5TUEVDIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICAgdG1wLVxcdTAwM2Vza19mYW1pbHkgIT0gci1cXHUwMDNlc2RpYWdfZmFtaWx5KSB8fFxcbitcXHRcXHRcXHQgICAgKHItXFx1MDAzZWlkLmlkaWFnX3Nwb3J0ICE9IGluZXQtXFx1MDAzZWluZXRfc3BvcnQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgICByLVxcdTAwM2VpZC5pZGlhZ19zcG9ydCkgfHxcXG4rXFx0XFx0XFx0ICAgICFyZWZjb3VudF9pbmNfbm90X3plcm8oXFx1MDAyNnRtcC1cXHUwMDNlc2tfcmVmY250KSkge1xcbitcXHRcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0XFx0XFx0XFx0Z290byBwcm9jZXNzZWRfbGlzdGVuZXJfc2s7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzZT0gMCkge1xcbitcXHRcXHRcXHRcXHRyZXQgPSBza19kaWFnX2R1bXAodG1wLCBza2IsIGNiLCByLCBuZXRfYWRtaW4pO1xcbitcXHRcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0XFx0bnVtID0gbnVtX2FycltpZHhdO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdHNvY2tfcHV0KHRtcCk7XFxuK3Byb2Nlc3NlZF9saXN0ZW5lcl9zazpcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNlPSAwKVxcbitcXHRcXHRcXHRcXHRtcHRjcF9kaWFnX3NhdmVfY3Vyc29yKGNiX2RhdGEsIGksIHNrKTtcXG4rXFx0XFx0XFx0c29ja19wdXQoc2spO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbitcXHRcXHRcXHRkaWFnX2N0eC1cXHUwMDNlbF9zbG90ID0gaTtcXG4rXFx0XFx0XFx0ZGlhZ19jdHgtXFx1MDAzZWxfbnVtID0gbnVtO1xcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbitcXG4rXFx0XFx0aWYgKGFjY3VtID09IE1QVENQX0RJQUdfQlVMS19TWikge1xcbitcXHRcXHRcXHRkaWFnX2N0eC1cXHUwMDNlbF9udW0gPSAwO1xcbitcXHRcXHRcXHRnb3RvIHJlc3VtZV9saXN0ZW5fd2FsaztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKGNiX2RhdGEpO1xcbiBcXHRcXHRkaWFnX2N0eC1cXHUwMDNlbF9udW0gPSAwO1xcbiBcXHR9XFxuIFxcbitcXHRpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3IoY2JfZGF0YSk7XFxuIFxcdGRpYWdfY3R4LVxcdTAwM2VsX251bSA9IDA7XFxuIFxcdGRpYWdfY3R4LVxcdTAwM2VsX3Nsb3QgPSBpO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE3OjUyOjUxLjM1NDA5NzU5MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM3MDE2MzAzODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRfRElBR1wiLFxuICAgIFwiSU5FVF9UQ1BfRElBR1wiLFxuICAgIFwiTVBUQ1BcIixcbiAgICBcIklORVRfTVBUQ1BfRElBR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF9kaWFnX2R1bXBcIixcbiAgICBcIm1wdGNwX2RpYWdfZHVtcF9saXN0ZW5lcnNcIixcbiAgICBcImluZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBjdXJzb3IgbWVjaGFuaXNtIGZvciBkdW1waW5nIFRDUCBhbmQgTVBUQ1Agc29ja2V0cyB2aWEgdGhlIGluZXRfZGlhZyBuZXRsaW5rIGludGVyZmFjZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgdGhhdCBhZmZlY3RzIGhvdyBzb2NrZXRzIGFyZSBpdGVyYXRlZCBhbmQgZHVtcGVkLCBwcmV2ZW50aW5nIGR1cGxpY2F0ZXMgb3IgbWlzc2VkIHNvY2tldHMgd2hlbiB0aGUgaGFzaCB0YWJsZSBjaGFuZ2VzIGR1cmluZyB0aGUgZHVtcC4gSXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbmV0bGluayBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjI5YTMxNTE5ZGNlZTJiY2Q1OWZmZTJkYTRkMjVkMTZiYWU2OWRiN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDMwIDE3OjUyOjUwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbmV0X2RpYWcuaCBiL2luY2x1ZGUvbGludXgvaW5ldF9kaWFnLmhcbmluZGV4IDcwNGZkNDE1YzJiNDkuLjQ4NTllNzdhMjhjN2EgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2luZXRfZGlhZy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2luZXRfZGlhZy5oXG5AQCAtNiw2ICs2LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L2luZXRfZGlhZy5oXHUwMDNlXG4gXG4gc3RydWN0IGluZXRfaGFzaGluZm87XG4rc3RydWN0IHNvY2s7XG4gXG4gc3RydWN0IGluZXRfZGlhZ19oYW5kbGVyIHtcbiBcdHN0cnVjdCBtb2R1bGVcdCpvd25lcjtcbkBAIC0zMiwxMiArMzMsMjQgQEAgc3RydWN0IGluZXRfZGlhZ19oYW5kbGVyIHtcbiB9O1xuIFxuIHN0cnVjdCBicGZfc2tfc3RvcmFnZV9kaWFnO1xuK1xuK2VudW0gaW5ldF9kaWFnX2R1bXBfY3Vyc29yX3R5cGUge1xuK1x0SU5FVF9ESUFHX0RVTVBfQ1VSU09SX05PTkUsXG4rXHRJTkVUX0RJQUdfRFVNUF9DVVJTT1JfVENQX0xJU1RFTixcbitcdElORVRfRElBR19EVU1QX0NVUlNPUl9UQ1BfQklORCxcbitcdElORVRfRElBR19EVU1QX0NVUlNPUl9UQ1BfRUhBU0gsXG4rXHRJTkVUX0RJQUdfRFVNUF9DVVJTT1JfTVBUQ1BfTElTVEVOLFxuK307XG4rXG4gc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEge1xuIFx0c3RydWN0IG5sYXR0ciAqcmVxX25sYXNbX19JTkVUX0RJQUdfUkVRX01BWF07XG4gI2RlZmluZSBpbmV0X2RpYWdfbmxhX2JjIHJlcV9ubGFzW0lORVRfRElBR19SRVFfQllURUNPREVdXG4gI2RlZmluZSBpbmV0X2RpYWdfbmxhX2JwZl9zdGdzIHJlcV9ubGFzW0lORVRfRElBR19SRVFfU0tfQlBGX1NUT1JBR0VTXVxuIFxuIFx0c3RydWN0IGJwZl9za19zdG9yYWdlX2RpYWcgKmJwZl9zdGdfZGlhZztcbitcdHN0cnVjdCBzb2NrICpkdW1wX2N1cnNvcjtcbitcdHVuc2lnbmVkIGludCBkdW1wX2N1cnNvcl9zbG90O1xuK1x0dTggZHVtcF9jdXJzb3JfdHlwZTtcbiBcdGJvb2wgbWFya19uZWVkZWQ7XHQvKiBJTkVUX0RJQUdfQkNfTUFSS19DT05EIHByZXNlbnQuICovXG4gI2lmZGVmIENPTkZJR19TT0NLX0NHUk9VUF9EQVRBXG4gXHRib29sIGNncm91cF9uZWVkZWQ7XHQvKiBJTkVUX0RJQUdfQkNfQ0dST1VQX0NPTkQgcHJlc2VudC4gKi9cbkBAIC01Myw2ICs2Niw4IEBAIGludCBpbmV0X3NrX2RpYWdfZmlsbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayxcbiBcbiBpbnQgaW5ldF9kaWFnX2JjX3NrKGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfZHVtcF9kYXRhICpjYl9kYXRhLCBzdHJ1Y3Qgc29jayAqc2spO1xuIFxuK3ZvaWQgaW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKHN0cnVjdCBpbmV0X2RpYWdfZHVtcF9kYXRhICpjYl9kYXRhKTtcbitcbiB2b2lkIGluZXRfZGlhZ19tc2dfY29tbW9uX2ZpbGwoc3RydWN0IGluZXRfZGlhZ19tc2cgKnIsIHN0cnVjdCBzb2NrICpzayk7XG4gXG4gc3RhdGljIGlubGluZSBzaXplX3QgaW5ldF9kaWFnX21zZ19hdHRyc19zaXplKHZvaWQpXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9kaWFnLmMgYi9uZXQvaXB2NC9pbmV0X2RpYWcuY1xuaW5kZXggMzRiNzdhYTg3ZDBhNC4uNDExNDhlODgwMDU0NSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2luZXRfZGlhZy5jXG4rKysgYi9uZXQvaXB2NC9pbmV0X2RpYWcuY1xuQEAgLTg5MSwxMCArODkxLDIzIEBAIHN0YXRpYyBpbnQgaW5ldF9kaWFnX2R1bXBfc3RhcnRfY29tcGF0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdHJldHVybiBfX2luZXRfZGlhZ19kdW1wX3N0YXJ0KGNiLCBzaXplb2Yoc3RydWN0IGluZXRfZGlhZ19yZXEpKTtcbiB9XG4gXG4rdm9pZCBpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3Ioc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEpXG4re1xuK1x0aWYgKCFjYl9kYXRhLVx1MDAzZWR1bXBfY3Vyc29yKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRzb2NrX2dlbl9wdXQoY2JfZGF0YS1cdTAwM2VkdW1wX2N1cnNvcik7XG4rXHRjYl9kYXRhLVx1MDAzZWR1bXBfY3Vyc29yID0gTlVMTDtcbitcdGNiX2RhdGEtXHUwMDNlZHVtcF9jdXJzb3Jfc2xvdCA9IDA7XG4rXHRjYl9kYXRhLVx1MDAzZWR1bXBfY3Vyc29yX3R5cGUgPSBJTkVUX0RJQUdfRFVNUF9DVVJTT1JfTk9ORTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoaW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKTtcbitcbiBzdGF0aWMgaW50IGluZXRfZGlhZ19kdW1wX2RvbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIHtcbiBcdHN0cnVjdCBpbmV0X2RpYWdfZHVtcF9kYXRhICpjYl9kYXRhID0gY2ItXHUwMDNlZGF0YTtcbiBcbitcdGluZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvcihjYl9kYXRhKTtcbiBcdGJwZl9za19zdG9yYWdlX2RpYWdfZnJlZShjYl9kYXRhLVx1MDAzZWJwZl9zdGdfZGlhZyk7XG4gXHRrZnJlZShjYi1cdTAwM2VkYXRhKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfZGlhZy5jIGIvbmV0L2lwdjQvdGNwX2RpYWcuY1xuaW5kZXggYmExZmRiZTk4MDdmZC4uYmUwYzIyY2M0NDViMiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9kaWFnLmNcbisrKyBiL25ldC9pcHY0L3RjcF9kaWFnLmNcbkBAIC0yODUsNiArMjg1LDY1IEBAIHN0YXRpYyBpbnQgc2tfZGlhZ19maWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCBuZXRfYWRtaW4pO1xuIH1cbiBcbisvKiBQcm9jZXNzIGEgbWF4aW11bSBvZiBTS0FSUl9TWiBzb2NrZXRzIGF0IGEgdGltZSB3aGVuIHdhbGtpbmcgaGFzaCBidWNrZXRzXG4rICogd2l0aCBiaCBkaXNhYmxlZC5cbisgKi9cbisjZGVmaW5lIFNLQVJSX1NaIDE2XG4rXG4rc3RhdGljIHZvaWQgdGNwX2RpYWdfc2F2ZV9jdXJzb3Ioc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEsIGludCB0eXBlLFxuK1x0XHRcdFx0IHVuc2lnbmVkIGludCBzbG90LCBzdHJ1Y3Qgc29jayAqc2spXG4re1xuK1x0c29ja19ob2xkKHNrKTtcbitcdGluZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvcihjYl9kYXRhKTtcbitcdGNiX2RhdGEtXHUwMDNlZHVtcF9jdXJzb3IgPSBzaztcbitcdGNiX2RhdGEtXHUwMDNlZHVtcF9jdXJzb3Jfc2xvdCA9IHNsb3Q7XG4rXHRjYl9kYXRhLVx1MDAzZWR1bXBfY3Vyc29yX3R5cGUgPSB0eXBlO1xuK31cbitcbitzdGF0aWMgYm9vbCB0Y3BfZGlhZ19iaW5kX2NvbGxlY3Rfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICoqc2tfYXJyLFxuK1x0XHRcdFx0ICAgICAgIGludCAqbnVtX2FyciwgaW50ICphY2N1bSwgaW50IG51bSlcbit7XG4rXHRzb2NrX2hvbGQoc2spO1xuK1x0bnVtX2FyclsqYWNjdW1dID0gbnVtO1xuK1x0c2tfYXJyWyphY2N1bV0gPSBzaztcbitcbitcdHJldHVybiArKyphY2N1bSA9PSBTS0FSUl9TWjtcbit9XG4rXG4rc3RhdGljIGJvb2wgdGNwX2RpYWdfYmluZF9jb2xsZWN0X293bmVycyhzdHJ1Y3QgaGxpc3RfaGVhZCAqb3duZXJzLFxuK1x0XHRcdFx0XHQgc3RydWN0IHNvY2sgKipza19hcnIsIGludCAqbnVtX2FycixcbitcdFx0XHRcdFx0IGludCAqYWNjdW0sIGludCAqbnVtLCBpbnQgc19udW0pXG4re1xuK1x0c3RydWN0IHNvY2sgKnNrO1xuK1xuK1x0c2tfZm9yX2VhY2hfYm91bmQoc2ssIG93bmVycykge1xuK1x0XHRpZiAoKm51bSBcdTAwM2Mgc19udW0pIHtcbitcdFx0XHQoKm51bSkrKztcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuK1x0XHRpZiAodGNwX2RpYWdfYmluZF9jb2xsZWN0X3NvY2soc2ssIHNrX2FyciwgbnVtX2FyciwgYWNjdW0sICpudW0pKVxuK1x0XHRcdHJldHVybiB0cnVlO1xuK1x0XHQoKm51bSkrKztcbitcdH1cbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rc3RhdGljIGJvb2wgdGNwX2RpYWdfYmluZF9jb2xsZWN0X293bmVyc19jb250aW51ZShzdHJ1Y3Qgc29jayAqc2ssXG4rXHRcdFx0XHRcdFx0ICBzdHJ1Y3Qgc29jayAqKnNrX2FycixcbitcdFx0XHRcdFx0XHQgIGludCAqbnVtX2FyciwgaW50ICphY2N1bSxcbitcdFx0XHRcdFx0XHQgIGludCAqbnVtKVxuK3tcbitcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlKHNrLCBza19iaW5kX25vZGUpIHtcbitcdFx0aWYgKHRjcF9kaWFnX2JpbmRfY29sbGVjdF9zb2NrKHNrLCBza19hcnIsIG51bV9hcnIsIGFjY3VtLCAqbnVtKSlcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0KCpudW0pKys7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHR3c2tfYnVpbGRfYXNzZXJ0KHZvaWQpXG4ge1xuIFx0QlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2ssIHR3X2ZhbWlseSkgIT1cbkBAIC0zMzUsOCArMzk0LDE1IEBAIHN0YXRpYyB2b2lkIHRjcF9kaWFnX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxuIFx0XHRmb3IgKGkgPSBzX2k7IGkgXHUwMDNjPSBoYXNoaW5mby1cdTAwM2VsaGFzaDJfbWFzazsgaSsrKSB7XG4gXHRcdFx0c3RydWN0IGluZXRfbGlzdGVuX2hhc2hidWNrZXQgKmlsYjtcbiBcdFx0XHRzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbm9kZTtcbitcdFx0XHRzdHJ1Y3Qgc29jayAqc2tfYXJyW1NLQVJSX1NaXTtcbitcdFx0XHRzdHJ1Y3Qgc29jayAqY3Vyc29yO1xuK1x0XHRcdGludCBudW1fYXJyW1NLQVJSX1NaXTtcbitcdFx0XHRpbnQgaWR4LCBhY2N1bSwgcmVzO1xuK1x0XHRcdGJvb2wgdXNlX2N1cnNvcjtcbiBcbityZXN1bWVfbGlzdGVuX3dhbGs6XG4gXHRcdFx0bnVtID0gMDtcbitcdFx0XHRhY2N1bSA9IDA7XG4gXHRcdFx0aWxiID0gXHUwMDI2aGFzaGluZm8tXHUwMDNlbGhhc2gyW2ldO1xuIFxuIFx0XHRcdGlmIChobGlzdF9udWxsc19lbXB0eShcdTAwMjZpbGItXHUwMDNlbnVsbHNfaGVhZCkpIHtcbkBAIC0zNDQsNTIgKzQxMCw4MCBAQCBzdGF0aWMgdm9pZCB0Y3BfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdH1cbiBcdFx0XHRzcGluX2xvY2soXHUwMDI2aWxiLVx1MDAzZWxvY2spO1xuLVx0XHRcdHNrX251bGxzX2Zvcl9lYWNoKHNrLCBub2RlLCBcdTAwMjZpbGItXHUwMDNlbnVsbHNfaGVhZCkge1xuLVx0XHRcdFx0c3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spO1xuK1x0XHRcdGN1cnNvciA9IGNiX2RhdGEtXHUwMDNlZHVtcF9jdXJzb3I7XG4rXHRcdFx0dXNlX2N1cnNvciA9IGN1cnNvciBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdCAgICAgY2JfZGF0YS1cdTAwM2VkdW1wX2N1cnNvcl90eXBlID09XG4rXHRcdFx0XHQgICAgIElORVRfRElBR19EVU1QX0NVUlNPUl9UQ1BfTElTVEVOIFx1MDAyNlx1MDAyNlxuK1x0XHRcdFx0ICAgICBjYl9kYXRhLVx1MDAzZWR1bXBfY3Vyc29yX3Nsb3QgPT0gaSBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdCAgICAgIWhsaXN0X251bGxzX3VuaGFzaGVkKFx1MDAyNmN1cnNvci1cdTAwM2Vza19udWxsc19ub2RlKSBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdCAgICAgY3Vyc29yLVx1MDAzZXNrX251bGxzX25vZGUucHByZXYgIT0gTElTVF9QT0lTT04yO1xuK1x0XHRcdG5vZGUgPSB1c2VfY3Vyc29yID8gY3Vyc29yLVx1MDAzZXNrX251bGxzX25vZGUubmV4dCA6XG4rXHRcdFx0XHRcdCAgICBpbGItXHUwMDNlbnVsbHNfaGVhZC5maXJzdDtcbitcdFx0XHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9mcm9tKHNrLCBub2RlLCBza19udWxsc19ub2RlKSB7XG4rXHRcdFx0XHRpZiAoIXVzZV9jdXJzb3IgXHUwMDI2XHUwMDI2IG51bSBcdTAwM2Mgc19udW0pXG4rXHRcdFx0XHRcdGdvdG8gbmV4dF9saXN0ZW47XG4gXG4tXHRcdFx0XHRpZiAoIW5ldF9lcShzb2NrX25ldChzayksIG5ldCkpXG4tXHRcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdFx0c29ja19ob2xkKHNrKTtcbitcdFx0XHRcdG51bV9hcnJbYWNjdW1dID0gbnVtO1xuK1x0XHRcdFx0c2tfYXJyW2FjY3VtXSA9IHNrO1xuK1x0XHRcdFx0aWYgKCsrYWNjdW0gPT0gU0tBUlJfU1opXG4rXHRcdFx0XHRcdGJyZWFrO1xuIFxuLVx0XHRcdFx0aWYgKG51bSBcdTAwM2Mgc19udW0pIHtcbi1cdFx0XHRcdFx0bnVtKys7XG4tXHRcdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdFx0fVxuK25leHRfbGlzdGVuOlxuK1x0XHRcdFx0KytudW07XG4rXHRcdFx0fVxuK1x0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmlsYi1cdTAwM2Vsb2NrKTtcbiBcbitcdFx0XHRyZXMgPSAwO1xuK1x0XHRcdGZvciAoaWR4ID0gMDsgaWR4IFx1MDAzYyBhY2N1bTsgaWR4KyspIHtcbitcdFx0XHRcdHN0cnVjdCBpbmV0X3NvY2sgKmluZXQ7XG4rXG4rXHRcdFx0XHRzayA9IHNrX2FycltpZHhdO1xuK1x0XHRcdFx0aWYgKCFuZXRfZXEoc29ja19uZXQoc2spLCBuZXQpKVxuK1x0XHRcdFx0XHRnb3RvIHByb2Nlc3NlZF9saXN0ZW5fc2s7XG4rXG4rXHRcdFx0XHRpbmV0ID0gaW5ldF9zayhzayk7XG4gXHRcdFx0XHRpZiAoci1cdTAwM2VzZGlhZ19mYW1pbHkgIT0gQUZfVU5TUEVDIFx1MDAyNlx1MDAyNlxuIFx0XHRcdFx0ICAgIHNrLVx1MDAzZXNrX2ZhbWlseSAhPSByLVx1MDAzZXNkaWFnX2ZhbWlseSlcbi1cdFx0XHRcdFx0Z290byBuZXh0X2xpc3RlbjtcbitcdFx0XHRcdFx0Z290byBwcm9jZXNzZWRfbGlzdGVuX3NrO1xuIFxuIFx0XHRcdFx0aWYgKHItXHUwMDNlaWQuaWRpYWdfc3BvcnQgIT0gaW5ldC1cdTAwM2VpbmV0X3Nwb3J0IFx1MDAyNlx1MDAyNlxuIFx0XHRcdFx0ICAgIHItXHUwMDNlaWQuaWRpYWdfc3BvcnQpXG4tXHRcdFx0XHRcdGdvdG8gbmV4dF9saXN0ZW47XG4tXG4tXHRcdFx0XHRpZiAoIWluZXRfZGlhZ19iY19zayhjYl9kYXRhLCBzaykpXG4tXHRcdFx0XHRcdGdvdG8gbmV4dF9saXN0ZW47XG4rXHRcdFx0XHRcdGdvdG8gcHJvY2Vzc2VkX2xpc3Rlbl9zaztcbiBcbi1cdFx0XHRcdGlmIChpbmV0X3NrX2RpYWdfZmlsbChzaywgaW5ldF9jc2soc2spLCBza2IsXG4tXHRcdFx0XHRcdFx0ICAgICAgY2IsIHIsIE5MTV9GX01VTFRJLFxuLVx0XHRcdFx0XHRcdCAgICAgIG5ldF9hZG1pbikgXHUwMDNjIDApIHtcbi1cdFx0XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2aWxiLVx1MDAzZWxvY2spO1xuLVx0XHRcdFx0XHRnb3RvIGRvbmU7XG4rXHRcdFx0XHRpZiAocmVzIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgaW5ldF9kaWFnX2JjX3NrKGNiX2RhdGEsIHNrKSkge1xuK1x0XHRcdFx0XHRyZXMgPSBpbmV0X3NrX2RpYWdfZmlsbChzaywgaW5ldF9jc2soc2spLFxuK1x0XHRcdFx0XHRcdFx0XHRza2IsIGNiLCByLCBOTE1fRl9NVUxUSSxcbitcdFx0XHRcdFx0XHRcdFx0bmV0X2FkbWluKTtcbitcdFx0XHRcdFx0aWYgKHJlcyBcdTAwM2MgMClcbitcdFx0XHRcdFx0XHRudW0gPSBudW1fYXJyW2lkeF07XG4gXHRcdFx0XHR9XG4rcHJvY2Vzc2VkX2xpc3Rlbl9zazpcbitcdFx0XHRcdGlmIChyZXMgXHUwMDNlPSAwKVxuK1x0XHRcdFx0XHR0Y3BfZGlhZ19zYXZlX2N1cnNvcihjYl9kYXRhLFxuK1x0XHRcdFx0XHRcdFx0ICAgICBJTkVUX0RJQUdfRFVNUF9DVVJTT1JfVENQX0xJU1RFTixcbitcdFx0XHRcdFx0XHRcdCAgICAgaSwgc2spO1xuK1x0XHRcdFx0c29ja19wdXQoc2spO1xuK1x0XHRcdH1cbitcdFx0XHRpZiAocmVzIFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBkb25lO1xuIFxuLW5leHRfbGlzdGVuOlxuLVx0XHRcdFx0KytudW07XG4rXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4rXG4rXHRcdFx0aWYgKGFjY3VtID09IFNLQVJSX1NaKSB7XG4rXHRcdFx0XHRzX251bSA9IDA7XG4rXHRcdFx0XHRnb3RvIHJlc3VtZV9saXN0ZW5fd2FsaztcbiBcdFx0XHR9XG4tXHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2aWxiLVx1MDAzZWxvY2spO1xuIFxuK1x0XHRcdGluZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvcihjYl9kYXRhKTtcbiBcdFx0XHRzX251bSA9IDA7XG4gXHRcdH1cbiBza2lwX2xpc3Rlbl9odDpcbitcdFx0aW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKGNiX2RhdGEpO1xuIFx0XHRjYi1cdTAwM2VhcmdzWzBdID0gMTtcbiBcdFx0c19pID0gbnVtID0gc19udW0gPSAwO1xuIFx0fVxuIFxuLS8qIFByb2Nlc3MgYSBtYXhpbXVtIG9mIFNLQVJSX1NaIHNvY2tldHMgYXQgYSB0aW1lIHdoZW4gd2Fsa2luZyBoYXNoIGJ1Y2tldHNcbi0gKiB3aXRoIGJoIGRpc2FibGVkLlxuLSAqL1xuLSNkZWZpbmUgU0tBUlJfU1ogMTZcbi1cbiBcdC8qIER1bXAgYm91bmQgYnV0IGluYWN0aXZlIChub3QgbGlzdGVuaW5nLCBjb25uZWN0aW5nLCBldGMuKSBzb2NrZXRzICovXG4gXHRpZiAoY2ItXHUwMDNlYXJnc1swXSA9PSAxKSB7XG4gXHRcdGlmICghKGlkaWFnX3N0YXRlcyBcdTAwMjYgVENQRl9CT1VORF9JTkFDVElWRSkpXG5AQCAtMzk5LDggKzQ5MywxMCBAQCBzdGF0aWMgdm9pZCB0Y3BfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbiBcdFx0XHRzdHJ1Y3QgaW5ldF9iaW5kX2hhc2hidWNrZXQgKmliYjtcbiBcdFx0XHRzdHJ1Y3QgaW5ldF9iaW5kMl9idWNrZXQgKnRiMjtcbiBcdFx0XHRzdHJ1Y3Qgc29jayAqc2tfYXJyW1NLQVJSX1NaXTtcbitcdFx0XHRzdHJ1Y3Qgc29jayAqY3Vyc29yO1xuIFx0XHRcdGludCBudW1fYXJyW1NLQVJSX1NaXTtcbiBcdFx0XHRpbnQgaWR4LCBhY2N1bSwgcmVzO1xuK1x0XHRcdGJvb2wgdXNlX2N1cnNvcjtcbiBcbiByZXN1bWVfYmluZF93YWxrOlxuIFx0XHRcdG51bSA9IDA7XG5AQCAtNDEyLDM0ICs1MDgsMzggQEAgc3RhdGljIHZvaWQgdGNwX2RpYWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHR9XG4gXHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmliYi1cdTAwM2Vsb2NrKTtcbi1cdFx0XHRpbmV0X2JpbmRfYnVja2V0X2Zvcl9lYWNoKHRiMiwgXHUwMDI2aWJiLVx1MDAzZWNoYWluKSB7XG4tXHRcdFx0XHRpZiAoIW5ldF9lcShpYjJfbmV0KHRiMiksIG5ldCkpXG4tXHRcdFx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRcdFx0c2tfZm9yX2VhY2hfYm91bmQoc2ssIFx1MDAyNnRiMi1cdTAwM2Vvd25lcnMpIHtcbi1cdFx0XHRcdFx0c3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spO1xuLVxuLVx0XHRcdFx0XHRpZiAobnVtIFx1MDAzYyBzX251bSlcbi1cdFx0XHRcdFx0XHRnb3RvIG5leHRfYmluZDtcbi1cbi1cdFx0XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9DTE9TRSB8fFxuLVx0XHRcdFx0XHQgICAgIWluZXQtXHUwMDNlaW5ldF9udW0pXG4tXHRcdFx0XHRcdFx0Z290byBuZXh0X2JpbmQ7XG4tXG4tXHRcdFx0XHRcdGlmIChyLVx1MDAzZXNkaWFnX2ZhbWlseSAhPSBBRl9VTlNQRUMgXHUwMDI2XHUwMDI2XG4tXHRcdFx0XHRcdCAgICByLVx1MDAzZXNkaWFnX2ZhbWlseSAhPSBzay1cdTAwM2Vza19mYW1pbHkpXG4tXHRcdFx0XHRcdFx0Z290byBuZXh0X2JpbmQ7XG4tXG4tXHRcdFx0XHRcdGlmICghaW5ldF9kaWFnX2JjX3NrKGNiX2RhdGEsIHNrKSlcbi1cdFx0XHRcdFx0XHRnb3RvIG5leHRfYmluZDtcbi1cbi1cdFx0XHRcdFx0c29ja19ob2xkKHNrKTtcbi1cdFx0XHRcdFx0bnVtX2FyclthY2N1bV0gPSBudW07XG4tXHRcdFx0XHRcdHNrX2FyclthY2N1bV0gPSBzaztcbi1cdFx0XHRcdFx0aWYgKCsrYWNjdW0gPT0gU0tBUlJfU1opXG4rXHRcdFx0Y3Vyc29yID0gY2JfZGF0YS1cdTAwM2VkdW1wX2N1cnNvcjtcbitcdFx0XHR1c2VfY3Vyc29yID0gY3Vyc29yIFx1MDAyNlx1MDAyNlxuK1x0XHRcdFx0ICAgICBjYl9kYXRhLVx1MDAzZWR1bXBfY3Vyc29yX3R5cGUgPT1cbitcdFx0XHRcdCAgICAgSU5FVF9ESUFHX0RVTVBfQ1VSU09SX1RDUF9CSU5EIFx1MDAyNlx1MDAyNlxuK1x0XHRcdFx0ICAgICBjYl9kYXRhLVx1MDAzZWR1bXBfY3Vyc29yX3Nsb3QgPT0gaSBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdCAgICAgIWhsaXN0X3VuaGFzaGVkKFx1MDAyNmN1cnNvci1cdTAwM2Vza19iaW5kX25vZGUpIFx1MDAyNlx1MDAyNlxuK1x0XHRcdFx0ICAgICBjdXJzb3ItXHUwMDNlc2tfYmluZF9ub2RlLnBwcmV2ICE9IExJU1RfUE9JU09OMiBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdCAgICAgaW5ldF9jc2soY3Vyc29yKS1cdTAwM2VpY3NrX2JpbmQyX2hhc2g7XG4rXHRcdFx0aWYgKHVzZV9jdXJzb3IpIHtcbitcdFx0XHRcdHRiMiA9IGluZXRfY3NrKGN1cnNvciktXHUwMDNlaWNza19iaW5kMl9oYXNoO1xuK1x0XHRcdFx0c2sgPSBjdXJzb3I7XG4rXHRcdFx0XHRpZiAodGNwX2RpYWdfYmluZF9jb2xsZWN0X293bmVyc19jb250aW51ZShzaywgc2tfYXJyLFxuK1x0XHRcdFx0XHRcdFx0XHRcdCAgbnVtX2FycixcbitcdFx0XHRcdFx0XHRcdFx0XHQgIFx1MDAyNmFjY3VtLFxuK1x0XHRcdFx0XHRcdFx0XHRcdCAgXHUwMDI2bnVtKSlcbitcdFx0XHRcdFx0Z290byBwYXVzZV9iaW5kX3dhbGs7XG4rXHRcdFx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZSh0YjIsIG5vZGUpIHtcbitcdFx0XHRcdFx0aWYgKHRjcF9kaWFnX2JpbmRfY29sbGVjdF9vd25lcnMoXHUwMDI2dGIyLVx1MDAzZW93bmVycyxcbitcdFx0XHRcdFx0XHRcdFx0XHQgc2tfYXJyLFxuK1x0XHRcdFx0XHRcdFx0XHRcdCBudW1fYXJyLFxuK1x0XHRcdFx0XHRcdFx0XHRcdCBcdTAwMjZhY2N1bSxcbitcdFx0XHRcdFx0XHRcdFx0XHQgXHUwMDI2bnVtLCAwKSlcbitcdFx0XHRcdFx0XHRnb3RvIHBhdXNlX2JpbmRfd2FsaztcbitcdFx0XHRcdH1cbitcdFx0XHR9IGVsc2Uge1xuK1x0XHRcdFx0aW5ldF9iaW5kX2J1Y2tldF9mb3JfZWFjaCh0YjIsIFx1MDAyNmliYi1cdTAwM2VjaGFpbikge1xuK1x0XHRcdFx0XHRpZiAodGNwX2RpYWdfYmluZF9jb2xsZWN0X293bmVycyhcdTAwMjZ0YjItXHUwMDNlb3duZXJzLFxuK1x0XHRcdFx0XHRcdFx0XHRcdCBza19hcnIsXG4rXHRcdFx0XHRcdFx0XHRcdFx0IG51bV9hcnIsXG4rXHRcdFx0XHRcdFx0XHRcdFx0IFx1MDAyNmFjY3VtLFxuK1x0XHRcdFx0XHRcdFx0XHRcdCBcdTAwMjZudW0sIHNfbnVtKSlcbiBcdFx0XHRcdFx0XHRnb3RvIHBhdXNlX2JpbmRfd2Fsaztcbi1uZXh0X2JpbmQ6XG4tXHRcdFx0XHRcdG51bSsrO1xuIFx0XHRcdFx0fVxuIFx0XHRcdH1cbiBwYXVzZV9iaW5kX3dhbGs6XG5AQCAtNDQ3LDE1ICs1NDcsMzMgQEAgc3RhdGljIHZvaWQgdGNwX2RpYWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG4gXG4gXHRcdFx0cmVzID0gMDtcbiBcdFx0XHRmb3IgKGlkeCA9IDA7IGlkeCBcdTAwM2MgYWNjdW07IGlkeCsrKSB7XG4tXHRcdFx0XHRpZiAocmVzIFx1MDAzZT0gMCkge1xuLVx0XHRcdFx0XHRyZXMgPSBpbmV0X3NrX2RpYWdfZmlsbChza19hcnJbaWR4XSxcbi1cdFx0XHRcdFx0XHRcdFx0TlVMTCwgc2tiLCBjYixcbitcdFx0XHRcdHN0cnVjdCBpbmV0X3NvY2sgKmluZXQ7XG4rXG4rXHRcdFx0XHRzayA9IHNrX2FycltpZHhdO1xuK1x0XHRcdFx0aWYgKCFuZXRfZXEoc29ja19uZXQoc2spLCBuZXQpKVxuK1x0XHRcdFx0XHRnb3RvIHB1dF9iaW5kX3NrO1xuK1xuK1x0XHRcdFx0aW5ldCA9IGluZXRfc2soc2spO1xuK1x0XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9DTE9TRSB8fCAhaW5ldC1cdTAwM2VpbmV0X251bSlcbitcdFx0XHRcdFx0Z290byBwdXRfYmluZF9zaztcbitcbitcdFx0XHRcdGlmIChyLVx1MDAzZXNkaWFnX2ZhbWlseSAhPSBBRl9VTlNQRUMgXHUwMDI2XHUwMDI2XG4rXHRcdFx0XHQgICAgci1cdTAwM2VzZGlhZ19mYW1pbHkgIT0gc2stXHUwMDNlc2tfZmFtaWx5KVxuK1x0XHRcdFx0XHRnb3RvIHB1dF9iaW5kX3NrO1xuK1xuK1x0XHRcdFx0aWYgKHJlcyBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IGluZXRfZGlhZ19iY19zayhjYl9kYXRhLCBzaykpIHtcbitcdFx0XHRcdFx0cmVzID0gaW5ldF9za19kaWFnX2ZpbGwoc2ssIE5VTEwsIHNrYiwgY2IsXG4gXHRcdFx0XHRcdFx0XHRcdHIsIE5MTV9GX01VTFRJLFxuIFx0XHRcdFx0XHRcdFx0XHRuZXRfYWRtaW4pO1xuIFx0XHRcdFx0XHRpZiAocmVzIFx1MDAzYyAwKVxuIFx0XHRcdFx0XHRcdG51bSA9IG51bV9hcnJbaWR4XTtcbiBcdFx0XHRcdH1cbi1cdFx0XHRcdHNvY2tfcHV0KHNrX2FycltpZHhdKTtcbitcdFx0XHRcdGlmIChyZXMgXHUwMDNlPSAwKVxuK1x0XHRcdFx0XHR0Y3BfZGlhZ19zYXZlX2N1cnNvcihjYl9kYXRhLFxuK1x0XHRcdFx0XHRcdFx0ICAgICBJTkVUX0RJQUdfRFVNUF9DVVJTT1JfVENQX0JJTkQsXG4rXHRcdFx0XHRcdFx0XHQgICAgIGksIHNrKTtcbitwdXRfYmluZF9zazpcbitcdFx0XHRcdHNvY2tfcHV0KHNrKTtcbiBcdFx0XHR9XG4gXHRcdFx0aWYgKHJlcyBcdTAwM2MgMClcbiBcdFx0XHRcdGdvdG8gZG9uZTtcbkBAIC00NjMsMTMgKzU4MSwxNSBAQCBzdGF0aWMgdm9pZCB0Y3BfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbiBcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcbiBcdFx0XHRpZiAoYWNjdW0gPT0gU0tBUlJfU1opIHtcbi1cdFx0XHRcdHNfbnVtID0gbnVtICsgMTtcbitcdFx0XHRcdHNfbnVtID0gMDtcbiBcdFx0XHRcdGdvdG8gcmVzdW1lX2JpbmRfd2FsaztcbiBcdFx0XHR9XG4gXG4rXHRcdFx0aW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKGNiX2RhdGEpO1xuIFx0XHRcdHNfbnVtID0gMDtcbiBcdFx0fVxuIHNraXBfYmluZF9odDpcbitcdFx0aW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKGNiX2RhdGEpO1xuIFx0XHRjYi1cdTAwM2VhcmdzWzBdID0gMjtcbiBcdFx0c19pID0gbnVtID0gc19udW0gPSAwO1xuIFx0fVxuQEAgLTQ4Miw0MiArNjAyLDMzIEBAIHN0YXRpYyB2b2lkIHRjcF9kaWFnX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxuIFx0XHRzcGlubG9ja190ICpsb2NrID0gaW5ldF9laGFzaF9sb2NrcChoYXNoaW5mbywgaSk7XG4gXHRcdHN0cnVjdCBobGlzdF9udWxsc19ub2RlICpub2RlO1xuIFx0XHRzdHJ1Y3Qgc29jayAqc2tfYXJyW1NLQVJSX1NaXTtcbitcdFx0c3RydWN0IHNvY2sgKmN1cnNvcjtcbiBcdFx0aW50IG51bV9hcnJbU0tBUlJfU1pdO1xuIFx0XHRpbnQgaWR4LCBhY2N1bSwgcmVzO1xuK1x0XHRib29sIHVzZV9jdXJzb3I7XG4gXG4gXHRcdGlmIChobGlzdF9udWxsc19lbXB0eShcdTAwMjZoZWFkLVx1MDAzZWNoYWluKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0aWYgKGkgXHUwMDNlIHNfaSlcbitcdFx0aWYgKGkgXHUwMDNlIHNfaSkge1xuK1x0XHRcdGluZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvcihjYl9kYXRhKTtcbiBcdFx0XHRzX251bSA9IDA7XG4rXHRcdH1cbiBcbiBuZXh0X2NodW5rOlxuIFx0XHRudW0gPSAwO1xuIFx0XHRhY2N1bSA9IDA7XG4gXHRcdHNwaW5fbG9ja19iaChsb2NrKTtcbi1cdFx0c2tfbnVsbHNfZm9yX2VhY2goc2ssIG5vZGUsIFx1MDAyNmhlYWQtXHUwMDNlY2hhaW4pIHtcbi1cdFx0XHRpbnQgc3RhdGU7XG4tXG4tXHRcdFx0aWYgKCFuZXRfZXEoc29ja19uZXQoc2spLCBuZXQpKVxuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0aWYgKG51bSBcdTAwM2Mgc19udW0pXG4tXHRcdFx0XHRnb3RvIG5leHRfbm9ybWFsO1xuLVx0XHRcdHN0YXRlID0gKHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9USU1FX1dBSVQpID9cbi1cdFx0XHRcdFJFQURfT05DRShpbmV0X3R3c2soc2spLVx1MDAzZXR3X3N1YnN0YXRlKSA6IHNrLVx1MDAzZXNrX3N0YXRlO1xuLVx0XHRcdGlmICghKGlkaWFnX3N0YXRlcyBcdTAwMjYgKDEgXHUwMDNjXHUwMDNjIHN0YXRlKSkpXG4tXHRcdFx0XHRnb3RvIG5leHRfbm9ybWFsO1xuLVx0XHRcdGlmIChyLVx1MDAzZXNkaWFnX2ZhbWlseSAhPSBBRl9VTlNQRUMgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIHNrLVx1MDAzZXNrX2ZhbWlseSAhPSByLVx1MDAzZXNkaWFnX2ZhbWlseSlcbi1cdFx0XHRcdGdvdG8gbmV4dF9ub3JtYWw7XG4tXHRcdFx0aWYgKHItXHUwMDNlaWQuaWRpYWdfc3BvcnQgIT0gaHRvbnMoUkVBRF9PTkNFKHNrLVx1MDAzZXNrX251bSkpIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICByLVx1MDAzZWlkLmlkaWFnX3Nwb3J0KVxuLVx0XHRcdFx0Z290byBuZXh0X25vcm1hbDtcbi1cdFx0XHRpZiAoci1cdTAwM2VpZC5pZGlhZ19kcG9ydCAhPSBzay1cdTAwM2Vza19kcG9ydCBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgci1cdTAwM2VpZC5pZGlhZ19kcG9ydClcbi1cdFx0XHRcdGdvdG8gbmV4dF9ub3JtYWw7XG4tXHRcdFx0dHdza19idWlsZF9hc3NlcnQoKTtcbi1cbi1cdFx0XHRpZiAoIWluZXRfZGlhZ19iY19zayhjYl9kYXRhLCBzaykpXG4rXHRcdGN1cnNvciA9IGNiX2RhdGEtXHUwMDNlZHVtcF9jdXJzb3I7XG4rXHRcdHVzZV9jdXJzb3IgPSBjdXJzb3IgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgICBjYl9kYXRhLVx1MDAzZWR1bXBfY3Vyc29yX3R5cGUgPT1cbitcdFx0XHQgICAgIElORVRfRElBR19EVU1QX0NVUlNPUl9UQ1BfRUhBU0ggXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgICBjYl9kYXRhLVx1MDAzZWR1bXBfY3Vyc29yX3Nsb3QgPT0gaSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgICFobGlzdF9udWxsc191bmhhc2hlZChcdTAwMjZjdXJzb3ItXHUwMDNlc2tfbnVsbHNfbm9kZSkgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgICBjdXJzb3ItXHUwMDNlc2tfbnVsbHNfbm9kZS5wcHJldiAhPSBMSVNUX1BPSVNPTjI7XG4rXHRcdG5vZGUgPSB1c2VfY3Vyc29yID8gY3Vyc29yLVx1MDAzZXNrX251bGxzX25vZGUubmV4dCA6IGhlYWQtXHUwMDNlY2hhaW4uZmlyc3Q7XG4rXHRcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X2Zyb20oc2ssIG5vZGUsIHNrX251bGxzX25vZGUpIHtcbitcdFx0XHRpZiAoIXVzZV9jdXJzb3IgXHUwMDI2XHUwMDI2IG51bSBcdTAwM2Mgc19udW0pXG4gXHRcdFx0XHRnb3RvIG5leHRfbm9ybWFsO1xuIFxuIFx0XHRcdGlmICghcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNnNrLVx1MDAzZXNrX3JlZmNudCkpXG5AQCAtNTM0LDEzICs2NDUsNDIgQEAgc3RhdGljIHZvaWQgdGNwX2RpYWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG4gXG4gXHRcdHJlcyA9IDA7XG4gXHRcdGZvciAoaWR4ID0gMDsgaWR4IFx1MDAzYyBhY2N1bTsgaWR4KyspIHtcbi1cdFx0XHRpZiAocmVzIFx1MDAzZT0gMCkge1xuLVx0XHRcdFx0cmVzID0gc2tfZGlhZ19maWxsKHNrX2FycltpZHhdLCBza2IsIGNiLCByLFxuLVx0XHRcdFx0XHRcdCAgIE5MTV9GX01VTFRJLCBuZXRfYWRtaW4pO1xuK1x0XHRcdGludCBzdGF0ZTtcbitcbitcdFx0XHRzayA9IHNrX2FycltpZHhdO1xuK1x0XHRcdGlmICghbmV0X2VxKHNvY2tfbmV0KHNrKSwgbmV0KSlcbitcdFx0XHRcdGdvdG8gcHV0X2VzdGFiX3NrO1xuK1xuK1x0XHRcdHN0YXRlID0gKHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9USU1FX1dBSVQpID9cbitcdFx0XHRcdFJFQURfT05DRShpbmV0X3R3c2soc2spLVx1MDAzZXR3X3N1YnN0YXRlKSA6IHNrLVx1MDAzZXNrX3N0YXRlO1xuK1x0XHRcdGlmICghKGlkaWFnX3N0YXRlcyBcdTAwMjYgKDEgXHUwMDNjXHUwMDNjIHN0YXRlKSkpXG4rXHRcdFx0XHRnb3RvIHB1dF9lc3RhYl9zaztcbitcbitcdFx0XHRpZiAoci1cdTAwM2VzZGlhZ19mYW1pbHkgIT0gQUZfVU5TUEVDIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICBzay1cdTAwM2Vza19mYW1pbHkgIT0gci1cdTAwM2VzZGlhZ19mYW1pbHkpXG4rXHRcdFx0XHRnb3RvIHB1dF9lc3RhYl9zaztcbitcbitcdFx0XHRpZiAoci1cdTAwM2VpZC5pZGlhZ19zcG9ydCAhPSBodG9ucyhSRUFEX09OQ0Uoc2stXHUwMDNlc2tfbnVtKSkgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgIHItXHUwMDNlaWQuaWRpYWdfc3BvcnQpXG4rXHRcdFx0XHRnb3RvIHB1dF9lc3RhYl9zaztcbitcbitcdFx0XHRpZiAoci1cdTAwM2VpZC5pZGlhZ19kcG9ydCAhPSBzay1cdTAwM2Vza19kcG9ydCBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgci1cdTAwM2VpZC5pZGlhZ19kcG9ydClcbitcdFx0XHRcdGdvdG8gcHV0X2VzdGFiX3NrO1xuK1xuK1x0XHRcdHR3c2tfYnVpbGRfYXNzZXJ0KCk7XG4rXHRcdFx0aWYgKHJlcyBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IGluZXRfZGlhZ19iY19zayhjYl9kYXRhLCBzaykpIHtcbitcdFx0XHRcdHJlcyA9IHNrX2RpYWdfZmlsbChzaywgc2tiLCBjYiwgciwgTkxNX0ZfTVVMVEksXG4rXHRcdFx0XHRcdFx0ICAgbmV0X2FkbWluKTtcbiBcdFx0XHRcdGlmIChyZXMgXHUwMDNjIDApXG4gXHRcdFx0XHRcdG51bSA9IG51bV9hcnJbaWR4XTtcbiBcdFx0XHR9XG4tXHRcdFx0c29ja19nZW5fcHV0KHNrX2FycltpZHhdKTtcbitcdFx0XHRpZiAocmVzIFx1MDAzZT0gMClcbitcdFx0XHRcdHRjcF9kaWFnX3NhdmVfY3Vyc29yKGNiX2RhdGEsXG4rXHRcdFx0XHRcdFx0ICAgICBJTkVUX0RJQUdfRFVNUF9DVVJTT1JfVENQX0VIQVNILFxuK1x0XHRcdFx0XHRcdCAgICAgaSwgc2spO1xuK3B1dF9lc3RhYl9zazpcbitcdFx0XHRzb2NrX2dlbl9wdXQoc2spO1xuIFx0XHR9XG4gXHRcdGlmIChyZXMgXHUwMDNjIDApXG4gXHRcdFx0YnJlYWs7XG5AQCAtNTQ4LDkgKzY4OCwxMSBAQCBzdGF0aWMgdm9pZCB0Y3BfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbiBcdFx0Y29uZF9yZXNjaGVkKCk7XG4gXG4gXHRcdGlmIChhY2N1bSA9PSBTS0FSUl9TWikge1xuLVx0XHRcdHNfbnVtID0gbnVtICsgMTtcbitcdFx0XHRzX251bSA9IDA7XG4gXHRcdFx0Z290byBuZXh0X2NodW5rO1xuIFx0XHR9XG4rXG4rXHRcdGluZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvcihjYl9kYXRhKTtcbiBcdH1cbiBcbiBkb25lOlxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9tcHRjcF9kaWFnLmMgYi9uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jXG5pbmRleCAxMzZjMmQwNWMwZWViLi45ODFlNjQzNDMwMzkwIDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL21wdGNwX2RpYWcuY1xuKysrIGIvbmV0L21wdGNwL21wdGNwX2RpYWcuY1xuQEAgLTYsMTIgKzYsMjUgQEBcbiAgKiBBdXRob3I6IFBhb2xvIEFiZW5pIFx1MDAzY3BhYmVuaUByZWRoYXQuY29tXHUwMDNlXG4gICovXG4gXG4rLyogUHJvY2VzcyBhIGJvdW5kZWQgbnVtYmVyIG9mIGxpc3RlbmVycyBwZXIgYnVja2V0IGxvY2sgaG9sZC4gKi9cbisjZGVmaW5lIE1QVENQX0RJQUdfQlVMS19TWiAxNlxuK1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbmV0X2RpYWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcInByb3RvY29sLmhcIlxuIFxuK3N0YXRpYyB2b2lkIG1wdGNwX2RpYWdfc2F2ZV9jdXJzb3Ioc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEsXG4rXHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgc2xvdCwgc3RydWN0IHNvY2sgKnNrKVxuK3tcbitcdHNvY2tfaG9sZChzayk7XG4rXHRpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3IoY2JfZGF0YSk7XG4rXHRjYl9kYXRhLVx1MDAzZWR1bXBfY3Vyc29yID0gc2s7XG4rXHRjYl9kYXRhLVx1MDAzZWR1bXBfY3Vyc29yX3Nsb3QgPSBzbG90O1xuK1x0Y2JfZGF0YS1cdTAwM2VkdW1wX2N1cnNvcl90eXBlID0gSU5FVF9ESUFHX0RVTVBfQ1VSU09SX01QVENQX0xJU1RFTjtcbit9XG4rXG4gc3RhdGljIGludCBza19kaWFnX2R1bXAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbiBcdFx0XHRjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX3JlcV92MiAqcmVxLFxuQEAgLTc3LDYgKzkwLDcgQEAgc3RhdGljIHZvaWQgbXB0Y3BfZGlhZ19kdW1wX2xpc3RlbmVycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFcbiBcdFx0XHRcdCAgICAgIGJvb2wgbmV0X2FkbWluKVxuIHtcbiBcdHN0cnVjdCBtcHRjcF9kaWFnX2N0eCAqZGlhZ19jdHggPSAodm9pZCAqKWNiLVx1MDAzZWN0eDtcbitcdHN0cnVjdCBpbmV0X2RpYWdfZHVtcF9kYXRhICpjYl9kYXRhID0gY2ItXHUwMDNlZGF0YTtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2Vzayk7XG4gXHRzdHJ1Y3QgaW5ldF9oYXNoaW5mbyAqaGluZm87XG4gXHRpbnQgaTtcbkBAIC04Niw2MiArMTAwLDk4IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2RpYWdfZHVtcF9saXN0ZW5lcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhXG4gXHRmb3IgKGkgPSBkaWFnX2N0eC1cdTAwM2VsX3Nsb3Q7IGkgXHUwMDNjPSBoaW5mby1cdTAwM2VsaGFzaDJfbWFzazsgaSsrKSB7XG4gXHRcdHN0cnVjdCBpbmV0X2xpc3Rlbl9oYXNoYnVja2V0ICppbGI7XG4gXHRcdHN0cnVjdCBobGlzdF9udWxsc19ub2RlICpub2RlO1xuLVx0XHRzdHJ1Y3Qgc29jayAqc2s7XG4tXHRcdGludCBudW0gPSAwO1xuLVxuK1x0XHRzdHJ1Y3Qgc29jayAqdG1wLCAqc2ssICpza19hcnJbTVBUQ1BfRElBR19CVUxLX1NaXTtcbitcdFx0c3RydWN0IHNvY2sgKmN1cnNvcjtcbitcdFx0aW50IGFjY3VtLCBpZHgsIG51bSwgcmV0O1xuK1x0XHRpbnQgbnVtX2FycltNUFRDUF9ESUFHX0JVTEtfU1pdO1xuK1x0XHRib29sIHVzZV9jdXJzb3I7XG4rXG4rcmVzdW1lX2xpc3Rlbl93YWxrOlxuK1x0XHRudW0gPSAwO1xuK1x0XHRhY2N1bSA9IDA7XG4gXHRcdGlsYiA9IFx1MDAyNmhpbmZvLVx1MDAzZWxoYXNoMltpXTtcbitcdFx0cmV0ID0gMDtcbiBcbiBcdFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0XHRzcGluX2xvY2soXHUwMDI2aWxiLVx1MDAzZWxvY2spO1xuLVx0XHRza19udWxsc19mb3JfZWFjaChzaywgbm9kZSwgXHUwMDI2aWxiLVx1MDAzZW51bGxzX2hlYWQpIHtcbi1cdFx0XHRjb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpjdHggPSBtcHRjcF9zdWJmbG93X2N0eChzayk7XG4tXHRcdFx0c3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spO1xuLVx0XHRcdGludCByZXQ7XG4tXG4tXHRcdFx0aWYgKG51bSBcdTAwM2MgZGlhZ19jdHgtXHUwMDNlbF9udW0pXG4tXHRcdFx0XHRnb3RvIG5leHRfbGlzdGVuO1xuLVxuLVx0XHRcdGlmICghY3R4IHx8IHN0cmNtcChpbmV0X2NzayhzayktXHUwMDNlaWNza191bHBfb3BzLVx1MDAzZW5hbWUsIFwibXB0Y3BcIikpXG4tXHRcdFx0XHRnb3RvIG5leHRfbGlzdGVuO1xuLVxuLVx0XHRcdHNrID0gY3R4LVx1MDAzZWNvbm47XG4tXHRcdFx0aWYgKCFzayB8fCAhbmV0X2VxKHNvY2tfbmV0KHNrKSwgbmV0KSlcbi1cdFx0XHRcdGdvdG8gbmV4dF9saXN0ZW47XG4tXG4tXHRcdFx0aWYgKHItXHUwMDNlc2RpYWdfZmFtaWx5ICE9IEFGX1VOU1BFQyBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgc2stXHUwMDNlc2tfZmFtaWx5ICE9IHItXHUwMDNlc2RpYWdfZmFtaWx5KVxuLVx0XHRcdFx0Z290byBuZXh0X2xpc3Rlbjtcbi1cbi1cdFx0XHRpZiAoci1cdTAwM2VpZC5pZGlhZ19zcG9ydCAhPSBpbmV0LVx1MDAzZWluZXRfc3BvcnQgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIHItXHUwMDNlaWQuaWRpYWdfc3BvcnQpXG4rXHRcdGN1cnNvciA9IGNiX2RhdGEtXHUwMDNlZHVtcF9jdXJzb3I7XG4rXHRcdHVzZV9jdXJzb3IgPSBjdXJzb3IgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgICBjYl9kYXRhLVx1MDAzZWR1bXBfY3Vyc29yX3R5cGUgPT1cbitcdFx0XHQgICAgIElORVRfRElBR19EVU1QX0NVUlNPUl9NUFRDUF9MSVNURU4gXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgICBjYl9kYXRhLVx1MDAzZWR1bXBfY3Vyc29yX3Nsb3QgPT0gaSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgICFobGlzdF9udWxsc191bmhhc2hlZChcdTAwMjZjdXJzb3ItXHUwMDNlc2tfbnVsbHNfbm9kZSkgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgICBjdXJzb3ItXHUwMDNlc2tfbnVsbHNfbm9kZS5wcHJldiAhPSBMSVNUX1BPSVNPTjI7XG4rXHRcdG5vZGUgPSB1c2VfY3Vyc29yID8gY3Vyc29yLVx1MDAzZXNrX251bGxzX25vZGUubmV4dCA6XG4rXHRcdFx0XHQgICAgaWxiLVx1MDAzZW51bGxzX2hlYWQuZmlyc3Q7XG4rXHRcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X2Zyb20oc2ssIG5vZGUsIHNrX251bGxzX25vZGUpIHtcbitcdFx0XHRpZiAoIXVzZV9jdXJzb3IgXHUwMDI2XHUwMDI2IG51bSBcdTAwM2MgZGlhZ19jdHgtXHUwMDNlbF9udW0pXG4gXHRcdFx0XHRnb3RvIG5leHRfbGlzdGVuO1xuIFxuIFx0XHRcdGlmICghcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNnNrLVx1MDAzZXNrX3JlZmNudCkpXG4gXHRcdFx0XHRnb3RvIG5leHRfbGlzdGVuO1xuIFxuLVx0XHRcdHJldCA9IHNrX2RpYWdfZHVtcChzaywgc2tiLCBjYiwgciwgbmV0X2FkbWluKTtcbi1cbi1cdFx0XHRzb2NrX3B1dChzayk7XG4tXG4tXHRcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLVx0XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2aWxiLVx1MDAzZWxvY2spO1xuLVx0XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHRcdFx0XHRkaWFnX2N0eC1cdTAwM2VsX3Nsb3QgPSBpO1xuLVx0XHRcdFx0ZGlhZ19jdHgtXHUwMDNlbF9udW0gPSBudW07XG4tXHRcdFx0XHRyZXR1cm47XG4tXHRcdFx0fVxuLVx0XHRcdGRpYWdfY3R4LVx1MDAzZWxfbnVtID0gbnVtICsgMTtcbi1cdFx0XHRudW0gPSAwO1xuK1x0XHRcdG51bV9hcnJbYWNjdW1dID0gbnVtO1xuK1x0XHRcdHNrX2FyclthY2N1bV0gPSBzaztcbitcdFx0XHRpZiAoKythY2N1bSA9PSBNUFRDUF9ESUFHX0JVTEtfU1opXG4rXHRcdFx0XHRicmVhaztcbiBuZXh0X2xpc3RlbjpcbiBcdFx0XHQrK251bTtcbiBcdFx0fVxuIFx0XHRzcGluX3VubG9jayhcdTAwMjZpbGItXHUwMDNlbG9jayk7XG4gXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuK1x0XHRmb3IgKGlkeCA9IDA7IGlkeCBcdTAwM2MgYWNjdW07IGlkeCsrKSB7XG4rXHRcdFx0Y29uc3Qgc3RydWN0IHRjcF91bHBfb3BzICp1bHBfb3BzO1xuK1x0XHRcdGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKmN0eDtcbitcdFx0XHRzdHJ1Y3QgaW5ldF9zb2NrICppbmV0O1xuK1xuK1x0XHRcdHNrID0gc2tfYXJyW2lkeF07XG4rXHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuK1x0XHRcdGN0eCA9IG1wdGNwX3N1YmZsb3dfY3R4KHNrKTtcbitcdFx0XHR1bHBfb3BzID0gUkVBRF9PTkNFKGluZXRfY3NrKHNrKS1cdTAwM2VpY3NrX3VscF9vcHMpO1xuK1x0XHRcdGluZXQgPSBpbmV0X3NrKHNrKTtcbitcdFx0XHR0bXAgPSBjdHggPyBjdHgtXHUwMDNlY29ubiA6IE5VTEw7XG4rXHRcdFx0aWYgKCFjdHggfHwgIXVscF9vcHMgfHwgc3RyY21wKHVscF9vcHMtXHUwMDNlbmFtZSwgXCJtcHRjcFwiKSB8fFxuK1x0XHRcdCAgICAhdG1wIHx8ICFuZXRfZXEoc29ja19uZXQodG1wKSwgbmV0KSB8fFxuK1x0XHRcdCAgICAoci1cdTAwM2VzZGlhZ19mYW1pbHkgIT0gQUZfVU5TUEVDIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICAgdG1wLVx1MDAzZXNrX2ZhbWlseSAhPSByLVx1MDAzZXNkaWFnX2ZhbWlseSkgfHxcbitcdFx0XHQgICAgKHItXHUwMDNlaWQuaWRpYWdfc3BvcnQgIT0gaW5ldC1cdTAwM2VpbmV0X3Nwb3J0IFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICAgci1cdTAwM2VpZC5pZGlhZ19zcG9ydCkgfHxcbitcdFx0XHQgICAgIXJlZmNvdW50X2luY19ub3RfemVybyhcdTAwMjZ0bXAtXHUwMDNlc2tfcmVmY250KSkge1xuK1x0XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRcdFx0XHRnb3RvIHByb2Nlc3NlZF9saXN0ZW5lcl9zaztcbitcdFx0XHR9XG4rXHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2U9IDApIHtcbitcdFx0XHRcdHJldCA9IHNrX2RpYWdfZHVtcCh0bXAsIHNrYiwgY2IsIHIsIG5ldF9hZG1pbik7XG4rXHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0XHRudW0gPSBudW1fYXJyW2lkeF07XG4rXHRcdFx0fVxuK1x0XHRcdHNvY2tfcHV0KHRtcCk7XG4rcHJvY2Vzc2VkX2xpc3RlbmVyX3NrOlxuK1x0XHRcdGlmIChyZXQgXHUwMDNlPSAwKVxuK1x0XHRcdFx0bXB0Y3BfZGlhZ19zYXZlX2N1cnNvcihjYl9kYXRhLCBpLCBzayk7XG4rXHRcdFx0c29ja19wdXQoc2spO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbitcdFx0XHRkaWFnX2N0eC1cdTAwM2VsX3Nsb3QgPSBpO1xuK1x0XHRcdGRpYWdfY3R4LVx1MDAzZWxfbnVtID0gbnVtO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuK1xuIFx0XHRjb25kX3Jlc2NoZWQoKTtcbitcbitcdFx0aWYgKGFjY3VtID09IE1QVENQX0RJQUdfQlVMS19TWikge1xuK1x0XHRcdGRpYWdfY3R4LVx1MDAzZWxfbnVtID0gMDtcbitcdFx0XHRnb3RvIHJlc3VtZV9saXN0ZW5fd2FsaztcbitcdFx0fVxuK1xuK1x0XHRpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3IoY2JfZGF0YSk7XG4gXHRcdGRpYWdfY3R4LVx1MDAzZWxfbnVtID0gMDtcbiBcdH1cbiBcbitcdGluZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvcihjYl9kYXRhKTtcbiBcdGRpYWdfY3R4LVx1MDAzZWxfbnVtID0gMDtcbiBcdGRpYWdfY3R4LVx1MDAzZWxfc2xvdCA9IGk7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTc6NTI6NTEuMzU0MDk4NjkxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzEwMTg0MTYyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXR3b3JraW5nIFN0YWNrIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXTigJlzIHRvdWNoaW5nIHNvbWUgY3J1Y2lhbCBhcmVhcyBvZiB0aGUgbmV0d29ya2luZyBzdGFjazogYGluZXRfZGlhZy5oYCwgYGluZXRfZGlhZy5jYCwgYHRjcF9kaWFnLmNgLCBhbmQgYG1wdGNwX2RpYWcuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgdGhpcyBuZXcgY3Vyc29yIG1lY2hhbmlzbSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgdGNwX2RpYWdgIGFuZCBgbXB0Y3BfZGlhZ2AsIGZvciBkdW1waW5nIHNvY2tldCBpbmZvcm1hdGlvbi4gVGhpcyBpcyBzbWFydDsgdGhleSdyZSBhZGRpbmcgYGR1bXBfY3Vyc29yYCwgYGR1bXBfY3Vyc29yX3Nsb3RgLCBhbmQgYGR1bXBfY3Vyc29yX3R5cGVgIHRvIHRoZSBgc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGFgLiAgVGhhdCdzIHRoZSBrZXkgdG8gbWFraW5nIHRoZSBkdW1waW5nIHByb2Nlc3Mgcm9idXN0LlxuXG5UaGUgcmVhc29uIGZvciB0aGlzIGNoYW5nZSBpcyBjbGVhcjogIHRoZSBjdXJyZW50IG1ldGhvZCB3YXMgcHJvbmUgdG8gZXJyb3JzLiBJdCB3YXMgc2tpcHBpbmcgc29ja2V0cyBiYXNlZCBvbiBhIGNvdW50IChgc19udW1gKSB3aGljaCBpcyBwcm9ibGVtYXRpYyB3aGVuIHRoZSBoYXNoIHRhYmxlIHN0cnVjdHVyZSBpcyBkeW5hbWljLiAgVGhpcyBuZXcgY3Vyc29yIGxldHMgYHRjcF9kaWFnX2R1bXBgIHBpY2sgdXAgKmV4YWN0bHkqIHdoZXJlIGl0IGxlZnQgb2ZmLCBhdm9pZGluZyBib3RoIGR1cGxpY2F0ZWQgYW5kIG1pc3NlZCBzb2NrZXRzLiAgRXhjZWxsZW50LCB0aGF0J3MgYWRkcmVzc2luZyBhIHJlYWwgaXNzdWUuICBBbmQgdGhlIHNhbWUgZml4IGlzIGJlaW5nIGFwcGxpZWQgdG8gYG1wdGNwX2RpYWdfZHVtcF9saXN0ZW5lcnNgLCB3aGljaCBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gdGFrZSB0aGlzLlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgY29yZSBuZXR3b3JrIGNvbXBvbmVudC4gIFJlYWNoYWJpbGl0eSBhbmQgdGVzdGFiaWxpdHkgYXJlIGhpZ2g7IGl0J3MgZGVmaW5pdGVseSBzb21ldGhpbmcgd2UgbmVlZCB0byBmdXp6IHRob3JvdWdobHkuIExldCdzIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGZvY3VzIHNob3VsZCBiZTpcblxuKiAgIEluIGBuZXQvaXB2NC90Y3BfZGlhZy5jYCwgd2UndmUgZ290IGB0Y3BfZGlhZ19kdW1wYCB3aGljaCBpcyB0aGUgZnVuY3Rpb24gdGhhdCByZXF1aXJlcyBzY3J1dGlueS5cbiogICBJbiBgbmV0L21wdGNwL21wdGNwX2RpYWcuY2AsIHdlJ3ZlIGdvdCBgbXB0Y3BfZGlhZ19kdW1wX2xpc3RlbmVyc2AsIHdoaWNoIGlzIGEga2V5IG9uZS4gIEFuZCwgYWx0aG91Z2ggYG1wdGNwX2RpYWdfZHVtcGAgaXNuJ3QgZGlyZWN0bHkgbW9kaWZpZWQsIGl0IGNhbGxzIGBtcHRjcF9kaWFnX2R1bXBfbGlzdGVuZXJzYCwgc28gaXQncyBwcm9iYWJseSB3b3J0aCBhIGxvb2sgaW4gZnV6emluZyBhcyB3ZWxsLCB0byBzZWUgaG93IHRoZSBjdXJzb3IgcHJvcGFnYXRlcy5cblxuTm93LCBsZXQncyBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uIHNldHRpbmdzIGVuYWJsZWQ6IGBDT05GSUdfSU5FVF9ESUFHYCwgYENPTkZJR19UQ1BfRElBR2AsIGFuZCBgQ09ORklHX01QVENQYCBhcmUgYWxsIGdvaW5nIHRvIGJlIHJlcXVpcmVkLCBvYnZpb3VzbHkuICBJJ2xsIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgTVBUQ1AgYW5kIElORVRfRElBRyB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gd2UgaGF2ZW7igJl0IG1pc3NlZCBhbnl0aGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBvdXIgZnV6emluZyBidWlsZHMgYXJlIHNldCB1cCBjb3JyZWN0bHkuIFRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIGltcHJvdmVtZW50IGluIHRoZSBuZXR3b3JrIGRpYWdub3N0aWMgdG9vbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTMwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTc6NTI6NTguNDU1OTQyMzRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3MjIwNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1QVENQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9LY29uZmlnLTEtXFxubmV0L21wdGNwL0tjb25maWc6Mjpjb25maWcgTVBUQ1BcXG5uZXQvbXB0Y3AvS2NvbmZpZy0zLVxcdGJvb2wgXFxcIk1QVENQOiBNdWx0aXBhdGggVENQXFxcIlxcbi0tXFxubmV0L21wdGNwL0tjb25maWc9MTY9Y29uZmlnIElORVRfTVBUQ1BfRElBR1xcbi0tXFxubmV0L21wdGNwL0tjb25maWctMTktXFxubmV0L21wdGNwL0tjb25maWc6MjA6Y29uZmlnIE1QVENQX0lQVjZcXG5uZXQvbXB0Y3AvS2NvbmZpZy0yMS1cXHRib29sIFxcXCJNUFRDUDogSVB2NiBzdXBwb3J0IGZvciBNdWx0aXBhdGggVENQXFxcIlxcbi0tXFxubmV0L21wdGNwL0tjb25maWctMjQtXFxubmV0L21wdGNwL0tjb25maWc6MjU6Y29uZmlnIE1QVENQX0tVTklUX1RFU1RcXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNi1cXHR0cmlzdGF0ZSBcXFwiVGhpcyBidWlsZHMgdGhlIE1QVENQIEtVbml0IHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE3OjUyOjU4LjUwMzY3MDc3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0OTQzMDc4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSU5FVF9NUFRDUF9ESUFHIEludmVzdGlnYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBUaGUgZmlyc3QgdGhvdWdodCBpcyBjbGVhcjogSSBuZWVkIHRvIGludmVzdGlnYXRlIGBJTkVUX01QVENQX0RJQUdgLiBUaGlzIGlzIHdoZXJlIEknZCBpbW1lZGlhdGVseSBmb2N1cywgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgY29udGV4dCBvZiB3aGF0ZXZlciBwcm9ibGVtIG9yIHBlcmZvcm1hbmNlIGFub21hbHkgaXMgYXQgaGFuZC4gSXQncyB0aGUgZGlhZ25vc3RpYyBpbnRlcmZhY2UgZm9yIE11bHRpcGF0aCBUQ1AsIHNvIHRoaXMgaXMgd2hlcmUgSSdkIGdvIHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3IG9mIHRoZSBjdXJyZW50IHN0YXR1cy4gSSdtIHRoaW5raW5nIEknbGwgd2FudCB0byBpbnNwZWN0IHRoZSBjb25uZWN0aW9uIHN0YXRlcywgc3ViZmxvdyBzdGF0aXN0aWNzLCB0aGUgb3ZlcmFsbCBNUFRDUCBjb25maWd1cmF0aW9uLCBhbmQgcG90ZW50aWFsbHkgYW55IGVycm9yIGNvZGVzIG9yIGZsYWdzIHRoYXQgbWlnaHQgYmUgcHJlc2VudC4gTXkgbWluZCBpcyBhbHJlYWR5IHJhY2luZyB0aHJvdWdoIHRoZSBsaWtlbHkgb3V0cHV0IGZpZWxkcyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcga2VybmVsIGNvZGUgSSBtaWdodCBuZWVkIHRvIHJlZmVyIHRvIGlmIHNvbWV0aGluZyBsb29rcyBzdXNwaWNpb3VzLiBJJ20gZXhwZWN0aW5nIHNvbWUgc3BlY2lmaWMgZmllbGRzIGFuZCBhIGdlbmVyYWwgaWRlYSBvZiBob3cgdG8gdXNlIGl0LCBidXQgSSBhbHdheXMgYXBwcm9hY2ggdGhlc2UgY2hlY2tzIHdpdGggYW4gZXhwZWN0YXRpb24gdGhhdCBJIG1pZ2h0IG5lZWQgdG8gY3Jvc3MtcmVmZXJlbmNlIHdpdGggb3RoZXIgdG9vbHMgb3Iga2VybmVsIGRlYnVnZ2luZyB0ZWNobmlxdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTI3OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE3OjUzOjAxLjc1MzEwMzQxN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTc2ODAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU5FVF9NUFRDUF9ESUFHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9LY29uZmlnPTE0PWlmIE1QVENQXFxubmV0L21wdGNwL0tjb25maWctMTUtXFxubmV0L21wdGNwL0tjb25maWc6MTY6Y29uZmlnIElORVRfTVBUQ1BfRElBR1xcbm5ldC9tcHRjcC9LY29uZmlnLTE3LVxcdGRlcGVuZHMgb24gSU5FVF9ESUFHXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE3OjUzOjAxLjc5ODg3NTcwN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyOTI2MDM0NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIERpYWdub3N0aWNzIGluIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IG5ldHdvcmsgZGlhZ25vc3RpY3MgYXJlIGNvbmZpZ3VyZWQgaW4gdGhlIGtlcm5lbC4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIHplcm8gaW4gb24gYG5ldC9pcHY0L0tjb25maWdgLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGludGVybmV0IGRpYWdub3N0aWNzLCBhbmQgZXNwZWNpYWxseSBvcHRpb25zIGNvbmNlcm5pbmcgVENQIGRpYWdub3N0aWNzLiBNeSBwcmltYXJ5IHRhcmdldHMgYXJlIGBjb25maWcgSU5FVF9ESUFHYCBhbmQgYGNvbmZpZyBUQ1BfRElBR2AuIEkgbmVlZCB0byBzZWUgaG93IHRoZXNlIGFyZSBkZWZpbmVkLCB3aGF0IGRlcGVuZGVuY2llcyB0aGV5IGhhdmUsIHdoYXQgdGhlaXIgZGVmYXVsdCB2YWx1ZXMgYXJlLCBhbmQgd2hldGhlciB0aGV5IGFyZSB0cmlzdGF0ZSBvciBib29sZWFuLiBUaGlzIHdpbGwgcHJvdmlkZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaG93IEkgY2FuIGNvbmZpZ3VyZSBhbmQgcG90ZW50aWFsbHkgdHJvdWJsZXNob290IHRoZSBrZXJuZWwncyBuZXR3b3JrIGRpYWdub3N0aWNzIGNhcGFiaWxpdGllcy4gVGhpcyBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBuZXR3b3JrIGRpYWdub3N0aWMgbGFuZHNjYXBlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYzMCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE3OjUzOjA1LjA5MTQ4MTMyNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDEyMTUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU5FVF9ESUFHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz00MTk9Y29uZmlnIElORVRfVFVOTkVMXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTQyMi1cXG5uZXQvaXB2NC9LY29uZmlnOjQyMzpjb25maWcgSU5FVF9ESUFHXFxubmV0L2lwdjQvS2NvbmZpZy00MjQtXFx0dHJpc3RhdGUgXFxcIklORVQ6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9NDQ3PWNvbmZpZyBJTkVUX1JBV19ESUFHXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTQ1NC1cXG5uZXQvaXB2NC9LY29uZmlnOjQ1NTpjb25maWcgSU5FVF9ESUFHX0RFU1RST1lcXG5uZXQvaXB2NC9LY29uZmlnLTQ1Ni1cXHRib29sIFxcXCJJTkVUOiBhbGxvdyBwcml2aWxlZ2VkIHByb2Nlc3MgdG8gYWRtaW5pc3RyYXRpdmVseSBjbG9zZSBzb2NrZXRzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNzo1MzowNS4xMzU2MDY5NTRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzM0OTY4NDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gUXVlcnkqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCB0aGlua2luZyBhYm91dCBUQ1AgZGlhZ25vc3RpY3MuIFdhaXQgYSBtaW51dGUuLi4gV2hhdCBhYm91dCBgY29uZmlnIElORVRfVENQX0RJQUdgPyBUaGlzIGlzIGEgY3JpdGljYWwgY29uZmlndXJhdGlvbiBvcHRpb24sIGlzbid0IGl0PyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgaG93IHRoYXQncyBoYW5kbGVkLCB3aGF0IGltcGxpY2F0aW9ucyBpdCBoYXMgZm9yIHRoZSBkaWFnbm9zdGljIHRvb2xzIHdlIGhhdmUgYXQgb3VyIGRpc3Bvc2FsLiBJcyBpdCBlbmFibGVkPyBEaXNhYmxlZD8gV2hhdCBmZWF0dXJlcyBhcmUgdGllZCB0byB0aGF0IGZsYWcsIGFuZCBob3cgZG9lcyBpdCBpbnRlcmZhY2Ugd2l0aCB0aGUgdmFyaW91cyBuZXRsaW5rIGFuZCBzb2NrZXQgb3B0aW9ucz8gVGhpbmtpbmcgYWJvdXQgaG93IHZhcmlvdXMgYXNwZWN0cyBvZiB0aGUgbmV0d29ya2luZyBzdGFjayB3aWxsIGJlaGF2ZSBkZXBlbmRpbmcgb24gd2hldGhlciB0aGlzIGlzIGVuYWJsZWQuIFRpbWUgdG8gcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgaGVyZS4gSSBjYW4ndCBwcm9jZWVkIHdpdGhvdXQgY2xhcmlmeWluZyB0aGUgc3RhdHVzIG9mIHRoYXQgY29uZmlnIG9wdGlvbi4gSXQncyBmdW5kYW1lbnRhbCB0byB0aGlzIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA2OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE3OjUzOjA5Ljg3MDU3NzUwOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwODI0NzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJTkVUX1RDUF9ESUFHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz00MjM9Y29uZmlnIElORVRfRElBR1xcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MzQtXFxubmV0L2lwdjQvS2NvbmZpZzo0MzU6Y29uZmlnIElORVRfVENQX0RJQUdcXG5uZXQvaXB2NC9LY29uZmlnLTQzNi1cXHRkZXBlbmRzIG9uIElORVRfRElBR1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNzo1MzoxMC4wNTE0MDY2MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTE1MTQ3OTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOZXR3b3JrIERpYWdub3N0aWNzIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkgc2VlIHdlJ3JlIGRlYWxpbmcgd2l0aCBuZXR3b3JrIGRpYWdub3N0aWNzLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBUQ1AgYW5kIE1QVENQLiBUaGUga2V5IGNvbmZpZ3VyYXRpb25zIEknbSBjb25zaWRlcmluZyBhcmUgYElORVRfRElBR2AsIGBJTkVUX1RDUF9ESUFHYCwgYE1QVENQYCwgYW5kIGBJTkVUX01QVENQX0RJQUdgLiBUaGVzZSBmbGFncyBsaWtlbHkgY29udHJvbCB0aGUgaW5jbHVzaW9uIG9yIGV4Y2x1c2lvbiBvZiBjZXJ0YWluIGRpYWdub3N0aWMgZmVhdHVyZXMgd2l0aGluIHRoZSBrZXJuZWwuIE15IHByaW1hcnkgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gdGhlIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSB0aGUgYWN0dWFsIGRhdGEgZHVtcGluZyDigJMgdGhlIGhlYXJ0IG9mIHRoZSBkaWFnbm9zdGljcy5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdlJ3JlIGV4dHJhY3RpbmcgYW5kIHByZXNlbnRpbmcgdGhpcyBpbmZvcm1hdGlvbi4gVGhlIGZ1bmN0aW9ucyBoaWdobGlnaHRlZCBhcmUgYHRjcF9kaWFnX2R1bXBgLCBgbXB0Y3BfZGlhZ19kdW1wX2xpc3RlbmVyc2AsIGFuZCBgbXB0Y3BfZGlhZ19kdW1wYC4gYG1wdGNwX2RpYWdfZHVtcGAgc2VlbXMgdG8gYmUgdGhlIGNlbnRyYWwgZW50cnkgcG9pbnQgZm9yIGFsbCB0aGluZ3MgTVBUQ1AtcmVsYXRlZC5cblxuTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBxdWlja2x5IGNvbmZpcm0gdGhlIGV4aXN0ZW5jZSBhbmQgc3RydWN0dXJlIG9mIHRoaXMgYG1wdGNwX2RpYWdfZHVtcGAgZnVuY3Rpb24uIEkgd2FudCB0byBlbnN1cmUgaXTigJlzIHRoZXJlIGFuZCBnZXQgYSBoYW5kbGUgb24gaXRzIGlucHV0cywgb3V0cHV0cywgYW5kIG92ZXJhbGwgcHVycG9zZS4gVGhpcyBpcyB0aGUgbHluY2hwaW4gSSB3aWxsIHN0YXJ0IHdpdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzg1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE3OjUzOjEzLjk2NjU1NjU1M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI3OTQxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3BfZGlhZ19kdW1wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9tcHRjcF9kaWFnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL21wdGNwX2RpYWcuYz0yOD1zdGF0aWMgaW50IHNrX2RpYWdfZHVtcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jLTM5LVxcbm5ldC9tcHRjcC9tcHRjcF9kaWFnLmM6NDA6c3RhdGljIGludCBtcHRjcF9kaWFnX2R1bXBfb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcXG5uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jLTQxLVxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX3JlcV92MiAqcmVxKVxcbi0tXFxubmV0L21wdGNwL21wdGNwX2RpYWcuYz04MT1zdHJ1Y3QgbXB0Y3BfZGlhZ19jdHgge1xcbi0tXFxubmV0L21wdGNwL21wdGNwX2RpYWcuYy04Ny1cXG5uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jOjg4OnN0YXRpYyB2b2lkIG1wdGNwX2RpYWdfZHVtcF9saXN0ZW5lcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxcbm5ldC9tcHRjcC9tcHRjcF9kaWFnLmMtODktXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGluZXRfZGlhZ19yZXFfdjIgKnIsXFxuLS1cXG5uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jLTE5OC1cXG5uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jOjE5OTpzdGF0aWMgdm9pZCBtcHRjcF9kaWFnX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxcbm5ldC9tcHRjcC9tcHRjcF9kaWFnLmMtMjAwLVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX3JlcV92MiAqcilcXG4tLVxcbm5ldC9tcHRjcC9tcHRjcF9kaWFnLmMtMjM4LVxcdGlmICgoci1cXHUwMDNlaWRpYWdfc3RhdGVzIFxcdTAwMjYgVENQRl9MSVNURU4pIFxcdTAwMjZcXHUwMDI2IHItXFx1MDAzZWlkLmlkaWFnX2Rwb3J0ID09IDApXFxubmV0L21wdGNwL21wdGNwX2RpYWcuYzoyMzk6XFx0XFx0bXB0Y3BfZGlhZ19kdW1wX2xpc3RlbmVycyhza2IsIGNiLCByLCBuZXRfYWRtaW4pO1xcbm5ldC9tcHRjcC9tcHRjcF9kaWFnLmMtMjQwLX1cXG4tLVxcbm5ldC9tcHRjcC9tcHRjcF9kaWFnLmM9MjcwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2hhbmRsZXIgbXB0Y3BfZGlhZ19oYW5kbGVyID0ge1xcbm5ldC9tcHRjcC9tcHRjcF9kaWFnLmMtMjcxLVxcdC5vd25lclxcdFxcdCA9IFRISVNfTU9EVUxFLFxcbm5ldC9tcHRjcC9tcHRjcF9kaWFnLmM6MjcyOlxcdC5kdW1wXFx0XFx0ID0gbXB0Y3BfZGlhZ19kdW1wLFxcbm5ldC9tcHRjcC9tcHRjcF9kaWFnLmM6MjczOlxcdC5kdW1wX29uZVxcdCA9IG1wdGNwX2RpYWdfZHVtcF9vbmUsXFxubmV0L21wdGNwL21wdGNwX2RpYWcuYy0yNzQtXFx0LmlkaWFnX2dldF9pbmZvICA9IG1wdGNwX2RpYWdfZ2V0X2luZm8sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE3OjUzOjE0LjAwOTM1MjY2NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzM2MzU5NjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBEaWFnbm9zdGljIEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhlc2UgZGlhZ25vc3RpYyBmdW5jdGlvbnMuIFdlIGhhdmUgYHRjcF9kaWFnX2R1bXBgLCBgbXB0Y3BfZGlhZ19kdW1wYCwgYW5kIGBtcHRjcF9kaWFnX2R1bXBfbGlzdGVuZXJzYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gaW52ZXN0aWdhdGUgdGhlIHNjb3BlIG9mIGB0Y3BfZGlhZ19kdW1wYC4gSXMgaXQgZGVjbGFyZWQgYHN0YXRpY2A/IFRoYXQgd291bGQgaW5mbHVlbmNlIGhvdyBhbmQgd2hlcmUgaXQgY2FuIGJlIGNhbGxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHZpc2liaWxpdHkgd2l0aGluIHRoZSBtb2R1bGUsIHNpbmNlIHRoaXMgYWZmZWN0cyBob3cgZWFzaWx5IGl0IGNhbiBiZSBpbnRlZ3JhdGVkIHdpdGggb3RoZXIgc3lzdGVtcyBvciBkZWJ1Z2dpbmcgdG9vbHMuIEtub3dpbmcgaXRzIHNjb3BlIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGludGVuZGVkIHVzZSBjYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQyNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE3OjUzOjE3LjM0NTcxNDM5OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM0MjI3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX2RpYWdfZHVtcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3BfZGlhZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcF9kaWFnLmM9MzQ3PXN0YXRpYyB2b2lkIHR3c2tfYnVpbGRfYXNzZXJ0KHZvaWQpXFxuLS1cXG5uZXQvaXB2NC90Y3BfZGlhZy5jLTM3Mi1cXG5uZXQvaXB2NC90Y3BfZGlhZy5jOjM3MzpzdGF0aWMgdm9pZCB0Y3BfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcXG5uZXQvaXB2NC90Y3BfZGlhZy5jLTM3NC1cXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfcmVxX3YyICpyKVxcbi0tXFxubmV0L2lwdjQvdGNwX2RpYWcuYz03MDU9c3RhdGljIHN0cnVjdCBzb2NrICp0Y3BfZGlhZ19maW5kX29uZV9pY3NrKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9pcHY0L3RjcF9kaWFnLmMtNzQ1LVxcbm5ldC9pcHY0L3RjcF9kaWFnLmM6NzQ2OnN0YXRpYyBpbnQgdGNwX2RpYWdfZHVtcF9vbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxcbm5ldC9pcHY0L3RjcF9kaWFnLmMtNzQ3LVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGluZXRfZGlhZ19yZXFfdjIgKnJlcSlcXG4tLVxcbm5ldC9pcHY0L3RjcF9kaWFnLmM9ODAzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2hhbmRsZXIgdGNwX2RpYWdfaGFuZGxlciA9IHtcXG5uZXQvaXB2NC90Y3BfZGlhZy5jLTgwNC1cXHQub3duZXJcXHRcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbm5ldC9pcHY0L3RjcF9kaWFnLmM6ODA1OlxcdC5kdW1wXFx0XFx0XFx0PSB0Y3BfZGlhZ19kdW1wLFxcbm5ldC9pcHY0L3RjcF9kaWFnLmM6ODA2OlxcdC5kdW1wX29uZVxcdFxcdD0gdGNwX2RpYWdfZHVtcF9vbmUsXFxubmV0L2lwdjQvdGNwX2RpYWcuYy04MDctXFx0LmlkaWFnX2dldF9pbmZvXFx0XFx0PSB0Y3BfZGlhZ19nZXRfaW5mbyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTc6NTM6MTcuMzg5MTM5NTk5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxODQ3MDA4NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwncyBEaWFnbm9zdGljIEZ1bmN0aW9uIENhbGxzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZGlhZ25vc3RpYyBmdW5jdGlvbnMuIEkgaW5pdGlhbGx5IGNvbnNpZGVyZWQgdGhlbSBhcyBzdGF0aWMsIGJ1dCB0aGVuIEkgcmVtZW1iZXJlZCB0aGV5IGFyZSByZWdpc3RlcmVkIHdpdGhpbiB0aGUgYGluZXRfZGlhZ19oYW5kbGVyYCBzdHJ1Y3R1cmUuIFRoYXQgc2hpZnRzIHRoaW5ncy5cblxuQWxyaWdodCwgbGV0IG1lIGxpc3QgdGhlbSBhbnl3YXkuIEl0J3MgZ29vZCB0byBrZWVwIHRoaW5ncyBjbGVhciwgZXNwZWNpYWxseSBhcyB0aGVzZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkLlxuXG5XYWl0IGEgc2Vjb25kLiBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSB3YW50cyBtZSB0byBwcmlvcml0aXplIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhhdCBtYWtlcyBzZW5zZSwgYXZvaWRpbmcgdGhvc2UgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgaW5saW5lZCBoZWxwZXIgZnVuY3Rpb25zLlxuXG5SaWdodCwgYHRjcF9kaWFnX2R1bXBgIGFuZCBgbXB0Y3BfZGlhZ19kdW1wYC4gRXhjZWxsZW50LiBUaGV5IGFyZSBhc3NpZ25lZCB0byBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gYSBzdHJ1Y3QsIG1lYW5pbmcgdGhleSB3b24ndCBiZSBpbmxpbmVkLiBUaGVpciBzeW1ib2wgYWRkcmVzc2VzIHdpbGwgYmUgZGlzdGluY3QuIFRoYXQgbWFrZXMgdGhlbSBwZXJmZWN0IGVudHJ5IHBvaW50cyBmb3IgdGhlIGR1bXBpbmcgcHJvY2Vzcy5cblxuTm93IGxldCdzIHZlcmlmeSBgaW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yYC4gQWgsIGl0J3MgZXhwb3J0ZWQhIE5vbi1zdGF0aWMsIGNvbmZpcm1lZC4gR29vZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQwMzQsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTc6NTM6MjIuNTczODQyODM0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDYwNDk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaW5ldF9kaWFnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaW5ldF9kaWFnLmM9ODg5PXN0YXRpYyBpbnQgaW5ldF9kaWFnX2R1bXBfc3RhcnRfY29tcGF0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTg5My1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo4OTQ6dm9pZCBpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3Ioc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEpXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtODk1LXtcXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTkwMy19XFxubmV0L2lwdjQvaW5ldF9kaWFnLmM6OTA0OkVYUE9SVF9TWU1CT0xfR1BMKGluZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvcik7XFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtOTA1LVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jPTkwNj1zdGF0aWMgaW50IGluZXRfZGlhZ19kdW1wX2RvbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtOTA5LVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjkxMDpcXHRpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3IoY2JfZGF0YSk7XFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtOTExLVxcdGJwZl9za19zdG9yYWdlX2RpYWdfZnJlZShjYl9kYXRhLVxcdTAwM2VicGZfc3RnX2RpYWcpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNzo1MzoyMi42MTg0NTMzMDRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY3MTE1NTk5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRpYWdub3N0aWMgRHVtcCBDb25zaWRlcmF0aW9ucyoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZXNlIGZ1bmN0aW9uczogYHRjcF9kaWFnX2R1bXBgLCBgbXB0Y3BfZGlhZ19kdW1wX2xpc3RlbmVyc2AsIGFuZCBgaW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yYC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUgY29yZSByb3V0aW5lcyBpbnZvbHZlZCBpbiB3aGF0ZXZlciBkaWFnbm9zdGljIGZ1bmN0aW9uYWxpdHkgd2UncmUgZGVhbGluZyB3aXRoLiBLbm93aW5nIHdoYXQgdGhleSdyZSBkb2luZyBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHdob2xlIHBpY3R1cmUuXG5cbk5vdywgYXMgZm9yIHRoZSBjb25maWd1cmF0aW9ucyB0aGF0IGNvbnRyb2wgYWxsIHRoaXMsIEkgc2VlIGEgY2xlYXIgc2V0OiBgSU5FVF9ESUFHYCwgYElORVRfVENQX0RJQUdgLCBgTVBUQ1BgLCBhbmQgYElORVRfTVBUQ1BfRElBR2AuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9ucyBhcmUgc2V0IGluIG9yZGVyIHRvIGVuc3VyZSB0aGUgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUuXG5cbkl0J3MgYWx3YXlzIGEgZ29vZCBwcmFjdGljZSB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlncyBpbiBwbGF5LiBMZXQncyBzZWUuLi4gbG9va2luZyBhdCB0aGUgZGV0YWlscywgYENPTkZJR19JTkVUX0RJQUdgIGFuZCBgQ09ORklHX0lORVRfVENQX0RJQUdgIGFyZSB0cmlzdGF0ZSwgbWVhbmluZyB0aGV5IGNhbiBiZSBlbmFibGVkIGFzIGEgbW9kdWxlLCBidWlsdC1pbiwgb3IgZGlzYWJsZWQuIGBDT05GSUdfTVBUQ1BgIGlzIGEgc2ltcGxlIGJvb2xlYW47IGVpdGhlciBpdCdzIGVuYWJsZWQgb3IgZGlzYWJsZWQuIEFuZCBmaW5hbGx5LCBgQ09ORklHX0lORVRfTVBUQ1BfRElBR2AgaXMgYW5vdGhlciB0cmlzdGF0ZS5cblxuSSd2ZSBnb3QgdGhlIHBpZWNlcyBmaWd1cmVkIG91dCBhbmQgSSdsbCBub3cgc2V0IHRoZSBjb3JyZXNwb25kaW5nIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgYWNjb3JkaW5nbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzUwLCJPdXRwdXRUb2tlbnMiOjE2NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNzo1MzoyOC4yODk2MTE0ODhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDc4NzM2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVF9ESUFHXCIsXG4gICAgXCJJTkVUX1RDUF9ESUFHXCIsXG4gICAgXCJNUFRDUFwiLFxuICAgIFwiSU5FVF9NUFRDUF9ESUFHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX2RpYWdfZHVtcFwiLFxuICAgIFwibXB0Y3BfZGlhZ19kdW1wX2xpc3RlbmVyc1wiLFxuICAgIFwiaW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGN1cnNvciBtZWNoYW5pc20gZm9yIGR1bXBpbmcgVENQIGFuZCBNUFRDUCBzb2NrZXRzIHZpYSB0aGUgaW5ldF9kaWFnIG5ldGxpbmsgaW50ZXJmYWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayB0aGF0IGFmZmVjdHMgaG93IHNvY2tldHMgYXJlIGl0ZXJhdGVkIGFuZCBkdW1wZWQsIHByZXZlbnRpbmcgZHVwbGljYXRlcyBvciBtaXNzZWQgc29ja2V0cyB3aGVuIHRoZSBoYXNoIHRhYmxlIGNoYW5nZXMgZHVyaW5nIHRoZSBkdW1wLiBJdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRfRElBR1wiLFxuICAgIFwiSU5FVF9UQ1BfRElBR1wiLFxuICAgIFwiTVBUQ1BcIixcbiAgICBcIklORVRfTVBUQ1BfRElBR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF9kaWFnX2R1bXBcIixcbiAgICBcIm1wdGNwX2RpYWdfZHVtcF9saXN0ZW5lcnNcIixcbiAgICBcImluZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBjdXJzb3IgbWVjaGFuaXNtIGZvciBkdW1waW5nIFRDUCBhbmQgTVBUQ1Agc29ja2V0cyB2aWEgdGhlIGluZXRfZGlhZyBuZXRsaW5rIGludGVyZmFjZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgdGhhdCBhZmZlY3RzIGhvdyBzb2NrZXRzIGFyZSBpdGVyYXRlZCBhbmQgZHVtcGVkLCBwcmV2ZW50aW5nIGR1cGxpY2F0ZXMgb3IgbWlzc2VkIHNvY2tldHMgd2hlbiB0aGUgaGFzaCB0YWJsZSBjaGFuZ2VzIGR1cmluZyB0aGUgZHVtcC4gSXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbmV0bGluayBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflown7h9z[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-30 17:30:06 +0000 UTC FinishedAt: 2026-07-30 17:53:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "451c9075d6c53f2438d110addbeeeea6fac18567", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET_DIAG", "INET_TCP_DIAG", "MPTCP", "INET_MPTCP_DIAG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "451c9075d6c53f2438d110addbeeeea6fac18567", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET_DIAG", "INET_TCP_DIAG", "MPTCP", "INET_MPTCP_DIAG" ], "series_id": "226acf33-fa5d-40f1-bdad-1c5a96a3187a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tcp_diag_dump", "mptcp_diag_dump_listeners", "inet_diag_dump_clear_cursor" ], "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+CgkJCTx0ZD4yMDI2LzA3LzMwIDE3OjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVRfRElBRyYjMzQ7LAogICAgJiMzNDtJTkVUX1RDUF9ESUFHJiMzNDssCiAgICAmIzM0O01QVENQJiMzNDssCiAgICAmIzM0O0lORVRfTVBUQ1BfRElBRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF9kaWFnX2R1bXAmIzM0OywKICAgICYjMzQ7bXB0Y3BfZGlhZ19kdW1wX2xpc3RlbmVycyYjMzQ7LAogICAgJiMzNDtpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGN1cnNvciBtZWNoYW5pc20gZm9yIGR1bXBpbmcgVENQIGFuZCBNUFRDUCBzb2NrZXRzIHZpYSB0aGUgaW5ldF9kaWFnIG5ldGxpbmsgaW50ZXJmYWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayB0aGF0IGFmZmVjdHMgaG93IHNvY2tldHMgYXJlIGl0ZXJhdGVkIGFuZCBkdW1wZWQsIHByZXZlbnRpbmcgZHVwbGljYXRlcyBvciBtaXNzZWQgc29ja2V0cyB3aGVuIHRoZSBoYXNoIHRhYmxlIGNoYW5nZXMgZHVyaW5nIHRoZSBkdW1wLiBJdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE3OjUyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjI5YTMxNTE5ZGNlZTJiY2Q1OWZmZTJkYTRkMjVkMTZiYWU2OWRiN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDMwIDE3OjUyOjUwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5ldF9kaWFnLmggYi9pbmNsdWRlL2xpbnV4L2luZXRfZGlhZy5oXG5pbmRleCA3MDRmZDQxNWMyYjQ5Li40ODU5ZTc3YTI4YzdhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9pbmV0X2RpYWcuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9pbmV0X2RpYWcuaFxuQEAgLTYsNiAmIzQzOzYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvaW5ldF9kaWFnLmhcdTAwM2VcbiBcbiBzdHJ1Y3QgaW5ldF9oYXNoaW5mbztcbiYjNDM7c3RydWN0IHNvY2s7XG4gXG4gc3RydWN0IGluZXRfZGlhZ19oYW5kbGVyIHtcbiBcdHN0cnVjdCBtb2R1bGVcdCpvd25lcjtcbkBAIC0zMiwxMiAmIzQzOzMzLDI0IEBAIHN0cnVjdCBpbmV0X2RpYWdfaGFuZGxlciB7XG4gfTtcbiBcbiBzdHJ1Y3QgYnBmX3NrX3N0b3JhZ2VfZGlhZztcbiYjNDM7XG4mIzQzO2VudW0gaW5ldF9kaWFnX2R1bXBfY3Vyc29yX3R5cGUge1xuJiM0MztcdElORVRfRElBR19EVU1QX0NVUlNPUl9OT05FLFxuJiM0MztcdElORVRfRElBR19EVU1QX0NVUlNPUl9UQ1BfTElTVEVOLFxuJiM0MztcdElORVRfRElBR19EVU1QX0NVUlNPUl9UQ1BfQklORCxcbiYjNDM7XHRJTkVUX0RJQUdfRFVNUF9DVVJTT1JfVENQX0VIQVNILFxuJiM0MztcdElORVRfRElBR19EVU1QX0NVUlNPUl9NUFRDUF9MSVNURU4sXG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCBpbmV0X2RpYWdfZHVtcF9kYXRhIHtcbiBcdHN0cnVjdCBubGF0dHIgKnJlcV9ubGFzW19fSU5FVF9ESUFHX1JFUV9NQVhdO1xuICNkZWZpbmUgaW5ldF9kaWFnX25sYV9iYyByZXFfbmxhc1tJTkVUX0RJQUdfUkVRX0JZVEVDT0RFXVxuICNkZWZpbmUgaW5ldF9kaWFnX25sYV9icGZfc3RncyByZXFfbmxhc1tJTkVUX0RJQUdfUkVRX1NLX0JQRl9TVE9SQUdFU11cbiBcbiBcdHN0cnVjdCBicGZfc2tfc3RvcmFnZV9kaWFnICpicGZfc3RnX2RpYWc7XG4mIzQzO1x0c3RydWN0IHNvY2sgKmR1bXBfY3Vyc29yO1xuJiM0MztcdHVuc2lnbmVkIGludCBkdW1wX2N1cnNvcl9zbG90O1xuJiM0MztcdHU4IGR1bXBfY3Vyc29yX3R5cGU7XG4gXHRib29sIG1hcmtfbmVlZGVkO1x0LyogSU5FVF9ESUFHX0JDX01BUktfQ09ORCBwcmVzZW50LiAqL1xuICNpZmRlZiBDT05GSUdfU09DS19DR1JPVVBfREFUQVxuIFx0Ym9vbCBjZ3JvdXBfbmVlZGVkO1x0LyogSU5FVF9ESUFHX0JDX0NHUk9VUF9DT05EIHByZXNlbnQuICovXG5AQCAtNTMsNiAmIzQzOzY2LDggQEAgaW50IGluZXRfc2tfZGlhZ19maWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrLFxuIFxuIGludCBpbmV0X2RpYWdfYmNfc2soY29uc3Qgc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEsIHN0cnVjdCBzb2NrICpzayk7XG4gXG4mIzQzO3ZvaWQgaW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKHN0cnVjdCBpbmV0X2RpYWdfZHVtcF9kYXRhICpjYl9kYXRhKTtcbiYjNDM7XG4gdm9pZCBpbmV0X2RpYWdfbXNnX2NvbW1vbl9maWxsKHN0cnVjdCBpbmV0X2RpYWdfbXNnICpyLCBzdHJ1Y3Qgc29jayAqc2spO1xuIFxuIHN0YXRpYyBpbmxpbmUgc2l6ZV90IGluZXRfZGlhZ19tc2dfYXR0cnNfc2l6ZSh2b2lkKVxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRfZGlhZy5jIGIvbmV0L2lwdjQvaW5ldF9kaWFnLmNcbmluZGV4IDM0Yjc3YWE4N2QwYTQuLjQxMTQ4ZTg4MDA1NDUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pbmV0X2RpYWcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaW5ldF9kaWFnLmNcbkBAIC04OTEsMTAgJiM0Mzs4OTEsMjMgQEAgc3RhdGljIGludCBpbmV0X2RpYWdfZHVtcF9zdGFydF9jb21wYXQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIFx0cmV0dXJuIF9faW5ldF9kaWFnX2R1bXBfc3RhcnQoY2IsIHNpemVvZihzdHJ1Y3QgaW5ldF9kaWFnX3JlcSkpO1xuIH1cbiBcbiYjNDM7dm9pZCBpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3Ioc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWNiX2RhdGEtXHUwMDNlZHVtcF9jdXJzb3IpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHNvY2tfZ2VuX3B1dChjYl9kYXRhLVx1MDAzZWR1bXBfY3Vyc29yKTtcbiYjNDM7XHRjYl9kYXRhLVx1MDAzZWR1bXBfY3Vyc29yID0gTlVMTDtcbiYjNDM7XHRjYl9kYXRhLVx1MDAzZWR1bXBfY3Vyc29yX3Nsb3QgPSAwO1xuJiM0MztcdGNiX2RhdGEtXHUwMDNlZHVtcF9jdXJzb3JfdHlwZSA9IElORVRfRElBR19EVU1QX0NVUlNPUl9OT05FO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGluZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvcik7XG4mIzQzO1xuIHN0YXRpYyBpbnQgaW5ldF9kaWFnX2R1bXBfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4ge1xuIFx0c3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEgPSBjYi1cdTAwM2VkYXRhO1xuIFxuJiM0MztcdGluZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvcihjYl9kYXRhKTtcbiBcdGJwZl9za19zdG9yYWdlX2RpYWdfZnJlZShjYl9kYXRhLVx1MDAzZWJwZl9zdGdfZGlhZyk7XG4gXHRrZnJlZShjYi1cdTAwM2VkYXRhKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfZGlhZy5jIGIvbmV0L2lwdjQvdGNwX2RpYWcuY1xuaW5kZXggYmExZmRiZTk4MDdmZC4uYmUwYzIyY2M0NDViMiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9kaWFnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9kaWFnLmNcbkBAIC0yODUsNiAmIzQzOzI4NSw2NSBAQCBzdGF0aWMgaW50IHNrX2RpYWdfZmlsbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHQgbmV0X2FkbWluKTtcbiB9XG4gXG4mIzQzOy8qIFByb2Nlc3MgYSBtYXhpbXVtIG9mIFNLQVJSX1NaIHNvY2tldHMgYXQgYSB0aW1lIHdoZW4gd2Fsa2luZyBoYXNoIGJ1Y2tldHNcbiYjNDM7ICogd2l0aCBiaCBkaXNhYmxlZC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgU0tBUlJfU1ogMTZcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRjcF9kaWFnX3NhdmVfY3Vyc29yKHN0cnVjdCBpbmV0X2RpYWdfZHVtcF9kYXRhICpjYl9kYXRhLCBpbnQgdHlwZSxcbiYjNDM7XHRcdFx0XHQgdW5zaWduZWQgaW50IHNsb3QsIHN0cnVjdCBzb2NrICpzaylcbiYjNDM7e1xuJiM0MztcdHNvY2tfaG9sZChzayk7XG4mIzQzO1x0aW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKGNiX2RhdGEpO1xuJiM0MztcdGNiX2RhdGEtXHUwMDNlZHVtcF9jdXJzb3IgPSBzaztcbiYjNDM7XHRjYl9kYXRhLVx1MDAzZWR1bXBfY3Vyc29yX3Nsb3QgPSBzbG90O1xuJiM0MztcdGNiX2RhdGEtXHUwMDNlZHVtcF9jdXJzb3JfdHlwZSA9IHR5cGU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHRjcF9kaWFnX2JpbmRfY29sbGVjdF9zb2NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKipza19hcnIsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGludCAqbnVtX2FyciwgaW50ICphY2N1bSwgaW50IG51bSlcbiYjNDM7e1xuJiM0MztcdHNvY2tfaG9sZChzayk7XG4mIzQzO1x0bnVtX2FyclsqYWNjdW1dID0gbnVtO1xuJiM0MztcdHNrX2FyclsqYWNjdW1dID0gc2s7XG4mIzQzO1xuJiM0MztcdHJldHVybiAmIzQzOyYjNDM7KmFjY3VtID09IFNLQVJSX1NaO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCB0Y3BfZGlhZ19iaW5kX2NvbGxlY3Rfb3duZXJzKHN0cnVjdCBobGlzdF9oZWFkICpvd25lcnMsXG4mIzQzO1x0XHRcdFx0XHQgc3RydWN0IHNvY2sgKipza19hcnIsIGludCAqbnVtX2FycixcbiYjNDM7XHRcdFx0XHRcdCBpbnQgKmFjY3VtLCBpbnQgKm51bSwgaW50IHNfbnVtKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNvY2sgKnNrO1xuJiM0MztcbiYjNDM7XHRza19mb3JfZWFjaF9ib3VuZChzaywgb3duZXJzKSB7XG4mIzQzO1x0XHRpZiAoKm51bSBcdTAwM2Mgc19udW0pIHtcbiYjNDM7XHRcdFx0KCpudW0pJiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKHRjcF9kaWFnX2JpbmRfY29sbGVjdF9zb2NrKHNrLCBza19hcnIsIG51bV9hcnIsIGFjY3VtLCAqbnVtKSlcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHQoKm51bSkmIzQzOyYjNDM7O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCB0Y3BfZGlhZ19iaW5kX2NvbGxlY3Rfb3duZXJzX2NvbnRpbnVlKHN0cnVjdCBzb2NrICpzayxcbiYjNDM7XHRcdFx0XHRcdFx0ICBzdHJ1Y3Qgc29jayAqKnNrX2FycixcbiYjNDM7XHRcdFx0XHRcdFx0ICBpbnQgKm51bV9hcnIsIGludCAqYWNjdW0sXG4mIzQzO1x0XHRcdFx0XHRcdCAgaW50ICpudW0pXG4mIzQzO3tcbiYjNDM7XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZShzaywgc2tfYmluZF9ub2RlKSB7XG4mIzQzO1x0XHRpZiAodGNwX2RpYWdfYmluZF9jb2xsZWN0X3NvY2soc2ssIHNrX2FyciwgbnVtX2FyciwgYWNjdW0sICpudW0pKVxuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdCgqbnVtKSYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgdHdza19idWlsZF9hc3NlcnQodm9pZClcbiB7XG4gXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGluZXRfdGltZXdhaXRfc29jaywgdHdfZmFtaWx5KSAhPVxuQEAgLTMzNSw4ICYjNDM7Mzk0LDE1IEBAIHN0YXRpYyB2b2lkIHRjcF9kaWFnX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxuIFx0XHRmb3IgKGkgPSBzX2k7IGkgXHUwMDNjPSBoYXNoaW5mby1cdTAwM2VsaGFzaDJfbWFzazsgaSYjNDM7JiM0MzspIHtcbiBcdFx0XHRzdHJ1Y3QgaW5ldF9saXN0ZW5faGFzaGJ1Y2tldCAqaWxiO1xuIFx0XHRcdHN0cnVjdCBobGlzdF9udWxsc19ub2RlICpub2RlO1xuJiM0MztcdFx0XHRzdHJ1Y3Qgc29jayAqc2tfYXJyW1NLQVJSX1NaXTtcbiYjNDM7XHRcdFx0c3RydWN0IHNvY2sgKmN1cnNvcjtcbiYjNDM7XHRcdFx0aW50IG51bV9hcnJbU0tBUlJfU1pdO1xuJiM0MztcdFx0XHRpbnQgaWR4LCBhY2N1bSwgcmVzO1xuJiM0MztcdFx0XHRib29sIHVzZV9jdXJzb3I7XG4gXG4mIzQzO3Jlc3VtZV9saXN0ZW5fd2FsazpcbiBcdFx0XHRudW0gPSAwO1xuJiM0MztcdFx0XHRhY2N1bSA9IDA7XG4gXHRcdFx0aWxiID0gXHUwMDI2aGFzaGluZm8tXHUwMDNlbGhhc2gyW2ldO1xuIFxuIFx0XHRcdGlmIChobGlzdF9udWxsc19lbXB0eShcdTAwMjZpbGItXHUwMDNlbnVsbHNfaGVhZCkpIHtcbkBAIC0zNDQsNTIgJiM0Mzs0MTAsODAgQEAgc3RhdGljIHZvaWQgdGNwX2RpYWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHR9XG4gXHRcdFx0c3Bpbl9sb2NrKFx1MDAyNmlsYi1cdTAwM2Vsb2NrKTtcbi1cdFx0XHRza19udWxsc19mb3JfZWFjaChzaywgbm9kZSwgXHUwMDI2aWxiLVx1MDAzZW51bGxzX2hlYWQpIHtcbi1cdFx0XHRcdHN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTtcbiYjNDM7XHRcdFx0Y3Vyc29yID0gY2JfZGF0YS1cdTAwM2VkdW1wX2N1cnNvcjtcbiYjNDM7XHRcdFx0dXNlX2N1cnNvciA9IGN1cnNvciBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0XHQgICAgIGNiX2RhdGEtXHUwMDNlZHVtcF9jdXJzb3JfdHlwZSA9PVxuJiM0MztcdFx0XHRcdCAgICAgSU5FVF9ESUFHX0RVTVBfQ1VSU09SX1RDUF9MSVNURU4gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdFx0ICAgICBjYl9kYXRhLVx1MDAzZWR1bXBfY3Vyc29yX3Nsb3QgPT0gaSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0XHQgICAgICFobGlzdF9udWxsc191bmhhc2hlZChcdTAwMjZjdXJzb3ItXHUwMDNlc2tfbnVsbHNfbm9kZSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdFx0ICAgICBjdXJzb3ItXHUwMDNlc2tfbnVsbHNfbm9kZS5wcHJldiAhPSBMSVNUX1BPSVNPTjI7XG4mIzQzO1x0XHRcdG5vZGUgPSB1c2VfY3Vyc29yID8gY3Vyc29yLVx1MDAzZXNrX251bGxzX25vZGUubmV4dCA6XG4mIzQzO1x0XHRcdFx0XHQgICAgaWxiLVx1MDAzZW51bGxzX2hlYWQuZmlyc3Q7XG4mIzQzO1x0XHRcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X2Zyb20oc2ssIG5vZGUsIHNrX251bGxzX25vZGUpIHtcbiYjNDM7XHRcdFx0XHRpZiAoIXVzZV9jdXJzb3IgXHUwMDI2XHUwMDI2IG51bSBcdTAwM2Mgc19udW0pXG4mIzQzO1x0XHRcdFx0XHRnb3RvIG5leHRfbGlzdGVuO1xuIFxuLVx0XHRcdFx0aWYgKCFuZXRfZXEoc29ja19uZXQoc2spLCBuZXQpKVxuLVx0XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0XHRzb2NrX2hvbGQoc2spO1xuJiM0MztcdFx0XHRcdG51bV9hcnJbYWNjdW1dID0gbnVtO1xuJiM0MztcdFx0XHRcdHNrX2FyclthY2N1bV0gPSBzaztcbiYjNDM7XHRcdFx0XHRpZiAoJiM0MzsmIzQzO2FjY3VtID09IFNLQVJSX1NaKVxuJiM0MztcdFx0XHRcdFx0YnJlYWs7XG4gXG4tXHRcdFx0XHRpZiAobnVtIFx1MDAzYyBzX251bSkge1xuLVx0XHRcdFx0XHRudW0mIzQzOyYjNDM7O1xuLVx0XHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHRcdH1cbiYjNDM7bmV4dF9saXN0ZW46XG4mIzQzO1x0XHRcdFx0JiM0MzsmIzQzO251bTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRzcGluX3VubG9jayhcdTAwMjZpbGItXHUwMDNlbG9jayk7XG4gXG4mIzQzO1x0XHRcdHJlcyA9IDA7XG4mIzQzO1x0XHRcdGZvciAoaWR4ID0gMDsgaWR4IFx1MDAzYyBhY2N1bTsgaWR4JiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRcdHN0cnVjdCBpbmV0X3NvY2sgKmluZXQ7XG4mIzQzO1xuJiM0MztcdFx0XHRcdHNrID0gc2tfYXJyW2lkeF07XG4mIzQzO1x0XHRcdFx0aWYgKCFuZXRfZXEoc29ja19uZXQoc2spLCBuZXQpKVxuJiM0MztcdFx0XHRcdFx0Z290byBwcm9jZXNzZWRfbGlzdGVuX3NrO1xuJiM0MztcbiYjNDM7XHRcdFx0XHRpbmV0ID0gaW5ldF9zayhzayk7XG4gXHRcdFx0XHRpZiAoci1cdTAwM2VzZGlhZ19mYW1pbHkgIT0gQUZfVU5TUEVDIFx1MDAyNlx1MDAyNlxuIFx0XHRcdFx0ICAgIHNrLVx1MDAzZXNrX2ZhbWlseSAhPSByLVx1MDAzZXNkaWFnX2ZhbWlseSlcbi1cdFx0XHRcdFx0Z290byBuZXh0X2xpc3RlbjtcbiYjNDM7XHRcdFx0XHRcdGdvdG8gcHJvY2Vzc2VkX2xpc3Rlbl9zaztcbiBcbiBcdFx0XHRcdGlmIChyLVx1MDAzZWlkLmlkaWFnX3Nwb3J0ICE9IGluZXQtXHUwMDNlaW5ldF9zcG9ydCBcdTAwMjZcdTAwMjZcbiBcdFx0XHRcdCAgICByLVx1MDAzZWlkLmlkaWFnX3Nwb3J0KVxuLVx0XHRcdFx0XHRnb3RvIG5leHRfbGlzdGVuO1xuLVxuLVx0XHRcdFx0aWYgKCFpbmV0X2RpYWdfYmNfc2soY2JfZGF0YSwgc2spKVxuLVx0XHRcdFx0XHRnb3RvIG5leHRfbGlzdGVuO1xuJiM0MztcdFx0XHRcdFx0Z290byBwcm9jZXNzZWRfbGlzdGVuX3NrO1xuIFxuLVx0XHRcdFx0aWYgKGluZXRfc2tfZGlhZ19maWxsKHNrLCBpbmV0X2NzayhzayksIHNrYixcbi1cdFx0XHRcdFx0XHQgICAgICBjYiwgciwgTkxNX0ZfTVVMVEksXG4tXHRcdFx0XHRcdFx0ICAgICAgbmV0X2FkbWluKSBcdTAwM2MgMCkge1xuLVx0XHRcdFx0XHRzcGluX3VubG9jayhcdTAwMjZpbGItXHUwMDNlbG9jayk7XG4tXHRcdFx0XHRcdGdvdG8gZG9uZTtcbiYjNDM7XHRcdFx0XHRpZiAocmVzIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgaW5ldF9kaWFnX2JjX3NrKGNiX2RhdGEsIHNrKSkge1xuJiM0MztcdFx0XHRcdFx0cmVzID0gaW5ldF9za19kaWFnX2ZpbGwoc2ssIGluZXRfY3NrKHNrKSxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdHNrYiwgY2IsIHIsIE5MTV9GX01VTFRJLFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0bmV0X2FkbWluKTtcbiYjNDM7XHRcdFx0XHRcdGlmIChyZXMgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0XHRcdG51bSA9IG51bV9hcnJbaWR4XTtcbiBcdFx0XHRcdH1cbiYjNDM7cHJvY2Vzc2VkX2xpc3Rlbl9zazpcbiYjNDM7XHRcdFx0XHRpZiAocmVzIFx1MDAzZT0gMClcbiYjNDM7XHRcdFx0XHRcdHRjcF9kaWFnX3NhdmVfY3Vyc29yKGNiX2RhdGEsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICBJTkVUX0RJQUdfRFVNUF9DVVJTT1JfVENQX0xJU1RFTixcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgIGksIHNrKTtcbiYjNDM7XHRcdFx0XHRzb2NrX3B1dChzayk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0aWYgKHJlcyBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGRvbmU7XG4gXG4tbmV4dF9saXN0ZW46XG4tXHRcdFx0XHQmIzQzOyYjNDM7bnVtO1xuJiM0MztcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChhY2N1bSA9PSBTS0FSUl9TWikge1xuJiM0MztcdFx0XHRcdHNfbnVtID0gMDtcbiYjNDM7XHRcdFx0XHRnb3RvIHJlc3VtZV9saXN0ZW5fd2FsaztcbiBcdFx0XHR9XG4tXHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2aWxiLVx1MDAzZWxvY2spO1xuIFxuJiM0MztcdFx0XHRpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3IoY2JfZGF0YSk7XG4gXHRcdFx0c19udW0gPSAwO1xuIFx0XHR9XG4gc2tpcF9saXN0ZW5faHQ6XG4mIzQzO1x0XHRpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3IoY2JfZGF0YSk7XG4gXHRcdGNiLVx1MDAzZWFyZ3NbMF0gPSAxO1xuIFx0XHRzX2kgPSBudW0gPSBzX251bSA9IDA7XG4gXHR9XG4gXG4tLyogUHJvY2VzcyBhIG1heGltdW0gb2YgU0tBUlJfU1ogc29ja2V0cyBhdCBhIHRpbWUgd2hlbiB3YWxraW5nIGhhc2ggYnVja2V0c1xuLSAqIHdpdGggYmggZGlzYWJsZWQuXG4tICovXG4tI2RlZmluZSBTS0FSUl9TWiAxNlxuLVxuIFx0LyogRHVtcCBib3VuZCBidXQgaW5hY3RpdmUgKG5vdCBsaXN0ZW5pbmcsIGNvbm5lY3RpbmcsIGV0Yy4pIHNvY2tldHMgKi9cbiBcdGlmIChjYi1cdTAwM2VhcmdzWzBdID09IDEpIHtcbiBcdFx0aWYgKCEoaWRpYWdfc3RhdGVzIFx1MDAyNiBUQ1BGX0JPVU5EX0lOQUNUSVZFKSlcbkBAIC0zOTksOCAmIzQzOzQ5MywxMCBAQCBzdGF0aWMgdm9pZCB0Y3BfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbiBcdFx0XHRzdHJ1Y3QgaW5ldF9iaW5kX2hhc2hidWNrZXQgKmliYjtcbiBcdFx0XHRzdHJ1Y3QgaW5ldF9iaW5kMl9idWNrZXQgKnRiMjtcbiBcdFx0XHRzdHJ1Y3Qgc29jayAqc2tfYXJyW1NLQVJSX1NaXTtcbiYjNDM7XHRcdFx0c3RydWN0IHNvY2sgKmN1cnNvcjtcbiBcdFx0XHRpbnQgbnVtX2FycltTS0FSUl9TWl07XG4gXHRcdFx0aW50IGlkeCwgYWNjdW0sIHJlcztcbiYjNDM7XHRcdFx0Ym9vbCB1c2VfY3Vyc29yO1xuIFxuIHJlc3VtZV9iaW5kX3dhbGs6XG4gXHRcdFx0bnVtID0gMDtcbkBAIC00MTIsMzQgJiM0Mzs1MDgsMzggQEAgc3RhdGljIHZvaWQgdGNwX2RpYWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHR9XG4gXHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmliYi1cdTAwM2Vsb2NrKTtcbi1cdFx0XHRpbmV0X2JpbmRfYnVja2V0X2Zvcl9lYWNoKHRiMiwgXHUwMDI2aWJiLVx1MDAzZWNoYWluKSB7XG4tXHRcdFx0XHRpZiAoIW5ldF9lcShpYjJfbmV0KHRiMiksIG5ldCkpXG4tXHRcdFx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRcdFx0c2tfZm9yX2VhY2hfYm91bmQoc2ssIFx1MDAyNnRiMi1cdTAwM2Vvd25lcnMpIHtcbi1cdFx0XHRcdFx0c3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spO1xuLVxuLVx0XHRcdFx0XHRpZiAobnVtIFx1MDAzYyBzX251bSlcbi1cdFx0XHRcdFx0XHRnb3RvIG5leHRfYmluZDtcbi1cbi1cdFx0XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9DTE9TRSB8fFxuLVx0XHRcdFx0XHQgICAgIWluZXQtXHUwMDNlaW5ldF9udW0pXG4tXHRcdFx0XHRcdFx0Z290byBuZXh0X2JpbmQ7XG4tXG4tXHRcdFx0XHRcdGlmIChyLVx1MDAzZXNkaWFnX2ZhbWlseSAhPSBBRl9VTlNQRUMgXHUwMDI2XHUwMDI2XG4tXHRcdFx0XHRcdCAgICByLVx1MDAzZXNkaWFnX2ZhbWlseSAhPSBzay1cdTAwM2Vza19mYW1pbHkpXG4tXHRcdFx0XHRcdFx0Z290byBuZXh0X2JpbmQ7XG4tXG4tXHRcdFx0XHRcdGlmICghaW5ldF9kaWFnX2JjX3NrKGNiX2RhdGEsIHNrKSlcbi1cdFx0XHRcdFx0XHRnb3RvIG5leHRfYmluZDtcbi1cbi1cdFx0XHRcdFx0c29ja19ob2xkKHNrKTtcbi1cdFx0XHRcdFx0bnVtX2FyclthY2N1bV0gPSBudW07XG4tXHRcdFx0XHRcdHNrX2FyclthY2N1bV0gPSBzaztcbi1cdFx0XHRcdFx0aWYgKCYjNDM7JiM0MzthY2N1bSA9PSBTS0FSUl9TWilcbiYjNDM7XHRcdFx0Y3Vyc29yID0gY2JfZGF0YS1cdTAwM2VkdW1wX2N1cnNvcjtcbiYjNDM7XHRcdFx0dXNlX2N1cnNvciA9IGN1cnNvciBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0XHQgICAgIGNiX2RhdGEtXHUwMDNlZHVtcF9jdXJzb3JfdHlwZSA9PVxuJiM0MztcdFx0XHRcdCAgICAgSU5FVF9ESUFHX0RVTVBfQ1VSU09SX1RDUF9CSU5EIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHRcdCAgICAgY2JfZGF0YS1cdTAwM2VkdW1wX2N1cnNvcl9zbG90ID09IGkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdFx0ICAgICAhaGxpc3RfdW5oYXNoZWQoXHUwMDI2Y3Vyc29yLVx1MDAzZXNrX2JpbmRfbm9kZSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdFx0ICAgICBjdXJzb3ItXHUwMDNlc2tfYmluZF9ub2RlLnBwcmV2ICE9IExJU1RfUE9JU09OMiBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0XHQgICAgIGluZXRfY3NrKGN1cnNvciktXHUwMDNlaWNza19iaW5kMl9oYXNoO1xuJiM0MztcdFx0XHRpZiAodXNlX2N1cnNvcikge1xuJiM0MztcdFx0XHRcdHRiMiA9IGluZXRfY3NrKGN1cnNvciktXHUwMDNlaWNza19iaW5kMl9oYXNoO1xuJiM0MztcdFx0XHRcdHNrID0gY3Vyc29yO1xuJiM0MztcdFx0XHRcdGlmICh0Y3BfZGlhZ19iaW5kX2NvbGxlY3Rfb3duZXJzX2NvbnRpbnVlKHNrLCBza19hcnIsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRcdCAgbnVtX2FycixcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdFx0ICBcdTAwMjZhY2N1bSxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdFx0ICBcdTAwMjZudW0pKVxuJiM0MztcdFx0XHRcdFx0Z290byBwYXVzZV9iaW5kX3dhbGs7XG4mIzQzO1x0XHRcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWUodGIyLCBub2RlKSB7XG4mIzQzO1x0XHRcdFx0XHRpZiAodGNwX2RpYWdfYmluZF9jb2xsZWN0X293bmVycyhcdTAwMjZ0YjItXHUwMDNlb3duZXJzLFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0XHQgc2tfYXJyLFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0XHQgbnVtX2FycixcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdFx0IFx1MDAyNmFjY3VtLFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0XHQgXHUwMDI2bnVtLCAwKSlcbiYjNDM7XHRcdFx0XHRcdFx0Z290byBwYXVzZV9iaW5kX3dhbGs7XG4mIzQzO1x0XHRcdFx0fVxuJiM0MztcdFx0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRcdGluZXRfYmluZF9idWNrZXRfZm9yX2VhY2godGIyLCBcdTAwMjZpYmItXHUwMDNlY2hhaW4pIHtcbiYjNDM7XHRcdFx0XHRcdGlmICh0Y3BfZGlhZ19iaW5kX2NvbGxlY3Rfb3duZXJzKFx1MDAyNnRiMi1cdTAwM2Vvd25lcnMsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRcdCBza19hcnIsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRcdCBudW1fYXJyLFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0XHQgXHUwMDI2YWNjdW0sXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRcdCBcdTAwMjZudW0sIHNfbnVtKSlcbiBcdFx0XHRcdFx0XHRnb3RvIHBhdXNlX2JpbmRfd2Fsaztcbi1uZXh0X2JpbmQ6XG4tXHRcdFx0XHRcdG51bSYjNDM7JiM0Mzs7XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuIHBhdXNlX2JpbmRfd2FsazpcbkBAIC00NDcsMTUgJiM0Mzs1NDcsMzMgQEAgc3RhdGljIHZvaWQgdGNwX2RpYWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG4gXG4gXHRcdFx0cmVzID0gMDtcbiBcdFx0XHRmb3IgKGlkeCA9IDA7IGlkeCBcdTAwM2MgYWNjdW07IGlkeCYjNDM7JiM0MzspIHtcbi1cdFx0XHRcdGlmIChyZXMgXHUwMDNlPSAwKSB7XG4tXHRcdFx0XHRcdHJlcyA9IGluZXRfc2tfZGlhZ19maWxsKHNrX2FycltpZHhdLFxuLVx0XHRcdFx0XHRcdFx0XHROVUxMLCBza2IsIGNiLFxuJiM0MztcdFx0XHRcdHN0cnVjdCBpbmV0X3NvY2sgKmluZXQ7XG4mIzQzO1xuJiM0MztcdFx0XHRcdHNrID0gc2tfYXJyW2lkeF07XG4mIzQzO1x0XHRcdFx0aWYgKCFuZXRfZXEoc29ja19uZXQoc2spLCBuZXQpKVxuJiM0MztcdFx0XHRcdFx0Z290byBwdXRfYmluZF9zaztcbiYjNDM7XG4mIzQzO1x0XHRcdFx0aW5ldCA9IGluZXRfc2soc2spO1xuJiM0MztcdFx0XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSAhPSBUQ1BfQ0xPU0UgfHwgIWluZXQtXHUwMDNlaW5ldF9udW0pXG4mIzQzO1x0XHRcdFx0XHRnb3RvIHB1dF9iaW5kX3NrO1xuJiM0MztcbiYjNDM7XHRcdFx0XHRpZiAoci1cdTAwM2VzZGlhZ19mYW1pbHkgIT0gQUZfVU5TUEVDIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHRcdCAgICByLVx1MDAzZXNkaWFnX2ZhbWlseSAhPSBzay1cdTAwM2Vza19mYW1pbHkpXG4mIzQzO1x0XHRcdFx0XHRnb3RvIHB1dF9iaW5kX3NrO1xuJiM0MztcbiYjNDM7XHRcdFx0XHRpZiAocmVzIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgaW5ldF9kaWFnX2JjX3NrKGNiX2RhdGEsIHNrKSkge1xuJiM0MztcdFx0XHRcdFx0cmVzID0gaW5ldF9za19kaWFnX2ZpbGwoc2ssIE5VTEwsIHNrYiwgY2IsXG4gXHRcdFx0XHRcdFx0XHRcdHIsIE5MTV9GX01VTFRJLFxuIFx0XHRcdFx0XHRcdFx0XHRuZXRfYWRtaW4pO1xuIFx0XHRcdFx0XHRpZiAocmVzIFx1MDAzYyAwKVxuIFx0XHRcdFx0XHRcdG51bSA9IG51bV9hcnJbaWR4XTtcbiBcdFx0XHRcdH1cbi1cdFx0XHRcdHNvY2tfcHV0KHNrX2FycltpZHhdKTtcbiYjNDM7XHRcdFx0XHRpZiAocmVzIFx1MDAzZT0gMClcbiYjNDM7XHRcdFx0XHRcdHRjcF9kaWFnX3NhdmVfY3Vyc29yKGNiX2RhdGEsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICBJTkVUX0RJQUdfRFVNUF9DVVJTT1JfVENQX0JJTkQsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICBpLCBzayk7XG4mIzQzO3B1dF9iaW5kX3NrOlxuJiM0MztcdFx0XHRcdHNvY2tfcHV0KHNrKTtcbiBcdFx0XHR9XG4gXHRcdFx0aWYgKHJlcyBcdTAwM2MgMClcbiBcdFx0XHRcdGdvdG8gZG9uZTtcbkBAIC00NjMsMTMgJiM0Mzs1ODEsMTUgQEAgc3RhdGljIHZvaWQgdGNwX2RpYWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG4gXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4gXG4gXHRcdFx0aWYgKGFjY3VtID09IFNLQVJSX1NaKSB7XG4tXHRcdFx0XHRzX251bSA9IG51bSAmIzQzOyAxO1xuJiM0MztcdFx0XHRcdHNfbnVtID0gMDtcbiBcdFx0XHRcdGdvdG8gcmVzdW1lX2JpbmRfd2FsaztcbiBcdFx0XHR9XG4gXG4mIzQzO1x0XHRcdGluZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvcihjYl9kYXRhKTtcbiBcdFx0XHRzX251bSA9IDA7XG4gXHRcdH1cbiBza2lwX2JpbmRfaHQ6XG4mIzQzO1x0XHRpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3IoY2JfZGF0YSk7XG4gXHRcdGNiLVx1MDAzZWFyZ3NbMF0gPSAyO1xuIFx0XHRzX2kgPSBudW0gPSBzX251bSA9IDA7XG4gXHR9XG5AQCAtNDgyLDQyICYjNDM7NjAyLDMzIEBAIHN0YXRpYyB2b2lkIHRjcF9kaWFnX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxuIFx0XHRzcGlubG9ja190ICpsb2NrID0gaW5ldF9laGFzaF9sb2NrcChoYXNoaW5mbywgaSk7XG4gXHRcdHN0cnVjdCBobGlzdF9udWxsc19ub2RlICpub2RlO1xuIFx0XHRzdHJ1Y3Qgc29jayAqc2tfYXJyW1NLQVJSX1NaXTtcbiYjNDM7XHRcdHN0cnVjdCBzb2NrICpjdXJzb3I7XG4gXHRcdGludCBudW1fYXJyW1NLQVJSX1NaXTtcbiBcdFx0aW50IGlkeCwgYWNjdW0sIHJlcztcbiYjNDM7XHRcdGJvb2wgdXNlX2N1cnNvcjtcbiBcbiBcdFx0aWYgKGhsaXN0X251bGxzX2VtcHR5KFx1MDAyNmhlYWQtXHUwMDNlY2hhaW4pKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRpZiAoaSBcdTAwM2Ugc19pKVxuJiM0MztcdFx0aWYgKGkgXHUwMDNlIHNfaSkge1xuJiM0MztcdFx0XHRpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3IoY2JfZGF0YSk7XG4gXHRcdFx0c19udW0gPSAwO1xuJiM0MztcdFx0fVxuIFxuIG5leHRfY2h1bms6XG4gXHRcdG51bSA9IDA7XG4gXHRcdGFjY3VtID0gMDtcbiBcdFx0c3Bpbl9sb2NrX2JoKGxvY2spO1xuLVx0XHRza19udWxsc19mb3JfZWFjaChzaywgbm9kZSwgXHUwMDI2aGVhZC1cdTAwM2VjaGFpbikge1xuLVx0XHRcdGludCBzdGF0ZTtcbi1cbi1cdFx0XHRpZiAoIW5ldF9lcShzb2NrX25ldChzayksIG5ldCkpXG4tXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHRpZiAobnVtIFx1MDAzYyBzX251bSlcbi1cdFx0XHRcdGdvdG8gbmV4dF9ub3JtYWw7XG4tXHRcdFx0c3RhdGUgPSAoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX1RJTUVfV0FJVCkgP1xuLVx0XHRcdFx0UkVBRF9PTkNFKGluZXRfdHdzayhzayktXHUwMDNldHdfc3Vic3RhdGUpIDogc2stXHUwMDNlc2tfc3RhdGU7XG4tXHRcdFx0aWYgKCEoaWRpYWdfc3RhdGVzIFx1MDAyNiAoMSBcdTAwM2NcdTAwM2Mgc3RhdGUpKSlcbi1cdFx0XHRcdGdvdG8gbmV4dF9ub3JtYWw7XG4tXHRcdFx0aWYgKHItXHUwMDNlc2RpYWdfZmFtaWx5ICE9IEFGX1VOU1BFQyBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgc2stXHUwMDNlc2tfZmFtaWx5ICE9IHItXHUwMDNlc2RpYWdfZmFtaWx5KVxuLVx0XHRcdFx0Z290byBuZXh0X25vcm1hbDtcbi1cdFx0XHRpZiAoci1cdTAwM2VpZC5pZGlhZ19zcG9ydCAhPSBodG9ucyhSRUFEX09OQ0Uoc2stXHUwMDNlc2tfbnVtKSkgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIHItXHUwMDNlaWQuaWRpYWdfc3BvcnQpXG4tXHRcdFx0XHRnb3RvIG5leHRfbm9ybWFsO1xuLVx0XHRcdGlmIChyLVx1MDAzZWlkLmlkaWFnX2Rwb3J0ICE9IHNrLVx1MDAzZXNrX2Rwb3J0IFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICByLVx1MDAzZWlkLmlkaWFnX2Rwb3J0KVxuLVx0XHRcdFx0Z290byBuZXh0X25vcm1hbDtcbi1cdFx0XHR0d3NrX2J1aWxkX2Fzc2VydCgpO1xuLVxuLVx0XHRcdGlmICghaW5ldF9kaWFnX2JjX3NrKGNiX2RhdGEsIHNrKSlcbiYjNDM7XHRcdGN1cnNvciA9IGNiX2RhdGEtXHUwMDNlZHVtcF9jdXJzb3I7XG4mIzQzO1x0XHR1c2VfY3Vyc29yID0gY3Vyc29yIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgIGNiX2RhdGEtXHUwMDNlZHVtcF9jdXJzb3JfdHlwZSA9PVxuJiM0MztcdFx0XHQgICAgIElORVRfRElBR19EVU1QX0NVUlNPUl9UQ1BfRUhBU0ggXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICAgY2JfZGF0YS1cdTAwM2VkdW1wX2N1cnNvcl9zbG90ID09IGkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICAgIWhsaXN0X251bGxzX3VuaGFzaGVkKFx1MDAyNmN1cnNvci1cdTAwM2Vza19udWxsc19ub2RlKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgICBjdXJzb3ItXHUwMDNlc2tfbnVsbHNfbm9kZS5wcHJldiAhPSBMSVNUX1BPSVNPTjI7XG4mIzQzO1x0XHRub2RlID0gdXNlX2N1cnNvciA/IGN1cnNvci1cdTAwM2Vza19udWxsc19ub2RlLm5leHQgOiBoZWFkLVx1MDAzZWNoYWluLmZpcnN0O1xuJiM0MztcdFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfZnJvbShzaywgbm9kZSwgc2tfbnVsbHNfbm9kZSkge1xuJiM0MztcdFx0XHRpZiAoIXVzZV9jdXJzb3IgXHUwMDI2XHUwMDI2IG51bSBcdTAwM2Mgc19udW0pXG4gXHRcdFx0XHRnb3RvIG5leHRfbm9ybWFsO1xuIFxuIFx0XHRcdGlmICghcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNnNrLVx1MDAzZXNrX3JlZmNudCkpXG5AQCAtNTM0LDEzICYjNDM7NjQ1LDQyIEBAIHN0YXRpYyB2b2lkIHRjcF9kaWFnX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxuIFxuIFx0XHRyZXMgPSAwO1xuIFx0XHRmb3IgKGlkeCA9IDA7IGlkeCBcdTAwM2MgYWNjdW07IGlkeCYjNDM7JiM0MzspIHtcbi1cdFx0XHRpZiAocmVzIFx1MDAzZT0gMCkge1xuLVx0XHRcdFx0cmVzID0gc2tfZGlhZ19maWxsKHNrX2FycltpZHhdLCBza2IsIGNiLCByLFxuLVx0XHRcdFx0XHRcdCAgIE5MTV9GX01VTFRJLCBuZXRfYWRtaW4pO1xuJiM0MztcdFx0XHRpbnQgc3RhdGU7XG4mIzQzO1xuJiM0MztcdFx0XHRzayA9IHNrX2FycltpZHhdO1xuJiM0MztcdFx0XHRpZiAoIW5ldF9lcShzb2NrX25ldChzayksIG5ldCkpXG4mIzQzO1x0XHRcdFx0Z290byBwdXRfZXN0YWJfc2s7XG4mIzQzO1xuJiM0MztcdFx0XHRzdGF0ZSA9IChzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfVElNRV9XQUlUKSA/XG4mIzQzO1x0XHRcdFx0UkVBRF9PTkNFKGluZXRfdHdzayhzayktXHUwMDNldHdfc3Vic3RhdGUpIDogc2stXHUwMDNlc2tfc3RhdGU7XG4mIzQzO1x0XHRcdGlmICghKGlkaWFnX3N0YXRlcyBcdTAwMjYgKDEgXHUwMDNjXHUwMDNjIHN0YXRlKSkpXG4mIzQzO1x0XHRcdFx0Z290byBwdXRfZXN0YWJfc2s7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoci1cdTAwM2VzZGlhZ19mYW1pbHkgIT0gQUZfVU5TUEVDIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgc2stXHUwMDNlc2tfZmFtaWx5ICE9IHItXHUwMDNlc2RpYWdfZmFtaWx5KVxuJiM0MztcdFx0XHRcdGdvdG8gcHV0X2VzdGFiX3NrO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKHItXHUwMDNlaWQuaWRpYWdfc3BvcnQgIT0gaHRvbnMoUkVBRF9PTkNFKHNrLVx1MDAzZXNrX251bSkpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgci1cdTAwM2VpZC5pZGlhZ19zcG9ydClcbiYjNDM7XHRcdFx0XHRnb3RvIHB1dF9lc3RhYl9zaztcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChyLVx1MDAzZWlkLmlkaWFnX2Rwb3J0ICE9IHNrLVx1MDAzZXNrX2Rwb3J0IFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgci1cdTAwM2VpZC5pZGlhZ19kcG9ydClcbiYjNDM7XHRcdFx0XHRnb3RvIHB1dF9lc3RhYl9zaztcbiYjNDM7XG4mIzQzO1x0XHRcdHR3c2tfYnVpbGRfYXNzZXJ0KCk7XG4mIzQzO1x0XHRcdGlmIChyZXMgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBpbmV0X2RpYWdfYmNfc2soY2JfZGF0YSwgc2spKSB7XG4mIzQzO1x0XHRcdFx0cmVzID0gc2tfZGlhZ19maWxsKHNrLCBza2IsIGNiLCByLCBOTE1fRl9NVUxUSSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgbmV0X2FkbWluKTtcbiBcdFx0XHRcdGlmIChyZXMgXHUwMDNjIDApXG4gXHRcdFx0XHRcdG51bSA9IG51bV9hcnJbaWR4XTtcbiBcdFx0XHR9XG4tXHRcdFx0c29ja19nZW5fcHV0KHNrX2FycltpZHhdKTtcbiYjNDM7XHRcdFx0aWYgKHJlcyBcdTAwM2U9IDApXG4mIzQzO1x0XHRcdFx0dGNwX2RpYWdfc2F2ZV9jdXJzb3IoY2JfZGF0YSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBJTkVUX0RJQUdfRFVNUF9DVVJTT1JfVENQX0VIQVNILFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIGksIHNrKTtcbiYjNDM7cHV0X2VzdGFiX3NrOlxuJiM0MztcdFx0XHRzb2NrX2dlbl9wdXQoc2spO1xuIFx0XHR9XG4gXHRcdGlmIChyZXMgXHUwMDNjIDApXG4gXHRcdFx0YnJlYWs7XG5AQCAtNTQ4LDkgJiM0Mzs2ODgsMTEgQEAgc3RhdGljIHZvaWQgdGNwX2RpYWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFxuIFx0XHRpZiAoYWNjdW0gPT0gU0tBUlJfU1opIHtcbi1cdFx0XHRzX251bSA9IG51bSAmIzQzOyAxO1xuJiM0MztcdFx0XHRzX251bSA9IDA7XG4gXHRcdFx0Z290byBuZXh0X2NodW5rO1xuIFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0aW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKGNiX2RhdGEpO1xuIFx0fVxuIFxuIGRvbmU6XG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL21wdGNwX2RpYWcuYyBiL25ldC9tcHRjcC9tcHRjcF9kaWFnLmNcbmluZGV4IDEzNmMyZDA1YzBlZWIuLjk4MWU2NDM0MzAzOTAgMTAwNjQ0XG4tLS0gYS9uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jXG5AQCAtNiwxMiAmIzQzOzYsMjUgQEBcbiAgKiBBdXRob3I6IFBhb2xvIEFiZW5pIFx1MDAzY3BhYmVuaUByZWRoYXQuY29tXHUwMDNlXG4gICovXG4gXG4mIzQzOy8qIFByb2Nlc3MgYSBib3VuZGVkIG51bWJlciBvZiBsaXN0ZW5lcnMgcGVyIGJ1Y2tldCBsb2NrIGhvbGQuICovXG4mIzQzOyNkZWZpbmUgTVBUQ1BfRElBR19CVUxLX1NaIDE2XG4mIzQzO1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbmV0X2RpYWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtwcm90b2NvbC5oXCYjMzQ7XG4gXG4mIzQzO3N0YXRpYyB2b2lkIG1wdGNwX2RpYWdfc2F2ZV9jdXJzb3Ioc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEsXG4mIzQzO1x0XHRcdFx0ICAgdW5zaWduZWQgaW50IHNsb3QsIHN0cnVjdCBzb2NrICpzaylcbiYjNDM7e1xuJiM0MztcdHNvY2tfaG9sZChzayk7XG4mIzQzO1x0aW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKGNiX2RhdGEpO1xuJiM0MztcdGNiX2RhdGEtXHUwMDNlZHVtcF9jdXJzb3IgPSBzaztcbiYjNDM7XHRjYl9kYXRhLVx1MDAzZWR1bXBfY3Vyc29yX3Nsb3QgPSBzbG90O1xuJiM0MztcdGNiX2RhdGEtXHUwMDNlZHVtcF9jdXJzb3JfdHlwZSA9IElORVRfRElBR19EVU1QX0NVUlNPUl9NUFRDUF9MSVNURU47XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBza19kaWFnX2R1bXAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbiBcdFx0XHRjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX3JlcV92MiAqcmVxLFxuQEAgLTc3LDYgJiM0Mzs5MCw3IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2RpYWdfZHVtcF9saXN0ZW5lcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhXG4gXHRcdFx0XHQgICAgICBib29sIG5ldF9hZG1pbilcbiB7XG4gXHRzdHJ1Y3QgbXB0Y3BfZGlhZ19jdHggKmRpYWdfY3R4ID0gKHZvaWQgKiljYi1cdTAwM2VjdHg7XG4mIzQzO1x0c3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEgPSBjYi1cdTAwM2VkYXRhO1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVx1MDAzZXNrKTtcbiBcdHN0cnVjdCBpbmV0X2hhc2hpbmZvICpoaW5mbztcbiBcdGludCBpO1xuQEAgLTg2LDYyICYjNDM7MTAwLDk4IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2RpYWdfZHVtcF9saXN0ZW5lcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhXG4gXHRmb3IgKGkgPSBkaWFnX2N0eC1cdTAwM2VsX3Nsb3Q7IGkgXHUwMDNjPSBoaW5mby1cdTAwM2VsaGFzaDJfbWFzazsgaSYjNDM7JiM0MzspIHtcbiBcdFx0c3RydWN0IGluZXRfbGlzdGVuX2hhc2hidWNrZXQgKmlsYjtcbiBcdFx0c3RydWN0IGhsaXN0X251bGxzX25vZGUgKm5vZGU7XG4tXHRcdHN0cnVjdCBzb2NrICpzaztcbi1cdFx0aW50IG51bSA9IDA7XG4tXG4mIzQzO1x0XHRzdHJ1Y3Qgc29jayAqdG1wLCAqc2ssICpza19hcnJbTVBUQ1BfRElBR19CVUxLX1NaXTtcbiYjNDM7XHRcdHN0cnVjdCBzb2NrICpjdXJzb3I7XG4mIzQzO1x0XHRpbnQgYWNjdW0sIGlkeCwgbnVtLCByZXQ7XG4mIzQzO1x0XHRpbnQgbnVtX2FycltNUFRDUF9ESUFHX0JVTEtfU1pdO1xuJiM0MztcdFx0Ym9vbCB1c2VfY3Vyc29yO1xuJiM0MztcbiYjNDM7cmVzdW1lX2xpc3Rlbl93YWxrOlxuJiM0MztcdFx0bnVtID0gMDtcbiYjNDM7XHRcdGFjY3VtID0gMDtcbiBcdFx0aWxiID0gXHUwMDI2aGluZm8tXHUwMDNlbGhhc2gyW2ldO1xuJiM0MztcdFx0cmV0ID0gMDtcbiBcbiBcdFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0XHRzcGluX2xvY2soXHUwMDI2aWxiLVx1MDAzZWxvY2spO1xuLVx0XHRza19udWxsc19mb3JfZWFjaChzaywgbm9kZSwgXHUwMDI2aWxiLVx1MDAzZW51bGxzX2hlYWQpIHtcbi1cdFx0XHRjb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpjdHggPSBtcHRjcF9zdWJmbG93X2N0eChzayk7XG4tXHRcdFx0c3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spO1xuLVx0XHRcdGludCByZXQ7XG4tXG4tXHRcdFx0aWYgKG51bSBcdTAwM2MgZGlhZ19jdHgtXHUwMDNlbF9udW0pXG4tXHRcdFx0XHRnb3RvIG5leHRfbGlzdGVuO1xuLVxuLVx0XHRcdGlmICghY3R4IHx8IHN0cmNtcChpbmV0X2NzayhzayktXHUwMDNlaWNza191bHBfb3BzLVx1MDAzZW5hbWUsIFwmIzM0O21wdGNwXCYjMzQ7KSlcbi1cdFx0XHRcdGdvdG8gbmV4dF9saXN0ZW47XG4tXG4tXHRcdFx0c2sgPSBjdHgtXHUwMDNlY29ubjtcbi1cdFx0XHRpZiAoIXNrIHx8ICFuZXRfZXEoc29ja19uZXQoc2spLCBuZXQpKVxuLVx0XHRcdFx0Z290byBuZXh0X2xpc3Rlbjtcbi1cbi1cdFx0XHRpZiAoci1cdTAwM2VzZGlhZ19mYW1pbHkgIT0gQUZfVU5TUEVDIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICBzay1cdTAwM2Vza19mYW1pbHkgIT0gci1cdTAwM2VzZGlhZ19mYW1pbHkpXG4tXHRcdFx0XHRnb3RvIG5leHRfbGlzdGVuO1xuLVxuLVx0XHRcdGlmIChyLVx1MDAzZWlkLmlkaWFnX3Nwb3J0ICE9IGluZXQtXHUwMDNlaW5ldF9zcG9ydCBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgci1cdTAwM2VpZC5pZGlhZ19zcG9ydClcbiYjNDM7XHRcdGN1cnNvciA9IGNiX2RhdGEtXHUwMDNlZHVtcF9jdXJzb3I7XG4mIzQzO1x0XHR1c2VfY3Vyc29yID0gY3Vyc29yIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgIGNiX2RhdGEtXHUwMDNlZHVtcF9jdXJzb3JfdHlwZSA9PVxuJiM0MztcdFx0XHQgICAgIElORVRfRElBR19EVU1QX0NVUlNPUl9NUFRDUF9MSVNURU4gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICAgY2JfZGF0YS1cdTAwM2VkdW1wX2N1cnNvcl9zbG90ID09IGkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICAgIWhsaXN0X251bGxzX3VuaGFzaGVkKFx1MDAyNmN1cnNvci1cdTAwM2Vza19udWxsc19ub2RlKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgICBjdXJzb3ItXHUwMDNlc2tfbnVsbHNfbm9kZS5wcHJldiAhPSBMSVNUX1BPSVNPTjI7XG4mIzQzO1x0XHRub2RlID0gdXNlX2N1cnNvciA/IGN1cnNvci1cdTAwM2Vza19udWxsc19ub2RlLm5leHQgOlxuJiM0MztcdFx0XHRcdCAgICBpbGItXHUwMDNlbnVsbHNfaGVhZC5maXJzdDtcbiYjNDM7XHRcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X2Zyb20oc2ssIG5vZGUsIHNrX251bGxzX25vZGUpIHtcbiYjNDM7XHRcdFx0aWYgKCF1c2VfY3Vyc29yIFx1MDAyNlx1MDAyNiBudW0gXHUwMDNjIGRpYWdfY3R4LVx1MDAzZWxfbnVtKVxuIFx0XHRcdFx0Z290byBuZXh0X2xpc3RlbjtcbiBcbiBcdFx0XHRpZiAoIXJlZmNvdW50X2luY19ub3RfemVybyhcdTAwMjZzay1cdTAwM2Vza19yZWZjbnQpKVxuIFx0XHRcdFx0Z290byBuZXh0X2xpc3RlbjtcbiBcbi1cdFx0XHRyZXQgPSBza19kaWFnX2R1bXAoc2ssIHNrYiwgY2IsIHIsIG5ldF9hZG1pbik7XG4tXG4tXHRcdFx0c29ja19wdXQoc2spO1xuLVxuLVx0XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbi1cdFx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmlsYi1cdTAwM2Vsb2NrKTtcbi1cdFx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0XHRcdFx0ZGlhZ19jdHgtXHUwMDNlbF9zbG90ID0gaTtcbi1cdFx0XHRcdGRpYWdfY3R4LVx1MDAzZWxfbnVtID0gbnVtO1xuLVx0XHRcdFx0cmV0dXJuO1xuLVx0XHRcdH1cbi1cdFx0XHRkaWFnX2N0eC1cdTAwM2VsX251bSA9IG51bSAmIzQzOyAxO1xuLVx0XHRcdG51bSA9IDA7XG4mIzQzO1x0XHRcdG51bV9hcnJbYWNjdW1dID0gbnVtO1xuJiM0MztcdFx0XHRza19hcnJbYWNjdW1dID0gc2s7XG4mIzQzO1x0XHRcdGlmICgmIzQzOyYjNDM7YWNjdW0gPT0gTVBUQ1BfRElBR19CVUxLX1NaKVxuJiM0MztcdFx0XHRcdGJyZWFrO1xuIG5leHRfbGlzdGVuOlxuIFx0XHRcdCYjNDM7JiM0MztudW07XG4gXHRcdH1cbiBcdFx0c3Bpbl91bmxvY2soXHUwMDI2aWxiLVx1MDAzZWxvY2spO1xuIFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiYjNDM7XHRcdGZvciAoaWR4ID0gMDsgaWR4IFx1MDAzYyBhY2N1bTsgaWR4JiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRjb25zdCBzdHJ1Y3QgdGNwX3VscF9vcHMgKnVscF9vcHM7XG4mIzQzO1x0XHRcdGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKmN0eDtcbiYjNDM7XHRcdFx0c3RydWN0IGluZXRfc29jayAqaW5ldDtcbiYjNDM7XG4mIzQzO1x0XHRcdHNrID0gc2tfYXJyW2lkeF07XG4mIzQzO1x0XHRcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRcdFx0Y3R4ID0gbXB0Y3Bfc3ViZmxvd19jdHgoc2spO1xuJiM0MztcdFx0XHR1bHBfb3BzID0gUkVBRF9PTkNFKGluZXRfY3NrKHNrKS1cdTAwM2VpY3NrX3VscF9vcHMpO1xuJiM0MztcdFx0XHRpbmV0ID0gaW5ldF9zayhzayk7XG4mIzQzO1x0XHRcdHRtcCA9IGN0eCA/IGN0eC1cdTAwM2Vjb25uIDogTlVMTDtcbiYjNDM7XHRcdFx0aWYgKCFjdHggfHwgIXVscF9vcHMgfHwgc3RyY21wKHVscF9vcHMtXHUwMDNlbmFtZSwgXCYjMzQ7bXB0Y3BcJiMzNDspIHx8XG4mIzQzO1x0XHRcdCAgICAhdG1wIHx8ICFuZXRfZXEoc29ja19uZXQodG1wKSwgbmV0KSB8fFxuJiM0MztcdFx0XHQgICAgKHItXHUwMDNlc2RpYWdfZmFtaWx5ICE9IEFGX1VOU1BFQyBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgICB0bXAtXHUwMDNlc2tfZmFtaWx5ICE9IHItXHUwMDNlc2RpYWdfZmFtaWx5KSB8fFxuJiM0MztcdFx0XHQgICAgKHItXHUwMDNlaWQuaWRpYWdfc3BvcnQgIT0gaW5ldC1cdTAwM2VpbmV0X3Nwb3J0IFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgIHItXHUwMDNlaWQuaWRpYWdfc3BvcnQpIHx8XG4mIzQzO1x0XHRcdCAgICAhcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNnRtcC1cdTAwM2Vza19yZWZjbnQpKSB7XG4mIzQzO1x0XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0XHRcdFx0Z290byBwcm9jZXNzZWRfbGlzdGVuZXJfc2s7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNlPSAwKSB7XG4mIzQzO1x0XHRcdFx0cmV0ID0gc2tfZGlhZ19kdW1wKHRtcCwgc2tiLCBjYiwgciwgbmV0X2FkbWluKTtcbiYjNDM7XHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdFx0bnVtID0gbnVtX2FycltpZHhdO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdHNvY2tfcHV0KHRtcCk7XG4mIzQzO3Byb2Nlc3NlZF9saXN0ZW5lcl9zazpcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2U9IDApXG4mIzQzO1x0XHRcdFx0bXB0Y3BfZGlhZ19zYXZlX2N1cnNvcihjYl9kYXRhLCBpLCBzayk7XG4mIzQzO1x0XHRcdHNvY2tfcHV0KHNrKTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRcdGRpYWdfY3R4LVx1MDAzZWxfc2xvdCA9IGk7XG4mIzQzO1x0XHRcdGRpYWdfY3R4LVx1MDAzZWxfbnVtID0gbnVtO1xuJiM0MztcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHRjb25kX3Jlc2NoZWQoKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoYWNjdW0gPT0gTVBUQ1BfRElBR19CVUxLX1NaKSB7XG4mIzQzO1x0XHRcdGRpYWdfY3R4LVx1MDAzZWxfbnVtID0gMDtcbiYjNDM7XHRcdFx0Z290byByZXN1bWVfbGlzdGVuX3dhbGs7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKGNiX2RhdGEpO1xuIFx0XHRkaWFnX2N0eC1cdTAwM2VsX251bSA9IDA7XG4gXHR9XG4gXG4mIzQzO1x0aW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKGNiX2RhdGEpO1xuIFx0ZGlhZ19jdHgtXHUwMDNlbF9udW0gPSAwO1xuIFx0ZGlhZ19jdHgtXHUwMDNlbF9zbG90ID0gaTtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTc6NTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVRfRElBRyYjMzQ7LAogICAgJiMzNDtJTkVUX1RDUF9ESUFHJiMzNDssCiAgICAmIzM0O01QVENQJiMzNDssCiAgICAmIzM0O0lORVRfTVBUQ1BfRElBRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF9kaWFnX2R1bXAmIzM0OywKICAgICYjMzQ7bXB0Y3BfZGlhZ19kdW1wX2xpc3RlbmVycyYjMzQ7LAogICAgJiMzNDtpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGN1cnNvciBtZWNoYW5pc20gZm9yIGR1bXBpbmcgVENQIGFuZCBNUFRDUCBzb2NrZXRzIHZpYSB0aGUgaW5ldF9kaWFnIG5ldGxpbmsgaW50ZXJmYWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayB0aGF0IGFmZmVjdHMgaG93IHNvY2tldHMgYXJlIGl0ZXJhdGVkIGFuZCBkdW1wZWQsIHByZXZlbnRpbmcgZHVwbGljYXRlcyBvciBtaXNzZWQgc29ja2V0cyB3aGVuIHRoZSBoYXNoIHRhYmxlIGNoYW5nZXMgZHVyaW5nIHRoZSBkdW1wLiBJdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjI5YTMxNTE5ZGNlZTJiY2Q1OWZmZTJkYTRkMjVkMTZiYWU2OWRiNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDMwIDE3OjUyOjUwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbmV0X2RpYWcuaCBiL2luY2x1ZGUvbGludXgvaW5ldF9kaWFnLmgKaW5kZXggNzA0ZmQ0MTVjMmI0OS4uNDg1OWU3N2EyOGM3YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbmV0X2RpYWcuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2luZXRfZGlhZy5oCkBAIC02LDYgJiM0Mzs2LDcgQEAKICNpbmNsdWRlICZsdDt1YXBpL2xpbnV4L2luZXRfZGlhZy5oJmd0OwogCiBzdHJ1Y3QgaW5ldF9oYXNoaW5mbzsKJiM0MztzdHJ1Y3Qgc29jazsKIAogc3RydWN0IGluZXRfZGlhZ19oYW5kbGVyIHsKIAlzdHJ1Y3QgbW9kdWxlCSpvd25lcjsKQEAgLTMyLDEyICYjNDM7MzMsMjQgQEAgc3RydWN0IGluZXRfZGlhZ19oYW5kbGVyIHsKIH07CiAKIHN0cnVjdCBicGZfc2tfc3RvcmFnZV9kaWFnOwomIzQzOwomIzQzO2VudW0gaW5ldF9kaWFnX2R1bXBfY3Vyc29yX3R5cGUgewomIzQzOwlJTkVUX0RJQUdfRFVNUF9DVVJTT1JfTk9ORSwKJiM0MzsJSU5FVF9ESUFHX0RVTVBfQ1VSU09SX1RDUF9MSVNURU4sCiYjNDM7CUlORVRfRElBR19EVU1QX0NVUlNPUl9UQ1BfQklORCwKJiM0MzsJSU5FVF9ESUFHX0RVTVBfQ1VSU09SX1RDUF9FSEFTSCwKJiM0MzsJSU5FVF9ESUFHX0RVTVBfQ1VSU09SX01QVENQX0xJU1RFTiwKJiM0Mzt9OwomIzQzOwogc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgewogCXN0cnVjdCBubGF0dHIgKnJlcV9ubGFzW19fSU5FVF9ESUFHX1JFUV9NQVhdOwogI2RlZmluZSBpbmV0X2RpYWdfbmxhX2JjIHJlcV9ubGFzW0lORVRfRElBR19SRVFfQllURUNPREVdCiAjZGVmaW5lIGluZXRfZGlhZ19ubGFfYnBmX3N0Z3MgcmVxX25sYXNbSU5FVF9ESUFHX1JFUV9TS19CUEZfU1RPUkFHRVNdCiAKIAlzdHJ1Y3QgYnBmX3NrX3N0b3JhZ2VfZGlhZyAqYnBmX3N0Z19kaWFnOwomIzQzOwlzdHJ1Y3Qgc29jayAqZHVtcF9jdXJzb3I7CiYjNDM7CXVuc2lnbmVkIGludCBkdW1wX2N1cnNvcl9zbG90OwomIzQzOwl1OCBkdW1wX2N1cnNvcl90eXBlOwogCWJvb2wgbWFya19uZWVkZWQ7CS8qIElORVRfRElBR19CQ19NQVJLX0NPTkQgcHJlc2VudC4gKi8KICNpZmRlZiBDT05GSUdfU09DS19DR1JPVVBfREFUQQogCWJvb2wgY2dyb3VwX25lZWRlZDsJLyogSU5FVF9ESUFHX0JDX0NHUk9VUF9DT05EIHByZXNlbnQuICovCkBAIC01Myw2ICYjNDM7NjYsOCBAQCBpbnQgaW5ldF9za19kaWFnX2ZpbGwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2ssCiAKIGludCBpbmV0X2RpYWdfYmNfc2soY29uc3Qgc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEsIHN0cnVjdCBzb2NrICpzayk7CiAKJiM0Mzt2b2lkIGluZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvcihzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSAqY2JfZGF0YSk7CiYjNDM7CiB2b2lkIGluZXRfZGlhZ19tc2dfY29tbW9uX2ZpbGwoc3RydWN0IGluZXRfZGlhZ19tc2cgKnIsIHN0cnVjdCBzb2NrICpzayk7CiAKIHN0YXRpYyBpbmxpbmUgc2l6ZV90IGluZXRfZGlhZ19tc2dfYXR0cnNfc2l6ZSh2b2lkKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9kaWFnLmMgYi9uZXQvaXB2NC9pbmV0X2RpYWcuYwppbmRleCAzNGI3N2FhODdkMGE0Li40MTE0OGU4ODAwNTQ1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0X2RpYWcuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pbmV0X2RpYWcuYwpAQCAtODkxLDEwICYjNDM7ODkxLDIzIEBAIHN0YXRpYyBpbnQgaW5ldF9kaWFnX2R1bXBfc3RhcnRfY29tcGF0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIAlyZXR1cm4gX19pbmV0X2RpYWdfZHVtcF9zdGFydChjYiwgc2l6ZW9mKHN0cnVjdCBpbmV0X2RpYWdfcmVxKSk7CiB9CiAKJiM0Mzt2b2lkIGluZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvcihzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSAqY2JfZGF0YSkKJiM0Mzt7CiYjNDM7CWlmICghY2JfZGF0YS0mZ3Q7ZHVtcF9jdXJzb3IpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXNvY2tfZ2VuX3B1dChjYl9kYXRhLSZndDtkdW1wX2N1cnNvcik7CiYjNDM7CWNiX2RhdGEtJmd0O2R1bXBfY3Vyc29yID0gTlVMTDsKJiM0MzsJY2JfZGF0YS0mZ3Q7ZHVtcF9jdXJzb3Jfc2xvdCA9IDA7CiYjNDM7CWNiX2RhdGEtJmd0O2R1bXBfY3Vyc29yX3R5cGUgPSBJTkVUX0RJQUdfRFVNUF9DVVJTT1JfTk9ORTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoaW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKTsKJiM0MzsKIHN0YXRpYyBpbnQgaW5ldF9kaWFnX2R1bXBfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiB7CiAJc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEgPSBjYi0mZ3Q7ZGF0YTsKIAomIzQzOwlpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3IoY2JfZGF0YSk7CiAJYnBmX3NrX3N0b3JhZ2VfZGlhZ19mcmVlKGNiX2RhdGEtJmd0O2JwZl9zdGdfZGlhZyk7CiAJa2ZyZWUoY2ItJmd0O2RhdGEpOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfZGlhZy5jIGIvbmV0L2lwdjQvdGNwX2RpYWcuYwppbmRleCBiYTFmZGJlOTgwN2ZkLi5iZTBjMjJjYzQ0NWIyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfZGlhZy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9kaWFnLmMKQEAgLTI4NSw2ICYjNDM7Mjg1LDY1IEBAIHN0YXRpYyBpbnQgc2tfZGlhZ19maWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgbmV0X2FkbWluKTsKIH0KIAomIzQzOy8qIFByb2Nlc3MgYSBtYXhpbXVtIG9mIFNLQVJSX1NaIHNvY2tldHMgYXQgYSB0aW1lIHdoZW4gd2Fsa2luZyBoYXNoIGJ1Y2tldHMKJiM0MzsgKiB3aXRoIGJoIGRpc2FibGVkLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgU0tBUlJfU1ogMTYKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0Y3BfZGlhZ19zYXZlX2N1cnNvcihzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSAqY2JfZGF0YSwgaW50IHR5cGUsCiYjNDM7CQkJCSB1bnNpZ25lZCBpbnQgc2xvdCwgc3RydWN0IHNvY2sgKnNrKQomIzQzO3sKJiM0MzsJc29ja19ob2xkKHNrKTsKJiM0MzsJaW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKGNiX2RhdGEpOwomIzQzOwljYl9kYXRhLSZndDtkdW1wX2N1cnNvciA9IHNrOwomIzQzOwljYl9kYXRhLSZndDtkdW1wX2N1cnNvcl9zbG90ID0gc2xvdDsKJiM0MzsJY2JfZGF0YS0mZ3Q7ZHVtcF9jdXJzb3JfdHlwZSA9IHR5cGU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHRjcF9kaWFnX2JpbmRfY29sbGVjdF9zb2NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKipza19hcnIsCiYjNDM7CQkJCSAgICAgICBpbnQgKm51bV9hcnIsIGludCAqYWNjdW0sIGludCBudW0pCiYjNDM7ewomIzQzOwlzb2NrX2hvbGQoc2spOwomIzQzOwludW1fYXJyWyphY2N1bV0gPSBudW07CiYjNDM7CXNrX2FyclsqYWNjdW1dID0gc2s7CiYjNDM7CiYjNDM7CXJldHVybiAmIzQzOyYjNDM7KmFjY3VtID09IFNLQVJSX1NaOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCB0Y3BfZGlhZ19iaW5kX2NvbGxlY3Rfb3duZXJzKHN0cnVjdCBobGlzdF9oZWFkICpvd25lcnMsCiYjNDM7CQkJCQkgc3RydWN0IHNvY2sgKipza19hcnIsIGludCAqbnVtX2FyciwKJiM0MzsJCQkJCSBpbnQgKmFjY3VtLCBpbnQgKm51bSwgaW50IHNfbnVtKQomIzQzO3sKJiM0MzsJc3RydWN0IHNvY2sgKnNrOwomIzQzOwomIzQzOwlza19mb3JfZWFjaF9ib3VuZChzaywgb3duZXJzKSB7CiYjNDM7CQlpZiAoKm51bSAmbHQ7IHNfbnVtKSB7CiYjNDM7CQkJKCpudW0pJiM0MzsmIzQzOzsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmICh0Y3BfZGlhZ19iaW5kX2NvbGxlY3Rfc29jayhzaywgc2tfYXJyLCBudW1fYXJyLCBhY2N1bSwgKm51bSkpCiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CQkoKm51bSkmIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgdGNwX2RpYWdfYmluZF9jb2xsZWN0X293bmVyc19jb250aW51ZShzdHJ1Y3Qgc29jayAqc2ssCiYjNDM7CQkJCQkJICBzdHJ1Y3Qgc29jayAqKnNrX2FyciwKJiM0MzsJCQkJCQkgIGludCAqbnVtX2FyciwgaW50ICphY2N1bSwKJiM0MzsJCQkJCQkgIGludCAqbnVtKQomIzQzO3sKJiM0MzsJaGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWUoc2ssIHNrX2JpbmRfbm9kZSkgewomIzQzOwkJaWYgKHRjcF9kaWFnX2JpbmRfY29sbGVjdF9zb2NrKHNrLCBza19hcnIsIG51bV9hcnIsIGFjY3VtLCAqbnVtKSkKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCSgqbnVtKSYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHR3c2tfYnVpbGRfYXNzZXJ0KHZvaWQpCiB7CiAJQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2ssIHR3X2ZhbWlseSkgIT0KQEAgLTMzNSw4ICYjNDM7Mzk0LDE1IEBAIHN0YXRpYyB2b2lkIHRjcF9kaWFnX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLAogCQlmb3IgKGkgPSBzX2k7IGkgJmx0Oz0gaGFzaGluZm8tJmd0O2xoYXNoMl9tYXNrOyBpJiM0MzsmIzQzOykgewogCQkJc3RydWN0IGluZXRfbGlzdGVuX2hhc2hidWNrZXQgKmlsYjsKIAkJCXN0cnVjdCBobGlzdF9udWxsc19ub2RlICpub2RlOwomIzQzOwkJCXN0cnVjdCBzb2NrICpza19hcnJbU0tBUlJfU1pdOwomIzQzOwkJCXN0cnVjdCBzb2NrICpjdXJzb3I7CiYjNDM7CQkJaW50IG51bV9hcnJbU0tBUlJfU1pdOwomIzQzOwkJCWludCBpZHgsIGFjY3VtLCByZXM7CiYjNDM7CQkJYm9vbCB1c2VfY3Vyc29yOwogCiYjNDM7cmVzdW1lX2xpc3Rlbl93YWxrOgogCQkJbnVtID0gMDsKJiM0MzsJCQlhY2N1bSA9IDA7CiAJCQlpbGIgPSAmYW1wO2hhc2hpbmZvLSZndDtsaGFzaDJbaV07CiAKIAkJCWlmIChobGlzdF9udWxsc19lbXB0eSgmYW1wO2lsYi0mZ3Q7bnVsbHNfaGVhZCkpIHsKQEAgLTM0NCw1MiAmIzQzOzQxMCw4MCBAQCBzdGF0aWMgdm9pZCB0Y3BfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCXNwaW5fbG9jaygmYW1wO2lsYi0mZ3Q7bG9jayk7Ci0JCQlza19udWxsc19mb3JfZWFjaChzaywgbm9kZSwgJmFtcDtpbGItJmd0O251bGxzX2hlYWQpIHsKLQkJCQlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CiYjNDM7CQkJY3Vyc29yID0gY2JfZGF0YS0mZ3Q7ZHVtcF9jdXJzb3I7CiYjNDM7CQkJdXNlX2N1cnNvciA9IGN1cnNvciAmYW1wOyZhbXA7CiYjNDM7CQkJCSAgICAgY2JfZGF0YS0mZ3Q7ZHVtcF9jdXJzb3JfdHlwZSA9PQomIzQzOwkJCQkgICAgIElORVRfRElBR19EVU1QX0NVUlNPUl9UQ1BfTElTVEVOICZhbXA7JmFtcDsKJiM0MzsJCQkJICAgICBjYl9kYXRhLSZndDtkdW1wX2N1cnNvcl9zbG90ID09IGkgJmFtcDsmYW1wOwomIzQzOwkJCQkgICAgICFobGlzdF9udWxsc191bmhhc2hlZCgmYW1wO2N1cnNvci0mZ3Q7c2tfbnVsbHNfbm9kZSkgJmFtcDsmYW1wOwomIzQzOwkJCQkgICAgIGN1cnNvci0mZ3Q7c2tfbnVsbHNfbm9kZS5wcHJldiAhPSBMSVNUX1BPSVNPTjI7CiYjNDM7CQkJbm9kZSA9IHVzZV9jdXJzb3IgPyBjdXJzb3ItJmd0O3NrX251bGxzX25vZGUubmV4dCA6CiYjNDM7CQkJCQkgICAgaWxiLSZndDtudWxsc19oZWFkLmZpcnN0OwomIzQzOwkJCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X2Zyb20oc2ssIG5vZGUsIHNrX251bGxzX25vZGUpIHsKJiM0MzsJCQkJaWYgKCF1c2VfY3Vyc29yICZhbXA7JmFtcDsgbnVtICZsdDsgc19udW0pCiYjNDM7CQkJCQlnb3RvIG5leHRfbGlzdGVuOwogCi0JCQkJaWYgKCFuZXRfZXEoc29ja19uZXQoc2spLCBuZXQpKQotCQkJCQljb250aW51ZTsKJiM0MzsJCQkJc29ja19ob2xkKHNrKTsKJiM0MzsJCQkJbnVtX2FyclthY2N1bV0gPSBudW07CiYjNDM7CQkJCXNrX2FyclthY2N1bV0gPSBzazsKJiM0MzsJCQkJaWYgKCYjNDM7JiM0MzthY2N1bSA9PSBTS0FSUl9TWikKJiM0MzsJCQkJCWJyZWFrOwogCi0JCQkJaWYgKG51bSAmbHQ7IHNfbnVtKSB7Ci0JCQkJCW51bSYjNDM7JiM0Mzs7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KJiM0MztuZXh0X2xpc3RlbjoKJiM0MzsJCQkJJiM0MzsmIzQzO251bTsKJiM0MzsJCQl9CiYjNDM7CQkJc3Bpbl91bmxvY2soJmFtcDtpbGItJmd0O2xvY2spOwogCiYjNDM7CQkJcmVzID0gMDsKJiM0MzsJCQlmb3IgKGlkeCA9IDA7IGlkeCAmbHQ7IGFjY3VtOyBpZHgmIzQzOyYjNDM7KSB7CiYjNDM7CQkJCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQ7CiYjNDM7CiYjNDM7CQkJCXNrID0gc2tfYXJyW2lkeF07CiYjNDM7CQkJCWlmICghbmV0X2VxKHNvY2tfbmV0KHNrKSwgbmV0KSkKJiM0MzsJCQkJCWdvdG8gcHJvY2Vzc2VkX2xpc3Rlbl9zazsKJiM0MzsKJiM0MzsJCQkJaW5ldCA9IGluZXRfc2soc2spOwogCQkJCWlmIChyLSZndDtzZGlhZ19mYW1pbHkgIT0gQUZfVU5TUEVDICZhbXA7JmFtcDsKIAkJCQkgICAgc2stJmd0O3NrX2ZhbWlseSAhPSByLSZndDtzZGlhZ19mYW1pbHkpCi0JCQkJCWdvdG8gbmV4dF9saXN0ZW47CiYjNDM7CQkJCQlnb3RvIHByb2Nlc3NlZF9saXN0ZW5fc2s7CiAKIAkJCQlpZiAoci0mZ3Q7aWQuaWRpYWdfc3BvcnQgIT0gaW5ldC0mZ3Q7aW5ldF9zcG9ydCAmYW1wOyZhbXA7CiAJCQkJICAgIHItJmd0O2lkLmlkaWFnX3Nwb3J0KQotCQkJCQlnb3RvIG5leHRfbGlzdGVuOwotCi0JCQkJaWYgKCFpbmV0X2RpYWdfYmNfc2soY2JfZGF0YSwgc2spKQotCQkJCQlnb3RvIG5leHRfbGlzdGVuOwomIzQzOwkJCQkJZ290byBwcm9jZXNzZWRfbGlzdGVuX3NrOwogCi0JCQkJaWYgKGluZXRfc2tfZGlhZ19maWxsKHNrLCBpbmV0X2NzayhzayksIHNrYiwKLQkJCQkJCSAgICAgIGNiLCByLCBOTE1fRl9NVUxUSSwKLQkJCQkJCSAgICAgIG5ldF9hZG1pbikgJmx0OyAwKSB7Ci0JCQkJCXNwaW5fdW5sb2NrKCZhbXA7aWxiLSZndDtsb2NrKTsKLQkJCQkJZ290byBkb25lOwomIzQzOwkJCQlpZiAocmVzICZndDs9IDAgJmFtcDsmYW1wOyBpbmV0X2RpYWdfYmNfc2soY2JfZGF0YSwgc2spKSB7CiYjNDM7CQkJCQlyZXMgPSBpbmV0X3NrX2RpYWdfZmlsbChzaywgaW5ldF9jc2soc2spLAomIzQzOwkJCQkJCQkJc2tiLCBjYiwgciwgTkxNX0ZfTVVMVEksCiYjNDM7CQkJCQkJCQluZXRfYWRtaW4pOwomIzQzOwkJCQkJaWYgKHJlcyAmbHQ7IDApCiYjNDM7CQkJCQkJbnVtID0gbnVtX2FycltpZHhdOwogCQkJCX0KJiM0Mztwcm9jZXNzZWRfbGlzdGVuX3NrOgomIzQzOwkJCQlpZiAocmVzICZndDs9IDApCiYjNDM7CQkJCQl0Y3BfZGlhZ19zYXZlX2N1cnNvcihjYl9kYXRhLAomIzQzOwkJCQkJCQkgICAgIElORVRfRElBR19EVU1QX0NVUlNPUl9UQ1BfTElTVEVOLAomIzQzOwkJCQkJCQkgICAgIGksIHNrKTsKJiM0MzsJCQkJc29ja19wdXQoc2spOwomIzQzOwkJCX0KJiM0MzsJCQlpZiAocmVzICZsdDsgMCkKJiM0MzsJCQkJZ290byBkb25lOwogCi1uZXh0X2xpc3RlbjoKLQkJCQkmIzQzOyYjNDM7bnVtOwomIzQzOwkJCWNvbmRfcmVzY2hlZCgpOwomIzQzOwomIzQzOwkJCWlmIChhY2N1bSA9PSBTS0FSUl9TWikgewomIzQzOwkJCQlzX251bSA9IDA7CiYjNDM7CQkJCWdvdG8gcmVzdW1lX2xpc3Rlbl93YWxrOwogCQkJfQotCQkJc3Bpbl91bmxvY2soJmFtcDtpbGItJmd0O2xvY2spOwogCiYjNDM7CQkJaW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKGNiX2RhdGEpOwogCQkJc19udW0gPSAwOwogCQl9CiBza2lwX2xpc3Rlbl9odDoKJiM0MzsJCWluZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvcihjYl9kYXRhKTsKIAkJY2ItJmd0O2FyZ3NbMF0gPSAxOwogCQlzX2kgPSBudW0gPSBzX251bSA9IDA7CiAJfQogCi0vKiBQcm9jZXNzIGEgbWF4aW11bSBvZiBTS0FSUl9TWiBzb2NrZXRzIGF0IGEgdGltZSB3aGVuIHdhbGtpbmcgaGFzaCBidWNrZXRzCi0gKiB3aXRoIGJoIGRpc2FibGVkLgotICovCi0jZGVmaW5lIFNLQVJSX1NaIDE2Ci0KIAkvKiBEdW1wIGJvdW5kIGJ1dCBpbmFjdGl2ZSAobm90IGxpc3RlbmluZywgY29ubmVjdGluZywgZXRjLikgc29ja2V0cyAqLwogCWlmIChjYi0mZ3Q7YXJnc1swXSA9PSAxKSB7CiAJCWlmICghKGlkaWFnX3N0YXRlcyAmYW1wOyBUQ1BGX0JPVU5EX0lOQUNUSVZFKSkKQEAgLTM5OSw4ICYjNDM7NDkzLDEwIEBAIHN0YXRpYyB2b2lkIHRjcF9kaWFnX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLAogCQkJc3RydWN0IGluZXRfYmluZF9oYXNoYnVja2V0ICppYmI7CiAJCQlzdHJ1Y3QgaW5ldF9iaW5kMl9idWNrZXQgKnRiMjsKIAkJCXN0cnVjdCBzb2NrICpza19hcnJbU0tBUlJfU1pdOwomIzQzOwkJCXN0cnVjdCBzb2NrICpjdXJzb3I7CiAJCQlpbnQgbnVtX2FycltTS0FSUl9TWl07CiAJCQlpbnQgaWR4LCBhY2N1bSwgcmVzOwomIzQzOwkJCWJvb2wgdXNlX2N1cnNvcjsKIAogcmVzdW1lX2JpbmRfd2FsazoKIAkJCW51bSA9IDA7CkBAIC00MTIsMzQgJiM0Mzs1MDgsMzggQEAgc3RhdGljIHZvaWQgdGNwX2RpYWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsCiAJCQkJY29udGludWU7CiAJCQl9CiAJCQlzcGluX2xvY2tfYmgoJmFtcDtpYmItJmd0O2xvY2spOwotCQkJaW5ldF9iaW5kX2J1Y2tldF9mb3JfZWFjaCh0YjIsICZhbXA7aWJiLSZndDtjaGFpbikgewotCQkJCWlmICghbmV0X2VxKGliMl9uZXQodGIyKSwgbmV0KSkKLQkJCQkJY29udGludWU7Ci0KLQkJCQlza19mb3JfZWFjaF9ib3VuZChzaywgJmFtcDt0YjItJmd0O293bmVycykgewotCQkJCQlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7Ci0KLQkJCQkJaWYgKG51bSAmbHQ7IHNfbnVtKQotCQkJCQkJZ290byBuZXh0X2JpbmQ7Ci0KLQkJCQkJaWYgKHNrLSZndDtza19zdGF0ZSAhPSBUQ1BfQ0xPU0UgfHwKLQkJCQkJICAgICFpbmV0LSZndDtpbmV0X251bSkKLQkJCQkJCWdvdG8gbmV4dF9iaW5kOwotCi0JCQkJCWlmIChyLSZndDtzZGlhZ19mYW1pbHkgIT0gQUZfVU5TUEVDICZhbXA7JmFtcDsKLQkJCQkJICAgIHItJmd0O3NkaWFnX2ZhbWlseSAhPSBzay0mZ3Q7c2tfZmFtaWx5KQotCQkJCQkJZ290byBuZXh0X2JpbmQ7Ci0KLQkJCQkJaWYgKCFpbmV0X2RpYWdfYmNfc2soY2JfZGF0YSwgc2spKQotCQkJCQkJZ290byBuZXh0X2JpbmQ7Ci0KLQkJCQkJc29ja19ob2xkKHNrKTsKLQkJCQkJbnVtX2FyclthY2N1bV0gPSBudW07Ci0JCQkJCXNrX2FyclthY2N1bV0gPSBzazsKLQkJCQkJaWYgKCYjNDM7JiM0MzthY2N1bSA9PSBTS0FSUl9TWikKJiM0MzsJCQljdXJzb3IgPSBjYl9kYXRhLSZndDtkdW1wX2N1cnNvcjsKJiM0MzsJCQl1c2VfY3Vyc29yID0gY3Vyc29yICZhbXA7JmFtcDsKJiM0MzsJCQkJICAgICBjYl9kYXRhLSZndDtkdW1wX2N1cnNvcl90eXBlID09CiYjNDM7CQkJCSAgICAgSU5FVF9ESUFHX0RVTVBfQ1VSU09SX1RDUF9CSU5EICZhbXA7JmFtcDsKJiM0MzsJCQkJICAgICBjYl9kYXRhLSZndDtkdW1wX2N1cnNvcl9zbG90ID09IGkgJmFtcDsmYW1wOwomIzQzOwkJCQkgICAgICFobGlzdF91bmhhc2hlZCgmYW1wO2N1cnNvci0mZ3Q7c2tfYmluZF9ub2RlKSAmYW1wOyZhbXA7CiYjNDM7CQkJCSAgICAgY3Vyc29yLSZndDtza19iaW5kX25vZGUucHByZXYgIT0gTElTVF9QT0lTT04yICZhbXA7JmFtcDsKJiM0MzsJCQkJICAgICBpbmV0X2NzayhjdXJzb3IpLSZndDtpY3NrX2JpbmQyX2hhc2g7CiYjNDM7CQkJaWYgKHVzZV9jdXJzb3IpIHsKJiM0MzsJCQkJdGIyID0gaW5ldF9jc2soY3Vyc29yKS0mZ3Q7aWNza19iaW5kMl9oYXNoOwomIzQzOwkJCQlzayA9IGN1cnNvcjsKJiM0MzsJCQkJaWYgKHRjcF9kaWFnX2JpbmRfY29sbGVjdF9vd25lcnNfY29udGludWUoc2ssIHNrX2FyciwKJiM0MzsJCQkJCQkJCQkgIG51bV9hcnIsCiYjNDM7CQkJCQkJCQkJICAmYW1wO2FjY3VtLAomIzQzOwkJCQkJCQkJCSAgJmFtcDtudW0pKQomIzQzOwkJCQkJZ290byBwYXVzZV9iaW5kX3dhbGs7CiYjNDM7CQkJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlKHRiMiwgbm9kZSkgewomIzQzOwkJCQkJaWYgKHRjcF9kaWFnX2JpbmRfY29sbGVjdF9vd25lcnMoJmFtcDt0YjItJmd0O293bmVycywKJiM0MzsJCQkJCQkJCQkgc2tfYXJyLAomIzQzOwkJCQkJCQkJCSBudW1fYXJyLAomIzQzOwkJCQkJCQkJCSAmYW1wO2FjY3VtLAomIzQzOwkJCQkJCQkJCSAmYW1wO251bSwgMCkpCiYjNDM7CQkJCQkJZ290byBwYXVzZV9iaW5kX3dhbGs7CiYjNDM7CQkJCX0KJiM0MzsJCQl9IGVsc2UgewomIzQzOwkJCQlpbmV0X2JpbmRfYnVja2V0X2Zvcl9lYWNoKHRiMiwgJmFtcDtpYmItJmd0O2NoYWluKSB7CiYjNDM7CQkJCQlpZiAodGNwX2RpYWdfYmluZF9jb2xsZWN0X293bmVycygmYW1wO3RiMi0mZ3Q7b3duZXJzLAomIzQzOwkJCQkJCQkJCSBza19hcnIsCiYjNDM7CQkJCQkJCQkJIG51bV9hcnIsCiYjNDM7CQkJCQkJCQkJICZhbXA7YWNjdW0sCiYjNDM7CQkJCQkJCQkJICZhbXA7bnVtLCBzX251bSkpCiAJCQkJCQlnb3RvIHBhdXNlX2JpbmRfd2FsazsKLW5leHRfYmluZDoKLQkJCQkJbnVtJiM0MzsmIzQzOzsKIAkJCQl9CiAJCQl9CiBwYXVzZV9iaW5kX3dhbGs6CkBAIC00NDcsMTUgJiM0Mzs1NDcsMzMgQEAgc3RhdGljIHZvaWQgdGNwX2RpYWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsCiAKIAkJCXJlcyA9IDA7CiAJCQlmb3IgKGlkeCA9IDA7IGlkeCAmbHQ7IGFjY3VtOyBpZHgmIzQzOyYjNDM7KSB7Ci0JCQkJaWYgKHJlcyAmZ3Q7PSAwKSB7Ci0JCQkJCXJlcyA9IGluZXRfc2tfZGlhZ19maWxsKHNrX2FycltpZHhdLAotCQkJCQkJCQlOVUxMLCBza2IsIGNiLAomIzQzOwkJCQlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0OwomIzQzOwomIzQzOwkJCQlzayA9IHNrX2FycltpZHhdOwomIzQzOwkJCQlpZiAoIW5ldF9lcShzb2NrX25ldChzayksIG5ldCkpCiYjNDM7CQkJCQlnb3RvIHB1dF9iaW5kX3NrOwomIzQzOwomIzQzOwkJCQlpbmV0ID0gaW5ldF9zayhzayk7CiYjNDM7CQkJCWlmIChzay0mZ3Q7c2tfc3RhdGUgIT0gVENQX0NMT1NFIHx8ICFpbmV0LSZndDtpbmV0X251bSkKJiM0MzsJCQkJCWdvdG8gcHV0X2JpbmRfc2s7CiYjNDM7CiYjNDM7CQkJCWlmIChyLSZndDtzZGlhZ19mYW1pbHkgIT0gQUZfVU5TUEVDICZhbXA7JmFtcDsKJiM0MzsJCQkJICAgIHItJmd0O3NkaWFnX2ZhbWlseSAhPSBzay0mZ3Q7c2tfZmFtaWx5KQomIzQzOwkJCQkJZ290byBwdXRfYmluZF9zazsKJiM0MzsKJiM0MzsJCQkJaWYgKHJlcyAmZ3Q7PSAwICZhbXA7JmFtcDsgaW5ldF9kaWFnX2JjX3NrKGNiX2RhdGEsIHNrKSkgewomIzQzOwkJCQkJcmVzID0gaW5ldF9za19kaWFnX2ZpbGwoc2ssIE5VTEwsIHNrYiwgY2IsCiAJCQkJCQkJCXIsIE5MTV9GX01VTFRJLAogCQkJCQkJCQluZXRfYWRtaW4pOwogCQkJCQlpZiAocmVzICZsdDsgMCkKIAkJCQkJCW51bSA9IG51bV9hcnJbaWR4XTsKIAkJCQl9Ci0JCQkJc29ja19wdXQoc2tfYXJyW2lkeF0pOwomIzQzOwkJCQlpZiAocmVzICZndDs9IDApCiYjNDM7CQkJCQl0Y3BfZGlhZ19zYXZlX2N1cnNvcihjYl9kYXRhLAomIzQzOwkJCQkJCQkgICAgIElORVRfRElBR19EVU1QX0NVUlNPUl9UQ1BfQklORCwKJiM0MzsJCQkJCQkJICAgICBpLCBzayk7CiYjNDM7cHV0X2JpbmRfc2s6CiYjNDM7CQkJCXNvY2tfcHV0KHNrKTsKIAkJCX0KIAkJCWlmIChyZXMgJmx0OyAwKQogCQkJCWdvdG8gZG9uZTsKQEAgLTQ2MywxMyAmIzQzOzU4MSwxNSBAQCBzdGF0aWMgdm9pZCB0Y3BfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwKIAkJCWNvbmRfcmVzY2hlZCgpOwogCiAJCQlpZiAoYWNjdW0gPT0gU0tBUlJfU1opIHsKLQkJCQlzX251bSA9IG51bSAmIzQzOyAxOwomIzQzOwkJCQlzX251bSA9IDA7CiAJCQkJZ290byByZXN1bWVfYmluZF93YWxrOwogCQkJfQogCiYjNDM7CQkJaW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKGNiX2RhdGEpOwogCQkJc19udW0gPSAwOwogCQl9CiBza2lwX2JpbmRfaHQ6CiYjNDM7CQlpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3IoY2JfZGF0YSk7CiAJCWNiLSZndDthcmdzWzBdID0gMjsKIAkJc19pID0gbnVtID0gc19udW0gPSAwOwogCX0KQEAgLTQ4Miw0MiAmIzQzOzYwMiwzMyBAQCBzdGF0aWMgdm9pZCB0Y3BfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwKIAkJc3BpbmxvY2tfdCAqbG9jayA9IGluZXRfZWhhc2hfbG9ja3AoaGFzaGluZm8sIGkpOwogCQlzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbm9kZTsKIAkJc3RydWN0IHNvY2sgKnNrX2FycltTS0FSUl9TWl07CiYjNDM7CQlzdHJ1Y3Qgc29jayAqY3Vyc29yOwogCQlpbnQgbnVtX2FycltTS0FSUl9TWl07CiAJCWludCBpZHgsIGFjY3VtLCByZXM7CiYjNDM7CQlib29sIHVzZV9jdXJzb3I7CiAKIAkJaWYgKGhsaXN0X251bGxzX2VtcHR5KCZhbXA7aGVhZC0mZ3Q7Y2hhaW4pKQogCQkJY29udGludWU7CiAKLQkJaWYgKGkgJmd0OyBzX2kpCiYjNDM7CQlpZiAoaSAmZ3Q7IHNfaSkgewomIzQzOwkJCWluZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvcihjYl9kYXRhKTsKIAkJCXNfbnVtID0gMDsKJiM0MzsJCX0KIAogbmV4dF9jaHVuazoKIAkJbnVtID0gMDsKIAkJYWNjdW0gPSAwOwogCQlzcGluX2xvY2tfYmgobG9jayk7Ci0JCXNrX251bGxzX2Zvcl9lYWNoKHNrLCBub2RlLCAmYW1wO2hlYWQtJmd0O2NoYWluKSB7Ci0JCQlpbnQgc3RhdGU7Ci0KLQkJCWlmICghbmV0X2VxKHNvY2tfbmV0KHNrKSwgbmV0KSkKLQkJCQljb250aW51ZTsKLQkJCWlmIChudW0gJmx0OyBzX251bSkKLQkJCQlnb3RvIG5leHRfbm9ybWFsOwotCQkJc3RhdGUgPSAoc2stJmd0O3NrX3N0YXRlID09IFRDUF9USU1FX1dBSVQpID8KLQkJCQlSRUFEX09OQ0UoaW5ldF90d3NrKHNrKS0mZ3Q7dHdfc3Vic3RhdGUpIDogc2stJmd0O3NrX3N0YXRlOwotCQkJaWYgKCEoaWRpYWdfc3RhdGVzICZhbXA7ICgxICZsdDsmbHQ7IHN0YXRlKSkpCi0JCQkJZ290byBuZXh0X25vcm1hbDsKLQkJCWlmIChyLSZndDtzZGlhZ19mYW1pbHkgIT0gQUZfVU5TUEVDICZhbXA7JmFtcDsKLQkJCSAgICBzay0mZ3Q7c2tfZmFtaWx5ICE9IHItJmd0O3NkaWFnX2ZhbWlseSkKLQkJCQlnb3RvIG5leHRfbm9ybWFsOwotCQkJaWYgKHItJmd0O2lkLmlkaWFnX3Nwb3J0ICE9IGh0b25zKFJFQURfT05DRShzay0mZ3Q7c2tfbnVtKSkgJmFtcDsmYW1wOwotCQkJICAgIHItJmd0O2lkLmlkaWFnX3Nwb3J0KQotCQkJCWdvdG8gbmV4dF9ub3JtYWw7Ci0JCQlpZiAoci0mZ3Q7aWQuaWRpYWdfZHBvcnQgIT0gc2stJmd0O3NrX2Rwb3J0ICZhbXA7JmFtcDsKLQkJCSAgICByLSZndDtpZC5pZGlhZ19kcG9ydCkKLQkJCQlnb3RvIG5leHRfbm9ybWFsOwotCQkJdHdza19idWlsZF9hc3NlcnQoKTsKLQotCQkJaWYgKCFpbmV0X2RpYWdfYmNfc2soY2JfZGF0YSwgc2spKQomIzQzOwkJY3Vyc29yID0gY2JfZGF0YS0mZ3Q7ZHVtcF9jdXJzb3I7CiYjNDM7CQl1c2VfY3Vyc29yID0gY3Vyc29yICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgIGNiX2RhdGEtJmd0O2R1bXBfY3Vyc29yX3R5cGUgPT0KJiM0MzsJCQkgICAgIElORVRfRElBR19EVU1QX0NVUlNPUl9UQ1BfRUhBU0ggJmFtcDsmYW1wOwomIzQzOwkJCSAgICAgY2JfZGF0YS0mZ3Q7ZHVtcF9jdXJzb3Jfc2xvdCA9PSBpICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgICFobGlzdF9udWxsc191bmhhc2hlZCgmYW1wO2N1cnNvci0mZ3Q7c2tfbnVsbHNfbm9kZSkgJmFtcDsmYW1wOwomIzQzOwkJCSAgICAgY3Vyc29yLSZndDtza19udWxsc19ub2RlLnBwcmV2ICE9IExJU1RfUE9JU09OMjsKJiM0MzsJCW5vZGUgPSB1c2VfY3Vyc29yID8gY3Vyc29yLSZndDtza19udWxsc19ub2RlLm5leHQgOiBoZWFkLSZndDtjaGFpbi5maXJzdDsKJiM0MzsJCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X2Zyb20oc2ssIG5vZGUsIHNrX251bGxzX25vZGUpIHsKJiM0MzsJCQlpZiAoIXVzZV9jdXJzb3IgJmFtcDsmYW1wOyBudW0gJmx0OyBzX251bSkKIAkJCQlnb3RvIG5leHRfbm9ybWFsOwogCiAJCQlpZiAoIXJlZmNvdW50X2luY19ub3RfemVybygmYW1wO3NrLSZndDtza19yZWZjbnQpKQpAQCAtNTM0LDEzICYjNDM7NjQ1LDQyIEBAIHN0YXRpYyB2b2lkIHRjcF9kaWFnX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLAogCiAJCXJlcyA9IDA7CiAJCWZvciAoaWR4ID0gMDsgaWR4ICZsdDsgYWNjdW07IGlkeCYjNDM7JiM0MzspIHsKLQkJCWlmIChyZXMgJmd0Oz0gMCkgewotCQkJCXJlcyA9IHNrX2RpYWdfZmlsbChza19hcnJbaWR4XSwgc2tiLCBjYiwgciwKLQkJCQkJCSAgIE5MTV9GX01VTFRJLCBuZXRfYWRtaW4pOwomIzQzOwkJCWludCBzdGF0ZTsKJiM0MzsKJiM0MzsJCQlzayA9IHNrX2FycltpZHhdOwomIzQzOwkJCWlmICghbmV0X2VxKHNvY2tfbmV0KHNrKSwgbmV0KSkKJiM0MzsJCQkJZ290byBwdXRfZXN0YWJfc2s7CiYjNDM7CiYjNDM7CQkJc3RhdGUgPSAoc2stJmd0O3NrX3N0YXRlID09IFRDUF9USU1FX1dBSVQpID8KJiM0MzsJCQkJUkVBRF9PTkNFKGluZXRfdHdzayhzayktJmd0O3R3X3N1YnN0YXRlKSA6IHNrLSZndDtza19zdGF0ZTsKJiM0MzsJCQlpZiAoIShpZGlhZ19zdGF0ZXMgJmFtcDsgKDEgJmx0OyZsdDsgc3RhdGUpKSkKJiM0MzsJCQkJZ290byBwdXRfZXN0YWJfc2s7CiYjNDM7CiYjNDM7CQkJaWYgKHItJmd0O3NkaWFnX2ZhbWlseSAhPSBBRl9VTlNQRUMgJmFtcDsmYW1wOwomIzQzOwkJCSAgICBzay0mZ3Q7c2tfZmFtaWx5ICE9IHItJmd0O3NkaWFnX2ZhbWlseSkKJiM0MzsJCQkJZ290byBwdXRfZXN0YWJfc2s7CiYjNDM7CiYjNDM7CQkJaWYgKHItJmd0O2lkLmlkaWFnX3Nwb3J0ICE9IGh0b25zKFJFQURfT05DRShzay0mZ3Q7c2tfbnVtKSkgJmFtcDsmYW1wOwomIzQzOwkJCSAgICByLSZndDtpZC5pZGlhZ19zcG9ydCkKJiM0MzsJCQkJZ290byBwdXRfZXN0YWJfc2s7CiYjNDM7CiYjNDM7CQkJaWYgKHItJmd0O2lkLmlkaWFnX2Rwb3J0ICE9IHNrLSZndDtza19kcG9ydCAmYW1wOyZhbXA7CiYjNDM7CQkJICAgIHItJmd0O2lkLmlkaWFnX2Rwb3J0KQomIzQzOwkJCQlnb3RvIHB1dF9lc3RhYl9zazsKJiM0MzsKJiM0MzsJCQl0d3NrX2J1aWxkX2Fzc2VydCgpOwomIzQzOwkJCWlmIChyZXMgJmd0Oz0gMCAmYW1wOyZhbXA7IGluZXRfZGlhZ19iY19zayhjYl9kYXRhLCBzaykpIHsKJiM0MzsJCQkJcmVzID0gc2tfZGlhZ19maWxsKHNrLCBza2IsIGNiLCByLCBOTE1fRl9NVUxUSSwKJiM0MzsJCQkJCQkgICBuZXRfYWRtaW4pOwogCQkJCWlmIChyZXMgJmx0OyAwKQogCQkJCQludW0gPSBudW1fYXJyW2lkeF07CiAJCQl9Ci0JCQlzb2NrX2dlbl9wdXQoc2tfYXJyW2lkeF0pOwomIzQzOwkJCWlmIChyZXMgJmd0Oz0gMCkKJiM0MzsJCQkJdGNwX2RpYWdfc2F2ZV9jdXJzb3IoY2JfZGF0YSwKJiM0MzsJCQkJCQkgICAgIElORVRfRElBR19EVU1QX0NVUlNPUl9UQ1BfRUhBU0gsCiYjNDM7CQkJCQkJICAgICBpLCBzayk7CiYjNDM7cHV0X2VzdGFiX3NrOgomIzQzOwkJCXNvY2tfZ2VuX3B1dChzayk7CiAJCX0KIAkJaWYgKHJlcyAmbHQ7IDApCiAJCQlicmVhazsKQEAgLTU0OCw5ICYjNDM7Njg4LDExIEBAIHN0YXRpYyB2b2lkIHRjcF9kaWFnX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLAogCQljb25kX3Jlc2NoZWQoKTsKIAogCQlpZiAoYWNjdW0gPT0gU0tBUlJfU1opIHsKLQkJCXNfbnVtID0gbnVtICYjNDM7IDE7CiYjNDM7CQkJc19udW0gPSAwOwogCQkJZ290byBuZXh0X2NodW5rOwogCQl9CiYjNDM7CiYjNDM7CQlpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3IoY2JfZGF0YSk7CiAJfQogCiBkb25lOgpkaWZmIC0tZ2l0IGEvbmV0L21wdGNwL21wdGNwX2RpYWcuYyBiL25ldC9tcHRjcC9tcHRjcF9kaWFnLmMKaW5kZXggMTM2YzJkMDVjMGVlYi4uOTgxZTY0MzQzMDM5MCAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL21wdGNwX2RpYWcuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jCkBAIC02LDEyICYjNDM7NiwyNSBAQAogICogQXV0aG9yOiBQYW9sbyBBYmVuaSAmbHQ7cGFiZW5pQHJlZGhhdC5jb20mZ3Q7CiAgKi8KIAomIzQzOy8qIFByb2Nlc3MgYSBib3VuZGVkIG51bWJlciBvZiBsaXN0ZW5lcnMgcGVyIGJ1Y2tldCBsb2NrIGhvbGQuICovCiYjNDM7I2RlZmluZSBNUFRDUF9ESUFHX0JVTEtfU1ogMTYKJiM0MzsKICNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9uZXQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pbmV0X2RpYWcuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvbmV0bGluay5oJmd0OwogI2luY2x1ZGUgJiMzNDtwcm90b2NvbC5oJiMzNDsKIAomIzQzO3N0YXRpYyB2b2lkIG1wdGNwX2RpYWdfc2F2ZV9jdXJzb3Ioc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEsCiYjNDM7CQkJCSAgIHVuc2lnbmVkIGludCBzbG90LCBzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOwlzb2NrX2hvbGQoc2spOwomIzQzOwlpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3IoY2JfZGF0YSk7CiYjNDM7CWNiX2RhdGEtJmd0O2R1bXBfY3Vyc29yID0gc2s7CiYjNDM7CWNiX2RhdGEtJmd0O2R1bXBfY3Vyc29yX3Nsb3QgPSBzbG90OwomIzQzOwljYl9kYXRhLSZndDtkdW1wX2N1cnNvcl90eXBlID0gSU5FVF9ESUFHX0RVTVBfQ1VSU09SX01QVENQX0xJU1RFTjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHNrX2RpYWdfZHVtcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsCiAJCQlzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsCiAJCQljb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX3JlcV92MiAqcmVxLApAQCAtNzcsNiAmIzQzOzkwLDcgQEAgc3RhdGljIHZvaWQgbXB0Y3BfZGlhZ19kdW1wX2xpc3RlbmVycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmEKIAkJCQkgICAgICBib29sIG5ldF9hZG1pbikKIHsKIAlzdHJ1Y3QgbXB0Y3BfZGlhZ19jdHggKmRpYWdfY3R4ID0gKHZvaWQgKiljYi0mZ3Q7Y3R4OwomIzQzOwlzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSAqY2JfZGF0YSA9IGNiLSZndDtkYXRhOwogCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0mZ3Q7c2spOwogCXN0cnVjdCBpbmV0X2hhc2hpbmZvICpoaW5mbzsKIAlpbnQgaTsKQEAgLTg2LDYyICYjNDM7MTAwLDk4IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2RpYWdfZHVtcF9saXN0ZW5lcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhCiAJZm9yIChpID0gZGlhZ19jdHgtJmd0O2xfc2xvdDsgaSAmbHQ7PSBoaW5mby0mZ3Q7bGhhc2gyX21hc2s7IGkmIzQzOyYjNDM7KSB7CiAJCXN0cnVjdCBpbmV0X2xpc3Rlbl9oYXNoYnVja2V0ICppbGI7CiAJCXN0cnVjdCBobGlzdF9udWxsc19ub2RlICpub2RlOwotCQlzdHJ1Y3Qgc29jayAqc2s7Ci0JCWludCBudW0gPSAwOwotCiYjNDM7CQlzdHJ1Y3Qgc29jayAqdG1wLCAqc2ssICpza19hcnJbTVBUQ1BfRElBR19CVUxLX1NaXTsKJiM0MzsJCXN0cnVjdCBzb2NrICpjdXJzb3I7CiYjNDM7CQlpbnQgYWNjdW0sIGlkeCwgbnVtLCByZXQ7CiYjNDM7CQlpbnQgbnVtX2FycltNUFRDUF9ESUFHX0JVTEtfU1pdOwomIzQzOwkJYm9vbCB1c2VfY3Vyc29yOwomIzQzOwomIzQzO3Jlc3VtZV9saXN0ZW5fd2FsazoKJiM0MzsJCW51bSA9IDA7CiYjNDM7CQlhY2N1bSA9IDA7CiAJCWlsYiA9ICZhbXA7aGluZm8tJmd0O2xoYXNoMltpXTsKJiM0MzsJCXJldCA9IDA7CiAKIAkJcmN1X3JlYWRfbG9jaygpOwogCQlzcGluX2xvY2soJmFtcDtpbGItJmd0O2xvY2spOwotCQlza19udWxsc19mb3JfZWFjaChzaywgbm9kZSwgJmFtcDtpbGItJmd0O251bGxzX2hlYWQpIHsKLQkJCWNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKmN0eCA9IG1wdGNwX3N1YmZsb3dfY3R4KHNrKTsKLQkJCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKLQkJCWludCByZXQ7Ci0KLQkJCWlmIChudW0gJmx0OyBkaWFnX2N0eC0mZ3Q7bF9udW0pCi0JCQkJZ290byBuZXh0X2xpc3RlbjsKLQotCQkJaWYgKCFjdHggfHwgc3RyY21wKGluZXRfY3NrKHNrKS0mZ3Q7aWNza191bHBfb3BzLSZndDtuYW1lLCAmIzM0O21wdGNwJiMzNDspKQotCQkJCWdvdG8gbmV4dF9saXN0ZW47Ci0KLQkJCXNrID0gY3R4LSZndDtjb25uOwotCQkJaWYgKCFzayB8fCAhbmV0X2VxKHNvY2tfbmV0KHNrKSwgbmV0KSkKLQkJCQlnb3RvIG5leHRfbGlzdGVuOwotCi0JCQlpZiAoci0mZ3Q7c2RpYWdfZmFtaWx5ICE9IEFGX1VOU1BFQyAmYW1wOyZhbXA7Ci0JCQkgICAgc2stJmd0O3NrX2ZhbWlseSAhPSByLSZndDtzZGlhZ19mYW1pbHkpCi0JCQkJZ290byBuZXh0X2xpc3RlbjsKLQotCQkJaWYgKHItJmd0O2lkLmlkaWFnX3Nwb3J0ICE9IGluZXQtJmd0O2luZXRfc3BvcnQgJmFtcDsmYW1wOwotCQkJICAgIHItJmd0O2lkLmlkaWFnX3Nwb3J0KQomIzQzOwkJY3Vyc29yID0gY2JfZGF0YS0mZ3Q7ZHVtcF9jdXJzb3I7CiYjNDM7CQl1c2VfY3Vyc29yID0gY3Vyc29yICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgIGNiX2RhdGEtJmd0O2R1bXBfY3Vyc29yX3R5cGUgPT0KJiM0MzsJCQkgICAgIElORVRfRElBR19EVU1QX0NVUlNPUl9NUFRDUF9MSVNURU4gJmFtcDsmYW1wOwomIzQzOwkJCSAgICAgY2JfZGF0YS0mZ3Q7ZHVtcF9jdXJzb3Jfc2xvdCA9PSBpICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgICFobGlzdF9udWxsc191bmhhc2hlZCgmYW1wO2N1cnNvci0mZ3Q7c2tfbnVsbHNfbm9kZSkgJmFtcDsmYW1wOwomIzQzOwkJCSAgICAgY3Vyc29yLSZndDtza19udWxsc19ub2RlLnBwcmV2ICE9IExJU1RfUE9JU09OMjsKJiM0MzsJCW5vZGUgPSB1c2VfY3Vyc29yID8gY3Vyc29yLSZndDtza19udWxsc19ub2RlLm5leHQgOgomIzQzOwkJCQkgICAgaWxiLSZndDtudWxsc19oZWFkLmZpcnN0OwomIzQzOwkJaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfZnJvbShzaywgbm9kZSwgc2tfbnVsbHNfbm9kZSkgewomIzQzOwkJCWlmICghdXNlX2N1cnNvciAmYW1wOyZhbXA7IG51bSAmbHQ7IGRpYWdfY3R4LSZndDtsX251bSkKIAkJCQlnb3RvIG5leHRfbGlzdGVuOwogCiAJCQlpZiAoIXJlZmNvdW50X2luY19ub3RfemVybygmYW1wO3NrLSZndDtza19yZWZjbnQpKQogCQkJCWdvdG8gbmV4dF9saXN0ZW47CiAKLQkJCXJldCA9IHNrX2RpYWdfZHVtcChzaywgc2tiLCBjYiwgciwgbmV0X2FkbWluKTsKLQotCQkJc29ja19wdXQoc2spOwotCi0JCQlpZiAocmV0ICZsdDsgMCkgewotCQkJCXNwaW5fdW5sb2NrKCZhbXA7aWxiLSZndDtsb2NrKTsKLQkJCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJCQlkaWFnX2N0eC0mZ3Q7bF9zbG90ID0gaTsKLQkJCQlkaWFnX2N0eC0mZ3Q7bF9udW0gPSBudW07Ci0JCQkJcmV0dXJuOwotCQkJfQotCQkJZGlhZ19jdHgtJmd0O2xfbnVtID0gbnVtICYjNDM7IDE7Ci0JCQludW0gPSAwOwomIzQzOwkJCW51bV9hcnJbYWNjdW1dID0gbnVtOwomIzQzOwkJCXNrX2FyclthY2N1bV0gPSBzazsKJiM0MzsJCQlpZiAoJiM0MzsmIzQzO2FjY3VtID09IE1QVENQX0RJQUdfQlVMS19TWikKJiM0MzsJCQkJYnJlYWs7CiBuZXh0X2xpc3RlbjoKIAkJCSYjNDM7JiM0MztudW07CiAJCX0KIAkJc3Bpbl91bmxvY2soJmFtcDtpbGItJmd0O2xvY2spOwogCQlyY3VfcmVhZF91bmxvY2soKTsKIAomIzQzOwkJZm9yIChpZHggPSAwOyBpZHggJmx0OyBhY2N1bTsgaWR4JiM0MzsmIzQzOykgewomIzQzOwkJCWNvbnN0IHN0cnVjdCB0Y3BfdWxwX29wcyAqdWxwX29wczsKJiM0MzsJCQljb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpjdHg7CiYjNDM7CQkJc3RydWN0IGluZXRfc29jayAqaW5ldDsKJiM0MzsKJiM0MzsJCQlzayA9IHNrX2FycltpZHhdOwomIzQzOwkJCXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJCQljdHggPSBtcHRjcF9zdWJmbG93X2N0eChzayk7CiYjNDM7CQkJdWxwX29wcyA9IFJFQURfT05DRShpbmV0X2NzayhzayktJmd0O2ljc2tfdWxwX29wcyk7CiYjNDM7CQkJaW5ldCA9IGluZXRfc2soc2spOwomIzQzOwkJCXRtcCA9IGN0eCA/IGN0eC0mZ3Q7Y29ubiA6IE5VTEw7CiYjNDM7CQkJaWYgKCFjdHggfHwgIXVscF9vcHMgfHwgc3RyY21wKHVscF9vcHMtJmd0O25hbWUsICYjMzQ7bXB0Y3AmIzM0OykgfHwKJiM0MzsJCQkgICAgIXRtcCB8fCAhbmV0X2VxKHNvY2tfbmV0KHRtcCksIG5ldCkgfHwKJiM0MzsJCQkgICAgKHItJmd0O3NkaWFnX2ZhbWlseSAhPSBBRl9VTlNQRUMgJmFtcDsmYW1wOwomIzQzOwkJCSAgICAgdG1wLSZndDtza19mYW1pbHkgIT0gci0mZ3Q7c2RpYWdfZmFtaWx5KSB8fAomIzQzOwkJCSAgICAoci0mZ3Q7aWQuaWRpYWdfc3BvcnQgIT0gaW5ldC0mZ3Q7aW5ldF9zcG9ydCAmYW1wOyZhbXA7CiYjNDM7CQkJICAgICByLSZndDtpZC5pZGlhZ19zcG9ydCkgfHwKJiM0MzsJCQkgICAgIXJlZmNvdW50X2luY19ub3RfemVybygmYW1wO3RtcC0mZ3Q7c2tfcmVmY250KSkgewomIzQzOwkJCQlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJCQkJZ290byBwcm9jZXNzZWRfbGlzdGVuZXJfc2s7CiYjNDM7CQkJfQomIzQzOwkJCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwkJCWlmIChyZXQgJmd0Oz0gMCkgewomIzQzOwkJCQlyZXQgPSBza19kaWFnX2R1bXAodG1wLCBza2IsIGNiLCByLCBuZXRfYWRtaW4pOwomIzQzOwkJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJCW51bSA9IG51bV9hcnJbaWR4XTsKJiM0MzsJCQl9CiYjNDM7CQkJc29ja19wdXQodG1wKTsKJiM0Mztwcm9jZXNzZWRfbGlzdGVuZXJfc2s6CiYjNDM7CQkJaWYgKHJldCAmZ3Q7PSAwKQomIzQzOwkJCQltcHRjcF9kaWFnX3NhdmVfY3Vyc29yKGNiX2RhdGEsIGksIHNrKTsKJiM0MzsJCQlzb2NrX3B1dChzayk7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkgewomIzQzOwkJCWRpYWdfY3R4LSZndDtsX3Nsb3QgPSBpOwomIzQzOwkJCWRpYWdfY3R4LSZndDtsX251bSA9IG51bTsKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQl9CiYjNDM7CiAJCWNvbmRfcmVzY2hlZCgpOwomIzQzOwomIzQzOwkJaWYgKGFjY3VtID09IE1QVENQX0RJQUdfQlVMS19TWikgewomIzQzOwkJCWRpYWdfY3R4LSZndDtsX251bSA9IDA7CiYjNDM7CQkJZ290byByZXN1bWVfbGlzdGVuX3dhbGs7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3IoY2JfZGF0YSk7CiAJCWRpYWdfY3R4LSZndDtsX251bSA9IDA7CiAJfQogCiYjNDM7CWluZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvcihjYl9kYXRhKTsKIAlkaWFnX2N0eC0mZ3Q7bF9udW0gPSAwOwogCWRpYWdfY3R4LSZndDtsX3Nsb3QgPSBpOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDEzMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDM1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXR3b3JraW5nIFN0YWNrIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdOKAmXMgdG91Y2hpbmcgc29tZSBjcnVjaWFsIGFyZWFzIG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrOiBgaW5ldF9kaWFnLmhgLCBgaW5ldF9kaWFnLmNgLCBgdGNwX2RpYWcuY2AsIGFuZCBgbXB0Y3BfZGlhZy5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyB0aGlzIG5ldyBjdXJzb3IgbWVjaGFuaXNtLCBzcGVjaWZpY2FsbHkgd2l0aGluIGB0Y3BfZGlhZ2AgYW5kIGBtcHRjcF9kaWFnYCwgZm9yIGR1bXBpbmcgc29ja2V0IGluZm9ybWF0aW9uLiBUaGlzIGlzIHNtYXJ0OyB0aGV5JiMzOTtyZSBhZGRpbmcgYGR1bXBfY3Vyc29yYCwgYGR1bXBfY3Vyc29yX3Nsb3RgLCBhbmQgYGR1bXBfY3Vyc29yX3R5cGVgIHRvIHRoZSBgc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGFgLiAgVGhhdCYjMzk7cyB0aGUga2V5IHRvIG1ha2luZyB0aGUgZHVtcGluZyBwcm9jZXNzIHJvYnVzdC4KClRoZSByZWFzb24gZm9yIHRoaXMgY2hhbmdlIGlzIGNsZWFyOiAgdGhlIGN1cnJlbnQgbWV0aG9kIHdhcyBwcm9uZSB0byBlcnJvcnMuIEl0IHdhcyBza2lwcGluZyBzb2NrZXRzIGJhc2VkIG9uIGEgY291bnQgKGBzX251bWApIHdoaWNoIGlzIHByb2JsZW1hdGljIHdoZW4gdGhlIGhhc2ggdGFibGUgc3RydWN0dXJlIGlzIGR5bmFtaWMuICBUaGlzIG5ldyBjdXJzb3IgbGV0cyBgdGNwX2RpYWdfZHVtcGAgcGljayB1cCAqZXhhY3RseSogd2hlcmUgaXQgbGVmdCBvZmYsIGF2b2lkaW5nIGJvdGggZHVwbGljYXRlZCBhbmQgbWlzc2VkIHNvY2tldHMuICBFeGNlbGxlbnQsIHRoYXQmIzM5O3MgYWRkcmVzc2luZyBhIHJlYWwgaXNzdWUuICBBbmQgdGhlIHNhbWUgZml4IGlzIGJlaW5nIGFwcGxpZWQgdG8gYG1wdGNwX2RpYWdfZHVtcF9saXN0ZW5lcnNgLCB3aGljaCBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gdGFrZSB0aGlzLgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGNvcmUgbmV0d29yayBjb21wb25lbnQuICBSZWFjaGFiaWxpdHkgYW5kIHRlc3RhYmlsaXR5IGFyZSBoaWdoOyBpdCYjMzk7cyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSBuZWVkIHRvIGZ1enogdGhvcm91Z2hseS4gTGV0JiMzOTtzIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGZvY3VzIHNob3VsZCBiZToKCiogICBJbiBgbmV0L2lwdjQvdGNwX2RpYWcuY2AsIHdlJiMzOTt2ZSBnb3QgYHRjcF9kaWFnX2R1bXBgIHdoaWNoIGlzIHRoZSBmdW5jdGlvbiB0aGF0IHJlcXVpcmVzIHNjcnV0aW55LgoqICAgSW4gYG5ldC9tcHRjcC9tcHRjcF9kaWFnLmNgLCB3ZSYjMzk7dmUgZ290IGBtcHRjcF9kaWFnX2R1bXBfbGlzdGVuZXJzYCwgd2hpY2ggaXMgYSBrZXkgb25lLiAgQW5kLCBhbHRob3VnaCBgbXB0Y3BfZGlhZ19kdW1wYCBpc24mIzM5O3QgZGlyZWN0bHkgbW9kaWZpZWQsIGl0IGNhbGxzIGBtcHRjcF9kaWFnX2R1bXBfbGlzdGVuZXJzYCwgc28gaXQmIzM5O3MgcHJvYmFibHkgd29ydGggYSBsb29rIGluIGZ1enppbmcgYXMgd2VsbCwgdG8gc2VlIGhvdyB0aGUgY3Vyc29yIHByb3BhZ2F0ZXMuCgpOb3csIGxldCYjMzk7cyBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uIHNldHRpbmdzIGVuYWJsZWQ6IGBDT05GSUdfSU5FVF9ESUFHYCwgYENPTkZJR19UQ1BfRElBR2AsIGFuZCBgQ09ORklHX01QVENQYCBhcmUgYWxsIGdvaW5nIHRvIGJlIHJlcXVpcmVkLCBvYnZpb3VzbHkuICBJJiMzOTtsbCBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgZm9yIE1QVENQIGFuZCBJTkVUX0RJQUcgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHdlIGhhdmVu4oCZdCBtaXNzZWQgYW55dGhpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgb3VyIGZ1enppbmcgYnVpbGRzIGFyZSBzZXQgdXAgY29ycmVjdGx5LiBUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBpbXByb3ZlbWVudCBpbiB0aGUgbmV0d29yayBkaWFnbm9zdGljIHRvb2xzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE3OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNUFRDUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9LY29uZmlnLTEtXG5uZXQvbXB0Y3AvS2NvbmZpZzoyOmNvbmZpZyBNUFRDUFxubmV0L21wdGNwL0tjb25maWctMy1cdGJvb2wgXCYjMzQ7TVBUQ1A6IE11bHRpcGF0aCBUQ1BcJiMzNDtcbi0tXG5uZXQvbXB0Y3AvS2NvbmZpZz0xNj1jb25maWcgSU5FVF9NUFRDUF9ESUFHXG4tLVxubmV0L21wdGNwL0tjb25maWctMTktXG5uZXQvbXB0Y3AvS2NvbmZpZzoyMDpjb25maWcgTVBUQ1BfSVBWNlxubmV0L21wdGNwL0tjb25maWctMjEtXHRib29sIFwmIzM0O01QVENQOiBJUHY2IHN1cHBvcnQgZm9yIE11bHRpcGF0aCBUQ1BcJiMzNDtcbi0tXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNC1cbm5ldC9tcHRjcC9LY29uZmlnOjI1OmNvbmZpZyBNUFRDUF9LVU5JVF9URVNUXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNi1cdHRyaXN0YXRlIFwmIzM0O1RoaXMgYnVpbGRzIHRoZSBNUFRDUCBLVW5pdCB0ZXN0c1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTc6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyNzkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJTkVUX01QVENQX0RJQUcgSW52ZXN0aWdhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gVGhlIGZpcnN0IHRob3VnaHQgaXMgY2xlYXI6IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBgSU5FVF9NUFRDUF9ESUFHYC4gVGhpcyBpcyB3aGVyZSBJJiMzOTtkIGltbWVkaWF0ZWx5IGZvY3VzLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBjb250ZXh0IG9mIHdoYXRldmVyIHByb2JsZW0gb3IgcGVyZm9ybWFuY2UgYW5vbWFseSBpcyBhdCBoYW5kLiBJdCYjMzk7cyB0aGUgZGlhZ25vc3RpYyBpbnRlcmZhY2UgZm9yIE11bHRpcGF0aCBUQ1AsIHNvIHRoaXMgaXMgd2hlcmUgSSYjMzk7ZCBnbyB0byBnZXQgYSBxdWljayBvdmVydmlldyBvZiB0aGUgY3VycmVudCBzdGF0dXMuIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgd2FudCB0byBpbnNwZWN0IHRoZSBjb25uZWN0aW9uIHN0YXRlcywgc3ViZmxvdyBzdGF0aXN0aWNzLCB0aGUgb3ZlcmFsbCBNUFRDUCBjb25maWd1cmF0aW9uLCBhbmQgcG90ZW50aWFsbHkgYW55IGVycm9yIGNvZGVzIG9yIGZsYWdzIHRoYXQgbWlnaHQgYmUgcHJlc2VudC4gTXkgbWluZCBpcyBhbHJlYWR5IHJhY2luZyB0aHJvdWdoIHRoZSBsaWtlbHkgb3V0cHV0IGZpZWxkcyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcga2VybmVsIGNvZGUgSSBtaWdodCBuZWVkIHRvIHJlZmVyIHRvIGlmIHNvbWV0aGluZyBsb29rcyBzdXNwaWNpb3VzLiBJJiMzOTttIGV4cGVjdGluZyBzb21lIHNwZWNpZmljIGZpZWxkcyBhbmQgYSBnZW5lcmFsIGlkZWEgb2YgaG93IHRvIHVzZSBpdCwgYnV0IEkgYWx3YXlzIGFwcHJvYWNoIHRoZXNlIGNoZWNrcyB3aXRoIGFuIGV4cGVjdGF0aW9uIHRoYXQgSSBtaWdodCBuZWVkIHRvIGNyb3NzLXJlZmVyZW5jZSB3aXRoIG90aGVyIHRvb2xzIG9yIGtlcm5lbCBkZWJ1Z2dpbmcgdGVjaG5pcXVlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU5FVF9NUFRDUF9ESUFHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL0tjb25maWc9MTQ9aWYgTVBUQ1Bcbm5ldC9tcHRjcC9LY29uZmlnLTE1LVxubmV0L21wdGNwL0tjb25maWc6MTY6Y29uZmlnIElORVRfTVBUQ1BfRElBR1xubmV0L21wdGNwL0tjb25maWctMTctXHRkZXBlbmRzIG9uIElORVRfRElBR1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE3OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjMwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBEaWFnbm9zdGljcyBpbiB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgbmV0d29yayBkaWFnbm9zdGljcyBhcmUgY29uZmlndXJlZCBpbiB0aGUga2VybmVsLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIHplcm8gaW4gb24gYG5ldC9pcHY0L0tjb25maWdgLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBpbnRlcm5ldCBkaWFnbm9zdGljcywgYW5kIGVzcGVjaWFsbHkgb3B0aW9ucyBjb25jZXJuaW5nIFRDUCBkaWFnbm9zdGljcy4gTXkgcHJpbWFyeSB0YXJnZXRzIGFyZSBgY29uZmlnIElORVRfRElBR2AgYW5kIGBjb25maWcgVENQX0RJQUdgLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBhcmUgZGVmaW5lZCwgd2hhdCBkZXBlbmRlbmNpZXMgdGhleSBoYXZlLCB3aGF0IHRoZWlyIGRlZmF1bHQgdmFsdWVzIGFyZSwgYW5kIHdoZXRoZXIgdGhleSBhcmUgdHJpc3RhdGUgb3IgYm9vbGVhbi4gVGhpcyB3aWxsIHByb3ZpZGUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyBJIGNhbiBjb25maWd1cmUgYW5kIHBvdGVudGlhbGx5IHRyb3VibGVzaG9vdCB0aGUga2VybmVsJiMzOTtzIG5ldHdvcmsgZGlhZ25vc3RpY3MgY2FwYWJpbGl0aWVzLiBUaGlzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIG5ldHdvcmsgZGlhZ25vc3RpYyBsYW5kc2NhcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTc6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElORVRfRElBRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz00MTk9Y29uZmlnIElORVRfVFVOTkVMXG4tLVxubmV0L2lwdjQvS2NvbmZpZy00MjItXG5uZXQvaXB2NC9LY29uZmlnOjQyMzpjb25maWcgSU5FVF9ESUFHXG5uZXQvaXB2NC9LY29uZmlnLTQyNC1cdHRyaXN0YXRlIFwmIzM0O0lORVQ6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWc9NDQ3PWNvbmZpZyBJTkVUX1JBV19ESUFHXG4tLVxubmV0L2lwdjQvS2NvbmZpZy00NTQtXG5uZXQvaXB2NC9LY29uZmlnOjQ1NTpjb25maWcgSU5FVF9ESUFHX0RFU1RST1lcbm5ldC9pcHY0L0tjb25maWctNDU2LVx0Ym9vbCBcJiMzNDtJTkVUOiBhbGxvdyBwcml2aWxlZ2VkIHByb2Nlc3MgdG8gYWRtaW5pc3RyYXRpdmVseSBjbG9zZSBzb2NrZXRzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTc6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwNjkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gUXVlcnkqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCB0aGlua2luZyBhYm91dCBUQ1AgZGlhZ25vc3RpY3MuIFdhaXQgYSBtaW51dGUuLi4gV2hhdCBhYm91dCBgY29uZmlnIElORVRfVENQX0RJQUdgPyBUaGlzIGlzIGEgY3JpdGljYWwgY29uZmlndXJhdGlvbiBvcHRpb24sIGlzbiYjMzk7dCBpdD8gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIGhvdyB0aGF0JiMzOTtzIGhhbmRsZWQsIHdoYXQgaW1wbGljYXRpb25zIGl0IGhhcyBmb3IgdGhlIGRpYWdub3N0aWMgdG9vbHMgd2UgaGF2ZSBhdCBvdXIgZGlzcG9zYWwuIElzIGl0IGVuYWJsZWQ/IERpc2FibGVkPyBXaGF0IGZlYXR1cmVzIGFyZSB0aWVkIHRvIHRoYXQgZmxhZywgYW5kIGhvdyBkb2VzIGl0IGludGVyZmFjZSB3aXRoIHRoZSB2YXJpb3VzIG5ldGxpbmsgYW5kIHNvY2tldCBvcHRpb25zPyBUaGlua2luZyBhYm91dCBob3cgdmFyaW91cyBhc3BlY3RzIG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrIHdpbGwgYmVoYXZlIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoaXMgaXMgZW5hYmxlZC4gVGltZSB0byBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBoZXJlLiBJIGNhbiYjMzk7dCBwcm9jZWVkIHdpdGhvdXQgY2xhcmlmeWluZyB0aGUgc3RhdHVzIG9mIHRoYXQgY29uZmlnIG9wdGlvbi4gSXQmIzM5O3MgZnVuZGFtZW50YWwgdG8gdGhpcyBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTc6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElORVRfVENQX0RJQUcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWc9NDIzPWNvbmZpZyBJTkVUX0RJQUdcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQzNC1cbm5ldC9pcHY0L0tjb25maWc6NDM1OmNvbmZpZyBJTkVUX1RDUF9ESUFHXG5uZXQvaXB2NC9LY29uZmlnLTQzNi1cdGRlcGVuZHMgb24gSU5FVF9ESUFHXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE3OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzg1CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOZXR3b3JrIERpYWdub3N0aWNzIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBuZXR3b3JrIGRpYWdub3N0aWNzLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBUQ1AgYW5kIE1QVENQLiBUaGUga2V5IGNvbmZpZ3VyYXRpb25zIEkmIzM5O20gY29uc2lkZXJpbmcgYXJlIGBJTkVUX0RJQUdgLCBgSU5FVF9UQ1BfRElBR2AsIGBNUFRDUGAsIGFuZCBgSU5FVF9NUFRDUF9ESUFHYC4gVGhlc2UgZmxhZ3MgbGlrZWx5IGNvbnRyb2wgdGhlIGluY2x1c2lvbiBvciBleGNsdXNpb24gb2YgY2VydGFpbiBkaWFnbm9zdGljIGZlYXR1cmVzIHdpdGhpbiB0aGUga2VybmVsLiBNeSBwcmltYXJ5IGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgdGhlIGFjdHVhbCBkYXRhIGR1bXBpbmcg4oCTIHRoZSBoZWFydCBvZiB0aGUgZGlhZ25vc3RpY3MuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2UmIzM5O3JlIGV4dHJhY3RpbmcgYW5kIHByZXNlbnRpbmcgdGhpcyBpbmZvcm1hdGlvbi4gVGhlIGZ1bmN0aW9ucyBoaWdobGlnaHRlZCBhcmUgYHRjcF9kaWFnX2R1bXBgLCBgbXB0Y3BfZGlhZ19kdW1wX2xpc3RlbmVyc2AsIGFuZCBgbXB0Y3BfZGlhZ19kdW1wYC4gYG1wdGNwX2RpYWdfZHVtcGAgc2VlbXMgdG8gYmUgdGhlIGNlbnRyYWwgZW50cnkgcG9pbnQgZm9yIGFsbCB0aGluZ3MgTVBUQ1AtcmVsYXRlZC4KCk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSBjb25maXJtIHRoZSBleGlzdGVuY2UgYW5kIHN0cnVjdHVyZSBvZiB0aGlzIGBtcHRjcF9kaWFnX2R1bXBgIGZ1bmN0aW9uLiBJIHdhbnQgdG8gZW5zdXJlIGl04oCZcyB0aGVyZSBhbmQgZ2V0IGEgaGFuZGxlIG9uIGl0cyBpbnB1dHMsIG91dHB1dHMsIGFuZCBvdmVyYWxsIHB1cnBvc2UuIFRoaXMgaXMgdGhlIGx5bmNocGluIEkgd2lsbCBzdGFydCB3aXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF9kaWFnX2R1bXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9tcHRjcF9kaWFnLmM9Mjg9c3RhdGljIGludCBza19kaWFnX2R1bXAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9tcHRjcC9tcHRjcF9kaWFnLmMtMzktXG5uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jOjQwOnN0YXRpYyBpbnQgbXB0Y3BfZGlhZ19kdW1wX29uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG5uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jLTQxLVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX3JlcV92MiAqcmVxKVxuLS1cbm5ldC9tcHRjcC9tcHRjcF9kaWFnLmM9ODE9c3RydWN0IG1wdGNwX2RpYWdfY3R4IHtcbi0tXG5uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jLTg3LVxubmV0L21wdGNwL21wdGNwX2RpYWcuYzo4ODpzdGF0aWMgdm9pZCBtcHRjcF9kaWFnX2R1bXBfbGlzdGVuZXJzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbm5ldC9tcHRjcC9tcHRjcF9kaWFnLmMtODktXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX3JlcV92MiAqcixcbi0tXG5uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jLTE5OC1cbm5ldC9tcHRjcC9tcHRjcF9kaWFnLmM6MTk5OnN0YXRpYyB2b2lkIG1wdGNwX2RpYWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG5uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jLTIwMC1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGluZXRfZGlhZ19yZXFfdjIgKnIpXG4tLVxubmV0L21wdGNwL21wdGNwX2RpYWcuYy0yMzgtXHRpZiAoKHItXHUwMDNlaWRpYWdfc3RhdGVzIFx1MDAyNiBUQ1BGX0xJU1RFTikgXHUwMDI2XHUwMDI2IHItXHUwMDNlaWQuaWRpYWdfZHBvcnQgPT0gMClcbm5ldC9tcHRjcC9tcHRjcF9kaWFnLmM6MjM5Olx0XHRtcHRjcF9kaWFnX2R1bXBfbGlzdGVuZXJzKHNrYiwgY2IsIHIsIG5ldF9hZG1pbik7XG5uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jLTI0MC19XG4tLVxubmV0L21wdGNwL21wdGNwX2RpYWcuYz0yNzA9c3RhdGljIGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfaGFuZGxlciBtcHRjcF9kaWFnX2hhbmRsZXIgPSB7XG5uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jLTI3MS1cdC5vd25lclx0XHQgPSBUSElTX01PRFVMRSxcbm5ldC9tcHRjcC9tcHRjcF9kaWFnLmM6MjcyOlx0LmR1bXBcdFx0ID0gbXB0Y3BfZGlhZ19kdW1wLFxubmV0L21wdGNwL21wdGNwX2RpYWcuYzoyNzM6XHQuZHVtcF9vbmVcdCA9IG1wdGNwX2RpYWdfZHVtcF9vbmUsXG5uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jLTI3NC1cdC5pZGlhZ19nZXRfaW5mbyAgPSBtcHRjcF9kaWFnX2dldF9pbmZvLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQyNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBEaWFnbm9zdGljIEZ1bmN0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGVzZSBkaWFnbm9zdGljIGZ1bmN0aW9ucy4gV2UgaGF2ZSBgdGNwX2RpYWdfZHVtcGAsIGBtcHRjcF9kaWFnX2R1bXBgLCBhbmQgYG1wdGNwX2RpYWdfZHVtcF9saXN0ZW5lcnNgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBpbnZlc3RpZ2F0ZSB0aGUgc2NvcGUgb2YgYHRjcF9kaWFnX2R1bXBgLiBJcyBpdCBkZWNsYXJlZCBgc3RhdGljYD8gVGhhdCB3b3VsZCBpbmZsdWVuY2UgaG93IGFuZCB3aGVyZSBpdCBjYW4gYmUgY2FsbGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgdmlzaWJpbGl0eSB3aXRoaW4gdGhlIG1vZHVsZSwgc2luY2UgdGhpcyBhZmZlY3RzIGhvdyBlYXNpbHkgaXQgY2FuIGJlIGludGVncmF0ZWQgd2l0aCBvdGhlciBzeXN0ZW1zIG9yIGRlYnVnZ2luZyB0b29scy4gS25vd2luZyBpdHMgc2NvcGUgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgaW50ZW5kZWQgdXNlIGNhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE3OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9kaWFnX2R1bXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfZGlhZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9kaWFnLmM9MzQ3PXN0YXRpYyB2b2lkIHR3c2tfYnVpbGRfYXNzZXJ0KHZvaWQpXG4tLVxubmV0L2lwdjQvdGNwX2RpYWcuYy0zNzItXG5uZXQvaXB2NC90Y3BfZGlhZy5jOjM3MzpzdGF0aWMgdm9pZCB0Y3BfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbm5ldC9pcHY0L3RjcF9kaWFnLmMtMzc0LVx0XHRcdCAgY29uc3Qgc3RydWN0IGluZXRfZGlhZ19yZXFfdjIgKnIpXG4tLVxubmV0L2lwdjQvdGNwX2RpYWcuYz03MDU9c3RhdGljIHN0cnVjdCBzb2NrICp0Y3BfZGlhZ19maW5kX29uZV9pY3NrKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvaXB2NC90Y3BfZGlhZy5jLTc0NS1cbm5ldC9pcHY0L3RjcF9kaWFnLmM6NzQ2OnN0YXRpYyBpbnQgdGNwX2RpYWdfZHVtcF9vbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxubmV0L2lwdjQvdGNwX2RpYWcuYy03NDctXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX3JlcV92MiAqcmVxKVxuLS1cbm5ldC9pcHY0L3RjcF9kaWFnLmM9ODAzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2hhbmRsZXIgdGNwX2RpYWdfaGFuZGxlciA9IHtcbm5ldC9pcHY0L3RjcF9kaWFnLmMtODA0LVx0Lm93bmVyXHRcdFx0PSBUSElTX01PRFVMRSxcbm5ldC9pcHY0L3RjcF9kaWFnLmM6ODA1Olx0LmR1bXBcdFx0XHQ9IHRjcF9kaWFnX2R1bXAsXG5uZXQvaXB2NC90Y3BfZGlhZy5jOjgwNjpcdC5kdW1wX29uZVx0XHQ9IHRjcF9kaWFnX2R1bXBfb25lLFxubmV0L2lwdjQvdGNwX2RpYWcuYy04MDctXHQuaWRpYWdfZ2V0X2luZm9cdFx0PSB0Y3BfZGlhZ19nZXRfaW5mbyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTc6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwMzQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXJuZWwmIzM5O3MgRGlhZ25vc3RpYyBGdW5jdGlvbiBDYWxscyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZGlhZ25vc3RpYyBmdW5jdGlvbnMuIEkgaW5pdGlhbGx5IGNvbnNpZGVyZWQgdGhlbSBhcyBzdGF0aWMsIGJ1dCB0aGVuIEkgcmVtZW1iZXJlZCB0aGV5IGFyZSByZWdpc3RlcmVkIHdpdGhpbiB0aGUgYGluZXRfZGlhZ19oYW5kbGVyYCBzdHJ1Y3R1cmUuIFRoYXQgc2hpZnRzIHRoaW5ncy4KCkFscmlnaHQsIGxldCBtZSBsaXN0IHRoZW0gYW55d2F5LiBJdCYjMzk7cyBnb29kIHRvIGtlZXAgdGhpbmdzIGNsZWFyLCBlc3BlY2lhbGx5IGFzIHRoZXNlIGFyZSB0aGUgY29yZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQuCgpXYWl0IGEgc2Vjb25kLiBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSB3YW50cyBtZSB0byBwcmlvcml0aXplIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhhdCBtYWtlcyBzZW5zZSwgYXZvaWRpbmcgdGhvc2UgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgaW5saW5lZCBoZWxwZXIgZnVuY3Rpb25zLgoKUmlnaHQsIGB0Y3BfZGlhZ19kdW1wYCBhbmQgYG1wdGNwX2RpYWdfZHVtcGAuIEV4Y2VsbGVudC4gVGhleSBhcmUgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMgd2l0aGluIGEgc3RydWN0LCBtZWFuaW5nIHRoZXkgd29uJiMzOTt0IGJlIGlubGluZWQuIFRoZWlyIHN5bWJvbCBhZGRyZXNzZXMgd2lsbCBiZSBkaXN0aW5jdC4gVGhhdCBtYWtlcyB0aGVtIHBlcmZlY3QgZW50cnkgcG9pbnRzIGZvciB0aGUgZHVtcGluZyBwcm9jZXNzLgoKTm93IGxldCYjMzk7cyB2ZXJpZnkgYGluZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvcmAuIEFoLCBpdCYjMzk7cyBleHBvcnRlZCEgTm9uLXN0YXRpYywgY29uZmlybWVkLiBHb29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pbmV0X2RpYWcuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pbmV0X2RpYWcuYz04ODk9c3RhdGljIGludCBpbmV0X2RpYWdfZHVtcF9zdGFydF9jb21wYXQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9pcHY0L2luZXRfZGlhZy5jLTg5My1cbm5ldC9pcHY0L2luZXRfZGlhZy5jOjg5NDp2b2lkIGluZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvcihzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSAqY2JfZGF0YSlcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTg5NS17XG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtOTAzLX1cbm5ldC9pcHY0L2luZXRfZGlhZy5jOjkwNDpFWFBPUlRfU1lNQk9MX0dQTChpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3IpO1xubmV0L2lwdjQvaW5ldF9kaWFnLmMtOTA1LVxubmV0L2lwdjQvaW5ldF9kaWFnLmM9OTA2PXN0YXRpYyBpbnQgaW5ldF9kaWFnX2R1bXBfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L2lwdjQvaW5ldF9kaWFnLmMtOTA5LVxubmV0L2lwdjQvaW5ldF9kaWFnLmM6OTEwOlx0aW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKGNiX2RhdGEpO1xubmV0L2lwdjQvaW5ldF9kaWFnLmMtOTExLVx0YnBmX3NrX3N0b3JhZ2VfZGlhZ19mcmVlKGNiX2RhdGEtXHUwMDNlYnBmX3N0Z19kaWFnKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTc6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3NTAKCQkJCQkJCW91dHB1dDogMTY0CgkJCQkJCQl0aG91Z2h0czogMTU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipEaWFnbm9zdGljIER1bXAgQ29uc2lkZXJhdGlvbnMqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlc2UgZnVuY3Rpb25zOiBgdGNwX2RpYWdfZHVtcGAsIGBtcHRjcF9kaWFnX2R1bXBfbGlzdGVuZXJzYCwgYW5kIGBpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3JgLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBjb3JlIHJvdXRpbmVzIGludm9sdmVkIGluIHdoYXRldmVyIGRpYWdub3N0aWMgZnVuY3Rpb25hbGl0eSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLiBLbm93aW5nIHdoYXQgdGhleSYjMzk7cmUgZG9pbmcgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSB3aG9sZSBwaWN0dXJlLgoKTm93LCBhcyBmb3IgdGhlIGNvbmZpZ3VyYXRpb25zIHRoYXQgY29udHJvbCBhbGwgdGhpcywgSSBzZWUgYSBjbGVhciBzZXQ6IGBJTkVUX0RJQUdgLCBgSU5FVF9UQ1BfRElBR2AsIGBNUFRDUGAsIGFuZCBgSU5FVF9NUFRDUF9ESUFHYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb25zIGFyZSBzZXQgaW4gb3JkZXIgdG8gZW5zdXJlIHRoZSBkaWFnbm9zdGljIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZS4KCkl0JiMzOTtzIGFsd2F5cyBhIGdvb2QgcHJhY3RpY2UgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWdzIGluIHBsYXkuIExldCYjMzk7cyBzZWUuLi4gbG9va2luZyBhdCB0aGUgZGV0YWlscywgYENPTkZJR19JTkVUX0RJQUdgIGFuZCBgQ09ORklHX0lORVRfVENQX0RJQUdgIGFyZSB0cmlzdGF0ZSwgbWVhbmluZyB0aGV5IGNhbiBiZSBlbmFibGVkIGFzIGEgbW9kdWxlLCBidWlsdC1pbiwgb3IgZGlzYWJsZWQuIGBDT05GSUdfTVBUQ1BgIGlzIGEgc2ltcGxlIGJvb2xlYW47IGVpdGhlciBpdCYjMzk7cyBlbmFibGVkIG9yIGRpc2FibGVkLiBBbmQgZmluYWxseSwgYENPTkZJR19JTkVUX01QVENQX0RJQUdgIGlzIGFub3RoZXIgdHJpc3RhdGUuCgpJJiMzOTt2ZSBnb3QgdGhlIHBpZWNlcyBmaWd1cmVkIG91dCBhbmQgSSYjMzk7bGwgbm93IHNldCB0aGUgY29ycmVzcG9uZGluZyBjb25maWd1cmF0aW9uIHNldHRpbmdzIGFjY29yZGluZ2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVF9ESUFHJiMzNDssCiAgICAmIzM0O0lORVRfVENQX0RJQUcmIzM0OywKICAgICYjMzQ7TVBUQ1AmIzM0OywKICAgICYjMzQ7SU5FVF9NUFRDUF9ESUFHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX2RpYWdfZHVtcCYjMzQ7LAogICAgJiMzNDttcHRjcF9kaWFnX2R1bXBfbGlzdGVuZXJzJiMzNDssCiAgICAmIzM0O2luZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY3Vyc29yIG1lY2hhbmlzbSBmb3IgZHVtcGluZyBUQ1AgYW5kIE1QVENQIHNvY2tldHMgdmlhIHRoZSBpbmV0X2RpYWcgbmV0bGluayBpbnRlcmZhY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIHRoYXQgYWZmZWN0cyBob3cgc29ja2V0cyBhcmUgaXRlcmF0ZWQgYW5kIGR1bXBlZCwgcHJldmVudGluZyBkdXBsaWNhdGVzIG9yIG1pc3NlZCBzb2NrZXRzIHdoZW4gdGhlIGhhc2ggdGFibGUgY2hhbmdlcyBkdXJpbmcgdGhlIGR1bXAuIEl0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmsgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVRfRElBRyYjMzQ7LAogICAgJiMzNDtJTkVUX1RDUF9ESUFHJiMzNDssCiAgICAmIzM0O01QVENQJiMzNDssCiAgICAmIzM0O0lORVRfTVBUQ1BfRElBRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF9kaWFnX2R1bXAmIzM0OywKICAgICYjMzQ7bXB0Y3BfZGlhZ19kdW1wX2xpc3RlbmVycyYjMzQ7LAogICAgJiMzNDtpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGN1cnNvciBtZWNoYW5pc20gZm9yIGR1bXBpbmcgVENQIGFuZCBNUFRDUCBzb2NrZXRzIHZpYSB0aGUgaW5ldF9kaWFnIG5ldGxpbmsgaW50ZXJmYWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayB0aGF0IGFmZmVjdHMgaG93IHNvY2tldHMgYXJlIGl0ZXJhdGVkIGFuZCBkdW1wZWQsIHByZXZlbnRpbmcgZHVwbGljYXRlcyBvciBtaXNzZWQgc29ja2V0cyB3aGVuIHRoZSBoYXNoIHRhYmxlIGNoYW5nZXMgZHVyaW5nIHRoZSBkdW1wLiBJdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMzBUMTc6NTI6NTAuOTg5NjgxODhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzM4MDcyNzE0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUX0RJQUdcIixcbiAgICBcIklORVRfVENQX0RJQUdcIixcbiAgICBcIk1QVENQXCIsXG4gICAgXCJJTkVUX01QVENQX0RJQUdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfZGlhZ19kdW1wXCIsXG4gICAgXCJtcHRjcF9kaWFnX2R1bXBfbGlzdGVuZXJzXCIsXG4gICAgXCJpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY3Vyc29yIG1lY2hhbmlzbSBmb3IgZHVtcGluZyBUQ1AgYW5kIE1QVENQIHNvY2tldHMgdmlhIHRoZSBpbmV0X2RpYWcgbmV0bGluayBpbnRlcmZhY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIHRoYXQgYWZmZWN0cyBob3cgc29ja2V0cyBhcmUgaXRlcmF0ZWQgYW5kIGR1bXBlZCwgcHJldmVudGluZyBkdXBsaWNhdGVzIG9yIG1pc3NlZCBzb2NrZXRzIHdoZW4gdGhlIGhhc2ggdGFibGUgY2hhbmdlcyBkdXJpbmcgdGhlIGR1bXAuIEl0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmsgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE3OjUyOjUwLjk4OTY4NzEyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjM2ODAwOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiMjlhMzE1MTlkY2VlMmJjZDU5ZmZlMmRhNGQyNWQxNmJhZTY5ZGI3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDMwIDE3OjUyOjUwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5ldF9kaWFnLmggYi9pbmNsdWRlL2xpbnV4L2luZXRfZGlhZy5oXFxuaW5kZXggNzA0ZmQ0MTVjMmI0OS4uNDg1OWU3N2EyOGM3YSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2luZXRfZGlhZy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9pbmV0X2RpYWcuaFxcbkBAIC02LDYgKzYsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9pbmV0X2RpYWcuaFxcdTAwM2VcXG4gXFxuIHN0cnVjdCBpbmV0X2hhc2hpbmZvO1xcbitzdHJ1Y3Qgc29jaztcXG4gXFxuIHN0cnVjdCBpbmV0X2RpYWdfaGFuZGxlciB7XFxuIFxcdHN0cnVjdCBtb2R1bGVcXHQqb3duZXI7XFxuQEAgLTMyLDEyICszMywyNCBAQCBzdHJ1Y3QgaW5ldF9kaWFnX2hhbmRsZXIge1xcbiB9O1xcbiBcXG4gc3RydWN0IGJwZl9za19zdG9yYWdlX2RpYWc7XFxuK1xcbitlbnVtIGluZXRfZGlhZ19kdW1wX2N1cnNvcl90eXBlIHtcXG4rXFx0SU5FVF9ESUFHX0RVTVBfQ1VSU09SX05PTkUsXFxuK1xcdElORVRfRElBR19EVU1QX0NVUlNPUl9UQ1BfTElTVEVOLFxcbitcXHRJTkVUX0RJQUdfRFVNUF9DVVJTT1JfVENQX0JJTkQsXFxuK1xcdElORVRfRElBR19EVU1QX0NVUlNPUl9UQ1BfRUhBU0gsXFxuK1xcdElORVRfRElBR19EVU1QX0NVUlNPUl9NUFRDUF9MSVNURU4sXFxuK307XFxuK1xcbiBzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSB7XFxuIFxcdHN0cnVjdCBubGF0dHIgKnJlcV9ubGFzW19fSU5FVF9ESUFHX1JFUV9NQVhdO1xcbiAjZGVmaW5lIGluZXRfZGlhZ19ubGFfYmMgcmVxX25sYXNbSU5FVF9ESUFHX1JFUV9CWVRFQ09ERV1cXG4gI2RlZmluZSBpbmV0X2RpYWdfbmxhX2JwZl9zdGdzIHJlcV9ubGFzW0lORVRfRElBR19SRVFfU0tfQlBGX1NUT1JBR0VTXVxcbiBcXG4gXFx0c3RydWN0IGJwZl9za19zdG9yYWdlX2RpYWcgKmJwZl9zdGdfZGlhZztcXG4rXFx0c3RydWN0IHNvY2sgKmR1bXBfY3Vyc29yO1xcbitcXHR1bnNpZ25lZCBpbnQgZHVtcF9jdXJzb3Jfc2xvdDtcXG4rXFx0dTggZHVtcF9jdXJzb3JfdHlwZTtcXG4gXFx0Ym9vbCBtYXJrX25lZWRlZDtcXHQvKiBJTkVUX0RJQUdfQkNfTUFSS19DT05EIHByZXNlbnQuICovXFxuICNpZmRlZiBDT05GSUdfU09DS19DR1JPVVBfREFUQVxcbiBcXHRib29sIGNncm91cF9uZWVkZWQ7XFx0LyogSU5FVF9ESUFHX0JDX0NHUk9VUF9DT05EIHByZXNlbnQuICovXFxuQEAgLTUzLDYgKzY2LDggQEAgaW50IGluZXRfc2tfZGlhZ19maWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrLFxcbiBcXG4gaW50IGluZXRfZGlhZ19iY19zayhjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSAqY2JfZGF0YSwgc3RydWN0IHNvY2sgKnNrKTtcXG4gXFxuK3ZvaWQgaW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKHN0cnVjdCBpbmV0X2RpYWdfZHVtcF9kYXRhICpjYl9kYXRhKTtcXG4rXFxuIHZvaWQgaW5ldF9kaWFnX21zZ19jb21tb25fZmlsbChzdHJ1Y3QgaW5ldF9kaWFnX21zZyAqciwgc3RydWN0IHNvY2sgKnNrKTtcXG4gXFxuIHN0YXRpYyBpbmxpbmUgc2l6ZV90IGluZXRfZGlhZ19tc2dfYXR0cnNfc2l6ZSh2b2lkKVxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2RpYWcuYyBiL25ldC9pcHY0L2luZXRfZGlhZy5jXFxuaW5kZXggMzRiNzdhYTg3ZDBhNC4uNDExNDhlODgwMDU0NSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9pbmV0X2RpYWcuY1xcbisrKyBiL25ldC9pcHY0L2luZXRfZGlhZy5jXFxuQEAgLTg5MSwxMCArODkxLDIzIEBAIHN0YXRpYyBpbnQgaW5ldF9kaWFnX2R1bXBfc3RhcnRfY29tcGF0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4gXFx0cmV0dXJuIF9faW5ldF9kaWFnX2R1bXBfc3RhcnQoY2IsIHNpemVvZihzdHJ1Y3QgaW5ldF9kaWFnX3JlcSkpO1xcbiB9XFxuIFxcbit2b2lkIGluZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvcihzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSAqY2JfZGF0YSlcXG4re1xcbitcXHRpZiAoIWNiX2RhdGEtXFx1MDAzZWR1bXBfY3Vyc29yKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzb2NrX2dlbl9wdXQoY2JfZGF0YS1cXHUwMDNlZHVtcF9jdXJzb3IpO1xcbitcXHRjYl9kYXRhLVxcdTAwM2VkdW1wX2N1cnNvciA9IE5VTEw7XFxuK1xcdGNiX2RhdGEtXFx1MDAzZWR1bXBfY3Vyc29yX3Nsb3QgPSAwO1xcbitcXHRjYl9kYXRhLVxcdTAwM2VkdW1wX2N1cnNvcl90eXBlID0gSU5FVF9ESUFHX0RVTVBfQ1VSU09SX05PTkU7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoaW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKTtcXG4rXFxuIHN0YXRpYyBpbnQgaW5ldF9kaWFnX2R1bXBfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuIHtcXG4gXFx0c3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEgPSBjYi1cXHUwMDNlZGF0YTtcXG4gXFxuK1xcdGluZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvcihjYl9kYXRhKTtcXG4gXFx0YnBmX3NrX3N0b3JhZ2VfZGlhZ19mcmVlKGNiX2RhdGEtXFx1MDAzZWJwZl9zdGdfZGlhZyk7XFxuIFxcdGtmcmVlKGNiLVxcdTAwM2VkYXRhKTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9kaWFnLmMgYi9uZXQvaXB2NC90Y3BfZGlhZy5jXFxuaW5kZXggYmExZmRiZTk4MDdmZC4uYmUwYzIyY2M0NDViMiAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC90Y3BfZGlhZy5jXFxuKysrIGIvbmV0L2lwdjQvdGNwX2RpYWcuY1xcbkBAIC0yODUsNiArMjg1LDY1IEBAIHN0YXRpYyBpbnQgc2tfZGlhZ19maWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0XFx0IG5ldF9hZG1pbik7XFxuIH1cXG4gXFxuKy8qIFByb2Nlc3MgYSBtYXhpbXVtIG9mIFNLQVJSX1NaIHNvY2tldHMgYXQgYSB0aW1lIHdoZW4gd2Fsa2luZyBoYXNoIGJ1Y2tldHNcXG4rICogd2l0aCBiaCBkaXNhYmxlZC5cXG4rICovXFxuKyNkZWZpbmUgU0tBUlJfU1ogMTZcXG4rXFxuK3N0YXRpYyB2b2lkIHRjcF9kaWFnX3NhdmVfY3Vyc29yKHN0cnVjdCBpbmV0X2RpYWdfZHVtcF9kYXRhICpjYl9kYXRhLCBpbnQgdHlwZSxcXG4rXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBzbG90LCBzdHJ1Y3Qgc29jayAqc2spXFxuK3tcXG4rXFx0c29ja19ob2xkKHNrKTtcXG4rXFx0aW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKGNiX2RhdGEpO1xcbitcXHRjYl9kYXRhLVxcdTAwM2VkdW1wX2N1cnNvciA9IHNrO1xcbitcXHRjYl9kYXRhLVxcdTAwM2VkdW1wX2N1cnNvcl9zbG90ID0gc2xvdDtcXG4rXFx0Y2JfZGF0YS1cXHUwMDNlZHVtcF9jdXJzb3JfdHlwZSA9IHR5cGU7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIHRjcF9kaWFnX2JpbmRfY29sbGVjdF9zb2NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKipza19hcnIsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBpbnQgKm51bV9hcnIsIGludCAqYWNjdW0sIGludCBudW0pXFxuK3tcXG4rXFx0c29ja19ob2xkKHNrKTtcXG4rXFx0bnVtX2FyclsqYWNjdW1dID0gbnVtO1xcbitcXHRza19hcnJbKmFjY3VtXSA9IHNrO1xcbitcXG4rXFx0cmV0dXJuICsrKmFjY3VtID09IFNLQVJSX1NaO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCB0Y3BfZGlhZ19iaW5kX2NvbGxlY3Rfb3duZXJzKHN0cnVjdCBobGlzdF9oZWFkICpvd25lcnMsXFxuK1xcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc29jayAqKnNrX2FyciwgaW50ICpudW1fYXJyLFxcbitcXHRcXHRcXHRcXHRcXHQgaW50ICphY2N1bSwgaW50ICpudW0sIGludCBzX251bSlcXG4re1xcbitcXHRzdHJ1Y3Qgc29jayAqc2s7XFxuK1xcbitcXHRza19mb3JfZWFjaF9ib3VuZChzaywgb3duZXJzKSB7XFxuK1xcdFxcdGlmICgqbnVtIFxcdTAwM2Mgc19udW0pIHtcXG4rXFx0XFx0XFx0KCpudW0pKys7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAodGNwX2RpYWdfYmluZF9jb2xsZWN0X3NvY2soc2ssIHNrX2FyciwgbnVtX2FyciwgYWNjdW0sICpudW0pKVxcbitcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0KCpudW0pKys7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgdGNwX2RpYWdfYmluZF9jb2xsZWN0X293bmVyc19jb250aW51ZShzdHJ1Y3Qgc29jayAqc2ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNvY2sgKipza19hcnIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgaW50ICpudW1fYXJyLCBpbnQgKmFjY3VtLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIGludCAqbnVtKVxcbit7XFxuK1xcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlKHNrLCBza19iaW5kX25vZGUpIHtcXG4rXFx0XFx0aWYgKHRjcF9kaWFnX2JpbmRfY29sbGVjdF9zb2NrKHNrLCBza19hcnIsIG51bV9hcnIsIGFjY3VtLCAqbnVtKSlcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdFxcdCgqbnVtKSsrO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHR3c2tfYnVpbGRfYXNzZXJ0KHZvaWQpXFxuIHtcXG4gXFx0QlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2ssIHR3X2ZhbWlseSkgIT1cXG5AQCAtMzM1LDggKzM5NCwxNSBAQCBzdGF0aWMgdm9pZCB0Y3BfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcXG4gXFx0XFx0Zm9yIChpID0gc19pOyBpIFxcdTAwM2M9IGhhc2hpbmZvLVxcdTAwM2VsaGFzaDJfbWFzazsgaSsrKSB7XFxuIFxcdFxcdFxcdHN0cnVjdCBpbmV0X2xpc3Rlbl9oYXNoYnVja2V0ICppbGI7XFxuIFxcdFxcdFxcdHN0cnVjdCBobGlzdF9udWxsc19ub2RlICpub2RlO1xcbitcXHRcXHRcXHRzdHJ1Y3Qgc29jayAqc2tfYXJyW1NLQVJSX1NaXTtcXG4rXFx0XFx0XFx0c3RydWN0IHNvY2sgKmN1cnNvcjtcXG4rXFx0XFx0XFx0aW50IG51bV9hcnJbU0tBUlJfU1pdO1xcbitcXHRcXHRcXHRpbnQgaWR4LCBhY2N1bSwgcmVzO1xcbitcXHRcXHRcXHRib29sIHVzZV9jdXJzb3I7XFxuIFxcbityZXN1bWVfbGlzdGVuX3dhbGs6XFxuIFxcdFxcdFxcdG51bSA9IDA7XFxuK1xcdFxcdFxcdGFjY3VtID0gMDtcXG4gXFx0XFx0XFx0aWxiID0gXFx1MDAyNmhhc2hpbmZvLVxcdTAwM2VsaGFzaDJbaV07XFxuIFxcbiBcXHRcXHRcXHRpZiAoaGxpc3RfbnVsbHNfZW1wdHkoXFx1MDAyNmlsYi1cXHUwMDNlbnVsbHNfaGVhZCkpIHtcXG5AQCAtMzQ0LDUyICs0MTAsODAgQEAgc3RhdGljIHZvaWQgdGNwX2RpYWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2aWxiLVxcdTAwM2Vsb2NrKTtcXG4tXFx0XFx0XFx0c2tfbnVsbHNfZm9yX2VhY2goc2ssIG5vZGUsIFxcdTAwMjZpbGItXFx1MDAzZW51bGxzX2hlYWQpIHtcXG4tXFx0XFx0XFx0XFx0c3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spO1xcbitcXHRcXHRcXHRjdXJzb3IgPSBjYl9kYXRhLVxcdTAwM2VkdW1wX2N1cnNvcjtcXG4rXFx0XFx0XFx0dXNlX2N1cnNvciA9IGN1cnNvciBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgICAgIGNiX2RhdGEtXFx1MDAzZWR1bXBfY3Vyc29yX3R5cGUgPT1cXG4rXFx0XFx0XFx0XFx0ICAgICBJTkVUX0RJQUdfRFVNUF9DVVJTT1JfVENQX0xJU1RFTiBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgICAgIGNiX2RhdGEtXFx1MDAzZWR1bXBfY3Vyc29yX3Nsb3QgPT0gaSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgICAgICFobGlzdF9udWxsc191bmhhc2hlZChcXHUwMDI2Y3Vyc29yLVxcdTAwM2Vza19udWxsc19ub2RlKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgICAgIGN1cnNvci1cXHUwMDNlc2tfbnVsbHNfbm9kZS5wcHJldiAhPSBMSVNUX1BPSVNPTjI7XFxuK1xcdFxcdFxcdG5vZGUgPSB1c2VfY3Vyc29yID8gY3Vyc29yLVxcdTAwM2Vza19udWxsc19ub2RlLm5leHQgOlxcbitcXHRcXHRcXHRcXHRcXHQgICAgaWxiLVxcdTAwM2VudWxsc19oZWFkLmZpcnN0O1xcbitcXHRcXHRcXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9mcm9tKHNrLCBub2RlLCBza19udWxsc19ub2RlKSB7XFxuK1xcdFxcdFxcdFxcdGlmICghdXNlX2N1cnNvciBcXHUwMDI2XFx1MDAyNiBudW0gXFx1MDAzYyBzX251bSlcXG4rXFx0XFx0XFx0XFx0XFx0Z290byBuZXh0X2xpc3RlbjtcXG4gXFxuLVxcdFxcdFxcdFxcdGlmICghbmV0X2VxKHNvY2tfbmV0KHNrKSwgbmV0KSlcXG4tXFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdFxcdHNvY2tfaG9sZChzayk7XFxuK1xcdFxcdFxcdFxcdG51bV9hcnJbYWNjdW1dID0gbnVtO1xcbitcXHRcXHRcXHRcXHRza19hcnJbYWNjdW1dID0gc2s7XFxuK1xcdFxcdFxcdFxcdGlmICgrK2FjY3VtID09IFNLQVJSX1NaKVxcbitcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gXFxuLVxcdFxcdFxcdFxcdGlmIChudW0gXFx1MDAzYyBzX251bSkge1xcbi1cXHRcXHRcXHRcXHRcXHRudW0rKztcXG4tXFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdFxcdFxcdH1cXG4rbmV4dF9saXN0ZW46XFxuK1xcdFxcdFxcdFxcdCsrbnVtO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZpbGItXFx1MDAzZWxvY2spO1xcbiBcXG4rXFx0XFx0XFx0cmVzID0gMDtcXG4rXFx0XFx0XFx0Zm9yIChpZHggPSAwOyBpZHggXFx1MDAzYyBhY2N1bTsgaWR4KyspIHtcXG4rXFx0XFx0XFx0XFx0c3RydWN0IGluZXRfc29jayAqaW5ldDtcXG4rXFxuK1xcdFxcdFxcdFxcdHNrID0gc2tfYXJyW2lkeF07XFxuK1xcdFxcdFxcdFxcdGlmICghbmV0X2VxKHNvY2tfbmV0KHNrKSwgbmV0KSlcXG4rXFx0XFx0XFx0XFx0XFx0Z290byBwcm9jZXNzZWRfbGlzdGVuX3NrO1xcbitcXG4rXFx0XFx0XFx0XFx0aW5ldCA9IGluZXRfc2soc2spO1xcbiBcXHRcXHRcXHRcXHRpZiAoci1cXHUwMDNlc2RpYWdfZmFtaWx5ICE9IEFGX1VOU1BFQyBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHRcXHQgICAgc2stXFx1MDAzZXNrX2ZhbWlseSAhPSByLVxcdTAwM2VzZGlhZ19mYW1pbHkpXFxuLVxcdFxcdFxcdFxcdFxcdGdvdG8gbmV4dF9saXN0ZW47XFxuK1xcdFxcdFxcdFxcdFxcdGdvdG8gcHJvY2Vzc2VkX2xpc3Rlbl9zaztcXG4gXFxuIFxcdFxcdFxcdFxcdGlmIChyLVxcdTAwM2VpZC5pZGlhZ19zcG9ydCAhPSBpbmV0LVxcdTAwM2VpbmV0X3Nwb3J0IFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdFxcdCAgICByLVxcdTAwM2VpZC5pZGlhZ19zcG9ydClcXG4tXFx0XFx0XFx0XFx0XFx0Z290byBuZXh0X2xpc3RlbjtcXG4tXFxuLVxcdFxcdFxcdFxcdGlmICghaW5ldF9kaWFnX2JjX3NrKGNiX2RhdGEsIHNrKSlcXG4tXFx0XFx0XFx0XFx0XFx0Z290byBuZXh0X2xpc3RlbjtcXG4rXFx0XFx0XFx0XFx0XFx0Z290byBwcm9jZXNzZWRfbGlzdGVuX3NrO1xcbiBcXG4tXFx0XFx0XFx0XFx0aWYgKGluZXRfc2tfZGlhZ19maWxsKHNrLCBpbmV0X2NzayhzayksIHNrYixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgY2IsIHIsIE5MTV9GX01VTFRJLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBuZXRfYWRtaW4pIFxcdTAwM2MgMCkge1xcbi1cXHRcXHRcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2aWxiLVxcdTAwM2Vsb2NrKTtcXG4tXFx0XFx0XFx0XFx0XFx0Z290byBkb25lO1xcbitcXHRcXHRcXHRcXHRpZiAocmVzIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgaW5ldF9kaWFnX2JjX3NrKGNiX2RhdGEsIHNrKSkge1xcbitcXHRcXHRcXHRcXHRcXHRyZXMgPSBpbmV0X3NrX2RpYWdfZmlsbChzaywgaW5ldF9jc2soc2spLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRza2IsIGNiLCByLCBOTE1fRl9NVUxUSSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0bmV0X2FkbWluKTtcXG4rXFx0XFx0XFx0XFx0XFx0aWYgKHJlcyBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdFxcdFxcdG51bSA9IG51bV9hcnJbaWR4XTtcXG4gXFx0XFx0XFx0XFx0fVxcbitwcm9jZXNzZWRfbGlzdGVuX3NrOlxcbitcXHRcXHRcXHRcXHRpZiAocmVzIFxcdTAwM2U9IDApXFxuK1xcdFxcdFxcdFxcdFxcdHRjcF9kaWFnX3NhdmVfY3Vyc29yKGNiX2RhdGEsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgSU5FVF9ESUFHX0RVTVBfQ1VSU09SX1RDUF9MSVNURU4sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgaSwgc2spO1xcbitcXHRcXHRcXHRcXHRzb2NrX3B1dChzayk7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0aWYgKHJlcyBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZG9uZTtcXG4gXFxuLW5leHRfbGlzdGVuOlxcbi1cXHRcXHRcXHRcXHQrK251bTtcXG4rXFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuK1xcbitcXHRcXHRcXHRpZiAoYWNjdW0gPT0gU0tBUlJfU1opIHtcXG4rXFx0XFx0XFx0XFx0c19udW0gPSAwO1xcbitcXHRcXHRcXHRcXHRnb3RvIHJlc3VtZV9saXN0ZW5fd2FsaztcXG4gXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2aWxiLVxcdTAwM2Vsb2NrKTtcXG4gXFxuK1xcdFxcdFxcdGluZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvcihjYl9kYXRhKTtcXG4gXFx0XFx0XFx0c19udW0gPSAwO1xcbiBcXHRcXHR9XFxuIHNraXBfbGlzdGVuX2h0OlxcbitcXHRcXHRpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3IoY2JfZGF0YSk7XFxuIFxcdFxcdGNiLVxcdTAwM2VhcmdzWzBdID0gMTtcXG4gXFx0XFx0c19pID0gbnVtID0gc19udW0gPSAwO1xcbiBcXHR9XFxuIFxcbi0vKiBQcm9jZXNzIGEgbWF4aW11bSBvZiBTS0FSUl9TWiBzb2NrZXRzIGF0IGEgdGltZSB3aGVuIHdhbGtpbmcgaGFzaCBidWNrZXRzXFxuLSAqIHdpdGggYmggZGlzYWJsZWQuXFxuLSAqL1xcbi0jZGVmaW5lIFNLQVJSX1NaIDE2XFxuLVxcbiBcXHQvKiBEdW1wIGJvdW5kIGJ1dCBpbmFjdGl2ZSAobm90IGxpc3RlbmluZywgY29ubmVjdGluZywgZXRjLikgc29ja2V0cyAqL1xcbiBcXHRpZiAoY2ItXFx1MDAzZWFyZ3NbMF0gPT0gMSkge1xcbiBcXHRcXHRpZiAoIShpZGlhZ19zdGF0ZXMgXFx1MDAyNiBUQ1BGX0JPVU5EX0lOQUNUSVZFKSlcXG5AQCAtMzk5LDggKzQ5MywxMCBAQCBzdGF0aWMgdm9pZCB0Y3BfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcXG4gXFx0XFx0XFx0c3RydWN0IGluZXRfYmluZF9oYXNoYnVja2V0ICppYmI7XFxuIFxcdFxcdFxcdHN0cnVjdCBpbmV0X2JpbmQyX2J1Y2tldCAqdGIyO1xcbiBcXHRcXHRcXHRzdHJ1Y3Qgc29jayAqc2tfYXJyW1NLQVJSX1NaXTtcXG4rXFx0XFx0XFx0c3RydWN0IHNvY2sgKmN1cnNvcjtcXG4gXFx0XFx0XFx0aW50IG51bV9hcnJbU0tBUlJfU1pdO1xcbiBcXHRcXHRcXHRpbnQgaWR4LCBhY2N1bSwgcmVzO1xcbitcXHRcXHRcXHRib29sIHVzZV9jdXJzb3I7XFxuIFxcbiByZXN1bWVfYmluZF93YWxrOlxcbiBcXHRcXHRcXHRudW0gPSAwO1xcbkBAIC00MTIsMzQgKzUwOCwzOCBAQCBzdGF0aWMgdm9pZCB0Y3BfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZpYmItXFx1MDAzZWxvY2spO1xcbi1cXHRcXHRcXHRpbmV0X2JpbmRfYnVja2V0X2Zvcl9lYWNoKHRiMiwgXFx1MDAyNmliYi1cXHUwMDNlY2hhaW4pIHtcXG4tXFx0XFx0XFx0XFx0aWYgKCFuZXRfZXEoaWIyX25ldCh0YjIpLCBuZXQpKVxcbi1cXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tXFxuLVxcdFxcdFxcdFxcdHNrX2Zvcl9lYWNoX2JvdW5kKHNrLCBcXHUwMDI2dGIyLVxcdTAwM2Vvd25lcnMpIHtcXG4tXFx0XFx0XFx0XFx0XFx0c3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spO1xcbi1cXG4tXFx0XFx0XFx0XFx0XFx0aWYgKG51bSBcXHUwMDNjIHNfbnVtKVxcbi1cXHRcXHRcXHRcXHRcXHRcXHRnb3RvIG5leHRfYmluZDtcXG4tXFxuLVxcdFxcdFxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgIT0gVENQX0NMT1NFIHx8XFxuLVxcdFxcdFxcdFxcdFxcdCAgICAhaW5ldC1cXHUwMDNlaW5ldF9udW0pXFxuLVxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gbmV4dF9iaW5kO1xcbi1cXG4tXFx0XFx0XFx0XFx0XFx0aWYgKHItXFx1MDAzZXNkaWFnX2ZhbWlseSAhPSBBRl9VTlNQRUMgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIHItXFx1MDAzZXNkaWFnX2ZhbWlseSAhPSBzay1cXHUwMDNlc2tfZmFtaWx5KVxcbi1cXHRcXHRcXHRcXHRcXHRcXHRnb3RvIG5leHRfYmluZDtcXG4tXFxuLVxcdFxcdFxcdFxcdFxcdGlmICghaW5ldF9kaWFnX2JjX3NrKGNiX2RhdGEsIHNrKSlcXG4tXFx0XFx0XFx0XFx0XFx0XFx0Z290byBuZXh0X2JpbmQ7XFxuLVxcbi1cXHRcXHRcXHRcXHRcXHRzb2NrX2hvbGQoc2spO1xcbi1cXHRcXHRcXHRcXHRcXHRudW1fYXJyW2FjY3VtXSA9IG51bTtcXG4tXFx0XFx0XFx0XFx0XFx0c2tfYXJyW2FjY3VtXSA9IHNrO1xcbi1cXHRcXHRcXHRcXHRcXHRpZiAoKythY2N1bSA9PSBTS0FSUl9TWilcXG4rXFx0XFx0XFx0Y3Vyc29yID0gY2JfZGF0YS1cXHUwMDNlZHVtcF9jdXJzb3I7XFxuK1xcdFxcdFxcdHVzZV9jdXJzb3IgPSBjdXJzb3IgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0XFx0ICAgICBjYl9kYXRhLVxcdTAwM2VkdW1wX2N1cnNvcl90eXBlID09XFxuK1xcdFxcdFxcdFxcdCAgICAgSU5FVF9ESUFHX0RVTVBfQ1VSU09SX1RDUF9CSU5EIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdFxcdCAgICAgY2JfZGF0YS1cXHUwMDNlZHVtcF9jdXJzb3Jfc2xvdCA9PSBpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdFxcdCAgICAgIWhsaXN0X3VuaGFzaGVkKFxcdTAwMjZjdXJzb3ItXFx1MDAzZXNrX2JpbmRfbm9kZSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0XFx0ICAgICBjdXJzb3ItXFx1MDAzZXNrX2JpbmRfbm9kZS5wcHJldiAhPSBMSVNUX1BPSVNPTjIgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0XFx0ICAgICBpbmV0X2NzayhjdXJzb3IpLVxcdTAwM2VpY3NrX2JpbmQyX2hhc2g7XFxuK1xcdFxcdFxcdGlmICh1c2VfY3Vyc29yKSB7XFxuK1xcdFxcdFxcdFxcdHRiMiA9IGluZXRfY3NrKGN1cnNvciktXFx1MDAzZWljc2tfYmluZDJfaGFzaDtcXG4rXFx0XFx0XFx0XFx0c2sgPSBjdXJzb3I7XFxuK1xcdFxcdFxcdFxcdGlmICh0Y3BfZGlhZ19iaW5kX2NvbGxlY3Rfb3duZXJzX2NvbnRpbnVlKHNrLCBza19hcnIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgbnVtX2FycixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2YWNjdW0sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNm51bSkpXFxuK1xcdFxcdFxcdFxcdFxcdGdvdG8gcGF1c2VfYmluZF93YWxrO1xcbitcXHRcXHRcXHRcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZSh0YjIsIG5vZGUpIHtcXG4rXFx0XFx0XFx0XFx0XFx0aWYgKHRjcF9kaWFnX2JpbmRfY29sbGVjdF9vd25lcnMoXFx1MDAyNnRiMi1cXHUwMDNlb3duZXJzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgc2tfYXJyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgbnVtX2FycixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZhY2N1bSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZudW0sIDApKVxcbitcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIHBhdXNlX2JpbmRfd2FsaztcXG4rXFx0XFx0XFx0XFx0fVxcbitcXHRcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRcXHRpbmV0X2JpbmRfYnVja2V0X2Zvcl9lYWNoKHRiMiwgXFx1MDAyNmliYi1cXHUwMDNlY2hhaW4pIHtcXG4rXFx0XFx0XFx0XFx0XFx0aWYgKHRjcF9kaWFnX2JpbmRfY29sbGVjdF9vd25lcnMoXFx1MDAyNnRiMi1cXHUwMDNlb3duZXJzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgc2tfYXJyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgbnVtX2FycixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZhY2N1bSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZudW0sIHNfbnVtKSlcXG4gXFx0XFx0XFx0XFx0XFx0XFx0Z290byBwYXVzZV9iaW5kX3dhbGs7XFxuLW5leHRfYmluZDpcXG4tXFx0XFx0XFx0XFx0XFx0bnVtKys7XFxuIFxcdFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0fVxcbiBwYXVzZV9iaW5kX3dhbGs6XFxuQEAgLTQ0NywxNSArNTQ3LDMzIEBAIHN0YXRpYyB2b2lkIHRjcF9kaWFnX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxcbiBcXG4gXFx0XFx0XFx0cmVzID0gMDtcXG4gXFx0XFx0XFx0Zm9yIChpZHggPSAwOyBpZHggXFx1MDAzYyBhY2N1bTsgaWR4KyspIHtcXG4tXFx0XFx0XFx0XFx0aWYgKHJlcyBcXHUwMDNlPSAwKSB7XFxuLVxcdFxcdFxcdFxcdFxcdHJlcyA9IGluZXRfc2tfZGlhZ19maWxsKHNrX2FycltpZHhdLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHROVUxMLCBza2IsIGNiLFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgaW5ldF9zb2NrICppbmV0O1xcbitcXG4rXFx0XFx0XFx0XFx0c2sgPSBza19hcnJbaWR4XTtcXG4rXFx0XFx0XFx0XFx0aWYgKCFuZXRfZXEoc29ja19uZXQoc2spLCBuZXQpKVxcbitcXHRcXHRcXHRcXHRcXHRnb3RvIHB1dF9iaW5kX3NrO1xcbitcXG4rXFx0XFx0XFx0XFx0aW5ldCA9IGluZXRfc2soc2spO1xcbitcXHRcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlICE9IFRDUF9DTE9TRSB8fCAhaW5ldC1cXHUwMDNlaW5ldF9udW0pXFxuK1xcdFxcdFxcdFxcdFxcdGdvdG8gcHV0X2JpbmRfc2s7XFxuK1xcbitcXHRcXHRcXHRcXHRpZiAoci1cXHUwMDNlc2RpYWdfZmFtaWx5ICE9IEFGX1VOU1BFQyBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgICAgci1cXHUwMDNlc2RpYWdfZmFtaWx5ICE9IHNrLVxcdTAwM2Vza19mYW1pbHkpXFxuK1xcdFxcdFxcdFxcdFxcdGdvdG8gcHV0X2JpbmRfc2s7XFxuK1xcbitcXHRcXHRcXHRcXHRpZiAocmVzIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgaW5ldF9kaWFnX2JjX3NrKGNiX2RhdGEsIHNrKSkge1xcbitcXHRcXHRcXHRcXHRcXHRyZXMgPSBpbmV0X3NrX2RpYWdfZmlsbChzaywgTlVMTCwgc2tiLCBjYixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ciwgTkxNX0ZfTVVMVEksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdG5ldF9hZG1pbik7XFxuIFxcdFxcdFxcdFxcdFxcdGlmIChyZXMgXFx1MDAzYyAwKVxcbiBcXHRcXHRcXHRcXHRcXHRcXHRudW0gPSBudW1fYXJyW2lkeF07XFxuIFxcdFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0XFx0c29ja19wdXQoc2tfYXJyW2lkeF0pO1xcbitcXHRcXHRcXHRcXHRpZiAocmVzIFxcdTAwM2U9IDApXFxuK1xcdFxcdFxcdFxcdFxcdHRjcF9kaWFnX3NhdmVfY3Vyc29yKGNiX2RhdGEsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgSU5FVF9ESUFHX0RVTVBfQ1VSU09SX1RDUF9CSU5ELFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGksIHNrKTtcXG4rcHV0X2JpbmRfc2s6XFxuK1xcdFxcdFxcdFxcdHNvY2tfcHV0KHNrKTtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRpZiAocmVzIFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0XFx0Z290byBkb25lO1xcbkBAIC00NjMsMTMgKzU4MSwxNSBAQCBzdGF0aWMgdm9pZCB0Y3BfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcXG4gXFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuIFxcbiBcXHRcXHRcXHRpZiAoYWNjdW0gPT0gU0tBUlJfU1opIHtcXG4tXFx0XFx0XFx0XFx0c19udW0gPSBudW0gKyAxO1xcbitcXHRcXHRcXHRcXHRzX251bSA9IDA7XFxuIFxcdFxcdFxcdFxcdGdvdG8gcmVzdW1lX2JpbmRfd2FsaztcXG4gXFx0XFx0XFx0fVxcbiBcXG4rXFx0XFx0XFx0aW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKGNiX2RhdGEpO1xcbiBcXHRcXHRcXHRzX251bSA9IDA7XFxuIFxcdFxcdH1cXG4gc2tpcF9iaW5kX2h0OlxcbitcXHRcXHRpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3IoY2JfZGF0YSk7XFxuIFxcdFxcdGNiLVxcdTAwM2VhcmdzWzBdID0gMjtcXG4gXFx0XFx0c19pID0gbnVtID0gc19udW0gPSAwO1xcbiBcXHR9XFxuQEAgLTQ4Miw0MiArNjAyLDMzIEBAIHN0YXRpYyB2b2lkIHRjcF9kaWFnX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxcbiBcXHRcXHRzcGlubG9ja190ICpsb2NrID0gaW5ldF9laGFzaF9sb2NrcChoYXNoaW5mbywgaSk7XFxuIFxcdFxcdHN0cnVjdCBobGlzdF9udWxsc19ub2RlICpub2RlO1xcbiBcXHRcXHRzdHJ1Y3Qgc29jayAqc2tfYXJyW1NLQVJSX1NaXTtcXG4rXFx0XFx0c3RydWN0IHNvY2sgKmN1cnNvcjtcXG4gXFx0XFx0aW50IG51bV9hcnJbU0tBUlJfU1pdO1xcbiBcXHRcXHRpbnQgaWR4LCBhY2N1bSwgcmVzO1xcbitcXHRcXHRib29sIHVzZV9jdXJzb3I7XFxuIFxcbiBcXHRcXHRpZiAoaGxpc3RfbnVsbHNfZW1wdHkoXFx1MDAyNmhlYWQtXFx1MDAzZWNoYWluKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRpZiAoaSBcXHUwMDNlIHNfaSlcXG4rXFx0XFx0aWYgKGkgXFx1MDAzZSBzX2kpIHtcXG4rXFx0XFx0XFx0aW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKGNiX2RhdGEpO1xcbiBcXHRcXHRcXHRzX251bSA9IDA7XFxuK1xcdFxcdH1cXG4gXFxuIG5leHRfY2h1bms6XFxuIFxcdFxcdG51bSA9IDA7XFxuIFxcdFxcdGFjY3VtID0gMDtcXG4gXFx0XFx0c3Bpbl9sb2NrX2JoKGxvY2spO1xcbi1cXHRcXHRza19udWxsc19mb3JfZWFjaChzaywgbm9kZSwgXFx1MDAyNmhlYWQtXFx1MDAzZWNoYWluKSB7XFxuLVxcdFxcdFxcdGludCBzdGF0ZTtcXG4tXFxuLVxcdFxcdFxcdGlmICghbmV0X2VxKHNvY2tfbmV0KHNrKSwgbmV0KSlcXG4tXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdFxcdGlmIChudW0gXFx1MDAzYyBzX251bSlcXG4tXFx0XFx0XFx0XFx0Z290byBuZXh0X25vcm1hbDtcXG4tXFx0XFx0XFx0c3RhdGUgPSAoc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9USU1FX1dBSVQpID9cXG4tXFx0XFx0XFx0XFx0UkVBRF9PTkNFKGluZXRfdHdzayhzayktXFx1MDAzZXR3X3N1YnN0YXRlKSA6IHNrLVxcdTAwM2Vza19zdGF0ZTtcXG4tXFx0XFx0XFx0aWYgKCEoaWRpYWdfc3RhdGVzIFxcdTAwMjYgKDEgXFx1MDAzY1xcdTAwM2Mgc3RhdGUpKSlcXG4tXFx0XFx0XFx0XFx0Z290byBuZXh0X25vcm1hbDtcXG4tXFx0XFx0XFx0aWYgKHItXFx1MDAzZXNkaWFnX2ZhbWlseSAhPSBBRl9VTlNQRUMgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0ICAgIHNrLVxcdTAwM2Vza19mYW1pbHkgIT0gci1cXHUwMDNlc2RpYWdfZmFtaWx5KVxcbi1cXHRcXHRcXHRcXHRnb3RvIG5leHRfbm9ybWFsO1xcbi1cXHRcXHRcXHRpZiAoci1cXHUwMDNlaWQuaWRpYWdfc3BvcnQgIT0gaHRvbnMoUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19udW0pKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQgICAgci1cXHUwMDNlaWQuaWRpYWdfc3BvcnQpXFxuLVxcdFxcdFxcdFxcdGdvdG8gbmV4dF9ub3JtYWw7XFxuLVxcdFxcdFxcdGlmIChyLVxcdTAwM2VpZC5pZGlhZ19kcG9ydCAhPSBzay1cXHUwMDNlc2tfZHBvcnQgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0ICAgIHItXFx1MDAzZWlkLmlkaWFnX2Rwb3J0KVxcbi1cXHRcXHRcXHRcXHRnb3RvIG5leHRfbm9ybWFsO1xcbi1cXHRcXHRcXHR0d3NrX2J1aWxkX2Fzc2VydCgpO1xcbi1cXG4tXFx0XFx0XFx0aWYgKCFpbmV0X2RpYWdfYmNfc2soY2JfZGF0YSwgc2spKVxcbitcXHRcXHRjdXJzb3IgPSBjYl9kYXRhLVxcdTAwM2VkdW1wX2N1cnNvcjtcXG4rXFx0XFx0dXNlX2N1cnNvciA9IGN1cnNvciBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAgIGNiX2RhdGEtXFx1MDAzZWR1bXBfY3Vyc29yX3R5cGUgPT1cXG4rXFx0XFx0XFx0ICAgICBJTkVUX0RJQUdfRFVNUF9DVVJTT1JfVENQX0VIQVNIIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICAgY2JfZGF0YS1cXHUwMDNlZHVtcF9jdXJzb3Jfc2xvdCA9PSBpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICAgIWhsaXN0X251bGxzX3VuaGFzaGVkKFxcdTAwMjZjdXJzb3ItXFx1MDAzZXNrX251bGxzX25vZGUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICAgY3Vyc29yLVxcdTAwM2Vza19udWxsc19ub2RlLnBwcmV2ICE9IExJU1RfUE9JU09OMjtcXG4rXFx0XFx0bm9kZSA9IHVzZV9jdXJzb3IgPyBjdXJzb3ItXFx1MDAzZXNrX251bGxzX25vZGUubmV4dCA6IGhlYWQtXFx1MDAzZWNoYWluLmZpcnN0O1xcbitcXHRcXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9mcm9tKHNrLCBub2RlLCBza19udWxsc19ub2RlKSB7XFxuK1xcdFxcdFxcdGlmICghdXNlX2N1cnNvciBcXHUwMDI2XFx1MDAyNiBudW0gXFx1MDAzYyBzX251bSlcXG4gXFx0XFx0XFx0XFx0Z290byBuZXh0X25vcm1hbDtcXG4gXFxuIFxcdFxcdFxcdGlmICghcmVmY291bnRfaW5jX25vdF96ZXJvKFxcdTAwMjZzay1cXHUwMDNlc2tfcmVmY250KSlcXG5AQCAtNTM0LDEzICs2NDUsNDIgQEAgc3RhdGljIHZvaWQgdGNwX2RpYWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXFxuIFxcbiBcXHRcXHRyZXMgPSAwO1xcbiBcXHRcXHRmb3IgKGlkeCA9IDA7IGlkeCBcXHUwMDNjIGFjY3VtOyBpZHgrKykge1xcbi1cXHRcXHRcXHRpZiAocmVzIFxcdTAwM2U9IDApIHtcXG4tXFx0XFx0XFx0XFx0cmVzID0gc2tfZGlhZ19maWxsKHNrX2FycltpZHhdLCBza2IsIGNiLCByLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICBOTE1fRl9NVUxUSSwgbmV0X2FkbWluKTtcXG4rXFx0XFx0XFx0aW50IHN0YXRlO1xcbitcXG4rXFx0XFx0XFx0c2sgPSBza19hcnJbaWR4XTtcXG4rXFx0XFx0XFx0aWYgKCFuZXRfZXEoc29ja19uZXQoc2spLCBuZXQpKVxcbitcXHRcXHRcXHRcXHRnb3RvIHB1dF9lc3RhYl9zaztcXG4rXFxuK1xcdFxcdFxcdHN0YXRlID0gKHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBUQ1BfVElNRV9XQUlUKSA/XFxuK1xcdFxcdFxcdFxcdFJFQURfT05DRShpbmV0X3R3c2soc2spLVxcdTAwM2V0d19zdWJzdGF0ZSkgOiBzay1cXHUwMDNlc2tfc3RhdGU7XFxuK1xcdFxcdFxcdGlmICghKGlkaWFnX3N0YXRlcyBcXHUwMDI2ICgxIFxcdTAwM2NcXHUwMDNjIHN0YXRlKSkpXFxuK1xcdFxcdFxcdFxcdGdvdG8gcHV0X2VzdGFiX3NrO1xcbitcXG4rXFx0XFx0XFx0aWYgKHItXFx1MDAzZXNkaWFnX2ZhbWlseSAhPSBBRl9VTlNQRUMgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgIHNrLVxcdTAwM2Vza19mYW1pbHkgIT0gci1cXHUwMDNlc2RpYWdfZmFtaWx5KVxcbitcXHRcXHRcXHRcXHRnb3RvIHB1dF9lc3RhYl9zaztcXG4rXFxuK1xcdFxcdFxcdGlmIChyLVxcdTAwM2VpZC5pZGlhZ19zcG9ydCAhPSBodG9ucyhSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX251bSkpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICByLVxcdTAwM2VpZC5pZGlhZ19zcG9ydClcXG4rXFx0XFx0XFx0XFx0Z290byBwdXRfZXN0YWJfc2s7XFxuK1xcbitcXHRcXHRcXHRpZiAoci1cXHUwMDNlaWQuaWRpYWdfZHBvcnQgIT0gc2stXFx1MDAzZXNrX2Rwb3J0IFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICByLVxcdTAwM2VpZC5pZGlhZ19kcG9ydClcXG4rXFx0XFx0XFx0XFx0Z290byBwdXRfZXN0YWJfc2s7XFxuK1xcbitcXHRcXHRcXHR0d3NrX2J1aWxkX2Fzc2VydCgpO1xcbitcXHRcXHRcXHRpZiAocmVzIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgaW5ldF9kaWFnX2JjX3NrKGNiX2RhdGEsIHNrKSkge1xcbitcXHRcXHRcXHRcXHRyZXMgPSBza19kaWFnX2ZpbGwoc2ssIHNrYiwgY2IsIHIsIE5MTV9GX01VTFRJLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBuZXRfYWRtaW4pO1xcbiBcXHRcXHRcXHRcXHRpZiAocmVzIFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0XFx0XFx0bnVtID0gbnVtX2FycltpZHhdO1xcbiBcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdHNvY2tfZ2VuX3B1dChza19hcnJbaWR4XSk7XFxuK1xcdFxcdFxcdGlmIChyZXMgXFx1MDAzZT0gMClcXG4rXFx0XFx0XFx0XFx0dGNwX2RpYWdfc2F2ZV9jdXJzb3IoY2JfZGF0YSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBJTkVUX0RJQUdfRFVNUF9DVVJTT1JfVENQX0VIQVNILFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGksIHNrKTtcXG4rcHV0X2VzdGFiX3NrOlxcbitcXHRcXHRcXHRzb2NrX2dlbl9wdXQoc2spO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlmIChyZXMgXFx1MDAzYyAwKVxcbiBcXHRcXHRcXHRicmVhaztcXG5AQCAtNTQ4LDkgKzY4OCwxMSBAQCBzdGF0aWMgdm9pZCB0Y3BfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcXG4gXFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuIFxcbiBcXHRcXHRpZiAoYWNjdW0gPT0gU0tBUlJfU1opIHtcXG4tXFx0XFx0XFx0c19udW0gPSBudW0gKyAxO1xcbitcXHRcXHRcXHRzX251bSA9IDA7XFxuIFxcdFxcdFxcdGdvdG8gbmV4dF9jaHVuaztcXG4gXFx0XFx0fVxcbitcXG4rXFx0XFx0aW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKGNiX2RhdGEpO1xcbiBcXHR9XFxuIFxcbiBkb25lOlxcbmRpZmYgLS1naXQgYS9uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jIGIvbmV0L21wdGNwL21wdGNwX2RpYWcuY1xcbmluZGV4IDEzNmMyZDA1YzBlZWIuLjk4MWU2NDM0MzAzOTAgMTAwNjQ0XFxuLS0tIGEvbmV0L21wdGNwL21wdGNwX2RpYWcuY1xcbisrKyBiL25ldC9tcHRjcC9tcHRjcF9kaWFnLmNcXG5AQCAtNiwxMiArNiwyNSBAQFxcbiAgKiBBdXRob3I6IFBhb2xvIEFiZW5pIFxcdTAwM2NwYWJlbmlAcmVkaGF0LmNvbVxcdTAwM2VcXG4gICovXFxuIFxcbisvKiBQcm9jZXNzIGEgYm91bmRlZCBudW1iZXIgb2YgbGlzdGVuZXJzIHBlciBidWNrZXQgbG9jayBob2xkLiAqL1xcbisjZGVmaW5lIE1QVENQX0RJQUdfQlVMS19TWiAxNlxcbitcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbmV0X2RpYWcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRsaW5rLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJwcm90b2NvbC5oXFxcIlxcbiBcXG4rc3RhdGljIHZvaWQgbXB0Y3BfZGlhZ19zYXZlX2N1cnNvcihzdHJ1Y3QgaW5ldF9kaWFnX2R1bXBfZGF0YSAqY2JfZGF0YSxcXG4rXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IHNsb3QsIHN0cnVjdCBzb2NrICpzaylcXG4re1xcbitcXHRzb2NrX2hvbGQoc2spO1xcbitcXHRpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3IoY2JfZGF0YSk7XFxuK1xcdGNiX2RhdGEtXFx1MDAzZWR1bXBfY3Vyc29yID0gc2s7XFxuK1xcdGNiX2RhdGEtXFx1MDAzZWR1bXBfY3Vyc29yX3Nsb3QgPSBzbG90O1xcbitcXHRjYl9kYXRhLVxcdTAwM2VkdW1wX2N1cnNvcl90eXBlID0gSU5FVF9ESUFHX0RVTVBfQ1VSU09SX01QVENQX0xJU1RFTjtcXG4rfVxcbitcXG4gc3RhdGljIGludCBza19kaWFnX2R1bXAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXFxuIFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfcmVxX3YyICpyZXEsXFxuQEAgLTc3LDYgKzkwLDcgQEAgc3RhdGljIHZvaWQgbXB0Y3BfZGlhZ19kdW1wX2xpc3RlbmVycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFcXG4gXFx0XFx0XFx0XFx0ICAgICAgYm9vbCBuZXRfYWRtaW4pXFxuIHtcXG4gXFx0c3RydWN0IG1wdGNwX2RpYWdfY3R4ICpkaWFnX2N0eCA9ICh2b2lkICopY2ItXFx1MDAzZWN0eDtcXG4rXFx0c3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEgPSBjYi1cXHUwMDNlZGF0YTtcXG4gXFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVxcdTAwM2Vzayk7XFxuIFxcdHN0cnVjdCBpbmV0X2hhc2hpbmZvICpoaW5mbztcXG4gXFx0aW50IGk7XFxuQEAgLTg2LDYyICsxMDAsOTggQEAgc3RhdGljIHZvaWQgbXB0Y3BfZGlhZ19kdW1wX2xpc3RlbmVycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFcXG4gXFx0Zm9yIChpID0gZGlhZ19jdHgtXFx1MDAzZWxfc2xvdDsgaSBcXHUwMDNjPSBoaW5mby1cXHUwMDNlbGhhc2gyX21hc2s7IGkrKykge1xcbiBcXHRcXHRzdHJ1Y3QgaW5ldF9saXN0ZW5faGFzaGJ1Y2tldCAqaWxiO1xcbiBcXHRcXHRzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbm9kZTtcXG4tXFx0XFx0c3RydWN0IHNvY2sgKnNrO1xcbi1cXHRcXHRpbnQgbnVtID0gMDtcXG4tXFxuK1xcdFxcdHN0cnVjdCBzb2NrICp0bXAsICpzaywgKnNrX2FycltNUFRDUF9ESUFHX0JVTEtfU1pdO1xcbitcXHRcXHRzdHJ1Y3Qgc29jayAqY3Vyc29yO1xcbitcXHRcXHRpbnQgYWNjdW0sIGlkeCwgbnVtLCByZXQ7XFxuK1xcdFxcdGludCBudW1fYXJyW01QVENQX0RJQUdfQlVMS19TWl07XFxuK1xcdFxcdGJvb2wgdXNlX2N1cnNvcjtcXG4rXFxuK3Jlc3VtZV9saXN0ZW5fd2FsazpcXG4rXFx0XFx0bnVtID0gMDtcXG4rXFx0XFx0YWNjdW0gPSAwO1xcbiBcXHRcXHRpbGIgPSBcXHUwMDI2aGluZm8tXFx1MDAzZWxoYXNoMltpXTtcXG4rXFx0XFx0cmV0ID0gMDtcXG4gXFxuIFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZpbGItXFx1MDAzZWxvY2spO1xcbi1cXHRcXHRza19udWxsc19mb3JfZWFjaChzaywgbm9kZSwgXFx1MDAyNmlsYi1cXHUwMDNlbnVsbHNfaGVhZCkge1xcbi1cXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpjdHggPSBtcHRjcF9zdWJmbG93X2N0eChzayk7XFxuLVxcdFxcdFxcdHN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTtcXG4tXFx0XFx0XFx0aW50IHJldDtcXG4tXFxuLVxcdFxcdFxcdGlmIChudW0gXFx1MDAzYyBkaWFnX2N0eC1cXHUwMDNlbF9udW0pXFxuLVxcdFxcdFxcdFxcdGdvdG8gbmV4dF9saXN0ZW47XFxuLVxcbi1cXHRcXHRcXHRpZiAoIWN0eCB8fCBzdHJjbXAoaW5ldF9jc2soc2spLVxcdTAwM2VpY3NrX3VscF9vcHMtXFx1MDAzZW5hbWUsIFxcXCJtcHRjcFxcXCIpKVxcbi1cXHRcXHRcXHRcXHRnb3RvIG5leHRfbGlzdGVuO1xcbi1cXG4tXFx0XFx0XFx0c2sgPSBjdHgtXFx1MDAzZWNvbm47XFxuLVxcdFxcdFxcdGlmICghc2sgfHwgIW5ldF9lcShzb2NrX25ldChzayksIG5ldCkpXFxuLVxcdFxcdFxcdFxcdGdvdG8gbmV4dF9saXN0ZW47XFxuLVxcbi1cXHRcXHRcXHRpZiAoci1cXHUwMDNlc2RpYWdfZmFtaWx5ICE9IEFGX1VOU1BFQyBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQgICAgc2stXFx1MDAzZXNrX2ZhbWlseSAhPSByLVxcdTAwM2VzZGlhZ19mYW1pbHkpXFxuLVxcdFxcdFxcdFxcdGdvdG8gbmV4dF9saXN0ZW47XFxuLVxcbi1cXHRcXHRcXHRpZiAoci1cXHUwMDNlaWQuaWRpYWdfc3BvcnQgIT0gaW5ldC1cXHUwMDNlaW5ldF9zcG9ydCBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQgICAgci1cXHUwMDNlaWQuaWRpYWdfc3BvcnQpXFxuK1xcdFxcdGN1cnNvciA9IGNiX2RhdGEtXFx1MDAzZWR1bXBfY3Vyc29yO1xcbitcXHRcXHR1c2VfY3Vyc29yID0gY3Vyc29yIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICAgY2JfZGF0YS1cXHUwMDNlZHVtcF9jdXJzb3JfdHlwZSA9PVxcbitcXHRcXHRcXHQgICAgIElORVRfRElBR19EVU1QX0NVUlNPUl9NUFRDUF9MSVNURU4gXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgICBjYl9kYXRhLVxcdTAwM2VkdW1wX2N1cnNvcl9zbG90ID09IGkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgICAhaGxpc3RfbnVsbHNfdW5oYXNoZWQoXFx1MDAyNmN1cnNvci1cXHUwMDNlc2tfbnVsbHNfbm9kZSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgICBjdXJzb3ItXFx1MDAzZXNrX251bGxzX25vZGUucHByZXYgIT0gTElTVF9QT0lTT04yO1xcbitcXHRcXHRub2RlID0gdXNlX2N1cnNvciA/IGN1cnNvci1cXHUwMDNlc2tfbnVsbHNfbm9kZS5uZXh0IDpcXG4rXFx0XFx0XFx0XFx0ICAgIGlsYi1cXHUwMDNlbnVsbHNfaGVhZC5maXJzdDtcXG4rXFx0XFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfZnJvbShzaywgbm9kZSwgc2tfbnVsbHNfbm9kZSkge1xcbitcXHRcXHRcXHRpZiAoIXVzZV9jdXJzb3IgXFx1MDAyNlxcdTAwMjYgbnVtIFxcdTAwM2MgZGlhZ19jdHgtXFx1MDAzZWxfbnVtKVxcbiBcXHRcXHRcXHRcXHRnb3RvIG5leHRfbGlzdGVuO1xcbiBcXG4gXFx0XFx0XFx0aWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oXFx1MDAyNnNrLVxcdTAwM2Vza19yZWZjbnQpKVxcbiBcXHRcXHRcXHRcXHRnb3RvIG5leHRfbGlzdGVuO1xcbiBcXG4tXFx0XFx0XFx0cmV0ID0gc2tfZGlhZ19kdW1wKHNrLCBza2IsIGNiLCByLCBuZXRfYWRtaW4pO1xcbi1cXG4tXFx0XFx0XFx0c29ja19wdXQoc2spO1xcbi1cXG4tXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tXFx0XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmlsYi1cXHUwMDNlbG9jayk7XFxuLVxcdFxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi1cXHRcXHRcXHRcXHRkaWFnX2N0eC1cXHUwMDNlbF9zbG90ID0gaTtcXG4tXFx0XFx0XFx0XFx0ZGlhZ19jdHgtXFx1MDAzZWxfbnVtID0gbnVtO1xcbi1cXHRcXHRcXHRcXHRyZXR1cm47XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0ZGlhZ19jdHgtXFx1MDAzZWxfbnVtID0gbnVtICsgMTtcXG4tXFx0XFx0XFx0bnVtID0gMDtcXG4rXFx0XFx0XFx0bnVtX2FyclthY2N1bV0gPSBudW07XFxuK1xcdFxcdFxcdHNrX2FyclthY2N1bV0gPSBzaztcXG4rXFx0XFx0XFx0aWYgKCsrYWNjdW0gPT0gTVBUQ1BfRElBR19CVUxLX1NaKVxcbitcXHRcXHRcXHRcXHRicmVhaztcXG4gbmV4dF9saXN0ZW46XFxuIFxcdFxcdFxcdCsrbnVtO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZpbGItXFx1MDAzZWxvY2spO1xcbiBcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFxuK1xcdFxcdGZvciAoaWR4ID0gMDsgaWR4IFxcdTAwM2MgYWNjdW07IGlkeCsrKSB7XFxuK1xcdFxcdFxcdGNvbnN0IHN0cnVjdCB0Y3BfdWxwX29wcyAqdWxwX29wcztcXG4rXFx0XFx0XFx0Y29uc3Qgc3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqY3R4O1xcbitcXHRcXHRcXHRzdHJ1Y3QgaW5ldF9zb2NrICppbmV0O1xcbitcXG4rXFx0XFx0XFx0c2sgPSBza19hcnJbaWR4XTtcXG4rXFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRcXHRcXHRjdHggPSBtcHRjcF9zdWJmbG93X2N0eChzayk7XFxuK1xcdFxcdFxcdHVscF9vcHMgPSBSRUFEX09OQ0UoaW5ldF9jc2soc2spLVxcdTAwM2VpY3NrX3VscF9vcHMpO1xcbitcXHRcXHRcXHRpbmV0ID0gaW5ldF9zayhzayk7XFxuK1xcdFxcdFxcdHRtcCA9IGN0eCA/IGN0eC1cXHUwMDNlY29ubiA6IE5VTEw7XFxuK1xcdFxcdFxcdGlmICghY3R4IHx8ICF1bHBfb3BzIHx8IHN0cmNtcCh1bHBfb3BzLVxcdTAwM2VuYW1lLCBcXFwibXB0Y3BcXFwiKSB8fFxcbitcXHRcXHRcXHQgICAgIXRtcCB8fCAhbmV0X2VxKHNvY2tfbmV0KHRtcCksIG5ldCkgfHxcXG4rXFx0XFx0XFx0ICAgIChyLVxcdTAwM2VzZGlhZ19mYW1pbHkgIT0gQUZfVU5TUEVDIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICAgdG1wLVxcdTAwM2Vza19mYW1pbHkgIT0gci1cXHUwMDNlc2RpYWdfZmFtaWx5KSB8fFxcbitcXHRcXHRcXHQgICAgKHItXFx1MDAzZWlkLmlkaWFnX3Nwb3J0ICE9IGluZXQtXFx1MDAzZWluZXRfc3BvcnQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgICByLVxcdTAwM2VpZC5pZGlhZ19zcG9ydCkgfHxcXG4rXFx0XFx0XFx0ICAgICFyZWZjb3VudF9pbmNfbm90X3plcm8oXFx1MDAyNnRtcC1cXHUwMDNlc2tfcmVmY250KSkge1xcbitcXHRcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0XFx0XFx0XFx0Z290byBwcm9jZXNzZWRfbGlzdGVuZXJfc2s7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzZT0gMCkge1xcbitcXHRcXHRcXHRcXHRyZXQgPSBza19kaWFnX2R1bXAodG1wLCBza2IsIGNiLCByLCBuZXRfYWRtaW4pO1xcbitcXHRcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0XFx0bnVtID0gbnVtX2FycltpZHhdO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdHNvY2tfcHV0KHRtcCk7XFxuK3Byb2Nlc3NlZF9saXN0ZW5lcl9zazpcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNlPSAwKVxcbitcXHRcXHRcXHRcXHRtcHRjcF9kaWFnX3NhdmVfY3Vyc29yKGNiX2RhdGEsIGksIHNrKTtcXG4rXFx0XFx0XFx0c29ja19wdXQoc2spO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbitcXHRcXHRcXHRkaWFnX2N0eC1cXHUwMDNlbF9zbG90ID0gaTtcXG4rXFx0XFx0XFx0ZGlhZ19jdHgtXFx1MDAzZWxfbnVtID0gbnVtO1xcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbitcXG4rXFx0XFx0aWYgKGFjY3VtID09IE1QVENQX0RJQUdfQlVMS19TWikge1xcbitcXHRcXHRcXHRkaWFnX2N0eC1cXHUwMDNlbF9udW0gPSAwO1xcbitcXHRcXHRcXHRnb3RvIHJlc3VtZV9saXN0ZW5fd2FsaztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKGNiX2RhdGEpO1xcbiBcXHRcXHRkaWFnX2N0eC1cXHUwMDNlbF9udW0gPSAwO1xcbiBcXHR9XFxuIFxcbitcXHRpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3IoY2JfZGF0YSk7XFxuIFxcdGRpYWdfY3R4LVxcdTAwM2VsX251bSA9IDA7XFxuIFxcdGRpYWdfY3R4LVxcdTAwM2VsX3Nsb3QgPSBpO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE3OjUyOjUxLjM1NDA5NzU5MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM3MDE2MzAzODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRfRElBR1wiLFxuICAgIFwiSU5FVF9UQ1BfRElBR1wiLFxuICAgIFwiTVBUQ1BcIixcbiAgICBcIklORVRfTVBUQ1BfRElBR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF9kaWFnX2R1bXBcIixcbiAgICBcIm1wdGNwX2RpYWdfZHVtcF9saXN0ZW5lcnNcIixcbiAgICBcImluZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBjdXJzb3IgbWVjaGFuaXNtIGZvciBkdW1waW5nIFRDUCBhbmQgTVBUQ1Agc29ja2V0cyB2aWEgdGhlIGluZXRfZGlhZyBuZXRsaW5rIGludGVyZmFjZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgdGhhdCBhZmZlY3RzIGhvdyBzb2NrZXRzIGFyZSBpdGVyYXRlZCBhbmQgZHVtcGVkLCBwcmV2ZW50aW5nIGR1cGxpY2F0ZXMgb3IgbWlzc2VkIHNvY2tldHMgd2hlbiB0aGUgaGFzaCB0YWJsZSBjaGFuZ2VzIGR1cmluZyB0aGUgZHVtcC4gSXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbmV0bGluayBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjI5YTMxNTE5ZGNlZTJiY2Q1OWZmZTJkYTRkMjVkMTZiYWU2OWRiN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDMwIDE3OjUyOjUwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbmV0X2RpYWcuaCBiL2luY2x1ZGUvbGludXgvaW5ldF9kaWFnLmhcbmluZGV4IDcwNGZkNDE1YzJiNDkuLjQ4NTllNzdhMjhjN2EgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2luZXRfZGlhZy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2luZXRfZGlhZy5oXG5AQCAtNiw2ICs2LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L2luZXRfZGlhZy5oXHUwMDNlXG4gXG4gc3RydWN0IGluZXRfaGFzaGluZm87XG4rc3RydWN0IHNvY2s7XG4gXG4gc3RydWN0IGluZXRfZGlhZ19oYW5kbGVyIHtcbiBcdHN0cnVjdCBtb2R1bGVcdCpvd25lcjtcbkBAIC0zMiwxMiArMzMsMjQgQEAgc3RydWN0IGluZXRfZGlhZ19oYW5kbGVyIHtcbiB9O1xuIFxuIHN0cnVjdCBicGZfc2tfc3RvcmFnZV9kaWFnO1xuK1xuK2VudW0gaW5ldF9kaWFnX2R1bXBfY3Vyc29yX3R5cGUge1xuK1x0SU5FVF9ESUFHX0RVTVBfQ1VSU09SX05PTkUsXG4rXHRJTkVUX0RJQUdfRFVNUF9DVVJTT1JfVENQX0xJU1RFTixcbitcdElORVRfRElBR19EVU1QX0NVUlNPUl9UQ1BfQklORCxcbitcdElORVRfRElBR19EVU1QX0NVUlNPUl9UQ1BfRUhBU0gsXG4rXHRJTkVUX0RJQUdfRFVNUF9DVVJTT1JfTVBUQ1BfTElTVEVOLFxuK307XG4rXG4gc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEge1xuIFx0c3RydWN0IG5sYXR0ciAqcmVxX25sYXNbX19JTkVUX0RJQUdfUkVRX01BWF07XG4gI2RlZmluZSBpbmV0X2RpYWdfbmxhX2JjIHJlcV9ubGFzW0lORVRfRElBR19SRVFfQllURUNPREVdXG4gI2RlZmluZSBpbmV0X2RpYWdfbmxhX2JwZl9zdGdzIHJlcV9ubGFzW0lORVRfRElBR19SRVFfU0tfQlBGX1NUT1JBR0VTXVxuIFxuIFx0c3RydWN0IGJwZl9za19zdG9yYWdlX2RpYWcgKmJwZl9zdGdfZGlhZztcbitcdHN0cnVjdCBzb2NrICpkdW1wX2N1cnNvcjtcbitcdHVuc2lnbmVkIGludCBkdW1wX2N1cnNvcl9zbG90O1xuK1x0dTggZHVtcF9jdXJzb3JfdHlwZTtcbiBcdGJvb2wgbWFya19uZWVkZWQ7XHQvKiBJTkVUX0RJQUdfQkNfTUFSS19DT05EIHByZXNlbnQuICovXG4gI2lmZGVmIENPTkZJR19TT0NLX0NHUk9VUF9EQVRBXG4gXHRib29sIGNncm91cF9uZWVkZWQ7XHQvKiBJTkVUX0RJQUdfQkNfQ0dST1VQX0NPTkQgcHJlc2VudC4gKi9cbkBAIC01Myw2ICs2Niw4IEBAIGludCBpbmV0X3NrX2RpYWdfZmlsbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayxcbiBcbiBpbnQgaW5ldF9kaWFnX2JjX3NrKGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfZHVtcF9kYXRhICpjYl9kYXRhLCBzdHJ1Y3Qgc29jayAqc2spO1xuIFxuK3ZvaWQgaW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKHN0cnVjdCBpbmV0X2RpYWdfZHVtcF9kYXRhICpjYl9kYXRhKTtcbitcbiB2b2lkIGluZXRfZGlhZ19tc2dfY29tbW9uX2ZpbGwoc3RydWN0IGluZXRfZGlhZ19tc2cgKnIsIHN0cnVjdCBzb2NrICpzayk7XG4gXG4gc3RhdGljIGlubGluZSBzaXplX3QgaW5ldF9kaWFnX21zZ19hdHRyc19zaXplKHZvaWQpXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9kaWFnLmMgYi9uZXQvaXB2NC9pbmV0X2RpYWcuY1xuaW5kZXggMzRiNzdhYTg3ZDBhNC4uNDExNDhlODgwMDU0NSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2luZXRfZGlhZy5jXG4rKysgYi9uZXQvaXB2NC9pbmV0X2RpYWcuY1xuQEAgLTg5MSwxMCArODkxLDIzIEBAIHN0YXRpYyBpbnQgaW5ldF9kaWFnX2R1bXBfc3RhcnRfY29tcGF0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdHJldHVybiBfX2luZXRfZGlhZ19kdW1wX3N0YXJ0KGNiLCBzaXplb2Yoc3RydWN0IGluZXRfZGlhZ19yZXEpKTtcbiB9XG4gXG4rdm9pZCBpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3Ioc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEpXG4re1xuK1x0aWYgKCFjYl9kYXRhLVx1MDAzZWR1bXBfY3Vyc29yKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRzb2NrX2dlbl9wdXQoY2JfZGF0YS1cdTAwM2VkdW1wX2N1cnNvcik7XG4rXHRjYl9kYXRhLVx1MDAzZWR1bXBfY3Vyc29yID0gTlVMTDtcbitcdGNiX2RhdGEtXHUwMDNlZHVtcF9jdXJzb3Jfc2xvdCA9IDA7XG4rXHRjYl9kYXRhLVx1MDAzZWR1bXBfY3Vyc29yX3R5cGUgPSBJTkVUX0RJQUdfRFVNUF9DVVJTT1JfTk9ORTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoaW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKTtcbitcbiBzdGF0aWMgaW50IGluZXRfZGlhZ19kdW1wX2RvbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIHtcbiBcdHN0cnVjdCBpbmV0X2RpYWdfZHVtcF9kYXRhICpjYl9kYXRhID0gY2ItXHUwMDNlZGF0YTtcbiBcbitcdGluZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvcihjYl9kYXRhKTtcbiBcdGJwZl9za19zdG9yYWdlX2RpYWdfZnJlZShjYl9kYXRhLVx1MDAzZWJwZl9zdGdfZGlhZyk7XG4gXHRrZnJlZShjYi1cdTAwM2VkYXRhKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfZGlhZy5jIGIvbmV0L2lwdjQvdGNwX2RpYWcuY1xuaW5kZXggYmExZmRiZTk4MDdmZC4uYmUwYzIyY2M0NDViMiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9kaWFnLmNcbisrKyBiL25ldC9pcHY0L3RjcF9kaWFnLmNcbkBAIC0yODUsNiArMjg1LDY1IEBAIHN0YXRpYyBpbnQgc2tfZGlhZ19maWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCBuZXRfYWRtaW4pO1xuIH1cbiBcbisvKiBQcm9jZXNzIGEgbWF4aW11bSBvZiBTS0FSUl9TWiBzb2NrZXRzIGF0IGEgdGltZSB3aGVuIHdhbGtpbmcgaGFzaCBidWNrZXRzXG4rICogd2l0aCBiaCBkaXNhYmxlZC5cbisgKi9cbisjZGVmaW5lIFNLQVJSX1NaIDE2XG4rXG4rc3RhdGljIHZvaWQgdGNwX2RpYWdfc2F2ZV9jdXJzb3Ioc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEsIGludCB0eXBlLFxuK1x0XHRcdFx0IHVuc2lnbmVkIGludCBzbG90LCBzdHJ1Y3Qgc29jayAqc2spXG4re1xuK1x0c29ja19ob2xkKHNrKTtcbitcdGluZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvcihjYl9kYXRhKTtcbitcdGNiX2RhdGEtXHUwMDNlZHVtcF9jdXJzb3IgPSBzaztcbitcdGNiX2RhdGEtXHUwMDNlZHVtcF9jdXJzb3Jfc2xvdCA9IHNsb3Q7XG4rXHRjYl9kYXRhLVx1MDAzZWR1bXBfY3Vyc29yX3R5cGUgPSB0eXBlO1xuK31cbitcbitzdGF0aWMgYm9vbCB0Y3BfZGlhZ19iaW5kX2NvbGxlY3Rfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICoqc2tfYXJyLFxuK1x0XHRcdFx0ICAgICAgIGludCAqbnVtX2FyciwgaW50ICphY2N1bSwgaW50IG51bSlcbit7XG4rXHRzb2NrX2hvbGQoc2spO1xuK1x0bnVtX2FyclsqYWNjdW1dID0gbnVtO1xuK1x0c2tfYXJyWyphY2N1bV0gPSBzaztcbitcbitcdHJldHVybiArKyphY2N1bSA9PSBTS0FSUl9TWjtcbit9XG4rXG4rc3RhdGljIGJvb2wgdGNwX2RpYWdfYmluZF9jb2xsZWN0X293bmVycyhzdHJ1Y3QgaGxpc3RfaGVhZCAqb3duZXJzLFxuK1x0XHRcdFx0XHQgc3RydWN0IHNvY2sgKipza19hcnIsIGludCAqbnVtX2FycixcbitcdFx0XHRcdFx0IGludCAqYWNjdW0sIGludCAqbnVtLCBpbnQgc19udW0pXG4re1xuK1x0c3RydWN0IHNvY2sgKnNrO1xuK1xuK1x0c2tfZm9yX2VhY2hfYm91bmQoc2ssIG93bmVycykge1xuK1x0XHRpZiAoKm51bSBcdTAwM2Mgc19udW0pIHtcbitcdFx0XHQoKm51bSkrKztcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuK1x0XHRpZiAodGNwX2RpYWdfYmluZF9jb2xsZWN0X3NvY2soc2ssIHNrX2FyciwgbnVtX2FyciwgYWNjdW0sICpudW0pKVxuK1x0XHRcdHJldHVybiB0cnVlO1xuK1x0XHQoKm51bSkrKztcbitcdH1cbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rc3RhdGljIGJvb2wgdGNwX2RpYWdfYmluZF9jb2xsZWN0X293bmVyc19jb250aW51ZShzdHJ1Y3Qgc29jayAqc2ssXG4rXHRcdFx0XHRcdFx0ICBzdHJ1Y3Qgc29jayAqKnNrX2FycixcbitcdFx0XHRcdFx0XHQgIGludCAqbnVtX2FyciwgaW50ICphY2N1bSxcbitcdFx0XHRcdFx0XHQgIGludCAqbnVtKVxuK3tcbitcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlKHNrLCBza19iaW5kX25vZGUpIHtcbitcdFx0aWYgKHRjcF9kaWFnX2JpbmRfY29sbGVjdF9zb2NrKHNrLCBza19hcnIsIG51bV9hcnIsIGFjY3VtLCAqbnVtKSlcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0KCpudW0pKys7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHR3c2tfYnVpbGRfYXNzZXJ0KHZvaWQpXG4ge1xuIFx0QlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2ssIHR3X2ZhbWlseSkgIT1cbkBAIC0zMzUsOCArMzk0LDE1IEBAIHN0YXRpYyB2b2lkIHRjcF9kaWFnX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxuIFx0XHRmb3IgKGkgPSBzX2k7IGkgXHUwMDNjPSBoYXNoaW5mby1cdTAwM2VsaGFzaDJfbWFzazsgaSsrKSB7XG4gXHRcdFx0c3RydWN0IGluZXRfbGlzdGVuX2hhc2hidWNrZXQgKmlsYjtcbiBcdFx0XHRzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbm9kZTtcbitcdFx0XHRzdHJ1Y3Qgc29jayAqc2tfYXJyW1NLQVJSX1NaXTtcbitcdFx0XHRzdHJ1Y3Qgc29jayAqY3Vyc29yO1xuK1x0XHRcdGludCBudW1fYXJyW1NLQVJSX1NaXTtcbitcdFx0XHRpbnQgaWR4LCBhY2N1bSwgcmVzO1xuK1x0XHRcdGJvb2wgdXNlX2N1cnNvcjtcbiBcbityZXN1bWVfbGlzdGVuX3dhbGs6XG4gXHRcdFx0bnVtID0gMDtcbitcdFx0XHRhY2N1bSA9IDA7XG4gXHRcdFx0aWxiID0gXHUwMDI2aGFzaGluZm8tXHUwMDNlbGhhc2gyW2ldO1xuIFxuIFx0XHRcdGlmIChobGlzdF9udWxsc19lbXB0eShcdTAwMjZpbGItXHUwMDNlbnVsbHNfaGVhZCkpIHtcbkBAIC0zNDQsNTIgKzQxMCw4MCBAQCBzdGF0aWMgdm9pZCB0Y3BfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdH1cbiBcdFx0XHRzcGluX2xvY2soXHUwMDI2aWxiLVx1MDAzZWxvY2spO1xuLVx0XHRcdHNrX251bGxzX2Zvcl9lYWNoKHNrLCBub2RlLCBcdTAwMjZpbGItXHUwMDNlbnVsbHNfaGVhZCkge1xuLVx0XHRcdFx0c3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spO1xuK1x0XHRcdGN1cnNvciA9IGNiX2RhdGEtXHUwMDNlZHVtcF9jdXJzb3I7XG4rXHRcdFx0dXNlX2N1cnNvciA9IGN1cnNvciBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdCAgICAgY2JfZGF0YS1cdTAwM2VkdW1wX2N1cnNvcl90eXBlID09XG4rXHRcdFx0XHQgICAgIElORVRfRElBR19EVU1QX0NVUlNPUl9UQ1BfTElTVEVOIFx1MDAyNlx1MDAyNlxuK1x0XHRcdFx0ICAgICBjYl9kYXRhLVx1MDAzZWR1bXBfY3Vyc29yX3Nsb3QgPT0gaSBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdCAgICAgIWhsaXN0X251bGxzX3VuaGFzaGVkKFx1MDAyNmN1cnNvci1cdTAwM2Vza19udWxsc19ub2RlKSBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdCAgICAgY3Vyc29yLVx1MDAzZXNrX251bGxzX25vZGUucHByZXYgIT0gTElTVF9QT0lTT04yO1xuK1x0XHRcdG5vZGUgPSB1c2VfY3Vyc29yID8gY3Vyc29yLVx1MDAzZXNrX251bGxzX25vZGUubmV4dCA6XG4rXHRcdFx0XHRcdCAgICBpbGItXHUwMDNlbnVsbHNfaGVhZC5maXJzdDtcbitcdFx0XHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9mcm9tKHNrLCBub2RlLCBza19udWxsc19ub2RlKSB7XG4rXHRcdFx0XHRpZiAoIXVzZV9jdXJzb3IgXHUwMDI2XHUwMDI2IG51bSBcdTAwM2Mgc19udW0pXG4rXHRcdFx0XHRcdGdvdG8gbmV4dF9saXN0ZW47XG4gXG4tXHRcdFx0XHRpZiAoIW5ldF9lcShzb2NrX25ldChzayksIG5ldCkpXG4tXHRcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdFx0c29ja19ob2xkKHNrKTtcbitcdFx0XHRcdG51bV9hcnJbYWNjdW1dID0gbnVtO1xuK1x0XHRcdFx0c2tfYXJyW2FjY3VtXSA9IHNrO1xuK1x0XHRcdFx0aWYgKCsrYWNjdW0gPT0gU0tBUlJfU1opXG4rXHRcdFx0XHRcdGJyZWFrO1xuIFxuLVx0XHRcdFx0aWYgKG51bSBcdTAwM2Mgc19udW0pIHtcbi1cdFx0XHRcdFx0bnVtKys7XG4tXHRcdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdFx0fVxuK25leHRfbGlzdGVuOlxuK1x0XHRcdFx0KytudW07XG4rXHRcdFx0fVxuK1x0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmlsYi1cdTAwM2Vsb2NrKTtcbiBcbitcdFx0XHRyZXMgPSAwO1xuK1x0XHRcdGZvciAoaWR4ID0gMDsgaWR4IFx1MDAzYyBhY2N1bTsgaWR4KyspIHtcbitcdFx0XHRcdHN0cnVjdCBpbmV0X3NvY2sgKmluZXQ7XG4rXG4rXHRcdFx0XHRzayA9IHNrX2FycltpZHhdO1xuK1x0XHRcdFx0aWYgKCFuZXRfZXEoc29ja19uZXQoc2spLCBuZXQpKVxuK1x0XHRcdFx0XHRnb3RvIHByb2Nlc3NlZF9saXN0ZW5fc2s7XG4rXG4rXHRcdFx0XHRpbmV0ID0gaW5ldF9zayhzayk7XG4gXHRcdFx0XHRpZiAoci1cdTAwM2VzZGlhZ19mYW1pbHkgIT0gQUZfVU5TUEVDIFx1MDAyNlx1MDAyNlxuIFx0XHRcdFx0ICAgIHNrLVx1MDAzZXNrX2ZhbWlseSAhPSByLVx1MDAzZXNkaWFnX2ZhbWlseSlcbi1cdFx0XHRcdFx0Z290byBuZXh0X2xpc3RlbjtcbitcdFx0XHRcdFx0Z290byBwcm9jZXNzZWRfbGlzdGVuX3NrO1xuIFxuIFx0XHRcdFx0aWYgKHItXHUwMDNlaWQuaWRpYWdfc3BvcnQgIT0gaW5ldC1cdTAwM2VpbmV0X3Nwb3J0IFx1MDAyNlx1MDAyNlxuIFx0XHRcdFx0ICAgIHItXHUwMDNlaWQuaWRpYWdfc3BvcnQpXG4tXHRcdFx0XHRcdGdvdG8gbmV4dF9saXN0ZW47XG4tXG4tXHRcdFx0XHRpZiAoIWluZXRfZGlhZ19iY19zayhjYl9kYXRhLCBzaykpXG4tXHRcdFx0XHRcdGdvdG8gbmV4dF9saXN0ZW47XG4rXHRcdFx0XHRcdGdvdG8gcHJvY2Vzc2VkX2xpc3Rlbl9zaztcbiBcbi1cdFx0XHRcdGlmIChpbmV0X3NrX2RpYWdfZmlsbChzaywgaW5ldF9jc2soc2spLCBza2IsXG4tXHRcdFx0XHRcdFx0ICAgICAgY2IsIHIsIE5MTV9GX01VTFRJLFxuLVx0XHRcdFx0XHRcdCAgICAgIG5ldF9hZG1pbikgXHUwMDNjIDApIHtcbi1cdFx0XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2aWxiLVx1MDAzZWxvY2spO1xuLVx0XHRcdFx0XHRnb3RvIGRvbmU7XG4rXHRcdFx0XHRpZiAocmVzIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgaW5ldF9kaWFnX2JjX3NrKGNiX2RhdGEsIHNrKSkge1xuK1x0XHRcdFx0XHRyZXMgPSBpbmV0X3NrX2RpYWdfZmlsbChzaywgaW5ldF9jc2soc2spLFxuK1x0XHRcdFx0XHRcdFx0XHRza2IsIGNiLCByLCBOTE1fRl9NVUxUSSxcbitcdFx0XHRcdFx0XHRcdFx0bmV0X2FkbWluKTtcbitcdFx0XHRcdFx0aWYgKHJlcyBcdTAwM2MgMClcbitcdFx0XHRcdFx0XHRudW0gPSBudW1fYXJyW2lkeF07XG4gXHRcdFx0XHR9XG4rcHJvY2Vzc2VkX2xpc3Rlbl9zazpcbitcdFx0XHRcdGlmIChyZXMgXHUwMDNlPSAwKVxuK1x0XHRcdFx0XHR0Y3BfZGlhZ19zYXZlX2N1cnNvcihjYl9kYXRhLFxuK1x0XHRcdFx0XHRcdFx0ICAgICBJTkVUX0RJQUdfRFVNUF9DVVJTT1JfVENQX0xJU1RFTixcbitcdFx0XHRcdFx0XHRcdCAgICAgaSwgc2spO1xuK1x0XHRcdFx0c29ja19wdXQoc2spO1xuK1x0XHRcdH1cbitcdFx0XHRpZiAocmVzIFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBkb25lO1xuIFxuLW5leHRfbGlzdGVuOlxuLVx0XHRcdFx0KytudW07XG4rXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4rXG4rXHRcdFx0aWYgKGFjY3VtID09IFNLQVJSX1NaKSB7XG4rXHRcdFx0XHRzX251bSA9IDA7XG4rXHRcdFx0XHRnb3RvIHJlc3VtZV9saXN0ZW5fd2FsaztcbiBcdFx0XHR9XG4tXHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2aWxiLVx1MDAzZWxvY2spO1xuIFxuK1x0XHRcdGluZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvcihjYl9kYXRhKTtcbiBcdFx0XHRzX251bSA9IDA7XG4gXHRcdH1cbiBza2lwX2xpc3Rlbl9odDpcbitcdFx0aW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKGNiX2RhdGEpO1xuIFx0XHRjYi1cdTAwM2VhcmdzWzBdID0gMTtcbiBcdFx0c19pID0gbnVtID0gc19udW0gPSAwO1xuIFx0fVxuIFxuLS8qIFByb2Nlc3MgYSBtYXhpbXVtIG9mIFNLQVJSX1NaIHNvY2tldHMgYXQgYSB0aW1lIHdoZW4gd2Fsa2luZyBoYXNoIGJ1Y2tldHNcbi0gKiB3aXRoIGJoIGRpc2FibGVkLlxuLSAqL1xuLSNkZWZpbmUgU0tBUlJfU1ogMTZcbi1cbiBcdC8qIER1bXAgYm91bmQgYnV0IGluYWN0aXZlIChub3QgbGlzdGVuaW5nLCBjb25uZWN0aW5nLCBldGMuKSBzb2NrZXRzICovXG4gXHRpZiAoY2ItXHUwMDNlYXJnc1swXSA9PSAxKSB7XG4gXHRcdGlmICghKGlkaWFnX3N0YXRlcyBcdTAwMjYgVENQRl9CT1VORF9JTkFDVElWRSkpXG5AQCAtMzk5LDggKzQ5MywxMCBAQCBzdGF0aWMgdm9pZCB0Y3BfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbiBcdFx0XHRzdHJ1Y3QgaW5ldF9iaW5kX2hhc2hidWNrZXQgKmliYjtcbiBcdFx0XHRzdHJ1Y3QgaW5ldF9iaW5kMl9idWNrZXQgKnRiMjtcbiBcdFx0XHRzdHJ1Y3Qgc29jayAqc2tfYXJyW1NLQVJSX1NaXTtcbitcdFx0XHRzdHJ1Y3Qgc29jayAqY3Vyc29yO1xuIFx0XHRcdGludCBudW1fYXJyW1NLQVJSX1NaXTtcbiBcdFx0XHRpbnQgaWR4LCBhY2N1bSwgcmVzO1xuK1x0XHRcdGJvb2wgdXNlX2N1cnNvcjtcbiBcbiByZXN1bWVfYmluZF93YWxrOlxuIFx0XHRcdG51bSA9IDA7XG5AQCAtNDEyLDM0ICs1MDgsMzggQEAgc3RhdGljIHZvaWQgdGNwX2RpYWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHR9XG4gXHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmliYi1cdTAwM2Vsb2NrKTtcbi1cdFx0XHRpbmV0X2JpbmRfYnVja2V0X2Zvcl9lYWNoKHRiMiwgXHUwMDI2aWJiLVx1MDAzZWNoYWluKSB7XG4tXHRcdFx0XHRpZiAoIW5ldF9lcShpYjJfbmV0KHRiMiksIG5ldCkpXG4tXHRcdFx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRcdFx0c2tfZm9yX2VhY2hfYm91bmQoc2ssIFx1MDAyNnRiMi1cdTAwM2Vvd25lcnMpIHtcbi1cdFx0XHRcdFx0c3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spO1xuLVxuLVx0XHRcdFx0XHRpZiAobnVtIFx1MDAzYyBzX251bSlcbi1cdFx0XHRcdFx0XHRnb3RvIG5leHRfYmluZDtcbi1cbi1cdFx0XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9DTE9TRSB8fFxuLVx0XHRcdFx0XHQgICAgIWluZXQtXHUwMDNlaW5ldF9udW0pXG4tXHRcdFx0XHRcdFx0Z290byBuZXh0X2JpbmQ7XG4tXG4tXHRcdFx0XHRcdGlmIChyLVx1MDAzZXNkaWFnX2ZhbWlseSAhPSBBRl9VTlNQRUMgXHUwMDI2XHUwMDI2XG4tXHRcdFx0XHRcdCAgICByLVx1MDAzZXNkaWFnX2ZhbWlseSAhPSBzay1cdTAwM2Vza19mYW1pbHkpXG4tXHRcdFx0XHRcdFx0Z290byBuZXh0X2JpbmQ7XG4tXG4tXHRcdFx0XHRcdGlmICghaW5ldF9kaWFnX2JjX3NrKGNiX2RhdGEsIHNrKSlcbi1cdFx0XHRcdFx0XHRnb3RvIG5leHRfYmluZDtcbi1cbi1cdFx0XHRcdFx0c29ja19ob2xkKHNrKTtcbi1cdFx0XHRcdFx0bnVtX2FyclthY2N1bV0gPSBudW07XG4tXHRcdFx0XHRcdHNrX2FyclthY2N1bV0gPSBzaztcbi1cdFx0XHRcdFx0aWYgKCsrYWNjdW0gPT0gU0tBUlJfU1opXG4rXHRcdFx0Y3Vyc29yID0gY2JfZGF0YS1cdTAwM2VkdW1wX2N1cnNvcjtcbitcdFx0XHR1c2VfY3Vyc29yID0gY3Vyc29yIFx1MDAyNlx1MDAyNlxuK1x0XHRcdFx0ICAgICBjYl9kYXRhLVx1MDAzZWR1bXBfY3Vyc29yX3R5cGUgPT1cbitcdFx0XHRcdCAgICAgSU5FVF9ESUFHX0RVTVBfQ1VSU09SX1RDUF9CSU5EIFx1MDAyNlx1MDAyNlxuK1x0XHRcdFx0ICAgICBjYl9kYXRhLVx1MDAzZWR1bXBfY3Vyc29yX3Nsb3QgPT0gaSBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdCAgICAgIWhsaXN0X3VuaGFzaGVkKFx1MDAyNmN1cnNvci1cdTAwM2Vza19iaW5kX25vZGUpIFx1MDAyNlx1MDAyNlxuK1x0XHRcdFx0ICAgICBjdXJzb3ItXHUwMDNlc2tfYmluZF9ub2RlLnBwcmV2ICE9IExJU1RfUE9JU09OMiBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdCAgICAgaW5ldF9jc2soY3Vyc29yKS1cdTAwM2VpY3NrX2JpbmQyX2hhc2g7XG4rXHRcdFx0aWYgKHVzZV9jdXJzb3IpIHtcbitcdFx0XHRcdHRiMiA9IGluZXRfY3NrKGN1cnNvciktXHUwMDNlaWNza19iaW5kMl9oYXNoO1xuK1x0XHRcdFx0c2sgPSBjdXJzb3I7XG4rXHRcdFx0XHRpZiAodGNwX2RpYWdfYmluZF9jb2xsZWN0X293bmVyc19jb250aW51ZShzaywgc2tfYXJyLFxuK1x0XHRcdFx0XHRcdFx0XHRcdCAgbnVtX2FycixcbitcdFx0XHRcdFx0XHRcdFx0XHQgIFx1MDAyNmFjY3VtLFxuK1x0XHRcdFx0XHRcdFx0XHRcdCAgXHUwMDI2bnVtKSlcbitcdFx0XHRcdFx0Z290byBwYXVzZV9iaW5kX3dhbGs7XG4rXHRcdFx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZSh0YjIsIG5vZGUpIHtcbitcdFx0XHRcdFx0aWYgKHRjcF9kaWFnX2JpbmRfY29sbGVjdF9vd25lcnMoXHUwMDI2dGIyLVx1MDAzZW93bmVycyxcbitcdFx0XHRcdFx0XHRcdFx0XHQgc2tfYXJyLFxuK1x0XHRcdFx0XHRcdFx0XHRcdCBudW1fYXJyLFxuK1x0XHRcdFx0XHRcdFx0XHRcdCBcdTAwMjZhY2N1bSxcbitcdFx0XHRcdFx0XHRcdFx0XHQgXHUwMDI2bnVtLCAwKSlcbitcdFx0XHRcdFx0XHRnb3RvIHBhdXNlX2JpbmRfd2FsaztcbitcdFx0XHRcdH1cbitcdFx0XHR9IGVsc2Uge1xuK1x0XHRcdFx0aW5ldF9iaW5kX2J1Y2tldF9mb3JfZWFjaCh0YjIsIFx1MDAyNmliYi1cdTAwM2VjaGFpbikge1xuK1x0XHRcdFx0XHRpZiAodGNwX2RpYWdfYmluZF9jb2xsZWN0X293bmVycyhcdTAwMjZ0YjItXHUwMDNlb3duZXJzLFxuK1x0XHRcdFx0XHRcdFx0XHRcdCBza19hcnIsXG4rXHRcdFx0XHRcdFx0XHRcdFx0IG51bV9hcnIsXG4rXHRcdFx0XHRcdFx0XHRcdFx0IFx1MDAyNmFjY3VtLFxuK1x0XHRcdFx0XHRcdFx0XHRcdCBcdTAwMjZudW0sIHNfbnVtKSlcbiBcdFx0XHRcdFx0XHRnb3RvIHBhdXNlX2JpbmRfd2Fsaztcbi1uZXh0X2JpbmQ6XG4tXHRcdFx0XHRcdG51bSsrO1xuIFx0XHRcdFx0fVxuIFx0XHRcdH1cbiBwYXVzZV9iaW5kX3dhbGs6XG5AQCAtNDQ3LDE1ICs1NDcsMzMgQEAgc3RhdGljIHZvaWQgdGNwX2RpYWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG4gXG4gXHRcdFx0cmVzID0gMDtcbiBcdFx0XHRmb3IgKGlkeCA9IDA7IGlkeCBcdTAwM2MgYWNjdW07IGlkeCsrKSB7XG4tXHRcdFx0XHRpZiAocmVzIFx1MDAzZT0gMCkge1xuLVx0XHRcdFx0XHRyZXMgPSBpbmV0X3NrX2RpYWdfZmlsbChza19hcnJbaWR4XSxcbi1cdFx0XHRcdFx0XHRcdFx0TlVMTCwgc2tiLCBjYixcbitcdFx0XHRcdHN0cnVjdCBpbmV0X3NvY2sgKmluZXQ7XG4rXG4rXHRcdFx0XHRzayA9IHNrX2FycltpZHhdO1xuK1x0XHRcdFx0aWYgKCFuZXRfZXEoc29ja19uZXQoc2spLCBuZXQpKVxuK1x0XHRcdFx0XHRnb3RvIHB1dF9iaW5kX3NrO1xuK1xuK1x0XHRcdFx0aW5ldCA9IGluZXRfc2soc2spO1xuK1x0XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9DTE9TRSB8fCAhaW5ldC1cdTAwM2VpbmV0X251bSlcbitcdFx0XHRcdFx0Z290byBwdXRfYmluZF9zaztcbitcbitcdFx0XHRcdGlmIChyLVx1MDAzZXNkaWFnX2ZhbWlseSAhPSBBRl9VTlNQRUMgXHUwMDI2XHUwMDI2XG4rXHRcdFx0XHQgICAgci1cdTAwM2VzZGlhZ19mYW1pbHkgIT0gc2stXHUwMDNlc2tfZmFtaWx5KVxuK1x0XHRcdFx0XHRnb3RvIHB1dF9iaW5kX3NrO1xuK1xuK1x0XHRcdFx0aWYgKHJlcyBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IGluZXRfZGlhZ19iY19zayhjYl9kYXRhLCBzaykpIHtcbitcdFx0XHRcdFx0cmVzID0gaW5ldF9za19kaWFnX2ZpbGwoc2ssIE5VTEwsIHNrYiwgY2IsXG4gXHRcdFx0XHRcdFx0XHRcdHIsIE5MTV9GX01VTFRJLFxuIFx0XHRcdFx0XHRcdFx0XHRuZXRfYWRtaW4pO1xuIFx0XHRcdFx0XHRpZiAocmVzIFx1MDAzYyAwKVxuIFx0XHRcdFx0XHRcdG51bSA9IG51bV9hcnJbaWR4XTtcbiBcdFx0XHRcdH1cbi1cdFx0XHRcdHNvY2tfcHV0KHNrX2FycltpZHhdKTtcbitcdFx0XHRcdGlmIChyZXMgXHUwMDNlPSAwKVxuK1x0XHRcdFx0XHR0Y3BfZGlhZ19zYXZlX2N1cnNvcihjYl9kYXRhLFxuK1x0XHRcdFx0XHRcdFx0ICAgICBJTkVUX0RJQUdfRFVNUF9DVVJTT1JfVENQX0JJTkQsXG4rXHRcdFx0XHRcdFx0XHQgICAgIGksIHNrKTtcbitwdXRfYmluZF9zazpcbitcdFx0XHRcdHNvY2tfcHV0KHNrKTtcbiBcdFx0XHR9XG4gXHRcdFx0aWYgKHJlcyBcdTAwM2MgMClcbiBcdFx0XHRcdGdvdG8gZG9uZTtcbkBAIC00NjMsMTMgKzU4MSwxNSBAQCBzdGF0aWMgdm9pZCB0Y3BfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbiBcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcbiBcdFx0XHRpZiAoYWNjdW0gPT0gU0tBUlJfU1opIHtcbi1cdFx0XHRcdHNfbnVtID0gbnVtICsgMTtcbitcdFx0XHRcdHNfbnVtID0gMDtcbiBcdFx0XHRcdGdvdG8gcmVzdW1lX2JpbmRfd2FsaztcbiBcdFx0XHR9XG4gXG4rXHRcdFx0aW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKGNiX2RhdGEpO1xuIFx0XHRcdHNfbnVtID0gMDtcbiBcdFx0fVxuIHNraXBfYmluZF9odDpcbitcdFx0aW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yKGNiX2RhdGEpO1xuIFx0XHRjYi1cdTAwM2VhcmdzWzBdID0gMjtcbiBcdFx0c19pID0gbnVtID0gc19udW0gPSAwO1xuIFx0fVxuQEAgLTQ4Miw0MiArNjAyLDMzIEBAIHN0YXRpYyB2b2lkIHRjcF9kaWFnX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxuIFx0XHRzcGlubG9ja190ICpsb2NrID0gaW5ldF9laGFzaF9sb2NrcChoYXNoaW5mbywgaSk7XG4gXHRcdHN0cnVjdCBobGlzdF9udWxsc19ub2RlICpub2RlO1xuIFx0XHRzdHJ1Y3Qgc29jayAqc2tfYXJyW1NLQVJSX1NaXTtcbitcdFx0c3RydWN0IHNvY2sgKmN1cnNvcjtcbiBcdFx0aW50IG51bV9hcnJbU0tBUlJfU1pdO1xuIFx0XHRpbnQgaWR4LCBhY2N1bSwgcmVzO1xuK1x0XHRib29sIHVzZV9jdXJzb3I7XG4gXG4gXHRcdGlmIChobGlzdF9udWxsc19lbXB0eShcdTAwMjZoZWFkLVx1MDAzZWNoYWluKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0aWYgKGkgXHUwMDNlIHNfaSlcbitcdFx0aWYgKGkgXHUwMDNlIHNfaSkge1xuK1x0XHRcdGluZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvcihjYl9kYXRhKTtcbiBcdFx0XHRzX251bSA9IDA7XG4rXHRcdH1cbiBcbiBuZXh0X2NodW5rOlxuIFx0XHRudW0gPSAwO1xuIFx0XHRhY2N1bSA9IDA7XG4gXHRcdHNwaW5fbG9ja19iaChsb2NrKTtcbi1cdFx0c2tfbnVsbHNfZm9yX2VhY2goc2ssIG5vZGUsIFx1MDAyNmhlYWQtXHUwMDNlY2hhaW4pIHtcbi1cdFx0XHRpbnQgc3RhdGU7XG4tXG4tXHRcdFx0aWYgKCFuZXRfZXEoc29ja19uZXQoc2spLCBuZXQpKVxuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0aWYgKG51bSBcdTAwM2Mgc19udW0pXG4tXHRcdFx0XHRnb3RvIG5leHRfbm9ybWFsO1xuLVx0XHRcdHN0YXRlID0gKHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9USU1FX1dBSVQpID9cbi1cdFx0XHRcdFJFQURfT05DRShpbmV0X3R3c2soc2spLVx1MDAzZXR3X3N1YnN0YXRlKSA6IHNrLVx1MDAzZXNrX3N0YXRlO1xuLVx0XHRcdGlmICghKGlkaWFnX3N0YXRlcyBcdTAwMjYgKDEgXHUwMDNjXHUwMDNjIHN0YXRlKSkpXG4tXHRcdFx0XHRnb3RvIG5leHRfbm9ybWFsO1xuLVx0XHRcdGlmIChyLVx1MDAzZXNkaWFnX2ZhbWlseSAhPSBBRl9VTlNQRUMgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIHNrLVx1MDAzZXNrX2ZhbWlseSAhPSByLVx1MDAzZXNkaWFnX2ZhbWlseSlcbi1cdFx0XHRcdGdvdG8gbmV4dF9ub3JtYWw7XG4tXHRcdFx0aWYgKHItXHUwMDNlaWQuaWRpYWdfc3BvcnQgIT0gaHRvbnMoUkVBRF9PTkNFKHNrLVx1MDAzZXNrX251bSkpIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICByLVx1MDAzZWlkLmlkaWFnX3Nwb3J0KVxuLVx0XHRcdFx0Z290byBuZXh0X25vcm1hbDtcbi1cdFx0XHRpZiAoci1cdTAwM2VpZC5pZGlhZ19kcG9ydCAhPSBzay1cdTAwM2Vza19kcG9ydCBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgci1cdTAwM2VpZC5pZGlhZ19kcG9ydClcbi1cdFx0XHRcdGdvdG8gbmV4dF9ub3JtYWw7XG4tXHRcdFx0dHdza19idWlsZF9hc3NlcnQoKTtcbi1cbi1cdFx0XHRpZiAoIWluZXRfZGlhZ19iY19zayhjYl9kYXRhLCBzaykpXG4rXHRcdGN1cnNvciA9IGNiX2RhdGEtXHUwMDNlZHVtcF9jdXJzb3I7XG4rXHRcdHVzZV9jdXJzb3IgPSBjdXJzb3IgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgICBjYl9kYXRhLVx1MDAzZWR1bXBfY3Vyc29yX3R5cGUgPT1cbitcdFx0XHQgICAgIElORVRfRElBR19EVU1QX0NVUlNPUl9UQ1BfRUhBU0ggXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgICBjYl9kYXRhLVx1MDAzZWR1bXBfY3Vyc29yX3Nsb3QgPT0gaSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgICFobGlzdF9udWxsc191bmhhc2hlZChcdTAwMjZjdXJzb3ItXHUwMDNlc2tfbnVsbHNfbm9kZSkgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgICBjdXJzb3ItXHUwMDNlc2tfbnVsbHNfbm9kZS5wcHJldiAhPSBMSVNUX1BPSVNPTjI7XG4rXHRcdG5vZGUgPSB1c2VfY3Vyc29yID8gY3Vyc29yLVx1MDAzZXNrX251bGxzX25vZGUubmV4dCA6IGhlYWQtXHUwMDNlY2hhaW4uZmlyc3Q7XG4rXHRcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X2Zyb20oc2ssIG5vZGUsIHNrX251bGxzX25vZGUpIHtcbitcdFx0XHRpZiAoIXVzZV9jdXJzb3IgXHUwMDI2XHUwMDI2IG51bSBcdTAwM2Mgc19udW0pXG4gXHRcdFx0XHRnb3RvIG5leHRfbm9ybWFsO1xuIFxuIFx0XHRcdGlmICghcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNnNrLVx1MDAzZXNrX3JlZmNudCkpXG5AQCAtNTM0LDEzICs2NDUsNDIgQEAgc3RhdGljIHZvaWQgdGNwX2RpYWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG4gXG4gXHRcdHJlcyA9IDA7XG4gXHRcdGZvciAoaWR4ID0gMDsgaWR4IFx1MDAzYyBhY2N1bTsgaWR4KyspIHtcbi1cdFx0XHRpZiAocmVzIFx1MDAzZT0gMCkge1xuLVx0XHRcdFx0cmVzID0gc2tfZGlhZ19maWxsKHNrX2FycltpZHhdLCBza2IsIGNiLCByLFxuLVx0XHRcdFx0XHRcdCAgIE5MTV9GX01VTFRJLCBuZXRfYWRtaW4pO1xuK1x0XHRcdGludCBzdGF0ZTtcbitcbitcdFx0XHRzayA9IHNrX2FycltpZHhdO1xuK1x0XHRcdGlmICghbmV0X2VxKHNvY2tfbmV0KHNrKSwgbmV0KSlcbitcdFx0XHRcdGdvdG8gcHV0X2VzdGFiX3NrO1xuK1xuK1x0XHRcdHN0YXRlID0gKHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9USU1FX1dBSVQpID9cbitcdFx0XHRcdFJFQURfT05DRShpbmV0X3R3c2soc2spLVx1MDAzZXR3X3N1YnN0YXRlKSA6IHNrLVx1MDAzZXNrX3N0YXRlO1xuK1x0XHRcdGlmICghKGlkaWFnX3N0YXRlcyBcdTAwMjYgKDEgXHUwMDNjXHUwMDNjIHN0YXRlKSkpXG4rXHRcdFx0XHRnb3RvIHB1dF9lc3RhYl9zaztcbitcbitcdFx0XHRpZiAoci1cdTAwM2VzZGlhZ19mYW1pbHkgIT0gQUZfVU5TUEVDIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICBzay1cdTAwM2Vza19mYW1pbHkgIT0gci1cdTAwM2VzZGlhZ19mYW1pbHkpXG4rXHRcdFx0XHRnb3RvIHB1dF9lc3RhYl9zaztcbitcbitcdFx0XHRpZiAoci1cdTAwM2VpZC5pZGlhZ19zcG9ydCAhPSBodG9ucyhSRUFEX09OQ0Uoc2stXHUwMDNlc2tfbnVtKSkgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgIHItXHUwMDNlaWQuaWRpYWdfc3BvcnQpXG4rXHRcdFx0XHRnb3RvIHB1dF9lc3RhYl9zaztcbitcbitcdFx0XHRpZiAoci1cdTAwM2VpZC5pZGlhZ19kcG9ydCAhPSBzay1cdTAwM2Vza19kcG9ydCBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgci1cdTAwM2VpZC5pZGlhZ19kcG9ydClcbitcdFx0XHRcdGdvdG8gcHV0X2VzdGFiX3NrO1xuK1xuK1x0XHRcdHR3c2tfYnVpbGRfYXNzZXJ0KCk7XG4rXHRcdFx0aWYgKHJlcyBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IGluZXRfZGlhZ19iY19zayhjYl9kYXRhLCBzaykpIHtcbitcdFx0XHRcdHJlcyA9IHNrX2RpYWdfZmlsbChzaywgc2tiLCBjYiwgciwgTkxNX0ZfTVVMVEksXG4rXHRcdFx0XHRcdFx0ICAgbmV0X2FkbWluKTtcbiBcdFx0XHRcdGlmIChyZXMgXHUwMDNjIDApXG4gXHRcdFx0XHRcdG51bSA9IG51bV9hcnJbaWR4XTtcbiBcdFx0XHR9XG4tXHRcdFx0c29ja19nZW5fcHV0KHNrX2FycltpZHhdKTtcbitcdFx0XHRpZiAocmVzIFx1MDAzZT0gMClcbitcdFx0XHRcdHRjcF9kaWFnX3NhdmVfY3Vyc29yKGNiX2RhdGEsXG4rXHRcdFx0XHRcdFx0ICAgICBJTkVUX0RJQUdfRFVNUF9DVVJTT1JfVENQX0VIQVNILFxuK1x0XHRcdFx0XHRcdCAgICAgaSwgc2spO1xuK3B1dF9lc3RhYl9zazpcbitcdFx0XHRzb2NrX2dlbl9wdXQoc2spO1xuIFx0XHR9XG4gXHRcdGlmIChyZXMgXHUwMDNjIDApXG4gXHRcdFx0YnJlYWs7XG5AQCAtNTQ4LDkgKzY4OCwxMSBAQCBzdGF0aWMgdm9pZCB0Y3BfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbiBcdFx0Y29uZF9yZXNjaGVkKCk7XG4gXG4gXHRcdGlmIChhY2N1bSA9PSBTS0FSUl9TWikge1xuLVx0XHRcdHNfbnVtID0gbnVtICsgMTtcbitcdFx0XHRzX251bSA9IDA7XG4gXHRcdFx0Z290byBuZXh0X2NodW5rO1xuIFx0XHR9XG4rXG4rXHRcdGluZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvcihjYl9kYXRhKTtcbiBcdH1cbiBcbiBkb25lOlxuZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9tcHRjcF9kaWFnLmMgYi9uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jXG5pbmRleCAxMzZjMmQwNWMwZWViLi45ODFlNjQzNDMwMzkwIDEwMDY0NFxuLS0tIGEvbmV0L21wdGNwL21wdGNwX2RpYWcuY1xuKysrIGIvbmV0L21wdGNwL21wdGNwX2RpYWcuY1xuQEAgLTYsMTIgKzYsMjUgQEBcbiAgKiBBdXRob3I6IFBhb2xvIEFiZW5pIFx1MDAzY3BhYmVuaUByZWRoYXQuY29tXHUwMDNlXG4gICovXG4gXG4rLyogUHJvY2VzcyBhIGJvdW5kZWQgbnVtYmVyIG9mIGxpc3RlbmVycyBwZXIgYnVja2V0IGxvY2sgaG9sZC4gKi9cbisjZGVmaW5lIE1QVENQX0RJQUdfQlVMS19TWiAxNlxuK1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbmV0X2RpYWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcInByb3RvY29sLmhcIlxuIFxuK3N0YXRpYyB2b2lkIG1wdGNwX2RpYWdfc2F2ZV9jdXJzb3Ioc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEsXG4rXHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgc2xvdCwgc3RydWN0IHNvY2sgKnNrKVxuK3tcbitcdHNvY2tfaG9sZChzayk7XG4rXHRpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3IoY2JfZGF0YSk7XG4rXHRjYl9kYXRhLVx1MDAzZWR1bXBfY3Vyc29yID0gc2s7XG4rXHRjYl9kYXRhLVx1MDAzZWR1bXBfY3Vyc29yX3Nsb3QgPSBzbG90O1xuK1x0Y2JfZGF0YS1cdTAwM2VkdW1wX2N1cnNvcl90eXBlID0gSU5FVF9ESUFHX0RVTVBfQ1VSU09SX01QVENQX0xJU1RFTjtcbit9XG4rXG4gc3RhdGljIGludCBza19kaWFnX2R1bXAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbiBcdFx0XHRjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX3JlcV92MiAqcmVxLFxuQEAgLTc3LDYgKzkwLDcgQEAgc3RhdGljIHZvaWQgbXB0Y3BfZGlhZ19kdW1wX2xpc3RlbmVycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFcbiBcdFx0XHRcdCAgICAgIGJvb2wgbmV0X2FkbWluKVxuIHtcbiBcdHN0cnVjdCBtcHRjcF9kaWFnX2N0eCAqZGlhZ19jdHggPSAodm9pZCAqKWNiLVx1MDAzZWN0eDtcbitcdHN0cnVjdCBpbmV0X2RpYWdfZHVtcF9kYXRhICpjYl9kYXRhID0gY2ItXHUwMDNlZGF0YTtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2Vzayk7XG4gXHRzdHJ1Y3QgaW5ldF9oYXNoaW5mbyAqaGluZm87XG4gXHRpbnQgaTtcbkBAIC04Niw2MiArMTAwLDk4IEBAIHN0YXRpYyB2b2lkIG1wdGNwX2RpYWdfZHVtcF9saXN0ZW5lcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhXG4gXHRmb3IgKGkgPSBkaWFnX2N0eC1cdTAwM2VsX3Nsb3Q7IGkgXHUwMDNjPSBoaW5mby1cdTAwM2VsaGFzaDJfbWFzazsgaSsrKSB7XG4gXHRcdHN0cnVjdCBpbmV0X2xpc3Rlbl9oYXNoYnVja2V0ICppbGI7XG4gXHRcdHN0cnVjdCBobGlzdF9udWxsc19ub2RlICpub2RlO1xuLVx0XHRzdHJ1Y3Qgc29jayAqc2s7XG4tXHRcdGludCBudW0gPSAwO1xuLVxuK1x0XHRzdHJ1Y3Qgc29jayAqdG1wLCAqc2ssICpza19hcnJbTVBUQ1BfRElBR19CVUxLX1NaXTtcbitcdFx0c3RydWN0IHNvY2sgKmN1cnNvcjtcbitcdFx0aW50IGFjY3VtLCBpZHgsIG51bSwgcmV0O1xuK1x0XHRpbnQgbnVtX2FycltNUFRDUF9ESUFHX0JVTEtfU1pdO1xuK1x0XHRib29sIHVzZV9jdXJzb3I7XG4rXG4rcmVzdW1lX2xpc3Rlbl93YWxrOlxuK1x0XHRudW0gPSAwO1xuK1x0XHRhY2N1bSA9IDA7XG4gXHRcdGlsYiA9IFx1MDAyNmhpbmZvLVx1MDAzZWxoYXNoMltpXTtcbitcdFx0cmV0ID0gMDtcbiBcbiBcdFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0XHRzcGluX2xvY2soXHUwMDI2aWxiLVx1MDAzZWxvY2spO1xuLVx0XHRza19udWxsc19mb3JfZWFjaChzaywgbm9kZSwgXHUwMDI2aWxiLVx1MDAzZW51bGxzX2hlYWQpIHtcbi1cdFx0XHRjb25zdCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpjdHggPSBtcHRjcF9zdWJmbG93X2N0eChzayk7XG4tXHRcdFx0c3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spO1xuLVx0XHRcdGludCByZXQ7XG4tXG4tXHRcdFx0aWYgKG51bSBcdTAwM2MgZGlhZ19jdHgtXHUwMDNlbF9udW0pXG4tXHRcdFx0XHRnb3RvIG5leHRfbGlzdGVuO1xuLVxuLVx0XHRcdGlmICghY3R4IHx8IHN0cmNtcChpbmV0X2NzayhzayktXHUwMDNlaWNza191bHBfb3BzLVx1MDAzZW5hbWUsIFwibXB0Y3BcIikpXG4tXHRcdFx0XHRnb3RvIG5leHRfbGlzdGVuO1xuLVxuLVx0XHRcdHNrID0gY3R4LVx1MDAzZWNvbm47XG4tXHRcdFx0aWYgKCFzayB8fCAhbmV0X2VxKHNvY2tfbmV0KHNrKSwgbmV0KSlcbi1cdFx0XHRcdGdvdG8gbmV4dF9saXN0ZW47XG4tXG4tXHRcdFx0aWYgKHItXHUwMDNlc2RpYWdfZmFtaWx5ICE9IEFGX1VOU1BFQyBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgc2stXHUwMDNlc2tfZmFtaWx5ICE9IHItXHUwMDNlc2RpYWdfZmFtaWx5KVxuLVx0XHRcdFx0Z290byBuZXh0X2xpc3Rlbjtcbi1cbi1cdFx0XHRpZiAoci1cdTAwM2VpZC5pZGlhZ19zcG9ydCAhPSBpbmV0LVx1MDAzZWluZXRfc3BvcnQgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIHItXHUwMDNlaWQuaWRpYWdfc3BvcnQpXG4rXHRcdGN1cnNvciA9IGNiX2RhdGEtXHUwMDNlZHVtcF9jdXJzb3I7XG4rXHRcdHVzZV9jdXJzb3IgPSBjdXJzb3IgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgICBjYl9kYXRhLVx1MDAzZWR1bXBfY3Vyc29yX3R5cGUgPT1cbitcdFx0XHQgICAgIElORVRfRElBR19EVU1QX0NVUlNPUl9NUFRDUF9MSVNURU4gXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgICBjYl9kYXRhLVx1MDAzZWR1bXBfY3Vyc29yX3Nsb3QgPT0gaSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgICFobGlzdF9udWxsc191bmhhc2hlZChcdTAwMjZjdXJzb3ItXHUwMDNlc2tfbnVsbHNfbm9kZSkgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgICBjdXJzb3ItXHUwMDNlc2tfbnVsbHNfbm9kZS5wcHJldiAhPSBMSVNUX1BPSVNPTjI7XG4rXHRcdG5vZGUgPSB1c2VfY3Vyc29yID8gY3Vyc29yLVx1MDAzZXNrX251bGxzX25vZGUubmV4dCA6XG4rXHRcdFx0XHQgICAgaWxiLVx1MDAzZW51bGxzX2hlYWQuZmlyc3Q7XG4rXHRcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X2Zyb20oc2ssIG5vZGUsIHNrX251bGxzX25vZGUpIHtcbitcdFx0XHRpZiAoIXVzZV9jdXJzb3IgXHUwMDI2XHUwMDI2IG51bSBcdTAwM2MgZGlhZ19jdHgtXHUwMDNlbF9udW0pXG4gXHRcdFx0XHRnb3RvIG5leHRfbGlzdGVuO1xuIFxuIFx0XHRcdGlmICghcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNnNrLVx1MDAzZXNrX3JlZmNudCkpXG4gXHRcdFx0XHRnb3RvIG5leHRfbGlzdGVuO1xuIFxuLVx0XHRcdHJldCA9IHNrX2RpYWdfZHVtcChzaywgc2tiLCBjYiwgciwgbmV0X2FkbWluKTtcbi1cbi1cdFx0XHRzb2NrX3B1dChzayk7XG4tXG4tXHRcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLVx0XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2aWxiLVx1MDAzZWxvY2spO1xuLVx0XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHRcdFx0XHRkaWFnX2N0eC1cdTAwM2VsX3Nsb3QgPSBpO1xuLVx0XHRcdFx0ZGlhZ19jdHgtXHUwMDNlbF9udW0gPSBudW07XG4tXHRcdFx0XHRyZXR1cm47XG4tXHRcdFx0fVxuLVx0XHRcdGRpYWdfY3R4LVx1MDAzZWxfbnVtID0gbnVtICsgMTtcbi1cdFx0XHRudW0gPSAwO1xuK1x0XHRcdG51bV9hcnJbYWNjdW1dID0gbnVtO1xuK1x0XHRcdHNrX2FyclthY2N1bV0gPSBzaztcbitcdFx0XHRpZiAoKythY2N1bSA9PSBNUFRDUF9ESUFHX0JVTEtfU1opXG4rXHRcdFx0XHRicmVhaztcbiBuZXh0X2xpc3RlbjpcbiBcdFx0XHQrK251bTtcbiBcdFx0fVxuIFx0XHRzcGluX3VubG9jayhcdTAwMjZpbGItXHUwMDNlbG9jayk7XG4gXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuK1x0XHRmb3IgKGlkeCA9IDA7IGlkeCBcdTAwM2MgYWNjdW07IGlkeCsrKSB7XG4rXHRcdFx0Y29uc3Qgc3RydWN0IHRjcF91bHBfb3BzICp1bHBfb3BzO1xuK1x0XHRcdGNvbnN0IHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKmN0eDtcbitcdFx0XHRzdHJ1Y3QgaW5ldF9zb2NrICppbmV0O1xuK1xuK1x0XHRcdHNrID0gc2tfYXJyW2lkeF07XG4rXHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuK1x0XHRcdGN0eCA9IG1wdGNwX3N1YmZsb3dfY3R4KHNrKTtcbitcdFx0XHR1bHBfb3BzID0gUkVBRF9PTkNFKGluZXRfY3NrKHNrKS1cdTAwM2VpY3NrX3VscF9vcHMpO1xuK1x0XHRcdGluZXQgPSBpbmV0X3NrKHNrKTtcbitcdFx0XHR0bXAgPSBjdHggPyBjdHgtXHUwMDNlY29ubiA6IE5VTEw7XG4rXHRcdFx0aWYgKCFjdHggfHwgIXVscF9vcHMgfHwgc3RyY21wKHVscF9vcHMtXHUwMDNlbmFtZSwgXCJtcHRjcFwiKSB8fFxuK1x0XHRcdCAgICAhdG1wIHx8ICFuZXRfZXEoc29ja19uZXQodG1wKSwgbmV0KSB8fFxuK1x0XHRcdCAgICAoci1cdTAwM2VzZGlhZ19mYW1pbHkgIT0gQUZfVU5TUEVDIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICAgdG1wLVx1MDAzZXNrX2ZhbWlseSAhPSByLVx1MDAzZXNkaWFnX2ZhbWlseSkgfHxcbitcdFx0XHQgICAgKHItXHUwMDNlaWQuaWRpYWdfc3BvcnQgIT0gaW5ldC1cdTAwM2VpbmV0X3Nwb3J0IFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICAgci1cdTAwM2VpZC5pZGlhZ19zcG9ydCkgfHxcbitcdFx0XHQgICAgIXJlZmNvdW50X2luY19ub3RfemVybyhcdTAwMjZ0bXAtXHUwMDNlc2tfcmVmY250KSkge1xuK1x0XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRcdFx0XHRnb3RvIHByb2Nlc3NlZF9saXN0ZW5lcl9zaztcbitcdFx0XHR9XG4rXHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2U9IDApIHtcbitcdFx0XHRcdHJldCA9IHNrX2RpYWdfZHVtcCh0bXAsIHNrYiwgY2IsIHIsIG5ldF9hZG1pbik7XG4rXHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0XHRudW0gPSBudW1fYXJyW2lkeF07XG4rXHRcdFx0fVxuK1x0XHRcdHNvY2tfcHV0KHRtcCk7XG4rcHJvY2Vzc2VkX2xpc3RlbmVyX3NrOlxuK1x0XHRcdGlmIChyZXQgXHUwMDNlPSAwKVxuK1x0XHRcdFx0bXB0Y3BfZGlhZ19zYXZlX2N1cnNvcihjYl9kYXRhLCBpLCBzayk7XG4rXHRcdFx0c29ja19wdXQoc2spO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbitcdFx0XHRkaWFnX2N0eC1cdTAwM2VsX3Nsb3QgPSBpO1xuK1x0XHRcdGRpYWdfY3R4LVx1MDAzZWxfbnVtID0gbnVtO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuK1xuIFx0XHRjb25kX3Jlc2NoZWQoKTtcbitcbitcdFx0aWYgKGFjY3VtID09IE1QVENQX0RJQUdfQlVMS19TWikge1xuK1x0XHRcdGRpYWdfY3R4LVx1MDAzZWxfbnVtID0gMDtcbitcdFx0XHRnb3RvIHJlc3VtZV9saXN0ZW5fd2FsaztcbitcdFx0fVxuK1xuK1x0XHRpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3IoY2JfZGF0YSk7XG4gXHRcdGRpYWdfY3R4LVx1MDAzZWxfbnVtID0gMDtcbiBcdH1cbiBcbitcdGluZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvcihjYl9kYXRhKTtcbiBcdGRpYWdfY3R4LVx1MDAzZWxfbnVtID0gMDtcbiBcdGRpYWdfY3R4LVx1MDAzZWxfc2xvdCA9IGk7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTc6NTI6NTEuMzU0MDk4NjkxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzEwMTg0MTYyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXR3b3JraW5nIFN0YWNrIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXTigJlzIHRvdWNoaW5nIHNvbWUgY3J1Y2lhbCBhcmVhcyBvZiB0aGUgbmV0d29ya2luZyBzdGFjazogYGluZXRfZGlhZy5oYCwgYGluZXRfZGlhZy5jYCwgYHRjcF9kaWFnLmNgLCBhbmQgYG1wdGNwX2RpYWcuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgdGhpcyBuZXcgY3Vyc29yIG1lY2hhbmlzbSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgdGNwX2RpYWdgIGFuZCBgbXB0Y3BfZGlhZ2AsIGZvciBkdW1waW5nIHNvY2tldCBpbmZvcm1hdGlvbi4gVGhpcyBpcyBzbWFydDsgdGhleSdyZSBhZGRpbmcgYGR1bXBfY3Vyc29yYCwgYGR1bXBfY3Vyc29yX3Nsb3RgLCBhbmQgYGR1bXBfY3Vyc29yX3R5cGVgIHRvIHRoZSBgc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGFgLiAgVGhhdCdzIHRoZSBrZXkgdG8gbWFraW5nIHRoZSBkdW1waW5nIHByb2Nlc3Mgcm9idXN0LlxuXG5UaGUgcmVhc29uIGZvciB0aGlzIGNoYW5nZSBpcyBjbGVhcjogIHRoZSBjdXJyZW50IG1ldGhvZCB3YXMgcHJvbmUgdG8gZXJyb3JzLiBJdCB3YXMgc2tpcHBpbmcgc29ja2V0cyBiYXNlZCBvbiBhIGNvdW50IChgc19udW1gKSB3aGljaCBpcyBwcm9ibGVtYXRpYyB3aGVuIHRoZSBoYXNoIHRhYmxlIHN0cnVjdHVyZSBpcyBkeW5hbWljLiAgVGhpcyBuZXcgY3Vyc29yIGxldHMgYHRjcF9kaWFnX2R1bXBgIHBpY2sgdXAgKmV4YWN0bHkqIHdoZXJlIGl0IGxlZnQgb2ZmLCBhdm9pZGluZyBib3RoIGR1cGxpY2F0ZWQgYW5kIG1pc3NlZCBzb2NrZXRzLiAgRXhjZWxsZW50LCB0aGF0J3MgYWRkcmVzc2luZyBhIHJlYWwgaXNzdWUuICBBbmQgdGhlIHNhbWUgZml4IGlzIGJlaW5nIGFwcGxpZWQgdG8gYG1wdGNwX2RpYWdfZHVtcF9saXN0ZW5lcnNgLCB3aGljaCBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gdGFrZSB0aGlzLlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgY29yZSBuZXR3b3JrIGNvbXBvbmVudC4gIFJlYWNoYWJpbGl0eSBhbmQgdGVzdGFiaWxpdHkgYXJlIGhpZ2g7IGl0J3MgZGVmaW5pdGVseSBzb21ldGhpbmcgd2UgbmVlZCB0byBmdXp6IHRob3JvdWdobHkuIExldCdzIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGZvY3VzIHNob3VsZCBiZTpcblxuKiAgIEluIGBuZXQvaXB2NC90Y3BfZGlhZy5jYCwgd2UndmUgZ290IGB0Y3BfZGlhZ19kdW1wYCB3aGljaCBpcyB0aGUgZnVuY3Rpb24gdGhhdCByZXF1aXJlcyBzY3J1dGlueS5cbiogICBJbiBgbmV0L21wdGNwL21wdGNwX2RpYWcuY2AsIHdlJ3ZlIGdvdCBgbXB0Y3BfZGlhZ19kdW1wX2xpc3RlbmVyc2AsIHdoaWNoIGlzIGEga2V5IG9uZS4gIEFuZCwgYWx0aG91Z2ggYG1wdGNwX2RpYWdfZHVtcGAgaXNuJ3QgZGlyZWN0bHkgbW9kaWZpZWQsIGl0IGNhbGxzIGBtcHRjcF9kaWFnX2R1bXBfbGlzdGVuZXJzYCwgc28gaXQncyBwcm9iYWJseSB3b3J0aCBhIGxvb2sgaW4gZnV6emluZyBhcyB3ZWxsLCB0byBzZWUgaG93IHRoZSBjdXJzb3IgcHJvcGFnYXRlcy5cblxuTm93LCBsZXQncyBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uIHNldHRpbmdzIGVuYWJsZWQ6IGBDT05GSUdfSU5FVF9ESUFHYCwgYENPTkZJR19UQ1BfRElBR2AsIGFuZCBgQ09ORklHX01QVENQYCBhcmUgYWxsIGdvaW5nIHRvIGJlIHJlcXVpcmVkLCBvYnZpb3VzbHkuICBJJ2xsIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgTVBUQ1AgYW5kIElORVRfRElBRyB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gd2UgaGF2ZW7igJl0IG1pc3NlZCBhbnl0aGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBvdXIgZnV6emluZyBidWlsZHMgYXJlIHNldCB1cCBjb3JyZWN0bHkuIFRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIGltcHJvdmVtZW50IGluIHRoZSBuZXR3b3JrIGRpYWdub3N0aWMgdG9vbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTMwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTc6NTI6NTguNDU1OTQyMzRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3MjIwNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1QVENQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9LY29uZmlnLTEtXFxubmV0L21wdGNwL0tjb25maWc6Mjpjb25maWcgTVBUQ1BcXG5uZXQvbXB0Y3AvS2NvbmZpZy0zLVxcdGJvb2wgXFxcIk1QVENQOiBNdWx0aXBhdGggVENQXFxcIlxcbi0tXFxubmV0L21wdGNwL0tjb25maWc9MTY9Y29uZmlnIElORVRfTVBUQ1BfRElBR1xcbi0tXFxubmV0L21wdGNwL0tjb25maWctMTktXFxubmV0L21wdGNwL0tjb25maWc6MjA6Y29uZmlnIE1QVENQX0lQVjZcXG5uZXQvbXB0Y3AvS2NvbmZpZy0yMS1cXHRib29sIFxcXCJNUFRDUDogSVB2NiBzdXBwb3J0IGZvciBNdWx0aXBhdGggVENQXFxcIlxcbi0tXFxubmV0L21wdGNwL0tjb25maWctMjQtXFxubmV0L21wdGNwL0tjb25maWc6MjU6Y29uZmlnIE1QVENQX0tVTklUX1RFU1RcXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNi1cXHR0cmlzdGF0ZSBcXFwiVGhpcyBidWlsZHMgdGhlIE1QVENQIEtVbml0IHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE3OjUyOjU4LjUwMzY3MDc3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0OTQzMDc4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSU5FVF9NUFRDUF9ESUFHIEludmVzdGlnYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBUaGUgZmlyc3QgdGhvdWdodCBpcyBjbGVhcjogSSBuZWVkIHRvIGludmVzdGlnYXRlIGBJTkVUX01QVENQX0RJQUdgLiBUaGlzIGlzIHdoZXJlIEknZCBpbW1lZGlhdGVseSBmb2N1cywgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgY29udGV4dCBvZiB3aGF0ZXZlciBwcm9ibGVtIG9yIHBlcmZvcm1hbmNlIGFub21hbHkgaXMgYXQgaGFuZC4gSXQncyB0aGUgZGlhZ25vc3RpYyBpbnRlcmZhY2UgZm9yIE11bHRpcGF0aCBUQ1AsIHNvIHRoaXMgaXMgd2hlcmUgSSdkIGdvIHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3IG9mIHRoZSBjdXJyZW50IHN0YXR1cy4gSSdtIHRoaW5raW5nIEknbGwgd2FudCB0byBpbnNwZWN0IHRoZSBjb25uZWN0aW9uIHN0YXRlcywgc3ViZmxvdyBzdGF0aXN0aWNzLCB0aGUgb3ZlcmFsbCBNUFRDUCBjb25maWd1cmF0aW9uLCBhbmQgcG90ZW50aWFsbHkgYW55IGVycm9yIGNvZGVzIG9yIGZsYWdzIHRoYXQgbWlnaHQgYmUgcHJlc2VudC4gTXkgbWluZCBpcyBhbHJlYWR5IHJhY2luZyB0aHJvdWdoIHRoZSBsaWtlbHkgb3V0cHV0IGZpZWxkcyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcga2VybmVsIGNvZGUgSSBtaWdodCBuZWVkIHRvIHJlZmVyIHRvIGlmIHNvbWV0aGluZyBsb29rcyBzdXNwaWNpb3VzLiBJJ20gZXhwZWN0aW5nIHNvbWUgc3BlY2lmaWMgZmllbGRzIGFuZCBhIGdlbmVyYWwgaWRlYSBvZiBob3cgdG8gdXNlIGl0LCBidXQgSSBhbHdheXMgYXBwcm9hY2ggdGhlc2UgY2hlY2tzIHdpdGggYW4gZXhwZWN0YXRpb24gdGhhdCBJIG1pZ2h0IG5lZWQgdG8gY3Jvc3MtcmVmZXJlbmNlIHdpdGggb3RoZXIgdG9vbHMgb3Iga2VybmVsIGRlYnVnZ2luZyB0ZWNobmlxdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTI3OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE3OjUzOjAxLjc1MzEwMzQxN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTc2ODAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU5FVF9NUFRDUF9ESUFHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9LY29uZmlnPTE0PWlmIE1QVENQXFxubmV0L21wdGNwL0tjb25maWctMTUtXFxubmV0L21wdGNwL0tjb25maWc6MTY6Y29uZmlnIElORVRfTVBUQ1BfRElBR1xcbm5ldC9tcHRjcC9LY29uZmlnLTE3LVxcdGRlcGVuZHMgb24gSU5FVF9ESUFHXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE3OjUzOjAxLjc5ODg3NTcwN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyOTI2MDM0NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIERpYWdub3N0aWNzIGluIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IG5ldHdvcmsgZGlhZ25vc3RpY3MgYXJlIGNvbmZpZ3VyZWQgaW4gdGhlIGtlcm5lbC4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIHplcm8gaW4gb24gYG5ldC9pcHY0L0tjb25maWdgLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGludGVybmV0IGRpYWdub3N0aWNzLCBhbmQgZXNwZWNpYWxseSBvcHRpb25zIGNvbmNlcm5pbmcgVENQIGRpYWdub3N0aWNzLiBNeSBwcmltYXJ5IHRhcmdldHMgYXJlIGBjb25maWcgSU5FVF9ESUFHYCBhbmQgYGNvbmZpZyBUQ1BfRElBR2AuIEkgbmVlZCB0byBzZWUgaG93IHRoZXNlIGFyZSBkZWZpbmVkLCB3aGF0IGRlcGVuZGVuY2llcyB0aGV5IGhhdmUsIHdoYXQgdGhlaXIgZGVmYXVsdCB2YWx1ZXMgYXJlLCBhbmQgd2hldGhlciB0aGV5IGFyZSB0cmlzdGF0ZSBvciBib29sZWFuLiBUaGlzIHdpbGwgcHJvdmlkZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaG93IEkgY2FuIGNvbmZpZ3VyZSBhbmQgcG90ZW50aWFsbHkgdHJvdWJsZXNob290IHRoZSBrZXJuZWwncyBuZXR3b3JrIGRpYWdub3N0aWNzIGNhcGFiaWxpdGllcy4gVGhpcyBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBuZXR3b3JrIGRpYWdub3N0aWMgbGFuZHNjYXBlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYzMCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE3OjUzOjA1LjA5MTQ4MTMyNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDEyMTUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU5FVF9ESUFHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz00MTk9Y29uZmlnIElORVRfVFVOTkVMXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTQyMi1cXG5uZXQvaXB2NC9LY29uZmlnOjQyMzpjb25maWcgSU5FVF9ESUFHXFxubmV0L2lwdjQvS2NvbmZpZy00MjQtXFx0dHJpc3RhdGUgXFxcIklORVQ6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9NDQ3PWNvbmZpZyBJTkVUX1JBV19ESUFHXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTQ1NC1cXG5uZXQvaXB2NC9LY29uZmlnOjQ1NTpjb25maWcgSU5FVF9ESUFHX0RFU1RST1lcXG5uZXQvaXB2NC9LY29uZmlnLTQ1Ni1cXHRib29sIFxcXCJJTkVUOiBhbGxvdyBwcml2aWxlZ2VkIHByb2Nlc3MgdG8gYWRtaW5pc3RyYXRpdmVseSBjbG9zZSBzb2NrZXRzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNzo1MzowNS4xMzU2MDY5NTRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzM0OTY4NDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gUXVlcnkqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCB0aGlua2luZyBhYm91dCBUQ1AgZGlhZ25vc3RpY3MuIFdhaXQgYSBtaW51dGUuLi4gV2hhdCBhYm91dCBgY29uZmlnIElORVRfVENQX0RJQUdgPyBUaGlzIGlzIGEgY3JpdGljYWwgY29uZmlndXJhdGlvbiBvcHRpb24sIGlzbid0IGl0PyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgaG93IHRoYXQncyBoYW5kbGVkLCB3aGF0IGltcGxpY2F0aW9ucyBpdCBoYXMgZm9yIHRoZSBkaWFnbm9zdGljIHRvb2xzIHdlIGhhdmUgYXQgb3VyIGRpc3Bvc2FsLiBJcyBpdCBlbmFibGVkPyBEaXNhYmxlZD8gV2hhdCBmZWF0dXJlcyBhcmUgdGllZCB0byB0aGF0IGZsYWcsIGFuZCBob3cgZG9lcyBpdCBpbnRlcmZhY2Ugd2l0aCB0aGUgdmFyaW91cyBuZXRsaW5rIGFuZCBzb2NrZXQgb3B0aW9ucz8gVGhpbmtpbmcgYWJvdXQgaG93IHZhcmlvdXMgYXNwZWN0cyBvZiB0aGUgbmV0d29ya2luZyBzdGFjayB3aWxsIGJlaGF2ZSBkZXBlbmRpbmcgb24gd2hldGhlciB0aGlzIGlzIGVuYWJsZWQuIFRpbWUgdG8gcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgaGVyZS4gSSBjYW4ndCBwcm9jZWVkIHdpdGhvdXQgY2xhcmlmeWluZyB0aGUgc3RhdHVzIG9mIHRoYXQgY29uZmlnIG9wdGlvbi4gSXQncyBmdW5kYW1lbnRhbCB0byB0aGlzIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA2OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE3OjUzOjA5Ljg3MDU3NzUwOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwODI0NzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJTkVUX1RDUF9ESUFHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz00MjM9Y29uZmlnIElORVRfRElBR1xcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MzQtXFxubmV0L2lwdjQvS2NvbmZpZzo0MzU6Y29uZmlnIElORVRfVENQX0RJQUdcXG5uZXQvaXB2NC9LY29uZmlnLTQzNi1cXHRkZXBlbmRzIG9uIElORVRfRElBR1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNzo1MzoxMC4wNTE0MDY2MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTE1MTQ3OTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOZXR3b3JrIERpYWdub3N0aWNzIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkgc2VlIHdlJ3JlIGRlYWxpbmcgd2l0aCBuZXR3b3JrIGRpYWdub3N0aWNzLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBUQ1AgYW5kIE1QVENQLiBUaGUga2V5IGNvbmZpZ3VyYXRpb25zIEknbSBjb25zaWRlcmluZyBhcmUgYElORVRfRElBR2AsIGBJTkVUX1RDUF9ESUFHYCwgYE1QVENQYCwgYW5kIGBJTkVUX01QVENQX0RJQUdgLiBUaGVzZSBmbGFncyBsaWtlbHkgY29udHJvbCB0aGUgaW5jbHVzaW9uIG9yIGV4Y2x1c2lvbiBvZiBjZXJ0YWluIGRpYWdub3N0aWMgZmVhdHVyZXMgd2l0aGluIHRoZSBrZXJuZWwuIE15IHByaW1hcnkgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gdGhlIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSB0aGUgYWN0dWFsIGRhdGEgZHVtcGluZyDigJMgdGhlIGhlYXJ0IG9mIHRoZSBkaWFnbm9zdGljcy5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdlJ3JlIGV4dHJhY3RpbmcgYW5kIHByZXNlbnRpbmcgdGhpcyBpbmZvcm1hdGlvbi4gVGhlIGZ1bmN0aW9ucyBoaWdobGlnaHRlZCBhcmUgYHRjcF9kaWFnX2R1bXBgLCBgbXB0Y3BfZGlhZ19kdW1wX2xpc3RlbmVyc2AsIGFuZCBgbXB0Y3BfZGlhZ19kdW1wYC4gYG1wdGNwX2RpYWdfZHVtcGAgc2VlbXMgdG8gYmUgdGhlIGNlbnRyYWwgZW50cnkgcG9pbnQgZm9yIGFsbCB0aGluZ3MgTVBUQ1AtcmVsYXRlZC5cblxuTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBxdWlja2x5IGNvbmZpcm0gdGhlIGV4aXN0ZW5jZSBhbmQgc3RydWN0dXJlIG9mIHRoaXMgYG1wdGNwX2RpYWdfZHVtcGAgZnVuY3Rpb24uIEkgd2FudCB0byBlbnN1cmUgaXTigJlzIHRoZXJlIGFuZCBnZXQgYSBoYW5kbGUgb24gaXRzIGlucHV0cywgb3V0cHV0cywgYW5kIG92ZXJhbGwgcHVycG9zZS4gVGhpcyBpcyB0aGUgbHluY2hwaW4gSSB3aWxsIHN0YXJ0IHdpdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzg1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE3OjUzOjEzLjk2NjU1NjU1M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI3OTQxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3BfZGlhZ19kdW1wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9tcHRjcF9kaWFnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL21wdGNwX2RpYWcuYz0yOD1zdGF0aWMgaW50IHNrX2RpYWdfZHVtcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jLTM5LVxcbm5ldC9tcHRjcC9tcHRjcF9kaWFnLmM6NDA6c3RhdGljIGludCBtcHRjcF9kaWFnX2R1bXBfb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcXG5uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jLTQxLVxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX3JlcV92MiAqcmVxKVxcbi0tXFxubmV0L21wdGNwL21wdGNwX2RpYWcuYz04MT1zdHJ1Y3QgbXB0Y3BfZGlhZ19jdHgge1xcbi0tXFxubmV0L21wdGNwL21wdGNwX2RpYWcuYy04Ny1cXG5uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jOjg4OnN0YXRpYyB2b2lkIG1wdGNwX2RpYWdfZHVtcF9saXN0ZW5lcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxcbm5ldC9tcHRjcC9tcHRjcF9kaWFnLmMtODktXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGluZXRfZGlhZ19yZXFfdjIgKnIsXFxuLS1cXG5uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jLTE5OC1cXG5uZXQvbXB0Y3AvbXB0Y3BfZGlhZy5jOjE5OTpzdGF0aWMgdm9pZCBtcHRjcF9kaWFnX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxcbm5ldC9tcHRjcC9tcHRjcF9kaWFnLmMtMjAwLVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX3JlcV92MiAqcilcXG4tLVxcbm5ldC9tcHRjcC9tcHRjcF9kaWFnLmMtMjM4LVxcdGlmICgoci1cXHUwMDNlaWRpYWdfc3RhdGVzIFxcdTAwMjYgVENQRl9MSVNURU4pIFxcdTAwMjZcXHUwMDI2IHItXFx1MDAzZWlkLmlkaWFnX2Rwb3J0ID09IDApXFxubmV0L21wdGNwL21wdGNwX2RpYWcuYzoyMzk6XFx0XFx0bXB0Y3BfZGlhZ19kdW1wX2xpc3RlbmVycyhza2IsIGNiLCByLCBuZXRfYWRtaW4pO1xcbm5ldC9tcHRjcC9tcHRjcF9kaWFnLmMtMjQwLX1cXG4tLVxcbm5ldC9tcHRjcC9tcHRjcF9kaWFnLmM9MjcwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2hhbmRsZXIgbXB0Y3BfZGlhZ19oYW5kbGVyID0ge1xcbm5ldC9tcHRjcC9tcHRjcF9kaWFnLmMtMjcxLVxcdC5vd25lclxcdFxcdCA9IFRISVNfTU9EVUxFLFxcbm5ldC9tcHRjcC9tcHRjcF9kaWFnLmM6MjcyOlxcdC5kdW1wXFx0XFx0ID0gbXB0Y3BfZGlhZ19kdW1wLFxcbm5ldC9tcHRjcC9tcHRjcF9kaWFnLmM6MjczOlxcdC5kdW1wX29uZVxcdCA9IG1wdGNwX2RpYWdfZHVtcF9vbmUsXFxubmV0L21wdGNwL21wdGNwX2RpYWcuYy0yNzQtXFx0LmlkaWFnX2dldF9pbmZvICA9IG1wdGNwX2RpYWdfZ2V0X2luZm8sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE3OjUzOjE0LjAwOTM1MjY2NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzM2MzU5NjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBEaWFnbm9zdGljIEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhlc2UgZGlhZ25vc3RpYyBmdW5jdGlvbnMuIFdlIGhhdmUgYHRjcF9kaWFnX2R1bXBgLCBgbXB0Y3BfZGlhZ19kdW1wYCwgYW5kIGBtcHRjcF9kaWFnX2R1bXBfbGlzdGVuZXJzYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gaW52ZXN0aWdhdGUgdGhlIHNjb3BlIG9mIGB0Y3BfZGlhZ19kdW1wYC4gSXMgaXQgZGVjbGFyZWQgYHN0YXRpY2A/IFRoYXQgd291bGQgaW5mbHVlbmNlIGhvdyBhbmQgd2hlcmUgaXQgY2FuIGJlIGNhbGxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHZpc2liaWxpdHkgd2l0aGluIHRoZSBtb2R1bGUsIHNpbmNlIHRoaXMgYWZmZWN0cyBob3cgZWFzaWx5IGl0IGNhbiBiZSBpbnRlZ3JhdGVkIHdpdGggb3RoZXIgc3lzdGVtcyBvciBkZWJ1Z2dpbmcgdG9vbHMuIEtub3dpbmcgaXRzIHNjb3BlIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGludGVuZGVkIHVzZSBjYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQyNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE3OjUzOjE3LjM0NTcxNDM5OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM0MjI3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX2RpYWdfZHVtcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3BfZGlhZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcF9kaWFnLmM9MzQ3PXN0YXRpYyB2b2lkIHR3c2tfYnVpbGRfYXNzZXJ0KHZvaWQpXFxuLS1cXG5uZXQvaXB2NC90Y3BfZGlhZy5jLTM3Mi1cXG5uZXQvaXB2NC90Y3BfZGlhZy5jOjM3MzpzdGF0aWMgdm9pZCB0Y3BfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcXG5uZXQvaXB2NC90Y3BfZGlhZy5jLTM3NC1cXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBpbmV0X2RpYWdfcmVxX3YyICpyKVxcbi0tXFxubmV0L2lwdjQvdGNwX2RpYWcuYz03MDU9c3RhdGljIHN0cnVjdCBzb2NrICp0Y3BfZGlhZ19maW5kX29uZV9pY3NrKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9pcHY0L3RjcF9kaWFnLmMtNzQ1LVxcbm5ldC9pcHY0L3RjcF9kaWFnLmM6NzQ2OnN0YXRpYyBpbnQgdGNwX2RpYWdfZHVtcF9vbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxcbm5ldC9pcHY0L3RjcF9kaWFnLmMtNzQ3LVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGluZXRfZGlhZ19yZXFfdjIgKnJlcSlcXG4tLVxcbm5ldC9pcHY0L3RjcF9kaWFnLmM9ODAzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldF9kaWFnX2hhbmRsZXIgdGNwX2RpYWdfaGFuZGxlciA9IHtcXG5uZXQvaXB2NC90Y3BfZGlhZy5jLTgwNC1cXHQub3duZXJcXHRcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbm5ldC9pcHY0L3RjcF9kaWFnLmM6ODA1OlxcdC5kdW1wXFx0XFx0XFx0PSB0Y3BfZGlhZ19kdW1wLFxcbm5ldC9pcHY0L3RjcF9kaWFnLmM6ODA2OlxcdC5kdW1wX29uZVxcdFxcdD0gdGNwX2RpYWdfZHVtcF9vbmUsXFxubmV0L2lwdjQvdGNwX2RpYWcuYy04MDctXFx0LmlkaWFnX2dldF9pbmZvXFx0XFx0PSB0Y3BfZGlhZ19nZXRfaW5mbyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTc6NTM6MTcuMzg5MTM5NTk5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxODQ3MDA4NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwncyBEaWFnbm9zdGljIEZ1bmN0aW9uIENhbGxzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZGlhZ25vc3RpYyBmdW5jdGlvbnMuIEkgaW5pdGlhbGx5IGNvbnNpZGVyZWQgdGhlbSBhcyBzdGF0aWMsIGJ1dCB0aGVuIEkgcmVtZW1iZXJlZCB0aGV5IGFyZSByZWdpc3RlcmVkIHdpdGhpbiB0aGUgYGluZXRfZGlhZ19oYW5kbGVyYCBzdHJ1Y3R1cmUuIFRoYXQgc2hpZnRzIHRoaW5ncy5cblxuQWxyaWdodCwgbGV0IG1lIGxpc3QgdGhlbSBhbnl3YXkuIEl0J3MgZ29vZCB0byBrZWVwIHRoaW5ncyBjbGVhciwgZXNwZWNpYWxseSBhcyB0aGVzZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkLlxuXG5XYWl0IGEgc2Vjb25kLiBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSB3YW50cyBtZSB0byBwcmlvcml0aXplIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhhdCBtYWtlcyBzZW5zZSwgYXZvaWRpbmcgdGhvc2UgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgaW5saW5lZCBoZWxwZXIgZnVuY3Rpb25zLlxuXG5SaWdodCwgYHRjcF9kaWFnX2R1bXBgIGFuZCBgbXB0Y3BfZGlhZ19kdW1wYC4gRXhjZWxsZW50LiBUaGV5IGFyZSBhc3NpZ25lZCB0byBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gYSBzdHJ1Y3QsIG1lYW5pbmcgdGhleSB3b24ndCBiZSBpbmxpbmVkLiBUaGVpciBzeW1ib2wgYWRkcmVzc2VzIHdpbGwgYmUgZGlzdGluY3QuIFRoYXQgbWFrZXMgdGhlbSBwZXJmZWN0IGVudHJ5IHBvaW50cyBmb3IgdGhlIGR1bXBpbmcgcHJvY2Vzcy5cblxuTm93IGxldCdzIHZlcmlmeSBgaW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yYC4gQWgsIGl0J3MgZXhwb3J0ZWQhIE5vbi1zdGF0aWMsIGNvbmZpcm1lZC4gR29vZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQwMzQsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTc6NTM6MjIuNTczODQyODM0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDYwNDk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaW5ldF9kaWFnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaW5ldF9kaWFnLmM9ODg5PXN0YXRpYyBpbnQgaW5ldF9kaWFnX2R1bXBfc3RhcnRfY29tcGF0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTg5My1cXG5uZXQvaXB2NC9pbmV0X2RpYWcuYzo4OTQ6dm9pZCBpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3Ioc3RydWN0IGluZXRfZGlhZ19kdW1wX2RhdGEgKmNiX2RhdGEpXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtODk1LXtcXG4tLVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jLTkwMy19XFxubmV0L2lwdjQvaW5ldF9kaWFnLmM6OTA0OkVYUE9SVF9TWU1CT0xfR1BMKGluZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvcik7XFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtOTA1LVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jPTkwNj1zdGF0aWMgaW50IGluZXRfZGlhZ19kdW1wX2RvbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtOTA5LVxcbm5ldC9pcHY0L2luZXRfZGlhZy5jOjkxMDpcXHRpbmV0X2RpYWdfZHVtcF9jbGVhcl9jdXJzb3IoY2JfZGF0YSk7XFxubmV0L2lwdjQvaW5ldF9kaWFnLmMtOTExLVxcdGJwZl9za19zdG9yYWdlX2RpYWdfZnJlZShjYl9kYXRhLVxcdTAwM2VicGZfc3RnX2RpYWcpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNzo1MzoyMi42MTg0NTMzMDRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY3MTE1NTk5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRpYWdub3N0aWMgRHVtcCBDb25zaWRlcmF0aW9ucyoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZXNlIGZ1bmN0aW9uczogYHRjcF9kaWFnX2R1bXBgLCBgbXB0Y3BfZGlhZ19kdW1wX2xpc3RlbmVyc2AsIGFuZCBgaW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yYC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUgY29yZSByb3V0aW5lcyBpbnZvbHZlZCBpbiB3aGF0ZXZlciBkaWFnbm9zdGljIGZ1bmN0aW9uYWxpdHkgd2UncmUgZGVhbGluZyB3aXRoLiBLbm93aW5nIHdoYXQgdGhleSdyZSBkb2luZyBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHdob2xlIHBpY3R1cmUuXG5cbk5vdywgYXMgZm9yIHRoZSBjb25maWd1cmF0aW9ucyB0aGF0IGNvbnRyb2wgYWxsIHRoaXMsIEkgc2VlIGEgY2xlYXIgc2V0OiBgSU5FVF9ESUFHYCwgYElORVRfVENQX0RJQUdgLCBgTVBUQ1BgLCBhbmQgYElORVRfTVBUQ1BfRElBR2AuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9ucyBhcmUgc2V0IGluIG9yZGVyIHRvIGVuc3VyZSB0aGUgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUuXG5cbkl0J3MgYWx3YXlzIGEgZ29vZCBwcmFjdGljZSB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlncyBpbiBwbGF5LiBMZXQncyBzZWUuLi4gbG9va2luZyBhdCB0aGUgZGV0YWlscywgYENPTkZJR19JTkVUX0RJQUdgIGFuZCBgQ09ORklHX0lORVRfVENQX0RJQUdgIGFyZSB0cmlzdGF0ZSwgbWVhbmluZyB0aGV5IGNhbiBiZSBlbmFibGVkIGFzIGEgbW9kdWxlLCBidWlsdC1pbiwgb3IgZGlzYWJsZWQuIGBDT05GSUdfTVBUQ1BgIGlzIGEgc2ltcGxlIGJvb2xlYW47IGVpdGhlciBpdCdzIGVuYWJsZWQgb3IgZGlzYWJsZWQuIEFuZCBmaW5hbGx5LCBgQ09ORklHX0lORVRfTVBUQ1BfRElBR2AgaXMgYW5vdGhlciB0cmlzdGF0ZS5cblxuSSd2ZSBnb3QgdGhlIHBpZWNlcyBmaWd1cmVkIG91dCBhbmQgSSdsbCBub3cgc2V0IHRoZSBjb3JyZXNwb25kaW5nIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgYWNjb3JkaW5nbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzUwLCJPdXRwdXRUb2tlbnMiOjE2NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNzo1MzoyOC4yODk2MTE0ODhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDc4NzM2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVF9ESUFHXCIsXG4gICAgXCJJTkVUX1RDUF9ESUFHXCIsXG4gICAgXCJNUFRDUFwiLFxuICAgIFwiSU5FVF9NUFRDUF9ESUFHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX2RpYWdfZHVtcFwiLFxuICAgIFwibXB0Y3BfZGlhZ19kdW1wX2xpc3RlbmVyc1wiLFxuICAgIFwiaW5ldF9kaWFnX2R1bXBfY2xlYXJfY3Vyc29yXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGN1cnNvciBtZWNoYW5pc20gZm9yIGR1bXBpbmcgVENQIGFuZCBNUFRDUCBzb2NrZXRzIHZpYSB0aGUgaW5ldF9kaWFnIG5ldGxpbmsgaW50ZXJmYWNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayB0aGF0IGFmZmVjdHMgaG93IHNvY2tldHMgYXJlIGl0ZXJhdGVkIGFuZCBkdW1wZWQsIHByZXZlbnRpbmcgZHVwbGljYXRlcyBvciBtaXNzZWQgc29ja2V0cyB3aGVuIHRoZSBoYXNoIHRhYmxlIGNoYW5nZXMgZHVyaW5nIHRoZSBkdW1wLiBJdCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRfRElBR1wiLFxuICAgIFwiSU5FVF9UQ1BfRElBR1wiLFxuICAgIFwiTVBUQ1BcIixcbiAgICBcIklORVRfTVBUQ1BfRElBR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF9kaWFnX2R1bXBcIixcbiAgICBcIm1wdGNwX2RpYWdfZHVtcF9saXN0ZW5lcnNcIixcbiAgICBcImluZXRfZGlhZ19kdW1wX2NsZWFyX2N1cnNvclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBjdXJzb3IgbWVjaGFuaXNtIGZvciBkdW1waW5nIFRDUCBhbmQgTVBUQ1Agc29ja2V0cyB2aWEgdGhlIGluZXRfZGlhZyBuZXRsaW5rIGludGVyZmFjZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgdGhhdCBhZmZlY3RzIGhvdyBzb2NrZXRzIGFyZSBpdGVyYXRlZCBhbmQgZHVtcGVkLCBwcmV2ZW50aW5nIGR1cGxpY2F0ZXMgb3IgbWlzc2VkIHNvY2tldHMgd2hlbiB0aGUgaGFzaCB0YWJsZSBjaGFuZ2VzIGR1cmluZyB0aGUgZHVtcC4gSXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbmV0bGluayBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflown7h9z[1] Phase: Succeeded StartedAt: 2026-07-30 17:53:39 +0000 UTC FinishedAt: 2026-07-30 17:53:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7h9z[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-30 17:53:39 +0000 UTC FinishedAt: 2026-07-30 17:53:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7h9z[2] Phase: Succeeded StartedAt: 2026-07-30 17:53:39 +0000 UTC FinishedAt: 2026-07-30 21:31:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7h9z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_diag_dump","mptcp_diag_dump_listeners","inet_diag_dump_clear_cursor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"226acf33-fa5d-40f1-bdad-1c5a96a3187a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-30 17:53:39 +0000 UTC FinishedAt: 2026-07-30 21:31:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_diag_dump","mptcp_diag_dump_listeners","inet_diag_dump_clear_cursor"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"226acf33-fa5d-40f1-bdad-1c5a96a3187a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflown7h9z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_diag_dump","mptcp_diag_dump_listeners","inet_diag_dump_clear_cursor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"226acf33-fa5d-40f1-bdad-1c5a96a3187a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-30 17:53:39 +0000 UTC FinishedAt: 2026-07-30 17:53:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7h9z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_diag_dump","mptcp_diag_dump_listeners","inet_diag_dump_clear_cursor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"226acf33-fa5d-40f1-bdad-1c5a96a3187a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-30 17:53:39 +0000 UTC FinishedAt: 2026-07-30 17:53:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflown7h9z/series-workflown7h9z-convert-artifact-1531776886/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown7h9z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_diag_dump","mptcp_diag_dump_listeners","inet_diag_dump_clear_cursor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"226acf33-fa5d-40f1-bdad-1c5a96a3187a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-30 17:53:49 +0000 UTC FinishedAt: 2026-07-30 18:10:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7h9z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_diag_dump","mptcp_diag_dump_listeners","inet_diag_dump_clear_cursor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"226acf33-fa5d-40f1-bdad-1c5a96a3187a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-30 17:53:49 +0000 UTC FinishedAt: 2026-07-30 18:10:13 +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:*8b8c6f49-01da-45aa-ae0a-e5deb514837b,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-workflown7h9z/series-workflown7h9z-convert-artifact-1531776886/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": "c01b8808-b17c-4a1d-b378-903c7b64679f", "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-workflown7h9z/series-workflown7h9z-build-action-2394106508/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown7h9z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_diag_dump","mptcp_diag_dump_listeners","inet_diag_dump_clear_cursor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"226acf33-fa5d-40f1-bdad-1c5a96a3187a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-30 17:53:49 +0000 UTC FinishedAt: 2026-07-30 18:10:03 +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:*8b8c6f49-01da-45aa-ae0a-e5deb514837b,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-workflown7h9z/series-workflown7h9z-convert-artifact-1531776886/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": "c01b8808-b17c-4a1d-b378-903c7b64679f", "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-workflown7h9z/series-workflown7h9z-build-action-2394106508/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown7h9z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_diag_dump","mptcp_diag_dump_listeners","inet_diag_dump_clear_cursor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"226acf33-fa5d-40f1-bdad-1c5a96a3187a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-30 18:10:13 +0000 UTC FinishedAt: 2026-07-30 18:10:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7h9z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_diag_dump","mptcp_diag_dump_listeners","inet_diag_dump_clear_cursor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"226acf33-fa5d-40f1-bdad-1c5a96a3187a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-30 18:10:13 +0000 UTC FinishedAt: 2026-07-30 18:10:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7h9z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_diag_dump","mptcp_diag_dump_listeners","inet_diag_dump_clear_cursor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"226acf33-fa5d-40f1-bdad-1c5a96a3187a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-30 18:10:13 +0000 UTC FinishedAt: 2026-07-30 18:10:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7h9z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_diag_dump","mptcp_diag_dump_listeners","inet_diag_dump_clear_cursor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"226acf33-fa5d-40f1-bdad-1c5a96a3187a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-30 18:10:13 +0000 UTC FinishedAt: 2026-07-30 18:10:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"226acf33-fa5d-40f1-bdad-1c5a96a3187a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflown7h9z/series-workflown7h9z-convert-artifact-3836358665/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown7h9z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_diag_dump","mptcp_diag_dump_listeners","inet_diag_dump_clear_cursor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"226acf33-fa5d-40f1-bdad-1c5a96a3187a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-30 18:10:23 +0000 UTC FinishedAt: 2026-07-30 18:12:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7h9z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_diag_dump","mptcp_diag_dump_listeners","inet_diag_dump_clear_cursor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"226acf33-fa5d-40f1-bdad-1c5a96a3187a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-30 18:10:23 +0000 UTC FinishedAt: 2026-07-30 18:11:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c01b8808-b17c-4a1d-b378-903c7b64679f,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-workflown7h9z/series-workflown7h9z-build-action-2394106508/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-workflown7h9z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_diag_dump","mptcp_diag_dump_listeners","inet_diag_dump_clear_cursor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"226acf33-fa5d-40f1-bdad-1c5a96a3187a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-30 18:12:08 +0000 UTC FinishedAt: 2026-07-30 18:12:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7h9z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_diag_dump","mptcp_diag_dump_listeners","inet_diag_dump_clear_cursor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"226acf33-fa5d-40f1-bdad-1c5a96a3187a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-30 18:12:08 +0000 UTC FinishedAt: 2026-07-30 18:12:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7h9z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_diag_dump","mptcp_diag_dump_listeners","inet_diag_dump_clear_cursor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"226acf33-fa5d-40f1-bdad-1c5a96a3187a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-30 18:12:08 +0000 UTC FinishedAt: 2026-07-30 18:28:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7h9z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_diag_dump","mptcp_diag_dump_listeners","inet_diag_dump_clear_cursor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"226acf33-fa5d-40f1-bdad-1c5a96a3187a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-30 18:12:08 +0000 UTC FinishedAt: 2026-07-30 18:28:18 +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:*8b8c6f49-01da-45aa-ae0a-e5deb514837b,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-workflown7h9z/series-workflown7h9z-convert-artifact-3836358665/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": "ef3aec47-4b83-4ae8-9575-05fc058f4071", "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-workflown7h9z/series-workflown7h9z-build-action-980890085/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown7h9z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_diag_dump","mptcp_diag_dump_listeners","inet_diag_dump_clear_cursor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"226acf33-fa5d-40f1-bdad-1c5a96a3187a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-30 18:12:08 +0000 UTC FinishedAt: 2026-07-30 18:28:08 +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:*8b8c6f49-01da-45aa-ae0a-e5deb514837b,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-workflown7h9z/series-workflown7h9z-convert-artifact-3836358665/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": "ef3aec47-4b83-4ae8-9575-05fc058f4071", "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-workflown7h9z/series-workflown7h9z-build-action-980890085/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown7h9z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_diag_dump","mptcp_diag_dump_listeners","inet_diag_dump_clear_cursor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"226acf33-fa5d-40f1-bdad-1c5a96a3187a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-30 18:28:18 +0000 UTC FinishedAt: 2026-07-30 18:28:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7h9z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_diag_dump","mptcp_diag_dump_listeners","inet_diag_dump_clear_cursor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"226acf33-fa5d-40f1-bdad-1c5a96a3187a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-30 18:28:18 +0000 UTC FinishedAt: 2026-07-30 18:28:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7h9z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_diag_dump","mptcp_diag_dump_listeners","inet_diag_dump_clear_cursor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"226acf33-fa5d-40f1-bdad-1c5a96a3187a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-30 18:28:18 +0000 UTC FinishedAt: 2026-07-30 18:30:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7h9z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_diag_dump","mptcp_diag_dump_listeners","inet_diag_dump_clear_cursor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"226acf33-fa5d-40f1-bdad-1c5a96a3187a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-30 18:28:18 +0000 UTC FinishedAt: 2026-07-30 18:29:56 +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:*ef3aec47-4b83-4ae8-9575-05fc058f4071,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-workflown7h9z/series-workflown7h9z-build-action-980890085/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-workflown7h9z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_diag_dump","mptcp_diag_dump_listeners","inet_diag_dump_clear_cursor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"226acf33-fa5d-40f1-bdad-1c5a96a3187a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-30 18:30:06 +0000 UTC FinishedAt: 2026-07-30 21:31:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7h9z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_diag_dump","mptcp_diag_dump_listeners","inet_diag_dump_clear_cursor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"226acf33-fa5d-40f1-bdad-1c5a96a3187a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-30 18:30:06 +0000 UTC FinishedAt: 2026-07-30 21:31:36 +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":["tcp_diag_dump","mptcp_diag_dump_listeners","inet_diag_dump_clear_cursor"],"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:*c01b8808-b17c-4a1d-b378-903c7b64679f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ef3aec47-4b83-4ae8-9575-05fc058f4071,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-workflown7h9z/series-workflown7h9z-build-action-2394106508/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-workflown7h9z/series-workflown7h9z-build-action-980890085/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflown7h9z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_diag_dump","mptcp_diag_dump_listeners","inet_diag_dump_clear_cursor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"226acf33-fa5d-40f1-bdad-1c5a96a3187a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-30 18:30:06 +0000 UTC FinishedAt: 2026-07-30 18:30:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7h9z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_diag_dump","mptcp_diag_dump_listeners","inet_diag_dump_clear_cursor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"226acf33-fa5d-40f1-bdad-1c5a96a3187a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-30 18:30:06 +0000 UTC FinishedAt: 2026-07-30 18:30:10 +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":["tcp_diag_dump","mptcp_diag_dump_listeners","inet_diag_dump_clear_cursor"],"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-workflown7h9z/series-workflown7h9z-convert-artifact-2952817502/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown7h9z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_diag_dump","mptcp_diag_dump_listeners","inet_diag_dump_clear_cursor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"226acf33-fa5d-40f1-bdad-1c5a96a3187a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-30 18:30:06 +0000 UTC FinishedAt: 2026-07-30 18:30:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7h9z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_diag_dump","mptcp_diag_dump_listeners","inet_diag_dump_clear_cursor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"226acf33-fa5d-40f1-bdad-1c5a96a3187a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-30 18:30:06 +0000 UTC FinishedAt: 2026-07-30 18:30:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7h9z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_diag_dump","mptcp_diag_dump_listeners","inet_diag_dump_clear_cursor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"226acf33-fa5d-40f1-bdad-1c5a96a3187a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-30 18:30:06 +0000 UTC FinishedAt: 2026-07-30 18:30:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7h9z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_diag_dump","mptcp_diag_dump_listeners","inet_diag_dump_clear_cursor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"226acf33-fa5d-40f1-bdad-1c5a96a3187a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-30 18:30:16 +0000 UTC FinishedAt: 2026-07-30 21:31:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7h9z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_diag_dump","mptcp_diag_dump_listeners","inet_diag_dump_clear_cursor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"451c9075d6c53f2438d110addbeeeea6fac18567","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_DIAG","INET_TCP_DIAG","MPTCP","INET_MPTCP_DIAG"],"series_id":"226acf33-fa5d-40f1-bdad-1c5a96a3187a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-30 18:30:16 +0000 UTC FinishedAt: 2026-07-30 21:31:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c01b8808-b17c-4a1d-b378-903c7b64679f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ef3aec47-4b83-4ae8-9575-05fc058f4071,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-workflown7h9z/series-workflown7h9z-build-action-2394106508/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-workflown7h9z/series-workflown7h9z-build-action-980890085/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-workflown7h9z/series-workflown7h9z-convert-artifact-2952817502/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,}