Name: series-workflowj9pp8 Phase: Succeeded StartedAt: 2026-09-03 04:39:26 +0000 UTC FinishedAt: 2026-09-03 08:32:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9pp8[0] Phase: Succeeded StartedAt: 2026-09-03 04:39:26 +0000 UTC FinishedAt: 2026-09-03 04:41:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9pp8[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 04:39:26 +0000 UTC FinishedAt: 2026-09-03 04:41:45 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "893f78beb0477671991ccaae87df75acc484162f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED", "MEMCG", "MIGRATION" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "893f78beb0477671991ccaae87df75acc484162f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED", "MEMCG", "MIGRATION" ], "series_id": "8eeb8a1b-b69a-46a3-87c1-33c3755a0210" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "lru_gen_look_around", "folio_migrate_flags", "mem_cgroup_update_lru_size", "lru_gen_reparent_memcg", "lru_gen_soft_reclaim" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xydV9nZW5fbG9va19hcm91bmQmIzM0OywKICAgICYjMzQ7Zm9saW9fbWlncmF0ZV9mbGFncyYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZSYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX3JlcGFyZW50X21lbWNnJiMzNDssCiAgICAmIzM0O2xydV9nZW5fc29mdF9yZWNsYWltJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyBNdWx0aS1HZW4gTFJVIChNR0xSVSkgZm9saW8gZmxhZyBvcGVyYXRpb25zIChpbnRyb2R1Y2luZyBoZWxwZXJzIGxpa2UgbHJ1X3NldF9nZW5fZmxhZ3MsIGxydV9zZXRfcmVmc19mbGFncywgZm9saW9fc2V0X2xydV9yZWZzKSwgdXBkYXRlcyBmb2xpbyByZWZlcmVuY2UvZ2VuZXJhdGlvbiB0cmFja2luZyBhY3Jvc3MgcmVjbGFpbSBhbmQgbWlncmF0aW9uIHBhdGhzLCBhbmQgY2hhbmdlcyBtZW1jZyBscnVfem9uZV9zaXplIHRyYWNraW5nIGZyb20gdW5zaWduZWQgbG9uZyB0byBzaWduZWQgbG9uZyB3aXRoIGJvdW5kcyBjaGVja2luZy5cblxuTm8ga2VybmVsLXRvLXVzZXIgZGF0YSBjb3BpZXMsIGlvY3Rscywgb3IgdXNlci1mYWNpbmcgc3RydWN0cyBhcmUgbW9kaWZpZWQuIFN0YWNrIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIChlLmcuLCBgdHlwZWAgaW4gYHdhbGtfdXBkYXRlX2ZvbGlvYCkgYXJlIGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyByZWFkIChhcyBgdHlwZWAgaXMgb25seSBwYXNzZWQgdG8gYHVwZGF0ZV9iYXRjaF9zaXplYCB3aGVuIGBvbGRfZ2VuIFx1MDAzZT0gMGAsIHdoaWNoIGd1YXJhbnRlZXMgYXNzaWdubWVudCBpbiBgZm9saW9fdXBkYXRlX2dlbmApLiBObyB1bmluaXRpYWxpemVkIGhlYXAsIHN0YWNrLCBvciBwYWdlIGFsbG9jYXRpb25zIGFyZSBleHBvc2VkLiBQb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgaW4gdGhlc2UgTU0gcGF0aHMgKHN1Y2ggYXMgY29uY3VycmVuY3kgaXNzdWVzIG9yIGludmFsaWQgZm9saW8gZGVyZWZlcmVuY2VzKSBmYWxsIHVuZGVyIEtBU0FOL0xPQ0tERVAgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgZGV0ZWN0b3JzLiBUaHVzLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIE11bHRpLUdlbiBMUlUgKE1HTFJVKSwgcGFnZSByZWZlcmVuY2UgY291bnRpbmcsIGZvbGlvIGZsYWdzIG1hbmFnZW1lbnQsIGZvbGlvIG1pZ3JhdGlvbiwgYW5kIG1lbWNnIExSVSBzaXplIGFjY291bnRpbmcuIFRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhZmZlY3QgcGFnZSByZWNsYW1hdGlvbiwgYWdpbmcsIGFuZCBtaWdyYXRpb24gYmVoYXZpb3IgaW4gcmVhY2hhYmxlIGNvcmUgbW0gY29kZSBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDRkNzBkMWNiNzU3MTM0MjI4NmY0NmMzYjVhODhkNDllZjY0OWFkYjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDA0OjQwOjQ4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IDdkMWMwY2UxODlhODguLjg2NzgwZWY2NWVhZmEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC0xMTMsNyAmIzQzOzExMyw3IEBAIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlIHtcbiBcdC8qIEZpZWxkcyB3aGljaCBnZXQgdXBkYXRlZCBvZnRlbiBhdCB0aGUgZW5kLiAqL1xuIFx0c3RydWN0IGxydXZlY1x0XHRscnV2ZWM7XG4gXHRDQUNIRUxJTkVfUEFERElORyhfcGFkMl8pO1xuLVx0dW5zaWduZWQgbG9uZ1x0XHRscnVfem9uZV9zaXplW01BWF9OUl9aT05FU11bTlJfTFJVX0xJU1RTXTtcbiYjNDM7XHRsb25nXHRcdFx0bHJ1X3pvbmVfc2l6ZVtNQVhfTlJfWk9ORVNdW05SX0xSVV9MSVNUU107XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9yZWNsYWltX2l0ZXJcdGl0ZXI7XG4gXG4gXHQvKlxuQEAgLTkwMiwxMCAmIzQzOzkwMiwxNSBAQCBzdGF0aWMgaW5saW5lXG4gdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0ZW51bSBscnVfbGlzdCBscnUsIGludCB6b25lX2lkeClcbiB7XG4mIzQzO1x0bG9uZyB2YWw7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XG4gXG4gXHRteiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xuLVx0cmV0dXJuIFJFQURfT05DRShtei1cdTAwM2VscnVfem9uZV9zaXplW3pvbmVfaWR4XVtscnVdKTtcbiYjNDM7XHR2YWwgPSBSRUFEX09OQ0UobXotXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRSh2YWwgXHUwMDNjIDApKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB2YWw7XG4gfVxuIFxuIHZvaWQgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmggYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG5pbmRleCA2MjFjODY1M2Q4ZjdlLi5hYjY5Yjk5MzA4OTNmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuQEAgLTMwLDYgJiM0MzszMCwxNyBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19pc19maWxlX2xydShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cmV0dXJuICFmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1IC0gU2hvdWxkIHRoZSBmb2xpbyBiZSBvbiBhIGZpbGUgTFJVIG9yIGFub24gTFJVP1xuJiM0MzsgKiBAZmxhZ3M6IFRoZSBmb2xpbyYjMzk7cyBmbGFncy5cbiYjNDM7ICpcbiYjNDM7ICogSnVzdCBsaWtlIGZvbGlvX2lzX2ZpbGVfbHJ1IGJ1dCB0YWtlIHRoZSBmb2xpbyBmbGFncyBkaXJlY3RseSBpbnN0ZWFkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBpbnQgZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUoY29uc3QgdW5zaWduZWQgbG9uZyAqZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gIXRlc3RfYml0KFBHX3N3YXBiYWNrZWQsIGZsYWdzKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX191cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRcdFx0ZW51bSBscnVfbGlzdCBscnUsIGVudW0gem9uZV90eXBlIHppZCxcbiBcdFx0XHRcdGxvbmcgbnJfcGFnZXMpXG5AQCAtMTQyLDEwICYjNDM7MTUzLDY2IEBAIHN0YXRpYyBpbmxpbmUgaW50IGxydV90aWVyX2Zyb21fcmVmcyhpbnQgcmVmcywgYm9vbCB3b3JraW5nc2V0KVxuIFx0cmV0dXJuIHdvcmtpbmdzZXQgPyBNQVhfTlJfVElFUlMgLSAxIDogb3JkZXJfYmFzZV8yKHJlZnMpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MzsvKipcbiYjNDM7ICogbHJ1X3NldF9nZW5fZmxhZ3MgLSBTZXQgdGhlIExSVSBnZW5lcmF0aW9uIG51bWJlciB0byBzcGVjaWZpZWQgZm9saW8gZmxhZ3MuXG4mIzQzOyAqIEBmbGFnczogcG9pbnRlciB0byB0aGUgZm9saW8gZmxhZ3NcbiYjNDM7ICogQGdlbjogZ2VuZXJhdGlvbiBudW1iZXIsIGJldHdlZW4gMCBhbmQgKE1BWF9OUl9HRU5TIC0gMSksIGluY2x1c2l2ZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfc2V0X2dlbl9mbGFncyh1bnNpZ25lZCBsb25nICpmbGFncywgaW50IGdlbilcbiYjNDM7e1xuJiM0MztcdEJVSUxEX0JVR19PTihMUlVfR0VOX01BU0sgXHUwMDI2IExSVV9SRUZTX01BU0spO1xuJiM0MztcdFZNX1dBUk5fT05fT05DRShnZW4gXHUwMDNlPSBNQVhfTlJfR0VOUyB8fCBnZW4gXHUwMDNjIDApO1xuJiM0MztcdC8qIFN0b3JlIGdlbiBvZmZzZXQgYnkgMSwgemVybyBtZWFucyB0aGUgZm9saW8gaXMgb2ZmLWxpc3QuICovXG4mIzQzO1x0KmZsYWdzIFx1MDAyNj0gfkxSVV9HRU5fTUFTSztcbiYjNDM7XHQqZmxhZ3MgfD0gKGdlbiAmIzQzOyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogbHJ1X2dldF9nZW5fZmxhZ3MgLSBSZXR1cm4gdGhlIExSVSBnZW5lcmF0aW9uIG51bWJlciBmcm9tIGZvbGlvIGZsYWdzLlxuJiM0MzsgKiBAZmxhZ3M6IGZvbGlvIGZsYWdzXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgKE1BWF9OUl9HRU5TIC0gMSksIGluY2x1c2l2ZS4gUmV0dXJuc1xuJiM0MzsgKiAtMSBpZiB0aGUgZmxhZ3MgaW5kaWNhdGUgdGhlIGZvbGlvIGlzIG9mZiB0aGUgbGlzdCAoZS5nLiwgaXNvbGF0ZWQpLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBpbnQgbHJ1X2dldF9nZW5fZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncylcbiYjNDM7e1xuJiM0MztcdGludCBnZW4gPSAoKGZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4mIzQzO1xuJiM0MztcdC8qIEV4Y2x1ZGUgdGhlIGxlZ2FsIC0xIGZyb20gdGhlIHVuc2lnbmVkIE1BWF9OUl9HRU5TIGNvbXBhcmlzb24gKi9cbiYjNDM7XHRWTV9XQVJOX09OX09OQ0UoZ2VuICE9IC0xIFx1MDAyNlx1MDAyNiBnZW4gXHUwMDNlPSBNQVhfTlJfR0VOUyk7XG4mIzQzO1x0cmV0dXJuIGdlbjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGxydV9zZXRfcmVmc19mbGFncyAtIFNldCB0aGUgTFJVIHJlZmVyZW5jZWQgY291bnQgdG8gZm9saW8gZmxhZ3MuXG4mIzQzOyAqIEBmbGFnczogcG9pbnRlciB0byB0aGUgZm9saW8gZmxhZ3NcbiYjNDM7ICogQHJlZnM6IHJlZmVyZW5jZWQgLyBhY2Nlc3MgY291bnQgbnVtYmVyLCBiZXR3ZWVuIDAgYW5kIExSVV9SRUZTX01BWCwgaW5jbHVzaXZlLlxuJiM0MzsgKlxuJiM0MzsgKiBGb3IgTUdMUlUsIFBHX3JlZmVyZW5jZWQgaG9sZHMgdGhlIGZpcnN0IHJlZiwgYW5kIHRoZSBleHRyYSBiaXRzIGhvbGQgdGhlXG4mIzQzOyAqIHJlbWFpbmluZyByZWZzLiBGb3IgY2xhc3NpY2FsIExSVSB0aGUgZXh0cmEgYml0cyBhcmUgbm90IHVzZWQsIHNvIGl0IGNhblxuJiM0MzsgKiBhbHNvIGJlIHNlZW4gYXMgdGhlIHJlZnMgY291bnQgbmV2ZXIgZXhjZWVkcyAxLiBJbiBib3RoIGNhc2VzLCByZWZzID09IDFcbiYjNDM7ICogbWVhbnMgUEdfcmVmZXJlbmNlZCBpcyBzZXQgYW5kIHRoZSBleHRyYSBiaXRzIGFyZSB6ZXJvLCBhbmQgcmVmcyA9PSAwIG1lYW5zXG4mIzQzOyAqIFBHX3JlZmVyZW5jZWQgYW5kIHRoZSBleHRyYSBiaXRzIGFyZSBhbGwgdW5zZXQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X3NldF9yZWZzX2ZsYWdzKHVuc2lnbmVkIGxvbmcgKmZsYWdzLCB1bnNpZ25lZCBpbnQgcmVmcylcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuJiM0MztcdFZNX1dBUk5fT05fT05DRShyZWZzIFx1MDAzZSBMUlVfUkVGU19NQVgpO1xuJiM0MztcdEJVSUxEX0JVR19PTihMUlVfUkVGU19NQVggIT0gKExSVV9SRUZTX01BU0sgXHUwMDNlXHUwMDNlIExSVV9SRUZTX1BHT0ZGKSAmIzQzOyAxKTtcbiBcbiYjNDM7XHQqZmxhZ3MgXHUwMDI2PSB+TFJVX1JFRlNfRkxBR1M7XG4mIzQzO1x0aWYgKCFyZWZzKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdCpmbGFncyB8PSAoQklUKFBHX3JlZmVyZW5jZWQpIHwgKChyZWZzIC0gMVVMKSBcdTAwM2NcdTAwM2MgTFJVX1JFRlNfUEdPRkYpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGxydV9nZXRfcmVmc19mbGFncyAtIFJldHVybiBMUlUgcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCBmcm9tIGZvbGlvIGZsYWdzLlxuJiM0MzsgKiBAZmxhZ3M6IGZvbGlvIGZsYWdzXG4mIzQzOyAqXG4mIzQzOyAqIFJlYWRzIHRoZSBMUlUgcmVmZXJlbmNlZCBjb3VudCBzZXQgYnkgbHJ1X3NldF9yZWZzX2ZsYWdzKCkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBscnVfZ2V0X3JlZnNfZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncylcbiYjNDM7e1xuIFx0aWYgKCEoZmxhZ3MgXHUwMDI2IEJJVChQR19yZWZlcmVuY2VkKSkpXG4gXHRcdHJldHVybiAwO1xuIFx0LypcbkBAIC0xNTUsMTEgJiM0MzsyMjIsMjQgQEAgc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHJldHVybiAoKGZsYWdzIFx1MDAyNiBMUlVfUkVGU19NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX1JFRlNfUEdPRkYpICYjNDM7IDE7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuJiM0MztcdHJldHVybiBscnVfZ2V0X3JlZnNfZmxhZ3MoUkVBRF9PTkNFKCpjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpKTtcbiYjNDM7fVxuIFxuLVx0cmV0dXJuICgoZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgcmVmcylcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4mIzQzO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdG5ld19mbGFncyA9IG9sZF9mbGFncztcbiYjNDM7XHRcdGxydV9zZXRfcmVmc19mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIHJlZnMpO1xuJiM0MztcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBscnVfZ2V0X2dlbl9mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9pc19hY3RpdmUoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgZ2VuKVxuQEAgLTI3MCw3ICYjNDM7MzUwLDcgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fYWRkX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcbiBcdGZsYWdzID0gKGdlbiAmIzQzOyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIE1JTl9OUl9HRU5TIGFib3V0IFBHX2FjdGl2ZSAqL1xuLVx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpO1xuJiM0MztcdHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpO1xuIFxuIFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCAtMSwgZ2VuKTtcbiBcdC8qIGZvciBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoKSAqL1xuQEAgLTI5NSw3ICYjNDM7Mzc1LDcgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcbiBcdC8qIGZvciBmb2xpb19taWdyYXRlX2ZsYWdzKCkgKi9cbiBcdGZsYWdzID0gIXJlY2xhaW1pbmcgXHUwMDI2XHUwMDI2IGxydV9nZW5faXNfYWN0aXZlKGxydXZlYywgZ2VuKSA/IEJJVChQR19hY3RpdmUpIDogMDtcbi1cdGZsYWdzID0gc2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfR0VOX01BU0ssIGZsYWdzKTtcbiYjNDM7XHRmbGFncyA9IHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0ssIGZsYWdzKTtcbiBcdGdlbiA9ICgoZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbiBcbiBcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgZ2VuLCAtMSk7XG5AQCAtMzA0LDExICYjNDM7Mzg0LDE5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXG4mIzQzOy8qKlxuJiM0MzsgKiBmb2xpb19taWdyYXRlX2xydV9yZWZzIC0gY29weSB0aGUgcmVmZXJlbmNlIHN0YXRlIHRvIGEgbmV3IGZvbGlvXG4mIzQzOyAqIEBuZXc6IHRoZSBkZXN0aW5hdGlvbiBmb2xpb1xuJiM0MzsgKiBAb2xkOiB0aGUgc291cmNlIGZvbGlvXG4mIzQzOyAqXG4mIzQzOyAqIFRyYW5zZmVyIHRoZSByZWZlcmVuY2Ugc3RhdGUgdG8gQG5ldyBkdXJpbmcgbWlncmF0aW9uOiB0aGUgTUdMUlVcbiYjNDM7ICogcmVmcyBjb3VudCwgaW5jbHVkaW5nIFBHX3JlZmVyZW5jZWQsIG9yIGp1c3QgUEdfcmVmZXJlbmNlZCBmb3IgdGhlXG4mIzQzOyAqIGFjdGl2ZS9pbmFjdGl2ZSBMUlUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyByZWZzID0gUkVBRF9PTkNFKG9sZC1cdTAwM2VmbGFncy5mKSBcdTAwMjYgTFJVX1JFRlNfTUFTSztcbi1cbi1cdHNldF9tYXNrX2JpdHMoXHUwMDI2bmV3LVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIHJlZnMpO1xuJiM0MztcdEJVSUxEX0JVR19PTihMUlVfUkVGU19NQVNLIFx1MDAyNiBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuJiM0MztcdGZvbGlvX3NldF9scnVfcmVmcyhuZXcsIGZvbGlvX2xydV9yZWZzKG9sZCkpO1xuIH1cbiAjZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cbiBcbkBAIC0zMzcsOSAmIzQzOzQyNSwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxuIHtcbi1cbiYjNDM7XHRpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKG9sZCkpXG4mIzQzO1x0XHRmb2xpb19zZXRfcmVmZXJlbmNlZChuZXcpO1xuIH1cbiAjZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuaW5kZXggOTRmOWMzZmY1NDE2MC4uOWIyN2NmNTNiZGJjNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbkBAIC00OTIsMTEgJiM0Mzs0OTIsMTQgQEAgZW51bSBscnV2ZWNfZmxhZ3Mge1xuICAqIGZvbGlvLVx1MDAzZWZsYWdzLCBtYXNrZWQgYnkgTFJVX1JFRlNfTUFTSy5cbiAgKi9cbiAjZGVmaW5lIE1BWF9OUl9USUVSU1x0XHQ0VVxuJiM0MzsjZGVmaW5lIExSVV9USUVSX01JTlx0XHQwVVxuJiM0MzsjZGVmaW5lIExSVV9USUVSX01BWFx0XHQoTUFYX05SX1RJRVJTIC0gMSlcbiBcbiAjaWZuZGVmIF9fR0VORVJBVElOR19CT1VORFNfSFxuIFxuICNkZWZpbmUgTFJVX0dFTl9NQVNLXHRcdCgoQklUKExSVV9HRU5fV0lEVEgpIC0gMSkgXHUwMDNjXHUwMDNjIExSVV9HRU5fUEdPRkYpXG4gI2RlZmluZSBMUlVfUkVGU19NQVNLXHRcdCgoQklUKExSVV9SRUZTX1dJRFRIKSAtIDEpIFx1MDAzY1x1MDAzYyBMUlVfUkVGU19QR09GRilcbiYjNDM7I2RlZmluZSBMUlVfUkVGU19NQVhcdFx0QklUKExSVV9SRUZTX1dJRFRIKVxuIFxuIC8qXG4gICogRm9yIGZvbGlvcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMsXG5kaWZmIC0tZ2l0IGEvbW0vZm9saW8uYyBiL21tL2ZvbGlvLmNcbmluZGV4IGMwMmRjZWE5YzAzYzIuLmZiODc0ZmU0OTJiMmIgMTAwNjQ0XG4tLS0gYS9tbS9mb2xpby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9mb2xpby5jXG5AQCAtMzUzLDI2ICYjNDM7MzUzLDI4IEBAIHN0YXRpYyB2b2lkIF9fbHJ1X2NhY2hlX2FjdGl2YXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXG4gc3RhdGljIHZvaWQgbHJ1X2dlbl9pbmNfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbiYjNDM7XHRpbnQgcmVmcztcbiBcbiBcdGlmIChmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXG4tXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpIHtcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuJiM0MztcdGlmICghZm9saW9fbHJ1X3JlZnMoZm9saW8pKSB7XG4mIzQzO1x0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4gXHRkbyB7XG4tXHRcdGlmICgob2xkX2ZsYWdzIFx1MDAyNiBMUlVfUkVGU19NQVNLKSA9PSBMUlVfUkVGU19NQVNLKSB7XG4mIzQzO1x0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XG4mIzQzO1x0XHRyZWZzID0gbHJ1X2dldF9yZWZzX2ZsYWdzKG9sZF9mbGFncyk7XG4mIzQzO1x0XHRpZiAocmVmcyA9PSBMUlVfUkVGU19NQVgpIHtcbiBcdFx0XHRpZiAoIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpXG4gXHRcdFx0XHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XG4gXHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4tXG4tXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncyAmIzQzOyBCSVQoTFJVX1JFRlNfUEdPRkYpO1xuLVx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4mIzQzO1x0XHRscnVfc2V0X3JlZnNfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCByZWZzICYjNDM7IDEpO1xuJiM0MztcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4gfVxuIFxuIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuQEAgLTM4NCw3ICYjNDM7Mzg2LDggQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRpZiAoZ2VuIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MgfCBCSVQoUEdfd29ya2luZ3NldCksIDApO1xuJiM0MztcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4mIzQzO1x0Zm9saW9fY2xlYXJfd29ya2luZ3NldChmb2xpbyk7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRzZXEgPSBSRUFEX09OQ0UoZm9saW9fbHJ1dmVjKGZvbGlvKS1cdTAwM2VscnVnZW4ubWluX3NlcVt0eXBlXSk7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCA4NTZhN2QwNzU4NmNjLi4wYTY1YWI4ZGYyN2E5IDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmNcbkBAIC0xNTI5LDI4ICYjNDM7MTUyOSwxMiBAQCB2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXG4gXHRcdFx0XHRpbnQgemlkLCBsb25nIG5yX3BhZ2VzKVxuIHtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejtcbi1cdHVuc2lnbmVkIGxvbmcgKmxydV9zaXplO1xuLVx0bG9uZyBzaXplO1xuIFxuIFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0bXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcbi1cdGxydV9zaXplID0gXHUwMDI2bXotXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6aWRdW2xydV07XG4tXG4tXHRpZiAobnJfcGFnZXMgXHUwMDNjIDApXG4tXHRcdCpscnVfc2l6ZSAmIzQzOz0gbnJfcGFnZXM7XG4tXG4tXHRzaXplID0gKmxydV9zaXplO1xuLVx0aWYgKFdBUk5fT05DRShzaXplIFx1MDAzYyAwLFxuLVx0XHRcJiMzNDslcyglcCwgJWQsICVsZCk6IGxydV9zaXplICVsZFxcblwmIzM0Oyxcbi1cdFx0X19mdW5jX18sIGxydXZlYywgbHJ1LCBucl9wYWdlcywgc2l6ZSkpIHtcbi1cdFx0Vk1fQlVHX09OKDEpO1xuLVx0XHQqbHJ1X3NpemUgPSAwO1xuLVx0fVxuLVxuLVx0aWYgKG5yX3BhZ2VzIFx1MDAzZSAwKVxuLVx0XHQqbHJ1X3NpemUgJiM0Mzs9IG5yX3BhZ2VzO1xuJiM0MztcdG16LVx1MDAzZWxydV96b25lX3NpemVbemlkXVtscnVdICYjNDM7PSBucl9wYWdlcztcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jXG5pbmRleCAxNWI0NTgzMmJjZmE3Li5hMzY5ZDBjOTVjMzg2IDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9taWdyYXRlLmNcbkBAIC03NzYsOCAmIzQzOzc3Niw5IEBAIHZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdGludCBjcHVwaWQ7XG4gXG4tXHRpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSlcbi1cdFx0Zm9saW9fc2V0X3JlZmVyZW5jZWQobmV3Zm9saW8pO1xuJiM0MztcdC8qIENvcHkgdGhlIHJlZmVyZW5jZSBzdGF0ZSwgaW5jbHVkaW5nIFBHX3JlZmVyZW5jZWQgKi9cbiYjNDM7XHRmb2xpb19taWdyYXRlX2xydV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7XG4mIzQzO1xuIFx0aWYgKGZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKVxuIFx0XHRmb2xpb19tYXJrX3VwdG9kYXRlKG5ld2ZvbGlvKTtcbiBcdGlmIChmb2xpb190ZXN0X2NsZWFyX2FjdGl2ZShmb2xpbykpIHtcbkBAIC04MDcsNyAmIzQzOzgwOCw2IEBAIHZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0aWYgKGZvbGlvX3Rlc3RfaWRsZShmb2xpbykpXG4gXHRcdGZvbGlvX3NldF9pZGxlKG5ld2ZvbGlvKTtcbiBcbi1cdGZvbGlvX21pZ3JhdGVfcmVmcyhuZXdmb2xpbywgZm9saW8pO1xuIFx0LypcbiBcdCAqIENvcHkgTlVNQSBpbmZvcm1hdGlvbiB0byB0aGUgbmV3IHBhZ2UsIHRvIHByZXZlbnQgb3Zlci1lYWdlclxuIFx0ICogZnV0dXJlIG1pZ3JhdGlvbnMgb2YgdGhpcyBzYW1lIHBhZ2UuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggZmRkMTMyOTlhMDRhOS4uZTdkMzc5YzZlNzAzYSAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uY1xuQEAgLTg0MywxOSAmIzQzOzg0MywyMiBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4gXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKSB7XG4gXHRcdC8qIEFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLiAqL1xuIFx0XHRpZiAoaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7XG4tXHRcdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTtcbiYjNDM7XHRcdFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xuJiM0MztcdFx0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0XHR9XG4gXG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcbiYjNDM7XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbiBcdC8qIFByb21vdGUgb24gc2Vjb25kIGFjY2VzcyAqL1xuLVx0aWYgKGZvbGlvX2xydV9yZWZzKGZvbGlvKSBcdTAwM2UgMSlcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTtcbi1cdGVsc2VcbiYjNDM7XHRpZiAoZm9saW9fbHJ1X3JlZnMoZm9saW8pIFx1MDAzZSAxKSB7XG4mIzQzO1x0XHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XG4mIzQzO1x0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuJiM0MztcdH0gZWxzZSB7XG4gXHRcdGZvbGlvX21hcmtfYWNjZXNzZWQoZm9saW8pO1xuJiM0MztcdH1cbiBcdHJldHVybiB0cnVlO1xuIH1cbiAjZWxzZVxuQEAgLTMxOTUsOCAmIzQzOzMxOTgsOCBAQCBzdHJ1Y3QgY3RybF9wb3Mge1xuIFx0aW50IGdhaW47XG4gfTtcbiBcbi1zdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2Fpbixcbi1cdFx0XHQgIHN0cnVjdCBjdHJsX3BvcyAqcG9zKVxuJiM0MztzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyX21pbixcbiYjNDM7XHRcdFx0ICBpbnQgdGllcl9tYXgsIGludCBnYWluLCBzdHJ1Y3QgY3RybF9wb3MgKnBvcylcbiB7XG4gXHRpbnQgaTtcbiBcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuQEAgLTMyMDUsNyAmIzQzOzMyMDgsNyBAQCBzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2FpbixcbiBcdHBvcy1cdTAwM2VnYWluID0gZ2FpbjtcbiBcdHBvcy1cdTAwM2VyZWZhdWx0ZWQgPSBwb3MtXHUwMDNldG90YWwgPSAwO1xuIFxuLVx0Zm9yIChpID0gdGllciAlIE1BWF9OUl9USUVSUzsgaSBcdTAwM2M9IG1pbih0aWVyLCBNQVhfTlJfVElFUlMgLSAxKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRmb3IgKGkgPSB0aWVyX21pbjsgaSBcdTAwM2M9IHRpZXJfbWF4OyBpJiM0MzsmIzQzOykge1xuIFx0XHRwb3MtXHUwMDNlcmVmYXVsdGVkICYjNDM7PSBscnVnZW4tXHUwMDNlYXZnX3JlZmF1bHRlZFt0eXBlXVtpXSAmIzQzO1xuIFx0XHRcdFx0ICBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNmxydWdlbi1cdTAwM2VyZWZhdWx0ZWRbaGlzdF1bdHlwZV1baV0pO1xuIFx0XHRwb3MtXHUwMDNldG90YWwgJiM0Mzs9IGxydWdlbi1cdTAwM2VhdmdfdG90YWxbdHlwZV1baV0gJiM0MztcbkBAIC0zMjY2LDExICYjNDM7MzI2OSwxMSBAQCBzdGF0aWMgYm9vbCBwb3NpdGl2ZV9jdHJsX2VycihzdHJ1Y3QgY3RybF9wb3MgKnNwLCBzdHJ1Y3QgY3RybF9wb3MgKnB2KVxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gXG4gLyogcHJvbW90ZSBwYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzICovXG4tc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4mIzQzO3N0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgaW50ICp0eXBlLFxuJiM0MztcdFx0XHQgICAgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiB7XG4tXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuLVxuLVx0Vk1fV0FSTl9PTl9PTkNFKGdlbiBcdTAwM2U9IE1BWF9OUl9HRU5TKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuJiM0MztcdGludCBvbGRfZ2VuO1xuIFxuIFx0LypcbiBcdCAqIFNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUywgYW5kIGFjdGl2YXRlIGZpbGUtYmFja2VkXG5AQCAtMzI3OSwyMCAmIzQzOzMyODIsMjUgQEAgc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFcbiBcdCAqL1xuIFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7XG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcbiYjNDM7XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XG4gXHRcdHJldHVybiAtMTtcbiBcdH1cbiBcbiBcdGRvIHtcbiYjNDM7XHRcdG9sZF9nZW4gPSBscnVfZ2V0X2dlbl9mbGFncyhvbGRfZmxhZ3MpO1xuJiM0MztcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuJiM0MztcbiBcdFx0LyogbHJ1X2dlbl9kZWxfZm9saW8oKSBoYXMgaXNvbGF0ZWQgdGhpcyBwYWdlPyAqL1xuLVx0XHRpZiAoIShvbGRfZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykpXG4tXHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcdFx0aWYgKG9sZF9nZW4gXHUwMDNjIDApXG4mIzQzO1x0XHRcdGJyZWFrO1xuIFxuLVx0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgXHUwMDI2IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpO1xuLVx0XHRuZXdfZmxhZ3MgfD0gKChnZW4gJiM0MzsgMVVMKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRikgfCBCSVQoUEdfd29ya2luZ3NldCk7XG4tXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiYjNDM7XHRcdGxydV9zZXRfZ2VuX2ZsYWdzKFx1MDAyNm5ld19mbGFncywgbmV3X2dlbik7XG4mIzQzO1x0XHRscnVfc2V0X3JlZnNfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCAwKTtcbiYjNDM7XHRcdG5ld19mbGFncyB8PSBCSVQoUEdfd29ya2luZ3NldCk7XG4mIzQzO1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiBcbi1cdHJldHVybiAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuJiM0MztcdCp0eXBlID0gZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUoXHUwMDI2b2xkX2ZsYWdzKTtcbiYjNDM7XHRyZXR1cm4gb2xkX2dlbjtcbiB9XG4gXG4gLyogcHJvdGVjdCBwYWdlcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMgKi9cbkBAIC0zMzAxLDIxICYjNDM7MzMwOSwyMCBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbiBcdGludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG4tXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuLVxuLVx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCEob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spLCBmb2xpbyk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbiBcbiBcdGRvIHtcbi1cdFx0bmV3X2dlbiA9ICgob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4mIzQzO1x0XHRuZXdfZ2VuID0gbHJ1X2dldF9nZW5fZmxhZ3Mob2xkX2ZsYWdzKTtcbiYjNDM7XG4gXHRcdC8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqL1xuIFx0XHRpZiAobmV3X2dlbiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG5ld19nZW4gIT0gb2xkX2dlbilcbiBcdFx0XHRyZXR1cm4gbmV3X2dlbjtcbiBcbiYjNDM7XHRcdG5ld19mbGFncyA9IG9sZF9mbGFncztcbiBcdFx0bmV3X2dlbiA9IChvbGRfZ2VuICYjNDM7IDEpICUgTUFYX05SX0dFTlM7XG4tXG4tXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncyBcdTAwMjYgfihMUlVfR0VOX01BU0sgfCBMUlVfUkVGU19GTEFHUyk7XG4tXHRcdG5ld19mbGFncyB8PSAobmV3X2dlbiAmIzQzOyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuLVx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4mIzQzO1x0XHRscnVfc2V0X2dlbl9mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIG5ld19nZW4pO1xuJiM0MztcdFx0bHJ1X3NldF9yZWZzX2ZsYWdzKFx1MDAyNm5ld19mbGFncywgMCk7XG4mIzQzO1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiBcbiBcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XG4gXG5AQCAtMzMyMyw5ICYjNDM7MzMzMCw4IEBAIHN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gfVxuIFxuIHN0YXRpYyB2b2lkIHVwZGF0ZV9iYXRjaF9zaXplKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tXHRcdFx0ICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuKVxuJiM0MztcdFx0XHQgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4sIGludCB0eXBlKVxuIHtcbi1cdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xuIFx0aW50IHpvbmUgPSBmb2xpb196b25lbnVtKGZvbGlvKTtcbiBcdGludCBkZWx0YSA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiBcbkBAIC0zNTEyLDIyICYjNDM7MzUxOCwyNCBAQCBzdGF0aWMgYm9vbCBzdWl0YWJsZV90b19zY2FuKGludCB0b3RhbCwgaW50IHlvdW5nKVxuIH1cbiBcbiBzdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi1cdFx0c3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGJvb2wgZGlydHkpXG4mIzQzO1x0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgZGlydHkpXG4ge1xuLVx0aW50IG9sZF9nZW47XG4mIzQzO1x0aW50IG5ld19nZW4sIG9sZF9nZW4sIHR5cGU7XG4gXG4gXHRpZiAoIWZvbGlvKVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzO1x0bmV3X2dlbiA9IGxydV9nZW5fZnJvbV9zZXEoUkVBRF9PTkNFKGxydXZlYy1cdTAwM2VscnVnZW4ubWF4X3NlcSkpO1xuJiM0MztcbiBcdGlmIChkaXJ0eSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIFx1MDAyNlx1MDAyNlxuIFx0ICAgICEoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAgICFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpKVxuIFx0XHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbiBcbiBcdGlmICh3YWxrKSB7XG4tXHRcdG9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdFx0b2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sIFx1MDAyNnR5cGUsIFx1MDAyNnZtYS1cdTAwM2VmbGFncyk7XG4gXHRcdGlmIChvbGRfZ2VuIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgb2xkX2dlbiAhPSBuZXdfZ2VuKVxuLVx0XHRcdHVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcbiYjNDM7XHRcdFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4sIHR5cGUpO1xuIFx0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpKSB7XG4gXHRcdG9sZF9nZW4gPSBmb2xpb19scnVfZ2VuKGZvbGlvKTtcbiBcdFx0aWYgKG9sZF9nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXG5AQCAtMzU0OSw4ICYjNDM7MzU1Nyw2IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXHUwMDNlcHJpdmF0ZTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVx1MDAzZWxydXZlYyk7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdERFRklORV9NQVhfU0VRKHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xuIFx0dW5zaWduZWQgaW50IG5yO1xuIFx0cG1kX3QgcG1kdmFsO1xuIFxuQEAgLTM2MDEsNyAmIzQzOzM2MDcsNyBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKGxhc3QgIT0gZm9saW8pIHtcbi1cdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLVx1MDAzZXZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4mIzQzO1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCB3YWxrLVx1MDAzZWxydXZlYywgbGFzdCwgZGlydHkpO1xuIFxuIFx0XHRcdGxhc3QgPSBmb2xpbztcbiBcdFx0XHRkaXJ0eSA9IGZhbHNlO1xuQEAgLTM2MTQsNyAmIzQzOzM2MjAsNyBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0d2Fsay1cdTAwM2VtbV9zdGF0c1tNTV9MRUFGX1lPVU5HXSAmIzQzOz0gbnI7XG4gXHR9XG4gXG4tXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLVx1MDAzZXZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4mIzQzO1x0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIHdhbGstXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXHRsYXN0ID0gTlVMTDtcbiBcbiBcdGlmIChpIFx1MDAzYyBQVFJTX1BFUl9QVEUgXHUwMDI2XHUwMDI2IGdldF9uZXh0X3ZtYShQTURfTUFTSywgUEFHRV9TSVpFLCBhcmdzLCBcdTAwMjZzdGFydCwgXHUwMDI2ZW5kKSlcbkBAIC0zNjM3LDggJiM0MzszNjQzLDYgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcbiBcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVx1MDAzZXByaXZhdGU7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay1cdTAwM2VscnV2ZWMpO1xuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdCh3YWxrLVx1MDAzZWxydXZlYyk7XG4tXHRERUZJTkVfTUFYX1NFUSh3YWxrLVx1MDAzZWxydXZlYyk7XG4tXHRpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcbiBcbiBcdFZNX1dBUk5fT05fT05DRShwdWRfbGVhZigqcHVkKSk7XG4gXG5AQCAtMzY5Miw3ICYjNDM7MzY5Niw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhXG4gXHRcdFx0Z290byBuZXh0O1xuIFxuIFx0XHRpZiAobGFzdCAhPSBmb2xpbykge1xuLVx0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4mIzQzO1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC0zNzA2LDcgJiM0MzszNzEwLDcgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcbiBcdFx0aSA9IGkgXHUwMDNlIE1JTl9MUlVfQkFUQ0ggPyAwIDogZmluZF9uZXh0X2JpdChiaXRtYXAsIE1JTl9MUlVfQkFUQ0gsIGkpICYjNDM7IDE7XG4gXHR9IHdoaWxlIChpIFx1MDAzYz0gTUlOX0xSVV9CQVRDSCk7XG4gXG4tXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuJiM0MztcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xuIFx0c3Bpbl91bmxvY2socHRsKTtcbkBAIC00MjcwLDggJiM0Mzs0Mjc0LDYgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGZvbGlvX3BnZGF0KGZvbGlvKTtcbiBcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcbiBcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZTtcbi1cdHVuc2lnbmVkIGxvbmcgbWF4X3NlcTtcbi1cdGludCBnZW47XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKHB2bXctXHUwMDNlcHRsKTtcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2xydShmb2xpbyksIGZvbGlvKTtcbkBAIC00MzA4LDggJiM0Mzs0MzEwLDYgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxuIFxuIFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcbiBcdGxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7XG4tXHRtYXhfc2VxID0gUkVBRF9PTkNFKChscnV2ZWMpLVx1MDAzZWxydWdlbi5tYXhfc2VxKTtcbi1cdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7XG4gXHRtbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xuIFxuIFx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcbkBAIC00MzQxLDcgJiM0Mzs0MzQxLDcgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAobGFzdCAhPSBmb2xpbykge1xuLVx0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4mIzQzO1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXG4gXHRcdFx0bGFzdCA9IGZvbGlvO1xuIFx0XHRcdGRpcnR5ID0gZmFsc2U7XG5AQCAtNDM1MywxMyAmIzQzOzQzNTMsMTQgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxuIFx0XHR5b3VuZyAmIzQzOz0gbnI7XG4gXHR9XG4gXG4tXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuJiM0MztcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXG4gXHRsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTtcbiBcbiBcdC8qIGZlZWRiYWNrIGZyb20gcm1hcCB3YWxrZXJzIHRvIHBhZ2UgdGFibGUgd2Fsa2VycyAqL1xuIFx0aWYgKG1tX3N0YXRlIFx1MDAyNlx1MDAyNiBzdWl0YWJsZV90b19zY2FuKGksIHlvdW5nKSlcbi1cdFx0dXBkYXRlX2Jsb29tX2ZpbHRlcihtbV9zdGF0ZSwgbWF4X3NlcSwgcHZtdy1cdTAwM2VwbWQpO1xuJiM0MztcdFx0dXBkYXRlX2Jsb29tX2ZpbHRlcihtbV9zdGF0ZSwgUkVBRF9PTkNFKGxydXZlYy1cdTAwM2VscnVnZW4ubWF4X3NlcSksXG4mIzQzO1x0XHRcdFx0ICAgIHB2bXctXHUwMDNlcG1kKTtcbiBcbiBcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiBcbkBAIC00NzE2LDcgJiM0Mzs0NzE3LDcgQEAgc3RhdGljIGJvb2wgaXNvbGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2FcbiBcbiBcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqL1xuIFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKVxuLVx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIDApO1xuJiM0MztcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbiBcbiBcdHN1Y2Nlc3MgPSBscnVfZ2VuX2RlbF9mb2xpbyhscnV2ZWMsIGZvbGlvLCB0cnVlKTtcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghc3VjY2VzcywgZm9saW8pO1xuQEAgLTQ4MDksOSAmIzQzOzQ4MTAsOSBAQCBzdGF0aWMgaW50IGdldF90aWVyX2lkeChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKVxuIFx0ICogVGhpcyB2YWx1ZSBpcyBjaG9zZW4gYmVjYXVzZSBhbnkgb3RoZXIgdGllciB3b3VsZCBoYXZlIGF0IGxlYXN0IHR3aWNlXG4gXHQgKiBhcyBtYW55IHJlZmF1bHRzIGFzIHRoZSBmaXJzdCB0aWVyLlxuIFx0ICovXG4tXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgMCwgMiwgXHUwMDI2c3ApO1xuLVx0Zm9yICh0aWVyID0gMTsgdGllciBcdTAwM2MgTUFYX05SX1RJRVJTOyB0aWVyJiM0MzsmIzQzOykge1xuLVx0XHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdGllciwgMywgXHUwMDI2cHYpO1xuJiM0MztcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01JTiwgMiwgXHUwMDI2c3ApO1xuJiM0MztcdGZvciAodGllciA9IExSVV9USUVSX01JTiAmIzQzOyAxOyB0aWVyIFx1MDAzYz0gTFJVX1RJRVJfTUFYOyB0aWVyJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIHRpZXIsIDMsIFx1MDAyNnB2KTtcbiBcdFx0aWYgKCFwb3NpdGl2ZV9jdHJsX2VycihcdTAwMjZzcCwgXHUwMDI2cHYpKVxuIFx0XHRcdGJyZWFrO1xuIFx0fVxuQEAgLTQ4MzIsOCAmIzQzOzQ4MzMsMTAgQEAgc3RhdGljIGludCBnZXRfdHlwZV90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXG4gXHQgKiBDb21wYXJlIHRoZSBzdW0gb2YgYWxsIHRpZXJzIG9mIGFub24gd2l0aCB0aGF0IG9mIGZpbGUgdG8gZGV0ZXJtaW5lXG4gXHQgKiB3aGljaCB0eXBlIHRvIHNjYW4uXG4gXHQgKi9cbi1cdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIE1BWF9OUl9USUVSUywgc3dhcHBpbmVzcywgXHUwMDI2c3ApO1xuLVx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTUFYX05SX1RJRVJTLCBNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3MsIFx1MDAyNnB2KTtcbiYjNDM7XHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCxcbiYjNDM7XHRcdCAgICAgIHN3YXBwaW5lc3MsIFx1MDAyNnNwKTtcbiYjNDM7XHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCxcbiYjNDM7XHRcdCAgICAgIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgXHUwMDI2cHYpO1xuIFxuIFx0cmV0dXJuIHBvc2l0aXZlX2N0cmxfZXJyKFx1MDAyNnNwLCBcdTAwMjZwdik7XG4gfVxuQEAgLTQ5MzIsOCAmIzQzOzQ5MzUsMTAgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdH1cbiBcbiBcdFx0LyogZG9uJiMzOTt0IGFkZCByZWplY3RlZCBmb2xpb3MgdG8gdGhlIG9sZGVzdCBnZW5lcmF0aW9uICovXG4tXHRcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSlcbi1cdFx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfYWN0aXZlKSk7XG4mIzQzO1x0XHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pIHtcbiYjNDM7XHRcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbiYjNDM7XHRcdFx0Zm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHRtb3ZlX2ZvbGlvc190b19scnUoXHUwMDI2bGlzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtMUlVfR0VOX0VOQUJMRUQmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TUlHUkFUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bHJ1X2dlbl9sb29rX2Fyb3VuZCYjMzQ7LAogICAgJiMzNDtmb2xpb19taWdyYXRlX2ZsYWdzJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplJiMzNDssCiAgICAmIzM0O2xydV9nZW5fcmVwYXJlbnRfbWVtY2cmIzM0OywKICAgICYjMzQ7bHJ1X2dlbl9zb2Z0X3JlY2xhaW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBNdWx0aS1HZW4gTFJVIChNR0xSVSksIHBhZ2UgcmVmZXJlbmNlIGNvdW50aW5nLCBmb2xpbyBmbGFncyBtYW5hZ2VtZW50LCBmb2xpbyBtaWdyYXRpb24sIGFuZCBtZW1jZyBMUlUgc2l6ZSBhY2NvdW50aW5nLiBUaGVzZSBmdW5jdGlvbmFsIGNoYW5nZXMgYWZmZWN0IHBhZ2UgcmVjbGFtYXRpb24sIGFnaW5nLCBhbmQgbWlncmF0aW9uIGJlaGF2aW9yIGluIHJlYWNoYWJsZSBjb3JlIG1tIGNvZGUgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0ZDcwZDFjYjc1NzEzNDIyODZmNDZjM2I1YTg4ZDQ5ZWY2NDlhZGI3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAwNDo0MDo0OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKaW5kZXggN2QxYzBjZTE4OWE4OC4uODY3ODBlZjY1ZWFmYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKQEAgLTExMyw3ICYjNDM7MTEzLDcgQEAgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgewogCS8qIEZpZWxkcyB3aGljaCBnZXQgdXBkYXRlZCBvZnRlbiBhdCB0aGUgZW5kLiAqLwogCXN0cnVjdCBscnV2ZWMJCWxydXZlYzsKIAlDQUNIRUxJTkVfUEFERElORyhfcGFkMl8pOwotCXVuc2lnbmVkIGxvbmcJCWxydV96b25lX3NpemVbTUFYX05SX1pPTkVTXVtOUl9MUlVfTElTVFNdOwomIzQzOwlsb25nCQkJbHJ1X3pvbmVfc2l6ZVtNQVhfTlJfWk9ORVNdW05SX0xSVV9MSVNUU107CiAJc3RydWN0IG1lbV9jZ3JvdXBfcmVjbGFpbV9pdGVyCWl0ZXI7CiAKIAkvKgpAQCAtOTAyLDEwICYjNDM7OTAyLDE1IEBAIHN0YXRpYyBpbmxpbmUKIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCWVudW0gbHJ1X2xpc3QgbHJ1LCBpbnQgem9uZV9pZHgpCiB7CiYjNDM7CWxvbmcgdmFsOwogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejsKIAogCW16ID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7Ci0JcmV0dXJuIFJFQURfT05DRShtei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7CiYjNDM7CXZhbCA9IFJFQURfT05DRShtei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UodmFsICZsdDsgMCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIHZhbDsKIH0KIAogdm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaAppbmRleCA2MjFjODY1M2Q4ZjdlLi5hYjY5Yjk5MzA4OTNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmgKQEAgLTMwLDYgJiM0MzszMCwxNyBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19pc19maWxlX2xydShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXJldHVybiAhZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1IC0gU2hvdWxkIHRoZSBmb2xpbyBiZSBvbiBhIGZpbGUgTFJVIG9yIGFub24gTFJVPwomIzQzOyAqIEBmbGFnczogVGhlIGZvbGlvJiMzOTtzIGZsYWdzLgomIzQzOyAqCiYjNDM7ICogSnVzdCBsaWtlIGZvbGlvX2lzX2ZpbGVfbHJ1IGJ1dCB0YWtlIHRoZSBmb2xpbyBmbGFncyBkaXJlY3RseSBpbnN0ZWFkLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZsYWdzKQomIzQzO3sKJiM0MzsJcmV0dXJuICF0ZXN0X2JpdChQR19zd2FwYmFja2VkLCBmbGFncyk7CiYjNDM7fQomIzQzOwogc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJCQllbnVtIGxydV9saXN0IGxydSwgZW51bSB6b25lX3R5cGUgemlkLAogCQkJCWxvbmcgbnJfcGFnZXMpCkBAIC0xNDIsMTAgJiM0MzsxNTMsNjYgQEAgc3RhdGljIGlubGluZSBpbnQgbHJ1X3RpZXJfZnJvbV9yZWZzKGludCByZWZzLCBib29sIHdvcmtpbmdzZXQpCiAJcmV0dXJuIHdvcmtpbmdzZXQgPyBNQVhfTlJfVElFUlMgLSAxIDogb3JkZXJfYmFzZV8yKHJlZnMpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzOy8qKgomIzQzOyAqIGxydV9zZXRfZ2VuX2ZsYWdzIC0gU2V0IHRoZSBMUlUgZ2VuZXJhdGlvbiBudW1iZXIgdG8gc3BlY2lmaWVkIGZvbGlvIGZsYWdzLgomIzQzOyAqIEBmbGFnczogcG9pbnRlciB0byB0aGUgZm9saW8gZmxhZ3MKJiM0MzsgKiBAZ2VuOiBnZW5lcmF0aW9uIG51bWJlciwgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfc2V0X2dlbl9mbGFncyh1bnNpZ25lZCBsb25nICpmbGFncywgaW50IGdlbikKJiM0Mzt7CiYjNDM7CUJVSUxEX0JVR19PTihMUlVfR0VOX01BU0sgJmFtcDsgTFJVX1JFRlNfTUFTSyk7CiYjNDM7CVZNX1dBUk5fT05fT05DRShnZW4gJmd0Oz0gTUFYX05SX0dFTlMgfHwgZ2VuICZsdDsgMCk7CiYjNDM7CS8qIFN0b3JlIGdlbiBvZmZzZXQgYnkgMSwgemVybyBtZWFucyB0aGUgZm9saW8gaXMgb2ZmLWxpc3QuICovCiYjNDM7CSpmbGFncyAmYW1wOz0gfkxSVV9HRU5fTUFTSzsKJiM0MzsJKmZsYWdzIHw9IChnZW4gJiM0MzsgMVVMKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBscnVfZ2V0X2dlbl9mbGFncyAtIFJldHVybiB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIGZyb20gZm9saW8gZmxhZ3MuCiYjNDM7ICogQGZsYWdzOiBmb2xpbyBmbGFncwomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLiBSZXR1cm5zCiYjNDM7ICogLTEgaWYgdGhlIGZsYWdzIGluZGljYXRlIHRoZSBmb2xpbyBpcyBvZmYgdGhlIGxpc3QgKGUuZy4sIGlzb2xhdGVkKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGludCBscnVfZ2V0X2dlbl9mbGFncyh1bnNpZ25lZCBsb25nIGZsYWdzKQomIzQzO3sKJiM0MzsJaW50IGdlbiA9ICgoZmxhZ3MgJmFtcDsgTFJVX0dFTl9NQVNLKSAmZ3Q7Jmd0OyBMUlVfR0VOX1BHT0ZGKSAtIDE7CiYjNDM7CiYjNDM7CS8qIEV4Y2x1ZGUgdGhlIGxlZ2FsIC0xIGZyb20gdGhlIHVuc2lnbmVkIE1BWF9OUl9HRU5TIGNvbXBhcmlzb24gKi8KJiM0MzsJVk1fV0FSTl9PTl9PTkNFKGdlbiAhPSAtMSAmYW1wOyZhbXA7IGdlbiAmZ3Q7PSBNQVhfTlJfR0VOUyk7CiYjNDM7CXJldHVybiBnZW47CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGxydV9zZXRfcmVmc19mbGFncyAtIFNldCB0aGUgTFJVIHJlZmVyZW5jZWQgY291bnQgdG8gZm9saW8gZmxhZ3MuCiYjNDM7ICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFncwomIzQzOyAqIEByZWZzOiByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IG51bWJlciwgYmV0d2VlbiAwIGFuZCBMUlVfUkVGU19NQVgsIGluY2x1c2l2ZS4KJiM0MzsgKgomIzQzOyAqIEZvciBNR0xSVSwgUEdfcmVmZXJlbmNlZCBob2xkcyB0aGUgZmlyc3QgcmVmLCBhbmQgdGhlIGV4dHJhIGJpdHMgaG9sZCB0aGUKJiM0MzsgKiByZW1haW5pbmcgcmVmcy4gRm9yIGNsYXNzaWNhbCBMUlUgdGhlIGV4dHJhIGJpdHMgYXJlIG5vdCB1c2VkLCBzbyBpdCBjYW4KJiM0MzsgKiBhbHNvIGJlIHNlZW4gYXMgdGhlIHJlZnMgY291bnQgbmV2ZXIgZXhjZWVkcyAxLiBJbiBib3RoIGNhc2VzLCByZWZzID09IDEKJiM0MzsgKiBtZWFucyBQR19yZWZlcmVuY2VkIGlzIHNldCBhbmQgdGhlIGV4dHJhIGJpdHMgYXJlIHplcm8sIGFuZCByZWZzID09IDAgbWVhbnMKJiM0MzsgKiBQR19yZWZlcmVuY2VkIGFuZCB0aGUgZXh0cmEgYml0cyBhcmUgYWxsIHVuc2V0LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfc2V0X3JlZnNfZmxhZ3ModW5zaWduZWQgbG9uZyAqZmxhZ3MsIHVuc2lnbmVkIGludCByZWZzKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwomIzQzOwlWTV9XQVJOX09OX09OQ0UocmVmcyAmZ3Q7IExSVV9SRUZTX01BWCk7CiYjNDM7CUJVSUxEX0JVR19PTihMUlVfUkVGU19NQVggIT0gKExSVV9SRUZTX01BU0sgJmd0OyZndDsgTFJVX1JFRlNfUEdPRkYpICYjNDM7IDEpOwogCiYjNDM7CSpmbGFncyAmYW1wOz0gfkxSVV9SRUZTX0ZMQUdTOwomIzQzOwlpZiAoIXJlZnMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CSpmbGFncyB8PSAoQklUKFBHX3JlZmVyZW5jZWQpIHwgKChyZWZzIC0gMVVMKSAmbHQ7Jmx0OyBMUlVfUkVGU19QR09GRikpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBscnVfZ2V0X3JlZnNfZmxhZ3MgLSBSZXR1cm4gTFJVIHJlZmVyZW5jZWQgLyBhY2Nlc3MgY291bnQgZnJvbSBmb2xpbyBmbGFncy4KJiM0MzsgKiBAZmxhZ3M6IGZvbGlvIGZsYWdzCiYjNDM7ICoKJiM0MzsgKiBSZWFkcyB0aGUgTFJVIHJlZmVyZW5jZWQgY291bnQgc2V0IGJ5IGxydV9zZXRfcmVmc19mbGFncygpLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGxydV9nZXRfcmVmc19mbGFncyh1bnNpZ25lZCBsb25nIGZsYWdzKQomIzQzO3sKIAlpZiAoIShmbGFncyAmYW1wOyBCSVQoUEdfcmVmZXJlbmNlZCkpKQogCQlyZXR1cm4gMDsKIAkvKgpAQCAtMTU1LDExICYjNDM7MjIyLDI0IEBAIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJcmV0dXJuICgoZmxhZ3MgJmFtcDsgTFJVX1JFRlNfTUFTSykgJmd0OyZndDsgTFJVX1JFRlNfUEdPRkYpICYjNDM7IDE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwomIzQzOwlyZXR1cm4gbHJ1X2dldF9yZWZzX2ZsYWdzKFJFQURfT05DRSgqY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKSk7CiYjNDM7fQogCi0JcmV0dXJuICgoZmxhZ3MgJmFtcDsgTFJVX0dFTl9NQVNLKSAmZ3Q7Jmd0OyBMUlVfR0VOX1BHT0ZGKSAtIDE7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgcmVmcykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCW5ld19mbGFncyA9IG9sZF9mbGFnczsKJiM0MzsJCWxydV9zZXRfcmVmc19mbGFncygmYW1wO25ld19mbGFncywgcmVmcyk7CiYjNDM7CX0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksICZhbXA7b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X2dlbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIGxydV9nZXRfZ2VuX2ZsYWdzKFJFQURfT05DRSgqY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2lzX2FjdGl2ZShjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBnZW4pCkBAIC0yNzAsNyAmIzQzOzM1MCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2FkZF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpOwogCWZsYWdzID0gKGdlbiAmIzQzOyAxVUwpICZsdDsmbHQ7IExSVV9HRU5fUEdPRkY7CiAJLyogc2VlIHRoZSBjb21tZW50IG9uIE1JTl9OUl9HRU5TIGFib3V0IFBHX2FjdGl2ZSAqLwotCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX0dFTl9NQVNLIHwgQklUKFBHX2FjdGl2ZSksIGZsYWdzKTsKJiM0MzsJc2V0X21hc2tfYml0cyhmb2xpb19mbGFncyhmb2xpbywgMCksIExSVV9HRU5fTUFTSyB8IEJJVChQR19hY3RpdmUpLCBmbGFncyk7CiAKIAlscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIC0xLCBnZW4pOwogCS8qIGZvciBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoKSAqLwpAQCAtMjk1LDcgJiM0MzszNzUsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCiAJLyogZm9yIGZvbGlvX21pZ3JhdGVfZmxhZ3MoKSAqLwogCWZsYWdzID0gIXJlY2xhaW1pbmcgJmFtcDsmYW1wOyBscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIGdlbikgPyBCSVQoUEdfYWN0aXZlKSA6IDA7Ci0JZmxhZ3MgPSBzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9HRU5fTUFTSywgZmxhZ3MpOwomIzQzOwlmbGFncyA9IHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0ssIGZsYWdzKTsKIAlnZW4gPSAoKGZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwogCiAJbHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBnZW4sIC0xKTsKQEAgLTMwNCwxMSAmIzQzOzM4NCwxOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZCkKJiM0MzsvKioKJiM0MzsgKiBmb2xpb19taWdyYXRlX2xydV9yZWZzIC0gY29weSB0aGUgcmVmZXJlbmNlIHN0YXRlIHRvIGEgbmV3IGZvbGlvCiYjNDM7ICogQG5ldzogdGhlIGRlc3RpbmF0aW9uIGZvbGlvCiYjNDM7ICogQG9sZDogdGhlIHNvdXJjZSBmb2xpbwomIzQzOyAqCiYjNDM7ICogVHJhbnNmZXIgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBAbmV3IGR1cmluZyBtaWdyYXRpb246IHRoZSBNR0xSVQomIzQzOyAqIHJlZnMgY291bnQsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkLCBvciBqdXN0IFBHX3JlZmVyZW5jZWQgZm9yIHRoZQomIzQzOyAqIGFjdGl2ZS9pbmFjdGl2ZSBMUlUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKQogewotCXVuc2lnbmVkIGxvbmcgcmVmcyA9IFJFQURfT05DRShvbGQtJmd0O2ZsYWdzLmYpICZhbXA7IExSVV9SRUZTX01BU0s7Ci0KLQlzZXRfbWFza19iaXRzKCZhbXA7bmV3LSZndDtmbGFncy5mLCBMUlVfUkVGU19NQVNLLCByZWZzKTsKJiM0MzsJQlVJTERfQlVHX09OKExSVV9SRUZTX01BU0sgJmFtcDsgQklUKFBHX3JlZmVyZW5jZWQpKTsKJiM0MzsJZm9saW9fc2V0X2xydV9yZWZzKG5ldywgZm9saW9fbHJ1X3JlZnMob2xkKSk7CiB9CiAjZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi8KIApAQCAtMzM3LDkgJiM0Mzs0MjUsMTAgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZCkKIHsKLQomIzQzOwlpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKG9sZCkpCiYjNDM7CQlmb2xpb19zZXRfcmVmZXJlbmNlZChuZXcpOwogfQogI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCmluZGV4IDk0ZjljM2ZmNTQxNjAuLjliMjdjZjUzYmRiYzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaApAQCAtNDkyLDExICYjNDM7NDkyLDE0IEBAIGVudW0gbHJ1dmVjX2ZsYWdzIHsKICAqIGZvbGlvLSZndDtmbGFncywgbWFza2VkIGJ5IExSVV9SRUZTX01BU0suCiAgKi8KICNkZWZpbmUgTUFYX05SX1RJRVJTCQk0VQomIzQzOyNkZWZpbmUgTFJVX1RJRVJfTUlOCQkwVQomIzQzOyNkZWZpbmUgTFJVX1RJRVJfTUFYCQkoTUFYX05SX1RJRVJTIC0gMSkKIAogI2lmbmRlZiBfX0dFTkVSQVRJTkdfQk9VTkRTX0gKIAogI2RlZmluZSBMUlVfR0VOX01BU0sJCSgoQklUKExSVV9HRU5fV0lEVEgpIC0gMSkgJmx0OyZsdDsgTFJVX0dFTl9QR09GRikKICNkZWZpbmUgTFJVX1JFRlNfTUFTSwkJKChCSVQoTFJVX1JFRlNfV0lEVEgpIC0gMSkgJmx0OyZsdDsgTFJVX1JFRlNfUEdPRkYpCiYjNDM7I2RlZmluZSBMUlVfUkVGU19NQVgJCUJJVChMUlVfUkVGU19XSURUSCkKIAogLyoKICAqIEZvciBmb2xpb3MgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzLApkaWZmIC0tZ2l0IGEvbW0vZm9saW8uYyBiL21tL2ZvbGlvLmMKaW5kZXggYzAyZGNlYTljMDNjMi4uZmI4NzRmZTQ5MmIyYiAxMDA2NDQKLS0tIGEvbW0vZm9saW8uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9mb2xpby5jCkBAIC0zNTMsMjYgJiM0MzszNTMsMjggQEAgc3RhdGljIHZvaWQgX19scnVfY2FjaGVfYWN0aXZhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykKIAogc3RhdGljIHZvaWQgbHJ1X2dlbl9pbmNfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewotCXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwomIzQzOwl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpOwomIzQzOwlpbnQgcmVmczsKIAogCWlmIChmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSkKIAkJcmV0dXJuOwogCiAJLyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovCi0JaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKSB7Ci0JCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTsKJiM0MzsJaWYgKCFmb2xpb19scnVfcmVmcyhmb2xpbykpIHsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7CiAJCXJldHVybjsKIAl9CiAKIAlkbyB7Ci0JCWlmICgob2xkX2ZsYWdzICZhbXA7IExSVV9SRUZTX01BU0spID09IExSVV9SRUZTX01BU0spIHsKJiM0MzsJCW5ld19mbGFncyA9IG9sZF9mbGFnczsKJiM0MzsJCXJlZnMgPSBscnVfZ2V0X3JlZnNfZmxhZ3Mob2xkX2ZsYWdzKTsKJiM0MzsJCWlmIChyZWZzID09IExSVV9SRUZTX01BWCkgewogCQkJaWYgKCFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKQogCQkJCWZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTsKIAkJCXJldHVybjsKIAkJfQotCi0JCW5ld19mbGFncyA9IG9sZF9mbGFncyAmIzQzOyBCSVQoTFJVX1JFRlNfUEdPRkYpOwotCX0gd2hpbGUgKCF0cnlfY21weGNoZygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiYjNDM7CQlscnVfc2V0X3JlZnNfZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIHJlZnMgJiM0MzsgMSk7CiYjNDM7CX0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksICZhbXA7b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTsKIH0KIAogc3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pCkBAIC0zODQsNyAmIzQzOzM4Niw4IEBAIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCWlmIChnZW4gJmx0OyAwKQogCQlyZXR1cm4gdHJ1ZTsKIAotCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MgfCBCSVQoUEdfd29ya2luZ3NldCksIDApOwomIzQzOwlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwomIzQzOwlmb2xpb19jbGVhcl93b3JraW5nc2V0KGZvbGlvKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlzZXEgPSBSRUFEX09OQ0UoZm9saW9fbHJ1dmVjKGZvbGlvKS0mZ3Q7bHJ1Z2VuLm1pbl9zZXFbdHlwZV0pOwpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDg1NmE3ZDA3NTg2Y2MuLjBhNjVhYjhkZjI3YTkgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTE1MjksMjggJiM0MzsxNTI5LDEyIEBAIHZvaWQgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIGxydV9saXN0IGxydSwKIAkJCQlpbnQgemlkLCBsb25nIG5yX3BhZ2VzKQogewogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejsKLQl1bnNpZ25lZCBsb25nICpscnVfc2l6ZTsKLQlsb25nIHNpemU7CiAKIAlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKQogCQlyZXR1cm47CiAKIAlteiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpOwotCWxydV9zaXplID0gJmFtcDttei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6aWRdW2xydV07Ci0KLQlpZiAobnJfcGFnZXMgJmx0OyAwKQotCQkqbHJ1X3NpemUgJiM0Mzs9IG5yX3BhZ2VzOwotCi0Jc2l6ZSA9ICpscnVfc2l6ZTsKLQlpZiAoV0FSTl9PTkNFKHNpemUgJmx0OyAwLAotCQkmIzM0OyVzKCVwLCAlZCwgJWxkKTogbHJ1X3NpemUgJWxkXG4mIzM0OywKLQkJX19mdW5jX18sIGxydXZlYywgbHJ1LCBucl9wYWdlcywgc2l6ZSkpIHsKLQkJVk1fQlVHX09OKDEpOwotCQkqbHJ1X3NpemUgPSAwOwotCX0KLQotCWlmIChucl9wYWdlcyAmZ3Q7IDApCi0JCSpscnVfc2l6ZSAmIzQzOz0gbnJfcGFnZXM7CiYjNDM7CW16LSZndDtscnVfem9uZV9zaXplW3ppZF1bbHJ1XSAmIzQzOz0gbnJfcGFnZXM7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jCmluZGV4IDE1YjQ1ODMyYmNmYTcuLmEzNjlkMGM5NWMzODYgMTAwNjQ0Ci0tLSBhL21tL21pZ3JhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9taWdyYXRlLmMKQEAgLTc3Niw4ICYjNDM7Nzc2LDkgQEAgdm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJaW50IGNwdXBpZDsKIAotCWlmIChmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKQotCQlmb2xpb19zZXRfcmVmZXJlbmNlZChuZXdmb2xpbyk7CiYjNDM7CS8qIENvcHkgdGhlIHJlZmVyZW5jZSBzdGF0ZSwgaW5jbHVkaW5nIFBHX3JlZmVyZW5jZWQgKi8KJiM0MzsJZm9saW9fbWlncmF0ZV9scnVfcmVmcyhuZXdmb2xpbywgZm9saW8pOwomIzQzOwogCWlmIChmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSkKIAkJZm9saW9fbWFya191cHRvZGF0ZShuZXdmb2xpbyk7CiAJaWYgKGZvbGlvX3Rlc3RfY2xlYXJfYWN0aXZlKGZvbGlvKSkgewpAQCAtODA3LDcgJiM0Mzs4MDgsNiBAQCB2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbykKIAlpZiAoZm9saW9fdGVzdF9pZGxlKGZvbGlvKSkKIAkJZm9saW9fc2V0X2lkbGUobmV3Zm9saW8pOwogCi0JZm9saW9fbWlncmF0ZV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7CiAJLyoKIAkgKiBDb3B5IE5VTUEgaW5mb3JtYXRpb24gdG8gdGhlIG5ldyBwYWdlLCB0byBwcmV2ZW50IG92ZXItZWFnZXIKIAkgKiBmdXR1cmUgbWlncmF0aW9ucyBvZiB0aGlzIHNhbWUgcGFnZS4KZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggZmRkMTMyOTlhMDRhOS4uZTdkMzc5YzZlNzAzYSAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTg0MywxOSAmIzQzOzg0MywyMiBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpCiAJaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pICZhbXA7JmFtcDsgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpIHsKIAkJLyogQWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuICovCiAJCWlmIChpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIHZtYV9mbGFncykpIHsKLQkJCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7CiYjNDM7CQkJZm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pOwomIzQzOwkJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJfQogCi0JCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKIAkvKiBQcm9tb3RlIG9uIHNlY29uZCBhY2Nlc3MgKi8KLQlpZiAoZm9saW9fbHJ1X3JlZnMoZm9saW8pICZndDsgMSkKLQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTsKLQllbHNlCiYjNDM7CWlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgJmd0OyAxKSB7CiYjNDM7CQlmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7CiYjNDM7CQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwomIzQzOwl9IGVsc2UgewogCQlmb2xpb19tYXJrX2FjY2Vzc2VkKGZvbGlvKTsKJiM0MzsJfQogCXJldHVybiB0cnVlOwogfQogI2Vsc2UKQEAgLTMxOTUsOCAmIzQzOzMxOTgsOCBAQCBzdHJ1Y3QgY3RybF9wb3MgewogCWludCBnYWluOwogfTsKIAotc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllciwgaW50IGdhaW4sCi0JCQkgIHN0cnVjdCBjdHJsX3BvcyAqcG9zKQomIzQzO3N0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXJfbWluLAomIzQzOwkJCSAgaW50IHRpZXJfbWF4LCBpbnQgZ2Fpbiwgc3RydWN0IGN0cmxfcG9zICpwb3MpCiB7CiAJaW50IGk7CiAJc3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9ICZhbXA7bHJ1dmVjLSZndDtscnVnZW47CkBAIC0zMjA1LDcgJiM0MzszMjA4LDcgQEAgc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllciwgaW50IGdhaW4sCiAJcG9zLSZndDtnYWluID0gZ2FpbjsKIAlwb3MtJmd0O3JlZmF1bHRlZCA9IHBvcy0mZ3Q7dG90YWwgPSAwOwogCi0JZm9yIChpID0gdGllciAlIE1BWF9OUl9USUVSUzsgaSAmbHQ7PSBtaW4odGllciwgTUFYX05SX1RJRVJTIC0gMSk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CWZvciAoaSA9IHRpZXJfbWluOyBpICZsdDs9IHRpZXJfbWF4OyBpJiM0MzsmIzQzOykgewogCQlwb3MtJmd0O3JlZmF1bHRlZCAmIzQzOz0gbHJ1Z2VuLSZndDthdmdfcmVmYXVsdGVkW3R5cGVdW2ldICYjNDM7CiAJCQkJICBhdG9taWNfbG9uZ19yZWFkKCZhbXA7bHJ1Z2VuLSZndDtyZWZhdWx0ZWRbaGlzdF1bdHlwZV1baV0pOwogCQlwb3MtJmd0O3RvdGFsICYjNDM7PSBscnVnZW4tJmd0O2F2Z190b3RhbFt0eXBlXVtpXSAmIzQzOwpAQCAtMzI2NiwxMSAmIzQzOzMyNjksMTEgQEAgc3RhdGljIGJvb2wgcG9zaXRpdmVfY3RybF9lcnIoc3RydWN0IGN0cmxfcG9zICpzcCwgc3RydWN0IGN0cmxfcG9zICpwdikKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qIHByb21vdGUgcGFnZXMgYWNjZXNzZWQgdGhyb3VnaCBwYWdlIHRhYmxlcyAqLwotc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpCiYjNDM7c3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBpbnQgKnR5cGUsCiYjNDM7CQkJICAgIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpCiB7Ci0JdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby0mZ3Q7ZmxhZ3MuZik7Ci0KLQlWTV9XQVJOX09OX09OQ0UoZ2VuICZndDs9IE1BWF9OUl9HRU5TKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTsKJiM0MzsJaW50IG9sZF9nZW47CiAKIAkvKgogCSAqIFNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUywgYW5kIGFjdGl2YXRlIGZpbGUtYmFja2VkCkBAIC0zMjc5LDIwICYjNDM7MzI4MiwyNSBAQCBzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYQogCSAqLwogCWlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSAmYW1wOyZhbXA7ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pICZhbXA7JmFtcDsKIAkgICAgIWlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkgewotCQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7CiYjNDM7CQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJZG8gewomIzQzOwkJb2xkX2dlbiA9IGxydV9nZXRfZ2VuX2ZsYWdzKG9sZF9mbGFncyk7CiYjNDM7CQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7CiYjNDM7CiAJCS8qIGxydV9nZW5fZGVsX2ZvbGlvKCkgaGFzIGlzb2xhdGVkIHRoaXMgcGFnZT8gKi8KLQkJaWYgKCEob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykpCi0JCQlyZXR1cm4gLTE7CiYjNDM7CQlpZiAob2xkX2dlbiAmbHQ7IDApCiYjNDM7CQkJYnJlYWs7CiAKLQkJbmV3X2ZsYWdzID0gb2xkX2ZsYWdzICZhbXA7IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpOwotCQluZXdfZmxhZ3MgfD0gKChnZW4gJiM0MzsgMVVMKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGKSB8IEJJVChQR193b3JraW5nc2V0KTsKLQl9IHdoaWxlICghdHJ5X2NtcHhjaGcoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwomIzQzOwkJbHJ1X3NldF9nZW5fZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIG5ld19nZW4pOwomIzQzOwkJbHJ1X3NldF9yZWZzX2ZsYWdzKCZhbXA7bmV3X2ZsYWdzLCAwKTsKJiM0MzsJCW5ld19mbGFncyB8PSBCSVQoUEdfd29ya2luZ3NldCk7CiYjNDM7CX0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksICZhbXA7b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTsKIAotCXJldHVybiAoKG9sZF9mbGFncyAmYW1wOyBMUlVfR0VOX01BU0spICZndDsmZ3Q7IExSVV9HRU5fUEdPRkYpIC0gMTsKJiM0MzsJKnR5cGUgPSBmb2xpb19mbGFnc19pc19maWxlX2xydSgmYW1wO29sZF9mbGFncyk7CiYjNDM7CXJldHVybiBvbGRfZ2VuOwogfQogCiAvKiBwcm90ZWN0IHBhZ2VzIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycyAqLwpAQCAtMzMwMSwyMSAmIzQzOzMzMDksMjAgQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbykKIAlpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTsKIAlzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gJmFtcDtscnV2ZWMtJmd0O2xydWdlbjsKIAlpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLSZndDttaW5fc2VxW3R5cGVdKTsKLQl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLSZndDtmbGFncy5mKTsKLQotCVZNX1dBUk5fT05fT05DRV9GT0xJTyghKG9sZF9mbGFncyAmYW1wOyBMUlVfR0VOX01BU0spLCBmb2xpbyk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7CiAKIAlkbyB7Ci0JCW5ld19nZW4gPSAoKG9sZF9mbGFncyAmYW1wOyBMUlVfR0VOX01BU0spICZndDsmZ3Q7IExSVV9HRU5fUEdPRkYpIC0gMTsKJiM0MzsJCW5ld19nZW4gPSBscnVfZ2V0X2dlbl9mbGFncyhvbGRfZmxhZ3MpOwomIzQzOwogCQkvKiBmb2xpb191cGRhdGVfZ2VuKCkgaGFzIHByb21vdGVkIHRoaXMgcGFnZT8gKi8KIAkJaWYgKG5ld19nZW4gJmd0Oz0gMCAmYW1wOyZhbXA7IG5ld19nZW4gIT0gb2xkX2dlbikKIAkJCXJldHVybiBuZXdfZ2VuOwogCiYjNDM7CQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7CiAJCW5ld19nZW4gPSAob2xkX2dlbiAmIzQzOyAxKSAlIE1BWF9OUl9HRU5TOwotCi0JCW5ld19mbGFncyA9IG9sZF9mbGFncyAmYW1wOyB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTsKLQkJbmV3X2ZsYWdzIHw9IChuZXdfZ2VuICYjNDM7IDFVTCkgJmx0OyZsdDsgTFJVX0dFTl9QR09GRjsKLQl9IHdoaWxlICghdHJ5X2NtcHhjaGcoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwomIzQzOwkJbHJ1X3NldF9nZW5fZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIG5ld19nZW4pOwomIzQzOwkJbHJ1X3NldF9yZWZzX2ZsYWdzKCZhbXA7bmV3X2ZsYWdzLCAwKTsKJiM0MzsJfSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwogCiAJbHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTsKIApAQCAtMzMyMyw5ICYjNDM7MzMzMCw4IEBAIHN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiB9CiAKIHN0YXRpYyB2b2lkIHVwZGF0ZV9iYXRjaF9zaXplKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBmb2xpbyAqZm9saW8sCi0JCQkgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4pCiYjNDM7CQkJICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuLCBpbnQgdHlwZSkKIHsKLQlpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTsKIAlpbnQgem9uZSA9IGZvbGlvX3pvbmVudW0oZm9saW8pOwogCWludCBkZWx0YSA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKIApAQCAtMzUxMiwyMiAmIzQzOzM1MTgsMjQgQEAgc3RhdGljIGJvb2wgc3VpdGFibGVfdG9fc2NhbihpbnQgdG90YWwsIGludCB5b3VuZykKIH0KIAogc3RhdGljIHZvaWQgd2Fsa191cGRhdGVfZm9saW8oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCXN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBib29sIGRpcnR5KQomIzQzOwkJc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIGRpcnR5KQogewotCWludCBvbGRfZ2VuOwomIzQzOwlpbnQgbmV3X2dlbiwgb2xkX2dlbiwgdHlwZTsKIAogCWlmICghZm9saW8pCiAJCXJldHVybjsKIAomIzQzOwluZXdfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShSRUFEX09OQ0UobHJ1dmVjLSZndDtscnVnZW4ubWF4X3NlcSkpOwomIzQzOwogCWlmIChkaXJ0eSAmYW1wOyZhbXA7ICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSAmYW1wOyZhbXA7CiAJICAgICEoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSAmYW1wOyZhbXA7IGZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykgJmFtcDsmYW1wOwogCSAgICAgICFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpKQogCQlmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTsKIAogCWlmICh3YWxrKSB7Ci0JCW9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuLCAmYW1wO3ZtYS0mZ3Q7ZmxhZ3MpOwomIzQzOwkJb2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sICZhbXA7dHlwZSwgJmFtcDt2bWEtJmd0O2ZsYWdzKTsKIAkJaWYgKG9sZF9nZW4gJmd0Oz0gMCAmYW1wOyZhbXA7IG9sZF9nZW4gIT0gbmV3X2dlbikKLQkJCXVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTsKJiM0MzsJCQl1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbiwgdHlwZSk7CiAJfSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCAmYW1wO3ZtYS0mZ3Q7ZmxhZ3MpKSB7CiAJCW9sZF9nZW4gPSBmb2xpb19scnVfZ2VuKGZvbGlvKTsKIAkJaWYgKG9sZF9nZW4gJmd0Oz0gMCAmYW1wOyZhbXA7IG9sZF9nZW4gIT0gbmV3X2dlbikKQEAgLTM1NDksOCAmIzQzOzM1NTcsNiBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIAlzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy0mZ3Q7cHJpdmF0ZTsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay0mZ3Q7bHJ1dmVjKTsKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstJmd0O2xydXZlYyk7Ci0JREVGSU5FX01BWF9TRVEod2Fsay0mZ3Q7bHJ1dmVjKTsKLQlpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTsKIAl1bnNpZ25lZCBpbnQgbnI7CiAJcG1kX3QgcG1kdmFsOwogCkBAIC0zNjAxLDcgJiM0MzszNjA3LDcgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCQljb250aW51ZTsKIAogCQlpZiAobGFzdCAhPSBmb2xpbykgewotCQkJd2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy0mZ3Q7dm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJCQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLSZndDt2bWEsIHdhbGstJmd0O2xydXZlYywgbGFzdCwgZGlydHkpOwogCiAJCQlsYXN0ID0gZm9saW87CiAJCQlkaXJ0eSA9IGZhbHNlOwpAQCAtMzYxNCw3ICYjNDM7MzYyMCw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQl3YWxrLSZndDttbV9zdGF0c1tNTV9MRUFGX1lPVU5HXSAmIzQzOz0gbnI7CiAJfQogCi0Jd2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy0mZ3Q7dm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJd2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy0mZ3Q7dm1hLCB3YWxrLSZndDtscnV2ZWMsIGxhc3QsIGRpcnR5KTsKIAlsYXN0ID0gTlVMTDsKIAogCWlmIChpICZsdDsgUFRSU19QRVJfUFRFICZhbXA7JmFtcDsgZ2V0X25leHRfdm1hKFBNRF9NQVNLLCBQQUdFX1NJWkUsIGFyZ3MsICZhbXA7c3RhcnQsICZhbXA7ZW5kKSkKQEAgLTM2MzcsOCAmIzQzOzM2NDMsNiBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYQogCXN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLSZndDtwcml2YXRlOwogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLSZndDtscnV2ZWMpOwogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQod2Fsay0mZ3Q7bHJ1dmVjKTsKLQlERUZJTkVfTUFYX1NFUSh3YWxrLSZndDtscnV2ZWMpOwotCWludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpOwogCiAJVk1fV0FSTl9PTl9PTkNFKHB1ZF9sZWFmKCpwdWQpKTsKIApAQCAtMzY5Miw3ICYjNDM7MzY5Niw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhCiAJCQlnb3RvIG5leHQ7CiAKIAkJaWYgKGxhc3QgIT0gZm9saW8pIHsKLQkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CQkJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCB3YWxrLSZndDtscnV2ZWMsIGxhc3QsIGRpcnR5KTsKIAogCQkJbGFzdCA9IGZvbGlvOwogCQkJZGlydHkgPSBmYWxzZTsKQEAgLTM3MDYsNyAmIzQzOzM3MTAsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYQogCQlpID0gaSAmZ3Q7IE1JTl9MUlVfQkFUQ0ggPyAwIDogZmluZF9uZXh0X2JpdChiaXRtYXAsIE1JTl9MUlVfQkFUQ0gsIGkpICYjNDM7IDE7CiAJfSB3aGlsZSAoaSAmbHQ7PSBNSU5fTFJVX0JBVENIKTsKIAotCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay0mZ3Q7bHJ1dmVjLCBsYXN0LCBkaXJ0eSk7CiAKIAlsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTsKIAlzcGluX3VubG9jayhwdGwpOwpAQCAtNDI3MCw4ICYjNDM7NDI3NCw2IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucikKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gZm9saW9fcGdkYXQoZm9saW8pOwogCXN0cnVjdCBscnV2ZWMgKmxydXZlYzsKIAlzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGU7Ci0JdW5zaWduZWQgbG9uZyBtYXhfc2VxOwotCWludCBnZW47CiAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKHB2bXctJmd0O3B0bCk7CiAJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSwgZm9saW8pOwpAQCAtNDMwOCw4ICYjNDM7NDMxMCw2IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucikKIAogCW1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7CiAJbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTsKLQltYXhfc2VxID0gUkVBRF9PTkNFKChscnV2ZWMpLSZndDtscnVnZW4ubWF4X3NlcSk7Ci0JZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTsKIAltbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpOwogCiAJbGF6eV9tbXVfbW9kZV9lbmFibGUoKTsKQEAgLTQzNDEsNyAmIzQzOzQzNDEsNyBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpCiAJCQljb250aW51ZTsKIAogCQlpZiAobGFzdCAhPSBmb2xpbykgewotCQkJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJCQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxydXZlYywgbGFzdCwgZGlydHkpOwogCiAJCQlsYXN0ID0gZm9saW87CiAJCQlkaXJ0eSA9IGZhbHNlOwpAQCAtNDM1MywxMyAmIzQzOzQzNTMsMTQgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKQogCQl5b3VuZyAmIzQzOz0gbnI7CiAJfQogCi0Jd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTsKIAogCWxhenlfbW11X21vZGVfZGlzYWJsZSgpOwogCiAJLyogZmVlZGJhY2sgZnJvbSBybWFwIHdhbGtlcnMgdG8gcGFnZSB0YWJsZSB3YWxrZXJzICovCiAJaWYgKG1tX3N0YXRlICZhbXA7JmFtcDsgc3VpdGFibGVfdG9fc2NhbihpLCB5b3VuZykpCi0JCXVwZGF0ZV9ibG9vbV9maWx0ZXIobW1fc3RhdGUsIG1heF9zZXEsIHB2bXctJmd0O3BtZCk7CiYjNDM7CQl1cGRhdGVfYmxvb21fZmlsdGVyKG1tX3N0YXRlLCBSRUFEX09OQ0UobHJ1dmVjLSZndDtscnVnZW4ubWF4X3NlcSksCiYjNDM7CQkJCSAgICBwdm13LSZndDtwbWQpOwogCiAJbWVtX2Nncm91cF9wdXQobWVtY2cpOwogCkBAIC00NzE2LDcgJiM0Mzs0NzE3LDcgQEAgc3RhdGljIGJvb2wgaXNvbGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2EKIAogCS8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqLwogCWlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSkKLQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19NQVNLLCAwKTsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7CiAKIAlzdWNjZXNzID0gbHJ1X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7CiAJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFzdWNjZXNzLCBmb2xpbyk7CkBAIC00ODA5LDkgJiM0Mzs0ODEwLDkgQEAgc3RhdGljIGludCBnZXRfdGllcl9pZHgoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSkKIAkgKiBUaGlzIHZhbHVlIGlzIGNob3NlbiBiZWNhdXNlIGFueSBvdGhlciB0aWVyIHdvdWxkIGhhdmUgYXQgbGVhc3QgdHdpY2UKIAkgKiBhcyBtYW55IHJlZmF1bHRzIGFzIHRoZSBmaXJzdCB0aWVyLgogCSAqLwotCXJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCAwLCAyLCAmYW1wO3NwKTsKLQlmb3IgKHRpZXIgPSAxOyB0aWVyICZsdDsgTUFYX05SX1RJRVJTOyB0aWVyJiM0MzsmIzQzOykgewotCQlyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdGllciwgMywgJmFtcDtwdik7CiYjNDM7CXJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01JTiwgMiwgJmFtcDtzcCk7CiYjNDM7CWZvciAodGllciA9IExSVV9USUVSX01JTiAmIzQzOyAxOyB0aWVyICZsdDs9IExSVV9USUVSX01BWDsgdGllciYjNDM7JiM0MzspIHsKJiM0MzsJCXJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0aWVyLCB0aWVyLCAzLCAmYW1wO3B2KTsKIAkJaWYgKCFwb3NpdGl2ZV9jdHJsX2VycigmYW1wO3NwLCAmYW1wO3B2KSkKIAkJCWJyZWFrOwogCX0KQEAgLTQ4MzIsOCAmIzQzOzQ4MzMsMTAgQEAgc3RhdGljIGludCBnZXRfdHlwZV90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpCiAJICogQ29tcGFyZSB0aGUgc3VtIG9mIGFsbCB0aWVycyBvZiBhbm9uIHdpdGggdGhhdCBvZiBmaWxlIHRvIGRldGVybWluZQogCSAqIHdoaWNoIHR5cGUgdG8gc2Nhbi4KIAkgKi8KLQlyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBNQVhfTlJfVElFUlMsIHN3YXBwaW5lc3MsICZhbXA7c3ApOwotCXJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIE1BWF9OUl9USUVSUywgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCAmYW1wO3B2KTsKJiM0MzsJcmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fQU5PTiwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NQVgsCiYjNDM7CQkgICAgICBzd2FwcGluZXNzLCAmYW1wO3NwKTsKJiM0MzsJcmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NQVgsCiYjNDM7CQkgICAgICBNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3MsICZhbXA7cHYpOwogCiAJcmV0dXJuIHBvc2l0aXZlX2N0cmxfZXJyKCZhbXA7c3AsICZhbXA7cHYpOwogfQpAQCAtNDkzMiw4ICYjNDM7NDkzNSwxMCBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJfQogCiAJCS8qIGRvbiYjMzk7dCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqLwotCQlpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pCi0JCQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfYWN0aXZlKSk7CiYjNDM7CQlpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pIHsKJiM0MzsJCQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwomIzQzOwkJCWZvbGlvX3NldF9hY3RpdmUoZm9saW8pOwomIzQzOwkJfQogCX0KIAogCW1vdmVfZm9saW9zX3RvX2xydSgmYW1wO2xpc3QpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYyMgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDU1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgaXQgd2FycmFudHMgc29tZSBmdXp6aW5nIGVmZm9ydHMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBmb2N1c2VkIG9uIGlkZW50aWZ5aW5nIGZ1bmN0aW9uYWwgY2hhbmdlcywgZmlndXJpbmcgb3V0IHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucywgYW5kIHBpbnBvaW50aW5nIGtleSBzeW1ib2xzIHRoYXQgbWlnaHQgYmUgaW50ZXJlc3RpbmcgdGFyZ2V0cy4KCkxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCB0b3VjaGVzIGEgZmFpciBudW1iZXIgb2YgZmlsZXMgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY29udHJvbC4gVGhlIHByaW1hcnkgZmlsZXMgdGhhdCBzdGFuZCBvdXQgYXJlIGBtZW1jb250cm9sLmhgLCBgbW1faW5saW5lLmhgLCBgbW16b25lLmhgLCBgZm9saW8uY2AsIGBtZW1jb250cm9sLmNgLCBgbWlncmF0ZS5jYCBhbmQgYHZtc2Nhbi5jYC4KClNwZWNpZmljYWxseSwgSSBzZWUgYSBjaGFuZ2UgaW4gYG1lbWNvbnRyb2wuaGAgd2hlcmUgYGxydV96b25lX3NpemVgIGluIHRoZSBgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGVgIGlzIGNoYW5nZWQgZnJvbSBgdW5zaWduZWQgbG9uZ2AgdG8gYGxvbmdgLiBUaGVyZSYjMzk7cyBhbHNvIGEgYFdBUk5fT05fT05DRWAgY2hlY2sgdGhhdCBtaWdodCBiZSBpbnRlcmVzdGluZy4gVGhlIHVwZGF0ZXMgaW4gYG1tX2lubGluZS5oYCBsb29rIGxpa2UgcmVmYWN0b3JpbmcsIHJlcGxhY2luZyBkaXJlY3Qgc3RydWN0IGZpZWxkIGFjY2VzcyB3aXRoIGBmb2xpb19mbGFncyhmb2xpbywgMClgLiBXZSBhbHNvIHNlZSB1cGRhdGVzIHRvIHRoaW5ncyBsaWtlIExSVSB0aWVycyBhbmQgcmVmZXJlbmNlcyAoYExSVV9USUVSX01JTmAsIGBMUlVfUkVGU19NQVhgKSBkZWZpbmVkIGluIGBtbXpvbmUuaGAuIGBmb2xpby5jYCBoYXMgc29tZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gTFJVIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIGBtZW1jb250cm9sLmNgIGhhcyBhIHNpbXBsaWZpY2F0aW9uIG9mIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAuIFdlIHNlZSB0aGF0IGBtaWdyYXRlLmNgIGFsc28gY2FsbHMgYGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnNgLiBgdm1zY2FuLmNgIGFwcGVhcnMgdG8gYmUgZ2V0dGluZyB0aGUgbW9zdCBhdHRlbnRpb24gaW4gdGVybXMgb2YgbmV3IGZ1bmN0aW9ucywgd2l0aCBhIGxvdCBvZiBMUlUtcmVsYXRlZCBmdW5jdGlvbnMuCgpOb3csIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlci4gSSYjMzk7bGwgcHJvYmFibHkgZmlyZSB1cCBgZ3JlcHBlcmAgb3IgYSBzaW1pbGFyIHRvb2wgdG8gZGV0ZXJtaW5lIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcyBhbmQgdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMuIFRoYXQgd2lsbCBoZWxwIG1lIHplcm8gaW4gb24gdGhlIHBhcnRzIG9mIHRoZSBjb2RlIG1vc3QgbGlrZWx5IHRvIGJlIHN1c2NlcHRpYmxlIHRvIGZ1enppbmcuIEkmIzM5O2xsIG5lZWQgdG8gZmluZCBmdW5jdGlvbnMgdGhhdCBhcmUgZXhwb3NlZCBvciBhY2Nlc3NpYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBMUlVfR0VOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTM5Mz1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXG4tLVxubW0vS2NvbmZpZy0xNDAzLSMgbXVsdGktZ2VuIExSVSB7XG5tbS9LY29uZmlnOjE0MDQ6Y29uZmlnIExSVV9HRU5cbm1tL0tjb25maWctMTQwNS1cdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQxMi1cbm1tL0tjb25maWc6MTQxMzpjb25maWcgTFJVX0dFTl9FTkFCTEVEXG5tbS9LY29uZmlnLTE0MTQtXHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDE4LVxubW0vS2NvbmZpZzoxNDE5OmNvbmZpZyBMUlVfR0VOX1NUQVRTXG5tbS9LY29uZmlnLTE0MjAtXHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTQyNy1cbm1tL0tjb25maWc6MTQyODpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcbm1tL0tjb25maWctMTQyOS1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg3NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIHBhcnRpY3VsYXIgZmVhdHVyZSBpcyBiZWluZyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFyb3VuZCBsaW5lIDE0MDAuIFRoYXQmIzM5O3MgdXN1YWxseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LXJlbGF0ZWQgY29uZmlndXJhdGlvbnMsIGF0IGxlYXN0IGJhc2VkIG9uIG15IHBhc3QgZXhwZXJpZW5jZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgcmVsZXZhbnQgYGNvbmZpZ2Agb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBtYXliZSBldmVuIHNvbWUgaGVscCB0ZXh0IHRoYXQgb3V0bGluZXMgdGhlIHB1cnBvc2UgYW5kIGltcGxpY2F0aW9ucyBvZiB0aGUgZmVhdHVyZSBJJiMzOTttIGludGVyZXN0ZWQgaW4uIEkmIzM5O20gZ29pbmcgdG8gc2NhbiB0aGF0IHNlY3Rpb24gZm9yIGNsdWVzLCBsb29raW5nIGZvciBrZXl3b3JkcyB0aGF0IGFsaWduIHdpdGggdGhlIHNwZWNpZmljIGFyZWEgSSYjMzk7bSB0cnlpbmcgdG8gdW5kZXJzdGFuZC4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgdHJhY2UgdGhyb3VnaCBhbnkgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIHRoZSBvcHRpb25zIG1pZ2h0IGhhdmUgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgY29uZmlndXJhdGlvbiBzeXN0ZW0sIHVzaW5nIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIEtjb25maWcgbGFuZ3VhZ2UgdG8gaW5mZXIgdGhlIGxvZ2ljLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgYnVpbGQgYSBtZW50YWwgbWFwIG9mIHdoZXJlIHRoaXMgc2V0dGluZyBmaXRzIGludG8gdGhlIGJyb2FkZXIgbWVtb3J5IG1hbmFnZW1lbnQgZnJhbWV3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQwMDpcdFx0ICBwdXJwb3Nlcy4gIEl0IGlzIHJlcXVpcmVkIHRvIGVuYWJsZSB1c2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIG9uXG4xNDAxOlx0XHQgIGZpbGUtYmFja2VkIG1lbW9yeSB0eXBlcyBsaWtlIHNobWVtIGFuZCBodWdldGxiZnMuXG4xNDAyOlx0XG4xNDAzOlx0IyBtdWx0aS1nZW4gTFJVIHtcbjE0MDQ6XHRjb25maWcgTFJVX0dFTlxuMTQwNTpcdFx0Ym9vbCBcJiMzNDtNdWx0aS1HZW4gTFJVXCYjMzQ7XG4xNDA2Olx0XHRkZXBlbmRzIG9uIE1NVVxuMTQwNzpcdFx0IyBtYWtlIHN1cmUgZm9saW8tXHUwMDNlZmxhZ3MgaGFzIGVub3VnaCBzcGFyZSBiaXRzXG4xNDA4Olx0XHRkZXBlbmRzIG9uIDY0QklUIHx8ICFTUEFSU0VNRU0gfHwgU1BBUlNFTUVNX1ZNRU1NQVBcbjE0MDk6XHRcdGhlbHBcbjE0MTA6XHRcdCAgQSBoaWdoIHBlcmZvcm1hbmNlIExSVSBpbXBsZW1lbnRhdGlvbiB0byBvdmVyY29tbWl0IG1lbW9yeS4gU2VlXG4xNDExOlx0XHQgIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscy5cbjE0MTI6XHRcbjE0MTM6XHRjb25maWcgTFJVX0dFTl9FTkFCTEVEXG4xNDE0Olx0XHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4xNDE1Olx0XHRkZXBlbmRzIG9uIExSVV9HRU5cbjE0MTY6XHRcdGhlbHBcbjE0MTc6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbXVsdGktZ2VuIExSVSBieSBkZWZhdWx0LlxuMTQxODpcdFxuMTQxOTpcdGNvbmZpZyBMUlVfR0VOX1NUQVRTXG4xNDIwOlx0XHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xuMTQyMTpcdFx0ZGVwZW5kcyBvbiBMUlVfR0VOXG4xNDIyOlx0XHRoZWxwXG4xNDIzOlx0XHQgIERvIG5vdCBlbmFibGUgdGhpcyBvcHRpb24gdW5sZXNzIHlvdSBwbGFuIHRvIGxvb2sgYXQgaGlzdG9yaWNhbCBzdGF0c1xuMTQyNDpcdFx0ICBmcm9tIGV2aWN0ZWQgZ2VuZXJhdGlvbnMgZm9yIGRlYnVnZ2luZyBwdXJwb3NlLlxuMTQyNTpcdFxuMTQyNjpcdFx0ICBUaGlzIG9wdGlvbiBoYXMgYSBwZXItbWVtY2cgYW5kIHBlci1ub2RlIG1lbW9yeSBvdmVyaGVhZC5cbjE0Mjc6XHRcbjE0Mjg6XHRjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcbjE0Mjk6XHRcdGRlZl9ib29sIHlcbjE0MzA6XHRcdGRlcGVuZHMgb24gTFJVX0dFTiBcdTAwMjZcdTAwMjYgQVJDSF9IQVNfSFdfUFRFX1lPVU5HXG4xNDMxOlx0IyB9XG4xNDMyOlx0XG4xNDMzOlx0Y29uZmlnIEFSQ0hfU1VQUE9SVFNfUEVSX1ZNQV9MT0NLXG4xNDM0Olx0ICAgICAgIGRlZl9ib29sIG5cbjE0MzU6XHRcbjE0MzY6XHRjb25maWcgUEVSX1ZNQV9MT0NLXG4xNDM3Olx0XHRkZWZfYm9vbCB5XG4xNDM4Olx0XHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfUEVSX1ZNQV9MT0NLIFx1MDAyNlx1MDAyNiBNTVUgXHUwMDI2XHUwMDI2IFNNUFxuMTQzOTpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzM0CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgRGVlcGVyIGludG8gTWVtb3J5IE1hbmFnZW1lbnQgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCB0aGVzZSBgbWVtX2Nncm91cGAgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCBhbmQgYG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemVgLiBUaGV5JiMzOTtyZSByaWdodCB0aGVyZSBpbiBgbW0vbWVtY29udHJvbC5jYC4gU2luY2UgdGhleSBhcmUgcmVsYXRlZCB0byBjZ3JvdXBzIGFuZCBtZW1vcnksIEkgc2hvdWxkIHJlYWxseSBjaXJjbGUgYmFjayBhbmQgbWFrZSBzdXJlIHRvIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIHRoYXQgY29udHJvbCBNRU1DRyBmdW5jdGlvbmFsaXR5LiBJdCYjMzk7cyB0b28gZWFzeSB0byBtaXNzIHNvbWV0aGluZyBsaWtlIGEgZGVwZW5kZW5jeSBvciBhIGNvbmZpZ3VyYXRpb24gZmxhZyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IGhlcmUuIExldCYjMzk7cyBtYWtlIHN1cmUgd2UgYXJlbiYjMzk7dCBvdmVybG9va2luZyBhbnkgY3J1Y2lhbCBzZXR0aW5ncyBiZWZvcmUgZ29pbmcgZnVydGhlci4gVGhpcyBpcyBhIGNyaXRpY2FsIGFyZWEsIGFuZCBhIGRlZXAgZGl2ZSBjYW4gYmUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiByb2J1c3QgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGEgc3VidGxlIGJ1Zy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNzU9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4tLVxuaW5pdC9LY29uZmlnLTEwODQtXG5pbml0L0tjb25maWc6MTA4NTpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy0xMDg2LVx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMDkzLVxuaW5pdC9LY29uZmlnOjEwOTQ6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbmluaXQvS2NvbmZpZy0xMDk1LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMTAwLVxuaW5pdC9LY29uZmlnOjExMDE6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbml0L0tjb25maWctMTEwMi1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTEwNy1cbmluaXQvS2NvbmZpZzoxMTA4OmNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTExMDktXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDIxOAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYG1tL21pZ3JhdGUuY2AgQ29uZmlndXJhdGlvbnMqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgZGV0YWlscy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBtaWdyYXRpb24gY29uZmlndXJhdGlvbnMgd2l0aGluIGBtbS9taWdyYXRlLmNgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHBhcmFtZXRlcnMgYW5kIGZsYWdzIHRoYXQgZ292ZXJuIGhvdyBwYWdlcyBhcmUgbW92ZWQgYmV0d2VlbiB6b25lcyBhbmQgbm9kZXMsIGFuZCB0aGUgdmFyaW91cyBzdHJhdGVnaWVzIGVtcGxveWVkLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGlzIG9wdGltYWwgZm9yIHRoZSB3b3JrbG9hZCBhbmQgaGFyZHdhcmUgSSYjMzk7bSBkZWFsaW5nIHdpdGguIEkmIzM5O20gZ29pbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaGV1cmlzdGljcyBhbmQgdGhyZXNob2xkcyByZWxhdGVkIHRvIE5VTUEgYmFsYW5jaW5nLCB6b25lIHJlY2xhaW0sIGFuZCBhbnkgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIHRoZSBwYWdlIGFsbG9jYXRvci4gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgYnkgcmV2aWV3aW5nIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIHRoYXQgc2V0IHRoZXNlIHBhcmFtZXRlcnMgYW5kIHRoZW4gdHJhY2UgdGhlaXIgdXNhZ2UuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgdGhlIHRyYWRlLW9mZnMgYmV0d2VlbiBwZXJmb3JtYW5jZSBhbmQgbWVtb3J5IHV0aWxpemF0aW9uIHVuZGVyIGRpZmZlcmVudCBtaWdyYXRpb24gc2NlbmFyaW9zLiBJIGFsc28gd2FudCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG9idmlvdXMgbG9jayBjb250ZW50aW9uIGlzc3VlcyBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHdpdGhpbiB0aGUgbWlncmF0aW9uIGNvZGUgcGF0aHMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUlHUkFUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTU4Mj1jb25maWcgTUVNT1JZX0hPVFJFTU9WRVxubW0vS2NvbmZpZy01ODMtXHRib29sIFwmIzM0O0FsbG93IGZvciBtZW1vcnkgaG90IHJlbW92ZVwmIzM0O1xubW0vS2NvbmZpZzo1ODQ6XHRzZWxlY3QgTUlHUkFUSU9OXG5tbS9LY29uZmlnLTU4NS1cbi0tXG5tbS9LY29uZmlnPTYyNT1jb25maWcgQkFMTE9PTlxuLS1cbm1tL0tjb25maWctNjI5LSMgc3VwcG9ydCBmb3IgbWVtb3J5IGJhbGxvb24gcGFnZSBtaWdyYXRpb25cbm1tL0tjb25maWc6NjMwOmNvbmZpZyBCQUxMT09OX01JR1JBVElPTlxubW0vS2NvbmZpZy02MzEtXHRib29sIFwmIzM0O0FsbG93IGZvciBiYWxsb29uIG1lbW9yeSBtaWdyYXRpb25cJiMzNDtcbm1tL0tjb25maWctNjMyLVx0ZGVmYXVsdCB5XG5tbS9LY29uZmlnOjYzMzpcdGRlcGVuZHMgb24gTUlHUkFUSU9OIFx1MDAyNlx1MDAyNiBCQUxMT09OXG5tbS9LY29uZmlnLTYzNC1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTY0Mj1jb25maWcgQ09NUEFDVElPTlxuLS1cbm1tL0tjb25maWctNjQ0LVx0ZGVmYXVsdCB5XG5tbS9LY29uZmlnOjY0NTpcdHNlbGVjdCBNSUdSQVRJT05cbm1tL0tjb25maWctNjQ2LVx0ZGVwZW5kcyBvbiBNTVVcbi0tXG5tbS9LY29uZmlnPTY2NT1jb25maWcgUEFHRV9SRVBPUlRJTkdcbi0tXG5tbS9LY29uZmlnLTY3Mi1cbm1tL0tjb25maWc6NjczOmNvbmZpZyBOVU1BX01JR1JBVElPTlxubW0vS2NvbmZpZy02NzQtXHRib29sIFwmIzM0O05VTUEgcGFnZSBtaWdyYXRpb25cJiMzNDtcbi0tXG5tbS9LY29uZmlnLTY3Ni1cdGRlcGVuZHMgb24gTlVNQSBcdTAwMjZcdTAwMjYgTU1VXG5tbS9LY29uZmlnOjY3NzpcdHNlbGVjdCBNSUdSQVRJT05cbm1tL0tjb25maWctNjc4LVx0aGVscFxuLS1cbm1tL0tjb25maWctNjgzLVxubW0vS2NvbmZpZzo2ODQ6Y29uZmlnIE1JR1JBVElPTlxubW0vS2NvbmZpZy02ODUtXHRib29sXG4tLVxubW0vS2NvbmZpZy02ODctXG5tbS9LY29uZmlnOjY4ODpjb25maWcgREVWSUNFX01JR1JBVElPTlxubW0vS2NvbmZpZzo2ODk6XHRkZWZfYm9vbCBNSUdSQVRJT04gXHUwMDI2XHUwMDI2IFpPTkVfREVWSUNFXG5tbS9LY29uZmlnLTY5MC1cbm1tL0tjb25maWc6NjkxOmNvbmZpZyBBUkNIX0VOQUJMRV9IVUdFUEFHRV9NSUdSQVRJT05cbm1tL0tjb25maWctNjkyLVx0Ym9vbFxuLS1cbm1tL0tjb25maWc9NzY1PWNvbmZpZyBNRU1PUllfRkFJTFVSRVxuLS1cbm1tL0tjb25maWctNzY5LVx0c2VsZWN0IElOVEVSVkFMX1RSRUVcbm1tL0tjb25maWc6NzcwOlx0c2VsZWN0IE1JR1JBVElPTlxubW0vS2NvbmZpZy03NzEtXHRoZWxwXG4tLVxubW0vS2NvbmZpZz0xMDU2PWNvbmZpZyBDTUFcbi0tXG5tbS9LY29uZmlnLTEwNTgtXHRkZXBlbmRzIG9uIE1NVVxubW0vS2NvbmZpZzoxMDU5Olx0c2VsZWN0IE1JR1JBVElPTlxubW0vS2NvbmZpZy0xMDYwLVx0c2VsZWN0IE1FTU9SWV9JU09MQVRJT05cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwOTMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgTXVsdGktR2VuIExSVSBTdWJzeXN0ZW06IEEgRGVlcCBEaXZlKioKCk9rYXksIHNvIExSVV9HRU4gaXMgdGhlIE11bHRpLUdlbiBMUlUgc3Vic3lzdGVtIOKAkyB0aGF04oCZcyB0aGUgdGhpbmcgaW4gTGludXggdGhhdCBkZWFscyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgaW4gYG1tL3Ztc2Nhbi5jYCwgYG1tL2ZvbGlvLmNgLCBgaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaGAsIGBpbmNsdWRlL2xpbnV4L21tem9uZS5oYCwgYW5kIGBtbS9tZW1jb250cm9sLmNgLiAgVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGZ1bmN0aW9uYWwgY2hhbmdlIHNpZ25pZmljYW50IGVub3VnaCB0byB3YXJyYW50IGZ1enppbmc/CgpMZXQmIzM5O3MgYnJlYWsgZG93biB0aGVzZSBjaGFuZ2VzIHRvIHNlZSBpZiB0aGV5IGFyZSB3b3J0aCB0aGUgZnV6emluZyBlZmZvcnQuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGlzIHJlZmFjdG9yaW5nIGFuZCBmaXhpbmcgaG93IHRoZSBtdWx0aS1nZW4gTFJVIHJlZmVyZW5jZSBiaXQgbWFuaXB1bGF0aW9uLCBnZW5lcmF0aW9uIHRyYWNraW5nLCBhbmQgdGllciBjYWxjdWxhdGlvbnMgYXJlIGRvbmUuIFNwZWNpZmljYWxseSwgdGhpcyB0b3VjaGVzIGNvZGUgcmVsYXRlZCB0byBgcmVhZF9jdHJsX3Bvc2AsIGBmb2xpb191cGRhdGVfZ2VuYCwgYGZvbGlvX2luY19nZW5gLCBgd2Fsa191cGRhdGVfZm9saW9gLCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAsIGBmb2xpb19taWdyYXRlX2ZsYWdzYCwgYW5kIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAuICBUaGVzZSBhcmUgY29yZSBmdW5jdGlvbnMgdGhhdCBJLCBhcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhLCByZWNvZ25pemUgYXMgYmVpbmcgYXQgdGhlIGhlYXJ0IG9mIG1lbW9yeSByZWNsYWltL3BhZ2UgYWdpbmcvbWlncmF0aW9uIGxvZ2ljIGluIE1HTFJVIChNdWx0aS1HZW4gTFJVKSwgYW5kIG1lbWNnIExSVSBhY2NvdW50aW5nLgoKRXNzZW50aWFsbHksIHRoaXMgZGlyZWN0bHkgbW9kaWZpZXMgY3JpdGljYWwgbG9naWMgZm9yIHBhZ2UgcmVjbGFtYXRpb24sIGdlbmVyYXRpb24gYWR2YW5jZW1lbnQsIHRpZXIgY2xhc3NpZmljYXRpb24sIGZvbGlvIGZsYWcgYml0IGNvbXBhcmUtYW5kLXN3YXAgbG9vcHMsIGFuZCBtZW1jZyBMUlUgem9uZSBzaXplIGNhbGN1bGF0aW9uLiBUaGlzIGlzIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQmIzM5O3MgaGl0IGR1cmluZyAqc3RhbmRhcmQqIGtlcm5lbCBleGVjdXRpb24g4oCTIG1lbW9yeSBhbGxvY2F0aW9uLCByZWNsYW1hdGlvbiwgcGFnaW5nLCBtZW1vcnkgY2dyb3VwcywgYW5kIG1pZ3JhdGlvbiwgYWxsIG9mIHdoaWNoIGFyZSBjb21tb24gb3BlcmF0aW9ucy4gIFNvIHllcywgYWJzb2x1dGVseSwgdGhpcyBpcyAqKmRlZmluaXRlbHkqKiB3b3J0aCBmdXp6aW5nIQoKTm93LCBmb3IgdGhlIG5leHQgcGhhc2U6IExldCYjMzk7cyBmb2N1cyBvdXIgZWZmb3J0cy4gIFRvIGRldGVybWluZSB0aGUgbW9zdCBpbXBhY3RmdWwgc3ltYm9scyB0byB0YXJnZXQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyB3ZXJlIG1vZGlmaWVkIG9yLCBtb3JlIGltcG9ydGFudGx5LCBhcmUgZ2xvYmFsIGVudHJ5cG9pbnRzIGZvciB0aGlzIGxvZ2ljLiBJIG5lZWQgdG8gc2VhcmNoIHRocm91Z2ggYG1tL3Ztc2Nhbi5jYCwgYG1tL2ZvbGlvLmNgLCBgbW0vbWVtY29udHJvbC5jYCwgYW5kIGBtbS9taWdyYXRlLmNgIGZvciBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMg4oCTIG9yIGFueSBmdW5jdGlvbnMgdGhhdCBjYWxsIGRpcmVjdGx5IGludG8gdGhlIG1vZGlmaWVkIGNvZGUuCgpMZXQgbWUgdGFrZSBhIGxvb2sgYXQgYGxydV9nZW5fbG9va19hcm91bmRgIGluIGBtbS92bXNjYW4uY2AuIElzIHRoYXQgYSBnbG9iYWwgc3ltYm9sPyBMZXQmIzM5O3MgY2hlY2sgaXRzIGRlZmluaXRpb24gYW5kIGRlY2xhcmF0aW9uIHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5fbG9va19hcm91bmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcm1hcC5jPTkxOD1zdGF0aWMgYm9vbCBmb2xpb19yZWZlcmVuY2VkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3JtYXAuYy05ODItXHRcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkgXHUwMDI2XHUwMDI2IHB2bXcucHRlKSB7XG5tbS9ybWFwLmM6OTgzOlx0XHRcdGlmIChscnVfZ2VuX2xvb2tfYXJvdW5kKFx1MDAyNnB2bXcsIG5yKSlcbm1tL3JtYXAuYy05ODQtXHRcdFx0XHRyZWZlcmVuY2VkJiM0MzsmIzQzOztcbi0tXG5tbS92bXNjYW4uYz0yNzkxPXN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIHNlcV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4tLVxubW0vdm1zY2FuLmMtMjgyMC0gKiB3YWxrX3BtZF9yYW5nZSgpOyB0aGUgZXZpY3Rpb24gYWxzbyByZXBvcnQgdGhlbSB3aGVuIHdhbGtpbmcgdGhlIHJtYXBcbm1tL3Ztc2Nhbi5jOjI4MjE6ICogaW4gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLlxubW0vdm1zY2FuLmMtMjgyMi0gKlxuLS1cbm1tL3Ztc2Nhbi5jPTQwNzQ9c3RhdGljIGJvb2wgdHJ5X3RvX2luY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXG4tLVxubW0vdm1zY2FuLmMtNDA5My1cdCAqIElmIHRoZSBoYXJkd2FyZSBkb2VzbiYjMzk7dCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgYWNjZXNzZWQgYml0LCBmYWxsYmFja1xubW0vdm1zY2FuLmM6NDA5NDpcdCAqIHRvIGxydV9nZW5fbG9va19hcm91bmQoKSwgd2hpY2ggb25seSBjbGVhcnMgdGhlIGFjY2Vzc2VkIGJpdCBpbiBhXG5tbS92bXNjYW4uYy00MDk1LVx0ICogaGFuZGZ1bCBvZiBQVEVzLiBTcHJlYWRpbmcgdGhlIHdvcmsgb3V0IG92ZXIgYSBwZXJpb2Qgb2YgdGltZSB1c3VhbGx5XG4tLVxubW0vdm1zY2FuLmM9NDIxMz1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTQyNTktICovXG5tbS92bXNjYW4uYzo0MjYwOmJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbm1tL3Ztc2Nhbi5jLTQyNjEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQ5NwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQsIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBhbmQgTWlncmF0aW9uIEZsYWdzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAuIEl0JiMzOTtzIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiwgbWVhbmluZyBpdCYjMzk7cyBtZWFudCB0byBiZSB1c2VkIGV4dGVybmFsbHksIGFuZCBpdCYjMzk7cyBkZWNsYXJlZCBpbiBgaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaGAgYW5kL29yIGBtbS9pbnRlcm5hbC5oYCwgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgbW0vcm1hcC5jYC4gVGhhdCBwbGFjZXMgaXQgZmlybWx5IHdpdGhpbiB0aGUgcmVhbG0gb2YgdGhlIHBhZ2UgcmVwbGFjZW1lbnQgYWxnb3JpdGhtIGFuZCByZXZlcnNlIG1hcHBpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJtYXAgY29kZS4KCk5vdywgZ2l2ZW4gdGhhdCBpdCYjMzk7cyByZWxhdGVkIHRvIExSVSBhbmQgbGlrZWx5IGludm9sdmVkIGluIHNvbWUgc29ydCBvZiBwYWdlIHNjYW5uaW5nIG9yIGxvb2stYXJvdW5kIG1lY2hhbmlzbSBmb3IgZ2VuZXJhdGluZyBMUlUgbGlzdHMsIEkgYWxzbyB3YW50IHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgbWlncmF0aW9ucyBpbnRlcmFjdCB3aXRoIHRoZSBMUlUuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGNoZWNrIGhvdyBgZm9saW9fbWlncmF0ZV9mbGFnc2AgaXMgaW1wbGVtZW50ZWQsIGVzcGVjaWFsbHkgaW4gYG1tL21pZ3JhdGUuY2AuIEkgaGF2ZSBhIGZlZWxpbmcgdGhhdCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgYW5kIHRoZSBtaWdyYXRpb24gZmxhZ3Mgd2lsbCBiZSBpbnRlcndvdmVuLCBlc3BlY2lhbGx5IGlmIHRoZSBjb2RlIGlzIGRlYWxpbmcgd2l0aCBwYWdlcyBpbiB0aGUgcHJvY2VzcyBvZiBtaWdyYXRpb24gb3IgdGhvc2UgcG90ZW50aWFsbHkgYmVpbmcgdGFyZ2V0ZWQgZm9yIG1pZ3JhdGlvbiBkdWUgdG8gdGhlIExSVSBldmljdGlvbi4gVW5kZXJzdGFuZGluZyB0aGlzIGNvbm5lY3Rpb24gaXMgY3JpdGljYWwgdG8gc2VlaW5nIHRoZSB3aG9sZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb19taWdyYXRlX2ZsYWdzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21pZ3JhdGUuYz03Mzk9aW50IG1pZ3JhdGVfaHVnZV9wYWdlX21vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9taWdyYXRlLmMtNzc0LSAqL1xubW0vbWlncmF0ZS5jOjc3NTp2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL21pZ3JhdGUuYy03NzYte1xuLS1cbm1tL21pZ3JhdGUuYy04NjMtfVxubW0vbWlncmF0ZS5jOjg2NDpFWFBPUlRfU1lNQk9MKGZvbGlvX21pZ3JhdGVfZmxhZ3MpO1xubW0vbWlncmF0ZS5jLTg2NS1cbi0tXG5tbS9taWdyYXRlLmM9ODcwPXN0YXRpYyBpbnQgX19taWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmRzdCxcbi0tXG5tbS9taWdyYXRlLmMtODkwLVxubW0vbWlncmF0ZS5jOjg5MTpcdGZvbGlvX21pZ3JhdGVfZmxhZ3MoZHN0LCBzcmMpO1xubW0vbWlncmF0ZS5jLTg5Mi1cdHJldHVybiAwO1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTEwOT1zdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI1MS1cdFx0XHRlbHNlXG5tbS9taWdyYXRlX2RldmljZS5jOjEyNTI6XHRcdFx0XHRmb2xpb19taWdyYXRlX2ZsYWdzKG5ld2ZvbGlvLCBmb2xpbyk7XG5tbS9taWdyYXRlX2RldmljZS5jLTEyNTMtXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyMDEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBndXRzIG9mIG1lbW9yeSBjZ3JvdXAgbWFuYWdlbWVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBMZWFzdCBSZWNlbnRseSBVc2VkIChMUlUpIHNpemUgaXMgdXBkYXRlZCB3aXRoaW4gYSBtZW1vcnkgY2dyb3VwLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgIGluIGBtbS9tZW1jb250cm9sLmNgLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUgY2VudHJhbCBwb2ludCBmb3IgdHJhY2tpbmcgYW5kIHJlZmxlY3RpbmcgY2hhbmdlcyB0byB0aGUgTFJVIGxpc3RzIHVzZWQgZm9yIG1lbW9yeSByZWNsYW1hdGlvbiB3aXRoaW4gZWFjaCBjZ3JvdXAuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIHdoYXQgYXJndW1lbnRzIGl0IHRha2VzLCB3aGF0IGRhdGEgc3RydWN0dXJlcyBpdCBtYW5pcHVsYXRlcywgYW5kIHdoZXJlIGl0JiMzOTtzIGNhbGxlZCBmcm9tLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciBhbiB1cGRhdGUgYW5kIGhvdyB0aGUgTFJVIHNpemUgaXMgY2FsY3VsYXRlZCBvciBhZGp1c3RlZC4gSXMgdGhpcyBhIGdsb2JhbCB1cGRhdGUsIG9yIHNwZWNpZmljIHRvIHBhcnRpY3VsYXIgbWVtb3J5IHpvbmVzPyBIb3cgZG9lcyBpdCBpbnRlcmFjdCB3aXRoIHRoZSB2YXJpb3VzIG1lbW9yeSBzdGF0cyBhbmQgdGhyZXNob2xkcz8gSG9wZWZ1bGx5LCB0aGUgc3Vycm91bmRpbmcgY29kZSB3aWxsIGdpdmUgbWUgc29tZSBjbHVlcyBhYm91dCBpdHMgcHVycG9zZSBpbiB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzY2hlbWUuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgYSBjb3JlIGVsZW1lbnQgaW4gdGhlIG1lbW9yeSBjZ3JvdXAgZXZpY3Rpb24gc3RyYXRlZ3kuIFRpbWUgdG8gZ2V0IHRvIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9mb2xpby5jPTExMjM9c3RhdGljIHZvaWQgbHJ1dmVjX3JlcGFyZW50X2xydShzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsXG4tLVxubW0vZm9saW8uYy0xMTQzLVx0XHQgKi9cbm1tL2ZvbGlvLmM6MTE0NDpcdFx0bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUocGFyZW50X2xydXZlYywgbHJ1LCB6aWQsIHNpemUpO1xubW0vZm9saW8uYzoxMTQ1Olx0XHRtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShjaGlsZF9scnV2ZWMsIGxydSwgemlkLCAtKGxvbmcpc2l6ZSk7XG5tbS9mb2xpby5jLTExNDYtXHR9XG4tLVxubW0vbWVtY29udHJvbC5jPTE1MDE9c3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxc2F2ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0xNTE4LS8qKlxubW0vbWVtY29udHJvbC5jOjE1MTk6ICogbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUgLSBhY2NvdW50IGZvciBhZGRpbmcgb3IgcmVtb3ZpbmcgYW4gbHJ1IHBhZ2Vcbm1tL21lbWNvbnRyb2wuYy0xNTIwLSAqIEBscnV2ZWM6IG1lbV9jZ3JvdXAgcGVyIHpvbmUgbHJ1IHZlY3RvclxuLS1cbm1tL21lbWNvbnRyb2wuYy0xNTI3LSAqL1xubW0vbWVtY29udHJvbC5jOjE1Mjg6dm9pZCBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LFxubW0vbWVtY29udHJvbC5jLTE1MjktXHRcdFx0XHRpbnQgemlkLCBsb25nIG5yX3BhZ2VzKVxuLS1cbm1tL3Ztc2Nhbi5jPTE1OTI9dW5zaWduZWQgaW50IHJlY2xhaW1fY2xlYW5fcGFnZXNfZnJvbV9saXN0KHN0cnVjdCB6b25lICp6b25lLFxuLS1cbm1tL3Ztc2Nhbi5jLTE2NDQtICogVXBkYXRlIExSVSBzaXplcyBhZnRlciBpc29sYXRpbmcgcGFnZXMuIFRoZSBMUlUgc2l6ZSB1cGRhdGVzIG11c3Rcbm1tL3Ztc2Nhbi5jOjE2NDU6ICogYmUgY29tcGxldGUgYmVmb3JlIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplIGR1ZSB0byBhIHNhbml0eSBjaGVjay5cbm1tL3Ztc2Nhbi5jLTE2NDYtICovXG4tLVxubW0vdm1zY2FuLmM9NDYyMT12b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxuLS1cbm1tL3Ztc2Nhbi5jLTQ2NDItXHRcdFx0LyogTW92ZSB0aGUgYWNjb3VudGluZywgZG8gbm90IGR1cGxpY2F0ZSBpdC4gKi9cbm1tL3Ztc2Nhbi5jOjQ2NDM6XHRcdFx0bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUocGFyZW50X2xydXZlYywgbHJ1LCB6aWQsIHNpemUpO1xubW0vdm1zY2FuLmM6NDY0NDpcdFx0XHRtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShjaGlsZF9scnV2ZWMsIGxydSwgemlkLCAtKGxvbmcpc2l6ZSk7XG5tbS92bXNjYW4uYy00NjQ1LVx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MTM5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBNR0xSVSBJbnRlZ3JhdGlvbiBQb2ludHMqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gaG93IE1HTFJVIGlzIGFjdHVhbGx5IGJlaW5nIHVzZWQgYW5kIGludGVncmF0ZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtLiBNeSBmaXJzdCBzdGVwIGlzIHRvIG1ldGhvZGljYWxseSBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGVudHJ5IHBvaW50cy4gSSYjMzk7bSBnb2luZyB0byBzY2FuIHRocm91Z2ggYG1tL3Ztc2Nhbi5jYCBhbmQgb3RoZXIgZmlsZXMgd2l0aGluIHRoZSBgbW1gIGRpcmVjdG9yeSB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSAqbm9uLXN0YXRpYyogZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgYWN0aW5nIGFzIGFjY2VzcyBwb2ludHMgZm9yIE1HTFJVLiBJIG5lZWQgdG8gYmUgc3VyZSBJJiMzOTttIGNhcHR1cmluZyBhbGwgdGhlIHBvdGVudGlhbCBjYWxsIHNpdGVzLiBUaGVuLCBJJiMzOTtsbCBmb2N1cyBzcGVjaWZpY2FsbHkgb24gYG1tL3Ztc2Nhbi5jYCBhbmQgemVybyBpbiBvbiB3aGF0IGNhbGxzICppbnRvKiBNR0xSVSBhcmUgbWFkZSBmcm9tIHRoZXJlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGl0cyBjb250cm9sIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5fJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDcxOCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxubW0vdm1zY2FuLmM9ODI3PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XG4tLVxubW0vdm1zY2FuLmMtODM5LSAqL1xubW0vdm1zY2FuLmM6ODQwOnN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbm1tL3Ztc2Nhbi5jLTg0MS17XG4tLVxubW0vdm1zY2FuLmMtODY0LSNlbHNlXG5tbS92bXNjYW4uYzo4NjU6c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxubW0vdm1zY2FuLmMtODY2LXtcbi0tXG5tbS92bXNjYW4uYz04NzE9c3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vdm1zY2FuLmMtODk1LVxubW0vdm1zY2FuLmM6ODk2Olx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiAhbHJ1X2dlbl9zd2l0Y2hpbmcoKSkge1xubW0vdm1zY2FuLmMtODk3LVx0XHRpZiAoIXJlZmVyZW5jZWRfcHRlcylcbi0tXG5tbS92bXNjYW4uYy04OTktXG5tbS92bXNjYW4uYzo5MDA6XHRcdHJldHVybiBscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcdTAwMjZ2bWFfZmxhZ3MpID8gRk9MSU9SRUZfQUNUSVZBVEUgOiBGT0xJT1JFRl9LRUVQO1xubW0vdm1zY2FuLmMtOTAxLVx0fVxuLS1cbm1tL3Ztc2Nhbi5jPTIyODM9c3RhdGljIHZvaWQgcHJlcGFyZV9zY2FuX2NvbnRyb2wocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtMjI4OS1cbm1tL3Ztc2Nhbi5jOjIyOTA6XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXHUwMDI2XHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpKVxubW0vdm1zY2FuLmMtMjI5MS1cdFx0cmV0dXJuO1xuLS1cbm1tL3Ztc2Nhbi5jPTI2OTc9REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UobHJ1X3N3aXRjaCk7XG5tbS92bXNjYW4uYy0yNjk4LSNpZmRlZiBDT05GSUdfTFJVX0dFTl9FTkFCTEVEXG5tbS92bXNjYW4uYzoyNjk5OkRFRklORV9TVEFUSUNfS0VZX0FSUkFZX1RSVUUobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xubW0vdm1zY2FuLmM6MjcwMDojZGVmaW5lIGdldF9jYXAoY2FwKVx0c3RhdGljX2JyYW5jaF9saWtlbHkoXHUwMDI2bHJ1X2dlbl9jYXBzW2NhcF0pXG5tbS92bXNjYW4uYy0yNzAxLSNlbHNlXG5tbS92bXNjYW4uYzoyNzAyOkRFRklORV9TVEFUSUNfS0VZX0FSUkFZX0ZBTFNFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcbm1tL3Ztc2Nhbi5jOjI3MDM6I2RlZmluZSBnZXRfY2FwKGNhcClcdHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2bHJ1X2dlbl9jYXBzW2NhcF0pXG5tbS92bXNjYW4uYy0yNzA0LSNlbmRpZlxuLS1cbm1tL3Ztc2Nhbi5jPTI3OTE9c3RhdGljIGJvb2wgX19tYXliZV91bnVzZWQgc2VxX2lzX3ZhbGlkKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbi0tXG5tbS92bXNjYW4uYy0yODIwLSAqIHdhbGtfcG1kX3JhbmdlKCk7IHRoZSBldmljdGlvbiBhbHNvIHJlcG9ydCB0aGVtIHdoZW4gd2Fsa2luZyB0aGUgcm1hcFxubW0vdm1zY2FuLmM6MjgyMTogKiBpbiBscnVfZ2VuX2xvb2tfYXJvdW5kKCkuXG5tbS92bXNjYW4uYy0yODIyLSAqXG4tLVxubW0vdm1zY2FuLmM9MjgzOD1zdGF0aWMgdm9pZCBnZXRfaXRlbV9rZXkodm9pZCAqaXRlbSwgaW50ICprZXkpXG4tLVxubW0vdm1zY2FuLmMtMjg0Ny1cbm1tL3Ztc2Nhbi5jOjI4NDg6c3RhdGljIGJvb2wgdGVzdF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSxcbm1tL3Ztc2Nhbi5jLTI4NDktXHRcdFx0ICAgICAgdm9pZCAqaXRlbSlcbi0tXG5tbS92bXNjYW4uYy0yODYzLVxubW0vdm1zY2FuLmM6Mjg2NDpzdGF0aWMgdm9pZCB1cGRhdGVfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEsXG5tbS92bXNjYW4uYy0yODY1LVx0XHRcdFx0dm9pZCAqaXRlbSlcbi0tXG5tbS92bXNjYW4uYy0yODgyLVxubW0vdm1zY2FuLmM6Mjg4MzpzdGF0aWMgdm9pZCByZXNldF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSlcbm1tL3Ztc2Nhbi5jLTI4ODQte1xuLS1cbm1tL3Ztc2Nhbi5jLTI5MDQtXG5tbS92bXNjYW4uYzoyOTA1OnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICpnZXRfbW1fbGlzdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy0yOTA2LXtcbm1tL3Ztc2Nhbi5jOjI5MDc6XHRzdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fbGlzdCBtbV9saXN0ID0ge1xubW0vdm1zY2FuLmMtMjkwOC1cdFx0LmZpZm8gPSBMSVNUX0hFQURfSU5JVChtbV9saXN0LmZpZm8pLFxuLS1cbm1tL3Ztc2Nhbi5jLTI5MjAtXG5tbS92bXNjYW4uYzoyOTIxOnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqZ2V0X21tX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbm1tL3Ztc2Nhbi5jLTI5MjIte1xuLS1cbm1tL3Ztc2Nhbi5jLTI5MjUtXG5tbS92bXNjYW4uYzoyOTI2OnN0YXRpYyBzdHJ1Y3QgbW1fc3RydWN0ICpnZXRfbmV4dF9tbShzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrKVxubW0vdm1zY2FuLmMtMjkyNy17XG4tLVxubW0vdm1zY2FuLmMtMjkzMC1cdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQod2Fsay1cdTAwM2VscnV2ZWMpO1xubW0vdm1zY2FuLmM6MjkzMTpcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZSh3YWxrLVx1MDAzZWxydXZlYyk7XG5tbS92bXNjYW4uYy0yOTMyLVxuLS1cbm1tL3Ztc2Nhbi5jLTI5NDQtXG5tbS92bXNjYW4uYzoyOTQ1OnZvaWQgbHJ1X2dlbl9hZGRfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5tbS92bXNjYW4uYy0yOTQ2LXtcbi0tXG5tbS92bXNjYW4uYy0yOTQ4LVx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSk7XG5tbS92bXNjYW4uYzoyOTQ5Olx0c3RydWN0IGxydV9nZW5fbW1fbGlzdCAqbW1fbGlzdCA9IGdldF9tbV9saXN0KG1lbWNnKTtcbm1tL3Ztc2Nhbi5jLTI5NTAtXG4tLVxubW0vdm1zY2FuLmMtMjk1OS1cdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcbm1tL3Ztc2Nhbi5jOjI5NjA6XHRcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xubW0vdm1zY2FuLmMtMjk2MS1cbi0tXG5tbS92bXNjYW4uYy0yOTcxLVxubW0vdm1zY2FuLmM6Mjk3Mjp2b2lkIGxydV9nZW5fZGVsX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxubW0vdm1zY2FuLmMtMjk3My17XG5tbS92bXNjYW4uYy0yOTc0LVx0aW50IG5pZDtcbm1tL3Ztc2Nhbi5jOjI5NzU6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICptbV9saXN0O1xubW0vdm1zY2FuLmMtMjk3Ni1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IE5VTEw7XG4tLVxubW0vdm1zY2FuLmMtMjk4OS1cdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcbm1tL3Ztc2Nhbi5jOjI5OTA6XHRcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xubW0vdm1zY2FuLmMtMjk5MS1cbi0tXG5tbS92bXNjYW4uYy0zMDExLSNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jOjMwMTI6dm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5tbS92bXNjYW4uYy0zMDEzLXtcbi0tXG5tbS92bXNjYW4uYy0zMDM1LVxubW0vdm1zY2FuLmM6MzAzNjpcdGxydV9nZW5fZGVsX21tKG1tKTtcbm1tL3Ztc2Nhbi5jOjMwMzc6XHRscnVfZ2VuX2FkZF9tbShtbSk7XG5tbS92bXNjYW4uYy0zMDM4LX1cbi0tXG5tbS92bXNjYW4uYy0zMDQyLVxubW0vdm1zY2FuLmM6MzA0MzpzdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fbGlzdCAqZ2V0X21tX2xpc3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vdm1zY2FuLmMtMzA0NC17XG4tLVxubW0vdm1zY2FuLmMtMzA0Ny1cbm1tL3Ztc2Nhbi5jOjMwNDg6c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICpnZXRfbW1fc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxubW0vdm1zY2FuLmMtMzA0OS17XG4tLVxubW0vdm1zY2FuLmMtMzA1Mi1cbm1tL3Ztc2Nhbi5jOjMwNTM6c3RhdGljIHN0cnVjdCBtbV9zdHJ1Y3QgKmdldF9uZXh0X21tKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGspXG5tbS92bXNjYW4uYy0zMDU0LXtcbi0tXG5tbS92bXNjYW4uYy0zMDU5LVxubW0vdm1zY2FuLmM6MzA2MDpzdGF0aWMgdm9pZCByZXNldF9tbV9zdGF0cyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBib29sIGxhc3QpXG5tbS92bXNjYW4uYy0zMDYxLXtcbi0tXG5tbS92bXNjYW4uYy0zMDY0LVx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gd2Fsay1cdTAwM2VscnV2ZWM7XG5tbS92bXNjYW4uYzozMDY1Olx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XG5tbS92bXNjYW4uYy0zMDY2LVxuLS1cbm1tL3Ztc2Nhbi5jLTMwODQtXG5tbS92bXNjYW4uYzozMDg1OnN0YXRpYyBib29sIGl0ZXJhdGVfbW1fbGlzdChzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3QgbW1fc3RydWN0ICoqaXRlcilcbm1tL3Ztc2Nhbi5jLTMwODYte1xuLS1cbm1tL3Ztc2Nhbi5jLTMwOTEtXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jOjMwOTI6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICptbV9saXN0ID0gZ2V0X21tX2xpc3QobWVtY2cpO1xubW0vdm1zY2FuLmM6MzA5MzpcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xubW0vdm1zY2FuLmMtMzA5NC1cbi0tXG5tbS92bXNjYW4uYz0zMTQ5PXN0YXRpYyBib29sIGl0ZXJhdGVfbW1fbGlzdF9ub3dhbGsoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSlcbi0tXG5tbS92bXNjYW4uYy0zMTUyLVx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7XG5tbS92bXNjYW4uYzozMTUzOlx0c3RydWN0IGxydV9nZW5fbW1fbGlzdCAqbW1fbGlzdCA9IGdldF9tbV9saXN0KG1lbWNnKTtcbm1tL3Ztc2Nhbi5jOjMxNTQ6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jLTMxNTUtXG4tLVxubW0vdm1zY2FuLmM9MzIwMT1zdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyX21pbixcbi0tXG5tbS92bXNjYW4uYy0zMjA0LVx0aW50IGk7XG5tbS92bXNjYW4uYzozMjA1Olx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYy0zMjA2LVx0aW50IGhpc3QgPSBscnVfaGlzdF9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG4tLVxubW0vdm1zY2FuLmM9MzIyMD1zdGF0aWMgdm9pZCByZXNldF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBib29sIGNhcnJ5b3Zlcilcbi0tXG5tbS92bXNjYW4uYy0zMjIyLVx0aW50IGhpc3QsIHRpZXI7XG5tbS92bXNjYW4uYzozMjIzOlx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYy0zMjI0LVx0Ym9vbCBjbGVhciA9IGNhcnJ5b3ZlciA/IE5SX0hJU1RfR0VOUyA9PSAxIDogTlJfSElTVF9HRU5TIFx1MDAzZSAxO1xuLS1cbm1tL3Ztc2Nhbi5jPTMyNzI9c3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBpbnQgKnR5cGUsXG4tLVxubW0vdm1zY2FuLmMtMzI5Mi1cbm1tL3Ztc2Nhbi5jOjMyOTM6XHRcdC8qIGxydV9nZW5fZGVsX2ZvbGlvKCkgaGFzIGlzb2xhdGVkIHRoaXMgcGFnZT8gKi9cbm1tL3Ztc2Nhbi5jLTMyOTQtXHRcdGlmIChvbGRfZ2VuIFx1MDAzYyAwKVxuLS1cbm1tL3Ztc2Nhbi5jPTMzMDc9c3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS92bXNjYW4uYy0zMzA5LVx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG5tbS92bXNjYW4uYzozMzEwOlx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYzozMzExOlx0aW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKTtcbm1tL3Ztc2Nhbi5jLTMzMTItXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuLS1cbm1tL3Ztc2Nhbi5jLTMzMjYtXG5tbS92bXNjYW4uYzozMzI3Olx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcbm1tL3Ztc2Nhbi5jLTMzMjgtXG4tLVxubW0vdm1zY2FuLmMtMzMzMS1cbm1tL3Ztc2Nhbi5jOjMzMzI6c3RhdGljIHZvaWQgdXBkYXRlX2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL3Ztc2Nhbi5jLTMzMzMtXHRcdFx0ICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuLCBpbnQgdHlwZSlcbi0tXG5tbS92bXNjYW4uYy0zMzQ2LVxubW0vdm1zY2FuLmM6MzM0NzpzdGF0aWMgdm9pZCByZXNldF9iYXRjaF9zaXplKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGspXG5tbS92bXNjYW4uYy0zMzQ4LXtcbi0tXG5tbS92bXNjYW4uYy0zMzUwLVx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gbHJ1dmVjX2xpdmVfbG9ja19pcnEod2Fsay1cdTAwM2VscnV2ZWMpO1xubW0vdm1zY2FuLmM6MzM1MTpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xubW0vdm1zY2FuLmMtMzM1Mi1cbi0tXG5tbS92bXNjYW4uYy0zMzY1LVxubW0vdm1zY2FuLmM6MzM2NjpcdFx0aWYgKGxydV9nZW5faXNfYWN0aXZlKGxydXZlYywgZ2VuKSlcbm1tL3Ztc2Nhbi5jLTMzNjctXHRcdFx0bHJ1ICYjNDM7PSBMUlVfQUNUSVZFO1xuLS1cbm1tL3Ztc2Nhbi5jPTMzNzQ9c3RhdGljIGludCBzaG91bGRfc2tpcF92bWEodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBtbV93YWxrICphcmdzKVxuLS1cbm1tL3Ztc2Nhbi5jLTMzNzctXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IGFyZ3MtXHUwMDNldm1hO1xubW0vdm1zY2FuLmM6MzM3ODpcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVx1MDAzZXByaXZhdGU7XG5tbS92bXNjYW4uYy0zMzc5LVxuLS1cbm1tL3Ztc2Nhbi5jPTM1MTI9c3RhdGljIGJvb2wgc3VpdGFibGVfdG9fc2NhbihpbnQgdG90YWwsIGludCB5b3VuZylcbi0tXG5tbS92bXNjYW4uYy0zNTE5LVxubW0vdm1zY2FuLmM6MzUyMDpzdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL3Ztc2Nhbi5jLTM1MjEtXHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBkaXJ0eSlcbi0tXG5tbS92bXNjYW4uYy0zNTI3LVxubW0vdm1zY2FuLmM6MzUyODpcdG5ld19nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKFJFQURfT05DRShscnV2ZWMtXHUwMDNlbHJ1Z2VuLm1heF9zZXEpKTtcbm1tL3Ztc2Nhbi5jLTM1MjktXG4tLVxubW0vdm1zY2FuLmMtMzUzOC1cdFx0XHR1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbiwgdHlwZSk7XG5tbS92bXNjYW4uYzozNTM5Olx0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpKSB7XG5tbS92bXNjYW4uYy0zNTQwLVx0XHRvbGRfZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7XG4tLVxubW0vdm1zY2FuLmM9MzU0Nj1zdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS92bXNjYW4uYy0zNTU2LVx0c3RydWN0IGZvbGlvICpsYXN0ID0gTlVMTDtcbm1tL3Ztc2Nhbi5jOjM1NTc6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cdTAwM2Vwcml2YXRlO1xubW0vdm1zY2FuLmMtMzU1OC1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVx1MDAzZWxydXZlYyk7XG4tLVxubW0vdm1zY2FuLmM9MzYzNT1zdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS92bXNjYW4uYy0zNjQyLVx0c3RydWN0IGZvbGlvICpsYXN0ID0gTlVMTDtcbm1tL3Ztc2Nhbi5jOjM2NDM6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cdTAwM2Vwcml2YXRlO1xubW0vdm1zY2FuLmMtMzY0NC1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVx1MDAzZWxydXZlYyk7XG4tLVxubW0vdm1zY2FuLmM9MzcyMT1zdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS92bXNjYW4uYy0zNzMwLVx0dW5zaWduZWQgbG9uZyBmaXJzdCA9IC0xO1xubW0vdm1zY2FuLmM6MzczMTpcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVx1MDAzZXByaXZhdGU7XG5tbS92bXNjYW4uYzozNzMyOlx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKHdhbGstXHUwMDNlbHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jLTM3MzMtXG4tLVxubW0vdm1zY2FuLmM9Mzc5ND1zdGF0aWMgaW50IHdhbGtfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3Ztc2Nhbi5jLTM4MDAtXHR1bnNpZ25lZCBsb25nIG5leHQ7XG5tbS92bXNjYW4uYzozODAxOlx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXHUwMDNlcHJpdmF0ZTtcbm1tL3Ztc2Nhbi5jLTM4MDItXG4tLVxubW0vdm1zY2FuLmMtMzgzNS1cbm1tL3Ztc2Nhbi5jOjM4MzY6c3RhdGljIHZvaWQgd2Fsa19tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaylcbm1tL3Ztc2Nhbi5jLTM4Mzcte1xuLS1cbm1tL3Ztc2Nhbi5jLTM4NzAtXG5tbS92bXNjYW4uYzozODcxOnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICpzZXRfbW1fd2FsayhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBib29sIGZvcmNlX2FsbG9jKVxubW0vdm1zY2FuLmMtMzg3Mi17XG5tbS92bXNjYW4uYzozODczOlx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGN1cnJlbnQtXHUwMDNlcmVjbGFpbV9zdGF0ZS1cdTAwM2VtbV93YWxrO1xubW0vdm1zY2FuLmMtMzg3NC1cbi0tXG5tbS92bXNjYW4uYz0zODkxPXN0YXRpYyB2b2lkIGNsZWFyX21tX3dhbGsodm9pZClcbm1tL3Ztc2Nhbi5jLTM4OTIte1xubW0vdm1zY2FuLmM6Mzg5MzpcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBjdXJyZW50LVx1MDAzZXJlY2xhaW1fc3RhdGUtXHUwMDNlbW1fd2Fsaztcbm1tL3Ztc2Nhbi5jLTM4OTQtXG4tLVxubW0vdm1zY2FuLmM9MzkwND1zdGF0aWMgYm9vbCBpbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgc3dhcHBpbmVzcylcbi0tXG5tbS92bXNjYW4uYy0zOTA3LVx0aW50IHJlbWFpbmluZyA9IE1BWF9MUlVfQkFUQ0g7XG5tbS92bXNjYW4uYzozOTA4Olx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYy0zOTA5LVx0aW50IGhpc3QgPSBscnVfaGlzdF9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG5tbS92bXNjYW4uYzozOTEwOlx0aW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKTtcbm1tL3Ztc2Nhbi5jLTM5MTEtXG4tLVxubW0vdm1zY2FuLmM9Mzk1Nz1zdGF0aWMgdm9pZCB0cnlfdG9faW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcbi0tXG5tbS92bXNjYW4uYy0zOTYwLVx0Ym9vbCBzZXFfaW5jX2ZsYWcgPSBmYWxzZTtcbm1tL3Ztc2Nhbi5jOjM5NjE6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbm1tL3Ztc2Nhbi5jLTM5NjItXHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xuLS1cbm1tL3Ztc2Nhbi5jLTM5NjgtXHRcdHdoaWxlIChtaW5fc2VxW3R5cGVdICYjNDM7IE1JTl9OUl9HRU5TIFx1MDAzYz0gbHJ1Z2VuLVx1MDAzZW1heF9zZXEpIHtcbm1tL3Ztc2Nhbi5jOjM5Njk6XHRcdFx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtaW5fc2VxW3R5cGVdKTtcbm1tL3Ztc2Nhbi5jLTM5NzAtXG4tLVxubW0vdm1zY2FuLmMtMzk4OS1cbm1tL3Ztc2Nhbi5jOjM5OTA6XHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gbHJ1X2dlbl9mb2xpbyAqL1xubW0vdm1zY2FuLmMtMzk5MS1cdGlmIChzd2FwcGluZXNzIFx1MDAyNlx1MDAyNiBzd2FwcGluZXNzIFx1MDAzYz0gTUFYX1NXQVBQSU5FU1MpIHtcbi0tXG5tbS92bXNjYW4uYz00MDA5PXN0YXRpYyBib29sIGluY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jLTQwMTMtXHRpbnQgdHlwZSwgem9uZTtcbm1tL3Ztc2Nhbi5jOjQwMTQ6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbm1tL3Ztc2Nhbi5jLTQwMTUtcmVzdGFydDpcbi0tXG5tbS92bXNjYW4uYy00MDQ0LVx0ICovXG5tbS92bXNjYW4uYzo0MDQ1Olx0cHJldiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1heF9zZXEgLSAxKTtcbm1tL3Ztc2Nhbi5jOjQwNDY6XHRuZXh0ID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWF4X3NlcSAmIzQzOyAxKTtcbm1tL3Ztc2Nhbi5jLTQwNDctXG4tLVxubW0vdm1zY2FuLmM9NDA3ND1zdGF0aWMgYm9vbCB0cnlfdG9faW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSxcbi0tXG5tbS92bXNjYW4uYy00MDc3LVx0Ym9vbCBzdWNjZXNzO1xubW0vdm1zY2FuLmM6NDA3ODpcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7XG5tbS92bXNjYW4uYy00MDc5LVx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBOVUxMO1xubW0vdm1zY2FuLmM6NDA4MDpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xubW0vdm1zY2FuLmM6NDA4MTpcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xubW0vdm1zY2FuLmMtNDA4Mi1cbi0tXG5tbS92bXNjYW4uYy00MDkzLVx0ICogSWYgdGhlIGhhcmR3YXJlIGRvZXNuJiMzOTt0IGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBhY2Nlc3NlZCBiaXQsIGZhbGxiYWNrXG5tbS92bXNjYW4uYzo0MDk0Olx0ICogdG8gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLCB3aGljaCBvbmx5IGNsZWFycyB0aGUgYWNjZXNzZWQgYml0IGluIGFcbm1tL3Ztc2Nhbi5jLTQwOTUtXHQgKiBoYW5kZnVsIG9mIFBURXMuIFNwcmVhZGluZyB0aGUgd29yayBvdXQgb3ZlciBhIHBlcmlvZCBvZiB0aW1lIHVzdWFsbHlcbi0tXG5tbS92bXNjYW4uYz00MTU4PXN0YXRpYyB1bnNpZ25lZCBsb25nIGxydXZlY19ldmljdGFibGVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jLTQxNjEtXHR1bnNpZ25lZCBsb25nIHNlcSwgdG90YWwgPSAwO1xubW0vdm1zY2FuLmM6NDE2MjpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xubW0vdm1zY2FuLmMtNDE2My1cdERFRklORV9NQVhfU0VRKGxydXZlYyk7XG4tLVxubW0vdm1zY2FuLmMtNDE2Ny1cdFx0Zm9yIChzZXEgPSBtaW5fc2VxW3R5cGVdOyBzZXEgXHUwMDNjPSBtYXhfc2VxOyBzZXEmIzQzOyYjNDM7KSB7XG5tbS92bXNjYW4uYzo0MTY4Olx0XHRcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcbm1tL3Ztc2Nhbi5jLTQxNjktXHRcdFx0Zm9yICh6b25lID0gMDsgem9uZSBcdTAwM2MgTUFYX05SX1pPTkVTOyB6b25lJiM0MzsmIzQzOylcbi0tXG5tbS92bXNjYW4uYz00MTg5PXN0YXRpYyBib29sIGxydXZlY19pc19yZWNsYWltYWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuLS1cbm1tL3Ztc2Nhbi5jLTQyMDMtXG5tbS92bXNjYW4uYzo0MjA0Olx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShldmljdGFibGVfbWluX3NlcShtaW5fc2VxLCBzd2FwcGluZXNzKSk7XG5tbS92bXNjYW4uYy00MjA1LVx0YmlydGggPSBSRUFEX09OQ0UobHJ1dmVjLVx1MDAzZWxydWdlbi50aW1lc3RhbXBzW2dlbl0pO1xuLS1cbm1tL3Ztc2Nhbi5jLTQyMTAtLyogdG8gcHJvdGVjdCB0aGUgd29ya2luZyBzZXQgb2YgdGhlIGxhc3QgTiBqaWZmaWVzICovXG5tbS92bXNjYW4uYzo0MjExOnN0YXRpYyB1bnNpZ25lZCBsb25nIGxydV9nZW5fbWluX3R0bCBfX3JlYWRfbW9zdGx5O1xubW0vdm1zY2FuLmMtNDIxMi1cbm1tL3Ztc2Nhbi5jOjQyMTM6c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTQyMTQte1xubW0vdm1zY2FuLmMtNDIxNS1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbm1tL3Ztc2Nhbi5jOjQyMTY6XHR1bnNpZ25lZCBsb25nIG1pbl90dGwgPSBSRUFEX09OQ0UobHJ1X2dlbl9taW5fdHRsKTtcbm1tL3Ztc2Nhbi5jLTQyMTctXHRib29sIHJlY2xhaW1hYmxlID0gIW1pbl90dGw7XG4tLVxubW0vdm1zY2FuLmMtNDI1OS0gKi9cbm1tL3Ztc2Nhbi5jOjQyNjA6Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxubW0vdm1zY2FuLmMtNDI2MS17XG4tLVxubW0vdm1zY2FuLmMtNDI2NS1cdHVuc2lnbmVkIGxvbmcgZW5kO1xubW0vdm1zY2FuLmM6NDI2NjpcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7XG5tbS92bXNjYW4uYy00MjY3LVx0c3RydWN0IGZvbGlvICpsYXN0ID0gTlVMTDtcbi0tXG5tbS92bXNjYW4uYy00Mjc1LVx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xubW0vdm1zY2FuLmM6NDI3NjpcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZTtcbm1tL3Ztc2Nhbi5jLTQyNzctXG4tLVxubW0vdm1zY2FuLmM9NDM3NT1lbnVtIHtcbi0tXG5tbS92bXNjYW4uYy00MzgyLVxubW0vdm1zY2FuLmM6NDM4MzpzdGF0aWMgdm9pZCBscnVfZ2VuX3JvdGF0ZV9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBvcClcbm1tL3Ztc2Nhbi5jLTQzODQte1xuLS1cbm1tL3Ztc2Nhbi5jLTQ0MzAtXG5tbS92bXNjYW4uYzo0NDMxOnZvaWQgbHJ1X2dlbl9vbmxpbmVfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vdm1zY2FuLmMtNDQzMi17XG4tLVxubW0vdm1zY2FuLmMtNDQ1NS1cbm1tL3Ztc2Nhbi5jOjQ0NTY6dm9pZCBscnVfZ2VuX29mZmxpbmVfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vdm1zY2FuLmMtNDQ1Ny17XG4tLVxubW0vdm1zY2FuLmMtNDQ2Mi1cbm1tL3Ztc2Nhbi5jOjQ0NjM6XHRcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX09MRCk7XG5tbS92bXNjYW4uYy00NDY0LVx0fVxuLS1cbm1tL3Ztc2Nhbi5jLTQ0NjYtXG5tbS92bXNjYW4uYzo0NDY3OnZvaWQgbHJ1X2dlbl9yZWxlYXNlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbm1tL3Ztc2Nhbi5jLTQ0Njgte1xuLS1cbm1tL3Ztc2Nhbi5jLTQ0OTItXG5tbS92bXNjYW4uYzo0NDkzOnZvaWQgbHJ1X2dlbl9zb2Z0X3JlY2xhaW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxubW0vdm1zY2FuLmMtNDQ5NC17XG4tLVxubW0vdm1zY2FuLmMtNDQ5OC1cdGlmIChSRUFEX09OQ0UobHJ1dmVjLVx1MDAzZWxydWdlbi5zZWcpICE9IE1FTUNHX0xSVV9IRUFEKVxubW0vdm1zY2FuLmM6NDQ5OTpcdFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBNRU1DR19MUlVfSEVBRCk7XG5tbS92bXNjYW4uYy00NTAwLX1cbm1tL3Ztc2Nhbi5jLTQ1MDEtXG5tbS92bXNjYW4uYzo0NTAyOmJvb2wgcmVjaGVja19scnVfZ2VuX21heF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG5tbS92bXNjYW4uYy00NTAzLXtcbi0tXG5tbS92bXNjYW4uYz00NTE1PXN0YXRpYyB2b2lkIHRyeV90b19pbmNfbWF4X3NlcV9ub3dhbGsoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTQ1MTcte1xubW0vdm1zY2FuLmM6NDUxODpcdHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKm1tX2xpc3QgPSBnZXRfbW1fbGlzdChtZW1jZyk7XG5tbS92bXNjYW4uYzo0NTE5Olx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XG5tbS92bXNjYW4uYy00NTIwLVx0aW50IHN3YXBwaW5lc3MgPSBtZW1fY2dyb3VwX3N3YXBwaW5lc3MobWVtY2cpO1xuLS1cbm1tL3Ztc2Nhbi5jLTQ1NDgtICovXG5tbS92bXNjYW4uYzo0NTQ5OnZvaWQgbWF4X2xydV9nZW5fbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxubW0vdm1zY2FuLmMtNDU1MC17XG4tLVxubW0vdm1zY2FuLmMtNDU3NS0gKiAgICBnZW5lcmF0aW9ucyBvbiBhbiBMUlUgbGlzdC5cbm1tL3Ztc2Nhbi5jOjQ1NzY6ICogNC4gSW4gbHJ1X2dlbl9kZWxfZm9saW8oKSwgdGhlIGdlbmVyYXRpb24gdG8gd2hpY2ggdGhlIGZvbGlvIGJlbG9uZ3MgaXNcbm1tL3Ztc2Nhbi5jLTQ1NzctICogICAgZm91bmQgYmFzZWQgb24gdGhlIGdlbmVyYXRpb24gaW5mb3JtYXRpb24gaW4gZm9saW8tXHUwMDNlZmxhZ3MsIGFuZCB0aGVcbi0tXG5tbS92bXNjYW4uYy00NTc5LSAqICAgIHRoZSBscnUgc2l6ZSBjb3JyZWN0bHkgZHVyaW5nIHJlcGFyZW50aW5nLCBvdGhlcndpc2UgdGhlIGxydSBzaXplIG1heVxubW0vdm1zY2FuLmM6NDU4MDogKiAgICBiZSB1cGRhdGVkIGluY29ycmVjdGx5IGluIGxydV9nZW5fZGVsX2ZvbGlvKCkuXG5tbS92bXNjYW4uYy00NTgxLSAqXG4tLVxubW0vdm1zY2FuLmMtNDU4OS0gKi9cbm1tL3Ztc2Nhbi5jOjQ1OTA6c3RhdGljIHZvaWQgX19scnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYywgc3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyxcbm1tL3Ztc2Nhbi5jLTQ1OTEtXHRcdFx0XHQgICAgIGludCB6b25lLCBpbnQgdHlwZSlcbm1tL3Ztc2Nhbi5jLTQ1OTIte1xubW0vdm1zY2FuLmM6NDU5MzpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpjaGlsZF9scnVnZW4sICpwYXJlbnRfbHJ1Z2VuO1xubW0vdm1zY2FuLmMtNDU5NC1cdGVudW0gbHJ1X2xpc3QgbHJ1ID0gdHlwZSAqIExSVV9JTkFDVElWRV9GSUxFO1xuLS1cbm1tL3Ztc2Nhbi5jLTQ2MDAtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBnZXRfbnJfZ2VucyhjaGlsZF9scnV2ZWMsIHR5cGUpOyBpJiM0MzsmIzQzOykge1xubW0vdm1zY2FuLmM6NDYwMTpcdFx0aW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoY2hpbGRfbHJ1Z2VuLVx1MDAzZW1heF9zZXEgLSBpKTtcbm1tL3Ztc2Nhbi5jLTQ2MDItXHRcdGxvbmcgbnJfcGFnZXMgPSBjaGlsZF9scnVnZW4tXHUwMDNlbnJfcGFnZXNbZ2VuXVt0eXBlXVt6b25lXTtcbm1tL3Ztc2Nhbi5jOjQ2MDM6XHRcdGludCBjaGlsZF9scnVfYWN0aXZlID0gbHJ1X2dlbl9pc19hY3RpdmUoY2hpbGRfbHJ1dmVjLCBnZW4pID8gTFJVX0FDVElWRSA6IDA7XG5tbS92bXNjYW4uYzo0NjA0Olx0XHRpbnQgcGFyZW50X2xydV9hY3RpdmUgPSBscnVfZ2VuX2lzX2FjdGl2ZShwYXJlbnRfbHJ1dmVjLCBnZW4pID8gTFJVX0FDVElWRSA6IDA7XG5tbS92bXNjYW4uYy00NjA1LVxuLS1cbm1tL3Ztc2Nhbi5jLTQ2MTMtXG5tbS92bXNjYW4uYzo0NjE0Olx0XHRpZiAobHJ1X2dlbl9pc19hY3RpdmUoY2hpbGRfbHJ1dmVjLCBnZW4pICE9IGxydV9nZW5faXNfYWN0aXZlKHBhcmVudF9scnV2ZWMsIGdlbikpIHtcbm1tL3Ztc2Nhbi5jLTQ2MTUtXHRcdFx0X191cGRhdGVfbHJ1X3NpemUoY2hpbGRfbHJ1dmVjLCBscnUgJiM0MzsgY2hpbGRfbHJ1X2FjdGl2ZSwgem9uZSwgLW5yX3BhZ2VzKTtcbi0tXG5tbS92bXNjYW4uYy00NjIwLVxubW0vdm1zY2FuLmM6NDYyMTp2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxubW0vdm1zY2FuLmMtNDYyMi17XG4tLVxubW0vdm1zY2FuLmMtNDYzMi1cdFx0Zm9yICh0eXBlID0gMDsgdHlwZSBcdTAwM2MgQU5PTl9BTkRfRklMRTsgdHlwZSYjNDM7JiM0MzspXG5tbS92bXNjYW4uYzo0NjMzOlx0XHRcdF9fbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhjaGlsZF9scnV2ZWMsIHBhcmVudF9scnV2ZWMsIHppZCwgdHlwZSk7XG5tbS92bXNjYW4uYy00NjM0LVxuLS1cbm1tL3Ztc2Nhbi5jPTQ2NTU9c3RhdGljIGJvb2wgc29ydF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuLS1cbm1tL3Ztc2Nhbi5jLTQ2NjQtXHRpbnQgdGllciA9IGxydV90aWVyX2Zyb21fcmVmcyhyZWZzLCB3b3JraW5nc2V0KTtcbm1tL3Ztc2Nhbi5jOjQ2NjU6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbm1tL3Ztc2Nhbi5jLTQ2NjYtXG4tLVxubW0vdm1zY2FuLmMtNDY3My1cdC8qIHByb21vdGVkICovXG5tbS92bXNjYW4uYzo0Njc0Olx0aWYgKGdlbiAhPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKSkge1xubW0vdm1zY2FuLmMtNDY3NS1cdFx0bGlzdF9tb3ZlKFx1MDAyNmZvbGlvLVx1MDAzZWxydSwgXHUwMDI2bHJ1Z2VuLVx1MDAzZWZvbGlvc1tnZW5dW3R5cGVdW3pvbmVdKTtcbi0tXG5tbS92bXNjYW4uYz00NzA0PXN0YXRpYyBib29sIGlzb2xhdGVfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00NzIxLVxubW0vdm1zY2FuLmM6NDcyMjpcdHN1Y2Nlc3MgPSBscnVfZ2VuX2RlbF9mb2xpbyhscnV2ZWMsIGZvbGlvLCB0cnVlKTtcbm1tL3Ztc2Nhbi5jLTQ3MjMtXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIXN1Y2Nlc3MsIGZvbGlvKTtcbi0tXG5tbS92bXNjYW4uYz00NzI4PXN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtNDczOS1cdHVuc2lnbmVkIGxvbmcgcmVtYWluaW5nID0gbnJfdG9fc2Nhbjtcbm1tL3Ztc2Nhbi5jOjQ3NDA6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbm1tL3Ztc2Nhbi5jLTQ3NDEtXG4tLVxubW0vdm1zY2FuLmMtNDc0Ny1cbm1tL3Ztc2Nhbi5jOjQ3NDg6XHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKTtcbm1tL3Ztc2Nhbi5jLTQ3NDktXG4tLVxubW0vdm1zY2FuLmM9NDg3OD1zdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy00ODg2LVx0c3RydWN0IHJlY2xhaW1fc3RhdCBzdGF0O1xubW0vdm1zY2FuLmM6NDg4NzpcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7XG5tbS92bXNjYW4uYy00ODg4LVx0aW50IHNjYW5uZWQsIHJlY2xhaW1lZDtcbi0tXG5tbS92bXNjYW4uYy00OTM3LVx0XHQvKiBkb24mIzM5O3QgYWRkIHJlamVjdGVkIGZvbGlvcyB0byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gKi9cbm1tL3Ztc2Nhbi5jOjQ5Mzg6XHRcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSkge1xubW0vdm1zY2FuLmMtNDkzOS1cdFx0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuLS1cbm1tL3Ztc2Nhbi5jPTUxMDI9c3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTEwOS1cbm1tL3Ztc2Nhbi5jOjUxMTA6XHQvKiBscnVfZ2VuX2FnZV9ub2RlKCkgY2FsbGVkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oKSAqL1xubW0vdm1zY2FuLmMtNTExMS1cdGlmIChtZW1fY2dyb3VwX2JlbG93X21pbihOVUxMLCBtZW1jZykpXG4tLVxubW0vdm1zY2FuLmM9NTE0Mz1zdGF0aWMgdm9pZCBzaHJpbmtfbWFueShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MTQ5LVx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xubW0vdm1zY2FuLmM6NTE1MDpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW47XG5tbS92bXNjYW4uYy01MTUxLVx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuLS1cbm1tL3Ztc2Nhbi5jLTUxNjMtXHRcdGlmIChvcCkge1xubW0vdm1zY2FuLmM6NTE2NDpcdFx0XHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIG9wKTtcbm1tL3Ztc2Nhbi5jLTUxNjUtXHRcdFx0b3AgPSAwO1xuLS1cbm1tL3Ztc2Nhbi5jLTUxNzctXHRcdGlmICghbWVtX2Nncm91cF90cnlnZXQobWVtY2cpKSB7XG5tbS92bXNjYW4uYzo1MTc4Olx0XHRcdGxydV9nZW5fcmVsZWFzZV9tZW1jZyhtZW1jZyk7XG5tbS92bXNjYW4uYy01MTc5LVx0XHRcdG1lbWNnID0gTlVMTDtcbi0tXG5tbS92bXNjYW4uYy01MTk1LVx0aWYgKG9wKVxubW0vdm1zY2FuLmM6NTE5NjpcdFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBvcCk7XG5tbS92bXNjYW4uYy01MTk3LVxuLS1cbm1tL3Ztc2Nhbi5jLTUyMDItXG5tbS92bXNjYW4uYzo1MjAzOlx0LyogcmVzdGFydCBpZiByYWNlZCB3aXRoIGxydV9nZW5fcm90YXRlX21lbWNnKCkgKi9cbm1tL3Ztc2Nhbi5jLTUyMDQtXHRpZiAoZ2VuICE9IGdldF9udWxsc192YWx1ZShwb3MpKVxuLS1cbm1tL3Ztc2Nhbi5jLTUyMTItXG5tbS92bXNjYW4uYzo1MjEzOnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNTIxNC17XG4tLVxubW0vdm1zY2FuLmMtNTIyNi1cdGlmICh0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKSlcbm1tL3Ztc2Nhbi5jOjUyMjc6XHRcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX1lPVU5HKTtcbm1tL3Ztc2Nhbi5jLTUyMjgtXG4tLVxubW0vdm1zY2FuLmMtNTIzMy1cbm1tL3Ztc2Nhbi5jOjUyMzQ6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTUyMzUte1xuLS1cbm1tL3Ztc2Nhbi5jPTUyODA9c3RhdGljIGJvb2wgX19tYXliZV91bnVzZWQgc3RhdGVfaXNfdmFsaWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxubW0vdm1zY2FuLmMtNTI4MS17XG5tbS92bXNjYW4uYzo1MjgyOlx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYy01MjgzLVxuLS1cbm1tL3Ztc2Nhbi5jPTUzMDM9c3RhdGljIGJvb2wgZmlsbF9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUzMTctXHRcdFx0Lypcbm1tL3Ztc2Nhbi5jOjUzMTg6XHRcdFx0ICogbHJ1X2dlbl9hZGRfZm9saW8oKSB1c2VzIGxpc3RfYWRkX3RhaWwoKSByYXRoZXJcbm1tL3Ztc2Nhbi5jLTUzMTktXHRcdFx0ICogdGhhbiBsaXN0X2FkZCgpIHdoZW4gcmVjbGFpbWluZyBpcyB0cnVlLiAgTWF0Y2hcbi0tXG5tbS92bXNjYW4uYy01MzM2LVx0XHRcdCAqL1xubW0vdm1zY2FuLmM6NTMzNzpcdFx0XHRzdWNjZXNzID0gbHJ1X2dlbl9hZGRfZm9saW8obHJ1dmVjLCBmb2xpbywgIWFjdGl2ZSk7XG5tbS92bXNjYW4uYy01MzM4LVx0XHRcdFZNX1dBUk5fT05fT05DRSghc3VjY2Vzcyk7XG4tLVxubW0vdm1zY2FuLmM9NTM0OD1zdGF0aWMgYm9vbCBkcmFpbl9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuLS1cblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODI3NgoJCQkJCQkJb3V0cHV0OiAxNzAKCQkJCQkJCXRob3VnaHRzOiA4MTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gTXVsdGktR2VuIExSVSBGdW5jdGlvbmFsaXR5KioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBnb3Qgc28gZmFyLiBJIG5lZWQgdG8gaWRlbnRpZnkga2V5IGtlcm5lbCBmdW5jdGlvbnMgZm9yIGZ1enppbmcgcmVsYXRlZCB0byB0aGlzIE11bHRpLUdlbiBMUlUgd29yaywgYW5kIGFsc28gZmlndXJlIG91dCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIGF2b2lkaW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIGtlZXAgdGhlIHRlc3RpbmcgZm9jdXNlZC4gQmFzZWQgb24gdGhlIHJlcXVpcmVtZW50cywgSSYjMzk7bSBmb2N1c2luZyBvbiBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuCgpGaXJzdCwgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSByZWxldmFudCBhbmQgbWVldCB0aG9zZSBjcml0ZXJpYS4gSSBpZGVudGlmaWVkIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHdoaWNoIGFyZSBsaWtlbHkgZW50cnlwb2ludHMgdG8gdGhlIG11bHRpLWdlbiBMUlUgZnVuY3Rpb25hbGl0eToKCiogICBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgKGluIGBtbS92bXNjYW4uY2ApIC0gTG9va3MgcHJvbWlzaW5nLgoqICAgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgIChpbiBgbW0vbWlncmF0ZS5jYCkgLSBTZWVtcyByZWxldmFudCB0byBwYWdlIG1pZ3JhdGlvbi4KKiAgIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgKGluIGBtbS9tZW1jb250cm9sLmNgKSAtIFRoaXMgbG9va3MgaW1wb3J0YW50IGZvciBtZW1vcnkgY2dyb3VwIGludGVncmF0aW9uLgoqICAgYGxydV9nZW5fcmVwYXJlbnRfbWVtY2dgIChpbiBgbW0vdm1zY2FuLmNgKSAtIExpa2VseSByZWxldmFudCB0byBtZW1jZyBvcGVyYXRpb25zLgoqICAgYGxydV9nZW5fc29mdF9yZWNsYWltYCAoaW4gYG1tL3Ztc2Nhbi5jYCkgLSBUaGlzIGlzIHByb2JhYmx5IGEgZ29vZCBlbnRyeXBvaW50LgoKTm93LCByZWdhcmRpbmcgY29uZmlndXJhdGlvbnMsIGl0IHNlZW1zIGNsZWFyIHRoYXQgYENPTkZJR19MUlVfR0VOYCBpcyBlc3NlbnRpYWwsIGFzIGlzIGBDT05GSUdfTFJVX0dFTl9FTkFCTEVEYCBiZWNhdXNlIGl0JiMzOTtzIGVuYWJsZWQgYnkgZGVmYXVsdC4gR2l2ZW4gdGhlIGZ1bmN0aW9ucyBJJiMzOTt2ZSBpZGVudGlmaWVkLCBgQ09ORklHX01FTUNHYCBpcyByZXF1aXJlZCBmb3IgdGhlIG1lbW9yeSBjZ3JvdXAgYXNwZWN0IGFuZCBhbHNvIGBDT05GSUdfTUlHUkFUSU9OYCBpcyBuZWVkZWQgZm9yIGBmb2xpb19taWdyYXRlX2ZsYWdzYCBhbmQgcmVsYXRlZCBmdW5jdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZyB0aGF0IHRoZXNlIGRlcGVuZCBvbi4KCkxvb2tpbmcgYXQgdGhlIEtjb25maWcgZmlsZXMsIEkgc2VlIHRoYXQ6CgoqICAgYExSVV9HRU5gIGRlcGVuZHMgb24gYE1NVWAsIGFuZCBhbHNvIGA2NEJJVCB8fCAhU1BBUlNFTUVNIHx8IFNQQVJTRU1FTV9WTUVNTUFQYCAoSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aG9zZSBmb3IgYnVpbGRpbmcgY29uZmlndXJhdGlvbnMpLgoqICAgYExSVV9HRU5fRU5BQkxFRGAgZGVwZW5kcyBvbiBgTFJVX0dFTmAuCiogICBgTUVNQ0dgIGRlcGVuZHMgb24gYENHUk9VUFNgLgoqICAgQW5kIGZpbmFsbHksIGBOVU1BX01JR1JBVElPTmAgb3IgYE1JR1JBVElPTmAgaXMgbmVlZGVkLiBgQ09NUEFDVElPTmAgaXMgZ2VuZXJhbGx5IHNlbGVjdGVkLgoKU28sIEkgd2lsbCBhZGQgdGhlc2UgZnVuY3Rpb25zIGludG8gdGhlIGBGb2N1c1N5bWJvbHNgIGFycmF5OgoKKiAgIGBscnVfZ2VuX2xvb2tfYXJvdW5kYAoqICAgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgCiogICBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgCiogICBgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZ2AKKiAgIGBscnVfZ2VuX3NvZnRfcmVjbGFpbWAKCkFuZCB0aGVzZSBjb25maWd1cmF0aW9ucyB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFycmF5OgoKKiAgIExSVV9HRU4KKiAgIExSVV9HRU5fRU5BQkxFRAoqICAgTUVNQ0cKKiAgIE1JR1JBVElPTgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtMUlVfR0VOX0VOQUJMRUQmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TUlHUkFUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bHJ1X2dlbl9sb29rX2Fyb3VuZCYjMzQ7LAogICAgJiMzNDtmb2xpb19taWdyYXRlX2ZsYWdzJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplJiMzNDssCiAgICAmIzM0O2xydV9nZW5fcmVwYXJlbnRfbWVtY2cmIzM0OywKICAgICYjMzQ7bHJ1X2dlbl9zb2Z0X3JlY2xhaW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBNdWx0aS1HZW4gTFJVIChNR0xSVSksIHBhZ2UgcmVmZXJlbmNlIGNvdW50aW5nLCBmb2xpbyBmbGFncyBtYW5hZ2VtZW50LCBmb2xpbyBtaWdyYXRpb24sIGFuZCBtZW1jZyBMUlUgc2l6ZSBhY2NvdW50aW5nLiBUaGVzZSBmdW5jdGlvbmFsIGNoYW5nZXMgYWZmZWN0IHBhZ2UgcmVjbGFtYXRpb24sIGFnaW5nLCBhbmQgbWlncmF0aW9uIGJlaGF2aW9yIGluIHJlYWNoYWJsZSBjb3JlIG1tIGNvZGUgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xydV9nZW5fbG9va19hcm91bmQmIzM0OywKICAgICYjMzQ7Zm9saW9fbWlncmF0ZV9mbGFncyYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZSYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX3JlcGFyZW50X21lbWNnJiMzNDssCiAgICAmIzM0O2xydV9nZW5fc29mdF9yZWNsYWltJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW4gTXVsdGktR2VuIExSVSAoTUdMUlUpLCBwYWdlIHJlZmVyZW5jZSBjb3VudGluZywgZm9saW8gZmxhZ3MgbWFuYWdlbWVudCwgZm9saW8gbWlncmF0aW9uLCBhbmQgbWVtY2cgTFJVIHNpemUgYWNjb3VudGluZy4gVGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIGFmZmVjdCBwYWdlIHJlY2xhbWF0aW9uLCBhZ2luZywgYW5kIG1pZ3JhdGlvbiBiZWhhdmlvciBpbiByZWFjaGFibGUgY29yZSBtbSBjb2RlIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyBNdWx0aS1HZW4gTFJVIChNR0xSVSkgZm9saW8gZmxhZyBvcGVyYXRpb25zIChpbnRyb2R1Y2luZyBoZWxwZXJzIGxpa2UgbHJ1X3NldF9nZW5fZmxhZ3MsIGxydV9zZXRfcmVmc19mbGFncywgZm9saW9fc2V0X2xydV9yZWZzKSwgdXBkYXRlcyBmb2xpbyByZWZlcmVuY2UvZ2VuZXJhdGlvbiB0cmFja2luZyBhY3Jvc3MgcmVjbGFpbSBhbmQgbWlncmF0aW9uIHBhdGhzLCBhbmQgY2hhbmdlcyBtZW1jZyBscnVfem9uZV9zaXplIHRyYWNraW5nIGZyb20gdW5zaWduZWQgbG9uZyB0byBzaWduZWQgbG9uZyB3aXRoIGJvdW5kcyBjaGVja2luZy5cblxuTm8ga2VybmVsLXRvLXVzZXIgZGF0YSBjb3BpZXMsIGlvY3Rscywgb3IgdXNlci1mYWNpbmcgc3RydWN0cyBhcmUgbW9kaWZpZWQuIFN0YWNrIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIChlLmcuLCBgdHlwZWAgaW4gYHdhbGtfdXBkYXRlX2ZvbGlvYCkgYXJlIGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyByZWFkIChhcyBgdHlwZWAgaXMgb25seSBwYXNzZWQgdG8gYHVwZGF0ZV9iYXRjaF9zaXplYCB3aGVuIGBvbGRfZ2VuIFx1MDAzZT0gMGAsIHdoaWNoIGd1YXJhbnRlZXMgYXNzaWdubWVudCBpbiBgZm9saW9fdXBkYXRlX2dlbmApLiBObyB1bmluaXRpYWxpemVkIGhlYXAsIHN0YWNrLCBvciBwYWdlIGFsbG9jYXRpb25zIGFyZSBleHBvc2VkLiBQb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgaW4gdGhlc2UgTU0gcGF0aHMgKHN1Y2ggYXMgY29uY3VycmVuY3kgaXNzdWVzIG9yIGludmFsaWQgZm9saW8gZGVyZWZlcmVuY2VzKSBmYWxsIHVuZGVyIEtBU0FOL0xPQ0tERVAgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgZGV0ZWN0b3JzLiBUaHVzLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0ZDcwZDFjYjc1NzEzNDIyODZmNDZjM2I1YTg4ZDQ5ZWY2NDlhZGI3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAwNDo0MDo0OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKaW5kZXggN2QxYzBjZTE4OWE4OC4uODY3ODBlZjY1ZWFmYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKQEAgLTExMyw3ICYjNDM7MTEzLDcgQEAgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgewogCS8qIEZpZWxkcyB3aGljaCBnZXQgdXBkYXRlZCBvZnRlbiBhdCB0aGUgZW5kLiAqLwogCXN0cnVjdCBscnV2ZWMJCWxydXZlYzsKIAlDQUNIRUxJTkVfUEFERElORyhfcGFkMl8pOwotCXVuc2lnbmVkIGxvbmcJCWxydV96b25lX3NpemVbTUFYX05SX1pPTkVTXVtOUl9MUlVfTElTVFNdOwomIzQzOwlsb25nCQkJbHJ1X3pvbmVfc2l6ZVtNQVhfTlJfWk9ORVNdW05SX0xSVV9MSVNUU107CiAJc3RydWN0IG1lbV9jZ3JvdXBfcmVjbGFpbV9pdGVyCWl0ZXI7CiAKIAkvKgpAQCAtOTAyLDEwICYjNDM7OTAyLDE1IEBAIHN0YXRpYyBpbmxpbmUKIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCWVudW0gbHJ1X2xpc3QgbHJ1LCBpbnQgem9uZV9pZHgpCiB7CiYjNDM7CWxvbmcgdmFsOwogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejsKIAogCW16ID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7Ci0JcmV0dXJuIFJFQURfT05DRShtei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7CiYjNDM7CXZhbCA9IFJFQURfT05DRShtei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UodmFsICZsdDsgMCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIHZhbDsKIH0KIAogdm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaAppbmRleCA2MjFjODY1M2Q4ZjdlLi5hYjY5Yjk5MzA4OTNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmgKQEAgLTMwLDYgJiM0MzszMCwxNyBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19pc19maWxlX2xydShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXJldHVybiAhZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1IC0gU2hvdWxkIHRoZSBmb2xpbyBiZSBvbiBhIGZpbGUgTFJVIG9yIGFub24gTFJVPwomIzQzOyAqIEBmbGFnczogVGhlIGZvbGlvJiMzOTtzIGZsYWdzLgomIzQzOyAqCiYjNDM7ICogSnVzdCBsaWtlIGZvbGlvX2lzX2ZpbGVfbHJ1IGJ1dCB0YWtlIHRoZSBmb2xpbyBmbGFncyBkaXJlY3RseSBpbnN0ZWFkLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZsYWdzKQomIzQzO3sKJiM0MzsJcmV0dXJuICF0ZXN0X2JpdChQR19zd2FwYmFja2VkLCBmbGFncyk7CiYjNDM7fQomIzQzOwogc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJCQllbnVtIGxydV9saXN0IGxydSwgZW51bSB6b25lX3R5cGUgemlkLAogCQkJCWxvbmcgbnJfcGFnZXMpCkBAIC0xNDIsMTAgJiM0MzsxNTMsNjYgQEAgc3RhdGljIGlubGluZSBpbnQgbHJ1X3RpZXJfZnJvbV9yZWZzKGludCByZWZzLCBib29sIHdvcmtpbmdzZXQpCiAJcmV0dXJuIHdvcmtpbmdzZXQgPyBNQVhfTlJfVElFUlMgLSAxIDogb3JkZXJfYmFzZV8yKHJlZnMpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzOy8qKgomIzQzOyAqIGxydV9zZXRfZ2VuX2ZsYWdzIC0gU2V0IHRoZSBMUlUgZ2VuZXJhdGlvbiBudW1iZXIgdG8gc3BlY2lmaWVkIGZvbGlvIGZsYWdzLgomIzQzOyAqIEBmbGFnczogcG9pbnRlciB0byB0aGUgZm9saW8gZmxhZ3MKJiM0MzsgKiBAZ2VuOiBnZW5lcmF0aW9uIG51bWJlciwgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfc2V0X2dlbl9mbGFncyh1bnNpZ25lZCBsb25nICpmbGFncywgaW50IGdlbikKJiM0Mzt7CiYjNDM7CUJVSUxEX0JVR19PTihMUlVfR0VOX01BU0sgJmFtcDsgTFJVX1JFRlNfTUFTSyk7CiYjNDM7CVZNX1dBUk5fT05fT05DRShnZW4gJmd0Oz0gTUFYX05SX0dFTlMgfHwgZ2VuICZsdDsgMCk7CiYjNDM7CS8qIFN0b3JlIGdlbiBvZmZzZXQgYnkgMSwgemVybyBtZWFucyB0aGUgZm9saW8gaXMgb2ZmLWxpc3QuICovCiYjNDM7CSpmbGFncyAmYW1wOz0gfkxSVV9HRU5fTUFTSzsKJiM0MzsJKmZsYWdzIHw9IChnZW4gJiM0MzsgMVVMKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBscnVfZ2V0X2dlbl9mbGFncyAtIFJldHVybiB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIGZyb20gZm9saW8gZmxhZ3MuCiYjNDM7ICogQGZsYWdzOiBmb2xpbyBmbGFncwomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLiBSZXR1cm5zCiYjNDM7ICogLTEgaWYgdGhlIGZsYWdzIGluZGljYXRlIHRoZSBmb2xpbyBpcyBvZmYgdGhlIGxpc3QgKGUuZy4sIGlzb2xhdGVkKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGludCBscnVfZ2V0X2dlbl9mbGFncyh1bnNpZ25lZCBsb25nIGZsYWdzKQomIzQzO3sKJiM0MzsJaW50IGdlbiA9ICgoZmxhZ3MgJmFtcDsgTFJVX0dFTl9NQVNLKSAmZ3Q7Jmd0OyBMUlVfR0VOX1BHT0ZGKSAtIDE7CiYjNDM7CiYjNDM7CS8qIEV4Y2x1ZGUgdGhlIGxlZ2FsIC0xIGZyb20gdGhlIHVuc2lnbmVkIE1BWF9OUl9HRU5TIGNvbXBhcmlzb24gKi8KJiM0MzsJVk1fV0FSTl9PTl9PTkNFKGdlbiAhPSAtMSAmYW1wOyZhbXA7IGdlbiAmZ3Q7PSBNQVhfTlJfR0VOUyk7CiYjNDM7CXJldHVybiBnZW47CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGxydV9zZXRfcmVmc19mbGFncyAtIFNldCB0aGUgTFJVIHJlZmVyZW5jZWQgY291bnQgdG8gZm9saW8gZmxhZ3MuCiYjNDM7ICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFncwomIzQzOyAqIEByZWZzOiByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IG51bWJlciwgYmV0d2VlbiAwIGFuZCBMUlVfUkVGU19NQVgsIGluY2x1c2l2ZS4KJiM0MzsgKgomIzQzOyAqIEZvciBNR0xSVSwgUEdfcmVmZXJlbmNlZCBob2xkcyB0aGUgZmlyc3QgcmVmLCBhbmQgdGhlIGV4dHJhIGJpdHMgaG9sZCB0aGUKJiM0MzsgKiByZW1haW5pbmcgcmVmcy4gRm9yIGNsYXNzaWNhbCBMUlUgdGhlIGV4dHJhIGJpdHMgYXJlIG5vdCB1c2VkLCBzbyBpdCBjYW4KJiM0MzsgKiBhbHNvIGJlIHNlZW4gYXMgdGhlIHJlZnMgY291bnQgbmV2ZXIgZXhjZWVkcyAxLiBJbiBib3RoIGNhc2VzLCByZWZzID09IDEKJiM0MzsgKiBtZWFucyBQR19yZWZlcmVuY2VkIGlzIHNldCBhbmQgdGhlIGV4dHJhIGJpdHMgYXJlIHplcm8sIGFuZCByZWZzID09IDAgbWVhbnMKJiM0MzsgKiBQR19yZWZlcmVuY2VkIGFuZCB0aGUgZXh0cmEgYml0cyBhcmUgYWxsIHVuc2V0LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfc2V0X3JlZnNfZmxhZ3ModW5zaWduZWQgbG9uZyAqZmxhZ3MsIHVuc2lnbmVkIGludCByZWZzKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwomIzQzOwlWTV9XQVJOX09OX09OQ0UocmVmcyAmZ3Q7IExSVV9SRUZTX01BWCk7CiYjNDM7CUJVSUxEX0JVR19PTihMUlVfUkVGU19NQVggIT0gKExSVV9SRUZTX01BU0sgJmd0OyZndDsgTFJVX1JFRlNfUEdPRkYpICYjNDM7IDEpOwogCiYjNDM7CSpmbGFncyAmYW1wOz0gfkxSVV9SRUZTX0ZMQUdTOwomIzQzOwlpZiAoIXJlZnMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CSpmbGFncyB8PSAoQklUKFBHX3JlZmVyZW5jZWQpIHwgKChyZWZzIC0gMVVMKSAmbHQ7Jmx0OyBMUlVfUkVGU19QR09GRikpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBscnVfZ2V0X3JlZnNfZmxhZ3MgLSBSZXR1cm4gTFJVIHJlZmVyZW5jZWQgLyBhY2Nlc3MgY291bnQgZnJvbSBmb2xpbyBmbGFncy4KJiM0MzsgKiBAZmxhZ3M6IGZvbGlvIGZsYWdzCiYjNDM7ICoKJiM0MzsgKiBSZWFkcyB0aGUgTFJVIHJlZmVyZW5jZWQgY291bnQgc2V0IGJ5IGxydV9zZXRfcmVmc19mbGFncygpLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGxydV9nZXRfcmVmc19mbGFncyh1bnNpZ25lZCBsb25nIGZsYWdzKQomIzQzO3sKIAlpZiAoIShmbGFncyAmYW1wOyBCSVQoUEdfcmVmZXJlbmNlZCkpKQogCQlyZXR1cm4gMDsKIAkvKgpAQCAtMTU1LDExICYjNDM7MjIyLDI0IEBAIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJcmV0dXJuICgoZmxhZ3MgJmFtcDsgTFJVX1JFRlNfTUFTSykgJmd0OyZndDsgTFJVX1JFRlNfUEdPRkYpICYjNDM7IDE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwomIzQzOwlyZXR1cm4gbHJ1X2dldF9yZWZzX2ZsYWdzKFJFQURfT05DRSgqY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKSk7CiYjNDM7fQogCi0JcmV0dXJuICgoZmxhZ3MgJmFtcDsgTFJVX0dFTl9NQVNLKSAmZ3Q7Jmd0OyBMUlVfR0VOX1BHT0ZGKSAtIDE7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgcmVmcykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCW5ld19mbGFncyA9IG9sZF9mbGFnczsKJiM0MzsJCWxydV9zZXRfcmVmc19mbGFncygmYW1wO25ld19mbGFncywgcmVmcyk7CiYjNDM7CX0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksICZhbXA7b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X2dlbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIGxydV9nZXRfZ2VuX2ZsYWdzKFJFQURfT05DRSgqY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2lzX2FjdGl2ZShjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBnZW4pCkBAIC0yNzAsNyAmIzQzOzM1MCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2FkZF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpOwogCWZsYWdzID0gKGdlbiAmIzQzOyAxVUwpICZsdDsmbHQ7IExSVV9HRU5fUEdPRkY7CiAJLyogc2VlIHRoZSBjb21tZW50IG9uIE1JTl9OUl9HRU5TIGFib3V0IFBHX2FjdGl2ZSAqLwotCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX0dFTl9NQVNLIHwgQklUKFBHX2FjdGl2ZSksIGZsYWdzKTsKJiM0MzsJc2V0X21hc2tfYml0cyhmb2xpb19mbGFncyhmb2xpbywgMCksIExSVV9HRU5fTUFTSyB8IEJJVChQR19hY3RpdmUpLCBmbGFncyk7CiAKIAlscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIC0xLCBnZW4pOwogCS8qIGZvciBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoKSAqLwpAQCAtMjk1LDcgJiM0MzszNzUsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCiAJLyogZm9yIGZvbGlvX21pZ3JhdGVfZmxhZ3MoKSAqLwogCWZsYWdzID0gIXJlY2xhaW1pbmcgJmFtcDsmYW1wOyBscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIGdlbikgPyBCSVQoUEdfYWN0aXZlKSA6IDA7Ci0JZmxhZ3MgPSBzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9HRU5fTUFTSywgZmxhZ3MpOwomIzQzOwlmbGFncyA9IHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0ssIGZsYWdzKTsKIAlnZW4gPSAoKGZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwogCiAJbHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBnZW4sIC0xKTsKQEAgLTMwNCwxMSAmIzQzOzM4NCwxOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZCkKJiM0MzsvKioKJiM0MzsgKiBmb2xpb19taWdyYXRlX2xydV9yZWZzIC0gY29weSB0aGUgcmVmZXJlbmNlIHN0YXRlIHRvIGEgbmV3IGZvbGlvCiYjNDM7ICogQG5ldzogdGhlIGRlc3RpbmF0aW9uIGZvbGlvCiYjNDM7ICogQG9sZDogdGhlIHNvdXJjZSBmb2xpbwomIzQzOyAqCiYjNDM7ICogVHJhbnNmZXIgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBAbmV3IGR1cmluZyBtaWdyYXRpb246IHRoZSBNR0xSVQomIzQzOyAqIHJlZnMgY291bnQsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkLCBvciBqdXN0IFBHX3JlZmVyZW5jZWQgZm9yIHRoZQomIzQzOyAqIGFjdGl2ZS9pbmFjdGl2ZSBMUlUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKQogewotCXVuc2lnbmVkIGxvbmcgcmVmcyA9IFJFQURfT05DRShvbGQtJmd0O2ZsYWdzLmYpICZhbXA7IExSVV9SRUZTX01BU0s7Ci0KLQlzZXRfbWFza19iaXRzKCZhbXA7bmV3LSZndDtmbGFncy5mLCBMUlVfUkVGU19NQVNLLCByZWZzKTsKJiM0MzsJQlVJTERfQlVHX09OKExSVV9SRUZTX01BU0sgJmFtcDsgQklUKFBHX3JlZmVyZW5jZWQpKTsKJiM0MzsJZm9saW9fc2V0X2xydV9yZWZzKG5ldywgZm9saW9fbHJ1X3JlZnMob2xkKSk7CiB9CiAjZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi8KIApAQCAtMzM3LDkgJiM0Mzs0MjUsMTAgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZCkKIHsKLQomIzQzOwlpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKG9sZCkpCiYjNDM7CQlmb2xpb19zZXRfcmVmZXJlbmNlZChuZXcpOwogfQogI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCmluZGV4IDk0ZjljM2ZmNTQxNjAuLjliMjdjZjUzYmRiYzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaApAQCAtNDkyLDExICYjNDM7NDkyLDE0IEBAIGVudW0gbHJ1dmVjX2ZsYWdzIHsKICAqIGZvbGlvLSZndDtmbGFncywgbWFza2VkIGJ5IExSVV9SRUZTX01BU0suCiAgKi8KICNkZWZpbmUgTUFYX05SX1RJRVJTCQk0VQomIzQzOyNkZWZpbmUgTFJVX1RJRVJfTUlOCQkwVQomIzQzOyNkZWZpbmUgTFJVX1RJRVJfTUFYCQkoTUFYX05SX1RJRVJTIC0gMSkKIAogI2lmbmRlZiBfX0dFTkVSQVRJTkdfQk9VTkRTX0gKIAogI2RlZmluZSBMUlVfR0VOX01BU0sJCSgoQklUKExSVV9HRU5fV0lEVEgpIC0gMSkgJmx0OyZsdDsgTFJVX0dFTl9QR09GRikKICNkZWZpbmUgTFJVX1JFRlNfTUFTSwkJKChCSVQoTFJVX1JFRlNfV0lEVEgpIC0gMSkgJmx0OyZsdDsgTFJVX1JFRlNfUEdPRkYpCiYjNDM7I2RlZmluZSBMUlVfUkVGU19NQVgJCUJJVChMUlVfUkVGU19XSURUSCkKIAogLyoKICAqIEZvciBmb2xpb3MgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzLApkaWZmIC0tZ2l0IGEvbW0vZm9saW8uYyBiL21tL2ZvbGlvLmMKaW5kZXggYzAyZGNlYTljMDNjMi4uZmI4NzRmZTQ5MmIyYiAxMDA2NDQKLS0tIGEvbW0vZm9saW8uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9mb2xpby5jCkBAIC0zNTMsMjYgJiM0MzszNTMsMjggQEAgc3RhdGljIHZvaWQgX19scnVfY2FjaGVfYWN0aXZhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykKIAogc3RhdGljIHZvaWQgbHJ1X2dlbl9pbmNfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewotCXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwomIzQzOwl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpOwomIzQzOwlpbnQgcmVmczsKIAogCWlmIChmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSkKIAkJcmV0dXJuOwogCiAJLyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovCi0JaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKSB7Ci0JCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTsKJiM0MzsJaWYgKCFmb2xpb19scnVfcmVmcyhmb2xpbykpIHsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7CiAJCXJldHVybjsKIAl9CiAKIAlkbyB7Ci0JCWlmICgob2xkX2ZsYWdzICZhbXA7IExSVV9SRUZTX01BU0spID09IExSVV9SRUZTX01BU0spIHsKJiM0MzsJCW5ld19mbGFncyA9IG9sZF9mbGFnczsKJiM0MzsJCXJlZnMgPSBscnVfZ2V0X3JlZnNfZmxhZ3Mob2xkX2ZsYWdzKTsKJiM0MzsJCWlmIChyZWZzID09IExSVV9SRUZTX01BWCkgewogCQkJaWYgKCFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKQogCQkJCWZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTsKIAkJCXJldHVybjsKIAkJfQotCi0JCW5ld19mbGFncyA9IG9sZF9mbGFncyAmIzQzOyBCSVQoTFJVX1JFRlNfUEdPRkYpOwotCX0gd2hpbGUgKCF0cnlfY21weGNoZygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiYjNDM7CQlscnVfc2V0X3JlZnNfZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIHJlZnMgJiM0MzsgMSk7CiYjNDM7CX0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksICZhbXA7b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTsKIH0KIAogc3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pCkBAIC0zODQsNyAmIzQzOzM4Niw4IEBAIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCWlmIChnZW4gJmx0OyAwKQogCQlyZXR1cm4gdHJ1ZTsKIAotCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MgfCBCSVQoUEdfd29ya2luZ3NldCksIDApOwomIzQzOwlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwomIzQzOwlmb2xpb19jbGVhcl93b3JraW5nc2V0KGZvbGlvKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlzZXEgPSBSRUFEX09OQ0UoZm9saW9fbHJ1dmVjKGZvbGlvKS0mZ3Q7bHJ1Z2VuLm1pbl9zZXFbdHlwZV0pOwpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDg1NmE3ZDA3NTg2Y2MuLjBhNjVhYjhkZjI3YTkgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTE1MjksMjggJiM0MzsxNTI5LDEyIEBAIHZvaWQgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIGxydV9saXN0IGxydSwKIAkJCQlpbnQgemlkLCBsb25nIG5yX3BhZ2VzKQogewogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejsKLQl1bnNpZ25lZCBsb25nICpscnVfc2l6ZTsKLQlsb25nIHNpemU7CiAKIAlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKQogCQlyZXR1cm47CiAKIAlteiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpOwotCWxydV9zaXplID0gJmFtcDttei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6aWRdW2xydV07Ci0KLQlpZiAobnJfcGFnZXMgJmx0OyAwKQotCQkqbHJ1X3NpemUgJiM0Mzs9IG5yX3BhZ2VzOwotCi0Jc2l6ZSA9ICpscnVfc2l6ZTsKLQlpZiAoV0FSTl9PTkNFKHNpemUgJmx0OyAwLAotCQkmIzM0OyVzKCVwLCAlZCwgJWxkKTogbHJ1X3NpemUgJWxkXG4mIzM0OywKLQkJX19mdW5jX18sIGxydXZlYywgbHJ1LCBucl9wYWdlcywgc2l6ZSkpIHsKLQkJVk1fQlVHX09OKDEpOwotCQkqbHJ1X3NpemUgPSAwOwotCX0KLQotCWlmIChucl9wYWdlcyAmZ3Q7IDApCi0JCSpscnVfc2l6ZSAmIzQzOz0gbnJfcGFnZXM7CiYjNDM7CW16LSZndDtscnVfem9uZV9zaXplW3ppZF1bbHJ1XSAmIzQzOz0gbnJfcGFnZXM7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jCmluZGV4IDE1YjQ1ODMyYmNmYTcuLmEzNjlkMGM5NWMzODYgMTAwNjQ0Ci0tLSBhL21tL21pZ3JhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9taWdyYXRlLmMKQEAgLTc3Niw4ICYjNDM7Nzc2LDkgQEAgdm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJaW50IGNwdXBpZDsKIAotCWlmIChmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKQotCQlmb2xpb19zZXRfcmVmZXJlbmNlZChuZXdmb2xpbyk7CiYjNDM7CS8qIENvcHkgdGhlIHJlZmVyZW5jZSBzdGF0ZSwgaW5jbHVkaW5nIFBHX3JlZmVyZW5jZWQgKi8KJiM0MzsJZm9saW9fbWlncmF0ZV9scnVfcmVmcyhuZXdmb2xpbywgZm9saW8pOwomIzQzOwogCWlmIChmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSkKIAkJZm9saW9fbWFya191cHRvZGF0ZShuZXdmb2xpbyk7CiAJaWYgKGZvbGlvX3Rlc3RfY2xlYXJfYWN0aXZlKGZvbGlvKSkgewpAQCAtODA3LDcgJiM0Mzs4MDgsNiBAQCB2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbykKIAlpZiAoZm9saW9fdGVzdF9pZGxlKGZvbGlvKSkKIAkJZm9saW9fc2V0X2lkbGUobmV3Zm9saW8pOwogCi0JZm9saW9fbWlncmF0ZV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7CiAJLyoKIAkgKiBDb3B5IE5VTUEgaW5mb3JtYXRpb24gdG8gdGhlIG5ldyBwYWdlLCB0byBwcmV2ZW50IG92ZXItZWFnZXIKIAkgKiBmdXR1cmUgbWlncmF0aW9ucyBvZiB0aGlzIHNhbWUgcGFnZS4KZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggZmRkMTMyOTlhMDRhOS4uZTdkMzc5YzZlNzAzYSAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTg0MywxOSAmIzQzOzg0MywyMiBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpCiAJaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pICZhbXA7JmFtcDsgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpIHsKIAkJLyogQWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuICovCiAJCWlmIChpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIHZtYV9mbGFncykpIHsKLQkJCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7CiYjNDM7CQkJZm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pOwomIzQzOwkJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJfQogCi0JCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKIAkvKiBQcm9tb3RlIG9uIHNlY29uZCBhY2Nlc3MgKi8KLQlpZiAoZm9saW9fbHJ1X3JlZnMoZm9saW8pICZndDsgMSkKLQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTsKLQllbHNlCiYjNDM7CWlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgJmd0OyAxKSB7CiYjNDM7CQlmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7CiYjNDM7CQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwomIzQzOwl9IGVsc2UgewogCQlmb2xpb19tYXJrX2FjY2Vzc2VkKGZvbGlvKTsKJiM0MzsJfQogCXJldHVybiB0cnVlOwogfQogI2Vsc2UKQEAgLTMxOTUsOCAmIzQzOzMxOTgsOCBAQCBzdHJ1Y3QgY3RybF9wb3MgewogCWludCBnYWluOwogfTsKIAotc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllciwgaW50IGdhaW4sCi0JCQkgIHN0cnVjdCBjdHJsX3BvcyAqcG9zKQomIzQzO3N0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXJfbWluLAomIzQzOwkJCSAgaW50IHRpZXJfbWF4LCBpbnQgZ2Fpbiwgc3RydWN0IGN0cmxfcG9zICpwb3MpCiB7CiAJaW50IGk7CiAJc3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9ICZhbXA7bHJ1dmVjLSZndDtscnVnZW47CkBAIC0zMjA1LDcgJiM0MzszMjA4LDcgQEAgc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllciwgaW50IGdhaW4sCiAJcG9zLSZndDtnYWluID0gZ2FpbjsKIAlwb3MtJmd0O3JlZmF1bHRlZCA9IHBvcy0mZ3Q7dG90YWwgPSAwOwogCi0JZm9yIChpID0gdGllciAlIE1BWF9OUl9USUVSUzsgaSAmbHQ7PSBtaW4odGllciwgTUFYX05SX1RJRVJTIC0gMSk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CWZvciAoaSA9IHRpZXJfbWluOyBpICZsdDs9IHRpZXJfbWF4OyBpJiM0MzsmIzQzOykgewogCQlwb3MtJmd0O3JlZmF1bHRlZCAmIzQzOz0gbHJ1Z2VuLSZndDthdmdfcmVmYXVsdGVkW3R5cGVdW2ldICYjNDM7CiAJCQkJICBhdG9taWNfbG9uZ19yZWFkKCZhbXA7bHJ1Z2VuLSZndDtyZWZhdWx0ZWRbaGlzdF1bdHlwZV1baV0pOwogCQlwb3MtJmd0O3RvdGFsICYjNDM7PSBscnVnZW4tJmd0O2F2Z190b3RhbFt0eXBlXVtpXSAmIzQzOwpAQCAtMzI2NiwxMSAmIzQzOzMyNjksMTEgQEAgc3RhdGljIGJvb2wgcG9zaXRpdmVfY3RybF9lcnIoc3RydWN0IGN0cmxfcG9zICpzcCwgc3RydWN0IGN0cmxfcG9zICpwdikKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qIHByb21vdGUgcGFnZXMgYWNjZXNzZWQgdGhyb3VnaCBwYWdlIHRhYmxlcyAqLwotc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpCiYjNDM7c3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBpbnQgKnR5cGUsCiYjNDM7CQkJICAgIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpCiB7Ci0JdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby0mZ3Q7ZmxhZ3MuZik7Ci0KLQlWTV9XQVJOX09OX09OQ0UoZ2VuICZndDs9IE1BWF9OUl9HRU5TKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTsKJiM0MzsJaW50IG9sZF9nZW47CiAKIAkvKgogCSAqIFNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUywgYW5kIGFjdGl2YXRlIGZpbGUtYmFja2VkCkBAIC0zMjc5LDIwICYjNDM7MzI4MiwyNSBAQCBzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYQogCSAqLwogCWlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSAmYW1wOyZhbXA7ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pICZhbXA7JmFtcDsKIAkgICAgIWlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkgewotCQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7CiYjNDM7CQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJZG8gewomIzQzOwkJb2xkX2dlbiA9IGxydV9nZXRfZ2VuX2ZsYWdzKG9sZF9mbGFncyk7CiYjNDM7CQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7CiYjNDM7CiAJCS8qIGxydV9nZW5fZGVsX2ZvbGlvKCkgaGFzIGlzb2xhdGVkIHRoaXMgcGFnZT8gKi8KLQkJaWYgKCEob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykpCi0JCQlyZXR1cm4gLTE7CiYjNDM7CQlpZiAob2xkX2dlbiAmbHQ7IDApCiYjNDM7CQkJYnJlYWs7CiAKLQkJbmV3X2ZsYWdzID0gb2xkX2ZsYWdzICZhbXA7IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpOwotCQluZXdfZmxhZ3MgfD0gKChnZW4gJiM0MzsgMVVMKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGKSB8IEJJVChQR193b3JraW5nc2V0KTsKLQl9IHdoaWxlICghdHJ5X2NtcHhjaGcoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwomIzQzOwkJbHJ1X3NldF9nZW5fZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIG5ld19nZW4pOwomIzQzOwkJbHJ1X3NldF9yZWZzX2ZsYWdzKCZhbXA7bmV3X2ZsYWdzLCAwKTsKJiM0MzsJCW5ld19mbGFncyB8PSBCSVQoUEdfd29ya2luZ3NldCk7CiYjNDM7CX0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksICZhbXA7b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTsKIAotCXJldHVybiAoKG9sZF9mbGFncyAmYW1wOyBMUlVfR0VOX01BU0spICZndDsmZ3Q7IExSVV9HRU5fUEdPRkYpIC0gMTsKJiM0MzsJKnR5cGUgPSBmb2xpb19mbGFnc19pc19maWxlX2xydSgmYW1wO29sZF9mbGFncyk7CiYjNDM7CXJldHVybiBvbGRfZ2VuOwogfQogCiAvKiBwcm90ZWN0IHBhZ2VzIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycyAqLwpAQCAtMzMwMSwyMSAmIzQzOzMzMDksMjAgQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbykKIAlpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTsKIAlzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gJmFtcDtscnV2ZWMtJmd0O2xydWdlbjsKIAlpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLSZndDttaW5fc2VxW3R5cGVdKTsKLQl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLSZndDtmbGFncy5mKTsKLQotCVZNX1dBUk5fT05fT05DRV9GT0xJTyghKG9sZF9mbGFncyAmYW1wOyBMUlVfR0VOX01BU0spLCBmb2xpbyk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7CiAKIAlkbyB7Ci0JCW5ld19nZW4gPSAoKG9sZF9mbGFncyAmYW1wOyBMUlVfR0VOX01BU0spICZndDsmZ3Q7IExSVV9HRU5fUEdPRkYpIC0gMTsKJiM0MzsJCW5ld19nZW4gPSBscnVfZ2V0X2dlbl9mbGFncyhvbGRfZmxhZ3MpOwomIzQzOwogCQkvKiBmb2xpb191cGRhdGVfZ2VuKCkgaGFzIHByb21vdGVkIHRoaXMgcGFnZT8gKi8KIAkJaWYgKG5ld19nZW4gJmd0Oz0gMCAmYW1wOyZhbXA7IG5ld19nZW4gIT0gb2xkX2dlbikKIAkJCXJldHVybiBuZXdfZ2VuOwogCiYjNDM7CQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7CiAJCW5ld19nZW4gPSAob2xkX2dlbiAmIzQzOyAxKSAlIE1BWF9OUl9HRU5TOwotCi0JCW5ld19mbGFncyA9IG9sZF9mbGFncyAmYW1wOyB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTsKLQkJbmV3X2ZsYWdzIHw9IChuZXdfZ2VuICYjNDM7IDFVTCkgJmx0OyZsdDsgTFJVX0dFTl9QR09GRjsKLQl9IHdoaWxlICghdHJ5X2NtcHhjaGcoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwomIzQzOwkJbHJ1X3NldF9nZW5fZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIG5ld19nZW4pOwomIzQzOwkJbHJ1X3NldF9yZWZzX2ZsYWdzKCZhbXA7bmV3X2ZsYWdzLCAwKTsKJiM0MzsJfSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwogCiAJbHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTsKIApAQCAtMzMyMyw5ICYjNDM7MzMzMCw4IEBAIHN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiB9CiAKIHN0YXRpYyB2b2lkIHVwZGF0ZV9iYXRjaF9zaXplKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBmb2xpbyAqZm9saW8sCi0JCQkgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4pCiYjNDM7CQkJICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuLCBpbnQgdHlwZSkKIHsKLQlpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTsKIAlpbnQgem9uZSA9IGZvbGlvX3pvbmVudW0oZm9saW8pOwogCWludCBkZWx0YSA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKIApAQCAtMzUxMiwyMiAmIzQzOzM1MTgsMjQgQEAgc3RhdGljIGJvb2wgc3VpdGFibGVfdG9fc2NhbihpbnQgdG90YWwsIGludCB5b3VuZykKIH0KIAogc3RhdGljIHZvaWQgd2Fsa191cGRhdGVfZm9saW8oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCXN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBib29sIGRpcnR5KQomIzQzOwkJc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIGRpcnR5KQogewotCWludCBvbGRfZ2VuOwomIzQzOwlpbnQgbmV3X2dlbiwgb2xkX2dlbiwgdHlwZTsKIAogCWlmICghZm9saW8pCiAJCXJldHVybjsKIAomIzQzOwluZXdfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShSRUFEX09OQ0UobHJ1dmVjLSZndDtscnVnZW4ubWF4X3NlcSkpOwomIzQzOwogCWlmIChkaXJ0eSAmYW1wOyZhbXA7ICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSAmYW1wOyZhbXA7CiAJICAgICEoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSAmYW1wOyZhbXA7IGZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykgJmFtcDsmYW1wOwogCSAgICAgICFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpKQogCQlmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTsKIAogCWlmICh3YWxrKSB7Ci0JCW9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuLCAmYW1wO3ZtYS0mZ3Q7ZmxhZ3MpOwomIzQzOwkJb2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sICZhbXA7dHlwZSwgJmFtcDt2bWEtJmd0O2ZsYWdzKTsKIAkJaWYgKG9sZF9nZW4gJmd0Oz0gMCAmYW1wOyZhbXA7IG9sZF9nZW4gIT0gbmV3X2dlbikKLQkJCXVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTsKJiM0MzsJCQl1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbiwgdHlwZSk7CiAJfSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCAmYW1wO3ZtYS0mZ3Q7ZmxhZ3MpKSB7CiAJCW9sZF9nZW4gPSBmb2xpb19scnVfZ2VuKGZvbGlvKTsKIAkJaWYgKG9sZF9nZW4gJmd0Oz0gMCAmYW1wOyZhbXA7IG9sZF9nZW4gIT0gbmV3X2dlbikKQEAgLTM1NDksOCAmIzQzOzM1NTcsNiBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIAlzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy0mZ3Q7cHJpdmF0ZTsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay0mZ3Q7bHJ1dmVjKTsKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstJmd0O2xydXZlYyk7Ci0JREVGSU5FX01BWF9TRVEod2Fsay0mZ3Q7bHJ1dmVjKTsKLQlpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTsKIAl1bnNpZ25lZCBpbnQgbnI7CiAJcG1kX3QgcG1kdmFsOwogCkBAIC0zNjAxLDcgJiM0MzszNjA3LDcgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCQljb250aW51ZTsKIAogCQlpZiAobGFzdCAhPSBmb2xpbykgewotCQkJd2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy0mZ3Q7dm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJCQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLSZndDt2bWEsIHdhbGstJmd0O2xydXZlYywgbGFzdCwgZGlydHkpOwogCiAJCQlsYXN0ID0gZm9saW87CiAJCQlkaXJ0eSA9IGZhbHNlOwpAQCAtMzYxNCw3ICYjNDM7MzYyMCw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQl3YWxrLSZndDttbV9zdGF0c1tNTV9MRUFGX1lPVU5HXSAmIzQzOz0gbnI7CiAJfQogCi0Jd2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy0mZ3Q7dm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJd2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy0mZ3Q7dm1hLCB3YWxrLSZndDtscnV2ZWMsIGxhc3QsIGRpcnR5KTsKIAlsYXN0ID0gTlVMTDsKIAogCWlmIChpICZsdDsgUFRSU19QRVJfUFRFICZhbXA7JmFtcDsgZ2V0X25leHRfdm1hKFBNRF9NQVNLLCBQQUdFX1NJWkUsIGFyZ3MsICZhbXA7c3RhcnQsICZhbXA7ZW5kKSkKQEAgLTM2MzcsOCAmIzQzOzM2NDMsNiBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYQogCXN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLSZndDtwcml2YXRlOwogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLSZndDtscnV2ZWMpOwogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQod2Fsay0mZ3Q7bHJ1dmVjKTsKLQlERUZJTkVfTUFYX1NFUSh3YWxrLSZndDtscnV2ZWMpOwotCWludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpOwogCiAJVk1fV0FSTl9PTl9PTkNFKHB1ZF9sZWFmKCpwdWQpKTsKIApAQCAtMzY5Miw3ICYjNDM7MzY5Niw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhCiAJCQlnb3RvIG5leHQ7CiAKIAkJaWYgKGxhc3QgIT0gZm9saW8pIHsKLQkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CQkJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCB3YWxrLSZndDtscnV2ZWMsIGxhc3QsIGRpcnR5KTsKIAogCQkJbGFzdCA9IGZvbGlvOwogCQkJZGlydHkgPSBmYWxzZTsKQEAgLTM3MDYsNyAmIzQzOzM3MTAsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYQogCQlpID0gaSAmZ3Q7IE1JTl9MUlVfQkFUQ0ggPyAwIDogZmluZF9uZXh0X2JpdChiaXRtYXAsIE1JTl9MUlVfQkFUQ0gsIGkpICYjNDM7IDE7CiAJfSB3aGlsZSAoaSAmbHQ7PSBNSU5fTFJVX0JBVENIKTsKIAotCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay0mZ3Q7bHJ1dmVjLCBsYXN0LCBkaXJ0eSk7CiAKIAlsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTsKIAlzcGluX3VubG9jayhwdGwpOwpAQCAtNDI3MCw4ICYjNDM7NDI3NCw2IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucikKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gZm9saW9fcGdkYXQoZm9saW8pOwogCXN0cnVjdCBscnV2ZWMgKmxydXZlYzsKIAlzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGU7Ci0JdW5zaWduZWQgbG9uZyBtYXhfc2VxOwotCWludCBnZW47CiAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKHB2bXctJmd0O3B0bCk7CiAJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSwgZm9saW8pOwpAQCAtNDMwOCw4ICYjNDM7NDMxMCw2IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucikKIAogCW1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7CiAJbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTsKLQltYXhfc2VxID0gUkVBRF9PTkNFKChscnV2ZWMpLSZndDtscnVnZW4ubWF4X3NlcSk7Ci0JZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTsKIAltbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpOwogCiAJbGF6eV9tbXVfbW9kZV9lbmFibGUoKTsKQEAgLTQzNDEsNyAmIzQzOzQzNDEsNyBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpCiAJCQljb250aW51ZTsKIAogCQlpZiAobGFzdCAhPSBmb2xpbykgewotCQkJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJCQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxydXZlYywgbGFzdCwgZGlydHkpOwogCiAJCQlsYXN0ID0gZm9saW87CiAJCQlkaXJ0eSA9IGZhbHNlOwpAQCAtNDM1MywxMyAmIzQzOzQzNTMsMTQgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKQogCQl5b3VuZyAmIzQzOz0gbnI7CiAJfQogCi0Jd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTsKIAogCWxhenlfbW11X21vZGVfZGlzYWJsZSgpOwogCiAJLyogZmVlZGJhY2sgZnJvbSBybWFwIHdhbGtlcnMgdG8gcGFnZSB0YWJsZSB3YWxrZXJzICovCiAJaWYgKG1tX3N0YXRlICZhbXA7JmFtcDsgc3VpdGFibGVfdG9fc2NhbihpLCB5b3VuZykpCi0JCXVwZGF0ZV9ibG9vbV9maWx0ZXIobW1fc3RhdGUsIG1heF9zZXEsIHB2bXctJmd0O3BtZCk7CiYjNDM7CQl1cGRhdGVfYmxvb21fZmlsdGVyKG1tX3N0YXRlLCBSRUFEX09OQ0UobHJ1dmVjLSZndDtscnVnZW4ubWF4X3NlcSksCiYjNDM7CQkJCSAgICBwdm13LSZndDtwbWQpOwogCiAJbWVtX2Nncm91cF9wdXQobWVtY2cpOwogCkBAIC00NzE2LDcgJiM0Mzs0NzE3LDcgQEAgc3RhdGljIGJvb2wgaXNvbGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2EKIAogCS8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqLwogCWlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSkKLQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19NQVNLLCAwKTsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7CiAKIAlzdWNjZXNzID0gbHJ1X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7CiAJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFzdWNjZXNzLCBmb2xpbyk7CkBAIC00ODA5LDkgJiM0Mzs0ODEwLDkgQEAgc3RhdGljIGludCBnZXRfdGllcl9pZHgoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSkKIAkgKiBUaGlzIHZhbHVlIGlzIGNob3NlbiBiZWNhdXNlIGFueSBvdGhlciB0aWVyIHdvdWxkIGhhdmUgYXQgbGVhc3QgdHdpY2UKIAkgKiBhcyBtYW55IHJlZmF1bHRzIGFzIHRoZSBmaXJzdCB0aWVyLgogCSAqLwotCXJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCAwLCAyLCAmYW1wO3NwKTsKLQlmb3IgKHRpZXIgPSAxOyB0aWVyICZsdDsgTUFYX05SX1RJRVJTOyB0aWVyJiM0MzsmIzQzOykgewotCQlyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdGllciwgMywgJmFtcDtwdik7CiYjNDM7CXJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01JTiwgMiwgJmFtcDtzcCk7CiYjNDM7CWZvciAodGllciA9IExSVV9USUVSX01JTiAmIzQzOyAxOyB0aWVyICZsdDs9IExSVV9USUVSX01BWDsgdGllciYjNDM7JiM0MzspIHsKJiM0MzsJCXJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0aWVyLCB0aWVyLCAzLCAmYW1wO3B2KTsKIAkJaWYgKCFwb3NpdGl2ZV9jdHJsX2VycigmYW1wO3NwLCAmYW1wO3B2KSkKIAkJCWJyZWFrOwogCX0KQEAgLTQ4MzIsOCAmIzQzOzQ4MzMsMTAgQEAgc3RhdGljIGludCBnZXRfdHlwZV90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpCiAJICogQ29tcGFyZSB0aGUgc3VtIG9mIGFsbCB0aWVycyBvZiBhbm9uIHdpdGggdGhhdCBvZiBmaWxlIHRvIGRldGVybWluZQogCSAqIHdoaWNoIHR5cGUgdG8gc2Nhbi4KIAkgKi8KLQlyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBNQVhfTlJfVElFUlMsIHN3YXBwaW5lc3MsICZhbXA7c3ApOwotCXJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIE1BWF9OUl9USUVSUywgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCAmYW1wO3B2KTsKJiM0MzsJcmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fQU5PTiwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NQVgsCiYjNDM7CQkgICAgICBzd2FwcGluZXNzLCAmYW1wO3NwKTsKJiM0MzsJcmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NQVgsCiYjNDM7CQkgICAgICBNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3MsICZhbXA7cHYpOwogCiAJcmV0dXJuIHBvc2l0aXZlX2N0cmxfZXJyKCZhbXA7c3AsICZhbXA7cHYpOwogfQpAQCAtNDkzMiw4ICYjNDM7NDkzNSwxMCBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJfQogCiAJCS8qIGRvbiYjMzk7dCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqLwotCQlpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pCi0JCQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfYWN0aXZlKSk7CiYjNDM7CQlpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pIHsKJiM0MzsJCQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwomIzQzOwkJCWZvbGlvX3NldF9hY3RpdmUoZm9saW8pOwomIzQzOwkJfQogCX0KIAogCW1vdmVfZm9saW9zX3RvX2xydSgmYW1wO2xpc3QpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MTkKCQkJCQkJCW91dHB1dDogMjQ4CgkJCQkJCQl0aG91Z2h0czogMzAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBFdmFsdWF0aW9uOiBQYXRjaCBTZXJpZXMgQW5hbHlzaXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZSBpZiBpdCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIE15IGZvY3VzIGlzIGFsd2F5cyBvbiBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLCBlc3BlY2lhbGx5IHRob3NlIHRoYXQgY291bGQgbGVhZCB0byBpbmZvcm1hdGlvbiBsZWFrcyBvciBleHBsb2l0YWJsZSB2dWxuZXJhYmlsaXRpZXMuCgpGaXJzdCwgSSYjMzk7dmUgbWV0aWN1bG91c2x5IGV4YW1pbmVkIHRoZSBmaWxlIG1vZGlmaWNhdGlvbnMuIFRoZSBjaGFuZ2VzIGFyZSBjb25jZW50cmF0ZWQgaW4gYG1lbWNvbnRyb2wuaGAsIGBtbV9pbmxpbmUuaGAsIGBtbXpvbmUuaGAsIGBmb2xpby5jYCwgYG1lbWNvbnRyb2wuY2AsIGBtaWdyYXRlLmNgLCBhbmQgYHZtc2Nhbi5jYC4gSXQmIzM5O3MgYSBtaXggb2YgZGF0YSBzdHJ1Y3R1cmUgYWRqdXN0bWVudHMgYW5kIGZ1bmN0aW9uIHJlZmFjdG9yaW5nIHJlbGF0ZWQgdG8gdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBpbXBsZW1lbnRhdGlvbiwgZm9saW8gZmxhZ3MsIGFuZCBtZW1vcnkgY29udHJvbCBncm91cHMuIFRoZSBrZXkgc3RydWN0dXJhbCBjaGFuZ2UgaXMgaW4gYG1lbV9jZ3JvdXBfcGVyX25vZGVgLCB3aGVyZSBgbHJ1X3pvbmVfc2l6ZWAgaXMgY2hhbmdlZCBmcm9tIGB1bnNpZ25lZCBsb25nYCB0byBgbG9uZ2AuIFRoZXJlIGFyZSBhZGRpdGlvbnMgb2YgaW5saW5lIGZ1bmN0aW9ucyBmb3IgZmxhZyBtYW5hZ2VtZW50IGFuZCB1cGRhdGVzIHRvIHNldmVyYWwgTFJVLXJlbGF0ZWQgZnVuY3Rpb25zLgoKSSYjMzk7dmUgc3BlY2lmaWNhbGx5IHNjcnV0aW5pemVkIGB3YWxrX3VwZGF0ZV9mb2xpb2AgYW5kIGl0cyBjYWxsIHRvIGBmb2xpb191cGRhdGVfZ2VuYC4gVGhlIHBvdGVudGlhbCBpc3N1ZSB3YXMgd2hldGhlciB0aGUgYHR5cGVgIHZhcmlhYmxlLCBwYXNzZWQgdG8gYHVwZGF0ZV9iYXRjaF9zaXplYCwgbWlnaHQgYmUgdW5pbml0aWFsaXplZCBpZiBgZm9saW9fdXBkYXRlX2dlbmAgcmV0dXJuZWQgYW4gZWFybHkgZXhpdC4gSG93ZXZlciwgYWZ0ZXIgY2FyZWZ1bCByZXZpZXcsIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHRoaXMgaXNuJiMzOTt0IHRoZSBjYXNlLiBUaGUgYGlmYCBjb25kaXRpb24gY29ycmVjdGx5IGhhbmRsZXMgdGhlIHNjZW5hcmlvIHdoZXJlIHRoZSBlYXJseSByZXR1cm4gb2YgYC0xYCBvY2N1cnMsIHByZXZlbnRpbmcgdGhlIHVzZSBvZiBhbiB1bmluaXRpYWxpemVkIGB0eXBlYC4gSSYjMzk7dmUgYWxzbyBjaGVja2VkIHdoZXRoZXIgdGhlcmUgYXJlIGZ1cnRoZXIgdXNhZ2VzIG9mIG90aGVyIHZhcmlhYmxlcyB3aXRoaW4gYHdhbGtfdXBkYXRlX2ZvbGlvYCwgZmluZGluZyB0aGF0IG5vbmUgcHJlc2VudCBhbnkgcmlzay4gSSBmb2xsb3dlZCB0aGUgc2FtZSBwcmluY2lwbGUgZm9yIGByZWFkX2N0cmxfcG9zYCBhbmQgZm9yIGBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplYC4KClRoZSBgbHJ1X3NldF9yZWZzX2ZsYWdzYCwgYGxydV9nZXRfcmVmc19mbGFnc2AsIGBmb2xpb19zZXRfbHJ1X3JlZnNgLCBgbHJ1X3NldF9nZW5fZmxhZ3NgLCBhbmQgYGxydV9nZXRfZ2VuX2ZsYWdzYCBmdW5jdGlvbnMgYXJlIGFsbCBtYW5pcHVsYXRpbmcgdGhlIGBmb2xpby0mZ3Q7ZmxhZ3NgLCB3aGljaCBhcmUgYHVuc2lnbmVkIGxvbmdgIGZpZWxkcy4gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgdGhlcmUmIzM5O3Mgbm8gcmlzayBvZiBhbnkgdW5pbml0aWFsaXplZCByZWFkcy4KCkNydWNpYWxseSwgSSYjMzk7dmUgZm91bmQgbm8gZXZpZGVuY2Ugb2YgYW55IGRhdGEgc3RydWN0dXJlcyBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2Ugb3IgYW55IG5ldyBrZXJuZWwgaW50ZXJmYWNlcyBiZWluZyBleHBvc2VkIG9yIG1vZGlmaWVkLiBUaGVyZSBhcmUgbm8gYWxsb2NhdGlvbnMgb3IgaW5pdGlhbGl6YXRpb25zIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGxhdGVyIGJlIHJlYWQuIFRoZSBjaGFuZ2VzIGRlYWwgd2l0aCB0aGUgTFJVIGxvZ2ljLCB3aGljaCBpcyBjcml0aWNhbCwgYnV0IEkgZG9uJiMzOTt0IHNlZSBhbnkgZGlyZWN0IGluZm9ybWF0aW9uIGxlYWthZ2Ugcmlza3MuCgpUaGVyZWZvcmUsIGFmdGVyIHRob3JvdWdobHkgYW5hbHl6aW5nIHRoZXNlIGNoYW5nZXMsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCBzZXJpZXMgZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrcyB0aGF0IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBTdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycyBsaWtlIEtBU0FOLCBhbmQgbG9ja2RlcCwgc2hvdWxkIGNhdGNoIGFueSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBpbiB0aGlzIGFyZWEuIEtNU0FOIGlzIG92ZXJraWxsIGZvciB0aGlzIHNwZWNpZmljIHNldCBvZiBjaGFuZ2VzLiBUaGlzIHBhdGNoIGlzIGEgcmVmYWN0b3JpbmcsIGFuZCBhIGNoYW5nZSB0byBhIHZhcmlhYmxlJiMzOTtzIGRhdGEgdHlwZSwgYW5kIHRoaXMgc2hvdWxkIGJlIHRlc3RlZCBpbiB0aGUgbm9ybWFsIG1hbm5lci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyBNdWx0aS1HZW4gTFJVIChNR0xSVSkgZm9saW8gZmxhZyBvcGVyYXRpb25zIChpbnRyb2R1Y2luZyBoZWxwZXJzIGxpa2UgbHJ1X3NldF9nZW5fZmxhZ3MsIGxydV9zZXRfcmVmc19mbGFncywgZm9saW9fc2V0X2xydV9yZWZzKSwgdXBkYXRlcyBmb2xpbyByZWZlcmVuY2UvZ2VuZXJhdGlvbiB0cmFja2luZyBhY3Jvc3MgcmVjbGFpbSBhbmQgbWlncmF0aW9uIHBhdGhzLCBhbmQgY2hhbmdlcyBtZW1jZyBscnVfem9uZV9zaXplIHRyYWNraW5nIGZyb20gdW5zaWduZWQgbG9uZyB0byBzaWduZWQgbG9uZyB3aXRoIGJvdW5kcyBjaGVja2luZy5cblxuTm8ga2VybmVsLXRvLXVzZXIgZGF0YSBjb3BpZXMsIGlvY3Rscywgb3IgdXNlci1mYWNpbmcgc3RydWN0cyBhcmUgbW9kaWZpZWQuIFN0YWNrIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIChlLmcuLCBgdHlwZWAgaW4gYHdhbGtfdXBkYXRlX2ZvbGlvYCkgYXJlIGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyByZWFkIChhcyBgdHlwZWAgaXMgb25seSBwYXNzZWQgdG8gYHVwZGF0ZV9iYXRjaF9zaXplYCB3aGVuIGBvbGRfZ2VuIFx1MDAzZT0gMGAsIHdoaWNoIGd1YXJhbnRlZXMgYXNzaWdubWVudCBpbiBgZm9saW9fdXBkYXRlX2dlbmApLiBObyB1bmluaXRpYWxpemVkIGhlYXAsIHN0YWNrLCBvciBwYWdlIGFsbG9jYXRpb25zIGFyZSBleHBvc2VkLiBQb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgaW4gdGhlc2UgTU0gcGF0aHMgKHN1Y2ggYXMgY29uY3VycmVuY3kgaXNzdWVzIG9yIGludmFsaWQgZm9saW8gZGVyZWZlcmVuY2VzKSBmYWxsIHVuZGVyIEtBU0FOL0xPQ0tERVAgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgZGV0ZWN0b3JzLiBUaHVzLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyBNdWx0aS1HZW4gTFJVIChNR0xSVSkgZm9saW8gZmxhZyBvcGVyYXRpb25zIChpbnRyb2R1Y2luZyBoZWxwZXJzIGxpa2UgbHJ1X3NldF9nZW5fZmxhZ3MsIGxydV9zZXRfcmVmc19mbGFncywgZm9saW9fc2V0X2xydV9yZWZzKSwgdXBkYXRlcyBmb2xpbyByZWZlcmVuY2UvZ2VuZXJhdGlvbiB0cmFja2luZyBhY3Jvc3MgcmVjbGFpbSBhbmQgbWlncmF0aW9uIHBhdGhzLCBhbmQgY2hhbmdlcyBtZW1jZyBscnVfem9uZV9zaXplIHRyYWNraW5nIGZyb20gdW5zaWduZWQgbG9uZyB0byBzaWduZWQgbG9uZyB3aXRoIGJvdW5kcyBjaGVja2luZy5cblxuTm8ga2VybmVsLXRvLXVzZXIgZGF0YSBjb3BpZXMsIGlvY3Rscywgb3IgdXNlci1mYWNpbmcgc3RydWN0cyBhcmUgbW9kaWZpZWQuIFN0YWNrIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIChlLmcuLCBgdHlwZWAgaW4gYHdhbGtfdXBkYXRlX2ZvbGlvYCkgYXJlIGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyByZWFkIChhcyBgdHlwZWAgaXMgb25seSBwYXNzZWQgdG8gYHVwZGF0ZV9iYXRjaF9zaXplYCB3aGVuIGBvbGRfZ2VuIFx1MDAzZT0gMGAsIHdoaWNoIGd1YXJhbnRlZXMgYXNzaWdubWVudCBpbiBgZm9saW9fdXBkYXRlX2dlbmApLiBObyB1bmluaXRpYWxpemVkIGhlYXAsIHN0YWNrLCBvciBwYWdlIGFsbG9jYXRpb25zIGFyZSBleHBvc2VkLiBQb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgaW4gdGhlc2UgTU0gcGF0aHMgKHN1Y2ggYXMgY29uY3VycmVuY3kgaXNzdWVzIG9yIGludmFsaWQgZm9saW8gZGVyZWZlcmVuY2VzKSBmYWxsIHVuZGVyIEtBU0FOL0xPQ0tERVAgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgZGV0ZWN0b3JzLiBUaHVzLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0MDo0OS40MTc2MTQ1NjJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDE1NTk2MjYyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNSUdSQVRJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJscnVfZ2VuX2xvb2tfYXJvdW5kXCIsXG4gICAgXCJmb2xpb19taWdyYXRlX2ZsYWdzXCIsXG4gICAgXCJtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZVwiLFxuICAgIFwibHJ1X2dlbl9yZXBhcmVudF9tZW1jZ1wiLFxuICAgIFwibHJ1X2dlbl9zb2Z0X3JlY2xhaW1cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyByZWZhY3RvcnMgTXVsdGktR2VuIExSVSAoTUdMUlUpIGZvbGlvIGZsYWcgb3BlcmF0aW9ucyAoaW50cm9kdWNpbmcgaGVscGVycyBsaWtlIGxydV9zZXRfZ2VuX2ZsYWdzLCBscnVfc2V0X3JlZnNfZmxhZ3MsIGZvbGlvX3NldF9scnVfcmVmcyksIHVwZGF0ZXMgZm9saW8gcmVmZXJlbmNlL2dlbmVyYXRpb24gdHJhY2tpbmcgYWNyb3NzIHJlY2xhaW0gYW5kIG1pZ3JhdGlvbiBwYXRocywgYW5kIGNoYW5nZXMgbWVtY2cgbHJ1X3pvbmVfc2l6ZSB0cmFja2luZyBmcm9tIHVuc2lnbmVkIGxvbmcgdG8gc2lnbmVkIGxvbmcgd2l0aCBib3VuZHMgY2hlY2tpbmcuXFxuXFxuTm8ga2VybmVsLXRvLXVzZXIgZGF0YSBjb3BpZXMsIGlvY3Rscywgb3IgdXNlci1mYWNpbmcgc3RydWN0cyBhcmUgbW9kaWZpZWQuIFN0YWNrIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIChlLmcuLCBgdHlwZWAgaW4gYHdhbGtfdXBkYXRlX2ZvbGlvYCkgYXJlIGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyByZWFkIChhcyBgdHlwZWAgaXMgb25seSBwYXNzZWQgdG8gYHVwZGF0ZV9iYXRjaF9zaXplYCB3aGVuIGBvbGRfZ2VuIFxcdTAwM2U9IDBgLCB3aGljaCBndWFyYW50ZWVzIGFzc2lnbm1lbnQgaW4gYGZvbGlvX3VwZGF0ZV9nZW5gKS4gTm8gdW5pbml0aWFsaXplZCBoZWFwLCBzdGFjaywgb3IgcGFnZSBhbGxvY2F0aW9ucyBhcmUgZXhwb3NlZC4gUG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIGluIHRoZXNlIE1NIHBhdGhzIChzdWNoIGFzIGNvbmN1cnJlbmN5IGlzc3VlcyBvciBpbnZhbGlkIGZvbGlvIGRlcmVmZXJlbmNlcykgZmFsbCB1bmRlciBLQVNBTi9MT0NLREVQIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGRldGVjdG9ycy4gVGh1cywgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIE11bHRpLUdlbiBMUlUgKE1HTFJVKSwgcGFnZSByZWZlcmVuY2UgY291bnRpbmcsIGZvbGlvIGZsYWdzIG1hbmFnZW1lbnQsIGZvbGlvIG1pZ3JhdGlvbiwgYW5kIG1lbWNnIExSVSBzaXplIGFjY291bnRpbmcuIFRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhZmZlY3QgcGFnZSByZWNsYW1hdGlvbiwgYWdpbmcsIGFuZCBtaWdyYXRpb24gYmVoYXZpb3IgaW4gcmVhY2hhYmxlIGNvcmUgbW0gY29kZSBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDA6NDkuNDE3NjIwMTIyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDA2NTAyMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0ZDcwZDFjYjc1NzEzNDIyODZmNDZjM2I1YTg4ZDQ5ZWY2NDlhZGI3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDMgMDQ6NDA6NDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxcbmluZGV4IDdkMWMwY2UxODlhODguLjg2NzgwZWY2NWVhZmEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxcbkBAIC0xMTMsNyArMTEzLDcgQEAgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUge1xcbiBcXHQvKiBGaWVsZHMgd2hpY2ggZ2V0IHVwZGF0ZWQgb2Z0ZW4gYXQgdGhlIGVuZC4gKi9cXG4gXFx0c3RydWN0IGxydXZlY1xcdFxcdGxydXZlYztcXG4gXFx0Q0FDSEVMSU5FX1BBRERJTkcoX3BhZDJfKTtcXG4tXFx0dW5zaWduZWQgbG9uZ1xcdFxcdGxydV96b25lX3NpemVbTUFYX05SX1pPTkVTXVtOUl9MUlVfTElTVFNdO1xcbitcXHRsb25nXFx0XFx0XFx0bHJ1X3pvbmVfc2l6ZVtNQVhfTlJfWk9ORVNdW05SX0xSVV9MSVNUU107XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwX3JlY2xhaW1faXRlclxcdGl0ZXI7XFxuIFxcbiBcXHQvKlxcbkBAIC05MDIsMTAgKzkwMiwxNSBAQCBzdGF0aWMgaW5saW5lXFxuIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdFxcdGVudW0gbHJ1X2xpc3QgbHJ1LCBpbnQgem9uZV9pZHgpXFxuIHtcXG4rXFx0bG9uZyB2YWw7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejtcXG4gXFxuIFxcdG16ID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7XFxuLVxcdHJldHVybiBSRUFEX09OQ0UobXotXFx1MDAzZWxydV96b25lX3NpemVbem9uZV9pZHhdW2xydV0pO1xcbitcXHR2YWwgPSBSRUFEX09OQ0UobXotXFx1MDAzZWxydV96b25lX3NpemVbem9uZV9pZHhdW2xydV0pO1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKHZhbCBcXHUwMDNjIDApKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJldHVybiB2YWw7XFxuIH1cXG4gXFxuIHZvaWQgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxcbmluZGV4IDYyMWM4NjUzZDhmN2UuLmFiNjliOTkzMDg5M2YgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcXG5AQCAtMzAsNiArMzAsMTcgQEAgc3RhdGljIGlubGluZSBpbnQgZm9saW9faXNfZmlsZV9scnUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0cmV0dXJuICFmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pO1xcbiB9XFxuIFxcbisvKipcXG4rICogZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUgLSBTaG91bGQgdGhlIGZvbGlvIGJlIG9uIGEgZmlsZSBMUlUgb3IgYW5vbiBMUlU/XFxuKyAqIEBmbGFnczogVGhlIGZvbGlvJ3MgZmxhZ3MuXFxuKyAqXFxuKyAqIEp1c3QgbGlrZSBmb2xpb19pc19maWxlX2xydSBidXQgdGFrZSB0aGUgZm9saW8gZmxhZ3MgZGlyZWN0bHkgaW5zdGVhZC5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZsYWdzKVxcbit7XFxuK1xcdHJldHVybiAhdGVzdF9iaXQoUEdfc3dhcGJhY2tlZCwgZmxhZ3MpO1xcbit9XFxuK1xcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX191cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiBcXHRcXHRcXHRcXHRlbnVtIGxydV9saXN0IGxydSwgZW51bSB6b25lX3R5cGUgemlkLFxcbiBcXHRcXHRcXHRcXHRsb25nIG5yX3BhZ2VzKVxcbkBAIC0xNDIsMTAgKzE1Myw2NiBAQCBzdGF0aWMgaW5saW5lIGludCBscnVfdGllcl9mcm9tX3JlZnMoaW50IHJlZnMsIGJvb2wgd29ya2luZ3NldClcXG4gXFx0cmV0dXJuIHdvcmtpbmdzZXQgPyBNQVhfTlJfVElFUlMgLSAxIDogb3JkZXJfYmFzZV8yKHJlZnMpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbisvKipcXG4rICogbHJ1X3NldF9nZW5fZmxhZ3MgLSBTZXQgdGhlIExSVSBnZW5lcmF0aW9uIG51bWJlciB0byBzcGVjaWZpZWQgZm9saW8gZmxhZ3MuXFxuKyAqIEBmbGFnczogcG9pbnRlciB0byB0aGUgZm9saW8gZmxhZ3NcXG4rICogQGdlbjogZ2VuZXJhdGlvbiBudW1iZXIsIGJldHdlZW4gMCBhbmQgKE1BWF9OUl9HRU5TIC0gMSksIGluY2x1c2l2ZS5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfc2V0X2dlbl9mbGFncyh1bnNpZ25lZCBsb25nICpmbGFncywgaW50IGdlbilcXG4re1xcbitcXHRCVUlMRF9CVUdfT04oTFJVX0dFTl9NQVNLIFxcdTAwMjYgTFJVX1JFRlNfTUFTSyk7XFxuK1xcdFZNX1dBUk5fT05fT05DRShnZW4gXFx1MDAzZT0gTUFYX05SX0dFTlMgfHwgZ2VuIFxcdTAwM2MgMCk7XFxuK1xcdC8qIFN0b3JlIGdlbiBvZmZzZXQgYnkgMSwgemVybyBtZWFucyB0aGUgZm9saW8gaXMgb2ZmLWxpc3QuICovXFxuK1xcdCpmbGFncyBcXHUwMDI2PSB+TFJVX0dFTl9NQVNLO1xcbitcXHQqZmxhZ3MgfD0gKGdlbiArIDFVTCkgXFx1MDAzY1xcdTAwM2MgTFJVX0dFTl9QR09GRjtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGxydV9nZXRfZ2VuX2ZsYWdzIC0gUmV0dXJuIHRoZSBMUlUgZ2VuZXJhdGlvbiBudW1iZXIgZnJvbSBmb2xpbyBmbGFncy5cXG4rICogQGZsYWdzOiBmb2xpbyBmbGFnc1xcbisgKlxcbisgKiBSZXR1cm5zOiBBIG51bWJlciBiZXR3ZWVuIDAgYW5kIChNQVhfTlJfR0VOUyAtIDEpLCBpbmNsdXNpdmUuIFJldHVybnNcXG4rICogLTEgaWYgdGhlIGZsYWdzIGluZGljYXRlIHRoZSBmb2xpbyBpcyBvZmYgdGhlIGxpc3QgKGUuZy4sIGlzb2xhdGVkKS5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgaW50IGxydV9nZXRfZ2VuX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuK3tcXG4rXFx0aW50IGdlbiA9ICgoZmxhZ3MgXFx1MDAyNiBMUlVfR0VOX01BU0spIFxcdTAwM2VcXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcXG4rXFxuK1xcdC8qIEV4Y2x1ZGUgdGhlIGxlZ2FsIC0xIGZyb20gdGhlIHVuc2lnbmVkIE1BWF9OUl9HRU5TIGNvbXBhcmlzb24gKi9cXG4rXFx0Vk1fV0FSTl9PTl9PTkNFKGdlbiAhPSAtMSBcXHUwMDI2XFx1MDAyNiBnZW4gXFx1MDAzZT0gTUFYX05SX0dFTlMpO1xcbitcXHRyZXR1cm4gZ2VuO1xcbit9XFxuK1xcbisvKipcXG4rICogbHJ1X3NldF9yZWZzX2ZsYWdzIC0gU2V0IHRoZSBMUlUgcmVmZXJlbmNlZCBjb3VudCB0byBmb2xpbyBmbGFncy5cXG4rICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFnc1xcbisgKiBAcmVmczogcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCBudW1iZXIsIGJldHdlZW4gMCBhbmQgTFJVX1JFRlNfTUFYLCBpbmNsdXNpdmUuXFxuKyAqXFxuKyAqIEZvciBNR0xSVSwgUEdfcmVmZXJlbmNlZCBob2xkcyB0aGUgZmlyc3QgcmVmLCBhbmQgdGhlIGV4dHJhIGJpdHMgaG9sZCB0aGVcXG4rICogcmVtYWluaW5nIHJlZnMuIEZvciBjbGFzc2ljYWwgTFJVIHRoZSBleHRyYSBiaXRzIGFyZSBub3QgdXNlZCwgc28gaXQgY2FuXFxuKyAqIGFsc28gYmUgc2VlbiBhcyB0aGUgcmVmcyBjb3VudCBuZXZlciBleGNlZWRzIDEuIEluIGJvdGggY2FzZXMsIHJlZnMgPT0gMVxcbisgKiBtZWFucyBQR19yZWZlcmVuY2VkIGlzIHNldCBhbmQgdGhlIGV4dHJhIGJpdHMgYXJlIHplcm8sIGFuZCByZWZzID09IDAgbWVhbnNcXG4rICogUEdfcmVmZXJlbmNlZCBhbmQgdGhlIGV4dHJhIGJpdHMgYXJlIGFsbCB1bnNldC5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfc2V0X3JlZnNfZmxhZ3ModW5zaWduZWQgbG9uZyAqZmxhZ3MsIHVuc2lnbmVkIGludCByZWZzKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXFx1MDAzZWZsYWdzLmYpO1xcbitcXHRWTV9XQVJOX09OX09OQ0UocmVmcyBcXHUwMDNlIExSVV9SRUZTX01BWCk7XFxuK1xcdEJVSUxEX0JVR19PTihMUlVfUkVGU19NQVggIT0gKExSVV9SRUZTX01BU0sgXFx1MDAzZVxcdTAwM2UgTFJVX1JFRlNfUEdPRkYpICsgMSk7XFxuIFxcbitcXHQqZmxhZ3MgXFx1MDAyNj0gfkxSVV9SRUZTX0ZMQUdTO1xcbitcXHRpZiAoIXJlZnMpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0KmZsYWdzIHw9IChCSVQoUEdfcmVmZXJlbmNlZCkgfCAoKHJlZnMgLSAxVUwpIFxcdTAwM2NcXHUwMDNjIExSVV9SRUZTX1BHT0ZGKSk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBscnVfZ2V0X3JlZnNfZmxhZ3MgLSBSZXR1cm4gTFJVIHJlZmVyZW5jZWQgLyBhY2Nlc3MgY291bnQgZnJvbSBmb2xpbyBmbGFncy5cXG4rICogQGZsYWdzOiBmb2xpbyBmbGFnc1xcbisgKlxcbisgKiBSZWFkcyB0aGUgTFJVIHJlZmVyZW5jZWQgY291bnQgc2V0IGJ5IGxydV9zZXRfcmVmc19mbGFncygpLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBpbnQgbHJ1X2dldF9yZWZzX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuK3tcXG4gXFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBCSVQoUEdfcmVmZXJlbmNlZCkpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0LypcXG5AQCAtMTU1LDExICsyMjIsMjQgQEAgc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0cmV0dXJuICgoZmxhZ3MgXFx1MDAyNiBMUlVfUkVGU19NQVNLKSBcXHUwMDNlXFx1MDAzZSBMUlVfUkVGU19QR09GRikgKyAxO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfZ2VuKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBmbGFncyA9IFJFQURfT05DRShmb2xpby1cXHUwMDNlZmxhZ3MuZik7XFxuK1xcdHJldHVybiBscnVfZ2V0X3JlZnNfZmxhZ3MoUkVBRF9PTkNFKCpjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpKTtcXG4rfVxcbiBcXG4tXFx0cmV0dXJuICgoZmxhZ3MgXFx1MDAyNiBMUlVfR0VOX01BU0spIFxcdTAwM2VcXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgcmVmcylcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xcbitcXG4rXFx0ZG8ge1xcbitcXHRcXHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XFxuK1xcdFxcdGxydV9zZXRfcmVmc19mbGFncyhcXHUwMDI2bmV3X2ZsYWdzLCByZWZzKTtcXG4rXFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHRyZXR1cm4gbHJ1X2dldF9nZW5fZmxhZ3MoUkVBRF9PTkNFKCpjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpKTtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIGxydV9nZW5faXNfYWN0aXZlKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IGdlbilcXG5AQCAtMjcwLDcgKzM1MCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2FkZF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcXG4gXFx0ZmxhZ3MgPSAoZ2VuICsgMVVMKSBcXHUwMDNjXFx1MDAzYyBMUlVfR0VOX1BHT0ZGO1xcbiBcXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUlOX05SX0dFTlMgYWJvdXQgUEdfYWN0aXZlICovXFxuLVxcdHNldF9tYXNrX2JpdHMoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpO1xcbitcXHRzZXRfbWFza19iaXRzKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgTFJVX0dFTl9NQVNLIHwgQklUKFBHX2FjdGl2ZSksIGZsYWdzKTtcXG4gXFxuIFxcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgLTEsIGdlbik7XFxuIFxcdC8qIGZvciBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoKSAqL1xcbkBAIC0yOTUsNyArMzc1LDcgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFxuIFxcdC8qIGZvciBmb2xpb19taWdyYXRlX2ZsYWdzKCkgKi9cXG4gXFx0ZmxhZ3MgPSAhcmVjbGFpbWluZyBcXHUwMDI2XFx1MDAyNiBscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIGdlbikgPyBCSVQoUEdfYWN0aXZlKSA6IDA7XFxuLVxcdGZsYWdzID0gc2V0X21hc2tfYml0cyhcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYsIExSVV9HRU5fTUFTSywgZmxhZ3MpO1xcbitcXHRmbGFncyA9IHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0ssIGZsYWdzKTtcXG4gXFx0Z2VuID0gKChmbGFncyBcXHUwMDI2IExSVV9HRU5fTUFTSykgXFx1MDAzZVxcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xcbiBcXG4gXFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBnZW4sIC0xKTtcXG5AQCAtMzA0LDExICszODQsMTkgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxcbisvKipcXG4rICogZm9saW9fbWlncmF0ZV9scnVfcmVmcyAtIGNvcHkgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBhIG5ldyBmb2xpb1xcbisgKiBAbmV3OiB0aGUgZGVzdGluYXRpb24gZm9saW9cXG4rICogQG9sZDogdGhlIHNvdXJjZSBmb2xpb1xcbisgKlxcbisgKiBUcmFuc2ZlciB0aGUgcmVmZXJlbmNlIHN0YXRlIHRvIEBuZXcgZHVyaW5nIG1pZ3JhdGlvbjogdGhlIE1HTFJVXFxuKyAqIHJlZnMgY291bnQsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkLCBvciBqdXN0IFBHX3JlZmVyZW5jZWQgZm9yIHRoZVxcbisgKiBhY3RpdmUvaW5hY3RpdmUgTFJVLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGxvbmcgcmVmcyA9IFJFQURfT05DRShvbGQtXFx1MDAzZWZsYWdzLmYpIFxcdTAwMjYgTFJVX1JFRlNfTUFTSztcXG4tXFxuLVxcdHNldF9tYXNrX2JpdHMoXFx1MDAyNm5ldy1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgcmVmcyk7XFxuK1xcdEJVSUxEX0JVR19PTihMUlVfUkVGU19NQVNLIFxcdTAwMjYgQklUKFBHX3JlZmVyZW5jZWQpKTtcXG4rXFx0Zm9saW9fc2V0X2xydV9yZWZzKG5ldywgZm9saW9fbHJ1X3JlZnMob2xkKSk7XFxuIH1cXG4gI2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXFxuIFxcbkBAIC0zMzcsOSArNDI1LDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcXG4ge1xcbi1cXG4rXFx0aWYgKGZvbGlvX3Rlc3RfcmVmZXJlbmNlZChvbGQpKVxcbitcXHRcXHRmb2xpb19zZXRfcmVmZXJlbmNlZChuZXcpO1xcbiB9XFxuICNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcXG5pbmRleCA5NGY5YzNmZjU0MTYwLi45YjI3Y2Y1M2JkYmM3IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXFxuQEAgLTQ5MiwxMSArNDkyLDE0IEBAIGVudW0gbHJ1dmVjX2ZsYWdzIHtcXG4gICogZm9saW8tXFx1MDAzZWZsYWdzLCBtYXNrZWQgYnkgTFJVX1JFRlNfTUFTSy5cXG4gICovXFxuICNkZWZpbmUgTUFYX05SX1RJRVJTXFx0XFx0NFVcXG4rI2RlZmluZSBMUlVfVElFUl9NSU5cXHRcXHQwVVxcbisjZGVmaW5lIExSVV9USUVSX01BWFxcdFxcdChNQVhfTlJfVElFUlMgLSAxKVxcbiBcXG4gI2lmbmRlZiBfX0dFTkVSQVRJTkdfQk9VTkRTX0hcXG4gXFxuICNkZWZpbmUgTFJVX0dFTl9NQVNLXFx0XFx0KChCSVQoTFJVX0dFTl9XSURUSCkgLSAxKSBcXHUwMDNjXFx1MDAzYyBMUlVfR0VOX1BHT0ZGKVxcbiAjZGVmaW5lIExSVV9SRUZTX01BU0tcXHRcXHQoKEJJVChMUlVfUkVGU19XSURUSCkgLSAxKSBcXHUwMDNjXFx1MDAzYyBMUlVfUkVGU19QR09GRilcXG4rI2RlZmluZSBMUlVfUkVGU19NQVhcXHRcXHRCSVQoTFJVX1JFRlNfV0lEVEgpXFxuIFxcbiAvKlxcbiAgKiBGb3IgZm9saW9zIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycyxcXG5kaWZmIC0tZ2l0IGEvbW0vZm9saW8uYyBiL21tL2ZvbGlvLmNcXG5pbmRleCBjMDJkY2VhOWMwM2MyLi5mYjg3NGZlNDkyYjJiIDEwMDY0NFxcbi0tLSBhL21tL2ZvbGlvLmNcXG4rKysgYi9tbS9mb2xpby5jXFxuQEAgLTM1MywyNiArMzUzLDI4IEBAIHN0YXRpYyB2b2lkIF9fbHJ1X2NhY2hlX2FjdGl2YXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcbiBzdGF0aWMgdm9pZCBscnVfZ2VuX2luY19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cXHUwMDNlZmxhZ3MuZik7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XFxuK1xcdGludCByZWZzO1xcbiBcXG4gXFx0aWYgKGZvbGlvX3Rlc3RfdW5ldmljdGFibGUoZm9saW8pKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi9cXG4tXFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKSB7XFxuLVxcdFxcdHNldF9tYXNrX2JpdHMoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xcbitcXHRpZiAoIWZvbGlvX2xydV9yZWZzKGZvbGlvKSkge1xcbitcXHRcXHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuIFxcdGRvIHtcXG4tXFx0XFx0aWYgKChvbGRfZmxhZ3MgXFx1MDAyNiBMUlVfUkVGU19NQVNLKSA9PSBMUlVfUkVGU19NQVNLKSB7XFxuK1xcdFxcdG5ld19mbGFncyA9IG9sZF9mbGFncztcXG4rXFx0XFx0cmVmcyA9IGxydV9nZXRfcmVmc19mbGFncyhvbGRfZmxhZ3MpO1xcbitcXHRcXHRpZiAocmVmcyA9PSBMUlVfUkVGU19NQVgpIHtcXG4gXFx0XFx0XFx0aWYgKCFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKVxcbiBcXHRcXHRcXHRcXHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XFxuIFxcdFxcdFxcdHJldHVybjtcXG4gXFx0XFx0fVxcbi1cXG4tXFx0XFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzICsgQklUKExSVV9SRUZTX1BHT0ZGKTtcXG4tXFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgXFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XFxuK1xcdFxcdGxydV9zZXRfcmVmc19mbGFncyhcXHUwMDI2bmV3X2ZsYWdzLCByZWZzICsgMSk7XFxuK1xcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFxcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcXG5AQCAtMzg0LDcgKzM4Niw4IEBAIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRpZiAoZ2VuIFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbi1cXHRzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MgfCBCSVQoUEdfd29ya2luZ3NldCksIDApO1xcbitcXHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xcbitcXHRmb2xpb19jbGVhcl93b3JraW5nc2V0KGZvbGlvKTtcXG4gXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0c2VxID0gUkVBRF9PTkNFKGZvbGlvX2xydXZlYyhmb2xpbyktXFx1MDAzZWxydWdlbi5taW5fc2VxW3R5cGVdKTtcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXFxuaW5kZXggODU2YTdkMDc1ODZjYy4uMGE2NWFiOGRmMjdhOSAxMDA2NDRcXG4tLS0gYS9tbS9tZW1jb250cm9sLmNcXG4rKysgYi9tbS9tZW1jb250cm9sLmNcXG5AQCAtMTUyOSwyOCArMTUyOSwxMiBAQCB2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXFxuIFxcdFxcdFxcdFxcdGludCB6aWQsIGxvbmcgbnJfcGFnZXMpXFxuIHtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16O1xcbi1cXHR1bnNpZ25lZCBsb25nICpscnVfc2l6ZTtcXG4tXFx0bG9uZyBzaXplO1xcbiBcXG4gXFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0bXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcXG4tXFx0bHJ1X3NpemUgPSBcXHUwMDI2bXotXFx1MDAzZWxydV96b25lX3NpemVbemlkXVtscnVdO1xcbi1cXG4tXFx0aWYgKG5yX3BhZ2VzIFxcdTAwM2MgMClcXG4tXFx0XFx0KmxydV9zaXplICs9IG5yX3BhZ2VzO1xcbi1cXG4tXFx0c2l6ZSA9ICpscnVfc2l6ZTtcXG4tXFx0aWYgKFdBUk5fT05DRShzaXplIFxcdTAwM2MgMCxcXG4tXFx0XFx0XFxcIiVzKCVwLCAlZCwgJWxkKTogbHJ1X3NpemUgJWxkXFxcXG5cXFwiLFxcbi1cXHRcXHRfX2Z1bmNfXywgbHJ1dmVjLCBscnUsIG5yX3BhZ2VzLCBzaXplKSkge1xcbi1cXHRcXHRWTV9CVUdfT04oMSk7XFxuLVxcdFxcdCpscnVfc2l6ZSA9IDA7XFxuLVxcdH1cXG4tXFxuLVxcdGlmIChucl9wYWdlcyBcXHUwMDNlIDApXFxuLVxcdFxcdCpscnVfc2l6ZSArPSBucl9wYWdlcztcXG4rXFx0bXotXFx1MDAzZWxydV96b25lX3NpemVbemlkXVtscnVdICs9IG5yX3BhZ2VzO1xcbiB9XFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jXFxuaW5kZXggMTViNDU4MzJiY2ZhNy4uYTM2OWQwYzk1YzM4NiAxMDA2NDRcXG4tLS0gYS9tbS9taWdyYXRlLmNcXG4rKysgYi9tbS9taWdyYXRlLmNcXG5AQCAtNzc2LDggKzc3Niw5IEBAIHZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdGludCBjcHVwaWQ7XFxuIFxcbi1cXHRpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSlcXG4tXFx0XFx0Zm9saW9fc2V0X3JlZmVyZW5jZWQobmV3Zm9saW8pO1xcbitcXHQvKiBDb3B5IHRoZSByZWZlcmVuY2Ugc3RhdGUsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkICovXFxuK1xcdGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMobmV3Zm9saW8sIGZvbGlvKTtcXG4rXFxuIFxcdGlmIChmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSlcXG4gXFx0XFx0Zm9saW9fbWFya191cHRvZGF0ZShuZXdmb2xpbyk7XFxuIFxcdGlmIChmb2xpb190ZXN0X2NsZWFyX2FjdGl2ZShmb2xpbykpIHtcXG5AQCAtODA3LDcgKzgwOCw2IEBAIHZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRpZiAoZm9saW9fdGVzdF9pZGxlKGZvbGlvKSlcXG4gXFx0XFx0Zm9saW9fc2V0X2lkbGUobmV3Zm9saW8pO1xcbiBcXG4tXFx0Zm9saW9fbWlncmF0ZV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7XFxuIFxcdC8qXFxuIFxcdCAqIENvcHkgTlVNQSBpbmZvcm1hdGlvbiB0byB0aGUgbmV3IHBhZ2UsIHRvIHByZXZlbnQgb3Zlci1lYWdlclxcbiBcXHQgKiBmdXR1cmUgbWlncmF0aW9ucyBvZiB0aGlzIHNhbWUgcGFnZS5cXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IGZkZDEzMjk5YTA0YTkuLmU3ZDM3OWM2ZTcwM2EgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC04NDMsMTkgKzg0MywyMiBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXFxuIFxcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSkge1xcbiBcXHRcXHQvKiBBY3RpdmF0ZSBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciBmaXJzdCB1c2FnZS4gKi9cXG4gXFx0XFx0aWYgKGlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkge1xcbi1cXHRcXHRcXHRzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7XFxuK1xcdFxcdFxcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcXG4rXFx0XFx0XFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcXG4gXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdHNldF9tYXNrX2JpdHMoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xcbitcXHRcXHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpO1xcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdH1cXG4gXFxuIFxcdC8qIFByb21vdGUgb24gc2Vjb25kIGFjY2VzcyAqL1xcbi1cXHRpZiAoZm9saW9fbHJ1X3JlZnMoZm9saW8pIFxcdTAwM2UgMSlcXG4tXFx0XFx0c2V0X21hc2tfYml0cyhcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfd29ya2luZ3NldCkpO1xcbi1cXHRlbHNlXFxuK1xcdGlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgXFx1MDAzZSAxKSB7XFxuK1xcdFxcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcXG4rXFx0XFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcXG4rXFx0fSBlbHNlIHtcXG4gXFx0XFx0Zm9saW9fbWFya19hY2Nlc3NlZChmb2xpbyk7XFxuK1xcdH1cXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gI2Vsc2VcXG5AQCAtMzE5NSw4ICszMTk4LDggQEAgc3RydWN0IGN0cmxfcG9zIHtcXG4gXFx0aW50IGdhaW47XFxuIH07XFxuIFxcbi1zdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2FpbixcXG4tXFx0XFx0XFx0ICBzdHJ1Y3QgY3RybF9wb3MgKnBvcylcXG4rc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllcl9taW4sXFxuK1xcdFxcdFxcdCAgaW50IHRpZXJfbWF4LCBpbnQgZ2Fpbiwgc3RydWN0IGN0cmxfcG9zICpwb3MpXFxuIHtcXG4gXFx0aW50IGk7XFxuIFxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxuQEAgLTMyMDUsNyArMzIwOCw3IEBAIHN0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXIsIGludCBnYWluLFxcbiBcXHRwb3MtXFx1MDAzZWdhaW4gPSBnYWluO1xcbiBcXHRwb3MtXFx1MDAzZXJlZmF1bHRlZCA9IHBvcy1cXHUwMDNldG90YWwgPSAwO1xcbiBcXG4tXFx0Zm9yIChpID0gdGllciAlIE1BWF9OUl9USUVSUzsgaSBcXHUwMDNjPSBtaW4odGllciwgTUFYX05SX1RJRVJTIC0gMSk7IGkrKykge1xcbitcXHRmb3IgKGkgPSB0aWVyX21pbjsgaSBcXHUwMDNjPSB0aWVyX21heDsgaSsrKSB7XFxuIFxcdFxcdHBvcy1cXHUwMDNlcmVmYXVsdGVkICs9IGxydWdlbi1cXHUwMDNlYXZnX3JlZmF1bHRlZFt0eXBlXVtpXSArXFxuIFxcdFxcdFxcdFxcdCAgYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bHJ1Z2VuLVxcdTAwM2VyZWZhdWx0ZWRbaGlzdF1bdHlwZV1baV0pO1xcbiBcXHRcXHRwb3MtXFx1MDAzZXRvdGFsICs9IGxydWdlbi1cXHUwMDNlYXZnX3RvdGFsW3R5cGVdW2ldICtcXG5AQCAtMzI2NiwxMSArMzI2OSwxMSBAQCBzdGF0aWMgYm9vbCBwb3NpdGl2ZV9jdHJsX2VycihzdHJ1Y3QgY3RybF9wb3MgKnNwLCBzdHJ1Y3QgY3RybF9wb3MgKnB2KVxcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbiBcXG4gLyogcHJvbW90ZSBwYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzICovXFxuLXN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbitzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGludCAqdHlwZSxcXG4rXFx0XFx0XFx0ICAgIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cXHUwMDNlZmxhZ3MuZik7XFxuLVxcbi1cXHRWTV9XQVJOX09OX09OQ0UoZ2VuIFxcdTAwM2U9IE1BWF9OUl9HRU5TKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcXG4rXFx0aW50IG9sZF9nZW47XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBTZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MsIGFuZCBhY3RpdmF0ZSBmaWxlLWJhY2tlZFxcbkBAIC0zMjc5LDIwICszMjgyLDI1IEBAIHN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hXFxuIFxcdCAqL1xcbiBcXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgICFpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIHZtYV9mbGFncykpIHtcXG4tXFx0XFx0c2V0X21hc2tfYml0cyhcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XFxuK1xcdFxcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XFxuIFxcdFxcdHJldHVybiAtMTtcXG4gXFx0fVxcbiBcXG4gXFx0ZG8ge1xcbitcXHRcXHRvbGRfZ2VuID0gbHJ1X2dldF9nZW5fZmxhZ3Mob2xkX2ZsYWdzKTtcXG4rXFx0XFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xcbitcXG4gXFx0XFx0LyogbHJ1X2dlbl9kZWxfZm9saW8oKSBoYXMgaXNvbGF0ZWQgdGhpcyBwYWdlPyAqL1xcbi1cXHRcXHRpZiAoIShvbGRfZmxhZ3MgXFx1MDAyNiBMUlVfR0VOX01BU0spKVxcbi1cXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdGlmIChvbGRfZ2VuIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuIFxcbi1cXHRcXHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgXFx1MDAyNiB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTtcXG4tXFx0XFx0bmV3X2ZsYWdzIHw9ICgoZ2VuICsgMVVMKSBcXHUwMDNjXFx1MDAzYyBMUlVfR0VOX1BHT0ZGKSB8IEJJVChQR193b3JraW5nc2V0KTtcXG4tXFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgXFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XFxuK1xcdFxcdGxydV9zZXRfZ2VuX2ZsYWdzKFxcdTAwMjZuZXdfZmxhZ3MsIG5ld19nZW4pO1xcbitcXHRcXHRscnVfc2V0X3JlZnNfZmxhZ3MoXFx1MDAyNm5ld19mbGFncywgMCk7XFxuK1xcdFxcdG5ld19mbGFncyB8PSBCSVQoUEdfd29ya2luZ3NldCk7XFxuK1xcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFxcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xcbiBcXG4tXFx0cmV0dXJuICgob2xkX2ZsYWdzIFxcdTAwMjYgTFJVX0dFTl9NQVNLKSBcXHUwMDNlXFx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XFxuK1xcdCp0eXBlID0gZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUoXFx1MDAyNm9sZF9mbGFncyk7XFxuK1xcdHJldHVybiBvbGRfZ2VuO1xcbiB9XFxuIFxcbiAvKiBwcm90ZWN0IHBhZ2VzIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycyAqL1xcbkBAIC0zMzAxLDIxICszMzA5LDIwIEBAIHN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xcbiBcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbiBcXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVxcdTAwM2VtaW5fc2VxW3R5cGVdKTtcXG4tXFx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cXHUwMDNlZmxhZ3MuZik7XFxuLVxcbi1cXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIShvbGRfZmxhZ3MgXFx1MDAyNiBMUlVfR0VOX01BU0spLCBmb2xpbyk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XFxuIFxcbiBcXHRkbyB7XFxuLVxcdFxcdG5ld19nZW4gPSAoKG9sZF9mbGFncyBcXHUwMDI2IExSVV9HRU5fTUFTSykgXFx1MDAzZVxcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xcbitcXHRcXHRuZXdfZ2VuID0gbHJ1X2dldF9nZW5fZmxhZ3Mob2xkX2ZsYWdzKTtcXG4rXFxuIFxcdFxcdC8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqL1xcbiBcXHRcXHRpZiAobmV3X2dlbiBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IG5ld19nZW4gIT0gb2xkX2dlbilcXG4gXFx0XFx0XFx0cmV0dXJuIG5ld19nZW47XFxuIFxcbitcXHRcXHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XFxuIFxcdFxcdG5ld19nZW4gPSAob2xkX2dlbiArIDEpICUgTUFYX05SX0dFTlM7XFxuLVxcbi1cXHRcXHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgXFx1MDAyNiB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTtcXG4tXFx0XFx0bmV3X2ZsYWdzIHw9IChuZXdfZ2VuICsgMVVMKSBcXHUwMDNjXFx1MDAzYyBMUlVfR0VOX1BHT0ZGO1xcbi1cXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBcXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcXG4rXFx0XFx0bHJ1X3NldF9nZW5fZmxhZ3MoXFx1MDAyNm5ld19mbGFncywgbmV3X2dlbik7XFxuK1xcdFxcdGxydV9zZXRfcmVmc19mbGFncyhcXHUwMDI2bmV3X2ZsYWdzLCAwKTtcXG4rXFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XFxuIFxcbiBcXHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xcbiBcXG5AQCAtMzMyMyw5ICszMzMwLDggQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgdXBkYXRlX2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tXFx0XFx0XFx0ICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuKVxcbitcXHRcXHRcXHQgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4sIGludCB0eXBlKVxcbiB7XFxuLVxcdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xcbiBcXHRpbnQgem9uZSA9IGZvbGlvX3pvbmVudW0oZm9saW8pO1xcbiBcXHRpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuIFxcbkBAIC0zNTEyLDIyICszNTE4LDI0IEBAIHN0YXRpYyBib29sIHN1aXRhYmxlX3RvX3NjYW4oaW50IHRvdGFsLCBpbnQgeW91bmcpXFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi1cXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgYm9vbCBkaXJ0eSlcXG4rXFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIGRpcnR5KVxcbiB7XFxuLVxcdGludCBvbGRfZ2VuO1xcbitcXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiwgdHlwZTtcXG4gXFxuIFxcdGlmICghZm9saW8pXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuK1xcdG5ld19nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKFJFQURfT05DRShscnV2ZWMtXFx1MDAzZWxydWdlbi5tYXhfc2VxKSk7XFxuK1xcbiBcXHRpZiAoZGlydHkgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAhKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgICAhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSlcXG4gXFx0XFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XFxuIFxcbiBcXHRpZiAod2Fsaykge1xcbi1cXHRcXHRvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgXFx1MDAyNnZtYS1cXHUwMDNlZmxhZ3MpO1xcbitcXHRcXHRvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgXFx1MDAyNnR5cGUsIFxcdTAwMjZ2bWEtXFx1MDAzZWZsYWdzKTtcXG4gXFx0XFx0aWYgKG9sZF9nZW4gXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXFxuLVxcdFxcdFxcdHVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcXG4rXFx0XFx0XFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4sIHR5cGUpO1xcbiBcXHR9IGVsc2UgaWYgKGxydV9nZW5fc2V0X3JlZnMoZm9saW8sIFxcdTAwMjZ2bWEtXFx1MDAzZWZsYWdzKSkge1xcbiBcXHRcXHRvbGRfZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7XFxuIFxcdFxcdGlmIChvbGRfZ2VuIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgb2xkX2dlbiAhPSBuZXdfZ2VuKVxcbkBAIC0zNTQ5LDggKzM1NTcsNiBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXFx1MDAzZXByaXZhdGU7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbiBcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstXFx1MDAzZWxydXZlYyk7XFxuLVxcdERFRklORV9NQVhfU0VRKHdhbGstXFx1MDAzZWxydXZlYyk7XFxuLVxcdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xcbiBcXHR1bnNpZ25lZCBpbnQgbnI7XFxuIFxcdHBtZF90IHBtZHZhbDtcXG4gXFxuQEAgLTM2MDEsNyArMzYwNyw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdGlmIChsYXN0ICE9IGZvbGlvKSB7XFxuLVxcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXFx1MDAzZXZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XFxuK1xcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXFx1MDAzZXZtYSwgd2Fsay1cXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XFxuIFxcbiBcXHRcXHRcXHRsYXN0ID0gZm9saW87XFxuIFxcdFxcdFxcdGRpcnR5ID0gZmFsc2U7XFxuQEAgLTM2MTQsNyArMzYyMCw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHR3YWxrLVxcdTAwM2VtbV9zdGF0c1tNTV9MRUFGX1lPVU5HXSArPSBucjtcXG4gXFx0fVxcbiBcXG4tXFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cXHUwMDNldm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcXG4rXFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cXHUwMDNldm1hLCB3YWxrLVxcdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcXG4gXFx0bGFzdCA9IE5VTEw7XFxuIFxcbiBcXHRpZiAoaSBcXHUwMDNjIFBUUlNfUEVSX1BURSBcXHUwMDI2XFx1MDAyNiBnZXRfbmV4dF92bWEoUE1EX01BU0ssIFBBR0VfU0laRSwgYXJncywgXFx1MDAyNnN0YXJ0LCBcXHUwMDI2ZW5kKSlcXG5AQCAtMzYzNyw4ICszNjQzLDYgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcXG4gXFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXFx1MDAzZXByaXZhdGU7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbiBcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstXFx1MDAzZWxydXZlYyk7XFxuLVxcdERFRklORV9NQVhfU0VRKHdhbGstXFx1MDAzZWxydXZlYyk7XFxuLVxcdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xcbiBcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFKHB1ZF9sZWFmKCpwdWQpKTtcXG4gXFxuQEAgLTM2OTIsNyArMzY5Niw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhXFxuIFxcdFxcdFxcdGdvdG8gbmV4dDtcXG4gXFxuIFxcdFxcdGlmIChsYXN0ICE9IGZvbGlvKSB7XFxuLVxcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XFxuK1xcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay1cXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XFxuIFxcbiBcXHRcXHRcXHRsYXN0ID0gZm9saW87XFxuIFxcdFxcdFxcdGRpcnR5ID0gZmFsc2U7XFxuQEAgLTM3MDYsNyArMzcxMCw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhXFxuIFxcdFxcdGkgPSBpIFxcdTAwM2UgTUlOX0xSVV9CQVRDSCA/IDAgOiBmaW5kX25leHRfYml0KGJpdG1hcCwgTUlOX0xSVV9CQVRDSCwgaSkgKyAxO1xcbiBcXHR9IHdoaWxlIChpIFxcdTAwM2M9IE1JTl9MUlVfQkFUQ0gpO1xcbiBcXG4tXFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcXG4rXFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCB3YWxrLVxcdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcXG4gXFxuIFxcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xcbiBcXHRzcGluX3VubG9jayhwdGwpO1xcbkBAIC00MjcwLDggKzQyNzQsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXFxuIFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBmb2xpb19wZ2RhdChmb2xpbyk7XFxuIFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcXG4gXFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlO1xcbi1cXHR1bnNpZ25lZCBsb25nIG1heF9zZXE7XFxuLVxcdGludCBnZW47XFxuIFxcbiBcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKHB2bXctXFx1MDAzZXB0bCk7XFxuIFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2xydShmb2xpbyksIGZvbGlvKTtcXG5AQCAtNDMwOCw4ICs0MzEwLDYgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxcbiBcXG4gXFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcXG4gXFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcXG4tXFx0bWF4X3NlcSA9IFJFQURfT05DRSgobHJ1dmVjKS1cXHUwMDNlbHJ1Z2VuLm1heF9zZXEpO1xcbi1cXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xcbiBcXHRtbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbiBcXG4gXFx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcXG5AQCAtNDM0MSw3ICs0MzQxLDcgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdGlmIChsYXN0ICE9IGZvbGlvKSB7XFxuLVxcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XFxuK1xcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XFxuIFxcbiBcXHRcXHRcXHRsYXN0ID0gZm9saW87XFxuIFxcdFxcdFxcdGRpcnR5ID0gZmFsc2U7XFxuQEAgLTQzNTMsMTMgKzQzNTMsMTQgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxcbiBcXHRcXHR5b3VuZyArPSBucjtcXG4gXFx0fVxcbiBcXG4tXFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcXG4rXFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTtcXG4gXFxuIFxcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xcbiBcXG4gXFx0LyogZmVlZGJhY2sgZnJvbSBybWFwIHdhbGtlcnMgdG8gcGFnZSB0YWJsZSB3YWxrZXJzICovXFxuIFxcdGlmIChtbV9zdGF0ZSBcXHUwMDI2XFx1MDAyNiBzdWl0YWJsZV90b19zY2FuKGksIHlvdW5nKSlcXG4tXFx0XFx0dXBkYXRlX2Jsb29tX2ZpbHRlcihtbV9zdGF0ZSwgbWF4X3NlcSwgcHZtdy1cXHUwMDNlcG1kKTtcXG4rXFx0XFx0dXBkYXRlX2Jsb29tX2ZpbHRlcihtbV9zdGF0ZSwgUkVBRF9PTkNFKGxydXZlYy1cXHUwMDNlbHJ1Z2VuLm1heF9zZXEpLFxcbitcXHRcXHRcXHRcXHQgICAgcHZtdy1cXHUwMDNlcG1kKTtcXG4gXFxuIFxcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcXG4gXFxuQEAgLTQ3MTYsNyArNDcxNyw3IEBAIHN0YXRpYyBib29sIGlzb2xhdGVfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2NhXFxuIFxcbiBcXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi9cXG4gXFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKVxcbi1cXHRcXHRzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgMCk7XFxuK1xcdFxcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XFxuIFxcbiBcXHRzdWNjZXNzID0gbHJ1X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7XFxuIFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghc3VjY2VzcywgZm9saW8pO1xcbkBAIC00ODA5LDkgKzQ4MTAsOSBAQCBzdGF0aWMgaW50IGdldF90aWVyX2lkeChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKVxcbiBcXHQgKiBUaGlzIHZhbHVlIGlzIGNob3NlbiBiZWNhdXNlIGFueSBvdGhlciB0aWVyIHdvdWxkIGhhdmUgYXQgbGVhc3QgdHdpY2VcXG4gXFx0ICogYXMgbWFueSByZWZhdWx0cyBhcyB0aGUgZmlyc3QgdGllci5cXG4gXFx0ICovXFxuLVxcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCAwLCAyLCBcXHUwMDI2c3ApO1xcbi1cXHRmb3IgKHRpZXIgPSAxOyB0aWVyIFxcdTAwM2MgTUFYX05SX1RJRVJTOyB0aWVyKyspIHtcXG4tXFx0XFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIDMsIFxcdTAwMjZwdik7XFxuK1xcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01JTiwgMiwgXFx1MDAyNnNwKTtcXG4rXFx0Zm9yICh0aWVyID0gTFJVX1RJRVJfTUlOICsgMTsgdGllciBcXHUwMDNjPSBMUlVfVElFUl9NQVg7IHRpZXIrKykge1xcbitcXHRcXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdGllciwgdGllciwgMywgXFx1MDAyNnB2KTtcXG4gXFx0XFx0aWYgKCFwb3NpdGl2ZV9jdHJsX2VycihcXHUwMDI2c3AsIFxcdTAwMjZwdikpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuQEAgLTQ4MzIsOCArNDgzMywxMCBAQCBzdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcXG4gXFx0ICogQ29tcGFyZSB0aGUgc3VtIG9mIGFsbCB0aWVycyBvZiBhbm9uIHdpdGggdGhhdCBvZiBmaWxlIHRvIGRldGVybWluZVxcbiBcXHQgKiB3aGljaCB0eXBlIHRvIHNjYW4uXFxuIFxcdCAqL1xcbi1cXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBNQVhfTlJfVElFUlMsIHN3YXBwaW5lc3MsIFxcdTAwMjZzcCk7XFxuLVxcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIE1BWF9OUl9USUVSUywgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCBcXHUwMDI2cHYpO1xcbitcXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCxcXG4rXFx0XFx0ICAgICAgc3dhcHBpbmVzcywgXFx1MDAyNnNwKTtcXG4rXFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NQVgsXFxuK1xcdFxcdCAgICAgIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgXFx1MDAyNnB2KTtcXG4gXFxuIFxcdHJldHVybiBwb3NpdGl2ZV9jdHJsX2VycihcXHUwMDI2c3AsIFxcdTAwMjZwdik7XFxuIH1cXG5AQCAtNDkzMiw4ICs0OTM1LDEwIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHQvKiBkb24ndCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqL1xcbi1cXHRcXHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pXFxuLVxcdFxcdFxcdHNldF9tYXNrX2JpdHMoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX2FjdGl2ZSkpO1xcbitcXHRcXHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pIHtcXG4rXFx0XFx0XFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcXG4rXFx0XFx0XFx0Zm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0bW92ZV9mb2xpb3NfdG9fbHJ1KFxcdTAwMjZsaXN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDA6NDkuOTU5MTk5NzgxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMTA4Mjk3NTc0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNSUdSQVRJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJscnVfZ2VuX2xvb2tfYXJvdW5kXCIsXG4gICAgXCJmb2xpb19taWdyYXRlX2ZsYWdzXCIsXG4gICAgXCJtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZVwiLFxuICAgIFwibHJ1X2dlbl9yZXBhcmVudF9tZW1jZ1wiLFxuICAgIFwibHJ1X2dlbl9zb2Z0X3JlY2xhaW1cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIE11bHRpLUdlbiBMUlUgKE1HTFJVKSwgcGFnZSByZWZlcmVuY2UgY291bnRpbmcsIGZvbGlvIGZsYWdzIG1hbmFnZW1lbnQsIGZvbGlvIG1pZ3JhdGlvbiwgYW5kIG1lbWNnIExSVSBzaXplIGFjY291bnRpbmcuIFRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhZmZlY3QgcGFnZSByZWNsYW1hdGlvbiwgYWdpbmcsIGFuZCBtaWdyYXRpb24gYmVoYXZpb3IgaW4gcmVhY2hhYmxlIGNvcmUgbW0gY29kZSBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGQ3MGQxY2I3NTcxMzQyMjg2ZjQ2YzNiNWE4OGQ0OWVmNjQ5YWRiN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMDQ6NDA6NDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5pbmRleCA3ZDFjMGNlMTg5YTg4Li44Njc4MGVmNjVlYWZhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5AQCAtMTEzLDcgKzExMyw3IEBAIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlIHtcbiBcdC8qIEZpZWxkcyB3aGljaCBnZXQgdXBkYXRlZCBvZnRlbiBhdCB0aGUgZW5kLiAqL1xuIFx0c3RydWN0IGxydXZlY1x0XHRscnV2ZWM7XG4gXHRDQUNIRUxJTkVfUEFERElORyhfcGFkMl8pO1xuLVx0dW5zaWduZWQgbG9uZ1x0XHRscnVfem9uZV9zaXplW01BWF9OUl9aT05FU11bTlJfTFJVX0xJU1RTXTtcbitcdGxvbmdcdFx0XHRscnVfem9uZV9zaXplW01BWF9OUl9aT05FU11bTlJfTFJVX0xJU1RTXTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwX3JlY2xhaW1faXRlclx0aXRlcjtcbiBcbiBcdC8qXG5AQCAtOTAyLDEwICs5MDIsMTUgQEAgc3RhdGljIGlubGluZVxuIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdGVudW0gbHJ1X2xpc3QgbHJ1LCBpbnQgem9uZV9pZHgpXG4ge1xuK1x0bG9uZyB2YWw7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XG4gXG4gXHRteiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xuLVx0cmV0dXJuIFJFQURfT05DRShtei1cdTAwM2VscnVfem9uZV9zaXplW3pvbmVfaWR4XVtscnVdKTtcbitcdHZhbCA9IFJFQURfT05DRShtei1cdTAwM2VscnVfem9uZV9zaXplW3pvbmVfaWR4XVtscnVdKTtcbitcdGlmIChXQVJOX09OX09OQ0UodmFsIFx1MDAzYyAwKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXR1cm4gdmFsO1xuIH1cbiBcbiB2b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuaW5kZXggNjIxYzg2NTNkOGY3ZS4uYWI2OWI5OTMwODkzZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcbkBAIC0zMCw2ICszMCwxNyBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19pc19maWxlX2xydShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cmV0dXJuICFmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pO1xuIH1cbiBcbisvKipcbisgKiBmb2xpb19mbGFnc19pc19maWxlX2xydSAtIFNob3VsZCB0aGUgZm9saW8gYmUgb24gYSBmaWxlIExSVSBvciBhbm9uIExSVT9cbisgKiBAZmxhZ3M6IFRoZSBmb2xpbydzIGZsYWdzLlxuKyAqXG4rICogSnVzdCBsaWtlIGZvbGlvX2lzX2ZpbGVfbHJ1IGJ1dCB0YWtlIHRoZSBmb2xpbyBmbGFncyBkaXJlY3RseSBpbnN0ZWFkLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZsYWdzKVxuK3tcbitcdHJldHVybiAhdGVzdF9iaXQoUEdfc3dhcGJhY2tlZCwgZmxhZ3MpO1xuK31cbitcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX191cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRcdFx0ZW51bSBscnVfbGlzdCBscnUsIGVudW0gem9uZV90eXBlIHppZCxcbiBcdFx0XHRcdGxvbmcgbnJfcGFnZXMpXG5AQCAtMTQyLDEwICsxNTMsNjYgQEAgc3RhdGljIGlubGluZSBpbnQgbHJ1X3RpZXJfZnJvbV9yZWZzKGludCByZWZzLCBib29sIHdvcmtpbmdzZXQpXG4gXHRyZXR1cm4gd29ya2luZ3NldCA/IE1BWF9OUl9USUVSUyAtIDEgOiBvcmRlcl9iYXNlXzIocmVmcyk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rLyoqXG4rICogbHJ1X3NldF9nZW5fZmxhZ3MgLSBTZXQgdGhlIExSVSBnZW5lcmF0aW9uIG51bWJlciB0byBzcGVjaWZpZWQgZm9saW8gZmxhZ3MuXG4rICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFnc1xuKyAqIEBnZW46IGdlbmVyYXRpb24gbnVtYmVyLCBiZXR3ZWVuIDAgYW5kIChNQVhfTlJfR0VOUyAtIDEpLCBpbmNsdXNpdmUuXG4rICovXG4rc3RhdGljIGlubGluZSB2b2lkIGxydV9zZXRfZ2VuX2ZsYWdzKHVuc2lnbmVkIGxvbmcgKmZsYWdzLCBpbnQgZ2VuKVxuK3tcbitcdEJVSUxEX0JVR19PTihMUlVfR0VOX01BU0sgXHUwMDI2IExSVV9SRUZTX01BU0spO1xuK1x0Vk1fV0FSTl9PTl9PTkNFKGdlbiBcdTAwM2U9IE1BWF9OUl9HRU5TIHx8IGdlbiBcdTAwM2MgMCk7XG4rXHQvKiBTdG9yZSBnZW4gb2Zmc2V0IGJ5IDEsIHplcm8gbWVhbnMgdGhlIGZvbGlvIGlzIG9mZi1saXN0LiAqL1xuK1x0KmZsYWdzIFx1MDAyNj0gfkxSVV9HRU5fTUFTSztcbitcdCpmbGFncyB8PSAoZ2VuICsgMVVMKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRjtcbit9XG4rXG4rLyoqXG4rICogbHJ1X2dldF9nZW5fZmxhZ3MgLSBSZXR1cm4gdGhlIExSVSBnZW5lcmF0aW9uIG51bWJlciBmcm9tIGZvbGlvIGZsYWdzLlxuKyAqIEBmbGFnczogZm9saW8gZmxhZ3NcbisgKlxuKyAqIFJldHVybnM6IEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgKE1BWF9OUl9HRU5TIC0gMSksIGluY2x1c2l2ZS4gUmV0dXJuc1xuKyAqIC0xIGlmIHRoZSBmbGFncyBpbmRpY2F0ZSB0aGUgZm9saW8gaXMgb2ZmIHRoZSBsaXN0IChlLmcuLCBpc29sYXRlZCkuXG4rICovXG4rc3RhdGljIGlubGluZSBpbnQgbHJ1X2dldF9nZW5fZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncylcbit7XG4rXHRpbnQgZ2VuID0gKChmbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuK1xuK1x0LyogRXhjbHVkZSB0aGUgbGVnYWwgLTEgZnJvbSB0aGUgdW5zaWduZWQgTUFYX05SX0dFTlMgY29tcGFyaXNvbiAqL1xuK1x0Vk1fV0FSTl9PTl9PTkNFKGdlbiAhPSAtMSBcdTAwMjZcdTAwMjYgZ2VuIFx1MDAzZT0gTUFYX05SX0dFTlMpO1xuK1x0cmV0dXJuIGdlbjtcbit9XG4rXG4rLyoqXG4rICogbHJ1X3NldF9yZWZzX2ZsYWdzIC0gU2V0IHRoZSBMUlUgcmVmZXJlbmNlZCBjb3VudCB0byBmb2xpbyBmbGFncy5cbisgKiBAZmxhZ3M6IHBvaW50ZXIgdG8gdGhlIGZvbGlvIGZsYWdzXG4rICogQHJlZnM6IHJlZmVyZW5jZWQgLyBhY2Nlc3MgY291bnQgbnVtYmVyLCBiZXR3ZWVuIDAgYW5kIExSVV9SRUZTX01BWCwgaW5jbHVzaXZlLlxuKyAqXG4rICogRm9yIE1HTFJVLCBQR19yZWZlcmVuY2VkIGhvbGRzIHRoZSBmaXJzdCByZWYsIGFuZCB0aGUgZXh0cmEgYml0cyBob2xkIHRoZVxuKyAqIHJlbWFpbmluZyByZWZzLiBGb3IgY2xhc3NpY2FsIExSVSB0aGUgZXh0cmEgYml0cyBhcmUgbm90IHVzZWQsIHNvIGl0IGNhblxuKyAqIGFsc28gYmUgc2VlbiBhcyB0aGUgcmVmcyBjb3VudCBuZXZlciBleGNlZWRzIDEuIEluIGJvdGggY2FzZXMsIHJlZnMgPT0gMVxuKyAqIG1lYW5zIFBHX3JlZmVyZW5jZWQgaXMgc2V0IGFuZCB0aGUgZXh0cmEgYml0cyBhcmUgemVybywgYW5kIHJlZnMgPT0gMCBtZWFuc1xuKyAqIFBHX3JlZmVyZW5jZWQgYW5kIHRoZSBleHRyYSBiaXRzIGFyZSBhbGwgdW5zZXQuXG4rICovXG4rc3RhdGljIGlubGluZSB2b2lkIGxydV9zZXRfcmVmc19mbGFncyh1bnNpZ25lZCBsb25nICpmbGFncywgdW5zaWduZWQgaW50IHJlZnMpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbitcdFZNX1dBUk5fT05fT05DRShyZWZzIFx1MDAzZSBMUlVfUkVGU19NQVgpO1xuK1x0QlVJTERfQlVHX09OKExSVV9SRUZTX01BWCAhPSAoTFJVX1JFRlNfTUFTSyBcdTAwM2VcdTAwM2UgTFJVX1JFRlNfUEdPRkYpICsgMSk7XG4gXG4rXHQqZmxhZ3MgXHUwMDI2PSB+TFJVX1JFRlNfRkxBR1M7XG4rXHRpZiAoIXJlZnMpXG4rXHRcdHJldHVybjtcbitcdCpmbGFncyB8PSAoQklUKFBHX3JlZmVyZW5jZWQpIHwgKChyZWZzIC0gMVVMKSBcdTAwM2NcdTAwM2MgTFJVX1JFRlNfUEdPRkYpKTtcbit9XG4rXG4rLyoqXG4rICogbHJ1X2dldF9yZWZzX2ZsYWdzIC0gUmV0dXJuIExSVSByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IGZyb20gZm9saW8gZmxhZ3MuXG4rICogQGZsYWdzOiBmb2xpbyBmbGFnc1xuKyAqXG4rICogUmVhZHMgdGhlIExSVSByZWZlcmVuY2VkIGNvdW50IHNldCBieSBscnVfc2V0X3JlZnNfZmxhZ3MoKS5cbisgKi9cbitzdGF0aWMgaW5saW5lIGludCBscnVfZ2V0X3JlZnNfZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncylcbit7XG4gXHRpZiAoIShmbGFncyBcdTAwMjYgQklUKFBHX3JlZmVyZW5jZWQpKSlcbiBcdFx0cmV0dXJuIDA7XG4gXHQvKlxuQEAgLTE1NSwxMSArMjIyLDI0IEBAIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gKChmbGFncyBcdTAwMjYgTFJVX1JFRlNfTUFTSykgXHUwMDNlXHUwMDNlIExSVV9SRUZTX1BHT0ZGKSArIDE7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4rXHRyZXR1cm4gbHJ1X2dldF9yZWZzX2ZsYWdzKFJFQURfT05DRSgqY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKSk7XG4rfVxuIFxuLVx0cmV0dXJuICgoZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbitzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCByZWZzKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4rXG4rXHRkbyB7XG4rXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncztcbitcdFx0bHJ1X3NldF9yZWZzX2ZsYWdzKFx1MDAyNm5ld19mbGFncywgcmVmcyk7XG4rXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfZ2VuKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0cmV0dXJuIGxydV9nZXRfZ2VuX2ZsYWdzKFJFQURfT05DRSgqY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKSk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2lzX2FjdGl2ZShjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBnZW4pXG5AQCAtMjcwLDcgKzM1MCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2FkZF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7XG4gXHRmbGFncyA9IChnZW4gKyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIE1JTl9OUl9HRU5TIGFib3V0IFBHX2FjdGl2ZSAqL1xuLVx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpO1xuK1x0c2V0X21hc2tfYml0cyhmb2xpb19mbGFncyhmb2xpbywgMCksIExSVV9HRU5fTUFTSyB8IEJJVChQR19hY3RpdmUpLCBmbGFncyk7XG4gXG4gXHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIC0xLCBnZW4pO1xuIFx0LyogZm9yIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZSgpICovXG5AQCAtMjk1LDcgKzM3NSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXG4gXHQvKiBmb3IgZm9saW9fbWlncmF0ZV9mbGFncygpICovXG4gXHRmbGFncyA9ICFyZWNsYWltaW5nIFx1MDAyNlx1MDAyNiBscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIGdlbikgPyBCSVQoUEdfYWN0aXZlKSA6IDA7XG4tXHRmbGFncyA9IHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX0dFTl9NQVNLLCBmbGFncyk7XG4rXHRmbGFncyA9IHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0ssIGZsYWdzKTtcbiBcdGdlbiA9ICgoZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbiBcbiBcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgZ2VuLCAtMSk7XG5AQCAtMzA0LDExICszODQsMTkgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcbisvKipcbisgKiBmb2xpb19taWdyYXRlX2xydV9yZWZzIC0gY29weSB0aGUgcmVmZXJlbmNlIHN0YXRlIHRvIGEgbmV3IGZvbGlvXG4rICogQG5ldzogdGhlIGRlc3RpbmF0aW9uIGZvbGlvXG4rICogQG9sZDogdGhlIHNvdXJjZSBmb2xpb1xuKyAqXG4rICogVHJhbnNmZXIgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBAbmV3IGR1cmluZyBtaWdyYXRpb246IHRoZSBNR0xSVVxuKyAqIHJlZnMgY291bnQsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkLCBvciBqdXN0IFBHX3JlZmVyZW5jZWQgZm9yIHRoZVxuKyAqIGFjdGl2ZS9pbmFjdGl2ZSBMUlUuXG4rICovXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgcmVmcyA9IFJFQURfT05DRShvbGQtXHUwMDNlZmxhZ3MuZikgXHUwMDI2IExSVV9SRUZTX01BU0s7XG4tXG4tXHRzZXRfbWFza19iaXRzKFx1MDAyNm5ldy1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCByZWZzKTtcbitcdEJVSUxEX0JVR19PTihMUlVfUkVGU19NQVNLIFx1MDAyNiBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuK1x0Zm9saW9fc2V0X2xydV9yZWZzKG5ldywgZm9saW9fbHJ1X3JlZnMob2xkKSk7XG4gfVxuICNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xuIFxuQEAgLTMzNyw5ICs0MjUsMTAgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxuIHtcbi1cbitcdGlmIChmb2xpb190ZXN0X3JlZmVyZW5jZWQob2xkKSlcbitcdFx0Zm9saW9fc2V0X3JlZmVyZW5jZWQobmV3KTtcbiB9XG4gI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbmluZGV4IDk0ZjljM2ZmNTQxNjAuLjliMjdjZjUzYmRiYzcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5AQCAtNDkyLDExICs0OTIsMTQgQEAgZW51bSBscnV2ZWNfZmxhZ3Mge1xuICAqIGZvbGlvLVx1MDAzZWZsYWdzLCBtYXNrZWQgYnkgTFJVX1JFRlNfTUFTSy5cbiAgKi9cbiAjZGVmaW5lIE1BWF9OUl9USUVSU1x0XHQ0VVxuKyNkZWZpbmUgTFJVX1RJRVJfTUlOXHRcdDBVXG4rI2RlZmluZSBMUlVfVElFUl9NQVhcdFx0KE1BWF9OUl9USUVSUyAtIDEpXG4gXG4gI2lmbmRlZiBfX0dFTkVSQVRJTkdfQk9VTkRTX0hcbiBcbiAjZGVmaW5lIExSVV9HRU5fTUFTS1x0XHQoKEJJVChMUlVfR0VOX1dJRFRIKSAtIDEpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGKVxuICNkZWZpbmUgTFJVX1JFRlNfTUFTS1x0XHQoKEJJVChMUlVfUkVGU19XSURUSCkgLSAxKSBcdTAwM2NcdTAwM2MgTFJVX1JFRlNfUEdPRkYpXG4rI2RlZmluZSBMUlVfUkVGU19NQVhcdFx0QklUKExSVV9SRUZTX1dJRFRIKVxuIFxuIC8qXG4gICogRm9yIGZvbGlvcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMsXG5kaWZmIC0tZ2l0IGEvbW0vZm9saW8uYyBiL21tL2ZvbGlvLmNcbmluZGV4IGMwMmRjZWE5YzAzYzIuLmZiODc0ZmU0OTJiMmIgMTAwNjQ0XG4tLS0gYS9tbS9mb2xpby5jXG4rKysgYi9tbS9mb2xpby5jXG5AQCAtMzUzLDI2ICszNTMsMjggQEAgc3RhdGljIHZvaWQgX19scnVfY2FjaGVfYWN0aXZhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiBcbiBzdGF0aWMgdm9pZCBscnVfZ2VuX2luY19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbitcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4rXHRpbnQgcmVmcztcbiBcbiBcdGlmIChmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXG4tXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpIHtcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuK1x0aWYgKCFmb2xpb19scnVfcmVmcyhmb2xpbykpIHtcbitcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0ZG8ge1xuLVx0XHRpZiAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX1JFRlNfTUFTSykgPT0gTFJVX1JFRlNfTUFTSykge1xuK1x0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XG4rXHRcdHJlZnMgPSBscnVfZ2V0X3JlZnNfZmxhZ3Mob2xkX2ZsYWdzKTtcbitcdFx0aWYgKHJlZnMgPT0gTFJVX1JFRlNfTUFYKSB7XG4gXHRcdFx0aWYgKCFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKVxuIFx0XHRcdFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuLVxuLVx0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgKyBCSVQoTFJVX1JFRlNfUEdPRkYpO1xuLVx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4rXHRcdGxydV9zZXRfcmVmc19mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIHJlZnMgKyAxKTtcbitcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4gfVxuIFxuIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuQEAgLTM4NCw3ICszODYsOCBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGlmIChnZW4gXHUwMDNjIDApXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuLVx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUyB8IEJJVChQR193b3JraW5nc2V0KSwgMCk7XG4rXHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuK1x0Zm9saW9fY2xlYXJfd29ya2luZ3NldChmb2xpbyk7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRzZXEgPSBSRUFEX09OQ0UoZm9saW9fbHJ1dmVjKGZvbGlvKS1cdTAwM2VscnVnZW4ubWluX3NlcVt0eXBlXSk7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCA4NTZhN2QwNzU4NmNjLi4wYTY1YWI4ZGYyN2E5IDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC0xNTI5LDI4ICsxNTI5LDEyIEBAIHZvaWQgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIGxydV9saXN0IGxydSxcbiBcdFx0XHRcdGludCB6aWQsIGxvbmcgbnJfcGFnZXMpXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16O1xuLVx0dW5zaWduZWQgbG9uZyAqbHJ1X3NpemU7XG4tXHRsb25nIHNpemU7XG4gXG4gXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRteiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xuLVx0bHJ1X3NpemUgPSBcdTAwMjZtei1cdTAwM2VscnVfem9uZV9zaXplW3ppZF1bbHJ1XTtcbi1cbi1cdGlmIChucl9wYWdlcyBcdTAwM2MgMClcbi1cdFx0KmxydV9zaXplICs9IG5yX3BhZ2VzO1xuLVxuLVx0c2l6ZSA9ICpscnVfc2l6ZTtcbi1cdGlmIChXQVJOX09OQ0Uoc2l6ZSBcdTAwM2MgMCxcbi1cdFx0XCIlcyglcCwgJWQsICVsZCk6IGxydV9zaXplICVsZFxcblwiLFxuLVx0XHRfX2Z1bmNfXywgbHJ1dmVjLCBscnUsIG5yX3BhZ2VzLCBzaXplKSkge1xuLVx0XHRWTV9CVUdfT04oMSk7XG4tXHRcdCpscnVfc2l6ZSA9IDA7XG4tXHR9XG4tXG4tXHRpZiAobnJfcGFnZXMgXHUwMDNlIDApXG4tXHRcdCpscnVfc2l6ZSArPSBucl9wYWdlcztcbitcdG16LVx1MDAzZWxydV96b25lX3NpemVbemlkXVtscnVdICs9IG5yX3BhZ2VzO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmNcbmluZGV4IDE1YjQ1ODMyYmNmYTcuLmEzNjlkMGM5NWMzODYgMTAwNjQ0XG4tLS0gYS9tbS9taWdyYXRlLmNcbisrKyBiL21tL21pZ3JhdGUuY1xuQEAgLTc3Niw4ICs3NzYsOSBAQCB2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRpbnQgY3B1cGlkO1xuIFxuLVx0aWYgKGZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpXG4tXHRcdGZvbGlvX3NldF9yZWZlcmVuY2VkKG5ld2ZvbGlvKTtcbitcdC8qIENvcHkgdGhlIHJlZmVyZW5jZSBzdGF0ZSwgaW5jbHVkaW5nIFBHX3JlZmVyZW5jZWQgKi9cbitcdGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMobmV3Zm9saW8sIGZvbGlvKTtcbitcbiBcdGlmIChmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSlcbiBcdFx0Zm9saW9fbWFya191cHRvZGF0ZShuZXdmb2xpbyk7XG4gXHRpZiAoZm9saW9fdGVzdF9jbGVhcl9hY3RpdmUoZm9saW8pKSB7XG5AQCAtODA3LDcgKzgwOCw2IEBAIHZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0aWYgKGZvbGlvX3Rlc3RfaWRsZShmb2xpbykpXG4gXHRcdGZvbGlvX3NldF9pZGxlKG5ld2ZvbGlvKTtcbiBcbi1cdGZvbGlvX21pZ3JhdGVfcmVmcyhuZXdmb2xpbywgZm9saW8pO1xuIFx0LypcbiBcdCAqIENvcHkgTlVNQSBpbmZvcm1hdGlvbiB0byB0aGUgbmV3IHBhZ2UsIHRvIHByZXZlbnQgb3Zlci1lYWdlclxuIFx0ICogZnV0dXJlIG1pZ3JhdGlvbnMgb2YgdGhpcyBzYW1lIHBhZ2UuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggZmRkMTMyOTlhMDRhOS4uZTdkMzc5YzZlNzAzYSAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTg0MywxOSArODQzLDIyIEBAIHN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiBcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpIHtcbiBcdFx0LyogQWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuICovXG4gXHRcdGlmIChpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIHZtYV9mbGFncykpIHtcbi1cdFx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfd29ya2luZ3NldCkpO1xuK1x0XHRcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcbitcdFx0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0XHR9XG4gXG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcbitcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuIFx0LyogUHJvbW90ZSBvbiBzZWNvbmQgYWNjZXNzICovXG4tXHRpZiAoZm9saW9fbHJ1X3JlZnMoZm9saW8pIFx1MDAzZSAxKVxuLVx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfd29ya2luZ3NldCkpO1xuLVx0ZWxzZVxuK1x0aWYgKGZvbGlvX2xydV9yZWZzKGZvbGlvKSBcdTAwM2UgMSkge1xuK1x0XHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XG4rXHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4rXHR9IGVsc2Uge1xuIFx0XHRmb2xpb19tYXJrX2FjY2Vzc2VkKGZvbGlvKTtcbitcdH1cbiBcdHJldHVybiB0cnVlO1xuIH1cbiAjZWxzZVxuQEAgLTMxOTUsOCArMzE5OCw4IEBAIHN0cnVjdCBjdHJsX3BvcyB7XG4gXHRpbnQgZ2FpbjtcbiB9O1xuIFxuLXN0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXIsIGludCBnYWluLFxuLVx0XHRcdCAgc3RydWN0IGN0cmxfcG9zICpwb3MpXG4rc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllcl9taW4sXG4rXHRcdFx0ICBpbnQgdGllcl9tYXgsIGludCBnYWluLCBzdHJ1Y3QgY3RybF9wb3MgKnBvcylcbiB7XG4gXHRpbnQgaTtcbiBcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuQEAgLTMyMDUsNyArMzIwOCw3IEBAIHN0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXIsIGludCBnYWluLFxuIFx0cG9zLVx1MDAzZWdhaW4gPSBnYWluO1xuIFx0cG9zLVx1MDAzZXJlZmF1bHRlZCA9IHBvcy1cdTAwM2V0b3RhbCA9IDA7XG4gXG4tXHRmb3IgKGkgPSB0aWVyICUgTUFYX05SX1RJRVJTOyBpIFx1MDAzYz0gbWluKHRpZXIsIE1BWF9OUl9USUVSUyAtIDEpOyBpKyspIHtcbitcdGZvciAoaSA9IHRpZXJfbWluOyBpIFx1MDAzYz0gdGllcl9tYXg7IGkrKykge1xuIFx0XHRwb3MtXHUwMDNlcmVmYXVsdGVkICs9IGxydWdlbi1cdTAwM2VhdmdfcmVmYXVsdGVkW3R5cGVdW2ldICtcbiBcdFx0XHRcdCAgYXRvbWljX2xvbmdfcmVhZChcdTAwMjZscnVnZW4tXHUwMDNlcmVmYXVsdGVkW2hpc3RdW3R5cGVdW2ldKTtcbiBcdFx0cG9zLVx1MDAzZXRvdGFsICs9IGxydWdlbi1cdTAwM2VhdmdfdG90YWxbdHlwZV1baV0gK1xuQEAgLTMyNjYsMTEgKzMyNjksMTEgQEAgc3RhdGljIGJvb2wgcG9zaXRpdmVfY3RybF9lcnIoc3RydWN0IGN0cmxfcG9zICpzcCwgc3RydWN0IGN0cmxfcG9zICpwdilcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuIFxuIC8qIHByb21vdGUgcGFnZXMgYWNjZXNzZWQgdGhyb3VnaCBwYWdlIHRhYmxlcyAqL1xuLXN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuK3N0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgaW50ICp0eXBlLFxuK1x0XHRcdCAgICBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4tXG4tXHRWTV9XQVJOX09OX09OQ0UoZ2VuIFx1MDAzZT0gTUFYX05SX0dFTlMpO1xuK1x0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbitcdGludCBvbGRfZ2VuO1xuIFxuIFx0LypcbiBcdCAqIFNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUywgYW5kIGFjdGl2YXRlIGZpbGUtYmFja2VkXG5AQCAtMzI3OSwyMCArMzI4MiwyNSBAQCBzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYVxuIFx0ICovXG4gXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pIFx1MDAyNlx1MDAyNlxuIFx0ICAgICFpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIHZtYV9mbGFncykpIHtcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuK1x0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpO1xuIFx0XHRyZXR1cm4gLTE7XG4gXHR9XG4gXG4gXHRkbyB7XG4rXHRcdG9sZF9nZW4gPSBscnVfZ2V0X2dlbl9mbGFncyhvbGRfZmxhZ3MpO1xuK1x0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XG4rXG4gXHRcdC8qIGxydV9nZW5fZGVsX2ZvbGlvKCkgaGFzIGlzb2xhdGVkIHRoaXMgcGFnZT8gKi9cbi1cdFx0aWYgKCEob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spKVxuLVx0XHRcdHJldHVybiAtMTtcbitcdFx0aWYgKG9sZF9nZW4gXHUwMDNjIDApXG4rXHRcdFx0YnJlYWs7XG4gXG4tXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncyBcdTAwMjYgfihMUlVfR0VOX01BU0sgfCBMUlVfUkVGU19GTEFHUyk7XG4tXHRcdG5ld19mbGFncyB8PSAoKGdlbiArIDFVTCkgXHUwMDNjXHUwMDNjIExSVV9HRU5fUEdPRkYpIHwgQklUKFBHX3dvcmtpbmdzZXQpO1xuLVx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4rXHRcdGxydV9zZXRfZ2VuX2ZsYWdzKFx1MDAyNm5ld19mbGFncywgbmV3X2dlbik7XG4rXHRcdGxydV9zZXRfcmVmc19mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIDApO1xuK1x0XHRuZXdfZmxhZ3MgfD0gQklUKFBHX3dvcmtpbmdzZXQpO1xuK1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiBcbi1cdHJldHVybiAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuK1x0KnR5cGUgPSBmb2xpb19mbGFnc19pc19maWxlX2xydShcdTAwMjZvbGRfZmxhZ3MpO1xuK1x0cmV0dXJuIG9sZF9nZW47XG4gfVxuIFxuIC8qIHByb3RlY3QgcGFnZXMgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzICovXG5AQCAtMzMwMSwyMSArMzMwOSwyMCBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbiBcdGludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG4tXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuLVxuLVx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCEob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spLCBmb2xpbyk7XG4rXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuIFxuIFx0ZG8ge1xuLVx0XHRuZXdfZ2VuID0gKChvbGRfZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbitcdFx0bmV3X2dlbiA9IGxydV9nZXRfZ2VuX2ZsYWdzKG9sZF9mbGFncyk7XG4rXG4gXHRcdC8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqL1xuIFx0XHRpZiAobmV3X2dlbiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG5ld19nZW4gIT0gb2xkX2dlbilcbiBcdFx0XHRyZXR1cm4gbmV3X2dlbjtcbiBcbitcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuIFx0XHRuZXdfZ2VuID0gKG9sZF9nZW4gKyAxKSAlIE1BWF9OUl9HRU5TO1xuLVxuLVx0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgXHUwMDI2IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpO1xuLVx0XHRuZXdfZmxhZ3MgfD0gKG5ld19nZW4gKyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuLVx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4rXHRcdGxydV9zZXRfZ2VuX2ZsYWdzKFx1MDAyNm5ld19mbGFncywgbmV3X2dlbik7XG4rXHRcdGxydV9zZXRfcmVmc19mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIDApO1xuK1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiBcbiBcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XG4gXG5AQCAtMzMyMyw5ICszMzMwLDggQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbiB9XG4gXG4gc3RhdGljIHZvaWQgdXBkYXRlX2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IGZvbGlvICpmb2xpbyxcbi1cdFx0XHQgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4pXG4rXHRcdFx0ICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuLCBpbnQgdHlwZSlcbiB7XG4tXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbiBcdGludCB6b25lID0gZm9saW9fem9uZW51bShmb2xpbyk7XG4gXHRpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXG5AQCAtMzUxMiwyMiArMzUxOCwyNCBAQCBzdGF0aWMgYm9vbCBzdWl0YWJsZV90b19zY2FuKGludCB0b3RhbCwgaW50IHlvdW5nKVxuIH1cbiBcbiBzdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi1cdFx0c3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGJvb2wgZGlydHkpXG4rXHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBkaXJ0eSlcbiB7XG4tXHRpbnQgb2xkX2dlbjtcbitcdGludCBuZXdfZ2VuLCBvbGRfZ2VuLCB0eXBlO1xuIFxuIFx0aWYgKCFmb2xpbylcbiBcdFx0cmV0dXJuO1xuIFxuK1x0bmV3X2dlbiA9IGxydV9nZW5fZnJvbV9zZXEoUkVBRF9PTkNFKGxydXZlYy1cdTAwM2VscnVnZW4ubWF4X3NlcSkpO1xuK1xuIFx0aWYgKGRpcnR5IFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHQgICAgIShmb2xpb190ZXN0X2Fub24oZm9saW8pIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pIFx1MDAyNlx1MDAyNlxuIFx0ICAgICAgIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkpXG4gXHRcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuIFxuIFx0aWYgKHdhbGspIHtcbi1cdFx0b2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sIFx1MDAyNnZtYS1cdTAwM2VmbGFncyk7XG4rXHRcdG9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuLCBcdTAwMjZ0eXBlLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpO1xuIFx0XHRpZiAob2xkX2dlbiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG9sZF9nZW4gIT0gbmV3X2dlbilcbi1cdFx0XHR1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XG4rXHRcdFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4sIHR5cGUpO1xuIFx0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpKSB7XG4gXHRcdG9sZF9nZW4gPSBmb2xpb19scnVfZ2VuKGZvbGlvKTtcbiBcdFx0aWYgKG9sZF9nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXG5AQCAtMzU0OSw4ICszNTU3LDYgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cdTAwM2Vwcml2YXRlO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKHdhbGstXHUwMDNlbHJ1dmVjKTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQod2Fsay1cdTAwM2VscnV2ZWMpO1xuLVx0REVGSU5FX01BWF9TRVEod2Fsay1cdTAwM2VscnV2ZWMpO1xuLVx0aW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7XG4gXHR1bnNpZ25lZCBpbnQgbnI7XG4gXHRwbWRfdCBwbWR2YWw7XG4gXG5AQCAtMzYwMSw3ICszNjA3LDcgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChsYXN0ICE9IGZvbGlvKSB7XG4tXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCB3YWxrLVx1MDAzZWxydXZlYywgbGFzdCwgZGlydHkpO1xuIFxuIFx0XHRcdGxhc3QgPSBmb2xpbztcbiBcdFx0XHRkaXJ0eSA9IGZhbHNlO1xuQEAgLTM2MTQsNyArMzYyMCw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHR3YWxrLVx1MDAzZW1tX3N0YXRzW01NX0xFQUZfWU9VTkddICs9IG5yO1xuIFx0fVxuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIHdhbGstXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXHRsYXN0ID0gTlVMTDtcbiBcbiBcdGlmIChpIFx1MDAzYyBQVFJTX1BFUl9QVEUgXHUwMDI2XHUwMDI2IGdldF9uZXh0X3ZtYShQTURfTUFTSywgUEFHRV9TSVpFLCBhcmdzLCBcdTAwMjZzdGFydCwgXHUwMDI2ZW5kKSlcbkBAIC0zNjM3LDggKzM2NDMsNiBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXHUwMDNlcHJpdmF0ZTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVx1MDAzZWxydXZlYyk7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdERFRklORV9NQVhfU0VRKHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFKHB1ZF9sZWFmKCpwdWQpKTtcbiBcbkBAIC0zNjkyLDcgKzM2OTYsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0XHRcdGdvdG8gbmV4dDtcbiBcbiBcdFx0aWYgKGxhc3QgIT0gZm9saW8pIHtcbi1cdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC0zNzA2LDcgKzM3MTAsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0XHRpID0gaSBcdTAwM2UgTUlOX0xSVV9CQVRDSCA/IDAgOiBmaW5kX25leHRfYml0KGJpdG1hcCwgTUlOX0xSVV9CQVRDSCwgaSkgKyAxO1xuIFx0fSB3aGlsZSAoaSBcdTAwM2M9IE1JTl9MUlVfQkFUQ0gpO1xuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xuIFx0c3Bpbl91bmxvY2socHRsKTtcbkBAIC00MjcwLDggKzQyNzQsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gZm9saW9fcGdkYXQoZm9saW8pO1xuIFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xuIFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlO1xuLVx0dW5zaWduZWQgbG9uZyBtYXhfc2VxO1xuLVx0aW50IGdlbjtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQocHZtdy1cdTAwM2VwdGwpO1xuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSwgZm9saW8pO1xuQEAgLTQzMDgsOCArNDMxMCw2IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcbiBcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XG4gXHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpO1xuLVx0bWF4X3NlcSA9IFJFQURfT05DRSgobHJ1dmVjKS1cdTAwM2VscnVnZW4ubWF4X3NlcSk7XG4tXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xuIFx0bW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcbiBcbiBcdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XG5AQCAtNDM0MSw3ICs0MzQxLDcgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAobGFzdCAhPSBmb2xpbykge1xuLVx0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4rXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC00MzUzLDEzICs0MzUzLDE0IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdFx0eW91bmcgKz0gbnI7XG4gXHR9XG4gXG4tXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xuIFxuIFx0LyogZmVlZGJhY2sgZnJvbSBybWFwIHdhbGtlcnMgdG8gcGFnZSB0YWJsZSB3YWxrZXJzICovXG4gXHRpZiAobW1fc3RhdGUgXHUwMDI2XHUwMDI2IHN1aXRhYmxlX3RvX3NjYW4oaSwgeW91bmcpKVxuLVx0XHR1cGRhdGVfYmxvb21fZmlsdGVyKG1tX3N0YXRlLCBtYXhfc2VxLCBwdm13LVx1MDAzZXBtZCk7XG4rXHRcdHVwZGF0ZV9ibG9vbV9maWx0ZXIobW1fc3RhdGUsIFJFQURfT05DRShscnV2ZWMtXHUwMDNlbHJ1Z2VuLm1heF9zZXEpLFxuK1x0XHRcdFx0ICAgIHB2bXctXHUwMDNlcG1kKTtcbiBcbiBcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiBcbkBAIC00NzE2LDcgKzQ3MTcsNyBAQCBzdGF0aWMgYm9vbCBpc29sYXRlX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYVxuIFxuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXG4gXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpXG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgMCk7XG4rXHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4gXG4gXHRzdWNjZXNzID0gbHJ1X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7XG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIXN1Y2Nlc3MsIGZvbGlvKTtcbkBAIC00ODA5LDkgKzQ4MTAsOSBAQCBzdGF0aWMgaW50IGdldF90aWVyX2lkeChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKVxuIFx0ICogVGhpcyB2YWx1ZSBpcyBjaG9zZW4gYmVjYXVzZSBhbnkgb3RoZXIgdGllciB3b3VsZCBoYXZlIGF0IGxlYXN0IHR3aWNlXG4gXHQgKiBhcyBtYW55IHJlZmF1bHRzIGFzIHRoZSBmaXJzdCB0aWVyLlxuIFx0ICovXG4tXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgMCwgMiwgXHUwMDI2c3ApO1xuLVx0Zm9yICh0aWVyID0gMTsgdGllciBcdTAwM2MgTUFYX05SX1RJRVJTOyB0aWVyKyspIHtcbi1cdFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIDMsIFx1MDAyNnB2KTtcbitcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01JTiwgMiwgXHUwMDI2c3ApO1xuK1x0Zm9yICh0aWVyID0gTFJVX1RJRVJfTUlOICsgMTsgdGllciBcdTAwM2M9IExSVV9USUVSX01BWDsgdGllcisrKSB7XG4rXHRcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0aWVyLCB0aWVyLCAzLCBcdTAwMjZwdik7XG4gXHRcdGlmICghcG9zaXRpdmVfY3RybF9lcnIoXHUwMDI2c3AsIFx1MDAyNnB2KSlcbiBcdFx0XHRicmVhaztcbiBcdH1cbkBAIC00ODMyLDggKzQ4MzMsMTAgQEAgc3RhdGljIGludCBnZXRfdHlwZV90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXG4gXHQgKiBDb21wYXJlIHRoZSBzdW0gb2YgYWxsIHRpZXJzIG9mIGFub24gd2l0aCB0aGF0IG9mIGZpbGUgdG8gZGV0ZXJtaW5lXG4gXHQgKiB3aGljaCB0eXBlIHRvIHNjYW4uXG4gXHQgKi9cbi1cdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIE1BWF9OUl9USUVSUywgc3dhcHBpbmVzcywgXHUwMDI2c3ApO1xuLVx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTUFYX05SX1RJRVJTLCBNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3MsIFx1MDAyNnB2KTtcbitcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUFYLFxuK1x0XHQgICAgICBzd2FwcGluZXNzLCBcdTAwMjZzcCk7XG4rXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCxcbitcdFx0ICAgICAgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCBcdTAwMjZwdik7XG4gXG4gXHRyZXR1cm4gcG9zaXRpdmVfY3RybF9lcnIoXHUwMDI2c3AsIFx1MDAyNnB2KTtcbiB9XG5AQCAtNDkzMiw4ICs0OTM1LDEwIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHR9XG4gXG4gXHRcdC8qIGRvbid0IGFkZCByZWplY3RlZCBmb2xpb3MgdG8gdGhlIG9sZGVzdCBnZW5lcmF0aW9uICovXG4tXHRcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSlcbi1cdFx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfYWN0aXZlKSk7XG4rXHRcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSkge1xuK1x0XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4rXHRcdFx0Zm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdG1vdmVfZm9saW9zX3RvX2xydShcdTAwMjZsaXN0KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQwOjQ5Ljk1OTIxNTg2MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzMTIxNDA4MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIHNlZSBpZiBpdCB3YXJyYW50cyBzb21lIGZ1enppbmcgZWZmb3J0cy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGZvY3VzZWQgb24gaWRlbnRpZnlpbmcgZnVuY3Rpb25hbCBjaGFuZ2VzLCBmaWd1cmluZyBvdXQgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLCBhbmQgcGlucG9pbnRpbmcga2V5IHN5bWJvbHMgdGhhdCBtaWdodCBiZSBpbnRlcmVzdGluZyB0YXJnZXRzLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCBpdCBsb29rcyBsaWtlIHRoaXMgcGF0Y2ggdG91Y2hlcyBhIGZhaXIgbnVtYmVyIG9mIGZpbGVzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNvbnRyb2wuIFRoZSBwcmltYXJ5IGZpbGVzIHRoYXQgc3RhbmQgb3V0IGFyZSBgbWVtY29udHJvbC5oYCwgYG1tX2lubGluZS5oYCwgYG1tem9uZS5oYCwgYGZvbGlvLmNgLCBgbWVtY29udHJvbC5jYCwgYG1pZ3JhdGUuY2AgYW5kIGB2bXNjYW4uY2AuXG5cblNwZWNpZmljYWxseSwgSSBzZWUgYSBjaGFuZ2UgaW4gYG1lbWNvbnRyb2wuaGAgd2hlcmUgYGxydV96b25lX3NpemVgIGluIHRoZSBgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGVgIGlzIGNoYW5nZWQgZnJvbSBgdW5zaWduZWQgbG9uZ2AgdG8gYGxvbmdgLiBUaGVyZSdzIGFsc28gYSBgV0FSTl9PTl9PTkNFYCBjaGVjayB0aGF0IG1pZ2h0IGJlIGludGVyZXN0aW5nLiBUaGUgdXBkYXRlcyBpbiBgbW1faW5saW5lLmhgIGxvb2sgbGlrZSByZWZhY3RvcmluZywgcmVwbGFjaW5nIGRpcmVjdCBzdHJ1Y3QgZmllbGQgYWNjZXNzIHdpdGggYGZvbGlvX2ZsYWdzKGZvbGlvLCAwKWAuIFdlIGFsc28gc2VlIHVwZGF0ZXMgdG8gdGhpbmdzIGxpa2UgTFJVIHRpZXJzIGFuZCByZWZlcmVuY2VzIChgTFJVX1RJRVJfTUlOYCwgYExSVV9SRUZTX01BWGApIGRlZmluZWQgaW4gYG1tem9uZS5oYC4gYGZvbGlvLmNgIGhhcyBzb21lIGNoYW5nZXMgcmVsYXRlZCB0byBMUlUgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgYG1lbWNvbnRyb2wuY2AgaGFzIGEgc2ltcGxpZmljYXRpb24gb2YgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYC4gV2Ugc2VlIHRoYXQgYG1pZ3JhdGUuY2AgYWxzbyBjYWxscyBgZm9saW9fbWlncmF0ZV9scnVfcmVmc2AuIGB2bXNjYW4uY2AgYXBwZWFycyB0byBiZSBnZXR0aW5nIHRoZSBtb3N0IGF0dGVudGlvbiBpbiB0ZXJtcyBvZiBuZXcgZnVuY3Rpb25zLCB3aXRoIGEgbG90IG9mIExSVS1yZWxhdGVkIGZ1bmN0aW9ucy5cblxuTm93LCBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlci4gSSdsbCBwcm9iYWJseSBmaXJlIHVwIGBncmVwcGVyYCBvciBhIHNpbWlsYXIgdG9vbCB0byBkZXRlcm1pbmUgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzIGFuZCB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucy4gVGhhdCB3aWxsIGhlbHAgbWUgemVybyBpbiBvbiB0aGUgcGFydHMgb2YgdGhlIGNvZGUgbW9zdCBsaWtlbHkgdG8gYmUgc3VzY2VwdGlibGUgdG8gZnV6emluZy4gSSdsbCBuZWVkIHRvIGZpbmQgZnVuY3Rpb25zIHRoYXQgYXJlIGV4cG9zZWQgb3IgYWNjZXNzaWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2MjIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0MDo1NC4yNzEzNjAyNzlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM5Njc4OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIExSVV9HRU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTM5Mz1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXFxuLS1cXG5tbS9LY29uZmlnLTE0MDMtIyBtdWx0aS1nZW4gTFJVIHtcXG5tbS9LY29uZmlnOjE0MDQ6Y29uZmlnIExSVV9HRU5cXG5tbS9LY29uZmlnLTE0MDUtXFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQxMi1cXG5tbS9LY29uZmlnOjE0MTM6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbm1tL0tjb25maWctMTQxNC1cXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQxOC1cXG5tbS9LY29uZmlnOjE0MTk6Y29uZmlnIExSVV9HRU5fU1RBVFNcXG5tbS9LY29uZmlnLTE0MjAtXFx0Ym9vbCBcXFwiRnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDI3LVxcbm1tL0tjb25maWc6MTQyODpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG5tbS9LY29uZmlnLTE0MjktXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0MDo1NC4zMjUzMzM1MjVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTI1NDg3MTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIHBhcnRpY3VsYXIgZmVhdHVyZSBpcyBiZWluZyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYXJvdW5kIGxpbmUgMTQwMC4gVGhhdCdzIHVzdWFsbHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBtZW1vcnkgbWFuYWdlbWVudC1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zLCBhdCBsZWFzdCBiYXNlZCBvbiBteSBwYXN0IGV4cGVyaWVuY2UuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgcmVsZXZhbnQgYGNvbmZpZ2Agb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBtYXliZSBldmVuIHNvbWUgaGVscCB0ZXh0IHRoYXQgb3V0bGluZXMgdGhlIHB1cnBvc2UgYW5kIGltcGxpY2F0aW9ucyBvZiB0aGUgZmVhdHVyZSBJJ20gaW50ZXJlc3RlZCBpbi4gSSdtIGdvaW5nIHRvIHNjYW4gdGhhdCBzZWN0aW9uIGZvciBjbHVlcywgbG9va2luZyBmb3Iga2V5d29yZHMgdGhhdCBhbGlnbiB3aXRoIHRoZSBzcGVjaWZpYyBhcmVhIEknbSB0cnlpbmcgdG8gdW5kZXJzdGFuZC4gRnJvbSB0aGVyZSwgSSdsbCB0cmFjZSB0aHJvdWdoIGFueSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMgdGhlIG9wdGlvbnMgbWlnaHQgaGF2ZSB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBjb25maWd1cmF0aW9uIHN5c3RlbSwgdXNpbmcgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgS2NvbmZpZyBsYW5ndWFnZSB0byBpbmZlciB0aGUgbG9naWMuIE15IGdvYWwgaXMgdG8gcXVpY2tseSBidWlsZCBhIG1lbnRhbCBtYXAgb2Ygd2hlcmUgdGhpcyBzZXR0aW5nIGZpdHMgaW50byB0aGUgYnJvYWRlciBtZW1vcnkgbWFuYWdlbWVudCBmcmFtZXdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODc1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDA6NTYuODUwODI0NjU2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1NDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQwMDpcXHRcXHQgIHB1cnBvc2VzLiAgSXQgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIHVzZXJmYXVsdGZkIHdyaXRlIHByb3RlY3Rpb24gb25cXG4xNDAxOlxcdFxcdCAgZmlsZS1iYWNrZWQgbWVtb3J5IHR5cGVzIGxpa2Ugc2htZW0gYW5kIGh1Z2V0bGJmcy5cXG4xNDAyOlxcdFxcbjE0MDM6XFx0IyBtdWx0aS1nZW4gTFJVIHtcXG4xNDA0OlxcdGNvbmZpZyBMUlVfR0VOXFxuMTQwNTpcXHRcXHRib29sIFxcXCJNdWx0aS1HZW4gTFJVXFxcIlxcbjE0MDY6XFx0XFx0ZGVwZW5kcyBvbiBNTVVcXG4xNDA3OlxcdFxcdCMgbWFrZSBzdXJlIGZvbGlvLVxcdTAwM2VmbGFncyBoYXMgZW5vdWdoIHNwYXJlIGJpdHNcXG4xNDA4OlxcdFxcdGRlcGVuZHMgb24gNjRCSVQgfHwgIVNQQVJTRU1FTSB8fCBTUEFSU0VNRU1fVk1FTU1BUFxcbjE0MDk6XFx0XFx0aGVscFxcbjE0MTA6XFx0XFx0ICBBIGhpZ2ggcGVyZm9ybWFuY2UgTFJVIGltcGxlbWVudGF0aW9uIHRvIG92ZXJjb21taXQgbWVtb3J5LiBTZWVcXG4xNDExOlxcdFxcdCAgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0IGZvciBkZXRhaWxzLlxcbjE0MTI6XFx0XFxuMTQxMzpcXHRjb25maWcgTFJVX0dFTl9FTkFCTEVEXFxuMTQxNDpcXHRcXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG4xNDE1OlxcdFxcdGRlcGVuZHMgb24gTFJVX0dFTlxcbjE0MTY6XFx0XFx0aGVscFxcbjE0MTc6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBtdWx0aS1nZW4gTFJVIGJ5IGRlZmF1bHQuXFxuMTQxODpcXHRcXG4xNDE5OlxcdGNvbmZpZyBMUlVfR0VOX1NUQVRTXFxuMTQyMDpcXHRcXHRib29sIFxcXCJGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcXFwiXFxuMTQyMTpcXHRcXHRkZXBlbmRzIG9uIExSVV9HRU5cXG4xNDIyOlxcdFxcdGhlbHBcXG4xNDIzOlxcdFxcdCAgRG8gbm90IGVuYWJsZSB0aGlzIG9wdGlvbiB1bmxlc3MgeW91IHBsYW4gdG8gbG9vayBhdCBoaXN0b3JpY2FsIHN0YXRzXFxuMTQyNDpcXHRcXHQgIGZyb20gZXZpY3RlZCBnZW5lcmF0aW9ucyBmb3IgZGVidWdnaW5nIHB1cnBvc2UuXFxuMTQyNTpcXHRcXG4xNDI2OlxcdFxcdCAgVGhpcyBvcHRpb24gaGFzIGEgcGVyLW1lbWNnIGFuZCBwZXItbm9kZSBtZW1vcnkgb3ZlcmhlYWQuXFxuMTQyNzpcXHRcXG4xNDI4OlxcdGNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxcbjE0Mjk6XFx0XFx0ZGVmX2Jvb2wgeVxcbjE0MzA6XFx0XFx0ZGVwZW5kcyBvbiBMUlVfR0VOIFxcdTAwMjZcXHUwMDI2IEFSQ0hfSEFTX0hXX1BURV9ZT1VOR1xcbjE0MzE6XFx0IyB9XFxuMTQzMjpcXHRcXG4xNDMzOlxcdGNvbmZpZyBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DS1xcbjE0MzQ6XFx0ICAgICAgIGRlZl9ib29sIG5cXG4xNDM1OlxcdFxcbjE0MzY6XFx0Y29uZmlnIFBFUl9WTUFfTE9DS1xcbjE0Mzc6XFx0XFx0ZGVmX2Jvb2wgeVxcbjE0Mzg6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DSyBcXHUwMDI2XFx1MDAyNiBNTVUgXFx1MDAyNlxcdTAwMjYgU01QXFxuMTQzOTpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQwOjU2Ljg1MDkzMjM2NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwOTIxMDg3MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIE1lbW9yeSBNYW5hZ2VtZW50IGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IHRoZXNlIGBtZW1fY2dyb3VwYCBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgIGFuZCBgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZWAuIFRoZXkncmUgcmlnaHQgdGhlcmUgaW4gYG1tL21lbWNvbnRyb2wuY2AuIFNpbmNlIHRoZXkgYXJlIHJlbGF0ZWQgdG8gY2dyb3VwcyBhbmQgbWVtb3J5LCBJIHNob3VsZCByZWFsbHkgY2lyY2xlIGJhY2sgYW5kIG1ha2Ugc3VyZSB0byBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyB0aGF0IGNvbnRyb2wgTUVNQ0cgZnVuY3Rpb25hbGl0eS4gSXQncyB0b28gZWFzeSB0byBtaXNzIHNvbWV0aGluZyBsaWtlIGEgZGVwZW5kZW5jeSBvciBhIGNvbmZpZ3VyYXRpb24gZmxhZyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IGhlcmUuIExldCdzIG1ha2Ugc3VyZSB3ZSBhcmVuJ3Qgb3Zlcmxvb2tpbmcgYW55IGNydWNpYWwgc2V0dGluZ3MgYmVmb3JlIGdvaW5nIGZ1cnRoZXIuIFRoaXMgaXMgYSBjcml0aWNhbCBhcmVhLCBhbmQgYSBkZWVwIGRpdmUgY2FuIGJlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gcm9idXN0IG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBhIHN1YnRsZSBidWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzM0LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0MDo1OC45NDMwNDU1NTlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE4NTkxMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA3NT1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDg0LVxcbmluaXQvS2NvbmZpZzoxMDg1OmNvbmZpZyBNRU1DR1xcbmluaXQvS2NvbmZpZy0xMDg2LVxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTMtXFxuaW5pdC9LY29uZmlnOjEwOTQ6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG5pbml0L0tjb25maWctMTA5NS1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTEwMC1cXG5pbml0L0tjb25maWc6MTEwMTpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG5pbml0L0tjb25maWctMTEwMi1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTEwNy1cXG5pbml0L0tjb25maWc6MTEwODpjb25maWcgTUVNQ0dfVjFcXG5pbml0L0tjb25maWctMTEwOS1cXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0MDo1OC45OTQ5MTA2MTVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjAyNzk3NzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBtbS9taWdyYXRlLmNgIENvbmZpZ3VyYXRpb25zKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgZGV0YWlscy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBtaWdyYXRpb24gY29uZmlndXJhdGlvbnMgd2l0aGluIGBtbS9taWdyYXRlLmNgLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgcGFyYW1ldGVycyBhbmQgZmxhZ3MgdGhhdCBnb3Zlcm4gaG93IHBhZ2VzIGFyZSBtb3ZlZCBiZXR3ZWVuIHpvbmVzIGFuZCBub2RlcywgYW5kIHRoZSB2YXJpb3VzIHN0cmF0ZWdpZXMgZW1wbG95ZWQuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gaXMgb3B0aW1hbCBmb3IgdGhlIHdvcmtsb2FkIGFuZCBoYXJkd2FyZSBJJ20gZGVhbGluZyB3aXRoLiBJJ20gZ29pbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaGV1cmlzdGljcyBhbmQgdGhyZXNob2xkcyByZWxhdGVkIHRvIE5VTUEgYmFsYW5jaW5nLCB6b25lIHJlY2xhaW0sIGFuZCBhbnkgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIHRoZSBwYWdlIGFsbG9jYXRvci4gSSdsbCBwcm9iYWJseSBzdGFydCBieSByZXZpZXdpbmcgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgdGhhdCBzZXQgdGhlc2UgcGFyYW1ldGVycyBhbmQgdGhlbiB0cmFjZSB0aGVpciB1c2FnZS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSB0cmFkZS1vZmZzIGJldHdlZW4gcGVyZm9ybWFuY2UgYW5kIG1lbW9yeSB1dGlsaXphdGlvbiB1bmRlciBkaWZmZXJlbnQgbWlncmF0aW9uIHNjZW5hcmlvcy4gSSBhbHNvIHdhbnQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvYnZpb3VzIGxvY2sgY29udGVudGlvbiBpc3N1ZXMgb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB3aXRoaW4gdGhlIG1pZ3JhdGlvbiBjb2RlIHBhdGhzLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyMTgsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0MTowMS41OTc3MjQ0MzFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MTM3MzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1JR1JBVElPTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NTgyPWNvbmZpZyBNRU1PUllfSE9UUkVNT1ZFXFxubW0vS2NvbmZpZy01ODMtXFx0Ym9vbCBcXFwiQWxsb3cgZm9yIG1lbW9yeSBob3QgcmVtb3ZlXFxcIlxcbm1tL0tjb25maWc6NTg0OlxcdHNlbGVjdCBNSUdSQVRJT05cXG5tbS9LY29uZmlnLTU4NS1cXG4tLVxcbm1tL0tjb25maWc9NjI1PWNvbmZpZyBCQUxMT09OXFxuLS1cXG5tbS9LY29uZmlnLTYyOS0jIHN1cHBvcnQgZm9yIG1lbW9yeSBiYWxsb29uIHBhZ2UgbWlncmF0aW9uXFxubW0vS2NvbmZpZzo2MzA6Y29uZmlnIEJBTExPT05fTUlHUkFUSU9OXFxubW0vS2NvbmZpZy02MzEtXFx0Ym9vbCBcXFwiQWxsb3cgZm9yIGJhbGxvb24gbWVtb3J5IG1pZ3JhdGlvblxcXCJcXG5tbS9LY29uZmlnLTYzMi1cXHRkZWZhdWx0IHlcXG5tbS9LY29uZmlnOjYzMzpcXHRkZXBlbmRzIG9uIE1JR1JBVElPTiBcXHUwMDI2XFx1MDAyNiBCQUxMT09OXFxubW0vS2NvbmZpZy02MzQtXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZz02NDI9Y29uZmlnIENPTVBBQ1RJT05cXG4tLVxcbm1tL0tjb25maWctNjQ0LVxcdGRlZmF1bHQgeVxcbm1tL0tjb25maWc6NjQ1OlxcdHNlbGVjdCBNSUdSQVRJT05cXG5tbS9LY29uZmlnLTY0Ni1cXHRkZXBlbmRzIG9uIE1NVVxcbi0tXFxubW0vS2NvbmZpZz02NjU9Y29uZmlnIFBBR0VfUkVQT1JUSU5HXFxuLS1cXG5tbS9LY29uZmlnLTY3Mi1cXG5tbS9LY29uZmlnOjY3Mzpjb25maWcgTlVNQV9NSUdSQVRJT05cXG5tbS9LY29uZmlnLTY3NC1cXHRib29sIFxcXCJOVU1BIHBhZ2UgbWlncmF0aW9uXFxcIlxcbi0tXFxubW0vS2NvbmZpZy02NzYtXFx0ZGVwZW5kcyBvbiBOVU1BIFxcdTAwMjZcXHUwMDI2IE1NVVxcbm1tL0tjb25maWc6Njc3OlxcdHNlbGVjdCBNSUdSQVRJT05cXG5tbS9LY29uZmlnLTY3OC1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnLTY4My1cXG5tbS9LY29uZmlnOjY4NDpjb25maWcgTUlHUkFUSU9OXFxubW0vS2NvbmZpZy02ODUtXFx0Ym9vbFxcbi0tXFxubW0vS2NvbmZpZy02ODctXFxubW0vS2NvbmZpZzo2ODg6Y29uZmlnIERFVklDRV9NSUdSQVRJT05cXG5tbS9LY29uZmlnOjY4OTpcXHRkZWZfYm9vbCBNSUdSQVRJT04gXFx1MDAyNlxcdTAwMjYgWk9ORV9ERVZJQ0VcXG5tbS9LY29uZmlnLTY5MC1cXG5tbS9LY29uZmlnOjY5MTpjb25maWcgQVJDSF9FTkFCTEVfSFVHRVBBR0VfTUlHUkFUSU9OXFxubW0vS2NvbmZpZy02OTItXFx0Ym9vbFxcbi0tXFxubW0vS2NvbmZpZz03NjU9Y29uZmlnIE1FTU9SWV9GQUlMVVJFXFxuLS1cXG5tbS9LY29uZmlnLTc2OS1cXHRzZWxlY3QgSU5URVJWQUxfVFJFRVxcbm1tL0tjb25maWc6NzcwOlxcdHNlbGVjdCBNSUdSQVRJT05cXG5tbS9LY29uZmlnLTc3MS1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTEwNTY9Y29uZmlnIENNQVxcbi0tXFxubW0vS2NvbmZpZy0xMDU4LVxcdGRlcGVuZHMgb24gTU1VXFxubW0vS2NvbmZpZzoxMDU5OlxcdHNlbGVjdCBNSUdSQVRJT05cXG5tbS9LY29uZmlnLTEwNjAtXFx0c2VsZWN0IE1FTU9SWV9JU09MQVRJT05cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDE6MDEuNjQ2ODcwMDM3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5ODgxMDE1NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgTXVsdGktR2VuIExSVSBTdWJzeXN0ZW06IEEgRGVlcCBEaXZlKipcblxuT2theSwgc28gTFJVX0dFTiBpcyB0aGUgTXVsdGktR2VuIExSVSBzdWJzeXN0ZW0g4oCTIHRoYXTigJlzIHRoZSB0aGluZyBpbiBMaW51eCB0aGF0IGRlYWxzIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBpbiBgbW0vdm1zY2FuLmNgLCBgbW0vZm9saW8uY2AsIGBpbmNsdWRlL2xpbnV4L21tX2lubGluZS5oYCwgYGluY2x1ZGUvbGludXgvbW16b25lLmhgLCBhbmQgYG1tL21lbWNvbnRyb2wuY2AuICBUaGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgZnVuY3Rpb25hbCBjaGFuZ2Ugc2lnbmlmaWNhbnQgZW5vdWdoIHRvIHdhcnJhbnQgZnV6emluZz9cblxuTGV0J3MgYnJlYWsgZG93biB0aGVzZSBjaGFuZ2VzIHRvIHNlZSBpZiB0aGV5IGFyZSB3b3J0aCB0aGUgZnV6emluZyBlZmZvcnQuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGlzIHJlZmFjdG9yaW5nIGFuZCBmaXhpbmcgaG93IHRoZSBtdWx0aS1nZW4gTFJVIHJlZmVyZW5jZSBiaXQgbWFuaXB1bGF0aW9uLCBnZW5lcmF0aW9uIHRyYWNraW5nLCBhbmQgdGllciBjYWxjdWxhdGlvbnMgYXJlIGRvbmUuIFNwZWNpZmljYWxseSwgdGhpcyB0b3VjaGVzIGNvZGUgcmVsYXRlZCB0byBgcmVhZF9jdHJsX3Bvc2AsIGBmb2xpb191cGRhdGVfZ2VuYCwgYGZvbGlvX2luY19nZW5gLCBgd2Fsa191cGRhdGVfZm9saW9gLCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAsIGBmb2xpb19taWdyYXRlX2ZsYWdzYCwgYW5kIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAuICBUaGVzZSBhcmUgY29yZSBmdW5jdGlvbnMgdGhhdCBJLCBhcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhLCByZWNvZ25pemUgYXMgYmVpbmcgYXQgdGhlIGhlYXJ0IG9mIG1lbW9yeSByZWNsYWltL3BhZ2UgYWdpbmcvbWlncmF0aW9uIGxvZ2ljIGluIE1HTFJVIChNdWx0aS1HZW4gTFJVKSwgYW5kIG1lbWNnIExSVSBhY2NvdW50aW5nLlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBkaXJlY3RseSBtb2RpZmllcyBjcml0aWNhbCBsb2dpYyBmb3IgcGFnZSByZWNsYW1hdGlvbiwgZ2VuZXJhdGlvbiBhZHZhbmNlbWVudCwgdGllciBjbGFzc2lmaWNhdGlvbiwgZm9saW8gZmxhZyBiaXQgY29tcGFyZS1hbmQtc3dhcCBsb29wcywgYW5kIG1lbWNnIExSVSB6b25lIHNpemUgY2FsY3VsYXRpb24uIFRoaXMgaXMgY29yZSBrZXJuZWwgbG9naWMgdGhhdCdzIGhpdCBkdXJpbmcgKnN0YW5kYXJkKiBrZXJuZWwgZXhlY3V0aW9uIOKAkyBtZW1vcnkgYWxsb2NhdGlvbiwgcmVjbGFtYXRpb24sIHBhZ2luZywgbWVtb3J5IGNncm91cHMsIGFuZCBtaWdyYXRpb24sIGFsbCBvZiB3aGljaCBhcmUgY29tbW9uIG9wZXJhdGlvbnMuICBTbyB5ZXMsIGFic29sdXRlbHksIHRoaXMgaXMgKipkZWZpbml0ZWx5Kiogd29ydGggZnV6emluZyFcblxuTm93LCBmb3IgdGhlIG5leHQgcGhhc2U6IExldCdzIGZvY3VzIG91ciBlZmZvcnRzLiAgVG8gZGV0ZXJtaW5lIHRoZSBtb3N0IGltcGFjdGZ1bCBzeW1ib2xzIHRvIHRhcmdldCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb25zIHdlcmUgbW9kaWZpZWQgb3IsIG1vcmUgaW1wb3J0YW50bHksIGFyZSBnbG9iYWwgZW50cnlwb2ludHMgZm9yIHRoaXMgbG9naWMuIEkgbmVlZCB0byBzZWFyY2ggdGhyb3VnaCBgbW0vdm1zY2FuLmNgLCBgbW0vZm9saW8uY2AsIGBtbS9tZW1jb250cm9sLmNgLCBhbmQgYG1tL21pZ3JhdGUuY2AgZm9yIGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyDigJMgb3IgYW55IGZ1bmN0aW9ucyB0aGF0IGNhbGwgZGlyZWN0bHkgaW50byB0aGUgbW9kaWZpZWQgY29kZS5cblxuTGV0IG1lIHRha2UgYSBsb29rIGF0IGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBpbiBgbW0vdm1zY2FuLmNgLiBJcyB0aGF0IGEgZ2xvYmFsIHN5bWJvbD8gTGV0J3MgY2hlY2sgaXRzIGRlZmluaXRpb24gYW5kIGRlY2xhcmF0aW9uIHRvIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDkzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQxOjA2LjYzNDk3NDc4NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIzOTEwMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHJ1X2dlbl9sb29rX2Fyb3VuZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcm1hcC5jPTkxOD1zdGF0aWMgYm9vbCBmb2xpb19yZWZlcmVuY2VkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vcm1hcC5jLTk4Mi1cXHRcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkgXFx1MDAyNlxcdTAwMjYgcHZtdy5wdGUpIHtcXG5tbS9ybWFwLmM6OTgzOlxcdFxcdFxcdGlmIChscnVfZ2VuX2xvb2tfYXJvdW5kKFxcdTAwMjZwdm13LCBucikpXFxubW0vcm1hcC5jLTk4NC1cXHRcXHRcXHRcXHRyZWZlcmVuY2VkKys7XFxuLS1cXG5tbS92bXNjYW4uYz0yNzkxPXN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIHNlcV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuLS1cXG5tbS92bXNjYW4uYy0yODIwLSAqIHdhbGtfcG1kX3JhbmdlKCk7IHRoZSBldmljdGlvbiBhbHNvIHJlcG9ydCB0aGVtIHdoZW4gd2Fsa2luZyB0aGUgcm1hcFxcbm1tL3Ztc2Nhbi5jOjI4MjE6ICogaW4gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLlxcbm1tL3Ztc2Nhbi5jLTI4MjItICpcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQwNzQ9c3RhdGljIGJvb2wgdHJ5X3RvX2luY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXFxuLS1cXG5tbS92bXNjYW4uYy00MDkzLVxcdCAqIElmIHRoZSBoYXJkd2FyZSBkb2Vzbid0IGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBhY2Nlc3NlZCBiaXQsIGZhbGxiYWNrXFxubW0vdm1zY2FuLmM6NDA5NDpcXHQgKiB0byBscnVfZ2VuX2xvb2tfYXJvdW5kKCksIHdoaWNoIG9ubHkgY2xlYXJzIHRoZSBhY2Nlc3NlZCBiaXQgaW4gYVxcbm1tL3Ztc2Nhbi5jLTQwOTUtXFx0ICogaGFuZGZ1bCBvZiBQVEVzLiBTcHJlYWRpbmcgdGhlIHdvcmsgb3V0IG92ZXIgYSBwZXJpb2Qgb2YgdGltZSB1c3VhbGx5XFxuLS1cXG5tbS92bXNjYW4uYz00MjEzPXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy00MjU5LSAqL1xcbm1tL3Ztc2Nhbi5jOjQyNjA6Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxcbm1tL3Ztc2Nhbi5jLTQyNjEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0MTowNi42ODczNzI1MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDkzNzAxODYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydCwgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgYW5kIE1pZ3JhdGlvbiBGbGFncyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBscnVfZ2VuX2xvb2tfYXJvdW5kYC4gSXQncyBhIG5vbi1zdGF0aWMgZnVuY3Rpb24sIG1lYW5pbmcgaXQncyBtZWFudCB0byBiZSB1c2VkIGV4dGVybmFsbHksIGFuZCBpdCdzIGRlY2xhcmVkIGluIGBpbmNsdWRlL2xpbnV4L21tX2lubGluZS5oYCBhbmQvb3IgYG1tL2ludGVybmFsLmhgLCBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGl0J3MgY2FsbGVkIGZyb20gYG1tL3JtYXAuY2AuIFRoYXQgcGxhY2VzIGl0IGZpcm1seSB3aXRoaW4gdGhlIHJlYWxtIG9mIHRoZSBwYWdlIHJlcGxhY2VtZW50IGFsZ29yaXRobSBhbmQgcmV2ZXJzZSBtYXBwaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBybWFwIGNvZGUuXG5cbk5vdywgZ2l2ZW4gdGhhdCBpdCdzIHJlbGF0ZWQgdG8gTFJVIGFuZCBsaWtlbHkgaW52b2x2ZWQgaW4gc29tZSBzb3J0IG9mIHBhZ2Ugc2Nhbm5pbmcgb3IgbG9vay1hcm91bmQgbWVjaGFuaXNtIGZvciBnZW5lcmF0aW5nIExSVSBsaXN0cywgSSBhbHNvIHdhbnQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBtaWdyYXRpb25zIGludGVyYWN0IHdpdGggdGhlIExSVS4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gY2hlY2sgaG93IGBmb2xpb19taWdyYXRlX2ZsYWdzYCBpcyBpbXBsZW1lbnRlZCwgZXNwZWNpYWxseSBpbiBgbW0vbWlncmF0ZS5jYC4gSSBoYXZlIGEgZmVlbGluZyB0aGF0IGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBhbmQgdGhlIG1pZ3JhdGlvbiBmbGFncyB3aWxsIGJlIGludGVyd292ZW4sIGVzcGVjaWFsbHkgaWYgdGhlIGNvZGUgaXMgZGVhbGluZyB3aXRoIHBhZ2VzIGluIHRoZSBwcm9jZXNzIG9mIG1pZ3JhdGlvbiBvciB0aG9zZSBwb3RlbnRpYWxseSBiZWluZyB0YXJnZXRlZCBmb3IgbWlncmF0aW9uIGR1ZSB0byB0aGUgTFJVIGV2aWN0aW9uLiBVbmRlcnN0YW5kaW5nIHRoaXMgY29ubmVjdGlvbiBpcyBjcml0aWNhbCB0byBzZWVpbmcgdGhlIHdob2xlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDk3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDE6MDkuMTgxMDc3NzMzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDAyNzA4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb2xpb19taWdyYXRlX2ZsYWdzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9taWdyYXRlLmM9NzM5PWludCBtaWdyYXRlX2h1Z2VfcGFnZV9tb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9taWdyYXRlLmMtNzc0LSAqL1xcbm1tL21pZ3JhdGUuYzo3NzU6dm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vbWlncmF0ZS5jLTc3Ni17XFxuLS1cXG5tbS9taWdyYXRlLmMtODYzLX1cXG5tbS9taWdyYXRlLmM6ODY0OkVYUE9SVF9TWU1CT0woZm9saW9fbWlncmF0ZV9mbGFncyk7XFxubW0vbWlncmF0ZS5jLTg2NS1cXG4tLVxcbm1tL21pZ3JhdGUuYz04NzA9c3RhdGljIGludCBfX21pZ3JhdGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZHN0LFxcbi0tXFxubW0vbWlncmF0ZS5jLTg5MC1cXG5tbS9taWdyYXRlLmM6ODkxOlxcdGZvbGlvX21pZ3JhdGVfZmxhZ3MoZHN0LCBzcmMpO1xcbm1tL21pZ3JhdGUuYy04OTItXFx0cmV0dXJuIDA7XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTExMDk9c3RhdGljIHZvaWQgX19taWdyYXRlX2RldmljZV9wYWdlcyh1bnNpZ25lZCBsb25nICpzcmNfcGZucyxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI1MS1cXHRcXHRcXHRlbHNlXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMjUyOlxcdFxcdFxcdFxcdGZvbGlvX21pZ3JhdGVfZmxhZ3MobmV3Zm9saW8sIGZvbGlvKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTEyNTMtXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0MTowOS4yMzUxMDk1OTlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA4MDYyNzQzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGd1dHMgb2YgbWVtb3J5IGNncm91cCBtYW5hZ2VtZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIExlYXN0IFJlY2VudGx5IFVzZWQgKExSVSkgc2l6ZSBpcyB1cGRhdGVkIHdpdGhpbiBhIG1lbW9yeSBjZ3JvdXAuIExldCdzIHN0YXJ0IHdpdGggYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCBpbiBgbW0vbWVtY29udHJvbC5jYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgdGhlIGNlbnRyYWwgcG9pbnQgZm9yIHRyYWNraW5nIGFuZCByZWZsZWN0aW5nIGNoYW5nZXMgdG8gdGhlIExSVSBsaXN0cyB1c2VkIGZvciBtZW1vcnkgcmVjbGFtYXRpb24gd2l0aGluIGVhY2ggY2dyb3VwLiBJJ2xsIG5lZWQgdG8gc2VlIHdoYXQgYXJndW1lbnRzIGl0IHRha2VzLCB3aGF0IGRhdGEgc3RydWN0dXJlcyBpdCBtYW5pcHVsYXRlcywgYW5kIHdoZXJlIGl0J3MgY2FsbGVkIGZyb20uIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyB0aGUgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgYW4gdXBkYXRlIGFuZCBob3cgdGhlIExSVSBzaXplIGlzIGNhbGN1bGF0ZWQgb3IgYWRqdXN0ZWQuIElzIHRoaXMgYSBnbG9iYWwgdXBkYXRlLCBvciBzcGVjaWZpYyB0byBwYXJ0aWN1bGFyIG1lbW9yeSB6b25lcz8gSG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCB0aGUgdmFyaW91cyBtZW1vcnkgc3RhdHMgYW5kIHRocmVzaG9sZHM/IEhvcGVmdWxseSwgdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2lsbCBnaXZlIG1lIHNvbWUgY2x1ZXMgYWJvdXQgaXRzIHB1cnBvc2UgaW4gdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc2NoZW1lLiBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgYSBjb3JlIGVsZW1lbnQgaW4gdGhlIG1lbW9yeSBjZ3JvdXAgZXZpY3Rpb24gc3RyYXRlZ3kuIFRpbWUgdG8gZ2V0IHRvIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzIwMSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQxOjEyLjMxNTc0MDE4OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA4MzM5ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ZvbGlvLmM9MTEyMz1zdGF0aWMgdm9pZCBscnV2ZWNfcmVwYXJlbnRfbHJ1KHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYyxcXG4tLVxcbm1tL2ZvbGlvLmMtMTE0My1cXHRcXHQgKi9cXG5tbS9mb2xpby5jOjExNDQ6XFx0XFx0bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUocGFyZW50X2xydXZlYywgbHJ1LCB6aWQsIHNpemUpO1xcbm1tL2ZvbGlvLmM6MTE0NTpcXHRcXHRtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShjaGlsZF9scnV2ZWMsIGxydSwgemlkLCAtKGxvbmcpc2l6ZSk7XFxubW0vZm9saW8uYy0xMTQ2LVxcdH1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xNTAxPXN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrX2lycXNhdmUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNTE4LS8qKlxcbm1tL21lbWNvbnRyb2wuYzoxNTE5OiAqIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplIC0gYWNjb3VudCBmb3IgYWRkaW5nIG9yIHJlbW92aW5nIGFuIGxydSBwYWdlXFxubW0vbWVtY29udHJvbC5jLTE1MjAtICogQGxydXZlYzogbWVtX2Nncm91cCBwZXIgem9uZSBscnUgdmVjdG9yXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTUyNy0gKi9cXG5tbS9tZW1jb250cm9sLmM6MTUyODp2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXFxubW0vbWVtY29udHJvbC5jLTE1MjktXFx0XFx0XFx0XFx0aW50IHppZCwgbG9uZyBucl9wYWdlcylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTE1OTI9dW5zaWduZWQgaW50IHJlY2xhaW1fY2xlYW5fcGFnZXNfZnJvbV9saXN0KHN0cnVjdCB6b25lICp6b25lLFxcbi0tXFxubW0vdm1zY2FuLmMtMTY0NC0gKiBVcGRhdGUgTFJVIHNpemVzIGFmdGVyIGlzb2xhdGluZyBwYWdlcy4gVGhlIExSVSBzaXplIHVwZGF0ZXMgbXVzdFxcbm1tL3Ztc2Nhbi5jOjE2NDU6ICogYmUgY29tcGxldGUgYmVmb3JlIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplIGR1ZSB0byBhIHNhbml0eSBjaGVjay5cXG5tbS92bXNjYW4uYy0xNjQ2LSAqL1xcbi0tXFxubW0vdm1zY2FuLmM9NDYyMT12b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxcbi0tXFxubW0vdm1zY2FuLmMtNDY0Mi1cXHRcXHRcXHQvKiBNb3ZlIHRoZSBhY2NvdW50aW5nLCBkbyBub3QgZHVwbGljYXRlIGl0LiAqL1xcbm1tL3Ztc2Nhbi5jOjQ2NDM6XFx0XFx0XFx0bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUocGFyZW50X2xydXZlYywgbHJ1LCB6aWQsIHNpemUpO1xcbm1tL3Ztc2Nhbi5jOjQ2NDQ6XFx0XFx0XFx0bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoY2hpbGRfbHJ1dmVjLCBscnUsIHppZCwgLShsb25nKXNpemUpO1xcbm1tL3Ztc2Nhbi5jLTQ2NDUtXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0MToxMi4zNjY1ODEwMTVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk5NTU2NTE3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIE1HTFJVIEludGVncmF0aW9uIFBvaW50cyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIGhvdyBNR0xSVSBpcyBhY3R1YWxseSBiZWluZyB1c2VkIGFuZCBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtLiBNeSBmaXJzdCBzdGVwIGlzIHRvIG1ldGhvZGljYWxseSBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGVudHJ5IHBvaW50cy4gSSdtIGdvaW5nIHRvIHNjYW4gdGhyb3VnaCBgbW0vdm1zY2FuLmNgIGFuZCBvdGhlciBmaWxlcyB3aXRoaW4gdGhlIGBtbWAgZGlyZWN0b3J5IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55ICpub24tc3RhdGljKiBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSBhY3RpbmcgYXMgYWNjZXNzIHBvaW50cyBmb3IgTUdMUlUuIEkgbmVlZCB0byBiZSBzdXJlIEknbSBjYXB0dXJpbmcgYWxsIHRoZSBwb3RlbnRpYWwgY2FsbCBzaXRlcy4gVGhlbiwgSSdsbCBmb2N1cyBzcGVjaWZpY2FsbHkgb24gYG1tL3Ztc2Nhbi5jYCBhbmQgemVybyBpbiBvbiB3aGF0IGNhbGxzICppbnRvKiBNR0xSVSBhcmUgbWFkZSBmcm9tIHRoZXJlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGl0cyBjb250cm9sIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTM5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDE6MTQuMzYyMTQ5MTA2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzg5NzI3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnVfZ2VuX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDcxOCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxubW0vdm1zY2FuLmM9ODI3PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XFxuLS1cXG5tbS92bXNjYW4uYy04MzktICovXFxubW0vdm1zY2FuLmM6ODQwOnN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG5tbS92bXNjYW4uYy04NDEte1xcbi0tXFxubW0vdm1zY2FuLmMtODY0LSNlbHNlXFxubW0vdm1zY2FuLmM6ODY1OnN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG5tbS92bXNjYW4uYy04NjYte1xcbi0tXFxubW0vdm1zY2FuLmM9ODcxPXN0YXRpYyBlbnVtIGZvbGlvX3JlZmVyZW5jZXMgZm9saW9fY2hlY2tfcmVmZXJlbmNlcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vdm1zY2FuLmMtODk1LVxcbm1tL3Ztc2Nhbi5jOjg5NjpcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkpIHtcXG5tbS92bXNjYW4uYy04OTctXFx0XFx0aWYgKCFyZWZlcmVuY2VkX3B0ZXMpXFxuLS1cXG5tbS92bXNjYW4uYy04OTktXFxubW0vdm1zY2FuLmM6OTAwOlxcdFxcdHJldHVybiBscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcXHUwMDI2dm1hX2ZsYWdzKSA/IEZPTElPUkVGX0FDVElWQVRFIDogRk9MSU9SRUZfS0VFUDtcXG5tbS92bXNjYW4uYy05MDEtXFx0fVxcbi0tXFxubW0vdm1zY2FuLmM9MjI4Mz1zdGF0aWMgdm9pZCBwcmVwYXJlX3NjYW5fY29udHJvbChwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTIyODktXFxubW0vdm1zY2FuLmM6MjI5MDpcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkpXFxubW0vdm1zY2FuLmMtMjI5MS1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS92bXNjYW4uYz0yNjk3PURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGxydV9zd2l0Y2gpO1xcbm1tL3Ztc2Nhbi5jLTI2OTgtI2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcXG5tbS92bXNjYW4uYzoyNjk5OkRFRklORV9TVEFUSUNfS0VZX0FSUkFZX1RSVUUobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xcbm1tL3Ztc2Nhbi5jOjI3MDA6I2RlZmluZSBnZXRfY2FwKGNhcClcXHRzdGF0aWNfYnJhbmNoX2xpa2VseShcXHUwMDI2bHJ1X2dlbl9jYXBzW2NhcF0pXFxubW0vdm1zY2FuLmMtMjcwMS0jZWxzZVxcbm1tL3Ztc2Nhbi5jOjI3MDI6REVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfRkFMU0UobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xcbm1tL3Ztc2Nhbi5jOjI3MDM6I2RlZmluZSBnZXRfY2FwKGNhcClcXHRzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZscnVfZ2VuX2NhcHNbY2FwXSlcXG5tbS92bXNjYW4uYy0yNzA0LSNlbmRpZlxcbi0tXFxubW0vdm1zY2FuLmM9Mjc5MT1zdGF0aWMgYm9vbCBfX21heWJlX3VudXNlZCBzZXFfaXNfdmFsaWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbi0tXFxubW0vdm1zY2FuLmMtMjgyMC0gKiB3YWxrX3BtZF9yYW5nZSgpOyB0aGUgZXZpY3Rpb24gYWxzbyByZXBvcnQgdGhlbSB3aGVuIHdhbGtpbmcgdGhlIHJtYXBcXG5tbS92bXNjYW4uYzoyODIxOiAqIGluIGxydV9nZW5fbG9va19hcm91bmQoKS5cXG5tbS92bXNjYW4uYy0yODIyLSAqXFxuLS1cXG5tbS92bXNjYW4uYz0yODM4PXN0YXRpYyB2b2lkIGdldF9pdGVtX2tleSh2b2lkICppdGVtLCBpbnQgKmtleSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI4NDctXFxubW0vdm1zY2FuLmM6Mjg0ODpzdGF0aWMgYm9vbCB0ZXN0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxLFxcbm1tL3Ztc2Nhbi5jLTI4NDktXFx0XFx0XFx0ICAgICAgdm9pZCAqaXRlbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI4NjMtXFxubW0vdm1zY2FuLmM6Mjg2NDpzdGF0aWMgdm9pZCB1cGRhdGVfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEsXFxubW0vdm1zY2FuLmMtMjg2NS1cXHRcXHRcXHRcXHR2b2lkICppdGVtKVxcbi0tXFxubW0vdm1zY2FuLmMtMjg4Mi1cXG5tbS92bXNjYW4uYzoyODgzOnN0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxcbm1tL3Ztc2Nhbi5jLTI4ODQte1xcbi0tXFxubW0vdm1zY2FuLmMtMjkwNC1cXG5tbS92bXNjYW4uYzoyOTA1OnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICpnZXRfbW1fbGlzdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vdm1zY2FuLmMtMjkwNi17XFxubW0vdm1zY2FuLmM6MjkwNzpcXHRzdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fbGlzdCBtbV9saXN0ID0ge1xcbm1tL3Ztc2Nhbi5jLTI5MDgtXFx0XFx0LmZpZm8gPSBMSVNUX0hFQURfSU5JVChtbV9saXN0LmZpZm8pLFxcbi0tXFxubW0vdm1zY2FuLmMtMjkyMC1cXG5tbS92bXNjYW4uYzoyOTIxOnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqZ2V0X21tX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG5tbS92bXNjYW4uYy0yOTIyLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5MjUtXFxubW0vdm1zY2FuLmM6MjkyNjpzdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqZ2V0X25leHRfbW0oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaylcXG5tbS92bXNjYW4uYy0yOTI3LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5MzAtXFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdCh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jOjI5MzE6XFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKHdhbGstXFx1MDAzZWxydXZlYyk7XFxubW0vdm1zY2FuLmMtMjkzMi1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NDQtXFxubW0vdm1zY2FuLmM6Mjk0NTp2b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL3Ztc2Nhbi5jLTI5NDYte1xcbi0tXFxubW0vdm1zY2FuLmMtMjk0OC1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKTtcXG5tbS92bXNjYW4uYzoyOTQ5OlxcdHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKm1tX2xpc3QgPSBnZXRfbW1fbGlzdChtZW1jZyk7XFxubW0vdm1zY2FuLmMtMjk1MC1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NTktXFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcXG5tbS92bXNjYW4uYzoyOTYwOlxcdFxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jLTI5NjEtXFxuLS1cXG5tbS92bXNjYW4uYy0yOTcxLVxcbm1tL3Ztc2Nhbi5jOjI5NzI6dm9pZCBscnVfZ2VuX2RlbF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5tbS92bXNjYW4uYy0yOTczLXtcXG5tbS92bXNjYW4uYy0yOTc0LVxcdGludCBuaWQ7XFxubW0vdm1zY2FuLmM6Mjk3NTpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICptbV9saXN0O1xcbm1tL3Ztc2Nhbi5jLTI5NzYtXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5ODktXFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcXG5tbS92bXNjYW4uYzoyOTkwOlxcdFxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jLTI5OTEtXFxuLS1cXG5tbS92bXNjYW4uYy0zMDExLSNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYzozMDEyOnZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL3Ztc2Nhbi5jLTMwMTMte1xcbi0tXFxubW0vdm1zY2FuLmMtMzAzNS1cXG5tbS92bXNjYW4uYzozMDM2OlxcdGxydV9nZW5fZGVsX21tKG1tKTtcXG5tbS92bXNjYW4uYzozMDM3OlxcdGxydV9nZW5fYWRkX21tKG1tKTtcXG5tbS92bXNjYW4uYy0zMDM4LX1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwNDItXFxubW0vdm1zY2FuLmM6MzA0MzpzdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fbGlzdCAqZ2V0X21tX2xpc3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL3Ztc2Nhbi5jLTMwNDQte1xcbi0tXFxubW0vdm1zY2FuLmMtMzA0Ny1cXG5tbS92bXNjYW4uYzozMDQ4OnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqZ2V0X21tX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG5tbS92bXNjYW4uYy0zMDQ5LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwNTItXFxubW0vdm1zY2FuLmM6MzA1MzpzdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqZ2V0X25leHRfbW0oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaylcXG5tbS92bXNjYW4uYy0zMDU0LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwNTktXFxubW0vdm1zY2FuLmM6MzA2MDpzdGF0aWMgdm9pZCByZXNldF9tbV9zdGF0cyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBib29sIGxhc3QpXFxubW0vdm1zY2FuLmMtMzA2MS17XFxuLS1cXG5tbS92bXNjYW4uYy0zMDY0LVxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IHdhbGstXFx1MDAzZWxydXZlYztcXG5tbS92bXNjYW4uYzozMDY1OlxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jLTMwNjYtXFxuLS1cXG5tbS92bXNjYW4uYy0zMDg0LVxcbm1tL3Ztc2Nhbi5jOjMwODU6c3RhdGljIGJvb2wgaXRlcmF0ZV9tbV9saXN0KHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBtbV9zdHJ1Y3QgKippdGVyKVxcbm1tL3Ztc2Nhbi5jLTMwODYte1xcbi0tXFxubW0vdm1zY2FuLmMtMzA5MS1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcXG5tbS92bXNjYW4uYzozMDkyOlxcdHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKm1tX2xpc3QgPSBnZXRfbW1fbGlzdChtZW1jZyk7XFxubW0vdm1zY2FuLmM6MzA5MzpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcXG5tbS92bXNjYW4uYy0zMDk0LVxcbi0tXFxubW0vdm1zY2FuLmM9MzE0OT1zdGF0aWMgYm9vbCBpdGVyYXRlX21tX2xpc3Rfbm93YWxrKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEpXFxuLS1cXG5tbS92bXNjYW4uYy0zMTUyLVxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jOjMxNTM6XFx0c3RydWN0IGxydV9nZW5fbW1fbGlzdCAqbW1fbGlzdCA9IGdldF9tbV9saXN0KG1lbWNnKTtcXG5tbS92bXNjYW4uYzozMTU0OlxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jLTMxNTUtXFxuLS1cXG5tbS92bXNjYW4uYz0zMjAxPXN0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXJfbWluLFxcbi0tXFxubW0vdm1zY2FuLmMtMzIwNC1cXHRpbnQgaTtcXG5tbS92bXNjYW4uYzozMjA1OlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxubW0vdm1zY2FuLmMtMzIwNi1cXHRpbnQgaGlzdCA9IGxydV9oaXN0X2Zyb21fc2VxKGxydWdlbi1cXHUwMDNlbWluX3NlcVt0eXBlXSk7XFxuLS1cXG5tbS92bXNjYW4uYz0zMjIwPXN0YXRpYyB2b2lkIHJlc2V0X2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGJvb2wgY2FycnlvdmVyKVxcbi0tXFxubW0vdm1zY2FuLmMtMzIyMi1cXHRpbnQgaGlzdCwgdGllcjtcXG5tbS92bXNjYW4uYzozMjIzOlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxubW0vdm1zY2FuLmMtMzIyNC1cXHRib29sIGNsZWFyID0gY2FycnlvdmVyID8gTlJfSElTVF9HRU5TID09IDEgOiBOUl9ISVNUX0dFTlMgXFx1MDAzZSAxO1xcbi0tXFxubW0vdm1zY2FuLmM9MzI3Mj1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGludCAqdHlwZSxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMyOTItXFxubW0vdm1zY2FuLmM6MzI5MzpcXHRcXHQvKiBscnVfZ2VuX2RlbF9mb2xpbygpIGhhcyBpc29sYXRlZCB0aGlzIHBhZ2U/ICovXFxubW0vdm1zY2FuLmMtMzI5NC1cXHRcXHRpZiAob2xkX2dlbiBcXHUwMDNjIDApXFxuLS1cXG5tbS92bXNjYW4uYz0zMzA3PXN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS92bXNjYW4uYy0zMzA5LVxcdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xcbm1tL3Ztc2Nhbi5jOjMzMTA6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYzozMzExOlxcdGludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXFx1MDAzZW1pbl9zZXFbdHlwZV0pO1xcbm1tL3Ztc2Nhbi5jLTMzMTItXFx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMzMjYtXFxubW0vdm1zY2FuLmM6MzMyNzpcXHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xcbm1tL3Ztc2Nhbi5jLTMzMjgtXFxuLS1cXG5tbS92bXNjYW4uYy0zMzMxLVxcbm1tL3Ztc2Nhbi5jOjMzMzI6c3RhdGljIHZvaWQgdXBkYXRlX2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG5tbS92bXNjYW4uYy0zMzMzLVxcdFxcdFxcdCAgICAgIGludCBvbGRfZ2VuLCBpbnQgbmV3X2dlbiwgaW50IHR5cGUpXFxuLS1cXG5tbS92bXNjYW4uYy0zMzQ2LVxcbm1tL3Ztc2Nhbi5jOjMzNDc6c3RhdGljIHZvaWQgcmVzZXRfYmF0Y2hfc2l6ZShzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrKVxcbm1tL3Ztc2Nhbi5jLTMzNDgte1xcbi0tXFxubW0vdm1zY2FuLmMtMzM1MC1cXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBscnV2ZWNfbGl2ZV9sb2NrX2lycSh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jOjMzNTE6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYy0zMzUyLVxcbi0tXFxubW0vdm1zY2FuLmMtMzM2NS1cXG5tbS92bXNjYW4uYzozMzY2OlxcdFxcdGlmIChscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIGdlbikpXFxubW0vdm1zY2FuLmMtMzM2Ny1cXHRcXHRcXHRscnUgKz0gTFJVX0FDVElWRTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTMzNzQ9c3RhdGljIGludCBzaG91bGRfc2tpcF92bWEodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBtbV93YWxrICphcmdzKVxcbi0tXFxubW0vdm1zY2FuLmMtMzM3Ny1cXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IGFyZ3MtXFx1MDAzZXZtYTtcXG5tbS92bXNjYW4uYzozMzc4OlxcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVxcdTAwM2Vwcml2YXRlO1xcbm1tL3Ztc2Nhbi5jLTMzNzktXFxuLS1cXG5tbS92bXNjYW4uYz0zNTEyPXN0YXRpYyBib29sIHN1aXRhYmxlX3RvX3NjYW4oaW50IHRvdGFsLCBpbnQgeW91bmcpXFxuLS1cXG5tbS92bXNjYW4uYy0zNTE5LVxcbm1tL3Ztc2Nhbi5jOjM1MjA6c3RhdGljIHZvaWQgd2Fsa191cGRhdGVfZm9saW8oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vdm1zY2FuLmMtMzUyMS1cXHRcXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgZGlydHkpXFxuLS1cXG5tbS92bXNjYW4uYy0zNTI3LVxcbm1tL3Ztc2Nhbi5jOjM1Mjg6XFx0bmV3X2dlbiA9IGxydV9nZW5fZnJvbV9zZXEoUkVBRF9PTkNFKGxydXZlYy1cXHUwMDNlbHJ1Z2VuLm1heF9zZXEpKTtcXG5tbS92bXNjYW4uYy0zNTI5LVxcbi0tXFxubW0vdm1zY2FuLmMtMzUzOC1cXHRcXHRcXHR1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbiwgdHlwZSk7XFxubW0vdm1zY2FuLmM6MzUzOTpcXHR9IGVsc2UgaWYgKGxydV9nZW5fc2V0X3JlZnMoZm9saW8sIFxcdTAwMjZ2bWEtXFx1MDAzZWZsYWdzKSkge1xcbm1tL3Ztc2Nhbi5jLTM1NDAtXFx0XFx0b2xkX2dlbiA9IGZvbGlvX2xydV9nZW4oZm9saW8pO1xcbi0tXFxubW0vdm1zY2FuLmM9MzU0Nj1zdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM1NTYtXFx0c3RydWN0IGZvbGlvICpsYXN0ID0gTlVMTDtcXG5tbS92bXNjYW4uYzozNTU3OlxcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVxcdTAwM2Vwcml2YXRlO1xcbm1tL3Ztc2Nhbi5jLTM1NTgtXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKHdhbGstXFx1MDAzZWxydXZlYyk7XFxuLS1cXG5tbS92bXNjYW4uYz0zNjM1PXN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vdm1zY2FuLmMtMzY0Mi1cXHRzdHJ1Y3QgZm9saW8gKmxhc3QgPSBOVUxMO1xcbm1tL3Ztc2Nhbi5jOjM2NDM6XFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXFx1MDAzZXByaXZhdGU7XFxubW0vdm1zY2FuLmMtMzY0NC1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay1cXHUwMDNlbHJ1dmVjKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTM3MjE9c3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS92bXNjYW4uYy0zNzMwLVxcdHVuc2lnbmVkIGxvbmcgZmlyc3QgPSAtMTtcXG5tbS92bXNjYW4uYzozNzMxOlxcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVxcdTAwM2Vwcml2YXRlO1xcbm1tL3Ztc2Nhbi5jOjM3MzI6XFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKHdhbGstXFx1MDAzZWxydXZlYyk7XFxubW0vdm1zY2FuLmMtMzczMy1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTM3OTQ9c3RhdGljIGludCB3YWxrX3B1ZF9yYW5nZShwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM4MDAtXFx0dW5zaWduZWQgbG9uZyBuZXh0O1xcbm1tL3Ztc2Nhbi5jOjM4MDE6XFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXFx1MDAzZXByaXZhdGU7XFxubW0vdm1zY2FuLmMtMzgwMi1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTM4MzUtXFxubW0vdm1zY2FuLmM6MzgzNjpzdGF0aWMgdm9pZCB3YWxrX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrKVxcbm1tL3Ztc2Nhbi5jLTM4Mzcte1xcbi0tXFxubW0vdm1zY2FuLmMtMzg3MC1cXG5tbS92bXNjYW4uYzozODcxOnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICpzZXRfbW1fd2FsayhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBib29sIGZvcmNlX2FsbG9jKVxcbm1tL3Ztc2Nhbi5jLTM4NzIte1xcbm1tL3Ztc2Nhbi5jOjM4NzM6XFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGN1cnJlbnQtXFx1MDAzZXJlY2xhaW1fc3RhdGUtXFx1MDAzZW1tX3dhbGs7XFxubW0vdm1zY2FuLmMtMzg3NC1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTM4OTE9c3RhdGljIHZvaWQgY2xlYXJfbW1fd2Fsayh2b2lkKVxcbm1tL3Ztc2Nhbi5jLTM4OTIte1xcbm1tL3Ztc2Nhbi5jOjM4OTM6XFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGN1cnJlbnQtXFx1MDAzZXJlY2xhaW1fc3RhdGUtXFx1MDAzZW1tX3dhbGs7XFxubW0vdm1zY2FuLmMtMzg5NC1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTM5MDQ9c3RhdGljIGJvb2wgaW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHN3YXBwaW5lc3MpXFxuLS1cXG5tbS92bXNjYW4uYy0zOTA3LVxcdGludCByZW1haW5pbmcgPSBNQVhfTFJVX0JBVENIO1xcbm1tL3Ztc2Nhbi5jOjM5MDg6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYy0zOTA5LVxcdGludCBoaXN0ID0gbHJ1X2hpc3RfZnJvbV9zZXEobHJ1Z2VuLVxcdTAwM2VtaW5fc2VxW3R5cGVdKTtcXG5tbS92bXNjYW4uYzozOTEwOlxcdGludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXFx1MDAzZW1pbl9zZXFbdHlwZV0pO1xcbm1tL3Ztc2Nhbi5jLTM5MTEtXFxuLS1cXG5tbS92bXNjYW4uYz0zOTU3PXN0YXRpYyB2b2lkIHRyeV90b19pbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxcbi0tXFxubW0vdm1zY2FuLmMtMzk2MC1cXHRib29sIHNlcV9pbmNfZmxhZyA9IGZhbHNlO1xcbm1tL3Ztc2Nhbi5jOjM5NjE6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYy0zOTYyLVxcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XFxuLS1cXG5tbS92bXNjYW4uYy0zOTY4LVxcdFxcdHdoaWxlIChtaW5fc2VxW3R5cGVdICsgTUlOX05SX0dFTlMgXFx1MDAzYz0gbHJ1Z2VuLVxcdTAwM2VtYXhfc2VxKSB7XFxubW0vdm1zY2FuLmM6Mzk2OTpcXHRcXHRcXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1pbl9zZXFbdHlwZV0pO1xcbm1tL3Ztc2Nhbi5jLTM5NzAtXFxuLS1cXG5tbS92bXNjYW4uYy0zOTg5LVxcbm1tL3Ztc2Nhbi5jOjM5OTA6XFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIGxydV9nZW5fZm9saW8gKi9cXG5tbS92bXNjYW4uYy0zOTkxLVxcdGlmIChzd2FwcGluZXNzIFxcdTAwMjZcXHUwMDI2IHN3YXBwaW5lc3MgXFx1MDAzYz0gTUFYX1NXQVBQSU5FU1MpIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQwMDk9c3RhdGljIGJvb2wgaW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgaW50IHN3YXBwaW5lc3MpXFxuLS1cXG5tbS92bXNjYW4uYy00MDEzLVxcdGludCB0eXBlLCB6b25lO1xcbm1tL3Ztc2Nhbi5jOjQwMTQ6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYy00MDE1LXJlc3RhcnQ6XFxuLS1cXG5tbS92bXNjYW4uYy00MDQ0LVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjQwNDU6XFx0cHJldiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVxcdTAwM2VtYXhfc2VxIC0gMSk7XFxubW0vdm1zY2FuLmM6NDA0NjpcXHRuZXh0ID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXFx1MDAzZW1heF9zZXEgKyAxKTtcXG5tbS92bXNjYW4uYy00MDQ3LVxcbi0tXFxubW0vdm1zY2FuLmM9NDA3ND1zdGF0aWMgYm9vbCB0cnlfdG9faW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQwNzctXFx0Ym9vbCBzdWNjZXNzO1xcbm1tL3Ztc2Nhbi5jOjQwNzg6XFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaztcXG5tbS92bXNjYW4uYy00MDc5LVxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gTlVMTDtcXG5tbS92bXNjYW4uYzo0MDgwOlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxubW0vdm1zY2FuLmM6NDA4MTpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcXG5tbS92bXNjYW4uYy00MDgyLVxcbi0tXFxubW0vdm1zY2FuLmMtNDA5My1cXHQgKiBJZiB0aGUgaGFyZHdhcmUgZG9lc24ndCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgYWNjZXNzZWQgYml0LCBmYWxsYmFja1xcbm1tL3Ztc2Nhbi5jOjQwOTQ6XFx0ICogdG8gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLCB3aGljaCBvbmx5IGNsZWFycyB0aGUgYWNjZXNzZWQgYml0IGluIGFcXG5tbS92bXNjYW4uYy00MDk1LVxcdCAqIGhhbmRmdWwgb2YgUFRFcy4gU3ByZWFkaW5nIHRoZSB3b3JrIG91dCBvdmVyIGEgcGVyaW9kIG9mIHRpbWUgdXN1YWxseVxcbi0tXFxubW0vdm1zY2FuLmM9NDE1OD1zdGF0aWMgdW5zaWduZWQgbG9uZyBscnV2ZWNfZXZpY3RhYmxlX3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQxNjEtXFx0dW5zaWduZWQgbG9uZyBzZXEsIHRvdGFsID0gMDtcXG5tbS92bXNjYW4uYzo0MTYyOlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxubW0vdm1zY2FuLmMtNDE2My1cXHRERUZJTkVfTUFYX1NFUShscnV2ZWMpO1xcbi0tXFxubW0vdm1zY2FuLmMtNDE2Ny1cXHRcXHRmb3IgKHNlcSA9IG1pbl9zZXFbdHlwZV07IHNlcSBcXHUwMDNjPSBtYXhfc2VxOyBzZXErKykge1xcbm1tL3Ztc2Nhbi5jOjQxNjg6XFx0XFx0XFx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpO1xcbm1tL3Ztc2Nhbi5jLTQxNjktXFx0XFx0XFx0Zm9yICh6b25lID0gMDsgem9uZSBcXHUwMDNjIE1BWF9OUl9aT05FUzsgem9uZSsrKVxcbi0tXFxubW0vdm1zY2FuLmM9NDE4OT1zdGF0aWMgYm9vbCBscnV2ZWNfaXNfcmVjbGFpbWFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQyMDMtXFxubW0vdm1zY2FuLmM6NDIwNDpcXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGV2aWN0YWJsZV9taW5fc2VxKG1pbl9zZXEsIHN3YXBwaW5lc3MpKTtcXG5tbS92bXNjYW4uYy00MjA1LVxcdGJpcnRoID0gUkVBRF9PTkNFKGxydXZlYy1cXHUwMDNlbHJ1Z2VuLnRpbWVzdGFtcHNbZ2VuXSk7XFxuLS1cXG5tbS92bXNjYW4uYy00MjEwLS8qIHRvIHByb3RlY3QgdGhlIHdvcmtpbmcgc2V0IG9mIHRoZSBsYXN0IE4gamlmZmllcyAqL1xcbm1tL3Ztc2Nhbi5jOjQyMTE6c3RhdGljIHVuc2lnbmVkIGxvbmcgbHJ1X2dlbl9taW5fdHRsIF9fcmVhZF9tb3N0bHk7XFxubW0vdm1zY2FuLmMtNDIxMi1cXG5tbS92bXNjYW4uYzo0MjEzOnN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNDIxNC17XFxubW0vdm1zY2FuLmMtNDIxNS1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxubW0vdm1zY2FuLmM6NDIxNjpcXHR1bnNpZ25lZCBsb25nIG1pbl90dGwgPSBSRUFEX09OQ0UobHJ1X2dlbl9taW5fdHRsKTtcXG5tbS92bXNjYW4uYy00MjE3LVxcdGJvb2wgcmVjbGFpbWFibGUgPSAhbWluX3R0bDtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQyNTktICovXFxubW0vdm1zY2FuLmM6NDI2MDpib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXFxubW0vdm1zY2FuLmMtNDI2MS17XFxuLS1cXG5tbS92bXNjYW4uYy00MjY1LVxcdHVuc2lnbmVkIGxvbmcgZW5kO1xcbm1tL3Ztc2Nhbi5jOjQyNjY6XFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaztcXG5tbS92bXNjYW4uYy00MjY3LVxcdHN0cnVjdCBmb2xpbyAqbGFzdCA9IE5VTEw7XFxuLS1cXG5tbS92bXNjYW4uYy00Mjc1LVxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcXG5tbS92bXNjYW4uYzo0Mjc2OlxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZTtcXG5tbS92bXNjYW4uYy00Mjc3LVxcbi0tXFxubW0vdm1zY2FuLmM9NDM3NT1lbnVtIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQzODItXFxubW0vdm1zY2FuLmM6NDM4MzpzdGF0aWMgdm9pZCBscnVfZ2VuX3JvdGF0ZV9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBvcClcXG5tbS92bXNjYW4uYy00Mzg0LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ0MzAtXFxubW0vdm1zY2FuLmM6NDQzMTp2b2lkIGxydV9nZW5fb25saW5lX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS92bXNjYW4uYy00NDMyLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ0NTUtXFxubW0vdm1zY2FuLmM6NDQ1Njp2b2lkIGxydV9nZW5fb2ZmbGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vdm1zY2FuLmMtNDQ1Ny17XFxuLS1cXG5tbS92bXNjYW4uYy00NDYyLVxcbm1tL3Ztc2Nhbi5jOjQ0NjM6XFx0XFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBNRU1DR19MUlVfT0xEKTtcXG5tbS92bXNjYW4uYy00NDY0LVxcdH1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ0NjYtXFxubW0vdm1zY2FuLmM6NDQ2Nzp2b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vdm1zY2FuLmMtNDQ2OC17XFxuLS1cXG5tbS92bXNjYW4uYy00NDkyLVxcbm1tL3Ztc2Nhbi5jOjQ0OTM6dm9pZCBscnVfZ2VuX3NvZnRfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXFxubW0vdm1zY2FuLmMtNDQ5NC17XFxuLS1cXG5tbS92bXNjYW4uYy00NDk4LVxcdGlmIChSRUFEX09OQ0UobHJ1dmVjLVxcdTAwM2VscnVnZW4uc2VnKSAhPSBNRU1DR19MUlVfSEVBRClcXG5tbS92bXNjYW4uYzo0NDk5OlxcdFxcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX0hFQUQpO1xcbm1tL3Ztc2Nhbi5jLTQ1MDAtfVxcbm1tL3Ztc2Nhbi5jLTQ1MDEtXFxubW0vdm1zY2FuLmM6NDUwMjpib29sIHJlY2hlY2tfbHJ1X2dlbl9tYXhfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxcbm1tL3Ztc2Nhbi5jLTQ1MDMte1xcbi0tXFxubW0vdm1zY2FuLmM9NDUxNT1zdGF0aWMgdm9pZCB0cnlfdG9faW5jX21heF9zZXFfbm93YWxrKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ1MTcte1xcbm1tL3Ztc2Nhbi5jOjQ1MTg6XFx0c3RydWN0IGxydV9nZW5fbW1fbGlzdCAqbW1fbGlzdCA9IGdldF9tbV9saXN0KG1lbWNnKTtcXG5tbS92bXNjYW4uYzo0NTE5OlxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jLTQ1MjAtXFx0aW50IHN3YXBwaW5lc3MgPSBtZW1fY2dyb3VwX3N3YXBwaW5lc3MobWVtY2cpO1xcbi0tXFxubW0vdm1zY2FuLmMtNDU0OC0gKi9cXG5tbS92bXNjYW4uYzo0NTQ5OnZvaWQgbWF4X2xydV9nZW5fbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxcbm1tL3Ztc2Nhbi5jLTQ1NTAte1xcbi0tXFxubW0vdm1zY2FuLmMtNDU3NS0gKiAgICBnZW5lcmF0aW9ucyBvbiBhbiBMUlUgbGlzdC5cXG5tbS92bXNjYW4uYzo0NTc2OiAqIDQuIEluIGxydV9nZW5fZGVsX2ZvbGlvKCksIHRoZSBnZW5lcmF0aW9uIHRvIHdoaWNoIHRoZSBmb2xpbyBiZWxvbmdzIGlzXFxubW0vdm1zY2FuLmMtNDU3Ny0gKiAgICBmb3VuZCBiYXNlZCBvbiB0aGUgZ2VuZXJhdGlvbiBpbmZvcm1hdGlvbiBpbiBmb2xpby1cXHUwMDNlZmxhZ3MsIGFuZCB0aGVcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ1NzktICogICAgdGhlIGxydSBzaXplIGNvcnJlY3RseSBkdXJpbmcgcmVwYXJlbnRpbmcsIG90aGVyd2lzZSB0aGUgbHJ1IHNpemUgbWF5XFxubW0vdm1zY2FuLmM6NDU4MDogKiAgICBiZSB1cGRhdGVkIGluY29ycmVjdGx5IGluIGxydV9nZW5fZGVsX2ZvbGlvKCkuXFxubW0vdm1zY2FuLmMtNDU4MS0gKlxcbi0tXFxubW0vdm1zY2FuLmMtNDU4OS0gKi9cXG5tbS92bXNjYW4uYzo0NTkwOnN0YXRpYyB2b2lkIF9fbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsIHN0cnVjdCBscnV2ZWMgKnBhcmVudF9scnV2ZWMsXFxubW0vdm1zY2FuLmMtNDU5MS1cXHRcXHRcXHRcXHQgICAgIGludCB6b25lLCBpbnQgdHlwZSlcXG5tbS92bXNjYW4uYy00NTkyLXtcXG5tbS92bXNjYW4uYzo0NTkzOlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpjaGlsZF9scnVnZW4sICpwYXJlbnRfbHJ1Z2VuO1xcbm1tL3Ztc2Nhbi5jLTQ1OTQtXFx0ZW51bSBscnVfbGlzdCBscnUgPSB0eXBlICogTFJVX0lOQUNUSVZFX0ZJTEU7XFxuLS1cXG5tbS92bXNjYW4uYy00NjAwLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBnZXRfbnJfZ2VucyhjaGlsZF9scnV2ZWMsIHR5cGUpOyBpKyspIHtcXG5tbS92bXNjYW4uYzo0NjAxOlxcdFxcdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGNoaWxkX2xydWdlbi1cXHUwMDNlbWF4X3NlcSAtIGkpO1xcbm1tL3Ztc2Nhbi5jLTQ2MDItXFx0XFx0bG9uZyBucl9wYWdlcyA9IGNoaWxkX2xydWdlbi1cXHUwMDNlbnJfcGFnZXNbZ2VuXVt0eXBlXVt6b25lXTtcXG5tbS92bXNjYW4uYzo0NjAzOlxcdFxcdGludCBjaGlsZF9scnVfYWN0aXZlID0gbHJ1X2dlbl9pc19hY3RpdmUoY2hpbGRfbHJ1dmVjLCBnZW4pID8gTFJVX0FDVElWRSA6IDA7XFxubW0vdm1zY2FuLmM6NDYwNDpcXHRcXHRpbnQgcGFyZW50X2xydV9hY3RpdmUgPSBscnVfZ2VuX2lzX2FjdGl2ZShwYXJlbnRfbHJ1dmVjLCBnZW4pID8gTFJVX0FDVElWRSA6IDA7XFxubW0vdm1zY2FuLmMtNDYwNS1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ2MTMtXFxubW0vdm1zY2FuLmM6NDYxNDpcXHRcXHRpZiAobHJ1X2dlbl9pc19hY3RpdmUoY2hpbGRfbHJ1dmVjLCBnZW4pICE9IGxydV9nZW5faXNfYWN0aXZlKHBhcmVudF9scnV2ZWMsIGdlbikpIHtcXG5tbS92bXNjYW4uYy00NjE1LVxcdFxcdFxcdF9fdXBkYXRlX2xydV9zaXplKGNoaWxkX2xydXZlYywgbHJ1ICsgY2hpbGRfbHJ1X2FjdGl2ZSwgem9uZSwgLW5yX3BhZ2VzKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ2MjAtXFxubW0vdm1zY2FuLmM6NDYyMTp2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxcbm1tL3Ztc2Nhbi5jLTQ2MjIte1xcbi0tXFxubW0vdm1zY2FuLmMtNDYzMi1cXHRcXHRmb3IgKHR5cGUgPSAwOyB0eXBlIFxcdTAwM2MgQU5PTl9BTkRfRklMRTsgdHlwZSsrKVxcbm1tL3Ztc2Nhbi5jOjQ2MzM6XFx0XFx0XFx0X19scnVfZ2VuX3JlcGFyZW50X21lbWNnKGNoaWxkX2xydXZlYywgcGFyZW50X2xydXZlYywgemlkLCB0eXBlKTtcXG5tbS92bXNjYW4uYy00NjM0LVxcbi0tXFxubW0vdm1zY2FuLmM9NDY1NT1zdGF0aWMgYm9vbCBzb3J0X2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuLS1cXG5tbS92bXNjYW4uYy00NjY0LVxcdGludCB0aWVyID0gbHJ1X3RpZXJfZnJvbV9yZWZzKHJlZnMsIHdvcmtpbmdzZXQpO1xcbm1tL3Ztc2Nhbi5jOjQ2NjU6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYy00NjY2LVxcbi0tXFxubW0vdm1zY2FuLmMtNDY3My1cXHQvKiBwcm9tb3RlZCAqL1xcbm1tL3Ztc2Nhbi5jOjQ2NzQ6XFx0aWYgKGdlbiAhPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cXHUwMDNlbWluX3NlcVt0eXBlXSkpIHtcXG5tbS92bXNjYW4uYy00Njc1LVxcdFxcdGxpc3RfbW92ZShcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSwgXFx1MDAyNmxydWdlbi1cXHUwMDNlZm9saW9zW2dlbl1bdHlwZV1bem9uZV0pO1xcbi0tXFxubW0vdm1zY2FuLmM9NDcwND1zdGF0aWMgYm9vbCBpc29sYXRlX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy00NzIxLVxcbm1tL3Ztc2Nhbi5jOjQ3MjI6XFx0c3VjY2VzcyA9IGxydV9nZW5fZGVsX2ZvbGlvKGxydXZlYywgZm9saW8sIHRydWUpO1xcbm1tL3Ztc2Nhbi5jLTQ3MjMtXFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFzdWNjZXNzLCBmb2xpbyk7XFxuLS1cXG5tbS92bXNjYW4uYz00NzI4PXN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS92bXNjYW4uYy00NzM5LVxcdHVuc2lnbmVkIGxvbmcgcmVtYWluaW5nID0gbnJfdG9fc2NhbjtcXG5tbS92bXNjYW4uYzo0NzQwOlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxubW0vdm1zY2FuLmMtNDc0MS1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ3NDctXFxubW0vdm1zY2FuLmM6NDc0ODpcXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cXHUwMDNlbWluX3NlcVt0eXBlXSk7XFxubW0vdm1zY2FuLmMtNDc0OS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ4Nzg9c3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS92bXNjYW4uYy00ODg2LVxcdHN0cnVjdCByZWNsYWltX3N0YXQgc3RhdDtcXG5tbS92bXNjYW4uYzo0ODg3OlxcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7XFxubW0vdm1zY2FuLmMtNDg4OC1cXHRpbnQgc2Nhbm5lZCwgcmVjbGFpbWVkO1xcbi0tXFxubW0vdm1zY2FuLmMtNDkzNy1cXHRcXHQvKiBkb24ndCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqL1xcbm1tL3Ztc2Nhbi5jOjQ5Mzg6XFx0XFx0aWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKSB7XFxubW0vdm1zY2FuLmMtNDkzOS1cXHRcXHRcXHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xcbi0tXFxubW0vdm1zY2FuLmM9NTEwMj1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxMDktXFxubW0vdm1zY2FuLmM6NTExMDpcXHQvKiBscnVfZ2VuX2FnZV9ub2RlKCkgY2FsbGVkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oKSAqL1xcbm1tL3Ztc2Nhbi5jLTUxMTEtXFx0aWYgKG1lbV9jZ3JvdXBfYmVsb3dfbWluKE5VTEwsIG1lbWNnKSlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUxNDM9c3RhdGljIHZvaWQgc2hyaW5rX21hbnkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01MTQ5LVxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcXG5tbS92bXNjYW4uYzo1MTUwOlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW47XFxubW0vdm1zY2FuLmMtNTE1MS1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuLS1cXG5tbS92bXNjYW4uYy01MTYzLVxcdFxcdGlmIChvcCkge1xcbm1tL3Ztc2Nhbi5jOjUxNjQ6XFx0XFx0XFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBvcCk7XFxubW0vdm1zY2FuLmMtNTE2NS1cXHRcXHRcXHRvcCA9IDA7XFxuLS1cXG5tbS92bXNjYW4uYy01MTc3LVxcdFxcdGlmICghbWVtX2Nncm91cF90cnlnZXQobWVtY2cpKSB7XFxubW0vdm1zY2FuLmM6NTE3ODpcXHRcXHRcXHRscnVfZ2VuX3JlbGVhc2VfbWVtY2cobWVtY2cpO1xcbm1tL3Ztc2Nhbi5jLTUxNzktXFx0XFx0XFx0bWVtY2cgPSBOVUxMO1xcbi0tXFxubW0vdm1zY2FuLmMtNTE5NS1cXHRpZiAob3ApXFxubW0vdm1zY2FuLmM6NTE5NjpcXHRcXHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIG9wKTtcXG5tbS92bXNjYW4uYy01MTk3LVxcbi0tXFxubW0vdm1zY2FuLmMtNTIwMi1cXG5tbS92bXNjYW4uYzo1MjAzOlxcdC8qIHJlc3RhcnQgaWYgcmFjZWQgd2l0aCBscnVfZ2VuX3JvdGF0ZV9tZW1jZygpICovXFxubW0vdm1zY2FuLmMtNTIwNC1cXHRpZiAoZ2VuICE9IGdldF9udWxsc192YWx1ZShwb3MpKVxcbi0tXFxubW0vdm1zY2FuLmMtNTIxMi1cXG5tbS92bXNjYW4uYzo1MjEzOnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTUyMTQte1xcbi0tXFxubW0vdm1zY2FuLmMtNTIyNi1cXHRpZiAodHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYykpXFxubW0vdm1zY2FuLmM6NTIyNzpcXHRcXHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIE1FTUNHX0xSVV9ZT1VORyk7XFxubW0vdm1zY2FuLmMtNTIyOC1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTUyMzMtXFxubW0vdm1zY2FuLmM6NTIzNDpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTUyMzUte1xcbi0tXFxubW0vdm1zY2FuLmM9NTI4MD1zdGF0aWMgYm9vbCBfX21heWJlX3VudXNlZCBzdGF0ZV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxubW0vdm1zY2FuLmMtNTI4MS17XFxubW0vdm1zY2FuLmM6NTI4MjpcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbm1tL3Ztc2Nhbi5jLTUyODMtXFxuLS1cXG5tbS92bXNjYW4uYz01MzAzPXN0YXRpYyBib29sIGZpbGxfZXZpY3RhYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUzMTctXFx0XFx0XFx0LypcXG5tbS92bXNjYW4uYzo1MzE4OlxcdFxcdFxcdCAqIGxydV9nZW5fYWRkX2ZvbGlvKCkgdXNlcyBsaXN0X2FkZF90YWlsKCkgcmF0aGVyXFxubW0vdm1zY2FuLmMtNTMxOS1cXHRcXHRcXHQgKiB0aGFuIGxpc3RfYWRkKCkgd2hlbiByZWNsYWltaW5nIGlzIHRydWUuICBNYXRjaFxcbi0tXFxubW0vdm1zY2FuLmMtNTMzNi1cXHRcXHRcXHQgKi9cXG5tbS92bXNjYW4uYzo1MzM3OlxcdFxcdFxcdHN1Y2Nlc3MgPSBscnVfZ2VuX2FkZF9mb2xpbyhscnV2ZWMsIGZvbGlvLCAhYWN0aXZlKTtcXG5tbS92bXNjYW4uYy01MzM4LVxcdFxcdFxcdFZNX1dBUk5fT05fT05DRSghc3VjY2Vzcyk7XFxuLS1cXG5tbS92bXNjYW4uYz01MzQ4PXN0YXRpYyBib29sIGRyYWluX2V2aWN0YWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuLS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDE6MTQuNDEwMDUzODEyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY1MDg5OTc0MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gTXVsdGktR2VuIExSVSBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgaGVyZSdzIHdoYXQgSSd2ZSBnb3Qgc28gZmFyLiBJIG5lZWQgdG8gaWRlbnRpZnkga2V5IGtlcm5lbCBmdW5jdGlvbnMgZm9yIGZ1enppbmcgcmVsYXRlZCB0byB0aGlzIE11bHRpLUdlbiBMUlUgd29yaywgYW5kIGFsc28gZmlndXJlIG91dCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLiBJJ20gYXZvaWRpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8ga2VlcCB0aGUgdGVzdGluZyBmb2N1c2VkLiBCYXNlZCBvbiB0aGUgcmVxdWlyZW1lbnRzLCBJJ20gZm9jdXNpbmcgb24gbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLlxuXG5GaXJzdCwgbGV0J3MgbG9vayBhdCB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIHJlbGV2YW50IGFuZCBtZWV0IHRob3NlIGNyaXRlcmlhLiBJIGlkZW50aWZpZWQgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgd2hpY2ggYXJlIGxpa2VseSBlbnRyeXBvaW50cyB0byB0aGUgbXVsdGktZ2VuIExSVSBmdW5jdGlvbmFsaXR5OlxuXG4qICAgYGxydV9nZW5fbG9va19hcm91bmRgIChpbiBgbW0vdm1zY2FuLmNgKSAtIExvb2tzIHByb21pc2luZy5cbiogICBgZm9saW9fbWlncmF0ZV9mbGFnc2AgKGluIGBtbS9taWdyYXRlLmNgKSAtIFNlZW1zIHJlbGV2YW50IHRvIHBhZ2UgbWlncmF0aW9uLlxuKiAgIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgKGluIGBtbS9tZW1jb250cm9sLmNgKSAtIFRoaXMgbG9va3MgaW1wb3J0YW50IGZvciBtZW1vcnkgY2dyb3VwIGludGVncmF0aW9uLlxuKiAgIGBscnVfZ2VuX3JlcGFyZW50X21lbWNnYCAoaW4gYG1tL3Ztc2Nhbi5jYCkgLSBMaWtlbHkgcmVsZXZhbnQgdG8gbWVtY2cgb3BlcmF0aW9ucy5cbiogICBgbHJ1X2dlbl9zb2Z0X3JlY2xhaW1gIChpbiBgbW0vdm1zY2FuLmNgKSAtIFRoaXMgaXMgcHJvYmFibHkgYSBnb29kIGVudHJ5cG9pbnQuXG5cbk5vdywgcmVnYXJkaW5nIGNvbmZpZ3VyYXRpb25zLCBpdCBzZWVtcyBjbGVhciB0aGF0IGBDT05GSUdfTFJVX0dFTmAgaXMgZXNzZW50aWFsLCBhcyBpcyBgQ09ORklHX0xSVV9HRU5fRU5BQkxFRGAgYmVjYXVzZSBpdCdzIGVuYWJsZWQgYnkgZGVmYXVsdC4gR2l2ZW4gdGhlIGZ1bmN0aW9ucyBJJ3ZlIGlkZW50aWZpZWQsIGBDT05GSUdfTUVNQ0dgIGlzIHJlcXVpcmVkIGZvciB0aGUgbWVtb3J5IGNncm91cCBhc3BlY3QgYW5kIGFsc28gYENPTkZJR19NSUdSQVRJT05gIGlzIG5lZWRlZCBmb3IgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgIGFuZCByZWxhdGVkIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcgdGhhdCB0aGVzZSBkZXBlbmQgb24uXG5cbkxvb2tpbmcgYXQgdGhlIEtjb25maWcgZmlsZXMsIEkgc2VlIHRoYXQ6XG5cbiogICBgTFJVX0dFTmAgZGVwZW5kcyBvbiBgTU1VYCwgYW5kIGFsc28gYDY0QklUIHx8ICFTUEFSU0VNRU0gfHwgU1BBUlNFTUVNX1ZNRU1NQVBgIChJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhvc2UgZm9yIGJ1aWxkaW5nIGNvbmZpZ3VyYXRpb25zKS5cbiogICBgTFJVX0dFTl9FTkFCTEVEYCBkZXBlbmRzIG9uIGBMUlVfR0VOYC5cbiogICBgTUVNQ0dgIGRlcGVuZHMgb24gYENHUk9VUFNgLlxuKiAgIEFuZCBmaW5hbGx5LCBgTlVNQV9NSUdSQVRJT05gIG9yIGBNSUdSQVRJT05gIGlzIG5lZWRlZC4gYENPTVBBQ1RJT05gIGlzIGdlbmVyYWxseSBzZWxlY3RlZC5cblxuU28sIEkgd2lsbCBhZGQgdGhlc2UgZnVuY3Rpb25zIGludG8gdGhlIGBGb2N1c1N5bWJvbHNgIGFycmF5OlxuXG4qICAgYGxydV9nZW5fbG9va19hcm91bmRgXG4qICAgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgXG4qICAgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYFxuKiAgIGBscnVfZ2VuX3JlcGFyZW50X21lbWNnYFxuKiAgIGBscnVfZ2VuX3NvZnRfcmVjbGFpbWBcblxuQW5kIHRoZXNlIGNvbmZpZ3VyYXRpb25zIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AgYXJyYXk6XG5cbiogICBMUlVfR0VOXG4qICAgTFJVX0dFTl9FTkFCTEVEXG4qICAgTUVNQ0dcbiogICBNSUdSQVRJT05cblxuXG4iLCJJbnB1dFRva2VucyI6MjgyNzYsIk91dHB1dFRva2VucyI6MTcwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQxOjIwLjkxOTA1NDQ4NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzExNjQ1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUlHUkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibHJ1X2dlbl9sb29rX2Fyb3VuZFwiLFxuICAgIFwiZm9saW9fbWlncmF0ZV9mbGFnc1wiLFxuICAgIFwibWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVcIixcbiAgICBcImxydV9nZW5fcmVwYXJlbnRfbWVtY2dcIixcbiAgICBcImxydV9nZW5fc29mdF9yZWNsYWltXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBNdWx0aS1HZW4gTFJVIChNR0xSVSksIHBhZ2UgcmVmZXJlbmNlIGNvdW50aW5nLCBmb2xpbyBmbGFncyBtYW5hZ2VtZW50LCBmb2xpbyBtaWdyYXRpb24sIGFuZCBtZW1jZyBMUlUgc2l6ZSBhY2NvdW50aW5nLiBUaGVzZSBmdW5jdGlvbmFsIGNoYW5nZXMgYWZmZWN0IHBhZ2UgcmVjbGFtYXRpb24sIGFnaW5nLCBhbmQgbWlncmF0aW9uIGJlaGF2aW9yIGluIHJlYWNoYWJsZSBjb3JlIG1tIGNvZGUgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUlHUkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibHJ1X2dlbl9sb29rX2Fyb3VuZFwiLFxuICAgIFwiZm9saW9fbWlncmF0ZV9mbGFnc1wiLFxuICAgIFwibWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVcIixcbiAgICBcImxydV9nZW5fcmVwYXJlbnRfbWVtY2dcIixcbiAgICBcImxydV9nZW5fc29mdF9yZWNsYWltXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBNdWx0aS1HZW4gTFJVIChNR0xSVSksIHBhZ2UgcmVmZXJlbmNlIGNvdW50aW5nLCBmb2xpbyBmbGFncyBtYW5hZ2VtZW50LCBmb2xpbyBtaWdyYXRpb24sIGFuZCBtZW1jZyBMUlUgc2l6ZSBhY2NvdW50aW5nLiBUaGVzZSBmdW5jdGlvbmFsIGNoYW5nZXMgYWZmZWN0IHBhZ2UgcmVjbGFtYXRpb24sIGFnaW5nLCBhbmQgbWlncmF0aW9uIGJlaGF2aW9yIGluIHJlYWNoYWJsZSBjb3JlIG1tIGNvZGUgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQxOjIxLjA0MjE5NjY1NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1MzEzNjg2MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0MToyMS4wNDI4NTc4MjZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMjUzMDcwMTg4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyBNdWx0aS1HZW4gTFJVIChNR0xSVSkgZm9saW8gZmxhZyBvcGVyYXRpb25zIChpbnRyb2R1Y2luZyBoZWxwZXJzIGxpa2UgbHJ1X3NldF9nZW5fZmxhZ3MsIGxydV9zZXRfcmVmc19mbGFncywgZm9saW9fc2V0X2xydV9yZWZzKSwgdXBkYXRlcyBmb2xpbyByZWZlcmVuY2UvZ2VuZXJhdGlvbiB0cmFja2luZyBhY3Jvc3MgcmVjbGFpbSBhbmQgbWlncmF0aW9uIHBhdGhzLCBhbmQgY2hhbmdlcyBtZW1jZyBscnVfem9uZV9zaXplIHRyYWNraW5nIGZyb20gdW5zaWduZWQgbG9uZyB0byBzaWduZWQgbG9uZyB3aXRoIGJvdW5kcyBjaGVja2luZy5cXG5cXG5ObyBrZXJuZWwtdG8tdXNlciBkYXRhIGNvcGllcywgaW9jdGxzLCBvciB1c2VyLWZhY2luZyBzdHJ1Y3RzIGFyZSBtb2RpZmllZC4gU3RhY2sgdmFyaWFibGVzIGludHJvZHVjZWQgKGUuZy4sIGB0eXBlYCBpbiBgd2Fsa191cGRhdGVfZm9saW9gKSBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHJlYWQgKGFzIGB0eXBlYCBpcyBvbmx5IHBhc3NlZCB0byBgdXBkYXRlX2JhdGNoX3NpemVgIHdoZW4gYG9sZF9nZW4gXFx1MDAzZT0gMGAsIHdoaWNoIGd1YXJhbnRlZXMgYXNzaWdubWVudCBpbiBgZm9saW9fdXBkYXRlX2dlbmApLiBObyB1bmluaXRpYWxpemVkIGhlYXAsIHN0YWNrLCBvciBwYWdlIGFsbG9jYXRpb25zIGFyZSBleHBvc2VkLiBQb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgaW4gdGhlc2UgTU0gcGF0aHMgKHN1Y2ggYXMgY29uY3VycmVuY3kgaXNzdWVzIG9yIGludmFsaWQgZm9saW8gZGVyZWZlcmVuY2VzKSBmYWxsIHVuZGVyIEtBU0FOL0xPQ0tERVAgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgZGV0ZWN0b3JzLiBUaHVzLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRkNzBkMWNiNzU3MTM0MjI4NmY0NmMzYjVhODhkNDllZjY0OWFkYjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDA0OjQwOjQ4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuaW5kZXggN2QxYzBjZTE4OWE4OC4uODY3ODBlZjY1ZWFmYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuQEAgLTExMyw3ICsxMTMsNyBAQCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSB7XG4gXHQvKiBGaWVsZHMgd2hpY2ggZ2V0IHVwZGF0ZWQgb2Z0ZW4gYXQgdGhlIGVuZC4gKi9cbiBcdHN0cnVjdCBscnV2ZWNcdFx0bHJ1dmVjO1xuIFx0Q0FDSEVMSU5FX1BBRERJTkcoX3BhZDJfKTtcbi1cdHVuc2lnbmVkIGxvbmdcdFx0bHJ1X3pvbmVfc2l6ZVtNQVhfTlJfWk9ORVNdW05SX0xSVV9MSVNUU107XG4rXHRsb25nXHRcdFx0bHJ1X3pvbmVfc2l6ZVtNQVhfTlJfWk9ORVNdW05SX0xSVV9MSVNUU107XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9yZWNsYWltX2l0ZXJcdGl0ZXI7XG4gXG4gXHQvKlxuQEAgLTkwMiwxMCArOTAyLDE1IEBAIHN0YXRpYyBpbmxpbmVcbiB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRlbnVtIGxydV9saXN0IGxydSwgaW50IHpvbmVfaWR4KVxuIHtcbitcdGxvbmcgdmFsO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16O1xuIFxuIFx0bXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcbi1cdHJldHVybiBSRUFEX09OQ0UobXotXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7XG4rXHR2YWwgPSBSRUFEX09OQ0UobXotXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7XG4rXHRpZiAoV0FSTl9PTl9PTkNFKHZhbCBcdTAwM2MgMCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHZhbDtcbiB9XG4gXG4gdm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzayk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaCBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcbmluZGV4IDYyMWM4NjUzZDhmN2UuLmFiNjliOTkzMDg5M2YgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG5AQCAtMzAsNiArMzAsMTcgQEAgc3RhdGljIGlubGluZSBpbnQgZm9saW9faXNfZmlsZV9scnUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHJldHVybiAhZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKTtcbiB9XG4gXG4rLyoqXG4rICogZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUgLSBTaG91bGQgdGhlIGZvbGlvIGJlIG9uIGEgZmlsZSBMUlUgb3IgYW5vbiBMUlU/XG4rICogQGZsYWdzOiBUaGUgZm9saW8ncyBmbGFncy5cbisgKlxuKyAqIEp1c3QgbGlrZSBmb2xpb19pc19maWxlX2xydSBidXQgdGFrZSB0aGUgZm9saW8gZmxhZ3MgZGlyZWN0bHkgaW5zdGVhZC5cbisgKi9cbitzdGF0aWMgaW5saW5lIGludCBmb2xpb19mbGFnc19pc19maWxlX2xydShjb25zdCB1bnNpZ25lZCBsb25nICpmbGFncylcbit7XG4rXHRyZXR1cm4gIXRlc3RfYml0KFBHX3N3YXBiYWNrZWQsIGZsYWdzKTtcbit9XG4rXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0XHRcdGVudW0gbHJ1X2xpc3QgbHJ1LCBlbnVtIHpvbmVfdHlwZSB6aWQsXG4gXHRcdFx0XHRsb25nIG5yX3BhZ2VzKVxuQEAgLTE0MiwxMCArMTUzLDY2IEBAIHN0YXRpYyBpbmxpbmUgaW50IGxydV90aWVyX2Zyb21fcmVmcyhpbnQgcmVmcywgYm9vbCB3b3JraW5nc2V0KVxuIFx0cmV0dXJuIHdvcmtpbmdzZXQgPyBNQVhfTlJfVElFUlMgLSAxIDogb3JkZXJfYmFzZV8yKHJlZnMpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuKy8qKlxuKyAqIGxydV9zZXRfZ2VuX2ZsYWdzIC0gU2V0IHRoZSBMUlUgZ2VuZXJhdGlvbiBudW1iZXIgdG8gc3BlY2lmaWVkIGZvbGlvIGZsYWdzLlxuKyAqIEBmbGFnczogcG9pbnRlciB0byB0aGUgZm9saW8gZmxhZ3NcbisgKiBAZ2VuOiBnZW5lcmF0aW9uIG51bWJlciwgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfc2V0X2dlbl9mbGFncyh1bnNpZ25lZCBsb25nICpmbGFncywgaW50IGdlbilcbit7XG4rXHRCVUlMRF9CVUdfT04oTFJVX0dFTl9NQVNLIFx1MDAyNiBMUlVfUkVGU19NQVNLKTtcbitcdFZNX1dBUk5fT05fT05DRShnZW4gXHUwMDNlPSBNQVhfTlJfR0VOUyB8fCBnZW4gXHUwMDNjIDApO1xuK1x0LyogU3RvcmUgZ2VuIG9mZnNldCBieSAxLCB6ZXJvIG1lYW5zIHRoZSBmb2xpbyBpcyBvZmYtbGlzdC4gKi9cbitcdCpmbGFncyBcdTAwMjY9IH5MUlVfR0VOX01BU0s7XG4rXHQqZmxhZ3MgfD0gKGdlbiArIDFVTCkgXHUwMDNjXHUwMDNjIExSVV9HRU5fUEdPRkY7XG4rfVxuK1xuKy8qKlxuKyAqIGxydV9nZXRfZ2VuX2ZsYWdzIC0gUmV0dXJuIHRoZSBMUlUgZ2VuZXJhdGlvbiBudW1iZXIgZnJvbSBmb2xpbyBmbGFncy5cbisgKiBAZmxhZ3M6IGZvbGlvIGZsYWdzXG4rICpcbisgKiBSZXR1cm5zOiBBIG51bWJlciBiZXR3ZWVuIDAgYW5kIChNQVhfTlJfR0VOUyAtIDEpLCBpbmNsdXNpdmUuIFJldHVybnNcbisgKiAtMSBpZiB0aGUgZmxhZ3MgaW5kaWNhdGUgdGhlIGZvbGlvIGlzIG9mZiB0aGUgbGlzdCAoZS5nLiwgaXNvbGF0ZWQpLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgaW50IGxydV9nZXRfZ2VuX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4re1xuK1x0aW50IGdlbiA9ICgoZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbitcbitcdC8qIEV4Y2x1ZGUgdGhlIGxlZ2FsIC0xIGZyb20gdGhlIHVuc2lnbmVkIE1BWF9OUl9HRU5TIGNvbXBhcmlzb24gKi9cbitcdFZNX1dBUk5fT05fT05DRShnZW4gIT0gLTEgXHUwMDI2XHUwMDI2IGdlbiBcdTAwM2U9IE1BWF9OUl9HRU5TKTtcbitcdHJldHVybiBnZW47XG4rfVxuK1xuKy8qKlxuKyAqIGxydV9zZXRfcmVmc19mbGFncyAtIFNldCB0aGUgTFJVIHJlZmVyZW5jZWQgY291bnQgdG8gZm9saW8gZmxhZ3MuXG4rICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFnc1xuKyAqIEByZWZzOiByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IG51bWJlciwgYmV0d2VlbiAwIGFuZCBMUlVfUkVGU19NQVgsIGluY2x1c2l2ZS5cbisgKlxuKyAqIEZvciBNR0xSVSwgUEdfcmVmZXJlbmNlZCBob2xkcyB0aGUgZmlyc3QgcmVmLCBhbmQgdGhlIGV4dHJhIGJpdHMgaG9sZCB0aGVcbisgKiByZW1haW5pbmcgcmVmcy4gRm9yIGNsYXNzaWNhbCBMUlUgdGhlIGV4dHJhIGJpdHMgYXJlIG5vdCB1c2VkLCBzbyBpdCBjYW5cbisgKiBhbHNvIGJlIHNlZW4gYXMgdGhlIHJlZnMgY291bnQgbmV2ZXIgZXhjZWVkcyAxLiBJbiBib3RoIGNhc2VzLCByZWZzID09IDFcbisgKiBtZWFucyBQR19yZWZlcmVuY2VkIGlzIHNldCBhbmQgdGhlIGV4dHJhIGJpdHMgYXJlIHplcm8sIGFuZCByZWZzID09IDAgbWVhbnNcbisgKiBQR19yZWZlcmVuY2VkIGFuZCB0aGUgZXh0cmEgYml0cyBhcmUgYWxsIHVuc2V0LlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfc2V0X3JlZnNfZmxhZ3ModW5zaWduZWQgbG9uZyAqZmxhZ3MsIHVuc2lnbmVkIGludCByZWZzKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4rXHRWTV9XQVJOX09OX09OQ0UocmVmcyBcdTAwM2UgTFJVX1JFRlNfTUFYKTtcbitcdEJVSUxEX0JVR19PTihMUlVfUkVGU19NQVggIT0gKExSVV9SRUZTX01BU0sgXHUwMDNlXHUwMDNlIExSVV9SRUZTX1BHT0ZGKSArIDEpO1xuIFxuK1x0KmZsYWdzIFx1MDAyNj0gfkxSVV9SRUZTX0ZMQUdTO1xuK1x0aWYgKCFyZWZzKVxuK1x0XHRyZXR1cm47XG4rXHQqZmxhZ3MgfD0gKEJJVChQR19yZWZlcmVuY2VkKSB8ICgocmVmcyAtIDFVTCkgXHUwMDNjXHUwMDNjIExSVV9SRUZTX1BHT0ZGKSk7XG4rfVxuK1xuKy8qKlxuKyAqIGxydV9nZXRfcmVmc19mbGFncyAtIFJldHVybiBMUlUgcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCBmcm9tIGZvbGlvIGZsYWdzLlxuKyAqIEBmbGFnczogZm9saW8gZmxhZ3NcbisgKlxuKyAqIFJlYWRzIHRoZSBMUlUgcmVmZXJlbmNlZCBjb3VudCBzZXQgYnkgbHJ1X3NldF9yZWZzX2ZsYWdzKCkuXG4rICovXG4rc3RhdGljIGlubGluZSBpbnQgbHJ1X2dldF9yZWZzX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4re1xuIFx0aWYgKCEoZmxhZ3MgXHUwMDI2IEJJVChQR19yZWZlcmVuY2VkKSkpXG4gXHRcdHJldHVybiAwO1xuIFx0LypcbkBAIC0xNTUsMTEgKzIyMiwyNCBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cmV0dXJuICgoZmxhZ3MgXHUwMDI2IExSVV9SRUZTX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfUkVGU19QR09GRikgKyAxO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfZ2VuKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuK1x0cmV0dXJuIGxydV9nZXRfcmVmc19mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpO1xuK31cbiBcbi1cdHJldHVybiAoKGZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgcmVmcylcbit7XG4rXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuK1xuK1x0ZG8ge1xuK1x0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XG4rXHRcdGxydV9zZXRfcmVmc19mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIHJlZnMpO1xuK1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X2dlbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHJldHVybiBscnVfZ2V0X2dlbl9mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9pc19hY3RpdmUoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgZ2VuKVxuQEAgLTI3MCw3ICszNTAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9hZGRfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpO1xuIFx0ZmxhZ3MgPSAoZ2VuICsgMVVMKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRjtcbiBcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBNSU5fTlJfR0VOUyBhYm91dCBQR19hY3RpdmUgKi9cbi1cdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX0dFTl9NQVNLIHwgQklUKFBHX2FjdGl2ZSksIGZsYWdzKTtcbitcdHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpO1xuIFxuIFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCAtMSwgZ2VuKTtcbiBcdC8qIGZvciBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoKSAqL1xuQEAgLTI5NSw3ICszNzUsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFxuIFx0LyogZm9yIGZvbGlvX21pZ3JhdGVfZmxhZ3MoKSAqL1xuIFx0ZmxhZ3MgPSAhcmVjbGFpbWluZyBcdTAwMjZcdTAwMjYgbHJ1X2dlbl9pc19hY3RpdmUobHJ1dmVjLCBnZW4pID8gQklUKFBHX2FjdGl2ZSkgOiAwO1xuLVx0ZmxhZ3MgPSBzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9HRU5fTUFTSywgZmxhZ3MpO1xuK1x0ZmxhZ3MgPSBzZXRfbWFza19iaXRzKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgTFJVX0dFTl9NQVNLLCBmbGFncyk7XG4gXHRnZW4gPSAoKGZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4gXG4gXHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIGdlbiwgLTEpO1xuQEAgLTMwNCwxMSArMzg0LDE5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXG4rLyoqXG4rICogZm9saW9fbWlncmF0ZV9scnVfcmVmcyAtIGNvcHkgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBhIG5ldyBmb2xpb1xuKyAqIEBuZXc6IHRoZSBkZXN0aW5hdGlvbiBmb2xpb1xuKyAqIEBvbGQ6IHRoZSBzb3VyY2UgZm9saW9cbisgKlxuKyAqIFRyYW5zZmVyIHRoZSByZWZlcmVuY2Ugc3RhdGUgdG8gQG5ldyBkdXJpbmcgbWlncmF0aW9uOiB0aGUgTUdMUlVcbisgKiByZWZzIGNvdW50LCBpbmNsdWRpbmcgUEdfcmVmZXJlbmNlZCwgb3IganVzdCBQR19yZWZlcmVuY2VkIGZvciB0aGVcbisgKiBhY3RpdmUvaW5hY3RpdmUgTFJVLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcbiB7XG4tXHR1bnNpZ25lZCBsb25nIHJlZnMgPSBSRUFEX09OQ0Uob2xkLVx1MDAzZWZsYWdzLmYpIFx1MDAyNiBMUlVfUkVGU19NQVNLO1xuLVxuLVx0c2V0X21hc2tfYml0cyhcdTAwMjZuZXctXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgcmVmcyk7XG4rXHRCVUlMRF9CVUdfT04oTFJVX1JFRlNfTUFTSyBcdTAwMjYgQklUKFBHX3JlZmVyZW5jZWQpKTtcbitcdGZvbGlvX3NldF9scnVfcmVmcyhuZXcsIGZvbGlvX2xydV9yZWZzKG9sZCkpO1xuIH1cbiAjZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cbiBcbkBAIC0zMzcsOSArNDI1LDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcbiB7XG4tXG4rXHRpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKG9sZCkpXG4rXHRcdGZvbGlvX3NldF9yZWZlcmVuY2VkKG5ldyk7XG4gfVxuICNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5pbmRleCA5NGY5YzNmZjU0MTYwLi45YjI3Y2Y1M2JkYmM3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuQEAgLTQ5MiwxMSArNDkyLDE0IEBAIGVudW0gbHJ1dmVjX2ZsYWdzIHtcbiAgKiBmb2xpby1cdTAwM2VmbGFncywgbWFza2VkIGJ5IExSVV9SRUZTX01BU0suXG4gICovXG4gI2RlZmluZSBNQVhfTlJfVElFUlNcdFx0NFVcbisjZGVmaW5lIExSVV9USUVSX01JTlx0XHQwVVxuKyNkZWZpbmUgTFJVX1RJRVJfTUFYXHRcdChNQVhfTlJfVElFUlMgLSAxKVxuIFxuICNpZm5kZWYgX19HRU5FUkFUSU5HX0JPVU5EU19IXG4gXG4gI2RlZmluZSBMUlVfR0VOX01BU0tcdFx0KChCSVQoTFJVX0dFTl9XSURUSCkgLSAxKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRilcbiAjZGVmaW5lIExSVV9SRUZTX01BU0tcdFx0KChCSVQoTFJVX1JFRlNfV0lEVEgpIC0gMSkgXHUwMDNjXHUwMDNjIExSVV9SRUZTX1BHT0ZGKVxuKyNkZWZpbmUgTFJVX1JFRlNfTUFYXHRcdEJJVChMUlVfUkVGU19XSURUSClcbiBcbiAvKlxuICAqIEZvciBmb2xpb3MgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzLFxuZGlmZiAtLWdpdCBhL21tL2ZvbGlvLmMgYi9tbS9mb2xpby5jXG5pbmRleCBjMDJkY2VhOWMwM2MyLi5mYjg3NGZlNDkyYjJiIDEwMDY0NFxuLS0tIGEvbW0vZm9saW8uY1xuKysrIGIvbW0vZm9saW8uY1xuQEAgLTM1MywyNiArMzUzLDI4IEBAIHN0YXRpYyB2b2lkIF9fbHJ1X2NhY2hlX2FjdGl2YXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXG4gc3RhdGljIHZvaWQgbHJ1X2dlbl9pbmNfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4rXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuK1x0aW50IHJlZnM7XG4gXG4gXHRpZiAoZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbykpXG4gXHRcdHJldHVybjtcbiBcbiBcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqL1xuLVx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKSB7XG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcbitcdGlmICghZm9saW9fbHJ1X3JlZnMoZm9saW8pKSB7XG4rXHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbiBcdGRvIHtcbi1cdFx0aWYgKChvbGRfZmxhZ3MgXHUwMDI2IExSVV9SRUZTX01BU0spID09IExSVV9SRUZTX01BU0spIHtcbitcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuK1x0XHRyZWZzID0gbHJ1X2dldF9yZWZzX2ZsYWdzKG9sZF9mbGFncyk7XG4rXHRcdGlmIChyZWZzID09IExSVV9SRUZTX01BWCkge1xuIFx0XHRcdGlmICghZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSlcbiBcdFx0XHRcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcbiBcdFx0XHRyZXR1cm47XG4gXHRcdH1cbi1cbi1cdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzICsgQklUKExSVV9SRUZTX1BHT0ZGKTtcbi1cdH0gd2hpbGUgKCF0cnlfY21weGNoZyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuK1x0XHRscnVfc2V0X3JlZnNfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCByZWZzICsgMSk7XG4rXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbkBAIC0zODQsNyArMzg2LDggQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRpZiAoZ2VuIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MgfCBCSVQoUEdfd29ya2luZ3NldCksIDApO1xuK1x0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbitcdGZvbGlvX2NsZWFyX3dvcmtpbmdzZXQoZm9saW8pO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0c2VxID0gUkVBRF9PTkNFKGZvbGlvX2xydXZlYyhmb2xpbyktXHUwMDNlbHJ1Z2VuLm1pbl9zZXFbdHlwZV0pO1xuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggODU2YTdkMDc1ODZjYy4uMGE2NWFiOGRmMjdhOSAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuKysrIGIvbW0vbWVtY29udHJvbC5jXG5AQCAtMTUyOSwyOCArMTUyOSwxMiBAQCB2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXG4gXHRcdFx0XHRpbnQgemlkLCBsb25nIG5yX3BhZ2VzKVxuIHtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejtcbi1cdHVuc2lnbmVkIGxvbmcgKmxydV9zaXplO1xuLVx0bG9uZyBzaXplO1xuIFxuIFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0bXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcbi1cdGxydV9zaXplID0gXHUwMDI2bXotXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6aWRdW2xydV07XG4tXG4tXHRpZiAobnJfcGFnZXMgXHUwMDNjIDApXG4tXHRcdCpscnVfc2l6ZSArPSBucl9wYWdlcztcbi1cbi1cdHNpemUgPSAqbHJ1X3NpemU7XG4tXHRpZiAoV0FSTl9PTkNFKHNpemUgXHUwMDNjIDAsXG4tXHRcdFwiJXMoJXAsICVkLCAlbGQpOiBscnVfc2l6ZSAlbGRcXG5cIixcbi1cdFx0X19mdW5jX18sIGxydXZlYywgbHJ1LCBucl9wYWdlcywgc2l6ZSkpIHtcbi1cdFx0Vk1fQlVHX09OKDEpO1xuLVx0XHQqbHJ1X3NpemUgPSAwO1xuLVx0fVxuLVxuLVx0aWYgKG5yX3BhZ2VzIFx1MDAzZSAwKVxuLVx0XHQqbHJ1X3NpemUgKz0gbnJfcGFnZXM7XG4rXHRtei1cdTAwM2VscnVfem9uZV9zaXplW3ppZF1bbHJ1XSArPSBucl9wYWdlcztcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jXG5pbmRleCAxNWI0NTgzMmJjZmE3Li5hMzY5ZDBjOTVjMzg2IDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZS5jXG4rKysgYi9tbS9taWdyYXRlLmNcbkBAIC03NzYsOCArNzc2LDkgQEAgdm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0aW50IGNwdXBpZDtcbiBcbi1cdGlmIChmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKVxuLVx0XHRmb2xpb19zZXRfcmVmZXJlbmNlZChuZXdmb2xpbyk7XG4rXHQvKiBDb3B5IHRoZSByZWZlcmVuY2Ugc3RhdGUsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkICovXG4rXHRmb2xpb19taWdyYXRlX2xydV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7XG4rXG4gXHRpZiAoZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpXG4gXHRcdGZvbGlvX21hcmtfdXB0b2RhdGUobmV3Zm9saW8pO1xuIFx0aWYgKGZvbGlvX3Rlc3RfY2xlYXJfYWN0aXZlKGZvbGlvKSkge1xuQEAgLTgwNyw3ICs4MDgsNiBAQCB2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGlmIChmb2xpb190ZXN0X2lkbGUoZm9saW8pKVxuIFx0XHRmb2xpb19zZXRfaWRsZShuZXdmb2xpbyk7XG4gXG4tXHRmb2xpb19taWdyYXRlX3JlZnMobmV3Zm9saW8sIGZvbGlvKTtcbiBcdC8qXG4gXHQgKiBDb3B5IE5VTUEgaW5mb3JtYXRpb24gdG8gdGhlIG5ldyBwYWdlLCB0byBwcmV2ZW50IG92ZXItZWFnZXJcbiBcdCAqIGZ1dHVyZSBtaWdyYXRpb25zIG9mIHRoaXMgc2FtZSBwYWdlLlxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGZkZDEzMjk5YTA0YTkuLmU3ZDM3OWM2ZTcwM2EgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC04NDMsMTkgKzg0MywyMiBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4gXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKSB7XG4gXHRcdC8qIEFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLiAqL1xuIFx0XHRpZiAoaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7XG4tXHRcdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTtcbitcdFx0XHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XG4rXHRcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdFx0fVxuIFxuLVx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XG4rXHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbiBcdC8qIFByb21vdGUgb24gc2Vjb25kIGFjY2VzcyAqL1xuLVx0aWYgKGZvbGlvX2xydV9yZWZzKGZvbGlvKSBcdTAwM2UgMSlcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTtcbi1cdGVsc2VcbitcdGlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgXHUwMDNlIDEpIHtcbitcdFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xuK1x0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuK1x0fSBlbHNlIHtcbiBcdFx0Zm9saW9fbWFya19hY2Nlc3NlZChmb2xpbyk7XG4rXHR9XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gI2Vsc2VcbkBAIC0zMTk1LDggKzMxOTgsOCBAQCBzdHJ1Y3QgY3RybF9wb3Mge1xuIFx0aW50IGdhaW47XG4gfTtcbiBcbi1zdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2Fpbixcbi1cdFx0XHQgIHN0cnVjdCBjdHJsX3BvcyAqcG9zKVxuK3N0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXJfbWluLFxuK1x0XHRcdCAgaW50IHRpZXJfbWF4LCBpbnQgZ2Fpbiwgc3RydWN0IGN0cmxfcG9zICpwb3MpXG4ge1xuIFx0aW50IGk7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbkBAIC0zMjA1LDcgKzMyMDgsNyBAQCBzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2FpbixcbiBcdHBvcy1cdTAwM2VnYWluID0gZ2FpbjtcbiBcdHBvcy1cdTAwM2VyZWZhdWx0ZWQgPSBwb3MtXHUwMDNldG90YWwgPSAwO1xuIFxuLVx0Zm9yIChpID0gdGllciAlIE1BWF9OUl9USUVSUzsgaSBcdTAwM2M9IG1pbih0aWVyLCBNQVhfTlJfVElFUlMgLSAxKTsgaSsrKSB7XG4rXHRmb3IgKGkgPSB0aWVyX21pbjsgaSBcdTAwM2M9IHRpZXJfbWF4OyBpKyspIHtcbiBcdFx0cG9zLVx1MDAzZXJlZmF1bHRlZCArPSBscnVnZW4tXHUwMDNlYXZnX3JlZmF1bHRlZFt0eXBlXVtpXSArXG4gXHRcdFx0XHQgIGF0b21pY19sb25nX3JlYWQoXHUwMDI2bHJ1Z2VuLVx1MDAzZXJlZmF1bHRlZFtoaXN0XVt0eXBlXVtpXSk7XG4gXHRcdHBvcy1cdTAwM2V0b3RhbCArPSBscnVnZW4tXHUwMDNlYXZnX3RvdGFsW3R5cGVdW2ldICtcbkBAIC0zMjY2LDExICszMjY5LDExIEBAIHN0YXRpYyBib29sIHBvc2l0aXZlX2N0cmxfZXJyKHN0cnVjdCBjdHJsX3BvcyAqc3AsIHN0cnVjdCBjdHJsX3BvcyAqcHYpXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiBcbiAvKiBwcm9tb3RlIHBhZ2VzIGFjY2Vzc2VkIHRocm91Z2ggcGFnZSB0YWJsZXMgKi9cbi1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbitzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGludCAqdHlwZSxcbitcdFx0XHQgICAgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiB7XG4tXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuLVxuLVx0Vk1fV0FSTl9PTl9PTkNFKGdlbiBcdTAwM2U9IE1BWF9OUl9HRU5TKTtcbitcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4rXHRpbnQgb2xkX2dlbjtcbiBcbiBcdC8qXG4gXHQgKiBTZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MsIGFuZCBhY3RpdmF0ZSBmaWxlLWJhY2tlZFxuQEAgLTMyNzksMjAgKzMyODIsMjUgQEAgc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFcbiBcdCAqL1xuIFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7XG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcbitcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcbiBcdFx0cmV0dXJuIC0xO1xuIFx0fVxuIFxuIFx0ZG8ge1xuK1x0XHRvbGRfZ2VuID0gbHJ1X2dldF9nZW5fZmxhZ3Mob2xkX2ZsYWdzKTtcbitcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuK1xuIFx0XHQvKiBscnVfZ2VuX2RlbF9mb2xpbygpIGhhcyBpc29sYXRlZCB0aGlzIHBhZ2U/ICovXG4tXHRcdGlmICghKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSlcbi1cdFx0XHRyZXR1cm4gLTE7XG4rXHRcdGlmIChvbGRfZ2VuIFx1MDAzYyAwKVxuK1x0XHRcdGJyZWFrO1xuIFxuLVx0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgXHUwMDI2IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpO1xuLVx0XHRuZXdfZmxhZ3MgfD0gKChnZW4gKyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGKSB8IEJJVChQR193b3JraW5nc2V0KTtcbi1cdH0gd2hpbGUgKCF0cnlfY21weGNoZyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuK1x0XHRscnVfc2V0X2dlbl9mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIG5ld19nZW4pO1xuK1x0XHRscnVfc2V0X3JlZnNfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCAwKTtcbitcdFx0bmV3X2ZsYWdzIHw9IEJJVChQR193b3JraW5nc2V0KTtcbitcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4gXG4tXHRyZXR1cm4gKChvbGRfZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbitcdCp0eXBlID0gZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUoXHUwMDI2b2xkX2ZsYWdzKTtcbitcdHJldHVybiBvbGRfZ2VuO1xuIH1cbiBcbiAvKiBwcm90ZWN0IHBhZ2VzIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycyAqL1xuQEAgLTMzMDEsMjEgKzMzMDksMjAgQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xuIFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG4gXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuLVx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbi1cbi1cdFZNX1dBUk5fT05fT05DRV9GT0xJTyghKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSwgZm9saW8pO1xuK1x0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbiBcbiBcdGRvIHtcbi1cdFx0bmV3X2dlbiA9ICgob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4rXHRcdG5ld19nZW4gPSBscnVfZ2V0X2dlbl9mbGFncyhvbGRfZmxhZ3MpO1xuK1xuIFx0XHQvKiBmb2xpb191cGRhdGVfZ2VuKCkgaGFzIHByb21vdGVkIHRoaXMgcGFnZT8gKi9cbiBcdFx0aWYgKG5ld19nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBuZXdfZ2VuICE9IG9sZF9nZW4pXG4gXHRcdFx0cmV0dXJuIG5ld19nZW47XG4gXG4rXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncztcbiBcdFx0bmV3X2dlbiA9IChvbGRfZ2VuICsgMSkgJSBNQVhfTlJfR0VOUztcbi1cbi1cdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzIFx1MDAyNiB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTtcbi1cdFx0bmV3X2ZsYWdzIHw9IChuZXdfZ2VuICsgMVVMKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRjtcbi1cdH0gd2hpbGUgKCF0cnlfY21weGNoZyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuK1x0XHRscnVfc2V0X2dlbl9mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIG5ld19nZW4pO1xuK1x0XHRscnVfc2V0X3JlZnNfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCAwKTtcbitcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4gXG4gXHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xuIFxuQEAgLTMzMjMsOSArMzMzMCw4IEBAIHN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gfVxuIFxuIHN0YXRpYyB2b2lkIHVwZGF0ZV9iYXRjaF9zaXplKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tXHRcdFx0ICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuKVxuK1x0XHRcdCAgICAgIGludCBvbGRfZ2VuLCBpbnQgbmV3X2dlbiwgaW50IHR5cGUpXG4ge1xuLVx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG4gXHRpbnQgem9uZSA9IGZvbGlvX3pvbmVudW0oZm9saW8pO1xuIFx0aW50IGRlbHRhID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIFxuQEAgLTM1MTIsMjIgKzM1MTgsMjQgQEAgc3RhdGljIGJvb2wgc3VpdGFibGVfdG9fc2NhbihpbnQgdG90YWwsIGludCB5b3VuZylcbiB9XG4gXG4gc3RhdGljIHZvaWQgd2Fsa191cGRhdGVfZm9saW8oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBib29sIGRpcnR5KVxuK1x0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgZGlydHkpXG4ge1xuLVx0aW50IG9sZF9nZW47XG4rXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiwgdHlwZTtcbiBcbiBcdGlmICghZm9saW8pXG4gXHRcdHJldHVybjtcbiBcbitcdG5ld19nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKFJFQURfT05DRShscnV2ZWMtXHUwMDNlbHJ1Z2VuLm1heF9zZXEpKTtcbitcbiBcdGlmIChkaXJ0eSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIFx1MDAyNlx1MDAyNlxuIFx0ICAgICEoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAgICFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpKVxuIFx0XHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbiBcbiBcdGlmICh3YWxrKSB7XG4tXHRcdG9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpO1xuK1x0XHRvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgXHUwMDI2dHlwZSwgXHUwMDI2dm1hLVx1MDAzZWZsYWdzKTtcbiBcdFx0aWYgKG9sZF9nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXG4tXHRcdFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xuK1x0XHRcdHVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuLCB0eXBlKTtcbiBcdH0gZWxzZSBpZiAobHJ1X2dlbl9zZXRfcmVmcyhmb2xpbywgXHUwMDI2dm1hLVx1MDAzZWZsYWdzKSkge1xuIFx0XHRvbGRfZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7XG4gXHRcdGlmIChvbGRfZ2VuIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgb2xkX2dlbiAhPSBuZXdfZ2VuKVxuQEAgLTM1NDksOCArMzU1Nyw2IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXHUwMDNlcHJpdmF0ZTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVx1MDAzZWxydXZlYyk7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdERFRklORV9NQVhfU0VRKHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xuIFx0dW5zaWduZWQgaW50IG5yO1xuIFx0cG1kX3QgcG1kdmFsO1xuIFxuQEAgLTM2MDEsNyArMzYwNyw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAobGFzdCAhPSBmb2xpbykge1xuLVx0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLVx1MDAzZXZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC0zNjE0LDcgKzM2MjAsNyBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0d2Fsay1cdTAwM2VtbV9zdGF0c1tNTV9MRUFGX1lPVU5HXSArPSBucjtcbiBcdH1cbiBcbi1cdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCB3YWxrLVx1MDAzZWxydXZlYywgbGFzdCwgZGlydHkpO1xuIFx0bGFzdCA9IE5VTEw7XG4gXG4gXHRpZiAoaSBcdTAwM2MgUFRSU19QRVJfUFRFIFx1MDAyNlx1MDAyNiBnZXRfbmV4dF92bWEoUE1EX01BU0ssIFBBR0VfU0laRSwgYXJncywgXHUwMDI2c3RhcnQsIFx1MDAyNmVuZCkpXG5AQCAtMzYzNyw4ICszNjQzLDYgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcbiBcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVx1MDAzZXByaXZhdGU7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay1cdTAwM2VscnV2ZWMpO1xuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdCh3YWxrLVx1MDAzZWxydXZlYyk7XG4tXHRERUZJTkVfTUFYX1NFUSh3YWxrLVx1MDAzZWxydXZlYyk7XG4tXHRpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcbiBcbiBcdFZNX1dBUk5fT05fT05DRShwdWRfbGVhZigqcHVkKSk7XG4gXG5AQCAtMzY5Miw3ICszNjk2LDcgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcbiBcdFx0XHRnb3RvIG5leHQ7XG4gXG4gXHRcdGlmIChsYXN0ICE9IGZvbGlvKSB7XG4tXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIHdhbGstXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXG4gXHRcdFx0bGFzdCA9IGZvbGlvO1xuIFx0XHRcdGRpcnR5ID0gZmFsc2U7XG5AQCAtMzcwNiw3ICszNzEwLDcgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcbiBcdFx0aSA9IGkgXHUwMDNlIE1JTl9MUlVfQkFUQ0ggPyAwIDogZmluZF9uZXh0X2JpdChiaXRtYXAsIE1JTl9MUlVfQkFUQ0gsIGkpICsgMTtcbiBcdH0gd2hpbGUgKGkgXHUwMDNjPSBNSU5fTFJVX0JBVENIKTtcbiBcbi1cdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4rXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIHdhbGstXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXG4gXHRsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTtcbiBcdHNwaW5fdW5sb2NrKHB0bCk7XG5AQCAtNDI3MCw4ICs0Mjc0LDYgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGZvbGlvX3BnZGF0KGZvbGlvKTtcbiBcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcbiBcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZTtcbi1cdHVuc2lnbmVkIGxvbmcgbWF4X3NlcTtcbi1cdGludCBnZW47XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKHB2bXctXHUwMDNlcHRsKTtcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2xydShmb2xpbyksIGZvbGlvKTtcbkBAIC00MzA4LDggKzQzMTAsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG4gXG4gXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xuIFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcbi1cdG1heF9zZXEgPSBSRUFEX09OQ0UoKGxydXZlYyktXHUwMDNlbHJ1Z2VuLm1heF9zZXEpO1xuLVx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcbiBcdG1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XG4gXG4gXHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xuQEAgLTQzNDEsNyArNDM0MSw3IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKGxhc3QgIT0gZm9saW8pIHtcbi1cdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXG4gXHRcdFx0bGFzdCA9IGZvbGlvO1xuIFx0XHRcdGRpcnR5ID0gZmFsc2U7XG5AQCAtNDM1MywxMyArNDM1MywxNCBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG4gXHRcdHlvdW5nICs9IG5yO1xuIFx0fVxuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXG4gXHRsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTtcbiBcbiBcdC8qIGZlZWRiYWNrIGZyb20gcm1hcCB3YWxrZXJzIHRvIHBhZ2UgdGFibGUgd2Fsa2VycyAqL1xuIFx0aWYgKG1tX3N0YXRlIFx1MDAyNlx1MDAyNiBzdWl0YWJsZV90b19zY2FuKGksIHlvdW5nKSlcbi1cdFx0dXBkYXRlX2Jsb29tX2ZpbHRlcihtbV9zdGF0ZSwgbWF4X3NlcSwgcHZtdy1cdTAwM2VwbWQpO1xuK1x0XHR1cGRhdGVfYmxvb21fZmlsdGVyKG1tX3N0YXRlLCBSRUFEX09OQ0UobHJ1dmVjLVx1MDAzZWxydWdlbi5tYXhfc2VxKSxcbitcdFx0XHRcdCAgICBwdm13LVx1MDAzZXBtZCk7XG4gXG4gXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4gXG5AQCAtNDcxNiw3ICs0NzE3LDcgQEAgc3RhdGljIGJvb2wgaXNvbGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2FcbiBcbiBcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqL1xuIFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKVxuLVx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIDApO1xuK1x0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuIFxuIFx0c3VjY2VzcyA9IGxydV9nZW5fZGVsX2ZvbGlvKGxydXZlYywgZm9saW8sIHRydWUpO1xuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFzdWNjZXNzLCBmb2xpbyk7XG5AQCAtNDgwOSw5ICs0ODEwLDkgQEAgc3RhdGljIGludCBnZXRfdGllcl9pZHgoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSlcbiBcdCAqIFRoaXMgdmFsdWUgaXMgY2hvc2VuIGJlY2F1c2UgYW55IG90aGVyIHRpZXIgd291bGQgaGF2ZSBhdCBsZWFzdCB0d2ljZVxuIFx0ICogYXMgbWFueSByZWZhdWx0cyBhcyB0aGUgZmlyc3QgdGllci5cbiBcdCAqL1xuLVx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIDAsIDIsIFx1MDAyNnNwKTtcbi1cdGZvciAodGllciA9IDE7IHRpZXIgXHUwMDNjIE1BWF9OUl9USUVSUzsgdGllcisrKSB7XG4tXHRcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0aWVyLCAzLCBcdTAwMjZwdik7XG4rXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NSU4sIDIsIFx1MDAyNnNwKTtcbitcdGZvciAodGllciA9IExSVV9USUVSX01JTiArIDE7IHRpZXIgXHUwMDNjPSBMUlVfVElFUl9NQVg7IHRpZXIrKykge1xuK1x0XHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdGllciwgdGllciwgMywgXHUwMDI2cHYpO1xuIFx0XHRpZiAoIXBvc2l0aXZlX2N0cmxfZXJyKFx1MDAyNnNwLCBcdTAwMjZwdikpXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG5AQCAtNDgzMiw4ICs0ODMzLDEwIEBAIHN0YXRpYyBpbnQgZ2V0X3R5cGVfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxuIFx0ICogQ29tcGFyZSB0aGUgc3VtIG9mIGFsbCB0aWVycyBvZiBhbm9uIHdpdGggdGhhdCBvZiBmaWxlIHRvIGRldGVybWluZVxuIFx0ICogd2hpY2ggdHlwZSB0byBzY2FuLlxuIFx0ICovXG4tXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBNQVhfTlJfVElFUlMsIHN3YXBwaW5lc3MsIFx1MDAyNnNwKTtcbi1cdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIE1BWF9OUl9USUVSUywgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCBcdTAwMjZwdik7XG4rXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCxcbitcdFx0ICAgICAgc3dhcHBpbmVzcywgXHUwMDI2c3ApO1xuK1x0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NQVgsXG4rXHRcdCAgICAgIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgXHUwMDI2cHYpO1xuIFxuIFx0cmV0dXJuIHBvc2l0aXZlX2N0cmxfZXJyKFx1MDAyNnNwLCBcdTAwMjZwdik7XG4gfVxuQEAgLTQ5MzIsOCArNDkzNSwxMCBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0fVxuIFxuIFx0XHQvKiBkb24ndCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqL1xuLVx0XHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pXG4tXHRcdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX2FjdGl2ZSkpO1xuK1x0XHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pIHtcbitcdFx0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuK1x0XHRcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xuK1x0XHR9XG4gXHR9XG4gXG4gXHRtb3ZlX2ZvbGlvc190b19scnUoXHUwMDI2bGlzdCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0MToyMS4wNDI4NTg4NzZaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTI1MzA2NzM5MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRXZhbHVhdGlvbjogUGF0Y2ggU2VyaWVzIEFuYWx5c2lzKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lIGlmIGl0IHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTXkgZm9jdXMgaXMgYWx3YXlzIG9uIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMsIGVzcGVjaWFsbHkgdGhvc2UgdGhhdCBjb3VsZCBsZWFkIHRvIGluZm9ybWF0aW9uIGxlYWtzIG9yIGV4cGxvaXRhYmxlIHZ1bG5lcmFiaWxpdGllcy5cblxuRmlyc3QsIEkndmUgbWV0aWN1bG91c2x5IGV4YW1pbmVkIHRoZSBmaWxlIG1vZGlmaWNhdGlvbnMuIFRoZSBjaGFuZ2VzIGFyZSBjb25jZW50cmF0ZWQgaW4gYG1lbWNvbnRyb2wuaGAsIGBtbV9pbmxpbmUuaGAsIGBtbXpvbmUuaGAsIGBmb2xpby5jYCwgYG1lbWNvbnRyb2wuY2AsIGBtaWdyYXRlLmNgLCBhbmQgYHZtc2Nhbi5jYC4gSXQncyBhIG1peCBvZiBkYXRhIHN0cnVjdHVyZSBhZGp1c3RtZW50cyBhbmQgZnVuY3Rpb24gcmVmYWN0b3JpbmcgcmVsYXRlZCB0byB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIGltcGxlbWVudGF0aW9uLCBmb2xpbyBmbGFncywgYW5kIG1lbW9yeSBjb250cm9sIGdyb3Vwcy4gVGhlIGtleSBzdHJ1Y3R1cmFsIGNoYW5nZSBpcyBpbiBgbWVtX2Nncm91cF9wZXJfbm9kZWAsIHdoZXJlIGBscnVfem9uZV9zaXplYCBpcyBjaGFuZ2VkIGZyb20gYHVuc2lnbmVkIGxvbmdgIHRvIGBsb25nYC4gVGhlcmUgYXJlIGFkZGl0aW9ucyBvZiBpbmxpbmUgZnVuY3Rpb25zIGZvciBmbGFnIG1hbmFnZW1lbnQgYW5kIHVwZGF0ZXMgdG8gc2V2ZXJhbCBMUlUtcmVsYXRlZCBmdW5jdGlvbnMuXG5cbkkndmUgc3BlY2lmaWNhbGx5IHNjcnV0aW5pemVkIGB3YWxrX3VwZGF0ZV9mb2xpb2AgYW5kIGl0cyBjYWxsIHRvIGBmb2xpb191cGRhdGVfZ2VuYC4gVGhlIHBvdGVudGlhbCBpc3N1ZSB3YXMgd2hldGhlciB0aGUgYHR5cGVgIHZhcmlhYmxlLCBwYXNzZWQgdG8gYHVwZGF0ZV9iYXRjaF9zaXplYCwgbWlnaHQgYmUgdW5pbml0aWFsaXplZCBpZiBgZm9saW9fdXBkYXRlX2dlbmAgcmV0dXJuZWQgYW4gZWFybHkgZXhpdC4gSG93ZXZlciwgYWZ0ZXIgY2FyZWZ1bCByZXZpZXcsIEkndmUgY29uZmlybWVkIHRoYXQgdGhpcyBpc24ndCB0aGUgY2FzZS4gVGhlIGBpZmAgY29uZGl0aW9uIGNvcnJlY3RseSBoYW5kbGVzIHRoZSBzY2VuYXJpbyB3aGVyZSB0aGUgZWFybHkgcmV0dXJuIG9mIGAtMWAgb2NjdXJzLCBwcmV2ZW50aW5nIHRoZSB1c2Ugb2YgYW4gdW5pbml0aWFsaXplZCBgdHlwZWAuIEkndmUgYWxzbyBjaGVja2VkIHdoZXRoZXIgdGhlcmUgYXJlIGZ1cnRoZXIgdXNhZ2VzIG9mIG90aGVyIHZhcmlhYmxlcyB3aXRoaW4gYHdhbGtfdXBkYXRlX2ZvbGlvYCwgZmluZGluZyB0aGF0IG5vbmUgcHJlc2VudCBhbnkgcmlzay4gSSBmb2xsb3dlZCB0aGUgc2FtZSBwcmluY2lwbGUgZm9yIGByZWFkX2N0cmxfcG9zYCBhbmQgZm9yIGBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplYC5cblxuVGhlIGBscnVfc2V0X3JlZnNfZmxhZ3NgLCBgbHJ1X2dldF9yZWZzX2ZsYWdzYCwgYGZvbGlvX3NldF9scnVfcmVmc2AsIGBscnVfc2V0X2dlbl9mbGFnc2AsIGFuZCBgbHJ1X2dldF9nZW5fZmxhZ3NgIGZ1bmN0aW9ucyBhcmUgYWxsIG1hbmlwdWxhdGluZyB0aGUgYGZvbGlvLVx1MDAzZWZsYWdzYCwgd2hpY2ggYXJlIGB1bnNpZ25lZCBsb25nYCBmaWVsZHMuIEkndmUgY29uZmlybWVkIHRoYXQgdGhlcmUncyBubyByaXNrIG9mIGFueSB1bmluaXRpYWxpemVkIHJlYWRzLlxuXG5DcnVjaWFsbHksIEkndmUgZm91bmQgbm8gZXZpZGVuY2Ugb2YgYW55IGRhdGEgc3RydWN0dXJlcyBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2Ugb3IgYW55IG5ldyBrZXJuZWwgaW50ZXJmYWNlcyBiZWluZyBleHBvc2VkIG9yIG1vZGlmaWVkLiBUaGVyZSBhcmUgbm8gYWxsb2NhdGlvbnMgb3IgaW5pdGlhbGl6YXRpb25zIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGxhdGVyIGJlIHJlYWQuIFRoZSBjaGFuZ2VzIGRlYWwgd2l0aCB0aGUgTFJVIGxvZ2ljLCB3aGljaCBpcyBjcml0aWNhbCwgYnV0IEkgZG9uJ3Qgc2VlIGFueSBkaXJlY3QgaW5mb3JtYXRpb24gbGVha2FnZSByaXNrcy5cblxuVGhlcmVmb3JlLCBhZnRlciB0aG9yb3VnaGx5IGFuYWx5emluZyB0aGVzZSBjaGFuZ2VzLCBJJ20gY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCBzZXJpZXMgZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrcyB0aGF0IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBTdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycyBsaWtlIEtBU0FOLCBhbmQgbG9ja2RlcCwgc2hvdWxkIGNhdGNoIGFueSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBpbiB0aGlzIGFyZWEuIEtNU0FOIGlzIG92ZXJraWxsIGZvciB0aGlzIHNwZWNpZmljIHNldCBvZiBjaGFuZ2VzLiBUaGlzIHBhdGNoIGlzIGEgcmVmYWN0b3JpbmcsIGFuZCBhIGNoYW5nZSB0byBhIHZhcmlhYmxlJ3MgZGF0YSB0eXBlLCBhbmQgdGhpcyBzaG91bGQgYmUgdGVzdGVkIGluIHRoZSBub3JtYWwgbWFubmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYxOSwiT3V0cHV0VG9rZW5zIjoyNDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDIwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDE6MzMuNTczNTM2MjM4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE0NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBmb2xpbyBmbGFnIG9wZXJhdGlvbnMgKGludHJvZHVjaW5nIGhlbHBlcnMgbGlrZSBscnVfc2V0X2dlbl9mbGFncywgbHJ1X3NldF9yZWZzX2ZsYWdzLCBmb2xpb19zZXRfbHJ1X3JlZnMpLCB1cGRhdGVzIGZvbGlvIHJlZmVyZW5jZS9nZW5lcmF0aW9uIHRyYWNraW5nIGFjcm9zcyByZWNsYWltIGFuZCBtaWdyYXRpb24gcGF0aHMsIGFuZCBjaGFuZ2VzIG1lbWNnIGxydV96b25lX3NpemUgdHJhY2tpbmcgZnJvbSB1bnNpZ25lZCBsb25nIHRvIHNpZ25lZCBsb25nIHdpdGggYm91bmRzIGNoZWNraW5nLlxcblxcbk5vIGtlcm5lbC10by11c2VyIGRhdGEgY29waWVzLCBpb2N0bHMsIG9yIHVzZXItZmFjaW5nIHN0cnVjdHMgYXJlIG1vZGlmaWVkLiBTdGFjayB2YXJpYWJsZXMgaW50cm9kdWNlZCAoZS5nLiwgYHR5cGVgIGluIGB3YWxrX3VwZGF0ZV9mb2xpb2ApIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgcmVhZCAoYXMgYHR5cGVgIGlzIG9ubHkgcGFzc2VkIHRvIGB1cGRhdGVfYmF0Y2hfc2l6ZWAgd2hlbiBgb2xkX2dlbiBcXHUwMDNlPSAwYCwgd2hpY2ggZ3VhcmFudGVlcyBhc3NpZ25tZW50IGluIGBmb2xpb191cGRhdGVfZ2VuYCkuIE5vIHVuaW5pdGlhbGl6ZWQgaGVhcCwgc3RhY2ssIG9yIHBhZ2UgYWxsb2NhdGlvbnMgYXJlIGV4cG9zZWQuIFBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyBpbiB0aGVzZSBNTSBwYXRocyAoc3VjaCBhcyBjb25jdXJyZW5jeSBpc3N1ZXMgb3IgaW52YWxpZCBmb2xpbyBkZXJlZmVyZW5jZXMpIGZhbGwgdW5kZXIgS0FTQU4vTE9DS0RFUCByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBkZXRlY3RvcnMuIFRodXMsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyBNdWx0aS1HZW4gTFJVIChNR0xSVSkgZm9saW8gZmxhZyBvcGVyYXRpb25zIChpbnRyb2R1Y2luZyBoZWxwZXJzIGxpa2UgbHJ1X3NldF9nZW5fZmxhZ3MsIGxydV9zZXRfcmVmc19mbGFncywgZm9saW9fc2V0X2xydV9yZWZzKSwgdXBkYXRlcyBmb2xpbyByZWZlcmVuY2UvZ2VuZXJhdGlvbiB0cmFja2luZyBhY3Jvc3MgcmVjbGFpbSBhbmQgbWlncmF0aW9uIHBhdGhzLCBhbmQgY2hhbmdlcyBtZW1jZyBscnVfem9uZV9zaXplIHRyYWNraW5nIGZyb20gdW5zaWduZWQgbG9uZyB0byBzaWduZWQgbG9uZyB3aXRoIGJvdW5kcyBjaGVja2luZy5cXG5cXG5ObyBrZXJuZWwtdG8tdXNlciBkYXRhIGNvcGllcywgaW9jdGxzLCBvciB1c2VyLWZhY2luZyBzdHJ1Y3RzIGFyZSBtb2RpZmllZC4gU3RhY2sgdmFyaWFibGVzIGludHJvZHVjZWQgKGUuZy4sIGB0eXBlYCBpbiBgd2Fsa191cGRhdGVfZm9saW9gKSBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHJlYWQgKGFzIGB0eXBlYCBpcyBvbmx5IHBhc3NlZCB0byBgdXBkYXRlX2JhdGNoX3NpemVgIHdoZW4gYG9sZF9nZW4gXFx1MDAzZT0gMGAsIHdoaWNoIGd1YXJhbnRlZXMgYXNzaWdubWVudCBpbiBgZm9saW9fdXBkYXRlX2dlbmApLiBObyB1bmluaXRpYWxpemVkIGhlYXAsIHN0YWNrLCBvciBwYWdlIGFsbG9jYXRpb25zIGFyZSBleHBvc2VkLiBQb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgaW4gdGhlc2UgTU0gcGF0aHMgKHN1Y2ggYXMgY29uY3VycmVuY3kgaXNzdWVzIG9yIGludmFsaWQgZm9saW8gZGVyZWZlcmVuY2VzKSBmYWxsIHVuZGVyIEtBU0FOL0xPQ0tERVAgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgZGV0ZWN0b3JzLiBUaHVzLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowj9pp8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 04:39:26 +0000 UTC FinishedAt: 2026-09-03 04:41:35 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "893f78beb0477671991ccaae87df75acc484162f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED", "MEMCG", "MIGRATION" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "893f78beb0477671991ccaae87df75acc484162f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED", "MEMCG", "MIGRATION" ], "series_id": "8eeb8a1b-b69a-46a3-87c1-33c3755a0210" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "lru_gen_look_around", "folio_migrate_flags", "mem_cgroup_update_lru_size", "lru_gen_reparent_memcg", "lru_gen_soft_reclaim" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xydV9nZW5fbG9va19hcm91bmQmIzM0OywKICAgICYjMzQ7Zm9saW9fbWlncmF0ZV9mbGFncyYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZSYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX3JlcGFyZW50X21lbWNnJiMzNDssCiAgICAmIzM0O2xydV9nZW5fc29mdF9yZWNsYWltJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyBNdWx0aS1HZW4gTFJVIChNR0xSVSkgZm9saW8gZmxhZyBvcGVyYXRpb25zIChpbnRyb2R1Y2luZyBoZWxwZXJzIGxpa2UgbHJ1X3NldF9nZW5fZmxhZ3MsIGxydV9zZXRfcmVmc19mbGFncywgZm9saW9fc2V0X2xydV9yZWZzKSwgdXBkYXRlcyBmb2xpbyByZWZlcmVuY2UvZ2VuZXJhdGlvbiB0cmFja2luZyBhY3Jvc3MgcmVjbGFpbSBhbmQgbWlncmF0aW9uIHBhdGhzLCBhbmQgY2hhbmdlcyBtZW1jZyBscnVfem9uZV9zaXplIHRyYWNraW5nIGZyb20gdW5zaWduZWQgbG9uZyB0byBzaWduZWQgbG9uZyB3aXRoIGJvdW5kcyBjaGVja2luZy5cblxuTm8ga2VybmVsLXRvLXVzZXIgZGF0YSBjb3BpZXMsIGlvY3Rscywgb3IgdXNlci1mYWNpbmcgc3RydWN0cyBhcmUgbW9kaWZpZWQuIFN0YWNrIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIChlLmcuLCBgdHlwZWAgaW4gYHdhbGtfdXBkYXRlX2ZvbGlvYCkgYXJlIGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyByZWFkIChhcyBgdHlwZWAgaXMgb25seSBwYXNzZWQgdG8gYHVwZGF0ZV9iYXRjaF9zaXplYCB3aGVuIGBvbGRfZ2VuIFx1MDAzZT0gMGAsIHdoaWNoIGd1YXJhbnRlZXMgYXNzaWdubWVudCBpbiBgZm9saW9fdXBkYXRlX2dlbmApLiBObyB1bmluaXRpYWxpemVkIGhlYXAsIHN0YWNrLCBvciBwYWdlIGFsbG9jYXRpb25zIGFyZSBleHBvc2VkLiBQb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgaW4gdGhlc2UgTU0gcGF0aHMgKHN1Y2ggYXMgY29uY3VycmVuY3kgaXNzdWVzIG9yIGludmFsaWQgZm9saW8gZGVyZWZlcmVuY2VzKSBmYWxsIHVuZGVyIEtBU0FOL0xPQ0tERVAgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgZGV0ZWN0b3JzLiBUaHVzLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIE11bHRpLUdlbiBMUlUgKE1HTFJVKSwgcGFnZSByZWZlcmVuY2UgY291bnRpbmcsIGZvbGlvIGZsYWdzIG1hbmFnZW1lbnQsIGZvbGlvIG1pZ3JhdGlvbiwgYW5kIG1lbWNnIExSVSBzaXplIGFjY291bnRpbmcuIFRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhZmZlY3QgcGFnZSByZWNsYW1hdGlvbiwgYWdpbmcsIGFuZCBtaWdyYXRpb24gYmVoYXZpb3IgaW4gcmVhY2hhYmxlIGNvcmUgbW0gY29kZSBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDRkNzBkMWNiNzU3MTM0MjI4NmY0NmMzYjVhODhkNDllZjY0OWFkYjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDA0OjQwOjQ4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IDdkMWMwY2UxODlhODguLjg2NzgwZWY2NWVhZmEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbkBAIC0xMTMsNyAmIzQzOzExMyw3IEBAIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlIHtcbiBcdC8qIEZpZWxkcyB3aGljaCBnZXQgdXBkYXRlZCBvZnRlbiBhdCB0aGUgZW5kLiAqL1xuIFx0c3RydWN0IGxydXZlY1x0XHRscnV2ZWM7XG4gXHRDQUNIRUxJTkVfUEFERElORyhfcGFkMl8pO1xuLVx0dW5zaWduZWQgbG9uZ1x0XHRscnVfem9uZV9zaXplW01BWF9OUl9aT05FU11bTlJfTFJVX0xJU1RTXTtcbiYjNDM7XHRsb25nXHRcdFx0bHJ1X3pvbmVfc2l6ZVtNQVhfTlJfWk9ORVNdW05SX0xSVV9MSVNUU107XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9yZWNsYWltX2l0ZXJcdGl0ZXI7XG4gXG4gXHQvKlxuQEAgLTkwMiwxMCAmIzQzOzkwMiwxNSBAQCBzdGF0aWMgaW5saW5lXG4gdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0ZW51bSBscnVfbGlzdCBscnUsIGludCB6b25lX2lkeClcbiB7XG4mIzQzO1x0bG9uZyB2YWw7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XG4gXG4gXHRteiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xuLVx0cmV0dXJuIFJFQURfT05DRShtei1cdTAwM2VscnVfem9uZV9zaXplW3pvbmVfaWR4XVtscnVdKTtcbiYjNDM7XHR2YWwgPSBSRUFEX09OQ0UobXotXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRSh2YWwgXHUwMDNjIDApKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiB2YWw7XG4gfVxuIFxuIHZvaWQgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmggYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG5pbmRleCA2MjFjODY1M2Q4ZjdlLi5hYjY5Yjk5MzA4OTNmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuQEAgLTMwLDYgJiM0MzszMCwxNyBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19pc19maWxlX2xydShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cmV0dXJuICFmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1IC0gU2hvdWxkIHRoZSBmb2xpbyBiZSBvbiBhIGZpbGUgTFJVIG9yIGFub24gTFJVP1xuJiM0MzsgKiBAZmxhZ3M6IFRoZSBmb2xpbyYjMzk7cyBmbGFncy5cbiYjNDM7ICpcbiYjNDM7ICogSnVzdCBsaWtlIGZvbGlvX2lzX2ZpbGVfbHJ1IGJ1dCB0YWtlIHRoZSBmb2xpbyBmbGFncyBkaXJlY3RseSBpbnN0ZWFkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBpbnQgZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUoY29uc3QgdW5zaWduZWQgbG9uZyAqZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gIXRlc3RfYml0KFBHX3N3YXBiYWNrZWQsIGZsYWdzKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX191cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRcdFx0ZW51bSBscnVfbGlzdCBscnUsIGVudW0gem9uZV90eXBlIHppZCxcbiBcdFx0XHRcdGxvbmcgbnJfcGFnZXMpXG5AQCAtMTQyLDEwICYjNDM7MTUzLDY2IEBAIHN0YXRpYyBpbmxpbmUgaW50IGxydV90aWVyX2Zyb21fcmVmcyhpbnQgcmVmcywgYm9vbCB3b3JraW5nc2V0KVxuIFx0cmV0dXJuIHdvcmtpbmdzZXQgPyBNQVhfTlJfVElFUlMgLSAxIDogb3JkZXJfYmFzZV8yKHJlZnMpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MzsvKipcbiYjNDM7ICogbHJ1X3NldF9nZW5fZmxhZ3MgLSBTZXQgdGhlIExSVSBnZW5lcmF0aW9uIG51bWJlciB0byBzcGVjaWZpZWQgZm9saW8gZmxhZ3MuXG4mIzQzOyAqIEBmbGFnczogcG9pbnRlciB0byB0aGUgZm9saW8gZmxhZ3NcbiYjNDM7ICogQGdlbjogZ2VuZXJhdGlvbiBudW1iZXIsIGJldHdlZW4gMCBhbmQgKE1BWF9OUl9HRU5TIC0gMSksIGluY2x1c2l2ZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfc2V0X2dlbl9mbGFncyh1bnNpZ25lZCBsb25nICpmbGFncywgaW50IGdlbilcbiYjNDM7e1xuJiM0MztcdEJVSUxEX0JVR19PTihMUlVfR0VOX01BU0sgXHUwMDI2IExSVV9SRUZTX01BU0spO1xuJiM0MztcdFZNX1dBUk5fT05fT05DRShnZW4gXHUwMDNlPSBNQVhfTlJfR0VOUyB8fCBnZW4gXHUwMDNjIDApO1xuJiM0MztcdC8qIFN0b3JlIGdlbiBvZmZzZXQgYnkgMSwgemVybyBtZWFucyB0aGUgZm9saW8gaXMgb2ZmLWxpc3QuICovXG4mIzQzO1x0KmZsYWdzIFx1MDAyNj0gfkxSVV9HRU5fTUFTSztcbiYjNDM7XHQqZmxhZ3MgfD0gKGdlbiAmIzQzOyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogbHJ1X2dldF9nZW5fZmxhZ3MgLSBSZXR1cm4gdGhlIExSVSBnZW5lcmF0aW9uIG51bWJlciBmcm9tIGZvbGlvIGZsYWdzLlxuJiM0MzsgKiBAZmxhZ3M6IGZvbGlvIGZsYWdzXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgKE1BWF9OUl9HRU5TIC0gMSksIGluY2x1c2l2ZS4gUmV0dXJuc1xuJiM0MzsgKiAtMSBpZiB0aGUgZmxhZ3MgaW5kaWNhdGUgdGhlIGZvbGlvIGlzIG9mZiB0aGUgbGlzdCAoZS5nLiwgaXNvbGF0ZWQpLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBpbnQgbHJ1X2dldF9nZW5fZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncylcbiYjNDM7e1xuJiM0MztcdGludCBnZW4gPSAoKGZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4mIzQzO1xuJiM0MztcdC8qIEV4Y2x1ZGUgdGhlIGxlZ2FsIC0xIGZyb20gdGhlIHVuc2lnbmVkIE1BWF9OUl9HRU5TIGNvbXBhcmlzb24gKi9cbiYjNDM7XHRWTV9XQVJOX09OX09OQ0UoZ2VuICE9IC0xIFx1MDAyNlx1MDAyNiBnZW4gXHUwMDNlPSBNQVhfTlJfR0VOUyk7XG4mIzQzO1x0cmV0dXJuIGdlbjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGxydV9zZXRfcmVmc19mbGFncyAtIFNldCB0aGUgTFJVIHJlZmVyZW5jZWQgY291bnQgdG8gZm9saW8gZmxhZ3MuXG4mIzQzOyAqIEBmbGFnczogcG9pbnRlciB0byB0aGUgZm9saW8gZmxhZ3NcbiYjNDM7ICogQHJlZnM6IHJlZmVyZW5jZWQgLyBhY2Nlc3MgY291bnQgbnVtYmVyLCBiZXR3ZWVuIDAgYW5kIExSVV9SRUZTX01BWCwgaW5jbHVzaXZlLlxuJiM0MzsgKlxuJiM0MzsgKiBGb3IgTUdMUlUsIFBHX3JlZmVyZW5jZWQgaG9sZHMgdGhlIGZpcnN0IHJlZiwgYW5kIHRoZSBleHRyYSBiaXRzIGhvbGQgdGhlXG4mIzQzOyAqIHJlbWFpbmluZyByZWZzLiBGb3IgY2xhc3NpY2FsIExSVSB0aGUgZXh0cmEgYml0cyBhcmUgbm90IHVzZWQsIHNvIGl0IGNhblxuJiM0MzsgKiBhbHNvIGJlIHNlZW4gYXMgdGhlIHJlZnMgY291bnQgbmV2ZXIgZXhjZWVkcyAxLiBJbiBib3RoIGNhc2VzLCByZWZzID09IDFcbiYjNDM7ICogbWVhbnMgUEdfcmVmZXJlbmNlZCBpcyBzZXQgYW5kIHRoZSBleHRyYSBiaXRzIGFyZSB6ZXJvLCBhbmQgcmVmcyA9PSAwIG1lYW5zXG4mIzQzOyAqIFBHX3JlZmVyZW5jZWQgYW5kIHRoZSBleHRyYSBiaXRzIGFyZSBhbGwgdW5zZXQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X3NldF9yZWZzX2ZsYWdzKHVuc2lnbmVkIGxvbmcgKmZsYWdzLCB1bnNpZ25lZCBpbnQgcmVmcylcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuJiM0MztcdFZNX1dBUk5fT05fT05DRShyZWZzIFx1MDAzZSBMUlVfUkVGU19NQVgpO1xuJiM0MztcdEJVSUxEX0JVR19PTihMUlVfUkVGU19NQVggIT0gKExSVV9SRUZTX01BU0sgXHUwMDNlXHUwMDNlIExSVV9SRUZTX1BHT0ZGKSAmIzQzOyAxKTtcbiBcbiYjNDM7XHQqZmxhZ3MgXHUwMDI2PSB+TFJVX1JFRlNfRkxBR1M7XG4mIzQzO1x0aWYgKCFyZWZzKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdCpmbGFncyB8PSAoQklUKFBHX3JlZmVyZW5jZWQpIHwgKChyZWZzIC0gMVVMKSBcdTAwM2NcdTAwM2MgTFJVX1JFRlNfUEdPRkYpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGxydV9nZXRfcmVmc19mbGFncyAtIFJldHVybiBMUlUgcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCBmcm9tIGZvbGlvIGZsYWdzLlxuJiM0MzsgKiBAZmxhZ3M6IGZvbGlvIGZsYWdzXG4mIzQzOyAqXG4mIzQzOyAqIFJlYWRzIHRoZSBMUlUgcmVmZXJlbmNlZCBjb3VudCBzZXQgYnkgbHJ1X3NldF9yZWZzX2ZsYWdzKCkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBscnVfZ2V0X3JlZnNfZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncylcbiYjNDM7e1xuIFx0aWYgKCEoZmxhZ3MgXHUwMDI2IEJJVChQR19yZWZlcmVuY2VkKSkpXG4gXHRcdHJldHVybiAwO1xuIFx0LypcbkBAIC0xNTUsMTEgJiM0MzsyMjIsMjQgQEAgc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHJldHVybiAoKGZsYWdzIFx1MDAyNiBMUlVfUkVGU19NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX1JFRlNfUEdPRkYpICYjNDM7IDE7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuJiM0MztcdHJldHVybiBscnVfZ2V0X3JlZnNfZmxhZ3MoUkVBRF9PTkNFKCpjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpKTtcbiYjNDM7fVxuIFxuLVx0cmV0dXJuICgoZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgcmVmcylcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4mIzQzO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdG5ld19mbGFncyA9IG9sZF9mbGFncztcbiYjNDM7XHRcdGxydV9zZXRfcmVmc19mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIHJlZnMpO1xuJiM0MztcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBscnVfZ2V0X2dlbl9mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9pc19hY3RpdmUoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgZ2VuKVxuQEAgLTI3MCw3ICYjNDM7MzUwLDcgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fYWRkX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcbiBcdGZsYWdzID0gKGdlbiAmIzQzOyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIE1JTl9OUl9HRU5TIGFib3V0IFBHX2FjdGl2ZSAqL1xuLVx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpO1xuJiM0MztcdHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpO1xuIFxuIFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCAtMSwgZ2VuKTtcbiBcdC8qIGZvciBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoKSAqL1xuQEAgLTI5NSw3ICYjNDM7Mzc1LDcgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcbiBcdC8qIGZvciBmb2xpb19taWdyYXRlX2ZsYWdzKCkgKi9cbiBcdGZsYWdzID0gIXJlY2xhaW1pbmcgXHUwMDI2XHUwMDI2IGxydV9nZW5faXNfYWN0aXZlKGxydXZlYywgZ2VuKSA/IEJJVChQR19hY3RpdmUpIDogMDtcbi1cdGZsYWdzID0gc2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfR0VOX01BU0ssIGZsYWdzKTtcbiYjNDM7XHRmbGFncyA9IHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0ssIGZsYWdzKTtcbiBcdGdlbiA9ICgoZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbiBcbiBcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgZ2VuLCAtMSk7XG5AQCAtMzA0LDExICYjNDM7Mzg0LDE5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXG4mIzQzOy8qKlxuJiM0MzsgKiBmb2xpb19taWdyYXRlX2xydV9yZWZzIC0gY29weSB0aGUgcmVmZXJlbmNlIHN0YXRlIHRvIGEgbmV3IGZvbGlvXG4mIzQzOyAqIEBuZXc6IHRoZSBkZXN0aW5hdGlvbiBmb2xpb1xuJiM0MzsgKiBAb2xkOiB0aGUgc291cmNlIGZvbGlvXG4mIzQzOyAqXG4mIzQzOyAqIFRyYW5zZmVyIHRoZSByZWZlcmVuY2Ugc3RhdGUgdG8gQG5ldyBkdXJpbmcgbWlncmF0aW9uOiB0aGUgTUdMUlVcbiYjNDM7ICogcmVmcyBjb3VudCwgaW5jbHVkaW5nIFBHX3JlZmVyZW5jZWQsIG9yIGp1c3QgUEdfcmVmZXJlbmNlZCBmb3IgdGhlXG4mIzQzOyAqIGFjdGl2ZS9pbmFjdGl2ZSBMUlUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyByZWZzID0gUkVBRF9PTkNFKG9sZC1cdTAwM2VmbGFncy5mKSBcdTAwMjYgTFJVX1JFRlNfTUFTSztcbi1cbi1cdHNldF9tYXNrX2JpdHMoXHUwMDI2bmV3LVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIHJlZnMpO1xuJiM0MztcdEJVSUxEX0JVR19PTihMUlVfUkVGU19NQVNLIFx1MDAyNiBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuJiM0MztcdGZvbGlvX3NldF9scnVfcmVmcyhuZXcsIGZvbGlvX2xydV9yZWZzKG9sZCkpO1xuIH1cbiAjZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cbiBcbkBAIC0zMzcsOSAmIzQzOzQyNSwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxuIHtcbi1cbiYjNDM7XHRpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKG9sZCkpXG4mIzQzO1x0XHRmb2xpb19zZXRfcmVmZXJlbmNlZChuZXcpO1xuIH1cbiAjZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuaW5kZXggOTRmOWMzZmY1NDE2MC4uOWIyN2NmNTNiZGJjNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbkBAIC00OTIsMTEgJiM0Mzs0OTIsMTQgQEAgZW51bSBscnV2ZWNfZmxhZ3Mge1xuICAqIGZvbGlvLVx1MDAzZWZsYWdzLCBtYXNrZWQgYnkgTFJVX1JFRlNfTUFTSy5cbiAgKi9cbiAjZGVmaW5lIE1BWF9OUl9USUVSU1x0XHQ0VVxuJiM0MzsjZGVmaW5lIExSVV9USUVSX01JTlx0XHQwVVxuJiM0MzsjZGVmaW5lIExSVV9USUVSX01BWFx0XHQoTUFYX05SX1RJRVJTIC0gMSlcbiBcbiAjaWZuZGVmIF9fR0VORVJBVElOR19CT1VORFNfSFxuIFxuICNkZWZpbmUgTFJVX0dFTl9NQVNLXHRcdCgoQklUKExSVV9HRU5fV0lEVEgpIC0gMSkgXHUwMDNjXHUwMDNjIExSVV9HRU5fUEdPRkYpXG4gI2RlZmluZSBMUlVfUkVGU19NQVNLXHRcdCgoQklUKExSVV9SRUZTX1dJRFRIKSAtIDEpIFx1MDAzY1x1MDAzYyBMUlVfUkVGU19QR09GRilcbiYjNDM7I2RlZmluZSBMUlVfUkVGU19NQVhcdFx0QklUKExSVV9SRUZTX1dJRFRIKVxuIFxuIC8qXG4gICogRm9yIGZvbGlvcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMsXG5kaWZmIC0tZ2l0IGEvbW0vZm9saW8uYyBiL21tL2ZvbGlvLmNcbmluZGV4IGMwMmRjZWE5YzAzYzIuLmZiODc0ZmU0OTJiMmIgMTAwNjQ0XG4tLS0gYS9tbS9mb2xpby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9mb2xpby5jXG5AQCAtMzUzLDI2ICYjNDM7MzUzLDI4IEBAIHN0YXRpYyB2b2lkIF9fbHJ1X2NhY2hlX2FjdGl2YXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXG4gc3RhdGljIHZvaWQgbHJ1X2dlbl9pbmNfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbiYjNDM7XHRpbnQgcmVmcztcbiBcbiBcdGlmIChmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXG4tXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpIHtcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuJiM0MztcdGlmICghZm9saW9fbHJ1X3JlZnMoZm9saW8pKSB7XG4mIzQzO1x0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4gXHRkbyB7XG4tXHRcdGlmICgob2xkX2ZsYWdzIFx1MDAyNiBMUlVfUkVGU19NQVNLKSA9PSBMUlVfUkVGU19NQVNLKSB7XG4mIzQzO1x0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XG4mIzQzO1x0XHRyZWZzID0gbHJ1X2dldF9yZWZzX2ZsYWdzKG9sZF9mbGFncyk7XG4mIzQzO1x0XHRpZiAocmVmcyA9PSBMUlVfUkVGU19NQVgpIHtcbiBcdFx0XHRpZiAoIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpXG4gXHRcdFx0XHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XG4gXHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4tXG4tXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncyAmIzQzOyBCSVQoTFJVX1JFRlNfUEdPRkYpO1xuLVx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4mIzQzO1x0XHRscnVfc2V0X3JlZnNfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCByZWZzICYjNDM7IDEpO1xuJiM0MztcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4gfVxuIFxuIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuQEAgLTM4NCw3ICYjNDM7Mzg2LDggQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRpZiAoZ2VuIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MgfCBCSVQoUEdfd29ya2luZ3NldCksIDApO1xuJiM0MztcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4mIzQzO1x0Zm9saW9fY2xlYXJfd29ya2luZ3NldChmb2xpbyk7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRzZXEgPSBSRUFEX09OQ0UoZm9saW9fbHJ1dmVjKGZvbGlvKS1cdTAwM2VscnVnZW4ubWluX3NlcVt0eXBlXSk7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCA4NTZhN2QwNzU4NmNjLi4wYTY1YWI4ZGYyN2E5IDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmNcbkBAIC0xNTI5LDI4ICYjNDM7MTUyOSwxMiBAQCB2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXG4gXHRcdFx0XHRpbnQgemlkLCBsb25nIG5yX3BhZ2VzKVxuIHtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejtcbi1cdHVuc2lnbmVkIGxvbmcgKmxydV9zaXplO1xuLVx0bG9uZyBzaXplO1xuIFxuIFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0bXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcbi1cdGxydV9zaXplID0gXHUwMDI2bXotXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6aWRdW2xydV07XG4tXG4tXHRpZiAobnJfcGFnZXMgXHUwMDNjIDApXG4tXHRcdCpscnVfc2l6ZSAmIzQzOz0gbnJfcGFnZXM7XG4tXG4tXHRzaXplID0gKmxydV9zaXplO1xuLVx0aWYgKFdBUk5fT05DRShzaXplIFx1MDAzYyAwLFxuLVx0XHRcJiMzNDslcyglcCwgJWQsICVsZCk6IGxydV9zaXplICVsZFxcblwmIzM0Oyxcbi1cdFx0X19mdW5jX18sIGxydXZlYywgbHJ1LCBucl9wYWdlcywgc2l6ZSkpIHtcbi1cdFx0Vk1fQlVHX09OKDEpO1xuLVx0XHQqbHJ1X3NpemUgPSAwO1xuLVx0fVxuLVxuLVx0aWYgKG5yX3BhZ2VzIFx1MDAzZSAwKVxuLVx0XHQqbHJ1X3NpemUgJiM0Mzs9IG5yX3BhZ2VzO1xuJiM0MztcdG16LVx1MDAzZWxydV96b25lX3NpemVbemlkXVtscnVdICYjNDM7PSBucl9wYWdlcztcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jXG5pbmRleCAxNWI0NTgzMmJjZmE3Li5hMzY5ZDBjOTVjMzg2IDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9taWdyYXRlLmNcbkBAIC03NzYsOCAmIzQzOzc3Niw5IEBAIHZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdGludCBjcHVwaWQ7XG4gXG4tXHRpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSlcbi1cdFx0Zm9saW9fc2V0X3JlZmVyZW5jZWQobmV3Zm9saW8pO1xuJiM0MztcdC8qIENvcHkgdGhlIHJlZmVyZW5jZSBzdGF0ZSwgaW5jbHVkaW5nIFBHX3JlZmVyZW5jZWQgKi9cbiYjNDM7XHRmb2xpb19taWdyYXRlX2xydV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7XG4mIzQzO1xuIFx0aWYgKGZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKVxuIFx0XHRmb2xpb19tYXJrX3VwdG9kYXRlKG5ld2ZvbGlvKTtcbiBcdGlmIChmb2xpb190ZXN0X2NsZWFyX2FjdGl2ZShmb2xpbykpIHtcbkBAIC04MDcsNyAmIzQzOzgwOCw2IEBAIHZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0aWYgKGZvbGlvX3Rlc3RfaWRsZShmb2xpbykpXG4gXHRcdGZvbGlvX3NldF9pZGxlKG5ld2ZvbGlvKTtcbiBcbi1cdGZvbGlvX21pZ3JhdGVfcmVmcyhuZXdmb2xpbywgZm9saW8pO1xuIFx0LypcbiBcdCAqIENvcHkgTlVNQSBpbmZvcm1hdGlvbiB0byB0aGUgbmV3IHBhZ2UsIHRvIHByZXZlbnQgb3Zlci1lYWdlclxuIFx0ICogZnV0dXJlIG1pZ3JhdGlvbnMgb2YgdGhpcyBzYW1lIHBhZ2UuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggZmRkMTMyOTlhMDRhOS4uZTdkMzc5YzZlNzAzYSAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uY1xuQEAgLTg0MywxOSAmIzQzOzg0MywyMiBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4gXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKSB7XG4gXHRcdC8qIEFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLiAqL1xuIFx0XHRpZiAoaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7XG4tXHRcdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTtcbiYjNDM7XHRcdFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xuJiM0MztcdFx0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0XHR9XG4gXG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcbiYjNDM7XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbiBcdC8qIFByb21vdGUgb24gc2Vjb25kIGFjY2VzcyAqL1xuLVx0aWYgKGZvbGlvX2xydV9yZWZzKGZvbGlvKSBcdTAwM2UgMSlcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTtcbi1cdGVsc2VcbiYjNDM7XHRpZiAoZm9saW9fbHJ1X3JlZnMoZm9saW8pIFx1MDAzZSAxKSB7XG4mIzQzO1x0XHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XG4mIzQzO1x0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuJiM0MztcdH0gZWxzZSB7XG4gXHRcdGZvbGlvX21hcmtfYWNjZXNzZWQoZm9saW8pO1xuJiM0MztcdH1cbiBcdHJldHVybiB0cnVlO1xuIH1cbiAjZWxzZVxuQEAgLTMxOTUsOCAmIzQzOzMxOTgsOCBAQCBzdHJ1Y3QgY3RybF9wb3Mge1xuIFx0aW50IGdhaW47XG4gfTtcbiBcbi1zdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2Fpbixcbi1cdFx0XHQgIHN0cnVjdCBjdHJsX3BvcyAqcG9zKVxuJiM0MztzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyX21pbixcbiYjNDM7XHRcdFx0ICBpbnQgdGllcl9tYXgsIGludCBnYWluLCBzdHJ1Y3QgY3RybF9wb3MgKnBvcylcbiB7XG4gXHRpbnQgaTtcbiBcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuQEAgLTMyMDUsNyAmIzQzOzMyMDgsNyBAQCBzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2FpbixcbiBcdHBvcy1cdTAwM2VnYWluID0gZ2FpbjtcbiBcdHBvcy1cdTAwM2VyZWZhdWx0ZWQgPSBwb3MtXHUwMDNldG90YWwgPSAwO1xuIFxuLVx0Zm9yIChpID0gdGllciAlIE1BWF9OUl9USUVSUzsgaSBcdTAwM2M9IG1pbih0aWVyLCBNQVhfTlJfVElFUlMgLSAxKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRmb3IgKGkgPSB0aWVyX21pbjsgaSBcdTAwM2M9IHRpZXJfbWF4OyBpJiM0MzsmIzQzOykge1xuIFx0XHRwb3MtXHUwMDNlcmVmYXVsdGVkICYjNDM7PSBscnVnZW4tXHUwMDNlYXZnX3JlZmF1bHRlZFt0eXBlXVtpXSAmIzQzO1xuIFx0XHRcdFx0ICBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNmxydWdlbi1cdTAwM2VyZWZhdWx0ZWRbaGlzdF1bdHlwZV1baV0pO1xuIFx0XHRwb3MtXHUwMDNldG90YWwgJiM0Mzs9IGxydWdlbi1cdTAwM2VhdmdfdG90YWxbdHlwZV1baV0gJiM0MztcbkBAIC0zMjY2LDExICYjNDM7MzI2OSwxMSBAQCBzdGF0aWMgYm9vbCBwb3NpdGl2ZV9jdHJsX2VycihzdHJ1Y3QgY3RybF9wb3MgKnNwLCBzdHJ1Y3QgY3RybF9wb3MgKnB2KVxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gXG4gLyogcHJvbW90ZSBwYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzICovXG4tc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4mIzQzO3N0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgaW50ICp0eXBlLFxuJiM0MztcdFx0XHQgICAgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiB7XG4tXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuLVxuLVx0Vk1fV0FSTl9PTl9PTkNFKGdlbiBcdTAwM2U9IE1BWF9OUl9HRU5TKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuJiM0MztcdGludCBvbGRfZ2VuO1xuIFxuIFx0LypcbiBcdCAqIFNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUywgYW5kIGFjdGl2YXRlIGZpbGUtYmFja2VkXG5AQCAtMzI3OSwyMCAmIzQzOzMyODIsMjUgQEAgc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFcbiBcdCAqL1xuIFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7XG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcbiYjNDM7XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XG4gXHRcdHJldHVybiAtMTtcbiBcdH1cbiBcbiBcdGRvIHtcbiYjNDM7XHRcdG9sZF9nZW4gPSBscnVfZ2V0X2dlbl9mbGFncyhvbGRfZmxhZ3MpO1xuJiM0MztcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuJiM0MztcbiBcdFx0LyogbHJ1X2dlbl9kZWxfZm9saW8oKSBoYXMgaXNvbGF0ZWQgdGhpcyBwYWdlPyAqL1xuLVx0XHRpZiAoIShvbGRfZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykpXG4tXHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcdFx0aWYgKG9sZF9nZW4gXHUwMDNjIDApXG4mIzQzO1x0XHRcdGJyZWFrO1xuIFxuLVx0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgXHUwMDI2IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpO1xuLVx0XHRuZXdfZmxhZ3MgfD0gKChnZW4gJiM0MzsgMVVMKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRikgfCBCSVQoUEdfd29ya2luZ3NldCk7XG4tXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiYjNDM7XHRcdGxydV9zZXRfZ2VuX2ZsYWdzKFx1MDAyNm5ld19mbGFncywgbmV3X2dlbik7XG4mIzQzO1x0XHRscnVfc2V0X3JlZnNfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCAwKTtcbiYjNDM7XHRcdG5ld19mbGFncyB8PSBCSVQoUEdfd29ya2luZ3NldCk7XG4mIzQzO1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiBcbi1cdHJldHVybiAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuJiM0MztcdCp0eXBlID0gZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUoXHUwMDI2b2xkX2ZsYWdzKTtcbiYjNDM7XHRyZXR1cm4gb2xkX2dlbjtcbiB9XG4gXG4gLyogcHJvdGVjdCBwYWdlcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMgKi9cbkBAIC0zMzAxLDIxICYjNDM7MzMwOSwyMCBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbiBcdGludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG4tXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuLVxuLVx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCEob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spLCBmb2xpbyk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbiBcbiBcdGRvIHtcbi1cdFx0bmV3X2dlbiA9ICgob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4mIzQzO1x0XHRuZXdfZ2VuID0gbHJ1X2dldF9nZW5fZmxhZ3Mob2xkX2ZsYWdzKTtcbiYjNDM7XG4gXHRcdC8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqL1xuIFx0XHRpZiAobmV3X2dlbiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG5ld19nZW4gIT0gb2xkX2dlbilcbiBcdFx0XHRyZXR1cm4gbmV3X2dlbjtcbiBcbiYjNDM7XHRcdG5ld19mbGFncyA9IG9sZF9mbGFncztcbiBcdFx0bmV3X2dlbiA9IChvbGRfZ2VuICYjNDM7IDEpICUgTUFYX05SX0dFTlM7XG4tXG4tXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncyBcdTAwMjYgfihMUlVfR0VOX01BU0sgfCBMUlVfUkVGU19GTEFHUyk7XG4tXHRcdG5ld19mbGFncyB8PSAobmV3X2dlbiAmIzQzOyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuLVx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4mIzQzO1x0XHRscnVfc2V0X2dlbl9mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIG5ld19nZW4pO1xuJiM0MztcdFx0bHJ1X3NldF9yZWZzX2ZsYWdzKFx1MDAyNm5ld19mbGFncywgMCk7XG4mIzQzO1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiBcbiBcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XG4gXG5AQCAtMzMyMyw5ICYjNDM7MzMzMCw4IEBAIHN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gfVxuIFxuIHN0YXRpYyB2b2lkIHVwZGF0ZV9iYXRjaF9zaXplKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tXHRcdFx0ICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuKVxuJiM0MztcdFx0XHQgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4sIGludCB0eXBlKVxuIHtcbi1cdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xuIFx0aW50IHpvbmUgPSBmb2xpb196b25lbnVtKGZvbGlvKTtcbiBcdGludCBkZWx0YSA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiBcbkBAIC0zNTEyLDIyICYjNDM7MzUxOCwyNCBAQCBzdGF0aWMgYm9vbCBzdWl0YWJsZV90b19zY2FuKGludCB0b3RhbCwgaW50IHlvdW5nKVxuIH1cbiBcbiBzdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi1cdFx0c3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGJvb2wgZGlydHkpXG4mIzQzO1x0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgZGlydHkpXG4ge1xuLVx0aW50IG9sZF9nZW47XG4mIzQzO1x0aW50IG5ld19nZW4sIG9sZF9nZW4sIHR5cGU7XG4gXG4gXHRpZiAoIWZvbGlvKVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzO1x0bmV3X2dlbiA9IGxydV9nZW5fZnJvbV9zZXEoUkVBRF9PTkNFKGxydXZlYy1cdTAwM2VscnVnZW4ubWF4X3NlcSkpO1xuJiM0MztcbiBcdGlmIChkaXJ0eSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIFx1MDAyNlx1MDAyNlxuIFx0ICAgICEoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAgICFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpKVxuIFx0XHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbiBcbiBcdGlmICh3YWxrKSB7XG4tXHRcdG9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdFx0b2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sIFx1MDAyNnR5cGUsIFx1MDAyNnZtYS1cdTAwM2VmbGFncyk7XG4gXHRcdGlmIChvbGRfZ2VuIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgb2xkX2dlbiAhPSBuZXdfZ2VuKVxuLVx0XHRcdHVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcbiYjNDM7XHRcdFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4sIHR5cGUpO1xuIFx0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpKSB7XG4gXHRcdG9sZF9nZW4gPSBmb2xpb19scnVfZ2VuKGZvbGlvKTtcbiBcdFx0aWYgKG9sZF9nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXG5AQCAtMzU0OSw4ICYjNDM7MzU1Nyw2IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXHUwMDNlcHJpdmF0ZTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVx1MDAzZWxydXZlYyk7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdERFRklORV9NQVhfU0VRKHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xuIFx0dW5zaWduZWQgaW50IG5yO1xuIFx0cG1kX3QgcG1kdmFsO1xuIFxuQEAgLTM2MDEsNyAmIzQzOzM2MDcsNyBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKGxhc3QgIT0gZm9saW8pIHtcbi1cdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLVx1MDAzZXZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4mIzQzO1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCB3YWxrLVx1MDAzZWxydXZlYywgbGFzdCwgZGlydHkpO1xuIFxuIFx0XHRcdGxhc3QgPSBmb2xpbztcbiBcdFx0XHRkaXJ0eSA9IGZhbHNlO1xuQEAgLTM2MTQsNyAmIzQzOzM2MjAsNyBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0d2Fsay1cdTAwM2VtbV9zdGF0c1tNTV9MRUFGX1lPVU5HXSAmIzQzOz0gbnI7XG4gXHR9XG4gXG4tXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLVx1MDAzZXZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4mIzQzO1x0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIHdhbGstXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXHRsYXN0ID0gTlVMTDtcbiBcbiBcdGlmIChpIFx1MDAzYyBQVFJTX1BFUl9QVEUgXHUwMDI2XHUwMDI2IGdldF9uZXh0X3ZtYShQTURfTUFTSywgUEFHRV9TSVpFLCBhcmdzLCBcdTAwMjZzdGFydCwgXHUwMDI2ZW5kKSlcbkBAIC0zNjM3LDggJiM0MzszNjQzLDYgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcbiBcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVx1MDAzZXByaXZhdGU7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay1cdTAwM2VscnV2ZWMpO1xuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdCh3YWxrLVx1MDAzZWxydXZlYyk7XG4tXHRERUZJTkVfTUFYX1NFUSh3YWxrLVx1MDAzZWxydXZlYyk7XG4tXHRpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcbiBcbiBcdFZNX1dBUk5fT05fT05DRShwdWRfbGVhZigqcHVkKSk7XG4gXG5AQCAtMzY5Miw3ICYjNDM7MzY5Niw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhXG4gXHRcdFx0Z290byBuZXh0O1xuIFxuIFx0XHRpZiAobGFzdCAhPSBmb2xpbykge1xuLVx0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4mIzQzO1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC0zNzA2LDcgJiM0MzszNzEwLDcgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcbiBcdFx0aSA9IGkgXHUwMDNlIE1JTl9MUlVfQkFUQ0ggPyAwIDogZmluZF9uZXh0X2JpdChiaXRtYXAsIE1JTl9MUlVfQkFUQ0gsIGkpICYjNDM7IDE7XG4gXHR9IHdoaWxlIChpIFx1MDAzYz0gTUlOX0xSVV9CQVRDSCk7XG4gXG4tXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuJiM0MztcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xuIFx0c3Bpbl91bmxvY2socHRsKTtcbkBAIC00MjcwLDggJiM0Mzs0Mjc0LDYgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGZvbGlvX3BnZGF0KGZvbGlvKTtcbiBcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcbiBcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZTtcbi1cdHVuc2lnbmVkIGxvbmcgbWF4X3NlcTtcbi1cdGludCBnZW47XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKHB2bXctXHUwMDNlcHRsKTtcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2xydShmb2xpbyksIGZvbGlvKTtcbkBAIC00MzA4LDggJiM0Mzs0MzEwLDYgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxuIFxuIFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcbiBcdGxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7XG4tXHRtYXhfc2VxID0gUkVBRF9PTkNFKChscnV2ZWMpLVx1MDAzZWxydWdlbi5tYXhfc2VxKTtcbi1cdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7XG4gXHRtbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xuIFxuIFx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcbkBAIC00MzQxLDcgJiM0Mzs0MzQxLDcgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAobGFzdCAhPSBmb2xpbykge1xuLVx0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4mIzQzO1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXG4gXHRcdFx0bGFzdCA9IGZvbGlvO1xuIFx0XHRcdGRpcnR5ID0gZmFsc2U7XG5AQCAtNDM1MywxMyAmIzQzOzQzNTMsMTQgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxuIFx0XHR5b3VuZyAmIzQzOz0gbnI7XG4gXHR9XG4gXG4tXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuJiM0MztcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXG4gXHRsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTtcbiBcbiBcdC8qIGZlZWRiYWNrIGZyb20gcm1hcCB3YWxrZXJzIHRvIHBhZ2UgdGFibGUgd2Fsa2VycyAqL1xuIFx0aWYgKG1tX3N0YXRlIFx1MDAyNlx1MDAyNiBzdWl0YWJsZV90b19zY2FuKGksIHlvdW5nKSlcbi1cdFx0dXBkYXRlX2Jsb29tX2ZpbHRlcihtbV9zdGF0ZSwgbWF4X3NlcSwgcHZtdy1cdTAwM2VwbWQpO1xuJiM0MztcdFx0dXBkYXRlX2Jsb29tX2ZpbHRlcihtbV9zdGF0ZSwgUkVBRF9PTkNFKGxydXZlYy1cdTAwM2VscnVnZW4ubWF4X3NlcSksXG4mIzQzO1x0XHRcdFx0ICAgIHB2bXctXHUwMDNlcG1kKTtcbiBcbiBcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiBcbkBAIC00NzE2LDcgJiM0Mzs0NzE3LDcgQEAgc3RhdGljIGJvb2wgaXNvbGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2FcbiBcbiBcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqL1xuIFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKVxuLVx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIDApO1xuJiM0MztcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbiBcbiBcdHN1Y2Nlc3MgPSBscnVfZ2VuX2RlbF9mb2xpbyhscnV2ZWMsIGZvbGlvLCB0cnVlKTtcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghc3VjY2VzcywgZm9saW8pO1xuQEAgLTQ4MDksOSAmIzQzOzQ4MTAsOSBAQCBzdGF0aWMgaW50IGdldF90aWVyX2lkeChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKVxuIFx0ICogVGhpcyB2YWx1ZSBpcyBjaG9zZW4gYmVjYXVzZSBhbnkgb3RoZXIgdGllciB3b3VsZCBoYXZlIGF0IGxlYXN0IHR3aWNlXG4gXHQgKiBhcyBtYW55IHJlZmF1bHRzIGFzIHRoZSBmaXJzdCB0aWVyLlxuIFx0ICovXG4tXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgMCwgMiwgXHUwMDI2c3ApO1xuLVx0Zm9yICh0aWVyID0gMTsgdGllciBcdTAwM2MgTUFYX05SX1RJRVJTOyB0aWVyJiM0MzsmIzQzOykge1xuLVx0XHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdGllciwgMywgXHUwMDI2cHYpO1xuJiM0MztcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01JTiwgMiwgXHUwMDI2c3ApO1xuJiM0MztcdGZvciAodGllciA9IExSVV9USUVSX01JTiAmIzQzOyAxOyB0aWVyIFx1MDAzYz0gTFJVX1RJRVJfTUFYOyB0aWVyJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIHRpZXIsIDMsIFx1MDAyNnB2KTtcbiBcdFx0aWYgKCFwb3NpdGl2ZV9jdHJsX2VycihcdTAwMjZzcCwgXHUwMDI2cHYpKVxuIFx0XHRcdGJyZWFrO1xuIFx0fVxuQEAgLTQ4MzIsOCAmIzQzOzQ4MzMsMTAgQEAgc3RhdGljIGludCBnZXRfdHlwZV90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXG4gXHQgKiBDb21wYXJlIHRoZSBzdW0gb2YgYWxsIHRpZXJzIG9mIGFub24gd2l0aCB0aGF0IG9mIGZpbGUgdG8gZGV0ZXJtaW5lXG4gXHQgKiB3aGljaCB0eXBlIHRvIHNjYW4uXG4gXHQgKi9cbi1cdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIE1BWF9OUl9USUVSUywgc3dhcHBpbmVzcywgXHUwMDI2c3ApO1xuLVx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTUFYX05SX1RJRVJTLCBNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3MsIFx1MDAyNnB2KTtcbiYjNDM7XHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCxcbiYjNDM7XHRcdCAgICAgIHN3YXBwaW5lc3MsIFx1MDAyNnNwKTtcbiYjNDM7XHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCxcbiYjNDM7XHRcdCAgICAgIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgXHUwMDI2cHYpO1xuIFxuIFx0cmV0dXJuIHBvc2l0aXZlX2N0cmxfZXJyKFx1MDAyNnNwLCBcdTAwMjZwdik7XG4gfVxuQEAgLTQ5MzIsOCAmIzQzOzQ5MzUsMTAgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdH1cbiBcbiBcdFx0LyogZG9uJiMzOTt0IGFkZCByZWplY3RlZCBmb2xpb3MgdG8gdGhlIG9sZGVzdCBnZW5lcmF0aW9uICovXG4tXHRcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSlcbi1cdFx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfYWN0aXZlKSk7XG4mIzQzO1x0XHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pIHtcbiYjNDM7XHRcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbiYjNDM7XHRcdFx0Zm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHRtb3ZlX2ZvbGlvc190b19scnUoXHUwMDI2bGlzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtMUlVfR0VOX0VOQUJMRUQmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TUlHUkFUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bHJ1X2dlbl9sb29rX2Fyb3VuZCYjMzQ7LAogICAgJiMzNDtmb2xpb19taWdyYXRlX2ZsYWdzJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplJiMzNDssCiAgICAmIzM0O2xydV9nZW5fcmVwYXJlbnRfbWVtY2cmIzM0OywKICAgICYjMzQ7bHJ1X2dlbl9zb2Z0X3JlY2xhaW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBNdWx0aS1HZW4gTFJVIChNR0xSVSksIHBhZ2UgcmVmZXJlbmNlIGNvdW50aW5nLCBmb2xpbyBmbGFncyBtYW5hZ2VtZW50LCBmb2xpbyBtaWdyYXRpb24sIGFuZCBtZW1jZyBMUlUgc2l6ZSBhY2NvdW50aW5nLiBUaGVzZSBmdW5jdGlvbmFsIGNoYW5nZXMgYWZmZWN0IHBhZ2UgcmVjbGFtYXRpb24sIGFnaW5nLCBhbmQgbWlncmF0aW9uIGJlaGF2aW9yIGluIHJlYWNoYWJsZSBjb3JlIG1tIGNvZGUgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0ZDcwZDFjYjc1NzEzNDIyODZmNDZjM2I1YTg4ZDQ5ZWY2NDlhZGI3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAwNDo0MDo0OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKaW5kZXggN2QxYzBjZTE4OWE4OC4uODY3ODBlZjY1ZWFmYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKQEAgLTExMyw3ICYjNDM7MTEzLDcgQEAgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgewogCS8qIEZpZWxkcyB3aGljaCBnZXQgdXBkYXRlZCBvZnRlbiBhdCB0aGUgZW5kLiAqLwogCXN0cnVjdCBscnV2ZWMJCWxydXZlYzsKIAlDQUNIRUxJTkVfUEFERElORyhfcGFkMl8pOwotCXVuc2lnbmVkIGxvbmcJCWxydV96b25lX3NpemVbTUFYX05SX1pPTkVTXVtOUl9MUlVfTElTVFNdOwomIzQzOwlsb25nCQkJbHJ1X3pvbmVfc2l6ZVtNQVhfTlJfWk9ORVNdW05SX0xSVV9MSVNUU107CiAJc3RydWN0IG1lbV9jZ3JvdXBfcmVjbGFpbV9pdGVyCWl0ZXI7CiAKIAkvKgpAQCAtOTAyLDEwICYjNDM7OTAyLDE1IEBAIHN0YXRpYyBpbmxpbmUKIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCWVudW0gbHJ1X2xpc3QgbHJ1LCBpbnQgem9uZV9pZHgpCiB7CiYjNDM7CWxvbmcgdmFsOwogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejsKIAogCW16ID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7Ci0JcmV0dXJuIFJFQURfT05DRShtei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7CiYjNDM7CXZhbCA9IFJFQURfT05DRShtei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UodmFsICZsdDsgMCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIHZhbDsKIH0KIAogdm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaAppbmRleCA2MjFjODY1M2Q4ZjdlLi5hYjY5Yjk5MzA4OTNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmgKQEAgLTMwLDYgJiM0MzszMCwxNyBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19pc19maWxlX2xydShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXJldHVybiAhZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1IC0gU2hvdWxkIHRoZSBmb2xpbyBiZSBvbiBhIGZpbGUgTFJVIG9yIGFub24gTFJVPwomIzQzOyAqIEBmbGFnczogVGhlIGZvbGlvJiMzOTtzIGZsYWdzLgomIzQzOyAqCiYjNDM7ICogSnVzdCBsaWtlIGZvbGlvX2lzX2ZpbGVfbHJ1IGJ1dCB0YWtlIHRoZSBmb2xpbyBmbGFncyBkaXJlY3RseSBpbnN0ZWFkLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZsYWdzKQomIzQzO3sKJiM0MzsJcmV0dXJuICF0ZXN0X2JpdChQR19zd2FwYmFja2VkLCBmbGFncyk7CiYjNDM7fQomIzQzOwogc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJCQllbnVtIGxydV9saXN0IGxydSwgZW51bSB6b25lX3R5cGUgemlkLAogCQkJCWxvbmcgbnJfcGFnZXMpCkBAIC0xNDIsMTAgJiM0MzsxNTMsNjYgQEAgc3RhdGljIGlubGluZSBpbnQgbHJ1X3RpZXJfZnJvbV9yZWZzKGludCByZWZzLCBib29sIHdvcmtpbmdzZXQpCiAJcmV0dXJuIHdvcmtpbmdzZXQgPyBNQVhfTlJfVElFUlMgLSAxIDogb3JkZXJfYmFzZV8yKHJlZnMpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzOy8qKgomIzQzOyAqIGxydV9zZXRfZ2VuX2ZsYWdzIC0gU2V0IHRoZSBMUlUgZ2VuZXJhdGlvbiBudW1iZXIgdG8gc3BlY2lmaWVkIGZvbGlvIGZsYWdzLgomIzQzOyAqIEBmbGFnczogcG9pbnRlciB0byB0aGUgZm9saW8gZmxhZ3MKJiM0MzsgKiBAZ2VuOiBnZW5lcmF0aW9uIG51bWJlciwgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfc2V0X2dlbl9mbGFncyh1bnNpZ25lZCBsb25nICpmbGFncywgaW50IGdlbikKJiM0Mzt7CiYjNDM7CUJVSUxEX0JVR19PTihMUlVfR0VOX01BU0sgJmFtcDsgTFJVX1JFRlNfTUFTSyk7CiYjNDM7CVZNX1dBUk5fT05fT05DRShnZW4gJmd0Oz0gTUFYX05SX0dFTlMgfHwgZ2VuICZsdDsgMCk7CiYjNDM7CS8qIFN0b3JlIGdlbiBvZmZzZXQgYnkgMSwgemVybyBtZWFucyB0aGUgZm9saW8gaXMgb2ZmLWxpc3QuICovCiYjNDM7CSpmbGFncyAmYW1wOz0gfkxSVV9HRU5fTUFTSzsKJiM0MzsJKmZsYWdzIHw9IChnZW4gJiM0MzsgMVVMKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBscnVfZ2V0X2dlbl9mbGFncyAtIFJldHVybiB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIGZyb20gZm9saW8gZmxhZ3MuCiYjNDM7ICogQGZsYWdzOiBmb2xpbyBmbGFncwomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLiBSZXR1cm5zCiYjNDM7ICogLTEgaWYgdGhlIGZsYWdzIGluZGljYXRlIHRoZSBmb2xpbyBpcyBvZmYgdGhlIGxpc3QgKGUuZy4sIGlzb2xhdGVkKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGludCBscnVfZ2V0X2dlbl9mbGFncyh1bnNpZ25lZCBsb25nIGZsYWdzKQomIzQzO3sKJiM0MzsJaW50IGdlbiA9ICgoZmxhZ3MgJmFtcDsgTFJVX0dFTl9NQVNLKSAmZ3Q7Jmd0OyBMUlVfR0VOX1BHT0ZGKSAtIDE7CiYjNDM7CiYjNDM7CS8qIEV4Y2x1ZGUgdGhlIGxlZ2FsIC0xIGZyb20gdGhlIHVuc2lnbmVkIE1BWF9OUl9HRU5TIGNvbXBhcmlzb24gKi8KJiM0MzsJVk1fV0FSTl9PTl9PTkNFKGdlbiAhPSAtMSAmYW1wOyZhbXA7IGdlbiAmZ3Q7PSBNQVhfTlJfR0VOUyk7CiYjNDM7CXJldHVybiBnZW47CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGxydV9zZXRfcmVmc19mbGFncyAtIFNldCB0aGUgTFJVIHJlZmVyZW5jZWQgY291bnQgdG8gZm9saW8gZmxhZ3MuCiYjNDM7ICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFncwomIzQzOyAqIEByZWZzOiByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IG51bWJlciwgYmV0d2VlbiAwIGFuZCBMUlVfUkVGU19NQVgsIGluY2x1c2l2ZS4KJiM0MzsgKgomIzQzOyAqIEZvciBNR0xSVSwgUEdfcmVmZXJlbmNlZCBob2xkcyB0aGUgZmlyc3QgcmVmLCBhbmQgdGhlIGV4dHJhIGJpdHMgaG9sZCB0aGUKJiM0MzsgKiByZW1haW5pbmcgcmVmcy4gRm9yIGNsYXNzaWNhbCBMUlUgdGhlIGV4dHJhIGJpdHMgYXJlIG5vdCB1c2VkLCBzbyBpdCBjYW4KJiM0MzsgKiBhbHNvIGJlIHNlZW4gYXMgdGhlIHJlZnMgY291bnQgbmV2ZXIgZXhjZWVkcyAxLiBJbiBib3RoIGNhc2VzLCByZWZzID09IDEKJiM0MzsgKiBtZWFucyBQR19yZWZlcmVuY2VkIGlzIHNldCBhbmQgdGhlIGV4dHJhIGJpdHMgYXJlIHplcm8sIGFuZCByZWZzID09IDAgbWVhbnMKJiM0MzsgKiBQR19yZWZlcmVuY2VkIGFuZCB0aGUgZXh0cmEgYml0cyBhcmUgYWxsIHVuc2V0LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfc2V0X3JlZnNfZmxhZ3ModW5zaWduZWQgbG9uZyAqZmxhZ3MsIHVuc2lnbmVkIGludCByZWZzKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwomIzQzOwlWTV9XQVJOX09OX09OQ0UocmVmcyAmZ3Q7IExSVV9SRUZTX01BWCk7CiYjNDM7CUJVSUxEX0JVR19PTihMUlVfUkVGU19NQVggIT0gKExSVV9SRUZTX01BU0sgJmd0OyZndDsgTFJVX1JFRlNfUEdPRkYpICYjNDM7IDEpOwogCiYjNDM7CSpmbGFncyAmYW1wOz0gfkxSVV9SRUZTX0ZMQUdTOwomIzQzOwlpZiAoIXJlZnMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CSpmbGFncyB8PSAoQklUKFBHX3JlZmVyZW5jZWQpIHwgKChyZWZzIC0gMVVMKSAmbHQ7Jmx0OyBMUlVfUkVGU19QR09GRikpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBscnVfZ2V0X3JlZnNfZmxhZ3MgLSBSZXR1cm4gTFJVIHJlZmVyZW5jZWQgLyBhY2Nlc3MgY291bnQgZnJvbSBmb2xpbyBmbGFncy4KJiM0MzsgKiBAZmxhZ3M6IGZvbGlvIGZsYWdzCiYjNDM7ICoKJiM0MzsgKiBSZWFkcyB0aGUgTFJVIHJlZmVyZW5jZWQgY291bnQgc2V0IGJ5IGxydV9zZXRfcmVmc19mbGFncygpLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGxydV9nZXRfcmVmc19mbGFncyh1bnNpZ25lZCBsb25nIGZsYWdzKQomIzQzO3sKIAlpZiAoIShmbGFncyAmYW1wOyBCSVQoUEdfcmVmZXJlbmNlZCkpKQogCQlyZXR1cm4gMDsKIAkvKgpAQCAtMTU1LDExICYjNDM7MjIyLDI0IEBAIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJcmV0dXJuICgoZmxhZ3MgJmFtcDsgTFJVX1JFRlNfTUFTSykgJmd0OyZndDsgTFJVX1JFRlNfUEdPRkYpICYjNDM7IDE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwomIzQzOwlyZXR1cm4gbHJ1X2dldF9yZWZzX2ZsYWdzKFJFQURfT05DRSgqY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKSk7CiYjNDM7fQogCi0JcmV0dXJuICgoZmxhZ3MgJmFtcDsgTFJVX0dFTl9NQVNLKSAmZ3Q7Jmd0OyBMUlVfR0VOX1BHT0ZGKSAtIDE7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgcmVmcykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCW5ld19mbGFncyA9IG9sZF9mbGFnczsKJiM0MzsJCWxydV9zZXRfcmVmc19mbGFncygmYW1wO25ld19mbGFncywgcmVmcyk7CiYjNDM7CX0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksICZhbXA7b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X2dlbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIGxydV9nZXRfZ2VuX2ZsYWdzKFJFQURfT05DRSgqY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2lzX2FjdGl2ZShjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBnZW4pCkBAIC0yNzAsNyAmIzQzOzM1MCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2FkZF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpOwogCWZsYWdzID0gKGdlbiAmIzQzOyAxVUwpICZsdDsmbHQ7IExSVV9HRU5fUEdPRkY7CiAJLyogc2VlIHRoZSBjb21tZW50IG9uIE1JTl9OUl9HRU5TIGFib3V0IFBHX2FjdGl2ZSAqLwotCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX0dFTl9NQVNLIHwgQklUKFBHX2FjdGl2ZSksIGZsYWdzKTsKJiM0MzsJc2V0X21hc2tfYml0cyhmb2xpb19mbGFncyhmb2xpbywgMCksIExSVV9HRU5fTUFTSyB8IEJJVChQR19hY3RpdmUpLCBmbGFncyk7CiAKIAlscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIC0xLCBnZW4pOwogCS8qIGZvciBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoKSAqLwpAQCAtMjk1LDcgJiM0MzszNzUsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCiAJLyogZm9yIGZvbGlvX21pZ3JhdGVfZmxhZ3MoKSAqLwogCWZsYWdzID0gIXJlY2xhaW1pbmcgJmFtcDsmYW1wOyBscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIGdlbikgPyBCSVQoUEdfYWN0aXZlKSA6IDA7Ci0JZmxhZ3MgPSBzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9HRU5fTUFTSywgZmxhZ3MpOwomIzQzOwlmbGFncyA9IHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0ssIGZsYWdzKTsKIAlnZW4gPSAoKGZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwogCiAJbHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBnZW4sIC0xKTsKQEAgLTMwNCwxMSAmIzQzOzM4NCwxOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZCkKJiM0MzsvKioKJiM0MzsgKiBmb2xpb19taWdyYXRlX2xydV9yZWZzIC0gY29weSB0aGUgcmVmZXJlbmNlIHN0YXRlIHRvIGEgbmV3IGZvbGlvCiYjNDM7ICogQG5ldzogdGhlIGRlc3RpbmF0aW9uIGZvbGlvCiYjNDM7ICogQG9sZDogdGhlIHNvdXJjZSBmb2xpbwomIzQzOyAqCiYjNDM7ICogVHJhbnNmZXIgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBAbmV3IGR1cmluZyBtaWdyYXRpb246IHRoZSBNR0xSVQomIzQzOyAqIHJlZnMgY291bnQsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkLCBvciBqdXN0IFBHX3JlZmVyZW5jZWQgZm9yIHRoZQomIzQzOyAqIGFjdGl2ZS9pbmFjdGl2ZSBMUlUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKQogewotCXVuc2lnbmVkIGxvbmcgcmVmcyA9IFJFQURfT05DRShvbGQtJmd0O2ZsYWdzLmYpICZhbXA7IExSVV9SRUZTX01BU0s7Ci0KLQlzZXRfbWFza19iaXRzKCZhbXA7bmV3LSZndDtmbGFncy5mLCBMUlVfUkVGU19NQVNLLCByZWZzKTsKJiM0MzsJQlVJTERfQlVHX09OKExSVV9SRUZTX01BU0sgJmFtcDsgQklUKFBHX3JlZmVyZW5jZWQpKTsKJiM0MzsJZm9saW9fc2V0X2xydV9yZWZzKG5ldywgZm9saW9fbHJ1X3JlZnMob2xkKSk7CiB9CiAjZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi8KIApAQCAtMzM3LDkgJiM0Mzs0MjUsMTAgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZCkKIHsKLQomIzQzOwlpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKG9sZCkpCiYjNDM7CQlmb2xpb19zZXRfcmVmZXJlbmNlZChuZXcpOwogfQogI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCmluZGV4IDk0ZjljM2ZmNTQxNjAuLjliMjdjZjUzYmRiYzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaApAQCAtNDkyLDExICYjNDM7NDkyLDE0IEBAIGVudW0gbHJ1dmVjX2ZsYWdzIHsKICAqIGZvbGlvLSZndDtmbGFncywgbWFza2VkIGJ5IExSVV9SRUZTX01BU0suCiAgKi8KICNkZWZpbmUgTUFYX05SX1RJRVJTCQk0VQomIzQzOyNkZWZpbmUgTFJVX1RJRVJfTUlOCQkwVQomIzQzOyNkZWZpbmUgTFJVX1RJRVJfTUFYCQkoTUFYX05SX1RJRVJTIC0gMSkKIAogI2lmbmRlZiBfX0dFTkVSQVRJTkdfQk9VTkRTX0gKIAogI2RlZmluZSBMUlVfR0VOX01BU0sJCSgoQklUKExSVV9HRU5fV0lEVEgpIC0gMSkgJmx0OyZsdDsgTFJVX0dFTl9QR09GRikKICNkZWZpbmUgTFJVX1JFRlNfTUFTSwkJKChCSVQoTFJVX1JFRlNfV0lEVEgpIC0gMSkgJmx0OyZsdDsgTFJVX1JFRlNfUEdPRkYpCiYjNDM7I2RlZmluZSBMUlVfUkVGU19NQVgJCUJJVChMUlVfUkVGU19XSURUSCkKIAogLyoKICAqIEZvciBmb2xpb3MgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzLApkaWZmIC0tZ2l0IGEvbW0vZm9saW8uYyBiL21tL2ZvbGlvLmMKaW5kZXggYzAyZGNlYTljMDNjMi4uZmI4NzRmZTQ5MmIyYiAxMDA2NDQKLS0tIGEvbW0vZm9saW8uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9mb2xpby5jCkBAIC0zNTMsMjYgJiM0MzszNTMsMjggQEAgc3RhdGljIHZvaWQgX19scnVfY2FjaGVfYWN0aXZhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykKIAogc3RhdGljIHZvaWQgbHJ1X2dlbl9pbmNfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewotCXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwomIzQzOwl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpOwomIzQzOwlpbnQgcmVmczsKIAogCWlmIChmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSkKIAkJcmV0dXJuOwogCiAJLyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovCi0JaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKSB7Ci0JCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTsKJiM0MzsJaWYgKCFmb2xpb19scnVfcmVmcyhmb2xpbykpIHsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7CiAJCXJldHVybjsKIAl9CiAKIAlkbyB7Ci0JCWlmICgob2xkX2ZsYWdzICZhbXA7IExSVV9SRUZTX01BU0spID09IExSVV9SRUZTX01BU0spIHsKJiM0MzsJCW5ld19mbGFncyA9IG9sZF9mbGFnczsKJiM0MzsJCXJlZnMgPSBscnVfZ2V0X3JlZnNfZmxhZ3Mob2xkX2ZsYWdzKTsKJiM0MzsJCWlmIChyZWZzID09IExSVV9SRUZTX01BWCkgewogCQkJaWYgKCFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKQogCQkJCWZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTsKIAkJCXJldHVybjsKIAkJfQotCi0JCW5ld19mbGFncyA9IG9sZF9mbGFncyAmIzQzOyBCSVQoTFJVX1JFRlNfUEdPRkYpOwotCX0gd2hpbGUgKCF0cnlfY21weGNoZygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiYjNDM7CQlscnVfc2V0X3JlZnNfZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIHJlZnMgJiM0MzsgMSk7CiYjNDM7CX0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksICZhbXA7b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTsKIH0KIAogc3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pCkBAIC0zODQsNyAmIzQzOzM4Niw4IEBAIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCWlmIChnZW4gJmx0OyAwKQogCQlyZXR1cm4gdHJ1ZTsKIAotCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MgfCBCSVQoUEdfd29ya2luZ3NldCksIDApOwomIzQzOwlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwomIzQzOwlmb2xpb19jbGVhcl93b3JraW5nc2V0KGZvbGlvKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlzZXEgPSBSRUFEX09OQ0UoZm9saW9fbHJ1dmVjKGZvbGlvKS0mZ3Q7bHJ1Z2VuLm1pbl9zZXFbdHlwZV0pOwpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDg1NmE3ZDA3NTg2Y2MuLjBhNjVhYjhkZjI3YTkgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTE1MjksMjggJiM0MzsxNTI5LDEyIEBAIHZvaWQgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIGxydV9saXN0IGxydSwKIAkJCQlpbnQgemlkLCBsb25nIG5yX3BhZ2VzKQogewogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejsKLQl1bnNpZ25lZCBsb25nICpscnVfc2l6ZTsKLQlsb25nIHNpemU7CiAKIAlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKQogCQlyZXR1cm47CiAKIAlteiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpOwotCWxydV9zaXplID0gJmFtcDttei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6aWRdW2xydV07Ci0KLQlpZiAobnJfcGFnZXMgJmx0OyAwKQotCQkqbHJ1X3NpemUgJiM0Mzs9IG5yX3BhZ2VzOwotCi0Jc2l6ZSA9ICpscnVfc2l6ZTsKLQlpZiAoV0FSTl9PTkNFKHNpemUgJmx0OyAwLAotCQkmIzM0OyVzKCVwLCAlZCwgJWxkKTogbHJ1X3NpemUgJWxkXG4mIzM0OywKLQkJX19mdW5jX18sIGxydXZlYywgbHJ1LCBucl9wYWdlcywgc2l6ZSkpIHsKLQkJVk1fQlVHX09OKDEpOwotCQkqbHJ1X3NpemUgPSAwOwotCX0KLQotCWlmIChucl9wYWdlcyAmZ3Q7IDApCi0JCSpscnVfc2l6ZSAmIzQzOz0gbnJfcGFnZXM7CiYjNDM7CW16LSZndDtscnVfem9uZV9zaXplW3ppZF1bbHJ1XSAmIzQzOz0gbnJfcGFnZXM7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jCmluZGV4IDE1YjQ1ODMyYmNmYTcuLmEzNjlkMGM5NWMzODYgMTAwNjQ0Ci0tLSBhL21tL21pZ3JhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9taWdyYXRlLmMKQEAgLTc3Niw4ICYjNDM7Nzc2LDkgQEAgdm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJaW50IGNwdXBpZDsKIAotCWlmIChmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKQotCQlmb2xpb19zZXRfcmVmZXJlbmNlZChuZXdmb2xpbyk7CiYjNDM7CS8qIENvcHkgdGhlIHJlZmVyZW5jZSBzdGF0ZSwgaW5jbHVkaW5nIFBHX3JlZmVyZW5jZWQgKi8KJiM0MzsJZm9saW9fbWlncmF0ZV9scnVfcmVmcyhuZXdmb2xpbywgZm9saW8pOwomIzQzOwogCWlmIChmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSkKIAkJZm9saW9fbWFya191cHRvZGF0ZShuZXdmb2xpbyk7CiAJaWYgKGZvbGlvX3Rlc3RfY2xlYXJfYWN0aXZlKGZvbGlvKSkgewpAQCAtODA3LDcgJiM0Mzs4MDgsNiBAQCB2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbykKIAlpZiAoZm9saW9fdGVzdF9pZGxlKGZvbGlvKSkKIAkJZm9saW9fc2V0X2lkbGUobmV3Zm9saW8pOwogCi0JZm9saW9fbWlncmF0ZV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7CiAJLyoKIAkgKiBDb3B5IE5VTUEgaW5mb3JtYXRpb24gdG8gdGhlIG5ldyBwYWdlLCB0byBwcmV2ZW50IG92ZXItZWFnZXIKIAkgKiBmdXR1cmUgbWlncmF0aW9ucyBvZiB0aGlzIHNhbWUgcGFnZS4KZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggZmRkMTMyOTlhMDRhOS4uZTdkMzc5YzZlNzAzYSAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTg0MywxOSAmIzQzOzg0MywyMiBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpCiAJaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pICZhbXA7JmFtcDsgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpIHsKIAkJLyogQWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuICovCiAJCWlmIChpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIHZtYV9mbGFncykpIHsKLQkJCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7CiYjNDM7CQkJZm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pOwomIzQzOwkJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJfQogCi0JCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKIAkvKiBQcm9tb3RlIG9uIHNlY29uZCBhY2Nlc3MgKi8KLQlpZiAoZm9saW9fbHJ1X3JlZnMoZm9saW8pICZndDsgMSkKLQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTsKLQllbHNlCiYjNDM7CWlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgJmd0OyAxKSB7CiYjNDM7CQlmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7CiYjNDM7CQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwomIzQzOwl9IGVsc2UgewogCQlmb2xpb19tYXJrX2FjY2Vzc2VkKGZvbGlvKTsKJiM0MzsJfQogCXJldHVybiB0cnVlOwogfQogI2Vsc2UKQEAgLTMxOTUsOCAmIzQzOzMxOTgsOCBAQCBzdHJ1Y3QgY3RybF9wb3MgewogCWludCBnYWluOwogfTsKIAotc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllciwgaW50IGdhaW4sCi0JCQkgIHN0cnVjdCBjdHJsX3BvcyAqcG9zKQomIzQzO3N0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXJfbWluLAomIzQzOwkJCSAgaW50IHRpZXJfbWF4LCBpbnQgZ2Fpbiwgc3RydWN0IGN0cmxfcG9zICpwb3MpCiB7CiAJaW50IGk7CiAJc3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9ICZhbXA7bHJ1dmVjLSZndDtscnVnZW47CkBAIC0zMjA1LDcgJiM0MzszMjA4LDcgQEAgc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllciwgaW50IGdhaW4sCiAJcG9zLSZndDtnYWluID0gZ2FpbjsKIAlwb3MtJmd0O3JlZmF1bHRlZCA9IHBvcy0mZ3Q7dG90YWwgPSAwOwogCi0JZm9yIChpID0gdGllciAlIE1BWF9OUl9USUVSUzsgaSAmbHQ7PSBtaW4odGllciwgTUFYX05SX1RJRVJTIC0gMSk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CWZvciAoaSA9IHRpZXJfbWluOyBpICZsdDs9IHRpZXJfbWF4OyBpJiM0MzsmIzQzOykgewogCQlwb3MtJmd0O3JlZmF1bHRlZCAmIzQzOz0gbHJ1Z2VuLSZndDthdmdfcmVmYXVsdGVkW3R5cGVdW2ldICYjNDM7CiAJCQkJICBhdG9taWNfbG9uZ19yZWFkKCZhbXA7bHJ1Z2VuLSZndDtyZWZhdWx0ZWRbaGlzdF1bdHlwZV1baV0pOwogCQlwb3MtJmd0O3RvdGFsICYjNDM7PSBscnVnZW4tJmd0O2F2Z190b3RhbFt0eXBlXVtpXSAmIzQzOwpAQCAtMzI2NiwxMSAmIzQzOzMyNjksMTEgQEAgc3RhdGljIGJvb2wgcG9zaXRpdmVfY3RybF9lcnIoc3RydWN0IGN0cmxfcG9zICpzcCwgc3RydWN0IGN0cmxfcG9zICpwdikKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qIHByb21vdGUgcGFnZXMgYWNjZXNzZWQgdGhyb3VnaCBwYWdlIHRhYmxlcyAqLwotc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpCiYjNDM7c3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBpbnQgKnR5cGUsCiYjNDM7CQkJICAgIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpCiB7Ci0JdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby0mZ3Q7ZmxhZ3MuZik7Ci0KLQlWTV9XQVJOX09OX09OQ0UoZ2VuICZndDs9IE1BWF9OUl9HRU5TKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTsKJiM0MzsJaW50IG9sZF9nZW47CiAKIAkvKgogCSAqIFNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUywgYW5kIGFjdGl2YXRlIGZpbGUtYmFja2VkCkBAIC0zMjc5LDIwICYjNDM7MzI4MiwyNSBAQCBzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYQogCSAqLwogCWlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSAmYW1wOyZhbXA7ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pICZhbXA7JmFtcDsKIAkgICAgIWlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkgewotCQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7CiYjNDM7CQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJZG8gewomIzQzOwkJb2xkX2dlbiA9IGxydV9nZXRfZ2VuX2ZsYWdzKG9sZF9mbGFncyk7CiYjNDM7CQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7CiYjNDM7CiAJCS8qIGxydV9nZW5fZGVsX2ZvbGlvKCkgaGFzIGlzb2xhdGVkIHRoaXMgcGFnZT8gKi8KLQkJaWYgKCEob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykpCi0JCQlyZXR1cm4gLTE7CiYjNDM7CQlpZiAob2xkX2dlbiAmbHQ7IDApCiYjNDM7CQkJYnJlYWs7CiAKLQkJbmV3X2ZsYWdzID0gb2xkX2ZsYWdzICZhbXA7IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpOwotCQluZXdfZmxhZ3MgfD0gKChnZW4gJiM0MzsgMVVMKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGKSB8IEJJVChQR193b3JraW5nc2V0KTsKLQl9IHdoaWxlICghdHJ5X2NtcHhjaGcoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwomIzQzOwkJbHJ1X3NldF9nZW5fZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIG5ld19nZW4pOwomIzQzOwkJbHJ1X3NldF9yZWZzX2ZsYWdzKCZhbXA7bmV3X2ZsYWdzLCAwKTsKJiM0MzsJCW5ld19mbGFncyB8PSBCSVQoUEdfd29ya2luZ3NldCk7CiYjNDM7CX0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksICZhbXA7b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTsKIAotCXJldHVybiAoKG9sZF9mbGFncyAmYW1wOyBMUlVfR0VOX01BU0spICZndDsmZ3Q7IExSVV9HRU5fUEdPRkYpIC0gMTsKJiM0MzsJKnR5cGUgPSBmb2xpb19mbGFnc19pc19maWxlX2xydSgmYW1wO29sZF9mbGFncyk7CiYjNDM7CXJldHVybiBvbGRfZ2VuOwogfQogCiAvKiBwcm90ZWN0IHBhZ2VzIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycyAqLwpAQCAtMzMwMSwyMSAmIzQzOzMzMDksMjAgQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbykKIAlpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTsKIAlzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gJmFtcDtscnV2ZWMtJmd0O2xydWdlbjsKIAlpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLSZndDttaW5fc2VxW3R5cGVdKTsKLQl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLSZndDtmbGFncy5mKTsKLQotCVZNX1dBUk5fT05fT05DRV9GT0xJTyghKG9sZF9mbGFncyAmYW1wOyBMUlVfR0VOX01BU0spLCBmb2xpbyk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7CiAKIAlkbyB7Ci0JCW5ld19nZW4gPSAoKG9sZF9mbGFncyAmYW1wOyBMUlVfR0VOX01BU0spICZndDsmZ3Q7IExSVV9HRU5fUEdPRkYpIC0gMTsKJiM0MzsJCW5ld19nZW4gPSBscnVfZ2V0X2dlbl9mbGFncyhvbGRfZmxhZ3MpOwomIzQzOwogCQkvKiBmb2xpb191cGRhdGVfZ2VuKCkgaGFzIHByb21vdGVkIHRoaXMgcGFnZT8gKi8KIAkJaWYgKG5ld19nZW4gJmd0Oz0gMCAmYW1wOyZhbXA7IG5ld19nZW4gIT0gb2xkX2dlbikKIAkJCXJldHVybiBuZXdfZ2VuOwogCiYjNDM7CQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7CiAJCW5ld19nZW4gPSAob2xkX2dlbiAmIzQzOyAxKSAlIE1BWF9OUl9HRU5TOwotCi0JCW5ld19mbGFncyA9IG9sZF9mbGFncyAmYW1wOyB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTsKLQkJbmV3X2ZsYWdzIHw9IChuZXdfZ2VuICYjNDM7IDFVTCkgJmx0OyZsdDsgTFJVX0dFTl9QR09GRjsKLQl9IHdoaWxlICghdHJ5X2NtcHhjaGcoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwomIzQzOwkJbHJ1X3NldF9nZW5fZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIG5ld19nZW4pOwomIzQzOwkJbHJ1X3NldF9yZWZzX2ZsYWdzKCZhbXA7bmV3X2ZsYWdzLCAwKTsKJiM0MzsJfSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwogCiAJbHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTsKIApAQCAtMzMyMyw5ICYjNDM7MzMzMCw4IEBAIHN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiB9CiAKIHN0YXRpYyB2b2lkIHVwZGF0ZV9iYXRjaF9zaXplKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBmb2xpbyAqZm9saW8sCi0JCQkgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4pCiYjNDM7CQkJICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuLCBpbnQgdHlwZSkKIHsKLQlpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTsKIAlpbnQgem9uZSA9IGZvbGlvX3pvbmVudW0oZm9saW8pOwogCWludCBkZWx0YSA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKIApAQCAtMzUxMiwyMiAmIzQzOzM1MTgsMjQgQEAgc3RhdGljIGJvb2wgc3VpdGFibGVfdG9fc2NhbihpbnQgdG90YWwsIGludCB5b3VuZykKIH0KIAogc3RhdGljIHZvaWQgd2Fsa191cGRhdGVfZm9saW8oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCXN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBib29sIGRpcnR5KQomIzQzOwkJc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIGRpcnR5KQogewotCWludCBvbGRfZ2VuOwomIzQzOwlpbnQgbmV3X2dlbiwgb2xkX2dlbiwgdHlwZTsKIAogCWlmICghZm9saW8pCiAJCXJldHVybjsKIAomIzQzOwluZXdfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShSRUFEX09OQ0UobHJ1dmVjLSZndDtscnVnZW4ubWF4X3NlcSkpOwomIzQzOwogCWlmIChkaXJ0eSAmYW1wOyZhbXA7ICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSAmYW1wOyZhbXA7CiAJICAgICEoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSAmYW1wOyZhbXA7IGZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykgJmFtcDsmYW1wOwogCSAgICAgICFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpKQogCQlmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTsKIAogCWlmICh3YWxrKSB7Ci0JCW9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuLCAmYW1wO3ZtYS0mZ3Q7ZmxhZ3MpOwomIzQzOwkJb2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sICZhbXA7dHlwZSwgJmFtcDt2bWEtJmd0O2ZsYWdzKTsKIAkJaWYgKG9sZF9nZW4gJmd0Oz0gMCAmYW1wOyZhbXA7IG9sZF9nZW4gIT0gbmV3X2dlbikKLQkJCXVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTsKJiM0MzsJCQl1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbiwgdHlwZSk7CiAJfSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCAmYW1wO3ZtYS0mZ3Q7ZmxhZ3MpKSB7CiAJCW9sZF9nZW4gPSBmb2xpb19scnVfZ2VuKGZvbGlvKTsKIAkJaWYgKG9sZF9nZW4gJmd0Oz0gMCAmYW1wOyZhbXA7IG9sZF9nZW4gIT0gbmV3X2dlbikKQEAgLTM1NDksOCAmIzQzOzM1NTcsNiBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIAlzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy0mZ3Q7cHJpdmF0ZTsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay0mZ3Q7bHJ1dmVjKTsKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstJmd0O2xydXZlYyk7Ci0JREVGSU5FX01BWF9TRVEod2Fsay0mZ3Q7bHJ1dmVjKTsKLQlpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTsKIAl1bnNpZ25lZCBpbnQgbnI7CiAJcG1kX3QgcG1kdmFsOwogCkBAIC0zNjAxLDcgJiM0MzszNjA3LDcgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCQljb250aW51ZTsKIAogCQlpZiAobGFzdCAhPSBmb2xpbykgewotCQkJd2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy0mZ3Q7dm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJCQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLSZndDt2bWEsIHdhbGstJmd0O2xydXZlYywgbGFzdCwgZGlydHkpOwogCiAJCQlsYXN0ID0gZm9saW87CiAJCQlkaXJ0eSA9IGZhbHNlOwpAQCAtMzYxNCw3ICYjNDM7MzYyMCw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQl3YWxrLSZndDttbV9zdGF0c1tNTV9MRUFGX1lPVU5HXSAmIzQzOz0gbnI7CiAJfQogCi0Jd2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy0mZ3Q7dm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJd2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy0mZ3Q7dm1hLCB3YWxrLSZndDtscnV2ZWMsIGxhc3QsIGRpcnR5KTsKIAlsYXN0ID0gTlVMTDsKIAogCWlmIChpICZsdDsgUFRSU19QRVJfUFRFICZhbXA7JmFtcDsgZ2V0X25leHRfdm1hKFBNRF9NQVNLLCBQQUdFX1NJWkUsIGFyZ3MsICZhbXA7c3RhcnQsICZhbXA7ZW5kKSkKQEAgLTM2MzcsOCAmIzQzOzM2NDMsNiBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYQogCXN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLSZndDtwcml2YXRlOwogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLSZndDtscnV2ZWMpOwogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQod2Fsay0mZ3Q7bHJ1dmVjKTsKLQlERUZJTkVfTUFYX1NFUSh3YWxrLSZndDtscnV2ZWMpOwotCWludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpOwogCiAJVk1fV0FSTl9PTl9PTkNFKHB1ZF9sZWFmKCpwdWQpKTsKIApAQCAtMzY5Miw3ICYjNDM7MzY5Niw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhCiAJCQlnb3RvIG5leHQ7CiAKIAkJaWYgKGxhc3QgIT0gZm9saW8pIHsKLQkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CQkJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCB3YWxrLSZndDtscnV2ZWMsIGxhc3QsIGRpcnR5KTsKIAogCQkJbGFzdCA9IGZvbGlvOwogCQkJZGlydHkgPSBmYWxzZTsKQEAgLTM3MDYsNyAmIzQzOzM3MTAsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYQogCQlpID0gaSAmZ3Q7IE1JTl9MUlVfQkFUQ0ggPyAwIDogZmluZF9uZXh0X2JpdChiaXRtYXAsIE1JTl9MUlVfQkFUQ0gsIGkpICYjNDM7IDE7CiAJfSB3aGlsZSAoaSAmbHQ7PSBNSU5fTFJVX0JBVENIKTsKIAotCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay0mZ3Q7bHJ1dmVjLCBsYXN0LCBkaXJ0eSk7CiAKIAlsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTsKIAlzcGluX3VubG9jayhwdGwpOwpAQCAtNDI3MCw4ICYjNDM7NDI3NCw2IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucikKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gZm9saW9fcGdkYXQoZm9saW8pOwogCXN0cnVjdCBscnV2ZWMgKmxydXZlYzsKIAlzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGU7Ci0JdW5zaWduZWQgbG9uZyBtYXhfc2VxOwotCWludCBnZW47CiAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKHB2bXctJmd0O3B0bCk7CiAJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSwgZm9saW8pOwpAQCAtNDMwOCw4ICYjNDM7NDMxMCw2IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucikKIAogCW1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7CiAJbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTsKLQltYXhfc2VxID0gUkVBRF9PTkNFKChscnV2ZWMpLSZndDtscnVnZW4ubWF4X3NlcSk7Ci0JZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTsKIAltbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpOwogCiAJbGF6eV9tbXVfbW9kZV9lbmFibGUoKTsKQEAgLTQzNDEsNyAmIzQzOzQzNDEsNyBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpCiAJCQljb250aW51ZTsKIAogCQlpZiAobGFzdCAhPSBmb2xpbykgewotCQkJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJCQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxydXZlYywgbGFzdCwgZGlydHkpOwogCiAJCQlsYXN0ID0gZm9saW87CiAJCQlkaXJ0eSA9IGZhbHNlOwpAQCAtNDM1MywxMyAmIzQzOzQzNTMsMTQgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKQogCQl5b3VuZyAmIzQzOz0gbnI7CiAJfQogCi0Jd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTsKIAogCWxhenlfbW11X21vZGVfZGlzYWJsZSgpOwogCiAJLyogZmVlZGJhY2sgZnJvbSBybWFwIHdhbGtlcnMgdG8gcGFnZSB0YWJsZSB3YWxrZXJzICovCiAJaWYgKG1tX3N0YXRlICZhbXA7JmFtcDsgc3VpdGFibGVfdG9fc2NhbihpLCB5b3VuZykpCi0JCXVwZGF0ZV9ibG9vbV9maWx0ZXIobW1fc3RhdGUsIG1heF9zZXEsIHB2bXctJmd0O3BtZCk7CiYjNDM7CQl1cGRhdGVfYmxvb21fZmlsdGVyKG1tX3N0YXRlLCBSRUFEX09OQ0UobHJ1dmVjLSZndDtscnVnZW4ubWF4X3NlcSksCiYjNDM7CQkJCSAgICBwdm13LSZndDtwbWQpOwogCiAJbWVtX2Nncm91cF9wdXQobWVtY2cpOwogCkBAIC00NzE2LDcgJiM0Mzs0NzE3LDcgQEAgc3RhdGljIGJvb2wgaXNvbGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2EKIAogCS8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqLwogCWlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSkKLQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19NQVNLLCAwKTsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7CiAKIAlzdWNjZXNzID0gbHJ1X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7CiAJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFzdWNjZXNzLCBmb2xpbyk7CkBAIC00ODA5LDkgJiM0Mzs0ODEwLDkgQEAgc3RhdGljIGludCBnZXRfdGllcl9pZHgoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSkKIAkgKiBUaGlzIHZhbHVlIGlzIGNob3NlbiBiZWNhdXNlIGFueSBvdGhlciB0aWVyIHdvdWxkIGhhdmUgYXQgbGVhc3QgdHdpY2UKIAkgKiBhcyBtYW55IHJlZmF1bHRzIGFzIHRoZSBmaXJzdCB0aWVyLgogCSAqLwotCXJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCAwLCAyLCAmYW1wO3NwKTsKLQlmb3IgKHRpZXIgPSAxOyB0aWVyICZsdDsgTUFYX05SX1RJRVJTOyB0aWVyJiM0MzsmIzQzOykgewotCQlyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdGllciwgMywgJmFtcDtwdik7CiYjNDM7CXJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01JTiwgMiwgJmFtcDtzcCk7CiYjNDM7CWZvciAodGllciA9IExSVV9USUVSX01JTiAmIzQzOyAxOyB0aWVyICZsdDs9IExSVV9USUVSX01BWDsgdGllciYjNDM7JiM0MzspIHsKJiM0MzsJCXJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0aWVyLCB0aWVyLCAzLCAmYW1wO3B2KTsKIAkJaWYgKCFwb3NpdGl2ZV9jdHJsX2VycigmYW1wO3NwLCAmYW1wO3B2KSkKIAkJCWJyZWFrOwogCX0KQEAgLTQ4MzIsOCAmIzQzOzQ4MzMsMTAgQEAgc3RhdGljIGludCBnZXRfdHlwZV90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpCiAJICogQ29tcGFyZSB0aGUgc3VtIG9mIGFsbCB0aWVycyBvZiBhbm9uIHdpdGggdGhhdCBvZiBmaWxlIHRvIGRldGVybWluZQogCSAqIHdoaWNoIHR5cGUgdG8gc2Nhbi4KIAkgKi8KLQlyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBNQVhfTlJfVElFUlMsIHN3YXBwaW5lc3MsICZhbXA7c3ApOwotCXJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIE1BWF9OUl9USUVSUywgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCAmYW1wO3B2KTsKJiM0MzsJcmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fQU5PTiwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NQVgsCiYjNDM7CQkgICAgICBzd2FwcGluZXNzLCAmYW1wO3NwKTsKJiM0MzsJcmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NQVgsCiYjNDM7CQkgICAgICBNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3MsICZhbXA7cHYpOwogCiAJcmV0dXJuIHBvc2l0aXZlX2N0cmxfZXJyKCZhbXA7c3AsICZhbXA7cHYpOwogfQpAQCAtNDkzMiw4ICYjNDM7NDkzNSwxMCBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJfQogCiAJCS8qIGRvbiYjMzk7dCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqLwotCQlpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pCi0JCQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfYWN0aXZlKSk7CiYjNDM7CQlpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pIHsKJiM0MzsJCQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwomIzQzOwkJCWZvbGlvX3NldF9hY3RpdmUoZm9saW8pOwomIzQzOwkJfQogCX0KIAogCW1vdmVfZm9saW9zX3RvX2xydSgmYW1wO2xpc3QpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYyMgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDU1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgaXQgd2FycmFudHMgc29tZSBmdXp6aW5nIGVmZm9ydHMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBmb2N1c2VkIG9uIGlkZW50aWZ5aW5nIGZ1bmN0aW9uYWwgY2hhbmdlcywgZmlndXJpbmcgb3V0IHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucywgYW5kIHBpbnBvaW50aW5nIGtleSBzeW1ib2xzIHRoYXQgbWlnaHQgYmUgaW50ZXJlc3RpbmcgdGFyZ2V0cy4KCkxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCB0b3VjaGVzIGEgZmFpciBudW1iZXIgb2YgZmlsZXMgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY29udHJvbC4gVGhlIHByaW1hcnkgZmlsZXMgdGhhdCBzdGFuZCBvdXQgYXJlIGBtZW1jb250cm9sLmhgLCBgbW1faW5saW5lLmhgLCBgbW16b25lLmhgLCBgZm9saW8uY2AsIGBtZW1jb250cm9sLmNgLCBgbWlncmF0ZS5jYCBhbmQgYHZtc2Nhbi5jYC4KClNwZWNpZmljYWxseSwgSSBzZWUgYSBjaGFuZ2UgaW4gYG1lbWNvbnRyb2wuaGAgd2hlcmUgYGxydV96b25lX3NpemVgIGluIHRoZSBgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGVgIGlzIGNoYW5nZWQgZnJvbSBgdW5zaWduZWQgbG9uZ2AgdG8gYGxvbmdgLiBUaGVyZSYjMzk7cyBhbHNvIGEgYFdBUk5fT05fT05DRWAgY2hlY2sgdGhhdCBtaWdodCBiZSBpbnRlcmVzdGluZy4gVGhlIHVwZGF0ZXMgaW4gYG1tX2lubGluZS5oYCBsb29rIGxpa2UgcmVmYWN0b3JpbmcsIHJlcGxhY2luZyBkaXJlY3Qgc3RydWN0IGZpZWxkIGFjY2VzcyB3aXRoIGBmb2xpb19mbGFncyhmb2xpbywgMClgLiBXZSBhbHNvIHNlZSB1cGRhdGVzIHRvIHRoaW5ncyBsaWtlIExSVSB0aWVycyBhbmQgcmVmZXJlbmNlcyAoYExSVV9USUVSX01JTmAsIGBMUlVfUkVGU19NQVhgKSBkZWZpbmVkIGluIGBtbXpvbmUuaGAuIGBmb2xpby5jYCBoYXMgc29tZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gTFJVIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIGBtZW1jb250cm9sLmNgIGhhcyBhIHNpbXBsaWZpY2F0aW9uIG9mIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAuIFdlIHNlZSB0aGF0IGBtaWdyYXRlLmNgIGFsc28gY2FsbHMgYGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnNgLiBgdm1zY2FuLmNgIGFwcGVhcnMgdG8gYmUgZ2V0dGluZyB0aGUgbW9zdCBhdHRlbnRpb24gaW4gdGVybXMgb2YgbmV3IGZ1bmN0aW9ucywgd2l0aCBhIGxvdCBvZiBMUlUtcmVsYXRlZCBmdW5jdGlvbnMuCgpOb3csIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlci4gSSYjMzk7bGwgcHJvYmFibHkgZmlyZSB1cCBgZ3JlcHBlcmAgb3IgYSBzaW1pbGFyIHRvb2wgdG8gZGV0ZXJtaW5lIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcyBhbmQgdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMuIFRoYXQgd2lsbCBoZWxwIG1lIHplcm8gaW4gb24gdGhlIHBhcnRzIG9mIHRoZSBjb2RlIG1vc3QgbGlrZWx5IHRvIGJlIHN1c2NlcHRpYmxlIHRvIGZ1enppbmcuIEkmIzM5O2xsIG5lZWQgdG8gZmluZCBmdW5jdGlvbnMgdGhhdCBhcmUgZXhwb3NlZCBvciBhY2Nlc3NpYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBMUlVfR0VOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTM5Mz1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXG4tLVxubW0vS2NvbmZpZy0xNDAzLSMgbXVsdGktZ2VuIExSVSB7XG5tbS9LY29uZmlnOjE0MDQ6Y29uZmlnIExSVV9HRU5cbm1tL0tjb25maWctMTQwNS1cdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQxMi1cbm1tL0tjb25maWc6MTQxMzpjb25maWcgTFJVX0dFTl9FTkFCTEVEXG5tbS9LY29uZmlnLTE0MTQtXHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDE4LVxubW0vS2NvbmZpZzoxNDE5OmNvbmZpZyBMUlVfR0VOX1NUQVRTXG5tbS9LY29uZmlnLTE0MjAtXHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTQyNy1cbm1tL0tjb25maWc6MTQyODpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcbm1tL0tjb25maWctMTQyOS1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg3NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIHBhcnRpY3VsYXIgZmVhdHVyZSBpcyBiZWluZyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFyb3VuZCBsaW5lIDE0MDAuIFRoYXQmIzM5O3MgdXN1YWxseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LXJlbGF0ZWQgY29uZmlndXJhdGlvbnMsIGF0IGxlYXN0IGJhc2VkIG9uIG15IHBhc3QgZXhwZXJpZW5jZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgcmVsZXZhbnQgYGNvbmZpZ2Agb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBtYXliZSBldmVuIHNvbWUgaGVscCB0ZXh0IHRoYXQgb3V0bGluZXMgdGhlIHB1cnBvc2UgYW5kIGltcGxpY2F0aW9ucyBvZiB0aGUgZmVhdHVyZSBJJiMzOTttIGludGVyZXN0ZWQgaW4uIEkmIzM5O20gZ29pbmcgdG8gc2NhbiB0aGF0IHNlY3Rpb24gZm9yIGNsdWVzLCBsb29raW5nIGZvciBrZXl3b3JkcyB0aGF0IGFsaWduIHdpdGggdGhlIHNwZWNpZmljIGFyZWEgSSYjMzk7bSB0cnlpbmcgdG8gdW5kZXJzdGFuZC4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgdHJhY2UgdGhyb3VnaCBhbnkgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIHRoZSBvcHRpb25zIG1pZ2h0IGhhdmUgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgY29uZmlndXJhdGlvbiBzeXN0ZW0sIHVzaW5nIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIEtjb25maWcgbGFuZ3VhZ2UgdG8gaW5mZXIgdGhlIGxvZ2ljLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgYnVpbGQgYSBtZW50YWwgbWFwIG9mIHdoZXJlIHRoaXMgc2V0dGluZyBmaXRzIGludG8gdGhlIGJyb2FkZXIgbWVtb3J5IG1hbmFnZW1lbnQgZnJhbWV3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQwMDpcdFx0ICBwdXJwb3Nlcy4gIEl0IGlzIHJlcXVpcmVkIHRvIGVuYWJsZSB1c2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIG9uXG4xNDAxOlx0XHQgIGZpbGUtYmFja2VkIG1lbW9yeSB0eXBlcyBsaWtlIHNobWVtIGFuZCBodWdldGxiZnMuXG4xNDAyOlx0XG4xNDAzOlx0IyBtdWx0aS1nZW4gTFJVIHtcbjE0MDQ6XHRjb25maWcgTFJVX0dFTlxuMTQwNTpcdFx0Ym9vbCBcJiMzNDtNdWx0aS1HZW4gTFJVXCYjMzQ7XG4xNDA2Olx0XHRkZXBlbmRzIG9uIE1NVVxuMTQwNzpcdFx0IyBtYWtlIHN1cmUgZm9saW8tXHUwMDNlZmxhZ3MgaGFzIGVub3VnaCBzcGFyZSBiaXRzXG4xNDA4Olx0XHRkZXBlbmRzIG9uIDY0QklUIHx8ICFTUEFSU0VNRU0gfHwgU1BBUlNFTUVNX1ZNRU1NQVBcbjE0MDk6XHRcdGhlbHBcbjE0MTA6XHRcdCAgQSBoaWdoIHBlcmZvcm1hbmNlIExSVSBpbXBsZW1lbnRhdGlvbiB0byBvdmVyY29tbWl0IG1lbW9yeS4gU2VlXG4xNDExOlx0XHQgIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscy5cbjE0MTI6XHRcbjE0MTM6XHRjb25maWcgTFJVX0dFTl9FTkFCTEVEXG4xNDE0Olx0XHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4xNDE1Olx0XHRkZXBlbmRzIG9uIExSVV9HRU5cbjE0MTY6XHRcdGhlbHBcbjE0MTc6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbXVsdGktZ2VuIExSVSBieSBkZWZhdWx0LlxuMTQxODpcdFxuMTQxOTpcdGNvbmZpZyBMUlVfR0VOX1NUQVRTXG4xNDIwOlx0XHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xuMTQyMTpcdFx0ZGVwZW5kcyBvbiBMUlVfR0VOXG4xNDIyOlx0XHRoZWxwXG4xNDIzOlx0XHQgIERvIG5vdCBlbmFibGUgdGhpcyBvcHRpb24gdW5sZXNzIHlvdSBwbGFuIHRvIGxvb2sgYXQgaGlzdG9yaWNhbCBzdGF0c1xuMTQyNDpcdFx0ICBmcm9tIGV2aWN0ZWQgZ2VuZXJhdGlvbnMgZm9yIGRlYnVnZ2luZyBwdXJwb3NlLlxuMTQyNTpcdFxuMTQyNjpcdFx0ICBUaGlzIG9wdGlvbiBoYXMgYSBwZXItbWVtY2cgYW5kIHBlci1ub2RlIG1lbW9yeSBvdmVyaGVhZC5cbjE0Mjc6XHRcbjE0Mjg6XHRjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcbjE0Mjk6XHRcdGRlZl9ib29sIHlcbjE0MzA6XHRcdGRlcGVuZHMgb24gTFJVX0dFTiBcdTAwMjZcdTAwMjYgQVJDSF9IQVNfSFdfUFRFX1lPVU5HXG4xNDMxOlx0IyB9XG4xNDMyOlx0XG4xNDMzOlx0Y29uZmlnIEFSQ0hfU1VQUE9SVFNfUEVSX1ZNQV9MT0NLXG4xNDM0Olx0ICAgICAgIGRlZl9ib29sIG5cbjE0MzU6XHRcbjE0MzY6XHRjb25maWcgUEVSX1ZNQV9MT0NLXG4xNDM3Olx0XHRkZWZfYm9vbCB5XG4xNDM4Olx0XHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfUEVSX1ZNQV9MT0NLIFx1MDAyNlx1MDAyNiBNTVUgXHUwMDI2XHUwMDI2IFNNUFxuMTQzOTpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzM0CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgRGVlcGVyIGludG8gTWVtb3J5IE1hbmFnZW1lbnQgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCB0aGVzZSBgbWVtX2Nncm91cGAgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCBhbmQgYG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemVgLiBUaGV5JiMzOTtyZSByaWdodCB0aGVyZSBpbiBgbW0vbWVtY29udHJvbC5jYC4gU2luY2UgdGhleSBhcmUgcmVsYXRlZCB0byBjZ3JvdXBzIGFuZCBtZW1vcnksIEkgc2hvdWxkIHJlYWxseSBjaXJjbGUgYmFjayBhbmQgbWFrZSBzdXJlIHRvIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIHRoYXQgY29udHJvbCBNRU1DRyBmdW5jdGlvbmFsaXR5LiBJdCYjMzk7cyB0b28gZWFzeSB0byBtaXNzIHNvbWV0aGluZyBsaWtlIGEgZGVwZW5kZW5jeSBvciBhIGNvbmZpZ3VyYXRpb24gZmxhZyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IGhlcmUuIExldCYjMzk7cyBtYWtlIHN1cmUgd2UgYXJlbiYjMzk7dCBvdmVybG9va2luZyBhbnkgY3J1Y2lhbCBzZXR0aW5ncyBiZWZvcmUgZ29pbmcgZnVydGhlci4gVGhpcyBpcyBhIGNyaXRpY2FsIGFyZWEsIGFuZCBhIGRlZXAgZGl2ZSBjYW4gYmUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiByb2J1c3QgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGEgc3VidGxlIGJ1Zy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNzU9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4tLVxuaW5pdC9LY29uZmlnLTEwODQtXG5pbml0L0tjb25maWc6MTA4NTpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy0xMDg2LVx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMDkzLVxuaW5pdC9LY29uZmlnOjEwOTQ6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbmluaXQvS2NvbmZpZy0xMDk1LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMTAwLVxuaW5pdC9LY29uZmlnOjExMDE6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbml0L0tjb25maWctMTEwMi1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTEwNy1cbmluaXQvS2NvbmZpZzoxMTA4OmNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTExMDktXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDIxOAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYG1tL21pZ3JhdGUuY2AgQ29uZmlndXJhdGlvbnMqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgZGV0YWlscy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBtaWdyYXRpb24gY29uZmlndXJhdGlvbnMgd2l0aGluIGBtbS9taWdyYXRlLmNgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHBhcmFtZXRlcnMgYW5kIGZsYWdzIHRoYXQgZ292ZXJuIGhvdyBwYWdlcyBhcmUgbW92ZWQgYmV0d2VlbiB6b25lcyBhbmQgbm9kZXMsIGFuZCB0aGUgdmFyaW91cyBzdHJhdGVnaWVzIGVtcGxveWVkLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGlzIG9wdGltYWwgZm9yIHRoZSB3b3JrbG9hZCBhbmQgaGFyZHdhcmUgSSYjMzk7bSBkZWFsaW5nIHdpdGguIEkmIzM5O20gZ29pbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaGV1cmlzdGljcyBhbmQgdGhyZXNob2xkcyByZWxhdGVkIHRvIE5VTUEgYmFsYW5jaW5nLCB6b25lIHJlY2xhaW0sIGFuZCBhbnkgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIHRoZSBwYWdlIGFsbG9jYXRvci4gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgYnkgcmV2aWV3aW5nIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIHRoYXQgc2V0IHRoZXNlIHBhcmFtZXRlcnMgYW5kIHRoZW4gdHJhY2UgdGhlaXIgdXNhZ2UuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgdGhlIHRyYWRlLW9mZnMgYmV0d2VlbiBwZXJmb3JtYW5jZSBhbmQgbWVtb3J5IHV0aWxpemF0aW9uIHVuZGVyIGRpZmZlcmVudCBtaWdyYXRpb24gc2NlbmFyaW9zLiBJIGFsc28gd2FudCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG9idmlvdXMgbG9jayBjb250ZW50aW9uIGlzc3VlcyBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHdpdGhpbiB0aGUgbWlncmF0aW9uIGNvZGUgcGF0aHMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUlHUkFUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTU4Mj1jb25maWcgTUVNT1JZX0hPVFJFTU9WRVxubW0vS2NvbmZpZy01ODMtXHRib29sIFwmIzM0O0FsbG93IGZvciBtZW1vcnkgaG90IHJlbW92ZVwmIzM0O1xubW0vS2NvbmZpZzo1ODQ6XHRzZWxlY3QgTUlHUkFUSU9OXG5tbS9LY29uZmlnLTU4NS1cbi0tXG5tbS9LY29uZmlnPTYyNT1jb25maWcgQkFMTE9PTlxuLS1cbm1tL0tjb25maWctNjI5LSMgc3VwcG9ydCBmb3IgbWVtb3J5IGJhbGxvb24gcGFnZSBtaWdyYXRpb25cbm1tL0tjb25maWc6NjMwOmNvbmZpZyBCQUxMT09OX01JR1JBVElPTlxubW0vS2NvbmZpZy02MzEtXHRib29sIFwmIzM0O0FsbG93IGZvciBiYWxsb29uIG1lbW9yeSBtaWdyYXRpb25cJiMzNDtcbm1tL0tjb25maWctNjMyLVx0ZGVmYXVsdCB5XG5tbS9LY29uZmlnOjYzMzpcdGRlcGVuZHMgb24gTUlHUkFUSU9OIFx1MDAyNlx1MDAyNiBCQUxMT09OXG5tbS9LY29uZmlnLTYzNC1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTY0Mj1jb25maWcgQ09NUEFDVElPTlxuLS1cbm1tL0tjb25maWctNjQ0LVx0ZGVmYXVsdCB5XG5tbS9LY29uZmlnOjY0NTpcdHNlbGVjdCBNSUdSQVRJT05cbm1tL0tjb25maWctNjQ2LVx0ZGVwZW5kcyBvbiBNTVVcbi0tXG5tbS9LY29uZmlnPTY2NT1jb25maWcgUEFHRV9SRVBPUlRJTkdcbi0tXG5tbS9LY29uZmlnLTY3Mi1cbm1tL0tjb25maWc6NjczOmNvbmZpZyBOVU1BX01JR1JBVElPTlxubW0vS2NvbmZpZy02NzQtXHRib29sIFwmIzM0O05VTUEgcGFnZSBtaWdyYXRpb25cJiMzNDtcbi0tXG5tbS9LY29uZmlnLTY3Ni1cdGRlcGVuZHMgb24gTlVNQSBcdTAwMjZcdTAwMjYgTU1VXG5tbS9LY29uZmlnOjY3NzpcdHNlbGVjdCBNSUdSQVRJT05cbm1tL0tjb25maWctNjc4LVx0aGVscFxuLS1cbm1tL0tjb25maWctNjgzLVxubW0vS2NvbmZpZzo2ODQ6Y29uZmlnIE1JR1JBVElPTlxubW0vS2NvbmZpZy02ODUtXHRib29sXG4tLVxubW0vS2NvbmZpZy02ODctXG5tbS9LY29uZmlnOjY4ODpjb25maWcgREVWSUNFX01JR1JBVElPTlxubW0vS2NvbmZpZzo2ODk6XHRkZWZfYm9vbCBNSUdSQVRJT04gXHUwMDI2XHUwMDI2IFpPTkVfREVWSUNFXG5tbS9LY29uZmlnLTY5MC1cbm1tL0tjb25maWc6NjkxOmNvbmZpZyBBUkNIX0VOQUJMRV9IVUdFUEFHRV9NSUdSQVRJT05cbm1tL0tjb25maWctNjkyLVx0Ym9vbFxuLS1cbm1tL0tjb25maWc9NzY1PWNvbmZpZyBNRU1PUllfRkFJTFVSRVxuLS1cbm1tL0tjb25maWctNzY5LVx0c2VsZWN0IElOVEVSVkFMX1RSRUVcbm1tL0tjb25maWc6NzcwOlx0c2VsZWN0IE1JR1JBVElPTlxubW0vS2NvbmZpZy03NzEtXHRoZWxwXG4tLVxubW0vS2NvbmZpZz0xMDU2PWNvbmZpZyBDTUFcbi0tXG5tbS9LY29uZmlnLTEwNTgtXHRkZXBlbmRzIG9uIE1NVVxubW0vS2NvbmZpZzoxMDU5Olx0c2VsZWN0IE1JR1JBVElPTlxubW0vS2NvbmZpZy0xMDYwLVx0c2VsZWN0IE1FTU9SWV9JU09MQVRJT05cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwOTMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgTXVsdGktR2VuIExSVSBTdWJzeXN0ZW06IEEgRGVlcCBEaXZlKioKCk9rYXksIHNvIExSVV9HRU4gaXMgdGhlIE11bHRpLUdlbiBMUlUgc3Vic3lzdGVtIOKAkyB0aGF04oCZcyB0aGUgdGhpbmcgaW4gTGludXggdGhhdCBkZWFscyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgaW4gYG1tL3Ztc2Nhbi5jYCwgYG1tL2ZvbGlvLmNgLCBgaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaGAsIGBpbmNsdWRlL2xpbnV4L21tem9uZS5oYCwgYW5kIGBtbS9tZW1jb250cm9sLmNgLiAgVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGZ1bmN0aW9uYWwgY2hhbmdlIHNpZ25pZmljYW50IGVub3VnaCB0byB3YXJyYW50IGZ1enppbmc/CgpMZXQmIzM5O3MgYnJlYWsgZG93biB0aGVzZSBjaGFuZ2VzIHRvIHNlZSBpZiB0aGV5IGFyZSB3b3J0aCB0aGUgZnV6emluZyBlZmZvcnQuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGlzIHJlZmFjdG9yaW5nIGFuZCBmaXhpbmcgaG93IHRoZSBtdWx0aS1nZW4gTFJVIHJlZmVyZW5jZSBiaXQgbWFuaXB1bGF0aW9uLCBnZW5lcmF0aW9uIHRyYWNraW5nLCBhbmQgdGllciBjYWxjdWxhdGlvbnMgYXJlIGRvbmUuIFNwZWNpZmljYWxseSwgdGhpcyB0b3VjaGVzIGNvZGUgcmVsYXRlZCB0byBgcmVhZF9jdHJsX3Bvc2AsIGBmb2xpb191cGRhdGVfZ2VuYCwgYGZvbGlvX2luY19nZW5gLCBgd2Fsa191cGRhdGVfZm9saW9gLCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAsIGBmb2xpb19taWdyYXRlX2ZsYWdzYCwgYW5kIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAuICBUaGVzZSBhcmUgY29yZSBmdW5jdGlvbnMgdGhhdCBJLCBhcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhLCByZWNvZ25pemUgYXMgYmVpbmcgYXQgdGhlIGhlYXJ0IG9mIG1lbW9yeSByZWNsYWltL3BhZ2UgYWdpbmcvbWlncmF0aW9uIGxvZ2ljIGluIE1HTFJVIChNdWx0aS1HZW4gTFJVKSwgYW5kIG1lbWNnIExSVSBhY2NvdW50aW5nLgoKRXNzZW50aWFsbHksIHRoaXMgZGlyZWN0bHkgbW9kaWZpZXMgY3JpdGljYWwgbG9naWMgZm9yIHBhZ2UgcmVjbGFtYXRpb24sIGdlbmVyYXRpb24gYWR2YW5jZW1lbnQsIHRpZXIgY2xhc3NpZmljYXRpb24sIGZvbGlvIGZsYWcgYml0IGNvbXBhcmUtYW5kLXN3YXAgbG9vcHMsIGFuZCBtZW1jZyBMUlUgem9uZSBzaXplIGNhbGN1bGF0aW9uLiBUaGlzIGlzIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQmIzM5O3MgaGl0IGR1cmluZyAqc3RhbmRhcmQqIGtlcm5lbCBleGVjdXRpb24g4oCTIG1lbW9yeSBhbGxvY2F0aW9uLCByZWNsYW1hdGlvbiwgcGFnaW5nLCBtZW1vcnkgY2dyb3VwcywgYW5kIG1pZ3JhdGlvbiwgYWxsIG9mIHdoaWNoIGFyZSBjb21tb24gb3BlcmF0aW9ucy4gIFNvIHllcywgYWJzb2x1dGVseSwgdGhpcyBpcyAqKmRlZmluaXRlbHkqKiB3b3J0aCBmdXp6aW5nIQoKTm93LCBmb3IgdGhlIG5leHQgcGhhc2U6IExldCYjMzk7cyBmb2N1cyBvdXIgZWZmb3J0cy4gIFRvIGRldGVybWluZSB0aGUgbW9zdCBpbXBhY3RmdWwgc3ltYm9scyB0byB0YXJnZXQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyB3ZXJlIG1vZGlmaWVkIG9yLCBtb3JlIGltcG9ydGFudGx5LCBhcmUgZ2xvYmFsIGVudHJ5cG9pbnRzIGZvciB0aGlzIGxvZ2ljLiBJIG5lZWQgdG8gc2VhcmNoIHRocm91Z2ggYG1tL3Ztc2Nhbi5jYCwgYG1tL2ZvbGlvLmNgLCBgbW0vbWVtY29udHJvbC5jYCwgYW5kIGBtbS9taWdyYXRlLmNgIGZvciBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMg4oCTIG9yIGFueSBmdW5jdGlvbnMgdGhhdCBjYWxsIGRpcmVjdGx5IGludG8gdGhlIG1vZGlmaWVkIGNvZGUuCgpMZXQgbWUgdGFrZSBhIGxvb2sgYXQgYGxydV9nZW5fbG9va19hcm91bmRgIGluIGBtbS92bXNjYW4uY2AuIElzIHRoYXQgYSBnbG9iYWwgc3ltYm9sPyBMZXQmIzM5O3MgY2hlY2sgaXRzIGRlZmluaXRpb24gYW5kIGRlY2xhcmF0aW9uIHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5fbG9va19hcm91bmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcm1hcC5jPTkxOD1zdGF0aWMgYm9vbCBmb2xpb19yZWZlcmVuY2VkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3JtYXAuYy05ODItXHRcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkgXHUwMDI2XHUwMDI2IHB2bXcucHRlKSB7XG5tbS9ybWFwLmM6OTgzOlx0XHRcdGlmIChscnVfZ2VuX2xvb2tfYXJvdW5kKFx1MDAyNnB2bXcsIG5yKSlcbm1tL3JtYXAuYy05ODQtXHRcdFx0XHRyZWZlcmVuY2VkJiM0MzsmIzQzOztcbi0tXG5tbS92bXNjYW4uYz0yNzkxPXN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIHNlcV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4tLVxubW0vdm1zY2FuLmMtMjgyMC0gKiB3YWxrX3BtZF9yYW5nZSgpOyB0aGUgZXZpY3Rpb24gYWxzbyByZXBvcnQgdGhlbSB3aGVuIHdhbGtpbmcgdGhlIHJtYXBcbm1tL3Ztc2Nhbi5jOjI4MjE6ICogaW4gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLlxubW0vdm1zY2FuLmMtMjgyMi0gKlxuLS1cbm1tL3Ztc2Nhbi5jPTQwNzQ9c3RhdGljIGJvb2wgdHJ5X3RvX2luY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXG4tLVxubW0vdm1zY2FuLmMtNDA5My1cdCAqIElmIHRoZSBoYXJkd2FyZSBkb2VzbiYjMzk7dCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgYWNjZXNzZWQgYml0LCBmYWxsYmFja1xubW0vdm1zY2FuLmM6NDA5NDpcdCAqIHRvIGxydV9nZW5fbG9va19hcm91bmQoKSwgd2hpY2ggb25seSBjbGVhcnMgdGhlIGFjY2Vzc2VkIGJpdCBpbiBhXG5tbS92bXNjYW4uYy00MDk1LVx0ICogaGFuZGZ1bCBvZiBQVEVzLiBTcHJlYWRpbmcgdGhlIHdvcmsgb3V0IG92ZXIgYSBwZXJpb2Qgb2YgdGltZSB1c3VhbGx5XG4tLVxubW0vdm1zY2FuLmM9NDIxMz1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTQyNTktICovXG5tbS92bXNjYW4uYzo0MjYwOmJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbm1tL3Ztc2Nhbi5jLTQyNjEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQ5NwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQsIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBhbmQgTWlncmF0aW9uIEZsYWdzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAuIEl0JiMzOTtzIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiwgbWVhbmluZyBpdCYjMzk7cyBtZWFudCB0byBiZSB1c2VkIGV4dGVybmFsbHksIGFuZCBpdCYjMzk7cyBkZWNsYXJlZCBpbiBgaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaGAgYW5kL29yIGBtbS9pbnRlcm5hbC5oYCwgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgbW0vcm1hcC5jYC4gVGhhdCBwbGFjZXMgaXQgZmlybWx5IHdpdGhpbiB0aGUgcmVhbG0gb2YgdGhlIHBhZ2UgcmVwbGFjZW1lbnQgYWxnb3JpdGhtIGFuZCByZXZlcnNlIG1hcHBpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJtYXAgY29kZS4KCk5vdywgZ2l2ZW4gdGhhdCBpdCYjMzk7cyByZWxhdGVkIHRvIExSVSBhbmQgbGlrZWx5IGludm9sdmVkIGluIHNvbWUgc29ydCBvZiBwYWdlIHNjYW5uaW5nIG9yIGxvb2stYXJvdW5kIG1lY2hhbmlzbSBmb3IgZ2VuZXJhdGluZyBMUlUgbGlzdHMsIEkgYWxzbyB3YW50IHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgbWlncmF0aW9ucyBpbnRlcmFjdCB3aXRoIHRoZSBMUlUuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGNoZWNrIGhvdyBgZm9saW9fbWlncmF0ZV9mbGFnc2AgaXMgaW1wbGVtZW50ZWQsIGVzcGVjaWFsbHkgaW4gYG1tL21pZ3JhdGUuY2AuIEkgaGF2ZSBhIGZlZWxpbmcgdGhhdCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgYW5kIHRoZSBtaWdyYXRpb24gZmxhZ3Mgd2lsbCBiZSBpbnRlcndvdmVuLCBlc3BlY2lhbGx5IGlmIHRoZSBjb2RlIGlzIGRlYWxpbmcgd2l0aCBwYWdlcyBpbiB0aGUgcHJvY2VzcyBvZiBtaWdyYXRpb24gb3IgdGhvc2UgcG90ZW50aWFsbHkgYmVpbmcgdGFyZ2V0ZWQgZm9yIG1pZ3JhdGlvbiBkdWUgdG8gdGhlIExSVSBldmljdGlvbi4gVW5kZXJzdGFuZGluZyB0aGlzIGNvbm5lY3Rpb24gaXMgY3JpdGljYWwgdG8gc2VlaW5nIHRoZSB3aG9sZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb19taWdyYXRlX2ZsYWdzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21pZ3JhdGUuYz03Mzk9aW50IG1pZ3JhdGVfaHVnZV9wYWdlX21vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9taWdyYXRlLmMtNzc0LSAqL1xubW0vbWlncmF0ZS5jOjc3NTp2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL21pZ3JhdGUuYy03NzYte1xuLS1cbm1tL21pZ3JhdGUuYy04NjMtfVxubW0vbWlncmF0ZS5jOjg2NDpFWFBPUlRfU1lNQk9MKGZvbGlvX21pZ3JhdGVfZmxhZ3MpO1xubW0vbWlncmF0ZS5jLTg2NS1cbi0tXG5tbS9taWdyYXRlLmM9ODcwPXN0YXRpYyBpbnQgX19taWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmRzdCxcbi0tXG5tbS9taWdyYXRlLmMtODkwLVxubW0vbWlncmF0ZS5jOjg5MTpcdGZvbGlvX21pZ3JhdGVfZmxhZ3MoZHN0LCBzcmMpO1xubW0vbWlncmF0ZS5jLTg5Mi1cdHJldHVybiAwO1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTEwOT1zdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI1MS1cdFx0XHRlbHNlXG5tbS9taWdyYXRlX2RldmljZS5jOjEyNTI6XHRcdFx0XHRmb2xpb19taWdyYXRlX2ZsYWdzKG5ld2ZvbGlvLCBmb2xpbyk7XG5tbS9taWdyYXRlX2RldmljZS5jLTEyNTMtXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyMDEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBndXRzIG9mIG1lbW9yeSBjZ3JvdXAgbWFuYWdlbWVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBMZWFzdCBSZWNlbnRseSBVc2VkIChMUlUpIHNpemUgaXMgdXBkYXRlZCB3aXRoaW4gYSBtZW1vcnkgY2dyb3VwLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgIGluIGBtbS9tZW1jb250cm9sLmNgLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUgY2VudHJhbCBwb2ludCBmb3IgdHJhY2tpbmcgYW5kIHJlZmxlY3RpbmcgY2hhbmdlcyB0byB0aGUgTFJVIGxpc3RzIHVzZWQgZm9yIG1lbW9yeSByZWNsYW1hdGlvbiB3aXRoaW4gZWFjaCBjZ3JvdXAuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIHdoYXQgYXJndW1lbnRzIGl0IHRha2VzLCB3aGF0IGRhdGEgc3RydWN0dXJlcyBpdCBtYW5pcHVsYXRlcywgYW5kIHdoZXJlIGl0JiMzOTtzIGNhbGxlZCBmcm9tLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciBhbiB1cGRhdGUgYW5kIGhvdyB0aGUgTFJVIHNpemUgaXMgY2FsY3VsYXRlZCBvciBhZGp1c3RlZC4gSXMgdGhpcyBhIGdsb2JhbCB1cGRhdGUsIG9yIHNwZWNpZmljIHRvIHBhcnRpY3VsYXIgbWVtb3J5IHpvbmVzPyBIb3cgZG9lcyBpdCBpbnRlcmFjdCB3aXRoIHRoZSB2YXJpb3VzIG1lbW9yeSBzdGF0cyBhbmQgdGhyZXNob2xkcz8gSG9wZWZ1bGx5LCB0aGUgc3Vycm91bmRpbmcgY29kZSB3aWxsIGdpdmUgbWUgc29tZSBjbHVlcyBhYm91dCBpdHMgcHVycG9zZSBpbiB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzY2hlbWUuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgYSBjb3JlIGVsZW1lbnQgaW4gdGhlIG1lbW9yeSBjZ3JvdXAgZXZpY3Rpb24gc3RyYXRlZ3kuIFRpbWUgdG8gZ2V0IHRvIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9mb2xpby5jPTExMjM9c3RhdGljIHZvaWQgbHJ1dmVjX3JlcGFyZW50X2xydShzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsXG4tLVxubW0vZm9saW8uYy0xMTQzLVx0XHQgKi9cbm1tL2ZvbGlvLmM6MTE0NDpcdFx0bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUocGFyZW50X2xydXZlYywgbHJ1LCB6aWQsIHNpemUpO1xubW0vZm9saW8uYzoxMTQ1Olx0XHRtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShjaGlsZF9scnV2ZWMsIGxydSwgemlkLCAtKGxvbmcpc2l6ZSk7XG5tbS9mb2xpby5jLTExNDYtXHR9XG4tLVxubW0vbWVtY29udHJvbC5jPTE1MDE9c3RydWN0IGxydXZlYyAqZm9saW9fbHJ1dmVjX2xvY2tfaXJxc2F2ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0xNTE4LS8qKlxubW0vbWVtY29udHJvbC5jOjE1MTk6ICogbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUgLSBhY2NvdW50IGZvciBhZGRpbmcgb3IgcmVtb3ZpbmcgYW4gbHJ1IHBhZ2Vcbm1tL21lbWNvbnRyb2wuYy0xNTIwLSAqIEBscnV2ZWM6IG1lbV9jZ3JvdXAgcGVyIHpvbmUgbHJ1IHZlY3RvclxuLS1cbm1tL21lbWNvbnRyb2wuYy0xNTI3LSAqL1xubW0vbWVtY29udHJvbC5jOjE1Mjg6dm9pZCBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LFxubW0vbWVtY29udHJvbC5jLTE1MjktXHRcdFx0XHRpbnQgemlkLCBsb25nIG5yX3BhZ2VzKVxuLS1cbm1tL3Ztc2Nhbi5jPTE1OTI9dW5zaWduZWQgaW50IHJlY2xhaW1fY2xlYW5fcGFnZXNfZnJvbV9saXN0KHN0cnVjdCB6b25lICp6b25lLFxuLS1cbm1tL3Ztc2Nhbi5jLTE2NDQtICogVXBkYXRlIExSVSBzaXplcyBhZnRlciBpc29sYXRpbmcgcGFnZXMuIFRoZSBMUlUgc2l6ZSB1cGRhdGVzIG11c3Rcbm1tL3Ztc2Nhbi5jOjE2NDU6ICogYmUgY29tcGxldGUgYmVmb3JlIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplIGR1ZSB0byBhIHNhbml0eSBjaGVjay5cbm1tL3Ztc2Nhbi5jLTE2NDYtICovXG4tLVxubW0vdm1zY2FuLmM9NDYyMT12b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxuLS1cbm1tL3Ztc2Nhbi5jLTQ2NDItXHRcdFx0LyogTW92ZSB0aGUgYWNjb3VudGluZywgZG8gbm90IGR1cGxpY2F0ZSBpdC4gKi9cbm1tL3Ztc2Nhbi5jOjQ2NDM6XHRcdFx0bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUocGFyZW50X2xydXZlYywgbHJ1LCB6aWQsIHNpemUpO1xubW0vdm1zY2FuLmM6NDY0NDpcdFx0XHRtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShjaGlsZF9scnV2ZWMsIGxydSwgemlkLCAtKGxvbmcpc2l6ZSk7XG5tbS92bXNjYW4uYy00NjQ1LVx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MTM5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBNR0xSVSBJbnRlZ3JhdGlvbiBQb2ludHMqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gaG93IE1HTFJVIGlzIGFjdHVhbGx5IGJlaW5nIHVzZWQgYW5kIGludGVncmF0ZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtLiBNeSBmaXJzdCBzdGVwIGlzIHRvIG1ldGhvZGljYWxseSBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGVudHJ5IHBvaW50cy4gSSYjMzk7bSBnb2luZyB0byBzY2FuIHRocm91Z2ggYG1tL3Ztc2Nhbi5jYCBhbmQgb3RoZXIgZmlsZXMgd2l0aGluIHRoZSBgbW1gIGRpcmVjdG9yeSB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSAqbm9uLXN0YXRpYyogZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgYWN0aW5nIGFzIGFjY2VzcyBwb2ludHMgZm9yIE1HTFJVLiBJIG5lZWQgdG8gYmUgc3VyZSBJJiMzOTttIGNhcHR1cmluZyBhbGwgdGhlIHBvdGVudGlhbCBjYWxsIHNpdGVzLiBUaGVuLCBJJiMzOTtsbCBmb2N1cyBzcGVjaWZpY2FsbHkgb24gYG1tL3Ztc2Nhbi5jYCBhbmQgemVybyBpbiBvbiB3aGF0IGNhbGxzICppbnRvKiBNR0xSVSBhcmUgbWFkZSBmcm9tIHRoZXJlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGl0cyBjb250cm9sIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5fJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDcxOCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxubW0vdm1zY2FuLmM9ODI3PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XG4tLVxubW0vdm1zY2FuLmMtODM5LSAqL1xubW0vdm1zY2FuLmM6ODQwOnN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbm1tL3Ztc2Nhbi5jLTg0MS17XG4tLVxubW0vdm1zY2FuLmMtODY0LSNlbHNlXG5tbS92bXNjYW4uYzo4NjU6c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxubW0vdm1zY2FuLmMtODY2LXtcbi0tXG5tbS92bXNjYW4uYz04NzE9c3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vdm1zY2FuLmMtODk1LVxubW0vdm1zY2FuLmM6ODk2Olx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiAhbHJ1X2dlbl9zd2l0Y2hpbmcoKSkge1xubW0vdm1zY2FuLmMtODk3LVx0XHRpZiAoIXJlZmVyZW5jZWRfcHRlcylcbi0tXG5tbS92bXNjYW4uYy04OTktXG5tbS92bXNjYW4uYzo5MDA6XHRcdHJldHVybiBscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcdTAwMjZ2bWFfZmxhZ3MpID8gRk9MSU9SRUZfQUNUSVZBVEUgOiBGT0xJT1JFRl9LRUVQO1xubW0vdm1zY2FuLmMtOTAxLVx0fVxuLS1cbm1tL3Ztc2Nhbi5jPTIyODM9c3RhdGljIHZvaWQgcHJlcGFyZV9zY2FuX2NvbnRyb2wocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtMjI4OS1cbm1tL3Ztc2Nhbi5jOjIyOTA6XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXHUwMDI2XHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpKVxubW0vdm1zY2FuLmMtMjI5MS1cdFx0cmV0dXJuO1xuLS1cbm1tL3Ztc2Nhbi5jPTI2OTc9REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UobHJ1X3N3aXRjaCk7XG5tbS92bXNjYW4uYy0yNjk4LSNpZmRlZiBDT05GSUdfTFJVX0dFTl9FTkFCTEVEXG5tbS92bXNjYW4uYzoyNjk5OkRFRklORV9TVEFUSUNfS0VZX0FSUkFZX1RSVUUobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xubW0vdm1zY2FuLmM6MjcwMDojZGVmaW5lIGdldF9jYXAoY2FwKVx0c3RhdGljX2JyYW5jaF9saWtlbHkoXHUwMDI2bHJ1X2dlbl9jYXBzW2NhcF0pXG5tbS92bXNjYW4uYy0yNzAxLSNlbHNlXG5tbS92bXNjYW4uYzoyNzAyOkRFRklORV9TVEFUSUNfS0VZX0FSUkFZX0ZBTFNFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcbm1tL3Ztc2Nhbi5jOjI3MDM6I2RlZmluZSBnZXRfY2FwKGNhcClcdHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2bHJ1X2dlbl9jYXBzW2NhcF0pXG5tbS92bXNjYW4uYy0yNzA0LSNlbmRpZlxuLS1cbm1tL3Ztc2Nhbi5jPTI3OTE9c3RhdGljIGJvb2wgX19tYXliZV91bnVzZWQgc2VxX2lzX3ZhbGlkKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbi0tXG5tbS92bXNjYW4uYy0yODIwLSAqIHdhbGtfcG1kX3JhbmdlKCk7IHRoZSBldmljdGlvbiBhbHNvIHJlcG9ydCB0aGVtIHdoZW4gd2Fsa2luZyB0aGUgcm1hcFxubW0vdm1zY2FuLmM6MjgyMTogKiBpbiBscnVfZ2VuX2xvb2tfYXJvdW5kKCkuXG5tbS92bXNjYW4uYy0yODIyLSAqXG4tLVxubW0vdm1zY2FuLmM9MjgzOD1zdGF0aWMgdm9pZCBnZXRfaXRlbV9rZXkodm9pZCAqaXRlbSwgaW50ICprZXkpXG4tLVxubW0vdm1zY2FuLmMtMjg0Ny1cbm1tL3Ztc2Nhbi5jOjI4NDg6c3RhdGljIGJvb2wgdGVzdF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSxcbm1tL3Ztc2Nhbi5jLTI4NDktXHRcdFx0ICAgICAgdm9pZCAqaXRlbSlcbi0tXG5tbS92bXNjYW4uYy0yODYzLVxubW0vdm1zY2FuLmM6Mjg2NDpzdGF0aWMgdm9pZCB1cGRhdGVfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEsXG5tbS92bXNjYW4uYy0yODY1LVx0XHRcdFx0dm9pZCAqaXRlbSlcbi0tXG5tbS92bXNjYW4uYy0yODgyLVxubW0vdm1zY2FuLmM6Mjg4MzpzdGF0aWMgdm9pZCByZXNldF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSlcbm1tL3Ztc2Nhbi5jLTI4ODQte1xuLS1cbm1tL3Ztc2Nhbi5jLTI5MDQtXG5tbS92bXNjYW4uYzoyOTA1OnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICpnZXRfbW1fbGlzdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy0yOTA2LXtcbm1tL3Ztc2Nhbi5jOjI5MDc6XHRzdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fbGlzdCBtbV9saXN0ID0ge1xubW0vdm1zY2FuLmMtMjkwOC1cdFx0LmZpZm8gPSBMSVNUX0hFQURfSU5JVChtbV9saXN0LmZpZm8pLFxuLS1cbm1tL3Ztc2Nhbi5jLTI5MjAtXG5tbS92bXNjYW4uYzoyOTIxOnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqZ2V0X21tX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbm1tL3Ztc2Nhbi5jLTI5MjIte1xuLS1cbm1tL3Ztc2Nhbi5jLTI5MjUtXG5tbS92bXNjYW4uYzoyOTI2OnN0YXRpYyBzdHJ1Y3QgbW1fc3RydWN0ICpnZXRfbmV4dF9tbShzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrKVxubW0vdm1zY2FuLmMtMjkyNy17XG4tLVxubW0vdm1zY2FuLmMtMjkzMC1cdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQod2Fsay1cdTAwM2VscnV2ZWMpO1xubW0vdm1zY2FuLmM6MjkzMTpcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZSh3YWxrLVx1MDAzZWxydXZlYyk7XG5tbS92bXNjYW4uYy0yOTMyLVxuLS1cbm1tL3Ztc2Nhbi5jLTI5NDQtXG5tbS92bXNjYW4uYzoyOTQ1OnZvaWQgbHJ1X2dlbl9hZGRfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5tbS92bXNjYW4uYy0yOTQ2LXtcbi0tXG5tbS92bXNjYW4uYy0yOTQ4LVx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSk7XG5tbS92bXNjYW4uYzoyOTQ5Olx0c3RydWN0IGxydV9nZW5fbW1fbGlzdCAqbW1fbGlzdCA9IGdldF9tbV9saXN0KG1lbWNnKTtcbm1tL3Ztc2Nhbi5jLTI5NTAtXG4tLVxubW0vdm1zY2FuLmMtMjk1OS1cdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcbm1tL3Ztc2Nhbi5jOjI5NjA6XHRcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xubW0vdm1zY2FuLmMtMjk2MS1cbi0tXG5tbS92bXNjYW4uYy0yOTcxLVxubW0vdm1zY2FuLmM6Mjk3Mjp2b2lkIGxydV9nZW5fZGVsX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxubW0vdm1zY2FuLmMtMjk3My17XG5tbS92bXNjYW4uYy0yOTc0LVx0aW50IG5pZDtcbm1tL3Ztc2Nhbi5jOjI5NzU6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICptbV9saXN0O1xubW0vdm1zY2FuLmMtMjk3Ni1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IE5VTEw7XG4tLVxubW0vdm1zY2FuLmMtMjk4OS1cdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcbm1tL3Ztc2Nhbi5jOjI5OTA6XHRcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xubW0vdm1zY2FuLmMtMjk5MS1cbi0tXG5tbS92bXNjYW4uYy0zMDExLSNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jOjMwMTI6dm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5tbS92bXNjYW4uYy0zMDEzLXtcbi0tXG5tbS92bXNjYW4uYy0zMDM1LVxubW0vdm1zY2FuLmM6MzAzNjpcdGxydV9nZW5fZGVsX21tKG1tKTtcbm1tL3Ztc2Nhbi5jOjMwMzc6XHRscnVfZ2VuX2FkZF9tbShtbSk7XG5tbS92bXNjYW4uYy0zMDM4LX1cbi0tXG5tbS92bXNjYW4uYy0zMDQyLVxubW0vdm1zY2FuLmM6MzA0MzpzdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fbGlzdCAqZ2V0X21tX2xpc3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vdm1zY2FuLmMtMzA0NC17XG4tLVxubW0vdm1zY2FuLmMtMzA0Ny1cbm1tL3Ztc2Nhbi5jOjMwNDg6c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICpnZXRfbW1fc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxubW0vdm1zY2FuLmMtMzA0OS17XG4tLVxubW0vdm1zY2FuLmMtMzA1Mi1cbm1tL3Ztc2Nhbi5jOjMwNTM6c3RhdGljIHN0cnVjdCBtbV9zdHJ1Y3QgKmdldF9uZXh0X21tKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGspXG5tbS92bXNjYW4uYy0zMDU0LXtcbi0tXG5tbS92bXNjYW4uYy0zMDU5LVxubW0vdm1zY2FuLmM6MzA2MDpzdGF0aWMgdm9pZCByZXNldF9tbV9zdGF0cyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBib29sIGxhc3QpXG5tbS92bXNjYW4uYy0zMDYxLXtcbi0tXG5tbS92bXNjYW4uYy0zMDY0LVx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gd2Fsay1cdTAwM2VscnV2ZWM7XG5tbS92bXNjYW4uYzozMDY1Olx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XG5tbS92bXNjYW4uYy0zMDY2LVxuLS1cbm1tL3Ztc2Nhbi5jLTMwODQtXG5tbS92bXNjYW4uYzozMDg1OnN0YXRpYyBib29sIGl0ZXJhdGVfbW1fbGlzdChzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3QgbW1fc3RydWN0ICoqaXRlcilcbm1tL3Ztc2Nhbi5jLTMwODYte1xuLS1cbm1tL3Ztc2Nhbi5jLTMwOTEtXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jOjMwOTI6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICptbV9saXN0ID0gZ2V0X21tX2xpc3QobWVtY2cpO1xubW0vdm1zY2FuLmM6MzA5MzpcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xubW0vdm1zY2FuLmMtMzA5NC1cbi0tXG5tbS92bXNjYW4uYz0zMTQ5PXN0YXRpYyBib29sIGl0ZXJhdGVfbW1fbGlzdF9ub3dhbGsoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSlcbi0tXG5tbS92bXNjYW4uYy0zMTUyLVx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7XG5tbS92bXNjYW4uYzozMTUzOlx0c3RydWN0IGxydV9nZW5fbW1fbGlzdCAqbW1fbGlzdCA9IGdldF9tbV9saXN0KG1lbWNnKTtcbm1tL3Ztc2Nhbi5jOjMxNTQ6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jLTMxNTUtXG4tLVxubW0vdm1zY2FuLmM9MzIwMT1zdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyX21pbixcbi0tXG5tbS92bXNjYW4uYy0zMjA0LVx0aW50IGk7XG5tbS92bXNjYW4uYzozMjA1Olx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYy0zMjA2LVx0aW50IGhpc3QgPSBscnVfaGlzdF9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG4tLVxubW0vdm1zY2FuLmM9MzIyMD1zdGF0aWMgdm9pZCByZXNldF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBib29sIGNhcnJ5b3Zlcilcbi0tXG5tbS92bXNjYW4uYy0zMjIyLVx0aW50IGhpc3QsIHRpZXI7XG5tbS92bXNjYW4uYzozMjIzOlx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYy0zMjI0LVx0Ym9vbCBjbGVhciA9IGNhcnJ5b3ZlciA/IE5SX0hJU1RfR0VOUyA9PSAxIDogTlJfSElTVF9HRU5TIFx1MDAzZSAxO1xuLS1cbm1tL3Ztc2Nhbi5jPTMyNzI9c3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBpbnQgKnR5cGUsXG4tLVxubW0vdm1zY2FuLmMtMzI5Mi1cbm1tL3Ztc2Nhbi5jOjMyOTM6XHRcdC8qIGxydV9nZW5fZGVsX2ZvbGlvKCkgaGFzIGlzb2xhdGVkIHRoaXMgcGFnZT8gKi9cbm1tL3Ztc2Nhbi5jLTMyOTQtXHRcdGlmIChvbGRfZ2VuIFx1MDAzYyAwKVxuLS1cbm1tL3Ztc2Nhbi5jPTMzMDc9c3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS92bXNjYW4uYy0zMzA5LVx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG5tbS92bXNjYW4uYzozMzEwOlx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYzozMzExOlx0aW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKTtcbm1tL3Ztc2Nhbi5jLTMzMTItXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuLS1cbm1tL3Ztc2Nhbi5jLTMzMjYtXG5tbS92bXNjYW4uYzozMzI3Olx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcbm1tL3Ztc2Nhbi5jLTMzMjgtXG4tLVxubW0vdm1zY2FuLmMtMzMzMS1cbm1tL3Ztc2Nhbi5jOjMzMzI6c3RhdGljIHZvaWQgdXBkYXRlX2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL3Ztc2Nhbi5jLTMzMzMtXHRcdFx0ICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuLCBpbnQgdHlwZSlcbi0tXG5tbS92bXNjYW4uYy0zMzQ2LVxubW0vdm1zY2FuLmM6MzM0NzpzdGF0aWMgdm9pZCByZXNldF9iYXRjaF9zaXplKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGspXG5tbS92bXNjYW4uYy0zMzQ4LXtcbi0tXG5tbS92bXNjYW4uYy0zMzUwLVx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gbHJ1dmVjX2xpdmVfbG9ja19pcnEod2Fsay1cdTAwM2VscnV2ZWMpO1xubW0vdm1zY2FuLmM6MzM1MTpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xubW0vdm1zY2FuLmMtMzM1Mi1cbi0tXG5tbS92bXNjYW4uYy0zMzY1LVxubW0vdm1zY2FuLmM6MzM2NjpcdFx0aWYgKGxydV9nZW5faXNfYWN0aXZlKGxydXZlYywgZ2VuKSlcbm1tL3Ztc2Nhbi5jLTMzNjctXHRcdFx0bHJ1ICYjNDM7PSBMUlVfQUNUSVZFO1xuLS1cbm1tL3Ztc2Nhbi5jPTMzNzQ9c3RhdGljIGludCBzaG91bGRfc2tpcF92bWEodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBtbV93YWxrICphcmdzKVxuLS1cbm1tL3Ztc2Nhbi5jLTMzNzctXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IGFyZ3MtXHUwMDNldm1hO1xubW0vdm1zY2FuLmM6MzM3ODpcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVx1MDAzZXByaXZhdGU7XG5tbS92bXNjYW4uYy0zMzc5LVxuLS1cbm1tL3Ztc2Nhbi5jPTM1MTI9c3RhdGljIGJvb2wgc3VpdGFibGVfdG9fc2NhbihpbnQgdG90YWwsIGludCB5b3VuZylcbi0tXG5tbS92bXNjYW4uYy0zNTE5LVxubW0vdm1zY2FuLmM6MzUyMDpzdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL3Ztc2Nhbi5jLTM1MjEtXHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBkaXJ0eSlcbi0tXG5tbS92bXNjYW4uYy0zNTI3LVxubW0vdm1zY2FuLmM6MzUyODpcdG5ld19nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKFJFQURfT05DRShscnV2ZWMtXHUwMDNlbHJ1Z2VuLm1heF9zZXEpKTtcbm1tL3Ztc2Nhbi5jLTM1MjktXG4tLVxubW0vdm1zY2FuLmMtMzUzOC1cdFx0XHR1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbiwgdHlwZSk7XG5tbS92bXNjYW4uYzozNTM5Olx0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpKSB7XG5tbS92bXNjYW4uYy0zNTQwLVx0XHRvbGRfZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7XG4tLVxubW0vdm1zY2FuLmM9MzU0Nj1zdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS92bXNjYW4uYy0zNTU2LVx0c3RydWN0IGZvbGlvICpsYXN0ID0gTlVMTDtcbm1tL3Ztc2Nhbi5jOjM1NTc6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cdTAwM2Vwcml2YXRlO1xubW0vdm1zY2FuLmMtMzU1OC1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVx1MDAzZWxydXZlYyk7XG4tLVxubW0vdm1zY2FuLmM9MzYzNT1zdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS92bXNjYW4uYy0zNjQyLVx0c3RydWN0IGZvbGlvICpsYXN0ID0gTlVMTDtcbm1tL3Ztc2Nhbi5jOjM2NDM6XHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cdTAwM2Vwcml2YXRlO1xubW0vdm1zY2FuLmMtMzY0NC1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVx1MDAzZWxydXZlYyk7XG4tLVxubW0vdm1zY2FuLmM9MzcyMT1zdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS92bXNjYW4uYy0zNzMwLVx0dW5zaWduZWQgbG9uZyBmaXJzdCA9IC0xO1xubW0vdm1zY2FuLmM6MzczMTpcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVx1MDAzZXByaXZhdGU7XG5tbS92bXNjYW4uYzozNzMyOlx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKHdhbGstXHUwMDNlbHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jLTM3MzMtXG4tLVxubW0vdm1zY2FuLmM9Mzc5ND1zdGF0aWMgaW50IHdhbGtfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3Ztc2Nhbi5jLTM4MDAtXHR1bnNpZ25lZCBsb25nIG5leHQ7XG5tbS92bXNjYW4uYzozODAxOlx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXHUwMDNlcHJpdmF0ZTtcbm1tL3Ztc2Nhbi5jLTM4MDItXG4tLVxubW0vdm1zY2FuLmMtMzgzNS1cbm1tL3Ztc2Nhbi5jOjM4MzY6c3RhdGljIHZvaWQgd2Fsa19tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaylcbm1tL3Ztc2Nhbi5jLTM4Mzcte1xuLS1cbm1tL3Ztc2Nhbi5jLTM4NzAtXG5tbS92bXNjYW4uYzozODcxOnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICpzZXRfbW1fd2FsayhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBib29sIGZvcmNlX2FsbG9jKVxubW0vdm1zY2FuLmMtMzg3Mi17XG5tbS92bXNjYW4uYzozODczOlx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGN1cnJlbnQtXHUwMDNlcmVjbGFpbV9zdGF0ZS1cdTAwM2VtbV93YWxrO1xubW0vdm1zY2FuLmMtMzg3NC1cbi0tXG5tbS92bXNjYW4uYz0zODkxPXN0YXRpYyB2b2lkIGNsZWFyX21tX3dhbGsodm9pZClcbm1tL3Ztc2Nhbi5jLTM4OTIte1xubW0vdm1zY2FuLmM6Mzg5MzpcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBjdXJyZW50LVx1MDAzZXJlY2xhaW1fc3RhdGUtXHUwMDNlbW1fd2Fsaztcbm1tL3Ztc2Nhbi5jLTM4OTQtXG4tLVxubW0vdm1zY2FuLmM9MzkwND1zdGF0aWMgYm9vbCBpbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgc3dhcHBpbmVzcylcbi0tXG5tbS92bXNjYW4uYy0zOTA3LVx0aW50IHJlbWFpbmluZyA9IE1BWF9MUlVfQkFUQ0g7XG5tbS92bXNjYW4uYzozOTA4Olx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYy0zOTA5LVx0aW50IGhpc3QgPSBscnVfaGlzdF9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG5tbS92bXNjYW4uYzozOTEwOlx0aW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKTtcbm1tL3Ztc2Nhbi5jLTM5MTEtXG4tLVxubW0vdm1zY2FuLmM9Mzk1Nz1zdGF0aWMgdm9pZCB0cnlfdG9faW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcbi0tXG5tbS92bXNjYW4uYy0zOTYwLVx0Ym9vbCBzZXFfaW5jX2ZsYWcgPSBmYWxzZTtcbm1tL3Ztc2Nhbi5jOjM5NjE6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbm1tL3Ztc2Nhbi5jLTM5NjItXHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xuLS1cbm1tL3Ztc2Nhbi5jLTM5NjgtXHRcdHdoaWxlIChtaW5fc2VxW3R5cGVdICYjNDM7IE1JTl9OUl9HRU5TIFx1MDAzYz0gbHJ1Z2VuLVx1MDAzZW1heF9zZXEpIHtcbm1tL3Ztc2Nhbi5jOjM5Njk6XHRcdFx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtaW5fc2VxW3R5cGVdKTtcbm1tL3Ztc2Nhbi5jLTM5NzAtXG4tLVxubW0vdm1zY2FuLmMtMzk4OS1cbm1tL3Ztc2Nhbi5jOjM5OTA6XHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gbHJ1X2dlbl9mb2xpbyAqL1xubW0vdm1zY2FuLmMtMzk5MS1cdGlmIChzd2FwcGluZXNzIFx1MDAyNlx1MDAyNiBzd2FwcGluZXNzIFx1MDAzYz0gTUFYX1NXQVBQSU5FU1MpIHtcbi0tXG5tbS92bXNjYW4uYz00MDA5PXN0YXRpYyBib29sIGluY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jLTQwMTMtXHRpbnQgdHlwZSwgem9uZTtcbm1tL3Ztc2Nhbi5jOjQwMTQ6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbm1tL3Ztc2Nhbi5jLTQwMTUtcmVzdGFydDpcbi0tXG5tbS92bXNjYW4uYy00MDQ0LVx0ICovXG5tbS92bXNjYW4uYzo0MDQ1Olx0cHJldiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1heF9zZXEgLSAxKTtcbm1tL3Ztc2Nhbi5jOjQwNDY6XHRuZXh0ID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWF4X3NlcSAmIzQzOyAxKTtcbm1tL3Ztc2Nhbi5jLTQwNDctXG4tLVxubW0vdm1zY2FuLmM9NDA3ND1zdGF0aWMgYm9vbCB0cnlfdG9faW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSxcbi0tXG5tbS92bXNjYW4uYy00MDc3LVx0Ym9vbCBzdWNjZXNzO1xubW0vdm1zY2FuLmM6NDA3ODpcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7XG5tbS92bXNjYW4uYy00MDc5LVx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBOVUxMO1xubW0vdm1zY2FuLmM6NDA4MDpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xubW0vdm1zY2FuLmM6NDA4MTpcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xubW0vdm1zY2FuLmMtNDA4Mi1cbi0tXG5tbS92bXNjYW4uYy00MDkzLVx0ICogSWYgdGhlIGhhcmR3YXJlIGRvZXNuJiMzOTt0IGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBhY2Nlc3NlZCBiaXQsIGZhbGxiYWNrXG5tbS92bXNjYW4uYzo0MDk0Olx0ICogdG8gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLCB3aGljaCBvbmx5IGNsZWFycyB0aGUgYWNjZXNzZWQgYml0IGluIGFcbm1tL3Ztc2Nhbi5jLTQwOTUtXHQgKiBoYW5kZnVsIG9mIFBURXMuIFNwcmVhZGluZyB0aGUgd29yayBvdXQgb3ZlciBhIHBlcmlvZCBvZiB0aW1lIHVzdWFsbHlcbi0tXG5tbS92bXNjYW4uYz00MTU4PXN0YXRpYyB1bnNpZ25lZCBsb25nIGxydXZlY19ldmljdGFibGVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jLTQxNjEtXHR1bnNpZ25lZCBsb25nIHNlcSwgdG90YWwgPSAwO1xubW0vdm1zY2FuLmM6NDE2MjpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xubW0vdm1zY2FuLmMtNDE2My1cdERFRklORV9NQVhfU0VRKGxydXZlYyk7XG4tLVxubW0vdm1zY2FuLmMtNDE2Ny1cdFx0Zm9yIChzZXEgPSBtaW5fc2VxW3R5cGVdOyBzZXEgXHUwMDNjPSBtYXhfc2VxOyBzZXEmIzQzOyYjNDM7KSB7XG5tbS92bXNjYW4uYzo0MTY4Olx0XHRcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcbm1tL3Ztc2Nhbi5jLTQxNjktXHRcdFx0Zm9yICh6b25lID0gMDsgem9uZSBcdTAwM2MgTUFYX05SX1pPTkVTOyB6b25lJiM0MzsmIzQzOylcbi0tXG5tbS92bXNjYW4uYz00MTg5PXN0YXRpYyBib29sIGxydXZlY19pc19yZWNsYWltYWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuLS1cbm1tL3Ztc2Nhbi5jLTQyMDMtXG5tbS92bXNjYW4uYzo0MjA0Olx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShldmljdGFibGVfbWluX3NlcShtaW5fc2VxLCBzd2FwcGluZXNzKSk7XG5tbS92bXNjYW4uYy00MjA1LVx0YmlydGggPSBSRUFEX09OQ0UobHJ1dmVjLVx1MDAzZWxydWdlbi50aW1lc3RhbXBzW2dlbl0pO1xuLS1cbm1tL3Ztc2Nhbi5jLTQyMTAtLyogdG8gcHJvdGVjdCB0aGUgd29ya2luZyBzZXQgb2YgdGhlIGxhc3QgTiBqaWZmaWVzICovXG5tbS92bXNjYW4uYzo0MjExOnN0YXRpYyB1bnNpZ25lZCBsb25nIGxydV9nZW5fbWluX3R0bCBfX3JlYWRfbW9zdGx5O1xubW0vdm1zY2FuLmMtNDIxMi1cbm1tL3Ztc2Nhbi5jOjQyMTM6c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTQyMTQte1xubW0vdm1zY2FuLmMtNDIxNS1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbm1tL3Ztc2Nhbi5jOjQyMTY6XHR1bnNpZ25lZCBsb25nIG1pbl90dGwgPSBSRUFEX09OQ0UobHJ1X2dlbl9taW5fdHRsKTtcbm1tL3Ztc2Nhbi5jLTQyMTctXHRib29sIHJlY2xhaW1hYmxlID0gIW1pbl90dGw7XG4tLVxubW0vdm1zY2FuLmMtNDI1OS0gKi9cbm1tL3Ztc2Nhbi5jOjQyNjA6Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxubW0vdm1zY2FuLmMtNDI2MS17XG4tLVxubW0vdm1zY2FuLmMtNDI2NS1cdHVuc2lnbmVkIGxvbmcgZW5kO1xubW0vdm1zY2FuLmM6NDI2NjpcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7XG5tbS92bXNjYW4uYy00MjY3LVx0c3RydWN0IGZvbGlvICpsYXN0ID0gTlVMTDtcbi0tXG5tbS92bXNjYW4uYy00Mjc1LVx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xubW0vdm1zY2FuLmM6NDI3NjpcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZTtcbm1tL3Ztc2Nhbi5jLTQyNzctXG4tLVxubW0vdm1zY2FuLmM9NDM3NT1lbnVtIHtcbi0tXG5tbS92bXNjYW4uYy00MzgyLVxubW0vdm1zY2FuLmM6NDM4MzpzdGF0aWMgdm9pZCBscnVfZ2VuX3JvdGF0ZV9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBvcClcbm1tL3Ztc2Nhbi5jLTQzODQte1xuLS1cbm1tL3Ztc2Nhbi5jLTQ0MzAtXG5tbS92bXNjYW4uYzo0NDMxOnZvaWQgbHJ1X2dlbl9vbmxpbmVfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vdm1zY2FuLmMtNDQzMi17XG4tLVxubW0vdm1zY2FuLmMtNDQ1NS1cbm1tL3Ztc2Nhbi5jOjQ0NTY6dm9pZCBscnVfZ2VuX29mZmxpbmVfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vdm1zY2FuLmMtNDQ1Ny17XG4tLVxubW0vdm1zY2FuLmMtNDQ2Mi1cbm1tL3Ztc2Nhbi5jOjQ0NjM6XHRcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX09MRCk7XG5tbS92bXNjYW4uYy00NDY0LVx0fVxuLS1cbm1tL3Ztc2Nhbi5jLTQ0NjYtXG5tbS92bXNjYW4uYzo0NDY3OnZvaWQgbHJ1X2dlbl9yZWxlYXNlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbm1tL3Ztc2Nhbi5jLTQ0Njgte1xuLS1cbm1tL3Ztc2Nhbi5jLTQ0OTItXG5tbS92bXNjYW4uYzo0NDkzOnZvaWQgbHJ1X2dlbl9zb2Z0X3JlY2xhaW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxubW0vdm1zY2FuLmMtNDQ5NC17XG4tLVxubW0vdm1zY2FuLmMtNDQ5OC1cdGlmIChSRUFEX09OQ0UobHJ1dmVjLVx1MDAzZWxydWdlbi5zZWcpICE9IE1FTUNHX0xSVV9IRUFEKVxubW0vdm1zY2FuLmM6NDQ5OTpcdFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBNRU1DR19MUlVfSEVBRCk7XG5tbS92bXNjYW4uYy00NTAwLX1cbm1tL3Ztc2Nhbi5jLTQ1MDEtXG5tbS92bXNjYW4uYzo0NTAyOmJvb2wgcmVjaGVja19scnVfZ2VuX21heF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG5tbS92bXNjYW4uYy00NTAzLXtcbi0tXG5tbS92bXNjYW4uYz00NTE1PXN0YXRpYyB2b2lkIHRyeV90b19pbmNfbWF4X3NlcV9ub3dhbGsoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTQ1MTcte1xubW0vdm1zY2FuLmM6NDUxODpcdHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKm1tX2xpc3QgPSBnZXRfbW1fbGlzdChtZW1jZyk7XG5tbS92bXNjYW4uYzo0NTE5Olx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XG5tbS92bXNjYW4uYy00NTIwLVx0aW50IHN3YXBwaW5lc3MgPSBtZW1fY2dyb3VwX3N3YXBwaW5lc3MobWVtY2cpO1xuLS1cbm1tL3Ztc2Nhbi5jLTQ1NDgtICovXG5tbS92bXNjYW4uYzo0NTQ5OnZvaWQgbWF4X2xydV9nZW5fbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxubW0vdm1zY2FuLmMtNDU1MC17XG4tLVxubW0vdm1zY2FuLmMtNDU3NS0gKiAgICBnZW5lcmF0aW9ucyBvbiBhbiBMUlUgbGlzdC5cbm1tL3Ztc2Nhbi5jOjQ1NzY6ICogNC4gSW4gbHJ1X2dlbl9kZWxfZm9saW8oKSwgdGhlIGdlbmVyYXRpb24gdG8gd2hpY2ggdGhlIGZvbGlvIGJlbG9uZ3MgaXNcbm1tL3Ztc2Nhbi5jLTQ1NzctICogICAgZm91bmQgYmFzZWQgb24gdGhlIGdlbmVyYXRpb24gaW5mb3JtYXRpb24gaW4gZm9saW8tXHUwMDNlZmxhZ3MsIGFuZCB0aGVcbi0tXG5tbS92bXNjYW4uYy00NTc5LSAqICAgIHRoZSBscnUgc2l6ZSBjb3JyZWN0bHkgZHVyaW5nIHJlcGFyZW50aW5nLCBvdGhlcndpc2UgdGhlIGxydSBzaXplIG1heVxubW0vdm1zY2FuLmM6NDU4MDogKiAgICBiZSB1cGRhdGVkIGluY29ycmVjdGx5IGluIGxydV9nZW5fZGVsX2ZvbGlvKCkuXG5tbS92bXNjYW4uYy00NTgxLSAqXG4tLVxubW0vdm1zY2FuLmMtNDU4OS0gKi9cbm1tL3Ztc2Nhbi5jOjQ1OTA6c3RhdGljIHZvaWQgX19scnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYywgc3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyxcbm1tL3Ztc2Nhbi5jLTQ1OTEtXHRcdFx0XHQgICAgIGludCB6b25lLCBpbnQgdHlwZSlcbm1tL3Ztc2Nhbi5jLTQ1OTIte1xubW0vdm1zY2FuLmM6NDU5MzpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpjaGlsZF9scnVnZW4sICpwYXJlbnRfbHJ1Z2VuO1xubW0vdm1zY2FuLmMtNDU5NC1cdGVudW0gbHJ1X2xpc3QgbHJ1ID0gdHlwZSAqIExSVV9JTkFDVElWRV9GSUxFO1xuLS1cbm1tL3Ztc2Nhbi5jLTQ2MDAtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBnZXRfbnJfZ2VucyhjaGlsZF9scnV2ZWMsIHR5cGUpOyBpJiM0MzsmIzQzOykge1xubW0vdm1zY2FuLmM6NDYwMTpcdFx0aW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoY2hpbGRfbHJ1Z2VuLVx1MDAzZW1heF9zZXEgLSBpKTtcbm1tL3Ztc2Nhbi5jLTQ2MDItXHRcdGxvbmcgbnJfcGFnZXMgPSBjaGlsZF9scnVnZW4tXHUwMDNlbnJfcGFnZXNbZ2VuXVt0eXBlXVt6b25lXTtcbm1tL3Ztc2Nhbi5jOjQ2MDM6XHRcdGludCBjaGlsZF9scnVfYWN0aXZlID0gbHJ1X2dlbl9pc19hY3RpdmUoY2hpbGRfbHJ1dmVjLCBnZW4pID8gTFJVX0FDVElWRSA6IDA7XG5tbS92bXNjYW4uYzo0NjA0Olx0XHRpbnQgcGFyZW50X2xydV9hY3RpdmUgPSBscnVfZ2VuX2lzX2FjdGl2ZShwYXJlbnRfbHJ1dmVjLCBnZW4pID8gTFJVX0FDVElWRSA6IDA7XG5tbS92bXNjYW4uYy00NjA1LVxuLS1cbm1tL3Ztc2Nhbi5jLTQ2MTMtXG5tbS92bXNjYW4uYzo0NjE0Olx0XHRpZiAobHJ1X2dlbl9pc19hY3RpdmUoY2hpbGRfbHJ1dmVjLCBnZW4pICE9IGxydV9nZW5faXNfYWN0aXZlKHBhcmVudF9scnV2ZWMsIGdlbikpIHtcbm1tL3Ztc2Nhbi5jLTQ2MTUtXHRcdFx0X191cGRhdGVfbHJ1X3NpemUoY2hpbGRfbHJ1dmVjLCBscnUgJiM0MzsgY2hpbGRfbHJ1X2FjdGl2ZSwgem9uZSwgLW5yX3BhZ2VzKTtcbi0tXG5tbS92bXNjYW4uYy00NjIwLVxubW0vdm1zY2FuLmM6NDYyMTp2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxubW0vdm1zY2FuLmMtNDYyMi17XG4tLVxubW0vdm1zY2FuLmMtNDYzMi1cdFx0Zm9yICh0eXBlID0gMDsgdHlwZSBcdTAwM2MgQU5PTl9BTkRfRklMRTsgdHlwZSYjNDM7JiM0MzspXG5tbS92bXNjYW4uYzo0NjMzOlx0XHRcdF9fbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhjaGlsZF9scnV2ZWMsIHBhcmVudF9scnV2ZWMsIHppZCwgdHlwZSk7XG5tbS92bXNjYW4uYy00NjM0LVxuLS1cbm1tL3Ztc2Nhbi5jPTQ2NTU9c3RhdGljIGJvb2wgc29ydF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuLS1cbm1tL3Ztc2Nhbi5jLTQ2NjQtXHRpbnQgdGllciA9IGxydV90aWVyX2Zyb21fcmVmcyhyZWZzLCB3b3JraW5nc2V0KTtcbm1tL3Ztc2Nhbi5jOjQ2NjU6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbm1tL3Ztc2Nhbi5jLTQ2NjYtXG4tLVxubW0vdm1zY2FuLmMtNDY3My1cdC8qIHByb21vdGVkICovXG5tbS92bXNjYW4uYzo0Njc0Olx0aWYgKGdlbiAhPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKSkge1xubW0vdm1zY2FuLmMtNDY3NS1cdFx0bGlzdF9tb3ZlKFx1MDAyNmZvbGlvLVx1MDAzZWxydSwgXHUwMDI2bHJ1Z2VuLVx1MDAzZWZvbGlvc1tnZW5dW3R5cGVdW3pvbmVdKTtcbi0tXG5tbS92bXNjYW4uYz00NzA0PXN0YXRpYyBib29sIGlzb2xhdGVfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00NzIxLVxubW0vdm1zY2FuLmM6NDcyMjpcdHN1Y2Nlc3MgPSBscnVfZ2VuX2RlbF9mb2xpbyhscnV2ZWMsIGZvbGlvLCB0cnVlKTtcbm1tL3Ztc2Nhbi5jLTQ3MjMtXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIXN1Y2Nlc3MsIGZvbGlvKTtcbi0tXG5tbS92bXNjYW4uYz00NzI4PXN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtNDczOS1cdHVuc2lnbmVkIGxvbmcgcmVtYWluaW5nID0gbnJfdG9fc2Nhbjtcbm1tL3Ztc2Nhbi5jOjQ3NDA6XHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbm1tL3Ztc2Nhbi5jLTQ3NDEtXG4tLVxubW0vdm1zY2FuLmMtNDc0Ny1cbm1tL3Ztc2Nhbi5jOjQ3NDg6XHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKTtcbm1tL3Ztc2Nhbi5jLTQ3NDktXG4tLVxubW0vdm1zY2FuLmM9NDg3OD1zdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy00ODg2LVx0c3RydWN0IHJlY2xhaW1fc3RhdCBzdGF0O1xubW0vdm1zY2FuLmM6NDg4NzpcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7XG5tbS92bXNjYW4uYy00ODg4LVx0aW50IHNjYW5uZWQsIHJlY2xhaW1lZDtcbi0tXG5tbS92bXNjYW4uYy00OTM3LVx0XHQvKiBkb24mIzM5O3QgYWRkIHJlamVjdGVkIGZvbGlvcyB0byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gKi9cbm1tL3Ztc2Nhbi5jOjQ5Mzg6XHRcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSkge1xubW0vdm1zY2FuLmMtNDkzOS1cdFx0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuLS1cbm1tL3Ztc2Nhbi5jPTUxMDI9c3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTEwOS1cbm1tL3Ztc2Nhbi5jOjUxMTA6XHQvKiBscnVfZ2VuX2FnZV9ub2RlKCkgY2FsbGVkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oKSAqL1xubW0vdm1zY2FuLmMtNTExMS1cdGlmIChtZW1fY2dyb3VwX2JlbG93X21pbihOVUxMLCBtZW1jZykpXG4tLVxubW0vdm1zY2FuLmM9NTE0Mz1zdGF0aWMgdm9pZCBzaHJpbmtfbWFueShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MTQ5LVx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xubW0vdm1zY2FuLmM6NTE1MDpcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW47XG5tbS92bXNjYW4uYy01MTUxLVx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuLS1cbm1tL3Ztc2Nhbi5jLTUxNjMtXHRcdGlmIChvcCkge1xubW0vdm1zY2FuLmM6NTE2NDpcdFx0XHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIG9wKTtcbm1tL3Ztc2Nhbi5jLTUxNjUtXHRcdFx0b3AgPSAwO1xuLS1cbm1tL3Ztc2Nhbi5jLTUxNzctXHRcdGlmICghbWVtX2Nncm91cF90cnlnZXQobWVtY2cpKSB7XG5tbS92bXNjYW4uYzo1MTc4Olx0XHRcdGxydV9nZW5fcmVsZWFzZV9tZW1jZyhtZW1jZyk7XG5tbS92bXNjYW4uYy01MTc5LVx0XHRcdG1lbWNnID0gTlVMTDtcbi0tXG5tbS92bXNjYW4uYy01MTk1LVx0aWYgKG9wKVxubW0vdm1zY2FuLmM6NTE5NjpcdFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBvcCk7XG5tbS92bXNjYW4uYy01MTk3LVxuLS1cbm1tL3Ztc2Nhbi5jLTUyMDItXG5tbS92bXNjYW4uYzo1MjAzOlx0LyogcmVzdGFydCBpZiByYWNlZCB3aXRoIGxydV9nZW5fcm90YXRlX21lbWNnKCkgKi9cbm1tL3Ztc2Nhbi5jLTUyMDQtXHRpZiAoZ2VuICE9IGdldF9udWxsc192YWx1ZShwb3MpKVxuLS1cbm1tL3Ztc2Nhbi5jLTUyMTItXG5tbS92bXNjYW4uYzo1MjEzOnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNTIxNC17XG4tLVxubW0vdm1zY2FuLmMtNTIyNi1cdGlmICh0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKSlcbm1tL3Ztc2Nhbi5jOjUyMjc6XHRcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX1lPVU5HKTtcbm1tL3Ztc2Nhbi5jLTUyMjgtXG4tLVxubW0vdm1zY2FuLmMtNTIzMy1cbm1tL3Ztc2Nhbi5jOjUyMzQ6c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTUyMzUte1xuLS1cbm1tL3Ztc2Nhbi5jPTUyODA9c3RhdGljIGJvb2wgX19tYXliZV91bnVzZWQgc3RhdGVfaXNfdmFsaWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxubW0vdm1zY2FuLmMtNTI4MS17XG5tbS92bXNjYW4uYzo1MjgyOlx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYy01MjgzLVxuLS1cbm1tL3Ztc2Nhbi5jPTUzMDM9c3RhdGljIGJvb2wgZmlsbF9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUzMTctXHRcdFx0Lypcbm1tL3Ztc2Nhbi5jOjUzMTg6XHRcdFx0ICogbHJ1X2dlbl9hZGRfZm9saW8oKSB1c2VzIGxpc3RfYWRkX3RhaWwoKSByYXRoZXJcbm1tL3Ztc2Nhbi5jLTUzMTktXHRcdFx0ICogdGhhbiBsaXN0X2FkZCgpIHdoZW4gcmVjbGFpbWluZyBpcyB0cnVlLiAgTWF0Y2hcbi0tXG5tbS92bXNjYW4uYy01MzM2LVx0XHRcdCAqL1xubW0vdm1zY2FuLmM6NTMzNzpcdFx0XHRzdWNjZXNzID0gbHJ1X2dlbl9hZGRfZm9saW8obHJ1dmVjLCBmb2xpbywgIWFjdGl2ZSk7XG5tbS92bXNjYW4uYy01MzM4LVx0XHRcdFZNX1dBUk5fT05fT05DRSghc3VjY2Vzcyk7XG4tLVxubW0vdm1zY2FuLmM9NTM0OD1zdGF0aWMgYm9vbCBkcmFpbl9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuLS1cblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODI3NgoJCQkJCQkJb3V0cHV0OiAxNzAKCQkJCQkJCXRob3VnaHRzOiA4MTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gTXVsdGktR2VuIExSVSBGdW5jdGlvbmFsaXR5KioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBnb3Qgc28gZmFyLiBJIG5lZWQgdG8gaWRlbnRpZnkga2V5IGtlcm5lbCBmdW5jdGlvbnMgZm9yIGZ1enppbmcgcmVsYXRlZCB0byB0aGlzIE11bHRpLUdlbiBMUlUgd29yaywgYW5kIGFsc28gZmlndXJlIG91dCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIGF2b2lkaW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIGtlZXAgdGhlIHRlc3RpbmcgZm9jdXNlZC4gQmFzZWQgb24gdGhlIHJlcXVpcmVtZW50cywgSSYjMzk7bSBmb2N1c2luZyBvbiBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuCgpGaXJzdCwgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSByZWxldmFudCBhbmQgbWVldCB0aG9zZSBjcml0ZXJpYS4gSSBpZGVudGlmaWVkIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHdoaWNoIGFyZSBsaWtlbHkgZW50cnlwb2ludHMgdG8gdGhlIG11bHRpLWdlbiBMUlUgZnVuY3Rpb25hbGl0eToKCiogICBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgKGluIGBtbS92bXNjYW4uY2ApIC0gTG9va3MgcHJvbWlzaW5nLgoqICAgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgIChpbiBgbW0vbWlncmF0ZS5jYCkgLSBTZWVtcyByZWxldmFudCB0byBwYWdlIG1pZ3JhdGlvbi4KKiAgIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgKGluIGBtbS9tZW1jb250cm9sLmNgKSAtIFRoaXMgbG9va3MgaW1wb3J0YW50IGZvciBtZW1vcnkgY2dyb3VwIGludGVncmF0aW9uLgoqICAgYGxydV9nZW5fcmVwYXJlbnRfbWVtY2dgIChpbiBgbW0vdm1zY2FuLmNgKSAtIExpa2VseSByZWxldmFudCB0byBtZW1jZyBvcGVyYXRpb25zLgoqICAgYGxydV9nZW5fc29mdF9yZWNsYWltYCAoaW4gYG1tL3Ztc2Nhbi5jYCkgLSBUaGlzIGlzIHByb2JhYmx5IGEgZ29vZCBlbnRyeXBvaW50LgoKTm93LCByZWdhcmRpbmcgY29uZmlndXJhdGlvbnMsIGl0IHNlZW1zIGNsZWFyIHRoYXQgYENPTkZJR19MUlVfR0VOYCBpcyBlc3NlbnRpYWwsIGFzIGlzIGBDT05GSUdfTFJVX0dFTl9FTkFCTEVEYCBiZWNhdXNlIGl0JiMzOTtzIGVuYWJsZWQgYnkgZGVmYXVsdC4gR2l2ZW4gdGhlIGZ1bmN0aW9ucyBJJiMzOTt2ZSBpZGVudGlmaWVkLCBgQ09ORklHX01FTUNHYCBpcyByZXF1aXJlZCBmb3IgdGhlIG1lbW9yeSBjZ3JvdXAgYXNwZWN0IGFuZCBhbHNvIGBDT05GSUdfTUlHUkFUSU9OYCBpcyBuZWVkZWQgZm9yIGBmb2xpb19taWdyYXRlX2ZsYWdzYCBhbmQgcmVsYXRlZCBmdW5jdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZyB0aGF0IHRoZXNlIGRlcGVuZCBvbi4KCkxvb2tpbmcgYXQgdGhlIEtjb25maWcgZmlsZXMsIEkgc2VlIHRoYXQ6CgoqICAgYExSVV9HRU5gIGRlcGVuZHMgb24gYE1NVWAsIGFuZCBhbHNvIGA2NEJJVCB8fCAhU1BBUlNFTUVNIHx8IFNQQVJTRU1FTV9WTUVNTUFQYCAoSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aG9zZSBmb3IgYnVpbGRpbmcgY29uZmlndXJhdGlvbnMpLgoqICAgYExSVV9HRU5fRU5BQkxFRGAgZGVwZW5kcyBvbiBgTFJVX0dFTmAuCiogICBgTUVNQ0dgIGRlcGVuZHMgb24gYENHUk9VUFNgLgoqICAgQW5kIGZpbmFsbHksIGBOVU1BX01JR1JBVElPTmAgb3IgYE1JR1JBVElPTmAgaXMgbmVlZGVkLiBgQ09NUEFDVElPTmAgaXMgZ2VuZXJhbGx5IHNlbGVjdGVkLgoKU28sIEkgd2lsbCBhZGQgdGhlc2UgZnVuY3Rpb25zIGludG8gdGhlIGBGb2N1c1N5bWJvbHNgIGFycmF5OgoKKiAgIGBscnVfZ2VuX2xvb2tfYXJvdW5kYAoqICAgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgCiogICBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgCiogICBgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZ2AKKiAgIGBscnVfZ2VuX3NvZnRfcmVjbGFpbWAKCkFuZCB0aGVzZSBjb25maWd1cmF0aW9ucyB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFycmF5OgoKKiAgIExSVV9HRU4KKiAgIExSVV9HRU5fRU5BQkxFRAoqICAgTUVNQ0cKKiAgIE1JR1JBVElPTgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtMUlVfR0VOX0VOQUJMRUQmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TUlHUkFUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bHJ1X2dlbl9sb29rX2Fyb3VuZCYjMzQ7LAogICAgJiMzNDtmb2xpb19taWdyYXRlX2ZsYWdzJiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplJiMzNDssCiAgICAmIzM0O2xydV9nZW5fcmVwYXJlbnRfbWVtY2cmIzM0OywKICAgICYjMzQ7bHJ1X2dlbl9zb2Z0X3JlY2xhaW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBNdWx0aS1HZW4gTFJVIChNR0xSVSksIHBhZ2UgcmVmZXJlbmNlIGNvdW50aW5nLCBmb2xpbyBmbGFncyBtYW5hZ2VtZW50LCBmb2xpbyBtaWdyYXRpb24sIGFuZCBtZW1jZyBMUlUgc2l6ZSBhY2NvdW50aW5nLiBUaGVzZSBmdW5jdGlvbmFsIGNoYW5nZXMgYWZmZWN0IHBhZ2UgcmVjbGFtYXRpb24sIGFnaW5nLCBhbmQgbWlncmF0aW9uIGJlaGF2aW9yIGluIHJlYWNoYWJsZSBjb3JlIG1tIGNvZGUgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xydV9nZW5fbG9va19hcm91bmQmIzM0OywKICAgICYjMzQ7Zm9saW9fbWlncmF0ZV9mbGFncyYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZSYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX3JlcGFyZW50X21lbWNnJiMzNDssCiAgICAmIzM0O2xydV9nZW5fc29mdF9yZWNsYWltJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW4gTXVsdGktR2VuIExSVSAoTUdMUlUpLCBwYWdlIHJlZmVyZW5jZSBjb3VudGluZywgZm9saW8gZmxhZ3MgbWFuYWdlbWVudCwgZm9saW8gbWlncmF0aW9uLCBhbmQgbWVtY2cgTFJVIHNpemUgYWNjb3VudGluZy4gVGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIGFmZmVjdCBwYWdlIHJlY2xhbWF0aW9uLCBhZ2luZywgYW5kIG1pZ3JhdGlvbiBiZWhhdmlvciBpbiByZWFjaGFibGUgY29yZSBtbSBjb2RlIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo0MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyBNdWx0aS1HZW4gTFJVIChNR0xSVSkgZm9saW8gZmxhZyBvcGVyYXRpb25zIChpbnRyb2R1Y2luZyBoZWxwZXJzIGxpa2UgbHJ1X3NldF9nZW5fZmxhZ3MsIGxydV9zZXRfcmVmc19mbGFncywgZm9saW9fc2V0X2xydV9yZWZzKSwgdXBkYXRlcyBmb2xpbyByZWZlcmVuY2UvZ2VuZXJhdGlvbiB0cmFja2luZyBhY3Jvc3MgcmVjbGFpbSBhbmQgbWlncmF0aW9uIHBhdGhzLCBhbmQgY2hhbmdlcyBtZW1jZyBscnVfem9uZV9zaXplIHRyYWNraW5nIGZyb20gdW5zaWduZWQgbG9uZyB0byBzaWduZWQgbG9uZyB3aXRoIGJvdW5kcyBjaGVja2luZy5cblxuTm8ga2VybmVsLXRvLXVzZXIgZGF0YSBjb3BpZXMsIGlvY3Rscywgb3IgdXNlci1mYWNpbmcgc3RydWN0cyBhcmUgbW9kaWZpZWQuIFN0YWNrIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIChlLmcuLCBgdHlwZWAgaW4gYHdhbGtfdXBkYXRlX2ZvbGlvYCkgYXJlIGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyByZWFkIChhcyBgdHlwZWAgaXMgb25seSBwYXNzZWQgdG8gYHVwZGF0ZV9iYXRjaF9zaXplYCB3aGVuIGBvbGRfZ2VuIFx1MDAzZT0gMGAsIHdoaWNoIGd1YXJhbnRlZXMgYXNzaWdubWVudCBpbiBgZm9saW9fdXBkYXRlX2dlbmApLiBObyB1bmluaXRpYWxpemVkIGhlYXAsIHN0YWNrLCBvciBwYWdlIGFsbG9jYXRpb25zIGFyZSBleHBvc2VkLiBQb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgaW4gdGhlc2UgTU0gcGF0aHMgKHN1Y2ggYXMgY29uY3VycmVuY3kgaXNzdWVzIG9yIGludmFsaWQgZm9saW8gZGVyZWZlcmVuY2VzKSBmYWxsIHVuZGVyIEtBU0FOL0xPQ0tERVAgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgZGV0ZWN0b3JzLiBUaHVzLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0ZDcwZDFjYjc1NzEzNDIyODZmNDZjM2I1YTg4ZDQ5ZWY2NDlhZGI3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAwNDo0MDo0OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKaW5kZXggN2QxYzBjZTE4OWE4OC4uODY3ODBlZjY1ZWFmYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKQEAgLTExMyw3ICYjNDM7MTEzLDcgQEAgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgewogCS8qIEZpZWxkcyB3aGljaCBnZXQgdXBkYXRlZCBvZnRlbiBhdCB0aGUgZW5kLiAqLwogCXN0cnVjdCBscnV2ZWMJCWxydXZlYzsKIAlDQUNIRUxJTkVfUEFERElORyhfcGFkMl8pOwotCXVuc2lnbmVkIGxvbmcJCWxydV96b25lX3NpemVbTUFYX05SX1pPTkVTXVtOUl9MUlVfTElTVFNdOwomIzQzOwlsb25nCQkJbHJ1X3pvbmVfc2l6ZVtNQVhfTlJfWk9ORVNdW05SX0xSVV9MSVNUU107CiAJc3RydWN0IG1lbV9jZ3JvdXBfcmVjbGFpbV9pdGVyCWl0ZXI7CiAKIAkvKgpAQCAtOTAyLDEwICYjNDM7OTAyLDE1IEBAIHN0YXRpYyBpbmxpbmUKIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCWVudW0gbHJ1X2xpc3QgbHJ1LCBpbnQgem9uZV9pZHgpCiB7CiYjNDM7CWxvbmcgdmFsOwogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejsKIAogCW16ID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7Ci0JcmV0dXJuIFJFQURfT05DRShtei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7CiYjNDM7CXZhbCA9IFJFQURfT05DRShtei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UodmFsICZsdDsgMCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIHZhbDsKIH0KIAogdm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaAppbmRleCA2MjFjODY1M2Q4ZjdlLi5hYjY5Yjk5MzA4OTNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmgKQEAgLTMwLDYgJiM0MzszMCwxNyBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19pc19maWxlX2xydShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXJldHVybiAhZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1IC0gU2hvdWxkIHRoZSBmb2xpbyBiZSBvbiBhIGZpbGUgTFJVIG9yIGFub24gTFJVPwomIzQzOyAqIEBmbGFnczogVGhlIGZvbGlvJiMzOTtzIGZsYWdzLgomIzQzOyAqCiYjNDM7ICogSnVzdCBsaWtlIGZvbGlvX2lzX2ZpbGVfbHJ1IGJ1dCB0YWtlIHRoZSBmb2xpbyBmbGFncyBkaXJlY3RseSBpbnN0ZWFkLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZsYWdzKQomIzQzO3sKJiM0MzsJcmV0dXJuICF0ZXN0X2JpdChQR19zd2FwYmFja2VkLCBmbGFncyk7CiYjNDM7fQomIzQzOwogc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJCQllbnVtIGxydV9saXN0IGxydSwgZW51bSB6b25lX3R5cGUgemlkLAogCQkJCWxvbmcgbnJfcGFnZXMpCkBAIC0xNDIsMTAgJiM0MzsxNTMsNjYgQEAgc3RhdGljIGlubGluZSBpbnQgbHJ1X3RpZXJfZnJvbV9yZWZzKGludCByZWZzLCBib29sIHdvcmtpbmdzZXQpCiAJcmV0dXJuIHdvcmtpbmdzZXQgPyBNQVhfTlJfVElFUlMgLSAxIDogb3JkZXJfYmFzZV8yKHJlZnMpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzOy8qKgomIzQzOyAqIGxydV9zZXRfZ2VuX2ZsYWdzIC0gU2V0IHRoZSBMUlUgZ2VuZXJhdGlvbiBudW1iZXIgdG8gc3BlY2lmaWVkIGZvbGlvIGZsYWdzLgomIzQzOyAqIEBmbGFnczogcG9pbnRlciB0byB0aGUgZm9saW8gZmxhZ3MKJiM0MzsgKiBAZ2VuOiBnZW5lcmF0aW9uIG51bWJlciwgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfc2V0X2dlbl9mbGFncyh1bnNpZ25lZCBsb25nICpmbGFncywgaW50IGdlbikKJiM0Mzt7CiYjNDM7CUJVSUxEX0JVR19PTihMUlVfR0VOX01BU0sgJmFtcDsgTFJVX1JFRlNfTUFTSyk7CiYjNDM7CVZNX1dBUk5fT05fT05DRShnZW4gJmd0Oz0gTUFYX05SX0dFTlMgfHwgZ2VuICZsdDsgMCk7CiYjNDM7CS8qIFN0b3JlIGdlbiBvZmZzZXQgYnkgMSwgemVybyBtZWFucyB0aGUgZm9saW8gaXMgb2ZmLWxpc3QuICovCiYjNDM7CSpmbGFncyAmYW1wOz0gfkxSVV9HRU5fTUFTSzsKJiM0MzsJKmZsYWdzIHw9IChnZW4gJiM0MzsgMVVMKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBscnVfZ2V0X2dlbl9mbGFncyAtIFJldHVybiB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIGZyb20gZm9saW8gZmxhZ3MuCiYjNDM7ICogQGZsYWdzOiBmb2xpbyBmbGFncwomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLiBSZXR1cm5zCiYjNDM7ICogLTEgaWYgdGhlIGZsYWdzIGluZGljYXRlIHRoZSBmb2xpbyBpcyBvZmYgdGhlIGxpc3QgKGUuZy4sIGlzb2xhdGVkKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGludCBscnVfZ2V0X2dlbl9mbGFncyh1bnNpZ25lZCBsb25nIGZsYWdzKQomIzQzO3sKJiM0MzsJaW50IGdlbiA9ICgoZmxhZ3MgJmFtcDsgTFJVX0dFTl9NQVNLKSAmZ3Q7Jmd0OyBMUlVfR0VOX1BHT0ZGKSAtIDE7CiYjNDM7CiYjNDM7CS8qIEV4Y2x1ZGUgdGhlIGxlZ2FsIC0xIGZyb20gdGhlIHVuc2lnbmVkIE1BWF9OUl9HRU5TIGNvbXBhcmlzb24gKi8KJiM0MzsJVk1fV0FSTl9PTl9PTkNFKGdlbiAhPSAtMSAmYW1wOyZhbXA7IGdlbiAmZ3Q7PSBNQVhfTlJfR0VOUyk7CiYjNDM7CXJldHVybiBnZW47CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGxydV9zZXRfcmVmc19mbGFncyAtIFNldCB0aGUgTFJVIHJlZmVyZW5jZWQgY291bnQgdG8gZm9saW8gZmxhZ3MuCiYjNDM7ICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFncwomIzQzOyAqIEByZWZzOiByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IG51bWJlciwgYmV0d2VlbiAwIGFuZCBMUlVfUkVGU19NQVgsIGluY2x1c2l2ZS4KJiM0MzsgKgomIzQzOyAqIEZvciBNR0xSVSwgUEdfcmVmZXJlbmNlZCBob2xkcyB0aGUgZmlyc3QgcmVmLCBhbmQgdGhlIGV4dHJhIGJpdHMgaG9sZCB0aGUKJiM0MzsgKiByZW1haW5pbmcgcmVmcy4gRm9yIGNsYXNzaWNhbCBMUlUgdGhlIGV4dHJhIGJpdHMgYXJlIG5vdCB1c2VkLCBzbyBpdCBjYW4KJiM0MzsgKiBhbHNvIGJlIHNlZW4gYXMgdGhlIHJlZnMgY291bnQgbmV2ZXIgZXhjZWVkcyAxLiBJbiBib3RoIGNhc2VzLCByZWZzID09IDEKJiM0MzsgKiBtZWFucyBQR19yZWZlcmVuY2VkIGlzIHNldCBhbmQgdGhlIGV4dHJhIGJpdHMgYXJlIHplcm8sIGFuZCByZWZzID09IDAgbWVhbnMKJiM0MzsgKiBQR19yZWZlcmVuY2VkIGFuZCB0aGUgZXh0cmEgYml0cyBhcmUgYWxsIHVuc2V0LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfc2V0X3JlZnNfZmxhZ3ModW5zaWduZWQgbG9uZyAqZmxhZ3MsIHVuc2lnbmVkIGludCByZWZzKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwomIzQzOwlWTV9XQVJOX09OX09OQ0UocmVmcyAmZ3Q7IExSVV9SRUZTX01BWCk7CiYjNDM7CUJVSUxEX0JVR19PTihMUlVfUkVGU19NQVggIT0gKExSVV9SRUZTX01BU0sgJmd0OyZndDsgTFJVX1JFRlNfUEdPRkYpICYjNDM7IDEpOwogCiYjNDM7CSpmbGFncyAmYW1wOz0gfkxSVV9SRUZTX0ZMQUdTOwomIzQzOwlpZiAoIXJlZnMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CSpmbGFncyB8PSAoQklUKFBHX3JlZmVyZW5jZWQpIHwgKChyZWZzIC0gMVVMKSAmbHQ7Jmx0OyBMUlVfUkVGU19QR09GRikpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBscnVfZ2V0X3JlZnNfZmxhZ3MgLSBSZXR1cm4gTFJVIHJlZmVyZW5jZWQgLyBhY2Nlc3MgY291bnQgZnJvbSBmb2xpbyBmbGFncy4KJiM0MzsgKiBAZmxhZ3M6IGZvbGlvIGZsYWdzCiYjNDM7ICoKJiM0MzsgKiBSZWFkcyB0aGUgTFJVIHJlZmVyZW5jZWQgY291bnQgc2V0IGJ5IGxydV9zZXRfcmVmc19mbGFncygpLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGxydV9nZXRfcmVmc19mbGFncyh1bnNpZ25lZCBsb25nIGZsYWdzKQomIzQzO3sKIAlpZiAoIShmbGFncyAmYW1wOyBCSVQoUEdfcmVmZXJlbmNlZCkpKQogCQlyZXR1cm4gMDsKIAkvKgpAQCAtMTU1LDExICYjNDM7MjIyLDI0IEBAIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJcmV0dXJuICgoZmxhZ3MgJmFtcDsgTFJVX1JFRlNfTUFTSykgJmd0OyZndDsgTFJVX1JFRlNfUEdPRkYpICYjNDM7IDE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwomIzQzOwlyZXR1cm4gbHJ1X2dldF9yZWZzX2ZsYWdzKFJFQURfT05DRSgqY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKSk7CiYjNDM7fQogCi0JcmV0dXJuICgoZmxhZ3MgJmFtcDsgTFJVX0dFTl9NQVNLKSAmZ3Q7Jmd0OyBMUlVfR0VOX1BHT0ZGKSAtIDE7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgcmVmcykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCW5ld19mbGFncyA9IG9sZF9mbGFnczsKJiM0MzsJCWxydV9zZXRfcmVmc19mbGFncygmYW1wO25ld19mbGFncywgcmVmcyk7CiYjNDM7CX0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksICZhbXA7b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X2dlbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIGxydV9nZXRfZ2VuX2ZsYWdzKFJFQURfT05DRSgqY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2lzX2FjdGl2ZShjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBnZW4pCkBAIC0yNzAsNyAmIzQzOzM1MCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2FkZF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpOwogCWZsYWdzID0gKGdlbiAmIzQzOyAxVUwpICZsdDsmbHQ7IExSVV9HRU5fUEdPRkY7CiAJLyogc2VlIHRoZSBjb21tZW50IG9uIE1JTl9OUl9HRU5TIGFib3V0IFBHX2FjdGl2ZSAqLwotCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX0dFTl9NQVNLIHwgQklUKFBHX2FjdGl2ZSksIGZsYWdzKTsKJiM0MzsJc2V0X21hc2tfYml0cyhmb2xpb19mbGFncyhmb2xpbywgMCksIExSVV9HRU5fTUFTSyB8IEJJVChQR19hY3RpdmUpLCBmbGFncyk7CiAKIAlscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIC0xLCBnZW4pOwogCS8qIGZvciBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoKSAqLwpAQCAtMjk1LDcgJiM0MzszNzUsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCiAJLyogZm9yIGZvbGlvX21pZ3JhdGVfZmxhZ3MoKSAqLwogCWZsYWdzID0gIXJlY2xhaW1pbmcgJmFtcDsmYW1wOyBscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIGdlbikgPyBCSVQoUEdfYWN0aXZlKSA6IDA7Ci0JZmxhZ3MgPSBzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9HRU5fTUFTSywgZmxhZ3MpOwomIzQzOwlmbGFncyA9IHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0ssIGZsYWdzKTsKIAlnZW4gPSAoKGZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwogCiAJbHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBnZW4sIC0xKTsKQEAgLTMwNCwxMSAmIzQzOzM4NCwxOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZCkKJiM0MzsvKioKJiM0MzsgKiBmb2xpb19taWdyYXRlX2xydV9yZWZzIC0gY29weSB0aGUgcmVmZXJlbmNlIHN0YXRlIHRvIGEgbmV3IGZvbGlvCiYjNDM7ICogQG5ldzogdGhlIGRlc3RpbmF0aW9uIGZvbGlvCiYjNDM7ICogQG9sZDogdGhlIHNvdXJjZSBmb2xpbwomIzQzOyAqCiYjNDM7ICogVHJhbnNmZXIgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBAbmV3IGR1cmluZyBtaWdyYXRpb246IHRoZSBNR0xSVQomIzQzOyAqIHJlZnMgY291bnQsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkLCBvciBqdXN0IFBHX3JlZmVyZW5jZWQgZm9yIHRoZQomIzQzOyAqIGFjdGl2ZS9pbmFjdGl2ZSBMUlUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKQogewotCXVuc2lnbmVkIGxvbmcgcmVmcyA9IFJFQURfT05DRShvbGQtJmd0O2ZsYWdzLmYpICZhbXA7IExSVV9SRUZTX01BU0s7Ci0KLQlzZXRfbWFza19iaXRzKCZhbXA7bmV3LSZndDtmbGFncy5mLCBMUlVfUkVGU19NQVNLLCByZWZzKTsKJiM0MzsJQlVJTERfQlVHX09OKExSVV9SRUZTX01BU0sgJmFtcDsgQklUKFBHX3JlZmVyZW5jZWQpKTsKJiM0MzsJZm9saW9fc2V0X2xydV9yZWZzKG5ldywgZm9saW9fbHJ1X3JlZnMob2xkKSk7CiB9CiAjZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi8KIApAQCAtMzM3LDkgJiM0Mzs0MjUsMTAgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZCkKIHsKLQomIzQzOwlpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKG9sZCkpCiYjNDM7CQlmb2xpb19zZXRfcmVmZXJlbmNlZChuZXcpOwogfQogI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCmluZGV4IDk0ZjljM2ZmNTQxNjAuLjliMjdjZjUzYmRiYzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaApAQCAtNDkyLDExICYjNDM7NDkyLDE0IEBAIGVudW0gbHJ1dmVjX2ZsYWdzIHsKICAqIGZvbGlvLSZndDtmbGFncywgbWFza2VkIGJ5IExSVV9SRUZTX01BU0suCiAgKi8KICNkZWZpbmUgTUFYX05SX1RJRVJTCQk0VQomIzQzOyNkZWZpbmUgTFJVX1RJRVJfTUlOCQkwVQomIzQzOyNkZWZpbmUgTFJVX1RJRVJfTUFYCQkoTUFYX05SX1RJRVJTIC0gMSkKIAogI2lmbmRlZiBfX0dFTkVSQVRJTkdfQk9VTkRTX0gKIAogI2RlZmluZSBMUlVfR0VOX01BU0sJCSgoQklUKExSVV9HRU5fV0lEVEgpIC0gMSkgJmx0OyZsdDsgTFJVX0dFTl9QR09GRikKICNkZWZpbmUgTFJVX1JFRlNfTUFTSwkJKChCSVQoTFJVX1JFRlNfV0lEVEgpIC0gMSkgJmx0OyZsdDsgTFJVX1JFRlNfUEdPRkYpCiYjNDM7I2RlZmluZSBMUlVfUkVGU19NQVgJCUJJVChMUlVfUkVGU19XSURUSCkKIAogLyoKICAqIEZvciBmb2xpb3MgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzLApkaWZmIC0tZ2l0IGEvbW0vZm9saW8uYyBiL21tL2ZvbGlvLmMKaW5kZXggYzAyZGNlYTljMDNjMi4uZmI4NzRmZTQ5MmIyYiAxMDA2NDQKLS0tIGEvbW0vZm9saW8uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9mb2xpby5jCkBAIC0zNTMsMjYgJiM0MzszNTMsMjggQEAgc3RhdGljIHZvaWQgX19scnVfY2FjaGVfYWN0aXZhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykKIAogc3RhdGljIHZvaWQgbHJ1X2dlbl9pbmNfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewotCXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwomIzQzOwl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpOwomIzQzOwlpbnQgcmVmczsKIAogCWlmIChmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSkKIAkJcmV0dXJuOwogCiAJLyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovCi0JaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKSB7Ci0JCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTsKJiM0MzsJaWYgKCFmb2xpb19scnVfcmVmcyhmb2xpbykpIHsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7CiAJCXJldHVybjsKIAl9CiAKIAlkbyB7Ci0JCWlmICgob2xkX2ZsYWdzICZhbXA7IExSVV9SRUZTX01BU0spID09IExSVV9SRUZTX01BU0spIHsKJiM0MzsJCW5ld19mbGFncyA9IG9sZF9mbGFnczsKJiM0MzsJCXJlZnMgPSBscnVfZ2V0X3JlZnNfZmxhZ3Mob2xkX2ZsYWdzKTsKJiM0MzsJCWlmIChyZWZzID09IExSVV9SRUZTX01BWCkgewogCQkJaWYgKCFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKQogCQkJCWZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTsKIAkJCXJldHVybjsKIAkJfQotCi0JCW5ld19mbGFncyA9IG9sZF9mbGFncyAmIzQzOyBCSVQoTFJVX1JFRlNfUEdPRkYpOwotCX0gd2hpbGUgKCF0cnlfY21weGNoZygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiYjNDM7CQlscnVfc2V0X3JlZnNfZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIHJlZnMgJiM0MzsgMSk7CiYjNDM7CX0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksICZhbXA7b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTsKIH0KIAogc3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pCkBAIC0zODQsNyAmIzQzOzM4Niw4IEBAIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCWlmIChnZW4gJmx0OyAwKQogCQlyZXR1cm4gdHJ1ZTsKIAotCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MgfCBCSVQoUEdfd29ya2luZ3NldCksIDApOwomIzQzOwlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwomIzQzOwlmb2xpb19jbGVhcl93b3JraW5nc2V0KGZvbGlvKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlzZXEgPSBSRUFEX09OQ0UoZm9saW9fbHJ1dmVjKGZvbGlvKS0mZ3Q7bHJ1Z2VuLm1pbl9zZXFbdHlwZV0pOwpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDg1NmE3ZDA3NTg2Y2MuLjBhNjVhYjhkZjI3YTkgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTE1MjksMjggJiM0MzsxNTI5LDEyIEBAIHZvaWQgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIGxydV9saXN0IGxydSwKIAkJCQlpbnQgemlkLCBsb25nIG5yX3BhZ2VzKQogewogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejsKLQl1bnNpZ25lZCBsb25nICpscnVfc2l6ZTsKLQlsb25nIHNpemU7CiAKIAlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKQogCQlyZXR1cm47CiAKIAlteiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpOwotCWxydV9zaXplID0gJmFtcDttei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6aWRdW2xydV07Ci0KLQlpZiAobnJfcGFnZXMgJmx0OyAwKQotCQkqbHJ1X3NpemUgJiM0Mzs9IG5yX3BhZ2VzOwotCi0Jc2l6ZSA9ICpscnVfc2l6ZTsKLQlpZiAoV0FSTl9PTkNFKHNpemUgJmx0OyAwLAotCQkmIzM0OyVzKCVwLCAlZCwgJWxkKTogbHJ1X3NpemUgJWxkXG4mIzM0OywKLQkJX19mdW5jX18sIGxydXZlYywgbHJ1LCBucl9wYWdlcywgc2l6ZSkpIHsKLQkJVk1fQlVHX09OKDEpOwotCQkqbHJ1X3NpemUgPSAwOwotCX0KLQotCWlmIChucl9wYWdlcyAmZ3Q7IDApCi0JCSpscnVfc2l6ZSAmIzQzOz0gbnJfcGFnZXM7CiYjNDM7CW16LSZndDtscnVfem9uZV9zaXplW3ppZF1bbHJ1XSAmIzQzOz0gbnJfcGFnZXM7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jCmluZGV4IDE1YjQ1ODMyYmNmYTcuLmEzNjlkMGM5NWMzODYgMTAwNjQ0Ci0tLSBhL21tL21pZ3JhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9taWdyYXRlLmMKQEAgLTc3Niw4ICYjNDM7Nzc2LDkgQEAgdm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJaW50IGNwdXBpZDsKIAotCWlmIChmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKQotCQlmb2xpb19zZXRfcmVmZXJlbmNlZChuZXdmb2xpbyk7CiYjNDM7CS8qIENvcHkgdGhlIHJlZmVyZW5jZSBzdGF0ZSwgaW5jbHVkaW5nIFBHX3JlZmVyZW5jZWQgKi8KJiM0MzsJZm9saW9fbWlncmF0ZV9scnVfcmVmcyhuZXdmb2xpbywgZm9saW8pOwomIzQzOwogCWlmIChmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSkKIAkJZm9saW9fbWFya191cHRvZGF0ZShuZXdmb2xpbyk7CiAJaWYgKGZvbGlvX3Rlc3RfY2xlYXJfYWN0aXZlKGZvbGlvKSkgewpAQCAtODA3LDcgJiM0Mzs4MDgsNiBAQCB2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbykKIAlpZiAoZm9saW9fdGVzdF9pZGxlKGZvbGlvKSkKIAkJZm9saW9fc2V0X2lkbGUobmV3Zm9saW8pOwogCi0JZm9saW9fbWlncmF0ZV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7CiAJLyoKIAkgKiBDb3B5IE5VTUEgaW5mb3JtYXRpb24gdG8gdGhlIG5ldyBwYWdlLCB0byBwcmV2ZW50IG92ZXItZWFnZXIKIAkgKiBmdXR1cmUgbWlncmF0aW9ucyBvZiB0aGlzIHNhbWUgcGFnZS4KZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggZmRkMTMyOTlhMDRhOS4uZTdkMzc5YzZlNzAzYSAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTg0MywxOSAmIzQzOzg0MywyMiBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpCiAJaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pICZhbXA7JmFtcDsgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpIHsKIAkJLyogQWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuICovCiAJCWlmIChpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIHZtYV9mbGFncykpIHsKLQkJCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7CiYjNDM7CQkJZm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pOwomIzQzOwkJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJfQogCi0JCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKIAkvKiBQcm9tb3RlIG9uIHNlY29uZCBhY2Nlc3MgKi8KLQlpZiAoZm9saW9fbHJ1X3JlZnMoZm9saW8pICZndDsgMSkKLQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTsKLQllbHNlCiYjNDM7CWlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgJmd0OyAxKSB7CiYjNDM7CQlmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7CiYjNDM7CQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwomIzQzOwl9IGVsc2UgewogCQlmb2xpb19tYXJrX2FjY2Vzc2VkKGZvbGlvKTsKJiM0MzsJfQogCXJldHVybiB0cnVlOwogfQogI2Vsc2UKQEAgLTMxOTUsOCAmIzQzOzMxOTgsOCBAQCBzdHJ1Y3QgY3RybF9wb3MgewogCWludCBnYWluOwogfTsKIAotc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllciwgaW50IGdhaW4sCi0JCQkgIHN0cnVjdCBjdHJsX3BvcyAqcG9zKQomIzQzO3N0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXJfbWluLAomIzQzOwkJCSAgaW50IHRpZXJfbWF4LCBpbnQgZ2Fpbiwgc3RydWN0IGN0cmxfcG9zICpwb3MpCiB7CiAJaW50IGk7CiAJc3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9ICZhbXA7bHJ1dmVjLSZndDtscnVnZW47CkBAIC0zMjA1LDcgJiM0MzszMjA4LDcgQEAgc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllciwgaW50IGdhaW4sCiAJcG9zLSZndDtnYWluID0gZ2FpbjsKIAlwb3MtJmd0O3JlZmF1bHRlZCA9IHBvcy0mZ3Q7dG90YWwgPSAwOwogCi0JZm9yIChpID0gdGllciAlIE1BWF9OUl9USUVSUzsgaSAmbHQ7PSBtaW4odGllciwgTUFYX05SX1RJRVJTIC0gMSk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CWZvciAoaSA9IHRpZXJfbWluOyBpICZsdDs9IHRpZXJfbWF4OyBpJiM0MzsmIzQzOykgewogCQlwb3MtJmd0O3JlZmF1bHRlZCAmIzQzOz0gbHJ1Z2VuLSZndDthdmdfcmVmYXVsdGVkW3R5cGVdW2ldICYjNDM7CiAJCQkJICBhdG9taWNfbG9uZ19yZWFkKCZhbXA7bHJ1Z2VuLSZndDtyZWZhdWx0ZWRbaGlzdF1bdHlwZV1baV0pOwogCQlwb3MtJmd0O3RvdGFsICYjNDM7PSBscnVnZW4tJmd0O2F2Z190b3RhbFt0eXBlXVtpXSAmIzQzOwpAQCAtMzI2NiwxMSAmIzQzOzMyNjksMTEgQEAgc3RhdGljIGJvb2wgcG9zaXRpdmVfY3RybF9lcnIoc3RydWN0IGN0cmxfcG9zICpzcCwgc3RydWN0IGN0cmxfcG9zICpwdikKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qIHByb21vdGUgcGFnZXMgYWNjZXNzZWQgdGhyb3VnaCBwYWdlIHRhYmxlcyAqLwotc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpCiYjNDM7c3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBpbnQgKnR5cGUsCiYjNDM7CQkJICAgIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpCiB7Ci0JdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby0mZ3Q7ZmxhZ3MuZik7Ci0KLQlWTV9XQVJOX09OX09OQ0UoZ2VuICZndDs9IE1BWF9OUl9HRU5TKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTsKJiM0MzsJaW50IG9sZF9nZW47CiAKIAkvKgogCSAqIFNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUywgYW5kIGFjdGl2YXRlIGZpbGUtYmFja2VkCkBAIC0zMjc5LDIwICYjNDM7MzI4MiwyNSBAQCBzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYQogCSAqLwogCWlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSAmYW1wOyZhbXA7ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pICZhbXA7JmFtcDsKIAkgICAgIWlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkgewotCQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7CiYjNDM7CQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJZG8gewomIzQzOwkJb2xkX2dlbiA9IGxydV9nZXRfZ2VuX2ZsYWdzKG9sZF9mbGFncyk7CiYjNDM7CQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7CiYjNDM7CiAJCS8qIGxydV9nZW5fZGVsX2ZvbGlvKCkgaGFzIGlzb2xhdGVkIHRoaXMgcGFnZT8gKi8KLQkJaWYgKCEob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykpCi0JCQlyZXR1cm4gLTE7CiYjNDM7CQlpZiAob2xkX2dlbiAmbHQ7IDApCiYjNDM7CQkJYnJlYWs7CiAKLQkJbmV3X2ZsYWdzID0gb2xkX2ZsYWdzICZhbXA7IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpOwotCQluZXdfZmxhZ3MgfD0gKChnZW4gJiM0MzsgMVVMKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGKSB8IEJJVChQR193b3JraW5nc2V0KTsKLQl9IHdoaWxlICghdHJ5X2NtcHhjaGcoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwomIzQzOwkJbHJ1X3NldF9nZW5fZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIG5ld19nZW4pOwomIzQzOwkJbHJ1X3NldF9yZWZzX2ZsYWdzKCZhbXA7bmV3X2ZsYWdzLCAwKTsKJiM0MzsJCW5ld19mbGFncyB8PSBCSVQoUEdfd29ya2luZ3NldCk7CiYjNDM7CX0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksICZhbXA7b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTsKIAotCXJldHVybiAoKG9sZF9mbGFncyAmYW1wOyBMUlVfR0VOX01BU0spICZndDsmZ3Q7IExSVV9HRU5fUEdPRkYpIC0gMTsKJiM0MzsJKnR5cGUgPSBmb2xpb19mbGFnc19pc19maWxlX2xydSgmYW1wO29sZF9mbGFncyk7CiYjNDM7CXJldHVybiBvbGRfZ2VuOwogfQogCiAvKiBwcm90ZWN0IHBhZ2VzIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycyAqLwpAQCAtMzMwMSwyMSAmIzQzOzMzMDksMjAgQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbykKIAlpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTsKIAlzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gJmFtcDtscnV2ZWMtJmd0O2xydWdlbjsKIAlpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLSZndDttaW5fc2VxW3R5cGVdKTsKLQl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLSZndDtmbGFncy5mKTsKLQotCVZNX1dBUk5fT05fT05DRV9GT0xJTyghKG9sZF9mbGFncyAmYW1wOyBMUlVfR0VOX01BU0spLCBmb2xpbyk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7CiAKIAlkbyB7Ci0JCW5ld19nZW4gPSAoKG9sZF9mbGFncyAmYW1wOyBMUlVfR0VOX01BU0spICZndDsmZ3Q7IExSVV9HRU5fUEdPRkYpIC0gMTsKJiM0MzsJCW5ld19nZW4gPSBscnVfZ2V0X2dlbl9mbGFncyhvbGRfZmxhZ3MpOwomIzQzOwogCQkvKiBmb2xpb191cGRhdGVfZ2VuKCkgaGFzIHByb21vdGVkIHRoaXMgcGFnZT8gKi8KIAkJaWYgKG5ld19nZW4gJmd0Oz0gMCAmYW1wOyZhbXA7IG5ld19nZW4gIT0gb2xkX2dlbikKIAkJCXJldHVybiBuZXdfZ2VuOwogCiYjNDM7CQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7CiAJCW5ld19nZW4gPSAob2xkX2dlbiAmIzQzOyAxKSAlIE1BWF9OUl9HRU5TOwotCi0JCW5ld19mbGFncyA9IG9sZF9mbGFncyAmYW1wOyB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTsKLQkJbmV3X2ZsYWdzIHw9IChuZXdfZ2VuICYjNDM7IDFVTCkgJmx0OyZsdDsgTFJVX0dFTl9QR09GRjsKLQl9IHdoaWxlICghdHJ5X2NtcHhjaGcoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwomIzQzOwkJbHJ1X3NldF9nZW5fZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIG5ld19nZW4pOwomIzQzOwkJbHJ1X3NldF9yZWZzX2ZsYWdzKCZhbXA7bmV3X2ZsYWdzLCAwKTsKJiM0MzsJfSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwogCiAJbHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTsKIApAQCAtMzMyMyw5ICYjNDM7MzMzMCw4IEBAIHN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiB9CiAKIHN0YXRpYyB2b2lkIHVwZGF0ZV9iYXRjaF9zaXplKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBmb2xpbyAqZm9saW8sCi0JCQkgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4pCiYjNDM7CQkJICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuLCBpbnQgdHlwZSkKIHsKLQlpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTsKIAlpbnQgem9uZSA9IGZvbGlvX3pvbmVudW0oZm9saW8pOwogCWludCBkZWx0YSA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKIApAQCAtMzUxMiwyMiAmIzQzOzM1MTgsMjQgQEAgc3RhdGljIGJvb2wgc3VpdGFibGVfdG9fc2NhbihpbnQgdG90YWwsIGludCB5b3VuZykKIH0KIAogc3RhdGljIHZvaWQgd2Fsa191cGRhdGVfZm9saW8oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCXN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBib29sIGRpcnR5KQomIzQzOwkJc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIGRpcnR5KQogewotCWludCBvbGRfZ2VuOwomIzQzOwlpbnQgbmV3X2dlbiwgb2xkX2dlbiwgdHlwZTsKIAogCWlmICghZm9saW8pCiAJCXJldHVybjsKIAomIzQzOwluZXdfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShSRUFEX09OQ0UobHJ1dmVjLSZndDtscnVnZW4ubWF4X3NlcSkpOwomIzQzOwogCWlmIChkaXJ0eSAmYW1wOyZhbXA7ICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSAmYW1wOyZhbXA7CiAJICAgICEoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSAmYW1wOyZhbXA7IGZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykgJmFtcDsmYW1wOwogCSAgICAgICFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpKQogCQlmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTsKIAogCWlmICh3YWxrKSB7Ci0JCW9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuLCAmYW1wO3ZtYS0mZ3Q7ZmxhZ3MpOwomIzQzOwkJb2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sICZhbXA7dHlwZSwgJmFtcDt2bWEtJmd0O2ZsYWdzKTsKIAkJaWYgKG9sZF9nZW4gJmd0Oz0gMCAmYW1wOyZhbXA7IG9sZF9nZW4gIT0gbmV3X2dlbikKLQkJCXVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTsKJiM0MzsJCQl1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbiwgdHlwZSk7CiAJfSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCAmYW1wO3ZtYS0mZ3Q7ZmxhZ3MpKSB7CiAJCW9sZF9nZW4gPSBmb2xpb19scnVfZ2VuKGZvbGlvKTsKIAkJaWYgKG9sZF9nZW4gJmd0Oz0gMCAmYW1wOyZhbXA7IG9sZF9nZW4gIT0gbmV3X2dlbikKQEAgLTM1NDksOCAmIzQzOzM1NTcsNiBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIAlzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy0mZ3Q7cHJpdmF0ZTsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay0mZ3Q7bHJ1dmVjKTsKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstJmd0O2xydXZlYyk7Ci0JREVGSU5FX01BWF9TRVEod2Fsay0mZ3Q7bHJ1dmVjKTsKLQlpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTsKIAl1bnNpZ25lZCBpbnQgbnI7CiAJcG1kX3QgcG1kdmFsOwogCkBAIC0zNjAxLDcgJiM0MzszNjA3LDcgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCQljb250aW51ZTsKIAogCQlpZiAobGFzdCAhPSBmb2xpbykgewotCQkJd2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy0mZ3Q7dm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJCQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLSZndDt2bWEsIHdhbGstJmd0O2xydXZlYywgbGFzdCwgZGlydHkpOwogCiAJCQlsYXN0ID0gZm9saW87CiAJCQlkaXJ0eSA9IGZhbHNlOwpAQCAtMzYxNCw3ICYjNDM7MzYyMCw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQl3YWxrLSZndDttbV9zdGF0c1tNTV9MRUFGX1lPVU5HXSAmIzQzOz0gbnI7CiAJfQogCi0Jd2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy0mZ3Q7dm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJd2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy0mZ3Q7dm1hLCB3YWxrLSZndDtscnV2ZWMsIGxhc3QsIGRpcnR5KTsKIAlsYXN0ID0gTlVMTDsKIAogCWlmIChpICZsdDsgUFRSU19QRVJfUFRFICZhbXA7JmFtcDsgZ2V0X25leHRfdm1hKFBNRF9NQVNLLCBQQUdFX1NJWkUsIGFyZ3MsICZhbXA7c3RhcnQsICZhbXA7ZW5kKSkKQEAgLTM2MzcsOCAmIzQzOzM2NDMsNiBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYQogCXN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLSZndDtwcml2YXRlOwogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLSZndDtscnV2ZWMpOwogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQod2Fsay0mZ3Q7bHJ1dmVjKTsKLQlERUZJTkVfTUFYX1NFUSh3YWxrLSZndDtscnV2ZWMpOwotCWludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpOwogCiAJVk1fV0FSTl9PTl9PTkNFKHB1ZF9sZWFmKCpwdWQpKTsKIApAQCAtMzY5Miw3ICYjNDM7MzY5Niw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhCiAJCQlnb3RvIG5leHQ7CiAKIAkJaWYgKGxhc3QgIT0gZm9saW8pIHsKLQkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CQkJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCB3YWxrLSZndDtscnV2ZWMsIGxhc3QsIGRpcnR5KTsKIAogCQkJbGFzdCA9IGZvbGlvOwogCQkJZGlydHkgPSBmYWxzZTsKQEAgLTM3MDYsNyAmIzQzOzM3MTAsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYQogCQlpID0gaSAmZ3Q7IE1JTl9MUlVfQkFUQ0ggPyAwIDogZmluZF9uZXh0X2JpdChiaXRtYXAsIE1JTl9MUlVfQkFUQ0gsIGkpICYjNDM7IDE7CiAJfSB3aGlsZSAoaSAmbHQ7PSBNSU5fTFJVX0JBVENIKTsKIAotCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay0mZ3Q7bHJ1dmVjLCBsYXN0LCBkaXJ0eSk7CiAKIAlsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTsKIAlzcGluX3VubG9jayhwdGwpOwpAQCAtNDI3MCw4ICYjNDM7NDI3NCw2IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucikKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gZm9saW9fcGdkYXQoZm9saW8pOwogCXN0cnVjdCBscnV2ZWMgKmxydXZlYzsKIAlzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGU7Ci0JdW5zaWduZWQgbG9uZyBtYXhfc2VxOwotCWludCBnZW47CiAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKHB2bXctJmd0O3B0bCk7CiAJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSwgZm9saW8pOwpAQCAtNDMwOCw4ICYjNDM7NDMxMCw2IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucikKIAogCW1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7CiAJbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTsKLQltYXhfc2VxID0gUkVBRF9PTkNFKChscnV2ZWMpLSZndDtscnVnZW4ubWF4X3NlcSk7Ci0JZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTsKIAltbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpOwogCiAJbGF6eV9tbXVfbW9kZV9lbmFibGUoKTsKQEAgLTQzNDEsNyAmIzQzOzQzNDEsNyBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpCiAJCQljb250aW51ZTsKIAogCQlpZiAobGFzdCAhPSBmb2xpbykgewotCQkJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJCQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxydXZlYywgbGFzdCwgZGlydHkpOwogCiAJCQlsYXN0ID0gZm9saW87CiAJCQlkaXJ0eSA9IGZhbHNlOwpAQCAtNDM1MywxMyAmIzQzOzQzNTMsMTQgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKQogCQl5b3VuZyAmIzQzOz0gbnI7CiAJfQogCi0Jd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTsKIAogCWxhenlfbW11X21vZGVfZGlzYWJsZSgpOwogCiAJLyogZmVlZGJhY2sgZnJvbSBybWFwIHdhbGtlcnMgdG8gcGFnZSB0YWJsZSB3YWxrZXJzICovCiAJaWYgKG1tX3N0YXRlICZhbXA7JmFtcDsgc3VpdGFibGVfdG9fc2NhbihpLCB5b3VuZykpCi0JCXVwZGF0ZV9ibG9vbV9maWx0ZXIobW1fc3RhdGUsIG1heF9zZXEsIHB2bXctJmd0O3BtZCk7CiYjNDM7CQl1cGRhdGVfYmxvb21fZmlsdGVyKG1tX3N0YXRlLCBSRUFEX09OQ0UobHJ1dmVjLSZndDtscnVnZW4ubWF4X3NlcSksCiYjNDM7CQkJCSAgICBwdm13LSZndDtwbWQpOwogCiAJbWVtX2Nncm91cF9wdXQobWVtY2cpOwogCkBAIC00NzE2LDcgJiM0Mzs0NzE3LDcgQEAgc3RhdGljIGJvb2wgaXNvbGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2EKIAogCS8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqLwogCWlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSkKLQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19NQVNLLCAwKTsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7CiAKIAlzdWNjZXNzID0gbHJ1X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7CiAJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFzdWNjZXNzLCBmb2xpbyk7CkBAIC00ODA5LDkgJiM0Mzs0ODEwLDkgQEAgc3RhdGljIGludCBnZXRfdGllcl9pZHgoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSkKIAkgKiBUaGlzIHZhbHVlIGlzIGNob3NlbiBiZWNhdXNlIGFueSBvdGhlciB0aWVyIHdvdWxkIGhhdmUgYXQgbGVhc3QgdHdpY2UKIAkgKiBhcyBtYW55IHJlZmF1bHRzIGFzIHRoZSBmaXJzdCB0aWVyLgogCSAqLwotCXJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCAwLCAyLCAmYW1wO3NwKTsKLQlmb3IgKHRpZXIgPSAxOyB0aWVyICZsdDsgTUFYX05SX1RJRVJTOyB0aWVyJiM0MzsmIzQzOykgewotCQlyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdGllciwgMywgJmFtcDtwdik7CiYjNDM7CXJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01JTiwgMiwgJmFtcDtzcCk7CiYjNDM7CWZvciAodGllciA9IExSVV9USUVSX01JTiAmIzQzOyAxOyB0aWVyICZsdDs9IExSVV9USUVSX01BWDsgdGllciYjNDM7JiM0MzspIHsKJiM0MzsJCXJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0aWVyLCB0aWVyLCAzLCAmYW1wO3B2KTsKIAkJaWYgKCFwb3NpdGl2ZV9jdHJsX2VycigmYW1wO3NwLCAmYW1wO3B2KSkKIAkJCWJyZWFrOwogCX0KQEAgLTQ4MzIsOCAmIzQzOzQ4MzMsMTAgQEAgc3RhdGljIGludCBnZXRfdHlwZV90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpCiAJICogQ29tcGFyZSB0aGUgc3VtIG9mIGFsbCB0aWVycyBvZiBhbm9uIHdpdGggdGhhdCBvZiBmaWxlIHRvIGRldGVybWluZQogCSAqIHdoaWNoIHR5cGUgdG8gc2Nhbi4KIAkgKi8KLQlyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBNQVhfTlJfVElFUlMsIHN3YXBwaW5lc3MsICZhbXA7c3ApOwotCXJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIE1BWF9OUl9USUVSUywgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCAmYW1wO3B2KTsKJiM0MzsJcmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fQU5PTiwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NQVgsCiYjNDM7CQkgICAgICBzd2FwcGluZXNzLCAmYW1wO3NwKTsKJiM0MzsJcmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NQVgsCiYjNDM7CQkgICAgICBNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3MsICZhbXA7cHYpOwogCiAJcmV0dXJuIHBvc2l0aXZlX2N0cmxfZXJyKCZhbXA7c3AsICZhbXA7cHYpOwogfQpAQCAtNDkzMiw4ICYjNDM7NDkzNSwxMCBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJfQogCiAJCS8qIGRvbiYjMzk7dCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqLwotCQlpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pCi0JCQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfYWN0aXZlKSk7CiYjNDM7CQlpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pIHsKJiM0MzsJCQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwomIzQzOwkJCWZvbGlvX3NldF9hY3RpdmUoZm9saW8pOwomIzQzOwkJfQogCX0KIAogCW1vdmVfZm9saW9zX3RvX2xydSgmYW1wO2xpc3QpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MTkKCQkJCQkJCW91dHB1dDogMjQ4CgkJCQkJCQl0aG91Z2h0czogMzAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBFdmFsdWF0aW9uOiBQYXRjaCBTZXJpZXMgQW5hbHlzaXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZSBpZiBpdCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIE15IGZvY3VzIGlzIGFsd2F5cyBvbiBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLCBlc3BlY2lhbGx5IHRob3NlIHRoYXQgY291bGQgbGVhZCB0byBpbmZvcm1hdGlvbiBsZWFrcyBvciBleHBsb2l0YWJsZSB2dWxuZXJhYmlsaXRpZXMuCgpGaXJzdCwgSSYjMzk7dmUgbWV0aWN1bG91c2x5IGV4YW1pbmVkIHRoZSBmaWxlIG1vZGlmaWNhdGlvbnMuIFRoZSBjaGFuZ2VzIGFyZSBjb25jZW50cmF0ZWQgaW4gYG1lbWNvbnRyb2wuaGAsIGBtbV9pbmxpbmUuaGAsIGBtbXpvbmUuaGAsIGBmb2xpby5jYCwgYG1lbWNvbnRyb2wuY2AsIGBtaWdyYXRlLmNgLCBhbmQgYHZtc2Nhbi5jYC4gSXQmIzM5O3MgYSBtaXggb2YgZGF0YSBzdHJ1Y3R1cmUgYWRqdXN0bWVudHMgYW5kIGZ1bmN0aW9uIHJlZmFjdG9yaW5nIHJlbGF0ZWQgdG8gdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBpbXBsZW1lbnRhdGlvbiwgZm9saW8gZmxhZ3MsIGFuZCBtZW1vcnkgY29udHJvbCBncm91cHMuIFRoZSBrZXkgc3RydWN0dXJhbCBjaGFuZ2UgaXMgaW4gYG1lbV9jZ3JvdXBfcGVyX25vZGVgLCB3aGVyZSBgbHJ1X3pvbmVfc2l6ZWAgaXMgY2hhbmdlZCBmcm9tIGB1bnNpZ25lZCBsb25nYCB0byBgbG9uZ2AuIFRoZXJlIGFyZSBhZGRpdGlvbnMgb2YgaW5saW5lIGZ1bmN0aW9ucyBmb3IgZmxhZyBtYW5hZ2VtZW50IGFuZCB1cGRhdGVzIHRvIHNldmVyYWwgTFJVLXJlbGF0ZWQgZnVuY3Rpb25zLgoKSSYjMzk7dmUgc3BlY2lmaWNhbGx5IHNjcnV0aW5pemVkIGB3YWxrX3VwZGF0ZV9mb2xpb2AgYW5kIGl0cyBjYWxsIHRvIGBmb2xpb191cGRhdGVfZ2VuYC4gVGhlIHBvdGVudGlhbCBpc3N1ZSB3YXMgd2hldGhlciB0aGUgYHR5cGVgIHZhcmlhYmxlLCBwYXNzZWQgdG8gYHVwZGF0ZV9iYXRjaF9zaXplYCwgbWlnaHQgYmUgdW5pbml0aWFsaXplZCBpZiBgZm9saW9fdXBkYXRlX2dlbmAgcmV0dXJuZWQgYW4gZWFybHkgZXhpdC4gSG93ZXZlciwgYWZ0ZXIgY2FyZWZ1bCByZXZpZXcsIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHRoaXMgaXNuJiMzOTt0IHRoZSBjYXNlLiBUaGUgYGlmYCBjb25kaXRpb24gY29ycmVjdGx5IGhhbmRsZXMgdGhlIHNjZW5hcmlvIHdoZXJlIHRoZSBlYXJseSByZXR1cm4gb2YgYC0xYCBvY2N1cnMsIHByZXZlbnRpbmcgdGhlIHVzZSBvZiBhbiB1bmluaXRpYWxpemVkIGB0eXBlYC4gSSYjMzk7dmUgYWxzbyBjaGVja2VkIHdoZXRoZXIgdGhlcmUgYXJlIGZ1cnRoZXIgdXNhZ2VzIG9mIG90aGVyIHZhcmlhYmxlcyB3aXRoaW4gYHdhbGtfdXBkYXRlX2ZvbGlvYCwgZmluZGluZyB0aGF0IG5vbmUgcHJlc2VudCBhbnkgcmlzay4gSSBmb2xsb3dlZCB0aGUgc2FtZSBwcmluY2lwbGUgZm9yIGByZWFkX2N0cmxfcG9zYCBhbmQgZm9yIGBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplYC4KClRoZSBgbHJ1X3NldF9yZWZzX2ZsYWdzYCwgYGxydV9nZXRfcmVmc19mbGFnc2AsIGBmb2xpb19zZXRfbHJ1X3JlZnNgLCBgbHJ1X3NldF9nZW5fZmxhZ3NgLCBhbmQgYGxydV9nZXRfZ2VuX2ZsYWdzYCBmdW5jdGlvbnMgYXJlIGFsbCBtYW5pcHVsYXRpbmcgdGhlIGBmb2xpby0mZ3Q7ZmxhZ3NgLCB3aGljaCBhcmUgYHVuc2lnbmVkIGxvbmdgIGZpZWxkcy4gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgdGhlcmUmIzM5O3Mgbm8gcmlzayBvZiBhbnkgdW5pbml0aWFsaXplZCByZWFkcy4KCkNydWNpYWxseSwgSSYjMzk7dmUgZm91bmQgbm8gZXZpZGVuY2Ugb2YgYW55IGRhdGEgc3RydWN0dXJlcyBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2Ugb3IgYW55IG5ldyBrZXJuZWwgaW50ZXJmYWNlcyBiZWluZyBleHBvc2VkIG9yIG1vZGlmaWVkLiBUaGVyZSBhcmUgbm8gYWxsb2NhdGlvbnMgb3IgaW5pdGlhbGl6YXRpb25zIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGxhdGVyIGJlIHJlYWQuIFRoZSBjaGFuZ2VzIGRlYWwgd2l0aCB0aGUgTFJVIGxvZ2ljLCB3aGljaCBpcyBjcml0aWNhbCwgYnV0IEkgZG9uJiMzOTt0IHNlZSBhbnkgZGlyZWN0IGluZm9ybWF0aW9uIGxlYWthZ2Ugcmlza3MuCgpUaGVyZWZvcmUsIGFmdGVyIHRob3JvdWdobHkgYW5hbHl6aW5nIHRoZXNlIGNoYW5nZXMsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCBzZXJpZXMgZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrcyB0aGF0IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBTdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycyBsaWtlIEtBU0FOLCBhbmQgbG9ja2RlcCwgc2hvdWxkIGNhdGNoIGFueSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBpbiB0aGlzIGFyZWEuIEtNU0FOIGlzIG92ZXJraWxsIGZvciB0aGlzIHNwZWNpZmljIHNldCBvZiBjaGFuZ2VzLiBUaGlzIHBhdGNoIGlzIGEgcmVmYWN0b3JpbmcsIGFuZCBhIGNoYW5nZSB0byBhIHZhcmlhYmxlJiMzOTtzIGRhdGEgdHlwZSwgYW5kIHRoaXMgc2hvdWxkIGJlIHRlc3RlZCBpbiB0aGUgbm9ybWFsIG1hbm5lci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyBNdWx0aS1HZW4gTFJVIChNR0xSVSkgZm9saW8gZmxhZyBvcGVyYXRpb25zIChpbnRyb2R1Y2luZyBoZWxwZXJzIGxpa2UgbHJ1X3NldF9nZW5fZmxhZ3MsIGxydV9zZXRfcmVmc19mbGFncywgZm9saW9fc2V0X2xydV9yZWZzKSwgdXBkYXRlcyBmb2xpbyByZWZlcmVuY2UvZ2VuZXJhdGlvbiB0cmFja2luZyBhY3Jvc3MgcmVjbGFpbSBhbmQgbWlncmF0aW9uIHBhdGhzLCBhbmQgY2hhbmdlcyBtZW1jZyBscnVfem9uZV9zaXplIHRyYWNraW5nIGZyb20gdW5zaWduZWQgbG9uZyB0byBzaWduZWQgbG9uZyB3aXRoIGJvdW5kcyBjaGVja2luZy5cblxuTm8ga2VybmVsLXRvLXVzZXIgZGF0YSBjb3BpZXMsIGlvY3Rscywgb3IgdXNlci1mYWNpbmcgc3RydWN0cyBhcmUgbW9kaWZpZWQuIFN0YWNrIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIChlLmcuLCBgdHlwZWAgaW4gYHdhbGtfdXBkYXRlX2ZvbGlvYCkgYXJlIGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyByZWFkIChhcyBgdHlwZWAgaXMgb25seSBwYXNzZWQgdG8gYHVwZGF0ZV9iYXRjaF9zaXplYCB3aGVuIGBvbGRfZ2VuIFx1MDAzZT0gMGAsIHdoaWNoIGd1YXJhbnRlZXMgYXNzaWdubWVudCBpbiBgZm9saW9fdXBkYXRlX2dlbmApLiBObyB1bmluaXRpYWxpemVkIGhlYXAsIHN0YWNrLCBvciBwYWdlIGFsbG9jYXRpb25zIGFyZSBleHBvc2VkLiBQb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgaW4gdGhlc2UgTU0gcGF0aHMgKHN1Y2ggYXMgY29uY3VycmVuY3kgaXNzdWVzIG9yIGludmFsaWQgZm9saW8gZGVyZWZlcmVuY2VzKSBmYWxsIHVuZGVyIEtBU0FOL0xPQ0tERVAgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgZGV0ZWN0b3JzLiBUaHVzLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyBNdWx0aS1HZW4gTFJVIChNR0xSVSkgZm9saW8gZmxhZyBvcGVyYXRpb25zIChpbnRyb2R1Y2luZyBoZWxwZXJzIGxpa2UgbHJ1X3NldF9nZW5fZmxhZ3MsIGxydV9zZXRfcmVmc19mbGFncywgZm9saW9fc2V0X2xydV9yZWZzKSwgdXBkYXRlcyBmb2xpbyByZWZlcmVuY2UvZ2VuZXJhdGlvbiB0cmFja2luZyBhY3Jvc3MgcmVjbGFpbSBhbmQgbWlncmF0aW9uIHBhdGhzLCBhbmQgY2hhbmdlcyBtZW1jZyBscnVfem9uZV9zaXplIHRyYWNraW5nIGZyb20gdW5zaWduZWQgbG9uZyB0byBzaWduZWQgbG9uZyB3aXRoIGJvdW5kcyBjaGVja2luZy5cblxuTm8ga2VybmVsLXRvLXVzZXIgZGF0YSBjb3BpZXMsIGlvY3Rscywgb3IgdXNlci1mYWNpbmcgc3RydWN0cyBhcmUgbW9kaWZpZWQuIFN0YWNrIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIChlLmcuLCBgdHlwZWAgaW4gYHdhbGtfdXBkYXRlX2ZvbGlvYCkgYXJlIGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyByZWFkIChhcyBgdHlwZWAgaXMgb25seSBwYXNzZWQgdG8gYHVwZGF0ZV9iYXRjaF9zaXplYCB3aGVuIGBvbGRfZ2VuIFx1MDAzZT0gMGAsIHdoaWNoIGd1YXJhbnRlZXMgYXNzaWdubWVudCBpbiBgZm9saW9fdXBkYXRlX2dlbmApLiBObyB1bmluaXRpYWxpemVkIGhlYXAsIHN0YWNrLCBvciBwYWdlIGFsbG9jYXRpb25zIGFyZSBleHBvc2VkLiBQb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgaW4gdGhlc2UgTU0gcGF0aHMgKHN1Y2ggYXMgY29uY3VycmVuY3kgaXNzdWVzIG9yIGludmFsaWQgZm9saW8gZGVyZWZlcmVuY2VzKSBmYWxsIHVuZGVyIEtBU0FOL0xPQ0tERVAgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgZGV0ZWN0b3JzLiBUaHVzLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0MDo0OS40MTc2MTQ1NjJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDE1NTk2MjYyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNSUdSQVRJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJscnVfZ2VuX2xvb2tfYXJvdW5kXCIsXG4gICAgXCJmb2xpb19taWdyYXRlX2ZsYWdzXCIsXG4gICAgXCJtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZVwiLFxuICAgIFwibHJ1X2dlbl9yZXBhcmVudF9tZW1jZ1wiLFxuICAgIFwibHJ1X2dlbl9zb2Z0X3JlY2xhaW1cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyByZWZhY3RvcnMgTXVsdGktR2VuIExSVSAoTUdMUlUpIGZvbGlvIGZsYWcgb3BlcmF0aW9ucyAoaW50cm9kdWNpbmcgaGVscGVycyBsaWtlIGxydV9zZXRfZ2VuX2ZsYWdzLCBscnVfc2V0X3JlZnNfZmxhZ3MsIGZvbGlvX3NldF9scnVfcmVmcyksIHVwZGF0ZXMgZm9saW8gcmVmZXJlbmNlL2dlbmVyYXRpb24gdHJhY2tpbmcgYWNyb3NzIHJlY2xhaW0gYW5kIG1pZ3JhdGlvbiBwYXRocywgYW5kIGNoYW5nZXMgbWVtY2cgbHJ1X3pvbmVfc2l6ZSB0cmFja2luZyBmcm9tIHVuc2lnbmVkIGxvbmcgdG8gc2lnbmVkIGxvbmcgd2l0aCBib3VuZHMgY2hlY2tpbmcuXFxuXFxuTm8ga2VybmVsLXRvLXVzZXIgZGF0YSBjb3BpZXMsIGlvY3Rscywgb3IgdXNlci1mYWNpbmcgc3RydWN0cyBhcmUgbW9kaWZpZWQuIFN0YWNrIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIChlLmcuLCBgdHlwZWAgaW4gYHdhbGtfdXBkYXRlX2ZvbGlvYCkgYXJlIGluaXRpYWxpemVkIGJlZm9yZSBiZWluZyByZWFkIChhcyBgdHlwZWAgaXMgb25seSBwYXNzZWQgdG8gYHVwZGF0ZV9iYXRjaF9zaXplYCB3aGVuIGBvbGRfZ2VuIFxcdTAwM2U9IDBgLCB3aGljaCBndWFyYW50ZWVzIGFzc2lnbm1lbnQgaW4gYGZvbGlvX3VwZGF0ZV9nZW5gKS4gTm8gdW5pbml0aWFsaXplZCBoZWFwLCBzdGFjaywgb3IgcGFnZSBhbGxvY2F0aW9ucyBhcmUgZXhwb3NlZC4gUG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIGluIHRoZXNlIE1NIHBhdGhzIChzdWNoIGFzIGNvbmN1cnJlbmN5IGlzc3VlcyBvciBpbnZhbGlkIGZvbGlvIGRlcmVmZXJlbmNlcykgZmFsbCB1bmRlciBLQVNBTi9MT0NLREVQIHJhdGhlciB0aGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGRldGVjdG9ycy4gVGh1cywgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIE11bHRpLUdlbiBMUlUgKE1HTFJVKSwgcGFnZSByZWZlcmVuY2UgY291bnRpbmcsIGZvbGlvIGZsYWdzIG1hbmFnZW1lbnQsIGZvbGlvIG1pZ3JhdGlvbiwgYW5kIG1lbWNnIExSVSBzaXplIGFjY291bnRpbmcuIFRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhZmZlY3QgcGFnZSByZWNsYW1hdGlvbiwgYWdpbmcsIGFuZCBtaWdyYXRpb24gYmVoYXZpb3IgaW4gcmVhY2hhYmxlIGNvcmUgbW0gY29kZSBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDA6NDkuNDE3NjIwMTIyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDA2NTAyMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0ZDcwZDFjYjc1NzEzNDIyODZmNDZjM2I1YTg4ZDQ5ZWY2NDlhZGI3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDMgMDQ6NDA6NDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxcbmluZGV4IDdkMWMwY2UxODlhODguLjg2NzgwZWY2NWVhZmEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxcbkBAIC0xMTMsNyArMTEzLDcgQEAgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUge1xcbiBcXHQvKiBGaWVsZHMgd2hpY2ggZ2V0IHVwZGF0ZWQgb2Z0ZW4gYXQgdGhlIGVuZC4gKi9cXG4gXFx0c3RydWN0IGxydXZlY1xcdFxcdGxydXZlYztcXG4gXFx0Q0FDSEVMSU5FX1BBRERJTkcoX3BhZDJfKTtcXG4tXFx0dW5zaWduZWQgbG9uZ1xcdFxcdGxydV96b25lX3NpemVbTUFYX05SX1pPTkVTXVtOUl9MUlVfTElTVFNdO1xcbitcXHRsb25nXFx0XFx0XFx0bHJ1X3pvbmVfc2l6ZVtNQVhfTlJfWk9ORVNdW05SX0xSVV9MSVNUU107XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwX3JlY2xhaW1faXRlclxcdGl0ZXI7XFxuIFxcbiBcXHQvKlxcbkBAIC05MDIsMTAgKzkwMiwxNSBAQCBzdGF0aWMgaW5saW5lXFxuIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdFxcdGVudW0gbHJ1X2xpc3QgbHJ1LCBpbnQgem9uZV9pZHgpXFxuIHtcXG4rXFx0bG9uZyB2YWw7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejtcXG4gXFxuIFxcdG16ID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7XFxuLVxcdHJldHVybiBSRUFEX09OQ0UobXotXFx1MDAzZWxydV96b25lX3NpemVbem9uZV9pZHhdW2xydV0pO1xcbitcXHR2YWwgPSBSRUFEX09OQ0UobXotXFx1MDAzZWxydV96b25lX3NpemVbem9uZV9pZHhdW2xydV0pO1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKHZhbCBcXHUwMDNjIDApKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJldHVybiB2YWw7XFxuIH1cXG4gXFxuIHZvaWQgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxcbmluZGV4IDYyMWM4NjUzZDhmN2UuLmFiNjliOTkzMDg5M2YgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcXG5AQCAtMzAsNiArMzAsMTcgQEAgc3RhdGljIGlubGluZSBpbnQgZm9saW9faXNfZmlsZV9scnUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0cmV0dXJuICFmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pO1xcbiB9XFxuIFxcbisvKipcXG4rICogZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUgLSBTaG91bGQgdGhlIGZvbGlvIGJlIG9uIGEgZmlsZSBMUlUgb3IgYW5vbiBMUlU/XFxuKyAqIEBmbGFnczogVGhlIGZvbGlvJ3MgZmxhZ3MuXFxuKyAqXFxuKyAqIEp1c3QgbGlrZSBmb2xpb19pc19maWxlX2xydSBidXQgdGFrZSB0aGUgZm9saW8gZmxhZ3MgZGlyZWN0bHkgaW5zdGVhZC5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZsYWdzKVxcbit7XFxuK1xcdHJldHVybiAhdGVzdF9iaXQoUEdfc3dhcGJhY2tlZCwgZmxhZ3MpO1xcbit9XFxuK1xcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX191cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiBcXHRcXHRcXHRcXHRlbnVtIGxydV9saXN0IGxydSwgZW51bSB6b25lX3R5cGUgemlkLFxcbiBcXHRcXHRcXHRcXHRsb25nIG5yX3BhZ2VzKVxcbkBAIC0xNDIsMTAgKzE1Myw2NiBAQCBzdGF0aWMgaW5saW5lIGludCBscnVfdGllcl9mcm9tX3JlZnMoaW50IHJlZnMsIGJvb2wgd29ya2luZ3NldClcXG4gXFx0cmV0dXJuIHdvcmtpbmdzZXQgPyBNQVhfTlJfVElFUlMgLSAxIDogb3JkZXJfYmFzZV8yKHJlZnMpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbisvKipcXG4rICogbHJ1X3NldF9nZW5fZmxhZ3MgLSBTZXQgdGhlIExSVSBnZW5lcmF0aW9uIG51bWJlciB0byBzcGVjaWZpZWQgZm9saW8gZmxhZ3MuXFxuKyAqIEBmbGFnczogcG9pbnRlciB0byB0aGUgZm9saW8gZmxhZ3NcXG4rICogQGdlbjogZ2VuZXJhdGlvbiBudW1iZXIsIGJldHdlZW4gMCBhbmQgKE1BWF9OUl9HRU5TIC0gMSksIGluY2x1c2l2ZS5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfc2V0X2dlbl9mbGFncyh1bnNpZ25lZCBsb25nICpmbGFncywgaW50IGdlbilcXG4re1xcbitcXHRCVUlMRF9CVUdfT04oTFJVX0dFTl9NQVNLIFxcdTAwMjYgTFJVX1JFRlNfTUFTSyk7XFxuK1xcdFZNX1dBUk5fT05fT05DRShnZW4gXFx1MDAzZT0gTUFYX05SX0dFTlMgfHwgZ2VuIFxcdTAwM2MgMCk7XFxuK1xcdC8qIFN0b3JlIGdlbiBvZmZzZXQgYnkgMSwgemVybyBtZWFucyB0aGUgZm9saW8gaXMgb2ZmLWxpc3QuICovXFxuK1xcdCpmbGFncyBcXHUwMDI2PSB+TFJVX0dFTl9NQVNLO1xcbitcXHQqZmxhZ3MgfD0gKGdlbiArIDFVTCkgXFx1MDAzY1xcdTAwM2MgTFJVX0dFTl9QR09GRjtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGxydV9nZXRfZ2VuX2ZsYWdzIC0gUmV0dXJuIHRoZSBMUlUgZ2VuZXJhdGlvbiBudW1iZXIgZnJvbSBmb2xpbyBmbGFncy5cXG4rICogQGZsYWdzOiBmb2xpbyBmbGFnc1xcbisgKlxcbisgKiBSZXR1cm5zOiBBIG51bWJlciBiZXR3ZWVuIDAgYW5kIChNQVhfTlJfR0VOUyAtIDEpLCBpbmNsdXNpdmUuIFJldHVybnNcXG4rICogLTEgaWYgdGhlIGZsYWdzIGluZGljYXRlIHRoZSBmb2xpbyBpcyBvZmYgdGhlIGxpc3QgKGUuZy4sIGlzb2xhdGVkKS5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgaW50IGxydV9nZXRfZ2VuX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuK3tcXG4rXFx0aW50IGdlbiA9ICgoZmxhZ3MgXFx1MDAyNiBMUlVfR0VOX01BU0spIFxcdTAwM2VcXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcXG4rXFxuK1xcdC8qIEV4Y2x1ZGUgdGhlIGxlZ2FsIC0xIGZyb20gdGhlIHVuc2lnbmVkIE1BWF9OUl9HRU5TIGNvbXBhcmlzb24gKi9cXG4rXFx0Vk1fV0FSTl9PTl9PTkNFKGdlbiAhPSAtMSBcXHUwMDI2XFx1MDAyNiBnZW4gXFx1MDAzZT0gTUFYX05SX0dFTlMpO1xcbitcXHRyZXR1cm4gZ2VuO1xcbit9XFxuK1xcbisvKipcXG4rICogbHJ1X3NldF9yZWZzX2ZsYWdzIC0gU2V0IHRoZSBMUlUgcmVmZXJlbmNlZCBjb3VudCB0byBmb2xpbyBmbGFncy5cXG4rICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFnc1xcbisgKiBAcmVmczogcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCBudW1iZXIsIGJldHdlZW4gMCBhbmQgTFJVX1JFRlNfTUFYLCBpbmNsdXNpdmUuXFxuKyAqXFxuKyAqIEZvciBNR0xSVSwgUEdfcmVmZXJlbmNlZCBob2xkcyB0aGUgZmlyc3QgcmVmLCBhbmQgdGhlIGV4dHJhIGJpdHMgaG9sZCB0aGVcXG4rICogcmVtYWluaW5nIHJlZnMuIEZvciBjbGFzc2ljYWwgTFJVIHRoZSBleHRyYSBiaXRzIGFyZSBub3QgdXNlZCwgc28gaXQgY2FuXFxuKyAqIGFsc28gYmUgc2VlbiBhcyB0aGUgcmVmcyBjb3VudCBuZXZlciBleGNlZWRzIDEuIEluIGJvdGggY2FzZXMsIHJlZnMgPT0gMVxcbisgKiBtZWFucyBQR19yZWZlcmVuY2VkIGlzIHNldCBhbmQgdGhlIGV4dHJhIGJpdHMgYXJlIHplcm8sIGFuZCByZWZzID09IDAgbWVhbnNcXG4rICogUEdfcmVmZXJlbmNlZCBhbmQgdGhlIGV4dHJhIGJpdHMgYXJlIGFsbCB1bnNldC5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfc2V0X3JlZnNfZmxhZ3ModW5zaWduZWQgbG9uZyAqZmxhZ3MsIHVuc2lnbmVkIGludCByZWZzKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXFx1MDAzZWZsYWdzLmYpO1xcbitcXHRWTV9XQVJOX09OX09OQ0UocmVmcyBcXHUwMDNlIExSVV9SRUZTX01BWCk7XFxuK1xcdEJVSUxEX0JVR19PTihMUlVfUkVGU19NQVggIT0gKExSVV9SRUZTX01BU0sgXFx1MDAzZVxcdTAwM2UgTFJVX1JFRlNfUEdPRkYpICsgMSk7XFxuIFxcbitcXHQqZmxhZ3MgXFx1MDAyNj0gfkxSVV9SRUZTX0ZMQUdTO1xcbitcXHRpZiAoIXJlZnMpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0KmZsYWdzIHw9IChCSVQoUEdfcmVmZXJlbmNlZCkgfCAoKHJlZnMgLSAxVUwpIFxcdTAwM2NcXHUwMDNjIExSVV9SRUZTX1BHT0ZGKSk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBscnVfZ2V0X3JlZnNfZmxhZ3MgLSBSZXR1cm4gTFJVIHJlZmVyZW5jZWQgLyBhY2Nlc3MgY291bnQgZnJvbSBmb2xpbyBmbGFncy5cXG4rICogQGZsYWdzOiBmb2xpbyBmbGFnc1xcbisgKlxcbisgKiBSZWFkcyB0aGUgTFJVIHJlZmVyZW5jZWQgY291bnQgc2V0IGJ5IGxydV9zZXRfcmVmc19mbGFncygpLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBpbnQgbHJ1X2dldF9yZWZzX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuK3tcXG4gXFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBCSVQoUEdfcmVmZXJlbmNlZCkpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0LypcXG5AQCAtMTU1LDExICsyMjIsMjQgQEAgc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0cmV0dXJuICgoZmxhZ3MgXFx1MDAyNiBMUlVfUkVGU19NQVNLKSBcXHUwMDNlXFx1MDAzZSBMUlVfUkVGU19QR09GRikgKyAxO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfZ2VuKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBmbGFncyA9IFJFQURfT05DRShmb2xpby1cXHUwMDNlZmxhZ3MuZik7XFxuK1xcdHJldHVybiBscnVfZ2V0X3JlZnNfZmxhZ3MoUkVBRF9PTkNFKCpjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpKTtcXG4rfVxcbiBcXG4tXFx0cmV0dXJuICgoZmxhZ3MgXFx1MDAyNiBMUlVfR0VOX01BU0spIFxcdTAwM2VcXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgcmVmcylcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xcbitcXG4rXFx0ZG8ge1xcbitcXHRcXHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XFxuK1xcdFxcdGxydV9zZXRfcmVmc19mbGFncyhcXHUwMDI2bmV3X2ZsYWdzLCByZWZzKTtcXG4rXFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHRyZXR1cm4gbHJ1X2dldF9nZW5fZmxhZ3MoUkVBRF9PTkNFKCpjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpKTtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIGxydV9nZW5faXNfYWN0aXZlKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IGdlbilcXG5AQCAtMjcwLDcgKzM1MCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2FkZF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcXG4gXFx0ZmxhZ3MgPSAoZ2VuICsgMVVMKSBcXHUwMDNjXFx1MDAzYyBMUlVfR0VOX1BHT0ZGO1xcbiBcXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUlOX05SX0dFTlMgYWJvdXQgUEdfYWN0aXZlICovXFxuLVxcdHNldF9tYXNrX2JpdHMoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpO1xcbitcXHRzZXRfbWFza19iaXRzKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgTFJVX0dFTl9NQVNLIHwgQklUKFBHX2FjdGl2ZSksIGZsYWdzKTtcXG4gXFxuIFxcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgLTEsIGdlbik7XFxuIFxcdC8qIGZvciBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoKSAqL1xcbkBAIC0yOTUsNyArMzc1LDcgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFxuIFxcdC8qIGZvciBmb2xpb19taWdyYXRlX2ZsYWdzKCkgKi9cXG4gXFx0ZmxhZ3MgPSAhcmVjbGFpbWluZyBcXHUwMDI2XFx1MDAyNiBscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIGdlbikgPyBCSVQoUEdfYWN0aXZlKSA6IDA7XFxuLVxcdGZsYWdzID0gc2V0X21hc2tfYml0cyhcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYsIExSVV9HRU5fTUFTSywgZmxhZ3MpO1xcbitcXHRmbGFncyA9IHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0ssIGZsYWdzKTtcXG4gXFx0Z2VuID0gKChmbGFncyBcXHUwMDI2IExSVV9HRU5fTUFTSykgXFx1MDAzZVxcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xcbiBcXG4gXFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBnZW4sIC0xKTtcXG5AQCAtMzA0LDExICszODQsMTkgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxcbisvKipcXG4rICogZm9saW9fbWlncmF0ZV9scnVfcmVmcyAtIGNvcHkgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBhIG5ldyBmb2xpb1xcbisgKiBAbmV3OiB0aGUgZGVzdGluYXRpb24gZm9saW9cXG4rICogQG9sZDogdGhlIHNvdXJjZSBmb2xpb1xcbisgKlxcbisgKiBUcmFuc2ZlciB0aGUgcmVmZXJlbmNlIHN0YXRlIHRvIEBuZXcgZHVyaW5nIG1pZ3JhdGlvbjogdGhlIE1HTFJVXFxuKyAqIHJlZnMgY291bnQsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkLCBvciBqdXN0IFBHX3JlZmVyZW5jZWQgZm9yIHRoZVxcbisgKiBhY3RpdmUvaW5hY3RpdmUgTFJVLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGxvbmcgcmVmcyA9IFJFQURfT05DRShvbGQtXFx1MDAzZWZsYWdzLmYpIFxcdTAwMjYgTFJVX1JFRlNfTUFTSztcXG4tXFxuLVxcdHNldF9tYXNrX2JpdHMoXFx1MDAyNm5ldy1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgcmVmcyk7XFxuK1xcdEJVSUxEX0JVR19PTihMUlVfUkVGU19NQVNLIFxcdTAwMjYgQklUKFBHX3JlZmVyZW5jZWQpKTtcXG4rXFx0Zm9saW9fc2V0X2xydV9yZWZzKG5ldywgZm9saW9fbHJ1X3JlZnMob2xkKSk7XFxuIH1cXG4gI2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXFxuIFxcbkBAIC0zMzcsOSArNDI1LDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcXG4ge1xcbi1cXG4rXFx0aWYgKGZvbGlvX3Rlc3RfcmVmZXJlbmNlZChvbGQpKVxcbitcXHRcXHRmb2xpb19zZXRfcmVmZXJlbmNlZChuZXcpO1xcbiB9XFxuICNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcXG5pbmRleCA5NGY5YzNmZjU0MTYwLi45YjI3Y2Y1M2JkYmM3IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXFxuQEAgLTQ5MiwxMSArNDkyLDE0IEBAIGVudW0gbHJ1dmVjX2ZsYWdzIHtcXG4gICogZm9saW8tXFx1MDAzZWZsYWdzLCBtYXNrZWQgYnkgTFJVX1JFRlNfTUFTSy5cXG4gICovXFxuICNkZWZpbmUgTUFYX05SX1RJRVJTXFx0XFx0NFVcXG4rI2RlZmluZSBMUlVfVElFUl9NSU5cXHRcXHQwVVxcbisjZGVmaW5lIExSVV9USUVSX01BWFxcdFxcdChNQVhfTlJfVElFUlMgLSAxKVxcbiBcXG4gI2lmbmRlZiBfX0dFTkVSQVRJTkdfQk9VTkRTX0hcXG4gXFxuICNkZWZpbmUgTFJVX0dFTl9NQVNLXFx0XFx0KChCSVQoTFJVX0dFTl9XSURUSCkgLSAxKSBcXHUwMDNjXFx1MDAzYyBMUlVfR0VOX1BHT0ZGKVxcbiAjZGVmaW5lIExSVV9SRUZTX01BU0tcXHRcXHQoKEJJVChMUlVfUkVGU19XSURUSCkgLSAxKSBcXHUwMDNjXFx1MDAzYyBMUlVfUkVGU19QR09GRilcXG4rI2RlZmluZSBMUlVfUkVGU19NQVhcXHRcXHRCSVQoTFJVX1JFRlNfV0lEVEgpXFxuIFxcbiAvKlxcbiAgKiBGb3IgZm9saW9zIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycyxcXG5kaWZmIC0tZ2l0IGEvbW0vZm9saW8uYyBiL21tL2ZvbGlvLmNcXG5pbmRleCBjMDJkY2VhOWMwM2MyLi5mYjg3NGZlNDkyYjJiIDEwMDY0NFxcbi0tLSBhL21tL2ZvbGlvLmNcXG4rKysgYi9tbS9mb2xpby5jXFxuQEAgLTM1MywyNiArMzUzLDI4IEBAIHN0YXRpYyB2b2lkIF9fbHJ1X2NhY2hlX2FjdGl2YXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcbiBzdGF0aWMgdm9pZCBscnVfZ2VuX2luY19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cXHUwMDNlZmxhZ3MuZik7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XFxuK1xcdGludCByZWZzO1xcbiBcXG4gXFx0aWYgKGZvbGlvX3Rlc3RfdW5ldmljdGFibGUoZm9saW8pKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi9cXG4tXFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKSB7XFxuLVxcdFxcdHNldF9tYXNrX2JpdHMoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xcbitcXHRpZiAoIWZvbGlvX2xydV9yZWZzKGZvbGlvKSkge1xcbitcXHRcXHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuIFxcdGRvIHtcXG4tXFx0XFx0aWYgKChvbGRfZmxhZ3MgXFx1MDAyNiBMUlVfUkVGU19NQVNLKSA9PSBMUlVfUkVGU19NQVNLKSB7XFxuK1xcdFxcdG5ld19mbGFncyA9IG9sZF9mbGFncztcXG4rXFx0XFx0cmVmcyA9IGxydV9nZXRfcmVmc19mbGFncyhvbGRfZmxhZ3MpO1xcbitcXHRcXHRpZiAocmVmcyA9PSBMUlVfUkVGU19NQVgpIHtcXG4gXFx0XFx0XFx0aWYgKCFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKVxcbiBcXHRcXHRcXHRcXHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XFxuIFxcdFxcdFxcdHJldHVybjtcXG4gXFx0XFx0fVxcbi1cXG4tXFx0XFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzICsgQklUKExSVV9SRUZTX1BHT0ZGKTtcXG4tXFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgXFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XFxuK1xcdFxcdGxydV9zZXRfcmVmc19mbGFncyhcXHUwMDI2bmV3X2ZsYWdzLCByZWZzICsgMSk7XFxuK1xcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFxcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcXG5AQCAtMzg0LDcgKzM4Niw4IEBAIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRpZiAoZ2VuIFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbi1cXHRzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MgfCBCSVQoUEdfd29ya2luZ3NldCksIDApO1xcbitcXHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xcbitcXHRmb2xpb19jbGVhcl93b3JraW5nc2V0KGZvbGlvKTtcXG4gXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0c2VxID0gUkVBRF9PTkNFKGZvbGlvX2xydXZlYyhmb2xpbyktXFx1MDAzZWxydWdlbi5taW5fc2VxW3R5cGVdKTtcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXFxuaW5kZXggODU2YTdkMDc1ODZjYy4uMGE2NWFiOGRmMjdhOSAxMDA2NDRcXG4tLS0gYS9tbS9tZW1jb250cm9sLmNcXG4rKysgYi9tbS9tZW1jb250cm9sLmNcXG5AQCAtMTUyOSwyOCArMTUyOSwxMiBAQCB2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXFxuIFxcdFxcdFxcdFxcdGludCB6aWQsIGxvbmcgbnJfcGFnZXMpXFxuIHtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16O1xcbi1cXHR1bnNpZ25lZCBsb25nICpscnVfc2l6ZTtcXG4tXFx0bG9uZyBzaXplO1xcbiBcXG4gXFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0bXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcXG4tXFx0bHJ1X3NpemUgPSBcXHUwMDI2bXotXFx1MDAzZWxydV96b25lX3NpemVbemlkXVtscnVdO1xcbi1cXG4tXFx0aWYgKG5yX3BhZ2VzIFxcdTAwM2MgMClcXG4tXFx0XFx0KmxydV9zaXplICs9IG5yX3BhZ2VzO1xcbi1cXG4tXFx0c2l6ZSA9ICpscnVfc2l6ZTtcXG4tXFx0aWYgKFdBUk5fT05DRShzaXplIFxcdTAwM2MgMCxcXG4tXFx0XFx0XFxcIiVzKCVwLCAlZCwgJWxkKTogbHJ1X3NpemUgJWxkXFxcXG5cXFwiLFxcbi1cXHRcXHRfX2Z1bmNfXywgbHJ1dmVjLCBscnUsIG5yX3BhZ2VzLCBzaXplKSkge1xcbi1cXHRcXHRWTV9CVUdfT04oMSk7XFxuLVxcdFxcdCpscnVfc2l6ZSA9IDA7XFxuLVxcdH1cXG4tXFxuLVxcdGlmIChucl9wYWdlcyBcXHUwMDNlIDApXFxuLVxcdFxcdCpscnVfc2l6ZSArPSBucl9wYWdlcztcXG4rXFx0bXotXFx1MDAzZWxydV96b25lX3NpemVbemlkXVtscnVdICs9IG5yX3BhZ2VzO1xcbiB9XFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jXFxuaW5kZXggMTViNDU4MzJiY2ZhNy4uYTM2OWQwYzk1YzM4NiAxMDA2NDRcXG4tLS0gYS9tbS9taWdyYXRlLmNcXG4rKysgYi9tbS9taWdyYXRlLmNcXG5AQCAtNzc2LDggKzc3Niw5IEBAIHZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdGludCBjcHVwaWQ7XFxuIFxcbi1cXHRpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSlcXG4tXFx0XFx0Zm9saW9fc2V0X3JlZmVyZW5jZWQobmV3Zm9saW8pO1xcbitcXHQvKiBDb3B5IHRoZSByZWZlcmVuY2Ugc3RhdGUsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkICovXFxuK1xcdGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMobmV3Zm9saW8sIGZvbGlvKTtcXG4rXFxuIFxcdGlmIChmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSlcXG4gXFx0XFx0Zm9saW9fbWFya191cHRvZGF0ZShuZXdmb2xpbyk7XFxuIFxcdGlmIChmb2xpb190ZXN0X2NsZWFyX2FjdGl2ZShmb2xpbykpIHtcXG5AQCAtODA3LDcgKzgwOCw2IEBAIHZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRpZiAoZm9saW9fdGVzdF9pZGxlKGZvbGlvKSlcXG4gXFx0XFx0Zm9saW9fc2V0X2lkbGUobmV3Zm9saW8pO1xcbiBcXG4tXFx0Zm9saW9fbWlncmF0ZV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7XFxuIFxcdC8qXFxuIFxcdCAqIENvcHkgTlVNQSBpbmZvcm1hdGlvbiB0byB0aGUgbmV3IHBhZ2UsIHRvIHByZXZlbnQgb3Zlci1lYWdlclxcbiBcXHQgKiBmdXR1cmUgbWlncmF0aW9ucyBvZiB0aGlzIHNhbWUgcGFnZS5cXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IGZkZDEzMjk5YTA0YTkuLmU3ZDM3OWM2ZTcwM2EgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC04NDMsMTkgKzg0MywyMiBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXFxuIFxcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSkge1xcbiBcXHRcXHQvKiBBY3RpdmF0ZSBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciBmaXJzdCB1c2FnZS4gKi9cXG4gXFx0XFx0aWYgKGlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkge1xcbi1cXHRcXHRcXHRzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7XFxuK1xcdFxcdFxcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcXG4rXFx0XFx0XFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcXG4gXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdHNldF9tYXNrX2JpdHMoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xcbitcXHRcXHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpO1xcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdH1cXG4gXFxuIFxcdC8qIFByb21vdGUgb24gc2Vjb25kIGFjY2VzcyAqL1xcbi1cXHRpZiAoZm9saW9fbHJ1X3JlZnMoZm9saW8pIFxcdTAwM2UgMSlcXG4tXFx0XFx0c2V0X21hc2tfYml0cyhcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfd29ya2luZ3NldCkpO1xcbi1cXHRlbHNlXFxuK1xcdGlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgXFx1MDAzZSAxKSB7XFxuK1xcdFxcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcXG4rXFx0XFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcXG4rXFx0fSBlbHNlIHtcXG4gXFx0XFx0Zm9saW9fbWFya19hY2Nlc3NlZChmb2xpbyk7XFxuK1xcdH1cXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gI2Vsc2VcXG5AQCAtMzE5NSw4ICszMTk4LDggQEAgc3RydWN0IGN0cmxfcG9zIHtcXG4gXFx0aW50IGdhaW47XFxuIH07XFxuIFxcbi1zdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2FpbixcXG4tXFx0XFx0XFx0ICBzdHJ1Y3QgY3RybF9wb3MgKnBvcylcXG4rc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllcl9taW4sXFxuK1xcdFxcdFxcdCAgaW50IHRpZXJfbWF4LCBpbnQgZ2Fpbiwgc3RydWN0IGN0cmxfcG9zICpwb3MpXFxuIHtcXG4gXFx0aW50IGk7XFxuIFxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxuQEAgLTMyMDUsNyArMzIwOCw3IEBAIHN0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXIsIGludCBnYWluLFxcbiBcXHRwb3MtXFx1MDAzZWdhaW4gPSBnYWluO1xcbiBcXHRwb3MtXFx1MDAzZXJlZmF1bHRlZCA9IHBvcy1cXHUwMDNldG90YWwgPSAwO1xcbiBcXG4tXFx0Zm9yIChpID0gdGllciAlIE1BWF9OUl9USUVSUzsgaSBcXHUwMDNjPSBtaW4odGllciwgTUFYX05SX1RJRVJTIC0gMSk7IGkrKykge1xcbitcXHRmb3IgKGkgPSB0aWVyX21pbjsgaSBcXHUwMDNjPSB0aWVyX21heDsgaSsrKSB7XFxuIFxcdFxcdHBvcy1cXHUwMDNlcmVmYXVsdGVkICs9IGxydWdlbi1cXHUwMDNlYXZnX3JlZmF1bHRlZFt0eXBlXVtpXSArXFxuIFxcdFxcdFxcdFxcdCAgYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bHJ1Z2VuLVxcdTAwM2VyZWZhdWx0ZWRbaGlzdF1bdHlwZV1baV0pO1xcbiBcXHRcXHRwb3MtXFx1MDAzZXRvdGFsICs9IGxydWdlbi1cXHUwMDNlYXZnX3RvdGFsW3R5cGVdW2ldICtcXG5AQCAtMzI2NiwxMSArMzI2OSwxMSBAQCBzdGF0aWMgYm9vbCBwb3NpdGl2ZV9jdHJsX2VycihzdHJ1Y3QgY3RybF9wb3MgKnNwLCBzdHJ1Y3QgY3RybF9wb3MgKnB2KVxcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbiBcXG4gLyogcHJvbW90ZSBwYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzICovXFxuLXN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbitzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGludCAqdHlwZSxcXG4rXFx0XFx0XFx0ICAgIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cXHUwMDNlZmxhZ3MuZik7XFxuLVxcbi1cXHRWTV9XQVJOX09OX09OQ0UoZ2VuIFxcdTAwM2U9IE1BWF9OUl9HRU5TKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcXG4rXFx0aW50IG9sZF9nZW47XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBTZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MsIGFuZCBhY3RpdmF0ZSBmaWxlLWJhY2tlZFxcbkBAIC0zMjc5LDIwICszMjgyLDI1IEBAIHN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hXFxuIFxcdCAqL1xcbiBcXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgICFpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIHZtYV9mbGFncykpIHtcXG4tXFx0XFx0c2V0X21hc2tfYml0cyhcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XFxuK1xcdFxcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XFxuIFxcdFxcdHJldHVybiAtMTtcXG4gXFx0fVxcbiBcXG4gXFx0ZG8ge1xcbitcXHRcXHRvbGRfZ2VuID0gbHJ1X2dldF9nZW5fZmxhZ3Mob2xkX2ZsYWdzKTtcXG4rXFx0XFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xcbitcXG4gXFx0XFx0LyogbHJ1X2dlbl9kZWxfZm9saW8oKSBoYXMgaXNvbGF0ZWQgdGhpcyBwYWdlPyAqL1xcbi1cXHRcXHRpZiAoIShvbGRfZmxhZ3MgXFx1MDAyNiBMUlVfR0VOX01BU0spKVxcbi1cXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdGlmIChvbGRfZ2VuIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuIFxcbi1cXHRcXHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgXFx1MDAyNiB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTtcXG4tXFx0XFx0bmV3X2ZsYWdzIHw9ICgoZ2VuICsgMVVMKSBcXHUwMDNjXFx1MDAzYyBMUlVfR0VOX1BHT0ZGKSB8IEJJVChQR193b3JraW5nc2V0KTtcXG4tXFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgXFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XFxuK1xcdFxcdGxydV9zZXRfZ2VuX2ZsYWdzKFxcdTAwMjZuZXdfZmxhZ3MsIG5ld19nZW4pO1xcbitcXHRcXHRscnVfc2V0X3JlZnNfZmxhZ3MoXFx1MDAyNm5ld19mbGFncywgMCk7XFxuK1xcdFxcdG5ld19mbGFncyB8PSBCSVQoUEdfd29ya2luZ3NldCk7XFxuK1xcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFxcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xcbiBcXG4tXFx0cmV0dXJuICgob2xkX2ZsYWdzIFxcdTAwMjYgTFJVX0dFTl9NQVNLKSBcXHUwMDNlXFx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XFxuK1xcdCp0eXBlID0gZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUoXFx1MDAyNm9sZF9mbGFncyk7XFxuK1xcdHJldHVybiBvbGRfZ2VuO1xcbiB9XFxuIFxcbiAvKiBwcm90ZWN0IHBhZ2VzIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycyAqL1xcbkBAIC0zMzAxLDIxICszMzA5LDIwIEBAIHN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xcbiBcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbiBcXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVxcdTAwM2VtaW5fc2VxW3R5cGVdKTtcXG4tXFx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cXHUwMDNlZmxhZ3MuZik7XFxuLVxcbi1cXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIShvbGRfZmxhZ3MgXFx1MDAyNiBMUlVfR0VOX01BU0spLCBmb2xpbyk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XFxuIFxcbiBcXHRkbyB7XFxuLVxcdFxcdG5ld19nZW4gPSAoKG9sZF9mbGFncyBcXHUwMDI2IExSVV9HRU5fTUFTSykgXFx1MDAzZVxcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xcbitcXHRcXHRuZXdfZ2VuID0gbHJ1X2dldF9nZW5fZmxhZ3Mob2xkX2ZsYWdzKTtcXG4rXFxuIFxcdFxcdC8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqL1xcbiBcXHRcXHRpZiAobmV3X2dlbiBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IG5ld19nZW4gIT0gb2xkX2dlbilcXG4gXFx0XFx0XFx0cmV0dXJuIG5ld19nZW47XFxuIFxcbitcXHRcXHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XFxuIFxcdFxcdG5ld19nZW4gPSAob2xkX2dlbiArIDEpICUgTUFYX05SX0dFTlM7XFxuLVxcbi1cXHRcXHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgXFx1MDAyNiB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTtcXG4tXFx0XFx0bmV3X2ZsYWdzIHw9IChuZXdfZ2VuICsgMVVMKSBcXHUwMDNjXFx1MDAzYyBMUlVfR0VOX1BHT0ZGO1xcbi1cXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBcXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcXG4rXFx0XFx0bHJ1X3NldF9nZW5fZmxhZ3MoXFx1MDAyNm5ld19mbGFncywgbmV3X2dlbik7XFxuK1xcdFxcdGxydV9zZXRfcmVmc19mbGFncyhcXHUwMDI2bmV3X2ZsYWdzLCAwKTtcXG4rXFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XFxuIFxcbiBcXHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xcbiBcXG5AQCAtMzMyMyw5ICszMzMwLDggQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgdXBkYXRlX2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tXFx0XFx0XFx0ICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuKVxcbitcXHRcXHRcXHQgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4sIGludCB0eXBlKVxcbiB7XFxuLVxcdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xcbiBcXHRpbnQgem9uZSA9IGZvbGlvX3pvbmVudW0oZm9saW8pO1xcbiBcXHRpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuIFxcbkBAIC0zNTEyLDIyICszNTE4LDI0IEBAIHN0YXRpYyBib29sIHN1aXRhYmxlX3RvX3NjYW4oaW50IHRvdGFsLCBpbnQgeW91bmcpXFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi1cXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgYm9vbCBkaXJ0eSlcXG4rXFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIGRpcnR5KVxcbiB7XFxuLVxcdGludCBvbGRfZ2VuO1xcbitcXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiwgdHlwZTtcXG4gXFxuIFxcdGlmICghZm9saW8pXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuK1xcdG5ld19nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKFJFQURfT05DRShscnV2ZWMtXFx1MDAzZWxydWdlbi5tYXhfc2VxKSk7XFxuK1xcbiBcXHRpZiAoZGlydHkgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAhKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgICAhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSlcXG4gXFx0XFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XFxuIFxcbiBcXHRpZiAod2Fsaykge1xcbi1cXHRcXHRvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgXFx1MDAyNnZtYS1cXHUwMDNlZmxhZ3MpO1xcbitcXHRcXHRvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgXFx1MDAyNnR5cGUsIFxcdTAwMjZ2bWEtXFx1MDAzZWZsYWdzKTtcXG4gXFx0XFx0aWYgKG9sZF9nZW4gXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXFxuLVxcdFxcdFxcdHVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcXG4rXFx0XFx0XFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4sIHR5cGUpO1xcbiBcXHR9IGVsc2UgaWYgKGxydV9nZW5fc2V0X3JlZnMoZm9saW8sIFxcdTAwMjZ2bWEtXFx1MDAzZWZsYWdzKSkge1xcbiBcXHRcXHRvbGRfZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7XFxuIFxcdFxcdGlmIChvbGRfZ2VuIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgb2xkX2dlbiAhPSBuZXdfZ2VuKVxcbkBAIC0zNTQ5LDggKzM1NTcsNiBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXFx1MDAzZXByaXZhdGU7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbiBcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstXFx1MDAzZWxydXZlYyk7XFxuLVxcdERFRklORV9NQVhfU0VRKHdhbGstXFx1MDAzZWxydXZlYyk7XFxuLVxcdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xcbiBcXHR1bnNpZ25lZCBpbnQgbnI7XFxuIFxcdHBtZF90IHBtZHZhbDtcXG4gXFxuQEAgLTM2MDEsNyArMzYwNyw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdGlmIChsYXN0ICE9IGZvbGlvKSB7XFxuLVxcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXFx1MDAzZXZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XFxuK1xcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXFx1MDAzZXZtYSwgd2Fsay1cXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XFxuIFxcbiBcXHRcXHRcXHRsYXN0ID0gZm9saW87XFxuIFxcdFxcdFxcdGRpcnR5ID0gZmFsc2U7XFxuQEAgLTM2MTQsNyArMzYyMCw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHR3YWxrLVxcdTAwM2VtbV9zdGF0c1tNTV9MRUFGX1lPVU5HXSArPSBucjtcXG4gXFx0fVxcbiBcXG4tXFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cXHUwMDNldm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcXG4rXFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cXHUwMDNldm1hLCB3YWxrLVxcdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcXG4gXFx0bGFzdCA9IE5VTEw7XFxuIFxcbiBcXHRpZiAoaSBcXHUwMDNjIFBUUlNfUEVSX1BURSBcXHUwMDI2XFx1MDAyNiBnZXRfbmV4dF92bWEoUE1EX01BU0ssIFBBR0VfU0laRSwgYXJncywgXFx1MDAyNnN0YXJ0LCBcXHUwMDI2ZW5kKSlcXG5AQCAtMzYzNyw4ICszNjQzLDYgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcXG4gXFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXFx1MDAzZXByaXZhdGU7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbiBcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstXFx1MDAzZWxydXZlYyk7XFxuLVxcdERFRklORV9NQVhfU0VRKHdhbGstXFx1MDAzZWxydXZlYyk7XFxuLVxcdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xcbiBcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFKHB1ZF9sZWFmKCpwdWQpKTtcXG4gXFxuQEAgLTM2OTIsNyArMzY5Niw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhXFxuIFxcdFxcdFxcdGdvdG8gbmV4dDtcXG4gXFxuIFxcdFxcdGlmIChsYXN0ICE9IGZvbGlvKSB7XFxuLVxcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XFxuK1xcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay1cXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XFxuIFxcbiBcXHRcXHRcXHRsYXN0ID0gZm9saW87XFxuIFxcdFxcdFxcdGRpcnR5ID0gZmFsc2U7XFxuQEAgLTM3MDYsNyArMzcxMCw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhXFxuIFxcdFxcdGkgPSBpIFxcdTAwM2UgTUlOX0xSVV9CQVRDSCA/IDAgOiBmaW5kX25leHRfYml0KGJpdG1hcCwgTUlOX0xSVV9CQVRDSCwgaSkgKyAxO1xcbiBcXHR9IHdoaWxlIChpIFxcdTAwM2M9IE1JTl9MUlVfQkFUQ0gpO1xcbiBcXG4tXFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcXG4rXFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCB3YWxrLVxcdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcXG4gXFxuIFxcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xcbiBcXHRzcGluX3VubG9jayhwdGwpO1xcbkBAIC00MjcwLDggKzQyNzQsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXFxuIFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBmb2xpb19wZ2RhdChmb2xpbyk7XFxuIFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcXG4gXFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlO1xcbi1cXHR1bnNpZ25lZCBsb25nIG1heF9zZXE7XFxuLVxcdGludCBnZW47XFxuIFxcbiBcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKHB2bXctXFx1MDAzZXB0bCk7XFxuIFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2xydShmb2xpbyksIGZvbGlvKTtcXG5AQCAtNDMwOCw4ICs0MzEwLDYgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxcbiBcXG4gXFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcXG4gXFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcXG4tXFx0bWF4X3NlcSA9IFJFQURfT05DRSgobHJ1dmVjKS1cXHUwMDNlbHJ1Z2VuLm1heF9zZXEpO1xcbi1cXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xcbiBcXHRtbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbiBcXG4gXFx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcXG5AQCAtNDM0MSw3ICs0MzQxLDcgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdGlmIChsYXN0ICE9IGZvbGlvKSB7XFxuLVxcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XFxuK1xcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XFxuIFxcbiBcXHRcXHRcXHRsYXN0ID0gZm9saW87XFxuIFxcdFxcdFxcdGRpcnR5ID0gZmFsc2U7XFxuQEAgLTQzNTMsMTMgKzQzNTMsMTQgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxcbiBcXHRcXHR5b3VuZyArPSBucjtcXG4gXFx0fVxcbiBcXG4tXFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcXG4rXFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTtcXG4gXFxuIFxcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xcbiBcXG4gXFx0LyogZmVlZGJhY2sgZnJvbSBybWFwIHdhbGtlcnMgdG8gcGFnZSB0YWJsZSB3YWxrZXJzICovXFxuIFxcdGlmIChtbV9zdGF0ZSBcXHUwMDI2XFx1MDAyNiBzdWl0YWJsZV90b19zY2FuKGksIHlvdW5nKSlcXG4tXFx0XFx0dXBkYXRlX2Jsb29tX2ZpbHRlcihtbV9zdGF0ZSwgbWF4X3NlcSwgcHZtdy1cXHUwMDNlcG1kKTtcXG4rXFx0XFx0dXBkYXRlX2Jsb29tX2ZpbHRlcihtbV9zdGF0ZSwgUkVBRF9PTkNFKGxydXZlYy1cXHUwMDNlbHJ1Z2VuLm1heF9zZXEpLFxcbitcXHRcXHRcXHRcXHQgICAgcHZtdy1cXHUwMDNlcG1kKTtcXG4gXFxuIFxcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcXG4gXFxuQEAgLTQ3MTYsNyArNDcxNyw3IEBAIHN0YXRpYyBib29sIGlzb2xhdGVfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2NhXFxuIFxcbiBcXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi9cXG4gXFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKVxcbi1cXHRcXHRzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgMCk7XFxuK1xcdFxcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XFxuIFxcbiBcXHRzdWNjZXNzID0gbHJ1X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7XFxuIFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghc3VjY2VzcywgZm9saW8pO1xcbkBAIC00ODA5LDkgKzQ4MTAsOSBAQCBzdGF0aWMgaW50IGdldF90aWVyX2lkeChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKVxcbiBcXHQgKiBUaGlzIHZhbHVlIGlzIGNob3NlbiBiZWNhdXNlIGFueSBvdGhlciB0aWVyIHdvdWxkIGhhdmUgYXQgbGVhc3QgdHdpY2VcXG4gXFx0ICogYXMgbWFueSByZWZhdWx0cyBhcyB0aGUgZmlyc3QgdGllci5cXG4gXFx0ICovXFxuLVxcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCAwLCAyLCBcXHUwMDI2c3ApO1xcbi1cXHRmb3IgKHRpZXIgPSAxOyB0aWVyIFxcdTAwM2MgTUFYX05SX1RJRVJTOyB0aWVyKyspIHtcXG4tXFx0XFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIDMsIFxcdTAwMjZwdik7XFxuK1xcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01JTiwgMiwgXFx1MDAyNnNwKTtcXG4rXFx0Zm9yICh0aWVyID0gTFJVX1RJRVJfTUlOICsgMTsgdGllciBcXHUwMDNjPSBMUlVfVElFUl9NQVg7IHRpZXIrKykge1xcbitcXHRcXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdGllciwgdGllciwgMywgXFx1MDAyNnB2KTtcXG4gXFx0XFx0aWYgKCFwb3NpdGl2ZV9jdHJsX2VycihcXHUwMDI2c3AsIFxcdTAwMjZwdikpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuQEAgLTQ4MzIsOCArNDgzMywxMCBAQCBzdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcXG4gXFx0ICogQ29tcGFyZSB0aGUgc3VtIG9mIGFsbCB0aWVycyBvZiBhbm9uIHdpdGggdGhhdCBvZiBmaWxlIHRvIGRldGVybWluZVxcbiBcXHQgKiB3aGljaCB0eXBlIHRvIHNjYW4uXFxuIFxcdCAqL1xcbi1cXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBNQVhfTlJfVElFUlMsIHN3YXBwaW5lc3MsIFxcdTAwMjZzcCk7XFxuLVxcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIE1BWF9OUl9USUVSUywgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCBcXHUwMDI2cHYpO1xcbitcXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCxcXG4rXFx0XFx0ICAgICAgc3dhcHBpbmVzcywgXFx1MDAyNnNwKTtcXG4rXFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NQVgsXFxuK1xcdFxcdCAgICAgIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgXFx1MDAyNnB2KTtcXG4gXFxuIFxcdHJldHVybiBwb3NpdGl2ZV9jdHJsX2VycihcXHUwMDI2c3AsIFxcdTAwMjZwdik7XFxuIH1cXG5AQCAtNDkzMiw4ICs0OTM1LDEwIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHQvKiBkb24ndCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqL1xcbi1cXHRcXHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pXFxuLVxcdFxcdFxcdHNldF9tYXNrX2JpdHMoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX2FjdGl2ZSkpO1xcbitcXHRcXHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pIHtcXG4rXFx0XFx0XFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcXG4rXFx0XFx0XFx0Zm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0bW92ZV9mb2xpb3NfdG9fbHJ1KFxcdTAwMjZsaXN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDA6NDkuOTU5MTk5NzgxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMTA4Mjk3NTc0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNSUdSQVRJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJscnVfZ2VuX2xvb2tfYXJvdW5kXCIsXG4gICAgXCJmb2xpb19taWdyYXRlX2ZsYWdzXCIsXG4gICAgXCJtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZVwiLFxuICAgIFwibHJ1X2dlbl9yZXBhcmVudF9tZW1jZ1wiLFxuICAgIFwibHJ1X2dlbl9zb2Z0X3JlY2xhaW1cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIE11bHRpLUdlbiBMUlUgKE1HTFJVKSwgcGFnZSByZWZlcmVuY2UgY291bnRpbmcsIGZvbGlvIGZsYWdzIG1hbmFnZW1lbnQsIGZvbGlvIG1pZ3JhdGlvbiwgYW5kIG1lbWNnIExSVSBzaXplIGFjY291bnRpbmcuIFRoZXNlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhZmZlY3QgcGFnZSByZWNsYW1hdGlvbiwgYWdpbmcsIGFuZCBtaWdyYXRpb24gYmVoYXZpb3IgaW4gcmVhY2hhYmxlIGNvcmUgbW0gY29kZSBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGQ3MGQxY2I3NTcxMzQyMjg2ZjQ2YzNiNWE4OGQ0OWVmNjQ5YWRiN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMDQ6NDA6NDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5pbmRleCA3ZDFjMGNlMTg5YTg4Li44Njc4MGVmNjVlYWZhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5AQCAtMTEzLDcgKzExMyw3IEBAIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlIHtcbiBcdC8qIEZpZWxkcyB3aGljaCBnZXQgdXBkYXRlZCBvZnRlbiBhdCB0aGUgZW5kLiAqL1xuIFx0c3RydWN0IGxydXZlY1x0XHRscnV2ZWM7XG4gXHRDQUNIRUxJTkVfUEFERElORyhfcGFkMl8pO1xuLVx0dW5zaWduZWQgbG9uZ1x0XHRscnVfem9uZV9zaXplW01BWF9OUl9aT05FU11bTlJfTFJVX0xJU1RTXTtcbitcdGxvbmdcdFx0XHRscnVfem9uZV9zaXplW01BWF9OUl9aT05FU11bTlJfTFJVX0xJU1RTXTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwX3JlY2xhaW1faXRlclx0aXRlcjtcbiBcbiBcdC8qXG5AQCAtOTAyLDEwICs5MDIsMTUgQEAgc3RhdGljIGlubGluZVxuIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdGVudW0gbHJ1X2xpc3QgbHJ1LCBpbnQgem9uZV9pZHgpXG4ge1xuK1x0bG9uZyB2YWw7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XG4gXG4gXHRteiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xuLVx0cmV0dXJuIFJFQURfT05DRShtei1cdTAwM2VscnVfem9uZV9zaXplW3pvbmVfaWR4XVtscnVdKTtcbitcdHZhbCA9IFJFQURfT05DRShtei1cdTAwM2VscnVfem9uZV9zaXplW3pvbmVfaWR4XVtscnVdKTtcbitcdGlmIChXQVJOX09OX09OQ0UodmFsIFx1MDAzYyAwKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXR1cm4gdmFsO1xuIH1cbiBcbiB2b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuaW5kZXggNjIxYzg2NTNkOGY3ZS4uYWI2OWI5OTMwODkzZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcbkBAIC0zMCw2ICszMCwxNyBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19pc19maWxlX2xydShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cmV0dXJuICFmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pO1xuIH1cbiBcbisvKipcbisgKiBmb2xpb19mbGFnc19pc19maWxlX2xydSAtIFNob3VsZCB0aGUgZm9saW8gYmUgb24gYSBmaWxlIExSVSBvciBhbm9uIExSVT9cbisgKiBAZmxhZ3M6IFRoZSBmb2xpbydzIGZsYWdzLlxuKyAqXG4rICogSnVzdCBsaWtlIGZvbGlvX2lzX2ZpbGVfbHJ1IGJ1dCB0YWtlIHRoZSBmb2xpbyBmbGFncyBkaXJlY3RseSBpbnN0ZWFkLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZsYWdzKVxuK3tcbitcdHJldHVybiAhdGVzdF9iaXQoUEdfc3dhcGJhY2tlZCwgZmxhZ3MpO1xuK31cbitcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX191cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRcdFx0ZW51bSBscnVfbGlzdCBscnUsIGVudW0gem9uZV90eXBlIHppZCxcbiBcdFx0XHRcdGxvbmcgbnJfcGFnZXMpXG5AQCAtMTQyLDEwICsxNTMsNjYgQEAgc3RhdGljIGlubGluZSBpbnQgbHJ1X3RpZXJfZnJvbV9yZWZzKGludCByZWZzLCBib29sIHdvcmtpbmdzZXQpXG4gXHRyZXR1cm4gd29ya2luZ3NldCA/IE1BWF9OUl9USUVSUyAtIDEgOiBvcmRlcl9iYXNlXzIocmVmcyk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rLyoqXG4rICogbHJ1X3NldF9nZW5fZmxhZ3MgLSBTZXQgdGhlIExSVSBnZW5lcmF0aW9uIG51bWJlciB0byBzcGVjaWZpZWQgZm9saW8gZmxhZ3MuXG4rICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFnc1xuKyAqIEBnZW46IGdlbmVyYXRpb24gbnVtYmVyLCBiZXR3ZWVuIDAgYW5kIChNQVhfTlJfR0VOUyAtIDEpLCBpbmNsdXNpdmUuXG4rICovXG4rc3RhdGljIGlubGluZSB2b2lkIGxydV9zZXRfZ2VuX2ZsYWdzKHVuc2lnbmVkIGxvbmcgKmZsYWdzLCBpbnQgZ2VuKVxuK3tcbitcdEJVSUxEX0JVR19PTihMUlVfR0VOX01BU0sgXHUwMDI2IExSVV9SRUZTX01BU0spO1xuK1x0Vk1fV0FSTl9PTl9PTkNFKGdlbiBcdTAwM2U9IE1BWF9OUl9HRU5TIHx8IGdlbiBcdTAwM2MgMCk7XG4rXHQvKiBTdG9yZSBnZW4gb2Zmc2V0IGJ5IDEsIHplcm8gbWVhbnMgdGhlIGZvbGlvIGlzIG9mZi1saXN0LiAqL1xuK1x0KmZsYWdzIFx1MDAyNj0gfkxSVV9HRU5fTUFTSztcbitcdCpmbGFncyB8PSAoZ2VuICsgMVVMKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRjtcbit9XG4rXG4rLyoqXG4rICogbHJ1X2dldF9nZW5fZmxhZ3MgLSBSZXR1cm4gdGhlIExSVSBnZW5lcmF0aW9uIG51bWJlciBmcm9tIGZvbGlvIGZsYWdzLlxuKyAqIEBmbGFnczogZm9saW8gZmxhZ3NcbisgKlxuKyAqIFJldHVybnM6IEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgKE1BWF9OUl9HRU5TIC0gMSksIGluY2x1c2l2ZS4gUmV0dXJuc1xuKyAqIC0xIGlmIHRoZSBmbGFncyBpbmRpY2F0ZSB0aGUgZm9saW8gaXMgb2ZmIHRoZSBsaXN0IChlLmcuLCBpc29sYXRlZCkuXG4rICovXG4rc3RhdGljIGlubGluZSBpbnQgbHJ1X2dldF9nZW5fZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncylcbit7XG4rXHRpbnQgZ2VuID0gKChmbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuK1xuK1x0LyogRXhjbHVkZSB0aGUgbGVnYWwgLTEgZnJvbSB0aGUgdW5zaWduZWQgTUFYX05SX0dFTlMgY29tcGFyaXNvbiAqL1xuK1x0Vk1fV0FSTl9PTl9PTkNFKGdlbiAhPSAtMSBcdTAwMjZcdTAwMjYgZ2VuIFx1MDAzZT0gTUFYX05SX0dFTlMpO1xuK1x0cmV0dXJuIGdlbjtcbit9XG4rXG4rLyoqXG4rICogbHJ1X3NldF9yZWZzX2ZsYWdzIC0gU2V0IHRoZSBMUlUgcmVmZXJlbmNlZCBjb3VudCB0byBmb2xpbyBmbGFncy5cbisgKiBAZmxhZ3M6IHBvaW50ZXIgdG8gdGhlIGZvbGlvIGZsYWdzXG4rICogQHJlZnM6IHJlZmVyZW5jZWQgLyBhY2Nlc3MgY291bnQgbnVtYmVyLCBiZXR3ZWVuIDAgYW5kIExSVV9SRUZTX01BWCwgaW5jbHVzaXZlLlxuKyAqXG4rICogRm9yIE1HTFJVLCBQR19yZWZlcmVuY2VkIGhvbGRzIHRoZSBmaXJzdCByZWYsIGFuZCB0aGUgZXh0cmEgYml0cyBob2xkIHRoZVxuKyAqIHJlbWFpbmluZyByZWZzLiBGb3IgY2xhc3NpY2FsIExSVSB0aGUgZXh0cmEgYml0cyBhcmUgbm90IHVzZWQsIHNvIGl0IGNhblxuKyAqIGFsc28gYmUgc2VlbiBhcyB0aGUgcmVmcyBjb3VudCBuZXZlciBleGNlZWRzIDEuIEluIGJvdGggY2FzZXMsIHJlZnMgPT0gMVxuKyAqIG1lYW5zIFBHX3JlZmVyZW5jZWQgaXMgc2V0IGFuZCB0aGUgZXh0cmEgYml0cyBhcmUgemVybywgYW5kIHJlZnMgPT0gMCBtZWFuc1xuKyAqIFBHX3JlZmVyZW5jZWQgYW5kIHRoZSBleHRyYSBiaXRzIGFyZSBhbGwgdW5zZXQuXG4rICovXG4rc3RhdGljIGlubGluZSB2b2lkIGxydV9zZXRfcmVmc19mbGFncyh1bnNpZ25lZCBsb25nICpmbGFncywgdW5zaWduZWQgaW50IHJlZnMpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbitcdFZNX1dBUk5fT05fT05DRShyZWZzIFx1MDAzZSBMUlVfUkVGU19NQVgpO1xuK1x0QlVJTERfQlVHX09OKExSVV9SRUZTX01BWCAhPSAoTFJVX1JFRlNfTUFTSyBcdTAwM2VcdTAwM2UgTFJVX1JFRlNfUEdPRkYpICsgMSk7XG4gXG4rXHQqZmxhZ3MgXHUwMDI2PSB+TFJVX1JFRlNfRkxBR1M7XG4rXHRpZiAoIXJlZnMpXG4rXHRcdHJldHVybjtcbitcdCpmbGFncyB8PSAoQklUKFBHX3JlZmVyZW5jZWQpIHwgKChyZWZzIC0gMVVMKSBcdTAwM2NcdTAwM2MgTFJVX1JFRlNfUEdPRkYpKTtcbit9XG4rXG4rLyoqXG4rICogbHJ1X2dldF9yZWZzX2ZsYWdzIC0gUmV0dXJuIExSVSByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IGZyb20gZm9saW8gZmxhZ3MuXG4rICogQGZsYWdzOiBmb2xpbyBmbGFnc1xuKyAqXG4rICogUmVhZHMgdGhlIExSVSByZWZlcmVuY2VkIGNvdW50IHNldCBieSBscnVfc2V0X3JlZnNfZmxhZ3MoKS5cbisgKi9cbitzdGF0aWMgaW5saW5lIGludCBscnVfZ2V0X3JlZnNfZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncylcbit7XG4gXHRpZiAoIShmbGFncyBcdTAwMjYgQklUKFBHX3JlZmVyZW5jZWQpKSlcbiBcdFx0cmV0dXJuIDA7XG4gXHQvKlxuQEAgLTE1NSwxMSArMjIyLDI0IEBAIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gKChmbGFncyBcdTAwMjYgTFJVX1JFRlNfTUFTSykgXHUwMDNlXHUwMDNlIExSVV9SRUZTX1BHT0ZGKSArIDE7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4rXHRyZXR1cm4gbHJ1X2dldF9yZWZzX2ZsYWdzKFJFQURfT05DRSgqY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKSk7XG4rfVxuIFxuLVx0cmV0dXJuICgoZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbitzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCByZWZzKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4rXG4rXHRkbyB7XG4rXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncztcbitcdFx0bHJ1X3NldF9yZWZzX2ZsYWdzKFx1MDAyNm5ld19mbGFncywgcmVmcyk7XG4rXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfZ2VuKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0cmV0dXJuIGxydV9nZXRfZ2VuX2ZsYWdzKFJFQURfT05DRSgqY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKSk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2lzX2FjdGl2ZShjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBnZW4pXG5AQCAtMjcwLDcgKzM1MCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2FkZF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7XG4gXHRmbGFncyA9IChnZW4gKyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIE1JTl9OUl9HRU5TIGFib3V0IFBHX2FjdGl2ZSAqL1xuLVx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpO1xuK1x0c2V0X21hc2tfYml0cyhmb2xpb19mbGFncyhmb2xpbywgMCksIExSVV9HRU5fTUFTSyB8IEJJVChQR19hY3RpdmUpLCBmbGFncyk7XG4gXG4gXHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIC0xLCBnZW4pO1xuIFx0LyogZm9yIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZSgpICovXG5AQCAtMjk1LDcgKzM3NSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXG4gXHQvKiBmb3IgZm9saW9fbWlncmF0ZV9mbGFncygpICovXG4gXHRmbGFncyA9ICFyZWNsYWltaW5nIFx1MDAyNlx1MDAyNiBscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIGdlbikgPyBCSVQoUEdfYWN0aXZlKSA6IDA7XG4tXHRmbGFncyA9IHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX0dFTl9NQVNLLCBmbGFncyk7XG4rXHRmbGFncyA9IHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0ssIGZsYWdzKTtcbiBcdGdlbiA9ICgoZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbiBcbiBcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgZ2VuLCAtMSk7XG5AQCAtMzA0LDExICszODQsMTkgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcbisvKipcbisgKiBmb2xpb19taWdyYXRlX2xydV9yZWZzIC0gY29weSB0aGUgcmVmZXJlbmNlIHN0YXRlIHRvIGEgbmV3IGZvbGlvXG4rICogQG5ldzogdGhlIGRlc3RpbmF0aW9uIGZvbGlvXG4rICogQG9sZDogdGhlIHNvdXJjZSBmb2xpb1xuKyAqXG4rICogVHJhbnNmZXIgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBAbmV3IGR1cmluZyBtaWdyYXRpb246IHRoZSBNR0xSVVxuKyAqIHJlZnMgY291bnQsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkLCBvciBqdXN0IFBHX3JlZmVyZW5jZWQgZm9yIHRoZVxuKyAqIGFjdGl2ZS9pbmFjdGl2ZSBMUlUuXG4rICovXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgcmVmcyA9IFJFQURfT05DRShvbGQtXHUwMDNlZmxhZ3MuZikgXHUwMDI2IExSVV9SRUZTX01BU0s7XG4tXG4tXHRzZXRfbWFza19iaXRzKFx1MDAyNm5ldy1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCByZWZzKTtcbitcdEJVSUxEX0JVR19PTihMUlVfUkVGU19NQVNLIFx1MDAyNiBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuK1x0Zm9saW9fc2V0X2xydV9yZWZzKG5ldywgZm9saW9fbHJ1X3JlZnMob2xkKSk7XG4gfVxuICNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xuIFxuQEAgLTMzNyw5ICs0MjUsMTAgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxuIHtcbi1cbitcdGlmIChmb2xpb190ZXN0X3JlZmVyZW5jZWQob2xkKSlcbitcdFx0Zm9saW9fc2V0X3JlZmVyZW5jZWQobmV3KTtcbiB9XG4gI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbmluZGV4IDk0ZjljM2ZmNTQxNjAuLjliMjdjZjUzYmRiYzcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5AQCAtNDkyLDExICs0OTIsMTQgQEAgZW51bSBscnV2ZWNfZmxhZ3Mge1xuICAqIGZvbGlvLVx1MDAzZWZsYWdzLCBtYXNrZWQgYnkgTFJVX1JFRlNfTUFTSy5cbiAgKi9cbiAjZGVmaW5lIE1BWF9OUl9USUVSU1x0XHQ0VVxuKyNkZWZpbmUgTFJVX1RJRVJfTUlOXHRcdDBVXG4rI2RlZmluZSBMUlVfVElFUl9NQVhcdFx0KE1BWF9OUl9USUVSUyAtIDEpXG4gXG4gI2lmbmRlZiBfX0dFTkVSQVRJTkdfQk9VTkRTX0hcbiBcbiAjZGVmaW5lIExSVV9HRU5fTUFTS1x0XHQoKEJJVChMUlVfR0VOX1dJRFRIKSAtIDEpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGKVxuICNkZWZpbmUgTFJVX1JFRlNfTUFTS1x0XHQoKEJJVChMUlVfUkVGU19XSURUSCkgLSAxKSBcdTAwM2NcdTAwM2MgTFJVX1JFRlNfUEdPRkYpXG4rI2RlZmluZSBMUlVfUkVGU19NQVhcdFx0QklUKExSVV9SRUZTX1dJRFRIKVxuIFxuIC8qXG4gICogRm9yIGZvbGlvcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMsXG5kaWZmIC0tZ2l0IGEvbW0vZm9saW8uYyBiL21tL2ZvbGlvLmNcbmluZGV4IGMwMmRjZWE5YzAzYzIuLmZiODc0ZmU0OTJiMmIgMTAwNjQ0XG4tLS0gYS9tbS9mb2xpby5jXG4rKysgYi9tbS9mb2xpby5jXG5AQCAtMzUzLDI2ICszNTMsMjggQEAgc3RhdGljIHZvaWQgX19scnVfY2FjaGVfYWN0aXZhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiBcbiBzdGF0aWMgdm9pZCBscnVfZ2VuX2luY19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbitcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4rXHRpbnQgcmVmcztcbiBcbiBcdGlmIChmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXG4tXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpIHtcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuK1x0aWYgKCFmb2xpb19scnVfcmVmcyhmb2xpbykpIHtcbitcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0ZG8ge1xuLVx0XHRpZiAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX1JFRlNfTUFTSykgPT0gTFJVX1JFRlNfTUFTSykge1xuK1x0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XG4rXHRcdHJlZnMgPSBscnVfZ2V0X3JlZnNfZmxhZ3Mob2xkX2ZsYWdzKTtcbitcdFx0aWYgKHJlZnMgPT0gTFJVX1JFRlNfTUFYKSB7XG4gXHRcdFx0aWYgKCFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKVxuIFx0XHRcdFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuLVxuLVx0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgKyBCSVQoTFJVX1JFRlNfUEdPRkYpO1xuLVx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4rXHRcdGxydV9zZXRfcmVmc19mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIHJlZnMgKyAxKTtcbitcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4gfVxuIFxuIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuQEAgLTM4NCw3ICszODYsOCBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGlmIChnZW4gXHUwMDNjIDApXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuLVx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUyB8IEJJVChQR193b3JraW5nc2V0KSwgMCk7XG4rXHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuK1x0Zm9saW9fY2xlYXJfd29ya2luZ3NldChmb2xpbyk7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRzZXEgPSBSRUFEX09OQ0UoZm9saW9fbHJ1dmVjKGZvbGlvKS1cdTAwM2VscnVnZW4ubWluX3NlcVt0eXBlXSk7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCA4NTZhN2QwNzU4NmNjLi4wYTY1YWI4ZGYyN2E5IDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC0xNTI5LDI4ICsxNTI5LDEyIEBAIHZvaWQgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIGxydV9saXN0IGxydSxcbiBcdFx0XHRcdGludCB6aWQsIGxvbmcgbnJfcGFnZXMpXG4ge1xuIFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16O1xuLVx0dW5zaWduZWQgbG9uZyAqbHJ1X3NpemU7XG4tXHRsb25nIHNpemU7XG4gXG4gXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRteiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xuLVx0bHJ1X3NpemUgPSBcdTAwMjZtei1cdTAwM2VscnVfem9uZV9zaXplW3ppZF1bbHJ1XTtcbi1cbi1cdGlmIChucl9wYWdlcyBcdTAwM2MgMClcbi1cdFx0KmxydV9zaXplICs9IG5yX3BhZ2VzO1xuLVxuLVx0c2l6ZSA9ICpscnVfc2l6ZTtcbi1cdGlmIChXQVJOX09OQ0Uoc2l6ZSBcdTAwM2MgMCxcbi1cdFx0XCIlcyglcCwgJWQsICVsZCk6IGxydV9zaXplICVsZFxcblwiLFxuLVx0XHRfX2Z1bmNfXywgbHJ1dmVjLCBscnUsIG5yX3BhZ2VzLCBzaXplKSkge1xuLVx0XHRWTV9CVUdfT04oMSk7XG4tXHRcdCpscnVfc2l6ZSA9IDA7XG4tXHR9XG4tXG4tXHRpZiAobnJfcGFnZXMgXHUwMDNlIDApXG4tXHRcdCpscnVfc2l6ZSArPSBucl9wYWdlcztcbitcdG16LVx1MDAzZWxydV96b25lX3NpemVbemlkXVtscnVdICs9IG5yX3BhZ2VzO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmNcbmluZGV4IDE1YjQ1ODMyYmNmYTcuLmEzNjlkMGM5NWMzODYgMTAwNjQ0XG4tLS0gYS9tbS9taWdyYXRlLmNcbisrKyBiL21tL21pZ3JhdGUuY1xuQEAgLTc3Niw4ICs3NzYsOSBAQCB2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRpbnQgY3B1cGlkO1xuIFxuLVx0aWYgKGZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpXG4tXHRcdGZvbGlvX3NldF9yZWZlcmVuY2VkKG5ld2ZvbGlvKTtcbitcdC8qIENvcHkgdGhlIHJlZmVyZW5jZSBzdGF0ZSwgaW5jbHVkaW5nIFBHX3JlZmVyZW5jZWQgKi9cbitcdGZvbGlvX21pZ3JhdGVfbHJ1X3JlZnMobmV3Zm9saW8sIGZvbGlvKTtcbitcbiBcdGlmIChmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSlcbiBcdFx0Zm9saW9fbWFya191cHRvZGF0ZShuZXdmb2xpbyk7XG4gXHRpZiAoZm9saW9fdGVzdF9jbGVhcl9hY3RpdmUoZm9saW8pKSB7XG5AQCAtODA3LDcgKzgwOCw2IEBAIHZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0aWYgKGZvbGlvX3Rlc3RfaWRsZShmb2xpbykpXG4gXHRcdGZvbGlvX3NldF9pZGxlKG5ld2ZvbGlvKTtcbiBcbi1cdGZvbGlvX21pZ3JhdGVfcmVmcyhuZXdmb2xpbywgZm9saW8pO1xuIFx0LypcbiBcdCAqIENvcHkgTlVNQSBpbmZvcm1hdGlvbiB0byB0aGUgbmV3IHBhZ2UsIHRvIHByZXZlbnQgb3Zlci1lYWdlclxuIFx0ICogZnV0dXJlIG1pZ3JhdGlvbnMgb2YgdGhpcyBzYW1lIHBhZ2UuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggZmRkMTMyOTlhMDRhOS4uZTdkMzc5YzZlNzAzYSAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTg0MywxOSArODQzLDIyIEBAIHN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiBcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpIHtcbiBcdFx0LyogQWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuICovXG4gXHRcdGlmIChpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIHZtYV9mbGFncykpIHtcbi1cdFx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfd29ya2luZ3NldCkpO1xuK1x0XHRcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcbitcdFx0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0XHR9XG4gXG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcbitcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuIFx0LyogUHJvbW90ZSBvbiBzZWNvbmQgYWNjZXNzICovXG4tXHRpZiAoZm9saW9fbHJ1X3JlZnMoZm9saW8pIFx1MDAzZSAxKVxuLVx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfd29ya2luZ3NldCkpO1xuLVx0ZWxzZVxuK1x0aWYgKGZvbGlvX2xydV9yZWZzKGZvbGlvKSBcdTAwM2UgMSkge1xuK1x0XHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XG4rXHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4rXHR9IGVsc2Uge1xuIFx0XHRmb2xpb19tYXJrX2FjY2Vzc2VkKGZvbGlvKTtcbitcdH1cbiBcdHJldHVybiB0cnVlO1xuIH1cbiAjZWxzZVxuQEAgLTMxOTUsOCArMzE5OCw4IEBAIHN0cnVjdCBjdHJsX3BvcyB7XG4gXHRpbnQgZ2FpbjtcbiB9O1xuIFxuLXN0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXIsIGludCBnYWluLFxuLVx0XHRcdCAgc3RydWN0IGN0cmxfcG9zICpwb3MpXG4rc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllcl9taW4sXG4rXHRcdFx0ICBpbnQgdGllcl9tYXgsIGludCBnYWluLCBzdHJ1Y3QgY3RybF9wb3MgKnBvcylcbiB7XG4gXHRpbnQgaTtcbiBcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuQEAgLTMyMDUsNyArMzIwOCw3IEBAIHN0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXIsIGludCBnYWluLFxuIFx0cG9zLVx1MDAzZWdhaW4gPSBnYWluO1xuIFx0cG9zLVx1MDAzZXJlZmF1bHRlZCA9IHBvcy1cdTAwM2V0b3RhbCA9IDA7XG4gXG4tXHRmb3IgKGkgPSB0aWVyICUgTUFYX05SX1RJRVJTOyBpIFx1MDAzYz0gbWluKHRpZXIsIE1BWF9OUl9USUVSUyAtIDEpOyBpKyspIHtcbitcdGZvciAoaSA9IHRpZXJfbWluOyBpIFx1MDAzYz0gdGllcl9tYXg7IGkrKykge1xuIFx0XHRwb3MtXHUwMDNlcmVmYXVsdGVkICs9IGxydWdlbi1cdTAwM2VhdmdfcmVmYXVsdGVkW3R5cGVdW2ldICtcbiBcdFx0XHRcdCAgYXRvbWljX2xvbmdfcmVhZChcdTAwMjZscnVnZW4tXHUwMDNlcmVmYXVsdGVkW2hpc3RdW3R5cGVdW2ldKTtcbiBcdFx0cG9zLVx1MDAzZXRvdGFsICs9IGxydWdlbi1cdTAwM2VhdmdfdG90YWxbdHlwZV1baV0gK1xuQEAgLTMyNjYsMTEgKzMyNjksMTEgQEAgc3RhdGljIGJvb2wgcG9zaXRpdmVfY3RybF9lcnIoc3RydWN0IGN0cmxfcG9zICpzcCwgc3RydWN0IGN0cmxfcG9zICpwdilcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuIFxuIC8qIHByb21vdGUgcGFnZXMgYWNjZXNzZWQgdGhyb3VnaCBwYWdlIHRhYmxlcyAqL1xuLXN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuK3N0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgaW50ICp0eXBlLFxuK1x0XHRcdCAgICBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4tXG4tXHRWTV9XQVJOX09OX09OQ0UoZ2VuIFx1MDAzZT0gTUFYX05SX0dFTlMpO1xuK1x0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbitcdGludCBvbGRfZ2VuO1xuIFxuIFx0LypcbiBcdCAqIFNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUywgYW5kIGFjdGl2YXRlIGZpbGUtYmFja2VkXG5AQCAtMzI3OSwyMCArMzI4MiwyNSBAQCBzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYVxuIFx0ICovXG4gXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pIFx1MDAyNlx1MDAyNlxuIFx0ICAgICFpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIHZtYV9mbGFncykpIHtcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuK1x0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpO1xuIFx0XHRyZXR1cm4gLTE7XG4gXHR9XG4gXG4gXHRkbyB7XG4rXHRcdG9sZF9nZW4gPSBscnVfZ2V0X2dlbl9mbGFncyhvbGRfZmxhZ3MpO1xuK1x0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XG4rXG4gXHRcdC8qIGxydV9nZW5fZGVsX2ZvbGlvKCkgaGFzIGlzb2xhdGVkIHRoaXMgcGFnZT8gKi9cbi1cdFx0aWYgKCEob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spKVxuLVx0XHRcdHJldHVybiAtMTtcbitcdFx0aWYgKG9sZF9nZW4gXHUwMDNjIDApXG4rXHRcdFx0YnJlYWs7XG4gXG4tXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncyBcdTAwMjYgfihMUlVfR0VOX01BU0sgfCBMUlVfUkVGU19GTEFHUyk7XG4tXHRcdG5ld19mbGFncyB8PSAoKGdlbiArIDFVTCkgXHUwMDNjXHUwMDNjIExSVV9HRU5fUEdPRkYpIHwgQklUKFBHX3dvcmtpbmdzZXQpO1xuLVx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4rXHRcdGxydV9zZXRfZ2VuX2ZsYWdzKFx1MDAyNm5ld19mbGFncywgbmV3X2dlbik7XG4rXHRcdGxydV9zZXRfcmVmc19mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIDApO1xuK1x0XHRuZXdfZmxhZ3MgfD0gQklUKFBHX3dvcmtpbmdzZXQpO1xuK1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiBcbi1cdHJldHVybiAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuK1x0KnR5cGUgPSBmb2xpb19mbGFnc19pc19maWxlX2xydShcdTAwMjZvbGRfZmxhZ3MpO1xuK1x0cmV0dXJuIG9sZF9nZW47XG4gfVxuIFxuIC8qIHByb3RlY3QgcGFnZXMgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzICovXG5AQCAtMzMwMSwyMSArMzMwOSwyMCBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbiBcdGludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG4tXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuLVxuLVx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCEob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spLCBmb2xpbyk7XG4rXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuIFxuIFx0ZG8ge1xuLVx0XHRuZXdfZ2VuID0gKChvbGRfZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbitcdFx0bmV3X2dlbiA9IGxydV9nZXRfZ2VuX2ZsYWdzKG9sZF9mbGFncyk7XG4rXG4gXHRcdC8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqL1xuIFx0XHRpZiAobmV3X2dlbiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG5ld19nZW4gIT0gb2xkX2dlbilcbiBcdFx0XHRyZXR1cm4gbmV3X2dlbjtcbiBcbitcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuIFx0XHRuZXdfZ2VuID0gKG9sZF9nZW4gKyAxKSAlIE1BWF9OUl9HRU5TO1xuLVxuLVx0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgXHUwMDI2IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpO1xuLVx0XHRuZXdfZmxhZ3MgfD0gKG5ld19nZW4gKyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuLVx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4rXHRcdGxydV9zZXRfZ2VuX2ZsYWdzKFx1MDAyNm5ld19mbGFncywgbmV3X2dlbik7XG4rXHRcdGxydV9zZXRfcmVmc19mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIDApO1xuK1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiBcbiBcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XG4gXG5AQCAtMzMyMyw5ICszMzMwLDggQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbiB9XG4gXG4gc3RhdGljIHZvaWQgdXBkYXRlX2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IGZvbGlvICpmb2xpbyxcbi1cdFx0XHQgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4pXG4rXHRcdFx0ICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuLCBpbnQgdHlwZSlcbiB7XG4tXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbiBcdGludCB6b25lID0gZm9saW9fem9uZW51bShmb2xpbyk7XG4gXHRpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXG5AQCAtMzUxMiwyMiArMzUxOCwyNCBAQCBzdGF0aWMgYm9vbCBzdWl0YWJsZV90b19zY2FuKGludCB0b3RhbCwgaW50IHlvdW5nKVxuIH1cbiBcbiBzdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi1cdFx0c3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGJvb2wgZGlydHkpXG4rXHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBkaXJ0eSlcbiB7XG4tXHRpbnQgb2xkX2dlbjtcbitcdGludCBuZXdfZ2VuLCBvbGRfZ2VuLCB0eXBlO1xuIFxuIFx0aWYgKCFmb2xpbylcbiBcdFx0cmV0dXJuO1xuIFxuK1x0bmV3X2dlbiA9IGxydV9nZW5fZnJvbV9zZXEoUkVBRF9PTkNFKGxydXZlYy1cdTAwM2VscnVnZW4ubWF4X3NlcSkpO1xuK1xuIFx0aWYgKGRpcnR5IFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHQgICAgIShmb2xpb190ZXN0X2Fub24oZm9saW8pIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pIFx1MDAyNlx1MDAyNlxuIFx0ICAgICAgIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkpXG4gXHRcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuIFxuIFx0aWYgKHdhbGspIHtcbi1cdFx0b2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sIFx1MDAyNnZtYS1cdTAwM2VmbGFncyk7XG4rXHRcdG9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuLCBcdTAwMjZ0eXBlLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpO1xuIFx0XHRpZiAob2xkX2dlbiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG9sZF9nZW4gIT0gbmV3X2dlbilcbi1cdFx0XHR1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XG4rXHRcdFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4sIHR5cGUpO1xuIFx0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpKSB7XG4gXHRcdG9sZF9nZW4gPSBmb2xpb19scnVfZ2VuKGZvbGlvKTtcbiBcdFx0aWYgKG9sZF9nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXG5AQCAtMzU0OSw4ICszNTU3LDYgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cdTAwM2Vwcml2YXRlO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKHdhbGstXHUwMDNlbHJ1dmVjKTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQod2Fsay1cdTAwM2VscnV2ZWMpO1xuLVx0REVGSU5FX01BWF9TRVEod2Fsay1cdTAwM2VscnV2ZWMpO1xuLVx0aW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7XG4gXHR1bnNpZ25lZCBpbnQgbnI7XG4gXHRwbWRfdCBwbWR2YWw7XG4gXG5AQCAtMzYwMSw3ICszNjA3LDcgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChsYXN0ICE9IGZvbGlvKSB7XG4tXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCB3YWxrLVx1MDAzZWxydXZlYywgbGFzdCwgZGlydHkpO1xuIFxuIFx0XHRcdGxhc3QgPSBmb2xpbztcbiBcdFx0XHRkaXJ0eSA9IGZhbHNlO1xuQEAgLTM2MTQsNyArMzYyMCw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHR3YWxrLVx1MDAzZW1tX3N0YXRzW01NX0xFQUZfWU9VTkddICs9IG5yO1xuIFx0fVxuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIHdhbGstXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXHRsYXN0ID0gTlVMTDtcbiBcbiBcdGlmIChpIFx1MDAzYyBQVFJTX1BFUl9QVEUgXHUwMDI2XHUwMDI2IGdldF9uZXh0X3ZtYShQTURfTUFTSywgUEFHRV9TSVpFLCBhcmdzLCBcdTAwMjZzdGFydCwgXHUwMDI2ZW5kKSlcbkBAIC0zNjM3LDggKzM2NDMsNiBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXHUwMDNlcHJpdmF0ZTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVx1MDAzZWxydXZlYyk7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdERFRklORV9NQVhfU0VRKHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFKHB1ZF9sZWFmKCpwdWQpKTtcbiBcbkBAIC0zNjkyLDcgKzM2OTYsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0XHRcdGdvdG8gbmV4dDtcbiBcbiBcdFx0aWYgKGxhc3QgIT0gZm9saW8pIHtcbi1cdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC0zNzA2LDcgKzM3MTAsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0XHRpID0gaSBcdTAwM2UgTUlOX0xSVV9CQVRDSCA/IDAgOiBmaW5kX25leHRfYml0KGJpdG1hcCwgTUlOX0xSVV9CQVRDSCwgaSkgKyAxO1xuIFx0fSB3aGlsZSAoaSBcdTAwM2M9IE1JTl9MUlVfQkFUQ0gpO1xuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xuIFx0c3Bpbl91bmxvY2socHRsKTtcbkBAIC00MjcwLDggKzQyNzQsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gZm9saW9fcGdkYXQoZm9saW8pO1xuIFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xuIFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlO1xuLVx0dW5zaWduZWQgbG9uZyBtYXhfc2VxO1xuLVx0aW50IGdlbjtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQocHZtdy1cdTAwM2VwdGwpO1xuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSwgZm9saW8pO1xuQEAgLTQzMDgsOCArNDMxMCw2IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcbiBcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XG4gXHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpO1xuLVx0bWF4X3NlcSA9IFJFQURfT05DRSgobHJ1dmVjKS1cdTAwM2VscnVnZW4ubWF4X3NlcSk7XG4tXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xuIFx0bW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcbiBcbiBcdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XG5AQCAtNDM0MSw3ICs0MzQxLDcgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAobGFzdCAhPSBmb2xpbykge1xuLVx0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4rXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC00MzUzLDEzICs0MzUzLDE0IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdFx0eW91bmcgKz0gbnI7XG4gXHR9XG4gXG4tXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xuIFxuIFx0LyogZmVlZGJhY2sgZnJvbSBybWFwIHdhbGtlcnMgdG8gcGFnZSB0YWJsZSB3YWxrZXJzICovXG4gXHRpZiAobW1fc3RhdGUgXHUwMDI2XHUwMDI2IHN1aXRhYmxlX3RvX3NjYW4oaSwgeW91bmcpKVxuLVx0XHR1cGRhdGVfYmxvb21fZmlsdGVyKG1tX3N0YXRlLCBtYXhfc2VxLCBwdm13LVx1MDAzZXBtZCk7XG4rXHRcdHVwZGF0ZV9ibG9vbV9maWx0ZXIobW1fc3RhdGUsIFJFQURfT05DRShscnV2ZWMtXHUwMDNlbHJ1Z2VuLm1heF9zZXEpLFxuK1x0XHRcdFx0ICAgIHB2bXctXHUwMDNlcG1kKTtcbiBcbiBcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiBcbkBAIC00NzE2LDcgKzQ3MTcsNyBAQCBzdGF0aWMgYm9vbCBpc29sYXRlX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYVxuIFxuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXG4gXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpXG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgMCk7XG4rXHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4gXG4gXHRzdWNjZXNzID0gbHJ1X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7XG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIXN1Y2Nlc3MsIGZvbGlvKTtcbkBAIC00ODA5LDkgKzQ4MTAsOSBAQCBzdGF0aWMgaW50IGdldF90aWVyX2lkeChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKVxuIFx0ICogVGhpcyB2YWx1ZSBpcyBjaG9zZW4gYmVjYXVzZSBhbnkgb3RoZXIgdGllciB3b3VsZCBoYXZlIGF0IGxlYXN0IHR3aWNlXG4gXHQgKiBhcyBtYW55IHJlZmF1bHRzIGFzIHRoZSBmaXJzdCB0aWVyLlxuIFx0ICovXG4tXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgMCwgMiwgXHUwMDI2c3ApO1xuLVx0Zm9yICh0aWVyID0gMTsgdGllciBcdTAwM2MgTUFYX05SX1RJRVJTOyB0aWVyKyspIHtcbi1cdFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIDMsIFx1MDAyNnB2KTtcbitcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01JTiwgMiwgXHUwMDI2c3ApO1xuK1x0Zm9yICh0aWVyID0gTFJVX1RJRVJfTUlOICsgMTsgdGllciBcdTAwM2M9IExSVV9USUVSX01BWDsgdGllcisrKSB7XG4rXHRcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0aWVyLCB0aWVyLCAzLCBcdTAwMjZwdik7XG4gXHRcdGlmICghcG9zaXRpdmVfY3RybF9lcnIoXHUwMDI2c3AsIFx1MDAyNnB2KSlcbiBcdFx0XHRicmVhaztcbiBcdH1cbkBAIC00ODMyLDggKzQ4MzMsMTAgQEAgc3RhdGljIGludCBnZXRfdHlwZV90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXG4gXHQgKiBDb21wYXJlIHRoZSBzdW0gb2YgYWxsIHRpZXJzIG9mIGFub24gd2l0aCB0aGF0IG9mIGZpbGUgdG8gZGV0ZXJtaW5lXG4gXHQgKiB3aGljaCB0eXBlIHRvIHNjYW4uXG4gXHQgKi9cbi1cdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIE1BWF9OUl9USUVSUywgc3dhcHBpbmVzcywgXHUwMDI2c3ApO1xuLVx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTUFYX05SX1RJRVJTLCBNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3MsIFx1MDAyNnB2KTtcbitcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUFYLFxuK1x0XHQgICAgICBzd2FwcGluZXNzLCBcdTAwMjZzcCk7XG4rXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCxcbitcdFx0ICAgICAgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCBcdTAwMjZwdik7XG4gXG4gXHRyZXR1cm4gcG9zaXRpdmVfY3RybF9lcnIoXHUwMDI2c3AsIFx1MDAyNnB2KTtcbiB9XG5AQCAtNDkzMiw4ICs0OTM1LDEwIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHR9XG4gXG4gXHRcdC8qIGRvbid0IGFkZCByZWplY3RlZCBmb2xpb3MgdG8gdGhlIG9sZGVzdCBnZW5lcmF0aW9uICovXG4tXHRcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSlcbi1cdFx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfYWN0aXZlKSk7XG4rXHRcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSkge1xuK1x0XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4rXHRcdFx0Zm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdG1vdmVfZm9saW9zX3RvX2xydShcdTAwMjZsaXN0KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQwOjQ5Ljk1OTIxNTg2MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzMTIxNDA4MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIHNlZSBpZiBpdCB3YXJyYW50cyBzb21lIGZ1enppbmcgZWZmb3J0cy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGZvY3VzZWQgb24gaWRlbnRpZnlpbmcgZnVuY3Rpb25hbCBjaGFuZ2VzLCBmaWd1cmluZyBvdXQgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLCBhbmQgcGlucG9pbnRpbmcga2V5IHN5bWJvbHMgdGhhdCBtaWdodCBiZSBpbnRlcmVzdGluZyB0YXJnZXRzLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCBpdCBsb29rcyBsaWtlIHRoaXMgcGF0Y2ggdG91Y2hlcyBhIGZhaXIgbnVtYmVyIG9mIGZpbGVzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNvbnRyb2wuIFRoZSBwcmltYXJ5IGZpbGVzIHRoYXQgc3RhbmQgb3V0IGFyZSBgbWVtY29udHJvbC5oYCwgYG1tX2lubGluZS5oYCwgYG1tem9uZS5oYCwgYGZvbGlvLmNgLCBgbWVtY29udHJvbC5jYCwgYG1pZ3JhdGUuY2AgYW5kIGB2bXNjYW4uY2AuXG5cblNwZWNpZmljYWxseSwgSSBzZWUgYSBjaGFuZ2UgaW4gYG1lbWNvbnRyb2wuaGAgd2hlcmUgYGxydV96b25lX3NpemVgIGluIHRoZSBgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGVgIGlzIGNoYW5nZWQgZnJvbSBgdW5zaWduZWQgbG9uZ2AgdG8gYGxvbmdgLiBUaGVyZSdzIGFsc28gYSBgV0FSTl9PTl9PTkNFYCBjaGVjayB0aGF0IG1pZ2h0IGJlIGludGVyZXN0aW5nLiBUaGUgdXBkYXRlcyBpbiBgbW1faW5saW5lLmhgIGxvb2sgbGlrZSByZWZhY3RvcmluZywgcmVwbGFjaW5nIGRpcmVjdCBzdHJ1Y3QgZmllbGQgYWNjZXNzIHdpdGggYGZvbGlvX2ZsYWdzKGZvbGlvLCAwKWAuIFdlIGFsc28gc2VlIHVwZGF0ZXMgdG8gdGhpbmdzIGxpa2UgTFJVIHRpZXJzIGFuZCByZWZlcmVuY2VzIChgTFJVX1RJRVJfTUlOYCwgYExSVV9SRUZTX01BWGApIGRlZmluZWQgaW4gYG1tem9uZS5oYC4gYGZvbGlvLmNgIGhhcyBzb21lIGNoYW5nZXMgcmVsYXRlZCB0byBMUlUgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgYG1lbWNvbnRyb2wuY2AgaGFzIGEgc2ltcGxpZmljYXRpb24gb2YgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYC4gV2Ugc2VlIHRoYXQgYG1pZ3JhdGUuY2AgYWxzbyBjYWxscyBgZm9saW9fbWlncmF0ZV9scnVfcmVmc2AuIGB2bXNjYW4uY2AgYXBwZWFycyB0byBiZSBnZXR0aW5nIHRoZSBtb3N0IGF0dGVudGlvbiBpbiB0ZXJtcyBvZiBuZXcgZnVuY3Rpb25zLCB3aXRoIGEgbG90IG9mIExSVS1yZWxhdGVkIGZ1bmN0aW9ucy5cblxuTm93LCBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlci4gSSdsbCBwcm9iYWJseSBmaXJlIHVwIGBncmVwcGVyYCBvciBhIHNpbWlsYXIgdG9vbCB0byBkZXRlcm1pbmUgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzIGFuZCB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucy4gVGhhdCB3aWxsIGhlbHAgbWUgemVybyBpbiBvbiB0aGUgcGFydHMgb2YgdGhlIGNvZGUgbW9zdCBsaWtlbHkgdG8gYmUgc3VzY2VwdGlibGUgdG8gZnV6emluZy4gSSdsbCBuZWVkIHRvIGZpbmQgZnVuY3Rpb25zIHRoYXQgYXJlIGV4cG9zZWQgb3IgYWNjZXNzaWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2MjIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0MDo1NC4yNzEzNjAyNzlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM5Njc4OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIExSVV9HRU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTM5Mz1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXFxuLS1cXG5tbS9LY29uZmlnLTE0MDMtIyBtdWx0aS1nZW4gTFJVIHtcXG5tbS9LY29uZmlnOjE0MDQ6Y29uZmlnIExSVV9HRU5cXG5tbS9LY29uZmlnLTE0MDUtXFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQxMi1cXG5tbS9LY29uZmlnOjE0MTM6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbm1tL0tjb25maWctMTQxNC1cXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQxOC1cXG5tbS9LY29uZmlnOjE0MTk6Y29uZmlnIExSVV9HRU5fU1RBVFNcXG5tbS9LY29uZmlnLTE0MjAtXFx0Ym9vbCBcXFwiRnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDI3LVxcbm1tL0tjb25maWc6MTQyODpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG5tbS9LY29uZmlnLTE0MjktXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0MDo1NC4zMjUzMzM1MjVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTI1NDg3MTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIHBhcnRpY3VsYXIgZmVhdHVyZSBpcyBiZWluZyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYXJvdW5kIGxpbmUgMTQwMC4gVGhhdCdzIHVzdWFsbHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBtZW1vcnkgbWFuYWdlbWVudC1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zLCBhdCBsZWFzdCBiYXNlZCBvbiBteSBwYXN0IGV4cGVyaWVuY2UuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgcmVsZXZhbnQgYGNvbmZpZ2Agb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBtYXliZSBldmVuIHNvbWUgaGVscCB0ZXh0IHRoYXQgb3V0bGluZXMgdGhlIHB1cnBvc2UgYW5kIGltcGxpY2F0aW9ucyBvZiB0aGUgZmVhdHVyZSBJJ20gaW50ZXJlc3RlZCBpbi4gSSdtIGdvaW5nIHRvIHNjYW4gdGhhdCBzZWN0aW9uIGZvciBjbHVlcywgbG9va2luZyBmb3Iga2V5d29yZHMgdGhhdCBhbGlnbiB3aXRoIHRoZSBzcGVjaWZpYyBhcmVhIEknbSB0cnlpbmcgdG8gdW5kZXJzdGFuZC4gRnJvbSB0aGVyZSwgSSdsbCB0cmFjZSB0aHJvdWdoIGFueSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMgdGhlIG9wdGlvbnMgbWlnaHQgaGF2ZSB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBjb25maWd1cmF0aW9uIHN5c3RlbSwgdXNpbmcgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgS2NvbmZpZyBsYW5ndWFnZSB0byBpbmZlciB0aGUgbG9naWMuIE15IGdvYWwgaXMgdG8gcXVpY2tseSBidWlsZCBhIG1lbnRhbCBtYXAgb2Ygd2hlcmUgdGhpcyBzZXR0aW5nIGZpdHMgaW50byB0aGUgYnJvYWRlciBtZW1vcnkgbWFuYWdlbWVudCBmcmFtZXdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODc1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDA6NTYuODUwODI0NjU2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1NDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQwMDpcXHRcXHQgIHB1cnBvc2VzLiAgSXQgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIHVzZXJmYXVsdGZkIHdyaXRlIHByb3RlY3Rpb24gb25cXG4xNDAxOlxcdFxcdCAgZmlsZS1iYWNrZWQgbWVtb3J5IHR5cGVzIGxpa2Ugc2htZW0gYW5kIGh1Z2V0bGJmcy5cXG4xNDAyOlxcdFxcbjE0MDM6XFx0IyBtdWx0aS1nZW4gTFJVIHtcXG4xNDA0OlxcdGNvbmZpZyBMUlVfR0VOXFxuMTQwNTpcXHRcXHRib29sIFxcXCJNdWx0aS1HZW4gTFJVXFxcIlxcbjE0MDY6XFx0XFx0ZGVwZW5kcyBvbiBNTVVcXG4xNDA3OlxcdFxcdCMgbWFrZSBzdXJlIGZvbGlvLVxcdTAwM2VmbGFncyBoYXMgZW5vdWdoIHNwYXJlIGJpdHNcXG4xNDA4OlxcdFxcdGRlcGVuZHMgb24gNjRCSVQgfHwgIVNQQVJTRU1FTSB8fCBTUEFSU0VNRU1fVk1FTU1BUFxcbjE0MDk6XFx0XFx0aGVscFxcbjE0MTA6XFx0XFx0ICBBIGhpZ2ggcGVyZm9ybWFuY2UgTFJVIGltcGxlbWVudGF0aW9uIHRvIG92ZXJjb21taXQgbWVtb3J5LiBTZWVcXG4xNDExOlxcdFxcdCAgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0IGZvciBkZXRhaWxzLlxcbjE0MTI6XFx0XFxuMTQxMzpcXHRjb25maWcgTFJVX0dFTl9FTkFCTEVEXFxuMTQxNDpcXHRcXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG4xNDE1OlxcdFxcdGRlcGVuZHMgb24gTFJVX0dFTlxcbjE0MTY6XFx0XFx0aGVscFxcbjE0MTc6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBtdWx0aS1nZW4gTFJVIGJ5IGRlZmF1bHQuXFxuMTQxODpcXHRcXG4xNDE5OlxcdGNvbmZpZyBMUlVfR0VOX1NUQVRTXFxuMTQyMDpcXHRcXHRib29sIFxcXCJGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcXFwiXFxuMTQyMTpcXHRcXHRkZXBlbmRzIG9uIExSVV9HRU5cXG4xNDIyOlxcdFxcdGhlbHBcXG4xNDIzOlxcdFxcdCAgRG8gbm90IGVuYWJsZSB0aGlzIG9wdGlvbiB1bmxlc3MgeW91IHBsYW4gdG8gbG9vayBhdCBoaXN0b3JpY2FsIHN0YXRzXFxuMTQyNDpcXHRcXHQgIGZyb20gZXZpY3RlZCBnZW5lcmF0aW9ucyBmb3IgZGVidWdnaW5nIHB1cnBvc2UuXFxuMTQyNTpcXHRcXG4xNDI2OlxcdFxcdCAgVGhpcyBvcHRpb24gaGFzIGEgcGVyLW1lbWNnIGFuZCBwZXItbm9kZSBtZW1vcnkgb3ZlcmhlYWQuXFxuMTQyNzpcXHRcXG4xNDI4OlxcdGNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxcbjE0Mjk6XFx0XFx0ZGVmX2Jvb2wgeVxcbjE0MzA6XFx0XFx0ZGVwZW5kcyBvbiBMUlVfR0VOIFxcdTAwMjZcXHUwMDI2IEFSQ0hfSEFTX0hXX1BURV9ZT1VOR1xcbjE0MzE6XFx0IyB9XFxuMTQzMjpcXHRcXG4xNDMzOlxcdGNvbmZpZyBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DS1xcbjE0MzQ6XFx0ICAgICAgIGRlZl9ib29sIG5cXG4xNDM1OlxcdFxcbjE0MzY6XFx0Y29uZmlnIFBFUl9WTUFfTE9DS1xcbjE0Mzc6XFx0XFx0ZGVmX2Jvb2wgeVxcbjE0Mzg6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DSyBcXHUwMDI2XFx1MDAyNiBNTVUgXFx1MDAyNlxcdTAwMjYgU01QXFxuMTQzOTpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQwOjU2Ljg1MDkzMjM2NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwOTIxMDg3MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIE1lbW9yeSBNYW5hZ2VtZW50IGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IHRoZXNlIGBtZW1fY2dyb3VwYCBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgIGFuZCBgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZWAuIFRoZXkncmUgcmlnaHQgdGhlcmUgaW4gYG1tL21lbWNvbnRyb2wuY2AuIFNpbmNlIHRoZXkgYXJlIHJlbGF0ZWQgdG8gY2dyb3VwcyBhbmQgbWVtb3J5LCBJIHNob3VsZCByZWFsbHkgY2lyY2xlIGJhY2sgYW5kIG1ha2Ugc3VyZSB0byBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyB0aGF0IGNvbnRyb2wgTUVNQ0cgZnVuY3Rpb25hbGl0eS4gSXQncyB0b28gZWFzeSB0byBtaXNzIHNvbWV0aGluZyBsaWtlIGEgZGVwZW5kZW5jeSBvciBhIGNvbmZpZ3VyYXRpb24gZmxhZyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IGhlcmUuIExldCdzIG1ha2Ugc3VyZSB3ZSBhcmVuJ3Qgb3Zlcmxvb2tpbmcgYW55IGNydWNpYWwgc2V0dGluZ3MgYmVmb3JlIGdvaW5nIGZ1cnRoZXIuIFRoaXMgaXMgYSBjcml0aWNhbCBhcmVhLCBhbmQgYSBkZWVwIGRpdmUgY2FuIGJlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gcm9idXN0IG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBhIHN1YnRsZSBidWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzM0LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0MDo1OC45NDMwNDU1NTlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE4NTkxMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA3NT1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDg0LVxcbmluaXQvS2NvbmZpZzoxMDg1OmNvbmZpZyBNRU1DR1xcbmluaXQvS2NvbmZpZy0xMDg2LVxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTMtXFxuaW5pdC9LY29uZmlnOjEwOTQ6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG5pbml0L0tjb25maWctMTA5NS1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTEwMC1cXG5pbml0L0tjb25maWc6MTEwMTpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG5pbml0L0tjb25maWctMTEwMi1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTEwNy1cXG5pbml0L0tjb25maWc6MTEwODpjb25maWcgTUVNQ0dfVjFcXG5pbml0L0tjb25maWctMTEwOS1cXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0MDo1OC45OTQ5MTA2MTVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjAyNzk3NzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBtbS9taWdyYXRlLmNgIENvbmZpZ3VyYXRpb25zKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgZGV0YWlscy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBtaWdyYXRpb24gY29uZmlndXJhdGlvbnMgd2l0aGluIGBtbS9taWdyYXRlLmNgLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgcGFyYW1ldGVycyBhbmQgZmxhZ3MgdGhhdCBnb3Zlcm4gaG93IHBhZ2VzIGFyZSBtb3ZlZCBiZXR3ZWVuIHpvbmVzIGFuZCBub2RlcywgYW5kIHRoZSB2YXJpb3VzIHN0cmF0ZWdpZXMgZW1wbG95ZWQuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gaXMgb3B0aW1hbCBmb3IgdGhlIHdvcmtsb2FkIGFuZCBoYXJkd2FyZSBJJ20gZGVhbGluZyB3aXRoLiBJJ20gZ29pbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaGV1cmlzdGljcyBhbmQgdGhyZXNob2xkcyByZWxhdGVkIHRvIE5VTUEgYmFsYW5jaW5nLCB6b25lIHJlY2xhaW0sIGFuZCBhbnkgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIHRoZSBwYWdlIGFsbG9jYXRvci4gSSdsbCBwcm9iYWJseSBzdGFydCBieSByZXZpZXdpbmcgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgdGhhdCBzZXQgdGhlc2UgcGFyYW1ldGVycyBhbmQgdGhlbiB0cmFjZSB0aGVpciB1c2FnZS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSB0cmFkZS1vZmZzIGJldHdlZW4gcGVyZm9ybWFuY2UgYW5kIG1lbW9yeSB1dGlsaXphdGlvbiB1bmRlciBkaWZmZXJlbnQgbWlncmF0aW9uIHNjZW5hcmlvcy4gSSBhbHNvIHdhbnQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvYnZpb3VzIGxvY2sgY29udGVudGlvbiBpc3N1ZXMgb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB3aXRoaW4gdGhlIG1pZ3JhdGlvbiBjb2RlIHBhdGhzLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyMTgsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0MTowMS41OTc3MjQ0MzFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MTM3MzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1JR1JBVElPTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NTgyPWNvbmZpZyBNRU1PUllfSE9UUkVNT1ZFXFxubW0vS2NvbmZpZy01ODMtXFx0Ym9vbCBcXFwiQWxsb3cgZm9yIG1lbW9yeSBob3QgcmVtb3ZlXFxcIlxcbm1tL0tjb25maWc6NTg0OlxcdHNlbGVjdCBNSUdSQVRJT05cXG5tbS9LY29uZmlnLTU4NS1cXG4tLVxcbm1tL0tjb25maWc9NjI1PWNvbmZpZyBCQUxMT09OXFxuLS1cXG5tbS9LY29uZmlnLTYyOS0jIHN1cHBvcnQgZm9yIG1lbW9yeSBiYWxsb29uIHBhZ2UgbWlncmF0aW9uXFxubW0vS2NvbmZpZzo2MzA6Y29uZmlnIEJBTExPT05fTUlHUkFUSU9OXFxubW0vS2NvbmZpZy02MzEtXFx0Ym9vbCBcXFwiQWxsb3cgZm9yIGJhbGxvb24gbWVtb3J5IG1pZ3JhdGlvblxcXCJcXG5tbS9LY29uZmlnLTYzMi1cXHRkZWZhdWx0IHlcXG5tbS9LY29uZmlnOjYzMzpcXHRkZXBlbmRzIG9uIE1JR1JBVElPTiBcXHUwMDI2XFx1MDAyNiBCQUxMT09OXFxubW0vS2NvbmZpZy02MzQtXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZz02NDI9Y29uZmlnIENPTVBBQ1RJT05cXG4tLVxcbm1tL0tjb25maWctNjQ0LVxcdGRlZmF1bHQgeVxcbm1tL0tjb25maWc6NjQ1OlxcdHNlbGVjdCBNSUdSQVRJT05cXG5tbS9LY29uZmlnLTY0Ni1cXHRkZXBlbmRzIG9uIE1NVVxcbi0tXFxubW0vS2NvbmZpZz02NjU9Y29uZmlnIFBBR0VfUkVQT1JUSU5HXFxuLS1cXG5tbS9LY29uZmlnLTY3Mi1cXG5tbS9LY29uZmlnOjY3Mzpjb25maWcgTlVNQV9NSUdSQVRJT05cXG5tbS9LY29uZmlnLTY3NC1cXHRib29sIFxcXCJOVU1BIHBhZ2UgbWlncmF0aW9uXFxcIlxcbi0tXFxubW0vS2NvbmZpZy02NzYtXFx0ZGVwZW5kcyBvbiBOVU1BIFxcdTAwMjZcXHUwMDI2IE1NVVxcbm1tL0tjb25maWc6Njc3OlxcdHNlbGVjdCBNSUdSQVRJT05cXG5tbS9LY29uZmlnLTY3OC1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnLTY4My1cXG5tbS9LY29uZmlnOjY4NDpjb25maWcgTUlHUkFUSU9OXFxubW0vS2NvbmZpZy02ODUtXFx0Ym9vbFxcbi0tXFxubW0vS2NvbmZpZy02ODctXFxubW0vS2NvbmZpZzo2ODg6Y29uZmlnIERFVklDRV9NSUdSQVRJT05cXG5tbS9LY29uZmlnOjY4OTpcXHRkZWZfYm9vbCBNSUdSQVRJT04gXFx1MDAyNlxcdTAwMjYgWk9ORV9ERVZJQ0VcXG5tbS9LY29uZmlnLTY5MC1cXG5tbS9LY29uZmlnOjY5MTpjb25maWcgQVJDSF9FTkFCTEVfSFVHRVBBR0VfTUlHUkFUSU9OXFxubW0vS2NvbmZpZy02OTItXFx0Ym9vbFxcbi0tXFxubW0vS2NvbmZpZz03NjU9Y29uZmlnIE1FTU9SWV9GQUlMVVJFXFxuLS1cXG5tbS9LY29uZmlnLTc2OS1cXHRzZWxlY3QgSU5URVJWQUxfVFJFRVxcbm1tL0tjb25maWc6NzcwOlxcdHNlbGVjdCBNSUdSQVRJT05cXG5tbS9LY29uZmlnLTc3MS1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTEwNTY9Y29uZmlnIENNQVxcbi0tXFxubW0vS2NvbmZpZy0xMDU4LVxcdGRlcGVuZHMgb24gTU1VXFxubW0vS2NvbmZpZzoxMDU5OlxcdHNlbGVjdCBNSUdSQVRJT05cXG5tbS9LY29uZmlnLTEwNjAtXFx0c2VsZWN0IE1FTU9SWV9JU09MQVRJT05cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDE6MDEuNjQ2ODcwMDM3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5ODgxMDE1NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgTXVsdGktR2VuIExSVSBTdWJzeXN0ZW06IEEgRGVlcCBEaXZlKipcblxuT2theSwgc28gTFJVX0dFTiBpcyB0aGUgTXVsdGktR2VuIExSVSBzdWJzeXN0ZW0g4oCTIHRoYXTigJlzIHRoZSB0aGluZyBpbiBMaW51eCB0aGF0IGRlYWxzIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBpbiBgbW0vdm1zY2FuLmNgLCBgbW0vZm9saW8uY2AsIGBpbmNsdWRlL2xpbnV4L21tX2lubGluZS5oYCwgYGluY2x1ZGUvbGludXgvbW16b25lLmhgLCBhbmQgYG1tL21lbWNvbnRyb2wuY2AuICBUaGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgZnVuY3Rpb25hbCBjaGFuZ2Ugc2lnbmlmaWNhbnQgZW5vdWdoIHRvIHdhcnJhbnQgZnV6emluZz9cblxuTGV0J3MgYnJlYWsgZG93biB0aGVzZSBjaGFuZ2VzIHRvIHNlZSBpZiB0aGV5IGFyZSB3b3J0aCB0aGUgZnV6emluZyBlZmZvcnQuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGlzIHJlZmFjdG9yaW5nIGFuZCBmaXhpbmcgaG93IHRoZSBtdWx0aS1nZW4gTFJVIHJlZmVyZW5jZSBiaXQgbWFuaXB1bGF0aW9uLCBnZW5lcmF0aW9uIHRyYWNraW5nLCBhbmQgdGllciBjYWxjdWxhdGlvbnMgYXJlIGRvbmUuIFNwZWNpZmljYWxseSwgdGhpcyB0b3VjaGVzIGNvZGUgcmVsYXRlZCB0byBgcmVhZF9jdHJsX3Bvc2AsIGBmb2xpb191cGRhdGVfZ2VuYCwgYGZvbGlvX2luY19nZW5gLCBgd2Fsa191cGRhdGVfZm9saW9gLCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAsIGBmb2xpb19taWdyYXRlX2ZsYWdzYCwgYW5kIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAuICBUaGVzZSBhcmUgY29yZSBmdW5jdGlvbnMgdGhhdCBJLCBhcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhLCByZWNvZ25pemUgYXMgYmVpbmcgYXQgdGhlIGhlYXJ0IG9mIG1lbW9yeSByZWNsYWltL3BhZ2UgYWdpbmcvbWlncmF0aW9uIGxvZ2ljIGluIE1HTFJVIChNdWx0aS1HZW4gTFJVKSwgYW5kIG1lbWNnIExSVSBhY2NvdW50aW5nLlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBkaXJlY3RseSBtb2RpZmllcyBjcml0aWNhbCBsb2dpYyBmb3IgcGFnZSByZWNsYW1hdGlvbiwgZ2VuZXJhdGlvbiBhZHZhbmNlbWVudCwgdGllciBjbGFzc2lmaWNhdGlvbiwgZm9saW8gZmxhZyBiaXQgY29tcGFyZS1hbmQtc3dhcCBsb29wcywgYW5kIG1lbWNnIExSVSB6b25lIHNpemUgY2FsY3VsYXRpb24uIFRoaXMgaXMgY29yZSBrZXJuZWwgbG9naWMgdGhhdCdzIGhpdCBkdXJpbmcgKnN0YW5kYXJkKiBrZXJuZWwgZXhlY3V0aW9uIOKAkyBtZW1vcnkgYWxsb2NhdGlvbiwgcmVjbGFtYXRpb24sIHBhZ2luZywgbWVtb3J5IGNncm91cHMsIGFuZCBtaWdyYXRpb24sIGFsbCBvZiB3aGljaCBhcmUgY29tbW9uIG9wZXJhdGlvbnMuICBTbyB5ZXMsIGFic29sdXRlbHksIHRoaXMgaXMgKipkZWZpbml0ZWx5Kiogd29ydGggZnV6emluZyFcblxuTm93LCBmb3IgdGhlIG5leHQgcGhhc2U6IExldCdzIGZvY3VzIG91ciBlZmZvcnRzLiAgVG8gZGV0ZXJtaW5lIHRoZSBtb3N0IGltcGFjdGZ1bCBzeW1ib2xzIHRvIHRhcmdldCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb25zIHdlcmUgbW9kaWZpZWQgb3IsIG1vcmUgaW1wb3J0YW50bHksIGFyZSBnbG9iYWwgZW50cnlwb2ludHMgZm9yIHRoaXMgbG9naWMuIEkgbmVlZCB0byBzZWFyY2ggdGhyb3VnaCBgbW0vdm1zY2FuLmNgLCBgbW0vZm9saW8uY2AsIGBtbS9tZW1jb250cm9sLmNgLCBhbmQgYG1tL21pZ3JhdGUuY2AgZm9yIGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyDigJMgb3IgYW55IGZ1bmN0aW9ucyB0aGF0IGNhbGwgZGlyZWN0bHkgaW50byB0aGUgbW9kaWZpZWQgY29kZS5cblxuTGV0IG1lIHRha2UgYSBsb29rIGF0IGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBpbiBgbW0vdm1zY2FuLmNgLiBJcyB0aGF0IGEgZ2xvYmFsIHN5bWJvbD8gTGV0J3MgY2hlY2sgaXRzIGRlZmluaXRpb24gYW5kIGRlY2xhcmF0aW9uIHRvIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDkzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQxOjA2LjYzNDk3NDc4NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIzOTEwMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHJ1X2dlbl9sb29rX2Fyb3VuZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcm1hcC5jPTkxOD1zdGF0aWMgYm9vbCBmb2xpb19yZWZlcmVuY2VkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vcm1hcC5jLTk4Mi1cXHRcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkgXFx1MDAyNlxcdTAwMjYgcHZtdy5wdGUpIHtcXG5tbS9ybWFwLmM6OTgzOlxcdFxcdFxcdGlmIChscnVfZ2VuX2xvb2tfYXJvdW5kKFxcdTAwMjZwdm13LCBucikpXFxubW0vcm1hcC5jLTk4NC1cXHRcXHRcXHRcXHRyZWZlcmVuY2VkKys7XFxuLS1cXG5tbS92bXNjYW4uYz0yNzkxPXN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIHNlcV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuLS1cXG5tbS92bXNjYW4uYy0yODIwLSAqIHdhbGtfcG1kX3JhbmdlKCk7IHRoZSBldmljdGlvbiBhbHNvIHJlcG9ydCB0aGVtIHdoZW4gd2Fsa2luZyB0aGUgcm1hcFxcbm1tL3Ztc2Nhbi5jOjI4MjE6ICogaW4gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLlxcbm1tL3Ztc2Nhbi5jLTI4MjItICpcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQwNzQ9c3RhdGljIGJvb2wgdHJ5X3RvX2luY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXFxuLS1cXG5tbS92bXNjYW4uYy00MDkzLVxcdCAqIElmIHRoZSBoYXJkd2FyZSBkb2Vzbid0IGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBhY2Nlc3NlZCBiaXQsIGZhbGxiYWNrXFxubW0vdm1zY2FuLmM6NDA5NDpcXHQgKiB0byBscnVfZ2VuX2xvb2tfYXJvdW5kKCksIHdoaWNoIG9ubHkgY2xlYXJzIHRoZSBhY2Nlc3NlZCBiaXQgaW4gYVxcbm1tL3Ztc2Nhbi5jLTQwOTUtXFx0ICogaGFuZGZ1bCBvZiBQVEVzLiBTcHJlYWRpbmcgdGhlIHdvcmsgb3V0IG92ZXIgYSBwZXJpb2Qgb2YgdGltZSB1c3VhbGx5XFxuLS1cXG5tbS92bXNjYW4uYz00MjEzPXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy00MjU5LSAqL1xcbm1tL3Ztc2Nhbi5jOjQyNjA6Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxcbm1tL3Ztc2Nhbi5jLTQyNjEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0MTowNi42ODczNzI1MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDkzNzAxODYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydCwgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgYW5kIE1pZ3JhdGlvbiBGbGFncyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBscnVfZ2VuX2xvb2tfYXJvdW5kYC4gSXQncyBhIG5vbi1zdGF0aWMgZnVuY3Rpb24sIG1lYW5pbmcgaXQncyBtZWFudCB0byBiZSB1c2VkIGV4dGVybmFsbHksIGFuZCBpdCdzIGRlY2xhcmVkIGluIGBpbmNsdWRlL2xpbnV4L21tX2lubGluZS5oYCBhbmQvb3IgYG1tL2ludGVybmFsLmhgLCBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGl0J3MgY2FsbGVkIGZyb20gYG1tL3JtYXAuY2AuIFRoYXQgcGxhY2VzIGl0IGZpcm1seSB3aXRoaW4gdGhlIHJlYWxtIG9mIHRoZSBwYWdlIHJlcGxhY2VtZW50IGFsZ29yaXRobSBhbmQgcmV2ZXJzZSBtYXBwaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBybWFwIGNvZGUuXG5cbk5vdywgZ2l2ZW4gdGhhdCBpdCdzIHJlbGF0ZWQgdG8gTFJVIGFuZCBsaWtlbHkgaW52b2x2ZWQgaW4gc29tZSBzb3J0IG9mIHBhZ2Ugc2Nhbm5pbmcgb3IgbG9vay1hcm91bmQgbWVjaGFuaXNtIGZvciBnZW5lcmF0aW5nIExSVSBsaXN0cywgSSBhbHNvIHdhbnQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBtaWdyYXRpb25zIGludGVyYWN0IHdpdGggdGhlIExSVS4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gY2hlY2sgaG93IGBmb2xpb19taWdyYXRlX2ZsYWdzYCBpcyBpbXBsZW1lbnRlZCwgZXNwZWNpYWxseSBpbiBgbW0vbWlncmF0ZS5jYC4gSSBoYXZlIGEgZmVlbGluZyB0aGF0IGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBhbmQgdGhlIG1pZ3JhdGlvbiBmbGFncyB3aWxsIGJlIGludGVyd292ZW4sIGVzcGVjaWFsbHkgaWYgdGhlIGNvZGUgaXMgZGVhbGluZyB3aXRoIHBhZ2VzIGluIHRoZSBwcm9jZXNzIG9mIG1pZ3JhdGlvbiBvciB0aG9zZSBwb3RlbnRpYWxseSBiZWluZyB0YXJnZXRlZCBmb3IgbWlncmF0aW9uIGR1ZSB0byB0aGUgTFJVIGV2aWN0aW9uLiBVbmRlcnN0YW5kaW5nIHRoaXMgY29ubmVjdGlvbiBpcyBjcml0aWNhbCB0byBzZWVpbmcgdGhlIHdob2xlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDk3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDE6MDkuMTgxMDc3NzMzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDAyNzA4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb2xpb19taWdyYXRlX2ZsYWdzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9taWdyYXRlLmM9NzM5PWludCBtaWdyYXRlX2h1Z2VfcGFnZV9tb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9taWdyYXRlLmMtNzc0LSAqL1xcbm1tL21pZ3JhdGUuYzo3NzU6dm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vbWlncmF0ZS5jLTc3Ni17XFxuLS1cXG5tbS9taWdyYXRlLmMtODYzLX1cXG5tbS9taWdyYXRlLmM6ODY0OkVYUE9SVF9TWU1CT0woZm9saW9fbWlncmF0ZV9mbGFncyk7XFxubW0vbWlncmF0ZS5jLTg2NS1cXG4tLVxcbm1tL21pZ3JhdGUuYz04NzA9c3RhdGljIGludCBfX21pZ3JhdGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZHN0LFxcbi0tXFxubW0vbWlncmF0ZS5jLTg5MC1cXG5tbS9taWdyYXRlLmM6ODkxOlxcdGZvbGlvX21pZ3JhdGVfZmxhZ3MoZHN0LCBzcmMpO1xcbm1tL21pZ3JhdGUuYy04OTItXFx0cmV0dXJuIDA7XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTExMDk9c3RhdGljIHZvaWQgX19taWdyYXRlX2RldmljZV9wYWdlcyh1bnNpZ25lZCBsb25nICpzcmNfcGZucyxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI1MS1cXHRcXHRcXHRlbHNlXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMjUyOlxcdFxcdFxcdFxcdGZvbGlvX21pZ3JhdGVfZmxhZ3MobmV3Zm9saW8sIGZvbGlvKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTEyNTMtXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0MTowOS4yMzUxMDk1OTlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA4MDYyNzQzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGd1dHMgb2YgbWVtb3J5IGNncm91cCBtYW5hZ2VtZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIExlYXN0IFJlY2VudGx5IFVzZWQgKExSVSkgc2l6ZSBpcyB1cGRhdGVkIHdpdGhpbiBhIG1lbW9yeSBjZ3JvdXAuIExldCdzIHN0YXJ0IHdpdGggYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCBpbiBgbW0vbWVtY29udHJvbC5jYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgdGhlIGNlbnRyYWwgcG9pbnQgZm9yIHRyYWNraW5nIGFuZCByZWZsZWN0aW5nIGNoYW5nZXMgdG8gdGhlIExSVSBsaXN0cyB1c2VkIGZvciBtZW1vcnkgcmVjbGFtYXRpb24gd2l0aGluIGVhY2ggY2dyb3VwLiBJJ2xsIG5lZWQgdG8gc2VlIHdoYXQgYXJndW1lbnRzIGl0IHRha2VzLCB3aGF0IGRhdGEgc3RydWN0dXJlcyBpdCBtYW5pcHVsYXRlcywgYW5kIHdoZXJlIGl0J3MgY2FsbGVkIGZyb20uIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyB0aGUgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgYW4gdXBkYXRlIGFuZCBob3cgdGhlIExSVSBzaXplIGlzIGNhbGN1bGF0ZWQgb3IgYWRqdXN0ZWQuIElzIHRoaXMgYSBnbG9iYWwgdXBkYXRlLCBvciBzcGVjaWZpYyB0byBwYXJ0aWN1bGFyIG1lbW9yeSB6b25lcz8gSG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCB0aGUgdmFyaW91cyBtZW1vcnkgc3RhdHMgYW5kIHRocmVzaG9sZHM/IEhvcGVmdWxseSwgdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2lsbCBnaXZlIG1lIHNvbWUgY2x1ZXMgYWJvdXQgaXRzIHB1cnBvc2UgaW4gdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc2NoZW1lLiBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgYSBjb3JlIGVsZW1lbnQgaW4gdGhlIG1lbW9yeSBjZ3JvdXAgZXZpY3Rpb24gc3RyYXRlZ3kuIFRpbWUgdG8gZ2V0IHRvIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzIwMSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQxOjEyLjMxNTc0MDE4OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA4MzM5ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ZvbGlvLmM9MTEyMz1zdGF0aWMgdm9pZCBscnV2ZWNfcmVwYXJlbnRfbHJ1KHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYyxcXG4tLVxcbm1tL2ZvbGlvLmMtMTE0My1cXHRcXHQgKi9cXG5tbS9mb2xpby5jOjExNDQ6XFx0XFx0bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUocGFyZW50X2xydXZlYywgbHJ1LCB6aWQsIHNpemUpO1xcbm1tL2ZvbGlvLmM6MTE0NTpcXHRcXHRtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShjaGlsZF9scnV2ZWMsIGxydSwgemlkLCAtKGxvbmcpc2l6ZSk7XFxubW0vZm9saW8uYy0xMTQ2LVxcdH1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xNTAxPXN0cnVjdCBscnV2ZWMgKmZvbGlvX2xydXZlY19sb2NrX2lycXNhdmUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNTE4LS8qKlxcbm1tL21lbWNvbnRyb2wuYzoxNTE5OiAqIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplIC0gYWNjb3VudCBmb3IgYWRkaW5nIG9yIHJlbW92aW5nIGFuIGxydSBwYWdlXFxubW0vbWVtY29udHJvbC5jLTE1MjAtICogQGxydXZlYzogbWVtX2Nncm91cCBwZXIgem9uZSBscnUgdmVjdG9yXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTUyNy0gKi9cXG5tbS9tZW1jb250cm9sLmM6MTUyODp2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXFxubW0vbWVtY29udHJvbC5jLTE1MjktXFx0XFx0XFx0XFx0aW50IHppZCwgbG9uZyBucl9wYWdlcylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTE1OTI9dW5zaWduZWQgaW50IHJlY2xhaW1fY2xlYW5fcGFnZXNfZnJvbV9saXN0KHN0cnVjdCB6b25lICp6b25lLFxcbi0tXFxubW0vdm1zY2FuLmMtMTY0NC0gKiBVcGRhdGUgTFJVIHNpemVzIGFmdGVyIGlzb2xhdGluZyBwYWdlcy4gVGhlIExSVSBzaXplIHVwZGF0ZXMgbXVzdFxcbm1tL3Ztc2Nhbi5jOjE2NDU6ICogYmUgY29tcGxldGUgYmVmb3JlIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplIGR1ZSB0byBhIHNhbml0eSBjaGVjay5cXG5tbS92bXNjYW4uYy0xNjQ2LSAqL1xcbi0tXFxubW0vdm1zY2FuLmM9NDYyMT12b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxcbi0tXFxubW0vdm1zY2FuLmMtNDY0Mi1cXHRcXHRcXHQvKiBNb3ZlIHRoZSBhY2NvdW50aW5nLCBkbyBub3QgZHVwbGljYXRlIGl0LiAqL1xcbm1tL3Ztc2Nhbi5jOjQ2NDM6XFx0XFx0XFx0bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUocGFyZW50X2xydXZlYywgbHJ1LCB6aWQsIHNpemUpO1xcbm1tL3Ztc2Nhbi5jOjQ2NDQ6XFx0XFx0XFx0bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoY2hpbGRfbHJ1dmVjLCBscnUsIHppZCwgLShsb25nKXNpemUpO1xcbm1tL3Ztc2Nhbi5jLTQ2NDUtXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0MToxMi4zNjY1ODEwMTVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk5NTU2NTE3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIE1HTFJVIEludGVncmF0aW9uIFBvaW50cyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIGhvdyBNR0xSVSBpcyBhY3R1YWxseSBiZWluZyB1c2VkIGFuZCBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtLiBNeSBmaXJzdCBzdGVwIGlzIHRvIG1ldGhvZGljYWxseSBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGVudHJ5IHBvaW50cy4gSSdtIGdvaW5nIHRvIHNjYW4gdGhyb3VnaCBgbW0vdm1zY2FuLmNgIGFuZCBvdGhlciBmaWxlcyB3aXRoaW4gdGhlIGBtbWAgZGlyZWN0b3J5IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55ICpub24tc3RhdGljKiBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSBhY3RpbmcgYXMgYWNjZXNzIHBvaW50cyBmb3IgTUdMUlUuIEkgbmVlZCB0byBiZSBzdXJlIEknbSBjYXB0dXJpbmcgYWxsIHRoZSBwb3RlbnRpYWwgY2FsbCBzaXRlcy4gVGhlbiwgSSdsbCBmb2N1cyBzcGVjaWZpY2FsbHkgb24gYG1tL3Ztc2Nhbi5jYCBhbmQgemVybyBpbiBvbiB3aGF0IGNhbGxzICppbnRvKiBNR0xSVSBhcmUgbWFkZSBmcm9tIHRoZXJlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGl0cyBjb250cm9sIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTM5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDE6MTQuMzYyMTQ5MTA2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzg5NzI3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnVfZ2VuX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDcxOCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxubW0vdm1zY2FuLmM9ODI3PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XFxuLS1cXG5tbS92bXNjYW4uYy04MzktICovXFxubW0vdm1zY2FuLmM6ODQwOnN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG5tbS92bXNjYW4uYy04NDEte1xcbi0tXFxubW0vdm1zY2FuLmMtODY0LSNlbHNlXFxubW0vdm1zY2FuLmM6ODY1OnN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG5tbS92bXNjYW4uYy04NjYte1xcbi0tXFxubW0vdm1zY2FuLmM9ODcxPXN0YXRpYyBlbnVtIGZvbGlvX3JlZmVyZW5jZXMgZm9saW9fY2hlY2tfcmVmZXJlbmNlcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vdm1zY2FuLmMtODk1LVxcbm1tL3Ztc2Nhbi5jOjg5NjpcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkpIHtcXG5tbS92bXNjYW4uYy04OTctXFx0XFx0aWYgKCFyZWZlcmVuY2VkX3B0ZXMpXFxuLS1cXG5tbS92bXNjYW4uYy04OTktXFxubW0vdm1zY2FuLmM6OTAwOlxcdFxcdHJldHVybiBscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcXHUwMDI2dm1hX2ZsYWdzKSA/IEZPTElPUkVGX0FDVElWQVRFIDogRk9MSU9SRUZfS0VFUDtcXG5tbS92bXNjYW4uYy05MDEtXFx0fVxcbi0tXFxubW0vdm1zY2FuLmM9MjI4Mz1zdGF0aWMgdm9pZCBwcmVwYXJlX3NjYW5fY29udHJvbChwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTIyODktXFxubW0vdm1zY2FuLmM6MjI5MDpcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkpXFxubW0vdm1zY2FuLmMtMjI5MS1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS92bXNjYW4uYz0yNjk3PURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGxydV9zd2l0Y2gpO1xcbm1tL3Ztc2Nhbi5jLTI2OTgtI2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcXG5tbS92bXNjYW4uYzoyNjk5OkRFRklORV9TVEFUSUNfS0VZX0FSUkFZX1RSVUUobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xcbm1tL3Ztc2Nhbi5jOjI3MDA6I2RlZmluZSBnZXRfY2FwKGNhcClcXHRzdGF0aWNfYnJhbmNoX2xpa2VseShcXHUwMDI2bHJ1X2dlbl9jYXBzW2NhcF0pXFxubW0vdm1zY2FuLmMtMjcwMS0jZWxzZVxcbm1tL3Ztc2Nhbi5jOjI3MDI6REVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfRkFMU0UobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xcbm1tL3Ztc2Nhbi5jOjI3MDM6I2RlZmluZSBnZXRfY2FwKGNhcClcXHRzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZscnVfZ2VuX2NhcHNbY2FwXSlcXG5tbS92bXNjYW4uYy0yNzA0LSNlbmRpZlxcbi0tXFxubW0vdm1zY2FuLmM9Mjc5MT1zdGF0aWMgYm9vbCBfX21heWJlX3VudXNlZCBzZXFfaXNfdmFsaWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbi0tXFxubW0vdm1zY2FuLmMtMjgyMC0gKiB3YWxrX3BtZF9yYW5nZSgpOyB0aGUgZXZpY3Rpb24gYWxzbyByZXBvcnQgdGhlbSB3aGVuIHdhbGtpbmcgdGhlIHJtYXBcXG5tbS92bXNjYW4uYzoyODIxOiAqIGluIGxydV9nZW5fbG9va19hcm91bmQoKS5cXG5tbS92bXNjYW4uYy0yODIyLSAqXFxuLS1cXG5tbS92bXNjYW4uYz0yODM4PXN0YXRpYyB2b2lkIGdldF9pdGVtX2tleSh2b2lkICppdGVtLCBpbnQgKmtleSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI4NDctXFxubW0vdm1zY2FuLmM6Mjg0ODpzdGF0aWMgYm9vbCB0ZXN0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxLFxcbm1tL3Ztc2Nhbi5jLTI4NDktXFx0XFx0XFx0ICAgICAgdm9pZCAqaXRlbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI4NjMtXFxubW0vdm1zY2FuLmM6Mjg2NDpzdGF0aWMgdm9pZCB1cGRhdGVfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEsXFxubW0vdm1zY2FuLmMtMjg2NS1cXHRcXHRcXHRcXHR2b2lkICppdGVtKVxcbi0tXFxubW0vdm1zY2FuLmMtMjg4Mi1cXG5tbS92bXNjYW4uYzoyODgzOnN0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxcbm1tL3Ztc2Nhbi5jLTI4ODQte1xcbi0tXFxubW0vdm1zY2FuLmMtMjkwNC1cXG5tbS92bXNjYW4uYzoyOTA1OnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICpnZXRfbW1fbGlzdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vdm1zY2FuLmMtMjkwNi17XFxubW0vdm1zY2FuLmM6MjkwNzpcXHRzdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fbGlzdCBtbV9saXN0ID0ge1xcbm1tL3Ztc2Nhbi5jLTI5MDgtXFx0XFx0LmZpZm8gPSBMSVNUX0hFQURfSU5JVChtbV9saXN0LmZpZm8pLFxcbi0tXFxubW0vdm1zY2FuLmMtMjkyMC1cXG5tbS92bXNjYW4uYzoyOTIxOnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqZ2V0X21tX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG5tbS92bXNjYW4uYy0yOTIyLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5MjUtXFxubW0vdm1zY2FuLmM6MjkyNjpzdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqZ2V0X25leHRfbW0oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaylcXG5tbS92bXNjYW4uYy0yOTI3LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5MzAtXFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdCh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jOjI5MzE6XFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKHdhbGstXFx1MDAzZWxydXZlYyk7XFxubW0vdm1zY2FuLmMtMjkzMi1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NDQtXFxubW0vdm1zY2FuLmM6Mjk0NTp2b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL3Ztc2Nhbi5jLTI5NDYte1xcbi0tXFxubW0vdm1zY2FuLmMtMjk0OC1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKTtcXG5tbS92bXNjYW4uYzoyOTQ5OlxcdHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKm1tX2xpc3QgPSBnZXRfbW1fbGlzdChtZW1jZyk7XFxubW0vdm1zY2FuLmMtMjk1MC1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NTktXFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcXG5tbS92bXNjYW4uYzoyOTYwOlxcdFxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jLTI5NjEtXFxuLS1cXG5tbS92bXNjYW4uYy0yOTcxLVxcbm1tL3Ztc2Nhbi5jOjI5NzI6dm9pZCBscnVfZ2VuX2RlbF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5tbS92bXNjYW4uYy0yOTczLXtcXG5tbS92bXNjYW4uYy0yOTc0LVxcdGludCBuaWQ7XFxubW0vdm1zY2FuLmM6Mjk3NTpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICptbV9saXN0O1xcbm1tL3Ztc2Nhbi5jLTI5NzYtXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5ODktXFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcXG5tbS92bXNjYW4uYzoyOTkwOlxcdFxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jLTI5OTEtXFxuLS1cXG5tbS92bXNjYW4uYy0zMDExLSNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYzozMDEyOnZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL3Ztc2Nhbi5jLTMwMTMte1xcbi0tXFxubW0vdm1zY2FuLmMtMzAzNS1cXG5tbS92bXNjYW4uYzozMDM2OlxcdGxydV9nZW5fZGVsX21tKG1tKTtcXG5tbS92bXNjYW4uYzozMDM3OlxcdGxydV9nZW5fYWRkX21tKG1tKTtcXG5tbS92bXNjYW4uYy0zMDM4LX1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwNDItXFxubW0vdm1zY2FuLmM6MzA0MzpzdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fbGlzdCAqZ2V0X21tX2xpc3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL3Ztc2Nhbi5jLTMwNDQte1xcbi0tXFxubW0vdm1zY2FuLmMtMzA0Ny1cXG5tbS92bXNjYW4uYzozMDQ4OnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqZ2V0X21tX3N0YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG5tbS92bXNjYW4uYy0zMDQ5LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwNTItXFxubW0vdm1zY2FuLmM6MzA1MzpzdGF0aWMgc3RydWN0IG1tX3N0cnVjdCAqZ2V0X25leHRfbW0oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaylcXG5tbS92bXNjYW4uYy0zMDU0LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwNTktXFxubW0vdm1zY2FuLmM6MzA2MDpzdGF0aWMgdm9pZCByZXNldF9tbV9zdGF0cyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBib29sIGxhc3QpXFxubW0vdm1zY2FuLmMtMzA2MS17XFxuLS1cXG5tbS92bXNjYW4uYy0zMDY0LVxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IHdhbGstXFx1MDAzZWxydXZlYztcXG5tbS92bXNjYW4uYzozMDY1OlxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jLTMwNjYtXFxuLS1cXG5tbS92bXNjYW4uYy0zMDg0LVxcbm1tL3Ztc2Nhbi5jOjMwODU6c3RhdGljIGJvb2wgaXRlcmF0ZV9tbV9saXN0KHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBtbV9zdHJ1Y3QgKippdGVyKVxcbm1tL3Ztc2Nhbi5jLTMwODYte1xcbi0tXFxubW0vdm1zY2FuLmMtMzA5MS1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcXG5tbS92bXNjYW4uYzozMDkyOlxcdHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKm1tX2xpc3QgPSBnZXRfbW1fbGlzdChtZW1jZyk7XFxubW0vdm1zY2FuLmM6MzA5MzpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcXG5tbS92bXNjYW4uYy0zMDk0LVxcbi0tXFxubW0vdm1zY2FuLmM9MzE0OT1zdGF0aWMgYm9vbCBpdGVyYXRlX21tX2xpc3Rfbm93YWxrKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEpXFxuLS1cXG5tbS92bXNjYW4uYy0zMTUyLVxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jOjMxNTM6XFx0c3RydWN0IGxydV9nZW5fbW1fbGlzdCAqbW1fbGlzdCA9IGdldF9tbV9saXN0KG1lbWNnKTtcXG5tbS92bXNjYW4uYzozMTU0OlxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jLTMxNTUtXFxuLS1cXG5tbS92bXNjYW4uYz0zMjAxPXN0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXJfbWluLFxcbi0tXFxubW0vdm1zY2FuLmMtMzIwNC1cXHRpbnQgaTtcXG5tbS92bXNjYW4uYzozMjA1OlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxubW0vdm1zY2FuLmMtMzIwNi1cXHRpbnQgaGlzdCA9IGxydV9oaXN0X2Zyb21fc2VxKGxydWdlbi1cXHUwMDNlbWluX3NlcVt0eXBlXSk7XFxuLS1cXG5tbS92bXNjYW4uYz0zMjIwPXN0YXRpYyB2b2lkIHJlc2V0X2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGJvb2wgY2FycnlvdmVyKVxcbi0tXFxubW0vdm1zY2FuLmMtMzIyMi1cXHRpbnQgaGlzdCwgdGllcjtcXG5tbS92bXNjYW4uYzozMjIzOlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxubW0vdm1zY2FuLmMtMzIyNC1cXHRib29sIGNsZWFyID0gY2FycnlvdmVyID8gTlJfSElTVF9HRU5TID09IDEgOiBOUl9ISVNUX0dFTlMgXFx1MDAzZSAxO1xcbi0tXFxubW0vdm1zY2FuLmM9MzI3Mj1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGludCAqdHlwZSxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMyOTItXFxubW0vdm1zY2FuLmM6MzI5MzpcXHRcXHQvKiBscnVfZ2VuX2RlbF9mb2xpbygpIGhhcyBpc29sYXRlZCB0aGlzIHBhZ2U/ICovXFxubW0vdm1zY2FuLmMtMzI5NC1cXHRcXHRpZiAob2xkX2dlbiBcXHUwMDNjIDApXFxuLS1cXG5tbS92bXNjYW4uYz0zMzA3PXN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS92bXNjYW4uYy0zMzA5LVxcdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xcbm1tL3Ztc2Nhbi5jOjMzMTA6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYzozMzExOlxcdGludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXFx1MDAzZW1pbl9zZXFbdHlwZV0pO1xcbm1tL3Ztc2Nhbi5jLTMzMTItXFx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMzMjYtXFxubW0vdm1zY2FuLmM6MzMyNzpcXHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xcbm1tL3Ztc2Nhbi5jLTMzMjgtXFxuLS1cXG5tbS92bXNjYW4uYy0zMzMxLVxcbm1tL3Ztc2Nhbi5jOjMzMzI6c3RhdGljIHZvaWQgdXBkYXRlX2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG5tbS92bXNjYW4uYy0zMzMzLVxcdFxcdFxcdCAgICAgIGludCBvbGRfZ2VuLCBpbnQgbmV3X2dlbiwgaW50IHR5cGUpXFxuLS1cXG5tbS92bXNjYW4uYy0zMzQ2LVxcbm1tL3Ztc2Nhbi5jOjMzNDc6c3RhdGljIHZvaWQgcmVzZXRfYmF0Y2hfc2l6ZShzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrKVxcbm1tL3Ztc2Nhbi5jLTMzNDgte1xcbi0tXFxubW0vdm1zY2FuLmMtMzM1MC1cXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBscnV2ZWNfbGl2ZV9sb2NrX2lycSh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jOjMzNTE6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYy0zMzUyLVxcbi0tXFxubW0vdm1zY2FuLmMtMzM2NS1cXG5tbS92bXNjYW4uYzozMzY2OlxcdFxcdGlmIChscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIGdlbikpXFxubW0vdm1zY2FuLmMtMzM2Ny1cXHRcXHRcXHRscnUgKz0gTFJVX0FDVElWRTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTMzNzQ9c3RhdGljIGludCBzaG91bGRfc2tpcF92bWEodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBtbV93YWxrICphcmdzKVxcbi0tXFxubW0vdm1zY2FuLmMtMzM3Ny1cXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IGFyZ3MtXFx1MDAzZXZtYTtcXG5tbS92bXNjYW4uYzozMzc4OlxcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVxcdTAwM2Vwcml2YXRlO1xcbm1tL3Ztc2Nhbi5jLTMzNzktXFxuLS1cXG5tbS92bXNjYW4uYz0zNTEyPXN0YXRpYyBib29sIHN1aXRhYmxlX3RvX3NjYW4oaW50IHRvdGFsLCBpbnQgeW91bmcpXFxuLS1cXG5tbS92bXNjYW4uYy0zNTE5LVxcbm1tL3Ztc2Nhbi5jOjM1MjA6c3RhdGljIHZvaWQgd2Fsa191cGRhdGVfZm9saW8oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vdm1zY2FuLmMtMzUyMS1cXHRcXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgZGlydHkpXFxuLS1cXG5tbS92bXNjYW4uYy0zNTI3LVxcbm1tL3Ztc2Nhbi5jOjM1Mjg6XFx0bmV3X2dlbiA9IGxydV9nZW5fZnJvbV9zZXEoUkVBRF9PTkNFKGxydXZlYy1cXHUwMDNlbHJ1Z2VuLm1heF9zZXEpKTtcXG5tbS92bXNjYW4uYy0zNTI5LVxcbi0tXFxubW0vdm1zY2FuLmMtMzUzOC1cXHRcXHRcXHR1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbiwgdHlwZSk7XFxubW0vdm1zY2FuLmM6MzUzOTpcXHR9IGVsc2UgaWYgKGxydV9nZW5fc2V0X3JlZnMoZm9saW8sIFxcdTAwMjZ2bWEtXFx1MDAzZWZsYWdzKSkge1xcbm1tL3Ztc2Nhbi5jLTM1NDAtXFx0XFx0b2xkX2dlbiA9IGZvbGlvX2xydV9nZW4oZm9saW8pO1xcbi0tXFxubW0vdm1zY2FuLmM9MzU0Nj1zdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM1NTYtXFx0c3RydWN0IGZvbGlvICpsYXN0ID0gTlVMTDtcXG5tbS92bXNjYW4uYzozNTU3OlxcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVxcdTAwM2Vwcml2YXRlO1xcbm1tL3Ztc2Nhbi5jLTM1NTgtXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKHdhbGstXFx1MDAzZWxydXZlYyk7XFxuLS1cXG5tbS92bXNjYW4uYz0zNjM1PXN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vdm1zY2FuLmMtMzY0Mi1cXHRzdHJ1Y3QgZm9saW8gKmxhc3QgPSBOVUxMO1xcbm1tL3Ztc2Nhbi5jOjM2NDM6XFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXFx1MDAzZXByaXZhdGU7XFxubW0vdm1zY2FuLmMtMzY0NC1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay1cXHUwMDNlbHJ1dmVjKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTM3MjE9c3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS92bXNjYW4uYy0zNzMwLVxcdHVuc2lnbmVkIGxvbmcgZmlyc3QgPSAtMTtcXG5tbS92bXNjYW4uYzozNzMxOlxcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVxcdTAwM2Vwcml2YXRlO1xcbm1tL3Ztc2Nhbi5jOjM3MzI6XFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKHdhbGstXFx1MDAzZWxydXZlYyk7XFxubW0vdm1zY2FuLmMtMzczMy1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTM3OTQ9c3RhdGljIGludCB3YWxrX3B1ZF9yYW5nZShwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM4MDAtXFx0dW5zaWduZWQgbG9uZyBuZXh0O1xcbm1tL3Ztc2Nhbi5jOjM4MDE6XFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXFx1MDAzZXByaXZhdGU7XFxubW0vdm1zY2FuLmMtMzgwMi1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTM4MzUtXFxubW0vdm1zY2FuLmM6MzgzNjpzdGF0aWMgdm9pZCB3YWxrX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrKVxcbm1tL3Ztc2Nhbi5jLTM4Mzcte1xcbi0tXFxubW0vdm1zY2FuLmMtMzg3MC1cXG5tbS92bXNjYW4uYzozODcxOnN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICpzZXRfbW1fd2FsayhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBib29sIGZvcmNlX2FsbG9jKVxcbm1tL3Ztc2Nhbi5jLTM4NzIte1xcbm1tL3Ztc2Nhbi5jOjM4NzM6XFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGN1cnJlbnQtXFx1MDAzZXJlY2xhaW1fc3RhdGUtXFx1MDAzZW1tX3dhbGs7XFxubW0vdm1zY2FuLmMtMzg3NC1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTM4OTE9c3RhdGljIHZvaWQgY2xlYXJfbW1fd2Fsayh2b2lkKVxcbm1tL3Ztc2Nhbi5jLTM4OTIte1xcbm1tL3Ztc2Nhbi5jOjM4OTM6XFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGN1cnJlbnQtXFx1MDAzZXJlY2xhaW1fc3RhdGUtXFx1MDAzZW1tX3dhbGs7XFxubW0vdm1zY2FuLmMtMzg5NC1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTM5MDQ9c3RhdGljIGJvb2wgaW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHN3YXBwaW5lc3MpXFxuLS1cXG5tbS92bXNjYW4uYy0zOTA3LVxcdGludCByZW1haW5pbmcgPSBNQVhfTFJVX0JBVENIO1xcbm1tL3Ztc2Nhbi5jOjM5MDg6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYy0zOTA5LVxcdGludCBoaXN0ID0gbHJ1X2hpc3RfZnJvbV9zZXEobHJ1Z2VuLVxcdTAwM2VtaW5fc2VxW3R5cGVdKTtcXG5tbS92bXNjYW4uYzozOTEwOlxcdGludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXFx1MDAzZW1pbl9zZXFbdHlwZV0pO1xcbm1tL3Ztc2Nhbi5jLTM5MTEtXFxuLS1cXG5tbS92bXNjYW4uYz0zOTU3PXN0YXRpYyB2b2lkIHRyeV90b19pbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxcbi0tXFxubW0vdm1zY2FuLmMtMzk2MC1cXHRib29sIHNlcV9pbmNfZmxhZyA9IGZhbHNlO1xcbm1tL3Ztc2Nhbi5jOjM5NjE6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYy0zOTYyLVxcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XFxuLS1cXG5tbS92bXNjYW4uYy0zOTY4LVxcdFxcdHdoaWxlIChtaW5fc2VxW3R5cGVdICsgTUlOX05SX0dFTlMgXFx1MDAzYz0gbHJ1Z2VuLVxcdTAwM2VtYXhfc2VxKSB7XFxubW0vdm1zY2FuLmM6Mzk2OTpcXHRcXHRcXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1pbl9zZXFbdHlwZV0pO1xcbm1tL3Ztc2Nhbi5jLTM5NzAtXFxuLS1cXG5tbS92bXNjYW4uYy0zOTg5LVxcbm1tL3Ztc2Nhbi5jOjM5OTA6XFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIGxydV9nZW5fZm9saW8gKi9cXG5tbS92bXNjYW4uYy0zOTkxLVxcdGlmIChzd2FwcGluZXNzIFxcdTAwMjZcXHUwMDI2IHN3YXBwaW5lc3MgXFx1MDAzYz0gTUFYX1NXQVBQSU5FU1MpIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQwMDk9c3RhdGljIGJvb2wgaW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgaW50IHN3YXBwaW5lc3MpXFxuLS1cXG5tbS92bXNjYW4uYy00MDEzLVxcdGludCB0eXBlLCB6b25lO1xcbm1tL3Ztc2Nhbi5jOjQwMTQ6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYy00MDE1LXJlc3RhcnQ6XFxuLS1cXG5tbS92bXNjYW4uYy00MDQ0LVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjQwNDU6XFx0cHJldiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVxcdTAwM2VtYXhfc2VxIC0gMSk7XFxubW0vdm1zY2FuLmM6NDA0NjpcXHRuZXh0ID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXFx1MDAzZW1heF9zZXEgKyAxKTtcXG5tbS92bXNjYW4uYy00MDQ3LVxcbi0tXFxubW0vdm1zY2FuLmM9NDA3ND1zdGF0aWMgYm9vbCB0cnlfdG9faW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQwNzctXFx0Ym9vbCBzdWNjZXNzO1xcbm1tL3Ztc2Nhbi5jOjQwNzg6XFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaztcXG5tbS92bXNjYW4uYy00MDc5LVxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gTlVMTDtcXG5tbS92bXNjYW4uYzo0MDgwOlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxubW0vdm1zY2FuLmM6NDA4MTpcXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcXG5tbS92bXNjYW4uYy00MDgyLVxcbi0tXFxubW0vdm1zY2FuLmMtNDA5My1cXHQgKiBJZiB0aGUgaGFyZHdhcmUgZG9lc24ndCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgYWNjZXNzZWQgYml0LCBmYWxsYmFja1xcbm1tL3Ztc2Nhbi5jOjQwOTQ6XFx0ICogdG8gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLCB3aGljaCBvbmx5IGNsZWFycyB0aGUgYWNjZXNzZWQgYml0IGluIGFcXG5tbS92bXNjYW4uYy00MDk1LVxcdCAqIGhhbmRmdWwgb2YgUFRFcy4gU3ByZWFkaW5nIHRoZSB3b3JrIG91dCBvdmVyIGEgcGVyaW9kIG9mIHRpbWUgdXN1YWxseVxcbi0tXFxubW0vdm1zY2FuLmM9NDE1OD1zdGF0aWMgdW5zaWduZWQgbG9uZyBscnV2ZWNfZXZpY3RhYmxlX3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQxNjEtXFx0dW5zaWduZWQgbG9uZyBzZXEsIHRvdGFsID0gMDtcXG5tbS92bXNjYW4uYzo0MTYyOlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxubW0vdm1zY2FuLmMtNDE2My1cXHRERUZJTkVfTUFYX1NFUShscnV2ZWMpO1xcbi0tXFxubW0vdm1zY2FuLmMtNDE2Ny1cXHRcXHRmb3IgKHNlcSA9IG1pbl9zZXFbdHlwZV07IHNlcSBcXHUwMDNjPSBtYXhfc2VxOyBzZXErKykge1xcbm1tL3Ztc2Nhbi5jOjQxNjg6XFx0XFx0XFx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpO1xcbm1tL3Ztc2Nhbi5jLTQxNjktXFx0XFx0XFx0Zm9yICh6b25lID0gMDsgem9uZSBcXHUwMDNjIE1BWF9OUl9aT05FUzsgem9uZSsrKVxcbi0tXFxubW0vdm1zY2FuLmM9NDE4OT1zdGF0aWMgYm9vbCBscnV2ZWNfaXNfcmVjbGFpbWFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQyMDMtXFxubW0vdm1zY2FuLmM6NDIwNDpcXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGV2aWN0YWJsZV9taW5fc2VxKG1pbl9zZXEsIHN3YXBwaW5lc3MpKTtcXG5tbS92bXNjYW4uYy00MjA1LVxcdGJpcnRoID0gUkVBRF9PTkNFKGxydXZlYy1cXHUwMDNlbHJ1Z2VuLnRpbWVzdGFtcHNbZ2VuXSk7XFxuLS1cXG5tbS92bXNjYW4uYy00MjEwLS8qIHRvIHByb3RlY3QgdGhlIHdvcmtpbmcgc2V0IG9mIHRoZSBsYXN0IE4gamlmZmllcyAqL1xcbm1tL3Ztc2Nhbi5jOjQyMTE6c3RhdGljIHVuc2lnbmVkIGxvbmcgbHJ1X2dlbl9taW5fdHRsIF9fcmVhZF9tb3N0bHk7XFxubW0vdm1zY2FuLmMtNDIxMi1cXG5tbS92bXNjYW4uYzo0MjEzOnN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNDIxNC17XFxubW0vdm1zY2FuLmMtNDIxNS1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxubW0vdm1zY2FuLmM6NDIxNjpcXHR1bnNpZ25lZCBsb25nIG1pbl90dGwgPSBSRUFEX09OQ0UobHJ1X2dlbl9taW5fdHRsKTtcXG5tbS92bXNjYW4uYy00MjE3LVxcdGJvb2wgcmVjbGFpbWFibGUgPSAhbWluX3R0bDtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQyNTktICovXFxubW0vdm1zY2FuLmM6NDI2MDpib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXFxubW0vdm1zY2FuLmMtNDI2MS17XFxuLS1cXG5tbS92bXNjYW4uYy00MjY1LVxcdHVuc2lnbmVkIGxvbmcgZW5kO1xcbm1tL3Ztc2Nhbi5jOjQyNjY6XFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaztcXG5tbS92bXNjYW4uYy00MjY3LVxcdHN0cnVjdCBmb2xpbyAqbGFzdCA9IE5VTEw7XFxuLS1cXG5tbS92bXNjYW4uYy00Mjc1LVxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcXG5tbS92bXNjYW4uYzo0Mjc2OlxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZTtcXG5tbS92bXNjYW4uYy00Mjc3LVxcbi0tXFxubW0vdm1zY2FuLmM9NDM3NT1lbnVtIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQzODItXFxubW0vdm1zY2FuLmM6NDM4MzpzdGF0aWMgdm9pZCBscnVfZ2VuX3JvdGF0ZV9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBvcClcXG5tbS92bXNjYW4uYy00Mzg0LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ0MzAtXFxubW0vdm1zY2FuLmM6NDQzMTp2b2lkIGxydV9nZW5fb25saW5lX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS92bXNjYW4uYy00NDMyLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ0NTUtXFxubW0vdm1zY2FuLmM6NDQ1Njp2b2lkIGxydV9nZW5fb2ZmbGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vdm1zY2FuLmMtNDQ1Ny17XFxuLS1cXG5tbS92bXNjYW4uYy00NDYyLVxcbm1tL3Ztc2Nhbi5jOjQ0NjM6XFx0XFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBNRU1DR19MUlVfT0xEKTtcXG5tbS92bXNjYW4uYy00NDY0LVxcdH1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ0NjYtXFxubW0vdm1zY2FuLmM6NDQ2Nzp2b2lkIGxydV9nZW5fcmVsZWFzZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vdm1zY2FuLmMtNDQ2OC17XFxuLS1cXG5tbS92bXNjYW4uYy00NDkyLVxcbm1tL3Ztc2Nhbi5jOjQ0OTM6dm9pZCBscnVfZ2VuX3NvZnRfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXFxubW0vdm1zY2FuLmMtNDQ5NC17XFxuLS1cXG5tbS92bXNjYW4uYy00NDk4LVxcdGlmIChSRUFEX09OQ0UobHJ1dmVjLVxcdTAwM2VscnVnZW4uc2VnKSAhPSBNRU1DR19MUlVfSEVBRClcXG5tbS92bXNjYW4uYzo0NDk5OlxcdFxcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX0hFQUQpO1xcbm1tL3Ztc2Nhbi5jLTQ1MDAtfVxcbm1tL3Ztc2Nhbi5jLTQ1MDEtXFxubW0vdm1zY2FuLmM6NDUwMjpib29sIHJlY2hlY2tfbHJ1X2dlbl9tYXhfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxcbm1tL3Ztc2Nhbi5jLTQ1MDMte1xcbi0tXFxubW0vdm1zY2FuLmM9NDUxNT1zdGF0aWMgdm9pZCB0cnlfdG9faW5jX21heF9zZXFfbm93YWxrKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ1MTcte1xcbm1tL3Ztc2Nhbi5jOjQ1MTg6XFx0c3RydWN0IGxydV9nZW5fbW1fbGlzdCAqbW1fbGlzdCA9IGdldF9tbV9saXN0KG1lbWNnKTtcXG5tbS92bXNjYW4uYzo0NTE5OlxcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jLTQ1MjAtXFx0aW50IHN3YXBwaW5lc3MgPSBtZW1fY2dyb3VwX3N3YXBwaW5lc3MobWVtY2cpO1xcbi0tXFxubW0vdm1zY2FuLmMtNDU0OC0gKi9cXG5tbS92bXNjYW4uYzo0NTQ5OnZvaWQgbWF4X2xydV9nZW5fbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxcbm1tL3Ztc2Nhbi5jLTQ1NTAte1xcbi0tXFxubW0vdm1zY2FuLmMtNDU3NS0gKiAgICBnZW5lcmF0aW9ucyBvbiBhbiBMUlUgbGlzdC5cXG5tbS92bXNjYW4uYzo0NTc2OiAqIDQuIEluIGxydV9nZW5fZGVsX2ZvbGlvKCksIHRoZSBnZW5lcmF0aW9uIHRvIHdoaWNoIHRoZSBmb2xpbyBiZWxvbmdzIGlzXFxubW0vdm1zY2FuLmMtNDU3Ny0gKiAgICBmb3VuZCBiYXNlZCBvbiB0aGUgZ2VuZXJhdGlvbiBpbmZvcm1hdGlvbiBpbiBmb2xpby1cXHUwMDNlZmxhZ3MsIGFuZCB0aGVcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ1NzktICogICAgdGhlIGxydSBzaXplIGNvcnJlY3RseSBkdXJpbmcgcmVwYXJlbnRpbmcsIG90aGVyd2lzZSB0aGUgbHJ1IHNpemUgbWF5XFxubW0vdm1zY2FuLmM6NDU4MDogKiAgICBiZSB1cGRhdGVkIGluY29ycmVjdGx5IGluIGxydV9nZW5fZGVsX2ZvbGlvKCkuXFxubW0vdm1zY2FuLmMtNDU4MS0gKlxcbi0tXFxubW0vdm1zY2FuLmMtNDU4OS0gKi9cXG5tbS92bXNjYW4uYzo0NTkwOnN0YXRpYyB2b2lkIF9fbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsIHN0cnVjdCBscnV2ZWMgKnBhcmVudF9scnV2ZWMsXFxubW0vdm1zY2FuLmMtNDU5MS1cXHRcXHRcXHRcXHQgICAgIGludCB6b25lLCBpbnQgdHlwZSlcXG5tbS92bXNjYW4uYy00NTkyLXtcXG5tbS92bXNjYW4uYzo0NTkzOlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpjaGlsZF9scnVnZW4sICpwYXJlbnRfbHJ1Z2VuO1xcbm1tL3Ztc2Nhbi5jLTQ1OTQtXFx0ZW51bSBscnVfbGlzdCBscnUgPSB0eXBlICogTFJVX0lOQUNUSVZFX0ZJTEU7XFxuLS1cXG5tbS92bXNjYW4uYy00NjAwLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBnZXRfbnJfZ2VucyhjaGlsZF9scnV2ZWMsIHR5cGUpOyBpKyspIHtcXG5tbS92bXNjYW4uYzo0NjAxOlxcdFxcdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGNoaWxkX2xydWdlbi1cXHUwMDNlbWF4X3NlcSAtIGkpO1xcbm1tL3Ztc2Nhbi5jLTQ2MDItXFx0XFx0bG9uZyBucl9wYWdlcyA9IGNoaWxkX2xydWdlbi1cXHUwMDNlbnJfcGFnZXNbZ2VuXVt0eXBlXVt6b25lXTtcXG5tbS92bXNjYW4uYzo0NjAzOlxcdFxcdGludCBjaGlsZF9scnVfYWN0aXZlID0gbHJ1X2dlbl9pc19hY3RpdmUoY2hpbGRfbHJ1dmVjLCBnZW4pID8gTFJVX0FDVElWRSA6IDA7XFxubW0vdm1zY2FuLmM6NDYwNDpcXHRcXHRpbnQgcGFyZW50X2xydV9hY3RpdmUgPSBscnVfZ2VuX2lzX2FjdGl2ZShwYXJlbnRfbHJ1dmVjLCBnZW4pID8gTFJVX0FDVElWRSA6IDA7XFxubW0vdm1zY2FuLmMtNDYwNS1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ2MTMtXFxubW0vdm1zY2FuLmM6NDYxNDpcXHRcXHRpZiAobHJ1X2dlbl9pc19hY3RpdmUoY2hpbGRfbHJ1dmVjLCBnZW4pICE9IGxydV9nZW5faXNfYWN0aXZlKHBhcmVudF9scnV2ZWMsIGdlbikpIHtcXG5tbS92bXNjYW4uYy00NjE1LVxcdFxcdFxcdF9fdXBkYXRlX2xydV9zaXplKGNoaWxkX2xydXZlYywgbHJ1ICsgY2hpbGRfbHJ1X2FjdGl2ZSwgem9uZSwgLW5yX3BhZ2VzKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ2MjAtXFxubW0vdm1zY2FuLmM6NDYyMTp2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxcbm1tL3Ztc2Nhbi5jLTQ2MjIte1xcbi0tXFxubW0vdm1zY2FuLmMtNDYzMi1cXHRcXHRmb3IgKHR5cGUgPSAwOyB0eXBlIFxcdTAwM2MgQU5PTl9BTkRfRklMRTsgdHlwZSsrKVxcbm1tL3Ztc2Nhbi5jOjQ2MzM6XFx0XFx0XFx0X19scnVfZ2VuX3JlcGFyZW50X21lbWNnKGNoaWxkX2xydXZlYywgcGFyZW50X2xydXZlYywgemlkLCB0eXBlKTtcXG5tbS92bXNjYW4uYy00NjM0LVxcbi0tXFxubW0vdm1zY2FuLmM9NDY1NT1zdGF0aWMgYm9vbCBzb3J0X2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuLS1cXG5tbS92bXNjYW4uYy00NjY0LVxcdGludCB0aWVyID0gbHJ1X3RpZXJfZnJvbV9yZWZzKHJlZnMsIHdvcmtpbmdzZXQpO1xcbm1tL3Ztc2Nhbi5jOjQ2NjU6XFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYy00NjY2LVxcbi0tXFxubW0vdm1zY2FuLmMtNDY3My1cXHQvKiBwcm9tb3RlZCAqL1xcbm1tL3Ztc2Nhbi5jOjQ2NzQ6XFx0aWYgKGdlbiAhPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cXHUwMDNlbWluX3NlcVt0eXBlXSkpIHtcXG5tbS92bXNjYW4uYy00Njc1LVxcdFxcdGxpc3RfbW92ZShcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSwgXFx1MDAyNmxydWdlbi1cXHUwMDNlZm9saW9zW2dlbl1bdHlwZV1bem9uZV0pO1xcbi0tXFxubW0vdm1zY2FuLmM9NDcwND1zdGF0aWMgYm9vbCBpc29sYXRlX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy00NzIxLVxcbm1tL3Ztc2Nhbi5jOjQ3MjI6XFx0c3VjY2VzcyA9IGxydV9nZW5fZGVsX2ZvbGlvKGxydXZlYywgZm9saW8sIHRydWUpO1xcbm1tL3Ztc2Nhbi5jLTQ3MjMtXFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFzdWNjZXNzLCBmb2xpbyk7XFxuLS1cXG5tbS92bXNjYW4uYz00NzI4PXN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS92bXNjYW4uYy00NzM5LVxcdHVuc2lnbmVkIGxvbmcgcmVtYWluaW5nID0gbnJfdG9fc2NhbjtcXG5tbS92bXNjYW4uYzo0NzQwOlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxubW0vdm1zY2FuLmMtNDc0MS1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ3NDctXFxubW0vdm1zY2FuLmM6NDc0ODpcXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cXHUwMDNlbWluX3NlcVt0eXBlXSk7XFxubW0vdm1zY2FuLmMtNDc0OS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ4Nzg9c3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS92bXNjYW4uYy00ODg2LVxcdHN0cnVjdCByZWNsYWltX3N0YXQgc3RhdDtcXG5tbS92bXNjYW4uYzo0ODg3OlxcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7XFxubW0vdm1zY2FuLmMtNDg4OC1cXHRpbnQgc2Nhbm5lZCwgcmVjbGFpbWVkO1xcbi0tXFxubW0vdm1zY2FuLmMtNDkzNy1cXHRcXHQvKiBkb24ndCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqL1xcbm1tL3Ztc2Nhbi5jOjQ5Mzg6XFx0XFx0aWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKSB7XFxubW0vdm1zY2FuLmMtNDkzOS1cXHRcXHRcXHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xcbi0tXFxubW0vdm1zY2FuLmM9NTEwMj1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxMDktXFxubW0vdm1zY2FuLmM6NTExMDpcXHQvKiBscnVfZ2VuX2FnZV9ub2RlKCkgY2FsbGVkIG1lbV9jZ3JvdXBfY2FsY3VsYXRlX3Byb3RlY3Rpb24oKSAqL1xcbm1tL3Ztc2Nhbi5jLTUxMTEtXFx0aWYgKG1lbV9jZ3JvdXBfYmVsb3dfbWluKE5VTEwsIG1lbWNnKSlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUxNDM9c3RhdGljIHZvaWQgc2hyaW5rX21hbnkoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01MTQ5LVxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcXG5tbS92bXNjYW4uYzo1MTUwOlxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW47XFxubW0vdm1zY2FuLmMtNTE1MS1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuLS1cXG5tbS92bXNjYW4uYy01MTYzLVxcdFxcdGlmIChvcCkge1xcbm1tL3Ztc2Nhbi5jOjUxNjQ6XFx0XFx0XFx0bHJ1X2dlbl9yb3RhdGVfbWVtY2cobHJ1dmVjLCBvcCk7XFxubW0vdm1zY2FuLmMtNTE2NS1cXHRcXHRcXHRvcCA9IDA7XFxuLS1cXG5tbS92bXNjYW4uYy01MTc3LVxcdFxcdGlmICghbWVtX2Nncm91cF90cnlnZXQobWVtY2cpKSB7XFxubW0vdm1zY2FuLmM6NTE3ODpcXHRcXHRcXHRscnVfZ2VuX3JlbGVhc2VfbWVtY2cobWVtY2cpO1xcbm1tL3Ztc2Nhbi5jLTUxNzktXFx0XFx0XFx0bWVtY2cgPSBOVUxMO1xcbi0tXFxubW0vdm1zY2FuLmMtNTE5NS1cXHRpZiAob3ApXFxubW0vdm1zY2FuLmM6NTE5NjpcXHRcXHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIG9wKTtcXG5tbS92bXNjYW4uYy01MTk3LVxcbi0tXFxubW0vdm1zY2FuLmMtNTIwMi1cXG5tbS92bXNjYW4uYzo1MjAzOlxcdC8qIHJlc3RhcnQgaWYgcmFjZWQgd2l0aCBscnVfZ2VuX3JvdGF0ZV9tZW1jZygpICovXFxubW0vdm1zY2FuLmMtNTIwNC1cXHRpZiAoZ2VuICE9IGdldF9udWxsc192YWx1ZShwb3MpKVxcbi0tXFxubW0vdm1zY2FuLmMtNTIxMi1cXG5tbS92bXNjYW4uYzo1MjEzOnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTUyMTQte1xcbi0tXFxubW0vdm1zY2FuLmMtNTIyNi1cXHRpZiAodHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYykpXFxubW0vdm1zY2FuLmM6NTIyNzpcXHRcXHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIE1FTUNHX0xSVV9ZT1VORyk7XFxubW0vdm1zY2FuLmMtNTIyOC1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTUyMzMtXFxubW0vdm1zY2FuLmM6NTIzNDpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTUyMzUte1xcbi0tXFxubW0vdm1zY2FuLmM9NTI4MD1zdGF0aWMgYm9vbCBfX21heWJlX3VudXNlZCBzdGF0ZV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxubW0vdm1zY2FuLmMtNTI4MS17XFxubW0vdm1zY2FuLmM6NTI4MjpcXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXFx1MDAyNmxydXZlYy1cXHUwMDNlbHJ1Z2VuO1xcbm1tL3Ztc2Nhbi5jLTUyODMtXFxuLS1cXG5tbS92bXNjYW4uYz01MzAzPXN0YXRpYyBib29sIGZpbGxfZXZpY3RhYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUzMTctXFx0XFx0XFx0LypcXG5tbS92bXNjYW4uYzo1MzE4OlxcdFxcdFxcdCAqIGxydV9nZW5fYWRkX2ZvbGlvKCkgdXNlcyBsaXN0X2FkZF90YWlsKCkgcmF0aGVyXFxubW0vdm1zY2FuLmMtNTMxOS1cXHRcXHRcXHQgKiB0aGFuIGxpc3RfYWRkKCkgd2hlbiByZWNsYWltaW5nIGlzIHRydWUuICBNYXRjaFxcbi0tXFxubW0vdm1zY2FuLmMtNTMzNi1cXHRcXHRcXHQgKi9cXG5tbS92bXNjYW4uYzo1MzM3OlxcdFxcdFxcdHN1Y2Nlc3MgPSBscnVfZ2VuX2FkZF9mb2xpbyhscnV2ZWMsIGZvbGlvLCAhYWN0aXZlKTtcXG5tbS92bXNjYW4uYy01MzM4LVxcdFxcdFxcdFZNX1dBUk5fT05fT05DRSghc3VjY2Vzcyk7XFxuLS1cXG5tbS92bXNjYW4uYz01MzQ4PXN0YXRpYyBib29sIGRyYWluX2V2aWN0YWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuLS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDE6MTQuNDEwMDUzODEyWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY1MDg5OTc0MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gTXVsdGktR2VuIExSVSBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgaGVyZSdzIHdoYXQgSSd2ZSBnb3Qgc28gZmFyLiBJIG5lZWQgdG8gaWRlbnRpZnkga2V5IGtlcm5lbCBmdW5jdGlvbnMgZm9yIGZ1enppbmcgcmVsYXRlZCB0byB0aGlzIE11bHRpLUdlbiBMUlUgd29yaywgYW5kIGFsc28gZmlndXJlIG91dCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLiBJJ20gYXZvaWRpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8ga2VlcCB0aGUgdGVzdGluZyBmb2N1c2VkLiBCYXNlZCBvbiB0aGUgcmVxdWlyZW1lbnRzLCBJJ20gZm9jdXNpbmcgb24gbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLlxuXG5GaXJzdCwgbGV0J3MgbG9vayBhdCB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIHJlbGV2YW50IGFuZCBtZWV0IHRob3NlIGNyaXRlcmlhLiBJIGlkZW50aWZpZWQgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgd2hpY2ggYXJlIGxpa2VseSBlbnRyeXBvaW50cyB0byB0aGUgbXVsdGktZ2VuIExSVSBmdW5jdGlvbmFsaXR5OlxuXG4qICAgYGxydV9nZW5fbG9va19hcm91bmRgIChpbiBgbW0vdm1zY2FuLmNgKSAtIExvb2tzIHByb21pc2luZy5cbiogICBgZm9saW9fbWlncmF0ZV9mbGFnc2AgKGluIGBtbS9taWdyYXRlLmNgKSAtIFNlZW1zIHJlbGV2YW50IHRvIHBhZ2UgbWlncmF0aW9uLlxuKiAgIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgKGluIGBtbS9tZW1jb250cm9sLmNgKSAtIFRoaXMgbG9va3MgaW1wb3J0YW50IGZvciBtZW1vcnkgY2dyb3VwIGludGVncmF0aW9uLlxuKiAgIGBscnVfZ2VuX3JlcGFyZW50X21lbWNnYCAoaW4gYG1tL3Ztc2Nhbi5jYCkgLSBMaWtlbHkgcmVsZXZhbnQgdG8gbWVtY2cgb3BlcmF0aW9ucy5cbiogICBgbHJ1X2dlbl9zb2Z0X3JlY2xhaW1gIChpbiBgbW0vdm1zY2FuLmNgKSAtIFRoaXMgaXMgcHJvYmFibHkgYSBnb29kIGVudHJ5cG9pbnQuXG5cbk5vdywgcmVnYXJkaW5nIGNvbmZpZ3VyYXRpb25zLCBpdCBzZWVtcyBjbGVhciB0aGF0IGBDT05GSUdfTFJVX0dFTmAgaXMgZXNzZW50aWFsLCBhcyBpcyBgQ09ORklHX0xSVV9HRU5fRU5BQkxFRGAgYmVjYXVzZSBpdCdzIGVuYWJsZWQgYnkgZGVmYXVsdC4gR2l2ZW4gdGhlIGZ1bmN0aW9ucyBJJ3ZlIGlkZW50aWZpZWQsIGBDT05GSUdfTUVNQ0dgIGlzIHJlcXVpcmVkIGZvciB0aGUgbWVtb3J5IGNncm91cCBhc3BlY3QgYW5kIGFsc28gYENPTkZJR19NSUdSQVRJT05gIGlzIG5lZWRlZCBmb3IgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgIGFuZCByZWxhdGVkIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcgdGhhdCB0aGVzZSBkZXBlbmQgb24uXG5cbkxvb2tpbmcgYXQgdGhlIEtjb25maWcgZmlsZXMsIEkgc2VlIHRoYXQ6XG5cbiogICBgTFJVX0dFTmAgZGVwZW5kcyBvbiBgTU1VYCwgYW5kIGFsc28gYDY0QklUIHx8ICFTUEFSU0VNRU0gfHwgU1BBUlNFTUVNX1ZNRU1NQVBgIChJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhvc2UgZm9yIGJ1aWxkaW5nIGNvbmZpZ3VyYXRpb25zKS5cbiogICBgTFJVX0dFTl9FTkFCTEVEYCBkZXBlbmRzIG9uIGBMUlVfR0VOYC5cbiogICBgTUVNQ0dgIGRlcGVuZHMgb24gYENHUk9VUFNgLlxuKiAgIEFuZCBmaW5hbGx5LCBgTlVNQV9NSUdSQVRJT05gIG9yIGBNSUdSQVRJT05gIGlzIG5lZWRlZC4gYENPTVBBQ1RJT05gIGlzIGdlbmVyYWxseSBzZWxlY3RlZC5cblxuU28sIEkgd2lsbCBhZGQgdGhlc2UgZnVuY3Rpb25zIGludG8gdGhlIGBGb2N1c1N5bWJvbHNgIGFycmF5OlxuXG4qICAgYGxydV9nZW5fbG9va19hcm91bmRgXG4qICAgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgXG4qICAgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYFxuKiAgIGBscnVfZ2VuX3JlcGFyZW50X21lbWNnYFxuKiAgIGBscnVfZ2VuX3NvZnRfcmVjbGFpbWBcblxuQW5kIHRoZXNlIGNvbmZpZ3VyYXRpb25zIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AgYXJyYXk6XG5cbiogICBMUlVfR0VOXG4qICAgTFJVX0dFTl9FTkFCTEVEXG4qICAgTUVNQ0dcbiogICBNSUdSQVRJT05cblxuXG4iLCJJbnB1dFRva2VucyI6MjgyNzYsIk91dHB1dFRva2VucyI6MTcwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQxOjIwLjkxOTA1NDQ4NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzExNjQ1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUlHUkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibHJ1X2dlbl9sb29rX2Fyb3VuZFwiLFxuICAgIFwiZm9saW9fbWlncmF0ZV9mbGFnc1wiLFxuICAgIFwibWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVcIixcbiAgICBcImxydV9nZW5fcmVwYXJlbnRfbWVtY2dcIixcbiAgICBcImxydV9nZW5fc29mdF9yZWNsYWltXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBNdWx0aS1HZW4gTFJVIChNR0xSVSksIHBhZ2UgcmVmZXJlbmNlIGNvdW50aW5nLCBmb2xpbyBmbGFncyBtYW5hZ2VtZW50LCBmb2xpbyBtaWdyYXRpb24sIGFuZCBtZW1jZyBMUlUgc2l6ZSBhY2NvdW50aW5nLiBUaGVzZSBmdW5jdGlvbmFsIGNoYW5nZXMgYWZmZWN0IHBhZ2UgcmVjbGFtYXRpb24sIGFnaW5nLCBhbmQgbWlncmF0aW9uIGJlaGF2aW9yIGluIHJlYWNoYWJsZSBjb3JlIG1tIGNvZGUgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUlHUkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibHJ1X2dlbl9sb29rX2Fyb3VuZFwiLFxuICAgIFwiZm9saW9fbWlncmF0ZV9mbGFnc1wiLFxuICAgIFwibWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVcIixcbiAgICBcImxydV9nZW5fcmVwYXJlbnRfbWVtY2dcIixcbiAgICBcImxydV9nZW5fc29mdF9yZWNsYWltXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBNdWx0aS1HZW4gTFJVIChNR0xSVSksIHBhZ2UgcmVmZXJlbmNlIGNvdW50aW5nLCBmb2xpbyBmbGFncyBtYW5hZ2VtZW50LCBmb2xpbyBtaWdyYXRpb24sIGFuZCBtZW1jZyBMUlUgc2l6ZSBhY2NvdW50aW5nLiBUaGVzZSBmdW5jdGlvbmFsIGNoYW5nZXMgYWZmZWN0IHBhZ2UgcmVjbGFtYXRpb24sIGFnaW5nLCBhbmQgbWlncmF0aW9uIGJlaGF2aW9yIGluIHJlYWNoYWJsZSBjb3JlIG1tIGNvZGUgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjQxOjIxLjA0MjE5NjY1NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1MzEzNjg2MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0MToyMS4wNDI4NTc4MjZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMjUzMDcwMTg4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyBNdWx0aS1HZW4gTFJVIChNR0xSVSkgZm9saW8gZmxhZyBvcGVyYXRpb25zIChpbnRyb2R1Y2luZyBoZWxwZXJzIGxpa2UgbHJ1X3NldF9nZW5fZmxhZ3MsIGxydV9zZXRfcmVmc19mbGFncywgZm9saW9fc2V0X2xydV9yZWZzKSwgdXBkYXRlcyBmb2xpbyByZWZlcmVuY2UvZ2VuZXJhdGlvbiB0cmFja2luZyBhY3Jvc3MgcmVjbGFpbSBhbmQgbWlncmF0aW9uIHBhdGhzLCBhbmQgY2hhbmdlcyBtZW1jZyBscnVfem9uZV9zaXplIHRyYWNraW5nIGZyb20gdW5zaWduZWQgbG9uZyB0byBzaWduZWQgbG9uZyB3aXRoIGJvdW5kcyBjaGVja2luZy5cXG5cXG5ObyBrZXJuZWwtdG8tdXNlciBkYXRhIGNvcGllcywgaW9jdGxzLCBvciB1c2VyLWZhY2luZyBzdHJ1Y3RzIGFyZSBtb2RpZmllZC4gU3RhY2sgdmFyaWFibGVzIGludHJvZHVjZWQgKGUuZy4sIGB0eXBlYCBpbiBgd2Fsa191cGRhdGVfZm9saW9gKSBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHJlYWQgKGFzIGB0eXBlYCBpcyBvbmx5IHBhc3NlZCB0byBgdXBkYXRlX2JhdGNoX3NpemVgIHdoZW4gYG9sZF9nZW4gXFx1MDAzZT0gMGAsIHdoaWNoIGd1YXJhbnRlZXMgYXNzaWdubWVudCBpbiBgZm9saW9fdXBkYXRlX2dlbmApLiBObyB1bmluaXRpYWxpemVkIGhlYXAsIHN0YWNrLCBvciBwYWdlIGFsbG9jYXRpb25zIGFyZSBleHBvc2VkLiBQb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgaW4gdGhlc2UgTU0gcGF0aHMgKHN1Y2ggYXMgY29uY3VycmVuY3kgaXNzdWVzIG9yIGludmFsaWQgZm9saW8gZGVyZWZlcmVuY2VzKSBmYWxsIHVuZGVyIEtBU0FOL0xPQ0tERVAgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgZGV0ZWN0b3JzLiBUaHVzLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRkNzBkMWNiNzU3MTM0MjI4NmY0NmMzYjVhODhkNDllZjY0OWFkYjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDA0OjQwOjQ4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuaW5kZXggN2QxYzBjZTE4OWE4OC4uODY3ODBlZjY1ZWFmYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuQEAgLTExMyw3ICsxMTMsNyBAQCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSB7XG4gXHQvKiBGaWVsZHMgd2hpY2ggZ2V0IHVwZGF0ZWQgb2Z0ZW4gYXQgdGhlIGVuZC4gKi9cbiBcdHN0cnVjdCBscnV2ZWNcdFx0bHJ1dmVjO1xuIFx0Q0FDSEVMSU5FX1BBRERJTkcoX3BhZDJfKTtcbi1cdHVuc2lnbmVkIGxvbmdcdFx0bHJ1X3pvbmVfc2l6ZVtNQVhfTlJfWk9ORVNdW05SX0xSVV9MSVNUU107XG4rXHRsb25nXHRcdFx0bHJ1X3pvbmVfc2l6ZVtNQVhfTlJfWk9ORVNdW05SX0xSVV9MSVNUU107XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9yZWNsYWltX2l0ZXJcdGl0ZXI7XG4gXG4gXHQvKlxuQEAgLTkwMiwxMCArOTAyLDE1IEBAIHN0YXRpYyBpbmxpbmVcbiB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRlbnVtIGxydV9saXN0IGxydSwgaW50IHpvbmVfaWR4KVxuIHtcbitcdGxvbmcgdmFsO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16O1xuIFxuIFx0bXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcbi1cdHJldHVybiBSRUFEX09OQ0UobXotXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7XG4rXHR2YWwgPSBSRUFEX09OQ0UobXotXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7XG4rXHRpZiAoV0FSTl9PTl9PTkNFKHZhbCBcdTAwM2MgMCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHZhbDtcbiB9XG4gXG4gdm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzayk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaCBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcbmluZGV4IDYyMWM4NjUzZDhmN2UuLmFiNjliOTkzMDg5M2YgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG5AQCAtMzAsNiArMzAsMTcgQEAgc3RhdGljIGlubGluZSBpbnQgZm9saW9faXNfZmlsZV9scnUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHJldHVybiAhZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKTtcbiB9XG4gXG4rLyoqXG4rICogZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUgLSBTaG91bGQgdGhlIGZvbGlvIGJlIG9uIGEgZmlsZSBMUlUgb3IgYW5vbiBMUlU/XG4rICogQGZsYWdzOiBUaGUgZm9saW8ncyBmbGFncy5cbisgKlxuKyAqIEp1c3QgbGlrZSBmb2xpb19pc19maWxlX2xydSBidXQgdGFrZSB0aGUgZm9saW8gZmxhZ3MgZGlyZWN0bHkgaW5zdGVhZC5cbisgKi9cbitzdGF0aWMgaW5saW5lIGludCBmb2xpb19mbGFnc19pc19maWxlX2xydShjb25zdCB1bnNpZ25lZCBsb25nICpmbGFncylcbit7XG4rXHRyZXR1cm4gIXRlc3RfYml0KFBHX3N3YXBiYWNrZWQsIGZsYWdzKTtcbit9XG4rXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0XHRcdGVudW0gbHJ1X2xpc3QgbHJ1LCBlbnVtIHpvbmVfdHlwZSB6aWQsXG4gXHRcdFx0XHRsb25nIG5yX3BhZ2VzKVxuQEAgLTE0MiwxMCArMTUzLDY2IEBAIHN0YXRpYyBpbmxpbmUgaW50IGxydV90aWVyX2Zyb21fcmVmcyhpbnQgcmVmcywgYm9vbCB3b3JraW5nc2V0KVxuIFx0cmV0dXJuIHdvcmtpbmdzZXQgPyBNQVhfTlJfVElFUlMgLSAxIDogb3JkZXJfYmFzZV8yKHJlZnMpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuKy8qKlxuKyAqIGxydV9zZXRfZ2VuX2ZsYWdzIC0gU2V0IHRoZSBMUlUgZ2VuZXJhdGlvbiBudW1iZXIgdG8gc3BlY2lmaWVkIGZvbGlvIGZsYWdzLlxuKyAqIEBmbGFnczogcG9pbnRlciB0byB0aGUgZm9saW8gZmxhZ3NcbisgKiBAZ2VuOiBnZW5lcmF0aW9uIG51bWJlciwgYmV0d2VlbiAwIGFuZCAoTUFYX05SX0dFTlMgLSAxKSwgaW5jbHVzaXZlLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfc2V0X2dlbl9mbGFncyh1bnNpZ25lZCBsb25nICpmbGFncywgaW50IGdlbilcbit7XG4rXHRCVUlMRF9CVUdfT04oTFJVX0dFTl9NQVNLIFx1MDAyNiBMUlVfUkVGU19NQVNLKTtcbitcdFZNX1dBUk5fT05fT05DRShnZW4gXHUwMDNlPSBNQVhfTlJfR0VOUyB8fCBnZW4gXHUwMDNjIDApO1xuK1x0LyogU3RvcmUgZ2VuIG9mZnNldCBieSAxLCB6ZXJvIG1lYW5zIHRoZSBmb2xpbyBpcyBvZmYtbGlzdC4gKi9cbitcdCpmbGFncyBcdTAwMjY9IH5MUlVfR0VOX01BU0s7XG4rXHQqZmxhZ3MgfD0gKGdlbiArIDFVTCkgXHUwMDNjXHUwMDNjIExSVV9HRU5fUEdPRkY7XG4rfVxuK1xuKy8qKlxuKyAqIGxydV9nZXRfZ2VuX2ZsYWdzIC0gUmV0dXJuIHRoZSBMUlUgZ2VuZXJhdGlvbiBudW1iZXIgZnJvbSBmb2xpbyBmbGFncy5cbisgKiBAZmxhZ3M6IGZvbGlvIGZsYWdzXG4rICpcbisgKiBSZXR1cm5zOiBBIG51bWJlciBiZXR3ZWVuIDAgYW5kIChNQVhfTlJfR0VOUyAtIDEpLCBpbmNsdXNpdmUuIFJldHVybnNcbisgKiAtMSBpZiB0aGUgZmxhZ3MgaW5kaWNhdGUgdGhlIGZvbGlvIGlzIG9mZiB0aGUgbGlzdCAoZS5nLiwgaXNvbGF0ZWQpLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgaW50IGxydV9nZXRfZ2VuX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4re1xuK1x0aW50IGdlbiA9ICgoZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbitcbitcdC8qIEV4Y2x1ZGUgdGhlIGxlZ2FsIC0xIGZyb20gdGhlIHVuc2lnbmVkIE1BWF9OUl9HRU5TIGNvbXBhcmlzb24gKi9cbitcdFZNX1dBUk5fT05fT05DRShnZW4gIT0gLTEgXHUwMDI2XHUwMDI2IGdlbiBcdTAwM2U9IE1BWF9OUl9HRU5TKTtcbitcdHJldHVybiBnZW47XG4rfVxuK1xuKy8qKlxuKyAqIGxydV9zZXRfcmVmc19mbGFncyAtIFNldCB0aGUgTFJVIHJlZmVyZW5jZWQgY291bnQgdG8gZm9saW8gZmxhZ3MuXG4rICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFnc1xuKyAqIEByZWZzOiByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IG51bWJlciwgYmV0d2VlbiAwIGFuZCBMUlVfUkVGU19NQVgsIGluY2x1c2l2ZS5cbisgKlxuKyAqIEZvciBNR0xSVSwgUEdfcmVmZXJlbmNlZCBob2xkcyB0aGUgZmlyc3QgcmVmLCBhbmQgdGhlIGV4dHJhIGJpdHMgaG9sZCB0aGVcbisgKiByZW1haW5pbmcgcmVmcy4gRm9yIGNsYXNzaWNhbCBMUlUgdGhlIGV4dHJhIGJpdHMgYXJlIG5vdCB1c2VkLCBzbyBpdCBjYW5cbisgKiBhbHNvIGJlIHNlZW4gYXMgdGhlIHJlZnMgY291bnQgbmV2ZXIgZXhjZWVkcyAxLiBJbiBib3RoIGNhc2VzLCByZWZzID09IDFcbisgKiBtZWFucyBQR19yZWZlcmVuY2VkIGlzIHNldCBhbmQgdGhlIGV4dHJhIGJpdHMgYXJlIHplcm8sIGFuZCByZWZzID09IDAgbWVhbnNcbisgKiBQR19yZWZlcmVuY2VkIGFuZCB0aGUgZXh0cmEgYml0cyBhcmUgYWxsIHVuc2V0LlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfc2V0X3JlZnNfZmxhZ3ModW5zaWduZWQgbG9uZyAqZmxhZ3MsIHVuc2lnbmVkIGludCByZWZzKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4rXHRWTV9XQVJOX09OX09OQ0UocmVmcyBcdTAwM2UgTFJVX1JFRlNfTUFYKTtcbitcdEJVSUxEX0JVR19PTihMUlVfUkVGU19NQVggIT0gKExSVV9SRUZTX01BU0sgXHUwMDNlXHUwMDNlIExSVV9SRUZTX1BHT0ZGKSArIDEpO1xuIFxuK1x0KmZsYWdzIFx1MDAyNj0gfkxSVV9SRUZTX0ZMQUdTO1xuK1x0aWYgKCFyZWZzKVxuK1x0XHRyZXR1cm47XG4rXHQqZmxhZ3MgfD0gKEJJVChQR19yZWZlcmVuY2VkKSB8ICgocmVmcyAtIDFVTCkgXHUwMDNjXHUwMDNjIExSVV9SRUZTX1BHT0ZGKSk7XG4rfVxuK1xuKy8qKlxuKyAqIGxydV9nZXRfcmVmc19mbGFncyAtIFJldHVybiBMUlUgcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCBmcm9tIGZvbGlvIGZsYWdzLlxuKyAqIEBmbGFnczogZm9saW8gZmxhZ3NcbisgKlxuKyAqIFJlYWRzIHRoZSBMUlUgcmVmZXJlbmNlZCBjb3VudCBzZXQgYnkgbHJ1X3NldF9yZWZzX2ZsYWdzKCkuXG4rICovXG4rc3RhdGljIGlubGluZSBpbnQgbHJ1X2dldF9yZWZzX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4re1xuIFx0aWYgKCEoZmxhZ3MgXHUwMDI2IEJJVChQR19yZWZlcmVuY2VkKSkpXG4gXHRcdHJldHVybiAwO1xuIFx0LypcbkBAIC0xNTUsMTEgKzIyMiwyNCBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cmV0dXJuICgoZmxhZ3MgXHUwMDI2IExSVV9SRUZTX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfUkVGU19QR09GRikgKyAxO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfZ2VuKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuK1x0cmV0dXJuIGxydV9nZXRfcmVmc19mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpO1xuK31cbiBcbi1cdHJldHVybiAoKGZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgcmVmcylcbit7XG4rXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuK1xuK1x0ZG8ge1xuK1x0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XG4rXHRcdGxydV9zZXRfcmVmc19mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIHJlZnMpO1xuK1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X2dlbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHJldHVybiBscnVfZ2V0X2dlbl9mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9pc19hY3RpdmUoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgZ2VuKVxuQEAgLTI3MCw3ICszNTAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9hZGRfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpO1xuIFx0ZmxhZ3MgPSAoZ2VuICsgMVVMKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRjtcbiBcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBNSU5fTlJfR0VOUyBhYm91dCBQR19hY3RpdmUgKi9cbi1cdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX0dFTl9NQVNLIHwgQklUKFBHX2FjdGl2ZSksIGZsYWdzKTtcbitcdHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpO1xuIFxuIFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCAtMSwgZ2VuKTtcbiBcdC8qIGZvciBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoKSAqL1xuQEAgLTI5NSw3ICszNzUsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFxuIFx0LyogZm9yIGZvbGlvX21pZ3JhdGVfZmxhZ3MoKSAqL1xuIFx0ZmxhZ3MgPSAhcmVjbGFpbWluZyBcdTAwMjZcdTAwMjYgbHJ1X2dlbl9pc19hY3RpdmUobHJ1dmVjLCBnZW4pID8gQklUKFBHX2FjdGl2ZSkgOiAwO1xuLVx0ZmxhZ3MgPSBzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9HRU5fTUFTSywgZmxhZ3MpO1xuK1x0ZmxhZ3MgPSBzZXRfbWFza19iaXRzKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgTFJVX0dFTl9NQVNLLCBmbGFncyk7XG4gXHRnZW4gPSAoKGZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4gXG4gXHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIGdlbiwgLTEpO1xuQEAgLTMwNCwxMSArMzg0LDE5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXG4rLyoqXG4rICogZm9saW9fbWlncmF0ZV9scnVfcmVmcyAtIGNvcHkgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBhIG5ldyBmb2xpb1xuKyAqIEBuZXc6IHRoZSBkZXN0aW5hdGlvbiBmb2xpb1xuKyAqIEBvbGQ6IHRoZSBzb3VyY2UgZm9saW9cbisgKlxuKyAqIFRyYW5zZmVyIHRoZSByZWZlcmVuY2Ugc3RhdGUgdG8gQG5ldyBkdXJpbmcgbWlncmF0aW9uOiB0aGUgTUdMUlVcbisgKiByZWZzIGNvdW50LCBpbmNsdWRpbmcgUEdfcmVmZXJlbmNlZCwgb3IganVzdCBQR19yZWZlcmVuY2VkIGZvciB0aGVcbisgKiBhY3RpdmUvaW5hY3RpdmUgTFJVLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcbiB7XG4tXHR1bnNpZ25lZCBsb25nIHJlZnMgPSBSRUFEX09OQ0Uob2xkLVx1MDAzZWZsYWdzLmYpIFx1MDAyNiBMUlVfUkVGU19NQVNLO1xuLVxuLVx0c2V0X21hc2tfYml0cyhcdTAwMjZuZXctXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgcmVmcyk7XG4rXHRCVUlMRF9CVUdfT04oTFJVX1JFRlNfTUFTSyBcdTAwMjYgQklUKFBHX3JlZmVyZW5jZWQpKTtcbitcdGZvbGlvX3NldF9scnVfcmVmcyhuZXcsIGZvbGlvX2xydV9yZWZzKG9sZCkpO1xuIH1cbiAjZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cbiBcbkBAIC0zMzcsOSArNDI1LDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcbiB7XG4tXG4rXHRpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKG9sZCkpXG4rXHRcdGZvbGlvX3NldF9yZWZlcmVuY2VkKG5ldyk7XG4gfVxuICNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5pbmRleCA5NGY5YzNmZjU0MTYwLi45YjI3Y2Y1M2JkYmM3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuQEAgLTQ5MiwxMSArNDkyLDE0IEBAIGVudW0gbHJ1dmVjX2ZsYWdzIHtcbiAgKiBmb2xpby1cdTAwM2VmbGFncywgbWFza2VkIGJ5IExSVV9SRUZTX01BU0suXG4gICovXG4gI2RlZmluZSBNQVhfTlJfVElFUlNcdFx0NFVcbisjZGVmaW5lIExSVV9USUVSX01JTlx0XHQwVVxuKyNkZWZpbmUgTFJVX1RJRVJfTUFYXHRcdChNQVhfTlJfVElFUlMgLSAxKVxuIFxuICNpZm5kZWYgX19HRU5FUkFUSU5HX0JPVU5EU19IXG4gXG4gI2RlZmluZSBMUlVfR0VOX01BU0tcdFx0KChCSVQoTFJVX0dFTl9XSURUSCkgLSAxKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRilcbiAjZGVmaW5lIExSVV9SRUZTX01BU0tcdFx0KChCSVQoTFJVX1JFRlNfV0lEVEgpIC0gMSkgXHUwMDNjXHUwMDNjIExSVV9SRUZTX1BHT0ZGKVxuKyNkZWZpbmUgTFJVX1JFRlNfTUFYXHRcdEJJVChMUlVfUkVGU19XSURUSClcbiBcbiAvKlxuICAqIEZvciBmb2xpb3MgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzLFxuZGlmZiAtLWdpdCBhL21tL2ZvbGlvLmMgYi9tbS9mb2xpby5jXG5pbmRleCBjMDJkY2VhOWMwM2MyLi5mYjg3NGZlNDkyYjJiIDEwMDY0NFxuLS0tIGEvbW0vZm9saW8uY1xuKysrIGIvbW0vZm9saW8uY1xuQEAgLTM1MywyNiArMzUzLDI4IEBAIHN0YXRpYyB2b2lkIF9fbHJ1X2NhY2hlX2FjdGl2YXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXG4gc3RhdGljIHZvaWQgbHJ1X2dlbl9pbmNfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4rXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuK1x0aW50IHJlZnM7XG4gXG4gXHRpZiAoZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbykpXG4gXHRcdHJldHVybjtcbiBcbiBcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqL1xuLVx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKSB7XG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcbitcdGlmICghZm9saW9fbHJ1X3JlZnMoZm9saW8pKSB7XG4rXHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbiBcdGRvIHtcbi1cdFx0aWYgKChvbGRfZmxhZ3MgXHUwMDI2IExSVV9SRUZTX01BU0spID09IExSVV9SRUZTX01BU0spIHtcbitcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuK1x0XHRyZWZzID0gbHJ1X2dldF9yZWZzX2ZsYWdzKG9sZF9mbGFncyk7XG4rXHRcdGlmIChyZWZzID09IExSVV9SRUZTX01BWCkge1xuIFx0XHRcdGlmICghZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSlcbiBcdFx0XHRcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcbiBcdFx0XHRyZXR1cm47XG4gXHRcdH1cbi1cbi1cdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzICsgQklUKExSVV9SRUZTX1BHT0ZGKTtcbi1cdH0gd2hpbGUgKCF0cnlfY21weGNoZyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuK1x0XHRscnVfc2V0X3JlZnNfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCByZWZzICsgMSk7XG4rXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbkBAIC0zODQsNyArMzg2LDggQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRpZiAoZ2VuIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MgfCBCSVQoUEdfd29ya2luZ3NldCksIDApO1xuK1x0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbitcdGZvbGlvX2NsZWFyX3dvcmtpbmdzZXQoZm9saW8pO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0c2VxID0gUkVBRF9PTkNFKGZvbGlvX2xydXZlYyhmb2xpbyktXHUwMDNlbHJ1Z2VuLm1pbl9zZXFbdHlwZV0pO1xuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggODU2YTdkMDc1ODZjYy4uMGE2NWFiOGRmMjdhOSAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuKysrIGIvbW0vbWVtY29udHJvbC5jXG5AQCAtMTUyOSwyOCArMTUyOSwxMiBAQCB2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXG4gXHRcdFx0XHRpbnQgemlkLCBsb25nIG5yX3BhZ2VzKVxuIHtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejtcbi1cdHVuc2lnbmVkIGxvbmcgKmxydV9zaXplO1xuLVx0bG9uZyBzaXplO1xuIFxuIFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0bXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcbi1cdGxydV9zaXplID0gXHUwMDI2bXotXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6aWRdW2xydV07XG4tXG4tXHRpZiAobnJfcGFnZXMgXHUwMDNjIDApXG4tXHRcdCpscnVfc2l6ZSArPSBucl9wYWdlcztcbi1cbi1cdHNpemUgPSAqbHJ1X3NpemU7XG4tXHRpZiAoV0FSTl9PTkNFKHNpemUgXHUwMDNjIDAsXG4tXHRcdFwiJXMoJXAsICVkLCAlbGQpOiBscnVfc2l6ZSAlbGRcXG5cIixcbi1cdFx0X19mdW5jX18sIGxydXZlYywgbHJ1LCBucl9wYWdlcywgc2l6ZSkpIHtcbi1cdFx0Vk1fQlVHX09OKDEpO1xuLVx0XHQqbHJ1X3NpemUgPSAwO1xuLVx0fVxuLVxuLVx0aWYgKG5yX3BhZ2VzIFx1MDAzZSAwKVxuLVx0XHQqbHJ1X3NpemUgKz0gbnJfcGFnZXM7XG4rXHRtei1cdTAwM2VscnVfem9uZV9zaXplW3ppZF1bbHJ1XSArPSBucl9wYWdlcztcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jXG5pbmRleCAxNWI0NTgzMmJjZmE3Li5hMzY5ZDBjOTVjMzg2IDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZS5jXG4rKysgYi9tbS9taWdyYXRlLmNcbkBAIC03NzYsOCArNzc2LDkgQEAgdm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0aW50IGNwdXBpZDtcbiBcbi1cdGlmIChmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKVxuLVx0XHRmb2xpb19zZXRfcmVmZXJlbmNlZChuZXdmb2xpbyk7XG4rXHQvKiBDb3B5IHRoZSByZWZlcmVuY2Ugc3RhdGUsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkICovXG4rXHRmb2xpb19taWdyYXRlX2xydV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7XG4rXG4gXHRpZiAoZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpXG4gXHRcdGZvbGlvX21hcmtfdXB0b2RhdGUobmV3Zm9saW8pO1xuIFx0aWYgKGZvbGlvX3Rlc3RfY2xlYXJfYWN0aXZlKGZvbGlvKSkge1xuQEAgLTgwNyw3ICs4MDgsNiBAQCB2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGlmIChmb2xpb190ZXN0X2lkbGUoZm9saW8pKVxuIFx0XHRmb2xpb19zZXRfaWRsZShuZXdmb2xpbyk7XG4gXG4tXHRmb2xpb19taWdyYXRlX3JlZnMobmV3Zm9saW8sIGZvbGlvKTtcbiBcdC8qXG4gXHQgKiBDb3B5IE5VTUEgaW5mb3JtYXRpb24gdG8gdGhlIG5ldyBwYWdlLCB0byBwcmV2ZW50IG92ZXItZWFnZXJcbiBcdCAqIGZ1dHVyZSBtaWdyYXRpb25zIG9mIHRoaXMgc2FtZSBwYWdlLlxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGZkZDEzMjk5YTA0YTkuLmU3ZDM3OWM2ZTcwM2EgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC04NDMsMTkgKzg0MywyMiBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4gXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKSB7XG4gXHRcdC8qIEFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLiAqL1xuIFx0XHRpZiAoaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7XG4tXHRcdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTtcbitcdFx0XHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XG4rXHRcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdFx0fVxuIFxuLVx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XG4rXHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbiBcdC8qIFByb21vdGUgb24gc2Vjb25kIGFjY2VzcyAqL1xuLVx0aWYgKGZvbGlvX2xydV9yZWZzKGZvbGlvKSBcdTAwM2UgMSlcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTtcbi1cdGVsc2VcbitcdGlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgXHUwMDNlIDEpIHtcbitcdFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xuK1x0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuK1x0fSBlbHNlIHtcbiBcdFx0Zm9saW9fbWFya19hY2Nlc3NlZChmb2xpbyk7XG4rXHR9XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gI2Vsc2VcbkBAIC0zMTk1LDggKzMxOTgsOCBAQCBzdHJ1Y3QgY3RybF9wb3Mge1xuIFx0aW50IGdhaW47XG4gfTtcbiBcbi1zdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2Fpbixcbi1cdFx0XHQgIHN0cnVjdCBjdHJsX3BvcyAqcG9zKVxuK3N0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXJfbWluLFxuK1x0XHRcdCAgaW50IHRpZXJfbWF4LCBpbnQgZ2Fpbiwgc3RydWN0IGN0cmxfcG9zICpwb3MpXG4ge1xuIFx0aW50IGk7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbkBAIC0zMjA1LDcgKzMyMDgsNyBAQCBzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2FpbixcbiBcdHBvcy1cdTAwM2VnYWluID0gZ2FpbjtcbiBcdHBvcy1cdTAwM2VyZWZhdWx0ZWQgPSBwb3MtXHUwMDNldG90YWwgPSAwO1xuIFxuLVx0Zm9yIChpID0gdGllciAlIE1BWF9OUl9USUVSUzsgaSBcdTAwM2M9IG1pbih0aWVyLCBNQVhfTlJfVElFUlMgLSAxKTsgaSsrKSB7XG4rXHRmb3IgKGkgPSB0aWVyX21pbjsgaSBcdTAwM2M9IHRpZXJfbWF4OyBpKyspIHtcbiBcdFx0cG9zLVx1MDAzZXJlZmF1bHRlZCArPSBscnVnZW4tXHUwMDNlYXZnX3JlZmF1bHRlZFt0eXBlXVtpXSArXG4gXHRcdFx0XHQgIGF0b21pY19sb25nX3JlYWQoXHUwMDI2bHJ1Z2VuLVx1MDAzZXJlZmF1bHRlZFtoaXN0XVt0eXBlXVtpXSk7XG4gXHRcdHBvcy1cdTAwM2V0b3RhbCArPSBscnVnZW4tXHUwMDNlYXZnX3RvdGFsW3R5cGVdW2ldICtcbkBAIC0zMjY2LDExICszMjY5LDExIEBAIHN0YXRpYyBib29sIHBvc2l0aXZlX2N0cmxfZXJyKHN0cnVjdCBjdHJsX3BvcyAqc3AsIHN0cnVjdCBjdHJsX3BvcyAqcHYpXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiBcbiAvKiBwcm9tb3RlIHBhZ2VzIGFjY2Vzc2VkIHRocm91Z2ggcGFnZSB0YWJsZXMgKi9cbi1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbitzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGludCAqdHlwZSxcbitcdFx0XHQgICAgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiB7XG4tXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuLVxuLVx0Vk1fV0FSTl9PTl9PTkNFKGdlbiBcdTAwM2U9IE1BWF9OUl9HRU5TKTtcbitcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4rXHRpbnQgb2xkX2dlbjtcbiBcbiBcdC8qXG4gXHQgKiBTZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MsIGFuZCBhY3RpdmF0ZSBmaWxlLWJhY2tlZFxuQEAgLTMyNzksMjAgKzMyODIsMjUgQEAgc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFcbiBcdCAqL1xuIFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7XG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcbitcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcbiBcdFx0cmV0dXJuIC0xO1xuIFx0fVxuIFxuIFx0ZG8ge1xuK1x0XHRvbGRfZ2VuID0gbHJ1X2dldF9nZW5fZmxhZ3Mob2xkX2ZsYWdzKTtcbitcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuK1xuIFx0XHQvKiBscnVfZ2VuX2RlbF9mb2xpbygpIGhhcyBpc29sYXRlZCB0aGlzIHBhZ2U/ICovXG4tXHRcdGlmICghKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSlcbi1cdFx0XHRyZXR1cm4gLTE7XG4rXHRcdGlmIChvbGRfZ2VuIFx1MDAzYyAwKVxuK1x0XHRcdGJyZWFrO1xuIFxuLVx0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgXHUwMDI2IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpO1xuLVx0XHRuZXdfZmxhZ3MgfD0gKChnZW4gKyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGKSB8IEJJVChQR193b3JraW5nc2V0KTtcbi1cdH0gd2hpbGUgKCF0cnlfY21weGNoZyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuK1x0XHRscnVfc2V0X2dlbl9mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIG5ld19nZW4pO1xuK1x0XHRscnVfc2V0X3JlZnNfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCAwKTtcbitcdFx0bmV3X2ZsYWdzIHw9IEJJVChQR193b3JraW5nc2V0KTtcbitcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4gXG4tXHRyZXR1cm4gKChvbGRfZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbitcdCp0eXBlID0gZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUoXHUwMDI2b2xkX2ZsYWdzKTtcbitcdHJldHVybiBvbGRfZ2VuO1xuIH1cbiBcbiAvKiBwcm90ZWN0IHBhZ2VzIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycyAqL1xuQEAgLTMzMDEsMjEgKzMzMDksMjAgQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xuIFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG4gXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuLVx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbi1cbi1cdFZNX1dBUk5fT05fT05DRV9GT0xJTyghKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSwgZm9saW8pO1xuK1x0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbiBcbiBcdGRvIHtcbi1cdFx0bmV3X2dlbiA9ICgob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4rXHRcdG5ld19nZW4gPSBscnVfZ2V0X2dlbl9mbGFncyhvbGRfZmxhZ3MpO1xuK1xuIFx0XHQvKiBmb2xpb191cGRhdGVfZ2VuKCkgaGFzIHByb21vdGVkIHRoaXMgcGFnZT8gKi9cbiBcdFx0aWYgKG5ld19nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBuZXdfZ2VuICE9IG9sZF9nZW4pXG4gXHRcdFx0cmV0dXJuIG5ld19nZW47XG4gXG4rXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncztcbiBcdFx0bmV3X2dlbiA9IChvbGRfZ2VuICsgMSkgJSBNQVhfTlJfR0VOUztcbi1cbi1cdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzIFx1MDAyNiB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTtcbi1cdFx0bmV3X2ZsYWdzIHw9IChuZXdfZ2VuICsgMVVMKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRjtcbi1cdH0gd2hpbGUgKCF0cnlfY21weGNoZyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuK1x0XHRscnVfc2V0X2dlbl9mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIG5ld19nZW4pO1xuK1x0XHRscnVfc2V0X3JlZnNfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCAwKTtcbitcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4gXG4gXHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xuIFxuQEAgLTMzMjMsOSArMzMzMCw4IEBAIHN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gfVxuIFxuIHN0YXRpYyB2b2lkIHVwZGF0ZV9iYXRjaF9zaXplKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tXHRcdFx0ICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuKVxuK1x0XHRcdCAgICAgIGludCBvbGRfZ2VuLCBpbnQgbmV3X2dlbiwgaW50IHR5cGUpXG4ge1xuLVx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG4gXHRpbnQgem9uZSA9IGZvbGlvX3pvbmVudW0oZm9saW8pO1xuIFx0aW50IGRlbHRhID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIFxuQEAgLTM1MTIsMjIgKzM1MTgsMjQgQEAgc3RhdGljIGJvb2wgc3VpdGFibGVfdG9fc2NhbihpbnQgdG90YWwsIGludCB5b3VuZylcbiB9XG4gXG4gc3RhdGljIHZvaWQgd2Fsa191cGRhdGVfZm9saW8oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBib29sIGRpcnR5KVxuK1x0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgZGlydHkpXG4ge1xuLVx0aW50IG9sZF9nZW47XG4rXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiwgdHlwZTtcbiBcbiBcdGlmICghZm9saW8pXG4gXHRcdHJldHVybjtcbiBcbitcdG5ld19nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKFJFQURfT05DRShscnV2ZWMtXHUwMDNlbHJ1Z2VuLm1heF9zZXEpKTtcbitcbiBcdGlmIChkaXJ0eSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIFx1MDAyNlx1MDAyNlxuIFx0ICAgICEoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAgICFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpKVxuIFx0XHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbiBcbiBcdGlmICh3YWxrKSB7XG4tXHRcdG9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpO1xuK1x0XHRvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgXHUwMDI2dHlwZSwgXHUwMDI2dm1hLVx1MDAzZWZsYWdzKTtcbiBcdFx0aWYgKG9sZF9nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXG4tXHRcdFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xuK1x0XHRcdHVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuLCB0eXBlKTtcbiBcdH0gZWxzZSBpZiAobHJ1X2dlbl9zZXRfcmVmcyhmb2xpbywgXHUwMDI2dm1hLVx1MDAzZWZsYWdzKSkge1xuIFx0XHRvbGRfZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7XG4gXHRcdGlmIChvbGRfZ2VuIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgb2xkX2dlbiAhPSBuZXdfZ2VuKVxuQEAgLTM1NDksOCArMzU1Nyw2IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXHUwMDNlcHJpdmF0ZTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVx1MDAzZWxydXZlYyk7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdERFRklORV9NQVhfU0VRKHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xuIFx0dW5zaWduZWQgaW50IG5yO1xuIFx0cG1kX3QgcG1kdmFsO1xuIFxuQEAgLTM2MDEsNyArMzYwNyw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAobGFzdCAhPSBmb2xpbykge1xuLVx0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLVx1MDAzZXZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC0zNjE0LDcgKzM2MjAsNyBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0d2Fsay1cdTAwM2VtbV9zdGF0c1tNTV9MRUFGX1lPVU5HXSArPSBucjtcbiBcdH1cbiBcbi1cdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCB3YWxrLVx1MDAzZWxydXZlYywgbGFzdCwgZGlydHkpO1xuIFx0bGFzdCA9IE5VTEw7XG4gXG4gXHRpZiAoaSBcdTAwM2MgUFRSU19QRVJfUFRFIFx1MDAyNlx1MDAyNiBnZXRfbmV4dF92bWEoUE1EX01BU0ssIFBBR0VfU0laRSwgYXJncywgXHUwMDI2c3RhcnQsIFx1MDAyNmVuZCkpXG5AQCAtMzYzNyw4ICszNjQzLDYgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcbiBcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVx1MDAzZXByaXZhdGU7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay1cdTAwM2VscnV2ZWMpO1xuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdCh3YWxrLVx1MDAzZWxydXZlYyk7XG4tXHRERUZJTkVfTUFYX1NFUSh3YWxrLVx1MDAzZWxydXZlYyk7XG4tXHRpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcbiBcbiBcdFZNX1dBUk5fT05fT05DRShwdWRfbGVhZigqcHVkKSk7XG4gXG5AQCAtMzY5Miw3ICszNjk2LDcgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcbiBcdFx0XHRnb3RvIG5leHQ7XG4gXG4gXHRcdGlmIChsYXN0ICE9IGZvbGlvKSB7XG4tXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIHdhbGstXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXG4gXHRcdFx0bGFzdCA9IGZvbGlvO1xuIFx0XHRcdGRpcnR5ID0gZmFsc2U7XG5AQCAtMzcwNiw3ICszNzEwLDcgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcbiBcdFx0aSA9IGkgXHUwMDNlIE1JTl9MUlVfQkFUQ0ggPyAwIDogZmluZF9uZXh0X2JpdChiaXRtYXAsIE1JTl9MUlVfQkFUQ0gsIGkpICsgMTtcbiBcdH0gd2hpbGUgKGkgXHUwMDNjPSBNSU5fTFJVX0JBVENIKTtcbiBcbi1cdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4rXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIHdhbGstXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXG4gXHRsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTtcbiBcdHNwaW5fdW5sb2NrKHB0bCk7XG5AQCAtNDI3MCw4ICs0Mjc0LDYgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGZvbGlvX3BnZGF0KGZvbGlvKTtcbiBcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcbiBcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZTtcbi1cdHVuc2lnbmVkIGxvbmcgbWF4X3NlcTtcbi1cdGludCBnZW47XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKHB2bXctXHUwMDNlcHRsKTtcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2xydShmb2xpbyksIGZvbGlvKTtcbkBAIC00MzA4LDggKzQzMTAsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG4gXG4gXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xuIFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcbi1cdG1heF9zZXEgPSBSRUFEX09OQ0UoKGxydXZlYyktXHUwMDNlbHJ1Z2VuLm1heF9zZXEpO1xuLVx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcbiBcdG1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XG4gXG4gXHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xuQEAgLTQzNDEsNyArNDM0MSw3IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKGxhc3QgIT0gZm9saW8pIHtcbi1cdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXG4gXHRcdFx0bGFzdCA9IGZvbGlvO1xuIFx0XHRcdGRpcnR5ID0gZmFsc2U7XG5AQCAtNDM1MywxMyArNDM1MywxNCBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG4gXHRcdHlvdW5nICs9IG5yO1xuIFx0fVxuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXG4gXHRsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTtcbiBcbiBcdC8qIGZlZWRiYWNrIGZyb20gcm1hcCB3YWxrZXJzIHRvIHBhZ2UgdGFibGUgd2Fsa2VycyAqL1xuIFx0aWYgKG1tX3N0YXRlIFx1MDAyNlx1MDAyNiBzdWl0YWJsZV90b19zY2FuKGksIHlvdW5nKSlcbi1cdFx0dXBkYXRlX2Jsb29tX2ZpbHRlcihtbV9zdGF0ZSwgbWF4X3NlcSwgcHZtdy1cdTAwM2VwbWQpO1xuK1x0XHR1cGRhdGVfYmxvb21fZmlsdGVyKG1tX3N0YXRlLCBSRUFEX09OQ0UobHJ1dmVjLVx1MDAzZWxydWdlbi5tYXhfc2VxKSxcbitcdFx0XHRcdCAgICBwdm13LVx1MDAzZXBtZCk7XG4gXG4gXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4gXG5AQCAtNDcxNiw3ICs0NzE3LDcgQEAgc3RhdGljIGJvb2wgaXNvbGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2FcbiBcbiBcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqL1xuIFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKVxuLVx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIDApO1xuK1x0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuIFxuIFx0c3VjY2VzcyA9IGxydV9nZW5fZGVsX2ZvbGlvKGxydXZlYywgZm9saW8sIHRydWUpO1xuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFzdWNjZXNzLCBmb2xpbyk7XG5AQCAtNDgwOSw5ICs0ODEwLDkgQEAgc3RhdGljIGludCBnZXRfdGllcl9pZHgoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSlcbiBcdCAqIFRoaXMgdmFsdWUgaXMgY2hvc2VuIGJlY2F1c2UgYW55IG90aGVyIHRpZXIgd291bGQgaGF2ZSBhdCBsZWFzdCB0d2ljZVxuIFx0ICogYXMgbWFueSByZWZhdWx0cyBhcyB0aGUgZmlyc3QgdGllci5cbiBcdCAqL1xuLVx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIDAsIDIsIFx1MDAyNnNwKTtcbi1cdGZvciAodGllciA9IDE7IHRpZXIgXHUwMDNjIE1BWF9OUl9USUVSUzsgdGllcisrKSB7XG4tXHRcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0aWVyLCAzLCBcdTAwMjZwdik7XG4rXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NSU4sIDIsIFx1MDAyNnNwKTtcbitcdGZvciAodGllciA9IExSVV9USUVSX01JTiArIDE7IHRpZXIgXHUwMDNjPSBMUlVfVElFUl9NQVg7IHRpZXIrKykge1xuK1x0XHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdGllciwgdGllciwgMywgXHUwMDI2cHYpO1xuIFx0XHRpZiAoIXBvc2l0aXZlX2N0cmxfZXJyKFx1MDAyNnNwLCBcdTAwMjZwdikpXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG5AQCAtNDgzMiw4ICs0ODMzLDEwIEBAIHN0YXRpYyBpbnQgZ2V0X3R5cGVfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxuIFx0ICogQ29tcGFyZSB0aGUgc3VtIG9mIGFsbCB0aWVycyBvZiBhbm9uIHdpdGggdGhhdCBvZiBmaWxlIHRvIGRldGVybWluZVxuIFx0ICogd2hpY2ggdHlwZSB0byBzY2FuLlxuIFx0ICovXG4tXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBNQVhfTlJfVElFUlMsIHN3YXBwaW5lc3MsIFx1MDAyNnNwKTtcbi1cdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIE1BWF9OUl9USUVSUywgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCBcdTAwMjZwdik7XG4rXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCxcbitcdFx0ICAgICAgc3dhcHBpbmVzcywgXHUwMDI2c3ApO1xuK1x0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NQVgsXG4rXHRcdCAgICAgIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgXHUwMDI2cHYpO1xuIFxuIFx0cmV0dXJuIHBvc2l0aXZlX2N0cmxfZXJyKFx1MDAyNnNwLCBcdTAwMjZwdik7XG4gfVxuQEAgLTQ5MzIsOCArNDkzNSwxMCBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0fVxuIFxuIFx0XHQvKiBkb24ndCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqL1xuLVx0XHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pXG4tXHRcdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX2FjdGl2ZSkpO1xuK1x0XHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pIHtcbitcdFx0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuK1x0XHRcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xuK1x0XHR9XG4gXHR9XG4gXG4gXHRtb3ZlX2ZvbGlvc190b19scnUoXHUwMDI2bGlzdCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo0MToyMS4wNDI4NTg4NzZaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTI1MzA2NzM5MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRXZhbHVhdGlvbjogUGF0Y2ggU2VyaWVzIEFuYWx5c2lzKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lIGlmIGl0IHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTXkgZm9jdXMgaXMgYWx3YXlzIG9uIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMsIGVzcGVjaWFsbHkgdGhvc2UgdGhhdCBjb3VsZCBsZWFkIHRvIGluZm9ybWF0aW9uIGxlYWtzIG9yIGV4cGxvaXRhYmxlIHZ1bG5lcmFiaWxpdGllcy5cblxuRmlyc3QsIEkndmUgbWV0aWN1bG91c2x5IGV4YW1pbmVkIHRoZSBmaWxlIG1vZGlmaWNhdGlvbnMuIFRoZSBjaGFuZ2VzIGFyZSBjb25jZW50cmF0ZWQgaW4gYG1lbWNvbnRyb2wuaGAsIGBtbV9pbmxpbmUuaGAsIGBtbXpvbmUuaGAsIGBmb2xpby5jYCwgYG1lbWNvbnRyb2wuY2AsIGBtaWdyYXRlLmNgLCBhbmQgYHZtc2Nhbi5jYC4gSXQncyBhIG1peCBvZiBkYXRhIHN0cnVjdHVyZSBhZGp1c3RtZW50cyBhbmQgZnVuY3Rpb24gcmVmYWN0b3JpbmcgcmVsYXRlZCB0byB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIGltcGxlbWVudGF0aW9uLCBmb2xpbyBmbGFncywgYW5kIG1lbW9yeSBjb250cm9sIGdyb3Vwcy4gVGhlIGtleSBzdHJ1Y3R1cmFsIGNoYW5nZSBpcyBpbiBgbWVtX2Nncm91cF9wZXJfbm9kZWAsIHdoZXJlIGBscnVfem9uZV9zaXplYCBpcyBjaGFuZ2VkIGZyb20gYHVuc2lnbmVkIGxvbmdgIHRvIGBsb25nYC4gVGhlcmUgYXJlIGFkZGl0aW9ucyBvZiBpbmxpbmUgZnVuY3Rpb25zIGZvciBmbGFnIG1hbmFnZW1lbnQgYW5kIHVwZGF0ZXMgdG8gc2V2ZXJhbCBMUlUtcmVsYXRlZCBmdW5jdGlvbnMuXG5cbkkndmUgc3BlY2lmaWNhbGx5IHNjcnV0aW5pemVkIGB3YWxrX3VwZGF0ZV9mb2xpb2AgYW5kIGl0cyBjYWxsIHRvIGBmb2xpb191cGRhdGVfZ2VuYC4gVGhlIHBvdGVudGlhbCBpc3N1ZSB3YXMgd2hldGhlciB0aGUgYHR5cGVgIHZhcmlhYmxlLCBwYXNzZWQgdG8gYHVwZGF0ZV9iYXRjaF9zaXplYCwgbWlnaHQgYmUgdW5pbml0aWFsaXplZCBpZiBgZm9saW9fdXBkYXRlX2dlbmAgcmV0dXJuZWQgYW4gZWFybHkgZXhpdC4gSG93ZXZlciwgYWZ0ZXIgY2FyZWZ1bCByZXZpZXcsIEkndmUgY29uZmlybWVkIHRoYXQgdGhpcyBpc24ndCB0aGUgY2FzZS4gVGhlIGBpZmAgY29uZGl0aW9uIGNvcnJlY3RseSBoYW5kbGVzIHRoZSBzY2VuYXJpbyB3aGVyZSB0aGUgZWFybHkgcmV0dXJuIG9mIGAtMWAgb2NjdXJzLCBwcmV2ZW50aW5nIHRoZSB1c2Ugb2YgYW4gdW5pbml0aWFsaXplZCBgdHlwZWAuIEkndmUgYWxzbyBjaGVja2VkIHdoZXRoZXIgdGhlcmUgYXJlIGZ1cnRoZXIgdXNhZ2VzIG9mIG90aGVyIHZhcmlhYmxlcyB3aXRoaW4gYHdhbGtfdXBkYXRlX2ZvbGlvYCwgZmluZGluZyB0aGF0IG5vbmUgcHJlc2VudCBhbnkgcmlzay4gSSBmb2xsb3dlZCB0aGUgc2FtZSBwcmluY2lwbGUgZm9yIGByZWFkX2N0cmxfcG9zYCBhbmQgZm9yIGBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplYC5cblxuVGhlIGBscnVfc2V0X3JlZnNfZmxhZ3NgLCBgbHJ1X2dldF9yZWZzX2ZsYWdzYCwgYGZvbGlvX3NldF9scnVfcmVmc2AsIGBscnVfc2V0X2dlbl9mbGFnc2AsIGFuZCBgbHJ1X2dldF9nZW5fZmxhZ3NgIGZ1bmN0aW9ucyBhcmUgYWxsIG1hbmlwdWxhdGluZyB0aGUgYGZvbGlvLVx1MDAzZWZsYWdzYCwgd2hpY2ggYXJlIGB1bnNpZ25lZCBsb25nYCBmaWVsZHMuIEkndmUgY29uZmlybWVkIHRoYXQgdGhlcmUncyBubyByaXNrIG9mIGFueSB1bmluaXRpYWxpemVkIHJlYWRzLlxuXG5DcnVjaWFsbHksIEkndmUgZm91bmQgbm8gZXZpZGVuY2Ugb2YgYW55IGRhdGEgc3RydWN0dXJlcyBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2Ugb3IgYW55IG5ldyBrZXJuZWwgaW50ZXJmYWNlcyBiZWluZyBleHBvc2VkIG9yIG1vZGlmaWVkLiBUaGVyZSBhcmUgbm8gYWxsb2NhdGlvbnMgb3IgaW5pdGlhbGl6YXRpb25zIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGxhdGVyIGJlIHJlYWQuIFRoZSBjaGFuZ2VzIGRlYWwgd2l0aCB0aGUgTFJVIGxvZ2ljLCB3aGljaCBpcyBjcml0aWNhbCwgYnV0IEkgZG9uJ3Qgc2VlIGFueSBkaXJlY3QgaW5mb3JtYXRpb24gbGVha2FnZSByaXNrcy5cblxuVGhlcmVmb3JlLCBhZnRlciB0aG9yb3VnaGx5IGFuYWx5emluZyB0aGVzZSBjaGFuZ2VzLCBJJ20gY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCBzZXJpZXMgZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrcyB0aGF0IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBTdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycyBsaWtlIEtBU0FOLCBhbmQgbG9ja2RlcCwgc2hvdWxkIGNhdGNoIGFueSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBpbiB0aGlzIGFyZWEuIEtNU0FOIGlzIG92ZXJraWxsIGZvciB0aGlzIHNwZWNpZmljIHNldCBvZiBjaGFuZ2VzLiBUaGlzIHBhdGNoIGlzIGEgcmVmYWN0b3JpbmcsIGFuZCBhIGNoYW5nZSB0byBhIHZhcmlhYmxlJ3MgZGF0YSB0eXBlLCBhbmQgdGhpcyBzaG91bGQgYmUgdGVzdGVkIGluIHRoZSBub3JtYWwgbWFubmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYxOSwiT3V0cHV0VG9rZW5zIjoyNDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDIwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NDE6MzMuNTczNTM2MjM4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE0NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBmb2xpbyBmbGFnIG9wZXJhdGlvbnMgKGludHJvZHVjaW5nIGhlbHBlcnMgbGlrZSBscnVfc2V0X2dlbl9mbGFncywgbHJ1X3NldF9yZWZzX2ZsYWdzLCBmb2xpb19zZXRfbHJ1X3JlZnMpLCB1cGRhdGVzIGZvbGlvIHJlZmVyZW5jZS9nZW5lcmF0aW9uIHRyYWNraW5nIGFjcm9zcyByZWNsYWltIGFuZCBtaWdyYXRpb24gcGF0aHMsIGFuZCBjaGFuZ2VzIG1lbWNnIGxydV96b25lX3NpemUgdHJhY2tpbmcgZnJvbSB1bnNpZ25lZCBsb25nIHRvIHNpZ25lZCBsb25nIHdpdGggYm91bmRzIGNoZWNraW5nLlxcblxcbk5vIGtlcm5lbC10by11c2VyIGRhdGEgY29waWVzLCBpb2N0bHMsIG9yIHVzZXItZmFjaW5nIHN0cnVjdHMgYXJlIG1vZGlmaWVkLiBTdGFjayB2YXJpYWJsZXMgaW50cm9kdWNlZCAoZS5nLiwgYHR5cGVgIGluIGB3YWxrX3VwZGF0ZV9mb2xpb2ApIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgcmVhZCAoYXMgYHR5cGVgIGlzIG9ubHkgcGFzc2VkIHRvIGB1cGRhdGVfYmF0Y2hfc2l6ZWAgd2hlbiBgb2xkX2dlbiBcXHUwMDNlPSAwYCwgd2hpY2ggZ3VhcmFudGVlcyBhc3NpZ25tZW50IGluIGBmb2xpb191cGRhdGVfZ2VuYCkuIE5vIHVuaW5pdGlhbGl6ZWQgaGVhcCwgc3RhY2ssIG9yIHBhZ2UgYWxsb2NhdGlvbnMgYXJlIGV4cG9zZWQuIFBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyBpbiB0aGVzZSBNTSBwYXRocyAoc3VjaCBhcyBjb25jdXJyZW5jeSBpc3N1ZXMgb3IgaW52YWxpZCBmb2xpbyBkZXJlZmVyZW5jZXMpIGZhbGwgdW5kZXIgS0FTQU4vTE9DS0RFUCByYXRoZXIgdGhhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBkZXRlY3RvcnMuIFRodXMsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyBNdWx0aS1HZW4gTFJVIChNR0xSVSkgZm9saW8gZmxhZyBvcGVyYXRpb25zIChpbnRyb2R1Y2luZyBoZWxwZXJzIGxpa2UgbHJ1X3NldF9nZW5fZmxhZ3MsIGxydV9zZXRfcmVmc19mbGFncywgZm9saW9fc2V0X2xydV9yZWZzKSwgdXBkYXRlcyBmb2xpbyByZWZlcmVuY2UvZ2VuZXJhdGlvbiB0cmFja2luZyBhY3Jvc3MgcmVjbGFpbSBhbmQgbWlncmF0aW9uIHBhdGhzLCBhbmQgY2hhbmdlcyBtZW1jZyBscnVfem9uZV9zaXplIHRyYWNraW5nIGZyb20gdW5zaWduZWQgbG9uZyB0byBzaWduZWQgbG9uZyB3aXRoIGJvdW5kcyBjaGVja2luZy5cXG5cXG5ObyBrZXJuZWwtdG8tdXNlciBkYXRhIGNvcGllcywgaW9jdGxzLCBvciB1c2VyLWZhY2luZyBzdHJ1Y3RzIGFyZSBtb2RpZmllZC4gU3RhY2sgdmFyaWFibGVzIGludHJvZHVjZWQgKGUuZy4sIGB0eXBlYCBpbiBgd2Fsa191cGRhdGVfZm9saW9gKSBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIHJlYWQgKGFzIGB0eXBlYCBpcyBvbmx5IHBhc3NlZCB0byBgdXBkYXRlX2JhdGNoX3NpemVgIHdoZW4gYG9sZF9nZW4gXFx1MDAzZT0gMGAsIHdoaWNoIGd1YXJhbnRlZXMgYXNzaWdubWVudCBpbiBgZm9saW9fdXBkYXRlX2dlbmApLiBObyB1bmluaXRpYWxpemVkIGhlYXAsIHN0YWNrLCBvciBwYWdlIGFsbG9jYXRpb25zIGFyZSBleHBvc2VkLiBQb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgaW4gdGhlc2UgTU0gcGF0aHMgKHN1Y2ggYXMgY29uY3VycmVuY3kgaXNzdWVzIG9yIGludmFsaWQgZm9saW8gZGVyZWZlcmVuY2VzKSBmYWxsIHVuZGVyIEtBU0FOL0xPQ0tERVAgcmF0aGVyIHRoYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgZGV0ZWN0b3JzLiBUaHVzLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowj9pp8[1] Phase: Succeeded StartedAt: 2026-09-03 04:41:45 +0000 UTC FinishedAt: 2026-09-03 04:41:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9pp8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-03 04:41:45 +0000 UTC FinishedAt: 2026-09-03 04:41:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9pp8[2] Phase: Succeeded StartedAt: 2026-09-03 04:41:45 +0000 UTC FinishedAt: 2026-09-03 08:32:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9pp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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","lru_gen_reparent_memcg","lru_gen_soft_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"8eeb8a1b-b69a-46a3-87c1-33c3755a0210","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-03 04:41:45 +0000 UTC FinishedAt: 2026-09-03 08:32:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"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","lru_gen_reparent_memcg","lru_gen_soft_reclaim"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"8eeb8a1b-b69a-46a3-87c1-33c3755a0210","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowj9pp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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","lru_gen_reparent_memcg","lru_gen_soft_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"8eeb8a1b-b69a-46a3-87c1-33c3755a0210","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-03 04:41:45 +0000 UTC FinishedAt: 2026-09-03 04:41:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9pp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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","lru_gen_reparent_memcg","lru_gen_soft_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"8eeb8a1b-b69a-46a3-87c1-33c3755a0210","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-03 04:41:45 +0000 UTC FinishedAt: 2026-09-03 04:41:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowj9pp8/series-workflowj9pp8-convert-artifact-2957083886/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj9pp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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","lru_gen_reparent_memcg","lru_gen_soft_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"8eeb8a1b-b69a-46a3-87c1-33c3755a0210","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-03 04:41:55 +0000 UTC FinishedAt: 2026-09-03 04:59:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9pp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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","lru_gen_reparent_memcg","lru_gen_soft_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"8eeb8a1b-b69a-46a3-87c1-33c3755a0210","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-03 04:41:55 +0000 UTC FinishedAt: 2026-09-03 04:59:45 +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:*3547ea4c-9ae6-4e85-b273-73fab3ea054e,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-workflowj9pp8/series-workflowj9pp8-convert-artifact-2957083886/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": "ee116452-e976-4fb8-aeab-2625df97f1f0", "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-workflowj9pp8/series-workflowj9pp8-build-action-813812820/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj9pp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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","lru_gen_reparent_memcg","lru_gen_soft_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"8eeb8a1b-b69a-46a3-87c1-33c3755a0210","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-03 04:41:55 +0000 UTC FinishedAt: 2026-09-03 04:59:35 +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:*3547ea4c-9ae6-4e85-b273-73fab3ea054e,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-workflowj9pp8/series-workflowj9pp8-convert-artifact-2957083886/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": "ee116452-e976-4fb8-aeab-2625df97f1f0", "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-workflowj9pp8/series-workflowj9pp8-build-action-813812820/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj9pp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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","lru_gen_reparent_memcg","lru_gen_soft_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"8eeb8a1b-b69a-46a3-87c1-33c3755a0210","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-03 04:59:45 +0000 UTC FinishedAt: 2026-09-03 04:59:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9pp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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","lru_gen_reparent_memcg","lru_gen_soft_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"8eeb8a1b-b69a-46a3-87c1-33c3755a0210","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-03 04:59:45 +0000 UTC FinishedAt: 2026-09-03 04:59:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9pp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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","lru_gen_reparent_memcg","lru_gen_soft_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"8eeb8a1b-b69a-46a3-87c1-33c3755a0210","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-03 04:59:45 +0000 UTC FinishedAt: 2026-09-03 04:59:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9pp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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","lru_gen_reparent_memcg","lru_gen_soft_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"8eeb8a1b-b69a-46a3-87c1-33c3755a0210","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-03 04:59:45 +0000 UTC FinishedAt: 2026-09-03 04:59:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"8eeb8a1b-b69a-46a3-87c1-33c3755a0210","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowj9pp8/series-workflowj9pp8-convert-artifact-2057466081/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj9pp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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","lru_gen_reparent_memcg","lru_gen_soft_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"8eeb8a1b-b69a-46a3-87c1-33c3755a0210","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-03 04:59:55 +0000 UTC FinishedAt: 2026-09-03 05:02:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9pp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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","lru_gen_reparent_memcg","lru_gen_soft_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"8eeb8a1b-b69a-46a3-87c1-33c3755a0210","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-03 04:59:55 +0000 UTC FinishedAt: 2026-09-03 05:01:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ee116452-e976-4fb8-aeab-2625df97f1f0,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-workflowj9pp8/series-workflowj9pp8-build-action-813812820/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-workflowj9pp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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","lru_gen_reparent_memcg","lru_gen_soft_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"8eeb8a1b-b69a-46a3-87c1-33c3755a0210","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-03 05:02:08 +0000 UTC FinishedAt: 2026-09-03 05:02:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9pp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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","lru_gen_reparent_memcg","lru_gen_soft_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"8eeb8a1b-b69a-46a3-87c1-33c3755a0210","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-03 05:02:08 +0000 UTC FinishedAt: 2026-09-03 05:02:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9pp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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","lru_gen_reparent_memcg","lru_gen_soft_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"8eeb8a1b-b69a-46a3-87c1-33c3755a0210","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-03 05:02:08 +0000 UTC FinishedAt: 2026-09-03 05:25:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9pp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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","lru_gen_reparent_memcg","lru_gen_soft_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"8eeb8a1b-b69a-46a3-87c1-33c3755a0210","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-03 05:02:08 +0000 UTC FinishedAt: 2026-09-03 05:25:37 +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:*3547ea4c-9ae6-4e85-b273-73fab3ea054e,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-workflowj9pp8/series-workflowj9pp8-convert-artifact-2057466081/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": "a3f0ddcf-0287-4f36-b231-f2c6ac546723", "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-workflowj9pp8/series-workflowj9pp8-build-action-2608460269/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj9pp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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","lru_gen_reparent_memcg","lru_gen_soft_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"8eeb8a1b-b69a-46a3-87c1-33c3755a0210","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-03 05:02:08 +0000 UTC FinishedAt: 2026-09-03 05:25:12 +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:*3547ea4c-9ae6-4e85-b273-73fab3ea054e,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-workflowj9pp8/series-workflowj9pp8-convert-artifact-2057466081/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": "a3f0ddcf-0287-4f36-b231-f2c6ac546723", "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-workflowj9pp8/series-workflowj9pp8-build-action-2608460269/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj9pp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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","lru_gen_reparent_memcg","lru_gen_soft_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"8eeb8a1b-b69a-46a3-87c1-33c3755a0210","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-03 05:25:37 +0000 UTC FinishedAt: 2026-09-03 05:25:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9pp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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","lru_gen_reparent_memcg","lru_gen_soft_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"8eeb8a1b-b69a-46a3-87c1-33c3755a0210","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-03 05:25:37 +0000 UTC FinishedAt: 2026-09-03 05:25:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9pp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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","lru_gen_reparent_memcg","lru_gen_soft_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"8eeb8a1b-b69a-46a3-87c1-33c3755a0210","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-03 05:25:37 +0000 UTC FinishedAt: 2026-09-03 05:27:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9pp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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","lru_gen_reparent_memcg","lru_gen_soft_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"8eeb8a1b-b69a-46a3-87c1-33c3755a0210","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-03 05:25:37 +0000 UTC FinishedAt: 2026-09-03 05:27:39 +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:*a3f0ddcf-0287-4f36-b231-f2c6ac546723,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-workflowj9pp8/series-workflowj9pp8-build-action-2608460269/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-workflowj9pp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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","lru_gen_reparent_memcg","lru_gen_soft_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"8eeb8a1b-b69a-46a3-87c1-33c3755a0210","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-03 05:27:49 +0000 UTC FinishedAt: 2026-09-03 08:32:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9pp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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","lru_gen_reparent_memcg","lru_gen_soft_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"8eeb8a1b-b69a-46a3-87c1-33c3755a0210","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-03 05:27:49 +0000 UTC FinishedAt: 2026-09-03 08:32:28 +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","lru_gen_reparent_memcg","lru_gen_soft_reclaim"],"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:*ee116452-e976-4fb8-aeab-2625df97f1f0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a3f0ddcf-0287-4f36-b231-f2c6ac546723,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-workflowj9pp8/series-workflowj9pp8-build-action-813812820/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-workflowj9pp8/series-workflowj9pp8-build-action-2608460269/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowj9pp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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","lru_gen_reparent_memcg","lru_gen_soft_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"8eeb8a1b-b69a-46a3-87c1-33c3755a0210","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-03 05:27:49 +0000 UTC FinishedAt: 2026-09-03 05:27:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9pp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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","lru_gen_reparent_memcg","lru_gen_soft_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"8eeb8a1b-b69a-46a3-87c1-33c3755a0210","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-03 05:27:49 +0000 UTC FinishedAt: 2026-09-03 05:27:54 +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","lru_gen_reparent_memcg","lru_gen_soft_reclaim"],"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-workflowj9pp8/series-workflowj9pp8-convert-artifact-1966578550/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj9pp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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","lru_gen_reparent_memcg","lru_gen_soft_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"8eeb8a1b-b69a-46a3-87c1-33c3755a0210","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-03 05:27:49 +0000 UTC FinishedAt: 2026-09-03 05:27:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9pp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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","lru_gen_reparent_memcg","lru_gen_soft_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"8eeb8a1b-b69a-46a3-87c1-33c3755a0210","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-03 05:27:49 +0000 UTC FinishedAt: 2026-09-03 05:27:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9pp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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","lru_gen_reparent_memcg","lru_gen_soft_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"8eeb8a1b-b69a-46a3-87c1-33c3755a0210","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-03 05:27:49 +0000 UTC FinishedAt: 2026-09-03 05:27:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9pp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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","lru_gen_reparent_memcg","lru_gen_soft_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"8eeb8a1b-b69a-46a3-87c1-33c3755a0210","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-03 05:27:59 +0000 UTC FinishedAt: 2026-09-03 08:32:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj9pp8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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","lru_gen_reparent_memcg","lru_gen_soft_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"893f78beb0477671991ccaae87df75acc484162f","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG","MIGRATION"],"series_id":"8eeb8a1b-b69a-46a3-87c1-33c3755a0210","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-03 05:27:59 +0000 UTC FinishedAt: 2026-09-03 08:32:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ee116452-e976-4fb8-aeab-2625df97f1f0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a3f0ddcf-0287-4f36-b231-f2c6ac546723,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-workflowj9pp8/series-workflowj9pp8-build-action-813812820/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-workflowj9pp8/series-workflowj9pp8-build-action-2608460269/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-workflowj9pp8/series-workflowj9pp8-convert-artifact-1966578550/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,}