Name: series-workflowf9p9q Phase: Succeeded StartedAt: 2026-08-18 05:45:49 +0000 UTC FinishedAt: 2026-08-18 09:30:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9p9q[0] Phase: Succeeded StartedAt: 2026-08-18 05:45:49 +0000 UTC FinishedAt: 2026-08-18 05:49:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9p9q[0].run-triage Phase: Succeeded StartedAt: 2026-08-18 05:45:49 +0000 UTC FinishedAt: 2026-08-18 05:49:31 +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": "3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED", "MEMCG" ], "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": "3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED", "MEMCG" ], "series_id": "94e63836-82fa-4e11-8bc8-ca27a78ad47a" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "mem_cgroup_update_lru_size", "folio_migrate_flags", "lru_gen_look_around" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE4IDA1OjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUmIzM0OywKICAgICYjMzQ7Zm9saW9fbWlncmF0ZV9mbGFncyYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX2xvb2tfYXJvdW5kJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCBzcGVjaWZpY2FsbHkgZm9saW8gTFJVIGdlbmVyYXRpb24gZmxhZ3MgYW5kIHJlZmVyZW5jZSB0cmFja2luZywgYW5kIGNoYW5nZXMgYSBjb3VudGVyIChgbHJ1X3pvbmVfc2l6ZWApIHRvIGFuIGF0b21pYyB2YXJpYWJsZSB0byBmaXggY29uY3VycmVuY3kgaXNzdWVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IG1pZ2h0IGJlIGxlZnQgcGFydGlhbGx5IHVuaW5pdGlhbGl6ZWQuIFRoZSBsb2NhbCB2YXJpYWJsZSBgZmlsZWAgaW50cm9kdWNlZCBpbiBgd2Fsa191cGRhdGVfZm9saW9gIGlzIG9ubHkgdXNlZCB3aGVuIGBmb2xpb191cGRhdGVfZ2VuYCByZXR1cm5zIGEgbm9uLW5lZ2F0aXZlIHZhbHVlLCB3aGljaCBndWFyYW50ZWVzIGl0IGhhcyBiZWVuIGluaXRpYWxpemVkLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIGltcGxlbWVudGF0aW9uLCBjaGFuZ2luZyBob3cgTFJVIGdlbmVyYXRpb24gYW5kIHJlZmVyZW5jZSBmbGFncyBhcmUgc3RvcmVkIGluIGBmb2xpby1cdTAwM2VmbGFnc2AuIEl0IHJlcGxhY2VzIGRpcmVjdCBiaXRtYXNrIG9wZXJhdGlvbnMgd2l0aCBuZXcgaGVscGVyIGZ1bmN0aW9ucyBhbmQgY2hhbmdlcyBgbHJ1X3pvbmVfc2l6ZWAgaW4gYHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlYCB0byB1c2UgYGF0b21pY19sb25nX3RgIGluc3RlYWQgb2YgYHVuc2lnbmVkIGxvbmdgLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzLCBpbmNsdWRpbmcgcGFnZSBtaWdyYXRpb24sIExSVSBzaXplIHRyYWNraW5nLCBhbmQgcGFnZSB0YWJsZSBzY2FubmluZy4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsbHkgYWx0ZXJzIGhvdyBmb2xpb3MgYXJlIHRyYWNrZWQgYW5kIGFnZWQgaW4gdGhlIExSVSBsaXN0cywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDU6NDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4YTkyNWQyNTQ2YzUzOGQ0YjNiMGRjMTc1NWNhYWM4OTQ5ODlkOWEwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMDU6NDc6MzkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuaW5kZXggZTc4YmM5OGFiMjI5Yi4uYjEzZTNmMDU2MzE5NSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuQEAgLTExMyw3ICYjNDM7MTEzLDcgQEAgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUge1xuIFx0LyogRmllbGRzIHdoaWNoIGdldCB1cGRhdGVkIG9mdGVuIGF0IHRoZSBlbmQuICovXG4gXHRzdHJ1Y3QgbHJ1dmVjXHRcdGxydXZlYztcbiBcdENBQ0hFTElORV9QQURESU5HKF9wYWQyXyk7XG4tXHR1bnNpZ25lZCBsb25nXHRcdGxydV96b25lX3NpemVbTUFYX05SX1pPTkVTXVtOUl9MUlVfTElTVFNdO1xuJiM0MztcdGF0b21pY19sb25nX3RcdFx0bHJ1X3pvbmVfc2l6ZVtNQVhfTlJfWk9ORVNdW05SX0xSVV9MSVNUU107XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9yZWNsYWltX2l0ZXJcdGl0ZXI7XG4gXG4gXHQvKlxuQEAgLTg5NywxMCAmIzQzOzg5NywxNSBAQCBzdGF0aWMgaW5saW5lXG4gdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0ZW51bSBscnVfbGlzdCBscnUsIGludCB6b25lX2lkeClcbiB7XG4mIzQzO1x0bG9uZyB2YWw7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XG4gXG4gXHRteiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xuLVx0cmV0dXJuIFJFQURfT05DRShtei1cdTAwM2VscnVfem9uZV9zaXplW3pvbmVfaWR4XVtscnVdKTtcbiYjNDM7XHR2YWwgPSBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm16LVx1MDAzZWxydV96b25lX3NpemVbem9uZV9pZHhdW2xydV0pO1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UodmFsIFx1MDAzYyAwKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdmFsO1xuIH1cbiBcbiB2b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuaW5kZXggNjIxYzg2NTNkOGY3ZS4uNGJiMzkwZDk1MTZlZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcbkBAIC0xMCw2ICYjNDM7MTAsMTEgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91c2VyZmF1bHRmZF9rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9sZWFmb3BzLmhcdTAwM2VcbiBcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUoY29uc3QgdW5zaWduZWQgbG9uZyAqZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gIXRlc3RfYml0KFBHX3N3YXBiYWNrZWQsIGZsYWdzKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBmb2xpb19pc19maWxlX2xydSAtIFNob3VsZCB0aGUgZm9saW8gYmUgb24gYSBmaWxlIExSVSBvciBhbm9uIExSVT9cbiAgKiBAZm9saW86IFRoZSBmb2xpbyB0byB0ZXN0LlxuQEAgLTI3LDcgJiM0MzszMiw3IEBAXG4gICovXG4gc3RhdGljIGlubGluZSBpbnQgZm9saW9faXNfZmlsZV9scnUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4tXHRyZXR1cm4gIWZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbyk7XG4mIzQzO1x0cmV0dXJuIGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KGNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4gfVxuIFxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG5AQCAtMTQyLDEwICYjNDM7MTQ3LDQzIEBAIHN0YXRpYyBpbmxpbmUgaW50IGxydV90aWVyX2Zyb21fcmVmcyhpbnQgcmVmcywgYm9vbCB3b3JraW5nc2V0KVxuIFx0cmV0dXJuIHdvcmtpbmdzZXQgPyBNQVhfTlJfVElFUlMgLSAxIDogb3JkZXJfYmFzZV8yKHJlZnMpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MzsvKipcbiYjNDM7ICogbHJ1X2dlbl9mcm9tX2ZsYWdzIC0gUmV0dXJuIHRoZSBMUlUgZ2VuZXJhdGlvbiBudW1iZXIgZnJvbSBmb2xpbyBmbGFncy5cbiYjNDM7ICogQGZsYWdzOiBmb2xpbyBmbGFnc1xuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiBBIG51bWJlciBiZXR3ZWVuIDAgYW5kIExSVV9HRU5fTUFYLCBpbmNsdXNpdmUuIFJldHVybnMgLTEgaWYgdGhlXG4mIzQzOyAqIGZsYWdzIGluZGljYXRlIHRoZSBmb2xpbyBpcyBvZmYgdGhlIGxpc3QgKGUuZy4sIGlzb2xhdGVkKS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGxydV9nZW5fZnJvbV9mbGFncyh1bnNpZ25lZCBsb25nIGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGdlbiA9ICgoZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpO1xuJiM0MztcbiYjNDM7XHRCVUlMRF9CVUdfT04oTFJVX0dFTl9NQVNLIFx1MDAyNiBMUlVfUkVGU19NQVNLKTtcbiYjNDM7XHRnZW4gLT0gMTtcbiYjNDM7XHRWTV9XQVJOX09OX09OQ0UoZ2VuICE9IC0xIFx1MDAyNlx1MDAyNiBnZW4gXHUwMDNlIExSVV9HRU5fTUFYKTtcbiYjNDM7XHRyZXR1cm4gZ2VuO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogbHJ1X2dlbl9zZXRfZmxhZ3MgLSBTZXQgdGhlIExSVSBnZW5lcmF0aW9uIG51bWJlciB0byBzcGVjaWZpZWQgZm9saW8gZmxhZ3MuXG4mIzQzOyAqIEBmbGFnczogcG9pbnRlciB0byB0aGUgZm9saW8gZmxhZ3NcbiYjNDM7ICogQGdlbjogZ2VuZXJhdGlvbiBudW1iZXIsIGJldHdlZW4gMCBhbmQgTFJVX0dFTl9NQVgsIGluY2x1c2l2ZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX3NldF9mbGFncyh1bnNpZ25lZCBsb25nICpmbGFncywgaW50IGdlbilcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuJiM0MztcdFZNX1dBUk5fT05fT05DRShnZW4gXHUwMDNlIExSVV9HRU5fTUFYIHx8IGdlbiBcdTAwM2MgMCk7XG4mIzQzO1x0QlVJTERfQlVHX09OKChMUlVfR0VOX01BWCAmIzQzOyAxKSAhPSBNQVhfTlJfR0VOUyk7XG4mIzQzO1xuJiM0MztcdCpmbGFncyBcdTAwMjY9IH5MUlVfR0VOX01BU0s7XG4mIzQzO1x0KmZsYWdzIHw9IChnZW4gJiM0MzsgMVVMKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRjtcbiYjNDM7fVxuIFxuJiM0MzsvKipcbiYjNDM7ICogbHJ1X3JlZnNfZnJvbV9mbGFncyAtIFJldHVybiBMUlUgcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCBmcm9tIGZvbGlvIGZsYWdzLlxuJiM0MzsgKiBAZmxhZ3M6IGZvbGlvIGZsYWdzXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBscnVfcmVmc19mcm9tX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4mIzQzO3tcbiBcdGlmICghKGZsYWdzIFx1MDAyNiBCSVQoUEdfcmVmZXJlbmNlZCkpKVxuIFx0XHRyZXR1cm4gMDtcbiBcdC8qXG5AQCAtMTU1LDE4ICYjNDM7MTkzLDQ3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gKChmbGFncyBcdTAwMjYgTFJVX1JFRlNfTUFTSykgXHUwMDNlXHUwMDNlIExSVV9SRUZTX1BHT0ZGKSAmIzQzOyAxO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfZ2VuKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzOy8qKlxuJiM0MzsgKiBscnVfcmVmc19zZXRfZmxhZ3MgLSBTZXQgdGhlIExSVSByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IHRvIHNwZWNpZmllZCBmb2xpbyBmbGFncy5cbiYjNDM7ICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFnc1xuJiM0MzsgKiBAcmVmczogcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCBudW1iZXIsIGJldHdlZW4gMCBhbmQgTFJVX1JFRlNfTUFYLCBpbmNsdXNpdmUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X3JlZnNfc2V0X2ZsYWdzKHVuc2lnbmVkIGxvbmcgKmZsYWdzLCB1bnNpZ25lZCBpbnQgcmVmcylcbiYjNDM7e1xuJiM0MztcdFZNX1dBUk5fT05fT05DRShyZWZzIFx1MDAzZSBMUlVfUkVGU19NQVgpO1xuJiM0MztcdEJVSUxEX0JVR19PTihMUlVfUkVGU19NQVggIT0gKExSVV9SRUZTX01BU0sgXHUwMDNlXHUwMDNlIExSVV9SRUZTX1BHT0ZGKSAmIzQzOyAxKTtcbiYjNDM7XG4mIzQzO1x0KmZsYWdzIFx1MDAyNj0gfkxSVV9SRUZTX0ZMQUdTO1xuJiM0MztcdGlmICghcmVmcylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHQqZmxhZ3MgfD0gKEJJVChQR19yZWZlcmVuY2VkKSB8ICgocmVmcyAtIDFVTCkgXHUwMDNjXHUwMDNjIExSVV9SRUZTX1BHT0ZGKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbHJ1X3JlZnNfZnJvbV9mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCByZWZzKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbiBcbi1cdHJldHVybiAoKGZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuJiM0MztcdFx0bHJ1X3JlZnNfc2V0X2ZsYWdzKFx1MDAyNm5ld19mbGFncywgcmVmcyk7XG4mIzQzO1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X2dlbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGxydV9nZW5fZnJvbV9mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9pc19hY3RpdmUoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgZ2VuKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbWF4X3NlcSA9IGxydXZlYy1cdTAwM2VscnVnZW4ubWF4X3NlcTtcbiBcbi1cdFZNX1dBUk5fT05fT05DRShnZW4gXHUwMDNlPSBNQVhfTlJfR0VOUyk7XG4mIzQzO1x0Vk1fV0FSTl9PTl9PTkNFKGdlbiBcdTAwM2UgTFJVX0dFTl9NQVgpO1xuIFxuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIE1JTl9OUl9HRU5TICovXG4gXHRyZXR1cm4gZ2VuID09IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSkgfHwgZ2VuID09IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSAtIDEpO1xuQEAgLTI3MCw3ICYjNDM7MzM3LDcgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fYWRkX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcbiBcdGZsYWdzID0gKGdlbiAmIzQzOyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIE1JTl9OUl9HRU5TIGFib3V0IFBHX2FjdGl2ZSAqL1xuLVx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpO1xuJiM0MztcdHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpO1xuIFxuIFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCAtMSwgZ2VuKTtcbiBcdC8qIGZvciBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoKSAqL1xuQEAgLTI5NSw3ICYjNDM7MzYyLDcgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcbiBcdC8qIGZvciBmb2xpb19taWdyYXRlX2ZsYWdzKCkgKi9cbiBcdGZsYWdzID0gIXJlY2xhaW1pbmcgXHUwMDI2XHUwMDI2IGxydV9nZW5faXNfYWN0aXZlKGxydXZlYywgZ2VuKSA/IEJJVChQR19hY3RpdmUpIDogMDtcbi1cdGZsYWdzID0gc2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfR0VOX01BU0ssIGZsYWdzKTtcbiYjNDM7XHRmbGFncyA9IHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0ssIGZsYWdzKTtcbiBcdGdlbiA9ICgoZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbiBcbiBcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgZ2VuLCAtMSk7XG5AQCAtMzA0LDExICYjNDM7MzcxLDE5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBmb2xpb19taWdyYXRlX3JlZnMgLSBjb3B5IHRoZSByZWZlcmVuY2Ugc3RhdGUgdG8gYSBuZXcgZm9saW9cbiYjNDM7ICogQG5ldzogdGhlIGRlc3RpbmF0aW9uIGZvbGlvXG4mIzQzOyAqIEBvbGQ6IHRoZSBzb3VyY2UgZm9saW9cbiYjNDM7ICpcbiYjNDM7ICogVHJhbnNmZXIgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBAbmV3IGR1cmluZyBtaWdyYXRpb246IHRoZSBNR0xSVVxuJiM0MzsgKiByZWZzIGNvdW50LCBpbmNsdWRpbmcgUEdfcmVmZXJlbmNlZCwgb3IganVzdCBQR19yZWZlcmVuY2VkIGZvciB0aGVcbiYjNDM7ICogYWN0aXZlL2luYWN0aXZlIExSVS5cbiYjNDM7ICovXG4gc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyByZWZzID0gUkVBRF9PTkNFKG9sZC1cdTAwM2VmbGFncy5mKSBcdTAwMjYgTFJVX1JFRlNfTUFTSztcbi1cbi1cdHNldF9tYXNrX2JpdHMoXHUwMDI2bmV3LVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIHJlZnMpO1xuJiM0MztcdEJVSUxEX0JVR19PTihMUlVfUkVGU19NQVNLIFx1MDAyNiBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuJiM0MztcdGZvbGlvX3NldF9scnVfcmVmcyhuZXcsIGZvbGlvX2xydV9yZWZzKG9sZCkpO1xuIH1cbiAjZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cbiBcbkBAIC0zMzksNyAmIzQzOzQxNCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXG4ge1xuLVxuJiM0MztcdGlmIChmb2xpb190ZXN0X3JlZmVyZW5jZWQob2xkKSlcbiYjNDM7XHRcdGZvbGlvX3NldF9yZWZlcmVuY2VkKG5ldyk7XG4gfVxuICNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5pbmRleCA5NGY5YzNmZjU0MTYwLi5kMGI1YzYyMTdkMjU3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuQEAgLTQ5MiwxMSAmIzQzOzQ5MiwxNSBAQCBlbnVtIGxydXZlY19mbGFncyB7XG4gICogZm9saW8tXHUwMDNlZmxhZ3MsIG1hc2tlZCBieSBMUlVfUkVGU19NQVNLLlxuICAqL1xuICNkZWZpbmUgTUFYX05SX1RJRVJTXHRcdDRVXG4mIzQzOyNkZWZpbmUgTFJVX1RJRVJfTUlOXHRcdDBVXG4mIzQzOyNkZWZpbmUgTFJVX1RJRVJfTUFYXHRcdChNQVhfTlJfVElFUlMgLSAxKVxuIFxuICNpZm5kZWYgX19HRU5FUkFUSU5HX0JPVU5EU19IXG4gXG4gI2RlZmluZSBMUlVfR0VOX01BU0tcdFx0KChCSVQoTFJVX0dFTl9XSURUSCkgLSAxKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRilcbiYjNDM7I2RlZmluZSBMUlVfR0VOX01BWFx0XHQoQklUKExSVV9HRU5fV0lEVEggLSAxKSAtIDEpXG4gI2RlZmluZSBMUlVfUkVGU19NQVNLXHRcdCgoQklUKExSVV9SRUZTX1dJRFRIKSAtIDEpIFx1MDAzY1x1MDAzYyBMUlVfUkVGU19QR09GRilcbiYjNDM7I2RlZmluZSBMUlVfUkVGU19NQVhcdFx0QklUKExSVV9SRUZTX1dJRFRIKVxuIFxuIC8qXG4gICogRm9yIGZvbGlvcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMsXG5kaWZmIC0tZ2l0IGEvbW0vZm9saW8uYyBiL21tL2ZvbGlvLmNcbmluZGV4IDU5YzQ3NzEyMGI5YTguLjBhZGZlNGY1ZWY3MmYgMTAwNjQ0XG4tLS0gYS9tbS9mb2xpby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9mb2xpby5jXG5AQCAtMzUzLDI2ICYjNDM7MzUzLDI4IEBAIHN0YXRpYyB2b2lkIF9fbHJ1X2NhY2hlX2FjdGl2YXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXG4gc3RhdGljIHZvaWQgbHJ1X2dlbl9pbmNfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbiYjNDM7XHRpbnQgcmVmcztcbiBcbiBcdGlmIChmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXG4tXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpIHtcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuJiM0MztcdGlmICghZm9saW9fbHJ1X3JlZnMoZm9saW8pKSB7XG4mIzQzO1x0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4gXHRkbyB7XG4tXHRcdGlmICgob2xkX2ZsYWdzIFx1MDAyNiBMUlVfUkVGU19NQVNLKSA9PSBMUlVfUkVGU19NQVNLKSB7XG4mIzQzO1x0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XG4mIzQzO1x0XHRyZWZzID0gbHJ1X3JlZnNfZnJvbV9mbGFncyhvbGRfZmxhZ3MpO1xuJiM0MztcdFx0aWYgKHJlZnMgPT0gTFJVX1JFRlNfTUFYKSB7XG4gXHRcdFx0aWYgKCFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKVxuIFx0XHRcdFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuLVxuLVx0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgJiM0MzsgQklUKExSVV9SRUZTX1BHT0ZGKTtcbi1cdH0gd2hpbGUgKCF0cnlfY21weGNoZyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuJiM0MztcdFx0bHJ1X3JlZnNfc2V0X2ZsYWdzKFx1MDAyNm5ld19mbGFncywgcmVmcyAmIzQzOyAxKTtcbiYjNDM7XHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbkBAIC0zODQsNyAmIzQzOzM4Niw4IEBAIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0aWYgKGdlbiBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTIHwgQklUKFBHX3dvcmtpbmdzZXQpLCAwKTtcbiYjNDM7XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuJiM0MztcdGZvbGlvX2NsZWFyX3dvcmtpbmdzZXQoZm9saW8pO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0c2VxID0gUkVBRF9PTkNFKGZvbGlvX2xydXZlYyhmb2xpbyktXHUwMDNlbHJ1Z2VuLm1pbl9zZXFbdHlwZV0pO1xuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggMWQzMzM5NTIwODA5Zi4uOWQwZWUzZDNiZGE3YyAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jXG5AQCAtMTUyOSwyOCAmIzQzOzE1MjksMTIgQEAgdm9pZCBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LFxuIFx0XHRcdFx0aW50IHppZCwgbG9uZyBucl9wYWdlcylcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XG4tXHR1bnNpZ25lZCBsb25nICpscnVfc2l6ZTtcbi1cdGxvbmcgc2l6ZTtcbiBcbiBcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG4gXHRcdHJldHVybjtcbiBcbiBcdG16ID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7XG4tXHRscnVfc2l6ZSA9IFx1MDAyNm16LVx1MDAzZWxydV96b25lX3NpemVbemlkXVtscnVdO1xuLVxuLVx0aWYgKG5yX3BhZ2VzIFx1MDAzYyAwKVxuLVx0XHQqbHJ1X3NpemUgJiM0Mzs9IG5yX3BhZ2VzO1xuLVxuLVx0c2l6ZSA9ICpscnVfc2l6ZTtcbi1cdGlmIChXQVJOX09OQ0Uoc2l6ZSBcdTAwM2MgMCxcbi1cdFx0XCYjMzQ7JXMoJXAsICVkLCAlbGQpOiBscnVfc2l6ZSAlbGRcXG5cJiMzNDssXG4tXHRcdF9fZnVuY19fLCBscnV2ZWMsIGxydSwgbnJfcGFnZXMsIHNpemUpKSB7XG4tXHRcdFZNX0JVR19PTigxKTtcbi1cdFx0KmxydV9zaXplID0gMDtcbi1cdH1cbi1cbi1cdGlmIChucl9wYWdlcyBcdTAwM2UgMClcbi1cdFx0KmxydV9zaXplICYjNDM7PSBucl9wYWdlcztcbiYjNDM7XHRhdG9taWNfbG9uZ19hZGQobnJfcGFnZXMsIFx1MDAyNm16LVx1MDAzZWxydV96b25lX3NpemVbemlkXVtscnVdKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jXG5pbmRleCAxNWI0NTgzMmJjZmE3Li44MjMwNzMzMjcxMWY0IDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9taWdyYXRlLmNcbkBAIC03NzYsOCAmIzQzOzc3Niw2IEBAIHZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdGludCBjcHVwaWQ7XG4gXG4tXHRpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSlcbi1cdFx0Zm9saW9fc2V0X3JlZmVyZW5jZWQobmV3Zm9saW8pO1xuIFx0aWYgKGZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKVxuIFx0XHRmb2xpb19tYXJrX3VwdG9kYXRlKG5ld2ZvbGlvKTtcbiBcdGlmIChmb2xpb190ZXN0X2NsZWFyX2FjdGl2ZShmb2xpbykpIHtcbkBAIC04MDcsNyAmIzQzOzgwNSw5IEBAIHZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0aWYgKGZvbGlvX3Rlc3RfaWRsZShmb2xpbykpXG4gXHRcdGZvbGlvX3NldF9pZGxlKG5ld2ZvbGlvKTtcbiBcbiYjNDM7XHQvKiBDb3B5IHRoZSByZWZlcmVuY2Ugc3RhdGUsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkICovXG4gXHRmb2xpb19taWdyYXRlX3JlZnMobmV3Zm9saW8sIGZvbGlvKTtcbiYjNDM7XG4gXHQvKlxuIFx0ICogQ29weSBOVU1BIGluZm9ybWF0aW9uIHRvIHRoZSBuZXcgcGFnZSwgdG8gcHJldmVudCBvdmVyLWVhZ2VyXG4gXHQgKiBmdXR1cmUgbWlncmF0aW9ucyBvZiB0aGlzIHNhbWUgcGFnZS5cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCBjMTQwNGE1OTUyM2Q2Li43ZTNhZTBjNmNiYTNiIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtODQzLDE5ICYjNDM7ODQzLDIyIEBAIHN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiBcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpIHtcbiBcdFx0LyogQWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuICovXG4gXHRcdGlmIChpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIHZtYV9mbGFncykpIHtcbi1cdFx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfd29ya2luZ3NldCkpO1xuJiM0MztcdFx0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuJiM0MztcdFx0XHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHRcdH1cbiBcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuJiM0MztcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuIFx0LyogUHJvbW90ZSBvbiBzZWNvbmQgYWNjZXNzICovXG4tXHRpZiAoZm9saW9fbHJ1X3JlZnMoZm9saW8pIFx1MDAzZSAxKVxuLVx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfd29ya2luZ3NldCkpO1xuLVx0ZWxzZVxuJiM0MztcdGlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgXHUwMDNlIDEpIHtcbiYjNDM7XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4mIzQzO1x0XHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XG4mIzQzO1x0fSBlbHNlIHtcbiBcdFx0Zm9saW9fbWFya19hY2Nlc3NlZChmb2xpbyk7XG4mIzQzO1x0fVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuICNlbHNlXG5AQCAtMzE5NSw4ICYjNDM7MzE5OCw4IEBAIHN0cnVjdCBjdHJsX3BvcyB7XG4gXHRpbnQgZ2FpbjtcbiB9O1xuIFxuLXN0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXIsIGludCBnYWluLFxuLVx0XHRcdCAgc3RydWN0IGN0cmxfcG9zICpwb3MpXG4mIzQzO3N0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXJfbWluLFxuJiM0MztcdFx0XHQgIGludCB0aWVyX21heCwgaW50IGdhaW4sIHN0cnVjdCBjdHJsX3BvcyAqcG9zKVxuIHtcbiBcdGludCBpO1xuIFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5AQCAtMzIwNSw3ICYjNDM7MzIwOCw3IEBAIHN0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXIsIGludCBnYWluLFxuIFx0cG9zLVx1MDAzZWdhaW4gPSBnYWluO1xuIFx0cG9zLVx1MDAzZXJlZmF1bHRlZCA9IHBvcy1cdTAwM2V0b3RhbCA9IDA7XG4gXG4tXHRmb3IgKGkgPSB0aWVyICUgTUFYX05SX1RJRVJTOyBpIFx1MDAzYz0gbWluKHRpZXIsIE1BWF9OUl9USUVSUyAtIDEpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdGZvciAoaSA9IHRpZXJfbWluOyBpIFx1MDAzYz0gdGllcl9tYXg7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHBvcy1cdTAwM2VyZWZhdWx0ZWQgJiM0Mzs9IGxydWdlbi1cdTAwM2VhdmdfcmVmYXVsdGVkW3R5cGVdW2ldICYjNDM7XG4gXHRcdFx0XHQgIGF0b21pY19sb25nX3JlYWQoXHUwMDI2bHJ1Z2VuLVx1MDAzZXJlZmF1bHRlZFtoaXN0XVt0eXBlXVtpXSk7XG4gXHRcdHBvcy1cdTAwM2V0b3RhbCAmIzQzOz0gbHJ1Z2VuLVx1MDAzZWF2Z190b3RhbFt0eXBlXVtpXSAmIzQzO1xuQEAgLTMyNjYsMTEgJiM0MzszMjY5LDExIEBAIHN0YXRpYyBib29sIHBvc2l0aXZlX2N0cmxfZXJyKHN0cnVjdCBjdHJsX3BvcyAqc3AsIHN0cnVjdCBjdHJsX3BvcyAqcHYpXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiBcbiAvKiBwcm9tb3RlIHBhZ2VzIGFjY2Vzc2VkIHRocm91Z2ggcGFnZSB0YWJsZXMgKi9cbi1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiYjNDM7c3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBpbnQgKmlzX2ZpbGUsXG4mIzQzO1x0XHRcdCAgICBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4tXG4tXHRWTV9XQVJOX09OX09OQ0UoZ2VuIFx1MDAzZT0gTUFYX05SX0dFTlMpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4mIzQzO1x0aW50IG9sZF9nZW47XG4gXG4gXHQvKlxuIFx0ICogU2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTLCBhbmQgYWN0aXZhdGUgZmlsZS1iYWNrZWRcbkBAIC0zMjc5LDIwICYjNDM7MzI4MiwyNSBAQCBzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYVxuIFx0ICovXG4gXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pIFx1MDAyNlx1MDAyNlxuIFx0ICAgICFpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIHZtYV9mbGFncykpIHtcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuJiM0MztcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcbiBcdFx0cmV0dXJuIC0xO1xuIFx0fVxuIFxuIFx0ZG8ge1xuJiM0MztcdFx0b2xkX2dlbiA9IGxydV9nZW5fZnJvbV9mbGFncyhvbGRfZmxhZ3MpO1xuJiM0MztcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuJiM0MztcbiBcdFx0LyogbHJ1X2dlbl9kZWxfZm9saW8oKSBoYXMgaXNvbGF0ZWQgdGhpcyBwYWdlPyAqL1xuLVx0XHRpZiAoIShvbGRfZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykpXG4tXHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcdFx0aWYgKG9sZF9nZW4gXHUwMDNjIDApXG4mIzQzO1x0XHRcdGJyZWFrO1xuIFxuLVx0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgXHUwMDI2IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpO1xuLVx0XHRuZXdfZmxhZ3MgfD0gKChnZW4gJiM0MzsgMVVMKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRikgfCBCSVQoUEdfd29ya2luZ3NldCk7XG4tXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiYjNDM7XHRcdGxydV9nZW5fc2V0X2ZsYWdzKFx1MDAyNm5ld19mbGFncywgbmV3X2dlbik7XG4mIzQzO1x0XHRscnVfcmVmc19zZXRfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCAwKTtcbiYjNDM7XHRcdG5ld19mbGFncyB8PSBCSVQoUEdfd29ya2luZ3NldCk7XG4mIzQzO1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiBcbi1cdHJldHVybiAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuJiM0MztcdCppc19maWxlID0gZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUoXHUwMDI2b2xkX2ZsYWdzKTtcbiYjNDM7XHRyZXR1cm4gb2xkX2dlbjtcbiB9XG4gXG4gLyogcHJvdGVjdCBwYWdlcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMgKi9cbkBAIC0zMzAwLDIyICYjNDM7MzMwOCwyNSBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xuIFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG4tXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuLVx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbi1cbi1cdFZNX1dBUk5fT05fT05DRV9GT0xJTyghKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSwgZm9saW8pO1xuJiM0MztcdGludCBuZXdfZ2VuLCBvbGRfZ2VuLCBtaW5fZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbiBcbiBcdGRvIHtcbi1cdFx0bmV3X2dlbiA9ICgob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4tXHRcdC8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqL1xuLVx0XHRpZiAobmV3X2dlbiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG5ld19nZW4gIT0gb2xkX2dlbilcbi1cdFx0XHRyZXR1cm4gbmV3X2dlbjtcbiYjNDM7XHRcdG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fZmxhZ3Mob2xkX2ZsYWdzKTtcbiYjNDM7XHRcdC8qIFRoaXMgaGVscGVyIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgZm9yIG9mZi1saXN0IGZvbGlvcyAqL1xuJiM0MztcdFx0Vk1fV0FSTl9PTl9PTkNFKG9sZF9nZW4gXHUwMDNjIDApO1xuJiM0MztcdFx0aWYgKG9sZF9nZW4gXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiBtaW5fZ2VuO1xuIFxuLVx0XHRuZXdfZ2VuID0gKG9sZF9nZW4gJiM0MzsgMSkgJSBNQVhfTlJfR0VOUztcbiYjNDM7XHRcdC8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqL1xuJiM0MztcdFx0aWYgKG9sZF9nZW4gIT0gbWluX2dlbilcbiYjNDM7XHRcdFx0cmV0dXJuIG9sZF9nZW47XG4gXG4tXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncyBcdTAwMjYgfihMUlVfR0VOX01BU0sgfCBMUlVfUkVGU19GTEFHUyk7XG4tXHRcdG5ld19mbGFncyB8PSAobmV3X2dlbiAmIzQzOyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuLVx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4mIzQzO1x0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XG4mIzQzO1x0XHRuZXdfZ2VuID0gKG1pbl9nZW4gJiM0MzsgMSkgJSBNQVhfTlJfR0VOUztcbiYjNDM7XHRcdGxydV9nZW5fc2V0X2ZsYWdzKFx1MDAyNm5ld19mbGFncywgbmV3X2dlbik7XG4mIzQzO1x0XHRscnVfcmVmc19zZXRfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCAwKTtcbiYjNDM7XHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuIFxuIFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcbiBcbkBAIC0zMzIzLDkgJiM0MzszMzM0LDggQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbiB9XG4gXG4gc3RhdGljIHZvaWQgdXBkYXRlX2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IGZvbGlvICpmb2xpbyxcbi1cdFx0XHQgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4pXG4mIzQzO1x0XHRcdCAgICAgIGludCBvbGRfZ2VuLCBpbnQgbmV3X2dlbiwgaW50IHR5cGUpXG4ge1xuLVx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG4gXHRpbnQgem9uZSA9IGZvbGlvX3pvbmVudW0oZm9saW8pO1xuIFx0aW50IGRlbHRhID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIFxuQEAgLTM1MTIsMjIgJiM0MzszNTIyLDI0IEBAIHN0YXRpYyBib29sIHN1aXRhYmxlX3RvX3NjYW4oaW50IHRvdGFsLCBpbnQgeW91bmcpXG4gfVxuIFxuIHN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgYm9vbCBkaXJ0eSlcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIGRpcnR5KVxuIHtcbi1cdGludCBvbGRfZ2VuO1xuJiM0MztcdGludCBuZXdfZ2VuLCBvbGRfZ2VuLCBmaWxlO1xuIFxuIFx0aWYgKCFmb2xpbylcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdG5ld19nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKFJFQURfT05DRShscnV2ZWMtXHUwMDNlbHJ1Z2VuLm1heF9zZXEpKTtcbiYjNDM7XG4gXHRpZiAoZGlydHkgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHQgICAgICAhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSlcbiBcdFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG4gXG4gXHRpZiAod2Fsaykge1xuLVx0XHRvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgXHUwMDI2dm1hLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRcdG9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuLCBcdTAwMjZmaWxlLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpO1xuIFx0XHRpZiAob2xkX2dlbiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG9sZF9nZW4gIT0gbmV3X2dlbilcbi1cdFx0XHR1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XG4mIzQzO1x0XHRcdHVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuLCBmaWxlKTtcbiBcdH0gZWxzZSBpZiAobHJ1X2dlbl9zZXRfcmVmcyhmb2xpbywgXHUwMDI2dm1hLVx1MDAzZWZsYWdzKSkge1xuIFx0XHRvbGRfZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7XG4gXHRcdGlmIChvbGRfZ2VuIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgb2xkX2dlbiAhPSBuZXdfZ2VuKVxuQEAgLTM1NDksOCAmIzQzOzM1NjEsNiBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVx1MDAzZXByaXZhdGU7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay1cdTAwM2VscnV2ZWMpO1xuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdCh3YWxrLVx1MDAzZWxydXZlYyk7XG4tXHRERUZJTkVfTUFYX1NFUSh3YWxrLVx1MDAzZWxydXZlYyk7XG4tXHRpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcbiBcdHVuc2lnbmVkIGludCBucjtcbiBcdHBtZF90IHBtZHZhbDtcbiBcbkBAIC0zNjAxLDcgJiM0MzszNjExLDcgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChsYXN0ICE9IGZvbGlvKSB7XG4tXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuJiM0MztcdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLVx1MDAzZXZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC0zNjE0LDcgJiM0MzszNjI0LDcgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdHdhbGstXHUwMDNlbW1fc3RhdHNbTU1fTEVBRl9ZT1VOR10gJiM0Mzs9IG5yO1xuIFx0fVxuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuJiM0MztcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCB3YWxrLVx1MDAzZWxydXZlYywgbGFzdCwgZGlydHkpO1xuIFx0bGFzdCA9IE5VTEw7XG4gXG4gXHRpZiAoaSBcdTAwM2MgUFRSU19QRVJfUFRFIFx1MDAyNlx1MDAyNiBnZXRfbmV4dF92bWEoUE1EX01BU0ssIFBBR0VfU0laRSwgYXJncywgXHUwMDI2c3RhcnQsIFx1MDAyNmVuZCkpXG5AQCAtMzYzNyw4ICYjNDM7MzY0Nyw2IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhXG4gXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cdTAwM2Vwcml2YXRlO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKHdhbGstXHUwMDNlbHJ1dmVjKTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQod2Fsay1cdTAwM2VscnV2ZWMpO1xuLVx0REVGSU5FX01BWF9TRVEod2Fsay1cdTAwM2VscnV2ZWMpO1xuLVx0aW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0UocHVkX2xlYWYoKnB1ZCkpO1xuIFxuQEAgLTM2OTIsNyAmIzQzOzM3MDAsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0XHRcdGdvdG8gbmV4dDtcbiBcbiBcdFx0aWYgKGxhc3QgIT0gZm9saW8pIHtcbi1cdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuJiM0MztcdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIHdhbGstXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXG4gXHRcdFx0bGFzdCA9IGZvbGlvO1xuIFx0XHRcdGRpcnR5ID0gZmFsc2U7XG5AQCAtMzcwNiw3ICYjNDM7MzcxNCw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhXG4gXHRcdGkgPSBpIFx1MDAzZSBNSU5fTFJVX0JBVENIID8gMCA6IGZpbmRfbmV4dF9iaXQoYml0bWFwLCBNSU5fTFJVX0JBVENILCBpKSAmIzQzOyAxO1xuIFx0fSB3aGlsZSAoaSBcdTAwM2M9IE1JTl9MUlVfQkFUQ0gpO1xuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbiYjNDM7XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIHdhbGstXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXG4gXHRsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTtcbiBcdHNwaW5fdW5sb2NrKHB0bCk7XG5AQCAtNDI3MCw4ICYjNDM7NDI3OCw2IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBmb2xpb19wZ2RhdChmb2xpbyk7XG4gXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGU7XG4tXHR1bnNpZ25lZCBsb25nIG1heF9zZXE7XG4tXHRpbnQgZ2VuO1xuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChwdm13LVx1MDAzZXB0bCk7XG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF9scnUoZm9saW8pLCBmb2xpbyk7XG5AQCAtNDMwOCw4ICYjNDM7NDMxNCw2IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcbiBcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XG4gXHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpO1xuLVx0bWF4X3NlcSA9IFJFQURfT05DRSgobHJ1dmVjKS1cdTAwM2VscnVnZW4ubWF4X3NlcSk7XG4tXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xuIFx0bW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcbiBcbiBcdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XG5AQCAtNDM0MSw3ICYjNDM7NDM0NSw3IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKGxhc3QgIT0gZm9saW8pIHtcbi1cdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuJiM0MztcdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxydXZlYywgbGFzdCwgZGlydHkpO1xuIFxuIFx0XHRcdGxhc3QgPSBmb2xpbztcbiBcdFx0XHRkaXJ0eSA9IGZhbHNlO1xuQEAgLTQzNTMsMTMgJiM0Mzs0MzU3LDE0IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdFx0eW91bmcgJiM0Mzs9IG5yO1xuIFx0fVxuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbiYjNDM7XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxydXZlYywgbGFzdCwgZGlydHkpO1xuIFxuIFx0bGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7XG4gXG4gXHQvKiBmZWVkYmFjayBmcm9tIHJtYXAgd2Fsa2VycyB0byBwYWdlIHRhYmxlIHdhbGtlcnMgKi9cbiBcdGlmIChtbV9zdGF0ZSBcdTAwMjZcdTAwMjYgc3VpdGFibGVfdG9fc2NhbihpLCB5b3VuZykpXG4tXHRcdHVwZGF0ZV9ibG9vbV9maWx0ZXIobW1fc3RhdGUsIG1heF9zZXEsIHB2bXctXHUwMDNlcG1kKTtcbiYjNDM7XHRcdHVwZGF0ZV9ibG9vbV9maWx0ZXIobW1fc3RhdGUsIFJFQURfT05DRShscnV2ZWMtXHUwMDNlbHJ1Z2VuLm1heF9zZXEpLFxuJiM0MztcdFx0XHRcdCAgICBwdm13LVx1MDAzZXBtZCk7XG4gXG4gXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4gXG5AQCAtNDcxMSw3ICYjNDM7NDcxNiw3IEBAIHN0YXRpYyBib29sIGlzb2xhdGVfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2NhXG4gXG4gXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi9cbiBcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSlcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCAwKTtcbiYjNDM7XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4gXG4gXHRzdWNjZXNzID0gbHJ1X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7XG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIXN1Y2Nlc3MsIGZvbGlvKTtcbkBAIC00ODA0LDkgJiM0Mzs0ODA5LDkgQEAgc3RhdGljIGludCBnZXRfdGllcl9pZHgoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSlcbiBcdCAqIFRoaXMgdmFsdWUgaXMgY2hvc2VuIGJlY2F1c2UgYW55IG90aGVyIHRpZXIgd291bGQgaGF2ZSBhdCBsZWFzdCB0d2ljZVxuIFx0ICogYXMgbWFueSByZWZhdWx0cyBhcyB0aGUgZmlyc3QgdGllci5cbiBcdCAqL1xuLVx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIDAsIDIsIFx1MDAyNnNwKTtcbi1cdGZvciAodGllciA9IDE7IHRpZXIgXHUwMDNjIE1BWF9OUl9USUVSUzsgdGllciYjNDM7JiM0MzspIHtcbi1cdFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIDMsIFx1MDAyNnB2KTtcbiYjNDM7XHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NSU4sIDIsIFx1MDAyNnNwKTtcbiYjNDM7XHRmb3IgKHRpZXIgPSBMUlVfVElFUl9NSU4gJiM0MzsgMTsgdGllciBcdTAwM2M9IExSVV9USUVSX01BWDsgdGllciYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0aWVyLCB0aWVyLCAzLCBcdTAwMjZwdik7XG4gXHRcdGlmICghcG9zaXRpdmVfY3RybF9lcnIoXHUwMDI2c3AsIFx1MDAyNnB2KSlcbiBcdFx0XHRicmVhaztcbiBcdH1cbkBAIC00ODI3LDggJiM0Mzs0ODMyLDEwIEBAIHN0YXRpYyBpbnQgZ2V0X3R5cGVfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxuIFx0ICogQ29tcGFyZSB0aGUgc3VtIG9mIGFsbCB0aWVycyBvZiBhbm9uIHdpdGggdGhhdCBvZiBmaWxlIHRvIGRldGVybWluZVxuIFx0ICogd2hpY2ggdHlwZSB0byBzY2FuLlxuIFx0ICovXG4tXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBNQVhfTlJfVElFUlMsIHN3YXBwaW5lc3MsIFx1MDAyNnNwKTtcbi1cdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIE1BWF9OUl9USUVSUywgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCBcdTAwMjZwdik7XG4mIzQzO1x0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fQU5PTiwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NQVgsXG4mIzQzO1x0XHQgICAgICBzd2FwcGluZXNzLCBcdTAwMjZzcCk7XG4mIzQzO1x0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NQVgsXG4mIzQzO1x0XHQgICAgICBNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3MsIFx1MDAyNnB2KTtcbiBcbiBcdHJldHVybiBwb3NpdGl2ZV9jdHJsX2VycihcdTAwMjZzcCwgXHUwMDI2cHYpO1xuIH1cbkBAIC00OTI3LDggJiM0Mzs0OTM0LDEwIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHR9XG4gXG4gXHRcdC8qIGRvbiYjMzk7dCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqL1xuLVx0XHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pXG4tXHRcdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX2FjdGl2ZSkpO1xuJiM0MztcdFx0aWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKSB7XG4mIzQzO1x0XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4mIzQzO1x0XHRcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuIFx0bW92ZV9mb2xpb3NfdG9fbHJ1KFx1MDAyNmxpc3QpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA1OjQ3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplJiMzNDssCiAgICAmIzM0O2ZvbGlvX21pZ3JhdGVfZmxhZ3MmIzM0OywKICAgICYjMzQ7bHJ1X2dlbl9sb29rX2Fyb3VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIGltcGxlbWVudGF0aW9uLCBjaGFuZ2luZyBob3cgTFJVIGdlbmVyYXRpb24gYW5kIHJlZmVyZW5jZSBmbGFncyBhcmUgc3RvcmVkIGluIGBmb2xpby1cdTAwM2VmbGFnc2AuIEl0IHJlcGxhY2VzIGRpcmVjdCBiaXRtYXNrIG9wZXJhdGlvbnMgd2l0aCBuZXcgaGVscGVyIGZ1bmN0aW9ucyBhbmQgY2hhbmdlcyBgbHJ1X3pvbmVfc2l6ZWAgaW4gYHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlYCB0byB1c2UgYGF0b21pY19sb25nX3RgIGluc3RlYWQgb2YgYHVuc2lnbmVkIGxvbmdgLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzLCBpbmNsdWRpbmcgcGFnZSBtaWdyYXRpb24sIExSVSBzaXplIHRyYWNraW5nLCBhbmQgcGFnZSB0YWJsZSBzY2FubmluZy4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsbHkgYWx0ZXJzIGhvdyBmb2xpb3MgYXJlIHRyYWNrZWQgYW5kIGFnZWQgaW4gdGhlIExSVSBsaXN0cywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4YTkyNWQyNTQ2YzUzOGQ0YjNiMGRjMTc1NWNhYWM4OTQ5ODlkOWEwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTggMDU6NDc6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCmluZGV4IGU3OGJjOThhYjIyOWIuLmIxM2UzZjA1NjMxOTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCkBAIC0xMTMsNyAmIzQzOzExMyw3IEBAIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlIHsKIAkvKiBGaWVsZHMgd2hpY2ggZ2V0IHVwZGF0ZWQgb2Z0ZW4gYXQgdGhlIGVuZC4gKi8KIAlzdHJ1Y3QgbHJ1dmVjCQlscnV2ZWM7CiAJQ0FDSEVMSU5FX1BBRERJTkcoX3BhZDJfKTsKLQl1bnNpZ25lZCBsb25nCQlscnVfem9uZV9zaXplW01BWF9OUl9aT05FU11bTlJfTFJVX0xJU1RTXTsKJiM0MzsJYXRvbWljX2xvbmdfdAkJbHJ1X3pvbmVfc2l6ZVtNQVhfTlJfWk9ORVNdW05SX0xSVV9MSVNUU107CiAJc3RydWN0IG1lbV9jZ3JvdXBfcmVjbGFpbV9pdGVyCWl0ZXI7CiAKIAkvKgpAQCAtODk3LDEwICYjNDM7ODk3LDE1IEBAIHN0YXRpYyBpbmxpbmUKIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCWVudW0gbHJ1X2xpc3QgbHJ1LCBpbnQgem9uZV9pZHgpCiB7CiYjNDM7CWxvbmcgdmFsOwogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejsKIAogCW16ID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7Ci0JcmV0dXJuIFJFQURfT05DRShtei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7CiYjNDM7CXZhbCA9IGF0b21pY19sb25nX3JlYWQoJmFtcDttei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UodmFsICZsdDsgMCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIHZhbDsKIH0KIAogdm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaAppbmRleCA2MjFjODY1M2Q4ZjdlLi40YmIzOTBkOTUxNmVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmgKQEAgLTEwLDYgJiM0MzsxMCwxMSBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3VzZXJmYXVsdGZkX2suaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9sZWFmb3BzLmgmZ3Q7CiAKJiM0MztzdGF0aWMgaW5saW5lIGludCBmb2xpb19mbGFnc19pc19maWxlX2xydShjb25zdCB1bnNpZ25lZCBsb25nICpmbGFncykKJiM0Mzt7CiYjNDM7CXJldHVybiAhdGVzdF9iaXQoUEdfc3dhcGJhY2tlZCwgZmxhZ3MpOwomIzQzO30KJiM0MzsKIC8qKgogICogZm9saW9faXNfZmlsZV9scnUgLSBTaG91bGQgdGhlIGZvbGlvIGJlIG9uIGEgZmlsZSBMUlUgb3IgYW5vbiBMUlU/CiAgKiBAZm9saW86IFRoZSBmb2xpbyB0byB0ZXN0LgpAQCAtMjcsNyAmIzQzOzMyLDcgQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgZm9saW9faXNfZmlsZV9scnUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKLQlyZXR1cm4gIWZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbyk7CiYjNDM7CXJldHVybiBmb2xpb19mbGFnc19pc19maWxlX2xydShjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpOwogfQogCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX191cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLApAQCAtMTQyLDEwICYjNDM7MTQ3LDQzIEBAIHN0YXRpYyBpbmxpbmUgaW50IGxydV90aWVyX2Zyb21fcmVmcyhpbnQgcmVmcywgYm9vbCB3b3JraW5nc2V0KQogCXJldHVybiB3b3JraW5nc2V0ID8gTUFYX05SX1RJRVJTIC0gMSA6IG9yZGVyX2Jhc2VfMihyZWZzKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MzsvKioKJiM0MzsgKiBscnVfZ2VuX2Zyb21fZmxhZ3MgLSBSZXR1cm4gdGhlIExSVSBnZW5lcmF0aW9uIG51bWJlciBmcm9tIGZvbGlvIGZsYWdzLgomIzQzOyAqIEBmbGFnczogZm9saW8gZmxhZ3MKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgTFJVX0dFTl9NQVgsIGluY2x1c2l2ZS4gUmV0dXJucyAtMSBpZiB0aGUKJiM0MzsgKiBmbGFncyBpbmRpY2F0ZSB0aGUgZm9saW8gaXMgb2ZmIHRoZSBsaXN0IChlLmcuLCBpc29sYXRlZCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBpbnQgbHJ1X2dlbl9mcm9tX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiYjNDM7ewomIzQzOwlpbnQgZ2VuID0gKChmbGFncyAmYW1wOyBMUlVfR0VOX01BU0spICZndDsmZ3Q7IExSVV9HRU5fUEdPRkYpOwomIzQzOwomIzQzOwlCVUlMRF9CVUdfT04oTFJVX0dFTl9NQVNLICZhbXA7IExSVV9SRUZTX01BU0spOwomIzQzOwlnZW4gLT0gMTsKJiM0MzsJVk1fV0FSTl9PTl9PTkNFKGdlbiAhPSAtMSAmYW1wOyZhbXA7IGdlbiAmZ3Q7IExSVV9HRU5fTUFYKTsKJiM0MzsJcmV0dXJuIGdlbjsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogbHJ1X2dlbl9zZXRfZmxhZ3MgLSBTZXQgdGhlIExSVSBnZW5lcmF0aW9uIG51bWJlciB0byBzcGVjaWZpZWQgZm9saW8gZmxhZ3MuCiYjNDM7ICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFncwomIzQzOyAqIEBnZW46IGdlbmVyYXRpb24gbnVtYmVyLCBiZXR3ZWVuIDAgYW5kIExSVV9HRU5fTUFYLCBpbmNsdXNpdmUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5fc2V0X2ZsYWdzKHVuc2lnbmVkIGxvbmcgKmZsYWdzLCBpbnQgZ2VuKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwomIzQzOwlWTV9XQVJOX09OX09OQ0UoZ2VuICZndDsgTFJVX0dFTl9NQVggfHwgZ2VuICZsdDsgMCk7CiYjNDM7CUJVSUxEX0JVR19PTigoTFJVX0dFTl9NQVggJiM0MzsgMSkgIT0gTUFYX05SX0dFTlMpOwomIzQzOwomIzQzOwkqZmxhZ3MgJmFtcDs9IH5MUlVfR0VOX01BU0s7CiYjNDM7CSpmbGFncyB8PSAoZ2VuICYjNDM7IDFVTCkgJmx0OyZsdDsgTFJVX0dFTl9QR09GRjsKJiM0Mzt9CiAKJiM0MzsvKioKJiM0MzsgKiBscnVfcmVmc19mcm9tX2ZsYWdzIC0gUmV0dXJuIExSVSByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IGZyb20gZm9saW8gZmxhZ3MuCiYjNDM7ICogQGZsYWdzOiBmb2xpbyBmbGFncwomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGxydV9yZWZzX2Zyb21fZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncykKJiM0Mzt7CiAJaWYgKCEoZmxhZ3MgJmFtcDsgQklUKFBHX3JlZmVyZW5jZWQpKSkKIAkJcmV0dXJuIDA7CiAJLyoKQEAgLTE1NSwxOCAmIzQzOzE5Myw0NyBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXJldHVybiAoKGZsYWdzICZhbXA7IExSVV9SRUZTX01BU0spICZndDsmZ3Q7IExSVV9SRUZTX1BHT0ZGKSAmIzQzOyAxOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfZ2VuKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7LyoqCiYjNDM7ICogbHJ1X3JlZnNfc2V0X2ZsYWdzIC0gU2V0IHRoZSBMUlUgcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCB0byBzcGVjaWZpZWQgZm9saW8gZmxhZ3MuCiYjNDM7ICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFncwomIzQzOyAqIEByZWZzOiByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IG51bWJlciwgYmV0d2VlbiAwIGFuZCBMUlVfUkVGU19NQVgsIGluY2x1c2l2ZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X3JlZnNfc2V0X2ZsYWdzKHVuc2lnbmVkIGxvbmcgKmZsYWdzLCB1bnNpZ25lZCBpbnQgcmVmcykKJiM0Mzt7CiYjNDM7CVZNX1dBUk5fT05fT05DRShyZWZzICZndDsgTFJVX1JFRlNfTUFYKTsKJiM0MzsJQlVJTERfQlVHX09OKExSVV9SRUZTX01BWCAhPSAoTFJVX1JFRlNfTUFTSyAmZ3Q7Jmd0OyBMUlVfUkVGU19QR09GRikgJiM0MzsgMSk7CiYjNDM7CiYjNDM7CSpmbGFncyAmYW1wOz0gfkxSVV9SRUZTX0ZMQUdTOwomIzQzOwlpZiAoIXJlZnMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CSpmbGFncyB8PSAoQklUKFBHX3JlZmVyZW5jZWQpIHwgKChyZWZzIC0gMVVMKSAmbHQ7Jmx0OyBMUlVfUkVGU19QR09GRikpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIGxydV9yZWZzX2Zyb21fZmxhZ3MoUkVBRF9PTkNFKCpjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgcmVmcykKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLSZndDtmbGFncy5mKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTsKIAotCXJldHVybiAoKGZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwomIzQzOwlkbyB7CiYjNDM7CQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7CiYjNDM7CQlscnVfcmVmc19zZXRfZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIHJlZnMpOwomIzQzOwl9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CXJldHVybiBscnVfZ2VuX2Zyb21fZmxhZ3MoUkVBRF9PTkNFKCpjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGxydV9nZW5faXNfYWN0aXZlKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IGdlbikKIHsKIAl1bnNpZ25lZCBsb25nIG1heF9zZXEgPSBscnV2ZWMtJmd0O2xydWdlbi5tYXhfc2VxOwogCi0JVk1fV0FSTl9PTl9PTkNFKGdlbiAmZ3Q7PSBNQVhfTlJfR0VOUyk7CiYjNDM7CVZNX1dBUk5fT05fT05DRShnZW4gJmd0OyBMUlVfR0VOX01BWCk7CiAKIAkvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUlOX05SX0dFTlMgKi8KIAlyZXR1cm4gZ2VuID09IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSkgfHwgZ2VuID09IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSAtIDEpOwpAQCAtMjcwLDcgJiM0MzszMzcsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9hZGRfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCWdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTsKIAlmbGFncyA9IChnZW4gJiM0MzsgMVVMKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGOwogCS8qIHNlZSB0aGUgY29tbWVudCBvbiBNSU5fTlJfR0VOUyBhYm91dCBQR19hY3RpdmUgKi8KLQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9HRU5fTUFTSyB8IEJJVChQR19hY3RpdmUpLCBmbGFncyk7CiYjNDM7CXNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpOwogCiAJbHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCAtMSwgZ2VuKTsKIAkvKiBmb3IgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKCkgKi8KQEAgLTI5NSw3ICYjNDM7MzYyLDcgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywKIAogCS8qIGZvciBmb2xpb19taWdyYXRlX2ZsYWdzKCkgKi8KIAlmbGFncyA9ICFyZWNsYWltaW5nICZhbXA7JmFtcDsgbHJ1X2dlbl9pc19hY3RpdmUobHJ1dmVjLCBnZW4pID8gQklUKFBHX2FjdGl2ZSkgOiAwOwotCWZsYWdzID0gc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfR0VOX01BU0ssIGZsYWdzKTsKJiM0MzsJZmxhZ3MgPSBzZXRfbWFza19iaXRzKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgTFJVX0dFTl9NQVNLLCBmbGFncyk7CiAJZ2VuID0gKChmbGFncyAmYW1wOyBMUlVfR0VOX01BU0spICZndDsmZ3Q7IExSVV9HRU5fUEdPRkYpIC0gMTsKIAogCWxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgZ2VuLCAtMSk7CkBAIC0zMDQsMTEgJiM0MzszNzEsMTkgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywKIAlyZXR1cm4gdHJ1ZTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGZvbGlvX21pZ3JhdGVfcmVmcyAtIGNvcHkgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBhIG5ldyBmb2xpbwomIzQzOyAqIEBuZXc6IHRoZSBkZXN0aW5hdGlvbiBmb2xpbwomIzQzOyAqIEBvbGQ6IHRoZSBzb3VyY2UgZm9saW8KJiM0MzsgKgomIzQzOyAqIFRyYW5zZmVyIHRoZSByZWZlcmVuY2Ugc3RhdGUgdG8gQG5ldyBkdXJpbmcgbWlncmF0aW9uOiB0aGUgTUdMUlUKJiM0MzsgKiByZWZzIGNvdW50LCBpbmNsdWRpbmcgUEdfcmVmZXJlbmNlZCwgb3IganVzdCBQR19yZWZlcmVuY2VkIGZvciB0aGUKJiM0MzsgKiBhY3RpdmUvaW5hY3RpdmUgTFJVLgomIzQzOyAqLwogc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpCiB7Ci0JdW5zaWduZWQgbG9uZyByZWZzID0gUkVBRF9PTkNFKG9sZC0mZ3Q7ZmxhZ3MuZikgJmFtcDsgTFJVX1JFRlNfTUFTSzsKLQotCXNldF9tYXNrX2JpdHMoJmFtcDtuZXctJmd0O2ZsYWdzLmYsIExSVV9SRUZTX01BU0ssIHJlZnMpOwomIzQzOwlCVUlMRF9CVUdfT04oTFJVX1JFRlNfTUFTSyAmYW1wOyBCSVQoUEdfcmVmZXJlbmNlZCkpOwomIzQzOwlmb2xpb19zZXRfbHJ1X3JlZnMobmV3LCBmb2xpb19scnVfcmVmcyhvbGQpKTsKIH0KICNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqLwogCkBAIC0zMzksNyAmIzQzOzQxNCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKQogewotCiYjNDM7CWlmIChmb2xpb190ZXN0X3JlZmVyZW5jZWQob2xkKSkKJiM0MzsJCWZvbGlvX3NldF9yZWZlcmVuY2VkKG5ldyk7CiB9CiAjZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKaW5kZXggOTRmOWMzZmY1NDE2MC4uZDBiNWM2MjE3ZDI1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCkBAIC00OTIsMTEgJiM0Mzs0OTIsMTUgQEAgZW51bSBscnV2ZWNfZmxhZ3MgewogICogZm9saW8tJmd0O2ZsYWdzLCBtYXNrZWQgYnkgTFJVX1JFRlNfTUFTSy4KICAqLwogI2RlZmluZSBNQVhfTlJfVElFUlMJCTRVCiYjNDM7I2RlZmluZSBMUlVfVElFUl9NSU4JCTBVCiYjNDM7I2RlZmluZSBMUlVfVElFUl9NQVgJCShNQVhfTlJfVElFUlMgLSAxKQogCiAjaWZuZGVmIF9fR0VORVJBVElOR19CT1VORFNfSAogCiAjZGVmaW5lIExSVV9HRU5fTUFTSwkJKChCSVQoTFJVX0dFTl9XSURUSCkgLSAxKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGKQomIzQzOyNkZWZpbmUgTFJVX0dFTl9NQVgJCShCSVQoTFJVX0dFTl9XSURUSCAtIDEpIC0gMSkKICNkZWZpbmUgTFJVX1JFRlNfTUFTSwkJKChCSVQoTFJVX1JFRlNfV0lEVEgpIC0gMSkgJmx0OyZsdDsgTFJVX1JFRlNfUEdPRkYpCiYjNDM7I2RlZmluZSBMUlVfUkVGU19NQVgJCUJJVChMUlVfUkVGU19XSURUSCkKIAogLyoKICAqIEZvciBmb2xpb3MgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzLApkaWZmIC0tZ2l0IGEvbW0vZm9saW8uYyBiL21tL2ZvbGlvLmMKaW5kZXggNTljNDc3MTIwYjlhOC4uMGFkZmU0ZjVlZjcyZiAxMDA2NDQKLS0tIGEvbW0vZm9saW8uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9mb2xpby5jCkBAIC0zNTMsMjYgJiM0MzszNTMsMjggQEAgc3RhdGljIHZvaWQgX19scnVfY2FjaGVfYWN0aXZhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykKIAogc3RhdGljIHZvaWQgbHJ1X2dlbl9pbmNfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewotCXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwomIzQzOwl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpOwomIzQzOwlpbnQgcmVmczsKIAogCWlmIChmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSkKIAkJcmV0dXJuOwogCiAJLyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovCi0JaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKSB7Ci0JCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTsKJiM0MzsJaWYgKCFmb2xpb19scnVfcmVmcyhmb2xpbykpIHsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7CiAJCXJldHVybjsKIAl9CiAKIAlkbyB7Ci0JCWlmICgob2xkX2ZsYWdzICZhbXA7IExSVV9SRUZTX01BU0spID09IExSVV9SRUZTX01BU0spIHsKJiM0MzsJCW5ld19mbGFncyA9IG9sZF9mbGFnczsKJiM0MzsJCXJlZnMgPSBscnVfcmVmc19mcm9tX2ZsYWdzKG9sZF9mbGFncyk7CiYjNDM7CQlpZiAocmVmcyA9PSBMUlVfUkVGU19NQVgpIHsKIAkJCWlmICghZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSkKIAkJCQlmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7CiAJCQlyZXR1cm47CiAJCX0KLQotCQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgJiM0MzsgQklUKExSVV9SRUZTX1BHT0ZGKTsKLQl9IHdoaWxlICghdHJ5X2NtcHhjaGcoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwomIzQzOwkJbHJ1X3JlZnNfc2V0X2ZsYWdzKCZhbXA7bmV3X2ZsYWdzLCByZWZzICYjNDM7IDEpOwomIzQzOwl9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiB9CiAKIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQpAQCAtMzg0LDcgJiM0MzszODYsOCBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbykKIAlpZiAoZ2VuICZsdDsgMCkKIAkJcmV0dXJuIHRydWU7CiAKLQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTIHwgQklUKFBHX3dvcmtpbmdzZXQpLCAwKTsKJiM0MzsJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTsKJiM0MzsJZm9saW9fY2xlYXJfd29ya2luZ3NldChmb2xpbyk7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJc2VxID0gUkVBRF9PTkNFKGZvbGlvX2xydXZlYyhmb2xpbyktJmd0O2xydWdlbi5taW5fc2VxW3R5cGVdKTsKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCAxZDMzMzk1MjA4MDlmLi45ZDBlZTNkM2JkYTdjIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC0xNTI5LDI4ICYjNDM7MTUyOSwxMiBAQCB2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsCiAJCQkJaW50IHppZCwgbG9uZyBucl9wYWdlcykKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7Ci0JdW5zaWduZWQgbG9uZyAqbHJ1X3NpemU7Ci0JbG9uZyBzaXplOwogCiAJaWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkKIAkJcmV0dXJuOwogCiAJbXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTsKLQlscnVfc2l6ZSA9ICZhbXA7bXotJmd0O2xydV96b25lX3NpemVbemlkXVtscnVdOwotCi0JaWYgKG5yX3BhZ2VzICZsdDsgMCkKLQkJKmxydV9zaXplICYjNDM7PSBucl9wYWdlczsKLQotCXNpemUgPSAqbHJ1X3NpemU7Ci0JaWYgKFdBUk5fT05DRShzaXplICZsdDsgMCwKLQkJJiMzNDslcyglcCwgJWQsICVsZCk6IGxydV9zaXplICVsZFxuJiMzNDssCi0JCV9fZnVuY19fLCBscnV2ZWMsIGxydSwgbnJfcGFnZXMsIHNpemUpKSB7Ci0JCVZNX0JVR19PTigxKTsKLQkJKmxydV9zaXplID0gMDsKLQl9Ci0KLQlpZiAobnJfcGFnZXMgJmd0OyAwKQotCQkqbHJ1X3NpemUgJiM0Mzs9IG5yX3BhZ2VzOwomIzQzOwlhdG9taWNfbG9uZ19hZGQobnJfcGFnZXMsICZhbXA7bXotJmd0O2xydV96b25lX3NpemVbemlkXVtscnVdKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmMKaW5kZXggMTViNDU4MzJiY2ZhNy4uODIzMDczMzI3MTFmNCAxMDA2NDQKLS0tIGEvbW0vbWlncmF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21pZ3JhdGUuYwpAQCAtNzc2LDggJiM0Mzs3NzYsNiBAQCB2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlpbnQgY3B1cGlkOwogCi0JaWYgKGZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpCi0JCWZvbGlvX3NldF9yZWZlcmVuY2VkKG5ld2ZvbGlvKTsKIAlpZiAoZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpCiAJCWZvbGlvX21hcmtfdXB0b2RhdGUobmV3Zm9saW8pOwogCWlmIChmb2xpb190ZXN0X2NsZWFyX2FjdGl2ZShmb2xpbykpIHsKQEAgLTgwNyw3ICYjNDM7ODA1LDkgQEAgdm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJaWYgKGZvbGlvX3Rlc3RfaWRsZShmb2xpbykpCiAJCWZvbGlvX3NldF9pZGxlKG5ld2ZvbGlvKTsKIAomIzQzOwkvKiBDb3B5IHRoZSByZWZlcmVuY2Ugc3RhdGUsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkICovCiAJZm9saW9fbWlncmF0ZV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7CiYjNDM7CiAJLyoKIAkgKiBDb3B5IE5VTUEgaW5mb3JtYXRpb24gdG8gdGhlIG5ldyBwYWdlLCB0byBwcmV2ZW50IG92ZXItZWFnZXIKIAkgKiBmdXR1cmUgbWlncmF0aW9ucyBvZiB0aGlzIHNhbWUgcGFnZS4KZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggYzE0MDRhNTk1MjNkNi4uN2UzYWUwYzZjYmEzYiAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTg0MywxOSAmIzQzOzg0MywyMiBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpCiAJaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pICZhbXA7JmFtcDsgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpIHsKIAkJLyogQWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuICovCiAJCWlmIChpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIHZtYV9mbGFncykpIHsKLQkJCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7CiYjNDM7CQkJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTsKJiM0MzsJCQlmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJfQogCi0JCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKIAkvKiBQcm9tb3RlIG9uIHNlY29uZCBhY2Nlc3MgKi8KLQlpZiAoZm9saW9fbHJ1X3JlZnMoZm9saW8pICZndDsgMSkKLQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTsKLQllbHNlCiYjNDM7CWlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgJmd0OyAxKSB7CiYjNDM7CQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwomIzQzOwkJZm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pOwomIzQzOwl9IGVsc2UgewogCQlmb2xpb19tYXJrX2FjY2Vzc2VkKGZvbGlvKTsKJiM0MzsJfQogCXJldHVybiB0cnVlOwogfQogI2Vsc2UKQEAgLTMxOTUsOCAmIzQzOzMxOTgsOCBAQCBzdHJ1Y3QgY3RybF9wb3MgewogCWludCBnYWluOwogfTsKIAotc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllciwgaW50IGdhaW4sCi0JCQkgIHN0cnVjdCBjdHJsX3BvcyAqcG9zKQomIzQzO3N0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXJfbWluLAomIzQzOwkJCSAgaW50IHRpZXJfbWF4LCBpbnQgZ2Fpbiwgc3RydWN0IGN0cmxfcG9zICpwb3MpCiB7CiAJaW50IGk7CiAJc3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9ICZhbXA7bHJ1dmVjLSZndDtscnVnZW47CkBAIC0zMjA1LDcgJiM0MzszMjA4LDcgQEAgc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllciwgaW50IGdhaW4sCiAJcG9zLSZndDtnYWluID0gZ2FpbjsKIAlwb3MtJmd0O3JlZmF1bHRlZCA9IHBvcy0mZ3Q7dG90YWwgPSAwOwogCi0JZm9yIChpID0gdGllciAlIE1BWF9OUl9USUVSUzsgaSAmbHQ7PSBtaW4odGllciwgTUFYX05SX1RJRVJTIC0gMSk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CWZvciAoaSA9IHRpZXJfbWluOyBpICZsdDs9IHRpZXJfbWF4OyBpJiM0MzsmIzQzOykgewogCQlwb3MtJmd0O3JlZmF1bHRlZCAmIzQzOz0gbHJ1Z2VuLSZndDthdmdfcmVmYXVsdGVkW3R5cGVdW2ldICYjNDM7CiAJCQkJICBhdG9taWNfbG9uZ19yZWFkKCZhbXA7bHJ1Z2VuLSZndDtyZWZhdWx0ZWRbaGlzdF1bdHlwZV1baV0pOwogCQlwb3MtJmd0O3RvdGFsICYjNDM7PSBscnVnZW4tJmd0O2F2Z190b3RhbFt0eXBlXVtpXSAmIzQzOwpAQCAtMzI2NiwxMSAmIzQzOzMyNjksMTEgQEAgc3RhdGljIGJvb2wgcG9zaXRpdmVfY3RybF9lcnIoc3RydWN0IGN0cmxfcG9zICpzcCwgc3RydWN0IGN0cmxfcG9zICpwdikKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qIHByb21vdGUgcGFnZXMgYWNjZXNzZWQgdGhyb3VnaCBwYWdlIHRhYmxlcyAqLwotc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpCiYjNDM7c3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBpbnQgKmlzX2ZpbGUsCiYjNDM7CQkJICAgIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpCiB7Ci0JdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby0mZ3Q7ZmxhZ3MuZik7Ci0KLQlWTV9XQVJOX09OX09OQ0UoZ2VuICZndDs9IE1BWF9OUl9HRU5TKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTsKJiM0MzsJaW50IG9sZF9nZW47CiAKIAkvKgogCSAqIFNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUywgYW5kIGFjdGl2YXRlIGZpbGUtYmFja2VkCkBAIC0zMjc5LDIwICYjNDM7MzI4MiwyNSBAQCBzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYQogCSAqLwogCWlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSAmYW1wOyZhbXA7ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pICZhbXA7JmFtcDsKIAkgICAgIWlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkgewotCQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7CiYjNDM7CQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJZG8gewomIzQzOwkJb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9mbGFncyhvbGRfZmxhZ3MpOwomIzQzOwkJbmV3X2ZsYWdzID0gb2xkX2ZsYWdzOwomIzQzOwogCQkvKiBscnVfZ2VuX2RlbF9mb2xpbygpIGhhcyBpc29sYXRlZCB0aGlzIHBhZ2U/ICovCi0JCWlmICghKG9sZF9mbGFncyAmYW1wOyBMUlVfR0VOX01BU0spKQotCQkJcmV0dXJuIC0xOwomIzQzOwkJaWYgKG9sZF9nZW4gJmx0OyAwKQomIzQzOwkJCWJyZWFrOwogCi0JCW5ld19mbGFncyA9IG9sZF9mbGFncyAmYW1wOyB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTsKLQkJbmV3X2ZsYWdzIHw9ICgoZ2VuICYjNDM7IDFVTCkgJmx0OyZsdDsgTFJVX0dFTl9QR09GRikgfCBCSVQoUEdfd29ya2luZ3NldCk7Ci0JfSB3aGlsZSAoIXRyeV9jbXB4Y2hnKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsICZhbXA7b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTsKJiM0MzsJCWxydV9nZW5fc2V0X2ZsYWdzKCZhbXA7bmV3X2ZsYWdzLCBuZXdfZ2VuKTsKJiM0MzsJCWxydV9yZWZzX3NldF9mbGFncygmYW1wO25ld19mbGFncywgMCk7CiYjNDM7CQluZXdfZmxhZ3MgfD0gQklUKFBHX3dvcmtpbmdzZXQpOwomIzQzOwl9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiAKLQlyZXR1cm4gKChvbGRfZmxhZ3MgJmFtcDsgTFJVX0dFTl9NQVNLKSAmZ3Q7Jmd0OyBMUlVfR0VOX1BHT0ZGKSAtIDE7CiYjNDM7CSppc19maWxlID0gZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUoJmFtcDtvbGRfZmxhZ3MpOwomIzQzOwlyZXR1cm4gb2xkX2dlbjsKIH0KIAogLyogcHJvdGVjdCBwYWdlcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMgKi8KQEAgLTMzMDAsMjIgJiM0MzszMzA4LDI1IEBAIHN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJaW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7CiAJc3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9ICZhbXA7bHJ1dmVjLSZndDtscnVnZW47Ci0JaW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi0mZ3Q7bWluX3NlcVt0eXBlXSk7Ci0JdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby0mZ3Q7ZmxhZ3MuZik7Ci0KLQlWTV9XQVJOX09OX09OQ0VfRk9MSU8oIShvbGRfZmxhZ3MgJmFtcDsgTFJVX0dFTl9NQVNLKSwgZm9saW8pOwomIzQzOwlpbnQgbmV3X2dlbiwgb2xkX2dlbiwgbWluX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLSZndDttaW5fc2VxW3R5cGVdKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTsKIAogCWRvIHsKLQkJbmV3X2dlbiA9ICgob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwotCQkvKiBmb2xpb191cGRhdGVfZ2VuKCkgaGFzIHByb21vdGVkIHRoaXMgcGFnZT8gKi8KLQkJaWYgKG5ld19nZW4gJmd0Oz0gMCAmYW1wOyZhbXA7IG5ld19nZW4gIT0gb2xkX2dlbikKLQkJCXJldHVybiBuZXdfZ2VuOwomIzQzOwkJb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9mbGFncyhvbGRfZmxhZ3MpOwomIzQzOwkJLyogVGhpcyBoZWxwZXIgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBmb3Igb2ZmLWxpc3QgZm9saW9zICovCiYjNDM7CQlWTV9XQVJOX09OX09OQ0Uob2xkX2dlbiAmbHQ7IDApOwomIzQzOwkJaWYgKG9sZF9nZW4gJmx0OyAwKQomIzQzOwkJCXJldHVybiBtaW5fZ2VuOwogCi0JCW5ld19nZW4gPSAob2xkX2dlbiAmIzQzOyAxKSAlIE1BWF9OUl9HRU5TOwomIzQzOwkJLyogZm9saW9fdXBkYXRlX2dlbigpIGhhcyBwcm9tb3RlZCB0aGlzIHBhZ2U/ICovCiYjNDM7CQlpZiAob2xkX2dlbiAhPSBtaW5fZ2VuKQomIzQzOwkJCXJldHVybiBvbGRfZ2VuOwogCi0JCW5ld19mbGFncyA9IG9sZF9mbGFncyAmYW1wOyB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTsKLQkJbmV3X2ZsYWdzIHw9IChuZXdfZ2VuICYjNDM7IDFVTCkgJmx0OyZsdDsgTFJVX0dFTl9QR09GRjsKLQl9IHdoaWxlICghdHJ5X2NtcHhjaGcoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwomIzQzOwkJbmV3X2ZsYWdzID0gb2xkX2ZsYWdzOwomIzQzOwkJbmV3X2dlbiA9IChtaW5fZ2VuICYjNDM7IDEpICUgTUFYX05SX0dFTlM7CiYjNDM7CQlscnVfZ2VuX3NldF9mbGFncygmYW1wO25ld19mbGFncywgbmV3X2dlbik7CiYjNDM7CQlscnVfcmVmc19zZXRfZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIDApOwomIzQzOwl9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiAKIAlscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pOwogCkBAIC0zMzIzLDkgJiM0MzszMzM0LDggQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbykKIH0KIAogc3RhdGljIHZvaWQgdXBkYXRlX2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IGZvbGlvICpmb2xpbywKLQkJCSAgICAgIGludCBvbGRfZ2VuLCBpbnQgbmV3X2dlbikKJiM0MzsJCQkgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4sIGludCB0eXBlKQogewotCWludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pOwogCWludCB6b25lID0gZm9saW9fem9uZW51bShmb2xpbyk7CiAJaW50IGRlbHRhID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwogCkBAIC0zNTEyLDIyICYjNDM7MzUyMiwyNCBAQCBzdGF0aWMgYm9vbCBzdWl0YWJsZV90b19zY2FuKGludCB0b3RhbCwgaW50IHlvdW5nKQogfQogCiBzdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGJvb2wgZGlydHkpCiYjNDM7CQkJICAgICAgc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIGRpcnR5KQogewotCWludCBvbGRfZ2VuOwomIzQzOwlpbnQgbmV3X2dlbiwgb2xkX2dlbiwgZmlsZTsKIAogCWlmICghZm9saW8pCiAJCXJldHVybjsKIAomIzQzOwluZXdfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShSRUFEX09OQ0UobHJ1dmVjLSZndDtscnVnZW4ubWF4X3NlcSkpOwomIzQzOwogCWlmIChkaXJ0eSAmYW1wOyZhbXA7ICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSAmYW1wOyZhbXA7CiAJICAgICEoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSAmYW1wOyZhbXA7IGZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykgJmFtcDsmYW1wOwogCSAgICAgICFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpKQogCQlmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTsKIAogCWlmICh3YWxrKSB7Ci0JCW9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuLCAmYW1wO3ZtYS0mZ3Q7ZmxhZ3MpOwomIzQzOwkJb2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sICZhbXA7ZmlsZSwgJmFtcDt2bWEtJmd0O2ZsYWdzKTsKIAkJaWYgKG9sZF9nZW4gJmd0Oz0gMCAmYW1wOyZhbXA7IG9sZF9nZW4gIT0gbmV3X2dlbikKLQkJCXVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTsKJiM0MzsJCQl1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbiwgZmlsZSk7CiAJfSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCAmYW1wO3ZtYS0mZ3Q7ZmxhZ3MpKSB7CiAJCW9sZF9nZW4gPSBmb2xpb19scnVfZ2VuKGZvbGlvKTsKIAkJaWYgKG9sZF9nZW4gJmd0Oz0gMCAmYW1wOyZhbXA7IG9sZF9nZW4gIT0gbmV3X2dlbikKQEAgLTM1NDksOCAmIzQzOzM1NjEsNiBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIAlzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy0mZ3Q7cHJpdmF0ZTsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay0mZ3Q7bHJ1dmVjKTsKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstJmd0O2xydXZlYyk7Ci0JREVGSU5FX01BWF9TRVEod2Fsay0mZ3Q7bHJ1dmVjKTsKLQlpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTsKIAl1bnNpZ25lZCBpbnQgbnI7CiAJcG1kX3QgcG1kdmFsOwogCkBAIC0zNjAxLDcgJiM0MzszNjExLDcgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCQljb250aW51ZTsKIAogCQlpZiAobGFzdCAhPSBmb2xpbykgewotCQkJd2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy0mZ3Q7dm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJCQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLSZndDt2bWEsIHdhbGstJmd0O2xydXZlYywgbGFzdCwgZGlydHkpOwogCiAJCQlsYXN0ID0gZm9saW87CiAJCQlkaXJ0eSA9IGZhbHNlOwpAQCAtMzYxNCw3ICYjNDM7MzYyNCw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQl3YWxrLSZndDttbV9zdGF0c1tNTV9MRUFGX1lPVU5HXSAmIzQzOz0gbnI7CiAJfQogCi0Jd2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy0mZ3Q7dm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJd2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy0mZ3Q7dm1hLCB3YWxrLSZndDtscnV2ZWMsIGxhc3QsIGRpcnR5KTsKIAlsYXN0ID0gTlVMTDsKIAogCWlmIChpICZsdDsgUFRSU19QRVJfUFRFICZhbXA7JmFtcDsgZ2V0X25leHRfdm1hKFBNRF9NQVNLLCBQQUdFX1NJWkUsIGFyZ3MsICZhbXA7c3RhcnQsICZhbXA7ZW5kKSkKQEAgLTM2MzcsOCAmIzQzOzM2NDcsNiBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYQogCXN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLSZndDtwcml2YXRlOwogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLSZndDtscnV2ZWMpOwogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQod2Fsay0mZ3Q7bHJ1dmVjKTsKLQlERUZJTkVfTUFYX1NFUSh3YWxrLSZndDtscnV2ZWMpOwotCWludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpOwogCiAJVk1fV0FSTl9PTl9PTkNFKHB1ZF9sZWFmKCpwdWQpKTsKIApAQCAtMzY5Miw3ICYjNDM7MzcwMCw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhCiAJCQlnb3RvIG5leHQ7CiAKIAkJaWYgKGxhc3QgIT0gZm9saW8pIHsKLQkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CQkJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCB3YWxrLSZndDtscnV2ZWMsIGxhc3QsIGRpcnR5KTsKIAogCQkJbGFzdCA9IGZvbGlvOwogCQkJZGlydHkgPSBmYWxzZTsKQEAgLTM3MDYsNyAmIzQzOzM3MTQsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYQogCQlpID0gaSAmZ3Q7IE1JTl9MUlVfQkFUQ0ggPyAwIDogZmluZF9uZXh0X2JpdChiaXRtYXAsIE1JTl9MUlVfQkFUQ0gsIGkpICYjNDM7IDE7CiAJfSB3aGlsZSAoaSAmbHQ7PSBNSU5fTFJVX0JBVENIKTsKIAotCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay0mZ3Q7bHJ1dmVjLCBsYXN0LCBkaXJ0eSk7CiAKIAlsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTsKIAlzcGluX3VubG9jayhwdGwpOwpAQCAtNDI3MCw4ICYjNDM7NDI3OCw2IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucikKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gZm9saW9fcGdkYXQoZm9saW8pOwogCXN0cnVjdCBscnV2ZWMgKmxydXZlYzsKIAlzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGU7Ci0JdW5zaWduZWQgbG9uZyBtYXhfc2VxOwotCWludCBnZW47CiAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKHB2bXctJmd0O3B0bCk7CiAJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSwgZm9saW8pOwpAQCAtNDMwOCw4ICYjNDM7NDMxNCw2IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucikKIAogCW1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7CiAJbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTsKLQltYXhfc2VxID0gUkVBRF9PTkNFKChscnV2ZWMpLSZndDtscnVnZW4ubWF4X3NlcSk7Ci0JZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTsKIAltbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpOwogCiAJbGF6eV9tbXVfbW9kZV9lbmFibGUoKTsKQEAgLTQzNDEsNyAmIzQzOzQzNDUsNyBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpCiAJCQljb250aW51ZTsKIAogCQlpZiAobGFzdCAhPSBmb2xpbykgewotCQkJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJCQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxydXZlYywgbGFzdCwgZGlydHkpOwogCiAJCQlsYXN0ID0gZm9saW87CiAJCQlkaXJ0eSA9IGZhbHNlOwpAQCAtNDM1MywxMyAmIzQzOzQzNTcsMTQgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKQogCQl5b3VuZyAmIzQzOz0gbnI7CiAJfQogCi0Jd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTsKIAogCWxhenlfbW11X21vZGVfZGlzYWJsZSgpOwogCiAJLyogZmVlZGJhY2sgZnJvbSBybWFwIHdhbGtlcnMgdG8gcGFnZSB0YWJsZSB3YWxrZXJzICovCiAJaWYgKG1tX3N0YXRlICZhbXA7JmFtcDsgc3VpdGFibGVfdG9fc2NhbihpLCB5b3VuZykpCi0JCXVwZGF0ZV9ibG9vbV9maWx0ZXIobW1fc3RhdGUsIG1heF9zZXEsIHB2bXctJmd0O3BtZCk7CiYjNDM7CQl1cGRhdGVfYmxvb21fZmlsdGVyKG1tX3N0YXRlLCBSRUFEX09OQ0UobHJ1dmVjLSZndDtscnVnZW4ubWF4X3NlcSksCiYjNDM7CQkJCSAgICBwdm13LSZndDtwbWQpOwogCiAJbWVtX2Nncm91cF9wdXQobWVtY2cpOwogCkBAIC00NzExLDcgJiM0Mzs0NzE2LDcgQEAgc3RhdGljIGJvb2wgaXNvbGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2EKIAogCS8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqLwogCWlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSkKLQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19NQVNLLCAwKTsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7CiAKIAlzdWNjZXNzID0gbHJ1X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7CiAJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFzdWNjZXNzLCBmb2xpbyk7CkBAIC00ODA0LDkgJiM0Mzs0ODA5LDkgQEAgc3RhdGljIGludCBnZXRfdGllcl9pZHgoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSkKIAkgKiBUaGlzIHZhbHVlIGlzIGNob3NlbiBiZWNhdXNlIGFueSBvdGhlciB0aWVyIHdvdWxkIGhhdmUgYXQgbGVhc3QgdHdpY2UKIAkgKiBhcyBtYW55IHJlZmF1bHRzIGFzIHRoZSBmaXJzdCB0aWVyLgogCSAqLwotCXJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCAwLCAyLCAmYW1wO3NwKTsKLQlmb3IgKHRpZXIgPSAxOyB0aWVyICZsdDsgTUFYX05SX1RJRVJTOyB0aWVyJiM0MzsmIzQzOykgewotCQlyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdGllciwgMywgJmFtcDtwdik7CiYjNDM7CXJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01JTiwgMiwgJmFtcDtzcCk7CiYjNDM7CWZvciAodGllciA9IExSVV9USUVSX01JTiAmIzQzOyAxOyB0aWVyICZsdDs9IExSVV9USUVSX01BWDsgdGllciYjNDM7JiM0MzspIHsKJiM0MzsJCXJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0aWVyLCB0aWVyLCAzLCAmYW1wO3B2KTsKIAkJaWYgKCFwb3NpdGl2ZV9jdHJsX2VycigmYW1wO3NwLCAmYW1wO3B2KSkKIAkJCWJyZWFrOwogCX0KQEAgLTQ4MjcsOCAmIzQzOzQ4MzIsMTAgQEAgc3RhdGljIGludCBnZXRfdHlwZV90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpCiAJICogQ29tcGFyZSB0aGUgc3VtIG9mIGFsbCB0aWVycyBvZiBhbm9uIHdpdGggdGhhdCBvZiBmaWxlIHRvIGRldGVybWluZQogCSAqIHdoaWNoIHR5cGUgdG8gc2Nhbi4KIAkgKi8KLQlyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBNQVhfTlJfVElFUlMsIHN3YXBwaW5lc3MsICZhbXA7c3ApOwotCXJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIE1BWF9OUl9USUVSUywgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCAmYW1wO3B2KTsKJiM0MzsJcmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fQU5PTiwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NQVgsCiYjNDM7CQkgICAgICBzd2FwcGluZXNzLCAmYW1wO3NwKTsKJiM0MzsJcmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NQVgsCiYjNDM7CQkgICAgICBNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3MsICZhbXA7cHYpOwogCiAJcmV0dXJuIHBvc2l0aXZlX2N0cmxfZXJyKCZhbXA7c3AsICZhbXA7cHYpOwogfQpAQCAtNDkyNyw4ICYjNDM7NDkzNCwxMCBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJfQogCiAJCS8qIGRvbiYjMzk7dCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqLwotCQlpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pCi0JCQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfYWN0aXZlKSk7CiYjNDM7CQlpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pIHsKJiM0MzsJCQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwomIzQzOwkJCWZvbGlvX3NldF9hY3RpdmUoZm9saW8pOwomIzQzOwkJfQogCX0KIAogCW1vdmVfZm9saW9zX3RvX2xydSgmYW1wO2xpc3QpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY0OQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDQ1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1HTFJVIFBhdGNoOiBBIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0JiMzOTtzIHR3ZWFraW5nIHRoZSBNdWx0aS1HZW4gTFJVIGltcGxlbWVudGF0aW9uIHdpdGhpbiB0aGUgTGludXgga2VybmVsLCBhbmQgdGhlIGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgc2lnbmlmaWNhbnQuIEl0JiMzOTtzIG1vZGlmeWluZyBob3cgdGhlIExSVSBnZW5lcmF0aW9uIGFuZCByZWZlcmVuY2UgZmxhZ3MgYXJlIG1hbmFnZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBmb2xpby0mZ3Q7ZmxhZ3NgIHN0cnVjdHVyZS4gUmF0aGVyIHRoYW4gZGlyZWN0IGJpdG1hc2sgbWFuaXB1bGF0aW9ucywgaXQmIzM5O3MgcmVwbGFjaW5nIHRoZW0gd2l0aCBoZWxwZXIgZnVuY3Rpb25zLCBsaWtlIGBscnVfZ2VuX2Zyb21fZmxhZ3NgLCBhbmQgc28gb24uIFRoYXQgc2VlbXMgbGlrZSBhIGdvb2QgbW92ZSwgcG90ZW50aWFsbHkgaW1wcm92aW5nIHJlYWRhYmlsaXR5IGFuZCBtYWludGFpbmFiaWxpdHkuCgpUaGUgY2hhbmdlIGZyb20gYHVuc2lnbmVkIGxvbmdgIHRvIGBhdG9taWNfbG9uZ190YCBmb3IgYGxydV96b25lX3NpemVgIGluIGBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZWAgaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBleWUuIFRoaXMgc3VnZ2VzdHMgdGhlcmUgYXJlIGxpa2VseSBjb25jdXJyZW5jeSBpbXBsaWNhdGlvbnMgdGhhdCBuZWVkIGNhcmVmdWwgZXhhbWluYXRpb24sIGFuZCB0aGF0IGNvdWxkIGludHJvZHVjZSBzdWJ0bGUgYnVncyBpZiB0aGUgYXRvbWljIG9wZXJhdGlvbnMgYXJlbiYjMzk7dCBoYW5kbGVkIGNvcnJlY3RseS4KCkZ1bmN0aW9uYWxseSwgdGhpcyBpbXBhY3RzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMg4oCTIGJvdGggdGhlIE1HTFJVIGl0c2VsZiAqYW5kKiB0aGUgbWVtY2cgTFJVIHNpemUgdHJhY2tpbmcsIHNvIGl0JiMzOTtzIGEgaGlnaC1pbXBhY3QgYXJlYS4gVGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcuIEkmIzM5O2xsIG5lZWQgdG8gaWRlbnRpZnkgc3BlY2lmaWMgZnVuY3Rpb25zIHRvIHRhcmdldC4KCkEgcXVpY2sgc2NhbiBvZiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGxpc3QgcmV2ZWFscyB0aGUgZm9sbG93aW5nOiBgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZWAsIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAsIGBmb2xpb19taWdyYXRlX2ZsYWdzYCwgYGxydV9nZW5fbG9va19hcm91bmRgLCBgd2Fsa19wdGVfcmFuZ2VgLCBgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkYCwgYGV2aWN0X2ZvbGlvc2AsIGBnZXRfdGllcl9pZHhgLCBgZ2V0X3R5cGVfdG9fc2NhbmAsIGBmb2xpb19pbmNfZ2VuYCwgYGZvbGlvX3VwZGF0ZV9nZW5gLCBgbHJ1X2dlbl9pbmNfcmVmc2AsIGFuZCBgbHJ1X2dlbl9jbGVhcl9yZWZzYC4gTm93LCBsZXQmIzM5O3MgZm9jdXMuCgpHaXZlbiB0aGUgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBhbmQgdGhlaXIgaW1wYWN0IG9uIG1lbWNnLCBJJiMzOTtsbCBwcmlvcml0aXplIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgYW5kIGBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplYC4gT2YgY291cnNlLCBJJiMzOTtsbCBhbHNvIGNvbmNlbnRyYXRlIG9uIHRob3NlIHNwZWNpZmljIHRvIE1HTFJVIGxpa2UgYGxydV9nZW5fbG9va19hcm91bmRgIGFuZCBgZXZpY3RfZm9saW9zYC4gVGhlc2UgYXJlIGxpa2VseSB0aGUgbW9zdCBjcml0aWNhbCBwYXJ0cyBvZiB0aGUgY29kZS4KCkJlZm9yZSBJIGdvIGZ1cnRoZXIgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnLiBJJiMzOTtsbCBtYWtlIHN1cmUgdGhhdCBgQ09ORklHX0xSVV9HRU5gIGlzIGVuYWJsZWQgYmVjYXVzZSBvdGhlcndpc2UsIHRoaXMgcGF0Y2ggd29uJiMzOTt0IGV2ZW4gYmUgcmVsZXZhbnQsIHNvIEkgbmVlZCB0byB2ZXJpZnkgdGhhdC4gR290dGEgbWFrZSBzdXJlIHRoZSBmb3VuZGF0aW9uIGlzIHNvdW5kIGJlZm9yZSBkaXZpbmcgaW50byB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTFJVX0dFTiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEzOTM9Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxuLS1cbm1tL0tjb25maWctMTQwMy0jIG11bHRpLWdlbiBMUlUge1xubW0vS2NvbmZpZzoxNDA0OmNvbmZpZyBMUlVfR0VOXG5tbS9LY29uZmlnLTE0MDUtXHRib29sIFwmIzM0O011bHRpLUdlbiBMUlVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MTItXG5tbS9LY29uZmlnOjE0MTM6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxubW0vS2NvbmZpZy0xNDE0LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQxOC1cbm1tL0tjb25maWc6MTQxOTpjb25maWcgTFJVX0dFTl9TVEFUU1xubW0vS2NvbmZpZy0xNDIwLVx0Ym9vbCBcJiMzNDtGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MjctXG5tbS9LY29uZmlnOjE0Mjg6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXG5tbS9LY29uZmlnLTE0MjktXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDU6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4OTMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29uc2lkZXJpbmcgTFJVIEdlbmVyYXRpb24gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgTFJVX0dFTmAgY29uZmlndXJhdGlvbiBvcHRpb24uIE1ha2VzIHNlbnNlLCB0aGF0JiMzOTtzIHRoZSBjb3JlLiBUbyBtYWtlIHRoaW5ncyBlYXN5LCB3ZSBzaG91bGQgZW5hYmxlIGl0IGJ5IGRlZmF1bHQgYnkgYWRkaW5nIGBMUlVfR0VOX0VOQUJMRURgLCBvciBnaXZlIHRoZSB1c2VyIGNvbnRyb2wgd2l0aCBhIHN5c2ZzIGVudHJ5LiBJIHRoaW5rIHdlIHNob3VsZCBpbmNsdWRlIGJvdGggb3B0aW9ucyBmb3IgbWF4aW11bSBmbGV4aWJpbGl0eS4gU28sIEkmIzM5O2xsIGFkZCBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgIHRvIHRoZSBjb25maWcuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcy4gSSBzaG91bGQgY2hlY2sgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBiZWluZyBtb2RpZmllZC4KCkhtbSwgbGV0JiMzOTtzIHNlZSwgd2hhdCBhYm91dCBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgPyBJIHdvbmRlciBpZiB0aGF0JiMzOTtzIGFuIGV4cG9ydGVkIGZ1bmN0aW9uLCBvciBpZiBpdCYjMzk7cyBzdGF0aWM/IEkmIzM5O2xsIHF1aWNrbHkgdXNlIGdyZXAgdG8gZmluZCBhbGwgaW5zdGFuY2VzIG9mIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgdG8gZ2V0IGEgYmV0dGVyIG92ZXJ2aWV3IG9mIGl0cyB1c2FnZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIHdoZXJlIHRoaXMgbW9kaWZpY2F0aW9uIGlzIGhhcHBlbmluZyB3aXRoaW4gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDU6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9ODg2PXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtODkyLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6ODkzOnZvaWQgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIGxydV9saXN0IGxydSxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTg5NC1cdFx0aW50IHppZCwgbG9uZyBucl9wYWdlcyk7XG4tLVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD01Mj1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTU3LSNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6NTg6XHRtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShscnV2ZWMsIGxydSwgemlkLCBucl9wYWdlcyk7XG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTU5LSNlbmRpZlxuLS1cbm1tL2ZvbGlvLmM9MTEyMz1zdGF0aWMgdm9pZCBscnV2ZWNfcmVwYXJlbnRfbHJ1KHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYyxcbi0tXG5tbS9mb2xpby5jLTExMzUtXG5tbS9mb2xpby5jOjExMzY6XHRcdG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHBhcmVudF9scnV2ZWMsIGxydSwgemlkLCBzaXplKTtcbm1tL2ZvbGlvLmMtMTEzNy1cdH1cbi0tXG5tbS9tZW1jb250cm9sLmM9MTUwMT1zdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnFzYXZlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vbWVtY29udHJvbC5jLTE1MTgtLyoqXG5tbS9tZW1jb250cm9sLmM6MTUxOTogKiBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZSAtIGFjY291bnQgZm9yIGFkZGluZyBvciByZW1vdmluZyBhbiBscnUgcGFnZVxubW0vbWVtY29udHJvbC5jLTE1MjAtICogQGxydXZlYzogbWVtX2Nncm91cCBwZXIgem9uZSBscnUgdmVjdG9yXG4tLVxubW0vbWVtY29udHJvbC5jLTE1MjctICovXG5tbS9tZW1jb250cm9sLmM6MTUyODp2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXG5tbS9tZW1jb250cm9sLmMtMTUyOS1cdFx0XHRcdGludCB6aWQsIGxvbmcgbnJfcGFnZXMpXG4tLVxubW0vdm1zY2FuLmM9MTU5Mj11bnNpZ25lZCBpbnQgcmVjbGFpbV9jbGVhbl9wYWdlc19mcm9tX2xpc3Qoc3RydWN0IHpvbmUgKnpvbmUsXG4tLVxubW0vdm1zY2FuLmMtMTY0NC0gKiBVcGRhdGUgTFJVIHNpemVzIGFmdGVyIGlzb2xhdGluZyBwYWdlcy4gVGhlIExSVSBzaXplIHVwZGF0ZXMgbXVzdFxubW0vdm1zY2FuLmM6MTY0NTogKiBiZSBjb21wbGV0ZSBiZWZvcmUgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUgZHVlIHRvIGEgc2FuaXR5IGNoZWNrLlxubW0vdm1zY2FuLmMtMTY0Ni0gKi9cbi0tXG5tbS92bXNjYW4uYz00NjI1PXZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXG4tLVxubW0vdm1zY2FuLmMtNDY0Mi1cbm1tL3Ztc2Nhbi5jOjQ2NDM6XHRcdFx0bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUocGFyZW50X2xydXZlYywgbHJ1LCB6aWQsIHNpemUpO1xubW0vdm1zY2FuLmMtNDY0NC1cdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA1OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDE1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGZhbWlsaWFyIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQ6CgoqKkNoZWNraW5nIG9uIExSVSBTaXplIFVwZGF0ZXMqKgoKSG1tLCBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgIGlzIGV4cG9ydGVkIGFuZCBub24tc3RhdGljLiBJbnRlcmVzdGluZy4gVGhhdCBsaWtlbHkgbWVhbnMgaXQmIzM5O3MgZGVzaWduZWQgdG8gYmUgY2FsbGVkIGZyb20gb3RoZXIgbW9kdWxlcyBvciBwYXJ0cyBvZiB0aGUga2VybmVsLiBUaGlzIHJhaXNlcyBzb21lIHF1ZXN0aW9ucyBhYm91dCBob3cgYnJvYWRseSBpdCYjMzk7cyB1c2VkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMuIEkgc2hvdWxkIHByb2JhYmx5IHJldmlldyB0aGUgY2FsbCBzaXRlcyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaXRzIGltcGFjdCBvbiB0aGUgc3lzdGVtLgoKTm93LCB3aGF0IGFib3V0IGBscnVfZ2VuX2xvb2tfYXJvdW5kYD8gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIGl0cyBkZWZpbml0aW9uIGFuZCBwdXJwb3NlLiBJcyB0aGF0IGFsc28gZXhwb3J0ZWQ/IElzIGl0IHN0YXRpYz8gVGhhdCYjMzk7cyBnb2luZyB0byBpbmZsdWVuY2UgaG93IEkgc2VlIHRoaW5ncy4gSSBuZWVkIHRvIGtub3cgaG93IGl0IHJlbGF0ZXMgdG8gYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCBhbmQgaG93IGl0IG1pZ2h0IGltcGFjdCBMUlUgc2l6ZSBjYWxjdWxhdGlvbnMuIE1heWJlIEkgc2hvdWxkIHF1aWNrbHkgZ3JlcCB0aGUgY29kZWJhc2UgdG8gZmluZCB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkIGFuZCB1c2VkIHRvIGdldCB0aGUgbGF5IG9mIHRoZSBsYW5kLiBJdCYjMzk7cyBwcm9iYWJseSBjYWxsZWQgYnkgc29tZSBraW5kIG9mIHNjaGVkdWxlciBvciBwYWdlIHJlY2xhaW0gbWVjaGFuaXNtLCBzbyB1bmRlcnN0YW5kaW5nIGl0cyByb2xlIGlzIGltcG9ydGFudCBmb3IgdGhlIGNvbXBsZXRlIG1lbW9yeSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA1OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5fbG9va19hcm91bmQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0PTE4Nz1jYW4gaW5jdXIgdGhlIGhpZ2hlc3QgQ1BVIGNvc3QgaW4gdGhlIHJlY2xhaW0gcGF0aC5cbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdC0xODgtXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3Q6MTg5OmBgbHJ1X2dlbl9sb29rX2Fyb3VuZCgpYGAgZXhwbG9pdHMgc3BhdGlhbCBsb2NhbGl0eSB0byByZWR1Y2UgdGhlXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3QtMTkwLXRyaXBzIGludG8gdGhlIHJtYXAuIEl0IHNjYW5zIHRoZSBhZGphY2VudCBQVEVzIG9mIGEgeW91bmcgUFRFIGFuZFxuLS1cbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdD0xOTk9aW4gdGhlIHNldC5cbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdC0yMDAtXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3Q6MjAxOkluIHRoZSBldmljdGlvbiBwYXRoLCBzcGVjaWZpY2FsbHksIGluIGBgbHJ1X2dlbl9sb29rX2Fyb3VuZCgpYGAsIGlmIGFcbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdC0yMDItUE1EIGhhcyBhIHN1ZmZpY2llbnQgbnVtYmVyIG9mIGhvdCBwYWdlcywgaXRzIGFkZHJlc3MgaXMgcGxhY2VkIGluIHRoZVxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmg9Njk1PXZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo2OTY6Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKTtcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNjk3LVxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmg9NzE0PXN0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTcxNy1cbmluY2x1ZGUvbGludXgvbW16b25lLmg6NzE4OnN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzE5LVx0XHR1bnNpZ25lZCBpbnQgbnIpXG4tLVxubW0vcm1hcC5jPTkxOD1zdGF0aWMgYm9vbCBmb2xpb19yZWZlcmVuY2VkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3JtYXAuYy05ODItXHRcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkgXHUwMDI2XHUwMDI2IHB2bXcucHRlKSB7XG5tbS9ybWFwLmM6OTgzOlx0XHRcdGlmIChscnVfZ2VuX2xvb2tfYXJvdW5kKFx1MDAyNnB2bXcsIG5yKSlcbm1tL3JtYXAuYy05ODQtXHRcdFx0XHRyZWZlcmVuY2VkJiM0MzsmIzQzOztcbi0tXG5tbS92bXNjYW4uYz0yNzkxPXN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIHNlcV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4tLVxubW0vdm1zY2FuLmMtMjgyMC0gKiB3YWxrX3BtZF9yYW5nZSgpOyB0aGUgZXZpY3Rpb24gYWxzbyByZXBvcnQgdGhlbSB3aGVuIHdhbGtpbmcgdGhlIHJtYXBcbm1tL3Ztc2Nhbi5jOjI4MjE6ICogaW4gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLlxubW0vdm1zY2FuLmMtMjgyMi0gKlxuLS1cbm1tL3Ztc2Nhbi5jPTQwNzg9c3RhdGljIGJvb2wgdHJ5X3RvX2luY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXG4tLVxubW0vdm1zY2FuLmMtNDA5Ny1cdCAqIElmIHRoZSBoYXJkd2FyZSBkb2VzbiYjMzk7dCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgYWNjZXNzZWQgYml0LCBmYWxsYmFja1xubW0vdm1zY2FuLmM6NDA5ODpcdCAqIHRvIGxydV9nZW5fbG9va19hcm91bmQoKSwgd2hpY2ggb25seSBjbGVhcnMgdGhlIGFjY2Vzc2VkIGJpdCBpbiBhXG5tbS92bXNjYW4uYy00MDk5LVx0ICogaGFuZGZ1bCBvZiBQVEVzLiBTcHJlYWRpbmcgdGhlIHdvcmsgb3V0IG92ZXIgYSBwZXJpb2Qgb2YgdGltZSB1c3VhbGx5XG4tLVxubW0vdm1zY2FuLmM9NDIxNz1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTQyNjMtICovXG5tbS92bXNjYW4uYzo0MjY0OmJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbm1tL3Ztc2Nhbi5jLTQyNjUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA1OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjE4CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmc6CgoqKkV4YW1pbmluZyBQb3RlbnRpYWwgT3B0aW1pemF0aW9uIE9wcG9ydHVuaXRpZXMqKgoKT2theSwgbGV0JiMzOTtzIHNlZS4gSSYjMzk7bSBsb29raW5nIGF0IGBscnVfZ2VuX2xvb2tfYXJvdW5kYCwgYW5kIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBmb2xpb19yZWZlcmVuY2VkX29uZWAuIFRoYXQmIzM5O3MgdGhlIGltbWVkaWF0ZSBjb250ZXh0LiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGJyb2FkZXIgaW1wbGljYXRpb25zLiBUaGlzIGxpa2VseSBoYXMgaW1wbGljYXRpb25zIGZvciB0aGUgTFJVIGNhY2hlIGludGVyYWN0aW9uLCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBtaWdyYXRpb24gZmxhZ3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBBcmUgdGhlcmUgaW50ZXJhY3Rpb25zIG9yIGRlcGVuZGVuY2llcyB0aGVyZSB0aGF0IGNhbiBiZSBzdHJlYW1saW5lZD8gSXMgdGhlcmUgc2hhcmVkIGZ1bmN0aW9uYWxpdHk/IEFyZSB0aGUgZmxhZ3MgdXNlZCBkdXJpbmcgbG9vayBhcm91bmQsIG9yIGlzIHRoZXJlIHRoZSBhYmlsaXR5IHRvIHNldCB0aGVtIGR1cmluZyBtaWdyYXRpb24/IFRoaXMgbGluZSBvZiB0aG91Z2h0IHByb21wdHMgbWUgdG8gcmV2aWV3IGhvdyBgZm9saW9fbWlncmF0ZV9mbGFnc2AgcmVsYXRlcyB0byB0aGUgTFJVIGFuZCByZWZlcmVuY2VkIHBhZ2Ugb3BlcmF0aW9ucy4gVGhlcmUgY291bGQgYmUgYW4gb3Bwb3J0dW5pdHkgZm9yIG9wdGltaXphdGlvbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDU6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fbWlncmF0ZV9mbGFncyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9haW8uYz00NjA9c3RhdGljIGludCBhaW9fbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpkc3QsXG4tLVxuZnMvYWlvLmMtNTEyLVx0Zm9saW9fY29weShkc3QsIHNyYyk7XG5mcy9haW8uYzo1MTM6XHRmb2xpb19taWdyYXRlX2ZsYWdzKGRzdCwgc3JjKTtcbmZzL2Fpby5jLTUxNC1cdEJVR19PTihjdHgtXHUwMDNlcmluZ19mb2xpb3NbaWR4XSAhPSBzcmMpO1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jPTEwMjQ9c3RhdGljIGludCBodWdldGxiZnNfbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDM5LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTA0MDpcdGZvbGlvX21pZ3JhdGVfZmxhZ3MoZHN0LCBzcmMpO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTA0MS1cbi0tXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaD02OT12b2lkIHNvZnRsZWFmX2VudHJ5X3dhaXRfb25fbG9ja2VkKHNvZnRsZWFmX3QgZW50cnksIHNwaW5sb2NrX3QgKnB0bClcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTcwLVx0XHRfX3JlbGVhc2VzKHB0bCk7XG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaDo3MTp2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbyk7XG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaC03Mi1pbnQgZm9saW9fbWlncmF0ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg9MzUyPXN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcmVjbGFpbWluZylcbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTM2Mi1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6MzYzOlx0LyogZm9yIGZvbGlvX21pZ3JhdGVfZmxhZ3MoKSAqL1xuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0zNjQtXHRmbGFncyA9ICFyZWNsYWltaW5nIFx1MDAyNlx1MDAyNiBscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIGdlbikgPyBCSVQoUEdfYWN0aXZlKSA6IDA7XG4tLVxubW0vbWlncmF0ZS5jPTczOT1pbnQgbWlncmF0ZV9odWdlX3BhZ2VfbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL21pZ3JhdGUuYy03NzQtICovXG5tbS9taWdyYXRlLmM6Nzc1OnZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vbWlncmF0ZS5jLTc3Ni17XG4tLVxubW0vbWlncmF0ZS5jLTg2My19XG5tbS9taWdyYXRlLmM6ODY0OkVYUE9SVF9TWU1CT0woZm9saW9fbWlncmF0ZV9mbGFncyk7XG5tbS9taWdyYXRlLmMtODY1LVxuLS1cbm1tL21pZ3JhdGUuYz04NzA9c3RhdGljIGludCBfX21pZ3JhdGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZHN0LFxuLS1cbm1tL21pZ3JhdGUuYy04OTAtXG5tbS9taWdyYXRlLmM6ODkxOlx0Zm9saW9fbWlncmF0ZV9mbGFncyhkc3QsIHNyYyk7XG5tbS9taWdyYXRlLmMtODkyLVx0cmV0dXJuIDA7XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMTA5PXN0YXRpYyB2b2lkIF9fbWlncmF0ZV9kZXZpY2VfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjUxLVx0XHRcdGVsc2Vcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI1MjpcdFx0XHRcdGZvbGlvX21pZ3JhdGVfZmxhZ3MobmV3Zm9saW8sIGZvbGlvKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI1My1cdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjIxMwoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDcxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEZvY3VzIFN5bWJvbHMgaW4gTWVtb3J5IE1hbmFnZW1lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBzY2FuIGZsYWdnZWQgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgIGFzIGV4cG9ydGVkLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBpdCBhIGNhbmRpZGF0ZSBmb3IgY2xvc2VyIGluc3BlY3Rpb24uIEJ1dCBJIHF1aWNrbHkgY2hlY2tlZCBhcm91bmQsIGFuZCBJIHNlZSB0aGF0IGEgc2xldyBvZiBvdGhlcnMgYXJlIHN0YXRpYzogYGZvbGlvX3VwZGF0ZV9nZW5gLCBgZm9saW9faW5jX2dlbmAsIGBscnVfZ2VuX2luY19yZWZzYCwgYGxydV9nZW5fY2xlYXJfcmVmc2AsIGB3YWxrX3B0ZV9yYW5nZWAsIGB3YWxrX3BtZF9yYW5nZV9sb2NrZWRgLCBhbmQgYGV2aWN0X2ZvbGlvc2AgYWxsIHNlZW0gdG8gYmUgaW50ZXJuYWwgdG8gdGhlaXIgcmVzcGVjdGl2ZSBtb2R1bGVzLCBzbyBJJiMzOTtsbCBwdXQgdGhlbSBvbiBhIGJhY2sgYnVybmVyIGZvciBub3cuCgpOb3csIGxldCYjMzk7cyBkaWcgaW50byB0aGUgbm9uLXN0YXRpYyBvbmVzIG1vcmUgZGVlcGx5LiBJIHN0YXJ0ZWQgd2l0aCBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgLiBUcmFjaW5nIGl0LCBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgdXBkYXRlX2xydV9zaXplYCwgd2hpY2ggaXMgbWFya2VkIGBfX2Fsd2F5c19pbmxpbmVgLCBhbmQgaW4gdHVybiBnZXRzIGNhbGxlZCBieSBgbHJ1dmVjX2FkZF9mb2xpb2AsIGBscnV2ZWNfZGVsX2ZvbGlvYCwgZXRjLiBUaGF0IGNvbmZpcm1zIGl0JiMzOTtzIGEgY3JpdGljYWwgZnVuY3Rpb24gcmVsYXRlZCB0byBtZW1vcnkgY2dyb3VwIExSVSBtYW5hZ2VtZW50LCBhbmQgaXQmIzM5O3MgZGVmaW5pdGVseSBhIGdvb2QgZm9jdXMuCgpOZXh0LCBJIGNoZWNrZWQgYGxydV9nZW5fbG9va19hcm91bmRgLiBJdCYjMzk7cyBub24tc3RhdGljIGFuZCBnZXRzIGNhbGxlZCBieSBgZm9saW9fcmVmZXJlbmNlZF9vbmVgLCB3aGljaCBtYWtlcyBpdCBhbm90aGVyIGludGVyZXN0aW5nIHN5bWJvbC4KClRoZW4sIGJhY2sgdG8gYGZvbGlvX21pZ3JhdGVfZmxhZ3NgLiBJdCYjMzk7cyBleHBvcnRlZCBhbmQgY2FsbGVkIGZyb20gc2V2ZXJhbCBpbXBvcnRhbnQgbWlncmF0aW9uIGZ1bmN0aW9uczogYGFpb19taWdyYXRlX2ZvbGlvYCwgYGh1Z2V0bGJmc19taWdyYXRlX2ZvbGlvYCwgYF9fbWlncmF0ZV9mb2xpb2AsIGFuZCBgX19taWdyYXRlX2RldmljZV9wYWdlc2AuIFRoaXMgaXMgYW5vdGhlciBzdHJvbmcgY29udGVuZGVyIGZvciBmb2N1cy4KCkkgYWxzbyBxdWlja2x5IGNoZWNrZWQgYG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemVgLCBgZm9saW9fbHJ1X3JlZnNgIGFuZCBgZm9saW9fc2V0X2xydV9yZWZzYCBidXQgdGhleSBhcmUgYHN0YXRpYyBpbmxpbmVgLCBzbyB0aGV5IGRvbiYjMzk7dCBzZWVtIHRvIGhhdmUgYXMgd2lkZSBhIHNjb3BlLgoKU28sIGJhc2VkIG9uIHRoZSBpbml0aWFsIGFzc2Vzc21lbnQsIHRoZSBrZXkgZm9jdXMgc3ltYm9scyBhcHBlYXIgdG8gYmU6CiogICBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgCiogICBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAKKiAgIGBmb2xpb19taWdyYXRlX2ZsYWdzYAoKVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJIHdlbnQgYmFjayB0byByZS1jaGVjayBhbGwgdGhlIGNvZGUuIEkgdmVyaWZpZWQgdGhhdCB0aG9zZSB0aHJlZTogYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCwgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgLCBhbmQgYGxydV9nZW5fbG9va19hcm91bmRgIHdlcmUgYWN0dWFsbHkgdGhlIGZ1bmN0aW9ucyB0aGF0IGhhZCBiZWVuIG1vZGlmaWVkLgoKSnVzdCB0byBiZSB0aG9yb3VnaCwgSSB3ZW50IGJhY2sgYW5kIHJlLWNoZWNrZWQgc2V2ZXJhbCBzdGF0aWMgZnVuY3Rpb25zIHRvIGJlIHN1cmUuIEkgY2hlY2tlZCB0aGUgc3RhdGljIGZ1bmN0aW9uczogYGV2aWN0X2ZvbGlvc2AsIGBnZXRfdGllcl9pZHhgLCBgZ2V0X3R5cGVfdG9fc2NhbmAsIGByZWFkX2N0cmxfcG9zYCwgYGZvbGlvX3VwZGF0ZV9nZW5gLCBgZm9saW9faW5jX2dlbmAsIGB1cGRhdGVfYmF0Y2hfc2l6ZWAsIGB3YWxrX3VwZGF0ZV9mb2xpb2AsIGB3YWxrX3B0ZV9yYW5nZWAsIGB3YWxrX3BtZF9yYW5nZV9sb2NrZWRgLCBhbmQgYGlzb2xhdGVfZm9saW9gLCBqdXN0IHRvIG1ha2Ugc3VyZSBJIHdhc24mIzM5O3QgbWlzc2luZyBhbnl0aGluZyBzaWduaWZpY2FudC4KCkFscmlnaHQsIHRoZSBmaW5hbCBsaXN0IG9mIG5vbi1zdGF0aWMgZnVuY3Rpb25zIG1vZGlmaWVkIGlzOgoqICAgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYAoqICAgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgCiogICBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDU6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTUNHJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMDY3PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xuLS1cbmluaXQvS2NvbmZpZy0xMDc2LVxuaW5pdC9LY29uZmlnOjEwNzc6Y29uZmlnIE1FTUNHXG5pbml0L0tjb25maWctMTA3OC1cdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5pbml0L0tjb25maWctMTA4NS1cbmluaXQvS2NvbmZpZzoxMDg2OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG5pbml0L0tjb25maWctMTA4Ny1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTA5Mi1cbmluaXQvS2NvbmZpZzoxMDkzOmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuaW5pdC9LY29uZmlnLTEwOTQtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTEwOTktXG5pbml0L0tjb25maWc6MTEwMDpjb25maWcgTUVNQ0dfVjFcbmluaXQvS2NvbmZpZy0xMTAxLVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA1OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODgxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBzZWxmLXJlZmxlY3Rpb246CgoqKkRlZXAgRGl2ZSBvbiBMUlVfR0VOIGFuZCBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZSoqCgpBbHJpZ2h0LCBzbyAqbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUqIGFic29sdXRlbHkgbmVlZHMgYE1FTUNHYC4gTm8gcXVlc3Rpb24gdGhlcmUuIEl0JiMzOTtzIGZ1bmRhbWVudGFsLiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBpcyB0aGVyZSBhbnl0aGluZyBlbHNlIHRoYXQgKkxSVV9HRU4qIGRlcGVuZHMgb24/IEkgbmVlZCB0byBxdWlja2x5IHNjYW4gYW5kIHZlcmlmeSB0aGF0IEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGEgZGVwZW5kZW5jeSBvciBpbnRlcmFjdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29uZmlndXJhdGlvbiBjb250ZXh0LiBJIGtub3cgdGhpcyBzZWVtcyBsaWtlIGEgbm8tYnJhaW5lciB0byBjaGVjaywgYnV0IHRoZXNlIHRoaW5ncyBvZnRlbiBoYXZlIGhpZGRlbiBpbXBsaWNhdGlvbnMsIGFuZCBJIHdhbnQgdG8gYmUgMTAwJSBzdXJlIEkgaGF2ZW4mIzM5O3Qgb3Zlcmxvb2tlZCBhbnkgb3RoZXIgZGVwZW5kZW50IGNvbmZpZ3VyYXRpb25zLiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5LiBMZXQmIzM5O3MgbWFrZSBzdXJlIG91ciBiYXNlcyBhcmUgY292ZXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDU6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExSVV9HRU4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMzkzPWNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1Bcbi0tXG5tbS9LY29uZmlnLTE0MDMtIyBtdWx0aS1nZW4gTFJVIHtcbm1tL0tjb25maWc6MTQwNDpjb25maWcgTFJVX0dFTlxubW0vS2NvbmZpZy0xNDA1LVx0Ym9vbCBcJiMzNDtNdWx0aS1HZW4gTFJVXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDEyLVxubW0vS2NvbmZpZzoxNDEzOmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcbm1tL0tjb25maWctMTQxNC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MTgtXG5tbS9LY29uZmlnOjE0MTk6Y29uZmlnIExSVV9HRU5fU1RBVFNcbm1tL0tjb25maWctMTQyMC1cdGJvb2wgXCYjMzQ7RnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDI3LVxubW0vS2NvbmZpZzoxNDI4OmNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxubW0vS2NvbmZpZy0xNDI5LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODM2MAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgTFJVX0dFTioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJlIGFyb3VuZCBgTFJVX0dFTmAuIEZpcnN0LCBsZXQmIzM5O3MganVzdCBzY29wZSBvdXQgd2hhdCYjMzk7cyBkaXJlY3RseSBjb25uZWN0ZWQuIFdoYXQgbW9kdWxlcyBvciBmdW5jdGlvbnMgY2FsbCBpdD8gV2hhdCBkb2VzIGl0IGNhbGw/IEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgbmVlZCBhIHF1aWNrIGNhbGwgZ3JhcGggdmlzdWFsaXphdGlvbi4gR3JhcGh2aXogbWF5YmU/IE9yIEkgY291bGQgcXVpY2tseSBkdW1wIHRoZSBkZXBlbmRlbmNpZXMgdXNpbmcgbXkgcHJlZmVycmVkIHRvb2wgY2hhaW4uIEnigJltIGxlYW5pbmcgdG93YXJkcyBhIHByb2dyYW1tYXRpYyBhcHByb2FjaCBmb3IgdGhpcyBzaW5jZSBhIHZpc3VhbCByZXByZXNlbnRhdGlvbiwgd2hpbGUgaGVscGZ1bCwgcHJvYmFibHkgd29uJiMzOTt0IGdpdmUgbWUgdGhlIGxvdyBsZXZlbCBpbnNpZ2h0IEkgbmVlZCBmb3IgYSB0YXNrLgoKVGhlbiwgSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGBMUlVfR0VOYCBpbnRlcmFjdHMgd2l0aC4gQXJlIHRoZXNlIHNoYXJlZCwgcHJvdGVjdGVkIGJ5IGxvY2tzLCBvciBzaW5nbGUtdGhyZWFkZWQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25jdXJyZW5jeSBtb2RlbCBpbW1lZGlhdGVseSBpZiBpdCYjMzk7cyBub3Qgc2luZ2xlIHRocmVhZGVkLiBUaGlzIHByb2JhYmx5IGVudGFpbHMgdHJhY2luZyBob3cgdGhlIGtleXMgYW5kIHZhbHVlcyBhcmUgc3RvcmVkIGFuZCByZXRyaWV2ZWQuCgpJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCB0aGUgZXZpY3Rpb24gcG9saWN5IGltcGxlbWVudGF0aW9uLiBJcyBpdCBhIHNpbXBsZSBjbG9jay1zd2VlcCwgYSBtb3JlIGNvbXBsZXggYWRhcHRpdmUgc2NoZW1lLCBvciBzb21ldGhpbmcgY3VzdG9tPyBUaGUgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIG9mIGBMUlVfR0VOYCB3aWxsIGJlIGhpZ2hseSBkZXBlbmRlbnQgb24gdGhpcy4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHRoZSBtZXRyaWNzIGNvbGxlY3Rpb24uCgpGaW5hbGx5LCBJIHdhbnQgdG8gY29uc2lkZXIgaG93IHRoZSBjYWNoZSBpcyBjb25maWd1cmVkLiBBcmUgdGhlcmUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGZvciBzaXplLCBldmljdGlvbiB0aHJlc2hvbGQsIG9yIG90aGVyIGJlaGF2aW9yPyBBbnkgdW5pdCB0ZXN0cyBvbiB0aGUgZXZpY3Rpb24gcG9saWN5IGltcGxlbWVudGF0aW9uIHdvdWxkIGJlIGhlbHBmdWwgZm9yIGEgcXVpY2tlciB1bmRlcnN0YW5kaW5nLCBhbmQgSSB3b3VsZCB3YW50IHRvIGxvb2sgYXQgdGhvc2UgbmV4dC4gSSBhbSBhbHNvIGN1cmlvdXMgYWJvdXQgdGhlIHRlc3QgY292ZXJhZ2Ugc3Vycm91bmRpbmcgdGhpcyBjb21wb25lbnQ7IEnigJlkIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyBhcmUgZnVsbHkgZXhlcmNpc2VkLCBlc3BlY2lhbGx5IGluIGVkZ2UtY2FzZSBzY2VuYXJpb3MgbGlrZSB2ZXJ5IGhpZ2ggb3IgdmVyeSBsb3cgd29ya2xvYWRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0MDA6XHRcdCAgcHVycG9zZXMuICBJdCBpcyByZXF1aXJlZCB0byBlbmFibGUgdXNlcmZhdWx0ZmQgd3JpdGUgcHJvdGVjdGlvbiBvblxuMTQwMTpcdFx0ICBmaWxlLWJhY2tlZCBtZW1vcnkgdHlwZXMgbGlrZSBzaG1lbSBhbmQgaHVnZXRsYmZzLlxuMTQwMjpcdFxuMTQwMzpcdCMgbXVsdGktZ2VuIExSVSB7XG4xNDA0Olx0Y29uZmlnIExSVV9HRU5cbjE0MDU6XHRcdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuMTQwNjpcdFx0ZGVwZW5kcyBvbiBNTVVcbjE0MDc6XHRcdCMgbWFrZSBzdXJlIGZvbGlvLVx1MDAzZWZsYWdzIGhhcyBlbm91Z2ggc3BhcmUgYml0c1xuMTQwODpcdFx0ZGVwZW5kcyBvbiA2NEJJVCB8fCAhU1BBUlNFTUVNIHx8IFNQQVJTRU1FTV9WTUVNTUFQXG4xNDA5Olx0XHRoZWxwXG4xNDEwOlx0XHQgIEEgaGlnaCBwZXJmb3JtYW5jZSBMUlUgaW1wbGVtZW50YXRpb24gdG8gb3ZlcmNvbW1pdCBtZW1vcnkuIFNlZVxuMTQxMTpcdFx0ICBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMuXG4xNDEyOlx0XG4xNDEzOlx0Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxuMTQxNDpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnkgZGVmYXVsdFwmIzM0O1xuMTQxNTpcdFx0ZGVwZW5kcyBvbiBMUlVfR0VOXG4xNDE2Olx0XHRoZWxwXG4xNDE3Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG11bHRpLWdlbiBMUlUgYnkgZGVmYXVsdC5cbjE0MTg6XHRcbjE0MTk6XHRjb25maWcgTFJVX0dFTl9TVEFUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTA3MAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIFRoaXMgTWVtb3J5IE1hbmFnZW1lbnQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gTGVhc3QgUmVjZW50bHkgVXNlZCAoTFJVKSBhbmQgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBhdCBmaXJzdCBnbGFuY2UuIEl0JiMzOTtzIGNsZWFyIHRoYXQgYExSVV9HRU5gIHJlbGllcyBvbiBhIGNvdXBsZSBvZiBrZXkgdGhpbmdzOiB0aGUgYE1NVWAgKG9idmlvdXNseSwgZXNzZW50aWFsIGZvciBtZW1vcnkgbWFuYWdlbWVudCkgYW5kIGVpdGhlciBhIDY0LWJpdCBhcmNoaXRlY3R1cmUgb3IgYSBub24tc3BhcnNlIG1lbW9yeSBzZXR1cCBvciB0aGUgYFNQQVJTRU1FTV9WTUVNTUFQYCBjb25maWd1cmF0aW9uLiBNYWtlcyBzZW5zZS4gTm93LCBteSBpbW1lZGlhdGUgcmVhY3Rpb24gaXMgdGhhdCB3ZSBzaG91bGQgYmUgZW5hYmxpbmcgYm90aCBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgLgoKQmV5b25kIHRoYXQsIHRoZSBkZXBlbmRlbmNpZXMgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYE1FTUNHYCBpcyBkZWZpbml0ZWx5IHJlcXVpcmVkIHRvIGFsbG93IGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgdG8gb3BlcmF0ZSBjb3JyZWN0bHkuIFRoYXQgZnVuY3Rpb24gdGVsbHMgbWUgdGhhdCB0aGVyZSBhcmUgc29tZSBzaWduaWZpY2FudCB1cGRhdGVzIHRvIHRoZSBtZW1vcnkgY29udHJvbCBncm91cCBmdW5jdGlvbmFsaXR5IGhlcmUsIHdoaWNoIGRlZmluaXRlbHkgcGlxdWVzIG15IGludGVyZXN0LgoKSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIG9yIG51YW5jZXMgaGVyZS4gVGhlIGZpbGVzIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVk4oCUYG1tL3Ztc2Nhbi5jYCwgYG1tL21pZ3JhdGUuY2AsIGBtbS9tZW1jb250cm9sLmNgLCBhbmQgYG1tL2ZvbGlvLmNg4oCUdGhlc2UgYXJlICpjb3JlKiBtZW1vcnkgbWFuYWdlbWVudCBmaWxlcywgc28gdGhpcyBpcyBhIGNydWNpYWwgY2hhbmdlLiBJIG5lZWQgdG8gZGlnIGluLgoKTm93LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIGtleSBzeW1ib2xzIHRvdWNoZWQgaGVyZSB0byBnZXQgYSBzZW5zZSBvZiB0aGUgc2NvcGU6IGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAsIHRoYXQmIzM5O3MgdGhlIGJpZyBvbmUsIGdpdmVuIHRoZSBlYXJsaWVyIGBNRU1DR2AgdGllLWluLiBUaGVuLCBgZm9saW9fbWlncmF0ZV9mbGFnc2AsIHdoaWNoIHN1Z2dlc3RzIG1pZ3JhdGlvbiBjYXBhYmlsaXRpZXMgYXJlIGJlaW5nIGluZmx1ZW5jZWQsIGFuZCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAsIHdoaWNoIG1ha2VzIG1lIHN1c3BlY3Qgc29tZSBzb3J0IG9mIExSVS1iYXNlZCBsb29rLWFoZWFkIG9wdGltaXphdGlvbiBpcyBpbnZvbHZlZC4KCkZpbmFsbHksIEkgc2hvdWxkIGNoZWNrIHRoZSBmdW5jdGlvbnMgb3V0c2lkZSBvZiBzdGF0aWMsIGp1c3QgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBzaWduaWZpY2FudCBwdWJsaWMgaW50ZXJmYWNlIGNoYW5nZXMgdG8gY29uc2lkZXIuIEkmIzM5O2xsIGZvY3VzIG9uIHRoZSBjaGFuZ2VzIGluIGBtbS9mb2xpby5jYCBhcyB0aGV5IHNlZW0gbW9zdCB0YXJnZXRlZCB0byB0aGVzZSBsb3ctbGV2ZWwgcGFnZSByZXByZXNlbnRhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA1OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5faW5jX3JlZnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tbXpvbmUuaD00MjQ9ZW51bSBscnV2ZWNfZmxhZ3Mge1xuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtNTA2LSAqIEZvciBmb2xpb3MgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzLFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo1MDc6ICogbHJ1X2dlbl9pbmNfcmVmcygpIHNldHMgYWRkaXRpb25hbCBiaXRzIG9mIExSVV9SRUZTX1dJRFRIIGluIGZvbGlvLVx1MDAzZWZsYWdzXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTUwOC0gKiBhZnRlciBQR19yZWZlcmVuY2VkLCB0aGVuIFBHX3dvcmtpbmdzZXQgYWZ0ZXIgTFJVX1JFRlNfV0lEVEguIEFmdGVyIGFsbCBpdHNcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTUxMS0gKiBmb2xpb19pbmNfZ2VuKCkgZG9lcyB0aGF0LCBpdCBjbGVhcnMgTFJVX1JFRlNfRkxBR1Mgc28gdGhhdFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo1MTI6ICogbHJ1X2dlbl9pbmNfcmVmcygpIGNhbiBzdGFydCBvdmVyLiBOb3RlIHRoYXQgZm9yIHRoaXMgY2FzZSwgTFJVX1JFRlNfTUFTSyBpc1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaC01MTMtICogb25seSB2YWxpZCB3aGVuIFBHX3JlZmVyZW5jZWQgaXMgc2V0LlxuLS1cbm1tL2ZvbGlvLmM9MzIyPXN0YXRpYyB2b2lkIF9fbHJ1X2NhY2hlX2FjdGl2YXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZm9saW8uYy0zNTMtXG5tbS9mb2xpby5jOjM1NDpzdGF0aWMgdm9pZCBscnVfZ2VuX2luY19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9mb2xpby5jLTM1NS17XG4tLVxubW0vZm9saW8uYz0zODA9c3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZm9saW8uYy00MDAtXG5tbS9mb2xpby5jOjQwMTpzdGF0aWMgdm9pZCBscnVfZ2VuX2luY19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9mb2xpby5jLTQwMi17XG4tLVxubW0vZm9saW8uYz00MjU9dm9pZCBmb2xpb19tYXJrX2FjY2Vzc2VkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZm9saW8uYy00MjktXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkpIHtcbm1tL2ZvbGlvLmM6NDMwOlx0XHRscnVfZ2VuX2luY19yZWZzKGZvbGlvKTtcbm1tL2ZvbGlvLmMtNDMxLVx0XHRyZXR1cm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA1OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMjAxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJvbSBteSBwZXJzcGVjdGl2ZToKCioqVGhpbmtpbmcgVGhyb3VnaCBgbHJ1X2dlbl9pbmNfcmVmc2AgYW5kIFNjYW4gQ2hhbmdlcyoqCgpPa2F5LCBzbyBgbHJ1X2dlbl9pbmNfcmVmc2AgaXMgc3RhdGljLiBUaGF0IG1lYW5zIGl0JiMzOTtzIHNjb3BlZCB0byB0aGUgZmlsZSBpdCYjMzk7cyBpbiwgd2hpY2ggSSYjMzk7ZCBleHBlY3QgZ2l2ZW4gaXRzIHJvbGUuIE5vdywgbGV0IG1lIHNlZS4uLiB3aGVyZSBhcmUgdGhlIG1vc3QgcmVsZXZhbnQgY2hhbmdlcyBhcm91bmQgdGhpcyBsaWtlbHk/IERlZmluaXRlbHkgbmVlZCB0byBnbyBvdmVyIGBtbS92bXNjYW4uY2AuIEl0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIFZNIHNjYW5uaW5nIGxvZ2ljIGxpdmVzLCBzbyBhbnkgbW9kaWZpY2F0aW9ucyB0byBob3cgcmVmZXJlbmNlIGNvdW50cyBhcmUgbWFuYWdlZCwgb3IgaG93IGdlbmVyYXRpb25zIGFyZSBoYW5kbGVkLCB3b3VsZCBsaWtlbHkgc2hvdyB1cCB0aGVyZS4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIGNoYW5nZWQgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDU6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fdXBkYXRlX2dlbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTI4OD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbHJ1X2dlbl9mb2xpb19zZXEoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMjk4LVx0ICogfCBBY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzIGFuZCAgfCBBY2Nlc3NlZCB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMgfFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDoyOTk6XHQgKiB8IHByb21vdGVkIGJ5IGZvbGlvX3VwZGF0ZV9nZW4oKSAgICB8IGFuZCBwcm90ZWN0ZWQgYnkgZm9saW9faW5jX2dlbigpICB8XG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTMwMC1cdCAqICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0Mztcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTQyND1lbnVtIGxydXZlY19mbGFncyB7XG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC01MTQtICpcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NTE1OiAqIEZvciBmb2xpb3MgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBwYWdlIHRhYmxlcywgZm9saW9fdXBkYXRlX2dlbigpXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTUxNi0gKiBmcm9tIGEgcGFnZSB0YWJsZSB3YWxrIG9yIGxydV9nZW5fc2V0X3JlZnMoKSBmcm9tIGEgcm1hcCB3YWxrIHNldHNcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTUxOC0gKiBUaGVyZWFmdGVyLCB0aG9zZSB0d28gcGF0aHMgc2V0IFBHX3dvcmtpbmdzZXQgYW5kIHByb21vdGUgZm9saW9zIHRvIHRoZVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo1MTk6ICogeW91bmdlc3QgZ2VuZXJhdGlvbi4gTGlrZSBmb2xpb19pbmNfZ2VuKCksIGZvbGlvX3VwZGF0ZV9nZW4oKSBhbHNvIGNsZWFyc1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaC01MjAtICogUEdfcmVmZXJlbmNlZC4gTm90ZSB0aGF0IGZvciB0aGlzIGNhc2UsIExSVV9SRUZTX01BU0sgaXMgbm90IHVzZWQuXG4tLVxubW0vdm1zY2FuLmM9ODI3PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XG4tLVxubW0vdm1zY2FuLmMtODM3LSAqIHdpdGggUEdfYWN0aXZlIHNldC4gSW4gY29udHJhc3QsIHRoZSBhZ2luZyAocGFnZSB0YWJsZSB3YWxrKSBwYXRoIHVzZXNcbm1tL3Ztc2Nhbi5jOjgzODogKiBmb2xpb191cGRhdGVfZ2VuKCkuXG5tbS92bXNjYW4uYy04MzktICovXG4tLVxubW0vdm1zY2FuLmM9MzI1Nj1zdGF0aWMgYm9vbCBwb3NpdGl2ZV9jdHJsX2VycihzdHJ1Y3QgY3RybF9wb3MgKnNwLCBzdHJ1Y3QgY3RybF9wb3MgKnB2KVxuLS1cbm1tL3Ztc2Nhbi5jLTMyNzEtLyogcHJvbW90ZSBwYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzICovXG5tbS92bXNjYW4uYzozMjcyOnN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgaW50ICppc19maWxlLFxubW0vdm1zY2FuLmMtMzI3My1cdFx0XHQgICAgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbi0tXG5tbS92bXNjYW4uYz0zMzA3PXN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vdm1zY2FuLmMtMzMyMC1cbm1tL3Ztc2Nhbi5jOjMzMjE6XHRcdC8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqL1xubW0vdm1zY2FuLmMtMzMyMi1cdFx0aWYgKG9sZF9nZW4gIT0gbWluX2dlbilcbi0tXG5tbS92bXNjYW4uYz0zNTI0PXN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL3Ztc2Nhbi5jLTM1MzktXHRpZiAod2Fsaykge1xubW0vdm1zY2FuLmM6MzU0MDpcdFx0b2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sIFx1MDAyNmZpbGUsIFx1MDAyNnZtYS1cdTAwM2VmbGFncyk7XG5tbS92bXNjYW4uYy0zNTQxLVx0XHRpZiAob2xkX2dlbiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG9sZF9nZW4gIT0gbmV3X2dlbilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDU6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEyMDAKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBQb3RlbnRpYWwgRm9saW8gVXBkYXRlIEltcGFjdHMqKgoKT2theSwgc28gYGZvbGlvX3VwZGF0ZV9nZW5gIGlzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcywgcGFydGljdWxhcmx5IGluIHRoZSBjb250ZXh0IG9mIHJlY2VudCBtb2RpZmljYXRpb25zLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdC4KCk5vdywgSSYjMzk7bGwgc2hpZnQgbXkgZm9jdXMgYW5kIHN0YXJ0IGludmVzdGlnYXRpbmcgdGhlIGNoYW5nZXMgaW4gYG1tL21pZ3JhdGUuY2AuIFRoaXMgZmlsZSBvZnRlbiBpbnRlcmFjdHMgaGVhdmlseSB3aXRoIGZvbGlvIG1hbmFnZW1lbnQsIGFuZCBpdCYjMzk7cyBhIGxpa2VseSBwb2ludCBvZiBpbXBhY3QgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gdXBkYXRpbmcgZm9saW9zLiBJJiMzOTtsbCBjYXJlZnVsbHkgc2NydXRpbml6ZSB0aGUgZGlmZnMgaW4gdGhhdCBhcmVhLiBJIHN1c3BlY3QgdGhlcmUgbWF5IGJlIGltcG9ydGFudCBjbHVlcyByZWxhdGVkIHRvIHdoYXQgSSYjMzk7bSBjdXJyZW50bHkgbG9va2luZyBhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDU6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fbWlncmF0ZV9yZWZzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW1faW5saW5lLmg9MzUyPXN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcmVjbGFpbWluZylcbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTM3NC0vKipcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6Mzc1OiAqIGZvbGlvX21pZ3JhdGVfcmVmcyAtIGNvcHkgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBhIG5ldyBmb2xpb1xuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0zNzYtICogQG5ldzogdGhlIGRlc3RpbmF0aW9uIGZvbGlvXG4tLVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0zODItICovXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjM4MzpzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMzg0LXtcbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTQxMD1zdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIHJlY2xhaW1pbmcpXG4tLVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC00MTQtXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjQxNTpzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNDE2LXtcbi0tXG5tbS9taWdyYXRlLmM9Nzc1PXZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL21pZ3JhdGUuYy04MDgtXHQvKiBDb3B5IHRoZSByZWZlcmVuY2Ugc3RhdGUsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkICovXG5tbS9taWdyYXRlLmM6ODA5Olx0Zm9saW9fbWlncmF0ZV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7XG5tbS9taWdyYXRlLmMtODEwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTc4NAoJCQkJCQkJb3V0cHV0OiAyMTAKCQkJCQkJCXRob3VnaHRzOiA3MzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE1HTFJVIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgY29yZSBtZW1vcnkgbWFuYWdlbWVudCB3aXRoIHRoZSBNdWx0aS1HZW4gTFJVIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgaG93IHdlIG1hbmFnZSBMUlUgZ2VuZXJhdGlvbiBhbmQgcmVmZXJlbmNlIGZsYWdzIHdpdGhpbiB0aGUgYGZvbGlvLSZndDtmbGFnc2Agc3RydWN0dXJlLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHNoaWZ0aW5nIGZyb20gZGlyZWN0IGJpdG1hc2sgbWFuaXB1bGF0aW9uIHRvIGEgc2V0IG9mIGhlbHBlciBmdW5jdGlvbnMsIGFuZCBhbHNvIG1vZGlmeWluZyBgbHJ1X3pvbmVfc2l6ZWAgaW4gYG1lbV9jZ3JvdXBfcGVyX25vZGVgIHRvIHVzZSBhbiBgYXRvbWljX2xvbmdfdGAuIFRoaXMgaW1wbGllcyBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYW5kIGNvcnJlY3RuZXNzIGltcGxpY2F0aW9ucywgcGFydGljdWxhcmx5IGFyb3VuZCBjb25jdXJyZW5jeS4KClNvLCB0aGUga2V5IGZ1bmN0aW9ucyBJJiMzOTttIGZvY3VzaW5nIG9uIGFyZTogYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCwgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgLCBhbmQgYGxydV9nZW5fbG9va19hcm91bmRgLiBUaGUgYGZvbGlvX21pZ3JhdGVfcmVmc2AgZnVuY3Rpb24gaXMgYHN0YXRpYyBpbmxpbmVgLCBzbyBJIGRvbiYjMzk7dCBuZWVkIHRvIGNvbnNpZGVyIGl0IGZ1cnRoZXIgYXQgdGhpcyBwb2ludC4KCkkgc3RhcnRlZCBieSB2ZXJpZnlpbmcgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgaXMgZGVmaW5pdGVseSBndWFyZGVkIGJ5IGBDT05GSUdfTFJVX0dFTmAsIHdoaWNoIGlzIGV4cGVjdGVkLiAgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCByZXF1aXJlcyBgQ09ORklHX01FTUNHYC4gYGZvbGlvX21pZ3JhdGVfZmxhZ3NgIGlzIGluIGBtbS9taWdyYXRlLmNgLCBzbyBJIHNob3VsZCBrZWVwIGFuIGV5ZSBvbiBob3cgaXQgd29ya3MuIEkmIzM5O20gYWxzbyBjb25maXJtaW5nIHdlIG5lZWQgYExSVV9HRU5gLCBgTFJVX0dFTl9FTkFCTEVEYCwgYW5kIGBNRU1DR2AgZW5hYmxlZCBmb3IgdGhpcyBwYXRjaCB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIEkgY2hlY2tlZCBgTFJVX0dFTmAmIzM5O3MgZGVwZW5kZW5jaWVzLCB3aGljaCBpbmNsdWRlIGBNTVVgIGFuZCB0aGUgNjQtYml0IG9yIHNwYXJzZSBtZW1vcnkgY29uZmlndXJhdGlvbnMuICBUaG9zZSBhcmVuJiMzOTt0IHRoaW5ncyBJJiMzOTttIHRvbyBjb25jZXJuZWQgYWJvdXQgYWRkaW5nLCBhcyB0aG9zZSBhcmUgdXN1YWxseSBlbmFibGVkIGJ5IGRlZmF1bHQgYW55d2F5LgoKSSBhbHNvIGNoZWNrZWQgdG8gc2VlIGlmIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB3ZXJlIG1vZGlmaWVkIGluIHRoaXMgcGF0Y2guICBgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZWAgaXMgc3RhdGljIGlubGluZS4gYGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1YCwgYGxydV9nZW5fZnJvbV9mbGFnc2AsIGBscnVfZ2VuX3NldF9mbGFnc2AsIGBscnVfcmVmc19mcm9tX2ZsYWdzYCwgYGxydV9yZWZzX3NldF9mbGFnc2AsIGFuZCBgZm9saW9fc2V0X2xydV9yZWZzYCBhcmUgYWxzbyBzdGF0aWMgaW5saW5lLiBTbywgdGhlIGZvY3VzIHN5bWJvbHMgYXJlIHRoZSBjb3JyZWN0IG9uZXMuCgpJbiBlc3NlbmNlLCB0aGlzIHBhdGNoIGludHJvZHVjZXMgY2hhbmdlcyB0aGF0IGFsdGVyIGhvdyBmb2xpb3MgYXJlIHRyYWNrZWQgYW5kIGFnZWQgaW4gdGhlIExSVSBsaXN0cy4gVGhlIGhlbHBlciBmdW5jdGlvbnMgcmVwbGFjZSBiaXRtYXNrIG9wZXJhdGlvbnMsIHdoaWNoIGlzIGdvb2QsIGJ1dCB0aGUgc3dpdGNoIHRvIGBhdG9taWNfbG9uZ190YCBpbiBgbWVtX2Nncm91cF9wZXJfbm9kZWAgaW50cm9kdWNlcyBhdG9taWMgb3BlcmF0aW9ucy4gVGhpcywgY29tYmluZWQgd2l0aCB0aGUgZmFjdCB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW52b2tlZCBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzIOKAkyBpbmNsdWRpbmcgcGFnZSBtaWdyYXRpb24sIExSVSBzaXplIHRyYWNraW5nLCBhbmQgcGFnZSB0YWJsZSBzY2FubmluZyDigJMgbWFrZXMgdGhlbSBwcmltZSBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLiBUaGV5IGFyZSBhbGwgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsbHkgYWx0ZXIgbWVtb3J5IG1hbmFnZW1lbnQmIzM5O3MgY29yZSBiZWhhdmlvci4KCkkmIzM5O3ZlIGNvbmZpcm1lZCB0aGUgZm9jdXMgc3ltYm9scyBhcmUgdmFsaWQuIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgaXNuJiMzOTt0IGBFWFBPUlRfU1lNQk9MYCYjMzk7ZCBidXQgaXQmIzM5O3MgdXNlZCBmcm9tIGBtbS9mb2xpby5jYCBhbmQgYG1tL3Ztc2Nhbi5jYC4gYGZvbGlvX21pZ3JhdGVfZmxhZ3NgIGlzIGV4cG9ydGVkLCBhbmQgYGxydV9nZW5fbG9va19hcm91bmRgIGlzIHVzZWQgaW4gYG1tL3JtYXAuY2AuIExvb2tzIGdvb2QgdG8gbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA1OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplJiMzNDssCiAgICAmIzM0O2ZvbGlvX21pZ3JhdGVfZmxhZ3MmIzM0OywKICAgICYjMzQ7bHJ1X2dlbl9sb29rX2Fyb3VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIGltcGxlbWVudGF0aW9uLCBjaGFuZ2luZyBob3cgTFJVIGdlbmVyYXRpb24gYW5kIHJlZmVyZW5jZSBmbGFncyBhcmUgc3RvcmVkIGluIGBmb2xpby1cdTAwM2VmbGFnc2AuIEl0IHJlcGxhY2VzIGRpcmVjdCBiaXRtYXNrIG9wZXJhdGlvbnMgd2l0aCBuZXcgaGVscGVyIGZ1bmN0aW9ucyBhbmQgY2hhbmdlcyBgbHJ1X3pvbmVfc2l6ZWAgaW4gYHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlYCB0byB1c2UgYGF0b21pY19sb25nX3RgIGluc3RlYWQgb2YgYHVuc2lnbmVkIGxvbmdgLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzLCBpbmNsdWRpbmcgcGFnZSBtaWdyYXRpb24sIExSVSBzaXplIHRyYWNraW5nLCBhbmQgcGFnZSB0YWJsZSBzY2FubmluZy4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsbHkgYWx0ZXJzIGhvdyBmb2xpb3MgYXJlIHRyYWNrZWQgYW5kIGFnZWQgaW4gdGhlIExSVSBsaXN0cywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUmIzM0OywKICAgICYjMzQ7Zm9saW9fbWlncmF0ZV9mbGFncyYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX2xvb2tfYXJvdW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgaW1wbGVtZW50YXRpb24sIGNoYW5naW5nIGhvdyBMUlUgZ2VuZXJhdGlvbiBhbmQgcmVmZXJlbmNlIGZsYWdzIGFyZSBzdG9yZWQgaW4gYGZvbGlvLVx1MDAzZWZsYWdzYC4gSXQgcmVwbGFjZXMgZGlyZWN0IGJpdG1hc2sgb3BlcmF0aW9ucyB3aXRoIG5ldyBoZWxwZXIgZnVuY3Rpb25zIGFuZCBjaGFuZ2VzIGBscnVfem9uZV9zaXplYCBpbiBgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGVgIHRvIHVzZSBgYXRvbWljX2xvbmdfdGAgaW5zdGVhZCBvZiBgdW5zaWduZWQgbG9uZ2AuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMsIGluY2x1ZGluZyBwYWdlIG1pZ3JhdGlvbiwgTFJVIHNpemUgdHJhY2tpbmcsIGFuZCBwYWdlIHRhYmxlIHNjYW5uaW5nLiBUaGUgY29kZSBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWxseSBhbHRlcnMgaG93IGZvbGlvcyBhcmUgdHJhY2tlZCBhbmQgYWdlZCBpbiB0aGUgTFJVIGxpc3RzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDU6NDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNTo0OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMsIHNwZWNpZmljYWxseSBmb2xpbyBMUlUgZ2VuZXJhdGlvbiBmbGFncyBhbmQgcmVmZXJlbmNlIHRyYWNraW5nLCBhbmQgY2hhbmdlcyBhIGNvdW50ZXIgKGBscnVfem9uZV9zaXplYCkgdG8gYW4gYXRvbWljIHZhcmlhYmxlIHRvIGZpeCBjb25jdXJyZW5jeSBpc3N1ZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgdGhhdCBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgbWlnaHQgYmUgbGVmdCBwYXJ0aWFsbHkgdW5pbml0aWFsaXplZC4gVGhlIGxvY2FsIHZhcmlhYmxlIGBmaWxlYCBpbnRyb2R1Y2VkIGluIGB3YWxrX3VwZGF0ZV9mb2xpb2AgaXMgb25seSB1c2VkIHdoZW4gYGZvbGlvX3VwZGF0ZV9nZW5gIHJldHVybnMgYSBub24tbmVnYXRpdmUgdmFsdWUsIHdoaWNoIGd1YXJhbnRlZXMgaXQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDhhOTI1ZDI1NDZjNTM4ZDRiM2IwZGMxNzU1Y2FhYzg5NDk4OWQ5YTAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxOCAwNTo0NzozOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKaW5kZXggZTc4YmM5OGFiMjI5Yi4uYjEzZTNmMDU2MzE5NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKQEAgLTExMyw3ICYjNDM7MTEzLDcgQEAgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgewogCS8qIEZpZWxkcyB3aGljaCBnZXQgdXBkYXRlZCBvZnRlbiBhdCB0aGUgZW5kLiAqLwogCXN0cnVjdCBscnV2ZWMJCWxydXZlYzsKIAlDQUNIRUxJTkVfUEFERElORyhfcGFkMl8pOwotCXVuc2lnbmVkIGxvbmcJCWxydV96b25lX3NpemVbTUFYX05SX1pPTkVTXVtOUl9MUlVfTElTVFNdOwomIzQzOwlhdG9taWNfbG9uZ190CQlscnVfem9uZV9zaXplW01BWF9OUl9aT05FU11bTlJfTFJVX0xJU1RTXTsKIAlzdHJ1Y3QgbWVtX2Nncm91cF9yZWNsYWltX2l0ZXIJaXRlcjsKIAogCS8qCkBAIC04OTcsMTAgJiM0Mzs4OTcsMTUgQEAgc3RhdGljIGlubGluZQogdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJZW51bSBscnVfbGlzdCBscnUsIGludCB6b25lX2lkeCkKIHsKJiM0MzsJbG9uZyB2YWw7CiAJc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16OwogCiAJbXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTsKLQlyZXR1cm4gUkVBRF9PTkNFKG16LSZndDtscnVfem9uZV9zaXplW3pvbmVfaWR4XVtscnVdKTsKJiM0MzsJdmFsID0gYXRvbWljX2xvbmdfcmVhZCgmYW1wO216LSZndDtscnVfem9uZV9zaXplW3pvbmVfaWR4XVtscnVdKTsKJiM0MzsJaWYgKFdBUk5fT05fT05DRSh2YWwgJmx0OyAwKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4gdmFsOwogfQogCiB2b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmggYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oCmluZGV4IDYyMWM4NjUzZDhmN2UuLjRiYjM5MGQ5NTE2ZWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaApAQCAtMTAsNiAmIzQzOzEwLDExIEBACiAjaW5jbHVkZSAmbHQ7bGludXgvdXNlcmZhdWx0ZmRfay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2xlYWZvcHMuaCZndDsKIAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZsYWdzKQomIzQzO3sKJiM0MzsJcmV0dXJuICF0ZXN0X2JpdChQR19zd2FwYmFja2VkLCBmbGFncyk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBmb2xpb19pc19maWxlX2xydSAtIFNob3VsZCB0aGUgZm9saW8gYmUgb24gYSBmaWxlIExSVSBvciBhbm9uIExSVT8KICAqIEBmb2xpbzogVGhlIGZvbGlvIHRvIHRlc3QuCkBAIC0yNyw3ICYjNDM7MzIsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCBmb2xpb19pc19maWxlX2xydShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewotCXJldHVybiAhZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKTsKJiM0MzsJcmV0dXJuIGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KGNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7CiB9CiAKIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCkBAIC0xNDIsMTAgJiM0MzsxNDcsNDMgQEAgc3RhdGljIGlubGluZSBpbnQgbHJ1X3RpZXJfZnJvbV9yZWZzKGludCByZWZzLCBib29sIHdvcmtpbmdzZXQpCiAJcmV0dXJuIHdvcmtpbmdzZXQgPyBNQVhfTlJfVElFUlMgLSAxIDogb3JkZXJfYmFzZV8yKHJlZnMpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzOy8qKgomIzQzOyAqIGxydV9nZW5fZnJvbV9mbGFncyAtIFJldHVybiB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIGZyb20gZm9saW8gZmxhZ3MuCiYjNDM7ICogQGZsYWdzOiBmb2xpbyBmbGFncwomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogQSBudW1iZXIgYmV0d2VlbiAwIGFuZCBMUlVfR0VOX01BWCwgaW5jbHVzaXZlLiBSZXR1cm5zIC0xIGlmIHRoZQomIzQzOyAqIGZsYWdzIGluZGljYXRlIHRoZSBmb2xpbyBpcyBvZmYgdGhlIGxpc3QgKGUuZy4sIGlzb2xhdGVkKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGludCBscnVfZ2VuX2Zyb21fZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncykKJiM0Mzt7CiYjNDM7CWludCBnZW4gPSAoKGZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRik7CiYjNDM7CiYjNDM7CUJVSUxEX0JVR19PTihMUlVfR0VOX01BU0sgJmFtcDsgTFJVX1JFRlNfTUFTSyk7CiYjNDM7CWdlbiAtPSAxOwomIzQzOwlWTV9XQVJOX09OX09OQ0UoZ2VuICE9IC0xICZhbXA7JmFtcDsgZ2VuICZndDsgTFJVX0dFTl9NQVgpOwomIzQzOwlyZXR1cm4gZ2VuOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBscnVfZ2VuX3NldF9mbGFncyAtIFNldCB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIHRvIHNwZWNpZmllZCBmb2xpbyBmbGFncy4KJiM0MzsgKiBAZmxhZ3M6IHBvaW50ZXIgdG8gdGhlIGZvbGlvIGZsYWdzCiYjNDM7ICogQGdlbjogZ2VuZXJhdGlvbiBudW1iZXIsIGJldHdlZW4gMCBhbmQgTFJVX0dFTl9NQVgsIGluY2x1c2l2ZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2dlbl9zZXRfZmxhZ3ModW5zaWduZWQgbG9uZyAqZmxhZ3MsIGludCBnZW4pCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFncyA9IFJFQURfT05DRShmb2xpby0mZ3Q7ZmxhZ3MuZik7CiYjNDM7CVZNX1dBUk5fT05fT05DRShnZW4gJmd0OyBMUlVfR0VOX01BWCB8fCBnZW4gJmx0OyAwKTsKJiM0MzsJQlVJTERfQlVHX09OKChMUlVfR0VOX01BWCAmIzQzOyAxKSAhPSBNQVhfTlJfR0VOUyk7CiYjNDM7CiYjNDM7CSpmbGFncyAmYW1wOz0gfkxSVV9HRU5fTUFTSzsKJiM0MzsJKmZsYWdzIHw9IChnZW4gJiM0MzsgMVVMKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGOwomIzQzO30KIAomIzQzOy8qKgomIzQzOyAqIGxydV9yZWZzX2Zyb21fZmxhZ3MgLSBSZXR1cm4gTFJVIHJlZmVyZW5jZWQgLyBhY2Nlc3MgY291bnQgZnJvbSBmb2xpbyBmbGFncy4KJiM0MzsgKiBAZmxhZ3M6IGZvbGlvIGZsYWdzCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBpbnQgbHJ1X3JlZnNfZnJvbV9mbGFncyh1bnNpZ25lZCBsb25nIGZsYWdzKQomIzQzO3sKIAlpZiAoIShmbGFncyAmYW1wOyBCSVQoUEdfcmVmZXJlbmNlZCkpKQogCQlyZXR1cm4gMDsKIAkvKgpAQCAtMTU1LDE4ICYjNDM7MTkzLDQ3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJcmV0dXJuICgoZmxhZ3MgJmFtcDsgTFJVX1JFRlNfTUFTSykgJmd0OyZndDsgTFJVX1JFRlNfUEdPRkYpICYjNDM7IDE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MzsvKioKJiM0MzsgKiBscnVfcmVmc19zZXRfZmxhZ3MgLSBTZXQgdGhlIExSVSByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IHRvIHNwZWNpZmllZCBmb2xpbyBmbGFncy4KJiM0MzsgKiBAZmxhZ3M6IHBvaW50ZXIgdG8gdGhlIGZvbGlvIGZsYWdzCiYjNDM7ICogQHJlZnM6IHJlZmVyZW5jZWQgLyBhY2Nlc3MgY291bnQgbnVtYmVyLCBiZXR3ZWVuIDAgYW5kIExSVV9SRUZTX01BWCwgaW5jbHVzaXZlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfcmVmc19zZXRfZmxhZ3ModW5zaWduZWQgbG9uZyAqZmxhZ3MsIHVuc2lnbmVkIGludCByZWZzKQomIzQzO3sKJiM0MzsJVk1fV0FSTl9PTl9PTkNFKHJlZnMgJmd0OyBMUlVfUkVGU19NQVgpOwomIzQzOwlCVUlMRF9CVUdfT04oTFJVX1JFRlNfTUFYICE9IChMUlVfUkVGU19NQVNLICZndDsmZ3Q7IExSVV9SRUZTX1BHT0ZGKSAmIzQzOyAxKTsKJiM0MzsKJiM0MzsJKmZsYWdzICZhbXA7PSB+TFJVX1JFRlNfRkxBR1M7CiYjNDM7CWlmICghcmVmcykKJiM0MzsJCXJldHVybjsKJiM0MzsJKmZsYWdzIHw9IChCSVQoUEdfcmVmZXJlbmNlZCkgfCAoKHJlZnMgLSAxVUwpICZsdDsmbHQ7IExSVV9SRUZTX1BHT0ZGKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlyZXR1cm4gbHJ1X3JlZnNfZnJvbV9mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCByZWZzKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwomIzQzOwl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpOwogCi0JcmV0dXJuICgoZmxhZ3MgJmFtcDsgTFJVX0dFTl9NQVNLKSAmZ3Q7Jmd0OyBMUlVfR0VOX1BHT0ZGKSAtIDE7CiYjNDM7CWRvIHsKJiM0MzsJCW5ld19mbGFncyA9IG9sZF9mbGFnczsKJiM0MzsJCWxydV9yZWZzX3NldF9mbGFncygmYW1wO25ld19mbGFncywgcmVmcyk7CiYjNDM7CX0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksICZhbXA7b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X2dlbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIGxydV9nZW5fZnJvbV9mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9pc19hY3RpdmUoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgZ2VuKQogewogCXVuc2lnbmVkIGxvbmcgbWF4X3NlcSA9IGxydXZlYy0mZ3Q7bHJ1Z2VuLm1heF9zZXE7CiAKLQlWTV9XQVJOX09OX09OQ0UoZ2VuICZndDs9IE1BWF9OUl9HRU5TKTsKJiM0MzsJVk1fV0FSTl9PTl9PTkNFKGdlbiAmZ3Q7IExSVV9HRU5fTUFYKTsKIAogCS8qIHNlZSB0aGUgY29tbWVudCBvbiBNSU5fTlJfR0VOUyAqLwogCXJldHVybiBnZW4gPT0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKSB8fCBnZW4gPT0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxIC0gMSk7CkBAIC0yNzAsNyAmIzQzOzMzNyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2FkZF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpOwogCWZsYWdzID0gKGdlbiAmIzQzOyAxVUwpICZsdDsmbHQ7IExSVV9HRU5fUEdPRkY7CiAJLyogc2VlIHRoZSBjb21tZW50IG9uIE1JTl9OUl9HRU5TIGFib3V0IFBHX2FjdGl2ZSAqLwotCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX0dFTl9NQVNLIHwgQklUKFBHX2FjdGl2ZSksIGZsYWdzKTsKJiM0MzsJc2V0X21hc2tfYml0cyhmb2xpb19mbGFncyhmb2xpbywgMCksIExSVV9HRU5fTUFTSyB8IEJJVChQR19hY3RpdmUpLCBmbGFncyk7CiAKIAlscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIC0xLCBnZW4pOwogCS8qIGZvciBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoKSAqLwpAQCAtMjk1LDcgJiM0MzszNjIsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCiAJLyogZm9yIGZvbGlvX21pZ3JhdGVfZmxhZ3MoKSAqLwogCWZsYWdzID0gIXJlY2xhaW1pbmcgJmFtcDsmYW1wOyBscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIGdlbikgPyBCSVQoUEdfYWN0aXZlKSA6IDA7Ci0JZmxhZ3MgPSBzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9HRU5fTUFTSywgZmxhZ3MpOwomIzQzOwlmbGFncyA9IHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0ssIGZsYWdzKTsKIAlnZW4gPSAoKGZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwogCiAJbHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBnZW4sIC0xKTsKQEAgLTMwNCwxMSAmIzQzOzM3MSwxOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCXJldHVybiB0cnVlOwogfQogCiYjNDM7LyoqCiYjNDM7ICogZm9saW9fbWlncmF0ZV9yZWZzIC0gY29weSB0aGUgcmVmZXJlbmNlIHN0YXRlIHRvIGEgbmV3IGZvbGlvCiYjNDM7ICogQG5ldzogdGhlIGRlc3RpbmF0aW9uIGZvbGlvCiYjNDM7ICogQG9sZDogdGhlIHNvdXJjZSBmb2xpbwomIzQzOyAqCiYjNDM7ICogVHJhbnNmZXIgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBAbmV3IGR1cmluZyBtaWdyYXRpb246IHRoZSBNR0xSVQomIzQzOyAqIHJlZnMgY291bnQsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkLCBvciBqdXN0IFBHX3JlZmVyZW5jZWQgZm9yIHRoZQomIzQzOyAqIGFjdGl2ZS9pbmFjdGl2ZSBMUlUuCiYjNDM7ICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZCkKIHsKLQl1bnNpZ25lZCBsb25nIHJlZnMgPSBSRUFEX09OQ0Uob2xkLSZndDtmbGFncy5mKSAmYW1wOyBMUlVfUkVGU19NQVNLOwotCi0Jc2V0X21hc2tfYml0cygmYW1wO25ldy0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgcmVmcyk7CiYjNDM7CUJVSUxEX0JVR19PTihMUlVfUkVGU19NQVNLICZhbXA7IEJJVChQR19yZWZlcmVuY2VkKSk7CiYjNDM7CWZvbGlvX3NldF9scnVfcmVmcyhuZXcsIGZvbGlvX2xydV9yZWZzKG9sZCkpOwogfQogI2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovCiAKQEAgLTMzOSw3ICYjNDM7NDE0LDggQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywKIAogc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpCiB7Ci0KJiM0MzsJaWYgKGZvbGlvX3Rlc3RfcmVmZXJlbmNlZChvbGQpKQomIzQzOwkJZm9saW9fc2V0X3JlZmVyZW5jZWQobmV3KTsKIH0KICNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaAppbmRleCA5NGY5YzNmZjU0MTYwLi5kMGI1YzYyMTdkMjU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKQEAgLTQ5MiwxMSAmIzQzOzQ5MiwxNSBAQCBlbnVtIGxydXZlY19mbGFncyB7CiAgKiBmb2xpby0mZ3Q7ZmxhZ3MsIG1hc2tlZCBieSBMUlVfUkVGU19NQVNLLgogICovCiAjZGVmaW5lIE1BWF9OUl9USUVSUwkJNFUKJiM0MzsjZGVmaW5lIExSVV9USUVSX01JTgkJMFUKJiM0MzsjZGVmaW5lIExSVV9USUVSX01BWAkJKE1BWF9OUl9USUVSUyAtIDEpCiAKICNpZm5kZWYgX19HRU5FUkFUSU5HX0JPVU5EU19ICiAKICNkZWZpbmUgTFJVX0dFTl9NQVNLCQkoKEJJVChMUlVfR0VOX1dJRFRIKSAtIDEpICZsdDsmbHQ7IExSVV9HRU5fUEdPRkYpCiYjNDM7I2RlZmluZSBMUlVfR0VOX01BWAkJKEJJVChMUlVfR0VOX1dJRFRIIC0gMSkgLSAxKQogI2RlZmluZSBMUlVfUkVGU19NQVNLCQkoKEJJVChMUlVfUkVGU19XSURUSCkgLSAxKSAmbHQ7Jmx0OyBMUlVfUkVGU19QR09GRikKJiM0MzsjZGVmaW5lIExSVV9SRUZTX01BWAkJQklUKExSVV9SRUZTX1dJRFRIKQogCiAvKgogICogRm9yIGZvbGlvcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMsCmRpZmYgLS1naXQgYS9tbS9mb2xpby5jIGIvbW0vZm9saW8uYwppbmRleCA1OWM0NzcxMjBiOWE4Li4wYWRmZTRmNWVmNzJmIDEwMDY0NAotLS0gYS9tbS9mb2xpby5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2ZvbGlvLmMKQEAgLTM1MywyNiAmIzQzOzM1MywyOCBAQCBzdGF0aWMgdm9pZCBfX2xydV9jYWNoZV9hY3RpdmF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCiBzdGF0aWMgdm9pZCBscnVfZ2VuX2luY19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7Ci0JdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby0mZ3Q7ZmxhZ3MuZik7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7CiYjNDM7CWludCByZWZzOwogCiAJaWYgKGZvbGlvX3Rlc3RfdW5ldmljdGFibGUoZm9saW8pKQogCQlyZXR1cm47CiAKIAkvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi8KLQlpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpIHsKLQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpOwomIzQzOwlpZiAoIWZvbGlvX2xydV9yZWZzKGZvbGlvKSkgewomIzQzOwkJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTsKIAkJcmV0dXJuOwogCX0KIAogCWRvIHsKLQkJaWYgKChvbGRfZmxhZ3MgJmFtcDsgTFJVX1JFRlNfTUFTSykgPT0gTFJVX1JFRlNfTUFTSykgewomIzQzOwkJbmV3X2ZsYWdzID0gb2xkX2ZsYWdzOwomIzQzOwkJcmVmcyA9IGxydV9yZWZzX2Zyb21fZmxhZ3Mob2xkX2ZsYWdzKTsKJiM0MzsJCWlmIChyZWZzID09IExSVV9SRUZTX01BWCkgewogCQkJaWYgKCFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKQogCQkJCWZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTsKIAkJCXJldHVybjsKIAkJfQotCi0JCW5ld19mbGFncyA9IG9sZF9mbGFncyAmIzQzOyBCSVQoTFJVX1JFRlNfUEdPRkYpOwotCX0gd2hpbGUgKCF0cnlfY21weGNoZygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiYjNDM7CQlscnVfcmVmc19zZXRfZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIHJlZnMgJiM0MzsgMSk7CiYjNDM7CX0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksICZhbXA7b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTsKIH0KIAogc3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pCkBAIC0zODQsNyAmIzQzOzM4Niw4IEBAIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCWlmIChnZW4gJmx0OyAwKQogCQlyZXR1cm4gdHJ1ZTsKIAotCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MgfCBCSVQoUEdfd29ya2luZ3NldCksIDApOwomIzQzOwlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwomIzQzOwlmb2xpb19jbGVhcl93b3JraW5nc2V0KGZvbGlvKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlzZXEgPSBSRUFEX09OQ0UoZm9saW9fbHJ1dmVjKGZvbGlvKS0mZ3Q7bHJ1Z2VuLm1pbl9zZXFbdHlwZV0pOwpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDFkMzMzOTUyMDgwOWYuLjlkMGVlM2QzYmRhN2MgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTE1MjksMjggJiM0MzsxNTI5LDEyIEBAIHZvaWQgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIGxydV9saXN0IGxydSwKIAkJCQlpbnQgemlkLCBsb25nIG5yX3BhZ2VzKQogewogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejsKLQl1bnNpZ25lZCBsb25nICpscnVfc2l6ZTsKLQlsb25nIHNpemU7CiAKIAlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKQogCQlyZXR1cm47CiAKIAlteiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpOwotCWxydV9zaXplID0gJmFtcDttei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6aWRdW2xydV07Ci0KLQlpZiAobnJfcGFnZXMgJmx0OyAwKQotCQkqbHJ1X3NpemUgJiM0Mzs9IG5yX3BhZ2VzOwotCi0Jc2l6ZSA9ICpscnVfc2l6ZTsKLQlpZiAoV0FSTl9PTkNFKHNpemUgJmx0OyAwLAotCQkmIzM0OyVzKCVwLCAlZCwgJWxkKTogbHJ1X3NpemUgJWxkXG4mIzM0OywKLQkJX19mdW5jX18sIGxydXZlYywgbHJ1LCBucl9wYWdlcywgc2l6ZSkpIHsKLQkJVk1fQlVHX09OKDEpOwotCQkqbHJ1X3NpemUgPSAwOwotCX0KLQotCWlmIChucl9wYWdlcyAmZ3Q7IDApCi0JCSpscnVfc2l6ZSAmIzQzOz0gbnJfcGFnZXM7CiYjNDM7CWF0b21pY19sb25nX2FkZChucl9wYWdlcywgJmFtcDttei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6aWRdW2xydV0pOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuYwppbmRleCAxNWI0NTgzMmJjZmE3Li44MjMwNzMzMjcxMWY0IDEwMDY0NAotLS0gYS9tbS9taWdyYXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWlncmF0ZS5jCkBAIC03NzYsOCAmIzQzOzc3Niw2IEBAIHZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCWludCBjcHVwaWQ7CiAKLQlpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSkKLQkJZm9saW9fc2V0X3JlZmVyZW5jZWQobmV3Zm9saW8pOwogCWlmIChmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSkKIAkJZm9saW9fbWFya191cHRvZGF0ZShuZXdmb2xpbyk7CiAJaWYgKGZvbGlvX3Rlc3RfY2xlYXJfYWN0aXZlKGZvbGlvKSkgewpAQCAtODA3LDcgJiM0Mzs4MDUsOSBAQCB2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbykKIAlpZiAoZm9saW9fdGVzdF9pZGxlKGZvbGlvKSkKIAkJZm9saW9fc2V0X2lkbGUobmV3Zm9saW8pOwogCiYjNDM7CS8qIENvcHkgdGhlIHJlZmVyZW5jZSBzdGF0ZSwgaW5jbHVkaW5nIFBHX3JlZmVyZW5jZWQgKi8KIAlmb2xpb19taWdyYXRlX3JlZnMobmV3Zm9saW8sIGZvbGlvKTsKJiM0MzsKIAkvKgogCSAqIENvcHkgTlVNQSBpbmZvcm1hdGlvbiB0byB0aGUgbmV3IHBhZ2UsIHRvIHByZXZlbnQgb3Zlci1lYWdlcgogCSAqIGZ1dHVyZSBtaWdyYXRpb25zIG9mIHRoaXMgc2FtZSBwYWdlLgpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBjMTQwNGE1OTUyM2Q2Li43ZTNhZTBjNmNiYTNiIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtODQzLDE5ICYjNDM7ODQzLDIyIEBAIHN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncykKIAlpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgJmFtcDsmYW1wOyAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSkgewogCQkvKiBBY3RpdmF0ZSBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciBmaXJzdCB1c2FnZS4gKi8KIAkJaWYgKGlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkgewotCQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTsKJiM0MzsJCQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwomIzQzOwkJCWZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTsKIAkJCXJldHVybiB0cnVlOwogCQl9CiAKLQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpOwomIzQzOwkJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAogCS8qIFByb21vdGUgb24gc2Vjb25kIGFjY2VzcyAqLwotCWlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgJmd0OyAxKQotCQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfd29ya2luZ3NldCkpOwotCWVsc2UKJiM0MzsJaWYgKGZvbGlvX2xydV9yZWZzKGZvbGlvKSAmZ3Q7IDEpIHsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7CiYjNDM7CQlmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7CiYjNDM7CX0gZWxzZSB7CiAJCWZvbGlvX21hcmtfYWNjZXNzZWQoZm9saW8pOwomIzQzOwl9CiAJcmV0dXJuIHRydWU7CiB9CiAjZWxzZQpAQCAtMzE5NSw4ICYjNDM7MzE5OCw4IEBAIHN0cnVjdCBjdHJsX3BvcyB7CiAJaW50IGdhaW47CiB9OwogCi1zdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2FpbiwKLQkJCSAgc3RydWN0IGN0cmxfcG9zICpwb3MpCiYjNDM7c3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllcl9taW4sCiYjNDM7CQkJICBpbnQgdGllcl9tYXgsIGludCBnYWluLCBzdHJ1Y3QgY3RybF9wb3MgKnBvcykKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gJmFtcDtscnV2ZWMtJmd0O2xydWdlbjsKQEAgLTMyMDUsNyAmIzQzOzMyMDgsNyBAQCBzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2FpbiwKIAlwb3MtJmd0O2dhaW4gPSBnYWluOwogCXBvcy0mZ3Q7cmVmYXVsdGVkID0gcG9zLSZndDt0b3RhbCA9IDA7CiAKLQlmb3IgKGkgPSB0aWVyICUgTUFYX05SX1RJRVJTOyBpICZsdDs9IG1pbih0aWVyLCBNQVhfTlJfVElFUlMgLSAxKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJZm9yIChpID0gdGllcl9taW47IGkgJmx0Oz0gdGllcl9tYXg7IGkmIzQzOyYjNDM7KSB7CiAJCXBvcy0mZ3Q7cmVmYXVsdGVkICYjNDM7PSBscnVnZW4tJmd0O2F2Z19yZWZhdWx0ZWRbdHlwZV1baV0gJiM0MzsKIAkJCQkgIGF0b21pY19sb25nX3JlYWQoJmFtcDtscnVnZW4tJmd0O3JlZmF1bHRlZFtoaXN0XVt0eXBlXVtpXSk7CiAJCXBvcy0mZ3Q7dG90YWwgJiM0Mzs9IGxydWdlbi0mZ3Q7YXZnX3RvdGFsW3R5cGVdW2ldICYjNDM7CkBAIC0zMjY2LDExICYjNDM7MzI2OSwxMSBAQCBzdGF0aWMgYm9vbCBwb3NpdGl2ZV9jdHJsX2VycihzdHJ1Y3QgY3RybF9wb3MgKnNwLCBzdHJ1Y3QgY3RybF9wb3MgKnB2KQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyogcHJvbW90ZSBwYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzICovCi1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncykKJiM0MztzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGludCAqaXNfZmlsZSwKJiM0MzsJCQkgICAgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncykKIHsKLQl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLSZndDtmbGFncy5mKTsKLQotCVZNX1dBUk5fT05fT05DRShnZW4gJmd0Oz0gTUFYX05SX0dFTlMpOwomIzQzOwl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpOwomIzQzOwlpbnQgb2xkX2dlbjsKIAogCS8qCiAJICogU2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTLCBhbmQgYWN0aXZhdGUgZmlsZS1iYWNrZWQKQEAgLTMyNzksMjAgJiM0MzszMjgyLDI1IEBAIHN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hCiAJICovCiAJaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pICZhbXA7JmFtcDsgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykgJmFtcDsmYW1wOwogCSAgICAhaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7Ci0JCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7CiAJCXJldHVybiAtMTsKIAl9CiAKIAlkbyB7CiYjNDM7CQlvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX2ZsYWdzKG9sZF9mbGFncyk7CiYjNDM7CQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7CiYjNDM7CiAJCS8qIGxydV9nZW5fZGVsX2ZvbGlvKCkgaGFzIGlzb2xhdGVkIHRoaXMgcGFnZT8gKi8KLQkJaWYgKCEob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykpCi0JCQlyZXR1cm4gLTE7CiYjNDM7CQlpZiAob2xkX2dlbiAmbHQ7IDApCiYjNDM7CQkJYnJlYWs7CiAKLQkJbmV3X2ZsYWdzID0gb2xkX2ZsYWdzICZhbXA7IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpOwotCQluZXdfZmxhZ3MgfD0gKChnZW4gJiM0MzsgMVVMKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGKSB8IEJJVChQR193b3JraW5nc2V0KTsKLQl9IHdoaWxlICghdHJ5X2NtcHhjaGcoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwomIzQzOwkJbHJ1X2dlbl9zZXRfZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIG5ld19nZW4pOwomIzQzOwkJbHJ1X3JlZnNfc2V0X2ZsYWdzKCZhbXA7bmV3X2ZsYWdzLCAwKTsKJiM0MzsJCW5ld19mbGFncyB8PSBCSVQoUEdfd29ya2luZ3NldCk7CiYjNDM7CX0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksICZhbXA7b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTsKIAotCXJldHVybiAoKG9sZF9mbGFncyAmYW1wOyBMUlVfR0VOX01BU0spICZndDsmZ3Q7IExSVV9HRU5fUEdPRkYpIC0gMTsKJiM0MzsJKmlzX2ZpbGUgPSBmb2xpb19mbGFnc19pc19maWxlX2xydSgmYW1wO29sZF9mbGFncyk7CiYjNDM7CXJldHVybiBvbGRfZ2VuOwogfQogCiAvKiBwcm90ZWN0IHBhZ2VzIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycyAqLwpAQCAtMzMwMCwyMiAmIzQzOzMzMDgsMjUgQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTsKIAlzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gJmFtcDtscnV2ZWMtJmd0O2xydWdlbjsKLQlpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLSZndDttaW5fc2VxW3R5cGVdKTsKLQl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLSZndDtmbGFncy5mKTsKLQotCVZNX1dBUk5fT05fT05DRV9GT0xJTyghKG9sZF9mbGFncyAmYW1wOyBMUlVfR0VOX01BU0spLCBmb2xpbyk7CiYjNDM7CWludCBuZXdfZ2VuLCBvbGRfZ2VuLCBtaW5fZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tJmd0O21pbl9zZXFbdHlwZV0pOwomIzQzOwl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpOwogCiAJZG8gewotCQluZXdfZ2VuID0gKChvbGRfZmxhZ3MgJmFtcDsgTFJVX0dFTl9NQVNLKSAmZ3Q7Jmd0OyBMUlVfR0VOX1BHT0ZGKSAtIDE7Ci0JCS8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqLwotCQlpZiAobmV3X2dlbiAmZ3Q7PSAwICZhbXA7JmFtcDsgbmV3X2dlbiAhPSBvbGRfZ2VuKQotCQkJcmV0dXJuIG5ld19nZW47CiYjNDM7CQlvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX2ZsYWdzKG9sZF9mbGFncyk7CiYjNDM7CQkvKiBUaGlzIGhlbHBlciBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIGZvciBvZmYtbGlzdCBmb2xpb3MgKi8KJiM0MzsJCVZNX1dBUk5fT05fT05DRShvbGRfZ2VuICZsdDsgMCk7CiYjNDM7CQlpZiAob2xkX2dlbiAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIG1pbl9nZW47CiAKLQkJbmV3X2dlbiA9IChvbGRfZ2VuICYjNDM7IDEpICUgTUFYX05SX0dFTlM7CiYjNDM7CQkvKiBmb2xpb191cGRhdGVfZ2VuKCkgaGFzIHByb21vdGVkIHRoaXMgcGFnZT8gKi8KJiM0MzsJCWlmIChvbGRfZ2VuICE9IG1pbl9nZW4pCiYjNDM7CQkJcmV0dXJuIG9sZF9nZW47CiAKLQkJbmV3X2ZsYWdzID0gb2xkX2ZsYWdzICZhbXA7IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpOwotCQluZXdfZmxhZ3MgfD0gKG5ld19nZW4gJiM0MzsgMVVMKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGOwotCX0gd2hpbGUgKCF0cnlfY21weGNoZygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiYjNDM7CQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7CiYjNDM7CQluZXdfZ2VuID0gKG1pbl9nZW4gJiM0MzsgMSkgJSBNQVhfTlJfR0VOUzsKJiM0MzsJCWxydV9nZW5fc2V0X2ZsYWdzKCZhbXA7bmV3X2ZsYWdzLCBuZXdfZ2VuKTsKJiM0MzsJCWxydV9yZWZzX3NldF9mbGFncygmYW1wO25ld19mbGFncywgMCk7CiYjNDM7CX0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksICZhbXA7b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTsKIAogCWxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7CiAKQEAgLTMzMjMsOSAmIzQzOzMzMzQsOCBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogfQogCiBzdGF0aWMgdm9pZCB1cGRhdGVfYmF0Y2hfc2l6ZShzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAotCQkJICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuKQomIzQzOwkJCSAgICAgIGludCBvbGRfZ2VuLCBpbnQgbmV3X2dlbiwgaW50IHR5cGUpCiB7Ci0JaW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7CiAJaW50IHpvbmUgPSBmb2xpb196b25lbnVtKGZvbGlvKTsKIAlpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiAKQEAgLTM1MTIsMjIgJiM0MzszNTIyLDI0IEBAIHN0YXRpYyBib29sIHN1aXRhYmxlX3RvX3NjYW4oaW50IHRvdGFsLCBpbnQgeW91bmcpCiB9CiAKIHN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQlzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgYm9vbCBkaXJ0eSkKJiM0MzsJCQkgICAgICBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgZGlydHkpCiB7Ci0JaW50IG9sZF9nZW47CiYjNDM7CWludCBuZXdfZ2VuLCBvbGRfZ2VuLCBmaWxlOwogCiAJaWYgKCFmb2xpbykKIAkJcmV0dXJuOwogCiYjNDM7CW5ld19nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKFJFQURfT05DRShscnV2ZWMtJmd0O2xydWdlbi5tYXhfc2VxKSk7CiYjNDM7CiAJaWYgKGRpcnR5ICZhbXA7JmFtcDsgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pICZhbXA7JmFtcDsKIAkgICAgIShmb2xpb190ZXN0X2Fub24oZm9saW8pICZhbXA7JmFtcDsgZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSAmYW1wOyZhbXA7CiAJICAgICAgIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkpCiAJCWZvbGlvX21hcmtfZGlydHkoZm9saW8pOwogCiAJaWYgKHdhbGspIHsKLQkJb2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sICZhbXA7dm1hLSZndDtmbGFncyk7CiYjNDM7CQlvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgJmFtcDtmaWxlLCAmYW1wO3ZtYS0mZ3Q7ZmxhZ3MpOwogCQlpZiAob2xkX2dlbiAmZ3Q7PSAwICZhbXA7JmFtcDsgb2xkX2dlbiAhPSBuZXdfZ2VuKQotCQkJdXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pOwomIzQzOwkJCXVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuLCBmaWxlKTsKIAl9IGVsc2UgaWYgKGxydV9nZW5fc2V0X3JlZnMoZm9saW8sICZhbXA7dm1hLSZndDtmbGFncykpIHsKIAkJb2xkX2dlbiA9IGZvbGlvX2xydV9nZW4oZm9saW8pOwogCQlpZiAob2xkX2dlbiAmZ3Q7PSAwICZhbXA7JmFtcDsgb2xkX2dlbiAhPSBuZXdfZ2VuKQpAQCAtMzU0OSw4ICYjNDM7MzU2MSw2IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCXN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLSZndDtwcml2YXRlOwogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLSZndDtscnV2ZWMpOwogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQod2Fsay0mZ3Q7bHJ1dmVjKTsKLQlERUZJTkVfTUFYX1NFUSh3YWxrLSZndDtscnV2ZWMpOwotCWludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpOwogCXVuc2lnbmVkIGludCBucjsKIAlwbWRfdCBwbWR2YWw7CiAKQEAgLTM2MDEsNyAmIzQzOzM2MTEsNyBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChsYXN0ICE9IGZvbGlvKSB7Ci0JCQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLSZndDt2bWEsIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtJmd0O3ZtYSwgd2Fsay0mZ3Q7bHJ1dmVjLCBsYXN0LCBkaXJ0eSk7CiAKIAkJCWxhc3QgPSBmb2xpbzsKIAkJCWRpcnR5ID0gZmFsc2U7CkBAIC0zNjE0LDcgJiM0MzszNjI0LDcgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCXdhbGstJmd0O21tX3N0YXRzW01NX0xFQUZfWU9VTkddICYjNDM7PSBucjsKIAl9CiAKLQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLSZndDt2bWEsIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLSZndDt2bWEsIHdhbGstJmd0O2xydXZlYywgbGFzdCwgZGlydHkpOwogCWxhc3QgPSBOVUxMOwogCiAJaWYgKGkgJmx0OyBQVFJTX1BFUl9QVEUgJmFtcDsmYW1wOyBnZXRfbmV4dF92bWEoUE1EX01BU0ssIFBBR0VfU0laRSwgYXJncywgJmFtcDtzdGFydCwgJmFtcDtlbmQpKQpAQCAtMzYzNyw4ICYjNDM7MzY0Nyw2IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhCiAJc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtJmd0O3ByaXZhdGU7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKHdhbGstJmd0O2xydXZlYyk7CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdCh3YWxrLSZndDtscnV2ZWMpOwotCURFRklORV9NQVhfU0VRKHdhbGstJmd0O2xydXZlYyk7Ci0JaW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7CiAKIAlWTV9XQVJOX09OX09OQ0UocHVkX2xlYWYoKnB1ZCkpOwogCkBAIC0zNjkyLDcgJiM0MzszNzAwLDcgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWEKIAkJCWdvdG8gbmV4dDsKIAogCQlpZiAobGFzdCAhPSBmb2xpbykgewotCQkJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJCQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIHdhbGstJmd0O2xydXZlYywgbGFzdCwgZGlydHkpOwogCiAJCQlsYXN0ID0gZm9saW87CiAJCQlkaXJ0eSA9IGZhbHNlOwpAQCAtMzcwNiw3ICYjNDM7MzcxNCw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhCiAJCWkgPSBpICZndDsgTUlOX0xSVV9CQVRDSCA/IDAgOiBmaW5kX25leHRfYml0KGJpdG1hcCwgTUlOX0xSVV9CQVRDSCwgaSkgJiM0MzsgMTsKIAl9IHdoaWxlIChpICZsdDs9IE1JTl9MUlVfQkFUQ0gpOwogCi0Jd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCB3YWxrLSZndDtscnV2ZWMsIGxhc3QsIGRpcnR5KTsKIAogCWxhenlfbW11X21vZGVfZGlzYWJsZSgpOwogCXNwaW5fdW5sb2NrKHB0bCk7CkBAIC00MjcwLDggJiM0Mzs0Mjc4LDYgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKQogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBmb2xpb19wZ2RhdChmb2xpbyk7CiAJc3RydWN0IGxydXZlYyAqbHJ1dmVjOwogCXN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZTsKLQl1bnNpZ25lZCBsb25nIG1heF9zZXE7Ci0JaW50IGdlbjsKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQocHZtdy0mZ3Q7cHRsKTsKIAlWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF9scnUoZm9saW8pLCBmb2xpbyk7CkBAIC00MzA4LDggJiM0Mzs0MzE0LDYgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKQogCiAJbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTsKIAlscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpOwotCW1heF9zZXEgPSBSRUFEX09OQ0UoKGxydXZlYyktJmd0O2xydWdlbi5tYXhfc2VxKTsKLQlnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpOwogCW1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7CiAKIAlsYXp5X21tdV9tb2RlX2VuYWJsZSgpOwpAQCAtNDM0MSw3ICYjNDM7NDM0NSw3IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucikKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChsYXN0ICE9IGZvbGlvKSB7Ci0JCQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7CiAKIAkJCWxhc3QgPSBmb2xpbzsKIAkJCWRpcnR5ID0gZmFsc2U7CkBAIC00MzUzLDEzICYjNDM7NDM1NywxNCBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpCiAJCXlvdW5nICYjNDM7PSBucjsKIAl9CiAKLQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxydXZlYywgbGFzdCwgZGlydHkpOwogCiAJbGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7CiAKIAkvKiBmZWVkYmFjayBmcm9tIHJtYXAgd2Fsa2VycyB0byBwYWdlIHRhYmxlIHdhbGtlcnMgKi8KIAlpZiAobW1fc3RhdGUgJmFtcDsmYW1wOyBzdWl0YWJsZV90b19zY2FuKGksIHlvdW5nKSkKLQkJdXBkYXRlX2Jsb29tX2ZpbHRlcihtbV9zdGF0ZSwgbWF4X3NlcSwgcHZtdy0mZ3Q7cG1kKTsKJiM0MzsJCXVwZGF0ZV9ibG9vbV9maWx0ZXIobW1fc3RhdGUsIFJFQURfT05DRShscnV2ZWMtJmd0O2xydWdlbi5tYXhfc2VxKSwKJiM0MzsJCQkJICAgIHB2bXctJmd0O3BtZCk7CiAKIAltZW1fY2dyb3VwX3B1dChtZW1jZyk7CiAKQEAgLTQ3MTEsNyAmIzQzOzQ3MTYsNyBAQCBzdGF0aWMgYm9vbCBpc29sYXRlX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYQogCiAJLyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovCiAJaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKQotCQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX01BU0ssIDApOwomIzQzOwkJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTsKIAogCXN1Y2Nlc3MgPSBscnVfZ2VuX2RlbF9mb2xpbyhscnV2ZWMsIGZvbGlvLCB0cnVlKTsKIAlWTV9XQVJOX09OX09OQ0VfRk9MSU8oIXN1Y2Nlc3MsIGZvbGlvKTsKQEAgLTQ4MDQsOSAmIzQzOzQ4MDksOSBAQCBzdGF0aWMgaW50IGdldF90aWVyX2lkeChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKQogCSAqIFRoaXMgdmFsdWUgaXMgY2hvc2VuIGJlY2F1c2UgYW55IG90aGVyIHRpZXIgd291bGQgaGF2ZSBhdCBsZWFzdCB0d2ljZQogCSAqIGFzIG1hbnkgcmVmYXVsdHMgYXMgdGhlIGZpcnN0IHRpZXIuCiAJICovCi0JcmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIDAsIDIsICZhbXA7c3ApOwotCWZvciAodGllciA9IDE7IHRpZXIgJmx0OyBNQVhfTlJfVElFUlM7IHRpZXImIzQzOyYjNDM7KSB7Ci0JCXJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0aWVyLCAzLCAmYW1wO3B2KTsKJiM0MzsJcmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUlOLCAyLCAmYW1wO3NwKTsKJiM0MzsJZm9yICh0aWVyID0gTFJVX1RJRVJfTUlOICYjNDM7IDE7IHRpZXIgJmx0Oz0gTFJVX1RJRVJfTUFYOyB0aWVyJiM0MzsmIzQzOykgewomIzQzOwkJcmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIHRpZXIsIDMsICZhbXA7cHYpOwogCQlpZiAoIXBvc2l0aXZlX2N0cmxfZXJyKCZhbXA7c3AsICZhbXA7cHYpKQogCQkJYnJlYWs7CiAJfQpAQCAtNDgyNyw4ICYjNDM7NDgzMiwxMCBAQCBzdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcykKIAkgKiBDb21wYXJlIHRoZSBzdW0gb2YgYWxsIHRpZXJzIG9mIGFub24gd2l0aCB0aGF0IG9mIGZpbGUgdG8gZGV0ZXJtaW5lCiAJICogd2hpY2ggdHlwZSB0byBzY2FuLgogCSAqLwotCXJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIE1BWF9OUl9USUVSUywgc3dhcHBpbmVzcywgJmFtcDtzcCk7Ci0JcmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTUFYX05SX1RJRVJTLCBNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3MsICZhbXA7cHYpOwomIzQzOwlyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCwKJiM0MzsJCSAgICAgIHN3YXBwaW5lc3MsICZhbXA7c3ApOwomIzQzOwlyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCwKJiM0MzsJCSAgICAgIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgJmFtcDtwdik7CiAKIAlyZXR1cm4gcG9zaXRpdmVfY3RybF9lcnIoJmFtcDtzcCwgJmFtcDtwdik7CiB9CkBAIC00OTI3LDggJiM0Mzs0OTM0LDEwIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCQl9CiAKIAkJLyogZG9uJiMzOTt0IGFkZCByZWplY3RlZCBmb2xpb3MgdG8gdGhlIG9sZGVzdCBnZW5lcmF0aW9uICovCi0JCWlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSkKLQkJCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR19hY3RpdmUpKTsKJiM0MzsJCWlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSkgewomIzQzOwkJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7CiYjNDM7CQkJZm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7CiYjNDM7CQl9CiAJfQogCiAJbW92ZV9mb2xpb3NfdG9fbHJ1KCZhbXA7bGlzdCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY0NgoJCQkJCQkJb3V0cHV0OiAxODQKCQkJCQkJCXRob3VnaHRzOiAxNjI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIE5vdCBOZWVkZWQ6IEEgRGVlcCBEaXZlIGludG8gTWVtb3J5IE1hbmFnZW1lbnQgUmVmYWN0b3JpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFuYWx5emUgdGhlc2UgY2hhbmdlcyBmcm9tIGEgbWVtb3J5IHNhZmV0eSBwZXJzcGVjdGl2ZSwgYW5kIHNwZWNpZmljYWxseSBpZiBLTVNBTiBpcyAqbmVlZGVkKiBoZXJlLgoKRmlyc3QsIEkgc2VlIHRoZSBtb2RpZmljYXRpb25zIGFyZSBmb2N1c2VkIG9uIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIHBhcnRpY3VsYXJseSB0aGUgTFJVIGdlbmVyYXRpb24gYW5kIHJlZmVyZW5jZSB0cmFja2luZy4gVGhpcyBpbnZvbHZlcyBjaGFuZ2VzIGFjcm9zcyBzZXZlcmFsIGZpbGVzLCBmb2N1c2luZyBvbiBgc3RydWN0IGZvbGlvYCBhbmQgTFJVLXJlbGF0ZWQgZmxhZ3MuCgpUaGUga2V5IGNoYW5nZXMganVtcCBvdXQ6IGBscnVfem9uZV9zaXplYCBpbiBgbWVtX2Nncm91cF9wZXJfbm9kZWAgZ29pbmcgZnJvbSBgdW5zaWduZWQgbG9uZ2AgdG8gYGF0b21pY19sb25nX3RgIOKAkyBzb3VuZHMgbGlrZSBhIGNvbmN1cnJlbmN5IGltcHJvdmVtZW50LCBsaWtlbHkgdGhyZWFkLXNhZmUgbm93LiBTZWNvbmQsIG1vdmluZyBMUlUgZ2VuZXJhdGlvbi9yZWZlcmVuY2UgdHJhY2tpbmcgZnJvbSBkaXJlY3QgYml0IG1hbmlwdWxhdGlvbiBvZiBgZm9saW8tJmd0O2ZsYWdzYCB0byBoZWxwZXIgZnVuY3Rpb25zIOKAkyBhIGRlZmluaXRlIHJlZmFjdG9yaW5nIHRvIGltcHJvdmUgcmVhZGFiaWxpdHkgYW5kIHBvdGVudGlhbGx5IGlzb2xhdGUgdGhlIGZsYWcgYWNjZXNzLiBUaGVuLCB1cGRhdGVzIHRvIGZ1bmN0aW9ucyBzdWNoIGFzIGBmb2xpb19taWdyYXRlX3JlZnNgLCBgcmVhZF9jdHJsX3Bvc2AsIGBmb2xpb191cGRhdGVfZ2VuYCwgYW5kIGB3YWxrX3VwZGF0ZV9mb2xpb2AgdG8gYWxpZ24gd2l0aCB0aGUgbmV3IGhlbHBlcnMuCgpOb3csIG15IHByaW1hcnkgY29uY2VybiB3aXRoIGEgcGF0Y2ggbGlrZSB0aGlzIGlzIHRoZSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZS4gVGhlIHF1ZXN0aW9uIEkgaW1tZWRpYXRlbHkgYXNrIGlzOiBkbyB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBhIHZ1bG5lcmFiaWxpdHkgd2hlcmUgc29tZSBwcmV2aW91c2x5IHVuaXRpYWxpemVkIG1lbW9yeSBpcyBub3cgdXNlZCBpbiBjb250cm9sIGZsb3csIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlPyBJIG5lZWQgdG8gYW5hbHl6ZSB0aGlzIGZyb20gdGhlIHN0YW5kcG9pbnQgb2Ygc3RydWN0dXJlcyBiZWluZyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5ldyBhbGxvY2F0aW9ucywgYW5kIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZGF0YSBpcyBub3cgcmVhZC4KCkluaXRpYWxseSwgaXQgZG9lc24mIzM5O3QgKnNlZW0qIGxpa2UgdGhlcmUgYXJlIGFueSBvYnZpb3VzIHJlZCBmbGFncy4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSwgbm90aGluZyBzZWVtcyB0byBiZSBhbGxvY2F0ZWQgd2l0aG91dCBpbml0aWFsaXphdGlvbi4gSSBjYW4gc2VlIG5vIG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhbmQgbm8gY2hhbmdlcyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIHBhdGNoIHByaW1hcmlseSBtYW5pcHVsYXRlcyBmbGFncywgTFJVIHN0YXRpc3RpY3MsIGFuZCB1cGRhdGVzIGEgY291bnRlci4gVGhhdCwgb24gaXRzIG93biwgc2VlbXMgdG8gcmVkdWNlIHRoZSBwcm9iYWJpbGl0eSBvZiBpbnRyb2R1Y2luZyBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcy4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2suIEkmIzM5O2xsIG1ldGljdWxvdXNseSBnbyB0aHJvdWdoIHRoZSBjb2RlLCBmb2N1c2luZyBvbiBhcmVhcyB3aGVyZSB2YWx1ZXMgYXJlIHNldCBhbmQgdXNlZC4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBwYXkgYXR0ZW50aW9uIHRvIGBmb2xpb191cGRhdGVfZ2VuYCBhbmQgYHdhbGtfdXBkYXRlX2ZvbGlvYC4gSW4gYGZvbGlvX3VwZGF0ZV9nZW5gLCBpdCAqbG9va3MqIGxpa2UgYCppc19maWxlYCBtaWdodCBiZSB1bmluaXRpYWxpemVkIGlmIHRoZSBlYXJseSByZXR1cm4gaXMgdGFrZW4uIEJ1dCB3YWl0LCBgKmlzX2ZpbGVgIGlzIHNldCAqYmVmb3JlKiB0aGUgZnVuY3Rpb24gcmV0dXJucywgZXZlbiBhZnRlciBhIGZhc3QgcGF0aC4gU28sIGBpc19maWxlYCBpcyB1c2VkIGluIGB3YWxrX3VwZGF0ZV9mb2xpb2AgYXMgYW4gb3V0cHV0LiBIb3dldmVyLCB1cG9uIGNsb3NlciBpbnNwZWN0aW9uLCBJIHNlZSB0aGF0IHRoZSByZXR1cm4gdmFsdWUgb2YgYGZvbGlvX3VwZGF0ZV9nZW5gIGlzIGNoZWNrZWQuIElmIGl0ICppcyogdGhlIGZhc3QgcGF0aCwgdGhlbiBgdXBkYXRlX2JhdGNoX3NpemVgIGlzbiYjMzk7dCBldmVuIGNhbGxlZCwgbWVhbmluZyBgZmlsZWAgaXMgbmV2ZXIgdXNlZC4gU28gZXZlbiAqdGhhdCogc2VlbWluZ2x5IHBvdGVudGlhbCBpc3N1ZSBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gYmUgYSBwcm9ibGVtLiBUaGlzIGlzIGdvb2QuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQuCgpXaGF0IGFib3V0IGBscnVfem9uZV9zaXplYD8gSSByZWNhbGwgdGhhdCBpdCYjMzk7cyBwYXJ0IG9mIGEgYG1lbV9jZ3JvdXBfcGVyX25vZGVgLCB3aGljaCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfbm9kZWAuIFRoYXTigJlzIHplcm8taW5pdGlhbGl6ZWQuIEV4Y2VsbGVudC4KCk5vdywgbGV0JiMzOTtzIHpvb20gb3V0IGFnYWluLiBJcyB0aGVyZSAqYW55KiBvdGhlciB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIEkmIzM5O20gbWlzc2luZz8gSSB0aGluayBJJiMzOTt2ZSBjb3ZlcmVkIHRoZSBjcml0aWNhbCBwYXJ0cy4gSSBzZWUgbm8gbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3RoaW5nIGFsbG9jYXRlZCB0aGF0ICppc24mIzM5O3QqIGluaXRpYWxpemVkLCBhbmQgYWxsIGxvY2FsIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIHBhdGNoIGFwcGVhcnMgdG8gYmUgcHVyZSBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgcmVmYWN0b3JpbmcgYW5kIGltcHJvdmluZyBzb21lIGZsYWcgaGFuZGxpbmcgYW5kIGZpeGluZyBhIGNvbmN1cnJlbmN5IGlzc3VlLgoKU28sIHRoZSBjb25jbHVzaW9uIGlzOiBLTVNBTiBpc24mIzM5O3QgbmVlZGVkIGhlcmUuIFN0YW5kYXJkIG1lbW9yeSBzYWZldHkgdG9vbHMgbGlrZSBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBzaG91bGQgYmUgc3VmZmljaWVudC4gS01TQU4gaXMgZm9yIGNhdGNoaW5nICp1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyosIGFuZCB0aGVyZSBhcmUgbm9uZSBpbiB0aGlzIHBhdGNoLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCYjMzk7cyBhcHBseSB0aGUgS01TQU4gdGVzdCBhZ2FpbjoKCjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2U/IE5vbmUuCjIuICBDb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUuIGBmaWxlYCBpbiBgd2Fsa191cGRhdGVfZm9saW9gIGlzIHNhZmUuCjMuICBBbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzPyBOb25lLgo0LiAgQm91bmRzIGNoZWNrcyBjaGFuZ2VzPyBOb25lLgoKU28sIG15IGZpbmFsIHZlcmRpY3QgaXM6ICoqTmVlZHNLTVNBTiA9IGZhbHNlLioqIFRoZSBwYXRjaCByZWZhY3RvcnMgZmxhZyBtYW5pcHVsYXRpb24gYW5kIGFuIGF0b21pYyB2YXJpYWJsZSB1cGRhdGUuIFN0YW5kYXJkIHRvb2xzIHdpbGwgY2F0Y2ggYW55IGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDU6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCBzcGVjaWZpY2FsbHkgZm9saW8gTFJVIGdlbmVyYXRpb24gZmxhZ3MgYW5kIHJlZmVyZW5jZSB0cmFja2luZywgYW5kIGNoYW5nZXMgYSBjb3VudGVyIChgbHJ1X3pvbmVfc2l6ZWApIHRvIGFuIGF0b21pYyB2YXJpYWJsZSB0byBmaXggY29uY3VycmVuY3kgaXNzdWVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IG1pZ2h0IGJlIGxlZnQgcGFydGlhbGx5IHVuaW5pdGlhbGl6ZWQuIFRoZSBsb2NhbCB2YXJpYWJsZSBgZmlsZWAgaW50cm9kdWNlZCBpbiBgd2Fsa191cGRhdGVfZm9saW9gIGlzIG9ubHkgdXNlZCB3aGVuIGBmb2xpb191cGRhdGVfZ2VuYCByZXR1cm5zIGEgbm9uLW5lZ2F0aXZlIHZhbHVlLCB3aGljaCBndWFyYW50ZWVzIGl0IGhhcyBiZWVuIGluaXRpYWxpemVkLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCBzcGVjaWZpY2FsbHkgZm9saW8gTFJVIGdlbmVyYXRpb24gZmxhZ3MgYW5kIHJlZmVyZW5jZSB0cmFja2luZywgYW5kIGNoYW5nZXMgYSBjb3VudGVyIChgbHJ1X3pvbmVfc2l6ZWApIHRvIGFuIGF0b21pYyB2YXJpYWJsZSB0byBmaXggY29uY3VycmVuY3kgaXNzdWVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IG1pZ2h0IGJlIGxlZnQgcGFydGlhbGx5IHVuaW5pdGlhbGl6ZWQuIFRoZSBsb2NhbCB2YXJpYWJsZSBgZmlsZWAgaW50cm9kdWNlZCBpbiBgd2Fsa191cGRhdGVfZm9saW9gIGlzIG9ubHkgdXNlZCB3aGVuIGBmb2xpb191cGRhdGVfZ2VuYCByZXR1cm5zIGEgbm9uLW5lZ2F0aXZlIHZhbHVlLCB3aGljaCBndWFyYW50ZWVzIGl0IGhhcyBiZWVuIGluaXRpYWxpemVkLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNTo0Nzo0MC4yMzI5MTA4MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NjQ0NzA1OTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZVwiLFxuICAgIFwiZm9saW9fbWlncmF0ZV9mbGFnc1wiLFxuICAgIFwibHJ1X2dlbl9sb29rX2Fyb3VuZFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCBzcGVjaWZpY2FsbHkgZm9saW8gTFJVIGdlbmVyYXRpb24gZmxhZ3MgYW5kIHJlZmVyZW5jZSB0cmFja2luZywgYW5kIGNoYW5nZXMgYSBjb3VudGVyIChgbHJ1X3pvbmVfc2l6ZWApIHRvIGFuIGF0b21pYyB2YXJpYWJsZSB0byBmaXggY29uY3VycmVuY3kgaXNzdWVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IG1pZ2h0IGJlIGxlZnQgcGFydGlhbGx5IHVuaW5pdGlhbGl6ZWQuIFRoZSBsb2NhbCB2YXJpYWJsZSBgZmlsZWAgaW50cm9kdWNlZCBpbiBgd2Fsa191cGRhdGVfZm9saW9gIGlzIG9ubHkgdXNlZCB3aGVuIGBmb2xpb191cGRhdGVfZ2VuYCByZXR1cm5zIGEgbm9uLW5lZ2F0aXZlIHZhbHVlLCB3aGljaCBndWFyYW50ZWVzIGl0IGhhcyBiZWVuIGluaXRpYWxpemVkLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgaW1wbGVtZW50YXRpb24sIGNoYW5naW5nIGhvdyBMUlUgZ2VuZXJhdGlvbiBhbmQgcmVmZXJlbmNlIGZsYWdzIGFyZSBzdG9yZWQgaW4gYGZvbGlvLVxcdTAwM2VmbGFnc2AuIEl0IHJlcGxhY2VzIGRpcmVjdCBiaXRtYXNrIG9wZXJhdGlvbnMgd2l0aCBuZXcgaGVscGVyIGZ1bmN0aW9ucyBhbmQgY2hhbmdlcyBgbHJ1X3pvbmVfc2l6ZWAgaW4gYHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlYCB0byB1c2UgYGF0b21pY19sb25nX3RgIGluc3RlYWQgb2YgYHVuc2lnbmVkIGxvbmdgLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzLCBpbmNsdWRpbmcgcGFnZSBtaWdyYXRpb24sIExSVSBzaXplIHRyYWNraW5nLCBhbmQgcGFnZSB0YWJsZSBzY2FubmluZy4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsbHkgYWx0ZXJzIGhvdyBmb2xpb3MgYXJlIHRyYWNrZWQgYW5kIGFnZWQgaW4gdGhlIExSVSBsaXN0cywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA1OjQ3OjQwLjIzMjkxNjg4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzQxMDI1NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4YTkyNWQyNTQ2YzUzOGQ0YjNiMGRjMTc1NWNhYWM4OTQ5ODlkOWEwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDE4IDA1OjQ3OjM5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG5pbmRleCBlNzhiYzk4YWIyMjliLi5iMTNlM2YwNTYzMTk1IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG5AQCAtMTEzLDcgKzExMyw3IEBAIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlIHtcXG4gXFx0LyogRmllbGRzIHdoaWNoIGdldCB1cGRhdGVkIG9mdGVuIGF0IHRoZSBlbmQuICovXFxuIFxcdHN0cnVjdCBscnV2ZWNcXHRcXHRscnV2ZWM7XFxuIFxcdENBQ0hFTElORV9QQURESU5HKF9wYWQyXyk7XFxuLVxcdHVuc2lnbmVkIGxvbmdcXHRcXHRscnVfem9uZV9zaXplW01BWF9OUl9aT05FU11bTlJfTFJVX0xJU1RTXTtcXG4rXFx0YXRvbWljX2xvbmdfdFxcdFxcdGxydV96b25lX3NpemVbTUFYX05SX1pPTkVTXVtOUl9MUlVfTElTVFNdO1xcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cF9yZWNsYWltX2l0ZXJcXHRpdGVyO1xcbiBcXG4gXFx0LypcXG5AQCAtODk3LDEwICs4OTcsMTUgQEAgc3RhdGljIGlubGluZVxcbiB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiBcXHRcXHRlbnVtIGxydV9saXN0IGxydSwgaW50IHpvbmVfaWR4KVxcbiB7XFxuK1xcdGxvbmcgdmFsO1xcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XFxuIFxcbiBcXHRteiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xcbi1cXHRyZXR1cm4gUkVBRF9PTkNFKG16LVxcdTAwM2VscnVfem9uZV9zaXplW3pvbmVfaWR4XVtscnVdKTtcXG4rXFx0dmFsID0gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bXotXFx1MDAzZWxydV96b25lX3NpemVbem9uZV9pZHhdW2xydV0pO1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKHZhbCBcXHUwMDNjIDApKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJldHVybiB2YWw7XFxuIH1cXG4gXFxuIHZvaWQgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxcbmluZGV4IDYyMWM4NjUzZDhmN2UuLjRiYjM5MGQ5NTE2ZWYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcXG5AQCAtMTAsNiArMTAsMTEgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VzZXJmYXVsdGZkX2suaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xlYWZvcHMuaFxcdTAwM2VcXG4gXFxuK3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZsYWdzKVxcbit7XFxuK1xcdHJldHVybiAhdGVzdF9iaXQoUEdfc3dhcGJhY2tlZCwgZmxhZ3MpO1xcbit9XFxuK1xcbiAvKipcXG4gICogZm9saW9faXNfZmlsZV9scnUgLSBTaG91bGQgdGhlIGZvbGlvIGJlIG9uIGEgZmlsZSBMUlUgb3IgYW5vbiBMUlU/XFxuICAqIEBmb2xpbzogVGhlIGZvbGlvIHRvIHRlc3QuXFxuQEAgLTI3LDcgKzMyLDcgQEBcXG4gICovXFxuIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2lzX2ZpbGVfbHJ1KGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4tXFx0cmV0dXJuICFmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pO1xcbitcXHRyZXR1cm4gZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUoY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcXG4gfVxcbiBcXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5AQCAtMTQyLDEwICsxNDcsNDMgQEAgc3RhdGljIGlubGluZSBpbnQgbHJ1X3RpZXJfZnJvbV9yZWZzKGludCByZWZzLCBib29sIHdvcmtpbmdzZXQpXFxuIFxcdHJldHVybiB3b3JraW5nc2V0ID8gTUFYX05SX1RJRVJTIC0gMSA6IG9yZGVyX2Jhc2VfMihyZWZzKTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4rLyoqXFxuKyAqIGxydV9nZW5fZnJvbV9mbGFncyAtIFJldHVybiB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIGZyb20gZm9saW8gZmxhZ3MuXFxuKyAqIEBmbGFnczogZm9saW8gZmxhZ3NcXG4rICpcXG4rICogUmV0dXJuczogQSBudW1iZXIgYmV0d2VlbiAwIGFuZCBMUlVfR0VOX01BWCwgaW5jbHVzaXZlLiBSZXR1cm5zIC0xIGlmIHRoZVxcbisgKiBmbGFncyBpbmRpY2F0ZSB0aGUgZm9saW8gaXMgb2ZmIHRoZSBsaXN0IChlLmcuLCBpc29sYXRlZCkuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIGludCBscnVfZ2VuX2Zyb21fZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncylcXG4re1xcbitcXHRpbnQgZ2VuID0gKChmbGFncyBcXHUwMDI2IExSVV9HRU5fTUFTSykgXFx1MDAzZVxcdTAwM2UgTFJVX0dFTl9QR09GRik7XFxuK1xcbitcXHRCVUlMRF9CVUdfT04oTFJVX0dFTl9NQVNLIFxcdTAwMjYgTFJVX1JFRlNfTUFTSyk7XFxuK1xcdGdlbiAtPSAxO1xcbitcXHRWTV9XQVJOX09OX09OQ0UoZ2VuICE9IC0xIFxcdTAwMjZcXHUwMDI2IGdlbiBcXHUwMDNlIExSVV9HRU5fTUFYKTtcXG4rXFx0cmV0dXJuIGdlbjtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGxydV9nZW5fc2V0X2ZsYWdzIC0gU2V0IHRoZSBMUlUgZ2VuZXJhdGlvbiBudW1iZXIgdG8gc3BlY2lmaWVkIGZvbGlvIGZsYWdzLlxcbisgKiBAZmxhZ3M6IHBvaW50ZXIgdG8gdGhlIGZvbGlvIGZsYWdzXFxuKyAqIEBnZW46IGdlbmVyYXRpb24gbnVtYmVyLCBiZXR3ZWVuIDAgYW5kIExSVV9HRU5fTUFYLCBpbmNsdXNpdmUuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2dlbl9zZXRfZmxhZ3ModW5zaWduZWQgbG9uZyAqZmxhZ3MsIGludCBnZW4pXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBmbGFncyA9IFJFQURfT05DRShmb2xpby1cXHUwMDNlZmxhZ3MuZik7XFxuK1xcdFZNX1dBUk5fT05fT05DRShnZW4gXFx1MDAzZSBMUlVfR0VOX01BWCB8fCBnZW4gXFx1MDAzYyAwKTtcXG4rXFx0QlVJTERfQlVHX09OKChMUlVfR0VOX01BWCArIDEpICE9IE1BWF9OUl9HRU5TKTtcXG4rXFxuK1xcdCpmbGFncyBcXHUwMDI2PSB+TFJVX0dFTl9NQVNLO1xcbitcXHQqZmxhZ3MgfD0gKGdlbiArIDFVTCkgXFx1MDAzY1xcdTAwM2MgTFJVX0dFTl9QR09GRjtcXG4rfVxcbiBcXG4rLyoqXFxuKyAqIGxydV9yZWZzX2Zyb21fZmxhZ3MgLSBSZXR1cm4gTFJVIHJlZmVyZW5jZWQgLyBhY2Nlc3MgY291bnQgZnJvbSBmb2xpbyBmbGFncy5cXG4rICogQGZsYWdzOiBmb2xpbyBmbGFnc1xcbisgKi9cXG4rc3RhdGljIGlubGluZSBpbnQgbHJ1X3JlZnNfZnJvbV9mbGFncyh1bnNpZ25lZCBsb25nIGZsYWdzKVxcbit7XFxuIFxcdGlmICghKGZsYWdzIFxcdTAwMjYgQklUKFBHX3JlZmVyZW5jZWQpKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdC8qXFxuQEAgLTE1NSwxOCArMTkzLDQ3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdHJldHVybiAoKGZsYWdzIFxcdTAwMjYgTFJVX1JFRlNfTUFTSykgXFx1MDAzZVxcdTAwM2UgTFJVX1JFRlNfUEdPRkYpICsgMTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X2dlbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbisvKipcXG4rICogbHJ1X3JlZnNfc2V0X2ZsYWdzIC0gU2V0IHRoZSBMUlUgcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCB0byBzcGVjaWZpZWQgZm9saW8gZmxhZ3MuXFxuKyAqIEBmbGFnczogcG9pbnRlciB0byB0aGUgZm9saW8gZmxhZ3NcXG4rICogQHJlZnM6IHJlZmVyZW5jZWQgLyBhY2Nlc3MgY291bnQgbnVtYmVyLCBiZXR3ZWVuIDAgYW5kIExSVV9SRUZTX01BWCwgaW5jbHVzaXZlLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSB2b2lkIGxydV9yZWZzX3NldF9mbGFncyh1bnNpZ25lZCBsb25nICpmbGFncywgdW5zaWduZWQgaW50IHJlZnMpXFxuK3tcXG4rXFx0Vk1fV0FSTl9PTl9PTkNFKHJlZnMgXFx1MDAzZSBMUlVfUkVGU19NQVgpO1xcbitcXHRCVUlMRF9CVUdfT04oTFJVX1JFRlNfTUFYICE9IChMUlVfUkVGU19NQVNLIFxcdTAwM2VcXHUwMDNlIExSVV9SRUZTX1BHT0ZGKSArIDEpO1xcbitcXG4rXFx0KmZsYWdzIFxcdTAwMjY9IH5MUlVfUkVGU19GTEFHUztcXG4rXFx0aWYgKCFyZWZzKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdCpmbGFncyB8PSAoQklUKFBHX3JlZmVyZW5jZWQpIHwgKChyZWZzIC0gMVVMKSBcXHUwMDNjXFx1MDAzYyBMUlVfUkVGU19QR09GRikpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdHJldHVybiBscnVfcmVmc19mcm9tX2ZsYWdzKFJFQURfT05DRSgqY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IHJlZnMpXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBmbGFncyA9IFJFQURfT05DRShmb2xpby1cXHUwMDNlZmxhZ3MuZik7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XFxuIFxcbi1cXHRyZXR1cm4gKChmbGFncyBcXHUwMDI2IExSVV9HRU5fTUFTSykgXFx1MDAzZVxcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xcbitcXHRkbyB7XFxuK1xcdFxcdG5ld19mbGFncyA9IG9sZF9mbGFncztcXG4rXFx0XFx0bHJ1X3JlZnNfc2V0X2ZsYWdzKFxcdTAwMjZuZXdfZmxhZ3MsIHJlZnMpO1xcbitcXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X2dlbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdHJldHVybiBscnVfZ2VuX2Zyb21fZmxhZ3MoUkVBRF9PTkNFKCpjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpKTtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIGxydV9nZW5faXNfYWN0aXZlKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IGdlbilcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIG1heF9zZXEgPSBscnV2ZWMtXFx1MDAzZWxydWdlbi5tYXhfc2VxO1xcbiBcXG4tXFx0Vk1fV0FSTl9PTl9PTkNFKGdlbiBcXHUwMDNlPSBNQVhfTlJfR0VOUyk7XFxuK1xcdFZNX1dBUk5fT05fT05DRShnZW4gXFx1MDAzZSBMUlVfR0VOX01BWCk7XFxuIFxcbiBcXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUlOX05SX0dFTlMgKi9cXG4gXFx0cmV0dXJuIGdlbiA9PSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpIHx8IGdlbiA9PSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEgLSAxKTtcXG5AQCAtMjcwLDcgKzMzNyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2FkZF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcXG4gXFx0ZmxhZ3MgPSAoZ2VuICsgMVVMKSBcXHUwMDNjXFx1MDAzYyBMUlVfR0VOX1BHT0ZGO1xcbiBcXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUlOX05SX0dFTlMgYWJvdXQgUEdfYWN0aXZlICovXFxuLVxcdHNldF9tYXNrX2JpdHMoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpO1xcbitcXHRzZXRfbWFza19iaXRzKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgTFJVX0dFTl9NQVNLIHwgQklUKFBHX2FjdGl2ZSksIGZsYWdzKTtcXG4gXFxuIFxcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgLTEsIGdlbik7XFxuIFxcdC8qIGZvciBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoKSAqL1xcbkBAIC0yOTUsNyArMzYyLDcgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFxuIFxcdC8qIGZvciBmb2xpb19taWdyYXRlX2ZsYWdzKCkgKi9cXG4gXFx0ZmxhZ3MgPSAhcmVjbGFpbWluZyBcXHUwMDI2XFx1MDAyNiBscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIGdlbikgPyBCSVQoUEdfYWN0aXZlKSA6IDA7XFxuLVxcdGZsYWdzID0gc2V0X21hc2tfYml0cyhcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYsIExSVV9HRU5fTUFTSywgZmxhZ3MpO1xcbitcXHRmbGFncyA9IHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0ssIGZsYWdzKTtcXG4gXFx0Z2VuID0gKChmbGFncyBcXHUwMDI2IExSVV9HRU5fTUFTSykgXFx1MDAzZVxcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xcbiBcXG4gXFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBnZW4sIC0xKTtcXG5AQCAtMzA0LDExICszNzEsMTkgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBmb2xpb19taWdyYXRlX3JlZnMgLSBjb3B5IHRoZSByZWZlcmVuY2Ugc3RhdGUgdG8gYSBuZXcgZm9saW9cXG4rICogQG5ldzogdGhlIGRlc3RpbmF0aW9uIGZvbGlvXFxuKyAqIEBvbGQ6IHRoZSBzb3VyY2UgZm9saW9cXG4rICpcXG4rICogVHJhbnNmZXIgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBAbmV3IGR1cmluZyBtaWdyYXRpb246IHRoZSBNR0xSVVxcbisgKiByZWZzIGNvdW50LCBpbmNsdWRpbmcgUEdfcmVmZXJlbmNlZCwgb3IganVzdCBQR19yZWZlcmVuY2VkIGZvciB0aGVcXG4rICogYWN0aXZlL2luYWN0aXZlIExSVS5cXG4rICovXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGxvbmcgcmVmcyA9IFJFQURfT05DRShvbGQtXFx1MDAzZWZsYWdzLmYpIFxcdTAwMjYgTFJVX1JFRlNfTUFTSztcXG4tXFxuLVxcdHNldF9tYXNrX2JpdHMoXFx1MDAyNm5ldy1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgcmVmcyk7XFxuK1xcdEJVSUxEX0JVR19PTihMUlVfUkVGU19NQVNLIFxcdTAwMjYgQklUKFBHX3JlZmVyZW5jZWQpKTtcXG4rXFx0Zm9saW9fc2V0X2xydV9yZWZzKG5ldywgZm9saW9fbHJ1X3JlZnMob2xkKSk7XFxuIH1cXG4gI2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXFxuIFxcbkBAIC0zMzksNyArNDE0LDggQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxcbiB7XFxuLVxcbitcXHRpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKG9sZCkpXFxuK1xcdFxcdGZvbGlvX3NldF9yZWZlcmVuY2VkKG5ldyk7XFxuIH1cXG4gI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxcbmluZGV4IDk0ZjljM2ZmNTQxNjAuLmQwYjVjNjIxN2QyNTcgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcXG5AQCAtNDkyLDExICs0OTIsMTUgQEAgZW51bSBscnV2ZWNfZmxhZ3Mge1xcbiAgKiBmb2xpby1cXHUwMDNlZmxhZ3MsIG1hc2tlZCBieSBMUlVfUkVGU19NQVNLLlxcbiAgKi9cXG4gI2RlZmluZSBNQVhfTlJfVElFUlNcXHRcXHQ0VVxcbisjZGVmaW5lIExSVV9USUVSX01JTlxcdFxcdDBVXFxuKyNkZWZpbmUgTFJVX1RJRVJfTUFYXFx0XFx0KE1BWF9OUl9USUVSUyAtIDEpXFxuIFxcbiAjaWZuZGVmIF9fR0VORVJBVElOR19CT1VORFNfSFxcbiBcXG4gI2RlZmluZSBMUlVfR0VOX01BU0tcXHRcXHQoKEJJVChMUlVfR0VOX1dJRFRIKSAtIDEpIFxcdTAwM2NcXHUwMDNjIExSVV9HRU5fUEdPRkYpXFxuKyNkZWZpbmUgTFJVX0dFTl9NQVhcXHRcXHQoQklUKExSVV9HRU5fV0lEVEggLSAxKSAtIDEpXFxuICNkZWZpbmUgTFJVX1JFRlNfTUFTS1xcdFxcdCgoQklUKExSVV9SRUZTX1dJRFRIKSAtIDEpIFxcdTAwM2NcXHUwMDNjIExSVV9SRUZTX1BHT0ZGKVxcbisjZGVmaW5lIExSVV9SRUZTX01BWFxcdFxcdEJJVChMUlVfUkVGU19XSURUSClcXG4gXFxuIC8qXFxuICAqIEZvciBmb2xpb3MgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzLFxcbmRpZmYgLS1naXQgYS9tbS9mb2xpby5jIGIvbW0vZm9saW8uY1xcbmluZGV4IDU5YzQ3NzEyMGI5YTguLjBhZGZlNGY1ZWY3MmYgMTAwNjQ0XFxuLS0tIGEvbW0vZm9saW8uY1xcbisrKyBiL21tL2ZvbGlvLmNcXG5AQCAtMzUzLDI2ICszNTMsMjggQEAgc3RhdGljIHZvaWQgX19scnVfY2FjaGVfYWN0aXZhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFxuIHN0YXRpYyB2b2lkIGxydV9nZW5faW5jX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVxcdTAwM2VmbGFncy5mKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcXG4rXFx0aW50IHJlZnM7XFxuIFxcbiBcXHRpZiAoZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbykpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqL1xcbi1cXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpIHtcXG4tXFx0XFx0c2V0X21hc2tfYml0cyhcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XFxuK1xcdGlmICghZm9saW9fbHJ1X3JlZnMoZm9saW8pKSB7XFxuK1xcdFxcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4gXFx0ZG8ge1xcbi1cXHRcXHRpZiAoKG9sZF9mbGFncyBcXHUwMDI2IExSVV9SRUZTX01BU0spID09IExSVV9SRUZTX01BU0spIHtcXG4rXFx0XFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xcbitcXHRcXHRyZWZzID0gbHJ1X3JlZnNfZnJvbV9mbGFncyhvbGRfZmxhZ3MpO1xcbitcXHRcXHRpZiAocmVmcyA9PSBMUlVfUkVGU19NQVgpIHtcXG4gXFx0XFx0XFx0aWYgKCFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKVxcbiBcXHRcXHRcXHRcXHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XFxuIFxcdFxcdFxcdHJldHVybjtcXG4gXFx0XFx0fVxcbi1cXG4tXFx0XFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzICsgQklUKExSVV9SRUZTX1BHT0ZGKTtcXG4tXFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgXFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XFxuK1xcdFxcdGxydV9yZWZzX3NldF9mbGFncyhcXHUwMDI2bmV3X2ZsYWdzLCByZWZzICsgMSk7XFxuK1xcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFxcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcXG5AQCAtMzg0LDcgKzM4Niw4IEBAIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRpZiAoZ2VuIFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbi1cXHRzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MgfCBCSVQoUEdfd29ya2luZ3NldCksIDApO1xcbitcXHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xcbitcXHRmb2xpb19jbGVhcl93b3JraW5nc2V0KGZvbGlvKTtcXG4gXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0c2VxID0gUkVBRF9PTkNFKGZvbGlvX2xydXZlYyhmb2xpbyktXFx1MDAzZWxydWdlbi5taW5fc2VxW3R5cGVdKTtcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXFxuaW5kZXggMWQzMzM5NTIwODA5Zi4uOWQwZWUzZDNiZGE3YyAxMDA2NDRcXG4tLS0gYS9tbS9tZW1jb250cm9sLmNcXG4rKysgYi9tbS9tZW1jb250cm9sLmNcXG5AQCAtMTUyOSwyOCArMTUyOSwxMiBAQCB2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXFxuIFxcdFxcdFxcdFxcdGludCB6aWQsIGxvbmcgbnJfcGFnZXMpXFxuIHtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16O1xcbi1cXHR1bnNpZ25lZCBsb25nICpscnVfc2l6ZTtcXG4tXFx0bG9uZyBzaXplO1xcbiBcXG4gXFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0bXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcXG4tXFx0bHJ1X3NpemUgPSBcXHUwMDI2bXotXFx1MDAzZWxydV96b25lX3NpemVbemlkXVtscnVdO1xcbi1cXG4tXFx0aWYgKG5yX3BhZ2VzIFxcdTAwM2MgMClcXG4tXFx0XFx0KmxydV9zaXplICs9IG5yX3BhZ2VzO1xcbi1cXG4tXFx0c2l6ZSA9ICpscnVfc2l6ZTtcXG4tXFx0aWYgKFdBUk5fT05DRShzaXplIFxcdTAwM2MgMCxcXG4tXFx0XFx0XFxcIiVzKCVwLCAlZCwgJWxkKTogbHJ1X3NpemUgJWxkXFxcXG5cXFwiLFxcbi1cXHRcXHRfX2Z1bmNfXywgbHJ1dmVjLCBscnUsIG5yX3BhZ2VzLCBzaXplKSkge1xcbi1cXHRcXHRWTV9CVUdfT04oMSk7XFxuLVxcdFxcdCpscnVfc2l6ZSA9IDA7XFxuLVxcdH1cXG4tXFxuLVxcdGlmIChucl9wYWdlcyBcXHUwMDNlIDApXFxuLVxcdFxcdCpscnVfc2l6ZSArPSBucl9wYWdlcztcXG4rXFx0YXRvbWljX2xvbmdfYWRkKG5yX3BhZ2VzLCBcXHUwMDI2bXotXFx1MDAzZWxydV96b25lX3NpemVbemlkXVtscnVdKTtcXG4gfVxcbiBcXG4gLyoqXFxuZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuY1xcbmluZGV4IDE1YjQ1ODMyYmNmYTcuLjgyMzA3MzMyNzExZjQgMTAwNjQ0XFxuLS0tIGEvbW0vbWlncmF0ZS5jXFxuKysrIGIvbW0vbWlncmF0ZS5jXFxuQEAgLTc3Niw4ICs3NzYsNiBAQCB2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRpbnQgY3B1cGlkO1xcbiBcXG4tXFx0aWYgKGZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpXFxuLVxcdFxcdGZvbGlvX3NldF9yZWZlcmVuY2VkKG5ld2ZvbGlvKTtcXG4gXFx0aWYgKGZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKVxcbiBcXHRcXHRmb2xpb19tYXJrX3VwdG9kYXRlKG5ld2ZvbGlvKTtcXG4gXFx0aWYgKGZvbGlvX3Rlc3RfY2xlYXJfYWN0aXZlKGZvbGlvKSkge1xcbkBAIC04MDcsNyArODA1LDkgQEAgdm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdGlmIChmb2xpb190ZXN0X2lkbGUoZm9saW8pKVxcbiBcXHRcXHRmb2xpb19zZXRfaWRsZShuZXdmb2xpbyk7XFxuIFxcbitcXHQvKiBDb3B5IHRoZSByZWZlcmVuY2Ugc3RhdGUsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkICovXFxuIFxcdGZvbGlvX21pZ3JhdGVfcmVmcyhuZXdmb2xpbywgZm9saW8pO1xcbitcXG4gXFx0LypcXG4gXFx0ICogQ29weSBOVU1BIGluZm9ybWF0aW9uIHRvIHRoZSBuZXcgcGFnZSwgdG8gcHJldmVudCBvdmVyLWVhZ2VyXFxuIFxcdCAqIGZ1dHVyZSBtaWdyYXRpb25zIG9mIHRoaXMgc2FtZSBwYWdlLlxcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXFxuaW5kZXggYzE0MDRhNTk1MjNkNi4uN2UzYWUwYzZjYmEzYiAxMDA2NDRcXG4tLS0gYS9tbS92bXNjYW4uY1xcbisrKyBiL21tL3Ztc2Nhbi5jXFxuQEAgLTg0MywxOSArODQzLDIyIEBAIHN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG4gXFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pIFxcdTAwMjZcXHUwMDI2ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKSB7XFxuIFxcdFxcdC8qIEFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLiAqL1xcbiBcXHRcXHRpZiAoaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7XFxuLVxcdFxcdFxcdHNldF9tYXNrX2JpdHMoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTtcXG4rXFx0XFx0XFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcXG4rXFx0XFx0XFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xcbiBcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0c2V0X21hc2tfYml0cyhcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XFxuK1xcdFxcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0fVxcbiBcXG4gXFx0LyogUHJvbW90ZSBvbiBzZWNvbmQgYWNjZXNzICovXFxuLVxcdGlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgXFx1MDAzZSAxKVxcbi1cXHRcXHRzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7XFxuLVxcdGVsc2VcXG4rXFx0aWYgKGZvbGlvX2xydV9yZWZzKGZvbGlvKSBcXHUwMDNlIDEpIHtcXG4rXFx0XFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcXG4rXFx0XFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xcbitcXHR9IGVsc2Uge1xcbiBcXHRcXHRmb2xpb19tYXJrX2FjY2Vzc2VkKGZvbGlvKTtcXG4rXFx0fVxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiAjZWxzZVxcbkBAIC0zMTk1LDggKzMxOTgsOCBAQCBzdHJ1Y3QgY3RybF9wb3Mge1xcbiBcXHRpbnQgZ2FpbjtcXG4gfTtcXG4gXFxuLXN0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXIsIGludCBnYWluLFxcbi1cXHRcXHRcXHQgIHN0cnVjdCBjdHJsX3BvcyAqcG9zKVxcbitzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyX21pbixcXG4rXFx0XFx0XFx0ICBpbnQgdGllcl9tYXgsIGludCBnYWluLCBzdHJ1Y3QgY3RybF9wb3MgKnBvcylcXG4ge1xcbiBcXHRpbnQgaTtcXG4gXFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5AQCAtMzIwNSw3ICszMjA4LDcgQEAgc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllciwgaW50IGdhaW4sXFxuIFxcdHBvcy1cXHUwMDNlZ2FpbiA9IGdhaW47XFxuIFxcdHBvcy1cXHUwMDNlcmVmYXVsdGVkID0gcG9zLVxcdTAwM2V0b3RhbCA9IDA7XFxuIFxcbi1cXHRmb3IgKGkgPSB0aWVyICUgTUFYX05SX1RJRVJTOyBpIFxcdTAwM2M9IG1pbih0aWVyLCBNQVhfTlJfVElFUlMgLSAxKTsgaSsrKSB7XFxuK1xcdGZvciAoaSA9IHRpZXJfbWluOyBpIFxcdTAwM2M9IHRpZXJfbWF4OyBpKyspIHtcXG4gXFx0XFx0cG9zLVxcdTAwM2VyZWZhdWx0ZWQgKz0gbHJ1Z2VuLVxcdTAwM2VhdmdfcmVmYXVsdGVkW3R5cGVdW2ldICtcXG4gXFx0XFx0XFx0XFx0ICBhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZscnVnZW4tXFx1MDAzZXJlZmF1bHRlZFtoaXN0XVt0eXBlXVtpXSk7XFxuIFxcdFxcdHBvcy1cXHUwMDNldG90YWwgKz0gbHJ1Z2VuLVxcdTAwM2VhdmdfdG90YWxbdHlwZV1baV0gK1xcbkBAIC0zMjY2LDExICszMjY5LDExIEBAIHN0YXRpYyBib29sIHBvc2l0aXZlX2N0cmxfZXJyKHN0cnVjdCBjdHJsX3BvcyAqc3AsIHN0cnVjdCBjdHJsX3BvcyAqcHYpXFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuIFxcbiAvKiBwcm9tb3RlIHBhZ2VzIGFjY2Vzc2VkIHRocm91Z2ggcGFnZSB0YWJsZXMgKi9cXG4tc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXFxuK3N0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgaW50ICppc19maWxlLFxcbitcXHRcXHRcXHQgICAgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVxcdTAwM2VmbGFncy5mKTtcXG4tXFxuLVxcdFZNX1dBUk5fT05fT05DRShnZW4gXFx1MDAzZT0gTUFYX05SX0dFTlMpO1xcbitcXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xcbitcXHRpbnQgb2xkX2dlbjtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUywgYW5kIGFjdGl2YXRlIGZpbGUtYmFja2VkXFxuQEAgLTMyNzksMjAgKzMyODIsMjUgQEAgc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFcXG4gXFx0ICovXFxuIFxcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgIWlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkge1xcbi1cXHRcXHRzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcXG4rXFx0XFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcXG4gXFx0XFx0cmV0dXJuIC0xO1xcbiBcXHR9XFxuIFxcbiBcXHRkbyB7XFxuK1xcdFxcdG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fZmxhZ3Mob2xkX2ZsYWdzKTtcXG4rXFx0XFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xcbitcXG4gXFx0XFx0LyogbHJ1X2dlbl9kZWxfZm9saW8oKSBoYXMgaXNvbGF0ZWQgdGhpcyBwYWdlPyAqL1xcbi1cXHRcXHRpZiAoIShvbGRfZmxhZ3MgXFx1MDAyNiBMUlVfR0VOX01BU0spKVxcbi1cXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdGlmIChvbGRfZ2VuIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuIFxcbi1cXHRcXHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgXFx1MDAyNiB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTtcXG4tXFx0XFx0bmV3X2ZsYWdzIHw9ICgoZ2VuICsgMVVMKSBcXHUwMDNjXFx1MDAzYyBMUlVfR0VOX1BHT0ZGKSB8IEJJVChQR193b3JraW5nc2V0KTtcXG4tXFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgXFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XFxuK1xcdFxcdGxydV9nZW5fc2V0X2ZsYWdzKFxcdTAwMjZuZXdfZmxhZ3MsIG5ld19nZW4pO1xcbitcXHRcXHRscnVfcmVmc19zZXRfZmxhZ3MoXFx1MDAyNm5ld19mbGFncywgMCk7XFxuK1xcdFxcdG5ld19mbGFncyB8PSBCSVQoUEdfd29ya2luZ3NldCk7XFxuK1xcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFxcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xcbiBcXG4tXFx0cmV0dXJuICgob2xkX2ZsYWdzIFxcdTAwMjYgTFJVX0dFTl9NQVNLKSBcXHUwMDNlXFx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XFxuK1xcdCppc19maWxlID0gZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUoXFx1MDAyNm9sZF9mbGFncyk7XFxuK1xcdHJldHVybiBvbGRfZ2VuO1xcbiB9XFxuIFxcbiAvKiBwcm90ZWN0IHBhZ2VzIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycyAqL1xcbkBAIC0zMzAwLDIyICszMzA4LDI1IEBAIHN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XFxuIFxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxuLVxcdGludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXFx1MDAzZW1pbl9zZXFbdHlwZV0pO1xcbi1cXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVxcdTAwM2VmbGFncy5mKTtcXG4tXFxuLVxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghKG9sZF9mbGFncyBcXHUwMDI2IExSVV9HRU5fTUFTSyksIGZvbGlvKTtcXG4rXFx0aW50IG5ld19nZW4sIG9sZF9nZW4sIG1pbl9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cXHUwMDNlbWluX3NlcVt0eXBlXSk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XFxuIFxcbiBcXHRkbyB7XFxuLVxcdFxcdG5ld19nZW4gPSAoKG9sZF9mbGFncyBcXHUwMDI2IExSVV9HRU5fTUFTSykgXFx1MDAzZVxcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xcbi1cXHRcXHQvKiBmb2xpb191cGRhdGVfZ2VuKCkgaGFzIHByb21vdGVkIHRoaXMgcGFnZT8gKi9cXG4tXFx0XFx0aWYgKG5ld19nZW4gXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBuZXdfZ2VuICE9IG9sZF9nZW4pXFxuLVxcdFxcdFxcdHJldHVybiBuZXdfZ2VuO1xcbitcXHRcXHRvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX2ZsYWdzKG9sZF9mbGFncyk7XFxuK1xcdFxcdC8qIFRoaXMgaGVscGVyIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgZm9yIG9mZi1saXN0IGZvbGlvcyAqL1xcbitcXHRcXHRWTV9XQVJOX09OX09OQ0Uob2xkX2dlbiBcXHUwMDNjIDApO1xcbitcXHRcXHRpZiAob2xkX2dlbiBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiBtaW5fZ2VuO1xcbiBcXG4tXFx0XFx0bmV3X2dlbiA9IChvbGRfZ2VuICsgMSkgJSBNQVhfTlJfR0VOUztcXG4rXFx0XFx0LyogZm9saW9fdXBkYXRlX2dlbigpIGhhcyBwcm9tb3RlZCB0aGlzIHBhZ2U/ICovXFxuK1xcdFxcdGlmIChvbGRfZ2VuICE9IG1pbl9nZW4pXFxuK1xcdFxcdFxcdHJldHVybiBvbGRfZ2VuO1xcbiBcXG4tXFx0XFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzIFxcdTAwMjYgfihMUlVfR0VOX01BU0sgfCBMUlVfUkVGU19GTEFHUyk7XFxuLVxcdFxcdG5ld19mbGFncyB8PSAobmV3X2dlbiArIDFVTCkgXFx1MDAzY1xcdTAwM2MgTFJVX0dFTl9QR09GRjtcXG4tXFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgXFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XFxuK1xcdFxcdG5ld19mbGFncyA9IG9sZF9mbGFncztcXG4rXFx0XFx0bmV3X2dlbiA9IChtaW5fZ2VuICsgMSkgJSBNQVhfTlJfR0VOUztcXG4rXFx0XFx0bHJ1X2dlbl9zZXRfZmxhZ3MoXFx1MDAyNm5ld19mbGFncywgbmV3X2dlbik7XFxuK1xcdFxcdGxydV9yZWZzX3NldF9mbGFncyhcXHUwMDI2bmV3X2ZsYWdzLCAwKTtcXG4rXFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XFxuIFxcbiBcXHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xcbiBcXG5AQCAtMzMyMyw5ICszMzM0LDggQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgdXBkYXRlX2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tXFx0XFx0XFx0ICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuKVxcbitcXHRcXHRcXHQgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4sIGludCB0eXBlKVxcbiB7XFxuLVxcdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xcbiBcXHRpbnQgem9uZSA9IGZvbGlvX3pvbmVudW0oZm9saW8pO1xcbiBcXHRpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuIFxcbkBAIC0zNTEyLDIyICszNTIyLDI0IEBAIHN0YXRpYyBib29sIHN1aXRhYmxlX3RvX3NjYW4oaW50IHRvdGFsLCBpbnQgeW91bmcpXFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi1cXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgYm9vbCBkaXJ0eSlcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIGRpcnR5KVxcbiB7XFxuLVxcdGludCBvbGRfZ2VuO1xcbitcXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiwgZmlsZTtcXG4gXFxuIFxcdGlmICghZm9saW8pXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuK1xcdG5ld19nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKFJFQURfT05DRShscnV2ZWMtXFx1MDAzZWxydWdlbi5tYXhfc2VxKSk7XFxuK1xcbiBcXHRpZiAoZGlydHkgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAhKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgICAhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSlcXG4gXFx0XFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XFxuIFxcbiBcXHRpZiAod2Fsaykge1xcbi1cXHRcXHRvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgXFx1MDAyNnZtYS1cXHUwMDNlZmxhZ3MpO1xcbitcXHRcXHRvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgXFx1MDAyNmZpbGUsIFxcdTAwMjZ2bWEtXFx1MDAzZWZsYWdzKTtcXG4gXFx0XFx0aWYgKG9sZF9nZW4gXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXFxuLVxcdFxcdFxcdHVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcXG4rXFx0XFx0XFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4sIGZpbGUpO1xcbiBcXHR9IGVsc2UgaWYgKGxydV9nZW5fc2V0X3JlZnMoZm9saW8sIFxcdTAwMjZ2bWEtXFx1MDAzZWZsYWdzKSkge1xcbiBcXHRcXHRvbGRfZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7XFxuIFxcdFxcdGlmIChvbGRfZ2VuIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgb2xkX2dlbiAhPSBuZXdfZ2VuKVxcbkBAIC0zNTQ5LDggKzM1NjEsNiBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXFx1MDAzZXByaXZhdGU7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbiBcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstXFx1MDAzZWxydXZlYyk7XFxuLVxcdERFRklORV9NQVhfU0VRKHdhbGstXFx1MDAzZWxydXZlYyk7XFxuLVxcdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xcbiBcXHR1bnNpZ25lZCBpbnQgbnI7XFxuIFxcdHBtZF90IHBtZHZhbDtcXG4gXFxuQEAgLTM2MDEsNyArMzYxMSw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdGlmIChsYXN0ICE9IGZvbGlvKSB7XFxuLVxcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXFx1MDAzZXZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XFxuK1xcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXFx1MDAzZXZtYSwgd2Fsay1cXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XFxuIFxcbiBcXHRcXHRcXHRsYXN0ID0gZm9saW87XFxuIFxcdFxcdFxcdGRpcnR5ID0gZmFsc2U7XFxuQEAgLTM2MTQsNyArMzYyNCw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHR3YWxrLVxcdTAwM2VtbV9zdGF0c1tNTV9MRUFGX1lPVU5HXSArPSBucjtcXG4gXFx0fVxcbiBcXG4tXFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cXHUwMDNldm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcXG4rXFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cXHUwMDNldm1hLCB3YWxrLVxcdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcXG4gXFx0bGFzdCA9IE5VTEw7XFxuIFxcbiBcXHRpZiAoaSBcXHUwMDNjIFBUUlNfUEVSX1BURSBcXHUwMDI2XFx1MDAyNiBnZXRfbmV4dF92bWEoUE1EX01BU0ssIFBBR0VfU0laRSwgYXJncywgXFx1MDAyNnN0YXJ0LCBcXHUwMDI2ZW5kKSlcXG5AQCAtMzYzNyw4ICszNjQ3LDYgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcXG4gXFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXFx1MDAzZXByaXZhdGU7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbiBcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstXFx1MDAzZWxydXZlYyk7XFxuLVxcdERFRklORV9NQVhfU0VRKHdhbGstXFx1MDAzZWxydXZlYyk7XFxuLVxcdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xcbiBcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFKHB1ZF9sZWFmKCpwdWQpKTtcXG4gXFxuQEAgLTM2OTIsNyArMzcwMCw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhXFxuIFxcdFxcdFxcdGdvdG8gbmV4dDtcXG4gXFxuIFxcdFxcdGlmIChsYXN0ICE9IGZvbGlvKSB7XFxuLVxcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XFxuK1xcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay1cXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XFxuIFxcbiBcXHRcXHRcXHRsYXN0ID0gZm9saW87XFxuIFxcdFxcdFxcdGRpcnR5ID0gZmFsc2U7XFxuQEAgLTM3MDYsNyArMzcxNCw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhXFxuIFxcdFxcdGkgPSBpIFxcdTAwM2UgTUlOX0xSVV9CQVRDSCA/IDAgOiBmaW5kX25leHRfYml0KGJpdG1hcCwgTUlOX0xSVV9CQVRDSCwgaSkgKyAxO1xcbiBcXHR9IHdoaWxlIChpIFxcdTAwM2M9IE1JTl9MUlVfQkFUQ0gpO1xcbiBcXG4tXFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcXG4rXFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCB3YWxrLVxcdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcXG4gXFxuIFxcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xcbiBcXHRzcGluX3VubG9jayhwdGwpO1xcbkBAIC00MjcwLDggKzQyNzgsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXFxuIFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBmb2xpb19wZ2RhdChmb2xpbyk7XFxuIFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcXG4gXFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlO1xcbi1cXHR1bnNpZ25lZCBsb25nIG1heF9zZXE7XFxuLVxcdGludCBnZW47XFxuIFxcbiBcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKHB2bXctXFx1MDAzZXB0bCk7XFxuIFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2xydShmb2xpbyksIGZvbGlvKTtcXG5AQCAtNDMwOCw4ICs0MzE0LDYgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxcbiBcXG4gXFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcXG4gXFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcXG4tXFx0bWF4X3NlcSA9IFJFQURfT05DRSgobHJ1dmVjKS1cXHUwMDNlbHJ1Z2VuLm1heF9zZXEpO1xcbi1cXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xcbiBcXHRtbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbiBcXG4gXFx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcXG5AQCAtNDM0MSw3ICs0MzQ1LDcgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdGlmIChsYXN0ICE9IGZvbGlvKSB7XFxuLVxcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XFxuK1xcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XFxuIFxcbiBcXHRcXHRcXHRsYXN0ID0gZm9saW87XFxuIFxcdFxcdFxcdGRpcnR5ID0gZmFsc2U7XFxuQEAgLTQzNTMsMTMgKzQzNTcsMTQgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxcbiBcXHRcXHR5b3VuZyArPSBucjtcXG4gXFx0fVxcbiBcXG4tXFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcXG4rXFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTtcXG4gXFxuIFxcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xcbiBcXG4gXFx0LyogZmVlZGJhY2sgZnJvbSBybWFwIHdhbGtlcnMgdG8gcGFnZSB0YWJsZSB3YWxrZXJzICovXFxuIFxcdGlmIChtbV9zdGF0ZSBcXHUwMDI2XFx1MDAyNiBzdWl0YWJsZV90b19zY2FuKGksIHlvdW5nKSlcXG4tXFx0XFx0dXBkYXRlX2Jsb29tX2ZpbHRlcihtbV9zdGF0ZSwgbWF4X3NlcSwgcHZtdy1cXHUwMDNlcG1kKTtcXG4rXFx0XFx0dXBkYXRlX2Jsb29tX2ZpbHRlcihtbV9zdGF0ZSwgUkVBRF9PTkNFKGxydXZlYy1cXHUwMDNlbHJ1Z2VuLm1heF9zZXEpLFxcbitcXHRcXHRcXHRcXHQgICAgcHZtdy1cXHUwMDNlcG1kKTtcXG4gXFxuIFxcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcXG4gXFxuQEAgLTQ3MTEsNyArNDcxNiw3IEBAIHN0YXRpYyBib29sIGlzb2xhdGVfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2NhXFxuIFxcbiBcXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi9cXG4gXFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKVxcbi1cXHRcXHRzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgMCk7XFxuK1xcdFxcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XFxuIFxcbiBcXHRzdWNjZXNzID0gbHJ1X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7XFxuIFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghc3VjY2VzcywgZm9saW8pO1xcbkBAIC00ODA0LDkgKzQ4MDksOSBAQCBzdGF0aWMgaW50IGdldF90aWVyX2lkeChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKVxcbiBcXHQgKiBUaGlzIHZhbHVlIGlzIGNob3NlbiBiZWNhdXNlIGFueSBvdGhlciB0aWVyIHdvdWxkIGhhdmUgYXQgbGVhc3QgdHdpY2VcXG4gXFx0ICogYXMgbWFueSByZWZhdWx0cyBhcyB0aGUgZmlyc3QgdGllci5cXG4gXFx0ICovXFxuLVxcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCAwLCAyLCBcXHUwMDI2c3ApO1xcbi1cXHRmb3IgKHRpZXIgPSAxOyB0aWVyIFxcdTAwM2MgTUFYX05SX1RJRVJTOyB0aWVyKyspIHtcXG4tXFx0XFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIDMsIFxcdTAwMjZwdik7XFxuK1xcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01JTiwgMiwgXFx1MDAyNnNwKTtcXG4rXFx0Zm9yICh0aWVyID0gTFJVX1RJRVJfTUlOICsgMTsgdGllciBcXHUwMDNjPSBMUlVfVElFUl9NQVg7IHRpZXIrKykge1xcbitcXHRcXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdGllciwgdGllciwgMywgXFx1MDAyNnB2KTtcXG4gXFx0XFx0aWYgKCFwb3NpdGl2ZV9jdHJsX2VycihcXHUwMDI2c3AsIFxcdTAwMjZwdikpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuQEAgLTQ4MjcsOCArNDgzMiwxMCBAQCBzdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcXG4gXFx0ICogQ29tcGFyZSB0aGUgc3VtIG9mIGFsbCB0aWVycyBvZiBhbm9uIHdpdGggdGhhdCBvZiBmaWxlIHRvIGRldGVybWluZVxcbiBcXHQgKiB3aGljaCB0eXBlIHRvIHNjYW4uXFxuIFxcdCAqL1xcbi1cXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBNQVhfTlJfVElFUlMsIHN3YXBwaW5lc3MsIFxcdTAwMjZzcCk7XFxuLVxcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIE1BWF9OUl9USUVSUywgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCBcXHUwMDI2cHYpO1xcbitcXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCxcXG4rXFx0XFx0ICAgICAgc3dhcHBpbmVzcywgXFx1MDAyNnNwKTtcXG4rXFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NQVgsXFxuK1xcdFxcdCAgICAgIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgXFx1MDAyNnB2KTtcXG4gXFxuIFxcdHJldHVybiBwb3NpdGl2ZV9jdHJsX2VycihcXHUwMDI2c3AsIFxcdTAwMjZwdik7XFxuIH1cXG5AQCAtNDkyNyw4ICs0OTM0LDEwIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHQvKiBkb24ndCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqL1xcbi1cXHRcXHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pXFxuLVxcdFxcdFxcdHNldF9tYXNrX2JpdHMoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX2FjdGl2ZSkpO1xcbitcXHRcXHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pIHtcXG4rXFx0XFx0XFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcXG4rXFx0XFx0XFx0Zm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0bW92ZV9mb2xpb3NfdG9fbHJ1KFxcdTAwMjZsaXN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDU6NDc6NDAuNzA3NjQyMDk2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODA1NzE0NDA1MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplXCIsXG4gICAgXCJmb2xpb19taWdyYXRlX2ZsYWdzXCIsXG4gICAgXCJscnVfZ2VuX2xvb2tfYXJvdW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBpbXBsZW1lbnRhdGlvbiwgY2hhbmdpbmcgaG93IExSVSBnZW5lcmF0aW9uIGFuZCByZWZlcmVuY2UgZmxhZ3MgYXJlIHN0b3JlZCBpbiBgZm9saW8tXFx1MDAzZWZsYWdzYC4gSXQgcmVwbGFjZXMgZGlyZWN0IGJpdG1hc2sgb3BlcmF0aW9ucyB3aXRoIG5ldyBoZWxwZXIgZnVuY3Rpb25zIGFuZCBjaGFuZ2VzIGBscnVfem9uZV9zaXplYCBpbiBgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGVgIHRvIHVzZSBgYXRvbWljX2xvbmdfdGAgaW5zdGVhZCBvZiBgdW5zaWduZWQgbG9uZ2AuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMsIGluY2x1ZGluZyBwYWdlIG1pZ3JhdGlvbiwgTFJVIHNpemUgdHJhY2tpbmcsIGFuZCBwYWdlIHRhYmxlIHNjYW5uaW5nLiBUaGUgY29kZSBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWxseSBhbHRlcnMgaG93IGZvbGlvcyBhcmUgdHJhY2tlZCBhbmQgYWdlZCBpbiB0aGUgTFJVIGxpc3RzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGE5MjVkMjU0NmM1MzhkNGIzYjBkYzE3NTVjYWFjODk0OTg5ZDlhMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDA1OjQ3OjM5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuaW5kZXggZTc4YmM5OGFiMjI5Yi4uYjEzZTNmMDU2MzE5NSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuQEAgLTExMyw3ICsxMTMsNyBAQCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSB7XG4gXHQvKiBGaWVsZHMgd2hpY2ggZ2V0IHVwZGF0ZWQgb2Z0ZW4gYXQgdGhlIGVuZC4gKi9cbiBcdHN0cnVjdCBscnV2ZWNcdFx0bHJ1dmVjO1xuIFx0Q0FDSEVMSU5FX1BBRERJTkcoX3BhZDJfKTtcbi1cdHVuc2lnbmVkIGxvbmdcdFx0bHJ1X3pvbmVfc2l6ZVtNQVhfTlJfWk9ORVNdW05SX0xSVV9MSVNUU107XG4rXHRhdG9taWNfbG9uZ190XHRcdGxydV96b25lX3NpemVbTUFYX05SX1pPTkVTXVtOUl9MUlVfTElTVFNdO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXBfcmVjbGFpbV9pdGVyXHRpdGVyO1xuIFxuIFx0LypcbkBAIC04OTcsMTAgKzg5NywxNSBAQCBzdGF0aWMgaW5saW5lXG4gdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0ZW51bSBscnVfbGlzdCBscnUsIGludCB6b25lX2lkeClcbiB7XG4rXHRsb25nIHZhbDtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejtcbiBcbiBcdG16ID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7XG4tXHRyZXR1cm4gUkVBRF9PTkNFKG16LVx1MDAzZWxydV96b25lX3NpemVbem9uZV9pZHhdW2xydV0pO1xuK1x0dmFsID0gYXRvbWljX2xvbmdfcmVhZChcdTAwMjZtei1cdTAwM2VscnVfem9uZV9zaXplW3pvbmVfaWR4XVtscnVdKTtcbitcdGlmIChXQVJOX09OX09OQ0UodmFsIFx1MDAzYyAwKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXR1cm4gdmFsO1xuIH1cbiBcbiB2b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuaW5kZXggNjIxYzg2NTNkOGY3ZS4uNGJiMzkwZDk1MTZlZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcbkBAIC0xMCw2ICsxMCwxMSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzZXJmYXVsdGZkX2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xlYWZvcHMuaFx1MDAzZVxuIFxuK3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZsYWdzKVxuK3tcbitcdHJldHVybiAhdGVzdF9iaXQoUEdfc3dhcGJhY2tlZCwgZmxhZ3MpO1xuK31cbitcbiAvKipcbiAgKiBmb2xpb19pc19maWxlX2xydSAtIFNob3VsZCB0aGUgZm9saW8gYmUgb24gYSBmaWxlIExSVSBvciBhbm9uIExSVT9cbiAgKiBAZm9saW86IFRoZSBmb2xpbyB0byB0ZXN0LlxuQEAgLTI3LDcgKzMyLDcgQEBcbiAgKi9cbiBzdGF0aWMgaW5saW5lIGludCBmb2xpb19pc19maWxlX2xydShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHJldHVybiAhZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKTtcbitcdHJldHVybiBmb2xpb19mbGFnc19pc19maWxlX2xydShjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpO1xuIH1cbiBcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX191cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuQEAgLTE0MiwxMCArMTQ3LDQzIEBAIHN0YXRpYyBpbmxpbmUgaW50IGxydV90aWVyX2Zyb21fcmVmcyhpbnQgcmVmcywgYm9vbCB3b3JraW5nc2V0KVxuIFx0cmV0dXJuIHdvcmtpbmdzZXQgPyBNQVhfTlJfVElFUlMgLSAxIDogb3JkZXJfYmFzZV8yKHJlZnMpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuKy8qKlxuKyAqIGxydV9nZW5fZnJvbV9mbGFncyAtIFJldHVybiB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIGZyb20gZm9saW8gZmxhZ3MuXG4rICogQGZsYWdzOiBmb2xpbyBmbGFnc1xuKyAqXG4rICogUmV0dXJuczogQSBudW1iZXIgYmV0d2VlbiAwIGFuZCBMUlVfR0VOX01BWCwgaW5jbHVzaXZlLiBSZXR1cm5zIC0xIGlmIHRoZVxuKyAqIGZsYWdzIGluZGljYXRlIHRoZSBmb2xpbyBpcyBvZmYgdGhlIGxpc3QgKGUuZy4sIGlzb2xhdGVkKS5cbisgKi9cbitzdGF0aWMgaW5saW5lIGludCBscnVfZ2VuX2Zyb21fZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncylcbit7XG4rXHRpbnQgZ2VuID0gKChmbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRik7XG4rXG4rXHRCVUlMRF9CVUdfT04oTFJVX0dFTl9NQVNLIFx1MDAyNiBMUlVfUkVGU19NQVNLKTtcbitcdGdlbiAtPSAxO1xuK1x0Vk1fV0FSTl9PTl9PTkNFKGdlbiAhPSAtMSBcdTAwMjZcdTAwMjYgZ2VuIFx1MDAzZSBMUlVfR0VOX01BWCk7XG4rXHRyZXR1cm4gZ2VuO1xuK31cbitcbisvKipcbisgKiBscnVfZ2VuX3NldF9mbGFncyAtIFNldCB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIHRvIHNwZWNpZmllZCBmb2xpbyBmbGFncy5cbisgKiBAZmxhZ3M6IHBvaW50ZXIgdG8gdGhlIGZvbGlvIGZsYWdzXG4rICogQGdlbjogZ2VuZXJhdGlvbiBudW1iZXIsIGJldHdlZW4gMCBhbmQgTFJVX0dFTl9NQVgsIGluY2x1c2l2ZS5cbisgKi9cbitzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2dlbl9zZXRfZmxhZ3ModW5zaWduZWQgbG9uZyAqZmxhZ3MsIGludCBnZW4pXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbitcdFZNX1dBUk5fT05fT05DRShnZW4gXHUwMDNlIExSVV9HRU5fTUFYIHx8IGdlbiBcdTAwM2MgMCk7XG4rXHRCVUlMRF9CVUdfT04oKExSVV9HRU5fTUFYICsgMSkgIT0gTUFYX05SX0dFTlMpO1xuK1xuK1x0KmZsYWdzIFx1MDAyNj0gfkxSVV9HRU5fTUFTSztcbitcdCpmbGFncyB8PSAoZ2VuICsgMVVMKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRjtcbit9XG4gXG4rLyoqXG4rICogbHJ1X3JlZnNfZnJvbV9mbGFncyAtIFJldHVybiBMUlUgcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCBmcm9tIGZvbGlvIGZsYWdzLlxuKyAqIEBmbGFnczogZm9saW8gZmxhZ3NcbisgKi9cbitzdGF0aWMgaW5saW5lIGludCBscnVfcmVmc19mcm9tX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4re1xuIFx0aWYgKCEoZmxhZ3MgXHUwMDI2IEJJVChQR19yZWZlcmVuY2VkKSkpXG4gXHRcdHJldHVybiAwO1xuIFx0LypcbkBAIC0xNTUsMTggKzE5Myw0NyBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cmV0dXJuICgoZmxhZ3MgXHUwMDI2IExSVV9SRUZTX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfUkVGU19QR09GRikgKyAxO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfZ2VuKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rLyoqXG4rICogbHJ1X3JlZnNfc2V0X2ZsYWdzIC0gU2V0IHRoZSBMUlUgcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCB0byBzcGVjaWZpZWQgZm9saW8gZmxhZ3MuXG4rICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFnc1xuKyAqIEByZWZzOiByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IG51bWJlciwgYmV0d2VlbiAwIGFuZCBMUlVfUkVGU19NQVgsIGluY2x1c2l2ZS5cbisgKi9cbitzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X3JlZnNfc2V0X2ZsYWdzKHVuc2lnbmVkIGxvbmcgKmZsYWdzLCB1bnNpZ25lZCBpbnQgcmVmcylcbit7XG4rXHRWTV9XQVJOX09OX09OQ0UocmVmcyBcdTAwM2UgTFJVX1JFRlNfTUFYKTtcbitcdEJVSUxEX0JVR19PTihMUlVfUkVGU19NQVggIT0gKExSVV9SRUZTX01BU0sgXHUwMDNlXHUwMDNlIExSVV9SRUZTX1BHT0ZGKSArIDEpO1xuK1xuK1x0KmZsYWdzIFx1MDAyNj0gfkxSVV9SRUZTX0ZMQUdTO1xuK1x0aWYgKCFyZWZzKVxuK1x0XHRyZXR1cm47XG4rXHQqZmxhZ3MgfD0gKEJJVChQR19yZWZlcmVuY2VkKSB8ICgocmVmcyAtIDFVTCkgXHUwMDNjXHUwMDNjIExSVV9SRUZTX1BHT0ZGKSk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0cmV0dXJuIGxydV9yZWZzX2Zyb21fZmxhZ3MoUkVBRF9PTkNFKCpjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgcmVmcylcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuK1x0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbiBcbi1cdHJldHVybiAoKGZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4rXHRkbyB7XG4rXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncztcbitcdFx0bHJ1X3JlZnNfc2V0X2ZsYWdzKFx1MDAyNm5ld19mbGFncywgcmVmcyk7XG4rXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfZ2VuKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0cmV0dXJuIGxydV9nZW5fZnJvbV9mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9pc19hY3RpdmUoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgZ2VuKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbWF4X3NlcSA9IGxydXZlYy1cdTAwM2VscnVnZW4ubWF4X3NlcTtcbiBcbi1cdFZNX1dBUk5fT05fT05DRShnZW4gXHUwMDNlPSBNQVhfTlJfR0VOUyk7XG4rXHRWTV9XQVJOX09OX09OQ0UoZ2VuIFx1MDAzZSBMUlVfR0VOX01BWCk7XG4gXG4gXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUlOX05SX0dFTlMgKi9cbiBcdHJldHVybiBnZW4gPT0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKSB8fCBnZW4gPT0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxIC0gMSk7XG5AQCAtMjcwLDcgKzMzNyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2FkZF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7XG4gXHRmbGFncyA9IChnZW4gKyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIE1JTl9OUl9HRU5TIGFib3V0IFBHX2FjdGl2ZSAqL1xuLVx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpO1xuK1x0c2V0X21hc2tfYml0cyhmb2xpb19mbGFncyhmb2xpbywgMCksIExSVV9HRU5fTUFTSyB8IEJJVChQR19hY3RpdmUpLCBmbGFncyk7XG4gXG4gXHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIC0xLCBnZW4pO1xuIFx0LyogZm9yIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZSgpICovXG5AQCAtMjk1LDcgKzM2Miw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXG4gXHQvKiBmb3IgZm9saW9fbWlncmF0ZV9mbGFncygpICovXG4gXHRmbGFncyA9ICFyZWNsYWltaW5nIFx1MDAyNlx1MDAyNiBscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIGdlbikgPyBCSVQoUEdfYWN0aXZlKSA6IDA7XG4tXHRmbGFncyA9IHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX0dFTl9NQVNLLCBmbGFncyk7XG4rXHRmbGFncyA9IHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0ssIGZsYWdzKTtcbiBcdGdlbiA9ICgoZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbiBcbiBcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgZ2VuLCAtMSk7XG5AQCAtMzA0LDExICszNzEsMTkgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbisvKipcbisgKiBmb2xpb19taWdyYXRlX3JlZnMgLSBjb3B5IHRoZSByZWZlcmVuY2Ugc3RhdGUgdG8gYSBuZXcgZm9saW9cbisgKiBAbmV3OiB0aGUgZGVzdGluYXRpb24gZm9saW9cbisgKiBAb2xkOiB0aGUgc291cmNlIGZvbGlvXG4rICpcbisgKiBUcmFuc2ZlciB0aGUgcmVmZXJlbmNlIHN0YXRlIHRvIEBuZXcgZHVyaW5nIG1pZ3JhdGlvbjogdGhlIE1HTFJVXG4rICogcmVmcyBjb3VudCwgaW5jbHVkaW5nIFBHX3JlZmVyZW5jZWQsIG9yIGp1c3QgUEdfcmVmZXJlbmNlZCBmb3IgdGhlXG4rICogYWN0aXZlL2luYWN0aXZlIExSVS5cbisgKi9cbiBzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcbiB7XG4tXHR1bnNpZ25lZCBsb25nIHJlZnMgPSBSRUFEX09OQ0Uob2xkLVx1MDAzZWZsYWdzLmYpIFx1MDAyNiBMUlVfUkVGU19NQVNLO1xuLVxuLVx0c2V0X21hc2tfYml0cyhcdTAwMjZuZXctXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgcmVmcyk7XG4rXHRCVUlMRF9CVUdfT04oTFJVX1JFRlNfTUFTSyBcdTAwMjYgQklUKFBHX3JlZmVyZW5jZWQpKTtcbitcdGZvbGlvX3NldF9scnVfcmVmcyhuZXcsIGZvbGlvX2xydV9yZWZzKG9sZCkpO1xuIH1cbiAjZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cbiBcbkBAIC0zMzksNyArNDE0LDggQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcbiB7XG4tXG4rXHRpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKG9sZCkpXG4rXHRcdGZvbGlvX3NldF9yZWZlcmVuY2VkKG5ldyk7XG4gfVxuICNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5pbmRleCA5NGY5YzNmZjU0MTYwLi5kMGI1YzYyMTdkMjU3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuQEAgLTQ5MiwxMSArNDkyLDE1IEBAIGVudW0gbHJ1dmVjX2ZsYWdzIHtcbiAgKiBmb2xpby1cdTAwM2VmbGFncywgbWFza2VkIGJ5IExSVV9SRUZTX01BU0suXG4gICovXG4gI2RlZmluZSBNQVhfTlJfVElFUlNcdFx0NFVcbisjZGVmaW5lIExSVV9USUVSX01JTlx0XHQwVVxuKyNkZWZpbmUgTFJVX1RJRVJfTUFYXHRcdChNQVhfTlJfVElFUlMgLSAxKVxuIFxuICNpZm5kZWYgX19HRU5FUkFUSU5HX0JPVU5EU19IXG4gXG4gI2RlZmluZSBMUlVfR0VOX01BU0tcdFx0KChCSVQoTFJVX0dFTl9XSURUSCkgLSAxKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRilcbisjZGVmaW5lIExSVV9HRU5fTUFYXHRcdChCSVQoTFJVX0dFTl9XSURUSCAtIDEpIC0gMSlcbiAjZGVmaW5lIExSVV9SRUZTX01BU0tcdFx0KChCSVQoTFJVX1JFRlNfV0lEVEgpIC0gMSkgXHUwMDNjXHUwMDNjIExSVV9SRUZTX1BHT0ZGKVxuKyNkZWZpbmUgTFJVX1JFRlNfTUFYXHRcdEJJVChMUlVfUkVGU19XSURUSClcbiBcbiAvKlxuICAqIEZvciBmb2xpb3MgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzLFxuZGlmZiAtLWdpdCBhL21tL2ZvbGlvLmMgYi9tbS9mb2xpby5jXG5pbmRleCA1OWM0NzcxMjBiOWE4Li4wYWRmZTRmNWVmNzJmIDEwMDY0NFxuLS0tIGEvbW0vZm9saW8uY1xuKysrIGIvbW0vZm9saW8uY1xuQEAgLTM1MywyNiArMzUzLDI4IEBAIHN0YXRpYyB2b2lkIF9fbHJ1X2NhY2hlX2FjdGl2YXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXG4gc3RhdGljIHZvaWQgbHJ1X2dlbl9pbmNfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4rXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuK1x0aW50IHJlZnM7XG4gXG4gXHRpZiAoZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbykpXG4gXHRcdHJldHVybjtcbiBcbiBcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqL1xuLVx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKSB7XG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcbitcdGlmICghZm9saW9fbHJ1X3JlZnMoZm9saW8pKSB7XG4rXHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbiBcdGRvIHtcbi1cdFx0aWYgKChvbGRfZmxhZ3MgXHUwMDI2IExSVV9SRUZTX01BU0spID09IExSVV9SRUZTX01BU0spIHtcbitcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuK1x0XHRyZWZzID0gbHJ1X3JlZnNfZnJvbV9mbGFncyhvbGRfZmxhZ3MpO1xuK1x0XHRpZiAocmVmcyA9PSBMUlVfUkVGU19NQVgpIHtcbiBcdFx0XHRpZiAoIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpXG4gXHRcdFx0XHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XG4gXHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4tXG4tXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncyArIEJJVChMUlVfUkVGU19QR09GRik7XG4tXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbitcdFx0bHJ1X3JlZnNfc2V0X2ZsYWdzKFx1MDAyNm5ld19mbGFncywgcmVmcyArIDEpO1xuK1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5AQCAtMzg0LDcgKzM4Niw4IEBAIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0aWYgKGdlbiBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTIHwgQklUKFBHX3dvcmtpbmdzZXQpLCAwKTtcbitcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4rXHRmb2xpb19jbGVhcl93b3JraW5nc2V0KGZvbGlvKTtcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdHNlcSA9IFJFQURfT05DRShmb2xpb19scnV2ZWMoZm9saW8pLVx1MDAzZWxydWdlbi5taW5fc2VxW3R5cGVdKTtcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDFkMzMzOTUyMDgwOWYuLjlkMGVlM2QzYmRhN2MgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTE1MjksMjggKzE1MjksMTIgQEAgdm9pZCBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LFxuIFx0XHRcdFx0aW50IHppZCwgbG9uZyBucl9wYWdlcylcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XG4tXHR1bnNpZ25lZCBsb25nICpscnVfc2l6ZTtcbi1cdGxvbmcgc2l6ZTtcbiBcbiBcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG4gXHRcdHJldHVybjtcbiBcbiBcdG16ID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7XG4tXHRscnVfc2l6ZSA9IFx1MDAyNm16LVx1MDAzZWxydV96b25lX3NpemVbemlkXVtscnVdO1xuLVxuLVx0aWYgKG5yX3BhZ2VzIFx1MDAzYyAwKVxuLVx0XHQqbHJ1X3NpemUgKz0gbnJfcGFnZXM7XG4tXG4tXHRzaXplID0gKmxydV9zaXplO1xuLVx0aWYgKFdBUk5fT05DRShzaXplIFx1MDAzYyAwLFxuLVx0XHRcIiVzKCVwLCAlZCwgJWxkKTogbHJ1X3NpemUgJWxkXFxuXCIsXG4tXHRcdF9fZnVuY19fLCBscnV2ZWMsIGxydSwgbnJfcGFnZXMsIHNpemUpKSB7XG4tXHRcdFZNX0JVR19PTigxKTtcbi1cdFx0KmxydV9zaXplID0gMDtcbi1cdH1cbi1cbi1cdGlmIChucl9wYWdlcyBcdTAwM2UgMClcbi1cdFx0KmxydV9zaXplICs9IG5yX3BhZ2VzO1xuK1x0YXRvbWljX2xvbmdfYWRkKG5yX3BhZ2VzLCBcdTAwMjZtei1cdTAwM2VscnVfem9uZV9zaXplW3ppZF1bbHJ1XSk7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuY1xuaW5kZXggMTViNDU4MzJiY2ZhNy4uODIzMDczMzI3MTFmNCAxMDA2NDRcbi0tLSBhL21tL21pZ3JhdGUuY1xuKysrIGIvbW0vbWlncmF0ZS5jXG5AQCAtNzc2LDggKzc3Niw2IEBAIHZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdGludCBjcHVwaWQ7XG4gXG4tXHRpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSlcbi1cdFx0Zm9saW9fc2V0X3JlZmVyZW5jZWQobmV3Zm9saW8pO1xuIFx0aWYgKGZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKVxuIFx0XHRmb2xpb19tYXJrX3VwdG9kYXRlKG5ld2ZvbGlvKTtcbiBcdGlmIChmb2xpb190ZXN0X2NsZWFyX2FjdGl2ZShmb2xpbykpIHtcbkBAIC04MDcsNyArODA1LDkgQEAgdm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRpZiAoZm9saW9fdGVzdF9pZGxlKGZvbGlvKSlcbiBcdFx0Zm9saW9fc2V0X2lkbGUobmV3Zm9saW8pO1xuIFxuK1x0LyogQ29weSB0aGUgcmVmZXJlbmNlIHN0YXRlLCBpbmNsdWRpbmcgUEdfcmVmZXJlbmNlZCAqL1xuIFx0Zm9saW9fbWlncmF0ZV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7XG4rXG4gXHQvKlxuIFx0ICogQ29weSBOVU1BIGluZm9ybWF0aW9uIHRvIHRoZSBuZXcgcGFnZSwgdG8gcHJldmVudCBvdmVyLWVhZ2VyXG4gXHQgKiBmdXR1cmUgbWlncmF0aW9ucyBvZiB0aGlzIHNhbWUgcGFnZS5cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCBjMTQwNGE1OTUyM2Q2Li43ZTNhZTBjNmNiYTNiIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtODQzLDE5ICs4NDMsMjIgQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuIFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSkge1xuIFx0XHQvKiBBY3RpdmF0ZSBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciBmaXJzdCB1c2FnZS4gKi9cbiBcdFx0aWYgKGlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkge1xuLVx0XHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7XG4rXHRcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbitcdFx0XHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHRcdH1cbiBcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuK1x0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXG4gXHQvKiBQcm9tb3RlIG9uIHNlY29uZCBhY2Nlc3MgKi9cbi1cdGlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgXHUwMDNlIDEpXG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7XG4tXHRlbHNlXG4rXHRpZiAoZm9saW9fbHJ1X3JlZnMoZm9saW8pIFx1MDAzZSAxKSB7XG4rXHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4rXHRcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcbitcdH0gZWxzZSB7XG4gXHRcdGZvbGlvX21hcmtfYWNjZXNzZWQoZm9saW8pO1xuK1x0fVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuICNlbHNlXG5AQCAtMzE5NSw4ICszMTk4LDggQEAgc3RydWN0IGN0cmxfcG9zIHtcbiBcdGludCBnYWluO1xuIH07XG4gXG4tc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllciwgaW50IGdhaW4sXG4tXHRcdFx0ICBzdHJ1Y3QgY3RybF9wb3MgKnBvcylcbitzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyX21pbixcbitcdFx0XHQgIGludCB0aWVyX21heCwgaW50IGdhaW4sIHN0cnVjdCBjdHJsX3BvcyAqcG9zKVxuIHtcbiBcdGludCBpO1xuIFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5AQCAtMzIwNSw3ICszMjA4LDcgQEAgc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllciwgaW50IGdhaW4sXG4gXHRwb3MtXHUwMDNlZ2FpbiA9IGdhaW47XG4gXHRwb3MtXHUwMDNlcmVmYXVsdGVkID0gcG9zLVx1MDAzZXRvdGFsID0gMDtcbiBcbi1cdGZvciAoaSA9IHRpZXIgJSBNQVhfTlJfVElFUlM7IGkgXHUwMDNjPSBtaW4odGllciwgTUFYX05SX1RJRVJTIC0gMSk7IGkrKykge1xuK1x0Zm9yIChpID0gdGllcl9taW47IGkgXHUwMDNjPSB0aWVyX21heDsgaSsrKSB7XG4gXHRcdHBvcy1cdTAwM2VyZWZhdWx0ZWQgKz0gbHJ1Z2VuLVx1MDAzZWF2Z19yZWZhdWx0ZWRbdHlwZV1baV0gK1xuIFx0XHRcdFx0ICBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNmxydWdlbi1cdTAwM2VyZWZhdWx0ZWRbaGlzdF1bdHlwZV1baV0pO1xuIFx0XHRwb3MtXHUwMDNldG90YWwgKz0gbHJ1Z2VuLVx1MDAzZWF2Z190b3RhbFt0eXBlXVtpXSArXG5AQCAtMzI2NiwxMSArMzI2OSwxMSBAQCBzdGF0aWMgYm9vbCBwb3NpdGl2ZV9jdHJsX2VycihzdHJ1Y3QgY3RybF9wb3MgKnNwLCBzdHJ1Y3QgY3RybF9wb3MgKnB2KVxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gXG4gLyogcHJvbW90ZSBwYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzICovXG4tc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4rc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBpbnQgKmlzX2ZpbGUsXG4rXHRcdFx0ICAgIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbi1cbi1cdFZNX1dBUk5fT05fT05DRShnZW4gXHUwMDNlPSBNQVhfTlJfR0VOUyk7XG4rXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuK1x0aW50IG9sZF9nZW47XG4gXG4gXHQvKlxuIFx0ICogU2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTLCBhbmQgYWN0aXZhdGUgZmlsZS1iYWNrZWRcbkBAIC0zMjc5LDIwICszMjgyLDI1IEBAIHN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hXG4gXHQgKi9cbiBcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHQgICAgIWlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkge1xuLVx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XG4rXHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XG4gXHRcdHJldHVybiAtMTtcbiBcdH1cbiBcbiBcdGRvIHtcbitcdFx0b2xkX2dlbiA9IGxydV9nZW5fZnJvbV9mbGFncyhvbGRfZmxhZ3MpO1xuK1x0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XG4rXG4gXHRcdC8qIGxydV9nZW5fZGVsX2ZvbGlvKCkgaGFzIGlzb2xhdGVkIHRoaXMgcGFnZT8gKi9cbi1cdFx0aWYgKCEob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spKVxuLVx0XHRcdHJldHVybiAtMTtcbitcdFx0aWYgKG9sZF9nZW4gXHUwMDNjIDApXG4rXHRcdFx0YnJlYWs7XG4gXG4tXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncyBcdTAwMjYgfihMUlVfR0VOX01BU0sgfCBMUlVfUkVGU19GTEFHUyk7XG4tXHRcdG5ld19mbGFncyB8PSAoKGdlbiArIDFVTCkgXHUwMDNjXHUwMDNjIExSVV9HRU5fUEdPRkYpIHwgQklUKFBHX3dvcmtpbmdzZXQpO1xuLVx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4rXHRcdGxydV9nZW5fc2V0X2ZsYWdzKFx1MDAyNm5ld19mbGFncywgbmV3X2dlbik7XG4rXHRcdGxydV9yZWZzX3NldF9mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIDApO1xuK1x0XHRuZXdfZmxhZ3MgfD0gQklUKFBHX3dvcmtpbmdzZXQpO1xuK1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiBcbi1cdHJldHVybiAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuK1x0KmlzX2ZpbGUgPSBmb2xpb19mbGFnc19pc19maWxlX2xydShcdTAwMjZvbGRfZmxhZ3MpO1xuK1x0cmV0dXJuIG9sZF9nZW47XG4gfVxuIFxuIC8qIHByb3RlY3QgcGFnZXMgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzICovXG5AQCAtMzMwMCwyMiArMzMwOCwyNSBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xuIFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG4tXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuLVx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbi1cbi1cdFZNX1dBUk5fT05fT05DRV9GT0xJTyghKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSwgZm9saW8pO1xuK1x0aW50IG5ld19nZW4sIG9sZF9nZW4sIG1pbl9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKTtcbitcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4gXG4gXHRkbyB7XG4tXHRcdG5ld19nZW4gPSAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuLVx0XHQvKiBmb2xpb191cGRhdGVfZ2VuKCkgaGFzIHByb21vdGVkIHRoaXMgcGFnZT8gKi9cbi1cdFx0aWYgKG5ld19nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBuZXdfZ2VuICE9IG9sZF9nZW4pXG4tXHRcdFx0cmV0dXJuIG5ld19nZW47XG4rXHRcdG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fZmxhZ3Mob2xkX2ZsYWdzKTtcbitcdFx0LyogVGhpcyBoZWxwZXIgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBmb3Igb2ZmLWxpc3QgZm9saW9zICovXG4rXHRcdFZNX1dBUk5fT05fT05DRShvbGRfZ2VuIFx1MDAzYyAwKTtcbitcdFx0aWYgKG9sZF9nZW4gXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIG1pbl9nZW47XG4gXG4tXHRcdG5ld19nZW4gPSAob2xkX2dlbiArIDEpICUgTUFYX05SX0dFTlM7XG4rXHRcdC8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqL1xuK1x0XHRpZiAob2xkX2dlbiAhPSBtaW5fZ2VuKVxuK1x0XHRcdHJldHVybiBvbGRfZ2VuO1xuIFxuLVx0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgXHUwMDI2IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpO1xuLVx0XHRuZXdfZmxhZ3MgfD0gKG5ld19nZW4gKyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuLVx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4rXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncztcbitcdFx0bmV3X2dlbiA9IChtaW5fZ2VuICsgMSkgJSBNQVhfTlJfR0VOUztcbitcdFx0bHJ1X2dlbl9zZXRfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCBuZXdfZ2VuKTtcbitcdFx0bHJ1X3JlZnNfc2V0X2ZsYWdzKFx1MDAyNm5ld19mbGFncywgMCk7XG4rXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuIFxuIFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcbiBcbkBAIC0zMzIzLDkgKzMzMzQsOCBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIH1cbiBcbiBzdGF0aWMgdm9pZCB1cGRhdGVfYmF0Y2hfc2l6ZShzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLVx0XHRcdCAgICAgIGludCBvbGRfZ2VuLCBpbnQgbmV3X2dlbilcbitcdFx0XHQgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4sIGludCB0eXBlKVxuIHtcbi1cdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xuIFx0aW50IHpvbmUgPSBmb2xpb196b25lbnVtKGZvbGlvKTtcbiBcdGludCBkZWx0YSA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiBcbkBAIC0zNTEyLDIyICszNTIyLDI0IEBAIHN0YXRpYyBib29sIHN1aXRhYmxlX3RvX3NjYW4oaW50IHRvdGFsLCBpbnQgeW91bmcpXG4gfVxuIFxuIHN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgYm9vbCBkaXJ0eSlcbitcdFx0XHQgICAgICBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgZGlydHkpXG4ge1xuLVx0aW50IG9sZF9nZW47XG4rXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiwgZmlsZTtcbiBcbiBcdGlmICghZm9saW8pXG4gXHRcdHJldHVybjtcbiBcbitcdG5ld19nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKFJFQURfT05DRShscnV2ZWMtXHUwMDNlbHJ1Z2VuLm1heF9zZXEpKTtcbitcbiBcdGlmIChkaXJ0eSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIFx1MDAyNlx1MDAyNlxuIFx0ICAgICEoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAgICFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpKVxuIFx0XHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbiBcbiBcdGlmICh3YWxrKSB7XG4tXHRcdG9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpO1xuK1x0XHRvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgXHUwMDI2ZmlsZSwgXHUwMDI2dm1hLVx1MDAzZWZsYWdzKTtcbiBcdFx0aWYgKG9sZF9nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXG4tXHRcdFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xuK1x0XHRcdHVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuLCBmaWxlKTtcbiBcdH0gZWxzZSBpZiAobHJ1X2dlbl9zZXRfcmVmcyhmb2xpbywgXHUwMDI2dm1hLVx1MDAzZWZsYWdzKSkge1xuIFx0XHRvbGRfZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7XG4gXHRcdGlmIChvbGRfZ2VuIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgb2xkX2dlbiAhPSBuZXdfZ2VuKVxuQEAgLTM1NDksOCArMzU2MSw2IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXHUwMDNlcHJpdmF0ZTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVx1MDAzZWxydXZlYyk7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdERFRklORV9NQVhfU0VRKHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xuIFx0dW5zaWduZWQgaW50IG5yO1xuIFx0cG1kX3QgcG1kdmFsO1xuIFxuQEAgLTM2MDEsNyArMzYxMSw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAobGFzdCAhPSBmb2xpbykge1xuLVx0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLVx1MDAzZXZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC0zNjE0LDcgKzM2MjQsNyBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0d2Fsay1cdTAwM2VtbV9zdGF0c1tNTV9MRUFGX1lPVU5HXSArPSBucjtcbiBcdH1cbiBcbi1cdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCB3YWxrLVx1MDAzZWxydXZlYywgbGFzdCwgZGlydHkpO1xuIFx0bGFzdCA9IE5VTEw7XG4gXG4gXHRpZiAoaSBcdTAwM2MgUFRSU19QRVJfUFRFIFx1MDAyNlx1MDAyNiBnZXRfbmV4dF92bWEoUE1EX01BU0ssIFBBR0VfU0laRSwgYXJncywgXHUwMDI2c3RhcnQsIFx1MDAyNmVuZCkpXG5AQCAtMzYzNyw4ICszNjQ3LDYgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcbiBcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVx1MDAzZXByaXZhdGU7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay1cdTAwM2VscnV2ZWMpO1xuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdCh3YWxrLVx1MDAzZWxydXZlYyk7XG4tXHRERUZJTkVfTUFYX1NFUSh3YWxrLVx1MDAzZWxydXZlYyk7XG4tXHRpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcbiBcbiBcdFZNX1dBUk5fT05fT05DRShwdWRfbGVhZigqcHVkKSk7XG4gXG5AQCAtMzY5Miw3ICszNzAwLDcgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcbiBcdFx0XHRnb3RvIG5leHQ7XG4gXG4gXHRcdGlmIChsYXN0ICE9IGZvbGlvKSB7XG4tXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIHdhbGstXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXG4gXHRcdFx0bGFzdCA9IGZvbGlvO1xuIFx0XHRcdGRpcnR5ID0gZmFsc2U7XG5AQCAtMzcwNiw3ICszNzE0LDcgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcbiBcdFx0aSA9IGkgXHUwMDNlIE1JTl9MUlVfQkFUQ0ggPyAwIDogZmluZF9uZXh0X2JpdChiaXRtYXAsIE1JTl9MUlVfQkFUQ0gsIGkpICsgMTtcbiBcdH0gd2hpbGUgKGkgXHUwMDNjPSBNSU5fTFJVX0JBVENIKTtcbiBcbi1cdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4rXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIHdhbGstXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXG4gXHRsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTtcbiBcdHNwaW5fdW5sb2NrKHB0bCk7XG5AQCAtNDI3MCw4ICs0Mjc4LDYgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGZvbGlvX3BnZGF0KGZvbGlvKTtcbiBcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcbiBcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZTtcbi1cdHVuc2lnbmVkIGxvbmcgbWF4X3NlcTtcbi1cdGludCBnZW47XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKHB2bXctXHUwMDNlcHRsKTtcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2xydShmb2xpbyksIGZvbGlvKTtcbkBAIC00MzA4LDggKzQzMTQsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG4gXG4gXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xuIFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcbi1cdG1heF9zZXEgPSBSRUFEX09OQ0UoKGxydXZlYyktXHUwMDNlbHJ1Z2VuLm1heF9zZXEpO1xuLVx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcbiBcdG1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XG4gXG4gXHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xuQEAgLTQzNDEsNyArNDM0NSw3IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKGxhc3QgIT0gZm9saW8pIHtcbi1cdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXG4gXHRcdFx0bGFzdCA9IGZvbGlvO1xuIFx0XHRcdGRpcnR5ID0gZmFsc2U7XG5AQCAtNDM1MywxMyArNDM1NywxNCBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG4gXHRcdHlvdW5nICs9IG5yO1xuIFx0fVxuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXG4gXHRsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTtcbiBcbiBcdC8qIGZlZWRiYWNrIGZyb20gcm1hcCB3YWxrZXJzIHRvIHBhZ2UgdGFibGUgd2Fsa2VycyAqL1xuIFx0aWYgKG1tX3N0YXRlIFx1MDAyNlx1MDAyNiBzdWl0YWJsZV90b19zY2FuKGksIHlvdW5nKSlcbi1cdFx0dXBkYXRlX2Jsb29tX2ZpbHRlcihtbV9zdGF0ZSwgbWF4X3NlcSwgcHZtdy1cdTAwM2VwbWQpO1xuK1x0XHR1cGRhdGVfYmxvb21fZmlsdGVyKG1tX3N0YXRlLCBSRUFEX09OQ0UobHJ1dmVjLVx1MDAzZWxydWdlbi5tYXhfc2VxKSxcbitcdFx0XHRcdCAgICBwdm13LVx1MDAzZXBtZCk7XG4gXG4gXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4gXG5AQCAtNDcxMSw3ICs0NzE2LDcgQEAgc3RhdGljIGJvb2wgaXNvbGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2FcbiBcbiBcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqL1xuIFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKVxuLVx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIDApO1xuK1x0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuIFxuIFx0c3VjY2VzcyA9IGxydV9nZW5fZGVsX2ZvbGlvKGxydXZlYywgZm9saW8sIHRydWUpO1xuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFzdWNjZXNzLCBmb2xpbyk7XG5AQCAtNDgwNCw5ICs0ODA5LDkgQEAgc3RhdGljIGludCBnZXRfdGllcl9pZHgoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSlcbiBcdCAqIFRoaXMgdmFsdWUgaXMgY2hvc2VuIGJlY2F1c2UgYW55IG90aGVyIHRpZXIgd291bGQgaGF2ZSBhdCBsZWFzdCB0d2ljZVxuIFx0ICogYXMgbWFueSByZWZhdWx0cyBhcyB0aGUgZmlyc3QgdGllci5cbiBcdCAqL1xuLVx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIDAsIDIsIFx1MDAyNnNwKTtcbi1cdGZvciAodGllciA9IDE7IHRpZXIgXHUwMDNjIE1BWF9OUl9USUVSUzsgdGllcisrKSB7XG4tXHRcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0aWVyLCAzLCBcdTAwMjZwdik7XG4rXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NSU4sIDIsIFx1MDAyNnNwKTtcbitcdGZvciAodGllciA9IExSVV9USUVSX01JTiArIDE7IHRpZXIgXHUwMDNjPSBMUlVfVElFUl9NQVg7IHRpZXIrKykge1xuK1x0XHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdGllciwgdGllciwgMywgXHUwMDI2cHYpO1xuIFx0XHRpZiAoIXBvc2l0aXZlX2N0cmxfZXJyKFx1MDAyNnNwLCBcdTAwMjZwdikpXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG5AQCAtNDgyNyw4ICs0ODMyLDEwIEBAIHN0YXRpYyBpbnQgZ2V0X3R5cGVfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxuIFx0ICogQ29tcGFyZSB0aGUgc3VtIG9mIGFsbCB0aWVycyBvZiBhbm9uIHdpdGggdGhhdCBvZiBmaWxlIHRvIGRldGVybWluZVxuIFx0ICogd2hpY2ggdHlwZSB0byBzY2FuLlxuIFx0ICovXG4tXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBNQVhfTlJfVElFUlMsIHN3YXBwaW5lc3MsIFx1MDAyNnNwKTtcbi1cdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIE1BWF9OUl9USUVSUywgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCBcdTAwMjZwdik7XG4rXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCxcbitcdFx0ICAgICAgc3dhcHBpbmVzcywgXHUwMDI2c3ApO1xuK1x0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NQVgsXG4rXHRcdCAgICAgIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgXHUwMDI2cHYpO1xuIFxuIFx0cmV0dXJuIHBvc2l0aXZlX2N0cmxfZXJyKFx1MDAyNnNwLCBcdTAwMjZwdik7XG4gfVxuQEAgLTQ5MjcsOCArNDkzNCwxMCBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0fVxuIFxuIFx0XHQvKiBkb24ndCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqL1xuLVx0XHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pXG4tXHRcdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX2FjdGl2ZSkpO1xuK1x0XHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pIHtcbitcdFx0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuK1x0XHRcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xuK1x0XHR9XG4gXHR9XG4gXG4gXHRtb3ZlX2ZvbGlvc190b19scnUoXHUwMDI2bGlzdCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNTo0Nzo0MC43MDc2NDQ3OTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDEzNzU1NDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTUdMUlUgUGF0Y2g6IEEgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0J3MgdHdlYWtpbmcgdGhlIE11bHRpLUdlbiBMUlUgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBMaW51eCBrZXJuZWwsIGFuZCB0aGUgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBzaWduaWZpY2FudC4gSXQncyBtb2RpZnlpbmcgaG93IHRoZSBMUlUgZ2VuZXJhdGlvbiBhbmQgcmVmZXJlbmNlIGZsYWdzIGFyZSBtYW5hZ2VkLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZm9saW8tXHUwMDNlZmxhZ3NgIHN0cnVjdHVyZS4gUmF0aGVyIHRoYW4gZGlyZWN0IGJpdG1hc2sgbWFuaXB1bGF0aW9ucywgaXQncyByZXBsYWNpbmcgdGhlbSB3aXRoIGhlbHBlciBmdW5jdGlvbnMsIGxpa2UgYGxydV9nZW5fZnJvbV9mbGFnc2AsIGFuZCBzbyBvbi4gVGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBtb3ZlLCBwb3RlbnRpYWxseSBpbXByb3ZpbmcgcmVhZGFiaWxpdHkgYW5kIG1haW50YWluYWJpbGl0eS5cblxuVGhlIGNoYW5nZSBmcm9tIGB1bnNpZ25lZCBsb25nYCB0byBgYXRvbWljX2xvbmdfdGAgZm9yIGBscnVfem9uZV9zaXplYCBpbiBgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGVgIGltbWVkaWF0ZWx5IGNhdGNoZXMgbXkgZXllLiBUaGlzIHN1Z2dlc3RzIHRoZXJlIGFyZSBsaWtlbHkgY29uY3VycmVuY3kgaW1wbGljYXRpb25zIHRoYXQgbmVlZCBjYXJlZnVsIGV4YW1pbmF0aW9uLCBhbmQgdGhhdCBjb3VsZCBpbnRyb2R1Y2Ugc3VidGxlIGJ1Z3MgaWYgdGhlIGF0b21pYyBvcGVyYXRpb25zIGFyZW4ndCBoYW5kbGVkIGNvcnJlY3RseS5cblxuRnVuY3Rpb25hbGx5LCB0aGlzIGltcGFjdHMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyDigJMgYm90aCB0aGUgTUdMUlUgaXRzZWxmICphbmQqIHRoZSBtZW1jZyBMUlUgc2l6ZSB0cmFja2luZywgc28gaXQncyBhIGhpZ2gtaW1wYWN0IGFyZWEuIFRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nLiBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgc3BlY2lmaWMgZnVuY3Rpb25zIHRvIHRhcmdldC5cblxuQSBxdWljayBzY2FuIG9mIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgbGlzdCByZXZlYWxzIHRoZSBmb2xsb3dpbmc6IGBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplYCwgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCwgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgLCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAsIGB3YWxrX3B0ZV9yYW5nZWAsIGB3YWxrX3BtZF9yYW5nZV9sb2NrZWRgLCBgZXZpY3RfZm9saW9zYCwgYGdldF90aWVyX2lkeGAsIGBnZXRfdHlwZV90b19zY2FuYCwgYGZvbGlvX2luY19nZW5gLCBgZm9saW9fdXBkYXRlX2dlbmAsIGBscnVfZ2VuX2luY19yZWZzYCwgYW5kIGBscnVfZ2VuX2NsZWFyX3JlZnNgLiBOb3csIGxldCdzIGZvY3VzLlxuXG5HaXZlbiB0aGUgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBhbmQgdGhlaXIgaW1wYWN0IG9uIG1lbWNnLCBJJ2xsIHByaW9yaXRpemUgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCBhbmQgYG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemVgLiBPZiBjb3Vyc2UsIEknbGwgYWxzbyBjb25jZW50cmF0ZSBvbiB0aG9zZSBzcGVjaWZpYyB0byBNR0xSVSBsaWtlIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBhbmQgYGV2aWN0X2ZvbGlvc2AuIFRoZXNlIGFyZSBsaWtlbHkgdGhlIG1vc3QgY3JpdGljYWwgcGFydHMgb2YgdGhlIGNvZGUuXG5cbkJlZm9yZSBJIGdvIGZ1cnRoZXIgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnLiBJJ2xsIG1ha2Ugc3VyZSB0aGF0IGBDT05GSUdfTFJVX0dFTmAgaXMgZW5hYmxlZCBiZWNhdXNlIG90aGVyd2lzZSwgdGhpcyBwYXRjaCB3b24ndCBldmVuIGJlIHJlbGV2YW50LCBzbyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIEdvdHRhIG1ha2Ugc3VyZSB0aGUgZm91bmRhdGlvbiBpcyBzb3VuZCBiZWZvcmUgZGl2aW5nIGludG8gdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjQ5LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDU6NDc6NDguMTIxNDA0Mzc4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDgwODA5ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIExSVV9HRU5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMzkzPWNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1BcXG4tLVxcbm1tL0tjb25maWctMTQwMy0jIG11bHRpLWdlbiBMUlUge1xcbm1tL0tjb25maWc6MTQwNDpjb25maWcgTFJVX0dFTlxcbm1tL0tjb25maWctMTQwNS1cXHRib29sIFxcXCJNdWx0aS1HZW4gTFJVXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDEyLVxcbm1tL0tjb25maWc6MTQxMzpjb25maWcgTFJVX0dFTl9FTkFCTEVEXFxubW0vS2NvbmZpZy0xNDE0LVxcdGJvb2wgXFxcIkVuYWJsZSBieSBkZWZhdWx0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDE4LVxcbm1tL0tjb25maWc6MTQxOTpjb25maWcgTFJVX0dFTl9TVEFUU1xcbm1tL0tjb25maWctMTQyMC1cXHRib29sIFxcXCJGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MjctXFxubW0vS2NvbmZpZzoxNDI4OmNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxcbm1tL0tjb25maWctMTQyOS1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA1OjQ3OjQ5Ljg2OTQ5MDU2NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTExMDEzMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uc2lkZXJpbmcgTFJVIEdlbmVyYXRpb24gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYExSVV9HRU5gIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNYWtlcyBzZW5zZSwgdGhhdCdzIHRoZSBjb3JlLiBUbyBtYWtlIHRoaW5ncyBlYXN5LCB3ZSBzaG91bGQgZW5hYmxlIGl0IGJ5IGRlZmF1bHQgYnkgYWRkaW5nIGBMUlVfR0VOX0VOQUJMRURgLCBvciBnaXZlIHRoZSB1c2VyIGNvbnRyb2wgd2l0aCBhIHN5c2ZzIGVudHJ5LiBJIHRoaW5rIHdlIHNob3VsZCBpbmNsdWRlIGJvdGggb3B0aW9ucyBmb3IgbWF4aW11bSBmbGV4aWJpbGl0eS4gU28sIEknbGwgYWRkIGBMUlVfR0VOYCBhbmQgYExSVV9HRU5fRU5BQkxFRGAgdG8gdGhlIGNvbmZpZy5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMuIEkgc2hvdWxkIGNoZWNrIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgYmVpbmcgbW9kaWZpZWQuXG5cbkhtbSwgbGV0J3Mgc2VlLCB3aGF0IGFib3V0IGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWA/IEkgd29uZGVyIGlmIHRoYXQncyBhbiBleHBvcnRlZCBmdW5jdGlvbiwgb3IgaWYgaXQncyBzdGF0aWM/IEknbGwgcXVpY2tseSB1c2UgZ3JlcCB0byBmaW5kIGFsbCBpbnN0YW5jZXMgb2YgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCB0byBnZXQgYSBiZXR0ZXIgb3ZlcnZpZXcgb2YgaXRzIHVzYWdlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gd2hlcmUgdGhpcyBtb2RpZmljYXRpb24gaXMgaGFwcGVuaW5nIHdpdGhpbiB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4OTMsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDU6NDc6NTMuNTYwNTk0NjQxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTEwNjYxMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9ODg2PXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC04OTItXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6ODkzOnZvaWQgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIGxydV9saXN0IGxydSxcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC04OTQtXFx0XFx0aW50IHppZCwgbG9uZyBucl9wYWdlcyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTUyPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB1cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC01Ny0jaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDo1ODpcXHRtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShscnV2ZWMsIGxydSwgemlkLCBucl9wYWdlcyk7XFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC01OS0jZW5kaWZcXG4tLVxcbm1tL2ZvbGlvLmM9MTEyMz1zdGF0aWMgdm9pZCBscnV2ZWNfcmVwYXJlbnRfbHJ1KHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYyxcXG4tLVxcbm1tL2ZvbGlvLmMtMTEzNS1cXG5tbS9mb2xpby5jOjExMzY6XFx0XFx0bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUocGFyZW50X2xydXZlYywgbHJ1LCB6aWQsIHNpemUpO1xcbm1tL2ZvbGlvLmMtMTEzNy1cXHR9XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTUwMT1zdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnFzYXZlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTUxOC0vKipcXG5tbS9tZW1jb250cm9sLmM6MTUxOTogKiBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZSAtIGFjY291bnQgZm9yIGFkZGluZyBvciByZW1vdmluZyBhbiBscnUgcGFnZVxcbm1tL21lbWNvbnRyb2wuYy0xNTIwLSAqIEBscnV2ZWM6IG1lbV9jZ3JvdXAgcGVyIHpvbmUgbHJ1IHZlY3Rvclxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE1MjctICovXFxubW0vbWVtY29udHJvbC5jOjE1Mjg6dm9pZCBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LFxcbm1tL21lbWNvbnRyb2wuYy0xNTI5LVxcdFxcdFxcdFxcdGludCB6aWQsIGxvbmcgbnJfcGFnZXMpXFxuLS1cXG5tbS92bXNjYW4uYz0xNTkyPXVuc2lnbmVkIGludCByZWNsYWltX2NsZWFuX3BhZ2VzX2Zyb21fbGlzdChzdHJ1Y3Qgem9uZSAqem9uZSxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTE2NDQtICogVXBkYXRlIExSVSBzaXplcyBhZnRlciBpc29sYXRpbmcgcGFnZXMuIFRoZSBMUlUgc2l6ZSB1cGRhdGVzIG11c3RcXG5tbS92bXNjYW4uYzoxNjQ1OiAqIGJlIGNvbXBsZXRlIGJlZm9yZSBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZSBkdWUgdG8gYSBzYW5pdHkgY2hlY2suXFxubW0vdm1zY2FuLmMtMTY0Ni0gKi9cXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ2MjU9dm9pZCBscnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ2NDItXFxubW0vdm1zY2FuLmM6NDY0MzpcXHRcXHRcXHRtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShwYXJlbnRfbHJ1dmVjLCBscnUsIHppZCwgc2l6ZSk7XFxubW0vdm1zY2FuLmMtNDY0NC1cXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA1OjQ3OjU1LjE3MTY2OTU1MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNDg4MjE3NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgZmFtaWxpYXIgd2l0aCBtZW1vcnkgbWFuYWdlbWVudDpcblxuKipDaGVja2luZyBvbiBMUlUgU2l6ZSBVcGRhdGVzKipcblxuSG1tLCBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgIGlzIGV4cG9ydGVkIGFuZCBub24tc3RhdGljLiBJbnRlcmVzdGluZy4gVGhhdCBsaWtlbHkgbWVhbnMgaXQncyBkZXNpZ25lZCB0byBiZSBjYWxsZWQgZnJvbSBvdGhlciBtb2R1bGVzIG9yIHBhcnRzIG9mIHRoZSBrZXJuZWwuIFRoaXMgcmFpc2VzIHNvbWUgcXVlc3Rpb25zIGFib3V0IGhvdyBicm9hZGx5IGl0J3MgdXNlZCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLiBJIHNob3VsZCBwcm9iYWJseSByZXZpZXcgdGhlIGNhbGwgc2l0ZXMgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGl0cyBpbXBhY3Qgb24gdGhlIHN5c3RlbS5cblxuTm93LCB3aGF0IGFib3V0IGBscnVfZ2VuX2xvb2tfYXJvdW5kYD8gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIGl0cyBkZWZpbml0aW9uIGFuZCBwdXJwb3NlLiBJcyB0aGF0IGFsc28gZXhwb3J0ZWQ/IElzIGl0IHN0YXRpYz8gVGhhdCdzIGdvaW5nIHRvIGluZmx1ZW5jZSBob3cgSSBzZWUgdGhpbmdzLiBJIG5lZWQgdG8ga25vdyBob3cgaXQgcmVsYXRlcyB0byBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgIGFuZCBob3cgaXQgbWlnaHQgaW1wYWN0IExSVSBzaXplIGNhbGN1bGF0aW9ucy4gTWF5YmUgSSBzaG91bGQgcXVpY2tseSBncmVwIHRoZSBjb2RlYmFzZSB0byBmaW5kIHdoZXJlIGl0J3MgZGVmaW5lZCBhbmQgdXNlZCB0byBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZC4gSXQncyBwcm9iYWJseSBjYWxsZWQgYnkgc29tZSBraW5kIG9mIHNjaGVkdWxlciBvciBwYWdlIHJlY2xhaW0gbWVjaGFuaXNtLCBzbyB1bmRlcnN0YW5kaW5nIGl0cyByb2xlIGlzIGltcG9ydGFudCBmb3IgdGhlIGNvbXBsZXRlIG1lbW9yeSBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDAxNSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA1OjQ3OjU4LjQyMDQ5MzYwMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc2Mzg2MDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxydV9nZW5fbG9va19hcm91bmRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0PTE4Nz1jYW4gaW5jdXIgdGhlIGhpZ2hlc3QgQ1BVIGNvc3QgaW4gdGhlIHJlY2xhaW0gcGF0aC5cXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3QtMTg4LVxcbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdDoxODk6YGBscnVfZ2VuX2xvb2tfYXJvdW5kKClgYCBleHBsb2l0cyBzcGF0aWFsIGxvY2FsaXR5IHRvIHJlZHVjZSB0aGVcXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3QtMTkwLXRyaXBzIGludG8gdGhlIHJtYXAuIEl0IHNjYW5zIHRoZSBhZGphY2VudCBQVEVzIG9mIGEgeW91bmcgUFRFIGFuZFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0PTE5OT1pbiB0aGUgc2V0LlxcbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdC0yMDAtXFxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0OjIwMTpJbiB0aGUgZXZpY3Rpb24gcGF0aCwgc3BlY2lmaWNhbGx5LCBpbiBgYGxydV9nZW5fbG9va19hcm91bmQoKWBgLCBpZiBhXFxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0LTIwMi1QTUQgaGFzIGEgc3VmZmljaWVudCBudW1iZXIgb2YgaG90IHBhZ2VzLCBpdHMgYWRkcmVzcyBpcyBwbGFjZWQgaW4gdGhlXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTY5NT12b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKTtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjY5Njpib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNjk3LVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD03MTQ9c3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03MTctXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo3MTg6c3RhdGljIGlubGluZSBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzE5LVxcdFxcdHVuc2lnbmVkIGludCBucilcXG4tLVxcbm1tL3JtYXAuYz05MTg9c3RhdGljIGJvb2wgZm9saW9fcmVmZXJlbmNlZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3JtYXAuYy05ODItXFx0XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFxcdTAwMjZcXHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpIFxcdTAwMjZcXHUwMDI2IHB2bXcucHRlKSB7XFxubW0vcm1hcC5jOjk4MzpcXHRcXHRcXHRpZiAobHJ1X2dlbl9sb29rX2Fyb3VuZChcXHUwMDI2cHZtdywgbnIpKVxcbm1tL3JtYXAuYy05ODQtXFx0XFx0XFx0XFx0cmVmZXJlbmNlZCsrO1xcbi0tXFxubW0vdm1zY2FuLmM9Mjc5MT1zdGF0aWMgYm9vbCBfX21heWJlX3VudXNlZCBzZXFfaXNfdmFsaWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbi0tXFxubW0vdm1zY2FuLmMtMjgyMC0gKiB3YWxrX3BtZF9yYW5nZSgpOyB0aGUgZXZpY3Rpb24gYWxzbyByZXBvcnQgdGhlbSB3aGVuIHdhbGtpbmcgdGhlIHJtYXBcXG5tbS92bXNjYW4uYzoyODIxOiAqIGluIGxydV9nZW5fbG9va19hcm91bmQoKS5cXG5tbS92bXNjYW4uYy0yODIyLSAqXFxuLS1cXG5tbS92bXNjYW4uYz00MDc4PXN0YXRpYyBib29sIHRyeV90b19pbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLFxcbi0tXFxubW0vdm1zY2FuLmMtNDA5Ny1cXHQgKiBJZiB0aGUgaGFyZHdhcmUgZG9lc24ndCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgYWNjZXNzZWQgYml0LCBmYWxsYmFja1xcbm1tL3Ztc2Nhbi5jOjQwOTg6XFx0ICogdG8gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLCB3aGljaCBvbmx5IGNsZWFycyB0aGUgYWNjZXNzZWQgYml0IGluIGFcXG5tbS92bXNjYW4uYy00MDk5LVxcdCAqIGhhbmRmdWwgb2YgUFRFcy4gU3ByZWFkaW5nIHRoZSB3b3JrIG91dCBvdmVyIGEgcGVyaW9kIG9mIHRpbWUgdXN1YWxseVxcbi0tXFxubW0vdm1zY2FuLmM9NDIxNz1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNDI2My0gKi9cXG5tbS92bXNjYW4uYzo0MjY0OmJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcXG5tbS92bXNjYW4uYy00MjY1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDU6NDc6NTkuODk2ODgzODI2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc0NzI3NTE0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nOlxuXG4qKkV4YW1pbmluZyBQb3RlbnRpYWwgT3B0aW1pemF0aW9uIE9wcG9ydHVuaXRpZXMqKlxuXG5Pa2F5LCBsZXQncyBzZWUuIEknbSBsb29raW5nIGF0IGBscnVfZ2VuX2xvb2tfYXJvdW5kYCwgYW5kIGl0J3MgY2FsbGVkIGZyb20gYGZvbGlvX3JlZmVyZW5jZWRfb25lYC4gVGhhdCdzIHRoZSBpbW1lZGlhdGUgY29udGV4dC4gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBicm9hZGVyIGltcGxpY2F0aW9ucy4gVGhpcyBsaWtlbHkgaGFzIGltcGxpY2F0aW9ucyBmb3IgdGhlIExSVSBjYWNoZSBpbnRlcmFjdGlvbiwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBtaWdyYXRpb24gZmxhZ3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBBcmUgdGhlcmUgaW50ZXJhY3Rpb25zIG9yIGRlcGVuZGVuY2llcyB0aGVyZSB0aGF0IGNhbiBiZSBzdHJlYW1saW5lZD8gSXMgdGhlcmUgc2hhcmVkIGZ1bmN0aW9uYWxpdHk/IEFyZSB0aGUgZmxhZ3MgdXNlZCBkdXJpbmcgbG9vayBhcm91bmQsIG9yIGlzIHRoZXJlIHRoZSBhYmlsaXR5IHRvIHNldCB0aGVtIGR1cmluZyBtaWdyYXRpb24/IFRoaXMgbGluZSBvZiB0aG91Z2h0IHByb21wdHMgbWUgdG8gcmV2aWV3IGhvdyBgZm9saW9fbWlncmF0ZV9mbGFnc2AgcmVsYXRlcyB0byB0aGUgTFJVIGFuZCByZWZlcmVuY2VkIHBhZ2Ugb3BlcmF0aW9ucy4gVGhlcmUgY291bGQgYmUgYW4gb3Bwb3J0dW5pdHkgZm9yIG9wdGltaXphdGlvbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyMTgsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNTo0ODowMi42NDQxNjE2MTJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTc4MjI1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9fbWlncmF0ZV9mbGFnc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9haW8uYz00NjA9c3RhdGljIGludCBhaW9fbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpkc3QsXFxuLS1cXG5mcy9haW8uYy01MTItXFx0Zm9saW9fY29weShkc3QsIHNyYyk7XFxuZnMvYWlvLmM6NTEzOlxcdGZvbGlvX21pZ3JhdGVfZmxhZ3MoZHN0LCBzcmMpO1xcbmZzL2Fpby5jLTUxNC1cXHRCVUdfT04oY3R4LVxcdTAwM2VyaW5nX2ZvbGlvc1tpZHhdICE9IHNyYyk7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYz0xMDI0PXN0YXRpYyBpbnQgaHVnZXRsYmZzX21pZ3JhdGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDM5LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEwNDA6XFx0Zm9saW9fbWlncmF0ZV9mbGFncyhkc3QsIHNyYyk7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTA0MS1cXG4tLVxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oPTY5PXZvaWQgc29mdGxlYWZfZW50cnlfd2FpdF9vbl9sb2NrZWQoc29mdGxlYWZfdCBlbnRyeSwgc3BpbmxvY2tfdCAqcHRsKVxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTcwLVxcdFxcdF9fcmVsZWFzZXMocHRsKTtcXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaDo3MTp2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtNzItaW50IGZvbGlvX21pZ3JhdGVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg9MzUyPXN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcmVjbGFpbWluZylcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMzYyLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6MzYzOlxcdC8qIGZvciBmb2xpb19taWdyYXRlX2ZsYWdzKCkgKi9cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTM2NC1cXHRmbGFncyA9ICFyZWNsYWltaW5nIFxcdTAwMjZcXHUwMDI2IGxydV9nZW5faXNfYWN0aXZlKGxydXZlYywgZ2VuKSA/IEJJVChQR19hY3RpdmUpIDogMDtcXG4tLVxcbm1tL21pZ3JhdGUuYz03Mzk9aW50IG1pZ3JhdGVfaHVnZV9wYWdlX21vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbm1tL21pZ3JhdGUuYy03NzQtICovXFxubW0vbWlncmF0ZS5jOjc3NTp2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9taWdyYXRlLmMtNzc2LXtcXG4tLVxcbm1tL21pZ3JhdGUuYy04NjMtfVxcbm1tL21pZ3JhdGUuYzo4NjQ6RVhQT1JUX1NZTUJPTChmb2xpb19taWdyYXRlX2ZsYWdzKTtcXG5tbS9taWdyYXRlLmMtODY1LVxcbi0tXFxubW0vbWlncmF0ZS5jPTg3MD1zdGF0aWMgaW50IF9fbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpkc3QsXFxuLS1cXG5tbS9taWdyYXRlLmMtODkwLVxcbm1tL21pZ3JhdGUuYzo4OTE6XFx0Zm9saW9fbWlncmF0ZV9mbGFncyhkc3QsIHNyYyk7XFxubW0vbWlncmF0ZS5jLTg5Mi1cXHRyZXR1cm4gMDtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTEwOT1zdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjUxLVxcdFxcdFxcdGVsc2VcXG5tbS9taWdyYXRlX2RldmljZS5jOjEyNTI6XFx0XFx0XFx0XFx0Zm9saW9fbWlncmF0ZV9mbGFncyhuZXdmb2xpbywgZm9saW8pO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI1My1cXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA1OjQ4OjA0LjMwMTk5MTUzMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzA5ODEzNjg5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEZvY3VzIFN5bWJvbHMgaW4gTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgc2NhbiBmbGFnZ2VkIGBmb2xpb19taWdyYXRlX2ZsYWdzYCBhcyBleHBvcnRlZCwgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgaXQgYSBjYW5kaWRhdGUgZm9yIGNsb3NlciBpbnNwZWN0aW9uLiBCdXQgSSBxdWlja2x5IGNoZWNrZWQgYXJvdW5kLCBhbmQgSSBzZWUgdGhhdCBhIHNsZXcgb2Ygb3RoZXJzIGFyZSBzdGF0aWM6IGBmb2xpb191cGRhdGVfZ2VuYCwgYGZvbGlvX2luY19nZW5gLCBgbHJ1X2dlbl9pbmNfcmVmc2AsIGBscnVfZ2VuX2NsZWFyX3JlZnNgLCBgd2Fsa19wdGVfcmFuZ2VgLCBgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkYCwgYW5kIGBldmljdF9mb2xpb3NgIGFsbCBzZWVtIHRvIGJlIGludGVybmFsIHRvIHRoZWlyIHJlc3BlY3RpdmUgbW9kdWxlcywgc28gSSdsbCBwdXQgdGhlbSBvbiBhIGJhY2sgYnVybmVyIGZvciBub3cuXG5cbk5vdywgbGV0J3MgZGlnIGludG8gdGhlIG5vbi1zdGF0aWMgb25lcyBtb3JlIGRlZXBseS4gSSBzdGFydGVkIHdpdGggYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYC4gVHJhY2luZyBpdCwgSSBzZWUgaXQncyBjYWxsZWQgZnJvbSBgdXBkYXRlX2xydV9zaXplYCwgd2hpY2ggaXMgbWFya2VkIGBfX2Fsd2F5c19pbmxpbmVgLCBhbmQgaW4gdHVybiBnZXRzIGNhbGxlZCBieSBgbHJ1dmVjX2FkZF9mb2xpb2AsIGBscnV2ZWNfZGVsX2ZvbGlvYCwgZXRjLiBUaGF0IGNvbmZpcm1zIGl0J3MgYSBjcml0aWNhbCBmdW5jdGlvbiByZWxhdGVkIHRvIG1lbW9yeSBjZ3JvdXAgTFJVIG1hbmFnZW1lbnQsIGFuZCBpdCdzIGRlZmluaXRlbHkgYSBnb29kIGZvY3VzLlxuXG5OZXh0LCBJIGNoZWNrZWQgYGxydV9nZW5fbG9va19hcm91bmRgLiBJdCdzIG5vbi1zdGF0aWMgYW5kIGdldHMgY2FsbGVkIGJ5IGBmb2xpb19yZWZlcmVuY2VkX29uZWAsIHdoaWNoIG1ha2VzIGl0IGFub3RoZXIgaW50ZXJlc3Rpbmcgc3ltYm9sLlxuXG5UaGVuLCBiYWNrIHRvIGBmb2xpb19taWdyYXRlX2ZsYWdzYC4gSXQncyBleHBvcnRlZCBhbmQgY2FsbGVkIGZyb20gc2V2ZXJhbCBpbXBvcnRhbnQgbWlncmF0aW9uIGZ1bmN0aW9uczogYGFpb19taWdyYXRlX2ZvbGlvYCwgYGh1Z2V0bGJmc19taWdyYXRlX2ZvbGlvYCwgYF9fbWlncmF0ZV9mb2xpb2AsIGFuZCBgX19taWdyYXRlX2RldmljZV9wYWdlc2AuIFRoaXMgaXMgYW5vdGhlciBzdHJvbmcgY29udGVuZGVyIGZvciBmb2N1cy5cblxuSSBhbHNvIHF1aWNrbHkgY2hlY2tlZCBgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZWAsIGBmb2xpb19scnVfcmVmc2AgYW5kIGBmb2xpb19zZXRfbHJ1X3JlZnNgIGJ1dCB0aGV5IGFyZSBgc3RhdGljIGlubGluZWAsIHNvIHRoZXkgZG9uJ3Qgc2VlbSB0byBoYXZlIGFzIHdpZGUgYSBzY29wZS5cblxuU28sIGJhc2VkIG9uIHRoZSBpbml0aWFsIGFzc2Vzc21lbnQsIHRoZSBrZXkgZm9jdXMgc3ltYm9scyBhcHBlYXIgdG8gYmU6XG4qICAgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYFxuKiAgIGBscnVfZ2VuX2xvb2tfYXJvdW5kYFxuKiAgIGBmb2xpb19taWdyYXRlX2ZsYWdzYFxuXG5UbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkgd2VudCBiYWNrIHRvIHJlLWNoZWNrIGFsbCB0aGUgY29kZS4gSSB2ZXJpZmllZCB0aGF0IHRob3NlIHRocmVlOiBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgLCBgZm9saW9fbWlncmF0ZV9mbGFnc2AsIGFuZCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgd2VyZSBhY3R1YWxseSB0aGUgZnVuY3Rpb25zIHRoYXQgaGFkIGJlZW4gbW9kaWZpZWQuXG5cbkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgd2VudCBiYWNrIGFuZCByZS1jaGVja2VkIHNldmVyYWwgc3RhdGljIGZ1bmN0aW9ucyB0byBiZSBzdXJlLiBJIGNoZWNrZWQgdGhlIHN0YXRpYyBmdW5jdGlvbnM6IGBldmljdF9mb2xpb3NgLCBgZ2V0X3RpZXJfaWR4YCwgYGdldF90eXBlX3RvX3NjYW5gLCBgcmVhZF9jdHJsX3Bvc2AsIGBmb2xpb191cGRhdGVfZ2VuYCwgYGZvbGlvX2luY19nZW5gLCBgdXBkYXRlX2JhdGNoX3NpemVgLCBgd2Fsa191cGRhdGVfZm9saW9gLCBgd2Fsa19wdGVfcmFuZ2VgLCBgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkYCwgYW5kIGBpc29sYXRlX2ZvbGlvYCwganVzdCB0byBtYWtlIHN1cmUgSSB3YXNuJ3QgbWlzc2luZyBhbnl0aGluZyBzaWduaWZpY2FudC5cblxuQWxyaWdodCwgdGhlIGZpbmFsIGxpc3Qgb2Ygbm9uLXN0YXRpYyBmdW5jdGlvbnMgbW9kaWZpZWQgaXM6XG4qICAgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYFxuKiAgIGBmb2xpb19taWdyYXRlX2ZsYWdzYFxuKiAgIGBscnVfZ2VuX2xvb2tfYXJvdW5kYFxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjIxMywiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNTo0ODoxNy40MDAxMzA5NjZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODYxMzg0NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDY3PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbi0tXFxuaW5pdC9LY29uZmlnLTEwNzYtXFxuaW5pdC9LY29uZmlnOjEwNzc6Y29uZmlnIE1FTUNHXFxuaW5pdC9LY29uZmlnLTEwNzgtXFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWctMTA4NS1cXG5pbml0L0tjb25maWc6MTA4Njpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbmluaXQvS2NvbmZpZy0xMDg3LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDkyLVxcbmluaXQvS2NvbmZpZzoxMDkzOmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluaXQvS2NvbmZpZy0xMDk0LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDk5LVxcbmluaXQvS2NvbmZpZzoxMTAwOmNvbmZpZyBNRU1DR19WMVxcbmluaXQvS2NvbmZpZy0xMTAxLVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA1OjQ4OjE4Ljg4NjI3Mzk4MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjAwMjg5NzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIHNlbGYtcmVmbGVjdGlvbjpcblxuKipEZWVwIERpdmUgb24gTFJVX0dFTiBhbmQgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUqKlxuXG5BbHJpZ2h0LCBzbyAqbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUqIGFic29sdXRlbHkgbmVlZHMgYE1FTUNHYC4gTm8gcXVlc3Rpb24gdGhlcmUuIEl0J3MgZnVuZGFtZW50YWwuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGlzIHRoZXJlIGFueXRoaW5nIGVsc2UgdGhhdCAqTFJVX0dFTiogZGVwZW5kcyBvbj8gSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiBhbmQgdmVyaWZ5IHRoYXQgSSBoYXZlbid0IG1pc3NlZCBhIGRlcGVuZGVuY3kgb3IgaW50ZXJhY3Rpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbmZpZ3VyYXRpb24gY29udGV4dC4gSSBrbm93IHRoaXMgc2VlbXMgbGlrZSBhIG5vLWJyYWluZXIgdG8gY2hlY2ssIGJ1dCB0aGVzZSB0aGluZ3Mgb2Z0ZW4gaGF2ZSBoaWRkZW4gaW1wbGljYXRpb25zLCBhbmQgSSB3YW50IHRvIGJlIDEwMCUgc3VyZSBJIGhhdmVuJ3Qgb3Zlcmxvb2tlZCBhbnkgb3RoZXIgZGVwZW5kZW50IGNvbmZpZ3VyYXRpb25zLiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5LiBMZXQncyBtYWtlIHN1cmUgb3VyIGJhc2VzIGFyZSBjb3ZlcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzg4MSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA1OjQ4OjIzLjA4NjU2NjY0MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4NTQ4MzU4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTFJVX0dFTlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEzOTM9Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxcbi0tXFxubW0vS2NvbmZpZy0xNDAzLSMgbXVsdGktZ2VuIExSVSB7XFxubW0vS2NvbmZpZzoxNDA0OmNvbmZpZyBMUlVfR0VOXFxubW0vS2NvbmZpZy0xNDA1LVxcdGJvb2wgXFxcIk11bHRpLUdlbiBMUlVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MTItXFxubW0vS2NvbmZpZzoxNDEzOmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcXG5tbS9LY29uZmlnLTE0MTQtXFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MTgtXFxubW0vS2NvbmZpZzoxNDE5OmNvbmZpZyBMUlVfR0VOX1NUQVRTXFxubW0vS2NvbmZpZy0xNDIwLVxcdGJvb2wgXFxcIkZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTQyNy1cXG5tbS9LY29uZmlnOjE0Mjg6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXFxubW0vS2NvbmZpZy0xNDI5LVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDU6NDg6MjQuNTcyMDU0NDM2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyNjM4MzQwNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgTFJVX0dFTioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmUgYXJvdW5kIGBMUlVfR0VOYC4gRmlyc3QsIGxldCdzIGp1c3Qgc2NvcGUgb3V0IHdoYXQncyBkaXJlY3RseSBjb25uZWN0ZWQuIFdoYXQgbW9kdWxlcyBvciBmdW5jdGlvbnMgY2FsbCBpdD8gV2hhdCBkb2VzIGl0IGNhbGw/IEknbSB0aGlua2luZyBJJ2xsIG5lZWQgYSBxdWljayBjYWxsIGdyYXBoIHZpc3VhbGl6YXRpb24uIEdyYXBodml6IG1heWJlPyBPciBJIGNvdWxkIHF1aWNrbHkgZHVtcCB0aGUgZGVwZW5kZW5jaWVzIHVzaW5nIG15IHByZWZlcnJlZCB0b29sIGNoYWluLiBJ4oCZbSBsZWFuaW5nIHRvd2FyZHMgYSBwcm9ncmFtbWF0aWMgYXBwcm9hY2ggZm9yIHRoaXMgc2luY2UgYSB2aXN1YWwgcmVwcmVzZW50YXRpb24sIHdoaWxlIGhlbHBmdWwsIHByb2JhYmx5IHdvbid0IGdpdmUgbWUgdGhlIGxvdyBsZXZlbCBpbnNpZ2h0IEkgbmVlZCBmb3IgYSB0YXNrLlxuXG5UaGVuLCBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGRhdGEgc3RydWN0dXJlcyBgTFJVX0dFTmAgaW50ZXJhY3RzIHdpdGguIEFyZSB0aGVzZSBzaGFyZWQsIHByb3RlY3RlZCBieSBsb2Nrcywgb3Igc2luZ2xlLXRocmVhZGVkPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uY3VycmVuY3kgbW9kZWwgaW1tZWRpYXRlbHkgaWYgaXQncyBub3Qgc2luZ2xlIHRocmVhZGVkLiBUaGlzIHByb2JhYmx5IGVudGFpbHMgdHJhY2luZyBob3cgdGhlIGtleXMgYW5kIHZhbHVlcyBhcmUgc3RvcmVkIGFuZCByZXRyaWV2ZWQuXG5cbkknbSBhbHNvIGN1cmlvdXMgYWJvdXQgdGhlIGV2aWN0aW9uIHBvbGljeSBpbXBsZW1lbnRhdGlvbi4gSXMgaXQgYSBzaW1wbGUgY2xvY2stc3dlZXAsIGEgbW9yZSBjb21wbGV4IGFkYXB0aXZlIHNjaGVtZSwgb3Igc29tZXRoaW5nIGN1c3RvbT8gVGhlIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBvZiBgTFJVX0dFTmAgd2lsbCBiZSBoaWdobHkgZGVwZW5kZW50IG9uIHRoaXMuIEknbGwgbmVlZCB0byBsb29rIGF0IHRoZSBtZXRyaWNzIGNvbGxlY3Rpb24uXG5cbkZpbmFsbHksIEkgd2FudCB0byBjb25zaWRlciBob3cgdGhlIGNhY2hlIGlzIGNvbmZpZ3VyZWQuIEFyZSB0aGVyZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgZm9yIHNpemUsIGV2aWN0aW9uIHRocmVzaG9sZCwgb3Igb3RoZXIgYmVoYXZpb3I/IEFueSB1bml0IHRlc3RzIG9uIHRoZSBldmljdGlvbiBwb2xpY3kgaW1wbGVtZW50YXRpb24gd291bGQgYmUgaGVscGZ1bCBmb3IgYSBxdWlja2VyIHVuZGVyc3RhbmRpbmcsIGFuZCBJIHdvdWxkIHdhbnQgdG8gbG9vayBhdCB0aG9zZSBuZXh0LiBJIGFtIGFsc28gY3VyaW91cyBhYm91dCB0aGUgdGVzdCBjb3ZlcmFnZSBzdXJyb3VuZGluZyB0aGlzIGNvbXBvbmVudDsgSeKAmWQgd2FudCB0byBtYWtlIHN1cmUgdGhlIGNvcmUgZnVuY3Rpb25zIGFyZSBmdWxseSBleGVyY2lzZWQsIGVzcGVjaWFsbHkgaW4gZWRnZS1jYXNlIHNjZW5hcmlvcyBsaWtlIHZlcnkgaGlnaCBvciB2ZXJ5IGxvdyB3b3JrbG9hZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MzYwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDU6NDg6MzAuODM1ODkyMDYzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0MDA6XFx0XFx0ICBwdXJwb3Nlcy4gIEl0IGlzIHJlcXVpcmVkIHRvIGVuYWJsZSB1c2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIG9uXFxuMTQwMTpcXHRcXHQgIGZpbGUtYmFja2VkIG1lbW9yeSB0eXBlcyBsaWtlIHNobWVtIGFuZCBodWdldGxiZnMuXFxuMTQwMjpcXHRcXG4xNDAzOlxcdCMgbXVsdGktZ2VuIExSVSB7XFxuMTQwNDpcXHRjb25maWcgTFJVX0dFTlxcbjE0MDU6XFx0XFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4xNDA2OlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuMTQwNzpcXHRcXHQjIG1ha2Ugc3VyZSBmb2xpby1cXHUwMDNlZmxhZ3MgaGFzIGVub3VnaCBzcGFyZSBiaXRzXFxuMTQwODpcXHRcXHRkZXBlbmRzIG9uIDY0QklUIHx8ICFTUEFSU0VNRU0gfHwgU1BBUlNFTUVNX1ZNRU1NQVBcXG4xNDA5OlxcdFxcdGhlbHBcXG4xNDEwOlxcdFxcdCAgQSBoaWdoIHBlcmZvcm1hbmNlIExSVSBpbXBsZW1lbnRhdGlvbiB0byBvdmVyY29tbWl0IG1lbW9yeS4gU2VlXFxuMTQxMTpcXHRcXHQgIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscy5cXG4xNDEyOlxcdFxcbjE0MTM6XFx0Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbjE0MTQ6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuMTQxNTpcXHRcXHRkZXBlbmRzIG9uIExSVV9HRU5cXG4xNDE2OlxcdFxcdGhlbHBcXG4xNDE3OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbXVsdGktZ2VuIExSVSBieSBkZWZhdWx0LlxcbjE0MTg6XFx0XFxuMTQxOTpcXHRjb25maWcgTFJVX0dFTl9TVEFUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNTo0ODozMC44MzYwMjUxOTNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc0OTUyNDE1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIFRoaXMgTWVtb3J5IE1hbmFnZW1lbnQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIExlYXN0IFJlY2VudGx5IFVzZWQgKExSVSkgYW5kIGl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQgYXQgZmlyc3QgZ2xhbmNlLiBJdCdzIGNsZWFyIHRoYXQgYExSVV9HRU5gIHJlbGllcyBvbiBhIGNvdXBsZSBvZiBrZXkgdGhpbmdzOiB0aGUgYE1NVWAgKG9idmlvdXNseSwgZXNzZW50aWFsIGZvciBtZW1vcnkgbWFuYWdlbWVudCkgYW5kIGVpdGhlciBhIDY0LWJpdCBhcmNoaXRlY3R1cmUgb3IgYSBub24tc3BhcnNlIG1lbW9yeSBzZXR1cCBvciB0aGUgYFNQQVJTRU1FTV9WTUVNTUFQYCBjb25maWd1cmF0aW9uLiBNYWtlcyBzZW5zZS4gTm93LCBteSBpbW1lZGlhdGUgcmVhY3Rpb24gaXMgdGhhdCB3ZSBzaG91bGQgYmUgZW5hYmxpbmcgYm90aCBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgLlxuXG5CZXlvbmQgdGhhdCwgdGhlIGRlcGVuZGVuY2llcyBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBgTUVNQ0dgIGlzIGRlZmluaXRlbHkgcmVxdWlyZWQgdG8gYWxsb3cgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCB0byBvcGVyYXRlIGNvcnJlY3RseS4gVGhhdCBmdW5jdGlvbiB0ZWxscyBtZSB0aGF0IHRoZXJlIGFyZSBzb21lIHNpZ25pZmljYW50IHVwZGF0ZXMgdG8gdGhlIG1lbW9yeSBjb250cm9sIGdyb3VwIGZ1bmN0aW9uYWxpdHkgaGVyZSwgd2hpY2ggZGVmaW5pdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuXG5cbkkgbmVlZCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBvciBudWFuY2VzIGhlcmUuIFRoZSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZOKAlGBtbS92bXNjYW4uY2AsIGBtbS9taWdyYXRlLmNgLCBgbW0vbWVtY29udHJvbC5jYCwgYW5kIGBtbS9mb2xpby5jYOKAlHRoZXNlIGFyZSAqY29yZSogbWVtb3J5IG1hbmFnZW1lbnQgZmlsZXMsIHNvIHRoaXMgaXMgYSBjcnVjaWFsIGNoYW5nZS4gSSBuZWVkIHRvIGRpZyBpbi5cblxuTm93LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUga2V5IHN5bWJvbHMgdG91Y2hlZCBoZXJlIHRvIGdldCBhIHNlbnNlIG9mIHRoZSBzY29wZTogYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCwgdGhhdCdzIHRoZSBiaWcgb25lLCBnaXZlbiB0aGUgZWFybGllciBgTUVNQ0dgIHRpZS1pbi4gVGhlbiwgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgLCB3aGljaCBzdWdnZXN0cyBtaWdyYXRpb24gY2FwYWJpbGl0aWVzIGFyZSBiZWluZyBpbmZsdWVuY2VkLCBhbmQgYGxydV9nZW5fbG9va19hcm91bmRgLCB3aGljaCBtYWtlcyBtZSBzdXNwZWN0IHNvbWUgc29ydCBvZiBMUlUtYmFzZWQgbG9vay1haGVhZCBvcHRpbWl6YXRpb24gaXMgaW52b2x2ZWQuXG5cbkZpbmFsbHksIEkgc2hvdWxkIGNoZWNrIHRoZSBmdW5jdGlvbnMgb3V0c2lkZSBvZiBzdGF0aWMsIGp1c3QgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBzaWduaWZpY2FudCBwdWJsaWMgaW50ZXJmYWNlIGNoYW5nZXMgdG8gY29uc2lkZXIuIEknbGwgZm9jdXMgb24gdGhlIGNoYW5nZXMgaW4gYG1tL2ZvbGlvLmNgIGFzIHRoZXkgc2VlbSBtb3N0IHRhcmdldGVkIHRvIHRoZXNlIGxvdy1sZXZlbCBwYWdlIHJlcHJlc2VudGF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkwNzAsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNTo0ODozNi41ODU1NTIyODZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODQ5Njg4NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHJ1X2dlbl9pbmNfcmVmc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21tem9uZS5oPTQyND1lbnVtIGxydXZlY19mbGFncyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTUwNi0gKiBGb3IgZm9saW9zIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycyxcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjUwNzogKiBscnVfZ2VuX2luY19yZWZzKCkgc2V0cyBhZGRpdGlvbmFsIGJpdHMgb2YgTFJVX1JFRlNfV0lEVEggaW4gZm9saW8tXFx1MDAzZWZsYWdzXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC01MDgtICogYWZ0ZXIgUEdfcmVmZXJlbmNlZCwgdGhlbiBQR193b3JraW5nc2V0IGFmdGVyIExSVV9SRUZTX1dJRFRILiBBZnRlciBhbGwgaXRzXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTUxMS0gKiBmb2xpb19pbmNfZ2VuKCkgZG9lcyB0aGF0LCBpdCBjbGVhcnMgTFJVX1JFRlNfRkxBR1Mgc28gdGhhdFxcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NTEyOiAqIGxydV9nZW5faW5jX3JlZnMoKSBjYW4gc3RhcnQgb3Zlci4gTm90ZSB0aGF0IGZvciB0aGlzIGNhc2UsIExSVV9SRUZTX01BU0sgaXNcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTUxMy0gKiBvbmx5IHZhbGlkIHdoZW4gUEdfcmVmZXJlbmNlZCBpcyBzZXQuXFxuLS1cXG5tbS9mb2xpby5jPTMyMj1zdGF0aWMgdm9pZCBfX2xydV9jYWNoZV9hY3RpdmF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZm9saW8uYy0zNTMtXFxubW0vZm9saW8uYzozNTQ6c3RhdGljIHZvaWQgbHJ1X2dlbl9pbmNfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2ZvbGlvLmMtMzU1LXtcXG4tLVxcbm1tL2ZvbGlvLmM9MzgwPXN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZm9saW8uYy00MDAtXFxubW0vZm9saW8uYzo0MDE6c3RhdGljIHZvaWQgbHJ1X2dlbl9pbmNfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2ZvbGlvLmMtNDAyLXtcXG4tLVxcbm1tL2ZvbGlvLmM9NDI1PXZvaWQgZm9saW9fbWFya19hY2Nlc3NlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZm9saW8uYy00MjktXFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKSB7XFxubW0vZm9saW8uYzo0MzA6XFx0XFx0bHJ1X2dlbl9pbmNfcmVmcyhmb2xpbyk7XFxubW0vZm9saW8uYy00MzEtXFx0XFx0cmV0dXJuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNTo0ODozOC4xNzA1Mjk4ODhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAwNjgzMjA2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyb20gbXkgcGVyc3BlY3RpdmU6XG5cbioqVGhpbmtpbmcgVGhyb3VnaCBgbHJ1X2dlbl9pbmNfcmVmc2AgYW5kIFNjYW4gQ2hhbmdlcyoqXG5cbk9rYXksIHNvIGBscnVfZ2VuX2luY19yZWZzYCBpcyBzdGF0aWMuIFRoYXQgbWVhbnMgaXQncyBzY29wZWQgdG8gdGhlIGZpbGUgaXQncyBpbiwgd2hpY2ggSSdkIGV4cGVjdCBnaXZlbiBpdHMgcm9sZS4gTm93LCBsZXQgbWUgc2VlLi4uIHdoZXJlIGFyZSB0aGUgbW9zdCByZWxldmFudCBjaGFuZ2VzIGFyb3VuZCB0aGlzIGxpa2VseT8gRGVmaW5pdGVseSBuZWVkIHRvIGdvIG92ZXIgYG1tL3Ztc2Nhbi5jYC4gSXQncyB3aGVyZSB0aGUgY29yZSBWTSBzY2FubmluZyBsb2dpYyBsaXZlcywgc28gYW55IG1vZGlmaWNhdGlvbnMgdG8gaG93IHJlZmVyZW5jZSBjb3VudHMgYXJlIG1hbmFnZWQsIG9yIGhvdyBnZW5lcmF0aW9ucyBhcmUgaGFuZGxlZCwgd291bGQgbGlrZWx5IHNob3cgdXAgdGhlcmUuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCdzIGNoYW5nZWQgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyMDEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNTo0ODo0MS4xNzczNjQ5OTZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTMzMjY0MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9fdXBkYXRlX2dlblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTI4OD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbHJ1X2dlbl9mb2xpb19zZXEoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0yOTgtXFx0ICogfCBBY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzIGFuZCAgfCBBY2Nlc3NlZCB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMgfFxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6Mjk5OlxcdCAqIHwgcHJvbW90ZWQgYnkgZm9saW9fdXBkYXRlX2dlbigpICAgIHwgYW5kIHByb3RlY3RlZCBieSBmb2xpb19pbmNfZ2VuKCkgIHxcXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTMwMC1cXHQgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTQyND1lbnVtIGxydXZlY19mbGFncyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTUxNC0gKlxcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NTE1OiAqIEZvciBmb2xpb3MgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBwYWdlIHRhYmxlcywgZm9saW9fdXBkYXRlX2dlbigpXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC01MTYtICogZnJvbSBhIHBhZ2UgdGFibGUgd2FsayBvciBscnVfZ2VuX3NldF9yZWZzKCkgZnJvbSBhIHJtYXAgd2FsayBzZXRzXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTUxOC0gKiBUaGVyZWFmdGVyLCB0aG9zZSB0d28gcGF0aHMgc2V0IFBHX3dvcmtpbmdzZXQgYW5kIHByb21vdGUgZm9saW9zIHRvIHRoZVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NTE5OiAqIHlvdW5nZXN0IGdlbmVyYXRpb24uIExpa2UgZm9saW9faW5jX2dlbigpLCBmb2xpb191cGRhdGVfZ2VuKCkgYWxzbyBjbGVhcnNcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTUyMC0gKiBQR19yZWZlcmVuY2VkLiBOb3RlIHRoYXQgZm9yIHRoaXMgY2FzZSwgTFJVX1JFRlNfTUFTSyBpcyBub3QgdXNlZC5cXG4tLVxcbm1tL3Ztc2Nhbi5jPTgyNz1lbnVtIGZvbGlvX3JlZmVyZW5jZXMge1xcbi0tXFxubW0vdm1zY2FuLmMtODM3LSAqIHdpdGggUEdfYWN0aXZlIHNldC4gSW4gY29udHJhc3QsIHRoZSBhZ2luZyAocGFnZSB0YWJsZSB3YWxrKSBwYXRoIHVzZXNcXG5tbS92bXNjYW4uYzo4Mzg6ICogZm9saW9fdXBkYXRlX2dlbigpLlxcbm1tL3Ztc2Nhbi5jLTgzOS0gKi9cXG4tLVxcbm1tL3Ztc2Nhbi5jPTMyNTY9c3RhdGljIGJvb2wgcG9zaXRpdmVfY3RybF9lcnIoc3RydWN0IGN0cmxfcG9zICpzcCwgc3RydWN0IGN0cmxfcG9zICpwdilcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMyNzEtLyogcHJvbW90ZSBwYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzICovXFxubW0vdm1zY2FuLmM6MzI3MjpzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGludCAqaXNfZmlsZSxcXG5tbS92bXNjYW4uYy0zMjczLVxcdFxcdFxcdCAgICBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbi0tXFxubW0vdm1zY2FuLmM9MzMwNz1zdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vdm1zY2FuLmMtMzMyMC1cXG5tbS92bXNjYW4uYzozMzIxOlxcdFxcdC8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqL1xcbm1tL3Ztc2Nhbi5jLTMzMjItXFx0XFx0aWYgKG9sZF9nZW4gIT0gbWluX2dlbilcXG4tLVxcbm1tL3Ztc2Nhbi5jPTM1MjQ9c3RhdGljIHZvaWQgd2Fsa191cGRhdGVfZm9saW8oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS92bXNjYW4uYy0zNTM5LVxcdGlmICh3YWxrKSB7XFxubW0vdm1zY2FuLmM6MzU0MDpcXHRcXHRvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgXFx1MDAyNmZpbGUsIFxcdTAwMjZ2bWEtXFx1MDAzZWZsYWdzKTtcXG5tbS92bXNjYW4uYy0zNTQxLVxcdFxcdGlmIChvbGRfZ2VuIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgb2xkX2dlbiAhPSBuZXdfZ2VuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNTo0ODo0Mi42NzA2OTY4NjFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY4MjI3OTYyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgUG90ZW50aWFsIEZvbGlvIFVwZGF0ZSBJbXBhY3RzKipcblxuT2theSwgc28gYGZvbGlvX3VwZGF0ZV9nZW5gIGlzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcywgcGFydGljdWxhcmx5IGluIHRoZSBjb250ZXh0IG9mIHJlY2VudCBtb2RpZmljYXRpb25zLiBMZXQncyBkaWcgaW50byB0aGF0LlxuXG5Ob3csIEknbGwgc2hpZnQgbXkgZm9jdXMgYW5kIHN0YXJ0IGludmVzdGlnYXRpbmcgdGhlIGNoYW5nZXMgaW4gYG1tL21pZ3JhdGUuY2AuIFRoaXMgZmlsZSBvZnRlbiBpbnRlcmFjdHMgaGVhdmlseSB3aXRoIGZvbGlvIG1hbmFnZW1lbnQsIGFuZCBpdCdzIGEgbGlrZWx5IHBvaW50IG9mIGltcGFjdCBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byB1cGRhdGluZyBmb2xpb3MuIEknbGwgY2FyZWZ1bGx5IHNjcnV0aW5pemUgdGhlIGRpZmZzIGluIHRoYXQgYXJlYS4gSSBzdXNwZWN0IHRoZXJlIG1heSBiZSBpbXBvcnRhbnQgY2x1ZXMgcmVsYXRlZCB0byB3aGF0IEknbSBjdXJyZW50bHkgbG9va2luZyBhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEyMDAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNTo0ODo0Ny4zNTI5NzkzODZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzQ5MjU3MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9fbWlncmF0ZV9yZWZzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbW1faW5saW5lLmg9MzUyPXN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcmVjbGFpbWluZylcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMzc0LS8qKlxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6Mzc1OiAqIGZvbGlvX21pZ3JhdGVfcmVmcyAtIGNvcHkgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBhIG5ldyBmb2xpb1xcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMzc2LSAqIEBuZXc6IHRoZSBkZXN0aW5hdGlvbiBmb2xpb1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0zODItICovXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDozODM6c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0zODQte1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD00MTA9c3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCByZWNsYWltaW5nKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC00MTQtXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDo0MTU6c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC00MTYte1xcbi0tXFxubW0vbWlncmF0ZS5jPTc3NT12b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL21pZ3JhdGUuYy04MDgtXFx0LyogQ29weSB0aGUgcmVmZXJlbmNlIHN0YXRlLCBpbmNsdWRpbmcgUEdfcmVmZXJlbmNlZCAqL1xcbm1tL21pZ3JhdGUuYzo4MDk6XFx0Zm9saW9fbWlncmF0ZV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7XFxubW0vbWlncmF0ZS5jLTgxMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDU6NDg6NDguODI3OTEyOTgxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMzcyMDE4NDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBNR0xSVSBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGggdGhlIE11bHRpLUdlbiBMUlUgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSBob3cgd2UgbWFuYWdlIExSVSBnZW5lcmF0aW9uIGFuZCByZWZlcmVuY2UgZmxhZ3Mgd2l0aGluIHRoZSBgZm9saW8tXHUwMDNlZmxhZ3NgIHN0cnVjdHVyZS4gSXQgbG9va3MgbGlrZSBpdCdzIHNoaWZ0aW5nIGZyb20gZGlyZWN0IGJpdG1hc2sgbWFuaXB1bGF0aW9uIHRvIGEgc2V0IG9mIGhlbHBlciBmdW5jdGlvbnMsIGFuZCBhbHNvIG1vZGlmeWluZyBgbHJ1X3pvbmVfc2l6ZWAgaW4gYG1lbV9jZ3JvdXBfcGVyX25vZGVgIHRvIHVzZSBhbiBgYXRvbWljX2xvbmdfdGAuIFRoaXMgaW1wbGllcyBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYW5kIGNvcnJlY3RuZXNzIGltcGxpY2F0aW9ucywgcGFydGljdWxhcmx5IGFyb3VuZCBjb25jdXJyZW5jeS5cblxuU28sIHRoZSBrZXkgZnVuY3Rpb25zIEknbSBmb2N1c2luZyBvbiBhcmU6IGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAsIGBmb2xpb19taWdyYXRlX2ZsYWdzYCwgYW5kIGBscnVfZ2VuX2xvb2tfYXJvdW5kYC4gVGhlIGBmb2xpb19taWdyYXRlX3JlZnNgIGZ1bmN0aW9uIGlzIGBzdGF0aWMgaW5saW5lYCwgc28gSSBkb24ndCBuZWVkIHRvIGNvbnNpZGVyIGl0IGZ1cnRoZXIgYXQgdGhpcyBwb2ludC5cblxuSSBzdGFydGVkIGJ5IHZlcmlmeWluZyB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBpcyBkZWZpbml0ZWx5IGd1YXJkZWQgYnkgYENPTkZJR19MUlVfR0VOYCwgd2hpY2ggaXMgZXhwZWN0ZWQuICBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgIHJlcXVpcmVzIGBDT05GSUdfTUVNQ0dgLiBgZm9saW9fbWlncmF0ZV9mbGFnc2AgaXMgaW4gYG1tL21pZ3JhdGUuY2AsIHNvIEkgc2hvdWxkIGtlZXAgYW4gZXllIG9uIGhvdyBpdCB3b3Jrcy4gSSdtIGFsc28gY29uZmlybWluZyB3ZSBuZWVkIGBMUlVfR0VOYCwgYExSVV9HRU5fRU5BQkxFRGAsIGFuZCBgTUVNQ0dgIGVuYWJsZWQgZm9yIHRoaXMgcGF0Y2ggdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBJIGNoZWNrZWQgYExSVV9HRU5gJ3MgZGVwZW5kZW5jaWVzLCB3aGljaCBpbmNsdWRlIGBNTVVgIGFuZCB0aGUgNjQtYml0IG9yIHNwYXJzZSBtZW1vcnkgY29uZmlndXJhdGlvbnMuICBUaG9zZSBhcmVuJ3QgdGhpbmdzIEknbSB0b28gY29uY2VybmVkIGFib3V0IGFkZGluZywgYXMgdGhvc2UgYXJlIHVzdWFsbHkgZW5hYmxlZCBieSBkZWZhdWx0IGFueXdheS5cblxuSSBhbHNvIGNoZWNrZWQgdG8gc2VlIGlmIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB3ZXJlIG1vZGlmaWVkIGluIHRoaXMgcGF0Y2guICBgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZWAgaXMgc3RhdGljIGlubGluZS4gYGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1YCwgYGxydV9nZW5fZnJvbV9mbGFnc2AsIGBscnVfZ2VuX3NldF9mbGFnc2AsIGBscnVfcmVmc19mcm9tX2ZsYWdzYCwgYGxydV9yZWZzX3NldF9mbGFnc2AsIGFuZCBgZm9saW9fc2V0X2xydV9yZWZzYCBhcmUgYWxzbyBzdGF0aWMgaW5saW5lLiBTbywgdGhlIGZvY3VzIHN5bWJvbHMgYXJlIHRoZSBjb3JyZWN0IG9uZXMuXG5cbkluIGVzc2VuY2UsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBjaGFuZ2VzIHRoYXQgYWx0ZXIgaG93IGZvbGlvcyBhcmUgdHJhY2tlZCBhbmQgYWdlZCBpbiB0aGUgTFJVIGxpc3RzLiBUaGUgaGVscGVyIGZ1bmN0aW9ucyByZXBsYWNlIGJpdG1hc2sgb3BlcmF0aW9ucywgd2hpY2ggaXMgZ29vZCwgYnV0IHRoZSBzd2l0Y2ggdG8gYGF0b21pY19sb25nX3RgIGluIGBtZW1fY2dyb3VwX3Blcl9ub2RlYCBpbnRyb2R1Y2VzIGF0b21pYyBvcGVyYXRpb25zLiBUaGlzLCBjb21iaW5lZCB3aXRoIHRoZSBmYWN0IHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBpbnZva2VkIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMg4oCTIGluY2x1ZGluZyBwYWdlIG1pZ3JhdGlvbiwgTFJVIHNpemUgdHJhY2tpbmcsIGFuZCBwYWdlIHRhYmxlIHNjYW5uaW5nIOKAkyBtYWtlcyB0aGVtIHByaW1lIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcuIFRoZXkgYXJlIGFsbCByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWxseSBhbHRlciBtZW1vcnkgbWFuYWdlbWVudCdzIGNvcmUgYmVoYXZpb3IuXG5cbkkndmUgY29uZmlybWVkIHRoZSBmb2N1cyBzeW1ib2xzIGFyZSB2YWxpZC4gYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCBpc24ndCBgRVhQT1JUX1NZTUJPTGAnZCBidXQgaXQncyB1c2VkIGZyb20gYG1tL2ZvbGlvLmNgIGFuZCBgbW0vdm1zY2FuLmNgLiBgZm9saW9fbWlncmF0ZV9mbGFnc2AgaXMgZXhwb3J0ZWQsIGFuZCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgaXMgdXNlZCBpbiBgbW0vcm1hcC5jYC4gTG9va3MgZ29vZCB0byBtZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE3ODQsIk91dHB1dFRva2VucyI6MjEwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA1OjQ5OjAxLjE5OTkzNDA1MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MTQ0NjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVcIixcbiAgICBcImZvbGlvX21pZ3JhdGVfZmxhZ3NcIixcbiAgICBcImxydV9nZW5fbG9va19hcm91bmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIGltcGxlbWVudGF0aW9uLCBjaGFuZ2luZyBob3cgTFJVIGdlbmVyYXRpb24gYW5kIHJlZmVyZW5jZSBmbGFncyBhcmUgc3RvcmVkIGluIGBmb2xpby1cXHUwMDNlZmxhZ3NgLiBJdCByZXBsYWNlcyBkaXJlY3QgYml0bWFzayBvcGVyYXRpb25zIHdpdGggbmV3IGhlbHBlciBmdW5jdGlvbnMgYW5kIGNoYW5nZXMgYGxydV96b25lX3NpemVgIGluIGBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZWAgdG8gdXNlIGBhdG9taWNfbG9uZ190YCBpbnN0ZWFkIG9mIGB1bnNpZ25lZCBsb25nYC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocywgaW5jbHVkaW5nIHBhZ2UgbWlncmF0aW9uLCBMUlUgc2l6ZSB0cmFja2luZywgYW5kIHBhZ2UgdGFibGUgc2Nhbm5pbmcuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbGx5IGFsdGVycyBob3cgZm9saW9zIGFyZSB0cmFja2VkIGFuZCBhZ2VkIGluIHRoZSBMUlUgbGlzdHMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZVwiLFxuICAgIFwiZm9saW9fbWlncmF0ZV9mbGFnc1wiLFxuICAgIFwibHJ1X2dlbl9sb29rX2Fyb3VuZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgaW1wbGVtZW50YXRpb24sIGNoYW5naW5nIGhvdyBMUlUgZ2VuZXJhdGlvbiBhbmQgcmVmZXJlbmNlIGZsYWdzIGFyZSBzdG9yZWQgaW4gYGZvbGlvLVxcdTAwM2VmbGFnc2AuIEl0IHJlcGxhY2VzIGRpcmVjdCBiaXRtYXNrIG9wZXJhdGlvbnMgd2l0aCBuZXcgaGVscGVyIGZ1bmN0aW9ucyBhbmQgY2hhbmdlcyBgbHJ1X3pvbmVfc2l6ZWAgaW4gYHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlYCB0byB1c2UgYGF0b21pY19sb25nX3RgIGluc3RlYWQgb2YgYHVuc2lnbmVkIGxvbmdgLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzLCBpbmNsdWRpbmcgcGFnZSBtaWdyYXRpb24sIExSVSBzaXplIHRyYWNraW5nLCBhbmQgcGFnZSB0YWJsZSBzY2FubmluZy4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsbHkgYWx0ZXJzIGhvdyBmb2xpb3MgYXJlIHRyYWNrZWQgYW5kIGFnZWQgaW4gdGhlIExSVSBsaXN0cywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA1OjQ5OjAxLjI3OTA4NzA2OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg1OTg1MTg3MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNTo0OTowMS4yNzk1NjkwNzhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTg1OTgwMzIzMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgc3BlY2lmaWNhbGx5IGZvbGlvIExSVSBnZW5lcmF0aW9uIGZsYWdzIGFuZCByZWZlcmVuY2UgdHJhY2tpbmcsIGFuZCBjaGFuZ2VzIGEgY291bnRlciAoYGxydV96b25lX3NpemVgKSB0byBhbiBhdG9taWMgdmFyaWFibGUgdG8gZml4IGNvbmN1cnJlbmN5IGlzc3Vlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBtaWdodCBiZSBsZWZ0IHBhcnRpYWxseSB1bmluaXRpYWxpemVkLiBUaGUgbG9jYWwgdmFyaWFibGUgYGZpbGVgIGludHJvZHVjZWQgaW4gYHdhbGtfdXBkYXRlX2ZvbGlvYCBpcyBvbmx5IHVzZWQgd2hlbiBgZm9saW9fdXBkYXRlX2dlbmAgcmV0dXJucyBhIG5vbi1uZWdhdGl2ZSB2YWx1ZSwgd2hpY2ggZ3VhcmFudGVlcyBpdCBoYXMgYmVlbiBpbml0aWFsaXplZC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4YTkyNWQyNTQ2YzUzOGQ0YjNiMGRjMTc1NWNhYWM4OTQ5ODlkOWEwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMDU6NDc6MzkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5pbmRleCBlNzhiYzk4YWIyMjliLi5iMTNlM2YwNTYzMTk1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5AQCAtMTEzLDcgKzExMyw3IEBAIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlIHtcbiBcdC8qIEZpZWxkcyB3aGljaCBnZXQgdXBkYXRlZCBvZnRlbiBhdCB0aGUgZW5kLiAqL1xuIFx0c3RydWN0IGxydXZlY1x0XHRscnV2ZWM7XG4gXHRDQUNIRUxJTkVfUEFERElORyhfcGFkMl8pO1xuLVx0dW5zaWduZWQgbG9uZ1x0XHRscnVfem9uZV9zaXplW01BWF9OUl9aT05FU11bTlJfTFJVX0xJU1RTXTtcbitcdGF0b21pY19sb25nX3RcdFx0bHJ1X3pvbmVfc2l6ZVtNQVhfTlJfWk9ORVNdW05SX0xSVV9MSVNUU107XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9yZWNsYWltX2l0ZXJcdGl0ZXI7XG4gXG4gXHQvKlxuQEAgLTg5NywxMCArODk3LDE1IEBAIHN0YXRpYyBpbmxpbmVcbiB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRlbnVtIGxydV9saXN0IGxydSwgaW50IHpvbmVfaWR4KVxuIHtcbitcdGxvbmcgdmFsO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16O1xuIFxuIFx0bXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcbi1cdHJldHVybiBSRUFEX09OQ0UobXotXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7XG4rXHR2YWwgPSBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm16LVx1MDAzZWxydV96b25lX3NpemVbem9uZV9pZHhdW2xydV0pO1xuK1x0aWYgKFdBUk5fT05fT05DRSh2YWwgXHUwMDNjIDApKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiB2YWw7XG4gfVxuIFxuIHZvaWQgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmggYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG5pbmRleCA2MjFjODY1M2Q4ZjdlLi40YmIzOTBkOTUxNmVmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuQEAgLTEwLDYgKzEwLDExIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdXNlcmZhdWx0ZmRfay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGVhZm9wcy5oXHUwMDNlXG4gXG4rc3RhdGljIGlubGluZSBpbnQgZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUoY29uc3QgdW5zaWduZWQgbG9uZyAqZmxhZ3MpXG4re1xuK1x0cmV0dXJuICF0ZXN0X2JpdChQR19zd2FwYmFja2VkLCBmbGFncyk7XG4rfVxuK1xuIC8qKlxuICAqIGZvbGlvX2lzX2ZpbGVfbHJ1IC0gU2hvdWxkIHRoZSBmb2xpbyBiZSBvbiBhIGZpbGUgTFJVIG9yIGFub24gTFJVP1xuICAqIEBmb2xpbzogVGhlIGZvbGlvIHRvIHRlc3QuXG5AQCAtMjcsNyArMzIsNyBAQFxuICAqL1xuIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2lzX2ZpbGVfbHJ1KGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0cmV0dXJuICFmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pO1xuK1x0cmV0dXJuIGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KGNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4gfVxuIFxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG5AQCAtMTQyLDEwICsxNDcsNDMgQEAgc3RhdGljIGlubGluZSBpbnQgbHJ1X3RpZXJfZnJvbV9yZWZzKGludCByZWZzLCBib29sIHdvcmtpbmdzZXQpXG4gXHRyZXR1cm4gd29ya2luZ3NldCA/IE1BWF9OUl9USUVSUyAtIDEgOiBvcmRlcl9iYXNlXzIocmVmcyk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rLyoqXG4rICogbHJ1X2dlbl9mcm9tX2ZsYWdzIC0gUmV0dXJuIHRoZSBMUlUgZ2VuZXJhdGlvbiBudW1iZXIgZnJvbSBmb2xpbyBmbGFncy5cbisgKiBAZmxhZ3M6IGZvbGlvIGZsYWdzXG4rICpcbisgKiBSZXR1cm5zOiBBIG51bWJlciBiZXR3ZWVuIDAgYW5kIExSVV9HRU5fTUFYLCBpbmNsdXNpdmUuIFJldHVybnMgLTEgaWYgdGhlXG4rICogZmxhZ3MgaW5kaWNhdGUgdGhlIGZvbGlvIGlzIG9mZiB0aGUgbGlzdCAoZS5nLiwgaXNvbGF0ZWQpLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgaW50IGxydV9nZW5fZnJvbV9mbGFncyh1bnNpZ25lZCBsb25nIGZsYWdzKVxuK3tcbitcdGludCBnZW4gPSAoKGZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKTtcbitcbitcdEJVSUxEX0JVR19PTihMUlVfR0VOX01BU0sgXHUwMDI2IExSVV9SRUZTX01BU0spO1xuK1x0Z2VuIC09IDE7XG4rXHRWTV9XQVJOX09OX09OQ0UoZ2VuICE9IC0xIFx1MDAyNlx1MDAyNiBnZW4gXHUwMDNlIExSVV9HRU5fTUFYKTtcbitcdHJldHVybiBnZW47XG4rfVxuK1xuKy8qKlxuKyAqIGxydV9nZW5fc2V0X2ZsYWdzIC0gU2V0IHRoZSBMUlUgZ2VuZXJhdGlvbiBudW1iZXIgdG8gc3BlY2lmaWVkIGZvbGlvIGZsYWdzLlxuKyAqIEBmbGFnczogcG9pbnRlciB0byB0aGUgZm9saW8gZmxhZ3NcbisgKiBAZ2VuOiBnZW5lcmF0aW9uIG51bWJlciwgYmV0d2VlbiAwIGFuZCBMUlVfR0VOX01BWCwgaW5jbHVzaXZlLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX3NldF9mbGFncyh1bnNpZ25lZCBsb25nICpmbGFncywgaW50IGdlbilcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuK1x0Vk1fV0FSTl9PTl9PTkNFKGdlbiBcdTAwM2UgTFJVX0dFTl9NQVggfHwgZ2VuIFx1MDAzYyAwKTtcbitcdEJVSUxEX0JVR19PTigoTFJVX0dFTl9NQVggKyAxKSAhPSBNQVhfTlJfR0VOUyk7XG4rXG4rXHQqZmxhZ3MgXHUwMDI2PSB+TFJVX0dFTl9NQVNLO1xuK1x0KmZsYWdzIHw9IChnZW4gKyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuK31cbiBcbisvKipcbisgKiBscnVfcmVmc19mcm9tX2ZsYWdzIC0gUmV0dXJuIExSVSByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IGZyb20gZm9saW8gZmxhZ3MuXG4rICogQGZsYWdzOiBmb2xpbyBmbGFnc1xuKyAqL1xuK3N0YXRpYyBpbmxpbmUgaW50IGxydV9yZWZzX2Zyb21fZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncylcbit7XG4gXHRpZiAoIShmbGFncyBcdTAwMjYgQklUKFBHX3JlZmVyZW5jZWQpKSlcbiBcdFx0cmV0dXJuIDA7XG4gXHQvKlxuQEAgLTE1NSwxOCArMTkzLDQ3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gKChmbGFncyBcdTAwMjYgTFJVX1JFRlNfTUFTSykgXHUwMDNlXHUwMDNlIExSVV9SRUZTX1BHT0ZGKSArIDE7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbisvKipcbisgKiBscnVfcmVmc19zZXRfZmxhZ3MgLSBTZXQgdGhlIExSVSByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IHRvIHNwZWNpZmllZCBmb2xpbyBmbGFncy5cbisgKiBAZmxhZ3M6IHBvaW50ZXIgdG8gdGhlIGZvbGlvIGZsYWdzXG4rICogQHJlZnM6IHJlZmVyZW5jZWQgLyBhY2Nlc3MgY291bnQgbnVtYmVyLCBiZXR3ZWVuIDAgYW5kIExSVV9SRUZTX01BWCwgaW5jbHVzaXZlLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfcmVmc19zZXRfZmxhZ3ModW5zaWduZWQgbG9uZyAqZmxhZ3MsIHVuc2lnbmVkIGludCByZWZzKVxuK3tcbitcdFZNX1dBUk5fT05fT05DRShyZWZzIFx1MDAzZSBMUlVfUkVGU19NQVgpO1xuK1x0QlVJTERfQlVHX09OKExSVV9SRUZTX01BWCAhPSAoTFJVX1JFRlNfTUFTSyBcdTAwM2VcdTAwM2UgTFJVX1JFRlNfUEdPRkYpICsgMSk7XG4rXG4rXHQqZmxhZ3MgXHUwMDI2PSB+TFJVX1JFRlNfRkxBR1M7XG4rXHRpZiAoIXJlZnMpXG4rXHRcdHJldHVybjtcbitcdCpmbGFncyB8PSAoQklUKFBHX3JlZmVyZW5jZWQpIHwgKChyZWZzIC0gMVVMKSBcdTAwM2NcdTAwM2MgTFJVX1JFRlNfUEdPRkYpKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRyZXR1cm4gbHJ1X3JlZnNfZnJvbV9mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCByZWZzKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4rXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuIFxuLVx0cmV0dXJuICgoZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbitcdGRvIHtcbitcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuK1x0XHRscnVfcmVmc19zZXRfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCByZWZzKTtcbitcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRyZXR1cm4gbHJ1X2dlbl9mcm9tX2ZsYWdzKFJFQURfT05DRSgqY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKSk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2lzX2FjdGl2ZShjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBnZW4pXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBtYXhfc2VxID0gbHJ1dmVjLVx1MDAzZWxydWdlbi5tYXhfc2VxO1xuIFxuLVx0Vk1fV0FSTl9PTl9PTkNFKGdlbiBcdTAwM2U9IE1BWF9OUl9HRU5TKTtcbitcdFZNX1dBUk5fT05fT05DRShnZW4gXHUwMDNlIExSVV9HRU5fTUFYKTtcbiBcbiBcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBNSU5fTlJfR0VOUyAqL1xuIFx0cmV0dXJuIGdlbiA9PSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpIHx8IGdlbiA9PSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEgLSAxKTtcbkBAIC0yNzAsNyArMzM3LDcgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fYWRkX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcbiBcdGZsYWdzID0gKGdlbiArIDFVTCkgXHUwMDNjXHUwMDNjIExSVV9HRU5fUEdPRkY7XG4gXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUlOX05SX0dFTlMgYWJvdXQgUEdfYWN0aXZlICovXG4tXHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9HRU5fTUFTSyB8IEJJVChQR19hY3RpdmUpLCBmbGFncyk7XG4rXHRzZXRfbWFza19iaXRzKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgTFJVX0dFTl9NQVNLIHwgQklUKFBHX2FjdGl2ZSksIGZsYWdzKTtcbiBcbiBcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgLTEsIGdlbik7XG4gXHQvKiBmb3IgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKCkgKi9cbkBAIC0yOTUsNyArMzYyLDcgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcbiBcdC8qIGZvciBmb2xpb19taWdyYXRlX2ZsYWdzKCkgKi9cbiBcdGZsYWdzID0gIXJlY2xhaW1pbmcgXHUwMDI2XHUwMDI2IGxydV9nZW5faXNfYWN0aXZlKGxydXZlYywgZ2VuKSA/IEJJVChQR19hY3RpdmUpIDogMDtcbi1cdGZsYWdzID0gc2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfR0VOX01BU0ssIGZsYWdzKTtcbitcdGZsYWdzID0gc2V0X21hc2tfYml0cyhmb2xpb19mbGFncyhmb2xpbywgMCksIExSVV9HRU5fTUFTSywgZmxhZ3MpO1xuIFx0Z2VuID0gKChmbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuIFxuIFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBnZW4sIC0xKTtcbkBAIC0zMDQsMTEgKzM3MSwxOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuKy8qKlxuKyAqIGZvbGlvX21pZ3JhdGVfcmVmcyAtIGNvcHkgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBhIG5ldyBmb2xpb1xuKyAqIEBuZXc6IHRoZSBkZXN0aW5hdGlvbiBmb2xpb1xuKyAqIEBvbGQ6IHRoZSBzb3VyY2UgZm9saW9cbisgKlxuKyAqIFRyYW5zZmVyIHRoZSByZWZlcmVuY2Ugc3RhdGUgdG8gQG5ldyBkdXJpbmcgbWlncmF0aW9uOiB0aGUgTUdMUlVcbisgKiByZWZzIGNvdW50LCBpbmNsdWRpbmcgUEdfcmVmZXJlbmNlZCwgb3IganVzdCBQR19yZWZlcmVuY2VkIGZvciB0aGVcbisgKiBhY3RpdmUvaW5hY3RpdmUgTFJVLlxuKyAqL1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgcmVmcyA9IFJFQURfT05DRShvbGQtXHUwMDNlZmxhZ3MuZikgXHUwMDI2IExSVV9SRUZTX01BU0s7XG4tXG4tXHRzZXRfbWFza19iaXRzKFx1MDAyNm5ldy1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCByZWZzKTtcbitcdEJVSUxEX0JVR19PTihMUlVfUkVGU19NQVNLIFx1MDAyNiBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuK1x0Zm9saW9fc2V0X2xydV9yZWZzKG5ldywgZm9saW9fbHJ1X3JlZnMob2xkKSk7XG4gfVxuICNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xuIFxuQEAgLTMzOSw3ICs0MTQsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxuIHtcbi1cbitcdGlmIChmb2xpb190ZXN0X3JlZmVyZW5jZWQob2xkKSlcbitcdFx0Zm9saW9fc2V0X3JlZmVyZW5jZWQobmV3KTtcbiB9XG4gI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbmluZGV4IDk0ZjljM2ZmNTQxNjAuLmQwYjVjNjIxN2QyNTcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5AQCAtNDkyLDExICs0OTIsMTUgQEAgZW51bSBscnV2ZWNfZmxhZ3Mge1xuICAqIGZvbGlvLVx1MDAzZWZsYWdzLCBtYXNrZWQgYnkgTFJVX1JFRlNfTUFTSy5cbiAgKi9cbiAjZGVmaW5lIE1BWF9OUl9USUVSU1x0XHQ0VVxuKyNkZWZpbmUgTFJVX1RJRVJfTUlOXHRcdDBVXG4rI2RlZmluZSBMUlVfVElFUl9NQVhcdFx0KE1BWF9OUl9USUVSUyAtIDEpXG4gXG4gI2lmbmRlZiBfX0dFTkVSQVRJTkdfQk9VTkRTX0hcbiBcbiAjZGVmaW5lIExSVV9HRU5fTUFTS1x0XHQoKEJJVChMUlVfR0VOX1dJRFRIKSAtIDEpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGKVxuKyNkZWZpbmUgTFJVX0dFTl9NQVhcdFx0KEJJVChMUlVfR0VOX1dJRFRIIC0gMSkgLSAxKVxuICNkZWZpbmUgTFJVX1JFRlNfTUFTS1x0XHQoKEJJVChMUlVfUkVGU19XSURUSCkgLSAxKSBcdTAwM2NcdTAwM2MgTFJVX1JFRlNfUEdPRkYpXG4rI2RlZmluZSBMUlVfUkVGU19NQVhcdFx0QklUKExSVV9SRUZTX1dJRFRIKVxuIFxuIC8qXG4gICogRm9yIGZvbGlvcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMsXG5kaWZmIC0tZ2l0IGEvbW0vZm9saW8uYyBiL21tL2ZvbGlvLmNcbmluZGV4IDU5YzQ3NzEyMGI5YTguLjBhZGZlNGY1ZWY3MmYgMTAwNjQ0XG4tLS0gYS9tbS9mb2xpby5jXG4rKysgYi9tbS9mb2xpby5jXG5AQCAtMzUzLDI2ICszNTMsMjggQEAgc3RhdGljIHZvaWQgX19scnVfY2FjaGVfYWN0aXZhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiBcbiBzdGF0aWMgdm9pZCBscnVfZ2VuX2luY19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbitcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4rXHRpbnQgcmVmcztcbiBcbiBcdGlmIChmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXG4tXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpIHtcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuK1x0aWYgKCFmb2xpb19scnVfcmVmcyhmb2xpbykpIHtcbitcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0ZG8ge1xuLVx0XHRpZiAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX1JFRlNfTUFTSykgPT0gTFJVX1JFRlNfTUFTSykge1xuK1x0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XG4rXHRcdHJlZnMgPSBscnVfcmVmc19mcm9tX2ZsYWdzKG9sZF9mbGFncyk7XG4rXHRcdGlmIChyZWZzID09IExSVV9SRUZTX01BWCkge1xuIFx0XHRcdGlmICghZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSlcbiBcdFx0XHRcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcbiBcdFx0XHRyZXR1cm47XG4gXHRcdH1cbi1cbi1cdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzICsgQklUKExSVV9SRUZTX1BHT0ZGKTtcbi1cdH0gd2hpbGUgKCF0cnlfY21weGNoZyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuK1x0XHRscnVfcmVmc19zZXRfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCByZWZzICsgMSk7XG4rXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbkBAIC0zODQsNyArMzg2LDggQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRpZiAoZ2VuIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MgfCBCSVQoUEdfd29ya2luZ3NldCksIDApO1xuK1x0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbitcdGZvbGlvX2NsZWFyX3dvcmtpbmdzZXQoZm9saW8pO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0c2VxID0gUkVBRF9PTkNFKGZvbGlvX2xydXZlYyhmb2xpbyktXHUwMDNlbHJ1Z2VuLm1pbl9zZXFbdHlwZV0pO1xuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggMWQzMzM5NTIwODA5Zi4uOWQwZWUzZDNiZGE3YyAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuKysrIGIvbW0vbWVtY29udHJvbC5jXG5AQCAtMTUyOSwyOCArMTUyOSwxMiBAQCB2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXG4gXHRcdFx0XHRpbnQgemlkLCBsb25nIG5yX3BhZ2VzKVxuIHtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejtcbi1cdHVuc2lnbmVkIGxvbmcgKmxydV9zaXplO1xuLVx0bG9uZyBzaXplO1xuIFxuIFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0bXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcbi1cdGxydV9zaXplID0gXHUwMDI2bXotXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6aWRdW2xydV07XG4tXG4tXHRpZiAobnJfcGFnZXMgXHUwMDNjIDApXG4tXHRcdCpscnVfc2l6ZSArPSBucl9wYWdlcztcbi1cbi1cdHNpemUgPSAqbHJ1X3NpemU7XG4tXHRpZiAoV0FSTl9PTkNFKHNpemUgXHUwMDNjIDAsXG4tXHRcdFwiJXMoJXAsICVkLCAlbGQpOiBscnVfc2l6ZSAlbGRcXG5cIixcbi1cdFx0X19mdW5jX18sIGxydXZlYywgbHJ1LCBucl9wYWdlcywgc2l6ZSkpIHtcbi1cdFx0Vk1fQlVHX09OKDEpO1xuLVx0XHQqbHJ1X3NpemUgPSAwO1xuLVx0fVxuLVxuLVx0aWYgKG5yX3BhZ2VzIFx1MDAzZSAwKVxuLVx0XHQqbHJ1X3NpemUgKz0gbnJfcGFnZXM7XG4rXHRhdG9taWNfbG9uZ19hZGQobnJfcGFnZXMsIFx1MDAyNm16LVx1MDAzZWxydV96b25lX3NpemVbemlkXVtscnVdKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jXG5pbmRleCAxNWI0NTgzMmJjZmE3Li44MjMwNzMzMjcxMWY0IDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZS5jXG4rKysgYi9tbS9taWdyYXRlLmNcbkBAIC03NzYsOCArNzc2LDYgQEAgdm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0aW50IGNwdXBpZDtcbiBcbi1cdGlmIChmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKVxuLVx0XHRmb2xpb19zZXRfcmVmZXJlbmNlZChuZXdmb2xpbyk7XG4gXHRpZiAoZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpXG4gXHRcdGZvbGlvX21hcmtfdXB0b2RhdGUobmV3Zm9saW8pO1xuIFx0aWYgKGZvbGlvX3Rlc3RfY2xlYXJfYWN0aXZlKGZvbGlvKSkge1xuQEAgLTgwNyw3ICs4MDUsOSBAQCB2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGlmIChmb2xpb190ZXN0X2lkbGUoZm9saW8pKVxuIFx0XHRmb2xpb19zZXRfaWRsZShuZXdmb2xpbyk7XG4gXG4rXHQvKiBDb3B5IHRoZSByZWZlcmVuY2Ugc3RhdGUsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkICovXG4gXHRmb2xpb19taWdyYXRlX3JlZnMobmV3Zm9saW8sIGZvbGlvKTtcbitcbiBcdC8qXG4gXHQgKiBDb3B5IE5VTUEgaW5mb3JtYXRpb24gdG8gdGhlIG5ldyBwYWdlLCB0byBwcmV2ZW50IG92ZXItZWFnZXJcbiBcdCAqIGZ1dHVyZSBtaWdyYXRpb25zIG9mIHRoaXMgc2FtZSBwYWdlLlxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGMxNDA0YTU5NTIzZDYuLjdlM2FlMGM2Y2JhM2IgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC04NDMsMTkgKzg0MywyMiBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4gXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKSB7XG4gXHRcdC8qIEFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLiAqL1xuIFx0XHRpZiAoaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7XG4tXHRcdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTtcbitcdFx0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuK1x0XHRcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdFx0fVxuIFxuLVx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XG4rXHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbiBcdC8qIFByb21vdGUgb24gc2Vjb25kIGFjY2VzcyAqL1xuLVx0aWYgKGZvbGlvX2xydV9yZWZzKGZvbGlvKSBcdTAwM2UgMSlcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTtcbi1cdGVsc2VcbitcdGlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgXHUwMDNlIDEpIHtcbitcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbitcdFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xuK1x0fSBlbHNlIHtcbiBcdFx0Zm9saW9fbWFya19hY2Nlc3NlZChmb2xpbyk7XG4rXHR9XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gI2Vsc2VcbkBAIC0zMTk1LDggKzMxOTgsOCBAQCBzdHJ1Y3QgY3RybF9wb3Mge1xuIFx0aW50IGdhaW47XG4gfTtcbiBcbi1zdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2Fpbixcbi1cdFx0XHQgIHN0cnVjdCBjdHJsX3BvcyAqcG9zKVxuK3N0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXJfbWluLFxuK1x0XHRcdCAgaW50IHRpZXJfbWF4LCBpbnQgZ2Fpbiwgc3RydWN0IGN0cmxfcG9zICpwb3MpXG4ge1xuIFx0aW50IGk7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbkBAIC0zMjA1LDcgKzMyMDgsNyBAQCBzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2FpbixcbiBcdHBvcy1cdTAwM2VnYWluID0gZ2FpbjtcbiBcdHBvcy1cdTAwM2VyZWZhdWx0ZWQgPSBwb3MtXHUwMDNldG90YWwgPSAwO1xuIFxuLVx0Zm9yIChpID0gdGllciAlIE1BWF9OUl9USUVSUzsgaSBcdTAwM2M9IG1pbih0aWVyLCBNQVhfTlJfVElFUlMgLSAxKTsgaSsrKSB7XG4rXHRmb3IgKGkgPSB0aWVyX21pbjsgaSBcdTAwM2M9IHRpZXJfbWF4OyBpKyspIHtcbiBcdFx0cG9zLVx1MDAzZXJlZmF1bHRlZCArPSBscnVnZW4tXHUwMDNlYXZnX3JlZmF1bHRlZFt0eXBlXVtpXSArXG4gXHRcdFx0XHQgIGF0b21pY19sb25nX3JlYWQoXHUwMDI2bHJ1Z2VuLVx1MDAzZXJlZmF1bHRlZFtoaXN0XVt0eXBlXVtpXSk7XG4gXHRcdHBvcy1cdTAwM2V0b3RhbCArPSBscnVnZW4tXHUwMDNlYXZnX3RvdGFsW3R5cGVdW2ldICtcbkBAIC0zMjY2LDExICszMjY5LDExIEBAIHN0YXRpYyBib29sIHBvc2l0aXZlX2N0cmxfZXJyKHN0cnVjdCBjdHJsX3BvcyAqc3AsIHN0cnVjdCBjdHJsX3BvcyAqcHYpXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiBcbiAvKiBwcm9tb3RlIHBhZ2VzIGFjY2Vzc2VkIHRocm91Z2ggcGFnZSB0YWJsZXMgKi9cbi1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbitzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGludCAqaXNfZmlsZSxcbitcdFx0XHQgICAgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiB7XG4tXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuLVxuLVx0Vk1fV0FSTl9PTl9PTkNFKGdlbiBcdTAwM2U9IE1BWF9OUl9HRU5TKTtcbitcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4rXHRpbnQgb2xkX2dlbjtcbiBcbiBcdC8qXG4gXHQgKiBTZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MsIGFuZCBhY3RpdmF0ZSBmaWxlLWJhY2tlZFxuQEAgLTMyNzksMjAgKzMyODIsMjUgQEAgc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFcbiBcdCAqL1xuIFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7XG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcbitcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcbiBcdFx0cmV0dXJuIC0xO1xuIFx0fVxuIFxuIFx0ZG8ge1xuK1x0XHRvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX2ZsYWdzKG9sZF9mbGFncyk7XG4rXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncztcbitcbiBcdFx0LyogbHJ1X2dlbl9kZWxfZm9saW8oKSBoYXMgaXNvbGF0ZWQgdGhpcyBwYWdlPyAqL1xuLVx0XHRpZiAoIShvbGRfZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykpXG4tXHRcdFx0cmV0dXJuIC0xO1xuK1x0XHRpZiAob2xkX2dlbiBcdTAwM2MgMClcbitcdFx0XHRicmVhaztcbiBcbi1cdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzIFx1MDAyNiB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTtcbi1cdFx0bmV3X2ZsYWdzIHw9ICgoZ2VuICsgMVVMKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRikgfCBCSVQoUEdfd29ya2luZ3NldCk7XG4tXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbitcdFx0bHJ1X2dlbl9zZXRfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCBuZXdfZ2VuKTtcbitcdFx0bHJ1X3JlZnNfc2V0X2ZsYWdzKFx1MDAyNm5ld19mbGFncywgMCk7XG4rXHRcdG5ld19mbGFncyB8PSBCSVQoUEdfd29ya2luZ3NldCk7XG4rXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuIFxuLVx0cmV0dXJuICgob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4rXHQqaXNfZmlsZSA9IGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KFx1MDAyNm9sZF9mbGFncyk7XG4rXHRyZXR1cm4gb2xkX2dlbjtcbiB9XG4gXG4gLyogcHJvdGVjdCBwYWdlcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMgKi9cbkBAIC0zMzAwLDIyICszMzA4LDI1IEBAIHN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbi1cdGludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG4tXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuLVxuLVx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCEob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spLCBmb2xpbyk7XG4rXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiwgbWluX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuK1x0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbiBcbiBcdGRvIHtcbi1cdFx0bmV3X2dlbiA9ICgob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4tXHRcdC8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqL1xuLVx0XHRpZiAobmV3X2dlbiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG5ld19nZW4gIT0gb2xkX2dlbilcbi1cdFx0XHRyZXR1cm4gbmV3X2dlbjtcbitcdFx0b2xkX2dlbiA9IGxydV9nZW5fZnJvbV9mbGFncyhvbGRfZmxhZ3MpO1xuK1x0XHQvKiBUaGlzIGhlbHBlciBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIGZvciBvZmYtbGlzdCBmb2xpb3MgKi9cbitcdFx0Vk1fV0FSTl9PTl9PTkNFKG9sZF9nZW4gXHUwMDNjIDApO1xuK1x0XHRpZiAob2xkX2dlbiBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gbWluX2dlbjtcbiBcbi1cdFx0bmV3X2dlbiA9IChvbGRfZ2VuICsgMSkgJSBNQVhfTlJfR0VOUztcbitcdFx0LyogZm9saW9fdXBkYXRlX2dlbigpIGhhcyBwcm9tb3RlZCB0aGlzIHBhZ2U/ICovXG4rXHRcdGlmIChvbGRfZ2VuICE9IG1pbl9nZW4pXG4rXHRcdFx0cmV0dXJuIG9sZF9nZW47XG4gXG4tXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncyBcdTAwMjYgfihMUlVfR0VOX01BU0sgfCBMUlVfUkVGU19GTEFHUyk7XG4tXHRcdG5ld19mbGFncyB8PSAobmV3X2dlbiArIDFVTCkgXHUwMDNjXHUwMDNjIExSVV9HRU5fUEdPRkY7XG4tXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbitcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuK1x0XHRuZXdfZ2VuID0gKG1pbl9nZW4gKyAxKSAlIE1BWF9OUl9HRU5TO1xuK1x0XHRscnVfZ2VuX3NldF9mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIG5ld19nZW4pO1xuK1x0XHRscnVfcmVmc19zZXRfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCAwKTtcbitcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4gXG4gXHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xuIFxuQEAgLTMzMjMsOSArMzMzNCw4IEBAIHN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gfVxuIFxuIHN0YXRpYyB2b2lkIHVwZGF0ZV9iYXRjaF9zaXplKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tXHRcdFx0ICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuKVxuK1x0XHRcdCAgICAgIGludCBvbGRfZ2VuLCBpbnQgbmV3X2dlbiwgaW50IHR5cGUpXG4ge1xuLVx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG4gXHRpbnQgem9uZSA9IGZvbGlvX3pvbmVudW0oZm9saW8pO1xuIFx0aW50IGRlbHRhID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIFxuQEAgLTM1MTIsMjIgKzM1MjIsMjQgQEAgc3RhdGljIGJvb2wgc3VpdGFibGVfdG9fc2NhbihpbnQgdG90YWwsIGludCB5b3VuZylcbiB9XG4gXG4gc3RhdGljIHZvaWQgd2Fsa191cGRhdGVfZm9saW8oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBib29sIGRpcnR5KVxuK1x0XHRcdCAgICAgIHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBkaXJ0eSlcbiB7XG4tXHRpbnQgb2xkX2dlbjtcbitcdGludCBuZXdfZ2VuLCBvbGRfZ2VuLCBmaWxlO1xuIFxuIFx0aWYgKCFmb2xpbylcbiBcdFx0cmV0dXJuO1xuIFxuK1x0bmV3X2dlbiA9IGxydV9nZW5fZnJvbV9zZXEoUkVBRF9PTkNFKGxydXZlYy1cdTAwM2VscnVnZW4ubWF4X3NlcSkpO1xuK1xuIFx0aWYgKGRpcnR5IFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHQgICAgIShmb2xpb190ZXN0X2Fub24oZm9saW8pIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pIFx1MDAyNlx1MDAyNlxuIFx0ICAgICAgIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkpXG4gXHRcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuIFxuIFx0aWYgKHdhbGspIHtcbi1cdFx0b2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sIFx1MDAyNnZtYS1cdTAwM2VmbGFncyk7XG4rXHRcdG9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuLCBcdTAwMjZmaWxlLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpO1xuIFx0XHRpZiAob2xkX2dlbiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG9sZF9nZW4gIT0gbmV3X2dlbilcbi1cdFx0XHR1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XG4rXHRcdFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4sIGZpbGUpO1xuIFx0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpKSB7XG4gXHRcdG9sZF9nZW4gPSBmb2xpb19scnVfZ2VuKGZvbGlvKTtcbiBcdFx0aWYgKG9sZF9nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXG5AQCAtMzU0OSw4ICszNTYxLDYgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cdTAwM2Vwcml2YXRlO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKHdhbGstXHUwMDNlbHJ1dmVjKTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQod2Fsay1cdTAwM2VscnV2ZWMpO1xuLVx0REVGSU5FX01BWF9TRVEod2Fsay1cdTAwM2VscnV2ZWMpO1xuLVx0aW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7XG4gXHR1bnNpZ25lZCBpbnQgbnI7XG4gXHRwbWRfdCBwbWR2YWw7XG4gXG5AQCAtMzYwMSw3ICszNjExLDcgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChsYXN0ICE9IGZvbGlvKSB7XG4tXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCB3YWxrLVx1MDAzZWxydXZlYywgbGFzdCwgZGlydHkpO1xuIFxuIFx0XHRcdGxhc3QgPSBmb2xpbztcbiBcdFx0XHRkaXJ0eSA9IGZhbHNlO1xuQEAgLTM2MTQsNyArMzYyNCw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHR3YWxrLVx1MDAzZW1tX3N0YXRzW01NX0xFQUZfWU9VTkddICs9IG5yO1xuIFx0fVxuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIHdhbGstXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXHRsYXN0ID0gTlVMTDtcbiBcbiBcdGlmIChpIFx1MDAzYyBQVFJTX1BFUl9QVEUgXHUwMDI2XHUwMDI2IGdldF9uZXh0X3ZtYShQTURfTUFTSywgUEFHRV9TSVpFLCBhcmdzLCBcdTAwMjZzdGFydCwgXHUwMDI2ZW5kKSlcbkBAIC0zNjM3LDggKzM2NDcsNiBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXHUwMDNlcHJpdmF0ZTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVx1MDAzZWxydXZlYyk7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdERFRklORV9NQVhfU0VRKHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFKHB1ZF9sZWFmKCpwdWQpKTtcbiBcbkBAIC0zNjkyLDcgKzM3MDAsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0XHRcdGdvdG8gbmV4dDtcbiBcbiBcdFx0aWYgKGxhc3QgIT0gZm9saW8pIHtcbi1cdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC0zNzA2LDcgKzM3MTQsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0XHRpID0gaSBcdTAwM2UgTUlOX0xSVV9CQVRDSCA/IDAgOiBmaW5kX25leHRfYml0KGJpdG1hcCwgTUlOX0xSVV9CQVRDSCwgaSkgKyAxO1xuIFx0fSB3aGlsZSAoaSBcdTAwM2M9IE1JTl9MUlVfQkFUQ0gpO1xuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xuIFx0c3Bpbl91bmxvY2socHRsKTtcbkBAIC00MjcwLDggKzQyNzgsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gZm9saW9fcGdkYXQoZm9saW8pO1xuIFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xuIFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlO1xuLVx0dW5zaWduZWQgbG9uZyBtYXhfc2VxO1xuLVx0aW50IGdlbjtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQocHZtdy1cdTAwM2VwdGwpO1xuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSwgZm9saW8pO1xuQEAgLTQzMDgsOCArNDMxNCw2IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcbiBcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XG4gXHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpO1xuLVx0bWF4X3NlcSA9IFJFQURfT05DRSgobHJ1dmVjKS1cdTAwM2VscnVnZW4ubWF4X3NlcSk7XG4tXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xuIFx0bW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcbiBcbiBcdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XG5AQCAtNDM0MSw3ICs0MzQ1LDcgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAobGFzdCAhPSBmb2xpbykge1xuLVx0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4rXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC00MzUzLDEzICs0MzU3LDE0IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdFx0eW91bmcgKz0gbnI7XG4gXHR9XG4gXG4tXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xuIFxuIFx0LyogZmVlZGJhY2sgZnJvbSBybWFwIHdhbGtlcnMgdG8gcGFnZSB0YWJsZSB3YWxrZXJzICovXG4gXHRpZiAobW1fc3RhdGUgXHUwMDI2XHUwMDI2IHN1aXRhYmxlX3RvX3NjYW4oaSwgeW91bmcpKVxuLVx0XHR1cGRhdGVfYmxvb21fZmlsdGVyKG1tX3N0YXRlLCBtYXhfc2VxLCBwdm13LVx1MDAzZXBtZCk7XG4rXHRcdHVwZGF0ZV9ibG9vbV9maWx0ZXIobW1fc3RhdGUsIFJFQURfT05DRShscnV2ZWMtXHUwMDNlbHJ1Z2VuLm1heF9zZXEpLFxuK1x0XHRcdFx0ICAgIHB2bXctXHUwMDNlcG1kKTtcbiBcbiBcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiBcbkBAIC00NzExLDcgKzQ3MTYsNyBAQCBzdGF0aWMgYm9vbCBpc29sYXRlX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYVxuIFxuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXG4gXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpXG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgMCk7XG4rXHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4gXG4gXHRzdWNjZXNzID0gbHJ1X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7XG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIXN1Y2Nlc3MsIGZvbGlvKTtcbkBAIC00ODA0LDkgKzQ4MDksOSBAQCBzdGF0aWMgaW50IGdldF90aWVyX2lkeChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKVxuIFx0ICogVGhpcyB2YWx1ZSBpcyBjaG9zZW4gYmVjYXVzZSBhbnkgb3RoZXIgdGllciB3b3VsZCBoYXZlIGF0IGxlYXN0IHR3aWNlXG4gXHQgKiBhcyBtYW55IHJlZmF1bHRzIGFzIHRoZSBmaXJzdCB0aWVyLlxuIFx0ICovXG4tXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgMCwgMiwgXHUwMDI2c3ApO1xuLVx0Zm9yICh0aWVyID0gMTsgdGllciBcdTAwM2MgTUFYX05SX1RJRVJTOyB0aWVyKyspIHtcbi1cdFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIDMsIFx1MDAyNnB2KTtcbitcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01JTiwgMiwgXHUwMDI2c3ApO1xuK1x0Zm9yICh0aWVyID0gTFJVX1RJRVJfTUlOICsgMTsgdGllciBcdTAwM2M9IExSVV9USUVSX01BWDsgdGllcisrKSB7XG4rXHRcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0aWVyLCB0aWVyLCAzLCBcdTAwMjZwdik7XG4gXHRcdGlmICghcG9zaXRpdmVfY3RybF9lcnIoXHUwMDI2c3AsIFx1MDAyNnB2KSlcbiBcdFx0XHRicmVhaztcbiBcdH1cbkBAIC00ODI3LDggKzQ4MzIsMTAgQEAgc3RhdGljIGludCBnZXRfdHlwZV90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXG4gXHQgKiBDb21wYXJlIHRoZSBzdW0gb2YgYWxsIHRpZXJzIG9mIGFub24gd2l0aCB0aGF0IG9mIGZpbGUgdG8gZGV0ZXJtaW5lXG4gXHQgKiB3aGljaCB0eXBlIHRvIHNjYW4uXG4gXHQgKi9cbi1cdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIE1BWF9OUl9USUVSUywgc3dhcHBpbmVzcywgXHUwMDI2c3ApO1xuLVx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTUFYX05SX1RJRVJTLCBNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3MsIFx1MDAyNnB2KTtcbitcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUFYLFxuK1x0XHQgICAgICBzd2FwcGluZXNzLCBcdTAwMjZzcCk7XG4rXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCxcbitcdFx0ICAgICAgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCBcdTAwMjZwdik7XG4gXG4gXHRyZXR1cm4gcG9zaXRpdmVfY3RybF9lcnIoXHUwMDI2c3AsIFx1MDAyNnB2KTtcbiB9XG5AQCAtNDkyNyw4ICs0OTM0LDEwIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHR9XG4gXG4gXHRcdC8qIGRvbid0IGFkZCByZWplY3RlZCBmb2xpb3MgdG8gdGhlIG9sZGVzdCBnZW5lcmF0aW9uICovXG4tXHRcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSlcbi1cdFx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfYWN0aXZlKSk7XG4rXHRcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSkge1xuK1x0XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4rXHRcdFx0Zm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdG1vdmVfZm9saW9zX3RvX2xydShcdTAwMjZsaXN0KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA1OjQ5OjAxLjI3OTU2OTg2OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODU5Nzk5OTY4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBOb3QgTmVlZGVkOiBBIERlZXAgRGl2ZSBpbnRvIE1lbW9yeSBNYW5hZ2VtZW50IFJlZmFjdG9yaW5nKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYW5hbHl6ZSB0aGVzZSBjaGFuZ2VzIGZyb20gYSBtZW1vcnkgc2FmZXR5IHBlcnNwZWN0aXZlLCBhbmQgc3BlY2lmaWNhbGx5IGlmIEtNU0FOIGlzICpuZWVkZWQqIGhlcmUuXG5cbkZpcnN0LCBJIHNlZSB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgZm9jdXNlZCBvbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBwYXJ0aWN1bGFybHkgdGhlIExSVSBnZW5lcmF0aW9uIGFuZCByZWZlcmVuY2UgdHJhY2tpbmcuIFRoaXMgaW52b2x2ZXMgY2hhbmdlcyBhY3Jvc3Mgc2V2ZXJhbCBmaWxlcywgZm9jdXNpbmcgb24gYHN0cnVjdCBmb2xpb2AgYW5kIExSVS1yZWxhdGVkIGZsYWdzLlxuXG5UaGUga2V5IGNoYW5nZXMganVtcCBvdXQ6IGBscnVfem9uZV9zaXplYCBpbiBgbWVtX2Nncm91cF9wZXJfbm9kZWAgZ29pbmcgZnJvbSBgdW5zaWduZWQgbG9uZ2AgdG8gYGF0b21pY19sb25nX3RgIOKAkyBzb3VuZHMgbGlrZSBhIGNvbmN1cnJlbmN5IGltcHJvdmVtZW50LCBsaWtlbHkgdGhyZWFkLXNhZmUgbm93LiBTZWNvbmQsIG1vdmluZyBMUlUgZ2VuZXJhdGlvbi9yZWZlcmVuY2UgdHJhY2tpbmcgZnJvbSBkaXJlY3QgYml0IG1hbmlwdWxhdGlvbiBvZiBgZm9saW8tXHUwMDNlZmxhZ3NgIHRvIGhlbHBlciBmdW5jdGlvbnMg4oCTIGEgZGVmaW5pdGUgcmVmYWN0b3JpbmcgdG8gaW1wcm92ZSByZWFkYWJpbGl0eSBhbmQgcG90ZW50aWFsbHkgaXNvbGF0ZSB0aGUgZmxhZyBhY2Nlc3MuIFRoZW4sIHVwZGF0ZXMgdG8gZnVuY3Rpb25zIHN1Y2ggYXMgYGZvbGlvX21pZ3JhdGVfcmVmc2AsIGByZWFkX2N0cmxfcG9zYCwgYGZvbGlvX3VwZGF0ZV9nZW5gLCBhbmQgYHdhbGtfdXBkYXRlX2ZvbGlvYCB0byBhbGlnbiB3aXRoIHRoZSBuZXcgaGVscGVycy5cblxuTm93LCBteSBwcmltYXJ5IGNvbmNlcm4gd2l0aCBhIHBhdGNoIGxpa2UgdGhpcyBpcyB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2UuIFRoZSBxdWVzdGlvbiBJIGltbWVkaWF0ZWx5IGFzayBpczogZG8gdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgYSB2dWxuZXJhYmlsaXR5IHdoZXJlIHNvbWUgcHJldmlvdXNseSB1bml0aWFsaXplZCBtZW1vcnkgaXMgbm93IHVzZWQgaW4gY29udHJvbCBmbG93LCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZT8gSSBuZWVkIHRvIGFuYWx5emUgdGhpcyBmcm9tIHRoZSBzdGFuZHBvaW50IG9mIHN0cnVjdHVyZXMgYmVpbmcgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBuZXcgYWxsb2NhdGlvbnMsIGFuZCB3aGVyZSB1bmluaXRpYWxpemVkIGRhdGEgaXMgbm93IHJlYWQuXG5cbkluaXRpYWxseSwgaXQgZG9lc24ndCAqc2VlbSogbGlrZSB0aGVyZSBhcmUgYW55IG9idmlvdXMgcmVkIGZsYWdzLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlLCBub3RoaW5nIHNlZW1zIHRvIGJlIGFsbG9jYXRlZCB3aXRob3V0IGluaXRpYWxpemF0aW9uLiBJIGNhbiBzZWUgbm8gbmV3IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFuZCBubyBjaGFuZ2VzIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgcGF0Y2ggcHJpbWFyaWx5IG1hbmlwdWxhdGVzIGZsYWdzLCBMUlUgc3RhdGlzdGljcywgYW5kIHVwZGF0ZXMgYSBjb3VudGVyLiBUaGF0LCBvbiBpdHMgb3duLCBzZWVtcyB0byByZWR1Y2UgdGhlIHByb2JhYmlsaXR5IG9mIGludHJvZHVjaW5nIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLlxuXG5MZXQncyBkb3VibGUtY2hlY2suIEknbGwgbWV0aWN1bG91c2x5IGdvIHRocm91Z2ggdGhlIGNvZGUsIGZvY3VzaW5nIG9uIGFyZWFzIHdoZXJlIHZhbHVlcyBhcmUgc2V0IGFuZCB1c2VkLiBTcGVjaWZpY2FsbHksIEknbGwgcGF5IGF0dGVudGlvbiB0byBgZm9saW9fdXBkYXRlX2dlbmAgYW5kIGB3YWxrX3VwZGF0ZV9mb2xpb2AuIEluIGBmb2xpb191cGRhdGVfZ2VuYCwgaXQgKmxvb2tzKiBsaWtlIGAqaXNfZmlsZWAgbWlnaHQgYmUgdW5pbml0aWFsaXplZCBpZiB0aGUgZWFybHkgcmV0dXJuIGlzIHRha2VuLiBCdXQgd2FpdCwgYCppc19maWxlYCBpcyBzZXQgKmJlZm9yZSogdGhlIGZ1bmN0aW9uIHJldHVybnMsIGV2ZW4gYWZ0ZXIgYSBmYXN0IHBhdGguIFNvLCBgaXNfZmlsZWAgaXMgdXNlZCBpbiBgd2Fsa191cGRhdGVfZm9saW9gIGFzIGFuIG91dHB1dC4gSG93ZXZlciwgdXBvbiBjbG9zZXIgaW5zcGVjdGlvbiwgSSBzZWUgdGhhdCB0aGUgcmV0dXJuIHZhbHVlIG9mIGBmb2xpb191cGRhdGVfZ2VuYCBpcyBjaGVja2VkLiBJZiBpdCAqaXMqIHRoZSBmYXN0IHBhdGgsIHRoZW4gYHVwZGF0ZV9iYXRjaF9zaXplYCBpc24ndCBldmVuIGNhbGxlZCwgbWVhbmluZyBgZmlsZWAgaXMgbmV2ZXIgdXNlZC4gU28gZXZlbiAqdGhhdCogc2VlbWluZ2x5IHBvdGVudGlhbCBpc3N1ZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHByb2JsZW0uIFRoaXMgaXMgZ29vZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZC5cblxuV2hhdCBhYm91dCBgbHJ1X3pvbmVfc2l6ZWA/IEkgcmVjYWxsIHRoYXQgaXQncyBwYXJ0IG9mIGEgYG1lbV9jZ3JvdXBfcGVyX25vZGVgLCB3aGljaCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfbm9kZWAuIFRoYXTigJlzIHplcm8taW5pdGlhbGl6ZWQuIEV4Y2VsbGVudC5cblxuTm93LCBsZXQncyB6b29tIG91dCBhZ2Fpbi4gSXMgdGhlcmUgKmFueSogb3RoZXIgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzayBJJ20gbWlzc2luZz8gSSB0aGluayBJJ3ZlIGNvdmVyZWQgdGhlIGNyaXRpY2FsIHBhcnRzLiBJIHNlZSBubyBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vdGhpbmcgYWxsb2NhdGVkIHRoYXQgKmlzbid0KiBpbml0aWFsaXplZCwgYW5kIGFsbCBsb2NhbCB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBwYXRjaCBhcHBlYXJzIHRvIGJlIHB1cmUgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMsIHJlZmFjdG9yaW5nIGFuZCBpbXByb3Zpbmcgc29tZSBmbGFnIGhhbmRsaW5nIGFuZCBmaXhpbmcgYSBjb25jdXJyZW5jeSBpc3N1ZS5cblxuU28sIHRoZSBjb25jbHVzaW9uIGlzOiBLTVNBTiBpc24ndCBuZWVkZWQgaGVyZS4gU3RhbmRhcmQgbWVtb3J5IHNhZmV0eSB0b29scyBsaWtlIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIHNob3VsZCBiZSBzdWZmaWNpZW50LiBLTVNBTiBpcyBmb3IgY2F0Y2hpbmcgKnVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzKiwgYW5kIHRoZXJlIGFyZSBub25lIGluIHRoaXMgcGF0Y2guXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQncyBhcHBseSB0aGUgS01TQU4gdGVzdCBhZ2FpbjpcblxuMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZT8gTm9uZS5cbjIuICBDb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUuIGBmaWxlYCBpbiBgd2Fsa191cGRhdGVfZm9saW9gIGlzIHNhZmUuXG4zLiAgQWxsb2NhdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcz8gTm9uZS5cbjQuICBCb3VuZHMgY2hlY2tzIGNoYW5nZXM/IE5vbmUuXG5cblNvLCBteSBmaW5hbCB2ZXJkaWN0IGlzOiAqKk5lZWRzS01TQU4gPSBmYWxzZS4qKiBUaGUgcGF0Y2ggcmVmYWN0b3JzIGZsYWcgbWFuaXB1bGF0aW9uIGFuZCBhbiBhdG9taWMgdmFyaWFibGUgdXBkYXRlLiBTdGFuZGFyZCB0b29scyB3aWxsIGNhdGNoIGFueSBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjQ2LCJPdXRwdXRUb2tlbnMiOjE4NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNTo0OToxOS44Nzc1NzM1MTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgc3BlY2lmaWNhbGx5IGZvbGlvIExSVSBnZW5lcmF0aW9uIGZsYWdzIGFuZCByZWZlcmVuY2UgdHJhY2tpbmcsIGFuZCBjaGFuZ2VzIGEgY291bnRlciAoYGxydV96b25lX3NpemVgKSB0byBhbiBhdG9taWMgdmFyaWFibGUgdG8gZml4IGNvbmN1cnJlbmN5IGlzc3Vlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBtaWdodCBiZSBsZWZ0IHBhcnRpYWxseSB1bmluaXRpYWxpemVkLiBUaGUgbG9jYWwgdmFyaWFibGUgYGZpbGVgIGludHJvZHVjZWQgaW4gYHdhbGtfdXBkYXRlX2ZvbGlvYCBpcyBvbmx5IHVzZWQgd2hlbiBgZm9saW9fdXBkYXRlX2dlbmAgcmV0dXJucyBhIG5vbi1uZWdhdGl2ZSB2YWx1ZSwgd2hpY2ggZ3VhcmFudGVlcyBpdCBoYXMgYmVlbiBpbml0aWFsaXplZC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMsIHNwZWNpZmljYWxseSBmb2xpbyBMUlUgZ2VuZXJhdGlvbiBmbGFncyBhbmQgcmVmZXJlbmNlIHRyYWNraW5nLCBhbmQgY2hhbmdlcyBhIGNvdW50ZXIgKGBscnVfem9uZV9zaXplYCkgdG8gYW4gYXRvbWljIHZhcmlhYmxlIHRvIGZpeCBjb25jdXJyZW5jeSBpc3N1ZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgdGhhdCBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgbWlnaHQgYmUgbGVmdCBwYXJ0aWFsbHkgdW5pbml0aWFsaXplZC4gVGhlIGxvY2FsIHZhcmlhYmxlIGBmaWxlYCBpbnRyb2R1Y2VkIGluIGB3YWxrX3VwZGF0ZV9mb2xpb2AgaXMgb25seSB1c2VkIHdoZW4gYGZvbGlvX3VwZGF0ZV9nZW5gIHJldHVybnMgYSBub24tbmVnYXRpdmUgdmFsdWUsIHdoaWNoIGd1YXJhbnRlZXMgaXQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowf9p9q[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-18 05:45:49 +0000 UTC FinishedAt: 2026-08-18 05:49:21 +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": "3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED", "MEMCG" ], "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": "3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED", "MEMCG" ], "series_id": "94e63836-82fa-4e11-8bc8-ca27a78ad47a" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "mem_cgroup_update_lru_size", "folio_migrate_flags", "lru_gen_look_around" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE4IDA1OjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUmIzM0OywKICAgICYjMzQ7Zm9saW9fbWlncmF0ZV9mbGFncyYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX2xvb2tfYXJvdW5kJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCBzcGVjaWZpY2FsbHkgZm9saW8gTFJVIGdlbmVyYXRpb24gZmxhZ3MgYW5kIHJlZmVyZW5jZSB0cmFja2luZywgYW5kIGNoYW5nZXMgYSBjb3VudGVyIChgbHJ1X3pvbmVfc2l6ZWApIHRvIGFuIGF0b21pYyB2YXJpYWJsZSB0byBmaXggY29uY3VycmVuY3kgaXNzdWVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IG1pZ2h0IGJlIGxlZnQgcGFydGlhbGx5IHVuaW5pdGlhbGl6ZWQuIFRoZSBsb2NhbCB2YXJpYWJsZSBgZmlsZWAgaW50cm9kdWNlZCBpbiBgd2Fsa191cGRhdGVfZm9saW9gIGlzIG9ubHkgdXNlZCB3aGVuIGBmb2xpb191cGRhdGVfZ2VuYCByZXR1cm5zIGEgbm9uLW5lZ2F0aXZlIHZhbHVlLCB3aGljaCBndWFyYW50ZWVzIGl0IGhhcyBiZWVuIGluaXRpYWxpemVkLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIGltcGxlbWVudGF0aW9uLCBjaGFuZ2luZyBob3cgTFJVIGdlbmVyYXRpb24gYW5kIHJlZmVyZW5jZSBmbGFncyBhcmUgc3RvcmVkIGluIGBmb2xpby1cdTAwM2VmbGFnc2AuIEl0IHJlcGxhY2VzIGRpcmVjdCBiaXRtYXNrIG9wZXJhdGlvbnMgd2l0aCBuZXcgaGVscGVyIGZ1bmN0aW9ucyBhbmQgY2hhbmdlcyBgbHJ1X3pvbmVfc2l6ZWAgaW4gYHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlYCB0byB1c2UgYGF0b21pY19sb25nX3RgIGluc3RlYWQgb2YgYHVuc2lnbmVkIGxvbmdgLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzLCBpbmNsdWRpbmcgcGFnZSBtaWdyYXRpb24sIExSVSBzaXplIHRyYWNraW5nLCBhbmQgcGFnZSB0YWJsZSBzY2FubmluZy4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsbHkgYWx0ZXJzIGhvdyBmb2xpb3MgYXJlIHRyYWNrZWQgYW5kIGFnZWQgaW4gdGhlIExSVSBsaXN0cywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDU6NDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4YTkyNWQyNTQ2YzUzOGQ0YjNiMGRjMTc1NWNhYWM4OTQ5ODlkOWEwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMDU6NDc6MzkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuaW5kZXggZTc4YmM5OGFiMjI5Yi4uYjEzZTNmMDU2MzE5NSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuQEAgLTExMyw3ICYjNDM7MTEzLDcgQEAgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUge1xuIFx0LyogRmllbGRzIHdoaWNoIGdldCB1cGRhdGVkIG9mdGVuIGF0IHRoZSBlbmQuICovXG4gXHRzdHJ1Y3QgbHJ1dmVjXHRcdGxydXZlYztcbiBcdENBQ0hFTElORV9QQURESU5HKF9wYWQyXyk7XG4tXHR1bnNpZ25lZCBsb25nXHRcdGxydV96b25lX3NpemVbTUFYX05SX1pPTkVTXVtOUl9MUlVfTElTVFNdO1xuJiM0MztcdGF0b21pY19sb25nX3RcdFx0bHJ1X3pvbmVfc2l6ZVtNQVhfTlJfWk9ORVNdW05SX0xSVV9MSVNUU107XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9yZWNsYWltX2l0ZXJcdGl0ZXI7XG4gXG4gXHQvKlxuQEAgLTg5NywxMCAmIzQzOzg5NywxNSBAQCBzdGF0aWMgaW5saW5lXG4gdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0ZW51bSBscnVfbGlzdCBscnUsIGludCB6b25lX2lkeClcbiB7XG4mIzQzO1x0bG9uZyB2YWw7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XG4gXG4gXHRteiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xuLVx0cmV0dXJuIFJFQURfT05DRShtei1cdTAwM2VscnVfem9uZV9zaXplW3pvbmVfaWR4XVtscnVdKTtcbiYjNDM7XHR2YWwgPSBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm16LVx1MDAzZWxydV96b25lX3NpemVbem9uZV9pZHhdW2xydV0pO1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UodmFsIFx1MDAzYyAwKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdmFsO1xuIH1cbiBcbiB2b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuaW5kZXggNjIxYzg2NTNkOGY3ZS4uNGJiMzkwZDk1MTZlZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcbkBAIC0xMCw2ICYjNDM7MTAsMTEgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91c2VyZmF1bHRmZF9rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9sZWFmb3BzLmhcdTAwM2VcbiBcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUoY29uc3QgdW5zaWduZWQgbG9uZyAqZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gIXRlc3RfYml0KFBHX3N3YXBiYWNrZWQsIGZsYWdzKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBmb2xpb19pc19maWxlX2xydSAtIFNob3VsZCB0aGUgZm9saW8gYmUgb24gYSBmaWxlIExSVSBvciBhbm9uIExSVT9cbiAgKiBAZm9saW86IFRoZSBmb2xpbyB0byB0ZXN0LlxuQEAgLTI3LDcgJiM0MzszMiw3IEBAXG4gICovXG4gc3RhdGljIGlubGluZSBpbnQgZm9saW9faXNfZmlsZV9scnUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4tXHRyZXR1cm4gIWZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbyk7XG4mIzQzO1x0cmV0dXJuIGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KGNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4gfVxuIFxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG5AQCAtMTQyLDEwICYjNDM7MTQ3LDQzIEBAIHN0YXRpYyBpbmxpbmUgaW50IGxydV90aWVyX2Zyb21fcmVmcyhpbnQgcmVmcywgYm9vbCB3b3JraW5nc2V0KVxuIFx0cmV0dXJuIHdvcmtpbmdzZXQgPyBNQVhfTlJfVElFUlMgLSAxIDogb3JkZXJfYmFzZV8yKHJlZnMpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MzsvKipcbiYjNDM7ICogbHJ1X2dlbl9mcm9tX2ZsYWdzIC0gUmV0dXJuIHRoZSBMUlUgZ2VuZXJhdGlvbiBudW1iZXIgZnJvbSBmb2xpbyBmbGFncy5cbiYjNDM7ICogQGZsYWdzOiBmb2xpbyBmbGFnc1xuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiBBIG51bWJlciBiZXR3ZWVuIDAgYW5kIExSVV9HRU5fTUFYLCBpbmNsdXNpdmUuIFJldHVybnMgLTEgaWYgdGhlXG4mIzQzOyAqIGZsYWdzIGluZGljYXRlIHRoZSBmb2xpbyBpcyBvZmYgdGhlIGxpc3QgKGUuZy4sIGlzb2xhdGVkKS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGxydV9nZW5fZnJvbV9mbGFncyh1bnNpZ25lZCBsb25nIGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGdlbiA9ICgoZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpO1xuJiM0MztcbiYjNDM7XHRCVUlMRF9CVUdfT04oTFJVX0dFTl9NQVNLIFx1MDAyNiBMUlVfUkVGU19NQVNLKTtcbiYjNDM7XHRnZW4gLT0gMTtcbiYjNDM7XHRWTV9XQVJOX09OX09OQ0UoZ2VuICE9IC0xIFx1MDAyNlx1MDAyNiBnZW4gXHUwMDNlIExSVV9HRU5fTUFYKTtcbiYjNDM7XHRyZXR1cm4gZ2VuO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogbHJ1X2dlbl9zZXRfZmxhZ3MgLSBTZXQgdGhlIExSVSBnZW5lcmF0aW9uIG51bWJlciB0byBzcGVjaWZpZWQgZm9saW8gZmxhZ3MuXG4mIzQzOyAqIEBmbGFnczogcG9pbnRlciB0byB0aGUgZm9saW8gZmxhZ3NcbiYjNDM7ICogQGdlbjogZ2VuZXJhdGlvbiBudW1iZXIsIGJldHdlZW4gMCBhbmQgTFJVX0dFTl9NQVgsIGluY2x1c2l2ZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX3NldF9mbGFncyh1bnNpZ25lZCBsb25nICpmbGFncywgaW50IGdlbilcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuJiM0MztcdFZNX1dBUk5fT05fT05DRShnZW4gXHUwMDNlIExSVV9HRU5fTUFYIHx8IGdlbiBcdTAwM2MgMCk7XG4mIzQzO1x0QlVJTERfQlVHX09OKChMUlVfR0VOX01BWCAmIzQzOyAxKSAhPSBNQVhfTlJfR0VOUyk7XG4mIzQzO1xuJiM0MztcdCpmbGFncyBcdTAwMjY9IH5MUlVfR0VOX01BU0s7XG4mIzQzO1x0KmZsYWdzIHw9IChnZW4gJiM0MzsgMVVMKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRjtcbiYjNDM7fVxuIFxuJiM0MzsvKipcbiYjNDM7ICogbHJ1X3JlZnNfZnJvbV9mbGFncyAtIFJldHVybiBMUlUgcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCBmcm9tIGZvbGlvIGZsYWdzLlxuJiM0MzsgKiBAZmxhZ3M6IGZvbGlvIGZsYWdzXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBscnVfcmVmc19mcm9tX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4mIzQzO3tcbiBcdGlmICghKGZsYWdzIFx1MDAyNiBCSVQoUEdfcmVmZXJlbmNlZCkpKVxuIFx0XHRyZXR1cm4gMDtcbiBcdC8qXG5AQCAtMTU1LDE4ICYjNDM7MTkzLDQ3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gKChmbGFncyBcdTAwMjYgTFJVX1JFRlNfTUFTSykgXHUwMDNlXHUwMDNlIExSVV9SRUZTX1BHT0ZGKSAmIzQzOyAxO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfZ2VuKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzOy8qKlxuJiM0MzsgKiBscnVfcmVmc19zZXRfZmxhZ3MgLSBTZXQgdGhlIExSVSByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IHRvIHNwZWNpZmllZCBmb2xpbyBmbGFncy5cbiYjNDM7ICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFnc1xuJiM0MzsgKiBAcmVmczogcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCBudW1iZXIsIGJldHdlZW4gMCBhbmQgTFJVX1JFRlNfTUFYLCBpbmNsdXNpdmUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X3JlZnNfc2V0X2ZsYWdzKHVuc2lnbmVkIGxvbmcgKmZsYWdzLCB1bnNpZ25lZCBpbnQgcmVmcylcbiYjNDM7e1xuJiM0MztcdFZNX1dBUk5fT05fT05DRShyZWZzIFx1MDAzZSBMUlVfUkVGU19NQVgpO1xuJiM0MztcdEJVSUxEX0JVR19PTihMUlVfUkVGU19NQVggIT0gKExSVV9SRUZTX01BU0sgXHUwMDNlXHUwMDNlIExSVV9SRUZTX1BHT0ZGKSAmIzQzOyAxKTtcbiYjNDM7XG4mIzQzO1x0KmZsYWdzIFx1MDAyNj0gfkxSVV9SRUZTX0ZMQUdTO1xuJiM0MztcdGlmICghcmVmcylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHQqZmxhZ3MgfD0gKEJJVChQR19yZWZlcmVuY2VkKSB8ICgocmVmcyAtIDFVTCkgXHUwMDNjXHUwMDNjIExSVV9SRUZTX1BHT0ZGKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbHJ1X3JlZnNfZnJvbV9mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCByZWZzKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbiBcbi1cdHJldHVybiAoKGZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuJiM0MztcdFx0bHJ1X3JlZnNfc2V0X2ZsYWdzKFx1MDAyNm5ld19mbGFncywgcmVmcyk7XG4mIzQzO1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X2dlbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGxydV9nZW5fZnJvbV9mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9pc19hY3RpdmUoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgZ2VuKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbWF4X3NlcSA9IGxydXZlYy1cdTAwM2VscnVnZW4ubWF4X3NlcTtcbiBcbi1cdFZNX1dBUk5fT05fT05DRShnZW4gXHUwMDNlPSBNQVhfTlJfR0VOUyk7XG4mIzQzO1x0Vk1fV0FSTl9PTl9PTkNFKGdlbiBcdTAwM2UgTFJVX0dFTl9NQVgpO1xuIFxuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIE1JTl9OUl9HRU5TICovXG4gXHRyZXR1cm4gZ2VuID09IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSkgfHwgZ2VuID09IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSAtIDEpO1xuQEAgLTI3MCw3ICYjNDM7MzM3LDcgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fYWRkX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcbiBcdGZsYWdzID0gKGdlbiAmIzQzOyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIE1JTl9OUl9HRU5TIGFib3V0IFBHX2FjdGl2ZSAqL1xuLVx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpO1xuJiM0MztcdHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpO1xuIFxuIFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCAtMSwgZ2VuKTtcbiBcdC8qIGZvciBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoKSAqL1xuQEAgLTI5NSw3ICYjNDM7MzYyLDcgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcbiBcdC8qIGZvciBmb2xpb19taWdyYXRlX2ZsYWdzKCkgKi9cbiBcdGZsYWdzID0gIXJlY2xhaW1pbmcgXHUwMDI2XHUwMDI2IGxydV9nZW5faXNfYWN0aXZlKGxydXZlYywgZ2VuKSA/IEJJVChQR19hY3RpdmUpIDogMDtcbi1cdGZsYWdzID0gc2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfR0VOX01BU0ssIGZsYWdzKTtcbiYjNDM7XHRmbGFncyA9IHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0ssIGZsYWdzKTtcbiBcdGdlbiA9ICgoZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbiBcbiBcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgZ2VuLCAtMSk7XG5AQCAtMzA0LDExICYjNDM7MzcxLDE5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBmb2xpb19taWdyYXRlX3JlZnMgLSBjb3B5IHRoZSByZWZlcmVuY2Ugc3RhdGUgdG8gYSBuZXcgZm9saW9cbiYjNDM7ICogQG5ldzogdGhlIGRlc3RpbmF0aW9uIGZvbGlvXG4mIzQzOyAqIEBvbGQ6IHRoZSBzb3VyY2UgZm9saW9cbiYjNDM7ICpcbiYjNDM7ICogVHJhbnNmZXIgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBAbmV3IGR1cmluZyBtaWdyYXRpb246IHRoZSBNR0xSVVxuJiM0MzsgKiByZWZzIGNvdW50LCBpbmNsdWRpbmcgUEdfcmVmZXJlbmNlZCwgb3IganVzdCBQR19yZWZlcmVuY2VkIGZvciB0aGVcbiYjNDM7ICogYWN0aXZlL2luYWN0aXZlIExSVS5cbiYjNDM7ICovXG4gc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyByZWZzID0gUkVBRF9PTkNFKG9sZC1cdTAwM2VmbGFncy5mKSBcdTAwMjYgTFJVX1JFRlNfTUFTSztcbi1cbi1cdHNldF9tYXNrX2JpdHMoXHUwMDI2bmV3LVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIHJlZnMpO1xuJiM0MztcdEJVSUxEX0JVR19PTihMUlVfUkVGU19NQVNLIFx1MDAyNiBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuJiM0MztcdGZvbGlvX3NldF9scnVfcmVmcyhuZXcsIGZvbGlvX2xydV9yZWZzKG9sZCkpO1xuIH1cbiAjZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cbiBcbkBAIC0zMzksNyAmIzQzOzQxNCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXG4ge1xuLVxuJiM0MztcdGlmIChmb2xpb190ZXN0X3JlZmVyZW5jZWQob2xkKSlcbiYjNDM7XHRcdGZvbGlvX3NldF9yZWZlcmVuY2VkKG5ldyk7XG4gfVxuICNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5pbmRleCA5NGY5YzNmZjU0MTYwLi5kMGI1YzYyMTdkMjU3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuQEAgLTQ5MiwxMSAmIzQzOzQ5MiwxNSBAQCBlbnVtIGxydXZlY19mbGFncyB7XG4gICogZm9saW8tXHUwMDNlZmxhZ3MsIG1hc2tlZCBieSBMUlVfUkVGU19NQVNLLlxuICAqL1xuICNkZWZpbmUgTUFYX05SX1RJRVJTXHRcdDRVXG4mIzQzOyNkZWZpbmUgTFJVX1RJRVJfTUlOXHRcdDBVXG4mIzQzOyNkZWZpbmUgTFJVX1RJRVJfTUFYXHRcdChNQVhfTlJfVElFUlMgLSAxKVxuIFxuICNpZm5kZWYgX19HRU5FUkFUSU5HX0JPVU5EU19IXG4gXG4gI2RlZmluZSBMUlVfR0VOX01BU0tcdFx0KChCSVQoTFJVX0dFTl9XSURUSCkgLSAxKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRilcbiYjNDM7I2RlZmluZSBMUlVfR0VOX01BWFx0XHQoQklUKExSVV9HRU5fV0lEVEggLSAxKSAtIDEpXG4gI2RlZmluZSBMUlVfUkVGU19NQVNLXHRcdCgoQklUKExSVV9SRUZTX1dJRFRIKSAtIDEpIFx1MDAzY1x1MDAzYyBMUlVfUkVGU19QR09GRilcbiYjNDM7I2RlZmluZSBMUlVfUkVGU19NQVhcdFx0QklUKExSVV9SRUZTX1dJRFRIKVxuIFxuIC8qXG4gICogRm9yIGZvbGlvcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMsXG5kaWZmIC0tZ2l0IGEvbW0vZm9saW8uYyBiL21tL2ZvbGlvLmNcbmluZGV4IDU5YzQ3NzEyMGI5YTguLjBhZGZlNGY1ZWY3MmYgMTAwNjQ0XG4tLS0gYS9tbS9mb2xpby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9mb2xpby5jXG5AQCAtMzUzLDI2ICYjNDM7MzUzLDI4IEBAIHN0YXRpYyB2b2lkIF9fbHJ1X2NhY2hlX2FjdGl2YXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXG4gc3RhdGljIHZvaWQgbHJ1X2dlbl9pbmNfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbiYjNDM7XHRpbnQgcmVmcztcbiBcbiBcdGlmIChmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXG4tXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpIHtcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuJiM0MztcdGlmICghZm9saW9fbHJ1X3JlZnMoZm9saW8pKSB7XG4mIzQzO1x0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4gXHRkbyB7XG4tXHRcdGlmICgob2xkX2ZsYWdzIFx1MDAyNiBMUlVfUkVGU19NQVNLKSA9PSBMUlVfUkVGU19NQVNLKSB7XG4mIzQzO1x0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XG4mIzQzO1x0XHRyZWZzID0gbHJ1X3JlZnNfZnJvbV9mbGFncyhvbGRfZmxhZ3MpO1xuJiM0MztcdFx0aWYgKHJlZnMgPT0gTFJVX1JFRlNfTUFYKSB7XG4gXHRcdFx0aWYgKCFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKVxuIFx0XHRcdFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuLVxuLVx0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgJiM0MzsgQklUKExSVV9SRUZTX1BHT0ZGKTtcbi1cdH0gd2hpbGUgKCF0cnlfY21weGNoZyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuJiM0MztcdFx0bHJ1X3JlZnNfc2V0X2ZsYWdzKFx1MDAyNm5ld19mbGFncywgcmVmcyAmIzQzOyAxKTtcbiYjNDM7XHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbkBAIC0zODQsNyAmIzQzOzM4Niw4IEBAIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0aWYgKGdlbiBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTIHwgQklUKFBHX3dvcmtpbmdzZXQpLCAwKTtcbiYjNDM7XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuJiM0MztcdGZvbGlvX2NsZWFyX3dvcmtpbmdzZXQoZm9saW8pO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0c2VxID0gUkVBRF9PTkNFKGZvbGlvX2xydXZlYyhmb2xpbyktXHUwMDNlbHJ1Z2VuLm1pbl9zZXFbdHlwZV0pO1xuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggMWQzMzM5NTIwODA5Zi4uOWQwZWUzZDNiZGE3YyAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jXG5AQCAtMTUyOSwyOCAmIzQzOzE1MjksMTIgQEAgdm9pZCBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LFxuIFx0XHRcdFx0aW50IHppZCwgbG9uZyBucl9wYWdlcylcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XG4tXHR1bnNpZ25lZCBsb25nICpscnVfc2l6ZTtcbi1cdGxvbmcgc2l6ZTtcbiBcbiBcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG4gXHRcdHJldHVybjtcbiBcbiBcdG16ID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7XG4tXHRscnVfc2l6ZSA9IFx1MDAyNm16LVx1MDAzZWxydV96b25lX3NpemVbemlkXVtscnVdO1xuLVxuLVx0aWYgKG5yX3BhZ2VzIFx1MDAzYyAwKVxuLVx0XHQqbHJ1X3NpemUgJiM0Mzs9IG5yX3BhZ2VzO1xuLVxuLVx0c2l6ZSA9ICpscnVfc2l6ZTtcbi1cdGlmIChXQVJOX09OQ0Uoc2l6ZSBcdTAwM2MgMCxcbi1cdFx0XCYjMzQ7JXMoJXAsICVkLCAlbGQpOiBscnVfc2l6ZSAlbGRcXG5cJiMzNDssXG4tXHRcdF9fZnVuY19fLCBscnV2ZWMsIGxydSwgbnJfcGFnZXMsIHNpemUpKSB7XG4tXHRcdFZNX0JVR19PTigxKTtcbi1cdFx0KmxydV9zaXplID0gMDtcbi1cdH1cbi1cbi1cdGlmIChucl9wYWdlcyBcdTAwM2UgMClcbi1cdFx0KmxydV9zaXplICYjNDM7PSBucl9wYWdlcztcbiYjNDM7XHRhdG9taWNfbG9uZ19hZGQobnJfcGFnZXMsIFx1MDAyNm16LVx1MDAzZWxydV96b25lX3NpemVbemlkXVtscnVdKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jXG5pbmRleCAxNWI0NTgzMmJjZmE3Li44MjMwNzMzMjcxMWY0IDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9taWdyYXRlLmNcbkBAIC03NzYsOCAmIzQzOzc3Niw2IEBAIHZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdGludCBjcHVwaWQ7XG4gXG4tXHRpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSlcbi1cdFx0Zm9saW9fc2V0X3JlZmVyZW5jZWQobmV3Zm9saW8pO1xuIFx0aWYgKGZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKVxuIFx0XHRmb2xpb19tYXJrX3VwdG9kYXRlKG5ld2ZvbGlvKTtcbiBcdGlmIChmb2xpb190ZXN0X2NsZWFyX2FjdGl2ZShmb2xpbykpIHtcbkBAIC04MDcsNyAmIzQzOzgwNSw5IEBAIHZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0aWYgKGZvbGlvX3Rlc3RfaWRsZShmb2xpbykpXG4gXHRcdGZvbGlvX3NldF9pZGxlKG5ld2ZvbGlvKTtcbiBcbiYjNDM7XHQvKiBDb3B5IHRoZSByZWZlcmVuY2Ugc3RhdGUsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkICovXG4gXHRmb2xpb19taWdyYXRlX3JlZnMobmV3Zm9saW8sIGZvbGlvKTtcbiYjNDM7XG4gXHQvKlxuIFx0ICogQ29weSBOVU1BIGluZm9ybWF0aW9uIHRvIHRoZSBuZXcgcGFnZSwgdG8gcHJldmVudCBvdmVyLWVhZ2VyXG4gXHQgKiBmdXR1cmUgbWlncmF0aW9ucyBvZiB0aGlzIHNhbWUgcGFnZS5cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCBjMTQwNGE1OTUyM2Q2Li43ZTNhZTBjNmNiYTNiIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtODQzLDE5ICYjNDM7ODQzLDIyIEBAIHN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiBcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpIHtcbiBcdFx0LyogQWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuICovXG4gXHRcdGlmIChpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIHZtYV9mbGFncykpIHtcbi1cdFx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfd29ya2luZ3NldCkpO1xuJiM0MztcdFx0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuJiM0MztcdFx0XHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHRcdH1cbiBcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuJiM0MztcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuIFx0LyogUHJvbW90ZSBvbiBzZWNvbmQgYWNjZXNzICovXG4tXHRpZiAoZm9saW9fbHJ1X3JlZnMoZm9saW8pIFx1MDAzZSAxKVxuLVx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfd29ya2luZ3NldCkpO1xuLVx0ZWxzZVxuJiM0MztcdGlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgXHUwMDNlIDEpIHtcbiYjNDM7XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4mIzQzO1x0XHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XG4mIzQzO1x0fSBlbHNlIHtcbiBcdFx0Zm9saW9fbWFya19hY2Nlc3NlZChmb2xpbyk7XG4mIzQzO1x0fVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuICNlbHNlXG5AQCAtMzE5NSw4ICYjNDM7MzE5OCw4IEBAIHN0cnVjdCBjdHJsX3BvcyB7XG4gXHRpbnQgZ2FpbjtcbiB9O1xuIFxuLXN0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXIsIGludCBnYWluLFxuLVx0XHRcdCAgc3RydWN0IGN0cmxfcG9zICpwb3MpXG4mIzQzO3N0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXJfbWluLFxuJiM0MztcdFx0XHQgIGludCB0aWVyX21heCwgaW50IGdhaW4sIHN0cnVjdCBjdHJsX3BvcyAqcG9zKVxuIHtcbiBcdGludCBpO1xuIFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5AQCAtMzIwNSw3ICYjNDM7MzIwOCw3IEBAIHN0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXIsIGludCBnYWluLFxuIFx0cG9zLVx1MDAzZWdhaW4gPSBnYWluO1xuIFx0cG9zLVx1MDAzZXJlZmF1bHRlZCA9IHBvcy1cdTAwM2V0b3RhbCA9IDA7XG4gXG4tXHRmb3IgKGkgPSB0aWVyICUgTUFYX05SX1RJRVJTOyBpIFx1MDAzYz0gbWluKHRpZXIsIE1BWF9OUl9USUVSUyAtIDEpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdGZvciAoaSA9IHRpZXJfbWluOyBpIFx1MDAzYz0gdGllcl9tYXg7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHBvcy1cdTAwM2VyZWZhdWx0ZWQgJiM0Mzs9IGxydWdlbi1cdTAwM2VhdmdfcmVmYXVsdGVkW3R5cGVdW2ldICYjNDM7XG4gXHRcdFx0XHQgIGF0b21pY19sb25nX3JlYWQoXHUwMDI2bHJ1Z2VuLVx1MDAzZXJlZmF1bHRlZFtoaXN0XVt0eXBlXVtpXSk7XG4gXHRcdHBvcy1cdTAwM2V0b3RhbCAmIzQzOz0gbHJ1Z2VuLVx1MDAzZWF2Z190b3RhbFt0eXBlXVtpXSAmIzQzO1xuQEAgLTMyNjYsMTEgJiM0MzszMjY5LDExIEBAIHN0YXRpYyBib29sIHBvc2l0aXZlX2N0cmxfZXJyKHN0cnVjdCBjdHJsX3BvcyAqc3AsIHN0cnVjdCBjdHJsX3BvcyAqcHYpXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiBcbiAvKiBwcm9tb3RlIHBhZ2VzIGFjY2Vzc2VkIHRocm91Z2ggcGFnZSB0YWJsZXMgKi9cbi1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiYjNDM7c3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBpbnQgKmlzX2ZpbGUsXG4mIzQzO1x0XHRcdCAgICBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4tXG4tXHRWTV9XQVJOX09OX09OQ0UoZ2VuIFx1MDAzZT0gTUFYX05SX0dFTlMpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4mIzQzO1x0aW50IG9sZF9nZW47XG4gXG4gXHQvKlxuIFx0ICogU2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTLCBhbmQgYWN0aXZhdGUgZmlsZS1iYWNrZWRcbkBAIC0zMjc5LDIwICYjNDM7MzI4MiwyNSBAQCBzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYVxuIFx0ICovXG4gXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pIFx1MDAyNlx1MDAyNlxuIFx0ICAgICFpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIHZtYV9mbGFncykpIHtcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuJiM0MztcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcbiBcdFx0cmV0dXJuIC0xO1xuIFx0fVxuIFxuIFx0ZG8ge1xuJiM0MztcdFx0b2xkX2dlbiA9IGxydV9nZW5fZnJvbV9mbGFncyhvbGRfZmxhZ3MpO1xuJiM0MztcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuJiM0MztcbiBcdFx0LyogbHJ1X2dlbl9kZWxfZm9saW8oKSBoYXMgaXNvbGF0ZWQgdGhpcyBwYWdlPyAqL1xuLVx0XHRpZiAoIShvbGRfZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykpXG4tXHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcdFx0aWYgKG9sZF9nZW4gXHUwMDNjIDApXG4mIzQzO1x0XHRcdGJyZWFrO1xuIFxuLVx0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgXHUwMDI2IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpO1xuLVx0XHRuZXdfZmxhZ3MgfD0gKChnZW4gJiM0MzsgMVVMKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRikgfCBCSVQoUEdfd29ya2luZ3NldCk7XG4tXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiYjNDM7XHRcdGxydV9nZW5fc2V0X2ZsYWdzKFx1MDAyNm5ld19mbGFncywgbmV3X2dlbik7XG4mIzQzO1x0XHRscnVfcmVmc19zZXRfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCAwKTtcbiYjNDM7XHRcdG5ld19mbGFncyB8PSBCSVQoUEdfd29ya2luZ3NldCk7XG4mIzQzO1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiBcbi1cdHJldHVybiAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuJiM0MztcdCppc19maWxlID0gZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUoXHUwMDI2b2xkX2ZsYWdzKTtcbiYjNDM7XHRyZXR1cm4gb2xkX2dlbjtcbiB9XG4gXG4gLyogcHJvdGVjdCBwYWdlcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMgKi9cbkBAIC0zMzAwLDIyICYjNDM7MzMwOCwyNSBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xuIFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG4tXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuLVx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbi1cbi1cdFZNX1dBUk5fT05fT05DRV9GT0xJTyghKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSwgZm9saW8pO1xuJiM0MztcdGludCBuZXdfZ2VuLCBvbGRfZ2VuLCBtaW5fZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbiBcbiBcdGRvIHtcbi1cdFx0bmV3X2dlbiA9ICgob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4tXHRcdC8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqL1xuLVx0XHRpZiAobmV3X2dlbiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG5ld19nZW4gIT0gb2xkX2dlbilcbi1cdFx0XHRyZXR1cm4gbmV3X2dlbjtcbiYjNDM7XHRcdG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fZmxhZ3Mob2xkX2ZsYWdzKTtcbiYjNDM7XHRcdC8qIFRoaXMgaGVscGVyIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgZm9yIG9mZi1saXN0IGZvbGlvcyAqL1xuJiM0MztcdFx0Vk1fV0FSTl9PTl9PTkNFKG9sZF9nZW4gXHUwMDNjIDApO1xuJiM0MztcdFx0aWYgKG9sZF9nZW4gXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiBtaW5fZ2VuO1xuIFxuLVx0XHRuZXdfZ2VuID0gKG9sZF9nZW4gJiM0MzsgMSkgJSBNQVhfTlJfR0VOUztcbiYjNDM7XHRcdC8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqL1xuJiM0MztcdFx0aWYgKG9sZF9nZW4gIT0gbWluX2dlbilcbiYjNDM7XHRcdFx0cmV0dXJuIG9sZF9nZW47XG4gXG4tXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncyBcdTAwMjYgfihMUlVfR0VOX01BU0sgfCBMUlVfUkVGU19GTEFHUyk7XG4tXHRcdG5ld19mbGFncyB8PSAobmV3X2dlbiAmIzQzOyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuLVx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4mIzQzO1x0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XG4mIzQzO1x0XHRuZXdfZ2VuID0gKG1pbl9nZW4gJiM0MzsgMSkgJSBNQVhfTlJfR0VOUztcbiYjNDM7XHRcdGxydV9nZW5fc2V0X2ZsYWdzKFx1MDAyNm5ld19mbGFncywgbmV3X2dlbik7XG4mIzQzO1x0XHRscnVfcmVmc19zZXRfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCAwKTtcbiYjNDM7XHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuIFxuIFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcbiBcbkBAIC0zMzIzLDkgJiM0MzszMzM0LDggQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbiB9XG4gXG4gc3RhdGljIHZvaWQgdXBkYXRlX2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IGZvbGlvICpmb2xpbyxcbi1cdFx0XHQgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4pXG4mIzQzO1x0XHRcdCAgICAgIGludCBvbGRfZ2VuLCBpbnQgbmV3X2dlbiwgaW50IHR5cGUpXG4ge1xuLVx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG4gXHRpbnQgem9uZSA9IGZvbGlvX3pvbmVudW0oZm9saW8pO1xuIFx0aW50IGRlbHRhID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIFxuQEAgLTM1MTIsMjIgJiM0MzszNTIyLDI0IEBAIHN0YXRpYyBib29sIHN1aXRhYmxlX3RvX3NjYW4oaW50IHRvdGFsLCBpbnQgeW91bmcpXG4gfVxuIFxuIHN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgYm9vbCBkaXJ0eSlcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIGRpcnR5KVxuIHtcbi1cdGludCBvbGRfZ2VuO1xuJiM0MztcdGludCBuZXdfZ2VuLCBvbGRfZ2VuLCBmaWxlO1xuIFxuIFx0aWYgKCFmb2xpbylcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdG5ld19nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKFJFQURfT05DRShscnV2ZWMtXHUwMDNlbHJ1Z2VuLm1heF9zZXEpKTtcbiYjNDM7XG4gXHRpZiAoZGlydHkgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgXHUwMDI2XHUwMDI2IGZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHQgICAgICAhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSlcbiBcdFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG4gXG4gXHRpZiAod2Fsaykge1xuLVx0XHRvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgXHUwMDI2dm1hLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRcdG9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuLCBcdTAwMjZmaWxlLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpO1xuIFx0XHRpZiAob2xkX2dlbiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG9sZF9nZW4gIT0gbmV3X2dlbilcbi1cdFx0XHR1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XG4mIzQzO1x0XHRcdHVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuLCBmaWxlKTtcbiBcdH0gZWxzZSBpZiAobHJ1X2dlbl9zZXRfcmVmcyhmb2xpbywgXHUwMDI2dm1hLVx1MDAzZWZsYWdzKSkge1xuIFx0XHRvbGRfZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7XG4gXHRcdGlmIChvbGRfZ2VuIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgb2xkX2dlbiAhPSBuZXdfZ2VuKVxuQEAgLTM1NDksOCAmIzQzOzM1NjEsNiBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVx1MDAzZXByaXZhdGU7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay1cdTAwM2VscnV2ZWMpO1xuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdCh3YWxrLVx1MDAzZWxydXZlYyk7XG4tXHRERUZJTkVfTUFYX1NFUSh3YWxrLVx1MDAzZWxydXZlYyk7XG4tXHRpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcbiBcdHVuc2lnbmVkIGludCBucjtcbiBcdHBtZF90IHBtZHZhbDtcbiBcbkBAIC0zNjAxLDcgJiM0MzszNjExLDcgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChsYXN0ICE9IGZvbGlvKSB7XG4tXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuJiM0MztcdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLVx1MDAzZXZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC0zNjE0LDcgJiM0MzszNjI0LDcgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdHdhbGstXHUwMDNlbW1fc3RhdHNbTU1fTEVBRl9ZT1VOR10gJiM0Mzs9IG5yO1xuIFx0fVxuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuJiM0MztcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCB3YWxrLVx1MDAzZWxydXZlYywgbGFzdCwgZGlydHkpO1xuIFx0bGFzdCA9IE5VTEw7XG4gXG4gXHRpZiAoaSBcdTAwM2MgUFRSU19QRVJfUFRFIFx1MDAyNlx1MDAyNiBnZXRfbmV4dF92bWEoUE1EX01BU0ssIFBBR0VfU0laRSwgYXJncywgXHUwMDI2c3RhcnQsIFx1MDAyNmVuZCkpXG5AQCAtMzYzNyw4ICYjNDM7MzY0Nyw2IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhXG4gXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cdTAwM2Vwcml2YXRlO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKHdhbGstXHUwMDNlbHJ1dmVjKTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQod2Fsay1cdTAwM2VscnV2ZWMpO1xuLVx0REVGSU5FX01BWF9TRVEod2Fsay1cdTAwM2VscnV2ZWMpO1xuLVx0aW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0UocHVkX2xlYWYoKnB1ZCkpO1xuIFxuQEAgLTM2OTIsNyAmIzQzOzM3MDAsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0XHRcdGdvdG8gbmV4dDtcbiBcbiBcdFx0aWYgKGxhc3QgIT0gZm9saW8pIHtcbi1cdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuJiM0MztcdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIHdhbGstXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXG4gXHRcdFx0bGFzdCA9IGZvbGlvO1xuIFx0XHRcdGRpcnR5ID0gZmFsc2U7XG5AQCAtMzcwNiw3ICYjNDM7MzcxNCw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhXG4gXHRcdGkgPSBpIFx1MDAzZSBNSU5fTFJVX0JBVENIID8gMCA6IGZpbmRfbmV4dF9iaXQoYml0bWFwLCBNSU5fTFJVX0JBVENILCBpKSAmIzQzOyAxO1xuIFx0fSB3aGlsZSAoaSBcdTAwM2M9IE1JTl9MUlVfQkFUQ0gpO1xuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbiYjNDM7XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIHdhbGstXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXG4gXHRsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTtcbiBcdHNwaW5fdW5sb2NrKHB0bCk7XG5AQCAtNDI3MCw4ICYjNDM7NDI3OCw2IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBmb2xpb19wZ2RhdChmb2xpbyk7XG4gXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGU7XG4tXHR1bnNpZ25lZCBsb25nIG1heF9zZXE7XG4tXHRpbnQgZ2VuO1xuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChwdm13LVx1MDAzZXB0bCk7XG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF9scnUoZm9saW8pLCBmb2xpbyk7XG5AQCAtNDMwOCw4ICYjNDM7NDMxNCw2IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcbiBcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XG4gXHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpO1xuLVx0bWF4X3NlcSA9IFJFQURfT05DRSgobHJ1dmVjKS1cdTAwM2VscnVnZW4ubWF4X3NlcSk7XG4tXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xuIFx0bW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcbiBcbiBcdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XG5AQCAtNDM0MSw3ICYjNDM7NDM0NSw3IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKGxhc3QgIT0gZm9saW8pIHtcbi1cdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuJiM0MztcdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxydXZlYywgbGFzdCwgZGlydHkpO1xuIFxuIFx0XHRcdGxhc3QgPSBmb2xpbztcbiBcdFx0XHRkaXJ0eSA9IGZhbHNlO1xuQEAgLTQzNTMsMTMgJiM0Mzs0MzU3LDE0IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdFx0eW91bmcgJiM0Mzs9IG5yO1xuIFx0fVxuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbiYjNDM7XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxydXZlYywgbGFzdCwgZGlydHkpO1xuIFxuIFx0bGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7XG4gXG4gXHQvKiBmZWVkYmFjayBmcm9tIHJtYXAgd2Fsa2VycyB0byBwYWdlIHRhYmxlIHdhbGtlcnMgKi9cbiBcdGlmIChtbV9zdGF0ZSBcdTAwMjZcdTAwMjYgc3VpdGFibGVfdG9fc2NhbihpLCB5b3VuZykpXG4tXHRcdHVwZGF0ZV9ibG9vbV9maWx0ZXIobW1fc3RhdGUsIG1heF9zZXEsIHB2bXctXHUwMDNlcG1kKTtcbiYjNDM7XHRcdHVwZGF0ZV9ibG9vbV9maWx0ZXIobW1fc3RhdGUsIFJFQURfT05DRShscnV2ZWMtXHUwMDNlbHJ1Z2VuLm1heF9zZXEpLFxuJiM0MztcdFx0XHRcdCAgICBwdm13LVx1MDAzZXBtZCk7XG4gXG4gXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4gXG5AQCAtNDcxMSw3ICYjNDM7NDcxNiw3IEBAIHN0YXRpYyBib29sIGlzb2xhdGVfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2NhXG4gXG4gXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi9cbiBcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSlcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCAwKTtcbiYjNDM7XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4gXG4gXHRzdWNjZXNzID0gbHJ1X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7XG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIXN1Y2Nlc3MsIGZvbGlvKTtcbkBAIC00ODA0LDkgJiM0Mzs0ODA5LDkgQEAgc3RhdGljIGludCBnZXRfdGllcl9pZHgoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSlcbiBcdCAqIFRoaXMgdmFsdWUgaXMgY2hvc2VuIGJlY2F1c2UgYW55IG90aGVyIHRpZXIgd291bGQgaGF2ZSBhdCBsZWFzdCB0d2ljZVxuIFx0ICogYXMgbWFueSByZWZhdWx0cyBhcyB0aGUgZmlyc3QgdGllci5cbiBcdCAqL1xuLVx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIDAsIDIsIFx1MDAyNnNwKTtcbi1cdGZvciAodGllciA9IDE7IHRpZXIgXHUwMDNjIE1BWF9OUl9USUVSUzsgdGllciYjNDM7JiM0MzspIHtcbi1cdFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIDMsIFx1MDAyNnB2KTtcbiYjNDM7XHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NSU4sIDIsIFx1MDAyNnNwKTtcbiYjNDM7XHRmb3IgKHRpZXIgPSBMUlVfVElFUl9NSU4gJiM0MzsgMTsgdGllciBcdTAwM2M9IExSVV9USUVSX01BWDsgdGllciYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0aWVyLCB0aWVyLCAzLCBcdTAwMjZwdik7XG4gXHRcdGlmICghcG9zaXRpdmVfY3RybF9lcnIoXHUwMDI2c3AsIFx1MDAyNnB2KSlcbiBcdFx0XHRicmVhaztcbiBcdH1cbkBAIC00ODI3LDggJiM0Mzs0ODMyLDEwIEBAIHN0YXRpYyBpbnQgZ2V0X3R5cGVfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxuIFx0ICogQ29tcGFyZSB0aGUgc3VtIG9mIGFsbCB0aWVycyBvZiBhbm9uIHdpdGggdGhhdCBvZiBmaWxlIHRvIGRldGVybWluZVxuIFx0ICogd2hpY2ggdHlwZSB0byBzY2FuLlxuIFx0ICovXG4tXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBNQVhfTlJfVElFUlMsIHN3YXBwaW5lc3MsIFx1MDAyNnNwKTtcbi1cdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIE1BWF9OUl9USUVSUywgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCBcdTAwMjZwdik7XG4mIzQzO1x0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fQU5PTiwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NQVgsXG4mIzQzO1x0XHQgICAgICBzd2FwcGluZXNzLCBcdTAwMjZzcCk7XG4mIzQzO1x0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NQVgsXG4mIzQzO1x0XHQgICAgICBNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3MsIFx1MDAyNnB2KTtcbiBcbiBcdHJldHVybiBwb3NpdGl2ZV9jdHJsX2VycihcdTAwMjZzcCwgXHUwMDI2cHYpO1xuIH1cbkBAIC00OTI3LDggJiM0Mzs0OTM0LDEwIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHR9XG4gXG4gXHRcdC8qIGRvbiYjMzk7dCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqL1xuLVx0XHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pXG4tXHRcdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX2FjdGl2ZSkpO1xuJiM0MztcdFx0aWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKSB7XG4mIzQzO1x0XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4mIzQzO1x0XHRcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuIFx0bW92ZV9mb2xpb3NfdG9fbHJ1KFx1MDAyNmxpc3QpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA1OjQ3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplJiMzNDssCiAgICAmIzM0O2ZvbGlvX21pZ3JhdGVfZmxhZ3MmIzM0OywKICAgICYjMzQ7bHJ1X2dlbl9sb29rX2Fyb3VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIGltcGxlbWVudGF0aW9uLCBjaGFuZ2luZyBob3cgTFJVIGdlbmVyYXRpb24gYW5kIHJlZmVyZW5jZSBmbGFncyBhcmUgc3RvcmVkIGluIGBmb2xpby1cdTAwM2VmbGFnc2AuIEl0IHJlcGxhY2VzIGRpcmVjdCBiaXRtYXNrIG9wZXJhdGlvbnMgd2l0aCBuZXcgaGVscGVyIGZ1bmN0aW9ucyBhbmQgY2hhbmdlcyBgbHJ1X3pvbmVfc2l6ZWAgaW4gYHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlYCB0byB1c2UgYGF0b21pY19sb25nX3RgIGluc3RlYWQgb2YgYHVuc2lnbmVkIGxvbmdgLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzLCBpbmNsdWRpbmcgcGFnZSBtaWdyYXRpb24sIExSVSBzaXplIHRyYWNraW5nLCBhbmQgcGFnZSB0YWJsZSBzY2FubmluZy4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsbHkgYWx0ZXJzIGhvdyBmb2xpb3MgYXJlIHRyYWNrZWQgYW5kIGFnZWQgaW4gdGhlIExSVSBsaXN0cywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4YTkyNWQyNTQ2YzUzOGQ0YjNiMGRjMTc1NWNhYWM4OTQ5ODlkOWEwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTggMDU6NDc6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCmluZGV4IGU3OGJjOThhYjIyOWIuLmIxM2UzZjA1NjMxOTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCkBAIC0xMTMsNyAmIzQzOzExMyw3IEBAIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlIHsKIAkvKiBGaWVsZHMgd2hpY2ggZ2V0IHVwZGF0ZWQgb2Z0ZW4gYXQgdGhlIGVuZC4gKi8KIAlzdHJ1Y3QgbHJ1dmVjCQlscnV2ZWM7CiAJQ0FDSEVMSU5FX1BBRERJTkcoX3BhZDJfKTsKLQl1bnNpZ25lZCBsb25nCQlscnVfem9uZV9zaXplW01BWF9OUl9aT05FU11bTlJfTFJVX0xJU1RTXTsKJiM0MzsJYXRvbWljX2xvbmdfdAkJbHJ1X3pvbmVfc2l6ZVtNQVhfTlJfWk9ORVNdW05SX0xSVV9MSVNUU107CiAJc3RydWN0IG1lbV9jZ3JvdXBfcmVjbGFpbV9pdGVyCWl0ZXI7CiAKIAkvKgpAQCAtODk3LDEwICYjNDM7ODk3LDE1IEBAIHN0YXRpYyBpbmxpbmUKIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJCWVudW0gbHJ1X2xpc3QgbHJ1LCBpbnQgem9uZV9pZHgpCiB7CiYjNDM7CWxvbmcgdmFsOwogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejsKIAogCW16ID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7Ci0JcmV0dXJuIFJFQURfT05DRShtei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7CiYjNDM7CXZhbCA9IGF0b21pY19sb25nX3JlYWQoJmFtcDttei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UodmFsICZsdDsgMCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIHZhbDsKIH0KIAogdm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaAppbmRleCA2MjFjODY1M2Q4ZjdlLi40YmIzOTBkOTUxNmVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmgKQEAgLTEwLDYgJiM0MzsxMCwxMSBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3VzZXJmYXVsdGZkX2suaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9sZWFmb3BzLmgmZ3Q7CiAKJiM0MztzdGF0aWMgaW5saW5lIGludCBmb2xpb19mbGFnc19pc19maWxlX2xydShjb25zdCB1bnNpZ25lZCBsb25nICpmbGFncykKJiM0Mzt7CiYjNDM7CXJldHVybiAhdGVzdF9iaXQoUEdfc3dhcGJhY2tlZCwgZmxhZ3MpOwomIzQzO30KJiM0MzsKIC8qKgogICogZm9saW9faXNfZmlsZV9scnUgLSBTaG91bGQgdGhlIGZvbGlvIGJlIG9uIGEgZmlsZSBMUlUgb3IgYW5vbiBMUlU/CiAgKiBAZm9saW86IFRoZSBmb2xpbyB0byB0ZXN0LgpAQCAtMjcsNyAmIzQzOzMyLDcgQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgZm9saW9faXNfZmlsZV9scnUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKLQlyZXR1cm4gIWZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbyk7CiYjNDM7CXJldHVybiBmb2xpb19mbGFnc19pc19maWxlX2xydShjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpOwogfQogCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX191cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLApAQCAtMTQyLDEwICYjNDM7MTQ3LDQzIEBAIHN0YXRpYyBpbmxpbmUgaW50IGxydV90aWVyX2Zyb21fcmVmcyhpbnQgcmVmcywgYm9vbCB3b3JraW5nc2V0KQogCXJldHVybiB3b3JraW5nc2V0ID8gTUFYX05SX1RJRVJTIC0gMSA6IG9yZGVyX2Jhc2VfMihyZWZzKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MzsvKioKJiM0MzsgKiBscnVfZ2VuX2Zyb21fZmxhZ3MgLSBSZXR1cm4gdGhlIExSVSBnZW5lcmF0aW9uIG51bWJlciBmcm9tIGZvbGlvIGZsYWdzLgomIzQzOyAqIEBmbGFnczogZm9saW8gZmxhZ3MKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgTFJVX0dFTl9NQVgsIGluY2x1c2l2ZS4gUmV0dXJucyAtMSBpZiB0aGUKJiM0MzsgKiBmbGFncyBpbmRpY2F0ZSB0aGUgZm9saW8gaXMgb2ZmIHRoZSBsaXN0IChlLmcuLCBpc29sYXRlZCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBpbnQgbHJ1X2dlbl9mcm9tX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiYjNDM7ewomIzQzOwlpbnQgZ2VuID0gKChmbGFncyAmYW1wOyBMUlVfR0VOX01BU0spICZndDsmZ3Q7IExSVV9HRU5fUEdPRkYpOwomIzQzOwomIzQzOwlCVUlMRF9CVUdfT04oTFJVX0dFTl9NQVNLICZhbXA7IExSVV9SRUZTX01BU0spOwomIzQzOwlnZW4gLT0gMTsKJiM0MzsJVk1fV0FSTl9PTl9PTkNFKGdlbiAhPSAtMSAmYW1wOyZhbXA7IGdlbiAmZ3Q7IExSVV9HRU5fTUFYKTsKJiM0MzsJcmV0dXJuIGdlbjsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogbHJ1X2dlbl9zZXRfZmxhZ3MgLSBTZXQgdGhlIExSVSBnZW5lcmF0aW9uIG51bWJlciB0byBzcGVjaWZpZWQgZm9saW8gZmxhZ3MuCiYjNDM7ICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFncwomIzQzOyAqIEBnZW46IGdlbmVyYXRpb24gbnVtYmVyLCBiZXR3ZWVuIDAgYW5kIExSVV9HRU5fTUFYLCBpbmNsdXNpdmUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5fc2V0X2ZsYWdzKHVuc2lnbmVkIGxvbmcgKmZsYWdzLCBpbnQgZ2VuKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwomIzQzOwlWTV9XQVJOX09OX09OQ0UoZ2VuICZndDsgTFJVX0dFTl9NQVggfHwgZ2VuICZsdDsgMCk7CiYjNDM7CUJVSUxEX0JVR19PTigoTFJVX0dFTl9NQVggJiM0MzsgMSkgIT0gTUFYX05SX0dFTlMpOwomIzQzOwomIzQzOwkqZmxhZ3MgJmFtcDs9IH5MUlVfR0VOX01BU0s7CiYjNDM7CSpmbGFncyB8PSAoZ2VuICYjNDM7IDFVTCkgJmx0OyZsdDsgTFJVX0dFTl9QR09GRjsKJiM0Mzt9CiAKJiM0MzsvKioKJiM0MzsgKiBscnVfcmVmc19mcm9tX2ZsYWdzIC0gUmV0dXJuIExSVSByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IGZyb20gZm9saW8gZmxhZ3MuCiYjNDM7ICogQGZsYWdzOiBmb2xpbyBmbGFncwomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGxydV9yZWZzX2Zyb21fZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncykKJiM0Mzt7CiAJaWYgKCEoZmxhZ3MgJmFtcDsgQklUKFBHX3JlZmVyZW5jZWQpKSkKIAkJcmV0dXJuIDA7CiAJLyoKQEAgLTE1NSwxOCAmIzQzOzE5Myw0NyBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXJldHVybiAoKGZsYWdzICZhbXA7IExSVV9SRUZTX01BU0spICZndDsmZ3Q7IExSVV9SRUZTX1BHT0ZGKSAmIzQzOyAxOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfZ2VuKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7LyoqCiYjNDM7ICogbHJ1X3JlZnNfc2V0X2ZsYWdzIC0gU2V0IHRoZSBMUlUgcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCB0byBzcGVjaWZpZWQgZm9saW8gZmxhZ3MuCiYjNDM7ICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFncwomIzQzOyAqIEByZWZzOiByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IG51bWJlciwgYmV0d2VlbiAwIGFuZCBMUlVfUkVGU19NQVgsIGluY2x1c2l2ZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X3JlZnNfc2V0X2ZsYWdzKHVuc2lnbmVkIGxvbmcgKmZsYWdzLCB1bnNpZ25lZCBpbnQgcmVmcykKJiM0Mzt7CiYjNDM7CVZNX1dBUk5fT05fT05DRShyZWZzICZndDsgTFJVX1JFRlNfTUFYKTsKJiM0MzsJQlVJTERfQlVHX09OKExSVV9SRUZTX01BWCAhPSAoTFJVX1JFRlNfTUFTSyAmZ3Q7Jmd0OyBMUlVfUkVGU19QR09GRikgJiM0MzsgMSk7CiYjNDM7CiYjNDM7CSpmbGFncyAmYW1wOz0gfkxSVV9SRUZTX0ZMQUdTOwomIzQzOwlpZiAoIXJlZnMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CSpmbGFncyB8PSAoQklUKFBHX3JlZmVyZW5jZWQpIHwgKChyZWZzIC0gMVVMKSAmbHQ7Jmx0OyBMUlVfUkVGU19QR09GRikpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIGxydV9yZWZzX2Zyb21fZmxhZ3MoUkVBRF9PTkNFKCpjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgcmVmcykKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLSZndDtmbGFncy5mKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTsKIAotCXJldHVybiAoKGZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwomIzQzOwlkbyB7CiYjNDM7CQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7CiYjNDM7CQlscnVfcmVmc19zZXRfZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIHJlZnMpOwomIzQzOwl9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CXJldHVybiBscnVfZ2VuX2Zyb21fZmxhZ3MoUkVBRF9PTkNFKCpjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGxydV9nZW5faXNfYWN0aXZlKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IGdlbikKIHsKIAl1bnNpZ25lZCBsb25nIG1heF9zZXEgPSBscnV2ZWMtJmd0O2xydWdlbi5tYXhfc2VxOwogCi0JVk1fV0FSTl9PTl9PTkNFKGdlbiAmZ3Q7PSBNQVhfTlJfR0VOUyk7CiYjNDM7CVZNX1dBUk5fT05fT05DRShnZW4gJmd0OyBMUlVfR0VOX01BWCk7CiAKIAkvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUlOX05SX0dFTlMgKi8KIAlyZXR1cm4gZ2VuID09IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSkgfHwgZ2VuID09IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSAtIDEpOwpAQCAtMjcwLDcgJiM0MzszMzcsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9hZGRfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCWdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTsKIAlmbGFncyA9IChnZW4gJiM0MzsgMVVMKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGOwogCS8qIHNlZSB0aGUgY29tbWVudCBvbiBNSU5fTlJfR0VOUyBhYm91dCBQR19hY3RpdmUgKi8KLQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9HRU5fTUFTSyB8IEJJVChQR19hY3RpdmUpLCBmbGFncyk7CiYjNDM7CXNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpOwogCiAJbHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCAtMSwgZ2VuKTsKIAkvKiBmb3IgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKCkgKi8KQEAgLTI5NSw3ICYjNDM7MzYyLDcgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywKIAogCS8qIGZvciBmb2xpb19taWdyYXRlX2ZsYWdzKCkgKi8KIAlmbGFncyA9ICFyZWNsYWltaW5nICZhbXA7JmFtcDsgbHJ1X2dlbl9pc19hY3RpdmUobHJ1dmVjLCBnZW4pID8gQklUKFBHX2FjdGl2ZSkgOiAwOwotCWZsYWdzID0gc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfR0VOX01BU0ssIGZsYWdzKTsKJiM0MzsJZmxhZ3MgPSBzZXRfbWFza19iaXRzKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgTFJVX0dFTl9NQVNLLCBmbGFncyk7CiAJZ2VuID0gKChmbGFncyAmYW1wOyBMUlVfR0VOX01BU0spICZndDsmZ3Q7IExSVV9HRU5fUEdPRkYpIC0gMTsKIAogCWxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgZ2VuLCAtMSk7CkBAIC0zMDQsMTEgJiM0MzszNzEsMTkgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywKIAlyZXR1cm4gdHJ1ZTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGZvbGlvX21pZ3JhdGVfcmVmcyAtIGNvcHkgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBhIG5ldyBmb2xpbwomIzQzOyAqIEBuZXc6IHRoZSBkZXN0aW5hdGlvbiBmb2xpbwomIzQzOyAqIEBvbGQ6IHRoZSBzb3VyY2UgZm9saW8KJiM0MzsgKgomIzQzOyAqIFRyYW5zZmVyIHRoZSByZWZlcmVuY2Ugc3RhdGUgdG8gQG5ldyBkdXJpbmcgbWlncmF0aW9uOiB0aGUgTUdMUlUKJiM0MzsgKiByZWZzIGNvdW50LCBpbmNsdWRpbmcgUEdfcmVmZXJlbmNlZCwgb3IganVzdCBQR19yZWZlcmVuY2VkIGZvciB0aGUKJiM0MzsgKiBhY3RpdmUvaW5hY3RpdmUgTFJVLgomIzQzOyAqLwogc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpCiB7Ci0JdW5zaWduZWQgbG9uZyByZWZzID0gUkVBRF9PTkNFKG9sZC0mZ3Q7ZmxhZ3MuZikgJmFtcDsgTFJVX1JFRlNfTUFTSzsKLQotCXNldF9tYXNrX2JpdHMoJmFtcDtuZXctJmd0O2ZsYWdzLmYsIExSVV9SRUZTX01BU0ssIHJlZnMpOwomIzQzOwlCVUlMRF9CVUdfT04oTFJVX1JFRlNfTUFTSyAmYW1wOyBCSVQoUEdfcmVmZXJlbmNlZCkpOwomIzQzOwlmb2xpb19zZXRfbHJ1X3JlZnMobmV3LCBmb2xpb19scnVfcmVmcyhvbGQpKTsKIH0KICNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqLwogCkBAIC0zMzksNyAmIzQzOzQxNCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKQogewotCiYjNDM7CWlmIChmb2xpb190ZXN0X3JlZmVyZW5jZWQob2xkKSkKJiM0MzsJCWZvbGlvX3NldF9yZWZlcmVuY2VkKG5ldyk7CiB9CiAjZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKaW5kZXggOTRmOWMzZmY1NDE2MC4uZDBiNWM2MjE3ZDI1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCkBAIC00OTIsMTEgJiM0Mzs0OTIsMTUgQEAgZW51bSBscnV2ZWNfZmxhZ3MgewogICogZm9saW8tJmd0O2ZsYWdzLCBtYXNrZWQgYnkgTFJVX1JFRlNfTUFTSy4KICAqLwogI2RlZmluZSBNQVhfTlJfVElFUlMJCTRVCiYjNDM7I2RlZmluZSBMUlVfVElFUl9NSU4JCTBVCiYjNDM7I2RlZmluZSBMUlVfVElFUl9NQVgJCShNQVhfTlJfVElFUlMgLSAxKQogCiAjaWZuZGVmIF9fR0VORVJBVElOR19CT1VORFNfSAogCiAjZGVmaW5lIExSVV9HRU5fTUFTSwkJKChCSVQoTFJVX0dFTl9XSURUSCkgLSAxKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGKQomIzQzOyNkZWZpbmUgTFJVX0dFTl9NQVgJCShCSVQoTFJVX0dFTl9XSURUSCAtIDEpIC0gMSkKICNkZWZpbmUgTFJVX1JFRlNfTUFTSwkJKChCSVQoTFJVX1JFRlNfV0lEVEgpIC0gMSkgJmx0OyZsdDsgTFJVX1JFRlNfUEdPRkYpCiYjNDM7I2RlZmluZSBMUlVfUkVGU19NQVgJCUJJVChMUlVfUkVGU19XSURUSCkKIAogLyoKICAqIEZvciBmb2xpb3MgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzLApkaWZmIC0tZ2l0IGEvbW0vZm9saW8uYyBiL21tL2ZvbGlvLmMKaW5kZXggNTljNDc3MTIwYjlhOC4uMGFkZmU0ZjVlZjcyZiAxMDA2NDQKLS0tIGEvbW0vZm9saW8uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9mb2xpby5jCkBAIC0zNTMsMjYgJiM0MzszNTMsMjggQEAgc3RhdGljIHZvaWQgX19scnVfY2FjaGVfYWN0aXZhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykKIAogc3RhdGljIHZvaWQgbHJ1X2dlbl9pbmNfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewotCXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwomIzQzOwl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpOwomIzQzOwlpbnQgcmVmczsKIAogCWlmIChmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSkKIAkJcmV0dXJuOwogCiAJLyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovCi0JaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKSB7Ci0JCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTsKJiM0MzsJaWYgKCFmb2xpb19scnVfcmVmcyhmb2xpbykpIHsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7CiAJCXJldHVybjsKIAl9CiAKIAlkbyB7Ci0JCWlmICgob2xkX2ZsYWdzICZhbXA7IExSVV9SRUZTX01BU0spID09IExSVV9SRUZTX01BU0spIHsKJiM0MzsJCW5ld19mbGFncyA9IG9sZF9mbGFnczsKJiM0MzsJCXJlZnMgPSBscnVfcmVmc19mcm9tX2ZsYWdzKG9sZF9mbGFncyk7CiYjNDM7CQlpZiAocmVmcyA9PSBMUlVfUkVGU19NQVgpIHsKIAkJCWlmICghZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSkKIAkJCQlmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7CiAJCQlyZXR1cm47CiAJCX0KLQotCQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgJiM0MzsgQklUKExSVV9SRUZTX1BHT0ZGKTsKLQl9IHdoaWxlICghdHJ5X2NtcHhjaGcoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwomIzQzOwkJbHJ1X3JlZnNfc2V0X2ZsYWdzKCZhbXA7bmV3X2ZsYWdzLCByZWZzICYjNDM7IDEpOwomIzQzOwl9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiB9CiAKIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQpAQCAtMzg0LDcgJiM0MzszODYsOCBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbykKIAlpZiAoZ2VuICZsdDsgMCkKIAkJcmV0dXJuIHRydWU7CiAKLQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTIHwgQklUKFBHX3dvcmtpbmdzZXQpLCAwKTsKJiM0MzsJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTsKJiM0MzsJZm9saW9fY2xlYXJfd29ya2luZ3NldChmb2xpbyk7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJc2VxID0gUkVBRF9PTkNFKGZvbGlvX2xydXZlYyhmb2xpbyktJmd0O2xydWdlbi5taW5fc2VxW3R5cGVdKTsKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCAxZDMzMzk1MjA4MDlmLi45ZDBlZTNkM2JkYTdjIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC0xNTI5LDI4ICYjNDM7MTUyOSwxMiBAQCB2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsCiAJCQkJaW50IHppZCwgbG9uZyBucl9wYWdlcykKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7Ci0JdW5zaWduZWQgbG9uZyAqbHJ1X3NpemU7Ci0JbG9uZyBzaXplOwogCiAJaWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkKIAkJcmV0dXJuOwogCiAJbXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTsKLQlscnVfc2l6ZSA9ICZhbXA7bXotJmd0O2xydV96b25lX3NpemVbemlkXVtscnVdOwotCi0JaWYgKG5yX3BhZ2VzICZsdDsgMCkKLQkJKmxydV9zaXplICYjNDM7PSBucl9wYWdlczsKLQotCXNpemUgPSAqbHJ1X3NpemU7Ci0JaWYgKFdBUk5fT05DRShzaXplICZsdDsgMCwKLQkJJiMzNDslcyglcCwgJWQsICVsZCk6IGxydV9zaXplICVsZFxuJiMzNDssCi0JCV9fZnVuY19fLCBscnV2ZWMsIGxydSwgbnJfcGFnZXMsIHNpemUpKSB7Ci0JCVZNX0JVR19PTigxKTsKLQkJKmxydV9zaXplID0gMDsKLQl9Ci0KLQlpZiAobnJfcGFnZXMgJmd0OyAwKQotCQkqbHJ1X3NpemUgJiM0Mzs9IG5yX3BhZ2VzOwomIzQzOwlhdG9taWNfbG9uZ19hZGQobnJfcGFnZXMsICZhbXA7bXotJmd0O2xydV96b25lX3NpemVbemlkXVtscnVdKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmMKaW5kZXggMTViNDU4MzJiY2ZhNy4uODIzMDczMzI3MTFmNCAxMDA2NDQKLS0tIGEvbW0vbWlncmF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21pZ3JhdGUuYwpAQCAtNzc2LDggJiM0Mzs3NzYsNiBAQCB2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlpbnQgY3B1cGlkOwogCi0JaWYgKGZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpCi0JCWZvbGlvX3NldF9yZWZlcmVuY2VkKG5ld2ZvbGlvKTsKIAlpZiAoZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpCiAJCWZvbGlvX21hcmtfdXB0b2RhdGUobmV3Zm9saW8pOwogCWlmIChmb2xpb190ZXN0X2NsZWFyX2FjdGl2ZShmb2xpbykpIHsKQEAgLTgwNyw3ICYjNDM7ODA1LDkgQEAgdm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJaWYgKGZvbGlvX3Rlc3RfaWRsZShmb2xpbykpCiAJCWZvbGlvX3NldF9pZGxlKG5ld2ZvbGlvKTsKIAomIzQzOwkvKiBDb3B5IHRoZSByZWZlcmVuY2Ugc3RhdGUsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkICovCiAJZm9saW9fbWlncmF0ZV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7CiYjNDM7CiAJLyoKIAkgKiBDb3B5IE5VTUEgaW5mb3JtYXRpb24gdG8gdGhlIG5ldyBwYWdlLCB0byBwcmV2ZW50IG92ZXItZWFnZXIKIAkgKiBmdXR1cmUgbWlncmF0aW9ucyBvZiB0aGlzIHNhbWUgcGFnZS4KZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggYzE0MDRhNTk1MjNkNi4uN2UzYWUwYzZjYmEzYiAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTg0MywxOSAmIzQzOzg0MywyMiBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpCiAJaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pICZhbXA7JmFtcDsgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpIHsKIAkJLyogQWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuICovCiAJCWlmIChpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIHZtYV9mbGFncykpIHsKLQkJCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7CiYjNDM7CQkJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTsKJiM0MzsJCQlmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJfQogCi0JCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKIAkvKiBQcm9tb3RlIG9uIHNlY29uZCBhY2Nlc3MgKi8KLQlpZiAoZm9saW9fbHJ1X3JlZnMoZm9saW8pICZndDsgMSkKLQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTsKLQllbHNlCiYjNDM7CWlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgJmd0OyAxKSB7CiYjNDM7CQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwomIzQzOwkJZm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pOwomIzQzOwl9IGVsc2UgewogCQlmb2xpb19tYXJrX2FjY2Vzc2VkKGZvbGlvKTsKJiM0MzsJfQogCXJldHVybiB0cnVlOwogfQogI2Vsc2UKQEAgLTMxOTUsOCAmIzQzOzMxOTgsOCBAQCBzdHJ1Y3QgY3RybF9wb3MgewogCWludCBnYWluOwogfTsKIAotc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllciwgaW50IGdhaW4sCi0JCQkgIHN0cnVjdCBjdHJsX3BvcyAqcG9zKQomIzQzO3N0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXJfbWluLAomIzQzOwkJCSAgaW50IHRpZXJfbWF4LCBpbnQgZ2Fpbiwgc3RydWN0IGN0cmxfcG9zICpwb3MpCiB7CiAJaW50IGk7CiAJc3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9ICZhbXA7bHJ1dmVjLSZndDtscnVnZW47CkBAIC0zMjA1LDcgJiM0MzszMjA4LDcgQEAgc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllciwgaW50IGdhaW4sCiAJcG9zLSZndDtnYWluID0gZ2FpbjsKIAlwb3MtJmd0O3JlZmF1bHRlZCA9IHBvcy0mZ3Q7dG90YWwgPSAwOwogCi0JZm9yIChpID0gdGllciAlIE1BWF9OUl9USUVSUzsgaSAmbHQ7PSBtaW4odGllciwgTUFYX05SX1RJRVJTIC0gMSk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CWZvciAoaSA9IHRpZXJfbWluOyBpICZsdDs9IHRpZXJfbWF4OyBpJiM0MzsmIzQzOykgewogCQlwb3MtJmd0O3JlZmF1bHRlZCAmIzQzOz0gbHJ1Z2VuLSZndDthdmdfcmVmYXVsdGVkW3R5cGVdW2ldICYjNDM7CiAJCQkJICBhdG9taWNfbG9uZ19yZWFkKCZhbXA7bHJ1Z2VuLSZndDtyZWZhdWx0ZWRbaGlzdF1bdHlwZV1baV0pOwogCQlwb3MtJmd0O3RvdGFsICYjNDM7PSBscnVnZW4tJmd0O2F2Z190b3RhbFt0eXBlXVtpXSAmIzQzOwpAQCAtMzI2NiwxMSAmIzQzOzMyNjksMTEgQEAgc3RhdGljIGJvb2wgcG9zaXRpdmVfY3RybF9lcnIoc3RydWN0IGN0cmxfcG9zICpzcCwgc3RydWN0IGN0cmxfcG9zICpwdikKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qIHByb21vdGUgcGFnZXMgYWNjZXNzZWQgdGhyb3VnaCBwYWdlIHRhYmxlcyAqLwotc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpCiYjNDM7c3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBpbnQgKmlzX2ZpbGUsCiYjNDM7CQkJICAgIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpCiB7Ci0JdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby0mZ3Q7ZmxhZ3MuZik7Ci0KLQlWTV9XQVJOX09OX09OQ0UoZ2VuICZndDs9IE1BWF9OUl9HRU5TKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTsKJiM0MzsJaW50IG9sZF9nZW47CiAKIAkvKgogCSAqIFNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUywgYW5kIGFjdGl2YXRlIGZpbGUtYmFja2VkCkBAIC0zMjc5LDIwICYjNDM7MzI4MiwyNSBAQCBzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYQogCSAqLwogCWlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSAmYW1wOyZhbXA7ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pICZhbXA7JmFtcDsKIAkgICAgIWlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkgewotCQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7CiYjNDM7CQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJZG8gewomIzQzOwkJb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9mbGFncyhvbGRfZmxhZ3MpOwomIzQzOwkJbmV3X2ZsYWdzID0gb2xkX2ZsYWdzOwomIzQzOwogCQkvKiBscnVfZ2VuX2RlbF9mb2xpbygpIGhhcyBpc29sYXRlZCB0aGlzIHBhZ2U/ICovCi0JCWlmICghKG9sZF9mbGFncyAmYW1wOyBMUlVfR0VOX01BU0spKQotCQkJcmV0dXJuIC0xOwomIzQzOwkJaWYgKG9sZF9nZW4gJmx0OyAwKQomIzQzOwkJCWJyZWFrOwogCi0JCW5ld19mbGFncyA9IG9sZF9mbGFncyAmYW1wOyB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTsKLQkJbmV3X2ZsYWdzIHw9ICgoZ2VuICYjNDM7IDFVTCkgJmx0OyZsdDsgTFJVX0dFTl9QR09GRikgfCBCSVQoUEdfd29ya2luZ3NldCk7Ci0JfSB3aGlsZSAoIXRyeV9jbXB4Y2hnKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsICZhbXA7b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTsKJiM0MzsJCWxydV9nZW5fc2V0X2ZsYWdzKCZhbXA7bmV3X2ZsYWdzLCBuZXdfZ2VuKTsKJiM0MzsJCWxydV9yZWZzX3NldF9mbGFncygmYW1wO25ld19mbGFncywgMCk7CiYjNDM7CQluZXdfZmxhZ3MgfD0gQklUKFBHX3dvcmtpbmdzZXQpOwomIzQzOwl9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiAKLQlyZXR1cm4gKChvbGRfZmxhZ3MgJmFtcDsgTFJVX0dFTl9NQVNLKSAmZ3Q7Jmd0OyBMUlVfR0VOX1BHT0ZGKSAtIDE7CiYjNDM7CSppc19maWxlID0gZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUoJmFtcDtvbGRfZmxhZ3MpOwomIzQzOwlyZXR1cm4gb2xkX2dlbjsKIH0KIAogLyogcHJvdGVjdCBwYWdlcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMgKi8KQEAgLTMzMDAsMjIgJiM0MzszMzA4LDI1IEBAIHN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJaW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7CiAJc3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9ICZhbXA7bHJ1dmVjLSZndDtscnVnZW47Ci0JaW50IG5ld19nZW4sIG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi0mZ3Q7bWluX3NlcVt0eXBlXSk7Ci0JdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby0mZ3Q7ZmxhZ3MuZik7Ci0KLQlWTV9XQVJOX09OX09OQ0VfRk9MSU8oIShvbGRfZmxhZ3MgJmFtcDsgTFJVX0dFTl9NQVNLKSwgZm9saW8pOwomIzQzOwlpbnQgbmV3X2dlbiwgb2xkX2dlbiwgbWluX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLSZndDttaW5fc2VxW3R5cGVdKTsKJiM0MzsJdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTsKIAogCWRvIHsKLQkJbmV3X2dlbiA9ICgob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwotCQkvKiBmb2xpb191cGRhdGVfZ2VuKCkgaGFzIHByb21vdGVkIHRoaXMgcGFnZT8gKi8KLQkJaWYgKG5ld19nZW4gJmd0Oz0gMCAmYW1wOyZhbXA7IG5ld19nZW4gIT0gb2xkX2dlbikKLQkJCXJldHVybiBuZXdfZ2VuOwomIzQzOwkJb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9mbGFncyhvbGRfZmxhZ3MpOwomIzQzOwkJLyogVGhpcyBoZWxwZXIgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBmb3Igb2ZmLWxpc3QgZm9saW9zICovCiYjNDM7CQlWTV9XQVJOX09OX09OQ0Uob2xkX2dlbiAmbHQ7IDApOwomIzQzOwkJaWYgKG9sZF9nZW4gJmx0OyAwKQomIzQzOwkJCXJldHVybiBtaW5fZ2VuOwogCi0JCW5ld19nZW4gPSAob2xkX2dlbiAmIzQzOyAxKSAlIE1BWF9OUl9HRU5TOwomIzQzOwkJLyogZm9saW9fdXBkYXRlX2dlbigpIGhhcyBwcm9tb3RlZCB0aGlzIHBhZ2U/ICovCiYjNDM7CQlpZiAob2xkX2dlbiAhPSBtaW5fZ2VuKQomIzQzOwkJCXJldHVybiBvbGRfZ2VuOwogCi0JCW5ld19mbGFncyA9IG9sZF9mbGFncyAmYW1wOyB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTsKLQkJbmV3X2ZsYWdzIHw9IChuZXdfZ2VuICYjNDM7IDFVTCkgJmx0OyZsdDsgTFJVX0dFTl9QR09GRjsKLQl9IHdoaWxlICghdHJ5X2NtcHhjaGcoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwomIzQzOwkJbmV3X2ZsYWdzID0gb2xkX2ZsYWdzOwomIzQzOwkJbmV3X2dlbiA9IChtaW5fZ2VuICYjNDM7IDEpICUgTUFYX05SX0dFTlM7CiYjNDM7CQlscnVfZ2VuX3NldF9mbGFncygmYW1wO25ld19mbGFncywgbmV3X2dlbik7CiYjNDM7CQlscnVfcmVmc19zZXRfZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIDApOwomIzQzOwl9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiAKIAlscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pOwogCkBAIC0zMzIzLDkgJiM0MzszMzM0LDggQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbykKIH0KIAogc3RhdGljIHZvaWQgdXBkYXRlX2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IGZvbGlvICpmb2xpbywKLQkJCSAgICAgIGludCBvbGRfZ2VuLCBpbnQgbmV3X2dlbikKJiM0MzsJCQkgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4sIGludCB0eXBlKQogewotCWludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pOwogCWludCB6b25lID0gZm9saW9fem9uZW51bShmb2xpbyk7CiAJaW50IGRlbHRhID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwogCkBAIC0zNTEyLDIyICYjNDM7MzUyMiwyNCBAQCBzdGF0aWMgYm9vbCBzdWl0YWJsZV90b19zY2FuKGludCB0b3RhbCwgaW50IHlvdW5nKQogfQogCiBzdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGJvb2wgZGlydHkpCiYjNDM7CQkJICAgICAgc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIGRpcnR5KQogewotCWludCBvbGRfZ2VuOwomIzQzOwlpbnQgbmV3X2dlbiwgb2xkX2dlbiwgZmlsZTsKIAogCWlmICghZm9saW8pCiAJCXJldHVybjsKIAomIzQzOwluZXdfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShSRUFEX09OQ0UobHJ1dmVjLSZndDtscnVnZW4ubWF4X3NlcSkpOwomIzQzOwogCWlmIChkaXJ0eSAmYW1wOyZhbXA7ICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSAmYW1wOyZhbXA7CiAJICAgICEoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSAmYW1wOyZhbXA7IGZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykgJmFtcDsmYW1wOwogCSAgICAgICFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpKQogCQlmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTsKIAogCWlmICh3YWxrKSB7Ci0JCW9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuLCAmYW1wO3ZtYS0mZ3Q7ZmxhZ3MpOwomIzQzOwkJb2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sICZhbXA7ZmlsZSwgJmFtcDt2bWEtJmd0O2ZsYWdzKTsKIAkJaWYgKG9sZF9nZW4gJmd0Oz0gMCAmYW1wOyZhbXA7IG9sZF9nZW4gIT0gbmV3X2dlbikKLQkJCXVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTsKJiM0MzsJCQl1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbiwgZmlsZSk7CiAJfSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCAmYW1wO3ZtYS0mZ3Q7ZmxhZ3MpKSB7CiAJCW9sZF9nZW4gPSBmb2xpb19scnVfZ2VuKGZvbGlvKTsKIAkJaWYgKG9sZF9nZW4gJmd0Oz0gMCAmYW1wOyZhbXA7IG9sZF9nZW4gIT0gbmV3X2dlbikKQEAgLTM1NDksOCAmIzQzOzM1NjEsNiBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIAlzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy0mZ3Q7cHJpdmF0ZTsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay0mZ3Q7bHJ1dmVjKTsKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstJmd0O2xydXZlYyk7Ci0JREVGSU5FX01BWF9TRVEod2Fsay0mZ3Q7bHJ1dmVjKTsKLQlpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTsKIAl1bnNpZ25lZCBpbnQgbnI7CiAJcG1kX3QgcG1kdmFsOwogCkBAIC0zNjAxLDcgJiM0MzszNjExLDcgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCQljb250aW51ZTsKIAogCQlpZiAobGFzdCAhPSBmb2xpbykgewotCQkJd2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy0mZ3Q7dm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJCQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLSZndDt2bWEsIHdhbGstJmd0O2xydXZlYywgbGFzdCwgZGlydHkpOwogCiAJCQlsYXN0ID0gZm9saW87CiAJCQlkaXJ0eSA9IGZhbHNlOwpAQCAtMzYxNCw3ICYjNDM7MzYyNCw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQl3YWxrLSZndDttbV9zdGF0c1tNTV9MRUFGX1lPVU5HXSAmIzQzOz0gbnI7CiAJfQogCi0Jd2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy0mZ3Q7dm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJd2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy0mZ3Q7dm1hLCB3YWxrLSZndDtscnV2ZWMsIGxhc3QsIGRpcnR5KTsKIAlsYXN0ID0gTlVMTDsKIAogCWlmIChpICZsdDsgUFRSU19QRVJfUFRFICZhbXA7JmFtcDsgZ2V0X25leHRfdm1hKFBNRF9NQVNLLCBQQUdFX1NJWkUsIGFyZ3MsICZhbXA7c3RhcnQsICZhbXA7ZW5kKSkKQEAgLTM2MzcsOCAmIzQzOzM2NDcsNiBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYQogCXN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLSZndDtwcml2YXRlOwogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLSZndDtscnV2ZWMpOwogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQod2Fsay0mZ3Q7bHJ1dmVjKTsKLQlERUZJTkVfTUFYX1NFUSh3YWxrLSZndDtscnV2ZWMpOwotCWludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpOwogCiAJVk1fV0FSTl9PTl9PTkNFKHB1ZF9sZWFmKCpwdWQpKTsKIApAQCAtMzY5Miw3ICYjNDM7MzcwMCw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhCiAJCQlnb3RvIG5leHQ7CiAKIAkJaWYgKGxhc3QgIT0gZm9saW8pIHsKLQkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CQkJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCB3YWxrLSZndDtscnV2ZWMsIGxhc3QsIGRpcnR5KTsKIAogCQkJbGFzdCA9IGZvbGlvOwogCQkJZGlydHkgPSBmYWxzZTsKQEAgLTM3MDYsNyAmIzQzOzM3MTQsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYQogCQlpID0gaSAmZ3Q7IE1JTl9MUlVfQkFUQ0ggPyAwIDogZmluZF9uZXh0X2JpdChiaXRtYXAsIE1JTl9MUlVfQkFUQ0gsIGkpICYjNDM7IDE7CiAJfSB3aGlsZSAoaSAmbHQ7PSBNSU5fTFJVX0JBVENIKTsKIAotCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay0mZ3Q7bHJ1dmVjLCBsYXN0LCBkaXJ0eSk7CiAKIAlsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTsKIAlzcGluX3VubG9jayhwdGwpOwpAQCAtNDI3MCw4ICYjNDM7NDI3OCw2IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucikKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gZm9saW9fcGdkYXQoZm9saW8pOwogCXN0cnVjdCBscnV2ZWMgKmxydXZlYzsKIAlzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGU7Ci0JdW5zaWduZWQgbG9uZyBtYXhfc2VxOwotCWludCBnZW47CiAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKHB2bXctJmd0O3B0bCk7CiAJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSwgZm9saW8pOwpAQCAtNDMwOCw4ICYjNDM7NDMxNCw2IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucikKIAogCW1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7CiAJbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTsKLQltYXhfc2VxID0gUkVBRF9PTkNFKChscnV2ZWMpLSZndDtscnVnZW4ubWF4X3NlcSk7Ci0JZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTsKIAltbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpOwogCiAJbGF6eV9tbXVfbW9kZV9lbmFibGUoKTsKQEAgLTQzNDEsNyAmIzQzOzQzNDUsNyBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpCiAJCQljb250aW51ZTsKIAogCQlpZiAobGFzdCAhPSBmb2xpbykgewotCQkJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJCQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxydXZlYywgbGFzdCwgZGlydHkpOwogCiAJCQlsYXN0ID0gZm9saW87CiAJCQlkaXJ0eSA9IGZhbHNlOwpAQCAtNDM1MywxMyAmIzQzOzQzNTcsMTQgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKQogCQl5b3VuZyAmIzQzOz0gbnI7CiAJfQogCi0Jd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTsKIAogCWxhenlfbW11X21vZGVfZGlzYWJsZSgpOwogCiAJLyogZmVlZGJhY2sgZnJvbSBybWFwIHdhbGtlcnMgdG8gcGFnZSB0YWJsZSB3YWxrZXJzICovCiAJaWYgKG1tX3N0YXRlICZhbXA7JmFtcDsgc3VpdGFibGVfdG9fc2NhbihpLCB5b3VuZykpCi0JCXVwZGF0ZV9ibG9vbV9maWx0ZXIobW1fc3RhdGUsIG1heF9zZXEsIHB2bXctJmd0O3BtZCk7CiYjNDM7CQl1cGRhdGVfYmxvb21fZmlsdGVyKG1tX3N0YXRlLCBSRUFEX09OQ0UobHJ1dmVjLSZndDtscnVnZW4ubWF4X3NlcSksCiYjNDM7CQkJCSAgICBwdm13LSZndDtwbWQpOwogCiAJbWVtX2Nncm91cF9wdXQobWVtY2cpOwogCkBAIC00NzExLDcgJiM0Mzs0NzE2LDcgQEAgc3RhdGljIGJvb2wgaXNvbGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2EKIAogCS8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqLwogCWlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSkKLQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19NQVNLLCAwKTsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7CiAKIAlzdWNjZXNzID0gbHJ1X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7CiAJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFzdWNjZXNzLCBmb2xpbyk7CkBAIC00ODA0LDkgJiM0Mzs0ODA5LDkgQEAgc3RhdGljIGludCBnZXRfdGllcl9pZHgoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSkKIAkgKiBUaGlzIHZhbHVlIGlzIGNob3NlbiBiZWNhdXNlIGFueSBvdGhlciB0aWVyIHdvdWxkIGhhdmUgYXQgbGVhc3QgdHdpY2UKIAkgKiBhcyBtYW55IHJlZmF1bHRzIGFzIHRoZSBmaXJzdCB0aWVyLgogCSAqLwotCXJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCAwLCAyLCAmYW1wO3NwKTsKLQlmb3IgKHRpZXIgPSAxOyB0aWVyICZsdDsgTUFYX05SX1RJRVJTOyB0aWVyJiM0MzsmIzQzOykgewotCQlyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdGllciwgMywgJmFtcDtwdik7CiYjNDM7CXJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01JTiwgMiwgJmFtcDtzcCk7CiYjNDM7CWZvciAodGllciA9IExSVV9USUVSX01JTiAmIzQzOyAxOyB0aWVyICZsdDs9IExSVV9USUVSX01BWDsgdGllciYjNDM7JiM0MzspIHsKJiM0MzsJCXJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0aWVyLCB0aWVyLCAzLCAmYW1wO3B2KTsKIAkJaWYgKCFwb3NpdGl2ZV9jdHJsX2VycigmYW1wO3NwLCAmYW1wO3B2KSkKIAkJCWJyZWFrOwogCX0KQEAgLTQ4MjcsOCAmIzQzOzQ4MzIsMTAgQEAgc3RhdGljIGludCBnZXRfdHlwZV90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpCiAJICogQ29tcGFyZSB0aGUgc3VtIG9mIGFsbCB0aWVycyBvZiBhbm9uIHdpdGggdGhhdCBvZiBmaWxlIHRvIGRldGVybWluZQogCSAqIHdoaWNoIHR5cGUgdG8gc2Nhbi4KIAkgKi8KLQlyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBNQVhfTlJfVElFUlMsIHN3YXBwaW5lc3MsICZhbXA7c3ApOwotCXJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIE1BWF9OUl9USUVSUywgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCAmYW1wO3B2KTsKJiM0MzsJcmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fQU5PTiwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NQVgsCiYjNDM7CQkgICAgICBzd2FwcGluZXNzLCAmYW1wO3NwKTsKJiM0MzsJcmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NQVgsCiYjNDM7CQkgICAgICBNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3MsICZhbXA7cHYpOwogCiAJcmV0dXJuIHBvc2l0aXZlX2N0cmxfZXJyKCZhbXA7c3AsICZhbXA7cHYpOwogfQpAQCAtNDkyNyw4ICYjNDM7NDkzNCwxMCBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJfQogCiAJCS8qIGRvbiYjMzk7dCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqLwotCQlpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pCi0JCQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfYWN0aXZlKSk7CiYjNDM7CQlpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pIHsKJiM0MzsJCQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwomIzQzOwkJCWZvbGlvX3NldF9hY3RpdmUoZm9saW8pOwomIzQzOwkJfQogCX0KIAogCW1vdmVfZm9saW9zX3RvX2xydSgmYW1wO2xpc3QpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY0OQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDQ1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1HTFJVIFBhdGNoOiBBIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0JiMzOTtzIHR3ZWFraW5nIHRoZSBNdWx0aS1HZW4gTFJVIGltcGxlbWVudGF0aW9uIHdpdGhpbiB0aGUgTGludXgga2VybmVsLCBhbmQgdGhlIGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgc2lnbmlmaWNhbnQuIEl0JiMzOTtzIG1vZGlmeWluZyBob3cgdGhlIExSVSBnZW5lcmF0aW9uIGFuZCByZWZlcmVuY2UgZmxhZ3MgYXJlIG1hbmFnZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBmb2xpby0mZ3Q7ZmxhZ3NgIHN0cnVjdHVyZS4gUmF0aGVyIHRoYW4gZGlyZWN0IGJpdG1hc2sgbWFuaXB1bGF0aW9ucywgaXQmIzM5O3MgcmVwbGFjaW5nIHRoZW0gd2l0aCBoZWxwZXIgZnVuY3Rpb25zLCBsaWtlIGBscnVfZ2VuX2Zyb21fZmxhZ3NgLCBhbmQgc28gb24uIFRoYXQgc2VlbXMgbGlrZSBhIGdvb2QgbW92ZSwgcG90ZW50aWFsbHkgaW1wcm92aW5nIHJlYWRhYmlsaXR5IGFuZCBtYWludGFpbmFiaWxpdHkuCgpUaGUgY2hhbmdlIGZyb20gYHVuc2lnbmVkIGxvbmdgIHRvIGBhdG9taWNfbG9uZ190YCBmb3IgYGxydV96b25lX3NpemVgIGluIGBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZWAgaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBleWUuIFRoaXMgc3VnZ2VzdHMgdGhlcmUgYXJlIGxpa2VseSBjb25jdXJyZW5jeSBpbXBsaWNhdGlvbnMgdGhhdCBuZWVkIGNhcmVmdWwgZXhhbWluYXRpb24sIGFuZCB0aGF0IGNvdWxkIGludHJvZHVjZSBzdWJ0bGUgYnVncyBpZiB0aGUgYXRvbWljIG9wZXJhdGlvbnMgYXJlbiYjMzk7dCBoYW5kbGVkIGNvcnJlY3RseS4KCkZ1bmN0aW9uYWxseSwgdGhpcyBpbXBhY3RzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMg4oCTIGJvdGggdGhlIE1HTFJVIGl0c2VsZiAqYW5kKiB0aGUgbWVtY2cgTFJVIHNpemUgdHJhY2tpbmcsIHNvIGl0JiMzOTtzIGEgaGlnaC1pbXBhY3QgYXJlYS4gVGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcuIEkmIzM5O2xsIG5lZWQgdG8gaWRlbnRpZnkgc3BlY2lmaWMgZnVuY3Rpb25zIHRvIHRhcmdldC4KCkEgcXVpY2sgc2NhbiBvZiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGxpc3QgcmV2ZWFscyB0aGUgZm9sbG93aW5nOiBgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZWAsIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAsIGBmb2xpb19taWdyYXRlX2ZsYWdzYCwgYGxydV9nZW5fbG9va19hcm91bmRgLCBgd2Fsa19wdGVfcmFuZ2VgLCBgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkYCwgYGV2aWN0X2ZvbGlvc2AsIGBnZXRfdGllcl9pZHhgLCBgZ2V0X3R5cGVfdG9fc2NhbmAsIGBmb2xpb19pbmNfZ2VuYCwgYGZvbGlvX3VwZGF0ZV9nZW5gLCBgbHJ1X2dlbl9pbmNfcmVmc2AsIGFuZCBgbHJ1X2dlbl9jbGVhcl9yZWZzYC4gTm93LCBsZXQmIzM5O3MgZm9jdXMuCgpHaXZlbiB0aGUgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBhbmQgdGhlaXIgaW1wYWN0IG9uIG1lbWNnLCBJJiMzOTtsbCBwcmlvcml0aXplIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgYW5kIGBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplYC4gT2YgY291cnNlLCBJJiMzOTtsbCBhbHNvIGNvbmNlbnRyYXRlIG9uIHRob3NlIHNwZWNpZmljIHRvIE1HTFJVIGxpa2UgYGxydV9nZW5fbG9va19hcm91bmRgIGFuZCBgZXZpY3RfZm9saW9zYC4gVGhlc2UgYXJlIGxpa2VseSB0aGUgbW9zdCBjcml0aWNhbCBwYXJ0cyBvZiB0aGUgY29kZS4KCkJlZm9yZSBJIGdvIGZ1cnRoZXIgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnLiBJJiMzOTtsbCBtYWtlIHN1cmUgdGhhdCBgQ09ORklHX0xSVV9HRU5gIGlzIGVuYWJsZWQgYmVjYXVzZSBvdGhlcndpc2UsIHRoaXMgcGF0Y2ggd29uJiMzOTt0IGV2ZW4gYmUgcmVsZXZhbnQsIHNvIEkgbmVlZCB0byB2ZXJpZnkgdGhhdC4gR290dGEgbWFrZSBzdXJlIHRoZSBmb3VuZGF0aW9uIGlzIHNvdW5kIGJlZm9yZSBkaXZpbmcgaW50byB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTFJVX0dFTiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEzOTM9Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxuLS1cbm1tL0tjb25maWctMTQwMy0jIG11bHRpLWdlbiBMUlUge1xubW0vS2NvbmZpZzoxNDA0OmNvbmZpZyBMUlVfR0VOXG5tbS9LY29uZmlnLTE0MDUtXHRib29sIFwmIzM0O011bHRpLUdlbiBMUlVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MTItXG5tbS9LY29uZmlnOjE0MTM6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxubW0vS2NvbmZpZy0xNDE0LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQxOC1cbm1tL0tjb25maWc6MTQxOTpjb25maWcgTFJVX0dFTl9TVEFUU1xubW0vS2NvbmZpZy0xNDIwLVx0Ym9vbCBcJiMzNDtGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MjctXG5tbS9LY29uZmlnOjE0Mjg6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXG5tbS9LY29uZmlnLTE0MjktXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDU6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4OTMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29uc2lkZXJpbmcgTFJVIEdlbmVyYXRpb24gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgTFJVX0dFTmAgY29uZmlndXJhdGlvbiBvcHRpb24uIE1ha2VzIHNlbnNlLCB0aGF0JiMzOTtzIHRoZSBjb3JlLiBUbyBtYWtlIHRoaW5ncyBlYXN5LCB3ZSBzaG91bGQgZW5hYmxlIGl0IGJ5IGRlZmF1bHQgYnkgYWRkaW5nIGBMUlVfR0VOX0VOQUJMRURgLCBvciBnaXZlIHRoZSB1c2VyIGNvbnRyb2wgd2l0aCBhIHN5c2ZzIGVudHJ5LiBJIHRoaW5rIHdlIHNob3VsZCBpbmNsdWRlIGJvdGggb3B0aW9ucyBmb3IgbWF4aW11bSBmbGV4aWJpbGl0eS4gU28sIEkmIzM5O2xsIGFkZCBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgIHRvIHRoZSBjb25maWcuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcy4gSSBzaG91bGQgY2hlY2sgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBiZWluZyBtb2RpZmllZC4KCkhtbSwgbGV0JiMzOTtzIHNlZSwgd2hhdCBhYm91dCBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgPyBJIHdvbmRlciBpZiB0aGF0JiMzOTtzIGFuIGV4cG9ydGVkIGZ1bmN0aW9uLCBvciBpZiBpdCYjMzk7cyBzdGF0aWM/IEkmIzM5O2xsIHF1aWNrbHkgdXNlIGdyZXAgdG8gZmluZCBhbGwgaW5zdGFuY2VzIG9mIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgdG8gZ2V0IGEgYmV0dGVyIG92ZXJ2aWV3IG9mIGl0cyB1c2FnZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIHdoZXJlIHRoaXMgbW9kaWZpY2F0aW9uIGlzIGhhcHBlbmluZyB3aXRoaW4gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDU6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9ODg2PXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtODkyLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6ODkzOnZvaWQgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIGxydV9saXN0IGxydSxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTg5NC1cdFx0aW50IHppZCwgbG9uZyBucl9wYWdlcyk7XG4tLVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD01Mj1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTU3LSNpZmRlZiBDT05GSUdfTUVNQ0dcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6NTg6XHRtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShscnV2ZWMsIGxydSwgemlkLCBucl9wYWdlcyk7XG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTU5LSNlbmRpZlxuLS1cbm1tL2ZvbGlvLmM9MTEyMz1zdGF0aWMgdm9pZCBscnV2ZWNfcmVwYXJlbnRfbHJ1KHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYyxcbi0tXG5tbS9mb2xpby5jLTExMzUtXG5tbS9mb2xpby5jOjExMzY6XHRcdG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHBhcmVudF9scnV2ZWMsIGxydSwgemlkLCBzaXplKTtcbm1tL2ZvbGlvLmMtMTEzNy1cdH1cbi0tXG5tbS9tZW1jb250cm9sLmM9MTUwMT1zdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnFzYXZlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vbWVtY29udHJvbC5jLTE1MTgtLyoqXG5tbS9tZW1jb250cm9sLmM6MTUxOTogKiBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZSAtIGFjY291bnQgZm9yIGFkZGluZyBvciByZW1vdmluZyBhbiBscnUgcGFnZVxubW0vbWVtY29udHJvbC5jLTE1MjAtICogQGxydXZlYzogbWVtX2Nncm91cCBwZXIgem9uZSBscnUgdmVjdG9yXG4tLVxubW0vbWVtY29udHJvbC5jLTE1MjctICovXG5tbS9tZW1jb250cm9sLmM6MTUyODp2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXG5tbS9tZW1jb250cm9sLmMtMTUyOS1cdFx0XHRcdGludCB6aWQsIGxvbmcgbnJfcGFnZXMpXG4tLVxubW0vdm1zY2FuLmM9MTU5Mj11bnNpZ25lZCBpbnQgcmVjbGFpbV9jbGVhbl9wYWdlc19mcm9tX2xpc3Qoc3RydWN0IHpvbmUgKnpvbmUsXG4tLVxubW0vdm1zY2FuLmMtMTY0NC0gKiBVcGRhdGUgTFJVIHNpemVzIGFmdGVyIGlzb2xhdGluZyBwYWdlcy4gVGhlIExSVSBzaXplIHVwZGF0ZXMgbXVzdFxubW0vdm1zY2FuLmM6MTY0NTogKiBiZSBjb21wbGV0ZSBiZWZvcmUgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUgZHVlIHRvIGEgc2FuaXR5IGNoZWNrLlxubW0vdm1zY2FuLmMtMTY0Ni0gKi9cbi0tXG5tbS92bXNjYW4uYz00NjI1PXZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXG4tLVxubW0vdm1zY2FuLmMtNDY0Mi1cbm1tL3Ztc2Nhbi5jOjQ2NDM6XHRcdFx0bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUocGFyZW50X2xydXZlYywgbHJ1LCB6aWQsIHNpemUpO1xubW0vdm1zY2FuLmMtNDY0NC1cdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA1OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDE1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGZhbWlsaWFyIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQ6CgoqKkNoZWNraW5nIG9uIExSVSBTaXplIFVwZGF0ZXMqKgoKSG1tLCBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgIGlzIGV4cG9ydGVkIGFuZCBub24tc3RhdGljLiBJbnRlcmVzdGluZy4gVGhhdCBsaWtlbHkgbWVhbnMgaXQmIzM5O3MgZGVzaWduZWQgdG8gYmUgY2FsbGVkIGZyb20gb3RoZXIgbW9kdWxlcyBvciBwYXJ0cyBvZiB0aGUga2VybmVsLiBUaGlzIHJhaXNlcyBzb21lIHF1ZXN0aW9ucyBhYm91dCBob3cgYnJvYWRseSBpdCYjMzk7cyB1c2VkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMuIEkgc2hvdWxkIHByb2JhYmx5IHJldmlldyB0aGUgY2FsbCBzaXRlcyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaXRzIGltcGFjdCBvbiB0aGUgc3lzdGVtLgoKTm93LCB3aGF0IGFib3V0IGBscnVfZ2VuX2xvb2tfYXJvdW5kYD8gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIGl0cyBkZWZpbml0aW9uIGFuZCBwdXJwb3NlLiBJcyB0aGF0IGFsc28gZXhwb3J0ZWQ/IElzIGl0IHN0YXRpYz8gVGhhdCYjMzk7cyBnb2luZyB0byBpbmZsdWVuY2UgaG93IEkgc2VlIHRoaW5ncy4gSSBuZWVkIHRvIGtub3cgaG93IGl0IHJlbGF0ZXMgdG8gYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCBhbmQgaG93IGl0IG1pZ2h0IGltcGFjdCBMUlUgc2l6ZSBjYWxjdWxhdGlvbnMuIE1heWJlIEkgc2hvdWxkIHF1aWNrbHkgZ3JlcCB0aGUgY29kZWJhc2UgdG8gZmluZCB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkIGFuZCB1c2VkIHRvIGdldCB0aGUgbGF5IG9mIHRoZSBsYW5kLiBJdCYjMzk7cyBwcm9iYWJseSBjYWxsZWQgYnkgc29tZSBraW5kIG9mIHNjaGVkdWxlciBvciBwYWdlIHJlY2xhaW0gbWVjaGFuaXNtLCBzbyB1bmRlcnN0YW5kaW5nIGl0cyByb2xlIGlzIGltcG9ydGFudCBmb3IgdGhlIGNvbXBsZXRlIG1lbW9yeSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA1OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5fbG9va19hcm91bmQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0PTE4Nz1jYW4gaW5jdXIgdGhlIGhpZ2hlc3QgQ1BVIGNvc3QgaW4gdGhlIHJlY2xhaW0gcGF0aC5cbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdC0xODgtXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3Q6MTg5OmBgbHJ1X2dlbl9sb29rX2Fyb3VuZCgpYGAgZXhwbG9pdHMgc3BhdGlhbCBsb2NhbGl0eSB0byByZWR1Y2UgdGhlXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3QtMTkwLXRyaXBzIGludG8gdGhlIHJtYXAuIEl0IHNjYW5zIHRoZSBhZGphY2VudCBQVEVzIG9mIGEgeW91bmcgUFRFIGFuZFxuLS1cbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdD0xOTk9aW4gdGhlIHNldC5cbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdC0yMDAtXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3Q6MjAxOkluIHRoZSBldmljdGlvbiBwYXRoLCBzcGVjaWZpY2FsbHksIGluIGBgbHJ1X2dlbl9sb29rX2Fyb3VuZCgpYGAsIGlmIGFcbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdC0yMDItUE1EIGhhcyBhIHN1ZmZpY2llbnQgbnVtYmVyIG9mIGhvdCBwYWdlcywgaXRzIGFkZHJlc3MgaXMgcGxhY2VkIGluIHRoZVxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmg9Njk1PXZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo2OTY6Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKTtcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNjk3LVxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmg9NzE0PXN0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTcxNy1cbmluY2x1ZGUvbGludXgvbW16b25lLmg6NzE4OnN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzE5LVx0XHR1bnNpZ25lZCBpbnQgbnIpXG4tLVxubW0vcm1hcC5jPTkxOD1zdGF0aWMgYm9vbCBmb2xpb19yZWZlcmVuY2VkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3JtYXAuYy05ODItXHRcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkgXHUwMDI2XHUwMDI2IHB2bXcucHRlKSB7XG5tbS9ybWFwLmM6OTgzOlx0XHRcdGlmIChscnVfZ2VuX2xvb2tfYXJvdW5kKFx1MDAyNnB2bXcsIG5yKSlcbm1tL3JtYXAuYy05ODQtXHRcdFx0XHRyZWZlcmVuY2VkJiM0MzsmIzQzOztcbi0tXG5tbS92bXNjYW4uYz0yNzkxPXN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIHNlcV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4tLVxubW0vdm1zY2FuLmMtMjgyMC0gKiB3YWxrX3BtZF9yYW5nZSgpOyB0aGUgZXZpY3Rpb24gYWxzbyByZXBvcnQgdGhlbSB3aGVuIHdhbGtpbmcgdGhlIHJtYXBcbm1tL3Ztc2Nhbi5jOjI4MjE6ICogaW4gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLlxubW0vdm1zY2FuLmMtMjgyMi0gKlxuLS1cbm1tL3Ztc2Nhbi5jPTQwNzg9c3RhdGljIGJvb2wgdHJ5X3RvX2luY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsXG4tLVxubW0vdm1zY2FuLmMtNDA5Ny1cdCAqIElmIHRoZSBoYXJkd2FyZSBkb2VzbiYjMzk7dCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgYWNjZXNzZWQgYml0LCBmYWxsYmFja1xubW0vdm1zY2FuLmM6NDA5ODpcdCAqIHRvIGxydV9nZW5fbG9va19hcm91bmQoKSwgd2hpY2ggb25seSBjbGVhcnMgdGhlIGFjY2Vzc2VkIGJpdCBpbiBhXG5tbS92bXNjYW4uYy00MDk5LVx0ICogaGFuZGZ1bCBvZiBQVEVzLiBTcHJlYWRpbmcgdGhlIHdvcmsgb3V0IG92ZXIgYSBwZXJpb2Qgb2YgdGltZSB1c3VhbGx5XG4tLVxubW0vdm1zY2FuLmM9NDIxNz1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTQyNjMtICovXG5tbS92bXNjYW4uYzo0MjY0OmJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbm1tL3Ztc2Nhbi5jLTQyNjUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA1OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjE4CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmc6CgoqKkV4YW1pbmluZyBQb3RlbnRpYWwgT3B0aW1pemF0aW9uIE9wcG9ydHVuaXRpZXMqKgoKT2theSwgbGV0JiMzOTtzIHNlZS4gSSYjMzk7bSBsb29raW5nIGF0IGBscnVfZ2VuX2xvb2tfYXJvdW5kYCwgYW5kIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBmb2xpb19yZWZlcmVuY2VkX29uZWAuIFRoYXQmIzM5O3MgdGhlIGltbWVkaWF0ZSBjb250ZXh0LiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGJyb2FkZXIgaW1wbGljYXRpb25zLiBUaGlzIGxpa2VseSBoYXMgaW1wbGljYXRpb25zIGZvciB0aGUgTFJVIGNhY2hlIGludGVyYWN0aW9uLCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBtaWdyYXRpb24gZmxhZ3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBBcmUgdGhlcmUgaW50ZXJhY3Rpb25zIG9yIGRlcGVuZGVuY2llcyB0aGVyZSB0aGF0IGNhbiBiZSBzdHJlYW1saW5lZD8gSXMgdGhlcmUgc2hhcmVkIGZ1bmN0aW9uYWxpdHk/IEFyZSB0aGUgZmxhZ3MgdXNlZCBkdXJpbmcgbG9vayBhcm91bmQsIG9yIGlzIHRoZXJlIHRoZSBhYmlsaXR5IHRvIHNldCB0aGVtIGR1cmluZyBtaWdyYXRpb24/IFRoaXMgbGluZSBvZiB0aG91Z2h0IHByb21wdHMgbWUgdG8gcmV2aWV3IGhvdyBgZm9saW9fbWlncmF0ZV9mbGFnc2AgcmVsYXRlcyB0byB0aGUgTFJVIGFuZCByZWZlcmVuY2VkIHBhZ2Ugb3BlcmF0aW9ucy4gVGhlcmUgY291bGQgYmUgYW4gb3Bwb3J0dW5pdHkgZm9yIG9wdGltaXphdGlvbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDU6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fbWlncmF0ZV9mbGFncyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9haW8uYz00NjA9c3RhdGljIGludCBhaW9fbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpkc3QsXG4tLVxuZnMvYWlvLmMtNTEyLVx0Zm9saW9fY29weShkc3QsIHNyYyk7XG5mcy9haW8uYzo1MTM6XHRmb2xpb19taWdyYXRlX2ZsYWdzKGRzdCwgc3JjKTtcbmZzL2Fpby5jLTUxNC1cdEJVR19PTihjdHgtXHUwMDNlcmluZ19mb2xpb3NbaWR4XSAhPSBzcmMpO1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jPTEwMjQ9c3RhdGljIGludCBodWdldGxiZnNfbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDM5LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTA0MDpcdGZvbGlvX21pZ3JhdGVfZmxhZ3MoZHN0LCBzcmMpO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTA0MS1cbi0tXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaD02OT12b2lkIHNvZnRsZWFmX2VudHJ5X3dhaXRfb25fbG9ja2VkKHNvZnRsZWFmX3QgZW50cnksIHNwaW5sb2NrX3QgKnB0bClcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTcwLVx0XHRfX3JlbGVhc2VzKHB0bCk7XG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaDo3MTp2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbyk7XG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaC03Mi1pbnQgZm9saW9fbWlncmF0ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg9MzUyPXN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcmVjbGFpbWluZylcbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTM2Mi1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6MzYzOlx0LyogZm9yIGZvbGlvX21pZ3JhdGVfZmxhZ3MoKSAqL1xuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0zNjQtXHRmbGFncyA9ICFyZWNsYWltaW5nIFx1MDAyNlx1MDAyNiBscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIGdlbikgPyBCSVQoUEdfYWN0aXZlKSA6IDA7XG4tLVxubW0vbWlncmF0ZS5jPTczOT1pbnQgbWlncmF0ZV9odWdlX3BhZ2VfbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL21pZ3JhdGUuYy03NzQtICovXG5tbS9taWdyYXRlLmM6Nzc1OnZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vbWlncmF0ZS5jLTc3Ni17XG4tLVxubW0vbWlncmF0ZS5jLTg2My19XG5tbS9taWdyYXRlLmM6ODY0OkVYUE9SVF9TWU1CT0woZm9saW9fbWlncmF0ZV9mbGFncyk7XG5tbS9taWdyYXRlLmMtODY1LVxuLS1cbm1tL21pZ3JhdGUuYz04NzA9c3RhdGljIGludCBfX21pZ3JhdGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZHN0LFxuLS1cbm1tL21pZ3JhdGUuYy04OTAtXG5tbS9taWdyYXRlLmM6ODkxOlx0Zm9saW9fbWlncmF0ZV9mbGFncyhkc3QsIHNyYyk7XG5tbS9taWdyYXRlLmMtODkyLVx0cmV0dXJuIDA7XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMTA5PXN0YXRpYyB2b2lkIF9fbWlncmF0ZV9kZXZpY2VfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjUxLVx0XHRcdGVsc2Vcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI1MjpcdFx0XHRcdGZvbGlvX21pZ3JhdGVfZmxhZ3MobmV3Zm9saW8sIGZvbGlvKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI1My1cdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjIxMwoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDcxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEZvY3VzIFN5bWJvbHMgaW4gTWVtb3J5IE1hbmFnZW1lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBzY2FuIGZsYWdnZWQgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgIGFzIGV4cG9ydGVkLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBpdCBhIGNhbmRpZGF0ZSBmb3IgY2xvc2VyIGluc3BlY3Rpb24uIEJ1dCBJIHF1aWNrbHkgY2hlY2tlZCBhcm91bmQsIGFuZCBJIHNlZSB0aGF0IGEgc2xldyBvZiBvdGhlcnMgYXJlIHN0YXRpYzogYGZvbGlvX3VwZGF0ZV9nZW5gLCBgZm9saW9faW5jX2dlbmAsIGBscnVfZ2VuX2luY19yZWZzYCwgYGxydV9nZW5fY2xlYXJfcmVmc2AsIGB3YWxrX3B0ZV9yYW5nZWAsIGB3YWxrX3BtZF9yYW5nZV9sb2NrZWRgLCBhbmQgYGV2aWN0X2ZvbGlvc2AgYWxsIHNlZW0gdG8gYmUgaW50ZXJuYWwgdG8gdGhlaXIgcmVzcGVjdGl2ZSBtb2R1bGVzLCBzbyBJJiMzOTtsbCBwdXQgdGhlbSBvbiBhIGJhY2sgYnVybmVyIGZvciBub3cuCgpOb3csIGxldCYjMzk7cyBkaWcgaW50byB0aGUgbm9uLXN0YXRpYyBvbmVzIG1vcmUgZGVlcGx5LiBJIHN0YXJ0ZWQgd2l0aCBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgLiBUcmFjaW5nIGl0LCBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgdXBkYXRlX2xydV9zaXplYCwgd2hpY2ggaXMgbWFya2VkIGBfX2Fsd2F5c19pbmxpbmVgLCBhbmQgaW4gdHVybiBnZXRzIGNhbGxlZCBieSBgbHJ1dmVjX2FkZF9mb2xpb2AsIGBscnV2ZWNfZGVsX2ZvbGlvYCwgZXRjLiBUaGF0IGNvbmZpcm1zIGl0JiMzOTtzIGEgY3JpdGljYWwgZnVuY3Rpb24gcmVsYXRlZCB0byBtZW1vcnkgY2dyb3VwIExSVSBtYW5hZ2VtZW50LCBhbmQgaXQmIzM5O3MgZGVmaW5pdGVseSBhIGdvb2QgZm9jdXMuCgpOZXh0LCBJIGNoZWNrZWQgYGxydV9nZW5fbG9va19hcm91bmRgLiBJdCYjMzk7cyBub24tc3RhdGljIGFuZCBnZXRzIGNhbGxlZCBieSBgZm9saW9fcmVmZXJlbmNlZF9vbmVgLCB3aGljaCBtYWtlcyBpdCBhbm90aGVyIGludGVyZXN0aW5nIHN5bWJvbC4KClRoZW4sIGJhY2sgdG8gYGZvbGlvX21pZ3JhdGVfZmxhZ3NgLiBJdCYjMzk7cyBleHBvcnRlZCBhbmQgY2FsbGVkIGZyb20gc2V2ZXJhbCBpbXBvcnRhbnQgbWlncmF0aW9uIGZ1bmN0aW9uczogYGFpb19taWdyYXRlX2ZvbGlvYCwgYGh1Z2V0bGJmc19taWdyYXRlX2ZvbGlvYCwgYF9fbWlncmF0ZV9mb2xpb2AsIGFuZCBgX19taWdyYXRlX2RldmljZV9wYWdlc2AuIFRoaXMgaXMgYW5vdGhlciBzdHJvbmcgY29udGVuZGVyIGZvciBmb2N1cy4KCkkgYWxzbyBxdWlja2x5IGNoZWNrZWQgYG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemVgLCBgZm9saW9fbHJ1X3JlZnNgIGFuZCBgZm9saW9fc2V0X2xydV9yZWZzYCBidXQgdGhleSBhcmUgYHN0YXRpYyBpbmxpbmVgLCBzbyB0aGV5IGRvbiYjMzk7dCBzZWVtIHRvIGhhdmUgYXMgd2lkZSBhIHNjb3BlLgoKU28sIGJhc2VkIG9uIHRoZSBpbml0aWFsIGFzc2Vzc21lbnQsIHRoZSBrZXkgZm9jdXMgc3ltYm9scyBhcHBlYXIgdG8gYmU6CiogICBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgCiogICBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAKKiAgIGBmb2xpb19taWdyYXRlX2ZsYWdzYAoKVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJIHdlbnQgYmFjayB0byByZS1jaGVjayBhbGwgdGhlIGNvZGUuIEkgdmVyaWZpZWQgdGhhdCB0aG9zZSB0aHJlZTogYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCwgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgLCBhbmQgYGxydV9nZW5fbG9va19hcm91bmRgIHdlcmUgYWN0dWFsbHkgdGhlIGZ1bmN0aW9ucyB0aGF0IGhhZCBiZWVuIG1vZGlmaWVkLgoKSnVzdCB0byBiZSB0aG9yb3VnaCwgSSB3ZW50IGJhY2sgYW5kIHJlLWNoZWNrZWQgc2V2ZXJhbCBzdGF0aWMgZnVuY3Rpb25zIHRvIGJlIHN1cmUuIEkgY2hlY2tlZCB0aGUgc3RhdGljIGZ1bmN0aW9uczogYGV2aWN0X2ZvbGlvc2AsIGBnZXRfdGllcl9pZHhgLCBgZ2V0X3R5cGVfdG9fc2NhbmAsIGByZWFkX2N0cmxfcG9zYCwgYGZvbGlvX3VwZGF0ZV9nZW5gLCBgZm9saW9faW5jX2dlbmAsIGB1cGRhdGVfYmF0Y2hfc2l6ZWAsIGB3YWxrX3VwZGF0ZV9mb2xpb2AsIGB3YWxrX3B0ZV9yYW5nZWAsIGB3YWxrX3BtZF9yYW5nZV9sb2NrZWRgLCBhbmQgYGlzb2xhdGVfZm9saW9gLCBqdXN0IHRvIG1ha2Ugc3VyZSBJIHdhc24mIzM5O3QgbWlzc2luZyBhbnl0aGluZyBzaWduaWZpY2FudC4KCkFscmlnaHQsIHRoZSBmaW5hbCBsaXN0IG9mIG5vbi1zdGF0aWMgZnVuY3Rpb25zIG1vZGlmaWVkIGlzOgoqICAgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYAoqICAgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgCiogICBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDU6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTUNHJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMDY3PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xuLS1cbmluaXQvS2NvbmZpZy0xMDc2LVxuaW5pdC9LY29uZmlnOjEwNzc6Y29uZmlnIE1FTUNHXG5pbml0L0tjb25maWctMTA3OC1cdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5pbml0L0tjb25maWctMTA4NS1cbmluaXQvS2NvbmZpZzoxMDg2OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG5pbml0L0tjb25maWctMTA4Ny1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTA5Mi1cbmluaXQvS2NvbmZpZzoxMDkzOmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuaW5pdC9LY29uZmlnLTEwOTQtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTEwOTktXG5pbml0L0tjb25maWc6MTEwMDpjb25maWcgTUVNQ0dfVjFcbmluaXQvS2NvbmZpZy0xMTAxLVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA1OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODgxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBzZWxmLXJlZmxlY3Rpb246CgoqKkRlZXAgRGl2ZSBvbiBMUlVfR0VOIGFuZCBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZSoqCgpBbHJpZ2h0LCBzbyAqbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUqIGFic29sdXRlbHkgbmVlZHMgYE1FTUNHYC4gTm8gcXVlc3Rpb24gdGhlcmUuIEl0JiMzOTtzIGZ1bmRhbWVudGFsLiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBpcyB0aGVyZSBhbnl0aGluZyBlbHNlIHRoYXQgKkxSVV9HRU4qIGRlcGVuZHMgb24/IEkgbmVlZCB0byBxdWlja2x5IHNjYW4gYW5kIHZlcmlmeSB0aGF0IEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGEgZGVwZW5kZW5jeSBvciBpbnRlcmFjdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29uZmlndXJhdGlvbiBjb250ZXh0LiBJIGtub3cgdGhpcyBzZWVtcyBsaWtlIGEgbm8tYnJhaW5lciB0byBjaGVjaywgYnV0IHRoZXNlIHRoaW5ncyBvZnRlbiBoYXZlIGhpZGRlbiBpbXBsaWNhdGlvbnMsIGFuZCBJIHdhbnQgdG8gYmUgMTAwJSBzdXJlIEkgaGF2ZW4mIzM5O3Qgb3Zlcmxvb2tlZCBhbnkgb3RoZXIgZGVwZW5kZW50IGNvbmZpZ3VyYXRpb25zLiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5LiBMZXQmIzM5O3MgbWFrZSBzdXJlIG91ciBiYXNlcyBhcmUgY292ZXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDU6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExSVV9HRU4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMzkzPWNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1Bcbi0tXG5tbS9LY29uZmlnLTE0MDMtIyBtdWx0aS1nZW4gTFJVIHtcbm1tL0tjb25maWc6MTQwNDpjb25maWcgTFJVX0dFTlxubW0vS2NvbmZpZy0xNDA1LVx0Ym9vbCBcJiMzNDtNdWx0aS1HZW4gTFJVXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDEyLVxubW0vS2NvbmZpZzoxNDEzOmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcbm1tL0tjb25maWctMTQxNC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MTgtXG5tbS9LY29uZmlnOjE0MTk6Y29uZmlnIExSVV9HRU5fU1RBVFNcbm1tL0tjb25maWctMTQyMC1cdGJvb2wgXCYjMzQ7RnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDI3LVxubW0vS2NvbmZpZzoxNDI4OmNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxubW0vS2NvbmZpZy0xNDI5LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODM2MAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgTFJVX0dFTioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJlIGFyb3VuZCBgTFJVX0dFTmAuIEZpcnN0LCBsZXQmIzM5O3MganVzdCBzY29wZSBvdXQgd2hhdCYjMzk7cyBkaXJlY3RseSBjb25uZWN0ZWQuIFdoYXQgbW9kdWxlcyBvciBmdW5jdGlvbnMgY2FsbCBpdD8gV2hhdCBkb2VzIGl0IGNhbGw/IEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgbmVlZCBhIHF1aWNrIGNhbGwgZ3JhcGggdmlzdWFsaXphdGlvbi4gR3JhcGh2aXogbWF5YmU/IE9yIEkgY291bGQgcXVpY2tseSBkdW1wIHRoZSBkZXBlbmRlbmNpZXMgdXNpbmcgbXkgcHJlZmVycmVkIHRvb2wgY2hhaW4uIEnigJltIGxlYW5pbmcgdG93YXJkcyBhIHByb2dyYW1tYXRpYyBhcHByb2FjaCBmb3IgdGhpcyBzaW5jZSBhIHZpc3VhbCByZXByZXNlbnRhdGlvbiwgd2hpbGUgaGVscGZ1bCwgcHJvYmFibHkgd29uJiMzOTt0IGdpdmUgbWUgdGhlIGxvdyBsZXZlbCBpbnNpZ2h0IEkgbmVlZCBmb3IgYSB0YXNrLgoKVGhlbiwgSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGBMUlVfR0VOYCBpbnRlcmFjdHMgd2l0aC4gQXJlIHRoZXNlIHNoYXJlZCwgcHJvdGVjdGVkIGJ5IGxvY2tzLCBvciBzaW5nbGUtdGhyZWFkZWQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25jdXJyZW5jeSBtb2RlbCBpbW1lZGlhdGVseSBpZiBpdCYjMzk7cyBub3Qgc2luZ2xlIHRocmVhZGVkLiBUaGlzIHByb2JhYmx5IGVudGFpbHMgdHJhY2luZyBob3cgdGhlIGtleXMgYW5kIHZhbHVlcyBhcmUgc3RvcmVkIGFuZCByZXRyaWV2ZWQuCgpJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCB0aGUgZXZpY3Rpb24gcG9saWN5IGltcGxlbWVudGF0aW9uLiBJcyBpdCBhIHNpbXBsZSBjbG9jay1zd2VlcCwgYSBtb3JlIGNvbXBsZXggYWRhcHRpdmUgc2NoZW1lLCBvciBzb21ldGhpbmcgY3VzdG9tPyBUaGUgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIG9mIGBMUlVfR0VOYCB3aWxsIGJlIGhpZ2hseSBkZXBlbmRlbnQgb24gdGhpcy4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHRoZSBtZXRyaWNzIGNvbGxlY3Rpb24uCgpGaW5hbGx5LCBJIHdhbnQgdG8gY29uc2lkZXIgaG93IHRoZSBjYWNoZSBpcyBjb25maWd1cmVkLiBBcmUgdGhlcmUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGZvciBzaXplLCBldmljdGlvbiB0aHJlc2hvbGQsIG9yIG90aGVyIGJlaGF2aW9yPyBBbnkgdW5pdCB0ZXN0cyBvbiB0aGUgZXZpY3Rpb24gcG9saWN5IGltcGxlbWVudGF0aW9uIHdvdWxkIGJlIGhlbHBmdWwgZm9yIGEgcXVpY2tlciB1bmRlcnN0YW5kaW5nLCBhbmQgSSB3b3VsZCB3YW50IHRvIGxvb2sgYXQgdGhvc2UgbmV4dC4gSSBhbSBhbHNvIGN1cmlvdXMgYWJvdXQgdGhlIHRlc3QgY292ZXJhZ2Ugc3Vycm91bmRpbmcgdGhpcyBjb21wb25lbnQ7IEnigJlkIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyBhcmUgZnVsbHkgZXhlcmNpc2VkLCBlc3BlY2lhbGx5IGluIGVkZ2UtY2FzZSBzY2VuYXJpb3MgbGlrZSB2ZXJ5IGhpZ2ggb3IgdmVyeSBsb3cgd29ya2xvYWRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0MDA6XHRcdCAgcHVycG9zZXMuICBJdCBpcyByZXF1aXJlZCB0byBlbmFibGUgdXNlcmZhdWx0ZmQgd3JpdGUgcHJvdGVjdGlvbiBvblxuMTQwMTpcdFx0ICBmaWxlLWJhY2tlZCBtZW1vcnkgdHlwZXMgbGlrZSBzaG1lbSBhbmQgaHVnZXRsYmZzLlxuMTQwMjpcdFxuMTQwMzpcdCMgbXVsdGktZ2VuIExSVSB7XG4xNDA0Olx0Y29uZmlnIExSVV9HRU5cbjE0MDU6XHRcdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuMTQwNjpcdFx0ZGVwZW5kcyBvbiBNTVVcbjE0MDc6XHRcdCMgbWFrZSBzdXJlIGZvbGlvLVx1MDAzZWZsYWdzIGhhcyBlbm91Z2ggc3BhcmUgYml0c1xuMTQwODpcdFx0ZGVwZW5kcyBvbiA2NEJJVCB8fCAhU1BBUlNFTUVNIHx8IFNQQVJTRU1FTV9WTUVNTUFQXG4xNDA5Olx0XHRoZWxwXG4xNDEwOlx0XHQgIEEgaGlnaCBwZXJmb3JtYW5jZSBMUlUgaW1wbGVtZW50YXRpb24gdG8gb3ZlcmNvbW1pdCBtZW1vcnkuIFNlZVxuMTQxMTpcdFx0ICBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMuXG4xNDEyOlx0XG4xNDEzOlx0Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxuMTQxNDpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnkgZGVmYXVsdFwmIzM0O1xuMTQxNTpcdFx0ZGVwZW5kcyBvbiBMUlVfR0VOXG4xNDE2Olx0XHRoZWxwXG4xNDE3Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG11bHRpLWdlbiBMUlUgYnkgZGVmYXVsdC5cbjE0MTg6XHRcbjE0MTk6XHRjb25maWcgTFJVX0dFTl9TVEFUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTA3MAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIFRoaXMgTWVtb3J5IE1hbmFnZW1lbnQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gTGVhc3QgUmVjZW50bHkgVXNlZCAoTFJVKSBhbmQgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBhdCBmaXJzdCBnbGFuY2UuIEl0JiMzOTtzIGNsZWFyIHRoYXQgYExSVV9HRU5gIHJlbGllcyBvbiBhIGNvdXBsZSBvZiBrZXkgdGhpbmdzOiB0aGUgYE1NVWAgKG9idmlvdXNseSwgZXNzZW50aWFsIGZvciBtZW1vcnkgbWFuYWdlbWVudCkgYW5kIGVpdGhlciBhIDY0LWJpdCBhcmNoaXRlY3R1cmUgb3IgYSBub24tc3BhcnNlIG1lbW9yeSBzZXR1cCBvciB0aGUgYFNQQVJTRU1FTV9WTUVNTUFQYCBjb25maWd1cmF0aW9uLiBNYWtlcyBzZW5zZS4gTm93LCBteSBpbW1lZGlhdGUgcmVhY3Rpb24gaXMgdGhhdCB3ZSBzaG91bGQgYmUgZW5hYmxpbmcgYm90aCBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgLgoKQmV5b25kIHRoYXQsIHRoZSBkZXBlbmRlbmNpZXMgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYE1FTUNHYCBpcyBkZWZpbml0ZWx5IHJlcXVpcmVkIHRvIGFsbG93IGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgdG8gb3BlcmF0ZSBjb3JyZWN0bHkuIFRoYXQgZnVuY3Rpb24gdGVsbHMgbWUgdGhhdCB0aGVyZSBhcmUgc29tZSBzaWduaWZpY2FudCB1cGRhdGVzIHRvIHRoZSBtZW1vcnkgY29udHJvbCBncm91cCBmdW5jdGlvbmFsaXR5IGhlcmUsIHdoaWNoIGRlZmluaXRlbHkgcGlxdWVzIG15IGludGVyZXN0LgoKSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIG9yIG51YW5jZXMgaGVyZS4gVGhlIGZpbGVzIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVk4oCUYG1tL3Ztc2Nhbi5jYCwgYG1tL21pZ3JhdGUuY2AsIGBtbS9tZW1jb250cm9sLmNgLCBhbmQgYG1tL2ZvbGlvLmNg4oCUdGhlc2UgYXJlICpjb3JlKiBtZW1vcnkgbWFuYWdlbWVudCBmaWxlcywgc28gdGhpcyBpcyBhIGNydWNpYWwgY2hhbmdlLiBJIG5lZWQgdG8gZGlnIGluLgoKTm93LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIGtleSBzeW1ib2xzIHRvdWNoZWQgaGVyZSB0byBnZXQgYSBzZW5zZSBvZiB0aGUgc2NvcGU6IGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAsIHRoYXQmIzM5O3MgdGhlIGJpZyBvbmUsIGdpdmVuIHRoZSBlYXJsaWVyIGBNRU1DR2AgdGllLWluLiBUaGVuLCBgZm9saW9fbWlncmF0ZV9mbGFnc2AsIHdoaWNoIHN1Z2dlc3RzIG1pZ3JhdGlvbiBjYXBhYmlsaXRpZXMgYXJlIGJlaW5nIGluZmx1ZW5jZWQsIGFuZCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAsIHdoaWNoIG1ha2VzIG1lIHN1c3BlY3Qgc29tZSBzb3J0IG9mIExSVS1iYXNlZCBsb29rLWFoZWFkIG9wdGltaXphdGlvbiBpcyBpbnZvbHZlZC4KCkZpbmFsbHksIEkgc2hvdWxkIGNoZWNrIHRoZSBmdW5jdGlvbnMgb3V0c2lkZSBvZiBzdGF0aWMsIGp1c3QgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBzaWduaWZpY2FudCBwdWJsaWMgaW50ZXJmYWNlIGNoYW5nZXMgdG8gY29uc2lkZXIuIEkmIzM5O2xsIGZvY3VzIG9uIHRoZSBjaGFuZ2VzIGluIGBtbS9mb2xpby5jYCBhcyB0aGV5IHNlZW0gbW9zdCB0YXJnZXRlZCB0byB0aGVzZSBsb3ctbGV2ZWwgcGFnZSByZXByZXNlbnRhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA1OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5faW5jX3JlZnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tbXpvbmUuaD00MjQ9ZW51bSBscnV2ZWNfZmxhZ3Mge1xuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtNTA2LSAqIEZvciBmb2xpb3MgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzLFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo1MDc6ICogbHJ1X2dlbl9pbmNfcmVmcygpIHNldHMgYWRkaXRpb25hbCBiaXRzIG9mIExSVV9SRUZTX1dJRFRIIGluIGZvbGlvLVx1MDAzZWZsYWdzXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTUwOC0gKiBhZnRlciBQR19yZWZlcmVuY2VkLCB0aGVuIFBHX3dvcmtpbmdzZXQgYWZ0ZXIgTFJVX1JFRlNfV0lEVEguIEFmdGVyIGFsbCBpdHNcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTUxMS0gKiBmb2xpb19pbmNfZ2VuKCkgZG9lcyB0aGF0LCBpdCBjbGVhcnMgTFJVX1JFRlNfRkxBR1Mgc28gdGhhdFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo1MTI6ICogbHJ1X2dlbl9pbmNfcmVmcygpIGNhbiBzdGFydCBvdmVyLiBOb3RlIHRoYXQgZm9yIHRoaXMgY2FzZSwgTFJVX1JFRlNfTUFTSyBpc1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaC01MTMtICogb25seSB2YWxpZCB3aGVuIFBHX3JlZmVyZW5jZWQgaXMgc2V0LlxuLS1cbm1tL2ZvbGlvLmM9MzIyPXN0YXRpYyB2b2lkIF9fbHJ1X2NhY2hlX2FjdGl2YXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZm9saW8uYy0zNTMtXG5tbS9mb2xpby5jOjM1NDpzdGF0aWMgdm9pZCBscnVfZ2VuX2luY19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9mb2xpby5jLTM1NS17XG4tLVxubW0vZm9saW8uYz0zODA9c3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZm9saW8uYy00MDAtXG5tbS9mb2xpby5jOjQwMTpzdGF0aWMgdm9pZCBscnVfZ2VuX2luY19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9mb2xpby5jLTQwMi17XG4tLVxubW0vZm9saW8uYz00MjU9dm9pZCBmb2xpb19tYXJrX2FjY2Vzc2VkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZm9saW8uYy00MjktXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkpIHtcbm1tL2ZvbGlvLmM6NDMwOlx0XHRscnVfZ2VuX2luY19yZWZzKGZvbGlvKTtcbm1tL2ZvbGlvLmMtNDMxLVx0XHRyZXR1cm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA1OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMjAxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJvbSBteSBwZXJzcGVjdGl2ZToKCioqVGhpbmtpbmcgVGhyb3VnaCBgbHJ1X2dlbl9pbmNfcmVmc2AgYW5kIFNjYW4gQ2hhbmdlcyoqCgpPa2F5LCBzbyBgbHJ1X2dlbl9pbmNfcmVmc2AgaXMgc3RhdGljLiBUaGF0IG1lYW5zIGl0JiMzOTtzIHNjb3BlZCB0byB0aGUgZmlsZSBpdCYjMzk7cyBpbiwgd2hpY2ggSSYjMzk7ZCBleHBlY3QgZ2l2ZW4gaXRzIHJvbGUuIE5vdywgbGV0IG1lIHNlZS4uLiB3aGVyZSBhcmUgdGhlIG1vc3QgcmVsZXZhbnQgY2hhbmdlcyBhcm91bmQgdGhpcyBsaWtlbHk/IERlZmluaXRlbHkgbmVlZCB0byBnbyBvdmVyIGBtbS92bXNjYW4uY2AuIEl0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIFZNIHNjYW5uaW5nIGxvZ2ljIGxpdmVzLCBzbyBhbnkgbW9kaWZpY2F0aW9ucyB0byBob3cgcmVmZXJlbmNlIGNvdW50cyBhcmUgbWFuYWdlZCwgb3IgaG93IGdlbmVyYXRpb25zIGFyZSBoYW5kbGVkLCB3b3VsZCBsaWtlbHkgc2hvdyB1cCB0aGVyZS4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIGNoYW5nZWQgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDU6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fdXBkYXRlX2dlbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTI4OD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbHJ1X2dlbl9mb2xpb19zZXEoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMjk4LVx0ICogfCBBY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzIGFuZCAgfCBBY2Nlc3NlZCB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMgfFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDoyOTk6XHQgKiB8IHByb21vdGVkIGJ5IGZvbGlvX3VwZGF0ZV9nZW4oKSAgICB8IGFuZCBwcm90ZWN0ZWQgYnkgZm9saW9faW5jX2dlbigpICB8XG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTMwMC1cdCAqICYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJiM0Mztcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTQyND1lbnVtIGxydXZlY19mbGFncyB7XG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC01MTQtICpcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NTE1OiAqIEZvciBmb2xpb3MgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBwYWdlIHRhYmxlcywgZm9saW9fdXBkYXRlX2dlbigpXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTUxNi0gKiBmcm9tIGEgcGFnZSB0YWJsZSB3YWxrIG9yIGxydV9nZW5fc2V0X3JlZnMoKSBmcm9tIGEgcm1hcCB3YWxrIHNldHNcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTUxOC0gKiBUaGVyZWFmdGVyLCB0aG9zZSB0d28gcGF0aHMgc2V0IFBHX3dvcmtpbmdzZXQgYW5kIHByb21vdGUgZm9saW9zIHRvIHRoZVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo1MTk6ICogeW91bmdlc3QgZ2VuZXJhdGlvbi4gTGlrZSBmb2xpb19pbmNfZ2VuKCksIGZvbGlvX3VwZGF0ZV9nZW4oKSBhbHNvIGNsZWFyc1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaC01MjAtICogUEdfcmVmZXJlbmNlZC4gTm90ZSB0aGF0IGZvciB0aGlzIGNhc2UsIExSVV9SRUZTX01BU0sgaXMgbm90IHVzZWQuXG4tLVxubW0vdm1zY2FuLmM9ODI3PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XG4tLVxubW0vdm1zY2FuLmMtODM3LSAqIHdpdGggUEdfYWN0aXZlIHNldC4gSW4gY29udHJhc3QsIHRoZSBhZ2luZyAocGFnZSB0YWJsZSB3YWxrKSBwYXRoIHVzZXNcbm1tL3Ztc2Nhbi5jOjgzODogKiBmb2xpb191cGRhdGVfZ2VuKCkuXG5tbS92bXNjYW4uYy04MzktICovXG4tLVxubW0vdm1zY2FuLmM9MzI1Nj1zdGF0aWMgYm9vbCBwb3NpdGl2ZV9jdHJsX2VycihzdHJ1Y3QgY3RybF9wb3MgKnNwLCBzdHJ1Y3QgY3RybF9wb3MgKnB2KVxuLS1cbm1tL3Ztc2Nhbi5jLTMyNzEtLyogcHJvbW90ZSBwYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzICovXG5tbS92bXNjYW4uYzozMjcyOnN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgaW50ICppc19maWxlLFxubW0vdm1zY2FuLmMtMzI3My1cdFx0XHQgICAgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbi0tXG5tbS92bXNjYW4uYz0zMzA3PXN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vdm1zY2FuLmMtMzMyMC1cbm1tL3Ztc2Nhbi5jOjMzMjE6XHRcdC8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqL1xubW0vdm1zY2FuLmMtMzMyMi1cdFx0aWYgKG9sZF9nZW4gIT0gbWluX2dlbilcbi0tXG5tbS92bXNjYW4uYz0zNTI0PXN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL3Ztc2Nhbi5jLTM1MzktXHRpZiAod2Fsaykge1xubW0vdm1zY2FuLmM6MzU0MDpcdFx0b2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sIFx1MDAyNmZpbGUsIFx1MDAyNnZtYS1cdTAwM2VmbGFncyk7XG5tbS92bXNjYW4uYy0zNTQxLVx0XHRpZiAob2xkX2dlbiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG9sZF9nZW4gIT0gbmV3X2dlbilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDU6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEyMDAKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBQb3RlbnRpYWwgRm9saW8gVXBkYXRlIEltcGFjdHMqKgoKT2theSwgc28gYGZvbGlvX3VwZGF0ZV9nZW5gIGlzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcywgcGFydGljdWxhcmx5IGluIHRoZSBjb250ZXh0IG9mIHJlY2VudCBtb2RpZmljYXRpb25zLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdC4KCk5vdywgSSYjMzk7bGwgc2hpZnQgbXkgZm9jdXMgYW5kIHN0YXJ0IGludmVzdGlnYXRpbmcgdGhlIGNoYW5nZXMgaW4gYG1tL21pZ3JhdGUuY2AuIFRoaXMgZmlsZSBvZnRlbiBpbnRlcmFjdHMgaGVhdmlseSB3aXRoIGZvbGlvIG1hbmFnZW1lbnQsIGFuZCBpdCYjMzk7cyBhIGxpa2VseSBwb2ludCBvZiBpbXBhY3QgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gdXBkYXRpbmcgZm9saW9zLiBJJiMzOTtsbCBjYXJlZnVsbHkgc2NydXRpbml6ZSB0aGUgZGlmZnMgaW4gdGhhdCBhcmVhLiBJIHN1c3BlY3QgdGhlcmUgbWF5IGJlIGltcG9ydGFudCBjbHVlcyByZWxhdGVkIHRvIHdoYXQgSSYjMzk7bSBjdXJyZW50bHkgbG9va2luZyBhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDU6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fbWlncmF0ZV9yZWZzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW1faW5saW5lLmg9MzUyPXN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcmVjbGFpbWluZylcbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTM3NC0vKipcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6Mzc1OiAqIGZvbGlvX21pZ3JhdGVfcmVmcyAtIGNvcHkgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBhIG5ldyBmb2xpb1xuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0zNzYtICogQG5ldzogdGhlIGRlc3RpbmF0aW9uIGZvbGlvXG4tLVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0zODItICovXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjM4MzpzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMzg0LXtcbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTQxMD1zdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIHJlY2xhaW1pbmcpXG4tLVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC00MTQtXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjQxNTpzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNDE2LXtcbi0tXG5tbS9taWdyYXRlLmM9Nzc1PXZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL21pZ3JhdGUuYy04MDgtXHQvKiBDb3B5IHRoZSByZWZlcmVuY2Ugc3RhdGUsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkICovXG5tbS9taWdyYXRlLmM6ODA5Olx0Zm9saW9fbWlncmF0ZV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7XG5tbS9taWdyYXRlLmMtODEwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTc4NAoJCQkJCQkJb3V0cHV0OiAyMTAKCQkJCQkJCXRob3VnaHRzOiA3MzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE1HTFJVIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgY29yZSBtZW1vcnkgbWFuYWdlbWVudCB3aXRoIHRoZSBNdWx0aS1HZW4gTFJVIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgaG93IHdlIG1hbmFnZSBMUlUgZ2VuZXJhdGlvbiBhbmQgcmVmZXJlbmNlIGZsYWdzIHdpdGhpbiB0aGUgYGZvbGlvLSZndDtmbGFnc2Agc3RydWN0dXJlLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHNoaWZ0aW5nIGZyb20gZGlyZWN0IGJpdG1hc2sgbWFuaXB1bGF0aW9uIHRvIGEgc2V0IG9mIGhlbHBlciBmdW5jdGlvbnMsIGFuZCBhbHNvIG1vZGlmeWluZyBgbHJ1X3pvbmVfc2l6ZWAgaW4gYG1lbV9jZ3JvdXBfcGVyX25vZGVgIHRvIHVzZSBhbiBgYXRvbWljX2xvbmdfdGAuIFRoaXMgaW1wbGllcyBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYW5kIGNvcnJlY3RuZXNzIGltcGxpY2F0aW9ucywgcGFydGljdWxhcmx5IGFyb3VuZCBjb25jdXJyZW5jeS4KClNvLCB0aGUga2V5IGZ1bmN0aW9ucyBJJiMzOTttIGZvY3VzaW5nIG9uIGFyZTogYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCwgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgLCBhbmQgYGxydV9nZW5fbG9va19hcm91bmRgLiBUaGUgYGZvbGlvX21pZ3JhdGVfcmVmc2AgZnVuY3Rpb24gaXMgYHN0YXRpYyBpbmxpbmVgLCBzbyBJIGRvbiYjMzk7dCBuZWVkIHRvIGNvbnNpZGVyIGl0IGZ1cnRoZXIgYXQgdGhpcyBwb2ludC4KCkkgc3RhcnRlZCBieSB2ZXJpZnlpbmcgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgaXMgZGVmaW5pdGVseSBndWFyZGVkIGJ5IGBDT05GSUdfTFJVX0dFTmAsIHdoaWNoIGlzIGV4cGVjdGVkLiAgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCByZXF1aXJlcyBgQ09ORklHX01FTUNHYC4gYGZvbGlvX21pZ3JhdGVfZmxhZ3NgIGlzIGluIGBtbS9taWdyYXRlLmNgLCBzbyBJIHNob3VsZCBrZWVwIGFuIGV5ZSBvbiBob3cgaXQgd29ya3MuIEkmIzM5O20gYWxzbyBjb25maXJtaW5nIHdlIG5lZWQgYExSVV9HRU5gLCBgTFJVX0dFTl9FTkFCTEVEYCwgYW5kIGBNRU1DR2AgZW5hYmxlZCBmb3IgdGhpcyBwYXRjaCB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIEkgY2hlY2tlZCBgTFJVX0dFTmAmIzM5O3MgZGVwZW5kZW5jaWVzLCB3aGljaCBpbmNsdWRlIGBNTVVgIGFuZCB0aGUgNjQtYml0IG9yIHNwYXJzZSBtZW1vcnkgY29uZmlndXJhdGlvbnMuICBUaG9zZSBhcmVuJiMzOTt0IHRoaW5ncyBJJiMzOTttIHRvbyBjb25jZXJuZWQgYWJvdXQgYWRkaW5nLCBhcyB0aG9zZSBhcmUgdXN1YWxseSBlbmFibGVkIGJ5IGRlZmF1bHQgYW55d2F5LgoKSSBhbHNvIGNoZWNrZWQgdG8gc2VlIGlmIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB3ZXJlIG1vZGlmaWVkIGluIHRoaXMgcGF0Y2guICBgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZWAgaXMgc3RhdGljIGlubGluZS4gYGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1YCwgYGxydV9nZW5fZnJvbV9mbGFnc2AsIGBscnVfZ2VuX3NldF9mbGFnc2AsIGBscnVfcmVmc19mcm9tX2ZsYWdzYCwgYGxydV9yZWZzX3NldF9mbGFnc2AsIGFuZCBgZm9saW9fc2V0X2xydV9yZWZzYCBhcmUgYWxzbyBzdGF0aWMgaW5saW5lLiBTbywgdGhlIGZvY3VzIHN5bWJvbHMgYXJlIHRoZSBjb3JyZWN0IG9uZXMuCgpJbiBlc3NlbmNlLCB0aGlzIHBhdGNoIGludHJvZHVjZXMgY2hhbmdlcyB0aGF0IGFsdGVyIGhvdyBmb2xpb3MgYXJlIHRyYWNrZWQgYW5kIGFnZWQgaW4gdGhlIExSVSBsaXN0cy4gVGhlIGhlbHBlciBmdW5jdGlvbnMgcmVwbGFjZSBiaXRtYXNrIG9wZXJhdGlvbnMsIHdoaWNoIGlzIGdvb2QsIGJ1dCB0aGUgc3dpdGNoIHRvIGBhdG9taWNfbG9uZ190YCBpbiBgbWVtX2Nncm91cF9wZXJfbm9kZWAgaW50cm9kdWNlcyBhdG9taWMgb3BlcmF0aW9ucy4gVGhpcywgY29tYmluZWQgd2l0aCB0aGUgZmFjdCB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW52b2tlZCBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzIOKAkyBpbmNsdWRpbmcgcGFnZSBtaWdyYXRpb24sIExSVSBzaXplIHRyYWNraW5nLCBhbmQgcGFnZSB0YWJsZSBzY2FubmluZyDigJMgbWFrZXMgdGhlbSBwcmltZSBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLiBUaGV5IGFyZSBhbGwgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsbHkgYWx0ZXIgbWVtb3J5IG1hbmFnZW1lbnQmIzM5O3MgY29yZSBiZWhhdmlvci4KCkkmIzM5O3ZlIGNvbmZpcm1lZCB0aGUgZm9jdXMgc3ltYm9scyBhcmUgdmFsaWQuIGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAgaXNuJiMzOTt0IGBFWFBPUlRfU1lNQk9MYCYjMzk7ZCBidXQgaXQmIzM5O3MgdXNlZCBmcm9tIGBtbS9mb2xpby5jYCBhbmQgYG1tL3Ztc2Nhbi5jYC4gYGZvbGlvX21pZ3JhdGVfZmxhZ3NgIGlzIGV4cG9ydGVkLCBhbmQgYGxydV9nZW5fbG9va19hcm91bmRgIGlzIHVzZWQgaW4gYG1tL3JtYXAuY2AuIExvb2tzIGdvb2QgdG8gbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA1OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplJiMzNDssCiAgICAmIzM0O2ZvbGlvX21pZ3JhdGVfZmxhZ3MmIzM0OywKICAgICYjMzQ7bHJ1X2dlbl9sb29rX2Fyb3VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIGltcGxlbWVudGF0aW9uLCBjaGFuZ2luZyBob3cgTFJVIGdlbmVyYXRpb24gYW5kIHJlZmVyZW5jZSBmbGFncyBhcmUgc3RvcmVkIGluIGBmb2xpby1cdTAwM2VmbGFnc2AuIEl0IHJlcGxhY2VzIGRpcmVjdCBiaXRtYXNrIG9wZXJhdGlvbnMgd2l0aCBuZXcgaGVscGVyIGZ1bmN0aW9ucyBhbmQgY2hhbmdlcyBgbHJ1X3pvbmVfc2l6ZWAgaW4gYHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlYCB0byB1c2UgYGF0b21pY19sb25nX3RgIGluc3RlYWQgb2YgYHVuc2lnbmVkIGxvbmdgLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzLCBpbmNsdWRpbmcgcGFnZSBtaWdyYXRpb24sIExSVSBzaXplIHRyYWNraW5nLCBhbmQgcGFnZSB0YWJsZSBzY2FubmluZy4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsbHkgYWx0ZXJzIGhvdyBmb2xpb3MgYXJlIHRyYWNrZWQgYW5kIGFnZWQgaW4gdGhlIExSVSBsaXN0cywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUmIzM0OywKICAgICYjMzQ7Zm9saW9fbWlncmF0ZV9mbGFncyYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX2xvb2tfYXJvdW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgaW1wbGVtZW50YXRpb24sIGNoYW5naW5nIGhvdyBMUlUgZ2VuZXJhdGlvbiBhbmQgcmVmZXJlbmNlIGZsYWdzIGFyZSBzdG9yZWQgaW4gYGZvbGlvLVx1MDAzZWZsYWdzYC4gSXQgcmVwbGFjZXMgZGlyZWN0IGJpdG1hc2sgb3BlcmF0aW9ucyB3aXRoIG5ldyBoZWxwZXIgZnVuY3Rpb25zIGFuZCBjaGFuZ2VzIGBscnVfem9uZV9zaXplYCBpbiBgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGVgIHRvIHVzZSBgYXRvbWljX2xvbmdfdGAgaW5zdGVhZCBvZiBgdW5zaWduZWQgbG9uZ2AuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMsIGluY2x1ZGluZyBwYWdlIG1pZ3JhdGlvbiwgTFJVIHNpemUgdHJhY2tpbmcsIGFuZCBwYWdlIHRhYmxlIHNjYW5uaW5nLiBUaGUgY29kZSBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWxseSBhbHRlcnMgaG93IGZvbGlvcyBhcmUgdHJhY2tlZCBhbmQgYWdlZCBpbiB0aGUgTFJVIGxpc3RzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDU6NDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNTo0OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMsIHNwZWNpZmljYWxseSBmb2xpbyBMUlUgZ2VuZXJhdGlvbiBmbGFncyBhbmQgcmVmZXJlbmNlIHRyYWNraW5nLCBhbmQgY2hhbmdlcyBhIGNvdW50ZXIgKGBscnVfem9uZV9zaXplYCkgdG8gYW4gYXRvbWljIHZhcmlhYmxlIHRvIGZpeCBjb25jdXJyZW5jeSBpc3N1ZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgdGhhdCBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgbWlnaHQgYmUgbGVmdCBwYXJ0aWFsbHkgdW5pbml0aWFsaXplZC4gVGhlIGxvY2FsIHZhcmlhYmxlIGBmaWxlYCBpbnRyb2R1Y2VkIGluIGB3YWxrX3VwZGF0ZV9mb2xpb2AgaXMgb25seSB1c2VkIHdoZW4gYGZvbGlvX3VwZGF0ZV9nZW5gIHJldHVybnMgYSBub24tbmVnYXRpdmUgdmFsdWUsIHdoaWNoIGd1YXJhbnRlZXMgaXQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDhhOTI1ZDI1NDZjNTM4ZDRiM2IwZGMxNzU1Y2FhYzg5NDk4OWQ5YTAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxOCAwNTo0NzozOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKaW5kZXggZTc4YmM5OGFiMjI5Yi4uYjEzZTNmMDU2MzE5NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKQEAgLTExMyw3ICYjNDM7MTEzLDcgQEAgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgewogCS8qIEZpZWxkcyB3aGljaCBnZXQgdXBkYXRlZCBvZnRlbiBhdCB0aGUgZW5kLiAqLwogCXN0cnVjdCBscnV2ZWMJCWxydXZlYzsKIAlDQUNIRUxJTkVfUEFERElORyhfcGFkMl8pOwotCXVuc2lnbmVkIGxvbmcJCWxydV96b25lX3NpemVbTUFYX05SX1pPTkVTXVtOUl9MUlVfTElTVFNdOwomIzQzOwlhdG9taWNfbG9uZ190CQlscnVfem9uZV9zaXplW01BWF9OUl9aT05FU11bTlJfTFJVX0xJU1RTXTsKIAlzdHJ1Y3QgbWVtX2Nncm91cF9yZWNsYWltX2l0ZXIJaXRlcjsKIAogCS8qCkBAIC04OTcsMTAgJiM0Mzs4OTcsMTUgQEAgc3RhdGljIGlubGluZQogdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJZW51bSBscnVfbGlzdCBscnUsIGludCB6b25lX2lkeCkKIHsKJiM0MzsJbG9uZyB2YWw7CiAJc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16OwogCiAJbXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTsKLQlyZXR1cm4gUkVBRF9PTkNFKG16LSZndDtscnVfem9uZV9zaXplW3pvbmVfaWR4XVtscnVdKTsKJiM0MzsJdmFsID0gYXRvbWljX2xvbmdfcmVhZCgmYW1wO216LSZndDtscnVfem9uZV9zaXplW3pvbmVfaWR4XVtscnVdKTsKJiM0MzsJaWYgKFdBUk5fT05fT05DRSh2YWwgJmx0OyAwKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4gdmFsOwogfQogCiB2b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmggYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oCmluZGV4IDYyMWM4NjUzZDhmN2UuLjRiYjM5MGQ5NTE2ZWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaApAQCAtMTAsNiAmIzQzOzEwLDExIEBACiAjaW5jbHVkZSAmbHQ7bGludXgvdXNlcmZhdWx0ZmRfay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2xlYWZvcHMuaCZndDsKIAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZsYWdzKQomIzQzO3sKJiM0MzsJcmV0dXJuICF0ZXN0X2JpdChQR19zd2FwYmFja2VkLCBmbGFncyk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBmb2xpb19pc19maWxlX2xydSAtIFNob3VsZCB0aGUgZm9saW8gYmUgb24gYSBmaWxlIExSVSBvciBhbm9uIExSVT8KICAqIEBmb2xpbzogVGhlIGZvbGlvIHRvIHRlc3QuCkBAIC0yNyw3ICYjNDM7MzIsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCBmb2xpb19pc19maWxlX2xydShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewotCXJldHVybiAhZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKTsKJiM0MzsJcmV0dXJuIGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KGNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7CiB9CiAKIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCkBAIC0xNDIsMTAgJiM0MzsxNDcsNDMgQEAgc3RhdGljIGlubGluZSBpbnQgbHJ1X3RpZXJfZnJvbV9yZWZzKGludCByZWZzLCBib29sIHdvcmtpbmdzZXQpCiAJcmV0dXJuIHdvcmtpbmdzZXQgPyBNQVhfTlJfVElFUlMgLSAxIDogb3JkZXJfYmFzZV8yKHJlZnMpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzOy8qKgomIzQzOyAqIGxydV9nZW5fZnJvbV9mbGFncyAtIFJldHVybiB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIGZyb20gZm9saW8gZmxhZ3MuCiYjNDM7ICogQGZsYWdzOiBmb2xpbyBmbGFncwomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogQSBudW1iZXIgYmV0d2VlbiAwIGFuZCBMUlVfR0VOX01BWCwgaW5jbHVzaXZlLiBSZXR1cm5zIC0xIGlmIHRoZQomIzQzOyAqIGZsYWdzIGluZGljYXRlIHRoZSBmb2xpbyBpcyBvZmYgdGhlIGxpc3QgKGUuZy4sIGlzb2xhdGVkKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGludCBscnVfZ2VuX2Zyb21fZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncykKJiM0Mzt7CiYjNDM7CWludCBnZW4gPSAoKGZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRik7CiYjNDM7CiYjNDM7CUJVSUxEX0JVR19PTihMUlVfR0VOX01BU0sgJmFtcDsgTFJVX1JFRlNfTUFTSyk7CiYjNDM7CWdlbiAtPSAxOwomIzQzOwlWTV9XQVJOX09OX09OQ0UoZ2VuICE9IC0xICZhbXA7JmFtcDsgZ2VuICZndDsgTFJVX0dFTl9NQVgpOwomIzQzOwlyZXR1cm4gZ2VuOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBscnVfZ2VuX3NldF9mbGFncyAtIFNldCB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIHRvIHNwZWNpZmllZCBmb2xpbyBmbGFncy4KJiM0MzsgKiBAZmxhZ3M6IHBvaW50ZXIgdG8gdGhlIGZvbGlvIGZsYWdzCiYjNDM7ICogQGdlbjogZ2VuZXJhdGlvbiBudW1iZXIsIGJldHdlZW4gMCBhbmQgTFJVX0dFTl9NQVgsIGluY2x1c2l2ZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2dlbl9zZXRfZmxhZ3ModW5zaWduZWQgbG9uZyAqZmxhZ3MsIGludCBnZW4pCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFncyA9IFJFQURfT05DRShmb2xpby0mZ3Q7ZmxhZ3MuZik7CiYjNDM7CVZNX1dBUk5fT05fT05DRShnZW4gJmd0OyBMUlVfR0VOX01BWCB8fCBnZW4gJmx0OyAwKTsKJiM0MzsJQlVJTERfQlVHX09OKChMUlVfR0VOX01BWCAmIzQzOyAxKSAhPSBNQVhfTlJfR0VOUyk7CiYjNDM7CiYjNDM7CSpmbGFncyAmYW1wOz0gfkxSVV9HRU5fTUFTSzsKJiM0MzsJKmZsYWdzIHw9IChnZW4gJiM0MzsgMVVMKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGOwomIzQzO30KIAomIzQzOy8qKgomIzQzOyAqIGxydV9yZWZzX2Zyb21fZmxhZ3MgLSBSZXR1cm4gTFJVIHJlZmVyZW5jZWQgLyBhY2Nlc3MgY291bnQgZnJvbSBmb2xpbyBmbGFncy4KJiM0MzsgKiBAZmxhZ3M6IGZvbGlvIGZsYWdzCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBpbnQgbHJ1X3JlZnNfZnJvbV9mbGFncyh1bnNpZ25lZCBsb25nIGZsYWdzKQomIzQzO3sKIAlpZiAoIShmbGFncyAmYW1wOyBCSVQoUEdfcmVmZXJlbmNlZCkpKQogCQlyZXR1cm4gMDsKIAkvKgpAQCAtMTU1LDE4ICYjNDM7MTkzLDQ3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJcmV0dXJuICgoZmxhZ3MgJmFtcDsgTFJVX1JFRlNfTUFTSykgJmd0OyZndDsgTFJVX1JFRlNfUEdPRkYpICYjNDM7IDE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MzsvKioKJiM0MzsgKiBscnVfcmVmc19zZXRfZmxhZ3MgLSBTZXQgdGhlIExSVSByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IHRvIHNwZWNpZmllZCBmb2xpbyBmbGFncy4KJiM0MzsgKiBAZmxhZ3M6IHBvaW50ZXIgdG8gdGhlIGZvbGlvIGZsYWdzCiYjNDM7ICogQHJlZnM6IHJlZmVyZW5jZWQgLyBhY2Nlc3MgY291bnQgbnVtYmVyLCBiZXR3ZWVuIDAgYW5kIExSVV9SRUZTX01BWCwgaW5jbHVzaXZlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfcmVmc19zZXRfZmxhZ3ModW5zaWduZWQgbG9uZyAqZmxhZ3MsIHVuc2lnbmVkIGludCByZWZzKQomIzQzO3sKJiM0MzsJVk1fV0FSTl9PTl9PTkNFKHJlZnMgJmd0OyBMUlVfUkVGU19NQVgpOwomIzQzOwlCVUlMRF9CVUdfT04oTFJVX1JFRlNfTUFYICE9IChMUlVfUkVGU19NQVNLICZndDsmZ3Q7IExSVV9SRUZTX1BHT0ZGKSAmIzQzOyAxKTsKJiM0MzsKJiM0MzsJKmZsYWdzICZhbXA7PSB+TFJVX1JFRlNfRkxBR1M7CiYjNDM7CWlmICghcmVmcykKJiM0MzsJCXJldHVybjsKJiM0MzsJKmZsYWdzIHw9IChCSVQoUEdfcmVmZXJlbmNlZCkgfCAoKHJlZnMgLSAxVUwpICZsdDsmbHQ7IExSVV9SRUZTX1BHT0ZGKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlyZXR1cm4gbHJ1X3JlZnNfZnJvbV9mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCByZWZzKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tJmd0O2ZsYWdzLmYpOwomIzQzOwl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpOwogCi0JcmV0dXJuICgoZmxhZ3MgJmFtcDsgTFJVX0dFTl9NQVNLKSAmZ3Q7Jmd0OyBMUlVfR0VOX1BHT0ZGKSAtIDE7CiYjNDM7CWRvIHsKJiM0MzsJCW5ld19mbGFncyA9IG9sZF9mbGFnczsKJiM0MzsJCWxydV9yZWZzX3NldF9mbGFncygmYW1wO25ld19mbGFncywgcmVmcyk7CiYjNDM7CX0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksICZhbXA7b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X2dlbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIGxydV9nZW5fZnJvbV9mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9pc19hY3RpdmUoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgZ2VuKQogewogCXVuc2lnbmVkIGxvbmcgbWF4X3NlcSA9IGxydXZlYy0mZ3Q7bHJ1Z2VuLm1heF9zZXE7CiAKLQlWTV9XQVJOX09OX09OQ0UoZ2VuICZndDs9IE1BWF9OUl9HRU5TKTsKJiM0MzsJVk1fV0FSTl9PTl9PTkNFKGdlbiAmZ3Q7IExSVV9HRU5fTUFYKTsKIAogCS8qIHNlZSB0aGUgY29tbWVudCBvbiBNSU5fTlJfR0VOUyAqLwogCXJldHVybiBnZW4gPT0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKSB8fCBnZW4gPT0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxIC0gMSk7CkBAIC0yNzAsNyAmIzQzOzMzNyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2FkZF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpOwogCWZsYWdzID0gKGdlbiAmIzQzOyAxVUwpICZsdDsmbHQ7IExSVV9HRU5fUEdPRkY7CiAJLyogc2VlIHRoZSBjb21tZW50IG9uIE1JTl9OUl9HRU5TIGFib3V0IFBHX2FjdGl2ZSAqLwotCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX0dFTl9NQVNLIHwgQklUKFBHX2FjdGl2ZSksIGZsYWdzKTsKJiM0MzsJc2V0X21hc2tfYml0cyhmb2xpb19mbGFncyhmb2xpbywgMCksIExSVV9HRU5fTUFTSyB8IEJJVChQR19hY3RpdmUpLCBmbGFncyk7CiAKIAlscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIC0xLCBnZW4pOwogCS8qIGZvciBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoKSAqLwpAQCAtMjk1LDcgJiM0MzszNjIsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCiAJLyogZm9yIGZvbGlvX21pZ3JhdGVfZmxhZ3MoKSAqLwogCWZsYWdzID0gIXJlY2xhaW1pbmcgJmFtcDsmYW1wOyBscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIGdlbikgPyBCSVQoUEdfYWN0aXZlKSA6IDA7Ci0JZmxhZ3MgPSBzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9HRU5fTUFTSywgZmxhZ3MpOwomIzQzOwlmbGFncyA9IHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0ssIGZsYWdzKTsKIAlnZW4gPSAoKGZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykgJmd0OyZndDsgTFJVX0dFTl9QR09GRikgLSAxOwogCiAJbHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBnZW4sIC0xKTsKQEAgLTMwNCwxMSAmIzQzOzM3MSwxOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCXJldHVybiB0cnVlOwogfQogCiYjNDM7LyoqCiYjNDM7ICogZm9saW9fbWlncmF0ZV9yZWZzIC0gY29weSB0aGUgcmVmZXJlbmNlIHN0YXRlIHRvIGEgbmV3IGZvbGlvCiYjNDM7ICogQG5ldzogdGhlIGRlc3RpbmF0aW9uIGZvbGlvCiYjNDM7ICogQG9sZDogdGhlIHNvdXJjZSBmb2xpbwomIzQzOyAqCiYjNDM7ICogVHJhbnNmZXIgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBAbmV3IGR1cmluZyBtaWdyYXRpb246IHRoZSBNR0xSVQomIzQzOyAqIHJlZnMgY291bnQsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkLCBvciBqdXN0IFBHX3JlZmVyZW5jZWQgZm9yIHRoZQomIzQzOyAqIGFjdGl2ZS9pbmFjdGl2ZSBMUlUuCiYjNDM7ICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZCkKIHsKLQl1bnNpZ25lZCBsb25nIHJlZnMgPSBSRUFEX09OQ0Uob2xkLSZndDtmbGFncy5mKSAmYW1wOyBMUlVfUkVGU19NQVNLOwotCi0Jc2V0X21hc2tfYml0cygmYW1wO25ldy0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgcmVmcyk7CiYjNDM7CUJVSUxEX0JVR19PTihMUlVfUkVGU19NQVNLICZhbXA7IEJJVChQR19yZWZlcmVuY2VkKSk7CiYjNDM7CWZvbGlvX3NldF9scnVfcmVmcyhuZXcsIGZvbGlvX2xydV9yZWZzKG9sZCkpOwogfQogI2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovCiAKQEAgLTMzOSw3ICYjNDM7NDE0LDggQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywKIAogc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpCiB7Ci0KJiM0MzsJaWYgKGZvbGlvX3Rlc3RfcmVmZXJlbmNlZChvbGQpKQomIzQzOwkJZm9saW9fc2V0X3JlZmVyZW5jZWQobmV3KTsKIH0KICNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaAppbmRleCA5NGY5YzNmZjU0MTYwLi5kMGI1YzYyMTdkMjU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKQEAgLTQ5MiwxMSAmIzQzOzQ5MiwxNSBAQCBlbnVtIGxydXZlY19mbGFncyB7CiAgKiBmb2xpby0mZ3Q7ZmxhZ3MsIG1hc2tlZCBieSBMUlVfUkVGU19NQVNLLgogICovCiAjZGVmaW5lIE1BWF9OUl9USUVSUwkJNFUKJiM0MzsjZGVmaW5lIExSVV9USUVSX01JTgkJMFUKJiM0MzsjZGVmaW5lIExSVV9USUVSX01BWAkJKE1BWF9OUl9USUVSUyAtIDEpCiAKICNpZm5kZWYgX19HRU5FUkFUSU5HX0JPVU5EU19ICiAKICNkZWZpbmUgTFJVX0dFTl9NQVNLCQkoKEJJVChMUlVfR0VOX1dJRFRIKSAtIDEpICZsdDsmbHQ7IExSVV9HRU5fUEdPRkYpCiYjNDM7I2RlZmluZSBMUlVfR0VOX01BWAkJKEJJVChMUlVfR0VOX1dJRFRIIC0gMSkgLSAxKQogI2RlZmluZSBMUlVfUkVGU19NQVNLCQkoKEJJVChMUlVfUkVGU19XSURUSCkgLSAxKSAmbHQ7Jmx0OyBMUlVfUkVGU19QR09GRikKJiM0MzsjZGVmaW5lIExSVV9SRUZTX01BWAkJQklUKExSVV9SRUZTX1dJRFRIKQogCiAvKgogICogRm9yIGZvbGlvcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMsCmRpZmYgLS1naXQgYS9tbS9mb2xpby5jIGIvbW0vZm9saW8uYwppbmRleCA1OWM0NzcxMjBiOWE4Li4wYWRmZTRmNWVmNzJmIDEwMDY0NAotLS0gYS9tbS9mb2xpby5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2ZvbGlvLmMKQEAgLTM1MywyNiAmIzQzOzM1MywyOCBAQCBzdGF0aWMgdm9pZCBfX2xydV9jYWNoZV9hY3RpdmF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCiBzdGF0aWMgdm9pZCBscnVfZ2VuX2luY19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7Ci0JdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby0mZ3Q7ZmxhZ3MuZik7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7CiYjNDM7CWludCByZWZzOwogCiAJaWYgKGZvbGlvX3Rlc3RfdW5ldmljdGFibGUoZm9saW8pKQogCQlyZXR1cm47CiAKIAkvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi8KLQlpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpIHsKLQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpOwomIzQzOwlpZiAoIWZvbGlvX2xydV9yZWZzKGZvbGlvKSkgewomIzQzOwkJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTsKIAkJcmV0dXJuOwogCX0KIAogCWRvIHsKLQkJaWYgKChvbGRfZmxhZ3MgJmFtcDsgTFJVX1JFRlNfTUFTSykgPT0gTFJVX1JFRlNfTUFTSykgewomIzQzOwkJbmV3X2ZsYWdzID0gb2xkX2ZsYWdzOwomIzQzOwkJcmVmcyA9IGxydV9yZWZzX2Zyb21fZmxhZ3Mob2xkX2ZsYWdzKTsKJiM0MzsJCWlmIChyZWZzID09IExSVV9SRUZTX01BWCkgewogCQkJaWYgKCFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKQogCQkJCWZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTsKIAkJCXJldHVybjsKIAkJfQotCi0JCW5ld19mbGFncyA9IG9sZF9mbGFncyAmIzQzOyBCSVQoTFJVX1JFRlNfUEdPRkYpOwotCX0gd2hpbGUgKCF0cnlfY21weGNoZygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiYjNDM7CQlscnVfcmVmc19zZXRfZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIHJlZnMgJiM0MzsgMSk7CiYjNDM7CX0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksICZhbXA7b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTsKIH0KIAogc3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pCkBAIC0zODQsNyAmIzQzOzM4Niw4IEBAIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCWlmIChnZW4gJmx0OyAwKQogCQlyZXR1cm4gdHJ1ZTsKIAotCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MgfCBCSVQoUEdfd29ya2luZ3NldCksIDApOwomIzQzOwlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwomIzQzOwlmb2xpb19jbGVhcl93b3JraW5nc2V0KGZvbGlvKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlzZXEgPSBSRUFEX09OQ0UoZm9saW9fbHJ1dmVjKGZvbGlvKS0mZ3Q7bHJ1Z2VuLm1pbl9zZXFbdHlwZV0pOwpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDFkMzMzOTUyMDgwOWYuLjlkMGVlM2QzYmRhN2MgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTE1MjksMjggJiM0MzsxNTI5LDEyIEBAIHZvaWQgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIGxydV9saXN0IGxydSwKIAkJCQlpbnQgemlkLCBsb25nIG5yX3BhZ2VzKQogewogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejsKLQl1bnNpZ25lZCBsb25nICpscnVfc2l6ZTsKLQlsb25nIHNpemU7CiAKIAlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKQogCQlyZXR1cm47CiAKIAlteiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpOwotCWxydV9zaXplID0gJmFtcDttei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6aWRdW2xydV07Ci0KLQlpZiAobnJfcGFnZXMgJmx0OyAwKQotCQkqbHJ1X3NpemUgJiM0Mzs9IG5yX3BhZ2VzOwotCi0Jc2l6ZSA9ICpscnVfc2l6ZTsKLQlpZiAoV0FSTl9PTkNFKHNpemUgJmx0OyAwLAotCQkmIzM0OyVzKCVwLCAlZCwgJWxkKTogbHJ1X3NpemUgJWxkXG4mIzM0OywKLQkJX19mdW5jX18sIGxydXZlYywgbHJ1LCBucl9wYWdlcywgc2l6ZSkpIHsKLQkJVk1fQlVHX09OKDEpOwotCQkqbHJ1X3NpemUgPSAwOwotCX0KLQotCWlmIChucl9wYWdlcyAmZ3Q7IDApCi0JCSpscnVfc2l6ZSAmIzQzOz0gbnJfcGFnZXM7CiYjNDM7CWF0b21pY19sb25nX2FkZChucl9wYWdlcywgJmFtcDttei0mZ3Q7bHJ1X3pvbmVfc2l6ZVt6aWRdW2xydV0pOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuYwppbmRleCAxNWI0NTgzMmJjZmE3Li44MjMwNzMzMjcxMWY0IDEwMDY0NAotLS0gYS9tbS9taWdyYXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWlncmF0ZS5jCkBAIC03NzYsOCAmIzQzOzc3Niw2IEBAIHZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCWludCBjcHVwaWQ7CiAKLQlpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSkKLQkJZm9saW9fc2V0X3JlZmVyZW5jZWQobmV3Zm9saW8pOwogCWlmIChmb2xpb190ZXN0X3VwdG9kYXRlKGZvbGlvKSkKIAkJZm9saW9fbWFya191cHRvZGF0ZShuZXdmb2xpbyk7CiAJaWYgKGZvbGlvX3Rlc3RfY2xlYXJfYWN0aXZlKGZvbGlvKSkgewpAQCAtODA3LDcgJiM0Mzs4MDUsOSBAQCB2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbykKIAlpZiAoZm9saW9fdGVzdF9pZGxlKGZvbGlvKSkKIAkJZm9saW9fc2V0X2lkbGUobmV3Zm9saW8pOwogCiYjNDM7CS8qIENvcHkgdGhlIHJlZmVyZW5jZSBzdGF0ZSwgaW5jbHVkaW5nIFBHX3JlZmVyZW5jZWQgKi8KIAlmb2xpb19taWdyYXRlX3JlZnMobmV3Zm9saW8sIGZvbGlvKTsKJiM0MzsKIAkvKgogCSAqIENvcHkgTlVNQSBpbmZvcm1hdGlvbiB0byB0aGUgbmV3IHBhZ2UsIHRvIHByZXZlbnQgb3Zlci1lYWdlcgogCSAqIGZ1dHVyZSBtaWdyYXRpb25zIG9mIHRoaXMgc2FtZSBwYWdlLgpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBjMTQwNGE1OTUyM2Q2Li43ZTNhZTBjNmNiYTNiIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtODQzLDE5ICYjNDM7ODQzLDIyIEBAIHN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncykKIAlpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgJmFtcDsmYW1wOyAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSkgewogCQkvKiBBY3RpdmF0ZSBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciBmaXJzdCB1c2FnZS4gKi8KIAkJaWYgKGlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkgewotCQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTsKJiM0MzsJCQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwomIzQzOwkJCWZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTsKIAkJCXJldHVybiB0cnVlOwogCQl9CiAKLQkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpOwomIzQzOwkJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAogCS8qIFByb21vdGUgb24gc2Vjb25kIGFjY2VzcyAqLwotCWlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgJmd0OyAxKQotCQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfd29ya2luZ3NldCkpOwotCWVsc2UKJiM0MzsJaWYgKGZvbGlvX2xydV9yZWZzKGZvbGlvKSAmZ3Q7IDEpIHsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7CiYjNDM7CQlmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7CiYjNDM7CX0gZWxzZSB7CiAJCWZvbGlvX21hcmtfYWNjZXNzZWQoZm9saW8pOwomIzQzOwl9CiAJcmV0dXJuIHRydWU7CiB9CiAjZWxzZQpAQCAtMzE5NSw4ICYjNDM7MzE5OCw4IEBAIHN0cnVjdCBjdHJsX3BvcyB7CiAJaW50IGdhaW47CiB9OwogCi1zdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2FpbiwKLQkJCSAgc3RydWN0IGN0cmxfcG9zICpwb3MpCiYjNDM7c3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllcl9taW4sCiYjNDM7CQkJICBpbnQgdGllcl9tYXgsIGludCBnYWluLCBzdHJ1Y3QgY3RybF9wb3MgKnBvcykKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gJmFtcDtscnV2ZWMtJmd0O2xydWdlbjsKQEAgLTMyMDUsNyAmIzQzOzMyMDgsNyBAQCBzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2FpbiwKIAlwb3MtJmd0O2dhaW4gPSBnYWluOwogCXBvcy0mZ3Q7cmVmYXVsdGVkID0gcG9zLSZndDt0b3RhbCA9IDA7CiAKLQlmb3IgKGkgPSB0aWVyICUgTUFYX05SX1RJRVJTOyBpICZsdDs9IG1pbih0aWVyLCBNQVhfTlJfVElFUlMgLSAxKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJZm9yIChpID0gdGllcl9taW47IGkgJmx0Oz0gdGllcl9tYXg7IGkmIzQzOyYjNDM7KSB7CiAJCXBvcy0mZ3Q7cmVmYXVsdGVkICYjNDM7PSBscnVnZW4tJmd0O2F2Z19yZWZhdWx0ZWRbdHlwZV1baV0gJiM0MzsKIAkJCQkgIGF0b21pY19sb25nX3JlYWQoJmFtcDtscnVnZW4tJmd0O3JlZmF1bHRlZFtoaXN0XVt0eXBlXVtpXSk7CiAJCXBvcy0mZ3Q7dG90YWwgJiM0Mzs9IGxydWdlbi0mZ3Q7YXZnX3RvdGFsW3R5cGVdW2ldICYjNDM7CkBAIC0zMjY2LDExICYjNDM7MzI2OSwxMSBAQCBzdGF0aWMgYm9vbCBwb3NpdGl2ZV9jdHJsX2VycihzdHJ1Y3QgY3RybF9wb3MgKnNwLCBzdHJ1Y3QgY3RybF9wb3MgKnB2KQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyogcHJvbW90ZSBwYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzICovCi1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncykKJiM0MztzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGludCAqaXNfZmlsZSwKJiM0MzsJCQkgICAgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncykKIHsKLQl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLSZndDtmbGFncy5mKTsKLQotCVZNX1dBUk5fT05fT05DRShnZW4gJmd0Oz0gTUFYX05SX0dFTlMpOwomIzQzOwl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpOwomIzQzOwlpbnQgb2xkX2dlbjsKIAogCS8qCiAJICogU2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTLCBhbmQgYWN0aXZhdGUgZmlsZS1iYWNrZWQKQEAgLTMyNzksMjAgJiM0MzszMjgyLDI1IEBAIHN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hCiAJICovCiAJaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pICZhbXA7JmFtcDsgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykgJmFtcDsmYW1wOwogCSAgICAhaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7Ci0JCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTsKJiM0MzsJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7CiAJCXJldHVybiAtMTsKIAl9CiAKIAlkbyB7CiYjNDM7CQlvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX2ZsYWdzKG9sZF9mbGFncyk7CiYjNDM7CQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7CiYjNDM7CiAJCS8qIGxydV9nZW5fZGVsX2ZvbGlvKCkgaGFzIGlzb2xhdGVkIHRoaXMgcGFnZT8gKi8KLQkJaWYgKCEob2xkX2ZsYWdzICZhbXA7IExSVV9HRU5fTUFTSykpCi0JCQlyZXR1cm4gLTE7CiYjNDM7CQlpZiAob2xkX2dlbiAmbHQ7IDApCiYjNDM7CQkJYnJlYWs7CiAKLQkJbmV3X2ZsYWdzID0gb2xkX2ZsYWdzICZhbXA7IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpOwotCQluZXdfZmxhZ3MgfD0gKChnZW4gJiM0MzsgMVVMKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGKSB8IEJJVChQR193b3JraW5nc2V0KTsKLQl9IHdoaWxlICghdHJ5X2NtcHhjaGcoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgJmFtcDtvbGRfZmxhZ3MsIG5ld19mbGFncykpOwomIzQzOwkJbHJ1X2dlbl9zZXRfZmxhZ3MoJmFtcDtuZXdfZmxhZ3MsIG5ld19nZW4pOwomIzQzOwkJbHJ1X3JlZnNfc2V0X2ZsYWdzKCZhbXA7bmV3X2ZsYWdzLCAwKTsKJiM0MzsJCW5ld19mbGFncyB8PSBCSVQoUEdfd29ya2luZ3NldCk7CiYjNDM7CX0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksICZhbXA7b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTsKIAotCXJldHVybiAoKG9sZF9mbGFncyAmYW1wOyBMUlVfR0VOX01BU0spICZndDsmZ3Q7IExSVV9HRU5fUEdPRkYpIC0gMTsKJiM0MzsJKmlzX2ZpbGUgPSBmb2xpb19mbGFnc19pc19maWxlX2xydSgmYW1wO29sZF9mbGFncyk7CiYjNDM7CXJldHVybiBvbGRfZ2VuOwogfQogCiAvKiBwcm90ZWN0IHBhZ2VzIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycyAqLwpAQCAtMzMwMCwyMiAmIzQzOzMzMDgsMjUgQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTsKIAlzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gJmFtcDtscnV2ZWMtJmd0O2xydWdlbjsKLQlpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLSZndDttaW5fc2VxW3R5cGVdKTsKLQl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLSZndDtmbGFncy5mKTsKLQotCVZNX1dBUk5fT05fT05DRV9GT0xJTyghKG9sZF9mbGFncyAmYW1wOyBMUlVfR0VOX01BU0spLCBmb2xpbyk7CiYjNDM7CWludCBuZXdfZ2VuLCBvbGRfZ2VuLCBtaW5fZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tJmd0O21pbl9zZXFbdHlwZV0pOwomIzQzOwl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpOwogCiAJZG8gewotCQluZXdfZ2VuID0gKChvbGRfZmxhZ3MgJmFtcDsgTFJVX0dFTl9NQVNLKSAmZ3Q7Jmd0OyBMUlVfR0VOX1BHT0ZGKSAtIDE7Ci0JCS8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqLwotCQlpZiAobmV3X2dlbiAmZ3Q7PSAwICZhbXA7JmFtcDsgbmV3X2dlbiAhPSBvbGRfZ2VuKQotCQkJcmV0dXJuIG5ld19nZW47CiYjNDM7CQlvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX2ZsYWdzKG9sZF9mbGFncyk7CiYjNDM7CQkvKiBUaGlzIGhlbHBlciBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIGZvciBvZmYtbGlzdCBmb2xpb3MgKi8KJiM0MzsJCVZNX1dBUk5fT05fT05DRShvbGRfZ2VuICZsdDsgMCk7CiYjNDM7CQlpZiAob2xkX2dlbiAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIG1pbl9nZW47CiAKLQkJbmV3X2dlbiA9IChvbGRfZ2VuICYjNDM7IDEpICUgTUFYX05SX0dFTlM7CiYjNDM7CQkvKiBmb2xpb191cGRhdGVfZ2VuKCkgaGFzIHByb21vdGVkIHRoaXMgcGFnZT8gKi8KJiM0MzsJCWlmIChvbGRfZ2VuICE9IG1pbl9nZW4pCiYjNDM7CQkJcmV0dXJuIG9sZF9nZW47CiAKLQkJbmV3X2ZsYWdzID0gb2xkX2ZsYWdzICZhbXA7IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpOwotCQluZXdfZmxhZ3MgfD0gKG5ld19nZW4gJiM0MzsgMVVMKSAmbHQ7Jmx0OyBMUlVfR0VOX1BHT0ZGOwotCX0gd2hpbGUgKCF0cnlfY21weGNoZygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCAmYW1wO29sZF9mbGFncywgbmV3X2ZsYWdzKSk7CiYjNDM7CQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7CiYjNDM7CQluZXdfZ2VuID0gKG1pbl9nZW4gJiM0MzsgMSkgJSBNQVhfTlJfR0VOUzsKJiM0MzsJCWxydV9nZW5fc2V0X2ZsYWdzKCZhbXA7bmV3X2ZsYWdzLCBuZXdfZ2VuKTsKJiM0MzsJCWxydV9yZWZzX3NldF9mbGFncygmYW1wO25ld19mbGFncywgMCk7CiYjNDM7CX0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksICZhbXA7b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTsKIAogCWxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7CiAKQEAgLTMzMjMsOSAmIzQzOzMzMzQsOCBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogfQogCiBzdGF0aWMgdm9pZCB1cGRhdGVfYmF0Y2hfc2l6ZShzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAotCQkJICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuKQomIzQzOwkJCSAgICAgIGludCBvbGRfZ2VuLCBpbnQgbmV3X2dlbiwgaW50IHR5cGUpCiB7Ci0JaW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7CiAJaW50IHpvbmUgPSBmb2xpb196b25lbnVtKGZvbGlvKTsKIAlpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiAKQEAgLTM1MTIsMjIgJiM0MzszNTIyLDI0IEBAIHN0YXRpYyBib29sIHN1aXRhYmxlX3RvX3NjYW4oaW50IHRvdGFsLCBpbnQgeW91bmcpCiB9CiAKIHN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQlzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgYm9vbCBkaXJ0eSkKJiM0MzsJCQkgICAgICBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgZGlydHkpCiB7Ci0JaW50IG9sZF9nZW47CiYjNDM7CWludCBuZXdfZ2VuLCBvbGRfZ2VuLCBmaWxlOwogCiAJaWYgKCFmb2xpbykKIAkJcmV0dXJuOwogCiYjNDM7CW5ld19nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKFJFQURfT05DRShscnV2ZWMtJmd0O2xydWdlbi5tYXhfc2VxKSk7CiYjNDM7CiAJaWYgKGRpcnR5ICZhbXA7JmFtcDsgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pICZhbXA7JmFtcDsKIAkgICAgIShmb2xpb190ZXN0X2Fub24oZm9saW8pICZhbXA7JmFtcDsgZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSAmYW1wOyZhbXA7CiAJICAgICAgIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkpCiAJCWZvbGlvX21hcmtfZGlydHkoZm9saW8pOwogCiAJaWYgKHdhbGspIHsKLQkJb2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sICZhbXA7dm1hLSZndDtmbGFncyk7CiYjNDM7CQlvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgJmFtcDtmaWxlLCAmYW1wO3ZtYS0mZ3Q7ZmxhZ3MpOwogCQlpZiAob2xkX2dlbiAmZ3Q7PSAwICZhbXA7JmFtcDsgb2xkX2dlbiAhPSBuZXdfZ2VuKQotCQkJdXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pOwomIzQzOwkJCXVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuLCBmaWxlKTsKIAl9IGVsc2UgaWYgKGxydV9nZW5fc2V0X3JlZnMoZm9saW8sICZhbXA7dm1hLSZndDtmbGFncykpIHsKIAkJb2xkX2dlbiA9IGZvbGlvX2xydV9nZW4oZm9saW8pOwogCQlpZiAob2xkX2dlbiAmZ3Q7PSAwICZhbXA7JmFtcDsgb2xkX2dlbiAhPSBuZXdfZ2VuKQpAQCAtMzU0OSw4ICYjNDM7MzU2MSw2IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCXN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLSZndDtwcml2YXRlOwogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLSZndDtscnV2ZWMpOwogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQod2Fsay0mZ3Q7bHJ1dmVjKTsKLQlERUZJTkVfTUFYX1NFUSh3YWxrLSZndDtscnV2ZWMpOwotCWludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpOwogCXVuc2lnbmVkIGludCBucjsKIAlwbWRfdCBwbWR2YWw7CiAKQEAgLTM2MDEsNyAmIzQzOzM2MTEsNyBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChsYXN0ICE9IGZvbGlvKSB7Ci0JCQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLSZndDt2bWEsIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtJmd0O3ZtYSwgd2Fsay0mZ3Q7bHJ1dmVjLCBsYXN0LCBkaXJ0eSk7CiAKIAkJCWxhc3QgPSBmb2xpbzsKIAkJCWRpcnR5ID0gZmFsc2U7CkBAIC0zNjE0LDcgJiM0MzszNjI0LDcgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCXdhbGstJmd0O21tX3N0YXRzW01NX0xFQUZfWU9VTkddICYjNDM7PSBucjsKIAl9CiAKLQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLSZndDt2bWEsIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLSZndDt2bWEsIHdhbGstJmd0O2xydXZlYywgbGFzdCwgZGlydHkpOwogCWxhc3QgPSBOVUxMOwogCiAJaWYgKGkgJmx0OyBQVFJTX1BFUl9QVEUgJmFtcDsmYW1wOyBnZXRfbmV4dF92bWEoUE1EX01BU0ssIFBBR0VfU0laRSwgYXJncywgJmFtcDtzdGFydCwgJmFtcDtlbmQpKQpAQCAtMzYzNyw4ICYjNDM7MzY0Nyw2IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhCiAJc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtJmd0O3ByaXZhdGU7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKHdhbGstJmd0O2xydXZlYyk7CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdCh3YWxrLSZndDtscnV2ZWMpOwotCURFRklORV9NQVhfU0VRKHdhbGstJmd0O2xydXZlYyk7Ci0JaW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7CiAKIAlWTV9XQVJOX09OX09OQ0UocHVkX2xlYWYoKnB1ZCkpOwogCkBAIC0zNjkyLDcgJiM0MzszNzAwLDcgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWEKIAkJCWdvdG8gbmV4dDsKIAogCQlpZiAobGFzdCAhPSBmb2xpbykgewotCQkJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJCQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIHdhbGstJmd0O2xydXZlYywgbGFzdCwgZGlydHkpOwogCiAJCQlsYXN0ID0gZm9saW87CiAJCQlkaXJ0eSA9IGZhbHNlOwpAQCAtMzcwNiw3ICYjNDM7MzcxNCw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhCiAJCWkgPSBpICZndDsgTUlOX0xSVV9CQVRDSCA/IDAgOiBmaW5kX25leHRfYml0KGJpdG1hcCwgTUlOX0xSVV9CQVRDSCwgaSkgJiM0MzsgMTsKIAl9IHdoaWxlIChpICZsdDs9IE1JTl9MUlVfQkFUQ0gpOwogCi0Jd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCB3YWxrLSZndDtscnV2ZWMsIGxhc3QsIGRpcnR5KTsKIAogCWxhenlfbW11X21vZGVfZGlzYWJsZSgpOwogCXNwaW5fdW5sb2NrKHB0bCk7CkBAIC00MjcwLDggJiM0Mzs0Mjc4LDYgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKQogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBmb2xpb19wZ2RhdChmb2xpbyk7CiAJc3RydWN0IGxydXZlYyAqbHJ1dmVjOwogCXN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZTsKLQl1bnNpZ25lZCBsb25nIG1heF9zZXE7Ci0JaW50IGdlbjsKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQocHZtdy0mZ3Q7cHRsKTsKIAlWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF9scnUoZm9saW8pLCBmb2xpbyk7CkBAIC00MzA4LDggJiM0Mzs0MzE0LDYgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKQogCiAJbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTsKIAlscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpOwotCW1heF9zZXEgPSBSRUFEX09OQ0UoKGxydXZlYyktJmd0O2xydWdlbi5tYXhfc2VxKTsKLQlnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpOwogCW1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7CiAKIAlsYXp5X21tdV9tb2RlX2VuYWJsZSgpOwpAQCAtNDM0MSw3ICYjNDM7NDM0NSw3IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucikKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChsYXN0ICE9IGZvbGlvKSB7Ci0JCQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7CiAKIAkJCWxhc3QgPSBmb2xpbzsKIAkJCWRpcnR5ID0gZmFsc2U7CkBAIC00MzUzLDEzICYjNDM7NDM1NywxNCBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpCiAJCXlvdW5nICYjNDM7PSBucjsKIAl9CiAKLQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxydXZlYywgbGFzdCwgZGlydHkpOwogCiAJbGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7CiAKIAkvKiBmZWVkYmFjayBmcm9tIHJtYXAgd2Fsa2VycyB0byBwYWdlIHRhYmxlIHdhbGtlcnMgKi8KIAlpZiAobW1fc3RhdGUgJmFtcDsmYW1wOyBzdWl0YWJsZV90b19zY2FuKGksIHlvdW5nKSkKLQkJdXBkYXRlX2Jsb29tX2ZpbHRlcihtbV9zdGF0ZSwgbWF4X3NlcSwgcHZtdy0mZ3Q7cG1kKTsKJiM0MzsJCXVwZGF0ZV9ibG9vbV9maWx0ZXIobW1fc3RhdGUsIFJFQURfT05DRShscnV2ZWMtJmd0O2xydWdlbi5tYXhfc2VxKSwKJiM0MzsJCQkJICAgIHB2bXctJmd0O3BtZCk7CiAKIAltZW1fY2dyb3VwX3B1dChtZW1jZyk7CiAKQEAgLTQ3MTEsNyAmIzQzOzQ3MTYsNyBAQCBzdGF0aWMgYm9vbCBpc29sYXRlX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYQogCiAJLyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovCiAJaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKQotCQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX01BU0ssIDApOwomIzQzOwkJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTsKIAogCXN1Y2Nlc3MgPSBscnVfZ2VuX2RlbF9mb2xpbyhscnV2ZWMsIGZvbGlvLCB0cnVlKTsKIAlWTV9XQVJOX09OX09OQ0VfRk9MSU8oIXN1Y2Nlc3MsIGZvbGlvKTsKQEAgLTQ4MDQsOSAmIzQzOzQ4MDksOSBAQCBzdGF0aWMgaW50IGdldF90aWVyX2lkeChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKQogCSAqIFRoaXMgdmFsdWUgaXMgY2hvc2VuIGJlY2F1c2UgYW55IG90aGVyIHRpZXIgd291bGQgaGF2ZSBhdCBsZWFzdCB0d2ljZQogCSAqIGFzIG1hbnkgcmVmYXVsdHMgYXMgdGhlIGZpcnN0IHRpZXIuCiAJICovCi0JcmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIDAsIDIsICZhbXA7c3ApOwotCWZvciAodGllciA9IDE7IHRpZXIgJmx0OyBNQVhfTlJfVElFUlM7IHRpZXImIzQzOyYjNDM7KSB7Ci0JCXJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0aWVyLCAzLCAmYW1wO3B2KTsKJiM0MzsJcmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUlOLCAyLCAmYW1wO3NwKTsKJiM0MzsJZm9yICh0aWVyID0gTFJVX1RJRVJfTUlOICYjNDM7IDE7IHRpZXIgJmx0Oz0gTFJVX1RJRVJfTUFYOyB0aWVyJiM0MzsmIzQzOykgewomIzQzOwkJcmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIHRpZXIsIDMsICZhbXA7cHYpOwogCQlpZiAoIXBvc2l0aXZlX2N0cmxfZXJyKCZhbXA7c3AsICZhbXA7cHYpKQogCQkJYnJlYWs7CiAJfQpAQCAtNDgyNyw4ICYjNDM7NDgzMiwxMCBAQCBzdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcykKIAkgKiBDb21wYXJlIHRoZSBzdW0gb2YgYWxsIHRpZXJzIG9mIGFub24gd2l0aCB0aGF0IG9mIGZpbGUgdG8gZGV0ZXJtaW5lCiAJICogd2hpY2ggdHlwZSB0byBzY2FuLgogCSAqLwotCXJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIE1BWF9OUl9USUVSUywgc3dhcHBpbmVzcywgJmFtcDtzcCk7Ci0JcmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTUFYX05SX1RJRVJTLCBNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3MsICZhbXA7cHYpOwomIzQzOwlyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCwKJiM0MzsJCSAgICAgIHN3YXBwaW5lc3MsICZhbXA7c3ApOwomIzQzOwlyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCwKJiM0MzsJCSAgICAgIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgJmFtcDtwdik7CiAKIAlyZXR1cm4gcG9zaXRpdmVfY3RybF9lcnIoJmFtcDtzcCwgJmFtcDtwdik7CiB9CkBAIC00OTI3LDggJiM0Mzs0OTM0LDEwIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCQl9CiAKIAkJLyogZG9uJiMzOTt0IGFkZCByZWplY3RlZCBmb2xpb3MgdG8gdGhlIG9sZGVzdCBnZW5lcmF0aW9uICovCi0JCWlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSkKLQkJCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR19hY3RpdmUpKTsKJiM0MzsJCWlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSkgewomIzQzOwkJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7CiYjNDM7CQkJZm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7CiYjNDM7CQl9CiAJfQogCiAJbW92ZV9mb2xpb3NfdG9fbHJ1KCZhbXA7bGlzdCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwNTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY0NgoJCQkJCQkJb3V0cHV0OiAxODQKCQkJCQkJCXRob3VnaHRzOiAxNjI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIE5vdCBOZWVkZWQ6IEEgRGVlcCBEaXZlIGludG8gTWVtb3J5IE1hbmFnZW1lbnQgUmVmYWN0b3JpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFuYWx5emUgdGhlc2UgY2hhbmdlcyBmcm9tIGEgbWVtb3J5IHNhZmV0eSBwZXJzcGVjdGl2ZSwgYW5kIHNwZWNpZmljYWxseSBpZiBLTVNBTiBpcyAqbmVlZGVkKiBoZXJlLgoKRmlyc3QsIEkgc2VlIHRoZSBtb2RpZmljYXRpb25zIGFyZSBmb2N1c2VkIG9uIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIHBhcnRpY3VsYXJseSB0aGUgTFJVIGdlbmVyYXRpb24gYW5kIHJlZmVyZW5jZSB0cmFja2luZy4gVGhpcyBpbnZvbHZlcyBjaGFuZ2VzIGFjcm9zcyBzZXZlcmFsIGZpbGVzLCBmb2N1c2luZyBvbiBgc3RydWN0IGZvbGlvYCBhbmQgTFJVLXJlbGF0ZWQgZmxhZ3MuCgpUaGUga2V5IGNoYW5nZXMganVtcCBvdXQ6IGBscnVfem9uZV9zaXplYCBpbiBgbWVtX2Nncm91cF9wZXJfbm9kZWAgZ29pbmcgZnJvbSBgdW5zaWduZWQgbG9uZ2AgdG8gYGF0b21pY19sb25nX3RgIOKAkyBzb3VuZHMgbGlrZSBhIGNvbmN1cnJlbmN5IGltcHJvdmVtZW50LCBsaWtlbHkgdGhyZWFkLXNhZmUgbm93LiBTZWNvbmQsIG1vdmluZyBMUlUgZ2VuZXJhdGlvbi9yZWZlcmVuY2UgdHJhY2tpbmcgZnJvbSBkaXJlY3QgYml0IG1hbmlwdWxhdGlvbiBvZiBgZm9saW8tJmd0O2ZsYWdzYCB0byBoZWxwZXIgZnVuY3Rpb25zIOKAkyBhIGRlZmluaXRlIHJlZmFjdG9yaW5nIHRvIGltcHJvdmUgcmVhZGFiaWxpdHkgYW5kIHBvdGVudGlhbGx5IGlzb2xhdGUgdGhlIGZsYWcgYWNjZXNzLiBUaGVuLCB1cGRhdGVzIHRvIGZ1bmN0aW9ucyBzdWNoIGFzIGBmb2xpb19taWdyYXRlX3JlZnNgLCBgcmVhZF9jdHJsX3Bvc2AsIGBmb2xpb191cGRhdGVfZ2VuYCwgYW5kIGB3YWxrX3VwZGF0ZV9mb2xpb2AgdG8gYWxpZ24gd2l0aCB0aGUgbmV3IGhlbHBlcnMuCgpOb3csIG15IHByaW1hcnkgY29uY2VybiB3aXRoIGEgcGF0Y2ggbGlrZSB0aGlzIGlzIHRoZSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZS4gVGhlIHF1ZXN0aW9uIEkgaW1tZWRpYXRlbHkgYXNrIGlzOiBkbyB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBhIHZ1bG5lcmFiaWxpdHkgd2hlcmUgc29tZSBwcmV2aW91c2x5IHVuaXRpYWxpemVkIG1lbW9yeSBpcyBub3cgdXNlZCBpbiBjb250cm9sIGZsb3csIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlPyBJIG5lZWQgdG8gYW5hbHl6ZSB0aGlzIGZyb20gdGhlIHN0YW5kcG9pbnQgb2Ygc3RydWN0dXJlcyBiZWluZyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5ldyBhbGxvY2F0aW9ucywgYW5kIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZGF0YSBpcyBub3cgcmVhZC4KCkluaXRpYWxseSwgaXQgZG9lc24mIzM5O3QgKnNlZW0qIGxpa2UgdGhlcmUgYXJlIGFueSBvYnZpb3VzIHJlZCBmbGFncy4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSwgbm90aGluZyBzZWVtcyB0byBiZSBhbGxvY2F0ZWQgd2l0aG91dCBpbml0aWFsaXphdGlvbi4gSSBjYW4gc2VlIG5vIG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhbmQgbm8gY2hhbmdlcyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIHBhdGNoIHByaW1hcmlseSBtYW5pcHVsYXRlcyBmbGFncywgTFJVIHN0YXRpc3RpY3MsIGFuZCB1cGRhdGVzIGEgY291bnRlci4gVGhhdCwgb24gaXRzIG93biwgc2VlbXMgdG8gcmVkdWNlIHRoZSBwcm9iYWJpbGl0eSBvZiBpbnRyb2R1Y2luZyBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcy4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2suIEkmIzM5O2xsIG1ldGljdWxvdXNseSBnbyB0aHJvdWdoIHRoZSBjb2RlLCBmb2N1c2luZyBvbiBhcmVhcyB3aGVyZSB2YWx1ZXMgYXJlIHNldCBhbmQgdXNlZC4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBwYXkgYXR0ZW50aW9uIHRvIGBmb2xpb191cGRhdGVfZ2VuYCBhbmQgYHdhbGtfdXBkYXRlX2ZvbGlvYC4gSW4gYGZvbGlvX3VwZGF0ZV9nZW5gLCBpdCAqbG9va3MqIGxpa2UgYCppc19maWxlYCBtaWdodCBiZSB1bmluaXRpYWxpemVkIGlmIHRoZSBlYXJseSByZXR1cm4gaXMgdGFrZW4uIEJ1dCB3YWl0LCBgKmlzX2ZpbGVgIGlzIHNldCAqYmVmb3JlKiB0aGUgZnVuY3Rpb24gcmV0dXJucywgZXZlbiBhZnRlciBhIGZhc3QgcGF0aC4gU28sIGBpc19maWxlYCBpcyB1c2VkIGluIGB3YWxrX3VwZGF0ZV9mb2xpb2AgYXMgYW4gb3V0cHV0LiBIb3dldmVyLCB1cG9uIGNsb3NlciBpbnNwZWN0aW9uLCBJIHNlZSB0aGF0IHRoZSByZXR1cm4gdmFsdWUgb2YgYGZvbGlvX3VwZGF0ZV9nZW5gIGlzIGNoZWNrZWQuIElmIGl0ICppcyogdGhlIGZhc3QgcGF0aCwgdGhlbiBgdXBkYXRlX2JhdGNoX3NpemVgIGlzbiYjMzk7dCBldmVuIGNhbGxlZCwgbWVhbmluZyBgZmlsZWAgaXMgbmV2ZXIgdXNlZC4gU28gZXZlbiAqdGhhdCogc2VlbWluZ2x5IHBvdGVudGlhbCBpc3N1ZSBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gYmUgYSBwcm9ibGVtLiBUaGlzIGlzIGdvb2QuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQuCgpXaGF0IGFib3V0IGBscnVfem9uZV9zaXplYD8gSSByZWNhbGwgdGhhdCBpdCYjMzk7cyBwYXJ0IG9mIGEgYG1lbV9jZ3JvdXBfcGVyX25vZGVgLCB3aGljaCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfbm9kZWAuIFRoYXTigJlzIHplcm8taW5pdGlhbGl6ZWQuIEV4Y2VsbGVudC4KCk5vdywgbGV0JiMzOTtzIHpvb20gb3V0IGFnYWluLiBJcyB0aGVyZSAqYW55KiBvdGhlciB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrIEkmIzM5O20gbWlzc2luZz8gSSB0aGluayBJJiMzOTt2ZSBjb3ZlcmVkIHRoZSBjcml0aWNhbCBwYXJ0cy4gSSBzZWUgbm8gbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3RoaW5nIGFsbG9jYXRlZCB0aGF0ICppc24mIzM5O3QqIGluaXRpYWxpemVkLCBhbmQgYWxsIGxvY2FsIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gVGhlIHBhdGNoIGFwcGVhcnMgdG8gYmUgcHVyZSBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgcmVmYWN0b3JpbmcgYW5kIGltcHJvdmluZyBzb21lIGZsYWcgaGFuZGxpbmcgYW5kIGZpeGluZyBhIGNvbmN1cnJlbmN5IGlzc3VlLgoKU28sIHRoZSBjb25jbHVzaW9uIGlzOiBLTVNBTiBpc24mIzM5O3QgbmVlZGVkIGhlcmUuIFN0YW5kYXJkIG1lbW9yeSBzYWZldHkgdG9vbHMgbGlrZSBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBzaG91bGQgYmUgc3VmZmljaWVudC4gS01TQU4gaXMgZm9yIGNhdGNoaW5nICp1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyosIGFuZCB0aGVyZSBhcmUgbm9uZSBpbiB0aGlzIHBhdGNoLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCYjMzk7cyBhcHBseSB0aGUgS01TQU4gdGVzdCBhZ2FpbjoKCjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2U/IE5vbmUuCjIuICBDb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUuIGBmaWxlYCBpbiBgd2Fsa191cGRhdGVfZm9saW9gIGlzIHNhZmUuCjMuICBBbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzPyBOb25lLgo0LiAgQm91bmRzIGNoZWNrcyBjaGFuZ2VzPyBOb25lLgoKU28sIG15IGZpbmFsIHZlcmRpY3QgaXM6ICoqTmVlZHNLTVNBTiA9IGZhbHNlLioqIFRoZSBwYXRjaCByZWZhY3RvcnMgZmxhZyBtYW5pcHVsYXRpb24gYW5kIGFuIGF0b21pYyB2YXJpYWJsZSB1cGRhdGUuIFN0YW5kYXJkIHRvb2xzIHdpbGwgY2F0Y2ggYW55IGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDU6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCBzcGVjaWZpY2FsbHkgZm9saW8gTFJVIGdlbmVyYXRpb24gZmxhZ3MgYW5kIHJlZmVyZW5jZSB0cmFja2luZywgYW5kIGNoYW5nZXMgYSBjb3VudGVyIChgbHJ1X3pvbmVfc2l6ZWApIHRvIGFuIGF0b21pYyB2YXJpYWJsZSB0byBmaXggY29uY3VycmVuY3kgaXNzdWVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IG1pZ2h0IGJlIGxlZnQgcGFydGlhbGx5IHVuaW5pdGlhbGl6ZWQuIFRoZSBsb2NhbCB2YXJpYWJsZSBgZmlsZWAgaW50cm9kdWNlZCBpbiBgd2Fsa191cGRhdGVfZm9saW9gIGlzIG9ubHkgdXNlZCB3aGVuIGBmb2xpb191cGRhdGVfZ2VuYCByZXR1cm5zIGEgbm9uLW5lZ2F0aXZlIHZhbHVlLCB3aGljaCBndWFyYW50ZWVzIGl0IGhhcyBiZWVuIGluaXRpYWxpemVkLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCBzcGVjaWZpY2FsbHkgZm9saW8gTFJVIGdlbmVyYXRpb24gZmxhZ3MgYW5kIHJlZmVyZW5jZSB0cmFja2luZywgYW5kIGNoYW5nZXMgYSBjb3VudGVyIChgbHJ1X3pvbmVfc2l6ZWApIHRvIGFuIGF0b21pYyB2YXJpYWJsZSB0byBmaXggY29uY3VycmVuY3kgaXNzdWVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IG1pZ2h0IGJlIGxlZnQgcGFydGlhbGx5IHVuaW5pdGlhbGl6ZWQuIFRoZSBsb2NhbCB2YXJpYWJsZSBgZmlsZWAgaW50cm9kdWNlZCBpbiBgd2Fsa191cGRhdGVfZm9saW9gIGlzIG9ubHkgdXNlZCB3aGVuIGBmb2xpb191cGRhdGVfZ2VuYCByZXR1cm5zIGEgbm9uLW5lZ2F0aXZlIHZhbHVlLCB3aGljaCBndWFyYW50ZWVzIGl0IGhhcyBiZWVuIGluaXRpYWxpemVkLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNTo0Nzo0MC4yMzI5MTA4MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NjQ0NzA1OTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZVwiLFxuICAgIFwiZm9saW9fbWlncmF0ZV9mbGFnc1wiLFxuICAgIFwibHJ1X2dlbl9sb29rX2Fyb3VuZFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCBzcGVjaWZpY2FsbHkgZm9saW8gTFJVIGdlbmVyYXRpb24gZmxhZ3MgYW5kIHJlZmVyZW5jZSB0cmFja2luZywgYW5kIGNoYW5nZXMgYSBjb3VudGVyIChgbHJ1X3pvbmVfc2l6ZWApIHRvIGFuIGF0b21pYyB2YXJpYWJsZSB0byBmaXggY29uY3VycmVuY3kgaXNzdWVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IG1pZ2h0IGJlIGxlZnQgcGFydGlhbGx5IHVuaW5pdGlhbGl6ZWQuIFRoZSBsb2NhbCB2YXJpYWJsZSBgZmlsZWAgaW50cm9kdWNlZCBpbiBgd2Fsa191cGRhdGVfZm9saW9gIGlzIG9ubHkgdXNlZCB3aGVuIGBmb2xpb191cGRhdGVfZ2VuYCByZXR1cm5zIGEgbm9uLW5lZ2F0aXZlIHZhbHVlLCB3aGljaCBndWFyYW50ZWVzIGl0IGhhcyBiZWVuIGluaXRpYWxpemVkLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgcmVsYXRlZCB0byB0aGVzZSBjaGFuZ2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgaW1wbGVtZW50YXRpb24sIGNoYW5naW5nIGhvdyBMUlUgZ2VuZXJhdGlvbiBhbmQgcmVmZXJlbmNlIGZsYWdzIGFyZSBzdG9yZWQgaW4gYGZvbGlvLVxcdTAwM2VmbGFnc2AuIEl0IHJlcGxhY2VzIGRpcmVjdCBiaXRtYXNrIG9wZXJhdGlvbnMgd2l0aCBuZXcgaGVscGVyIGZ1bmN0aW9ucyBhbmQgY2hhbmdlcyBgbHJ1X3pvbmVfc2l6ZWAgaW4gYHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlYCB0byB1c2UgYGF0b21pY19sb25nX3RgIGluc3RlYWQgb2YgYHVuc2lnbmVkIGxvbmdgLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzLCBpbmNsdWRpbmcgcGFnZSBtaWdyYXRpb24sIExSVSBzaXplIHRyYWNraW5nLCBhbmQgcGFnZSB0YWJsZSBzY2FubmluZy4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsbHkgYWx0ZXJzIGhvdyBmb2xpb3MgYXJlIHRyYWNrZWQgYW5kIGFnZWQgaW4gdGhlIExSVSBsaXN0cywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA1OjQ3OjQwLjIzMjkxNjg4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzQxMDI1NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4YTkyNWQyNTQ2YzUzOGQ0YjNiMGRjMTc1NWNhYWM4OTQ5ODlkOWEwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDE4IDA1OjQ3OjM5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG5pbmRleCBlNzhiYzk4YWIyMjliLi5iMTNlM2YwNTYzMTk1IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG5AQCAtMTEzLDcgKzExMyw3IEBAIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlIHtcXG4gXFx0LyogRmllbGRzIHdoaWNoIGdldCB1cGRhdGVkIG9mdGVuIGF0IHRoZSBlbmQuICovXFxuIFxcdHN0cnVjdCBscnV2ZWNcXHRcXHRscnV2ZWM7XFxuIFxcdENBQ0hFTElORV9QQURESU5HKF9wYWQyXyk7XFxuLVxcdHVuc2lnbmVkIGxvbmdcXHRcXHRscnVfem9uZV9zaXplW01BWF9OUl9aT05FU11bTlJfTFJVX0xJU1RTXTtcXG4rXFx0YXRvbWljX2xvbmdfdFxcdFxcdGxydV96b25lX3NpemVbTUFYX05SX1pPTkVTXVtOUl9MUlVfTElTVFNdO1xcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cF9yZWNsYWltX2l0ZXJcXHRpdGVyO1xcbiBcXG4gXFx0LypcXG5AQCAtODk3LDEwICs4OTcsMTUgQEAgc3RhdGljIGlubGluZVxcbiB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiBcXHRcXHRlbnVtIGxydV9saXN0IGxydSwgaW50IHpvbmVfaWR4KVxcbiB7XFxuK1xcdGxvbmcgdmFsO1xcbiBcXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XFxuIFxcbiBcXHRteiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xcbi1cXHRyZXR1cm4gUkVBRF9PTkNFKG16LVxcdTAwM2VscnVfem9uZV9zaXplW3pvbmVfaWR4XVtscnVdKTtcXG4rXFx0dmFsID0gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bXotXFx1MDAzZWxydV96b25lX3NpemVbem9uZV9pZHhdW2xydV0pO1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKHZhbCBcXHUwMDNjIDApKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHJldHVybiB2YWw7XFxuIH1cXG4gXFxuIHZvaWQgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxcbmluZGV4IDYyMWM4NjUzZDhmN2UuLjRiYjM5MGQ5NTE2ZWYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcXG5AQCAtMTAsNiArMTAsMTEgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VzZXJmYXVsdGZkX2suaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xlYWZvcHMuaFxcdTAwM2VcXG4gXFxuK3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZsYWdzKVxcbit7XFxuK1xcdHJldHVybiAhdGVzdF9iaXQoUEdfc3dhcGJhY2tlZCwgZmxhZ3MpO1xcbit9XFxuK1xcbiAvKipcXG4gICogZm9saW9faXNfZmlsZV9scnUgLSBTaG91bGQgdGhlIGZvbGlvIGJlIG9uIGEgZmlsZSBMUlUgb3IgYW5vbiBMUlU/XFxuICAqIEBmb2xpbzogVGhlIGZvbGlvIHRvIHRlc3QuXFxuQEAgLTI3LDcgKzMyLDcgQEBcXG4gICovXFxuIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2lzX2ZpbGVfbHJ1KGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4tXFx0cmV0dXJuICFmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pO1xcbitcXHRyZXR1cm4gZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUoY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcXG4gfVxcbiBcXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5AQCAtMTQyLDEwICsxNDcsNDMgQEAgc3RhdGljIGlubGluZSBpbnQgbHJ1X3RpZXJfZnJvbV9yZWZzKGludCByZWZzLCBib29sIHdvcmtpbmdzZXQpXFxuIFxcdHJldHVybiB3b3JraW5nc2V0ID8gTUFYX05SX1RJRVJTIC0gMSA6IG9yZGVyX2Jhc2VfMihyZWZzKTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG4rLyoqXFxuKyAqIGxydV9nZW5fZnJvbV9mbGFncyAtIFJldHVybiB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIGZyb20gZm9saW8gZmxhZ3MuXFxuKyAqIEBmbGFnczogZm9saW8gZmxhZ3NcXG4rICpcXG4rICogUmV0dXJuczogQSBudW1iZXIgYmV0d2VlbiAwIGFuZCBMUlVfR0VOX01BWCwgaW5jbHVzaXZlLiBSZXR1cm5zIC0xIGlmIHRoZVxcbisgKiBmbGFncyBpbmRpY2F0ZSB0aGUgZm9saW8gaXMgb2ZmIHRoZSBsaXN0IChlLmcuLCBpc29sYXRlZCkuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIGludCBscnVfZ2VuX2Zyb21fZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncylcXG4re1xcbitcXHRpbnQgZ2VuID0gKChmbGFncyBcXHUwMDI2IExSVV9HRU5fTUFTSykgXFx1MDAzZVxcdTAwM2UgTFJVX0dFTl9QR09GRik7XFxuK1xcbitcXHRCVUlMRF9CVUdfT04oTFJVX0dFTl9NQVNLIFxcdTAwMjYgTFJVX1JFRlNfTUFTSyk7XFxuK1xcdGdlbiAtPSAxO1xcbitcXHRWTV9XQVJOX09OX09OQ0UoZ2VuICE9IC0xIFxcdTAwMjZcXHUwMDI2IGdlbiBcXHUwMDNlIExSVV9HRU5fTUFYKTtcXG4rXFx0cmV0dXJuIGdlbjtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGxydV9nZW5fc2V0X2ZsYWdzIC0gU2V0IHRoZSBMUlUgZ2VuZXJhdGlvbiBudW1iZXIgdG8gc3BlY2lmaWVkIGZvbGlvIGZsYWdzLlxcbisgKiBAZmxhZ3M6IHBvaW50ZXIgdG8gdGhlIGZvbGlvIGZsYWdzXFxuKyAqIEBnZW46IGdlbmVyYXRpb24gbnVtYmVyLCBiZXR3ZWVuIDAgYW5kIExSVV9HRU5fTUFYLCBpbmNsdXNpdmUuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2dlbl9zZXRfZmxhZ3ModW5zaWduZWQgbG9uZyAqZmxhZ3MsIGludCBnZW4pXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBmbGFncyA9IFJFQURfT05DRShmb2xpby1cXHUwMDNlZmxhZ3MuZik7XFxuK1xcdFZNX1dBUk5fT05fT05DRShnZW4gXFx1MDAzZSBMUlVfR0VOX01BWCB8fCBnZW4gXFx1MDAzYyAwKTtcXG4rXFx0QlVJTERfQlVHX09OKChMUlVfR0VOX01BWCArIDEpICE9IE1BWF9OUl9HRU5TKTtcXG4rXFxuK1xcdCpmbGFncyBcXHUwMDI2PSB+TFJVX0dFTl9NQVNLO1xcbitcXHQqZmxhZ3MgfD0gKGdlbiArIDFVTCkgXFx1MDAzY1xcdTAwM2MgTFJVX0dFTl9QR09GRjtcXG4rfVxcbiBcXG4rLyoqXFxuKyAqIGxydV9yZWZzX2Zyb21fZmxhZ3MgLSBSZXR1cm4gTFJVIHJlZmVyZW5jZWQgLyBhY2Nlc3MgY291bnQgZnJvbSBmb2xpbyBmbGFncy5cXG4rICogQGZsYWdzOiBmb2xpbyBmbGFnc1xcbisgKi9cXG4rc3RhdGljIGlubGluZSBpbnQgbHJ1X3JlZnNfZnJvbV9mbGFncyh1bnNpZ25lZCBsb25nIGZsYWdzKVxcbit7XFxuIFxcdGlmICghKGZsYWdzIFxcdTAwMjYgQklUKFBHX3JlZmVyZW5jZWQpKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdC8qXFxuQEAgLTE1NSwxOCArMTkzLDQ3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdHJldHVybiAoKGZsYWdzIFxcdTAwMjYgTFJVX1JFRlNfTUFTSykgXFx1MDAzZVxcdTAwM2UgTFJVX1JFRlNfUEdPRkYpICsgMTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X2dlbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbisvKipcXG4rICogbHJ1X3JlZnNfc2V0X2ZsYWdzIC0gU2V0IHRoZSBMUlUgcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCB0byBzcGVjaWZpZWQgZm9saW8gZmxhZ3MuXFxuKyAqIEBmbGFnczogcG9pbnRlciB0byB0aGUgZm9saW8gZmxhZ3NcXG4rICogQHJlZnM6IHJlZmVyZW5jZWQgLyBhY2Nlc3MgY291bnQgbnVtYmVyLCBiZXR3ZWVuIDAgYW5kIExSVV9SRUZTX01BWCwgaW5jbHVzaXZlLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSB2b2lkIGxydV9yZWZzX3NldF9mbGFncyh1bnNpZ25lZCBsb25nICpmbGFncywgdW5zaWduZWQgaW50IHJlZnMpXFxuK3tcXG4rXFx0Vk1fV0FSTl9PTl9PTkNFKHJlZnMgXFx1MDAzZSBMUlVfUkVGU19NQVgpO1xcbitcXHRCVUlMRF9CVUdfT04oTFJVX1JFRlNfTUFYICE9IChMUlVfUkVGU19NQVNLIFxcdTAwM2VcXHUwMDNlIExSVV9SRUZTX1BHT0ZGKSArIDEpO1xcbitcXG4rXFx0KmZsYWdzIFxcdTAwMjY9IH5MUlVfUkVGU19GTEFHUztcXG4rXFx0aWYgKCFyZWZzKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdCpmbGFncyB8PSAoQklUKFBHX3JlZmVyZW5jZWQpIHwgKChyZWZzIC0gMVVMKSBcXHUwMDNjXFx1MDAzYyBMUlVfUkVGU19QR09GRikpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdHJldHVybiBscnVfcmVmc19mcm9tX2ZsYWdzKFJFQURfT05DRSgqY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19zZXRfbHJ1X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IHJlZnMpXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBmbGFncyA9IFJFQURfT05DRShmb2xpby1cXHUwMDNlZmxhZ3MuZik7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XFxuIFxcbi1cXHRyZXR1cm4gKChmbGFncyBcXHUwMDI2IExSVV9HRU5fTUFTSykgXFx1MDAzZVxcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xcbitcXHRkbyB7XFxuK1xcdFxcdG5ld19mbGFncyA9IG9sZF9mbGFncztcXG4rXFx0XFx0bHJ1X3JlZnNfc2V0X2ZsYWdzKFxcdTAwMjZuZXdfZmxhZ3MsIHJlZnMpO1xcbitcXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X2dlbihjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdHJldHVybiBscnVfZ2VuX2Zyb21fZmxhZ3MoUkVBRF9PTkNFKCpjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpKTtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIGxydV9nZW5faXNfYWN0aXZlKGNvbnN0IHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IGdlbilcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIG1heF9zZXEgPSBscnV2ZWMtXFx1MDAzZWxydWdlbi5tYXhfc2VxO1xcbiBcXG4tXFx0Vk1fV0FSTl9PTl9PTkNFKGdlbiBcXHUwMDNlPSBNQVhfTlJfR0VOUyk7XFxuK1xcdFZNX1dBUk5fT05fT05DRShnZW4gXFx1MDAzZSBMUlVfR0VOX01BWCk7XFxuIFxcbiBcXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUlOX05SX0dFTlMgKi9cXG4gXFx0cmV0dXJuIGdlbiA9PSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpIHx8IGdlbiA9PSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEgLSAxKTtcXG5AQCAtMjcwLDcgKzMzNyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2FkZF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcXG4gXFx0ZmxhZ3MgPSAoZ2VuICsgMVVMKSBcXHUwMDNjXFx1MDAzYyBMUlVfR0VOX1BHT0ZGO1xcbiBcXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUlOX05SX0dFTlMgYWJvdXQgUEdfYWN0aXZlICovXFxuLVxcdHNldF9tYXNrX2JpdHMoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpO1xcbitcXHRzZXRfbWFza19iaXRzKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgTFJVX0dFTl9NQVNLIHwgQklUKFBHX2FjdGl2ZSksIGZsYWdzKTtcXG4gXFxuIFxcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgLTEsIGdlbik7XFxuIFxcdC8qIGZvciBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoKSAqL1xcbkBAIC0yOTUsNyArMzYyLDcgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFxuIFxcdC8qIGZvciBmb2xpb19taWdyYXRlX2ZsYWdzKCkgKi9cXG4gXFx0ZmxhZ3MgPSAhcmVjbGFpbWluZyBcXHUwMDI2XFx1MDAyNiBscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIGdlbikgPyBCSVQoUEdfYWN0aXZlKSA6IDA7XFxuLVxcdGZsYWdzID0gc2V0X21hc2tfYml0cyhcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYsIExSVV9HRU5fTUFTSywgZmxhZ3MpO1xcbitcXHRmbGFncyA9IHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0ssIGZsYWdzKTtcXG4gXFx0Z2VuID0gKChmbGFncyBcXHUwMDI2IExSVV9HRU5fTUFTSykgXFx1MDAzZVxcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xcbiBcXG4gXFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBnZW4sIC0xKTtcXG5AQCAtMzA0LDExICszNzEsMTkgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBmb2xpb19taWdyYXRlX3JlZnMgLSBjb3B5IHRoZSByZWZlcmVuY2Ugc3RhdGUgdG8gYSBuZXcgZm9saW9cXG4rICogQG5ldzogdGhlIGRlc3RpbmF0aW9uIGZvbGlvXFxuKyAqIEBvbGQ6IHRoZSBzb3VyY2UgZm9saW9cXG4rICpcXG4rICogVHJhbnNmZXIgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBAbmV3IGR1cmluZyBtaWdyYXRpb246IHRoZSBNR0xSVVxcbisgKiByZWZzIGNvdW50LCBpbmNsdWRpbmcgUEdfcmVmZXJlbmNlZCwgb3IganVzdCBQR19yZWZlcmVuY2VkIGZvciB0aGVcXG4rICogYWN0aXZlL2luYWN0aXZlIExSVS5cXG4rICovXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGxvbmcgcmVmcyA9IFJFQURfT05DRShvbGQtXFx1MDAzZWZsYWdzLmYpIFxcdTAwMjYgTFJVX1JFRlNfTUFTSztcXG4tXFxuLVxcdHNldF9tYXNrX2JpdHMoXFx1MDAyNm5ldy1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgcmVmcyk7XFxuK1xcdEJVSUxEX0JVR19PTihMUlVfUkVGU19NQVNLIFxcdTAwMjYgQklUKFBHX3JlZmVyZW5jZWQpKTtcXG4rXFx0Zm9saW9fc2V0X2xydV9yZWZzKG5ldywgZm9saW9fbHJ1X3JlZnMob2xkKSk7XFxuIH1cXG4gI2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXFxuIFxcbkBAIC0zMzksNyArNDE0LDggQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxcbiB7XFxuLVxcbitcXHRpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKG9sZCkpXFxuK1xcdFxcdGZvbGlvX3NldF9yZWZlcmVuY2VkKG5ldyk7XFxuIH1cXG4gI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxcbmluZGV4IDk0ZjljM2ZmNTQxNjAuLmQwYjVjNjIxN2QyNTcgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcXG5AQCAtNDkyLDExICs0OTIsMTUgQEAgZW51bSBscnV2ZWNfZmxhZ3Mge1xcbiAgKiBmb2xpby1cXHUwMDNlZmxhZ3MsIG1hc2tlZCBieSBMUlVfUkVGU19NQVNLLlxcbiAgKi9cXG4gI2RlZmluZSBNQVhfTlJfVElFUlNcXHRcXHQ0VVxcbisjZGVmaW5lIExSVV9USUVSX01JTlxcdFxcdDBVXFxuKyNkZWZpbmUgTFJVX1RJRVJfTUFYXFx0XFx0KE1BWF9OUl9USUVSUyAtIDEpXFxuIFxcbiAjaWZuZGVmIF9fR0VORVJBVElOR19CT1VORFNfSFxcbiBcXG4gI2RlZmluZSBMUlVfR0VOX01BU0tcXHRcXHQoKEJJVChMUlVfR0VOX1dJRFRIKSAtIDEpIFxcdTAwM2NcXHUwMDNjIExSVV9HRU5fUEdPRkYpXFxuKyNkZWZpbmUgTFJVX0dFTl9NQVhcXHRcXHQoQklUKExSVV9HRU5fV0lEVEggLSAxKSAtIDEpXFxuICNkZWZpbmUgTFJVX1JFRlNfTUFTS1xcdFxcdCgoQklUKExSVV9SRUZTX1dJRFRIKSAtIDEpIFxcdTAwM2NcXHUwMDNjIExSVV9SRUZTX1BHT0ZGKVxcbisjZGVmaW5lIExSVV9SRUZTX01BWFxcdFxcdEJJVChMUlVfUkVGU19XSURUSClcXG4gXFxuIC8qXFxuICAqIEZvciBmb2xpb3MgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzLFxcbmRpZmYgLS1naXQgYS9tbS9mb2xpby5jIGIvbW0vZm9saW8uY1xcbmluZGV4IDU5YzQ3NzEyMGI5YTguLjBhZGZlNGY1ZWY3MmYgMTAwNjQ0XFxuLS0tIGEvbW0vZm9saW8uY1xcbisrKyBiL21tL2ZvbGlvLmNcXG5AQCAtMzUzLDI2ICszNTMsMjggQEAgc3RhdGljIHZvaWQgX19scnVfY2FjaGVfYWN0aXZhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFxuIHN0YXRpYyB2b2lkIGxydV9nZW5faW5jX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVxcdTAwM2VmbGFncy5mKTtcXG4rXFx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcXG4rXFx0aW50IHJlZnM7XFxuIFxcbiBcXHRpZiAoZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbykpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqL1xcbi1cXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpIHtcXG4tXFx0XFx0c2V0X21hc2tfYml0cyhcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XFxuK1xcdGlmICghZm9saW9fbHJ1X3JlZnMoZm9saW8pKSB7XFxuK1xcdFxcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4gXFx0ZG8ge1xcbi1cXHRcXHRpZiAoKG9sZF9mbGFncyBcXHUwMDI2IExSVV9SRUZTX01BU0spID09IExSVV9SRUZTX01BU0spIHtcXG4rXFx0XFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xcbitcXHRcXHRyZWZzID0gbHJ1X3JlZnNfZnJvbV9mbGFncyhvbGRfZmxhZ3MpO1xcbitcXHRcXHRpZiAocmVmcyA9PSBMUlVfUkVGU19NQVgpIHtcXG4gXFx0XFx0XFx0aWYgKCFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKVxcbiBcXHRcXHRcXHRcXHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XFxuIFxcdFxcdFxcdHJldHVybjtcXG4gXFx0XFx0fVxcbi1cXG4tXFx0XFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzICsgQklUKExSVV9SRUZTX1BHT0ZGKTtcXG4tXFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgXFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XFxuK1xcdFxcdGxydV9yZWZzX3NldF9mbGFncyhcXHUwMDI2bmV3X2ZsYWdzLCByZWZzICsgMSk7XFxuK1xcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFxcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcXG5AQCAtMzg0LDcgKzM4Niw4IEBAIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXHRpZiAoZ2VuIFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbi1cXHRzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MgfCBCSVQoUEdfd29ya2luZ3NldCksIDApO1xcbitcXHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xcbitcXHRmb2xpb19jbGVhcl93b3JraW5nc2V0KGZvbGlvKTtcXG4gXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gXFx0c2VxID0gUkVBRF9PTkNFKGZvbGlvX2xydXZlYyhmb2xpbyktXFx1MDAzZWxydWdlbi5taW5fc2VxW3R5cGVdKTtcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXFxuaW5kZXggMWQzMzM5NTIwODA5Zi4uOWQwZWUzZDNiZGE3YyAxMDA2NDRcXG4tLS0gYS9tbS9tZW1jb250cm9sLmNcXG4rKysgYi9tbS9tZW1jb250cm9sLmNcXG5AQCAtMTUyOSwyOCArMTUyOSwxMiBAQCB2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXFxuIFxcdFxcdFxcdFxcdGludCB6aWQsIGxvbmcgbnJfcGFnZXMpXFxuIHtcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16O1xcbi1cXHR1bnNpZ25lZCBsb25nICpscnVfc2l6ZTtcXG4tXFx0bG9uZyBzaXplO1xcbiBcXG4gXFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0bXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcXG4tXFx0bHJ1X3NpemUgPSBcXHUwMDI2bXotXFx1MDAzZWxydV96b25lX3NpemVbemlkXVtscnVdO1xcbi1cXG4tXFx0aWYgKG5yX3BhZ2VzIFxcdTAwM2MgMClcXG4tXFx0XFx0KmxydV9zaXplICs9IG5yX3BhZ2VzO1xcbi1cXG4tXFx0c2l6ZSA9ICpscnVfc2l6ZTtcXG4tXFx0aWYgKFdBUk5fT05DRShzaXplIFxcdTAwM2MgMCxcXG4tXFx0XFx0XFxcIiVzKCVwLCAlZCwgJWxkKTogbHJ1X3NpemUgJWxkXFxcXG5cXFwiLFxcbi1cXHRcXHRfX2Z1bmNfXywgbHJ1dmVjLCBscnUsIG5yX3BhZ2VzLCBzaXplKSkge1xcbi1cXHRcXHRWTV9CVUdfT04oMSk7XFxuLVxcdFxcdCpscnVfc2l6ZSA9IDA7XFxuLVxcdH1cXG4tXFxuLVxcdGlmIChucl9wYWdlcyBcXHUwMDNlIDApXFxuLVxcdFxcdCpscnVfc2l6ZSArPSBucl9wYWdlcztcXG4rXFx0YXRvbWljX2xvbmdfYWRkKG5yX3BhZ2VzLCBcXHUwMDI2bXotXFx1MDAzZWxydV96b25lX3NpemVbemlkXVtscnVdKTtcXG4gfVxcbiBcXG4gLyoqXFxuZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuY1xcbmluZGV4IDE1YjQ1ODMyYmNmYTcuLjgyMzA3MzMyNzExZjQgMTAwNjQ0XFxuLS0tIGEvbW0vbWlncmF0ZS5jXFxuKysrIGIvbW0vbWlncmF0ZS5jXFxuQEAgLTc3Niw4ICs3NzYsNiBAQCB2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbiBcXHRpbnQgY3B1cGlkO1xcbiBcXG4tXFx0aWYgKGZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpXFxuLVxcdFxcdGZvbGlvX3NldF9yZWZlcmVuY2VkKG5ld2ZvbGlvKTtcXG4gXFx0aWYgKGZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKVxcbiBcXHRcXHRmb2xpb19tYXJrX3VwdG9kYXRlKG5ld2ZvbGlvKTtcXG4gXFx0aWYgKGZvbGlvX3Rlc3RfY2xlYXJfYWN0aXZlKGZvbGlvKSkge1xcbkBAIC04MDcsNyArODA1LDkgQEAgdm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdGlmIChmb2xpb190ZXN0X2lkbGUoZm9saW8pKVxcbiBcXHRcXHRmb2xpb19zZXRfaWRsZShuZXdmb2xpbyk7XFxuIFxcbitcXHQvKiBDb3B5IHRoZSByZWZlcmVuY2Ugc3RhdGUsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkICovXFxuIFxcdGZvbGlvX21pZ3JhdGVfcmVmcyhuZXdmb2xpbywgZm9saW8pO1xcbitcXG4gXFx0LypcXG4gXFx0ICogQ29weSBOVU1BIGluZm9ybWF0aW9uIHRvIHRoZSBuZXcgcGFnZSwgdG8gcHJldmVudCBvdmVyLWVhZ2VyXFxuIFxcdCAqIGZ1dHVyZSBtaWdyYXRpb25zIG9mIHRoaXMgc2FtZSBwYWdlLlxcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXFxuaW5kZXggYzE0MDRhNTk1MjNkNi4uN2UzYWUwYzZjYmEzYiAxMDA2NDRcXG4tLS0gYS9tbS92bXNjYW4uY1xcbisrKyBiL21tL3Ztc2Nhbi5jXFxuQEAgLTg0MywxOSArODQzLDIyIEBAIHN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG4gXFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pIFxcdTAwMjZcXHUwMDI2ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKSB7XFxuIFxcdFxcdC8qIEFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLiAqL1xcbiBcXHRcXHRpZiAoaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7XFxuLVxcdFxcdFxcdHNldF9tYXNrX2JpdHMoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTtcXG4rXFx0XFx0XFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcXG4rXFx0XFx0XFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xcbiBcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0c2V0X21hc2tfYml0cyhcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XFxuK1xcdFxcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0fVxcbiBcXG4gXFx0LyogUHJvbW90ZSBvbiBzZWNvbmQgYWNjZXNzICovXFxuLVxcdGlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgXFx1MDAzZSAxKVxcbi1cXHRcXHRzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7XFxuLVxcdGVsc2VcXG4rXFx0aWYgKGZvbGlvX2xydV9yZWZzKGZvbGlvKSBcXHUwMDNlIDEpIHtcXG4rXFx0XFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcXG4rXFx0XFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xcbitcXHR9IGVsc2Uge1xcbiBcXHRcXHRmb2xpb19tYXJrX2FjY2Vzc2VkKGZvbGlvKTtcXG4rXFx0fVxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiAjZWxzZVxcbkBAIC0zMTk1LDggKzMxOTgsOCBAQCBzdHJ1Y3QgY3RybF9wb3Mge1xcbiBcXHRpbnQgZ2FpbjtcXG4gfTtcXG4gXFxuLXN0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXIsIGludCBnYWluLFxcbi1cXHRcXHRcXHQgIHN0cnVjdCBjdHJsX3BvcyAqcG9zKVxcbitzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyX21pbixcXG4rXFx0XFx0XFx0ICBpbnQgdGllcl9tYXgsIGludCBnYWluLCBzdHJ1Y3QgY3RybF9wb3MgKnBvcylcXG4ge1xcbiBcXHRpbnQgaTtcXG4gXFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5AQCAtMzIwNSw3ICszMjA4LDcgQEAgc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllciwgaW50IGdhaW4sXFxuIFxcdHBvcy1cXHUwMDNlZ2FpbiA9IGdhaW47XFxuIFxcdHBvcy1cXHUwMDNlcmVmYXVsdGVkID0gcG9zLVxcdTAwM2V0b3RhbCA9IDA7XFxuIFxcbi1cXHRmb3IgKGkgPSB0aWVyICUgTUFYX05SX1RJRVJTOyBpIFxcdTAwM2M9IG1pbih0aWVyLCBNQVhfTlJfVElFUlMgLSAxKTsgaSsrKSB7XFxuK1xcdGZvciAoaSA9IHRpZXJfbWluOyBpIFxcdTAwM2M9IHRpZXJfbWF4OyBpKyspIHtcXG4gXFx0XFx0cG9zLVxcdTAwM2VyZWZhdWx0ZWQgKz0gbHJ1Z2VuLVxcdTAwM2VhdmdfcmVmYXVsdGVkW3R5cGVdW2ldICtcXG4gXFx0XFx0XFx0XFx0ICBhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZscnVnZW4tXFx1MDAzZXJlZmF1bHRlZFtoaXN0XVt0eXBlXVtpXSk7XFxuIFxcdFxcdHBvcy1cXHUwMDNldG90YWwgKz0gbHJ1Z2VuLVxcdTAwM2VhdmdfdG90YWxbdHlwZV1baV0gK1xcbkBAIC0zMjY2LDExICszMjY5LDExIEBAIHN0YXRpYyBib29sIHBvc2l0aXZlX2N0cmxfZXJyKHN0cnVjdCBjdHJsX3BvcyAqc3AsIHN0cnVjdCBjdHJsX3BvcyAqcHYpXFxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuIFxcbiAvKiBwcm9tb3RlIHBhZ2VzIGFjY2Vzc2VkIHRocm91Z2ggcGFnZSB0YWJsZXMgKi9cXG4tc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXFxuK3N0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgaW50ICppc19maWxlLFxcbitcXHRcXHRcXHQgICAgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG4ge1xcbi1cXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVxcdTAwM2VmbGFncy5mKTtcXG4tXFxuLVxcdFZNX1dBUk5fT05fT05DRShnZW4gXFx1MDAzZT0gTUFYX05SX0dFTlMpO1xcbitcXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xcbitcXHRpbnQgb2xkX2dlbjtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUywgYW5kIGFjdGl2YXRlIGZpbGUtYmFja2VkXFxuQEAgLTMyNzksMjAgKzMyODIsMjUgQEAgc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFcXG4gXFx0ICovXFxuIFxcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgIWlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkge1xcbi1cXHRcXHRzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcXG4rXFx0XFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcXG4gXFx0XFx0cmV0dXJuIC0xO1xcbiBcXHR9XFxuIFxcbiBcXHRkbyB7XFxuK1xcdFxcdG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fZmxhZ3Mob2xkX2ZsYWdzKTtcXG4rXFx0XFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xcbitcXG4gXFx0XFx0LyogbHJ1X2dlbl9kZWxfZm9saW8oKSBoYXMgaXNvbGF0ZWQgdGhpcyBwYWdlPyAqL1xcbi1cXHRcXHRpZiAoIShvbGRfZmxhZ3MgXFx1MDAyNiBMUlVfR0VOX01BU0spKVxcbi1cXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdGlmIChvbGRfZ2VuIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuIFxcbi1cXHRcXHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgXFx1MDAyNiB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTtcXG4tXFx0XFx0bmV3X2ZsYWdzIHw9ICgoZ2VuICsgMVVMKSBcXHUwMDNjXFx1MDAzYyBMUlVfR0VOX1BHT0ZGKSB8IEJJVChQR193b3JraW5nc2V0KTtcXG4tXFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgXFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XFxuK1xcdFxcdGxydV9nZW5fc2V0X2ZsYWdzKFxcdTAwMjZuZXdfZmxhZ3MsIG5ld19nZW4pO1xcbitcXHRcXHRscnVfcmVmc19zZXRfZmxhZ3MoXFx1MDAyNm5ld19mbGFncywgMCk7XFxuK1xcdFxcdG5ld19mbGFncyB8PSBCSVQoUEdfd29ya2luZ3NldCk7XFxuK1xcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFxcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xcbiBcXG4tXFx0cmV0dXJuICgob2xkX2ZsYWdzIFxcdTAwMjYgTFJVX0dFTl9NQVNLKSBcXHUwMDNlXFx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XFxuK1xcdCppc19maWxlID0gZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUoXFx1MDAyNm9sZF9mbGFncyk7XFxuK1xcdHJldHVybiBvbGRfZ2VuO1xcbiB9XFxuIFxcbiAvKiBwcm90ZWN0IHBhZ2VzIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycyAqL1xcbkBAIC0zMzAwLDIyICszMzA4LDI1IEBAIHN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XFxuIFxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxuLVxcdGludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXFx1MDAzZW1pbl9zZXFbdHlwZV0pO1xcbi1cXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVxcdTAwM2VmbGFncy5mKTtcXG4tXFxuLVxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghKG9sZF9mbGFncyBcXHUwMDI2IExSVV9HRU5fTUFTSyksIGZvbGlvKTtcXG4rXFx0aW50IG5ld19nZW4sIG9sZF9nZW4sIG1pbl9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cXHUwMDNlbWluX3NlcVt0eXBlXSk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XFxuIFxcbiBcXHRkbyB7XFxuLVxcdFxcdG5ld19nZW4gPSAoKG9sZF9mbGFncyBcXHUwMDI2IExSVV9HRU5fTUFTSykgXFx1MDAzZVxcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xcbi1cXHRcXHQvKiBmb2xpb191cGRhdGVfZ2VuKCkgaGFzIHByb21vdGVkIHRoaXMgcGFnZT8gKi9cXG4tXFx0XFx0aWYgKG5ld19nZW4gXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBuZXdfZ2VuICE9IG9sZF9nZW4pXFxuLVxcdFxcdFxcdHJldHVybiBuZXdfZ2VuO1xcbitcXHRcXHRvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX2ZsYWdzKG9sZF9mbGFncyk7XFxuK1xcdFxcdC8qIFRoaXMgaGVscGVyIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgZm9yIG9mZi1saXN0IGZvbGlvcyAqL1xcbitcXHRcXHRWTV9XQVJOX09OX09OQ0Uob2xkX2dlbiBcXHUwMDNjIDApO1xcbitcXHRcXHRpZiAob2xkX2dlbiBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiBtaW5fZ2VuO1xcbiBcXG4tXFx0XFx0bmV3X2dlbiA9IChvbGRfZ2VuICsgMSkgJSBNQVhfTlJfR0VOUztcXG4rXFx0XFx0LyogZm9saW9fdXBkYXRlX2dlbigpIGhhcyBwcm9tb3RlZCB0aGlzIHBhZ2U/ICovXFxuK1xcdFxcdGlmIChvbGRfZ2VuICE9IG1pbl9nZW4pXFxuK1xcdFxcdFxcdHJldHVybiBvbGRfZ2VuO1xcbiBcXG4tXFx0XFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzIFxcdTAwMjYgfihMUlVfR0VOX01BU0sgfCBMUlVfUkVGU19GTEFHUyk7XFxuLVxcdFxcdG5ld19mbGFncyB8PSAobmV3X2dlbiArIDFVTCkgXFx1MDAzY1xcdTAwM2MgTFJVX0dFTl9QR09GRjtcXG4tXFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgXFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XFxuK1xcdFxcdG5ld19mbGFncyA9IG9sZF9mbGFncztcXG4rXFx0XFx0bmV3X2dlbiA9IChtaW5fZ2VuICsgMSkgJSBNQVhfTlJfR0VOUztcXG4rXFx0XFx0bHJ1X2dlbl9zZXRfZmxhZ3MoXFx1MDAyNm5ld19mbGFncywgbmV3X2dlbik7XFxuK1xcdFxcdGxydV9yZWZzX3NldF9mbGFncyhcXHUwMDI2bmV3X2ZsYWdzLCAwKTtcXG4rXFx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XFxuIFxcbiBcXHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xcbiBcXG5AQCAtMzMyMyw5ICszMzM0LDggQEAgc3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgdXBkYXRlX2JhdGNoX3NpemUoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tXFx0XFx0XFx0ICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuKVxcbitcXHRcXHRcXHQgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4sIGludCB0eXBlKVxcbiB7XFxuLVxcdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xcbiBcXHRpbnQgem9uZSA9IGZvbGlvX3pvbmVudW0oZm9saW8pO1xcbiBcXHRpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuIFxcbkBAIC0zNTEyLDIyICszNTIyLDI0IEBAIHN0YXRpYyBib29sIHN1aXRhYmxlX3RvX3NjYW4oaW50IHRvdGFsLCBpbnQgeW91bmcpXFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi1cXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgYm9vbCBkaXJ0eSlcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIGRpcnR5KVxcbiB7XFxuLVxcdGludCBvbGRfZ2VuO1xcbitcXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiwgZmlsZTtcXG4gXFxuIFxcdGlmICghZm9saW8pXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuK1xcdG5ld19nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKFJFQURfT05DRShscnV2ZWMtXFx1MDAzZWxydWdlbi5tYXhfc2VxKSk7XFxuK1xcbiBcXHRpZiAoZGlydHkgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAhKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgXFx1MDAyNlxcdTAwMjYgZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgICAhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSlcXG4gXFx0XFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XFxuIFxcbiBcXHRpZiAod2Fsaykge1xcbi1cXHRcXHRvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgXFx1MDAyNnZtYS1cXHUwMDNlZmxhZ3MpO1xcbitcXHRcXHRvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgXFx1MDAyNmZpbGUsIFxcdTAwMjZ2bWEtXFx1MDAzZWZsYWdzKTtcXG4gXFx0XFx0aWYgKG9sZF9nZW4gXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXFxuLVxcdFxcdFxcdHVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcXG4rXFx0XFx0XFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4sIGZpbGUpO1xcbiBcXHR9IGVsc2UgaWYgKGxydV9nZW5fc2V0X3JlZnMoZm9saW8sIFxcdTAwMjZ2bWEtXFx1MDAzZWZsYWdzKSkge1xcbiBcXHRcXHRvbGRfZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7XFxuIFxcdFxcdGlmIChvbGRfZ2VuIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgb2xkX2dlbiAhPSBuZXdfZ2VuKVxcbkBAIC0zNTQ5LDggKzM1NjEsNiBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXFx1MDAzZXByaXZhdGU7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbiBcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstXFx1MDAzZWxydXZlYyk7XFxuLVxcdERFRklORV9NQVhfU0VRKHdhbGstXFx1MDAzZWxydXZlYyk7XFxuLVxcdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xcbiBcXHR1bnNpZ25lZCBpbnQgbnI7XFxuIFxcdHBtZF90IHBtZHZhbDtcXG4gXFxuQEAgLTM2MDEsNyArMzYxMSw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdGlmIChsYXN0ICE9IGZvbGlvKSB7XFxuLVxcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXFx1MDAzZXZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XFxuK1xcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXFx1MDAzZXZtYSwgd2Fsay1cXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XFxuIFxcbiBcXHRcXHRcXHRsYXN0ID0gZm9saW87XFxuIFxcdFxcdFxcdGRpcnR5ID0gZmFsc2U7XFxuQEAgLTM2MTQsNyArMzYyNCw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHR3YWxrLVxcdTAwM2VtbV9zdGF0c1tNTV9MRUFGX1lPVU5HXSArPSBucjtcXG4gXFx0fVxcbiBcXG4tXFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cXHUwMDNldm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcXG4rXFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cXHUwMDNldm1hLCB3YWxrLVxcdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcXG4gXFx0bGFzdCA9IE5VTEw7XFxuIFxcbiBcXHRpZiAoaSBcXHUwMDNjIFBUUlNfUEVSX1BURSBcXHUwMDI2XFx1MDAyNiBnZXRfbmV4dF92bWEoUE1EX01BU0ssIFBBR0VfU0laRSwgYXJncywgXFx1MDAyNnN0YXJ0LCBcXHUwMDI2ZW5kKSlcXG5AQCAtMzYzNyw4ICszNjQ3LDYgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcXG4gXFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXFx1MDAzZXByaXZhdGU7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVxcdTAwM2VscnV2ZWMpO1xcbiBcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstXFx1MDAzZWxydXZlYyk7XFxuLVxcdERFRklORV9NQVhfU0VRKHdhbGstXFx1MDAzZWxydXZlYyk7XFxuLVxcdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xcbiBcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFKHB1ZF9sZWFmKCpwdWQpKTtcXG4gXFxuQEAgLTM2OTIsNyArMzcwMCw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhXFxuIFxcdFxcdFxcdGdvdG8gbmV4dDtcXG4gXFxuIFxcdFxcdGlmIChsYXN0ICE9IGZvbGlvKSB7XFxuLVxcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XFxuK1xcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay1cXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XFxuIFxcbiBcXHRcXHRcXHRsYXN0ID0gZm9saW87XFxuIFxcdFxcdFxcdGRpcnR5ID0gZmFsc2U7XFxuQEAgLTM3MDYsNyArMzcxNCw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhXFxuIFxcdFxcdGkgPSBpIFxcdTAwM2UgTUlOX0xSVV9CQVRDSCA/IDAgOiBmaW5kX25leHRfYml0KGJpdG1hcCwgTUlOX0xSVV9CQVRDSCwgaSkgKyAxO1xcbiBcXHR9IHdoaWxlIChpIFxcdTAwM2M9IE1JTl9MUlVfQkFUQ0gpO1xcbiBcXG4tXFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcXG4rXFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCB3YWxrLVxcdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcXG4gXFxuIFxcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xcbiBcXHRzcGluX3VubG9jayhwdGwpO1xcbkBAIC00MjcwLDggKzQyNzgsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXFxuIFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBmb2xpb19wZ2RhdChmb2xpbyk7XFxuIFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcXG4gXFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlO1xcbi1cXHR1bnNpZ25lZCBsb25nIG1heF9zZXE7XFxuLVxcdGludCBnZW47XFxuIFxcbiBcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKHB2bXctXFx1MDAzZXB0bCk7XFxuIFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2xydShmb2xpbyksIGZvbGlvKTtcXG5AQCAtNDMwOCw4ICs0MzE0LDYgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxcbiBcXG4gXFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcXG4gXFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcXG4tXFx0bWF4X3NlcSA9IFJFQURfT05DRSgobHJ1dmVjKS1cXHUwMDNlbHJ1Z2VuLm1heF9zZXEpO1xcbi1cXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xcbiBcXHRtbV9zdGF0ZSA9IGdldF9tbV9zdGF0ZShscnV2ZWMpO1xcbiBcXG4gXFx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcXG5AQCAtNDM0MSw3ICs0MzQ1LDcgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdGlmIChsYXN0ICE9IGZvbGlvKSB7XFxuLVxcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XFxuK1xcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XFxuIFxcbiBcXHRcXHRcXHRsYXN0ID0gZm9saW87XFxuIFxcdFxcdFxcdGRpcnR5ID0gZmFsc2U7XFxuQEAgLTQzNTMsMTMgKzQzNTcsMTQgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxcbiBcXHRcXHR5b3VuZyArPSBucjtcXG4gXFx0fVxcbiBcXG4tXFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcXG4rXFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTtcXG4gXFxuIFxcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xcbiBcXG4gXFx0LyogZmVlZGJhY2sgZnJvbSBybWFwIHdhbGtlcnMgdG8gcGFnZSB0YWJsZSB3YWxrZXJzICovXFxuIFxcdGlmIChtbV9zdGF0ZSBcXHUwMDI2XFx1MDAyNiBzdWl0YWJsZV90b19zY2FuKGksIHlvdW5nKSlcXG4tXFx0XFx0dXBkYXRlX2Jsb29tX2ZpbHRlcihtbV9zdGF0ZSwgbWF4X3NlcSwgcHZtdy1cXHUwMDNlcG1kKTtcXG4rXFx0XFx0dXBkYXRlX2Jsb29tX2ZpbHRlcihtbV9zdGF0ZSwgUkVBRF9PTkNFKGxydXZlYy1cXHUwMDNlbHJ1Z2VuLm1heF9zZXEpLFxcbitcXHRcXHRcXHRcXHQgICAgcHZtdy1cXHUwMDNlcG1kKTtcXG4gXFxuIFxcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcXG4gXFxuQEAgLTQ3MTEsNyArNDcxNiw3IEBAIHN0YXRpYyBib29sIGlzb2xhdGVfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2NhXFxuIFxcbiBcXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi9cXG4gXFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKVxcbi1cXHRcXHRzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgMCk7XFxuK1xcdFxcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XFxuIFxcbiBcXHRzdWNjZXNzID0gbHJ1X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7XFxuIFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghc3VjY2VzcywgZm9saW8pO1xcbkBAIC00ODA0LDkgKzQ4MDksOSBAQCBzdGF0aWMgaW50IGdldF90aWVyX2lkeChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKVxcbiBcXHQgKiBUaGlzIHZhbHVlIGlzIGNob3NlbiBiZWNhdXNlIGFueSBvdGhlciB0aWVyIHdvdWxkIGhhdmUgYXQgbGVhc3QgdHdpY2VcXG4gXFx0ICogYXMgbWFueSByZWZhdWx0cyBhcyB0aGUgZmlyc3QgdGllci5cXG4gXFx0ICovXFxuLVxcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCAwLCAyLCBcXHUwMDI2c3ApO1xcbi1cXHRmb3IgKHRpZXIgPSAxOyB0aWVyIFxcdTAwM2MgTUFYX05SX1RJRVJTOyB0aWVyKyspIHtcXG4tXFx0XFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIDMsIFxcdTAwMjZwdik7XFxuK1xcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01JTiwgMiwgXFx1MDAyNnNwKTtcXG4rXFx0Zm9yICh0aWVyID0gTFJVX1RJRVJfTUlOICsgMTsgdGllciBcXHUwMDNjPSBMUlVfVElFUl9NQVg7IHRpZXIrKykge1xcbitcXHRcXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdGllciwgdGllciwgMywgXFx1MDAyNnB2KTtcXG4gXFx0XFx0aWYgKCFwb3NpdGl2ZV9jdHJsX2VycihcXHUwMDI2c3AsIFxcdTAwMjZwdikpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuQEAgLTQ4MjcsOCArNDgzMiwxMCBAQCBzdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcXG4gXFx0ICogQ29tcGFyZSB0aGUgc3VtIG9mIGFsbCB0aWVycyBvZiBhbm9uIHdpdGggdGhhdCBvZiBmaWxlIHRvIGRldGVybWluZVxcbiBcXHQgKiB3aGljaCB0eXBlIHRvIHNjYW4uXFxuIFxcdCAqL1xcbi1cXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBNQVhfTlJfVElFUlMsIHN3YXBwaW5lc3MsIFxcdTAwMjZzcCk7XFxuLVxcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIE1BWF9OUl9USUVSUywgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCBcXHUwMDI2cHYpO1xcbitcXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCxcXG4rXFx0XFx0ICAgICAgc3dhcHBpbmVzcywgXFx1MDAyNnNwKTtcXG4rXFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NQVgsXFxuK1xcdFxcdCAgICAgIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgXFx1MDAyNnB2KTtcXG4gXFxuIFxcdHJldHVybiBwb3NpdGl2ZV9jdHJsX2VycihcXHUwMDI2c3AsIFxcdTAwMjZwdik7XFxuIH1cXG5AQCAtNDkyNyw4ICs0OTM0LDEwIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHQvKiBkb24ndCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqL1xcbi1cXHRcXHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pXFxuLVxcdFxcdFxcdHNldF9tYXNrX2JpdHMoXFx1MDAyNmZvbGlvLVxcdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX2FjdGl2ZSkpO1xcbitcXHRcXHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pIHtcXG4rXFx0XFx0XFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcXG4rXFx0XFx0XFx0Zm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0bW92ZV9mb2xpb3NfdG9fbHJ1KFxcdTAwMjZsaXN0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDU6NDc6NDAuNzA3NjQyMDk2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODA1NzE0NDA1MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplXCIsXG4gICAgXCJmb2xpb19taWdyYXRlX2ZsYWdzXCIsXG4gICAgXCJscnVfZ2VuX2xvb2tfYXJvdW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBpbXBsZW1lbnRhdGlvbiwgY2hhbmdpbmcgaG93IExSVSBnZW5lcmF0aW9uIGFuZCByZWZlcmVuY2UgZmxhZ3MgYXJlIHN0b3JlZCBpbiBgZm9saW8tXFx1MDAzZWZsYWdzYC4gSXQgcmVwbGFjZXMgZGlyZWN0IGJpdG1hc2sgb3BlcmF0aW9ucyB3aXRoIG5ldyBoZWxwZXIgZnVuY3Rpb25zIGFuZCBjaGFuZ2VzIGBscnVfem9uZV9zaXplYCBpbiBgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGVgIHRvIHVzZSBgYXRvbWljX2xvbmdfdGAgaW5zdGVhZCBvZiBgdW5zaWduZWQgbG9uZ2AuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMsIGluY2x1ZGluZyBwYWdlIG1pZ3JhdGlvbiwgTFJVIHNpemUgdHJhY2tpbmcsIGFuZCBwYWdlIHRhYmxlIHNjYW5uaW5nLiBUaGUgY29kZSBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWxseSBhbHRlcnMgaG93IGZvbGlvcyBhcmUgdHJhY2tlZCBhbmQgYWdlZCBpbiB0aGUgTFJVIGxpc3RzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGE5MjVkMjU0NmM1MzhkNGIzYjBkYzE3NTVjYWFjODk0OTg5ZDlhMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDA1OjQ3OjM5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuaW5kZXggZTc4YmM5OGFiMjI5Yi4uYjEzZTNmMDU2MzE5NSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuQEAgLTExMyw3ICsxMTMsNyBAQCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSB7XG4gXHQvKiBGaWVsZHMgd2hpY2ggZ2V0IHVwZGF0ZWQgb2Z0ZW4gYXQgdGhlIGVuZC4gKi9cbiBcdHN0cnVjdCBscnV2ZWNcdFx0bHJ1dmVjO1xuIFx0Q0FDSEVMSU5FX1BBRERJTkcoX3BhZDJfKTtcbi1cdHVuc2lnbmVkIGxvbmdcdFx0bHJ1X3pvbmVfc2l6ZVtNQVhfTlJfWk9ORVNdW05SX0xSVV9MSVNUU107XG4rXHRhdG9taWNfbG9uZ190XHRcdGxydV96b25lX3NpemVbTUFYX05SX1pPTkVTXVtOUl9MUlVfTElTVFNdO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXBfcmVjbGFpbV9pdGVyXHRpdGVyO1xuIFxuIFx0LypcbkBAIC04OTcsMTAgKzg5NywxNSBAQCBzdGF0aWMgaW5saW5lXG4gdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0ZW51bSBscnVfbGlzdCBscnUsIGludCB6b25lX2lkeClcbiB7XG4rXHRsb25nIHZhbDtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejtcbiBcbiBcdG16ID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7XG4tXHRyZXR1cm4gUkVBRF9PTkNFKG16LVx1MDAzZWxydV96b25lX3NpemVbem9uZV9pZHhdW2xydV0pO1xuK1x0dmFsID0gYXRvbWljX2xvbmdfcmVhZChcdTAwMjZtei1cdTAwM2VscnVfem9uZV9zaXplW3pvbmVfaWR4XVtscnVdKTtcbitcdGlmIChXQVJOX09OX09OQ0UodmFsIFx1MDAzYyAwKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXR1cm4gdmFsO1xuIH1cbiBcbiB2b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuaW5kZXggNjIxYzg2NTNkOGY3ZS4uNGJiMzkwZDk1MTZlZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmhcbkBAIC0xMCw2ICsxMCwxMSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VzZXJmYXVsdGZkX2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xlYWZvcHMuaFx1MDAzZVxuIFxuK3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZsYWdzKVxuK3tcbitcdHJldHVybiAhdGVzdF9iaXQoUEdfc3dhcGJhY2tlZCwgZmxhZ3MpO1xuK31cbitcbiAvKipcbiAgKiBmb2xpb19pc19maWxlX2xydSAtIFNob3VsZCB0aGUgZm9saW8gYmUgb24gYSBmaWxlIExSVSBvciBhbm9uIExSVT9cbiAgKiBAZm9saW86IFRoZSBmb2xpbyB0byB0ZXN0LlxuQEAgLTI3LDcgKzMyLDcgQEBcbiAgKi9cbiBzdGF0aWMgaW5saW5lIGludCBmb2xpb19pc19maWxlX2xydShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHJldHVybiAhZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKTtcbitcdHJldHVybiBmb2xpb19mbGFnc19pc19maWxlX2xydShjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpO1xuIH1cbiBcbiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX191cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuQEAgLTE0MiwxMCArMTQ3LDQzIEBAIHN0YXRpYyBpbmxpbmUgaW50IGxydV90aWVyX2Zyb21fcmVmcyhpbnQgcmVmcywgYm9vbCB3b3JraW5nc2V0KVxuIFx0cmV0dXJuIHdvcmtpbmdzZXQgPyBNQVhfTlJfVElFUlMgLSAxIDogb3JkZXJfYmFzZV8yKHJlZnMpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuKy8qKlxuKyAqIGxydV9nZW5fZnJvbV9mbGFncyAtIFJldHVybiB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIGZyb20gZm9saW8gZmxhZ3MuXG4rICogQGZsYWdzOiBmb2xpbyBmbGFnc1xuKyAqXG4rICogUmV0dXJuczogQSBudW1iZXIgYmV0d2VlbiAwIGFuZCBMUlVfR0VOX01BWCwgaW5jbHVzaXZlLiBSZXR1cm5zIC0xIGlmIHRoZVxuKyAqIGZsYWdzIGluZGljYXRlIHRoZSBmb2xpbyBpcyBvZmYgdGhlIGxpc3QgKGUuZy4sIGlzb2xhdGVkKS5cbisgKi9cbitzdGF0aWMgaW5saW5lIGludCBscnVfZ2VuX2Zyb21fZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncylcbit7XG4rXHRpbnQgZ2VuID0gKChmbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRik7XG4rXG4rXHRCVUlMRF9CVUdfT04oTFJVX0dFTl9NQVNLIFx1MDAyNiBMUlVfUkVGU19NQVNLKTtcbitcdGdlbiAtPSAxO1xuK1x0Vk1fV0FSTl9PTl9PTkNFKGdlbiAhPSAtMSBcdTAwMjZcdTAwMjYgZ2VuIFx1MDAzZSBMUlVfR0VOX01BWCk7XG4rXHRyZXR1cm4gZ2VuO1xuK31cbitcbisvKipcbisgKiBscnVfZ2VuX3NldF9mbGFncyAtIFNldCB0aGUgTFJVIGdlbmVyYXRpb24gbnVtYmVyIHRvIHNwZWNpZmllZCBmb2xpbyBmbGFncy5cbisgKiBAZmxhZ3M6IHBvaW50ZXIgdG8gdGhlIGZvbGlvIGZsYWdzXG4rICogQGdlbjogZ2VuZXJhdGlvbiBudW1iZXIsIGJldHdlZW4gMCBhbmQgTFJVX0dFTl9NQVgsIGluY2x1c2l2ZS5cbisgKi9cbitzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2dlbl9zZXRfZmxhZ3ModW5zaWduZWQgbG9uZyAqZmxhZ3MsIGludCBnZW4pXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbitcdFZNX1dBUk5fT05fT05DRShnZW4gXHUwMDNlIExSVV9HRU5fTUFYIHx8IGdlbiBcdTAwM2MgMCk7XG4rXHRCVUlMRF9CVUdfT04oKExSVV9HRU5fTUFYICsgMSkgIT0gTUFYX05SX0dFTlMpO1xuK1xuK1x0KmZsYWdzIFx1MDAyNj0gfkxSVV9HRU5fTUFTSztcbitcdCpmbGFncyB8PSAoZ2VuICsgMVVMKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRjtcbit9XG4gXG4rLyoqXG4rICogbHJ1X3JlZnNfZnJvbV9mbGFncyAtIFJldHVybiBMUlUgcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCBmcm9tIGZvbGlvIGZsYWdzLlxuKyAqIEBmbGFnczogZm9saW8gZmxhZ3NcbisgKi9cbitzdGF0aWMgaW5saW5lIGludCBscnVfcmVmc19mcm9tX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4re1xuIFx0aWYgKCEoZmxhZ3MgXHUwMDI2IEJJVChQR19yZWZlcmVuY2VkKSkpXG4gXHRcdHJldHVybiAwO1xuIFx0LypcbkBAIC0xNTUsMTggKzE5Myw0NyBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cmV0dXJuICgoZmxhZ3MgXHUwMDI2IExSVV9SRUZTX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfUkVGU19QR09GRikgKyAxO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfZ2VuKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rLyoqXG4rICogbHJ1X3JlZnNfc2V0X2ZsYWdzIC0gU2V0IHRoZSBMUlUgcmVmZXJlbmNlZCAvIGFjY2VzcyBjb3VudCB0byBzcGVjaWZpZWQgZm9saW8gZmxhZ3MuXG4rICogQGZsYWdzOiBwb2ludGVyIHRvIHRoZSBmb2xpbyBmbGFnc1xuKyAqIEByZWZzOiByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IG51bWJlciwgYmV0d2VlbiAwIGFuZCBMUlVfUkVGU19NQVgsIGluY2x1c2l2ZS5cbisgKi9cbitzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X3JlZnNfc2V0X2ZsYWdzKHVuc2lnbmVkIGxvbmcgKmZsYWdzLCB1bnNpZ25lZCBpbnQgcmVmcylcbit7XG4rXHRWTV9XQVJOX09OX09OQ0UocmVmcyBcdTAwM2UgTFJVX1JFRlNfTUFYKTtcbitcdEJVSUxEX0JVR19PTihMUlVfUkVGU19NQVggIT0gKExSVV9SRUZTX01BU0sgXHUwMDNlXHUwMDNlIExSVV9SRUZTX1BHT0ZGKSArIDEpO1xuK1xuK1x0KmZsYWdzIFx1MDAyNj0gfkxSVV9SRUZTX0ZMQUdTO1xuK1x0aWYgKCFyZWZzKVxuK1x0XHRyZXR1cm47XG4rXHQqZmxhZ3MgfD0gKEJJVChQR19yZWZlcmVuY2VkKSB8ICgocmVmcyAtIDFVTCkgXHUwMDNjXHUwMDNjIExSVV9SRUZTX1BHT0ZGKSk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0cmV0dXJuIGxydV9yZWZzX2Zyb21fZmxhZ3MoUkVBRF9PTkNFKCpjb25zdF9mb2xpb19mbGFncyhmb2xpbywgMCkpKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGZvbGlvX3NldF9scnVfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBpbnQgcmVmcylcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuK1x0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbiBcbi1cdHJldHVybiAoKGZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4rXHRkbyB7XG4rXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncztcbitcdFx0bHJ1X3JlZnNfc2V0X2ZsYWdzKFx1MDAyNm5ld19mbGFncywgcmVmcyk7XG4rXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfZ2VuKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0cmV0dXJuIGxydV9nZW5fZnJvbV9mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9pc19hY3RpdmUoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgZ2VuKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbWF4X3NlcSA9IGxydXZlYy1cdTAwM2VscnVnZW4ubWF4X3NlcTtcbiBcbi1cdFZNX1dBUk5fT05fT05DRShnZW4gXHUwMDNlPSBNQVhfTlJfR0VOUyk7XG4rXHRWTV9XQVJOX09OX09OQ0UoZ2VuIFx1MDAzZSBMUlVfR0VOX01BWCk7XG4gXG4gXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUlOX05SX0dFTlMgKi9cbiBcdHJldHVybiBnZW4gPT0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKSB8fCBnZW4gPT0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxIC0gMSk7XG5AQCAtMjcwLDcgKzMzNyw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2FkZF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7XG4gXHRmbGFncyA9IChnZW4gKyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIE1JTl9OUl9HRU5TIGFib3V0IFBHX2FjdGl2ZSAqL1xuLVx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfR0VOX01BU0sgfCBCSVQoUEdfYWN0aXZlKSwgZmxhZ3MpO1xuK1x0c2V0X21hc2tfYml0cyhmb2xpb19mbGFncyhmb2xpbywgMCksIExSVV9HRU5fTUFTSyB8IEJJVChQR19hY3RpdmUpLCBmbGFncyk7XG4gXG4gXHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIC0xLCBnZW4pO1xuIFx0LyogZm9yIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZSgpICovXG5AQCAtMjk1LDcgKzM2Miw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXG4gXHQvKiBmb3IgZm9saW9fbWlncmF0ZV9mbGFncygpICovXG4gXHRmbGFncyA9ICFyZWNsYWltaW5nIFx1MDAyNlx1MDAyNiBscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIGdlbikgPyBCSVQoUEdfYWN0aXZlKSA6IDA7XG4tXHRmbGFncyA9IHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX0dFTl9NQVNLLCBmbGFncyk7XG4rXHRmbGFncyA9IHNldF9tYXNrX2JpdHMoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBMUlVfR0VOX01BU0ssIGZsYWdzKTtcbiBcdGdlbiA9ICgoZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbiBcbiBcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgZ2VuLCAtMSk7XG5AQCAtMzA0LDExICszNzEsMTkgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbisvKipcbisgKiBmb2xpb19taWdyYXRlX3JlZnMgLSBjb3B5IHRoZSByZWZlcmVuY2Ugc3RhdGUgdG8gYSBuZXcgZm9saW9cbisgKiBAbmV3OiB0aGUgZGVzdGluYXRpb24gZm9saW9cbisgKiBAb2xkOiB0aGUgc291cmNlIGZvbGlvXG4rICpcbisgKiBUcmFuc2ZlciB0aGUgcmVmZXJlbmNlIHN0YXRlIHRvIEBuZXcgZHVyaW5nIG1pZ3JhdGlvbjogdGhlIE1HTFJVXG4rICogcmVmcyBjb3VudCwgaW5jbHVkaW5nIFBHX3JlZmVyZW5jZWQsIG9yIGp1c3QgUEdfcmVmZXJlbmNlZCBmb3IgdGhlXG4rICogYWN0aXZlL2luYWN0aXZlIExSVS5cbisgKi9cbiBzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcbiB7XG4tXHR1bnNpZ25lZCBsb25nIHJlZnMgPSBSRUFEX09OQ0Uob2xkLVx1MDAzZWZsYWdzLmYpIFx1MDAyNiBMUlVfUkVGU19NQVNLO1xuLVxuLVx0c2V0X21hc2tfYml0cyhcdTAwMjZuZXctXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgcmVmcyk7XG4rXHRCVUlMRF9CVUdfT04oTFJVX1JFRlNfTUFTSyBcdTAwMjYgQklUKFBHX3JlZmVyZW5jZWQpKTtcbitcdGZvbGlvX3NldF9scnVfcmVmcyhuZXcsIGZvbGlvX2xydV9yZWZzKG9sZCkpO1xuIH1cbiAjZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cbiBcbkBAIC0zMzksNyArNDE0LDggQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcbiB7XG4tXG4rXHRpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKG9sZCkpXG4rXHRcdGZvbGlvX3NldF9yZWZlcmVuY2VkKG5ldyk7XG4gfVxuICNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5pbmRleCA5NGY5YzNmZjU0MTYwLi5kMGI1YzYyMTdkMjU3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaFxuQEAgLTQ5MiwxMSArNDkyLDE1IEBAIGVudW0gbHJ1dmVjX2ZsYWdzIHtcbiAgKiBmb2xpby1cdTAwM2VmbGFncywgbWFza2VkIGJ5IExSVV9SRUZTX01BU0suXG4gICovXG4gI2RlZmluZSBNQVhfTlJfVElFUlNcdFx0NFVcbisjZGVmaW5lIExSVV9USUVSX01JTlx0XHQwVVxuKyNkZWZpbmUgTFJVX1RJRVJfTUFYXHRcdChNQVhfTlJfVElFUlMgLSAxKVxuIFxuICNpZm5kZWYgX19HRU5FUkFUSU5HX0JPVU5EU19IXG4gXG4gI2RlZmluZSBMUlVfR0VOX01BU0tcdFx0KChCSVQoTFJVX0dFTl9XSURUSCkgLSAxKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRilcbisjZGVmaW5lIExSVV9HRU5fTUFYXHRcdChCSVQoTFJVX0dFTl9XSURUSCAtIDEpIC0gMSlcbiAjZGVmaW5lIExSVV9SRUZTX01BU0tcdFx0KChCSVQoTFJVX1JFRlNfV0lEVEgpIC0gMSkgXHUwMDNjXHUwMDNjIExSVV9SRUZTX1BHT0ZGKVxuKyNkZWZpbmUgTFJVX1JFRlNfTUFYXHRcdEJJVChMUlVfUkVGU19XSURUSClcbiBcbiAvKlxuICAqIEZvciBmb2xpb3MgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzLFxuZGlmZiAtLWdpdCBhL21tL2ZvbGlvLmMgYi9tbS9mb2xpby5jXG5pbmRleCA1OWM0NzcxMjBiOWE4Li4wYWRmZTRmNWVmNzJmIDEwMDY0NFxuLS0tIGEvbW0vZm9saW8uY1xuKysrIGIvbW0vZm9saW8uY1xuQEAgLTM1MywyNiArMzUzLDI4IEBAIHN0YXRpYyB2b2lkIF9fbHJ1X2NhY2hlX2FjdGl2YXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXG4gc3RhdGljIHZvaWQgbHJ1X2dlbl9pbmNfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4rXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuK1x0aW50IHJlZnM7XG4gXG4gXHRpZiAoZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbykpXG4gXHRcdHJldHVybjtcbiBcbiBcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqL1xuLVx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKSB7XG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcbitcdGlmICghZm9saW9fbHJ1X3JlZnMoZm9saW8pKSB7XG4rXHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbiBcdGRvIHtcbi1cdFx0aWYgKChvbGRfZmxhZ3MgXHUwMDI2IExSVV9SRUZTX01BU0spID09IExSVV9SRUZTX01BU0spIHtcbitcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuK1x0XHRyZWZzID0gbHJ1X3JlZnNfZnJvbV9mbGFncyhvbGRfZmxhZ3MpO1xuK1x0XHRpZiAocmVmcyA9PSBMUlVfUkVGU19NQVgpIHtcbiBcdFx0XHRpZiAoIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpXG4gXHRcdFx0XHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XG4gXHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4tXG4tXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncyArIEJJVChMUlVfUkVGU19QR09GRik7XG4tXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbitcdFx0bHJ1X3JlZnNfc2V0X2ZsYWdzKFx1MDAyNm5ld19mbGFncywgcmVmcyArIDEpO1xuK1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5AQCAtMzg0LDcgKzM4Niw4IEBAIHN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0aWYgKGdlbiBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTIHwgQklUKFBHX3dvcmtpbmdzZXQpLCAwKTtcbitcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4rXHRmb2xpb19jbGVhcl93b3JraW5nc2V0KGZvbGlvKTtcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcdHNlcSA9IFJFQURfT05DRShmb2xpb19scnV2ZWMoZm9saW8pLVx1MDAzZWxydWdlbi5taW5fc2VxW3R5cGVdKTtcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDFkMzMzOTUyMDgwOWYuLjlkMGVlM2QzYmRhN2MgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTE1MjksMjggKzE1MjksMTIgQEAgdm9pZCBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LFxuIFx0XHRcdFx0aW50IHppZCwgbG9uZyBucl9wYWdlcylcbiB7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqbXo7XG4tXHR1bnNpZ25lZCBsb25nICpscnVfc2l6ZTtcbi1cdGxvbmcgc2l6ZTtcbiBcbiBcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG4gXHRcdHJldHVybjtcbiBcbiBcdG16ID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7XG4tXHRscnVfc2l6ZSA9IFx1MDAyNm16LVx1MDAzZWxydV96b25lX3NpemVbemlkXVtscnVdO1xuLVxuLVx0aWYgKG5yX3BhZ2VzIFx1MDAzYyAwKVxuLVx0XHQqbHJ1X3NpemUgKz0gbnJfcGFnZXM7XG4tXG4tXHRzaXplID0gKmxydV9zaXplO1xuLVx0aWYgKFdBUk5fT05DRShzaXplIFx1MDAzYyAwLFxuLVx0XHRcIiVzKCVwLCAlZCwgJWxkKTogbHJ1X3NpemUgJWxkXFxuXCIsXG4tXHRcdF9fZnVuY19fLCBscnV2ZWMsIGxydSwgbnJfcGFnZXMsIHNpemUpKSB7XG4tXHRcdFZNX0JVR19PTigxKTtcbi1cdFx0KmxydV9zaXplID0gMDtcbi1cdH1cbi1cbi1cdGlmIChucl9wYWdlcyBcdTAwM2UgMClcbi1cdFx0KmxydV9zaXplICs9IG5yX3BhZ2VzO1xuK1x0YXRvbWljX2xvbmdfYWRkKG5yX3BhZ2VzLCBcdTAwMjZtei1cdTAwM2VscnVfem9uZV9zaXplW3ppZF1bbHJ1XSk7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuY1xuaW5kZXggMTViNDU4MzJiY2ZhNy4uODIzMDczMzI3MTFmNCAxMDA2NDRcbi0tLSBhL21tL21pZ3JhdGUuY1xuKysrIGIvbW0vbWlncmF0ZS5jXG5AQCAtNzc2LDggKzc3Niw2IEBAIHZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdGludCBjcHVwaWQ7XG4gXG4tXHRpZiAoZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSlcbi1cdFx0Zm9saW9fc2V0X3JlZmVyZW5jZWQobmV3Zm9saW8pO1xuIFx0aWYgKGZvbGlvX3Rlc3RfdXB0b2RhdGUoZm9saW8pKVxuIFx0XHRmb2xpb19tYXJrX3VwdG9kYXRlKG5ld2ZvbGlvKTtcbiBcdGlmIChmb2xpb190ZXN0X2NsZWFyX2FjdGl2ZShmb2xpbykpIHtcbkBAIC04MDcsNyArODA1LDkgQEAgdm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRpZiAoZm9saW9fdGVzdF9pZGxlKGZvbGlvKSlcbiBcdFx0Zm9saW9fc2V0X2lkbGUobmV3Zm9saW8pO1xuIFxuK1x0LyogQ29weSB0aGUgcmVmZXJlbmNlIHN0YXRlLCBpbmNsdWRpbmcgUEdfcmVmZXJlbmNlZCAqL1xuIFx0Zm9saW9fbWlncmF0ZV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7XG4rXG4gXHQvKlxuIFx0ICogQ29weSBOVU1BIGluZm9ybWF0aW9uIHRvIHRoZSBuZXcgcGFnZSwgdG8gcHJldmVudCBvdmVyLWVhZ2VyXG4gXHQgKiBmdXR1cmUgbWlncmF0aW9ucyBvZiB0aGlzIHNhbWUgcGFnZS5cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCBjMTQwNGE1OTUyM2Q2Li43ZTNhZTBjNmNiYTNiIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtODQzLDE5ICs4NDMsMjIgQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuIFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSkge1xuIFx0XHQvKiBBY3RpdmF0ZSBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciBmaXJzdCB1c2FnZS4gKi9cbiBcdFx0aWYgKGlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkge1xuLVx0XHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7XG4rXHRcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbitcdFx0XHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XG4gXHRcdFx0cmV0dXJuIHRydWU7XG4gXHRcdH1cbiBcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuK1x0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDEpO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXG4gXHQvKiBQcm9tb3RlIG9uIHNlY29uZCBhY2Nlc3MgKi9cbi1cdGlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgXHUwMDNlIDEpXG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7XG4tXHRlbHNlXG4rXHRpZiAoZm9saW9fbHJ1X3JlZnMoZm9saW8pIFx1MDAzZSAxKSB7XG4rXHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4rXHRcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcbitcdH0gZWxzZSB7XG4gXHRcdGZvbGlvX21hcmtfYWNjZXNzZWQoZm9saW8pO1xuK1x0fVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuICNlbHNlXG5AQCAtMzE5NSw4ICszMTk4LDggQEAgc3RydWN0IGN0cmxfcG9zIHtcbiBcdGludCBnYWluO1xuIH07XG4gXG4tc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllciwgaW50IGdhaW4sXG4tXHRcdFx0ICBzdHJ1Y3QgY3RybF9wb3MgKnBvcylcbitzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyX21pbixcbitcdFx0XHQgIGludCB0aWVyX21heCwgaW50IGdhaW4sIHN0cnVjdCBjdHJsX3BvcyAqcG9zKVxuIHtcbiBcdGludCBpO1xuIFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5AQCAtMzIwNSw3ICszMjA4LDcgQEAgc3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllciwgaW50IGdhaW4sXG4gXHRwb3MtXHUwMDNlZ2FpbiA9IGdhaW47XG4gXHRwb3MtXHUwMDNlcmVmYXVsdGVkID0gcG9zLVx1MDAzZXRvdGFsID0gMDtcbiBcbi1cdGZvciAoaSA9IHRpZXIgJSBNQVhfTlJfVElFUlM7IGkgXHUwMDNjPSBtaW4odGllciwgTUFYX05SX1RJRVJTIC0gMSk7IGkrKykge1xuK1x0Zm9yIChpID0gdGllcl9taW47IGkgXHUwMDNjPSB0aWVyX21heDsgaSsrKSB7XG4gXHRcdHBvcy1cdTAwM2VyZWZhdWx0ZWQgKz0gbHJ1Z2VuLVx1MDAzZWF2Z19yZWZhdWx0ZWRbdHlwZV1baV0gK1xuIFx0XHRcdFx0ICBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNmxydWdlbi1cdTAwM2VyZWZhdWx0ZWRbaGlzdF1bdHlwZV1baV0pO1xuIFx0XHRwb3MtXHUwMDNldG90YWwgKz0gbHJ1Z2VuLVx1MDAzZWF2Z190b3RhbFt0eXBlXVtpXSArXG5AQCAtMzI2NiwxMSArMzI2OSwxMSBAQCBzdGF0aWMgYm9vbCBwb3NpdGl2ZV9jdHJsX2VycihzdHJ1Y3QgY3RybF9wb3MgKnNwLCBzdHJ1Y3QgY3RybF9wb3MgKnB2KVxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gXG4gLyogcHJvbW90ZSBwYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzICovXG4tc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4rc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBpbnQgKmlzX2ZpbGUsXG4rXHRcdFx0ICAgIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbi1cbi1cdFZNX1dBUk5fT05fT05DRShnZW4gXHUwMDNlPSBNQVhfTlJfR0VOUyk7XG4rXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuK1x0aW50IG9sZF9nZW47XG4gXG4gXHQvKlxuIFx0ICogU2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTLCBhbmQgYWN0aXZhdGUgZmlsZS1iYWNrZWRcbkBAIC0zMjc5LDIwICszMjgyLDI1IEBAIHN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hXG4gXHQgKi9cbiBcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHQgICAgIWlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkge1xuLVx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XG4rXHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XG4gXHRcdHJldHVybiAtMTtcbiBcdH1cbiBcbiBcdGRvIHtcbitcdFx0b2xkX2dlbiA9IGxydV9nZW5fZnJvbV9mbGFncyhvbGRfZmxhZ3MpO1xuK1x0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XG4rXG4gXHRcdC8qIGxydV9nZW5fZGVsX2ZvbGlvKCkgaGFzIGlzb2xhdGVkIHRoaXMgcGFnZT8gKi9cbi1cdFx0aWYgKCEob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spKVxuLVx0XHRcdHJldHVybiAtMTtcbitcdFx0aWYgKG9sZF9nZW4gXHUwMDNjIDApXG4rXHRcdFx0YnJlYWs7XG4gXG4tXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncyBcdTAwMjYgfihMUlVfR0VOX01BU0sgfCBMUlVfUkVGU19GTEFHUyk7XG4tXHRcdG5ld19mbGFncyB8PSAoKGdlbiArIDFVTCkgXHUwMDNjXHUwMDNjIExSVV9HRU5fUEdPRkYpIHwgQklUKFBHX3dvcmtpbmdzZXQpO1xuLVx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4rXHRcdGxydV9nZW5fc2V0X2ZsYWdzKFx1MDAyNm5ld19mbGFncywgbmV3X2dlbik7XG4rXHRcdGxydV9yZWZzX3NldF9mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIDApO1xuK1x0XHRuZXdfZmxhZ3MgfD0gQklUKFBHX3dvcmtpbmdzZXQpO1xuK1x0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbiBcbi1cdHJldHVybiAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuK1x0KmlzX2ZpbGUgPSBmb2xpb19mbGFnc19pc19maWxlX2xydShcdTAwMjZvbGRfZmxhZ3MpO1xuK1x0cmV0dXJuIG9sZF9nZW47XG4gfVxuIFxuIC8qIHByb3RlY3QgcGFnZXMgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzICovXG5AQCAtMzMwMCwyMiArMzMwOCwyNSBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xuIFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG4tXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuLVx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbi1cbi1cdFZNX1dBUk5fT05fT05DRV9GT0xJTyghKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSwgZm9saW8pO1xuK1x0aW50IG5ld19nZW4sIG9sZF9nZW4sIG1pbl9nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi1cdTAwM2VtaW5fc2VxW3R5cGVdKTtcbitcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4gXG4gXHRkbyB7XG4tXHRcdG5ld19nZW4gPSAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuLVx0XHQvKiBmb2xpb191cGRhdGVfZ2VuKCkgaGFzIHByb21vdGVkIHRoaXMgcGFnZT8gKi9cbi1cdFx0aWYgKG5ld19nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBuZXdfZ2VuICE9IG9sZF9nZW4pXG4tXHRcdFx0cmV0dXJuIG5ld19nZW47XG4rXHRcdG9sZF9nZW4gPSBscnVfZ2VuX2Zyb21fZmxhZ3Mob2xkX2ZsYWdzKTtcbitcdFx0LyogVGhpcyBoZWxwZXIgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBmb3Igb2ZmLWxpc3QgZm9saW9zICovXG4rXHRcdFZNX1dBUk5fT05fT05DRShvbGRfZ2VuIFx1MDAzYyAwKTtcbitcdFx0aWYgKG9sZF9nZW4gXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIG1pbl9nZW47XG4gXG4tXHRcdG5ld19nZW4gPSAob2xkX2dlbiArIDEpICUgTUFYX05SX0dFTlM7XG4rXHRcdC8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqL1xuK1x0XHRpZiAob2xkX2dlbiAhPSBtaW5fZ2VuKVxuK1x0XHRcdHJldHVybiBvbGRfZ2VuO1xuIFxuLVx0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgXHUwMDI2IH4oTFJVX0dFTl9NQVNLIHwgTFJVX1JFRlNfRkxBR1MpO1xuLVx0XHRuZXdfZmxhZ3MgfD0gKG5ld19nZW4gKyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuLVx0fSB3aGlsZSAoIXRyeV9jbXB4Y2hnKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4rXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncztcbitcdFx0bmV3X2dlbiA9IChtaW5fZ2VuICsgMSkgJSBNQVhfTlJfR0VOUztcbitcdFx0bHJ1X2dlbl9zZXRfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCBuZXdfZ2VuKTtcbitcdFx0bHJ1X3JlZnNfc2V0X2ZsYWdzKFx1MDAyNm5ld19mbGFncywgMCk7XG4rXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuIFxuIFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcbiBcbkBAIC0zMzIzLDkgKzMzMzQsOCBAQCBzdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIH1cbiBcbiBzdGF0aWMgdm9pZCB1cGRhdGVfYmF0Y2hfc2l6ZShzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLVx0XHRcdCAgICAgIGludCBvbGRfZ2VuLCBpbnQgbmV3X2dlbilcbitcdFx0XHQgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4sIGludCB0eXBlKVxuIHtcbi1cdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xuIFx0aW50IHpvbmUgPSBmb2xpb196b25lbnVtKGZvbGlvKTtcbiBcdGludCBkZWx0YSA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiBcbkBAIC0zNTEyLDIyICszNTIyLDI0IEBAIHN0YXRpYyBib29sIHN1aXRhYmxlX3RvX3NjYW4oaW50IHRvdGFsLCBpbnQgeW91bmcpXG4gfVxuIFxuIHN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgYm9vbCBkaXJ0eSlcbitcdFx0XHQgICAgICBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgZGlydHkpXG4ge1xuLVx0aW50IG9sZF9nZW47XG4rXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiwgZmlsZTtcbiBcbiBcdGlmICghZm9saW8pXG4gXHRcdHJldHVybjtcbiBcbitcdG5ld19nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKFJFQURfT05DRShscnV2ZWMtXHUwMDNlbHJ1Z2VuLm1heF9zZXEpKTtcbitcbiBcdGlmIChkaXJ0eSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIFx1MDAyNlx1MDAyNlxuIFx0ICAgICEoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAgICFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpKVxuIFx0XHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbiBcbiBcdGlmICh3YWxrKSB7XG4tXHRcdG9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpO1xuK1x0XHRvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgXHUwMDI2ZmlsZSwgXHUwMDI2dm1hLVx1MDAzZWZsYWdzKTtcbiBcdFx0aWYgKG9sZF9nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXG4tXHRcdFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xuK1x0XHRcdHVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuLCBmaWxlKTtcbiBcdH0gZWxzZSBpZiAobHJ1X2dlbl9zZXRfcmVmcyhmb2xpbywgXHUwMDI2dm1hLVx1MDAzZWZsYWdzKSkge1xuIFx0XHRvbGRfZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7XG4gXHRcdGlmIChvbGRfZ2VuIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgb2xkX2dlbiAhPSBuZXdfZ2VuKVxuQEAgLTM1NDksOCArMzU2MSw2IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXHUwMDNlcHJpdmF0ZTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVx1MDAzZWxydXZlYyk7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdERFRklORV9NQVhfU0VRKHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xuIFx0dW5zaWduZWQgaW50IG5yO1xuIFx0cG1kX3QgcG1kdmFsO1xuIFxuQEAgLTM2MDEsNyArMzYxMSw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAobGFzdCAhPSBmb2xpbykge1xuLVx0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLVx1MDAzZXZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC0zNjE0LDcgKzM2MjQsNyBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0d2Fsay1cdTAwM2VtbV9zdGF0c1tNTV9MRUFGX1lPVU5HXSArPSBucjtcbiBcdH1cbiBcbi1cdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCB3YWxrLVx1MDAzZWxydXZlYywgbGFzdCwgZGlydHkpO1xuIFx0bGFzdCA9IE5VTEw7XG4gXG4gXHRpZiAoaSBcdTAwM2MgUFRSU19QRVJfUFRFIFx1MDAyNlx1MDAyNiBnZXRfbmV4dF92bWEoUE1EX01BU0ssIFBBR0VfU0laRSwgYXJncywgXHUwMDI2c3RhcnQsIFx1MDAyNmVuZCkpXG5AQCAtMzYzNyw4ICszNjQ3LDYgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcbiBcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLVx1MDAzZXByaXZhdGU7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay1cdTAwM2VscnV2ZWMpO1xuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdCh3YWxrLVx1MDAzZWxydXZlYyk7XG4tXHRERUZJTkVfTUFYX1NFUSh3YWxrLVx1MDAzZWxydXZlYyk7XG4tXHRpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcbiBcbiBcdFZNX1dBUk5fT05fT05DRShwdWRfbGVhZigqcHVkKSk7XG4gXG5AQCAtMzY5Miw3ICszNzAwLDcgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcbiBcdFx0XHRnb3RvIG5leHQ7XG4gXG4gXHRcdGlmIChsYXN0ICE9IGZvbGlvKSB7XG4tXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIHdhbGstXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXG4gXHRcdFx0bGFzdCA9IGZvbGlvO1xuIFx0XHRcdGRpcnR5ID0gZmFsc2U7XG5AQCAtMzcwNiw3ICszNzE0LDcgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcbiBcdFx0aSA9IGkgXHUwMDNlIE1JTl9MUlVfQkFUQ0ggPyAwIDogZmluZF9uZXh0X2JpdChiaXRtYXAsIE1JTl9MUlVfQkFUQ0gsIGkpICsgMTtcbiBcdH0gd2hpbGUgKGkgXHUwMDNjPSBNSU5fTFJVX0JBVENIKTtcbiBcbi1cdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4rXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIHdhbGstXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXG4gXHRsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTtcbiBcdHNwaW5fdW5sb2NrKHB0bCk7XG5AQCAtNDI3MCw4ICs0Mjc4LDYgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGZvbGlvX3BnZGF0KGZvbGlvKTtcbiBcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcbiBcdHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZTtcbi1cdHVuc2lnbmVkIGxvbmcgbWF4X3NlcTtcbi1cdGludCBnZW47XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKHB2bXctXHUwMDNlcHRsKTtcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2xydShmb2xpbyksIGZvbGlvKTtcbkBAIC00MzA4LDggKzQzMTQsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG4gXG4gXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xuIFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTtcbi1cdG1heF9zZXEgPSBSRUFEX09OQ0UoKGxydXZlYyktXHUwMDNlbHJ1Z2VuLm1heF9zZXEpO1xuLVx0Z2VuID0gbHJ1X2dlbl9mcm9tX3NlcShtYXhfc2VxKTtcbiBcdG1tX3N0YXRlID0gZ2V0X21tX3N0YXRlKGxydXZlYyk7XG4gXG4gXHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xuQEAgLTQzNDEsNyArNDM0NSw3IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKGxhc3QgIT0gZm9saW8pIHtcbi1cdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXG4gXHRcdFx0bGFzdCA9IGZvbGlvO1xuIFx0XHRcdGRpcnR5ID0gZmFsc2U7XG5AQCAtNDM1MywxMyArNDM1NywxNCBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG4gXHRcdHlvdW5nICs9IG5yO1xuIFx0fVxuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXG4gXHRsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTtcbiBcbiBcdC8qIGZlZWRiYWNrIGZyb20gcm1hcCB3YWxrZXJzIHRvIHBhZ2UgdGFibGUgd2Fsa2VycyAqL1xuIFx0aWYgKG1tX3N0YXRlIFx1MDAyNlx1MDAyNiBzdWl0YWJsZV90b19zY2FuKGksIHlvdW5nKSlcbi1cdFx0dXBkYXRlX2Jsb29tX2ZpbHRlcihtbV9zdGF0ZSwgbWF4X3NlcSwgcHZtdy1cdTAwM2VwbWQpO1xuK1x0XHR1cGRhdGVfYmxvb21fZmlsdGVyKG1tX3N0YXRlLCBSRUFEX09OQ0UobHJ1dmVjLVx1MDAzZWxydWdlbi5tYXhfc2VxKSxcbitcdFx0XHRcdCAgICBwdm13LVx1MDAzZXBtZCk7XG4gXG4gXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4gXG5AQCAtNDcxMSw3ICs0NzE2LDcgQEAgc3RhdGljIGJvb2wgaXNvbGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2FcbiBcbiBcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqL1xuIFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKVxuLVx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIDApO1xuK1x0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuIFxuIFx0c3VjY2VzcyA9IGxydV9nZW5fZGVsX2ZvbGlvKGxydXZlYywgZm9saW8sIHRydWUpO1xuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFzdWNjZXNzLCBmb2xpbyk7XG5AQCAtNDgwNCw5ICs0ODA5LDkgQEAgc3RhdGljIGludCBnZXRfdGllcl9pZHgoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSlcbiBcdCAqIFRoaXMgdmFsdWUgaXMgY2hvc2VuIGJlY2F1c2UgYW55IG90aGVyIHRpZXIgd291bGQgaGF2ZSBhdCBsZWFzdCB0d2ljZVxuIFx0ICogYXMgbWFueSByZWZhdWx0cyBhcyB0aGUgZmlyc3QgdGllci5cbiBcdCAqL1xuLVx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIDAsIDIsIFx1MDAyNnNwKTtcbi1cdGZvciAodGllciA9IDE7IHRpZXIgXHUwMDNjIE1BWF9OUl9USUVSUzsgdGllcisrKSB7XG4tXHRcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0aWVyLCAzLCBcdTAwMjZwdik7XG4rXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NSU4sIDIsIFx1MDAyNnNwKTtcbitcdGZvciAodGllciA9IExSVV9USUVSX01JTiArIDE7IHRpZXIgXHUwMDNjPSBMUlVfVElFUl9NQVg7IHRpZXIrKykge1xuK1x0XHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdGllciwgdGllciwgMywgXHUwMDI2cHYpO1xuIFx0XHRpZiAoIXBvc2l0aXZlX2N0cmxfZXJyKFx1MDAyNnNwLCBcdTAwMjZwdikpXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG5AQCAtNDgyNyw4ICs0ODMyLDEwIEBAIHN0YXRpYyBpbnQgZ2V0X3R5cGVfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKVxuIFx0ICogQ29tcGFyZSB0aGUgc3VtIG9mIGFsbCB0aWVycyBvZiBhbm9uIHdpdGggdGhhdCBvZiBmaWxlIHRvIGRldGVybWluZVxuIFx0ICogd2hpY2ggdHlwZSB0byBzY2FuLlxuIFx0ICovXG4tXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBNQVhfTlJfVElFUlMsIHN3YXBwaW5lc3MsIFx1MDAyNnNwKTtcbi1cdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIE1BWF9OUl9USUVSUywgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCBcdTAwMjZwdik7XG4rXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9BTk9OLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCxcbitcdFx0ICAgICAgc3dhcHBpbmVzcywgXHUwMDI2c3ApO1xuK1x0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTFJVX1RJRVJfTUlOLCBMUlVfVElFUl9NQVgsXG4rXHRcdCAgICAgIE1BWF9TV0FQUElORVNTIC0gc3dhcHBpbmVzcywgXHUwMDI2cHYpO1xuIFxuIFx0cmV0dXJuIHBvc2l0aXZlX2N0cmxfZXJyKFx1MDAyNnNwLCBcdTAwMjZwdik7XG4gfVxuQEAgLTQ5MjcsOCArNDkzNCwxMCBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0fVxuIFxuIFx0XHQvKiBkb24ndCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqL1xuLVx0XHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pXG4tXHRcdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX2FjdGl2ZSkpO1xuK1x0XHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pIHtcbitcdFx0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuK1x0XHRcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xuK1x0XHR9XG4gXHR9XG4gXG4gXHRtb3ZlX2ZvbGlvc190b19scnUoXHUwMDI2bGlzdCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNTo0Nzo0MC43MDc2NDQ3OTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDEzNzU1NDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTUdMUlUgUGF0Y2g6IEEgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0J3MgdHdlYWtpbmcgdGhlIE11bHRpLUdlbiBMUlUgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBMaW51eCBrZXJuZWwsIGFuZCB0aGUgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBzaWduaWZpY2FudC4gSXQncyBtb2RpZnlpbmcgaG93IHRoZSBMUlUgZ2VuZXJhdGlvbiBhbmQgcmVmZXJlbmNlIGZsYWdzIGFyZSBtYW5hZ2VkLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZm9saW8tXHUwMDNlZmxhZ3NgIHN0cnVjdHVyZS4gUmF0aGVyIHRoYW4gZGlyZWN0IGJpdG1hc2sgbWFuaXB1bGF0aW9ucywgaXQncyByZXBsYWNpbmcgdGhlbSB3aXRoIGhlbHBlciBmdW5jdGlvbnMsIGxpa2UgYGxydV9nZW5fZnJvbV9mbGFnc2AsIGFuZCBzbyBvbi4gVGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBtb3ZlLCBwb3RlbnRpYWxseSBpbXByb3ZpbmcgcmVhZGFiaWxpdHkgYW5kIG1haW50YWluYWJpbGl0eS5cblxuVGhlIGNoYW5nZSBmcm9tIGB1bnNpZ25lZCBsb25nYCB0byBgYXRvbWljX2xvbmdfdGAgZm9yIGBscnVfem9uZV9zaXplYCBpbiBgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGVgIGltbWVkaWF0ZWx5IGNhdGNoZXMgbXkgZXllLiBUaGlzIHN1Z2dlc3RzIHRoZXJlIGFyZSBsaWtlbHkgY29uY3VycmVuY3kgaW1wbGljYXRpb25zIHRoYXQgbmVlZCBjYXJlZnVsIGV4YW1pbmF0aW9uLCBhbmQgdGhhdCBjb3VsZCBpbnRyb2R1Y2Ugc3VidGxlIGJ1Z3MgaWYgdGhlIGF0b21pYyBvcGVyYXRpb25zIGFyZW4ndCBoYW5kbGVkIGNvcnJlY3RseS5cblxuRnVuY3Rpb25hbGx5LCB0aGlzIGltcGFjdHMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyDigJMgYm90aCB0aGUgTUdMUlUgaXRzZWxmICphbmQqIHRoZSBtZW1jZyBMUlUgc2l6ZSB0cmFja2luZywgc28gaXQncyBhIGhpZ2gtaW1wYWN0IGFyZWEuIFRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nLiBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgc3BlY2lmaWMgZnVuY3Rpb25zIHRvIHRhcmdldC5cblxuQSBxdWljayBzY2FuIG9mIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgbGlzdCByZXZlYWxzIHRoZSBmb2xsb3dpbmc6IGBtZW1fY2dyb3VwX2dldF96b25lX2xydV9zaXplYCwgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCwgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgLCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAsIGB3YWxrX3B0ZV9yYW5nZWAsIGB3YWxrX3BtZF9yYW5nZV9sb2NrZWRgLCBgZXZpY3RfZm9saW9zYCwgYGdldF90aWVyX2lkeGAsIGBnZXRfdHlwZV90b19zY2FuYCwgYGZvbGlvX2luY19nZW5gLCBgZm9saW9fdXBkYXRlX2dlbmAsIGBscnVfZ2VuX2luY19yZWZzYCwgYW5kIGBscnVfZ2VuX2NsZWFyX3JlZnNgLiBOb3csIGxldCdzIGZvY3VzLlxuXG5HaXZlbiB0aGUgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBhbmQgdGhlaXIgaW1wYWN0IG9uIG1lbWNnLCBJJ2xsIHByaW9yaXRpemUgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCBhbmQgYG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemVgLiBPZiBjb3Vyc2UsIEknbGwgYWxzbyBjb25jZW50cmF0ZSBvbiB0aG9zZSBzcGVjaWZpYyB0byBNR0xSVSBsaWtlIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBhbmQgYGV2aWN0X2ZvbGlvc2AuIFRoZXNlIGFyZSBsaWtlbHkgdGhlIG1vc3QgY3JpdGljYWwgcGFydHMgb2YgdGhlIGNvZGUuXG5cbkJlZm9yZSBJIGdvIGZ1cnRoZXIgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnLiBJJ2xsIG1ha2Ugc3VyZSB0aGF0IGBDT05GSUdfTFJVX0dFTmAgaXMgZW5hYmxlZCBiZWNhdXNlIG90aGVyd2lzZSwgdGhpcyBwYXRjaCB3b24ndCBldmVuIGJlIHJlbGV2YW50LCBzbyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIEdvdHRhIG1ha2Ugc3VyZSB0aGUgZm91bmRhdGlvbiBpcyBzb3VuZCBiZWZvcmUgZGl2aW5nIGludG8gdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjQ5LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDU6NDc6NDguMTIxNDA0Mzc4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDgwODA5ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIExSVV9HRU5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMzkzPWNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1BcXG4tLVxcbm1tL0tjb25maWctMTQwMy0jIG11bHRpLWdlbiBMUlUge1xcbm1tL0tjb25maWc6MTQwNDpjb25maWcgTFJVX0dFTlxcbm1tL0tjb25maWctMTQwNS1cXHRib29sIFxcXCJNdWx0aS1HZW4gTFJVXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDEyLVxcbm1tL0tjb25maWc6MTQxMzpjb25maWcgTFJVX0dFTl9FTkFCTEVEXFxubW0vS2NvbmZpZy0xNDE0LVxcdGJvb2wgXFxcIkVuYWJsZSBieSBkZWZhdWx0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDE4LVxcbm1tL0tjb25maWc6MTQxOTpjb25maWcgTFJVX0dFTl9TVEFUU1xcbm1tL0tjb25maWctMTQyMC1cXHRib29sIFxcXCJGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MjctXFxubW0vS2NvbmZpZzoxNDI4OmNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxcbm1tL0tjb25maWctMTQyOS1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA1OjQ3OjQ5Ljg2OTQ5MDU2NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTExMDEzMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uc2lkZXJpbmcgTFJVIEdlbmVyYXRpb24gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYExSVV9HRU5gIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNYWtlcyBzZW5zZSwgdGhhdCdzIHRoZSBjb3JlLiBUbyBtYWtlIHRoaW5ncyBlYXN5LCB3ZSBzaG91bGQgZW5hYmxlIGl0IGJ5IGRlZmF1bHQgYnkgYWRkaW5nIGBMUlVfR0VOX0VOQUJMRURgLCBvciBnaXZlIHRoZSB1c2VyIGNvbnRyb2wgd2l0aCBhIHN5c2ZzIGVudHJ5LiBJIHRoaW5rIHdlIHNob3VsZCBpbmNsdWRlIGJvdGggb3B0aW9ucyBmb3IgbWF4aW11bSBmbGV4aWJpbGl0eS4gU28sIEknbGwgYWRkIGBMUlVfR0VOYCBhbmQgYExSVV9HRU5fRU5BQkxFRGAgdG8gdGhlIGNvbmZpZy5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMuIEkgc2hvdWxkIGNoZWNrIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgYmVpbmcgbW9kaWZpZWQuXG5cbkhtbSwgbGV0J3Mgc2VlLCB3aGF0IGFib3V0IGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWA/IEkgd29uZGVyIGlmIHRoYXQncyBhbiBleHBvcnRlZCBmdW5jdGlvbiwgb3IgaWYgaXQncyBzdGF0aWM/IEknbGwgcXVpY2tseSB1c2UgZ3JlcCB0byBmaW5kIGFsbCBpbnN0YW5jZXMgb2YgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCB0byBnZXQgYSBiZXR0ZXIgb3ZlcnZpZXcgb2YgaXRzIHVzYWdlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gd2hlcmUgdGhpcyBtb2RpZmljYXRpb24gaXMgaGFwcGVuaW5nIHdpdGhpbiB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4OTMsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDU6NDc6NTMuNTYwNTk0NjQxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTEwNjYxMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9ODg2PXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC04OTItXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6ODkzOnZvaWQgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIGxydV9saXN0IGxydSxcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC04OTQtXFx0XFx0aW50IHppZCwgbG9uZyBucl9wYWdlcyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTUyPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB1cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC01Ny0jaWZkZWYgQ09ORklHX01FTUNHXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDo1ODpcXHRtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShscnV2ZWMsIGxydSwgemlkLCBucl9wYWdlcyk7XFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC01OS0jZW5kaWZcXG4tLVxcbm1tL2ZvbGlvLmM9MTEyMz1zdGF0aWMgdm9pZCBscnV2ZWNfcmVwYXJlbnRfbHJ1KHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYyxcXG4tLVxcbm1tL2ZvbGlvLmMtMTEzNS1cXG5tbS9mb2xpby5jOjExMzY6XFx0XFx0bWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUocGFyZW50X2xydXZlYywgbHJ1LCB6aWQsIHNpemUpO1xcbm1tL2ZvbGlvLmMtMTEzNy1cXHR9XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTUwMT1zdHJ1Y3QgbHJ1dmVjICpmb2xpb19scnV2ZWNfbG9ja19pcnFzYXZlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTUxOC0vKipcXG5tbS9tZW1jb250cm9sLmM6MTUxOTogKiBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZSAtIGFjY291bnQgZm9yIGFkZGluZyBvciByZW1vdmluZyBhbiBscnUgcGFnZVxcbm1tL21lbWNvbnRyb2wuYy0xNTIwLSAqIEBscnV2ZWM6IG1lbV9jZ3JvdXAgcGVyIHpvbmUgbHJ1IHZlY3Rvclxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE1MjctICovXFxubW0vbWVtY29udHJvbC5jOjE1Mjg6dm9pZCBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LFxcbm1tL21lbWNvbnRyb2wuYy0xNTI5LVxcdFxcdFxcdFxcdGludCB6aWQsIGxvbmcgbnJfcGFnZXMpXFxuLS1cXG5tbS92bXNjYW4uYz0xNTkyPXVuc2lnbmVkIGludCByZWNsYWltX2NsZWFuX3BhZ2VzX2Zyb21fbGlzdChzdHJ1Y3Qgem9uZSAqem9uZSxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTE2NDQtICogVXBkYXRlIExSVSBzaXplcyBhZnRlciBpc29sYXRpbmcgcGFnZXMuIFRoZSBMUlUgc2l6ZSB1cGRhdGVzIG11c3RcXG5tbS92bXNjYW4uYzoxNjQ1OiAqIGJlIGNvbXBsZXRlIGJlZm9yZSBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZSBkdWUgdG8gYSBzYW5pdHkgY2hlY2suXFxubW0vdm1zY2FuLmMtMTY0Ni0gKi9cXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ2MjU9dm9pZCBscnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ2NDItXFxubW0vdm1zY2FuLmM6NDY0MzpcXHRcXHRcXHRtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZShwYXJlbnRfbHJ1dmVjLCBscnUsIHppZCwgc2l6ZSk7XFxubW0vdm1zY2FuLmMtNDY0NC1cXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA1OjQ3OjU1LjE3MTY2OTU1MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNDg4MjE3NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgZmFtaWxpYXIgd2l0aCBtZW1vcnkgbWFuYWdlbWVudDpcblxuKipDaGVja2luZyBvbiBMUlUgU2l6ZSBVcGRhdGVzKipcblxuSG1tLCBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgIGlzIGV4cG9ydGVkIGFuZCBub24tc3RhdGljLiBJbnRlcmVzdGluZy4gVGhhdCBsaWtlbHkgbWVhbnMgaXQncyBkZXNpZ25lZCB0byBiZSBjYWxsZWQgZnJvbSBvdGhlciBtb2R1bGVzIG9yIHBhcnRzIG9mIHRoZSBrZXJuZWwuIFRoaXMgcmFpc2VzIHNvbWUgcXVlc3Rpb25zIGFib3V0IGhvdyBicm9hZGx5IGl0J3MgdXNlZCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLiBJIHNob3VsZCBwcm9iYWJseSByZXZpZXcgdGhlIGNhbGwgc2l0ZXMgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGl0cyBpbXBhY3Qgb24gdGhlIHN5c3RlbS5cblxuTm93LCB3aGF0IGFib3V0IGBscnVfZ2VuX2xvb2tfYXJvdW5kYD8gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIGl0cyBkZWZpbml0aW9uIGFuZCBwdXJwb3NlLiBJcyB0aGF0IGFsc28gZXhwb3J0ZWQ/IElzIGl0IHN0YXRpYz8gVGhhdCdzIGdvaW5nIHRvIGluZmx1ZW5jZSBob3cgSSBzZWUgdGhpbmdzLiBJIG5lZWQgdG8ga25vdyBob3cgaXQgcmVsYXRlcyB0byBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgIGFuZCBob3cgaXQgbWlnaHQgaW1wYWN0IExSVSBzaXplIGNhbGN1bGF0aW9ucy4gTWF5YmUgSSBzaG91bGQgcXVpY2tseSBncmVwIHRoZSBjb2RlYmFzZSB0byBmaW5kIHdoZXJlIGl0J3MgZGVmaW5lZCBhbmQgdXNlZCB0byBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZC4gSXQncyBwcm9iYWJseSBjYWxsZWQgYnkgc29tZSBraW5kIG9mIHNjaGVkdWxlciBvciBwYWdlIHJlY2xhaW0gbWVjaGFuaXNtLCBzbyB1bmRlcnN0YW5kaW5nIGl0cyByb2xlIGlzIGltcG9ydGFudCBmb3IgdGhlIGNvbXBsZXRlIG1lbW9yeSBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDAxNSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA1OjQ3OjU4LjQyMDQ5MzYwMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc2Mzg2MDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxydV9nZW5fbG9va19hcm91bmRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0PTE4Nz1jYW4gaW5jdXIgdGhlIGhpZ2hlc3QgQ1BVIGNvc3QgaW4gdGhlIHJlY2xhaW0gcGF0aC5cXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3QtMTg4LVxcbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdDoxODk6YGBscnVfZ2VuX2xvb2tfYXJvdW5kKClgYCBleHBsb2l0cyBzcGF0aWFsIGxvY2FsaXR5IHRvIHJlZHVjZSB0aGVcXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3QtMTkwLXRyaXBzIGludG8gdGhlIHJtYXAuIEl0IHNjYW5zIHRoZSBhZGphY2VudCBQVEVzIG9mIGEgeW91bmcgUFRFIGFuZFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0PTE5OT1pbiB0aGUgc2V0LlxcbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdC0yMDAtXFxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0OjIwMTpJbiB0aGUgZXZpY3Rpb24gcGF0aCwgc3BlY2lmaWNhbGx5LCBpbiBgYGxydV9nZW5fbG9va19hcm91bmQoKWBgLCBpZiBhXFxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0LTIwMi1QTUQgaGFzIGEgc3VmZmljaWVudCBudW1iZXIgb2YgaG90IHBhZ2VzLCBpdHMgYWRkcmVzcyBpcyBwbGFjZWQgaW4gdGhlXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTY5NT12b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKTtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjY5Njpib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNjk3LVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD03MTQ9c3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03MTctXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo3MTg6c3RhdGljIGlubGluZSBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzE5LVxcdFxcdHVuc2lnbmVkIGludCBucilcXG4tLVxcbm1tL3JtYXAuYz05MTg9c3RhdGljIGJvb2wgZm9saW9fcmVmZXJlbmNlZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3JtYXAuYy05ODItXFx0XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFxcdTAwMjZcXHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpIFxcdTAwMjZcXHUwMDI2IHB2bXcucHRlKSB7XFxubW0vcm1hcC5jOjk4MzpcXHRcXHRcXHRpZiAobHJ1X2dlbl9sb29rX2Fyb3VuZChcXHUwMDI2cHZtdywgbnIpKVxcbm1tL3JtYXAuYy05ODQtXFx0XFx0XFx0XFx0cmVmZXJlbmNlZCsrO1xcbi0tXFxubW0vdm1zY2FuLmM9Mjc5MT1zdGF0aWMgYm9vbCBfX21heWJlX3VudXNlZCBzZXFfaXNfdmFsaWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbi0tXFxubW0vdm1zY2FuLmMtMjgyMC0gKiB3YWxrX3BtZF9yYW5nZSgpOyB0aGUgZXZpY3Rpb24gYWxzbyByZXBvcnQgdGhlbSB3aGVuIHdhbGtpbmcgdGhlIHJtYXBcXG5tbS92bXNjYW4uYzoyODIxOiAqIGluIGxydV9nZW5fbG9va19hcm91bmQoKS5cXG5tbS92bXNjYW4uYy0yODIyLSAqXFxuLS1cXG5tbS92bXNjYW4uYz00MDc4PXN0YXRpYyBib29sIHRyeV90b19pbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLFxcbi0tXFxubW0vdm1zY2FuLmMtNDA5Ny1cXHQgKiBJZiB0aGUgaGFyZHdhcmUgZG9lc24ndCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgYWNjZXNzZWQgYml0LCBmYWxsYmFja1xcbm1tL3Ztc2Nhbi5jOjQwOTg6XFx0ICogdG8gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLCB3aGljaCBvbmx5IGNsZWFycyB0aGUgYWNjZXNzZWQgYml0IGluIGFcXG5tbS92bXNjYW4uYy00MDk5LVxcdCAqIGhhbmRmdWwgb2YgUFRFcy4gU3ByZWFkaW5nIHRoZSB3b3JrIG91dCBvdmVyIGEgcGVyaW9kIG9mIHRpbWUgdXN1YWxseVxcbi0tXFxubW0vdm1zY2FuLmM9NDIxNz1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNDI2My0gKi9cXG5tbS92bXNjYW4uYzo0MjY0OmJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcXG5tbS92bXNjYW4uYy00MjY1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDU6NDc6NTkuODk2ODgzODI2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc0NzI3NTE0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nOlxuXG4qKkV4YW1pbmluZyBQb3RlbnRpYWwgT3B0aW1pemF0aW9uIE9wcG9ydHVuaXRpZXMqKlxuXG5Pa2F5LCBsZXQncyBzZWUuIEknbSBsb29raW5nIGF0IGBscnVfZ2VuX2xvb2tfYXJvdW5kYCwgYW5kIGl0J3MgY2FsbGVkIGZyb20gYGZvbGlvX3JlZmVyZW5jZWRfb25lYC4gVGhhdCdzIHRoZSBpbW1lZGlhdGUgY29udGV4dC4gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBicm9hZGVyIGltcGxpY2F0aW9ucy4gVGhpcyBsaWtlbHkgaGFzIGltcGxpY2F0aW9ucyBmb3IgdGhlIExSVSBjYWNoZSBpbnRlcmFjdGlvbiwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBtaWdyYXRpb24gZmxhZ3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBBcmUgdGhlcmUgaW50ZXJhY3Rpb25zIG9yIGRlcGVuZGVuY2llcyB0aGVyZSB0aGF0IGNhbiBiZSBzdHJlYW1saW5lZD8gSXMgdGhlcmUgc2hhcmVkIGZ1bmN0aW9uYWxpdHk/IEFyZSB0aGUgZmxhZ3MgdXNlZCBkdXJpbmcgbG9vayBhcm91bmQsIG9yIGlzIHRoZXJlIHRoZSBhYmlsaXR5IHRvIHNldCB0aGVtIGR1cmluZyBtaWdyYXRpb24/IFRoaXMgbGluZSBvZiB0aG91Z2h0IHByb21wdHMgbWUgdG8gcmV2aWV3IGhvdyBgZm9saW9fbWlncmF0ZV9mbGFnc2AgcmVsYXRlcyB0byB0aGUgTFJVIGFuZCByZWZlcmVuY2VkIHBhZ2Ugb3BlcmF0aW9ucy4gVGhlcmUgY291bGQgYmUgYW4gb3Bwb3J0dW5pdHkgZm9yIG9wdGltaXphdGlvbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyMTgsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNTo0ODowMi42NDQxNjE2MTJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTc4MjI1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9fbWlncmF0ZV9mbGFnc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9haW8uYz00NjA9c3RhdGljIGludCBhaW9fbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpkc3QsXFxuLS1cXG5mcy9haW8uYy01MTItXFx0Zm9saW9fY29weShkc3QsIHNyYyk7XFxuZnMvYWlvLmM6NTEzOlxcdGZvbGlvX21pZ3JhdGVfZmxhZ3MoZHN0LCBzcmMpO1xcbmZzL2Fpby5jLTUxNC1cXHRCVUdfT04oY3R4LVxcdTAwM2VyaW5nX2ZvbGlvc1tpZHhdICE9IHNyYyk7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYz0xMDI0PXN0YXRpYyBpbnQgaHVnZXRsYmZzX21pZ3JhdGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDM5LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEwNDA6XFx0Zm9saW9fbWlncmF0ZV9mbGFncyhkc3QsIHNyYyk7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTA0MS1cXG4tLVxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oPTY5PXZvaWQgc29mdGxlYWZfZW50cnlfd2FpdF9vbl9sb2NrZWQoc29mdGxlYWZfdCBlbnRyeSwgc3BpbmxvY2tfdCAqcHRsKVxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTcwLVxcdFxcdF9fcmVsZWFzZXMocHRsKTtcXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaDo3MTp2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtNzItaW50IGZvbGlvX21pZ3JhdGVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg9MzUyPXN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcmVjbGFpbWluZylcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMzYyLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6MzYzOlxcdC8qIGZvciBmb2xpb19taWdyYXRlX2ZsYWdzKCkgKi9cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTM2NC1cXHRmbGFncyA9ICFyZWNsYWltaW5nIFxcdTAwMjZcXHUwMDI2IGxydV9nZW5faXNfYWN0aXZlKGxydXZlYywgZ2VuKSA/IEJJVChQR19hY3RpdmUpIDogMDtcXG4tLVxcbm1tL21pZ3JhdGUuYz03Mzk9aW50IG1pZ3JhdGVfaHVnZV9wYWdlX21vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbm1tL21pZ3JhdGUuYy03NzQtICovXFxubW0vbWlncmF0ZS5jOjc3NTp2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9taWdyYXRlLmMtNzc2LXtcXG4tLVxcbm1tL21pZ3JhdGUuYy04NjMtfVxcbm1tL21pZ3JhdGUuYzo4NjQ6RVhQT1JUX1NZTUJPTChmb2xpb19taWdyYXRlX2ZsYWdzKTtcXG5tbS9taWdyYXRlLmMtODY1LVxcbi0tXFxubW0vbWlncmF0ZS5jPTg3MD1zdGF0aWMgaW50IF9fbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpkc3QsXFxuLS1cXG5tbS9taWdyYXRlLmMtODkwLVxcbm1tL21pZ3JhdGUuYzo4OTE6XFx0Zm9saW9fbWlncmF0ZV9mbGFncyhkc3QsIHNyYyk7XFxubW0vbWlncmF0ZS5jLTg5Mi1cXHRyZXR1cm4gMDtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTEwOT1zdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjUxLVxcdFxcdFxcdGVsc2VcXG5tbS9taWdyYXRlX2RldmljZS5jOjEyNTI6XFx0XFx0XFx0XFx0Zm9saW9fbWlncmF0ZV9mbGFncyhuZXdmb2xpbywgZm9saW8pO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI1My1cXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA1OjQ4OjA0LjMwMTk5MTUzMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzA5ODEzNjg5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEZvY3VzIFN5bWJvbHMgaW4gTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgc2NhbiBmbGFnZ2VkIGBmb2xpb19taWdyYXRlX2ZsYWdzYCBhcyBleHBvcnRlZCwgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgaXQgYSBjYW5kaWRhdGUgZm9yIGNsb3NlciBpbnNwZWN0aW9uLiBCdXQgSSBxdWlja2x5IGNoZWNrZWQgYXJvdW5kLCBhbmQgSSBzZWUgdGhhdCBhIHNsZXcgb2Ygb3RoZXJzIGFyZSBzdGF0aWM6IGBmb2xpb191cGRhdGVfZ2VuYCwgYGZvbGlvX2luY19nZW5gLCBgbHJ1X2dlbl9pbmNfcmVmc2AsIGBscnVfZ2VuX2NsZWFyX3JlZnNgLCBgd2Fsa19wdGVfcmFuZ2VgLCBgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkYCwgYW5kIGBldmljdF9mb2xpb3NgIGFsbCBzZWVtIHRvIGJlIGludGVybmFsIHRvIHRoZWlyIHJlc3BlY3RpdmUgbW9kdWxlcywgc28gSSdsbCBwdXQgdGhlbSBvbiBhIGJhY2sgYnVybmVyIGZvciBub3cuXG5cbk5vdywgbGV0J3MgZGlnIGludG8gdGhlIG5vbi1zdGF0aWMgb25lcyBtb3JlIGRlZXBseS4gSSBzdGFydGVkIHdpdGggYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYC4gVHJhY2luZyBpdCwgSSBzZWUgaXQncyBjYWxsZWQgZnJvbSBgdXBkYXRlX2xydV9zaXplYCwgd2hpY2ggaXMgbWFya2VkIGBfX2Fsd2F5c19pbmxpbmVgLCBhbmQgaW4gdHVybiBnZXRzIGNhbGxlZCBieSBgbHJ1dmVjX2FkZF9mb2xpb2AsIGBscnV2ZWNfZGVsX2ZvbGlvYCwgZXRjLiBUaGF0IGNvbmZpcm1zIGl0J3MgYSBjcml0aWNhbCBmdW5jdGlvbiByZWxhdGVkIHRvIG1lbW9yeSBjZ3JvdXAgTFJVIG1hbmFnZW1lbnQsIGFuZCBpdCdzIGRlZmluaXRlbHkgYSBnb29kIGZvY3VzLlxuXG5OZXh0LCBJIGNoZWNrZWQgYGxydV9nZW5fbG9va19hcm91bmRgLiBJdCdzIG5vbi1zdGF0aWMgYW5kIGdldHMgY2FsbGVkIGJ5IGBmb2xpb19yZWZlcmVuY2VkX29uZWAsIHdoaWNoIG1ha2VzIGl0IGFub3RoZXIgaW50ZXJlc3Rpbmcgc3ltYm9sLlxuXG5UaGVuLCBiYWNrIHRvIGBmb2xpb19taWdyYXRlX2ZsYWdzYC4gSXQncyBleHBvcnRlZCBhbmQgY2FsbGVkIGZyb20gc2V2ZXJhbCBpbXBvcnRhbnQgbWlncmF0aW9uIGZ1bmN0aW9uczogYGFpb19taWdyYXRlX2ZvbGlvYCwgYGh1Z2V0bGJmc19taWdyYXRlX2ZvbGlvYCwgYF9fbWlncmF0ZV9mb2xpb2AsIGFuZCBgX19taWdyYXRlX2RldmljZV9wYWdlc2AuIFRoaXMgaXMgYW5vdGhlciBzdHJvbmcgY29udGVuZGVyIGZvciBmb2N1cy5cblxuSSBhbHNvIHF1aWNrbHkgY2hlY2tlZCBgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZWAsIGBmb2xpb19scnVfcmVmc2AgYW5kIGBmb2xpb19zZXRfbHJ1X3JlZnNgIGJ1dCB0aGV5IGFyZSBgc3RhdGljIGlubGluZWAsIHNvIHRoZXkgZG9uJ3Qgc2VlbSB0byBoYXZlIGFzIHdpZGUgYSBzY29wZS5cblxuU28sIGJhc2VkIG9uIHRoZSBpbml0aWFsIGFzc2Vzc21lbnQsIHRoZSBrZXkgZm9jdXMgc3ltYm9scyBhcHBlYXIgdG8gYmU6XG4qICAgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYFxuKiAgIGBscnVfZ2VuX2xvb2tfYXJvdW5kYFxuKiAgIGBmb2xpb19taWdyYXRlX2ZsYWdzYFxuXG5UbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkgd2VudCBiYWNrIHRvIHJlLWNoZWNrIGFsbCB0aGUgY29kZS4gSSB2ZXJpZmllZCB0aGF0IHRob3NlIHRocmVlOiBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgLCBgZm9saW9fbWlncmF0ZV9mbGFnc2AsIGFuZCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgd2VyZSBhY3R1YWxseSB0aGUgZnVuY3Rpb25zIHRoYXQgaGFkIGJlZW4gbW9kaWZpZWQuXG5cbkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgd2VudCBiYWNrIGFuZCByZS1jaGVja2VkIHNldmVyYWwgc3RhdGljIGZ1bmN0aW9ucyB0byBiZSBzdXJlLiBJIGNoZWNrZWQgdGhlIHN0YXRpYyBmdW5jdGlvbnM6IGBldmljdF9mb2xpb3NgLCBgZ2V0X3RpZXJfaWR4YCwgYGdldF90eXBlX3RvX3NjYW5gLCBgcmVhZF9jdHJsX3Bvc2AsIGBmb2xpb191cGRhdGVfZ2VuYCwgYGZvbGlvX2luY19nZW5gLCBgdXBkYXRlX2JhdGNoX3NpemVgLCBgd2Fsa191cGRhdGVfZm9saW9gLCBgd2Fsa19wdGVfcmFuZ2VgLCBgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkYCwgYW5kIGBpc29sYXRlX2ZvbGlvYCwganVzdCB0byBtYWtlIHN1cmUgSSB3YXNuJ3QgbWlzc2luZyBhbnl0aGluZyBzaWduaWZpY2FudC5cblxuQWxyaWdodCwgdGhlIGZpbmFsIGxpc3Qgb2Ygbm9uLXN0YXRpYyBmdW5jdGlvbnMgbW9kaWZpZWQgaXM6XG4qICAgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYFxuKiAgIGBmb2xpb19taWdyYXRlX2ZsYWdzYFxuKiAgIGBscnVfZ2VuX2xvb2tfYXJvdW5kYFxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjIxMywiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNTo0ODoxNy40MDAxMzA5NjZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODYxMzg0NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDY3PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbi0tXFxuaW5pdC9LY29uZmlnLTEwNzYtXFxuaW5pdC9LY29uZmlnOjEwNzc6Y29uZmlnIE1FTUNHXFxuaW5pdC9LY29uZmlnLTEwNzgtXFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWctMTA4NS1cXG5pbml0L0tjb25maWc6MTA4Njpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbmluaXQvS2NvbmZpZy0xMDg3LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDkyLVxcbmluaXQvS2NvbmZpZzoxMDkzOmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluaXQvS2NvbmZpZy0xMDk0LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDk5LVxcbmluaXQvS2NvbmZpZzoxMTAwOmNvbmZpZyBNRU1DR19WMVxcbmluaXQvS2NvbmZpZy0xMTAxLVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA1OjQ4OjE4Ljg4NjI3Mzk4MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjAwMjg5NzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIHNlbGYtcmVmbGVjdGlvbjpcblxuKipEZWVwIERpdmUgb24gTFJVX0dFTiBhbmQgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUqKlxuXG5BbHJpZ2h0LCBzbyAqbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUqIGFic29sdXRlbHkgbmVlZHMgYE1FTUNHYC4gTm8gcXVlc3Rpb24gdGhlcmUuIEl0J3MgZnVuZGFtZW50YWwuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGlzIHRoZXJlIGFueXRoaW5nIGVsc2UgdGhhdCAqTFJVX0dFTiogZGVwZW5kcyBvbj8gSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiBhbmQgdmVyaWZ5IHRoYXQgSSBoYXZlbid0IG1pc3NlZCBhIGRlcGVuZGVuY3kgb3IgaW50ZXJhY3Rpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbmZpZ3VyYXRpb24gY29udGV4dC4gSSBrbm93IHRoaXMgc2VlbXMgbGlrZSBhIG5vLWJyYWluZXIgdG8gY2hlY2ssIGJ1dCB0aGVzZSB0aGluZ3Mgb2Z0ZW4gaGF2ZSBoaWRkZW4gaW1wbGljYXRpb25zLCBhbmQgSSB3YW50IHRvIGJlIDEwMCUgc3VyZSBJIGhhdmVuJ3Qgb3Zlcmxvb2tlZCBhbnkgb3RoZXIgZGVwZW5kZW50IGNvbmZpZ3VyYXRpb25zLiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5LiBMZXQncyBtYWtlIHN1cmUgb3VyIGJhc2VzIGFyZSBjb3ZlcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzg4MSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA1OjQ4OjIzLjA4NjU2NjY0MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4NTQ4MzU4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTFJVX0dFTlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEzOTM9Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxcbi0tXFxubW0vS2NvbmZpZy0xNDAzLSMgbXVsdGktZ2VuIExSVSB7XFxubW0vS2NvbmZpZzoxNDA0OmNvbmZpZyBMUlVfR0VOXFxubW0vS2NvbmZpZy0xNDA1LVxcdGJvb2wgXFxcIk11bHRpLUdlbiBMUlVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MTItXFxubW0vS2NvbmZpZzoxNDEzOmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcXG5tbS9LY29uZmlnLTE0MTQtXFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MTgtXFxubW0vS2NvbmZpZzoxNDE5OmNvbmZpZyBMUlVfR0VOX1NUQVRTXFxubW0vS2NvbmZpZy0xNDIwLVxcdGJvb2wgXFxcIkZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTQyNy1cXG5tbS9LY29uZmlnOjE0Mjg6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXFxubW0vS2NvbmZpZy0xNDI5LVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDU6NDg6MjQuNTcyMDU0NDM2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyNjM4MzQwNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgTFJVX0dFTioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmUgYXJvdW5kIGBMUlVfR0VOYC4gRmlyc3QsIGxldCdzIGp1c3Qgc2NvcGUgb3V0IHdoYXQncyBkaXJlY3RseSBjb25uZWN0ZWQuIFdoYXQgbW9kdWxlcyBvciBmdW5jdGlvbnMgY2FsbCBpdD8gV2hhdCBkb2VzIGl0IGNhbGw/IEknbSB0aGlua2luZyBJJ2xsIG5lZWQgYSBxdWljayBjYWxsIGdyYXBoIHZpc3VhbGl6YXRpb24uIEdyYXBodml6IG1heWJlPyBPciBJIGNvdWxkIHF1aWNrbHkgZHVtcCB0aGUgZGVwZW5kZW5jaWVzIHVzaW5nIG15IHByZWZlcnJlZCB0b29sIGNoYWluLiBJ4oCZbSBsZWFuaW5nIHRvd2FyZHMgYSBwcm9ncmFtbWF0aWMgYXBwcm9hY2ggZm9yIHRoaXMgc2luY2UgYSB2aXN1YWwgcmVwcmVzZW50YXRpb24sIHdoaWxlIGhlbHBmdWwsIHByb2JhYmx5IHdvbid0IGdpdmUgbWUgdGhlIGxvdyBsZXZlbCBpbnNpZ2h0IEkgbmVlZCBmb3IgYSB0YXNrLlxuXG5UaGVuLCBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGRhdGEgc3RydWN0dXJlcyBgTFJVX0dFTmAgaW50ZXJhY3RzIHdpdGguIEFyZSB0aGVzZSBzaGFyZWQsIHByb3RlY3RlZCBieSBsb2Nrcywgb3Igc2luZ2xlLXRocmVhZGVkPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uY3VycmVuY3kgbW9kZWwgaW1tZWRpYXRlbHkgaWYgaXQncyBub3Qgc2luZ2xlIHRocmVhZGVkLiBUaGlzIHByb2JhYmx5IGVudGFpbHMgdHJhY2luZyBob3cgdGhlIGtleXMgYW5kIHZhbHVlcyBhcmUgc3RvcmVkIGFuZCByZXRyaWV2ZWQuXG5cbkknbSBhbHNvIGN1cmlvdXMgYWJvdXQgdGhlIGV2aWN0aW9uIHBvbGljeSBpbXBsZW1lbnRhdGlvbi4gSXMgaXQgYSBzaW1wbGUgY2xvY2stc3dlZXAsIGEgbW9yZSBjb21wbGV4IGFkYXB0aXZlIHNjaGVtZSwgb3Igc29tZXRoaW5nIGN1c3RvbT8gVGhlIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBvZiBgTFJVX0dFTmAgd2lsbCBiZSBoaWdobHkgZGVwZW5kZW50IG9uIHRoaXMuIEknbGwgbmVlZCB0byBsb29rIGF0IHRoZSBtZXRyaWNzIGNvbGxlY3Rpb24uXG5cbkZpbmFsbHksIEkgd2FudCB0byBjb25zaWRlciBob3cgdGhlIGNhY2hlIGlzIGNvbmZpZ3VyZWQuIEFyZSB0aGVyZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgZm9yIHNpemUsIGV2aWN0aW9uIHRocmVzaG9sZCwgb3Igb3RoZXIgYmVoYXZpb3I/IEFueSB1bml0IHRlc3RzIG9uIHRoZSBldmljdGlvbiBwb2xpY3kgaW1wbGVtZW50YXRpb24gd291bGQgYmUgaGVscGZ1bCBmb3IgYSBxdWlja2VyIHVuZGVyc3RhbmRpbmcsIGFuZCBJIHdvdWxkIHdhbnQgdG8gbG9vayBhdCB0aG9zZSBuZXh0LiBJIGFtIGFsc28gY3VyaW91cyBhYm91dCB0aGUgdGVzdCBjb3ZlcmFnZSBzdXJyb3VuZGluZyB0aGlzIGNvbXBvbmVudDsgSeKAmWQgd2FudCB0byBtYWtlIHN1cmUgdGhlIGNvcmUgZnVuY3Rpb25zIGFyZSBmdWxseSBleGVyY2lzZWQsIGVzcGVjaWFsbHkgaW4gZWRnZS1jYXNlIHNjZW5hcmlvcyBsaWtlIHZlcnkgaGlnaCBvciB2ZXJ5IGxvdyB3b3JrbG9hZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MzYwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDU6NDg6MzAuODM1ODkyMDYzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0MDA6XFx0XFx0ICBwdXJwb3Nlcy4gIEl0IGlzIHJlcXVpcmVkIHRvIGVuYWJsZSB1c2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIG9uXFxuMTQwMTpcXHRcXHQgIGZpbGUtYmFja2VkIG1lbW9yeSB0eXBlcyBsaWtlIHNobWVtIGFuZCBodWdldGxiZnMuXFxuMTQwMjpcXHRcXG4xNDAzOlxcdCMgbXVsdGktZ2VuIExSVSB7XFxuMTQwNDpcXHRjb25maWcgTFJVX0dFTlxcbjE0MDU6XFx0XFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4xNDA2OlxcdFxcdGRlcGVuZHMgb24gTU1VXFxuMTQwNzpcXHRcXHQjIG1ha2Ugc3VyZSBmb2xpby1cXHUwMDNlZmxhZ3MgaGFzIGVub3VnaCBzcGFyZSBiaXRzXFxuMTQwODpcXHRcXHRkZXBlbmRzIG9uIDY0QklUIHx8ICFTUEFSU0VNRU0gfHwgU1BBUlNFTUVNX1ZNRU1NQVBcXG4xNDA5OlxcdFxcdGhlbHBcXG4xNDEwOlxcdFxcdCAgQSBoaWdoIHBlcmZvcm1hbmNlIExSVSBpbXBsZW1lbnRhdGlvbiB0byBvdmVyY29tbWl0IG1lbW9yeS4gU2VlXFxuMTQxMTpcXHRcXHQgIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscy5cXG4xNDEyOlxcdFxcbjE0MTM6XFx0Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbjE0MTQ6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuMTQxNTpcXHRcXHRkZXBlbmRzIG9uIExSVV9HRU5cXG4xNDE2OlxcdFxcdGhlbHBcXG4xNDE3OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbXVsdGktZ2VuIExSVSBieSBkZWZhdWx0LlxcbjE0MTg6XFx0XFxuMTQxOTpcXHRjb25maWcgTFJVX0dFTl9TVEFUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNTo0ODozMC44MzYwMjUxOTNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc0OTUyNDE1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIFRoaXMgTWVtb3J5IE1hbmFnZW1lbnQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIExlYXN0IFJlY2VudGx5IFVzZWQgKExSVSkgYW5kIGl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQgYXQgZmlyc3QgZ2xhbmNlLiBJdCdzIGNsZWFyIHRoYXQgYExSVV9HRU5gIHJlbGllcyBvbiBhIGNvdXBsZSBvZiBrZXkgdGhpbmdzOiB0aGUgYE1NVWAgKG9idmlvdXNseSwgZXNzZW50aWFsIGZvciBtZW1vcnkgbWFuYWdlbWVudCkgYW5kIGVpdGhlciBhIDY0LWJpdCBhcmNoaXRlY3R1cmUgb3IgYSBub24tc3BhcnNlIG1lbW9yeSBzZXR1cCBvciB0aGUgYFNQQVJTRU1FTV9WTUVNTUFQYCBjb25maWd1cmF0aW9uLiBNYWtlcyBzZW5zZS4gTm93LCBteSBpbW1lZGlhdGUgcmVhY3Rpb24gaXMgdGhhdCB3ZSBzaG91bGQgYmUgZW5hYmxpbmcgYm90aCBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgLlxuXG5CZXlvbmQgdGhhdCwgdGhlIGRlcGVuZGVuY2llcyBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBgTUVNQ0dgIGlzIGRlZmluaXRlbHkgcmVxdWlyZWQgdG8gYWxsb3cgYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCB0byBvcGVyYXRlIGNvcnJlY3RseS4gVGhhdCBmdW5jdGlvbiB0ZWxscyBtZSB0aGF0IHRoZXJlIGFyZSBzb21lIHNpZ25pZmljYW50IHVwZGF0ZXMgdG8gdGhlIG1lbW9yeSBjb250cm9sIGdyb3VwIGZ1bmN0aW9uYWxpdHkgaGVyZSwgd2hpY2ggZGVmaW5pdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuXG5cbkkgbmVlZCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBvciBudWFuY2VzIGhlcmUuIFRoZSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZOKAlGBtbS92bXNjYW4uY2AsIGBtbS9taWdyYXRlLmNgLCBgbW0vbWVtY29udHJvbC5jYCwgYW5kIGBtbS9mb2xpby5jYOKAlHRoZXNlIGFyZSAqY29yZSogbWVtb3J5IG1hbmFnZW1lbnQgZmlsZXMsIHNvIHRoaXMgaXMgYSBjcnVjaWFsIGNoYW5nZS4gSSBuZWVkIHRvIGRpZyBpbi5cblxuTm93LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUga2V5IHN5bWJvbHMgdG91Y2hlZCBoZXJlIHRvIGdldCBhIHNlbnNlIG9mIHRoZSBzY29wZTogYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCwgdGhhdCdzIHRoZSBiaWcgb25lLCBnaXZlbiB0aGUgZWFybGllciBgTUVNQ0dgIHRpZS1pbi4gVGhlbiwgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgLCB3aGljaCBzdWdnZXN0cyBtaWdyYXRpb24gY2FwYWJpbGl0aWVzIGFyZSBiZWluZyBpbmZsdWVuY2VkLCBhbmQgYGxydV9nZW5fbG9va19hcm91bmRgLCB3aGljaCBtYWtlcyBtZSBzdXNwZWN0IHNvbWUgc29ydCBvZiBMUlUtYmFzZWQgbG9vay1haGVhZCBvcHRpbWl6YXRpb24gaXMgaW52b2x2ZWQuXG5cbkZpbmFsbHksIEkgc2hvdWxkIGNoZWNrIHRoZSBmdW5jdGlvbnMgb3V0c2lkZSBvZiBzdGF0aWMsIGp1c3QgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBzaWduaWZpY2FudCBwdWJsaWMgaW50ZXJmYWNlIGNoYW5nZXMgdG8gY29uc2lkZXIuIEknbGwgZm9jdXMgb24gdGhlIGNoYW5nZXMgaW4gYG1tL2ZvbGlvLmNgIGFzIHRoZXkgc2VlbSBtb3N0IHRhcmdldGVkIHRvIHRoZXNlIGxvdy1sZXZlbCBwYWdlIHJlcHJlc2VudGF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkwNzAsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNTo0ODozNi41ODU1NTIyODZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODQ5Njg4NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHJ1X2dlbl9pbmNfcmVmc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21tem9uZS5oPTQyND1lbnVtIGxydXZlY19mbGFncyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTUwNi0gKiBGb3IgZm9saW9zIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycyxcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjUwNzogKiBscnVfZ2VuX2luY19yZWZzKCkgc2V0cyBhZGRpdGlvbmFsIGJpdHMgb2YgTFJVX1JFRlNfV0lEVEggaW4gZm9saW8tXFx1MDAzZWZsYWdzXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC01MDgtICogYWZ0ZXIgUEdfcmVmZXJlbmNlZCwgdGhlbiBQR193b3JraW5nc2V0IGFmdGVyIExSVV9SRUZTX1dJRFRILiBBZnRlciBhbGwgaXRzXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTUxMS0gKiBmb2xpb19pbmNfZ2VuKCkgZG9lcyB0aGF0LCBpdCBjbGVhcnMgTFJVX1JFRlNfRkxBR1Mgc28gdGhhdFxcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NTEyOiAqIGxydV9nZW5faW5jX3JlZnMoKSBjYW4gc3RhcnQgb3Zlci4gTm90ZSB0aGF0IGZvciB0aGlzIGNhc2UsIExSVV9SRUZTX01BU0sgaXNcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTUxMy0gKiBvbmx5IHZhbGlkIHdoZW4gUEdfcmVmZXJlbmNlZCBpcyBzZXQuXFxuLS1cXG5tbS9mb2xpby5jPTMyMj1zdGF0aWMgdm9pZCBfX2xydV9jYWNoZV9hY3RpdmF0ZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZm9saW8uYy0zNTMtXFxubW0vZm9saW8uYzozNTQ6c3RhdGljIHZvaWQgbHJ1X2dlbl9pbmNfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2ZvbGlvLmMtMzU1LXtcXG4tLVxcbm1tL2ZvbGlvLmM9MzgwPXN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZm9saW8uYy00MDAtXFxubW0vZm9saW8uYzo0MDE6c3RhdGljIHZvaWQgbHJ1X2dlbl9pbmNfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2ZvbGlvLmMtNDAyLXtcXG4tLVxcbm1tL2ZvbGlvLmM9NDI1PXZvaWQgZm9saW9fbWFya19hY2Nlc3NlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZm9saW8uYy00MjktXFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKSB7XFxubW0vZm9saW8uYzo0MzA6XFx0XFx0bHJ1X2dlbl9pbmNfcmVmcyhmb2xpbyk7XFxubW0vZm9saW8uYy00MzEtXFx0XFx0cmV0dXJuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNTo0ODozOC4xNzA1Mjk4ODhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAwNjgzMjA2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyb20gbXkgcGVyc3BlY3RpdmU6XG5cbioqVGhpbmtpbmcgVGhyb3VnaCBgbHJ1X2dlbl9pbmNfcmVmc2AgYW5kIFNjYW4gQ2hhbmdlcyoqXG5cbk9rYXksIHNvIGBscnVfZ2VuX2luY19yZWZzYCBpcyBzdGF0aWMuIFRoYXQgbWVhbnMgaXQncyBzY29wZWQgdG8gdGhlIGZpbGUgaXQncyBpbiwgd2hpY2ggSSdkIGV4cGVjdCBnaXZlbiBpdHMgcm9sZS4gTm93LCBsZXQgbWUgc2VlLi4uIHdoZXJlIGFyZSB0aGUgbW9zdCByZWxldmFudCBjaGFuZ2VzIGFyb3VuZCB0aGlzIGxpa2VseT8gRGVmaW5pdGVseSBuZWVkIHRvIGdvIG92ZXIgYG1tL3Ztc2Nhbi5jYC4gSXQncyB3aGVyZSB0aGUgY29yZSBWTSBzY2FubmluZyBsb2dpYyBsaXZlcywgc28gYW55IG1vZGlmaWNhdGlvbnMgdG8gaG93IHJlZmVyZW5jZSBjb3VudHMgYXJlIG1hbmFnZWQsIG9yIGhvdyBnZW5lcmF0aW9ucyBhcmUgaGFuZGxlZCwgd291bGQgbGlrZWx5IHNob3cgdXAgdGhlcmUuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCdzIGNoYW5nZWQgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyMDEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNTo0ODo0MS4xNzczNjQ5OTZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTMzMjY0MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9fdXBkYXRlX2dlblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTI4OD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbHJ1X2dlbl9mb2xpb19zZXEoY29uc3Qgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0yOTgtXFx0ICogfCBBY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzIGFuZCAgfCBBY2Nlc3NlZCB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMgfFxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6Mjk5OlxcdCAqIHwgcHJvbW90ZWQgYnkgZm9saW9fdXBkYXRlX2dlbigpICAgIHwgYW5kIHByb3RlY3RlZCBieSBmb2xpb19pbmNfZ2VuKCkgIHxcXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTMwMC1cXHQgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTQyND1lbnVtIGxydXZlY19mbGFncyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTUxNC0gKlxcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NTE1OiAqIEZvciBmb2xpb3MgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgdGhyb3VnaCBwYWdlIHRhYmxlcywgZm9saW9fdXBkYXRlX2dlbigpXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC01MTYtICogZnJvbSBhIHBhZ2UgdGFibGUgd2FsayBvciBscnVfZ2VuX3NldF9yZWZzKCkgZnJvbSBhIHJtYXAgd2FsayBzZXRzXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTUxOC0gKiBUaGVyZWFmdGVyLCB0aG9zZSB0d28gcGF0aHMgc2V0IFBHX3dvcmtpbmdzZXQgYW5kIHByb21vdGUgZm9saW9zIHRvIHRoZVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NTE5OiAqIHlvdW5nZXN0IGdlbmVyYXRpb24uIExpa2UgZm9saW9faW5jX2dlbigpLCBmb2xpb191cGRhdGVfZ2VuKCkgYWxzbyBjbGVhcnNcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTUyMC0gKiBQR19yZWZlcmVuY2VkLiBOb3RlIHRoYXQgZm9yIHRoaXMgY2FzZSwgTFJVX1JFRlNfTUFTSyBpcyBub3QgdXNlZC5cXG4tLVxcbm1tL3Ztc2Nhbi5jPTgyNz1lbnVtIGZvbGlvX3JlZmVyZW5jZXMge1xcbi0tXFxubW0vdm1zY2FuLmMtODM3LSAqIHdpdGggUEdfYWN0aXZlIHNldC4gSW4gY29udHJhc3QsIHRoZSBhZ2luZyAocGFnZSB0YWJsZSB3YWxrKSBwYXRoIHVzZXNcXG5tbS92bXNjYW4uYzo4Mzg6ICogZm9saW9fdXBkYXRlX2dlbigpLlxcbm1tL3Ztc2Nhbi5jLTgzOS0gKi9cXG4tLVxcbm1tL3Ztc2Nhbi5jPTMyNTY9c3RhdGljIGJvb2wgcG9zaXRpdmVfY3RybF9lcnIoc3RydWN0IGN0cmxfcG9zICpzcCwgc3RydWN0IGN0cmxfcG9zICpwdilcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMyNzEtLyogcHJvbW90ZSBwYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzICovXFxubW0vdm1zY2FuLmM6MzI3MjpzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGludCAqaXNfZmlsZSxcXG5tbS92bXNjYW4uYy0zMjczLVxcdFxcdFxcdCAgICBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbi0tXFxubW0vdm1zY2FuLmM9MzMwNz1zdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vdm1zY2FuLmMtMzMyMC1cXG5tbS92bXNjYW4uYzozMzIxOlxcdFxcdC8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqL1xcbm1tL3Ztc2Nhbi5jLTMzMjItXFx0XFx0aWYgKG9sZF9nZW4gIT0gbWluX2dlbilcXG4tLVxcbm1tL3Ztc2Nhbi5jPTM1MjQ9c3RhdGljIHZvaWQgd2Fsa191cGRhdGVfZm9saW8oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS92bXNjYW4uYy0zNTM5LVxcdGlmICh3YWxrKSB7XFxubW0vdm1zY2FuLmM6MzU0MDpcXHRcXHRvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgXFx1MDAyNmZpbGUsIFxcdTAwMjZ2bWEtXFx1MDAzZWZsYWdzKTtcXG5tbS92bXNjYW4uYy0zNTQxLVxcdFxcdGlmIChvbGRfZ2VuIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgb2xkX2dlbiAhPSBuZXdfZ2VuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNTo0ODo0Mi42NzA2OTY4NjFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY4MjI3OTYyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgUG90ZW50aWFsIEZvbGlvIFVwZGF0ZSBJbXBhY3RzKipcblxuT2theSwgc28gYGZvbGlvX3VwZGF0ZV9nZW5gIGlzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcywgcGFydGljdWxhcmx5IGluIHRoZSBjb250ZXh0IG9mIHJlY2VudCBtb2RpZmljYXRpb25zLiBMZXQncyBkaWcgaW50byB0aGF0LlxuXG5Ob3csIEknbGwgc2hpZnQgbXkgZm9jdXMgYW5kIHN0YXJ0IGludmVzdGlnYXRpbmcgdGhlIGNoYW5nZXMgaW4gYG1tL21pZ3JhdGUuY2AuIFRoaXMgZmlsZSBvZnRlbiBpbnRlcmFjdHMgaGVhdmlseSB3aXRoIGZvbGlvIG1hbmFnZW1lbnQsIGFuZCBpdCdzIGEgbGlrZWx5IHBvaW50IG9mIGltcGFjdCBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byB1cGRhdGluZyBmb2xpb3MuIEknbGwgY2FyZWZ1bGx5IHNjcnV0aW5pemUgdGhlIGRpZmZzIGluIHRoYXQgYXJlYS4gSSBzdXNwZWN0IHRoZXJlIG1heSBiZSBpbXBvcnRhbnQgY2x1ZXMgcmVsYXRlZCB0byB3aGF0IEknbSBjdXJyZW50bHkgbG9va2luZyBhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEyMDAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNTo0ODo0Ny4zNTI5NzkzODZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzQ5MjU3MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9fbWlncmF0ZV9yZWZzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbW1faW5saW5lLmg9MzUyPXN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcmVjbGFpbWluZylcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMzc0LS8qKlxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6Mzc1OiAqIGZvbGlvX21pZ3JhdGVfcmVmcyAtIGNvcHkgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBhIG5ldyBmb2xpb1xcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMzc2LSAqIEBuZXc6IHRoZSBkZXN0aW5hdGlvbiBmb2xpb1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0zODItICovXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDozODM6c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0zODQte1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD00MTA9c3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCByZWNsYWltaW5nKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC00MTQtXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDo0MTU6c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC00MTYte1xcbi0tXFxubW0vbWlncmF0ZS5jPTc3NT12b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL21pZ3JhdGUuYy04MDgtXFx0LyogQ29weSB0aGUgcmVmZXJlbmNlIHN0YXRlLCBpbmNsdWRpbmcgUEdfcmVmZXJlbmNlZCAqL1xcbm1tL21pZ3JhdGUuYzo4MDk6XFx0Zm9saW9fbWlncmF0ZV9yZWZzKG5ld2ZvbGlvLCBmb2xpbyk7XFxubW0vbWlncmF0ZS5jLTgxMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDU6NDg6NDguODI3OTEyOTgxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMzcyMDE4NDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBNR0xSVSBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGggdGhlIE11bHRpLUdlbiBMUlUgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSBob3cgd2UgbWFuYWdlIExSVSBnZW5lcmF0aW9uIGFuZCByZWZlcmVuY2UgZmxhZ3Mgd2l0aGluIHRoZSBgZm9saW8tXHUwMDNlZmxhZ3NgIHN0cnVjdHVyZS4gSXQgbG9va3MgbGlrZSBpdCdzIHNoaWZ0aW5nIGZyb20gZGlyZWN0IGJpdG1hc2sgbWFuaXB1bGF0aW9uIHRvIGEgc2V0IG9mIGhlbHBlciBmdW5jdGlvbnMsIGFuZCBhbHNvIG1vZGlmeWluZyBgbHJ1X3pvbmVfc2l6ZWAgaW4gYG1lbV9jZ3JvdXBfcGVyX25vZGVgIHRvIHVzZSBhbiBgYXRvbWljX2xvbmdfdGAuIFRoaXMgaW1wbGllcyBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYW5kIGNvcnJlY3RuZXNzIGltcGxpY2F0aW9ucywgcGFydGljdWxhcmx5IGFyb3VuZCBjb25jdXJyZW5jeS5cblxuU28sIHRoZSBrZXkgZnVuY3Rpb25zIEknbSBmb2N1c2luZyBvbiBhcmU6IGBtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZWAsIGBmb2xpb19taWdyYXRlX2ZsYWdzYCwgYW5kIGBscnVfZ2VuX2xvb2tfYXJvdW5kYC4gVGhlIGBmb2xpb19taWdyYXRlX3JlZnNgIGZ1bmN0aW9uIGlzIGBzdGF0aWMgaW5saW5lYCwgc28gSSBkb24ndCBuZWVkIHRvIGNvbnNpZGVyIGl0IGZ1cnRoZXIgYXQgdGhpcyBwb2ludC5cblxuSSBzdGFydGVkIGJ5IHZlcmlmeWluZyB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBpcyBkZWZpbml0ZWx5IGd1YXJkZWQgYnkgYENPTkZJR19MUlVfR0VOYCwgd2hpY2ggaXMgZXhwZWN0ZWQuICBgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVgIHJlcXVpcmVzIGBDT05GSUdfTUVNQ0dgLiBgZm9saW9fbWlncmF0ZV9mbGFnc2AgaXMgaW4gYG1tL21pZ3JhdGUuY2AsIHNvIEkgc2hvdWxkIGtlZXAgYW4gZXllIG9uIGhvdyBpdCB3b3Jrcy4gSSdtIGFsc28gY29uZmlybWluZyB3ZSBuZWVkIGBMUlVfR0VOYCwgYExSVV9HRU5fRU5BQkxFRGAsIGFuZCBgTUVNQ0dgIGVuYWJsZWQgZm9yIHRoaXMgcGF0Y2ggdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBJIGNoZWNrZWQgYExSVV9HRU5gJ3MgZGVwZW5kZW5jaWVzLCB3aGljaCBpbmNsdWRlIGBNTVVgIGFuZCB0aGUgNjQtYml0IG9yIHNwYXJzZSBtZW1vcnkgY29uZmlndXJhdGlvbnMuICBUaG9zZSBhcmVuJ3QgdGhpbmdzIEknbSB0b28gY29uY2VybmVkIGFib3V0IGFkZGluZywgYXMgdGhvc2UgYXJlIHVzdWFsbHkgZW5hYmxlZCBieSBkZWZhdWx0IGFueXdheS5cblxuSSBhbHNvIGNoZWNrZWQgdG8gc2VlIGlmIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB3ZXJlIG1vZGlmaWVkIGluIHRoaXMgcGF0Y2guICBgbWVtX2Nncm91cF9nZXRfem9uZV9scnVfc2l6ZWAgaXMgc3RhdGljIGlubGluZS4gYGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1YCwgYGxydV9nZW5fZnJvbV9mbGFnc2AsIGBscnVfZ2VuX3NldF9mbGFnc2AsIGBscnVfcmVmc19mcm9tX2ZsYWdzYCwgYGxydV9yZWZzX3NldF9mbGFnc2AsIGFuZCBgZm9saW9fc2V0X2xydV9yZWZzYCBhcmUgYWxzbyBzdGF0aWMgaW5saW5lLiBTbywgdGhlIGZvY3VzIHN5bWJvbHMgYXJlIHRoZSBjb3JyZWN0IG9uZXMuXG5cbkluIGVzc2VuY2UsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBjaGFuZ2VzIHRoYXQgYWx0ZXIgaG93IGZvbGlvcyBhcmUgdHJhY2tlZCBhbmQgYWdlZCBpbiB0aGUgTFJVIGxpc3RzLiBUaGUgaGVscGVyIGZ1bmN0aW9ucyByZXBsYWNlIGJpdG1hc2sgb3BlcmF0aW9ucywgd2hpY2ggaXMgZ29vZCwgYnV0IHRoZSBzd2l0Y2ggdG8gYGF0b21pY19sb25nX3RgIGluIGBtZW1fY2dyb3VwX3Blcl9ub2RlYCBpbnRyb2R1Y2VzIGF0b21pYyBvcGVyYXRpb25zLiBUaGlzLCBjb21iaW5lZCB3aXRoIHRoZSBmYWN0IHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBpbnZva2VkIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMg4oCTIGluY2x1ZGluZyBwYWdlIG1pZ3JhdGlvbiwgTFJVIHNpemUgdHJhY2tpbmcsIGFuZCBwYWdlIHRhYmxlIHNjYW5uaW5nIOKAkyBtYWtlcyB0aGVtIHByaW1lIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcuIFRoZXkgYXJlIGFsbCByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWxseSBhbHRlciBtZW1vcnkgbWFuYWdlbWVudCdzIGNvcmUgYmVoYXZpb3IuXG5cbkkndmUgY29uZmlybWVkIHRoZSBmb2N1cyBzeW1ib2xzIGFyZSB2YWxpZC4gYG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplYCBpc24ndCBgRVhQT1JUX1NZTUJPTGAnZCBidXQgaXQncyB1c2VkIGZyb20gYG1tL2ZvbGlvLmNgIGFuZCBgbW0vdm1zY2FuLmNgLiBgZm9saW9fbWlncmF0ZV9mbGFnc2AgaXMgZXhwb3J0ZWQsIGFuZCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgaXMgdXNlZCBpbiBgbW0vcm1hcC5jYC4gTG9va3MgZ29vZCB0byBtZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE3ODQsIk91dHB1dFRva2VucyI6MjEwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA1OjQ5OjAxLjE5OTkzNDA1MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MTQ0NjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemVcIixcbiAgICBcImZvbGlvX21pZ3JhdGVfZmxhZ3NcIixcbiAgICBcImxydV9nZW5fbG9va19hcm91bmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIGltcGxlbWVudGF0aW9uLCBjaGFuZ2luZyBob3cgTFJVIGdlbmVyYXRpb24gYW5kIHJlZmVyZW5jZSBmbGFncyBhcmUgc3RvcmVkIGluIGBmb2xpby1cXHUwMDNlZmxhZ3NgLiBJdCByZXBsYWNlcyBkaXJlY3QgYml0bWFzayBvcGVyYXRpb25zIHdpdGggbmV3IGhlbHBlciBmdW5jdGlvbnMgYW5kIGNoYW5nZXMgYGxydV96b25lX3NpemVgIGluIGBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZWAgdG8gdXNlIGBhdG9taWNfbG9uZ190YCBpbnN0ZWFkIG9mIGB1bnNpZ25lZCBsb25nYC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocywgaW5jbHVkaW5nIHBhZ2UgbWlncmF0aW9uLCBMUlUgc2l6ZSB0cmFja2luZywgYW5kIHBhZ2UgdGFibGUgc2Nhbm5pbmcuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbGx5IGFsdGVycyBob3cgZm9saW9zIGFyZSB0cmFja2VkIGFuZCBhZ2VkIGluIHRoZSBMUlUgbGlzdHMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1fY2dyb3VwX3VwZGF0ZV9scnVfc2l6ZVwiLFxuICAgIFwiZm9saW9fbWlncmF0ZV9mbGFnc1wiLFxuICAgIFwibHJ1X2dlbl9sb29rX2Fyb3VuZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgaW1wbGVtZW50YXRpb24sIGNoYW5naW5nIGhvdyBMUlUgZ2VuZXJhdGlvbiBhbmQgcmVmZXJlbmNlIGZsYWdzIGFyZSBzdG9yZWQgaW4gYGZvbGlvLVxcdTAwM2VmbGFnc2AuIEl0IHJlcGxhY2VzIGRpcmVjdCBiaXRtYXNrIG9wZXJhdGlvbnMgd2l0aCBuZXcgaGVscGVyIGZ1bmN0aW9ucyBhbmQgY2hhbmdlcyBgbHJ1X3pvbmVfc2l6ZWAgaW4gYHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlYCB0byB1c2UgYGF0b21pY19sb25nX3RgIGluc3RlYWQgb2YgYHVuc2lnbmVkIGxvbmdgLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzLCBpbmNsdWRpbmcgcGFnZSBtaWdyYXRpb24sIExSVSBzaXplIHRyYWNraW5nLCBhbmQgcGFnZSB0YWJsZSBzY2FubmluZy4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsbHkgYWx0ZXJzIGhvdyBmb2xpb3MgYXJlIHRyYWNrZWQgYW5kIGFnZWQgaW4gdGhlIExSVSBsaXN0cywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA1OjQ5OjAxLjI3OTA4NzA2OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg1OTg1MTg3MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNTo0OTowMS4yNzk1NjkwNzhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTg1OTgwMzIzMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgc3BlY2lmaWNhbGx5IGZvbGlvIExSVSBnZW5lcmF0aW9uIGZsYWdzIGFuZCByZWZlcmVuY2UgdHJhY2tpbmcsIGFuZCBjaGFuZ2VzIGEgY291bnRlciAoYGxydV96b25lX3NpemVgKSB0byBhbiBhdG9taWMgdmFyaWFibGUgdG8gZml4IGNvbmN1cnJlbmN5IGlzc3Vlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBtaWdodCBiZSBsZWZ0IHBhcnRpYWxseSB1bmluaXRpYWxpemVkLiBUaGUgbG9jYWwgdmFyaWFibGUgYGZpbGVgIGludHJvZHVjZWQgaW4gYHdhbGtfdXBkYXRlX2ZvbGlvYCBpcyBvbmx5IHVzZWQgd2hlbiBgZm9saW9fdXBkYXRlX2dlbmAgcmV0dXJucyBhIG5vbi1uZWdhdGl2ZSB2YWx1ZSwgd2hpY2ggZ3VhcmFudGVlcyBpdCBoYXMgYmVlbiBpbml0aWFsaXplZC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4YTkyNWQyNTQ2YzUzOGQ0YjNiMGRjMTc1NWNhYWM4OTQ5ODlkOWEwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMDU6NDc6MzkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5pbmRleCBlNzhiYzk4YWIyMjliLi5iMTNlM2YwNTYzMTk1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5AQCAtMTEzLDcgKzExMyw3IEBAIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlIHtcbiBcdC8qIEZpZWxkcyB3aGljaCBnZXQgdXBkYXRlZCBvZnRlbiBhdCB0aGUgZW5kLiAqL1xuIFx0c3RydWN0IGxydXZlY1x0XHRscnV2ZWM7XG4gXHRDQUNIRUxJTkVfUEFERElORyhfcGFkMl8pO1xuLVx0dW5zaWduZWQgbG9uZ1x0XHRscnVfem9uZV9zaXplW01BWF9OUl9aT05FU11bTlJfTFJVX0xJU1RTXTtcbitcdGF0b21pY19sb25nX3RcdFx0bHJ1X3pvbmVfc2l6ZVtNQVhfTlJfWk9ORVNdW05SX0xSVV9MSVNUU107XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cF9yZWNsYWltX2l0ZXJcdGl0ZXI7XG4gXG4gXHQvKlxuQEAgLTg5NywxMCArODk3LDE1IEBAIHN0YXRpYyBpbmxpbmVcbiB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X3pvbmVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRlbnVtIGxydV9saXN0IGxydSwgaW50IHpvbmVfaWR4KVxuIHtcbitcdGxvbmcgdmFsO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm16O1xuIFxuIFx0bXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcbi1cdHJldHVybiBSRUFEX09OQ0UobXotXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6b25lX2lkeF1bbHJ1XSk7XG4rXHR2YWwgPSBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm16LVx1MDAzZWxydV96b25lX3NpemVbem9uZV9pZHhdW2xydV0pO1xuK1x0aWYgKFdBUk5fT05fT05DRSh2YWwgXHUwMDNjIDApKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiB2YWw7XG4gfVxuIFxuIHZvaWQgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmggYi9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oXG5pbmRleCA2MjFjODY1M2Q4ZjdlLi40YmIzOTBkOTUxNmVmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxuQEAgLTEwLDYgKzEwLDExIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdXNlcmZhdWx0ZmRfay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGVhZm9wcy5oXHUwMDNlXG4gXG4rc3RhdGljIGlubGluZSBpbnQgZm9saW9fZmxhZ3NfaXNfZmlsZV9scnUoY29uc3QgdW5zaWduZWQgbG9uZyAqZmxhZ3MpXG4re1xuK1x0cmV0dXJuICF0ZXN0X2JpdChQR19zd2FwYmFja2VkLCBmbGFncyk7XG4rfVxuK1xuIC8qKlxuICAqIGZvbGlvX2lzX2ZpbGVfbHJ1IC0gU2hvdWxkIHRoZSBmb2xpbyBiZSBvbiBhIGZpbGUgTFJVIG9yIGFub24gTFJVP1xuICAqIEBmb2xpbzogVGhlIGZvbGlvIHRvIHRlc3QuXG5AQCAtMjcsNyArMzIsNyBAQFxuICAqL1xuIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2lzX2ZpbGVfbHJ1KGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0cmV0dXJuICFmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pO1xuK1x0cmV0dXJuIGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KGNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4gfVxuIFxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3VwZGF0ZV9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG5AQCAtMTQyLDEwICsxNDcsNDMgQEAgc3RhdGljIGlubGluZSBpbnQgbHJ1X3RpZXJfZnJvbV9yZWZzKGludCByZWZzLCBib29sIHdvcmtpbmdzZXQpXG4gXHRyZXR1cm4gd29ya2luZ3NldCA/IE1BWF9OUl9USUVSUyAtIDEgOiBvcmRlcl9iYXNlXzIocmVmcyk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4rLyoqXG4rICogbHJ1X2dlbl9mcm9tX2ZsYWdzIC0gUmV0dXJuIHRoZSBMUlUgZ2VuZXJhdGlvbiBudW1iZXIgZnJvbSBmb2xpbyBmbGFncy5cbisgKiBAZmxhZ3M6IGZvbGlvIGZsYWdzXG4rICpcbisgKiBSZXR1cm5zOiBBIG51bWJlciBiZXR3ZWVuIDAgYW5kIExSVV9HRU5fTUFYLCBpbmNsdXNpdmUuIFJldHVybnMgLTEgaWYgdGhlXG4rICogZmxhZ3MgaW5kaWNhdGUgdGhlIGZvbGlvIGlzIG9mZiB0aGUgbGlzdCAoZS5nLiwgaXNvbGF0ZWQpLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgaW50IGxydV9nZW5fZnJvbV9mbGFncyh1bnNpZ25lZCBsb25nIGZsYWdzKVxuK3tcbitcdGludCBnZW4gPSAoKGZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKTtcbitcbitcdEJVSUxEX0JVR19PTihMUlVfR0VOX01BU0sgXHUwMDI2IExSVV9SRUZTX01BU0spO1xuK1x0Z2VuIC09IDE7XG4rXHRWTV9XQVJOX09OX09OQ0UoZ2VuICE9IC0xIFx1MDAyNlx1MDAyNiBnZW4gXHUwMDNlIExSVV9HRU5fTUFYKTtcbitcdHJldHVybiBnZW47XG4rfVxuK1xuKy8qKlxuKyAqIGxydV9nZW5fc2V0X2ZsYWdzIC0gU2V0IHRoZSBMUlUgZ2VuZXJhdGlvbiBudW1iZXIgdG8gc3BlY2lmaWVkIGZvbGlvIGZsYWdzLlxuKyAqIEBmbGFnczogcG9pbnRlciB0byB0aGUgZm9saW8gZmxhZ3NcbisgKiBAZ2VuOiBnZW5lcmF0aW9uIG51bWJlciwgYmV0d2VlbiAwIGFuZCBMUlVfR0VOX01BWCwgaW5jbHVzaXZlLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX3NldF9mbGFncyh1bnNpZ25lZCBsb25nICpmbGFncywgaW50IGdlbilcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuK1x0Vk1fV0FSTl9PTl9PTkNFKGdlbiBcdTAwM2UgTFJVX0dFTl9NQVggfHwgZ2VuIFx1MDAzYyAwKTtcbitcdEJVSUxEX0JVR19PTigoTFJVX0dFTl9NQVggKyAxKSAhPSBNQVhfTlJfR0VOUyk7XG4rXG4rXHQqZmxhZ3MgXHUwMDI2PSB+TFJVX0dFTl9NQVNLO1xuK1x0KmZsYWdzIHw9IChnZW4gKyAxVUwpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGO1xuK31cbiBcbisvKipcbisgKiBscnVfcmVmc19mcm9tX2ZsYWdzIC0gUmV0dXJuIExSVSByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IGZyb20gZm9saW8gZmxhZ3MuXG4rICogQGZsYWdzOiBmb2xpbyBmbGFnc1xuKyAqL1xuK3N0YXRpYyBpbmxpbmUgaW50IGxydV9yZWZzX2Zyb21fZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncylcbit7XG4gXHRpZiAoIShmbGFncyBcdTAwMjYgQklUKFBHX3JlZmVyZW5jZWQpKSlcbiBcdFx0cmV0dXJuIDA7XG4gXHQvKlxuQEAgLTE1NSwxOCArMTkzLDQ3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9yZWZzKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRyZXR1cm4gKChmbGFncyBcdTAwMjYgTFJVX1JFRlNfTUFTSykgXHUwMDNlXHUwMDNlIExSVV9SRUZTX1BHT0ZGKSArIDE7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbisvKipcbisgKiBscnVfcmVmc19zZXRfZmxhZ3MgLSBTZXQgdGhlIExSVSByZWZlcmVuY2VkIC8gYWNjZXNzIGNvdW50IHRvIHNwZWNpZmllZCBmb2xpbyBmbGFncy5cbisgKiBAZmxhZ3M6IHBvaW50ZXIgdG8gdGhlIGZvbGlvIGZsYWdzXG4rICogQHJlZnM6IHJlZmVyZW5jZWQgLyBhY2Nlc3MgY291bnQgbnVtYmVyLCBiZXR3ZWVuIDAgYW5kIExSVV9SRUZTX01BWCwgaW5jbHVzaXZlLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfcmVmc19zZXRfZmxhZ3ModW5zaWduZWQgbG9uZyAqZmxhZ3MsIHVuc2lnbmVkIGludCByZWZzKVxuK3tcbitcdFZNX1dBUk5fT05fT05DRShyZWZzIFx1MDAzZSBMUlVfUkVGU19NQVgpO1xuK1x0QlVJTERfQlVHX09OKExSVV9SRUZTX01BWCAhPSAoTFJVX1JFRlNfTUFTSyBcdTAwM2VcdTAwM2UgTFJVX1JFRlNfUEdPRkYpICsgMSk7XG4rXG4rXHQqZmxhZ3MgXHUwMDI2PSB+TFJVX1JFRlNfRkxBR1M7XG4rXHRpZiAoIXJlZnMpXG4rXHRcdHJldHVybjtcbitcdCpmbGFncyB8PSAoQklUKFBHX3JlZmVyZW5jZWQpIHwgKChyZWZzIC0gMVVMKSBcdTAwM2NcdTAwM2MgTFJVX1JFRlNfUEdPRkYpKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgZm9saW9fbHJ1X3JlZnMoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRyZXR1cm4gbHJ1X3JlZnNfZnJvbV9mbGFncyhSRUFEX09OQ0UoKmNvbnN0X2ZvbGlvX2ZsYWdzKGZvbGlvLCAwKSkpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fc2V0X2xydV9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCByZWZzKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4rXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKCpmb2xpb19mbGFncyhmb2xpbywgMCkpO1xuIFxuLVx0cmV0dXJuICgoZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykgXHUwMDNlXHUwMDNlIExSVV9HRU5fUEdPRkYpIC0gMTtcbitcdGRvIHtcbitcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuK1x0XHRscnVfcmVmc19zZXRfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCByZWZzKTtcbitcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IGZvbGlvX2xydV9nZW4oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRyZXR1cm4gbHJ1X2dlbl9mcm9tX2ZsYWdzKFJFQURfT05DRSgqY29uc3RfZm9saW9fZmxhZ3MoZm9saW8sIDApKSk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2lzX2FjdGl2ZShjb25zdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBnZW4pXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBtYXhfc2VxID0gbHJ1dmVjLVx1MDAzZWxydWdlbi5tYXhfc2VxO1xuIFxuLVx0Vk1fV0FSTl9PTl9PTkNFKGdlbiBcdTAwM2U9IE1BWF9OUl9HRU5TKTtcbitcdFZNX1dBUk5fT05fT05DRShnZW4gXHUwMDNlIExSVV9HRU5fTUFYKTtcbiBcbiBcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBNSU5fTlJfR0VOUyAqL1xuIFx0cmV0dXJuIGdlbiA9PSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpIHx8IGdlbiA9PSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEgLSAxKTtcbkBAIC0yNzAsNyArMzM3LDcgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fYWRkX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdGdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTtcbiBcdGZsYWdzID0gKGdlbiArIDFVTCkgXHUwMDNjXHUwMDNjIExSVV9HRU5fUEdPRkY7XG4gXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUlOX05SX0dFTlMgYWJvdXQgUEdfYWN0aXZlICovXG4tXHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9HRU5fTUFTSyB8IEJJVChQR19hY3RpdmUpLCBmbGFncyk7XG4rXHRzZXRfbWFza19iaXRzKGZvbGlvX2ZsYWdzKGZvbGlvLCAwKSwgTFJVX0dFTl9NQVNLIHwgQklUKFBHX2FjdGl2ZSksIGZsYWdzKTtcbiBcbiBcdGxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgLTEsIGdlbik7XG4gXHQvKiBmb3IgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKCkgKi9cbkBAIC0yOTUsNyArMzYyLDcgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZGVsX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcbiBcdC8qIGZvciBmb2xpb19taWdyYXRlX2ZsYWdzKCkgKi9cbiBcdGZsYWdzID0gIXJlY2xhaW1pbmcgXHUwMDI2XHUwMDI2IGxydV9nZW5faXNfYWN0aXZlKGxydXZlYywgZ2VuKSA/IEJJVChQR19hY3RpdmUpIDogMDtcbi1cdGZsYWdzID0gc2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfR0VOX01BU0ssIGZsYWdzKTtcbitcdGZsYWdzID0gc2V0X21hc2tfYml0cyhmb2xpb19mbGFncyhmb2xpbywgMCksIExSVV9HRU5fTUFTSywgZmxhZ3MpO1xuIFx0Z2VuID0gKChmbGFncyBcdTAwMjYgTFJVX0dFTl9NQVNLKSBcdTAwM2VcdTAwM2UgTFJVX0dFTl9QR09GRikgLSAxO1xuIFxuIFx0bHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBnZW4sIC0xKTtcbkBAIC0zMDQsMTEgKzM3MSwxOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuKy8qKlxuKyAqIGZvbGlvX21pZ3JhdGVfcmVmcyAtIGNvcHkgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byBhIG5ldyBmb2xpb1xuKyAqIEBuZXc6IHRoZSBkZXN0aW5hdGlvbiBmb2xpb1xuKyAqIEBvbGQ6IHRoZSBzb3VyY2UgZm9saW9cbisgKlxuKyAqIFRyYW5zZmVyIHRoZSByZWZlcmVuY2Ugc3RhdGUgdG8gQG5ldyBkdXJpbmcgbWlncmF0aW9uOiB0aGUgTUdMUlVcbisgKiByZWZzIGNvdW50LCBpbmNsdWRpbmcgUEdfcmVmZXJlbmNlZCwgb3IganVzdCBQR19yZWZlcmVuY2VkIGZvciB0aGVcbisgKiBhY3RpdmUvaW5hY3RpdmUgTFJVLlxuKyAqL1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgcmVmcyA9IFJFQURfT05DRShvbGQtXHUwMDNlZmxhZ3MuZikgXHUwMDI2IExSVV9SRUZTX01BU0s7XG4tXG4tXHRzZXRfbWFza19iaXRzKFx1MDAyNm5ldy1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCByZWZzKTtcbitcdEJVSUxEX0JVR19PTihMUlVfUkVGU19NQVNLIFx1MDAyNiBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuK1x0Zm9saW9fc2V0X2xydV9yZWZzKG5ldywgZm9saW9fbHJ1X3JlZnMob2xkKSk7XG4gfVxuICNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xuIFxuQEAgLTMzOSw3ICs0MTQsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9kZWxfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxuIHtcbi1cbitcdGlmIChmb2xpb190ZXN0X3JlZmVyZW5jZWQob2xkKSlcbitcdFx0Zm9saW9fc2V0X3JlZmVyZW5jZWQobmV3KTtcbiB9XG4gI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbmluZGV4IDk0ZjljM2ZmNTQxNjAuLmQwYjVjNjIxN2QyNTcgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5AQCAtNDkyLDExICs0OTIsMTUgQEAgZW51bSBscnV2ZWNfZmxhZ3Mge1xuICAqIGZvbGlvLVx1MDAzZWZsYWdzLCBtYXNrZWQgYnkgTFJVX1JFRlNfTUFTSy5cbiAgKi9cbiAjZGVmaW5lIE1BWF9OUl9USUVSU1x0XHQ0VVxuKyNkZWZpbmUgTFJVX1RJRVJfTUlOXHRcdDBVXG4rI2RlZmluZSBMUlVfVElFUl9NQVhcdFx0KE1BWF9OUl9USUVSUyAtIDEpXG4gXG4gI2lmbmRlZiBfX0dFTkVSQVRJTkdfQk9VTkRTX0hcbiBcbiAjZGVmaW5lIExSVV9HRU5fTUFTS1x0XHQoKEJJVChMUlVfR0VOX1dJRFRIKSAtIDEpIFx1MDAzY1x1MDAzYyBMUlVfR0VOX1BHT0ZGKVxuKyNkZWZpbmUgTFJVX0dFTl9NQVhcdFx0KEJJVChMUlVfR0VOX1dJRFRIIC0gMSkgLSAxKVxuICNkZWZpbmUgTFJVX1JFRlNfTUFTS1x0XHQoKEJJVChMUlVfUkVGU19XSURUSCkgLSAxKSBcdTAwM2NcdTAwM2MgTFJVX1JFRlNfUEdPRkYpXG4rI2RlZmluZSBMUlVfUkVGU19NQVhcdFx0QklUKExSVV9SRUZTX1dJRFRIKVxuIFxuIC8qXG4gICogRm9yIGZvbGlvcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMsXG5kaWZmIC0tZ2l0IGEvbW0vZm9saW8uYyBiL21tL2ZvbGlvLmNcbmluZGV4IDU5YzQ3NzEyMGI5YTguLjBhZGZlNGY1ZWY3MmYgMTAwNjQ0XG4tLS0gYS9tbS9mb2xpby5jXG4rKysgYi9tbS9mb2xpby5jXG5AQCAtMzUzLDI2ICszNTMsMjggQEAgc3RhdGljIHZvaWQgX19scnVfY2FjaGVfYWN0aXZhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiBcbiBzdGF0aWMgdm9pZCBscnVfZ2VuX2luY19yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRShmb2xpby1cdTAwM2VmbGFncy5mKTtcbitcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4rXHRpbnQgcmVmcztcbiBcbiBcdGlmIChmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXG4tXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpIHtcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuK1x0aWYgKCFmb2xpb19scnVfcmVmcyhmb2xpbykpIHtcbitcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0ZG8ge1xuLVx0XHRpZiAoKG9sZF9mbGFncyBcdTAwMjYgTFJVX1JFRlNfTUFTSykgPT0gTFJVX1JFRlNfTUFTSykge1xuK1x0XHRuZXdfZmxhZ3MgPSBvbGRfZmxhZ3M7XG4rXHRcdHJlZnMgPSBscnVfcmVmc19mcm9tX2ZsYWdzKG9sZF9mbGFncyk7XG4rXHRcdGlmIChyZWZzID09IExSVV9SRUZTX01BWCkge1xuIFx0XHRcdGlmICghZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSlcbiBcdFx0XHRcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcbiBcdFx0XHRyZXR1cm47XG4gXHRcdH1cbi1cbi1cdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzICsgQklUKExSVV9SRUZTX1BHT0ZGKTtcbi1cdH0gd2hpbGUgKCF0cnlfY21weGNoZyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuK1x0XHRscnVfcmVmc19zZXRfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCByZWZzICsgMSk7XG4rXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbkBAIC0zODQsNyArMzg2LDggQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRpZiAoZ2VuIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MgfCBCSVQoUEdfd29ya2luZ3NldCksIDApO1xuK1x0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbitcdGZvbGlvX2NsZWFyX3dvcmtpbmdzZXQoZm9saW8pO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0c2VxID0gUkVBRF9PTkNFKGZvbGlvX2xydXZlYyhmb2xpbyktXHUwMDNlbHJ1Z2VuLm1pbl9zZXFbdHlwZV0pO1xuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggMWQzMzM5NTIwODA5Zi4uOWQwZWUzZDNiZGE3YyAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuKysrIGIvbW0vbWVtY29udHJvbC5jXG5AQCAtMTUyOSwyOCArMTUyOSwxMiBAQCB2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXG4gXHRcdFx0XHRpbnQgemlkLCBsb25nIG5yX3BhZ2VzKVxuIHtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICptejtcbi1cdHVuc2lnbmVkIGxvbmcgKmxydV9zaXplO1xuLVx0bG9uZyBzaXplO1xuIFxuIFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0bXogPSBjb250YWluZXJfb2YobHJ1dmVjLCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSwgbHJ1dmVjKTtcbi1cdGxydV9zaXplID0gXHUwMDI2bXotXHUwMDNlbHJ1X3pvbmVfc2l6ZVt6aWRdW2xydV07XG4tXG4tXHRpZiAobnJfcGFnZXMgXHUwMDNjIDApXG4tXHRcdCpscnVfc2l6ZSArPSBucl9wYWdlcztcbi1cbi1cdHNpemUgPSAqbHJ1X3NpemU7XG4tXHRpZiAoV0FSTl9PTkNFKHNpemUgXHUwMDNjIDAsXG4tXHRcdFwiJXMoJXAsICVkLCAlbGQpOiBscnVfc2l6ZSAlbGRcXG5cIixcbi1cdFx0X19mdW5jX18sIGxydXZlYywgbHJ1LCBucl9wYWdlcywgc2l6ZSkpIHtcbi1cdFx0Vk1fQlVHX09OKDEpO1xuLVx0XHQqbHJ1X3NpemUgPSAwO1xuLVx0fVxuLVxuLVx0aWYgKG5yX3BhZ2VzIFx1MDAzZSAwKVxuLVx0XHQqbHJ1X3NpemUgKz0gbnJfcGFnZXM7XG4rXHRhdG9taWNfbG9uZ19hZGQobnJfcGFnZXMsIFx1MDAyNm16LVx1MDAzZWxydV96b25lX3NpemVbemlkXVtscnVdKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jXG5pbmRleCAxNWI0NTgzMmJjZmE3Li44MjMwNzMzMjcxMWY0IDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZS5jXG4rKysgYi9tbS9taWdyYXRlLmNcbkBAIC03NzYsOCArNzc2LDYgQEAgdm9pZCBmb2xpb19taWdyYXRlX2ZsYWdzKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0aW50IGNwdXBpZDtcbiBcbi1cdGlmIChmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKVxuLVx0XHRmb2xpb19zZXRfcmVmZXJlbmNlZChuZXdmb2xpbyk7XG4gXHRpZiAoZm9saW9fdGVzdF91cHRvZGF0ZShmb2xpbykpXG4gXHRcdGZvbGlvX21hcmtfdXB0b2RhdGUobmV3Zm9saW8pO1xuIFx0aWYgKGZvbGlvX3Rlc3RfY2xlYXJfYWN0aXZlKGZvbGlvKSkge1xuQEAgLTgwNyw3ICs4MDUsOSBAQCB2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdGlmIChmb2xpb190ZXN0X2lkbGUoZm9saW8pKVxuIFx0XHRmb2xpb19zZXRfaWRsZShuZXdmb2xpbyk7XG4gXG4rXHQvKiBDb3B5IHRoZSByZWZlcmVuY2Ugc3RhdGUsIGluY2x1ZGluZyBQR19yZWZlcmVuY2VkICovXG4gXHRmb2xpb19taWdyYXRlX3JlZnMobmV3Zm9saW8sIGZvbGlvKTtcbitcbiBcdC8qXG4gXHQgKiBDb3B5IE5VTUEgaW5mb3JtYXRpb24gdG8gdGhlIG5ldyBwYWdlLCB0byBwcmV2ZW50IG92ZXItZWFnZXJcbiBcdCAqIGZ1dHVyZSBtaWdyYXRpb25zIG9mIHRoaXMgc2FtZSBwYWdlLlxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGMxNDA0YTU5NTIzZDYuLjdlM2FlMGM2Y2JhM2IgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC04NDMsMTkgKzg0MywyMiBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4gXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKSB7XG4gXHRcdC8qIEFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLiAqL1xuIFx0XHRpZiAoaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7XG4tXHRcdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTtcbitcdFx0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuK1x0XHRcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcbiBcdFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdFx0fVxuIFxuLVx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XG4rXHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMSk7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbiBcdC8qIFByb21vdGUgb24gc2Vjb25kIGFjY2VzcyAqL1xuLVx0aWYgKGZvbGlvX2xydV9yZWZzKGZvbGlvKSBcdTAwM2UgMSlcbi1cdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTtcbi1cdGVsc2VcbitcdGlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgXHUwMDNlIDEpIHtcbitcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbitcdFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xuK1x0fSBlbHNlIHtcbiBcdFx0Zm9saW9fbWFya19hY2Nlc3NlZChmb2xpbyk7XG4rXHR9XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gI2Vsc2VcbkBAIC0zMTk1LDggKzMxOTgsOCBAQCBzdHJ1Y3QgY3RybF9wb3Mge1xuIFx0aW50IGdhaW47XG4gfTtcbiBcbi1zdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2Fpbixcbi1cdFx0XHQgIHN0cnVjdCBjdHJsX3BvcyAqcG9zKVxuK3N0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRpZXJfbWluLFxuK1x0XHRcdCAgaW50IHRpZXJfbWF4LCBpbnQgZ2Fpbiwgc3RydWN0IGN0cmxfcG9zICpwb3MpXG4ge1xuIFx0aW50IGk7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbkBAIC0zMjA1LDcgKzMyMDgsNyBAQCBzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyLCBpbnQgZ2FpbixcbiBcdHBvcy1cdTAwM2VnYWluID0gZ2FpbjtcbiBcdHBvcy1cdTAwM2VyZWZhdWx0ZWQgPSBwb3MtXHUwMDNldG90YWwgPSAwO1xuIFxuLVx0Zm9yIChpID0gdGllciAlIE1BWF9OUl9USUVSUzsgaSBcdTAwM2M9IG1pbih0aWVyLCBNQVhfTlJfVElFUlMgLSAxKTsgaSsrKSB7XG4rXHRmb3IgKGkgPSB0aWVyX21pbjsgaSBcdTAwM2M9IHRpZXJfbWF4OyBpKyspIHtcbiBcdFx0cG9zLVx1MDAzZXJlZmF1bHRlZCArPSBscnVnZW4tXHUwMDNlYXZnX3JlZmF1bHRlZFt0eXBlXVtpXSArXG4gXHRcdFx0XHQgIGF0b21pY19sb25nX3JlYWQoXHUwMDI2bHJ1Z2VuLVx1MDAzZXJlZmF1bHRlZFtoaXN0XVt0eXBlXVtpXSk7XG4gXHRcdHBvcy1cdTAwM2V0b3RhbCArPSBscnVnZW4tXHUwMDNlYXZnX3RvdGFsW3R5cGVdW2ldICtcbkBAIC0zMjY2LDExICszMjY5LDExIEBAIHN0YXRpYyBib29sIHBvc2l0aXZlX2N0cmxfZXJyKHN0cnVjdCBjdHJsX3BvcyAqc3AsIHN0cnVjdCBjdHJsX3BvcyAqcHYpXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiBcbiAvKiBwcm9tb3RlIHBhZ2VzIGFjY2Vzc2VkIHRocm91Z2ggcGFnZSB0YWJsZXMgKi9cbi1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbitzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGludCAqaXNfZmlsZSxcbitcdFx0XHQgICAgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiB7XG4tXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuLVxuLVx0Vk1fV0FSTl9PTl9PTkNFKGdlbiBcdTAwM2U9IE1BWF9OUl9HRU5TKTtcbitcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoKmZvbGlvX2ZsYWdzKGZvbGlvLCAwKSk7XG4rXHRpbnQgb2xkX2dlbjtcbiBcbiBcdC8qXG4gXHQgKiBTZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MsIGFuZCBhY3RpdmF0ZSBmaWxlLWJhY2tlZFxuQEAgLTMyNzksMjAgKzMyODIsMjUgQEAgc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFcbiBcdCAqL1xuIFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7XG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcbitcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAxKTtcbiBcdFx0cmV0dXJuIC0xO1xuIFx0fVxuIFxuIFx0ZG8ge1xuK1x0XHRvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX2ZsYWdzKG9sZF9mbGFncyk7XG4rXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncztcbitcbiBcdFx0LyogbHJ1X2dlbl9kZWxfZm9saW8oKSBoYXMgaXNvbGF0ZWQgdGhpcyBwYWdlPyAqL1xuLVx0XHRpZiAoIShvbGRfZmxhZ3MgXHUwMDI2IExSVV9HRU5fTUFTSykpXG4tXHRcdFx0cmV0dXJuIC0xO1xuK1x0XHRpZiAob2xkX2dlbiBcdTAwM2MgMClcbitcdFx0XHRicmVhaztcbiBcbi1cdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzIFx1MDAyNiB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTtcbi1cdFx0bmV3X2ZsYWdzIHw9ICgoZ2VuICsgMVVMKSBcdTAwM2NcdTAwM2MgTFJVX0dFTl9QR09GRikgfCBCSVQoUEdfd29ya2luZ3NldCk7XG4tXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbitcdFx0bHJ1X2dlbl9zZXRfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCBuZXdfZ2VuKTtcbitcdFx0bHJ1X3JlZnNfc2V0X2ZsYWdzKFx1MDAyNm5ld19mbGFncywgMCk7XG4rXHRcdG5ld19mbGFncyB8PSBCSVQoUEdfd29ya2luZ3NldCk7XG4rXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoZm9saW9fZmxhZ3MoZm9saW8sIDApLCBcdTAwMjZvbGRfZmxhZ3MsIG5ld19mbGFncykpO1xuIFxuLVx0cmV0dXJuICgob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4rXHQqaXNfZmlsZSA9IGZvbGlvX2ZsYWdzX2lzX2ZpbGVfbHJ1KFx1MDAyNm9sZF9mbGFncyk7XG4rXHRyZXR1cm4gb2xkX2dlbjtcbiB9XG4gXG4gLyogcHJvdGVjdCBwYWdlcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMgKi9cbkBAIC0zMzAwLDIyICszMzA4LDI1IEBAIHN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbi1cdGludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tXHUwMDNlbWluX3NlcVt0eXBlXSk7XG4tXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVx1MDAzZWZsYWdzLmYpO1xuLVxuLVx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCEob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spLCBmb2xpbyk7XG4rXHRpbnQgbmV3X2dlbiwgb2xkX2dlbiwgbWluX2dlbiA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLVx1MDAzZW1pbl9zZXFbdHlwZV0pO1xuK1x0dW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIG9sZF9mbGFncyA9IFJFQURfT05DRSgqZm9saW9fZmxhZ3MoZm9saW8sIDApKTtcbiBcbiBcdGRvIHtcbi1cdFx0bmV3X2dlbiA9ICgob2xkX2ZsYWdzIFx1MDAyNiBMUlVfR0VOX01BU0spIFx1MDAzZVx1MDAzZSBMUlVfR0VOX1BHT0ZGKSAtIDE7XG4tXHRcdC8qIGZvbGlvX3VwZGF0ZV9nZW4oKSBoYXMgcHJvbW90ZWQgdGhpcyBwYWdlPyAqL1xuLVx0XHRpZiAobmV3X2dlbiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG5ld19nZW4gIT0gb2xkX2dlbilcbi1cdFx0XHRyZXR1cm4gbmV3X2dlbjtcbitcdFx0b2xkX2dlbiA9IGxydV9nZW5fZnJvbV9mbGFncyhvbGRfZmxhZ3MpO1xuK1x0XHQvKiBUaGlzIGhlbHBlciBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIGZvciBvZmYtbGlzdCBmb2xpb3MgKi9cbitcdFx0Vk1fV0FSTl9PTl9PTkNFKG9sZF9nZW4gXHUwMDNjIDApO1xuK1x0XHRpZiAob2xkX2dlbiBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gbWluX2dlbjtcbiBcbi1cdFx0bmV3X2dlbiA9IChvbGRfZ2VuICsgMSkgJSBNQVhfTlJfR0VOUztcbitcdFx0LyogZm9saW9fdXBkYXRlX2dlbigpIGhhcyBwcm9tb3RlZCB0aGlzIHBhZ2U/ICovXG4rXHRcdGlmIChvbGRfZ2VuICE9IG1pbl9nZW4pXG4rXHRcdFx0cmV0dXJuIG9sZF9nZW47XG4gXG4tXHRcdG5ld19mbGFncyA9IG9sZF9mbGFncyBcdTAwMjYgfihMUlVfR0VOX01BU0sgfCBMUlVfUkVGU19GTEFHUyk7XG4tXHRcdG5ld19mbGFncyB8PSAobmV3X2dlbiArIDFVTCkgXHUwMDNjXHUwMDNjIExSVV9HRU5fUEdPRkY7XG4tXHR9IHdoaWxlICghdHJ5X2NtcHhjaGcoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgXHUwMDI2b2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTtcbitcdFx0bmV3X2ZsYWdzID0gb2xkX2ZsYWdzO1xuK1x0XHRuZXdfZ2VuID0gKG1pbl9nZW4gKyAxKSAlIE1BWF9OUl9HRU5TO1xuK1x0XHRscnVfZ2VuX3NldF9mbGFncyhcdTAwMjZuZXdfZmxhZ3MsIG5ld19nZW4pO1xuK1x0XHRscnVfcmVmc19zZXRfZmxhZ3MoXHUwMDI2bmV3X2ZsYWdzLCAwKTtcbitcdH0gd2hpbGUgKCF0cnlfY21weGNoZyhmb2xpb19mbGFncyhmb2xpbywgMCksIFx1MDAyNm9sZF9mbGFncywgbmV3X2ZsYWdzKSk7XG4gXG4gXHRscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xuIFxuQEAgLTMzMjMsOSArMzMzNCw4IEBAIHN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gfVxuIFxuIHN0YXRpYyB2b2lkIHVwZGF0ZV9iYXRjaF9zaXplKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tXHRcdFx0ICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuKVxuK1x0XHRcdCAgICAgIGludCBvbGRfZ2VuLCBpbnQgbmV3X2dlbiwgaW50IHR5cGUpXG4ge1xuLVx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG4gXHRpbnQgem9uZSA9IGZvbGlvX3pvbmVudW0oZm9saW8pO1xuIFx0aW50IGRlbHRhID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIFxuQEAgLTM1MTIsMjIgKzM1MjIsMjQgQEAgc3RhdGljIGJvb2wgc3VpdGFibGVfdG9fc2NhbihpbnQgdG90YWwsIGludCB5b3VuZylcbiB9XG4gXG4gc3RhdGljIHZvaWQgd2Fsa191cGRhdGVfZm9saW8oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBib29sIGRpcnR5KVxuK1x0XHRcdCAgICAgIHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBkaXJ0eSlcbiB7XG4tXHRpbnQgb2xkX2dlbjtcbitcdGludCBuZXdfZ2VuLCBvbGRfZ2VuLCBmaWxlO1xuIFxuIFx0aWYgKCFmb2xpbylcbiBcdFx0cmV0dXJuO1xuIFxuK1x0bmV3X2dlbiA9IGxydV9nZW5fZnJvbV9zZXEoUkVBRF9PTkNFKGxydXZlYy1cdTAwM2VscnVnZW4ubWF4X3NlcSkpO1xuK1xuIFx0aWYgKGRpcnR5IFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgXHUwMDI2XHUwMDI2XG4gXHQgICAgIShmb2xpb190ZXN0X2Fub24oZm9saW8pIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X3N3YXBiYWNrZWQoZm9saW8pIFx1MDAyNlx1MDAyNlxuIFx0ICAgICAgIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkpXG4gXHRcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuIFxuIFx0aWYgKHdhbGspIHtcbi1cdFx0b2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sIFx1MDAyNnZtYS1cdTAwM2VmbGFncyk7XG4rXHRcdG9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuLCBcdTAwMjZmaWxlLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpO1xuIFx0XHRpZiAob2xkX2dlbiBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IG9sZF9nZW4gIT0gbmV3X2dlbilcbi1cdFx0XHR1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7XG4rXHRcdFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4sIGZpbGUpO1xuIFx0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpKSB7XG4gXHRcdG9sZF9nZW4gPSBmb2xpb19scnVfZ2VuKGZvbGlvKTtcbiBcdFx0aWYgKG9sZF9nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXG5AQCAtMzU0OSw4ICszNTYxLDYgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy1cdTAwM2Vwcml2YXRlO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKHdhbGstXHUwMDNlbHJ1dmVjKTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQod2Fsay1cdTAwM2VscnV2ZWMpO1xuLVx0REVGSU5FX01BWF9TRVEod2Fsay1cdTAwM2VscnV2ZWMpO1xuLVx0aW50IGdlbiA9IGxydV9nZW5fZnJvbV9zZXEobWF4X3NlcSk7XG4gXHR1bnNpZ25lZCBpbnQgbnI7XG4gXHRwbWRfdCBwbWR2YWw7XG4gXG5AQCAtMzYwMSw3ICszNjExLDcgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChsYXN0ICE9IGZvbGlvKSB7XG4tXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCB3YWxrLVx1MDAzZWxydXZlYywgbGFzdCwgZGlydHkpO1xuIFxuIFx0XHRcdGxhc3QgPSBmb2xpbztcbiBcdFx0XHRkaXJ0eSA9IGZhbHNlO1xuQEAgLTM2MTQsNyArMzYyNCw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHR3YWxrLVx1MDAzZW1tX3N0YXRzW01NX0xFQUZfWU9VTkddICs9IG5yO1xuIFx0fVxuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIHdhbGstXHUwMDNlbHJ1dmVjLCBsYXN0LCBkaXJ0eSk7XG4gXHRsYXN0ID0gTlVMTDtcbiBcbiBcdGlmIChpIFx1MDAzYyBQVFJTX1BFUl9QVEUgXHUwMDI2XHUwMDI2IGdldF9uZXh0X3ZtYShQTURfTUFTSywgUEFHRV9TSVpFLCBhcmdzLCBcdTAwMjZzdGFydCwgXHUwMDI2ZW5kKSlcbkBAIC0zNjM3LDggKzM2NDcsNiBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtXHUwMDNlcHJpdmF0ZTtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLVx1MDAzZWxydXZlYyk7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdERFRklORV9NQVhfU0VRKHdhbGstXHUwMDNlbHJ1dmVjKTtcbi1cdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFKHB1ZF9sZWFmKCpwdWQpKTtcbiBcbkBAIC0zNjkyLDcgKzM3MDAsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0XHRcdGdvdG8gbmV4dDtcbiBcbiBcdFx0aWYgKGxhc3QgIT0gZm9saW8pIHtcbi1cdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC0zNzA2LDcgKzM3MTQsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0XHRpID0gaSBcdTAwM2UgTUlOX0xSVV9CQVRDSCA/IDAgOiBmaW5kX25leHRfYml0KGJpdG1hcCwgTUlOX0xSVV9CQVRDSCwgaSkgKyAxO1xuIFx0fSB3aGlsZSAoaSBcdTAwM2M9IE1JTl9MUlVfQkFUQ0gpO1xuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgd2Fsay1cdTAwM2VscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xuIFx0c3Bpbl91bmxvY2socHRsKTtcbkBAIC00MjcwLDggKzQyNzgsNiBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gZm9saW9fcGdkYXQoZm9saW8pO1xuIFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xuIFx0c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlO1xuLVx0dW5zaWduZWQgbG9uZyBtYXhfc2VxO1xuLVx0aW50IGdlbjtcbiBcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQocHZtdy1cdTAwM2VwdGwpO1xuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSwgZm9saW8pO1xuQEAgLTQzMDgsOCArNDMxNCw2IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcbiBcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XG4gXHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpO1xuLVx0bWF4X3NlcSA9IFJFQURfT05DRSgobHJ1dmVjKS1cdTAwM2VscnVnZW4ubWF4X3NlcSk7XG4tXHRnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1heF9zZXEpO1xuIFx0bW1fc3RhdGUgPSBnZXRfbW1fc3RhdGUobHJ1dmVjKTtcbiBcbiBcdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XG5AQCAtNDM0MSw3ICs0MzQ1LDcgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAobGFzdCAhPSBmb2xpbykge1xuLVx0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4rXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC00MzUzLDEzICs0MzU3LDE0IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdFx0eW91bmcgKz0gbnI7XG4gXHR9XG4gXG4tXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBscnV2ZWMsIGxhc3QsIGRpcnR5KTtcbiBcbiBcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xuIFxuIFx0LyogZmVlZGJhY2sgZnJvbSBybWFwIHdhbGtlcnMgdG8gcGFnZSB0YWJsZSB3YWxrZXJzICovXG4gXHRpZiAobW1fc3RhdGUgXHUwMDI2XHUwMDI2IHN1aXRhYmxlX3RvX3NjYW4oaSwgeW91bmcpKVxuLVx0XHR1cGRhdGVfYmxvb21fZmlsdGVyKG1tX3N0YXRlLCBtYXhfc2VxLCBwdm13LVx1MDAzZXBtZCk7XG4rXHRcdHVwZGF0ZV9ibG9vbV9maWx0ZXIobW1fc3RhdGUsIFJFQURfT05DRShscnV2ZWMtXHUwMDNlbHJ1Z2VuLm1heF9zZXEpLFxuK1x0XHRcdFx0ICAgIHB2bXctXHUwMDNlcG1kKTtcbiBcbiBcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiBcbkBAIC00NzExLDcgKzQ3MTYsNyBAQCBzdGF0aWMgYm9vbCBpc29sYXRlX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYVxuIFxuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXG4gXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpXG4tXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgMCk7XG4rXHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4gXG4gXHRzdWNjZXNzID0gbHJ1X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7XG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIXN1Y2Nlc3MsIGZvbGlvKTtcbkBAIC00ODA0LDkgKzQ4MDksOSBAQCBzdGF0aWMgaW50IGdldF90aWVyX2lkeChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKVxuIFx0ICogVGhpcyB2YWx1ZSBpcyBjaG9zZW4gYmVjYXVzZSBhbnkgb3RoZXIgdGllciB3b3VsZCBoYXZlIGF0IGxlYXN0IHR3aWNlXG4gXHQgKiBhcyBtYW55IHJlZmF1bHRzIGFzIHRoZSBmaXJzdCB0aWVyLlxuIFx0ICovXG4tXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgMCwgMiwgXHUwMDI2c3ApO1xuLVx0Zm9yICh0aWVyID0gMTsgdGllciBcdTAwM2MgTUFYX05SX1RJRVJTOyB0aWVyKyspIHtcbi1cdFx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIDMsIFx1MDAyNnB2KTtcbitcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01JTiwgMiwgXHUwMDI2c3ApO1xuK1x0Zm9yICh0aWVyID0gTFJVX1RJRVJfTUlOICsgMTsgdGllciBcdTAwM2M9IExSVV9USUVSX01BWDsgdGllcisrKSB7XG4rXHRcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0aWVyLCB0aWVyLCAzLCBcdTAwMjZwdik7XG4gXHRcdGlmICghcG9zaXRpdmVfY3RybF9lcnIoXHUwMDI2c3AsIFx1MDAyNnB2KSlcbiBcdFx0XHRicmVhaztcbiBcdH1cbkBAIC00ODI3LDggKzQ4MzIsMTAgQEAgc3RhdGljIGludCBnZXRfdHlwZV90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXG4gXHQgKiBDb21wYXJlIHRoZSBzdW0gb2YgYWxsIHRpZXJzIG9mIGFub24gd2l0aCB0aGF0IG9mIGZpbGUgdG8gZGV0ZXJtaW5lXG4gXHQgKiB3aGljaCB0eXBlIHRvIHNjYW4uXG4gXHQgKi9cbi1cdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIE1BWF9OUl9USUVSUywgc3dhcHBpbmVzcywgXHUwMDI2c3ApO1xuLVx0cmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fRklMRSwgTUFYX05SX1RJRVJTLCBNQVhfU1dBUFBJTkVTUyAtIHN3YXBwaW5lc3MsIFx1MDAyNnB2KTtcbitcdHJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0FOT04sIExSVV9USUVSX01JTiwgTFJVX1RJRVJfTUFYLFxuK1x0XHQgICAgICBzd2FwcGluZXNzLCBcdTAwMjZzcCk7XG4rXHRyZWFkX2N0cmxfcG9zKGxydXZlYywgTFJVX0dFTl9GSUxFLCBMUlVfVElFUl9NSU4sIExSVV9USUVSX01BWCxcbitcdFx0ICAgICAgTUFYX1NXQVBQSU5FU1MgLSBzd2FwcGluZXNzLCBcdTAwMjZwdik7XG4gXG4gXHRyZXR1cm4gcG9zaXRpdmVfY3RybF9lcnIoXHUwMDI2c3AsIFx1MDAyNnB2KTtcbiB9XG5AQCAtNDkyNyw4ICs0OTM0LDEwIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHR9XG4gXG4gXHRcdC8qIGRvbid0IGFkZCByZWplY3RlZCBmb2xpb3MgdG8gdGhlIG9sZGVzdCBnZW5lcmF0aW9uICovXG4tXHRcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSlcbi1cdFx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfYWN0aXZlKSk7XG4rXHRcdGlmIChscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSkge1xuK1x0XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4rXHRcdFx0Zm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdG1vdmVfZm9saW9zX3RvX2xydShcdTAwMjZsaXN0KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA1OjQ5OjAxLjI3OTU2OTg2OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODU5Nzk5OTY4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBOb3QgTmVlZGVkOiBBIERlZXAgRGl2ZSBpbnRvIE1lbW9yeSBNYW5hZ2VtZW50IFJlZmFjdG9yaW5nKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYW5hbHl6ZSB0aGVzZSBjaGFuZ2VzIGZyb20gYSBtZW1vcnkgc2FmZXR5IHBlcnNwZWN0aXZlLCBhbmQgc3BlY2lmaWNhbGx5IGlmIEtNU0FOIGlzICpuZWVkZWQqIGhlcmUuXG5cbkZpcnN0LCBJIHNlZSB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgZm9jdXNlZCBvbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBwYXJ0aWN1bGFybHkgdGhlIExSVSBnZW5lcmF0aW9uIGFuZCByZWZlcmVuY2UgdHJhY2tpbmcuIFRoaXMgaW52b2x2ZXMgY2hhbmdlcyBhY3Jvc3Mgc2V2ZXJhbCBmaWxlcywgZm9jdXNpbmcgb24gYHN0cnVjdCBmb2xpb2AgYW5kIExSVS1yZWxhdGVkIGZsYWdzLlxuXG5UaGUga2V5IGNoYW5nZXMganVtcCBvdXQ6IGBscnVfem9uZV9zaXplYCBpbiBgbWVtX2Nncm91cF9wZXJfbm9kZWAgZ29pbmcgZnJvbSBgdW5zaWduZWQgbG9uZ2AgdG8gYGF0b21pY19sb25nX3RgIOKAkyBzb3VuZHMgbGlrZSBhIGNvbmN1cnJlbmN5IGltcHJvdmVtZW50LCBsaWtlbHkgdGhyZWFkLXNhZmUgbm93LiBTZWNvbmQsIG1vdmluZyBMUlUgZ2VuZXJhdGlvbi9yZWZlcmVuY2UgdHJhY2tpbmcgZnJvbSBkaXJlY3QgYml0IG1hbmlwdWxhdGlvbiBvZiBgZm9saW8tXHUwMDNlZmxhZ3NgIHRvIGhlbHBlciBmdW5jdGlvbnMg4oCTIGEgZGVmaW5pdGUgcmVmYWN0b3JpbmcgdG8gaW1wcm92ZSByZWFkYWJpbGl0eSBhbmQgcG90ZW50aWFsbHkgaXNvbGF0ZSB0aGUgZmxhZyBhY2Nlc3MuIFRoZW4sIHVwZGF0ZXMgdG8gZnVuY3Rpb25zIHN1Y2ggYXMgYGZvbGlvX21pZ3JhdGVfcmVmc2AsIGByZWFkX2N0cmxfcG9zYCwgYGZvbGlvX3VwZGF0ZV9nZW5gLCBhbmQgYHdhbGtfdXBkYXRlX2ZvbGlvYCB0byBhbGlnbiB3aXRoIHRoZSBuZXcgaGVscGVycy5cblxuTm93LCBteSBwcmltYXJ5IGNvbmNlcm4gd2l0aCBhIHBhdGNoIGxpa2UgdGhpcyBpcyB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2UuIFRoZSBxdWVzdGlvbiBJIGltbWVkaWF0ZWx5IGFzayBpczogZG8gdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgYSB2dWxuZXJhYmlsaXR5IHdoZXJlIHNvbWUgcHJldmlvdXNseSB1bml0aWFsaXplZCBtZW1vcnkgaXMgbm93IHVzZWQgaW4gY29udHJvbCBmbG93LCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZT8gSSBuZWVkIHRvIGFuYWx5emUgdGhpcyBmcm9tIHRoZSBzdGFuZHBvaW50IG9mIHN0cnVjdHVyZXMgYmVpbmcgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBuZXcgYWxsb2NhdGlvbnMsIGFuZCB3aGVyZSB1bmluaXRpYWxpemVkIGRhdGEgaXMgbm93IHJlYWQuXG5cbkluaXRpYWxseSwgaXQgZG9lc24ndCAqc2VlbSogbGlrZSB0aGVyZSBhcmUgYW55IG9idmlvdXMgcmVkIGZsYWdzLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlLCBub3RoaW5nIHNlZW1zIHRvIGJlIGFsbG9jYXRlZCB3aXRob3V0IGluaXRpYWxpemF0aW9uLiBJIGNhbiBzZWUgbm8gbmV3IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFuZCBubyBjaGFuZ2VzIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgcGF0Y2ggcHJpbWFyaWx5IG1hbmlwdWxhdGVzIGZsYWdzLCBMUlUgc3RhdGlzdGljcywgYW5kIHVwZGF0ZXMgYSBjb3VudGVyLiBUaGF0LCBvbiBpdHMgb3duLCBzZWVtcyB0byByZWR1Y2UgdGhlIHByb2JhYmlsaXR5IG9mIGludHJvZHVjaW5nIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLlxuXG5MZXQncyBkb3VibGUtY2hlY2suIEknbGwgbWV0aWN1bG91c2x5IGdvIHRocm91Z2ggdGhlIGNvZGUsIGZvY3VzaW5nIG9uIGFyZWFzIHdoZXJlIHZhbHVlcyBhcmUgc2V0IGFuZCB1c2VkLiBTcGVjaWZpY2FsbHksIEknbGwgcGF5IGF0dGVudGlvbiB0byBgZm9saW9fdXBkYXRlX2dlbmAgYW5kIGB3YWxrX3VwZGF0ZV9mb2xpb2AuIEluIGBmb2xpb191cGRhdGVfZ2VuYCwgaXQgKmxvb2tzKiBsaWtlIGAqaXNfZmlsZWAgbWlnaHQgYmUgdW5pbml0aWFsaXplZCBpZiB0aGUgZWFybHkgcmV0dXJuIGlzIHRha2VuLiBCdXQgd2FpdCwgYCppc19maWxlYCBpcyBzZXQgKmJlZm9yZSogdGhlIGZ1bmN0aW9uIHJldHVybnMsIGV2ZW4gYWZ0ZXIgYSBmYXN0IHBhdGguIFNvLCBgaXNfZmlsZWAgaXMgdXNlZCBpbiBgd2Fsa191cGRhdGVfZm9saW9gIGFzIGFuIG91dHB1dC4gSG93ZXZlciwgdXBvbiBjbG9zZXIgaW5zcGVjdGlvbiwgSSBzZWUgdGhhdCB0aGUgcmV0dXJuIHZhbHVlIG9mIGBmb2xpb191cGRhdGVfZ2VuYCBpcyBjaGVja2VkLiBJZiBpdCAqaXMqIHRoZSBmYXN0IHBhdGgsIHRoZW4gYHVwZGF0ZV9iYXRjaF9zaXplYCBpc24ndCBldmVuIGNhbGxlZCwgbWVhbmluZyBgZmlsZWAgaXMgbmV2ZXIgdXNlZC4gU28gZXZlbiAqdGhhdCogc2VlbWluZ2x5IHBvdGVudGlhbCBpc3N1ZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHByb2JsZW0uIFRoaXMgaXMgZ29vZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZC5cblxuV2hhdCBhYm91dCBgbHJ1X3pvbmVfc2l6ZWA/IEkgcmVjYWxsIHRoYXQgaXQncyBwYXJ0IG9mIGEgYG1lbV9jZ3JvdXBfcGVyX25vZGVgLCB3aGljaCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfbm9kZWAuIFRoYXTigJlzIHplcm8taW5pdGlhbGl6ZWQuIEV4Y2VsbGVudC5cblxuTm93LCBsZXQncyB6b29tIG91dCBhZ2Fpbi4gSXMgdGhlcmUgKmFueSogb3RoZXIgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzayBJJ20gbWlzc2luZz8gSSB0aGluayBJJ3ZlIGNvdmVyZWQgdGhlIGNyaXRpY2FsIHBhcnRzLiBJIHNlZSBubyBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vdGhpbmcgYWxsb2NhdGVkIHRoYXQgKmlzbid0KiBpbml0aWFsaXplZCwgYW5kIGFsbCBsb2NhbCB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBwYXRjaCBhcHBlYXJzIHRvIGJlIHB1cmUgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMsIHJlZmFjdG9yaW5nIGFuZCBpbXByb3Zpbmcgc29tZSBmbGFnIGhhbmRsaW5nIGFuZCBmaXhpbmcgYSBjb25jdXJyZW5jeSBpc3N1ZS5cblxuU28sIHRoZSBjb25jbHVzaW9uIGlzOiBLTVNBTiBpc24ndCBuZWVkZWQgaGVyZS4gU3RhbmRhcmQgbWVtb3J5IHNhZmV0eSB0b29scyBsaWtlIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIHNob3VsZCBiZSBzdWZmaWNpZW50LiBLTVNBTiBpcyBmb3IgY2F0Y2hpbmcgKnVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzKiwgYW5kIHRoZXJlIGFyZSBub25lIGluIHRoaXMgcGF0Y2guXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQncyBhcHBseSB0aGUgS01TQU4gdGVzdCBhZ2FpbjpcblxuMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZT8gTm9uZS5cbjIuICBDb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUuIGBmaWxlYCBpbiBgd2Fsa191cGRhdGVfZm9saW9gIGlzIHNhZmUuXG4zLiAgQWxsb2NhdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcz8gTm9uZS5cbjQuICBCb3VuZHMgY2hlY2tzIGNoYW5nZXM/IE5vbmUuXG5cblNvLCBteSBmaW5hbCB2ZXJkaWN0IGlzOiAqKk5lZWRzS01TQU4gPSBmYWxzZS4qKiBUaGUgcGF0Y2ggcmVmYWN0b3JzIGZsYWcgbWFuaXB1bGF0aW9uIGFuZCBhbiBhdG9taWMgdmFyaWFibGUgdXBkYXRlLiBTdGFuZGFyZCB0b29scyB3aWxsIGNhdGNoIGFueSBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjQ2LCJPdXRwdXRUb2tlbnMiOjE4NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MjksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwNTo0OToxOS44Nzc1NzM1MTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgc3BlY2lmaWNhbGx5IGZvbGlvIExSVSBnZW5lcmF0aW9uIGZsYWdzIGFuZCByZWZlcmVuY2UgdHJhY2tpbmcsIGFuZCBjaGFuZ2VzIGEgY291bnRlciAoYGxydV96b25lX3NpemVgKSB0byBhbiBhdG9taWMgdmFyaWFibGUgdG8gZml4IGNvbmN1cnJlbmN5IGlzc3Vlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBtaWdodCBiZSBsZWZ0IHBhcnRpYWxseSB1bmluaXRpYWxpemVkLiBUaGUgbG9jYWwgdmFyaWFibGUgYGZpbGVgIGludHJvZHVjZWQgaW4gYHdhbGtfdXBkYXRlX2ZvbGlvYCBpcyBvbmx5IHVzZWQgd2hlbiBgZm9saW9fdXBkYXRlX2dlbmAgcmV0dXJucyBhIG5vbi1uZWdhdGl2ZSB2YWx1ZSwgd2hpY2ggZ3VhcmFudGVlcyBpdCBoYXMgYmVlbiBpbml0aWFsaXplZC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHJlbGF0ZWQgdG8gdGhlc2UgY2hhbmdlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMsIHNwZWNpZmljYWxseSBmb2xpbyBMUlUgZ2VuZXJhdGlvbiBmbGFncyBhbmQgcmVmZXJlbmNlIHRyYWNraW5nLCBhbmQgY2hhbmdlcyBhIGNvdW50ZXIgKGBscnVfem9uZV9zaXplYCkgdG8gYW4gYXRvbWljIHZhcmlhYmxlIHRvIGZpeCBjb25jdXJyZW5jeSBpc3N1ZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgdGhhdCBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgbWlnaHQgYmUgbGVmdCBwYXJ0aWFsbHkgdW5pbml0aWFsaXplZC4gVGhlIGxvY2FsIHZhcmlhYmxlIGBmaWxlYCBpbnRyb2R1Y2VkIGluIGB3YWxrX3VwZGF0ZV9mb2xpb2AgaXMgb25seSB1c2VkIHdoZW4gYGZvbGlvX3VwZGF0ZV9nZW5gIHJldHVybnMgYSBub24tbmVnYXRpdmUgdmFsdWUsIHdoaWNoIGd1YXJhbnRlZXMgaXQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowf9p9q[1] Phase: Succeeded StartedAt: 2026-08-18 05:49:31 +0000 UTC FinishedAt: 2026-08-18 05:49:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9p9q[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-18 05:49:31 +0000 UTC FinishedAt: 2026-08-18 05:49:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9p9q[2] Phase: Succeeded StartedAt: 2026-08-18 05:49:31 +0000 UTC FinishedAt: 2026-08-18 09:30:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9p9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["mem_cgroup_update_lru_size","folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"94e63836-82fa-4e11-8bc8-ca27a78ad47a","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-08-18 05:49:31 +0000 UTC FinishedAt: 2026-08-18 09:30:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["mem_cgroup_update_lru_size","folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"94e63836-82fa-4e11-8bc8-ca27a78ad47a","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-workflowf9p9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["mem_cgroup_update_lru_size","folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"94e63836-82fa-4e11-8bc8-ca27a78ad47a","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-08-18 05:49:31 +0000 UTC FinishedAt: 2026-08-18 05:49:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9p9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["mem_cgroup_update_lru_size","folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"94e63836-82fa-4e11-8bc8-ca27a78ad47a","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-08-18 05:49:31 +0000 UTC FinishedAt: 2026-08-18 05:49:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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-workflowf9p9q/series-workflowf9p9q-convert-artifact-1174546966/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf9p9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["mem_cgroup_update_lru_size","folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"94e63836-82fa-4e11-8bc8-ca27a78ad47a","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-08-18 05:49:41 +0000 UTC FinishedAt: 2026-08-18 06:06:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9p9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["mem_cgroup_update_lru_size","folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"94e63836-82fa-4e11-8bc8-ca27a78ad47a","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-08-18 05:49:41 +0000 UTC FinishedAt: 2026-08-18 06:06:22 +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:*47bd8d26-e704-4228-b5e4-cd3f2e9d5cd5,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-workflowf9p9q/series-workflowf9p9q-convert-artifact-1174546966/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": "fe4e3947-6f83-4417-8c0b-4fbcd0134a63", "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-workflowf9p9q/series-workflowf9p9q-build-action-1860000172/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf9p9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["mem_cgroup_update_lru_size","folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"94e63836-82fa-4e11-8bc8-ca27a78ad47a","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-08-18 05:49:41 +0000 UTC FinishedAt: 2026-08-18 06:06:12 +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:*47bd8d26-e704-4228-b5e4-cd3f2e9d5cd5,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-workflowf9p9q/series-workflowf9p9q-convert-artifact-1174546966/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": "fe4e3947-6f83-4417-8c0b-4fbcd0134a63", "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-workflowf9p9q/series-workflowf9p9q-build-action-1860000172/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf9p9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["mem_cgroup_update_lru_size","folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"94e63836-82fa-4e11-8bc8-ca27a78ad47a","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-08-18 06:06:22 +0000 UTC FinishedAt: 2026-08-18 06:06:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9p9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["mem_cgroup_update_lru_size","folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"94e63836-82fa-4e11-8bc8-ca27a78ad47a","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-08-18 06:06:22 +0000 UTC FinishedAt: 2026-08-18 06:06:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9p9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["mem_cgroup_update_lru_size","folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"94e63836-82fa-4e11-8bc8-ca27a78ad47a","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-08-18 06:06:22 +0000 UTC FinishedAt: 2026-08-18 06:06:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9p9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["mem_cgroup_update_lru_size","folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"94e63836-82fa-4e11-8bc8-ca27a78ad47a","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-08-18 06:06:22 +0000 UTC FinishedAt: 2026-08-18 06:06:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"94e63836-82fa-4e11-8bc8-ca27a78ad47a","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-workflowf9p9q/series-workflowf9p9q-convert-artifact-165794729/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf9p9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["mem_cgroup_update_lru_size","folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"94e63836-82fa-4e11-8bc8-ca27a78ad47a","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-08-18 06:06:32 +0000 UTC FinishedAt: 2026-08-18 06:08:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9p9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["mem_cgroup_update_lru_size","folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"94e63836-82fa-4e11-8bc8-ca27a78ad47a","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-08-18 06:06:32 +0000 UTC FinishedAt: 2026-08-18 06:08:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fe4e3947-6f83-4417-8c0b-4fbcd0134a63,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-workflowf9p9q/series-workflowf9p9q-build-action-1860000172/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-workflowf9p9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["mem_cgroup_update_lru_size","folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"94e63836-82fa-4e11-8bc8-ca27a78ad47a","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-08-18 06:08:51 +0000 UTC FinishedAt: 2026-08-18 06:08:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9p9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["mem_cgroup_update_lru_size","folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"94e63836-82fa-4e11-8bc8-ca27a78ad47a","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-08-18 06:08:51 +0000 UTC FinishedAt: 2026-08-18 06:08:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9p9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["mem_cgroup_update_lru_size","folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"94e63836-82fa-4e11-8bc8-ca27a78ad47a","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-08-18 06:08:51 +0000 UTC FinishedAt: 2026-08-18 06:25:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9p9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["mem_cgroup_update_lru_size","folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"94e63836-82fa-4e11-8bc8-ca27a78ad47a","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-08-18 06:08:51 +0000 UTC FinishedAt: 2026-08-18 06:25:38 +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:*47bd8d26-e704-4228-b5e4-cd3f2e9d5cd5,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-workflowf9p9q/series-workflowf9p9q-convert-artifact-165794729/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": "0482550c-7ae0-451c-a7b0-67521007487c", "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-workflowf9p9q/series-workflowf9p9q-build-action-2022250629/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf9p9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["mem_cgroup_update_lru_size","folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"94e63836-82fa-4e11-8bc8-ca27a78ad47a","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-08-18 06:08:51 +0000 UTC FinishedAt: 2026-08-18 06:25:28 +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:*47bd8d26-e704-4228-b5e4-cd3f2e9d5cd5,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-workflowf9p9q/series-workflowf9p9q-convert-artifact-165794729/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": "0482550c-7ae0-451c-a7b0-67521007487c", "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-workflowf9p9q/series-workflowf9p9q-build-action-2022250629/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf9p9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["mem_cgroup_update_lru_size","folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"94e63836-82fa-4e11-8bc8-ca27a78ad47a","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-08-18 06:25:38 +0000 UTC FinishedAt: 2026-08-18 06:25:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9p9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["mem_cgroup_update_lru_size","folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"94e63836-82fa-4e11-8bc8-ca27a78ad47a","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-08-18 06:25:38 +0000 UTC FinishedAt: 2026-08-18 06:25:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9p9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["mem_cgroup_update_lru_size","folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"94e63836-82fa-4e11-8bc8-ca27a78ad47a","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-08-18 06:25:38 +0000 UTC FinishedAt: 2026-08-18 06:27:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9p9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["mem_cgroup_update_lru_size","folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"94e63836-82fa-4e11-8bc8-ca27a78ad47a","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-08-18 06:25:38 +0000 UTC FinishedAt: 2026-08-18 06:27:46 +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:*0482550c-7ae0-451c-a7b0-67521007487c,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-workflowf9p9q/series-workflowf9p9q-build-action-2022250629/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-workflowf9p9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["mem_cgroup_update_lru_size","folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"94e63836-82fa-4e11-8bc8-ca27a78ad47a","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-08-18 06:27:56 +0000 UTC FinishedAt: 2026-08-18 09:30:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9p9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["mem_cgroup_update_lru_size","folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"94e63836-82fa-4e11-8bc8-ca27a78ad47a","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-08-18 06:27:56 +0000 UTC FinishedAt: 2026-08-18 09:30:42 +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":["mem_cgroup_update_lru_size","folio_migrate_flags","lru_gen_look_around"],"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:*fe4e3947-6f83-4417-8c0b-4fbcd0134a63,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0482550c-7ae0-451c-a7b0-67521007487c,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-workflowf9p9q/series-workflowf9p9q-build-action-1860000172/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-workflowf9p9q/series-workflowf9p9q-build-action-2022250629/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowf9p9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["mem_cgroup_update_lru_size","folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"94e63836-82fa-4e11-8bc8-ca27a78ad47a","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-08-18 06:27:56 +0000 UTC FinishedAt: 2026-08-18 06:28:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9p9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["mem_cgroup_update_lru_size","folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"94e63836-82fa-4e11-8bc8-ca27a78ad47a","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-08-18 06:27:56 +0000 UTC FinishedAt: 2026-08-18 06:28:01 +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":["mem_cgroup_update_lru_size","folio_migrate_flags","lru_gen_look_around"],"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-workflowf9p9q/series-workflowf9p9q-convert-artifact-2848147198/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowf9p9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["mem_cgroup_update_lru_size","folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"94e63836-82fa-4e11-8bc8-ca27a78ad47a","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-08-18 06:27:56 +0000 UTC FinishedAt: 2026-08-18 06:27:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9p9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["mem_cgroup_update_lru_size","folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"94e63836-82fa-4e11-8bc8-ca27a78ad47a","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-08-18 06:27:56 +0000 UTC FinishedAt: 2026-08-18 06:27:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9p9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["mem_cgroup_update_lru_size","folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"94e63836-82fa-4e11-8bc8-ca27a78ad47a","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-08-18 06:27:56 +0000 UTC FinishedAt: 2026-08-18 06:27:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9p9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["mem_cgroup_update_lru_size","folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"94e63836-82fa-4e11-8bc8-ca27a78ad47a","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-08-18 06:28:06 +0000 UTC FinishedAt: 2026-08-18 09:30:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf9p9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"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":["mem_cgroup_update_lru_size","folio_migrate_flags","lru_gen_look_around"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3b1d6bd7bb11fd040bfa7b712486f5bd41a276cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"94e63836-82fa-4e11-8bc8-ca27a78ad47a","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-08-18 06:28:06 +0000 UTC FinishedAt: 2026-08-18 09:30:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fe4e3947-6f83-4417-8c0b-4fbcd0134a63,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0482550c-7ae0-451c-a7b0-67521007487c,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-workflowf9p9q/series-workflowf9p9q-build-action-1860000172/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-workflowf9p9q/series-workflowf9p9q-build-action-2022250629/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-workflowf9p9q/series-workflowf9p9q-convert-artifact-2848147198/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,}