Name: series-workflowcdpgh Phase: Succeeded StartedAt: 2026-09-06 15:43:55 +0000 UTC FinishedAt: 2026-09-06 20:16:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdpgh[0] Phase: Succeeded StartedAt: 2026-09-06 15:43:55 +0000 UTC FinishedAt: 2026-09-06 16:25:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdpgh[0].run-triage Phase: Succeeded StartedAt: 2026-09-06 15:43:55 +0000 UTC FinishedAt: 2026-09-06 16:25:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "0642036192d08a189732d1eca234888d5e2d4be1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED", "MEMCG", "MIGRATION" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "0642036192d08a189732d1eca234888d5e2d4be1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED", "MEMCG", "MIGRATION" ], "series_id": "7e52b08e-ef71-46eb-9fbe-d40ec3d918b6" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "lru_gen_look_around", "folio_migrate_flags", "mem_cgroup_update_lru_size", "walk_pte_range", "walk_pmd_range_locked", "folio_update_gen", "evict_folios", "isolate_folio", "lru_gen_inc_refs", "lru_gen_clear_refs" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xydV9nZW5fbG9va19hcm91bmQmIzM0OywKICAgICYjMzQ7Zm9saW9fbWlncmF0ZV9mbGFncyYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZSYjMzQ7LAogICAgJiMzNDt3YWxrX3B0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDt3YWxrX3BtZF9yYW5nZV9sb2NrZWQmIzM0OywKICAgICYjMzQ7Zm9saW9fdXBkYXRlX2dlbiYjMzQ7LAogICAgJiMzNDtldmljdF9mb2xpb3MmIzM0OywKICAgICYjMzQ7aXNvbGF0ZV9mb2xpbyYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX2luY19yZWZzJiMzNDssCiAgICAmIzM0O2xydV9nZW5fY2xlYXJfcmVmcyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyByZWZhY3RvcnMgTXVsdGktR2VuZXJhdGlvbmFsIExSVSAoTUdMUlUpIGZvbGlvIGZsYWcgaGVscGVycywgcGFnZSB0YWJsZSAvIHJtYXAgc2Nhbm5pbmcgbG9naWMsIGFuZCBtZW1jZyBMUlUgem9uZSBzaXplIGFjY291bnRpbmcuIFNwZWNpZmljYWxseTpcbi0gSXQgcmVwbGFjZXMgZGlyZWN0IGBmb2xpby1cdTAwM2VmbGFncy5mYCBhY2Nlc3Mgd2l0aCBgZm9saW9fZmxhZ3MoZm9saW8sIDApYCBhY2Nlc3NvciBoZWxwZXJzIChgbHJ1X3NldF9nZW5fZmxhZ3NgLCBgbHJ1X2dldF9nZW5fZmxhZ3NgLCBgbHJ1X3NldF9yZWZzX2ZsYWdzYCwgYGxydV9nZXRfcmVmc19mbGFnc2AsIGBmb2xpb19zZXRfbHJ1X3JlZnNgLCBgZm9saW9fbWlncmF0ZV9scnVfcmVmc2ApLlxuLSBJdCBjbGVhbnMgdXAgYHJlYWRfY3RybF9wb3NgIHBhcmFtZXRlcml6YXRpb24gYW5kIGB3YWxrX3VwZGF0ZV9mb2xpb2AgY2FsbGVycy4gU3RhY2sgdmFyaWFibGVzIHN1Y2ggYXMgYHN0cnVjdCBjdHJsX3BvcyBwb3NgIGFyZSBmdWxseSBpbml0aWFsaXplZCBpbiBgcmVhZF9jdHJsX3Bvc2AsIGFuZCB0aGUgYGludCAqdHlwZWAgb3V0cHV0IHBhcmFtZXRlciBpbiBgZm9saW9fdXBkYXRlX2dlbmAgaXMgZ3VhcmFudGVlZCB0byBiZSBpbml0aWFsaXplZCB3aGVuIHRoZSByZXR1cm4gdmFsdWUgaW5kaWNhdGVzIHByb21vdGlvbiAoYG9sZF9nZW4gXHUwMDNlPSAwYCkuXG4tIEl0IGNvbnZlcnRzIGBtei1cdTAwM2VscnVfem9uZV9zaXplYCB0byBzaWduZWQgYGxvbmdgIHRvIHNpbXBsaWZ5IHVuZGVyZmxvdyBoYW5kbGluZy5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBQb3RlbnRpYWwgYnVncyBpbiB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIGNvbmN1cnJlbmN5L2xvY2tpbmcgcmFjZXMgb3Igc3RhdGUgY29ycnVwdGlvbikgYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIGtlcm5lbCBhc3NlcnRpb24gYnVpbGRzIHdpdGhvdXQgcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgYWNyb3NzIG1tL3Ztc2Nhbi5jLCBtbS9mb2xpby5jLCBtbS9tZW1jb250cm9sLmMsIGFuZCBtbS9taWdyYXRlLmMsIGFsdGVyaW5nIE11bHRpLUdlbiBMUlUgKE1HTFJVKSByZWZlcmVuY2UgdHJhY2tpbmcsIGZvbGlvIGZsYWcgbWFuaXB1bGF0aW9uLCB0aWVyIGNhbGN1bGF0aW9ucywgcGFnZSBldmljdGlvbiwgYW5kIG1lbWNnIExSVSB6b25lIGFjY291bnRpbmcuIEl0IGFsc28gYWRkcyBzZXZlcmFsIFZNX1dBUk5fT05fT05DRSBhc3NlcnRpb25zIGFuZCBjaGFuZ2VzIHN5bmNocm9uaXphdGlvbi9hcml0aG1ldGljIGxvZ2ljLiBUaGVzZSBwYXRocyBhcmUgZnVsbHkgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTNjYmJjNzZlMWM5NjZjNzZmZTYyMTI5OWEzMmQxN2FmYTdlNDAwM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTY6MjM6NDkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuaW5kZXggYzc5OTkyNjQzNTU2MC4uMmI2NzY5NDI4NWQwNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuQEAgLTEwMCw3ICYjNDM7MTAwLDcgQEAgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUge1xuIFx0LyogRmllbGRzIHdoaWNoIGdldCB1cGRhdGVkIG9mdGVuIGF0IHRoZSBlbmQuICovXG4gXHRzdHJ1Y3QgbHJ1dmVjXHRcdGxydXZlYztcbiBcdENBQ0hFTElORV9QQURESU5HKF9wYWQyXyk7XG4tXHR1bnNpZ25lZCBsb25nXHRcdGxydV96b25lX3NpemVbTUFYX05SX1pPTkVTXVtOUl9MUlVfTElTVFNdO1xuJiM0MztcdGxvbmdcdFx0XHRscnVfem9uZV9zaXplW01BWF9OUl9aT05FU11bTlJfTFJVX0xJU1RTXTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwX3JlY2xhaW1faXRlclx0aXRlcjtcbiBcbiBcdC8qXG5AQCAtODg3LDEwICYjNDM7ODg3LDE1IEBAIHN0YXRpYyBpbmxpbmVcbiB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRlbnVtIGxydV9saXN0IGxydSwgaW50IHpvbmVfaWR4KVxuIHtcbiYjNDM7XHRsb25nIHZhbDtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejtcbiBcbiBcdG16ID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7XG4tXHRyZXR1cm4gUkVBRF9PTkNFKG16LVx1MDAzZWxydV96b25lX3NpemVbem9uZV9pZHhdW2xydV0pO1xuJiM0MztcdHZhbCA9IFJFQURfT05DRShtei1cdTAwM2VscnVfem9uZV9zaXplW3pvbmVfaWR4XVtscnVdKTtcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKHZhbCBcdTAwM2MgMCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHZhbDtcbiB9XG4gXG4gdm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzayk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaCBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcbmluZGV4IDYyMWM4NjUzZDhmN2UuLmFiNjliOTkzMDg5M2YgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG5AQCAtMzAsNiAmIzQzOzMwLDE3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2lzX2ZpbGVfbHJ1KGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gIWZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbyk7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUgLSBTaG91bGQgdGhlIGZvbGlvIGJlIG9uIGEgZmlsZSBMUlUgb3IgYW5vbiBMUlU/XG4mIzQzOyAqIEBmbGFnczogVGhlIGZvbGlvJiMzOTtzIGZsYWdzLlxuJiM0MzsgKlxuJiM0MzsgKiBKdXN0IGxpa2UgZm9saW9faXNfZmlsZV9scnUgYnV0IHRha2UgdGhlIGZvbGlvIGZsYWdzIGRpcmVjdGx5IGluc3RlYWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBmb2xpb19mbGFnc19pc19maWxlX2xydShjb25zdCB1bnNpZ25lZCBsb25nICpmbGFncylcbiYjNDM7e1xuJiM0MztcdHJldHVybiAhdGVzdF9iaXQoUEdfc3dhcGJhY2tlZCwgZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdFx0XHRlbnVtIGxydV9saXN0IGxydSwgZW51bSB6b25lX3R5cGUgemlkLFxuIFx0XHRcdFx0bG9uZyBucl9wYWdlcylcbkBAIC0xNDIsMTAgJiM0MzsxNTMsNjYgQEAgc3RhdGljIGlubGluZSBpbnQgbHJ1X3RpZXJfZnJvbV9yZWZzKGludCByZWZzLCBib29sIHdvcmtpbmdzZXQpXG4gXHRyZXR1cm4gd29ya2luZ3NldCA/IE1BWF9OUl9USUVSUyAtIDEgOiBvcmRlcl9iYXNlXzIocmVmcyk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzOy8qKlxuJiM0MzsgKiBscnVfc2V0X2dlbl9mbGFncyAtIFNldCB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIHRvIHNwZWNpZmllZCBmb2xpbyBmbGFncy5cbiYjNDM7ICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFnc1xuJiM0MzsgKiBAZ2VuOiBnZW5lcmF0aW9uIG51bWJlciwgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGxydV9zZXRfZ2VuX2ZsYWdzKHVuc2lnbmVkIGxvbmcgKmZsYWdzLCBpbnQgZ2VuKVxuJiM0Mzt7XG4mIzQzO1x0QlVJTERfQlVHX09OKExSVV9HRU5fTUFTSyBcdTAwMjYgTFJVX1JFRlNfTUFTSyk7XG4mIzQzO1x0Vk1fV0FSTl9PTl9PTkNFKGdlbiBcdTAwM2U9IE1BWF9OUl9HRU5TIHx8IGdlbiBcdTAwM2MgMCk7XG4mIzQzO1x0LyogU3RvcmUgZ2VuIG9mZnNldCBieSAxLCB6ZXJvIG1lYW5zIHRoZSBmb2xpbyBpcyBvZmYtbGlzdC4gKi9cbiYjNDM7XHQqZmxhZ3MgXHUwMDI2PSB+TFJVX0dFTl9NQVNLO1xuJiM0MztcdCpmbGFncyB8PSAoZ2VuICYjNDM7IDFVTCkgXHUwMDNjXHUwMDNjIExSVV9HRU5fUEdPRkY7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBscnVfZ2V0X2dlbl9mbGFncyAtIFJldHVybiB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIGZyb20gZm9saW8gZmxhZ3MuXG4mIzQzOyAqIEBmbGFnczogZm9saW8gZmxhZ3NcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLiBSZXR1cm5zXG4mIzQzOyAqIC0xIGlmIHRoZSBmbGFncyBpbmRpY2F0ZSB0aGUgZm9saW8gaXMgb2ZmIHRoZSBsaXN0IChlLmcuLCBpc29sYXRlZCkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBscnVfZ2V0X2dlbl9mbGFncyh1bnNpZ25lZCBsb25nIGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGdlbiA9ICgoZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbiYjNDM7XG4mIzQzO1x0LyogRXhjbHVkZSB0aGUgbGVnYWwgLTEgZnJvbSB0aGUgdW5zaWduZWQgTUFYX05SX0dFTlMgY29tcGFyaXNvbiAqL1xuJiM0MztcdFZNX1dBUk5fT05fT05DRShnZW4gIT0gLTEgXHUwMDI2XHUwMDI2IGdlbiBcdTAwM2U9IE1BWF9OUl9HRU5TKTtcbiYjNDM7XHRyZXR1cm4gZ2VuO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogbHJ1X3NldF9yZWZzX2ZsYWdzIC0gU2V0IHRoZSBMUlUgcmVmZXJlbmNlZCBjb3VudCB0byBmb2xpbyBmbGFncy5cbiYjNDM7ICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFnc1xuJiM0MzsgKiBAcmVmczogcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCBudW1iZXIsIGJldHdlZW4gMCBhbmQgTFJVX1JFRlNfTUFYLCBpbmNsdXNpdmUuXG4mIzQzOyAqXG4mIzQzOyAqIEZvciBNR0xSVSwgUEdfcmVmZXJlbmNlZCBob2xkcyB0aGUgZmlyc3QgcmVmLCBhbmQgdGhlIGV4dHJhIGJpdHMgaG9sZCB0aGVcbiYjNDM7ICogcmVtYWluaW5nIHJlZnMuIEZvciBjbGFzc2ljYWwgTFJVIHRoZSBleHRyYSBiaXRzIGFyZSBub3QgdXNlZCwgc28gaXQgY2FuXG4mIzQzOyAqIGFsc28gYmUgc2VlbiBhcyB0aGUgcmVmcyBjb3VudCBuZXZlciBleGNlZWRzIDEuIEluIGJvdGggY2FzZXMsIHJlZnMgPT0gMVxuJiM0MzsgKiBtZWFucyBQR19yZWZlcmVuY2VkIGlzIHNldCBhbmQgdGhlIGV4dHJhIGJpdHMgYXJlIHplcm8sIGFuZCByZWZzID09IDAgbWVhbnNcbiYjNDM7ICogUEdfcmVmZXJlbmNlZCBhbmQgdGhlIGV4dHJhIGJpdHMgYXJlIGFsbCB1bnNldC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfc2V0X3JlZnNfZmxhZ3ModW5zaWduZWQgbG9uZyAqZmxhZ3MsIHVuc2lnbmVkIGludCByZWZzKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4mIzQzO1x0Vk1fV0FSTl9PTl9PTkNFKHJlZnMgXHUwMDNlIExSVV9SRUZTX01BWCk7XG4mIzQzO1x0QlVJTERfQlVHX09OKExSVV9SRUZTX01BWCAhPSAoTFJVX1JFRlNfTUFTSyBcdTAwM2VcdTAwM2UgTFJVX1JFRlNfUEdPRkYpICYjNDM7IDEpO1xuIFxuJiM0MztcdCpmbGFncyBcdTAwMjY9IH5MUlVfUkVGU19GTEFHUztcbiYjNDM7XHRpZiAoIXJlZnMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0KmZsYWdzIHw9IChCSVQoUEdfcmVmZXJlbmNlZCkgfCAoKHJlZnMgLSAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfUkVGU19QR09GRikpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogbHJ1X2dldF9yZWZzX2ZsYWdzIC0gUmV0dXJuIExSVSByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IGZyb20gZm9saW8gZmxhZ3MuXG4mIzQzOyAqIEBmbGFnczogZm9saW8gZmxhZ3NcbiYjNDM7ICpcbiYjNDM7ICogUmVhZHMgdGhlIExSVSByZWZlcmVuY2VkIGNvdW50IHNldCBieSBscnVfc2V0X3JlZnNfZmxhZ3MoKS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGxydV9nZXRfcmVmc19mbGFncyh1bnNpZ25lZCBsb25nIGZsYWdzKVxuJiM0Mzt7XG4gXHRpZiAoIShmbGFncyBcdTAwMjYgQklUKFBHX3JlZmVyZW5jZWQpKSlcbiBcdFx0cmV0dXJuIDA7XG4gXHQvKlxuQEAgLTE1NSwxMSAmIzQzOzIyMiwyNCBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cmV0dXJuICgoZmxhZ3MgXHUwMDI2IExSVV9SRUZTX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfUkVGU19QR09GRikgJiM0MzsgMTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X2dlbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4mIzQzO1x0cmV0dXJuIGxydV9nZXRfcmVmc19mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpO1xuJiM0Mzt9XG4gXG4tXHRyZXR1cm4gKChmbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCByZWZzKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbiYjNDM7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuJiM0MztcdFx0bHJ1X3NldF9yZWZzX2ZsYWdzKFx1MDAyNm5ld19mbGFncywgcmVmcyk7XG4mIzQzO1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X2dlbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGxydV9nZXRfZ2VuX2ZsYWdzKFJFQURfT05DRSgqY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKSk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2lzX2FjdGl2ZShjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBnZW4pXG5AQCAtMjcwLDcgJiM0MzszNTAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9hZGRfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpO1xuIFx0ZmxhZ3MgPSAoZ2VuICYjNDM7IDFVTCkgXHUwMDNjXHUwMDNjIExSVV9HRU5fUEdPRkY7XG4gXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUlOX05SX0dFTlMgYWJvdXQgUEdfYWN0aXZlICovXG4tXHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9HRU5fTUFTSyB8IEJJVChQR19hY3RpdmUpLCBmbGFncyk7XG4mIzQzO1x0c2V0X21hc2tfYml0cyhmb2xpb19mbGFncyhmb2xpbywgMCksIExSVV9HRU5fTUFTSyB8IEJJVChQR19hY3RpdmUpLCBmbGFncyk7XG4gXG4gXHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIC0xLCBnZW4pO1xuIFx0LyogZm9yIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZSgpICovXG5AQCAtMjk1LDcgJiM0MzszNzUsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFxuIFx0LyogZm9yIGZvbGlvX21pZ3JhdGVfZmxhZ3MoKSAqL1xuIFx0ZmxhZ3MgPSAhcmVjbGFpbWluZyBcdTAwMjZcdTAwMjYgbHJ1X2dlbl9pc19hY3RpdmUobHJ1dmVjLCBnZW4pID8gQklUKFBHX2FjdGl2ZSkgOiAwO1xuLVx0ZmxhZ3MgPSBzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9HRU5fTUFTSywgZmxhZ3MpO1xuJiM0MztcdGZsYWdzID0gc2V0X21hc2tfYml0cyhmb2xpb19mbGFncyhmb2xpbywgMCksIExSVV9HRU5fTUFTSywgZmxhZ3MpO1xuIFx0Z2VuID0gKChmbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuIFxuIFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBnZW4sIC0xKTtcbkBAIC0zMDQsMTEgJiM0MzszODQsMTkgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcbiYjNDM7LyoqXG4mIzQzOyAqIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMgLSBjb3B5IHRoZSByZWZlcmVuY2Ugc3RhdGUgdG8gYSBuZXcgZm9saW9cbiYjNDM7ICogQG5ldzogdGhlIGRlc3RpbmF0aW9uIGZvbGlvXG4mIzQzOyAqIEBvbGQ6IHRoZSBzb3VyY2UgZm9saW9cbiYjNDM7ICpcbiYjNDM7ICogVHJhbnNmZXIgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBAbmV3IGR1cmluZyBtaWdyYXRpb246IHRoZSBNR0xSVVxuJiM0MzsgKiByZWZzIGNvdW50LCBpbmNsdWRpbmcgUEdfcmVmZXJlbmNlZCwgb3IganVzdCBQR19yZWZlcmVuY2VkIGZvciB0aGVcbiYjNDM7ICogYWN0aXZlL2luYWN0aXZlIExSVS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcbiB7XG4tXHR1bnNpZ25lZCBsb25nIHJlZnMgPSBSRUFEX09OQ0Uob2xkLVx1MDAzZWZsYWdzLmYpIFx1MDAyNiBMUlVfUkVGU19NQVNLO1xuLVxuLVx0c2V0X21hc2tfYml0cyhcdTAwMjZuZXctXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgcmVmcyk7XG4mIzQzO1x0QlVJTERfQlVHX09OKExSVV9SRUZTX01BU0sgXHUwMDI2IEJJVChQR19yZWZlcmVuY2VkKSk7XG4mIzQzO1x0Zm9saW9fc2V0X2xydV9yZWZzKG5ldywgZm9saW9fbHJ1X3JlZnMob2xkKSk7XG4gfVxuICNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xuIFxuQEAgLTMzNyw5ICYjNDM7NDI1LDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXG4ge1xuLVxuJiM0MztcdGlmIChmb2xpb190ZXN0X3JlZmVyZW5jZWQob2xkKSlcbiYjNDM7XHRcdGZvbGlvX3NldF9yZWZlcmVuY2VkKG5ldyk7XG4gfVxuICNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5pbmRleCA4NGUyMzdmMmMxN2RiLi5jOWFlNzk5MWE4YjIwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuQEAgLTQ5NSwxMSAmIzQzOzQ5NSwxNCBAQCBlbnVtIGxydXZlY19mbGFncyB7XG4gICogZm9saW8tXHUwMDNlZmxhZ3MsIG1hc2tlZCBieSBMUlVfUkVGU19NQVNLLlxuICAqL1xuICNkZWZpbmUgTUFYX05SX1RJRVJTXHRcdDRVXG4mIzQzOyNkZWZpbmUgTFJVX1RJRVJfTUlOXHRcdDBVXG4mIzQzOyNkZWZpbmUgTFJVX1RJRVJfTUFYXHRcdChNQVhfTlJfVElFUlMgLSAxKVxuIFxuICNpZm5kZWYgX19HRU5FUkFUSU5HX0JPVU5EU19IXG4gXG4gI2RlZmluZSBMUlVfR0VOX01BU0tcdFx0KChCSVQoTFJVX0dFTl9XSURUSCkgLSAxKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRilcbiAjZGVmaW5lIExSVV9SRUZTX01BU0tcdFx0KChCSVQoTFJVX1JFRlNfV0lEVEgpIC0gMSkgXHUwMDNjXHUwMDNjIExSVV9SRUZTX1BHT0ZGKVxuJiM0MzsjZGVmaW5lIExSVV9SRUZTX01BWFx0XHRCSVQoTFJVX1JFRlNfV0lEVEgpXG4gXG4gLypcbiAgKiBGb3IgZm9saW9zIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycyxcbmRpZmYgLS1naXQgYS9tbS9mb2xpby5jIGIvbW0vZm9saW8uY1xuaW5kZXggNTBhNmRiZTU1OTk4ZS4uNDdhNDM3ZTBmN2ZkZSAxMDA2NDRcbi0tLSBhL21tL2ZvbGlvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2ZvbGlvLmNcbkBAIC0zNTQsMjYgJiM0MzszNTQsMjggQEAgc3RhdGljIHZvaWQgX19scnVfY2FjaGVfYWN0aXZhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiBcbiBzdGF0aWMgdm9pZCBscnVfZ2VuX2luY19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuJiM0MztcdGludCByZWZzO1xuIFxuIFx0aWYgKGZvbGlvX3Rlc3RfdW5ldmljdGFibGUoZm9saW8pKVxuIFx0XHRyZXR1cm47XG4gXG4gXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi9cbi1cdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSkge1xuLVx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XG4mIzQzO1x0aWYgKCFmb2xpb19scnVfcmVmcyhmb2xpbykpIHtcbiYjNDM7XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbiBcdGRvIHtcbi1cdFx0aWYgKChvbGRfZmxhZ3MgXHUwMDI2IExSVV9SRUZTX01BU0spID09IExSVV9SRUZTX01BU0spIHtcbiYjNDM7XHRcdG5ld19mbGFncyA9IG9sZF9mbGFncztcbiYjNDM7XHRcdHJlZnMgPSBscnVfZ2V0X3JlZnNfZmxhZ3Mob2xkX2ZsYWdzKTtcbiYjNDM7XHRcdGlmIChyZWZzID09IExSVV9SRUZTX01BWCkge1xuIFx0XHRcdGlmICghZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSlcbiBcdFx0XHRcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcbiBcdFx0XHRyZXR1cm47XG4gXHRcdH1cbi1cbi1cdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzICYjNDM7IEJJVChMUlVfUkVGU19QR09GRik7XG4tXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiYjNDM7XHRcdGxydV9zZXRfcmVmc19mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIHJlZnMgJiM0MzsgMSk7XG4mIzQzO1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5AQCAtMzg1LDcgJiM0MzszODcsOCBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGlmIChnZW4gXHUwMDNjIDApXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuLVx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUyB8IEJJVChQR193b3JraW5nc2V0KSwgMCk7XG4mIzQzO1x0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbiYjNDM7XHRmb2xpb19jbGVhcl93b3JraW5nc2V0KGZvbGlvKTtcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdHNlcSA9IFJFQURfT05DRShmb2xpb19scnV2ZWMoZm9saW8pLVx1MDAzZWxydWdlbi5taW5fc2VxW3R5cGVdKTtcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IGJkMWU3ZTE1NDQyNjUuLmYxN2IyYjJkNjEwNTUgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTE1MjksMjggJiM0MzsxNTI5LDEyIEBAIHZvaWQgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIGxydV9saXN0IGxydSxcbiBcdFx0XHRcdGludCB6aWQsIGxvbmcgbnJfcGFnZXMpXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16O1xuLVx0dW5zaWduZWQgbG9uZyAqbHJ1X3NpemU7XG4tXHRsb25nIHNpemU7XG4gXG4gXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRteiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xuLVx0bHJ1X3NpemUgPSBcdTAwMjZtei1cdTAwM2VscnVfem9uZV9zaXplW3ppZF1bbHJ1XTtcbi1cbi1cdGlmIChucl9wYWdlcyBcdTAwM2MgMClcbi1cdFx0KmxydV9zaXplICYjNDM7PSBucl9wYWdlcztcbi1cbi1cdHNpemUgPSAqbHJ1X3NpemU7XG4tXHRpZiAoV0FSTl9PTkNFKHNpemUgXHUwMDNjIDAsXG4tXHRcdFwmIzM0OyVzKCVwLCAlZCwgJWxkKTogbHJ1X3NpemUgJWxkXFxuXCYjMzQ7LFxuLVx0XHRfX2Z1bmNfXywgbHJ1dmVjLCBscnUsIG5yX3BhZ2VzLCBzaXplKSkge1xuLVx0XHRWTV9CVUdfT04oMSk7XG4tXHRcdCpscnVfc2l6ZSA9IDA7XG4tXHR9XG4tXG4tXHRpZiAobnJfcGFnZXMgXHUwMDNlIDApXG4tXHRcdCpscnVfc2l6ZSAmIzQzOz0gbnJfcGFnZXM7XG4mIzQzO1x0bXotXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6aWRdW2xydV0gJiM0Mzs9IG5yX3BhZ2VzO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmNcbmluZGV4IDE1YjQ1ODMyYmNmYTcuLmEzNjlkMGM5NWMzODYgMTAwNjQ0XG4tLS0gYS9tbS9taWdyYXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21pZ3JhdGUuY1xuQEAgLTc3Niw4ICYjNDM7Nzc2LDkgQEAgdm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0aW50IGNwdXBpZDtcbiBcbi1cdGlmIChmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKVxuLVx0XHRmb2xpb19zZXRfcmVmZXJlbmNlZChuZXdmb2xpbyk7XG4mIzQzO1x0LyogQ29weSB0aGUgcmVmZXJlbmNlIHN0YXRlLCBpbmNsdWRpbmcgUEdfcmVmZXJlbmNlZCAqL1xuJiM0MztcdGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMobmV3Zm9saW8sIGZvbGlvKTtcbiYjNDM7XG4gXHRpZiAoZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpXG4gXHRcdGZvbGlvX21hcmtfdXB0b2RhdGUobmV3Zm9saW8pO1xuIFx0aWYgKGZvbGlvX3Rlc3RfY2xlYXJfYWN0aXZlKGZvbGlvKSkge1xuQEAgLTgwNyw3ICYjNDM7ODA4LDYgQEAgdm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRpZiAoZm9saW9fdGVzdF9pZGxlKGZvbGlvKSlcbiBcdFx0Zm9saW9fc2V0X2lkbGUobmV3Zm9saW8pO1xuIFxuLVx0Zm9saW9fbWlncmF0ZV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7XG4gXHQvKlxuIFx0ICogQ29weSBOVU1BIGluZm9ybWF0aW9uIHRvIHRoZSBuZXcgcGFnZSwgdG8gcHJldmVudCBvdmVyLWVhZ2VyXG4gXHQgKiBmdXR1cmUgbWlncmF0aW9ucyBvZiB0aGlzIHNhbWUgcGFnZS5cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCAyNDVmNjhjNzViMjg5Li40MGQzZjFiNDhhNzRjIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtODYzLDE5ICYjNDM7ODYzLDIyIEBAIHN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiBcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpIHtcbiBcdFx0LyogQWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuICovXG4gXHRcdGlmIChpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIHZtYV9mbGFncykpIHtcbi1cdFx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfd29ya2luZ3NldCkpO1xuJiM0MztcdFx0XHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XG4mIzQzO1x0XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHRcdH1cbiBcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuJiM0MztcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuIFx0LyogUHJvbW90ZSBvbiBzZWNvbmQgYWNjZXNzICovXG4tXHRpZiAoZm9saW9fbHJ1X3JlZnMoZm9saW8pIFx1MDAzZSAxKVxuLVx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfd29ya2luZ3NldCkpO1xuLVx0ZWxzZVxuJiM0MztcdGlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgXHUwMDNlIDEpIHtcbiYjNDM7XHRcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcbiYjNDM7XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4mIzQzO1x0fSBlbHNlIHtcbiBcdFx0Zm9saW9fbWFya19hY2Nlc3NlZChmb2xpbyk7XG4mIzQzO1x0fVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuICNlbHNlXG5AQCAtMzIyMCw4ICYjNDM7MzIyMyw4IEBAIHN0cnVjdCBjdHJsX3BvcyB7XG4gXHRpbnQgZ2FpbjtcbiB9O1xuIFxuLXN0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXIsIGludCBnYWluLFxuLVx0XHRcdCAgc3RydWN0IGN0cmxfcG9zICpwb3MpXG4mIzQzO3N0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXJfbWluLFxuJiM0MztcdFx0XHQgIGludCB0aWVyX21heCwgaW50IGdhaW4sIHN0cnVjdCBjdHJsX3BvcyAqcG9zKVxuIHtcbiBcdGludCBpO1xuIFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5AQCAtMzIzMCw3ICYjNDM7MzIzMyw3IEBAIHN0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXIsIGludCBnYWluLFxuIFx0cG9zLVx1MDAzZWdhaW4gPSBnYWluO1xuIFx0cG9zLVx1MDAzZXJlZmF1bHRlZCA9IHBvcy1cdTAwM2V0b3RhbCA9IDA7XG4gXG4tXHRmb3IgKGkgPSB0aWVyICUgTUFYX05SX1RJRVJTOyBpIFx1MDAzYz0gbWluKHRpZXIsIE1BWF9OUl9USUVSUyAtIDEpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdGZvciAoaSA9IHRpZXJfbWluOyBpIFx1MDAzYz0gdGllcl9tYXg7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHBvcy1cdTAwM2VyZWZhdWx0ZWQgJiM0Mzs9IGxydWdlbi1cdTAwM2VhdmdfcmVmYXVsdGVkW3R5cGVdW2ldICYjNDM7XG4gXHRcdFx0XHQgIGF0b21pY19sb25nX3JlYWQoXHUwMDI2bHJ1Z2VuLVx1MDAzZXJlZmF1bHRlZFtoaXN0XVt0eXBlXVtpXSk7XG4gXHRcdHBvcy1cdTAwM2V0b3RhbCAmIzQzOz0gbHJ1Z2VuLVx1MDAzZWF2Z190b3RhbFt0eXBlXVtpXSAmIzQzO1xuQEAgLTMyOTEsMTEgJiM0MzszMjk0LDExIEBAIHN0YXRpYyBib29sIHBvc2l0aXZlX2N0cmxfZXJyKHN0cnVjdCBjdHJsX3BvcyAqc3AsIHN0cnVjdCBjdHJsX3BvcyAqcHYpXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiBcbiAvKiBwcm9tb3RlIHBhZ2VzIGFjY2Vzc2VkIHRocm91Z2ggcGFnZSB0YWJsZXMgKi9cbi1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiYjNDM7c3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBpbnQgKnR5cGUsXG4mIzQzO1x0XHRcdCAgICBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4tXG4tXHRWTV9XQVJOX09OX09OQ0UoZ2VuIFx1MDAzZT0gTUFYX05SX0dFTlMpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4mIzQzO1x0aW50IG9sZF9nZW47XG4gXG4gXHQvKlxuIFx0ICogU2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTLCBhbmQgYWN0aXZhdGUgZmlsZS1iYWNrZWRcbkBAIC0zMzA0LDMxICYjNDM7MzMwNywzNSBAQCBzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYVxuIFx0ICovXG4gXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pIFx1MDAyNlx1MDAyNlxuIFx0ICAgICFpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIHZtYV9mbGFncykpIHtcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuJiM0MztcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcbiBcdFx0cmV0dXJuIC0xO1xuIFx0fVxuIFxuIFx0ZG8ge1xuJiM0MztcdFx0b2xkX2dlbiA9IGxydV9nZXRfZ2VuX2ZsYWdzKG9sZF9mbGFncyk7XG4mIzQzO1x0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XG4mIzQzO1xuIFx0XHQvKiBscnVfZ2VuX2RlbF9mb2xpbygpIGhhcyBpc29sYXRlZCB0aGlzIHBhZ2U/ICovXG4tXHRcdGlmICghKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSlcbi1cdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHRpZiAob2xkX2dlbiBcdTAwM2MgMClcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXG4tXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncyBcdTAwMjYgfihMUlVfR0VOX01BU0sgfCBMUlVfUkVGU19GTEFHUyk7XG4tXHRcdG5ld19mbGFncyB8PSAoKGdlbiAmIzQzOyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGKSB8IEJJVChQR193b3JraW5nc2V0KTtcbi1cdH0gd2hpbGUgKCF0cnlfY21weGNoZyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuJiM0MztcdFx0bHJ1X3NldF9nZW5fZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCBuZXdfZ2VuKTtcbiYjNDM7XHRcdGxydV9zZXRfcmVmc19mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIDApO1xuJiM0MztcdFx0bmV3X2ZsYWdzIHw9IEJJVChQR193b3JraW5nc2V0KTtcbiYjNDM7XHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuIFxuLVx0cmV0dXJuICgob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4mIzQzO1x0KnR5cGUgPSBmb2xpb19mbGFnc19pc19maWxlX2xydShcdTAwMjZvbGRfZmxhZ3MpO1xuJiM0MztcdHJldHVybiBvbGRfZ2VuO1xuIH1cbiBcbiBzdGF0aWMgaW50IF9fZm9saW9faW5jX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX2dlbiwgYm9vbCAqaW5jcmVhc2VkKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbiBcdGludCBuZXdfZ2VuO1xuIFxuLVx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCEob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spLCBmb2xpbyk7XG4tXG4gXHRkbyB7XG4tXHRcdG5ld19nZW4gPSAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuJiM0MztcdFx0bmV3X2dlbiA9IGxydV9nZXRfZ2VuX2ZsYWdzKG9sZF9mbGFncyk7XG4mIzQzO1xuIFx0XHQvKiBmb2xpb191cGRhdGVfZ2VuKCkgaGFzIHByb21vdGVkIHRoaXMgcGFnZT8gKi9cbiBcdFx0aWYgKG5ld19nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBuZXdfZ2VuICE9IG9sZF9nZW4pIHtcbiBcdFx0XHRpZiAoaW5jcmVhc2VkKVxuQEAgLTMzMzYsMTEgJiM0MzszMzQzLDEyIEBAIHN0YXRpYyBpbnQgX19mb2xpb19pbmNfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfZ2VuLCBib29sICppbmNyZWFzZWQpXG4gXHRcdFx0cmV0dXJuIG5ld19nZW47XG4gXHRcdH1cbiBcbiYjNDM7XHRcdG5ld19mbGFncyA9IG9sZF9mbGFncztcbiBcdFx0bmV3X2dlbiA9IChvbGRfZ2VuICYjNDM7IDEpICUgTUFYX05SX0dFTlM7XG4gXG4tXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncyBcdTAwMjYgfihMUlVfR0VOX01BU0sgfCBMUlVfUkVGU19GTEFHUyk7XG4tXHRcdG5ld19mbGFncyB8PSAobmV3X2dlbiAmIzQzOyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuLVx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4mIzQzO1x0XHRscnVfc2V0X2dlbl9mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIG5ld19nZW4pO1xuJiM0MztcdFx0bHJ1X3NldF9yZWZzX2ZsYWdzKFx1MDAyNm5ld19mbGFncywgMCk7XG4mIzQzO1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiBcbiBcdGlmIChpbmNyZWFzZWQpXG4gXHRcdCppbmNyZWFzZWQgPSB0cnVlO1xuQEAgLTMzNjIsOSAmIzQzOzMzNzAsOCBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIH1cbiBcbiBzdGF0aWMgdm9pZCB1cGRhdGVfYmF0Y2hfc2l6ZShzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLVx0XHRcdCAgICAgIGludCBvbGRfZ2VuLCBpbnQgbmV3X2dlbilcbiYjNDM7XHRcdFx0ICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuLCBpbnQgdHlwZSlcbiB7XG4tXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbiBcdGludCB6b25lID0gZm9saW9fem9uZW51bShmb2xpbyk7XG4gXHRpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXG5AQCAtMzU1MSwyMiAmIzQzOzM1NTgsMjQgQEAgc3RhdGljIGJvb2wgc3VpdGFibGVfdG9fc2NhbihpbnQgdG90YWwsIGludCB5b3VuZylcbiB9XG4gXG4gc3RhdGljIHZvaWQgd2Fsa191cGRhdGVfZm9saW8oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBib29sIGRpcnR5KVxuJiM0MztcdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIGRpcnR5KVxuIHtcbi1cdGludCBvbGRfZ2VuO1xuJiM0MztcdGludCBuZXdfZ2VuLCBvbGRfZ2VuLCB0eXBlO1xuIFxuIFx0aWYgKCFmb2xpbylcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdG5ld19nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKFJFQURfT05DRShscnV2ZWMtXHUwMDNlbHJ1Z2VuLm1heF9zZXEpKTtcbiYjNDM7XG4gXHRpZiAoZGlydHkgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHQgICAgICAhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSlcbiBcdFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG4gXG4gXHRpZiAod2Fsaykge1xuLVx0XHRvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgXHUwMDI2dm1hLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRcdG9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuLCBcdTAwMjZ0eXBlLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpO1xuIFx0XHRpZiAob2xkX2dlbiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG9sZF9nZW4gIT0gbmV3X2dlbilcbi1cdFx0XHR1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XG4mIzQzO1x0XHRcdHVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuLCB0eXBlKTtcbiBcdH0gZWxzZSBpZiAobHJ1X2dlbl9zZXRfcmVmcyhmb2xpbywgXHUwMDI2dm1hLVx1MDAzZWZsYWdzKSkge1xuIFx0XHRvbGRfZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7XG4gXHRcdGlmIChvbGRfZ2VuIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgb2xkX2dlbiAhPSBuZXdfZ2VuKVxuQEAgLTM1ODgsOCAmIzQzOzM1OTcsNiBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVx1MDAzZXByaXZhdGU7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay1cdTAwM2VscnV2ZWMpO1xuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdCh3YWxrLVx1MDAzZWxydXZlYyk7XG4tXHRERUZJTkVfTUFYX1NFUSh3YWxrLVx1MDAzZWxydXZlYyk7XG4tXHRpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcbiBcdHVuc2lnbmVkIGludCBucjtcbiBcdHBtZF90IHBtZHZhbDtcbiBcbkBAIC0zNjQwLDcgJiM0MzszNjQ3LDcgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChsYXN0ICE9IGZvbGlvKSB7XG4tXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuJiM0MztcdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLVx1MDAzZXZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC0zNjUzLDcgJiM0MzszNjYwLDcgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdHdhbGstXHUwMDNlbW1fc3RhdHNbTU1fTEVBRl9ZT1VOR10gJiM0Mzs9IG5yO1xuIFx0fVxuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuJiM0MztcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCB3YWxrLVx1MDAzZWxydXZlYywgbGFzdCwgZGlydHkpO1xuIFx0bGFzdCA9IE5VTEw7XG4gXG4gXHRpZiAoaSBcdTAwM2MgUFRSU19QRVJfUFRFIFx1MDAyNlx1MDAyNiBnZXRfbmV4dF92bWEoUE1EX01BU0ssIFBBR0VfU0laRSwgYXJncywgXHUwMDI2c3RhcnQsIFx1MDAyNmVuZCkpXG5AQCAtMzY3Niw4ICYjNDM7MzY4Myw2IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhXG4gXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cdTAwM2Vwcml2YXRlO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKHdhbGstXHUwMDNlbHJ1dmVjKTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQod2Fsay1cdTAwM2VscnV2ZWMpO1xuLVx0REVGSU5FX01BWF9TRVEod2Fsay1cdTAwM2VscnV2ZWMpO1xuLVx0aW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0UocHVkX2xlYWYoKnB1ZCkpO1xuIFxuQEAgLTM3MzEsNyAmIzQzOzM3MzYsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0XHRcdGdvdG8gbmV4dDtcbiBcbiBcdFx0aWYgKGxhc3QgIT0gZm9saW8pIHtcbi1cdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuJiM0MztcdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIHdhbGstXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXG4gXHRcdFx0bGFzdCA9IGZvbGlvO1xuIFx0XHRcdGRpcnR5ID0gZmFsc2U7XG5AQCAtMzc0NSw3ICYjNDM7Mzc1MCw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhXG4gXHRcdGkgPSBpIFx1MDAzZSBNSU5fTFJVX0JBVENIID8gMCA6IGZpbmRfbmV4dF9iaXQoYml0bWFwLCBNSU5fTFJVX0JBVENILCBpKSAmIzQzOyAxO1xuIFx0fSB3aGlsZSAoaSBcdTAwM2M9IE1JTl9MUlVfQkFUQ0gpO1xuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbiYjNDM7XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIHdhbGstXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXG4gXHRsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTtcbiBcdHNwaW5fdW5sb2NrKHB0bCk7XG5AQCAtNDM1MSw4ICYjNDM7NDM1Niw2IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBmb2xpb19wZ2RhdChmb2xpbyk7XG4gXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGU7XG4tXHR1bnNpZ25lZCBsb25nIG1heF9zZXE7XG4tXHRpbnQgZ2VuO1xuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChwdm13LVx1MDAzZXB0bCk7XG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF9scnUoZm9saW8pLCBmb2xpbyk7XG5AQCAtNDM4OSw4ICYjNDM7NDM5Miw2IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcbiBcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XG4gXHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpO1xuLVx0bWF4X3NlcSA9IFJFQURfT05DRSgobHJ1dmVjKS1cdTAwM2VscnVnZW4ubWF4X3NlcSk7XG4tXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xuIFx0bW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcbiBcbiBcdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XG5AQCAtNDQyMiw3ICYjNDM7NDQyMyw3IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKGxhc3QgIT0gZm9saW8pIHtcbi1cdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuJiM0MztcdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxydXZlYywgbGFzdCwgZGlydHkpO1xuIFxuIFx0XHRcdGxhc3QgPSBmb2xpbztcbiBcdFx0XHRkaXJ0eSA9IGZhbHNlO1xuQEAgLTQ0MzQsMTMgJiM0Mzs0NDM1LDE0IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdFx0eW91bmcgJiM0Mzs9IG5yO1xuIFx0fVxuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbiYjNDM7XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxydXZlYywgbGFzdCwgZGlydHkpO1xuIFxuIFx0bGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7XG4gXG4gXHQvKiBmZWVkYmFjayBmcm9tIHJtYXAgd2Fsa2VycyB0byBwYWdlIHRhYmxlIHdhbGtlcnMgKi9cbiBcdGlmIChtbV9zdGF0ZSBcdTAwMjZcdTAwMjYgc3VpdGFibGVfdG9fc2NhbihpLCB5b3VuZykpXG4tXHRcdHVwZGF0ZV9ibG9vbV9maWx0ZXIobW1fc3RhdGUsIG1heF9zZXEsIHB2bXctXHUwMDNlcG1kKTtcbiYjNDM7XHRcdHVwZGF0ZV9ibG9vbV9maWx0ZXIobW1fc3RhdGUsIFJFQURfT05DRShscnV2ZWMtXHUwMDNlbHJ1Z2VuLm1heF9zZXEpLFxuJiM0MztcdFx0XHRcdCAgICBwdm13LVx1MDAzZXBtZCk7XG4gXG4gXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4gXG5AQCAtNDc4NSw3ICYjNDM7NDc4Nyw3IEBAIHN0YXRpYyBib29sIGlzb2xhdGVfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2NhXG4gXG4gXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi9cbiBcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSlcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCAwKTtcbiYjNDM7XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4gXG4gXHRzdWNjZXNzID0gbHJ1X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7XG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIXN1Y2Nlc3MsIGZvbGlvKTtcbkBAIC00ODc4LDkgJiM0Mzs0ODgwLDkgQEAgc3RhdGljIGludCBnZXRfdGllcl9pZHgoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSlcbiBcdCAqIFRoaXMgdmFsdWUgaXMgY2hvc2VuIGJlY2F1c2UgYW55IG90aGVyIHRpZXIgd291bGQgaGF2ZSBhdCBsZWFzdCB0d2ljZVxuIFx0ICogYXMgbWFueSByZWZhdWx0cyBhcyB0aGUgZmlyc3QgdGllci5cbiBcdCAqL1xuLVx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIDAsIDIsIFx1MDAyNnNwKTtcbi1cdGZvciAodGllciA9IDE7IHRpZXIgXHUwMDNjIE1BWF9OUl9USUVSUzsgdGllciYjNDM7JiM0MzspIHtcbi1cdFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIDMsIFx1MDAyNnB2KTtcbiYjNDM7XHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NSU4sIDIsIFx1MDAyNnNwKTtcbiYjNDM7XHRmb3IgKHRpZXIgPSBMUlVfVElFUl9NSU4gJiM0MzsgMTsgdGllciBcdTAwM2M9IExSVV9USUVSX01BWDsgdGllciYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0aWVyLCB0aWVyLCAzLCBcdTAwMjZwdik7XG4gXHRcdGlmICghcG9zaXRpdmVfY3RybF9lcnIoXHUwMDI2c3AsIFx1MDAyNnB2KSlcbiBcdFx0XHRicmVhaztcbiBcdH1cbkBAIC00OTAxLDggJiM0Mzs0OTAzLDEwIEBAIHN0YXRpYyBpbnQgZ2V0X3R5cGVfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxuIFx0ICogQ29tcGFyZSB0aGUgc3VtIG9mIGFsbCB0aWVycyBvZiBhbm9uIHdpdGggdGhhdCBvZiBmaWxlIHRvIGRldGVybWluZVxuIFx0ICogd2hpY2ggdHlwZSB0byBzY2FuLlxuIFx0ICovXG4tXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBNQVhfTlJfVElFUlMsIHN3YXBwaW5lc3MsIFx1MDAyNnNwKTtcbi1cdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIE1BWF9OUl9USUVSUywgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCBcdTAwMjZwdik7XG4mIzQzO1x0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fQU5PTiwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NQVgsXG4mIzQzO1x0XHQgICAgICBzd2FwcGluZXNzLCBcdTAwMjZzcCk7XG4mIzQzO1x0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NQVgsXG4mIzQzO1x0XHQgICAgICBNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3MsIFx1MDAyNnB2KTtcbiBcbiBcdHJldHVybiBwb3NpdGl2ZV9jdHJsX2VycihcdTAwMjZzcCwgXHUwMDI2cHYpO1xuIH1cbkBAIC01MDE3LDggJiM0Mzs1MDIxLDEwIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHR9XG4gXG4gXHRcdC8qIGRvbiYjMzk7dCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqL1xuLVx0XHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pXG4tXHRcdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX2FjdGl2ZSkpO1xuJiM0MztcdFx0aWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKSB7XG4mIzQzO1x0XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4mIzQzO1x0XHRcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuIFx0bW92ZV9mb2xpb3NfdG9fbHJ1KFx1MDAyNmxpc3QpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjIzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xydV9nZW5fbG9va19hcm91bmQmIzM0OywKICAgICYjMzQ7Zm9saW9fbWlncmF0ZV9mbGFncyYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZSYjMzQ7LAogICAgJiMzNDt3YWxrX3B0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDt3YWxrX3BtZF9yYW5nZV9sb2NrZWQmIzM0OywKICAgICYjMzQ7Zm9saW9fdXBkYXRlX2dlbiYjMzQ7LAogICAgJiMzNDtldmljdF9mb2xpb3MmIzM0OywKICAgICYjMzQ7aXNvbGF0ZV9mb2xpbyYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX2luY19yZWZzJiMzNDssCiAgICAmIzM0O2xydV9nZW5fY2xlYXJfcmVmcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBhY3Jvc3MgbW0vdm1zY2FuLmMsIG1tL2ZvbGlvLmMsIG1tL21lbWNvbnRyb2wuYywgYW5kIG1tL21pZ3JhdGUuYywgYWx0ZXJpbmcgTXVsdGktR2VuIExSVSAoTUdMUlUpIHJlZmVyZW5jZSB0cmFja2luZywgZm9saW8gZmxhZyBtYW5pcHVsYXRpb24sIHRpZXIgY2FsY3VsYXRpb25zLCBwYWdlIGV2aWN0aW9uLCBhbmQgbWVtY2cgTFJVIHpvbmUgYWNjb3VudGluZy4gSXQgYWxzbyBhZGRzIHNldmVyYWwgVk1fV0FSTl9PTl9PTkNFIGFzc2VydGlvbnMgYW5kIGNoYW5nZXMgc3luY2hyb25pemF0aW9uL2FyaXRobWV0aWMgbG9naWMuIFRoZXNlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlM2NiYmM3NmUxYzk2NmM3NmZlNjIxMjk5YTMyZDE3YWZhN2U0MDAzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgNiAxNjoyMzo0OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKaW5kZXggYzc5OTkyNjQzNTU2MC4uMmI2NzY5NDI4NWQwNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKQEAgLTEwMCw3ICYjNDM7MTAwLDcgQEAgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgewogCS8qIEZpZWxkcyB3aGljaCBnZXQgdXBkYXRlZCBvZnRlbiBhdCB0aGUgZW5kLiAqLwogCXN0cnVjdCBscnV2ZWMJCWxydXZlYzsKIAlDQUNIRUxJTkVfUEFERElORyhfcGFkMl8pOwotCXVuc2lnbmVkIGxvbmcJCWxydV96b25lX3NpemVbTUFYX05SX1pPTkVTXVtOUl9MUlVfTElTVFNdOwomIzQzOwlsb25nCQkJbHJ1X3pvbmVfc2l6ZVtNQVhfTlJfWk9ORVNdW05SX0xSVV9MSVNUU107CiAJc3RydWN0IG1lbV9jZ3JvdXBfcmVjbGFpbV9pdGVyCWl0ZXI7CiAKIAkvKgpAQCAtODg3LDEwICYjNDM7ODg3LDE1IEBAIHN0YXRpYyBpbmxpbmUKIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCWVudW0gbHJ1X2xpc3QgbHJ1LCBpbnQgem9uZV9pZHgpCiB7CiYjNDM7CWxvbmcgdmFsOwogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejsKIAogCW16ID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7Ci0JcmV0dXJuIFJFQURfT05DRShtei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7CiYjNDM7CXZhbCA9IFJFQURfT05DRShtei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UodmFsICZsdDsgMCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIHZhbDsKIH0KIAogdm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaAppbmRleCA2MjFjODY1M2Q4ZjdlLi5hYjY5Yjk5MzA4OTNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmgKQEAgLTMwLDYgJiM0MzszMCwxNyBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19pc19maWxlX2xydShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXJldHVybiAhZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1IC0gU2hvdWxkIHRoZSBmb2xpbyBiZSBvbiBhIGZpbGUgTFJVIG9yIGFub24gTFJVPwomIzQzOyAqIEBmbGFnczogVGhlIGZvbGlvJiMzOTtzIGZsYWdzLgomIzQzOyAqCiYjNDM7ICogSnVzdCBsaWtlIGZvbGlvX2lzX2ZpbGVfbHJ1IGJ1dCB0YWtlIHRoZSBmb2xpbyBmbGFncyBkaXJlY3RseSBpbnN0ZWFkLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZsYWdzKQomIzQzO3sKJiM0MzsJcmV0dXJuICF0ZXN0X2JpdChQR19zd2FwYmFja2VkLCBmbGFncyk7CiYjNDM7fQomIzQzOwogc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJCQllbnVtIGxydV9saXN0IGxydSwgZW51bSB6b25lX3R5cGUgemlkLAogCQkJCWxvbmcgbnJfcGFnZXMpCkBAIC0xNDIsMTAgJiM0MzsxNTMsNjYgQEAgc3RhdGljIGlubGluZSBpbnQgbHJ1X3RpZXJfZnJvbV9yZWZzKGludCByZWZzLCBib29sIHdvcmtpbmdzZXQpCiAJcmV0dXJuIHdvcmtpbmdzZXQgPyBNQVhfTlJfVElFUlMgLSAxIDogb3JkZXJfYmFzZV8yKHJlZnMpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzOy8qKgomIzQzOyAqIGxydV9zZXRfZ2VuX2ZsYWdzIC0gU2V0IHRoZSBMUlUgZ2VuZXJhdGlvbiBudW1iZXIgdG8gc3BlY2lmaWVkIGZvbGlvIGZsYWdzLgomIzQzOyAqIEBmbGFnczogcG9pbnRlciB0byB0aGUgZm9saW8gZmxhZ3MKJiM0MzsgKiBAZ2VuOiBnZW5lcmF0aW9uIG51bWJlciwgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfc2V0X2dlbl9mbGFncyh1bnNpZ25lZCBsb25nICpmbGFncywgaW50IGdlbikKJiM0Mzt7CiYjNDM7CUJVSUxEX0JVR19PTihMUlVfR0VOX01BU0sgJmFtcDsgTFJVX1JFRlNfTUFTSyk7CiYjNDM7CVZNX1dBUk5fT05fT05DRShnZW4gJmd0Oz0gTUFYX05SX0dFTlMgfHwgZ2VuICZsdDsgMCk7CiYjNDM7CS8qIFN0b3JlIGdlbiBvZmZzZXQgYnkgMSwgemVybyBtZWFucyB0aGUgZm9saW8gaXMgb2ZmLWxpc3QuICovCiYjNDM7CSpmbGFncyAmYW1wOz0gfkxSVV9HRU5fTUFTSzsKJiM0MzsJKmZsYWdzIHw9IChnZW4gJiM0MzsgMVVMKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBscnVfZ2V0X2dlbl9mbGFncyAtIFJldHVybiB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIGZyb20gZm9saW8gZmxhZ3MuCiYjNDM7ICogQGZsYWdzOiBmb2xpbyBmbGFncwomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLiBSZXR1cm5zCiYjNDM7ICogLTEgaWYgdGhlIGZsYWdzIGluZGljYXRlIHRoZSBmb2xpbyBpcyBvZmYgdGhlIGxpc3QgKGUuZy4sIGlzb2xhdGVkKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGludCBscnVfZ2V0X2dlbl9mbGFncyh1bnNpZ25lZCBsb25nIGZsYWdzKQomIzQzO3sKJiM0MzsJaW50IGdlbiA9ICgoZmxhZ3MgJmFtcDsgTFJVX0dFTl9NQVNLKSAmZ3Q7Jmd0OyBMUlVfR0VOX1BHT0ZGKSAtIDE7CiYjNDM7CiYjNDM7CS8qIEV4Y2x1ZGUgdGhlIGxlZ2FsIC0xIGZyb20gdGhlIHVuc2lnbmVkIE1BWF9OUl9HRU5TIGNvbXBhcmlzb24gKi8KJiM0MzsJVk1fV0FSTl9PTl9PTkNFKGdlbiAhPSAtMSAmYW1wOyZhbXA7IGdlbiAmZ3Q7PSBNQVhfTlJfR0VOUyk7CiYjNDM7CXJldHVybiBnZW47CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGxydV9zZXRfcmVmc19mbGFncyAtIFNldCB0aGUgTFJVIHJlZmVyZW5jZWQgY291bnQgdG8gZm9saW8gZmxhZ3MuCiYjNDM7ICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFncwomIzQzOyAqIEByZWZzOiByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IG51bWJlciwgYmV0d2VlbiAwIGFuZCBMUlVfUkVGU19NQVgsIGluY2x1c2l2ZS4KJiM0MzsgKgomIzQzOyAqIEZvciBNR0xSVSwgUEdfcmVmZXJlbmNlZCBob2xkcyB0aGUgZmlyc3QgcmVmLCBhbmQgdGhlIGV4dHJhIGJpdHMgaG9sZCB0aGUKJiM0MzsgKiByZW1haW5pbmcgcmVmcy4gRm9yIGNsYXNzaWNhbCBMUlUgdGhlIGV4dHJhIGJpdHMgYXJlIG5vdCB1c2VkLCBzbyBpdCBjYW4KJiM0MzsgKiBhbHNvIGJlIHNlZW4gYXMgdGhlIHJlZnMgY291bnQgbmV2ZXIgZXhjZWVkcyAxLiBJbiBib3RoIGNhc2VzLCByZWZzID09IDEKJiM0MzsgKiBtZWFucyBQR19yZWZlcmVuY2VkIGlzIHNldCBhbmQgdGhlIGV4dHJhIGJpdHMgYXJlIHplcm8sIGFuZCByZWZzID09IDAgbWVhbnMKJiM0MzsgKiBQR19yZWZlcmVuY2VkIGFuZCB0aGUgZXh0cmEgYml0cyBhcmUgYWxsIHVuc2V0LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfc2V0X3JlZnNfZmxhZ3ModW5zaWduZWQgbG9uZyAqZmxhZ3MsIHVuc2lnbmVkIGludCByZWZzKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwomIzQzOwlWTV9XQVJOX09OX09OQ0UocmVmcyAmZ3Q7IExSVV9SRUZTX01BWCk7CiYjNDM7CUJVSUxEX0JVR19PTihMUlVfUkVGU19NQVggIT0gKExSVV9SRUZTX01BU0sgJmd0OyZndDsgTFJVX1JFRlNfUEdPRkYpICYjNDM7IDEpOwogCiYjNDM7CSpmbGFncyAmYW1wOz0gfkxSVV9SRUZTX0ZMQUdTOwomIzQzOwlpZiAoIXJlZnMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CSpmbGFncyB8PSAoQklUKFBHX3JlZmVyZW5jZWQpIHwgKChyZWZzIC0gMVVMKSAmbHQ7Jmx0OyBMUlVfUkVGU19QR09GRikpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBscnVfZ2V0X3JlZnNfZmxhZ3MgLSBSZXR1cm4gTFJVIHJlZmVyZW5jZWQgLyBhY2Nlc3MgY291bnQgZnJvbSBmb2xpbyBmbGFncy4KJiM0MzsgKiBAZmxhZ3M6IGZvbGlvIGZsYWdzCiYjNDM7ICoKJiM0MzsgKiBSZWFkcyB0aGUgTFJVIHJlZmVyZW5jZWQgY291bnQgc2V0IGJ5IGxydV9zZXRfcmVmc19mbGFncygpLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGxydV9nZXRfcmVmc19mbGFncyh1bnNpZ25lZCBsb25nIGZsYWdzKQomIzQzO3sKIAlpZiAoIShmbGFncyAmYW1wOyBCSVQoUEdfcmVmZXJlbmNlZCkpKQogCQlyZXR1cm4gMDsKIAkvKgpAQCAtMTU1LDExICYjNDM7MjIyLDI0IEBAIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJcmV0dXJuICgoZmxhZ3MgJmFtcDsgTFJVX1JFRlNfTUFTSykgJmd0OyZndDsgTFJVX1JFRlNfUEdPRkYpICYjNDM7IDE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwomIzQzOwlyZXR1cm4gbHJ1X2dldF9yZWZzX2ZsYWdzKFJFQURfT05DRSgqY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKSk7CiYjNDM7fQogCi0JcmV0dXJuICgoZmxhZ3MgJmFtcDsgTFJVX0dFTl9NQVNLKSAmZ3Q7Jmd0OyBMUlVfR0VOX1BHT0ZGKSAtIDE7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgcmVmcykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCW5ld19mbGFncyA9IG9sZF9mbGFnczsKJiM0MzsJCWxydV9zZXRfcmVmc19mbGFncygmYW1wO25ld19mbGFncywgcmVmcyk7CiYjNDM7CX0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksICZhbXA7b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X2dlbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIGxydV9nZXRfZ2VuX2ZsYWdzKFJFQURfT05DRSgqY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2lzX2FjdGl2ZShjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBnZW4pCkBAIC0yNzAsNyAmIzQzOzM1MCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2FkZF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpOwogCWZsYWdzID0gKGdlbiAmIzQzOyAxVUwpICZsdDsmbHQ7IExSVV9HRU5fUEdPRkY7CiAJLyogc2VlIHRoZSBjb21tZW50IG9uIE1JTl9OUl9HRU5TIGFib3V0IFBHX2FjdGl2ZSAqLwotCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX0dFTl9NQVNLIHwgQklUKFBHX2FjdGl2ZSksIGZsYWdzKTsKJiM0MzsJc2V0X21hc2tfYml0cyhmb2xpb19mbGFncyhmb2xpbywgMCksIExSVV9HRU5fTUFTSyB8IEJJVChQR19hY3RpdmUpLCBmbGFncyk7CiAKIAlscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIC0xLCBnZW4pOwogCS8qIGZvciBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoKSAqLwpAQCAtMjk1LDcgJiM0MzszNzUsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCiAJLyogZm9yIGZvbGlvX21pZ3JhdGVfZmxhZ3MoKSAqLwogCWZsYWdzID0gIXJlY2xhaW1pbmcgJmFtcDsmYW1wOyBscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIGdlbikgPyBCSVQoUEdfYWN0aXZlKSA6IDA7Ci0JZmxhZ3MgPSBzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9HRU5fTUFTSywgZmxhZ3MpOwomIzQzOwlmbGFncyA9IHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0ssIGZsYWdzKTsKIAlnZW4gPSAoKGZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwogCiAJbHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBnZW4sIC0xKTsKQEAgLTMwNCwxMSAmIzQzOzM4NCwxOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZCkKJiM0MzsvKioKJiM0MzsgKiBmb2xpb19taWdyYXRlX2xydV9yZWZzIC0gY29weSB0aGUgcmVmZXJlbmNlIHN0YXRlIHRvIGEgbmV3IGZvbGlvCiYjNDM7ICogQG5ldzogdGhlIGRlc3RpbmF0aW9uIGZvbGlvCiYjNDM7ICogQG9sZDogdGhlIHNvdXJjZSBmb2xpbwomIzQzOyAqCiYjNDM7ICogVHJhbnNmZXIgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBAbmV3IGR1cmluZyBtaWdyYXRpb246IHRoZSBNR0xSVQomIzQzOyAqIHJlZnMgY291bnQsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkLCBvciBqdXN0IFBHX3JlZmVyZW5jZWQgZm9yIHRoZQomIzQzOyAqIGFjdGl2ZS9pbmFjdGl2ZSBMUlUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKQogewotCXVuc2lnbmVkIGxvbmcgcmVmcyA9IFJFQURfT05DRShvbGQtJmd0O2ZsYWdzLmYpICZhbXA7IExSVV9SRUZTX01BU0s7Ci0KLQlzZXRfbWFza19iaXRzKCZhbXA7bmV3LSZndDtmbGFncy5mLCBMUlVfUkVGU19NQVNLLCByZWZzKTsKJiM0MzsJQlVJTERfQlVHX09OKExSVV9SRUZTX01BU0sgJmFtcDsgQklUKFBHX3JlZmVyZW5jZWQpKTsKJiM0MzsJZm9saW9fc2V0X2xydV9yZWZzKG5ldywgZm9saW9fbHJ1X3JlZnMob2xkKSk7CiB9CiAjZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi8KIApAQCAtMzM3LDkgJiM0Mzs0MjUsMTAgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZCkKIHsKLQomIzQzOwlpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKG9sZCkpCiYjNDM7CQlmb2xpb19zZXRfcmVmZXJlbmNlZChuZXcpOwogfQogI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCmluZGV4IDg0ZTIzN2YyYzE3ZGIuLmM5YWU3OTkxYThiMjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaApAQCAtNDk1LDExICYjNDM7NDk1LDE0IEBAIGVudW0gbHJ1dmVjX2ZsYWdzIHsKICAqIGZvbGlvLSZndDtmbGFncywgbWFza2VkIGJ5IExSVV9SRUZTX01BU0suCiAgKi8KICNkZWZpbmUgTUFYX05SX1RJRVJTCQk0VQomIzQzOyNkZWZpbmUgTFJVX1RJRVJfTUlOCQkwVQomIzQzOyNkZWZpbmUgTFJVX1RJRVJfTUFYCQkoTUFYX05SX1RJRVJTIC0gMSkKIAogI2lmbmRlZiBfX0dFTkVSQVRJTkdfQk9VTkRTX0gKIAogI2RlZmluZSBMUlVfR0VOX01BU0sJCSgoQklUKExSVV9HRU5fV0lEVEgpIC0gMSkgJmx0OyZsdDsgTFJVX0dFTl9QR09GRikKICNkZWZpbmUgTFJVX1JFRlNfTUFTSwkJKChCSVQoTFJVX1JFRlNfV0lEVEgpIC0gMSkgJmx0OyZsdDsgTFJVX1JFRlNfUEdPRkYpCiYjNDM7I2RlZmluZSBMUlVfUkVGU19NQVgJCUJJVChMUlVfUkVGU19XSURUSCkKIAogLyoKICAqIEZvciBmb2xpb3MgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzLApkaWZmIC0tZ2l0IGEvbW0vZm9saW8uYyBiL21tL2ZvbGlvLmMKaW5kZXggNTBhNmRiZTU1OTk4ZS4uNDdhNDM3ZTBmN2ZkZSAxMDA2NDQKLS0tIGEvbW0vZm9saW8uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9mb2xpby5jCkBAIC0zNTQsMjYgJiM0MzszNTQsMjggQEAgc3RhdGljIHZvaWQgX19scnVfY2FjaGVfYWN0aXZhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykKIAogc3RhdGljIHZvaWQgbHJ1X2dlbl9pbmNfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewotCXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwomIzQzOwl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpOwomIzQzOwlpbnQgcmVmczsKIAogCWlmIChmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSkKIAkJcmV0dXJuOwogCiAJLyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovCi0JaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKSB7Ci0JCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTsKJiM0MzsJaWYgKCFmb2xpb19scnVfcmVmcyhmb2xpbykpIHsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7CiAJCXJldHVybjsKIAl9CiAKIAlkbyB7Ci0JCWlmICgob2xkX2ZsYWdzICZhbXA7IExSVV9SRUZTX01BU0spID09IExSVV9SRUZTX01BU0spIHsKJiM0MzsJCW5ld19mbGFncyA9IG9sZF9mbGFnczsKJiM0MzsJCXJlZnMgPSBscnVfZ2V0X3JlZnNfZmxhZ3Mob2xkX2ZsYWdzKTsKJiM0MzsJCWlmIChyZWZzID09IExSVV9SRUZTX01BWCkgewogCQkJaWYgKCFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKQogCQkJCWZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTsKIAkJCXJldHVybjsKIAkJfQotCi0JCW5ld19mbGFncyA9IG9sZF9mbGFncyAmIzQzOyBCSVQoTFJVX1JFRlNfUEdPRkYpOwotCX0gd2hpbGUgKCF0cnlfY21weGNoZygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiYjNDM7CQlscnVfc2V0X3JlZnNfZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIHJlZnMgJiM0MzsgMSk7CiYjNDM7CX0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksICZhbXA7b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTsKIH0KIAogc3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pCkBAIC0zODUsNyAmIzQzOzM4Nyw4IEBAIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCWlmIChnZW4gJmx0OyAwKQogCQlyZXR1cm4gdHJ1ZTsKIAotCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MgfCBCSVQoUEdfd29ya2luZ3NldCksIDApOwomIzQzOwlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwomIzQzOwlmb2xpb19jbGVhcl93b3JraW5nc2V0KGZvbGlvKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlzZXEgPSBSRUFEX09OQ0UoZm9saW9fbHJ1dmVjKGZvbGlvKS0mZ3Q7bHJ1Z2VuLm1pbl9zZXFbdHlwZV0pOwpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IGJkMWU3ZTE1NDQyNjUuLmYxN2IyYjJkNjEwNTUgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTE1MjksMjggJiM0MzsxNTI5LDEyIEBAIHZvaWQgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIGxydV9saXN0IGxydSwKIAkJCQlpbnQgemlkLCBsb25nIG5yX3BhZ2VzKQogewogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejsKLQl1bnNpZ25lZCBsb25nICpscnVfc2l6ZTsKLQlsb25nIHNpemU7CiAKIAlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKQogCQlyZXR1cm47CiAKIAlteiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpOwotCWxydV9zaXplID0gJmFtcDttei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6aWRdW2xydV07Ci0KLQlpZiAobnJfcGFnZXMgJmx0OyAwKQotCQkqbHJ1X3NpemUgJiM0Mzs9IG5yX3BhZ2VzOwotCi0Jc2l6ZSA9ICpscnVfc2l6ZTsKLQlpZiAoV0FSTl9PTkNFKHNpemUgJmx0OyAwLAotCQkmIzM0OyVzKCVwLCAlZCwgJWxkKTogbHJ1X3NpemUgJWxkXG4mIzM0OywKLQkJX19mdW5jX18sIGxydXZlYywgbHJ1LCBucl9wYWdlcywgc2l6ZSkpIHsKLQkJVk1fQlVHX09OKDEpOwotCQkqbHJ1X3NpemUgPSAwOwotCX0KLQotCWlmIChucl9wYWdlcyAmZ3Q7IDApCi0JCSpscnVfc2l6ZSAmIzQzOz0gbnJfcGFnZXM7CiYjNDM7CW16LSZndDtscnVfem9uZV9zaXplW3ppZF1bbHJ1XSAmIzQzOz0gbnJfcGFnZXM7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jCmluZGV4IDE1YjQ1ODMyYmNmYTcuLmEzNjlkMGM5NWMzODYgMTAwNjQ0Ci0tLSBhL21tL21pZ3JhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9taWdyYXRlLmMKQEAgLTc3Niw4ICYjNDM7Nzc2LDkgQEAgdm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJaW50IGNwdXBpZDsKIAotCWlmIChmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKQotCQlmb2xpb19zZXRfcmVmZXJlbmNlZChuZXdmb2xpbyk7CiYjNDM7CS8qIENvcHkgdGhlIHJlZmVyZW5jZSBzdGF0ZSwgaW5jbHVkaW5nIFBHX3JlZmVyZW5jZWQgKi8KJiM0MzsJZm9saW9fbWlncmF0ZV9scnVfcmVmcyhuZXdmb2xpbywgZm9saW8pOwomIzQzOwogCWlmIChmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSkKIAkJZm9saW9fbWFya191cHRvZGF0ZShuZXdmb2xpbyk7CiAJaWYgKGZvbGlvX3Rlc3RfY2xlYXJfYWN0aXZlKGZvbGlvKSkgewpAQCAtODA3LDcgJiM0Mzs4MDgsNiBAQCB2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbykKIAlpZiAoZm9saW9fdGVzdF9pZGxlKGZvbGlvKSkKIAkJZm9saW9fc2V0X2lkbGUobmV3Zm9saW8pOwogCi0JZm9saW9fbWlncmF0ZV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7CiAJLyoKIAkgKiBDb3B5IE5VTUEgaW5mb3JtYXRpb24gdG8gdGhlIG5ldyBwYWdlLCB0byBwcmV2ZW50IG92ZXItZWFnZXIKIAkgKiBmdXR1cmUgbWlncmF0aW9ucyBvZiB0aGlzIHNhbWUgcGFnZS4KZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggMjQ1ZjY4Yzc1YjI4OS4uNDBkM2YxYjQ4YTc0YyAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTg2MywxOSAmIzQzOzg2MywyMiBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpCiAJaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pICZhbXA7JmFtcDsgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpIHsKIAkJLyogQWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuICovCiAJCWlmIChpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIHZtYV9mbGFncykpIHsKLQkJCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7CiYjNDM7CQkJZm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pOwomIzQzOwkJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJfQogCi0JCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKIAkvKiBQcm9tb3RlIG9uIHNlY29uZCBhY2Nlc3MgKi8KLQlpZiAoZm9saW9fbHJ1X3JlZnMoZm9saW8pICZndDsgMSkKLQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTsKLQllbHNlCiYjNDM7CWlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgJmd0OyAxKSB7CiYjNDM7CQlmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7CiYjNDM7CQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwomIzQzOwl9IGVsc2UgewogCQlmb2xpb19tYXJrX2FjY2Vzc2VkKGZvbGlvKTsKJiM0MzsJfQogCXJldHVybiB0cnVlOwogfQogI2Vsc2UKQEAgLTMyMjAsOCAmIzQzOzMyMjMsOCBAQCBzdHJ1Y3QgY3RybF9wb3MgewogCWludCBnYWluOwogfTsKIAotc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllciwgaW50IGdhaW4sCi0JCQkgIHN0cnVjdCBjdHJsX3BvcyAqcG9zKQomIzQzO3N0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXJfbWluLAomIzQzOwkJCSAgaW50IHRpZXJfbWF4LCBpbnQgZ2Fpbiwgc3RydWN0IGN0cmxfcG9zICpwb3MpCiB7CiAJaW50IGk7CiAJc3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9ICZhbXA7bHJ1dmVjLSZndDtscnVnZW47CkBAIC0zMjMwLDcgJiM0MzszMjMzLDcgQEAgc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllciwgaW50IGdhaW4sCiAJcG9zLSZndDtnYWluID0gZ2FpbjsKIAlwb3MtJmd0O3JlZmF1bHRlZCA9IHBvcy0mZ3Q7dG90YWwgPSAwOwogCi0JZm9yIChpID0gdGllciAlIE1BWF9OUl9USUVSUzsgaSAmbHQ7PSBtaW4odGllciwgTUFYX05SX1RJRVJTIC0gMSk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CWZvciAoaSA9IHRpZXJfbWluOyBpICZsdDs9IHRpZXJfbWF4OyBpJiM0MzsmIzQzOykgewogCQlwb3MtJmd0O3JlZmF1bHRlZCAmIzQzOz0gbHJ1Z2VuLSZndDthdmdfcmVmYXVsdGVkW3R5cGVdW2ldICYjNDM7CiAJCQkJICBhdG9taWNfbG9uZ19yZWFkKCZhbXA7bHJ1Z2VuLSZndDtyZWZhdWx0ZWRbaGlzdF1bdHlwZV1baV0pOwogCQlwb3MtJmd0O3RvdGFsICYjNDM7PSBscnVnZW4tJmd0O2F2Z190b3RhbFt0eXBlXVtpXSAmIzQzOwpAQCAtMzI5MSwxMSAmIzQzOzMyOTQsMTEgQEAgc3RhdGljIGJvb2wgcG9zaXRpdmVfY3RybF9lcnIoc3RydWN0IGN0cmxfcG9zICpzcCwgc3RydWN0IGN0cmxfcG9zICpwdikKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qIHByb21vdGUgcGFnZXMgYWNjZXNzZWQgdGhyb3VnaCBwYWdlIHRhYmxlcyAqLwotc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpCiYjNDM7c3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBpbnQgKnR5cGUsCiYjNDM7CQkJICAgIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpCiB7Ci0JdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby0mZ3Q7ZmxhZ3MuZik7Ci0KLQlWTV9XQVJOX09OX09OQ0UoZ2VuICZndDs9IE1BWF9OUl9HRU5TKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTsKJiM0MzsJaW50IG9sZF9nZW47CiAKIAkvKgogCSAqIFNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUywgYW5kIGFjdGl2YXRlIGZpbGUtYmFja2VkCkBAIC0zMzA0LDMxICYjNDM7MzMwNywzNSBAQCBzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYQogCSAqLwogCWlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSAmYW1wOyZhbXA7ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pICZhbXA7JmFtcDsKIAkgICAgIWlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkgewotCQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7CiYjNDM7CQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJZG8gewomIzQzOwkJb2xkX2dlbiA9IGxydV9nZXRfZ2VuX2ZsYWdzKG9sZF9mbGFncyk7CiYjNDM7CQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7CiYjNDM7CiAJCS8qIGxydV9nZW5fZGVsX2ZvbGlvKCkgaGFzIGlzb2xhdGVkIHRoaXMgcGFnZT8gKi8KLQkJaWYgKCEob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykpCi0JCQlyZXR1cm4gLTE7CiYjNDM7CQlpZiAob2xkX2dlbiAmbHQ7IDApCiYjNDM7CQkJYnJlYWs7CiAKLQkJbmV3X2ZsYWdzID0gb2xkX2ZsYWdzICZhbXA7IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpOwotCQluZXdfZmxhZ3MgfD0gKChnZW4gJiM0MzsgMVVMKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGKSB8IEJJVChQR193b3JraW5nc2V0KTsKLQl9IHdoaWxlICghdHJ5X2NtcHhjaGcoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwomIzQzOwkJbHJ1X3NldF9nZW5fZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIG5ld19nZW4pOwomIzQzOwkJbHJ1X3NldF9yZWZzX2ZsYWdzKCZhbXA7bmV3X2ZsYWdzLCAwKTsKJiM0MzsJCW5ld19mbGFncyB8PSBCSVQoUEdfd29ya2luZ3NldCk7CiYjNDM7CX0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksICZhbXA7b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTsKIAotCXJldHVybiAoKG9sZF9mbGFncyAmYW1wOyBMUlVfR0VOX01BU0spICZndDsmZ3Q7IExSVV9HRU5fUEdPRkYpIC0gMTsKJiM0MzsJKnR5cGUgPSBmb2xpb19mbGFnc19pc19maWxlX2xydSgmYW1wO29sZF9mbGFncyk7CiYjNDM7CXJldHVybiBvbGRfZ2VuOwogfQogCiBzdGF0aWMgaW50IF9fZm9saW9faW5jX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX2dlbiwgYm9vbCAqaW5jcmVhc2VkKQogewotCXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwomIzQzOwl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpOwogCWludCBuZXdfZ2VuOwogCi0JVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCEob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSyksIGZvbGlvKTsKLQogCWRvIHsKLQkJbmV3X2dlbiA9ICgob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwomIzQzOwkJbmV3X2dlbiA9IGxydV9nZXRfZ2VuX2ZsYWdzKG9sZF9mbGFncyk7CiYjNDM7CiAJCS8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqLwogCQlpZiAobmV3X2dlbiAmZ3Q7PSAwICZhbXA7JmFtcDsgbmV3X2dlbiAhPSBvbGRfZ2VuKSB7CiAJCQlpZiAoaW5jcmVhc2VkKQpAQCAtMzMzNiwxMSAmIzQzOzMzNDMsMTIgQEAgc3RhdGljIGludCBfX2ZvbGlvX2luY19nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9nZW4sIGJvb2wgKmluY3JlYXNlZCkKIAkJCXJldHVybiBuZXdfZ2VuOwogCQl9CiAKJiM0MzsJCW5ld19mbGFncyA9IG9sZF9mbGFnczsKIAkJbmV3X2dlbiA9IChvbGRfZ2VuICYjNDM7IDEpICUgTUFYX05SX0dFTlM7CiAKLQkJbmV3X2ZsYWdzID0gb2xkX2ZsYWdzICZhbXA7IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpOwotCQluZXdfZmxhZ3MgfD0gKG5ld19nZW4gJiM0MzsgMVVMKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGOwotCX0gd2hpbGUgKCF0cnlfY21weGNoZygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiYjNDM7CQlscnVfc2V0X2dlbl9mbGFncygmYW1wO25ld19mbGFncywgbmV3X2dlbik7CiYjNDM7CQlscnVfc2V0X3JlZnNfZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIDApOwomIzQzOwl9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiAKIAlpZiAoaW5jcmVhc2VkKQogCQkqaW5jcmVhc2VkID0gdHJ1ZTsKQEAgLTMzNjIsOSAmIzQzOzMzNzAsOCBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogfQogCiBzdGF0aWMgdm9pZCB1cGRhdGVfYmF0Y2hfc2l6ZShzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAotCQkJICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuKQomIzQzOwkJCSAgICAgIGludCBvbGRfZ2VuLCBpbnQgbmV3X2dlbiwgaW50IHR5cGUpCiB7Ci0JaW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7CiAJaW50IHpvbmUgPSBmb2xpb196b25lbnVtKGZvbGlvKTsKIAlpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiAKQEAgLTM1NTEsMjIgJiM0MzszNTU4LDI0IEBAIHN0YXRpYyBib29sIHN1aXRhYmxlX3RvX3NjYW4oaW50IHRvdGFsLCBpbnQgeW91bmcpCiB9CiAKIHN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQlzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgYm9vbCBkaXJ0eSkKJiM0MzsJCXN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBkaXJ0eSkKIHsKLQlpbnQgb2xkX2dlbjsKJiM0MzsJaW50IG5ld19nZW4sIG9sZF9nZW4sIHR5cGU7CiAKIAlpZiAoIWZvbGlvKQogCQlyZXR1cm47CiAKJiM0MzsJbmV3X2dlbiA9IGxydV9nZW5fZnJvbV9zZXEoUkVBRF9PTkNFKGxydXZlYy0mZ3Q7bHJ1Z2VuLm1heF9zZXEpKTsKJiM0MzsKIAlpZiAoZGlydHkgJmFtcDsmYW1wOyAhZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgJmFtcDsmYW1wOwogCSAgICAhKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgJmFtcDsmYW1wOyBmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pICZhbXA7JmFtcDsKIAkgICAgICAhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSkKIAkJZm9saW9fbWFya19kaXJ0eShmb2xpbyk7CiAKIAlpZiAod2FsaykgewotCQlvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgJmFtcDt2bWEtJmd0O2ZsYWdzKTsKJiM0MzsJCW9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuLCAmYW1wO3R5cGUsICZhbXA7dm1hLSZndDtmbGFncyk7CiAJCWlmIChvbGRfZ2VuICZndDs9IDAgJmFtcDsmYW1wOyBvbGRfZ2VuICE9IG5ld19nZW4pCi0JCQl1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7CiYjNDM7CQkJdXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4sIHR5cGUpOwogCX0gZWxzZSBpZiAobHJ1X2dlbl9zZXRfcmVmcyhmb2xpbywgJmFtcDt2bWEtJmd0O2ZsYWdzKSkgewogCQlvbGRfZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7CiAJCWlmIChvbGRfZ2VuICZndDs9IDAgJmFtcDsmYW1wOyBvbGRfZ2VuICE9IG5ld19nZW4pCkBAIC0zNTg4LDggJiM0MzszNTk3LDYgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtJmd0O3ByaXZhdGU7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKHdhbGstJmd0O2xydXZlYyk7CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdCh3YWxrLSZndDtscnV2ZWMpOwotCURFRklORV9NQVhfU0VRKHdhbGstJmd0O2xydXZlYyk7Ci0JaW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7CiAJdW5zaWduZWQgaW50IG5yOwogCXBtZF90IHBtZHZhbDsKIApAQCAtMzY0MCw3ICYjNDM7MzY0Nyw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJY29udGludWU7CiAKIAkJaWYgKGxhc3QgIT0gZm9saW8pIHsKLQkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtJmd0O3ZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CQkJd2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy0mZ3Q7dm1hLCB3YWxrLSZndDtscnV2ZWMsIGxhc3QsIGRpcnR5KTsKIAogCQkJbGFzdCA9IGZvbGlvOwogCQkJZGlydHkgPSBmYWxzZTsKQEAgLTM2NTMsNyAmIzQzOzM2NjAsNyBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJd2Fsay0mZ3Q7bW1fc3RhdHNbTU1fTEVBRl9ZT1VOR10gJiM0Mzs9IG5yOwogCX0KIAotCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtJmd0O3ZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtJmd0O3ZtYSwgd2Fsay0mZ3Q7bHJ1dmVjLCBsYXN0LCBkaXJ0eSk7CiAJbGFzdCA9IE5VTEw7CiAKIAlpZiAoaSAmbHQ7IFBUUlNfUEVSX1BURSAmYW1wOyZhbXA7IGdldF9uZXh0X3ZtYShQTURfTUFTSywgUEFHRV9TSVpFLCBhcmdzLCAmYW1wO3N0YXJ0LCAmYW1wO2VuZCkpCkBAIC0zNjc2LDggJiM0MzszNjgzLDYgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWEKIAlzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy0mZ3Q7cHJpdmF0ZTsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay0mZ3Q7bHJ1dmVjKTsKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstJmd0O2xydXZlYyk7Ci0JREVGSU5FX01BWF9TRVEod2Fsay0mZ3Q7bHJ1dmVjKTsKLQlpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTsKIAogCVZNX1dBUk5fT05fT05DRShwdWRfbGVhZigqcHVkKSk7CiAKQEAgLTM3MzEsNyAmIzQzOzM3MzYsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYQogCQkJZ290byBuZXh0OwogCiAJCWlmIChsYXN0ICE9IGZvbGlvKSB7Ci0JCQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay0mZ3Q7bHJ1dmVjLCBsYXN0LCBkaXJ0eSk7CiAKIAkJCWxhc3QgPSBmb2xpbzsKIAkJCWRpcnR5ID0gZmFsc2U7CkBAIC0zNzQ1LDcgJiM0MzszNzUwLDcgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWEKIAkJaSA9IGkgJmd0OyBNSU5fTFJVX0JBVENIID8gMCA6IGZpbmRfbmV4dF9iaXQoYml0bWFwLCBNSU5fTFJVX0JBVENILCBpKSAmIzQzOyAxOwogCX0gd2hpbGUgKGkgJmx0Oz0gTUlOX0xSVV9CQVRDSCk7CiAKLQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIHdhbGstJmd0O2xydXZlYywgbGFzdCwgZGlydHkpOwogCiAJbGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7CiAJc3Bpbl91bmxvY2socHRsKTsKQEAgLTQzNTEsOCAmIzQzOzQzNTYsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpCiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGZvbGlvX3BnZGF0KGZvbGlvKTsKIAlzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7CiAJc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlOwotCXVuc2lnbmVkIGxvbmcgbWF4X3NlcTsKLQlpbnQgZ2VuOwogCiAJbG9ja2RlcF9hc3NlcnRfaGVsZChwdm13LSZndDtwdGwpOwogCVZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2xydShmb2xpbyksIGZvbGlvKTsKQEAgLTQzODksOCAmIzQzOzQzOTIsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpCiAKIAltZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pOwogCWxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7Ci0JbWF4X3NlcSA9IFJFQURfT05DRSgobHJ1dmVjKS0mZ3Q7bHJ1Z2VuLm1heF9zZXEpOwotCWdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7CiAJbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTsKIAogCWxhenlfbW11X21vZGVfZW5hYmxlKCk7CkBAIC00NDIyLDcgJiM0Mzs0NDIzLDcgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKQogCQkJY29udGludWU7CiAKIAkJaWYgKGxhc3QgIT0gZm9saW8pIHsKLQkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CQkJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTsKIAogCQkJbGFzdCA9IGZvbGlvOwogCQkJZGlydHkgPSBmYWxzZTsKQEAgLTQ0MzQsMTMgJiM0Mzs0NDM1LDE0IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucikKIAkJeW91bmcgJiM0Mzs9IG5yOwogCX0KIAotCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7CiAKIAlsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTsKIAogCS8qIGZlZWRiYWNrIGZyb20gcm1hcCB3YWxrZXJzIHRvIHBhZ2UgdGFibGUgd2Fsa2VycyAqLwogCWlmIChtbV9zdGF0ZSAmYW1wOyZhbXA7IHN1aXRhYmxlX3RvX3NjYW4oaSwgeW91bmcpKQotCQl1cGRhdGVfYmxvb21fZmlsdGVyKG1tX3N0YXRlLCBtYXhfc2VxLCBwdm13LSZndDtwbWQpOwomIzQzOwkJdXBkYXRlX2Jsb29tX2ZpbHRlcihtbV9zdGF0ZSwgUkVBRF9PTkNFKGxydXZlYy0mZ3Q7bHJ1Z2VuLm1heF9zZXEpLAomIzQzOwkJCQkgICAgcHZtdy0mZ3Q7cG1kKTsKIAogCW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKIApAQCAtNDc4NSw3ICYjNDM7NDc4Nyw3IEBAIHN0YXRpYyBib29sIGlzb2xhdGVfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2NhCiAKIAkvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi8KIAlpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpCi0JCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgMCk7CiYjNDM7CQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwogCiAJc3VjY2VzcyA9IGxydV9nZW5fZGVsX2ZvbGlvKGxydXZlYywgZm9saW8sIHRydWUpOwogCVZNX1dBUk5fT05fT05DRV9GT0xJTyghc3VjY2VzcywgZm9saW8pOwpAQCAtNDg3OCw5ICYjNDM7NDg4MCw5IEBAIHN0YXRpYyBpbnQgZ2V0X3RpZXJfaWR4KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUpCiAJICogVGhpcyB2YWx1ZSBpcyBjaG9zZW4gYmVjYXVzZSBhbnkgb3RoZXIgdGllciB3b3VsZCBoYXZlIGF0IGxlYXN0IHR3aWNlCiAJICogYXMgbWFueSByZWZhdWx0cyBhcyB0aGUgZmlyc3QgdGllci4KIAkgKi8KLQlyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgMCwgMiwgJmFtcDtzcCk7Ci0JZm9yICh0aWVyID0gMTsgdGllciAmbHQ7IE1BWF9OUl9USUVSUzsgdGllciYjNDM7JiM0MzspIHsKLQkJcmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIDMsICZhbXA7cHYpOwomIzQzOwlyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NSU4sIDIsICZhbXA7c3ApOwomIzQzOwlmb3IgKHRpZXIgPSBMUlVfVElFUl9NSU4gJiM0MzsgMTsgdGllciAmbHQ7PSBMUlVfVElFUl9NQVg7IHRpZXImIzQzOyYjNDM7KSB7CiYjNDM7CQlyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdGllciwgdGllciwgMywgJmFtcDtwdik7CiAJCWlmICghcG9zaXRpdmVfY3RybF9lcnIoJmFtcDtzcCwgJmFtcDtwdikpCiAJCQlicmVhazsKIAl9CkBAIC00OTAxLDggJiM0Mzs0OTAzLDEwIEBAIHN0YXRpYyBpbnQgZ2V0X3R5cGVfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKQogCSAqIENvbXBhcmUgdGhlIHN1bSBvZiBhbGwgdGllcnMgb2YgYW5vbiB3aXRoIHRoYXQgb2YgZmlsZSB0byBkZXRlcm1pbmUKIAkgKiB3aGljaCB0eXBlIHRvIHNjYW4uCiAJICovCi0JcmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fQU5PTiwgTUFYX05SX1RJRVJTLCBzd2FwcGluZXNzLCAmYW1wO3NwKTsKLQlyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBNQVhfTlJfVElFUlMsIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgJmFtcDtwdik7CiYjNDM7CXJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUFYLAomIzQzOwkJICAgICAgc3dhcHBpbmVzcywgJmFtcDtzcCk7CiYjNDM7CXJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUFYLAomIzQzOwkJICAgICAgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCAmYW1wO3B2KTsKIAogCXJldHVybiBwb3NpdGl2ZV9jdHJsX2VycigmYW1wO3NwLCAmYW1wO3B2KTsKIH0KQEAgLTUwMTcsOCAmIzQzOzUwMjEsMTAgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCX0KIAogCQkvKiBkb24mIzM5O3QgYWRkIHJlamVjdGVkIGZvbGlvcyB0byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gKi8KLQkJaWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKQotCQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX2FjdGl2ZSkpOwomIzQzOwkJaWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKSB7CiYjNDM7CQkJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTsKJiM0MzsJCQlmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTsKJiM0MzsJCX0KIAl9CiAKIAltb3ZlX2ZvbGlvc190b19scnUoJmFtcDtsaXN0KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzNzQKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA2MDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBJbXBhY3QqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGRlZXAgaW50byB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbW0vYCBkaXJlY3Rvcnkg4oCTIHRoYXQmIzM5O3MgYSBrZXkgYXJlYS4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyB0b3VjaGluZyBjcml0aWNhbCBmaWxlczogYG1lbWNvbnRyb2wuaGAsIGBtbV9pbmxpbmUuaGAsIGBtbXpvbmUuaGAsIGBmb2xpby5jYCwgYG1lbWNvbnRyb2wuY2AsIGBtaWdyYXRlLmNgLCBhbmQgYHZtc2Nhbi5jYC4gIEEgY29tcHJlaGVuc2l2ZSBvdmVydmlldyBpcyBkZWZpbml0ZWx5IHJlcXVpcmVkLgoKRmlyc3QsIGl0IHNlZW1zIHRoZXJlJiMzOTtzIGEgdHlwZSBjaGFuZ2UgZm9yIGBscnVfem9uZV9zaXplYCBmcm9tIGB1bnNpZ25lZCBsb25nYCB0byBgbG9uZ2AsIGFuZCB0aGVyZSBhcmUgY2hlY2tzIG5vdyBmb3IgbmVnYXRpdmUgdmFsdWVzLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nIOKAkyBwb3RlbnRpYWwgc2lnbmVkbmVzcyBidWdzLCBvciBtYXliZSBhZGRyZXNzaW5nIGEgc3VidGxlIG92ZXJmbG93IGlzc3VlIGluIHRoZSBtZW1jZyBMUlUgYWNjb3VudGluZy4gQWx3YXlzIHdvcnRoIHNjcnV0aW5pemluZyB0aG9zZSBjaGFuZ2VzIQoKVGhlIHNlY29uZCwgYW5kIHBvdGVudGlhbGx5IG1vcmUgc2lnbmlmaWNhbnQsIHBhcnQgaW52b2x2ZXMgYSBtYWpvciByZWZhY3RvcmluZyBhbmQgYnVnIGZpeGluZyByZWxhdGVkIHRvIE11bHRpLUdlbiBMUlUgKE1HTFJVKS4gSSBzZWUgYSBzd2FybSBvZiBmdW5jdGlvbiBuYW1lczogYGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1YCwgYGxydV9zZXRfZ2VuX2ZsYWdzYCwgYGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnNgLCBhbmQgbWFueSBvdGhlcnMgdGhhdCBhcmUgcmVsYXRlZCB0byBtYW5pcHVsYXRpbmcgdGhlIExSVSBmbGFncyBhbmQgZ2VuZXJhdGlvbnMuIFRoYXQmIzM5O3MgYSBnb29kIGFtb3VudCBvZiB3b3JrIGJlaW5nIGRvbmUgb24gZnVuZGFtZW50YWwgTFJVIGxvZ2ljLiBUaGV5JiMzOTtyZSBjaGFuZ2luZyB0aGUgd2F5IHJlZmVyZW5jZSBjb3VudHMgYW5kIGdlbmVyYXRpb24gY291bnRzIGFyZSBoYW5kbGVkLiBUaGlzIHRvdWNoZXMgb24gcGFnZSBpc29sYXRpb24sIHRpZXJpbmcsIGFuZCBldmljdGlvbi4gVGhhdCYjMzk7cyBhbGwgY29yZSBzdHVmZi4gVGhlIG1pZ3JhdGUgY29kZSYjMzk7cyBgZm9saW9fbWlncmF0ZV9mbGFnc2AgbWFrZXMgc2Vuc2UsIGFzIHdlbGwuCgpHaXZlbiB0aGF0IHRoaXMgbW9kaWZpZXMgZmlsZXMgaW4gYG1tL2AsIGl0JiMzOTtzIGRpcmVjdGx5IGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhpcyBpcyBhIGhpZ2hseSByZWFjaGFibGUgYXJlYSwgYW5kIHN5emthbGxlciBwcm9iYWJseSBoaXRzIHRoaXMgYWxsIHRoZSB0aW1lLiBTbywgaWYgd2UgbG9vayBhdCB0aGUgcG9zaXRpdmUgY3JpdGVyaWEsIHRoaXMgcGF0Y2ggZGVmaW5pdGVseSBmaXRzIHRoZSBiaWxsLiBJdCYjMzk7cyBtb2RpZnlpbmcgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgKG1tLyksIGFuZCBpdCYjMzk7cyByZWZhY3RvcmluZyByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzIChMUlUgZmxhZ3MsIGV0Yy4pLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBXQVJOX09OX09OQ0VgIGluZGljYXRlcyBydW50aW1lIGFzc2VydGlvbnMg4oCTIGEgYmlnIGNoZWNrISBUaGlzIGlzIGRlZmluaXRlbHkgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyEKCk5vdywgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIEtjb25maWcgZGVwZW5kZW5jaWVzIHRvIHNlZSB3aGljaCBmZWF0dXJlcyBhcmUgbmVlZGVkIHRvIGVuYWJsZSB0aGlzIGFuZCB1c2UgYGdyZXBwZXJgIHRvIHNlYXJjaCBmb3IgTFJVX0dFTiwgTUVNQ0csIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBGb2N1c1N5bWJvbHMgcmVsYXRlZCB0byB0aGUgc3BlY2lmaWMgY2hhbmdlcy4gVGhhdCB3aWxsIHRlbGwgbWUgd2hpY2ggZmVhdHVyZXMgYXJlIGltcGFjdGVkLCBhbmQgd2hlcmUgdG8gZm9jdXMgdGhlIGZ1enppbmcgZWZmb3J0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBMUlVfR0VOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTM4OD1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXG4tLVxubW0vS2NvbmZpZy0xMzk4LSMgbXVsdGktZ2VuIExSVSB7XG5tbS9LY29uZmlnOjEzOTk6Y29uZmlnIExSVV9HRU5cbm1tL0tjb25maWctMTQwMC1cdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQwNy1cbm1tL0tjb25maWc6MTQwODpjb25maWcgTFJVX0dFTl9FTkFCTEVEXG5tbS9LY29uZmlnLTE0MDktXHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDEzLVxubW0vS2NvbmZpZzoxNDE0OmNvbmZpZyBMUlVfR0VOX1NUQVRTXG5tbS9LY29uZmlnLTE0MTUtXHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTQyMi1cbm1tL0tjb25maWc6MTQyMzpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcbm1tL0tjb25maWctMTQyNC1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc1MQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBgTUVNQ0dgIGFuZCBNZW1vcnkgQ29udHJvbCoqCgpSaWdodCwgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIHRvIGBNRU1DR2Ag4oCTIG1lbW9yeSBjb250cm9sIGdyb3Vwcy4gQWx3YXlzIGEgZ29vZCBwbGFjZSB0byBzdGFydCB3aGVuIGRpZ2dpbmcgaW50byBtZW1vcnkgYmVoYXZpb3IuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBjb3ZlcmluZyBhbGwgdGhlIGFuZ2xlcy4gTXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIG9uIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uLiBJIHNob3VsZCBjaGVjayBgbWVtY29udHJvbC5jYCBmb3IgdGhlIGZ1bmRhbWVudGFsIGZyYW1ld29yay4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgc3lzdGVtIHRyYWNrcyBhbmQgZW5mb3JjZXMgbWVtb3J5IGxpbWl0cyB3aXRoaW4gdGhlc2UgY29udHJvbCBncm91cHMuCgpUaGF0IGFsc28gYnJpbmdzIGBscnVfem9uZV9zaXplYCBpbnRvIHRoZSBwaWN0dXJlLiBOZWVkIHRvIGNvcnJlbGF0ZSB0aGF0IHdpdGggaG93IHRoZSBrZXJuZWwgbWFuYWdlcyBwYWdlcyB3aXRoaW4gem9uZXMgYW5kIGhvdyBgTUVNQ0dgIGludGVyYWN0cyB3aXRoIHRob3NlIHpvbmUtbGV2ZWwgY2FsY3VsYXRpb25zLiBUaGUgTFJVIGlzIGNyaXRpY2FsIGluIGRldGVybWluaW5nIHdoYXQgZ2V0cyBzd2FwcGVkIG91dCwgYW5kIHdoYXQgcGFnZXMgYXJlIGNvbnNpZGVyZWQgJiMzNDtpbi11c2UmIzM0OyB2ZXJzdXMgcmVjbGFpbWFibGUuIEkgc2hvdWxkIGJlIGFibGUgdG8gdHJhY2UgaG93IGxpbWl0cyBhZmZlY3QgdGhlIExSVSBkZWNpc2lvbnMuIExldCYjMzk7cyBzZWUgaG93IG1lbW9yeSBwcmVzc3VyZSBpbXBhY3RzIHRoZSB6b25lcyBhbmQgdGhlIExSVSBjYWxjdWxhdGlvbnMgd2l0aGluIHRoZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTUNHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNzU9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4tLVxuaW5pdC9LY29uZmlnLTEwODQtXG5pbml0L0tjb25maWc6MTA4NTpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy0xMDg2LVx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMDkzLVxuaW5pdC9LY29uZmlnOjEwOTQ6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbmluaXQvS2NvbmZpZy0xMDk1LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMTAwLVxuaW5pdC9LY29uZmlnOjExMDE6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbml0L0tjb25maWctMTEwMi1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTEwNy1cbmluaXQvS2NvbmZpZzoxMTA4OmNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTExMDktXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDI0OQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUmVjZW50IENoYW5nZXMgaW4gTWVtb3J5IE1hbmFnZW1lbnQgQ29kZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZXNlIHJlY2VudCBtb2RpZmljYXRpb25zLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGJlZW4gdG91Y2hlZCBpbiB0aGUgYG1tL2AgZGlyZWN0b3J5LiBTY2FubmluZyBgbW0vbWVtY29udHJvbC5jYCwgSSBzZWUgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCBhbmQgYG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemVgIOKAkyB0aGUgbGF0dGVyJiMzOTtzIGlubGluZSwgc28gdGhhdCYjMzk7cyBhIHF1aWNrIG5vdGUgdG8gbXlzZWxmLiBUaGVuLCBvdmVyIGluIGBtbS9mb2xpby5jYCwgSSBzZWUgYSBjb3VwbGUgb2YgZnVuY3Rpb25zIGZsYWdnZWQgYXMgYHN0YXRpY2A6IGBscnVfZ2VuX2luY19yZWZzYCBhbmQgYGxydV9nZW5fY2xlYXJfcmVmc2AuIFNpbmNlIHRoZXkmIzM5O3JlIGBzdGF0aWNgLCBJIHNob3VsZCBjaGVjayB3aXRoaW4gYGZvbGlvLmNgIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhleSBhcmUgdXNlZC4KCk1vdmluZyBvbiwgYG1tL21pZ3JhdGUuY2AgaGFzIGBmb2xpb19taWdyYXRlX2ZsYWdzYCwgd2hpY2ggd2FycmFudHMgYSBjbG9zZXIgbG9vayBsYXRlci4gQW5kIHRoZSBiaWcgb25lLCBgbW0vdm1zY2FuLmNgLCBoYXMgYSB3aG9sZSBzbGV3IG9mIGNoYW5nZXMuIEkgbm90ZSBgbHJ1X2dlbl9zZXRfcmVmc2AsIGByZWFkX2N0cmxfcG9zYCwgYGZvbGlvX3VwZGF0ZV9nZW5gLCBgX19mb2xpb19pbmNfZ2VuYCwgYGZvbGlvX2luY19nZW5gLCBgdXBkYXRlX2JhdGNoX3NpemVgLCBgd2Fsa191cGRhdGVfZm9saW9gLCBgd2Fsa19wdGVfcmFuZ2VgLCBgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkYCwgYGxydV9nZW5fbG9va19hcm91bmRgLCBgaXNvbGF0ZV9mb2xpb2AsIGBnZXRfdGllcl9pZHhgLCBgZ2V0X3R5cGVfdG9fc2NhbmAsIGFuZCBgZXZpY3RfZm9saW9zYC4gVGhhdCYjMzk7cyBhIGxvdCB0byBwYXJzZSwgYnV0IGl0IHNlZW1zIFZNIHNjYW5uaW5nIGhhcyBiZWVuIHNpZ25pZmljYW50bHkgaW1wYWN0ZWQuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCB0aGUgc2NvcGUgb2YgdGhlc2UgY2hhbmdlcywgZm9jdXNpbmcgZXNwZWNpYWxseSBvbiB0aGUgZnVuY3Rpb25zIGluIGBtbS9mb2xpby5jYCBsaWtlIGBscnVfZ2VuX2luY19yZWZzYCBhbmQgYGxydV9nZW5fY2xlYXJfcmVmc2AuIEFyZSB0aGV5IGludGVybmFsIHRvIGBmb2xpby5jYCwgb3IgYXJlIHRoZXkgcGFydCBvZiBhIGxhcmdlciBpbnRlcmZhY2U/IEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIGNhbGxlcnMgb2YgdGhvc2UsIG9yIG90aGVyIGZ1bmN0aW9ucyBpbiBgbW0vZm9saW8uY2AsIHRvIHNlZSB3aGF0IHRoZSB0YXJnZXRzIGFyZSwgYW5kIGRldGVybWluZSB3aGF0IHRoZSByaWdodCBjb2RlIHRvIHRhcmdldCBmb3IgbXkgcHVycG9zZXMgaXMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgaW1wYWN0IGFuZCB3aGVyZSB0byBkaWcgZGVlcGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5fKGluY3xjbGVhcilfcmVmcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9mb2xpby5jPTMyMz1zdGF0aWMgdm9pZCBfX2xydV9jYWNoZV9hY3RpdmF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2ZvbGlvLmMtMzU0LVxubW0vZm9saW8uYzozNTU6c3RhdGljIHZvaWQgbHJ1X2dlbl9pbmNfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vZm9saW8uYy0zNTYte1xuLS1cbm1tL2ZvbGlvLmMtMzgwLVxubW0vZm9saW8uYzozODE6c3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9mb2xpby5jLTM4Mi17XG4tLVxubW0vZm9saW8uYy00MDEtXG5tbS9mb2xpby5jOjQwMjpzdGF0aWMgdm9pZCBscnVfZ2VuX2luY19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9mb2xpby5jLTQwMy17XG4tLVxubW0vZm9saW8uYy00MDUtXG5tbS9mb2xpby5jOjQwNjpzdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL2ZvbGlvLmMtNDA3LXtcbi0tXG5tbS9mb2xpby5jPTQyNj12b2lkIGZvbGlvX21hcmtfYWNjZXNzZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9mb2xpby5jLTQzMC1cdGlmIChscnVfZ2VuX2VuYWJsZWQoKSkge1xubW0vZm9saW8uYzo0MzE6XHRcdGxydV9nZW5faW5jX3JlZnMoZm9saW8pO1xubW0vZm9saW8uYy00MzItXHRcdHJldHVybjtcbi0tXG5tbS9mb2xpby5jPTU5Mj1zdGF0aWMgdm9pZCBscnVfbGF6eWZyZWUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2ZvbGlvLmMtNjAyLVx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKVxubW0vZm9saW8uYzo2MDM6XHRcdGxydV9nZW5fY2xlYXJfcmVmcyhmb2xpbyk7XG5tbS9mb2xpby5jLTYwNC1cdGVsc2Vcbi0tXG5tbS9mb2xpby5jPTY3MD12b2lkIGRlYWN0aXZhdGVfZmlsZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2ZvbGlvLmMtNjc1LVxubW0vZm9saW8uYzo2NzY6XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXHUwMDI2XHUwMDI2IGxydV9nZW5fY2xlYXJfcmVmcyhmb2xpbykpXG5tbS9mb2xpby5jLTY3Ny1cdFx0cmV0dXJuO1xuLS1cbm1tL2ZvbGlvLmM9NjkwPXZvaWQgZm9saW9fZGVhY3RpdmF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2ZvbGlvLmMtNjk0LVxubW0vZm9saW8uYzo2OTU6XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgPyBscnVfZ2VuX2NsZWFyX3JlZnMoZm9saW8pIDogIWZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSlcbm1tL2ZvbGlvLmMtNjk2LVx0XHRyZXR1cm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2ODYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBFeGFtaW5hdGlvbiBvZiB0aGUgUmVsZXZhbnQgQ29kZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGlzIG1lbW9yeSBtYW5hZ2VtZW50IGZsb3cuIE15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiB0aGUgZm9sbG93aW5nOiBgaXNvbGF0ZV9mb2xpb2AsIGBldmljdF9mb2xpb3NgLCBgd2Fsa19wdGVfcmFuZ2VgLCBgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkYCwgYGxydV9nZW5fbG9va19hcm91bmRgLCBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgLCBgZm9saW9fbWlncmF0ZV9mbGFnc2AsIGBscnVfZ2VuX2luY19yZWZzYCwgYGxydV9nZW5fY2xlYXJfcmVmc2AsIGBnZXRfdGllcl9pZHhgLCBgZ2V0X3R5cGVfdG9fc2NhbmAsIGByZWFkX2N0cmxfcG9zYCwgYGZvbGlvX3VwZGF0ZV9nZW5gLCBhbmQgYF9fZm9saW9faW5jX2dlbmAuIFRoZXNlIHNlZW0gbGlrZSB0aGUgY29yZSBjb21wb25lbnRzLgoKTm93LCBJIHdhbnQgdG8gcXVpY2tseSBpZGVudGlmeSBwb3RlbnRpYWwgYXJlYXMgZm9yIGRlZXBlciBpbnZlc3RpZ2F0aW9uLCBwZXJoYXBzIGxvb2tpbmcgYXQgd2hldGhlciB0aG9zZSBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkIGFzIGBzdGF0aWNgIG9yLCBpZiBub3QsIHdoaWNoIG9mIHRoZW0gaGF2ZSBnb29kIHBvdGVudGlhbCBhcyBgRm9jdXNTeW1ib2xzYCB0aGF0IG1pZ2h0IG1ha2Ugc2Vuc2UgdG8gdHJhY2UuIEluIHBhcnRpY3VsYXIsIEnigJltIGludGVyZXN0ZWQgaW4gd2hldGhlciBgaXNvbGF0ZV9mb2xpb2AsIGBldmljdF9mb2xpb3NgLCBgZm9saW9fbWlncmF0ZV9mbGFnc2AsIG9yIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgYXJlIG5vbi1zdGF0aWMgYW5kLCBpZiBzbywgd2hhdCB0aGVpciBjYWxsIHRyZWVzIGxvb2sgbGlrZS4KCkFzIGEgc3RhcnRpbmcgcG9pbnQsIEkmIzM5O2xsIGRyaWxsIGRvd24gc3BlY2lmaWNhbGx5IGludG8gYGV2aWN0X2ZvbGlvc2AgYW5kIGl0cyBjYWxsZXJzLCBzdGFydGluZyBpbiBgbW0vdm1zY2FuLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHNvbWUgY29udGV4dCBhYm91dCBob3cgaXQmIzM5O3MgdXNlZCB3aXRoaW4gdGhlIHNjYW5uaW5nIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtldmljdF9mb2xpb3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz00OTIwPXN0YXRpYyBpbnQgaXNvbGF0ZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtNDk2My1cbm1tL3Ztc2Nhbi5jOjQ5NjQ6c3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG5tbS92bXNjYW4uYy00OTY1LVx0XHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcylcbi0tXG5tbS92bXNjYW4uYz01MTQzPXN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTE2Ni1cdFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fc2NhbiwgTUlOX0xSVV9CQVRDSCk7XG5tbS92bXNjYW4uYzo1MTY3Olx0XHRkZWx0YSA9IGV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyk7XG5tbS92bXNjYW4uYy01MTY4LVx0XHRpZiAoIWRlbHRhKVxuLS1cbm1tL3Ztc2Nhbi5jPTU3ODQ9c3RhdGljIGludCBydW5fZXZpY3Rpb24oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4tLVxubW0vdm1zY2FuLmMtNTgwNC1cdFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fcmVjbGFpbSAtIHNjLVx1MDAzZW5yX3JlY2xhaW1lZCwgTUFYX0xSVV9CQVRDSCk7XG5tbS92bXNjYW4uYzo1ODA1Olx0XHRpZiAoIWV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcykpXG5tbS92bXNjYW4uYy01ODA2LVx0XHRcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjYzMAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDg3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBLZXkgU3ltYm9scyBmb3IgQW5hbHlzaXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBoZXJlIGlzIHRvIGlkZW50aWZ5IGFuZCB6ZXJvIGluIG9uIHRoZSBtb3N0IHJlbGV2YW50IGZ1bmN0aW9ucyBmb3Igd2hhdGV2ZXIgaW52ZXN0aWdhdGlvbiBvciBtb2RpZmljYXRpb24gSSYjMzk7bSBwbGFubmluZywgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIE11bHRpLUdlbiBMUlUgb3IgbWVtb3J5IG1hbmFnZW1lbnQgaW4gZ2VuZXJhbC4gSSYjMzk7bGwgc3RhcnQgYnkgc3lzdGVtYXRpY2FsbHkgY2hlY2tpbmcgc3BlY2lmaWMgZnVuY3Rpb25zIHRoYXQgYXJlIG5vbi1zdGF0aWMgYW5kIHNlZW0gY2VudHJhbCB0byB0aGUgY29yZSBsb2dpYy4KCkZpcnN0LCBJJiMzOTttIGNoZWNraW5nIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBpbiBgbW0vdm1zY2FuLmNgLiBJdCYjMzk7cyBub24tc3RhdGljLCB3aGljaCBpcyBnb29kIGZvciBteSBwdXJwb3Nlcy4gVGhlbiBJJiMzOTtsbCBsb29rIGF0IGBmb2xpb19taWdyYXRlX2ZsYWdzYCBpbiBgbW0vbWlncmF0ZS5jYCwgYW5kIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgaW4gYG1tL21lbWNvbnRyb2wuY2AuIEkmIzM5O20gYWxzbyBnb2luZyB0byBleGFtaW5lIHNvbWUgcmVsYXRlZCBmdW5jdGlvbnMsIGluY2x1ZGluZyBgbHJ1X2dlbl9pbmNfcmVmc2AsIGBscnVfZ2VuX2NsZWFyX3JlZnNgLCBgZm9saW9fdXBkYXRlX2dlbmAsIGBfX2ZvbGlvX2luY19nZW5gLCBgaXNvbGF0ZV9mb2xpb2AsIGBnZXRfdGllcl9pZHhgLCBgZ2V0X3R5cGVfdG9fc2NhbmAsIGB3YWxrX3VwZGF0ZV9mb2xpb2AsIGB3YWxrX3B0ZV9yYW5nZWAsIGB3YWxrX3BtZF9yYW5nZV9sb2NrZWRgLCBhbmQgYHJlYWRfY3RybF9wb3NgLgoKTm93LCBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFdoaWNoIG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGBtbS92bXNjYW4uY2AgY2FsbCBvciBhcmUgY2FsbGVkIGJ5IHRoZXNlIGZ1bmN0aW9ucywgb3IgYXJlIG90aGVyd2lzZSBtb2RpZmllZCBpbiByZWxhdGlvbiB0byB0aGVtPyBJIG5lZWQgdG8gYnVpbGQgYSBicm9hZGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRleHQuIEkmIzM5O2xsIGZvY3VzIG9uIHRoZXNlOgoqICAgYGxydV9nZW5fbG9va19hcm91bmRgCiogICBgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkYAoqICAgYHdhbGtfcHRlX3JhbmdlYAoqICAgYGZvbGlvX3VwZGF0ZV9nZW5gCiogICBgZm9saW9fbWlncmF0ZV9mbGFnc2AKKiAgIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAKKiAgIGBldmljdF9mb2xpb3NgCiogICBgaXNvbGF0ZV9mb2xpb2AKKiAgIGBscnVfZ2VuX2luY19yZWZzYAoqICAgYGxydV9nZW5fY2xlYXJfcmVmc2AKCkxldCYjMzk7cyB0aGluayBhYm91dCB1YmlxdWl0eS4gSSB3YW50IHRvIGF2b2lkIGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsZWQgZXZlcnl3aGVyZTsgSSBuZWVkIHN5bWJvbHMgdGhhdCBhcmUgbW9yZSBzcGVjaWZpYyB0byB0aGUgYXJlYSBJJiMzOTttIGludGVyZXN0ZWQgaW4uIEkgc2hvdWxkIGNoZWNrIHdoZXRoZXIgYGZvbGlvX21hcmtfYWNjZXNzZWRgIG9yIGBmb2xpb19kZWFjdGl2YXRlYCBhcmUgY2FsbGVkIGV2ZXJ5d2hlcmUuIGBmb2xpb19tYXJrX2FjY2Vzc2VkYCBpcywgYnV0IG1heWJlIGBscnVfZ2VuX2luY19yZWZzYCwgYGxydV9nZW5fY2xlYXJfcmVmc2Agb3IgYGZvbGlvX2RlYWN0aXZhdGVgIC8gYGRlYWN0aXZhdGVfZmlsZV9mb2xpb2AgYXJlIHNwZWNpZmljLiBQZXJoYXBzIGBscnVfZ2VuX2luY19yZWZzYCBpcyBzcGVjaWZpYyB0byBNR0xSVS4gSG9sZCBvbiwgd2FzbiYjMzk7dCB0aGF0IHN0YXRpYz8KCipBaCosIHllcywgYGxydV9nZW5faW5jX3JlZnNgIGlzIHN0YXRpYywgd2hpY2ggY2FuIGNvbXBsaWNhdGUgc3ltYm9sIGFuYWx5c2lzLiBDYW4gYGthbGxzeW1zYCBoZWxwIHVzIGZpbmQgc3RhdGljIGZ1bmN0aW9ucz8gUmlnaHQuIFN0YXRpYyBmdW5jdGlvbnMgaW4gYC5jYCBmaWxlcyAqdXN1YWxseSogYXBwZWFyIGluIGAvcHJvYy9rYWxsc3ltc2AgdW5sZXNzIHRoZXkmIzM5O3JlIGlubGluZWQuIEFuZCBJIHJlbWVtYmVyIHRoZSBub3RlIGFib3V0IGlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyBpbiBoZWFkZXJzLiBUaGV5JiMzOTtyZSBiYXNpY2FsbHkgaW52aXNpYmxlIGFzIHN5bWJvbHMuIFNvLCBJIG5lZWQgdG8gZm9jdXMgb24gbm9uLXN0YXRpYywgb3Igc3Vic3lzdGVtLWxldmVsIGVudHJ5cG9pbnQgZnVuY3Rpb25zLiBUaGF04oCZcyBzYWZlci4KClRoZXJlZm9yZSwgZm9yIHRoZSBzYWtlIG9mIGNsZWFyIGFuYWx5c2lzLCB0aGVzZSBhcmUgdGhlICYjMzQ7Z29vZCYjMzQ7IGBGb2N1c1N5bWJvbHNgOgoKMS4gIGBscnVfZ2VuX2xvb2tfYXJvdW5kYAoyLiAgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgCjMuICBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgCjQuICBgZm9saW9fdXBkYXRlX2dlbmAKNS4gIGB3YWxrX3BtZF9yYW5nZV9sb2NrZWRgCjYuICBgd2Fsa19wdGVfcmFuZ2VgCjcuICBgZXZpY3RfZm9saW9zYAo4LiAgYGlzb2xhdGVfZm9saW9gCjkuICBgbHJ1X2dlbl9pbmNfcmVmc2AKMTAuIGBscnVfZ2VuX2NsZWFyX3JlZnNgCgpGaW5hbGx5LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIG5lZWRlZCBjb25maWd1cmF0aW9ucy4gYExSVV9HRU5gIGlzIGNyaXRpY2FsIGZvciBNdWx0aS1HZW4gTFJVLCBhbmQgYE1FTUNHYCBpcyByZXF1aXJlZCBiZWNhdXNlIG9mIHRoZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gbWVtb3J5IGNncm91cCBmdW5jdGlvbnMgKGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgYW5kIGBscnVfem9uZV9zaXplYCkuIE5vdyBJIG5lZWQgdG8gZXhwbG9yZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBgTFJVX0dFTl9FTkFCTEVEYCBlbmFibGVzIGBMUlVfR0VOYCBieSBkZWZhdWx0IGF0IGJvb3QuIExldCYjMzk7cyBjaGVjayBgS2NvbmZpZ2AgZm9yIGBMUlVfR0VOYCBhbmQgcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzk1Olx0XHQgIHB1cnBvc2VzLiAgSXQgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIHVzZXJmYXVsdGZkIHdyaXRlIHByb3RlY3Rpb24gb25cbjEzOTY6XHRcdCAgZmlsZS1iYWNrZWQgbWVtb3J5IHR5cGVzIGxpa2Ugc2htZW0gYW5kIGh1Z2V0bGJmcy5cbjEzOTc6XHRcbjEzOTg6XHQjIG11bHRpLWdlbiBMUlUge1xuMTM5OTpcdGNvbmZpZyBMUlVfR0VOXG4xNDAwOlx0XHRib29sIFwmIzM0O011bHRpLUdlbiBMUlVcJiMzNDtcbjE0MDE6XHRcdGRlcGVuZHMgb24gTU1VXG4xNDAyOlx0XHQjIG1ha2Ugc3VyZSBmb2xpby1cdTAwM2VmbGFncyBoYXMgZW5vdWdoIHNwYXJlIGJpdHNcbjE0MDM6XHRcdGRlcGVuZHMgb24gNjRCSVQgfHwgIVNQQVJTRU1FTSB8fCBTUEFSU0VNRU1fVk1FTU1BUFxuMTQwNDpcdFx0aGVscFxuMTQwNTpcdFx0ICBBIGhpZ2ggcGVyZm9ybWFuY2UgTFJVIGltcGxlbWVudGF0aW9uIHRvIG92ZXJjb21taXQgbWVtb3J5LiBTZWVcbjE0MDY6XHRcdCAgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0IGZvciBkZXRhaWxzLlxuMTQwNzpcdFxuMTQwODpcdGNvbmZpZyBMUlVfR0VOX0VOQUJMRURcbjE0MDk6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIGJ5IGRlZmF1bHRcJiMzNDtcbjE0MTA6XHRcdGRlcGVuZHMgb24gTFJVX0dFTlxuMTQxMTpcdFx0aGVscFxuMTQxMjpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBtdWx0aS1nZW4gTFJVIGJ5IGRlZmF1bHQuXG4xNDEzOlx0XG4xNDE0Olx0Y29uZmlnIExSVV9HRU5fU1RBVFNcbjE0MTU6XHRcdGJvb2wgXCYjMzQ7RnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXCYjMzQ7XG4xNDE2Olx0XHRkZXBlbmRzIG9uIExSVV9HRU5cbjE0MTc6XHRcdGhlbHBcbjE0MTg6XHRcdCAgRG8gbm90IGVuYWJsZSB0aGlzIG9wdGlvbiB1bmxlc3MgeW91IHBsYW4gdG8gbG9vayBhdCBoaXN0b3JpY2FsIHN0YXRzXG4xNDE5Olx0XHQgIGZyb20gZXZpY3RlZCBnZW5lcmF0aW9ucyBmb3IgZGVidWdnaW5nIHB1cnBvc2UuXG4xNDIwOlx0XG4xNDIxOlx0XHQgIFRoaXMgb3B0aW9uIGhhcyBhIHBlci1tZW1jZyBhbmQgcGVyLW5vZGUgbWVtb3J5IG92ZXJoZWFkLlxuMTQyMjpcdFxuMTQyMzpcdGNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxuMTQyNDpcdFx0ZGVmX2Jvb2wgeVxuMTQyNTpcdFx0ZGVwZW5kcyBvbiBMUlVfR0VOIFx1MDAyNlx1MDAyNiBBUkNIX0hBU19IV19QVEVfWU9VTkdcbjE0MjY6XHQjIH1cbjE0Mjc6XHRcbjE0Mjg6XHRjb25maWcgTE9DS19NTV9BTkRfRklORF9WTUFcbjE0Mjk6XHRcdGJvb2xcbjE0MzA6XHRcdGRlcGVuZHMgb24gIVNUQUNLX0dST1dTVVBcbjE0MzE6XHRcbjE0MzI6XHRjb25maWcgSU9NTVVfTU1fREFUQVxuMTQzMzpcdFx0Ym9vbFxuMTQzNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTA1MwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgZm9yIE1pZ3JhdGlvbiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgdmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgdGhlIGBNSUdSQVRJT05gIGNvbmZpZ3VyYXRpb24uIFRoaXMgaXMgc3RhbmRhcmQgb3BlcmF0aW5nIHByb2NlZHVyZSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBhbnkgdHlwZSBvZiBhdXRvbWF0ZWQgb3Igc2NyaXB0ZWQgZGVwbG95bWVudCwgdXBkYXRlLCBvciBkYXRhIHRyYW5zZm9ybWF0aW9uLiBJIGNhbiYjMzk7dCBwcm9jZWVkIHdpdGggYW55IG1pZ3JhdGlvbi1yZWxhdGVkIHRhc2sgdW50aWwgSSBjb25maXJtIHRoYXQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIGlzIHByZXNlbnQgYW5kIGFjY2Vzc2libGUuIFRoaXMgcHJvYmFibHkgbWVhbnMgdmVyaWZ5aW5nIHRoZSBwcmVzZW5jZSBvZiBhIHNwZWNpZmljIGZpbGUsIGVudmlyb25tZW50IHZhcmlhYmxlLCBkYXRhYmFzZSBlbnRyeSwgb3Igb3RoZXIgbWVhbnMgdGhhdCBkZWZpbmVzIHRoZSBtaWdyYXRpb24gcHJvY2VzcyBwYXJhbWV0ZXJzLiBXaXRob3V0IGtub3dpbmcgdGhlIHByZWNpc2Ugc3lzdGVtLCBJIGhhdmUgdG8gYXNzdW1lIGEgZmV3IHBvc3NpYmlsaXRpZXMgc3VjaCBhcyBhIG1pZ3JhdGlvbiBmaWxlLCBvciBhIHNwZWNpZmljIGRhdGFiYXNlIGVudHJ5LiBOb3csIGhvdyBkbyBJIGFjdHVhbGx5IGNoZWNrPyBEbyBJIGhhdmUgYSBwcmUtZXhpc3RpbmcgZnVuY3Rpb24/IExpYnJhcnk/IElzIGl0IGEgbWFudWFsIGNoZWNrPyBJIGFtIGdvaW5nIHRvIGFzc3VtZSBzb21lIGtpbmQgb2Ygc3lzdGVtIGFscmVhZHkgZXhpc3RzLCBhbmQgSSBuZWVkIHRvIGNoZWNrIGZvciB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUlHUkFUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NjY4PWNvbmZpZyBOVU1BX01JR1JBVElPTlxuLS1cbm1tL0tjb25maWctNjc4LVxubW0vS2NvbmZpZzo2Nzk6Y29uZmlnIE1JR1JBVElPTlxubW0vS2NvbmZpZy02ODAtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MzUzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQ2hlY2tpbmcgdGhlIE1pZ3JhdGlvbiBDb25maWd1cmF0aW9uIGluIG1tL0tjb25maWcqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgJiMzNDtSaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24uJiMzNDsgU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGBNSUdSQVRJT05gIG9wdGlvbnMgd2l0aGluIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIG9yIHBvdGVudGlhbGx5IHR3ZWFraW5nIHRoZSBzeXN0ZW0mIzM5O3MgbWVtb3J5IG1pZ3JhdGlvbiBjYXBhYmlsaXRpZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZXNlIGNvbmZpZ3VyYXRpb25zLCBhbmQgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUuIFRoaXMgaXMgYSBwcmV0dHkgZnVuZGFtZW50YWwgYXNwZWN0IG9mIGhvdyB0aGUga2VybmVsIG1hbmFnZXMgbWVtb3J5LCBzbyBJIG5lZWQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCBtaWdyYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBzZXQgYW5kIGlmIHRoZXJlJiMzOTtzIGFueXRoaW5nIHVudXN1YWwgb3Igc29tZXRoaW5nIHRoYXQgc2hvdWxkIGJlIGFkanVzdGVkIGluIHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uLiBUaGlzIGlzIHNvbWV0aGluZyBJJiMzOTttIGludGltYXRlbHkgZmFtaWxpYXIgd2l0aCwgc28gSSYjMzk7bGwgYmUgbG9va2luZyBhdCB0aGUgZGV0YWlscyBhcyB3ZWxsIGFzIHRoZSBiaWdnZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NzA6XHRcdGRlZmF1bHQgeVxuIDY3MTpcdFx0ZGVwZW5kcyBvbiBOVU1BIFx1MDAyNlx1MDAyNiBNTVVcbiA2NzI6XHRcdHNlbGVjdCBNSUdSQVRJT05cbiA2NzM6XHRcdGhlbHBcbiA2NzQ6XHRcdCAgU3VwcG9ydCB0aGUgbWlncmF0aW9uIG9mIHBhZ2VzIHRvIG90aGVyIE5VTUEgbm9kZXMsIGF2YWlsYWJsZSB0b1xuIDY3NTpcdFx0ICB1c2VyIHNwYWNlIHRocm91Z2ggaW50ZXJmYWNlcyBsaWtlIG1pZ3JhdGVfcGFnZXMoKSwgbW92ZV9wYWdlcygpLFxuIDY3NjpcdFx0ICBhbmQgbWJpbmQoKS4gU2VsZWN0aW5nIHRoaXMgb3B0aW9uIGFsc28gZW5hYmxlcyBzdXBwb3J0IGZvciBwYWdlXG4gNjc3Olx0XHQgIGRlbW90aW9uIGZvciBtZW1vcnkgdGllcmluZy5cbiA2Nzg6XHRcbiA2Nzk6XHRjb25maWcgTUlHUkFUSU9OXG4gNjgwOlx0XHRib29sXG4gNjgxOlx0XHRkZXBlbmRzIG9uIE1NVVxuIDY4MjpcdFxuIDY4MzpcdGNvbmZpZyBERVZJQ0VfTUlHUkFUSU9OXG4gNjg0Olx0XHRkZWZfYm9vbCBNSUdSQVRJT04gXHUwMDI2XHUwMDI2IFpPTkVfREVWSUNFXG4gNjg1Olx0XG4gNjg2Olx0Y29uZmlnIEFSQ0hfRU5BQkxFX0hVR0VQQUdFX01JR1JBVElPTlxuIDY4NzpcdFx0Ym9vbFxuIDY4ODpcdFxuIDY4OTpcdGNvbmZpZyBBUkNIX0hBU19QTURfU09GVExFQVZFU1xuIDY5MDpcdFx0Ym9vbFxuIDY5MTpcdFxuIDY5MjpcdGNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxuIDY5MzpcdFx0ZGVmX2Jvb2wgblxuIDY5NDpcdFx0aGVscFxuIDY5NTpcdFx0ICBBbGxvd3MgdGhlIHBhZ2VibG9ja19vcmRlciB2YWx1ZSB0byBiZSBkeW5hbWljIGluc3RlYWQgb2YganVzdCBzdGFuZGFyZFxuIDY5NjpcdFx0ICBIVUdFVExCX1BBR0VfT1JERVIgd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgSHVnZVRMQiBwYWdlIHNpemVzIGF2YWlsYWJsZVxuIDY5NzpcdFx0ICBvbiBhIHBsYXRmb3JtLlxuIDY5ODpcdFxuIDY5OTpcdFx0ICBOb3RlIHRoYXQgdGhlIHBhZ2VibG9ja19vcmRlciBjYW5ub3QgZXhjZWVkIE1BWF9QQUdFX09SREVSIGFuZCB3aWxsIGJlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5OTkwCgkJCQkJCQlvdXRwdXQ6IDI0OQoJCQkJCQkJdGhvdWdodHM6IDQyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIFBhdGNoJiMzOTtzIEltcGFjdCBvbiBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgZGVlcGx5IGludm9sdmVkIHdpdGggbWVtb3J5IG1pZ3JhdGlvbiwgY29tcGFjdGlvbiwgYW5kIE5VTUEgYmFsYW5jaW5nLCBnaXZlbiB0aGUgbWVudGlvbnMgb2YgYE5VTUFfTUlHUkFUSU9OYCwgYE1JR1JBVElPTmAsIGBDT01QQUNUSU9OYCwgYW5kIGBOVU1BX0JBTEFOQ0lOR2AuIFdlJiMzOTtyZSBlbmFibGluZyBtaWdyYXRpb24gaGVyZS4gVGhlIGZhY3QgdGhhdCBgTFJVX0dFTmAsIGBMUlVfR0VOX0VOQUJMRURgLCBhbmQgYE1FTUNHYCBhcmUgYWxzbyByZWxldmFudCBzdWdnZXN0cyBhIGNvbm5lY3Rpb24gdG8gZ2VuZXJhdGlvbmFsIExSVSBhbmQgbWVtb3J5IGNncm91cCBtYW5hZ2VtZW50IGFzIGl0IHJlbGF0ZXMgdG8gbWlncmF0aW9uLCB3aGljaCBpcyBpbnRyaWd1aW5nLgoKSSBuZWVkIHRvIG1ldGljdWxvdXNseSByZXZpZXcgdGhpcyBwYXRjaC4gSXQgaW1wYWN0cyBzb21lIGNvcmUgYXJlYXMuIFNwZWNpZmljYWxseSwgdGhlIHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIGluY2x1ZGluZyBNR0xSVSwgbWVtY2cgTFJVIHpvbmUgc2l6ZSBhZGp1c3RtZW50cywgYW5kIHBhZ2UgbWlncmF0aW9uIHJlZmVyZW5jZSBmbGFncywgYWxsIG9mIHdoaWNoIGFyZSB2ZXJ5IHNlbnNpdGl2ZS4gVGhlIGludHJvZHVjdGlvbiBvZiBuZXcgYXNzZXJ0aW9ucywgc3VjaCBhcyB0aG9zZSB1c2luZyBgVk1fV0FSTl9PTl9PTkNFYCBpbiBmdW5jdGlvbnMgbGlrZSBgbHJ1X3NldF9nZW5fZmxhZ3NgIGFuZCBgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZWAsIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8gcGF5IHZlcnkgY2xvc2UgYXR0ZW50aW9uIHRvLiBUaGVzZSBhcmUgcG90ZW50aWFsIHBvaW50cyBvZiBmYWlsdXJlIG9yIGRlYnVnZ2luZyBob29rcy4gSXQgYWxzbyB0b3VjaGVzIGdlbmVyYXRpb24gYW5kIHRpZXIgY2FsY3VsYXRpb25zLCBwYWdlIHNjYW5uaW5nLCBhbmQgZXZpY3Rpb24sIHNwZWNpZmljYWxseSBpbiBgbW0vdm1zY2FuLmNgLiBMYXN0bHksIGZsYWcgbWFuaXB1bGF0aW9uIHJlbGF0ZWQgdG8gZm9saW9zLCBsaWtlIGluIGBscnVfc2V0X3JlZnNfZmxhZ3NgLCBgZm9saW9fc2V0X2xydV9yZWZzYCwgZXRjLiwgaXMgYmVpbmcgbW9kaWZpZWQuCgpCYXNlZCBvbiBhbGwgb2YgdGhpcywgdGhpcyBwYXRjaCBkZWZpbml0ZWx5IHdhcnJhbnRzIGV4dGVuc2l2ZSBmdXp6aW5nLiBUaGUgY2hhbmdlcyBhcmUgdG9vIGxvdy1sZXZlbCBhbmQgZmFyLXJlYWNoaW5nIHRvIGlnbm9yZS4gVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgbG9vayBsaWtlIHBhcnRpY3VsYXJseSBmcnVpdGZ1bCB0YXJnZXRzIGZvciBmdXp6aW5nOiBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAsIGBmb2xpb19taWdyYXRlX2ZsYWdzYCwgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCwgYHdhbGtfcHRlX3JhbmdlYCwgYHdhbGtfcG1kX3JhbmdlX2xvY2tlZGAsIGBmb2xpb191cGRhdGVfZ2VuYCwgYGV2aWN0X2ZvbGlvc2AsIGBpc29sYXRlX2ZvbGlvYCwgYGxydV9nZW5faW5jX3JlZnNgLCBhbmQgYGxydV9nZW5fY2xlYXJfcmVmc2AuIFRoZXkgaGFuZGxlIHRoZSBtb3N0IHNlbnNpdGl2ZSBhc3BlY3RzIG9mIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZXMuCgpBbmQsIG9mIGNvdXJzZSwgdGhlIGBMUlVfR0VOYCwgYExSVV9HRU5fRU5BQkxFRGAsIGBNRU1DR2AsIGFuZCBgTUlHUkFUSU9OYCBjb25maWd1cmF0aW9ucyBtdXN0IGJlIGVuYWJsZWQgdG8gZnVsbHkgZXhlcmNpc2UgdGhpcyBwYXRjaC4KCkkmIzM5O2xsIHByb2NlZWQgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGggdGhpcyBpbmZvcm1hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xydV9nZW5fbG9va19hcm91bmQmIzM0OywKICAgICYjMzQ7Zm9saW9fbWlncmF0ZV9mbGFncyYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZSYjMzQ7LAogICAgJiMzNDt3YWxrX3B0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDt3YWxrX3BtZF9yYW5nZV9sb2NrZWQmIzM0OywKICAgICYjMzQ7Zm9saW9fdXBkYXRlX2dlbiYjMzQ7LAogICAgJiMzNDtldmljdF9mb2xpb3MmIzM0OywKICAgICYjMzQ7aXNvbGF0ZV9mb2xpbyYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX2luY19yZWZzJiMzNDssCiAgICAmIzM0O2xydV9nZW5fY2xlYXJfcmVmcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBhY3Jvc3MgbW0vdm1zY2FuLmMsIG1tL2ZvbGlvLmMsIG1tL21lbWNvbnRyb2wuYywgYW5kIG1tL21pZ3JhdGUuYywgYWx0ZXJpbmcgTXVsdGktR2VuIExSVSAoTUdMUlUpIHJlZmVyZW5jZSB0cmFja2luZywgZm9saW8gZmxhZyBtYW5pcHVsYXRpb24sIHRpZXIgY2FsY3VsYXRpb25zLCBwYWdlIGV2aWN0aW9uLCBhbmQgbWVtY2cgTFJVIHpvbmUgYWNjb3VudGluZy4gSXQgYWxzbyBhZGRzIHNldmVyYWwgVk1fV0FSTl9PTl9PTkNFIGFzc2VydGlvbnMgYW5kIGNoYW5nZXMgc3luY2hyb25pemF0aW9uL2FyaXRobWV0aWMgbG9naWMuIFRoZXNlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xydV9nZW5fbG9va19hcm91bmQmIzM0OywKICAgICYjMzQ7Zm9saW9fbWlncmF0ZV9mbGFncyYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZSYjMzQ7LAogICAgJiMzNDt3YWxrX3B0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDt3YWxrX3BtZF9yYW5nZV9sb2NrZWQmIzM0OywKICAgICYjMzQ7Zm9saW9fdXBkYXRlX2dlbiYjMzQ7LAogICAgJiMzNDtldmljdF9mb2xpb3MmIzM0OywKICAgICYjMzQ7aXNvbGF0ZV9mb2xpbyYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX2luY19yZWZzJiMzNDssCiAgICAmIzM0O2xydV9nZW5fY2xlYXJfcmVmcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBhY3Jvc3MgbW0vdm1zY2FuLmMsIG1tL2ZvbGlvLmMsIG1tL21lbWNvbnRyb2wuYywgYW5kIG1tL21pZ3JhdGUuYywgYWx0ZXJpbmcgTXVsdGktR2VuIExSVSAoTUdMUlUpIHJlZmVyZW5jZSB0cmFja2luZywgZm9saW8gZmxhZyBtYW5pcHVsYXRpb24sIHRpZXIgY2FsY3VsYXRpb25zLCBwYWdlIGV2aWN0aW9uLCBhbmQgbWVtY2cgTFJVIHpvbmUgYWNjb3VudGluZy4gSXQgYWxzbyBhZGRzIHNldmVyYWwgVk1fV0FSTl9PTl9PTkNFIGFzc2VydGlvbnMgYW5kIGNoYW5nZXMgc3luY2hyb25pemF0aW9uL2FyaXRobWV0aWMgbG9naWMuIFRoZXNlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjI0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6MjQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIE11bHRpLUdlbmVyYXRpb25hbCBMUlUgKE1HTFJVKSBmb2xpbyBmbGFnIGhlbHBlcnMsIHBhZ2UgdGFibGUgLyBybWFwIHNjYW5uaW5nIGxvZ2ljLCBhbmQgbWVtY2cgTFJVIHpvbmUgc2l6ZSBhY2NvdW50aW5nLiBTcGVjaWZpY2FsbHk6XG4tIEl0IHJlcGxhY2VzIGRpcmVjdCBgZm9saW8tXHUwMDNlZmxhZ3MuZmAgYWNjZXNzIHdpdGggYGZvbGlvX2ZsYWdzKGZvbGlvLCAwKWAgYWNjZXNzb3IgaGVscGVycyAoYGxydV9zZXRfZ2VuX2ZsYWdzYCwgYGxydV9nZXRfZ2VuX2ZsYWdzYCwgYGxydV9zZXRfcmVmc19mbGFnc2AsIGBscnVfZ2V0X3JlZnNfZmxhZ3NgLCBgZm9saW9fc2V0X2xydV9yZWZzYCwgYGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnNgKS5cbi0gSXQgY2xlYW5zIHVwIGByZWFkX2N0cmxfcG9zYCBwYXJhbWV0ZXJpemF0aW9uIGFuZCBgd2Fsa191cGRhdGVfZm9saW9gIGNhbGxlcnMuIFN0YWNrIHZhcmlhYmxlcyBzdWNoIGFzIGBzdHJ1Y3QgY3RybF9wb3MgcG9zYCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgaW4gYHJlYWRfY3RybF9wb3NgLCBhbmQgdGhlIGBpbnQgKnR5cGVgIG91dHB1dCBwYXJhbWV0ZXIgaW4gYGZvbGlvX3VwZGF0ZV9nZW5gIGlzIGd1YXJhbnRlZWQgdG8gYmUgaW5pdGlhbGl6ZWQgd2hlbiB0aGUgcmV0dXJuIHZhbHVlIGluZGljYXRlcyBwcm9tb3Rpb24gKGBvbGRfZ2VuIFx1MDAzZT0gMGApLlxuLSBJdCBjb252ZXJ0cyBgbXotXHUwMDNlbHJ1X3pvbmVfc2l6ZWAgdG8gc2lnbmVkIGBsb25nYCB0byBzaW1wbGlmeSB1bmRlcmZsb3cgaGFuZGxpbmcuXG5cbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIGNvcHkga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gUG90ZW50aWFsIGJ1Z3MgaW4gdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBjb25jdXJyZW5jeS9sb2NraW5nIHJhY2VzIG9yIHN0YXRlIGNvcnJ1cHRpb24pIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBrZXJuZWwgYXNzZXJ0aW9uIGJ1aWxkcyB3aXRob3V0IHJlcXVpcmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlM2NiYmM3NmUxYzk2NmM3NmZlNjIxMjk5YTMyZDE3YWZhN2U0MDAzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgNiAxNjoyMzo0OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKaW5kZXggYzc5OTkyNjQzNTU2MC4uMmI2NzY5NDI4NWQwNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKQEAgLTEwMCw3ICYjNDM7MTAwLDcgQEAgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgewogCS8qIEZpZWxkcyB3aGljaCBnZXQgdXBkYXRlZCBvZnRlbiBhdCB0aGUgZW5kLiAqLwogCXN0cnVjdCBscnV2ZWMJCWxydXZlYzsKIAlDQUNIRUxJTkVfUEFERElORyhfcGFkMl8pOwotCXVuc2lnbmVkIGxvbmcJCWxydV96b25lX3NpemVbTUFYX05SX1pPTkVTXVtOUl9MUlVfTElTVFNdOwomIzQzOwlsb25nCQkJbHJ1X3pvbmVfc2l6ZVtNQVhfTlJfWk9ORVNdW05SX0xSVV9MSVNUU107CiAJc3RydWN0IG1lbV9jZ3JvdXBfcmVjbGFpbV9pdGVyCWl0ZXI7CiAKIAkvKgpAQCAtODg3LDEwICYjNDM7ODg3LDE1IEBAIHN0YXRpYyBpbmxpbmUKIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCWVudW0gbHJ1X2xpc3QgbHJ1LCBpbnQgem9uZV9pZHgpCiB7CiYjNDM7CWxvbmcgdmFsOwogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejsKIAogCW16ID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7Ci0JcmV0dXJuIFJFQURfT05DRShtei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7CiYjNDM7CXZhbCA9IFJFQURfT05DRShtei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UodmFsICZsdDsgMCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIHZhbDsKIH0KIAogdm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaAppbmRleCA2MjFjODY1M2Q4ZjdlLi5hYjY5Yjk5MzA4OTNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmgKQEAgLTMwLDYgJiM0MzszMCwxNyBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19pc19maWxlX2xydShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXJldHVybiAhZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1IC0gU2hvdWxkIHRoZSBmb2xpbyBiZSBvbiBhIGZpbGUgTFJVIG9yIGFub24gTFJVPwomIzQzOyAqIEBmbGFnczogVGhlIGZvbGlvJiMzOTtzIGZsYWdzLgomIzQzOyAqCiYjNDM7ICogSnVzdCBsaWtlIGZvbGlvX2lzX2ZpbGVfbHJ1IGJ1dCB0YWtlIHRoZSBmb2xpbyBmbGFncyBkaXJlY3RseSBpbnN0ZWFkLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZsYWdzKQomIzQzO3sKJiM0MzsJcmV0dXJuICF0ZXN0X2JpdChQR19zd2FwYmFja2VkLCBmbGFncyk7CiYjNDM7fQomIzQzOwogc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJCQllbnVtIGxydV9saXN0IGxydSwgZW51bSB6b25lX3R5cGUgemlkLAogCQkJCWxvbmcgbnJfcGFnZXMpCkBAIC0xNDIsMTAgJiM0MzsxNTMsNjYgQEAgc3RhdGljIGlubGluZSBpbnQgbHJ1X3RpZXJfZnJvbV9yZWZzKGludCByZWZzLCBib29sIHdvcmtpbmdzZXQpCiAJcmV0dXJuIHdvcmtpbmdzZXQgPyBNQVhfTlJfVElFUlMgLSAxIDogb3JkZXJfYmFzZV8yKHJlZnMpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzOy8qKgomIzQzOyAqIGxydV9zZXRfZ2VuX2ZsYWdzIC0gU2V0IHRoZSBMUlUgZ2VuZXJhdGlvbiBudW1iZXIgdG8gc3BlY2lmaWVkIGZvbGlvIGZsYWdzLgomIzQzOyAqIEBmbGFnczogcG9pbnRlciB0byB0aGUgZm9saW8gZmxhZ3MKJiM0MzsgKiBAZ2VuOiBnZW5lcmF0aW9uIG51bWJlciwgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfc2V0X2dlbl9mbGFncyh1bnNpZ25lZCBsb25nICpmbGFncywgaW50IGdlbikKJiM0Mzt7CiYjNDM7CUJVSUxEX0JVR19PTihMUlVfR0VOX01BU0sgJmFtcDsgTFJVX1JFRlNfTUFTSyk7CiYjNDM7CVZNX1dBUk5fT05fT05DRShnZW4gJmd0Oz0gTUFYX05SX0dFTlMgfHwgZ2VuICZsdDsgMCk7CiYjNDM7CS8qIFN0b3JlIGdlbiBvZmZzZXQgYnkgMSwgemVybyBtZWFucyB0aGUgZm9saW8gaXMgb2ZmLWxpc3QuICovCiYjNDM7CSpmbGFncyAmYW1wOz0gfkxSVV9HRU5fTUFTSzsKJiM0MzsJKmZsYWdzIHw9IChnZW4gJiM0MzsgMVVMKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBscnVfZ2V0X2dlbl9mbGFncyAtIFJldHVybiB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIGZyb20gZm9saW8gZmxhZ3MuCiYjNDM7ICogQGZsYWdzOiBmb2xpbyBmbGFncwomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLiBSZXR1cm5zCiYjNDM7ICogLTEgaWYgdGhlIGZsYWdzIGluZGljYXRlIHRoZSBmb2xpbyBpcyBvZmYgdGhlIGxpc3QgKGUuZy4sIGlzb2xhdGVkKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGludCBscnVfZ2V0X2dlbl9mbGFncyh1bnNpZ25lZCBsb25nIGZsYWdzKQomIzQzO3sKJiM0MzsJaW50IGdlbiA9ICgoZmxhZ3MgJmFtcDsgTFJVX0dFTl9NQVNLKSAmZ3Q7Jmd0OyBMUlVfR0VOX1BHT0ZGKSAtIDE7CiYjNDM7CiYjNDM7CS8qIEV4Y2x1ZGUgdGhlIGxlZ2FsIC0xIGZyb20gdGhlIHVuc2lnbmVkIE1BWF9OUl9HRU5TIGNvbXBhcmlzb24gKi8KJiM0MzsJVk1fV0FSTl9PTl9PTkNFKGdlbiAhPSAtMSAmYW1wOyZhbXA7IGdlbiAmZ3Q7PSBNQVhfTlJfR0VOUyk7CiYjNDM7CXJldHVybiBnZW47CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGxydV9zZXRfcmVmc19mbGFncyAtIFNldCB0aGUgTFJVIHJlZmVyZW5jZWQgY291bnQgdG8gZm9saW8gZmxhZ3MuCiYjNDM7ICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFncwomIzQzOyAqIEByZWZzOiByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IG51bWJlciwgYmV0d2VlbiAwIGFuZCBMUlVfUkVGU19NQVgsIGluY2x1c2l2ZS4KJiM0MzsgKgomIzQzOyAqIEZvciBNR0xSVSwgUEdfcmVmZXJlbmNlZCBob2xkcyB0aGUgZmlyc3QgcmVmLCBhbmQgdGhlIGV4dHJhIGJpdHMgaG9sZCB0aGUKJiM0MzsgKiByZW1haW5pbmcgcmVmcy4gRm9yIGNsYXNzaWNhbCBMUlUgdGhlIGV4dHJhIGJpdHMgYXJlIG5vdCB1c2VkLCBzbyBpdCBjYW4KJiM0MzsgKiBhbHNvIGJlIHNlZW4gYXMgdGhlIHJlZnMgY291bnQgbmV2ZXIgZXhjZWVkcyAxLiBJbiBib3RoIGNhc2VzLCByZWZzID09IDEKJiM0MzsgKiBtZWFucyBQR19yZWZlcmVuY2VkIGlzIHNldCBhbmQgdGhlIGV4dHJhIGJpdHMgYXJlIHplcm8sIGFuZCByZWZzID09IDAgbWVhbnMKJiM0MzsgKiBQR19yZWZlcmVuY2VkIGFuZCB0aGUgZXh0cmEgYml0cyBhcmUgYWxsIHVuc2V0LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfc2V0X3JlZnNfZmxhZ3ModW5zaWduZWQgbG9uZyAqZmxhZ3MsIHVuc2lnbmVkIGludCByZWZzKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwomIzQzOwlWTV9XQVJOX09OX09OQ0UocmVmcyAmZ3Q7IExSVV9SRUZTX01BWCk7CiYjNDM7CUJVSUxEX0JVR19PTihMUlVfUkVGU19NQVggIT0gKExSVV9SRUZTX01BU0sgJmd0OyZndDsgTFJVX1JFRlNfUEdPRkYpICYjNDM7IDEpOwogCiYjNDM7CSpmbGFncyAmYW1wOz0gfkxSVV9SRUZTX0ZMQUdTOwomIzQzOwlpZiAoIXJlZnMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CSpmbGFncyB8PSAoQklUKFBHX3JlZmVyZW5jZWQpIHwgKChyZWZzIC0gMVVMKSAmbHQ7Jmx0OyBMUlVfUkVGU19QR09GRikpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBscnVfZ2V0X3JlZnNfZmxhZ3MgLSBSZXR1cm4gTFJVIHJlZmVyZW5jZWQgLyBhY2Nlc3MgY291bnQgZnJvbSBmb2xpbyBmbGFncy4KJiM0MzsgKiBAZmxhZ3M6IGZvbGlvIGZsYWdzCiYjNDM7ICoKJiM0MzsgKiBSZWFkcyB0aGUgTFJVIHJlZmVyZW5jZWQgY291bnQgc2V0IGJ5IGxydV9zZXRfcmVmc19mbGFncygpLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGxydV9nZXRfcmVmc19mbGFncyh1bnNpZ25lZCBsb25nIGZsYWdzKQomIzQzO3sKIAlpZiAoIShmbGFncyAmYW1wOyBCSVQoUEdfcmVmZXJlbmNlZCkpKQogCQlyZXR1cm4gMDsKIAkvKgpAQCAtMTU1LDExICYjNDM7MjIyLDI0IEBAIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJcmV0dXJuICgoZmxhZ3MgJmFtcDsgTFJVX1JFRlNfTUFTSykgJmd0OyZndDsgTFJVX1JFRlNfUEdPRkYpICYjNDM7IDE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwomIzQzOwlyZXR1cm4gbHJ1X2dldF9yZWZzX2ZsYWdzKFJFQURfT05DRSgqY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKSk7CiYjNDM7fQogCi0JcmV0dXJuICgoZmxhZ3MgJmFtcDsgTFJVX0dFTl9NQVNLKSAmZ3Q7Jmd0OyBMUlVfR0VOX1BHT0ZGKSAtIDE7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgcmVmcykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCW5ld19mbGFncyA9IG9sZF9mbGFnczsKJiM0MzsJCWxydV9zZXRfcmVmc19mbGFncygmYW1wO25ld19mbGFncywgcmVmcyk7CiYjNDM7CX0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksICZhbXA7b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X2dlbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIGxydV9nZXRfZ2VuX2ZsYWdzKFJFQURfT05DRSgqY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2lzX2FjdGl2ZShjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBnZW4pCkBAIC0yNzAsNyAmIzQzOzM1MCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2FkZF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpOwogCWZsYWdzID0gKGdlbiAmIzQzOyAxVUwpICZsdDsmbHQ7IExSVV9HRU5fUEdPRkY7CiAJLyogc2VlIHRoZSBjb21tZW50IG9uIE1JTl9OUl9HRU5TIGFib3V0IFBHX2FjdGl2ZSAqLwotCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX0dFTl9NQVNLIHwgQklUKFBHX2FjdGl2ZSksIGZsYWdzKTsKJiM0MzsJc2V0X21hc2tfYml0cyhmb2xpb19mbGFncyhmb2xpbywgMCksIExSVV9HRU5fTUFTSyB8IEJJVChQR19hY3RpdmUpLCBmbGFncyk7CiAKIAlscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIC0xLCBnZW4pOwogCS8qIGZvciBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoKSAqLwpAQCAtMjk1LDcgJiM0MzszNzUsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCiAJLyogZm9yIGZvbGlvX21pZ3JhdGVfZmxhZ3MoKSAqLwogCWZsYWdzID0gIXJlY2xhaW1pbmcgJmFtcDsmYW1wOyBscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIGdlbikgPyBCSVQoUEdfYWN0aXZlKSA6IDA7Ci0JZmxhZ3MgPSBzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9HRU5fTUFTSywgZmxhZ3MpOwomIzQzOwlmbGFncyA9IHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0ssIGZsYWdzKTsKIAlnZW4gPSAoKGZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwogCiAJbHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBnZW4sIC0xKTsKQEAgLTMwNCwxMSAmIzQzOzM4NCwxOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZCkKJiM0MzsvKioKJiM0MzsgKiBmb2xpb19taWdyYXRlX2xydV9yZWZzIC0gY29weSB0aGUgcmVmZXJlbmNlIHN0YXRlIHRvIGEgbmV3IGZvbGlvCiYjNDM7ICogQG5ldzogdGhlIGRlc3RpbmF0aW9uIGZvbGlvCiYjNDM7ICogQG9sZDogdGhlIHNvdXJjZSBmb2xpbwomIzQzOyAqCiYjNDM7ICogVHJhbnNmZXIgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBAbmV3IGR1cmluZyBtaWdyYXRpb246IHRoZSBNR0xSVQomIzQzOyAqIHJlZnMgY291bnQsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkLCBvciBqdXN0IFBHX3JlZmVyZW5jZWQgZm9yIHRoZQomIzQzOyAqIGFjdGl2ZS9pbmFjdGl2ZSBMUlUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKQogewotCXVuc2lnbmVkIGxvbmcgcmVmcyA9IFJFQURfT05DRShvbGQtJmd0O2ZsYWdzLmYpICZhbXA7IExSVV9SRUZTX01BU0s7Ci0KLQlzZXRfbWFza19iaXRzKCZhbXA7bmV3LSZndDtmbGFncy5mLCBMUlVfUkVGU19NQVNLLCByZWZzKTsKJiM0MzsJQlVJTERfQlVHX09OKExSVV9SRUZTX01BU0sgJmFtcDsgQklUKFBHX3JlZmVyZW5jZWQpKTsKJiM0MzsJZm9saW9fc2V0X2xydV9yZWZzKG5ldywgZm9saW9fbHJ1X3JlZnMob2xkKSk7CiB9CiAjZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi8KIApAQCAtMzM3LDkgJiM0Mzs0MjUsMTAgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZCkKIHsKLQomIzQzOwlpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKG9sZCkpCiYjNDM7CQlmb2xpb19zZXRfcmVmZXJlbmNlZChuZXcpOwogfQogI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCmluZGV4IDg0ZTIzN2YyYzE3ZGIuLmM5YWU3OTkxYThiMjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaApAQCAtNDk1LDExICYjNDM7NDk1LDE0IEBAIGVudW0gbHJ1dmVjX2ZsYWdzIHsKICAqIGZvbGlvLSZndDtmbGFncywgbWFza2VkIGJ5IExSVV9SRUZTX01BU0suCiAgKi8KICNkZWZpbmUgTUFYX05SX1RJRVJTCQk0VQomIzQzOyNkZWZpbmUgTFJVX1RJRVJfTUlOCQkwVQomIzQzOyNkZWZpbmUgTFJVX1RJRVJfTUFYCQkoTUFYX05SX1RJRVJTIC0gMSkKIAogI2lmbmRlZiBfX0dFTkVSQVRJTkdfQk9VTkRTX0gKIAogI2RlZmluZSBMUlVfR0VOX01BU0sJCSgoQklUKExSVV9HRU5fV0lEVEgpIC0gMSkgJmx0OyZsdDsgTFJVX0dFTl9QR09GRikKICNkZWZpbmUgTFJVX1JFRlNfTUFTSwkJKChCSVQoTFJVX1JFRlNfV0lEVEgpIC0gMSkgJmx0OyZsdDsgTFJVX1JFRlNfUEdPRkYpCiYjNDM7I2RlZmluZSBMUlVfUkVGU19NQVgJCUJJVChMUlVfUkVGU19XSURUSCkKIAogLyoKICAqIEZvciBmb2xpb3MgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzLApkaWZmIC0tZ2l0IGEvbW0vZm9saW8uYyBiL21tL2ZvbGlvLmMKaW5kZXggNTBhNmRiZTU1OTk4ZS4uNDdhNDM3ZTBmN2ZkZSAxMDA2NDQKLS0tIGEvbW0vZm9saW8uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9mb2xpby5jCkBAIC0zNTQsMjYgJiM0MzszNTQsMjggQEAgc3RhdGljIHZvaWQgX19scnVfY2FjaGVfYWN0aXZhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykKIAogc3RhdGljIHZvaWQgbHJ1X2dlbl9pbmNfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewotCXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwomIzQzOwl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpOwomIzQzOwlpbnQgcmVmczsKIAogCWlmIChmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSkKIAkJcmV0dXJuOwogCiAJLyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovCi0JaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKSB7Ci0JCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTsKJiM0MzsJaWYgKCFmb2xpb19scnVfcmVmcyhmb2xpbykpIHsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7CiAJCXJldHVybjsKIAl9CiAKIAlkbyB7Ci0JCWlmICgob2xkX2ZsYWdzICZhbXA7IExSVV9SRUZTX01BU0spID09IExSVV9SRUZTX01BU0spIHsKJiM0MzsJCW5ld19mbGFncyA9IG9sZF9mbGFnczsKJiM0MzsJCXJlZnMgPSBscnVfZ2V0X3JlZnNfZmxhZ3Mob2xkX2ZsYWdzKTsKJiM0MzsJCWlmIChyZWZzID09IExSVV9SRUZTX01BWCkgewogCQkJaWYgKCFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKQogCQkJCWZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTsKIAkJCXJldHVybjsKIAkJfQotCi0JCW5ld19mbGFncyA9IG9sZF9mbGFncyAmIzQzOyBCSVQoTFJVX1JFRlNfUEdPRkYpOwotCX0gd2hpbGUgKCF0cnlfY21weGNoZygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiYjNDM7CQlscnVfc2V0X3JlZnNfZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIHJlZnMgJiM0MzsgMSk7CiYjNDM7CX0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksICZhbXA7b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTsKIH0KIAogc3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pCkBAIC0zODUsNyAmIzQzOzM4Nyw4IEBAIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCWlmIChnZW4gJmx0OyAwKQogCQlyZXR1cm4gdHJ1ZTsKIAotCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MgfCBCSVQoUEdfd29ya2luZ3NldCksIDApOwomIzQzOwlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwomIzQzOwlmb2xpb19jbGVhcl93b3JraW5nc2V0KGZvbGlvKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlzZXEgPSBSRUFEX09OQ0UoZm9saW9fbHJ1dmVjKGZvbGlvKS0mZ3Q7bHJ1Z2VuLm1pbl9zZXFbdHlwZV0pOwpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IGJkMWU3ZTE1NDQyNjUuLmYxN2IyYjJkNjEwNTUgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTE1MjksMjggJiM0MzsxNTI5LDEyIEBAIHZvaWQgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIGxydV9saXN0IGxydSwKIAkJCQlpbnQgemlkLCBsb25nIG5yX3BhZ2VzKQogewogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejsKLQl1bnNpZ25lZCBsb25nICpscnVfc2l6ZTsKLQlsb25nIHNpemU7CiAKIAlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKQogCQlyZXR1cm47CiAKIAlteiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpOwotCWxydV9zaXplID0gJmFtcDttei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6aWRdW2xydV07Ci0KLQlpZiAobnJfcGFnZXMgJmx0OyAwKQotCQkqbHJ1X3NpemUgJiM0Mzs9IG5yX3BhZ2VzOwotCi0Jc2l6ZSA9ICpscnVfc2l6ZTsKLQlpZiAoV0FSTl9PTkNFKHNpemUgJmx0OyAwLAotCQkmIzM0OyVzKCVwLCAlZCwgJWxkKTogbHJ1X3NpemUgJWxkXG4mIzM0OywKLQkJX19mdW5jX18sIGxydXZlYywgbHJ1LCBucl9wYWdlcywgc2l6ZSkpIHsKLQkJVk1fQlVHX09OKDEpOwotCQkqbHJ1X3NpemUgPSAwOwotCX0KLQotCWlmIChucl9wYWdlcyAmZ3Q7IDApCi0JCSpscnVfc2l6ZSAmIzQzOz0gbnJfcGFnZXM7CiYjNDM7CW16LSZndDtscnVfem9uZV9zaXplW3ppZF1bbHJ1XSAmIzQzOz0gbnJfcGFnZXM7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jCmluZGV4IDE1YjQ1ODMyYmNmYTcuLmEzNjlkMGM5NWMzODYgMTAwNjQ0Ci0tLSBhL21tL21pZ3JhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9taWdyYXRlLmMKQEAgLTc3Niw4ICYjNDM7Nzc2LDkgQEAgdm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJaW50IGNwdXBpZDsKIAotCWlmIChmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKQotCQlmb2xpb19zZXRfcmVmZXJlbmNlZChuZXdmb2xpbyk7CiYjNDM7CS8qIENvcHkgdGhlIHJlZmVyZW5jZSBzdGF0ZSwgaW5jbHVkaW5nIFBHX3JlZmVyZW5jZWQgKi8KJiM0MzsJZm9saW9fbWlncmF0ZV9scnVfcmVmcyhuZXdmb2xpbywgZm9saW8pOwomIzQzOwogCWlmIChmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSkKIAkJZm9saW9fbWFya191cHRvZGF0ZShuZXdmb2xpbyk7CiAJaWYgKGZvbGlvX3Rlc3RfY2xlYXJfYWN0aXZlKGZvbGlvKSkgewpAQCAtODA3LDcgJiM0Mzs4MDgsNiBAQCB2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbykKIAlpZiAoZm9saW9fdGVzdF9pZGxlKGZvbGlvKSkKIAkJZm9saW9fc2V0X2lkbGUobmV3Zm9saW8pOwogCi0JZm9saW9fbWlncmF0ZV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7CiAJLyoKIAkgKiBDb3B5IE5VTUEgaW5mb3JtYXRpb24gdG8gdGhlIG5ldyBwYWdlLCB0byBwcmV2ZW50IG92ZXItZWFnZXIKIAkgKiBmdXR1cmUgbWlncmF0aW9ucyBvZiB0aGlzIHNhbWUgcGFnZS4KZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggMjQ1ZjY4Yzc1YjI4OS4uNDBkM2YxYjQ4YTc0YyAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTg2MywxOSAmIzQzOzg2MywyMiBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpCiAJaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pICZhbXA7JmFtcDsgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpIHsKIAkJLyogQWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuICovCiAJCWlmIChpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIHZtYV9mbGFncykpIHsKLQkJCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7CiYjNDM7CQkJZm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pOwomIzQzOwkJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJfQogCi0JCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKIAkvKiBQcm9tb3RlIG9uIHNlY29uZCBhY2Nlc3MgKi8KLQlpZiAoZm9saW9fbHJ1X3JlZnMoZm9saW8pICZndDsgMSkKLQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTsKLQllbHNlCiYjNDM7CWlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgJmd0OyAxKSB7CiYjNDM7CQlmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7CiYjNDM7CQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwomIzQzOwl9IGVsc2UgewogCQlmb2xpb19tYXJrX2FjY2Vzc2VkKGZvbGlvKTsKJiM0MzsJfQogCXJldHVybiB0cnVlOwogfQogI2Vsc2UKQEAgLTMyMjAsOCAmIzQzOzMyMjMsOCBAQCBzdHJ1Y3QgY3RybF9wb3MgewogCWludCBnYWluOwogfTsKIAotc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllciwgaW50IGdhaW4sCi0JCQkgIHN0cnVjdCBjdHJsX3BvcyAqcG9zKQomIzQzO3N0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXJfbWluLAomIzQzOwkJCSAgaW50IHRpZXJfbWF4LCBpbnQgZ2Fpbiwgc3RydWN0IGN0cmxfcG9zICpwb3MpCiB7CiAJaW50IGk7CiAJc3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9ICZhbXA7bHJ1dmVjLSZndDtscnVnZW47CkBAIC0zMjMwLDcgJiM0MzszMjMzLDcgQEAgc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllciwgaW50IGdhaW4sCiAJcG9zLSZndDtnYWluID0gZ2FpbjsKIAlwb3MtJmd0O3JlZmF1bHRlZCA9IHBvcy0mZ3Q7dG90YWwgPSAwOwogCi0JZm9yIChpID0gdGllciAlIE1BWF9OUl9USUVSUzsgaSAmbHQ7PSBtaW4odGllciwgTUFYX05SX1RJRVJTIC0gMSk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CWZvciAoaSA9IHRpZXJfbWluOyBpICZsdDs9IHRpZXJfbWF4OyBpJiM0MzsmIzQzOykgewogCQlwb3MtJmd0O3JlZmF1bHRlZCAmIzQzOz0gbHJ1Z2VuLSZndDthdmdfcmVmYXVsdGVkW3R5cGVdW2ldICYjNDM7CiAJCQkJICBhdG9taWNfbG9uZ19yZWFkKCZhbXA7bHJ1Z2VuLSZndDtyZWZhdWx0ZWRbaGlzdF1bdHlwZV1baV0pOwogCQlwb3MtJmd0O3RvdGFsICYjNDM7PSBscnVnZW4tJmd0O2F2Z190b3RhbFt0eXBlXVtpXSAmIzQzOwpAQCAtMzI5MSwxMSAmIzQzOzMyOTQsMTEgQEAgc3RhdGljIGJvb2wgcG9zaXRpdmVfY3RybF9lcnIoc3RydWN0IGN0cmxfcG9zICpzcCwgc3RydWN0IGN0cmxfcG9zICpwdikKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qIHByb21vdGUgcGFnZXMgYWNjZXNzZWQgdGhyb3VnaCBwYWdlIHRhYmxlcyAqLwotc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpCiYjNDM7c3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBpbnQgKnR5cGUsCiYjNDM7CQkJICAgIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpCiB7Ci0JdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby0mZ3Q7ZmxhZ3MuZik7Ci0KLQlWTV9XQVJOX09OX09OQ0UoZ2VuICZndDs9IE1BWF9OUl9HRU5TKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTsKJiM0MzsJaW50IG9sZF9nZW47CiAKIAkvKgogCSAqIFNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUywgYW5kIGFjdGl2YXRlIGZpbGUtYmFja2VkCkBAIC0zMzA0LDMxICYjNDM7MzMwNywzNSBAQCBzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYQogCSAqLwogCWlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSAmYW1wOyZhbXA7ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pICZhbXA7JmFtcDsKIAkgICAgIWlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkgewotCQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7CiYjNDM7CQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJZG8gewomIzQzOwkJb2xkX2dlbiA9IGxydV9nZXRfZ2VuX2ZsYWdzKG9sZF9mbGFncyk7CiYjNDM7CQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7CiYjNDM7CiAJCS8qIGxydV9nZW5fZGVsX2ZvbGlvKCkgaGFzIGlzb2xhdGVkIHRoaXMgcGFnZT8gKi8KLQkJaWYgKCEob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykpCi0JCQlyZXR1cm4gLTE7CiYjNDM7CQlpZiAob2xkX2dlbiAmbHQ7IDApCiYjNDM7CQkJYnJlYWs7CiAKLQkJbmV3X2ZsYWdzID0gb2xkX2ZsYWdzICZhbXA7IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpOwotCQluZXdfZmxhZ3MgfD0gKChnZW4gJiM0MzsgMVVMKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGKSB8IEJJVChQR193b3JraW5nc2V0KTsKLQl9IHdoaWxlICghdHJ5X2NtcHhjaGcoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwomIzQzOwkJbHJ1X3NldF9nZW5fZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIG5ld19nZW4pOwomIzQzOwkJbHJ1X3NldF9yZWZzX2ZsYWdzKCZhbXA7bmV3X2ZsYWdzLCAwKTsKJiM0MzsJCW5ld19mbGFncyB8PSBCSVQoUEdfd29ya2luZ3NldCk7CiYjNDM7CX0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksICZhbXA7b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTsKIAotCXJldHVybiAoKG9sZF9mbGFncyAmYW1wOyBMUlVfR0VOX01BU0spICZndDsmZ3Q7IExSVV9HRU5fUEdPRkYpIC0gMTsKJiM0MzsJKnR5cGUgPSBmb2xpb19mbGFnc19pc19maWxlX2xydSgmYW1wO29sZF9mbGFncyk7CiYjNDM7CXJldHVybiBvbGRfZ2VuOwogfQogCiBzdGF0aWMgaW50IF9fZm9saW9faW5jX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX2dlbiwgYm9vbCAqaW5jcmVhc2VkKQogewotCXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwomIzQzOwl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpOwogCWludCBuZXdfZ2VuOwogCi0JVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCEob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSyksIGZvbGlvKTsKLQogCWRvIHsKLQkJbmV3X2dlbiA9ICgob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwomIzQzOwkJbmV3X2dlbiA9IGxydV9nZXRfZ2VuX2ZsYWdzKG9sZF9mbGFncyk7CiYjNDM7CiAJCS8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqLwogCQlpZiAobmV3X2dlbiAmZ3Q7PSAwICZhbXA7JmFtcDsgbmV3X2dlbiAhPSBvbGRfZ2VuKSB7CiAJCQlpZiAoaW5jcmVhc2VkKQpAQCAtMzMzNiwxMSAmIzQzOzMzNDMsMTIgQEAgc3RhdGljIGludCBfX2ZvbGlvX2luY19nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9nZW4sIGJvb2wgKmluY3JlYXNlZCkKIAkJCXJldHVybiBuZXdfZ2VuOwogCQl9CiAKJiM0MzsJCW5ld19mbGFncyA9IG9sZF9mbGFnczsKIAkJbmV3X2dlbiA9IChvbGRfZ2VuICYjNDM7IDEpICUgTUFYX05SX0dFTlM7CiAKLQkJbmV3X2ZsYWdzID0gb2xkX2ZsYWdzICZhbXA7IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpOwotCQluZXdfZmxhZ3MgfD0gKG5ld19nZW4gJiM0MzsgMVVMKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGOwotCX0gd2hpbGUgKCF0cnlfY21weGNoZygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiYjNDM7CQlscnVfc2V0X2dlbl9mbGFncygmYW1wO25ld19mbGFncywgbmV3X2dlbik7CiYjNDM7CQlscnVfc2V0X3JlZnNfZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIDApOwomIzQzOwl9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiAKIAlpZiAoaW5jcmVhc2VkKQogCQkqaW5jcmVhc2VkID0gdHJ1ZTsKQEAgLTMzNjIsOSAmIzQzOzMzNzAsOCBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogfQogCiBzdGF0aWMgdm9pZCB1cGRhdGVfYmF0Y2hfc2l6ZShzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAotCQkJICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuKQomIzQzOwkJCSAgICAgIGludCBvbGRfZ2VuLCBpbnQgbmV3X2dlbiwgaW50IHR5cGUpCiB7Ci0JaW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7CiAJaW50IHpvbmUgPSBmb2xpb196b25lbnVtKGZvbGlvKTsKIAlpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiAKQEAgLTM1NTEsMjIgJiM0MzszNTU4LDI0IEBAIHN0YXRpYyBib29sIHN1aXRhYmxlX3RvX3NjYW4oaW50IHRvdGFsLCBpbnQgeW91bmcpCiB9CiAKIHN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQlzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgYm9vbCBkaXJ0eSkKJiM0MzsJCXN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBkaXJ0eSkKIHsKLQlpbnQgb2xkX2dlbjsKJiM0MzsJaW50IG5ld19nZW4sIG9sZF9nZW4sIHR5cGU7CiAKIAlpZiAoIWZvbGlvKQogCQlyZXR1cm47CiAKJiM0MzsJbmV3X2dlbiA9IGxydV9nZW5fZnJvbV9zZXEoUkVBRF9PTkNFKGxydXZlYy0mZ3Q7bHJ1Z2VuLm1heF9zZXEpKTsKJiM0MzsKIAlpZiAoZGlydHkgJmFtcDsmYW1wOyAhZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgJmFtcDsmYW1wOwogCSAgICAhKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgJmFtcDsmYW1wOyBmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pICZhbXA7JmFtcDsKIAkgICAgICAhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSkKIAkJZm9saW9fbWFya19kaXJ0eShmb2xpbyk7CiAKIAlpZiAod2FsaykgewotCQlvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgJmFtcDt2bWEtJmd0O2ZsYWdzKTsKJiM0MzsJCW9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuLCAmYW1wO3R5cGUsICZhbXA7dm1hLSZndDtmbGFncyk7CiAJCWlmIChvbGRfZ2VuICZndDs9IDAgJmFtcDsmYW1wOyBvbGRfZ2VuICE9IG5ld19nZW4pCi0JCQl1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7CiYjNDM7CQkJdXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4sIHR5cGUpOwogCX0gZWxzZSBpZiAobHJ1X2dlbl9zZXRfcmVmcyhmb2xpbywgJmFtcDt2bWEtJmd0O2ZsYWdzKSkgewogCQlvbGRfZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7CiAJCWlmIChvbGRfZ2VuICZndDs9IDAgJmFtcDsmYW1wOyBvbGRfZ2VuICE9IG5ld19nZW4pCkBAIC0zNTg4LDggJiM0MzszNTk3LDYgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtJmd0O3ByaXZhdGU7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKHdhbGstJmd0O2xydXZlYyk7CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdCh3YWxrLSZndDtscnV2ZWMpOwotCURFRklORV9NQVhfU0VRKHdhbGstJmd0O2xydXZlYyk7Ci0JaW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7CiAJdW5zaWduZWQgaW50IG5yOwogCXBtZF90IHBtZHZhbDsKIApAQCAtMzY0MCw3ICYjNDM7MzY0Nyw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJY29udGludWU7CiAKIAkJaWYgKGxhc3QgIT0gZm9saW8pIHsKLQkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtJmd0O3ZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CQkJd2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy0mZ3Q7dm1hLCB3YWxrLSZndDtscnV2ZWMsIGxhc3QsIGRpcnR5KTsKIAogCQkJbGFzdCA9IGZvbGlvOwogCQkJZGlydHkgPSBmYWxzZTsKQEAgLTM2NTMsNyAmIzQzOzM2NjAsNyBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJd2Fsay0mZ3Q7bW1fc3RhdHNbTU1fTEVBRl9ZT1VOR10gJiM0Mzs9IG5yOwogCX0KIAotCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtJmd0O3ZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtJmd0O3ZtYSwgd2Fsay0mZ3Q7bHJ1dmVjLCBsYXN0LCBkaXJ0eSk7CiAJbGFzdCA9IE5VTEw7CiAKIAlpZiAoaSAmbHQ7IFBUUlNfUEVSX1BURSAmYW1wOyZhbXA7IGdldF9uZXh0X3ZtYShQTURfTUFTSywgUEFHRV9TSVpFLCBhcmdzLCAmYW1wO3N0YXJ0LCAmYW1wO2VuZCkpCkBAIC0zNjc2LDggJiM0MzszNjgzLDYgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWEKIAlzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy0mZ3Q7cHJpdmF0ZTsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay0mZ3Q7bHJ1dmVjKTsKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstJmd0O2xydXZlYyk7Ci0JREVGSU5FX01BWF9TRVEod2Fsay0mZ3Q7bHJ1dmVjKTsKLQlpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTsKIAogCVZNX1dBUk5fT05fT05DRShwdWRfbGVhZigqcHVkKSk7CiAKQEAgLTM3MzEsNyAmIzQzOzM3MzYsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYQogCQkJZ290byBuZXh0OwogCiAJCWlmIChsYXN0ICE9IGZvbGlvKSB7Ci0JCQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay0mZ3Q7bHJ1dmVjLCBsYXN0LCBkaXJ0eSk7CiAKIAkJCWxhc3QgPSBmb2xpbzsKIAkJCWRpcnR5ID0gZmFsc2U7CkBAIC0zNzQ1LDcgJiM0MzszNzUwLDcgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWEKIAkJaSA9IGkgJmd0OyBNSU5fTFJVX0JBVENIID8gMCA6IGZpbmRfbmV4dF9iaXQoYml0bWFwLCBNSU5fTFJVX0JBVENILCBpKSAmIzQzOyAxOwogCX0gd2hpbGUgKGkgJmx0Oz0gTUlOX0xSVV9CQVRDSCk7CiAKLQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIHdhbGstJmd0O2xydXZlYywgbGFzdCwgZGlydHkpOwogCiAJbGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7CiAJc3Bpbl91bmxvY2socHRsKTsKQEAgLTQzNTEsOCAmIzQzOzQzNTYsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpCiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGZvbGlvX3BnZGF0KGZvbGlvKTsKIAlzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7CiAJc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlOwotCXVuc2lnbmVkIGxvbmcgbWF4X3NlcTsKLQlpbnQgZ2VuOwogCiAJbG9ja2RlcF9hc3NlcnRfaGVsZChwdm13LSZndDtwdGwpOwogCVZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2xydShmb2xpbyksIGZvbGlvKTsKQEAgLTQzODksOCAmIzQzOzQzOTIsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpCiAKIAltZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pOwogCWxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7Ci0JbWF4X3NlcSA9IFJFQURfT05DRSgobHJ1dmVjKS0mZ3Q7bHJ1Z2VuLm1heF9zZXEpOwotCWdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7CiAJbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTsKIAogCWxhenlfbW11X21vZGVfZW5hYmxlKCk7CkBAIC00NDIyLDcgJiM0Mzs0NDIzLDcgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKQogCQkJY29udGludWU7CiAKIAkJaWYgKGxhc3QgIT0gZm9saW8pIHsKLQkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CQkJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTsKIAogCQkJbGFzdCA9IGZvbGlvOwogCQkJZGlydHkgPSBmYWxzZTsKQEAgLTQ0MzQsMTMgJiM0Mzs0NDM1LDE0IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucikKIAkJeW91bmcgJiM0Mzs9IG5yOwogCX0KIAotCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7CiAKIAlsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTsKIAogCS8qIGZlZWRiYWNrIGZyb20gcm1hcCB3YWxrZXJzIHRvIHBhZ2UgdGFibGUgd2Fsa2VycyAqLwogCWlmIChtbV9zdGF0ZSAmYW1wOyZhbXA7IHN1aXRhYmxlX3RvX3NjYW4oaSwgeW91bmcpKQotCQl1cGRhdGVfYmxvb21fZmlsdGVyKG1tX3N0YXRlLCBtYXhfc2VxLCBwdm13LSZndDtwbWQpOwomIzQzOwkJdXBkYXRlX2Jsb29tX2ZpbHRlcihtbV9zdGF0ZSwgUkVBRF9PTkNFKGxydXZlYy0mZ3Q7bHJ1Z2VuLm1heF9zZXEpLAomIzQzOwkJCQkgICAgcHZtdy0mZ3Q7cG1kKTsKIAogCW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKIApAQCAtNDc4NSw3ICYjNDM7NDc4Nyw3IEBAIHN0YXRpYyBib29sIGlzb2xhdGVfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2NhCiAKIAkvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi8KIAlpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpCi0JCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgMCk7CiYjNDM7CQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwogCiAJc3VjY2VzcyA9IGxydV9nZW5fZGVsX2ZvbGlvKGxydXZlYywgZm9saW8sIHRydWUpOwogCVZNX1dBUk5fT05fT05DRV9GT0xJTyghc3VjY2VzcywgZm9saW8pOwpAQCAtNDg3OCw5ICYjNDM7NDg4MCw5IEBAIHN0YXRpYyBpbnQgZ2V0X3RpZXJfaWR4KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUpCiAJICogVGhpcyB2YWx1ZSBpcyBjaG9zZW4gYmVjYXVzZSBhbnkgb3RoZXIgdGllciB3b3VsZCBoYXZlIGF0IGxlYXN0IHR3aWNlCiAJICogYXMgbWFueSByZWZhdWx0cyBhcyB0aGUgZmlyc3QgdGllci4KIAkgKi8KLQlyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgMCwgMiwgJmFtcDtzcCk7Ci0JZm9yICh0aWVyID0gMTsgdGllciAmbHQ7IE1BWF9OUl9USUVSUzsgdGllciYjNDM7JiM0MzspIHsKLQkJcmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIDMsICZhbXA7cHYpOwomIzQzOwlyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NSU4sIDIsICZhbXA7c3ApOwomIzQzOwlmb3IgKHRpZXIgPSBMUlVfVElFUl9NSU4gJiM0MzsgMTsgdGllciAmbHQ7PSBMUlVfVElFUl9NQVg7IHRpZXImIzQzOyYjNDM7KSB7CiYjNDM7CQlyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdGllciwgdGllciwgMywgJmFtcDtwdik7CiAJCWlmICghcG9zaXRpdmVfY3RybF9lcnIoJmFtcDtzcCwgJmFtcDtwdikpCiAJCQlicmVhazsKIAl9CkBAIC00OTAxLDggJiM0Mzs0OTAzLDEwIEBAIHN0YXRpYyBpbnQgZ2V0X3R5cGVfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKQogCSAqIENvbXBhcmUgdGhlIHN1bSBvZiBhbGwgdGllcnMgb2YgYW5vbiB3aXRoIHRoYXQgb2YgZmlsZSB0byBkZXRlcm1pbmUKIAkgKiB3aGljaCB0eXBlIHRvIHNjYW4uCiAJICovCi0JcmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fQU5PTiwgTUFYX05SX1RJRVJTLCBzd2FwcGluZXNzLCAmYW1wO3NwKTsKLQlyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBNQVhfTlJfVElFUlMsIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgJmFtcDtwdik7CiYjNDM7CXJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUFYLAomIzQzOwkJICAgICAgc3dhcHBpbmVzcywgJmFtcDtzcCk7CiYjNDM7CXJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUFYLAomIzQzOwkJICAgICAgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCAmYW1wO3B2KTsKIAogCXJldHVybiBwb3NpdGl2ZV9jdHJsX2VycigmYW1wO3NwLCAmYW1wO3B2KTsKIH0KQEAgLTUwMTcsOCAmIzQzOzUwMjEsMTAgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCX0KIAogCQkvKiBkb24mIzM5O3QgYWRkIHJlamVjdGVkIGZvbGlvcyB0byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gKi8KLQkJaWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKQotCQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX2FjdGl2ZSkpOwomIzQzOwkJaWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKSB7CiYjNDM7CQkJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTsKJiM0MzsJCQlmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTsKJiM0MzsJCX0KIAl9CiAKIAltb3ZlX2ZvbGlvc190b19scnUoJmFtcDtsaXN0KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTg2CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjA5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIFNlc3Npb24gSnVzdGlmaWNhdGlvbiBBbmFseXNpcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgd2UgbmVlZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gb24gdG9wIG9mIG91ciBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLiBNeSBmb2N1cywgYXMgYWx3YXlzLCBpcyBvbiBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Igd3JpdGVzIHRoYXQgY291bGQgYmUgZXhwb3NlZCB0byB1c2Vyc3BhY2UuCgpGaXJzdCwgSSBzZWUgY2hhbmdlcyBpbiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLCBzcGVjaWZpY2FsbHkgY2hhbmdpbmcgYW4gYXJyYXkmIzM5O3MgdHlwZSBpbiBgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGVgLiBUaGVyZSYjMzk7cyBhbHNvIGEgY2hlY2sgYW5kIHJldHVybiBvZiBgMGAgaWYgYSB2YWx1ZSBpcyBuZWdhdGl2ZS4gVGhpcyBkb2VzbiYjMzk7dCBzZWVtIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBkYXRhIHNlbnQgdG8gdXNlcnNwYWNlLCBzbyBJJiMzOTttIG5vdCBvdmVybHkgY29uY2VybmVkIGhlcmUuCgpUaGUgY2hhbmdlcyBpbiBgaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaGAsIGRlZmluaW5nIGBmb2xpb19mbGFnc19pc19maWxlX2xydWAgYW5kIHJlZmFjdG9yaW5nIExSVSBnZW5lcmF0aW9uIGFuZCBmbGFncyBtYW5pcHVsYXRpb24sIGFyZSBpbnRlcmVzdGluZyBidXQgbGlrZWx5IGludGVybmFsLiAgVGhleSBtb3N0bHkgZGVhbCB3aXRoIGJpdCBtYW5pcHVsYXRpb24gYW5kIGludGVybmFsIHN0cnVjdCBmbGFnIHNldHRpbmdzLiBTdGlsbCwgSSYjMzk7bGwgbmVlZCB0byBrZWVwIHRoaXMgaW4gbWluZCBhcyBJIGxvb2sgYXQgdGhlIGxhcmdlciBjYWxsIGNoYWlucywgYnV0IHRoaXMgbG9va3MgbGlrZSBhbiBpbnRlcm5hbCByZWZhY3Rvci4KCmBpbmNsdWRlL2xpbnV4L21tem9uZS5oYCBqdXN0IGRlZmluZXMgc29tZSBjb25zdGFudHMsIHNvIG5vIGltbWVkaWF0ZSByZWQgZmxhZ3MgdGhlcmUuCgpJbiBgbW0vZm9saW8uY2AsIGBscnVfZ2VuX2luY19yZWZzYCBhbmQgYGxydV9nZW5fY2xlYXJfcmVmc2AgdXRpbGl6ZSB0aGUgZmxhZyBtYW5pcHVsYXRpb24gZnVuY3Rpb25zLiBBZ2FpbiwgdGhlIHBvdGVudGlhbCBwcm9ibGVtIGRlcGVuZHMgb24gaWYgdGhlIGZsYWdzIGFyZSBpbml0aWFsaXplZC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGUgdXNlIG9mIHRob3NlIGZ1bmN0aW9ucy4KCmBtbS9tZW1jb250cm9sLmNgIHNpbXBsaWZpZXMgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYC4gVGhpcyAqY291bGQqIGJlIGEgdmVjdG9yIGZvciB1bmluaXRpYWxpemVkIGRhdGEsIGJ1dCBpdCBzZWVtcyB0byBkaXJlY3RseSB1cGRhdGUgYSBrbm93biBsb2NhdGlvbi4gIEkmIzM5O2xsIHN0aWxsIGtlZXAgYW4gZXllIG9uIHRoaXMgYXMgSSBsb29rIGZvciB1cHN0cmVhbSBkYXRhLgoKVGhlIGBtbS9taWdyYXRlLmNgIGNoYW5nZSwgYGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnNgLCBpcyBhIHJlZmFjdG9yIG9mIHRoZSBgZm9saW9fbWlncmF0ZV9yZWZzYCBmdW5jdGlvbiBhbmQgc2hvdWxkIGJlIHNhZmUuCgpGaW5hbGx5LCB3ZSYjMzk7cmUgYXQgYG1tL3Ztc2Nhbi5jYC4gIFRoZSBzaWduYXR1cmUgY2hhbmdlIG9mIGBmb2xpb191cGRhdGVfZ2VuYCBhbmQgYSBuZXcgb3V0LXBhcmFtZXRlciBgaW50ICp0eXBlYCBpcyB3aGF0IGhhcyBteSBhdHRlbnRpb24hICBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBpbml0aWFsaXphdGlvbiBvZiBgKnR5cGVgLgoKSSBkb3ZlIGludG8gYGZvbGlvX3VwZGF0ZV9nZW5gIGFuZCBmb3VuZCBhIGNvbmRpdGlvbmFsIHJldHVybiB3aGVyZSBgKnR5cGVgIG1pZ2h0IG5vdCBiZSBzZXQ6IHRoZSBpbml0aWFsIGBpZmAgc3RhdGVtZW50LiBCdXQgSSB0cmFjZWQgaXQgYmFjay4gIElmIHRoZSBmaXJzdCBjaGVjayByZXR1cm5zIGAtMWAsIGl0IHNldHMgdGhlIHJlZnMgYW5kIHJldHVybnMgYC0xYC4gVGhlIGB3YWxrX3VwZGF0ZV9mb2xpb2AgY2FsbGVyIHdpbGwgKm5vdCogdXNlIGB0eXBlYC4gIEhvd2V2ZXIsIGlmIHRoZSBgaWZgIGNoZWNrIGRvZXMgKm5vdCogaGFwcGVuLCBgdHlwZWAgaXMgQUxXQVlTIHdyaXR0ZW4gdG8gYmVjYXVzZSBvZiB0aGUgbG9naWMgd2l0aGluIHRoZSBgZG8uLi53aGlsZWAgbG9vcCBhbmQgdGhlIHJldHVybi4gIFNvLCBpbiBhbGwgY2FzZXMgYHR5cGVgIGlzIHNldC4KCkZ1cnRoZXJtb3JlLCBgdHlwZWAgaXMgb25seSAqdXNlZCogaW4gYHdhbGtfdXBkYXRlX2ZvbGlvYCB3aGVuIGBvbGRfZ2VuICZndDs9IDAgJmFtcDsmYW1wOyBvbGRfZ2VuICE9IG5ld19nZW5gLiAgSW4gdGhpcyBjYXNlLCBgdHlwZWAgaXMgZ3VhcmFudGVlZCB0byBoYXZlIGJlZW4gc2V0IHdoZW4gY2FsbGluZyBgdXBkYXRlX2JhdGNoX3NpemVgLgoKR2l2ZW4gbXkgYW5hbHlzaXMsIEkgYW0gbm90IHNlZWluZyBhbnkgY2xlYXIgS01TQU4tdHJpZ2dlcmluZyBpc3N1ZXMgaGVyZS4gTm8gb2J2aW91cyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHMsIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlIG5ldyBjb2RlIGRvZXMgbm90IHNlZW0gdG8gaW50cm9kdWNlIG5ldyBwYXRocyB0aGF0IGNvdWxkIHRyaWdnZXIgaXNzdWVzLgoKVGhlcmVmb3JlLCBiYXNlZCBvbiBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgcGF0Y2ggYW5kIHRoZSBydWxlLCBJIGJlbGlldmUgdGhhdCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZCBpbiBhZGRpdGlvbiB0byBvdXIgZXhpc3RpbmcgS0FTQU4gZnV6emluZyBmb3IgdGhpcyBwYXRjaC4gSSByZWNvbW1lbmQgcHJvY2VlZGluZyB3aXRoIEtBU0FOIGZ1enppbmcgYXMgdXN1YWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZvbGlvX3VwZGF0ZV9nZW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD0zMDE9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydV9nZW5fZm9saW9fc2VxKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTMxMS1cdCAqIHwgQWNjZXNzZWQgdGhyb3VnaCBwYWdlIHRhYmxlcyBhbmQgIHwgQWNjZXNzZWQgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzIHxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6MzEyOlx0ICogfCBwcm9tb3RlZCBieSBmb2xpb191cGRhdGVfZ2VuKCkgICAgfCBhbmQgcHJvdGVjdGVkIGJ5IGZvbGlvX2luY19nZW4oKSAgfFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0zMTMtXHQgKiAmIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7XG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD00Mjc9ZW51bSBscnV2ZWNfZmxhZ3Mge1xuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtNTE2LSAqXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjUxNzogKiBGb3IgZm9saW9zIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggcGFnZSB0YWJsZXMsIGZvbGlvX3VwZGF0ZV9nZW4oKVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC01MTgtICogZnJvbSBhIHBhZ2UgdGFibGUgd2FsayBvciBscnVfZ2VuX3NldF9yZWZzKCkgZnJvbSBhIHJtYXAgd2FsayBzZXRzXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC01MjAtICogVGhlcmVhZnRlciwgdGhvc2UgdHdvIHBhdGhzIHNldCBQR193b3JraW5nc2V0IGFuZCBwcm9tb3RlIGZvbGlvcyB0byB0aGVcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NTIxOiAqIHlvdW5nZXN0IGdlbmVyYXRpb24uIExpa2UgZm9saW9faW5jX2dlbigpLCBmb2xpb191cGRhdGVfZ2VuKCkgYWxzbyBjbGVhcnNcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNTIyLSAqIFBHX3JlZmVyZW5jZWQuIE5vdGUgdGhhdCBmb3IgdGhpcyBjYXNlLCBMUlVfUkVGU19NQVNLIGlzIG5vdCB1c2VkLlxuLS1cbm1tL3Ztc2Nhbi5jPTg0Nz1lbnVtIGZvbGlvX3JlZmVyZW5jZXMge1xuLS1cbm1tL3Ztc2Nhbi5jLTg1Ny0gKiB3aXRoIFBHX2FjdGl2ZSBzZXQuIEluIGNvbnRyYXN0LCB0aGUgYWdpbmcgKHBhZ2UgdGFibGUgd2FsaykgcGF0aCB1c2VzXG5tbS92bXNjYW4uYzo4NTg6ICogZm9saW9fdXBkYXRlX2dlbigpLlxubW0vdm1zY2FuLmMtODU5LSAqL1xuLS1cbm1tL3Ztc2Nhbi5jPTMyODE9c3RhdGljIGJvb2wgcG9zaXRpdmVfY3RybF9lcnIoc3RydWN0IGN0cmxfcG9zICpzcCwgc3RydWN0IGN0cmxfcG9zICpwdilcbi0tXG5tbS92bXNjYW4uYy0zMjk2LS8qIHByb21vdGUgcGFnZXMgYWNjZXNzZWQgdGhyb3VnaCBwYWdlIHRhYmxlcyAqL1xubW0vdm1zY2FuLmM6MzI5NzpzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGludCAqdHlwZSxcbm1tL3Ztc2Nhbi5jLTMyOTgtXHRcdFx0ICAgIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4tLVxubW0vdm1zY2FuLmM9MzMzMT1zdGF0aWMgaW50IF9fZm9saW9faW5jX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX2dlbiwgYm9vbCAqaW5jcmVhc2VkKVxuLS1cbm1tL3Ztc2Nhbi5jLTMzMzgtXG5tbS92bXNjYW4uYzozMzM5Olx0XHQvKiBmb2xpb191cGRhdGVfZ2VuKCkgaGFzIHByb21vdGVkIHRoaXMgcGFnZT8gKi9cbm1tL3Ztc2Nhbi5jLTMzNDAtXHRcdGlmIChuZXdfZ2VuIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgbmV3X2dlbiAhPSBvbGRfZ2VuKSB7XG4tLVxubW0vdm1zY2FuLmM9MzU2MD1zdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS92bXNjYW4uYy0zNTc1LVx0aWYgKHdhbGspIHtcbm1tL3Ztc2Nhbi5jOjM1NzY6XHRcdG9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuLCBcdTAwMjZ0eXBlLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpO1xubW0vdm1zY2FuLmMtMzU3Ny1cdFx0aWYgKG9sZF9nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjgwCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNjE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBgcmVhZF9jdHJsX3Bvc2AgYW5kIGl0cyBVc2FnZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biBob3cgYHJlYWRfY3RybF9wb3NgIGlzIGJlaW5nIHVzZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBpbiB0aGUgY29udGV4dCBvZiB0aGVzZSBmdW5jdGlvbnMuIEZyb20gdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2UgYHJlYWRfY3RybF9wb3NgIGdldHMgY2FsbGVkIGluIHR3byBrZXkgZnVuY3Rpb25zOiBgZ2V0X3RpZXJfaWR4YCBhbmQgYGdldF90eXBlX3RvX3NjYW5gLiAKCkluIGBnZXRfdGllcl9pZHhgLCBpdCYjMzk7cyBjYWxsZWQgdHdpY2UuIFRoZSBmaXJzdCBjYWxsIHNldHMgdXAgYW4gaW5pdGlhbCBwb3NpdGlvbiwgdXNpbmcgYExSVV9USUVSX01JTmAuIFRoZSBzZWNvbmQgY2FsbCBpdGVyYXRlcyB0aHJvdWdoIHRpZXJzLCBmcm9tIGBMUlVfVElFUl9NSU4gJiM0MzsgMWAgdXAgdG8gYExSVV9USUVSX01BWGAsIGFuZCBpdCBsb29rcyBsaWtlIGEgY29tcGFyaXNvbiBpcyBtYWRlIHdpdGggdGhlIGhlbHAgb2YgYHBvc2l0aXZlX2N0cmxfZXJyYCwgd2hpY2ggSSYjMzk7bGwgbmVlZCB0byBjaGVjayBhcyB3ZWxsLgoKSW4gYGdldF90eXBlX3RvX3NjYW5gLCBgcmVhZF9jdHJsX3Bvc2AgaXMgY2FsbGVkIGZvciBib3RoIGBMUlVfR0VOX0FOT05gIGFuZCBgTFJVX0dFTl9GSUxFYCwgd2l0aCBzb21lIGxvZ2ljIHJlbGF0ZWQgdG8gYHN3YXBwaW5lc3NgLiBUaGlzIGlzIHdoZXJlIHRoZSBmdW5jdGlvbiBpcyBmZXRjaGluZyBkYXRhIGZvciBkaWZmZXJlbnQgdHlwZXMgb2YgTFJVIGVudHJpZXMuCgpOb3csIGZvY3VzaW5nIG9uIHRoZSBgcmVhZF9jdHJsX3Bvc2AgZnVuY3Rpb24gaXRzZWxmLiBJdCB0YWtlcyBhIGBzdHJ1Y3QgbHJ1dmVjYCwgYW4gaW50ZWdlciBgdHlwZWAsIGFuZCB0d28gdGllcnMgYXMgaW5wdXRzLCBhbmQgYWxzbyBhIGdhaW4gdmFsdWUuIEl0IHRoZW4gaXRlcmF0ZXMgdGhyb3VnaCB0aGUgdGllcnMgZnJvbSBgdGllcl9taW5gIHRvIGB0aWVyX21heGAuIFdpdGhpbiB0aGUgbG9vcCwgaXQgY2FsY3VsYXRlcyBhIHN1bSBvZiBgcmVmYXVsdGVkYCBhbmQgYHRvdGFsYCB2YWx1ZXMsIHdoaWNoIGFyZSB1c2VkIHRvIHVwZGF0ZSB0aGUgYHBvc2Agc3RydWN0dXJlLiBgcG9zYCBpcyBhIGBzdHJ1Y3QgY3RybF9wb3NgIHdoaWNoLCBpbXBvcnRhbnRseSwgaXMgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBpbiB0aGUgY2FsbGluZyBmdW5jdGlvbnMuIFRoZSBjb2RlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZXMgYHBvcy0mZ3Q7Z2FpbmAsIGBwb3MtJmd0O3JlZmF1bHRlZGAsIGFuZCBgcG9zLSZndDt0b3RhbGAgd2l0aGluIGByZWFkX2N0cmxfcG9zYC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhhdCBgZ2FpbmAgcGFyYW1ldGVyIGFuZCBob3cgaXQgaW5mbHVlbmNlcyB0aGUgYGN0cmxfcG9zYCBzdHJ1Y3QuCgpTbywgSSBuZWVkIHRvIGNoZWNrIGlmIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBlbHNld2hlcmUsIGFuZCBJIHNob3VsZCByZWFsbHkgbG9vayBhdCBob3cgdGhlIGBjdHJsX3Bvc2Agc3RydWN0IGlzIGJlaW5nIHVzZWQgYWZ0ZXIgdGhlIGNhbGxzIHRvIGByZWFkX2N0cmxfcG9zYCB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCBkYXRhIG1lYW5zIGluIHRoZSBsYXJnZXIgY29udGV4dC4gQWxzbywgSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgYGxydV9oaXN0X2Zyb21fc2VxYCBkb2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWFkX2N0cmxfcG9zJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTMyMjA9c3RydWN0IGN0cmxfcG9zIHtcbi0tXG5tbS92bXNjYW4uYy0zMjI1LVxubW0vdm1zY2FuLmM6MzIyNjpzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyX21pbixcbm1tL3Ztc2Nhbi5jLTMyMjctXHRcdFx0ICBpbnQgdGllcl9tYXgsIGludCBnYWluLCBzdHJ1Y3QgY3RybF9wb3MgKnBvcylcbi0tXG5tbS92bXNjYW4uYz00ODczPXN0YXRpYyBpbnQgZ2V0X3RpZXJfaWR4KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUpXG4tLVxubW0vdm1zY2FuLmMtNDg4Mi1cdCAqL1xubW0vdm1zY2FuLmM6NDg4MzpcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01JTiwgMiwgXHUwMDI2c3ApO1xubW0vdm1zY2FuLmMtNDg4NC1cdGZvciAodGllciA9IExSVV9USUVSX01JTiAmIzQzOyAxOyB0aWVyIFx1MDAzYz0gTFJVX1RJRVJfTUFYOyB0aWVyJiM0MzsmIzQzOykge1xubW0vdm1zY2FuLmM6NDg4NTpcdFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIHRpZXIsIDMsIFx1MDAyNnB2KTtcbm1tL3Ztc2Nhbi5jLTQ4ODYtXHRcdGlmICghcG9zaXRpdmVfY3RybF9lcnIoXHUwMDI2c3AsIFx1MDAyNnB2KSlcbi0tXG5tbS92bXNjYW4uYz00ODkzPXN0YXRpYyBpbnQgZ2V0X3R5cGVfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jLTQ5MDUtXHQgKi9cbm1tL3Ztc2Nhbi5jOjQ5MDY6XHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCxcbm1tL3Ztc2Nhbi5jLTQ5MDctXHRcdCAgICAgIHN3YXBwaW5lc3MsIFx1MDAyNnNwKTtcbm1tL3Ztc2Nhbi5jOjQ5MDg6XHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCxcbm1tL3Ztc2Nhbi5jLTQ5MDktXHRcdCAgICAgIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgXHUwMDI2cHYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjkyNwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDY4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTFJVIFJlZmVyZW5jZSBNaWdyYXRpb24gYW5kIE1lbW9yeSBDZ3JvdXAgTFJVIFNpemUgVXBkYXRlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gaG93IExSVSByZWZlcmVuY2VzIGFyZSBoYW5kbGVkIGR1cmluZyBmb2xpbyBtaWdyYXRpb24gYW5kIGhvdyB0aGVzZSB1cGRhdGVzIGludGVyYWN0IHdpdGggbWVtb3J5IGNncm91cCBMUlUgc2l6ZSB0cmFja2luZy4gRmlyc3QsIEkgbmVlZCB0byBjaGVjayB0aGUgYGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnNgIGZ1bmN0aW9uLiBJIHNlZSBpbiBgaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaGAgdGhhdCB0aGVyZSYjMzk7cyBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBJZiBgQ09ORklHX0xSVV9HRU5gIGlzIGRlZmluZWQsIHRoZSBmdW5jdGlvbiBzaW1wbHkgY29waWVzIHRoZSBMUlUgcmVmZXJlbmNlIGJpdHMgZGlyZWN0bHkuICBIb3dldmVyLCBpZiBgQ09ORklHX0xSVV9HRU5gIGlzICpub3QqIGRlZmluZWQsIGl0IHNlZW1zIHRvIG9ubHkgY29weSB0aGUgYFBHX3JlZmVyZW5jZWRgIGJpdCwgc3VnZ2VzdGluZyBhbiBvbGRlciBhcHByb2FjaC4gVGhlIGBCVUlMRF9CVUdfT05gIGVuc3VyZXMgbm8gb3ZlcmxhcCBvZiB0aGUgbWFzay4gTm93LCBsb29raW5nIGF0IGBtbS9taWdyYXRlLmNgLCBgZm9saW9fbWlncmF0ZV9mbGFnc2AgY2FsbHMgYGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnNgIHRvIHBlcmZvcm0gdGhlIGFjdHVhbCBjb3B5aW5nIG9mIHRoaXMgcmVmZXJlbmNlZCBzdGF0ZSBkdXJpbmcgZm9saW8gbWlncmF0aW9uLiBUaGlzIGlzIGVzc2VudGlhbCBmb3IgbWFpbnRhaW5pbmcgdGhlIGNvcnJlY3QgTFJVIHN0YXRlIGFmdGVyIGEgcGFnZSBtb3ZlLgoKTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggbWVtb3J5IGNncm91cCBMUlUgYWNjb3VudGluZy4gSSBoYXZlIHRvIGxvb2sgYXQgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCBhbmQgYG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemVgLiBUaGVzZSBmdW5jdGlvbnMgc2VlbSB0byBiZSBjb3JlIHRvIHRyYWNraW5nIHRoZSBzaXplIG9mIHRoZSBMUlUgbGlzdHMgd2l0aGluIGVhY2ggbWVtb3J5IGNncm91cC4gVGhlIGBtZW1fY2dyb3VwX3Blcl9ub2RlYCBzdHJ1Y3R1cmUsIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYCwgY29udGFpbnMgdGhlIGBscnVfem9uZV9zaXplYCBhcnJheSB3aGljaCBhcHBlYXJzIHRvIHRyYWNrIHRoZSBzaXplIG9mIGVhY2ggTFJVIGxpc3QsIHBlciB6b25lLCB3aXRoaW4gYSBtZW1vcnkgY2dyb3VwIG5vZGUuICBgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZWAgcmVhZHMgdGhpcyBhcnJheS4gSXQgdXNlcyBgUkVBRF9PTkNFYCBmb3IgYXRvbWljIHJlYWRzIHRvIHByZXZlbnQgaXNzdWVzIHdpdGggY29uY3VycmVuY3kgYW5kIHRoZSBgV0FSTl9PTl9PTkNFYCBvZmZlcnMgYW4gZXh0cmEgc2FmZWd1YXJkIHNob3VsZCB0aGUgc2l6ZSB0dXJuIG5lZ2F0aXZlLiBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgIG1vZGlmaWVzIHRoaXMgY291bnRlciwgYWRkaW5nIG9yIHN1YnRyYWN0aW5nIHBhZ2UgY291bnRzLCBhbmQgaGFzIGEgZ3VhcmQgYWdhaW5zdCBkaXNhYmxlZCBtZW1vcnkgY2dyb3Vwcy4KCkZpbmFsbHksIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiBgZm9saW9fZmxhZ3NgIGlzIGEgc3RhbmRhcmQgaW5saW5lIGZ1bmN0aW9uIHdpdGhpbiB0aGUga2VybmVsLiBJJiMzOTtsbCB1c2UgYGdyZXBgIHRvIHF1aWNrbHkgY29uZmlybSB0aGlzLCBhcyBJIGV4cGVjdCBpdCB3aWxsIGJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb19mbGFnc1xcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3NoL21tL2NhY2hlLXNoNC5jPTIxND1zdGF0aWMgdm9pZCBzaDRfZmx1c2hfY2FjaGVfcGFnZSh2b2lkICphcmdzKVxuLS1cbmFyY2gvc2gvbW0vY2FjaGUtc2g0LmMtMjQ5LVx0XHRtYXBfY29oZXJlbnQgPSAoY3VycmVudF9jcHVfZGF0YS5kY2FjaGUubl9hbGlhc2VzIFx1MDAyNlx1MDAyNlxuYXJjaC9zaC9tbS9jYWNoZS1zaDQuYzoyNTA6XHRcdFx0dGVzdF9iaXQoUEdfZGNhY2hlX2NsZWFuLCBmb2xpb19mbGFncyhmb2xpbywgMCkpIFx1MDAyNlx1MDAyNlxuYXJjaC9zaC9tbS9jYWNoZS1zaDQuYy0yNTEtXHRcdFx0Zm9saW9fbWFwcGVkKGZvbGlvKSk7XG4tLVxuYXJjaC94dGVuc2EvbW0vY2FjaGUuYz04OD12b2lkIGNsZWFyX3VzZXJfaGlnaHBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgdmFkZHIpXG4tLVxuYXJjaC94dGVuc2EvbW0vY2FjaGUuYy05NS1cdGttYXBfaW52YWxpZGF0ZV9jb2hlcmVudChwYWdlLCB2YWRkcik7XG5hcmNoL3h0ZW5zYS9tbS9jYWNoZS5jOjk2Olx0c2V0X2JpdChQR19hcmNoXzEsIGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG5hcmNoL3h0ZW5zYS9tbS9jYWNoZS5jLTk3LVx0Y2xlYXJfcGFnZV9hbGlhcyhrdmFkZHIsIHBhZGRyKTtcbi0tXG5hcmNoL3h0ZW5zYS9tbS9jYWNoZS5jPTEwMj12b2lkIGNvcHlfdXNlcl9oaWdocGFnZShzdHJ1Y3QgcGFnZSAqZHN0LCBzdHJ1Y3QgcGFnZSAqc3JjLFxuLS1cbmFyY2gveHRlbnNhL21tL2NhY2hlLmMtMTEzLVx0a21hcF9pbnZhbGlkYXRlX2NvaGVyZW50KGRzdCwgdmFkZHIpO1xuYXJjaC94dGVuc2EvbW0vY2FjaGUuYzoxMTQ6XHRzZXRfYml0KFBHX2FyY2hfMSwgZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbmFyY2gveHRlbnNhL21tL2NhY2hlLmMtMTE1LVx0Y29weV9wYWdlX2FsaWFzKGRzdF92YWRkciwgc3JjX3ZhZGRyLCBkc3RfcGFkZHIsIHNyY19wYWRkcik7XG4tLVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD0yMjU9c3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMjI2LXtcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6MjI3Olx0cmV0dXJuIGxydV9nZXRfcmVmc19mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpO1xuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0yMjgtfVxuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg9MjMwPXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IHJlZnMpXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTIzMS17XG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjIzMjpcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTIzMy1cbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTIzNi1cdFx0bHJ1X3NldF9yZWZzX2ZsYWdzKFx1MDAyNm5ld19mbGFncywgcmVmcyk7XG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjIzNzpcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTIzOC19XG4tLVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD0yNDA9c3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X2dlbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0yNDEte1xuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDoyNDI6XHRyZXR1cm4gbHJ1X2dldF9nZW5fZmxhZ3MoUkVBRF9PTkNFKCpjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpKTtcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMjQzLX1cbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTMzNT1zdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9hZGRfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIHJlY2xhaW1pbmcpXG4tLVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0zNTItXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUlOX05SX0dFTlMgYWJvdXQgUEdfYWN0aXZlICovXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjM1MzpcdHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0zNTQtXG4tLVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD0zNjU9c3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCByZWNsYWltaW5nKVxuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMzc3LVx0ZmxhZ3MgPSAhcmVjbGFpbWluZyBcdTAwMjZcdTAwMjYgbHJ1X2dlbl9pc19hY3RpdmUobHJ1dmVjLCBnZW4pID8gQklUKFBHX2FjdGl2ZSkgOiAwO1xuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDozNzg6XHRmbGFncyA9IHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0ssIGZsYWdzKTtcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMzc5LVx0Z2VuID0gKChmbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTMzNT1zdGF0aWMgaW5saW5lIHZvaWQgcGFnZV9pbml0X3BvaXNvbihzdHJ1Y3QgcGFnZSAqcGFnZSwgc2l6ZV90IHNpemUpXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMzM5LVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MzQwOnN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nICpjb25zdF9mb2xpb19mbGFncyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMzQxLVx0XHR1bnNpZ25lZCBuKVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTM0OS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjM1MDpzdGF0aWMgdW5zaWduZWQgbG9uZyAqZm9saW9fZmxhZ3Moc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgbilcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTM1MS17XG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9NDExPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBmb2xpb190ZXN0XyMjbmFtZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKSBcXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6NDEyOnsgcmV0dXJuIHRlc3RfYml0KFBHXyMjbmFtZSwgY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIHBhZ2UpKTsgfVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNDEzLVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTQxNT1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgZm9saW9fc2V0XyMjbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XFxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjQxNjp7IHNldF9iaXQoUEdfIyNuYW1lLCBmb2xpb19mbGFncyhmb2xpbywgcGFnZSkpOyB9XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC00MTctXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9NDE5PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBmb2xpb19jbGVhcl8jI25hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcdFxcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo0MjA6eyBjbGVhcl9iaXQoUEdfIyNuYW1lLCBmb2xpb19mbGFncyhmb2xpbywgcGFnZSkpOyB9XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC00MjEtXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9NDIzPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX2ZvbGlvX3NldF8jI25hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcdFxcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo0MjQ6eyBfX3NldF9iaXQoUEdfIyNuYW1lLCBmb2xpb19mbGFncyhmb2xpbywgcGFnZSkpOyB9XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC00MjUtXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9NDI3PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX2ZvbGlvX2NsZWFyXyMjbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XFxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjQyODp7IF9fY2xlYXJfYml0KFBHXyMjbmFtZSwgZm9saW9fZmxhZ3MoZm9saW8sIHBhZ2UpKTsgfVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNDI5LVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTQzMT1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgZm9saW9fdGVzdF9zZXRfIyNuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXHRcXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6NDMyOnsgcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoUEdfIyNuYW1lLCBmb2xpb19mbGFncyhmb2xpbywgcGFnZSkpOyB9XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC00MzMtXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9NDM1PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBmb2xpb190ZXN0X2NsZWFyXyMjbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKSBcXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6NDM2OnsgcmV0dXJuIHRlc3RfYW5kX2NsZWFyX2JpdChQR18jI25hbWUsIGZvbGlvX2ZsYWdzKGZvbGlvLCBwYWdlKSk7IH1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTQzNy1cbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD02MjQ9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNjI2LVx0cmV0dXJuIGZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykgXHUwMDI2XHUwMDI2XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo2Mjc6XHRcdFx0dGVzdF9iaXQoUEdfc3dhcGNhY2hlLCBjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpO1xuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNjI4LX1cbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD03Njc9c3RhdGljIGlubGluZSBib29sIGZvbGlvX3hvcl9mbGFnc19oYXNfd2FpdGVycyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTc2OS17XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo3NzA6XHRyZXR1cm4geG9yX3VubG9ja19pc19uZWdhdGl2ZV9ieXRlKG1hc2ssIGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC03NzEtfVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTc4Mz1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fdGVzdF91cHRvZGF0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNzg0LXtcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjc4NTpcdGJvb2wgcmV0ID0gdGVzdF9iaXQoUEdfdXB0b2RhdGUsIGNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC03ODYtXHQvKlxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTgwNT1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19mb2xpb19tYXJrX3VwdG9kYXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtODA3LVx0c21wX3dtYigpO1xuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6ODA4Olx0X19zZXRfYml0KFBHX3VwdG9kYXRlLCBmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtODA5LX1cbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD04MTE9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGZvbGlvX21hcmtfdXB0b2RhdGUoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC04MTgtXHRzbXBfd21iKCk7XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo4MTk6XHRzZXRfYml0KFBHX3VwdG9kYXRlLCBmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtODIwLX1cbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD04NDA9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGZvbGlvX3Rlc3RfaGVhZChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtODQxLXtcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjg0MjpcdHJldHVybiB0ZXN0X2JpdChQR19oZWFkLCBjb25zdF9mb2xpb19mbGFncyhmb2xpbywgRk9MSU9fUEZfQU5ZKSk7XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC04NDMtfVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oPTExODA9c3RhdGljIGlubGluZSBib29sIGZvbGlvX3RyeWxvY2soc3RydWN0IGZvbGlvICpmb2xpbylcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTExODEte1xuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6MTE4MjpcdHJldHVybiBsaWtlbHkoIXRlc3RfYW5kX3NldF9iaXRfbG9jayhQR19sb2NrZWQsIGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpO1xuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMTE4My19XG4tLVxubW0vZmlsZW1hcC5jPTEyNTA9c3RhdGljIGlubGluZSBpbnQgZm9saW9fd2FpdF9iaXRfY29tbW9uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBiaXRfbnIsXG4tLVxubW0vZmlsZW1hcC5jLTEzNDYtXHRcdCAqL1xubW0vZmlsZW1hcC5jOjEzNDc6XHRcdGlmICh1bmxpa2VseSh0ZXN0X2FuZF9zZXRfYml0KGJpdF9uciwgZm9saW9fZmxhZ3MoZm9saW8sIDApKSkpXG5tbS9maWxlbWFwLmMtMTM0OC1cdFx0XHRnb3RvIHJlcGVhdDtcbi0tXG5tbS9maWxlbWFwLmM9MTU2Mj12b2lkIGZvbGlvX2VuZF9wcml2YXRlXzIoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9maWxlbWFwLmMtMTU2NC1cdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF9wcml2YXRlXzIoZm9saW8pLCBmb2xpbyk7XG5tbS9maWxlbWFwLmM6MTU2NTpcdGNsZWFyX2JpdF91bmxvY2soUEdfcHJpdmF0ZV8yLCBmb2xpb19mbGFncyhmb2xpbywgMCkpO1xubW0vZmlsZW1hcC5jLTE1NjYtXHRmb2xpb193YWtlX2JpdChmb2xpbywgUEdfcHJpdmF0ZV8yKTtcbi0tXG5tbS9mb2xpby5jPTM1NT1zdGF0aWMgdm9pZCBscnVfZ2VuX2luY19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9mb2xpby5jLTM1Ni17XG5tbS9mb2xpby5jOjM1NzpcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG5tbS9mb2xpby5jLTM1OC1cdGludCByZWZzO1xuLS1cbm1tL2ZvbGlvLmMtMzc3LVx0XHRscnVfc2V0X3JlZnNfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCByZWZzICYjNDM7IDEpO1xubW0vZm9saW8uYzozNzg6XHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xubW0vZm9saW8uYy0zNzktfVxuLS1cbm1tL3Ztc2Nhbi5jPTMyOTc9c3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBpbnQgKnR5cGUsXG4tLVxubW0vdm1zY2FuLmMtMzI5OS17XG5tbS92bXNjYW4uYzozMzAwOlx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbm1tL3Ztc2Nhbi5jLTMzMDEtXHRpbnQgb2xkX2dlbjtcbi0tXG5tbS92bXNjYW4uYy0zMzI0LVx0XHRuZXdfZmxhZ3MgfD0gQklUKFBHX3dvcmtpbmdzZXQpO1xubW0vdm1zY2FuLmM6MzMyNTpcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG5tbS92bXNjYW4uYy0zMzI2LVxuLS1cbm1tL3Ztc2Nhbi5jPTMzMzE9c3RhdGljIGludCBfX2ZvbGlvX2luY19nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9nZW4sIGJvb2wgKmluY3JlYXNlZClcbm1tL3Ztc2Nhbi5jLTMzMzIte1xubW0vdm1zY2FuLmM6MzMzMzpcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG5tbS92bXNjYW4uYy0zMzM0LVx0aW50IG5ld19nZW47XG4tLVxubW0vdm1zY2FuLmMtMzM1MC1cdFx0bHJ1X3NldF9yZWZzX2ZsYWdzKFx1MDAyNm5ld19mbGFncywgMCk7XG5tbS92bXNjYW4uYzozMzUxOlx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbm1tL3Ztc2Nhbi5jLTMzNTItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNjIxCgkJCQkJCQlvdXRwdXQ6IDMyMwoJCQkJCQkJdGhvdWdodHM6IDQ4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBNZW1vcnkgU2FmZXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSBhIGZldyBrZXkgYXJlYXMgb2YgbW9kaWZpY2F0aW9uIGluIHRoaXMgcGF0Y2guIFRoZSBhY2NvdW50aW5nIG9mIGBscnVfem9uZV9zaXplYCBpcyBiZWluZyByZWZpbmVkLCB0cmFuc2l0aW9uaW5nIGZyb20gYHVuc2lnbmVkIGxvbmdgIHRvIGBsb25nYCB3aXRoaW4gYG1lbV9jZ3JvdXBfcGVyX25vZGVgLCBhbmQgdGhlIHJlbGF0ZWQgdXBkYXRlIGFuZCBnZXQgZnVuY3Rpb25zIGFyZSBiZWluZyBzaW1wbGlmaWVkLiBUaGVuLCB0aGVyZSYjMzk7cyBhIHNpZ25pZmljYW50IHJlZmFjdG9yaW5nIG9mIE1HTFJVIGFuZCBwYWdlIGZsYWcgaGVscGVyIGZ1bmN0aW9ucywgYWltaW5nIGZvciBhIG1vcmUgY29uc2lzdGVudCBhY2Nlc3MgcGF0dGVybiB1c2luZyBgZm9saW9fZmxhZ3MoZm9saW8sIDApYC4gIFRoaXMgaW5jbHVkZXMgaW50cm9kdWNpbmcgbmV3IGhlbHBlciBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIGZpbGUgTFJVIGZsYWdzLCBnZW5lcmF0aW9uIGZsYWdzLCBhbmQgcmVmZXJlbmNlIGZsYWdzLiBGaW5hbGx5LCB0aGUgcGF0Y2ggdG91Y2hlcyBgZm9saW9fdXBkYXRlX2dlbmAgZm9yIGJldHRlciByZXR1cm4gdmFsdWVzIGFuZCBzb21lIGFkanVzdG1lbnRzIHRvIGByZWFkX2N0cmxfcG9zYC4KClRoZSBjcnVjaWFsIHF1ZXN0aW9uLCBvZiBjb3Vyc2UsIGlzIG1lbW9yeSBzYWZldHkuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gYmUgZXhwb3NlZC4gRnJvbSBhIHF1aWNrIHNjYW4sIEkgZG9uJiMzOTt0IHNlZSBhbnkgb2J2aW91cyByZWQgZmxhZ3MgbGlrZSBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29waWVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZGF0YSBjb3VsZCBsZWFrLCBhbmQgSSBhbHNvIGRvbiYjMzk7dCBzZWUgYW55IGNoYW5nZXMgdGhhdCB3b3VsZCBpbnZvbHZlIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9mIHN0cnVjdHMsIHN0YWNrIGJ1ZmZlcnMsIG9yIGhlYXAgYnVmZmVycy4gQWxsIG9mIHRoZSBtb2RpZmljYXRpb25zIG9wZXJhdGUgb24gZXhpc3RpbmcgaW4tbWVtb3J5IGRhdGEgc3RydWN0dXJlcyBsaWtlIGZvbGlvcywgbHJ1dmVjcywgbWVtY2dzLCBhbmQgaW50ZXJuYWwgZmxhZ3MgdGhhdCBhcmUgYWxyZWFkeSBpbml0aWFsaXplZC4KCkxvb2tpbmcgY2xvc2VyIGF0IHRoZSBzcGVjaWZpYyByZWZhY3RvcmluZ3MsIHRoZSBvdXQtcGFyYW1ldGVyIGAqdHlwZWAgaW4gYGZvbGlvX3VwZGF0ZV9nZW5gIHNlZW1zIHNhZmUgYmVjYXVzZSBpdCYjMzk7cyBzZXQgYmVmb3JlIHJldHVybmluZyBhbnkgdmFsaWQgYG9sZF9nZW5gLCBhbmQgY2FsbGVycyBvbmx5IGFjY2VzcyBpdCBhZnRlciBjaGVja2luZyBgb2xkX2dlbiAmZ3Q7PSAwYC4gVGhlIHN0cnVjdCBgY3RybF9wb3NgIGJlaW5nIHBhc3NlZCB0byBgcmVhZF9jdHJsX3Bvc2AgYWxzbyBzZWVtcyBzYWZlIGJlY2F1c2UgaXQmIzM5O3MgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHVzZWQuIEkgYWxzbyBjaGVja2VkIGZvciBwYWRkaW5nIG9yIG1lbW9yeSBsZWFrcywgYW5kIEkgZG9uJiMzOTt0IHNlZSBhbnkgc3VjaCBpc3N1ZS4KCkdpdmVuIHRoaXMgYW5hbHlzaXMsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlZm9yZSwgJiMzNDtOZWVkc0tNU0FOJiMzNDsgc2hvdWxkIGJlIGZhbHNlLiBXaGlsZSB0aGUgcGF0Y2ggc2VlbXMgc2FmZSByZWdhcmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIEtBU0FOLCBMT0NLREVQLCBhbmQgdGhlIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgd291bGQgYmUgYXBwcm9wcmlhdGUgdG8gdmFsaWRhdGUgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwYWdlIGZsYWcgc3luY2hyb25pemF0aW9uIGNoYW5nZXMgbW9yZSB0aG9yb3VnaGx5LgoKT2theSwgd2l0aCB0aGF0IGFzc2Vzc21lbnQgY29tcGxldGUsIEkmIzM5O20gcmVhZHkgdG8gZmluYWxpemUgdGhlIHJlc3BvbnNlIGFuZCBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyByZWZhY3RvcnMgTXVsdGktR2VuZXJhdGlvbmFsIExSVSAoTUdMUlUpIGZvbGlvIGZsYWcgaGVscGVycywgcGFnZSB0YWJsZSAvIHJtYXAgc2Nhbm5pbmcgbG9naWMsIGFuZCBtZW1jZyBMUlUgem9uZSBzaXplIGFjY291bnRpbmcuIFNwZWNpZmljYWxseTpcbi0gSXQgcmVwbGFjZXMgZGlyZWN0IGBmb2xpby1cdTAwM2VmbGFncy5mYCBhY2Nlc3Mgd2l0aCBgZm9saW9fZmxhZ3MoZm9saW8sIDApYCBhY2Nlc3NvciBoZWxwZXJzIChgbHJ1X3NldF9nZW5fZmxhZ3NgLCBgbHJ1X2dldF9nZW5fZmxhZ3NgLCBgbHJ1X3NldF9yZWZzX2ZsYWdzYCwgYGxydV9nZXRfcmVmc19mbGFnc2AsIGBmb2xpb19zZXRfbHJ1X3JlZnNgLCBgZm9saW9fbWlncmF0ZV9scnVfcmVmc2ApLlxuLSBJdCBjbGVhbnMgdXAgYHJlYWRfY3RybF9wb3NgIHBhcmFtZXRlcml6YXRpb24gYW5kIGB3YWxrX3VwZGF0ZV9mb2xpb2AgY2FsbGVycy4gU3RhY2sgdmFyaWFibGVzIHN1Y2ggYXMgYHN0cnVjdCBjdHJsX3BvcyBwb3NgIGFyZSBmdWxseSBpbml0aWFsaXplZCBpbiBgcmVhZF9jdHJsX3Bvc2AsIGFuZCB0aGUgYGludCAqdHlwZWAgb3V0cHV0IHBhcmFtZXRlciBpbiBgZm9saW9fdXBkYXRlX2dlbmAgaXMgZ3VhcmFudGVlZCB0byBiZSBpbml0aWFsaXplZCB3aGVuIHRoZSByZXR1cm4gdmFsdWUgaW5kaWNhdGVzIHByb21vdGlvbiAoYG9sZF9nZW4gXHUwMDNlPSAwYCkuXG4tIEl0IGNvbnZlcnRzIGBtei1cdTAwM2VscnVfem9uZV9zaXplYCB0byBzaWduZWQgYGxvbmdgIHRvIHNpbXBsaWZ5IHVuZGVyZmxvdyBoYW5kbGluZy5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBQb3RlbnRpYWwgYnVncyBpbiB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIGNvbmN1cnJlbmN5L2xvY2tpbmcgcmFjZXMgb3Igc3RhdGUgY29ycnVwdGlvbikgYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIGtlcm5lbCBhc3NlcnRpb24gYnVpbGRzIHdpdGhvdXQgcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyByZWZhY3RvcnMgTXVsdGktR2VuZXJhdGlvbmFsIExSVSAoTUdMUlUpIGZvbGlvIGZsYWcgaGVscGVycywgcGFnZSB0YWJsZSAvIHJtYXAgc2Nhbm5pbmcgbG9naWMsIGFuZCBtZW1jZyBMUlUgem9uZSBzaXplIGFjY291bnRpbmcuIFNwZWNpZmljYWxseTpcbi0gSXQgcmVwbGFjZXMgZGlyZWN0IGBmb2xpby1cdTAwM2VmbGFncy5mYCBhY2Nlc3Mgd2l0aCBgZm9saW9fZmxhZ3MoZm9saW8sIDApYCBhY2Nlc3NvciBoZWxwZXJzIChgbHJ1X3NldF9nZW5fZmxhZ3NgLCBgbHJ1X2dldF9nZW5fZmxhZ3NgLCBgbHJ1X3NldF9yZWZzX2ZsYWdzYCwgYGxydV9nZXRfcmVmc19mbGFnc2AsIGBmb2xpb19zZXRfbHJ1X3JlZnNgLCBgZm9saW9fbWlncmF0ZV9scnVfcmVmc2ApLlxuLSBJdCBjbGVhbnMgdXAgYHJlYWRfY3RybF9wb3NgIHBhcmFtZXRlcml6YXRpb24gYW5kIGB3YWxrX3VwZGF0ZV9mb2xpb2AgY2FsbGVycy4gU3RhY2sgdmFyaWFibGVzIHN1Y2ggYXMgYHN0cnVjdCBjdHJsX3BvcyBwb3NgIGFyZSBmdWxseSBpbml0aWFsaXplZCBpbiBgcmVhZF9jdHJsX3Bvc2AsIGFuZCB0aGUgYGludCAqdHlwZWAgb3V0cHV0IHBhcmFtZXRlciBpbiBgZm9saW9fdXBkYXRlX2dlbmAgaXMgZ3VhcmFudGVlZCB0byBiZSBpbml0aWFsaXplZCB3aGVuIHRoZSByZXR1cm4gdmFsdWUgaW5kaWNhdGVzIHByb21vdGlvbiAoYG9sZF9nZW4gXHUwMDNlPSAwYCkuXG4tIEl0IGNvbnZlcnRzIGBtei1cdTAwM2VscnVfem9uZV9zaXplYCB0byBzaWduZWQgYGxvbmdgIHRvIHNpbXBsaWZ5IHVuZGVyZmxvdyBoYW5kbGluZy5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBQb3RlbnRpYWwgYnVncyBpbiB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIGNvbmN1cnJlbmN5L2xvY2tpbmcgcmFjZXMgb3Igc3RhdGUgY29ycnVwdGlvbikgYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIGtlcm5lbCBhc3NlcnRpb24gYnVpbGRzIHdpdGhvdXQgcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6MjM6NTEuMDYwNDg3MzQzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg2NzcwNzQ4OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUlHUkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibHJ1X2dlbl9sb29rX2Fyb3VuZFwiLFxuICAgIFwiZm9saW9fbWlncmF0ZV9mbGFnc1wiLFxuICAgIFwibWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVcIixcbiAgICBcIndhbGtfcHRlX3JhbmdlXCIsXG4gICAgXCJ3YWxrX3BtZF9yYW5nZV9sb2NrZWRcIixcbiAgICBcImZvbGlvX3VwZGF0ZV9nZW5cIixcbiAgICBcImV2aWN0X2ZvbGlvc1wiLFxuICAgIFwiaXNvbGF0ZV9mb2xpb1wiLFxuICAgIFwibHJ1X2dlbl9pbmNfcmVmc1wiLFxuICAgIFwibHJ1X2dlbl9jbGVhcl9yZWZzXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIE11bHRpLUdlbmVyYXRpb25hbCBMUlUgKE1HTFJVKSBmb2xpbyBmbGFnIGhlbHBlcnMsIHBhZ2UgdGFibGUgLyBybWFwIHNjYW5uaW5nIGxvZ2ljLCBhbmQgbWVtY2cgTFJVIHpvbmUgc2l6ZSBhY2NvdW50aW5nLiBTcGVjaWZpY2FsbHk6XFxuLSBJdCByZXBsYWNlcyBkaXJlY3QgYGZvbGlvLVxcdTAwM2VmbGFncy5mYCBhY2Nlc3Mgd2l0aCBgZm9saW9fZmxhZ3MoZm9saW8sIDApYCBhY2Nlc3NvciBoZWxwZXJzIChgbHJ1X3NldF9nZW5fZmxhZ3NgLCBgbHJ1X2dldF9nZW5fZmxhZ3NgLCBgbHJ1X3NldF9yZWZzX2ZsYWdzYCwgYGxydV9nZXRfcmVmc19mbGFnc2AsIGBmb2xpb19zZXRfbHJ1X3JlZnNgLCBgZm9saW9fbWlncmF0ZV9scnVfcmVmc2ApLlxcbi0gSXQgY2xlYW5zIHVwIGByZWFkX2N0cmxfcG9zYCBwYXJhbWV0ZXJpemF0aW9uIGFuZCBgd2Fsa191cGRhdGVfZm9saW9gIGNhbGxlcnMuIFN0YWNrIHZhcmlhYmxlcyBzdWNoIGFzIGBzdHJ1Y3QgY3RybF9wb3MgcG9zYCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgaW4gYHJlYWRfY3RybF9wb3NgLCBhbmQgdGhlIGBpbnQgKnR5cGVgIG91dHB1dCBwYXJhbWV0ZXIgaW4gYGZvbGlvX3VwZGF0ZV9nZW5gIGlzIGd1YXJhbnRlZWQgdG8gYmUgaW5pdGlhbGl6ZWQgd2hlbiB0aGUgcmV0dXJuIHZhbHVlIGluZGljYXRlcyBwcm9tb3Rpb24gKGBvbGRfZ2VuIFxcdTAwM2U9IDBgKS5cXG4tIEl0IGNvbnZlcnRzIGBtei1cXHUwMDNlbHJ1X3pvbmVfc2l6ZWAgdG8gc2lnbmVkIGBsb25nYCB0byBzaW1wbGlmeSB1bmRlcmZsb3cgaGFuZGxpbmcuXFxuXFxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBQb3RlbnRpYWwgYnVncyBpbiB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIGNvbmN1cnJlbmN5L2xvY2tpbmcgcmFjZXMgb3Igc3RhdGUgY29ycnVwdGlvbikgYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIGtlcm5lbCBhc3NlcnRpb24gYnVpbGRzIHdpdGhvdXQgcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBhY3Jvc3MgbW0vdm1zY2FuLmMsIG1tL2ZvbGlvLmMsIG1tL21lbWNvbnRyb2wuYywgYW5kIG1tL21pZ3JhdGUuYywgYWx0ZXJpbmcgTXVsdGktR2VuIExSVSAoTUdMUlUpIHJlZmVyZW5jZSB0cmFja2luZywgZm9saW8gZmxhZyBtYW5pcHVsYXRpb24sIHRpZXIgY2FsY3VsYXRpb25zLCBwYWdlIGV2aWN0aW9uLCBhbmQgbWVtY2cgTFJVIHpvbmUgYWNjb3VudGluZy4gSXQgYWxzbyBhZGRzIHNldmVyYWwgVk1fV0FSTl9PTl9PTkNFIGFzc2VydGlvbnMgYW5kIGNoYW5nZXMgc3luY2hyb25pemF0aW9uL2FyaXRobWV0aWMgbG9naWMuIFRoZXNlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjIzOjUxLjA2MDQ5MjI1M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzNTAxNzM3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGUzY2JiYzc2ZTFjOTY2Yzc2ZmU2MjEyOTlhMzJkMTdhZmE3ZTQwMDNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBTZXAgNiAxNjoyMzo0OSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuaW5kZXggYzc5OTkyNjQzNTU2MC4uMmI2NzY5NDI4NWQwNCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuQEAgLTEwMCw3ICsxMDAsNyBAQCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSB7XFxuIFxcdC8qIEZpZWxkcyB3aGljaCBnZXQgdXBkYXRlZCBvZnRlbiBhdCB0aGUgZW5kLiAqL1xcbiBcXHRzdHJ1Y3QgbHJ1dmVjXFx0XFx0bHJ1dmVjO1xcbiBcXHRDQUNIRUxJTkVfUEFERElORyhfcGFkMl8pO1xcbi1cXHR1bnNpZ25lZCBsb25nXFx0XFx0bHJ1X3pvbmVfc2l6ZVtNQVhfTlJfWk9ORVNdW05SX0xSVV9MSVNUU107XFxuK1xcdGxvbmdcXHRcXHRcXHRscnVfem9uZV9zaXplW01BWF9OUl9aT05FU11bTlJfTFJVX0xJU1RTXTtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXBfcmVjbGFpbV9pdGVyXFx0aXRlcjtcXG4gXFxuIFxcdC8qXFxuQEAgLTg4NywxMCArODg3LDE1IEBAIHN0YXRpYyBpbmxpbmVcXG4gdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gXFx0XFx0ZW51bSBscnVfbGlzdCBscnUsIGludCB6b25lX2lkeClcXG4ge1xcbitcXHRsb25nIHZhbDtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16O1xcbiBcXG4gXFx0bXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcXG4tXFx0cmV0dXJuIFJFQURfT05DRShtei1cXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7XFxuK1xcdHZhbCA9IFJFQURfT05DRShtei1cXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7XFxuK1xcdGlmIChXQVJOX09OX09OQ0UodmFsIFxcdTAwM2MgMCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIHZhbDtcXG4gfVxcbiBcXG4gdm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzayk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmggYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXFxuaW5kZXggNjIxYzg2NTNkOGY3ZS4uYWI2OWI5OTMwODkzZiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxcbkBAIC0zMCw2ICszMCwxNyBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19pc19maWxlX2xydShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRyZXR1cm4gIWZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbyk7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBmb2xpb19mbGFnc19pc19maWxlX2xydSAtIFNob3VsZCB0aGUgZm9saW8gYmUgb24gYSBmaWxlIExSVSBvciBhbm9uIExSVT9cXG4rICogQGZsYWdzOiBUaGUgZm9saW8ncyBmbGFncy5cXG4rICpcXG4rICogSnVzdCBsaWtlIGZvbGlvX2lzX2ZpbGVfbHJ1IGJ1dCB0YWtlIHRoZSBmb2xpbyBmbGFncyBkaXJlY3RseSBpbnN0ZWFkLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBpbnQgZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUoY29uc3QgdW5zaWduZWQgbG9uZyAqZmxhZ3MpXFxuK3tcXG4rXFx0cmV0dXJuICF0ZXN0X2JpdChQR19zd2FwYmFja2VkLCBmbGFncyk7XFxuK31cXG4rXFxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdFxcdFxcdFxcdGVudW0gbHJ1X2xpc3QgbHJ1LCBlbnVtIHpvbmVfdHlwZSB6aWQsXFxuIFxcdFxcdFxcdFxcdGxvbmcgbnJfcGFnZXMpXFxuQEAgLTE0MiwxMCArMTUzLDY2IEBAIHN0YXRpYyBpbmxpbmUgaW50IGxydV90aWVyX2Zyb21fcmVmcyhpbnQgcmVmcywgYm9vbCB3b3JraW5nc2V0KVxcbiBcXHRyZXR1cm4gd29ya2luZ3NldCA/IE1BWF9OUl9USUVSUyAtIDEgOiBvcmRlcl9iYXNlXzIocmVmcyk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuKy8qKlxcbisgKiBscnVfc2V0X2dlbl9mbGFncyAtIFNldCB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIHRvIHNwZWNpZmllZCBmb2xpbyBmbGFncy5cXG4rICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFnc1xcbisgKiBAZ2VuOiBnZW5lcmF0aW9uIG51bWJlciwgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSB2b2lkIGxydV9zZXRfZ2VuX2ZsYWdzKHVuc2lnbmVkIGxvbmcgKmZsYWdzLCBpbnQgZ2VuKVxcbit7XFxuK1xcdEJVSUxEX0JVR19PTihMUlVfR0VOX01BU0sgXFx1MDAyNiBMUlVfUkVGU19NQVNLKTtcXG4rXFx0Vk1fV0FSTl9PTl9PTkNFKGdlbiBcXHUwMDNlPSBNQVhfTlJfR0VOUyB8fCBnZW4gXFx1MDAzYyAwKTtcXG4rXFx0LyogU3RvcmUgZ2VuIG9mZnNldCBieSAxLCB6ZXJvIG1lYW5zIHRoZSBmb2xpbyBpcyBvZmYtbGlzdC4gKi9cXG4rXFx0KmZsYWdzIFxcdTAwMjY9IH5MUlVfR0VOX01BU0s7XFxuK1xcdCpmbGFncyB8PSAoZ2VuICsgMVVMKSBcXHUwMDNjXFx1MDAzYyBMUlVfR0VOX1BHT0ZGO1xcbit9XFxuK1xcbisvKipcXG4rICogbHJ1X2dldF9nZW5fZmxhZ3MgLSBSZXR1cm4gdGhlIExSVSBnZW5lcmF0aW9uIG51bWJlciBmcm9tIGZvbGlvIGZsYWdzLlxcbisgKiBAZmxhZ3M6IGZvbGlvIGZsYWdzXFxuKyAqXFxuKyAqIFJldHVybnM6IEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgKE1BWF9OUl9HRU5TIC0gMSksIGluY2x1c2l2ZS4gUmV0dXJuc1xcbisgKiAtMSBpZiB0aGUgZmxhZ3MgaW5kaWNhdGUgdGhlIGZvbGlvIGlzIG9mZiB0aGUgbGlzdCAoZS5nLiwgaXNvbGF0ZWQpLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBpbnQgbHJ1X2dldF9nZW5fZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncylcXG4re1xcbitcXHRpbnQgZ2VuID0gKChmbGFncyBcXHUwMDI2IExSVV9HRU5fTUFTSykgXFx1MDAzZVxcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xcbitcXG4rXFx0LyogRXhjbHVkZSB0aGUgbGVnYWwgLTEgZnJvbSB0aGUgdW5zaWduZWQgTUFYX05SX0dFTlMgY29tcGFyaXNvbiAqL1xcbitcXHRWTV9XQVJOX09OX09OQ0UoZ2VuICE9IC0xIFxcdTAwMjZcXHUwMDI2IGdlbiBcXHUwMDNlPSBNQVhfTlJfR0VOUyk7XFxuK1xcdHJldHVybiBnZW47XFxuK31cXG4rXFxuKy8qKlxcbisgKiBscnVfc2V0X3JlZnNfZmxhZ3MgLSBTZXQgdGhlIExSVSByZWZlcmVuY2VkIGNvdW50IHRvIGZvbGlvIGZsYWdzLlxcbisgKiBAZmxhZ3M6IHBvaW50ZXIgdG8gdGhlIGZvbGlvIGZsYWdzXFxuKyAqIEByZWZzOiByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IG51bWJlciwgYmV0d2VlbiAwIGFuZCBMUlVfUkVGU19NQVgsIGluY2x1c2l2ZS5cXG4rICpcXG4rICogRm9yIE1HTFJVLCBQR19yZWZlcmVuY2VkIGhvbGRzIHRoZSBmaXJzdCByZWYsIGFuZCB0aGUgZXh0cmEgYml0cyBob2xkIHRoZVxcbisgKiByZW1haW5pbmcgcmVmcy4gRm9yIGNsYXNzaWNhbCBMUlUgdGhlIGV4dHJhIGJpdHMgYXJlIG5vdCB1c2VkLCBzbyBpdCBjYW5cXG4rICogYWxzbyBiZSBzZWVuIGFzIHRoZSByZWZzIGNvdW50IG5ldmVyIGV4Y2VlZHMgMS4gSW4gYm90aCBjYXNlcywgcmVmcyA9PSAxXFxuKyAqIG1lYW5zIFBHX3JlZmVyZW5jZWQgaXMgc2V0IGFuZCB0aGUgZXh0cmEgYml0cyBhcmUgemVybywgYW5kIHJlZnMgPT0gMCBtZWFuc1xcbisgKiBQR19yZWZlcmVuY2VkIGFuZCB0aGUgZXh0cmEgYml0cyBhcmUgYWxsIHVuc2V0LlxcbisgKi9cXG4rc3RhdGljIGlubGluZSB2b2lkIGxydV9zZXRfcmVmc19mbGFncyh1bnNpZ25lZCBsb25nICpmbGFncywgdW5zaWduZWQgaW50IHJlZnMpXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBmbGFncyA9IFJFQURfT05DRShmb2xpby1cXHUwMDNlZmxhZ3MuZik7XFxuK1xcdFZNX1dBUk5fT05fT05DRShyZWZzIFxcdTAwM2UgTFJVX1JFRlNfTUFYKTtcXG4rXFx0QlVJTERfQlVHX09OKExSVV9SRUZTX01BWCAhPSAoTFJVX1JFRlNfTUFTSyBcXHUwMDNlXFx1MDAzZSBMUlVfUkVGU19QR09GRikgKyAxKTtcXG4gXFxuK1xcdCpmbGFncyBcXHUwMDI2PSB+TFJVX1JFRlNfRkxBR1M7XFxuK1xcdGlmICghcmVmcylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHQqZmxhZ3MgfD0gKEJJVChQR19yZWZlcmVuY2VkKSB8ICgocmVmcyAtIDFVTCkgXFx1MDAzY1xcdTAwM2MgTFJVX1JFRlNfUEdPRkYpKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGxydV9nZXRfcmVmc19mbGFncyAtIFJldHVybiBMUlUgcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCBmcm9tIGZvbGlvIGZsYWdzLlxcbisgKiBAZmxhZ3M6IGZvbGlvIGZsYWdzXFxuKyAqXFxuKyAqIFJlYWRzIHRoZSBMUlUgcmVmZXJlbmNlZCBjb3VudCBzZXQgYnkgbHJ1X3NldF9yZWZzX2ZsYWdzKCkuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIGludCBscnVfZ2V0X3JlZnNfZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncylcXG4re1xcbiBcXHRpZiAoIShmbGFncyBcXHUwMDI2IEJJVChQR19yZWZlcmVuY2VkKSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHQvKlxcbkBAIC0xNTUsMTEgKzIyMiwyNCBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRyZXR1cm4gKChmbGFncyBcXHUwMDI2IExSVV9SRUZTX01BU0spIFxcdTAwM2VcXHUwMDNlIExSVV9SRUZTX1BHT0ZGKSArIDE7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVxcdTAwM2VmbGFncy5mKTtcXG4rXFx0cmV0dXJuIGxydV9nZXRfcmVmc19mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpO1xcbit9XFxuIFxcbi1cXHRyZXR1cm4gKChmbGFncyBcXHUwMDI2IExSVV9HRU5fTUFTSykgXFx1MDAzZVxcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xcbitzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCByZWZzKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdG5ld19mbGFncyA9IG9sZF9mbGFncztcXG4rXFx0XFx0bHJ1X3NldF9yZWZzX2ZsYWdzKFxcdTAwMjZuZXdfZmxhZ3MsIHJlZnMpO1xcbitcXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X2dlbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdHJldHVybiBscnVfZ2V0X2dlbl9mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9pc19hY3RpdmUoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgZ2VuKVxcbkBAIC0yNzAsNyArMzUwLDcgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fYWRkX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpO1xcbiBcXHRmbGFncyA9IChnZW4gKyAxVUwpIFxcdTAwM2NcXHUwMDNjIExSVV9HRU5fUEdPRkY7XFxuIFxcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBNSU5fTlJfR0VOUyBhYm91dCBQR19hY3RpdmUgKi9cXG4tXFx0c2V0X21hc2tfYml0cyhcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYsIExSVV9HRU5fTUFTSyB8IEJJVChQR19hY3RpdmUpLCBmbGFncyk7XFxuK1xcdHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpO1xcbiBcXG4gXFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCAtMSwgZ2VuKTtcXG4gXFx0LyogZm9yIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZSgpICovXFxuQEAgLTI5NSw3ICszNzUsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXG4gXFx0LyogZm9yIGZvbGlvX21pZ3JhdGVfZmxhZ3MoKSAqL1xcbiBcXHRmbGFncyA9ICFyZWNsYWltaW5nIFxcdTAwMjZcXHUwMDI2IGxydV9nZW5faXNfYWN0aXZlKGxydXZlYywgZ2VuKSA/IEJJVChQR19hY3RpdmUpIDogMDtcXG4tXFx0ZmxhZ3MgPSBzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX0dFTl9NQVNLLCBmbGFncyk7XFxuK1xcdGZsYWdzID0gc2V0X21hc2tfYml0cyhmb2xpb19mbGFncyhmb2xpbywgMCksIExSVV9HRU5fTUFTSywgZmxhZ3MpO1xcbiBcXHRnZW4gPSAoKGZsYWdzIFxcdTAwMjYgTFJVX0dFTl9NQVNLKSBcXHUwMDNlXFx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XFxuIFxcbiBcXHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIGdlbiwgLTEpO1xcbkBAIC0zMDQsMTEgKzM4NCwxOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXFxuKy8qKlxcbisgKiBmb2xpb19taWdyYXRlX2xydV9yZWZzIC0gY29weSB0aGUgcmVmZXJlbmNlIHN0YXRlIHRvIGEgbmV3IGZvbGlvXFxuKyAqIEBuZXc6IHRoZSBkZXN0aW5hdGlvbiBmb2xpb1xcbisgKiBAb2xkOiB0aGUgc291cmNlIGZvbGlvXFxuKyAqXFxuKyAqIFRyYW5zZmVyIHRoZSByZWZlcmVuY2Ugc3RhdGUgdG8gQG5ldyBkdXJpbmcgbWlncmF0aW9uOiB0aGUgTUdMUlVcXG4rICogcmVmcyBjb3VudCwgaW5jbHVkaW5nIFBHX3JlZmVyZW5jZWQsIG9yIGp1c3QgUEdfcmVmZXJlbmNlZCBmb3IgdGhlXFxuKyAqIGFjdGl2ZS9pbmFjdGl2ZSBMUlUuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyByZWZzID0gUkVBRF9PTkNFKG9sZC1cXHUwMDNlZmxhZ3MuZikgXFx1MDAyNiBMUlVfUkVGU19NQVNLO1xcbi1cXG4tXFx0c2V0X21hc2tfYml0cyhcXHUwMDI2bmV3LVxcdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCByZWZzKTtcXG4rXFx0QlVJTERfQlVHX09OKExSVV9SRUZTX01BU0sgXFx1MDAyNiBCSVQoUEdfcmVmZXJlbmNlZCkpO1xcbitcXHRmb2xpb19zZXRfbHJ1X3JlZnMobmV3LCBmb2xpb19scnVfcmVmcyhvbGQpKTtcXG4gfVxcbiAjZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cXG4gXFxuQEAgLTMzNyw5ICs0MjUsMTAgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxcbiB7XFxuLVxcbitcXHRpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKG9sZCkpXFxuK1xcdFxcdGZvbGlvX3NldF9yZWZlcmVuY2VkKG5ldyk7XFxuIH1cXG4gI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxcbmluZGV4IDg0ZTIzN2YyYzE3ZGIuLmM5YWU3OTkxYThiMjAgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcXG5AQCAtNDk1LDExICs0OTUsMTQgQEAgZW51bSBscnV2ZWNfZmxhZ3Mge1xcbiAgKiBmb2xpby1cXHUwMDNlZmxhZ3MsIG1hc2tlZCBieSBMUlVfUkVGU19NQVNLLlxcbiAgKi9cXG4gI2RlZmluZSBNQVhfTlJfVElFUlNcXHRcXHQ0VVxcbisjZGVmaW5lIExSVV9USUVSX01JTlxcdFxcdDBVXFxuKyNkZWZpbmUgTFJVX1RJRVJfTUFYXFx0XFx0KE1BWF9OUl9USUVSUyAtIDEpXFxuIFxcbiAjaWZuZGVmIF9fR0VORVJBVElOR19CT1VORFNfSFxcbiBcXG4gI2RlZmluZSBMUlVfR0VOX01BU0tcXHRcXHQoKEJJVChMUlVfR0VOX1dJRFRIKSAtIDEpIFxcdTAwM2NcXHUwMDNjIExSVV9HRU5fUEdPRkYpXFxuICNkZWZpbmUgTFJVX1JFRlNfTUFTS1xcdFxcdCgoQklUKExSVV9SRUZTX1dJRFRIKSAtIDEpIFxcdTAwM2NcXHUwMDNjIExSVV9SRUZTX1BHT0ZGKVxcbisjZGVmaW5lIExSVV9SRUZTX01BWFxcdFxcdEJJVChMUlVfUkVGU19XSURUSClcXG4gXFxuIC8qXFxuICAqIEZvciBmb2xpb3MgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzLFxcbmRpZmYgLS1naXQgYS9tbS9mb2xpby5jIGIvbW0vZm9saW8uY1xcbmluZGV4IDUwYTZkYmU1NTk5OGUuLjQ3YTQzN2UwZjdmZGUgMTAwNjQ0XFxuLS0tIGEvbW0vZm9saW8uY1xcbisrKyBiL21tL2ZvbGlvLmNcXG5AQCAtMzU0LDI2ICszNTQsMjggQEAgc3RhdGljIHZvaWQgX19scnVfY2FjaGVfYWN0aXZhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFxuIHN0YXRpYyB2b2lkIGxydV9nZW5faW5jX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVxcdTAwM2VmbGFncy5mKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcXG4rXFx0aW50IHJlZnM7XFxuIFxcbiBcXHRpZiAoZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbykpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqL1xcbi1cXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpIHtcXG4tXFx0XFx0c2V0X21hc2tfYml0cyhcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XFxuK1xcdGlmICghZm9saW9fbHJ1X3JlZnMoZm9saW8pKSB7XFxuK1xcdFxcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4gXFx0ZG8ge1xcbi1cXHRcXHRpZiAoKG9sZF9mbGFncyBcXHUwMDI2IExSVV9SRUZTX01BU0spID09IExSVV9SRUZTX01BU0spIHtcXG4rXFx0XFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xcbitcXHRcXHRyZWZzID0gbHJ1X2dldF9yZWZzX2ZsYWdzKG9sZF9mbGFncyk7XFxuK1xcdFxcdGlmIChyZWZzID09IExSVV9SRUZTX01BWCkge1xcbiBcXHRcXHRcXHRpZiAoIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpXFxuIFxcdFxcdFxcdFxcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcXG4gXFx0XFx0XFx0cmV0dXJuO1xcbiBcXHRcXHR9XFxuLVxcbi1cXHRcXHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgKyBCSVQoTFJVX1JFRlNfUEdPRkYpO1xcbi1cXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBcXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcXG4rXFx0XFx0bHJ1X3NldF9yZWZzX2ZsYWdzKFxcdTAwMjZuZXdfZmxhZ3MsIHJlZnMgKyAxKTtcXG4rXFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbkBAIC0zODUsNyArMzg3LDggQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdGlmIChnZW4gXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuLVxcdHNldF9tYXNrX2JpdHMoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUyB8IEJJVChQR193b3JraW5nc2V0KSwgMCk7XFxuK1xcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XFxuK1xcdGZvbGlvX2NsZWFyX3dvcmtpbmdzZXQoZm9saW8pO1xcbiBcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXHRzZXEgPSBSRUFEX09OQ0UoZm9saW9fbHJ1dmVjKGZvbGlvKS1cXHUwMDNlbHJ1Z2VuLm1pbl9zZXFbdHlwZV0pO1xcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcXG5pbmRleCBiZDFlN2UxNTQ0MjY1Li5mMTdiMmIyZDYxMDU1IDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xcbisrKyBiL21tL21lbWNvbnRyb2wuY1xcbkBAIC0xNTI5LDI4ICsxNTI5LDEyIEBAIHZvaWQgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIGxydV9saXN0IGxydSxcXG4gXFx0XFx0XFx0XFx0aW50IHppZCwgbG9uZyBucl9wYWdlcylcXG4ge1xcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XFxuLVxcdHVuc2lnbmVkIGxvbmcgKmxydV9zaXplO1xcbi1cXHRsb25nIHNpemU7XFxuIFxcbiBcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRteiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xcbi1cXHRscnVfc2l6ZSA9IFxcdTAwMjZtei1cXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6aWRdW2xydV07XFxuLVxcbi1cXHRpZiAobnJfcGFnZXMgXFx1MDAzYyAwKVxcbi1cXHRcXHQqbHJ1X3NpemUgKz0gbnJfcGFnZXM7XFxuLVxcbi1cXHRzaXplID0gKmxydV9zaXplO1xcbi1cXHRpZiAoV0FSTl9PTkNFKHNpemUgXFx1MDAzYyAwLFxcbi1cXHRcXHRcXFwiJXMoJXAsICVkLCAlbGQpOiBscnVfc2l6ZSAlbGRcXFxcblxcXCIsXFxuLVxcdFxcdF9fZnVuY19fLCBscnV2ZWMsIGxydSwgbnJfcGFnZXMsIHNpemUpKSB7XFxuLVxcdFxcdFZNX0JVR19PTigxKTtcXG4tXFx0XFx0KmxydV9zaXplID0gMDtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKG5yX3BhZ2VzIFxcdTAwM2UgMClcXG4tXFx0XFx0KmxydV9zaXplICs9IG5yX3BhZ2VzO1xcbitcXHRtei1cXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6aWRdW2xydV0gKz0gbnJfcGFnZXM7XFxuIH1cXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmNcXG5pbmRleCAxNWI0NTgzMmJjZmE3Li5hMzY5ZDBjOTVjMzg2IDEwMDY0NFxcbi0tLSBhL21tL21pZ3JhdGUuY1xcbisrKyBiL21tL21pZ3JhdGUuY1xcbkBAIC03NzYsOCArNzc2LDkgQEAgdm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0aW50IGNwdXBpZDtcXG4gXFxuLVxcdGlmIChmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKVxcbi1cXHRcXHRmb2xpb19zZXRfcmVmZXJlbmNlZChuZXdmb2xpbyk7XFxuK1xcdC8qIENvcHkgdGhlIHJlZmVyZW5jZSBzdGF0ZSwgaW5jbHVkaW5nIFBHX3JlZmVyZW5jZWQgKi9cXG4rXFx0Zm9saW9fbWlncmF0ZV9scnVfcmVmcyhuZXdmb2xpbywgZm9saW8pO1xcbitcXG4gXFx0aWYgKGZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKVxcbiBcXHRcXHRmb2xpb19tYXJrX3VwdG9kYXRlKG5ld2ZvbGlvKTtcXG4gXFx0aWYgKGZvbGlvX3Rlc3RfY2xlYXJfYWN0aXZlKGZvbGlvKSkge1xcbkBAIC04MDcsNyArODA4LDYgQEAgdm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdGlmIChmb2xpb190ZXN0X2lkbGUoZm9saW8pKVxcbiBcXHRcXHRmb2xpb19zZXRfaWRsZShuZXdmb2xpbyk7XFxuIFxcbi1cXHRmb2xpb19taWdyYXRlX3JlZnMobmV3Zm9saW8sIGZvbGlvKTtcXG4gXFx0LypcXG4gXFx0ICogQ29weSBOVU1BIGluZm9ybWF0aW9uIHRvIHRoZSBuZXcgcGFnZSwgdG8gcHJldmVudCBvdmVyLWVhZ2VyXFxuIFxcdCAqIGZ1dHVyZSBtaWdyYXRpb25zIG9mIHRoaXMgc2FtZSBwYWdlLlxcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXFxuaW5kZXggMjQ1ZjY4Yzc1YjI4OS4uNDBkM2YxYjQ4YTc0YyAxMDA2NDRcXG4tLS0gYS9tbS92bXNjYW4uY1xcbisrKyBiL21tL3Ztc2Nhbi5jXFxuQEAgLTg2MywxOSArODYzLDIyIEBAIHN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG4gXFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pIFxcdTAwMjZcXHUwMDI2ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKSB7XFxuIFxcdFxcdC8qIEFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLiAqL1xcbiBcXHRcXHRpZiAoaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7XFxuLVxcdFxcdFxcdHNldF9tYXNrX2JpdHMoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTtcXG4rXFx0XFx0XFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xcbitcXHRcXHRcXHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xcbiBcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0c2V0X21hc2tfYml0cyhcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XFxuK1xcdFxcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0fVxcbiBcXG4gXFx0LyogUHJvbW90ZSBvbiBzZWNvbmQgYWNjZXNzICovXFxuLVxcdGlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgXFx1MDAzZSAxKVxcbi1cXHRcXHRzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7XFxuLVxcdGVsc2VcXG4rXFx0aWYgKGZvbGlvX2xydV9yZWZzKGZvbGlvKSBcXHUwMDNlIDEpIHtcXG4rXFx0XFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xcbitcXHRcXHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xcbitcXHR9IGVsc2Uge1xcbiBcXHRcXHRmb2xpb19tYXJrX2FjY2Vzc2VkKGZvbGlvKTtcXG4rXFx0fVxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiAjZWxzZVxcbkBAIC0zMjIwLDggKzMyMjMsOCBAQCBzdHJ1Y3QgY3RybF9wb3Mge1xcbiBcXHRpbnQgZ2FpbjtcXG4gfTtcXG4gXFxuLXN0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXIsIGludCBnYWluLFxcbi1cXHRcXHRcXHQgIHN0cnVjdCBjdHJsX3BvcyAqcG9zKVxcbitzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyX21pbixcXG4rXFx0XFx0XFx0ICBpbnQgdGllcl9tYXgsIGludCBnYWluLCBzdHJ1Y3QgY3RybF9wb3MgKnBvcylcXG4ge1xcbiBcXHRpbnQgaTtcXG4gXFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5AQCAtMzIzMCw3ICszMjMzLDcgQEAgc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllciwgaW50IGdhaW4sXFxuIFxcdHBvcy1cXHUwMDNlZ2FpbiA9IGdhaW47XFxuIFxcdHBvcy1cXHUwMDNlcmVmYXVsdGVkID0gcG9zLVxcdTAwM2V0b3RhbCA9IDA7XFxuIFxcbi1cXHRmb3IgKGkgPSB0aWVyICUgTUFYX05SX1RJRVJTOyBpIFxcdTAwM2M9IG1pbih0aWVyLCBNQVhfTlJfVElFUlMgLSAxKTsgaSsrKSB7XFxuK1xcdGZvciAoaSA9IHRpZXJfbWluOyBpIFxcdTAwM2M9IHRpZXJfbWF4OyBpKyspIHtcXG4gXFx0XFx0cG9zLVxcdTAwM2VyZWZhdWx0ZWQgKz0gbHJ1Z2VuLVxcdTAwM2VhdmdfcmVmYXVsdGVkW3R5cGVdW2ldICtcXG4gXFx0XFx0XFx0XFx0ICBhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZscnVnZW4tXFx1MDAzZXJlZmF1bHRlZFtoaXN0XVt0eXBlXVtpXSk7XFxuIFxcdFxcdHBvcy1cXHUwMDNldG90YWwgKz0gbHJ1Z2VuLVxcdTAwM2VhdmdfdG90YWxbdHlwZV1baV0gK1xcbkBAIC0zMjkxLDExICszMjk0LDExIEBAIHN0YXRpYyBib29sIHBvc2l0aXZlX2N0cmxfZXJyKHN0cnVjdCBjdHJsX3BvcyAqc3AsIHN0cnVjdCBjdHJsX3BvcyAqcHYpXFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuIFxcbiAvKiBwcm9tb3RlIHBhZ2VzIGFjY2Vzc2VkIHRocm91Z2ggcGFnZSB0YWJsZXMgKi9cXG4tc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXFxuK3N0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgaW50ICp0eXBlLFxcbitcXHRcXHRcXHQgICAgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVxcdTAwM2VmbGFncy5mKTtcXG4tXFxuLVxcdFZNX1dBUk5fT05fT05DRShnZW4gXFx1MDAzZT0gTUFYX05SX0dFTlMpO1xcbitcXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xcbitcXHRpbnQgb2xkX2dlbjtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUywgYW5kIGFjdGl2YXRlIGZpbGUtYmFja2VkXFxuQEAgLTMzMDQsMzEgKzMzMDcsMzUgQEAgc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFcXG4gXFx0ICovXFxuIFxcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgIWlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkge1xcbi1cXHRcXHRzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcXG4rXFx0XFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcXG4gXFx0XFx0cmV0dXJuIC0xO1xcbiBcXHR9XFxuIFxcbiBcXHRkbyB7XFxuK1xcdFxcdG9sZF9nZW4gPSBscnVfZ2V0X2dlbl9mbGFncyhvbGRfZmxhZ3MpO1xcbitcXHRcXHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XFxuK1xcbiBcXHRcXHQvKiBscnVfZ2VuX2RlbF9mb2xpbygpIGhhcyBpc29sYXRlZCB0aGlzIHBhZ2U/ICovXFxuLVxcdFxcdGlmICghKG9sZF9mbGFncyBcXHUwMDI2IExSVV9HRU5fTUFTSykpXFxuLVxcdFxcdFxcdHJldHVybiAtMTtcXG4rXFx0XFx0aWYgKG9sZF9nZW4gXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRicmVhaztcXG4gXFxuLVxcdFxcdG5ld19mbGFncyA9IG9sZF9mbGFncyBcXHUwMDI2IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpO1xcbi1cXHRcXHRuZXdfZmxhZ3MgfD0gKChnZW4gKyAxVUwpIFxcdTAwM2NcXHUwMDNjIExSVV9HRU5fUEdPRkYpIHwgQklUKFBHX3dvcmtpbmdzZXQpO1xcbi1cXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBcXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcXG4rXFx0XFx0bHJ1X3NldF9nZW5fZmxhZ3MoXFx1MDAyNm5ld19mbGFncywgbmV3X2dlbik7XFxuK1xcdFxcdGxydV9zZXRfcmVmc19mbGFncyhcXHUwMDI2bmV3X2ZsYWdzLCAwKTtcXG4rXFx0XFx0bmV3X2ZsYWdzIHw9IEJJVChQR193b3JraW5nc2V0KTtcXG4rXFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XFxuIFxcbi1cXHRyZXR1cm4gKChvbGRfZmxhZ3MgXFx1MDAyNiBMUlVfR0VOX01BU0spIFxcdTAwM2VcXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcXG4rXFx0KnR5cGUgPSBmb2xpb19mbGFnc19pc19maWxlX2xydShcXHUwMDI2b2xkX2ZsYWdzKTtcXG4rXFx0cmV0dXJuIG9sZF9nZW47XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgX19mb2xpb19pbmNfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfZ2VuLCBib29sICppbmNyZWFzZWQpXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cXHUwMDNlZmxhZ3MuZik7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XFxuIFxcdGludCBuZXdfZ2VuO1xcbiBcXG4tXFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCEob2xkX2ZsYWdzIFxcdTAwMjYgTFJVX0dFTl9NQVNLKSwgZm9saW8pO1xcbi1cXG4gXFx0ZG8ge1xcbi1cXHRcXHRuZXdfZ2VuID0gKChvbGRfZmxhZ3MgXFx1MDAyNiBMUlVfR0VOX01BU0spIFxcdTAwM2VcXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcXG4rXFx0XFx0bmV3X2dlbiA9IGxydV9nZXRfZ2VuX2ZsYWdzKG9sZF9mbGFncyk7XFxuK1xcbiBcXHRcXHQvKiBmb2xpb191cGRhdGVfZ2VuKCkgaGFzIHByb21vdGVkIHRoaXMgcGFnZT8gKi9cXG4gXFx0XFx0aWYgKG5ld19nZW4gXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBuZXdfZ2VuICE9IG9sZF9nZW4pIHtcXG4gXFx0XFx0XFx0aWYgKGluY3JlYXNlZClcXG5AQCAtMzMzNiwxMSArMzM0MywxMiBAQCBzdGF0aWMgaW50IF9fZm9saW9faW5jX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX2dlbiwgYm9vbCAqaW5jcmVhc2VkKVxcbiBcXHRcXHRcXHRyZXR1cm4gbmV3X2dlbjtcXG4gXFx0XFx0fVxcbiBcXG4rXFx0XFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xcbiBcXHRcXHRuZXdfZ2VuID0gKG9sZF9nZW4gKyAxKSAlIE1BWF9OUl9HRU5TO1xcbiBcXG4tXFx0XFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzIFxcdTAwMjYgfihMUlVfR0VOX01BU0sgfCBMUlVfUkVGU19GTEFHUyk7XFxuLVxcdFxcdG5ld19mbGFncyB8PSAobmV3X2dlbiArIDFVTCkgXFx1MDAzY1xcdTAwM2MgTFJVX0dFTl9QR09GRjtcXG4tXFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgXFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XFxuK1xcdFxcdGxydV9zZXRfZ2VuX2ZsYWdzKFxcdTAwMjZuZXdfZmxhZ3MsIG5ld19nZW4pO1xcbitcXHRcXHRscnVfc2V0X3JlZnNfZmxhZ3MoXFx1MDAyNm5ld19mbGFncywgMCk7XFxuK1xcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFxcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xcbiBcXG4gXFx0aWYgKGluY3JlYXNlZClcXG4gXFx0XFx0KmluY3JlYXNlZCA9IHRydWU7XFxuQEAgLTMzNjIsOSArMzM3MCw4IEBAIHN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHVwZGF0ZV9iYXRjaF9zaXplKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLVxcdFxcdFxcdCAgICAgIGludCBvbGRfZ2VuLCBpbnQgbmV3X2dlbilcXG4rXFx0XFx0XFx0ICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuLCBpbnQgdHlwZSlcXG4ge1xcbi1cXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcXG4gXFx0aW50IHpvbmUgPSBmb2xpb196b25lbnVtKGZvbGlvKTtcXG4gXFx0aW50IGRlbHRhID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbiBcXG5AQCAtMzU1MSwyMiArMzU1OCwyNCBAQCBzdGF0aWMgYm9vbCBzdWl0YWJsZV90b19zY2FuKGludCB0b3RhbCwgaW50IHlvdW5nKVxcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGJvb2wgZGlydHkpXFxuK1xcdFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBkaXJ0eSlcXG4ge1xcbi1cXHRpbnQgb2xkX2dlbjtcXG4rXFx0aW50IG5ld19nZW4sIG9sZF9nZW4sIHR5cGU7XFxuIFxcbiBcXHRpZiAoIWZvbGlvKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbitcXHRuZXdfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShSRUFEX09OQ0UobHJ1dmVjLVxcdTAwM2VscnVnZW4ubWF4X3NlcSkpO1xcbitcXG4gXFx0aWYgKGRpcnR5IFxcdTAwMjZcXHUwMDI2ICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgIShmb2xpb190ZXN0X2Fub24oZm9saW8pIFxcdTAwMjZcXHUwMDI2IGZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgICAgIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkpXFxuIFxcdFxcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xcbiBcXG4gXFx0aWYgKHdhbGspIHtcXG4tXFx0XFx0b2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sIFxcdTAwMjZ2bWEtXFx1MDAzZWZsYWdzKTtcXG4rXFx0XFx0b2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sIFxcdTAwMjZ0eXBlLCBcXHUwMDI2dm1hLVxcdTAwM2VmbGFncyk7XFxuIFxcdFxcdGlmIChvbGRfZ2VuIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgb2xkX2dlbiAhPSBuZXdfZ2VuKVxcbi1cXHRcXHRcXHR1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XFxuK1xcdFxcdFxcdHVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuLCB0eXBlKTtcXG4gXFx0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcXHUwMDI2dm1hLVxcdTAwM2VmbGFncykpIHtcXG4gXFx0XFx0b2xkX2dlbiA9IGZvbGlvX2xydV9nZW4oZm9saW8pO1xcbiBcXHRcXHRpZiAob2xkX2dlbiBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IG9sZF9nZW4gIT0gbmV3X2dlbilcXG5AQCAtMzU4OCw4ICszNTk3LDYgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIFxcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVxcdTAwM2Vwcml2YXRlO1xcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay1cXHUwMDNlbHJ1dmVjKTtcXG4gXFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdCh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbi1cXHRERUZJTkVfTUFYX1NFUSh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbi1cXHRpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcXG4gXFx0dW5zaWduZWQgaW50IG5yO1xcbiBcXHRwbWRfdCBwbWR2YWw7XFxuIFxcbkBAIC0zNjQwLDcgKzM2NDcsNyBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbiBcXHRcXHRpZiAobGFzdCAhPSBmb2xpbykge1xcbi1cXHRcXHRcXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLVxcdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xcbitcXHRcXHRcXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLVxcdTAwM2V2bWEsIHdhbGstXFx1MDAzZWxydXZlYywgbGFzdCwgZGlydHkpO1xcbiBcXG4gXFx0XFx0XFx0bGFzdCA9IGZvbGlvO1xcbiBcXHRcXHRcXHRkaXJ0eSA9IGZhbHNlO1xcbkBAIC0zNjUzLDcgKzM2NjAsNyBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0XFx0d2Fsay1cXHUwMDNlbW1fc3RhdHNbTU1fTEVBRl9ZT1VOR10gKz0gbnI7XFxuIFxcdH1cXG4gXFxuLVxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXFx1MDAzZXZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XFxuK1xcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXFx1MDAzZXZtYSwgd2Fsay1cXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XFxuIFxcdGxhc3QgPSBOVUxMO1xcbiBcXG4gXFx0aWYgKGkgXFx1MDAzYyBQVFJTX1BFUl9QVEUgXFx1MDAyNlxcdTAwMjYgZ2V0X25leHRfdm1hKFBNRF9NQVNLLCBQQUdFX1NJWkUsIGFyZ3MsIFxcdTAwMjZzdGFydCwgXFx1MDAyNmVuZCkpXFxuQEAgLTM2NzYsOCArMzY4Myw2IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhXFxuIFxcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVxcdTAwM2Vwcml2YXRlO1xcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay1cXHUwMDNlbHJ1dmVjKTtcXG4gXFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdCh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbi1cXHRERUZJTkVfTUFYX1NFUSh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbi1cXHRpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcXG4gXFxuIFxcdFZNX1dBUk5fT05fT05DRShwdWRfbGVhZigqcHVkKSk7XFxuIFxcbkBAIC0zNzMxLDcgKzM3MzYsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxcbiBcXHRcXHRcXHRnb3RvIG5leHQ7XFxuIFxcbiBcXHRcXHRpZiAobGFzdCAhPSBmb2xpbykge1xcbi1cXHRcXHRcXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xcbitcXHRcXHRcXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIHdhbGstXFx1MDAzZWxydXZlYywgbGFzdCwgZGlydHkpO1xcbiBcXG4gXFx0XFx0XFx0bGFzdCA9IGZvbGlvO1xcbiBcXHRcXHRcXHRkaXJ0eSA9IGZhbHNlO1xcbkBAIC0zNzQ1LDcgKzM3NTAsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxcbiBcXHRcXHRpID0gaSBcXHUwMDNlIE1JTl9MUlVfQkFUQ0ggPyAwIDogZmluZF9uZXh0X2JpdChiaXRtYXAsIE1JTl9MUlVfQkFUQ0gsIGkpICsgMTtcXG4gXFx0fSB3aGlsZSAoaSBcXHUwMDNjPSBNSU5fTFJVX0JBVENIKTtcXG4gXFxuLVxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XFxuK1xcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay1cXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XFxuIFxcbiBcXHRsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTtcXG4gXFx0c3Bpbl91bmxvY2socHRsKTtcXG5AQCAtNDM1MSw4ICs0MzU2LDYgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxcbiBcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gZm9saW9fcGdkYXQoZm9saW8pO1xcbiBcXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XFxuIFxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZTtcXG4tXFx0dW5zaWduZWQgbG9uZyBtYXhfc2VxO1xcbi1cXHRpbnQgZ2VuO1xcbiBcXG4gXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChwdm13LVxcdTAwM2VwdGwpO1xcbiBcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF9scnUoZm9saW8pLCBmb2xpbyk7XFxuQEAgLTQzODksOCArNDM5Miw2IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcXG4gXFxuIFxcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XFxuIFxcdGxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7XFxuLVxcdG1heF9zZXEgPSBSRUFEX09OQ0UoKGxydXZlYyktXFx1MDAzZWxydWdlbi5tYXhfc2VxKTtcXG4tXFx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcXG4gXFx0bW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcXG4gXFxuIFxcdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XFxuQEAgLTQ0MjIsNyArNDQyMyw3IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbiBcXHRcXHRpZiAobGFzdCAhPSBmb2xpbykge1xcbi1cXHRcXHRcXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xcbitcXHRcXHRcXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxydXZlYywgbGFzdCwgZGlydHkpO1xcbiBcXG4gXFx0XFx0XFx0bGFzdCA9IGZvbGlvO1xcbiBcXHRcXHRcXHRkaXJ0eSA9IGZhbHNlO1xcbkBAIC00NDM0LDEzICs0NDM1LDE0IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcXG4gXFx0XFx0eW91bmcgKz0gbnI7XFxuIFxcdH1cXG4gXFxuLVxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XFxuK1xcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XFxuIFxcbiBcXHRsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTtcXG4gXFxuIFxcdC8qIGZlZWRiYWNrIGZyb20gcm1hcCB3YWxrZXJzIHRvIHBhZ2UgdGFibGUgd2Fsa2VycyAqL1xcbiBcXHRpZiAobW1fc3RhdGUgXFx1MDAyNlxcdTAwMjYgc3VpdGFibGVfdG9fc2NhbihpLCB5b3VuZykpXFxuLVxcdFxcdHVwZGF0ZV9ibG9vbV9maWx0ZXIobW1fc3RhdGUsIG1heF9zZXEsIHB2bXctXFx1MDAzZXBtZCk7XFxuK1xcdFxcdHVwZGF0ZV9ibG9vbV9maWx0ZXIobW1fc3RhdGUsIFJFQURfT05DRShscnV2ZWMtXFx1MDAzZWxydWdlbi5tYXhfc2VxKSxcXG4rXFx0XFx0XFx0XFx0ICAgIHB2bXctXFx1MDAzZXBtZCk7XFxuIFxcbiBcXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XFxuIFxcbkBAIC00Nzg1LDcgKzQ3ODcsNyBAQCBzdGF0aWMgYm9vbCBpc29sYXRlX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYVxcbiBcXG4gXFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXFxuIFxcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSlcXG4tXFx0XFx0c2V0X21hc2tfYml0cyhcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIDApO1xcbitcXHRcXHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xcbiBcXG4gXFx0c3VjY2VzcyA9IGxydV9nZW5fZGVsX2ZvbGlvKGxydXZlYywgZm9saW8sIHRydWUpO1xcbiBcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIXN1Y2Nlc3MsIGZvbGlvKTtcXG5AQCAtNDg3OCw5ICs0ODgwLDkgQEAgc3RhdGljIGludCBnZXRfdGllcl9pZHgoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSlcXG4gXFx0ICogVGhpcyB2YWx1ZSBpcyBjaG9zZW4gYmVjYXVzZSBhbnkgb3RoZXIgdGllciB3b3VsZCBoYXZlIGF0IGxlYXN0IHR3aWNlXFxuIFxcdCAqIGFzIG1hbnkgcmVmYXVsdHMgYXMgdGhlIGZpcnN0IHRpZXIuXFxuIFxcdCAqL1xcbi1cXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgMCwgMiwgXFx1MDAyNnNwKTtcXG4tXFx0Zm9yICh0aWVyID0gMTsgdGllciBcXHUwMDNjIE1BWF9OUl9USUVSUzsgdGllcisrKSB7XFxuLVxcdFxcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0aWVyLCAzLCBcXHUwMDI2cHYpO1xcbitcXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NSU4sIDIsIFxcdTAwMjZzcCk7XFxuK1xcdGZvciAodGllciA9IExSVV9USUVSX01JTiArIDE7IHRpZXIgXFx1MDAzYz0gTFJVX1RJRVJfTUFYOyB0aWVyKyspIHtcXG4rXFx0XFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIHRpZXIsIDMsIFxcdTAwMjZwdik7XFxuIFxcdFxcdGlmICghcG9zaXRpdmVfY3RybF9lcnIoXFx1MDAyNnNwLCBcXHUwMDI2cHYpKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0fVxcbkBAIC00OTAxLDggKzQ5MDMsMTAgQEAgc3RhdGljIGludCBnZXRfdHlwZV90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXFxuIFxcdCAqIENvbXBhcmUgdGhlIHN1bSBvZiBhbGwgdGllcnMgb2YgYW5vbiB3aXRoIHRoYXQgb2YgZmlsZSB0byBkZXRlcm1pbmVcXG4gXFx0ICogd2hpY2ggdHlwZSB0byBzY2FuLlxcbiBcXHQgKi9cXG4tXFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fQU5PTiwgTUFYX05SX1RJRVJTLCBzd2FwcGluZXNzLCBcXHUwMDI2c3ApO1xcbi1cXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBNQVhfTlJfVElFUlMsIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgXFx1MDAyNnB2KTtcXG4rXFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fQU5PTiwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NQVgsXFxuK1xcdFxcdCAgICAgIHN3YXBwaW5lc3MsIFxcdTAwMjZzcCk7XFxuK1xcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUFYLFxcbitcXHRcXHQgICAgICBNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3MsIFxcdTAwMjZwdik7XFxuIFxcbiBcXHRyZXR1cm4gcG9zaXRpdmVfY3RybF9lcnIoXFx1MDAyNnNwLCBcXHUwMDI2cHYpO1xcbiB9XFxuQEAgLTUwMTcsOCArNTAyMSwxMCBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0LyogZG9uJ3QgYWRkIHJlamVjdGVkIGZvbGlvcyB0byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gKi9cXG4tXFx0XFx0aWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKVxcbi1cXHRcXHRcXHRzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR19hY3RpdmUpKTtcXG4rXFx0XFx0aWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKSB7XFxuK1xcdFxcdFxcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XFxuK1xcdFxcdFxcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFxuIFxcdG1vdmVfZm9saW9zX3RvX2xydShcXHUwMDI2bGlzdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjIzOjUyLjM5NjE2MTE3OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzQ2MDMwOTU2MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUlHUkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibHJ1X2dlbl9sb29rX2Fyb3VuZFwiLFxuICAgIFwiZm9saW9fbWlncmF0ZV9mbGFnc1wiLFxuICAgIFwibWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVcIixcbiAgICBcIndhbGtfcHRlX3JhbmdlXCIsXG4gICAgXCJ3YWxrX3BtZF9yYW5nZV9sb2NrZWRcIixcbiAgICBcImZvbGlvX3VwZGF0ZV9nZW5cIixcbiAgICBcImV2aWN0X2ZvbGlvc1wiLFxuICAgIFwiaXNvbGF0ZV9mb2xpb1wiLFxuICAgIFwibHJ1X2dlbl9pbmNfcmVmc1wiLFxuICAgIFwibHJ1X2dlbl9jbGVhcl9yZWZzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgYWNyb3NzIG1tL3Ztc2Nhbi5jLCBtbS9mb2xpby5jLCBtbS9tZW1jb250cm9sLmMsIGFuZCBtbS9taWdyYXRlLmMsIGFsdGVyaW5nIE11bHRpLUdlbiBMUlUgKE1HTFJVKSByZWZlcmVuY2UgdHJhY2tpbmcsIGZvbGlvIGZsYWcgbWFuaXB1bGF0aW9uLCB0aWVyIGNhbGN1bGF0aW9ucywgcGFnZSBldmljdGlvbiwgYW5kIG1lbWNnIExSVSB6b25lIGFjY291bnRpbmcuIEl0IGFsc28gYWRkcyBzZXZlcmFsIFZNX1dBUk5fT05fT05DRSBhc3NlcnRpb25zIGFuZCBjaGFuZ2VzIHN5bmNocm9uaXphdGlvbi9hcml0aG1ldGljIGxvZ2ljLiBUaGVzZSBwYXRocyBhcmUgZnVsbHkgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGUzY2JiYzc2ZTFjOTY2Yzc2ZmU2MjEyOTlhMzJkMTdhZmE3ZTQwMDNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDE2OjIzOjQ5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuaW5kZXggYzc5OTkyNjQzNTU2MC4uMmI2NzY5NDI4NWQwNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuQEAgLTEwMCw3ICsxMDAsNyBAQCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSB7XG4gXHQvKiBGaWVsZHMgd2hpY2ggZ2V0IHVwZGF0ZWQgb2Z0ZW4gYXQgdGhlIGVuZC4gKi9cbiBcdHN0cnVjdCBscnV2ZWNcdFx0bHJ1dmVjO1xuIFx0Q0FDSEVMSU5FX1BBRERJTkcoX3BhZDJfKTtcbi1cdHVuc2lnbmVkIGxvbmdcdFx0bHJ1X3pvbmVfc2l6ZVtNQVhfTlJfWk9ORVNdW05SX0xSVV9MSVNUU107XG4rXHRsb25nXHRcdFx0bHJ1X3pvbmVfc2l6ZVtNQVhfTlJfWk9ORVNdW05SX0xSVV9MSVNUU107XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9yZWNsYWltX2l0ZXJcdGl0ZXI7XG4gXG4gXHQvKlxuQEAgLTg4NywxMCArODg3LDE1IEBAIHN0YXRpYyBpbmxpbmVcbiB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRlbnVtIGxydV9saXN0IGxydSwgaW50IHpvbmVfaWR4KVxuIHtcbitcdGxvbmcgdmFsO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16O1xuIFxuIFx0bXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcbi1cdHJldHVybiBSRUFEX09OQ0UobXotXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7XG4rXHR2YWwgPSBSRUFEX09OQ0UobXotXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7XG4rXHRpZiAoV0FSTl9PTl9PTkNFKHZhbCBcdTAwM2MgMCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHZhbDtcbiB9XG4gXG4gdm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzayk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaCBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcbmluZGV4IDYyMWM4NjUzZDhmN2UuLmFiNjliOTkzMDg5M2YgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG5AQCAtMzAsNiArMzAsMTcgQEAgc3RhdGljIGlubGluZSBpbnQgZm9saW9faXNfZmlsZV9scnUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHJldHVybiAhZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKTtcbiB9XG4gXG4rLyoqXG4rICogZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUgLSBTaG91bGQgdGhlIGZvbGlvIGJlIG9uIGEgZmlsZSBMUlUgb3IgYW5vbiBMUlU/XG4rICogQGZsYWdzOiBUaGUgZm9saW8ncyBmbGFncy5cbisgKlxuKyAqIEp1c3QgbGlrZSBmb2xpb19pc19maWxlX2xydSBidXQgdGFrZSB0aGUgZm9saW8gZmxhZ3MgZGlyZWN0bHkgaW5zdGVhZC5cbisgKi9cbitzdGF0aWMgaW5saW5lIGludCBmb2xpb19mbGFnc19pc19maWxlX2xydShjb25zdCB1bnNpZ25lZCBsb25nICpmbGFncylcbit7XG4rXHRyZXR1cm4gIXRlc3RfYml0KFBHX3N3YXBiYWNrZWQsIGZsYWdzKTtcbit9XG4rXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0XHRcdGVudW0gbHJ1X2xpc3QgbHJ1LCBlbnVtIHpvbmVfdHlwZSB6aWQsXG4gXHRcdFx0XHRsb25nIG5yX3BhZ2VzKVxuQEAgLTE0MiwxMCArMTUzLDY2IEBAIHN0YXRpYyBpbmxpbmUgaW50IGxydV90aWVyX2Zyb21fcmVmcyhpbnQgcmVmcywgYm9vbCB3b3JraW5nc2V0KVxuIFx0cmV0dXJuIHdvcmtpbmdzZXQgPyBNQVhfTlJfVElFUlMgLSAxIDogb3JkZXJfYmFzZV8yKHJlZnMpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuKy8qKlxuKyAqIGxydV9zZXRfZ2VuX2ZsYWdzIC0gU2V0IHRoZSBMUlUgZ2VuZXJhdGlvbiBudW1iZXIgdG8gc3BlY2lmaWVkIGZvbGlvIGZsYWdzLlxuKyAqIEBmbGFnczogcG9pbnRlciB0byB0aGUgZm9saW8gZmxhZ3NcbisgKiBAZ2VuOiBnZW5lcmF0aW9uIG51bWJlciwgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfc2V0X2dlbl9mbGFncyh1bnNpZ25lZCBsb25nICpmbGFncywgaW50IGdlbilcbit7XG4rXHRCVUlMRF9CVUdfT04oTFJVX0dFTl9NQVNLIFx1MDAyNiBMUlVfUkVGU19NQVNLKTtcbitcdFZNX1dBUk5fT05fT05DRShnZW4gXHUwMDNlPSBNQVhfTlJfR0VOUyB8fCBnZW4gXHUwMDNjIDApO1xuK1x0LyogU3RvcmUgZ2VuIG9mZnNldCBieSAxLCB6ZXJvIG1lYW5zIHRoZSBmb2xpbyBpcyBvZmYtbGlzdC4gKi9cbitcdCpmbGFncyBcdTAwMjY9IH5MUlVfR0VOX01BU0s7XG4rXHQqZmxhZ3MgfD0gKGdlbiArIDFVTCkgXHUwMDNjXHUwMDNjIExSVV9HRU5fUEdPRkY7XG4rfVxuK1xuKy8qKlxuKyAqIGxydV9nZXRfZ2VuX2ZsYWdzIC0gUmV0dXJuIHRoZSBMUlUgZ2VuZXJhdGlvbiBudW1iZXIgZnJvbSBmb2xpbyBmbGFncy5cbisgKiBAZmxhZ3M6IGZvbGlvIGZsYWdzXG4rICpcbisgKiBSZXR1cm5zOiBBIG51bWJlciBiZXR3ZWVuIDAgYW5kIChNQVhfTlJfR0VOUyAtIDEpLCBpbmNsdXNpdmUuIFJldHVybnNcbisgKiAtMSBpZiB0aGUgZmxhZ3MgaW5kaWNhdGUgdGhlIGZvbGlvIGlzIG9mZiB0aGUgbGlzdCAoZS5nLiwgaXNvbGF0ZWQpLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgaW50IGxydV9nZXRfZ2VuX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4re1xuK1x0aW50IGdlbiA9ICgoZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbitcbitcdC8qIEV4Y2x1ZGUgdGhlIGxlZ2FsIC0xIGZyb20gdGhlIHVuc2lnbmVkIE1BWF9OUl9HRU5TIGNvbXBhcmlzb24gKi9cbitcdFZNX1dBUk5fT05fT05DRShnZW4gIT0gLTEgXHUwMDI2XHUwMDI2IGdlbiBcdTAwM2U9IE1BWF9OUl9HRU5TKTtcbitcdHJldHVybiBnZW47XG4rfVxuK1xuKy8qKlxuKyAqIGxydV9zZXRfcmVmc19mbGFncyAtIFNldCB0aGUgTFJVIHJlZmVyZW5jZWQgY291bnQgdG8gZm9saW8gZmxhZ3MuXG4rICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFnc1xuKyAqIEByZWZzOiByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IG51bWJlciwgYmV0d2VlbiAwIGFuZCBMUlVfUkVGU19NQVgsIGluY2x1c2l2ZS5cbisgKlxuKyAqIEZvciBNR0xSVSwgUEdfcmVmZXJlbmNlZCBob2xkcyB0aGUgZmlyc3QgcmVmLCBhbmQgdGhlIGV4dHJhIGJpdHMgaG9sZCB0aGVcbisgKiByZW1haW5pbmcgcmVmcy4gRm9yIGNsYXNzaWNhbCBMUlUgdGhlIGV4dHJhIGJpdHMgYXJlIG5vdCB1c2VkLCBzbyBpdCBjYW5cbisgKiBhbHNvIGJlIHNlZW4gYXMgdGhlIHJlZnMgY291bnQgbmV2ZXIgZXhjZWVkcyAxLiBJbiBib3RoIGNhc2VzLCByZWZzID09IDFcbisgKiBtZWFucyBQR19yZWZlcmVuY2VkIGlzIHNldCBhbmQgdGhlIGV4dHJhIGJpdHMgYXJlIHplcm8sIGFuZCByZWZzID09IDAgbWVhbnNcbisgKiBQR19yZWZlcmVuY2VkIGFuZCB0aGUgZXh0cmEgYml0cyBhcmUgYWxsIHVuc2V0LlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfc2V0X3JlZnNfZmxhZ3ModW5zaWduZWQgbG9uZyAqZmxhZ3MsIHVuc2lnbmVkIGludCByZWZzKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4rXHRWTV9XQVJOX09OX09OQ0UocmVmcyBcdTAwM2UgTFJVX1JFRlNfTUFYKTtcbitcdEJVSUxEX0JVR19PTihMUlVfUkVGU19NQVggIT0gKExSVV9SRUZTX01BU0sgXHUwMDNlXHUwMDNlIExSVV9SRUZTX1BHT0ZGKSArIDEpO1xuIFxuK1x0KmZsYWdzIFx1MDAyNj0gfkxSVV9SRUZTX0ZMQUdTO1xuK1x0aWYgKCFyZWZzKVxuK1x0XHRyZXR1cm47XG4rXHQqZmxhZ3MgfD0gKEJJVChQR19yZWZlcmVuY2VkKSB8ICgocmVmcyAtIDFVTCkgXHUwMDNjXHUwMDNjIExSVV9SRUZTX1BHT0ZGKSk7XG4rfVxuK1xuKy8qKlxuKyAqIGxydV9nZXRfcmVmc19mbGFncyAtIFJldHVybiBMUlUgcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCBmcm9tIGZvbGlvIGZsYWdzLlxuKyAqIEBmbGFnczogZm9saW8gZmxhZ3NcbisgKlxuKyAqIFJlYWRzIHRoZSBMUlUgcmVmZXJlbmNlZCBjb3VudCBzZXQgYnkgbHJ1X3NldF9yZWZzX2ZsYWdzKCkuXG4rICovXG4rc3RhdGljIGlubGluZSBpbnQgbHJ1X2dldF9yZWZzX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4re1xuIFx0aWYgKCEoZmxhZ3MgXHUwMDI2IEJJVChQR19yZWZlcmVuY2VkKSkpXG4gXHRcdHJldHVybiAwO1xuIFx0LypcbkBAIC0xNTUsMTEgKzIyMiwyNCBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cmV0dXJuICgoZmxhZ3MgXHUwMDI2IExSVV9SRUZTX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfUkVGU19QR09GRikgKyAxO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfZ2VuKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuK1x0cmV0dXJuIGxydV9nZXRfcmVmc19mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpO1xuK31cbiBcbi1cdHJldHVybiAoKGZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgcmVmcylcbit7XG4rXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuK1xuK1x0ZG8ge1xuK1x0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XG4rXHRcdGxydV9zZXRfcmVmc19mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIHJlZnMpO1xuK1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X2dlbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHJldHVybiBscnVfZ2V0X2dlbl9mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9pc19hY3RpdmUoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgZ2VuKVxuQEAgLTI3MCw3ICszNTAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9hZGRfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpO1xuIFx0ZmxhZ3MgPSAoZ2VuICsgMVVMKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRjtcbiBcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBNSU5fTlJfR0VOUyBhYm91dCBQR19hY3RpdmUgKi9cbi1cdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX0dFTl9NQVNLIHwgQklUKFBHX2FjdGl2ZSksIGZsYWdzKTtcbitcdHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpO1xuIFxuIFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCAtMSwgZ2VuKTtcbiBcdC8qIGZvciBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoKSAqL1xuQEAgLTI5NSw3ICszNzUsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFxuIFx0LyogZm9yIGZvbGlvX21pZ3JhdGVfZmxhZ3MoKSAqL1xuIFx0ZmxhZ3MgPSAhcmVjbGFpbWluZyBcdTAwMjZcdTAwMjYgbHJ1X2dlbl9pc19hY3RpdmUobHJ1dmVjLCBnZW4pID8gQklUKFBHX2FjdGl2ZSkgOiAwO1xuLVx0ZmxhZ3MgPSBzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9HRU5fTUFTSywgZmxhZ3MpO1xuK1x0ZmxhZ3MgPSBzZXRfbWFza19iaXRzKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgTFJVX0dFTl9NQVNLLCBmbGFncyk7XG4gXHRnZW4gPSAoKGZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4gXG4gXHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIGdlbiwgLTEpO1xuQEAgLTMwNCwxMSArMzg0LDE5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXG4rLyoqXG4rICogZm9saW9fbWlncmF0ZV9scnVfcmVmcyAtIGNvcHkgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBhIG5ldyBmb2xpb1xuKyAqIEBuZXc6IHRoZSBkZXN0aW5hdGlvbiBmb2xpb1xuKyAqIEBvbGQ6IHRoZSBzb3VyY2UgZm9saW9cbisgKlxuKyAqIFRyYW5zZmVyIHRoZSByZWZlcmVuY2Ugc3RhdGUgdG8gQG5ldyBkdXJpbmcgbWlncmF0aW9uOiB0aGUgTUdMUlVcbisgKiByZWZzIGNvdW50LCBpbmNsdWRpbmcgUEdfcmVmZXJlbmNlZCwgb3IganVzdCBQR19yZWZlcmVuY2VkIGZvciB0aGVcbisgKiBhY3RpdmUvaW5hY3RpdmUgTFJVLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcbiB7XG4tXHR1bnNpZ25lZCBsb25nIHJlZnMgPSBSRUFEX09OQ0Uob2xkLVx1MDAzZWZsYWdzLmYpIFx1MDAyNiBMUlVfUkVGU19NQVNLO1xuLVxuLVx0c2V0X21hc2tfYml0cyhcdTAwMjZuZXctXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgcmVmcyk7XG4rXHRCVUlMRF9CVUdfT04oTFJVX1JFRlNfTUFTSyBcdTAwMjYgQklUKFBHX3JlZmVyZW5jZWQpKTtcbitcdGZvbGlvX3NldF9scnVfcmVmcyhuZXcsIGZvbGlvX2xydV9yZWZzKG9sZCkpO1xuIH1cbiAjZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cbiBcbkBAIC0zMzcsOSArNDI1LDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcbiB7XG4tXG4rXHRpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKG9sZCkpXG4rXHRcdGZvbGlvX3NldF9yZWZlcmVuY2VkKG5ldyk7XG4gfVxuICNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5pbmRleCA4NGUyMzdmMmMxN2RiLi5jOWFlNzk5MWE4YjIwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuQEAgLTQ5NSwxMSArNDk1LDE0IEBAIGVudW0gbHJ1dmVjX2ZsYWdzIHtcbiAgKiBmb2xpby1cdTAwM2VmbGFncywgbWFza2VkIGJ5IExSVV9SRUZTX01BU0suXG4gICovXG4gI2RlZmluZSBNQVhfTlJfVElFUlNcdFx0NFVcbisjZGVmaW5lIExSVV9USUVSX01JTlx0XHQwVVxuKyNkZWZpbmUgTFJVX1RJRVJfTUFYXHRcdChNQVhfTlJfVElFUlMgLSAxKVxuIFxuICNpZm5kZWYgX19HRU5FUkFUSU5HX0JPVU5EU19IXG4gXG4gI2RlZmluZSBMUlVfR0VOX01BU0tcdFx0KChCSVQoTFJVX0dFTl9XSURUSCkgLSAxKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRilcbiAjZGVmaW5lIExSVV9SRUZTX01BU0tcdFx0KChCSVQoTFJVX1JFRlNfV0lEVEgpIC0gMSkgXHUwMDNjXHUwMDNjIExSVV9SRUZTX1BHT0ZGKVxuKyNkZWZpbmUgTFJVX1JFRlNfTUFYXHRcdEJJVChMUlVfUkVGU19XSURUSClcbiBcbiAvKlxuICAqIEZvciBmb2xpb3MgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzLFxuZGlmZiAtLWdpdCBhL21tL2ZvbGlvLmMgYi9tbS9mb2xpby5jXG5pbmRleCA1MGE2ZGJlNTU5OThlLi40N2E0MzdlMGY3ZmRlIDEwMDY0NFxuLS0tIGEvbW0vZm9saW8uY1xuKysrIGIvbW0vZm9saW8uY1xuQEAgLTM1NCwyNiArMzU0LDI4IEBAIHN0YXRpYyB2b2lkIF9fbHJ1X2NhY2hlX2FjdGl2YXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXG4gc3RhdGljIHZvaWQgbHJ1X2dlbl9pbmNfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4rXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuK1x0aW50IHJlZnM7XG4gXG4gXHRpZiAoZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbykpXG4gXHRcdHJldHVybjtcbiBcbiBcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqL1xuLVx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKSB7XG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcbitcdGlmICghZm9saW9fbHJ1X3JlZnMoZm9saW8pKSB7XG4rXHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbiBcdGRvIHtcbi1cdFx0aWYgKChvbGRfZmxhZ3MgXHUwMDI2IExSVV9SRUZTX01BU0spID09IExSVV9SRUZTX01BU0spIHtcbitcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuK1x0XHRyZWZzID0gbHJ1X2dldF9yZWZzX2ZsYWdzKG9sZF9mbGFncyk7XG4rXHRcdGlmIChyZWZzID09IExSVV9SRUZTX01BWCkge1xuIFx0XHRcdGlmICghZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSlcbiBcdFx0XHRcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcbiBcdFx0XHRyZXR1cm47XG4gXHRcdH1cbi1cbi1cdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzICsgQklUKExSVV9SRUZTX1BHT0ZGKTtcbi1cdH0gd2hpbGUgKCF0cnlfY21weGNoZyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuK1x0XHRscnVfc2V0X3JlZnNfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCByZWZzICsgMSk7XG4rXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbkBAIC0zODUsNyArMzg3LDggQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRpZiAoZ2VuIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MgfCBCSVQoUEdfd29ya2luZ3NldCksIDApO1xuK1x0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbitcdGZvbGlvX2NsZWFyX3dvcmtpbmdzZXQoZm9saW8pO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0c2VxID0gUkVBRF9PTkNFKGZvbGlvX2xydXZlYyhmb2xpbyktXHUwMDNlbHJ1Z2VuLm1pbl9zZXFbdHlwZV0pO1xuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggYmQxZTdlMTU0NDI2NS4uZjE3YjJiMmQ2MTA1NSAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuKysrIGIvbW0vbWVtY29udHJvbC5jXG5AQCAtMTUyOSwyOCArMTUyOSwxMiBAQCB2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXG4gXHRcdFx0XHRpbnQgemlkLCBsb25nIG5yX3BhZ2VzKVxuIHtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejtcbi1cdHVuc2lnbmVkIGxvbmcgKmxydV9zaXplO1xuLVx0bG9uZyBzaXplO1xuIFxuIFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0bXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcbi1cdGxydV9zaXplID0gXHUwMDI2bXotXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6aWRdW2xydV07XG4tXG4tXHRpZiAobnJfcGFnZXMgXHUwMDNjIDApXG4tXHRcdCpscnVfc2l6ZSArPSBucl9wYWdlcztcbi1cbi1cdHNpemUgPSAqbHJ1X3NpemU7XG4tXHRpZiAoV0FSTl9PTkNFKHNpemUgXHUwMDNjIDAsXG4tXHRcdFwiJXMoJXAsICVkLCAlbGQpOiBscnVfc2l6ZSAlbGRcXG5cIixcbi1cdFx0X19mdW5jX18sIGxydXZlYywgbHJ1LCBucl9wYWdlcywgc2l6ZSkpIHtcbi1cdFx0Vk1fQlVHX09OKDEpO1xuLVx0XHQqbHJ1X3NpemUgPSAwO1xuLVx0fVxuLVxuLVx0aWYgKG5yX3BhZ2VzIFx1MDAzZSAwKVxuLVx0XHQqbHJ1X3NpemUgKz0gbnJfcGFnZXM7XG4rXHRtei1cdTAwM2VscnVfem9uZV9zaXplW3ppZF1bbHJ1XSArPSBucl9wYWdlcztcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jXG5pbmRleCAxNWI0NTgzMmJjZmE3Li5hMzY5ZDBjOTVjMzg2IDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZS5jXG4rKysgYi9tbS9taWdyYXRlLmNcbkBAIC03NzYsOCArNzc2LDkgQEAgdm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0aW50IGNwdXBpZDtcbiBcbi1cdGlmIChmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKVxuLVx0XHRmb2xpb19zZXRfcmVmZXJlbmNlZChuZXdmb2xpbyk7XG4rXHQvKiBDb3B5IHRoZSByZWZlcmVuY2Ugc3RhdGUsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkICovXG4rXHRmb2xpb19taWdyYXRlX2xydV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7XG4rXG4gXHRpZiAoZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpXG4gXHRcdGZvbGlvX21hcmtfdXB0b2RhdGUobmV3Zm9saW8pO1xuIFx0aWYgKGZvbGlvX3Rlc3RfY2xlYXJfYWN0aXZlKGZvbGlvKSkge1xuQEAgLTgwNyw3ICs4MDgsNiBAQCB2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGlmIChmb2xpb190ZXN0X2lkbGUoZm9saW8pKVxuIFx0XHRmb2xpb19zZXRfaWRsZShuZXdmb2xpbyk7XG4gXG4tXHRmb2xpb19taWdyYXRlX3JlZnMobmV3Zm9saW8sIGZvbGlvKTtcbiBcdC8qXG4gXHQgKiBDb3B5IE5VTUEgaW5mb3JtYXRpb24gdG8gdGhlIG5ldyBwYWdlLCB0byBwcmV2ZW50IG92ZXItZWFnZXJcbiBcdCAqIGZ1dHVyZSBtaWdyYXRpb25zIG9mIHRoaXMgc2FtZSBwYWdlLlxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDI0NWY2OGM3NWIyODkuLjQwZDNmMWI0OGE3NGMgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC04NjMsMTkgKzg2MywyMiBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4gXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKSB7XG4gXHRcdC8qIEFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLiAqL1xuIFx0XHRpZiAoaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7XG4tXHRcdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTtcbitcdFx0XHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XG4rXHRcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdFx0fVxuIFxuLVx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XG4rXHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbiBcdC8qIFByb21vdGUgb24gc2Vjb25kIGFjY2VzcyAqL1xuLVx0aWYgKGZvbGlvX2xydV9yZWZzKGZvbGlvKSBcdTAwM2UgMSlcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTtcbi1cdGVsc2VcbitcdGlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgXHUwMDNlIDEpIHtcbitcdFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xuK1x0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuK1x0fSBlbHNlIHtcbiBcdFx0Zm9saW9fbWFya19hY2Nlc3NlZChmb2xpbyk7XG4rXHR9XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gI2Vsc2VcbkBAIC0zMjIwLDggKzMyMjMsOCBAQCBzdHJ1Y3QgY3RybF9wb3Mge1xuIFx0aW50IGdhaW47XG4gfTtcbiBcbi1zdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2Fpbixcbi1cdFx0XHQgIHN0cnVjdCBjdHJsX3BvcyAqcG9zKVxuK3N0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXJfbWluLFxuK1x0XHRcdCAgaW50IHRpZXJfbWF4LCBpbnQgZ2Fpbiwgc3RydWN0IGN0cmxfcG9zICpwb3MpXG4ge1xuIFx0aW50IGk7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbkBAIC0zMjMwLDcgKzMyMzMsNyBAQCBzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2FpbixcbiBcdHBvcy1cdTAwM2VnYWluID0gZ2FpbjtcbiBcdHBvcy1cdTAwM2VyZWZhdWx0ZWQgPSBwb3MtXHUwMDNldG90YWwgPSAwO1xuIFxuLVx0Zm9yIChpID0gdGllciAlIE1BWF9OUl9USUVSUzsgaSBcdTAwM2M9IG1pbih0aWVyLCBNQVhfTlJfVElFUlMgLSAxKTsgaSsrKSB7XG4rXHRmb3IgKGkgPSB0aWVyX21pbjsgaSBcdTAwM2M9IHRpZXJfbWF4OyBpKyspIHtcbiBcdFx0cG9zLVx1MDAzZXJlZmF1bHRlZCArPSBscnVnZW4tXHUwMDNlYXZnX3JlZmF1bHRlZFt0eXBlXVtpXSArXG4gXHRcdFx0XHQgIGF0b21pY19sb25nX3JlYWQoXHUwMDI2bHJ1Z2VuLVx1MDAzZXJlZmF1bHRlZFtoaXN0XVt0eXBlXVtpXSk7XG4gXHRcdHBvcy1cdTAwM2V0b3RhbCArPSBscnVnZW4tXHUwMDNlYXZnX3RvdGFsW3R5cGVdW2ldICtcbkBAIC0zMjkxLDExICszMjk0LDExIEBAIHN0YXRpYyBib29sIHBvc2l0aXZlX2N0cmxfZXJyKHN0cnVjdCBjdHJsX3BvcyAqc3AsIHN0cnVjdCBjdHJsX3BvcyAqcHYpXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiBcbiAvKiBwcm9tb3RlIHBhZ2VzIGFjY2Vzc2VkIHRocm91Z2ggcGFnZSB0YWJsZXMgKi9cbi1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbitzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGludCAqdHlwZSxcbitcdFx0XHQgICAgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiB7XG4tXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuLVxuLVx0Vk1fV0FSTl9PTl9PTkNFKGdlbiBcdTAwM2U9IE1BWF9OUl9HRU5TKTtcbitcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4rXHRpbnQgb2xkX2dlbjtcbiBcbiBcdC8qXG4gXHQgKiBTZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MsIGFuZCBhY3RpdmF0ZSBmaWxlLWJhY2tlZFxuQEAgLTMzMDQsMzEgKzMzMDcsMzUgQEAgc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFcbiBcdCAqL1xuIFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7XG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcbitcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcbiBcdFx0cmV0dXJuIC0xO1xuIFx0fVxuIFxuIFx0ZG8ge1xuK1x0XHRvbGRfZ2VuID0gbHJ1X2dldF9nZW5fZmxhZ3Mob2xkX2ZsYWdzKTtcbitcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuK1xuIFx0XHQvKiBscnVfZ2VuX2RlbF9mb2xpbygpIGhhcyBpc29sYXRlZCB0aGlzIHBhZ2U/ICovXG4tXHRcdGlmICghKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSlcbi1cdFx0XHRyZXR1cm4gLTE7XG4rXHRcdGlmIChvbGRfZ2VuIFx1MDAzYyAwKVxuK1x0XHRcdGJyZWFrO1xuIFxuLVx0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgXHUwMDI2IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpO1xuLVx0XHRuZXdfZmxhZ3MgfD0gKChnZW4gKyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGKSB8IEJJVChQR193b3JraW5nc2V0KTtcbi1cdH0gd2hpbGUgKCF0cnlfY21weGNoZyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuK1x0XHRscnVfc2V0X2dlbl9mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIG5ld19nZW4pO1xuK1x0XHRscnVfc2V0X3JlZnNfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCAwKTtcbitcdFx0bmV3X2ZsYWdzIHw9IEJJVChQR193b3JraW5nc2V0KTtcbitcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4gXG4tXHRyZXR1cm4gKChvbGRfZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbitcdCp0eXBlID0gZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUoXHUwMDI2b2xkX2ZsYWdzKTtcbitcdHJldHVybiBvbGRfZ2VuO1xuIH1cbiBcbiBzdGF0aWMgaW50IF9fZm9saW9faW5jX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX2dlbiwgYm9vbCAqaW5jcmVhc2VkKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4rXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuIFx0aW50IG5ld19nZW47XG4gXG4tXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIShvbGRfZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSyksIGZvbGlvKTtcbi1cbiBcdGRvIHtcbi1cdFx0bmV3X2dlbiA9ICgob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4rXHRcdG5ld19nZW4gPSBscnVfZ2V0X2dlbl9mbGFncyhvbGRfZmxhZ3MpO1xuK1xuIFx0XHQvKiBmb2xpb191cGRhdGVfZ2VuKCkgaGFzIHByb21vdGVkIHRoaXMgcGFnZT8gKi9cbiBcdFx0aWYgKG5ld19nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBuZXdfZ2VuICE9IG9sZF9nZW4pIHtcbiBcdFx0XHRpZiAoaW5jcmVhc2VkKVxuQEAgLTMzMzYsMTEgKzMzNDMsMTIgQEAgc3RhdGljIGludCBfX2ZvbGlvX2luY19nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9nZW4sIGJvb2wgKmluY3JlYXNlZClcbiBcdFx0XHRyZXR1cm4gbmV3X2dlbjtcbiBcdFx0fVxuIFxuK1x0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XG4gXHRcdG5ld19nZW4gPSAob2xkX2dlbiArIDEpICUgTUFYX05SX0dFTlM7XG4gXG4tXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncyBcdTAwMjYgfihMUlVfR0VOX01BU0sgfCBMUlVfUkVGU19GTEFHUyk7XG4tXHRcdG5ld19mbGFncyB8PSAobmV3X2dlbiArIDFVTCkgXHUwMDNjXHUwMDNjIExSVV9HRU5fUEdPRkY7XG4tXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbitcdFx0bHJ1X3NldF9nZW5fZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCBuZXdfZ2VuKTtcbitcdFx0bHJ1X3NldF9yZWZzX2ZsYWdzKFx1MDAyNm5ld19mbGFncywgMCk7XG4rXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuIFxuIFx0aWYgKGluY3JlYXNlZClcbiBcdFx0KmluY3JlYXNlZCA9IHRydWU7XG5AQCAtMzM2Miw5ICszMzcwLDggQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbiB9XG4gXG4gc3RhdGljIHZvaWQgdXBkYXRlX2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IGZvbGlvICpmb2xpbyxcbi1cdFx0XHQgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4pXG4rXHRcdFx0ICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuLCBpbnQgdHlwZSlcbiB7XG4tXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbiBcdGludCB6b25lID0gZm9saW9fem9uZW51bShmb2xpbyk7XG4gXHRpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXG5AQCAtMzU1MSwyMiArMzU1OCwyNCBAQCBzdGF0aWMgYm9vbCBzdWl0YWJsZV90b19zY2FuKGludCB0b3RhbCwgaW50IHlvdW5nKVxuIH1cbiBcbiBzdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi1cdFx0c3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGJvb2wgZGlydHkpXG4rXHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBkaXJ0eSlcbiB7XG4tXHRpbnQgb2xkX2dlbjtcbitcdGludCBuZXdfZ2VuLCBvbGRfZ2VuLCB0eXBlO1xuIFxuIFx0aWYgKCFmb2xpbylcbiBcdFx0cmV0dXJuO1xuIFxuK1x0bmV3X2dlbiA9IGxydV9nZW5fZnJvbV9zZXEoUkVBRF9PTkNFKGxydXZlYy1cdTAwM2VscnVnZW4ubWF4X3NlcSkpO1xuK1xuIFx0aWYgKGRpcnR5IFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHQgICAgIShmb2xpb190ZXN0X2Fub24oZm9saW8pIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pIFx1MDAyNlx1MDAyNlxuIFx0ICAgICAgIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkpXG4gXHRcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuIFxuIFx0aWYgKHdhbGspIHtcbi1cdFx0b2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sIFx1MDAyNnZtYS1cdTAwM2VmbGFncyk7XG4rXHRcdG9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuLCBcdTAwMjZ0eXBlLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpO1xuIFx0XHRpZiAob2xkX2dlbiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG9sZF9nZW4gIT0gbmV3X2dlbilcbi1cdFx0XHR1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XG4rXHRcdFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4sIHR5cGUpO1xuIFx0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpKSB7XG4gXHRcdG9sZF9nZW4gPSBmb2xpb19scnVfZ2VuKGZvbGlvKTtcbiBcdFx0aWYgKG9sZF9nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXG5AQCAtMzU4OCw4ICszNTk3LDYgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cdTAwM2Vwcml2YXRlO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKHdhbGstXHUwMDNlbHJ1dmVjKTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQod2Fsay1cdTAwM2VscnV2ZWMpO1xuLVx0REVGSU5FX01BWF9TRVEod2Fsay1cdTAwM2VscnV2ZWMpO1xuLVx0aW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7XG4gXHR1bnNpZ25lZCBpbnQgbnI7XG4gXHRwbWRfdCBwbWR2YWw7XG4gXG5AQCAtMzY0MCw3ICszNjQ3LDcgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChsYXN0ICE9IGZvbGlvKSB7XG4tXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCB3YWxrLVx1MDAzZWxydXZlYywgbGFzdCwgZGlydHkpO1xuIFxuIFx0XHRcdGxhc3QgPSBmb2xpbztcbiBcdFx0XHRkaXJ0eSA9IGZhbHNlO1xuQEAgLTM2NTMsNyArMzY2MCw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHR3YWxrLVx1MDAzZW1tX3N0YXRzW01NX0xFQUZfWU9VTkddICs9IG5yO1xuIFx0fVxuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIHdhbGstXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXHRsYXN0ID0gTlVMTDtcbiBcbiBcdGlmIChpIFx1MDAzYyBQVFJTX1BFUl9QVEUgXHUwMDI2XHUwMDI2IGdldF9uZXh0X3ZtYShQTURfTUFTSywgUEFHRV9TSVpFLCBhcmdzLCBcdTAwMjZzdGFydCwgXHUwMDI2ZW5kKSlcbkBAIC0zNjc2LDggKzM2ODMsNiBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXHUwMDNlcHJpdmF0ZTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVx1MDAzZWxydXZlYyk7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdERFRklORV9NQVhfU0VRKHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFKHB1ZF9sZWFmKCpwdWQpKTtcbiBcbkBAIC0zNzMxLDcgKzM3MzYsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0XHRcdGdvdG8gbmV4dDtcbiBcbiBcdFx0aWYgKGxhc3QgIT0gZm9saW8pIHtcbi1cdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC0zNzQ1LDcgKzM3NTAsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0XHRpID0gaSBcdTAwM2UgTUlOX0xSVV9CQVRDSCA/IDAgOiBmaW5kX25leHRfYml0KGJpdG1hcCwgTUlOX0xSVV9CQVRDSCwgaSkgKyAxO1xuIFx0fSB3aGlsZSAoaSBcdTAwM2M9IE1JTl9MUlVfQkFUQ0gpO1xuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xuIFx0c3Bpbl91bmxvY2socHRsKTtcbkBAIC00MzUxLDggKzQzNTYsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gZm9saW9fcGdkYXQoZm9saW8pO1xuIFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xuIFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlO1xuLVx0dW5zaWduZWQgbG9uZyBtYXhfc2VxO1xuLVx0aW50IGdlbjtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQocHZtdy1cdTAwM2VwdGwpO1xuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSwgZm9saW8pO1xuQEAgLTQzODksOCArNDM5Miw2IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcbiBcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XG4gXHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpO1xuLVx0bWF4X3NlcSA9IFJFQURfT05DRSgobHJ1dmVjKS1cdTAwM2VscnVnZW4ubWF4X3NlcSk7XG4tXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xuIFx0bW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcbiBcbiBcdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XG5AQCAtNDQyMiw3ICs0NDIzLDcgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAobGFzdCAhPSBmb2xpbykge1xuLVx0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4rXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC00NDM0LDEzICs0NDM1LDE0IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdFx0eW91bmcgKz0gbnI7XG4gXHR9XG4gXG4tXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xuIFxuIFx0LyogZmVlZGJhY2sgZnJvbSBybWFwIHdhbGtlcnMgdG8gcGFnZSB0YWJsZSB3YWxrZXJzICovXG4gXHRpZiAobW1fc3RhdGUgXHUwMDI2XHUwMDI2IHN1aXRhYmxlX3RvX3NjYW4oaSwgeW91bmcpKVxuLVx0XHR1cGRhdGVfYmxvb21fZmlsdGVyKG1tX3N0YXRlLCBtYXhfc2VxLCBwdm13LVx1MDAzZXBtZCk7XG4rXHRcdHVwZGF0ZV9ibG9vbV9maWx0ZXIobW1fc3RhdGUsIFJFQURfT05DRShscnV2ZWMtXHUwMDNlbHJ1Z2VuLm1heF9zZXEpLFxuK1x0XHRcdFx0ICAgIHB2bXctXHUwMDNlcG1kKTtcbiBcbiBcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiBcbkBAIC00Nzg1LDcgKzQ3ODcsNyBAQCBzdGF0aWMgYm9vbCBpc29sYXRlX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYVxuIFxuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXG4gXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpXG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgMCk7XG4rXHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4gXG4gXHRzdWNjZXNzID0gbHJ1X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7XG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIXN1Y2Nlc3MsIGZvbGlvKTtcbkBAIC00ODc4LDkgKzQ4ODAsOSBAQCBzdGF0aWMgaW50IGdldF90aWVyX2lkeChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKVxuIFx0ICogVGhpcyB2YWx1ZSBpcyBjaG9zZW4gYmVjYXVzZSBhbnkgb3RoZXIgdGllciB3b3VsZCBoYXZlIGF0IGxlYXN0IHR3aWNlXG4gXHQgKiBhcyBtYW55IHJlZmF1bHRzIGFzIHRoZSBmaXJzdCB0aWVyLlxuIFx0ICovXG4tXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgMCwgMiwgXHUwMDI2c3ApO1xuLVx0Zm9yICh0aWVyID0gMTsgdGllciBcdTAwM2MgTUFYX05SX1RJRVJTOyB0aWVyKyspIHtcbi1cdFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIDMsIFx1MDAyNnB2KTtcbitcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01JTiwgMiwgXHUwMDI2c3ApO1xuK1x0Zm9yICh0aWVyID0gTFJVX1RJRVJfTUlOICsgMTsgdGllciBcdTAwM2M9IExSVV9USUVSX01BWDsgdGllcisrKSB7XG4rXHRcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0aWVyLCB0aWVyLCAzLCBcdTAwMjZwdik7XG4gXHRcdGlmICghcG9zaXRpdmVfY3RybF9lcnIoXHUwMDI2c3AsIFx1MDAyNnB2KSlcbiBcdFx0XHRicmVhaztcbiBcdH1cbkBAIC00OTAxLDggKzQ5MDMsMTAgQEAgc3RhdGljIGludCBnZXRfdHlwZV90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXG4gXHQgKiBDb21wYXJlIHRoZSBzdW0gb2YgYWxsIHRpZXJzIG9mIGFub24gd2l0aCB0aGF0IG9mIGZpbGUgdG8gZGV0ZXJtaW5lXG4gXHQgKiB3aGljaCB0eXBlIHRvIHNjYW4uXG4gXHQgKi9cbi1cdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIE1BWF9OUl9USUVSUywgc3dhcHBpbmVzcywgXHUwMDI2c3ApO1xuLVx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTUFYX05SX1RJRVJTLCBNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3MsIFx1MDAyNnB2KTtcbitcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUFYLFxuK1x0XHQgICAgICBzd2FwcGluZXNzLCBcdTAwMjZzcCk7XG4rXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCxcbitcdFx0ICAgICAgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCBcdTAwMjZwdik7XG4gXG4gXHRyZXR1cm4gcG9zaXRpdmVfY3RybF9lcnIoXHUwMDI2c3AsIFx1MDAyNnB2KTtcbiB9XG5AQCAtNTAxNyw4ICs1MDIxLDEwIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHR9XG4gXG4gXHRcdC8qIGRvbid0IGFkZCByZWplY3RlZCBmb2xpb3MgdG8gdGhlIG9sZGVzdCBnZW5lcmF0aW9uICovXG4tXHRcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSlcbi1cdFx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfYWN0aXZlKSk7XG4rXHRcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSkge1xuK1x0XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4rXHRcdFx0Zm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdG1vdmVfZm9saW9zX3RvX2xydShcdTAwMjZsaXN0KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjIzOjUyLjM5NjE2MjQxOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5Njg2NjAyNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEltcGFjdCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBkZWVwIGludG8gdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbW0vYCBkaXJlY3Rvcnkg4oCTIHRoYXQncyBhIGtleSBhcmVhLiBJdCBsb29rcyBsaWtlIGl0J3MgdG91Y2hpbmcgY3JpdGljYWwgZmlsZXM6IGBtZW1jb250cm9sLmhgLCBgbW1faW5saW5lLmhgLCBgbW16b25lLmhgLCBgZm9saW8uY2AsIGBtZW1jb250cm9sLmNgLCBgbWlncmF0ZS5jYCwgYW5kIGB2bXNjYW4uY2AuICBBIGNvbXByZWhlbnNpdmUgb3ZlcnZpZXcgaXMgZGVmaW5pdGVseSByZXF1aXJlZC5cblxuRmlyc3QsIGl0IHNlZW1zIHRoZXJlJ3MgYSB0eXBlIGNoYW5nZSBmb3IgYGxydV96b25lX3NpemVgIGZyb20gYHVuc2lnbmVkIGxvbmdgIHRvIGBsb25nYCwgYW5kIHRoZXJlIGFyZSBjaGVja3Mgbm93IGZvciBuZWdhdGl2ZSB2YWx1ZXMuIFRoYXQncyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZyDigJMgcG90ZW50aWFsIHNpZ25lZG5lc3MgYnVncywgb3IgbWF5YmUgYWRkcmVzc2luZyBhIHN1YnRsZSBvdmVyZmxvdyBpc3N1ZSBpbiB0aGUgbWVtY2cgTFJVIGFjY291bnRpbmcuIEFsd2F5cyB3b3J0aCBzY3J1dGluaXppbmcgdGhvc2UgY2hhbmdlcyFcblxuVGhlIHNlY29uZCwgYW5kIHBvdGVudGlhbGx5IG1vcmUgc2lnbmlmaWNhbnQsIHBhcnQgaW52b2x2ZXMgYSBtYWpvciByZWZhY3RvcmluZyBhbmQgYnVnIGZpeGluZyByZWxhdGVkIHRvIE11bHRpLUdlbiBMUlUgKE1HTFJVKS4gSSBzZWUgYSBzd2FybSBvZiBmdW5jdGlvbiBuYW1lczogYGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1YCwgYGxydV9zZXRfZ2VuX2ZsYWdzYCwgYGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnNgLCBhbmQgbWFueSBvdGhlcnMgdGhhdCBhcmUgcmVsYXRlZCB0byBtYW5pcHVsYXRpbmcgdGhlIExSVSBmbGFncyBhbmQgZ2VuZXJhdGlvbnMuIFRoYXQncyBhIGdvb2QgYW1vdW50IG9mIHdvcmsgYmVpbmcgZG9uZSBvbiBmdW5kYW1lbnRhbCBMUlUgbG9naWMuIFRoZXkncmUgY2hhbmdpbmcgdGhlIHdheSByZWZlcmVuY2UgY291bnRzIGFuZCBnZW5lcmF0aW9uIGNvdW50cyBhcmUgaGFuZGxlZC4gVGhpcyB0b3VjaGVzIG9uIHBhZ2UgaXNvbGF0aW9uLCB0aWVyaW5nLCBhbmQgZXZpY3Rpb24uIFRoYXQncyBhbGwgY29yZSBzdHVmZi4gVGhlIG1pZ3JhdGUgY29kZSdzIGBmb2xpb19taWdyYXRlX2ZsYWdzYCBtYWtlcyBzZW5zZSwgYXMgd2VsbC5cblxuR2l2ZW4gdGhhdCB0aGlzIG1vZGlmaWVzIGZpbGVzIGluIGBtbS9gLCBpdCdzIGRpcmVjdGx5IGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhpcyBpcyBhIGhpZ2hseSByZWFjaGFibGUgYXJlYSwgYW5kIHN5emthbGxlciBwcm9iYWJseSBoaXRzIHRoaXMgYWxsIHRoZSB0aW1lLiBTbywgaWYgd2UgbG9vayBhdCB0aGUgcG9zaXRpdmUgY3JpdGVyaWEsIHRoaXMgcGF0Y2ggZGVmaW5pdGVseSBmaXRzIHRoZSBiaWxsLiBJdCdzIG1vZGlmeWluZyBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyAobW0vKSwgYW5kIGl0J3MgcmVmYWN0b3JpbmcgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcyAoTFJVIGZsYWdzLCBldGMuKS4gVGhlIGludHJvZHVjdGlvbiBvZiBgV0FSTl9PTl9PTkNFYCBpbmRpY2F0ZXMgcnVudGltZSBhc3NlcnRpb25zIOKAkyBhIGJpZyBjaGVjayEgVGhpcyBpcyBkZWZpbml0ZWx5IFwiV29ydGhGdXp6aW5nXCIhXG5cbk5vdywgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgS2NvbmZpZyBkZXBlbmRlbmNpZXMgdG8gc2VlIHdoaWNoIGZlYXR1cmVzIGFyZSBuZWVkZWQgdG8gZW5hYmxlIHRoaXMgYW5kIHVzZSBgZ3JlcHBlcmAgdG8gc2VhcmNoIGZvciBMUlVfR0VOLCBNRU1DRywgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIEZvY3VzU3ltYm9scyByZWxhdGVkIHRvIHRoZSBzcGVjaWZpYyBjaGFuZ2VzLiBUaGF0IHdpbGwgdGVsbCBtZSB3aGljaCBmZWF0dXJlcyBhcmUgaW1wYWN0ZWQsIGFuZCB3aGVyZSB0byBmb2N1cyB0aGUgZnV6emluZyBlZmZvcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzc0LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6MjM6NTcuMzY0ODI0NTI3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MzU2NzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBMUlVfR0VOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEzODg9Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxcbi0tXFxubW0vS2NvbmZpZy0xMzk4LSMgbXVsdGktZ2VuIExSVSB7XFxubW0vS2NvbmZpZzoxMzk5OmNvbmZpZyBMUlVfR0VOXFxubW0vS2NvbmZpZy0xNDAwLVxcdGJvb2wgXFxcIk11bHRpLUdlbiBMUlVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MDctXFxubW0vS2NvbmZpZzoxNDA4OmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcXG5tbS9LY29uZmlnLTE0MDktXFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MTMtXFxubW0vS2NvbmZpZzoxNDE0OmNvbmZpZyBMUlVfR0VOX1NUQVRTXFxubW0vS2NvbmZpZy0xNDE1LVxcdGJvb2wgXFxcIkZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTQyMi1cXG5tbS9LY29uZmlnOjE0MjM6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXFxubW0vS2NvbmZpZy0xNDI0LVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6MjM6NTcuNDE0MTg3Mjc5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg3ODg0MDQ1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgYE1FTUNHYCBhbmQgTWVtb3J5IENvbnRyb2wqKlxuXG5SaWdodCwgbGV0J3MgY2lyY2xlIGJhY2sgdG8gYE1FTUNHYCDigJMgbWVtb3J5IGNvbnRyb2wgZ3JvdXBzLiBBbHdheXMgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IHdoZW4gZGlnZ2luZyBpbnRvIG1lbW9yeSBiZWhhdmlvci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gY292ZXJpbmcgYWxsIHRoZSBhbmdsZXMuIE15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbi4gSSBzaG91bGQgY2hlY2sgYG1lbWNvbnRyb2wuY2AgZm9yIHRoZSBmdW5kYW1lbnRhbCBmcmFtZXdvcmsuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgc3lzdGVtIHRyYWNrcyBhbmQgZW5mb3JjZXMgbWVtb3J5IGxpbWl0cyB3aXRoaW4gdGhlc2UgY29udHJvbCBncm91cHMuXG5cblRoYXQgYWxzbyBicmluZ3MgYGxydV96b25lX3NpemVgIGludG8gdGhlIHBpY3R1cmUuIE5lZWQgdG8gY29ycmVsYXRlIHRoYXQgd2l0aCBob3cgdGhlIGtlcm5lbCBtYW5hZ2VzIHBhZ2VzIHdpdGhpbiB6b25lcyBhbmQgaG93IGBNRU1DR2AgaW50ZXJhY3RzIHdpdGggdGhvc2Ugem9uZS1sZXZlbCBjYWxjdWxhdGlvbnMuIFRoZSBMUlUgaXMgY3JpdGljYWwgaW4gZGV0ZXJtaW5pbmcgd2hhdCBnZXRzIHN3YXBwZWQgb3V0LCBhbmQgd2hhdCBwYWdlcyBhcmUgY29uc2lkZXJlZCBcImluLXVzZVwiIHZlcnN1cyByZWNsYWltYWJsZS4gSSBzaG91bGQgYmUgYWJsZSB0byB0cmFjZSBob3cgbGltaXRzIGFmZmVjdCB0aGUgTFJVIGRlY2lzaW9ucy4gTGV0J3Mgc2VlIGhvdyBtZW1vcnkgcHJlc3N1cmUgaW1wYWN0cyB0aGUgem9uZXMgYW5kIHRoZSBMUlUgY2FsY3VsYXRpb25zIHdpdGhpbiB0aGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzc1MSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjI0OjAwLjI5MzAyOTMzNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzY4NTUxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNQ0dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNzU9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuLS1cXG5pbml0L0tjb25maWctMTA4NC1cXG5pbml0L0tjb25maWc6MTA4NTpjb25maWcgTUVNQ0dcXG5pbml0L0tjb25maWctMTA4Ni1cXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDkzLVxcbmluaXQvS2NvbmZpZzoxMDk0OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuaW5pdC9LY29uZmlnLTEwOTUtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTExMDAtXFxuaW5pdC9LY29uZmlnOjExMDE6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuaW5pdC9LY29uZmlnLTExMDItXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTExMDctXFxuaW5pdC9LY29uZmlnOjExMDg6Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTExMDktXFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6MjQ6MDAuMzQwNzE5NjA3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTYxMDcxMTYxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUmVjZW50IENoYW5nZXMgaW4gTWVtb3J5IE1hbmFnZW1lbnQgQ29kZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGVzZSByZWNlbnQgbW9kaWZpY2F0aW9ucy4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGJlZW4gdG91Y2hlZCBpbiB0aGUgYG1tL2AgZGlyZWN0b3J5LiBTY2FubmluZyBgbW0vbWVtY29udHJvbC5jYCwgSSBzZWUgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCBhbmQgYG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemVgIOKAkyB0aGUgbGF0dGVyJ3MgaW5saW5lLCBzbyB0aGF0J3MgYSBxdWljayBub3RlIHRvIG15c2VsZi4gVGhlbiwgb3ZlciBpbiBgbW0vZm9saW8uY2AsIEkgc2VlIGEgY291cGxlIG9mIGZ1bmN0aW9ucyBmbGFnZ2VkIGFzIGBzdGF0aWNgOiBgbHJ1X2dlbl9pbmNfcmVmc2AgYW5kIGBscnVfZ2VuX2NsZWFyX3JlZnNgLiBTaW5jZSB0aGV5J3JlIGBzdGF0aWNgLCBJIHNob3VsZCBjaGVjayB3aXRoaW4gYGZvbGlvLmNgIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhleSBhcmUgdXNlZC5cblxuTW92aW5nIG9uLCBgbW0vbWlncmF0ZS5jYCBoYXMgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgLCB3aGljaCB3YXJyYW50cyBhIGNsb3NlciBsb29rIGxhdGVyLiBBbmQgdGhlIGJpZyBvbmUsIGBtbS92bXNjYW4uY2AsIGhhcyBhIHdob2xlIHNsZXcgb2YgY2hhbmdlcy4gSSBub3RlIGBscnVfZ2VuX3NldF9yZWZzYCwgYHJlYWRfY3RybF9wb3NgLCBgZm9saW9fdXBkYXRlX2dlbmAsIGBfX2ZvbGlvX2luY19nZW5gLCBgZm9saW9faW5jX2dlbmAsIGB1cGRhdGVfYmF0Y2hfc2l6ZWAsIGB3YWxrX3VwZGF0ZV9mb2xpb2AsIGB3YWxrX3B0ZV9yYW5nZWAsIGB3YWxrX3BtZF9yYW5nZV9sb2NrZWRgLCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAsIGBpc29sYXRlX2ZvbGlvYCwgYGdldF90aWVyX2lkeGAsIGBnZXRfdHlwZV90b19zY2FuYCwgYW5kIGBldmljdF9mb2xpb3NgLiBUaGF0J3MgYSBsb3QgdG8gcGFyc2UsIGJ1dCBpdCBzZWVtcyBWTSBzY2FubmluZyBoYXMgYmVlbiBzaWduaWZpY2FudGx5IGltcGFjdGVkLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCB0aGUgc2NvcGUgb2YgdGhlc2UgY2hhbmdlcywgZm9jdXNpbmcgZXNwZWNpYWxseSBvbiB0aGUgZnVuY3Rpb25zIGluIGBtbS9mb2xpby5jYCBsaWtlIGBscnVfZ2VuX2luY19yZWZzYCBhbmQgYGxydV9nZW5fY2xlYXJfcmVmc2AuIEFyZSB0aGV5IGludGVybmFsIHRvIGBmb2xpby5jYCwgb3IgYXJlIHRoZXkgcGFydCBvZiBhIGxhcmdlciBpbnRlcmZhY2U/IEknbGwgcXVpY2tseSBjaGVjayB0aGUgY2FsbGVycyBvZiB0aG9zZSwgb3Igb3RoZXIgZnVuY3Rpb25zIGluIGBtbS9mb2xpby5jYCwgdG8gc2VlIHdoYXQgdGhlIHRhcmdldHMgYXJlLCBhbmQgZGV0ZXJtaW5lIHdoYXQgdGhlIHJpZ2h0IGNvZGUgdG8gdGFyZ2V0IGZvciBteSBwdXJwb3NlcyBpcy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBpbXBhY3QgYW5kIHdoZXJlIHRvIGRpZyBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjQ5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjI0OjA1Ljk1MTQzMzMwMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjQ1NTk3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnVfZ2VuXyhpbmN8Y2xlYXIpX3JlZnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ZvbGlvLmM9MzIzPXN0YXRpYyB2b2lkIF9fbHJ1X2NhY2hlX2FjdGl2YXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9mb2xpby5jLTM1NC1cXG5tbS9mb2xpby5jOjM1NTpzdGF0aWMgdm9pZCBscnVfZ2VuX2luY19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vZm9saW8uYy0zNTYte1xcbi0tXFxubW0vZm9saW8uYy0zODAtXFxubW0vZm9saW8uYzozODE6c3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vZm9saW8uYy0zODIte1xcbi0tXFxubW0vZm9saW8uYy00MDEtXFxubW0vZm9saW8uYzo0MDI6c3RhdGljIHZvaWQgbHJ1X2dlbl9pbmNfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2ZvbGlvLmMtNDAzLXtcXG4tLVxcbm1tL2ZvbGlvLmMtNDA1LVxcbm1tL2ZvbGlvLmM6NDA2OnN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2ZvbGlvLmMtNDA3LXtcXG4tLVxcbm1tL2ZvbGlvLmM9NDI2PXZvaWQgZm9saW9fbWFya19hY2Nlc3NlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZm9saW8uYy00MzAtXFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKSB7XFxubW0vZm9saW8uYzo0MzE6XFx0XFx0bHJ1X2dlbl9pbmNfcmVmcyhmb2xpbyk7XFxubW0vZm9saW8uYy00MzItXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vZm9saW8uYz01OTI9c3RhdGljIHZvaWQgbHJ1X2xhenlmcmVlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2ZvbGlvLmMtNjAyLVxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSlcXG5tbS9mb2xpby5jOjYwMzpcXHRcXHRscnVfZ2VuX2NsZWFyX3JlZnMoZm9saW8pO1xcbm1tL2ZvbGlvLmMtNjA0LVxcdGVsc2VcXG4tLVxcbm1tL2ZvbGlvLmM9NjcwPXZvaWQgZGVhY3RpdmF0ZV9maWxlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9mb2xpby5jLTY3NS1cXG5tbS9mb2xpby5jOjY3NjpcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgbHJ1X2dlbl9jbGVhcl9yZWZzKGZvbGlvKSlcXG5tbS9mb2xpby5jLTY3Ny1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS9mb2xpby5jPTY5MD12b2lkIGZvbGlvX2RlYWN0aXZhdGUoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2ZvbGlvLmMtNjk0LVxcbm1tL2ZvbGlvLmM6Njk1OlxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSA/IGxydV9nZW5fY2xlYXJfcmVmcyhmb2xpbykgOiAhZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pKVxcbm1tL2ZvbGlvLmMtNjk2LVxcdFxcdHJldHVybjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6MjQ6MDYuMDAzODkzNzc0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI0MjAyMTEzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEV4YW1pbmF0aW9uIG9mIHRoZSBSZWxldmFudCBDb2RlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGlzIG1lbW9yeSBtYW5hZ2VtZW50IGZsb3cuIE15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiB0aGUgZm9sbG93aW5nOiBgaXNvbGF0ZV9mb2xpb2AsIGBldmljdF9mb2xpb3NgLCBgd2Fsa19wdGVfcmFuZ2VgLCBgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkYCwgYGxydV9nZW5fbG9va19hcm91bmRgLCBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgLCBgZm9saW9fbWlncmF0ZV9mbGFnc2AsIGBscnVfZ2VuX2luY19yZWZzYCwgYGxydV9nZW5fY2xlYXJfcmVmc2AsIGBnZXRfdGllcl9pZHhgLCBgZ2V0X3R5cGVfdG9fc2NhbmAsIGByZWFkX2N0cmxfcG9zYCwgYGZvbGlvX3VwZGF0ZV9nZW5gLCBhbmQgYF9fZm9saW9faW5jX2dlbmAuIFRoZXNlIHNlZW0gbGlrZSB0aGUgY29yZSBjb21wb25lbnRzLlxuXG5Ob3csIEkgd2FudCB0byBxdWlja2x5IGlkZW50aWZ5IHBvdGVudGlhbCBhcmVhcyBmb3IgZGVlcGVyIGludmVzdGlnYXRpb24sIHBlcmhhcHMgbG9va2luZyBhdCB3aGV0aGVyIHRob3NlIGZ1bmN0aW9ucyBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpY2Agb3IsIGlmIG5vdCwgd2hpY2ggb2YgdGhlbSBoYXZlIGdvb2QgcG90ZW50aWFsIGFzIGBGb2N1c1N5bWJvbHNgIHRoYXQgbWlnaHQgbWFrZSBzZW5zZSB0byB0cmFjZS4gSW4gcGFydGljdWxhciwgSeKAmW0gaW50ZXJlc3RlZCBpbiB3aGV0aGVyIGBpc29sYXRlX2ZvbGlvYCwgYGV2aWN0X2ZvbGlvc2AsIGBmb2xpb19taWdyYXRlX2ZsYWdzYCwgb3IgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCBhcmUgbm9uLXN0YXRpYyBhbmQsIGlmIHNvLCB3aGF0IHRoZWlyIGNhbGwgdHJlZXMgbG9vayBsaWtlLlxuXG5BcyBhIHN0YXJ0aW5nIHBvaW50LCBJJ2xsIGRyaWxsIGRvd24gc3BlY2lmaWNhbGx5IGludG8gYGV2aWN0X2ZvbGlvc2AgYW5kIGl0cyBjYWxsZXJzLCBzdGFydGluZyBpbiBgbW0vdm1zY2FuLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHNvbWUgY29udGV4dCBhYm91dCBob3cgaXQncyB1c2VkIHdpdGhpbiB0aGUgc2Nhbm5pbmcgbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1Njg2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjI0OjA5LjI0NTkxNzMzMVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY1MjU4ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXZpY3RfZm9saW9zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTQ5MjA9c3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ5NjMtXFxubW0vdm1zY2FuLmM6NDk2NDpzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5tbS92bXNjYW4uYy00OTY1LVxcdFxcdFxcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUxNDM9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxNjYtXFx0XFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fc2NhbiwgTUlOX0xSVV9CQVRDSCk7XFxubW0vdm1zY2FuLmM6NTE2NzpcXHRcXHRkZWx0YSA9IGV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyk7XFxubW0vdm1zY2FuLmMtNTE2OC1cXHRcXHRpZiAoIWRlbHRhKVxcbi0tXFxubW0vdm1zY2FuLmM9NTc4ND1zdGF0aWMgaW50IHJ1bl9ldmljdGlvbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU4MDQtXFx0XFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fcmVjbGFpbSAtIHNjLVxcdTAwM2Vucl9yZWNsYWltZWQsIE1BWF9MUlVfQkFUQ0gpO1xcbm1tL3Ztc2Nhbi5jOjU4MDU6XFx0XFx0aWYgKCFldmljdF9mb2xpb3MobnJfYmF0Y2gsIGxydXZlYywgc2MsIHN3YXBwaW5lc3MpKVxcbm1tL3Ztc2Nhbi5jLTU4MDYtXFx0XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjI0OjA5LjI5MjQ0NzIwNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4NTQxODg3NTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIEtleSBTeW1ib2xzIGZvciBBbmFseXNpcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBoZXJlIGlzIHRvIGlkZW50aWZ5IGFuZCB6ZXJvIGluIG9uIHRoZSBtb3N0IHJlbGV2YW50IGZ1bmN0aW9ucyBmb3Igd2hhdGV2ZXIgaW52ZXN0aWdhdGlvbiBvciBtb2RpZmljYXRpb24gSSdtIHBsYW5uaW5nLCBsaWtlbHkgcmVsYXRlZCB0byB0aGUgTXVsdGktR2VuIExSVSBvciBtZW1vcnkgbWFuYWdlbWVudCBpbiBnZW5lcmFsLiBJJ2xsIHN0YXJ0IGJ5IHN5c3RlbWF0aWNhbGx5IGNoZWNraW5nIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IGFyZSBub24tc3RhdGljIGFuZCBzZWVtIGNlbnRyYWwgdG8gdGhlIGNvcmUgbG9naWMuXG5cbkZpcnN0LCBJJ20gY2hlY2tpbmcgYGxydV9nZW5fbG9va19hcm91bmRgIGluIGBtbS92bXNjYW4uY2AuIEl0J3Mgbm9uLXN0YXRpYywgd2hpY2ggaXMgZ29vZCBmb3IgbXkgcHVycG9zZXMuIFRoZW4gSSdsbCBsb29rIGF0IGBmb2xpb19taWdyYXRlX2ZsYWdzYCBpbiBgbW0vbWlncmF0ZS5jYCwgYW5kIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgaW4gYG1tL21lbWNvbnRyb2wuY2AuIEknbSBhbHNvIGdvaW5nIHRvIGV4YW1pbmUgc29tZSByZWxhdGVkIGZ1bmN0aW9ucywgaW5jbHVkaW5nIGBscnVfZ2VuX2luY19yZWZzYCwgYGxydV9nZW5fY2xlYXJfcmVmc2AsIGBmb2xpb191cGRhdGVfZ2VuYCwgYF9fZm9saW9faW5jX2dlbmAsIGBpc29sYXRlX2ZvbGlvYCwgYGdldF90aWVyX2lkeGAsIGBnZXRfdHlwZV90b19zY2FuYCwgYHdhbGtfdXBkYXRlX2ZvbGlvYCwgYHdhbGtfcHRlX3JhbmdlYCwgYHdhbGtfcG1kX3JhbmdlX2xvY2tlZGAsIGFuZCBgcmVhZF9jdHJsX3Bvc2AuXG5cbk5vdywgSSdtIGdvaW5nIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFdoaWNoIG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGBtbS92bXNjYW4uY2AgY2FsbCBvciBhcmUgY2FsbGVkIGJ5IHRoZXNlIGZ1bmN0aW9ucywgb3IgYXJlIG90aGVyd2lzZSBtb2RpZmllZCBpbiByZWxhdGlvbiB0byB0aGVtPyBJIG5lZWQgdG8gYnVpbGQgYSBicm9hZGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRleHQuIEknbGwgZm9jdXMgb24gdGhlc2U6XG4qICAgYGxydV9nZW5fbG9va19hcm91bmRgXG4qICAgYHdhbGtfcG1kX3JhbmdlX2xvY2tlZGBcbiogICBgd2Fsa19wdGVfcmFuZ2VgXG4qICAgYGZvbGlvX3VwZGF0ZV9nZW5gXG4qICAgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgXG4qICAgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYFxuKiAgIGBldmljdF9mb2xpb3NgXG4qICAgYGlzb2xhdGVfZm9saW9gXG4qICAgYGxydV9nZW5faW5jX3JlZnNgXG4qICAgYGxydV9nZW5fY2xlYXJfcmVmc2BcblxuTGV0J3MgdGhpbmsgYWJvdXQgdWJpcXVpdHkuIEkgd2FudCB0byBhdm9pZCBmdW5jdGlvbnMgdGhhdCBhcmUgY2FsbGVkIGV2ZXJ5d2hlcmU7IEkgbmVlZCBzeW1ib2xzIHRoYXQgYXJlIG1vcmUgc3BlY2lmaWMgdG8gdGhlIGFyZWEgSSdtIGludGVyZXN0ZWQgaW4uIEkgc2hvdWxkIGNoZWNrIHdoZXRoZXIgYGZvbGlvX21hcmtfYWNjZXNzZWRgIG9yIGBmb2xpb19kZWFjdGl2YXRlYCBhcmUgY2FsbGVkIGV2ZXJ5d2hlcmUuIGBmb2xpb19tYXJrX2FjY2Vzc2VkYCBpcywgYnV0IG1heWJlIGBscnVfZ2VuX2luY19yZWZzYCwgYGxydV9nZW5fY2xlYXJfcmVmc2Agb3IgYGZvbGlvX2RlYWN0aXZhdGVgIC8gYGRlYWN0aXZhdGVfZmlsZV9mb2xpb2AgYXJlIHNwZWNpZmljLiBQZXJoYXBzIGBscnVfZ2VuX2luY19yZWZzYCBpcyBzcGVjaWZpYyB0byBNR0xSVS4gSG9sZCBvbiwgd2Fzbid0IHRoYXQgc3RhdGljP1xuXG4qQWgqLCB5ZXMsIGBscnVfZ2VuX2luY19yZWZzYCBpcyBzdGF0aWMsIHdoaWNoIGNhbiBjb21wbGljYXRlIHN5bWJvbCBhbmFseXNpcy4gQ2FuIGBrYWxsc3ltc2AgaGVscCB1cyBmaW5kIHN0YXRpYyBmdW5jdGlvbnM/IFJpZ2h0LiBTdGF0aWMgZnVuY3Rpb25zIGluIGAuY2AgZmlsZXMgKnVzdWFsbHkqIGFwcGVhciBpbiBgL3Byb2Mva2FsbHN5bXNgIHVubGVzcyB0aGV5J3JlIGlubGluZWQuIEFuZCBJIHJlbWVtYmVyIHRoZSBub3RlIGFib3V0IGlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyBpbiBoZWFkZXJzLiBUaGV5J3JlIGJhc2ljYWxseSBpbnZpc2libGUgYXMgc3ltYm9scy4gU28sIEkgbmVlZCB0byBmb2N1cyBvbiBub24tc3RhdGljLCBvciBzdWJzeXN0ZW0tbGV2ZWwgZW50cnlwb2ludCBmdW5jdGlvbnMuIFRoYXTigJlzIHNhZmVyLlxuXG5UaGVyZWZvcmUsIGZvciB0aGUgc2FrZSBvZiBjbGVhciBhbmFseXNpcywgdGhlc2UgYXJlIHRoZSBcImdvb2RcIiBgRm9jdXNTeW1ib2xzYDpcblxuMS4gIGBscnVfZ2VuX2xvb2tfYXJvdW5kYFxuMi4gIGBmb2xpb19taWdyYXRlX2ZsYWdzYFxuMy4gIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWBcbjQuICBgZm9saW9fdXBkYXRlX2dlbmBcbjUuICBgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkYFxuNi4gIGB3YWxrX3B0ZV9yYW5nZWBcbjcuICBgZXZpY3RfZm9saW9zYFxuOC4gIGBpc29sYXRlX2ZvbGlvYFxuOS4gIGBscnVfZ2VuX2luY19yZWZzYFxuMTAuIGBscnVfZ2VuX2NsZWFyX3JlZnNgXG5cbkZpbmFsbHksIGxldCdzIGlkZW50aWZ5IHRoZSBuZWVkZWQgY29uZmlndXJhdGlvbnMuIGBMUlVfR0VOYCBpcyBjcml0aWNhbCBmb3IgTXVsdGktR2VuIExSVSwgYW5kIGBNRU1DR2AgaXMgcmVxdWlyZWQgYmVjYXVzZSBvZiB0aGUgY2hhbmdlcyByZWxhdGVkIHRvIG1lbW9yeSBjZ3JvdXAgZnVuY3Rpb25zIChgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgIGFuZCBgbHJ1X3pvbmVfc2l6ZWApLiBOb3cgSSBuZWVkIHRvIGV4cGxvcmUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gYExSVV9HRU5fRU5BQkxFRGAgZW5hYmxlcyBgTFJVX0dFTmAgYnkgZGVmYXVsdCBhdCBib290LiBMZXQncyBjaGVjayBgS2NvbmZpZ2AgZm9yIGBMUlVfR0VOYCBhbmQgcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY2MzAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6MjQ6MTcuODM0MzM4MTQ3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzOTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzOTU6XFx0XFx0ICBwdXJwb3Nlcy4gIEl0IGlzIHJlcXVpcmVkIHRvIGVuYWJsZSB1c2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIG9uXFxuMTM5NjpcXHRcXHQgIGZpbGUtYmFja2VkIG1lbW9yeSB0eXBlcyBsaWtlIHNobWVtIGFuZCBodWdldGxiZnMuXFxuMTM5NzpcXHRcXG4xMzk4OlxcdCMgbXVsdGktZ2VuIExSVSB7XFxuMTM5OTpcXHRjb25maWcgTFJVX0dFTlxcbjE0MDA6XFx0XFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4xNDAxOlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuMTQwMjpcXHRcXHQjIG1ha2Ugc3VyZSBmb2xpby1cXHUwMDNlZmxhZ3MgaGFzIGVub3VnaCBzcGFyZSBiaXRzXFxuMTQwMzpcXHRcXHRkZXBlbmRzIG9uIDY0QklUIHx8ICFTUEFSU0VNRU0gfHwgU1BBUlNFTUVNX1ZNRU1NQVBcXG4xNDA0OlxcdFxcdGhlbHBcXG4xNDA1OlxcdFxcdCAgQSBoaWdoIHBlcmZvcm1hbmNlIExSVSBpbXBsZW1lbnRhdGlvbiB0byBvdmVyY29tbWl0IG1lbW9yeS4gU2VlXFxuMTQwNjpcXHRcXHQgIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscy5cXG4xNDA3OlxcdFxcbjE0MDg6XFx0Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbjE0MDk6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuMTQxMDpcXHRcXHRkZXBlbmRzIG9uIExSVV9HRU5cXG4xNDExOlxcdFxcdGhlbHBcXG4xNDEyOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbXVsdGktZ2VuIExSVSBieSBkZWZhdWx0LlxcbjE0MTM6XFx0XFxuMTQxNDpcXHRjb25maWcgTFJVX0dFTl9TVEFUU1xcbjE0MTU6XFx0XFx0Ym9vbCBcXFwiRnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXFxcIlxcbjE0MTY6XFx0XFx0ZGVwZW5kcyBvbiBMUlVfR0VOXFxuMTQxNzpcXHRcXHRoZWxwXFxuMTQxODpcXHRcXHQgIERvIG5vdCBlbmFibGUgdGhpcyBvcHRpb24gdW5sZXNzIHlvdSBwbGFuIHRvIGxvb2sgYXQgaGlzdG9yaWNhbCBzdGF0c1xcbjE0MTk6XFx0XFx0ICBmcm9tIGV2aWN0ZWQgZ2VuZXJhdGlvbnMgZm9yIGRlYnVnZ2luZyBwdXJwb3NlLlxcbjE0MjA6XFx0XFxuMTQyMTpcXHRcXHQgIFRoaXMgb3B0aW9uIGhhcyBhIHBlci1tZW1jZyBhbmQgcGVyLW5vZGUgbWVtb3J5IG92ZXJoZWFkLlxcbjE0MjI6XFx0XFxuMTQyMzpcXHRjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG4xNDI0OlxcdFxcdGRlZl9ib29sIHlcXG4xNDI1OlxcdFxcdGRlcGVuZHMgb24gTFJVX0dFTiBcXHUwMDI2XFx1MDAyNiBBUkNIX0hBU19IV19QVEVfWU9VTkdcXG4xNDI2OlxcdCMgfVxcbjE0Mjc6XFx0XFxuMTQyODpcXHRjb25maWcgTE9DS19NTV9BTkRfRklORF9WTUFcXG4xNDI5OlxcdFxcdGJvb2xcXG4xNDMwOlxcdFxcdGRlcGVuZHMgb24gIVNUQUNLX0dST1dTVVBcXG4xNDMxOlxcdFxcbjE0MzI6XFx0Y29uZmlnIElPTU1VX01NX0RBVEFcXG4xNDMzOlxcdFxcdGJvb2xcXG4xNDM0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjoyNDoxNy44MzQ0NDAyNTdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMzMjEzMDY0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDaGVja2luZyBmb3IgTWlncmF0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIHZlcmlmeSB0aGUgZXhpc3RlbmNlIG9mIHRoZSBgTUlHUkFUSU9OYCBjb25maWd1cmF0aW9uLiBUaGlzIGlzIHN0YW5kYXJkIG9wZXJhdGluZyBwcm9jZWR1cmUsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggYW55IHR5cGUgb2YgYXV0b21hdGVkIG9yIHNjcmlwdGVkIGRlcGxveW1lbnQsIHVwZGF0ZSwgb3IgZGF0YSB0cmFuc2Zvcm1hdGlvbi4gSSBjYW4ndCBwcm9jZWVkIHdpdGggYW55IG1pZ3JhdGlvbi1yZWxhdGVkIHRhc2sgdW50aWwgSSBjb25maXJtIHRoYXQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIGlzIHByZXNlbnQgYW5kIGFjY2Vzc2libGUuIFRoaXMgcHJvYmFibHkgbWVhbnMgdmVyaWZ5aW5nIHRoZSBwcmVzZW5jZSBvZiBhIHNwZWNpZmljIGZpbGUsIGVudmlyb25tZW50IHZhcmlhYmxlLCBkYXRhYmFzZSBlbnRyeSwgb3Igb3RoZXIgbWVhbnMgdGhhdCBkZWZpbmVzIHRoZSBtaWdyYXRpb24gcHJvY2VzcyBwYXJhbWV0ZXJzLiBXaXRob3V0IGtub3dpbmcgdGhlIHByZWNpc2Ugc3lzdGVtLCBJIGhhdmUgdG8gYXNzdW1lIGEgZmV3IHBvc3NpYmlsaXRpZXMgc3VjaCBhcyBhIG1pZ3JhdGlvbiBmaWxlLCBvciBhIHNwZWNpZmljIGRhdGFiYXNlIGVudHJ5LiBOb3csIGhvdyBkbyBJIGFjdHVhbGx5IGNoZWNrPyBEbyBJIGhhdmUgYSBwcmUtZXhpc3RpbmcgZnVuY3Rpb24/IExpYnJhcnk/IElzIGl0IGEgbWFudWFsIGNoZWNrPyBJIGFtIGdvaW5nIHRvIGFzc3VtZSBzb21lIGtpbmQgb2Ygc3lzdGVtIGFscmVhZHkgZXhpc3RzLCBhbmQgSSBuZWVkIHRvIGNoZWNrIGZvciB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTA1MywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6MjQ6MjAuMTY2NTczNDcxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTczMTk5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUlHUkFUSU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTY2OD1jb25maWcgTlVNQV9NSUdSQVRJT05cXG4tLVxcbm1tL0tjb25maWctNjc4LVxcbm1tL0tjb25maWc6Njc5OmNvbmZpZyBNSUdSQVRJT05cXG5tbS9LY29uZmlnLTY4MC1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjI0OjIwLjIxODMxMDM4M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTA1MjI5NjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipDaGVja2luZyB0aGUgTWlncmF0aW9uIENvbmZpZ3VyYXRpb24gaW4gbW0vS2NvbmZpZyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgXCJSaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24uXCIgU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGBNSUdSQVRJT05gIG9wdGlvbnMgd2l0aGluIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIG9yIHBvdGVudGlhbGx5IHR3ZWFraW5nIHRoZSBzeXN0ZW0ncyBtZW1vcnkgbWlncmF0aW9uIGNhcGFiaWxpdGllcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlc2UgY29uZmlndXJhdGlvbnMsIGFuZCB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZS4gVGhpcyBpcyBhIHByZXR0eSBmdW5kYW1lbnRhbCBhc3BlY3Qgb2YgaG93IHRoZSBrZXJuZWwgbWFuYWdlcyBtZW1vcnksIHNvIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCdzIGdvaW5nIG9uIHdpdGggbWlncmF0aW9uLiBMZXQncyBzZWUgd2hhdCdzIHNldCBhbmQgaWYgdGhlcmUncyBhbnl0aGluZyB1bnVzdWFsIG9yIHNvbWV0aGluZyB0aGF0IHNob3VsZCBiZSBhZGp1c3RlZCBpbiB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbi4gVGhpcyBpcyBzb21ldGhpbmcgSSdtIGludGltYXRlbHkgZmFtaWxpYXIgd2l0aCwgc28gSSdsbCBiZSBsb29raW5nIGF0IHRoZSBkZXRhaWxzIGFzIHdlbGwgYXMgdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTM1MywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjI0OjIyLjEyMzU0MjA0NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjU4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NzAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NzA6XFx0XFx0ZGVmYXVsdCB5XFxuIDY3MTpcXHRcXHRkZXBlbmRzIG9uIE5VTUEgXFx1MDAyNlxcdTAwMjYgTU1VXFxuIDY3MjpcXHRcXHRzZWxlY3QgTUlHUkFUSU9OXFxuIDY3MzpcXHRcXHRoZWxwXFxuIDY3NDpcXHRcXHQgIFN1cHBvcnQgdGhlIG1pZ3JhdGlvbiBvZiBwYWdlcyB0byBvdGhlciBOVU1BIG5vZGVzLCBhdmFpbGFibGUgdG9cXG4gNjc1OlxcdFxcdCAgdXNlciBzcGFjZSB0aHJvdWdoIGludGVyZmFjZXMgbGlrZSBtaWdyYXRlX3BhZ2VzKCksIG1vdmVfcGFnZXMoKSxcXG4gNjc2OlxcdFxcdCAgYW5kIG1iaW5kKCkuIFNlbGVjdGluZyB0aGlzIG9wdGlvbiBhbHNvIGVuYWJsZXMgc3VwcG9ydCBmb3IgcGFnZVxcbiA2Nzc6XFx0XFx0ICBkZW1vdGlvbiBmb3IgbWVtb3J5IHRpZXJpbmcuXFxuIDY3ODpcXHRcXG4gNjc5OlxcdGNvbmZpZyBNSUdSQVRJT05cXG4gNjgwOlxcdFxcdGJvb2xcXG4gNjgxOlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuIDY4MjpcXHRcXG4gNjgzOlxcdGNvbmZpZyBERVZJQ0VfTUlHUkFUSU9OXFxuIDY4NDpcXHRcXHRkZWZfYm9vbCBNSUdSQVRJT04gXFx1MDAyNlxcdTAwMjYgWk9ORV9ERVZJQ0VcXG4gNjg1OlxcdFxcbiA2ODY6XFx0Y29uZmlnIEFSQ0hfRU5BQkxFX0hVR0VQQUdFX01JR1JBVElPTlxcbiA2ODc6XFx0XFx0Ym9vbFxcbiA2ODg6XFx0XFxuIDY4OTpcXHRjb25maWcgQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVNcXG4gNjkwOlxcdFxcdGJvb2xcXG4gNjkxOlxcdFxcbiA2OTI6XFx0Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXFxuIDY5MzpcXHRcXHRkZWZfYm9vbCBuXFxuIDY5NDpcXHRcXHRoZWxwXFxuIDY5NTpcXHRcXHQgIEFsbG93cyB0aGUgcGFnZWJsb2NrX29yZGVyIHZhbHVlIHRvIGJlIGR5bmFtaWMgaW5zdGVhZCBvZiBqdXN0IHN0YW5kYXJkXFxuIDY5NjpcXHRcXHQgIEhVR0VUTEJfUEFHRV9PUkRFUiB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBIdWdlVExCIHBhZ2Ugc2l6ZXMgYXZhaWxhYmxlXFxuIDY5NzpcXHRcXHQgIG9uIGEgcGxhdGZvcm0uXFxuIDY5ODpcXHRcXG4gNjk5OlxcdFxcdCAgTm90ZSB0aGF0IHRoZSBwYWdlYmxvY2tfb3JkZXIgY2Fubm90IGV4Y2VlZCBNQVhfUEFHRV9PUkRFUiBhbmQgd2lsbCBiZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjoyNDoyMi4xMjM2Njk0NTZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDc5NTExNTUzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGlzIFBhdGNoJ3MgSW1wYWN0IG9uIE1lbW9yeSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IGRlZXBseSBpbnZvbHZlZCB3aXRoIG1lbW9yeSBtaWdyYXRpb24sIGNvbXBhY3Rpb24sIGFuZCBOVU1BIGJhbGFuY2luZywgZ2l2ZW4gdGhlIG1lbnRpb25zIG9mIGBOVU1BX01JR1JBVElPTmAsIGBNSUdSQVRJT05gLCBgQ09NUEFDVElPTmAsIGFuZCBgTlVNQV9CQUxBTkNJTkdgLiBXZSdyZSBlbmFibGluZyBtaWdyYXRpb24gaGVyZS4gVGhlIGZhY3QgdGhhdCBgTFJVX0dFTmAsIGBMUlVfR0VOX0VOQUJMRURgLCBhbmQgYE1FTUNHYCBhcmUgYWxzbyByZWxldmFudCBzdWdnZXN0cyBhIGNvbm5lY3Rpb24gdG8gZ2VuZXJhdGlvbmFsIExSVSBhbmQgbWVtb3J5IGNncm91cCBtYW5hZ2VtZW50IGFzIGl0IHJlbGF0ZXMgdG8gbWlncmF0aW9uLCB3aGljaCBpcyBpbnRyaWd1aW5nLlxuXG5JIG5lZWQgdG8gbWV0aWN1bG91c2x5IHJldmlldyB0aGlzIHBhdGNoLiBJdCBpbXBhY3RzIHNvbWUgY29yZSBhcmVhcy4gU3BlY2lmaWNhbGx5LCB0aGUgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgaW5jbHVkaW5nIE1HTFJVLCBtZW1jZyBMUlUgem9uZSBzaXplIGFkanVzdG1lbnRzLCBhbmQgcGFnZSBtaWdyYXRpb24gcmVmZXJlbmNlIGZsYWdzLCBhbGwgb2Ygd2hpY2ggYXJlIHZlcnkgc2Vuc2l0aXZlLiBUaGUgaW50cm9kdWN0aW9uIG9mIG5ldyBhc3NlcnRpb25zLCBzdWNoIGFzIHRob3NlIHVzaW5nIGBWTV9XQVJOX09OX09OQ0VgIGluIGZ1bmN0aW9ucyBsaWtlIGBscnVfc2V0X2dlbl9mbGFnc2AgYW5kIGBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplYCwgaXMgc29tZXRoaW5nIEkgbmVlZCB0byBwYXkgdmVyeSBjbG9zZSBhdHRlbnRpb24gdG8uIFRoZXNlIGFyZSBwb3RlbnRpYWwgcG9pbnRzIG9mIGZhaWx1cmUgb3IgZGVidWdnaW5nIGhvb2tzLiBJdCBhbHNvIHRvdWNoZXMgZ2VuZXJhdGlvbiBhbmQgdGllciBjYWxjdWxhdGlvbnMsIHBhZ2Ugc2Nhbm5pbmcsIGFuZCBldmljdGlvbiwgc3BlY2lmaWNhbGx5IGluIGBtbS92bXNjYW4uY2AuIExhc3RseSwgZmxhZyBtYW5pcHVsYXRpb24gcmVsYXRlZCB0byBmb2xpb3MsIGxpa2UgaW4gYGxydV9zZXRfcmVmc19mbGFnc2AsIGBmb2xpb19zZXRfbHJ1X3JlZnNgLCBldGMuLCBpcyBiZWluZyBtb2RpZmllZC5cblxuQmFzZWQgb24gYWxsIG9mIHRoaXMsIHRoaXMgcGF0Y2ggZGVmaW5pdGVseSB3YXJyYW50cyBleHRlbnNpdmUgZnV6emluZy4gVGhlIGNoYW5nZXMgYXJlIHRvbyBsb3ctbGV2ZWwgYW5kIGZhci1yZWFjaGluZyB0byBpZ25vcmUuIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGxvb2sgbGlrZSBwYXJ0aWN1bGFybHkgZnJ1aXRmdWwgdGFyZ2V0cyBmb3IgZnV6emluZzogYGxydV9nZW5fbG9va19hcm91bmRgLCBgZm9saW9fbWlncmF0ZV9mbGFnc2AsIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAsIGB3YWxrX3B0ZV9yYW5nZWAsIGB3YWxrX3BtZF9yYW5nZV9sb2NrZWRgLCBgZm9saW9fdXBkYXRlX2dlbmAsIGBldmljdF9mb2xpb3NgLCBgaXNvbGF0ZV9mb2xpb2AsIGBscnVfZ2VuX2luY19yZWZzYCwgYW5kIGBscnVfZ2VuX2NsZWFyX3JlZnNgLiBUaGV5IGhhbmRsZSB0aGUgbW9zdCBzZW5zaXRpdmUgYXNwZWN0cyBvZiBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2VzLlxuXG5BbmQsIG9mIGNvdXJzZSwgdGhlIGBMUlVfR0VOYCwgYExSVV9HRU5fRU5BQkxFRGAsIGBNRU1DR2AsIGFuZCBgTUlHUkFUSU9OYCBjb25maWd1cmF0aW9ucyBtdXN0IGJlIGVuYWJsZWQgdG8gZnVsbHkgZXhlcmNpc2UgdGhpcyBwYXRjaC5cblxuSSdsbCBwcm9jZWVkIHRvIGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIHRoaXMgaW5mb3JtYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5OTkwLCJPdXRwdXRUb2tlbnMiOjI0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjI0OjI2LjkxODc4NzcwM1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNDY1NDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNSUdSQVRJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJscnVfZ2VuX2xvb2tfYXJvdW5kXCIsXG4gICAgXCJmb2xpb19taWdyYXRlX2ZsYWdzXCIsXG4gICAgXCJtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZVwiLFxuICAgIFwid2Fsa19wdGVfcmFuZ2VcIixcbiAgICBcIndhbGtfcG1kX3JhbmdlX2xvY2tlZFwiLFxuICAgIFwiZm9saW9fdXBkYXRlX2dlblwiLFxuICAgIFwiZXZpY3RfZm9saW9zXCIsXG4gICAgXCJpc29sYXRlX2ZvbGlvXCIsXG4gICAgXCJscnVfZ2VuX2luY19yZWZzXCIsXG4gICAgXCJscnVfZ2VuX2NsZWFyX3JlZnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBhY3Jvc3MgbW0vdm1zY2FuLmMsIG1tL2ZvbGlvLmMsIG1tL21lbWNvbnRyb2wuYywgYW5kIG1tL21pZ3JhdGUuYywgYWx0ZXJpbmcgTXVsdGktR2VuIExSVSAoTUdMUlUpIHJlZmVyZW5jZSB0cmFja2luZywgZm9saW8gZmxhZyBtYW5pcHVsYXRpb24sIHRpZXIgY2FsY3VsYXRpb25zLCBwYWdlIGV2aWN0aW9uLCBhbmQgbWVtY2cgTFJVIHpvbmUgYWNjb3VudGluZy4gSXQgYWxzbyBhZGRzIHNldmVyYWwgVk1fV0FSTl9PTl9PTkNFIGFzc2VydGlvbnMgYW5kIGNoYW5nZXMgc3luY2hyb25pemF0aW9uL2FyaXRobWV0aWMgbG9naWMuIFRoZXNlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUlHUkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibHJ1X2dlbl9sb29rX2Fyb3VuZFwiLFxuICAgIFwiZm9saW9fbWlncmF0ZV9mbGFnc1wiLFxuICAgIFwibWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVcIixcbiAgICBcIndhbGtfcHRlX3JhbmdlXCIsXG4gICAgXCJ3YWxrX3BtZF9yYW5nZV9sb2NrZWRcIixcbiAgICBcImZvbGlvX3VwZGF0ZV9nZW5cIixcbiAgICBcImV2aWN0X2ZvbGlvc1wiLFxuICAgIFwiaXNvbGF0ZV9mb2xpb1wiLFxuICAgIFwibHJ1X2dlbl9pbmNfcmVmc1wiLFxuICAgIFwibHJ1X2dlbl9jbGVhcl9yZWZzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgYWNyb3NzIG1tL3Ztc2Nhbi5jLCBtbS9mb2xpby5jLCBtbS9tZW1jb250cm9sLmMsIGFuZCBtbS9taWdyYXRlLmMsIGFsdGVyaW5nIE11bHRpLUdlbiBMUlUgKE1HTFJVKSByZWZlcmVuY2UgdHJhY2tpbmcsIGZvbGlvIGZsYWcgbWFuaXB1bGF0aW9uLCB0aWVyIGNhbGN1bGF0aW9ucywgcGFnZSBldmljdGlvbiwgYW5kIG1lbWNnIExSVSB6b25lIGFjY291bnRpbmcuIEl0IGFsc28gYWRkcyBzZXZlcmFsIFZNX1dBUk5fT05fT05DRSBhc3NlcnRpb25zIGFuZCBjaGFuZ2VzIHN5bmNocm9uaXphdGlvbi9hcml0aG1ldGljIGxvZ2ljLiBUaGVzZSBwYXRocyBhcmUgZnVsbHkgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjoyNDoyNi45OTkyNjA1OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI3MzgyOTI2MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjoyNDoyNi45OTk3MTc0MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMyNzM3ODMxODYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIE11bHRpLUdlbmVyYXRpb25hbCBMUlUgKE1HTFJVKSBmb2xpbyBmbGFnIGhlbHBlcnMsIHBhZ2UgdGFibGUgLyBybWFwIHNjYW5uaW5nIGxvZ2ljLCBhbmQgbWVtY2cgTFJVIHpvbmUgc2l6ZSBhY2NvdW50aW5nLiBTcGVjaWZpY2FsbHk6XFxuLSBJdCByZXBsYWNlcyBkaXJlY3QgYGZvbGlvLVxcdTAwM2VmbGFncy5mYCBhY2Nlc3Mgd2l0aCBgZm9saW9fZmxhZ3MoZm9saW8sIDApYCBhY2Nlc3NvciBoZWxwZXJzIChgbHJ1X3NldF9nZW5fZmxhZ3NgLCBgbHJ1X2dldF9nZW5fZmxhZ3NgLCBgbHJ1X3NldF9yZWZzX2ZsYWdzYCwgYGxydV9nZXRfcmVmc19mbGFnc2AsIGBmb2xpb19zZXRfbHJ1X3JlZnNgLCBgZm9saW9fbWlncmF0ZV9scnVfcmVmc2ApLlxcbi0gSXQgY2xlYW5zIHVwIGByZWFkX2N0cmxfcG9zYCBwYXJhbWV0ZXJpemF0aW9uIGFuZCBgd2Fsa191cGRhdGVfZm9saW9gIGNhbGxlcnMuIFN0YWNrIHZhcmlhYmxlcyBzdWNoIGFzIGBzdHJ1Y3QgY3RybF9wb3MgcG9zYCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgaW4gYHJlYWRfY3RybF9wb3NgLCBhbmQgdGhlIGBpbnQgKnR5cGVgIG91dHB1dCBwYXJhbWV0ZXIgaW4gYGZvbGlvX3VwZGF0ZV9nZW5gIGlzIGd1YXJhbnRlZWQgdG8gYmUgaW5pdGlhbGl6ZWQgd2hlbiB0aGUgcmV0dXJuIHZhbHVlIGluZGljYXRlcyBwcm9tb3Rpb24gKGBvbGRfZ2VuIFxcdTAwM2U9IDBgKS5cXG4tIEl0IGNvbnZlcnRzIGBtei1cXHUwMDNlbHJ1X3pvbmVfc2l6ZWAgdG8gc2lnbmVkIGBsb25nYCB0byBzaW1wbGlmeSB1bmRlcmZsb3cgaGFuZGxpbmcuXFxuXFxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBQb3RlbnRpYWwgYnVncyBpbiB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIGNvbmN1cnJlbmN5L2xvY2tpbmcgcmFjZXMgb3Igc3RhdGUgY29ycnVwdGlvbikgYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIGtlcm5lbCBhc3NlcnRpb24gYnVpbGRzIHdpdGhvdXQgcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlM2NiYmM3NmUxYzk2NmM3NmZlNjIxMjk5YTMyZDE3YWZhN2U0MDAzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAxNjoyMzo0OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IGM3OTk5MjY0MzU1NjAuLjJiNjc2OTQyODVkMDQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC0xMDAsNyArMTAwLDcgQEAgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUge1xuIFx0LyogRmllbGRzIHdoaWNoIGdldCB1cGRhdGVkIG9mdGVuIGF0IHRoZSBlbmQuICovXG4gXHRzdHJ1Y3QgbHJ1dmVjXHRcdGxydXZlYztcbiBcdENBQ0hFTElORV9QQURESU5HKF9wYWQyXyk7XG4tXHR1bnNpZ25lZCBsb25nXHRcdGxydV96b25lX3NpemVbTUFYX05SX1pPTkVTXVtOUl9MUlVfTElTVFNdO1xuK1x0bG9uZ1x0XHRcdGxydV96b25lX3NpemVbTUFYX05SX1pPTkVTXVtOUl9MUlVfTElTVFNdO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXBfcmVjbGFpbV9pdGVyXHRpdGVyO1xuIFxuIFx0LypcbkBAIC04ODcsMTAgKzg4NywxNSBAQCBzdGF0aWMgaW5saW5lXG4gdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0ZW51bSBscnVfbGlzdCBscnUsIGludCB6b25lX2lkeClcbiB7XG4rXHRsb25nIHZhbDtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejtcbiBcbiBcdG16ID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7XG4tXHRyZXR1cm4gUkVBRF9PTkNFKG16LVx1MDAzZWxydV96b25lX3NpemVbem9uZV9pZHhdW2xydV0pO1xuK1x0dmFsID0gUkVBRF9PTkNFKG16LVx1MDAzZWxydV96b25lX3NpemVbem9uZV9pZHhdW2xydV0pO1xuK1x0aWYgKFdBUk5fT05fT05DRSh2YWwgXHUwMDNjIDApKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiB2YWw7XG4gfVxuIFxuIHZvaWQgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmggYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG5pbmRleCA2MjFjODY1M2Q4ZjdlLi5hYjY5Yjk5MzA4OTNmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuQEAgLTMwLDYgKzMwLDE3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2lzX2ZpbGVfbHJ1KGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gIWZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbyk7XG4gfVxuIFxuKy8qKlxuKyAqIGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1IC0gU2hvdWxkIHRoZSBmb2xpbyBiZSBvbiBhIGZpbGUgTFJVIG9yIGFub24gTFJVP1xuKyAqIEBmbGFnczogVGhlIGZvbGlvJ3MgZmxhZ3MuXG4rICpcbisgKiBKdXN0IGxpa2UgZm9saW9faXNfZmlsZV9scnUgYnV0IHRha2UgdGhlIGZvbGlvIGZsYWdzIGRpcmVjdGx5IGluc3RlYWQuXG4rICovXG4rc3RhdGljIGlubGluZSBpbnQgZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUoY29uc3QgdW5zaWduZWQgbG9uZyAqZmxhZ3MpXG4re1xuK1x0cmV0dXJuICF0ZXN0X2JpdChQR19zd2FwYmFja2VkLCBmbGFncyk7XG4rfVxuK1xuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdFx0XHRlbnVtIGxydV9saXN0IGxydSwgZW51bSB6b25lX3R5cGUgemlkLFxuIFx0XHRcdFx0bG9uZyBucl9wYWdlcylcbkBAIC0xNDIsMTAgKzE1Myw2NiBAQCBzdGF0aWMgaW5saW5lIGludCBscnVfdGllcl9mcm9tX3JlZnMoaW50IHJlZnMsIGJvb2wgd29ya2luZ3NldClcbiBcdHJldHVybiB3b3JraW5nc2V0ID8gTUFYX05SX1RJRVJTIC0gMSA6IG9yZGVyX2Jhc2VfMihyZWZzKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbisvKipcbisgKiBscnVfc2V0X2dlbl9mbGFncyAtIFNldCB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIHRvIHNwZWNpZmllZCBmb2xpbyBmbGFncy5cbisgKiBAZmxhZ3M6IHBvaW50ZXIgdG8gdGhlIGZvbGlvIGZsYWdzXG4rICogQGdlbjogZ2VuZXJhdGlvbiBudW1iZXIsIGJldHdlZW4gMCBhbmQgKE1BWF9OUl9HRU5TIC0gMSksIGluY2x1c2l2ZS5cbisgKi9cbitzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X3NldF9nZW5fZmxhZ3ModW5zaWduZWQgbG9uZyAqZmxhZ3MsIGludCBnZW4pXG4re1xuK1x0QlVJTERfQlVHX09OKExSVV9HRU5fTUFTSyBcdTAwMjYgTFJVX1JFRlNfTUFTSyk7XG4rXHRWTV9XQVJOX09OX09OQ0UoZ2VuIFx1MDAzZT0gTUFYX05SX0dFTlMgfHwgZ2VuIFx1MDAzYyAwKTtcbitcdC8qIFN0b3JlIGdlbiBvZmZzZXQgYnkgMSwgemVybyBtZWFucyB0aGUgZm9saW8gaXMgb2ZmLWxpc3QuICovXG4rXHQqZmxhZ3MgXHUwMDI2PSB+TFJVX0dFTl9NQVNLO1xuK1x0KmZsYWdzIHw9IChnZW4gKyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuK31cbitcbisvKipcbisgKiBscnVfZ2V0X2dlbl9mbGFncyAtIFJldHVybiB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIGZyb20gZm9saW8gZmxhZ3MuXG4rICogQGZsYWdzOiBmb2xpbyBmbGFnc1xuKyAqXG4rICogUmV0dXJuczogQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLiBSZXR1cm5zXG4rICogLTEgaWYgdGhlIGZsYWdzIGluZGljYXRlIHRoZSBmb2xpbyBpcyBvZmYgdGhlIGxpc3QgKGUuZy4sIGlzb2xhdGVkKS5cbisgKi9cbitzdGF0aWMgaW5saW5lIGludCBscnVfZ2V0X2dlbl9mbGFncyh1bnNpZ25lZCBsb25nIGZsYWdzKVxuK3tcbitcdGludCBnZW4gPSAoKGZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4rXG4rXHQvKiBFeGNsdWRlIHRoZSBsZWdhbCAtMSBmcm9tIHRoZSB1bnNpZ25lZCBNQVhfTlJfR0VOUyBjb21wYXJpc29uICovXG4rXHRWTV9XQVJOX09OX09OQ0UoZ2VuICE9IC0xIFx1MDAyNlx1MDAyNiBnZW4gXHUwMDNlPSBNQVhfTlJfR0VOUyk7XG4rXHRyZXR1cm4gZ2VuO1xuK31cbitcbisvKipcbisgKiBscnVfc2V0X3JlZnNfZmxhZ3MgLSBTZXQgdGhlIExSVSByZWZlcmVuY2VkIGNvdW50IHRvIGZvbGlvIGZsYWdzLlxuKyAqIEBmbGFnczogcG9pbnRlciB0byB0aGUgZm9saW8gZmxhZ3NcbisgKiBAcmVmczogcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCBudW1iZXIsIGJldHdlZW4gMCBhbmQgTFJVX1JFRlNfTUFYLCBpbmNsdXNpdmUuXG4rICpcbisgKiBGb3IgTUdMUlUsIFBHX3JlZmVyZW5jZWQgaG9sZHMgdGhlIGZpcnN0IHJlZiwgYW5kIHRoZSBleHRyYSBiaXRzIGhvbGQgdGhlXG4rICogcmVtYWluaW5nIHJlZnMuIEZvciBjbGFzc2ljYWwgTFJVIHRoZSBleHRyYSBiaXRzIGFyZSBub3QgdXNlZCwgc28gaXQgY2FuXG4rICogYWxzbyBiZSBzZWVuIGFzIHRoZSByZWZzIGNvdW50IG5ldmVyIGV4Y2VlZHMgMS4gSW4gYm90aCBjYXNlcywgcmVmcyA9PSAxXG4rICogbWVhbnMgUEdfcmVmZXJlbmNlZCBpcyBzZXQgYW5kIHRoZSBleHRyYSBiaXRzIGFyZSB6ZXJvLCBhbmQgcmVmcyA9PSAwIG1lYW5zXG4rICogUEdfcmVmZXJlbmNlZCBhbmQgdGhlIGV4dHJhIGJpdHMgYXJlIGFsbCB1bnNldC5cbisgKi9cbitzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X3NldF9yZWZzX2ZsYWdzKHVuc2lnbmVkIGxvbmcgKmZsYWdzLCB1bnNpZ25lZCBpbnQgcmVmcylcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuK1x0Vk1fV0FSTl9PTl9PTkNFKHJlZnMgXHUwMDNlIExSVV9SRUZTX01BWCk7XG4rXHRCVUlMRF9CVUdfT04oTFJVX1JFRlNfTUFYICE9IChMUlVfUkVGU19NQVNLIFx1MDAzZVx1MDAzZSBMUlVfUkVGU19QR09GRikgKyAxKTtcbiBcbitcdCpmbGFncyBcdTAwMjY9IH5MUlVfUkVGU19GTEFHUztcbitcdGlmICghcmVmcylcbitcdFx0cmV0dXJuO1xuK1x0KmZsYWdzIHw9IChCSVQoUEdfcmVmZXJlbmNlZCkgfCAoKHJlZnMgLSAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfUkVGU19QR09GRikpO1xuK31cbitcbisvKipcbisgKiBscnVfZ2V0X3JlZnNfZmxhZ3MgLSBSZXR1cm4gTFJVIHJlZmVyZW5jZWQgLyBhY2Nlc3MgY291bnQgZnJvbSBmb2xpbyBmbGFncy5cbisgKiBAZmxhZ3M6IGZvbGlvIGZsYWdzXG4rICpcbisgKiBSZWFkcyB0aGUgTFJVIHJlZmVyZW5jZWQgY291bnQgc2V0IGJ5IGxydV9zZXRfcmVmc19mbGFncygpLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgaW50IGxydV9nZXRfcmVmc19mbGFncyh1bnNpZ25lZCBsb25nIGZsYWdzKVxuK3tcbiBcdGlmICghKGZsYWdzIFx1MDAyNiBCSVQoUEdfcmVmZXJlbmNlZCkpKVxuIFx0XHRyZXR1cm4gMDtcbiBcdC8qXG5AQCAtMTU1LDExICsyMjIsMjQgQEAgc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHJldHVybiAoKGZsYWdzIFx1MDAyNiBMUlVfUkVGU19NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX1JFRlNfUEdPRkYpICsgMTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X2dlbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbitcdHJldHVybiBscnVfZ2V0X3JlZnNfZmxhZ3MoUkVBRF9PTkNFKCpjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpKTtcbit9XG4gXG4tXHRyZXR1cm4gKChmbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IHJlZnMpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbitcbitcdGRvIHtcbitcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuK1x0XHRscnVfc2V0X3JlZnNfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCByZWZzKTtcbitcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRyZXR1cm4gbHJ1X2dldF9nZW5fZmxhZ3MoUkVBRF9PTkNFKCpjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBib29sIGxydV9nZW5faXNfYWN0aXZlKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IGdlbilcbkBAIC0yNzAsNyArMzUwLDcgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fYWRkX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcbiBcdGZsYWdzID0gKGdlbiArIDFVTCkgXHUwMDNjXHUwMDNjIExSVV9HRU5fUEdPRkY7XG4gXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUlOX05SX0dFTlMgYWJvdXQgUEdfYWN0aXZlICovXG4tXHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9HRU5fTUFTSyB8IEJJVChQR19hY3RpdmUpLCBmbGFncyk7XG4rXHRzZXRfbWFza19iaXRzKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgTFJVX0dFTl9NQVNLIHwgQklUKFBHX2FjdGl2ZSksIGZsYWdzKTtcbiBcbiBcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgLTEsIGdlbik7XG4gXHQvKiBmb3IgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKCkgKi9cbkBAIC0yOTUsNyArMzc1LDcgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcbiBcdC8qIGZvciBmb2xpb19taWdyYXRlX2ZsYWdzKCkgKi9cbiBcdGZsYWdzID0gIXJlY2xhaW1pbmcgXHUwMDI2XHUwMDI2IGxydV9nZW5faXNfYWN0aXZlKGxydXZlYywgZ2VuKSA/IEJJVChQR19hY3RpdmUpIDogMDtcbi1cdGZsYWdzID0gc2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfR0VOX01BU0ssIGZsYWdzKTtcbitcdGZsYWdzID0gc2V0X21hc2tfYml0cyhmb2xpb19mbGFncyhmb2xpbywgMCksIExSVV9HRU5fTUFTSywgZmxhZ3MpO1xuIFx0Z2VuID0gKChmbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuIFxuIFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBnZW4sIC0xKTtcbkBAIC0zMDQsMTEgKzM4NCwxOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxuKy8qKlxuKyAqIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMgLSBjb3B5IHRoZSByZWZlcmVuY2Ugc3RhdGUgdG8gYSBuZXcgZm9saW9cbisgKiBAbmV3OiB0aGUgZGVzdGluYXRpb24gZm9saW9cbisgKiBAb2xkOiB0aGUgc291cmNlIGZvbGlvXG4rICpcbisgKiBUcmFuc2ZlciB0aGUgcmVmZXJlbmNlIHN0YXRlIHRvIEBuZXcgZHVyaW5nIG1pZ3JhdGlvbjogdGhlIE1HTFJVXG4rICogcmVmcyBjb3VudCwgaW5jbHVkaW5nIFBHX3JlZmVyZW5jZWQsIG9yIGp1c3QgUEdfcmVmZXJlbmNlZCBmb3IgdGhlXG4rICogYWN0aXZlL2luYWN0aXZlIExSVS5cbisgKi9cbitzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyByZWZzID0gUkVBRF9PTkNFKG9sZC1cdTAwM2VmbGFncy5mKSBcdTAwMjYgTFJVX1JFRlNfTUFTSztcbi1cbi1cdHNldF9tYXNrX2JpdHMoXHUwMDI2bmV3LVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIHJlZnMpO1xuK1x0QlVJTERfQlVHX09OKExSVV9SRUZTX01BU0sgXHUwMDI2IEJJVChQR19yZWZlcmVuY2VkKSk7XG4rXHRmb2xpb19zZXRfbHJ1X3JlZnMobmV3LCBmb2xpb19scnVfcmVmcyhvbGQpKTtcbiB9XG4gI2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXG4gXG5AQCAtMzM3LDkgKzQyNSwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcbitzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXG4ge1xuLVxuK1x0aWYgKGZvbGlvX3Rlc3RfcmVmZXJlbmNlZChvbGQpKVxuK1x0XHRmb2xpb19zZXRfcmVmZXJlbmNlZChuZXcpO1xuIH1cbiAjZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuaW5kZXggODRlMjM3ZjJjMTdkYi4uYzlhZTc5OTFhOGIyMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbkBAIC00OTUsMTEgKzQ5NSwxNCBAQCBlbnVtIGxydXZlY19mbGFncyB7XG4gICogZm9saW8tXHUwMDNlZmxhZ3MsIG1hc2tlZCBieSBMUlVfUkVGU19NQVNLLlxuICAqL1xuICNkZWZpbmUgTUFYX05SX1RJRVJTXHRcdDRVXG4rI2RlZmluZSBMUlVfVElFUl9NSU5cdFx0MFVcbisjZGVmaW5lIExSVV9USUVSX01BWFx0XHQoTUFYX05SX1RJRVJTIC0gMSlcbiBcbiAjaWZuZGVmIF9fR0VORVJBVElOR19CT1VORFNfSFxuIFxuICNkZWZpbmUgTFJVX0dFTl9NQVNLXHRcdCgoQklUKExSVV9HRU5fV0lEVEgpIC0gMSkgXHUwMDNjXHUwMDNjIExSVV9HRU5fUEdPRkYpXG4gI2RlZmluZSBMUlVfUkVGU19NQVNLXHRcdCgoQklUKExSVV9SRUZTX1dJRFRIKSAtIDEpIFx1MDAzY1x1MDAzYyBMUlVfUkVGU19QR09GRilcbisjZGVmaW5lIExSVV9SRUZTX01BWFx0XHRCSVQoTFJVX1JFRlNfV0lEVEgpXG4gXG4gLypcbiAgKiBGb3IgZm9saW9zIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycyxcbmRpZmYgLS1naXQgYS9tbS9mb2xpby5jIGIvbW0vZm9saW8uY1xuaW5kZXggNTBhNmRiZTU1OTk4ZS4uNDdhNDM3ZTBmN2ZkZSAxMDA2NDRcbi0tLSBhL21tL2ZvbGlvLmNcbisrKyBiL21tL2ZvbGlvLmNcbkBAIC0zNTQsMjYgKzM1NCwyOCBAQCBzdGF0aWMgdm9pZCBfX2xydV9jYWNoZV9hY3RpdmF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFxuIHN0YXRpYyB2b2lkIGxydV9nZW5faW5jX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4tXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuK1x0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbitcdGludCByZWZzO1xuIFxuIFx0aWYgKGZvbGlvX3Rlc3RfdW5ldmljdGFibGUoZm9saW8pKVxuIFx0XHRyZXR1cm47XG4gXG4gXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi9cbi1cdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSkge1xuLVx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XG4rXHRpZiAoIWZvbGlvX2xydV9yZWZzKGZvbGlvKSkge1xuK1x0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4gXHRkbyB7XG4tXHRcdGlmICgob2xkX2ZsYWdzIFx1MDAyNiBMUlVfUkVGU19NQVNLKSA9PSBMUlVfUkVGU19NQVNLKSB7XG4rXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncztcbitcdFx0cmVmcyA9IGxydV9nZXRfcmVmc19mbGFncyhvbGRfZmxhZ3MpO1xuK1x0XHRpZiAocmVmcyA9PSBMUlVfUkVGU19NQVgpIHtcbiBcdFx0XHRpZiAoIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpXG4gXHRcdFx0XHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XG4gXHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4tXG4tXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncyArIEJJVChMUlVfUkVGU19QR09GRik7XG4tXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbitcdFx0bHJ1X3NldF9yZWZzX2ZsYWdzKFx1MDAyNm5ld19mbGFncywgcmVmcyArIDEpO1xuK1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5AQCAtMzg1LDcgKzM4Nyw4IEBAIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0aWYgKGdlbiBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTIHwgQklUKFBHX3dvcmtpbmdzZXQpLCAwKTtcbitcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4rXHRmb2xpb19jbGVhcl93b3JraW5nc2V0KGZvbGlvKTtcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdHNlcSA9IFJFQURfT05DRShmb2xpb19scnV2ZWMoZm9saW8pLVx1MDAzZWxydWdlbi5taW5fc2VxW3R5cGVdKTtcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IGJkMWU3ZTE1NDQyNjUuLmYxN2IyYjJkNjEwNTUgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTE1MjksMjggKzE1MjksMTIgQEAgdm9pZCBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LFxuIFx0XHRcdFx0aW50IHppZCwgbG9uZyBucl9wYWdlcylcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XG4tXHR1bnNpZ25lZCBsb25nICpscnVfc2l6ZTtcbi1cdGxvbmcgc2l6ZTtcbiBcbiBcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG4gXHRcdHJldHVybjtcbiBcbiBcdG16ID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7XG4tXHRscnVfc2l6ZSA9IFx1MDAyNm16LVx1MDAzZWxydV96b25lX3NpemVbemlkXVtscnVdO1xuLVxuLVx0aWYgKG5yX3BhZ2VzIFx1MDAzYyAwKVxuLVx0XHQqbHJ1X3NpemUgKz0gbnJfcGFnZXM7XG4tXG4tXHRzaXplID0gKmxydV9zaXplO1xuLVx0aWYgKFdBUk5fT05DRShzaXplIFx1MDAzYyAwLFxuLVx0XHRcIiVzKCVwLCAlZCwgJWxkKTogbHJ1X3NpemUgJWxkXFxuXCIsXG4tXHRcdF9fZnVuY19fLCBscnV2ZWMsIGxydSwgbnJfcGFnZXMsIHNpemUpKSB7XG4tXHRcdFZNX0JVR19PTigxKTtcbi1cdFx0KmxydV9zaXplID0gMDtcbi1cdH1cbi1cbi1cdGlmIChucl9wYWdlcyBcdTAwM2UgMClcbi1cdFx0KmxydV9zaXplICs9IG5yX3BhZ2VzO1xuK1x0bXotXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6aWRdW2xydV0gKz0gbnJfcGFnZXM7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuY1xuaW5kZXggMTViNDU4MzJiY2ZhNy4uYTM2OWQwYzk1YzM4NiAxMDA2NDRcbi0tLSBhL21tL21pZ3JhdGUuY1xuKysrIGIvbW0vbWlncmF0ZS5jXG5AQCAtNzc2LDggKzc3Niw5IEBAIHZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdGludCBjcHVwaWQ7XG4gXG4tXHRpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSlcbi1cdFx0Zm9saW9fc2V0X3JlZmVyZW5jZWQobmV3Zm9saW8pO1xuK1x0LyogQ29weSB0aGUgcmVmZXJlbmNlIHN0YXRlLCBpbmNsdWRpbmcgUEdfcmVmZXJlbmNlZCAqL1xuK1x0Zm9saW9fbWlncmF0ZV9scnVfcmVmcyhuZXdmb2xpbywgZm9saW8pO1xuK1xuIFx0aWYgKGZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKVxuIFx0XHRmb2xpb19tYXJrX3VwdG9kYXRlKG5ld2ZvbGlvKTtcbiBcdGlmIChmb2xpb190ZXN0X2NsZWFyX2FjdGl2ZShmb2xpbykpIHtcbkBAIC04MDcsNyArODA4LDYgQEAgdm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRpZiAoZm9saW9fdGVzdF9pZGxlKGZvbGlvKSlcbiBcdFx0Zm9saW9fc2V0X2lkbGUobmV3Zm9saW8pO1xuIFxuLVx0Zm9saW9fbWlncmF0ZV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7XG4gXHQvKlxuIFx0ICogQ29weSBOVU1BIGluZm9ybWF0aW9uIHRvIHRoZSBuZXcgcGFnZSwgdG8gcHJldmVudCBvdmVyLWVhZ2VyXG4gXHQgKiBmdXR1cmUgbWlncmF0aW9ucyBvZiB0aGlzIHNhbWUgcGFnZS5cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCAyNDVmNjhjNzViMjg5Li40MGQzZjFiNDhhNzRjIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtODYzLDE5ICs4NjMsMjIgQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuIFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSkge1xuIFx0XHQvKiBBY3RpdmF0ZSBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciBmaXJzdCB1c2FnZS4gKi9cbiBcdFx0aWYgKGlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkge1xuLVx0XHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7XG4rXHRcdFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xuK1x0XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHRcdH1cbiBcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuK1x0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXG4gXHQvKiBQcm9tb3RlIG9uIHNlY29uZCBhY2Nlc3MgKi9cbi1cdGlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgXHUwMDNlIDEpXG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7XG4tXHRlbHNlXG4rXHRpZiAoZm9saW9fbHJ1X3JlZnMoZm9saW8pIFx1MDAzZSAxKSB7XG4rXHRcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcbitcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbitcdH0gZWxzZSB7XG4gXHRcdGZvbGlvX21hcmtfYWNjZXNzZWQoZm9saW8pO1xuK1x0fVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuICNlbHNlXG5AQCAtMzIyMCw4ICszMjIzLDggQEAgc3RydWN0IGN0cmxfcG9zIHtcbiBcdGludCBnYWluO1xuIH07XG4gXG4tc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllciwgaW50IGdhaW4sXG4tXHRcdFx0ICBzdHJ1Y3QgY3RybF9wb3MgKnBvcylcbitzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyX21pbixcbitcdFx0XHQgIGludCB0aWVyX21heCwgaW50IGdhaW4sIHN0cnVjdCBjdHJsX3BvcyAqcG9zKVxuIHtcbiBcdGludCBpO1xuIFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5AQCAtMzIzMCw3ICszMjMzLDcgQEAgc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllciwgaW50IGdhaW4sXG4gXHRwb3MtXHUwMDNlZ2FpbiA9IGdhaW47XG4gXHRwb3MtXHUwMDNlcmVmYXVsdGVkID0gcG9zLVx1MDAzZXRvdGFsID0gMDtcbiBcbi1cdGZvciAoaSA9IHRpZXIgJSBNQVhfTlJfVElFUlM7IGkgXHUwMDNjPSBtaW4odGllciwgTUFYX05SX1RJRVJTIC0gMSk7IGkrKykge1xuK1x0Zm9yIChpID0gdGllcl9taW47IGkgXHUwMDNjPSB0aWVyX21heDsgaSsrKSB7XG4gXHRcdHBvcy1cdTAwM2VyZWZhdWx0ZWQgKz0gbHJ1Z2VuLVx1MDAzZWF2Z19yZWZhdWx0ZWRbdHlwZV1baV0gK1xuIFx0XHRcdFx0ICBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNmxydWdlbi1cdTAwM2VyZWZhdWx0ZWRbaGlzdF1bdHlwZV1baV0pO1xuIFx0XHRwb3MtXHUwMDNldG90YWwgKz0gbHJ1Z2VuLVx1MDAzZWF2Z190b3RhbFt0eXBlXVtpXSArXG5AQCAtMzI5MSwxMSArMzI5NCwxMSBAQCBzdGF0aWMgYm9vbCBwb3NpdGl2ZV9jdHJsX2VycihzdHJ1Y3QgY3RybF9wb3MgKnNwLCBzdHJ1Y3QgY3RybF9wb3MgKnB2KVxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gXG4gLyogcHJvbW90ZSBwYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzICovXG4tc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4rc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBpbnQgKnR5cGUsXG4rXHRcdFx0ICAgIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbi1cbi1cdFZNX1dBUk5fT05fT05DRShnZW4gXHUwMDNlPSBNQVhfTlJfR0VOUyk7XG4rXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuK1x0aW50IG9sZF9nZW47XG4gXG4gXHQvKlxuIFx0ICogU2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTLCBhbmQgYWN0aXZhdGUgZmlsZS1iYWNrZWRcbkBAIC0zMzA0LDMxICszMzA3LDM1IEBAIHN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hXG4gXHQgKi9cbiBcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHQgICAgIWlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkge1xuLVx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XG4rXHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XG4gXHRcdHJldHVybiAtMTtcbiBcdH1cbiBcbiBcdGRvIHtcbitcdFx0b2xkX2dlbiA9IGxydV9nZXRfZ2VuX2ZsYWdzKG9sZF9mbGFncyk7XG4rXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncztcbitcbiBcdFx0LyogbHJ1X2dlbl9kZWxfZm9saW8oKSBoYXMgaXNvbGF0ZWQgdGhpcyBwYWdlPyAqL1xuLVx0XHRpZiAoIShvbGRfZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykpXG4tXHRcdFx0cmV0dXJuIC0xO1xuK1x0XHRpZiAob2xkX2dlbiBcdTAwM2MgMClcbitcdFx0XHRicmVhaztcbiBcbi1cdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzIFx1MDAyNiB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTtcbi1cdFx0bmV3X2ZsYWdzIHw9ICgoZ2VuICsgMVVMKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRikgfCBCSVQoUEdfd29ya2luZ3NldCk7XG4tXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbitcdFx0bHJ1X3NldF9nZW5fZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCBuZXdfZ2VuKTtcbitcdFx0bHJ1X3NldF9yZWZzX2ZsYWdzKFx1MDAyNm5ld19mbGFncywgMCk7XG4rXHRcdG5ld19mbGFncyB8PSBCSVQoUEdfd29ya2luZ3NldCk7XG4rXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuIFxuLVx0cmV0dXJuICgob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4rXHQqdHlwZSA9IGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KFx1MDAyNm9sZF9mbGFncyk7XG4rXHRyZXR1cm4gb2xkX2dlbjtcbiB9XG4gXG4gc3RhdGljIGludCBfX2ZvbGlvX2luY19nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9nZW4sIGJvb2wgKmluY3JlYXNlZClcbiB7XG4tXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuK1x0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbiBcdGludCBuZXdfZ2VuO1xuIFxuLVx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCEob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spLCBmb2xpbyk7XG4tXG4gXHRkbyB7XG4tXHRcdG5ld19nZW4gPSAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuK1x0XHRuZXdfZ2VuID0gbHJ1X2dldF9nZW5fZmxhZ3Mob2xkX2ZsYWdzKTtcbitcbiBcdFx0LyogZm9saW9fdXBkYXRlX2dlbigpIGhhcyBwcm9tb3RlZCB0aGlzIHBhZ2U/ICovXG4gXHRcdGlmIChuZXdfZ2VuIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgbmV3X2dlbiAhPSBvbGRfZ2VuKSB7XG4gXHRcdFx0aWYgKGluY3JlYXNlZClcbkBAIC0zMzM2LDExICszMzQzLDEyIEBAIHN0YXRpYyBpbnQgX19mb2xpb19pbmNfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfZ2VuLCBib29sICppbmNyZWFzZWQpXG4gXHRcdFx0cmV0dXJuIG5ld19nZW47XG4gXHRcdH1cbiBcbitcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuIFx0XHRuZXdfZ2VuID0gKG9sZF9nZW4gKyAxKSAlIE1BWF9OUl9HRU5TO1xuIFxuLVx0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgXHUwMDI2IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpO1xuLVx0XHRuZXdfZmxhZ3MgfD0gKG5ld19nZW4gKyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuLVx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4rXHRcdGxydV9zZXRfZ2VuX2ZsYWdzKFx1MDAyNm5ld19mbGFncywgbmV3X2dlbik7XG4rXHRcdGxydV9zZXRfcmVmc19mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIDApO1xuK1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiBcbiBcdGlmIChpbmNyZWFzZWQpXG4gXHRcdCppbmNyZWFzZWQgPSB0cnVlO1xuQEAgLTMzNjIsOSArMzM3MCw4IEBAIHN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gfVxuIFxuIHN0YXRpYyB2b2lkIHVwZGF0ZV9iYXRjaF9zaXplKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tXHRcdFx0ICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuKVxuK1x0XHRcdCAgICAgIGludCBvbGRfZ2VuLCBpbnQgbmV3X2dlbiwgaW50IHR5cGUpXG4ge1xuLVx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG4gXHRpbnQgem9uZSA9IGZvbGlvX3pvbmVudW0oZm9saW8pO1xuIFx0aW50IGRlbHRhID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIFxuQEAgLTM1NTEsMjIgKzM1NTgsMjQgQEAgc3RhdGljIGJvb2wgc3VpdGFibGVfdG9fc2NhbihpbnQgdG90YWwsIGludCB5b3VuZylcbiB9XG4gXG4gc3RhdGljIHZvaWQgd2Fsa191cGRhdGVfZm9saW8oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBib29sIGRpcnR5KVxuK1x0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgZGlydHkpXG4ge1xuLVx0aW50IG9sZF9nZW47XG4rXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiwgdHlwZTtcbiBcbiBcdGlmICghZm9saW8pXG4gXHRcdHJldHVybjtcbiBcbitcdG5ld19nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKFJFQURfT05DRShscnV2ZWMtXHUwMDNlbHJ1Z2VuLm1heF9zZXEpKTtcbitcbiBcdGlmIChkaXJ0eSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIFx1MDAyNlx1MDAyNlxuIFx0ICAgICEoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAgICFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpKVxuIFx0XHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbiBcbiBcdGlmICh3YWxrKSB7XG4tXHRcdG9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpO1xuK1x0XHRvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgXHUwMDI2dHlwZSwgXHUwMDI2dm1hLVx1MDAzZWZsYWdzKTtcbiBcdFx0aWYgKG9sZF9nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXG4tXHRcdFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xuK1x0XHRcdHVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuLCB0eXBlKTtcbiBcdH0gZWxzZSBpZiAobHJ1X2dlbl9zZXRfcmVmcyhmb2xpbywgXHUwMDI2dm1hLVx1MDAzZWZsYWdzKSkge1xuIFx0XHRvbGRfZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7XG4gXHRcdGlmIChvbGRfZ2VuIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgb2xkX2dlbiAhPSBuZXdfZ2VuKVxuQEAgLTM1ODgsOCArMzU5Nyw2IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXHUwMDNlcHJpdmF0ZTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVx1MDAzZWxydXZlYyk7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdERFRklORV9NQVhfU0VRKHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xuIFx0dW5zaWduZWQgaW50IG5yO1xuIFx0cG1kX3QgcG1kdmFsO1xuIFxuQEAgLTM2NDAsNyArMzY0Nyw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAobGFzdCAhPSBmb2xpbykge1xuLVx0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLVx1MDAzZXZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC0zNjUzLDcgKzM2NjAsNyBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0d2Fsay1cdTAwM2VtbV9zdGF0c1tNTV9MRUFGX1lPVU5HXSArPSBucjtcbiBcdH1cbiBcbi1cdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCB3YWxrLVx1MDAzZWxydXZlYywgbGFzdCwgZGlydHkpO1xuIFx0bGFzdCA9IE5VTEw7XG4gXG4gXHRpZiAoaSBcdTAwM2MgUFRSU19QRVJfUFRFIFx1MDAyNlx1MDAyNiBnZXRfbmV4dF92bWEoUE1EX01BU0ssIFBBR0VfU0laRSwgYXJncywgXHUwMDI2c3RhcnQsIFx1MDAyNmVuZCkpXG5AQCAtMzY3Niw4ICszNjgzLDYgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcbiBcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVx1MDAzZXByaXZhdGU7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay1cdTAwM2VscnV2ZWMpO1xuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdCh3YWxrLVx1MDAzZWxydXZlYyk7XG4tXHRERUZJTkVfTUFYX1NFUSh3YWxrLVx1MDAzZWxydXZlYyk7XG4tXHRpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcbiBcbiBcdFZNX1dBUk5fT05fT05DRShwdWRfbGVhZigqcHVkKSk7XG4gXG5AQCAtMzczMSw3ICszNzM2LDcgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcbiBcdFx0XHRnb3RvIG5leHQ7XG4gXG4gXHRcdGlmIChsYXN0ICE9IGZvbGlvKSB7XG4tXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIHdhbGstXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXG4gXHRcdFx0bGFzdCA9IGZvbGlvO1xuIFx0XHRcdGRpcnR5ID0gZmFsc2U7XG5AQCAtMzc0NSw3ICszNzUwLDcgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcbiBcdFx0aSA9IGkgXHUwMDNlIE1JTl9MUlVfQkFUQ0ggPyAwIDogZmluZF9uZXh0X2JpdChiaXRtYXAsIE1JTl9MUlVfQkFUQ0gsIGkpICsgMTtcbiBcdH0gd2hpbGUgKGkgXHUwMDNjPSBNSU5fTFJVX0JBVENIKTtcbiBcbi1cdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4rXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIHdhbGstXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXG4gXHRsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTtcbiBcdHNwaW5fdW5sb2NrKHB0bCk7XG5AQCAtNDM1MSw4ICs0MzU2LDYgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGZvbGlvX3BnZGF0KGZvbGlvKTtcbiBcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcbiBcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZTtcbi1cdHVuc2lnbmVkIGxvbmcgbWF4X3NlcTtcbi1cdGludCBnZW47XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKHB2bXctXHUwMDNlcHRsKTtcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2xydShmb2xpbyksIGZvbGlvKTtcbkBAIC00Mzg5LDggKzQzOTIsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG4gXG4gXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xuIFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcbi1cdG1heF9zZXEgPSBSRUFEX09OQ0UoKGxydXZlYyktXHUwMDNlbHJ1Z2VuLm1heF9zZXEpO1xuLVx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcbiBcdG1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XG4gXG4gXHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xuQEAgLTQ0MjIsNyArNDQyMyw3IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKGxhc3QgIT0gZm9saW8pIHtcbi1cdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXG4gXHRcdFx0bGFzdCA9IGZvbGlvO1xuIFx0XHRcdGRpcnR5ID0gZmFsc2U7XG5AQCAtNDQzNCwxMyArNDQzNSwxNCBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG4gXHRcdHlvdW5nICs9IG5yO1xuIFx0fVxuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXG4gXHRsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTtcbiBcbiBcdC8qIGZlZWRiYWNrIGZyb20gcm1hcCB3YWxrZXJzIHRvIHBhZ2UgdGFibGUgd2Fsa2VycyAqL1xuIFx0aWYgKG1tX3N0YXRlIFx1MDAyNlx1MDAyNiBzdWl0YWJsZV90b19zY2FuKGksIHlvdW5nKSlcbi1cdFx0dXBkYXRlX2Jsb29tX2ZpbHRlcihtbV9zdGF0ZSwgbWF4X3NlcSwgcHZtdy1cdTAwM2VwbWQpO1xuK1x0XHR1cGRhdGVfYmxvb21fZmlsdGVyKG1tX3N0YXRlLCBSRUFEX09OQ0UobHJ1dmVjLVx1MDAzZWxydWdlbi5tYXhfc2VxKSxcbitcdFx0XHRcdCAgICBwdm13LVx1MDAzZXBtZCk7XG4gXG4gXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4gXG5AQCAtNDc4NSw3ICs0Nzg3LDcgQEAgc3RhdGljIGJvb2wgaXNvbGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2FcbiBcbiBcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqL1xuIFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKVxuLVx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIDApO1xuK1x0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuIFxuIFx0c3VjY2VzcyA9IGxydV9nZW5fZGVsX2ZvbGlvKGxydXZlYywgZm9saW8sIHRydWUpO1xuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFzdWNjZXNzLCBmb2xpbyk7XG5AQCAtNDg3OCw5ICs0ODgwLDkgQEAgc3RhdGljIGludCBnZXRfdGllcl9pZHgoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSlcbiBcdCAqIFRoaXMgdmFsdWUgaXMgY2hvc2VuIGJlY2F1c2UgYW55IG90aGVyIHRpZXIgd291bGQgaGF2ZSBhdCBsZWFzdCB0d2ljZVxuIFx0ICogYXMgbWFueSByZWZhdWx0cyBhcyB0aGUgZmlyc3QgdGllci5cbiBcdCAqL1xuLVx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIDAsIDIsIFx1MDAyNnNwKTtcbi1cdGZvciAodGllciA9IDE7IHRpZXIgXHUwMDNjIE1BWF9OUl9USUVSUzsgdGllcisrKSB7XG4tXHRcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0aWVyLCAzLCBcdTAwMjZwdik7XG4rXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NSU4sIDIsIFx1MDAyNnNwKTtcbitcdGZvciAodGllciA9IExSVV9USUVSX01JTiArIDE7IHRpZXIgXHUwMDNjPSBMUlVfVElFUl9NQVg7IHRpZXIrKykge1xuK1x0XHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdGllciwgdGllciwgMywgXHUwMDI2cHYpO1xuIFx0XHRpZiAoIXBvc2l0aXZlX2N0cmxfZXJyKFx1MDAyNnNwLCBcdTAwMjZwdikpXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG5AQCAtNDkwMSw4ICs0OTAzLDEwIEBAIHN0YXRpYyBpbnQgZ2V0X3R5cGVfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxuIFx0ICogQ29tcGFyZSB0aGUgc3VtIG9mIGFsbCB0aWVycyBvZiBhbm9uIHdpdGggdGhhdCBvZiBmaWxlIHRvIGRldGVybWluZVxuIFx0ICogd2hpY2ggdHlwZSB0byBzY2FuLlxuIFx0ICovXG4tXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBNQVhfTlJfVElFUlMsIHN3YXBwaW5lc3MsIFx1MDAyNnNwKTtcbi1cdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIE1BWF9OUl9USUVSUywgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCBcdTAwMjZwdik7XG4rXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCxcbitcdFx0ICAgICAgc3dhcHBpbmVzcywgXHUwMDI2c3ApO1xuK1x0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NQVgsXG4rXHRcdCAgICAgIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgXHUwMDI2cHYpO1xuIFxuIFx0cmV0dXJuIHBvc2l0aXZlX2N0cmxfZXJyKFx1MDAyNnNwLCBcdTAwMjZwdik7XG4gfVxuQEAgLTUwMTcsOCArNTAyMSwxMCBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0fVxuIFxuIFx0XHQvKiBkb24ndCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqL1xuLVx0XHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pXG4tXHRcdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX2FjdGl2ZSkpO1xuK1x0XHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pIHtcbitcdFx0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuK1x0XHRcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xuK1x0XHR9XG4gXHR9XG4gXG4gXHRtb3ZlX2ZvbGlvc190b19scnUoXHUwMDI2bGlzdCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjoyNDoyNi45OTk3MTkwMVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDczNzY1NzA2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gSnVzdGlmaWNhdGlvbiBBbmFseXNpcyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgc2VlIGlmIHdlIG5lZWQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIG9uIHRvcCBvZiBvdXIgc3RhbmRhcmQgS0FTQU4gZnV6emluZy4gTXkgZm9jdXMsIGFzIGFsd2F5cywgaXMgb24gcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIHdyaXRlcyB0aGF0IGNvdWxkIGJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlLlxuXG5GaXJzdCwgSSBzZWUgY2hhbmdlcyBpbiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLCBzcGVjaWZpY2FsbHkgY2hhbmdpbmcgYW4gYXJyYXkncyB0eXBlIGluIGBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZWAuIFRoZXJlJ3MgYWxzbyBhIGNoZWNrIGFuZCByZXR1cm4gb2YgYDBgIGlmIGEgdmFsdWUgaXMgbmVnYXRpdmUuIFRoaXMgZG9lc24ndCBzZWVtIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBkYXRhIHNlbnQgdG8gdXNlcnNwYWNlLCBzbyBJJ20gbm90IG92ZXJseSBjb25jZXJuZWQgaGVyZS5cblxuVGhlIGNoYW5nZXMgaW4gYGluY2x1ZGUvbGludXgvbW1faW5saW5lLmhgLCBkZWZpbmluZyBgZm9saW9fZmxhZ3NfaXNfZmlsZV9scnVgIGFuZCByZWZhY3RvcmluZyBMUlUgZ2VuZXJhdGlvbiBhbmQgZmxhZ3MgbWFuaXB1bGF0aW9uLCBhcmUgaW50ZXJlc3RpbmcgYnV0IGxpa2VseSBpbnRlcm5hbC4gIFRoZXkgbW9zdGx5IGRlYWwgd2l0aCBiaXQgbWFuaXB1bGF0aW9uIGFuZCBpbnRlcm5hbCBzdHJ1Y3QgZmxhZyBzZXR0aW5ncy4gU3RpbGwsIEknbGwgbmVlZCB0byBrZWVwIHRoaXMgaW4gbWluZCBhcyBJIGxvb2sgYXQgdGhlIGxhcmdlciBjYWxsIGNoYWlucywgYnV0IHRoaXMgbG9va3MgbGlrZSBhbiBpbnRlcm5hbCByZWZhY3Rvci5cblxuYGluY2x1ZGUvbGludXgvbW16b25lLmhgIGp1c3QgZGVmaW5lcyBzb21lIGNvbnN0YW50cywgc28gbm8gaW1tZWRpYXRlIHJlZCBmbGFncyB0aGVyZS5cblxuSW4gYG1tL2ZvbGlvLmNgLCBgbHJ1X2dlbl9pbmNfcmVmc2AgYW5kIGBscnVfZ2VuX2NsZWFyX3JlZnNgIHV0aWxpemUgdGhlIGZsYWcgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucy4gQWdhaW4sIHRoZSBwb3RlbnRpYWwgcHJvYmxlbSBkZXBlbmRzIG9uIGlmIHRoZSBmbGFncyBhcmUgaW5pdGlhbGl6ZWQuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhlIHVzZSBvZiB0aG9zZSBmdW5jdGlvbnMuXG5cbmBtbS9tZW1jb250cm9sLmNgIHNpbXBsaWZpZXMgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYC4gVGhpcyAqY291bGQqIGJlIGEgdmVjdG9yIGZvciB1bmluaXRpYWxpemVkIGRhdGEsIGJ1dCBpdCBzZWVtcyB0byBkaXJlY3RseSB1cGRhdGUgYSBrbm93biBsb2NhdGlvbi4gIEknbGwgc3RpbGwga2VlcCBhbiBleWUgb24gdGhpcyBhcyBJIGxvb2sgZm9yIHVwc3RyZWFtIGRhdGEuXG5cblRoZSBgbW0vbWlncmF0ZS5jYCBjaGFuZ2UsIGBmb2xpb19taWdyYXRlX2xydV9yZWZzYCwgaXMgYSByZWZhY3RvciBvZiB0aGUgYGZvbGlvX21pZ3JhdGVfcmVmc2AgZnVuY3Rpb24gYW5kIHNob3VsZCBiZSBzYWZlLlxuXG5GaW5hbGx5LCB3ZSdyZSBhdCBgbW0vdm1zY2FuLmNgLiAgVGhlIHNpZ25hdHVyZSBjaGFuZ2Ugb2YgYGZvbGlvX3VwZGF0ZV9nZW5gIGFuZCBhIG5ldyBvdXQtcGFyYW1ldGVyIGBpbnQgKnR5cGVgIGlzIHdoYXQgaGFzIG15IGF0dGVudGlvbiEgIEkgbmVlZCB0byB2ZXJpZnkgdGhlIGluaXRpYWxpemF0aW9uIG9mIGAqdHlwZWAuXG5cbkkgZG92ZSBpbnRvIGBmb2xpb191cGRhdGVfZ2VuYCBhbmQgZm91bmQgYSBjb25kaXRpb25hbCByZXR1cm4gd2hlcmUgYCp0eXBlYCBtaWdodCBub3QgYmUgc2V0OiB0aGUgaW5pdGlhbCBgaWZgIHN0YXRlbWVudC4gQnV0IEkgdHJhY2VkIGl0IGJhY2suICBJZiB0aGUgZmlyc3QgY2hlY2sgcmV0dXJucyBgLTFgLCBpdCBzZXRzIHRoZSByZWZzIGFuZCByZXR1cm5zIGAtMWAuIFRoZSBgd2Fsa191cGRhdGVfZm9saW9gIGNhbGxlciB3aWxsICpub3QqIHVzZSBgdHlwZWAuICBIb3dldmVyLCBpZiB0aGUgYGlmYCBjaGVjayBkb2VzICpub3QqIGhhcHBlbiwgYHR5cGVgIGlzIEFMV0FZUyB3cml0dGVuIHRvIGJlY2F1c2Ugb2YgdGhlIGxvZ2ljIHdpdGhpbiB0aGUgYGRvLi4ud2hpbGVgIGxvb3AgYW5kIHRoZSByZXR1cm4uICBTbywgaW4gYWxsIGNhc2VzIGB0eXBlYCBpcyBzZXQuXG5cbkZ1cnRoZXJtb3JlLCBgdHlwZWAgaXMgb25seSAqdXNlZCogaW4gYHdhbGtfdXBkYXRlX2ZvbGlvYCB3aGVuIGBvbGRfZ2VuIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgb2xkX2dlbiAhPSBuZXdfZ2VuYC4gIEluIHRoaXMgY2FzZSwgYHR5cGVgIGlzIGd1YXJhbnRlZWQgdG8gaGF2ZSBiZWVuIHNldCB3aGVuIGNhbGxpbmcgYHVwZGF0ZV9iYXRjaF9zaXplYC5cblxuR2l2ZW4gbXkgYW5hbHlzaXMsIEkgYW0gbm90IHNlZWluZyBhbnkgY2xlYXIgS01TQU4tdHJpZ2dlcmluZyBpc3N1ZXMgaGVyZS4gTm8gb2J2aW91cyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHMsIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlIG5ldyBjb2RlIGRvZXMgbm90IHNlZW0gdG8gaW50cm9kdWNlIG5ldyBwYXRocyB0aGF0IGNvdWxkIHRyaWdnZXIgaXNzdWVzLlxuXG5UaGVyZWZvcmUsIGJhc2VkIG9uIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBwYXRjaCBhbmQgdGhlIHJ1bGUsIEkgYmVsaWV2ZSB0aGF0IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkIGluIGFkZGl0aW9uIHRvIG91ciBleGlzdGluZyBLQVNBTiBmdXp6aW5nIGZvciB0aGlzIHBhdGNoLiBJIHJlY29tbWVuZCBwcm9jZWVkaW5nIHdpdGggS0FTQU4gZnV6emluZyBhcyB1c3VhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1ODYsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDk2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6MjQ6MzcuNzM3MzgwMTk5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc4ODE2MTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX3VwZGF0ZV9nZW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD0zMDE9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydV9nZW5fZm9saW9fc2VxKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMzExLVxcdCAqIHwgQWNjZXNzZWQgdGhyb3VnaCBwYWdlIHRhYmxlcyBhbmQgIHwgQWNjZXNzZWQgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzIHxcXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjMxMjpcXHQgKiB8IHByb21vdGVkIGJ5IGZvbGlvX3VwZGF0ZV9nZW4oKSAgICB8IGFuZCBwcm90ZWN0ZWQgYnkgZm9saW9faW5jX2dlbigpICB8XFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0zMTMtXFx0ICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD00Mjc9ZW51bSBscnV2ZWNfZmxhZ3Mge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC01MTYtICpcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjUxNzogKiBGb3IgZm9saW9zIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggcGFnZSB0YWJsZXMsIGZvbGlvX3VwZGF0ZV9nZW4oKVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNTE4LSAqIGZyb20gYSBwYWdlIHRhYmxlIHdhbGsgb3IgbHJ1X2dlbl9zZXRfcmVmcygpIGZyb20gYSBybWFwIHdhbGsgc2V0c1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC01MjAtICogVGhlcmVhZnRlciwgdGhvc2UgdHdvIHBhdGhzIHNldCBQR193b3JraW5nc2V0IGFuZCBwcm9tb3RlIGZvbGlvcyB0byB0aGVcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjUyMTogKiB5b3VuZ2VzdCBnZW5lcmF0aW9uLiBMaWtlIGZvbGlvX2luY19nZW4oKSwgZm9saW9fdXBkYXRlX2dlbigpIGFsc28gY2xlYXJzXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC01MjItICogUEdfcmVmZXJlbmNlZC4gTm90ZSB0aGF0IGZvciB0aGlzIGNhc2UsIExSVV9SRUZTX01BU0sgaXMgbm90IHVzZWQuXFxuLS1cXG5tbS92bXNjYW4uYz04NDc9ZW51bSBmb2xpb19yZWZlcmVuY2VzIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTg1Ny0gKiB3aXRoIFBHX2FjdGl2ZSBzZXQuIEluIGNvbnRyYXN0LCB0aGUgYWdpbmcgKHBhZ2UgdGFibGUgd2FsaykgcGF0aCB1c2VzXFxubW0vdm1zY2FuLmM6ODU4OiAqIGZvbGlvX3VwZGF0ZV9nZW4oKS5cXG5tbS92bXNjYW4uYy04NTktICovXFxuLS1cXG5tbS92bXNjYW4uYz0zMjgxPXN0YXRpYyBib29sIHBvc2l0aXZlX2N0cmxfZXJyKHN0cnVjdCBjdHJsX3BvcyAqc3AsIHN0cnVjdCBjdHJsX3BvcyAqcHYpXFxuLS1cXG5tbS92bXNjYW4uYy0zMjk2LS8qIHByb21vdGUgcGFnZXMgYWNjZXNzZWQgdGhyb3VnaCBwYWdlIHRhYmxlcyAqL1xcbm1tL3Ztc2Nhbi5jOjMyOTc6c3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBpbnQgKnR5cGUsXFxubW0vdm1zY2FuLmMtMzI5OC1cXHRcXHRcXHQgICAgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTMzMzE9c3RhdGljIGludCBfX2ZvbGlvX2luY19nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9nZW4sIGJvb2wgKmluY3JlYXNlZClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMzMzgtXFxubW0vdm1zY2FuLmM6MzMzOTpcXHRcXHQvKiBmb2xpb191cGRhdGVfZ2VuKCkgaGFzIHByb21vdGVkIHRoaXMgcGFnZT8gKi9cXG5tbS92bXNjYW4uYy0zMzQwLVxcdFxcdGlmIChuZXdfZ2VuIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgbmV3X2dlbiAhPSBvbGRfZ2VuKSB7XFxuLS1cXG5tbS92bXNjYW4uYz0zNTYwPXN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vdm1zY2FuLmMtMzU3NS1cXHRpZiAod2Fsaykge1xcbm1tL3Ztc2Nhbi5jOjM1NzY6XFx0XFx0b2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sIFxcdTAwMjZ0eXBlLCBcXHUwMDI2dm1hLVxcdTAwM2VmbGFncyk7XFxubW0vdm1zY2FuLmMtMzU3Ny1cXHRcXHRpZiAob2xkX2dlbiBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IG9sZF9nZW4gIT0gbmV3X2dlbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6MjQ6MzkuMzE2MjA0MDQ0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUxMzI1MTk2MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGByZWFkX2N0cmxfcG9zYCBhbmQgaXRzIFVzYWdlKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biBob3cgYHJlYWRfY3RybF9wb3NgIGlzIGJlaW5nIHVzZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBpbiB0aGUgY29udGV4dCBvZiB0aGVzZSBmdW5jdGlvbnMuIEZyb20gdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2UgYHJlYWRfY3RybF9wb3NgIGdldHMgY2FsbGVkIGluIHR3byBrZXkgZnVuY3Rpb25zOiBgZ2V0X3RpZXJfaWR4YCBhbmQgYGdldF90eXBlX3RvX3NjYW5gLiBcblxuSW4gYGdldF90aWVyX2lkeGAsIGl0J3MgY2FsbGVkIHR3aWNlLiBUaGUgZmlyc3QgY2FsbCBzZXRzIHVwIGFuIGluaXRpYWwgcG9zaXRpb24sIHVzaW5nIGBMUlVfVElFUl9NSU5gLiBUaGUgc2Vjb25kIGNhbGwgaXRlcmF0ZXMgdGhyb3VnaCB0aWVycywgZnJvbSBgTFJVX1RJRVJfTUlOICsgMWAgdXAgdG8gYExSVV9USUVSX01BWGAsIGFuZCBpdCBsb29rcyBsaWtlIGEgY29tcGFyaXNvbiBpcyBtYWRlIHdpdGggdGhlIGhlbHAgb2YgYHBvc2l0aXZlX2N0cmxfZXJyYCwgd2hpY2ggSSdsbCBuZWVkIHRvIGNoZWNrIGFzIHdlbGwuXG5cbkluIGBnZXRfdHlwZV90b19zY2FuYCwgYHJlYWRfY3RybF9wb3NgIGlzIGNhbGxlZCBmb3IgYm90aCBgTFJVX0dFTl9BTk9OYCBhbmQgYExSVV9HRU5fRklMRWAsIHdpdGggc29tZSBsb2dpYyByZWxhdGVkIHRvIGBzd2FwcGluZXNzYC4gVGhpcyBpcyB3aGVyZSB0aGUgZnVuY3Rpb24gaXMgZmV0Y2hpbmcgZGF0YSBmb3IgZGlmZmVyZW50IHR5cGVzIG9mIExSVSBlbnRyaWVzLlxuXG5Ob3csIGZvY3VzaW5nIG9uIHRoZSBgcmVhZF9jdHJsX3Bvc2AgZnVuY3Rpb24gaXRzZWxmLiBJdCB0YWtlcyBhIGBzdHJ1Y3QgbHJ1dmVjYCwgYW4gaW50ZWdlciBgdHlwZWAsIGFuZCB0d28gdGllcnMgYXMgaW5wdXRzLCBhbmQgYWxzbyBhIGdhaW4gdmFsdWUuIEl0IHRoZW4gaXRlcmF0ZXMgdGhyb3VnaCB0aGUgdGllcnMgZnJvbSBgdGllcl9taW5gIHRvIGB0aWVyX21heGAuIFdpdGhpbiB0aGUgbG9vcCwgaXQgY2FsY3VsYXRlcyBhIHN1bSBvZiBgcmVmYXVsdGVkYCBhbmQgYHRvdGFsYCB2YWx1ZXMsIHdoaWNoIGFyZSB1c2VkIHRvIHVwZGF0ZSB0aGUgYHBvc2Agc3RydWN0dXJlLiBgcG9zYCBpcyBhIGBzdHJ1Y3QgY3RybF9wb3NgIHdoaWNoLCBpbXBvcnRhbnRseSwgaXMgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBpbiB0aGUgY2FsbGluZyBmdW5jdGlvbnMuIFRoZSBjb2RlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZXMgYHBvcy1cdTAwM2VnYWluYCwgYHBvcy1cdTAwM2VyZWZhdWx0ZWRgLCBhbmQgYHBvcy1cdTAwM2V0b3RhbGAgd2l0aGluIGByZWFkX2N0cmxfcG9zYC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGF0IGBnYWluYCBwYXJhbWV0ZXIgYW5kIGhvdyBpdCBpbmZsdWVuY2VzIHRoZSBgY3RybF9wb3NgIHN0cnVjdC5cblxuU28sIEkgbmVlZCB0byBjaGVjayBpZiB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgZWxzZXdoZXJlLCBhbmQgSSBzaG91bGQgcmVhbGx5IGxvb2sgYXQgaG93IHRoZSBgY3RybF9wb3NgIHN0cnVjdCBpcyBiZWluZyB1c2VkIGFmdGVyIHRoZSBjYWxscyB0byBgcmVhZF9jdHJsX3Bvc2AgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgZGF0YSBtZWFucyBpbiB0aGUgbGFyZ2VyIGNvbnRleHQuIEFsc28sIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgYGxydV9oaXN0X2Zyb21fc2VxYCBkb2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTI4MCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjoyNDo0NC40NDg3MjU4OTdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjI0ODM5MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVhZF9jdHJsX3Bvc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz0zMjIwPXN0cnVjdCBjdHJsX3BvcyB7XFxuLS1cXG5tbS92bXNjYW4uYy0zMjI1LVxcbm1tL3Ztc2Nhbi5jOjMyMjY6c3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllcl9taW4sXFxubW0vdm1zY2FuLmMtMzIyNy1cXHRcXHRcXHQgIGludCB0aWVyX21heCwgaW50IGdhaW4sIHN0cnVjdCBjdHJsX3BvcyAqcG9zKVxcbi0tXFxubW0vdm1zY2FuLmM9NDg3Mz1zdGF0aWMgaW50IGdldF90aWVyX2lkeChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKVxcbi0tXFxubW0vdm1zY2FuLmMtNDg4Mi1cXHQgKi9cXG5tbS92bXNjYW4uYzo0ODgzOlxcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01JTiwgMiwgXFx1MDAyNnNwKTtcXG5tbS92bXNjYW4uYy00ODg0LVxcdGZvciAodGllciA9IExSVV9USUVSX01JTiArIDE7IHRpZXIgXFx1MDAzYz0gTFJVX1RJRVJfTUFYOyB0aWVyKyspIHtcXG5tbS92bXNjYW4uYzo0ODg1OlxcdFxcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0aWVyLCB0aWVyLCAzLCBcXHUwMDI2cHYpO1xcbm1tL3Ztc2Nhbi5jLTQ4ODYtXFx0XFx0aWYgKCFwb3NpdGl2ZV9jdHJsX2VycihcXHUwMDI2c3AsIFxcdTAwMjZwdikpXFxuLS1cXG5tbS92bXNjYW4uYz00ODkzPXN0YXRpYyBpbnQgZ2V0X3R5cGVfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxcbi0tXFxubW0vdm1zY2FuLmMtNDkwNS1cXHQgKi9cXG5tbS92bXNjYW4uYzo0OTA2OlxcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUFYLFxcbm1tL3Ztc2Nhbi5jLTQ5MDctXFx0XFx0ICAgICAgc3dhcHBpbmVzcywgXFx1MDAyNnNwKTtcXG5tbS92bXNjYW4uYzo0OTA4OlxcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUFYLFxcbm1tL3Ztc2Nhbi5jLTQ5MDktXFx0XFx0ICAgICAgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCBcXHUwMDI2cHYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjoyNDo0Ni4yNzEyMTYyOTNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDk0NTg1OTU1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTFJVIFJlZmVyZW5jZSBNaWdyYXRpb24gYW5kIE1lbW9yeSBDZ3JvdXAgTFJVIFNpemUgVXBkYXRlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGhvdyBMUlUgcmVmZXJlbmNlcyBhcmUgaGFuZGxlZCBkdXJpbmcgZm9saW8gbWlncmF0aW9uIGFuZCBob3cgdGhlc2UgdXBkYXRlcyBpbnRlcmFjdCB3aXRoIG1lbW9yeSBjZ3JvdXAgTFJVIHNpemUgdHJhY2tpbmcuIEZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGBmb2xpb19taWdyYXRlX2xydV9yZWZzYCBmdW5jdGlvbi4gSSBzZWUgaW4gYGluY2x1ZGUvbGludXgvbW1faW5saW5lLmhgIHRoYXQgdGhlcmUncyBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBJZiBgQ09ORklHX0xSVV9HRU5gIGlzIGRlZmluZWQsIHRoZSBmdW5jdGlvbiBzaW1wbHkgY29waWVzIHRoZSBMUlUgcmVmZXJlbmNlIGJpdHMgZGlyZWN0bHkuICBIb3dldmVyLCBpZiBgQ09ORklHX0xSVV9HRU5gIGlzICpub3QqIGRlZmluZWQsIGl0IHNlZW1zIHRvIG9ubHkgY29weSB0aGUgYFBHX3JlZmVyZW5jZWRgIGJpdCwgc3VnZ2VzdGluZyBhbiBvbGRlciBhcHByb2FjaC4gVGhlIGBCVUlMRF9CVUdfT05gIGVuc3VyZXMgbm8gb3ZlcmxhcCBvZiB0aGUgbWFzay4gTm93LCBsb29raW5nIGF0IGBtbS9taWdyYXRlLmNgLCBgZm9saW9fbWlncmF0ZV9mbGFnc2AgY2FsbHMgYGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnNgIHRvIHBlcmZvcm0gdGhlIGFjdHVhbCBjb3B5aW5nIG9mIHRoaXMgcmVmZXJlbmNlZCBzdGF0ZSBkdXJpbmcgZm9saW8gbWlncmF0aW9uLiBUaGlzIGlzIGVzc2VudGlhbCBmb3IgbWFpbnRhaW5pbmcgdGhlIGNvcnJlY3QgTFJVIHN0YXRlIGFmdGVyIGEgcGFnZSBtb3ZlLlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCBtZW1vcnkgY2dyb3VwIExSVSBhY2NvdW50aW5nLiBJIGhhdmUgdG8gbG9vayBhdCBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgIGFuZCBgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZWAuIFRoZXNlIGZ1bmN0aW9ucyBzZWVtIHRvIGJlIGNvcmUgdG8gdHJhY2tpbmcgdGhlIHNpemUgb2YgdGhlIExSVSBsaXN0cyB3aXRoaW4gZWFjaCBtZW1vcnkgY2dyb3VwLiBUaGUgYG1lbV9jZ3JvdXBfcGVyX25vZGVgIHN0cnVjdHVyZSwgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLCBjb250YWlucyB0aGUgYGxydV96b25lX3NpemVgIGFycmF5IHdoaWNoIGFwcGVhcnMgdG8gdHJhY2sgdGhlIHNpemUgb2YgZWFjaCBMUlUgbGlzdCwgcGVyIHpvbmUsIHdpdGhpbiBhIG1lbW9yeSBjZ3JvdXAgbm9kZS4gIGBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplYCByZWFkcyB0aGlzIGFycmF5LiBJdCB1c2VzIGBSRUFEX09OQ0VgIGZvciBhdG9taWMgcmVhZHMgdG8gcHJldmVudCBpc3N1ZXMgd2l0aCBjb25jdXJyZW5jeSBhbmQgdGhlIGBXQVJOX09OX09OQ0VgIG9mZmVycyBhbiBleHRyYSBzYWZlZ3VhcmQgc2hvdWxkIHRoZSBzaXplIHR1cm4gbmVnYXRpdmUuIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgbW9kaWZpZXMgdGhpcyBjb3VudGVyLCBhZGRpbmcgb3Igc3VidHJhY3RpbmcgcGFnZSBjb3VudHMsIGFuZCBoYXMgYSBndWFyZCBhZ2FpbnN0IGRpc2FibGVkIG1lbW9yeSBjZ3JvdXBzLlxuXG5GaW5hbGx5LCBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiBgZm9saW9fZmxhZ3NgIGlzIGEgc3RhbmRhcmQgaW5saW5lIGZ1bmN0aW9uIHdpdGhpbiB0aGUga2VybmVsLiBJJ2xsIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBjb25maXJtIHRoaXMsIGFzIEkgZXhwZWN0IGl0IHdpbGwgYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2OTI3LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjI0OjUxLjIxNzA3ODgzNloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYzNjE5ODY0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb2xpb19mbGFnc1xcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvc2gvbW0vY2FjaGUtc2g0LmM9MjE0PXN0YXRpYyB2b2lkIHNoNF9mbHVzaF9jYWNoZV9wYWdlKHZvaWQgKmFyZ3MpXFxuLS1cXG5hcmNoL3NoL21tL2NhY2hlLXNoNC5jLTI0OS1cXHRcXHRtYXBfY29oZXJlbnQgPSAoY3VycmVudF9jcHVfZGF0YS5kY2FjaGUubl9hbGlhc2VzIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC9zaC9tbS9jYWNoZS1zaDQuYzoyNTA6XFx0XFx0XFx0dGVzdF9iaXQoUEdfZGNhY2hlX2NsZWFuLCBmb2xpb19mbGFncyhmb2xpbywgMCkpIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC9zaC9tbS9jYWNoZS1zaDQuYy0yNTEtXFx0XFx0XFx0Zm9saW9fbWFwcGVkKGZvbGlvKSk7XFxuLS1cXG5hcmNoL3h0ZW5zYS9tbS9jYWNoZS5jPTg4PXZvaWQgY2xlYXJfdXNlcl9oaWdocGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyB2YWRkcilcXG4tLVxcbmFyY2gveHRlbnNhL21tL2NhY2hlLmMtOTUtXFx0a21hcF9pbnZhbGlkYXRlX2NvaGVyZW50KHBhZ2UsIHZhZGRyKTtcXG5hcmNoL3h0ZW5zYS9tbS9jYWNoZS5jOjk2OlxcdHNldF9iaXQoUEdfYXJjaF8xLCBmb2xpb19mbGFncyhmb2xpbywgMCkpO1xcbmFyY2gveHRlbnNhL21tL2NhY2hlLmMtOTctXFx0Y2xlYXJfcGFnZV9hbGlhcyhrdmFkZHIsIHBhZGRyKTtcXG4tLVxcbmFyY2gveHRlbnNhL21tL2NhY2hlLmM9MTAyPXZvaWQgY29weV91c2VyX2hpZ2hwYWdlKHN0cnVjdCBwYWdlICpkc3QsIHN0cnVjdCBwYWdlICpzcmMsXFxuLS1cXG5hcmNoL3h0ZW5zYS9tbS9jYWNoZS5jLTExMy1cXHRrbWFwX2ludmFsaWRhdGVfY29oZXJlbnQoZHN0LCB2YWRkcik7XFxuYXJjaC94dGVuc2EvbW0vY2FjaGUuYzoxMTQ6XFx0c2V0X2JpdChQR19hcmNoXzEsIGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XFxuYXJjaC94dGVuc2EvbW0vY2FjaGUuYy0xMTUtXFx0Y29weV9wYWdlX2FsaWFzKGRzdF92YWRkciwgc3JjX3ZhZGRyLCBkc3RfcGFkZHIsIHNyY19wYWRkcik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTIyNT1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMjI2LXtcXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjIyNzpcXHRyZXR1cm4gbHJ1X2dldF9yZWZzX2ZsYWdzKFJFQURfT05DRSgqY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKSk7XFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0yMjgtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD0yMzA9c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgcmVmcylcXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTIzMS17XFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDoyMzI6XFx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTIzMy1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMjM2LVxcdFxcdGxydV9zZXRfcmVmc19mbGFncyhcXHUwMDI2bmV3X2ZsYWdzLCByZWZzKTtcXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjIzNzpcXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTIzOC19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTI0MD1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfZ2VuKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0yNDEte1xcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6MjQyOlxcdHJldHVybiBscnVfZ2V0X2dlbl9mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpO1xcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMjQzLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg9MzM1PXN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2FkZF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcmVjbGFpbWluZylcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMzUyLVxcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBNSU5fTlJfR0VOUyBhYm91dCBQR19hY3RpdmUgKi9cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjM1MzpcXHRzZXRfbWFza19iaXRzKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgTFJVX0dFTl9NQVNLIHwgQklUKFBHX2FjdGl2ZSksIGZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTM1NC1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg9MzY1PXN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcmVjbGFpbWluZylcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMzc3LVxcdGZsYWdzID0gIXJlY2xhaW1pbmcgXFx1MDAyNlxcdTAwMjYgbHJ1X2dlbl9pc19hY3RpdmUobHJ1dmVjLCBnZW4pID8gQklUKFBHX2FjdGl2ZSkgOiAwO1xcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6Mzc4OlxcdGZsYWdzID0gc2V0X21hc2tfYml0cyhmb2xpb19mbGFncyhmb2xpbywgMCksIExSVV9HRU5fTUFTSywgZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMzc5LVxcdGdlbiA9ICgoZmxhZ3MgXFx1MDAyNiBMUlVfR0VOX01BU0spIFxcdTAwM2VcXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTMzNT1zdGF0aWMgaW5saW5lIHZvaWQgcGFnZV9pbml0X3BvaXNvbihzdHJ1Y3QgcGFnZSAqcGFnZSwgc2l6ZV90IHNpemUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0zMzktXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MzQwOnN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nICpjb25zdF9mb2xpb19mbGFncyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTM0MS1cXHRcXHR1bnNpZ25lZCBuKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMzQ5LVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjM1MDpzdGF0aWMgdW5zaWduZWQgbG9uZyAqZm9saW9fZmxhZ3Moc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgbilcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0zNTEte1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9NDExPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBmb2xpb190ZXN0XyMjbmFtZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKSBcXFxcXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6NDEyOnsgcmV0dXJuIHRlc3RfYml0KFBHXyMjbmFtZSwgY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIHBhZ2UpKTsgfVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTQxMy1cXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTQxNT1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgZm9saW9fc2V0XyMjbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo0MTY6eyBzZXRfYml0KFBHXyMjbmFtZSwgZm9saW9fZmxhZ3MoZm9saW8sIHBhZ2UpKTsgfVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTQxNy1cXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTQxOT1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgZm9saW9fY2xlYXJfIyNuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXFx0XFxcXFxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjQyMDp7IGNsZWFyX2JpdChQR18jI25hbWUsIGZvbGlvX2ZsYWdzKGZvbGlvLCBwYWdlKSk7IH1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC00MjEtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD00MjM9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fZm9saW9fc2V0XyMjbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo0MjQ6eyBfX3NldF9iaXQoUEdfIyNuYW1lLCBmb2xpb19mbGFncyhmb2xpbywgcGFnZSkpOyB9XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNDI1LVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9NDI3PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX2ZvbGlvX2NsZWFyXyMjbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo0Mjg6eyBfX2NsZWFyX2JpdChQR18jI25hbWUsIGZvbGlvX2ZsYWdzKGZvbGlvLCBwYWdlKSk7IH1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC00MjktXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD00MzE9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGZvbGlvX3Rlc3Rfc2V0XyMjbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo0MzI6eyByZXR1cm4gdGVzdF9hbmRfc2V0X2JpdChQR18jI25hbWUsIGZvbGlvX2ZsYWdzKGZvbGlvLCBwYWdlKSk7IH1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC00MzMtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD00MzU9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGZvbGlvX3Rlc3RfY2xlYXJfIyNuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pIFxcXFxcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo0MzY6eyByZXR1cm4gdGVzdF9hbmRfY2xlYXJfYml0KFBHXyMjbmFtZSwgZm9saW9fZmxhZ3MoZm9saW8sIHBhZ2UpKTsgfVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTQzNy1cXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTYyND1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgZm9saW9fdGVzdF9zd2FwY2FjaGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTYyNi1cXHRyZXR1cm4gZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjYyNzpcXHRcXHRcXHR0ZXN0X2JpdChQR19zd2FwY2FjaGUsIGNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNjI4LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTc2Nz1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9feG9yX2ZsYWdzX2hhc193YWl0ZXJzKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC03Njkte1xcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjc3MDpcXHRyZXR1cm4geG9yX3VubG9ja19pc19uZWdhdGl2ZV9ieXRlKG1hc2ssIGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNzcxLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTc4Mz1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fdGVzdF91cHRvZGF0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTc4NC17XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6Nzg1OlxcdGJvb2wgcmV0ID0gdGVzdF9iaXQoUEdfdXB0b2RhdGUsIGNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNzg2LVxcdC8qXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD04MDU9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fZm9saW9fbWFya191cHRvZGF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtODA3LVxcdHNtcF93bWIoKTtcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo4MDg6XFx0X19zZXRfYml0KFBHX3VwdG9kYXRlLCBmb2xpb19mbGFncyhmb2xpbywgMCkpO1xcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTgwOS19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD04MTE9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGZvbGlvX21hcmtfdXB0b2RhdGUoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTgxOC1cXHRzbXBfd21iKCk7XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6ODE5OlxcdHNldF9iaXQoUEdfdXB0b2RhdGUsIGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtODIwLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTg0MD1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgZm9saW9fdGVzdF9oZWFkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtODQxLXtcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo4NDI6XFx0cmV0dXJuIHRlc3RfYml0KFBHX2hlYWQsIGNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCBGT0xJT19QRl9BTlkpKTtcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC04NDMtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg9MTE4MD1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fdHJ5bG9jayhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTExODEte1xcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oOjExODI6XFx0cmV0dXJuIGxpa2VseSghdGVzdF9hbmRfc2V0X2JpdF9sb2NrKFBHX2xvY2tlZCwgZm9saW9fZmxhZ3MoZm9saW8sIDApKSk7XFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMTE4My19XFxuLS1cXG5tbS9maWxlbWFwLmM9MTI1MD1zdGF0aWMgaW5saW5lIGludCBmb2xpb193YWl0X2JpdF9jb21tb24oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGJpdF9ucixcXG4tLVxcbm1tL2ZpbGVtYXAuYy0xMzQ2LVxcdFxcdCAqL1xcbm1tL2ZpbGVtYXAuYzoxMzQ3OlxcdFxcdGlmICh1bmxpa2VseSh0ZXN0X2FuZF9zZXRfYml0KGJpdF9uciwgZm9saW9fZmxhZ3MoZm9saW8sIDApKSkpXFxubW0vZmlsZW1hcC5jLTEzNDgtXFx0XFx0XFx0Z290byByZXBlYXQ7XFxuLS1cXG5tbS9maWxlbWFwLmM9MTU2Mj12b2lkIGZvbGlvX2VuZF9wcml2YXRlXzIoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2ZpbGVtYXAuYy0xNTY0LVxcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF9wcml2YXRlXzIoZm9saW8pLCBmb2xpbyk7XFxubW0vZmlsZW1hcC5jOjE1NjU6XFx0Y2xlYXJfYml0X3VubG9jayhQR19wcml2YXRlXzIsIGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XFxubW0vZmlsZW1hcC5jLTE1NjYtXFx0Zm9saW9fd2FrZV9iaXQoZm9saW8sIFBHX3ByaXZhdGVfMik7XFxuLS1cXG5tbS9mb2xpby5jPTM1NT1zdGF0aWMgdm9pZCBscnVfZ2VuX2luY19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vZm9saW8uYy0zNTYte1xcbm1tL2ZvbGlvLmM6MzU3OlxcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XFxubW0vZm9saW8uYy0zNTgtXFx0aW50IHJlZnM7XFxuLS1cXG5tbS9mb2xpby5jLTM3Ny1cXHRcXHRscnVfc2V0X3JlZnNfZmxhZ3MoXFx1MDAyNm5ld19mbGFncywgcmVmcyArIDEpO1xcbm1tL2ZvbGlvLmM6Mzc4OlxcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFxcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xcbm1tL2ZvbGlvLmMtMzc5LX1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTMyOTc9c3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBpbnQgKnR5cGUsXFxuLS1cXG5tbS92bXNjYW4uYy0zMjk5LXtcXG5tbS92bXNjYW4uYzozMzAwOlxcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XFxubW0vdm1zY2FuLmMtMzMwMS1cXHRpbnQgb2xkX2dlbjtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMzMjQtXFx0XFx0bmV3X2ZsYWdzIHw9IEJJVChQR193b3JraW5nc2V0KTtcXG5tbS92bXNjYW4uYzozMzI1OlxcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFxcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xcbm1tL3Ztc2Nhbi5jLTMzMjYtXFxuLS1cXG5tbS92bXNjYW4uYz0zMzMxPXN0YXRpYyBpbnQgX19mb2xpb19pbmNfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfZ2VuLCBib29sICppbmNyZWFzZWQpXFxubW0vdm1zY2FuLmMtMzMzMi17XFxubW0vdm1zY2FuLmM6MzMzMzpcXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xcbm1tL3Ztc2Nhbi5jLTMzMzQtXFx0aW50IG5ld19nZW47XFxuLS1cXG5tbS92bXNjYW4uYy0zMzUwLVxcdFxcdGxydV9zZXRfcmVmc19mbGFncyhcXHUwMDI2bmV3X2ZsYWdzLCAwKTtcXG5tbS92bXNjYW4uYzozMzUxOlxcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFxcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xcbm1tL3Ztc2Nhbi5jLTMzNTItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjI0OjUzLjg1MzI4MzI3MVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1ODg0MjM4NzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgTWVtb3J5IFNhZmV0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIGEgZmV3IGtleSBhcmVhcyBvZiBtb2RpZmljYXRpb24gaW4gdGhpcyBwYXRjaC4gVGhlIGFjY291bnRpbmcgb2YgYGxydV96b25lX3NpemVgIGlzIGJlaW5nIHJlZmluZWQsIHRyYW5zaXRpb25pbmcgZnJvbSBgdW5zaWduZWQgbG9uZ2AgdG8gYGxvbmdgIHdpdGhpbiBgbWVtX2Nncm91cF9wZXJfbm9kZWAsIGFuZCB0aGUgcmVsYXRlZCB1cGRhdGUgYW5kIGdldCBmdW5jdGlvbnMgYXJlIGJlaW5nIHNpbXBsaWZpZWQuIFRoZW4sIHRoZXJlJ3MgYSBzaWduaWZpY2FudCByZWZhY3RvcmluZyBvZiBNR0xSVSBhbmQgcGFnZSBmbGFnIGhlbHBlciBmdW5jdGlvbnMsIGFpbWluZyBmb3IgYSBtb3JlIGNvbnNpc3RlbnQgYWNjZXNzIHBhdHRlcm4gdXNpbmcgYGZvbGlvX2ZsYWdzKGZvbGlvLCAwKWAuICBUaGlzIGluY2x1ZGVzIGludHJvZHVjaW5nIG5ldyBoZWxwZXIgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBmaWxlIExSVSBmbGFncywgZ2VuZXJhdGlvbiBmbGFncywgYW5kIHJlZmVyZW5jZSBmbGFncy4gRmluYWxseSwgdGhlIHBhdGNoIHRvdWNoZXMgYGZvbGlvX3VwZGF0ZV9nZW5gIGZvciBiZXR0ZXIgcmV0dXJuIHZhbHVlcyBhbmQgc29tZSBhZGp1c3RtZW50cyB0byBgcmVhZF9jdHJsX3Bvc2AuXG5cblRoZSBjcnVjaWFsIHF1ZXN0aW9uLCBvZiBjb3Vyc2UsIGlzIG1lbW9yeSBzYWZldHkuIEknbSBmb2N1c2luZyBvbiB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB0byBiZSBleHBvc2VkLiBGcm9tIGEgcXVpY2sgc2NhbiwgSSBkb24ndCBzZWUgYW55IG9idmlvdXMgcmVkIGZsYWdzIGxpa2Uga2VybmVsLXRvLXVzZXIgbWVtb3J5IGNvcGllcyB3aGVyZSB1bmluaXRpYWxpemVkIGRhdGEgY291bGQgbGVhaywgYW5kIEkgYWxzbyBkb24ndCBzZWUgYW55IGNoYW5nZXMgdGhhdCB3b3VsZCBpbnZvbHZlIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9mIHN0cnVjdHMsIHN0YWNrIGJ1ZmZlcnMsIG9yIGhlYXAgYnVmZmVycy4gQWxsIG9mIHRoZSBtb2RpZmljYXRpb25zIG9wZXJhdGUgb24gZXhpc3RpbmcgaW4tbWVtb3J5IGRhdGEgc3RydWN0dXJlcyBsaWtlIGZvbGlvcywgbHJ1dmVjcywgbWVtY2dzLCBhbmQgaW50ZXJuYWwgZmxhZ3MgdGhhdCBhcmUgYWxyZWFkeSBpbml0aWFsaXplZC5cblxuTG9va2luZyBjbG9zZXIgYXQgdGhlIHNwZWNpZmljIHJlZmFjdG9yaW5ncywgdGhlIG91dC1wYXJhbWV0ZXIgYCp0eXBlYCBpbiBgZm9saW9fdXBkYXRlX2dlbmAgc2VlbXMgc2FmZSBiZWNhdXNlIGl0J3Mgc2V0IGJlZm9yZSByZXR1cm5pbmcgYW55IHZhbGlkIGBvbGRfZ2VuYCwgYW5kIGNhbGxlcnMgb25seSBhY2Nlc3MgaXQgYWZ0ZXIgY2hlY2tpbmcgYG9sZF9nZW4gXHUwMDNlPSAwYC4gVGhlIHN0cnVjdCBgY3RybF9wb3NgIGJlaW5nIHBhc3NlZCB0byBgcmVhZF9jdHJsX3Bvc2AgYWxzbyBzZWVtcyBzYWZlIGJlY2F1c2UgaXQncyBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgdXNlZC4gSSBhbHNvIGNoZWNrZWQgZm9yIHBhZGRpbmcgb3IgbWVtb3J5IGxlYWtzLCBhbmQgSSBkb24ndCBzZWUgYW55IHN1Y2ggaXNzdWUuXG5cbkdpdmVuIHRoaXMgYW5hbHlzaXMsIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGVyZWZvcmUsIFwiTmVlZHNLTVNBTlwiIHNob3VsZCBiZSBmYWxzZS4gV2hpbGUgdGhlIHBhdGNoIHNlZW1zIHNhZmUgcmVnYXJkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBLQVNBTiwgTE9DS0RFUCwgYW5kIHRoZSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIHdvdWxkIGJlIGFwcHJvcHJpYXRlIHRvIHZhbGlkYXRlIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcGFnZSBmbGFnIHN5bmNocm9uaXphdGlvbiBjaGFuZ2VzIG1vcmUgdGhvcm91Z2hseS5cblxuT2theSwgd2l0aCB0aGF0IGFzc2Vzc21lbnQgY29tcGxldGUsIEknbSByZWFkeSB0byBmaW5hbGl6ZSB0aGUgcmVzcG9uc2UgYW5kIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE2MjEsIk91dHB1dFRva2VucyI6MzIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjI0OjU5LjczNzUyNDAxM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyBNdWx0aS1HZW5lcmF0aW9uYWwgTFJVIChNR0xSVSkgZm9saW8gZmxhZyBoZWxwZXJzLCBwYWdlIHRhYmxlIC8gcm1hcCBzY2FubmluZyBsb2dpYywgYW5kIG1lbWNnIExSVSB6b25lIHNpemUgYWNjb3VudGluZy4gU3BlY2lmaWNhbGx5Olxcbi0gSXQgcmVwbGFjZXMgZGlyZWN0IGBmb2xpby1cXHUwMDNlZmxhZ3MuZmAgYWNjZXNzIHdpdGggYGZvbGlvX2ZsYWdzKGZvbGlvLCAwKWAgYWNjZXNzb3IgaGVscGVycyAoYGxydV9zZXRfZ2VuX2ZsYWdzYCwgYGxydV9nZXRfZ2VuX2ZsYWdzYCwgYGxydV9zZXRfcmVmc19mbGFnc2AsIGBscnVfZ2V0X3JlZnNfZmxhZ3NgLCBgZm9saW9fc2V0X2xydV9yZWZzYCwgYGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnNgKS5cXG4tIEl0IGNsZWFucyB1cCBgcmVhZF9jdHJsX3Bvc2AgcGFyYW1ldGVyaXphdGlvbiBhbmQgYHdhbGtfdXBkYXRlX2ZvbGlvYCBjYWxsZXJzLiBTdGFjayB2YXJpYWJsZXMgc3VjaCBhcyBgc3RydWN0IGN0cmxfcG9zIHBvc2AgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGluIGByZWFkX2N0cmxfcG9zYCwgYW5kIHRoZSBgaW50ICp0eXBlYCBvdXRwdXQgcGFyYW1ldGVyIGluIGBmb2xpb191cGRhdGVfZ2VuYCBpcyBndWFyYW50ZWVkIHRvIGJlIGluaXRpYWxpemVkIHdoZW4gdGhlIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgcHJvbW90aW9uIChgb2xkX2dlbiBcXHUwMDNlPSAwYCkuXFxuLSBJdCBjb252ZXJ0cyBgbXotXFx1MDAzZWxydV96b25lX3NpemVgIHRvIHNpZ25lZCBgbG9uZ2AgdG8gc2ltcGxpZnkgdW5kZXJmbG93IGhhbmRsaW5nLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIGNvcHkga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gUG90ZW50aWFsIGJ1Z3MgaW4gdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBjb25jdXJyZW5jeS9sb2NraW5nIHJhY2VzIG9yIHN0YXRlIGNvcnJ1cHRpb24pIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBrZXJuZWwgYXNzZXJ0aW9uIGJ1aWxkcyB3aXRob3V0IHJlcXVpcmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyBNdWx0aS1HZW5lcmF0aW9uYWwgTFJVIChNR0xSVSkgZm9saW8gZmxhZyBoZWxwZXJzLCBwYWdlIHRhYmxlIC8gcm1hcCBzY2FubmluZyBsb2dpYywgYW5kIG1lbWNnIExSVSB6b25lIHNpemUgYWNjb3VudGluZy4gU3BlY2lmaWNhbGx5Olxcbi0gSXQgcmVwbGFjZXMgZGlyZWN0IGBmb2xpby1cXHUwMDNlZmxhZ3MuZmAgYWNjZXNzIHdpdGggYGZvbGlvX2ZsYWdzKGZvbGlvLCAwKWAgYWNjZXNzb3IgaGVscGVycyAoYGxydV9zZXRfZ2VuX2ZsYWdzYCwgYGxydV9nZXRfZ2VuX2ZsYWdzYCwgYGxydV9zZXRfcmVmc19mbGFnc2AsIGBscnVfZ2V0X3JlZnNfZmxhZ3NgLCBgZm9saW9fc2V0X2xydV9yZWZzYCwgYGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnNgKS5cXG4tIEl0IGNsZWFucyB1cCBgcmVhZF9jdHJsX3Bvc2AgcGFyYW1ldGVyaXphdGlvbiBhbmQgYHdhbGtfdXBkYXRlX2ZvbGlvYCBjYWxsZXJzLiBTdGFjayB2YXJpYWJsZXMgc3VjaCBhcyBgc3RydWN0IGN0cmxfcG9zIHBvc2AgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGluIGByZWFkX2N0cmxfcG9zYCwgYW5kIHRoZSBgaW50ICp0eXBlYCBvdXRwdXQgcGFyYW1ldGVyIGluIGBmb2xpb191cGRhdGVfZ2VuYCBpcyBndWFyYW50ZWVkIHRvIGJlIGluaXRpYWxpemVkIHdoZW4gdGhlIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgcHJvbW90aW9uIChgb2xkX2dlbiBcXHUwMDNlPSAwYCkuXFxuLSBJdCBjb252ZXJ0cyBgbXotXFx1MDAzZWxydV96b25lX3NpemVgIHRvIHNpZ25lZCBgbG9uZ2AgdG8gc2ltcGxpZnkgdW5kZXJmbG93IGhhbmRsaW5nLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIGNvcHkga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gUG90ZW50aWFsIGJ1Z3MgaW4gdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBjb25jdXJyZW5jeS9sb2NraW5nIHJhY2VzIG9yIHN0YXRlIGNvcnJ1cHRpb24pIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBrZXJuZWwgYXNzZXJ0aW9uIGJ1aWxkcyB3aXRob3V0IHJlcXVpcmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowcdpgh[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-06 15:43:55 +0000 UTC FinishedAt: 2026-09-06 16:25:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "0642036192d08a189732d1eca234888d5e2d4be1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED", "MEMCG", "MIGRATION" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "0642036192d08a189732d1eca234888d5e2d4be1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED", "MEMCG", "MIGRATION" ], "series_id": "7e52b08e-ef71-46eb-9fbe-d40ec3d918b6" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "lru_gen_look_around", "folio_migrate_flags", "mem_cgroup_update_lru_size", "walk_pte_range", "walk_pmd_range_locked", "folio_update_gen", "evict_folios", "isolate_folio", "lru_gen_inc_refs", "lru_gen_clear_refs" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xydV9nZW5fbG9va19hcm91bmQmIzM0OywKICAgICYjMzQ7Zm9saW9fbWlncmF0ZV9mbGFncyYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZSYjMzQ7LAogICAgJiMzNDt3YWxrX3B0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDt3YWxrX3BtZF9yYW5nZV9sb2NrZWQmIzM0OywKICAgICYjMzQ7Zm9saW9fdXBkYXRlX2dlbiYjMzQ7LAogICAgJiMzNDtldmljdF9mb2xpb3MmIzM0OywKICAgICYjMzQ7aXNvbGF0ZV9mb2xpbyYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX2luY19yZWZzJiMzNDssCiAgICAmIzM0O2xydV9nZW5fY2xlYXJfcmVmcyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyByZWZhY3RvcnMgTXVsdGktR2VuZXJhdGlvbmFsIExSVSAoTUdMUlUpIGZvbGlvIGZsYWcgaGVscGVycywgcGFnZSB0YWJsZSAvIHJtYXAgc2Nhbm5pbmcgbG9naWMsIGFuZCBtZW1jZyBMUlUgem9uZSBzaXplIGFjY291bnRpbmcuIFNwZWNpZmljYWxseTpcbi0gSXQgcmVwbGFjZXMgZGlyZWN0IGBmb2xpby1cdTAwM2VmbGFncy5mYCBhY2Nlc3Mgd2l0aCBgZm9saW9fZmxhZ3MoZm9saW8sIDApYCBhY2Nlc3NvciBoZWxwZXJzIChgbHJ1X3NldF9nZW5fZmxhZ3NgLCBgbHJ1X2dldF9nZW5fZmxhZ3NgLCBgbHJ1X3NldF9yZWZzX2ZsYWdzYCwgYGxydV9nZXRfcmVmc19mbGFnc2AsIGBmb2xpb19zZXRfbHJ1X3JlZnNgLCBgZm9saW9fbWlncmF0ZV9scnVfcmVmc2ApLlxuLSBJdCBjbGVhbnMgdXAgYHJlYWRfY3RybF9wb3NgIHBhcmFtZXRlcml6YXRpb24gYW5kIGB3YWxrX3VwZGF0ZV9mb2xpb2AgY2FsbGVycy4gU3RhY2sgdmFyaWFibGVzIHN1Y2ggYXMgYHN0cnVjdCBjdHJsX3BvcyBwb3NgIGFyZSBmdWxseSBpbml0aWFsaXplZCBpbiBgcmVhZF9jdHJsX3Bvc2AsIGFuZCB0aGUgYGludCAqdHlwZWAgb3V0cHV0IHBhcmFtZXRlciBpbiBgZm9saW9fdXBkYXRlX2dlbmAgaXMgZ3VhcmFudGVlZCB0byBiZSBpbml0aWFsaXplZCB3aGVuIHRoZSByZXR1cm4gdmFsdWUgaW5kaWNhdGVzIHByb21vdGlvbiAoYG9sZF9nZW4gXHUwMDNlPSAwYCkuXG4tIEl0IGNvbnZlcnRzIGBtei1cdTAwM2VscnVfem9uZV9zaXplYCB0byBzaWduZWQgYGxvbmdgIHRvIHNpbXBsaWZ5IHVuZGVyZmxvdyBoYW5kbGluZy5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBQb3RlbnRpYWwgYnVncyBpbiB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIGNvbmN1cnJlbmN5L2xvY2tpbmcgcmFjZXMgb3Igc3RhdGUgY29ycnVwdGlvbikgYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIGtlcm5lbCBhc3NlcnRpb24gYnVpbGRzIHdpdGhvdXQgcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgYWNyb3NzIG1tL3Ztc2Nhbi5jLCBtbS9mb2xpby5jLCBtbS9tZW1jb250cm9sLmMsIGFuZCBtbS9taWdyYXRlLmMsIGFsdGVyaW5nIE11bHRpLUdlbiBMUlUgKE1HTFJVKSByZWZlcmVuY2UgdHJhY2tpbmcsIGZvbGlvIGZsYWcgbWFuaXB1bGF0aW9uLCB0aWVyIGNhbGN1bGF0aW9ucywgcGFnZSBldmljdGlvbiwgYW5kIG1lbWNnIExSVSB6b25lIGFjY291bnRpbmcuIEl0IGFsc28gYWRkcyBzZXZlcmFsIFZNX1dBUk5fT05fT05DRSBhc3NlcnRpb25zIGFuZCBjaGFuZ2VzIHN5bmNocm9uaXphdGlvbi9hcml0aG1ldGljIGxvZ2ljLiBUaGVzZSBwYXRocyBhcmUgZnVsbHkgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTNjYmJjNzZlMWM5NjZjNzZmZTYyMTI5OWEzMmQxN2FmYTdlNDAwM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMTY6MjM6NDkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuaW5kZXggYzc5OTkyNjQzNTU2MC4uMmI2NzY5NDI4NWQwNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuQEAgLTEwMCw3ICYjNDM7MTAwLDcgQEAgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUge1xuIFx0LyogRmllbGRzIHdoaWNoIGdldCB1cGRhdGVkIG9mdGVuIGF0IHRoZSBlbmQuICovXG4gXHRzdHJ1Y3QgbHJ1dmVjXHRcdGxydXZlYztcbiBcdENBQ0hFTElORV9QQURESU5HKF9wYWQyXyk7XG4tXHR1bnNpZ25lZCBsb25nXHRcdGxydV96b25lX3NpemVbTUFYX05SX1pPTkVTXVtOUl9MUlVfTElTVFNdO1xuJiM0MztcdGxvbmdcdFx0XHRscnVfem9uZV9zaXplW01BWF9OUl9aT05FU11bTlJfTFJVX0xJU1RTXTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwX3JlY2xhaW1faXRlclx0aXRlcjtcbiBcbiBcdC8qXG5AQCAtODg3LDEwICYjNDM7ODg3LDE1IEBAIHN0YXRpYyBpbmxpbmVcbiB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRlbnVtIGxydV9saXN0IGxydSwgaW50IHpvbmVfaWR4KVxuIHtcbiYjNDM7XHRsb25nIHZhbDtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejtcbiBcbiBcdG16ID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7XG4tXHRyZXR1cm4gUkVBRF9PTkNFKG16LVx1MDAzZWxydV96b25lX3NpemVbem9uZV9pZHhdW2xydV0pO1xuJiM0MztcdHZhbCA9IFJFQURfT05DRShtei1cdTAwM2VscnVfem9uZV9zaXplW3pvbmVfaWR4XVtscnVdKTtcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKHZhbCBcdTAwM2MgMCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHZhbDtcbiB9XG4gXG4gdm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzayk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaCBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcbmluZGV4IDYyMWM4NjUzZDhmN2UuLmFiNjliOTkzMDg5M2YgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG5AQCAtMzAsNiAmIzQzOzMwLDE3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2lzX2ZpbGVfbHJ1KGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gIWZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbyk7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUgLSBTaG91bGQgdGhlIGZvbGlvIGJlIG9uIGEgZmlsZSBMUlUgb3IgYW5vbiBMUlU/XG4mIzQzOyAqIEBmbGFnczogVGhlIGZvbGlvJiMzOTtzIGZsYWdzLlxuJiM0MzsgKlxuJiM0MzsgKiBKdXN0IGxpa2UgZm9saW9faXNfZmlsZV9scnUgYnV0IHRha2UgdGhlIGZvbGlvIGZsYWdzIGRpcmVjdGx5IGluc3RlYWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBmb2xpb19mbGFnc19pc19maWxlX2xydShjb25zdCB1bnNpZ25lZCBsb25nICpmbGFncylcbiYjNDM7e1xuJiM0MztcdHJldHVybiAhdGVzdF9iaXQoUEdfc3dhcGJhY2tlZCwgZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdFx0XHRlbnVtIGxydV9saXN0IGxydSwgZW51bSB6b25lX3R5cGUgemlkLFxuIFx0XHRcdFx0bG9uZyBucl9wYWdlcylcbkBAIC0xNDIsMTAgJiM0MzsxNTMsNjYgQEAgc3RhdGljIGlubGluZSBpbnQgbHJ1X3RpZXJfZnJvbV9yZWZzKGludCByZWZzLCBib29sIHdvcmtpbmdzZXQpXG4gXHRyZXR1cm4gd29ya2luZ3NldCA/IE1BWF9OUl9USUVSUyAtIDEgOiBvcmRlcl9iYXNlXzIocmVmcyk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzOy8qKlxuJiM0MzsgKiBscnVfc2V0X2dlbl9mbGFncyAtIFNldCB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIHRvIHNwZWNpZmllZCBmb2xpbyBmbGFncy5cbiYjNDM7ICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFnc1xuJiM0MzsgKiBAZ2VuOiBnZW5lcmF0aW9uIG51bWJlciwgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGxydV9zZXRfZ2VuX2ZsYWdzKHVuc2lnbmVkIGxvbmcgKmZsYWdzLCBpbnQgZ2VuKVxuJiM0Mzt7XG4mIzQzO1x0QlVJTERfQlVHX09OKExSVV9HRU5fTUFTSyBcdTAwMjYgTFJVX1JFRlNfTUFTSyk7XG4mIzQzO1x0Vk1fV0FSTl9PTl9PTkNFKGdlbiBcdTAwM2U9IE1BWF9OUl9HRU5TIHx8IGdlbiBcdTAwM2MgMCk7XG4mIzQzO1x0LyogU3RvcmUgZ2VuIG9mZnNldCBieSAxLCB6ZXJvIG1lYW5zIHRoZSBmb2xpbyBpcyBvZmYtbGlzdC4gKi9cbiYjNDM7XHQqZmxhZ3MgXHUwMDI2PSB+TFJVX0dFTl9NQVNLO1xuJiM0MztcdCpmbGFncyB8PSAoZ2VuICYjNDM7IDFVTCkgXHUwMDNjXHUwMDNjIExSVV9HRU5fUEdPRkY7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBscnVfZ2V0X2dlbl9mbGFncyAtIFJldHVybiB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIGZyb20gZm9saW8gZmxhZ3MuXG4mIzQzOyAqIEBmbGFnczogZm9saW8gZmxhZ3NcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLiBSZXR1cm5zXG4mIzQzOyAqIC0xIGlmIHRoZSBmbGFncyBpbmRpY2F0ZSB0aGUgZm9saW8gaXMgb2ZmIHRoZSBsaXN0IChlLmcuLCBpc29sYXRlZCkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBscnVfZ2V0X2dlbl9mbGFncyh1bnNpZ25lZCBsb25nIGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGdlbiA9ICgoZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbiYjNDM7XG4mIzQzO1x0LyogRXhjbHVkZSB0aGUgbGVnYWwgLTEgZnJvbSB0aGUgdW5zaWduZWQgTUFYX05SX0dFTlMgY29tcGFyaXNvbiAqL1xuJiM0MztcdFZNX1dBUk5fT05fT05DRShnZW4gIT0gLTEgXHUwMDI2XHUwMDI2IGdlbiBcdTAwM2U9IE1BWF9OUl9HRU5TKTtcbiYjNDM7XHRyZXR1cm4gZ2VuO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogbHJ1X3NldF9yZWZzX2ZsYWdzIC0gU2V0IHRoZSBMUlUgcmVmZXJlbmNlZCBjb3VudCB0byBmb2xpbyBmbGFncy5cbiYjNDM7ICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFnc1xuJiM0MzsgKiBAcmVmczogcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCBudW1iZXIsIGJldHdlZW4gMCBhbmQgTFJVX1JFRlNfTUFYLCBpbmNsdXNpdmUuXG4mIzQzOyAqXG4mIzQzOyAqIEZvciBNR0xSVSwgUEdfcmVmZXJlbmNlZCBob2xkcyB0aGUgZmlyc3QgcmVmLCBhbmQgdGhlIGV4dHJhIGJpdHMgaG9sZCB0aGVcbiYjNDM7ICogcmVtYWluaW5nIHJlZnMuIEZvciBjbGFzc2ljYWwgTFJVIHRoZSBleHRyYSBiaXRzIGFyZSBub3QgdXNlZCwgc28gaXQgY2FuXG4mIzQzOyAqIGFsc28gYmUgc2VlbiBhcyB0aGUgcmVmcyBjb3VudCBuZXZlciBleGNlZWRzIDEuIEluIGJvdGggY2FzZXMsIHJlZnMgPT0gMVxuJiM0MzsgKiBtZWFucyBQR19yZWZlcmVuY2VkIGlzIHNldCBhbmQgdGhlIGV4dHJhIGJpdHMgYXJlIHplcm8sIGFuZCByZWZzID09IDAgbWVhbnNcbiYjNDM7ICogUEdfcmVmZXJlbmNlZCBhbmQgdGhlIGV4dHJhIGJpdHMgYXJlIGFsbCB1bnNldC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfc2V0X3JlZnNfZmxhZ3ModW5zaWduZWQgbG9uZyAqZmxhZ3MsIHVuc2lnbmVkIGludCByZWZzKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4mIzQzO1x0Vk1fV0FSTl9PTl9PTkNFKHJlZnMgXHUwMDNlIExSVV9SRUZTX01BWCk7XG4mIzQzO1x0QlVJTERfQlVHX09OKExSVV9SRUZTX01BWCAhPSAoTFJVX1JFRlNfTUFTSyBcdTAwM2VcdTAwM2UgTFJVX1JFRlNfUEdPRkYpICYjNDM7IDEpO1xuIFxuJiM0MztcdCpmbGFncyBcdTAwMjY9IH5MUlVfUkVGU19GTEFHUztcbiYjNDM7XHRpZiAoIXJlZnMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0KmZsYWdzIHw9IChCSVQoUEdfcmVmZXJlbmNlZCkgfCAoKHJlZnMgLSAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfUkVGU19QR09GRikpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogbHJ1X2dldF9yZWZzX2ZsYWdzIC0gUmV0dXJuIExSVSByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IGZyb20gZm9saW8gZmxhZ3MuXG4mIzQzOyAqIEBmbGFnczogZm9saW8gZmxhZ3NcbiYjNDM7ICpcbiYjNDM7ICogUmVhZHMgdGhlIExSVSByZWZlcmVuY2VkIGNvdW50IHNldCBieSBscnVfc2V0X3JlZnNfZmxhZ3MoKS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGxydV9nZXRfcmVmc19mbGFncyh1bnNpZ25lZCBsb25nIGZsYWdzKVxuJiM0Mzt7XG4gXHRpZiAoIShmbGFncyBcdTAwMjYgQklUKFBHX3JlZmVyZW5jZWQpKSlcbiBcdFx0cmV0dXJuIDA7XG4gXHQvKlxuQEAgLTE1NSwxMSAmIzQzOzIyMiwyNCBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cmV0dXJuICgoZmxhZ3MgXHUwMDI2IExSVV9SRUZTX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfUkVGU19QR09GRikgJiM0MzsgMTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X2dlbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4mIzQzO1x0cmV0dXJuIGxydV9nZXRfcmVmc19mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpO1xuJiM0Mzt9XG4gXG4tXHRyZXR1cm4gKChmbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCByZWZzKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbiYjNDM7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuJiM0MztcdFx0bHJ1X3NldF9yZWZzX2ZsYWdzKFx1MDAyNm5ld19mbGFncywgcmVmcyk7XG4mIzQzO1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X2dlbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGxydV9nZXRfZ2VuX2ZsYWdzKFJFQURfT05DRSgqY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKSk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2lzX2FjdGl2ZShjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBnZW4pXG5AQCAtMjcwLDcgJiM0MzszNTAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9hZGRfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpO1xuIFx0ZmxhZ3MgPSAoZ2VuICYjNDM7IDFVTCkgXHUwMDNjXHUwMDNjIExSVV9HRU5fUEdPRkY7XG4gXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUlOX05SX0dFTlMgYWJvdXQgUEdfYWN0aXZlICovXG4tXHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9HRU5fTUFTSyB8IEJJVChQR19hY3RpdmUpLCBmbGFncyk7XG4mIzQzO1x0c2V0X21hc2tfYml0cyhmb2xpb19mbGFncyhmb2xpbywgMCksIExSVV9HRU5fTUFTSyB8IEJJVChQR19hY3RpdmUpLCBmbGFncyk7XG4gXG4gXHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIC0xLCBnZW4pO1xuIFx0LyogZm9yIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZSgpICovXG5AQCAtMjk1LDcgJiM0MzszNzUsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFxuIFx0LyogZm9yIGZvbGlvX21pZ3JhdGVfZmxhZ3MoKSAqL1xuIFx0ZmxhZ3MgPSAhcmVjbGFpbWluZyBcdTAwMjZcdTAwMjYgbHJ1X2dlbl9pc19hY3RpdmUobHJ1dmVjLCBnZW4pID8gQklUKFBHX2FjdGl2ZSkgOiAwO1xuLVx0ZmxhZ3MgPSBzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9HRU5fTUFTSywgZmxhZ3MpO1xuJiM0MztcdGZsYWdzID0gc2V0X21hc2tfYml0cyhmb2xpb19mbGFncyhmb2xpbywgMCksIExSVV9HRU5fTUFTSywgZmxhZ3MpO1xuIFx0Z2VuID0gKChmbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuIFxuIFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBnZW4sIC0xKTtcbkBAIC0zMDQsMTEgJiM0MzszODQsMTkgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcbiYjNDM7LyoqXG4mIzQzOyAqIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMgLSBjb3B5IHRoZSByZWZlcmVuY2Ugc3RhdGUgdG8gYSBuZXcgZm9saW9cbiYjNDM7ICogQG5ldzogdGhlIGRlc3RpbmF0aW9uIGZvbGlvXG4mIzQzOyAqIEBvbGQ6IHRoZSBzb3VyY2UgZm9saW9cbiYjNDM7ICpcbiYjNDM7ICogVHJhbnNmZXIgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBAbmV3IGR1cmluZyBtaWdyYXRpb246IHRoZSBNR0xSVVxuJiM0MzsgKiByZWZzIGNvdW50LCBpbmNsdWRpbmcgUEdfcmVmZXJlbmNlZCwgb3IganVzdCBQR19yZWZlcmVuY2VkIGZvciB0aGVcbiYjNDM7ICogYWN0aXZlL2luYWN0aXZlIExSVS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcbiB7XG4tXHR1bnNpZ25lZCBsb25nIHJlZnMgPSBSRUFEX09OQ0Uob2xkLVx1MDAzZWZsYWdzLmYpIFx1MDAyNiBMUlVfUkVGU19NQVNLO1xuLVxuLVx0c2V0X21hc2tfYml0cyhcdTAwMjZuZXctXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgcmVmcyk7XG4mIzQzO1x0QlVJTERfQlVHX09OKExSVV9SRUZTX01BU0sgXHUwMDI2IEJJVChQR19yZWZlcmVuY2VkKSk7XG4mIzQzO1x0Zm9saW9fc2V0X2xydV9yZWZzKG5ldywgZm9saW9fbHJ1X3JlZnMob2xkKSk7XG4gfVxuICNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xuIFxuQEAgLTMzNyw5ICYjNDM7NDI1LDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXG4ge1xuLVxuJiM0MztcdGlmIChmb2xpb190ZXN0X3JlZmVyZW5jZWQob2xkKSlcbiYjNDM7XHRcdGZvbGlvX3NldF9yZWZlcmVuY2VkKG5ldyk7XG4gfVxuICNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5pbmRleCA4NGUyMzdmMmMxN2RiLi5jOWFlNzk5MWE4YjIwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuQEAgLTQ5NSwxMSAmIzQzOzQ5NSwxNCBAQCBlbnVtIGxydXZlY19mbGFncyB7XG4gICogZm9saW8tXHUwMDNlZmxhZ3MsIG1hc2tlZCBieSBMUlVfUkVGU19NQVNLLlxuICAqL1xuICNkZWZpbmUgTUFYX05SX1RJRVJTXHRcdDRVXG4mIzQzOyNkZWZpbmUgTFJVX1RJRVJfTUlOXHRcdDBVXG4mIzQzOyNkZWZpbmUgTFJVX1RJRVJfTUFYXHRcdChNQVhfTlJfVElFUlMgLSAxKVxuIFxuICNpZm5kZWYgX19HRU5FUkFUSU5HX0JPVU5EU19IXG4gXG4gI2RlZmluZSBMUlVfR0VOX01BU0tcdFx0KChCSVQoTFJVX0dFTl9XSURUSCkgLSAxKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRilcbiAjZGVmaW5lIExSVV9SRUZTX01BU0tcdFx0KChCSVQoTFJVX1JFRlNfV0lEVEgpIC0gMSkgXHUwMDNjXHUwMDNjIExSVV9SRUZTX1BHT0ZGKVxuJiM0MzsjZGVmaW5lIExSVV9SRUZTX01BWFx0XHRCSVQoTFJVX1JFRlNfV0lEVEgpXG4gXG4gLypcbiAgKiBGb3IgZm9saW9zIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycyxcbmRpZmYgLS1naXQgYS9tbS9mb2xpby5jIGIvbW0vZm9saW8uY1xuaW5kZXggNTBhNmRiZTU1OTk4ZS4uNDdhNDM3ZTBmN2ZkZSAxMDA2NDRcbi0tLSBhL21tL2ZvbGlvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2ZvbGlvLmNcbkBAIC0zNTQsMjYgJiM0MzszNTQsMjggQEAgc3RhdGljIHZvaWQgX19scnVfY2FjaGVfYWN0aXZhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiBcbiBzdGF0aWMgdm9pZCBscnVfZ2VuX2luY19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuJiM0MztcdGludCByZWZzO1xuIFxuIFx0aWYgKGZvbGlvX3Rlc3RfdW5ldmljdGFibGUoZm9saW8pKVxuIFx0XHRyZXR1cm47XG4gXG4gXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi9cbi1cdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSkge1xuLVx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XG4mIzQzO1x0aWYgKCFmb2xpb19scnVfcmVmcyhmb2xpbykpIHtcbiYjNDM7XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbiBcdGRvIHtcbi1cdFx0aWYgKChvbGRfZmxhZ3MgXHUwMDI2IExSVV9SRUZTX01BU0spID09IExSVV9SRUZTX01BU0spIHtcbiYjNDM7XHRcdG5ld19mbGFncyA9IG9sZF9mbGFncztcbiYjNDM7XHRcdHJlZnMgPSBscnVfZ2V0X3JlZnNfZmxhZ3Mob2xkX2ZsYWdzKTtcbiYjNDM7XHRcdGlmIChyZWZzID09IExSVV9SRUZTX01BWCkge1xuIFx0XHRcdGlmICghZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSlcbiBcdFx0XHRcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcbiBcdFx0XHRyZXR1cm47XG4gXHRcdH1cbi1cbi1cdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzICYjNDM7IEJJVChMUlVfUkVGU19QR09GRik7XG4tXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiYjNDM7XHRcdGxydV9zZXRfcmVmc19mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIHJlZnMgJiM0MzsgMSk7XG4mIzQzO1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5AQCAtMzg1LDcgJiM0MzszODcsOCBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGlmIChnZW4gXHUwMDNjIDApXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuLVx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUyB8IEJJVChQR193b3JraW5nc2V0KSwgMCk7XG4mIzQzO1x0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbiYjNDM7XHRmb2xpb19jbGVhcl93b3JraW5nc2V0KGZvbGlvKTtcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdHNlcSA9IFJFQURfT05DRShmb2xpb19scnV2ZWMoZm9saW8pLVx1MDAzZWxydWdlbi5taW5fc2VxW3R5cGVdKTtcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IGJkMWU3ZTE1NDQyNjUuLmYxN2IyYjJkNjEwNTUgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTE1MjksMjggJiM0MzsxNTI5LDEyIEBAIHZvaWQgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIGxydV9saXN0IGxydSxcbiBcdFx0XHRcdGludCB6aWQsIGxvbmcgbnJfcGFnZXMpXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16O1xuLVx0dW5zaWduZWQgbG9uZyAqbHJ1X3NpemU7XG4tXHRsb25nIHNpemU7XG4gXG4gXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRteiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xuLVx0bHJ1X3NpemUgPSBcdTAwMjZtei1cdTAwM2VscnVfem9uZV9zaXplW3ppZF1bbHJ1XTtcbi1cbi1cdGlmIChucl9wYWdlcyBcdTAwM2MgMClcbi1cdFx0KmxydV9zaXplICYjNDM7PSBucl9wYWdlcztcbi1cbi1cdHNpemUgPSAqbHJ1X3NpemU7XG4tXHRpZiAoV0FSTl9PTkNFKHNpemUgXHUwMDNjIDAsXG4tXHRcdFwmIzM0OyVzKCVwLCAlZCwgJWxkKTogbHJ1X3NpemUgJWxkXFxuXCYjMzQ7LFxuLVx0XHRfX2Z1bmNfXywgbHJ1dmVjLCBscnUsIG5yX3BhZ2VzLCBzaXplKSkge1xuLVx0XHRWTV9CVUdfT04oMSk7XG4tXHRcdCpscnVfc2l6ZSA9IDA7XG4tXHR9XG4tXG4tXHRpZiAobnJfcGFnZXMgXHUwMDNlIDApXG4tXHRcdCpscnVfc2l6ZSAmIzQzOz0gbnJfcGFnZXM7XG4mIzQzO1x0bXotXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6aWRdW2xydV0gJiM0Mzs9IG5yX3BhZ2VzO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmNcbmluZGV4IDE1YjQ1ODMyYmNmYTcuLmEzNjlkMGM5NWMzODYgMTAwNjQ0XG4tLS0gYS9tbS9taWdyYXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21pZ3JhdGUuY1xuQEAgLTc3Niw4ICYjNDM7Nzc2LDkgQEAgdm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0aW50IGNwdXBpZDtcbiBcbi1cdGlmIChmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKVxuLVx0XHRmb2xpb19zZXRfcmVmZXJlbmNlZChuZXdmb2xpbyk7XG4mIzQzO1x0LyogQ29weSB0aGUgcmVmZXJlbmNlIHN0YXRlLCBpbmNsdWRpbmcgUEdfcmVmZXJlbmNlZCAqL1xuJiM0MztcdGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMobmV3Zm9saW8sIGZvbGlvKTtcbiYjNDM7XG4gXHRpZiAoZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpXG4gXHRcdGZvbGlvX21hcmtfdXB0b2RhdGUobmV3Zm9saW8pO1xuIFx0aWYgKGZvbGlvX3Rlc3RfY2xlYXJfYWN0aXZlKGZvbGlvKSkge1xuQEAgLTgwNyw3ICYjNDM7ODA4LDYgQEAgdm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRpZiAoZm9saW9fdGVzdF9pZGxlKGZvbGlvKSlcbiBcdFx0Zm9saW9fc2V0X2lkbGUobmV3Zm9saW8pO1xuIFxuLVx0Zm9saW9fbWlncmF0ZV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7XG4gXHQvKlxuIFx0ICogQ29weSBOVU1BIGluZm9ybWF0aW9uIHRvIHRoZSBuZXcgcGFnZSwgdG8gcHJldmVudCBvdmVyLWVhZ2VyXG4gXHQgKiBmdXR1cmUgbWlncmF0aW9ucyBvZiB0aGlzIHNhbWUgcGFnZS5cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCAyNDVmNjhjNzViMjg5Li40MGQzZjFiNDhhNzRjIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtODYzLDE5ICYjNDM7ODYzLDIyIEBAIHN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiBcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpIHtcbiBcdFx0LyogQWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuICovXG4gXHRcdGlmIChpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIHZtYV9mbGFncykpIHtcbi1cdFx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfd29ya2luZ3NldCkpO1xuJiM0MztcdFx0XHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XG4mIzQzO1x0XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHRcdH1cbiBcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuJiM0MztcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuIFx0LyogUHJvbW90ZSBvbiBzZWNvbmQgYWNjZXNzICovXG4tXHRpZiAoZm9saW9fbHJ1X3JlZnMoZm9saW8pIFx1MDAzZSAxKVxuLVx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfd29ya2luZ3NldCkpO1xuLVx0ZWxzZVxuJiM0MztcdGlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgXHUwMDNlIDEpIHtcbiYjNDM7XHRcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcbiYjNDM7XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4mIzQzO1x0fSBlbHNlIHtcbiBcdFx0Zm9saW9fbWFya19hY2Nlc3NlZChmb2xpbyk7XG4mIzQzO1x0fVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuICNlbHNlXG5AQCAtMzIyMCw4ICYjNDM7MzIyMyw4IEBAIHN0cnVjdCBjdHJsX3BvcyB7XG4gXHRpbnQgZ2FpbjtcbiB9O1xuIFxuLXN0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXIsIGludCBnYWluLFxuLVx0XHRcdCAgc3RydWN0IGN0cmxfcG9zICpwb3MpXG4mIzQzO3N0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXJfbWluLFxuJiM0MztcdFx0XHQgIGludCB0aWVyX21heCwgaW50IGdhaW4sIHN0cnVjdCBjdHJsX3BvcyAqcG9zKVxuIHtcbiBcdGludCBpO1xuIFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5AQCAtMzIzMCw3ICYjNDM7MzIzMyw3IEBAIHN0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXIsIGludCBnYWluLFxuIFx0cG9zLVx1MDAzZWdhaW4gPSBnYWluO1xuIFx0cG9zLVx1MDAzZXJlZmF1bHRlZCA9IHBvcy1cdTAwM2V0b3RhbCA9IDA7XG4gXG4tXHRmb3IgKGkgPSB0aWVyICUgTUFYX05SX1RJRVJTOyBpIFx1MDAzYz0gbWluKHRpZXIsIE1BWF9OUl9USUVSUyAtIDEpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdGZvciAoaSA9IHRpZXJfbWluOyBpIFx1MDAzYz0gdGllcl9tYXg7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHBvcy1cdTAwM2VyZWZhdWx0ZWQgJiM0Mzs9IGxydWdlbi1cdTAwM2VhdmdfcmVmYXVsdGVkW3R5cGVdW2ldICYjNDM7XG4gXHRcdFx0XHQgIGF0b21pY19sb25nX3JlYWQoXHUwMDI2bHJ1Z2VuLVx1MDAzZXJlZmF1bHRlZFtoaXN0XVt0eXBlXVtpXSk7XG4gXHRcdHBvcy1cdTAwM2V0b3RhbCAmIzQzOz0gbHJ1Z2VuLVx1MDAzZWF2Z190b3RhbFt0eXBlXVtpXSAmIzQzO1xuQEAgLTMyOTEsMTEgJiM0MzszMjk0LDExIEBAIHN0YXRpYyBib29sIHBvc2l0aXZlX2N0cmxfZXJyKHN0cnVjdCBjdHJsX3BvcyAqc3AsIHN0cnVjdCBjdHJsX3BvcyAqcHYpXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiBcbiAvKiBwcm9tb3RlIHBhZ2VzIGFjY2Vzc2VkIHRocm91Z2ggcGFnZSB0YWJsZXMgKi9cbi1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiYjNDM7c3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBpbnQgKnR5cGUsXG4mIzQzO1x0XHRcdCAgICBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4tXG4tXHRWTV9XQVJOX09OX09OQ0UoZ2VuIFx1MDAzZT0gTUFYX05SX0dFTlMpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4mIzQzO1x0aW50IG9sZF9nZW47XG4gXG4gXHQvKlxuIFx0ICogU2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTLCBhbmQgYWN0aXZhdGUgZmlsZS1iYWNrZWRcbkBAIC0zMzA0LDMxICYjNDM7MzMwNywzNSBAQCBzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYVxuIFx0ICovXG4gXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pIFx1MDAyNlx1MDAyNlxuIFx0ICAgICFpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIHZtYV9mbGFncykpIHtcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuJiM0MztcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcbiBcdFx0cmV0dXJuIC0xO1xuIFx0fVxuIFxuIFx0ZG8ge1xuJiM0MztcdFx0b2xkX2dlbiA9IGxydV9nZXRfZ2VuX2ZsYWdzKG9sZF9mbGFncyk7XG4mIzQzO1x0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XG4mIzQzO1xuIFx0XHQvKiBscnVfZ2VuX2RlbF9mb2xpbygpIGhhcyBpc29sYXRlZCB0aGlzIHBhZ2U/ICovXG4tXHRcdGlmICghKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSlcbi1cdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHRpZiAob2xkX2dlbiBcdTAwM2MgMClcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXG4tXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncyBcdTAwMjYgfihMUlVfR0VOX01BU0sgfCBMUlVfUkVGU19GTEFHUyk7XG4tXHRcdG5ld19mbGFncyB8PSAoKGdlbiAmIzQzOyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGKSB8IEJJVChQR193b3JraW5nc2V0KTtcbi1cdH0gd2hpbGUgKCF0cnlfY21weGNoZyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuJiM0MztcdFx0bHJ1X3NldF9nZW5fZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCBuZXdfZ2VuKTtcbiYjNDM7XHRcdGxydV9zZXRfcmVmc19mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIDApO1xuJiM0MztcdFx0bmV3X2ZsYWdzIHw9IEJJVChQR193b3JraW5nc2V0KTtcbiYjNDM7XHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuIFxuLVx0cmV0dXJuICgob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4mIzQzO1x0KnR5cGUgPSBmb2xpb19mbGFnc19pc19maWxlX2xydShcdTAwMjZvbGRfZmxhZ3MpO1xuJiM0MztcdHJldHVybiBvbGRfZ2VuO1xuIH1cbiBcbiBzdGF0aWMgaW50IF9fZm9saW9faW5jX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX2dlbiwgYm9vbCAqaW5jcmVhc2VkKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbiBcdGludCBuZXdfZ2VuO1xuIFxuLVx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCEob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spLCBmb2xpbyk7XG4tXG4gXHRkbyB7XG4tXHRcdG5ld19nZW4gPSAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuJiM0MztcdFx0bmV3X2dlbiA9IGxydV9nZXRfZ2VuX2ZsYWdzKG9sZF9mbGFncyk7XG4mIzQzO1xuIFx0XHQvKiBmb2xpb191cGRhdGVfZ2VuKCkgaGFzIHByb21vdGVkIHRoaXMgcGFnZT8gKi9cbiBcdFx0aWYgKG5ld19nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBuZXdfZ2VuICE9IG9sZF9nZW4pIHtcbiBcdFx0XHRpZiAoaW5jcmVhc2VkKVxuQEAgLTMzMzYsMTEgJiM0MzszMzQzLDEyIEBAIHN0YXRpYyBpbnQgX19mb2xpb19pbmNfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfZ2VuLCBib29sICppbmNyZWFzZWQpXG4gXHRcdFx0cmV0dXJuIG5ld19nZW47XG4gXHRcdH1cbiBcbiYjNDM7XHRcdG5ld19mbGFncyA9IG9sZF9mbGFncztcbiBcdFx0bmV3X2dlbiA9IChvbGRfZ2VuICYjNDM7IDEpICUgTUFYX05SX0dFTlM7XG4gXG4tXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncyBcdTAwMjYgfihMUlVfR0VOX01BU0sgfCBMUlVfUkVGU19GTEFHUyk7XG4tXHRcdG5ld19mbGFncyB8PSAobmV3X2dlbiAmIzQzOyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuLVx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4mIzQzO1x0XHRscnVfc2V0X2dlbl9mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIG5ld19nZW4pO1xuJiM0MztcdFx0bHJ1X3NldF9yZWZzX2ZsYWdzKFx1MDAyNm5ld19mbGFncywgMCk7XG4mIzQzO1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiBcbiBcdGlmIChpbmNyZWFzZWQpXG4gXHRcdCppbmNyZWFzZWQgPSB0cnVlO1xuQEAgLTMzNjIsOSAmIzQzOzMzNzAsOCBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIH1cbiBcbiBzdGF0aWMgdm9pZCB1cGRhdGVfYmF0Y2hfc2l6ZShzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLVx0XHRcdCAgICAgIGludCBvbGRfZ2VuLCBpbnQgbmV3X2dlbilcbiYjNDM7XHRcdFx0ICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuLCBpbnQgdHlwZSlcbiB7XG4tXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbiBcdGludCB6b25lID0gZm9saW9fem9uZW51bShmb2xpbyk7XG4gXHRpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXG5AQCAtMzU1MSwyMiAmIzQzOzM1NTgsMjQgQEAgc3RhdGljIGJvb2wgc3VpdGFibGVfdG9fc2NhbihpbnQgdG90YWwsIGludCB5b3VuZylcbiB9XG4gXG4gc3RhdGljIHZvaWQgd2Fsa191cGRhdGVfZm9saW8oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBib29sIGRpcnR5KVxuJiM0MztcdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIGRpcnR5KVxuIHtcbi1cdGludCBvbGRfZ2VuO1xuJiM0MztcdGludCBuZXdfZ2VuLCBvbGRfZ2VuLCB0eXBlO1xuIFxuIFx0aWYgKCFmb2xpbylcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdG5ld19nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKFJFQURfT05DRShscnV2ZWMtXHUwMDNlbHJ1Z2VuLm1heF9zZXEpKTtcbiYjNDM7XG4gXHRpZiAoZGlydHkgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHQgICAgICAhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSlcbiBcdFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG4gXG4gXHRpZiAod2Fsaykge1xuLVx0XHRvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgXHUwMDI2dm1hLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRcdG9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuLCBcdTAwMjZ0eXBlLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpO1xuIFx0XHRpZiAob2xkX2dlbiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG9sZF9nZW4gIT0gbmV3X2dlbilcbi1cdFx0XHR1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XG4mIzQzO1x0XHRcdHVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuLCB0eXBlKTtcbiBcdH0gZWxzZSBpZiAobHJ1X2dlbl9zZXRfcmVmcyhmb2xpbywgXHUwMDI2dm1hLVx1MDAzZWZsYWdzKSkge1xuIFx0XHRvbGRfZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7XG4gXHRcdGlmIChvbGRfZ2VuIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgb2xkX2dlbiAhPSBuZXdfZ2VuKVxuQEAgLTM1ODgsOCAmIzQzOzM1OTcsNiBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVx1MDAzZXByaXZhdGU7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay1cdTAwM2VscnV2ZWMpO1xuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdCh3YWxrLVx1MDAzZWxydXZlYyk7XG4tXHRERUZJTkVfTUFYX1NFUSh3YWxrLVx1MDAzZWxydXZlYyk7XG4tXHRpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcbiBcdHVuc2lnbmVkIGludCBucjtcbiBcdHBtZF90IHBtZHZhbDtcbiBcbkBAIC0zNjQwLDcgJiM0MzszNjQ3LDcgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChsYXN0ICE9IGZvbGlvKSB7XG4tXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuJiM0MztcdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLVx1MDAzZXZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC0zNjUzLDcgJiM0MzszNjYwLDcgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdHdhbGstXHUwMDNlbW1fc3RhdHNbTU1fTEVBRl9ZT1VOR10gJiM0Mzs9IG5yO1xuIFx0fVxuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuJiM0MztcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCB3YWxrLVx1MDAzZWxydXZlYywgbGFzdCwgZGlydHkpO1xuIFx0bGFzdCA9IE5VTEw7XG4gXG4gXHRpZiAoaSBcdTAwM2MgUFRSU19QRVJfUFRFIFx1MDAyNlx1MDAyNiBnZXRfbmV4dF92bWEoUE1EX01BU0ssIFBBR0VfU0laRSwgYXJncywgXHUwMDI2c3RhcnQsIFx1MDAyNmVuZCkpXG5AQCAtMzY3Niw4ICYjNDM7MzY4Myw2IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhXG4gXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cdTAwM2Vwcml2YXRlO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKHdhbGstXHUwMDNlbHJ1dmVjKTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQod2Fsay1cdTAwM2VscnV2ZWMpO1xuLVx0REVGSU5FX01BWF9TRVEod2Fsay1cdTAwM2VscnV2ZWMpO1xuLVx0aW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0UocHVkX2xlYWYoKnB1ZCkpO1xuIFxuQEAgLTM3MzEsNyAmIzQzOzM3MzYsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0XHRcdGdvdG8gbmV4dDtcbiBcbiBcdFx0aWYgKGxhc3QgIT0gZm9saW8pIHtcbi1cdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuJiM0MztcdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIHdhbGstXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXG4gXHRcdFx0bGFzdCA9IGZvbGlvO1xuIFx0XHRcdGRpcnR5ID0gZmFsc2U7XG5AQCAtMzc0NSw3ICYjNDM7Mzc1MCw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhXG4gXHRcdGkgPSBpIFx1MDAzZSBNSU5fTFJVX0JBVENIID8gMCA6IGZpbmRfbmV4dF9iaXQoYml0bWFwLCBNSU5fTFJVX0JBVENILCBpKSAmIzQzOyAxO1xuIFx0fSB3aGlsZSAoaSBcdTAwM2M9IE1JTl9MUlVfQkFUQ0gpO1xuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbiYjNDM7XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIHdhbGstXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXG4gXHRsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTtcbiBcdHNwaW5fdW5sb2NrKHB0bCk7XG5AQCAtNDM1MSw4ICYjNDM7NDM1Niw2IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBmb2xpb19wZ2RhdChmb2xpbyk7XG4gXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGU7XG4tXHR1bnNpZ25lZCBsb25nIG1heF9zZXE7XG4tXHRpbnQgZ2VuO1xuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChwdm13LVx1MDAzZXB0bCk7XG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF9scnUoZm9saW8pLCBmb2xpbyk7XG5AQCAtNDM4OSw4ICYjNDM7NDM5Miw2IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcbiBcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XG4gXHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpO1xuLVx0bWF4X3NlcSA9IFJFQURfT05DRSgobHJ1dmVjKS1cdTAwM2VscnVnZW4ubWF4X3NlcSk7XG4tXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xuIFx0bW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcbiBcbiBcdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XG5AQCAtNDQyMiw3ICYjNDM7NDQyMyw3IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKGxhc3QgIT0gZm9saW8pIHtcbi1cdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuJiM0MztcdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxydXZlYywgbGFzdCwgZGlydHkpO1xuIFxuIFx0XHRcdGxhc3QgPSBmb2xpbztcbiBcdFx0XHRkaXJ0eSA9IGZhbHNlO1xuQEAgLTQ0MzQsMTMgJiM0Mzs0NDM1LDE0IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdFx0eW91bmcgJiM0Mzs9IG5yO1xuIFx0fVxuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbiYjNDM7XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxydXZlYywgbGFzdCwgZGlydHkpO1xuIFxuIFx0bGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7XG4gXG4gXHQvKiBmZWVkYmFjayBmcm9tIHJtYXAgd2Fsa2VycyB0byBwYWdlIHRhYmxlIHdhbGtlcnMgKi9cbiBcdGlmIChtbV9zdGF0ZSBcdTAwMjZcdTAwMjYgc3VpdGFibGVfdG9fc2NhbihpLCB5b3VuZykpXG4tXHRcdHVwZGF0ZV9ibG9vbV9maWx0ZXIobW1fc3RhdGUsIG1heF9zZXEsIHB2bXctXHUwMDNlcG1kKTtcbiYjNDM7XHRcdHVwZGF0ZV9ibG9vbV9maWx0ZXIobW1fc3RhdGUsIFJFQURfT05DRShscnV2ZWMtXHUwMDNlbHJ1Z2VuLm1heF9zZXEpLFxuJiM0MztcdFx0XHRcdCAgICBwdm13LVx1MDAzZXBtZCk7XG4gXG4gXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4gXG5AQCAtNDc4NSw3ICYjNDM7NDc4Nyw3IEBAIHN0YXRpYyBib29sIGlzb2xhdGVfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2NhXG4gXG4gXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi9cbiBcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSlcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCAwKTtcbiYjNDM7XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4gXG4gXHRzdWNjZXNzID0gbHJ1X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7XG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIXN1Y2Nlc3MsIGZvbGlvKTtcbkBAIC00ODc4LDkgJiM0Mzs0ODgwLDkgQEAgc3RhdGljIGludCBnZXRfdGllcl9pZHgoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSlcbiBcdCAqIFRoaXMgdmFsdWUgaXMgY2hvc2VuIGJlY2F1c2UgYW55IG90aGVyIHRpZXIgd291bGQgaGF2ZSBhdCBsZWFzdCB0d2ljZVxuIFx0ICogYXMgbWFueSByZWZhdWx0cyBhcyB0aGUgZmlyc3QgdGllci5cbiBcdCAqL1xuLVx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIDAsIDIsIFx1MDAyNnNwKTtcbi1cdGZvciAodGllciA9IDE7IHRpZXIgXHUwMDNjIE1BWF9OUl9USUVSUzsgdGllciYjNDM7JiM0MzspIHtcbi1cdFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIDMsIFx1MDAyNnB2KTtcbiYjNDM7XHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NSU4sIDIsIFx1MDAyNnNwKTtcbiYjNDM7XHRmb3IgKHRpZXIgPSBMUlVfVElFUl9NSU4gJiM0MzsgMTsgdGllciBcdTAwM2M9IExSVV9USUVSX01BWDsgdGllciYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0aWVyLCB0aWVyLCAzLCBcdTAwMjZwdik7XG4gXHRcdGlmICghcG9zaXRpdmVfY3RybF9lcnIoXHUwMDI2c3AsIFx1MDAyNnB2KSlcbiBcdFx0XHRicmVhaztcbiBcdH1cbkBAIC00OTAxLDggJiM0Mzs0OTAzLDEwIEBAIHN0YXRpYyBpbnQgZ2V0X3R5cGVfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxuIFx0ICogQ29tcGFyZSB0aGUgc3VtIG9mIGFsbCB0aWVycyBvZiBhbm9uIHdpdGggdGhhdCBvZiBmaWxlIHRvIGRldGVybWluZVxuIFx0ICogd2hpY2ggdHlwZSB0byBzY2FuLlxuIFx0ICovXG4tXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBNQVhfTlJfVElFUlMsIHN3YXBwaW5lc3MsIFx1MDAyNnNwKTtcbi1cdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIE1BWF9OUl9USUVSUywgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCBcdTAwMjZwdik7XG4mIzQzO1x0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fQU5PTiwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NQVgsXG4mIzQzO1x0XHQgICAgICBzd2FwcGluZXNzLCBcdTAwMjZzcCk7XG4mIzQzO1x0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NQVgsXG4mIzQzO1x0XHQgICAgICBNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3MsIFx1MDAyNnB2KTtcbiBcbiBcdHJldHVybiBwb3NpdGl2ZV9jdHJsX2VycihcdTAwMjZzcCwgXHUwMDI2cHYpO1xuIH1cbkBAIC01MDE3LDggJiM0Mzs1MDIxLDEwIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHR9XG4gXG4gXHRcdC8qIGRvbiYjMzk7dCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqL1xuLVx0XHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pXG4tXHRcdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX2FjdGl2ZSkpO1xuJiM0MztcdFx0aWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKSB7XG4mIzQzO1x0XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4mIzQzO1x0XHRcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuIFx0bW92ZV9mb2xpb3NfdG9fbHJ1KFx1MDAyNmxpc3QpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjIzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xydV9nZW5fbG9va19hcm91bmQmIzM0OywKICAgICYjMzQ7Zm9saW9fbWlncmF0ZV9mbGFncyYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZSYjMzQ7LAogICAgJiMzNDt3YWxrX3B0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDt3YWxrX3BtZF9yYW5nZV9sb2NrZWQmIzM0OywKICAgICYjMzQ7Zm9saW9fdXBkYXRlX2dlbiYjMzQ7LAogICAgJiMzNDtldmljdF9mb2xpb3MmIzM0OywKICAgICYjMzQ7aXNvbGF0ZV9mb2xpbyYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX2luY19yZWZzJiMzNDssCiAgICAmIzM0O2xydV9nZW5fY2xlYXJfcmVmcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBhY3Jvc3MgbW0vdm1zY2FuLmMsIG1tL2ZvbGlvLmMsIG1tL21lbWNvbnRyb2wuYywgYW5kIG1tL21pZ3JhdGUuYywgYWx0ZXJpbmcgTXVsdGktR2VuIExSVSAoTUdMUlUpIHJlZmVyZW5jZSB0cmFja2luZywgZm9saW8gZmxhZyBtYW5pcHVsYXRpb24sIHRpZXIgY2FsY3VsYXRpb25zLCBwYWdlIGV2aWN0aW9uLCBhbmQgbWVtY2cgTFJVIHpvbmUgYWNjb3VudGluZy4gSXQgYWxzbyBhZGRzIHNldmVyYWwgVk1fV0FSTl9PTl9PTkNFIGFzc2VydGlvbnMgYW5kIGNoYW5nZXMgc3luY2hyb25pemF0aW9uL2FyaXRobWV0aWMgbG9naWMuIFRoZXNlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlM2NiYmM3NmUxYzk2NmM3NmZlNjIxMjk5YTMyZDE3YWZhN2U0MDAzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgNiAxNjoyMzo0OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKaW5kZXggYzc5OTkyNjQzNTU2MC4uMmI2NzY5NDI4NWQwNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKQEAgLTEwMCw3ICYjNDM7MTAwLDcgQEAgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgewogCS8qIEZpZWxkcyB3aGljaCBnZXQgdXBkYXRlZCBvZnRlbiBhdCB0aGUgZW5kLiAqLwogCXN0cnVjdCBscnV2ZWMJCWxydXZlYzsKIAlDQUNIRUxJTkVfUEFERElORyhfcGFkMl8pOwotCXVuc2lnbmVkIGxvbmcJCWxydV96b25lX3NpemVbTUFYX05SX1pPTkVTXVtOUl9MUlVfTElTVFNdOwomIzQzOwlsb25nCQkJbHJ1X3pvbmVfc2l6ZVtNQVhfTlJfWk9ORVNdW05SX0xSVV9MSVNUU107CiAJc3RydWN0IG1lbV9jZ3JvdXBfcmVjbGFpbV9pdGVyCWl0ZXI7CiAKIAkvKgpAQCAtODg3LDEwICYjNDM7ODg3LDE1IEBAIHN0YXRpYyBpbmxpbmUKIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCWVudW0gbHJ1X2xpc3QgbHJ1LCBpbnQgem9uZV9pZHgpCiB7CiYjNDM7CWxvbmcgdmFsOwogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejsKIAogCW16ID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7Ci0JcmV0dXJuIFJFQURfT05DRShtei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7CiYjNDM7CXZhbCA9IFJFQURfT05DRShtei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UodmFsICZsdDsgMCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIHZhbDsKIH0KIAogdm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaAppbmRleCA2MjFjODY1M2Q4ZjdlLi5hYjY5Yjk5MzA4OTNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmgKQEAgLTMwLDYgJiM0MzszMCwxNyBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19pc19maWxlX2xydShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXJldHVybiAhZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1IC0gU2hvdWxkIHRoZSBmb2xpbyBiZSBvbiBhIGZpbGUgTFJVIG9yIGFub24gTFJVPwomIzQzOyAqIEBmbGFnczogVGhlIGZvbGlvJiMzOTtzIGZsYWdzLgomIzQzOyAqCiYjNDM7ICogSnVzdCBsaWtlIGZvbGlvX2lzX2ZpbGVfbHJ1IGJ1dCB0YWtlIHRoZSBmb2xpbyBmbGFncyBkaXJlY3RseSBpbnN0ZWFkLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZsYWdzKQomIzQzO3sKJiM0MzsJcmV0dXJuICF0ZXN0X2JpdChQR19zd2FwYmFja2VkLCBmbGFncyk7CiYjNDM7fQomIzQzOwogc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJCQllbnVtIGxydV9saXN0IGxydSwgZW51bSB6b25lX3R5cGUgemlkLAogCQkJCWxvbmcgbnJfcGFnZXMpCkBAIC0xNDIsMTAgJiM0MzsxNTMsNjYgQEAgc3RhdGljIGlubGluZSBpbnQgbHJ1X3RpZXJfZnJvbV9yZWZzKGludCByZWZzLCBib29sIHdvcmtpbmdzZXQpCiAJcmV0dXJuIHdvcmtpbmdzZXQgPyBNQVhfTlJfVElFUlMgLSAxIDogb3JkZXJfYmFzZV8yKHJlZnMpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzOy8qKgomIzQzOyAqIGxydV9zZXRfZ2VuX2ZsYWdzIC0gU2V0IHRoZSBMUlUgZ2VuZXJhdGlvbiBudW1iZXIgdG8gc3BlY2lmaWVkIGZvbGlvIGZsYWdzLgomIzQzOyAqIEBmbGFnczogcG9pbnRlciB0byB0aGUgZm9saW8gZmxhZ3MKJiM0MzsgKiBAZ2VuOiBnZW5lcmF0aW9uIG51bWJlciwgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfc2V0X2dlbl9mbGFncyh1bnNpZ25lZCBsb25nICpmbGFncywgaW50IGdlbikKJiM0Mzt7CiYjNDM7CUJVSUxEX0JVR19PTihMUlVfR0VOX01BU0sgJmFtcDsgTFJVX1JFRlNfTUFTSyk7CiYjNDM7CVZNX1dBUk5fT05fT05DRShnZW4gJmd0Oz0gTUFYX05SX0dFTlMgfHwgZ2VuICZsdDsgMCk7CiYjNDM7CS8qIFN0b3JlIGdlbiBvZmZzZXQgYnkgMSwgemVybyBtZWFucyB0aGUgZm9saW8gaXMgb2ZmLWxpc3QuICovCiYjNDM7CSpmbGFncyAmYW1wOz0gfkxSVV9HRU5fTUFTSzsKJiM0MzsJKmZsYWdzIHw9IChnZW4gJiM0MzsgMVVMKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBscnVfZ2V0X2dlbl9mbGFncyAtIFJldHVybiB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIGZyb20gZm9saW8gZmxhZ3MuCiYjNDM7ICogQGZsYWdzOiBmb2xpbyBmbGFncwomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLiBSZXR1cm5zCiYjNDM7ICogLTEgaWYgdGhlIGZsYWdzIGluZGljYXRlIHRoZSBmb2xpbyBpcyBvZmYgdGhlIGxpc3QgKGUuZy4sIGlzb2xhdGVkKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGludCBscnVfZ2V0X2dlbl9mbGFncyh1bnNpZ25lZCBsb25nIGZsYWdzKQomIzQzO3sKJiM0MzsJaW50IGdlbiA9ICgoZmxhZ3MgJmFtcDsgTFJVX0dFTl9NQVNLKSAmZ3Q7Jmd0OyBMUlVfR0VOX1BHT0ZGKSAtIDE7CiYjNDM7CiYjNDM7CS8qIEV4Y2x1ZGUgdGhlIGxlZ2FsIC0xIGZyb20gdGhlIHVuc2lnbmVkIE1BWF9OUl9HRU5TIGNvbXBhcmlzb24gKi8KJiM0MzsJVk1fV0FSTl9PTl9PTkNFKGdlbiAhPSAtMSAmYW1wOyZhbXA7IGdlbiAmZ3Q7PSBNQVhfTlJfR0VOUyk7CiYjNDM7CXJldHVybiBnZW47CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGxydV9zZXRfcmVmc19mbGFncyAtIFNldCB0aGUgTFJVIHJlZmVyZW5jZWQgY291bnQgdG8gZm9saW8gZmxhZ3MuCiYjNDM7ICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFncwomIzQzOyAqIEByZWZzOiByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IG51bWJlciwgYmV0d2VlbiAwIGFuZCBMUlVfUkVGU19NQVgsIGluY2x1c2l2ZS4KJiM0MzsgKgomIzQzOyAqIEZvciBNR0xSVSwgUEdfcmVmZXJlbmNlZCBob2xkcyB0aGUgZmlyc3QgcmVmLCBhbmQgdGhlIGV4dHJhIGJpdHMgaG9sZCB0aGUKJiM0MzsgKiByZW1haW5pbmcgcmVmcy4gRm9yIGNsYXNzaWNhbCBMUlUgdGhlIGV4dHJhIGJpdHMgYXJlIG5vdCB1c2VkLCBzbyBpdCBjYW4KJiM0MzsgKiBhbHNvIGJlIHNlZW4gYXMgdGhlIHJlZnMgY291bnQgbmV2ZXIgZXhjZWVkcyAxLiBJbiBib3RoIGNhc2VzLCByZWZzID09IDEKJiM0MzsgKiBtZWFucyBQR19yZWZlcmVuY2VkIGlzIHNldCBhbmQgdGhlIGV4dHJhIGJpdHMgYXJlIHplcm8sIGFuZCByZWZzID09IDAgbWVhbnMKJiM0MzsgKiBQR19yZWZlcmVuY2VkIGFuZCB0aGUgZXh0cmEgYml0cyBhcmUgYWxsIHVuc2V0LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfc2V0X3JlZnNfZmxhZ3ModW5zaWduZWQgbG9uZyAqZmxhZ3MsIHVuc2lnbmVkIGludCByZWZzKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwomIzQzOwlWTV9XQVJOX09OX09OQ0UocmVmcyAmZ3Q7IExSVV9SRUZTX01BWCk7CiYjNDM7CUJVSUxEX0JVR19PTihMUlVfUkVGU19NQVggIT0gKExSVV9SRUZTX01BU0sgJmd0OyZndDsgTFJVX1JFRlNfUEdPRkYpICYjNDM7IDEpOwogCiYjNDM7CSpmbGFncyAmYW1wOz0gfkxSVV9SRUZTX0ZMQUdTOwomIzQzOwlpZiAoIXJlZnMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CSpmbGFncyB8PSAoQklUKFBHX3JlZmVyZW5jZWQpIHwgKChyZWZzIC0gMVVMKSAmbHQ7Jmx0OyBMUlVfUkVGU19QR09GRikpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBscnVfZ2V0X3JlZnNfZmxhZ3MgLSBSZXR1cm4gTFJVIHJlZmVyZW5jZWQgLyBhY2Nlc3MgY291bnQgZnJvbSBmb2xpbyBmbGFncy4KJiM0MzsgKiBAZmxhZ3M6IGZvbGlvIGZsYWdzCiYjNDM7ICoKJiM0MzsgKiBSZWFkcyB0aGUgTFJVIHJlZmVyZW5jZWQgY291bnQgc2V0IGJ5IGxydV9zZXRfcmVmc19mbGFncygpLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGxydV9nZXRfcmVmc19mbGFncyh1bnNpZ25lZCBsb25nIGZsYWdzKQomIzQzO3sKIAlpZiAoIShmbGFncyAmYW1wOyBCSVQoUEdfcmVmZXJlbmNlZCkpKQogCQlyZXR1cm4gMDsKIAkvKgpAQCAtMTU1LDExICYjNDM7MjIyLDI0IEBAIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJcmV0dXJuICgoZmxhZ3MgJmFtcDsgTFJVX1JFRlNfTUFTSykgJmd0OyZndDsgTFJVX1JFRlNfUEdPRkYpICYjNDM7IDE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwomIzQzOwlyZXR1cm4gbHJ1X2dldF9yZWZzX2ZsYWdzKFJFQURfT05DRSgqY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKSk7CiYjNDM7fQogCi0JcmV0dXJuICgoZmxhZ3MgJmFtcDsgTFJVX0dFTl9NQVNLKSAmZ3Q7Jmd0OyBMUlVfR0VOX1BHT0ZGKSAtIDE7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgcmVmcykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCW5ld19mbGFncyA9IG9sZF9mbGFnczsKJiM0MzsJCWxydV9zZXRfcmVmc19mbGFncygmYW1wO25ld19mbGFncywgcmVmcyk7CiYjNDM7CX0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksICZhbXA7b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X2dlbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIGxydV9nZXRfZ2VuX2ZsYWdzKFJFQURfT05DRSgqY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2lzX2FjdGl2ZShjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBnZW4pCkBAIC0yNzAsNyAmIzQzOzM1MCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2FkZF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpOwogCWZsYWdzID0gKGdlbiAmIzQzOyAxVUwpICZsdDsmbHQ7IExSVV9HRU5fUEdPRkY7CiAJLyogc2VlIHRoZSBjb21tZW50IG9uIE1JTl9OUl9HRU5TIGFib3V0IFBHX2FjdGl2ZSAqLwotCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX0dFTl9NQVNLIHwgQklUKFBHX2FjdGl2ZSksIGZsYWdzKTsKJiM0MzsJc2V0X21hc2tfYml0cyhmb2xpb19mbGFncyhmb2xpbywgMCksIExSVV9HRU5fTUFTSyB8IEJJVChQR19hY3RpdmUpLCBmbGFncyk7CiAKIAlscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIC0xLCBnZW4pOwogCS8qIGZvciBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoKSAqLwpAQCAtMjk1LDcgJiM0MzszNzUsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCiAJLyogZm9yIGZvbGlvX21pZ3JhdGVfZmxhZ3MoKSAqLwogCWZsYWdzID0gIXJlY2xhaW1pbmcgJmFtcDsmYW1wOyBscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIGdlbikgPyBCSVQoUEdfYWN0aXZlKSA6IDA7Ci0JZmxhZ3MgPSBzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9HRU5fTUFTSywgZmxhZ3MpOwomIzQzOwlmbGFncyA9IHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0ssIGZsYWdzKTsKIAlnZW4gPSAoKGZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwogCiAJbHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBnZW4sIC0xKTsKQEAgLTMwNCwxMSAmIzQzOzM4NCwxOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZCkKJiM0MzsvKioKJiM0MzsgKiBmb2xpb19taWdyYXRlX2xydV9yZWZzIC0gY29weSB0aGUgcmVmZXJlbmNlIHN0YXRlIHRvIGEgbmV3IGZvbGlvCiYjNDM7ICogQG5ldzogdGhlIGRlc3RpbmF0aW9uIGZvbGlvCiYjNDM7ICogQG9sZDogdGhlIHNvdXJjZSBmb2xpbwomIzQzOyAqCiYjNDM7ICogVHJhbnNmZXIgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBAbmV3IGR1cmluZyBtaWdyYXRpb246IHRoZSBNR0xSVQomIzQzOyAqIHJlZnMgY291bnQsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkLCBvciBqdXN0IFBHX3JlZmVyZW5jZWQgZm9yIHRoZQomIzQzOyAqIGFjdGl2ZS9pbmFjdGl2ZSBMUlUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKQogewotCXVuc2lnbmVkIGxvbmcgcmVmcyA9IFJFQURfT05DRShvbGQtJmd0O2ZsYWdzLmYpICZhbXA7IExSVV9SRUZTX01BU0s7Ci0KLQlzZXRfbWFza19iaXRzKCZhbXA7bmV3LSZndDtmbGFncy5mLCBMUlVfUkVGU19NQVNLLCByZWZzKTsKJiM0MzsJQlVJTERfQlVHX09OKExSVV9SRUZTX01BU0sgJmFtcDsgQklUKFBHX3JlZmVyZW5jZWQpKTsKJiM0MzsJZm9saW9fc2V0X2xydV9yZWZzKG5ldywgZm9saW9fbHJ1X3JlZnMob2xkKSk7CiB9CiAjZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi8KIApAQCAtMzM3LDkgJiM0Mzs0MjUsMTAgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZCkKIHsKLQomIzQzOwlpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKG9sZCkpCiYjNDM7CQlmb2xpb19zZXRfcmVmZXJlbmNlZChuZXcpOwogfQogI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCmluZGV4IDg0ZTIzN2YyYzE3ZGIuLmM5YWU3OTkxYThiMjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaApAQCAtNDk1LDExICYjNDM7NDk1LDE0IEBAIGVudW0gbHJ1dmVjX2ZsYWdzIHsKICAqIGZvbGlvLSZndDtmbGFncywgbWFza2VkIGJ5IExSVV9SRUZTX01BU0suCiAgKi8KICNkZWZpbmUgTUFYX05SX1RJRVJTCQk0VQomIzQzOyNkZWZpbmUgTFJVX1RJRVJfTUlOCQkwVQomIzQzOyNkZWZpbmUgTFJVX1RJRVJfTUFYCQkoTUFYX05SX1RJRVJTIC0gMSkKIAogI2lmbmRlZiBfX0dFTkVSQVRJTkdfQk9VTkRTX0gKIAogI2RlZmluZSBMUlVfR0VOX01BU0sJCSgoQklUKExSVV9HRU5fV0lEVEgpIC0gMSkgJmx0OyZsdDsgTFJVX0dFTl9QR09GRikKICNkZWZpbmUgTFJVX1JFRlNfTUFTSwkJKChCSVQoTFJVX1JFRlNfV0lEVEgpIC0gMSkgJmx0OyZsdDsgTFJVX1JFRlNfUEdPRkYpCiYjNDM7I2RlZmluZSBMUlVfUkVGU19NQVgJCUJJVChMUlVfUkVGU19XSURUSCkKIAogLyoKICAqIEZvciBmb2xpb3MgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzLApkaWZmIC0tZ2l0IGEvbW0vZm9saW8uYyBiL21tL2ZvbGlvLmMKaW5kZXggNTBhNmRiZTU1OTk4ZS4uNDdhNDM3ZTBmN2ZkZSAxMDA2NDQKLS0tIGEvbW0vZm9saW8uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9mb2xpby5jCkBAIC0zNTQsMjYgJiM0MzszNTQsMjggQEAgc3RhdGljIHZvaWQgX19scnVfY2FjaGVfYWN0aXZhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykKIAogc3RhdGljIHZvaWQgbHJ1X2dlbl9pbmNfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewotCXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwomIzQzOwl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpOwomIzQzOwlpbnQgcmVmczsKIAogCWlmIChmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSkKIAkJcmV0dXJuOwogCiAJLyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovCi0JaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKSB7Ci0JCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTsKJiM0MzsJaWYgKCFmb2xpb19scnVfcmVmcyhmb2xpbykpIHsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7CiAJCXJldHVybjsKIAl9CiAKIAlkbyB7Ci0JCWlmICgob2xkX2ZsYWdzICZhbXA7IExSVV9SRUZTX01BU0spID09IExSVV9SRUZTX01BU0spIHsKJiM0MzsJCW5ld19mbGFncyA9IG9sZF9mbGFnczsKJiM0MzsJCXJlZnMgPSBscnVfZ2V0X3JlZnNfZmxhZ3Mob2xkX2ZsYWdzKTsKJiM0MzsJCWlmIChyZWZzID09IExSVV9SRUZTX01BWCkgewogCQkJaWYgKCFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKQogCQkJCWZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTsKIAkJCXJldHVybjsKIAkJfQotCi0JCW5ld19mbGFncyA9IG9sZF9mbGFncyAmIzQzOyBCSVQoTFJVX1JFRlNfUEdPRkYpOwotCX0gd2hpbGUgKCF0cnlfY21weGNoZygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiYjNDM7CQlscnVfc2V0X3JlZnNfZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIHJlZnMgJiM0MzsgMSk7CiYjNDM7CX0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksICZhbXA7b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTsKIH0KIAogc3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pCkBAIC0zODUsNyAmIzQzOzM4Nyw4IEBAIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCWlmIChnZW4gJmx0OyAwKQogCQlyZXR1cm4gdHJ1ZTsKIAotCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MgfCBCSVQoUEdfd29ya2luZ3NldCksIDApOwomIzQzOwlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwomIzQzOwlmb2xpb19jbGVhcl93b3JraW5nc2V0KGZvbGlvKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlzZXEgPSBSRUFEX09OQ0UoZm9saW9fbHJ1dmVjKGZvbGlvKS0mZ3Q7bHJ1Z2VuLm1pbl9zZXFbdHlwZV0pOwpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IGJkMWU3ZTE1NDQyNjUuLmYxN2IyYjJkNjEwNTUgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTE1MjksMjggJiM0MzsxNTI5LDEyIEBAIHZvaWQgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIGxydV9saXN0IGxydSwKIAkJCQlpbnQgemlkLCBsb25nIG5yX3BhZ2VzKQogewogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejsKLQl1bnNpZ25lZCBsb25nICpscnVfc2l6ZTsKLQlsb25nIHNpemU7CiAKIAlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKQogCQlyZXR1cm47CiAKIAlteiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpOwotCWxydV9zaXplID0gJmFtcDttei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6aWRdW2xydV07Ci0KLQlpZiAobnJfcGFnZXMgJmx0OyAwKQotCQkqbHJ1X3NpemUgJiM0Mzs9IG5yX3BhZ2VzOwotCi0Jc2l6ZSA9ICpscnVfc2l6ZTsKLQlpZiAoV0FSTl9PTkNFKHNpemUgJmx0OyAwLAotCQkmIzM0OyVzKCVwLCAlZCwgJWxkKTogbHJ1X3NpemUgJWxkXG4mIzM0OywKLQkJX19mdW5jX18sIGxydXZlYywgbHJ1LCBucl9wYWdlcywgc2l6ZSkpIHsKLQkJVk1fQlVHX09OKDEpOwotCQkqbHJ1X3NpemUgPSAwOwotCX0KLQotCWlmIChucl9wYWdlcyAmZ3Q7IDApCi0JCSpscnVfc2l6ZSAmIzQzOz0gbnJfcGFnZXM7CiYjNDM7CW16LSZndDtscnVfem9uZV9zaXplW3ppZF1bbHJ1XSAmIzQzOz0gbnJfcGFnZXM7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jCmluZGV4IDE1YjQ1ODMyYmNmYTcuLmEzNjlkMGM5NWMzODYgMTAwNjQ0Ci0tLSBhL21tL21pZ3JhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9taWdyYXRlLmMKQEAgLTc3Niw4ICYjNDM7Nzc2LDkgQEAgdm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJaW50IGNwdXBpZDsKIAotCWlmIChmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKQotCQlmb2xpb19zZXRfcmVmZXJlbmNlZChuZXdmb2xpbyk7CiYjNDM7CS8qIENvcHkgdGhlIHJlZmVyZW5jZSBzdGF0ZSwgaW5jbHVkaW5nIFBHX3JlZmVyZW5jZWQgKi8KJiM0MzsJZm9saW9fbWlncmF0ZV9scnVfcmVmcyhuZXdmb2xpbywgZm9saW8pOwomIzQzOwogCWlmIChmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSkKIAkJZm9saW9fbWFya191cHRvZGF0ZShuZXdmb2xpbyk7CiAJaWYgKGZvbGlvX3Rlc3RfY2xlYXJfYWN0aXZlKGZvbGlvKSkgewpAQCAtODA3LDcgJiM0Mzs4MDgsNiBAQCB2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbykKIAlpZiAoZm9saW9fdGVzdF9pZGxlKGZvbGlvKSkKIAkJZm9saW9fc2V0X2lkbGUobmV3Zm9saW8pOwogCi0JZm9saW9fbWlncmF0ZV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7CiAJLyoKIAkgKiBDb3B5IE5VTUEgaW5mb3JtYXRpb24gdG8gdGhlIG5ldyBwYWdlLCB0byBwcmV2ZW50IG92ZXItZWFnZXIKIAkgKiBmdXR1cmUgbWlncmF0aW9ucyBvZiB0aGlzIHNhbWUgcGFnZS4KZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggMjQ1ZjY4Yzc1YjI4OS4uNDBkM2YxYjQ4YTc0YyAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTg2MywxOSAmIzQzOzg2MywyMiBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpCiAJaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pICZhbXA7JmFtcDsgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpIHsKIAkJLyogQWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuICovCiAJCWlmIChpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIHZtYV9mbGFncykpIHsKLQkJCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7CiYjNDM7CQkJZm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pOwomIzQzOwkJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJfQogCi0JCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKIAkvKiBQcm9tb3RlIG9uIHNlY29uZCBhY2Nlc3MgKi8KLQlpZiAoZm9saW9fbHJ1X3JlZnMoZm9saW8pICZndDsgMSkKLQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTsKLQllbHNlCiYjNDM7CWlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgJmd0OyAxKSB7CiYjNDM7CQlmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7CiYjNDM7CQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwomIzQzOwl9IGVsc2UgewogCQlmb2xpb19tYXJrX2FjY2Vzc2VkKGZvbGlvKTsKJiM0MzsJfQogCXJldHVybiB0cnVlOwogfQogI2Vsc2UKQEAgLTMyMjAsOCAmIzQzOzMyMjMsOCBAQCBzdHJ1Y3QgY3RybF9wb3MgewogCWludCBnYWluOwogfTsKIAotc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllciwgaW50IGdhaW4sCi0JCQkgIHN0cnVjdCBjdHJsX3BvcyAqcG9zKQomIzQzO3N0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXJfbWluLAomIzQzOwkJCSAgaW50IHRpZXJfbWF4LCBpbnQgZ2Fpbiwgc3RydWN0IGN0cmxfcG9zICpwb3MpCiB7CiAJaW50IGk7CiAJc3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9ICZhbXA7bHJ1dmVjLSZndDtscnVnZW47CkBAIC0zMjMwLDcgJiM0MzszMjMzLDcgQEAgc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllciwgaW50IGdhaW4sCiAJcG9zLSZndDtnYWluID0gZ2FpbjsKIAlwb3MtJmd0O3JlZmF1bHRlZCA9IHBvcy0mZ3Q7dG90YWwgPSAwOwogCi0JZm9yIChpID0gdGllciAlIE1BWF9OUl9USUVSUzsgaSAmbHQ7PSBtaW4odGllciwgTUFYX05SX1RJRVJTIC0gMSk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CWZvciAoaSA9IHRpZXJfbWluOyBpICZsdDs9IHRpZXJfbWF4OyBpJiM0MzsmIzQzOykgewogCQlwb3MtJmd0O3JlZmF1bHRlZCAmIzQzOz0gbHJ1Z2VuLSZndDthdmdfcmVmYXVsdGVkW3R5cGVdW2ldICYjNDM7CiAJCQkJICBhdG9taWNfbG9uZ19yZWFkKCZhbXA7bHJ1Z2VuLSZndDtyZWZhdWx0ZWRbaGlzdF1bdHlwZV1baV0pOwogCQlwb3MtJmd0O3RvdGFsICYjNDM7PSBscnVnZW4tJmd0O2F2Z190b3RhbFt0eXBlXVtpXSAmIzQzOwpAQCAtMzI5MSwxMSAmIzQzOzMyOTQsMTEgQEAgc3RhdGljIGJvb2wgcG9zaXRpdmVfY3RybF9lcnIoc3RydWN0IGN0cmxfcG9zICpzcCwgc3RydWN0IGN0cmxfcG9zICpwdikKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qIHByb21vdGUgcGFnZXMgYWNjZXNzZWQgdGhyb3VnaCBwYWdlIHRhYmxlcyAqLwotc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpCiYjNDM7c3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBpbnQgKnR5cGUsCiYjNDM7CQkJICAgIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpCiB7Ci0JdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby0mZ3Q7ZmxhZ3MuZik7Ci0KLQlWTV9XQVJOX09OX09OQ0UoZ2VuICZndDs9IE1BWF9OUl9HRU5TKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTsKJiM0MzsJaW50IG9sZF9nZW47CiAKIAkvKgogCSAqIFNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUywgYW5kIGFjdGl2YXRlIGZpbGUtYmFja2VkCkBAIC0zMzA0LDMxICYjNDM7MzMwNywzNSBAQCBzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYQogCSAqLwogCWlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSAmYW1wOyZhbXA7ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pICZhbXA7JmFtcDsKIAkgICAgIWlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkgewotCQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7CiYjNDM7CQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJZG8gewomIzQzOwkJb2xkX2dlbiA9IGxydV9nZXRfZ2VuX2ZsYWdzKG9sZF9mbGFncyk7CiYjNDM7CQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7CiYjNDM7CiAJCS8qIGxydV9nZW5fZGVsX2ZvbGlvKCkgaGFzIGlzb2xhdGVkIHRoaXMgcGFnZT8gKi8KLQkJaWYgKCEob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykpCi0JCQlyZXR1cm4gLTE7CiYjNDM7CQlpZiAob2xkX2dlbiAmbHQ7IDApCiYjNDM7CQkJYnJlYWs7CiAKLQkJbmV3X2ZsYWdzID0gb2xkX2ZsYWdzICZhbXA7IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpOwotCQluZXdfZmxhZ3MgfD0gKChnZW4gJiM0MzsgMVVMKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGKSB8IEJJVChQR193b3JraW5nc2V0KTsKLQl9IHdoaWxlICghdHJ5X2NtcHhjaGcoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwomIzQzOwkJbHJ1X3NldF9nZW5fZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIG5ld19nZW4pOwomIzQzOwkJbHJ1X3NldF9yZWZzX2ZsYWdzKCZhbXA7bmV3X2ZsYWdzLCAwKTsKJiM0MzsJCW5ld19mbGFncyB8PSBCSVQoUEdfd29ya2luZ3NldCk7CiYjNDM7CX0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksICZhbXA7b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTsKIAotCXJldHVybiAoKG9sZF9mbGFncyAmYW1wOyBMUlVfR0VOX01BU0spICZndDsmZ3Q7IExSVV9HRU5fUEdPRkYpIC0gMTsKJiM0MzsJKnR5cGUgPSBmb2xpb19mbGFnc19pc19maWxlX2xydSgmYW1wO29sZF9mbGFncyk7CiYjNDM7CXJldHVybiBvbGRfZ2VuOwogfQogCiBzdGF0aWMgaW50IF9fZm9saW9faW5jX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX2dlbiwgYm9vbCAqaW5jcmVhc2VkKQogewotCXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwomIzQzOwl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpOwogCWludCBuZXdfZ2VuOwogCi0JVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCEob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSyksIGZvbGlvKTsKLQogCWRvIHsKLQkJbmV3X2dlbiA9ICgob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwomIzQzOwkJbmV3X2dlbiA9IGxydV9nZXRfZ2VuX2ZsYWdzKG9sZF9mbGFncyk7CiYjNDM7CiAJCS8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqLwogCQlpZiAobmV3X2dlbiAmZ3Q7PSAwICZhbXA7JmFtcDsgbmV3X2dlbiAhPSBvbGRfZ2VuKSB7CiAJCQlpZiAoaW5jcmVhc2VkKQpAQCAtMzMzNiwxMSAmIzQzOzMzNDMsMTIgQEAgc3RhdGljIGludCBfX2ZvbGlvX2luY19nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9nZW4sIGJvb2wgKmluY3JlYXNlZCkKIAkJCXJldHVybiBuZXdfZ2VuOwogCQl9CiAKJiM0MzsJCW5ld19mbGFncyA9IG9sZF9mbGFnczsKIAkJbmV3X2dlbiA9IChvbGRfZ2VuICYjNDM7IDEpICUgTUFYX05SX0dFTlM7CiAKLQkJbmV3X2ZsYWdzID0gb2xkX2ZsYWdzICZhbXA7IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpOwotCQluZXdfZmxhZ3MgfD0gKG5ld19nZW4gJiM0MzsgMVVMKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGOwotCX0gd2hpbGUgKCF0cnlfY21weGNoZygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiYjNDM7CQlscnVfc2V0X2dlbl9mbGFncygmYW1wO25ld19mbGFncywgbmV3X2dlbik7CiYjNDM7CQlscnVfc2V0X3JlZnNfZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIDApOwomIzQzOwl9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiAKIAlpZiAoaW5jcmVhc2VkKQogCQkqaW5jcmVhc2VkID0gdHJ1ZTsKQEAgLTMzNjIsOSAmIzQzOzMzNzAsOCBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogfQogCiBzdGF0aWMgdm9pZCB1cGRhdGVfYmF0Y2hfc2l6ZShzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAotCQkJICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuKQomIzQzOwkJCSAgICAgIGludCBvbGRfZ2VuLCBpbnQgbmV3X2dlbiwgaW50IHR5cGUpCiB7Ci0JaW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7CiAJaW50IHpvbmUgPSBmb2xpb196b25lbnVtKGZvbGlvKTsKIAlpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiAKQEAgLTM1NTEsMjIgJiM0MzszNTU4LDI0IEBAIHN0YXRpYyBib29sIHN1aXRhYmxlX3RvX3NjYW4oaW50IHRvdGFsLCBpbnQgeW91bmcpCiB9CiAKIHN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQlzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgYm9vbCBkaXJ0eSkKJiM0MzsJCXN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBkaXJ0eSkKIHsKLQlpbnQgb2xkX2dlbjsKJiM0MzsJaW50IG5ld19nZW4sIG9sZF9nZW4sIHR5cGU7CiAKIAlpZiAoIWZvbGlvKQogCQlyZXR1cm47CiAKJiM0MzsJbmV3X2dlbiA9IGxydV9nZW5fZnJvbV9zZXEoUkVBRF9PTkNFKGxydXZlYy0mZ3Q7bHJ1Z2VuLm1heF9zZXEpKTsKJiM0MzsKIAlpZiAoZGlydHkgJmFtcDsmYW1wOyAhZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgJmFtcDsmYW1wOwogCSAgICAhKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgJmFtcDsmYW1wOyBmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pICZhbXA7JmFtcDsKIAkgICAgICAhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSkKIAkJZm9saW9fbWFya19kaXJ0eShmb2xpbyk7CiAKIAlpZiAod2FsaykgewotCQlvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgJmFtcDt2bWEtJmd0O2ZsYWdzKTsKJiM0MzsJCW9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuLCAmYW1wO3R5cGUsICZhbXA7dm1hLSZndDtmbGFncyk7CiAJCWlmIChvbGRfZ2VuICZndDs9IDAgJmFtcDsmYW1wOyBvbGRfZ2VuICE9IG5ld19nZW4pCi0JCQl1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7CiYjNDM7CQkJdXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4sIHR5cGUpOwogCX0gZWxzZSBpZiAobHJ1X2dlbl9zZXRfcmVmcyhmb2xpbywgJmFtcDt2bWEtJmd0O2ZsYWdzKSkgewogCQlvbGRfZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7CiAJCWlmIChvbGRfZ2VuICZndDs9IDAgJmFtcDsmYW1wOyBvbGRfZ2VuICE9IG5ld19nZW4pCkBAIC0zNTg4LDggJiM0MzszNTk3LDYgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtJmd0O3ByaXZhdGU7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKHdhbGstJmd0O2xydXZlYyk7CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdCh3YWxrLSZndDtscnV2ZWMpOwotCURFRklORV9NQVhfU0VRKHdhbGstJmd0O2xydXZlYyk7Ci0JaW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7CiAJdW5zaWduZWQgaW50IG5yOwogCXBtZF90IHBtZHZhbDsKIApAQCAtMzY0MCw3ICYjNDM7MzY0Nyw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJY29udGludWU7CiAKIAkJaWYgKGxhc3QgIT0gZm9saW8pIHsKLQkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtJmd0O3ZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CQkJd2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy0mZ3Q7dm1hLCB3YWxrLSZndDtscnV2ZWMsIGxhc3QsIGRpcnR5KTsKIAogCQkJbGFzdCA9IGZvbGlvOwogCQkJZGlydHkgPSBmYWxzZTsKQEAgLTM2NTMsNyAmIzQzOzM2NjAsNyBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJd2Fsay0mZ3Q7bW1fc3RhdHNbTU1fTEVBRl9ZT1VOR10gJiM0Mzs9IG5yOwogCX0KIAotCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtJmd0O3ZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtJmd0O3ZtYSwgd2Fsay0mZ3Q7bHJ1dmVjLCBsYXN0LCBkaXJ0eSk7CiAJbGFzdCA9IE5VTEw7CiAKIAlpZiAoaSAmbHQ7IFBUUlNfUEVSX1BURSAmYW1wOyZhbXA7IGdldF9uZXh0X3ZtYShQTURfTUFTSywgUEFHRV9TSVpFLCBhcmdzLCAmYW1wO3N0YXJ0LCAmYW1wO2VuZCkpCkBAIC0zNjc2LDggJiM0MzszNjgzLDYgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWEKIAlzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy0mZ3Q7cHJpdmF0ZTsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay0mZ3Q7bHJ1dmVjKTsKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstJmd0O2xydXZlYyk7Ci0JREVGSU5FX01BWF9TRVEod2Fsay0mZ3Q7bHJ1dmVjKTsKLQlpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTsKIAogCVZNX1dBUk5fT05fT05DRShwdWRfbGVhZigqcHVkKSk7CiAKQEAgLTM3MzEsNyAmIzQzOzM3MzYsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYQogCQkJZ290byBuZXh0OwogCiAJCWlmIChsYXN0ICE9IGZvbGlvKSB7Ci0JCQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay0mZ3Q7bHJ1dmVjLCBsYXN0LCBkaXJ0eSk7CiAKIAkJCWxhc3QgPSBmb2xpbzsKIAkJCWRpcnR5ID0gZmFsc2U7CkBAIC0zNzQ1LDcgJiM0MzszNzUwLDcgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWEKIAkJaSA9IGkgJmd0OyBNSU5fTFJVX0JBVENIID8gMCA6IGZpbmRfbmV4dF9iaXQoYml0bWFwLCBNSU5fTFJVX0JBVENILCBpKSAmIzQzOyAxOwogCX0gd2hpbGUgKGkgJmx0Oz0gTUlOX0xSVV9CQVRDSCk7CiAKLQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIHdhbGstJmd0O2xydXZlYywgbGFzdCwgZGlydHkpOwogCiAJbGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7CiAJc3Bpbl91bmxvY2socHRsKTsKQEAgLTQzNTEsOCAmIzQzOzQzNTYsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpCiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGZvbGlvX3BnZGF0KGZvbGlvKTsKIAlzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7CiAJc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlOwotCXVuc2lnbmVkIGxvbmcgbWF4X3NlcTsKLQlpbnQgZ2VuOwogCiAJbG9ja2RlcF9hc3NlcnRfaGVsZChwdm13LSZndDtwdGwpOwogCVZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2xydShmb2xpbyksIGZvbGlvKTsKQEAgLTQzODksOCAmIzQzOzQzOTIsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpCiAKIAltZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pOwogCWxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7Ci0JbWF4X3NlcSA9IFJFQURfT05DRSgobHJ1dmVjKS0mZ3Q7bHJ1Z2VuLm1heF9zZXEpOwotCWdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7CiAJbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTsKIAogCWxhenlfbW11X21vZGVfZW5hYmxlKCk7CkBAIC00NDIyLDcgJiM0Mzs0NDIzLDcgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKQogCQkJY29udGludWU7CiAKIAkJaWYgKGxhc3QgIT0gZm9saW8pIHsKLQkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CQkJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTsKIAogCQkJbGFzdCA9IGZvbGlvOwogCQkJZGlydHkgPSBmYWxzZTsKQEAgLTQ0MzQsMTMgJiM0Mzs0NDM1LDE0IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucikKIAkJeW91bmcgJiM0Mzs9IG5yOwogCX0KIAotCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7CiAKIAlsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTsKIAogCS8qIGZlZWRiYWNrIGZyb20gcm1hcCB3YWxrZXJzIHRvIHBhZ2UgdGFibGUgd2Fsa2VycyAqLwogCWlmIChtbV9zdGF0ZSAmYW1wOyZhbXA7IHN1aXRhYmxlX3RvX3NjYW4oaSwgeW91bmcpKQotCQl1cGRhdGVfYmxvb21fZmlsdGVyKG1tX3N0YXRlLCBtYXhfc2VxLCBwdm13LSZndDtwbWQpOwomIzQzOwkJdXBkYXRlX2Jsb29tX2ZpbHRlcihtbV9zdGF0ZSwgUkVBRF9PTkNFKGxydXZlYy0mZ3Q7bHJ1Z2VuLm1heF9zZXEpLAomIzQzOwkJCQkgICAgcHZtdy0mZ3Q7cG1kKTsKIAogCW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKIApAQCAtNDc4NSw3ICYjNDM7NDc4Nyw3IEBAIHN0YXRpYyBib29sIGlzb2xhdGVfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2NhCiAKIAkvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi8KIAlpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpCi0JCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgMCk7CiYjNDM7CQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwogCiAJc3VjY2VzcyA9IGxydV9nZW5fZGVsX2ZvbGlvKGxydXZlYywgZm9saW8sIHRydWUpOwogCVZNX1dBUk5fT05fT05DRV9GT0xJTyghc3VjY2VzcywgZm9saW8pOwpAQCAtNDg3OCw5ICYjNDM7NDg4MCw5IEBAIHN0YXRpYyBpbnQgZ2V0X3RpZXJfaWR4KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUpCiAJICogVGhpcyB2YWx1ZSBpcyBjaG9zZW4gYmVjYXVzZSBhbnkgb3RoZXIgdGllciB3b3VsZCBoYXZlIGF0IGxlYXN0IHR3aWNlCiAJICogYXMgbWFueSByZWZhdWx0cyBhcyB0aGUgZmlyc3QgdGllci4KIAkgKi8KLQlyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgMCwgMiwgJmFtcDtzcCk7Ci0JZm9yICh0aWVyID0gMTsgdGllciAmbHQ7IE1BWF9OUl9USUVSUzsgdGllciYjNDM7JiM0MzspIHsKLQkJcmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIDMsICZhbXA7cHYpOwomIzQzOwlyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NSU4sIDIsICZhbXA7c3ApOwomIzQzOwlmb3IgKHRpZXIgPSBMUlVfVElFUl9NSU4gJiM0MzsgMTsgdGllciAmbHQ7PSBMUlVfVElFUl9NQVg7IHRpZXImIzQzOyYjNDM7KSB7CiYjNDM7CQlyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdGllciwgdGllciwgMywgJmFtcDtwdik7CiAJCWlmICghcG9zaXRpdmVfY3RybF9lcnIoJmFtcDtzcCwgJmFtcDtwdikpCiAJCQlicmVhazsKIAl9CkBAIC00OTAxLDggJiM0Mzs0OTAzLDEwIEBAIHN0YXRpYyBpbnQgZ2V0X3R5cGVfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKQogCSAqIENvbXBhcmUgdGhlIHN1bSBvZiBhbGwgdGllcnMgb2YgYW5vbiB3aXRoIHRoYXQgb2YgZmlsZSB0byBkZXRlcm1pbmUKIAkgKiB3aGljaCB0eXBlIHRvIHNjYW4uCiAJICovCi0JcmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fQU5PTiwgTUFYX05SX1RJRVJTLCBzd2FwcGluZXNzLCAmYW1wO3NwKTsKLQlyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBNQVhfTlJfVElFUlMsIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgJmFtcDtwdik7CiYjNDM7CXJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUFYLAomIzQzOwkJICAgICAgc3dhcHBpbmVzcywgJmFtcDtzcCk7CiYjNDM7CXJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUFYLAomIzQzOwkJICAgICAgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCAmYW1wO3B2KTsKIAogCXJldHVybiBwb3NpdGl2ZV9jdHJsX2VycigmYW1wO3NwLCAmYW1wO3B2KTsKIH0KQEAgLTUwMTcsOCAmIzQzOzUwMjEsMTAgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCX0KIAogCQkvKiBkb24mIzM5O3QgYWRkIHJlamVjdGVkIGZvbGlvcyB0byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gKi8KLQkJaWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKQotCQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX2FjdGl2ZSkpOwomIzQzOwkJaWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKSB7CiYjNDM7CQkJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTsKJiM0MzsJCQlmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTsKJiM0MzsJCX0KIAl9CiAKIAltb3ZlX2ZvbGlvc190b19scnUoJmFtcDtsaXN0KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzNzQKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA2MDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBJbXBhY3QqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGRlZXAgaW50byB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbW0vYCBkaXJlY3Rvcnkg4oCTIHRoYXQmIzM5O3MgYSBrZXkgYXJlYS4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyB0b3VjaGluZyBjcml0aWNhbCBmaWxlczogYG1lbWNvbnRyb2wuaGAsIGBtbV9pbmxpbmUuaGAsIGBtbXpvbmUuaGAsIGBmb2xpby5jYCwgYG1lbWNvbnRyb2wuY2AsIGBtaWdyYXRlLmNgLCBhbmQgYHZtc2Nhbi5jYC4gIEEgY29tcHJlaGVuc2l2ZSBvdmVydmlldyBpcyBkZWZpbml0ZWx5IHJlcXVpcmVkLgoKRmlyc3QsIGl0IHNlZW1zIHRoZXJlJiMzOTtzIGEgdHlwZSBjaGFuZ2UgZm9yIGBscnVfem9uZV9zaXplYCBmcm9tIGB1bnNpZ25lZCBsb25nYCB0byBgbG9uZ2AsIGFuZCB0aGVyZSBhcmUgY2hlY2tzIG5vdyBmb3IgbmVnYXRpdmUgdmFsdWVzLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nIOKAkyBwb3RlbnRpYWwgc2lnbmVkbmVzcyBidWdzLCBvciBtYXliZSBhZGRyZXNzaW5nIGEgc3VidGxlIG92ZXJmbG93IGlzc3VlIGluIHRoZSBtZW1jZyBMUlUgYWNjb3VudGluZy4gQWx3YXlzIHdvcnRoIHNjcnV0aW5pemluZyB0aG9zZSBjaGFuZ2VzIQoKVGhlIHNlY29uZCwgYW5kIHBvdGVudGlhbGx5IG1vcmUgc2lnbmlmaWNhbnQsIHBhcnQgaW52b2x2ZXMgYSBtYWpvciByZWZhY3RvcmluZyBhbmQgYnVnIGZpeGluZyByZWxhdGVkIHRvIE11bHRpLUdlbiBMUlUgKE1HTFJVKS4gSSBzZWUgYSBzd2FybSBvZiBmdW5jdGlvbiBuYW1lczogYGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1YCwgYGxydV9zZXRfZ2VuX2ZsYWdzYCwgYGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnNgLCBhbmQgbWFueSBvdGhlcnMgdGhhdCBhcmUgcmVsYXRlZCB0byBtYW5pcHVsYXRpbmcgdGhlIExSVSBmbGFncyBhbmQgZ2VuZXJhdGlvbnMuIFRoYXQmIzM5O3MgYSBnb29kIGFtb3VudCBvZiB3b3JrIGJlaW5nIGRvbmUgb24gZnVuZGFtZW50YWwgTFJVIGxvZ2ljLiBUaGV5JiMzOTtyZSBjaGFuZ2luZyB0aGUgd2F5IHJlZmVyZW5jZSBjb3VudHMgYW5kIGdlbmVyYXRpb24gY291bnRzIGFyZSBoYW5kbGVkLiBUaGlzIHRvdWNoZXMgb24gcGFnZSBpc29sYXRpb24sIHRpZXJpbmcsIGFuZCBldmljdGlvbi4gVGhhdCYjMzk7cyBhbGwgY29yZSBzdHVmZi4gVGhlIG1pZ3JhdGUgY29kZSYjMzk7cyBgZm9saW9fbWlncmF0ZV9mbGFnc2AgbWFrZXMgc2Vuc2UsIGFzIHdlbGwuCgpHaXZlbiB0aGF0IHRoaXMgbW9kaWZpZXMgZmlsZXMgaW4gYG1tL2AsIGl0JiMzOTtzIGRpcmVjdGx5IGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhpcyBpcyBhIGhpZ2hseSByZWFjaGFibGUgYXJlYSwgYW5kIHN5emthbGxlciBwcm9iYWJseSBoaXRzIHRoaXMgYWxsIHRoZSB0aW1lLiBTbywgaWYgd2UgbG9vayBhdCB0aGUgcG9zaXRpdmUgY3JpdGVyaWEsIHRoaXMgcGF0Y2ggZGVmaW5pdGVseSBmaXRzIHRoZSBiaWxsLiBJdCYjMzk7cyBtb2RpZnlpbmcgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgKG1tLyksIGFuZCBpdCYjMzk7cyByZWZhY3RvcmluZyByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzIChMUlUgZmxhZ3MsIGV0Yy4pLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBXQVJOX09OX09OQ0VgIGluZGljYXRlcyBydW50aW1lIGFzc2VydGlvbnMg4oCTIGEgYmlnIGNoZWNrISBUaGlzIGlzIGRlZmluaXRlbHkgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyEKCk5vdywgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIEtjb25maWcgZGVwZW5kZW5jaWVzIHRvIHNlZSB3aGljaCBmZWF0dXJlcyBhcmUgbmVlZGVkIHRvIGVuYWJsZSB0aGlzIGFuZCB1c2UgYGdyZXBwZXJgIHRvIHNlYXJjaCBmb3IgTFJVX0dFTiwgTUVNQ0csIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBGb2N1c1N5bWJvbHMgcmVsYXRlZCB0byB0aGUgc3BlY2lmaWMgY2hhbmdlcy4gVGhhdCB3aWxsIHRlbGwgbWUgd2hpY2ggZmVhdHVyZXMgYXJlIGltcGFjdGVkLCBhbmQgd2hlcmUgdG8gZm9jdXMgdGhlIGZ1enppbmcgZWZmb3J0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBMUlVfR0VOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTM4OD1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXG4tLVxubW0vS2NvbmZpZy0xMzk4LSMgbXVsdGktZ2VuIExSVSB7XG5tbS9LY29uZmlnOjEzOTk6Y29uZmlnIExSVV9HRU5cbm1tL0tjb25maWctMTQwMC1cdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQwNy1cbm1tL0tjb25maWc6MTQwODpjb25maWcgTFJVX0dFTl9FTkFCTEVEXG5tbS9LY29uZmlnLTE0MDktXHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDEzLVxubW0vS2NvbmZpZzoxNDE0OmNvbmZpZyBMUlVfR0VOX1NUQVRTXG5tbS9LY29uZmlnLTE0MTUtXHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTQyMi1cbm1tL0tjb25maWc6MTQyMzpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcbm1tL0tjb25maWctMTQyNC1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc1MQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBgTUVNQ0dgIGFuZCBNZW1vcnkgQ29udHJvbCoqCgpSaWdodCwgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIHRvIGBNRU1DR2Ag4oCTIG1lbW9yeSBjb250cm9sIGdyb3Vwcy4gQWx3YXlzIGEgZ29vZCBwbGFjZSB0byBzdGFydCB3aGVuIGRpZ2dpbmcgaW50byBtZW1vcnkgYmVoYXZpb3IuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBjb3ZlcmluZyBhbGwgdGhlIGFuZ2xlcy4gTXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIG9uIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uLiBJIHNob3VsZCBjaGVjayBgbWVtY29udHJvbC5jYCBmb3IgdGhlIGZ1bmRhbWVudGFsIGZyYW1ld29yay4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgc3lzdGVtIHRyYWNrcyBhbmQgZW5mb3JjZXMgbWVtb3J5IGxpbWl0cyB3aXRoaW4gdGhlc2UgY29udHJvbCBncm91cHMuCgpUaGF0IGFsc28gYnJpbmdzIGBscnVfem9uZV9zaXplYCBpbnRvIHRoZSBwaWN0dXJlLiBOZWVkIHRvIGNvcnJlbGF0ZSB0aGF0IHdpdGggaG93IHRoZSBrZXJuZWwgbWFuYWdlcyBwYWdlcyB3aXRoaW4gem9uZXMgYW5kIGhvdyBgTUVNQ0dgIGludGVyYWN0cyB3aXRoIHRob3NlIHpvbmUtbGV2ZWwgY2FsY3VsYXRpb25zLiBUaGUgTFJVIGlzIGNyaXRpY2FsIGluIGRldGVybWluaW5nIHdoYXQgZ2V0cyBzd2FwcGVkIG91dCwgYW5kIHdoYXQgcGFnZXMgYXJlIGNvbnNpZGVyZWQgJiMzNDtpbi11c2UmIzM0OyB2ZXJzdXMgcmVjbGFpbWFibGUuIEkgc2hvdWxkIGJlIGFibGUgdG8gdHJhY2UgaG93IGxpbWl0cyBhZmZlY3QgdGhlIExSVSBkZWNpc2lvbnMuIExldCYjMzk7cyBzZWUgaG93IG1lbW9yeSBwcmVzc3VyZSBpbXBhY3RzIHRoZSB6b25lcyBhbmQgdGhlIExSVSBjYWxjdWxhdGlvbnMgd2l0aGluIHRoZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTUNHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNzU9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4tLVxuaW5pdC9LY29uZmlnLTEwODQtXG5pbml0L0tjb25maWc6MTA4NTpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy0xMDg2LVx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMDkzLVxuaW5pdC9LY29uZmlnOjEwOTQ6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbmluaXQvS2NvbmZpZy0xMDk1LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMTAwLVxuaW5pdC9LY29uZmlnOjExMDE6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbml0L0tjb25maWctMTEwMi1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTEwNy1cbmluaXQvS2NvbmZpZzoxMTA4OmNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTExMDktXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDI0OQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUmVjZW50IENoYW5nZXMgaW4gTWVtb3J5IE1hbmFnZW1lbnQgQ29kZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZXNlIHJlY2VudCBtb2RpZmljYXRpb25zLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGJlZW4gdG91Y2hlZCBpbiB0aGUgYG1tL2AgZGlyZWN0b3J5LiBTY2FubmluZyBgbW0vbWVtY29udHJvbC5jYCwgSSBzZWUgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCBhbmQgYG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemVgIOKAkyB0aGUgbGF0dGVyJiMzOTtzIGlubGluZSwgc28gdGhhdCYjMzk7cyBhIHF1aWNrIG5vdGUgdG8gbXlzZWxmLiBUaGVuLCBvdmVyIGluIGBtbS9mb2xpby5jYCwgSSBzZWUgYSBjb3VwbGUgb2YgZnVuY3Rpb25zIGZsYWdnZWQgYXMgYHN0YXRpY2A6IGBscnVfZ2VuX2luY19yZWZzYCBhbmQgYGxydV9nZW5fY2xlYXJfcmVmc2AuIFNpbmNlIHRoZXkmIzM5O3JlIGBzdGF0aWNgLCBJIHNob3VsZCBjaGVjayB3aXRoaW4gYGZvbGlvLmNgIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhleSBhcmUgdXNlZC4KCk1vdmluZyBvbiwgYG1tL21pZ3JhdGUuY2AgaGFzIGBmb2xpb19taWdyYXRlX2ZsYWdzYCwgd2hpY2ggd2FycmFudHMgYSBjbG9zZXIgbG9vayBsYXRlci4gQW5kIHRoZSBiaWcgb25lLCBgbW0vdm1zY2FuLmNgLCBoYXMgYSB3aG9sZSBzbGV3IG9mIGNoYW5nZXMuIEkgbm90ZSBgbHJ1X2dlbl9zZXRfcmVmc2AsIGByZWFkX2N0cmxfcG9zYCwgYGZvbGlvX3VwZGF0ZV9nZW5gLCBgX19mb2xpb19pbmNfZ2VuYCwgYGZvbGlvX2luY19nZW5gLCBgdXBkYXRlX2JhdGNoX3NpemVgLCBgd2Fsa191cGRhdGVfZm9saW9gLCBgd2Fsa19wdGVfcmFuZ2VgLCBgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkYCwgYGxydV9nZW5fbG9va19hcm91bmRgLCBgaXNvbGF0ZV9mb2xpb2AsIGBnZXRfdGllcl9pZHhgLCBgZ2V0X3R5cGVfdG9fc2NhbmAsIGFuZCBgZXZpY3RfZm9saW9zYC4gVGhhdCYjMzk7cyBhIGxvdCB0byBwYXJzZSwgYnV0IGl0IHNlZW1zIFZNIHNjYW5uaW5nIGhhcyBiZWVuIHNpZ25pZmljYW50bHkgaW1wYWN0ZWQuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCB0aGUgc2NvcGUgb2YgdGhlc2UgY2hhbmdlcywgZm9jdXNpbmcgZXNwZWNpYWxseSBvbiB0aGUgZnVuY3Rpb25zIGluIGBtbS9mb2xpby5jYCBsaWtlIGBscnVfZ2VuX2luY19yZWZzYCBhbmQgYGxydV9nZW5fY2xlYXJfcmVmc2AuIEFyZSB0aGV5IGludGVybmFsIHRvIGBmb2xpby5jYCwgb3IgYXJlIHRoZXkgcGFydCBvZiBhIGxhcmdlciBpbnRlcmZhY2U/IEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIGNhbGxlcnMgb2YgdGhvc2UsIG9yIG90aGVyIGZ1bmN0aW9ucyBpbiBgbW0vZm9saW8uY2AsIHRvIHNlZSB3aGF0IHRoZSB0YXJnZXRzIGFyZSwgYW5kIGRldGVybWluZSB3aGF0IHRoZSByaWdodCBjb2RlIHRvIHRhcmdldCBmb3IgbXkgcHVycG9zZXMgaXMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgaW1wYWN0IGFuZCB3aGVyZSB0byBkaWcgZGVlcGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5fKGluY3xjbGVhcilfcmVmcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9mb2xpby5jPTMyMz1zdGF0aWMgdm9pZCBfX2xydV9jYWNoZV9hY3RpdmF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2ZvbGlvLmMtMzU0LVxubW0vZm9saW8uYzozNTU6c3RhdGljIHZvaWQgbHJ1X2dlbl9pbmNfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vZm9saW8uYy0zNTYte1xuLS1cbm1tL2ZvbGlvLmMtMzgwLVxubW0vZm9saW8uYzozODE6c3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9mb2xpby5jLTM4Mi17XG4tLVxubW0vZm9saW8uYy00MDEtXG5tbS9mb2xpby5jOjQwMjpzdGF0aWMgdm9pZCBscnVfZ2VuX2luY19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9mb2xpby5jLTQwMy17XG4tLVxubW0vZm9saW8uYy00MDUtXG5tbS9mb2xpby5jOjQwNjpzdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL2ZvbGlvLmMtNDA3LXtcbi0tXG5tbS9mb2xpby5jPTQyNj12b2lkIGZvbGlvX21hcmtfYWNjZXNzZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9mb2xpby5jLTQzMC1cdGlmIChscnVfZ2VuX2VuYWJsZWQoKSkge1xubW0vZm9saW8uYzo0MzE6XHRcdGxydV9nZW5faW5jX3JlZnMoZm9saW8pO1xubW0vZm9saW8uYy00MzItXHRcdHJldHVybjtcbi0tXG5tbS9mb2xpby5jPTU5Mj1zdGF0aWMgdm9pZCBscnVfbGF6eWZyZWUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2ZvbGlvLmMtNjAyLVx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKVxubW0vZm9saW8uYzo2MDM6XHRcdGxydV9nZW5fY2xlYXJfcmVmcyhmb2xpbyk7XG5tbS9mb2xpby5jLTYwNC1cdGVsc2Vcbi0tXG5tbS9mb2xpby5jPTY3MD12b2lkIGRlYWN0aXZhdGVfZmlsZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2ZvbGlvLmMtNjc1LVxubW0vZm9saW8uYzo2NzY6XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXHUwMDI2XHUwMDI2IGxydV9nZW5fY2xlYXJfcmVmcyhmb2xpbykpXG5tbS9mb2xpby5jLTY3Ny1cdFx0cmV0dXJuO1xuLS1cbm1tL2ZvbGlvLmM9NjkwPXZvaWQgZm9saW9fZGVhY3RpdmF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2ZvbGlvLmMtNjk0LVxubW0vZm9saW8uYzo2OTU6XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgPyBscnVfZ2VuX2NsZWFyX3JlZnMoZm9saW8pIDogIWZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSlcbm1tL2ZvbGlvLmMtNjk2LVx0XHRyZXR1cm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2ODYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBFeGFtaW5hdGlvbiBvZiB0aGUgUmVsZXZhbnQgQ29kZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGlzIG1lbW9yeSBtYW5hZ2VtZW50IGZsb3cuIE15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiB0aGUgZm9sbG93aW5nOiBgaXNvbGF0ZV9mb2xpb2AsIGBldmljdF9mb2xpb3NgLCBgd2Fsa19wdGVfcmFuZ2VgLCBgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkYCwgYGxydV9nZW5fbG9va19hcm91bmRgLCBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgLCBgZm9saW9fbWlncmF0ZV9mbGFnc2AsIGBscnVfZ2VuX2luY19yZWZzYCwgYGxydV9nZW5fY2xlYXJfcmVmc2AsIGBnZXRfdGllcl9pZHhgLCBgZ2V0X3R5cGVfdG9fc2NhbmAsIGByZWFkX2N0cmxfcG9zYCwgYGZvbGlvX3VwZGF0ZV9nZW5gLCBhbmQgYF9fZm9saW9faW5jX2dlbmAuIFRoZXNlIHNlZW0gbGlrZSB0aGUgY29yZSBjb21wb25lbnRzLgoKTm93LCBJIHdhbnQgdG8gcXVpY2tseSBpZGVudGlmeSBwb3RlbnRpYWwgYXJlYXMgZm9yIGRlZXBlciBpbnZlc3RpZ2F0aW9uLCBwZXJoYXBzIGxvb2tpbmcgYXQgd2hldGhlciB0aG9zZSBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkIGFzIGBzdGF0aWNgIG9yLCBpZiBub3QsIHdoaWNoIG9mIHRoZW0gaGF2ZSBnb29kIHBvdGVudGlhbCBhcyBgRm9jdXNTeW1ib2xzYCB0aGF0IG1pZ2h0IG1ha2Ugc2Vuc2UgdG8gdHJhY2UuIEluIHBhcnRpY3VsYXIsIEnigJltIGludGVyZXN0ZWQgaW4gd2hldGhlciBgaXNvbGF0ZV9mb2xpb2AsIGBldmljdF9mb2xpb3NgLCBgZm9saW9fbWlncmF0ZV9mbGFnc2AsIG9yIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgYXJlIG5vbi1zdGF0aWMgYW5kLCBpZiBzbywgd2hhdCB0aGVpciBjYWxsIHRyZWVzIGxvb2sgbGlrZS4KCkFzIGEgc3RhcnRpbmcgcG9pbnQsIEkmIzM5O2xsIGRyaWxsIGRvd24gc3BlY2lmaWNhbGx5IGludG8gYGV2aWN0X2ZvbGlvc2AgYW5kIGl0cyBjYWxsZXJzLCBzdGFydGluZyBpbiBgbW0vdm1zY2FuLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHNvbWUgY29udGV4dCBhYm91dCBob3cgaXQmIzM5O3MgdXNlZCB3aXRoaW4gdGhlIHNjYW5uaW5nIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtldmljdF9mb2xpb3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz00OTIwPXN0YXRpYyBpbnQgaXNvbGF0ZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtNDk2My1cbm1tL3Ztc2Nhbi5jOjQ5NjQ6c3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG5tbS92bXNjYW4uYy00OTY1LVx0XHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcylcbi0tXG5tbS92bXNjYW4uYz01MTQzPXN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTE2Ni1cdFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fc2NhbiwgTUlOX0xSVV9CQVRDSCk7XG5tbS92bXNjYW4uYzo1MTY3Olx0XHRkZWx0YSA9IGV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyk7XG5tbS92bXNjYW4uYy01MTY4LVx0XHRpZiAoIWRlbHRhKVxuLS1cbm1tL3Ztc2Nhbi5jPTU3ODQ9c3RhdGljIGludCBydW5fZXZpY3Rpb24oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4tLVxubW0vdm1zY2FuLmMtNTgwNC1cdFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fcmVjbGFpbSAtIHNjLVx1MDAzZW5yX3JlY2xhaW1lZCwgTUFYX0xSVV9CQVRDSCk7XG5tbS92bXNjYW4uYzo1ODA1Olx0XHRpZiAoIWV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcykpXG5tbS92bXNjYW4uYy01ODA2LVx0XHRcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjYzMAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDg3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBLZXkgU3ltYm9scyBmb3IgQW5hbHlzaXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBoZXJlIGlzIHRvIGlkZW50aWZ5IGFuZCB6ZXJvIGluIG9uIHRoZSBtb3N0IHJlbGV2YW50IGZ1bmN0aW9ucyBmb3Igd2hhdGV2ZXIgaW52ZXN0aWdhdGlvbiBvciBtb2RpZmljYXRpb24gSSYjMzk7bSBwbGFubmluZywgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIE11bHRpLUdlbiBMUlUgb3IgbWVtb3J5IG1hbmFnZW1lbnQgaW4gZ2VuZXJhbC4gSSYjMzk7bGwgc3RhcnQgYnkgc3lzdGVtYXRpY2FsbHkgY2hlY2tpbmcgc3BlY2lmaWMgZnVuY3Rpb25zIHRoYXQgYXJlIG5vbi1zdGF0aWMgYW5kIHNlZW0gY2VudHJhbCB0byB0aGUgY29yZSBsb2dpYy4KCkZpcnN0LCBJJiMzOTttIGNoZWNraW5nIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBpbiBgbW0vdm1zY2FuLmNgLiBJdCYjMzk7cyBub24tc3RhdGljLCB3aGljaCBpcyBnb29kIGZvciBteSBwdXJwb3Nlcy4gVGhlbiBJJiMzOTtsbCBsb29rIGF0IGBmb2xpb19taWdyYXRlX2ZsYWdzYCBpbiBgbW0vbWlncmF0ZS5jYCwgYW5kIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgaW4gYG1tL21lbWNvbnRyb2wuY2AuIEkmIzM5O20gYWxzbyBnb2luZyB0byBleGFtaW5lIHNvbWUgcmVsYXRlZCBmdW5jdGlvbnMsIGluY2x1ZGluZyBgbHJ1X2dlbl9pbmNfcmVmc2AsIGBscnVfZ2VuX2NsZWFyX3JlZnNgLCBgZm9saW9fdXBkYXRlX2dlbmAsIGBfX2ZvbGlvX2luY19nZW5gLCBgaXNvbGF0ZV9mb2xpb2AsIGBnZXRfdGllcl9pZHhgLCBgZ2V0X3R5cGVfdG9fc2NhbmAsIGB3YWxrX3VwZGF0ZV9mb2xpb2AsIGB3YWxrX3B0ZV9yYW5nZWAsIGB3YWxrX3BtZF9yYW5nZV9sb2NrZWRgLCBhbmQgYHJlYWRfY3RybF9wb3NgLgoKTm93LCBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFdoaWNoIG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGBtbS92bXNjYW4uY2AgY2FsbCBvciBhcmUgY2FsbGVkIGJ5IHRoZXNlIGZ1bmN0aW9ucywgb3IgYXJlIG90aGVyd2lzZSBtb2RpZmllZCBpbiByZWxhdGlvbiB0byB0aGVtPyBJIG5lZWQgdG8gYnVpbGQgYSBicm9hZGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRleHQuIEkmIzM5O2xsIGZvY3VzIG9uIHRoZXNlOgoqICAgYGxydV9nZW5fbG9va19hcm91bmRgCiogICBgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkYAoqICAgYHdhbGtfcHRlX3JhbmdlYAoqICAgYGZvbGlvX3VwZGF0ZV9nZW5gCiogICBgZm9saW9fbWlncmF0ZV9mbGFnc2AKKiAgIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAKKiAgIGBldmljdF9mb2xpb3NgCiogICBgaXNvbGF0ZV9mb2xpb2AKKiAgIGBscnVfZ2VuX2luY19yZWZzYAoqICAgYGxydV9nZW5fY2xlYXJfcmVmc2AKCkxldCYjMzk7cyB0aGluayBhYm91dCB1YmlxdWl0eS4gSSB3YW50IHRvIGF2b2lkIGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsZWQgZXZlcnl3aGVyZTsgSSBuZWVkIHN5bWJvbHMgdGhhdCBhcmUgbW9yZSBzcGVjaWZpYyB0byB0aGUgYXJlYSBJJiMzOTttIGludGVyZXN0ZWQgaW4uIEkgc2hvdWxkIGNoZWNrIHdoZXRoZXIgYGZvbGlvX21hcmtfYWNjZXNzZWRgIG9yIGBmb2xpb19kZWFjdGl2YXRlYCBhcmUgY2FsbGVkIGV2ZXJ5d2hlcmUuIGBmb2xpb19tYXJrX2FjY2Vzc2VkYCBpcywgYnV0IG1heWJlIGBscnVfZ2VuX2luY19yZWZzYCwgYGxydV9nZW5fY2xlYXJfcmVmc2Agb3IgYGZvbGlvX2RlYWN0aXZhdGVgIC8gYGRlYWN0aXZhdGVfZmlsZV9mb2xpb2AgYXJlIHNwZWNpZmljLiBQZXJoYXBzIGBscnVfZ2VuX2luY19yZWZzYCBpcyBzcGVjaWZpYyB0byBNR0xSVS4gSG9sZCBvbiwgd2FzbiYjMzk7dCB0aGF0IHN0YXRpYz8KCipBaCosIHllcywgYGxydV9nZW5faW5jX3JlZnNgIGlzIHN0YXRpYywgd2hpY2ggY2FuIGNvbXBsaWNhdGUgc3ltYm9sIGFuYWx5c2lzLiBDYW4gYGthbGxzeW1zYCBoZWxwIHVzIGZpbmQgc3RhdGljIGZ1bmN0aW9ucz8gUmlnaHQuIFN0YXRpYyBmdW5jdGlvbnMgaW4gYC5jYCBmaWxlcyAqdXN1YWxseSogYXBwZWFyIGluIGAvcHJvYy9rYWxsc3ltc2AgdW5sZXNzIHRoZXkmIzM5O3JlIGlubGluZWQuIEFuZCBJIHJlbWVtYmVyIHRoZSBub3RlIGFib3V0IGlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyBpbiBoZWFkZXJzLiBUaGV5JiMzOTtyZSBiYXNpY2FsbHkgaW52aXNpYmxlIGFzIHN5bWJvbHMuIFNvLCBJIG5lZWQgdG8gZm9jdXMgb24gbm9uLXN0YXRpYywgb3Igc3Vic3lzdGVtLWxldmVsIGVudHJ5cG9pbnQgZnVuY3Rpb25zLiBUaGF04oCZcyBzYWZlci4KClRoZXJlZm9yZSwgZm9yIHRoZSBzYWtlIG9mIGNsZWFyIGFuYWx5c2lzLCB0aGVzZSBhcmUgdGhlICYjMzQ7Z29vZCYjMzQ7IGBGb2N1c1N5bWJvbHNgOgoKMS4gIGBscnVfZ2VuX2xvb2tfYXJvdW5kYAoyLiAgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgCjMuICBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgCjQuICBgZm9saW9fdXBkYXRlX2dlbmAKNS4gIGB3YWxrX3BtZF9yYW5nZV9sb2NrZWRgCjYuICBgd2Fsa19wdGVfcmFuZ2VgCjcuICBgZXZpY3RfZm9saW9zYAo4LiAgYGlzb2xhdGVfZm9saW9gCjkuICBgbHJ1X2dlbl9pbmNfcmVmc2AKMTAuIGBscnVfZ2VuX2NsZWFyX3JlZnNgCgpGaW5hbGx5LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIG5lZWRlZCBjb25maWd1cmF0aW9ucy4gYExSVV9HRU5gIGlzIGNyaXRpY2FsIGZvciBNdWx0aS1HZW4gTFJVLCBhbmQgYE1FTUNHYCBpcyByZXF1aXJlZCBiZWNhdXNlIG9mIHRoZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gbWVtb3J5IGNncm91cCBmdW5jdGlvbnMgKGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgYW5kIGBscnVfem9uZV9zaXplYCkuIE5vdyBJIG5lZWQgdG8gZXhwbG9yZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBgTFJVX0dFTl9FTkFCTEVEYCBlbmFibGVzIGBMUlVfR0VOYCBieSBkZWZhdWx0IGF0IGJvb3QuIExldCYjMzk7cyBjaGVjayBgS2NvbmZpZ2AgZm9yIGBMUlVfR0VOYCBhbmQgcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzk1Olx0XHQgIHB1cnBvc2VzLiAgSXQgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIHVzZXJmYXVsdGZkIHdyaXRlIHByb3RlY3Rpb24gb25cbjEzOTY6XHRcdCAgZmlsZS1iYWNrZWQgbWVtb3J5IHR5cGVzIGxpa2Ugc2htZW0gYW5kIGh1Z2V0bGJmcy5cbjEzOTc6XHRcbjEzOTg6XHQjIG11bHRpLWdlbiBMUlUge1xuMTM5OTpcdGNvbmZpZyBMUlVfR0VOXG4xNDAwOlx0XHRib29sIFwmIzM0O011bHRpLUdlbiBMUlVcJiMzNDtcbjE0MDE6XHRcdGRlcGVuZHMgb24gTU1VXG4xNDAyOlx0XHQjIG1ha2Ugc3VyZSBmb2xpby1cdTAwM2VmbGFncyBoYXMgZW5vdWdoIHNwYXJlIGJpdHNcbjE0MDM6XHRcdGRlcGVuZHMgb24gNjRCSVQgfHwgIVNQQVJTRU1FTSB8fCBTUEFSU0VNRU1fVk1FTU1BUFxuMTQwNDpcdFx0aGVscFxuMTQwNTpcdFx0ICBBIGhpZ2ggcGVyZm9ybWFuY2UgTFJVIGltcGxlbWVudGF0aW9uIHRvIG92ZXJjb21taXQgbWVtb3J5LiBTZWVcbjE0MDY6XHRcdCAgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0IGZvciBkZXRhaWxzLlxuMTQwNzpcdFxuMTQwODpcdGNvbmZpZyBMUlVfR0VOX0VOQUJMRURcbjE0MDk6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIGJ5IGRlZmF1bHRcJiMzNDtcbjE0MTA6XHRcdGRlcGVuZHMgb24gTFJVX0dFTlxuMTQxMTpcdFx0aGVscFxuMTQxMjpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBtdWx0aS1nZW4gTFJVIGJ5IGRlZmF1bHQuXG4xNDEzOlx0XG4xNDE0Olx0Y29uZmlnIExSVV9HRU5fU1RBVFNcbjE0MTU6XHRcdGJvb2wgXCYjMzQ7RnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXCYjMzQ7XG4xNDE2Olx0XHRkZXBlbmRzIG9uIExSVV9HRU5cbjE0MTc6XHRcdGhlbHBcbjE0MTg6XHRcdCAgRG8gbm90IGVuYWJsZSB0aGlzIG9wdGlvbiB1bmxlc3MgeW91IHBsYW4gdG8gbG9vayBhdCBoaXN0b3JpY2FsIHN0YXRzXG4xNDE5Olx0XHQgIGZyb20gZXZpY3RlZCBnZW5lcmF0aW9ucyBmb3IgZGVidWdnaW5nIHB1cnBvc2UuXG4xNDIwOlx0XG4xNDIxOlx0XHQgIFRoaXMgb3B0aW9uIGhhcyBhIHBlci1tZW1jZyBhbmQgcGVyLW5vZGUgbWVtb3J5IG92ZXJoZWFkLlxuMTQyMjpcdFxuMTQyMzpcdGNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxuMTQyNDpcdFx0ZGVmX2Jvb2wgeVxuMTQyNTpcdFx0ZGVwZW5kcyBvbiBMUlVfR0VOIFx1MDAyNlx1MDAyNiBBUkNIX0hBU19IV19QVEVfWU9VTkdcbjE0MjY6XHQjIH1cbjE0Mjc6XHRcbjE0Mjg6XHRjb25maWcgTE9DS19NTV9BTkRfRklORF9WTUFcbjE0Mjk6XHRcdGJvb2xcbjE0MzA6XHRcdGRlcGVuZHMgb24gIVNUQUNLX0dST1dTVVBcbjE0MzE6XHRcbjE0MzI6XHRjb25maWcgSU9NTVVfTU1fREFUQVxuMTQzMzpcdFx0Ym9vbFxuMTQzNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTA1MwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgZm9yIE1pZ3JhdGlvbiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgdmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgdGhlIGBNSUdSQVRJT05gIGNvbmZpZ3VyYXRpb24uIFRoaXMgaXMgc3RhbmRhcmQgb3BlcmF0aW5nIHByb2NlZHVyZSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBhbnkgdHlwZSBvZiBhdXRvbWF0ZWQgb3Igc2NyaXB0ZWQgZGVwbG95bWVudCwgdXBkYXRlLCBvciBkYXRhIHRyYW5zZm9ybWF0aW9uLiBJIGNhbiYjMzk7dCBwcm9jZWVkIHdpdGggYW55IG1pZ3JhdGlvbi1yZWxhdGVkIHRhc2sgdW50aWwgSSBjb25maXJtIHRoYXQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIGlzIHByZXNlbnQgYW5kIGFjY2Vzc2libGUuIFRoaXMgcHJvYmFibHkgbWVhbnMgdmVyaWZ5aW5nIHRoZSBwcmVzZW5jZSBvZiBhIHNwZWNpZmljIGZpbGUsIGVudmlyb25tZW50IHZhcmlhYmxlLCBkYXRhYmFzZSBlbnRyeSwgb3Igb3RoZXIgbWVhbnMgdGhhdCBkZWZpbmVzIHRoZSBtaWdyYXRpb24gcHJvY2VzcyBwYXJhbWV0ZXJzLiBXaXRob3V0IGtub3dpbmcgdGhlIHByZWNpc2Ugc3lzdGVtLCBJIGhhdmUgdG8gYXNzdW1lIGEgZmV3IHBvc3NpYmlsaXRpZXMgc3VjaCBhcyBhIG1pZ3JhdGlvbiBmaWxlLCBvciBhIHNwZWNpZmljIGRhdGFiYXNlIGVudHJ5LiBOb3csIGhvdyBkbyBJIGFjdHVhbGx5IGNoZWNrPyBEbyBJIGhhdmUgYSBwcmUtZXhpc3RpbmcgZnVuY3Rpb24/IExpYnJhcnk/IElzIGl0IGEgbWFudWFsIGNoZWNrPyBJIGFtIGdvaW5nIHRvIGFzc3VtZSBzb21lIGtpbmQgb2Ygc3lzdGVtIGFscmVhZHkgZXhpc3RzLCBhbmQgSSBuZWVkIHRvIGNoZWNrIGZvciB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUlHUkFUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NjY4PWNvbmZpZyBOVU1BX01JR1JBVElPTlxuLS1cbm1tL0tjb25maWctNjc4LVxubW0vS2NvbmZpZzo2Nzk6Y29uZmlnIE1JR1JBVElPTlxubW0vS2NvbmZpZy02ODAtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MzUzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQ2hlY2tpbmcgdGhlIE1pZ3JhdGlvbiBDb25maWd1cmF0aW9uIGluIG1tL0tjb25maWcqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgJiMzNDtSaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24uJiMzNDsgU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGBNSUdSQVRJT05gIG9wdGlvbnMgd2l0aGluIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIG9yIHBvdGVudGlhbGx5IHR3ZWFraW5nIHRoZSBzeXN0ZW0mIzM5O3MgbWVtb3J5IG1pZ3JhdGlvbiBjYXBhYmlsaXRpZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZXNlIGNvbmZpZ3VyYXRpb25zLCBhbmQgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUuIFRoaXMgaXMgYSBwcmV0dHkgZnVuZGFtZW50YWwgYXNwZWN0IG9mIGhvdyB0aGUga2VybmVsIG1hbmFnZXMgbWVtb3J5LCBzbyBJIG5lZWQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCBtaWdyYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBzZXQgYW5kIGlmIHRoZXJlJiMzOTtzIGFueXRoaW5nIHVudXN1YWwgb3Igc29tZXRoaW5nIHRoYXQgc2hvdWxkIGJlIGFkanVzdGVkIGluIHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uLiBUaGlzIGlzIHNvbWV0aGluZyBJJiMzOTttIGludGltYXRlbHkgZmFtaWxpYXIgd2l0aCwgc28gSSYjMzk7bGwgYmUgbG9va2luZyBhdCB0aGUgZGV0YWlscyBhcyB3ZWxsIGFzIHRoZSBiaWdnZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NzA6XHRcdGRlZmF1bHQgeVxuIDY3MTpcdFx0ZGVwZW5kcyBvbiBOVU1BIFx1MDAyNlx1MDAyNiBNTVVcbiA2NzI6XHRcdHNlbGVjdCBNSUdSQVRJT05cbiA2NzM6XHRcdGhlbHBcbiA2NzQ6XHRcdCAgU3VwcG9ydCB0aGUgbWlncmF0aW9uIG9mIHBhZ2VzIHRvIG90aGVyIE5VTUEgbm9kZXMsIGF2YWlsYWJsZSB0b1xuIDY3NTpcdFx0ICB1c2VyIHNwYWNlIHRocm91Z2ggaW50ZXJmYWNlcyBsaWtlIG1pZ3JhdGVfcGFnZXMoKSwgbW92ZV9wYWdlcygpLFxuIDY3NjpcdFx0ICBhbmQgbWJpbmQoKS4gU2VsZWN0aW5nIHRoaXMgb3B0aW9uIGFsc28gZW5hYmxlcyBzdXBwb3J0IGZvciBwYWdlXG4gNjc3Olx0XHQgIGRlbW90aW9uIGZvciBtZW1vcnkgdGllcmluZy5cbiA2Nzg6XHRcbiA2Nzk6XHRjb25maWcgTUlHUkFUSU9OXG4gNjgwOlx0XHRib29sXG4gNjgxOlx0XHRkZXBlbmRzIG9uIE1NVVxuIDY4MjpcdFxuIDY4MzpcdGNvbmZpZyBERVZJQ0VfTUlHUkFUSU9OXG4gNjg0Olx0XHRkZWZfYm9vbCBNSUdSQVRJT04gXHUwMDI2XHUwMDI2IFpPTkVfREVWSUNFXG4gNjg1Olx0XG4gNjg2Olx0Y29uZmlnIEFSQ0hfRU5BQkxFX0hVR0VQQUdFX01JR1JBVElPTlxuIDY4NzpcdFx0Ym9vbFxuIDY4ODpcdFxuIDY4OTpcdGNvbmZpZyBBUkNIX0hBU19QTURfU09GVExFQVZFU1xuIDY5MDpcdFx0Ym9vbFxuIDY5MTpcdFxuIDY5MjpcdGNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxuIDY5MzpcdFx0ZGVmX2Jvb2wgblxuIDY5NDpcdFx0aGVscFxuIDY5NTpcdFx0ICBBbGxvd3MgdGhlIHBhZ2VibG9ja19vcmRlciB2YWx1ZSB0byBiZSBkeW5hbWljIGluc3RlYWQgb2YganVzdCBzdGFuZGFyZFxuIDY5NjpcdFx0ICBIVUdFVExCX1BBR0VfT1JERVIgd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgSHVnZVRMQiBwYWdlIHNpemVzIGF2YWlsYWJsZVxuIDY5NzpcdFx0ICBvbiBhIHBsYXRmb3JtLlxuIDY5ODpcdFxuIDY5OTpcdFx0ICBOb3RlIHRoYXQgdGhlIHBhZ2VibG9ja19vcmRlciBjYW5ub3QgZXhjZWVkIE1BWF9QQUdFX09SREVSIGFuZCB3aWxsIGJlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5OTkwCgkJCQkJCQlvdXRwdXQ6IDI0OQoJCQkJCQkJdGhvdWdodHM6IDQyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIFBhdGNoJiMzOTtzIEltcGFjdCBvbiBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgZGVlcGx5IGludm9sdmVkIHdpdGggbWVtb3J5IG1pZ3JhdGlvbiwgY29tcGFjdGlvbiwgYW5kIE5VTUEgYmFsYW5jaW5nLCBnaXZlbiB0aGUgbWVudGlvbnMgb2YgYE5VTUFfTUlHUkFUSU9OYCwgYE1JR1JBVElPTmAsIGBDT01QQUNUSU9OYCwgYW5kIGBOVU1BX0JBTEFOQ0lOR2AuIFdlJiMzOTtyZSBlbmFibGluZyBtaWdyYXRpb24gaGVyZS4gVGhlIGZhY3QgdGhhdCBgTFJVX0dFTmAsIGBMUlVfR0VOX0VOQUJMRURgLCBhbmQgYE1FTUNHYCBhcmUgYWxzbyByZWxldmFudCBzdWdnZXN0cyBhIGNvbm5lY3Rpb24gdG8gZ2VuZXJhdGlvbmFsIExSVSBhbmQgbWVtb3J5IGNncm91cCBtYW5hZ2VtZW50IGFzIGl0IHJlbGF0ZXMgdG8gbWlncmF0aW9uLCB3aGljaCBpcyBpbnRyaWd1aW5nLgoKSSBuZWVkIHRvIG1ldGljdWxvdXNseSByZXZpZXcgdGhpcyBwYXRjaC4gSXQgaW1wYWN0cyBzb21lIGNvcmUgYXJlYXMuIFNwZWNpZmljYWxseSwgdGhlIHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIGluY2x1ZGluZyBNR0xSVSwgbWVtY2cgTFJVIHpvbmUgc2l6ZSBhZGp1c3RtZW50cywgYW5kIHBhZ2UgbWlncmF0aW9uIHJlZmVyZW5jZSBmbGFncywgYWxsIG9mIHdoaWNoIGFyZSB2ZXJ5IHNlbnNpdGl2ZS4gVGhlIGludHJvZHVjdGlvbiBvZiBuZXcgYXNzZXJ0aW9ucywgc3VjaCBhcyB0aG9zZSB1c2luZyBgVk1fV0FSTl9PTl9PTkNFYCBpbiBmdW5jdGlvbnMgbGlrZSBgbHJ1X3NldF9nZW5fZmxhZ3NgIGFuZCBgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZWAsIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8gcGF5IHZlcnkgY2xvc2UgYXR0ZW50aW9uIHRvLiBUaGVzZSBhcmUgcG90ZW50aWFsIHBvaW50cyBvZiBmYWlsdXJlIG9yIGRlYnVnZ2luZyBob29rcy4gSXQgYWxzbyB0b3VjaGVzIGdlbmVyYXRpb24gYW5kIHRpZXIgY2FsY3VsYXRpb25zLCBwYWdlIHNjYW5uaW5nLCBhbmQgZXZpY3Rpb24sIHNwZWNpZmljYWxseSBpbiBgbW0vdm1zY2FuLmNgLiBMYXN0bHksIGZsYWcgbWFuaXB1bGF0aW9uIHJlbGF0ZWQgdG8gZm9saW9zLCBsaWtlIGluIGBscnVfc2V0X3JlZnNfZmxhZ3NgLCBgZm9saW9fc2V0X2xydV9yZWZzYCwgZXRjLiwgaXMgYmVpbmcgbW9kaWZpZWQuCgpCYXNlZCBvbiBhbGwgb2YgdGhpcywgdGhpcyBwYXRjaCBkZWZpbml0ZWx5IHdhcnJhbnRzIGV4dGVuc2l2ZSBmdXp6aW5nLiBUaGUgY2hhbmdlcyBhcmUgdG9vIGxvdy1sZXZlbCBhbmQgZmFyLXJlYWNoaW5nIHRvIGlnbm9yZS4gVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgbG9vayBsaWtlIHBhcnRpY3VsYXJseSBmcnVpdGZ1bCB0YXJnZXRzIGZvciBmdXp6aW5nOiBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAsIGBmb2xpb19taWdyYXRlX2ZsYWdzYCwgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCwgYHdhbGtfcHRlX3JhbmdlYCwgYHdhbGtfcG1kX3JhbmdlX2xvY2tlZGAsIGBmb2xpb191cGRhdGVfZ2VuYCwgYGV2aWN0X2ZvbGlvc2AsIGBpc29sYXRlX2ZvbGlvYCwgYGxydV9nZW5faW5jX3JlZnNgLCBhbmQgYGxydV9nZW5fY2xlYXJfcmVmc2AuIFRoZXkgaGFuZGxlIHRoZSBtb3N0IHNlbnNpdGl2ZSBhc3BlY3RzIG9mIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZXMuCgpBbmQsIG9mIGNvdXJzZSwgdGhlIGBMUlVfR0VOYCwgYExSVV9HRU5fRU5BQkxFRGAsIGBNRU1DR2AsIGFuZCBgTUlHUkFUSU9OYCBjb25maWd1cmF0aW9ucyBtdXN0IGJlIGVuYWJsZWQgdG8gZnVsbHkgZXhlcmNpc2UgdGhpcyBwYXRjaC4KCkkmIzM5O2xsIHByb2NlZWQgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGggdGhpcyBpbmZvcm1hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xydV9nZW5fbG9va19hcm91bmQmIzM0OywKICAgICYjMzQ7Zm9saW9fbWlncmF0ZV9mbGFncyYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZSYjMzQ7LAogICAgJiMzNDt3YWxrX3B0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDt3YWxrX3BtZF9yYW5nZV9sb2NrZWQmIzM0OywKICAgICYjMzQ7Zm9saW9fdXBkYXRlX2dlbiYjMzQ7LAogICAgJiMzNDtldmljdF9mb2xpb3MmIzM0OywKICAgICYjMzQ7aXNvbGF0ZV9mb2xpbyYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX2luY19yZWZzJiMzNDssCiAgICAmIzM0O2xydV9nZW5fY2xlYXJfcmVmcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBhY3Jvc3MgbW0vdm1zY2FuLmMsIG1tL2ZvbGlvLmMsIG1tL21lbWNvbnRyb2wuYywgYW5kIG1tL21pZ3JhdGUuYywgYWx0ZXJpbmcgTXVsdGktR2VuIExSVSAoTUdMUlUpIHJlZmVyZW5jZSB0cmFja2luZywgZm9saW8gZmxhZyBtYW5pcHVsYXRpb24sIHRpZXIgY2FsY3VsYXRpb25zLCBwYWdlIGV2aWN0aW9uLCBhbmQgbWVtY2cgTFJVIHpvbmUgYWNjb3VudGluZy4gSXQgYWxzbyBhZGRzIHNldmVyYWwgVk1fV0FSTl9PTl9PTkNFIGFzc2VydGlvbnMgYW5kIGNoYW5nZXMgc3luY2hyb25pemF0aW9uL2FyaXRobWV0aWMgbG9naWMuIFRoZXNlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xydV9nZW5fbG9va19hcm91bmQmIzM0OywKICAgICYjMzQ7Zm9saW9fbWlncmF0ZV9mbGFncyYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZSYjMzQ7LAogICAgJiMzNDt3YWxrX3B0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDt3YWxrX3BtZF9yYW5nZV9sb2NrZWQmIzM0OywKICAgICYjMzQ7Zm9saW9fdXBkYXRlX2dlbiYjMzQ7LAogICAgJiMzNDtldmljdF9mb2xpb3MmIzM0OywKICAgICYjMzQ7aXNvbGF0ZV9mb2xpbyYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX2luY19yZWZzJiMzNDssCiAgICAmIzM0O2xydV9nZW5fY2xlYXJfcmVmcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBhY3Jvc3MgbW0vdm1zY2FuLmMsIG1tL2ZvbGlvLmMsIG1tL21lbWNvbnRyb2wuYywgYW5kIG1tL21pZ3JhdGUuYywgYWx0ZXJpbmcgTXVsdGktR2VuIExSVSAoTUdMUlUpIHJlZmVyZW5jZSB0cmFja2luZywgZm9saW8gZmxhZyBtYW5pcHVsYXRpb24sIHRpZXIgY2FsY3VsYXRpb25zLCBwYWdlIGV2aWN0aW9uLCBhbmQgbWVtY2cgTFJVIHpvbmUgYWNjb3VudGluZy4gSXQgYWxzbyBhZGRzIHNldmVyYWwgVk1fV0FSTl9PTl9PTkNFIGFzc2VydGlvbnMgYW5kIGNoYW5nZXMgc3luY2hyb25pemF0aW9uL2FyaXRobWV0aWMgbG9naWMuIFRoZXNlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjI0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMTY6MjQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIE11bHRpLUdlbmVyYXRpb25hbCBMUlUgKE1HTFJVKSBmb2xpbyBmbGFnIGhlbHBlcnMsIHBhZ2UgdGFibGUgLyBybWFwIHNjYW5uaW5nIGxvZ2ljLCBhbmQgbWVtY2cgTFJVIHpvbmUgc2l6ZSBhY2NvdW50aW5nLiBTcGVjaWZpY2FsbHk6XG4tIEl0IHJlcGxhY2VzIGRpcmVjdCBgZm9saW8tXHUwMDNlZmxhZ3MuZmAgYWNjZXNzIHdpdGggYGZvbGlvX2ZsYWdzKGZvbGlvLCAwKWAgYWNjZXNzb3IgaGVscGVycyAoYGxydV9zZXRfZ2VuX2ZsYWdzYCwgYGxydV9nZXRfZ2VuX2ZsYWdzYCwgYGxydV9zZXRfcmVmc19mbGFnc2AsIGBscnVfZ2V0X3JlZnNfZmxhZ3NgLCBgZm9saW9fc2V0X2xydV9yZWZzYCwgYGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnNgKS5cbi0gSXQgY2xlYW5zIHVwIGByZWFkX2N0cmxfcG9zYCBwYXJhbWV0ZXJpemF0aW9uIGFuZCBgd2Fsa191cGRhdGVfZm9saW9gIGNhbGxlcnMuIFN0YWNrIHZhcmlhYmxlcyBzdWNoIGFzIGBzdHJ1Y3QgY3RybF9wb3MgcG9zYCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgaW4gYHJlYWRfY3RybF9wb3NgLCBhbmQgdGhlIGBpbnQgKnR5cGVgIG91dHB1dCBwYXJhbWV0ZXIgaW4gYGZvbGlvX3VwZGF0ZV9nZW5gIGlzIGd1YXJhbnRlZWQgdG8gYmUgaW5pdGlhbGl6ZWQgd2hlbiB0aGUgcmV0dXJuIHZhbHVlIGluZGljYXRlcyBwcm9tb3Rpb24gKGBvbGRfZ2VuIFx1MDAzZT0gMGApLlxuLSBJdCBjb252ZXJ0cyBgbXotXHUwMDNlbHJ1X3pvbmVfc2l6ZWAgdG8gc2lnbmVkIGBsb25nYCB0byBzaW1wbGlmeSB1bmRlcmZsb3cgaGFuZGxpbmcuXG5cbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIGNvcHkga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gUG90ZW50aWFsIGJ1Z3MgaW4gdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBjb25jdXJyZW5jeS9sb2NraW5nIHJhY2VzIG9yIHN0YXRlIGNvcnJ1cHRpb24pIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBrZXJuZWwgYXNzZXJ0aW9uIGJ1aWxkcyB3aXRob3V0IHJlcXVpcmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlM2NiYmM3NmUxYzk2NmM3NmZlNjIxMjk5YTMyZDE3YWZhN2U0MDAzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgNiAxNjoyMzo0OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKaW5kZXggYzc5OTkyNjQzNTU2MC4uMmI2NzY5NDI4NWQwNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKQEAgLTEwMCw3ICYjNDM7MTAwLDcgQEAgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgewogCS8qIEZpZWxkcyB3aGljaCBnZXQgdXBkYXRlZCBvZnRlbiBhdCB0aGUgZW5kLiAqLwogCXN0cnVjdCBscnV2ZWMJCWxydXZlYzsKIAlDQUNIRUxJTkVfUEFERElORyhfcGFkMl8pOwotCXVuc2lnbmVkIGxvbmcJCWxydV96b25lX3NpemVbTUFYX05SX1pPTkVTXVtOUl9MUlVfTElTVFNdOwomIzQzOwlsb25nCQkJbHJ1X3pvbmVfc2l6ZVtNQVhfTlJfWk9ORVNdW05SX0xSVV9MSVNUU107CiAJc3RydWN0IG1lbV9jZ3JvdXBfcmVjbGFpbV9pdGVyCWl0ZXI7CiAKIAkvKgpAQCAtODg3LDEwICYjNDM7ODg3LDE1IEBAIHN0YXRpYyBpbmxpbmUKIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCWVudW0gbHJ1X2xpc3QgbHJ1LCBpbnQgem9uZV9pZHgpCiB7CiYjNDM7CWxvbmcgdmFsOwogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejsKIAogCW16ID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7Ci0JcmV0dXJuIFJFQURfT05DRShtei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7CiYjNDM7CXZhbCA9IFJFQURfT05DRShtei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UodmFsICZsdDsgMCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIHZhbDsKIH0KIAogdm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaAppbmRleCA2MjFjODY1M2Q4ZjdlLi5hYjY5Yjk5MzA4OTNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmgKQEAgLTMwLDYgJiM0MzszMCwxNyBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19pc19maWxlX2xydShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXJldHVybiAhZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1IC0gU2hvdWxkIHRoZSBmb2xpbyBiZSBvbiBhIGZpbGUgTFJVIG9yIGFub24gTFJVPwomIzQzOyAqIEBmbGFnczogVGhlIGZvbGlvJiMzOTtzIGZsYWdzLgomIzQzOyAqCiYjNDM7ICogSnVzdCBsaWtlIGZvbGlvX2lzX2ZpbGVfbHJ1IGJ1dCB0YWtlIHRoZSBmb2xpbyBmbGFncyBkaXJlY3RseSBpbnN0ZWFkLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZsYWdzKQomIzQzO3sKJiM0MzsJcmV0dXJuICF0ZXN0X2JpdChQR19zd2FwYmFja2VkLCBmbGFncyk7CiYjNDM7fQomIzQzOwogc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJCQllbnVtIGxydV9saXN0IGxydSwgZW51bSB6b25lX3R5cGUgemlkLAogCQkJCWxvbmcgbnJfcGFnZXMpCkBAIC0xNDIsMTAgJiM0MzsxNTMsNjYgQEAgc3RhdGljIGlubGluZSBpbnQgbHJ1X3RpZXJfZnJvbV9yZWZzKGludCByZWZzLCBib29sIHdvcmtpbmdzZXQpCiAJcmV0dXJuIHdvcmtpbmdzZXQgPyBNQVhfTlJfVElFUlMgLSAxIDogb3JkZXJfYmFzZV8yKHJlZnMpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzOy8qKgomIzQzOyAqIGxydV9zZXRfZ2VuX2ZsYWdzIC0gU2V0IHRoZSBMUlUgZ2VuZXJhdGlvbiBudW1iZXIgdG8gc3BlY2lmaWVkIGZvbGlvIGZsYWdzLgomIzQzOyAqIEBmbGFnczogcG9pbnRlciB0byB0aGUgZm9saW8gZmxhZ3MKJiM0MzsgKiBAZ2VuOiBnZW5lcmF0aW9uIG51bWJlciwgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfc2V0X2dlbl9mbGFncyh1bnNpZ25lZCBsb25nICpmbGFncywgaW50IGdlbikKJiM0Mzt7CiYjNDM7CUJVSUxEX0JVR19PTihMUlVfR0VOX01BU0sgJmFtcDsgTFJVX1JFRlNfTUFTSyk7CiYjNDM7CVZNX1dBUk5fT05fT05DRShnZW4gJmd0Oz0gTUFYX05SX0dFTlMgfHwgZ2VuICZsdDsgMCk7CiYjNDM7CS8qIFN0b3JlIGdlbiBvZmZzZXQgYnkgMSwgemVybyBtZWFucyB0aGUgZm9saW8gaXMgb2ZmLWxpc3QuICovCiYjNDM7CSpmbGFncyAmYW1wOz0gfkxSVV9HRU5fTUFTSzsKJiM0MzsJKmZsYWdzIHw9IChnZW4gJiM0MzsgMVVMKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBscnVfZ2V0X2dlbl9mbGFncyAtIFJldHVybiB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIGZyb20gZm9saW8gZmxhZ3MuCiYjNDM7ICogQGZsYWdzOiBmb2xpbyBmbGFncwomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLiBSZXR1cm5zCiYjNDM7ICogLTEgaWYgdGhlIGZsYWdzIGluZGljYXRlIHRoZSBmb2xpbyBpcyBvZmYgdGhlIGxpc3QgKGUuZy4sIGlzb2xhdGVkKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGludCBscnVfZ2V0X2dlbl9mbGFncyh1bnNpZ25lZCBsb25nIGZsYWdzKQomIzQzO3sKJiM0MzsJaW50IGdlbiA9ICgoZmxhZ3MgJmFtcDsgTFJVX0dFTl9NQVNLKSAmZ3Q7Jmd0OyBMUlVfR0VOX1BHT0ZGKSAtIDE7CiYjNDM7CiYjNDM7CS8qIEV4Y2x1ZGUgdGhlIGxlZ2FsIC0xIGZyb20gdGhlIHVuc2lnbmVkIE1BWF9OUl9HRU5TIGNvbXBhcmlzb24gKi8KJiM0MzsJVk1fV0FSTl9PTl9PTkNFKGdlbiAhPSAtMSAmYW1wOyZhbXA7IGdlbiAmZ3Q7PSBNQVhfTlJfR0VOUyk7CiYjNDM7CXJldHVybiBnZW47CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGxydV9zZXRfcmVmc19mbGFncyAtIFNldCB0aGUgTFJVIHJlZmVyZW5jZWQgY291bnQgdG8gZm9saW8gZmxhZ3MuCiYjNDM7ICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFncwomIzQzOyAqIEByZWZzOiByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IG51bWJlciwgYmV0d2VlbiAwIGFuZCBMUlVfUkVGU19NQVgsIGluY2x1c2l2ZS4KJiM0MzsgKgomIzQzOyAqIEZvciBNR0xSVSwgUEdfcmVmZXJlbmNlZCBob2xkcyB0aGUgZmlyc3QgcmVmLCBhbmQgdGhlIGV4dHJhIGJpdHMgaG9sZCB0aGUKJiM0MzsgKiByZW1haW5pbmcgcmVmcy4gRm9yIGNsYXNzaWNhbCBMUlUgdGhlIGV4dHJhIGJpdHMgYXJlIG5vdCB1c2VkLCBzbyBpdCBjYW4KJiM0MzsgKiBhbHNvIGJlIHNlZW4gYXMgdGhlIHJlZnMgY291bnQgbmV2ZXIgZXhjZWVkcyAxLiBJbiBib3RoIGNhc2VzLCByZWZzID09IDEKJiM0MzsgKiBtZWFucyBQR19yZWZlcmVuY2VkIGlzIHNldCBhbmQgdGhlIGV4dHJhIGJpdHMgYXJlIHplcm8sIGFuZCByZWZzID09IDAgbWVhbnMKJiM0MzsgKiBQR19yZWZlcmVuY2VkIGFuZCB0aGUgZXh0cmEgYml0cyBhcmUgYWxsIHVuc2V0LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfc2V0X3JlZnNfZmxhZ3ModW5zaWduZWQgbG9uZyAqZmxhZ3MsIHVuc2lnbmVkIGludCByZWZzKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwomIzQzOwlWTV9XQVJOX09OX09OQ0UocmVmcyAmZ3Q7IExSVV9SRUZTX01BWCk7CiYjNDM7CUJVSUxEX0JVR19PTihMUlVfUkVGU19NQVggIT0gKExSVV9SRUZTX01BU0sgJmd0OyZndDsgTFJVX1JFRlNfUEdPRkYpICYjNDM7IDEpOwogCiYjNDM7CSpmbGFncyAmYW1wOz0gfkxSVV9SRUZTX0ZMQUdTOwomIzQzOwlpZiAoIXJlZnMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CSpmbGFncyB8PSAoQklUKFBHX3JlZmVyZW5jZWQpIHwgKChyZWZzIC0gMVVMKSAmbHQ7Jmx0OyBMUlVfUkVGU19QR09GRikpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBscnVfZ2V0X3JlZnNfZmxhZ3MgLSBSZXR1cm4gTFJVIHJlZmVyZW5jZWQgLyBhY2Nlc3MgY291bnQgZnJvbSBmb2xpbyBmbGFncy4KJiM0MzsgKiBAZmxhZ3M6IGZvbGlvIGZsYWdzCiYjNDM7ICoKJiM0MzsgKiBSZWFkcyB0aGUgTFJVIHJlZmVyZW5jZWQgY291bnQgc2V0IGJ5IGxydV9zZXRfcmVmc19mbGFncygpLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGxydV9nZXRfcmVmc19mbGFncyh1bnNpZ25lZCBsb25nIGZsYWdzKQomIzQzO3sKIAlpZiAoIShmbGFncyAmYW1wOyBCSVQoUEdfcmVmZXJlbmNlZCkpKQogCQlyZXR1cm4gMDsKIAkvKgpAQCAtMTU1LDExICYjNDM7MjIyLDI0IEBAIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJcmV0dXJuICgoZmxhZ3MgJmFtcDsgTFJVX1JFRlNfTUFTSykgJmd0OyZndDsgTFJVX1JFRlNfUEdPRkYpICYjNDM7IDE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwomIzQzOwlyZXR1cm4gbHJ1X2dldF9yZWZzX2ZsYWdzKFJFQURfT05DRSgqY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKSk7CiYjNDM7fQogCi0JcmV0dXJuICgoZmxhZ3MgJmFtcDsgTFJVX0dFTl9NQVNLKSAmZ3Q7Jmd0OyBMUlVfR0VOX1BHT0ZGKSAtIDE7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgcmVmcykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCW5ld19mbGFncyA9IG9sZF9mbGFnczsKJiM0MzsJCWxydV9zZXRfcmVmc19mbGFncygmYW1wO25ld19mbGFncywgcmVmcyk7CiYjNDM7CX0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksICZhbXA7b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X2dlbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIGxydV9nZXRfZ2VuX2ZsYWdzKFJFQURfT05DRSgqY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2lzX2FjdGl2ZShjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBnZW4pCkBAIC0yNzAsNyAmIzQzOzM1MCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2FkZF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpOwogCWZsYWdzID0gKGdlbiAmIzQzOyAxVUwpICZsdDsmbHQ7IExSVV9HRU5fUEdPRkY7CiAJLyogc2VlIHRoZSBjb21tZW50IG9uIE1JTl9OUl9HRU5TIGFib3V0IFBHX2FjdGl2ZSAqLwotCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX0dFTl9NQVNLIHwgQklUKFBHX2FjdGl2ZSksIGZsYWdzKTsKJiM0MzsJc2V0X21hc2tfYml0cyhmb2xpb19mbGFncyhmb2xpbywgMCksIExSVV9HRU5fTUFTSyB8IEJJVChQR19hY3RpdmUpLCBmbGFncyk7CiAKIAlscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIC0xLCBnZW4pOwogCS8qIGZvciBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoKSAqLwpAQCAtMjk1LDcgJiM0MzszNzUsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCiAJLyogZm9yIGZvbGlvX21pZ3JhdGVfZmxhZ3MoKSAqLwogCWZsYWdzID0gIXJlY2xhaW1pbmcgJmFtcDsmYW1wOyBscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIGdlbikgPyBCSVQoUEdfYWN0aXZlKSA6IDA7Ci0JZmxhZ3MgPSBzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9HRU5fTUFTSywgZmxhZ3MpOwomIzQzOwlmbGFncyA9IHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0ssIGZsYWdzKTsKIAlnZW4gPSAoKGZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwogCiAJbHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBnZW4sIC0xKTsKQEAgLTMwNCwxMSAmIzQzOzM4NCwxOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZCkKJiM0MzsvKioKJiM0MzsgKiBmb2xpb19taWdyYXRlX2xydV9yZWZzIC0gY29weSB0aGUgcmVmZXJlbmNlIHN0YXRlIHRvIGEgbmV3IGZvbGlvCiYjNDM7ICogQG5ldzogdGhlIGRlc3RpbmF0aW9uIGZvbGlvCiYjNDM7ICogQG9sZDogdGhlIHNvdXJjZSBmb2xpbwomIzQzOyAqCiYjNDM7ICogVHJhbnNmZXIgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBAbmV3IGR1cmluZyBtaWdyYXRpb246IHRoZSBNR0xSVQomIzQzOyAqIHJlZnMgY291bnQsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkLCBvciBqdXN0IFBHX3JlZmVyZW5jZWQgZm9yIHRoZQomIzQzOyAqIGFjdGl2ZS9pbmFjdGl2ZSBMUlUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKQogewotCXVuc2lnbmVkIGxvbmcgcmVmcyA9IFJFQURfT05DRShvbGQtJmd0O2ZsYWdzLmYpICZhbXA7IExSVV9SRUZTX01BU0s7Ci0KLQlzZXRfbWFza19iaXRzKCZhbXA7bmV3LSZndDtmbGFncy5mLCBMUlVfUkVGU19NQVNLLCByZWZzKTsKJiM0MzsJQlVJTERfQlVHX09OKExSVV9SRUZTX01BU0sgJmFtcDsgQklUKFBHX3JlZmVyZW5jZWQpKTsKJiM0MzsJZm9saW9fc2V0X2xydV9yZWZzKG5ldywgZm9saW9fbHJ1X3JlZnMob2xkKSk7CiB9CiAjZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi8KIApAQCAtMzM3LDkgJiM0Mzs0MjUsMTAgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZCkKIHsKLQomIzQzOwlpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKG9sZCkpCiYjNDM7CQlmb2xpb19zZXRfcmVmZXJlbmNlZChuZXcpOwogfQogI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCmluZGV4IDg0ZTIzN2YyYzE3ZGIuLmM5YWU3OTkxYThiMjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaApAQCAtNDk1LDExICYjNDM7NDk1LDE0IEBAIGVudW0gbHJ1dmVjX2ZsYWdzIHsKICAqIGZvbGlvLSZndDtmbGFncywgbWFza2VkIGJ5IExSVV9SRUZTX01BU0suCiAgKi8KICNkZWZpbmUgTUFYX05SX1RJRVJTCQk0VQomIzQzOyNkZWZpbmUgTFJVX1RJRVJfTUlOCQkwVQomIzQzOyNkZWZpbmUgTFJVX1RJRVJfTUFYCQkoTUFYX05SX1RJRVJTIC0gMSkKIAogI2lmbmRlZiBfX0dFTkVSQVRJTkdfQk9VTkRTX0gKIAogI2RlZmluZSBMUlVfR0VOX01BU0sJCSgoQklUKExSVV9HRU5fV0lEVEgpIC0gMSkgJmx0OyZsdDsgTFJVX0dFTl9QR09GRikKICNkZWZpbmUgTFJVX1JFRlNfTUFTSwkJKChCSVQoTFJVX1JFRlNfV0lEVEgpIC0gMSkgJmx0OyZsdDsgTFJVX1JFRlNfUEdPRkYpCiYjNDM7I2RlZmluZSBMUlVfUkVGU19NQVgJCUJJVChMUlVfUkVGU19XSURUSCkKIAogLyoKICAqIEZvciBmb2xpb3MgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzLApkaWZmIC0tZ2l0IGEvbW0vZm9saW8uYyBiL21tL2ZvbGlvLmMKaW5kZXggNTBhNmRiZTU1OTk4ZS4uNDdhNDM3ZTBmN2ZkZSAxMDA2NDQKLS0tIGEvbW0vZm9saW8uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9mb2xpby5jCkBAIC0zNTQsMjYgJiM0MzszNTQsMjggQEAgc3RhdGljIHZvaWQgX19scnVfY2FjaGVfYWN0aXZhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykKIAogc3RhdGljIHZvaWQgbHJ1X2dlbl9pbmNfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewotCXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwomIzQzOwl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpOwomIzQzOwlpbnQgcmVmczsKIAogCWlmIChmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSkKIAkJcmV0dXJuOwogCiAJLyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovCi0JaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKSB7Ci0JCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTsKJiM0MzsJaWYgKCFmb2xpb19scnVfcmVmcyhmb2xpbykpIHsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7CiAJCXJldHVybjsKIAl9CiAKIAlkbyB7Ci0JCWlmICgob2xkX2ZsYWdzICZhbXA7IExSVV9SRUZTX01BU0spID09IExSVV9SRUZTX01BU0spIHsKJiM0MzsJCW5ld19mbGFncyA9IG9sZF9mbGFnczsKJiM0MzsJCXJlZnMgPSBscnVfZ2V0X3JlZnNfZmxhZ3Mob2xkX2ZsYWdzKTsKJiM0MzsJCWlmIChyZWZzID09IExSVV9SRUZTX01BWCkgewogCQkJaWYgKCFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKQogCQkJCWZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTsKIAkJCXJldHVybjsKIAkJfQotCi0JCW5ld19mbGFncyA9IG9sZF9mbGFncyAmIzQzOyBCSVQoTFJVX1JFRlNfUEdPRkYpOwotCX0gd2hpbGUgKCF0cnlfY21weGNoZygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiYjNDM7CQlscnVfc2V0X3JlZnNfZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIHJlZnMgJiM0MzsgMSk7CiYjNDM7CX0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksICZhbXA7b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTsKIH0KIAogc3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pCkBAIC0zODUsNyAmIzQzOzM4Nyw4IEBAIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCWlmIChnZW4gJmx0OyAwKQogCQlyZXR1cm4gdHJ1ZTsKIAotCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MgfCBCSVQoUEdfd29ya2luZ3NldCksIDApOwomIzQzOwlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwomIzQzOwlmb2xpb19jbGVhcl93b3JraW5nc2V0KGZvbGlvKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlzZXEgPSBSRUFEX09OQ0UoZm9saW9fbHJ1dmVjKGZvbGlvKS0mZ3Q7bHJ1Z2VuLm1pbl9zZXFbdHlwZV0pOwpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IGJkMWU3ZTE1NDQyNjUuLmYxN2IyYjJkNjEwNTUgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTE1MjksMjggJiM0MzsxNTI5LDEyIEBAIHZvaWQgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIGxydV9saXN0IGxydSwKIAkJCQlpbnQgemlkLCBsb25nIG5yX3BhZ2VzKQogewogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejsKLQl1bnNpZ25lZCBsb25nICpscnVfc2l6ZTsKLQlsb25nIHNpemU7CiAKIAlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKQogCQlyZXR1cm47CiAKIAlteiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpOwotCWxydV9zaXplID0gJmFtcDttei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6aWRdW2xydV07Ci0KLQlpZiAobnJfcGFnZXMgJmx0OyAwKQotCQkqbHJ1X3NpemUgJiM0Mzs9IG5yX3BhZ2VzOwotCi0Jc2l6ZSA9ICpscnVfc2l6ZTsKLQlpZiAoV0FSTl9PTkNFKHNpemUgJmx0OyAwLAotCQkmIzM0OyVzKCVwLCAlZCwgJWxkKTogbHJ1X3NpemUgJWxkXG4mIzM0OywKLQkJX19mdW5jX18sIGxydXZlYywgbHJ1LCBucl9wYWdlcywgc2l6ZSkpIHsKLQkJVk1fQlVHX09OKDEpOwotCQkqbHJ1X3NpemUgPSAwOwotCX0KLQotCWlmIChucl9wYWdlcyAmZ3Q7IDApCi0JCSpscnVfc2l6ZSAmIzQzOz0gbnJfcGFnZXM7CiYjNDM7CW16LSZndDtscnVfem9uZV9zaXplW3ppZF1bbHJ1XSAmIzQzOz0gbnJfcGFnZXM7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jCmluZGV4IDE1YjQ1ODMyYmNmYTcuLmEzNjlkMGM5NWMzODYgMTAwNjQ0Ci0tLSBhL21tL21pZ3JhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9taWdyYXRlLmMKQEAgLTc3Niw4ICYjNDM7Nzc2LDkgQEAgdm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJaW50IGNwdXBpZDsKIAotCWlmIChmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKQotCQlmb2xpb19zZXRfcmVmZXJlbmNlZChuZXdmb2xpbyk7CiYjNDM7CS8qIENvcHkgdGhlIHJlZmVyZW5jZSBzdGF0ZSwgaW5jbHVkaW5nIFBHX3JlZmVyZW5jZWQgKi8KJiM0MzsJZm9saW9fbWlncmF0ZV9scnVfcmVmcyhuZXdmb2xpbywgZm9saW8pOwomIzQzOwogCWlmIChmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSkKIAkJZm9saW9fbWFya191cHRvZGF0ZShuZXdmb2xpbyk7CiAJaWYgKGZvbGlvX3Rlc3RfY2xlYXJfYWN0aXZlKGZvbGlvKSkgewpAQCAtODA3LDcgJiM0Mzs4MDgsNiBAQCB2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbykKIAlpZiAoZm9saW9fdGVzdF9pZGxlKGZvbGlvKSkKIAkJZm9saW9fc2V0X2lkbGUobmV3Zm9saW8pOwogCi0JZm9saW9fbWlncmF0ZV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7CiAJLyoKIAkgKiBDb3B5IE5VTUEgaW5mb3JtYXRpb24gdG8gdGhlIG5ldyBwYWdlLCB0byBwcmV2ZW50IG92ZXItZWFnZXIKIAkgKiBmdXR1cmUgbWlncmF0aW9ucyBvZiB0aGlzIHNhbWUgcGFnZS4KZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggMjQ1ZjY4Yzc1YjI4OS4uNDBkM2YxYjQ4YTc0YyAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTg2MywxOSAmIzQzOzg2MywyMiBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpCiAJaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pICZhbXA7JmFtcDsgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpIHsKIAkJLyogQWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuICovCiAJCWlmIChpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIHZtYV9mbGFncykpIHsKLQkJCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7CiYjNDM7CQkJZm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pOwomIzQzOwkJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJfQogCi0JCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKIAkvKiBQcm9tb3RlIG9uIHNlY29uZCBhY2Nlc3MgKi8KLQlpZiAoZm9saW9fbHJ1X3JlZnMoZm9saW8pICZndDsgMSkKLQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTsKLQllbHNlCiYjNDM7CWlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgJmd0OyAxKSB7CiYjNDM7CQlmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7CiYjNDM7CQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwomIzQzOwl9IGVsc2UgewogCQlmb2xpb19tYXJrX2FjY2Vzc2VkKGZvbGlvKTsKJiM0MzsJfQogCXJldHVybiB0cnVlOwogfQogI2Vsc2UKQEAgLTMyMjAsOCAmIzQzOzMyMjMsOCBAQCBzdHJ1Y3QgY3RybF9wb3MgewogCWludCBnYWluOwogfTsKIAotc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllciwgaW50IGdhaW4sCi0JCQkgIHN0cnVjdCBjdHJsX3BvcyAqcG9zKQomIzQzO3N0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXJfbWluLAomIzQzOwkJCSAgaW50IHRpZXJfbWF4LCBpbnQgZ2Fpbiwgc3RydWN0IGN0cmxfcG9zICpwb3MpCiB7CiAJaW50IGk7CiAJc3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9ICZhbXA7bHJ1dmVjLSZndDtscnVnZW47CkBAIC0zMjMwLDcgJiM0MzszMjMzLDcgQEAgc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllciwgaW50IGdhaW4sCiAJcG9zLSZndDtnYWluID0gZ2FpbjsKIAlwb3MtJmd0O3JlZmF1bHRlZCA9IHBvcy0mZ3Q7dG90YWwgPSAwOwogCi0JZm9yIChpID0gdGllciAlIE1BWF9OUl9USUVSUzsgaSAmbHQ7PSBtaW4odGllciwgTUFYX05SX1RJRVJTIC0gMSk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CWZvciAoaSA9IHRpZXJfbWluOyBpICZsdDs9IHRpZXJfbWF4OyBpJiM0MzsmIzQzOykgewogCQlwb3MtJmd0O3JlZmF1bHRlZCAmIzQzOz0gbHJ1Z2VuLSZndDthdmdfcmVmYXVsdGVkW3R5cGVdW2ldICYjNDM7CiAJCQkJICBhdG9taWNfbG9uZ19yZWFkKCZhbXA7bHJ1Z2VuLSZndDtyZWZhdWx0ZWRbaGlzdF1bdHlwZV1baV0pOwogCQlwb3MtJmd0O3RvdGFsICYjNDM7PSBscnVnZW4tJmd0O2F2Z190b3RhbFt0eXBlXVtpXSAmIzQzOwpAQCAtMzI5MSwxMSAmIzQzOzMyOTQsMTEgQEAgc3RhdGljIGJvb2wgcG9zaXRpdmVfY3RybF9lcnIoc3RydWN0IGN0cmxfcG9zICpzcCwgc3RydWN0IGN0cmxfcG9zICpwdikKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qIHByb21vdGUgcGFnZXMgYWNjZXNzZWQgdGhyb3VnaCBwYWdlIHRhYmxlcyAqLwotc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpCiYjNDM7c3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBpbnQgKnR5cGUsCiYjNDM7CQkJICAgIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpCiB7Ci0JdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby0mZ3Q7ZmxhZ3MuZik7Ci0KLQlWTV9XQVJOX09OX09OQ0UoZ2VuICZndDs9IE1BWF9OUl9HRU5TKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTsKJiM0MzsJaW50IG9sZF9nZW47CiAKIAkvKgogCSAqIFNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUywgYW5kIGFjdGl2YXRlIGZpbGUtYmFja2VkCkBAIC0zMzA0LDMxICYjNDM7MzMwNywzNSBAQCBzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYQogCSAqLwogCWlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSAmYW1wOyZhbXA7ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pICZhbXA7JmFtcDsKIAkgICAgIWlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkgewotCQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7CiYjNDM7CQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJZG8gewomIzQzOwkJb2xkX2dlbiA9IGxydV9nZXRfZ2VuX2ZsYWdzKG9sZF9mbGFncyk7CiYjNDM7CQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7CiYjNDM7CiAJCS8qIGxydV9nZW5fZGVsX2ZvbGlvKCkgaGFzIGlzb2xhdGVkIHRoaXMgcGFnZT8gKi8KLQkJaWYgKCEob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykpCi0JCQlyZXR1cm4gLTE7CiYjNDM7CQlpZiAob2xkX2dlbiAmbHQ7IDApCiYjNDM7CQkJYnJlYWs7CiAKLQkJbmV3X2ZsYWdzID0gb2xkX2ZsYWdzICZhbXA7IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpOwotCQluZXdfZmxhZ3MgfD0gKChnZW4gJiM0MzsgMVVMKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGKSB8IEJJVChQR193b3JraW5nc2V0KTsKLQl9IHdoaWxlICghdHJ5X2NtcHhjaGcoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwomIzQzOwkJbHJ1X3NldF9nZW5fZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIG5ld19nZW4pOwomIzQzOwkJbHJ1X3NldF9yZWZzX2ZsYWdzKCZhbXA7bmV3X2ZsYWdzLCAwKTsKJiM0MzsJCW5ld19mbGFncyB8PSBCSVQoUEdfd29ya2luZ3NldCk7CiYjNDM7CX0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksICZhbXA7b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTsKIAotCXJldHVybiAoKG9sZF9mbGFncyAmYW1wOyBMUlVfR0VOX01BU0spICZndDsmZ3Q7IExSVV9HRU5fUEdPRkYpIC0gMTsKJiM0MzsJKnR5cGUgPSBmb2xpb19mbGFnc19pc19maWxlX2xydSgmYW1wO29sZF9mbGFncyk7CiYjNDM7CXJldHVybiBvbGRfZ2VuOwogfQogCiBzdGF0aWMgaW50IF9fZm9saW9faW5jX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX2dlbiwgYm9vbCAqaW5jcmVhc2VkKQogewotCXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwomIzQzOwl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpOwogCWludCBuZXdfZ2VuOwogCi0JVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCEob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSyksIGZvbGlvKTsKLQogCWRvIHsKLQkJbmV3X2dlbiA9ICgob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwomIzQzOwkJbmV3X2dlbiA9IGxydV9nZXRfZ2VuX2ZsYWdzKG9sZF9mbGFncyk7CiYjNDM7CiAJCS8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqLwogCQlpZiAobmV3X2dlbiAmZ3Q7PSAwICZhbXA7JmFtcDsgbmV3X2dlbiAhPSBvbGRfZ2VuKSB7CiAJCQlpZiAoaW5jcmVhc2VkKQpAQCAtMzMzNiwxMSAmIzQzOzMzNDMsMTIgQEAgc3RhdGljIGludCBfX2ZvbGlvX2luY19nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9nZW4sIGJvb2wgKmluY3JlYXNlZCkKIAkJCXJldHVybiBuZXdfZ2VuOwogCQl9CiAKJiM0MzsJCW5ld19mbGFncyA9IG9sZF9mbGFnczsKIAkJbmV3X2dlbiA9IChvbGRfZ2VuICYjNDM7IDEpICUgTUFYX05SX0dFTlM7CiAKLQkJbmV3X2ZsYWdzID0gb2xkX2ZsYWdzICZhbXA7IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpOwotCQluZXdfZmxhZ3MgfD0gKG5ld19nZW4gJiM0MzsgMVVMKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGOwotCX0gd2hpbGUgKCF0cnlfY21weGNoZygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiYjNDM7CQlscnVfc2V0X2dlbl9mbGFncygmYW1wO25ld19mbGFncywgbmV3X2dlbik7CiYjNDM7CQlscnVfc2V0X3JlZnNfZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIDApOwomIzQzOwl9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiAKIAlpZiAoaW5jcmVhc2VkKQogCQkqaW5jcmVhc2VkID0gdHJ1ZTsKQEAgLTMzNjIsOSAmIzQzOzMzNzAsOCBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogfQogCiBzdGF0aWMgdm9pZCB1cGRhdGVfYmF0Y2hfc2l6ZShzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAotCQkJICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuKQomIzQzOwkJCSAgICAgIGludCBvbGRfZ2VuLCBpbnQgbmV3X2dlbiwgaW50IHR5cGUpCiB7Ci0JaW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7CiAJaW50IHpvbmUgPSBmb2xpb196b25lbnVtKGZvbGlvKTsKIAlpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiAKQEAgLTM1NTEsMjIgJiM0MzszNTU4LDI0IEBAIHN0YXRpYyBib29sIHN1aXRhYmxlX3RvX3NjYW4oaW50IHRvdGFsLCBpbnQgeW91bmcpCiB9CiAKIHN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQlzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgYm9vbCBkaXJ0eSkKJiM0MzsJCXN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBkaXJ0eSkKIHsKLQlpbnQgb2xkX2dlbjsKJiM0MzsJaW50IG5ld19nZW4sIG9sZF9nZW4sIHR5cGU7CiAKIAlpZiAoIWZvbGlvKQogCQlyZXR1cm47CiAKJiM0MzsJbmV3X2dlbiA9IGxydV9nZW5fZnJvbV9zZXEoUkVBRF9PTkNFKGxydXZlYy0mZ3Q7bHJ1Z2VuLm1heF9zZXEpKTsKJiM0MzsKIAlpZiAoZGlydHkgJmFtcDsmYW1wOyAhZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgJmFtcDsmYW1wOwogCSAgICAhKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgJmFtcDsmYW1wOyBmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pICZhbXA7JmFtcDsKIAkgICAgICAhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSkKIAkJZm9saW9fbWFya19kaXJ0eShmb2xpbyk7CiAKIAlpZiAod2FsaykgewotCQlvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgJmFtcDt2bWEtJmd0O2ZsYWdzKTsKJiM0MzsJCW9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuLCAmYW1wO3R5cGUsICZhbXA7dm1hLSZndDtmbGFncyk7CiAJCWlmIChvbGRfZ2VuICZndDs9IDAgJmFtcDsmYW1wOyBvbGRfZ2VuICE9IG5ld19nZW4pCi0JCQl1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7CiYjNDM7CQkJdXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4sIHR5cGUpOwogCX0gZWxzZSBpZiAobHJ1X2dlbl9zZXRfcmVmcyhmb2xpbywgJmFtcDt2bWEtJmd0O2ZsYWdzKSkgewogCQlvbGRfZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7CiAJCWlmIChvbGRfZ2VuICZndDs9IDAgJmFtcDsmYW1wOyBvbGRfZ2VuICE9IG5ld19nZW4pCkBAIC0zNTg4LDggJiM0MzszNTk3LDYgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtJmd0O3ByaXZhdGU7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKHdhbGstJmd0O2xydXZlYyk7CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdCh3YWxrLSZndDtscnV2ZWMpOwotCURFRklORV9NQVhfU0VRKHdhbGstJmd0O2xydXZlYyk7Ci0JaW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7CiAJdW5zaWduZWQgaW50IG5yOwogCXBtZF90IHBtZHZhbDsKIApAQCAtMzY0MCw3ICYjNDM7MzY0Nyw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJY29udGludWU7CiAKIAkJaWYgKGxhc3QgIT0gZm9saW8pIHsKLQkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtJmd0O3ZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CQkJd2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy0mZ3Q7dm1hLCB3YWxrLSZndDtscnV2ZWMsIGxhc3QsIGRpcnR5KTsKIAogCQkJbGFzdCA9IGZvbGlvOwogCQkJZGlydHkgPSBmYWxzZTsKQEAgLTM2NTMsNyAmIzQzOzM2NjAsNyBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJd2Fsay0mZ3Q7bW1fc3RhdHNbTU1fTEVBRl9ZT1VOR10gJiM0Mzs9IG5yOwogCX0KIAotCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtJmd0O3ZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtJmd0O3ZtYSwgd2Fsay0mZ3Q7bHJ1dmVjLCBsYXN0LCBkaXJ0eSk7CiAJbGFzdCA9IE5VTEw7CiAKIAlpZiAoaSAmbHQ7IFBUUlNfUEVSX1BURSAmYW1wOyZhbXA7IGdldF9uZXh0X3ZtYShQTURfTUFTSywgUEFHRV9TSVpFLCBhcmdzLCAmYW1wO3N0YXJ0LCAmYW1wO2VuZCkpCkBAIC0zNjc2LDggJiM0MzszNjgzLDYgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWEKIAlzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy0mZ3Q7cHJpdmF0ZTsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay0mZ3Q7bHJ1dmVjKTsKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstJmd0O2xydXZlYyk7Ci0JREVGSU5FX01BWF9TRVEod2Fsay0mZ3Q7bHJ1dmVjKTsKLQlpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTsKIAogCVZNX1dBUk5fT05fT05DRShwdWRfbGVhZigqcHVkKSk7CiAKQEAgLTM3MzEsNyAmIzQzOzM3MzYsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYQogCQkJZ290byBuZXh0OwogCiAJCWlmIChsYXN0ICE9IGZvbGlvKSB7Ci0JCQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay0mZ3Q7bHJ1dmVjLCBsYXN0LCBkaXJ0eSk7CiAKIAkJCWxhc3QgPSBmb2xpbzsKIAkJCWRpcnR5ID0gZmFsc2U7CkBAIC0zNzQ1LDcgJiM0MzszNzUwLDcgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWEKIAkJaSA9IGkgJmd0OyBNSU5fTFJVX0JBVENIID8gMCA6IGZpbmRfbmV4dF9iaXQoYml0bWFwLCBNSU5fTFJVX0JBVENILCBpKSAmIzQzOyAxOwogCX0gd2hpbGUgKGkgJmx0Oz0gTUlOX0xSVV9CQVRDSCk7CiAKLQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIHdhbGstJmd0O2xydXZlYywgbGFzdCwgZGlydHkpOwogCiAJbGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7CiAJc3Bpbl91bmxvY2socHRsKTsKQEAgLTQzNTEsOCAmIzQzOzQzNTYsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpCiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGZvbGlvX3BnZGF0KGZvbGlvKTsKIAlzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7CiAJc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlOwotCXVuc2lnbmVkIGxvbmcgbWF4X3NlcTsKLQlpbnQgZ2VuOwogCiAJbG9ja2RlcF9hc3NlcnRfaGVsZChwdm13LSZndDtwdGwpOwogCVZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2xydShmb2xpbyksIGZvbGlvKTsKQEAgLTQzODksOCAmIzQzOzQzOTIsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpCiAKIAltZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pOwogCWxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7Ci0JbWF4X3NlcSA9IFJFQURfT05DRSgobHJ1dmVjKS0mZ3Q7bHJ1Z2VuLm1heF9zZXEpOwotCWdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7CiAJbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTsKIAogCWxhenlfbW11X21vZGVfZW5hYmxlKCk7CkBAIC00NDIyLDcgJiM0Mzs0NDIzLDcgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKQogCQkJY29udGludWU7CiAKIAkJaWYgKGxhc3QgIT0gZm9saW8pIHsKLQkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CQkJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTsKIAogCQkJbGFzdCA9IGZvbGlvOwogCQkJZGlydHkgPSBmYWxzZTsKQEAgLTQ0MzQsMTMgJiM0Mzs0NDM1LDE0IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucikKIAkJeW91bmcgJiM0Mzs9IG5yOwogCX0KIAotCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7CiAKIAlsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTsKIAogCS8qIGZlZWRiYWNrIGZyb20gcm1hcCB3YWxrZXJzIHRvIHBhZ2UgdGFibGUgd2Fsa2VycyAqLwogCWlmIChtbV9zdGF0ZSAmYW1wOyZhbXA7IHN1aXRhYmxlX3RvX3NjYW4oaSwgeW91bmcpKQotCQl1cGRhdGVfYmxvb21fZmlsdGVyKG1tX3N0YXRlLCBtYXhfc2VxLCBwdm13LSZndDtwbWQpOwomIzQzOwkJdXBkYXRlX2Jsb29tX2ZpbHRlcihtbV9zdGF0ZSwgUkVBRF9PTkNFKGxydXZlYy0mZ3Q7bHJ1Z2VuLm1heF9zZXEpLAomIzQzOwkJCQkgICAgcHZtdy0mZ3Q7cG1kKTsKIAogCW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKIApAQCAtNDc4NSw3ICYjNDM7NDc4Nyw3IEBAIHN0YXRpYyBib29sIGlzb2xhdGVfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2NhCiAKIAkvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi8KIAlpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpCi0JCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgMCk7CiYjNDM7CQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwogCiAJc3VjY2VzcyA9IGxydV9nZW5fZGVsX2ZvbGlvKGxydXZlYywgZm9saW8sIHRydWUpOwogCVZNX1dBUk5fT05fT05DRV9GT0xJTyghc3VjY2VzcywgZm9saW8pOwpAQCAtNDg3OCw5ICYjNDM7NDg4MCw5IEBAIHN0YXRpYyBpbnQgZ2V0X3RpZXJfaWR4KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUpCiAJICogVGhpcyB2YWx1ZSBpcyBjaG9zZW4gYmVjYXVzZSBhbnkgb3RoZXIgdGllciB3b3VsZCBoYXZlIGF0IGxlYXN0IHR3aWNlCiAJICogYXMgbWFueSByZWZhdWx0cyBhcyB0aGUgZmlyc3QgdGllci4KIAkgKi8KLQlyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgMCwgMiwgJmFtcDtzcCk7Ci0JZm9yICh0aWVyID0gMTsgdGllciAmbHQ7IE1BWF9OUl9USUVSUzsgdGllciYjNDM7JiM0MzspIHsKLQkJcmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIDMsICZhbXA7cHYpOwomIzQzOwlyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NSU4sIDIsICZhbXA7c3ApOwomIzQzOwlmb3IgKHRpZXIgPSBMUlVfVElFUl9NSU4gJiM0MzsgMTsgdGllciAmbHQ7PSBMUlVfVElFUl9NQVg7IHRpZXImIzQzOyYjNDM7KSB7CiYjNDM7CQlyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdGllciwgdGllciwgMywgJmFtcDtwdik7CiAJCWlmICghcG9zaXRpdmVfY3RybF9lcnIoJmFtcDtzcCwgJmFtcDtwdikpCiAJCQlicmVhazsKIAl9CkBAIC00OTAxLDggJiM0Mzs0OTAzLDEwIEBAIHN0YXRpYyBpbnQgZ2V0X3R5cGVfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKQogCSAqIENvbXBhcmUgdGhlIHN1bSBvZiBhbGwgdGllcnMgb2YgYW5vbiB3aXRoIHRoYXQgb2YgZmlsZSB0byBkZXRlcm1pbmUKIAkgKiB3aGljaCB0eXBlIHRvIHNjYW4uCiAJICovCi0JcmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fQU5PTiwgTUFYX05SX1RJRVJTLCBzd2FwcGluZXNzLCAmYW1wO3NwKTsKLQlyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBNQVhfTlJfVElFUlMsIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgJmFtcDtwdik7CiYjNDM7CXJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUFYLAomIzQzOwkJICAgICAgc3dhcHBpbmVzcywgJmFtcDtzcCk7CiYjNDM7CXJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUFYLAomIzQzOwkJICAgICAgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCAmYW1wO3B2KTsKIAogCXJldHVybiBwb3NpdGl2ZV9jdHJsX2VycigmYW1wO3NwLCAmYW1wO3B2KTsKIH0KQEAgLTUwMTcsOCAmIzQzOzUwMjEsMTAgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCX0KIAogCQkvKiBkb24mIzM5O3QgYWRkIHJlamVjdGVkIGZvbGlvcyB0byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gKi8KLQkJaWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKQotCQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX2FjdGl2ZSkpOwomIzQzOwkJaWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKSB7CiYjNDM7CQkJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTsKJiM0MzsJCQlmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTsKJiM0MzsJCX0KIAl9CiAKIAltb3ZlX2ZvbGlvc190b19scnUoJmFtcDtsaXN0KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTg2CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjA5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIFNlc3Npb24gSnVzdGlmaWNhdGlvbiBBbmFseXNpcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgd2UgbmVlZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gb24gdG9wIG9mIG91ciBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLiBNeSBmb2N1cywgYXMgYWx3YXlzLCBpcyBvbiBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Igd3JpdGVzIHRoYXQgY291bGQgYmUgZXhwb3NlZCB0byB1c2Vyc3BhY2UuCgpGaXJzdCwgSSBzZWUgY2hhbmdlcyBpbiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLCBzcGVjaWZpY2FsbHkgY2hhbmdpbmcgYW4gYXJyYXkmIzM5O3MgdHlwZSBpbiBgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGVgLiBUaGVyZSYjMzk7cyBhbHNvIGEgY2hlY2sgYW5kIHJldHVybiBvZiBgMGAgaWYgYSB2YWx1ZSBpcyBuZWdhdGl2ZS4gVGhpcyBkb2VzbiYjMzk7dCBzZWVtIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBkYXRhIHNlbnQgdG8gdXNlcnNwYWNlLCBzbyBJJiMzOTttIG5vdCBvdmVybHkgY29uY2VybmVkIGhlcmUuCgpUaGUgY2hhbmdlcyBpbiBgaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaGAsIGRlZmluaW5nIGBmb2xpb19mbGFnc19pc19maWxlX2xydWAgYW5kIHJlZmFjdG9yaW5nIExSVSBnZW5lcmF0aW9uIGFuZCBmbGFncyBtYW5pcHVsYXRpb24sIGFyZSBpbnRlcmVzdGluZyBidXQgbGlrZWx5IGludGVybmFsLiAgVGhleSBtb3N0bHkgZGVhbCB3aXRoIGJpdCBtYW5pcHVsYXRpb24gYW5kIGludGVybmFsIHN0cnVjdCBmbGFnIHNldHRpbmdzLiBTdGlsbCwgSSYjMzk7bGwgbmVlZCB0byBrZWVwIHRoaXMgaW4gbWluZCBhcyBJIGxvb2sgYXQgdGhlIGxhcmdlciBjYWxsIGNoYWlucywgYnV0IHRoaXMgbG9va3MgbGlrZSBhbiBpbnRlcm5hbCByZWZhY3Rvci4KCmBpbmNsdWRlL2xpbnV4L21tem9uZS5oYCBqdXN0IGRlZmluZXMgc29tZSBjb25zdGFudHMsIHNvIG5vIGltbWVkaWF0ZSByZWQgZmxhZ3MgdGhlcmUuCgpJbiBgbW0vZm9saW8uY2AsIGBscnVfZ2VuX2luY19yZWZzYCBhbmQgYGxydV9nZW5fY2xlYXJfcmVmc2AgdXRpbGl6ZSB0aGUgZmxhZyBtYW5pcHVsYXRpb24gZnVuY3Rpb25zLiBBZ2FpbiwgdGhlIHBvdGVudGlhbCBwcm9ibGVtIGRlcGVuZHMgb24gaWYgdGhlIGZsYWdzIGFyZSBpbml0aWFsaXplZC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGUgdXNlIG9mIHRob3NlIGZ1bmN0aW9ucy4KCmBtbS9tZW1jb250cm9sLmNgIHNpbXBsaWZpZXMgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYC4gVGhpcyAqY291bGQqIGJlIGEgdmVjdG9yIGZvciB1bmluaXRpYWxpemVkIGRhdGEsIGJ1dCBpdCBzZWVtcyB0byBkaXJlY3RseSB1cGRhdGUgYSBrbm93biBsb2NhdGlvbi4gIEkmIzM5O2xsIHN0aWxsIGtlZXAgYW4gZXllIG9uIHRoaXMgYXMgSSBsb29rIGZvciB1cHN0cmVhbSBkYXRhLgoKVGhlIGBtbS9taWdyYXRlLmNgIGNoYW5nZSwgYGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnNgLCBpcyBhIHJlZmFjdG9yIG9mIHRoZSBgZm9saW9fbWlncmF0ZV9yZWZzYCBmdW5jdGlvbiBhbmQgc2hvdWxkIGJlIHNhZmUuCgpGaW5hbGx5LCB3ZSYjMzk7cmUgYXQgYG1tL3Ztc2Nhbi5jYC4gIFRoZSBzaWduYXR1cmUgY2hhbmdlIG9mIGBmb2xpb191cGRhdGVfZ2VuYCBhbmQgYSBuZXcgb3V0LXBhcmFtZXRlciBgaW50ICp0eXBlYCBpcyB3aGF0IGhhcyBteSBhdHRlbnRpb24hICBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBpbml0aWFsaXphdGlvbiBvZiBgKnR5cGVgLgoKSSBkb3ZlIGludG8gYGZvbGlvX3VwZGF0ZV9nZW5gIGFuZCBmb3VuZCBhIGNvbmRpdGlvbmFsIHJldHVybiB3aGVyZSBgKnR5cGVgIG1pZ2h0IG5vdCBiZSBzZXQ6IHRoZSBpbml0aWFsIGBpZmAgc3RhdGVtZW50LiBCdXQgSSB0cmFjZWQgaXQgYmFjay4gIElmIHRoZSBmaXJzdCBjaGVjayByZXR1cm5zIGAtMWAsIGl0IHNldHMgdGhlIHJlZnMgYW5kIHJldHVybnMgYC0xYC4gVGhlIGB3YWxrX3VwZGF0ZV9mb2xpb2AgY2FsbGVyIHdpbGwgKm5vdCogdXNlIGB0eXBlYC4gIEhvd2V2ZXIsIGlmIHRoZSBgaWZgIGNoZWNrIGRvZXMgKm5vdCogaGFwcGVuLCBgdHlwZWAgaXMgQUxXQVlTIHdyaXR0ZW4gdG8gYmVjYXVzZSBvZiB0aGUgbG9naWMgd2l0aGluIHRoZSBgZG8uLi53aGlsZWAgbG9vcCBhbmQgdGhlIHJldHVybi4gIFNvLCBpbiBhbGwgY2FzZXMgYHR5cGVgIGlzIHNldC4KCkZ1cnRoZXJtb3JlLCBgdHlwZWAgaXMgb25seSAqdXNlZCogaW4gYHdhbGtfdXBkYXRlX2ZvbGlvYCB3aGVuIGBvbGRfZ2VuICZndDs9IDAgJmFtcDsmYW1wOyBvbGRfZ2VuICE9IG5ld19nZW5gLiAgSW4gdGhpcyBjYXNlLCBgdHlwZWAgaXMgZ3VhcmFudGVlZCB0byBoYXZlIGJlZW4gc2V0IHdoZW4gY2FsbGluZyBgdXBkYXRlX2JhdGNoX3NpemVgLgoKR2l2ZW4gbXkgYW5hbHlzaXMsIEkgYW0gbm90IHNlZWluZyBhbnkgY2xlYXIgS01TQU4tdHJpZ2dlcmluZyBpc3N1ZXMgaGVyZS4gTm8gb2J2aW91cyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHMsIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlIG5ldyBjb2RlIGRvZXMgbm90IHNlZW0gdG8gaW50cm9kdWNlIG5ldyBwYXRocyB0aGF0IGNvdWxkIHRyaWdnZXIgaXNzdWVzLgoKVGhlcmVmb3JlLCBiYXNlZCBvbiBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgcGF0Y2ggYW5kIHRoZSBydWxlLCBJIGJlbGlldmUgdGhhdCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZCBpbiBhZGRpdGlvbiB0byBvdXIgZXhpc3RpbmcgS0FTQU4gZnV6emluZyBmb3IgdGhpcyBwYXRjaC4gSSByZWNvbW1lbmQgcHJvY2VlZGluZyB3aXRoIEtBU0FOIGZ1enppbmcgYXMgdXN1YWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZvbGlvX3VwZGF0ZV9nZW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD0zMDE9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydV9nZW5fZm9saW9fc2VxKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTMxMS1cdCAqIHwgQWNjZXNzZWQgdGhyb3VnaCBwYWdlIHRhYmxlcyBhbmQgIHwgQWNjZXNzZWQgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzIHxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6MzEyOlx0ICogfCBwcm9tb3RlZCBieSBmb2xpb191cGRhdGVfZ2VuKCkgICAgfCBhbmQgcHJvdGVjdGVkIGJ5IGZvbGlvX2luY19nZW4oKSAgfFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0zMTMtXHQgKiAmIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSYjNDM7XG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD00Mjc9ZW51bSBscnV2ZWNfZmxhZ3Mge1xuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtNTE2LSAqXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjUxNzogKiBGb3IgZm9saW9zIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggcGFnZSB0YWJsZXMsIGZvbGlvX3VwZGF0ZV9nZW4oKVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC01MTgtICogZnJvbSBhIHBhZ2UgdGFibGUgd2FsayBvciBscnVfZ2VuX3NldF9yZWZzKCkgZnJvbSBhIHJtYXAgd2FsayBzZXRzXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC01MjAtICogVGhlcmVhZnRlciwgdGhvc2UgdHdvIHBhdGhzIHNldCBQR193b3JraW5nc2V0IGFuZCBwcm9tb3RlIGZvbGlvcyB0byB0aGVcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NTIxOiAqIHlvdW5nZXN0IGdlbmVyYXRpb24uIExpa2UgZm9saW9faW5jX2dlbigpLCBmb2xpb191cGRhdGVfZ2VuKCkgYWxzbyBjbGVhcnNcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNTIyLSAqIFBHX3JlZmVyZW5jZWQuIE5vdGUgdGhhdCBmb3IgdGhpcyBjYXNlLCBMUlVfUkVGU19NQVNLIGlzIG5vdCB1c2VkLlxuLS1cbm1tL3Ztc2Nhbi5jPTg0Nz1lbnVtIGZvbGlvX3JlZmVyZW5jZXMge1xuLS1cbm1tL3Ztc2Nhbi5jLTg1Ny0gKiB3aXRoIFBHX2FjdGl2ZSBzZXQuIEluIGNvbnRyYXN0LCB0aGUgYWdpbmcgKHBhZ2UgdGFibGUgd2FsaykgcGF0aCB1c2VzXG5tbS92bXNjYW4uYzo4NTg6ICogZm9saW9fdXBkYXRlX2dlbigpLlxubW0vdm1zY2FuLmMtODU5LSAqL1xuLS1cbm1tL3Ztc2Nhbi5jPTMyODE9c3RhdGljIGJvb2wgcG9zaXRpdmVfY3RybF9lcnIoc3RydWN0IGN0cmxfcG9zICpzcCwgc3RydWN0IGN0cmxfcG9zICpwdilcbi0tXG5tbS92bXNjYW4uYy0zMjk2LS8qIHByb21vdGUgcGFnZXMgYWNjZXNzZWQgdGhyb3VnaCBwYWdlIHRhYmxlcyAqL1xubW0vdm1zY2FuLmM6MzI5NzpzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGludCAqdHlwZSxcbm1tL3Ztc2Nhbi5jLTMyOTgtXHRcdFx0ICAgIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4tLVxubW0vdm1zY2FuLmM9MzMzMT1zdGF0aWMgaW50IF9fZm9saW9faW5jX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX2dlbiwgYm9vbCAqaW5jcmVhc2VkKVxuLS1cbm1tL3Ztc2Nhbi5jLTMzMzgtXG5tbS92bXNjYW4uYzozMzM5Olx0XHQvKiBmb2xpb191cGRhdGVfZ2VuKCkgaGFzIHByb21vdGVkIHRoaXMgcGFnZT8gKi9cbm1tL3Ztc2Nhbi5jLTMzNDAtXHRcdGlmIChuZXdfZ2VuIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgbmV3X2dlbiAhPSBvbGRfZ2VuKSB7XG4tLVxubW0vdm1zY2FuLmM9MzU2MD1zdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS92bXNjYW4uYy0zNTc1LVx0aWYgKHdhbGspIHtcbm1tL3Ztc2Nhbi5jOjM1NzY6XHRcdG9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuLCBcdTAwMjZ0eXBlLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpO1xubW0vdm1zY2FuLmMtMzU3Ny1cdFx0aWYgKG9sZF9nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjgwCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNjE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBgcmVhZF9jdHJsX3Bvc2AgYW5kIGl0cyBVc2FnZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biBob3cgYHJlYWRfY3RybF9wb3NgIGlzIGJlaW5nIHVzZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBpbiB0aGUgY29udGV4dCBvZiB0aGVzZSBmdW5jdGlvbnMuIEZyb20gdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2UgYHJlYWRfY3RybF9wb3NgIGdldHMgY2FsbGVkIGluIHR3byBrZXkgZnVuY3Rpb25zOiBgZ2V0X3RpZXJfaWR4YCBhbmQgYGdldF90eXBlX3RvX3NjYW5gLiAKCkluIGBnZXRfdGllcl9pZHhgLCBpdCYjMzk7cyBjYWxsZWQgdHdpY2UuIFRoZSBmaXJzdCBjYWxsIHNldHMgdXAgYW4gaW5pdGlhbCBwb3NpdGlvbiwgdXNpbmcgYExSVV9USUVSX01JTmAuIFRoZSBzZWNvbmQgY2FsbCBpdGVyYXRlcyB0aHJvdWdoIHRpZXJzLCBmcm9tIGBMUlVfVElFUl9NSU4gJiM0MzsgMWAgdXAgdG8gYExSVV9USUVSX01BWGAsIGFuZCBpdCBsb29rcyBsaWtlIGEgY29tcGFyaXNvbiBpcyBtYWRlIHdpdGggdGhlIGhlbHAgb2YgYHBvc2l0aXZlX2N0cmxfZXJyYCwgd2hpY2ggSSYjMzk7bGwgbmVlZCB0byBjaGVjayBhcyB3ZWxsLgoKSW4gYGdldF90eXBlX3RvX3NjYW5gLCBgcmVhZF9jdHJsX3Bvc2AgaXMgY2FsbGVkIGZvciBib3RoIGBMUlVfR0VOX0FOT05gIGFuZCBgTFJVX0dFTl9GSUxFYCwgd2l0aCBzb21lIGxvZ2ljIHJlbGF0ZWQgdG8gYHN3YXBwaW5lc3NgLiBUaGlzIGlzIHdoZXJlIHRoZSBmdW5jdGlvbiBpcyBmZXRjaGluZyBkYXRhIGZvciBkaWZmZXJlbnQgdHlwZXMgb2YgTFJVIGVudHJpZXMuCgpOb3csIGZvY3VzaW5nIG9uIHRoZSBgcmVhZF9jdHJsX3Bvc2AgZnVuY3Rpb24gaXRzZWxmLiBJdCB0YWtlcyBhIGBzdHJ1Y3QgbHJ1dmVjYCwgYW4gaW50ZWdlciBgdHlwZWAsIGFuZCB0d28gdGllcnMgYXMgaW5wdXRzLCBhbmQgYWxzbyBhIGdhaW4gdmFsdWUuIEl0IHRoZW4gaXRlcmF0ZXMgdGhyb3VnaCB0aGUgdGllcnMgZnJvbSBgdGllcl9taW5gIHRvIGB0aWVyX21heGAuIFdpdGhpbiB0aGUgbG9vcCwgaXQgY2FsY3VsYXRlcyBhIHN1bSBvZiBgcmVmYXVsdGVkYCBhbmQgYHRvdGFsYCB2YWx1ZXMsIHdoaWNoIGFyZSB1c2VkIHRvIHVwZGF0ZSB0aGUgYHBvc2Agc3RydWN0dXJlLiBgcG9zYCBpcyBhIGBzdHJ1Y3QgY3RybF9wb3NgIHdoaWNoLCBpbXBvcnRhbnRseSwgaXMgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBpbiB0aGUgY2FsbGluZyBmdW5jdGlvbnMuIFRoZSBjb2RlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZXMgYHBvcy0mZ3Q7Z2FpbmAsIGBwb3MtJmd0O3JlZmF1bHRlZGAsIGFuZCBgcG9zLSZndDt0b3RhbGAgd2l0aGluIGByZWFkX2N0cmxfcG9zYC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhhdCBgZ2FpbmAgcGFyYW1ldGVyIGFuZCBob3cgaXQgaW5mbHVlbmNlcyB0aGUgYGN0cmxfcG9zYCBzdHJ1Y3QuCgpTbywgSSBuZWVkIHRvIGNoZWNrIGlmIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBlbHNld2hlcmUsIGFuZCBJIHNob3VsZCByZWFsbHkgbG9vayBhdCBob3cgdGhlIGBjdHJsX3Bvc2Agc3RydWN0IGlzIGJlaW5nIHVzZWQgYWZ0ZXIgdGhlIGNhbGxzIHRvIGByZWFkX2N0cmxfcG9zYCB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCBkYXRhIG1lYW5zIGluIHRoZSBsYXJnZXIgY29udGV4dC4gQWxzbywgSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgYGxydV9oaXN0X2Zyb21fc2VxYCBkb2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWFkX2N0cmxfcG9zJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTMyMjA9c3RydWN0IGN0cmxfcG9zIHtcbi0tXG5tbS92bXNjYW4uYy0zMjI1LVxubW0vdm1zY2FuLmM6MzIyNjpzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyX21pbixcbm1tL3Ztc2Nhbi5jLTMyMjctXHRcdFx0ICBpbnQgdGllcl9tYXgsIGludCBnYWluLCBzdHJ1Y3QgY3RybF9wb3MgKnBvcylcbi0tXG5tbS92bXNjYW4uYz00ODczPXN0YXRpYyBpbnQgZ2V0X3RpZXJfaWR4KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUpXG4tLVxubW0vdm1zY2FuLmMtNDg4Mi1cdCAqL1xubW0vdm1zY2FuLmM6NDg4MzpcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01JTiwgMiwgXHUwMDI2c3ApO1xubW0vdm1zY2FuLmMtNDg4NC1cdGZvciAodGllciA9IExSVV9USUVSX01JTiAmIzQzOyAxOyB0aWVyIFx1MDAzYz0gTFJVX1RJRVJfTUFYOyB0aWVyJiM0MzsmIzQzOykge1xubW0vdm1zY2FuLmM6NDg4NTpcdFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIHRpZXIsIDMsIFx1MDAyNnB2KTtcbm1tL3Ztc2Nhbi5jLTQ4ODYtXHRcdGlmICghcG9zaXRpdmVfY3RybF9lcnIoXHUwMDI2c3AsIFx1MDAyNnB2KSlcbi0tXG5tbS92bXNjYW4uYz00ODkzPXN0YXRpYyBpbnQgZ2V0X3R5cGVfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jLTQ5MDUtXHQgKi9cbm1tL3Ztc2Nhbi5jOjQ5MDY6XHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCxcbm1tL3Ztc2Nhbi5jLTQ5MDctXHRcdCAgICAgIHN3YXBwaW5lc3MsIFx1MDAyNnNwKTtcbm1tL3Ztc2Nhbi5jOjQ5MDg6XHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCxcbm1tL3Ztc2Nhbi5jLTQ5MDktXHRcdCAgICAgIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgXHUwMDI2cHYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjkyNwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDY4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTFJVIFJlZmVyZW5jZSBNaWdyYXRpb24gYW5kIE1lbW9yeSBDZ3JvdXAgTFJVIFNpemUgVXBkYXRlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gaG93IExSVSByZWZlcmVuY2VzIGFyZSBoYW5kbGVkIGR1cmluZyBmb2xpbyBtaWdyYXRpb24gYW5kIGhvdyB0aGVzZSB1cGRhdGVzIGludGVyYWN0IHdpdGggbWVtb3J5IGNncm91cCBMUlUgc2l6ZSB0cmFja2luZy4gRmlyc3QsIEkgbmVlZCB0byBjaGVjayB0aGUgYGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnNgIGZ1bmN0aW9uLiBJIHNlZSBpbiBgaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaGAgdGhhdCB0aGVyZSYjMzk7cyBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBJZiBgQ09ORklHX0xSVV9HRU5gIGlzIGRlZmluZWQsIHRoZSBmdW5jdGlvbiBzaW1wbHkgY29waWVzIHRoZSBMUlUgcmVmZXJlbmNlIGJpdHMgZGlyZWN0bHkuICBIb3dldmVyLCBpZiBgQ09ORklHX0xSVV9HRU5gIGlzICpub3QqIGRlZmluZWQsIGl0IHNlZW1zIHRvIG9ubHkgY29weSB0aGUgYFBHX3JlZmVyZW5jZWRgIGJpdCwgc3VnZ2VzdGluZyBhbiBvbGRlciBhcHByb2FjaC4gVGhlIGBCVUlMRF9CVUdfT05gIGVuc3VyZXMgbm8gb3ZlcmxhcCBvZiB0aGUgbWFzay4gTm93LCBsb29raW5nIGF0IGBtbS9taWdyYXRlLmNgLCBgZm9saW9fbWlncmF0ZV9mbGFnc2AgY2FsbHMgYGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnNgIHRvIHBlcmZvcm0gdGhlIGFjdHVhbCBjb3B5aW5nIG9mIHRoaXMgcmVmZXJlbmNlZCBzdGF0ZSBkdXJpbmcgZm9saW8gbWlncmF0aW9uLiBUaGlzIGlzIGVzc2VudGlhbCBmb3IgbWFpbnRhaW5pbmcgdGhlIGNvcnJlY3QgTFJVIHN0YXRlIGFmdGVyIGEgcGFnZSBtb3ZlLgoKTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggbWVtb3J5IGNncm91cCBMUlUgYWNjb3VudGluZy4gSSBoYXZlIHRvIGxvb2sgYXQgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCBhbmQgYG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemVgLiBUaGVzZSBmdW5jdGlvbnMgc2VlbSB0byBiZSBjb3JlIHRvIHRyYWNraW5nIHRoZSBzaXplIG9mIHRoZSBMUlUgbGlzdHMgd2l0aGluIGVhY2ggbWVtb3J5IGNncm91cC4gVGhlIGBtZW1fY2dyb3VwX3Blcl9ub2RlYCBzdHJ1Y3R1cmUsIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYCwgY29udGFpbnMgdGhlIGBscnVfem9uZV9zaXplYCBhcnJheSB3aGljaCBhcHBlYXJzIHRvIHRyYWNrIHRoZSBzaXplIG9mIGVhY2ggTFJVIGxpc3QsIHBlciB6b25lLCB3aXRoaW4gYSBtZW1vcnkgY2dyb3VwIG5vZGUuICBgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZWAgcmVhZHMgdGhpcyBhcnJheS4gSXQgdXNlcyBgUkVBRF9PTkNFYCBmb3IgYXRvbWljIHJlYWRzIHRvIHByZXZlbnQgaXNzdWVzIHdpdGggY29uY3VycmVuY3kgYW5kIHRoZSBgV0FSTl9PTl9PTkNFYCBvZmZlcnMgYW4gZXh0cmEgc2FmZWd1YXJkIHNob3VsZCB0aGUgc2l6ZSB0dXJuIG5lZ2F0aXZlLiBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgIG1vZGlmaWVzIHRoaXMgY291bnRlciwgYWRkaW5nIG9yIHN1YnRyYWN0aW5nIHBhZ2UgY291bnRzLCBhbmQgaGFzIGEgZ3VhcmQgYWdhaW5zdCBkaXNhYmxlZCBtZW1vcnkgY2dyb3Vwcy4KCkZpbmFsbHksIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiBgZm9saW9fZmxhZ3NgIGlzIGEgc3RhbmRhcmQgaW5saW5lIGZ1bmN0aW9uIHdpdGhpbiB0aGUga2VybmVsLiBJJiMzOTtsbCB1c2UgYGdyZXBgIHRvIHF1aWNrbHkgY29uZmlybSB0aGlzLCBhcyBJIGV4cGVjdCBpdCB3aWxsIGJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAxNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb19mbGFnc1xcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3NoL21tL2NhY2hlLXNoNC5jPTIxND1zdGF0aWMgdm9pZCBzaDRfZmx1c2hfY2FjaGVfcGFnZSh2b2lkICphcmdzKVxuLS1cbmFyY2gvc2gvbW0vY2FjaGUtc2g0LmMtMjQ5LVx0XHRtYXBfY29oZXJlbnQgPSAoY3VycmVudF9jcHVfZGF0YS5kY2FjaGUubl9hbGlhc2VzIFx1MDAyNlx1MDAyNlxuYXJjaC9zaC9tbS9jYWNoZS1zaDQuYzoyNTA6XHRcdFx0dGVzdF9iaXQoUEdfZGNhY2hlX2NsZWFuLCBmb2xpb19mbGFncyhmb2xpbywgMCkpIFx1MDAyNlx1MDAyNlxuYXJjaC9zaC9tbS9jYWNoZS1zaDQuYy0yNTEtXHRcdFx0Zm9saW9fbWFwcGVkKGZvbGlvKSk7XG4tLVxuYXJjaC94dGVuc2EvbW0vY2FjaGUuYz04OD12b2lkIGNsZWFyX3VzZXJfaGlnaHBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgdmFkZHIpXG4tLVxuYXJjaC94dGVuc2EvbW0vY2FjaGUuYy05NS1cdGttYXBfaW52YWxpZGF0ZV9jb2hlcmVudChwYWdlLCB2YWRkcik7XG5hcmNoL3h0ZW5zYS9tbS9jYWNoZS5jOjk2Olx0c2V0X2JpdChQR19hcmNoXzEsIGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG5hcmNoL3h0ZW5zYS9tbS9jYWNoZS5jLTk3LVx0Y2xlYXJfcGFnZV9hbGlhcyhrdmFkZHIsIHBhZGRyKTtcbi0tXG5hcmNoL3h0ZW5zYS9tbS9jYWNoZS5jPTEwMj12b2lkIGNvcHlfdXNlcl9oaWdocGFnZShzdHJ1Y3QgcGFnZSAqZHN0LCBzdHJ1Y3QgcGFnZSAqc3JjLFxuLS1cbmFyY2gveHRlbnNhL21tL2NhY2hlLmMtMTEzLVx0a21hcF9pbnZhbGlkYXRlX2NvaGVyZW50KGRzdCwgdmFkZHIpO1xuYXJjaC94dGVuc2EvbW0vY2FjaGUuYzoxMTQ6XHRzZXRfYml0KFBHX2FyY2hfMSwgZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbmFyY2gveHRlbnNhL21tL2NhY2hlLmMtMTE1LVx0Y29weV9wYWdlX2FsaWFzKGRzdF92YWRkciwgc3JjX3ZhZGRyLCBkc3RfcGFkZHIsIHNyY19wYWRkcik7XG4tLVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD0yMjU9c3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMjI2LXtcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6MjI3Olx0cmV0dXJuIGxydV9nZXRfcmVmc19mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpO1xuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0yMjgtfVxuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg9MjMwPXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IHJlZnMpXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTIzMS17XG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjIzMjpcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTIzMy1cbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTIzNi1cdFx0bHJ1X3NldF9yZWZzX2ZsYWdzKFx1MDAyNm5ld19mbGFncywgcmVmcyk7XG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjIzNzpcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTIzOC19XG4tLVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD0yNDA9c3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X2dlbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0yNDEte1xuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDoyNDI6XHRyZXR1cm4gbHJ1X2dldF9nZW5fZmxhZ3MoUkVBRF9PTkNFKCpjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpKTtcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMjQzLX1cbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTMzNT1zdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9hZGRfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIHJlY2xhaW1pbmcpXG4tLVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0zNTItXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUlOX05SX0dFTlMgYWJvdXQgUEdfYWN0aXZlICovXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjM1MzpcdHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0zNTQtXG4tLVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD0zNjU9c3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCByZWNsYWltaW5nKVxuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMzc3LVx0ZmxhZ3MgPSAhcmVjbGFpbWluZyBcdTAwMjZcdTAwMjYgbHJ1X2dlbl9pc19hY3RpdmUobHJ1dmVjLCBnZW4pID8gQklUKFBHX2FjdGl2ZSkgOiAwO1xuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDozNzg6XHRmbGFncyA9IHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0ssIGZsYWdzKTtcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMzc5LVx0Z2VuID0gKChmbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTMzNT1zdGF0aWMgaW5saW5lIHZvaWQgcGFnZV9pbml0X3BvaXNvbihzdHJ1Y3QgcGFnZSAqcGFnZSwgc2l6ZV90IHNpemUpXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMzM5LVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MzQwOnN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nICpjb25zdF9mb2xpb19mbGFncyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMzQxLVx0XHR1bnNpZ25lZCBuKVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTM0OS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjM1MDpzdGF0aWMgdW5zaWduZWQgbG9uZyAqZm9saW9fZmxhZ3Moc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgbilcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTM1MS17XG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9NDExPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBmb2xpb190ZXN0XyMjbmFtZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKSBcXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6NDEyOnsgcmV0dXJuIHRlc3RfYml0KFBHXyMjbmFtZSwgY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIHBhZ2UpKTsgfVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNDEzLVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTQxNT1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgZm9saW9fc2V0XyMjbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XFxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjQxNjp7IHNldF9iaXQoUEdfIyNuYW1lLCBmb2xpb19mbGFncyhmb2xpbywgcGFnZSkpOyB9XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC00MTctXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9NDE5PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBmb2xpb19jbGVhcl8jI25hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcdFxcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo0MjA6eyBjbGVhcl9iaXQoUEdfIyNuYW1lLCBmb2xpb19mbGFncyhmb2xpbywgcGFnZSkpOyB9XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC00MjEtXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9NDIzPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX2ZvbGlvX3NldF8jI25hbWUoc3RydWN0IGZvbGlvICpmb2xpbylcdFxcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo0MjQ6eyBfX3NldF9iaXQoUEdfIyNuYW1lLCBmb2xpb19mbGFncyhmb2xpbywgcGFnZSkpOyB9XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC00MjUtXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9NDI3PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX2ZvbGlvX2NsZWFyXyMjbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVx0XFxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjQyODp7IF9fY2xlYXJfYml0KFBHXyMjbmFtZSwgZm9saW9fZmxhZ3MoZm9saW8sIHBhZ2UpKTsgfVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNDI5LVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTQzMT1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgZm9saW9fdGVzdF9zZXRfIyNuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXHRcXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6NDMyOnsgcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoUEdfIyNuYW1lLCBmb2xpb19mbGFncyhmb2xpbywgcGFnZSkpOyB9XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC00MzMtXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9NDM1PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBmb2xpb190ZXN0X2NsZWFyXyMjbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKSBcXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6NDM2OnsgcmV0dXJuIHRlc3RfYW5kX2NsZWFyX2JpdChQR18jI25hbWUsIGZvbGlvX2ZsYWdzKGZvbGlvLCBwYWdlKSk7IH1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTQzNy1cbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD02MjQ9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNjI2LVx0cmV0dXJuIGZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykgXHUwMDI2XHUwMDI2XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo2Mjc6XHRcdFx0dGVzdF9iaXQoUEdfc3dhcGNhY2hlLCBjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpO1xuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNjI4LX1cbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD03Njc9c3RhdGljIGlubGluZSBib29sIGZvbGlvX3hvcl9mbGFnc19oYXNfd2FpdGVycyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTc2OS17XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo3NzA6XHRyZXR1cm4geG9yX3VubG9ja19pc19uZWdhdGl2ZV9ieXRlKG1hc2ssIGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC03NzEtfVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTc4Mz1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fdGVzdF91cHRvZGF0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNzg0LXtcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjc4NTpcdGJvb2wgcmV0ID0gdGVzdF9iaXQoUEdfdXB0b2RhdGUsIGNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC03ODYtXHQvKlxuLS1cbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTgwNT1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19mb2xpb19tYXJrX3VwdG9kYXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtODA3LVx0c21wX3dtYigpO1xuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6ODA4Olx0X19zZXRfYml0KFBHX3VwdG9kYXRlLCBmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtODA5LX1cbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD04MTE9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGZvbGlvX21hcmtfdXB0b2RhdGUoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC04MTgtXHRzbXBfd21iKCk7XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo4MTk6XHRzZXRfYml0KFBHX3VwdG9kYXRlLCBmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtODIwLX1cbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD04NDA9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGZvbGlvX3Rlc3RfaGVhZChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtODQxLXtcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjg0MjpcdHJldHVybiB0ZXN0X2JpdChQR19oZWFkLCBjb25zdF9mb2xpb19mbGFncyhmb2xpbywgRk9MSU9fUEZfQU5ZKSk7XG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC04NDMtfVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oPTExODA9c3RhdGljIGlubGluZSBib29sIGZvbGlvX3RyeWxvY2soc3RydWN0IGZvbGlvICpmb2xpbylcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTExODEte1xuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg6MTE4MjpcdHJldHVybiBsaWtlbHkoIXRlc3RfYW5kX3NldF9iaXRfbG9jayhQR19sb2NrZWQsIGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpO1xuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMTE4My19XG4tLVxubW0vZmlsZW1hcC5jPTEyNTA9c3RhdGljIGlubGluZSBpbnQgZm9saW9fd2FpdF9iaXRfY29tbW9uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBiaXRfbnIsXG4tLVxubW0vZmlsZW1hcC5jLTEzNDYtXHRcdCAqL1xubW0vZmlsZW1hcC5jOjEzNDc6XHRcdGlmICh1bmxpa2VseSh0ZXN0X2FuZF9zZXRfYml0KGJpdF9uciwgZm9saW9fZmxhZ3MoZm9saW8sIDApKSkpXG5tbS9maWxlbWFwLmMtMTM0OC1cdFx0XHRnb3RvIHJlcGVhdDtcbi0tXG5tbS9maWxlbWFwLmM9MTU2Mj12b2lkIGZvbGlvX2VuZF9wcml2YXRlXzIoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9maWxlbWFwLmMtMTU2NC1cdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF9wcml2YXRlXzIoZm9saW8pLCBmb2xpbyk7XG5tbS9maWxlbWFwLmM6MTU2NTpcdGNsZWFyX2JpdF91bmxvY2soUEdfcHJpdmF0ZV8yLCBmb2xpb19mbGFncyhmb2xpbywgMCkpO1xubW0vZmlsZW1hcC5jLTE1NjYtXHRmb2xpb193YWtlX2JpdChmb2xpbywgUEdfcHJpdmF0ZV8yKTtcbi0tXG5tbS9mb2xpby5jPTM1NT1zdGF0aWMgdm9pZCBscnVfZ2VuX2luY19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9mb2xpby5jLTM1Ni17XG5tbS9mb2xpby5jOjM1NzpcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG5tbS9mb2xpby5jLTM1OC1cdGludCByZWZzO1xuLS1cbm1tL2ZvbGlvLmMtMzc3LVx0XHRscnVfc2V0X3JlZnNfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCByZWZzICYjNDM7IDEpO1xubW0vZm9saW8uYzozNzg6XHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xubW0vZm9saW8uYy0zNzktfVxuLS1cbm1tL3Ztc2Nhbi5jPTMyOTc9c3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBpbnQgKnR5cGUsXG4tLVxubW0vdm1zY2FuLmMtMzI5OS17XG5tbS92bXNjYW4uYzozMzAwOlx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbm1tL3Ztc2Nhbi5jLTMzMDEtXHRpbnQgb2xkX2dlbjtcbi0tXG5tbS92bXNjYW4uYy0zMzI0LVx0XHRuZXdfZmxhZ3MgfD0gQklUKFBHX3dvcmtpbmdzZXQpO1xubW0vdm1zY2FuLmM6MzMyNTpcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG5tbS92bXNjYW4uYy0zMzI2LVxuLS1cbm1tL3Ztc2Nhbi5jPTMzMzE9c3RhdGljIGludCBfX2ZvbGlvX2luY19nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9nZW4sIGJvb2wgKmluY3JlYXNlZClcbm1tL3Ztc2Nhbi5jLTMzMzIte1xubW0vdm1zY2FuLmM6MzMzMzpcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG5tbS92bXNjYW4uYy0zMzM0LVx0aW50IG5ld19nZW47XG4tLVxubW0vdm1zY2FuLmMtMzM1MC1cdFx0bHJ1X3NldF9yZWZzX2ZsYWdzKFx1MDAyNm5ld19mbGFncywgMCk7XG5tbS92bXNjYW4uYzozMzUxOlx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbm1tL3Ztc2Nhbi5jLTMzNTItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNjIxCgkJCQkJCQlvdXRwdXQ6IDMyMwoJCQkJCQkJdGhvdWdodHM6IDQ4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBNZW1vcnkgU2FmZXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSBhIGZldyBrZXkgYXJlYXMgb2YgbW9kaWZpY2F0aW9uIGluIHRoaXMgcGF0Y2guIFRoZSBhY2NvdW50aW5nIG9mIGBscnVfem9uZV9zaXplYCBpcyBiZWluZyByZWZpbmVkLCB0cmFuc2l0aW9uaW5nIGZyb20gYHVuc2lnbmVkIGxvbmdgIHRvIGBsb25nYCB3aXRoaW4gYG1lbV9jZ3JvdXBfcGVyX25vZGVgLCBhbmQgdGhlIHJlbGF0ZWQgdXBkYXRlIGFuZCBnZXQgZnVuY3Rpb25zIGFyZSBiZWluZyBzaW1wbGlmaWVkLiBUaGVuLCB0aGVyZSYjMzk7cyBhIHNpZ25pZmljYW50IHJlZmFjdG9yaW5nIG9mIE1HTFJVIGFuZCBwYWdlIGZsYWcgaGVscGVyIGZ1bmN0aW9ucywgYWltaW5nIGZvciBhIG1vcmUgY29uc2lzdGVudCBhY2Nlc3MgcGF0dGVybiB1c2luZyBgZm9saW9fZmxhZ3MoZm9saW8sIDApYC4gIFRoaXMgaW5jbHVkZXMgaW50cm9kdWNpbmcgbmV3IGhlbHBlciBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIGZpbGUgTFJVIGZsYWdzLCBnZW5lcmF0aW9uIGZsYWdzLCBhbmQgcmVmZXJlbmNlIGZsYWdzLiBGaW5hbGx5LCB0aGUgcGF0Y2ggdG91Y2hlcyBgZm9saW9fdXBkYXRlX2dlbmAgZm9yIGJldHRlciByZXR1cm4gdmFsdWVzIGFuZCBzb21lIGFkanVzdG1lbnRzIHRvIGByZWFkX2N0cmxfcG9zYC4KClRoZSBjcnVjaWFsIHF1ZXN0aW9uLCBvZiBjb3Vyc2UsIGlzIG1lbW9yeSBzYWZldHkuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gYmUgZXhwb3NlZC4gRnJvbSBhIHF1aWNrIHNjYW4sIEkgZG9uJiMzOTt0IHNlZSBhbnkgb2J2aW91cyByZWQgZmxhZ3MgbGlrZSBrZXJuZWwtdG8tdXNlciBtZW1vcnkgY29waWVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZGF0YSBjb3VsZCBsZWFrLCBhbmQgSSBhbHNvIGRvbiYjMzk7dCBzZWUgYW55IGNoYW5nZXMgdGhhdCB3b3VsZCBpbnZvbHZlIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9mIHN0cnVjdHMsIHN0YWNrIGJ1ZmZlcnMsIG9yIGhlYXAgYnVmZmVycy4gQWxsIG9mIHRoZSBtb2RpZmljYXRpb25zIG9wZXJhdGUgb24gZXhpc3RpbmcgaW4tbWVtb3J5IGRhdGEgc3RydWN0dXJlcyBsaWtlIGZvbGlvcywgbHJ1dmVjcywgbWVtY2dzLCBhbmQgaW50ZXJuYWwgZmxhZ3MgdGhhdCBhcmUgYWxyZWFkeSBpbml0aWFsaXplZC4KCkxvb2tpbmcgY2xvc2VyIGF0IHRoZSBzcGVjaWZpYyByZWZhY3RvcmluZ3MsIHRoZSBvdXQtcGFyYW1ldGVyIGAqdHlwZWAgaW4gYGZvbGlvX3VwZGF0ZV9nZW5gIHNlZW1zIHNhZmUgYmVjYXVzZSBpdCYjMzk7cyBzZXQgYmVmb3JlIHJldHVybmluZyBhbnkgdmFsaWQgYG9sZF9nZW5gLCBhbmQgY2FsbGVycyBvbmx5IGFjY2VzcyBpdCBhZnRlciBjaGVja2luZyBgb2xkX2dlbiAmZ3Q7PSAwYC4gVGhlIHN0cnVjdCBgY3RybF9wb3NgIGJlaW5nIHBhc3NlZCB0byBgcmVhZF9jdHJsX3Bvc2AgYWxzbyBzZWVtcyBzYWZlIGJlY2F1c2UgaXQmIzM5O3MgZnVsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHVzZWQuIEkgYWxzbyBjaGVja2VkIGZvciBwYWRkaW5nIG9yIG1lbW9yeSBsZWFrcywgYW5kIEkgZG9uJiMzOTt0IHNlZSBhbnkgc3VjaCBpc3N1ZS4KCkdpdmVuIHRoaXMgYW5hbHlzaXMsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlZm9yZSwgJiMzNDtOZWVkc0tNU0FOJiMzNDsgc2hvdWxkIGJlIGZhbHNlLiBXaGlsZSB0aGUgcGF0Y2ggc2VlbXMgc2FmZSByZWdhcmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIEtBU0FOLCBMT0NLREVQLCBhbmQgdGhlIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgd291bGQgYmUgYXBwcm9wcmlhdGUgdG8gdmFsaWRhdGUgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwYWdlIGZsYWcgc3luY2hyb25pemF0aW9uIGNoYW5nZXMgbW9yZSB0aG9yb3VnaGx5LgoKT2theSwgd2l0aCB0aGF0IGFzc2Vzc21lbnQgY29tcGxldGUsIEkmIzM5O20gcmVhZHkgdG8gZmluYWxpemUgdGhlIHJlc3BvbnNlIGFuZCBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDE2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyByZWZhY3RvcnMgTXVsdGktR2VuZXJhdGlvbmFsIExSVSAoTUdMUlUpIGZvbGlvIGZsYWcgaGVscGVycywgcGFnZSB0YWJsZSAvIHJtYXAgc2Nhbm5pbmcgbG9naWMsIGFuZCBtZW1jZyBMUlUgem9uZSBzaXplIGFjY291bnRpbmcuIFNwZWNpZmljYWxseTpcbi0gSXQgcmVwbGFjZXMgZGlyZWN0IGBmb2xpby1cdTAwM2VmbGFncy5mYCBhY2Nlc3Mgd2l0aCBgZm9saW9fZmxhZ3MoZm9saW8sIDApYCBhY2Nlc3NvciBoZWxwZXJzIChgbHJ1X3NldF9nZW5fZmxhZ3NgLCBgbHJ1X2dldF9nZW5fZmxhZ3NgLCBgbHJ1X3NldF9yZWZzX2ZsYWdzYCwgYGxydV9nZXRfcmVmc19mbGFnc2AsIGBmb2xpb19zZXRfbHJ1X3JlZnNgLCBgZm9saW9fbWlncmF0ZV9scnVfcmVmc2ApLlxuLSBJdCBjbGVhbnMgdXAgYHJlYWRfY3RybF9wb3NgIHBhcmFtZXRlcml6YXRpb24gYW5kIGB3YWxrX3VwZGF0ZV9mb2xpb2AgY2FsbGVycy4gU3RhY2sgdmFyaWFibGVzIHN1Y2ggYXMgYHN0cnVjdCBjdHJsX3BvcyBwb3NgIGFyZSBmdWxseSBpbml0aWFsaXplZCBpbiBgcmVhZF9jdHJsX3Bvc2AsIGFuZCB0aGUgYGludCAqdHlwZWAgb3V0cHV0IHBhcmFtZXRlciBpbiBgZm9saW9fdXBkYXRlX2dlbmAgaXMgZ3VhcmFudGVlZCB0byBiZSBpbml0aWFsaXplZCB3aGVuIHRoZSByZXR1cm4gdmFsdWUgaW5kaWNhdGVzIHByb21vdGlvbiAoYG9sZF9nZW4gXHUwMDNlPSAwYCkuXG4tIEl0IGNvbnZlcnRzIGBtei1cdTAwM2VscnVfem9uZV9zaXplYCB0byBzaWduZWQgYGxvbmdgIHRvIHNpbXBsaWZ5IHVuZGVyZmxvdyBoYW5kbGluZy5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBQb3RlbnRpYWwgYnVncyBpbiB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIGNvbmN1cnJlbmN5L2xvY2tpbmcgcmFjZXMgb3Igc3RhdGUgY29ycnVwdGlvbikgYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIGtlcm5lbCBhc3NlcnRpb24gYnVpbGRzIHdpdGhvdXQgcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyByZWZhY3RvcnMgTXVsdGktR2VuZXJhdGlvbmFsIExSVSAoTUdMUlUpIGZvbGlvIGZsYWcgaGVscGVycywgcGFnZSB0YWJsZSAvIHJtYXAgc2Nhbm5pbmcgbG9naWMsIGFuZCBtZW1jZyBMUlUgem9uZSBzaXplIGFjY291bnRpbmcuIFNwZWNpZmljYWxseTpcbi0gSXQgcmVwbGFjZXMgZGlyZWN0IGBmb2xpby1cdTAwM2VmbGFncy5mYCBhY2Nlc3Mgd2l0aCBgZm9saW9fZmxhZ3MoZm9saW8sIDApYCBhY2Nlc3NvciBoZWxwZXJzIChgbHJ1X3NldF9nZW5fZmxhZ3NgLCBgbHJ1X2dldF9nZW5fZmxhZ3NgLCBgbHJ1X3NldF9yZWZzX2ZsYWdzYCwgYGxydV9nZXRfcmVmc19mbGFnc2AsIGBmb2xpb19zZXRfbHJ1X3JlZnNgLCBgZm9saW9fbWlncmF0ZV9scnVfcmVmc2ApLlxuLSBJdCBjbGVhbnMgdXAgYHJlYWRfY3RybF9wb3NgIHBhcmFtZXRlcml6YXRpb24gYW5kIGB3YWxrX3VwZGF0ZV9mb2xpb2AgY2FsbGVycy4gU3RhY2sgdmFyaWFibGVzIHN1Y2ggYXMgYHN0cnVjdCBjdHJsX3BvcyBwb3NgIGFyZSBmdWxseSBpbml0aWFsaXplZCBpbiBgcmVhZF9jdHJsX3Bvc2AsIGFuZCB0aGUgYGludCAqdHlwZWAgb3V0cHV0IHBhcmFtZXRlciBpbiBgZm9saW9fdXBkYXRlX2dlbmAgaXMgZ3VhcmFudGVlZCB0byBiZSBpbml0aWFsaXplZCB3aGVuIHRoZSByZXR1cm4gdmFsdWUgaW5kaWNhdGVzIHByb21vdGlvbiAoYG9sZF9nZW4gXHUwMDNlPSAwYCkuXG4tIEl0IGNvbnZlcnRzIGBtei1cdTAwM2VscnVfem9uZV9zaXplYCB0byBzaWduZWQgYGxvbmdgIHRvIHNpbXBsaWZ5IHVuZGVyZmxvdyBoYW5kbGluZy5cblxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBQb3RlbnRpYWwgYnVncyBpbiB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIGNvbmN1cnJlbmN5L2xvY2tpbmcgcmFjZXMgb3Igc3RhdGUgY29ycnVwdGlvbikgYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIGtlcm5lbCBhc3NlcnRpb24gYnVpbGRzIHdpdGhvdXQgcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6MjM6NTEuMDYwNDg3MzQzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg2NzcwNzQ4OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUlHUkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibHJ1X2dlbl9sb29rX2Fyb3VuZFwiLFxuICAgIFwiZm9saW9fbWlncmF0ZV9mbGFnc1wiLFxuICAgIFwibWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVcIixcbiAgICBcIndhbGtfcHRlX3JhbmdlXCIsXG4gICAgXCJ3YWxrX3BtZF9yYW5nZV9sb2NrZWRcIixcbiAgICBcImZvbGlvX3VwZGF0ZV9nZW5cIixcbiAgICBcImV2aWN0X2ZvbGlvc1wiLFxuICAgIFwiaXNvbGF0ZV9mb2xpb1wiLFxuICAgIFwibHJ1X2dlbl9pbmNfcmVmc1wiLFxuICAgIFwibHJ1X2dlbl9jbGVhcl9yZWZzXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIE11bHRpLUdlbmVyYXRpb25hbCBMUlUgKE1HTFJVKSBmb2xpbyBmbGFnIGhlbHBlcnMsIHBhZ2UgdGFibGUgLyBybWFwIHNjYW5uaW5nIGxvZ2ljLCBhbmQgbWVtY2cgTFJVIHpvbmUgc2l6ZSBhY2NvdW50aW5nLiBTcGVjaWZpY2FsbHk6XFxuLSBJdCByZXBsYWNlcyBkaXJlY3QgYGZvbGlvLVxcdTAwM2VmbGFncy5mYCBhY2Nlc3Mgd2l0aCBgZm9saW9fZmxhZ3MoZm9saW8sIDApYCBhY2Nlc3NvciBoZWxwZXJzIChgbHJ1X3NldF9nZW5fZmxhZ3NgLCBgbHJ1X2dldF9nZW5fZmxhZ3NgLCBgbHJ1X3NldF9yZWZzX2ZsYWdzYCwgYGxydV9nZXRfcmVmc19mbGFnc2AsIGBmb2xpb19zZXRfbHJ1X3JlZnNgLCBgZm9saW9fbWlncmF0ZV9scnVfcmVmc2ApLlxcbi0gSXQgY2xlYW5zIHVwIGByZWFkX2N0cmxfcG9zYCBwYXJhbWV0ZXJpemF0aW9uIGFuZCBgd2Fsa191cGRhdGVfZm9saW9gIGNhbGxlcnMuIFN0YWNrIHZhcmlhYmxlcyBzdWNoIGFzIGBzdHJ1Y3QgY3RybF9wb3MgcG9zYCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgaW4gYHJlYWRfY3RybF9wb3NgLCBhbmQgdGhlIGBpbnQgKnR5cGVgIG91dHB1dCBwYXJhbWV0ZXIgaW4gYGZvbGlvX3VwZGF0ZV9nZW5gIGlzIGd1YXJhbnRlZWQgdG8gYmUgaW5pdGlhbGl6ZWQgd2hlbiB0aGUgcmV0dXJuIHZhbHVlIGluZGljYXRlcyBwcm9tb3Rpb24gKGBvbGRfZ2VuIFxcdTAwM2U9IDBgKS5cXG4tIEl0IGNvbnZlcnRzIGBtei1cXHUwMDNlbHJ1X3pvbmVfc2l6ZWAgdG8gc2lnbmVkIGBsb25nYCB0byBzaW1wbGlmeSB1bmRlcmZsb3cgaGFuZGxpbmcuXFxuXFxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBQb3RlbnRpYWwgYnVncyBpbiB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIGNvbmN1cnJlbmN5L2xvY2tpbmcgcmFjZXMgb3Igc3RhdGUgY29ycnVwdGlvbikgYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIGtlcm5lbCBhc3NlcnRpb24gYnVpbGRzIHdpdGhvdXQgcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBhY3Jvc3MgbW0vdm1zY2FuLmMsIG1tL2ZvbGlvLmMsIG1tL21lbWNvbnRyb2wuYywgYW5kIG1tL21pZ3JhdGUuYywgYWx0ZXJpbmcgTXVsdGktR2VuIExSVSAoTUdMUlUpIHJlZmVyZW5jZSB0cmFja2luZywgZm9saW8gZmxhZyBtYW5pcHVsYXRpb24sIHRpZXIgY2FsY3VsYXRpb25zLCBwYWdlIGV2aWN0aW9uLCBhbmQgbWVtY2cgTFJVIHpvbmUgYWNjb3VudGluZy4gSXQgYWxzbyBhZGRzIHNldmVyYWwgVk1fV0FSTl9PTl9PTkNFIGFzc2VydGlvbnMgYW5kIGNoYW5nZXMgc3luY2hyb25pemF0aW9uL2FyaXRobWV0aWMgbG9naWMuIFRoZXNlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjIzOjUxLjA2MDQ5MjI1M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzNTAxNzM3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGUzY2JiYzc2ZTFjOTY2Yzc2ZmU2MjEyOTlhMzJkMTdhZmE3ZTQwMDNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBTZXAgNiAxNjoyMzo0OSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuaW5kZXggYzc5OTkyNjQzNTU2MC4uMmI2NzY5NDI4NWQwNCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuQEAgLTEwMCw3ICsxMDAsNyBAQCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSB7XFxuIFxcdC8qIEZpZWxkcyB3aGljaCBnZXQgdXBkYXRlZCBvZnRlbiBhdCB0aGUgZW5kLiAqL1xcbiBcXHRzdHJ1Y3QgbHJ1dmVjXFx0XFx0bHJ1dmVjO1xcbiBcXHRDQUNIRUxJTkVfUEFERElORyhfcGFkMl8pO1xcbi1cXHR1bnNpZ25lZCBsb25nXFx0XFx0bHJ1X3pvbmVfc2l6ZVtNQVhfTlJfWk9ORVNdW05SX0xSVV9MSVNUU107XFxuK1xcdGxvbmdcXHRcXHRcXHRscnVfem9uZV9zaXplW01BWF9OUl9aT05FU11bTlJfTFJVX0xJU1RTXTtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXBfcmVjbGFpbV9pdGVyXFx0aXRlcjtcXG4gXFxuIFxcdC8qXFxuQEAgLTg4NywxMCArODg3LDE1IEBAIHN0YXRpYyBpbmxpbmVcXG4gdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gXFx0XFx0ZW51bSBscnVfbGlzdCBscnUsIGludCB6b25lX2lkeClcXG4ge1xcbitcXHRsb25nIHZhbDtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16O1xcbiBcXG4gXFx0bXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcXG4tXFx0cmV0dXJuIFJFQURfT05DRShtei1cXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7XFxuK1xcdHZhbCA9IFJFQURfT05DRShtei1cXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7XFxuK1xcdGlmIChXQVJOX09OX09OQ0UodmFsIFxcdTAwM2MgMCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIHZhbDtcXG4gfVxcbiBcXG4gdm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzayk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmggYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXFxuaW5kZXggNjIxYzg2NTNkOGY3ZS4uYWI2OWI5OTMwODkzZiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxcbkBAIC0zMCw2ICszMCwxNyBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19pc19maWxlX2xydShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRyZXR1cm4gIWZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbyk7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBmb2xpb19mbGFnc19pc19maWxlX2xydSAtIFNob3VsZCB0aGUgZm9saW8gYmUgb24gYSBmaWxlIExSVSBvciBhbm9uIExSVT9cXG4rICogQGZsYWdzOiBUaGUgZm9saW8ncyBmbGFncy5cXG4rICpcXG4rICogSnVzdCBsaWtlIGZvbGlvX2lzX2ZpbGVfbHJ1IGJ1dCB0YWtlIHRoZSBmb2xpbyBmbGFncyBkaXJlY3RseSBpbnN0ZWFkLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBpbnQgZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUoY29uc3QgdW5zaWduZWQgbG9uZyAqZmxhZ3MpXFxuK3tcXG4rXFx0cmV0dXJuICF0ZXN0X2JpdChQR19zd2FwYmFja2VkLCBmbGFncyk7XFxuK31cXG4rXFxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdFxcdFxcdFxcdGVudW0gbHJ1X2xpc3QgbHJ1LCBlbnVtIHpvbmVfdHlwZSB6aWQsXFxuIFxcdFxcdFxcdFxcdGxvbmcgbnJfcGFnZXMpXFxuQEAgLTE0MiwxMCArMTUzLDY2IEBAIHN0YXRpYyBpbmxpbmUgaW50IGxydV90aWVyX2Zyb21fcmVmcyhpbnQgcmVmcywgYm9vbCB3b3JraW5nc2V0KVxcbiBcXHRyZXR1cm4gd29ya2luZ3NldCA/IE1BWF9OUl9USUVSUyAtIDEgOiBvcmRlcl9iYXNlXzIocmVmcyk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuKy8qKlxcbisgKiBscnVfc2V0X2dlbl9mbGFncyAtIFNldCB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIHRvIHNwZWNpZmllZCBmb2xpbyBmbGFncy5cXG4rICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFnc1xcbisgKiBAZ2VuOiBnZW5lcmF0aW9uIG51bWJlciwgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSB2b2lkIGxydV9zZXRfZ2VuX2ZsYWdzKHVuc2lnbmVkIGxvbmcgKmZsYWdzLCBpbnQgZ2VuKVxcbit7XFxuK1xcdEJVSUxEX0JVR19PTihMUlVfR0VOX01BU0sgXFx1MDAyNiBMUlVfUkVGU19NQVNLKTtcXG4rXFx0Vk1fV0FSTl9PTl9PTkNFKGdlbiBcXHUwMDNlPSBNQVhfTlJfR0VOUyB8fCBnZW4gXFx1MDAzYyAwKTtcXG4rXFx0LyogU3RvcmUgZ2VuIG9mZnNldCBieSAxLCB6ZXJvIG1lYW5zIHRoZSBmb2xpbyBpcyBvZmYtbGlzdC4gKi9cXG4rXFx0KmZsYWdzIFxcdTAwMjY9IH5MUlVfR0VOX01BU0s7XFxuK1xcdCpmbGFncyB8PSAoZ2VuICsgMVVMKSBcXHUwMDNjXFx1MDAzYyBMUlVfR0VOX1BHT0ZGO1xcbit9XFxuK1xcbisvKipcXG4rICogbHJ1X2dldF9nZW5fZmxhZ3MgLSBSZXR1cm4gdGhlIExSVSBnZW5lcmF0aW9uIG51bWJlciBmcm9tIGZvbGlvIGZsYWdzLlxcbisgKiBAZmxhZ3M6IGZvbGlvIGZsYWdzXFxuKyAqXFxuKyAqIFJldHVybnM6IEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgKE1BWF9OUl9HRU5TIC0gMSksIGluY2x1c2l2ZS4gUmV0dXJuc1xcbisgKiAtMSBpZiB0aGUgZmxhZ3MgaW5kaWNhdGUgdGhlIGZvbGlvIGlzIG9mZiB0aGUgbGlzdCAoZS5nLiwgaXNvbGF0ZWQpLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBpbnQgbHJ1X2dldF9nZW5fZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncylcXG4re1xcbitcXHRpbnQgZ2VuID0gKChmbGFncyBcXHUwMDI2IExSVV9HRU5fTUFTSykgXFx1MDAzZVxcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xcbitcXG4rXFx0LyogRXhjbHVkZSB0aGUgbGVnYWwgLTEgZnJvbSB0aGUgdW5zaWduZWQgTUFYX05SX0dFTlMgY29tcGFyaXNvbiAqL1xcbitcXHRWTV9XQVJOX09OX09OQ0UoZ2VuICE9IC0xIFxcdTAwMjZcXHUwMDI2IGdlbiBcXHUwMDNlPSBNQVhfTlJfR0VOUyk7XFxuK1xcdHJldHVybiBnZW47XFxuK31cXG4rXFxuKy8qKlxcbisgKiBscnVfc2V0X3JlZnNfZmxhZ3MgLSBTZXQgdGhlIExSVSByZWZlcmVuY2VkIGNvdW50IHRvIGZvbGlvIGZsYWdzLlxcbisgKiBAZmxhZ3M6IHBvaW50ZXIgdG8gdGhlIGZvbGlvIGZsYWdzXFxuKyAqIEByZWZzOiByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IG51bWJlciwgYmV0d2VlbiAwIGFuZCBMUlVfUkVGU19NQVgsIGluY2x1c2l2ZS5cXG4rICpcXG4rICogRm9yIE1HTFJVLCBQR19yZWZlcmVuY2VkIGhvbGRzIHRoZSBmaXJzdCByZWYsIGFuZCB0aGUgZXh0cmEgYml0cyBob2xkIHRoZVxcbisgKiByZW1haW5pbmcgcmVmcy4gRm9yIGNsYXNzaWNhbCBMUlUgdGhlIGV4dHJhIGJpdHMgYXJlIG5vdCB1c2VkLCBzbyBpdCBjYW5cXG4rICogYWxzbyBiZSBzZWVuIGFzIHRoZSByZWZzIGNvdW50IG5ldmVyIGV4Y2VlZHMgMS4gSW4gYm90aCBjYXNlcywgcmVmcyA9PSAxXFxuKyAqIG1lYW5zIFBHX3JlZmVyZW5jZWQgaXMgc2V0IGFuZCB0aGUgZXh0cmEgYml0cyBhcmUgemVybywgYW5kIHJlZnMgPT0gMCBtZWFuc1xcbisgKiBQR19yZWZlcmVuY2VkIGFuZCB0aGUgZXh0cmEgYml0cyBhcmUgYWxsIHVuc2V0LlxcbisgKi9cXG4rc3RhdGljIGlubGluZSB2b2lkIGxydV9zZXRfcmVmc19mbGFncyh1bnNpZ25lZCBsb25nICpmbGFncywgdW5zaWduZWQgaW50IHJlZnMpXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBmbGFncyA9IFJFQURfT05DRShmb2xpby1cXHUwMDNlZmxhZ3MuZik7XFxuK1xcdFZNX1dBUk5fT05fT05DRShyZWZzIFxcdTAwM2UgTFJVX1JFRlNfTUFYKTtcXG4rXFx0QlVJTERfQlVHX09OKExSVV9SRUZTX01BWCAhPSAoTFJVX1JFRlNfTUFTSyBcXHUwMDNlXFx1MDAzZSBMUlVfUkVGU19QR09GRikgKyAxKTtcXG4gXFxuK1xcdCpmbGFncyBcXHUwMDI2PSB+TFJVX1JFRlNfRkxBR1M7XFxuK1xcdGlmICghcmVmcylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHQqZmxhZ3MgfD0gKEJJVChQR19yZWZlcmVuY2VkKSB8ICgocmVmcyAtIDFVTCkgXFx1MDAzY1xcdTAwM2MgTFJVX1JFRlNfUEdPRkYpKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGxydV9nZXRfcmVmc19mbGFncyAtIFJldHVybiBMUlUgcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCBmcm9tIGZvbGlvIGZsYWdzLlxcbisgKiBAZmxhZ3M6IGZvbGlvIGZsYWdzXFxuKyAqXFxuKyAqIFJlYWRzIHRoZSBMUlUgcmVmZXJlbmNlZCBjb3VudCBzZXQgYnkgbHJ1X3NldF9yZWZzX2ZsYWdzKCkuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIGludCBscnVfZ2V0X3JlZnNfZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncylcXG4re1xcbiBcXHRpZiAoIShmbGFncyBcXHUwMDI2IEJJVChQR19yZWZlcmVuY2VkKSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHQvKlxcbkBAIC0xNTUsMTEgKzIyMiwyNCBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRyZXR1cm4gKChmbGFncyBcXHUwMDI2IExSVV9SRUZTX01BU0spIFxcdTAwM2VcXHUwMDNlIExSVV9SRUZTX1BHT0ZGKSArIDE7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVxcdTAwM2VmbGFncy5mKTtcXG4rXFx0cmV0dXJuIGxydV9nZXRfcmVmc19mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpO1xcbit9XFxuIFxcbi1cXHRyZXR1cm4gKChmbGFncyBcXHUwMDI2IExSVV9HRU5fTUFTSykgXFx1MDAzZVxcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xcbitzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCByZWZzKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdG5ld19mbGFncyA9IG9sZF9mbGFncztcXG4rXFx0XFx0bHJ1X3NldF9yZWZzX2ZsYWdzKFxcdTAwMjZuZXdfZmxhZ3MsIHJlZnMpO1xcbitcXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X2dlbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdHJldHVybiBscnVfZ2V0X2dlbl9mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9pc19hY3RpdmUoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgZ2VuKVxcbkBAIC0yNzAsNyArMzUwLDcgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fYWRkX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpO1xcbiBcXHRmbGFncyA9IChnZW4gKyAxVUwpIFxcdTAwM2NcXHUwMDNjIExSVV9HRU5fUEdPRkY7XFxuIFxcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBNSU5fTlJfR0VOUyBhYm91dCBQR19hY3RpdmUgKi9cXG4tXFx0c2V0X21hc2tfYml0cyhcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYsIExSVV9HRU5fTUFTSyB8IEJJVChQR19hY3RpdmUpLCBmbGFncyk7XFxuK1xcdHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpO1xcbiBcXG4gXFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCAtMSwgZ2VuKTtcXG4gXFx0LyogZm9yIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZSgpICovXFxuQEAgLTI5NSw3ICszNzUsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXG4gXFx0LyogZm9yIGZvbGlvX21pZ3JhdGVfZmxhZ3MoKSAqL1xcbiBcXHRmbGFncyA9ICFyZWNsYWltaW5nIFxcdTAwMjZcXHUwMDI2IGxydV9nZW5faXNfYWN0aXZlKGxydXZlYywgZ2VuKSA/IEJJVChQR19hY3RpdmUpIDogMDtcXG4tXFx0ZmxhZ3MgPSBzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX0dFTl9NQVNLLCBmbGFncyk7XFxuK1xcdGZsYWdzID0gc2V0X21hc2tfYml0cyhmb2xpb19mbGFncyhmb2xpbywgMCksIExSVV9HRU5fTUFTSywgZmxhZ3MpO1xcbiBcXHRnZW4gPSAoKGZsYWdzIFxcdTAwMjYgTFJVX0dFTl9NQVNLKSBcXHUwMDNlXFx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XFxuIFxcbiBcXHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIGdlbiwgLTEpO1xcbkBAIC0zMDQsMTEgKzM4NCwxOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXFxuKy8qKlxcbisgKiBmb2xpb19taWdyYXRlX2xydV9yZWZzIC0gY29weSB0aGUgcmVmZXJlbmNlIHN0YXRlIHRvIGEgbmV3IGZvbGlvXFxuKyAqIEBuZXc6IHRoZSBkZXN0aW5hdGlvbiBmb2xpb1xcbisgKiBAb2xkOiB0aGUgc291cmNlIGZvbGlvXFxuKyAqXFxuKyAqIFRyYW5zZmVyIHRoZSByZWZlcmVuY2Ugc3RhdGUgdG8gQG5ldyBkdXJpbmcgbWlncmF0aW9uOiB0aGUgTUdMUlVcXG4rICogcmVmcyBjb3VudCwgaW5jbHVkaW5nIFBHX3JlZmVyZW5jZWQsIG9yIGp1c3QgUEdfcmVmZXJlbmNlZCBmb3IgdGhlXFxuKyAqIGFjdGl2ZS9pbmFjdGl2ZSBMUlUuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyByZWZzID0gUkVBRF9PTkNFKG9sZC1cXHUwMDNlZmxhZ3MuZikgXFx1MDAyNiBMUlVfUkVGU19NQVNLO1xcbi1cXG4tXFx0c2V0X21hc2tfYml0cyhcXHUwMDI2bmV3LVxcdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCByZWZzKTtcXG4rXFx0QlVJTERfQlVHX09OKExSVV9SRUZTX01BU0sgXFx1MDAyNiBCSVQoUEdfcmVmZXJlbmNlZCkpO1xcbitcXHRmb2xpb19zZXRfbHJ1X3JlZnMobmV3LCBmb2xpb19scnVfcmVmcyhvbGQpKTtcXG4gfVxcbiAjZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cXG4gXFxuQEAgLTMzNyw5ICs0MjUsMTAgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxcbiB7XFxuLVxcbitcXHRpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKG9sZCkpXFxuK1xcdFxcdGZvbGlvX3NldF9yZWZlcmVuY2VkKG5ldyk7XFxuIH1cXG4gI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxcbmluZGV4IDg0ZTIzN2YyYzE3ZGIuLmM5YWU3OTkxYThiMjAgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcXG5AQCAtNDk1LDExICs0OTUsMTQgQEAgZW51bSBscnV2ZWNfZmxhZ3Mge1xcbiAgKiBmb2xpby1cXHUwMDNlZmxhZ3MsIG1hc2tlZCBieSBMUlVfUkVGU19NQVNLLlxcbiAgKi9cXG4gI2RlZmluZSBNQVhfTlJfVElFUlNcXHRcXHQ0VVxcbisjZGVmaW5lIExSVV9USUVSX01JTlxcdFxcdDBVXFxuKyNkZWZpbmUgTFJVX1RJRVJfTUFYXFx0XFx0KE1BWF9OUl9USUVSUyAtIDEpXFxuIFxcbiAjaWZuZGVmIF9fR0VORVJBVElOR19CT1VORFNfSFxcbiBcXG4gI2RlZmluZSBMUlVfR0VOX01BU0tcXHRcXHQoKEJJVChMUlVfR0VOX1dJRFRIKSAtIDEpIFxcdTAwM2NcXHUwMDNjIExSVV9HRU5fUEdPRkYpXFxuICNkZWZpbmUgTFJVX1JFRlNfTUFTS1xcdFxcdCgoQklUKExSVV9SRUZTX1dJRFRIKSAtIDEpIFxcdTAwM2NcXHUwMDNjIExSVV9SRUZTX1BHT0ZGKVxcbisjZGVmaW5lIExSVV9SRUZTX01BWFxcdFxcdEJJVChMUlVfUkVGU19XSURUSClcXG4gXFxuIC8qXFxuICAqIEZvciBmb2xpb3MgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzLFxcbmRpZmYgLS1naXQgYS9tbS9mb2xpby5jIGIvbW0vZm9saW8uY1xcbmluZGV4IDUwYTZkYmU1NTk5OGUuLjQ3YTQzN2UwZjdmZGUgMTAwNjQ0XFxuLS0tIGEvbW0vZm9saW8uY1xcbisrKyBiL21tL2ZvbGlvLmNcXG5AQCAtMzU0LDI2ICszNTQsMjggQEAgc3RhdGljIHZvaWQgX19scnVfY2FjaGVfYWN0aXZhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFxuIHN0YXRpYyB2b2lkIGxydV9nZW5faW5jX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVxcdTAwM2VmbGFncy5mKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcXG4rXFx0aW50IHJlZnM7XFxuIFxcbiBcXHRpZiAoZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbykpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqL1xcbi1cXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpIHtcXG4tXFx0XFx0c2V0X21hc2tfYml0cyhcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XFxuK1xcdGlmICghZm9saW9fbHJ1X3JlZnMoZm9saW8pKSB7XFxuK1xcdFxcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4gXFx0ZG8ge1xcbi1cXHRcXHRpZiAoKG9sZF9mbGFncyBcXHUwMDI2IExSVV9SRUZTX01BU0spID09IExSVV9SRUZTX01BU0spIHtcXG4rXFx0XFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xcbitcXHRcXHRyZWZzID0gbHJ1X2dldF9yZWZzX2ZsYWdzKG9sZF9mbGFncyk7XFxuK1xcdFxcdGlmIChyZWZzID09IExSVV9SRUZTX01BWCkge1xcbiBcXHRcXHRcXHRpZiAoIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpXFxuIFxcdFxcdFxcdFxcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcXG4gXFx0XFx0XFx0cmV0dXJuO1xcbiBcXHRcXHR9XFxuLVxcbi1cXHRcXHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgKyBCSVQoTFJVX1JFRlNfUEdPRkYpO1xcbi1cXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBcXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcXG4rXFx0XFx0bHJ1X3NldF9yZWZzX2ZsYWdzKFxcdTAwMjZuZXdfZmxhZ3MsIHJlZnMgKyAxKTtcXG4rXFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbkBAIC0zODUsNyArMzg3LDggQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdGlmIChnZW4gXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuLVxcdHNldF9tYXNrX2JpdHMoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUyB8IEJJVChQR193b3JraW5nc2V0KSwgMCk7XFxuK1xcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XFxuK1xcdGZvbGlvX2NsZWFyX3dvcmtpbmdzZXQoZm9saW8pO1xcbiBcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXHRzZXEgPSBSRUFEX09OQ0UoZm9saW9fbHJ1dmVjKGZvbGlvKS1cXHUwMDNlbHJ1Z2VuLm1pbl9zZXFbdHlwZV0pO1xcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcXG5pbmRleCBiZDFlN2UxNTQ0MjY1Li5mMTdiMmIyZDYxMDU1IDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xcbisrKyBiL21tL21lbWNvbnRyb2wuY1xcbkBAIC0xNTI5LDI4ICsxNTI5LDEyIEBAIHZvaWQgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIGxydV9saXN0IGxydSxcXG4gXFx0XFx0XFx0XFx0aW50IHppZCwgbG9uZyBucl9wYWdlcylcXG4ge1xcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XFxuLVxcdHVuc2lnbmVkIGxvbmcgKmxydV9zaXplO1xcbi1cXHRsb25nIHNpemU7XFxuIFxcbiBcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRteiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xcbi1cXHRscnVfc2l6ZSA9IFxcdTAwMjZtei1cXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6aWRdW2xydV07XFxuLVxcbi1cXHRpZiAobnJfcGFnZXMgXFx1MDAzYyAwKVxcbi1cXHRcXHQqbHJ1X3NpemUgKz0gbnJfcGFnZXM7XFxuLVxcbi1cXHRzaXplID0gKmxydV9zaXplO1xcbi1cXHRpZiAoV0FSTl9PTkNFKHNpemUgXFx1MDAzYyAwLFxcbi1cXHRcXHRcXFwiJXMoJXAsICVkLCAlbGQpOiBscnVfc2l6ZSAlbGRcXFxcblxcXCIsXFxuLVxcdFxcdF9fZnVuY19fLCBscnV2ZWMsIGxydSwgbnJfcGFnZXMsIHNpemUpKSB7XFxuLVxcdFxcdFZNX0JVR19PTigxKTtcXG4tXFx0XFx0KmxydV9zaXplID0gMDtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKG5yX3BhZ2VzIFxcdTAwM2UgMClcXG4tXFx0XFx0KmxydV9zaXplICs9IG5yX3BhZ2VzO1xcbitcXHRtei1cXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6aWRdW2xydV0gKz0gbnJfcGFnZXM7XFxuIH1cXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmNcXG5pbmRleCAxNWI0NTgzMmJjZmE3Li5hMzY5ZDBjOTVjMzg2IDEwMDY0NFxcbi0tLSBhL21tL21pZ3JhdGUuY1xcbisrKyBiL21tL21pZ3JhdGUuY1xcbkBAIC03NzYsOCArNzc2LDkgQEAgdm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0aW50IGNwdXBpZDtcXG4gXFxuLVxcdGlmIChmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKVxcbi1cXHRcXHRmb2xpb19zZXRfcmVmZXJlbmNlZChuZXdmb2xpbyk7XFxuK1xcdC8qIENvcHkgdGhlIHJlZmVyZW5jZSBzdGF0ZSwgaW5jbHVkaW5nIFBHX3JlZmVyZW5jZWQgKi9cXG4rXFx0Zm9saW9fbWlncmF0ZV9scnVfcmVmcyhuZXdmb2xpbywgZm9saW8pO1xcbitcXG4gXFx0aWYgKGZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKVxcbiBcXHRcXHRmb2xpb19tYXJrX3VwdG9kYXRlKG5ld2ZvbGlvKTtcXG4gXFx0aWYgKGZvbGlvX3Rlc3RfY2xlYXJfYWN0aXZlKGZvbGlvKSkge1xcbkBAIC04MDcsNyArODA4LDYgQEAgdm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdGlmIChmb2xpb190ZXN0X2lkbGUoZm9saW8pKVxcbiBcXHRcXHRmb2xpb19zZXRfaWRsZShuZXdmb2xpbyk7XFxuIFxcbi1cXHRmb2xpb19taWdyYXRlX3JlZnMobmV3Zm9saW8sIGZvbGlvKTtcXG4gXFx0LypcXG4gXFx0ICogQ29weSBOVU1BIGluZm9ybWF0aW9uIHRvIHRoZSBuZXcgcGFnZSwgdG8gcHJldmVudCBvdmVyLWVhZ2VyXFxuIFxcdCAqIGZ1dHVyZSBtaWdyYXRpb25zIG9mIHRoaXMgc2FtZSBwYWdlLlxcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXFxuaW5kZXggMjQ1ZjY4Yzc1YjI4OS4uNDBkM2YxYjQ4YTc0YyAxMDA2NDRcXG4tLS0gYS9tbS92bXNjYW4uY1xcbisrKyBiL21tL3Ztc2Nhbi5jXFxuQEAgLTg2MywxOSArODYzLDIyIEBAIHN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG4gXFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pIFxcdTAwMjZcXHUwMDI2ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKSB7XFxuIFxcdFxcdC8qIEFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLiAqL1xcbiBcXHRcXHRpZiAoaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7XFxuLVxcdFxcdFxcdHNldF9tYXNrX2JpdHMoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTtcXG4rXFx0XFx0XFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xcbitcXHRcXHRcXHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xcbiBcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0c2V0X21hc2tfYml0cyhcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XFxuK1xcdFxcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0fVxcbiBcXG4gXFx0LyogUHJvbW90ZSBvbiBzZWNvbmQgYWNjZXNzICovXFxuLVxcdGlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgXFx1MDAzZSAxKVxcbi1cXHRcXHRzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7XFxuLVxcdGVsc2VcXG4rXFx0aWYgKGZvbGlvX2xydV9yZWZzKGZvbGlvKSBcXHUwMDNlIDEpIHtcXG4rXFx0XFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xcbitcXHRcXHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xcbitcXHR9IGVsc2Uge1xcbiBcXHRcXHRmb2xpb19tYXJrX2FjY2Vzc2VkKGZvbGlvKTtcXG4rXFx0fVxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiAjZWxzZVxcbkBAIC0zMjIwLDggKzMyMjMsOCBAQCBzdHJ1Y3QgY3RybF9wb3Mge1xcbiBcXHRpbnQgZ2FpbjtcXG4gfTtcXG4gXFxuLXN0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXIsIGludCBnYWluLFxcbi1cXHRcXHRcXHQgIHN0cnVjdCBjdHJsX3BvcyAqcG9zKVxcbitzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyX21pbixcXG4rXFx0XFx0XFx0ICBpbnQgdGllcl9tYXgsIGludCBnYWluLCBzdHJ1Y3QgY3RybF9wb3MgKnBvcylcXG4ge1xcbiBcXHRpbnQgaTtcXG4gXFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5AQCAtMzIzMCw3ICszMjMzLDcgQEAgc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllciwgaW50IGdhaW4sXFxuIFxcdHBvcy1cXHUwMDNlZ2FpbiA9IGdhaW47XFxuIFxcdHBvcy1cXHUwMDNlcmVmYXVsdGVkID0gcG9zLVxcdTAwM2V0b3RhbCA9IDA7XFxuIFxcbi1cXHRmb3IgKGkgPSB0aWVyICUgTUFYX05SX1RJRVJTOyBpIFxcdTAwM2M9IG1pbih0aWVyLCBNQVhfTlJfVElFUlMgLSAxKTsgaSsrKSB7XFxuK1xcdGZvciAoaSA9IHRpZXJfbWluOyBpIFxcdTAwM2M9IHRpZXJfbWF4OyBpKyspIHtcXG4gXFx0XFx0cG9zLVxcdTAwM2VyZWZhdWx0ZWQgKz0gbHJ1Z2VuLVxcdTAwM2VhdmdfcmVmYXVsdGVkW3R5cGVdW2ldICtcXG4gXFx0XFx0XFx0XFx0ICBhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZscnVnZW4tXFx1MDAzZXJlZmF1bHRlZFtoaXN0XVt0eXBlXVtpXSk7XFxuIFxcdFxcdHBvcy1cXHUwMDNldG90YWwgKz0gbHJ1Z2VuLVxcdTAwM2VhdmdfdG90YWxbdHlwZV1baV0gK1xcbkBAIC0zMjkxLDExICszMjk0LDExIEBAIHN0YXRpYyBib29sIHBvc2l0aXZlX2N0cmxfZXJyKHN0cnVjdCBjdHJsX3BvcyAqc3AsIHN0cnVjdCBjdHJsX3BvcyAqcHYpXFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuIFxcbiAvKiBwcm9tb3RlIHBhZ2VzIGFjY2Vzc2VkIHRocm91Z2ggcGFnZSB0YWJsZXMgKi9cXG4tc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXFxuK3N0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgaW50ICp0eXBlLFxcbitcXHRcXHRcXHQgICAgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVxcdTAwM2VmbGFncy5mKTtcXG4tXFxuLVxcdFZNX1dBUk5fT05fT05DRShnZW4gXFx1MDAzZT0gTUFYX05SX0dFTlMpO1xcbitcXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xcbitcXHRpbnQgb2xkX2dlbjtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUywgYW5kIGFjdGl2YXRlIGZpbGUtYmFja2VkXFxuQEAgLTMzMDQsMzEgKzMzMDcsMzUgQEAgc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFcXG4gXFx0ICovXFxuIFxcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgIWlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkge1xcbi1cXHRcXHRzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcXG4rXFx0XFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcXG4gXFx0XFx0cmV0dXJuIC0xO1xcbiBcXHR9XFxuIFxcbiBcXHRkbyB7XFxuK1xcdFxcdG9sZF9nZW4gPSBscnVfZ2V0X2dlbl9mbGFncyhvbGRfZmxhZ3MpO1xcbitcXHRcXHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XFxuK1xcbiBcXHRcXHQvKiBscnVfZ2VuX2RlbF9mb2xpbygpIGhhcyBpc29sYXRlZCB0aGlzIHBhZ2U/ICovXFxuLVxcdFxcdGlmICghKG9sZF9mbGFncyBcXHUwMDI2IExSVV9HRU5fTUFTSykpXFxuLVxcdFxcdFxcdHJldHVybiAtMTtcXG4rXFx0XFx0aWYgKG9sZF9nZW4gXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRicmVhaztcXG4gXFxuLVxcdFxcdG5ld19mbGFncyA9IG9sZF9mbGFncyBcXHUwMDI2IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpO1xcbi1cXHRcXHRuZXdfZmxhZ3MgfD0gKChnZW4gKyAxVUwpIFxcdTAwM2NcXHUwMDNjIExSVV9HRU5fUEdPRkYpIHwgQklUKFBHX3dvcmtpbmdzZXQpO1xcbi1cXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBcXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcXG4rXFx0XFx0bHJ1X3NldF9nZW5fZmxhZ3MoXFx1MDAyNm5ld19mbGFncywgbmV3X2dlbik7XFxuK1xcdFxcdGxydV9zZXRfcmVmc19mbGFncyhcXHUwMDI2bmV3X2ZsYWdzLCAwKTtcXG4rXFx0XFx0bmV3X2ZsYWdzIHw9IEJJVChQR193b3JraW5nc2V0KTtcXG4rXFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XFxuIFxcbi1cXHRyZXR1cm4gKChvbGRfZmxhZ3MgXFx1MDAyNiBMUlVfR0VOX01BU0spIFxcdTAwM2VcXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcXG4rXFx0KnR5cGUgPSBmb2xpb19mbGFnc19pc19maWxlX2xydShcXHUwMDI2b2xkX2ZsYWdzKTtcXG4rXFx0cmV0dXJuIG9sZF9nZW47XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgX19mb2xpb19pbmNfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfZ2VuLCBib29sICppbmNyZWFzZWQpXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cXHUwMDNlZmxhZ3MuZik7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XFxuIFxcdGludCBuZXdfZ2VuO1xcbiBcXG4tXFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCEob2xkX2ZsYWdzIFxcdTAwMjYgTFJVX0dFTl9NQVNLKSwgZm9saW8pO1xcbi1cXG4gXFx0ZG8ge1xcbi1cXHRcXHRuZXdfZ2VuID0gKChvbGRfZmxhZ3MgXFx1MDAyNiBMUlVfR0VOX01BU0spIFxcdTAwM2VcXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcXG4rXFx0XFx0bmV3X2dlbiA9IGxydV9nZXRfZ2VuX2ZsYWdzKG9sZF9mbGFncyk7XFxuK1xcbiBcXHRcXHQvKiBmb2xpb191cGRhdGVfZ2VuKCkgaGFzIHByb21vdGVkIHRoaXMgcGFnZT8gKi9cXG4gXFx0XFx0aWYgKG5ld19nZW4gXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBuZXdfZ2VuICE9IG9sZF9nZW4pIHtcXG4gXFx0XFx0XFx0aWYgKGluY3JlYXNlZClcXG5AQCAtMzMzNiwxMSArMzM0MywxMiBAQCBzdGF0aWMgaW50IF9fZm9saW9faW5jX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX2dlbiwgYm9vbCAqaW5jcmVhc2VkKVxcbiBcXHRcXHRcXHRyZXR1cm4gbmV3X2dlbjtcXG4gXFx0XFx0fVxcbiBcXG4rXFx0XFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xcbiBcXHRcXHRuZXdfZ2VuID0gKG9sZF9nZW4gKyAxKSAlIE1BWF9OUl9HRU5TO1xcbiBcXG4tXFx0XFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzIFxcdTAwMjYgfihMUlVfR0VOX01BU0sgfCBMUlVfUkVGU19GTEFHUyk7XFxuLVxcdFxcdG5ld19mbGFncyB8PSAobmV3X2dlbiArIDFVTCkgXFx1MDAzY1xcdTAwM2MgTFJVX0dFTl9QR09GRjtcXG4tXFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgXFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XFxuK1xcdFxcdGxydV9zZXRfZ2VuX2ZsYWdzKFxcdTAwMjZuZXdfZmxhZ3MsIG5ld19nZW4pO1xcbitcXHRcXHRscnVfc2V0X3JlZnNfZmxhZ3MoXFx1MDAyNm5ld19mbGFncywgMCk7XFxuK1xcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFxcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xcbiBcXG4gXFx0aWYgKGluY3JlYXNlZClcXG4gXFx0XFx0KmluY3JlYXNlZCA9IHRydWU7XFxuQEAgLTMzNjIsOSArMzM3MCw4IEBAIHN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHVwZGF0ZV9iYXRjaF9zaXplKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLVxcdFxcdFxcdCAgICAgIGludCBvbGRfZ2VuLCBpbnQgbmV3X2dlbilcXG4rXFx0XFx0XFx0ICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuLCBpbnQgdHlwZSlcXG4ge1xcbi1cXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcXG4gXFx0aW50IHpvbmUgPSBmb2xpb196b25lbnVtKGZvbGlvKTtcXG4gXFx0aW50IGRlbHRhID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbiBcXG5AQCAtMzU1MSwyMiArMzU1OCwyNCBAQCBzdGF0aWMgYm9vbCBzdWl0YWJsZV90b19zY2FuKGludCB0b3RhbCwgaW50IHlvdW5nKVxcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGJvb2wgZGlydHkpXFxuK1xcdFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBkaXJ0eSlcXG4ge1xcbi1cXHRpbnQgb2xkX2dlbjtcXG4rXFx0aW50IG5ld19nZW4sIG9sZF9nZW4sIHR5cGU7XFxuIFxcbiBcXHRpZiAoIWZvbGlvKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbitcXHRuZXdfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShSRUFEX09OQ0UobHJ1dmVjLVxcdTAwM2VscnVnZW4ubWF4X3NlcSkpO1xcbitcXG4gXFx0aWYgKGRpcnR5IFxcdTAwMjZcXHUwMDI2ICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgIShmb2xpb190ZXN0X2Fub24oZm9saW8pIFxcdTAwMjZcXHUwMDI2IGZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgICAgIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkpXFxuIFxcdFxcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xcbiBcXG4gXFx0aWYgKHdhbGspIHtcXG4tXFx0XFx0b2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sIFxcdTAwMjZ2bWEtXFx1MDAzZWZsYWdzKTtcXG4rXFx0XFx0b2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sIFxcdTAwMjZ0eXBlLCBcXHUwMDI2dm1hLVxcdTAwM2VmbGFncyk7XFxuIFxcdFxcdGlmIChvbGRfZ2VuIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgb2xkX2dlbiAhPSBuZXdfZ2VuKVxcbi1cXHRcXHRcXHR1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XFxuK1xcdFxcdFxcdHVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuLCB0eXBlKTtcXG4gXFx0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcXHUwMDI2dm1hLVxcdTAwM2VmbGFncykpIHtcXG4gXFx0XFx0b2xkX2dlbiA9IGZvbGlvX2xydV9nZW4oZm9saW8pO1xcbiBcXHRcXHRpZiAob2xkX2dlbiBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IG9sZF9nZW4gIT0gbmV3X2dlbilcXG5AQCAtMzU4OCw4ICszNTk3LDYgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIFxcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVxcdTAwM2Vwcml2YXRlO1xcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay1cXHUwMDNlbHJ1dmVjKTtcXG4gXFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdCh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbi1cXHRERUZJTkVfTUFYX1NFUSh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbi1cXHRpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcXG4gXFx0dW5zaWduZWQgaW50IG5yO1xcbiBcXHRwbWRfdCBwbWR2YWw7XFxuIFxcbkBAIC0zNjQwLDcgKzM2NDcsNyBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbiBcXHRcXHRpZiAobGFzdCAhPSBmb2xpbykge1xcbi1cXHRcXHRcXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLVxcdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xcbitcXHRcXHRcXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLVxcdTAwM2V2bWEsIHdhbGstXFx1MDAzZWxydXZlYywgbGFzdCwgZGlydHkpO1xcbiBcXG4gXFx0XFx0XFx0bGFzdCA9IGZvbGlvO1xcbiBcXHRcXHRcXHRkaXJ0eSA9IGZhbHNlO1xcbkBAIC0zNjUzLDcgKzM2NjAsNyBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0XFx0d2Fsay1cXHUwMDNlbW1fc3RhdHNbTU1fTEVBRl9ZT1VOR10gKz0gbnI7XFxuIFxcdH1cXG4gXFxuLVxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXFx1MDAzZXZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XFxuK1xcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXFx1MDAzZXZtYSwgd2Fsay1cXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XFxuIFxcdGxhc3QgPSBOVUxMO1xcbiBcXG4gXFx0aWYgKGkgXFx1MDAzYyBQVFJTX1BFUl9QVEUgXFx1MDAyNlxcdTAwMjYgZ2V0X25leHRfdm1hKFBNRF9NQVNLLCBQQUdFX1NJWkUsIGFyZ3MsIFxcdTAwMjZzdGFydCwgXFx1MDAyNmVuZCkpXFxuQEAgLTM2NzYsOCArMzY4Myw2IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhXFxuIFxcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVxcdTAwM2Vwcml2YXRlO1xcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay1cXHUwMDNlbHJ1dmVjKTtcXG4gXFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdCh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbi1cXHRERUZJTkVfTUFYX1NFUSh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbi1cXHRpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcXG4gXFxuIFxcdFZNX1dBUk5fT05fT05DRShwdWRfbGVhZigqcHVkKSk7XFxuIFxcbkBAIC0zNzMxLDcgKzM3MzYsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxcbiBcXHRcXHRcXHRnb3RvIG5leHQ7XFxuIFxcbiBcXHRcXHRpZiAobGFzdCAhPSBmb2xpbykge1xcbi1cXHRcXHRcXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xcbitcXHRcXHRcXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIHdhbGstXFx1MDAzZWxydXZlYywgbGFzdCwgZGlydHkpO1xcbiBcXG4gXFx0XFx0XFx0bGFzdCA9IGZvbGlvO1xcbiBcXHRcXHRcXHRkaXJ0eSA9IGZhbHNlO1xcbkBAIC0zNzQ1LDcgKzM3NTAsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxcbiBcXHRcXHRpID0gaSBcXHUwMDNlIE1JTl9MUlVfQkFUQ0ggPyAwIDogZmluZF9uZXh0X2JpdChiaXRtYXAsIE1JTl9MUlVfQkFUQ0gsIGkpICsgMTtcXG4gXFx0fSB3aGlsZSAoaSBcXHUwMDNjPSBNSU5fTFJVX0JBVENIKTtcXG4gXFxuLVxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XFxuK1xcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay1cXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XFxuIFxcbiBcXHRsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTtcXG4gXFx0c3Bpbl91bmxvY2socHRsKTtcXG5AQCAtNDM1MSw4ICs0MzU2LDYgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxcbiBcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gZm9saW9fcGdkYXQoZm9saW8pO1xcbiBcXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XFxuIFxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZTtcXG4tXFx0dW5zaWduZWQgbG9uZyBtYXhfc2VxO1xcbi1cXHRpbnQgZ2VuO1xcbiBcXG4gXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChwdm13LVxcdTAwM2VwdGwpO1xcbiBcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF9scnUoZm9saW8pLCBmb2xpbyk7XFxuQEAgLTQzODksOCArNDM5Miw2IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcXG4gXFxuIFxcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XFxuIFxcdGxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7XFxuLVxcdG1heF9zZXEgPSBSRUFEX09OQ0UoKGxydXZlYyktXFx1MDAzZWxydWdlbi5tYXhfc2VxKTtcXG4tXFx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcXG4gXFx0bW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcXG4gXFxuIFxcdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XFxuQEAgLTQ0MjIsNyArNDQyMyw3IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbiBcXHRcXHRpZiAobGFzdCAhPSBmb2xpbykge1xcbi1cXHRcXHRcXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xcbitcXHRcXHRcXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxydXZlYywgbGFzdCwgZGlydHkpO1xcbiBcXG4gXFx0XFx0XFx0bGFzdCA9IGZvbGlvO1xcbiBcXHRcXHRcXHRkaXJ0eSA9IGZhbHNlO1xcbkBAIC00NDM0LDEzICs0NDM1LDE0IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcXG4gXFx0XFx0eW91bmcgKz0gbnI7XFxuIFxcdH1cXG4gXFxuLVxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XFxuK1xcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XFxuIFxcbiBcXHRsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTtcXG4gXFxuIFxcdC8qIGZlZWRiYWNrIGZyb20gcm1hcCB3YWxrZXJzIHRvIHBhZ2UgdGFibGUgd2Fsa2VycyAqL1xcbiBcXHRpZiAobW1fc3RhdGUgXFx1MDAyNlxcdTAwMjYgc3VpdGFibGVfdG9fc2NhbihpLCB5b3VuZykpXFxuLVxcdFxcdHVwZGF0ZV9ibG9vbV9maWx0ZXIobW1fc3RhdGUsIG1heF9zZXEsIHB2bXctXFx1MDAzZXBtZCk7XFxuK1xcdFxcdHVwZGF0ZV9ibG9vbV9maWx0ZXIobW1fc3RhdGUsIFJFQURfT05DRShscnV2ZWMtXFx1MDAzZWxydWdlbi5tYXhfc2VxKSxcXG4rXFx0XFx0XFx0XFx0ICAgIHB2bXctXFx1MDAzZXBtZCk7XFxuIFxcbiBcXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XFxuIFxcbkBAIC00Nzg1LDcgKzQ3ODcsNyBAQCBzdGF0aWMgYm9vbCBpc29sYXRlX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYVxcbiBcXG4gXFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXFxuIFxcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSlcXG4tXFx0XFx0c2V0X21hc2tfYml0cyhcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIDApO1xcbitcXHRcXHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xcbiBcXG4gXFx0c3VjY2VzcyA9IGxydV9nZW5fZGVsX2ZvbGlvKGxydXZlYywgZm9saW8sIHRydWUpO1xcbiBcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIXN1Y2Nlc3MsIGZvbGlvKTtcXG5AQCAtNDg3OCw5ICs0ODgwLDkgQEAgc3RhdGljIGludCBnZXRfdGllcl9pZHgoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSlcXG4gXFx0ICogVGhpcyB2YWx1ZSBpcyBjaG9zZW4gYmVjYXVzZSBhbnkgb3RoZXIgdGllciB3b3VsZCBoYXZlIGF0IGxlYXN0IHR3aWNlXFxuIFxcdCAqIGFzIG1hbnkgcmVmYXVsdHMgYXMgdGhlIGZpcnN0IHRpZXIuXFxuIFxcdCAqL1xcbi1cXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgMCwgMiwgXFx1MDAyNnNwKTtcXG4tXFx0Zm9yICh0aWVyID0gMTsgdGllciBcXHUwMDNjIE1BWF9OUl9USUVSUzsgdGllcisrKSB7XFxuLVxcdFxcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0aWVyLCAzLCBcXHUwMDI2cHYpO1xcbitcXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NSU4sIDIsIFxcdTAwMjZzcCk7XFxuK1xcdGZvciAodGllciA9IExSVV9USUVSX01JTiArIDE7IHRpZXIgXFx1MDAzYz0gTFJVX1RJRVJfTUFYOyB0aWVyKyspIHtcXG4rXFx0XFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIHRpZXIsIDMsIFxcdTAwMjZwdik7XFxuIFxcdFxcdGlmICghcG9zaXRpdmVfY3RybF9lcnIoXFx1MDAyNnNwLCBcXHUwMDI2cHYpKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0fVxcbkBAIC00OTAxLDggKzQ5MDMsMTAgQEAgc3RhdGljIGludCBnZXRfdHlwZV90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXFxuIFxcdCAqIENvbXBhcmUgdGhlIHN1bSBvZiBhbGwgdGllcnMgb2YgYW5vbiB3aXRoIHRoYXQgb2YgZmlsZSB0byBkZXRlcm1pbmVcXG4gXFx0ICogd2hpY2ggdHlwZSB0byBzY2FuLlxcbiBcXHQgKi9cXG4tXFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fQU5PTiwgTUFYX05SX1RJRVJTLCBzd2FwcGluZXNzLCBcXHUwMDI2c3ApO1xcbi1cXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBNQVhfTlJfVElFUlMsIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgXFx1MDAyNnB2KTtcXG4rXFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fQU5PTiwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NQVgsXFxuK1xcdFxcdCAgICAgIHN3YXBwaW5lc3MsIFxcdTAwMjZzcCk7XFxuK1xcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUFYLFxcbitcXHRcXHQgICAgICBNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3MsIFxcdTAwMjZwdik7XFxuIFxcbiBcXHRyZXR1cm4gcG9zaXRpdmVfY3RybF9lcnIoXFx1MDAyNnNwLCBcXHUwMDI2cHYpO1xcbiB9XFxuQEAgLTUwMTcsOCArNTAyMSwxMCBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0LyogZG9uJ3QgYWRkIHJlamVjdGVkIGZvbGlvcyB0byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gKi9cXG4tXFx0XFx0aWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKVxcbi1cXHRcXHRcXHRzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR19hY3RpdmUpKTtcXG4rXFx0XFx0aWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKSB7XFxuK1xcdFxcdFxcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XFxuK1xcdFxcdFxcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFxuIFxcdG1vdmVfZm9saW9zX3RvX2xydShcXHUwMDI2bGlzdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjIzOjUyLjM5NjE2MTE3OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzQ2MDMwOTU2MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUlHUkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibHJ1X2dlbl9sb29rX2Fyb3VuZFwiLFxuICAgIFwiZm9saW9fbWlncmF0ZV9mbGFnc1wiLFxuICAgIFwibWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVcIixcbiAgICBcIndhbGtfcHRlX3JhbmdlXCIsXG4gICAgXCJ3YWxrX3BtZF9yYW5nZV9sb2NrZWRcIixcbiAgICBcImZvbGlvX3VwZGF0ZV9nZW5cIixcbiAgICBcImV2aWN0X2ZvbGlvc1wiLFxuICAgIFwiaXNvbGF0ZV9mb2xpb1wiLFxuICAgIFwibHJ1X2dlbl9pbmNfcmVmc1wiLFxuICAgIFwibHJ1X2dlbl9jbGVhcl9yZWZzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgYWNyb3NzIG1tL3Ztc2Nhbi5jLCBtbS9mb2xpby5jLCBtbS9tZW1jb250cm9sLmMsIGFuZCBtbS9taWdyYXRlLmMsIGFsdGVyaW5nIE11bHRpLUdlbiBMUlUgKE1HTFJVKSByZWZlcmVuY2UgdHJhY2tpbmcsIGZvbGlvIGZsYWcgbWFuaXB1bGF0aW9uLCB0aWVyIGNhbGN1bGF0aW9ucywgcGFnZSBldmljdGlvbiwgYW5kIG1lbWNnIExSVSB6b25lIGFjY291bnRpbmcuIEl0IGFsc28gYWRkcyBzZXZlcmFsIFZNX1dBUk5fT05fT05DRSBhc3NlcnRpb25zIGFuZCBjaGFuZ2VzIHN5bmNocm9uaXphdGlvbi9hcml0aG1ldGljIGxvZ2ljLiBUaGVzZSBwYXRocyBhcmUgZnVsbHkgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGUzY2JiYzc2ZTFjOTY2Yzc2ZmU2MjEyOTlhMzJkMTdhZmE3ZTQwMDNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDE2OjIzOjQ5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuaW5kZXggYzc5OTkyNjQzNTU2MC4uMmI2NzY5NDI4NWQwNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuQEAgLTEwMCw3ICsxMDAsNyBAQCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSB7XG4gXHQvKiBGaWVsZHMgd2hpY2ggZ2V0IHVwZGF0ZWQgb2Z0ZW4gYXQgdGhlIGVuZC4gKi9cbiBcdHN0cnVjdCBscnV2ZWNcdFx0bHJ1dmVjO1xuIFx0Q0FDSEVMSU5FX1BBRERJTkcoX3BhZDJfKTtcbi1cdHVuc2lnbmVkIGxvbmdcdFx0bHJ1X3pvbmVfc2l6ZVtNQVhfTlJfWk9ORVNdW05SX0xSVV9MSVNUU107XG4rXHRsb25nXHRcdFx0bHJ1X3pvbmVfc2l6ZVtNQVhfTlJfWk9ORVNdW05SX0xSVV9MSVNUU107XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9yZWNsYWltX2l0ZXJcdGl0ZXI7XG4gXG4gXHQvKlxuQEAgLTg4NywxMCArODg3LDE1IEBAIHN0YXRpYyBpbmxpbmVcbiB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRlbnVtIGxydV9saXN0IGxydSwgaW50IHpvbmVfaWR4KVxuIHtcbitcdGxvbmcgdmFsO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16O1xuIFxuIFx0bXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcbi1cdHJldHVybiBSRUFEX09OQ0UobXotXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7XG4rXHR2YWwgPSBSRUFEX09OQ0UobXotXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7XG4rXHRpZiAoV0FSTl9PTl9PTkNFKHZhbCBcdTAwM2MgMCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHZhbDtcbiB9XG4gXG4gdm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzayk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaCBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcbmluZGV4IDYyMWM4NjUzZDhmN2UuLmFiNjliOTkzMDg5M2YgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG5AQCAtMzAsNiArMzAsMTcgQEAgc3RhdGljIGlubGluZSBpbnQgZm9saW9faXNfZmlsZV9scnUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHJldHVybiAhZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKTtcbiB9XG4gXG4rLyoqXG4rICogZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUgLSBTaG91bGQgdGhlIGZvbGlvIGJlIG9uIGEgZmlsZSBMUlUgb3IgYW5vbiBMUlU/XG4rICogQGZsYWdzOiBUaGUgZm9saW8ncyBmbGFncy5cbisgKlxuKyAqIEp1c3QgbGlrZSBmb2xpb19pc19maWxlX2xydSBidXQgdGFrZSB0aGUgZm9saW8gZmxhZ3MgZGlyZWN0bHkgaW5zdGVhZC5cbisgKi9cbitzdGF0aWMgaW5saW5lIGludCBmb2xpb19mbGFnc19pc19maWxlX2xydShjb25zdCB1bnNpZ25lZCBsb25nICpmbGFncylcbit7XG4rXHRyZXR1cm4gIXRlc3RfYml0KFBHX3N3YXBiYWNrZWQsIGZsYWdzKTtcbit9XG4rXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0XHRcdGVudW0gbHJ1X2xpc3QgbHJ1LCBlbnVtIHpvbmVfdHlwZSB6aWQsXG4gXHRcdFx0XHRsb25nIG5yX3BhZ2VzKVxuQEAgLTE0MiwxMCArMTUzLDY2IEBAIHN0YXRpYyBpbmxpbmUgaW50IGxydV90aWVyX2Zyb21fcmVmcyhpbnQgcmVmcywgYm9vbCB3b3JraW5nc2V0KVxuIFx0cmV0dXJuIHdvcmtpbmdzZXQgPyBNQVhfTlJfVElFUlMgLSAxIDogb3JkZXJfYmFzZV8yKHJlZnMpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuKy8qKlxuKyAqIGxydV9zZXRfZ2VuX2ZsYWdzIC0gU2V0IHRoZSBMUlUgZ2VuZXJhdGlvbiBudW1iZXIgdG8gc3BlY2lmaWVkIGZvbGlvIGZsYWdzLlxuKyAqIEBmbGFnczogcG9pbnRlciB0byB0aGUgZm9saW8gZmxhZ3NcbisgKiBAZ2VuOiBnZW5lcmF0aW9uIG51bWJlciwgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfc2V0X2dlbl9mbGFncyh1bnNpZ25lZCBsb25nICpmbGFncywgaW50IGdlbilcbit7XG4rXHRCVUlMRF9CVUdfT04oTFJVX0dFTl9NQVNLIFx1MDAyNiBMUlVfUkVGU19NQVNLKTtcbitcdFZNX1dBUk5fT05fT05DRShnZW4gXHUwMDNlPSBNQVhfTlJfR0VOUyB8fCBnZW4gXHUwMDNjIDApO1xuK1x0LyogU3RvcmUgZ2VuIG9mZnNldCBieSAxLCB6ZXJvIG1lYW5zIHRoZSBmb2xpbyBpcyBvZmYtbGlzdC4gKi9cbitcdCpmbGFncyBcdTAwMjY9IH5MUlVfR0VOX01BU0s7XG4rXHQqZmxhZ3MgfD0gKGdlbiArIDFVTCkgXHUwMDNjXHUwMDNjIExSVV9HRU5fUEdPRkY7XG4rfVxuK1xuKy8qKlxuKyAqIGxydV9nZXRfZ2VuX2ZsYWdzIC0gUmV0dXJuIHRoZSBMUlUgZ2VuZXJhdGlvbiBudW1iZXIgZnJvbSBmb2xpbyBmbGFncy5cbisgKiBAZmxhZ3M6IGZvbGlvIGZsYWdzXG4rICpcbisgKiBSZXR1cm5zOiBBIG51bWJlciBiZXR3ZWVuIDAgYW5kIChNQVhfTlJfR0VOUyAtIDEpLCBpbmNsdXNpdmUuIFJldHVybnNcbisgKiAtMSBpZiB0aGUgZmxhZ3MgaW5kaWNhdGUgdGhlIGZvbGlvIGlzIG9mZiB0aGUgbGlzdCAoZS5nLiwgaXNvbGF0ZWQpLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgaW50IGxydV9nZXRfZ2VuX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4re1xuK1x0aW50IGdlbiA9ICgoZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbitcbitcdC8qIEV4Y2x1ZGUgdGhlIGxlZ2FsIC0xIGZyb20gdGhlIHVuc2lnbmVkIE1BWF9OUl9HRU5TIGNvbXBhcmlzb24gKi9cbitcdFZNX1dBUk5fT05fT05DRShnZW4gIT0gLTEgXHUwMDI2XHUwMDI2IGdlbiBcdTAwM2U9IE1BWF9OUl9HRU5TKTtcbitcdHJldHVybiBnZW47XG4rfVxuK1xuKy8qKlxuKyAqIGxydV9zZXRfcmVmc19mbGFncyAtIFNldCB0aGUgTFJVIHJlZmVyZW5jZWQgY291bnQgdG8gZm9saW8gZmxhZ3MuXG4rICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFnc1xuKyAqIEByZWZzOiByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IG51bWJlciwgYmV0d2VlbiAwIGFuZCBMUlVfUkVGU19NQVgsIGluY2x1c2l2ZS5cbisgKlxuKyAqIEZvciBNR0xSVSwgUEdfcmVmZXJlbmNlZCBob2xkcyB0aGUgZmlyc3QgcmVmLCBhbmQgdGhlIGV4dHJhIGJpdHMgaG9sZCB0aGVcbisgKiByZW1haW5pbmcgcmVmcy4gRm9yIGNsYXNzaWNhbCBMUlUgdGhlIGV4dHJhIGJpdHMgYXJlIG5vdCB1c2VkLCBzbyBpdCBjYW5cbisgKiBhbHNvIGJlIHNlZW4gYXMgdGhlIHJlZnMgY291bnQgbmV2ZXIgZXhjZWVkcyAxLiBJbiBib3RoIGNhc2VzLCByZWZzID09IDFcbisgKiBtZWFucyBQR19yZWZlcmVuY2VkIGlzIHNldCBhbmQgdGhlIGV4dHJhIGJpdHMgYXJlIHplcm8sIGFuZCByZWZzID09IDAgbWVhbnNcbisgKiBQR19yZWZlcmVuY2VkIGFuZCB0aGUgZXh0cmEgYml0cyBhcmUgYWxsIHVuc2V0LlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfc2V0X3JlZnNfZmxhZ3ModW5zaWduZWQgbG9uZyAqZmxhZ3MsIHVuc2lnbmVkIGludCByZWZzKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4rXHRWTV9XQVJOX09OX09OQ0UocmVmcyBcdTAwM2UgTFJVX1JFRlNfTUFYKTtcbitcdEJVSUxEX0JVR19PTihMUlVfUkVGU19NQVggIT0gKExSVV9SRUZTX01BU0sgXHUwMDNlXHUwMDNlIExSVV9SRUZTX1BHT0ZGKSArIDEpO1xuIFxuK1x0KmZsYWdzIFx1MDAyNj0gfkxSVV9SRUZTX0ZMQUdTO1xuK1x0aWYgKCFyZWZzKVxuK1x0XHRyZXR1cm47XG4rXHQqZmxhZ3MgfD0gKEJJVChQR19yZWZlcmVuY2VkKSB8ICgocmVmcyAtIDFVTCkgXHUwMDNjXHUwMDNjIExSVV9SRUZTX1BHT0ZGKSk7XG4rfVxuK1xuKy8qKlxuKyAqIGxydV9nZXRfcmVmc19mbGFncyAtIFJldHVybiBMUlUgcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCBmcm9tIGZvbGlvIGZsYWdzLlxuKyAqIEBmbGFnczogZm9saW8gZmxhZ3NcbisgKlxuKyAqIFJlYWRzIHRoZSBMUlUgcmVmZXJlbmNlZCBjb3VudCBzZXQgYnkgbHJ1X3NldF9yZWZzX2ZsYWdzKCkuXG4rICovXG4rc3RhdGljIGlubGluZSBpbnQgbHJ1X2dldF9yZWZzX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4re1xuIFx0aWYgKCEoZmxhZ3MgXHUwMDI2IEJJVChQR19yZWZlcmVuY2VkKSkpXG4gXHRcdHJldHVybiAwO1xuIFx0LypcbkBAIC0xNTUsMTEgKzIyMiwyNCBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cmV0dXJuICgoZmxhZ3MgXHUwMDI2IExSVV9SRUZTX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfUkVGU19QR09GRikgKyAxO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfZ2VuKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuK1x0cmV0dXJuIGxydV9nZXRfcmVmc19mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpO1xuK31cbiBcbi1cdHJldHVybiAoKGZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgcmVmcylcbit7XG4rXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuK1xuK1x0ZG8ge1xuK1x0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XG4rXHRcdGxydV9zZXRfcmVmc19mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIHJlZnMpO1xuK1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X2dlbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHJldHVybiBscnVfZ2V0X2dlbl9mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9pc19hY3RpdmUoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgZ2VuKVxuQEAgLTI3MCw3ICszNTAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9hZGRfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpO1xuIFx0ZmxhZ3MgPSAoZ2VuICsgMVVMKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRjtcbiBcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBNSU5fTlJfR0VOUyBhYm91dCBQR19hY3RpdmUgKi9cbi1cdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX0dFTl9NQVNLIHwgQklUKFBHX2FjdGl2ZSksIGZsYWdzKTtcbitcdHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpO1xuIFxuIFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCAtMSwgZ2VuKTtcbiBcdC8qIGZvciBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoKSAqL1xuQEAgLTI5NSw3ICszNzUsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFxuIFx0LyogZm9yIGZvbGlvX21pZ3JhdGVfZmxhZ3MoKSAqL1xuIFx0ZmxhZ3MgPSAhcmVjbGFpbWluZyBcdTAwMjZcdTAwMjYgbHJ1X2dlbl9pc19hY3RpdmUobHJ1dmVjLCBnZW4pID8gQklUKFBHX2FjdGl2ZSkgOiAwO1xuLVx0ZmxhZ3MgPSBzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9HRU5fTUFTSywgZmxhZ3MpO1xuK1x0ZmxhZ3MgPSBzZXRfbWFza19iaXRzKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgTFJVX0dFTl9NQVNLLCBmbGFncyk7XG4gXHRnZW4gPSAoKGZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4gXG4gXHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIGdlbiwgLTEpO1xuQEAgLTMwNCwxMSArMzg0LDE5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXG4rLyoqXG4rICogZm9saW9fbWlncmF0ZV9scnVfcmVmcyAtIGNvcHkgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBhIG5ldyBmb2xpb1xuKyAqIEBuZXc6IHRoZSBkZXN0aW5hdGlvbiBmb2xpb1xuKyAqIEBvbGQ6IHRoZSBzb3VyY2UgZm9saW9cbisgKlxuKyAqIFRyYW5zZmVyIHRoZSByZWZlcmVuY2Ugc3RhdGUgdG8gQG5ldyBkdXJpbmcgbWlncmF0aW9uOiB0aGUgTUdMUlVcbisgKiByZWZzIGNvdW50LCBpbmNsdWRpbmcgUEdfcmVmZXJlbmNlZCwgb3IganVzdCBQR19yZWZlcmVuY2VkIGZvciB0aGVcbisgKiBhY3RpdmUvaW5hY3RpdmUgTFJVLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcbiB7XG4tXHR1bnNpZ25lZCBsb25nIHJlZnMgPSBSRUFEX09OQ0Uob2xkLVx1MDAzZWZsYWdzLmYpIFx1MDAyNiBMUlVfUkVGU19NQVNLO1xuLVxuLVx0c2V0X21hc2tfYml0cyhcdTAwMjZuZXctXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgcmVmcyk7XG4rXHRCVUlMRF9CVUdfT04oTFJVX1JFRlNfTUFTSyBcdTAwMjYgQklUKFBHX3JlZmVyZW5jZWQpKTtcbitcdGZvbGlvX3NldF9scnVfcmVmcyhuZXcsIGZvbGlvX2xydV9yZWZzKG9sZCkpO1xuIH1cbiAjZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cbiBcbkBAIC0zMzcsOSArNDI1LDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcbiB7XG4tXG4rXHRpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKG9sZCkpXG4rXHRcdGZvbGlvX3NldF9yZWZlcmVuY2VkKG5ldyk7XG4gfVxuICNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5pbmRleCA4NGUyMzdmMmMxN2RiLi5jOWFlNzk5MWE4YjIwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuQEAgLTQ5NSwxMSArNDk1LDE0IEBAIGVudW0gbHJ1dmVjX2ZsYWdzIHtcbiAgKiBmb2xpby1cdTAwM2VmbGFncywgbWFza2VkIGJ5IExSVV9SRUZTX01BU0suXG4gICovXG4gI2RlZmluZSBNQVhfTlJfVElFUlNcdFx0NFVcbisjZGVmaW5lIExSVV9USUVSX01JTlx0XHQwVVxuKyNkZWZpbmUgTFJVX1RJRVJfTUFYXHRcdChNQVhfTlJfVElFUlMgLSAxKVxuIFxuICNpZm5kZWYgX19HRU5FUkFUSU5HX0JPVU5EU19IXG4gXG4gI2RlZmluZSBMUlVfR0VOX01BU0tcdFx0KChCSVQoTFJVX0dFTl9XSURUSCkgLSAxKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRilcbiAjZGVmaW5lIExSVV9SRUZTX01BU0tcdFx0KChCSVQoTFJVX1JFRlNfV0lEVEgpIC0gMSkgXHUwMDNjXHUwMDNjIExSVV9SRUZTX1BHT0ZGKVxuKyNkZWZpbmUgTFJVX1JFRlNfTUFYXHRcdEJJVChMUlVfUkVGU19XSURUSClcbiBcbiAvKlxuICAqIEZvciBmb2xpb3MgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzLFxuZGlmZiAtLWdpdCBhL21tL2ZvbGlvLmMgYi9tbS9mb2xpby5jXG5pbmRleCA1MGE2ZGJlNTU5OThlLi40N2E0MzdlMGY3ZmRlIDEwMDY0NFxuLS0tIGEvbW0vZm9saW8uY1xuKysrIGIvbW0vZm9saW8uY1xuQEAgLTM1NCwyNiArMzU0LDI4IEBAIHN0YXRpYyB2b2lkIF9fbHJ1X2NhY2hlX2FjdGl2YXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXG4gc3RhdGljIHZvaWQgbHJ1X2dlbl9pbmNfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4rXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuK1x0aW50IHJlZnM7XG4gXG4gXHRpZiAoZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbykpXG4gXHRcdHJldHVybjtcbiBcbiBcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqL1xuLVx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKSB7XG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcbitcdGlmICghZm9saW9fbHJ1X3JlZnMoZm9saW8pKSB7XG4rXHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbiBcdGRvIHtcbi1cdFx0aWYgKChvbGRfZmxhZ3MgXHUwMDI2IExSVV9SRUZTX01BU0spID09IExSVV9SRUZTX01BU0spIHtcbitcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuK1x0XHRyZWZzID0gbHJ1X2dldF9yZWZzX2ZsYWdzKG9sZF9mbGFncyk7XG4rXHRcdGlmIChyZWZzID09IExSVV9SRUZTX01BWCkge1xuIFx0XHRcdGlmICghZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSlcbiBcdFx0XHRcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcbiBcdFx0XHRyZXR1cm47XG4gXHRcdH1cbi1cbi1cdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzICsgQklUKExSVV9SRUZTX1BHT0ZGKTtcbi1cdH0gd2hpbGUgKCF0cnlfY21weGNoZyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuK1x0XHRscnVfc2V0X3JlZnNfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCByZWZzICsgMSk7XG4rXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbkBAIC0zODUsNyArMzg3LDggQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRpZiAoZ2VuIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MgfCBCSVQoUEdfd29ya2luZ3NldCksIDApO1xuK1x0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbitcdGZvbGlvX2NsZWFyX3dvcmtpbmdzZXQoZm9saW8pO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0c2VxID0gUkVBRF9PTkNFKGZvbGlvX2xydXZlYyhmb2xpbyktXHUwMDNlbHJ1Z2VuLm1pbl9zZXFbdHlwZV0pO1xuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggYmQxZTdlMTU0NDI2NS4uZjE3YjJiMmQ2MTA1NSAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuKysrIGIvbW0vbWVtY29udHJvbC5jXG5AQCAtMTUyOSwyOCArMTUyOSwxMiBAQCB2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXG4gXHRcdFx0XHRpbnQgemlkLCBsb25nIG5yX3BhZ2VzKVxuIHtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejtcbi1cdHVuc2lnbmVkIGxvbmcgKmxydV9zaXplO1xuLVx0bG9uZyBzaXplO1xuIFxuIFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0bXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcbi1cdGxydV9zaXplID0gXHUwMDI2bXotXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6aWRdW2xydV07XG4tXG4tXHRpZiAobnJfcGFnZXMgXHUwMDNjIDApXG4tXHRcdCpscnVfc2l6ZSArPSBucl9wYWdlcztcbi1cbi1cdHNpemUgPSAqbHJ1X3NpemU7XG4tXHRpZiAoV0FSTl9PTkNFKHNpemUgXHUwMDNjIDAsXG4tXHRcdFwiJXMoJXAsICVkLCAlbGQpOiBscnVfc2l6ZSAlbGRcXG5cIixcbi1cdFx0X19mdW5jX18sIGxydXZlYywgbHJ1LCBucl9wYWdlcywgc2l6ZSkpIHtcbi1cdFx0Vk1fQlVHX09OKDEpO1xuLVx0XHQqbHJ1X3NpemUgPSAwO1xuLVx0fVxuLVxuLVx0aWYgKG5yX3BhZ2VzIFx1MDAzZSAwKVxuLVx0XHQqbHJ1X3NpemUgKz0gbnJfcGFnZXM7XG4rXHRtei1cdTAwM2VscnVfem9uZV9zaXplW3ppZF1bbHJ1XSArPSBucl9wYWdlcztcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jXG5pbmRleCAxNWI0NTgzMmJjZmE3Li5hMzY5ZDBjOTVjMzg2IDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZS5jXG4rKysgYi9tbS9taWdyYXRlLmNcbkBAIC03NzYsOCArNzc2LDkgQEAgdm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0aW50IGNwdXBpZDtcbiBcbi1cdGlmIChmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKVxuLVx0XHRmb2xpb19zZXRfcmVmZXJlbmNlZChuZXdmb2xpbyk7XG4rXHQvKiBDb3B5IHRoZSByZWZlcmVuY2Ugc3RhdGUsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkICovXG4rXHRmb2xpb19taWdyYXRlX2xydV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7XG4rXG4gXHRpZiAoZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpXG4gXHRcdGZvbGlvX21hcmtfdXB0b2RhdGUobmV3Zm9saW8pO1xuIFx0aWYgKGZvbGlvX3Rlc3RfY2xlYXJfYWN0aXZlKGZvbGlvKSkge1xuQEAgLTgwNyw3ICs4MDgsNiBAQCB2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGlmIChmb2xpb190ZXN0X2lkbGUoZm9saW8pKVxuIFx0XHRmb2xpb19zZXRfaWRsZShuZXdmb2xpbyk7XG4gXG4tXHRmb2xpb19taWdyYXRlX3JlZnMobmV3Zm9saW8sIGZvbGlvKTtcbiBcdC8qXG4gXHQgKiBDb3B5IE5VTUEgaW5mb3JtYXRpb24gdG8gdGhlIG5ldyBwYWdlLCB0byBwcmV2ZW50IG92ZXItZWFnZXJcbiBcdCAqIGZ1dHVyZSBtaWdyYXRpb25zIG9mIHRoaXMgc2FtZSBwYWdlLlxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDI0NWY2OGM3NWIyODkuLjQwZDNmMWI0OGE3NGMgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC04NjMsMTkgKzg2MywyMiBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4gXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKSB7XG4gXHRcdC8qIEFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLiAqL1xuIFx0XHRpZiAoaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7XG4tXHRcdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTtcbitcdFx0XHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XG4rXHRcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdFx0fVxuIFxuLVx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XG4rXHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbiBcdC8qIFByb21vdGUgb24gc2Vjb25kIGFjY2VzcyAqL1xuLVx0aWYgKGZvbGlvX2xydV9yZWZzKGZvbGlvKSBcdTAwM2UgMSlcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTtcbi1cdGVsc2VcbitcdGlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgXHUwMDNlIDEpIHtcbitcdFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xuK1x0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuK1x0fSBlbHNlIHtcbiBcdFx0Zm9saW9fbWFya19hY2Nlc3NlZChmb2xpbyk7XG4rXHR9XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gI2Vsc2VcbkBAIC0zMjIwLDggKzMyMjMsOCBAQCBzdHJ1Y3QgY3RybF9wb3Mge1xuIFx0aW50IGdhaW47XG4gfTtcbiBcbi1zdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2Fpbixcbi1cdFx0XHQgIHN0cnVjdCBjdHJsX3BvcyAqcG9zKVxuK3N0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXJfbWluLFxuK1x0XHRcdCAgaW50IHRpZXJfbWF4LCBpbnQgZ2Fpbiwgc3RydWN0IGN0cmxfcG9zICpwb3MpXG4ge1xuIFx0aW50IGk7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbkBAIC0zMjMwLDcgKzMyMzMsNyBAQCBzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2FpbixcbiBcdHBvcy1cdTAwM2VnYWluID0gZ2FpbjtcbiBcdHBvcy1cdTAwM2VyZWZhdWx0ZWQgPSBwb3MtXHUwMDNldG90YWwgPSAwO1xuIFxuLVx0Zm9yIChpID0gdGllciAlIE1BWF9OUl9USUVSUzsgaSBcdTAwM2M9IG1pbih0aWVyLCBNQVhfTlJfVElFUlMgLSAxKTsgaSsrKSB7XG4rXHRmb3IgKGkgPSB0aWVyX21pbjsgaSBcdTAwM2M9IHRpZXJfbWF4OyBpKyspIHtcbiBcdFx0cG9zLVx1MDAzZXJlZmF1bHRlZCArPSBscnVnZW4tXHUwMDNlYXZnX3JlZmF1bHRlZFt0eXBlXVtpXSArXG4gXHRcdFx0XHQgIGF0b21pY19sb25nX3JlYWQoXHUwMDI2bHJ1Z2VuLVx1MDAzZXJlZmF1bHRlZFtoaXN0XVt0eXBlXVtpXSk7XG4gXHRcdHBvcy1cdTAwM2V0b3RhbCArPSBscnVnZW4tXHUwMDNlYXZnX3RvdGFsW3R5cGVdW2ldICtcbkBAIC0zMjkxLDExICszMjk0LDExIEBAIHN0YXRpYyBib29sIHBvc2l0aXZlX2N0cmxfZXJyKHN0cnVjdCBjdHJsX3BvcyAqc3AsIHN0cnVjdCBjdHJsX3BvcyAqcHYpXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiBcbiAvKiBwcm9tb3RlIHBhZ2VzIGFjY2Vzc2VkIHRocm91Z2ggcGFnZSB0YWJsZXMgKi9cbi1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbitzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGludCAqdHlwZSxcbitcdFx0XHQgICAgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiB7XG4tXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuLVxuLVx0Vk1fV0FSTl9PTl9PTkNFKGdlbiBcdTAwM2U9IE1BWF9OUl9HRU5TKTtcbitcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4rXHRpbnQgb2xkX2dlbjtcbiBcbiBcdC8qXG4gXHQgKiBTZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MsIGFuZCBhY3RpdmF0ZSBmaWxlLWJhY2tlZFxuQEAgLTMzMDQsMzEgKzMzMDcsMzUgQEAgc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFcbiBcdCAqL1xuIFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7XG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcbitcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcbiBcdFx0cmV0dXJuIC0xO1xuIFx0fVxuIFxuIFx0ZG8ge1xuK1x0XHRvbGRfZ2VuID0gbHJ1X2dldF9nZW5fZmxhZ3Mob2xkX2ZsYWdzKTtcbitcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuK1xuIFx0XHQvKiBscnVfZ2VuX2RlbF9mb2xpbygpIGhhcyBpc29sYXRlZCB0aGlzIHBhZ2U/ICovXG4tXHRcdGlmICghKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSlcbi1cdFx0XHRyZXR1cm4gLTE7XG4rXHRcdGlmIChvbGRfZ2VuIFx1MDAzYyAwKVxuK1x0XHRcdGJyZWFrO1xuIFxuLVx0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgXHUwMDI2IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpO1xuLVx0XHRuZXdfZmxhZ3MgfD0gKChnZW4gKyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGKSB8IEJJVChQR193b3JraW5nc2V0KTtcbi1cdH0gd2hpbGUgKCF0cnlfY21weGNoZyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuK1x0XHRscnVfc2V0X2dlbl9mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIG5ld19nZW4pO1xuK1x0XHRscnVfc2V0X3JlZnNfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCAwKTtcbitcdFx0bmV3X2ZsYWdzIHw9IEJJVChQR193b3JraW5nc2V0KTtcbitcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4gXG4tXHRyZXR1cm4gKChvbGRfZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbitcdCp0eXBlID0gZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUoXHUwMDI2b2xkX2ZsYWdzKTtcbitcdHJldHVybiBvbGRfZ2VuO1xuIH1cbiBcbiBzdGF0aWMgaW50IF9fZm9saW9faW5jX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgb2xkX2dlbiwgYm9vbCAqaW5jcmVhc2VkKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4rXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuIFx0aW50IG5ld19nZW47XG4gXG4tXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIShvbGRfZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSyksIGZvbGlvKTtcbi1cbiBcdGRvIHtcbi1cdFx0bmV3X2dlbiA9ICgob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4rXHRcdG5ld19nZW4gPSBscnVfZ2V0X2dlbl9mbGFncyhvbGRfZmxhZ3MpO1xuK1xuIFx0XHQvKiBmb2xpb191cGRhdGVfZ2VuKCkgaGFzIHByb21vdGVkIHRoaXMgcGFnZT8gKi9cbiBcdFx0aWYgKG5ld19nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBuZXdfZ2VuICE9IG9sZF9nZW4pIHtcbiBcdFx0XHRpZiAoaW5jcmVhc2VkKVxuQEAgLTMzMzYsMTEgKzMzNDMsMTIgQEAgc3RhdGljIGludCBfX2ZvbGlvX2luY19nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9nZW4sIGJvb2wgKmluY3JlYXNlZClcbiBcdFx0XHRyZXR1cm4gbmV3X2dlbjtcbiBcdFx0fVxuIFxuK1x0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XG4gXHRcdG5ld19nZW4gPSAob2xkX2dlbiArIDEpICUgTUFYX05SX0dFTlM7XG4gXG4tXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncyBcdTAwMjYgfihMUlVfR0VOX01BU0sgfCBMUlVfUkVGU19GTEFHUyk7XG4tXHRcdG5ld19mbGFncyB8PSAobmV3X2dlbiArIDFVTCkgXHUwMDNjXHUwMDNjIExSVV9HRU5fUEdPRkY7XG4tXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbitcdFx0bHJ1X3NldF9nZW5fZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCBuZXdfZ2VuKTtcbitcdFx0bHJ1X3NldF9yZWZzX2ZsYWdzKFx1MDAyNm5ld19mbGFncywgMCk7XG4rXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuIFxuIFx0aWYgKGluY3JlYXNlZClcbiBcdFx0KmluY3JlYXNlZCA9IHRydWU7XG5AQCAtMzM2Miw5ICszMzcwLDggQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbiB9XG4gXG4gc3RhdGljIHZvaWQgdXBkYXRlX2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IGZvbGlvICpmb2xpbyxcbi1cdFx0XHQgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4pXG4rXHRcdFx0ICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuLCBpbnQgdHlwZSlcbiB7XG4tXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbiBcdGludCB6b25lID0gZm9saW9fem9uZW51bShmb2xpbyk7XG4gXHRpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXG5AQCAtMzU1MSwyMiArMzU1OCwyNCBAQCBzdGF0aWMgYm9vbCBzdWl0YWJsZV90b19zY2FuKGludCB0b3RhbCwgaW50IHlvdW5nKVxuIH1cbiBcbiBzdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi1cdFx0c3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGJvb2wgZGlydHkpXG4rXHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBkaXJ0eSlcbiB7XG4tXHRpbnQgb2xkX2dlbjtcbitcdGludCBuZXdfZ2VuLCBvbGRfZ2VuLCB0eXBlO1xuIFxuIFx0aWYgKCFmb2xpbylcbiBcdFx0cmV0dXJuO1xuIFxuK1x0bmV3X2dlbiA9IGxydV9nZW5fZnJvbV9zZXEoUkVBRF9PTkNFKGxydXZlYy1cdTAwM2VscnVnZW4ubWF4X3NlcSkpO1xuK1xuIFx0aWYgKGRpcnR5IFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHQgICAgIShmb2xpb190ZXN0X2Fub24oZm9saW8pIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pIFx1MDAyNlx1MDAyNlxuIFx0ICAgICAgIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkpXG4gXHRcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuIFxuIFx0aWYgKHdhbGspIHtcbi1cdFx0b2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sIFx1MDAyNnZtYS1cdTAwM2VmbGFncyk7XG4rXHRcdG9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuLCBcdTAwMjZ0eXBlLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpO1xuIFx0XHRpZiAob2xkX2dlbiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG9sZF9nZW4gIT0gbmV3X2dlbilcbi1cdFx0XHR1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XG4rXHRcdFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4sIHR5cGUpO1xuIFx0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpKSB7XG4gXHRcdG9sZF9nZW4gPSBmb2xpb19scnVfZ2VuKGZvbGlvKTtcbiBcdFx0aWYgKG9sZF9nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXG5AQCAtMzU4OCw4ICszNTk3LDYgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cdTAwM2Vwcml2YXRlO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKHdhbGstXHUwMDNlbHJ1dmVjKTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQod2Fsay1cdTAwM2VscnV2ZWMpO1xuLVx0REVGSU5FX01BWF9TRVEod2Fsay1cdTAwM2VscnV2ZWMpO1xuLVx0aW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7XG4gXHR1bnNpZ25lZCBpbnQgbnI7XG4gXHRwbWRfdCBwbWR2YWw7XG4gXG5AQCAtMzY0MCw3ICszNjQ3LDcgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChsYXN0ICE9IGZvbGlvKSB7XG4tXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCB3YWxrLVx1MDAzZWxydXZlYywgbGFzdCwgZGlydHkpO1xuIFxuIFx0XHRcdGxhc3QgPSBmb2xpbztcbiBcdFx0XHRkaXJ0eSA9IGZhbHNlO1xuQEAgLTM2NTMsNyArMzY2MCw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHR3YWxrLVx1MDAzZW1tX3N0YXRzW01NX0xFQUZfWU9VTkddICs9IG5yO1xuIFx0fVxuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIHdhbGstXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXHRsYXN0ID0gTlVMTDtcbiBcbiBcdGlmIChpIFx1MDAzYyBQVFJTX1BFUl9QVEUgXHUwMDI2XHUwMDI2IGdldF9uZXh0X3ZtYShQTURfTUFTSywgUEFHRV9TSVpFLCBhcmdzLCBcdTAwMjZzdGFydCwgXHUwMDI2ZW5kKSlcbkBAIC0zNjc2LDggKzM2ODMsNiBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXHUwMDNlcHJpdmF0ZTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVx1MDAzZWxydXZlYyk7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdERFRklORV9NQVhfU0VRKHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFKHB1ZF9sZWFmKCpwdWQpKTtcbiBcbkBAIC0zNzMxLDcgKzM3MzYsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0XHRcdGdvdG8gbmV4dDtcbiBcbiBcdFx0aWYgKGxhc3QgIT0gZm9saW8pIHtcbi1cdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC0zNzQ1LDcgKzM3NTAsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0XHRpID0gaSBcdTAwM2UgTUlOX0xSVV9CQVRDSCA/IDAgOiBmaW5kX25leHRfYml0KGJpdG1hcCwgTUlOX0xSVV9CQVRDSCwgaSkgKyAxO1xuIFx0fSB3aGlsZSAoaSBcdTAwM2M9IE1JTl9MUlVfQkFUQ0gpO1xuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xuIFx0c3Bpbl91bmxvY2socHRsKTtcbkBAIC00MzUxLDggKzQzNTYsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gZm9saW9fcGdkYXQoZm9saW8pO1xuIFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xuIFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlO1xuLVx0dW5zaWduZWQgbG9uZyBtYXhfc2VxO1xuLVx0aW50IGdlbjtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQocHZtdy1cdTAwM2VwdGwpO1xuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSwgZm9saW8pO1xuQEAgLTQzODksOCArNDM5Miw2IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcbiBcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XG4gXHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpO1xuLVx0bWF4X3NlcSA9IFJFQURfT05DRSgobHJ1dmVjKS1cdTAwM2VscnVnZW4ubWF4X3NlcSk7XG4tXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xuIFx0bW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcbiBcbiBcdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XG5AQCAtNDQyMiw3ICs0NDIzLDcgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAobGFzdCAhPSBmb2xpbykge1xuLVx0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4rXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC00NDM0LDEzICs0NDM1LDE0IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdFx0eW91bmcgKz0gbnI7XG4gXHR9XG4gXG4tXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xuIFxuIFx0LyogZmVlZGJhY2sgZnJvbSBybWFwIHdhbGtlcnMgdG8gcGFnZSB0YWJsZSB3YWxrZXJzICovXG4gXHRpZiAobW1fc3RhdGUgXHUwMDI2XHUwMDI2IHN1aXRhYmxlX3RvX3NjYW4oaSwgeW91bmcpKVxuLVx0XHR1cGRhdGVfYmxvb21fZmlsdGVyKG1tX3N0YXRlLCBtYXhfc2VxLCBwdm13LVx1MDAzZXBtZCk7XG4rXHRcdHVwZGF0ZV9ibG9vbV9maWx0ZXIobW1fc3RhdGUsIFJFQURfT05DRShscnV2ZWMtXHUwMDNlbHJ1Z2VuLm1heF9zZXEpLFxuK1x0XHRcdFx0ICAgIHB2bXctXHUwMDNlcG1kKTtcbiBcbiBcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiBcbkBAIC00Nzg1LDcgKzQ3ODcsNyBAQCBzdGF0aWMgYm9vbCBpc29sYXRlX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYVxuIFxuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXG4gXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpXG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgMCk7XG4rXHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4gXG4gXHRzdWNjZXNzID0gbHJ1X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7XG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIXN1Y2Nlc3MsIGZvbGlvKTtcbkBAIC00ODc4LDkgKzQ4ODAsOSBAQCBzdGF0aWMgaW50IGdldF90aWVyX2lkeChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKVxuIFx0ICogVGhpcyB2YWx1ZSBpcyBjaG9zZW4gYmVjYXVzZSBhbnkgb3RoZXIgdGllciB3b3VsZCBoYXZlIGF0IGxlYXN0IHR3aWNlXG4gXHQgKiBhcyBtYW55IHJlZmF1bHRzIGFzIHRoZSBmaXJzdCB0aWVyLlxuIFx0ICovXG4tXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgMCwgMiwgXHUwMDI2c3ApO1xuLVx0Zm9yICh0aWVyID0gMTsgdGllciBcdTAwM2MgTUFYX05SX1RJRVJTOyB0aWVyKyspIHtcbi1cdFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIDMsIFx1MDAyNnB2KTtcbitcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01JTiwgMiwgXHUwMDI2c3ApO1xuK1x0Zm9yICh0aWVyID0gTFJVX1RJRVJfTUlOICsgMTsgdGllciBcdTAwM2M9IExSVV9USUVSX01BWDsgdGllcisrKSB7XG4rXHRcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0aWVyLCB0aWVyLCAzLCBcdTAwMjZwdik7XG4gXHRcdGlmICghcG9zaXRpdmVfY3RybF9lcnIoXHUwMDI2c3AsIFx1MDAyNnB2KSlcbiBcdFx0XHRicmVhaztcbiBcdH1cbkBAIC00OTAxLDggKzQ5MDMsMTAgQEAgc3RhdGljIGludCBnZXRfdHlwZV90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXG4gXHQgKiBDb21wYXJlIHRoZSBzdW0gb2YgYWxsIHRpZXJzIG9mIGFub24gd2l0aCB0aGF0IG9mIGZpbGUgdG8gZGV0ZXJtaW5lXG4gXHQgKiB3aGljaCB0eXBlIHRvIHNjYW4uXG4gXHQgKi9cbi1cdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIE1BWF9OUl9USUVSUywgc3dhcHBpbmVzcywgXHUwMDI2c3ApO1xuLVx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTUFYX05SX1RJRVJTLCBNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3MsIFx1MDAyNnB2KTtcbitcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUFYLFxuK1x0XHQgICAgICBzd2FwcGluZXNzLCBcdTAwMjZzcCk7XG4rXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCxcbitcdFx0ICAgICAgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCBcdTAwMjZwdik7XG4gXG4gXHRyZXR1cm4gcG9zaXRpdmVfY3RybF9lcnIoXHUwMDI2c3AsIFx1MDAyNnB2KTtcbiB9XG5AQCAtNTAxNyw4ICs1MDIxLDEwIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHR9XG4gXG4gXHRcdC8qIGRvbid0IGFkZCByZWplY3RlZCBmb2xpb3MgdG8gdGhlIG9sZGVzdCBnZW5lcmF0aW9uICovXG4tXHRcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSlcbi1cdFx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfYWN0aXZlKSk7XG4rXHRcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSkge1xuK1x0XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4rXHRcdFx0Zm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdG1vdmVfZm9saW9zX3RvX2xydShcdTAwMjZsaXN0KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjIzOjUyLjM5NjE2MjQxOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5Njg2NjAyNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEltcGFjdCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBkZWVwIGludG8gdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbW0vYCBkaXJlY3Rvcnkg4oCTIHRoYXQncyBhIGtleSBhcmVhLiBJdCBsb29rcyBsaWtlIGl0J3MgdG91Y2hpbmcgY3JpdGljYWwgZmlsZXM6IGBtZW1jb250cm9sLmhgLCBgbW1faW5saW5lLmhgLCBgbW16b25lLmhgLCBgZm9saW8uY2AsIGBtZW1jb250cm9sLmNgLCBgbWlncmF0ZS5jYCwgYW5kIGB2bXNjYW4uY2AuICBBIGNvbXByZWhlbnNpdmUgb3ZlcnZpZXcgaXMgZGVmaW5pdGVseSByZXF1aXJlZC5cblxuRmlyc3QsIGl0IHNlZW1zIHRoZXJlJ3MgYSB0eXBlIGNoYW5nZSBmb3IgYGxydV96b25lX3NpemVgIGZyb20gYHVuc2lnbmVkIGxvbmdgIHRvIGBsb25nYCwgYW5kIHRoZXJlIGFyZSBjaGVja3Mgbm93IGZvciBuZWdhdGl2ZSB2YWx1ZXMuIFRoYXQncyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZyDigJMgcG90ZW50aWFsIHNpZ25lZG5lc3MgYnVncywgb3IgbWF5YmUgYWRkcmVzc2luZyBhIHN1YnRsZSBvdmVyZmxvdyBpc3N1ZSBpbiB0aGUgbWVtY2cgTFJVIGFjY291bnRpbmcuIEFsd2F5cyB3b3J0aCBzY3J1dGluaXppbmcgdGhvc2UgY2hhbmdlcyFcblxuVGhlIHNlY29uZCwgYW5kIHBvdGVudGlhbGx5IG1vcmUgc2lnbmlmaWNhbnQsIHBhcnQgaW52b2x2ZXMgYSBtYWpvciByZWZhY3RvcmluZyBhbmQgYnVnIGZpeGluZyByZWxhdGVkIHRvIE11bHRpLUdlbiBMUlUgKE1HTFJVKS4gSSBzZWUgYSBzd2FybSBvZiBmdW5jdGlvbiBuYW1lczogYGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1YCwgYGxydV9zZXRfZ2VuX2ZsYWdzYCwgYGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnNgLCBhbmQgbWFueSBvdGhlcnMgdGhhdCBhcmUgcmVsYXRlZCB0byBtYW5pcHVsYXRpbmcgdGhlIExSVSBmbGFncyBhbmQgZ2VuZXJhdGlvbnMuIFRoYXQncyBhIGdvb2QgYW1vdW50IG9mIHdvcmsgYmVpbmcgZG9uZSBvbiBmdW5kYW1lbnRhbCBMUlUgbG9naWMuIFRoZXkncmUgY2hhbmdpbmcgdGhlIHdheSByZWZlcmVuY2UgY291bnRzIGFuZCBnZW5lcmF0aW9uIGNvdW50cyBhcmUgaGFuZGxlZC4gVGhpcyB0b3VjaGVzIG9uIHBhZ2UgaXNvbGF0aW9uLCB0aWVyaW5nLCBhbmQgZXZpY3Rpb24uIFRoYXQncyBhbGwgY29yZSBzdHVmZi4gVGhlIG1pZ3JhdGUgY29kZSdzIGBmb2xpb19taWdyYXRlX2ZsYWdzYCBtYWtlcyBzZW5zZSwgYXMgd2VsbC5cblxuR2l2ZW4gdGhhdCB0aGlzIG1vZGlmaWVzIGZpbGVzIGluIGBtbS9gLCBpdCdzIGRpcmVjdGx5IGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhpcyBpcyBhIGhpZ2hseSByZWFjaGFibGUgYXJlYSwgYW5kIHN5emthbGxlciBwcm9iYWJseSBoaXRzIHRoaXMgYWxsIHRoZSB0aW1lLiBTbywgaWYgd2UgbG9vayBhdCB0aGUgcG9zaXRpdmUgY3JpdGVyaWEsIHRoaXMgcGF0Y2ggZGVmaW5pdGVseSBmaXRzIHRoZSBiaWxsLiBJdCdzIG1vZGlmeWluZyBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyAobW0vKSwgYW5kIGl0J3MgcmVmYWN0b3JpbmcgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcyAoTFJVIGZsYWdzLCBldGMuKS4gVGhlIGludHJvZHVjdGlvbiBvZiBgV0FSTl9PTl9PTkNFYCBpbmRpY2F0ZXMgcnVudGltZSBhc3NlcnRpb25zIOKAkyBhIGJpZyBjaGVjayEgVGhpcyBpcyBkZWZpbml0ZWx5IFwiV29ydGhGdXp6aW5nXCIhXG5cbk5vdywgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgS2NvbmZpZyBkZXBlbmRlbmNpZXMgdG8gc2VlIHdoaWNoIGZlYXR1cmVzIGFyZSBuZWVkZWQgdG8gZW5hYmxlIHRoaXMgYW5kIHVzZSBgZ3JlcHBlcmAgdG8gc2VhcmNoIGZvciBMUlVfR0VOLCBNRU1DRywgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIEZvY3VzU3ltYm9scyByZWxhdGVkIHRvIHRoZSBzcGVjaWZpYyBjaGFuZ2VzLiBUaGF0IHdpbGwgdGVsbCBtZSB3aGljaCBmZWF0dXJlcyBhcmUgaW1wYWN0ZWQsIGFuZCB3aGVyZSB0byBmb2N1cyB0aGUgZnV6emluZyBlZmZvcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzc0LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6MjM6NTcuMzY0ODI0NTI3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MzU2NzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBMUlVfR0VOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEzODg9Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxcbi0tXFxubW0vS2NvbmZpZy0xMzk4LSMgbXVsdGktZ2VuIExSVSB7XFxubW0vS2NvbmZpZzoxMzk5OmNvbmZpZyBMUlVfR0VOXFxubW0vS2NvbmZpZy0xNDAwLVxcdGJvb2wgXFxcIk11bHRpLUdlbiBMUlVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MDctXFxubW0vS2NvbmZpZzoxNDA4OmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcXG5tbS9LY29uZmlnLTE0MDktXFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MTMtXFxubW0vS2NvbmZpZzoxNDE0OmNvbmZpZyBMUlVfR0VOX1NUQVRTXFxubW0vS2NvbmZpZy0xNDE1LVxcdGJvb2wgXFxcIkZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTQyMi1cXG5tbS9LY29uZmlnOjE0MjM6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXFxubW0vS2NvbmZpZy0xNDI0LVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6MjM6NTcuNDE0MTg3Mjc5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg3ODg0MDQ1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgYE1FTUNHYCBhbmQgTWVtb3J5IENvbnRyb2wqKlxuXG5SaWdodCwgbGV0J3MgY2lyY2xlIGJhY2sgdG8gYE1FTUNHYCDigJMgbWVtb3J5IGNvbnRyb2wgZ3JvdXBzLiBBbHdheXMgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IHdoZW4gZGlnZ2luZyBpbnRvIG1lbW9yeSBiZWhhdmlvci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gY292ZXJpbmcgYWxsIHRoZSBhbmdsZXMuIE15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbi4gSSBzaG91bGQgY2hlY2sgYG1lbWNvbnRyb2wuY2AgZm9yIHRoZSBmdW5kYW1lbnRhbCBmcmFtZXdvcmsuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgc3lzdGVtIHRyYWNrcyBhbmQgZW5mb3JjZXMgbWVtb3J5IGxpbWl0cyB3aXRoaW4gdGhlc2UgY29udHJvbCBncm91cHMuXG5cblRoYXQgYWxzbyBicmluZ3MgYGxydV96b25lX3NpemVgIGludG8gdGhlIHBpY3R1cmUuIE5lZWQgdG8gY29ycmVsYXRlIHRoYXQgd2l0aCBob3cgdGhlIGtlcm5lbCBtYW5hZ2VzIHBhZ2VzIHdpdGhpbiB6b25lcyBhbmQgaG93IGBNRU1DR2AgaW50ZXJhY3RzIHdpdGggdGhvc2Ugem9uZS1sZXZlbCBjYWxjdWxhdGlvbnMuIFRoZSBMUlUgaXMgY3JpdGljYWwgaW4gZGV0ZXJtaW5pbmcgd2hhdCBnZXRzIHN3YXBwZWQgb3V0LCBhbmQgd2hhdCBwYWdlcyBhcmUgY29uc2lkZXJlZCBcImluLXVzZVwiIHZlcnN1cyByZWNsYWltYWJsZS4gSSBzaG91bGQgYmUgYWJsZSB0byB0cmFjZSBob3cgbGltaXRzIGFmZmVjdCB0aGUgTFJVIGRlY2lzaW9ucy4gTGV0J3Mgc2VlIGhvdyBtZW1vcnkgcHJlc3N1cmUgaW1wYWN0cyB0aGUgem9uZXMgYW5kIHRoZSBMUlUgY2FsY3VsYXRpb25zIHdpdGhpbiB0aGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzc1MSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjI0OjAwLjI5MzAyOTMzNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzY4NTUxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNQ0dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNzU9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuLS1cXG5pbml0L0tjb25maWctMTA4NC1cXG5pbml0L0tjb25maWc6MTA4NTpjb25maWcgTUVNQ0dcXG5pbml0L0tjb25maWctMTA4Ni1cXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDkzLVxcbmluaXQvS2NvbmZpZzoxMDk0OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuaW5pdC9LY29uZmlnLTEwOTUtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTExMDAtXFxuaW5pdC9LY29uZmlnOjExMDE6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuaW5pdC9LY29uZmlnLTExMDItXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTExMDctXFxuaW5pdC9LY29uZmlnOjExMDg6Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTExMDktXFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6MjQ6MDAuMzQwNzE5NjA3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTYxMDcxMTYxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUmVjZW50IENoYW5nZXMgaW4gTWVtb3J5IE1hbmFnZW1lbnQgQ29kZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGVzZSByZWNlbnQgbW9kaWZpY2F0aW9ucy4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGJlZW4gdG91Y2hlZCBpbiB0aGUgYG1tL2AgZGlyZWN0b3J5LiBTY2FubmluZyBgbW0vbWVtY29udHJvbC5jYCwgSSBzZWUgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCBhbmQgYG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemVgIOKAkyB0aGUgbGF0dGVyJ3MgaW5saW5lLCBzbyB0aGF0J3MgYSBxdWljayBub3RlIHRvIG15c2VsZi4gVGhlbiwgb3ZlciBpbiBgbW0vZm9saW8uY2AsIEkgc2VlIGEgY291cGxlIG9mIGZ1bmN0aW9ucyBmbGFnZ2VkIGFzIGBzdGF0aWNgOiBgbHJ1X2dlbl9pbmNfcmVmc2AgYW5kIGBscnVfZ2VuX2NsZWFyX3JlZnNgLiBTaW5jZSB0aGV5J3JlIGBzdGF0aWNgLCBJIHNob3VsZCBjaGVjayB3aXRoaW4gYGZvbGlvLmNgIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhleSBhcmUgdXNlZC5cblxuTW92aW5nIG9uLCBgbW0vbWlncmF0ZS5jYCBoYXMgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgLCB3aGljaCB3YXJyYW50cyBhIGNsb3NlciBsb29rIGxhdGVyLiBBbmQgdGhlIGJpZyBvbmUsIGBtbS92bXNjYW4uY2AsIGhhcyBhIHdob2xlIHNsZXcgb2YgY2hhbmdlcy4gSSBub3RlIGBscnVfZ2VuX3NldF9yZWZzYCwgYHJlYWRfY3RybF9wb3NgLCBgZm9saW9fdXBkYXRlX2dlbmAsIGBfX2ZvbGlvX2luY19nZW5gLCBgZm9saW9faW5jX2dlbmAsIGB1cGRhdGVfYmF0Y2hfc2l6ZWAsIGB3YWxrX3VwZGF0ZV9mb2xpb2AsIGB3YWxrX3B0ZV9yYW5nZWAsIGB3YWxrX3BtZF9yYW5nZV9sb2NrZWRgLCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAsIGBpc29sYXRlX2ZvbGlvYCwgYGdldF90aWVyX2lkeGAsIGBnZXRfdHlwZV90b19zY2FuYCwgYW5kIGBldmljdF9mb2xpb3NgLiBUaGF0J3MgYSBsb3QgdG8gcGFyc2UsIGJ1dCBpdCBzZWVtcyBWTSBzY2FubmluZyBoYXMgYmVlbiBzaWduaWZpY2FudGx5IGltcGFjdGVkLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCB0aGUgc2NvcGUgb2YgdGhlc2UgY2hhbmdlcywgZm9jdXNpbmcgZXNwZWNpYWxseSBvbiB0aGUgZnVuY3Rpb25zIGluIGBtbS9mb2xpby5jYCBsaWtlIGBscnVfZ2VuX2luY19yZWZzYCBhbmQgYGxydV9nZW5fY2xlYXJfcmVmc2AuIEFyZSB0aGV5IGludGVybmFsIHRvIGBmb2xpby5jYCwgb3IgYXJlIHRoZXkgcGFydCBvZiBhIGxhcmdlciBpbnRlcmZhY2U/IEknbGwgcXVpY2tseSBjaGVjayB0aGUgY2FsbGVycyBvZiB0aG9zZSwgb3Igb3RoZXIgZnVuY3Rpb25zIGluIGBtbS9mb2xpby5jYCwgdG8gc2VlIHdoYXQgdGhlIHRhcmdldHMgYXJlLCBhbmQgZGV0ZXJtaW5lIHdoYXQgdGhlIHJpZ2h0IGNvZGUgdG8gdGFyZ2V0IGZvciBteSBwdXJwb3NlcyBpcy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBpbXBhY3QgYW5kIHdoZXJlIHRvIGRpZyBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjQ5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjI0OjA1Ljk1MTQzMzMwMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjQ1NTk3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnVfZ2VuXyhpbmN8Y2xlYXIpX3JlZnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ZvbGlvLmM9MzIzPXN0YXRpYyB2b2lkIF9fbHJ1X2NhY2hlX2FjdGl2YXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9mb2xpby5jLTM1NC1cXG5tbS9mb2xpby5jOjM1NTpzdGF0aWMgdm9pZCBscnVfZ2VuX2luY19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vZm9saW8uYy0zNTYte1xcbi0tXFxubW0vZm9saW8uYy0zODAtXFxubW0vZm9saW8uYzozODE6c3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vZm9saW8uYy0zODIte1xcbi0tXFxubW0vZm9saW8uYy00MDEtXFxubW0vZm9saW8uYzo0MDI6c3RhdGljIHZvaWQgbHJ1X2dlbl9pbmNfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2ZvbGlvLmMtNDAzLXtcXG4tLVxcbm1tL2ZvbGlvLmMtNDA1LVxcbm1tL2ZvbGlvLmM6NDA2OnN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2ZvbGlvLmMtNDA3LXtcXG4tLVxcbm1tL2ZvbGlvLmM9NDI2PXZvaWQgZm9saW9fbWFya19hY2Nlc3NlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZm9saW8uYy00MzAtXFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKSB7XFxubW0vZm9saW8uYzo0MzE6XFx0XFx0bHJ1X2dlbl9pbmNfcmVmcyhmb2xpbyk7XFxubW0vZm9saW8uYy00MzItXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vZm9saW8uYz01OTI9c3RhdGljIHZvaWQgbHJ1X2xhenlmcmVlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2ZvbGlvLmMtNjAyLVxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSlcXG5tbS9mb2xpby5jOjYwMzpcXHRcXHRscnVfZ2VuX2NsZWFyX3JlZnMoZm9saW8pO1xcbm1tL2ZvbGlvLmMtNjA0LVxcdGVsc2VcXG4tLVxcbm1tL2ZvbGlvLmM9NjcwPXZvaWQgZGVhY3RpdmF0ZV9maWxlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9mb2xpby5jLTY3NS1cXG5tbS9mb2xpby5jOjY3NjpcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgbHJ1X2dlbl9jbGVhcl9yZWZzKGZvbGlvKSlcXG5tbS9mb2xpby5jLTY3Ny1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS9mb2xpby5jPTY5MD12b2lkIGZvbGlvX2RlYWN0aXZhdGUoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2ZvbGlvLmMtNjk0LVxcbm1tL2ZvbGlvLmM6Njk1OlxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSA/IGxydV9nZW5fY2xlYXJfcmVmcyhmb2xpbykgOiAhZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pKVxcbm1tL2ZvbGlvLmMtNjk2LVxcdFxcdHJldHVybjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6MjQ6MDYuMDAzODkzNzc0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI0MjAyMTEzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEV4YW1pbmF0aW9uIG9mIHRoZSBSZWxldmFudCBDb2RlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGlzIG1lbW9yeSBtYW5hZ2VtZW50IGZsb3cuIE15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiB0aGUgZm9sbG93aW5nOiBgaXNvbGF0ZV9mb2xpb2AsIGBldmljdF9mb2xpb3NgLCBgd2Fsa19wdGVfcmFuZ2VgLCBgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkYCwgYGxydV9nZW5fbG9va19hcm91bmRgLCBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgLCBgZm9saW9fbWlncmF0ZV9mbGFnc2AsIGBscnVfZ2VuX2luY19yZWZzYCwgYGxydV9nZW5fY2xlYXJfcmVmc2AsIGBnZXRfdGllcl9pZHhgLCBgZ2V0X3R5cGVfdG9fc2NhbmAsIGByZWFkX2N0cmxfcG9zYCwgYGZvbGlvX3VwZGF0ZV9nZW5gLCBhbmQgYF9fZm9saW9faW5jX2dlbmAuIFRoZXNlIHNlZW0gbGlrZSB0aGUgY29yZSBjb21wb25lbnRzLlxuXG5Ob3csIEkgd2FudCB0byBxdWlja2x5IGlkZW50aWZ5IHBvdGVudGlhbCBhcmVhcyBmb3IgZGVlcGVyIGludmVzdGlnYXRpb24sIHBlcmhhcHMgbG9va2luZyBhdCB3aGV0aGVyIHRob3NlIGZ1bmN0aW9ucyBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpY2Agb3IsIGlmIG5vdCwgd2hpY2ggb2YgdGhlbSBoYXZlIGdvb2QgcG90ZW50aWFsIGFzIGBGb2N1c1N5bWJvbHNgIHRoYXQgbWlnaHQgbWFrZSBzZW5zZSB0byB0cmFjZS4gSW4gcGFydGljdWxhciwgSeKAmW0gaW50ZXJlc3RlZCBpbiB3aGV0aGVyIGBpc29sYXRlX2ZvbGlvYCwgYGV2aWN0X2ZvbGlvc2AsIGBmb2xpb19taWdyYXRlX2ZsYWdzYCwgb3IgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCBhcmUgbm9uLXN0YXRpYyBhbmQsIGlmIHNvLCB3aGF0IHRoZWlyIGNhbGwgdHJlZXMgbG9vayBsaWtlLlxuXG5BcyBhIHN0YXJ0aW5nIHBvaW50LCBJJ2xsIGRyaWxsIGRvd24gc3BlY2lmaWNhbGx5IGludG8gYGV2aWN0X2ZvbGlvc2AgYW5kIGl0cyBjYWxsZXJzLCBzdGFydGluZyBpbiBgbW0vdm1zY2FuLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHNvbWUgY29udGV4dCBhYm91dCBob3cgaXQncyB1c2VkIHdpdGhpbiB0aGUgc2Nhbm5pbmcgbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1Njg2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjI0OjA5LjI0NTkxNzMzMVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY1MjU4ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXZpY3RfZm9saW9zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTQ5MjA9c3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ5NjMtXFxubW0vdm1zY2FuLmM6NDk2NDpzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5tbS92bXNjYW4uYy00OTY1LVxcdFxcdFxcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUxNDM9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxNjYtXFx0XFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fc2NhbiwgTUlOX0xSVV9CQVRDSCk7XFxubW0vdm1zY2FuLmM6NTE2NzpcXHRcXHRkZWx0YSA9IGV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyk7XFxubW0vdm1zY2FuLmMtNTE2OC1cXHRcXHRpZiAoIWRlbHRhKVxcbi0tXFxubW0vdm1zY2FuLmM9NTc4ND1zdGF0aWMgaW50IHJ1bl9ldmljdGlvbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU4MDQtXFx0XFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fcmVjbGFpbSAtIHNjLVxcdTAwM2Vucl9yZWNsYWltZWQsIE1BWF9MUlVfQkFUQ0gpO1xcbm1tL3Ztc2Nhbi5jOjU4MDU6XFx0XFx0aWYgKCFldmljdF9mb2xpb3MobnJfYmF0Y2gsIGxydXZlYywgc2MsIHN3YXBwaW5lc3MpKVxcbm1tL3Ztc2Nhbi5jLTU4MDYtXFx0XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjI0OjA5LjI5MjQ0NzIwNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4NTQxODg3NTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIEtleSBTeW1ib2xzIGZvciBBbmFseXNpcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBoZXJlIGlzIHRvIGlkZW50aWZ5IGFuZCB6ZXJvIGluIG9uIHRoZSBtb3N0IHJlbGV2YW50IGZ1bmN0aW9ucyBmb3Igd2hhdGV2ZXIgaW52ZXN0aWdhdGlvbiBvciBtb2RpZmljYXRpb24gSSdtIHBsYW5uaW5nLCBsaWtlbHkgcmVsYXRlZCB0byB0aGUgTXVsdGktR2VuIExSVSBvciBtZW1vcnkgbWFuYWdlbWVudCBpbiBnZW5lcmFsLiBJJ2xsIHN0YXJ0IGJ5IHN5c3RlbWF0aWNhbGx5IGNoZWNraW5nIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IGFyZSBub24tc3RhdGljIGFuZCBzZWVtIGNlbnRyYWwgdG8gdGhlIGNvcmUgbG9naWMuXG5cbkZpcnN0LCBJJ20gY2hlY2tpbmcgYGxydV9nZW5fbG9va19hcm91bmRgIGluIGBtbS92bXNjYW4uY2AuIEl0J3Mgbm9uLXN0YXRpYywgd2hpY2ggaXMgZ29vZCBmb3IgbXkgcHVycG9zZXMuIFRoZW4gSSdsbCBsb29rIGF0IGBmb2xpb19taWdyYXRlX2ZsYWdzYCBpbiBgbW0vbWlncmF0ZS5jYCwgYW5kIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgaW4gYG1tL21lbWNvbnRyb2wuY2AuIEknbSBhbHNvIGdvaW5nIHRvIGV4YW1pbmUgc29tZSByZWxhdGVkIGZ1bmN0aW9ucywgaW5jbHVkaW5nIGBscnVfZ2VuX2luY19yZWZzYCwgYGxydV9nZW5fY2xlYXJfcmVmc2AsIGBmb2xpb191cGRhdGVfZ2VuYCwgYF9fZm9saW9faW5jX2dlbmAsIGBpc29sYXRlX2ZvbGlvYCwgYGdldF90aWVyX2lkeGAsIGBnZXRfdHlwZV90b19zY2FuYCwgYHdhbGtfdXBkYXRlX2ZvbGlvYCwgYHdhbGtfcHRlX3JhbmdlYCwgYHdhbGtfcG1kX3JhbmdlX2xvY2tlZGAsIGFuZCBgcmVhZF9jdHJsX3Bvc2AuXG5cbk5vdywgSSdtIGdvaW5nIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFdoaWNoIG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGBtbS92bXNjYW4uY2AgY2FsbCBvciBhcmUgY2FsbGVkIGJ5IHRoZXNlIGZ1bmN0aW9ucywgb3IgYXJlIG90aGVyd2lzZSBtb2RpZmllZCBpbiByZWxhdGlvbiB0byB0aGVtPyBJIG5lZWQgdG8gYnVpbGQgYSBicm9hZGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRleHQuIEknbGwgZm9jdXMgb24gdGhlc2U6XG4qICAgYGxydV9nZW5fbG9va19hcm91bmRgXG4qICAgYHdhbGtfcG1kX3JhbmdlX2xvY2tlZGBcbiogICBgd2Fsa19wdGVfcmFuZ2VgXG4qICAgYGZvbGlvX3VwZGF0ZV9nZW5gXG4qICAgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgXG4qICAgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYFxuKiAgIGBldmljdF9mb2xpb3NgXG4qICAgYGlzb2xhdGVfZm9saW9gXG4qICAgYGxydV9nZW5faW5jX3JlZnNgXG4qICAgYGxydV9nZW5fY2xlYXJfcmVmc2BcblxuTGV0J3MgdGhpbmsgYWJvdXQgdWJpcXVpdHkuIEkgd2FudCB0byBhdm9pZCBmdW5jdGlvbnMgdGhhdCBhcmUgY2FsbGVkIGV2ZXJ5d2hlcmU7IEkgbmVlZCBzeW1ib2xzIHRoYXQgYXJlIG1vcmUgc3BlY2lmaWMgdG8gdGhlIGFyZWEgSSdtIGludGVyZXN0ZWQgaW4uIEkgc2hvdWxkIGNoZWNrIHdoZXRoZXIgYGZvbGlvX21hcmtfYWNjZXNzZWRgIG9yIGBmb2xpb19kZWFjdGl2YXRlYCBhcmUgY2FsbGVkIGV2ZXJ5d2hlcmUuIGBmb2xpb19tYXJrX2FjY2Vzc2VkYCBpcywgYnV0IG1heWJlIGBscnVfZ2VuX2luY19yZWZzYCwgYGxydV9nZW5fY2xlYXJfcmVmc2Agb3IgYGZvbGlvX2RlYWN0aXZhdGVgIC8gYGRlYWN0aXZhdGVfZmlsZV9mb2xpb2AgYXJlIHNwZWNpZmljLiBQZXJoYXBzIGBscnVfZ2VuX2luY19yZWZzYCBpcyBzcGVjaWZpYyB0byBNR0xSVS4gSG9sZCBvbiwgd2Fzbid0IHRoYXQgc3RhdGljP1xuXG4qQWgqLCB5ZXMsIGBscnVfZ2VuX2luY19yZWZzYCBpcyBzdGF0aWMsIHdoaWNoIGNhbiBjb21wbGljYXRlIHN5bWJvbCBhbmFseXNpcy4gQ2FuIGBrYWxsc3ltc2AgaGVscCB1cyBmaW5kIHN0YXRpYyBmdW5jdGlvbnM/IFJpZ2h0LiBTdGF0aWMgZnVuY3Rpb25zIGluIGAuY2AgZmlsZXMgKnVzdWFsbHkqIGFwcGVhciBpbiBgL3Byb2Mva2FsbHN5bXNgIHVubGVzcyB0aGV5J3JlIGlubGluZWQuIEFuZCBJIHJlbWVtYmVyIHRoZSBub3RlIGFib3V0IGlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyBpbiBoZWFkZXJzLiBUaGV5J3JlIGJhc2ljYWxseSBpbnZpc2libGUgYXMgc3ltYm9scy4gU28sIEkgbmVlZCB0byBmb2N1cyBvbiBub24tc3RhdGljLCBvciBzdWJzeXN0ZW0tbGV2ZWwgZW50cnlwb2ludCBmdW5jdGlvbnMuIFRoYXTigJlzIHNhZmVyLlxuXG5UaGVyZWZvcmUsIGZvciB0aGUgc2FrZSBvZiBjbGVhciBhbmFseXNpcywgdGhlc2UgYXJlIHRoZSBcImdvb2RcIiBgRm9jdXNTeW1ib2xzYDpcblxuMS4gIGBscnVfZ2VuX2xvb2tfYXJvdW5kYFxuMi4gIGBmb2xpb19taWdyYXRlX2ZsYWdzYFxuMy4gIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWBcbjQuICBgZm9saW9fdXBkYXRlX2dlbmBcbjUuICBgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkYFxuNi4gIGB3YWxrX3B0ZV9yYW5nZWBcbjcuICBgZXZpY3RfZm9saW9zYFxuOC4gIGBpc29sYXRlX2ZvbGlvYFxuOS4gIGBscnVfZ2VuX2luY19yZWZzYFxuMTAuIGBscnVfZ2VuX2NsZWFyX3JlZnNgXG5cbkZpbmFsbHksIGxldCdzIGlkZW50aWZ5IHRoZSBuZWVkZWQgY29uZmlndXJhdGlvbnMuIGBMUlVfR0VOYCBpcyBjcml0aWNhbCBmb3IgTXVsdGktR2VuIExSVSwgYW5kIGBNRU1DR2AgaXMgcmVxdWlyZWQgYmVjYXVzZSBvZiB0aGUgY2hhbmdlcyByZWxhdGVkIHRvIG1lbW9yeSBjZ3JvdXAgZnVuY3Rpb25zIChgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgIGFuZCBgbHJ1X3pvbmVfc2l6ZWApLiBOb3cgSSBuZWVkIHRvIGV4cGxvcmUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gYExSVV9HRU5fRU5BQkxFRGAgZW5hYmxlcyBgTFJVX0dFTmAgYnkgZGVmYXVsdCBhdCBib290LiBMZXQncyBjaGVjayBgS2NvbmZpZ2AgZm9yIGBMUlVfR0VOYCBhbmQgcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY2MzAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6MjQ6MTcuODM0MzM4MTQ3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzOTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzOTU6XFx0XFx0ICBwdXJwb3Nlcy4gIEl0IGlzIHJlcXVpcmVkIHRvIGVuYWJsZSB1c2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIG9uXFxuMTM5NjpcXHRcXHQgIGZpbGUtYmFja2VkIG1lbW9yeSB0eXBlcyBsaWtlIHNobWVtIGFuZCBodWdldGxiZnMuXFxuMTM5NzpcXHRcXG4xMzk4OlxcdCMgbXVsdGktZ2VuIExSVSB7XFxuMTM5OTpcXHRjb25maWcgTFJVX0dFTlxcbjE0MDA6XFx0XFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4xNDAxOlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuMTQwMjpcXHRcXHQjIG1ha2Ugc3VyZSBmb2xpby1cXHUwMDNlZmxhZ3MgaGFzIGVub3VnaCBzcGFyZSBiaXRzXFxuMTQwMzpcXHRcXHRkZXBlbmRzIG9uIDY0QklUIHx8ICFTUEFSU0VNRU0gfHwgU1BBUlNFTUVNX1ZNRU1NQVBcXG4xNDA0OlxcdFxcdGhlbHBcXG4xNDA1OlxcdFxcdCAgQSBoaWdoIHBlcmZvcm1hbmNlIExSVSBpbXBsZW1lbnRhdGlvbiB0byBvdmVyY29tbWl0IG1lbW9yeS4gU2VlXFxuMTQwNjpcXHRcXHQgIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscy5cXG4xNDA3OlxcdFxcbjE0MDg6XFx0Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbjE0MDk6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuMTQxMDpcXHRcXHRkZXBlbmRzIG9uIExSVV9HRU5cXG4xNDExOlxcdFxcdGhlbHBcXG4xNDEyOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbXVsdGktZ2VuIExSVSBieSBkZWZhdWx0LlxcbjE0MTM6XFx0XFxuMTQxNDpcXHRjb25maWcgTFJVX0dFTl9TVEFUU1xcbjE0MTU6XFx0XFx0Ym9vbCBcXFwiRnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXFxcIlxcbjE0MTY6XFx0XFx0ZGVwZW5kcyBvbiBMUlVfR0VOXFxuMTQxNzpcXHRcXHRoZWxwXFxuMTQxODpcXHRcXHQgIERvIG5vdCBlbmFibGUgdGhpcyBvcHRpb24gdW5sZXNzIHlvdSBwbGFuIHRvIGxvb2sgYXQgaGlzdG9yaWNhbCBzdGF0c1xcbjE0MTk6XFx0XFx0ICBmcm9tIGV2aWN0ZWQgZ2VuZXJhdGlvbnMgZm9yIGRlYnVnZ2luZyBwdXJwb3NlLlxcbjE0MjA6XFx0XFxuMTQyMTpcXHRcXHQgIFRoaXMgb3B0aW9uIGhhcyBhIHBlci1tZW1jZyBhbmQgcGVyLW5vZGUgbWVtb3J5IG92ZXJoZWFkLlxcbjE0MjI6XFx0XFxuMTQyMzpcXHRjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG4xNDI0OlxcdFxcdGRlZl9ib29sIHlcXG4xNDI1OlxcdFxcdGRlcGVuZHMgb24gTFJVX0dFTiBcXHUwMDI2XFx1MDAyNiBBUkNIX0hBU19IV19QVEVfWU9VTkdcXG4xNDI2OlxcdCMgfVxcbjE0Mjc6XFx0XFxuMTQyODpcXHRjb25maWcgTE9DS19NTV9BTkRfRklORF9WTUFcXG4xNDI5OlxcdFxcdGJvb2xcXG4xNDMwOlxcdFxcdGRlcGVuZHMgb24gIVNUQUNLX0dST1dTVVBcXG4xNDMxOlxcdFxcbjE0MzI6XFx0Y29uZmlnIElPTU1VX01NX0RBVEFcXG4xNDMzOlxcdFxcdGJvb2xcXG4xNDM0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjoyNDoxNy44MzQ0NDAyNTdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMzMjEzMDY0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDaGVja2luZyBmb3IgTWlncmF0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIHZlcmlmeSB0aGUgZXhpc3RlbmNlIG9mIHRoZSBgTUlHUkFUSU9OYCBjb25maWd1cmF0aW9uLiBUaGlzIGlzIHN0YW5kYXJkIG9wZXJhdGluZyBwcm9jZWR1cmUsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggYW55IHR5cGUgb2YgYXV0b21hdGVkIG9yIHNjcmlwdGVkIGRlcGxveW1lbnQsIHVwZGF0ZSwgb3IgZGF0YSB0cmFuc2Zvcm1hdGlvbi4gSSBjYW4ndCBwcm9jZWVkIHdpdGggYW55IG1pZ3JhdGlvbi1yZWxhdGVkIHRhc2sgdW50aWwgSSBjb25maXJtIHRoYXQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIGlzIHByZXNlbnQgYW5kIGFjY2Vzc2libGUuIFRoaXMgcHJvYmFibHkgbWVhbnMgdmVyaWZ5aW5nIHRoZSBwcmVzZW5jZSBvZiBhIHNwZWNpZmljIGZpbGUsIGVudmlyb25tZW50IHZhcmlhYmxlLCBkYXRhYmFzZSBlbnRyeSwgb3Igb3RoZXIgbWVhbnMgdGhhdCBkZWZpbmVzIHRoZSBtaWdyYXRpb24gcHJvY2VzcyBwYXJhbWV0ZXJzLiBXaXRob3V0IGtub3dpbmcgdGhlIHByZWNpc2Ugc3lzdGVtLCBJIGhhdmUgdG8gYXNzdW1lIGEgZmV3IHBvc3NpYmlsaXRpZXMgc3VjaCBhcyBhIG1pZ3JhdGlvbiBmaWxlLCBvciBhIHNwZWNpZmljIGRhdGFiYXNlIGVudHJ5LiBOb3csIGhvdyBkbyBJIGFjdHVhbGx5IGNoZWNrPyBEbyBJIGhhdmUgYSBwcmUtZXhpc3RpbmcgZnVuY3Rpb24/IExpYnJhcnk/IElzIGl0IGEgbWFudWFsIGNoZWNrPyBJIGFtIGdvaW5nIHRvIGFzc3VtZSBzb21lIGtpbmQgb2Ygc3lzdGVtIGFscmVhZHkgZXhpc3RzLCBhbmQgSSBuZWVkIHRvIGNoZWNrIGZvciB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTA1MywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6MjQ6MjAuMTY2NTczNDcxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTczMTk5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUlHUkFUSU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTY2OD1jb25maWcgTlVNQV9NSUdSQVRJT05cXG4tLVxcbm1tL0tjb25maWctNjc4LVxcbm1tL0tjb25maWc6Njc5OmNvbmZpZyBNSUdSQVRJT05cXG5tbS9LY29uZmlnLTY4MC1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjI0OjIwLjIxODMxMDM4M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTA1MjI5NjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipDaGVja2luZyB0aGUgTWlncmF0aW9uIENvbmZpZ3VyYXRpb24gaW4gbW0vS2NvbmZpZyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgXCJSaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24uXCIgU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGBNSUdSQVRJT05gIG9wdGlvbnMgd2l0aGluIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIG9yIHBvdGVudGlhbGx5IHR3ZWFraW5nIHRoZSBzeXN0ZW0ncyBtZW1vcnkgbWlncmF0aW9uIGNhcGFiaWxpdGllcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlc2UgY29uZmlndXJhdGlvbnMsIGFuZCB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZS4gVGhpcyBpcyBhIHByZXR0eSBmdW5kYW1lbnRhbCBhc3BlY3Qgb2YgaG93IHRoZSBrZXJuZWwgbWFuYWdlcyBtZW1vcnksIHNvIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCdzIGdvaW5nIG9uIHdpdGggbWlncmF0aW9uLiBMZXQncyBzZWUgd2hhdCdzIHNldCBhbmQgaWYgdGhlcmUncyBhbnl0aGluZyB1bnVzdWFsIG9yIHNvbWV0aGluZyB0aGF0IHNob3VsZCBiZSBhZGp1c3RlZCBpbiB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbi4gVGhpcyBpcyBzb21ldGhpbmcgSSdtIGludGltYXRlbHkgZmFtaWxpYXIgd2l0aCwgc28gSSdsbCBiZSBsb29raW5nIGF0IHRoZSBkZXRhaWxzIGFzIHdlbGwgYXMgdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTM1MywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjI0OjIyLjEyMzU0MjA0NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjU4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NzAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NzA6XFx0XFx0ZGVmYXVsdCB5XFxuIDY3MTpcXHRcXHRkZXBlbmRzIG9uIE5VTUEgXFx1MDAyNlxcdTAwMjYgTU1VXFxuIDY3MjpcXHRcXHRzZWxlY3QgTUlHUkFUSU9OXFxuIDY3MzpcXHRcXHRoZWxwXFxuIDY3NDpcXHRcXHQgIFN1cHBvcnQgdGhlIG1pZ3JhdGlvbiBvZiBwYWdlcyB0byBvdGhlciBOVU1BIG5vZGVzLCBhdmFpbGFibGUgdG9cXG4gNjc1OlxcdFxcdCAgdXNlciBzcGFjZSB0aHJvdWdoIGludGVyZmFjZXMgbGlrZSBtaWdyYXRlX3BhZ2VzKCksIG1vdmVfcGFnZXMoKSxcXG4gNjc2OlxcdFxcdCAgYW5kIG1iaW5kKCkuIFNlbGVjdGluZyB0aGlzIG9wdGlvbiBhbHNvIGVuYWJsZXMgc3VwcG9ydCBmb3IgcGFnZVxcbiA2Nzc6XFx0XFx0ICBkZW1vdGlvbiBmb3IgbWVtb3J5IHRpZXJpbmcuXFxuIDY3ODpcXHRcXG4gNjc5OlxcdGNvbmZpZyBNSUdSQVRJT05cXG4gNjgwOlxcdFxcdGJvb2xcXG4gNjgxOlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuIDY4MjpcXHRcXG4gNjgzOlxcdGNvbmZpZyBERVZJQ0VfTUlHUkFUSU9OXFxuIDY4NDpcXHRcXHRkZWZfYm9vbCBNSUdSQVRJT04gXFx1MDAyNlxcdTAwMjYgWk9ORV9ERVZJQ0VcXG4gNjg1OlxcdFxcbiA2ODY6XFx0Y29uZmlnIEFSQ0hfRU5BQkxFX0hVR0VQQUdFX01JR1JBVElPTlxcbiA2ODc6XFx0XFx0Ym9vbFxcbiA2ODg6XFx0XFxuIDY4OTpcXHRjb25maWcgQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVNcXG4gNjkwOlxcdFxcdGJvb2xcXG4gNjkxOlxcdFxcbiA2OTI6XFx0Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXFxuIDY5MzpcXHRcXHRkZWZfYm9vbCBuXFxuIDY5NDpcXHRcXHRoZWxwXFxuIDY5NTpcXHRcXHQgIEFsbG93cyB0aGUgcGFnZWJsb2NrX29yZGVyIHZhbHVlIHRvIGJlIGR5bmFtaWMgaW5zdGVhZCBvZiBqdXN0IHN0YW5kYXJkXFxuIDY5NjpcXHRcXHQgIEhVR0VUTEJfUEFHRV9PUkRFUiB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBIdWdlVExCIHBhZ2Ugc2l6ZXMgYXZhaWxhYmxlXFxuIDY5NzpcXHRcXHQgIG9uIGEgcGxhdGZvcm0uXFxuIDY5ODpcXHRcXG4gNjk5OlxcdFxcdCAgTm90ZSB0aGF0IHRoZSBwYWdlYmxvY2tfb3JkZXIgY2Fubm90IGV4Y2VlZCBNQVhfUEFHRV9PUkRFUiBhbmQgd2lsbCBiZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjoyNDoyMi4xMjM2Njk0NTZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDc5NTExNTUzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGlzIFBhdGNoJ3MgSW1wYWN0IG9uIE1lbW9yeSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IGRlZXBseSBpbnZvbHZlZCB3aXRoIG1lbW9yeSBtaWdyYXRpb24sIGNvbXBhY3Rpb24sIGFuZCBOVU1BIGJhbGFuY2luZywgZ2l2ZW4gdGhlIG1lbnRpb25zIG9mIGBOVU1BX01JR1JBVElPTmAsIGBNSUdSQVRJT05gLCBgQ09NUEFDVElPTmAsIGFuZCBgTlVNQV9CQUxBTkNJTkdgLiBXZSdyZSBlbmFibGluZyBtaWdyYXRpb24gaGVyZS4gVGhlIGZhY3QgdGhhdCBgTFJVX0dFTmAsIGBMUlVfR0VOX0VOQUJMRURgLCBhbmQgYE1FTUNHYCBhcmUgYWxzbyByZWxldmFudCBzdWdnZXN0cyBhIGNvbm5lY3Rpb24gdG8gZ2VuZXJhdGlvbmFsIExSVSBhbmQgbWVtb3J5IGNncm91cCBtYW5hZ2VtZW50IGFzIGl0IHJlbGF0ZXMgdG8gbWlncmF0aW9uLCB3aGljaCBpcyBpbnRyaWd1aW5nLlxuXG5JIG5lZWQgdG8gbWV0aWN1bG91c2x5IHJldmlldyB0aGlzIHBhdGNoLiBJdCBpbXBhY3RzIHNvbWUgY29yZSBhcmVhcy4gU3BlY2lmaWNhbGx5LCB0aGUgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgaW5jbHVkaW5nIE1HTFJVLCBtZW1jZyBMUlUgem9uZSBzaXplIGFkanVzdG1lbnRzLCBhbmQgcGFnZSBtaWdyYXRpb24gcmVmZXJlbmNlIGZsYWdzLCBhbGwgb2Ygd2hpY2ggYXJlIHZlcnkgc2Vuc2l0aXZlLiBUaGUgaW50cm9kdWN0aW9uIG9mIG5ldyBhc3NlcnRpb25zLCBzdWNoIGFzIHRob3NlIHVzaW5nIGBWTV9XQVJOX09OX09OQ0VgIGluIGZ1bmN0aW9ucyBsaWtlIGBscnVfc2V0X2dlbl9mbGFnc2AgYW5kIGBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplYCwgaXMgc29tZXRoaW5nIEkgbmVlZCB0byBwYXkgdmVyeSBjbG9zZSBhdHRlbnRpb24gdG8uIFRoZXNlIGFyZSBwb3RlbnRpYWwgcG9pbnRzIG9mIGZhaWx1cmUgb3IgZGVidWdnaW5nIGhvb2tzLiBJdCBhbHNvIHRvdWNoZXMgZ2VuZXJhdGlvbiBhbmQgdGllciBjYWxjdWxhdGlvbnMsIHBhZ2Ugc2Nhbm5pbmcsIGFuZCBldmljdGlvbiwgc3BlY2lmaWNhbGx5IGluIGBtbS92bXNjYW4uY2AuIExhc3RseSwgZmxhZyBtYW5pcHVsYXRpb24gcmVsYXRlZCB0byBmb2xpb3MsIGxpa2UgaW4gYGxydV9zZXRfcmVmc19mbGFnc2AsIGBmb2xpb19zZXRfbHJ1X3JlZnNgLCBldGMuLCBpcyBiZWluZyBtb2RpZmllZC5cblxuQmFzZWQgb24gYWxsIG9mIHRoaXMsIHRoaXMgcGF0Y2ggZGVmaW5pdGVseSB3YXJyYW50cyBleHRlbnNpdmUgZnV6emluZy4gVGhlIGNoYW5nZXMgYXJlIHRvbyBsb3ctbGV2ZWwgYW5kIGZhci1yZWFjaGluZyB0byBpZ25vcmUuIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGxvb2sgbGlrZSBwYXJ0aWN1bGFybHkgZnJ1aXRmdWwgdGFyZ2V0cyBmb3IgZnV6emluZzogYGxydV9nZW5fbG9va19hcm91bmRgLCBgZm9saW9fbWlncmF0ZV9mbGFnc2AsIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAsIGB3YWxrX3B0ZV9yYW5nZWAsIGB3YWxrX3BtZF9yYW5nZV9sb2NrZWRgLCBgZm9saW9fdXBkYXRlX2dlbmAsIGBldmljdF9mb2xpb3NgLCBgaXNvbGF0ZV9mb2xpb2AsIGBscnVfZ2VuX2luY19yZWZzYCwgYW5kIGBscnVfZ2VuX2NsZWFyX3JlZnNgLiBUaGV5IGhhbmRsZSB0aGUgbW9zdCBzZW5zaXRpdmUgYXNwZWN0cyBvZiBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2VzLlxuXG5BbmQsIG9mIGNvdXJzZSwgdGhlIGBMUlVfR0VOYCwgYExSVV9HRU5fRU5BQkxFRGAsIGBNRU1DR2AsIGFuZCBgTUlHUkFUSU9OYCBjb25maWd1cmF0aW9ucyBtdXN0IGJlIGVuYWJsZWQgdG8gZnVsbHkgZXhlcmNpc2UgdGhpcyBwYXRjaC5cblxuSSdsbCBwcm9jZWVkIHRvIGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIHRoaXMgaW5mb3JtYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5OTkwLCJPdXRwdXRUb2tlbnMiOjI0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjI0OjI2LjkxODc4NzcwM1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNDY1NDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNSUdSQVRJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJscnVfZ2VuX2xvb2tfYXJvdW5kXCIsXG4gICAgXCJmb2xpb19taWdyYXRlX2ZsYWdzXCIsXG4gICAgXCJtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZVwiLFxuICAgIFwid2Fsa19wdGVfcmFuZ2VcIixcbiAgICBcIndhbGtfcG1kX3JhbmdlX2xvY2tlZFwiLFxuICAgIFwiZm9saW9fdXBkYXRlX2dlblwiLFxuICAgIFwiZXZpY3RfZm9saW9zXCIsXG4gICAgXCJpc29sYXRlX2ZvbGlvXCIsXG4gICAgXCJscnVfZ2VuX2luY19yZWZzXCIsXG4gICAgXCJscnVfZ2VuX2NsZWFyX3JlZnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBhY3Jvc3MgbW0vdm1zY2FuLmMsIG1tL2ZvbGlvLmMsIG1tL21lbWNvbnRyb2wuYywgYW5kIG1tL21pZ3JhdGUuYywgYWx0ZXJpbmcgTXVsdGktR2VuIExSVSAoTUdMUlUpIHJlZmVyZW5jZSB0cmFja2luZywgZm9saW8gZmxhZyBtYW5pcHVsYXRpb24sIHRpZXIgY2FsY3VsYXRpb25zLCBwYWdlIGV2aWN0aW9uLCBhbmQgbWVtY2cgTFJVIHpvbmUgYWNjb3VudGluZy4gSXQgYWxzbyBhZGRzIHNldmVyYWwgVk1fV0FSTl9PTl9PTkNFIGFzc2VydGlvbnMgYW5kIGNoYW5nZXMgc3luY2hyb25pemF0aW9uL2FyaXRobWV0aWMgbG9naWMuIFRoZXNlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUlHUkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibHJ1X2dlbl9sb29rX2Fyb3VuZFwiLFxuICAgIFwiZm9saW9fbWlncmF0ZV9mbGFnc1wiLFxuICAgIFwibWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVcIixcbiAgICBcIndhbGtfcHRlX3JhbmdlXCIsXG4gICAgXCJ3YWxrX3BtZF9yYW5nZV9sb2NrZWRcIixcbiAgICBcImZvbGlvX3VwZGF0ZV9nZW5cIixcbiAgICBcImV2aWN0X2ZvbGlvc1wiLFxuICAgIFwiaXNvbGF0ZV9mb2xpb1wiLFxuICAgIFwibHJ1X2dlbl9pbmNfcmVmc1wiLFxuICAgIFwibHJ1X2dlbl9jbGVhcl9yZWZzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgYWNyb3NzIG1tL3Ztc2Nhbi5jLCBtbS9mb2xpby5jLCBtbS9tZW1jb250cm9sLmMsIGFuZCBtbS9taWdyYXRlLmMsIGFsdGVyaW5nIE11bHRpLUdlbiBMUlUgKE1HTFJVKSByZWZlcmVuY2UgdHJhY2tpbmcsIGZvbGlvIGZsYWcgbWFuaXB1bGF0aW9uLCB0aWVyIGNhbGN1bGF0aW9ucywgcGFnZSBldmljdGlvbiwgYW5kIG1lbWNnIExSVSB6b25lIGFjY291bnRpbmcuIEl0IGFsc28gYWRkcyBzZXZlcmFsIFZNX1dBUk5fT05fT05DRSBhc3NlcnRpb25zIGFuZCBjaGFuZ2VzIHN5bmNocm9uaXphdGlvbi9hcml0aG1ldGljIGxvZ2ljLiBUaGVzZSBwYXRocyBhcmUgZnVsbHkgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjoyNDoyNi45OTkyNjA1OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI3MzgyOTI2MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjoyNDoyNi45OTk3MTc0MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMyNzM3ODMxODYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIE11bHRpLUdlbmVyYXRpb25hbCBMUlUgKE1HTFJVKSBmb2xpbyBmbGFnIGhlbHBlcnMsIHBhZ2UgdGFibGUgLyBybWFwIHNjYW5uaW5nIGxvZ2ljLCBhbmQgbWVtY2cgTFJVIHpvbmUgc2l6ZSBhY2NvdW50aW5nLiBTcGVjaWZpY2FsbHk6XFxuLSBJdCByZXBsYWNlcyBkaXJlY3QgYGZvbGlvLVxcdTAwM2VmbGFncy5mYCBhY2Nlc3Mgd2l0aCBgZm9saW9fZmxhZ3MoZm9saW8sIDApYCBhY2Nlc3NvciBoZWxwZXJzIChgbHJ1X3NldF9nZW5fZmxhZ3NgLCBgbHJ1X2dldF9nZW5fZmxhZ3NgLCBgbHJ1X3NldF9yZWZzX2ZsYWdzYCwgYGxydV9nZXRfcmVmc19mbGFnc2AsIGBmb2xpb19zZXRfbHJ1X3JlZnNgLCBgZm9saW9fbWlncmF0ZV9scnVfcmVmc2ApLlxcbi0gSXQgY2xlYW5zIHVwIGByZWFkX2N0cmxfcG9zYCBwYXJhbWV0ZXJpemF0aW9uIGFuZCBgd2Fsa191cGRhdGVfZm9saW9gIGNhbGxlcnMuIFN0YWNrIHZhcmlhYmxlcyBzdWNoIGFzIGBzdHJ1Y3QgY3RybF9wb3MgcG9zYCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgaW4gYHJlYWRfY3RybF9wb3NgLCBhbmQgdGhlIGBpbnQgKnR5cGVgIG91dHB1dCBwYXJhbWV0ZXIgaW4gYGZvbGlvX3VwZGF0ZV9nZW5gIGlzIGd1YXJhbnRlZWQgdG8gYmUgaW5pdGlhbGl6ZWQgd2hlbiB0aGUgcmV0dXJuIHZhbHVlIGluZGljYXRlcyBwcm9tb3Rpb24gKGBvbGRfZ2VuIFxcdTAwM2U9IDBgKS5cXG4tIEl0IGNvbnZlcnRzIGBtei1cXHUwMDNlbHJ1X3pvbmVfc2l6ZWAgdG8gc2lnbmVkIGBsb25nYCB0byBzaW1wbGlmeSB1bmRlcmZsb3cgaGFuZGxpbmcuXFxuXFxuTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGFsbG9jYXRlIHVuaW5pdGlhbGl6ZWQgYnVmZmVycywgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBQb3RlbnRpYWwgYnVncyBpbiB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIGNvbmN1cnJlbmN5L2xvY2tpbmcgcmFjZXMgb3Igc3RhdGUgY29ycnVwdGlvbikgYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIGtlcm5lbCBhc3NlcnRpb24gYnVpbGRzIHdpdGhvdXQgcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlM2NiYmM3NmUxYzk2NmM3NmZlNjIxMjk5YTMyZDE3YWZhN2U0MDAzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAxNjoyMzo0OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IGM3OTk5MjY0MzU1NjAuLjJiNjc2OTQyODVkMDQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC0xMDAsNyArMTAwLDcgQEAgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUge1xuIFx0LyogRmllbGRzIHdoaWNoIGdldCB1cGRhdGVkIG9mdGVuIGF0IHRoZSBlbmQuICovXG4gXHRzdHJ1Y3QgbHJ1dmVjXHRcdGxydXZlYztcbiBcdENBQ0hFTElORV9QQURESU5HKF9wYWQyXyk7XG4tXHR1bnNpZ25lZCBsb25nXHRcdGxydV96b25lX3NpemVbTUFYX05SX1pPTkVTXVtOUl9MUlVfTElTVFNdO1xuK1x0bG9uZ1x0XHRcdGxydV96b25lX3NpemVbTUFYX05SX1pPTkVTXVtOUl9MUlVfTElTVFNdO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXBfcmVjbGFpbV9pdGVyXHRpdGVyO1xuIFxuIFx0LypcbkBAIC04ODcsMTAgKzg4NywxNSBAQCBzdGF0aWMgaW5saW5lXG4gdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0ZW51bSBscnVfbGlzdCBscnUsIGludCB6b25lX2lkeClcbiB7XG4rXHRsb25nIHZhbDtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejtcbiBcbiBcdG16ID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7XG4tXHRyZXR1cm4gUkVBRF9PTkNFKG16LVx1MDAzZWxydV96b25lX3NpemVbem9uZV9pZHhdW2xydV0pO1xuK1x0dmFsID0gUkVBRF9PTkNFKG16LVx1MDAzZWxydV96b25lX3NpemVbem9uZV9pZHhdW2xydV0pO1xuK1x0aWYgKFdBUk5fT05fT05DRSh2YWwgXHUwMDNjIDApKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiB2YWw7XG4gfVxuIFxuIHZvaWQgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmggYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG5pbmRleCA2MjFjODY1M2Q4ZjdlLi5hYjY5Yjk5MzA4OTNmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuQEAgLTMwLDYgKzMwLDE3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2lzX2ZpbGVfbHJ1KGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gIWZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbyk7XG4gfVxuIFxuKy8qKlxuKyAqIGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1IC0gU2hvdWxkIHRoZSBmb2xpbyBiZSBvbiBhIGZpbGUgTFJVIG9yIGFub24gTFJVP1xuKyAqIEBmbGFnczogVGhlIGZvbGlvJ3MgZmxhZ3MuXG4rICpcbisgKiBKdXN0IGxpa2UgZm9saW9faXNfZmlsZV9scnUgYnV0IHRha2UgdGhlIGZvbGlvIGZsYWdzIGRpcmVjdGx5IGluc3RlYWQuXG4rICovXG4rc3RhdGljIGlubGluZSBpbnQgZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUoY29uc3QgdW5zaWduZWQgbG9uZyAqZmxhZ3MpXG4re1xuK1x0cmV0dXJuICF0ZXN0X2JpdChQR19zd2FwYmFja2VkLCBmbGFncyk7XG4rfVxuK1xuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdFx0XHRlbnVtIGxydV9saXN0IGxydSwgZW51bSB6b25lX3R5cGUgemlkLFxuIFx0XHRcdFx0bG9uZyBucl9wYWdlcylcbkBAIC0xNDIsMTAgKzE1Myw2NiBAQCBzdGF0aWMgaW5saW5lIGludCBscnVfdGllcl9mcm9tX3JlZnMoaW50IHJlZnMsIGJvb2wgd29ya2luZ3NldClcbiBcdHJldHVybiB3b3JraW5nc2V0ID8gTUFYX05SX1RJRVJTIC0gMSA6IG9yZGVyX2Jhc2VfMihyZWZzKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbisvKipcbisgKiBscnVfc2V0X2dlbl9mbGFncyAtIFNldCB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIHRvIHNwZWNpZmllZCBmb2xpbyBmbGFncy5cbisgKiBAZmxhZ3M6IHBvaW50ZXIgdG8gdGhlIGZvbGlvIGZsYWdzXG4rICogQGdlbjogZ2VuZXJhdGlvbiBudW1iZXIsIGJldHdlZW4gMCBhbmQgKE1BWF9OUl9HRU5TIC0gMSksIGluY2x1c2l2ZS5cbisgKi9cbitzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X3NldF9nZW5fZmxhZ3ModW5zaWduZWQgbG9uZyAqZmxhZ3MsIGludCBnZW4pXG4re1xuK1x0QlVJTERfQlVHX09OKExSVV9HRU5fTUFTSyBcdTAwMjYgTFJVX1JFRlNfTUFTSyk7XG4rXHRWTV9XQVJOX09OX09OQ0UoZ2VuIFx1MDAzZT0gTUFYX05SX0dFTlMgfHwgZ2VuIFx1MDAzYyAwKTtcbitcdC8qIFN0b3JlIGdlbiBvZmZzZXQgYnkgMSwgemVybyBtZWFucyB0aGUgZm9saW8gaXMgb2ZmLWxpc3QuICovXG4rXHQqZmxhZ3MgXHUwMDI2PSB+TFJVX0dFTl9NQVNLO1xuK1x0KmZsYWdzIHw9IChnZW4gKyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuK31cbitcbisvKipcbisgKiBscnVfZ2V0X2dlbl9mbGFncyAtIFJldHVybiB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIGZyb20gZm9saW8gZmxhZ3MuXG4rICogQGZsYWdzOiBmb2xpbyBmbGFnc1xuKyAqXG4rICogUmV0dXJuczogQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLiBSZXR1cm5zXG4rICogLTEgaWYgdGhlIGZsYWdzIGluZGljYXRlIHRoZSBmb2xpbyBpcyBvZmYgdGhlIGxpc3QgKGUuZy4sIGlzb2xhdGVkKS5cbisgKi9cbitzdGF0aWMgaW5saW5lIGludCBscnVfZ2V0X2dlbl9mbGFncyh1bnNpZ25lZCBsb25nIGZsYWdzKVxuK3tcbitcdGludCBnZW4gPSAoKGZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4rXG4rXHQvKiBFeGNsdWRlIHRoZSBsZWdhbCAtMSBmcm9tIHRoZSB1bnNpZ25lZCBNQVhfTlJfR0VOUyBjb21wYXJpc29uICovXG4rXHRWTV9XQVJOX09OX09OQ0UoZ2VuICE9IC0xIFx1MDAyNlx1MDAyNiBnZW4gXHUwMDNlPSBNQVhfTlJfR0VOUyk7XG4rXHRyZXR1cm4gZ2VuO1xuK31cbitcbisvKipcbisgKiBscnVfc2V0X3JlZnNfZmxhZ3MgLSBTZXQgdGhlIExSVSByZWZlcmVuY2VkIGNvdW50IHRvIGZvbGlvIGZsYWdzLlxuKyAqIEBmbGFnczogcG9pbnRlciB0byB0aGUgZm9saW8gZmxhZ3NcbisgKiBAcmVmczogcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCBudW1iZXIsIGJldHdlZW4gMCBhbmQgTFJVX1JFRlNfTUFYLCBpbmNsdXNpdmUuXG4rICpcbisgKiBGb3IgTUdMUlUsIFBHX3JlZmVyZW5jZWQgaG9sZHMgdGhlIGZpcnN0IHJlZiwgYW5kIHRoZSBleHRyYSBiaXRzIGhvbGQgdGhlXG4rICogcmVtYWluaW5nIHJlZnMuIEZvciBjbGFzc2ljYWwgTFJVIHRoZSBleHRyYSBiaXRzIGFyZSBub3QgdXNlZCwgc28gaXQgY2FuXG4rICogYWxzbyBiZSBzZWVuIGFzIHRoZSByZWZzIGNvdW50IG5ldmVyIGV4Y2VlZHMgMS4gSW4gYm90aCBjYXNlcywgcmVmcyA9PSAxXG4rICogbWVhbnMgUEdfcmVmZXJlbmNlZCBpcyBzZXQgYW5kIHRoZSBleHRyYSBiaXRzIGFyZSB6ZXJvLCBhbmQgcmVmcyA9PSAwIG1lYW5zXG4rICogUEdfcmVmZXJlbmNlZCBhbmQgdGhlIGV4dHJhIGJpdHMgYXJlIGFsbCB1bnNldC5cbisgKi9cbitzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X3NldF9yZWZzX2ZsYWdzKHVuc2lnbmVkIGxvbmcgKmZsYWdzLCB1bnNpZ25lZCBpbnQgcmVmcylcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuK1x0Vk1fV0FSTl9PTl9PTkNFKHJlZnMgXHUwMDNlIExSVV9SRUZTX01BWCk7XG4rXHRCVUlMRF9CVUdfT04oTFJVX1JFRlNfTUFYICE9IChMUlVfUkVGU19NQVNLIFx1MDAzZVx1MDAzZSBMUlVfUkVGU19QR09GRikgKyAxKTtcbiBcbitcdCpmbGFncyBcdTAwMjY9IH5MUlVfUkVGU19GTEFHUztcbitcdGlmICghcmVmcylcbitcdFx0cmV0dXJuO1xuK1x0KmZsYWdzIHw9IChCSVQoUEdfcmVmZXJlbmNlZCkgfCAoKHJlZnMgLSAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfUkVGU19QR09GRikpO1xuK31cbitcbisvKipcbisgKiBscnVfZ2V0X3JlZnNfZmxhZ3MgLSBSZXR1cm4gTFJVIHJlZmVyZW5jZWQgLyBhY2Nlc3MgY291bnQgZnJvbSBmb2xpbyBmbGFncy5cbisgKiBAZmxhZ3M6IGZvbGlvIGZsYWdzXG4rICpcbisgKiBSZWFkcyB0aGUgTFJVIHJlZmVyZW5jZWQgY291bnQgc2V0IGJ5IGxydV9zZXRfcmVmc19mbGFncygpLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgaW50IGxydV9nZXRfcmVmc19mbGFncyh1bnNpZ25lZCBsb25nIGZsYWdzKVxuK3tcbiBcdGlmICghKGZsYWdzIFx1MDAyNiBCSVQoUEdfcmVmZXJlbmNlZCkpKVxuIFx0XHRyZXR1cm4gMDtcbiBcdC8qXG5AQCAtMTU1LDExICsyMjIsMjQgQEAgc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHJldHVybiAoKGZsYWdzIFx1MDAyNiBMUlVfUkVGU19NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX1JFRlNfUEdPRkYpICsgMTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X2dlbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbitcdHJldHVybiBscnVfZ2V0X3JlZnNfZmxhZ3MoUkVBRF9PTkNFKCpjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpKTtcbit9XG4gXG4tXHRyZXR1cm4gKChmbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IHJlZnMpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbitcbitcdGRvIHtcbitcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuK1x0XHRscnVfc2V0X3JlZnNfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCByZWZzKTtcbitcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRyZXR1cm4gbHJ1X2dldF9nZW5fZmxhZ3MoUkVBRF9PTkNFKCpjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBib29sIGxydV9nZW5faXNfYWN0aXZlKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IGdlbilcbkBAIC0yNzAsNyArMzUwLDcgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fYWRkX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcbiBcdGZsYWdzID0gKGdlbiArIDFVTCkgXHUwMDNjXHUwMDNjIExSVV9HRU5fUEdPRkY7XG4gXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUlOX05SX0dFTlMgYWJvdXQgUEdfYWN0aXZlICovXG4tXHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9HRU5fTUFTSyB8IEJJVChQR19hY3RpdmUpLCBmbGFncyk7XG4rXHRzZXRfbWFza19iaXRzKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgTFJVX0dFTl9NQVNLIHwgQklUKFBHX2FjdGl2ZSksIGZsYWdzKTtcbiBcbiBcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgLTEsIGdlbik7XG4gXHQvKiBmb3IgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKCkgKi9cbkBAIC0yOTUsNyArMzc1LDcgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcbiBcdC8qIGZvciBmb2xpb19taWdyYXRlX2ZsYWdzKCkgKi9cbiBcdGZsYWdzID0gIXJlY2xhaW1pbmcgXHUwMDI2XHUwMDI2IGxydV9nZW5faXNfYWN0aXZlKGxydXZlYywgZ2VuKSA/IEJJVChQR19hY3RpdmUpIDogMDtcbi1cdGZsYWdzID0gc2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfR0VOX01BU0ssIGZsYWdzKTtcbitcdGZsYWdzID0gc2V0X21hc2tfYml0cyhmb2xpb19mbGFncyhmb2xpbywgMCksIExSVV9HRU5fTUFTSywgZmxhZ3MpO1xuIFx0Z2VuID0gKChmbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuIFxuIFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBnZW4sIC0xKTtcbkBAIC0zMDQsMTEgKzM4NCwxOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxuKy8qKlxuKyAqIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMgLSBjb3B5IHRoZSByZWZlcmVuY2Ugc3RhdGUgdG8gYSBuZXcgZm9saW9cbisgKiBAbmV3OiB0aGUgZGVzdGluYXRpb24gZm9saW9cbisgKiBAb2xkOiB0aGUgc291cmNlIGZvbGlvXG4rICpcbisgKiBUcmFuc2ZlciB0aGUgcmVmZXJlbmNlIHN0YXRlIHRvIEBuZXcgZHVyaW5nIG1pZ3JhdGlvbjogdGhlIE1HTFJVXG4rICogcmVmcyBjb3VudCwgaW5jbHVkaW5nIFBHX3JlZmVyZW5jZWQsIG9yIGp1c3QgUEdfcmVmZXJlbmNlZCBmb3IgdGhlXG4rICogYWN0aXZlL2luYWN0aXZlIExSVS5cbisgKi9cbitzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyByZWZzID0gUkVBRF9PTkNFKG9sZC1cdTAwM2VmbGFncy5mKSBcdTAwMjYgTFJVX1JFRlNfTUFTSztcbi1cbi1cdHNldF9tYXNrX2JpdHMoXHUwMDI2bmV3LVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIHJlZnMpO1xuK1x0QlVJTERfQlVHX09OKExSVV9SRUZTX01BU0sgXHUwMDI2IEJJVChQR19yZWZlcmVuY2VkKSk7XG4rXHRmb2xpb19zZXRfbHJ1X3JlZnMobmV3LCBmb2xpb19scnVfcmVmcyhvbGQpKTtcbiB9XG4gI2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXG4gXG5AQCAtMzM3LDkgKzQyNSwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcbitzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXG4ge1xuLVxuK1x0aWYgKGZvbGlvX3Rlc3RfcmVmZXJlbmNlZChvbGQpKVxuK1x0XHRmb2xpb19zZXRfcmVmZXJlbmNlZChuZXcpO1xuIH1cbiAjZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuaW5kZXggODRlMjM3ZjJjMTdkYi4uYzlhZTc5OTFhOGIyMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbkBAIC00OTUsMTEgKzQ5NSwxNCBAQCBlbnVtIGxydXZlY19mbGFncyB7XG4gICogZm9saW8tXHUwMDNlZmxhZ3MsIG1hc2tlZCBieSBMUlVfUkVGU19NQVNLLlxuICAqL1xuICNkZWZpbmUgTUFYX05SX1RJRVJTXHRcdDRVXG4rI2RlZmluZSBMUlVfVElFUl9NSU5cdFx0MFVcbisjZGVmaW5lIExSVV9USUVSX01BWFx0XHQoTUFYX05SX1RJRVJTIC0gMSlcbiBcbiAjaWZuZGVmIF9fR0VORVJBVElOR19CT1VORFNfSFxuIFxuICNkZWZpbmUgTFJVX0dFTl9NQVNLXHRcdCgoQklUKExSVV9HRU5fV0lEVEgpIC0gMSkgXHUwMDNjXHUwMDNjIExSVV9HRU5fUEdPRkYpXG4gI2RlZmluZSBMUlVfUkVGU19NQVNLXHRcdCgoQklUKExSVV9SRUZTX1dJRFRIKSAtIDEpIFx1MDAzY1x1MDAzYyBMUlVfUkVGU19QR09GRilcbisjZGVmaW5lIExSVV9SRUZTX01BWFx0XHRCSVQoTFJVX1JFRlNfV0lEVEgpXG4gXG4gLypcbiAgKiBGb3IgZm9saW9zIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycyxcbmRpZmYgLS1naXQgYS9tbS9mb2xpby5jIGIvbW0vZm9saW8uY1xuaW5kZXggNTBhNmRiZTU1OTk4ZS4uNDdhNDM3ZTBmN2ZkZSAxMDA2NDRcbi0tLSBhL21tL2ZvbGlvLmNcbisrKyBiL21tL2ZvbGlvLmNcbkBAIC0zNTQsMjYgKzM1NCwyOCBAQCBzdGF0aWMgdm9pZCBfX2xydV9jYWNoZV9hY3RpdmF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFxuIHN0YXRpYyB2b2lkIGxydV9nZW5faW5jX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4tXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuK1x0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbitcdGludCByZWZzO1xuIFxuIFx0aWYgKGZvbGlvX3Rlc3RfdW5ldmljdGFibGUoZm9saW8pKVxuIFx0XHRyZXR1cm47XG4gXG4gXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi9cbi1cdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSkge1xuLVx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XG4rXHRpZiAoIWZvbGlvX2xydV9yZWZzKGZvbGlvKSkge1xuK1x0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4gXHRkbyB7XG4tXHRcdGlmICgob2xkX2ZsYWdzIFx1MDAyNiBMUlVfUkVGU19NQVNLKSA9PSBMUlVfUkVGU19NQVNLKSB7XG4rXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncztcbitcdFx0cmVmcyA9IGxydV9nZXRfcmVmc19mbGFncyhvbGRfZmxhZ3MpO1xuK1x0XHRpZiAocmVmcyA9PSBMUlVfUkVGU19NQVgpIHtcbiBcdFx0XHRpZiAoIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpXG4gXHRcdFx0XHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XG4gXHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4tXG4tXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncyArIEJJVChMUlVfUkVGU19QR09GRik7XG4tXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbitcdFx0bHJ1X3NldF9yZWZzX2ZsYWdzKFx1MDAyNm5ld19mbGFncywgcmVmcyArIDEpO1xuK1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5AQCAtMzg1LDcgKzM4Nyw4IEBAIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0aWYgKGdlbiBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTIHwgQklUKFBHX3dvcmtpbmdzZXQpLCAwKTtcbitcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4rXHRmb2xpb19jbGVhcl93b3JraW5nc2V0KGZvbGlvKTtcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdHNlcSA9IFJFQURfT05DRShmb2xpb19scnV2ZWMoZm9saW8pLVx1MDAzZWxydWdlbi5taW5fc2VxW3R5cGVdKTtcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IGJkMWU3ZTE1NDQyNjUuLmYxN2IyYjJkNjEwNTUgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTE1MjksMjggKzE1MjksMTIgQEAgdm9pZCBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LFxuIFx0XHRcdFx0aW50IHppZCwgbG9uZyBucl9wYWdlcylcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XG4tXHR1bnNpZ25lZCBsb25nICpscnVfc2l6ZTtcbi1cdGxvbmcgc2l6ZTtcbiBcbiBcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG4gXHRcdHJldHVybjtcbiBcbiBcdG16ID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7XG4tXHRscnVfc2l6ZSA9IFx1MDAyNm16LVx1MDAzZWxydV96b25lX3NpemVbemlkXVtscnVdO1xuLVxuLVx0aWYgKG5yX3BhZ2VzIFx1MDAzYyAwKVxuLVx0XHQqbHJ1X3NpemUgKz0gbnJfcGFnZXM7XG4tXG4tXHRzaXplID0gKmxydV9zaXplO1xuLVx0aWYgKFdBUk5fT05DRShzaXplIFx1MDAzYyAwLFxuLVx0XHRcIiVzKCVwLCAlZCwgJWxkKTogbHJ1X3NpemUgJWxkXFxuXCIsXG4tXHRcdF9fZnVuY19fLCBscnV2ZWMsIGxydSwgbnJfcGFnZXMsIHNpemUpKSB7XG4tXHRcdFZNX0JVR19PTigxKTtcbi1cdFx0KmxydV9zaXplID0gMDtcbi1cdH1cbi1cbi1cdGlmIChucl9wYWdlcyBcdTAwM2UgMClcbi1cdFx0KmxydV9zaXplICs9IG5yX3BhZ2VzO1xuK1x0bXotXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6aWRdW2xydV0gKz0gbnJfcGFnZXM7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuY1xuaW5kZXggMTViNDU4MzJiY2ZhNy4uYTM2OWQwYzk1YzM4NiAxMDA2NDRcbi0tLSBhL21tL21pZ3JhdGUuY1xuKysrIGIvbW0vbWlncmF0ZS5jXG5AQCAtNzc2LDggKzc3Niw5IEBAIHZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdGludCBjcHVwaWQ7XG4gXG4tXHRpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSlcbi1cdFx0Zm9saW9fc2V0X3JlZmVyZW5jZWQobmV3Zm9saW8pO1xuK1x0LyogQ29weSB0aGUgcmVmZXJlbmNlIHN0YXRlLCBpbmNsdWRpbmcgUEdfcmVmZXJlbmNlZCAqL1xuK1x0Zm9saW9fbWlncmF0ZV9scnVfcmVmcyhuZXdmb2xpbywgZm9saW8pO1xuK1xuIFx0aWYgKGZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKVxuIFx0XHRmb2xpb19tYXJrX3VwdG9kYXRlKG5ld2ZvbGlvKTtcbiBcdGlmIChmb2xpb190ZXN0X2NsZWFyX2FjdGl2ZShmb2xpbykpIHtcbkBAIC04MDcsNyArODA4LDYgQEAgdm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRpZiAoZm9saW9fdGVzdF9pZGxlKGZvbGlvKSlcbiBcdFx0Zm9saW9fc2V0X2lkbGUobmV3Zm9saW8pO1xuIFxuLVx0Zm9saW9fbWlncmF0ZV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7XG4gXHQvKlxuIFx0ICogQ29weSBOVU1BIGluZm9ybWF0aW9uIHRvIHRoZSBuZXcgcGFnZSwgdG8gcHJldmVudCBvdmVyLWVhZ2VyXG4gXHQgKiBmdXR1cmUgbWlncmF0aW9ucyBvZiB0aGlzIHNhbWUgcGFnZS5cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCAyNDVmNjhjNzViMjg5Li40MGQzZjFiNDhhNzRjIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtODYzLDE5ICs4NjMsMjIgQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuIFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSkge1xuIFx0XHQvKiBBY3RpdmF0ZSBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciBmaXJzdCB1c2FnZS4gKi9cbiBcdFx0aWYgKGlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkge1xuLVx0XHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7XG4rXHRcdFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xuK1x0XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHRcdH1cbiBcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuK1x0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXG4gXHQvKiBQcm9tb3RlIG9uIHNlY29uZCBhY2Nlc3MgKi9cbi1cdGlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgXHUwMDNlIDEpXG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7XG4tXHRlbHNlXG4rXHRpZiAoZm9saW9fbHJ1X3JlZnMoZm9saW8pIFx1MDAzZSAxKSB7XG4rXHRcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcbitcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbitcdH0gZWxzZSB7XG4gXHRcdGZvbGlvX21hcmtfYWNjZXNzZWQoZm9saW8pO1xuK1x0fVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuICNlbHNlXG5AQCAtMzIyMCw4ICszMjIzLDggQEAgc3RydWN0IGN0cmxfcG9zIHtcbiBcdGludCBnYWluO1xuIH07XG4gXG4tc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllciwgaW50IGdhaW4sXG4tXHRcdFx0ICBzdHJ1Y3QgY3RybF9wb3MgKnBvcylcbitzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyX21pbixcbitcdFx0XHQgIGludCB0aWVyX21heCwgaW50IGdhaW4sIHN0cnVjdCBjdHJsX3BvcyAqcG9zKVxuIHtcbiBcdGludCBpO1xuIFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5AQCAtMzIzMCw3ICszMjMzLDcgQEAgc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllciwgaW50IGdhaW4sXG4gXHRwb3MtXHUwMDNlZ2FpbiA9IGdhaW47XG4gXHRwb3MtXHUwMDNlcmVmYXVsdGVkID0gcG9zLVx1MDAzZXRvdGFsID0gMDtcbiBcbi1cdGZvciAoaSA9IHRpZXIgJSBNQVhfTlJfVElFUlM7IGkgXHUwMDNjPSBtaW4odGllciwgTUFYX05SX1RJRVJTIC0gMSk7IGkrKykge1xuK1x0Zm9yIChpID0gdGllcl9taW47IGkgXHUwMDNjPSB0aWVyX21heDsgaSsrKSB7XG4gXHRcdHBvcy1cdTAwM2VyZWZhdWx0ZWQgKz0gbHJ1Z2VuLVx1MDAzZWF2Z19yZWZhdWx0ZWRbdHlwZV1baV0gK1xuIFx0XHRcdFx0ICBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNmxydWdlbi1cdTAwM2VyZWZhdWx0ZWRbaGlzdF1bdHlwZV1baV0pO1xuIFx0XHRwb3MtXHUwMDNldG90YWwgKz0gbHJ1Z2VuLVx1MDAzZWF2Z190b3RhbFt0eXBlXVtpXSArXG5AQCAtMzI5MSwxMSArMzI5NCwxMSBAQCBzdGF0aWMgYm9vbCBwb3NpdGl2ZV9jdHJsX2VycihzdHJ1Y3QgY3RybF9wb3MgKnNwLCBzdHJ1Y3QgY3RybF9wb3MgKnB2KVxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gXG4gLyogcHJvbW90ZSBwYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzICovXG4tc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4rc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBpbnQgKnR5cGUsXG4rXHRcdFx0ICAgIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbi1cbi1cdFZNX1dBUk5fT05fT05DRShnZW4gXHUwMDNlPSBNQVhfTlJfR0VOUyk7XG4rXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuK1x0aW50IG9sZF9nZW47XG4gXG4gXHQvKlxuIFx0ICogU2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTLCBhbmQgYWN0aXZhdGUgZmlsZS1iYWNrZWRcbkBAIC0zMzA0LDMxICszMzA3LDM1IEBAIHN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hXG4gXHQgKi9cbiBcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHQgICAgIWlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkge1xuLVx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XG4rXHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XG4gXHRcdHJldHVybiAtMTtcbiBcdH1cbiBcbiBcdGRvIHtcbitcdFx0b2xkX2dlbiA9IGxydV9nZXRfZ2VuX2ZsYWdzKG9sZF9mbGFncyk7XG4rXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncztcbitcbiBcdFx0LyogbHJ1X2dlbl9kZWxfZm9saW8oKSBoYXMgaXNvbGF0ZWQgdGhpcyBwYWdlPyAqL1xuLVx0XHRpZiAoIShvbGRfZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykpXG4tXHRcdFx0cmV0dXJuIC0xO1xuK1x0XHRpZiAob2xkX2dlbiBcdTAwM2MgMClcbitcdFx0XHRicmVhaztcbiBcbi1cdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzIFx1MDAyNiB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTtcbi1cdFx0bmV3X2ZsYWdzIHw9ICgoZ2VuICsgMVVMKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRikgfCBCSVQoUEdfd29ya2luZ3NldCk7XG4tXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbitcdFx0bHJ1X3NldF9nZW5fZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCBuZXdfZ2VuKTtcbitcdFx0bHJ1X3NldF9yZWZzX2ZsYWdzKFx1MDAyNm5ld19mbGFncywgMCk7XG4rXHRcdG5ld19mbGFncyB8PSBCSVQoUEdfd29ya2luZ3NldCk7XG4rXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuIFxuLVx0cmV0dXJuICgob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4rXHQqdHlwZSA9IGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KFx1MDAyNm9sZF9mbGFncyk7XG4rXHRyZXR1cm4gb2xkX2dlbjtcbiB9XG4gXG4gc3RhdGljIGludCBfX2ZvbGlvX2luY19nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9nZW4sIGJvb2wgKmluY3JlYXNlZClcbiB7XG4tXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuK1x0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbiBcdGludCBuZXdfZ2VuO1xuIFxuLVx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCEob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spLCBmb2xpbyk7XG4tXG4gXHRkbyB7XG4tXHRcdG5ld19nZW4gPSAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuK1x0XHRuZXdfZ2VuID0gbHJ1X2dldF9nZW5fZmxhZ3Mob2xkX2ZsYWdzKTtcbitcbiBcdFx0LyogZm9saW9fdXBkYXRlX2dlbigpIGhhcyBwcm9tb3RlZCB0aGlzIHBhZ2U/ICovXG4gXHRcdGlmIChuZXdfZ2VuIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgbmV3X2dlbiAhPSBvbGRfZ2VuKSB7XG4gXHRcdFx0aWYgKGluY3JlYXNlZClcbkBAIC0zMzM2LDExICszMzQzLDEyIEBAIHN0YXRpYyBpbnQgX19mb2xpb19pbmNfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfZ2VuLCBib29sICppbmNyZWFzZWQpXG4gXHRcdFx0cmV0dXJuIG5ld19nZW47XG4gXHRcdH1cbiBcbitcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuIFx0XHRuZXdfZ2VuID0gKG9sZF9nZW4gKyAxKSAlIE1BWF9OUl9HRU5TO1xuIFxuLVx0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgXHUwMDI2IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpO1xuLVx0XHRuZXdfZmxhZ3MgfD0gKG5ld19nZW4gKyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuLVx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4rXHRcdGxydV9zZXRfZ2VuX2ZsYWdzKFx1MDAyNm5ld19mbGFncywgbmV3X2dlbik7XG4rXHRcdGxydV9zZXRfcmVmc19mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIDApO1xuK1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiBcbiBcdGlmIChpbmNyZWFzZWQpXG4gXHRcdCppbmNyZWFzZWQgPSB0cnVlO1xuQEAgLTMzNjIsOSArMzM3MCw4IEBAIHN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gfVxuIFxuIHN0YXRpYyB2b2lkIHVwZGF0ZV9iYXRjaF9zaXplKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tXHRcdFx0ICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuKVxuK1x0XHRcdCAgICAgIGludCBvbGRfZ2VuLCBpbnQgbmV3X2dlbiwgaW50IHR5cGUpXG4ge1xuLVx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG4gXHRpbnQgem9uZSA9IGZvbGlvX3pvbmVudW0oZm9saW8pO1xuIFx0aW50IGRlbHRhID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIFxuQEAgLTM1NTEsMjIgKzM1NTgsMjQgQEAgc3RhdGljIGJvb2wgc3VpdGFibGVfdG9fc2NhbihpbnQgdG90YWwsIGludCB5b3VuZylcbiB9XG4gXG4gc3RhdGljIHZvaWQgd2Fsa191cGRhdGVfZm9saW8oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBib29sIGRpcnR5KVxuK1x0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgZGlydHkpXG4ge1xuLVx0aW50IG9sZF9nZW47XG4rXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiwgdHlwZTtcbiBcbiBcdGlmICghZm9saW8pXG4gXHRcdHJldHVybjtcbiBcbitcdG5ld19nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKFJFQURfT05DRShscnV2ZWMtXHUwMDNlbHJ1Z2VuLm1heF9zZXEpKTtcbitcbiBcdGlmIChkaXJ0eSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIFx1MDAyNlx1MDAyNlxuIFx0ICAgICEoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAgICFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpKVxuIFx0XHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbiBcbiBcdGlmICh3YWxrKSB7XG4tXHRcdG9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpO1xuK1x0XHRvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgXHUwMDI2dHlwZSwgXHUwMDI2dm1hLVx1MDAzZWZsYWdzKTtcbiBcdFx0aWYgKG9sZF9nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXG4tXHRcdFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xuK1x0XHRcdHVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuLCB0eXBlKTtcbiBcdH0gZWxzZSBpZiAobHJ1X2dlbl9zZXRfcmVmcyhmb2xpbywgXHUwMDI2dm1hLVx1MDAzZWZsYWdzKSkge1xuIFx0XHRvbGRfZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7XG4gXHRcdGlmIChvbGRfZ2VuIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgb2xkX2dlbiAhPSBuZXdfZ2VuKVxuQEAgLTM1ODgsOCArMzU5Nyw2IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXHUwMDNlcHJpdmF0ZTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVx1MDAzZWxydXZlYyk7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdERFRklORV9NQVhfU0VRKHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xuIFx0dW5zaWduZWQgaW50IG5yO1xuIFx0cG1kX3QgcG1kdmFsO1xuIFxuQEAgLTM2NDAsNyArMzY0Nyw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAobGFzdCAhPSBmb2xpbykge1xuLVx0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLVx1MDAzZXZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC0zNjUzLDcgKzM2NjAsNyBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0d2Fsay1cdTAwM2VtbV9zdGF0c1tNTV9MRUFGX1lPVU5HXSArPSBucjtcbiBcdH1cbiBcbi1cdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCB3YWxrLVx1MDAzZWxydXZlYywgbGFzdCwgZGlydHkpO1xuIFx0bGFzdCA9IE5VTEw7XG4gXG4gXHRpZiAoaSBcdTAwM2MgUFRSU19QRVJfUFRFIFx1MDAyNlx1MDAyNiBnZXRfbmV4dF92bWEoUE1EX01BU0ssIFBBR0VfU0laRSwgYXJncywgXHUwMDI2c3RhcnQsIFx1MDAyNmVuZCkpXG5AQCAtMzY3Niw4ICszNjgzLDYgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcbiBcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVx1MDAzZXByaXZhdGU7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay1cdTAwM2VscnV2ZWMpO1xuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdCh3YWxrLVx1MDAzZWxydXZlYyk7XG4tXHRERUZJTkVfTUFYX1NFUSh3YWxrLVx1MDAzZWxydXZlYyk7XG4tXHRpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcbiBcbiBcdFZNX1dBUk5fT05fT05DRShwdWRfbGVhZigqcHVkKSk7XG4gXG5AQCAtMzczMSw3ICszNzM2LDcgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcbiBcdFx0XHRnb3RvIG5leHQ7XG4gXG4gXHRcdGlmIChsYXN0ICE9IGZvbGlvKSB7XG4tXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIHdhbGstXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXG4gXHRcdFx0bGFzdCA9IGZvbGlvO1xuIFx0XHRcdGRpcnR5ID0gZmFsc2U7XG5AQCAtMzc0NSw3ICszNzUwLDcgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcbiBcdFx0aSA9IGkgXHUwMDNlIE1JTl9MUlVfQkFUQ0ggPyAwIDogZmluZF9uZXh0X2JpdChiaXRtYXAsIE1JTl9MUlVfQkFUQ0gsIGkpICsgMTtcbiBcdH0gd2hpbGUgKGkgXHUwMDNjPSBNSU5fTFJVX0JBVENIKTtcbiBcbi1cdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4rXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIHdhbGstXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXG4gXHRsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTtcbiBcdHNwaW5fdW5sb2NrKHB0bCk7XG5AQCAtNDM1MSw4ICs0MzU2LDYgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGZvbGlvX3BnZGF0KGZvbGlvKTtcbiBcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcbiBcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZTtcbi1cdHVuc2lnbmVkIGxvbmcgbWF4X3NlcTtcbi1cdGludCBnZW47XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKHB2bXctXHUwMDNlcHRsKTtcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2xydShmb2xpbyksIGZvbGlvKTtcbkBAIC00Mzg5LDggKzQzOTIsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG4gXG4gXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xuIFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcbi1cdG1heF9zZXEgPSBSRUFEX09OQ0UoKGxydXZlYyktXHUwMDNlbHJ1Z2VuLm1heF9zZXEpO1xuLVx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcbiBcdG1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XG4gXG4gXHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xuQEAgLTQ0MjIsNyArNDQyMyw3IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKGxhc3QgIT0gZm9saW8pIHtcbi1cdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXG4gXHRcdFx0bGFzdCA9IGZvbGlvO1xuIFx0XHRcdGRpcnR5ID0gZmFsc2U7XG5AQCAtNDQzNCwxMyArNDQzNSwxNCBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG4gXHRcdHlvdW5nICs9IG5yO1xuIFx0fVxuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXG4gXHRsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTtcbiBcbiBcdC8qIGZlZWRiYWNrIGZyb20gcm1hcCB3YWxrZXJzIHRvIHBhZ2UgdGFibGUgd2Fsa2VycyAqL1xuIFx0aWYgKG1tX3N0YXRlIFx1MDAyNlx1MDAyNiBzdWl0YWJsZV90b19zY2FuKGksIHlvdW5nKSlcbi1cdFx0dXBkYXRlX2Jsb29tX2ZpbHRlcihtbV9zdGF0ZSwgbWF4X3NlcSwgcHZtdy1cdTAwM2VwbWQpO1xuK1x0XHR1cGRhdGVfYmxvb21fZmlsdGVyKG1tX3N0YXRlLCBSRUFEX09OQ0UobHJ1dmVjLVx1MDAzZWxydWdlbi5tYXhfc2VxKSxcbitcdFx0XHRcdCAgICBwdm13LVx1MDAzZXBtZCk7XG4gXG4gXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4gXG5AQCAtNDc4NSw3ICs0Nzg3LDcgQEAgc3RhdGljIGJvb2wgaXNvbGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2FcbiBcbiBcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqL1xuIFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKVxuLVx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIDApO1xuK1x0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuIFxuIFx0c3VjY2VzcyA9IGxydV9nZW5fZGVsX2ZvbGlvKGxydXZlYywgZm9saW8sIHRydWUpO1xuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFzdWNjZXNzLCBmb2xpbyk7XG5AQCAtNDg3OCw5ICs0ODgwLDkgQEAgc3RhdGljIGludCBnZXRfdGllcl9pZHgoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSlcbiBcdCAqIFRoaXMgdmFsdWUgaXMgY2hvc2VuIGJlY2F1c2UgYW55IG90aGVyIHRpZXIgd291bGQgaGF2ZSBhdCBsZWFzdCB0d2ljZVxuIFx0ICogYXMgbWFueSByZWZhdWx0cyBhcyB0aGUgZmlyc3QgdGllci5cbiBcdCAqL1xuLVx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIDAsIDIsIFx1MDAyNnNwKTtcbi1cdGZvciAodGllciA9IDE7IHRpZXIgXHUwMDNjIE1BWF9OUl9USUVSUzsgdGllcisrKSB7XG4tXHRcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0aWVyLCAzLCBcdTAwMjZwdik7XG4rXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NSU4sIDIsIFx1MDAyNnNwKTtcbitcdGZvciAodGllciA9IExSVV9USUVSX01JTiArIDE7IHRpZXIgXHUwMDNjPSBMUlVfVElFUl9NQVg7IHRpZXIrKykge1xuK1x0XHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdGllciwgdGllciwgMywgXHUwMDI2cHYpO1xuIFx0XHRpZiAoIXBvc2l0aXZlX2N0cmxfZXJyKFx1MDAyNnNwLCBcdTAwMjZwdikpXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG5AQCAtNDkwMSw4ICs0OTAzLDEwIEBAIHN0YXRpYyBpbnQgZ2V0X3R5cGVfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxuIFx0ICogQ29tcGFyZSB0aGUgc3VtIG9mIGFsbCB0aWVycyBvZiBhbm9uIHdpdGggdGhhdCBvZiBmaWxlIHRvIGRldGVybWluZVxuIFx0ICogd2hpY2ggdHlwZSB0byBzY2FuLlxuIFx0ICovXG4tXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBNQVhfTlJfVElFUlMsIHN3YXBwaW5lc3MsIFx1MDAyNnNwKTtcbi1cdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIE1BWF9OUl9USUVSUywgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCBcdTAwMjZwdik7XG4rXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCxcbitcdFx0ICAgICAgc3dhcHBpbmVzcywgXHUwMDI2c3ApO1xuK1x0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NQVgsXG4rXHRcdCAgICAgIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgXHUwMDI2cHYpO1xuIFxuIFx0cmV0dXJuIHBvc2l0aXZlX2N0cmxfZXJyKFx1MDAyNnNwLCBcdTAwMjZwdik7XG4gfVxuQEAgLTUwMTcsOCArNTAyMSwxMCBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0fVxuIFxuIFx0XHQvKiBkb24ndCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqL1xuLVx0XHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pXG4tXHRcdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX2FjdGl2ZSkpO1xuK1x0XHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pIHtcbitcdFx0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuK1x0XHRcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xuK1x0XHR9XG4gXHR9XG4gXG4gXHRtb3ZlX2ZvbGlvc190b19scnUoXHUwMDI2bGlzdCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjoyNDoyNi45OTk3MTkwMVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDczNzY1NzA2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gSnVzdGlmaWNhdGlvbiBBbmFseXNpcyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgc2VlIGlmIHdlIG5lZWQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIG9uIHRvcCBvZiBvdXIgc3RhbmRhcmQgS0FTQU4gZnV6emluZy4gTXkgZm9jdXMsIGFzIGFsd2F5cywgaXMgb24gcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIHdyaXRlcyB0aGF0IGNvdWxkIGJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlLlxuXG5GaXJzdCwgSSBzZWUgY2hhbmdlcyBpbiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLCBzcGVjaWZpY2FsbHkgY2hhbmdpbmcgYW4gYXJyYXkncyB0eXBlIGluIGBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZWAuIFRoZXJlJ3MgYWxzbyBhIGNoZWNrIGFuZCByZXR1cm4gb2YgYDBgIGlmIGEgdmFsdWUgaXMgbmVnYXRpdmUuIFRoaXMgZG9lc24ndCBzZWVtIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBkYXRhIHNlbnQgdG8gdXNlcnNwYWNlLCBzbyBJJ20gbm90IG92ZXJseSBjb25jZXJuZWQgaGVyZS5cblxuVGhlIGNoYW5nZXMgaW4gYGluY2x1ZGUvbGludXgvbW1faW5saW5lLmhgLCBkZWZpbmluZyBgZm9saW9fZmxhZ3NfaXNfZmlsZV9scnVgIGFuZCByZWZhY3RvcmluZyBMUlUgZ2VuZXJhdGlvbiBhbmQgZmxhZ3MgbWFuaXB1bGF0aW9uLCBhcmUgaW50ZXJlc3RpbmcgYnV0IGxpa2VseSBpbnRlcm5hbC4gIFRoZXkgbW9zdGx5IGRlYWwgd2l0aCBiaXQgbWFuaXB1bGF0aW9uIGFuZCBpbnRlcm5hbCBzdHJ1Y3QgZmxhZyBzZXR0aW5ncy4gU3RpbGwsIEknbGwgbmVlZCB0byBrZWVwIHRoaXMgaW4gbWluZCBhcyBJIGxvb2sgYXQgdGhlIGxhcmdlciBjYWxsIGNoYWlucywgYnV0IHRoaXMgbG9va3MgbGlrZSBhbiBpbnRlcm5hbCByZWZhY3Rvci5cblxuYGluY2x1ZGUvbGludXgvbW16b25lLmhgIGp1c3QgZGVmaW5lcyBzb21lIGNvbnN0YW50cywgc28gbm8gaW1tZWRpYXRlIHJlZCBmbGFncyB0aGVyZS5cblxuSW4gYG1tL2ZvbGlvLmNgLCBgbHJ1X2dlbl9pbmNfcmVmc2AgYW5kIGBscnVfZ2VuX2NsZWFyX3JlZnNgIHV0aWxpemUgdGhlIGZsYWcgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucy4gQWdhaW4sIHRoZSBwb3RlbnRpYWwgcHJvYmxlbSBkZXBlbmRzIG9uIGlmIHRoZSBmbGFncyBhcmUgaW5pdGlhbGl6ZWQuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhlIHVzZSBvZiB0aG9zZSBmdW5jdGlvbnMuXG5cbmBtbS9tZW1jb250cm9sLmNgIHNpbXBsaWZpZXMgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYC4gVGhpcyAqY291bGQqIGJlIGEgdmVjdG9yIGZvciB1bmluaXRpYWxpemVkIGRhdGEsIGJ1dCBpdCBzZWVtcyB0byBkaXJlY3RseSB1cGRhdGUgYSBrbm93biBsb2NhdGlvbi4gIEknbGwgc3RpbGwga2VlcCBhbiBleWUgb24gdGhpcyBhcyBJIGxvb2sgZm9yIHVwc3RyZWFtIGRhdGEuXG5cblRoZSBgbW0vbWlncmF0ZS5jYCBjaGFuZ2UsIGBmb2xpb19taWdyYXRlX2xydV9yZWZzYCwgaXMgYSByZWZhY3RvciBvZiB0aGUgYGZvbGlvX21pZ3JhdGVfcmVmc2AgZnVuY3Rpb24gYW5kIHNob3VsZCBiZSBzYWZlLlxuXG5GaW5hbGx5LCB3ZSdyZSBhdCBgbW0vdm1zY2FuLmNgLiAgVGhlIHNpZ25hdHVyZSBjaGFuZ2Ugb2YgYGZvbGlvX3VwZGF0ZV9nZW5gIGFuZCBhIG5ldyBvdXQtcGFyYW1ldGVyIGBpbnQgKnR5cGVgIGlzIHdoYXQgaGFzIG15IGF0dGVudGlvbiEgIEkgbmVlZCB0byB2ZXJpZnkgdGhlIGluaXRpYWxpemF0aW9uIG9mIGAqdHlwZWAuXG5cbkkgZG92ZSBpbnRvIGBmb2xpb191cGRhdGVfZ2VuYCBhbmQgZm91bmQgYSBjb25kaXRpb25hbCByZXR1cm4gd2hlcmUgYCp0eXBlYCBtaWdodCBub3QgYmUgc2V0OiB0aGUgaW5pdGlhbCBgaWZgIHN0YXRlbWVudC4gQnV0IEkgdHJhY2VkIGl0IGJhY2suICBJZiB0aGUgZmlyc3QgY2hlY2sgcmV0dXJucyBgLTFgLCBpdCBzZXRzIHRoZSByZWZzIGFuZCByZXR1cm5zIGAtMWAuIFRoZSBgd2Fsa191cGRhdGVfZm9saW9gIGNhbGxlciB3aWxsICpub3QqIHVzZSBgdHlwZWAuICBIb3dldmVyLCBpZiB0aGUgYGlmYCBjaGVjayBkb2VzICpub3QqIGhhcHBlbiwgYHR5cGVgIGlzIEFMV0FZUyB3cml0dGVuIHRvIGJlY2F1c2Ugb2YgdGhlIGxvZ2ljIHdpdGhpbiB0aGUgYGRvLi4ud2hpbGVgIGxvb3AgYW5kIHRoZSByZXR1cm4uICBTbywgaW4gYWxsIGNhc2VzIGB0eXBlYCBpcyBzZXQuXG5cbkZ1cnRoZXJtb3JlLCBgdHlwZWAgaXMgb25seSAqdXNlZCogaW4gYHdhbGtfdXBkYXRlX2ZvbGlvYCB3aGVuIGBvbGRfZ2VuIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgb2xkX2dlbiAhPSBuZXdfZ2VuYC4gIEluIHRoaXMgY2FzZSwgYHR5cGVgIGlzIGd1YXJhbnRlZWQgdG8gaGF2ZSBiZWVuIHNldCB3aGVuIGNhbGxpbmcgYHVwZGF0ZV9iYXRjaF9zaXplYC5cblxuR2l2ZW4gbXkgYW5hbHlzaXMsIEkgYW0gbm90IHNlZWluZyBhbnkgY2xlYXIgS01TQU4tdHJpZ2dlcmluZyBpc3N1ZXMgaGVyZS4gTm8gb2J2aW91cyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHMsIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlIG5ldyBjb2RlIGRvZXMgbm90IHNlZW0gdG8gaW50cm9kdWNlIG5ldyBwYXRocyB0aGF0IGNvdWxkIHRyaWdnZXIgaXNzdWVzLlxuXG5UaGVyZWZvcmUsIGJhc2VkIG9uIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBwYXRjaCBhbmQgdGhlIHJ1bGUsIEkgYmVsaWV2ZSB0aGF0IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkIGluIGFkZGl0aW9uIHRvIG91ciBleGlzdGluZyBLQVNBTiBmdXp6aW5nIGZvciB0aGlzIHBhdGNoLiBJIHJlY29tbWVuZCBwcm9jZWVkaW5nIHdpdGggS0FTQU4gZnV6emluZyBhcyB1c3VhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1ODYsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDk2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6MjQ6MzcuNzM3MzgwMTk5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc4ODE2MTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX3VwZGF0ZV9nZW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD0zMDE9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydV9nZW5fZm9saW9fc2VxKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMzExLVxcdCAqIHwgQWNjZXNzZWQgdGhyb3VnaCBwYWdlIHRhYmxlcyBhbmQgIHwgQWNjZXNzZWQgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzIHxcXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjMxMjpcXHQgKiB8IHByb21vdGVkIGJ5IGZvbGlvX3VwZGF0ZV9nZW4oKSAgICB8IGFuZCBwcm90ZWN0ZWQgYnkgZm9saW9faW5jX2dlbigpICB8XFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0zMTMtXFx0ICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD00Mjc9ZW51bSBscnV2ZWNfZmxhZ3Mge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC01MTYtICpcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjUxNzogKiBGb3IgZm9saW9zIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggcGFnZSB0YWJsZXMsIGZvbGlvX3VwZGF0ZV9nZW4oKVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNTE4LSAqIGZyb20gYSBwYWdlIHRhYmxlIHdhbGsgb3IgbHJ1X2dlbl9zZXRfcmVmcygpIGZyb20gYSBybWFwIHdhbGsgc2V0c1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC01MjAtICogVGhlcmVhZnRlciwgdGhvc2UgdHdvIHBhdGhzIHNldCBQR193b3JraW5nc2V0IGFuZCBwcm9tb3RlIGZvbGlvcyB0byB0aGVcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjUyMTogKiB5b3VuZ2VzdCBnZW5lcmF0aW9uLiBMaWtlIGZvbGlvX2luY19nZW4oKSwgZm9saW9fdXBkYXRlX2dlbigpIGFsc28gY2xlYXJzXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC01MjItICogUEdfcmVmZXJlbmNlZC4gTm90ZSB0aGF0IGZvciB0aGlzIGNhc2UsIExSVV9SRUZTX01BU0sgaXMgbm90IHVzZWQuXFxuLS1cXG5tbS92bXNjYW4uYz04NDc9ZW51bSBmb2xpb19yZWZlcmVuY2VzIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTg1Ny0gKiB3aXRoIFBHX2FjdGl2ZSBzZXQuIEluIGNvbnRyYXN0LCB0aGUgYWdpbmcgKHBhZ2UgdGFibGUgd2FsaykgcGF0aCB1c2VzXFxubW0vdm1zY2FuLmM6ODU4OiAqIGZvbGlvX3VwZGF0ZV9nZW4oKS5cXG5tbS92bXNjYW4uYy04NTktICovXFxuLS1cXG5tbS92bXNjYW4uYz0zMjgxPXN0YXRpYyBib29sIHBvc2l0aXZlX2N0cmxfZXJyKHN0cnVjdCBjdHJsX3BvcyAqc3AsIHN0cnVjdCBjdHJsX3BvcyAqcHYpXFxuLS1cXG5tbS92bXNjYW4uYy0zMjk2LS8qIHByb21vdGUgcGFnZXMgYWNjZXNzZWQgdGhyb3VnaCBwYWdlIHRhYmxlcyAqL1xcbm1tL3Ztc2Nhbi5jOjMyOTc6c3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBpbnQgKnR5cGUsXFxubW0vdm1zY2FuLmMtMzI5OC1cXHRcXHRcXHQgICAgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTMzMzE9c3RhdGljIGludCBfX2ZvbGlvX2luY19nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9nZW4sIGJvb2wgKmluY3JlYXNlZClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMzMzgtXFxubW0vdm1zY2FuLmM6MzMzOTpcXHRcXHQvKiBmb2xpb191cGRhdGVfZ2VuKCkgaGFzIHByb21vdGVkIHRoaXMgcGFnZT8gKi9cXG5tbS92bXNjYW4uYy0zMzQwLVxcdFxcdGlmIChuZXdfZ2VuIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgbmV3X2dlbiAhPSBvbGRfZ2VuKSB7XFxuLS1cXG5tbS92bXNjYW4uYz0zNTYwPXN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vdm1zY2FuLmMtMzU3NS1cXHRpZiAod2Fsaykge1xcbm1tL3Ztc2Nhbi5jOjM1NzY6XFx0XFx0b2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sIFxcdTAwMjZ0eXBlLCBcXHUwMDI2dm1hLVxcdTAwM2VmbGFncyk7XFxubW0vdm1zY2FuLmMtMzU3Ny1cXHRcXHRpZiAob2xkX2dlbiBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IG9sZF9nZW4gIT0gbmV3X2dlbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMTY6MjQ6MzkuMzE2MjA0MDQ0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUxMzI1MTk2MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGByZWFkX2N0cmxfcG9zYCBhbmQgaXRzIFVzYWdlKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biBob3cgYHJlYWRfY3RybF9wb3NgIGlzIGJlaW5nIHVzZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBpbiB0aGUgY29udGV4dCBvZiB0aGVzZSBmdW5jdGlvbnMuIEZyb20gdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2UgYHJlYWRfY3RybF9wb3NgIGdldHMgY2FsbGVkIGluIHR3byBrZXkgZnVuY3Rpb25zOiBgZ2V0X3RpZXJfaWR4YCBhbmQgYGdldF90eXBlX3RvX3NjYW5gLiBcblxuSW4gYGdldF90aWVyX2lkeGAsIGl0J3MgY2FsbGVkIHR3aWNlLiBUaGUgZmlyc3QgY2FsbCBzZXRzIHVwIGFuIGluaXRpYWwgcG9zaXRpb24sIHVzaW5nIGBMUlVfVElFUl9NSU5gLiBUaGUgc2Vjb25kIGNhbGwgaXRlcmF0ZXMgdGhyb3VnaCB0aWVycywgZnJvbSBgTFJVX1RJRVJfTUlOICsgMWAgdXAgdG8gYExSVV9USUVSX01BWGAsIGFuZCBpdCBsb29rcyBsaWtlIGEgY29tcGFyaXNvbiBpcyBtYWRlIHdpdGggdGhlIGhlbHAgb2YgYHBvc2l0aXZlX2N0cmxfZXJyYCwgd2hpY2ggSSdsbCBuZWVkIHRvIGNoZWNrIGFzIHdlbGwuXG5cbkluIGBnZXRfdHlwZV90b19zY2FuYCwgYHJlYWRfY3RybF9wb3NgIGlzIGNhbGxlZCBmb3IgYm90aCBgTFJVX0dFTl9BTk9OYCBhbmQgYExSVV9HRU5fRklMRWAsIHdpdGggc29tZSBsb2dpYyByZWxhdGVkIHRvIGBzd2FwcGluZXNzYC4gVGhpcyBpcyB3aGVyZSB0aGUgZnVuY3Rpb24gaXMgZmV0Y2hpbmcgZGF0YSBmb3IgZGlmZmVyZW50IHR5cGVzIG9mIExSVSBlbnRyaWVzLlxuXG5Ob3csIGZvY3VzaW5nIG9uIHRoZSBgcmVhZF9jdHJsX3Bvc2AgZnVuY3Rpb24gaXRzZWxmLiBJdCB0YWtlcyBhIGBzdHJ1Y3QgbHJ1dmVjYCwgYW4gaW50ZWdlciBgdHlwZWAsIGFuZCB0d28gdGllcnMgYXMgaW5wdXRzLCBhbmQgYWxzbyBhIGdhaW4gdmFsdWUuIEl0IHRoZW4gaXRlcmF0ZXMgdGhyb3VnaCB0aGUgdGllcnMgZnJvbSBgdGllcl9taW5gIHRvIGB0aWVyX21heGAuIFdpdGhpbiB0aGUgbG9vcCwgaXQgY2FsY3VsYXRlcyBhIHN1bSBvZiBgcmVmYXVsdGVkYCBhbmQgYHRvdGFsYCB2YWx1ZXMsIHdoaWNoIGFyZSB1c2VkIHRvIHVwZGF0ZSB0aGUgYHBvc2Agc3RydWN0dXJlLiBgcG9zYCBpcyBhIGBzdHJ1Y3QgY3RybF9wb3NgIHdoaWNoLCBpbXBvcnRhbnRseSwgaXMgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBpbiB0aGUgY2FsbGluZyBmdW5jdGlvbnMuIFRoZSBjb2RlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZXMgYHBvcy1cdTAwM2VnYWluYCwgYHBvcy1cdTAwM2VyZWZhdWx0ZWRgLCBhbmQgYHBvcy1cdTAwM2V0b3RhbGAgd2l0aGluIGByZWFkX2N0cmxfcG9zYC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGF0IGBnYWluYCBwYXJhbWV0ZXIgYW5kIGhvdyBpdCBpbmZsdWVuY2VzIHRoZSBgY3RybF9wb3NgIHN0cnVjdC5cblxuU28sIEkgbmVlZCB0byBjaGVjayBpZiB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgZWxzZXdoZXJlLCBhbmQgSSBzaG91bGQgcmVhbGx5IGxvb2sgYXQgaG93IHRoZSBgY3RybF9wb3NgIHN0cnVjdCBpcyBiZWluZyB1c2VkIGFmdGVyIHRoZSBjYWxscyB0byBgcmVhZF9jdHJsX3Bvc2AgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgZGF0YSBtZWFucyBpbiB0aGUgbGFyZ2VyIGNvbnRleHQuIEFsc28sIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgYGxydV9oaXN0X2Zyb21fc2VxYCBkb2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTI4MCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjoyNDo0NC40NDg3MjU4OTdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjI0ODM5MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVhZF9jdHJsX3Bvc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz0zMjIwPXN0cnVjdCBjdHJsX3BvcyB7XFxuLS1cXG5tbS92bXNjYW4uYy0zMjI1LVxcbm1tL3Ztc2Nhbi5jOjMyMjY6c3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllcl9taW4sXFxubW0vdm1zY2FuLmMtMzIyNy1cXHRcXHRcXHQgIGludCB0aWVyX21heCwgaW50IGdhaW4sIHN0cnVjdCBjdHJsX3BvcyAqcG9zKVxcbi0tXFxubW0vdm1zY2FuLmM9NDg3Mz1zdGF0aWMgaW50IGdldF90aWVyX2lkeChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKVxcbi0tXFxubW0vdm1zY2FuLmMtNDg4Mi1cXHQgKi9cXG5tbS92bXNjYW4uYzo0ODgzOlxcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01JTiwgMiwgXFx1MDAyNnNwKTtcXG5tbS92bXNjYW4uYy00ODg0LVxcdGZvciAodGllciA9IExSVV9USUVSX01JTiArIDE7IHRpZXIgXFx1MDAzYz0gTFJVX1RJRVJfTUFYOyB0aWVyKyspIHtcXG5tbS92bXNjYW4uYzo0ODg1OlxcdFxcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0aWVyLCB0aWVyLCAzLCBcXHUwMDI2cHYpO1xcbm1tL3Ztc2Nhbi5jLTQ4ODYtXFx0XFx0aWYgKCFwb3NpdGl2ZV9jdHJsX2VycihcXHUwMDI2c3AsIFxcdTAwMjZwdikpXFxuLS1cXG5tbS92bXNjYW4uYz00ODkzPXN0YXRpYyBpbnQgZ2V0X3R5cGVfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxcbi0tXFxubW0vdm1zY2FuLmMtNDkwNS1cXHQgKi9cXG5tbS92bXNjYW4uYzo0OTA2OlxcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUFYLFxcbm1tL3Ztc2Nhbi5jLTQ5MDctXFx0XFx0ICAgICAgc3dhcHBpbmVzcywgXFx1MDAyNnNwKTtcXG5tbS92bXNjYW4uYzo0OTA4OlxcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUFYLFxcbm1tL3Ztc2Nhbi5jLTQ5MDktXFx0XFx0ICAgICAgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCBcXHUwMDI2cHYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQxNjoyNDo0Ni4yNzEyMTYyOTNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDk0NTg1OTU1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTFJVIFJlZmVyZW5jZSBNaWdyYXRpb24gYW5kIE1lbW9yeSBDZ3JvdXAgTFJVIFNpemUgVXBkYXRlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGhvdyBMUlUgcmVmZXJlbmNlcyBhcmUgaGFuZGxlZCBkdXJpbmcgZm9saW8gbWlncmF0aW9uIGFuZCBob3cgdGhlc2UgdXBkYXRlcyBpbnRlcmFjdCB3aXRoIG1lbW9yeSBjZ3JvdXAgTFJVIHNpemUgdHJhY2tpbmcuIEZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGBmb2xpb19taWdyYXRlX2xydV9yZWZzYCBmdW5jdGlvbi4gSSBzZWUgaW4gYGluY2x1ZGUvbGludXgvbW1faW5saW5lLmhgIHRoYXQgdGhlcmUncyBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBJZiBgQ09ORklHX0xSVV9HRU5gIGlzIGRlZmluZWQsIHRoZSBmdW5jdGlvbiBzaW1wbHkgY29waWVzIHRoZSBMUlUgcmVmZXJlbmNlIGJpdHMgZGlyZWN0bHkuICBIb3dldmVyLCBpZiBgQ09ORklHX0xSVV9HRU5gIGlzICpub3QqIGRlZmluZWQsIGl0IHNlZW1zIHRvIG9ubHkgY29weSB0aGUgYFBHX3JlZmVyZW5jZWRgIGJpdCwgc3VnZ2VzdGluZyBhbiBvbGRlciBhcHByb2FjaC4gVGhlIGBCVUlMRF9CVUdfT05gIGVuc3VyZXMgbm8gb3ZlcmxhcCBvZiB0aGUgbWFzay4gTm93LCBsb29raW5nIGF0IGBtbS9taWdyYXRlLmNgLCBgZm9saW9fbWlncmF0ZV9mbGFnc2AgY2FsbHMgYGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnNgIHRvIHBlcmZvcm0gdGhlIGFjdHVhbCBjb3B5aW5nIG9mIHRoaXMgcmVmZXJlbmNlZCBzdGF0ZSBkdXJpbmcgZm9saW8gbWlncmF0aW9uLiBUaGlzIGlzIGVzc2VudGlhbCBmb3IgbWFpbnRhaW5pbmcgdGhlIGNvcnJlY3QgTFJVIHN0YXRlIGFmdGVyIGEgcGFnZSBtb3ZlLlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCBtZW1vcnkgY2dyb3VwIExSVSBhY2NvdW50aW5nLiBJIGhhdmUgdG8gbG9vayBhdCBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgIGFuZCBgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZWAuIFRoZXNlIGZ1bmN0aW9ucyBzZWVtIHRvIGJlIGNvcmUgdG8gdHJhY2tpbmcgdGhlIHNpemUgb2YgdGhlIExSVSBsaXN0cyB3aXRoaW4gZWFjaCBtZW1vcnkgY2dyb3VwLiBUaGUgYG1lbV9jZ3JvdXBfcGVyX25vZGVgIHN0cnVjdHVyZSwgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLCBjb250YWlucyB0aGUgYGxydV96b25lX3NpemVgIGFycmF5IHdoaWNoIGFwcGVhcnMgdG8gdHJhY2sgdGhlIHNpemUgb2YgZWFjaCBMUlUgbGlzdCwgcGVyIHpvbmUsIHdpdGhpbiBhIG1lbW9yeSBjZ3JvdXAgbm9kZS4gIGBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplYCByZWFkcyB0aGlzIGFycmF5LiBJdCB1c2VzIGBSRUFEX09OQ0VgIGZvciBhdG9taWMgcmVhZHMgdG8gcHJldmVudCBpc3N1ZXMgd2l0aCBjb25jdXJyZW5jeSBhbmQgdGhlIGBXQVJOX09OX09OQ0VgIG9mZmVycyBhbiBleHRyYSBzYWZlZ3VhcmQgc2hvdWxkIHRoZSBzaXplIHR1cm4gbmVnYXRpdmUuIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgbW9kaWZpZXMgdGhpcyBjb3VudGVyLCBhZGRpbmcgb3Igc3VidHJhY3RpbmcgcGFnZSBjb3VudHMsIGFuZCBoYXMgYSBndWFyZCBhZ2FpbnN0IGRpc2FibGVkIG1lbW9yeSBjZ3JvdXBzLlxuXG5GaW5hbGx5LCBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiBgZm9saW9fZmxhZ3NgIGlzIGEgc3RhbmRhcmQgaW5saW5lIGZ1bmN0aW9uIHdpdGhpbiB0aGUga2VybmVsLiBJJ2xsIHVzZSBgZ3JlcGAgdG8gcXVpY2tseSBjb25maXJtIHRoaXMsIGFzIEkgZXhwZWN0IGl0IHdpbGwgYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2OTI3LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjI0OjUxLjIxNzA3ODgzNloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYzNjE5ODY0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb2xpb19mbGFnc1xcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvc2gvbW0vY2FjaGUtc2g0LmM9MjE0PXN0YXRpYyB2b2lkIHNoNF9mbHVzaF9jYWNoZV9wYWdlKHZvaWQgKmFyZ3MpXFxuLS1cXG5hcmNoL3NoL21tL2NhY2hlLXNoNC5jLTI0OS1cXHRcXHRtYXBfY29oZXJlbnQgPSAoY3VycmVudF9jcHVfZGF0YS5kY2FjaGUubl9hbGlhc2VzIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC9zaC9tbS9jYWNoZS1zaDQuYzoyNTA6XFx0XFx0XFx0dGVzdF9iaXQoUEdfZGNhY2hlX2NsZWFuLCBmb2xpb19mbGFncyhmb2xpbywgMCkpIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC9zaC9tbS9jYWNoZS1zaDQuYy0yNTEtXFx0XFx0XFx0Zm9saW9fbWFwcGVkKGZvbGlvKSk7XFxuLS1cXG5hcmNoL3h0ZW5zYS9tbS9jYWNoZS5jPTg4PXZvaWQgY2xlYXJfdXNlcl9oaWdocGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyB2YWRkcilcXG4tLVxcbmFyY2gveHRlbnNhL21tL2NhY2hlLmMtOTUtXFx0a21hcF9pbnZhbGlkYXRlX2NvaGVyZW50KHBhZ2UsIHZhZGRyKTtcXG5hcmNoL3h0ZW5zYS9tbS9jYWNoZS5jOjk2OlxcdHNldF9iaXQoUEdfYXJjaF8xLCBmb2xpb19mbGFncyhmb2xpbywgMCkpO1xcbmFyY2gveHRlbnNhL21tL2NhY2hlLmMtOTctXFx0Y2xlYXJfcGFnZV9hbGlhcyhrdmFkZHIsIHBhZGRyKTtcXG4tLVxcbmFyY2gveHRlbnNhL21tL2NhY2hlLmM9MTAyPXZvaWQgY29weV91c2VyX2hpZ2hwYWdlKHN0cnVjdCBwYWdlICpkc3QsIHN0cnVjdCBwYWdlICpzcmMsXFxuLS1cXG5hcmNoL3h0ZW5zYS9tbS9jYWNoZS5jLTExMy1cXHRrbWFwX2ludmFsaWRhdGVfY29oZXJlbnQoZHN0LCB2YWRkcik7XFxuYXJjaC94dGVuc2EvbW0vY2FjaGUuYzoxMTQ6XFx0c2V0X2JpdChQR19hcmNoXzEsIGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XFxuYXJjaC94dGVuc2EvbW0vY2FjaGUuYy0xMTUtXFx0Y29weV9wYWdlX2FsaWFzKGRzdF92YWRkciwgc3JjX3ZhZGRyLCBkc3RfcGFkZHIsIHNyY19wYWRkcik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTIyNT1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMjI2LXtcXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjIyNzpcXHRyZXR1cm4gbHJ1X2dldF9yZWZzX2ZsYWdzKFJFQURfT05DRSgqY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKSk7XFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0yMjgtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD0yMzA9c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgcmVmcylcXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTIzMS17XFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDoyMzI6XFx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTIzMy1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMjM2LVxcdFxcdGxydV9zZXRfcmVmc19mbGFncyhcXHUwMDI2bmV3X2ZsYWdzLCByZWZzKTtcXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjIzNzpcXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTIzOC19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTI0MD1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfZ2VuKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0yNDEte1xcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6MjQyOlxcdHJldHVybiBscnVfZ2V0X2dlbl9mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpO1xcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMjQzLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg9MzM1PXN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2FkZF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcmVjbGFpbWluZylcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMzUyLVxcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBNSU5fTlJfR0VOUyBhYm91dCBQR19hY3RpdmUgKi9cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjM1MzpcXHRzZXRfbWFza19iaXRzKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgTFJVX0dFTl9NQVNLIHwgQklUKFBHX2FjdGl2ZSksIGZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTM1NC1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg9MzY1PXN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcmVjbGFpbWluZylcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMzc3LVxcdGZsYWdzID0gIXJlY2xhaW1pbmcgXFx1MDAyNlxcdTAwMjYgbHJ1X2dlbl9pc19hY3RpdmUobHJ1dmVjLCBnZW4pID8gQklUKFBHX2FjdGl2ZSkgOiAwO1xcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6Mzc4OlxcdGZsYWdzID0gc2V0X21hc2tfYml0cyhmb2xpb19mbGFncyhmb2xpbywgMCksIExSVV9HRU5fTUFTSywgZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMzc5LVxcdGdlbiA9ICgoZmxhZ3MgXFx1MDAyNiBMUlVfR0VOX01BU0spIFxcdTAwM2VcXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTMzNT1zdGF0aWMgaW5saW5lIHZvaWQgcGFnZV9pbml0X3BvaXNvbihzdHJ1Y3QgcGFnZSAqcGFnZSwgc2l6ZV90IHNpemUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0zMzktXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6MzQwOnN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nICpjb25zdF9mb2xpb19mbGFncyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTM0MS1cXHRcXHR1bnNpZ25lZCBuKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtMzQ5LVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjM1MDpzdGF0aWMgdW5zaWduZWQgbG9uZyAqZm9saW9fZmxhZ3Moc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgbilcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC0zNTEte1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9NDExPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBmb2xpb190ZXN0XyMjbmFtZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKSBcXFxcXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6NDEyOnsgcmV0dXJuIHRlc3RfYml0KFBHXyMjbmFtZSwgY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIHBhZ2UpKTsgfVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTQxMy1cXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTQxNT1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgZm9saW9fc2V0XyMjbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo0MTY6eyBzZXRfYml0KFBHXyMjbmFtZSwgZm9saW9fZmxhZ3MoZm9saW8sIHBhZ2UpKTsgfVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTQxNy1cXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTQxOT1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgZm9saW9fY2xlYXJfIyNuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pXFx0XFxcXFxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjQyMDp7IGNsZWFyX2JpdChQR18jI25hbWUsIGZvbGlvX2ZsYWdzKGZvbGlvLCBwYWdlKSk7IH1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC00MjEtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD00MjM9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fZm9saW9fc2V0XyMjbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo0MjQ6eyBfX3NldF9iaXQoUEdfIyNuYW1lLCBmb2xpb19mbGFncyhmb2xpbywgcGFnZSkpOyB9XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNDI1LVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg9NDI3PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX2ZvbGlvX2NsZWFyXyMjbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo0Mjg6eyBfX2NsZWFyX2JpdChQR18jI25hbWUsIGZvbGlvX2ZsYWdzKGZvbGlvLCBwYWdlKSk7IH1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC00MjktXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD00MzE9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGZvbGlvX3Rlc3Rfc2V0XyMjbmFtZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo0MzI6eyByZXR1cm4gdGVzdF9hbmRfc2V0X2JpdChQR18jI25hbWUsIGZvbGlvX2ZsYWdzKGZvbGlvLCBwYWdlKSk7IH1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC00MzMtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD00MzU9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGZvbGlvX3Rlc3RfY2xlYXJfIyNuYW1lKHN0cnVjdCBmb2xpbyAqZm9saW8pIFxcXFxcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo0MzY6eyByZXR1cm4gdGVzdF9hbmRfY2xlYXJfYml0KFBHXyMjbmFtZSwgZm9saW9fZmxhZ3MoZm9saW8sIHBhZ2UpKTsgfVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTQzNy1cXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTYyND1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgZm9saW9fdGVzdF9zd2FwY2FjaGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTYyNi1cXHRyZXR1cm4gZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjYyNzpcXHRcXHRcXHR0ZXN0X2JpdChQR19zd2FwY2FjaGUsIGNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNjI4LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTc2Nz1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9feG9yX2ZsYWdzX2hhc193YWl0ZXJzKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC03Njkte1xcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oOjc3MDpcXHRyZXR1cm4geG9yX3VubG9ja19pc19uZWdhdGl2ZV9ieXRlKG1hc2ssIGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNzcxLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTc4Mz1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fdGVzdF91cHRvZGF0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTc4NC17XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6Nzg1OlxcdGJvb2wgcmV0ID0gdGVzdF9iaXQoUEdfdXB0b2RhdGUsIGNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtNzg2LVxcdC8qXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD04MDU9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fZm9saW9fbWFya191cHRvZGF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtODA3LVxcdHNtcF93bWIoKTtcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo4MDg6XFx0X19zZXRfYml0KFBHX3VwdG9kYXRlLCBmb2xpb19mbGFncyhmb2xpbywgMCkpO1xcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTgwOS19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaD04MTE9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGZvbGlvX21hcmtfdXB0b2RhdGUoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oLTgxOC1cXHRzbXBfd21iKCk7XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmg6ODE5OlxcdHNldF9iaXQoUEdfdXB0b2RhdGUsIGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtODIwLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oPTg0MD1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgZm9saW9fdGVzdF9oZWFkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgtODQxLXtcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaDo4NDI6XFx0cmV0dXJuIHRlc3RfYml0KFBHX2hlYWQsIGNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCBGT0xJT19QRl9BTlkpKTtcXG5pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaC04NDMtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmg9MTE4MD1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fdHJ5bG9jayhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oLTExODEte1xcbmluY2x1ZGUvbGludXgvcGFnZW1hcC5oOjExODI6XFx0cmV0dXJuIGxpa2VseSghdGVzdF9hbmRfc2V0X2JpdF9sb2NrKFBHX2xvY2tlZCwgZm9saW9fZmxhZ3MoZm9saW8sIDApKSk7XFxuaW5jbHVkZS9saW51eC9wYWdlbWFwLmgtMTE4My19XFxuLS1cXG5tbS9maWxlbWFwLmM9MTI1MD1zdGF0aWMgaW5saW5lIGludCBmb2xpb193YWl0X2JpdF9jb21tb24oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGJpdF9ucixcXG4tLVxcbm1tL2ZpbGVtYXAuYy0xMzQ2LVxcdFxcdCAqL1xcbm1tL2ZpbGVtYXAuYzoxMzQ3OlxcdFxcdGlmICh1bmxpa2VseSh0ZXN0X2FuZF9zZXRfYml0KGJpdF9uciwgZm9saW9fZmxhZ3MoZm9saW8sIDApKSkpXFxubW0vZmlsZW1hcC5jLTEzNDgtXFx0XFx0XFx0Z290byByZXBlYXQ7XFxuLS1cXG5tbS9maWxlbWFwLmM9MTU2Mj12b2lkIGZvbGlvX2VuZF9wcml2YXRlXzIoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2ZpbGVtYXAuYy0xNTY0LVxcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF9wcml2YXRlXzIoZm9saW8pLCBmb2xpbyk7XFxubW0vZmlsZW1hcC5jOjE1NjU6XFx0Y2xlYXJfYml0X3VubG9jayhQR19wcml2YXRlXzIsIGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XFxubW0vZmlsZW1hcC5jLTE1NjYtXFx0Zm9saW9fd2FrZV9iaXQoZm9saW8sIFBHX3ByaXZhdGVfMik7XFxuLS1cXG5tbS9mb2xpby5jPTM1NT1zdGF0aWMgdm9pZCBscnVfZ2VuX2luY19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vZm9saW8uYy0zNTYte1xcbm1tL2ZvbGlvLmM6MzU3OlxcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XFxubW0vZm9saW8uYy0zNTgtXFx0aW50IHJlZnM7XFxuLS1cXG5tbS9mb2xpby5jLTM3Ny1cXHRcXHRscnVfc2V0X3JlZnNfZmxhZ3MoXFx1MDAyNm5ld19mbGFncywgcmVmcyArIDEpO1xcbm1tL2ZvbGlvLmM6Mzc4OlxcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFxcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xcbm1tL2ZvbGlvLmMtMzc5LX1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTMyOTc9c3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBpbnQgKnR5cGUsXFxuLS1cXG5tbS92bXNjYW4uYy0zMjk5LXtcXG5tbS92bXNjYW4uYzozMzAwOlxcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XFxubW0vdm1zY2FuLmMtMzMwMS1cXHRpbnQgb2xkX2dlbjtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMzMjQtXFx0XFx0bmV3X2ZsYWdzIHw9IEJJVChQR193b3JraW5nc2V0KTtcXG5tbS92bXNjYW4uYzozMzI1OlxcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFxcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xcbm1tL3Ztc2Nhbi5jLTMzMjYtXFxuLS1cXG5tbS92bXNjYW4uYz0zMzMxPXN0YXRpYyBpbnQgX19mb2xpb19pbmNfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfZ2VuLCBib29sICppbmNyZWFzZWQpXFxubW0vdm1zY2FuLmMtMzMzMi17XFxubW0vdm1zY2FuLmM6MzMzMzpcXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xcbm1tL3Ztc2Nhbi5jLTMzMzQtXFx0aW50IG5ld19nZW47XFxuLS1cXG5tbS92bXNjYW4uYy0zMzUwLVxcdFxcdGxydV9zZXRfcmVmc19mbGFncyhcXHUwMDI2bmV3X2ZsYWdzLCAwKTtcXG5tbS92bXNjYW4uYzozMzUxOlxcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFxcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xcbm1tL3Ztc2Nhbi5jLTMzNTItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjI0OjUzLjg1MzI4MzI3MVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1ODg0MjM4NzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgTWVtb3J5IFNhZmV0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIGEgZmV3IGtleSBhcmVhcyBvZiBtb2RpZmljYXRpb24gaW4gdGhpcyBwYXRjaC4gVGhlIGFjY291bnRpbmcgb2YgYGxydV96b25lX3NpemVgIGlzIGJlaW5nIHJlZmluZWQsIHRyYW5zaXRpb25pbmcgZnJvbSBgdW5zaWduZWQgbG9uZ2AgdG8gYGxvbmdgIHdpdGhpbiBgbWVtX2Nncm91cF9wZXJfbm9kZWAsIGFuZCB0aGUgcmVsYXRlZCB1cGRhdGUgYW5kIGdldCBmdW5jdGlvbnMgYXJlIGJlaW5nIHNpbXBsaWZpZWQuIFRoZW4sIHRoZXJlJ3MgYSBzaWduaWZpY2FudCByZWZhY3RvcmluZyBvZiBNR0xSVSBhbmQgcGFnZSBmbGFnIGhlbHBlciBmdW5jdGlvbnMsIGFpbWluZyBmb3IgYSBtb3JlIGNvbnNpc3RlbnQgYWNjZXNzIHBhdHRlcm4gdXNpbmcgYGZvbGlvX2ZsYWdzKGZvbGlvLCAwKWAuICBUaGlzIGluY2x1ZGVzIGludHJvZHVjaW5nIG5ldyBoZWxwZXIgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBmaWxlIExSVSBmbGFncywgZ2VuZXJhdGlvbiBmbGFncywgYW5kIHJlZmVyZW5jZSBmbGFncy4gRmluYWxseSwgdGhlIHBhdGNoIHRvdWNoZXMgYGZvbGlvX3VwZGF0ZV9nZW5gIGZvciBiZXR0ZXIgcmV0dXJuIHZhbHVlcyBhbmQgc29tZSBhZGp1c3RtZW50cyB0byBgcmVhZF9jdHJsX3Bvc2AuXG5cblRoZSBjcnVjaWFsIHF1ZXN0aW9uLCBvZiBjb3Vyc2UsIGlzIG1lbW9yeSBzYWZldHkuIEknbSBmb2N1c2luZyBvbiB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB0byBiZSBleHBvc2VkLiBGcm9tIGEgcXVpY2sgc2NhbiwgSSBkb24ndCBzZWUgYW55IG9idmlvdXMgcmVkIGZsYWdzIGxpa2Uga2VybmVsLXRvLXVzZXIgbWVtb3J5IGNvcGllcyB3aGVyZSB1bmluaXRpYWxpemVkIGRhdGEgY291bGQgbGVhaywgYW5kIEkgYWxzbyBkb24ndCBzZWUgYW55IGNoYW5nZXMgdGhhdCB3b3VsZCBpbnZvbHZlIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9mIHN0cnVjdHMsIHN0YWNrIGJ1ZmZlcnMsIG9yIGhlYXAgYnVmZmVycy4gQWxsIG9mIHRoZSBtb2RpZmljYXRpb25zIG9wZXJhdGUgb24gZXhpc3RpbmcgaW4tbWVtb3J5IGRhdGEgc3RydWN0dXJlcyBsaWtlIGZvbGlvcywgbHJ1dmVjcywgbWVtY2dzLCBhbmQgaW50ZXJuYWwgZmxhZ3MgdGhhdCBhcmUgYWxyZWFkeSBpbml0aWFsaXplZC5cblxuTG9va2luZyBjbG9zZXIgYXQgdGhlIHNwZWNpZmljIHJlZmFjdG9yaW5ncywgdGhlIG91dC1wYXJhbWV0ZXIgYCp0eXBlYCBpbiBgZm9saW9fdXBkYXRlX2dlbmAgc2VlbXMgc2FmZSBiZWNhdXNlIGl0J3Mgc2V0IGJlZm9yZSByZXR1cm5pbmcgYW55IHZhbGlkIGBvbGRfZ2VuYCwgYW5kIGNhbGxlcnMgb25seSBhY2Nlc3MgaXQgYWZ0ZXIgY2hlY2tpbmcgYG9sZF9nZW4gXHUwMDNlPSAwYC4gVGhlIHN0cnVjdCBgY3RybF9wb3NgIGJlaW5nIHBhc3NlZCB0byBgcmVhZF9jdHJsX3Bvc2AgYWxzbyBzZWVtcyBzYWZlIGJlY2F1c2UgaXQncyBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgdXNlZC4gSSBhbHNvIGNoZWNrZWQgZm9yIHBhZGRpbmcgb3IgbWVtb3J5IGxlYWtzLCBhbmQgSSBkb24ndCBzZWUgYW55IHN1Y2ggaXNzdWUuXG5cbkdpdmVuIHRoaXMgYW5hbHlzaXMsIEknbSBjb25maWRlbnQgdGhhdCB0aGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGVyZWZvcmUsIFwiTmVlZHNLTVNBTlwiIHNob3VsZCBiZSBmYWxzZS4gV2hpbGUgdGhlIHBhdGNoIHNlZW1zIHNhZmUgcmVnYXJkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBLQVNBTiwgTE9DS0RFUCwgYW5kIHRoZSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIHdvdWxkIGJlIGFwcHJvcHJpYXRlIHRvIHZhbGlkYXRlIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcGFnZSBmbGFnIHN5bmNocm9uaXphdGlvbiBjaGFuZ2VzIG1vcmUgdGhvcm91Z2hseS5cblxuT2theSwgd2l0aCB0aGF0IGFzc2Vzc21lbnQgY29tcGxldGUsIEknbSByZWFkeSB0byBmaW5hbGl6ZSB0aGUgcmVzcG9uc2UgYW5kIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE2MjEsIk91dHB1dFRva2VucyI6MzIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDE2OjI0OjU5LjczNzUyNDAxM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyBNdWx0aS1HZW5lcmF0aW9uYWwgTFJVIChNR0xSVSkgZm9saW8gZmxhZyBoZWxwZXJzLCBwYWdlIHRhYmxlIC8gcm1hcCBzY2FubmluZyBsb2dpYywgYW5kIG1lbWNnIExSVSB6b25lIHNpemUgYWNjb3VudGluZy4gU3BlY2lmaWNhbGx5Olxcbi0gSXQgcmVwbGFjZXMgZGlyZWN0IGBmb2xpby1cXHUwMDNlZmxhZ3MuZmAgYWNjZXNzIHdpdGggYGZvbGlvX2ZsYWdzKGZvbGlvLCAwKWAgYWNjZXNzb3IgaGVscGVycyAoYGxydV9zZXRfZ2VuX2ZsYWdzYCwgYGxydV9nZXRfZ2VuX2ZsYWdzYCwgYGxydV9zZXRfcmVmc19mbGFnc2AsIGBscnVfZ2V0X3JlZnNfZmxhZ3NgLCBgZm9saW9fc2V0X2xydV9yZWZzYCwgYGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnNgKS5cXG4tIEl0IGNsZWFucyB1cCBgcmVhZF9jdHJsX3Bvc2AgcGFyYW1ldGVyaXphdGlvbiBhbmQgYHdhbGtfdXBkYXRlX2ZvbGlvYCBjYWxsZXJzLiBTdGFjayB2YXJpYWJsZXMgc3VjaCBhcyBgc3RydWN0IGN0cmxfcG9zIHBvc2AgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGluIGByZWFkX2N0cmxfcG9zYCwgYW5kIHRoZSBgaW50ICp0eXBlYCBvdXRwdXQgcGFyYW1ldGVyIGluIGBmb2xpb191cGRhdGVfZ2VuYCBpcyBndWFyYW50ZWVkIHRvIGJlIGluaXRpYWxpemVkIHdoZW4gdGhlIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgcHJvbW90aW9uIChgb2xkX2dlbiBcXHUwMDNlPSAwYCkuXFxuLSBJdCBjb252ZXJ0cyBgbXotXFx1MDAzZWxydV96b25lX3NpemVgIHRvIHNpZ25lZCBgbG9uZ2AgdG8gc2ltcGxpZnkgdW5kZXJmbG93IGhhbmRsaW5nLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIGNvcHkga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gUG90ZW50aWFsIGJ1Z3MgaW4gdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBjb25jdXJyZW5jeS9sb2NraW5nIHJhY2VzIG9yIHN0YXRlIGNvcnJ1cHRpb24pIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBrZXJuZWwgYXNzZXJ0aW9uIGJ1aWxkcyB3aXRob3V0IHJlcXVpcmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyBNdWx0aS1HZW5lcmF0aW9uYWwgTFJVIChNR0xSVSkgZm9saW8gZmxhZyBoZWxwZXJzLCBwYWdlIHRhYmxlIC8gcm1hcCBzY2FubmluZyBsb2dpYywgYW5kIG1lbWNnIExSVSB6b25lIHNpemUgYWNjb3VudGluZy4gU3BlY2lmaWNhbGx5Olxcbi0gSXQgcmVwbGFjZXMgZGlyZWN0IGBmb2xpby1cXHUwMDNlZmxhZ3MuZmAgYWNjZXNzIHdpdGggYGZvbGlvX2ZsYWdzKGZvbGlvLCAwKWAgYWNjZXNzb3IgaGVscGVycyAoYGxydV9zZXRfZ2VuX2ZsYWdzYCwgYGxydV9nZXRfZ2VuX2ZsYWdzYCwgYGxydV9zZXRfcmVmc19mbGFnc2AsIGBscnVfZ2V0X3JlZnNfZmxhZ3NgLCBgZm9saW9fc2V0X2xydV9yZWZzYCwgYGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnNgKS5cXG4tIEl0IGNsZWFucyB1cCBgcmVhZF9jdHJsX3Bvc2AgcGFyYW1ldGVyaXphdGlvbiBhbmQgYHdhbGtfdXBkYXRlX2ZvbGlvYCBjYWxsZXJzLiBTdGFjayB2YXJpYWJsZXMgc3VjaCBhcyBgc3RydWN0IGN0cmxfcG9zIHBvc2AgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGluIGByZWFkX2N0cmxfcG9zYCwgYW5kIHRoZSBgaW50ICp0eXBlYCBvdXRwdXQgcGFyYW1ldGVyIGluIGBmb2xpb191cGRhdGVfZ2VuYCBpcyBndWFyYW50ZWVkIHRvIGJlIGluaXRpYWxpemVkIHdoZW4gdGhlIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgcHJvbW90aW9uIChgb2xkX2dlbiBcXHUwMDNlPSAwYCkuXFxuLSBJdCBjb252ZXJ0cyBgbXotXFx1MDAzZWxydV96b25lX3NpemVgIHRvIHNpZ25lZCBgbG9uZ2AgdG8gc2ltcGxpZnkgdW5kZXJmbG93IGhhbmRsaW5nLlxcblxcbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyBhbGxvY2F0ZSB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIGNvcHkga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gUG90ZW50aWFsIGJ1Z3MgaW4gdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBjb25jdXJyZW5jeS9sb2NraW5nIHJhY2VzIG9yIHN0YXRlIGNvcnJ1cHRpb24pIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBrZXJuZWwgYXNzZXJ0aW9uIGJ1aWxkcyB3aXRob3V0IHJlcXVpcmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowcdpgh[1] Phase: Succeeded StartedAt: 2026-09-06 16:25:11 +0000 UTC FinishedAt: 2026-09-06 16:25:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdpgh[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-06 16:25:11 +0000 UTC FinishedAt: 2026-09-06 16:25:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdpgh[2] Phase: Succeeded StartedAt: 2026-09-06 16:25:11 +0000 UTC FinishedAt: 2026-09-06 20:16:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdpgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_migrate_flags","mem_cgroup_update_lru_size","walk_pte_range","walk_pmd_range_locked","folio_update_gen","evict_folios","isolate_folio","lru_gen_inc_refs","lru_gen_clear_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"7e52b08e-ef71-46eb-9fbe-d40ec3d918b6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-06 16:25:11 +0000 UTC FinishedAt: 2026-09-06 20:16:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_migrate_flags","mem_cgroup_update_lru_size","walk_pte_range","walk_pmd_range_locked","folio_update_gen","evict_folios","isolate_folio","lru_gen_inc_refs","lru_gen_clear_refs"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"7e52b08e-ef71-46eb-9fbe-d40ec3d918b6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowcdpgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_migrate_flags","mem_cgroup_update_lru_size","walk_pte_range","walk_pmd_range_locked","folio_update_gen","evict_folios","isolate_folio","lru_gen_inc_refs","lru_gen_clear_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"7e52b08e-ef71-46eb-9fbe-d40ec3d918b6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-06 16:25:11 +0000 UTC FinishedAt: 2026-09-06 16:25:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdpgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_migrate_flags","mem_cgroup_update_lru_size","walk_pte_range","walk_pmd_range_locked","folio_update_gen","evict_folios","isolate_folio","lru_gen_inc_refs","lru_gen_clear_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"7e52b08e-ef71-46eb-9fbe-d40ec3d918b6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-06 16:25:11 +0000 UTC FinishedAt: 2026-09-06 16:25:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowcdpgh/series-workflowcdpgh-convert-artifact-2340745480/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcdpgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_migrate_flags","mem_cgroup_update_lru_size","walk_pte_range","walk_pmd_range_locked","folio_update_gen","evict_folios","isolate_folio","lru_gen_inc_refs","lru_gen_clear_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"7e52b08e-ef71-46eb-9fbe-d40ec3d918b6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-06 16:25:21 +0000 UTC FinishedAt: 2026-09-06 16:53:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdpgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_migrate_flags","mem_cgroup_update_lru_size","walk_pte_range","walk_pmd_range_locked","folio_update_gen","evict_folios","isolate_folio","lru_gen_inc_refs","lru_gen_clear_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"7e52b08e-ef71-46eb-9fbe-d40ec3d918b6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-06 16:25:21 +0000 UTC FinishedAt: 2026-09-06 16:53:53 +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:*e3cbf77a-13b3-432e-aea9-7fd112583ac4,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-workflowcdpgh/series-workflowcdpgh-convert-artifact-2340745480/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": "a9459201-e99d-4ff6-81ea-49145897735b", "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-workflowcdpgh/series-workflowcdpgh-build-action-804178814/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcdpgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_migrate_flags","mem_cgroup_update_lru_size","walk_pte_range","walk_pmd_range_locked","folio_update_gen","evict_folios","isolate_folio","lru_gen_inc_refs","lru_gen_clear_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"7e52b08e-ef71-46eb-9fbe-d40ec3d918b6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-06 16:25:21 +0000 UTC FinishedAt: 2026-09-06 16:53:43 +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:*e3cbf77a-13b3-432e-aea9-7fd112583ac4,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-workflowcdpgh/series-workflowcdpgh-convert-artifact-2340745480/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": "a9459201-e99d-4ff6-81ea-49145897735b", "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-workflowcdpgh/series-workflowcdpgh-build-action-804178814/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcdpgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_migrate_flags","mem_cgroup_update_lru_size","walk_pte_range","walk_pmd_range_locked","folio_update_gen","evict_folios","isolate_folio","lru_gen_inc_refs","lru_gen_clear_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"7e52b08e-ef71-46eb-9fbe-d40ec3d918b6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-06 16:53:53 +0000 UTC FinishedAt: 2026-09-06 16:53:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdpgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_migrate_flags","mem_cgroup_update_lru_size","walk_pte_range","walk_pmd_range_locked","folio_update_gen","evict_folios","isolate_folio","lru_gen_inc_refs","lru_gen_clear_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"7e52b08e-ef71-46eb-9fbe-d40ec3d918b6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-06 16:53:53 +0000 UTC FinishedAt: 2026-09-06 16:53:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdpgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_migrate_flags","mem_cgroup_update_lru_size","walk_pte_range","walk_pmd_range_locked","folio_update_gen","evict_folios","isolate_folio","lru_gen_inc_refs","lru_gen_clear_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"7e52b08e-ef71-46eb-9fbe-d40ec3d918b6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-06 16:53:53 +0000 UTC FinishedAt: 2026-09-06 16:54:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdpgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_migrate_flags","mem_cgroup_update_lru_size","walk_pte_range","walk_pmd_range_locked","folio_update_gen","evict_folios","isolate_folio","lru_gen_inc_refs","lru_gen_clear_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"7e52b08e-ef71-46eb-9fbe-d40ec3d918b6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-06 16:53:53 +0000 UTC FinishedAt: 2026-09-06 16:53:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"7e52b08e-ef71-46eb-9fbe-d40ec3d918b6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowcdpgh/series-workflowcdpgh-convert-artifact-904450031/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcdpgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_migrate_flags","mem_cgroup_update_lru_size","walk_pte_range","walk_pmd_range_locked","folio_update_gen","evict_folios","isolate_folio","lru_gen_inc_refs","lru_gen_clear_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"7e52b08e-ef71-46eb-9fbe-d40ec3d918b6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-06 16:54:04 +0000 UTC FinishedAt: 2026-09-06 16:55:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdpgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_migrate_flags","mem_cgroup_update_lru_size","walk_pte_range","walk_pmd_range_locked","folio_update_gen","evict_folios","isolate_folio","lru_gen_inc_refs","lru_gen_clear_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"7e52b08e-ef71-46eb-9fbe-d40ec3d918b6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-06 16:54:04 +0000 UTC FinishedAt: 2026-09-06 16:55:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a9459201-e99d-4ff6-81ea-49145897735b,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-workflowcdpgh/series-workflowcdpgh-build-action-804178814/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-workflowcdpgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_migrate_flags","mem_cgroup_update_lru_size","walk_pte_range","walk_pmd_range_locked","folio_update_gen","evict_folios","isolate_folio","lru_gen_inc_refs","lru_gen_clear_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"7e52b08e-ef71-46eb-9fbe-d40ec3d918b6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-06 16:55:50 +0000 UTC FinishedAt: 2026-09-06 16:55:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdpgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_migrate_flags","mem_cgroup_update_lru_size","walk_pte_range","walk_pmd_range_locked","folio_update_gen","evict_folios","isolate_folio","lru_gen_inc_refs","lru_gen_clear_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"7e52b08e-ef71-46eb-9fbe-d40ec3d918b6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-06 16:55:50 +0000 UTC FinishedAt: 2026-09-06 16:55:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdpgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_migrate_flags","mem_cgroup_update_lru_size","walk_pte_range","walk_pmd_range_locked","folio_update_gen","evict_folios","isolate_folio","lru_gen_inc_refs","lru_gen_clear_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"7e52b08e-ef71-46eb-9fbe-d40ec3d918b6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-06 16:55:50 +0000 UTC FinishedAt: 2026-09-06 17:11:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdpgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_migrate_flags","mem_cgroup_update_lru_size","walk_pte_range","walk_pmd_range_locked","folio_update_gen","evict_folios","isolate_folio","lru_gen_inc_refs","lru_gen_clear_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"7e52b08e-ef71-46eb-9fbe-d40ec3d918b6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-06 16:55:50 +0000 UTC FinishedAt: 2026-09-06 17:11:36 +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:*e3cbf77a-13b3-432e-aea9-7fd112583ac4,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-workflowcdpgh/series-workflowcdpgh-convert-artifact-904450031/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": "fe5a7d0e-25cc-4ab2-a190-96aa166219a3", "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-workflowcdpgh/series-workflowcdpgh-build-action-2198356867/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcdpgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_migrate_flags","mem_cgroup_update_lru_size","walk_pte_range","walk_pmd_range_locked","folio_update_gen","evict_folios","isolate_folio","lru_gen_inc_refs","lru_gen_clear_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"7e52b08e-ef71-46eb-9fbe-d40ec3d918b6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-06 16:55:50 +0000 UTC FinishedAt: 2026-09-06 17:11:26 +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:*e3cbf77a-13b3-432e-aea9-7fd112583ac4,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-workflowcdpgh/series-workflowcdpgh-convert-artifact-904450031/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": "fe5a7d0e-25cc-4ab2-a190-96aa166219a3", "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-workflowcdpgh/series-workflowcdpgh-build-action-2198356867/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcdpgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_migrate_flags","mem_cgroup_update_lru_size","walk_pte_range","walk_pmd_range_locked","folio_update_gen","evict_folios","isolate_folio","lru_gen_inc_refs","lru_gen_clear_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"7e52b08e-ef71-46eb-9fbe-d40ec3d918b6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-06 17:11:36 +0000 UTC FinishedAt: 2026-09-06 17:11:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdpgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_migrate_flags","mem_cgroup_update_lru_size","walk_pte_range","walk_pmd_range_locked","folio_update_gen","evict_folios","isolate_folio","lru_gen_inc_refs","lru_gen_clear_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"7e52b08e-ef71-46eb-9fbe-d40ec3d918b6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-06 17:11:36 +0000 UTC FinishedAt: 2026-09-06 17:11:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdpgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_migrate_flags","mem_cgroup_update_lru_size","walk_pte_range","walk_pmd_range_locked","folio_update_gen","evict_folios","isolate_folio","lru_gen_inc_refs","lru_gen_clear_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"7e52b08e-ef71-46eb-9fbe-d40ec3d918b6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-06 17:11:36 +0000 UTC FinishedAt: 2026-09-06 17:13:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdpgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_migrate_flags","mem_cgroup_update_lru_size","walk_pte_range","walk_pmd_range_locked","folio_update_gen","evict_folios","isolate_folio","lru_gen_inc_refs","lru_gen_clear_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"7e52b08e-ef71-46eb-9fbe-d40ec3d918b6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-06 17:11:36 +0000 UTC FinishedAt: 2026-09-06 17:13:13 +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:*fe5a7d0e-25cc-4ab2-a190-96aa166219a3,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-workflowcdpgh/series-workflowcdpgh-build-action-2198356867/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-workflowcdpgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_migrate_flags","mem_cgroup_update_lru_size","walk_pte_range","walk_pmd_range_locked","folio_update_gen","evict_folios","isolate_folio","lru_gen_inc_refs","lru_gen_clear_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"7e52b08e-ef71-46eb-9fbe-d40ec3d918b6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-06 17:13:23 +0000 UTC FinishedAt: 2026-09-06 20:16:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdpgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_migrate_flags","mem_cgroup_update_lru_size","walk_pte_range","walk_pmd_range_locked","folio_update_gen","evict_folios","isolate_folio","lru_gen_inc_refs","lru_gen_clear_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"7e52b08e-ef71-46eb-9fbe-d40ec3d918b6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-06 17:13:23 +0000 UTC FinishedAt: 2026-09-06 20:16:13 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_migrate_flags","mem_cgroup_update_lru_size","walk_pte_range","walk_pmd_range_locked","folio_update_gen","evict_folios","isolate_folio","lru_gen_inc_refs","lru_gen_clear_refs"],"skip_cover_check":true},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:*a9459201-e99d-4ff6-81ea-49145897735b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fe5a7d0e-25cc-4ab2-a190-96aa166219a3,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-workflowcdpgh/series-workflowcdpgh-build-action-804178814/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-workflowcdpgh/series-workflowcdpgh-build-action-2198356867/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowcdpgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_migrate_flags","mem_cgroup_update_lru_size","walk_pte_range","walk_pmd_range_locked","folio_update_gen","evict_folios","isolate_folio","lru_gen_inc_refs","lru_gen_clear_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"7e52b08e-ef71-46eb-9fbe-d40ec3d918b6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-06 17:13:23 +0000 UTC FinishedAt: 2026-09-06 17:13:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdpgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_migrate_flags","mem_cgroup_update_lru_size","walk_pte_range","walk_pmd_range_locked","folio_update_gen","evict_folios","isolate_folio","lru_gen_inc_refs","lru_gen_clear_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"7e52b08e-ef71-46eb-9fbe-d40ec3d918b6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-06 17:13:23 +0000 UTC FinishedAt: 2026-09-06 17:13:29 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_migrate_flags","mem_cgroup_update_lru_size","walk_pte_range","walk_pmd_range_locked","folio_update_gen","evict_folios","isolate_folio","lru_gen_inc_refs","lru_gen_clear_refs"],"skip_cover_check":true},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-workflowcdpgh/series-workflowcdpgh-convert-artifact-3257318312/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcdpgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_migrate_flags","mem_cgroup_update_lru_size","walk_pte_range","walk_pmd_range_locked","folio_update_gen","evict_folios","isolate_folio","lru_gen_inc_refs","lru_gen_clear_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"7e52b08e-ef71-46eb-9fbe-d40ec3d918b6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-06 17:13:23 +0000 UTC FinishedAt: 2026-09-06 17:13:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdpgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_migrate_flags","mem_cgroup_update_lru_size","walk_pte_range","walk_pmd_range_locked","folio_update_gen","evict_folios","isolate_folio","lru_gen_inc_refs","lru_gen_clear_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"7e52b08e-ef71-46eb-9fbe-d40ec3d918b6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-06 17:13:23 +0000 UTC FinishedAt: 2026-09-06 17:13:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdpgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_migrate_flags","mem_cgroup_update_lru_size","walk_pte_range","walk_pmd_range_locked","folio_update_gen","evict_folios","isolate_folio","lru_gen_inc_refs","lru_gen_clear_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"7e52b08e-ef71-46eb-9fbe-d40ec3d918b6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-06 17:13:23 +0000 UTC FinishedAt: 2026-09-06 17:13:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdpgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_migrate_flags","mem_cgroup_update_lru_size","walk_pte_range","walk_pmd_range_locked","folio_update_gen","evict_folios","isolate_folio","lru_gen_inc_refs","lru_gen_clear_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"7e52b08e-ef71-46eb-9fbe-d40ec3d918b6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-06 17:13:33 +0000 UTC FinishedAt: 2026-09-06 20:16:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcdpgh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["lru_gen_look_around","folio_migrate_flags","mem_cgroup_update_lru_size","walk_pte_range","walk_pmd_range_locked","folio_update_gen","evict_folios","isolate_folio","lru_gen_inc_refs","lru_gen_clear_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0642036192d08a189732d1eca234888d5e2d4be1","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"7e52b08e-ef71-46eb-9fbe-d40ec3d918b6","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-06 17:13:33 +0000 UTC FinishedAt: 2026-09-06 20:16:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a9459201-e99d-4ff6-81ea-49145897735b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fe5a7d0e-25cc-4ab2-a190-96aa166219a3,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-workflowcdpgh/series-workflowcdpgh-build-action-804178814/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-workflowcdpgh/series-workflowcdpgh-build-action-2198356867/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-workflowcdpgh/series-workflowcdpgh-convert-artifact-3257318312/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,}