Name: series-workflow7w45t Phase: Succeeded StartedAt: 2026-08-05 13:29:13 +0000 UTC FinishedAt: 2026-08-05 14:26:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7w45t[0] Phase: Succeeded StartedAt: 2026-08-05 13:29:13 +0000 UTC FinishedAt: 2026-08-05 13:33:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7w45t[0].run-triage Phase: Succeeded StartedAt: 2026-08-05 13:29:13 +0000 UTC FinishedAt: 2026-08-05 13:33:07 +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": "0f6da28aab51b16762ed82e8fdeaa5042da45b08", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROVE_LOCKING", "RCU_TORTURE_TEST", "PERF_EVENTS" ], "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": "0f6da28aab51b16762ed82e8fdeaa5042da45b08", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROVE_LOCKING", "RCU_TORTURE_TEST", "PERF_EVENTS" ], "series_id": "b70039bd-ccf0-4ffb-990d-965605a29dc1" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "rcu_barrier", "srcu_barrier", "srcu_offline_drain", "rcutree_migrate_callbacks", "srcu_defer_drain" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDEzOjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BST1ZFX0xPQ0tJTkcmIzM0OywKICAgICYjMzQ7UkNVX1RPUlRVUkVfVEVTVCYjMzQ7LAogICAgJiMzNDtQRVJGX0VWRU5UUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JjdV9iYXJyaWVyJiMzNDssCiAgICAmIzM0O3NyY3VfYmFycmllciYjMzQ7LAogICAgJiMzNDtzcmN1X29mZmxpbmVfZHJhaW4mIzM0OywKICAgICYjMzQ7cmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcyYjMzQ7LAogICAgJiMzNDtzcmN1X2RlZmVyX2RyYWluJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgUkNVIGFuZCBTUkNVIGxvZ2ljIHRvIGRlZmVyIGBjYWxsX3JjdSgpYCBhbmQgYGNhbGxfc3JjdSgpYCBjYWxsYmFja3Mgd2hlbiBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZC4gVGhpcyBwcmV2ZW50cyBkZWFkbG9ja3Mgb3IgbGlzdCBjb3JydXB0aW9uIGR1cmluZyByZS1lbnRyYW50IGNhbGxzIChlLmcuLCBmcm9tIEJQRiBwcm9ncmFtcyBvciBOTUlzKS4gSXQgaW50cm9kdWNlcyBhIG5ldyBkZWZlcnJhbCBtZWNoYW5pc20gdXNpbmcgYGlycV93b3JrYCBhbmQgbG9ja2xlc3MgbGlzdHMuIFRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsLCByZWFjaGFibGUsIGFuZCBhZmZlY3QgY29yZSBrZXJuZWwgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTM6MzE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5NGQyMmM2NzcxODdmMmU2ZGE5NmQ3ZjM4YTdhMmNiZTEwOTM2NmIwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgNSAxMzozMTozOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NyY3V0aW55LmggYi9pbmNsdWRlL2xpbnV4L3NyY3V0aW55LmhcbmluZGV4IGZiY2YxM2JjMTJkMTUuLmEwZTU0ZDkxODJiYWEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NyY3V0aW55LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3JjdXRpbnkuaFxuQEAgLTEyLDYgJiM0MzsxMiw3IEBAXG4gI2RlZmluZSBfTElOVVhfU1JDVV9USU5ZX0hcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnFfd29ya190eXBlcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xsaXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zd2FpdC5oXHUwMDNlXG4gXG4gc3RydWN0IHNyY3Vfc3RydWN0IHtcbkBAIC0yNiw2ICYjNDM7MjcsOCBAQCBzdHJ1Y3Qgc3JjdV9zdHJ1Y3Qge1xuIFx0c3RydWN0IHJjdV9oZWFkICoqc3JjdV9jYl90YWlsO1x0LyogUGVuZGluZyBjYWxsYmFja3M6IFRhaWwuICovXG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc3JjdV93b3JrO1x0LyogRm9yIGRyaXZpbmcgZ3JhY2UgcGVyaW9kcy4gKi9cbiBcdHN0cnVjdCBpcnFfd29yayBzcmN1X2lycV93b3JrO1x0LyogRGVmZXIgc2NoZWR1bGVfd29yaygpIHRvIGlycSB3b3JrLiAqL1xuJiM0MztcdHN0cnVjdCBsbGlzdF9oZWFkIGRlZmVyX2NicztcdC8qIENhbGxiYWNrcyBkZWZlcnJlZCBvbiByZS1lbnRyeS4gKi9cbiYjNDM7XHRzdHJ1Y3QgaXJxX3dvcmsgZGVmZXJfaXc7XHRcdC8qIFJlZ2lzdGVycyBkZWZlcl9jYnMgbGF0ZXIuICovXG4gI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DXG4gXHRzdHJ1Y3QgbG9ja2RlcF9tYXAgZGVwX21hcDtcbiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DICovXG5AQCAtMzMsNiAmIzQzOzM2LDcgQEAgc3RydWN0IHNyY3Vfc3RydWN0IHtcbiBcbiB2b2lkIHNyY3VfZHJpdmVfZ3Aoc3RydWN0IHdvcmtfc3RydWN0ICp3cCk7XG4gdm9pZCBzcmN1X3RpbnlfaXJxX3dvcmsoc3RydWN0IGlycV93b3JrICppcnFfd29yayk7XG4mIzQzO3ZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKmlycV93b3JrKTtcbiBcbiAjZGVmaW5lIF9fU1JDVV9TVFJVQ1RfSU5JVChuYW1lLCBfX2lnbm9yZWQsIF9fX2lnbm9yZWQsIF9fX19pZ25vcmVkKVx0XFxcbiB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbkBAIC00MCw2ICYjNDM7NDQsOSBAQCB2b2lkIHNyY3VfdGlueV9pcnFfd29yayhzdHJ1Y3QgaXJxX3dvcmsgKmlycV93b3JrKTtcbiBcdC5zcmN1X2NiX3RhaWwgPSBcdTAwMjZuYW1lLnNyY3VfY2JfaGVhZCxcdFx0XHRcdFxcXG4gXHQuc3JjdV93b3JrID0gX19XT1JLX0lOSVRJQUxJWkVSKG5hbWUuc3JjdV93b3JrLCBzcmN1X2RyaXZlX2dwKSxcdFxcXG4gXHQuc3JjdV9pcnFfd29yayA9IHsgLmZ1bmMgPSBzcmN1X3RpbnlfaXJxX3dvcmsgfSxcdFx0XFxcbiYjNDM7XHQuZGVmZXJfY2JzID0gTExJU1RfSEVBRF9JTklUKG5hbWUuZGVmZXJfY2JzKSxcdFx0XHRcXFxuJiM0MztcdC5kZWZlcl9pdyA9IHsgLm5vZGUgPSB7IC51X2ZsYWdzID0gSVJRX1dPUktfSEFSRF9JUlEgfSxcdFx0XFxcbiYjNDM7XHRcdCAgICAgIC5mdW5jID0gc3JjdV9kZWZlcl9kcmFpbiB9LFx0XHRcdFxcXG4gXHRfX1NSQ1VfREVQX01BUF9JTklUKG5hbWUpXHRcdFx0XHRcdFxcXG4gfVxuIFxuQEAgLTEzMSwxMCAmIzQzOzEzOCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzeW5jaHJvbml6ZV9zcmN1X2V4cGVkaXRlZChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbiBcdHN5bmNocm9uaXplX3NyY3Uoc3NwKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbi17XG4tXHRzeW5jaHJvbml6ZV9zcmN1KHNzcCk7XG4tfVxuJiM0Mzt2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCk7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIHNyY3VfZXhwZWRpdGVfY3VycmVudChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCkgeyB9XG4gI2RlZmluZSBzcmN1X2NoZWNrX3JlYWRfZmxhdm9yKHNzcCwgcmVhZF9mbGF2b3IpIGRvIHsgfSB3aGlsZSAoMClcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NyY3V0cmVlLmggYi9pbmNsdWRlL2xpbnV4L3NyY3V0cmVlLmhcbmluZGV4IDc1ZTU0ZTRmOTYzZmEuLjA5YTljOGY0YTZkMjQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NyY3V0cmVlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3JjdXRyZWUuaFxuQEAgLTEzLDYgJiM0MzsxMyw4IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1X25vZGVfdHJlZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGxldGlvbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycV93b3JrX3R5cGVzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGxpc3QuaFx1MDAzZVxuIFxuIHN0cnVjdCBzcmN1X25vZGU7XG4gc3RydWN0IHNyY3Vfc3RydWN0O1xuQEAgLTQxLDYgJiM0Mzs0Myw5IEBAIHN0cnVjdCBzcmN1X2RhdGEge1xuIFx0Ym9vbCBzcmN1X2NibGlzdF9pbnZva2luZztcdFx0LyogSW52b2tpbmcgdGhlc2UgQ0JzPyAqL1xuIFx0c3RydWN0IHRpbWVyX2xpc3QgZGVsYXlfd29yaztcdFx0LyogRGVsYXkgZm9yIENCIGludm9raW5nICovXG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yaztcdFx0LyogQ29udGV4dCBmb3IgQ0IgaW52b2tpbmcuICovXG4mIzQzO1x0c3RydWN0IGxsaXN0X2hlYWQgZGVmZXJfY2JzO1x0XHQvKiBDYWxsYmFja3MgZGVmZXJyZWQgb24gcmUtZW50cnkuICovXG4mIzQzO1x0c3RydWN0IGxsaXN0X25vZGUgZGVmZXJfbGluaztcdFx0LyogTGlua3Mgb250byB0aGUgcGVyLUNQVSBkZWZlcnJhbCBkcmFpbiBsaXN0ICovXG4mIzQzO1x0Ym9vbCBkZWZlcl9leHA7XHRcdFx0XHQvKiBBIGRlZmVycmVkIGNhbGxiYWNrIGFza2VkIHRvIGV4cGVkaXRlLiAqL1xuIFx0c3RydWN0IHJjdV9oZWFkIHNyY3VfYmFycmllcl9oZWFkO1x0LyogRm9yIHNyY3VfYmFycmllcigpIHVzZS4gKi9cbiBcdHN0cnVjdCByY3VfaGVhZCBzcmN1X2VjX2hlYWQ7XHRcdC8qIEZvciBzcmN1X2V4cGVkaXRlX2N1cnJlbnQoKSB1c2UuICovXG4gXHRpbnQgc3JjdV9lY19zdGF0ZTtcdFx0XHQvKiAgU3RhdGUgZm9yIHNyY3VfZXhwZWRpdGVfY3VycmVudCgpLiAqL1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvS2NvbmZpZyBiL2tlcm5lbC9yY3UvS2NvbmZpZ1xuaW5kZXggMzMyZGY3YTdhNjM0Ny4uYmM5NDgzYzBiNWQ4NCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9yY3UvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS9LY29uZmlnXG5AQCAtMTc1LDYgJiM0MzsxNzUsMTIgQEAgY29uZmlnIFJDVV9TVEFMTF9DT01NT05cbiBjb25maWcgUkNVX05FRURfU0VHQ0JMSVNUXG4gXHRkZWZfYm9vbCAoIFRSRUVfUkNVIHx8IFRSRUVfU1JDVSB8fCBUQVNLU19SQ1VfR0VORVJJQyApXG4gXG4mIzQzOyMgVGhlIGRlZmVycmFsIChhbmQgdGhlIElSUV9XT1JLIGl0IHVzZXMpIGlzIG9ubHkgbmVlZGVkIHdoZXJlIGNhbGxfcmN1KCkgL1xuJiM0MzsjIGNhbGxfc3JjdSgpIGNhbiBiZSBpbnZva2VkIHdoaWxlIGEgY2FsbGJhY2stbGlzdCBvcGVyYXRpb24gaXMgaW4gZmxpZ2h0LlxuJiM0Mztjb25maWcgUkNVX0RFRkVSXG4mIzQzO1x0ZGVmX2Jvb2wgSEFWRV9OTUkgfHwgS1BST0JFUyB8fCBGVU5DVElPTl9UUkFDRVIgfHwgVFJBQ0VQT0lOVFNcbiYjNDM7XHRzZWxlY3QgSVJRX1dPUktcbiYjNDM7XG4gY29uZmlnIFJDVV9GQU5PVVRcbiBcdGludCBcJiMzNDtUcmVlLWJhc2VkIGhpZXJhcmNoaWNhbCBSQ1UgZmFub3V0IHZhbHVlXCYjMzQ7XG4gXHRyYW5nZSAyIDY0IGlmIDY0QklUXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9yY3UuaCBiL2tlcm5lbC9yY3UvcmN1LmhcbmluZGV4IDM5YTlmNmZhOWE3YjIuLjg0ZDc0Y2Q1YTM1MWMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvcmN1L3JjdS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvcmN1L3JjdS5oXG5AQCAtNTcyLDYgJiM0Mzs1NzIsMjQgQEAgc3RhdGljIGlubGluZSB2b2lkIHRhc2tzX2NibGlzdF9pbml0X2dlbmVyaWModm9pZCkgeyB9XG4gI2RlZmluZSBSQ1VfU0NIRURVTEVSX0lOSVRcdDFcbiAjZGVmaW5lIFJDVV9TQ0hFRFVMRVJfUlVOTklOR1x0MlxuIFxuJiM0MzsvKlxuJiM0MzsgKiBEZWZlciBhIGNhbGxfcmN1KCkvY2FsbF9zcmN1KCkgY2FsbGJhY2sgcmF0aGVyIHRoYW4gZW5xdWV1ZSBpdCBub3c/ICBEZWZlclxuJiM0MzsgKiB3aGVuZXZlciBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCwgc2luY2UgYSBjYWxsYmFjay1saXN0IG9wZXJhdGlvbiBtYXkgYmUgaW5cbiYjNDM7ICogZmxpZ2h0IG9uIHRoaXMgQ1BVLiAgTm90IGJlZm9yZSB0aGUgc2NoZWR1bGVyIGlzIHVwLCB0aG91Z2g6IHRoYXQgY292ZXJzXG4mIzQzOyAqIGVhcmx5IGJvb3QsIHdoZXJlIGlycV93b3JrIGlzIG5vdCB5ZXQgdXNhYmxlIGFuZCByY3VfaW5pdCgpIGl0c2VsZiBhbHJlYWR5XG4mIzQzOyAqIGNhbGxzIGNhbGxfcmN1KCkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX3JjdV9kZWZlcih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaXJxc19kaXNhYmxlZCgpIFx1MDAyNlx1MDAyNiByY3Vfc2NoZWR1bGVyX2FjdGl2ZSAhPSBSQ1VfU0NIRURVTEVSX0lOQUNUSVZFO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBEcmFpbiBhbiBvdXRnb2luZyBDUFUmIzM5O3MgZGVmZXJyZWQgU1JDVSBjYWxsYmFja3M7IHNlZSByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKCkuICovXG4mIzQzO3ZvaWQgc3JjdV9vZmZsaW5lX2RyYWluKGludCBjcHUpO1xuJiM0MztcbiBlbnVtIHJjdXRvcnR1cmVfdHlwZSB7XG4gXHRSQ1VfRkxBVk9SLFxuIFx0UkNVX1RBU0tTX0ZMQVZPUixcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYyBiL2tlcm5lbC9yY3UvcmN1dG9ydHVyZS5jXG5pbmRleCA3OTQ5MzdlMTNlN2MzLi5hODRlNzI1ZTgwNjU2IDEwMDY0NFxuLS0tIGEva2VybmVsL3JjdS9yY3V0b3J0dXJlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9yY3UvcmN1dG9ydHVyZS5jXG5AQCAtNDgsNiAmIzQzOzQ4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90aWNrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VwZGF0ZV90cmFjZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbm1pLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGVyZl9ldmVudC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7cmN1LmhcJiMzNDtcbiBcbkBAIC0xMTUsNiAmIzQzOzExNiw3IEBAIHRvcnR1cmVfcGFyYW0oaW50LCBsZWFrcG9pbnRlciwgMCwgXCYjMzQ7TGVhayBwb2ludGVyIGRlcmVmZXJlbmNlcyBmcm9tIHJlYWRlcnNcJiMzNDspO1xuIHRvcnR1cmVfcGFyYW0oaW50LCBuX2JhcnJpZXJfY2JzLCAwLCBcJiMzNDsjIG9mIGNhbGxiYWNrcy9rdGhyZWFkcyBmb3IgYmFycmllciB0ZXN0aW5nXCYjMzQ7KTtcbiB0b3J0dXJlX3BhcmFtKGludCwgbl91cF9kb3duLCAzMiwgXCYjMzQ7IyBvZiBjb25jdXJyZW50IHVwL2Rvd24gaHJ0aW1lci1iYXNlZCBSQ1UgcmVhZGVyc1wmIzM0Oyk7XG4gdG9ydHVyZV9wYXJhbShpbnQsIG5mYWtld3JpdGVycywgNCwgXCYjMzQ7TnVtYmVyIG9mIFJDVSBmYWtlIHdyaXRlciB0aHJlYWRzXCYjMzQ7KTtcbiYjNDM7dG9ydHVyZV9wYXJhbShib29sLCBubWlfY2FsbHMsIHRydWUsIFwmIzM0O0V4ZXJjaXNlIC1cdTAwM2VjYWxsKCkgZnJvbSBOTUkgb24gbm1pX2NhcGFibGUgZmxhdm9yc1wmIzM0Oyk7XG4gdG9ydHVyZV9wYXJhbShpbnQsIG5yZWFkZXJzLCAtMSwgXCYjMzQ7TnVtYmVyIG9mIFJDVSByZWFkZXIgdGhyZWFkc1wmIzM0Oyk7XG4gdG9ydHVyZV9wYXJhbShib29sLCBud3JpdGVycywgMSwgXCYjMzQ7TnVtYmVyIG9mIFJDVSB3cml0ZXIgdGhyZWFkcyAoMCBvciAxKVwmIzM0Oyk7XG4gdG9ydHVyZV9wYXJhbShpbnQsIG9iamVjdF9kZWJ1ZywgMCwgXCYjMzQ7RW5hYmxlIGRlYnVnLW9iamVjdCBkb3VibGUgY2FsbF9yY3UoKSB0ZXN0aW5nXCYjMzQ7KTtcbkBAIC0yMTYsNiAmIzQzOzIxOCw4IEBAIHN0YXRpYyBsb25nIG5fcmN1X3RvcnR1cmVfYm9vc3RfZmFpbHVyZTtcbiBzdGF0aWMgbG9uZyBuX3JjdV90b3J0dXJlX2Jvb3N0cztcbiBzdGF0aWMgYXRvbWljX2xvbmdfdCBuX3JjdV90b3J0dXJlX3RpbWVycztcbiBzdGF0aWMgYXRvbWljX2xvbmdfdCBuX3JjdV90b3J0dXJlX2lycXM7XG4mIzQzO3N0YXRpYyBhdG9taWNfbG9uZ190IG5fcmN1X3RvcnR1cmVfbm1pX2NhbGw7XG4mIzQzO3N0YXRpYyBhdG9taWNfbG9uZ190IG5fcmN1X3RvcnR1cmVfbm1pX2NiO1xuIHN0YXRpYyBsb25nIG5fYmFycmllcl9hdHRlbXB0cztcbiBzdGF0aWMgbG9uZyBuX2JhcnJpZXJfc3VjY2Vzc2VzOyAvKiBkaWQgcmN1X2JhcnJpZXIgdGVzdCBzdWNjZWVkPyAqL1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIG5fcmVhZF9leGl0cztcbkBAIC00MzMsNiAmIzQzOzQzNyw3IEBAIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMge1xuIFx0Ym9vbCAoKmlzX3Rhc2tfcmN1X2Jvb3N0ZWQpKHZvaWQpO1xuIFx0bG9uZyBjYmZsb29kX21heDtcbiBcdGludCBpcnFfY2FwYWJsZTtcbiYjNDM7XHRpbnQgbm1pX2NhcGFibGU7XG4gXHRpbnQgY2FuX2Jvb3N0O1xuIFx0aW50IGV4dGVuZGFibGVzO1xuIFx0aW50IHNsb3dfZ3BzO1xuQEAgLTY0OCw2ICYjNDM7NjUzLDcgQEAgc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgcmN1X29wcyA9IHtcbiBcdC5leHRlbmRhYmxlc1x0XHQ9IFJDVVRPUlRVUkVfTUFYX0VYVEVORCxcbiBcdC5kZWJ1Z19vYmplY3RzXHRcdD0gMSxcbiBcdC5zdGFydF9wb2xsX2lycXNvZmZcdD0gMSxcbiYjNDM7XHQubm1pX2NhcGFibGVcdFx0PSAxLFxuIFx0Lm5hbWVcdFx0XHQ9IFwmIzM0O3JjdVwmIzM0O1xuIH07XG4gXG5AQCAtOTQyLDYgJiM0Mzs5NDgsNyBAQCBzdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlX29wcyBzcmN1X29wcyA9IHtcbiBcdC5kZWJ1Z19vYmplY3RzXHQ9IDEsXG4gXHQuaGF2ZV91cF9kb3duXHQ9IElTX0VOQUJMRUQoQ09ORklHX1RJTllfU1JDVSlcbiBcdFx0XHRcdD8gMCA6IFNSQ1VfUkVBRF9GTEFWT1JfTk9STUFMIHwgU1JDVV9SRUFEX0ZMQVZPUl9GQVNUX1VQRE9XTixcbiYjNDM7XHQubm1pX2NhcGFibGVcdD0gMSxcbiBcdC5uYW1lXHRcdD0gXCYjMzQ7c3JjdVwmIzM0O1xuIH07XG4gXG5AQCAtMTAwNSw2ICYjNDM7MTAxMiw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzIHNyY3VkX29wcyA9IHtcbiBcdC5kZWJ1Z19vYmplY3RzXHQ9IDEsXG4gXHQuaGF2ZV91cF9kb3duXHQ9IElTX0VOQUJMRUQoQ09ORklHX1RJTllfU1JDVSlcbiBcdFx0XHRcdD8gMCA6IFNSQ1VfUkVBRF9GTEFWT1JfTk9STUFMIHwgU1JDVV9SRUFEX0ZMQVZPUl9GQVNUX1VQRE9XTixcbiYjNDM7XHQubm1pX2NhcGFibGVcdD0gMSxcbiBcdC5uYW1lXHRcdD0gXCYjMzQ7c3JjdWRcJiMzNDtcbiB9O1xuIFxuQEAgLTEyNjksNiAmIzQzOzEyNzcsNyBAQCBzdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlX29wcyB0YXNrc190cmFjaW5nX29wcyA9IHtcbiBcdC5jYmZsb29kX21heFx0PSA1MDAwMCxcbiBcdC5pcnFfY2FwYWJsZVx0PSAxLFxuIFx0LnNsb3dfZ3BzXHQ9IDEsXG4mIzQzO1x0Lm5taV9jYXBhYmxlXHQ9IDEsXG4gXHQubmFtZVx0XHQ9IFwmIzM0O3Rhc2tzLXRyYWNpbmdcJiMzNDtcbiB9O1xuIFxuQEAgLTI2NTksMTIgJiM0MzsyNjY4LDEzMSBAQCBzdGF0aWMgYm9vbCByY3VfdG9ydHVyZV9vbmVfcmVhZChzdHJ1Y3QgdG9ydHVyZV9yYW5kb21fc3RhdGUgKnRyc3AsIGxvbmcgbXlpZClcbiBcbiBzdGF0aWMgREVGSU5FX1RPUlRVUkVfUkFORE9NX1BFUkNQVShyY3VfdG9ydHVyZV90aW1lcl9yYW5kKTtcbiBcbiYjNDM7LypcbiYjNDM7ICogRXhlcmNpc2UgLVx1MDAzZWNhbGwoKSBmcm9tIE5NSSBjb250ZXh0IGZvciBmbGF2b3JzIHRoYXQgc2V0IC1cdTAwM2VubWlfY2FwYWJsZS4gIEFcbiYjNDM7ICogcGVyLUNQVSBoYXJkd2FyZSBwZXJmIGNvdW50ZXIgb3ZlcmZsb3dzIGludG8gYW4gTk1JLCBhbmQgaXRzIGhhbmRsZXIgc3VibWl0c1xuJiM0MzsgKiBvbmUgcHJlYWxsb2NhdGVkIGNhbGxiYWNrIHZpYSAtXHUwMDNlY2FsbCgpLiAgT25lIGNhbGxiYWNrIGlzIGluIGZsaWdodCBhdCBhIHRpbWVcbiYjNDM7ICogKGd1YXJkZWQgYnkgYW4gYXRvbWljKSB0byBhdm9pZCBhbGxvY2F0aW5nIGluIE5NSS4gIFRoaXMgbWlycm9ycyBob3cgYSBCUEZcbiYjNDM7ICogcHJvZ3JhbSByZWFjaGVzIC1cdTAwM2VjYWxsKCkgZnJvbSBOTUkuXG4mIzQzOyAqL1xuJiM0MzsjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIHJjdV90b3J0dXJlX25taV9hdHRyID0ge1xuJiM0MztcdC50eXBlXHRcdD0gUEVSRl9UWVBFX0hBUkRXQVJFLFxuJiM0MztcdC5jb25maWdcdFx0PSBQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVMsXG4mIzQzO1x0LnNpemVcdFx0PSBzaXplb2Yoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciksXG4mIzQzO1x0LnBpbm5lZFx0XHQ9IDEsXG4mIzQzO1x0LmRpc2FibGVkXHQ9IDEsXG4mIzQzO1x0LmZyZXFcdFx0PSAxLFxuJiM0MztcdC5zYW1wbGVfZnJlcVx0PSAxMDAsXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKiBPbmUgaW4tZmxpZ2h0IGNhbGxiYWNrIHBlciBDUFU7IC1cdTAwM2VpbnVzZSBpcyByZWxlYXNlZCBieSB0aGUgY2FsbGJhY2suICovXG4mIzQzO3N0cnVjdCByY3VfdG9ydHVyZV9ubWlfY2JzIHtcbiYjNDM7XHRzdHJ1Y3QgcmN1X2hlYWQgcmg7XG4mIzQzO1x0YXRvbWljX3QgaW51c2U7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnQgKipyY3VfdG9ydHVyZV9ubWlfZXZlbnRzO1xuJiM0MztzdGF0aWMgaW50IHJjdV90b3J0dXJlX25taV9ocF9zdGF0ZTtcbiYjNDM7c3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCByY3VfdG9ydHVyZV9ubWlfY2JzLCByY3VfdG9ydHVyZV9ubWlfY2JzKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9jYihzdHJ1Y3QgcmN1X2hlYWQgKnJocClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByY3VfdG9ydHVyZV9ubWlfY2JzICpydG5jcCA9IGNvbnRhaW5lcl9vZihyaHAsIHN0cnVjdCByY3VfdG9ydHVyZV9ubWlfY2JzLCByaCk7XG4mIzQzO1xuJiM0MztcdGF0b21pY19sb25nX2luYyhcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYik7XG4mIzQzO1x0YXRvbWljX3NldChcdTAwMjZydG5jcC1cdTAwM2VpbnVzZSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9vdmVyZmxvdyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSxcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJjdV90b3J0dXJlX25taV9jYnMgKnJ0bmNwID0gdGhpc19jcHVfcHRyKFx1MDAyNnJjdV90b3J0dXJlX25taV9jYnMpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWluX25taSgpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGlmIChjdXJfb3BzLVx1MDAzZWNhbGwgXHUwMDI2XHUwMDI2ICFhdG9taWNfeGNoZyhcdTAwMjZydG5jcC1cdTAwM2VpbnVzZSwgMSkpIHtcbiYjNDM7XHRcdGF0b21pY19sb25nX2luYyhcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYWxsKTtcbiYjNDM7XHRcdGN1cl9vcHMtXHUwMDNlY2FsbChcdTAwMjZydG5jcC1cdTAwM2VyaCwgcmN1X3RvcnR1cmVfbm1pX2NiKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmN1X3RvcnR1cmVfbm1pX29ubGluZSh1bnNpZ25lZCBpbnQgY3B1KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50O1xuJiM0MztcbiYjNDM7XHRldmVudCA9IHBlcmZfZXZlbnRfY3JlYXRlX2tlcm5lbF9jb3VudGVyKFx1MDAyNnJjdV90b3J0dXJlX25taV9hdHRyLCBjcHUsIE5VTEwsXG4mIzQzO1x0XHRcdFx0XHRcdCByY3VfdG9ydHVyZV9ubWlfb3ZlcmZsb3csIE5VTEwpO1xuJiM0MztcdGlmIChJU19FUlIoZXZlbnQpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0cmN1X3RvcnR1cmVfbm1pX2V2ZW50c1tjcHVdID0gZXZlbnQ7XG4mIzQzO1x0cGVyZl9ldmVudF9lbmFibGUoZXZlbnQpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJjdV90b3J0dXJlX25taV9vZmZsaW5lKHVuc2lnbmVkIGludCBjcHUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSByY3VfdG9ydHVyZV9ubWlfZXZlbnRzW2NwdV07XG4mIzQzO1xuJiM0MztcdGlmIChldmVudCkge1xuJiM0MztcdFx0cmN1X3RvcnR1cmVfbm1pX2V2ZW50c1tjcHVdID0gTlVMTDtcbiYjNDM7XHRcdHBlcmZfZXZlbnRfZGlzYWJsZShldmVudCk7XG4mIzQzO1x0XHRwZXJmX2V2ZW50X3JlbGVhc2Vfa2VybmVsKGV2ZW50KTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIERyaXZlIHRoZSBjb3VudGVycyBmcm9tIENQVS1ob3RwbHVnIGNhbGxiYWNrcyBzbyB0aGF0IGNvdmVyYWdlIHN1cnZpdmVzIHRoZVxuJiM0MzsgKiBvbm9mZiB0ZXN0aW5nIHRoYXQgbW9zdCBzY2VuYXJpb3MgcnVuLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2luaXQodm9pZClcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghbm1pX2NhbGxzIHx8ICFjdXJfb3BzLVx1MDAzZW5taV9jYXBhYmxlIHx8ICFjdXJfb3BzLVx1MDAzZWNhbGwpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0cmN1X3RvcnR1cmVfbm1pX2V2ZW50cyA9IGtjYWxsb2MobnJfY3B1X2lkcywgc2l6ZW9mKCpyY3VfdG9ydHVyZV9ubWlfZXZlbnRzKSxcbiYjNDM7XHRcdFx0XHRcdCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXJjdV90b3J0dXJlX25taV9ldmVudHMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0cmV0ID0gY3B1aHBfc2V0dXBfc3RhdGUoQ1BVSFBfQVBfT05MSU5FX0RZTiwgXCYjMzQ7cmN1dG9ydHVyZS9ubWk6b25saW5lXCYjMzQ7LFxuJiM0MztcdFx0XHRcdHJjdV90b3J0dXJlX25taV9vbmxpbmUsIHJjdV90b3J0dXJlX25taV9vZmZsaW5lKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRrZnJlZShyY3VfdG9ydHVyZV9ubWlfZXZlbnRzKTtcbiYjNDM7XHRcdHJjdV90b3J0dXJlX25taV9ldmVudHMgPSBOVUxMO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XHRyY3VfdG9ydHVyZV9ubWlfaHBfc3RhdGUgPSByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9jbGVhbnVwKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXJjdV90b3J0dXJlX25taV9ldmVudHMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0aWYgKHJjdV90b3J0dXJlX25taV9ocF9zdGF0ZSBcdTAwM2UgMCkge1xuJiM0MztcdFx0Y3B1aHBfcmVtb3ZlX3N0YXRlKHJjdV90b3J0dXJlX25taV9ocF9zdGF0ZSk7XG4mIzQzO1x0XHRyY3VfdG9ydHVyZV9ubWlfaHBfc3RhdGUgPSAwO1xuJiM0MztcdH1cbiYjNDM7XHRrZnJlZShyY3VfdG9ydHVyZV9ubWlfZXZlbnRzKTtcbiYjNDM7XHRyY3VfdG9ydHVyZV9ubWlfZXZlbnRzID0gTlVMTDtcbiYjNDM7XHRpZiAoIWF0b21pY19sb25nX3JlYWQoXHUwMDI2bl9yY3VfdG9ydHVyZV9ubWlfY2FsbCkpXG4mIzQzO1x0XHRwcl9hbGVydChcJiMzNDslczogbm1pX2NhbGxzIHNldCBidXQgbm8gLVx1MDAzZWNhbGwoKSBpc3N1ZWQgZnJvbSBOTUk6IG5vdCBzdXBwb3J0ZWQgaGVyZS5cXG5cJiMzNDssXG4mIzQzO1x0XHRcdCBfX2Z1bmNfXyk7XG4mIzQzO31cbiYjNDM7I2Vsc2UgLyogI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUyAqL1xuJiM0MztzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfaW5pdCh2b2lkKSB7IH1cbiYjNDM7c3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2NsZWFudXAodm9pZCkgeyB9XG4mIzQzOyNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTICovXG4mIzQzO1xuIC8qXG4gICogUkNVIHRvcnR1cmUgcmVhZGVyIGZyb20gdGltZXIgaGFuZGxlci4gIERlcmVmZXJlbmNlcyByY3VfdG9ydHVyZV9jdXJyZW50LFxuICAqIGluY3JlbWVudGluZyB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IG9mIHRoZSBwaXBlbGluZSBhcnJheS4gIFRoZVxuICAqIGNvdW50ZXIgaW4gdGhlIGVsZW1lbnQgc2hvdWxkIG5ldmVyIGJlIGdyZWF0ZXIgdGhhbiAxLCBvdGhlcndpc2UsIHRoZVxuICAqIFJDVSBpbXBsZW1lbnRhdGlvbiBpcyBicm9rZW4uXG4gICovXG4mIzQzO1xuIHN0YXRpYyB2b2lkIHJjdV90b3J0dXJlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp1bnVzZWQpXG4ge1xuIFx0V0FSTl9PTl9PTkNFKCFpbl9zZXJ2aW5nX3NvZnRpcnEoKSk7XG5AQCAtMzA0Nyw2ICYjNDM7MzE3NSw5IEBAIHJjdV90b3J0dXJlX3N0YXRzX3ByaW50KHZvaWQpXG4gXHRcdGRhdGFfcmFjZShuX2JhcnJpZXJfYXR0ZW1wdHMpLFxuIFx0XHRkYXRhX3JhY2Uobl9yY3VfdG9ydHVyZV9iYXJyaWVyX2Vycm9yKSk7XG4gXHRwcl9jb250KFwmIzM0O3JlYWQtZXhpdHM6ICVsZCBcJiMzNDssIGRhdGFfcmFjZShuX3JlYWRfZXhpdHMpKTsgLy8gU3RhdGlzdGljLlxuJiM0MztcdHByX2NvbnQoXCYjMzQ7bm1pLWNhbGxzOiAlbGQgbm1pLWNiczogJWxkIFwmIzM0OyxcbiYjNDM7XHRcdGF0b21pY19sb25nX3JlYWQoXHUwMDI2bl9yY3VfdG9ydHVyZV9ubWlfY2FsbCksXG4mIzQzO1x0XHRhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NiKSk7XG4gXHRwcl9jb250KFwmIzM0O25vY2ItdG9nZ2xlczogJWxkOiVsZCBcJiMzNDssXG4gXHRcdGF0b21pY19sb25nX3JlYWQoXHUwMDI2bl9ub2NiX29mZmxvYWQpLCBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm5fbm9jYl9kZW9mZmxvYWQpKTtcbiBcdHByX2NvbnQoXCYjMzQ7Z3B3cmFwczogJWxkXFxuXCYjMzQ7LCBuX2dwd3JhcHMpO1xuQEAgLTMxOTUsNyAmIzQzOzMzMjYsNyBAQCByY3VfdG9ydHVyZV9wcmludF9tb2R1bGVfcGFybXMoc3RydWN0IHJjdV90b3J0dXJlX29wcyAqY3VyX29wcywgY29uc3QgY2hhciAqdGFnKVxuIFx0XHQgXCYjMzQ7cmVhZF9leGl0X2RlbGF5PSVkIHJlYWRfZXhpdF9idXJzdD0lZCBcJiMzNDtcbiBcdFx0IFwmIzM0O3JlYWRlcl9mbGF2b3I9JXggXCYjMzQ7XG4gXHRcdCBcJiMzNDtub2Nic19udGhyZWFkcz0lZCBub2Nic190b2dnbGU9JWQgXCYjMzQ7XG4tXHRcdCBcJiMzNDt0ZXN0X25taXM9JWQgXCYjMzQ7XG4mIzQzO1x0XHQgXCYjMzQ7dGVzdF9ubWlzPSVkIG5taV9jYWxscz0lZCBcJiMzNDtcbiBcdFx0IFwmIzM0O3ByZWVtcHRfZHVyYXRpb249JWQgcHJlZW1wdF9pbnRlcnZhbD0lZCBuX3VwX2Rvd249JWRcXG5cJiMzNDssXG4gXHRcdCB0b3J0dXJlX3R5cGUsIHRhZywgbnJlYWxyZWFkZXJzLCBud3JpdGVycywgbnJlYWxmYWtld3JpdGVycyxcbiBcdFx0IHN0YXRfaW50ZXJ2YWwsIHZlcmJvc2UsIHRlc3Rfbm9faWRsZV9oeiwgc2h1ZmZsZV9pbnRlcnZhbCxcbkBAIC0zMjA5LDcgJiM0MzszMzQwLDcgQEAgcmN1X3RvcnR1cmVfcHJpbnRfbW9kdWxlX3Bhcm1zKHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgKmN1cl9vcHMsIGNvbnN0IGNoYXIgKnRhZylcbiBcdFx0IHJlYWRfZXhpdF9kZWxheSwgcmVhZF9leGl0X2J1cnN0LFxuIFx0XHQgcmVhZGVyX2ZsYXZvcixcbiBcdFx0IG5vY2JzX250aHJlYWRzLCBub2Nic190b2dnbGUsXG4tXHRcdCB0ZXN0X25taXMsXG4mIzQzO1x0XHQgdGVzdF9ubWlzLCBubWlfY2FsbHMsXG4gXHRcdCBwcmVlbXB0X2R1cmF0aW9uLCBwcmVlbXB0X2ludGVydmFsLCBuX3VwX2Rvd24pO1xuIH1cbiBcbkBAIC00MjgzLDYgJiM0Mzs0NDE0LDcgQEAgcmN1X3RvcnR1cmVfY2xlYW51cCh2b2lkKVxuIFx0aW50IGk7XG4gXG4gXHRpZiAodG9ydHVyZV9jbGVhbnVwX2JlZ2luKCkpIHtcbiYjNDM7XHRcdHJjdV90b3J0dXJlX25taV9jbGVhbnVwKCk7XG4gXHRcdGlmIChjdXJfb3BzLVx1MDAzZWNiX2JhcnJpZXIgIT0gTlVMTCkge1xuIFx0XHRcdHByX2luZm8oXCYjMzQ7JXM6IEludm9raW5nICVwUygpLlxcblwmIzM0OywgX19mdW5jX18sIGN1cl9vcHMtXHUwMDNlY2JfYmFycmllcik7XG4gXHRcdFx0Y3VyX29wcy1cdTAwM2VjYl9iYXJyaWVyKCk7XG5AQCAtNDMyNSw2ICYjNDM7NDQ1Nyw4IEBAIHJjdV90b3J0dXJlX2NsZWFudXAodm9pZClcbiBcdFx0a2ZyZWUocmVhZGVyX3Rhc2tzKTtcbiBcdFx0cmVhZGVyX3Rhc2tzID0gTlVMTDtcbiBcdH1cbiYjNDM7XHQvKiBEaXNhYmxlIHRoZSBwZXJmIGNvdW50ZXJzIChhbmQgdGh1cyB0aGUgTk1JIC1cdTAwM2VjYWxsKCkgZmlyaW5nKSBub3cuICovXG4mIzQzO1x0cmN1X3RvcnR1cmVfbm1pX2NsZWFudXAoKTtcbiBcdGtmcmVlKHJjdV90b3J0dXJlX3JlYWRlcl9tYmNoayk7XG4gXHRyY3VfdG9ydHVyZV9yZWFkZXJfbWJjaGsgPSBOVUxMO1xuIFxuQEAgLTQzNTQsNiAmIzQzOzQ0ODgsMjAgQEAgcmN1X3RvcnR1cmVfY2xlYW51cCh2b2lkKVxuIFx0XHRwcl9pbmZvKFwmIzM0OyVzOiBJbnZva2luZyAlcFMoKS5cXG5cJiMzNDssIF9fZnVuY19fLCBjdXJfb3BzLVx1MDAzZWNiX2JhcnJpZXIpO1xuIFx0XHRjdXJfb3BzLVx1MDAzZWNiX2JhcnJpZXIoKTtcbiBcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBjYl9iYXJyaWVyKCkgYWJvdmUgZHJhaW5lZCBldmVyeSBkZWZlcnJlZCBOTUkgLVx1MDAzZWNhbGwoKSBjYWxsYmFjaywgc28gdGhlXG4mIzQzO1x0ICogY291bnQgaXNzdWVkIGZyb20gTk1JIG11c3QgZXF1YWwgdGhlIGNvdW50IGludm9rZWQ7IGEgbWlzbWF0Y2ggbWVhbnMgYVxuJiM0MztcdCAqIGNhbGxiYWNrIHdhcyBsb3N0LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NhbGwpICE9XG4mIzQzO1x0ICAgIGF0b21pY19sb25nX3JlYWQoXHUwMDI2bl9yY3VfdG9ydHVyZV9ubWlfY2IpKSB7XG4mIzQzO1x0XHRwcl9hbGVydChcJiMzNDslczogTk1JIC1cdTAwM2VjYWxsKCkgbG9zdCBhIGNhbGxiYWNrOiBpc3N1ZWQgJWxkIGludm9rZWQgJWxkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgX19mdW5jX18sIGF0b21pY19sb25nX3JlYWQoXHUwMDI2bl9yY3VfdG9ydHVyZV9ubWlfY2FsbCksXG4mIzQzO1x0XHRcdCBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NiKSk7XG4mIzQzO1x0XHRhdG9taWNfaW5jKFx1MDAyNm5fcmN1X3RvcnR1cmVfZXJyb3IpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoY3VyX29wcy1cdTAwM2VjbGVhbnVwICE9IE5VTEwpXG4gXHRcdGN1cl9vcHMtXHUwMDNlY2xlYW51cCgpO1xuIFxuQEAgLTQ3ODYsNiAmIzQzOzQ5MzQsOCBAQCByY3VfdG9ydHVyZV9pbml0KHZvaWQpXG4gXHRcdGZpcnN0ZXJyID0gLUVOT01FTTtcbiBcdFx0Z290byB1bndpbmQ7XG4gXHR9XG4mIzQzO1x0LyogQXJtIHRoZSBwZXItQ1BVIHBlcmYgY291bnRlcnMgdGhhdCBkcml2ZSAtXHUwMDNlY2FsbCgpIGZyb20gTk1JLiAqL1xuJiM0MztcdHJjdV90b3J0dXJlX25taV9pbml0KCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucmVhbHJlYWRlcnM7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHJjdV90b3J0dXJlX3JlYWRlcl9tYmNoa1tpXS5ydGNfY2hrcmRyID0gLTE7XG4gXHRcdGZpcnN0ZXJyID0gdG9ydHVyZV9jcmVhdGVfa3RocmVhZChyY3VfdG9ydHVyZV9yZWFkZXIsICh2b2lkICopaSxcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3NyY3V0aW55LmMgYi9rZXJuZWwvcmN1L3NyY3V0aW55LmNcbmluZGV4IDU1OGJhOGQzMTZkYjYuLjdhN2MxY2VmNDNlMTMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvcmN1L3NyY3V0aW55LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9yY3Uvc3JjdXRpbnkuY1xuQEAgLTEwLDYgJiM0MzsxMCw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnFfd29yay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xsaXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJlZW1wdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGVfd2FpdC5oXHUwMDNlXG5AQCAtMjksNiAmIzQzOzMwLDggQEAgZXh0ZXJuIGludCByY3Vfc2NoZWR1bGVyX2FjdGl2ZTtcbiBzdGF0aWMgTElTVF9IRUFEKHNyY3VfYm9vdF9saXN0KTtcbiBzdGF0aWMgYm9vbCBzcmN1X2luaXRfZG9uZTtcbiBcbiYjNDM7c3RhdGljIHZvaWQgX19zcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBib29sIGd1YXJkKTtcbiYjNDM7XG4gc3RhdGljIGludCBpbml0X3NyY3Vfc3RydWN0X2ZpZWxkcyhzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbiB7XG4gXHRzc3AtXHUwMDNlc3JjdV9sb2NrX25lc3RpbmdbMF0gPSAwO1xuQEAgLTQzLDYgJiM0Mzs0Niw4IEBAIHN0YXRpYyBpbnQgaW5pdF9zcmN1X3N0cnVjdF9maWVsZHMoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4gXHRJTklUX1dPUksoXHUwMDI2c3NwLVx1MDAzZXNyY3Vfd29yaywgc3JjdV9kcml2ZV9ncCk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZzc3AtXHUwMDNlc3JjdV93b3JrLmVudHJ5KTtcbiBcdGluaXRfaXJxX3dvcmsoXHUwMDI2c3NwLVx1MDAzZXNyY3VfaXJxX3dvcmssIHNyY3VfdGlueV9pcnFfd29yayk7XG4mIzQzO1x0aW5pdF9sbGlzdF9oZWFkKFx1MDAyNnNzcC1cdTAwM2VkZWZlcl9jYnMpO1xuJiM0MztcdHNzcC1cdTAwM2VkZWZlcl9pdyA9IElSUV9XT1JLX0lOSVRfSEFSRChzcmN1X2RlZmVyX2RyYWluKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC04Niw2ICYjNDM7OTEsMTEgQEAgRVhQT1JUX1NZTUJPTF9HUEwoaW5pdF9zcmN1X3N0cnVjdF9nZW5lcmljKTtcbiB2b2lkIGNsZWFudXBfc3JjdV9zdHJ1Y3Qoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4ge1xuIFx0V0FSTl9PTihzcmN1X3JlYWRlcnNfYWN0aXZlKHNzcCkpO1xuJiM0MztcdC8qIFJlLWlzc3VlIGFueSBkZWZlcnJlZCBjYWxsYmFja3MsIHRoZW4gd2FpdCBvdXQgLVx1MDAzZWRlZmVyX2l3IGJlZm9yZSBpdCBpcyBmcmVlZC4gKi9cbiYjNDM7XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSkge1xuJiM0MztcdFx0X19zcmN1X2RlZmVyX2RyYWluKHNzcCwgZmFsc2UpO1xuJiM0MztcdFx0aXJxX3dvcmtfc3luYyhcdTAwMjZzc3AtXHUwMDNlZGVmZXJfaXcpO1xuJiM0MztcdH1cbiBcdGlycV93b3JrX3N5bmMoXHUwMDI2c3NwLVx1MDAzZXNyY3VfaXJxX3dvcmspO1xuIFx0Zmx1c2hfd29yayhcdTAwMjZzc3AtXHUwMDNlc3JjdV93b3JrKTtcbiBcdFdBUk5fT04oc3NwLVx1MDAzZXNyY3VfZ3BfcnVubmluZyk7XG5AQCAtMjEzLDExICYjNDM7MjIzLDExIEBAIHN0YXRpYyB2b2lkIHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuIH1cbiBcbiAvKlxuLSAqIEVucXVldWUgYW4gU1JDVSBjYWxsYmFjayBvbiB0aGUgc3BlY2lmaWVkIHNyY3Vfc3RydWN0IHN0cnVjdHVyZSxcbi0gKiBpbml0aWF0aW5nIGdyYWNlLXBlcmlvZCBwcm9jZXNzaW5nIGlmIGl0IGlzIG5vdCBhbHJlYWR5IHJ1bm5pbmcuXG4mIzQzOyAqIEVucXVldWUgQHJocCBvbiB0aGUgY2FsbGJhY2sgbGlzdC4gIEFsc28gY2FsbGVkIGJ5IHNyY3VfZGVmZXJfZHJhaW4oKSB0b1xuJiM0MzsgKiByZS1pc3N1ZSBhIGRlZmVycmVkIGNhbGxiYWNrLCBzbyBpdCBtdXN0IG5vdCByZS1jaGVjayB0aGUgZGVmZXJyYWwgY29uZGl0aW9uLlxuICAqL1xuLXZvaWQgY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcbi1cdCAgICAgICByY3VfY2FsbGJhY2tfdCBmdW5jKVxuJiM0MztzdGF0aWMgdm9pZCBzcmN1X2RvX2VucXVldWUoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxuJiM0MztcdFx0XHQgICAgcmN1X2NhbGxiYWNrX3QgZnVuYylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuQEAgLTIzMSw2ICYjNDM7MjQxLDU4IEBAIHZvaWQgY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcbiBcdHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHNzcCk7XG4gXHRwcmVlbXB0X2VuYWJsZSgpO1xuIH1cbiYjNDM7XG4mIzQzOy8qIFNldCB3aGlsZSBzcmN1X2RlZmVyX2RyYWluKCkgcmUtaXNzdWVzLCB0byBjYXRjaCBhIHJlLWVudHJhbnQgY2FsbF9zcmN1KCkuICovXG4mIzQzO3N0YXRpYyBib29sIHNyY3VfZGVmZXJfZHJhaW5pbmc7XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBfX3NyY3VfZGVmZXJfZHJhaW4oc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIGJvb2wgZ3VhcmQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSwgKm5leHQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XG4mIzQzO1x0LyogQ2FsbGJhY2tzIGFyZSB1bm9yZGVyZWQsIHNvIGRyYWluIGluIGxsaXN0IG9yZGVyIHdpdGhvdXQgcmV2ZXJzaW5nLiAqL1xuJiM0MztcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbiYjNDM7XHRpZiAoZ3VhcmQpXG4mIzQzO1x0XHRXUklURV9PTkNFKHNyY3VfZGVmZXJfZHJhaW5pbmcsIHRydWUpO1xuJiM0MztcdGxsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgbmV4dCwgbGxpc3RfZGVsX2FsbChcdTAwMjZzc3AtXHUwMDNlZGVmZXJfY2JzKSkge1xuJiM0MztcdFx0c3RydWN0IHJjdV9oZWFkICpyaHAgPSAoc3RydWN0IHJjdV9oZWFkICopbm9kZTtcbiYjNDM7XG4mIzQzO1x0XHRyaHAtXHUwMDNlbmV4dCA9IE5VTEw7XG4mIzQzO1x0XHRzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIHJocC1cdTAwM2VmdW5jKTtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKGd1YXJkKVxuJiM0MztcdFx0V1JJVEVfT05DRShzcmN1X2RlZmVyX2RyYWluaW5nLCBmYWxzZSk7XG4mIzQzO1x0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBPbmx5IHRoZSBpcnFfd29yayBkcmFpbiBjYW4gYmUgcmUtZmVkIGJ5IGl0cyBvd24gcmUtaXNzdWU7IHNlZSBUcmVlIFNSQ1UuICovXG4mIzQzO3ZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KVxuJiM0Mzt7XG4mIzQzO1x0X19zcmN1X2RlZmVyX2RyYWluKGNvbnRhaW5lcl9vZihpdywgc3RydWN0IHNyY3Vfc3RydWN0LCBkZWZlcl9pdyksIHRydWUpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHNyY3VfZGVmZXJfZHJhaW4pO1xuJiM0MztcbiYjNDM7dm9pZCBjYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxuJiM0MztcdCAgICAgICByY3VfY2FsbGJhY2tfdCBmdW5jKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHNob3VsZF9yY3VfZGVmZXIoKSkge1xuJiM0MztcdFx0LyogQSByZS1lbnRyYW50IGNhbGxfc3JjdSgpIGR1cmluZyB0aGUgZHJhaW4gd291bGQgbGl2ZWxvY2sgaXQuICovXG4mIzQzO1x0XHRpZiAoUkVBRF9PTkNFKHNyY3VfZGVmZXJfZHJhaW5pbmcpIFx1MDAyNlx1MDAyNiAhaW5fbm1pKCkpIHtcbiYjNDM7XHRcdFx0V0FSTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSksXG4mIzQzO1x0XHRcdFx0ICBcJiMzNDtjYWxsX3NyY3UoKSByZS1lbnRlcmVkIGR1cmluZyBjYWxsYmFjayBkcmFpbjsgbGVha2luZyBjYWxsYmFja1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJocC1cdTAwM2VmdW5jID0gZnVuYztcbiYjNDM7XHRcdGlmIChsbGlzdF9hZGQoKHN0cnVjdCBsbGlzdF9ub2RlICopcmhwLCBcdTAwMjZzc3AtXHUwMDNlZGVmZXJfY2JzKSlcbiYjNDM7XHRcdFx0aXJxX3dvcmtfcXVldWUoXHUwMDI2c3NwLVx1MDAzZWRlZmVyX2l3KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEFuIE5NSSByZWFjaGluZyBoZXJlIGVudGVyZWQgd2l0aCBpcnFzIGVuYWJsZWQsIHNvIHRoZSBlbnF1ZXVlIGNhbiByYWNlLiAqL1xuJiM0MztcdFdBUk5fT05fT05DRShJU19FTkFCTEVEKENPTkZJR19QUk9WRV9SQ1UpIFx1MDAyNlx1MDAyNiBpbl9ubWkoKSk7XG4mIzQzO1xuJiM0MztcdHNyY3VfZG9fZW5xdWV1ZShzc3AsIHJocCwgZnVuYyk7XG4mIzQzO31cbiBFWFBPUlRfU1lNQk9MX0dQTChjYWxsX3NyY3UpO1xuIFxuIC8qXG5AQCAtMjYwLDYgJiM0MzszMjIsMTUgQEAgdm9pZCBzeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9zcmN1KTtcbiBcbiYjNDM7LyogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcywgdGhlbiB3YWl0IGZvciBhbGwgaW4tZmxpZ2h0IG9uZXMuICovXG4mIzQzO3ZvaWQgc3JjdV9iYXJyaWVyKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpXG4mIzQzO1x0XHRfX3NyY3VfZGVmZXJfZHJhaW4oc3NwLCBmYWxzZSk7XG4mIzQzO1x0c3luY2hyb25pemVfc3JjdShzc3ApO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHNyY3VfYmFycmllcik7XG4mIzQzO1xuIC8qXG4gICogZ2V0X3N0YXRlX3N5bmNocm9uaXplX3NyY3UgLSBQcm92aWRlIGFuIGVuZC1vZi1ncmFjZS1wZXJpb2QgY29va2llXG4gICovXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9zcmN1dHJlZS5jIGIva2VybmVsL3JjdS9zcmN1dHJlZS5jXG5pbmRleCAzMDQxMTI2NzRlOGEyLi4zNWZmYWNlNTFkNTBiIDEwMDY0NFxuLS0tIGEva2VybmVsL3JjdS9zcmN1dHJlZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvcmN1L3NyY3V0cmVlLmNcbkBAIC0yMCw2ICYjNDM7MjAsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcmNwdS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJlZW1wdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXJxX3dvcmsuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9sbGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGVfd2FpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NtcC5oXHUwMDNlXG5AQCAtNzksNiAmIzQzOzgwLDQ1IEBAIHN0YXRpYyB2b2lkIHByb2Nlc3Nfc3JjdShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuIHN0YXRpYyB2b2lkIHNyY3VfaXJxX3dvcmsoc3RydWN0IGlycV93b3JrICp3b3JrKTtcbiBzdGF0aWMgdm9pZCBzcmN1X2RlbGF5X3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcbiBcbiYjNDM7c3RydWN0IHNyY3VfZGVmZXI7XG4mIzQzO3N0YXRpYyB2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdyk7XG4mIzQzO3N0YXRpYyB2b2lkIF9fc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3Qgc3JjdV9kZWZlciAqc25kcCwgYm9vbCBndWFyZCk7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBQZXItQ1BVIGNhbGxfc3JjdSgpIGRlZmVycmFsIHN0YXRlLCBzaGFyZWQgYnkgZXZlcnkgc3JjdV9zdHJ1Y3QuICBBIGRlZmVycmVkXG4mIzQzOyAqIGNhbGxiYWNrIGlzIHN0YWdlZCBvbiBpdHMgc3JjdV9kYXRhJiMzOTtzIC1cdTAwM2VkZWZlcl9jYnM7IHRoYXQgc3JjdV9kYXRhIGlzIGNoYWluZWRcbiYjNDM7ICogdmlhIC1cdTAwM2VkZWZlcl9saW5rIG9udG8gLVx1MDAzZWxpc3QsIHdoaWNoIHRoZSBpcnFfd29yayB3YWxrcy5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBzcmN1X2RlZmVyIHtcbiYjNDM7XHRzdHJ1Y3QgbGxpc3RfaGVhZFx0bGlzdDtcbiYjNDM7XHRzdHJ1Y3QgaXJxX3dvcmtcdFx0aXc7XG4mIzQzO1x0cmF3X3NwaW5sb2NrX3RcdFx0bG9jaztcbiYjNDM7XHRib29sXHRcdFx0ZHJhaW5pbmc7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHNyY3VfZGVmZXIsIHNyY3VfZGVmZXIpID0ge1xuJiM0MztcdC5sb2NrID0gX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VEKHNyY3VfZGVmZXIubG9jayksXG4mIzQzO1x0Lml3ID0gSVJRX1dPUktfSU5JVF9IQVJEKHNyY3VfZGVmZXJfZHJhaW4pLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogRmx1c2ggcGVuZGluZyBkZWZlcnJlZCBjYWxsYmFja3Mgc28gYSBmb2xsb3dpbmcgc3JjdV9iYXJyaWVyKCkgd2FpdHMgZm9yIHRoZW0uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBzcmN1X2RlZmVyX2ZsdXNoKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgY3B1O1xuJiM0MztcbiYjNDM7XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbiYjNDM7XHRcdHN0cnVjdCBzcmN1X2RlZmVyICpzbmRwID0gXHUwMDI2cGVyX2NwdShzcmN1X2RlZmVyLCBjcHUpO1xuJiM0MztcbiYjNDM7XHRcdGlmICghbGxpc3RfZW1wdHkoXHUwMDI2c25kcC1cdTAwM2VsaXN0KSlcbiYjNDM7XHRcdFx0X19zcmN1X2RlZmVyX2RyYWluKHNuZHAsIGZhbHNlKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBJbml0aWFsaXplIFNSQ1UgcGVyLUNQVSBkYXRhLiAgTm90ZSB0aGF0IHN0YXRpY2FsbHkgYWxsb2NhdGVkXG4gICogc3JjdV9zdHJ1Y3Qgc3RydWN0dXJlcyBtaWdodCBhbHJlYWR5IGhhdmUgc3JjdV9yZWFkX2xvY2soKSBhbmRcbkBAIC0xMDcsNiAmIzQzOzE0NywxMSBAQCBzdGF0aWMgdm9pZCBpbml0X3NyY3Vfc3RydWN0X2RhdGEoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4gXHRcdHNkcC1cdTAwM2VjcHUgPSBjcHU7XG4gXHRcdElOSVRfV09SSyhcdTAwMjZzZHAtXHUwMDNld29yaywgc3JjdV9pbnZva2VfY2FsbGJhY2tzKTtcbiBcdFx0dGltZXJfc2V0dXAoXHUwMDI2c2RwLVx1MDAzZWRlbGF5X3dvcmssIHNyY3VfZGVsYXlfdGltZXIsIDApO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIC1cdTAwM2VkZWZlcl9jYnMsIC1cdTAwM2VkZWZlcl9saW5rIGFuZCAtXHUwMDNlZGVmZXJfZXhwIGFyZSB2YWxpZCB3aGVuIHplcm9lZFxuJiM0MztcdFx0ICogYW5kIGFyZSBub3QgcmVpbml0aWFsaXplZCBoZXJlLCBsZXN0IHdlIGNsb2JiZXIgY2FsbGJhY2tzIGFcbiYjNDM7XHRcdCAqIHJlZW50cmFudCBjYWxsX3NyY3UoKSBhbHJlYWR5IHN0YWdlZC4gIFNlZSBfX2NhbGxfc3JjdSgpLlxuJiM0MztcdFx0ICovXG4gXHRcdHNkcC1cdTAwM2Vzc3AgPSBzc3A7XG4gXHR9XG4gfVxuQEAgLTY5NSw3ICYjNDM7NzQwLDEyIEBAIHZvaWQgY2xlYW51cF9zcmN1X3N0cnVjdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbiBcdFx0cmV0dXJuOyAvKiBKdXN0IGxlYWsgaXQhICovXG4gXHRpZiAoV0FSTl9PTihzcmN1X3JlYWRlcnNfYWN0aXZlKHNzcCkpKVxuIFx0XHRyZXR1cm47IC8qIEp1c3QgbGVhayBpdCEgKi9cbi1cdC8qIFdhaXQgZm9yIGlycV93b3JrIHRvIGZpbmlzaCBmaXJzdCBhcyBpdCBtYXkgcXVldWUgYSBuZXcgd29yay4gKi9cbiYjNDM7XHQvKlxuJiM0MztcdCAqIERyYWluIGRlZmVycmVkIGNhbGxiYWNrcyBiZWZvcmUgc3luY2luZyAtXHUwMDNlaXJxX3dvcms6IHJlLWlzc3Vpbmcgb25lIGNhblxuJiM0MztcdCAqIHN0YXJ0IGEgZ3JhY2UgcGVyaW9kIGFuZCByZS1xdWV1ZSAtXHUwMDNlaXJxX3dvcmssIHdoaWNoIHRoZW4gc2NoZWR1bGVzXG4mIzQzO1x0ICogLVx1MDAzZXdvcmssIHNvIGJvdGggbXVzdCBiZSB3YWl0ZWQgb3V0IGFmdGVyIHRoZSBkcmFpbi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzcmN1X2RlZmVyX2ZsdXNoKCk7XG4gXHRpcnFfd29ya19zeW5jKFx1MDAyNnN1cC1cdTAwM2VpcnFfd29yayk7XG4gXHRmbHVzaF9kZWxheWVkX3dvcmsoXHUwMDI2c3VwLVx1MDAzZXdvcmspO1xuIFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuQEAgLTE0MTAsOCAmIzQzOzE0NjAsOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzcmN1X2dwX3N0YXJ0X2lmX25lZWRlZChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCxcbiAgKiBzcmN1X3JlYWRfbG9jaygpLCBhbmQgc3JjdV9yZWFkX3VubG9jaygpIHRoYXQgYXJlIGFsbCBwYXNzZWQgdGhlIHNhbWVcbiAgKiBzcmN1X3N0cnVjdCBzdHJ1Y3R1cmUuXG4gICovXG4tc3RhdGljIHZvaWQgX19jYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxuLVx0XHRcdHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgZG9fbm9ybSlcbiYjNDM7c3RhdGljIHZvaWQgc3JjdV9kb19lbnF1ZXVlKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcbiYjNDM7XHRcdFx0ICAgIHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgZG9fbm9ybSlcbiB7XG4gXHRpZiAoZGVidWdfcmN1X2hlYWRfcXVldWUocmhwKSkge1xuIFx0XHQvKiBQcm9iYWJsZSBkb3VibGUgY2FsbF9zcmN1KCksIHNvIGxlYWsgdGhlIGNhbGxiYWNrLiAqL1xuQEAgLTE0MjMsNiAmIzQzOzE0NzMsMTExIEBAIHN0YXRpYyB2b2lkIF9fY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcbiBcdCh2b2lkKXNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHNzcCwgcmhwLCBkb19ub3JtKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFRoZSBzcmN1X2NibGlzdCBhbmQgc3JjdV9ub2RlIHRyZWUgYXJlIG9ubHkgYWNjZXNzZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkXG4mIzQzOyAqIChzcmN1X2dwX3N0YXJ0X2lmX25lZWRlZCgpIGVucXVldWVzIHVuZGVyIHJhd19zcGluX2xvY2tfaXJxc2F2ZSgpIGFuZCBtYXkgd2Fsa1xuJiM0MzsgKiB0aGUgdHJlZSkuICBMaWtlIGNhbGxfcmN1KCksIF9fY2FsbF9zcmN1KCkgZGVmZXJzIHdoZW4gaW50ZXJydXB0cyBhcmUgYWxyZWFkeVxuJiM0MzsgKiBkaXNhYmxlZCwgc28gYSByZS1lbnRyYW50IGNhbGxfc3JjdSgpIC0tIGUuZy4gY2FsbF9yY3VfdGFza3NfdHJhY2UoKSBmcm9tIGFcbiYjNDM7ICogQlBGIHByb2dyYW0gLS0gY2Fubm90IGNvcnJ1cHQgdGhlIGxpc3Qgb3IgZGVhZGxvY2suXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBfX2NhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsXG4mIzQzO1x0XHRcdHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgZG9fbm9ybSlcbiYjNDM7e1xuJiM0MztcdGlmIChzaG91bGRfcmN1X2RlZmVyKCkpIHtcbiYjNDM7XHRcdHN0cnVjdCBzcmN1X2RlZmVyICpzbmRwID0gdGhpc19jcHVfcHRyKFx1MDAyNnNyY3VfZGVmZXIpO1xuJiM0MztcdFx0c3RydWN0IHNyY3VfZGF0YSAqc2RwO1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBJbnN0cnVtZW50YXRpb24gb24gdGhlIGVucXVldWUgcGF0aCBjYW4gcmUtZW50ZXIgaGVyZSBmcm9tXG4mIzQzO1x0XHQgKiBpbnNpZGUgc3JjdV9kZWZlcl9kcmFpbigpLiAgUmUtcXVldWluZyB3b3VsZCBsaXZlbG9jayB0aGVcbiYjNDM7XHRcdCAqIGRyYWluLCBzbyBkcm9wIHRoZSBjYWxsYmFjazsgYW4gTk1JIGNhbm5vdCBsb29wLCBzbyBsZXQgaXQgaW4uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChSRUFEX09OQ0Uoc25kcC1cdTAwM2VkcmFpbmluZykgXHUwMDI2XHUwMDI2ICFpbl9ubWkoKSkge1xuJiM0MztcdFx0XHRXQVJOX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSxcbiYjNDM7XHRcdFx0XHQgIFwmIzM0O2NhbGxfc3JjdSgpIHJlLWVudGVyZWQgZHVyaW5nIGNhbGxiYWNrIGRyYWluOyBsZWFraW5nIGNhbGxiYWNrXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0c2RwID0gdGhpc19jcHVfcHRyKHNzcC1cdTAwM2VzZGEpO1xuJiM0MztcdFx0cmhwLVx1MDAzZWZ1bmMgPSBmdW5jO1xuJiM0MztcdFx0aWYgKCFkb19ub3JtKVxuJiM0MztcdFx0XHRXUklURV9PTkNFKHNkcC1cdTAwM2VkZWZlcl9leHAsIHRydWUpO1xuJiM0MztcdFx0aWYgKGxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKilyaHAsIFx1MDAyNnNkcC1cdTAwM2VkZWZlcl9jYnMpKSB7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIENoYWluIHRoaXMgc3JjdV9kYXRhIGZvciB0aGUgZHJhaW4uICAtXHUwMDNlc3NwIG11c3QgYmVcbiYjNDM7XHRcdFx0ICogcHVibGlzaGVkIGhlcmU6IGRlZmVycmFsIHNraXBzIGNoZWNrX2luaXRfc3JjdV9zdHJ1Y3QoKSxcbiYjNDM7XHRcdFx0ICogc28gb24gYSBuZXZlci1pbml0aWFsaXplZCBzdGF0aWMgc3JjdV9zdHJ1Y3QgdGhlXG4mIzQzO1x0XHRcdCAqIHN0YXRpY2FsbHkgemVyb2VkIC1cdTAwM2VzZGEgc3RpbGwgaGFzIGEgTlVMTCAtXHUwMDNlc3NwLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0c2RwLVx1MDAzZXNzcCA9IHNzcDtcbiYjNDM7XHRcdFx0aWYgKGxsaXN0X2FkZChcdTAwMjZzZHAtXHUwMDNlZGVmZXJfbGluaywgXHUwMDI2c25kcC1cdTAwM2VsaXN0KSlcbiYjNDM7XHRcdFx0XHRpcnFfd29ya19xdWV1ZShcdTAwMjZzbmRwLVx1MDAzZWl3KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEFuIE5NSSByZWFjaGluZyBoZXJlIGVudGVyZWQgd2l0aCBpcnFzIGVuYWJsZWQsIHNvIHRoZSBlbnF1ZXVlIGNhbiByYWNlLiAqL1xuJiM0MztcdFdBUk5fT05fT05DRShJU19FTkFCTEVEKENPTkZJR19QUk9WRV9SQ1UpIFx1MDAyNlx1MDAyNiBpbl9ubWkoKSk7XG4mIzQzO1xuJiM0MztcdHNyY3VfZG9fZW5xdWV1ZShzc3AsIHJocCwgZnVuYywgZG9fbm9ybSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFJlLWlzc3VlIGRlZmVycmVkIGNhbGxiYWNrcyBzdHJhaWdodCB0byBzcmN1X2RvX2VucXVldWUoKSBzbyB0aGV5IGNhbm5vdCBkZWZlclxuJiM0MzsgKiBhZ2Fpbi4gIC1cdTAwM2Vsb2NrIHNlcmlhbGl6ZXMgdGhlIGRyYWluZXJzOiB0aGUgaXJxX3dvcmssIHNyY3VfZGVmZXJfZmx1c2goKSBhbmRcbiYjNDM7ICogc3JjdV9vZmZsaW5lX2RyYWluKCkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBfX3NyY3VfZGVmZXJfZHJhaW4oc3RydWN0IHNyY3VfZGVmZXIgKnNuZHAsIGJvb2wgZ3VhcmQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqc25vZGUsICpzbmV4dDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcbiYjNDM7XHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2c25kcC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0aWYgKGd1YXJkKVxuJiM0MztcdFx0V1JJVEVfT05DRShzbmRwLVx1MDAzZWRyYWluaW5nLCB0cnVlKTtcbiYjNDM7XHRsbGlzdF9mb3JfZWFjaF9zYWZlKHNub2RlLCBzbmV4dCwgbGxpc3RfZGVsX2FsbChcdTAwMjZzbmRwLVx1MDAzZWxpc3QpKSB7XG4mIzQzO1x0XHRzdHJ1Y3Qgc3JjdV9kYXRhICpzZHAgPSBjb250YWluZXJfb2Yoc25vZGUsIHN0cnVjdCBzcmN1X2RhdGEsIGRlZmVyX2xpbmspO1xuJiM0MztcdFx0c3RydWN0IHNyY3Vfc3RydWN0ICpzc3AgPSBzZHAtXHUwMDNlc3NwO1xuJiM0MztcdFx0c3RydWN0IGxsaXN0X25vZGUgKmNub2RlLCAqY25leHQ7XG4mIzQzO1x0XHRib29sIGRvX25vcm07XG4mIzQzO1xuJiM0MztcdFx0Y25vZGUgPSBsbGlzdF9kZWxfYWxsKFx1MDAyNnNkcC1cdTAwM2VkZWZlcl9jYnMpO1xuJiM0MztcdFx0ZG9fbm9ybSA9ICFSRUFEX09OQ0Uoc2RwLVx1MDAzZWRlZmVyX2V4cCk7XG4mIzQzO1x0XHRpZiAoIWRvX25vcm0pXG4mIzQzO1x0XHRcdFdSSVRFX09OQ0Uoc2RwLVx1MDAzZWRlZmVyX2V4cCwgZmFsc2UpO1xuJiM0MztcdFx0bGxpc3RfZm9yX2VhY2hfc2FmZShjbm9kZSwgY25leHQsIGNub2RlKSB7XG4mIzQzO1x0XHRcdHN0cnVjdCByY3VfaGVhZCAqcmhwID0gKHN0cnVjdCByY3VfaGVhZCAqKWNub2RlO1xuJiM0MztcbiYjNDM7XHRcdFx0cmhwLVx1MDAzZW5leHQgPSBOVUxMO1xuJiM0MztcdFx0XHRzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIHJocC1cdTAwM2VmdW5jLCBkb19ub3JtKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0aWYgKGd1YXJkKVxuJiM0MztcdFx0V1JJVEVfT05DRShzbmRwLVx1MDAzZWRyYWluaW5nLCBmYWxzZSk7XG4mIzQzO1x0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2c25kcC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIE9ubHkgdGhlIGlycV93b3JrIGRyYWluIGNhbiBiZSByZS1mZWQgYnkgaXRzIG93biByZS1pc3N1ZSwgc28gb25seSBpdCBzZXRzXG4mIzQzOyAqIC1cdTAwM2VkcmFpbmluZy4gIEEgZGlyZWN0IGRyYWluIHJlLWlzc3VlcyBvbnRvIHRoaXMgQ1BVLCBhbmQgYW55dGhpbmcgc3RhZ2VkXG4mIzQzOyAqIGR1cmluZyBpdCBpcyBwaWNrZWQgdXAgYnkgdGhhdCBDUFUmIzM5O3Mgb3duIGlycV93b3JrLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KVxuJiM0Mzt7XG4mIzQzO1x0X19zcmN1X2RlZmVyX2RyYWluKGNvbnRhaW5lcl9vZihpdywgc3RydWN0IHNyY3VfZGVmZXIsIGl3KSwgdHJ1ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIERyYWluIEBjcHUmIzM5O3MgZGVmZXJyZWQgY2FsbF9zcmN1KCkgY2FsbGJhY2tzIGZyb20gcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcygpXG4mIzQzOyAqIG9uY2UgQGNwdSBpcyBkZWFkLiAgT25lIHBhc3MgY292ZXJzIGV2ZXJ5IHNyY3Vfc3RydWN0LCBhbmQgdGhlIHJlLWlzc3VlIGxhbmRzXG4mIzQzOyAqIG9uIHRoZSBjdXJyZW50IENQVS5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgc3JjdV9vZmZsaW5lX2RyYWluKGludCBjcHUpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0X19zcmN1X2RlZmVyX2RyYWluKFx1MDAyNnBlcl9jcHUoc3JjdV9kZWZlciwgY3B1KSwgZmFsc2UpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGNhbGxfc3JjdSgpIC0gUXVldWUgYSBjYWxsYmFjayBmb3IgaW52b2NhdGlvbiBhZnRlciBhbiBTUkNVIGdyYWNlIHBlcmlvZFxuICAqIEBzc3A6IHNyY3Vfc3RydWN0IGluIHF1ZXVlIHRoZSBjYWxsYmFja1xuQEAgLTE2NzcsOSAmIzQzOzE4MzIsMTcgQEAgdm9pZCBzcmN1X2JhcnJpZXIoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4ge1xuIFx0aW50IGNwdTtcbiBcdGludCBpZHg7XG4tXHR1bnNpZ25lZCBsb25nIHMgPSByY3Vfc2VxX3NuYXAoXHUwMDI2c3NwLVx1MDAzZXNyY3Vfc3VwLVx1MDAzZXNyY3VfYmFycmllcl9zZXEpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgcztcbiBcbiBcdGNoZWNrX2luaXRfc3JjdV9zdHJ1Y3Qoc3NwKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIGJlZm9yZSBzbmFwc2hvdHRpbmcgdGhlIHNlcXVlbmNlLiAgVGhlXG4mIzQzO1x0ICogc2hhcmVkIGlycV93b3JrIG1heSBhbHNvIGRyYWluIG90aGVyIHNyY3Vfc3RydWN0cyYjMzk7LCB3aGljaCBpcyBoYXJtbGVzcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzcmN1X2RlZmVyX2ZsdXNoKCk7XG4mIzQzO1xuJiM0MztcdHMgPSByY3Vfc2VxX3NuYXAoXHUwMDI2c3NwLVx1MDAzZXNyY3Vfc3VwLVx1MDAzZXNyY3VfYmFycmllcl9zZXEpO1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZzc3AtXHUwMDNlc3JjdV9zdXAtXHUwMDNlc3JjdV9iYXJyaWVyX211dGV4KTtcbiBcdGlmIChyY3Vfc2VxX2RvbmUoXHUwMDI2c3NwLVx1MDAzZXNyY3Vfc3VwLVx1MDAzZXNyY3VfYmFycmllcl9zZXEsIHMpKSB7XG4gXHRcdHNtcF9tYigpOyAvKiBGb3JjZSBvcmRlcmluZyBmb2xsb3dpbmcgcmV0dXJuLiAqL1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdGlueS5jIGIva2VybmVsL3JjdS90aW55LmNcbmluZGV4IGRjY2NjZDZiZTk0MTEuLmJhZmZlNjYwMDQzZjUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvcmN1L3RpbnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS90aW55LmNcbkBAIC0xMSw2ICYjNDM7MTEsOCBAQFxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBsZXRpb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycV93b3JrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGxpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25vdGlmaWVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VwZGF0ZV93YWl0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuQEAgLTQyLDggJiM0Mzs0NCw5OSBAQCBzdGF0aWMgc3RydWN0IHJjdV9jdHJsYmxrIHJjdV9jdHJsYmxrID0ge1xuIFx0LmdwX3NlcVx0XHQ9IDAgLSAzMDBVTCxcbiB9O1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBUaGUgY2FsbGJhY2sgbGlzdCBpcyBvbmx5IGFjY2Vzc2VkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCwgc28gYSBjYWxsX3JjdSgpXG4mIzQzOyAqIHRoYXQgYXJyaXZlcyB3aXRoIGludGVycnVwdHMgb2ZmIHN0YWdlcyB0aGUgY2FsbGJhY2sgb24gYSBsb2NrbGVzcyBsaXN0IHRoYXRcbiYjNDM7ICogYW4gaXJxX3dvcmsgcmUtaXNzdWVzIGxhdGVyLiAgT25lIGdsb2JhbCBsaXN0IGFuZCBpcnFfd29yayBzdWZmaWNlLCBhcyBUaW55XG4mIzQzOyAqIFJDVSBpcyB1bmlwcm9jZXNzb3IuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCByY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdyk7XG4mIzQzO3N0YXRpYyBMTElTVF9IRUFEKHJjdV9kZWZlcl9saXN0KTtcbiYjNDM7c3RhdGljIHN0cnVjdCBpcnFfd29yayByY3VfZGVmZXJfaXcgPSBJUlFfV09SS19JTklUX0hBUkQocmN1X2RlZmVyX2RyYWluKTtcbiYjNDM7c3RhdGljIGJvb2wgcmN1X2RlZmVyX2RyYWluaW5nO1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogRW5xdWV1ZSBAaGVhZCBvbiB0aGUgY2FsbGJhY2sgbGlzdC4gIEFsc28gY2FsbGVkIGJ5IHJjdV9kZWZlcl9kcmFpbigpIHRvXG4mIzQzOyAqIHJlLWlzc3VlIGEgZGVmZXJyZWQgY2FsbGJhY2ssIHNvIGl0IG11c3Qgbm90IHJlLWNoZWNrIHRoZSBkZWZlcnJhbCBjb25kaXRpb24uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCByY3VfZG9fZW5xdWV1ZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMpXG4mIzQzO3tcbiYjNDM7XHRzdGF0aWMgYXRvbWljX3QgZG91YmxlZnJlZXM7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XG4mIzQzO1x0aWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKGhlYWQpKSB7XG4mIzQzO1x0XHRpZiAoYXRvbWljX2luY19yZXR1cm4oXHUwMDI2ZG91YmxlZnJlZXMpIFx1MDAzYyA0KSB7XG4mIzQzO1x0XHRcdHByX2VycihcJiMzNDslcygpOiBEb3VibGUtZnJlZWQgQ0IgJXAtXHUwMDNlJXBTKCkhISEgIFwmIzM0OywgX19mdW5jX18sIGhlYWQsIGhlYWQtXHUwMDNlZnVuYyk7XG4mIzQzO1x0XHRcdG1lbV9kdW1wX29iaihoZWFkKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGhlYWQtXHUwMDNlZnVuYyA9IGZ1bmM7XG4mIzQzO1x0aGVhZC1cdTAwM2VuZXh0ID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuJiM0MztcdCpyY3VfY3RybGJsay5jdXJ0YWlsID0gaGVhZDtcbiYjNDM7XHRyY3VfY3RybGJsay5jdXJ0YWlsID0gXHUwMDI2aGVhZC1cdTAwM2VuZXh0O1xuJiM0MztcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGlzX2lkbGVfdGFzayhjdXJyZW50KSkpIHtcbiYjNDM7XHRcdC8qIGZvcmNlIHNjaGVkdWxpbmcgZm9yIHJjdV9xcygpICovXG4mIzQzO1x0XHRyZXNjaGVkX2NwdSgwKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIF9fcmN1X2RlZmVyX2RyYWluKGJvb2wgZ3VhcmQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSwgKm5leHQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XG4mIzQzO1x0LyogQ2FsbGJhY2tzIGFyZSB1bm9yZGVyZWQsIHNvIGRyYWluIGluIGxsaXN0IG9yZGVyIHdpdGhvdXQgcmV2ZXJzaW5nLiAqL1xuJiM0MztcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbiYjNDM7XHRpZiAoZ3VhcmQpXG4mIzQzO1x0XHRXUklURV9PTkNFKHJjdV9kZWZlcl9kcmFpbmluZywgdHJ1ZSk7XG4mIzQzO1x0bGxpc3RfZm9yX2VhY2hfc2FmZShub2RlLCBuZXh0LCBsbGlzdF9kZWxfYWxsKFx1MDAyNnJjdV9kZWZlcl9saXN0KSkge1xuJiM0MztcdFx0c3RydWN0IHJjdV9oZWFkICpoZWFkID0gKHN0cnVjdCByY3VfaGVhZCAqKW5vZGU7XG4mIzQzO1xuJiM0MztcdFx0aGVhZC1cdTAwM2VuZXh0ID0gTlVMTDtcbiYjNDM7XHRcdHJjdV9kb19lbnF1ZXVlKGhlYWQsIGhlYWQtXHUwMDNlZnVuYyk7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChndWFyZClcbiYjNDM7XHRcdFdSSVRFX09OQ0UocmN1X2RlZmVyX2RyYWluaW5nLCBmYWxzZSk7XG4mIzQzO1x0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBPbmx5IHRoZSBpcnFfd29yayBkcmFpbiBjYW4gYmUgcmUtZmVkIGJ5IGl0cyBvd24gcmUtaXNzdWU7IHNlZSBUcmVlIFJDVS4gKi9cbiYjNDM7c3RhdGljIHZvaWQgcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpXG4mIzQzO3tcbiYjNDM7XHRfX3JjdV9kZWZlcl9kcmFpbih0cnVlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgY2FsbF9yY3VfZGVmZXIoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jKVxuJiM0Mzt7XG4mIzQzO1x0LyogQSByZS1lbnRyYW50IGNhbGxfcmN1KCkgZHVyaW5nIHRoZSBkcmFpbiB3b3VsZCBsaXZlbG9jayBpdDsgZHJvcCBpdC4gKi9cbiYjNDM7XHRpZiAoUkVBRF9PTkNFKHJjdV9kZWZlcl9kcmFpbmluZykgXHUwMDI2XHUwMDI2ICFpbl9ubWkoKSkge1xuJiM0MztcdFx0V0FSTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSksXG4mIzQzO1x0XHRcdCAgXCYjMzQ7Y2FsbF9yY3UoKSByZS1lbnRlcmVkIGR1cmluZyBjYWxsYmFjayBkcmFpbjsgbGVha2luZyBjYWxsYmFja1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcdGhlYWQtXHUwMDNlZnVuYyA9IGZ1bmM7XG4mIzQzO1x0aWYgKGxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKiloZWFkLCBcdTAwMjZyY3VfZGVmZXJfbGlzdCkpXG4mIzQzO1x0XHRpcnFfd29ya19xdWV1ZShcdTAwMjZyY3VfZGVmZXJfaXcpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIHNvIGEgZm9sbG93aW5nIHJjdV9iYXJyaWVyKCkgd2FpdHMgZm9yIHRoZW0uICovXG4mIzQzO3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9mbHVzaCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdF9fcmN1X2RlZmVyX2RyYWluKGZhbHNlKTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIHJjdV9iYXJyaWVyKHZvaWQpXG4ge1xuJiM0MztcdC8qIFJlZ2lzdGVyIGFueSBkZWZlcnJlZCBjYWxsYmFja3MgZmlyc3QuICovXG4mIzQzO1x0cmN1X2RlZmVyX2ZsdXNoKCk7XG4gXHR3YWl0X3JjdV9ncChjYWxsX3JjdV9odXJyeSk7XG4gfVxuIEVYUE9SVF9TWU1CT0wocmN1X2JhcnJpZXIpO1xuQEAgLTE1NywyOSAmIzQzOzI1MCwxNSBAQCBFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9yY3UpO1xuICAqL1xuIHZvaWQgY2FsbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jKVxuIHtcbi1cdHN0YXRpYyBhdG9taWNfdCBkb3VibGVmcmVlcztcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tXG4tXHRpZiAoZGVidWdfcmN1X2hlYWRfcXVldWUoaGVhZCkpIHtcbi1cdFx0aWYgKGF0b21pY19pbmNfcmV0dXJuKFx1MDAyNmRvdWJsZWZyZWVzKSBcdTAwM2MgNCkge1xuLVx0XHRcdHByX2VycihcJiMzNDslcygpOiBEb3VibGUtZnJlZWQgQ0IgJXAtXHUwMDNlJXBTKCkhISEgIFwmIzM0OywgX19mdW5jX18sIGhlYWQsIGhlYWQtXHUwMDNlZnVuYyk7XG4tXHRcdFx0bWVtX2R1bXBfb2JqKGhlYWQpO1xuLVx0XHR9XG4mIzQzO1x0aWYgKHNob3VsZF9yY3VfZGVmZXIoKSkge1xuJiM0MztcdFx0Y2FsbF9yY3VfZGVmZXIoaGVhZCwgZnVuYyk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdGhlYWQtXHUwMDNlZnVuYyA9IGZ1bmM7XG4tXHRoZWFkLVx1MDAzZW5leHQgPSBOVUxMO1xuLVxuLVx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuLVx0KnJjdV9jdHJsYmxrLmN1cnRhaWwgPSBoZWFkO1xuLVx0cmN1X2N0cmxibGsuY3VydGFpbCA9IFx1MDAyNmhlYWQtXHUwMDNlbmV4dDtcbi1cdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbiYjNDM7XHQvKiBBbiBOTUkgcmVhY2hpbmcgaGVyZSBlbnRlcmVkIHdpdGggaXJxcyBlbmFibGVkLCBzbyB0aGUgZW5xdWV1ZSBjYW4gcmFjZS4gKi9cbiYjNDM7XHRXQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSBcdTAwMjZcdTAwMjYgaW5fbm1pKCkpO1xuIFxuLVx0aWYgKHVubGlrZWx5KGlzX2lkbGVfdGFzayhjdXJyZW50KSkpIHtcbi1cdFx0LyogZm9yY2Ugc2NoZWR1bGluZyBmb3IgcmN1X3FzKCkgKi9cbi1cdFx0cmVzY2hlZF9jcHUoMCk7XG4tXHR9XG4mIzQzO1x0cmN1X2RvX2VucXVldWUoaGVhZCwgZnVuYyk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGNhbGxfcmN1KTtcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3RyZWUuYyBiL2tlcm5lbC9yY3UvdHJlZS5jXG5pbmRleCA5Njg0OGZjMWYwMmI4Li5lYjZiMTFjZmFkNDZmIDEwMDY0NFxuLS0tIGEva2VybmVsL3JjdS90cmVlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9yY3UvdHJlZS5jXG5AQCAtMjQsNiAmIzQzOzI0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlX3dhaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xsaXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvZGVidWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25taS5oXHUwMDNlXG5AQCAtMzE0OCwyMSAmIzQzOzMxNDksMjUgQEAgc3RhdGljIHZvaWQgY2hlY2tfY2Jfb3ZsZChzdHJ1Y3QgcmN1X2RhdGEgKnJkcClcbiBcdHJhd19zcGluX3VubG9ja19yY3Vfbm9kZShybnApO1xuIH1cbiBcbi1zdGF0aWMgdm9pZFxuLV9fY2FsbF9yY3VfY29tbW9uKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBsYXp5X2luKVxuJiM0MzsvKlxuJiM0MzsgKiBUaGUgY2FsbGJhY2sgbGlzdCBpcyBvbmx5IGFjY2Vzc2VkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCwgc28gYSBjYWxsX3JjdSgpXG4mIzQzOyAqIHRoYXQgYXJyaXZlcyB3aXRoIGludGVycnVwdHMgb2ZmIChzZWUgc2hvdWxkX3JjdV9kZWZlcigpKSBzdGFnZXMgdGhlIGNhbGxiYWNrXG4mIzQzOyAqIG9uIGEgcGVyLUNQVSBsbGlzdCB0aGF0IGFuIGlycV93b3JrIHJlLWlzc3VlcyBvbmNlIGludGVycnVwdHMgYXJlIG9uLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpO1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogRW5xdWV1ZSBAaGVhZCBvbiB0aGlzIENQVSYjMzk7cyByY3Vfc2VnY2JsaXN0LiAgQWxzbyBjYWxsZWQgYnkgcmN1X2RlZmVyX2RyYWluKClcbiYjNDM7ICogdG8gcmUtaXNzdWUgYSBkZWZlcnJlZCBjYWxsYmFjaywgc28gaXQgbXVzdCBub3QgcmUtY2hlY2sgdGhlIGRlZmVycmFsXG4mIzQzOyAqIGNvbmRpdGlvbi4gIEVpdGhlciBjYWxsZXIgbWF5IGhhdmUgaW50ZXJydXB0cyBhbHJlYWR5IGRpc2FibGVkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgcmN1X2RvX2VucXVldWUoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGxhenlfaW4pXG4ge1xuIFx0c3RhdGljIGF0b21pY190IGRvdWJsZWZyZWVzO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGJvb2wgbGF6eTtcbiBcdHN0cnVjdCByY3VfZGF0YSAqcmRwO1xuIFxuLVx0LyogTWlzYWxpZ25lZCByY3VfaGVhZCEgKi9cbi1cdFdBUk5fT05fT05DRSgodW5zaWduZWQgbG9uZyloZWFkIFx1MDAyNiAoc2l6ZW9mKHZvaWQgKikgLSAxKSk7XG4tXG4tXHQvKiBBdm9pZCBOVUxMIGRlcmVmZXJlbmNlIGlmIGNhbGxiYWNrIGlzIE5VTEwuICovXG4tXHRpZiAoV0FSTl9PTl9PTkNFKCFmdW5jKSlcbi1cdFx0cmV0dXJuO1xuLVxuIFx0aWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKGhlYWQpKSB7XG4gXHRcdC8qXG4gXHRcdCAqIFByb2JhYmxlIGRvdWJsZSBjYWxsX3JjdSgpLCBzbyBsZWFrIHRoZSBjYWxsYmFjay5cbkBAIC0zMjA2LDYgJiM0MzszMjExLDEwNCBAQCBfX2NhbGxfcmN1X2NvbW1vbihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgbGF6eV9pbilcbiBcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFJlLWlzc3VlIGRlZmVycmVkIGNhbGxiYWNrcyBzdHJhaWdodCB0byB0aGUgZW5xdWV1ZSBzbyB0aGV5IGNhbm5vdCBkZWZlclxuJiM0MzsgKiBhZ2Fpbi4gIC1cdTAwM2VkZWZlcl9sb2NrIHNlcmlhbGl6ZXMgdGhlIGRyYWluZXJzOiB0aGlzIENQVSYjMzk7cyBpcnFfd29yayxcbiYjNDM7ICogcmN1X2RlZmVyX2ZsdXNoKCkgYW5kIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoKS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIF9fcmN1X2RlZmVyX2RyYWluKHN0cnVjdCByY3VfZGF0YSAqcmRwLCBib29sIGd1YXJkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGxsaXN0X25vZGUgKm5vZGUsICpuZXh0O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1xuJiM0MztcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnJkcC1cdTAwM2VkZWZlcl9sb2NrLCBmbGFncyk7XG4mIzQzO1x0aWYgKGd1YXJkKVxuJiM0MztcdFx0V1JJVEVfT05DRShyZHAtXHUwMDNlZGVmZXJfZHJhaW5pbmcsIHRydWUpO1xuJiM0MztcdGxsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgbmV4dCwgbGxpc3RfZGVsX2FsbChcdTAwMjZyZHAtXHUwMDNlZGVmZXJfaGVhZCkpIHtcbiYjNDM7XHRcdHN0cnVjdCByY3VfaGVhZCAqaGVhZCA9IChzdHJ1Y3QgcmN1X2hlYWQgKilub2RlO1xuJiM0MztcbiYjNDM7XHRcdGhlYWQtXHUwMDNlbmV4dCA9IE5VTEw7XG4mIzQzO1x0XHRyY3VfZG9fZW5xdWV1ZShoZWFkLCBoZWFkLVx1MDAzZWZ1bmMsIGZhbHNlKTtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKGd1YXJkKVxuJiM0MztcdFx0V1JJVEVfT05DRShyZHAtXHUwMDNlZGVmZXJfZHJhaW5pbmcsIGZhbHNlKTtcbiYjNDM7XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZyZHAtXHUwMDNlZGVmZXJfbG9jaywgZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBPbmx5IHRoZSBpcnFfd29yayBkcmFpbiBjYW4gYmUgcmUtZmVkIGJ5IGl0cyBvd24gcmUtaXNzdWUsIHNvIG9ubHkgaXQgc2V0c1xuJiM0MzsgKiAtXHUwMDNlZGVmZXJfZHJhaW5pbmcuICBBIGRpcmVjdCBkcmFpbiByZS1pc3N1ZXMgb250byB0aGlzIENQVSwgYW5kIGFueXRoaW5nXG4mIzQzOyAqIHN0YWdlZCBkdXJpbmcgaXQgaXMgcGlja2VkIHVwIGJ5IHRoYXQgQ1BVJiMzOTtzIG93biBpcnFfd29yay5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KVxuJiM0Mzt7XG4mIzQzO1x0X19yY3VfZGVmZXJfZHJhaW4oY29udGFpbmVyX29mKGl3LCBzdHJ1Y3QgcmN1X2RhdGEsIGRlZmVyX3dvcmspLCB0cnVlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogU3RhZ2UgQGhlYWQgZm9yIHRoaXMgQ1BVJiMzOTtzIGlycV93b3JrIHdoZW4gY2FsbF9yY3UoKSBjYW5ub3QgZW5xdWV1ZSBub3cuICovXG4mIzQzO3N0YXRpYyB2b2lkIGNhbGxfcmN1X2RlZmVyKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByY3VfZGF0YSAqcmRwID0gdGhpc19jcHVfcHRyKFx1MDAyNnJjdV9kYXRhKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJbnN0cnVtZW50YXRpb24gb24gdGhlIGVucXVldWUgcGF0aCBjYW4gcmUtZW50ZXIgaGVyZSBmcm9tIGluc2lkZVxuJiM0MztcdCAqIHJjdV9kZWZlcl9kcmFpbigpLiAgUmUtcXVldWluZyB3b3VsZCBsaXZlbG9jayB0aGUgZHJhaW4sIHNvIGRyb3AgdGhlXG4mIzQzO1x0ICogY2FsbGJhY2s7IGFuIE5NSSBpcyBvbmUtc2hvdCBhbmQgY2Fubm90IGxvb3AsIHNvIGxldCBpdCB0aHJvdWdoLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChSRUFEX09OQ0UocmRwLVx1MDAzZWRlZmVyX2RyYWluaW5nKSBcdTAwMjZcdTAwMjYgIWluX25taSgpKSB7XG4mIzQzO1x0XHRXQVJOX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSxcbiYjNDM7XHRcdFx0ICBcJiMzNDtjYWxsX3JjdSgpIHJlLWVudGVyZWQgZHVyaW5nIGNhbGxiYWNrIGRyYWluOyBsZWFraW5nIGNhbGxiYWNrXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1x0aGVhZC1cdTAwM2VmdW5jID0gZnVuYztcbiYjNDM7XHRpZiAobGxpc3RfYWRkKChzdHJ1Y3QgbGxpc3Rfbm9kZSAqKWhlYWQsIFx1MDAyNnJkcC1cdTAwM2VkZWZlcl9oZWFkKSlcbiYjNDM7XHRcdGlycV93b3JrX3F1ZXVlKFx1MDAyNnJkcC1cdTAwM2VkZWZlcl93b3JrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUmVnaXN0ZXIgcGVuZGluZyBkZWZlcnJlZCBjYWxsYmFja3MgaW50byB0aGUgY2FsbGJhY2sgbGlzdHMgc28gYSBmb2xsb3dpbmdcbiYjNDM7ICogcmN1X2JhcnJpZXIoKSB3YWl0cyBmb3IgdGhlbS4gIFRoaXMgcnVucyBiZWZvcmUgcmN1X2JhcnJpZXIoKSBzY2FucyB0aGVcbiYjNDM7ICogbGlzdHMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCByY3VfZGVmZXJfZmx1c2godm9pZClcbiYjNDM7e1xuJiM0MztcdGludCBjcHU7XG4mIzQzO1xuJiM0MztcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuJiM0MztcdFx0c3RydWN0IHJjdV9kYXRhICpyZHAgPSBwZXJfY3B1X3B0cihcdTAwMjZyY3VfZGF0YSwgY3B1KTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWxsaXN0X2VtcHR5KFx1MDAyNnJkcC1cdTAwM2VkZWZlcl9oZWFkKSlcbiYjNDM7XHRcdFx0X19yY3VfZGVmZXJfZHJhaW4ocmRwLCBmYWxzZSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZFxuJiM0MztfX2NhbGxfcmN1X2NvbW1vbihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgbGF6eV9pbilcbiYjNDM7e1xuJiM0MztcdC8qIE1pc2FsaWduZWQgcmN1X2hlYWQhICovXG4mIzQzO1x0V0FSTl9PTl9PTkNFKCh1bnNpZ25lZCBsb25nKWhlYWQgXHUwMDI2IChzaXplb2Yodm9pZCAqKSAtIDEpKTtcbiYjNDM7XG4mIzQzO1x0LyogQXZvaWQgTlVMTCBkZXJlZmVyZW5jZSBpZiBjYWxsYmFjayBpcyBOVUxMLiAqL1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UoIWZ1bmMpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAoc2hvdWxkX3JjdV9kZWZlcigpKSB7XG4mIzQzO1x0XHRjYWxsX3JjdV9kZWZlcihoZWFkLCBmdW5jKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEFuIE5NSSByZWFjaGluZyBoZXJlIGVudGVyZWQgd2l0aCBpcnFzIGVuYWJsZWQsIHNvIHRoZSBlbnF1ZXVlIGNhbiByYWNlLiAqL1xuJiM0MztcdFdBUk5fT05fT05DRShJU19FTkFCTEVEKENPTkZJR19QUk9WRV9SQ1UpIFx1MDAyNlx1MDAyNiBpbl9ubWkoKSk7XG4mIzQzO1xuJiM0MztcdHJjdV9kb19lbnF1ZXVlKGhlYWQsIGZ1bmMsIGxhenlfaW4pO1xuJiM0Mzt9XG4mIzQzO1xuICNpZmRlZiBDT05GSUdfUkNVX0xBWllcbiBzdGF0aWMgYm9vbCBlbmFibGVfcmN1X2xhenkgX19yZWFkX21vc3RseSA9ICFJU19FTkFCTEVEKENPTkZJR19SQ1VfTEFaWV9ERUZBVUxUX09GRik7XG4gbW9kdWxlX3BhcmFtKGVuYWJsZV9yY3VfbGF6eSwgYm9vbCwgMDQ0NCk7XG5AQCAtMzg5Niw4ICYjNDM7Mzk5OSwxMiBAQCB2b2lkIHJjdV9iYXJyaWVyKHZvaWQpXG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0dW5zaWduZWQgbG9uZyBnc2VxO1xuIFx0c3RydWN0IHJjdV9kYXRhICpyZHA7XG4tXHR1bnNpZ25lZCBsb25nIHMgPSByY3Vfc2VxX3NuYXAoXHUwMDI2cmN1X3N0YXRlLmJhcnJpZXJfc2VxdWVuY2UpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgcztcbiBcbiYjNDM7XHQvKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIGJlZm9yZSBzbmFwc2hvdHRpbmcgdGhlIHNlcXVlbmNlLiAqL1xuJiM0MztcdHJjdV9kZWZlcl9mbHVzaCgpO1xuJiM0MztcbiYjNDM7XHRzID0gcmN1X3NlcV9zbmFwKFx1MDAyNnJjdV9zdGF0ZS5iYXJyaWVyX3NlcXVlbmNlKTtcbiBcdHJjdV9iYXJyaWVyX3RyYWNlKFRQUyhcJiMzNDtCZWdpblwmIzM0OyksIC0xLCBzKTtcbiBcbiBcdC8qIFRha2UgbXV0ZXggdG8gc2VyaWFsaXplIGNvbmN1cnJlbnQgcmN1X2JhcnJpZXIoKSByZXF1ZXN0cy4gKi9cbkBAIC00MjMxLDYgJiM0Mzs0MzM4LDEwIEBAIHJjdV9ib290X2luaXRfcGVyY3B1X2RhdGEoaW50IGNwdSlcbiBcdHJkcC1cdTAwM2VyY3Vfb25sX2dwX3N0YXRlID0gUkNVX0dQX0NMRUFORUQ7XG4gXHRyZHAtXHUwMDNlbGFzdF9zY2hlZF9jbG9jayA9IGppZmZpZXM7XG4gXHRyZHAtXHUwMDNlY3B1ID0gY3B1O1xuJiM0MztcdGluaXRfbGxpc3RfaGVhZChcdTAwMjZyZHAtXHUwMDNlZGVmZXJfaGVhZCk7XG4mIzQzO1x0cmF3X3NwaW5fbG9ja19pbml0KFx1MDAyNnJkcC1cdTAwM2VkZWZlcl9sb2NrKTtcbiYjNDM7XHQvKiBIYXJkIGlycV93b3JrIHNvIHRoZSByZS1pc3N1ZSBydW5zIHByb21wdGx5LiAqL1xuJiM0MztcdHJkcC1cdTAwM2VkZWZlcl93b3JrID0gSVJRX1dPUktfSU5JVF9IQVJEKHJjdV9kZWZlcl9kcmFpbik7XG4gXHRyY3VfYm9vdF9pbml0X25vY2JfcGVyY3B1X2RhdGEocmRwKTtcbiB9XG4gXG5AQCAtNDUyOCw2ICYjNDM7NDYzOSwxNiBAQCB2b2lkIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoaW50IGNwdSlcbiBcdHN0cnVjdCByY3VfZGF0YSAqcmRwID0gcGVyX2NwdV9wdHIoXHUwMDI2cmN1X2RhdGEsIGNwdSk7XG4gXHRib29sIG5lZWR3YWtlO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogQ2FsbGJhY2tzIHRoZSBvdXRnb2luZyBDUFUgZGVmZXJyZWQgbGF0ZSBpbiB0aGUgb2ZmbGluZSBwYXRoIChwYXN0IHRoZVxuJiM0MztcdCAqIHBvaW50IGl0cyBpcnFfd29yayBjYW4gcnVuKSBzaXQgb24gLVx1MDAzZWRlZmVyX2hlYWQsIHdoaWNoIHRoZSAtXHUwMDNlY2JsaXN0XG4mIzQzO1x0ICogbWlncmF0aW9uIGJlbG93IGRvZXMgbm90IGNvdmVyLiAgRHJhaW4gdGhlbSBoZXJlLCBiZWZvcmUgdGhlIGVhcmx5XG4mIzQzO1x0ICogcmV0dXJuczsgdGhlIHJlLWlzc3VlIGxhbmRzIG9uIHRoaXMgQ1BVLlxuJiM0MztcdCAqL1xuJiM0MztcdF9fcmN1X2RlZmVyX2RyYWluKHJkcCwgZmFsc2UpO1xuJiM0MztcdC8qIExpa2V3aXNlIGZvciB0aGUgb3V0Z29pbmcgQ1BVJiMzOTtzIGRlZmVycmVkIGNhbGxfc3JjdSgpIGNhbGxiYWNrcy4gKi9cbiYjNDM7XHRzcmN1X29mZmxpbmVfZHJhaW4oY3B1KTtcbiYjNDM7XG4gXHRpZiAocmN1X3JkcF9pc19vZmZsb2FkZWQocmRwKSlcbiBcdFx0cmV0dXJuO1xuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdHJlZS5oIGIva2VybmVsL3JjdS90cmVlLmhcbmluZGV4IGVlZGZhNDMwNTllODAuLmI3Y2FjN2ExM2I0ZjIgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvcmN1L3RyZWUuaFxuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS90cmVlLmhcbkBAIC0yMjksNiAmIzQzOzIyOSwxMiBAQCBzdHJ1Y3QgcmN1X2RhdGEge1xuIFx0c3RydWN0IHJjdV9oZWFkIGJhcnJpZXJfaGVhZDtcbiBcdGludCBleHBfd2F0Y2hpbmdfc25hcDtcdFx0LyogRG91YmxlLWNoZWNrIG5lZWQgZm9yIElQSS4gKi9cbiBcbiYjNDM7XHQvKiBEZWZlcnJhbCBvZiBhbiBOTUkvcmVlbnRyYW50IGNhbGxfcmN1KCk7IHNlZSBfX2NhbGxfcmN1X2NvbW1vbigpLiAqL1xuJiM0MztcdHN0cnVjdCBsbGlzdF9oZWFkIGRlZmVyX2hlYWQ7XG4mIzQzO1x0c3RydWN0IGlycV93b3JrIGRlZmVyX3dvcms7XG4mIzQzO1x0cmF3X3NwaW5sb2NrX3QgZGVmZXJfbG9jaztcbiYjNDM7XHRib29sIGRlZmVyX2RyYWluaW5nO1xuJiM0MztcbiBcdC8qIDUpIENhbGxiYWNrIG9mZmxvYWRpbmcuICovXG4gI2lmZGVmIENPTkZJR19SQ1VfTk9DQl9DUFVcbiBcdHN0cnVjdCBzd2FpdF9xdWV1ZV9oZWFkIG5vY2JfY2Jfd3E7IC8qIEZvciBub2NiIGt0aHJlYWRzIHRvIHNsZWVwIG9uLiAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JjdV9yZWVudHJ5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yY3VfcmVlbnRyeS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZmE4MTNkMWQ0OTJiNlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmN1X3JlZW50cnkuY1xuQEAgLTAsMCAmIzQzOzEsOTUgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LypcbiYjNDM7ICogRXhlcmNpc2UgcmUtZW50cnkgaW50byBjYWxsX3NyY3UoKSBmcm9tIEJQRjsgc2VlIHByb2dzL3JjdV9yZWVudHJ5LmMuXG4mIzQzOyAqXG4mIzQzOyAqIE9uIGEga2VybmVsIHdpdGhvdXQgdGhlIGNhbGxfc3JjdSgpIGFueS1jb250ZXh0IGZpeCB0aGUgbmVzdGVkIGNhbGxcbiYjNDM7ICogc2VsZi1kZWFkbG9ja3Mgb24gdGhlIHNyY3VfZGF0YSBsb2NrLCBzbyB0aGlzIGhhbmdzIHJhdGhlciB0aGFuIGZhaWxzLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBfR05VX1NPVVJDRVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzY2hlZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O3JjdV9yZWVudHJ5LnNrZWwuaFwmIzM0O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBzeXNfcGlkZmRfb3BlbihwaWRfdCBwaWQsIHVuc2lnbmVkIGludCBmbGFncylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBzeXNjYWxsKF9fTlJfcGlkZmRfb3BlbiwgcGlkLCBmbGFncyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFRpbnkgUkNVIGJ1aWxkcyBoYXZlIG5vIHJjdV9zZWdjYmxpc3RfZW5xdWV1ZSgpIHRvIGF0dGFjaCB0by4gKi9cbiYjNDM7c3RhdGljIGJvb2wgaGF2ZV9hdHRhY2hfdGFyZ2V0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGJ1ZlsyNTZdO1xuJiM0MztcdGJvb2wgZm91bmQgPSBmYWxzZTtcbiYjNDM7XHRGSUxFICpmO1xuJiM0MztcbiYjNDM7XHRmID0gZm9wZW4oXCYjMzQ7L3Byb2Mva2FsbHN5bXNcJiMzNDssIFwmIzM0O3JcJiMzNDspO1xuJiM0MztcdGlmICghZilcbiYjNDM7XHRcdHJldHVybiB0cnVlO1x0LyogY2Fubm90IHRlbGw7IGxldCB0aGUgYXR0YWNoIGRlY2lkZSAqL1xuJiM0MztcdHdoaWxlIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmKSkge1xuJiM0MztcdFx0aWYgKHN0cnN0cihidWYsIFwmIzM0OyByY3Vfc2VnY2JsaXN0X2VucXVldWVcXG5cJiMzNDspKSB7XG4mIzQzO1x0XHRcdGZvdW5kID0gdHJ1ZTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdGZjbG9zZShmKTtcbiYjNDM7XHRyZXR1cm4gZm91bmQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgdGVzdF9yY3VfcmVlbnRyeSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJjdV9yZWVudHJ5ICpza2VsO1xuJiM0MztcdGludCBlcnIsIHBpZGZkID0gLTEsIG1hcF9mZDtcbiYjNDM7XHRjcHVfc2V0X3Qgc2V0LCBvbGRfc2V0O1xuJiM0MztcdGJvb2wgYWZmaW5pdHlfc2F2ZWQ7XG4mIzQzO1x0X191NjQgdmFsID0gMTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFoYXZlX2F0dGFjaF90YXJnZXQoKSkge1xuJiM0MztcdFx0dGVzdF9fc2tpcCgpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2tlbCA9IHJjdV9yZWVudHJ5X19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O3NrZWxfb3Blbl9hbmRfbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGVyciA9IHJjdV9yZWVudHJ5X19hdHRhY2goc2tlbCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtza2VsX2F0dGFjaFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0LyogS2VlcCB0aGUgcmUtZW50cnkgb24gYSBzaW5nbGUgQ1BVLiAqL1xuJiM0MztcdGFmZmluaXR5X3NhdmVkID0gIXNjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihvbGRfc2V0KSwgXHUwMDI2b2xkX3NldCk7XG4mIzQzO1x0Q1BVX1pFUk8oXHUwMDI2c2V0KTtcbiYjNDM7XHRDUFVfU0VUKDAsIFx1MDAyNnNldCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soc2NoZWRfc2V0YWZmaW5pdHkoMCwgc2l6ZW9mKHNldCksIFx1MDAyNnNldCksIFwmIzM0O3NldGFmZmluaXR5XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRwaWRmZCA9IHN5c19waWRmZF9vcGVuKGdldHBpZCgpLCAwKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShwaWRmZCwgMCwgXCYjMzQ7cGlkZmRfb3BlblwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIHJlc3RvcmU7XG4mIzQzO1x0bWFwX2ZkID0gYnBmX21hcF9fZmQoc2tlbC1cdTAwM2VtYXBzLnRhc2tfc3RnKTtcbiYjNDM7XHRlcnIgPSBicGZfbWFwX3VwZGF0ZV9lbGVtKG1hcF9mZCwgXHUwMDI2cGlkZmQsIFx1MDAyNnZhbCwgQlBGX05PRVhJU1QpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7Ym9vdF9jcmVhdGVcJiMzNDspKVxuJiM0MztcdFx0Z290byByZXN0b3JlO1xuJiM0MztcbiYjNDM7XHQvKiBBcm0gdGhlIGhhbmRsZXIgZm9yIHRoaXMgdGhyZWFkLCB0aGVuIHRyaWdnZXIgY2FsbF9yY3VfdGFza3NfdHJhY2UoKS4gKi9cbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2V0YXJnZXRfcGlkID0gc3lzY2FsbChfX05SX2dldHRpZCk7XG4mIzQzO1x0ZXJyID0gYnBmX21hcF9kZWxldGVfZWxlbShtYXBfZmQsIFx1MDAyNnBpZGZkKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O2Jvb3RfZGVsZXRlXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0LyogT25seSBUcmVlIFNSQ1UgZW5xdWV1ZXMgdmlhIHJjdV9zZWdjYmxpc3RfZW5xdWV1ZSgpOyBza2lwIGVsc2V3aGVyZS4gKi9cbiYjNDM7XHRpZiAoIXNrZWwtXHUwMDNlYnNzLVx1MDAzZWhpdHMpIHtcbiYjNDM7XHRcdHRlc3RfX3NraXAoKTtcbiYjNDM7XHRcdGdvdG8gcmVzdG9yZTtcbiYjNDM7XHR9XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWdldF9lcnJzLCAwLCBcJiMzNDtuZXN0ZWRfc3RvcmFnZV9nZXRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VkZWxfZXJycywgMCwgXCYjMzQ7bmVzdGVkX3N0b3JhZ2VfZGVsZXRlXCYjMzQ7KTtcbiYjNDM7cmVzdG9yZTpcbiYjNDM7XHRpZiAoYWZmaW5pdHlfc2F2ZWQpXG4mIzQzO1x0XHRzY2hlZF9zZXRhZmZpbml0eSgwLCBzaXplb2Yob2xkX3NldCksIFx1MDAyNm9sZF9zZXQpO1xuJiM0MztvdXQ6XG4mIzQzO1x0aWYgKHBpZGZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKHBpZGZkKTtcbiYjNDM7XHRyY3VfcmVlbnRyeV9fZGVzdHJveShza2VsKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yY3VfcmVlbnRyeS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JjdV9yZWVudHJ5LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi40N2EzNmY3MDRjZjNlXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmN1X3JlZW50cnkuY1xuQEAgLTAsMCAmIzQzOzEsNTEgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LypcbiYjNDM7ICogUmUtZW50ZXIgY2FsbF9zcmN1KCkgZnJvbSBhIEJQRiBwcm9ncmFtLiAgZmVudHJ5IG9uIHJjdV9zZWdjYmxpc3RfZW5xdWV1ZSgpXG4mIzQzOyAqIGZpcmVzIGluc2lkZSBjYWxsX3NyY3UoKSYjMzk7cyBlbnF1ZXVlIChyZWFjaGVkIGZyb20gc3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoKVxuJiM0MzsgKiB3aXRoIHRoZSBzcmN1X2RhdGEgLVx1MDAzZWxvY2sgaGVsZCk7IHRoZSBoYW5kbGVyIHRoZW4gY2FsbHMgY2FsbF9yY3VfdGFza3NfdHJhY2UoKVxuJiM0MzsgKiAtLSBpdHNlbGYgY2FsbF9zcmN1KCkgb24gcmN1X3Rhc2tzX3RyYWNlX3NyY3Vfc3RydWN0IC0tIHJlLWVudGVyaW5nIHRoZSBzYW1lXG4mIzQzOyAqIHNyY3VfZGF0YSBvbiB0aGUgc2FtZSBDUFUuXG4mIzQzOyAqL1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt2bWxpbnV4LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbiYjNDM7XG4mIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4mIzQzO1xuJiM0MztzdHJ1Y3Qge1xuJiM0MztcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfVEFTS19TVE9SQUdFKTtcbiYjNDM7XHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7XG4mIzQzO1x0X190eXBlKGtleSwgaW50KTtcbiYjNDM7XHRfX3R5cGUodmFsdWUsIF9fdTY0KTtcbiYjNDM7fSB0YXNrX3N0ZyBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuJiM0MztcbiYjNDM7aW50IHRhcmdldF9waWQ7XG4mIzQzO2ludCBoaXRzO1xuJiM0MztpbnQgZ2V0X2VycnM7XG4mIzQzO2ludCBkZWxfZXJycztcbiYjNDM7aW50IGRvbmU7XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7ZmVudHJ5L3JjdV9zZWdjYmxpc3RfZW5xdWV1ZVwmIzM0OylcbiYjNDM7aW50IEJQRl9QUk9HKHJlZW50ZXIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cjtcbiYjNDM7XG4mIzQzO1x0aWYgKGRvbmUgfHwgIXRhcmdldF9waWQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0Y3VyID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XG4mIzQzO1x0aWYgKGN1ci1cdTAwM2VwaWQgIT0gdGFyZ2V0X3BpZClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHQvKiBJc3N1ZSB0aGUgbmVzdGVkIGNhbGwgZXhhY3RseSBvbmNlLCBzbyB0aGUgdGVzdCBpcyBkZXRlcm1pbmlzdGljLiAqL1xuJiM0MztcdGRvbmUgPSAxO1xuJiM0MztcdF9fc3luY19mZXRjaF9hbmRfYWRkKFx1MDAyNmhpdHMsIDEpO1xuJiM0MztcbiYjNDM7XHQvKiBSZS1lbnRlciB2aWEgYSB0YXNrLXN0b3JhZ2UgZGVsZXRlLCB3aGljaCBjYWxscyBjYWxsX3JjdV90YXNrc190cmFjZSgpLiAqL1xuJiM0MztcdGlmICghYnBmX3Rhc2tfc3RvcmFnZV9nZXQoXHUwMDI2dGFza19zdGcsIGN1ciwgMCwgQlBGX0xPQ0FMX1NUT1JBR0VfR0VUX0ZfQ1JFQVRFKSlcbiYjNDM7XHRcdF9fc3luY19mZXRjaF9hbmRfYWRkKFx1MDAyNmdldF9lcnJzLCAxKTtcbiYjNDM7XHRlbHNlIGlmIChicGZfdGFza19zdG9yYWdlX2RlbGV0ZShcdTAwMjZ0YXNrX3N0ZywgY3VyKSlcbiYjNDM7XHRcdF9fc3luY19mZXRjaF9hbmRfYWRkKFx1MDAyNmRlbF9lcnJzLCAxKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMzozMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJPVkVfTE9DS0lORyYjMzQ7LAogICAgJiMzNDtSQ1VfVE9SVFVSRV9URVNUJiMzNDssCiAgICAmIzM0O1BFUkZfRVZFTlRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmN1X2JhcnJpZXImIzM0OywKICAgICYjMzQ7c3JjdV9iYXJyaWVyJiMzNDssCiAgICAmIzM0O3NyY3Vfb2ZmbGluZV9kcmFpbiYjMzQ7LAogICAgJiMzNDtyY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzJiMzNDssCiAgICAmIzM0O3NyY3VfZGVmZXJfZHJhaW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBSQ1UgYW5kIFNSQ1UgbG9naWMgdG8gZGVmZXIgYGNhbGxfcmN1KClgIGFuZCBgY2FsbF9zcmN1KClgIGNhbGxiYWNrcyB3aGVuIGludGVycnVwdHMgYXJlIGRpc2FibGVkLiBUaGlzIHByZXZlbnRzIGRlYWRsb2NrcyBvciBsaXN0IGNvcnJ1cHRpb24gZHVyaW5nIHJlLWVudHJhbnQgY2FsbHMgKGUuZy4sIGZyb20gQlBGIHByb2dyYW1zIG9yIE5NSXMpLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGRlZmVycmFsIG1lY2hhbmlzbSB1c2luZyBgaXJxX3dvcmtgIGFuZCBsb2NrbGVzcyBsaXN0cy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwsIHJlYWNoYWJsZSwgYW5kIGFmZmVjdCBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk0ZDIyYzY3NzE4N2YyZTZkYTk2ZDdmMzhhN2EyY2JlMTA5MzY2YjAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyA1IDEzOjMxOjM5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcmN1dGlueS5oIGIvaW5jbHVkZS9saW51eC9zcmN1dGlueS5oCmluZGV4IGZiY2YxM2JjMTJkMTUuLmEwZTU0ZDkxODJiYWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3JjdXRpbnkuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NyY3V0aW55LmgKQEAgLTEyLDYgJiM0MzsxMiw3IEBACiAjZGVmaW5lIF9MSU5VWF9TUkNVX1RJTllfSAogCiAjaW5jbHVkZSAmbHQ7bGludXgvaXJxX3dvcmtfdHlwZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbGxpc3QuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zd2FpdC5oJmd0OwogCiBzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgewpAQCAtMjYsNiAmIzQzOzI3LDggQEAgc3RydWN0IHNyY3Vfc3RydWN0IHsKIAlzdHJ1Y3QgcmN1X2hlYWQgKipzcmN1X2NiX3RhaWw7CS8qIFBlbmRpbmcgY2FsbGJhY2tzOiBUYWlsLiAqLwogCXN0cnVjdCB3b3JrX3N0cnVjdCBzcmN1X3dvcms7CS8qIEZvciBkcml2aW5nIGdyYWNlIHBlcmlvZHMuICovCiAJc3RydWN0IGlycV93b3JrIHNyY3VfaXJxX3dvcms7CS8qIERlZmVyIHNjaGVkdWxlX3dvcmsoKSB0byBpcnEgd29yay4gKi8KJiM0MzsJc3RydWN0IGxsaXN0X2hlYWQgZGVmZXJfY2JzOwkvKiBDYWxsYmFja3MgZGVmZXJyZWQgb24gcmUtZW50cnkuICovCiYjNDM7CXN0cnVjdCBpcnFfd29yayBkZWZlcl9pdzsJCS8qIFJlZ2lzdGVycyBkZWZlcl9jYnMgbGF0ZXIuICovCiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKIAlzdHJ1Y3QgbG9ja2RlcF9tYXAgZGVwX21hcDsKICNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgKi8KQEAgLTMzLDYgJiM0MzszNiw3IEBAIHN0cnVjdCBzcmN1X3N0cnVjdCB7CiAKIHZvaWQgc3JjdV9kcml2ZV9ncChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndwKTsKIHZvaWQgc3JjdV90aW55X2lycV93b3JrKHN0cnVjdCBpcnFfd29yayAqaXJxX3dvcmspOwomIzQzO3ZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKmlycV93b3JrKTsKIAogI2RlZmluZSBfX1NSQ1VfU1RSVUNUX0lOSVQobmFtZSwgX19pZ25vcmVkLCBfX19pZ25vcmVkLCBfX19faWdub3JlZCkJXAogewkJCQkJCQkJCVwKQEAgLTQwLDYgJiM0Mzs0NCw5IEBAIHZvaWQgc3JjdV90aW55X2lycV93b3JrKHN0cnVjdCBpcnFfd29yayAqaXJxX3dvcmspOwogCS5zcmN1X2NiX3RhaWwgPSAmYW1wO25hbWUuc3JjdV9jYl9oZWFkLAkJCQlcCiAJLnNyY3Vfd29yayA9IF9fV09SS19JTklUSUFMSVpFUihuYW1lLnNyY3Vfd29yaywgc3JjdV9kcml2ZV9ncCksCVwKIAkuc3JjdV9pcnFfd29yayA9IHsgLmZ1bmMgPSBzcmN1X3RpbnlfaXJxX3dvcmsgfSwJCVwKJiM0MzsJLmRlZmVyX2NicyA9IExMSVNUX0hFQURfSU5JVChuYW1lLmRlZmVyX2NicyksCQkJXAomIzQzOwkuZGVmZXJfaXcgPSB7IC5ub2RlID0geyAudV9mbGFncyA9IElSUV9XT1JLX0hBUkRfSVJRIH0sCQlcCiYjNDM7CQkgICAgICAuZnVuYyA9IHNyY3VfZGVmZXJfZHJhaW4gfSwJCQlcCiAJX19TUkNVX0RFUF9NQVBfSU5JVChuYW1lKQkJCQkJXAogfQogCkBAIC0xMzEsMTAgJiM0MzsxMzgsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3luY2hyb25pemVfc3JjdV9leHBlZGl0ZWQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApCiAJc3luY2hyb25pemVfc3JjdShzc3ApOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc3JjdV9iYXJyaWVyKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKQotewotCXN5bmNocm9uaXplX3NyY3Uoc3NwKTsKLX0KJiM0Mzt2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzcmN1X2V4cGVkaXRlX2N1cnJlbnQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApIHsgfQogI2RlZmluZSBzcmN1X2NoZWNrX3JlYWRfZmxhdm9yKHNzcCwgcmVhZF9mbGF2b3IpIGRvIHsgfSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3JjdXRyZWUuaCBiL2luY2x1ZGUvbGludXgvc3JjdXRyZWUuaAppbmRleCA3NWU1NGU0Zjk2M2ZhLi4wOWE5YzhmNGE2ZDI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NyY3V0cmVlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zcmN1dHJlZS5oCkBAIC0xMyw2ICYjNDM7MTMsOCBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvcmN1X25vZGVfdHJlZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2NvbXBsZXRpb24uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaXJxX3dvcmtfdHlwZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbGxpc3QuaCZndDsKIAogc3RydWN0IHNyY3Vfbm9kZTsKIHN0cnVjdCBzcmN1X3N0cnVjdDsKQEAgLTQxLDYgJiM0Mzs0Myw5IEBAIHN0cnVjdCBzcmN1X2RhdGEgewogCWJvb2wgc3JjdV9jYmxpc3RfaW52b2tpbmc7CQkvKiBJbnZva2luZyB0aGVzZSBDQnM/ICovCiAJc3RydWN0IHRpbWVyX2xpc3QgZGVsYXlfd29yazsJCS8qIERlbGF5IGZvciBDQiBpbnZva2luZyAqLwogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwkJLyogQ29udGV4dCBmb3IgQ0IgaW52b2tpbmcuICovCiYjNDM7CXN0cnVjdCBsbGlzdF9oZWFkIGRlZmVyX2NiczsJCS8qIENhbGxiYWNrcyBkZWZlcnJlZCBvbiByZS1lbnRyeS4gKi8KJiM0MzsJc3RydWN0IGxsaXN0X25vZGUgZGVmZXJfbGluazsJCS8qIExpbmtzIG9udG8gdGhlIHBlci1DUFUgZGVmZXJyYWwgZHJhaW4gbGlzdCAqLwomIzQzOwlib29sIGRlZmVyX2V4cDsJCQkJLyogQSBkZWZlcnJlZCBjYWxsYmFjayBhc2tlZCB0byBleHBlZGl0ZS4gKi8KIAlzdHJ1Y3QgcmN1X2hlYWQgc3JjdV9iYXJyaWVyX2hlYWQ7CS8qIEZvciBzcmN1X2JhcnJpZXIoKSB1c2UuICovCiAJc3RydWN0IHJjdV9oZWFkIHNyY3VfZWNfaGVhZDsJCS8qIEZvciBzcmN1X2V4cGVkaXRlX2N1cnJlbnQoKSB1c2UuICovCiAJaW50IHNyY3VfZWNfc3RhdGU7CQkJLyogIFN0YXRlIGZvciBzcmN1X2V4cGVkaXRlX2N1cnJlbnQoKS4gKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvS2NvbmZpZyBiL2tlcm5lbC9yY3UvS2NvbmZpZwppbmRleCAzMzJkZjdhN2E2MzQ3Li5iYzk0ODNjMGI1ZDg0IDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1L0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS9LY29uZmlnCkBAIC0xNzUsNiAmIzQzOzE3NSwxMiBAQCBjb25maWcgUkNVX1NUQUxMX0NPTU1PTgogY29uZmlnIFJDVV9ORUVEX1NFR0NCTElTVAogCWRlZl9ib29sICggVFJFRV9SQ1UgfHwgVFJFRV9TUkNVIHx8IFRBU0tTX1JDVV9HRU5FUklDICkKIAomIzQzOyMgVGhlIGRlZmVycmFsIChhbmQgdGhlIElSUV9XT1JLIGl0IHVzZXMpIGlzIG9ubHkgbmVlZGVkIHdoZXJlIGNhbGxfcmN1KCkgLwomIzQzOyMgY2FsbF9zcmN1KCkgY2FuIGJlIGludm9rZWQgd2hpbGUgYSBjYWxsYmFjay1saXN0IG9wZXJhdGlvbiBpcyBpbiBmbGlnaHQuCiYjNDM7Y29uZmlnIFJDVV9ERUZFUgomIzQzOwlkZWZfYm9vbCBIQVZFX05NSSB8fCBLUFJPQkVTIHx8IEZVTkNUSU9OX1RSQUNFUiB8fCBUUkFDRVBPSU5UUwomIzQzOwlzZWxlY3QgSVJRX1dPUksKJiM0MzsKIGNvbmZpZyBSQ1VfRkFOT1VUCiAJaW50ICYjMzQ7VHJlZS1iYXNlZCBoaWVyYXJjaGljYWwgUkNVIGZhbm91dCB2YWx1ZSYjMzQ7CiAJcmFuZ2UgMiA2NCBpZiA2NEJJVApkaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9yY3UuaCBiL2tlcm5lbC9yY3UvcmN1LmgKaW5kZXggMzlhOWY2ZmE5YTdiMi4uODRkNzRjZDVhMzUxYyAxMDA2NDQKLS0tIGEva2VybmVsL3JjdS9yY3UuaAomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvcmN1L3JjdS5oCkBAIC01NzIsNiAmIzQzOzU3MiwyNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdGFza3NfY2JsaXN0X2luaXRfZ2VuZXJpYyh2b2lkKSB7IH0KICNkZWZpbmUgUkNVX1NDSEVEVUxFUl9JTklUCTEKICNkZWZpbmUgUkNVX1NDSEVEVUxFUl9SVU5OSU5HCTIKIAomIzQzOy8qCiYjNDM7ICogRGVmZXIgYSBjYWxsX3JjdSgpL2NhbGxfc3JjdSgpIGNhbGxiYWNrIHJhdGhlciB0aGFuIGVucXVldWUgaXQgbm93PyAgRGVmZXIKJiM0MzsgKiB3aGVuZXZlciBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCwgc2luY2UgYSBjYWxsYmFjay1saXN0IG9wZXJhdGlvbiBtYXkgYmUgaW4KJiM0MzsgKiBmbGlnaHQgb24gdGhpcyBDUFUuICBOb3QgYmVmb3JlIHRoZSBzY2hlZHVsZXIgaXMgdXAsIHRob3VnaDogdGhhdCBjb3ZlcnMKJiM0MzsgKiBlYXJseSBib290LCB3aGVyZSBpcnFfd29yayBpcyBub3QgeWV0IHVzYWJsZSBhbmQgcmN1X2luaXQoKSBpdHNlbGYgYWxyZWFkeQomIzQzOyAqIGNhbGxzIGNhbGxfcmN1KCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBib29sIHNob3VsZF9yY3VfZGVmZXIodm9pZCkKJiM0Mzt7CiYjNDM7CWlmICghSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcmV0dXJuIGlycXNfZGlzYWJsZWQoKSAmYW1wOyZhbXA7IHJjdV9zY2hlZHVsZXJfYWN0aXZlICE9IFJDVV9TQ0hFRFVMRVJfSU5BQ1RJVkU7CiYjNDM7fQomIzQzOwomIzQzOy8qIERyYWluIGFuIG91dGdvaW5nIENQVSYjMzk7cyBkZWZlcnJlZCBTUkNVIGNhbGxiYWNrczsgc2VlIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoKS4gKi8KJiM0Mzt2b2lkIHNyY3Vfb2ZmbGluZV9kcmFpbihpbnQgY3B1KTsKJiM0MzsKIGVudW0gcmN1dG9ydHVyZV90eXBlIHsKIAlSQ1VfRkxBVk9SLAogCVJDVV9UQVNLU19GTEFWT1IsCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYyBiL2tlcm5lbC9yY3UvcmN1dG9ydHVyZS5jCmluZGV4IDc5NDkzN2UxM2U3YzMuLmE4NGU3MjVlODA2NTYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3UvcmN1dG9ydHVyZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9yY3UvcmN1dG9ydHVyZS5jCkBAIC00OCw2ICYjNDM7NDgsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3RpY2suaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9yY3VwZGF0ZV90cmFjZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L25taS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wZXJmX2V2ZW50LmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7cmN1LmgmIzM0OwogCkBAIC0xMTUsNiAmIzQzOzExNiw3IEBAIHRvcnR1cmVfcGFyYW0oaW50LCBsZWFrcG9pbnRlciwgMCwgJiMzNDtMZWFrIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGZyb20gcmVhZGVycyYjMzQ7KTsKIHRvcnR1cmVfcGFyYW0oaW50LCBuX2JhcnJpZXJfY2JzLCAwLCAmIzM0OyMgb2YgY2FsbGJhY2tzL2t0aHJlYWRzIGZvciBiYXJyaWVyIHRlc3RpbmcmIzM0Oyk7CiB0b3J0dXJlX3BhcmFtKGludCwgbl91cF9kb3duLCAzMiwgJiMzNDsjIG9mIGNvbmN1cnJlbnQgdXAvZG93biBocnRpbWVyLWJhc2VkIFJDVSByZWFkZXJzJiMzNDspOwogdG9ydHVyZV9wYXJhbShpbnQsIG5mYWtld3JpdGVycywgNCwgJiMzNDtOdW1iZXIgb2YgUkNVIGZha2Ugd3JpdGVyIHRocmVhZHMmIzM0Oyk7CiYjNDM7dG9ydHVyZV9wYXJhbShib29sLCBubWlfY2FsbHMsIHRydWUsICYjMzQ7RXhlcmNpc2UgLSZndDtjYWxsKCkgZnJvbSBOTUkgb24gbm1pX2NhcGFibGUgZmxhdm9ycyYjMzQ7KTsKIHRvcnR1cmVfcGFyYW0oaW50LCBucmVhZGVycywgLTEsICYjMzQ7TnVtYmVyIG9mIFJDVSByZWFkZXIgdGhyZWFkcyYjMzQ7KTsKIHRvcnR1cmVfcGFyYW0oYm9vbCwgbndyaXRlcnMsIDEsICYjMzQ7TnVtYmVyIG9mIFJDVSB3cml0ZXIgdGhyZWFkcyAoMCBvciAxKSYjMzQ7KTsKIHRvcnR1cmVfcGFyYW0oaW50LCBvYmplY3RfZGVidWcsIDAsICYjMzQ7RW5hYmxlIGRlYnVnLW9iamVjdCBkb3VibGUgY2FsbF9yY3UoKSB0ZXN0aW5nJiMzNDspOwpAQCAtMjE2LDYgJiM0MzsyMTgsOCBAQCBzdGF0aWMgbG9uZyBuX3JjdV90b3J0dXJlX2Jvb3N0X2ZhaWx1cmU7CiBzdGF0aWMgbG9uZyBuX3JjdV90b3J0dXJlX2Jvb3N0czsKIHN0YXRpYyBhdG9taWNfbG9uZ190IG5fcmN1X3RvcnR1cmVfdGltZXJzOwogc3RhdGljIGF0b21pY19sb25nX3Qgbl9yY3VfdG9ydHVyZV9pcnFzOwomIzQzO3N0YXRpYyBhdG9taWNfbG9uZ190IG5fcmN1X3RvcnR1cmVfbm1pX2NhbGw7CiYjNDM7c3RhdGljIGF0b21pY19sb25nX3Qgbl9yY3VfdG9ydHVyZV9ubWlfY2I7CiBzdGF0aWMgbG9uZyBuX2JhcnJpZXJfYXR0ZW1wdHM7CiBzdGF0aWMgbG9uZyBuX2JhcnJpZXJfc3VjY2Vzc2VzOyAvKiBkaWQgcmN1X2JhcnJpZXIgdGVzdCBzdWNjZWVkPyAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgbl9yZWFkX2V4aXRzOwpAQCAtNDMzLDYgJiM0Mzs0MzcsNyBAQCBzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzIHsKIAlib29sICgqaXNfdGFza19yY3VfYm9vc3RlZCkodm9pZCk7CiAJbG9uZyBjYmZsb29kX21heDsKIAlpbnQgaXJxX2NhcGFibGU7CiYjNDM7CWludCBubWlfY2FwYWJsZTsKIAlpbnQgY2FuX2Jvb3N0OwogCWludCBleHRlbmRhYmxlczsKIAlpbnQgc2xvd19ncHM7CkBAIC02NDgsNiAmIzQzOzY1Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzIHJjdV9vcHMgPSB7CiAJLmV4dGVuZGFibGVzCQk9IFJDVVRPUlRVUkVfTUFYX0VYVEVORCwKIAkuZGVidWdfb2JqZWN0cwkJPSAxLAogCS5zdGFydF9wb2xsX2lycXNvZmYJPSAxLAomIzQzOwkubm1pX2NhcGFibGUJCT0gMSwKIAkubmFtZQkJCT0gJiMzNDtyY3UmIzM0OwogfTsKIApAQCAtOTQyLDYgJiM0Mzs5NDgsNyBAQCBzdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlX29wcyBzcmN1X29wcyA9IHsKIAkuZGVidWdfb2JqZWN0cwk9IDEsCiAJLmhhdmVfdXBfZG93bgk9IElTX0VOQUJMRUQoQ09ORklHX1RJTllfU1JDVSkKIAkJCQk/IDAgOiBTUkNVX1JFQURfRkxBVk9SX05PUk1BTCB8IFNSQ1VfUkVBRF9GTEFWT1JfRkFTVF9VUERPV04sCiYjNDM7CS5ubWlfY2FwYWJsZQk9IDEsCiAJLm5hbWUJCT0gJiMzNDtzcmN1JiMzNDsKIH07CiAKQEAgLTEwMDUsNiAmIzQzOzEwMTIsNyBAQCBzdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlX29wcyBzcmN1ZF9vcHMgPSB7CiAJLmRlYnVnX29iamVjdHMJPSAxLAogCS5oYXZlX3VwX2Rvd24JPSBJU19FTkFCTEVEKENPTkZJR19USU5ZX1NSQ1UpCiAJCQkJPyAwIDogU1JDVV9SRUFEX0ZMQVZPUl9OT1JNQUwgfCBTUkNVX1JFQURfRkxBVk9SX0ZBU1RfVVBET1dOLAomIzQzOwkubm1pX2NhcGFibGUJPSAxLAogCS5uYW1lCQk9ICYjMzQ7c3JjdWQmIzM0OwogfTsKIApAQCAtMTI2OSw2ICYjNDM7MTI3Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzIHRhc2tzX3RyYWNpbmdfb3BzID0gewogCS5jYmZsb29kX21heAk9IDUwMDAwLAogCS5pcnFfY2FwYWJsZQk9IDEsCiAJLnNsb3dfZ3BzCT0gMSwKJiM0MzsJLm5taV9jYXBhYmxlCT0gMSwKIAkubmFtZQkJPSAmIzM0O3Rhc2tzLXRyYWNpbmcmIzM0OwogfTsKIApAQCAtMjY1OSwxMiAmIzQzOzI2NjgsMTMxIEBAIHN0YXRpYyBib29sIHJjdV90b3J0dXJlX29uZV9yZWFkKHN0cnVjdCB0b3J0dXJlX3JhbmRvbV9zdGF0ZSAqdHJzcCwgbG9uZyBteWlkKQogCiBzdGF0aWMgREVGSU5FX1RPUlRVUkVfUkFORE9NX1BFUkNQVShyY3VfdG9ydHVyZV90aW1lcl9yYW5kKTsKIAomIzQzOy8qCiYjNDM7ICogRXhlcmNpc2UgLSZndDtjYWxsKCkgZnJvbSBOTUkgY29udGV4dCBmb3IgZmxhdm9ycyB0aGF0IHNldCAtJmd0O25taV9jYXBhYmxlLiAgQQomIzQzOyAqIHBlci1DUFUgaGFyZHdhcmUgcGVyZiBjb3VudGVyIG92ZXJmbG93cyBpbnRvIGFuIE5NSSwgYW5kIGl0cyBoYW5kbGVyIHN1Ym1pdHMKJiM0MzsgKiBvbmUgcHJlYWxsb2NhdGVkIGNhbGxiYWNrIHZpYSAtJmd0O2NhbGwoKS4gIE9uZSBjYWxsYmFjayBpcyBpbiBmbGlnaHQgYXQgYSB0aW1lCiYjNDM7ICogKGd1YXJkZWQgYnkgYW4gYXRvbWljKSB0byBhdm9pZCBhbGxvY2F0aW5nIGluIE5NSS4gIFRoaXMgbWlycm9ycyBob3cgYSBCUEYKJiM0MzsgKiBwcm9ncmFtIHJlYWNoZXMgLSZndDtjYWxsKCkgZnJvbSBOTUkuCiYjNDM7ICovCiYjNDM7I2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUwomIzQzO3N0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIHJjdV90b3J0dXJlX25taV9hdHRyID0gewomIzQzOwkudHlwZQkJPSBQRVJGX1RZUEVfSEFSRFdBUkUsCiYjNDM7CS5jb25maWcJCT0gUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTLAomIzQzOwkuc2l6ZQkJPSBzaXplb2Yoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciksCiYjNDM7CS5waW5uZWQJCT0gMSwKJiM0MzsJLmRpc2FibGVkCT0gMSwKJiM0MzsJLmZyZXEJCT0gMSwKJiM0MzsJLnNhbXBsZV9mcmVxCT0gMTAwLAomIzQzO307CiYjNDM7CiYjNDM7LyogT25lIGluLWZsaWdodCBjYWxsYmFjayBwZXIgQ1BVOyAtJmd0O2ludXNlIGlzIHJlbGVhc2VkIGJ5IHRoZSBjYWxsYmFjay4gKi8KJiM0MztzdHJ1Y3QgcmN1X3RvcnR1cmVfbm1pX2NicyB7CiYjNDM7CXN0cnVjdCByY3VfaGVhZCByaDsKJiM0MzsJYXRvbWljX3QgaW51c2U7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnQgKipyY3VfdG9ydHVyZV9ubWlfZXZlbnRzOwomIzQzO3N0YXRpYyBpbnQgcmN1X3RvcnR1cmVfbm1pX2hwX3N0YXRlOwomIzQzO3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcmN1X3RvcnR1cmVfbm1pX2NicywgcmN1X3RvcnR1cmVfbm1pX2Nicyk7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2NiKHN0cnVjdCByY3VfaGVhZCAqcmhwKQomIzQzO3sKJiM0MzsJc3RydWN0IHJjdV90b3J0dXJlX25taV9jYnMgKnJ0bmNwID0gY29udGFpbmVyX29mKHJocCwgc3RydWN0IHJjdV90b3J0dXJlX25taV9jYnMsIHJoKTsKJiM0MzsKJiM0MzsJYXRvbWljX2xvbmdfaW5jKCZhbXA7bl9yY3VfdG9ydHVyZV9ubWlfY2IpOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7cnRuY3AtJmd0O2ludXNlLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX292ZXJmbG93KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKJiM0Mzt7CiYjNDM7CXN0cnVjdCByY3VfdG9ydHVyZV9ubWlfY2JzICpydG5jcCA9IHRoaXNfY3B1X3B0cigmYW1wO3JjdV90b3J0dXJlX25taV9jYnMpOwomIzQzOwomIzQzOwlpZiAoIWluX25taSgpKQomIzQzOwkJcmV0dXJuOwomIzQzOwlpZiAoY3VyX29wcy0mZ3Q7Y2FsbCAmYW1wOyZhbXA7ICFhdG9taWNfeGNoZygmYW1wO3J0bmNwLSZndDtpbnVzZSwgMSkpIHsKJiM0MzsJCWF0b21pY19sb25nX2luYygmYW1wO25fcmN1X3RvcnR1cmVfbm1pX2NhbGwpOwomIzQzOwkJY3VyX29wcy0mZ3Q7Y2FsbCgmYW1wO3J0bmNwLSZndDtyaCwgcmN1X3RvcnR1cmVfbm1pX2NiKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJjdV90b3J0dXJlX25taV9vbmxpbmUodW5zaWduZWQgaW50IGNwdSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKJiM0MzsKJiM0MzsJZXZlbnQgPSBwZXJmX2V2ZW50X2NyZWF0ZV9rZXJuZWxfY291bnRlcigmYW1wO3JjdV90b3J0dXJlX25taV9hdHRyLCBjcHUsIE5VTEwsCiYjNDM7CQkJCQkJIHJjdV90b3J0dXJlX25taV9vdmVyZmxvdywgTlVMTCk7CiYjNDM7CWlmIChJU19FUlIoZXZlbnQpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CXJjdV90b3J0dXJlX25taV9ldmVudHNbY3B1XSA9IGV2ZW50OwomIzQzOwlwZXJmX2V2ZW50X2VuYWJsZShldmVudCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJjdV90b3J0dXJlX25taV9vZmZsaW5lKHVuc2lnbmVkIGludCBjcHUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSByY3VfdG9ydHVyZV9ubWlfZXZlbnRzW2NwdV07CiYjNDM7CiYjNDM7CWlmIChldmVudCkgewomIzQzOwkJcmN1X3RvcnR1cmVfbm1pX2V2ZW50c1tjcHVdID0gTlVMTDsKJiM0MzsJCXBlcmZfZXZlbnRfZGlzYWJsZShldmVudCk7CiYjNDM7CQlwZXJmX2V2ZW50X3JlbGVhc2Vfa2VybmVsKGV2ZW50KTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBEcml2ZSB0aGUgY291bnRlcnMgZnJvbSBDUFUtaG90cGx1ZyBjYWxsYmFja3Mgc28gdGhhdCBjb3ZlcmFnZSBzdXJ2aXZlcyB0aGUKJiM0MzsgKiBvbm9mZiB0ZXN0aW5nIHRoYXQgbW9zdCBzY2VuYXJpb3MgcnVuLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9pbml0KHZvaWQpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIW5taV9jYWxscyB8fCAhY3VyX29wcy0mZ3Q7bm1pX2NhcGFibGUgfHwgIWN1cl9vcHMtJmd0O2NhbGwpCiYjNDM7CQlyZXR1cm47CiYjNDM7CXJjdV90b3J0dXJlX25taV9ldmVudHMgPSBrY2FsbG9jKG5yX2NwdV9pZHMsIHNpemVvZigqcmN1X3RvcnR1cmVfbm1pX2V2ZW50cyksCiYjNDM7CQkJCQkgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcmN1X3RvcnR1cmVfbm1pX2V2ZW50cykKJiM0MzsJCXJldHVybjsKJiM0MzsJcmV0ID0gY3B1aHBfc2V0dXBfc3RhdGUoQ1BVSFBfQVBfT05MSU5FX0RZTiwgJiMzNDtyY3V0b3J0dXJlL25taTpvbmxpbmUmIzM0OywKJiM0MzsJCQkJcmN1X3RvcnR1cmVfbm1pX29ubGluZSwgcmN1X3RvcnR1cmVfbm1pX29mZmxpbmUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkgewomIzQzOwkJa2ZyZWUocmN1X3RvcnR1cmVfbm1pX2V2ZW50cyk7CiYjNDM7CQlyY3VfdG9ydHVyZV9ubWlfZXZlbnRzID0gTlVMTDsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwlyY3VfdG9ydHVyZV9ubWlfaHBfc3RhdGUgPSByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9jbGVhbnVwKHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoIXJjdV90b3J0dXJlX25taV9ldmVudHMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWlmIChyY3VfdG9ydHVyZV9ubWlfaHBfc3RhdGUgJmd0OyAwKSB7CiYjNDM7CQljcHVocF9yZW1vdmVfc3RhdGUocmN1X3RvcnR1cmVfbm1pX2hwX3N0YXRlKTsKJiM0MzsJCXJjdV90b3J0dXJlX25taV9ocF9zdGF0ZSA9IDA7CiYjNDM7CX0KJiM0MzsJa2ZyZWUocmN1X3RvcnR1cmVfbm1pX2V2ZW50cyk7CiYjNDM7CXJjdV90b3J0dXJlX25taV9ldmVudHMgPSBOVUxMOwomIzQzOwlpZiAoIWF0b21pY19sb25nX3JlYWQoJmFtcDtuX3JjdV90b3J0dXJlX25taV9jYWxsKSkKJiM0MzsJCXByX2FsZXJ0KCYjMzQ7JXM6IG5taV9jYWxscyBzZXQgYnV0IG5vIC0mZ3Q7Y2FsbCgpIGlzc3VlZCBmcm9tIE5NSTogbm90IHN1cHBvcnRlZCBoZXJlLlxuJiMzNDssCiYjNDM7CQkJIF9fZnVuY19fKTsKJiM0Mzt9CiYjNDM7I2Vsc2UgLyogI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUyAqLwomIzQzO3N0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9pbml0KHZvaWQpIHsgfQomIzQzO3N0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9jbGVhbnVwKHZvaWQpIHsgfQomIzQzOyNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTICovCiYjNDM7CiAvKgogICogUkNVIHRvcnR1cmUgcmVhZGVyIGZyb20gdGltZXIgaGFuZGxlci4gIERlcmVmZXJlbmNlcyByY3VfdG9ydHVyZV9jdXJyZW50LAogICogaW5jcmVtZW50aW5nIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgb2YgdGhlIHBpcGVsaW5lIGFycmF5LiAgVGhlCiAgKiBjb3VudGVyIGluIHRoZSBlbGVtZW50IHNob3VsZCBuZXZlciBiZSBncmVhdGVyIHRoYW4gMSwgb3RoZXJ3aXNlLCB0aGUKICAqIFJDVSBpbXBsZW1lbnRhdGlvbiBpcyBicm9rZW4uCiAgKi8KJiM0MzsKIHN0YXRpYyB2b2lkIHJjdV90b3J0dXJlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp1bnVzZWQpCiB7CiAJV0FSTl9PTl9PTkNFKCFpbl9zZXJ2aW5nX3NvZnRpcnEoKSk7CkBAIC0zMDQ3LDYgJiM0MzszMTc1LDkgQEAgcmN1X3RvcnR1cmVfc3RhdHNfcHJpbnQodm9pZCkKIAkJZGF0YV9yYWNlKG5fYmFycmllcl9hdHRlbXB0cyksCiAJCWRhdGFfcmFjZShuX3JjdV90b3J0dXJlX2JhcnJpZXJfZXJyb3IpKTsKIAlwcl9jb250KCYjMzQ7cmVhZC1leGl0czogJWxkICYjMzQ7LCBkYXRhX3JhY2Uobl9yZWFkX2V4aXRzKSk7IC8vIFN0YXRpc3RpYy4KJiM0MzsJcHJfY29udCgmIzM0O25taS1jYWxsczogJWxkIG5taS1jYnM6ICVsZCAmIzM0OywKJiM0MzsJCWF0b21pY19sb25nX3JlYWQoJmFtcDtuX3JjdV90b3J0dXJlX25taV9jYWxsKSwKJiM0MzsJCWF0b21pY19sb25nX3JlYWQoJmFtcDtuX3JjdV90b3J0dXJlX25taV9jYikpOwogCXByX2NvbnQoJiMzNDtub2NiLXRvZ2dsZXM6ICVsZDolbGQgJiMzNDssCiAJCWF0b21pY19sb25nX3JlYWQoJmFtcDtuX25vY2Jfb2ZmbG9hZCksIGF0b21pY19sb25nX3JlYWQoJmFtcDtuX25vY2JfZGVvZmZsb2FkKSk7CiAJcHJfY29udCgmIzM0O2dwd3JhcHM6ICVsZFxuJiMzNDssIG5fZ3B3cmFwcyk7CkBAIC0zMTk1LDcgJiM0MzszMzI2LDcgQEAgcmN1X3RvcnR1cmVfcHJpbnRfbW9kdWxlX3Bhcm1zKHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgKmN1cl9vcHMsIGNvbnN0IGNoYXIgKnRhZykKIAkJICYjMzQ7cmVhZF9leGl0X2RlbGF5PSVkIHJlYWRfZXhpdF9idXJzdD0lZCAmIzM0OwogCQkgJiMzNDtyZWFkZXJfZmxhdm9yPSV4ICYjMzQ7CiAJCSAmIzM0O25vY2JzX250aHJlYWRzPSVkIG5vY2JzX3RvZ2dsZT0lZCAmIzM0OwotCQkgJiMzNDt0ZXN0X25taXM9JWQgJiMzNDsKJiM0MzsJCSAmIzM0O3Rlc3Rfbm1pcz0lZCBubWlfY2FsbHM9JWQgJiMzNDsKIAkJICYjMzQ7cHJlZW1wdF9kdXJhdGlvbj0lZCBwcmVlbXB0X2ludGVydmFsPSVkIG5fdXBfZG93bj0lZFxuJiMzNDssCiAJCSB0b3J0dXJlX3R5cGUsIHRhZywgbnJlYWxyZWFkZXJzLCBud3JpdGVycywgbnJlYWxmYWtld3JpdGVycywKIAkJIHN0YXRfaW50ZXJ2YWwsIHZlcmJvc2UsIHRlc3Rfbm9faWRsZV9oeiwgc2h1ZmZsZV9pbnRlcnZhbCwKQEAgLTMyMDksNyAmIzQzOzMzNDAsNyBAQCByY3VfdG9ydHVyZV9wcmludF9tb2R1bGVfcGFybXMoc3RydWN0IHJjdV90b3J0dXJlX29wcyAqY3VyX29wcywgY29uc3QgY2hhciAqdGFnKQogCQkgcmVhZF9leGl0X2RlbGF5LCByZWFkX2V4aXRfYnVyc3QsCiAJCSByZWFkZXJfZmxhdm9yLAogCQkgbm9jYnNfbnRocmVhZHMsIG5vY2JzX3RvZ2dsZSwKLQkJIHRlc3Rfbm1pcywKJiM0MzsJCSB0ZXN0X25taXMsIG5taV9jYWxscywKIAkJIHByZWVtcHRfZHVyYXRpb24sIHByZWVtcHRfaW50ZXJ2YWwsIG5fdXBfZG93bik7CiB9CiAKQEAgLTQyODMsNiAmIzQzOzQ0MTQsNyBAQCByY3VfdG9ydHVyZV9jbGVhbnVwKHZvaWQpCiAJaW50IGk7CiAKIAlpZiAodG9ydHVyZV9jbGVhbnVwX2JlZ2luKCkpIHsKJiM0MzsJCXJjdV90b3J0dXJlX25taV9jbGVhbnVwKCk7CiAJCWlmIChjdXJfb3BzLSZndDtjYl9iYXJyaWVyICE9IE5VTEwpIHsKIAkJCXByX2luZm8oJiMzNDslczogSW52b2tpbmcgJXBTKCkuXG4mIzM0OywgX19mdW5jX18sIGN1cl9vcHMtJmd0O2NiX2JhcnJpZXIpOwogCQkJY3VyX29wcy0mZ3Q7Y2JfYmFycmllcigpOwpAQCAtNDMyNSw2ICYjNDM7NDQ1Nyw4IEBAIHJjdV90b3J0dXJlX2NsZWFudXAodm9pZCkKIAkJa2ZyZWUocmVhZGVyX3Rhc2tzKTsKIAkJcmVhZGVyX3Rhc2tzID0gTlVMTDsKIAl9CiYjNDM7CS8qIERpc2FibGUgdGhlIHBlcmYgY291bnRlcnMgKGFuZCB0aHVzIHRoZSBOTUkgLSZndDtjYWxsKCkgZmlyaW5nKSBub3cuICovCiYjNDM7CXJjdV90b3J0dXJlX25taV9jbGVhbnVwKCk7CiAJa2ZyZWUocmN1X3RvcnR1cmVfcmVhZGVyX21iY2hrKTsKIAlyY3VfdG9ydHVyZV9yZWFkZXJfbWJjaGsgPSBOVUxMOwogCkBAIC00MzU0LDYgJiM0Mzs0NDg4LDIwIEBAIHJjdV90b3J0dXJlX2NsZWFudXAodm9pZCkKIAkJcHJfaW5mbygmIzM0OyVzOiBJbnZva2luZyAlcFMoKS5cbiYjMzQ7LCBfX2Z1bmNfXywgY3VyX29wcy0mZ3Q7Y2JfYmFycmllcik7CiAJCWN1cl9vcHMtJmd0O2NiX2JhcnJpZXIoKTsKIAl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIGNiX2JhcnJpZXIoKSBhYm92ZSBkcmFpbmVkIGV2ZXJ5IGRlZmVycmVkIE5NSSAtJmd0O2NhbGwoKSBjYWxsYmFjaywgc28gdGhlCiYjNDM7CSAqIGNvdW50IGlzc3VlZCBmcm9tIE5NSSBtdXN0IGVxdWFsIHRoZSBjb3VudCBpbnZva2VkOyBhIG1pc21hdGNoIG1lYW5zIGEKJiM0MzsJICogY2FsbGJhY2sgd2FzIGxvc3QuCiYjNDM7CSAqLwomIzQzOwlpZiAoYXRvbWljX2xvbmdfcmVhZCgmYW1wO25fcmN1X3RvcnR1cmVfbm1pX2NhbGwpICE9CiYjNDM7CSAgICBhdG9taWNfbG9uZ19yZWFkKCZhbXA7bl9yY3VfdG9ydHVyZV9ubWlfY2IpKSB7CiYjNDM7CQlwcl9hbGVydCgmIzM0OyVzOiBOTUkgLSZndDtjYWxsKCkgbG9zdCBhIGNhbGxiYWNrOiBpc3N1ZWQgJWxkIGludm9rZWQgJWxkXG4mIzM0OywKJiM0MzsJCQkgX19mdW5jX18sIGF0b21pY19sb25nX3JlYWQoJmFtcDtuX3JjdV90b3J0dXJlX25taV9jYWxsKSwKJiM0MzsJCQkgYXRvbWljX2xvbmdfcmVhZCgmYW1wO25fcmN1X3RvcnR1cmVfbm1pX2NiKSk7CiYjNDM7CQlhdG9taWNfaW5jKCZhbXA7bl9yY3VfdG9ydHVyZV9lcnJvcik7CiYjNDM7CX0KJiM0MzsKIAlpZiAoY3VyX29wcy0mZ3Q7Y2xlYW51cCAhPSBOVUxMKQogCQljdXJfb3BzLSZndDtjbGVhbnVwKCk7CiAKQEAgLTQ3ODYsNiAmIzQzOzQ5MzQsOCBAQCByY3VfdG9ydHVyZV9pbml0KHZvaWQpCiAJCWZpcnN0ZXJyID0gLUVOT01FTTsKIAkJZ290byB1bndpbmQ7CiAJfQomIzQzOwkvKiBBcm0gdGhlIHBlci1DUFUgcGVyZiBjb3VudGVycyB0aGF0IGRyaXZlIC0mZ3Q7Y2FsbCgpIGZyb20gTk1JLiAqLwomIzQzOwlyY3VfdG9ydHVyZV9ubWlfaW5pdCgpOwogCWZvciAoaSA9IDA7IGkgJmx0OyBucmVhbHJlYWRlcnM7IGkmIzQzOyYjNDM7KSB7CiAJCXJjdV90b3J0dXJlX3JlYWRlcl9tYmNoa1tpXS5ydGNfY2hrcmRyID0gLTE7CiAJCWZpcnN0ZXJyID0gdG9ydHVyZV9jcmVhdGVfa3RocmVhZChyY3VfdG9ydHVyZV9yZWFkZXIsICh2b2lkICopaSwKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3Uvc3JjdXRpbnkuYyBiL2tlcm5lbC9yY3Uvc3JjdXRpbnkuYwppbmRleCA1NThiYThkMzE2ZGI2Li43YTdjMWNlZjQzZTEzIDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1L3NyY3V0aW55LmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS9zcmN1dGlueS5jCkBAIC0xMCw2ICYjNDM7MTAsNyBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvZXhwb3J0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaXJxX3dvcmsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbGxpc3QuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tdXRleC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3ByZWVtcHQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9yY3VwZGF0ZV93YWl0LmgmZ3Q7CkBAIC0yOSw2ICYjNDM7MzAsOCBAQCBleHRlcm4gaW50IHJjdV9zY2hlZHVsZXJfYWN0aXZlOwogc3RhdGljIExJU1RfSEVBRChzcmN1X2Jvb3RfbGlzdCk7CiBzdGF0aWMgYm9vbCBzcmN1X2luaXRfZG9uZTsKIAomIzQzO3N0YXRpYyB2b2lkIF9fc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgYm9vbCBndWFyZCk7CiYjNDM7CiBzdGF0aWMgaW50IGluaXRfc3JjdV9zdHJ1Y3RfZmllbGRzKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKQogewogCXNzcC0mZ3Q7c3JjdV9sb2NrX25lc3RpbmdbMF0gPSAwOwpAQCAtNDMsNiAmIzQzOzQ2LDggQEAgc3RhdGljIGludCBpbml0X3NyY3Vfc3RydWN0X2ZpZWxkcyhzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCkKIAlJTklUX1dPUksoJmFtcDtzc3AtJmd0O3NyY3Vfd29yaywgc3JjdV9kcml2ZV9ncCk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtzc3AtJmd0O3NyY3Vfd29yay5lbnRyeSk7CiAJaW5pdF9pcnFfd29yaygmYW1wO3NzcC0mZ3Q7c3JjdV9pcnFfd29yaywgc3JjdV90aW55X2lycV93b3JrKTsKJiM0MzsJaW5pdF9sbGlzdF9oZWFkKCZhbXA7c3NwLSZndDtkZWZlcl9jYnMpOwomIzQzOwlzc3AtJmd0O2RlZmVyX2l3ID0gSVJRX1dPUktfSU5JVF9IQVJEKHNyY3VfZGVmZXJfZHJhaW4pOwogCXJldHVybiAwOwogfQogCkBAIC04Niw2ICYjNDM7OTEsMTEgQEAgRVhQT1JUX1NZTUJPTF9HUEwoaW5pdF9zcmN1X3N0cnVjdF9nZW5lcmljKTsKIHZvaWQgY2xlYW51cF9zcmN1X3N0cnVjdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCkKIHsKIAlXQVJOX09OKHNyY3VfcmVhZGVyc19hY3RpdmUoc3NwKSk7CiYjNDM7CS8qIFJlLWlzc3VlIGFueSBkZWZlcnJlZCBjYWxsYmFja3MsIHRoZW4gd2FpdCBvdXQgLSZndDtkZWZlcl9pdyBiZWZvcmUgaXQgaXMgZnJlZWQuICovCiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKSB7CiYjNDM7CQlfX3NyY3VfZGVmZXJfZHJhaW4oc3NwLCBmYWxzZSk7CiYjNDM7CQlpcnFfd29ya19zeW5jKCZhbXA7c3NwLSZndDtkZWZlcl9pdyk7CiYjNDM7CX0KIAlpcnFfd29ya19zeW5jKCZhbXA7c3NwLSZndDtzcmN1X2lycV93b3JrKTsKIAlmbHVzaF93b3JrKCZhbXA7c3NwLSZndDtzcmN1X3dvcmspOwogCVdBUk5fT04oc3NwLSZndDtzcmN1X2dwX3J1bm5pbmcpOwpAQCAtMjEzLDExICYjNDM7MjIzLDExIEBAIHN0YXRpYyB2b2lkIHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKQogfQogCiAvKgotICogRW5xdWV1ZSBhbiBTUkNVIGNhbGxiYWNrIG9uIHRoZSBzcGVjaWZpZWQgc3JjdV9zdHJ1Y3Qgc3RydWN0dXJlLAotICogaW5pdGlhdGluZyBncmFjZS1wZXJpb2QgcHJvY2Vzc2luZyBpZiBpdCBpcyBub3QgYWxyZWFkeSBydW5uaW5nLgomIzQzOyAqIEVucXVldWUgQHJocCBvbiB0aGUgY2FsbGJhY2sgbGlzdC4gIEFsc28gY2FsbGVkIGJ5IHNyY3VfZGVmZXJfZHJhaW4oKSB0bwomIzQzOyAqIHJlLWlzc3VlIGEgZGVmZXJyZWQgY2FsbGJhY2ssIHNvIGl0IG11c3Qgbm90IHJlLWNoZWNrIHRoZSBkZWZlcnJhbCBjb25kaXRpb24uCiAgKi8KLXZvaWQgY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCwKLQkgICAgICAgcmN1X2NhbGxiYWNrX3QgZnVuYykKJiM0MztzdGF0aWMgdm9pZCBzcmN1X2RvX2VucXVldWUoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLAomIzQzOwkJCSAgICByY3VfY2FsbGJhY2tfdCBmdW5jKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTIzMSw2ICYjNDM7MjQxLDU4IEBAIHZvaWQgY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCwKIAlzcmN1X2dwX3N0YXJ0X2lmX25lZWRlZChzc3ApOwogCXByZWVtcHRfZW5hYmxlKCk7CiB9CiYjNDM7CiYjNDM7LyogU2V0IHdoaWxlIHNyY3VfZGVmZXJfZHJhaW4oKSByZS1pc3N1ZXMsIHRvIGNhdGNoIGEgcmUtZW50cmFudCBjYWxsX3NyY3UoKS4gKi8KJiM0MztzdGF0aWMgYm9vbCBzcmN1X2RlZmVyX2RyYWluaW5nOwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIF9fc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgYm9vbCBndWFyZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsbGlzdF9ub2RlICpub2RlLCAqbmV4dDsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKJiM0MzsJLyogQ2FsbGJhY2tzIGFyZSB1bm9yZGVyZWQsIHNvIGRyYWluIGluIGxsaXN0IG9yZGVyIHdpdGhvdXQgcmV2ZXJzaW5nLiAqLwomIzQzOwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiYjNDM7CWlmIChndWFyZCkKJiM0MzsJCVdSSVRFX09OQ0Uoc3JjdV9kZWZlcl9kcmFpbmluZywgdHJ1ZSk7CiYjNDM7CWxsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgbmV4dCwgbGxpc3RfZGVsX2FsbCgmYW1wO3NzcC0mZ3Q7ZGVmZXJfY2JzKSkgewomIzQzOwkJc3RydWN0IHJjdV9oZWFkICpyaHAgPSAoc3RydWN0IHJjdV9oZWFkICopbm9kZTsKJiM0MzsKJiM0MzsJCXJocC0mZ3Q7bmV4dCA9IE5VTEw7CiYjNDM7CQlzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIHJocC0mZ3Q7ZnVuYyk7CiYjNDM7CX0KJiM0MzsJaWYgKGd1YXJkKQomIzQzOwkJV1JJVEVfT05DRShzcmN1X2RlZmVyX2RyYWluaW5nLCBmYWxzZSk7CiYjNDM7CWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogT25seSB0aGUgaXJxX3dvcmsgZHJhaW4gY2FuIGJlIHJlLWZlZCBieSBpdHMgb3duIHJlLWlzc3VlOyBzZWUgVHJlZSBTUkNVLiAqLwomIzQzO3ZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KQomIzQzO3sKJiM0MzsJX19zcmN1X2RlZmVyX2RyYWluKGNvbnRhaW5lcl9vZihpdywgc3RydWN0IHNyY3Vfc3RydWN0LCBkZWZlcl9pdyksIHRydWUpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChzcmN1X2RlZmVyX2RyYWluKTsKJiM0MzsKJiM0Mzt2b2lkIGNhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsCiYjNDM7CSAgICAgICByY3VfY2FsbGJhY2tfdCBmdW5jKQomIzQzO3sKJiM0MzsJaWYgKHNob3VsZF9yY3VfZGVmZXIoKSkgewomIzQzOwkJLyogQSByZS1lbnRyYW50IGNhbGxfc3JjdSgpIGR1cmluZyB0aGUgZHJhaW4gd291bGQgbGl2ZWxvY2sgaXQuICovCiYjNDM7CQlpZiAoUkVBRF9PTkNFKHNyY3VfZGVmZXJfZHJhaW5pbmcpICZhbXA7JmFtcDsgIWluX25taSgpKSB7CiYjNDM7CQkJV0FSTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSksCiYjNDM7CQkJCSAgJiMzNDtjYWxsX3NyY3UoKSByZS1lbnRlcmVkIGR1cmluZyBjYWxsYmFjayBkcmFpbjsgbGVha2luZyBjYWxsYmFja1xuJiMzNDspOwomIzQzOwkJCXJldHVybjsKJiM0MzsJCX0KJiM0MzsJCXJocC0mZ3Q7ZnVuYyA9IGZ1bmM7CiYjNDM7CQlpZiAobGxpc3RfYWRkKChzdHJ1Y3QgbGxpc3Rfbm9kZSAqKXJocCwgJmFtcDtzc3AtJmd0O2RlZmVyX2NicykpCiYjNDM7CQkJaXJxX3dvcmtfcXVldWUoJmFtcDtzc3AtJmd0O2RlZmVyX2l3KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBBbiBOTUkgcmVhY2hpbmcgaGVyZSBlbnRlcmVkIHdpdGggaXJxcyBlbmFibGVkLCBzbyB0aGUgZW5xdWV1ZSBjYW4gcmFjZS4gKi8KJiM0MzsJV0FSTl9PTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSkgJmFtcDsmYW1wOyBpbl9ubWkoKSk7CiYjNDM7CiYjNDM7CXNyY3VfZG9fZW5xdWV1ZShzc3AsIHJocCwgZnVuYyk7CiYjNDM7fQogRVhQT1JUX1NZTUJPTF9HUEwoY2FsbF9zcmN1KTsKIAogLyoKQEAgLTI2MCw2ICYjNDM7MzIyLDE1IEBAIHZvaWQgc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCkKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3NyY3UpOwogCiYjNDM7LyogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcywgdGhlbiB3YWl0IGZvciBhbGwgaW4tZmxpZ2h0IG9uZXMuICovCiYjNDM7dm9pZCBzcmN1X2JhcnJpZXIoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApCiYjNDM7ewomIzQzOwlpZiAoSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSkKJiM0MzsJCV9fc3JjdV9kZWZlcl9kcmFpbihzc3AsIGZhbHNlKTsKJiM0MzsJc3luY2hyb25pemVfc3JjdShzc3ApOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChzcmN1X2JhcnJpZXIpOwomIzQzOwogLyoKICAqIGdldF9zdGF0ZV9zeW5jaHJvbml6ZV9zcmN1IC0gUHJvdmlkZSBhbiBlbmQtb2YtZ3JhY2UtcGVyaW9kIGNvb2tpZQogICovCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3NyY3V0cmVlLmMgYi9rZXJuZWwvcmN1L3NyY3V0cmVlLmMKaW5kZXggMzA0MTEyNjc0ZThhMi4uMzVmZmFjZTUxZDUwYiAxMDA2NDQKLS0tIGEva2VybmVsL3JjdS9zcmN1dHJlZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9yY3Uvc3JjdXRyZWUuYwpAQCAtMjAsNiAmIzQzOzIwLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9wZXJjcHUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wcmVlbXB0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaXJxX3dvcmsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbGxpc3QuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9yY3VwZGF0ZV93YWl0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zbXAuaCZndDsKQEAgLTc5LDYgJiM0Mzs4MCw0NSBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX3NyY3Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIHN0YXRpYyB2b2lkIHNyY3VfaXJxX3dvcmsoc3RydWN0IGlycV93b3JrICp3b3JrKTsKIHN0YXRpYyB2b2lkIHNyY3VfZGVsYXlfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpOwogCiYjNDM7c3RydWN0IHNyY3VfZGVmZXI7CiYjNDM7c3RhdGljIHZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KTsKJiM0MztzdGF0aWMgdm9pZCBfX3NyY3VfZGVmZXJfZHJhaW4oc3RydWN0IHNyY3VfZGVmZXIgKnNuZHAsIGJvb2wgZ3VhcmQpOwomIzQzOwomIzQzOy8qCiYjNDM7ICogUGVyLUNQVSBjYWxsX3NyY3UoKSBkZWZlcnJhbCBzdGF0ZSwgc2hhcmVkIGJ5IGV2ZXJ5IHNyY3Vfc3RydWN0LiAgQSBkZWZlcnJlZAomIzQzOyAqIGNhbGxiYWNrIGlzIHN0YWdlZCBvbiBpdHMgc3JjdV9kYXRhJiMzOTtzIC0mZ3Q7ZGVmZXJfY2JzOyB0aGF0IHNyY3VfZGF0YSBpcyBjaGFpbmVkCiYjNDM7ICogdmlhIC0mZ3Q7ZGVmZXJfbGluayBvbnRvIC0mZ3Q7bGlzdCwgd2hpY2ggdGhlIGlycV93b3JrIHdhbGtzLgomIzQzOyAqLwomIzQzO3N0cnVjdCBzcmN1X2RlZmVyIHsKJiM0MzsJc3RydWN0IGxsaXN0X2hlYWQJbGlzdDsKJiM0MzsJc3RydWN0IGlycV93b3JrCQlpdzsKJiM0MzsJcmF3X3NwaW5sb2NrX3QJCWxvY2s7CiYjNDM7CWJvb2wJCQlkcmFpbmluZzsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc3JjdV9kZWZlciwgc3JjdV9kZWZlcikgPSB7CiYjNDM7CS5sb2NrID0gX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VEKHNyY3VfZGVmZXIubG9jayksCiYjNDM7CS5pdyA9IElSUV9XT1JLX0lOSVRfSEFSRChzcmN1X2RlZmVyX2RyYWluKSwKJiM0Mzt9OwomIzQzOwomIzQzOy8qCiYjNDM7ICogRmx1c2ggcGVuZGluZyBkZWZlcnJlZCBjYWxsYmFja3Mgc28gYSBmb2xsb3dpbmcgc3JjdV9iYXJyaWVyKCkgd2FpdHMgZm9yIHRoZW0uCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgc3JjdV9kZWZlcl9mbHVzaCh2b2lkKQomIzQzO3sKJiM0MzsJaW50IGNwdTsKJiM0MzsKJiM0MzsJaWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiYjNDM7CQlzdHJ1Y3Qgc3JjdV9kZWZlciAqc25kcCA9ICZhbXA7cGVyX2NwdShzcmN1X2RlZmVyLCBjcHUpOwomIzQzOwomIzQzOwkJaWYgKCFsbGlzdF9lbXB0eSgmYW1wO3NuZHAtJmd0O2xpc3QpKQomIzQzOwkJCV9fc3JjdV9kZWZlcl9kcmFpbihzbmRwLCBmYWxzZSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiAvKgogICogSW5pdGlhbGl6ZSBTUkNVIHBlci1DUFUgZGF0YS4gIE5vdGUgdGhhdCBzdGF0aWNhbGx5IGFsbG9jYXRlZAogICogc3JjdV9zdHJ1Y3Qgc3RydWN0dXJlcyBtaWdodCBhbHJlYWR5IGhhdmUgc3JjdV9yZWFkX2xvY2soKSBhbmQKQEAgLTEwNyw2ICYjNDM7MTQ3LDExIEBAIHN0YXRpYyB2b2lkIGluaXRfc3JjdV9zdHJ1Y3RfZGF0YShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCkKIAkJc2RwLSZndDtjcHUgPSBjcHU7CiAJCUlOSVRfV09SSygmYW1wO3NkcC0mZ3Q7d29yaywgc3JjdV9pbnZva2VfY2FsbGJhY2tzKTsKIAkJdGltZXJfc2V0dXAoJmFtcDtzZHAtJmd0O2RlbGF5X3dvcmssIHNyY3VfZGVsYXlfdGltZXIsIDApOwomIzQzOwkJLyoKJiM0MzsJCSAqIC0mZ3Q7ZGVmZXJfY2JzLCAtJmd0O2RlZmVyX2xpbmsgYW5kIC0mZ3Q7ZGVmZXJfZXhwIGFyZSB2YWxpZCB3aGVuIHplcm9lZAomIzQzOwkJICogYW5kIGFyZSBub3QgcmVpbml0aWFsaXplZCBoZXJlLCBsZXN0IHdlIGNsb2JiZXIgY2FsbGJhY2tzIGEKJiM0MzsJCSAqIHJlZW50cmFudCBjYWxsX3NyY3UoKSBhbHJlYWR5IHN0YWdlZC4gIFNlZSBfX2NhbGxfc3JjdSgpLgomIzQzOwkJICovCiAJCXNkcC0mZ3Q7c3NwID0gc3NwOwogCX0KIH0KQEAgLTY5NSw3ICYjNDM7NzQwLDEyIEBAIHZvaWQgY2xlYW51cF9zcmN1X3N0cnVjdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCkKIAkJcmV0dXJuOyAvKiBKdXN0IGxlYWsgaXQhICovCiAJaWYgKFdBUk5fT04oc3JjdV9yZWFkZXJzX2FjdGl2ZShzc3ApKSkKIAkJcmV0dXJuOyAvKiBKdXN0IGxlYWsgaXQhICovCi0JLyogV2FpdCBmb3IgaXJxX3dvcmsgdG8gZmluaXNoIGZpcnN0IGFzIGl0IG1heSBxdWV1ZSBhIG5ldyB3b3JrLiAqLwomIzQzOwkvKgomIzQzOwkgKiBEcmFpbiBkZWZlcnJlZCBjYWxsYmFja3MgYmVmb3JlIHN5bmNpbmcgLSZndDtpcnFfd29yazogcmUtaXNzdWluZyBvbmUgY2FuCiYjNDM7CSAqIHN0YXJ0IGEgZ3JhY2UgcGVyaW9kIGFuZCByZS1xdWV1ZSAtJmd0O2lycV93b3JrLCB3aGljaCB0aGVuIHNjaGVkdWxlcwomIzQzOwkgKiAtJmd0O3dvcmssIHNvIGJvdGggbXVzdCBiZSB3YWl0ZWQgb3V0IGFmdGVyIHRoZSBkcmFpbi4KJiM0MzsJICovCiYjNDM7CXNyY3VfZGVmZXJfZmx1c2goKTsKIAlpcnFfd29ya19zeW5jKCZhbXA7c3VwLSZndDtpcnFfd29yayk7CiAJZmx1c2hfZGVsYXllZF93b3JrKCZhbXA7c3VwLSZndDt3b3JrKTsKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CkBAIC0xNDEwLDggJiM0MzsxNDYwLDggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsCiAgKiBzcmN1X3JlYWRfbG9jaygpLCBhbmQgc3JjdV9yZWFkX3VubG9jaygpIHRoYXQgYXJlIGFsbCBwYXNzZWQgdGhlIHNhbWUKICAqIHNyY3Vfc3RydWN0IHN0cnVjdHVyZS4KICAqLwotc3RhdGljIHZvaWQgX19jYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLAotCQkJcmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBkb19ub3JtKQomIzQzO3N0YXRpYyB2b2lkIHNyY3VfZG9fZW5xdWV1ZShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsCiYjNDM7CQkJICAgIHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgZG9fbm9ybSkKIHsKIAlpZiAoZGVidWdfcmN1X2hlYWRfcXVldWUocmhwKSkgewogCQkvKiBQcm9iYWJsZSBkb3VibGUgY2FsbF9zcmN1KCksIHNvIGxlYWsgdGhlIGNhbGxiYWNrLiAqLwpAQCAtMTQyMyw2ICYjNDM7MTQ3MywxMTEgQEAgc3RhdGljIHZvaWQgX19jYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLAogCSh2b2lkKXNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHNzcCwgcmhwLCBkb19ub3JtKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogVGhlIHNyY3VfY2JsaXN0IGFuZCBzcmN1X25vZGUgdHJlZSBhcmUgb25seSBhY2Nlc3NlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQKJiM0MzsgKiAoc3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoKSBlbnF1ZXVlcyB1bmRlciByYXdfc3Bpbl9sb2NrX2lycXNhdmUoKSBhbmQgbWF5IHdhbGsKJiM0MzsgKiB0aGUgdHJlZSkuICBMaWtlIGNhbGxfcmN1KCksIF9fY2FsbF9zcmN1KCkgZGVmZXJzIHdoZW4gaW50ZXJydXB0cyBhcmUgYWxyZWFkeQomIzQzOyAqIGRpc2FibGVkLCBzbyBhIHJlLWVudHJhbnQgY2FsbF9zcmN1KCkgLS0gZS5nLiBjYWxsX3JjdV90YXNrc190cmFjZSgpIGZyb20gYQomIzQzOyAqIEJQRiBwcm9ncmFtIC0tIGNhbm5vdCBjb3JydXB0IHRoZSBsaXN0IG9yIGRlYWRsb2NrLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIF9fY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCwKJiM0MzsJCQlyY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGRvX25vcm0pCiYjNDM7ewomIzQzOwlpZiAoc2hvdWxkX3JjdV9kZWZlcigpKSB7CiYjNDM7CQlzdHJ1Y3Qgc3JjdV9kZWZlciAqc25kcCA9IHRoaXNfY3B1X3B0cigmYW1wO3NyY3VfZGVmZXIpOwomIzQzOwkJc3RydWN0IHNyY3VfZGF0YSAqc2RwOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIEluc3RydW1lbnRhdGlvbiBvbiB0aGUgZW5xdWV1ZSBwYXRoIGNhbiByZS1lbnRlciBoZXJlIGZyb20KJiM0MzsJCSAqIGluc2lkZSBzcmN1X2RlZmVyX2RyYWluKCkuICBSZS1xdWV1aW5nIHdvdWxkIGxpdmVsb2NrIHRoZQomIzQzOwkJICogZHJhaW4sIHNvIGRyb3AgdGhlIGNhbGxiYWNrOyBhbiBOTUkgY2Fubm90IGxvb3AsIHNvIGxldCBpdCBpbi4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKFJFQURfT05DRShzbmRwLSZndDtkcmFpbmluZykgJmFtcDsmYW1wOyAhaW5fbm1pKCkpIHsKJiM0MzsJCQlXQVJOX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSwKJiM0MzsJCQkJICAmIzM0O2NhbGxfc3JjdSgpIHJlLWVudGVyZWQgZHVyaW5nIGNhbGxiYWNrIGRyYWluOyBsZWFraW5nIGNhbGxiYWNrXG4mIzM0Oyk7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQomIzQzOwkJc2RwID0gdGhpc19jcHVfcHRyKHNzcC0mZ3Q7c2RhKTsKJiM0MzsJCXJocC0mZ3Q7ZnVuYyA9IGZ1bmM7CiYjNDM7CQlpZiAoIWRvX25vcm0pCiYjNDM7CQkJV1JJVEVfT05DRShzZHAtJmd0O2RlZmVyX2V4cCwgdHJ1ZSk7CiYjNDM7CQlpZiAobGxpc3RfYWRkKChzdHJ1Y3QgbGxpc3Rfbm9kZSAqKXJocCwgJmFtcDtzZHAtJmd0O2RlZmVyX2NicykpIHsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIENoYWluIHRoaXMgc3JjdV9kYXRhIGZvciB0aGUgZHJhaW4uICAtJmd0O3NzcCBtdXN0IGJlCiYjNDM7CQkJICogcHVibGlzaGVkIGhlcmU6IGRlZmVycmFsIHNraXBzIGNoZWNrX2luaXRfc3JjdV9zdHJ1Y3QoKSwKJiM0MzsJCQkgKiBzbyBvbiBhIG5ldmVyLWluaXRpYWxpemVkIHN0YXRpYyBzcmN1X3N0cnVjdCB0aGUKJiM0MzsJCQkgKiBzdGF0aWNhbGx5IHplcm9lZCAtJmd0O3NkYSBzdGlsbCBoYXMgYSBOVUxMIC0mZ3Q7c3NwLgomIzQzOwkJCSAqLwomIzQzOwkJCXNkcC0mZ3Q7c3NwID0gc3NwOwomIzQzOwkJCWlmIChsbGlzdF9hZGQoJmFtcDtzZHAtJmd0O2RlZmVyX2xpbmssICZhbXA7c25kcC0mZ3Q7bGlzdCkpCiYjNDM7CQkJCWlycV93b3JrX3F1ZXVlKCZhbXA7c25kcC0mZ3Q7aXcpOwomIzQzOwkJfQomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFuIE5NSSByZWFjaGluZyBoZXJlIGVudGVyZWQgd2l0aCBpcnFzIGVuYWJsZWQsIHNvIHRoZSBlbnF1ZXVlIGNhbiByYWNlLiAqLwomIzQzOwlXQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSAmYW1wOyZhbXA7IGluX25taSgpKTsKJiM0MzsKJiM0MzsJc3JjdV9kb19lbnF1ZXVlKHNzcCwgcmhwLCBmdW5jLCBkb19ub3JtKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBSZS1pc3N1ZSBkZWZlcnJlZCBjYWxsYmFja3Mgc3RyYWlnaHQgdG8gc3JjdV9kb19lbnF1ZXVlKCkgc28gdGhleSBjYW5ub3QgZGVmZXIKJiM0MzsgKiBhZ2Fpbi4gIC0mZ3Q7bG9jayBzZXJpYWxpemVzIHRoZSBkcmFpbmVyczogdGhlIGlycV93b3JrLCBzcmN1X2RlZmVyX2ZsdXNoKCkgYW5kCiYjNDM7ICogc3JjdV9vZmZsaW5lX2RyYWluKCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgX19zcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBzcmN1X2RlZmVyICpzbmRwLCBib29sIGd1YXJkKQomIzQzO3sKJiM0MzsJc3RydWN0IGxsaXN0X25vZGUgKnNub2RlLCAqc25leHQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiYjNDM7CXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3NuZHAtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJaWYgKGd1YXJkKQomIzQzOwkJV1JJVEVfT05DRShzbmRwLSZndDtkcmFpbmluZywgdHJ1ZSk7CiYjNDM7CWxsaXN0X2Zvcl9lYWNoX3NhZmUoc25vZGUsIHNuZXh0LCBsbGlzdF9kZWxfYWxsKCZhbXA7c25kcC0mZ3Q7bGlzdCkpIHsKJiM0MzsJCXN0cnVjdCBzcmN1X2RhdGEgKnNkcCA9IGNvbnRhaW5lcl9vZihzbm9kZSwgc3RydWN0IHNyY3VfZGF0YSwgZGVmZXJfbGluayk7CiYjNDM7CQlzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCA9IHNkcC0mZ3Q7c3NwOwomIzQzOwkJc3RydWN0IGxsaXN0X25vZGUgKmNub2RlLCAqY25leHQ7CiYjNDM7CQlib29sIGRvX25vcm07CiYjNDM7CiYjNDM7CQljbm9kZSA9IGxsaXN0X2RlbF9hbGwoJmFtcDtzZHAtJmd0O2RlZmVyX2Nicyk7CiYjNDM7CQlkb19ub3JtID0gIVJFQURfT05DRShzZHAtJmd0O2RlZmVyX2V4cCk7CiYjNDM7CQlpZiAoIWRvX25vcm0pCiYjNDM7CQkJV1JJVEVfT05DRShzZHAtJmd0O2RlZmVyX2V4cCwgZmFsc2UpOwomIzQzOwkJbGxpc3RfZm9yX2VhY2hfc2FmZShjbm9kZSwgY25leHQsIGNub2RlKSB7CiYjNDM7CQkJc3RydWN0IHJjdV9oZWFkICpyaHAgPSAoc3RydWN0IHJjdV9oZWFkICopY25vZGU7CiYjNDM7CiYjNDM7CQkJcmhwLSZndDtuZXh0ID0gTlVMTDsKJiM0MzsJCQlzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIHJocC0mZ3Q7ZnVuYywgZG9fbm9ybSk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJaWYgKGd1YXJkKQomIzQzOwkJV1JJVEVfT05DRShzbmRwLSZndDtkcmFpbmluZywgZmFsc2UpOwomIzQzOwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3NuZHAtJmd0O2xvY2ssIGZsYWdzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBPbmx5IHRoZSBpcnFfd29yayBkcmFpbiBjYW4gYmUgcmUtZmVkIGJ5IGl0cyBvd24gcmUtaXNzdWUsIHNvIG9ubHkgaXQgc2V0cwomIzQzOyAqIC0mZ3Q7ZHJhaW5pbmcuICBBIGRpcmVjdCBkcmFpbiByZS1pc3N1ZXMgb250byB0aGlzIENQVSwgYW5kIGFueXRoaW5nIHN0YWdlZAomIzQzOyAqIGR1cmluZyBpdCBpcyBwaWNrZWQgdXAgYnkgdGhhdCBDUFUmIzM5O3Mgb3duIGlycV93b3JrLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdykKJiM0Mzt7CiYjNDM7CV9fc3JjdV9kZWZlcl9kcmFpbihjb250YWluZXJfb2YoaXcsIHN0cnVjdCBzcmN1X2RlZmVyLCBpdyksIHRydWUpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIERyYWluIEBjcHUmIzM5O3MgZGVmZXJyZWQgY2FsbF9zcmN1KCkgY2FsbGJhY2tzIGZyb20gcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcygpCiYjNDM7ICogb25jZSBAY3B1IGlzIGRlYWQuICBPbmUgcGFzcyBjb3ZlcnMgZXZlcnkgc3JjdV9zdHJ1Y3QsIGFuZCB0aGUgcmUtaXNzdWUgbGFuZHMKJiM0MzsgKiBvbiB0aGUgY3VycmVudCBDUFUuCiYjNDM7ICovCiYjNDM7dm9pZCBzcmN1X29mZmxpbmVfZHJhaW4oaW50IGNwdSkKJiM0Mzt7CiYjNDM7CWlmICghSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSkKJiM0MzsJCXJldHVybjsKJiM0MzsJX19zcmN1X2RlZmVyX2RyYWluKCZhbXA7cGVyX2NwdShzcmN1X2RlZmVyLCBjcHUpLCBmYWxzZSk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBjYWxsX3NyY3UoKSAtIFF1ZXVlIGEgY2FsbGJhY2sgZm9yIGludm9jYXRpb24gYWZ0ZXIgYW4gU1JDVSBncmFjZSBwZXJpb2QKICAqIEBzc3A6IHNyY3Vfc3RydWN0IGluIHF1ZXVlIHRoZSBjYWxsYmFjawpAQCAtMTY3Nyw5ICYjNDM7MTgzMiwxNyBAQCB2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCkKIHsKIAlpbnQgY3B1OwogCWludCBpZHg7Ci0JdW5zaWduZWQgbG9uZyBzID0gcmN1X3NlcV9zbmFwKCZhbXA7c3NwLSZndDtzcmN1X3N1cC0mZ3Q7c3JjdV9iYXJyaWVyX3NlcSk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgczsKIAogCWNoZWNrX2luaXRfc3JjdV9zdHJ1Y3Qoc3NwKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcyBiZWZvcmUgc25hcHNob3R0aW5nIHRoZSBzZXF1ZW5jZS4gIFRoZQomIzQzOwkgKiBzaGFyZWQgaXJxX3dvcmsgbWF5IGFsc28gZHJhaW4gb3RoZXIgc3JjdV9zdHJ1Y3RzJiMzOTssIHdoaWNoIGlzIGhhcm1sZXNzLgomIzQzOwkgKi8KJiM0MzsJc3JjdV9kZWZlcl9mbHVzaCgpOwomIzQzOwomIzQzOwlzID0gcmN1X3NlcV9zbmFwKCZhbXA7c3NwLSZndDtzcmN1X3N1cC0mZ3Q7c3JjdV9iYXJyaWVyX3NlcSk7CiAJbXV0ZXhfbG9jaygmYW1wO3NzcC0mZ3Q7c3JjdV9zdXAtJmd0O3NyY3VfYmFycmllcl9tdXRleCk7CiAJaWYgKHJjdV9zZXFfZG9uZSgmYW1wO3NzcC0mZ3Q7c3JjdV9zdXAtJmd0O3NyY3VfYmFycmllcl9zZXEsIHMpKSB7CiAJCXNtcF9tYigpOyAvKiBGb3JjZSBvcmRlcmluZyBmb2xsb3dpbmcgcmV0dXJuLiAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdS90aW55LmMgYi9rZXJuZWwvcmN1L3RpbnkuYwppbmRleCBkY2NjY2Q2YmU5NDExLi5iYWZmZTY2MDA0M2Y1IDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1L3RpbnkuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvcmN1L3RpbnkuYwpAQCAtMTEsNiAmIzQzOzExLDggQEAKICAqLwogI2luY2x1ZGUgJmx0O2xpbnV4L2NvbXBsZXRpb24uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pbnRlcnJ1cHQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaXJxX3dvcmsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbGxpc3QuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ub3RpZmllci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JjdXBkYXRlX3dhaXQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKQEAgLTQyLDggJiM0Mzs0NCw5OSBAQCBzdGF0aWMgc3RydWN0IHJjdV9jdHJsYmxrIHJjdV9jdHJsYmxrID0gewogCS5ncF9zZXEJCT0gMCAtIDMwMFVMLAogfTsKIAomIzQzOy8qCiYjNDM7ICogVGhlIGNhbGxiYWNrIGxpc3QgaXMgb25seSBhY2Nlc3NlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQsIHNvIGEgY2FsbF9yY3UoKQomIzQzOyAqIHRoYXQgYXJyaXZlcyB3aXRoIGludGVycnVwdHMgb2ZmIHN0YWdlcyB0aGUgY2FsbGJhY2sgb24gYSBsb2NrbGVzcyBsaXN0IHRoYXQKJiM0MzsgKiBhbiBpcnFfd29yayByZS1pc3N1ZXMgbGF0ZXIuICBPbmUgZ2xvYmFsIGxpc3QgYW5kIGlycV93b3JrIHN1ZmZpY2UsIGFzIFRpbnkKJiM0MzsgKiBSQ1UgaXMgdW5pcHJvY2Vzc29yLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KTsKJiM0MztzdGF0aWMgTExJU1RfSEVBRChyY3VfZGVmZXJfbGlzdCk7CiYjNDM7c3RhdGljIHN0cnVjdCBpcnFfd29yayByY3VfZGVmZXJfaXcgPSBJUlFfV09SS19JTklUX0hBUkQocmN1X2RlZmVyX2RyYWluKTsKJiM0MztzdGF0aWMgYm9vbCByY3VfZGVmZXJfZHJhaW5pbmc7CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBFbnF1ZXVlIEBoZWFkIG9uIHRoZSBjYWxsYmFjayBsaXN0LiAgQWxzbyBjYWxsZWQgYnkgcmN1X2RlZmVyX2RyYWluKCkgdG8KJiM0MzsgKiByZS1pc3N1ZSBhIGRlZmVycmVkIGNhbGxiYWNrLCBzbyBpdCBtdXN0IG5vdCByZS1jaGVjayB0aGUgZGVmZXJyYWwgY29uZGl0aW9uLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHJjdV9kb19lbnF1ZXVlKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYykKJiM0Mzt7CiYjNDM7CXN0YXRpYyBhdG9taWNfdCBkb3VibGVmcmVlczsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKJiM0MzsJaWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKGhlYWQpKSB7CiYjNDM7CQlpZiAoYXRvbWljX2luY19yZXR1cm4oJmFtcDtkb3VibGVmcmVlcykgJmx0OyA0KSB7CiYjNDM7CQkJcHJfZXJyKCYjMzQ7JXMoKTogRG91YmxlLWZyZWVkIENCICVwLSZndDslcFMoKSEhISAgJiMzNDssIF9fZnVuY19fLCBoZWFkLCBoZWFkLSZndDtmdW5jKTsKJiM0MzsJCQltZW1fZHVtcF9vYmooaGVhZCk7CiYjNDM7CQl9CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJaGVhZC0mZ3Q7ZnVuYyA9IGZ1bmM7CiYjNDM7CWhlYWQtJmd0O25leHQgPSBOVUxMOwomIzQzOwomIzQzOwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiYjNDM7CSpyY3VfY3RybGJsay5jdXJ0YWlsID0gaGVhZDsKJiM0MzsJcmN1X2N0cmxibGsuY3VydGFpbCA9ICZhbXA7aGVhZC0mZ3Q7bmV4dDsKJiM0MzsJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoaXNfaWRsZV90YXNrKGN1cnJlbnQpKSkgewomIzQzOwkJLyogZm9yY2Ugc2NoZWR1bGluZyBmb3IgcmN1X3FzKCkgKi8KJiM0MzsJCXJlc2NoZWRfY3B1KDApOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIF9fcmN1X2RlZmVyX2RyYWluKGJvb2wgZ3VhcmQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSwgKm5leHQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiYjNDM7CS8qIENhbGxiYWNrcyBhcmUgdW5vcmRlcmVkLCBzbyBkcmFpbiBpbiBsbGlzdCBvcmRlciB3aXRob3V0IHJldmVyc2luZy4gKi8KJiM0MzsJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwomIzQzOwlpZiAoZ3VhcmQpCiYjNDM7CQlXUklURV9PTkNFKHJjdV9kZWZlcl9kcmFpbmluZywgdHJ1ZSk7CiYjNDM7CWxsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgbmV4dCwgbGxpc3RfZGVsX2FsbCgmYW1wO3JjdV9kZWZlcl9saXN0KSkgewomIzQzOwkJc3RydWN0IHJjdV9oZWFkICpoZWFkID0gKHN0cnVjdCByY3VfaGVhZCAqKW5vZGU7CiYjNDM7CiYjNDM7CQloZWFkLSZndDtuZXh0ID0gTlVMTDsKJiM0MzsJCXJjdV9kb19lbnF1ZXVlKGhlYWQsIGhlYWQtJmd0O2Z1bmMpOwomIzQzOwl9CiYjNDM7CWlmIChndWFyZCkKJiM0MzsJCVdSSVRFX09OQ0UocmN1X2RlZmVyX2RyYWluaW5nLCBmYWxzZSk7CiYjNDM7CWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogT25seSB0aGUgaXJxX3dvcmsgZHJhaW4gY2FuIGJlIHJlLWZlZCBieSBpdHMgb3duIHJlLWlzc3VlOyBzZWUgVHJlZSBSQ1UuICovCiYjNDM7c3RhdGljIHZvaWQgcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpCiYjNDM7ewomIzQzOwlfX3JjdV9kZWZlcl9kcmFpbih0cnVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgY2FsbF9yY3VfZGVmZXIoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jKQomIzQzO3sKJiM0MzsJLyogQSByZS1lbnRyYW50IGNhbGxfcmN1KCkgZHVyaW5nIHRoZSBkcmFpbiB3b3VsZCBsaXZlbG9jayBpdDsgZHJvcCBpdC4gKi8KJiM0MzsJaWYgKFJFQURfT05DRShyY3VfZGVmZXJfZHJhaW5pbmcpICZhbXA7JmFtcDsgIWluX25taSgpKSB7CiYjNDM7CQlXQVJOX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSwKJiM0MzsJCQkgICYjMzQ7Y2FsbF9yY3UoKSByZS1lbnRlcmVkIGR1cmluZyBjYWxsYmFjayBkcmFpbjsgbGVha2luZyBjYWxsYmFja1xuJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CWhlYWQtJmd0O2Z1bmMgPSBmdW5jOwomIzQzOwlpZiAobGxpc3RfYWRkKChzdHJ1Y3QgbGxpc3Rfbm9kZSAqKWhlYWQsICZhbXA7cmN1X2RlZmVyX2xpc3QpKQomIzQzOwkJaXJxX3dvcmtfcXVldWUoJmFtcDtyY3VfZGVmZXJfaXcpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIHNvIGEgZm9sbG93aW5nIHJjdV9iYXJyaWVyKCkgd2FpdHMgZm9yIHRoZW0uICovCiYjNDM7c3RhdGljIHZvaWQgcmN1X2RlZmVyX2ZsdXNoKHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpCiYjNDM7CQlyZXR1cm47CiYjNDM7CV9fcmN1X2RlZmVyX2RyYWluKGZhbHNlKTsKJiM0Mzt9CiYjNDM7CiB2b2lkIHJjdV9iYXJyaWVyKHZvaWQpCiB7CiYjNDM7CS8qIFJlZ2lzdGVyIGFueSBkZWZlcnJlZCBjYWxsYmFja3MgZmlyc3QuICovCiYjNDM7CXJjdV9kZWZlcl9mbHVzaCgpOwogCXdhaXRfcmN1X2dwKGNhbGxfcmN1X2h1cnJ5KTsKIH0KIEVYUE9SVF9TWU1CT0wocmN1X2JhcnJpZXIpOwpAQCAtMTU3LDI5ICYjNDM7MjUwLDE1IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3JjdSk7CiAgKi8KIHZvaWQgY2FsbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jKQogewotCXN0YXRpYyBhdG9taWNfdCBkb3VibGVmcmVlczsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKGhlYWQpKSB7Ci0JCWlmIChhdG9taWNfaW5jX3JldHVybigmYW1wO2RvdWJsZWZyZWVzKSAmbHQ7IDQpIHsKLQkJCXByX2VycigmIzM0OyVzKCk6IERvdWJsZS1mcmVlZCBDQiAlcC0mZ3Q7JXBTKCkhISEgICYjMzQ7LCBfX2Z1bmNfXywgaGVhZCwgaGVhZC0mZ3Q7ZnVuYyk7Ci0JCQltZW1fZHVtcF9vYmooaGVhZCk7Ci0JCX0KJiM0MzsJaWYgKHNob3VsZF9yY3VfZGVmZXIoKSkgewomIzQzOwkJY2FsbF9yY3VfZGVmZXIoaGVhZCwgZnVuYyk7CiAJCXJldHVybjsKIAl9CiAKLQloZWFkLSZndDtmdW5jID0gZnVuYzsKLQloZWFkLSZndDtuZXh0ID0gTlVMTDsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkqcmN1X2N0cmxibGsuY3VydGFpbCA9IGhlYWQ7Ci0JcmN1X2N0cmxibGsuY3VydGFpbCA9ICZhbXA7aGVhZC0mZ3Q7bmV4dDsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiYjNDM7CS8qIEFuIE5NSSByZWFjaGluZyBoZXJlIGVudGVyZWQgd2l0aCBpcnFzIGVuYWJsZWQsIHNvIHRoZSBlbnF1ZXVlIGNhbiByYWNlLiAqLwomIzQzOwlXQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSAmYW1wOyZhbXA7IGluX25taSgpKTsKIAotCWlmICh1bmxpa2VseShpc19pZGxlX3Rhc2soY3VycmVudCkpKSB7Ci0JCS8qIGZvcmNlIHNjaGVkdWxpbmcgZm9yIHJjdV9xcygpICovCi0JCXJlc2NoZWRfY3B1KDApOwotCX0KJiM0MzsJcmN1X2RvX2VucXVldWUoaGVhZCwgZnVuYyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjYWxsX3JjdSk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdHJlZS5jIGIva2VybmVsL3JjdS90cmVlLmMKaW5kZXggOTY4NDhmYzFmMDJiOC4uZWI2YjExY2ZhZDQ2ZiAxMDA2NDQKLS0tIGEva2VybmVsL3JjdS90cmVlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS90cmVlLmMKQEAgLTI0LDYgJiM0MzsyNCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc21wLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmN1cGRhdGVfd2FpdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ludGVycnVwdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9sbGlzdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvZGVidWcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ubWkuaCZndDsKQEAgLTMxNDgsMjEgJiM0MzszMTQ5LDI1IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2NiX292bGQoc3RydWN0IHJjdV9kYXRhICpyZHApCiAJcmF3X3NwaW5fdW5sb2NrX3JjdV9ub2RlKHJucCk7CiB9CiAKLXN0YXRpYyB2b2lkCi1fX2NhbGxfcmN1X2NvbW1vbihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgbGF6eV9pbikKJiM0MzsvKgomIzQzOyAqIFRoZSBjYWxsYmFjayBsaXN0IGlzIG9ubHkgYWNjZXNzZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLCBzbyBhIGNhbGxfcmN1KCkKJiM0MzsgKiB0aGF0IGFycml2ZXMgd2l0aCBpbnRlcnJ1cHRzIG9mZiAoc2VlIHNob3VsZF9yY3VfZGVmZXIoKSkgc3RhZ2VzIHRoZSBjYWxsYmFjawomIzQzOyAqIG9uIGEgcGVyLUNQVSBsbGlzdCB0aGF0IGFuIGlycV93b3JrIHJlLWlzc3VlcyBvbmNlIGludGVycnVwdHMgYXJlIG9uLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIEVucXVldWUgQGhlYWQgb24gdGhpcyBDUFUmIzM5O3MgcmN1X3NlZ2NibGlzdC4gIEFsc28gY2FsbGVkIGJ5IHJjdV9kZWZlcl9kcmFpbigpCiYjNDM7ICogdG8gcmUtaXNzdWUgYSBkZWZlcnJlZCBjYWxsYmFjaywgc28gaXQgbXVzdCBub3QgcmUtY2hlY2sgdGhlIGRlZmVycmFsCiYjNDM7ICogY29uZGl0aW9uLiAgRWl0aGVyIGNhbGxlciBtYXkgaGF2ZSBpbnRlcnJ1cHRzIGFscmVhZHkgZGlzYWJsZWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgcmN1X2RvX2VucXVldWUoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGxhenlfaW4pCiB7CiAJc3RhdGljIGF0b21pY190IGRvdWJsZWZyZWVzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJYm9vbCBsYXp5OwogCXN0cnVjdCByY3VfZGF0YSAqcmRwOwogCi0JLyogTWlzYWxpZ25lZCByY3VfaGVhZCEgKi8KLQlXQVJOX09OX09OQ0UoKHVuc2lnbmVkIGxvbmcpaGVhZCAmYW1wOyAoc2l6ZW9mKHZvaWQgKikgLSAxKSk7Ci0KLQkvKiBBdm9pZCBOVUxMIGRlcmVmZXJlbmNlIGlmIGNhbGxiYWNrIGlzIE5VTEwuICovCi0JaWYgKFdBUk5fT05fT05DRSghZnVuYykpCi0JCXJldHVybjsKLQogCWlmIChkZWJ1Z19yY3VfaGVhZF9xdWV1ZShoZWFkKSkgewogCQkvKgogCQkgKiBQcm9iYWJsZSBkb3VibGUgY2FsbF9yY3UoKSwgc28gbGVhayB0aGUgY2FsbGJhY2suCkBAIC0zMjA2LDYgJiM0MzszMjExLDEwNCBAQCBfX2NhbGxfcmN1X2NvbW1vbihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgbGF6eV9pbikKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFJlLWlzc3VlIGRlZmVycmVkIGNhbGxiYWNrcyBzdHJhaWdodCB0byB0aGUgZW5xdWV1ZSBzbyB0aGV5IGNhbm5vdCBkZWZlcgomIzQzOyAqIGFnYWluLiAgLSZndDtkZWZlcl9sb2NrIHNlcmlhbGl6ZXMgdGhlIGRyYWluZXJzOiB0aGlzIENQVSYjMzk7cyBpcnFfd29yaywKJiM0MzsgKiByY3VfZGVmZXJfZmx1c2goKSBhbmQgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcygpLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIF9fcmN1X2RlZmVyX2RyYWluKHN0cnVjdCByY3VfZGF0YSAqcmRwLCBib29sIGd1YXJkKQomIzQzO3sKJiM0MzsJc3RydWN0IGxsaXN0X25vZGUgKm5vZGUsICpuZXh0OwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwomIzQzOwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3JkcC0mZ3Q7ZGVmZXJfbG9jaywgZmxhZ3MpOwomIzQzOwlpZiAoZ3VhcmQpCiYjNDM7CQlXUklURV9PTkNFKHJkcC0mZ3Q7ZGVmZXJfZHJhaW5pbmcsIHRydWUpOwomIzQzOwlsbGlzdF9mb3JfZWFjaF9zYWZlKG5vZGUsIG5leHQsIGxsaXN0X2RlbF9hbGwoJmFtcDtyZHAtJmd0O2RlZmVyX2hlYWQpKSB7CiYjNDM7CQlzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQgPSAoc3RydWN0IHJjdV9oZWFkICopbm9kZTsKJiM0MzsKJiM0MzsJCWhlYWQtJmd0O25leHQgPSBOVUxMOwomIzQzOwkJcmN1X2RvX2VucXVldWUoaGVhZCwgaGVhZC0mZ3Q7ZnVuYywgZmFsc2UpOwomIzQzOwl9CiYjNDM7CWlmIChndWFyZCkKJiM0MzsJCVdSSVRFX09OQ0UocmRwLSZndDtkZWZlcl9kcmFpbmluZywgZmFsc2UpOwomIzQzOwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3JkcC0mZ3Q7ZGVmZXJfbG9jaywgZmxhZ3MpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIE9ubHkgdGhlIGlycV93b3JrIGRyYWluIGNhbiBiZSByZS1mZWQgYnkgaXRzIG93biByZS1pc3N1ZSwgc28gb25seSBpdCBzZXRzCiYjNDM7ICogLSZndDtkZWZlcl9kcmFpbmluZy4gIEEgZGlyZWN0IGRyYWluIHJlLWlzc3VlcyBvbnRvIHRoaXMgQ1BVLCBhbmQgYW55dGhpbmcKJiM0MzsgKiBzdGFnZWQgZHVyaW5nIGl0IGlzIHBpY2tlZCB1cCBieSB0aGF0IENQVSYjMzk7cyBvd24gaXJxX3dvcmsuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpCiYjNDM7ewomIzQzOwlfX3JjdV9kZWZlcl9kcmFpbihjb250YWluZXJfb2YoaXcsIHN0cnVjdCByY3VfZGF0YSwgZGVmZXJfd29yayksIHRydWUpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBTdGFnZSBAaGVhZCBmb3IgdGhpcyBDUFUmIzM5O3MgaXJxX3dvcmsgd2hlbiBjYWxsX3JjdSgpIGNhbm5vdCBlbnF1ZXVlIG5vdy4gKi8KJiM0MztzdGF0aWMgdm9pZCBjYWxsX3JjdV9kZWZlcihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHRoaXNfY3B1X3B0cigmYW1wO3JjdV9kYXRhKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSW5zdHJ1bWVudGF0aW9uIG9uIHRoZSBlbnF1ZXVlIHBhdGggY2FuIHJlLWVudGVyIGhlcmUgZnJvbSBpbnNpZGUKJiM0MzsJICogcmN1X2RlZmVyX2RyYWluKCkuICBSZS1xdWV1aW5nIHdvdWxkIGxpdmVsb2NrIHRoZSBkcmFpbiwgc28gZHJvcCB0aGUKJiM0MzsJICogY2FsbGJhY2s7IGFuIE5NSSBpcyBvbmUtc2hvdCBhbmQgY2Fubm90IGxvb3AsIHNvIGxldCBpdCB0aHJvdWdoLgomIzQzOwkgKi8KJiM0MzsJaWYgKFJFQURfT05DRShyZHAtJmd0O2RlZmVyX2RyYWluaW5nKSAmYW1wOyZhbXA7ICFpbl9ubWkoKSkgewomIzQzOwkJV0FSTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSksCiYjNDM7CQkJICAmIzM0O2NhbGxfcmN1KCkgcmUtZW50ZXJlZCBkdXJpbmcgY2FsbGJhY2sgZHJhaW47IGxlYWtpbmcgY2FsbGJhY2tcbiYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwloZWFkLSZndDtmdW5jID0gZnVuYzsKJiM0MzsJaWYgKGxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKiloZWFkLCAmYW1wO3JkcC0mZ3Q7ZGVmZXJfaGVhZCkpCiYjNDM7CQlpcnFfd29ya19xdWV1ZSgmYW1wO3JkcC0mZ3Q7ZGVmZXJfd29yayk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUmVnaXN0ZXIgcGVuZGluZyBkZWZlcnJlZCBjYWxsYmFja3MgaW50byB0aGUgY2FsbGJhY2sgbGlzdHMgc28gYSBmb2xsb3dpbmcKJiM0MzsgKiByY3VfYmFycmllcigpIHdhaXRzIGZvciB0aGVtLiAgVGhpcyBydW5zIGJlZm9yZSByY3VfYmFycmllcigpIHNjYW5zIHRoZQomIzQzOyAqIGxpc3RzLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9mbHVzaCh2b2lkKQomIzQzO3sKJiM0MzsJaW50IGNwdTsKJiM0MzsKJiM0MzsJaWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiYjNDM7CQlzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHBlcl9jcHVfcHRyKCZhbXA7cmN1X2RhdGEsIGNwdSk7CiYjNDM7CiYjNDM7CQlpZiAoIWxsaXN0X2VtcHR5KCZhbXA7cmRwLSZndDtkZWZlcl9oZWFkKSkKJiM0MzsJCQlfX3JjdV9kZWZlcl9kcmFpbihyZHAsIGZhbHNlKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZAomIzQzO19fY2FsbF9yY3VfY29tbW9uKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBsYXp5X2luKQomIzQzO3sKJiM0MzsJLyogTWlzYWxpZ25lZCByY3VfaGVhZCEgKi8KJiM0MzsJV0FSTl9PTl9PTkNFKCh1bnNpZ25lZCBsb25nKWhlYWQgJmFtcDsgKHNpemVvZih2b2lkICopIC0gMSkpOwomIzQzOwomIzQzOwkvKiBBdm9pZCBOVUxMIGRlcmVmZXJlbmNlIGlmIGNhbGxiYWNrIGlzIE5VTEwuICovCiYjNDM7CWlmIChXQVJOX09OX09OQ0UoIWZ1bmMpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAoc2hvdWxkX3JjdV9kZWZlcigpKSB7CiYjNDM7CQljYWxsX3JjdV9kZWZlcihoZWFkLCBmdW5jKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBBbiBOTUkgcmVhY2hpbmcgaGVyZSBlbnRlcmVkIHdpdGggaXJxcyBlbmFibGVkLCBzbyB0aGUgZW5xdWV1ZSBjYW4gcmFjZS4gKi8KJiM0MzsJV0FSTl9PTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSkgJmFtcDsmYW1wOyBpbl9ubWkoKSk7CiYjNDM7CiYjNDM7CXJjdV9kb19lbnF1ZXVlKGhlYWQsIGZ1bmMsIGxhenlfaW4pOwomIzQzO30KJiM0MzsKICNpZmRlZiBDT05GSUdfUkNVX0xBWlkKIHN0YXRpYyBib29sIGVuYWJsZV9yY3VfbGF6eSBfX3JlYWRfbW9zdGx5ID0gIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9MQVpZX0RFRkFVTFRfT0ZGKTsKIG1vZHVsZV9wYXJhbShlbmFibGVfcmN1X2xhenksIGJvb2wsIDA0NDQpOwpAQCAtMzg5Niw4ICYjNDM7Mzk5OSwxMiBAQCB2b2lkIHJjdV9iYXJyaWVyKHZvaWQpCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBsb25nIGdzZXE7CiAJc3RydWN0IHJjdV9kYXRhICpyZHA7Ci0JdW5zaWduZWQgbG9uZyBzID0gcmN1X3NlcV9zbmFwKCZhbXA7cmN1X3N0YXRlLmJhcnJpZXJfc2VxdWVuY2UpOwomIzQzOwl1bnNpZ25lZCBsb25nIHM7CiAKJiM0MzsJLyogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcyBiZWZvcmUgc25hcHNob3R0aW5nIHRoZSBzZXF1ZW5jZS4gKi8KJiM0MzsJcmN1X2RlZmVyX2ZsdXNoKCk7CiYjNDM7CiYjNDM7CXMgPSByY3Vfc2VxX3NuYXAoJmFtcDtyY3Vfc3RhdGUuYmFycmllcl9zZXF1ZW5jZSk7CiAJcmN1X2JhcnJpZXJfdHJhY2UoVFBTKCYjMzQ7QmVnaW4mIzM0OyksIC0xLCBzKTsKIAogCS8qIFRha2UgbXV0ZXggdG8gc2VyaWFsaXplIGNvbmN1cnJlbnQgcmN1X2JhcnJpZXIoKSByZXF1ZXN0cy4gKi8KQEAgLTQyMzEsNiAmIzQzOzQzMzgsMTAgQEAgcmN1X2Jvb3RfaW5pdF9wZXJjcHVfZGF0YShpbnQgY3B1KQogCXJkcC0mZ3Q7cmN1X29ubF9ncF9zdGF0ZSA9IFJDVV9HUF9DTEVBTkVEOwogCXJkcC0mZ3Q7bGFzdF9zY2hlZF9jbG9jayA9IGppZmZpZXM7CiAJcmRwLSZndDtjcHUgPSBjcHU7CiYjNDM7CWluaXRfbGxpc3RfaGVhZCgmYW1wO3JkcC0mZ3Q7ZGVmZXJfaGVhZCk7CiYjNDM7CXJhd19zcGluX2xvY2tfaW5pdCgmYW1wO3JkcC0mZ3Q7ZGVmZXJfbG9jayk7CiYjNDM7CS8qIEhhcmQgaXJxX3dvcmsgc28gdGhlIHJlLWlzc3VlIHJ1bnMgcHJvbXB0bHkuICovCiYjNDM7CXJkcC0mZ3Q7ZGVmZXJfd29yayA9IElSUV9XT1JLX0lOSVRfSEFSRChyY3VfZGVmZXJfZHJhaW4pOwogCXJjdV9ib290X2luaXRfbm9jYl9wZXJjcHVfZGF0YShyZHApOwogfQogCkBAIC00NTI4LDYgJiM0Mzs0NjM5LDE2IEBAIHZvaWQgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcyhpbnQgY3B1KQogCXN0cnVjdCByY3VfZGF0YSAqcmRwID0gcGVyX2NwdV9wdHIoJmFtcDtyY3VfZGF0YSwgY3B1KTsKIAlib29sIG5lZWR3YWtlOwogCiYjNDM7CS8qCiYjNDM7CSAqIENhbGxiYWNrcyB0aGUgb3V0Z29pbmcgQ1BVIGRlZmVycmVkIGxhdGUgaW4gdGhlIG9mZmxpbmUgcGF0aCAocGFzdCB0aGUKJiM0MzsJICogcG9pbnQgaXRzIGlycV93b3JrIGNhbiBydW4pIHNpdCBvbiAtJmd0O2RlZmVyX2hlYWQsIHdoaWNoIHRoZSAtJmd0O2NibGlzdAomIzQzOwkgKiBtaWdyYXRpb24gYmVsb3cgZG9lcyBub3QgY292ZXIuICBEcmFpbiB0aGVtIGhlcmUsIGJlZm9yZSB0aGUgZWFybHkKJiM0MzsJICogcmV0dXJuczsgdGhlIHJlLWlzc3VlIGxhbmRzIG9uIHRoaXMgQ1BVLgomIzQzOwkgKi8KJiM0MzsJX19yY3VfZGVmZXJfZHJhaW4ocmRwLCBmYWxzZSk7CiYjNDM7CS8qIExpa2V3aXNlIGZvciB0aGUgb3V0Z29pbmcgQ1BVJiMzOTtzIGRlZmVycmVkIGNhbGxfc3JjdSgpIGNhbGxiYWNrcy4gKi8KJiM0MzsJc3JjdV9vZmZsaW5lX2RyYWluKGNwdSk7CiYjNDM7CiAJaWYgKHJjdV9yZHBfaXNfb2ZmbG9hZGVkKHJkcCkpCiAJCXJldHVybjsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3JjdS90cmVlLmggYi9rZXJuZWwvcmN1L3RyZWUuaAppbmRleCBlZWRmYTQzMDU5ZTgwLi5iN2NhYzdhMTNiNGYyIDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1L3RyZWUuaAomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvcmN1L3RyZWUuaApAQCAtMjI5LDYgJiM0MzsyMjksMTIgQEAgc3RydWN0IHJjdV9kYXRhIHsKIAlzdHJ1Y3QgcmN1X2hlYWQgYmFycmllcl9oZWFkOwogCWludCBleHBfd2F0Y2hpbmdfc25hcDsJCS8qIERvdWJsZS1jaGVjayBuZWVkIGZvciBJUEkuICovCiAKJiM0MzsJLyogRGVmZXJyYWwgb2YgYW4gTk1JL3JlZW50cmFudCBjYWxsX3JjdSgpOyBzZWUgX19jYWxsX3JjdV9jb21tb24oKS4gKi8KJiM0MzsJc3RydWN0IGxsaXN0X2hlYWQgZGVmZXJfaGVhZDsKJiM0MzsJc3RydWN0IGlycV93b3JrIGRlZmVyX3dvcms7CiYjNDM7CXJhd19zcGlubG9ja190IGRlZmVyX2xvY2s7CiYjNDM7CWJvb2wgZGVmZXJfZHJhaW5pbmc7CiYjNDM7CiAJLyogNSkgQ2FsbGJhY2sgb2ZmbG9hZGluZy4gKi8KICNpZmRlZiBDT05GSUdfUkNVX05PQ0JfQ1BVCiAJc3RydWN0IHN3YWl0X3F1ZXVlX2hlYWQgbm9jYl9jYl93cTsgLyogRm9yIG5vY2Iga3RocmVhZHMgdG8gc2xlZXAgb24uICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yY3VfcmVlbnRyeS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmN1X3JlZW50cnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5mYTgxM2QxZDQ5MmI2Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmN1X3JlZW50cnkuYwpAQCAtMCwwICYjNDM7MSw5NSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBFeGVyY2lzZSByZS1lbnRyeSBpbnRvIGNhbGxfc3JjdSgpIGZyb20gQlBGOyBzZWUgcHJvZ3MvcmN1X3JlZW50cnkuYy4KJiM0MzsgKgomIzQzOyAqIE9uIGEga2VybmVsIHdpdGhvdXQgdGhlIGNhbGxfc3JjdSgpIGFueS1jb250ZXh0IGZpeCB0aGUgbmVzdGVkIGNhbGwKJiM0MzsgKiBzZWxmLWRlYWRsb2NrcyBvbiB0aGUgc3JjdV9kYXRhIGxvY2ssIHNvIHRoaXMgaGFuZ3MgcmF0aGVyIHRoYW4gZmFpbHMuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBfR05VX1NPVVJDRQomIzQzOyNpbmNsdWRlICZsdDtzY2hlZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvc3lzY2FsbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt0ZXN0X3Byb2dzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDtyY3VfcmVlbnRyeS5za2VsLmgmIzM0OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgc3lzX3BpZGZkX29wZW4ocGlkX3QgcGlkLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiYjNDM7ewomIzQzOwlyZXR1cm4gc3lzY2FsbChfX05SX3BpZGZkX29wZW4sIHBpZCwgZmxhZ3MpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBUaW55IFJDVSBidWlsZHMgaGF2ZSBubyByY3Vfc2VnY2JsaXN0X2VucXVldWUoKSB0byBhdHRhY2ggdG8uICovCiYjNDM7c3RhdGljIGJvb2wgaGF2ZV9hdHRhY2hfdGFyZ2V0KHZvaWQpCiYjNDM7ewomIzQzOwljaGFyIGJ1ZlsyNTZdOwomIzQzOwlib29sIGZvdW5kID0gZmFsc2U7CiYjNDM7CUZJTEUgKmY7CiYjNDM7CiYjNDM7CWYgPSBmb3BlbigmIzM0Oy9wcm9jL2thbGxzeW1zJiMzNDssICYjMzQ7ciYjMzQ7KTsKJiM0MzsJaWYgKCFmKQomIzQzOwkJcmV0dXJuIHRydWU7CS8qIGNhbm5vdCB0ZWxsOyBsZXQgdGhlIGF0dGFjaCBkZWNpZGUgKi8KJiM0MzsJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGYpKSB7CiYjNDM7CQlpZiAoc3Ryc3RyKGJ1ZiwgJiMzNDsgcmN1X3NlZ2NibGlzdF9lbnF1ZXVlXG4mIzM0OykpIHsKJiM0MzsJCQlmb3VuZCA9IHRydWU7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJZmNsb3NlKGYpOwomIzQzOwlyZXR1cm4gZm91bmQ7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgdGVzdF9yY3VfcmVlbnRyeSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHJjdV9yZWVudHJ5ICpza2VsOwomIzQzOwlpbnQgZXJyLCBwaWRmZCA9IC0xLCBtYXBfZmQ7CiYjNDM7CWNwdV9zZXRfdCBzZXQsIG9sZF9zZXQ7CiYjNDM7CWJvb2wgYWZmaW5pdHlfc2F2ZWQ7CiYjNDM7CV9fdTY0IHZhbCA9IDE7CiYjNDM7CiYjNDM7CWlmICghaGF2ZV9hdHRhY2hfdGFyZ2V0KCkpIHsKJiM0MzsJCXRlc3RfX3NraXAoKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlza2VsID0gcmN1X3JlZW50cnlfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7c2tlbF9vcGVuX2FuZF9sb2FkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwllcnIgPSByY3VfcmVlbnRyeV9fYXR0YWNoKHNrZWwpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7c2tlbF9hdHRhY2gmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyogS2VlcCB0aGUgcmUtZW50cnkgb24gYSBzaW5nbGUgQ1BVLiAqLwomIzQzOwlhZmZpbml0eV9zYXZlZCA9ICFzY2hlZF9nZXRhZmZpbml0eSgwLCBzaXplb2Yob2xkX3NldCksICZhbXA7b2xkX3NldCk7CiYjNDM7CUNQVV9aRVJPKCZhbXA7c2V0KTsKJiM0MzsJQ1BVX1NFVCgwLCAmYW1wO3NldCk7CiYjNDM7CWlmICghQVNTRVJUX09LKHNjaGVkX3NldGFmZmluaXR5KDAsIHNpemVvZihzZXQpLCAmYW1wO3NldCksICYjMzQ7c2V0YWZmaW5pdHkmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJcGlkZmQgPSBzeXNfcGlkZmRfb3BlbihnZXRwaWQoKSwgMCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKHBpZGZkLCAwLCAmIzM0O3BpZGZkX29wZW4mIzM0OykpCiYjNDM7CQlnb3RvIHJlc3RvcmU7CiYjNDM7CW1hcF9mZCA9IGJwZl9tYXBfX2ZkKHNrZWwtJmd0O21hcHMudGFza19zdGcpOwomIzQzOwllcnIgPSBicGZfbWFwX3VwZGF0ZV9lbGVtKG1hcF9mZCwgJmFtcDtwaWRmZCwgJmFtcDt2YWwsIEJQRl9OT0VYSVNUKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2Jvb3RfY3JlYXRlJiMzNDspKQomIzQzOwkJZ290byByZXN0b3JlOwomIzQzOwomIzQzOwkvKiBBcm0gdGhlIGhhbmRsZXIgZm9yIHRoaXMgdGhyZWFkLCB0aGVuIHRyaWdnZXIgY2FsbF9yY3VfdGFza3NfdHJhY2UoKS4gKi8KJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDt0YXJnZXRfcGlkID0gc3lzY2FsbChfX05SX2dldHRpZCk7CiYjNDM7CWVyciA9IGJwZl9tYXBfZGVsZXRlX2VsZW0obWFwX2ZkLCAmYW1wO3BpZGZkKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2Jvb3RfZGVsZXRlJiMzNDspKQomIzQzOwkJZ290byByZXN0b3JlOwomIzQzOwomIzQzOwkvKiBPbmx5IFRyZWUgU1JDVSBlbnF1ZXVlcyB2aWEgcmN1X3NlZ2NibGlzdF9lbnF1ZXVlKCk7IHNraXAgZWxzZXdoZXJlLiAqLwomIzQzOwlpZiAoIXNrZWwtJmd0O2Jzcy0mZ3Q7aGl0cykgewomIzQzOwkJdGVzdF9fc2tpcCgpOwomIzQzOwkJZ290byByZXN0b3JlOwomIzQzOwl9CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O2dldF9lcnJzLCAwLCAmIzM0O25lc3RlZF9zdG9yYWdlX2dldCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7ZGVsX2VycnMsIDAsICYjMzQ7bmVzdGVkX3N0b3JhZ2VfZGVsZXRlJiMzNDspOwomIzQzO3Jlc3RvcmU6CiYjNDM7CWlmIChhZmZpbml0eV9zYXZlZCkKJiM0MzsJCXNjaGVkX3NldGFmZmluaXR5KDAsIHNpemVvZihvbGRfc2V0KSwgJmFtcDtvbGRfc2V0KTsKJiM0MztvdXQ6CiYjNDM7CWlmIChwaWRmZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UocGlkZmQpOwomIzQzOwlyY3VfcmVlbnRyeV9fZGVzdHJveShza2VsKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmN1X3JlZW50cnkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yY3VfcmVlbnRyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjQ3YTM2ZjcwNGNmM2UKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmN1X3JlZW50cnkuYwpAQCAtMCwwICYjNDM7MSw1MSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBSZS1lbnRlciBjYWxsX3NyY3UoKSBmcm9tIGEgQlBGIHByb2dyYW0uICBmZW50cnkgb24gcmN1X3NlZ2NibGlzdF9lbnF1ZXVlKCkKJiM0MzsgKiBmaXJlcyBpbnNpZGUgY2FsbF9zcmN1KCkmIzM5O3MgZW5xdWV1ZSAocmVhY2hlZCBmcm9tIHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKCkKJiM0MzsgKiB3aXRoIHRoZSBzcmN1X2RhdGEgLSZndDtsb2NrIGhlbGQpOyB0aGUgaGFuZGxlciB0aGVuIGNhbGxzIGNhbGxfcmN1X3Rhc2tzX3RyYWNlKCkKJiM0MzsgKiAtLSBpdHNlbGYgY2FsbF9zcmN1KCkgb24gcmN1X3Rhc2tzX3RyYWNlX3NyY3Vfc3RydWN0IC0tIHJlLWVudGVyaW5nIHRoZSBzYW1lCiYjNDM7ICogc3JjdV9kYXRhIG9uIHRoZSBzYW1lIENQVS4KJiM0MzsgKi8KJiM0MzsjaW5jbHVkZSAmIzM0O3ZtbGludXguaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX3RyYWNpbmcuaCZndDsKJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CiYjNDM7CiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9UQVNLX1NUT1JBR0UpOwomIzQzOwlfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7CiYjNDM7CV9fdHlwZShrZXksIGludCk7CiYjNDM7CV9fdHlwZSh2YWx1ZSwgX191NjQpOwomIzQzO30gdGFza19zdGcgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7aW50IHRhcmdldF9waWQ7CiYjNDM7aW50IGhpdHM7CiYjNDM7aW50IGdldF9lcnJzOwomIzQzO2ludCBkZWxfZXJyczsKJiM0MztpbnQgZG9uZTsKJiM0MzsKJiM0MztTRUMoJiMzNDtmZW50cnkvcmN1X3NlZ2NibGlzdF9lbnF1ZXVlJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKHJlZW50ZXIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cjsKJiM0MzsKJiM0MzsJaWYgKGRvbmUgfHwgIXRhcmdldF9waWQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJY3VyID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7CiYjNDM7CWlmIChjdXItJmd0O3BpZCAhPSB0YXJnZXRfcGlkKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qIElzc3VlIHRoZSBuZXN0ZWQgY2FsbCBleGFjdGx5IG9uY2UsIHNvIHRoZSB0ZXN0IGlzIGRldGVybWluaXN0aWMuICovCiYjNDM7CWRvbmUgPSAxOwomIzQzOwlfX3N5bmNfZmV0Y2hfYW5kX2FkZCgmYW1wO2hpdHMsIDEpOwomIzQzOwomIzQzOwkvKiBSZS1lbnRlciB2aWEgYSB0YXNrLXN0b3JhZ2UgZGVsZXRlLCB3aGljaCBjYWxscyBjYWxsX3JjdV90YXNrc190cmFjZSgpLiAqLwomIzQzOwlpZiAoIWJwZl90YXNrX3N0b3JhZ2VfZ2V0KCZhbXA7dGFza19zdGcsIGN1ciwgMCwgQlBGX0xPQ0FMX1NUT1JBR0VfR0VUX0ZfQ1JFQVRFKSkKJiM0MzsJCV9fc3luY19mZXRjaF9hbmRfYWRkKCZhbXA7Z2V0X2VycnMsIDEpOwomIzQzOwllbHNlIGlmIChicGZfdGFza19zdG9yYWdlX2RlbGV0ZSgmYW1wO3Rhc2tfc3RnLCBjdXIpKQomIzQzOwkJX19zeW5jX2ZldGNoX2FuZF9hZGQoJmFtcDtkZWxfZXJycywgMSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTM6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5MjkKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA1NjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBQbGFuIGZvciBSQ1UvU1JDVSBEZWZlcnJhbCBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIHNlcmllcy4gSXQmIzM5O3MgZGVmZXJyaW5nIGBjYWxsX3JjdSgpYCBhbmQgYGNhbGxfc3JjdSgpYCBjYWxsYmFja3Mgd2hlbiBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCwgd2hpY2ggc2VlbXMgbGlrZSBhIHNvbGlkIG1vdmUgdG8gcHJldmVudCB0aG9zZSBuYXN0eSBkZWFkbG9ja3MgYW5kIGxpc3QgY29ycnVwdGlvbnMgd2Ugc29tZXRpbWVzIHNlZSwgZXNwZWNpYWxseSB3aXRoIHRob3NlIHBlc2t5IEJQRiBwcm9ncmFtcyBhbmQgTk1Jcy4gSSYjMzk7dmUgYWxyZWFkeSBjb25maXJtZWQgdGhhdCBpdCBtb2RpZmllcyBrZXkgUkNVIGxvZ2ljLgoKRmlyc3QsIEkgbmVlZCB0byBzZWUgaWYgdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBhbnkgKm5ldyogZnVuY3Rpb25hbGl0eSB0aGF0IHdlIG5lZWQgdG8gaGl0IHdpdGggb3VyIGZ1enppbmcgZWZmb3J0cy4gWWVzLCB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGEgbmV3IGNvbmZpZ3VyYXRpb24gb3B0aW9uOiBgQ09ORklHX1JDVV9ERUZFUmAuIEl0IGFsc28gbW9kaWZpZXMgYHJjdXRvcnR1cmVgLCBzcGVjaWZpY2FsbHkgdG8gdGVzdCBOTUkgY2FsbHMuCgpOb3csIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgd2UgbmVlZCB0byB0YXJnZXQuIEkmIzM5O20gdGhpbmtpbmcgd2Ugc2hvdWxkIGRlZmluaXRlbHkgZm9jdXMgb24gYGNhbGxfcmN1YCwgYGNhbGxfc3JjdWAsIGBzcmN1X2JhcnJpZXJgLCBhbmQgYHJjdV9iYXJyaWVyYC4gV2UgYWxzbyBoYXZlIGByY3VfZGVmZXJfZHJhaW5gIGFuZCBgc3JjdV9kZWZlcl9kcmFpbmAuCgpJIGp1c3QgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBkb2luZyB0aGUgcmlnaHQgdGhpbmcuIEJhc2VkIG9uIHdoYXQgSSBoYXZlIHJlYWQsIGBDT05GSUdfUkNVX0RFRkVSYCBpcyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgaWYgd2UgaGF2ZSBOTUlzLCBLUFJPQkVTLCBvciBvdGhlciB0cmFjaW5nIGVuYWJsZWQuIEkmIzM5O2xsIGp1c3QgbmVlZCB0byBsaXN0IGBSQ1VfREVGRVJgIGluIHRoZSBgRW5hYmxlQ29uZmlnc2AuCgpMb29raW5nIGF0IGBrZXJuZWwvcmN1L3JjdXRvcnR1cmUuY2AsIEkgc2VlIGl0IG5vdyBpbmNvcnBvcmF0ZXMgYG5taV9jYWxsc2AgYXMgYSBwYXJhbWV0ZXIgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0IG1vZGlmaWVkIGBjYWxsX3NyY3VgLCBgc3JjdV9iYXJyaWVyYCwgYGNhbGxfcmN1YCwgYHJjdV9iYXJyaWVyYCwgYHNyY3Vfb2ZmbGluZV9kcmFpbmAsIGFuZCBgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc2AuCgpJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBjYWxsX3JjdWAgYW5kIGBjYWxsX3NyY3VgIGFyZSBleHBvcnRlZCBhbmQgY2FuIGJlIGNhbGxlZCBmcm9tIGFueXdoZXJlLiBZZXAsIHRoZXkgYXJlLiBUaGV5IGFyZSBjb3JlIGtlcm5lbCBBUElzLgoKRmluYWxseSwgSSYjMzk7bGwgaGl0IGBkZWZhdWx0X2FwaTpncmVwcGVyYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBpbnRlcmVzdGluZyBmdW5jdGlvbnMgaW4gdGhlc2UgcGF0Y2hlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMzozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHZvaWR8aW50fGJvb2wpIFthLXowLTlfXSYjNDM7XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3JjdS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDExMDIgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmtlcm5lbC9yY3UvcmN1Lmg9Mjk3PWV4dGVybiBib29sIHJjdV9leHBfc3RhbGxfdGFza19kZXRhaWxzIF9fcmVhZF9tb3N0bHk7XG5rZXJuZWwvcmN1L3JjdS5oOjI5ODppbnQgcmN1X2ppZmZpZXNfdGlsbF9zdGFsbF9jaGVjayh2b2lkKTtcbmtlcm5lbC9yY3UvcmN1Lmg6Mjk5OmludCByY3VfZXhwX2ppZmZpZXNfdGlsbF9zdGFsbF9jaGVjayh2b2lkKTtcbmtlcm5lbC9yY3UvcmN1LmgtMzAwLVxuLS1cbmtlcm5lbC9yY3UvcmN1Lmg9MzM5PWRvIHsgXFxcbi0tXG5rZXJuZWwvcmN1L3JjdS5oLTM1MC1cbmtlcm5lbC9yY3UvcmN1Lmg6MzUxOnZvaWQgcmN1X2Vhcmx5X2Jvb3RfdGVzdHModm9pZCk7XG5rZXJuZWwvcmN1L3JjdS5oOjM1Mjp2b2lkIHJjdV90ZXN0X3N5bmNfcHJpbXModm9pZCk7XG5rZXJuZWwvcmN1L3JjdS5oLTM1My1cbi0tXG5rZXJuZWwvcmN1L3JjdS5oPTUzNz1zdGF0aWMgaW5saW5lIGJvb2wgcmN1X2NwdV9vbmxpbmUoaW50IGNwdSkgeyByZXR1cm4gdHJ1ZTsgfVxua2VybmVsL3JjdS9yY3UuaC01MzgtI2Vsc2UgLyogI2lmZGVmIENPTkZJR19USU5ZX1JDVSAqL1xua2VybmVsL3JjdS9yY3UuaDo1Mzk6Ym9vbCByY3VfZ3BfaXNfbm9ybWFsKHZvaWQpOyAgICAgLyogSW50ZXJuYWwgUkNVIHVzZS4gKi9cbmtlcm5lbC9yY3UvcmN1Lmg6NTQwOmJvb2wgcmN1X2dwX2lzX2V4cGVkaXRlZCh2b2lkKTsgIC8qIEludGVybmFsIFJDVSB1c2UuICovXG5rZXJuZWwvcmN1L3JjdS5oOjU0MTpib29sIHJjdV9hc3luY19zaG91bGRfaHVycnkodm9pZCk7ICAvKiBJbnRlcm5hbCBSQ1UgdXNlLiAqL1xua2VybmVsL3JjdS9yY3UuaDo1NDI6dm9pZCByY3VfZXhwZWRpdGVfZ3Aodm9pZCk7XG5rZXJuZWwvcmN1L3JjdS5oOjU0Mzp2b2lkIHJjdV91bmV4cGVkaXRlX2dwKHZvaWQpO1xua2VybmVsL3JjdS9yY3UuaDo1NDQ6dm9pZCByY3VfYXN5bmNfaHVycnkodm9pZCk7XG5rZXJuZWwvcmN1L3JjdS5oOjU0NTp2b2lkIHJjdV9hc3luY19yZWxheCh2b2lkKTtcbmtlcm5lbC9yY3UvcmN1Lmg6NTQ2OnZvaWQgcmN1cGRhdGVfYW5ub3VuY2VfYm9vdHVwX29kZG5lc3Modm9pZCk7XG5rZXJuZWwvcmN1L3JjdS5oOjU0Nzpib29sIHJjdV9jcHVfb25saW5lKGludCBjcHUpO1xua2VybmVsL3JjdS9yY3UuaC01NDgtI2lmZGVmIENPTkZJR19UQVNLU19SQ1VfR0VORVJJQ1xua2VybmVsL3JjdS9yY3UuaDo1NDk6dm9pZCBzaG93X3JjdV90YXNrc19ncF9rdGhyZWFkcyh2b2lkKTtcbmtlcm5lbC9yY3UvcmN1LmgtNTUwLSNlbHNlIC8qICNpZmRlZiBDT05GSUdfVEFTS1NfUkNVX0dFTkVSSUMgKi9cbi0tXG5rZXJuZWwvcmN1L3JjdS5oPTU1Nj1zdHJ1Y3QgdGFza19zdHJ1Y3QgKmdldF9yY3VfdGFza3NfZ3Bfa3RocmVhZCh2b2lkKTtcbmtlcm5lbC9yY3UvcmN1Lmg6NTU3OnZvaWQgcmN1X3Rhc2tzX2dldF9ncF9kYXRhKGludCAqZmxhZ3MsIHVuc2lnbmVkIGxvbmcgKmdwX3NlcSk7XG5rZXJuZWwvcmN1L3JjdS5oLTU1OC0jZW5kaWYgLy8gIyBpZmRlZiBDT05GSUdfVEFTS1NfUkNVXG4tLVxua2VybmVsL3JjdS9yY3UuaD01NjE9c3RydWN0IHRhc2tfc3RydWN0ICpnZXRfcmN1X3Rhc2tzX3J1ZGVfZ3Bfa3RocmVhZCh2b2lkKTtcbmtlcm5lbC9yY3UvcmN1Lmg6NTYyOnZvaWQgcmN1X3Rhc2tzX3J1ZGVfZ2V0X2dwX2RhdGEoaW50ICpmbGFncywgdW5zaWduZWQgbG9uZyAqZ3Bfc2VxKTtcbmtlcm5lbC9yY3UvcmN1LmgtNTYzLSNlbmRpZiAvLyAjIGlmZGVmIENPTkZJR19UQVNLU19SVURFX1JDVVxuLS1cbmtlcm5lbC9yY3UvcmN1LmgtNTY1LSNpZmRlZiBDT05GSUdfVEFTS1NfUkNVX0dFTkVSSUNcbmtlcm5lbC9yY3UvcmN1Lmg6NTY2OnZvaWQgdGFza3NfY2JsaXN0X2luaXRfZ2VuZXJpYyh2b2lkKTtcbmtlcm5lbC9yY3UvcmN1LmgtNTY3LSNlbHNlIC8qICNpZmRlZiBDT05GSUdfVEFTS1NfUkNVX0dFTkVSSUMgKi9cbi0tXG5rZXJuZWwvcmN1L3JjdS5oPTU4Mj1zdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX3JjdV9kZWZlcih2b2lkKVxuLS1cbmtlcm5lbC9yY3UvcmN1LmgtNTkwLS8qIERyYWluIGFuIG91dGdvaW5nIENQVSYjMzk7cyBkZWZlcnJlZCBTUkNVIGNhbGxiYWNrczsgc2VlIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoKS4gKi9cbmtlcm5lbC9yY3UvcmN1Lmg6NTkxOnZvaWQgc3JjdV9vZmZsaW5lX2RyYWluKGludCBjcHUpO1xua2VybmVsL3JjdS9yY3UuaC01OTItXG4tLVxua2VybmVsL3JjdS9yY3UuaD02MDQ9dW5zaWduZWQgbG9uZyByY3VfZ2V0X2ppZmZpZXNfbGF6eV9mbHVzaCh2b2lkKTtcbmtlcm5lbC9yY3UvcmN1Lmg6NjA1OnZvaWQgcmN1X3NldF9qaWZmaWVzX2xhenlfZmx1c2godW5zaWduZWQgbG9uZyBqKTtcbmtlcm5lbC9yY3UvcmN1LmgtNjA2LSNlbHNlXG4tLVxua2VybmVsL3JjdS9yY3UuaD02MDg9c3RhdGljIGlubGluZSB2b2lkIHJjdV9zZXRfamlmZmllc19sYXp5X2ZsdXNoKHVuc2lnbmVkIGxvbmcgaikgeyB9XG4tLVxua2VybmVsL3JjdS9yY3UuaC02MTEtI2lmIGRlZmluZWQoQ09ORklHX1RSRUVfUkNVKVxua2VybmVsL3JjdS9yY3UuaDo2MTI6dm9pZCByY3V0b3J0dXJlX2dldF9ncF9kYXRhKGludCAqZmxhZ3MsIHVuc2lnbmVkIGxvbmcgKmdwX3NlcSk7XG5rZXJuZWwvcmN1L3JjdS5oOjYxMzp2b2lkIGRvX3RyYWNlX3JjdV90b3J0dXJlX3JlYWQoY29uc3QgY2hhciAqcmN1dG9ydHVyZW5hbWUsXG5rZXJuZWwvcmN1L3JjdS5oLTYxNC1cdFx0XHQgICAgICAgc3RydWN0IHJjdV9oZWFkICpyaHAsXG4tLVxua2VybmVsL3JjdS9yY3UuaC02MTctXHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgYyk7XG5rZXJuZWwvcmN1L3JjdS5oOjYxODp2b2lkIHJjdV9ncF9zZXRfdG9ydHVyZV93YWl0KGludCBkdXJhdGlvbik7XG5rZXJuZWwvcmN1L3JjdS5oOjYxOTp2b2lkIHJjdV9zZXRfZ3B3cmFwX2xhZyh1bnNpZ25lZCBsb25nIGxhZyk7XG5rZXJuZWwvcmN1L3JjdS5oOjYyMDppbnQgcmN1X2dldF9ncHdyYXBfY291bnQoaW50IGNwdSk7XG5rZXJuZWwvcmN1L3JjdS5oLTYyMS0jZWxzZVxua2VybmVsL3JjdS9yY3UuaD02MjI9c3RhdGljIGlubGluZSB2b2lkIHJjdXRvcnR1cmVfZ2V0X2dwX2RhdGEoaW50ICpmbGFncywgdW5zaWduZWQgbG9uZyAqZ3Bfc2VxKVxuLS1cbmtlcm5lbC9yY3UvcmN1LmgtNjI3LSNpZmRlZiBDT05GSUdfUkNVX1RSQUNFXG5rZXJuZWwvcmN1L3JjdS5oOjYyODp2b2lkIGRvX3RyYWNlX3JjdV90b3J0dXJlX3JlYWQoY29uc3QgY2hhciAqcmN1dG9ydHVyZW5hbWUsXG5rZXJuZWwvcmN1L3JjdS5oLTYyOS1cdFx0XHQgICAgICAgc3RydWN0IHJjdV9oZWFkICpyaHAsXG4tLVxua2VybmVsL3JjdS9yY3UuaD02NDE9dW5zaWduZWQgbG9uZyBsb25nIHJjdXRvcnR1cmVfZ2F0aGVyX2dwX3NlcXModm9pZCk7XG5rZXJuZWwvcmN1L3JjdS5oOjY0Mjp2b2lkIHJjdXRvcnR1cmVfZm9ybWF0X2dwX3NlcXModW5zaWduZWQgbG9uZyBsb25nIHNlcXMsIGNoYXIgKmNwLCBzaXplX3QgbGVuKTtcbmtlcm5lbC9yY3UvcmN1LmgtNjQzLVxuLS1cbmtlcm5lbC9yY3UvcmN1Lmg9NjQ2PXN0YXRpYyBpbmxpbmUgdm9pZCBzcmN1dG9ydHVyZV9nZXRfZ3BfZGF0YShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwLCBpbnQgKmZsYWdzLFxuLS1cbmtlcm5lbC9yY3UvcmN1LmgtNjU0LVxua2VybmVsL3JjdS9yY3UuaDo2NTU6dm9pZCBzcmN1dG9ydHVyZV9nZXRfZ3BfZGF0YShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwLCBpbnQgKmZsYWdzLFxua2VybmVsL3JjdS9yY3UuaC02NTYtXHRcdFx0ICAgICB1bnNpZ25lZCBsb25nICpncF9zZXEpO1xuLS1cbmtlcm5lbC9yY3UvcmN1Lmg9NjcwPXN0YXRpYyBpbmxpbmUgdm9pZCByY3VfZ3Bfc2xvd191bnJlZ2lzdGVyKGF0b21pY190ICpyZ3NzcCkgeyB9XG5rZXJuZWwvcmN1L3JjdS5oLTY3MS0jZWxzZSAvKiAjaWZkZWYgQ09ORklHX1RJTllfUkNVICovXG5rZXJuZWwvcmN1L3JjdS5oOjY3Mjpib29sIHJjdV93YXRjaGluZ196ZXJvX2luX2VxcyhpbnQgY3B1LCBpbnQgKnZwKTtcbmtlcm5lbC9yY3UvcmN1LmgtNjczLXVuc2lnbmVkIGxvbmcgcmN1X2dldF9ncF9zZXEodm9pZCk7XG5rZXJuZWwvcmN1L3JjdS5oPTY3ND11bnNpZ25lZCBsb25nIHJjdV9leHBfYmF0Y2hlc19jb21wbGV0ZWQodm9pZCk7XG5rZXJuZWwvcmN1L3JjdS5oOjY3NTpib29sIHJjdV9jaGVja19ib29zdF9mYWlsKHVuc2lnbmVkIGxvbmcgZ3Bfc3RhdGUsIGludCAqY3B1cCk7XG5rZXJuZWwvcmN1L3JjdS5oOjY3Njp2b2lkIHNob3dfcmN1X2dwX2t0aHJlYWRzKHZvaWQpO1xua2VybmVsL3JjdS9yY3UuaDo2Nzc6aW50IHJjdV9nZXRfZ3Bfa3RocmVhZHNfcHJpbyh2b2lkKTtcbmtlcm5lbC9yY3UvcmN1Lmg6Njc4OnZvaWQgcmN1X2Z3ZF9wcm9ncmVzc19jaGVjayh1bnNpZ25lZCBsb25nIGopO1xua2VybmVsL3JjdS9yY3UuaDo2Nzk6dm9pZCByY3VfZm9yY2VfcXVpZXNjZW50X3N0YXRlKHZvaWQpO1xua2VybmVsL3JjdS9yY3UuaC02ODAtZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpyY3VfZ3Bfd3E7XG5rZXJuZWwvcmN1L3JjdS5oPTY4MT1leHRlcm4gc3RydWN0IGt0aHJlYWRfd29ya2VyICpyY3VfZXhwX2dwX2t3b3JrZXI7XG5rZXJuZWwvcmN1L3JjdS5oOjY4Mjp2b2lkIHJjdV9ncF9zbG93X3JlZ2lzdGVyKGF0b21pY190ICpyZ3NzcCk7XG5rZXJuZWwvcmN1L3JjdS5oOjY4Mzp2b2lkIHJjdV9ncF9zbG93X3VucmVnaXN0ZXIoYXRvbWljX3QgKnJnc3NwKTtcbmtlcm5lbC9yY3UvcmN1LmgtNjg0LSNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX1RJTllfUkNVICovXG4tLVxua2VybmVsL3JjdS9yY3UuaD02ODk9dW5zaWduZWQgbG9uZyBzcmN1X2JhdGNoZXNfY29tcGxldGVkKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3ApO1xuLS1cbmtlcm5lbC9yY3UvcmN1LmgtNjkyLSNpZmRlZiBDT05GSUdfUkNVX05PQ0JfQ1BVXG5rZXJuZWwvcmN1L3JjdS5oOjY5Mzp2b2lkIHJjdV9iaW5kX2N1cnJlbnRfdG9fbm9jYih2b2lkKTtcbmtlcm5lbC9yY3UvcmN1LmgtNjk0LSNlbHNlXG5rZXJuZWwvcmN1L3JjdS5oPTY5NT1zdGF0aWMgaW5saW5lIHZvaWQgcmN1X2JpbmRfY3VycmVudF90b19ub2NiKHZvaWQpIHsgfVxuLS1cbmtlcm5lbC9yY3UvcmN1LmgtNjk4LSNpZiAhZGVmaW5lZChDT05GSUdfVElOWV9SQ1UpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19UQVNLU19SQ1UpXG5rZXJuZWwvcmN1L3JjdS5oOjY5OTp2b2lkIHNob3dfcmN1X3Rhc2tzX2NsYXNzaWNfZ3Bfa3RocmVhZCh2b2lkKTtcbmtlcm5lbC9yY3UvcmN1LmgtNzAwLSNlbHNlXG5rZXJuZWwvcmN1L3JjdS5oPTcwMT1zdGF0aWMgaW5saW5lIHZvaWQgc2hvd19yY3VfdGFza3NfY2xhc3NpY19ncF9rdGhyZWFkKHZvaWQpIHt9XG4tLVxua2VybmVsL3JjdS9yY3UuaC03MDMtI2lmICFkZWZpbmVkKENPTkZJR19USU5ZX1JDVSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1RBU0tTX1JVREVfUkNVKVxua2VybmVsL3JjdS9yY3UuaDo3MDQ6dm9pZCBzaG93X3JjdV90YXNrc19ydWRlX2dwX2t0aHJlYWQodm9pZCk7XG5rZXJuZWwvcmN1L3JjdS5oLTcwNS0jZWxzZVxuLS1cbmtlcm5lbC9yY3UvcmN1Lmg9NzEwPXN0YXRpYyBpbmxpbmUgYm9vbCByY3VfY3B1X2JlZW5mdWxseW9ubGluZShpbnQgY3B1KSB7IHJldHVybiB0cnVlOyB9XG5rZXJuZWwvcmN1L3JjdS5oLTcxMS0jZWxzZVxua2VybmVsL3JjdS9yY3UuaDo3MTI6Ym9vbCByY3VfY3B1X2JlZW5mdWxseW9ubGluZShpbnQgY3B1KTtcbmtlcm5lbC9yY3UvcmN1LmgtNzEzLSNlbmRpZlxuLS1cbmtlcm5lbC9yY3UvcmN1LmgtNzE1LSNpZiBkZWZpbmVkKENPTkZJR19SQ1VfU1RBTExfQ09NTU9OKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfUkNVX0NQVV9TVEFMTF9OT1RJRklFUilcbmtlcm5lbC9yY3UvcmN1Lmg6NzE2OmludCByY3Vfc3RhbGxfbm90aWZpZXJfY2FsbF9jaGFpbih1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqdik7XG5rZXJuZWwvcmN1L3JjdS5oLTcxNy0jZWxzZSAvLyAjaWYgZGVmaW5lZChDT05GSUdfUkNVX1NUQUxMX0NPTU1PTikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1JDVV9DUFVfU1RBTExfTk9USUZJRVIpXG5rZXJuZWwvcmN1L3JjdS5oPTcxOD1zdGF0aWMgaW5saW5lIGludCByY3Vfc3RhbGxfbm90aWZpZXJfY2FsbF9jaGFpbih1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqdikgeyByZXR1cm4gTk9USUZZX0RPTkU7IH1cbi0tXG5rZXJuZWwvcmN1L3JjdS5oLTcyMS0jaWZkZWYgQ09ORklHX1RSSVZJQUxfUFJFRU1QVF9SQ1Vcbmtlcm5lbC9yY3UvcmN1Lmg6NzIyOnZvaWQgc3luY2hyb25pemVfcmN1X3RyaXZpYWxfcHJlZW1wdCh2b2lkKTtcbmtlcm5lbC9yY3UvcmN1LmgtNzIzLSNlbmRpZiAvLyAjaWZkZWYgQ09ORklHX1RSSVZJQUxfUFJFRU1QVF9SQ1Vcbi0tXG5rZXJuZWwvcmN1L3JjdS5oLTcyNS0jaWYgZGVmaW5lZChDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1JDVV9CT09TVClcbmtlcm5lbC9yY3UvcmN1Lmg6NzI2OmJvb2wgcmN1X2lzX3Rhc2tfcmN1X2Jvb3N0ZWQodm9pZCk7XG5rZXJuZWwvcmN1L3JjdS5oLTcyNy0jZWxzZSAvLyAjaWYgZGVmaW5lZChDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1JDVV9CT09TVClcbi0tXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy0xOC0vKiBJbml0aWFsaXplIHNpbXBsZSBjYWxsYmFjayBsaXN0LiAqL1xua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmM6MTk6dm9pZCByY3VfY2JsaXN0X2luaXQoc3RydWN0IHJjdV9jYmxpc3QgKnJjbHApXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy0yMC17XG4tLVxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtMjgtICovXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzoyOTp2b2lkIHJjdV9jYmxpc3RfZW5xdWV1ZShzdHJ1Y3QgcmN1X2NibGlzdCAqcmNscCwgc3RydWN0IHJjdV9oZWFkICpyaHApXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy0zMC17XG4tLVxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtNDMtICovXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzo0NDp2b2lkIHJjdV9jYmxpc3RfZmx1c2hfZW5xdWV1ZShzdHJ1Y3QgcmN1X2NibGlzdCAqZHJjbHAsXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy00NS1cdFx0XHQgICAgICBzdHJ1Y3QgcmN1X2NibGlzdCAqc3JjbHAsXG4tLVxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmM9MTM5PXN0YXRpYyB2b2lkIHJjdV9zZWdjYmxpc3RfaW5jX3NlZ2xlbihzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHAsIGludCBzZWcpXG4tLVxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtMjEwLSAqL1xua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmM6MjExOnZvaWQgcmN1X3NlZ2NibGlzdF9hZGRfbGVuKHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscCwgbG9uZyB2KVxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtMjEyLXtcbi0tXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy0yMjktICovXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzoyMzA6dm9pZCByY3Vfc2VnY2JsaXN0X2luY19sZW4oc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwKVxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtMjMxLXtcbi0tXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy0yMzctICovXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzoyMzg6dm9pZCByY3Vfc2VnY2JsaXN0X2luaXQoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwKVxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtMjM5LXtcbi0tXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy0yNTYtICovXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzoyNTc6dm9pZCByY3Vfc2VnY2JsaXN0X2Rpc2FibGUoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwKVxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtMjU4LXtcbi0tXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy0yNjctICovXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzoyNjg6Ym9vbCByY3Vfc2VnY2JsaXN0X3JlYWR5X2NicyhzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHApXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy0yNjkte1xuLS1cbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTI3Ny0gKi9cbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jOjI3ODpib29sIHJjdV9zZWdjYmxpc3RfcGVuZF9jYnMoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwKVxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtMjc5LXtcbi0tXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYz0zMDI9c3RydWN0IHJjdV9oZWFkICpyY3Vfc2VnY2JsaXN0X2ZpcnN0X3BlbmRfY2Ioc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwKVxuLS1cbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTMxMi0gKi9cbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jOjMxMzpib29sIHJjdV9zZWdjYmxpc3RfbmV4dGdwKHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscCwgc3RydWN0IHJjdV9ncF9zZXEgKmdzcClcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTMxNC17XG4tLVxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtMzI5LSAqL1xua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmM6MzMwOnZvaWQgcmN1X3NlZ2NibGlzdF9lbnF1ZXVlKHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscCxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTMzMS1cdFx0XHQgICBzdHJ1Y3QgcmN1X2hlYWQgKnJocClcbi0tXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy0zNDktICovXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzozNTA6Ym9vbCByY3Vfc2VnY2JsaXN0X2VudHJhaW4oc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwLFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtMzUxLVx0XHRcdCAgIHN0cnVjdCByY3VfaGVhZCAqcmhwKVxuLS1cbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTM3NC0gKi9cbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jOjM3NTp2b2lkIHJjdV9zZWdjYmxpc3RfZXh0cmFjdF9kb25lX2NicyhzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHAsXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy0zNzYtXHRcdFx0XHQgICAgc3RydWN0IHJjdV9jYmxpc3QgKnJjbHApXG4tLVxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtMzk5LSAqL1xua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmM6NDAwOnZvaWQgcmN1X3NlZ2NibGlzdF9leHRyYWN0X3BlbmRfY2JzKHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscCxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTQwMS1cdFx0XHRcdCAgICBzdHJ1Y3QgcmN1X2NibGlzdCAqcmNscClcbi0tXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy00MjEtICovXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzo0MjI6dm9pZCByY3Vfc2VnY2JsaXN0X2luc2VydF9jb3VudChzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHAsXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy00MjMtXHRcdFx0XHRzdHJ1Y3QgcmN1X2NibGlzdCAqcmNscClcbi0tXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy00MzEtICovXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzo0MzI6dm9pZCByY3Vfc2VnY2JsaXN0X2luc2VydF9kb25lX2NicyhzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHAsXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy00MzMtXHRcdFx0XHQgICBzdHJ1Y3QgcmN1X2NibGlzdCAqcmNscClcbi0tXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy00NTQtICovXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzo0NTU6dm9pZCByY3Vfc2VnY2JsaXN0X2luc2VydF9wZW5kX2NicyhzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHAsXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy00NTYtXHRcdFx0XHQgICBzdHJ1Y3QgcmN1X2NibGlzdCAqcmNscClcbi0tXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYz00NzM9c3RhdGljIHZvaWQgcmN1X3NlZ2NibGlzdF9hZHZhbmNlX2NvbXBhY3Qoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwLCBpbnQgaSlcbi0tXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy01MDAtICovXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzo1MDE6dm9pZCByY3Vfc2VnY2JsaXN0X2FkdmFuY2Uoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwKVxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtNTAyLXtcbi0tXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy01NDMtICovXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzo1NDQ6Ym9vbCByY3Vfc2VnY2JsaXN0X2FjY2VsZXJhdGUoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwLCBzdHJ1Y3QgcmN1X2dwX3NlcSAqZ3NwKVxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtNTQ1LXtcbi0tXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy02MTMtICovXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzo2MTQ6dm9pZCByY3Vfc2VnY2JsaXN0X21lcmdlKHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpkc3RfcnNjbHAsXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy02MTUtXHRcdFx0IHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpzcmNfcnNjbHApXG4tLVxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtNjQxLVxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmM6NjQyOnZvaWQgc3JjdV9zZWdjYmxpc3RfYWR2YW5jZShzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHAsIHVuc2lnbmVkIGxvbmcgc2VxKVxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtNjQzLXtcbi0tXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy02NzMtICovXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzo2NzQ6Ym9vbCBzcmN1X3NlZ2NibGlzdF9hY2NlbGVyYXRlKHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscCwgdW5zaWduZWQgbG9uZyBzZXEpXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy02NzUte1xuLS1cbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oPTIxPWxvbmcgcmN1X3NlZ2NibGlzdF9uX3NlZ21lbnRfY2JzKHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscCk7XG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaC0yMi1cbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oOjIzOnZvaWQgcmN1X2NibGlzdF9pbml0KHN0cnVjdCByY3VfY2JsaXN0ICpyY2xwKTtcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oOjI0OnZvaWQgcmN1X2NibGlzdF9lbnF1ZXVlKHN0cnVjdCByY3VfY2JsaXN0ICpyY2xwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCk7XG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaDoyNTp2b2lkIHJjdV9jYmxpc3RfZmx1c2hfZW5xdWV1ZShzdHJ1Y3QgcmN1X2NibGlzdCAqZHJjbHAsXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaC0yNi1cdFx0XHQgICAgICBzdHJ1Y3QgcmN1X2NibGlzdCAqc3JjbHAsXG4tLVxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0Lmg9MTEyPXN0YXRpYyBpbmxpbmUgYm9vbCByY3Vfc2VnY2JsaXN0X3NlZ2VtcHR5KHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscCwgaW50IHNlZylcbi0tXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaC0xMTgtXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaDoxMTk6dm9pZCByY3Vfc2VnY2JsaXN0X2luY19sZW4oc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwKTtcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oOjEyMDp2b2lkIHJjdV9zZWdjYmxpc3RfYWRkX2xlbihzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHAsIGxvbmcgdik7XG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaDoxMjE6dm9pZCByY3Vfc2VnY2JsaXN0X2luaXQoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwKTtcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oOjEyMjp2b2lkIHJjdV9zZWdjYmxpc3RfZGlzYWJsZShzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHApO1xua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0Lmg6MTIzOmJvb2wgcmN1X3NlZ2NibGlzdF9yZWFkeV9jYnMoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwKTtcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oOjEyNDpib29sIHJjdV9zZWdjYmxpc3RfcGVuZF9jYnMoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwKTtcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oLTEyNS1zdHJ1Y3QgcmN1X2hlYWQgKnJjdV9zZWdjYmxpc3RfZmlyc3RfY2Ioc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwKTtcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oPTEyNj1zdHJ1Y3QgcmN1X2hlYWQgKnJjdV9zZWdjYmxpc3RfZmlyc3RfcGVuZF9jYihzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHApO1xua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0Lmg6MTI3OmJvb2wgcmN1X3NlZ2NibGlzdF9uZXh0Z3Aoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwLCBzdHJ1Y3QgcmN1X2dwX3NlcSAqZ3NwKTtcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oOjEyODp2b2lkIHJjdV9zZWdjYmxpc3RfZW5xdWV1ZShzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHAsXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaC0xMjktXHRcdFx0ICAgc3RydWN0IHJjdV9oZWFkICpyaHApO1xua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0Lmg6MTMwOmJvb2wgcmN1X3NlZ2NibGlzdF9lbnRyYWluKHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscCxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oLTEzMS1cdFx0XHQgICBzdHJ1Y3QgcmN1X2hlYWQgKnJocCk7XG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaDoxMzI6dm9pZCByY3Vfc2VnY2JsaXN0X2V4dHJhY3RfZG9uZV9jYnMoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwLFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmgtMTMzLVx0XHRcdFx0ICAgIHN0cnVjdCByY3VfY2JsaXN0ICpyY2xwKTtcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oOjEzNDp2b2lkIHJjdV9zZWdjYmxpc3RfZXh0cmFjdF9wZW5kX2NicyhzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHAsXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaC0xMzUtXHRcdFx0XHQgICAgc3RydWN0IHJjdV9jYmxpc3QgKnJjbHApO1xua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0Lmg6MTM2OnZvaWQgcmN1X3NlZ2NibGlzdF9pbnNlcnRfY291bnQoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwLFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmgtMTM3LVx0XHRcdFx0c3RydWN0IHJjdV9jYmxpc3QgKnJjbHApO1xua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0Lmg6MTM4OnZvaWQgcmN1X3NlZ2NibGlzdF9pbnNlcnRfZG9uZV9jYnMoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwLFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmgtMTM5LVx0XHRcdFx0ICAgc3RydWN0IHJjdV9jYmxpc3QgKnJjbHApO1xua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0Lmg6MTQwOnZvaWQgcmN1X3NlZ2NibGlzdF9pbnNlcnRfcGVuZF9jYnMoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwLFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmgtMTQxLVx0XHRcdFx0ICAgc3RydWN0IHJjdV9jYmxpc3QgKnJjbHApO1xua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0Lmg6MTQyOnZvaWQgcmN1X3NlZ2NibGlzdF9hZHZhbmNlKHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscCk7XG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaDoxNDM6Ym9vbCByY3Vfc2VnY2JsaXN0X2FjY2VsZXJhdGUoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwLCBzdHJ1Y3QgcmN1X2dwX3NlcSAqZ3NwKTtcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oOjE0NDp2b2lkIHJjdV9zZWdjYmxpc3RfbWVyZ2Uoc3RydWN0IHJjdV9zZWdjYmxpc3QgKmRzdF9yc2NscCxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oLTE0NS1cdFx0XHQgc3RydWN0IHJjdV9zZWdjYmxpc3QgKnNyY19yc2NscCk7XG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaDoxNDY6dm9pZCBzcmN1X3NlZ2NibGlzdF9hZHZhbmNlKHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscCwgdW5zaWduZWQgbG9uZyBzZXEpO1xua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0Lmg6MTQ3OmJvb2wgc3JjdV9zZWdjYmxpc3RfYWNjZWxlcmF0ZShzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHAsIHVuc2lnbmVkIGxvbmcgc2VxKTtcbi0tXG5rZXJuZWwvcmN1L3NyY3V0aW55LmM9MzU9c3RhdGljIGludCBpbml0X3NyY3Vfc3RydWN0X2ZpZWxkcyhzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbi0tXG5rZXJuZWwvcmN1L3NyY3V0aW55LmMtNTUtXG5rZXJuZWwvcmN1L3NyY3V0aW55LmM6NTY6aW50IGluaXRfc3JjdV9zdHJ1Y3RfbG9ja2RlcChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgY29uc3QgY2hhciAqbmFtZSxcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy01Ny1cdFx0ICAgICBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSlcbi0tXG5rZXJuZWwvcmN1L3NyY3V0aW55LmM9NjQ9RVhQT1JUX1NZTUJPTF9HUEwoaW5pdF9zcmN1X3N0cnVjdF9sb2NrZGVwKTtcbi0tXG5rZXJuZWwvcmN1L3NyY3V0aW55LmMtNzUtICovXG5rZXJuZWwvcmN1L3NyY3V0aW55LmM6NzY6aW50IGluaXRfc3JjdV9zdHJ1Y3RfZ2VuZXJpYyhzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy03Ny17XG4tLVxua2VybmVsL3JjdS9zcmN1dGlueS5jPTgwPUVYUE9SVF9TWU1CT0xfR1BMKGluaXRfc3JjdV9zdHJ1Y3RfZ2VuZXJpYyk7XG4tLVxua2VybmVsL3JjdS9zcmN1dGlueS5jLTkwLSAqL1xua2VybmVsL3JjdS9zcmN1dGlueS5jOjkxOnZvaWQgY2xlYW51cF9zcmN1X3N0cnVjdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy05Mi17XG4tLVxua2VybmVsL3JjdS9zcmN1dGlueS5jPTEwOD1FWFBPUlRfU1lNQk9MX0dQTChjbGVhbnVwX3NyY3Vfc3RydWN0KTtcbi0tXG5rZXJuZWwvcmN1L3NyY3V0aW55LmMtMTEzLSAqL1xua2VybmVsL3JjdS9zcmN1dGlueS5jOjExNDp2b2lkIF9fc3JjdV9yZWFkX3VubG9jayhzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgaW50IGlkeClcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy0xMTUte1xuLS1cbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYz0xMjU9RVhQT1JUX1NZTUJPTF9HUEwoX19zcmN1X3JlYWRfdW5sb2NrKTtcbi0tXG5rZXJuZWwvcmN1L3NyY3V0aW55LmMtMTMxLSAqL1xua2VybmVsL3JjdS9zcmN1dGlueS5jOjEzMjp2b2lkIHNyY3VfZHJpdmVfZ3Aoc3RydWN0IHdvcmtfc3RydWN0ICp3cClcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy0xMzMte1xuLS1cbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYz0xOTE9RVhQT1JUX1NZTUJPTF9HUEwoc3JjdV9kcml2ZV9ncCk7XG4tLVxua2VybmVsL3JjdS9zcmN1dGlueS5jLTE5Ny0gKi9cbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYzoxOTg6dm9pZCBzcmN1X3RpbnlfaXJxX3dvcmsoc3RydWN0IGlycV93b3JrICppcnFfd29yaylcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy0xOTkte1xuLS1cbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYz0yNDg9c3RhdGljIHZvaWQgX19zcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBib29sIGd1YXJkKVxuLS1cbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy0yNjgtLyogT25seSB0aGUgaXJxX3dvcmsgZHJhaW4gY2FuIGJlIHJlLWZlZCBieSBpdHMgb3duIHJlLWlzc3VlOyBzZWUgVHJlZSBTUkNVLiAqL1xua2VybmVsL3JjdS9zcmN1dGlueS5jOjI2OTp2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdylcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy0yNzAte1xuLS1cbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYz0yNzM9RVhQT1JUX1NZTUJPTF9HUEwoc3JjdV9kZWZlcl9kcmFpbik7XG5rZXJuZWwvcmN1L3NyY3V0aW55LmMtMjc0LVxua2VybmVsL3JjdS9zcmN1dGlueS5jOjI3NTp2b2lkIGNhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsXG5rZXJuZWwvcmN1L3NyY3V0aW55LmMtMjc2LVx0ICAgICAgIHJjdV9jYWxsYmFja190IGZ1bmMpXG4tLVxua2VybmVsL3JjdS9zcmN1dGlueS5jPTI5Nj1FWFBPUlRfU1lNQk9MX0dQTChjYWxsX3NyY3UpO1xuLS1cbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy0zMDAtICovXG5rZXJuZWwvcmN1L3NyY3V0aW55LmM6MzAxOnZvaWQgc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy0zMDIte1xuLS1cbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYz0zMjM9RVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfc3JjdSk7XG4tLVxua2VybmVsL3JjdS9zcmN1dGlueS5jLTMyNS0vKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzLCB0aGVuIHdhaXQgZm9yIGFsbCBpbi1mbGlnaHQgb25lcy4gKi9cbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYzozMjY6dm9pZCBzcmN1X2JhcnJpZXIoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG5rZXJuZWwvcmN1L3NyY3V0aW55LmMtMzI3LXtcbi0tXG5rZXJuZWwvcmN1L3NyY3V0aW55LmM9MzY1PUVYUE9SVF9TWU1CT0xfR1BMKHN0YXJ0X3BvbGxfc3luY2hyb25pemVfc3JjdSk7XG4tLVxua2VybmVsL3JjdS9zcmN1dGlueS5jLTM2OS0gKi9cbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYzozNzA6Ym9vbCBwb2xsX3N0YXRlX3N5bmNocm9uaXplX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHVuc2lnbmVkIGxvbmcgY29va2llKVxua2VybmVsL3JjdS9zcmN1dGlueS5jLTM3MS17XG4tLVxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTMwNj1fX2luaXRfc3JjdV9zdHJ1Y3RfY29tbW9uKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSlcbi0tXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMzEzLVxua2VybmVsL3JjdS9zcmN1dHJlZS5jOjMxNDppbnQgaW5pdF9zcmN1X3N0cnVjdF9sb2NrZGVwKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBjb25zdCBjaGFyICpuYW1lLFxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTMxNS1cdFx0XHQgICAgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KVxuLS1cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYz0zMjA9RVhQT1JUX1NZTUJPTF9HUEwoaW5pdF9zcmN1X3N0cnVjdF9sb2NrZGVwKTtcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0zMjEtXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM6MzIyOmludCBfX2luaXRfc3JjdV9zdHJ1Y3RfZmFzdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMzIzLXtcbi0tXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM9MzI3PUVYUE9SVF9TWU1CT0xfR1BMKF9faW5pdF9zcmN1X3N0cnVjdF9mYXN0KTtcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0zMjgtXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM6MzI5OmludCBfX2luaXRfc3JjdV9zdHJ1Y3RfZmFzdF91cGRvd24oc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIGNvbnN0IGNoYXIgKm5hbWUsXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMzMwLVx0XHRcdFx0ICAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpXG4tLVxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTMzNT1FWFBPUlRfU1lNQk9MX0dQTChfX2luaXRfc3JjdV9zdHJ1Y3RfZmFzdF91cGRvd24pO1xuLS1cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0zNDktICovXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM6MzUwOmludCBpbml0X3NyY3Vfc3RydWN0X2dlbmVyaWMoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMzUxLXtcbi0tXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM9MzU1PUVYUE9SVF9TWU1CT0xfR1BMKGluaXRfc3JjdV9zdHJ1Y3RfZ2VuZXJpYyk7XG4tLVxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTM2Ni0gKi9cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYzozNjc6aW50IGluaXRfc3JjdV9zdHJ1Y3RfZmFzdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0zNjgte1xuLS1cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYz0zNzI9RVhQT1JUX1NZTUJPTF9HUEwoaW5pdF9zcmN1X3N0cnVjdF9mYXN0KTtcbi0tXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMzg0LSAqL1xua2VybmVsL3JjdS9zcmN1dHJlZS5jOjM4NTppbnQgaW5pdF9zcmN1X3N0cnVjdF9mYXN0X3VwZG93bihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0zODYte1xuLS1cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYz02OTg9c3RhdGljIHVuc2lnbmVkIGxvbmcgc3JjdV9nZXRfZGVsYXkoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4tLVxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTcyOS0gKi9cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYzo3MzA6dm9pZCBjbGVhbnVwX3NyY3Vfc3RydWN0KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTczMS17XG4tLVxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTc4ND1FWFBPUlRfU1lNQk9MX0dQTChjbGVhbnVwX3NyY3Vfc3RydWN0KTtcbi0tXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtNzg4LSAqL1xua2VybmVsL3JjdS9zcmN1dHJlZS5jOjc4OTp2b2lkIF9fc3JjdV9jaGVja19yZWFkX2ZsYXZvcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgaW50IHJlYWRfZmxhdm9yKVxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTc5MC17XG4tLVxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTgxMj1FWFBPUlRfU1lNQk9MX0dQTChfX3NyY3VfY2hlY2tfcmVhZF9mbGF2b3IpO1xuLS1cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy04MTktICovXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM6ODIwOmludCBfX3NyY3VfcmVhZF9sb2NrKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTgyMS17XG4tLVxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTgyOD1FWFBPUlRfU1lNQk9MX0dQTChfX3NyY3VfcmVhZF9sb2NrKTtcbi0tXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtODM0LSAqL1xua2VybmVsL3JjdS9zcmN1dHJlZS5jOjgzNTp2b2lkIF9fc3JjdV9yZWFkX3VubG9jayhzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgaW50IGlkeClcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy04MzYte1xuLS1cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYz04NDA9RVhQT1JUX1NZTUJPTF9HUEwoX19zcmN1X3JlYWRfdW5sb2NrKTtcbi0tXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtODQ4LSAqL1xua2VybmVsL3JjdS9zcmN1dHJlZS5jOjg0OTppbnQgX19zcmN1X3JlYWRfbG9ja19ubWlzYWZlKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTg1MC17XG4tLVxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTg1OD1FWFBPUlRfU1lNQk9MX0dQTChfX3NyY3VfcmVhZF9sb2NrX25taXNhZmUpO1xuLS1cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy04NjQtICovXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM6ODY1OnZvaWQgX19zcmN1X3JlYWRfdW5sb2NrX25taXNhZmUoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIGludCBpZHgpXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtODY2LXtcbi0tXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM9MTU2ND1zdGF0aWMgdm9pZCBzcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpXG4tLVxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE1NzMtICovXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM6MTU3NDp2b2lkIHNyY3Vfb2ZmbGluZV9kcmFpbihpbnQgY3B1KVxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE1NzUte1xuLS1cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0xNjAxLSAqL1xua2VybmVsL3JjdS9zcmN1dHJlZS5jOjE2MDI6dm9pZCBjYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE2MDMtXHQgICAgICAgcmN1X2NhbGxiYWNrX3QgZnVuYylcbi0tXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM9MTYxMj1zdGF0aWMgdm9pZCBfX3N5bmNocm9uaXplX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIGJvb2wgZG9fbm9ybSlcbi0tXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMTY1My0gKi9cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYzoxNjU0OnZvaWQgc3luY2hyb25pemVfc3JjdV9leHBlZGl0ZWQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMTY1NS17XG4tLVxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTE2NTg9RVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfc3JjdV9leHBlZGl0ZWQpO1xuLS1cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0xNzA4LSAqL1xua2VybmVsL3JjdS9zcmN1dHJlZS5jOjE3MDk6dm9pZCBzeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE3MTAte1xuLS1cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYz0xNzUxPUVYUE9SVF9TWU1CT0xfR1BMKHN0YXJ0X3BvbGxfc3luY2hyb25pemVfc3JjdSk7XG4tLVxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE3NzctICovXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM6MTc3ODpib29sIHBvbGxfc3RhdGVfc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgdW5zaWduZWQgbG9uZyBjb29raWUpXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMTc3OS17XG4tLVxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTE4MTM9c3RhdGljIHZvaWQgc3JjdV9iYXJyaWVyX29uZV9jcHUoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCBzcmN1X2RhdGEgKnNkcClcbi0tXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMTgzMC0gKi9cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYzoxODMxOnZvaWQgc3JjdV9iYXJyaWVyKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE4MzIte1xuLS1cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYz0xODc3PXN0YXRpYyB2b2lkIHNyY3VfZXhwZWRpdGVfY3VycmVudF9jYihzdHJ1Y3QgcmN1X2hlYWQgKnJocClcbi0tXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMTkwOC0gKi9cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYzoxOTA5OnZvaWQgc3JjdV9leHBlZGl0ZV9jdXJyZW50KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE5MTAte1xuLS1cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYz0yMTM3PXN0YXRpYyB2b2lkIHNyY3VfaXJxX3dvcmsoc3RydWN0IGlycV93b3JrICp3b3JrKVxuLS1cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0yMTUzLVxua2VybmVsL3JjdS9zcmN1dHJlZS5jOjIxNTQ6dm9pZCBzcmN1dG9ydHVyZV9nZXRfZ3BfZGF0YShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgaW50ICpmbGFncyxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0yMTU1LVx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyAqZ3Bfc2VxKVxuLS1cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYz0yMTYyPXN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc3JjdV9zaXplX3N0YXRlX25hbWVbXSA9IHtcbi0tXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMjE3NC1cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYzoyMTc1OnZvaWQgc3JjdV90b3J0dXJlX3N0YXRzX3ByaW50KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBjaGFyICp0dCwgY2hhciAqdGYpXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMjE3Ni17XG4tLVxua2VybmVsL3JjdS9zeW5jLmM9MTM9ZW51bSB7IEdQX0lETEUgPSAwLCBHUF9FTlRFUiwgR1BfUEFTU0VELCBHUF9FWElULCBHUF9SRVBMQVkgfTtcbi0tXG5rZXJuZWwvcmN1L3N5bmMuYy0yMC0gKi9cbmtlcm5lbC9yY3Uvc3luYy5jOjIxOnZvaWQgcmN1X3N5bmNfaW5pdChzdHJ1Y3QgcmN1X3N5bmMgKnJzcClcbmtlcm5lbC9yY3Uvc3luYy5jLTIyLXtcbi0tXG5rZXJuZWwvcmN1L3N5bmMuYz01Nz1zdGF0aWMgdm9pZCByY3Vfc3luY19mdW5jKHN0cnVjdCByY3VfaGVhZCAqcmhwKVxuLS1cbmtlcm5lbC9yY3Uvc3luYy5jLTEwNC0gKi9cbmtlcm5lbC9yY3Uvc3luYy5jOjEwNTp2b2lkIHJjdV9zeW5jX2VudGVyKHN0cnVjdCByY3Vfc3luYyAqcnNwKVxua2VybmVsL3JjdS9zeW5jLmMtMTA2LXtcbi0tXG5rZXJuZWwvcmN1L3N5bmMuYy0xNTEtICovXG5rZXJuZWwvcmN1L3N5bmMuYzoxNTI6dm9pZCByY3Vfc3luY19leGl0KHN0cnVjdCByY3Vfc3luYyAqcnNwKVxua2VybmVsL3JjdS9zeW5jLmMtMTUzLXtcbi0tXG5rZXJuZWwvcmN1L3N5bmMuYy0xNzItICovXG5rZXJuZWwvcmN1L3N5bmMuYzoxNzM6dm9pZCByY3Vfc3luY19kdG9yKHN0cnVjdCByY3Vfc3luYyAqcnNwKVxua2VybmVsL3JjdS9zeW5jLmMtMTc0LXtcbi0tXG5rZXJuZWwvcmN1L3Rhc2tzLmg9MTAxNT1zdGF0aWMgdm9pZCByY3VfdGFza3NfcGVydGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIHN0cnVjdCBsaXN0X2hlYWQgKmhvcClcbi0tXG5rZXJuZWwvcmN1L3Rhc2tzLmgtMTAyNC1cbmtlcm5lbC9yY3UvdGFza3MuaDoxMDI1OnZvaWQgY2FsbF9yY3VfdGFza3Moc3RydWN0IHJjdV9oZWFkICpyaHAsIHJjdV9jYWxsYmFja190IGZ1bmMpO1xua2VybmVsL3JjdS90YXNrcy5oLTEwMjYtREVGSU5FX1JDVV9UQVNLUyhyY3VfdGFza3MsIHJjdV90YXNrc193YWl0X2dwLCBjYWxsX3JjdV90YXNrcywgXCYjMzQ7UkNVIFRhc2tzXCYjMzQ7KTtcbi0tXG5rZXJuZWwvcmN1L3Rhc2tzLmg9MTE2MT1zdGF0aWMgdm9pZCB0YXNrc19yY3VfZXhpdF9zdGFsbChzdHJ1Y3QgdGltZXJfbGlzdCAqdW51c2VkKVxuLS1cbmtlcm5lbC9yY3UvdGFza3MuaC0xMTkzLSAqL1xua2VybmVsL3JjdS90YXNrcy5oOjExOTQ6dm9pZCBjYWxsX3JjdV90YXNrcyhzdHJ1Y3QgcmN1X2hlYWQgKnJocCwgcmN1X2NhbGxiYWNrX3QgZnVuYylcbmtlcm5lbC9yY3UvdGFza3MuaC0xMTk1LXtcbi0tXG5rZXJuZWwvcmN1L3Rhc2tzLmg9MTE5OD1FWFBPUlRfU1lNQk9MX0dQTChjYWxsX3JjdV90YXNrcyk7XG4tLVxua2VybmVsL3JjdS90YXNrcy5oLTEyMTctICovXG5rZXJuZWwvcmN1L3Rhc2tzLmg6MTIxODp2b2lkIHN5bmNocm9uaXplX3JjdV90YXNrcyh2b2lkKVxua2VybmVsL3JjdS90YXNrcy5oLTEyMTkte1xuLS1cbmtlcm5lbC9yY3UvdGFza3MuaD0xMjIyPUVYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3JjdV90YXNrcyk7XG4tLVxua2VybmVsL3JjdS90YXNrcy5oLTEyMjktICovXG5rZXJuZWwvcmN1L3Rhc2tzLmg6MTIzMDp2b2lkIHJjdV9iYXJyaWVyX3Rhc2tzKHZvaWQpXG5rZXJuZWwvcmN1L3Rhc2tzLmgtMTIzMS17XG4tLVxua2VybmVsL3JjdS90YXNrcy5oPTEyMzk9c3RhdGljIGludCBfX2luaXQgcmN1X3NwYXduX3Rhc2tzX2t0aHJlYWQodm9pZClcbi0tXG5rZXJuZWwvcmN1L3Rhc2tzLmgtMTI1NS0jaWYgIWRlZmluZWQoQ09ORklHX1RJTllfUkNVKVxua2VybmVsL3JjdS90YXNrcy5oOjEyNTY6dm9pZCBzaG93X3JjdV90YXNrc19jbGFzc2ljX2dwX2t0aHJlYWQodm9pZClcbmtlcm5lbC9yY3UvdGFza3MuaC0xMjU3LXtcbi0tXG5rZXJuZWwvcmN1L3Rhc2tzLmg9MTI2MD1FWFBPUlRfU1lNQk9MX0dQTChzaG93X3JjdV90YXNrc19jbGFzc2ljX2dwX2t0aHJlYWQpO1xua2VybmVsL3JjdS90YXNrcy5oLTEyNjEtXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTM0NAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6CgoqKlJDVSBJbnZlc3RpZ2F0aW9uOiBGb2N1cyBTaGlmdCoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZGl2aW5nIGludG8gUkNVIG1vZGlmaWNhdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGFueSBjaGFuZ2VzIHRvIGBjYWxsX3JjdV90YXNrc2Agb3IgYGNhbGxfcmN1X3Rhc2tzX3RyYWNlYC4gVGhvc2UgYXJlIGtleSBmdW5jdGlvbnMgd2hlbiB5b3UmIzM5O3JlIGxvb2tpbmcgYXQgc2NoZWR1bGluZyBhbmQgdHJhY2luZyBpbXBhY3RzLiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiBpdCBsb29rcyBsaWtlIHRob3NlIHR3byBmdW5jdGlvbnMgYXJlIHVudG91Y2hlZC4gVGhhdCBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG1vZGlmaWNhdGlvbnMgZGlyZWN0bHkgd2l0aGluIGBjYWxsX3JjdWAgYW5kIGBjYWxsX3NyY3VgLgoKQWxyaWdodCwgYSBtb3JlIGdyYW51bGFyIGFuYWx5c2lzIGlzIG5lZWRlZC4gTXkgbmV4dCBzdGVwIGlzIHRvIGhlYWQgZGlyZWN0bHkgdG8gYGtlcm5lbC9yY3UvdHJlZS5jYCwgYmVjYXVzZSB0aGF0JiMzOTtzIHdoZXJlIGBjYWxsX3JjdWAgbGl2ZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgY2hhbmdlZCBpbiB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgcm9vdCBjYXVzZSBsaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDEzOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14odm9pZHxpbnR8Ym9vbCkgW2EtejAtOV9dJiM0MztcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvcmN1L3RyZWUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvcmN1L3RyZWUuYz04MT1zdGF0aWMgREVGSU5FX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQoc3RydWN0IHJjdV9kYXRhLCByY3VfZGF0YSkgPSB7XG4tLVxua2VybmVsL3JjdS90cmVlLmMtODQtXG5rZXJuZWwvcmN1L3RyZWUuYzo4NTppbnQgcmN1X2dldF9ncHdyYXBfY291bnQoaW50IGNwdSlcbmtlcm5lbC9yY3UvdHJlZS5jLTg2LXtcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYz0xOTU9bW9kdWxlX3BhcmFtKHJjdV91bmxvY2tfZGVsYXksIGludCwgMDQ0NCk7XG4tLVxua2VybmVsL3JjdS90cmVlLmMtMTk4LS8qIFJldHJpZXZlIFJDVSBrdGhyZWFkcyBwcmlvcml0eSBmb3IgcmN1dG9ydHVyZSAqL1xua2VybmVsL3JjdS90cmVlLmM6MTk5OmludCByY3VfZ2V0X2dwX2t0aHJlYWRzX3ByaW8odm9pZClcbmtlcm5lbC9yY3UvdHJlZS5jLTIwMC17XG4tLVxua2VybmVsL3JjdS90cmVlLmM9MjMwPXN0YXRpYyBsb25nIHJjdV9nZXRfbl9jYnNfY3B1KGludCBjcHUpXG4tLVxua2VybmVsL3JjdS90cmVlLmMtMjYyLSAqL1xua2VybmVsL3JjdS90cmVlLmM6MjYzOnZvaWQgcmN1X3NvZnRpcnFfcXModm9pZClcbmtlcm5lbC9yY3UvdHJlZS5jLTI2NC17XG4tLVxua2VybmVsL3JjdS90cmVlLmM9MzEzPXN0YXRpYyBib29sIHJjdV93YXRjaGluZ19zbmFwX3N0b3BwZWRfc2luY2Uoc3RydWN0IHJjdV9kYXRhICpyZHAsIGludCBzbmFwKVxuLS1cbmtlcm5lbC9yY3UvdHJlZS5jLTMzMi0gKi9cbmtlcm5lbC9yY3UvdHJlZS5jOjMzMzpib29sIHJjdV93YXRjaGluZ196ZXJvX2luX2VxcyhpbnQgY3B1LCBpbnQgKnZwKVxua2VybmVsL3JjdS90cmVlLmMtMzM0LXtcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYz01NDQ9c3RhdGljIHN0cnVjdCByY3Vfbm9kZSAqcmN1X2dldF9yb290KHZvaWQpXG4tLVxua2VybmVsL3JjdS90cmVlLmMtNTUxLSAqL1xua2VybmVsL3JjdS90cmVlLmM6NTUyOnZvaWQgcmN1dG9ydHVyZV9nZXRfZ3BfZGF0YShpbnQgKmZsYWdzLCB1bnNpZ25lZCBsb25nICpncF9zZXEpXG5rZXJuZWwvcmN1L3RyZWUuYy01NTMte1xuLS1cbmtlcm5lbC9yY3UvdHJlZS5jPTU2Nj1FWFBPUlRfU1lNQk9MX0dQTChyY3V0b3J0dXJlX2dhdGhlcl9ncF9zZXFzKTtcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYy01NjgtLyogRm9ybWF0IGdyYWNlLXBlcmlvZCBzZXF1ZW5jZSBudW1iZXJzIGZvciByY3V0b3J0dXJlIGRpYWdub3N0aWNzLiAqL1xua2VybmVsL3JjdS90cmVlLmM6NTY5OnZvaWQgcmN1dG9ydHVyZV9mb3JtYXRfZ3Bfc2Vxcyh1bnNpZ25lZCBsb25nIGxvbmcgc2VxcywgY2hhciAqY3AsIHNpemVfdCBsZW4pXG5rZXJuZWwvcmN1L3RyZWUuYy01NzAte1xuLS1cbmtlcm5lbC9yY3UvdHJlZS5jPTYwMT1ub2luc3RyIHZvaWQgcmN1X2lycV93b3JrX3Jlc2NoZWQodm9pZClcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYy02MjItICovXG5rZXJuZWwvcmN1L3RyZWUuYzo2MjM6dm9pZCByY3VfaXJxX2V4aXRfY2hlY2tfcHJlZW1wdCh2b2lkKVxua2VybmVsL3JjdS90cmVlLmMtNjI0LXtcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYy02NjMtICovXG5rZXJuZWwvcmN1L3RyZWUuYzo2NjQ6dm9pZCBfX3JjdV9pcnFfZW50ZXJfY2hlY2tfdGljayh2b2lkKVxua2VybmVsL3JjdS90cmVlLmMtNjY1LXtcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYz02OTg9Tk9LUFJPQkVfU1lNQk9MKF9fcmN1X2lycV9lbnRlcl9jaGVja190aWNrKTtcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYy03MTEtICovXG5rZXJuZWwvcmN1L3RyZWUuYzo3MTI6aW50IHJjdV9uZWVkc19jcHUodm9pZClcbmtlcm5lbC9yY3UvdHJlZS5jLTcxMy17XG4tLVxua2VybmVsL3JjdS90cmVlLmM9NzU4PUVYUE9SVF9TWU1CT0xfR1BMKHJjdV9pc193YXRjaGluZyk7XG4tLVxua2VybmVsL3JjdS90cmVlLmMtNzY2LSAqL1xua2VybmVsL3JjdS90cmVlLmM6NzY3OnZvaWQgcmN1X3JlcXVlc3RfdXJnZW50X3FzX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KVxua2VybmVsL3JjdS90cmVlLmMtNzY4LXtcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYz03Nzg9c3RhdGljIHVuc2lnbmVkIGxvbmcgc2VxX2dwd3JhcF9sYWcgPSBVTE9OR19NQVggLyA0O1xuLS1cbmtlcm5lbC9yY3UvdHJlZS5jLTc4NS0gKi9cbmtlcm5lbC9yY3UvdHJlZS5jOjc4Njp2b2lkIHJjdV9zZXRfZ3B3cmFwX2xhZyh1bnNpZ25lZCBsb25nIGxhZ19ncHMpXG5rZXJuZWwvcmN1L3RyZWUuYy03ODcte1xuLS1cbmtlcm5lbC9yY3UvdHJlZS5jPTEzNDA9c3RhdGljIGF0b21pY190ICpyY3VfZ3Bfc2xvd19zdXBwcmVzcztcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYy0xMzQyLS8qIFJlZ2lzdGVyIGEgY291bnRlciB0byBzdXBwcmVzcyBkZWJ1Z2dpbmcgZ3JhY2UtcGVyaW9kIGRlbGF5cy4gKi9cbmtlcm5lbC9yY3UvdHJlZS5jOjEzNDM6dm9pZCByY3VfZ3Bfc2xvd19yZWdpc3RlcihhdG9taWNfdCAqcmdzc3ApXG5rZXJuZWwvcmN1L3RyZWUuYy0xMzQ0LXtcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYz0xMzQ5PUVYUE9SVF9TWU1CT0xfR1BMKHJjdV9ncF9zbG93X3JlZ2lzdGVyKTtcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYy0xMzUxLS8qIFVucmVnaXN0ZXIgYSBjb3VudGVyLCB3aXRoIE5VTEwgZm9yIG5vdCBjYXJpbmcgd2hpY2guICovXG5rZXJuZWwvcmN1L3RyZWUuYzoxMzUyOnZvaWQgcmN1X2dwX3Nsb3dfdW5yZWdpc3RlcihhdG9taWNfdCAqcmdzc3ApXG5rZXJuZWwvcmN1L3RyZWUuYy0xMzUzLXtcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYz0xMzc0PXN0YXRpYyB1bnNpZ25lZCBsb25nIHNsZWVwX2R1cmF0aW9uO1xuLS1cbmtlcm5lbC9yY3UvdHJlZS5jLTEzNzYtLyogQWxsb3cgcmN1dG9ydHVyZSB0byBzdGFsbCB0aGUgZ3JhY2UtcGVyaW9kIGt0aHJlYWQuICovXG5rZXJuZWwvcmN1L3RyZWUuYzoxMzc3OnZvaWQgcmN1X2dwX3NldF90b3J0dXJlX3dhaXQoaW50IGR1cmF0aW9uKVxua2VybmVsL3JjdS90cmVlLmMtMTM3OC17XG4tLVxua2VybmVsL3JjdS90cmVlLmM9MjU3ND1zdGF0aWMgdm9pZCByY3VfZG9fYmF0Y2goc3RydWN0IHJjdV9kYXRhICpyZHApXG4tLVxua2VybmVsL3JjdS90cmVlLmMtMjcyOS0gKi9cbmtlcm5lbC9yY3UvdHJlZS5jOjI3MzA6dm9pZCByY3Vfc2NoZWRfY2xvY2tfaXJxKGludCB1c2VyKVxua2VybmVsL3JjdS90cmVlLmMtMjczMS17XG4tLVxua2VybmVsL3JjdS90cmVlLmM9Mjc2Nj1zdGF0aWMgdm9pZCBmb3JjZV9xc19ybnAoaW50ICgqZikoc3RydWN0IHJjdV9kYXRhICpyZHApKVxuLS1cbmtlcm5lbC9yY3UvdHJlZS5jLTI4MjQtICovXG5rZXJuZWwvcmN1L3RyZWUuYzoyODI1OnZvaWQgcmN1X2ZvcmNlX3F1aWVzY2VudF9zdGF0ZSh2b2lkKVxua2VybmVsL3JjdS90cmVlLmMtMjgyNi17XG4tLVxua2VybmVsL3JjdS90cmVlLmM9MzMxND1tb2R1bGVfcGFyYW0oZW5hYmxlX3JjdV9sYXp5LCBib29sLCAwNDQ0KTtcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYy0zMzM1LSAqL1xua2VybmVsL3JjdS90cmVlLmM6MzMzNjp2b2lkIGNhbGxfcmN1X2h1cnJ5KHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYylcbmtlcm5lbC9yY3UvdHJlZS5jLTMzMzcte1xuLS1cbmtlcm5lbC9yY3UvdHJlZS5jPTMzNDA9RVhQT1JUX1NZTUJPTF9HUEwoY2FsbF9yY3VfaHVycnkpO1xuLS1cbmtlcm5lbC9yY3UvdHJlZS5jLTM0MDEtICovXG5rZXJuZWwvcmN1L3RyZWUuYzozNDAyOnZvaWQgY2FsbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jKVxua2VybmVsL3JjdS90cmVlLmMtMzQwMy17XG4tLVxua2VybmVsL3JjdS90cmVlLmM9MzQzMD1zdGF0aWMgdm9pZCBzeW5jaHJvbml6ZV9yY3Vfbm9ybWFsKHZvaWQpXG4tLVxua2VybmVsL3JjdS90cmVlLmMtMzUwMi0gKi9cbmtlcm5lbC9yY3UvdHJlZS5jOjM1MDM6dm9pZCBzeW5jaHJvbml6ZV9yY3Uodm9pZClcbmtlcm5lbC9yY3UvdHJlZS5jLTM1MDQte1xuLS1cbmtlcm5lbC9yY3UvdHJlZS5jPTM1NDA9RVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfcmN1KTtcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYy0zNTQ5LSAqL1xua2VybmVsL3JjdS90cmVlLmM6MzU1MDp2b2lkIGdldF9jb21wbGV0ZWRfc3luY2hyb25pemVfcmN1X2Z1bGwoc3RydWN0IHJjdV9ncF9zZXEgKmdzcClcbmtlcm5lbC9yY3UvdHJlZS5jLTM1NTEte1xuLS1cbmtlcm5lbC9yY3UvdHJlZS5jPTM1NzM9RVhQT1JUX1NZTUJPTF9HUEwoZ2V0X3N0YXRlX3N5bmNocm9uaXplX3JjdSk7XG4tLVxua2VybmVsL3JjdS90cmVlLmMtMzU5MC0gKi9cbmtlcm5lbC9yY3UvdHJlZS5jOjM1OTE6dm9pZCBnZXRfc3RhdGVfc3luY2hyb25pemVfcmN1X2Z1bGwoc3RydWN0IHJjdV9ncF9zZXEgKmdzcClcbmtlcm5lbC9yY3UvdHJlZS5jLTM1OTIte1xuLS1cbmtlcm5lbC9yY3UvdHJlZS5jPTM2NTE9RVhQT1JUX1NZTUJPTF9HUEwoc3RhcnRfcG9sbF9zeW5jaHJvbml6ZV9yY3UpO1xuLS1cbmtlcm5lbC9yY3UvdHJlZS5jLTM2NjMtICovXG5rZXJuZWwvcmN1L3RyZWUuYzozNjY0OnZvaWQgc3RhcnRfcG9sbF9zeW5jaHJvbml6ZV9yY3VfZnVsbChzdHJ1Y3QgcmN1X2dwX3NlcSAqZ3NwKVxua2VybmVsL3JjdS90cmVlLmMtMzY2NS17XG4tLVxua2VybmVsL3JjdS90cmVlLmM9MzY3MD1FWFBPUlRfU1lNQk9MX0dQTChzdGFydF9wb2xsX3N5bmNocm9uaXplX3JjdV9mdWxsKTtcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYy0zNzA0LSAqL1xua2VybmVsL3JjdS90cmVlLmM6MzcwNTpib29sIHBvbGxfc3RhdGVfc3luY2hyb25pemVfcmN1KHVuc2lnbmVkIGxvbmcgb2xkc3RhdGUpXG5rZXJuZWwvcmN1L3RyZWUuYy0zNzA2LXtcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYz0zNzIzPXN0YXRpYyBib29sIHBvbGxfc3RhdGVfc3luY2hyb25pemVfcmN1X2Z1bGxfdW5vcmRlcmVkKHN0cnVjdCByY3VfZ3Bfc2VxICpnc3ApXG4tLVxua2VybmVsL3JjdS90cmVlLmMtMzc2Ni0gKi9cbmtlcm5lbC9yY3UvdHJlZS5jOjM3Njc6Ym9vbCBwb2xsX3N0YXRlX3N5bmNocm9uaXplX3JjdV9mdWxsKHN0cnVjdCByY3VfZ3Bfc2VxICpnc3ApXG5rZXJuZWwvcmN1L3RyZWUuYy0zNzY4LXtcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYz0zNzc2PUVYUE9SVF9TWU1CT0xfR1BMKHBvbGxfc3RhdGVfc3luY2hyb25pemVfcmN1X2Z1bGwpO1xuLS1cbmtlcm5lbC9yY3UvdHJlZS5jLTM3OTUtICovXG5rZXJuZWwvcmN1L3RyZWUuYzozNzk2OnZvaWQgY29uZF9zeW5jaHJvbml6ZV9yY3UodW5zaWduZWQgbG9uZyBvbGRzdGF0ZSlcbmtlcm5lbC9yY3UvdHJlZS5jLTM3OTcte1xuLS1cbmtlcm5lbC9yY3UvdHJlZS5jPTM4MDE9RVhQT1JUX1NZTUJPTF9HUEwoY29uZF9zeW5jaHJvbml6ZV9yY3UpO1xuLS1cbmtlcm5lbC9yY3UvdHJlZS5jLTM4MjItICovXG5rZXJuZWwvcmN1L3RyZWUuYzozODIzOnZvaWQgY29uZF9zeW5jaHJvbml6ZV9yY3VfZnVsbChzdHJ1Y3QgcmN1X2dwX3NlcSAqZ3NwKVxua2VybmVsL3JjdS90cmVlLmMtMzgyNC17XG4tLVxua2VybmVsL3JjdS90cmVlLmM9Mzk3MD1zdGF0aWMgdm9pZCByY3VfYmFycmllcl9oYW5kbGVyKHZvaWQgKmNwdV9pbilcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYy0zOTk1LSAqL1xua2VybmVsL3JjdS90cmVlLmM6Mzk5Njp2b2lkIHJjdV9iYXJyaWVyKHZvaWQpXG5rZXJuZWwvcmN1L3RyZWUuYy0zOTk3LXtcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYz00MTg4PXN0YXRpYyBib29sIHJjdV9yZHBfY3B1X29ubGluZShzdHJ1Y3QgcmN1X2RhdGEgKnJkcClcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYy00MTkyLVxua2VybmVsL3JjdS90cmVlLmM6NDE5Mzpib29sIHJjdV9jcHVfb25saW5lKGludCBjcHUpXG5rZXJuZWwvcmN1L3RyZWUuYy00MTk0LXtcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYz00NDA3PXN0YXRpYyB2b2lkIHJjdV9zcGF3bl9ybnBfa3RocmVhZHMoc3RydWN0IHJjdV9ub2RlICpybnApXG4tLVxua2VybmVsL3JjdS90cmVlLmMtNDQyNi0gKi9cbmtlcm5lbC9yY3UvdHJlZS5jOjQ0Mjc6aW50IHJjdXRyZWVfcHJlcGFyZV9jcHUodW5zaWduZWQgaW50IGNwdSlcbmtlcm5lbC9yY3UvdHJlZS5jLTQ0Mjgte1xuLS1cbmtlcm5lbC9yY3UvdHJlZS5jLTQ0NzctICovXG5rZXJuZWwvcmN1L3RyZWUuYzo0NDc4OmJvb2wgcmN1X2NwdV9iZWVuZnVsbHlvbmxpbmUoaW50IGNwdSlcbmtlcm5lbC9yY3UvdHJlZS5jLTQ0Nzkte1xuLS1cbmtlcm5lbC9yY3UvdHJlZS5jLTQ0ODgtICovXG5rZXJuZWwvcmN1L3RyZWUuYzo0NDg5OmludCByY3V0cmVlX29ubGluZV9jcHUodW5zaWduZWQgaW50IGNwdSlcbmtlcm5lbC9yY3UvdHJlZS5jLTQ0OTAte1xuLS1cbmtlcm5lbC9yY3UvdHJlZS5jLTQ1MjEtICovXG5rZXJuZWwvcmN1L3RyZWUuYzo0NTIyOnZvaWQgcmN1dHJlZV9yZXBvcnRfY3B1X3N0YXJ0aW5nKHVuc2lnbmVkIGludCBjcHUpXG5rZXJuZWwvcmN1L3RyZWUuYy00NTIzLXtcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYy00NTc4LSAqL1xua2VybmVsL3JjdS90cmVlLmM6NDU3OTp2b2lkIHJjdXRyZWVfcmVwb3J0X2NwdV9kZWFkKHZvaWQpXG5rZXJuZWwvcmN1L3RyZWUuYy00NTgwLXtcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYy00NjMzLSAqL1xua2VybmVsL3JjdS90cmVlLmM6NDYzNDp2b2lkIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoaW50IGNwdSlcbmtlcm5lbC9yY3UvdHJlZS5jLTQ2MzUte1xuLS1cbmtlcm5lbC9yY3UvdHJlZS5jLTQ3MDAtICovXG5rZXJuZWwvcmN1L3RyZWUuYzo0NzAxOmludCByY3V0cmVlX2RlYWRfY3B1KHVuc2lnbmVkIGludCBjcHUpXG5rZXJuZWwvcmN1L3RyZWUuYy00NzAyLXtcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYy00NzEzLSAqL1xua2VybmVsL3JjdS90cmVlLmM6NDcxNDppbnQgcmN1dHJlZV9keWluZ19jcHUodW5zaWduZWQgaW50IGNwdSlcbmtlcm5lbC9yY3UvdHJlZS5jLTQ3MTUte1xuLS1cbmtlcm5lbC9yY3UvdHJlZS5jLTQ3MjktICovXG5rZXJuZWwvcmN1L3RyZWUuYzo0NzMwOmludCByY3V0cmVlX29mZmxpbmVfY3B1KHVuc2lnbmVkIGludCBjcHUpXG5rZXJuZWwvcmN1L3RyZWUuYy00NzMxLXtcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYz00ODEyPWVhcmx5X2luaXRjYWxsKHJjdV9zcGF3bl9ncF9rdGhyZWFkKTtcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYy00ODIzLSAqL1xua2VybmVsL3JjdS90cmVlLmM6NDgyNDp2b2lkIHJjdV9zY2hlZHVsZXJfc3RhcnRpbmcodm9pZClcbmtlcm5lbC9yY3UvdHJlZS5jLTQ4MjUte1xuLS1cbmtlcm5lbC9yY3UvdHJlZS5jPTQ5MzU9c3RhdGljIHZvaWQgX19pbml0IHNhbml0aXplX2t0aHJlYWRfcHJpbyh2b2lkKVxuLS1cbmtlcm5lbC9yY3UvdHJlZS5jLTQ5NTgtICovXG5rZXJuZWwvcmN1L3RyZWUuYzo0OTU5OnZvaWQgcmN1X2luaXRfZ2VvbWV0cnkodm9pZClcbmtlcm5lbC9yY3UvdHJlZS5jLTQ5NjAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDEzOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MjAyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTUxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBSQ1UvU1JDVSBDb25jdXJyZW5jeSBCdWcgRml4ZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgcmUtZW50cmFuY3kgaXNzdWVzIGluIFJDVS9TUkNVIGR1ZSB0byBtb2RpZmljYXRpb25zIHJlbGF0ZWQgdG8gZGVmZXJyZWQgZHJhaW5pbmcsIHBhcnRpY3VsYXJseSB3aGVuIGludGVycnVwdHMgYXJlIGRpc2FibGVkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgcGxhY2VzIHRvIGZvY3VzIGZ1enppbmcgZWZmb3J0cywgYmFsYW5jaW5nIHRhcmdldGVkIGNvdmVyYWdlIHdpdGggYXZvaWRpbmcgb3ZlcmJyb2FkLCBnZW5lcmljIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IHNrZXcgdGhlIHRlc3RzLgoKVGhlIGluaXRpYWwgaW1wdWxzZSB3YXMgdG8gemVybyBpbiBvbiBgY2FsbF9yY3VgIGFuZCBgY2FsbF9zcmN1YCwgYXMgdGhleSYjMzk7cmUgdGhlIGhlYXZpbHktbW9kaWZpZWQgZnVuY3Rpb25zLiBIb3dldmVyLCB0aGUgaW5zdHJ1Y3Rpb25zIGV4cGxpY2l0bHkgYWR2aXNlIGFnYWluc3QgbGlzdGluZyAmIzM0O2dlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLiYjMzQ7IFRob3VnaCB0aGVzZSBhcmUgd2hlcmUgdGhlIHBhdGNoJiMzOTtzIGNvcmUgbG9naWMgY2hhbmdlIG9jY3VycywgYW5kIHRoZSBpc3N1ZSBpcyBzcGVjaWZpY2FsbHkgYWJvdXQgcmUtZW50cmFuY3kgaW4gdGhlc2UgZnVuY3Rpb25zLCBsaXN0aW5nIHRoZW0gd291bGQgYmUgdG9vIGJyb2FkLgoKSW5zdGVhZCwgSSYjMzk7bGwgY29uY2VudHJhdGUgb24gdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBhZmZlY3RlZCBhbmQgY2FuIHByb3ZpZGUgYmV0dGVyIHRhcmdldGluZy4gVGhpcyBpbmNsdWRlcyBgcmN1X2JhcnJpZXJgLCBgc3JjdV9iYXJyaWVyYCwgYHNyY3Vfb2ZmbGluZV9kcmFpbmAsIGFuZCBgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc2AuIFRoZXNlIGFyZSBmdW5jdGlvbnMgdGhhdCBhcmUgbW9kaWZpZWQgYnV0IGFyZSBub3QgZ2VuZXJpYyBob3QtcGF0aHMuIGBzcmN1X29mZmxpbmVfZHJhaW5gIGFuZCBgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc2AgYXJlIGtleSwgZ2l2ZW4gdGhlIG9mZmxpbmUgQ1BVIGFuZCB0cmVlIG1hbmFnZW1lbnQgY29udGV4dC4KCk5vdywgY29uc2lkZXJpbmcgdGhlIHBhdGNoJiMzOTtzIHVzZSBvZiBgcmN1dG9ydHVyZS5jYCwgYW5kIHRoZSBgc2hvdWxkX3JjdV9kZWZlcigpYCBsb2dpYyByZWxhdGVkIHRvIGBpcnFzX2Rpc2FibGVkKClgIGFuZCBgcmN1X3NjaGVkdWxlcl9hY3RpdmVgLCBJJiMzOTtsbCBuZWVkIHRvIGVuYWJsZSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gZmxhZ3MuIGBSQ1VfVE9SVFVSRV9URVNUYCBpcyBhIG11c3QsIGdpdmVuIHRoZSBkaXJlY3QgY2hhbmdlcyB0byB0aGUgdGVzdCBjb2RlLiBBbHNvLCBgUEVSRl9FVkVOVFNgIGlzIHJlcXVpcmVkIGZvciB0aGUgTk1JLWJhc2VkIHRlc3RzIHdpdGhpbiBgcmN1dG9ydHVyZS5jYCwgc28gSSYjMzk7bGwgaW5jbHVkZSBpdC4KClNpbmNlIHRoZSBwYXRjaCBpbmNsdWRlcyBgV0FSTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSksIC4uLilgIHN0YXRlbWVudHMsIEkmIzM5O2xsIGFkZCBgUFJPVkVfUkNVYCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgIHRvIGVuc3VyZSB0aGlzIGNoZWNrIGlzIGFjdGl2ZSBhbmQgdGhhdCB0aGUgdGVzdGluZyBpcyBjb21wcmVoZW5zaXZlLgoKSW4gc3VtbWFyeSwgdGhlIGBGb2N1c1N5bWJvbHNgIHdpbGwgYmU6CgoqICAgYHJjdV9iYXJyaWVyYAoqICAgYHNyY3VfYmFycmllcmAKKiAgIGBzcmN1X29mZmxpbmVfZHJhaW5gCiogICBgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc2AKCkFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIHdpbGwgYmU6CgoqICAgYFJDVV9UT1JUVVJFX1RFU1RgCiogICBgUEVSRl9FVkVOVFNgCiogICBgUFJPVkVfUkNVYAoKVGhpcyBzZXR1cCBzaG91bGQgcHJvdmlkZSBmb2N1c2VkIGZ1enppbmcgb24gdGhlIG1vZGlmaWVkIFJDVS9TUkNVIGZ1bmN0aW9ucywgYW5kIGFsc28gZW5zdXJlIHRoZSBuZXcgdG9ydHVyZSB0ZXN0cyBhcmUgYWN0aXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDEzOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQUk9WRV9SQ1UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3JjdS9LY29uZmlnLmRlYnVnPTY9bWVudSBcJiMzNDtSQ1UgRGVidWdnaW5nXCYjMzQ7XG5rZXJuZWwvcmN1L0tjb25maWcuZGVidWctNy1cbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zzo4OmNvbmZpZyBQUk9WRV9SQ1Vcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zy05LVx0ZGVmX2Jvb2wgUFJPVkVfTE9DS0lOR1xua2VybmVsL3JjdS9LY29uZmlnLmRlYnVnLTEwLVxua2VybmVsL3JjdS9LY29uZmlnLmRlYnVnOjExOmNvbmZpZyBQUk9WRV9SQ1VfTElTVFxua2VybmVsL3JjdS9LY29uZmlnLmRlYnVnLTEyLVx0Ym9vbCBcJiMzNDtSQ1UgbGlzdCBsb2NrZGVwIGRlYnVnZ2luZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDEzOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3NDUwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYToKCioqUkNVIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuIGBQUk9WRV9SQ1VgLi4uIHJpZ2h0LCBpdCYjMzk7cyBkZWZpbmVkIGFzIGBkZWZfYm9vbCBQUk9WRV9MT0NLSU5HYC4gVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQuIFNvLCBpZiB3ZSB3YW50IGBQUk9WRV9SQ1VgIHRvIGJlIGFjdGl2ZSwgd2UgKm11c3QqIGFsc28gZW5hYmxlIGBQUk9WRV9MT0NLSU5HYC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyB0aGUgUkNVIHByb3ZpbmcgZ3JvdW5kIHJlbGllcyBvbiB0aGUgaW5mcmFzdHJ1Y3R1cmUgcHJvdmlkZWQgYnkgdGhlIGxvY2tpbmcgcHJvdmluZyBzeXN0ZW0uCgpOb3csIHdoZXJlIGRvZXMgdGhhdCBsZWF2ZSB1cz8gSSB0aGluayBpdCYjMzk7cyB0aW1lIHRvIGNoZWNrIHRoZSBzdGF0ZSBvZiBgUkNVX1RPUlRVUkVfVEVTVGAuIEkgbmVlZCB0byBlbnN1cmUgd2UmIzM5O3ZlIGdvdCB0aGUgbmVjZXNzYXJ5IGluZnJhc3RydWN0dXJlIGluIHBsYWNlIGZvciBwcm9wZXIgdGVzdGluZy4gV2UgZG9uJiMzOTt0IHdhbnQgdG8gZ2V0IGNhdWdodCBvZmYtZ3VhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDEzOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBSQ1VfVE9SVFVSRV9URVNUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zz0yNj1jb25maWcgUkNVX1NDQUxFX1RFU1Rcbi0tXG5rZXJuZWwvcmN1L0tjb25maWcuZGVidWctNDAtXG5rZXJuZWwvcmN1L0tjb25maWcuZGVidWc6NDE6Y29uZmlnIFJDVV9UT1JUVVJFX1RFU1Rcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zy00Mi1cdHRyaXN0YXRlIFwmIzM0O3RvcnR1cmUgdGVzdHMgZm9yIFJDVVwmIzM0O1xuLS1cbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zy01NS1cbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zzo1Njpjb25maWcgUkNVX1RPUlRVUkVfVEVTVF9DSEtfUkRSX1NUQVRFXG5rZXJuZWwvcmN1L0tjb25maWcuZGVidWctNTctXHRib29sIFwmIzM0O0NoZWNrIHJjdXRvcnR1cmUgcmVhZGVyIHN0YXRlXCYjMzQ7XG4tLVxua2VybmVsL3JjdS9LY29uZmlnLmRlYnVnLTcxLVxua2VybmVsL3JjdS9LY29uZmlnLmRlYnVnOjcyOmNvbmZpZyBSQ1VfVE9SVFVSRV9URVNUX0xPR19DUFVcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zy03My1cdGJvb2wgXCYjMzQ7TG9nIENQVSBmb3IgcmN1dG9ydHVyZSBmYWlsdXJlc1wmIzM0O1xuLS1cbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zy04Ni1cbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zzo4Nzpjb25maWcgUkNVX1RPUlRVUkVfVEVTVF9MT0dfR1Bcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zy04OC1cdGJvb2wgXCYjMzQ7TG9nIGdyYWNlLXBlcmlvZCBudW1iZXJzIGZvciByY3V0b3J0dXJlIGZhaWx1cmVzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDEzOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MDExCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgdGhlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBgUkNVX1RPUlRVUkVfVEVTVGAuIEkgdW5kZXJzdGFuZCB0aGF0JiMzOTtzIGEgdHJpc3RhdGUgb3B0aW9uLCBtZWFuaW5nIGl0IGNhbiBiZSBlaXRoZXIgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIGJ1aWx0IGFzIGEgbW9kdWxlLiBJbnRlcmVzdGluZy4gTXkgZmlyc3QgdGhvdWdodCBpcyB3aGV0aGVyIHdlIGNhbiBhY3R1YWxseSBlbmFibGUgaXQgZm9yIHRoZSBzaXR1YXRpb24gd2UmIzM5O3JlIGluLiBUaGlzIGlzIGdvaW5nIHRvIGRlcGVuZCBvbiBhIGxvdCBvZiB0aGluZ3MuIEJlZm9yZSBJIGRpdmUgaW4gdG9vIGRlZXAgb24gUkNVLCBJIHNob3VsZCBwcm9iYWJseSB0YWtlIGEgbG9vayBhdCB0aGUgYFBFUkZfRVZFTlRTYCBvcHRpb24uIEl0IGNvdWxkIGJlIHJlbGV2YW50LCBmb3IgYWxsIGtpbmRzIG9mIHJlYXNvbnMuIEFyZSB0aGV5IGVuYWJsZWQ/IERvIHRoZXkgaW50ZXJmZXJlPyBEb2VzIHRoZSBidWlsZCBlbnZpcm9ubWVudCBldmVuIHN1cHBvcnQgYm90aD8gSXQgc2VlbXMgbGlrZSBgUEVSRl9FVkVOVFNgIGlzIGEgcG90ZW50aWFsIHBpZWNlIG9mIHRoZSBsYXJnZXIgcGljdHVyZSwgZGVwZW5kaW5nIG9uIGhvdyB0aGlzIHRlc3QgaXMgZ29pbmcgdG8gYmUgdXNlZCBhbmQgd2hlcmUgYW5kIGhvdyB3ZSB3aWxsIGdhdGhlciBpbnNpZ2h0cyBpbnRvIGl0cyByZXN1bHRzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSByZWxhdGUgYmVmb3JlIEkgc3BlbmQgdG9vIG11Y2ggdGltZSBvbiB0aGUgdG9ydHVyZSB0ZXN0IGl0c2VsZi4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBgUEVSRl9FVkVOVFNgIGlzIGluIHRoZSByaWdodCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUEVSRl9FVkVOVFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvZXZlbnRzL0tjb25maWc9Mj1tZW51IFwmIzM0O1BlcmZvcm1hbmNlIG1vbml0b3JpbmdcJiMzNDtcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTMtXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZzo0OmNvbmZpZyBQRVJGX0VWRU5UU19JTlRFTF9VTkNPUkVcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTUtXHR0cmlzdGF0ZSBcJiMzNDtJbnRlbCB1bmNvcmUgcGVyZm9ybWFuY2UgZXZlbnRzXCYjMzQ7XG4tLVxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMTEtXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZzoxMjpjb25maWcgUEVSRl9FVkVOVFNfSU5URUxfUkFQTFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMTMtXHR0cmlzdGF0ZSBcJiMzNDtJbnRlbC9BTUQgcmFwbCBwZXJmb3JtYW5jZSBldmVudHNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0xOS1cbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjIwOmNvbmZpZyBQRVJGX0VWRU5UU19JTlRFTF9DU1RBVEVcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTIxLVx0dHJpc3RhdGUgXCYjMzQ7SW50ZWwgY3N0YXRlIHBlcmZvcm1hbmNlIGV2ZW50c1wmIzM0O1xuLS1cbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTI3LVxuYXJjaC94ODYvZXZlbnRzL0tjb25maWc6Mjg6Y29uZmlnIFBFUkZfRVZFTlRTX0FNRF9QT1dFUlxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMjktXHRkZXBlbmRzIG9uIFBFUkZfRVZFTlRTIFx1MDAyNlx1MDAyNiBDUFVfU1VQX0FNRFxuLS1cbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTM2LVxuYXJjaC94ODYvZXZlbnRzL0tjb25maWc6Mzc6Y29uZmlnIFBFUkZfRVZFTlRTX0FNRF9VTkNPUkVcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTM4LVx0dHJpc3RhdGUgXCYjMzQ7QU1EIFVuY29yZSBwZXJmb3JtYW5jZSBldmVudHNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy00Ny1cbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjQ4OmNvbmZpZyBQRVJGX0VWRU5UU19BTURfQlJTXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy00OS1cdGRlcGVuZHMgb24gUEVSRl9FVkVOVFMgXHUwMDI2XHUwMDI2IENQVV9TVVBfQU1EXG4tLVxuaW5pdC9LY29uZmlnPTIxNzU9bWVudSBcJiMzNDtLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVyc1wmIzM0O1xuaW5pdC9LY29uZmlnLTIxNzYtXG5pbml0L0tjb25maWc6MjE3Nzpjb25maWcgUEVSRl9FVkVOVFNcbmluaXQvS2NvbmZpZy0yMTc4LVx0Ym9vbCBcJiMzNDtLZXJuZWwgcGVyZm9ybWFuY2UgZXZlbnRzIGFuZCBjb3VudGVyc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMzozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODgxMgoJCQkJCQkJb3V0cHV0OiAxODYKCQkJCQkJCXRob3VnaHRzOiA0MjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUkNVL1NSQ1UgRGVmZXJyYWwgSW1wbGVtZW50YXRpb24gVGhvdWdodHMqKgoKT2theSwgc28gYFBFUkZfRVZFTlRTYCBpcyBjb25maXJtZWQgYXMgYSBib29sZWFuIHZhbHVlLiBUaGF0IG1lYW5zIHRoZSBgRW5hYmxlQ29uZmlnc2Agd2lsbCBjb25zaXN0IG9mIGBQUk9WRV9MT0NLSU5HYCwgYFJDVV9UT1JUVVJFX1RFU1RgLCBhbmQsIG9mIGNvdXJzZSwgYFBFUkZfRVZFTlRTYC4KCk5vdywgZm9yIHRoZSBgRm9jdXNTeW1ib2xzYDogYHJjdV9iYXJyaWVyYCwgYHNyY3VfYmFycmllcmAsIGBzcmN1X29mZmxpbmVfZHJhaW5gLCBhbmQgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBJJiMzOTttIGZvY3VzaW5nIG9uLgoKV2FpdCwgYHNyY3VfZGVmZXJfZHJhaW5gIGlzIGV4cG9ydGVkIGZyb20gYGtlcm5lbC9yY3Uvc3JjdXRpbnkuY2AuICBJIGFsbW9zdCBtaXNzZWQgdGhhdC4gIExvb2tpbmcgYXQgaXRzIGRlZmluaXRpb246CgpgYGBjCnZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KQpgYGAKCkl0JiMzOTtzIGFuIGBpcnFfd29ya2AgY2FsbGJhY2ssIHNvIGl0JiMzOTtzIG5vdCB1c3VhbGx5IGNhbGxlZCBkaXJlY3RseSwgYnV0IHRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgZXhwb3J0ZWQgbWVhbnMgaXQgKmNvdWxkKiBiZSB1c2VkIGV4dGVybmFsbHkuIEkgc2hvdWxkIGRlZmluaXRlbHkgaW5jbHVkZSBpdC4gQmV0dGVyIHRvIGJlIHRob3JvdWdoLCBJIHN1cHBvc2UuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBzY2FuIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgb3RoZXIgZXhwb3J0ZWQgZnVuY3Rpb25zLiAgQWgsIGBjYWxsX3NyY3VgIGlzIGV4cG9ydGVkLiBIb3dldmVyLCBpdCBpcyBhIGhvdCBwYXRoIHNvIEkgd29uJiMzOTt0IGluY2x1ZGUgaXQuCgpBbHJpZ2h0LCBiYWNrIHRvIGBzcmN1X2RlZmVyX2RyYWluYC4gSSYjMzk7bGwgZ28gd2l0aCBpbmNsdWRpbmcgdGhhdCBpbiB0aGUgc2V0LgoKTXkgcmVhc29uaW5nIGhlcmUgaXMgdGhhdCB0aGUgb3ZlcmFsbCBwYXRjaCBhZGRyZXNzZXMgYSBjcml0aWNhbCBpc3N1ZTogZGVmZXJyaW5nIGBjYWxsX3JjdSgpYCBhbmQgYGNhbGxfc3JjdSgpYCBjYWxsYmFja3MsIGVzcGVjaWFsbHkgd2hlbiBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZC4gVGhpcyBpcyBlc3NlbnRpYWwgdG8gcHJldmVudCBkZWFkbG9ja3MgYW5kIHBvdGVudGlhbCBsaXN0IGNvcnJ1cHRpb24gZHVyaW5nIHJlLWVudHJhbnQgY2FsbHMg4oCTIHRoaW5rIEJQRiBvciBOTUlzLiBUaGUgaW1wbGVtZW50YXRpb24gdXNlcyBgaXJxX3dvcmtgIGFuZCBsb2NrbGVzcyBsaXN0cyBmb3IgdGhlIGRlZmVycmFsLiBJdCYjMzk7cyBmdW5jdGlvbmFsLCB0aGUgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgdGhlc2UgY2hhbmdlcyB0b3VjaCBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcywgc28gaXQmIzM5O3MgYSBjcml0aWNhbCBhcmVhIHRvIGFuYWx5emUuCgpKdXN0IGEgZmluYWwgY2hlY2ssIEkgbmVlZCB0byB2ZXJpZnkgYHNyY3Vfb2ZmbGluZV9kcmFpbmAuIEkmIzM5O2xsIGxvb2sgYXQgdGhlIGRlZmluaXRpb24gaW4gYGtlcm5lbC9yY3Uvc3JjdXRyZWUuY2A6CgpgYGBjCnZvaWQgc3JjdV9vZmZsaW5lX2RyYWluKGludCBjcHUpCmBgYApBbHRob3VnaCBpdCBpcyBub3QgZXhwb3J0ZWQsIGl0IGlzIGNhbGxlZCBieSBgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc2Agd2hpY2ggaXMgaW4gYGtlcm5lbC9yY3UvdHJlZS5jYCwgc28gSSBzaG91bGQgYmUgZ29vZCB0byBpbmNsdWRlIGl0LgoKT2theSwgSSYjMzk7bSBjb25maWRlbnQuIFRpbWUgdG8gdXNlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJPVkVfTE9DS0lORyYjMzQ7LAogICAgJiMzNDtSQ1VfVE9SVFVSRV9URVNUJiMzNDssCiAgICAmIzM0O1BFUkZfRVZFTlRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmN1X2JhcnJpZXImIzM0OywKICAgICYjMzQ7c3JjdV9iYXJyaWVyJiMzNDssCiAgICAmIzM0O3NyY3Vfb2ZmbGluZV9kcmFpbiYjMzQ7LAogICAgJiMzNDtyY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzJiMzNDssCiAgICAmIzM0O3NyY3VfZGVmZXJfZHJhaW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBSQ1UgYW5kIFNSQ1UgbG9naWMgdG8gZGVmZXIgYGNhbGxfcmN1KClgIGFuZCBgY2FsbF9zcmN1KClgIGNhbGxiYWNrcyB3aGVuIGludGVycnVwdHMgYXJlIGRpc2FibGVkLiBUaGlzIHByZXZlbnRzIGRlYWRsb2NrcyBvciBsaXN0IGNvcnJ1cHRpb24gZHVyaW5nIHJlLWVudHJhbnQgY2FsbHMgKGUuZy4sIGZyb20gQlBGIHByb2dyYW1zIG9yIE5NSXMpLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGRlZmVycmFsIG1lY2hhbmlzbSB1c2luZyBgaXJxX3dvcmtgIGFuZCBsb2NrbGVzcyBsaXN0cy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwsIHJlYWNoYWJsZSwgYW5kIGFmZmVjdCBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJPVkVfTE9DS0lORyYjMzQ7LAogICAgJiMzNDtSQ1VfVE9SVFVSRV9URVNUJiMzNDssCiAgICAmIzM0O1BFUkZfRVZFTlRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmN1X2JhcnJpZXImIzM0OywKICAgICYjMzQ7c3JjdV9iYXJyaWVyJiMzNDssCiAgICAmIzM0O3NyY3Vfb2ZmbGluZV9kcmFpbiYjMzQ7LAogICAgJiMzNDtyY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzJiMzNDssCiAgICAmIzM0O3NyY3VfZGVmZXJfZHJhaW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBSQ1UgYW5kIFNSQ1UgbG9naWMgdG8gZGVmZXIgYGNhbGxfcmN1KClgIGFuZCBgY2FsbF9zcmN1KClgIGNhbGxiYWNrcyB3aGVuIGludGVycnVwdHMgYXJlIGRpc2FibGVkLiBUaGlzIHByZXZlbnRzIGRlYWRsb2NrcyBvciBsaXN0IGNvcnJ1cHRpb24gZHVyaW5nIHJlLWVudHJhbnQgY2FsbHMgKGUuZy4sIGZyb20gQlBGIHByb2dyYW1zIG9yIE5NSXMpLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGRlZmVycmFsIG1lY2hhbmlzbSB1c2luZyBgaXJxX3dvcmtgIGFuZCBsb2NrbGVzcyBsaXN0cy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwsIHJlYWNoYWJsZSwgYW5kIGFmZmVjdCBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDEzOjMxOjQwLjM0MTk2MDkwOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NjU3NzY0NDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBST1ZFX0xPQ0tJTkdcIixcbiAgICBcIlJDVV9UT1JUVVJFX1RFU1RcIixcbiAgICBcIlBFUkZfRVZFTlRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmN1X2JhcnJpZXJcIixcbiAgICBcInNyY3VfYmFycmllclwiLFxuICAgIFwic3JjdV9vZmZsaW5lX2RyYWluXCIsXG4gICAgXCJyY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzXCIsXG4gICAgXCJzcmN1X2RlZmVyX2RyYWluXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBSQ1UgYW5kIFNSQ1UgbG9naWMgdG8gZGVmZXIgYGNhbGxfcmN1KClgIGFuZCBgY2FsbF9zcmN1KClgIGNhbGxiYWNrcyB3aGVuIGludGVycnVwdHMgYXJlIGRpc2FibGVkLiBUaGlzIHByZXZlbnRzIGRlYWRsb2NrcyBvciBsaXN0IGNvcnJ1cHRpb24gZHVyaW5nIHJlLWVudHJhbnQgY2FsbHMgKGUuZy4sIGZyb20gQlBGIHByb2dyYW1zIG9yIE5NSXMpLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGRlZmVycmFsIG1lY2hhbmlzbSB1c2luZyBgaXJxX3dvcmtgIGFuZCBsb2NrbGVzcyBsaXN0cy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwsIHJlYWNoYWJsZSwgYW5kIGFmZmVjdCBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTM6MzE6NDAuMzQxOTY4OTQ4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTU4ODc5MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5NGQyMmM2NzcxODdmMmU2ZGE5NmQ3ZjM4YTdhMmNiZTEwOTM2NmIwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDUgMTM6MzE6MzkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcmN1dGlueS5oIGIvaW5jbHVkZS9saW51eC9zcmN1dGlueS5oXFxuaW5kZXggZmJjZjEzYmMxMmQxNS4uYTBlNTRkOTE4MmJhYSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NyY3V0aW55LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NyY3V0aW55LmhcXG5AQCAtMTIsNiArMTIsNyBAQFxcbiAjZGVmaW5lIF9MSU5VWF9TUkNVX1RJTllfSFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lycV93b3JrX3R5cGVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9sbGlzdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3dhaXQuaFxcdTAwM2VcXG4gXFxuIHN0cnVjdCBzcmN1X3N0cnVjdCB7XFxuQEAgLTI2LDYgKzI3LDggQEAgc3RydWN0IHNyY3Vfc3RydWN0IHtcXG4gXFx0c3RydWN0IHJjdV9oZWFkICoqc3JjdV9jYl90YWlsO1xcdC8qIFBlbmRpbmcgY2FsbGJhY2tzOiBUYWlsLiAqL1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc3JjdV93b3JrO1xcdC8qIEZvciBkcml2aW5nIGdyYWNlIHBlcmlvZHMuICovXFxuIFxcdHN0cnVjdCBpcnFfd29yayBzcmN1X2lycV93b3JrO1xcdC8qIERlZmVyIHNjaGVkdWxlX3dvcmsoKSB0byBpcnEgd29yay4gKi9cXG4rXFx0c3RydWN0IGxsaXN0X2hlYWQgZGVmZXJfY2JzO1xcdC8qIENhbGxiYWNrcyBkZWZlcnJlZCBvbiByZS1lbnRyeS4gKi9cXG4rXFx0c3RydWN0IGlycV93b3JrIGRlZmVyX2l3O1xcdFxcdC8qIFJlZ2lzdGVycyBkZWZlcl9jYnMgbGF0ZXIuICovXFxuICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQ1xcbiBcXHRzdHJ1Y3QgbG9ja2RlcF9tYXAgZGVwX21hcDtcXG4gI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQyAqL1xcbkBAIC0zMyw2ICszNiw3IEBAIHN0cnVjdCBzcmN1X3N0cnVjdCB7XFxuIFxcbiB2b2lkIHNyY3VfZHJpdmVfZ3Aoc3RydWN0IHdvcmtfc3RydWN0ICp3cCk7XFxuIHZvaWQgc3JjdV90aW55X2lycV93b3JrKHN0cnVjdCBpcnFfd29yayAqaXJxX3dvcmspO1xcbit2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppcnFfd29yayk7XFxuIFxcbiAjZGVmaW5lIF9fU1JDVV9TVFJVQ1RfSU5JVChuYW1lLCBfX2lnbm9yZWQsIF9fX2lnbm9yZWQsIF9fX19pZ25vcmVkKVxcdFxcXFxcXG4ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5AQCAtNDAsNiArNDQsOSBAQCB2b2lkIHNyY3VfdGlueV9pcnFfd29yayhzdHJ1Y3QgaXJxX3dvcmsgKmlycV93b3JrKTtcXG4gXFx0LnNyY3VfY2JfdGFpbCA9IFxcdTAwMjZuYW1lLnNyY3VfY2JfaGVhZCxcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdC5zcmN1X3dvcmsgPSBfX1dPUktfSU5JVElBTElaRVIobmFtZS5zcmN1X3dvcmssIHNyY3VfZHJpdmVfZ3ApLFxcdFxcXFxcXG4gXFx0LnNyY3VfaXJxX3dvcmsgPSB7IC5mdW5jID0gc3JjdV90aW55X2lycV93b3JrIH0sXFx0XFx0XFxcXFxcbitcXHQuZGVmZXJfY2JzID0gTExJU1RfSEVBRF9JTklUKG5hbWUuZGVmZXJfY2JzKSxcXHRcXHRcXHRcXFxcXFxuK1xcdC5kZWZlcl9pdyA9IHsgLm5vZGUgPSB7IC51X2ZsYWdzID0gSVJRX1dPUktfSEFSRF9JUlEgfSxcXHRcXHRcXFxcXFxuK1xcdFxcdCAgICAgIC5mdW5jID0gc3JjdV9kZWZlcl9kcmFpbiB9LFxcdFxcdFxcdFxcXFxcXG4gXFx0X19TUkNVX0RFUF9NQVBfSU5JVChuYW1lKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gfVxcbiBcXG5AQCAtMTMxLDEwICsxMzgsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3luY2hyb25pemVfc3JjdV9leHBlZGl0ZWQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXFxuIFxcdHN5bmNocm9uaXplX3NyY3Uoc3NwKTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG4te1xcbi1cXHRzeW5jaHJvbml6ZV9zcmN1KHNzcCk7XFxuLX1cXG4rdm9pZCBzcmN1X2JhcnJpZXIoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApO1xcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIHNyY3VfZXhwZWRpdGVfY3VycmVudChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCkgeyB9XFxuICNkZWZpbmUgc3JjdV9jaGVja19yZWFkX2ZsYXZvcihzc3AsIHJlYWRfZmxhdm9yKSBkbyB7IH0gd2hpbGUgKDApXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3JjdXRyZWUuaCBiL2luY2x1ZGUvbGludXgvc3JjdXRyZWUuaFxcbmluZGV4IDc1ZTU0ZTRmOTYzZmEuLjA5YTljOGY0YTZkMjQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zcmN1dHJlZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zcmN1dHJlZS5oXFxuQEAgLTEzLDYgKzEzLDggQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yY3Vfbm9kZV90cmVlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21wbGV0aW9uLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcnFfd29ya190eXBlcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGxpc3QuaFxcdTAwM2VcXG4gXFxuIHN0cnVjdCBzcmN1X25vZGU7XFxuIHN0cnVjdCBzcmN1X3N0cnVjdDtcXG5AQCAtNDEsNiArNDMsOSBAQCBzdHJ1Y3Qgc3JjdV9kYXRhIHtcXG4gXFx0Ym9vbCBzcmN1X2NibGlzdF9pbnZva2luZztcXHRcXHQvKiBJbnZva2luZyB0aGVzZSBDQnM/ICovXFxuIFxcdHN0cnVjdCB0aW1lcl9saXN0IGRlbGF5X3dvcms7XFx0XFx0LyogRGVsYXkgZm9yIENCIGludm9raW5nICovXFxuIFxcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xcdFxcdC8qIENvbnRleHQgZm9yIENCIGludm9raW5nLiAqL1xcbitcXHRzdHJ1Y3QgbGxpc3RfaGVhZCBkZWZlcl9jYnM7XFx0XFx0LyogQ2FsbGJhY2tzIGRlZmVycmVkIG9uIHJlLWVudHJ5LiAqL1xcbitcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSBkZWZlcl9saW5rO1xcdFxcdC8qIExpbmtzIG9udG8gdGhlIHBlci1DUFUgZGVmZXJyYWwgZHJhaW4gbGlzdCAqL1xcbitcXHRib29sIGRlZmVyX2V4cDtcXHRcXHRcXHRcXHQvKiBBIGRlZmVycmVkIGNhbGxiYWNrIGFza2VkIHRvIGV4cGVkaXRlLiAqL1xcbiBcXHRzdHJ1Y3QgcmN1X2hlYWQgc3JjdV9iYXJyaWVyX2hlYWQ7XFx0LyogRm9yIHNyY3VfYmFycmllcigpIHVzZS4gKi9cXG4gXFx0c3RydWN0IHJjdV9oZWFkIHNyY3VfZWNfaGVhZDtcXHRcXHQvKiBGb3Igc3JjdV9leHBlZGl0ZV9jdXJyZW50KCkgdXNlLiAqL1xcbiBcXHRpbnQgc3JjdV9lY19zdGF0ZTtcXHRcXHRcXHQvKiAgU3RhdGUgZm9yIHNyY3VfZXhwZWRpdGVfY3VycmVudCgpLiAqL1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L0tjb25maWcgYi9rZXJuZWwvcmN1L0tjb25maWdcXG5pbmRleCAzMzJkZjdhN2E2MzQ3Li5iYzk0ODNjMGI1ZDg0IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9yY3UvS2NvbmZpZ1xcbisrKyBiL2tlcm5lbC9yY3UvS2NvbmZpZ1xcbkBAIC0xNzUsNiArMTc1LDEyIEBAIGNvbmZpZyBSQ1VfU1RBTExfQ09NTU9OXFxuIGNvbmZpZyBSQ1VfTkVFRF9TRUdDQkxJU1RcXG4gXFx0ZGVmX2Jvb2wgKCBUUkVFX1JDVSB8fCBUUkVFX1NSQ1UgfHwgVEFTS1NfUkNVX0dFTkVSSUMgKVxcbiBcXG4rIyBUaGUgZGVmZXJyYWwgKGFuZCB0aGUgSVJRX1dPUksgaXQgdXNlcykgaXMgb25seSBuZWVkZWQgd2hlcmUgY2FsbF9yY3UoKSAvXFxuKyMgY2FsbF9zcmN1KCkgY2FuIGJlIGludm9rZWQgd2hpbGUgYSBjYWxsYmFjay1saXN0IG9wZXJhdGlvbiBpcyBpbiBmbGlnaHQuXFxuK2NvbmZpZyBSQ1VfREVGRVJcXG4rXFx0ZGVmX2Jvb2wgSEFWRV9OTUkgfHwgS1BST0JFUyB8fCBGVU5DVElPTl9UUkFDRVIgfHwgVFJBQ0VQT0lOVFNcXG4rXFx0c2VsZWN0IElSUV9XT1JLXFxuK1xcbiBjb25maWcgUkNVX0ZBTk9VVFxcbiBcXHRpbnQgXFxcIlRyZWUtYmFzZWQgaGllcmFyY2hpY2FsIFJDVSBmYW5vdXQgdmFsdWVcXFwiXFxuIFxcdHJhbmdlIDIgNjQgaWYgNjRCSVRcXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9yY3UuaCBiL2tlcm5lbC9yY3UvcmN1LmhcXG5pbmRleCAzOWE5ZjZmYTlhN2IyLi44NGQ3NGNkNWEzNTFjIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9yY3UvcmN1LmhcXG4rKysgYi9rZXJuZWwvcmN1L3JjdS5oXFxuQEAgLTU3Miw2ICs1NzIsMjQgQEAgc3RhdGljIGlubGluZSB2b2lkIHRhc2tzX2NibGlzdF9pbml0X2dlbmVyaWModm9pZCkgeyB9XFxuICNkZWZpbmUgUkNVX1NDSEVEVUxFUl9JTklUXFx0MVxcbiAjZGVmaW5lIFJDVV9TQ0hFRFVMRVJfUlVOTklOR1xcdDJcXG4gXFxuKy8qXFxuKyAqIERlZmVyIGEgY2FsbF9yY3UoKS9jYWxsX3NyY3UoKSBjYWxsYmFjayByYXRoZXIgdGhhbiBlbnF1ZXVlIGl0IG5vdz8gIERlZmVyXFxuKyAqIHdoZW5ldmVyIGludGVycnVwdHMgYXJlIGRpc2FibGVkLCBzaW5jZSBhIGNhbGxiYWNrLWxpc3Qgb3BlcmF0aW9uIG1heSBiZSBpblxcbisgKiBmbGlnaHQgb24gdGhpcyBDUFUuICBOb3QgYmVmb3JlIHRoZSBzY2hlZHVsZXIgaXMgdXAsIHRob3VnaDogdGhhdCBjb3ZlcnNcXG4rICogZWFybHkgYm9vdCwgd2hlcmUgaXJxX3dvcmsgaXMgbm90IHlldCB1c2FibGUgYW5kIHJjdV9pbml0KCkgaXRzZWxmIGFscmVhZHlcXG4rICogY2FsbHMgY2FsbF9yY3UoKS5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfcmN1X2RlZmVyKHZvaWQpXFxuK3tcXG4rXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRyZXR1cm4gaXJxc19kaXNhYmxlZCgpIFxcdTAwMjZcXHUwMDI2IHJjdV9zY2hlZHVsZXJfYWN0aXZlICE9IFJDVV9TQ0hFRFVMRVJfSU5BQ1RJVkU7XFxuK31cXG4rXFxuKy8qIERyYWluIGFuIG91dGdvaW5nIENQVSdzIGRlZmVycmVkIFNSQ1UgY2FsbGJhY2tzOyBzZWUgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcygpLiAqL1xcbit2b2lkIHNyY3Vfb2ZmbGluZV9kcmFpbihpbnQgY3B1KTtcXG4rXFxuIGVudW0gcmN1dG9ydHVyZV90eXBlIHtcXG4gXFx0UkNVX0ZMQVZPUixcXG4gXFx0UkNVX1RBU0tTX0ZMQVZPUixcXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9yY3V0b3J0dXJlLmMgYi9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuY1xcbmluZGV4IDc5NDkzN2UxM2U3YzMuLmE4NGU3MjVlODA2NTYgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3JjdS9yY3V0b3J0dXJlLmNcXG4rKysgYi9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuY1xcbkBAIC00OCw2ICs0OCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC90aWNrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yY3VwZGF0ZV90cmFjZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbm1pLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wZXJmX2V2ZW50LmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwicmN1LmhcXFwiXFxuIFxcbkBAIC0xMTUsNiArMTE2LDcgQEAgdG9ydHVyZV9wYXJhbShpbnQsIGxlYWtwb2ludGVyLCAwLCBcXFwiTGVhayBwb2ludGVyIGRlcmVmZXJlbmNlcyBmcm9tIHJlYWRlcnNcXFwiKTtcXG4gdG9ydHVyZV9wYXJhbShpbnQsIG5fYmFycmllcl9jYnMsIDAsIFxcXCIjIG9mIGNhbGxiYWNrcy9rdGhyZWFkcyBmb3IgYmFycmllciB0ZXN0aW5nXFxcIik7XFxuIHRvcnR1cmVfcGFyYW0oaW50LCBuX3VwX2Rvd24sIDMyLCBcXFwiIyBvZiBjb25jdXJyZW50IHVwL2Rvd24gaHJ0aW1lci1iYXNlZCBSQ1UgcmVhZGVyc1xcXCIpO1xcbiB0b3J0dXJlX3BhcmFtKGludCwgbmZha2V3cml0ZXJzLCA0LCBcXFwiTnVtYmVyIG9mIFJDVSBmYWtlIHdyaXRlciB0aHJlYWRzXFxcIik7XFxuK3RvcnR1cmVfcGFyYW0oYm9vbCwgbm1pX2NhbGxzLCB0cnVlLCBcXFwiRXhlcmNpc2UgLVxcdTAwM2VjYWxsKCkgZnJvbSBOTUkgb24gbm1pX2NhcGFibGUgZmxhdm9yc1xcXCIpO1xcbiB0b3J0dXJlX3BhcmFtKGludCwgbnJlYWRlcnMsIC0xLCBcXFwiTnVtYmVyIG9mIFJDVSByZWFkZXIgdGhyZWFkc1xcXCIpO1xcbiB0b3J0dXJlX3BhcmFtKGJvb2wsIG53cml0ZXJzLCAxLCBcXFwiTnVtYmVyIG9mIFJDVSB3cml0ZXIgdGhyZWFkcyAoMCBvciAxKVxcXCIpO1xcbiB0b3J0dXJlX3BhcmFtKGludCwgb2JqZWN0X2RlYnVnLCAwLCBcXFwiRW5hYmxlIGRlYnVnLW9iamVjdCBkb3VibGUgY2FsbF9yY3UoKSB0ZXN0aW5nXFxcIik7XFxuQEAgLTIxNiw2ICsyMTgsOCBAQCBzdGF0aWMgbG9uZyBuX3JjdV90b3J0dXJlX2Jvb3N0X2ZhaWx1cmU7XFxuIHN0YXRpYyBsb25nIG5fcmN1X3RvcnR1cmVfYm9vc3RzO1xcbiBzdGF0aWMgYXRvbWljX2xvbmdfdCBuX3JjdV90b3J0dXJlX3RpbWVycztcXG4gc3RhdGljIGF0b21pY19sb25nX3Qgbl9yY3VfdG9ydHVyZV9pcnFzO1xcbitzdGF0aWMgYXRvbWljX2xvbmdfdCBuX3JjdV90b3J0dXJlX25taV9jYWxsO1xcbitzdGF0aWMgYXRvbWljX2xvbmdfdCBuX3JjdV90b3J0dXJlX25taV9jYjtcXG4gc3RhdGljIGxvbmcgbl9iYXJyaWVyX2F0dGVtcHRzO1xcbiBzdGF0aWMgbG9uZyBuX2JhcnJpZXJfc3VjY2Vzc2VzOyAvKiBkaWQgcmN1X2JhcnJpZXIgdGVzdCBzdWNjZWVkPyAqL1xcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBuX3JlYWRfZXhpdHM7XFxuQEAgLTQzMyw2ICs0MzcsNyBAQCBzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzIHtcXG4gXFx0Ym9vbCAoKmlzX3Rhc2tfcmN1X2Jvb3N0ZWQpKHZvaWQpO1xcbiBcXHRsb25nIGNiZmxvb2RfbWF4O1xcbiBcXHRpbnQgaXJxX2NhcGFibGU7XFxuK1xcdGludCBubWlfY2FwYWJsZTtcXG4gXFx0aW50IGNhbl9ib29zdDtcXG4gXFx0aW50IGV4dGVuZGFibGVzO1xcbiBcXHRpbnQgc2xvd19ncHM7XFxuQEAgLTY0OCw2ICs2NTMsNyBAQCBzdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlX29wcyByY3Vfb3BzID0ge1xcbiBcXHQuZXh0ZW5kYWJsZXNcXHRcXHQ9IFJDVVRPUlRVUkVfTUFYX0VYVEVORCxcXG4gXFx0LmRlYnVnX29iamVjdHNcXHRcXHQ9IDEsXFxuIFxcdC5zdGFydF9wb2xsX2lycXNvZmZcXHQ9IDEsXFxuK1xcdC5ubWlfY2FwYWJsZVxcdFxcdD0gMSxcXG4gXFx0Lm5hbWVcXHRcXHRcXHQ9IFxcXCJyY3VcXFwiXFxuIH07XFxuIFxcbkBAIC05NDIsNiArOTQ4LDcgQEAgc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgc3JjdV9vcHMgPSB7XFxuIFxcdC5kZWJ1Z19vYmplY3RzXFx0PSAxLFxcbiBcXHQuaGF2ZV91cF9kb3duXFx0PSBJU19FTkFCTEVEKENPTkZJR19USU5ZX1NSQ1UpXFxuIFxcdFxcdFxcdFxcdD8gMCA6IFNSQ1VfUkVBRF9GTEFWT1JfTk9STUFMIHwgU1JDVV9SRUFEX0ZMQVZPUl9GQVNUX1VQRE9XTixcXG4rXFx0Lm5taV9jYXBhYmxlXFx0PSAxLFxcbiBcXHQubmFtZVxcdFxcdD0gXFxcInNyY3VcXFwiXFxuIH07XFxuIFxcbkBAIC0xMDA1LDYgKzEwMTIsNyBAQCBzdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlX29wcyBzcmN1ZF9vcHMgPSB7XFxuIFxcdC5kZWJ1Z19vYmplY3RzXFx0PSAxLFxcbiBcXHQuaGF2ZV91cF9kb3duXFx0PSBJU19FTkFCTEVEKENPTkZJR19USU5ZX1NSQ1UpXFxuIFxcdFxcdFxcdFxcdD8gMCA6IFNSQ1VfUkVBRF9GTEFWT1JfTk9STUFMIHwgU1JDVV9SRUFEX0ZMQVZPUl9GQVNUX1VQRE9XTixcXG4rXFx0Lm5taV9jYXBhYmxlXFx0PSAxLFxcbiBcXHQubmFtZVxcdFxcdD0gXFxcInNyY3VkXFxcIlxcbiB9O1xcbiBcXG5AQCAtMTI2OSw2ICsxMjc3LDcgQEAgc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgdGFza3NfdHJhY2luZ19vcHMgPSB7XFxuIFxcdC5jYmZsb29kX21heFxcdD0gNTAwMDAsXFxuIFxcdC5pcnFfY2FwYWJsZVxcdD0gMSxcXG4gXFx0LnNsb3dfZ3BzXFx0PSAxLFxcbitcXHQubm1pX2NhcGFibGVcXHQ9IDEsXFxuIFxcdC5uYW1lXFx0XFx0PSBcXFwidGFza3MtdHJhY2luZ1xcXCJcXG4gfTtcXG4gXFxuQEAgLTI2NTksMTIgKzI2NjgsMTMxIEBAIHN0YXRpYyBib29sIHJjdV90b3J0dXJlX29uZV9yZWFkKHN0cnVjdCB0b3J0dXJlX3JhbmRvbV9zdGF0ZSAqdHJzcCwgbG9uZyBteWlkKVxcbiBcXG4gc3RhdGljIERFRklORV9UT1JUVVJFX1JBTkRPTV9QRVJDUFUocmN1X3RvcnR1cmVfdGltZXJfcmFuZCk7XFxuIFxcbisvKlxcbisgKiBFeGVyY2lzZSAtXFx1MDAzZWNhbGwoKSBmcm9tIE5NSSBjb250ZXh0IGZvciBmbGF2b3JzIHRoYXQgc2V0IC1cXHUwMDNlbm1pX2NhcGFibGUuICBBXFxuKyAqIHBlci1DUFUgaGFyZHdhcmUgcGVyZiBjb3VudGVyIG92ZXJmbG93cyBpbnRvIGFuIE5NSSwgYW5kIGl0cyBoYW5kbGVyIHN1Ym1pdHNcXG4rICogb25lIHByZWFsbG9jYXRlZCBjYWxsYmFjayB2aWEgLVxcdTAwM2VjYWxsKCkuICBPbmUgY2FsbGJhY2sgaXMgaW4gZmxpZ2h0IGF0IGEgdGltZVxcbisgKiAoZ3VhcmRlZCBieSBhbiBhdG9taWMpIHRvIGF2b2lkIGFsbG9jYXRpbmcgaW4gTk1JLiAgVGhpcyBtaXJyb3JzIGhvdyBhIEJQRlxcbisgKiBwcm9ncmFtIHJlYWNoZXMgLVxcdTAwM2VjYWxsKCkgZnJvbSBOTUkuXFxuKyAqL1xcbisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTXFxuK3N0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIHJjdV90b3J0dXJlX25taV9hdHRyID0ge1xcbitcXHQudHlwZVxcdFxcdD0gUEVSRl9UWVBFX0hBUkRXQVJFLFxcbitcXHQuY29uZmlnXFx0XFx0PSBQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVMsXFxuK1xcdC5zaXplXFx0XFx0PSBzaXplb2Yoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciksXFxuK1xcdC5waW5uZWRcXHRcXHQ9IDEsXFxuK1xcdC5kaXNhYmxlZFxcdD0gMSxcXG4rXFx0LmZyZXFcXHRcXHQ9IDEsXFxuK1xcdC5zYW1wbGVfZnJlcVxcdD0gMTAwLFxcbit9O1xcbitcXG4rLyogT25lIGluLWZsaWdodCBjYWxsYmFjayBwZXIgQ1BVOyAtXFx1MDAzZWludXNlIGlzIHJlbGVhc2VkIGJ5IHRoZSBjYWxsYmFjay4gKi9cXG4rc3RydWN0IHJjdV90b3J0dXJlX25taV9jYnMge1xcbitcXHRzdHJ1Y3QgcmN1X2hlYWQgcmg7XFxuK1xcdGF0b21pY190IGludXNlO1xcbit9O1xcbitcXG4rc3RhdGljIHN0cnVjdCBwZXJmX2V2ZW50ICoqcmN1X3RvcnR1cmVfbm1pX2V2ZW50cztcXG4rc3RhdGljIGludCByY3VfdG9ydHVyZV9ubWlfaHBfc3RhdGU7XFxuK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcmN1X3RvcnR1cmVfbm1pX2NicywgcmN1X3RvcnR1cmVfbm1pX2Nicyk7XFxuK1xcbitzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfY2Ioc3RydWN0IHJjdV9oZWFkICpyaHApXFxuK3tcXG4rXFx0c3RydWN0IHJjdV90b3J0dXJlX25taV9jYnMgKnJ0bmNwID0gY29udGFpbmVyX29mKHJocCwgc3RydWN0IHJjdV90b3J0dXJlX25taV9jYnMsIHJoKTtcXG4rXFxuK1xcdGF0b21pY19sb25nX2luYyhcXHUwMDI2bl9yY3VfdG9ydHVyZV9ubWlfY2IpO1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZydG5jcC1cXHUwMDNlaW51c2UsIDApO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfb3ZlcmZsb3coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbit7XFxuK1xcdHN0cnVjdCByY3VfdG9ydHVyZV9ubWlfY2JzICpydG5jcCA9IHRoaXNfY3B1X3B0cihcXHUwMDI2cmN1X3RvcnR1cmVfbm1pX2Nicyk7XFxuK1xcbitcXHRpZiAoIWluX25taSgpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdGlmIChjdXJfb3BzLVxcdTAwM2VjYWxsIFxcdTAwMjZcXHUwMDI2ICFhdG9taWNfeGNoZyhcXHUwMDI2cnRuY3AtXFx1MDAzZWludXNlLCAxKSkge1xcbitcXHRcXHRhdG9taWNfbG9uZ19pbmMoXFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NhbGwpO1xcbitcXHRcXHRjdXJfb3BzLVxcdTAwM2VjYWxsKFxcdTAwMjZydG5jcC1cXHUwMDNlcmgsIHJjdV90b3J0dXJlX25taV9jYik7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludCByY3VfdG9ydHVyZV9ubWlfb25saW5lKHVuc2lnbmVkIGludCBjcHUpXFxuK3tcXG4rXFx0c3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50O1xcbitcXG4rXFx0ZXZlbnQgPSBwZXJmX2V2ZW50X2NyZWF0ZV9rZXJuZWxfY291bnRlcihcXHUwMDI2cmN1X3RvcnR1cmVfbm1pX2F0dHIsIGNwdSwgTlVMTCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IHJjdV90b3J0dXJlX25taV9vdmVyZmxvdywgTlVMTCk7XFxuK1xcdGlmIChJU19FUlIoZXZlbnQpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmN1X3RvcnR1cmVfbm1pX2V2ZW50c1tjcHVdID0gZXZlbnQ7XFxuK1xcdHBlcmZfZXZlbnRfZW5hYmxlKGV2ZW50KTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmN1X3RvcnR1cmVfbm1pX29mZmxpbmUodW5zaWduZWQgaW50IGNwdSlcXG4re1xcbitcXHRzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSByY3VfdG9ydHVyZV9ubWlfZXZlbnRzW2NwdV07XFxuK1xcbitcXHRpZiAoZXZlbnQpIHtcXG4rXFx0XFx0cmN1X3RvcnR1cmVfbm1pX2V2ZW50c1tjcHVdID0gTlVMTDtcXG4rXFx0XFx0cGVyZl9ldmVudF9kaXNhYmxlKGV2ZW50KTtcXG4rXFx0XFx0cGVyZl9ldmVudF9yZWxlYXNlX2tlcm5lbChldmVudCk7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qXFxuKyAqIERyaXZlIHRoZSBjb3VudGVycyBmcm9tIENQVS1ob3RwbHVnIGNhbGxiYWNrcyBzbyB0aGF0IGNvdmVyYWdlIHN1cnZpdmVzIHRoZVxcbisgKiBvbm9mZiB0ZXN0aW5nIHRoYXQgbW9zdCBzY2VuYXJpb3MgcnVuLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2luaXQodm9pZClcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCFubWlfY2FsbHMgfHwgIWN1cl9vcHMtXFx1MDAzZW5taV9jYXBhYmxlIHx8ICFjdXJfb3BzLVxcdTAwM2VjYWxsKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdHJjdV90b3J0dXJlX25taV9ldmVudHMgPSBrY2FsbG9jKG5yX2NwdV9pZHMsIHNpemVvZigqcmN1X3RvcnR1cmVfbm1pX2V2ZW50cyksXFxuK1xcdFxcdFxcdFxcdFxcdCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFyY3VfdG9ydHVyZV9ubWlfZXZlbnRzKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdHJldCA9IGNwdWhwX3NldHVwX3N0YXRlKENQVUhQX0FQX09OTElORV9EWU4sIFxcXCJyY3V0b3J0dXJlL25taTpvbmxpbmVcXFwiLFxcbitcXHRcXHRcXHRcXHRyY3VfdG9ydHVyZV9ubWlfb25saW5lLCByY3VfdG9ydHVyZV9ubWlfb2ZmbGluZSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGtmcmVlKHJjdV90b3J0dXJlX25taV9ldmVudHMpO1xcbitcXHRcXHRyY3VfdG9ydHVyZV9ubWlfZXZlbnRzID0gTlVMTDtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcdHJjdV90b3J0dXJlX25taV9ocF9zdGF0ZSA9IHJldDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2NsZWFudXAodm9pZClcXG4re1xcbitcXHRpZiAoIXJjdV90b3J0dXJlX25taV9ldmVudHMpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0aWYgKHJjdV90b3J0dXJlX25taV9ocF9zdGF0ZSBcXHUwMDNlIDApIHtcXG4rXFx0XFx0Y3B1aHBfcmVtb3ZlX3N0YXRlKHJjdV90b3J0dXJlX25taV9ocF9zdGF0ZSk7XFxuK1xcdFxcdHJjdV90b3J0dXJlX25taV9ocF9zdGF0ZSA9IDA7XFxuK1xcdH1cXG4rXFx0a2ZyZWUocmN1X3RvcnR1cmVfbm1pX2V2ZW50cyk7XFxuK1xcdHJjdV90b3J0dXJlX25taV9ldmVudHMgPSBOVUxMO1xcbitcXHRpZiAoIWF0b21pY19sb25nX3JlYWQoXFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NhbGwpKVxcbitcXHRcXHRwcl9hbGVydChcXFwiJXM6IG5taV9jYWxscyBzZXQgYnV0IG5vIC1cXHUwMDNlY2FsbCgpIGlzc3VlZCBmcm9tIE5NSTogbm90IHN1cHBvcnRlZCBoZXJlLlxcXFxuXFxcIixcXG4rXFx0XFx0XFx0IF9fZnVuY19fKTtcXG4rfVxcbisjZWxzZSAvKiAjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTICovXFxuK3N0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9pbml0KHZvaWQpIHsgfVxcbitzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfY2xlYW51cCh2b2lkKSB7IH1cXG4rI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMgKi9cXG4rXFxuIC8qXFxuICAqIFJDVSB0b3J0dXJlIHJlYWRlciBmcm9tIHRpbWVyIGhhbmRsZXIuICBEZXJlZmVyZW5jZXMgcmN1X3RvcnR1cmVfY3VycmVudCxcXG4gICogaW5jcmVtZW50aW5nIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgb2YgdGhlIHBpcGVsaW5lIGFycmF5LiAgVGhlXFxuICAqIGNvdW50ZXIgaW4gdGhlIGVsZW1lbnQgc2hvdWxkIG5ldmVyIGJlIGdyZWF0ZXIgdGhhbiAxLCBvdGhlcndpc2UsIHRoZVxcbiAgKiBSQ1UgaW1wbGVtZW50YXRpb24gaXMgYnJva2VuLlxcbiAgKi9cXG4rXFxuIHN0YXRpYyB2b2lkIHJjdV90b3J0dXJlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp1bnVzZWQpXFxuIHtcXG4gXFx0V0FSTl9PTl9PTkNFKCFpbl9zZXJ2aW5nX3NvZnRpcnEoKSk7XFxuQEAgLTMwNDcsNiArMzE3NSw5IEBAIHJjdV90b3J0dXJlX3N0YXRzX3ByaW50KHZvaWQpXFxuIFxcdFxcdGRhdGFfcmFjZShuX2JhcnJpZXJfYXR0ZW1wdHMpLFxcbiBcXHRcXHRkYXRhX3JhY2Uobl9yY3VfdG9ydHVyZV9iYXJyaWVyX2Vycm9yKSk7XFxuIFxcdHByX2NvbnQoXFxcInJlYWQtZXhpdHM6ICVsZCBcXFwiLCBkYXRhX3JhY2Uobl9yZWFkX2V4aXRzKSk7IC8vIFN0YXRpc3RpYy5cXG4rXFx0cHJfY29udChcXFwibm1pLWNhbGxzOiAlbGQgbm1pLWNiczogJWxkIFxcXCIsXFxuK1xcdFxcdGF0b21pY19sb25nX3JlYWQoXFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NhbGwpLFxcbitcXHRcXHRhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYikpO1xcbiBcXHRwcl9jb250KFxcXCJub2NiLXRvZ2dsZXM6ICVsZDolbGQgXFxcIixcXG4gXFx0XFx0YXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bl9ub2NiX29mZmxvYWQpLCBhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZuX25vY2JfZGVvZmZsb2FkKSk7XFxuIFxcdHByX2NvbnQoXFxcImdwd3JhcHM6ICVsZFxcXFxuXFxcIiwgbl9ncHdyYXBzKTtcXG5AQCAtMzE5NSw3ICszMzI2LDcgQEAgcmN1X3RvcnR1cmVfcHJpbnRfbW9kdWxlX3Bhcm1zKHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgKmN1cl9vcHMsIGNvbnN0IGNoYXIgKnRhZylcXG4gXFx0XFx0IFxcXCJyZWFkX2V4aXRfZGVsYXk9JWQgcmVhZF9leGl0X2J1cnN0PSVkIFxcXCJcXG4gXFx0XFx0IFxcXCJyZWFkZXJfZmxhdm9yPSV4IFxcXCJcXG4gXFx0XFx0IFxcXCJub2Nic19udGhyZWFkcz0lZCBub2Nic190b2dnbGU9JWQgXFxcIlxcbi1cXHRcXHQgXFxcInRlc3Rfbm1pcz0lZCBcXFwiXFxuK1xcdFxcdCBcXFwidGVzdF9ubWlzPSVkIG5taV9jYWxscz0lZCBcXFwiXFxuIFxcdFxcdCBcXFwicHJlZW1wdF9kdXJhdGlvbj0lZCBwcmVlbXB0X2ludGVydmFsPSVkIG5fdXBfZG93bj0lZFxcXFxuXFxcIixcXG4gXFx0XFx0IHRvcnR1cmVfdHlwZSwgdGFnLCBucmVhbHJlYWRlcnMsIG53cml0ZXJzLCBucmVhbGZha2V3cml0ZXJzLFxcbiBcXHRcXHQgc3RhdF9pbnRlcnZhbCwgdmVyYm9zZSwgdGVzdF9ub19pZGxlX2h6LCBzaHVmZmxlX2ludGVydmFsLFxcbkBAIC0zMjA5LDcgKzMzNDAsNyBAQCByY3VfdG9ydHVyZV9wcmludF9tb2R1bGVfcGFybXMoc3RydWN0IHJjdV90b3J0dXJlX29wcyAqY3VyX29wcywgY29uc3QgY2hhciAqdGFnKVxcbiBcXHRcXHQgcmVhZF9leGl0X2RlbGF5LCByZWFkX2V4aXRfYnVyc3QsXFxuIFxcdFxcdCByZWFkZXJfZmxhdm9yLFxcbiBcXHRcXHQgbm9jYnNfbnRocmVhZHMsIG5vY2JzX3RvZ2dsZSxcXG4tXFx0XFx0IHRlc3Rfbm1pcyxcXG4rXFx0XFx0IHRlc3Rfbm1pcywgbm1pX2NhbGxzLFxcbiBcXHRcXHQgcHJlZW1wdF9kdXJhdGlvbiwgcHJlZW1wdF9pbnRlcnZhbCwgbl91cF9kb3duKTtcXG4gfVxcbiBcXG5AQCAtNDI4Myw2ICs0NDE0LDcgQEAgcmN1X3RvcnR1cmVfY2xlYW51cCh2b2lkKVxcbiBcXHRpbnQgaTtcXG4gXFxuIFxcdGlmICh0b3J0dXJlX2NsZWFudXBfYmVnaW4oKSkge1xcbitcXHRcXHRyY3VfdG9ydHVyZV9ubWlfY2xlYW51cCgpO1xcbiBcXHRcXHRpZiAoY3VyX29wcy1cXHUwMDNlY2JfYmFycmllciAhPSBOVUxMKSB7XFxuIFxcdFxcdFxcdHByX2luZm8oXFxcIiVzOiBJbnZva2luZyAlcFMoKS5cXFxcblxcXCIsIF9fZnVuY19fLCBjdXJfb3BzLVxcdTAwM2VjYl9iYXJyaWVyKTtcXG4gXFx0XFx0XFx0Y3VyX29wcy1cXHUwMDNlY2JfYmFycmllcigpO1xcbkBAIC00MzI1LDYgKzQ0NTcsOCBAQCByY3VfdG9ydHVyZV9jbGVhbnVwKHZvaWQpXFxuIFxcdFxcdGtmcmVlKHJlYWRlcl90YXNrcyk7XFxuIFxcdFxcdHJlYWRlcl90YXNrcyA9IE5VTEw7XFxuIFxcdH1cXG4rXFx0LyogRGlzYWJsZSB0aGUgcGVyZiBjb3VudGVycyAoYW5kIHRodXMgdGhlIE5NSSAtXFx1MDAzZWNhbGwoKSBmaXJpbmcpIG5vdy4gKi9cXG4rXFx0cmN1X3RvcnR1cmVfbm1pX2NsZWFudXAoKTtcXG4gXFx0a2ZyZWUocmN1X3RvcnR1cmVfcmVhZGVyX21iY2hrKTtcXG4gXFx0cmN1X3RvcnR1cmVfcmVhZGVyX21iY2hrID0gTlVMTDtcXG4gXFxuQEAgLTQzNTQsNiArNDQ4OCwyMCBAQCByY3VfdG9ydHVyZV9jbGVhbnVwKHZvaWQpXFxuIFxcdFxcdHByX2luZm8oXFxcIiVzOiBJbnZva2luZyAlcFMoKS5cXFxcblxcXCIsIF9fZnVuY19fLCBjdXJfb3BzLVxcdTAwM2VjYl9iYXJyaWVyKTtcXG4gXFx0XFx0Y3VyX29wcy1cXHUwMDNlY2JfYmFycmllcigpO1xcbiBcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBjYl9iYXJyaWVyKCkgYWJvdmUgZHJhaW5lZCBldmVyeSBkZWZlcnJlZCBOTUkgLVxcdTAwM2VjYWxsKCkgY2FsbGJhY2ssIHNvIHRoZVxcbitcXHQgKiBjb3VudCBpc3N1ZWQgZnJvbSBOTUkgbXVzdCBlcXVhbCB0aGUgY291bnQgaW52b2tlZDsgYSBtaXNtYXRjaCBtZWFucyBhXFxuK1xcdCAqIGNhbGxiYWNrIHdhcyBsb3N0LlxcbitcXHQgKi9cXG4rXFx0aWYgKGF0b21pY19sb25nX3JlYWQoXFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NhbGwpICE9XFxuK1xcdCAgICBhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYikpIHtcXG4rXFx0XFx0cHJfYWxlcnQoXFxcIiVzOiBOTUkgLVxcdTAwM2VjYWxsKCkgbG9zdCBhIGNhbGxiYWNrOiBpc3N1ZWQgJWxkIGludm9rZWQgJWxkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgX19mdW5jX18sIGF0b21pY19sb25nX3JlYWQoXFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NhbGwpLFxcbitcXHRcXHRcXHQgYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bl9yY3VfdG9ydHVyZV9ubWlfY2IpKTtcXG4rXFx0XFx0YXRvbWljX2luYyhcXHUwMDI2bl9yY3VfdG9ydHVyZV9lcnJvcik7XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChjdXJfb3BzLVxcdTAwM2VjbGVhbnVwICE9IE5VTEwpXFxuIFxcdFxcdGN1cl9vcHMtXFx1MDAzZWNsZWFudXAoKTtcXG4gXFxuQEAgLTQ3ODYsNiArNDkzNCw4IEBAIHJjdV90b3J0dXJlX2luaXQodm9pZClcXG4gXFx0XFx0Zmlyc3RlcnIgPSAtRU5PTUVNO1xcbiBcXHRcXHRnb3RvIHVud2luZDtcXG4gXFx0fVxcbitcXHQvKiBBcm0gdGhlIHBlci1DUFUgcGVyZiBjb3VudGVycyB0aGF0IGRyaXZlIC1cXHUwMDNlY2FsbCgpIGZyb20gTk1JLiAqL1xcbitcXHRyY3VfdG9ydHVyZV9ubWlfaW5pdCgpO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJlYWxyZWFkZXJzOyBpKyspIHtcXG4gXFx0XFx0cmN1X3RvcnR1cmVfcmVhZGVyX21iY2hrW2ldLnJ0Y19jaGtyZHIgPSAtMTtcXG4gXFx0XFx0Zmlyc3RlcnIgPSB0b3J0dXJlX2NyZWF0ZV9rdGhyZWFkKHJjdV90b3J0dXJlX3JlYWRlciwgKHZvaWQgKilpLFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3NyY3V0aW55LmMgYi9rZXJuZWwvcmN1L3NyY3V0aW55LmNcXG5pbmRleCA1NThiYThkMzE2ZGI2Li43YTdjMWNlZjQzZTEzIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9yY3Uvc3JjdXRpbnkuY1xcbisrKyBiL2tlcm5lbC9yY3Uvc3JjdXRpbnkuY1xcbkBAIC0xMCw2ICsxMCw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcnFfd29yay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGxpc3QuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L211dGV4LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcmVlbXB0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yY3VwZGF0ZV93YWl0LmhcXHUwMDNlXFxuQEAgLTI5LDYgKzMwLDggQEAgZXh0ZXJuIGludCByY3Vfc2NoZWR1bGVyX2FjdGl2ZTtcXG4gc3RhdGljIExJU1RfSEVBRChzcmN1X2Jvb3RfbGlzdCk7XFxuIHN0YXRpYyBib29sIHNyY3VfaW5pdF9kb25lO1xcbiBcXG4rc3RhdGljIHZvaWQgX19zcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBib29sIGd1YXJkKTtcXG4rXFxuIHN0YXRpYyBpbnQgaW5pdF9zcmN1X3N0cnVjdF9maWVsZHMoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXFxuIHtcXG4gXFx0c3NwLVxcdTAwM2VzcmN1X2xvY2tfbmVzdGluZ1swXSA9IDA7XFxuQEAgLTQzLDYgKzQ2LDggQEAgc3RhdGljIGludCBpbml0X3NyY3Vfc3RydWN0X2ZpZWxkcyhzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG4gXFx0SU5JVF9XT1JLKFxcdTAwMjZzc3AtXFx1MDAzZXNyY3Vfd29yaywgc3JjdV9kcml2ZV9ncCk7XFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZzc3AtXFx1MDAzZXNyY3Vfd29yay5lbnRyeSk7XFxuIFxcdGluaXRfaXJxX3dvcmsoXFx1MDAyNnNzcC1cXHUwMDNlc3JjdV9pcnFfd29yaywgc3JjdV90aW55X2lycV93b3JrKTtcXG4rXFx0aW5pdF9sbGlzdF9oZWFkKFxcdTAwMjZzc3AtXFx1MDAzZWRlZmVyX2Nicyk7XFxuK1xcdHNzcC1cXHUwMDNlZGVmZXJfaXcgPSBJUlFfV09SS19JTklUX0hBUkQoc3JjdV9kZWZlcl9kcmFpbik7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC04Niw2ICs5MSwxMSBAQCBFWFBPUlRfU1lNQk9MX0dQTChpbml0X3NyY3Vfc3RydWN0X2dlbmVyaWMpO1xcbiB2b2lkIGNsZWFudXBfc3JjdV9zdHJ1Y3Qoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXFxuIHtcXG4gXFx0V0FSTl9PTihzcmN1X3JlYWRlcnNfYWN0aXZlKHNzcCkpO1xcbitcXHQvKiBSZS1pc3N1ZSBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzLCB0aGVuIHdhaXQgb3V0IC1cXHUwMDNlZGVmZXJfaXcgYmVmb3JlIGl0IGlzIGZyZWVkLiAqL1xcbitcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSkge1xcbitcXHRcXHRfX3NyY3VfZGVmZXJfZHJhaW4oc3NwLCBmYWxzZSk7XFxuK1xcdFxcdGlycV93b3JrX3N5bmMoXFx1MDAyNnNzcC1cXHUwMDNlZGVmZXJfaXcpO1xcbitcXHR9XFxuIFxcdGlycV93b3JrX3N5bmMoXFx1MDAyNnNzcC1cXHUwMDNlc3JjdV9pcnFfd29yayk7XFxuIFxcdGZsdXNoX3dvcmsoXFx1MDAyNnNzcC1cXHUwMDNlc3JjdV93b3JrKTtcXG4gXFx0V0FSTl9PTihzc3AtXFx1MDAzZXNyY3VfZ3BfcnVubmluZyk7XFxuQEAgLTIxMywxMSArMjIzLDExIEBAIHN0YXRpYyB2b2lkIHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxcbiB9XFxuIFxcbiAvKlxcbi0gKiBFbnF1ZXVlIGFuIFNSQ1UgY2FsbGJhY2sgb24gdGhlIHNwZWNpZmllZCBzcmN1X3N0cnVjdCBzdHJ1Y3R1cmUsXFxuLSAqIGluaXRpYXRpbmcgZ3JhY2UtcGVyaW9kIHByb2Nlc3NpbmcgaWYgaXQgaXMgbm90IGFscmVhZHkgcnVubmluZy5cXG4rICogRW5xdWV1ZSBAcmhwIG9uIHRoZSBjYWxsYmFjayBsaXN0LiAgQWxzbyBjYWxsZWQgYnkgc3JjdV9kZWZlcl9kcmFpbigpIHRvXFxuKyAqIHJlLWlzc3VlIGEgZGVmZXJyZWQgY2FsbGJhY2ssIHNvIGl0IG11c3Qgbm90IHJlLWNoZWNrIHRoZSBkZWZlcnJhbCBjb25kaXRpb24uXFxuICAqL1xcbi12b2lkIGNhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsXFxuLVxcdCAgICAgICByY3VfY2FsbGJhY2tfdCBmdW5jKVxcbitzdGF0aWMgdm9pZCBzcmN1X2RvX2VucXVldWUoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxcbitcXHRcXHRcXHQgICAgcmN1X2NhbGxiYWNrX3QgZnVuYylcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXG5AQCAtMjMxLDYgKzI0MSw1OCBAQCB2b2lkIGNhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsXFxuIFxcdHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHNzcCk7XFxuIFxcdHByZWVtcHRfZW5hYmxlKCk7XFxuIH1cXG4rXFxuKy8qIFNldCB3aGlsZSBzcmN1X2RlZmVyX2RyYWluKCkgcmUtaXNzdWVzLCB0byBjYXRjaCBhIHJlLWVudHJhbnQgY2FsbF9zcmN1KCkuICovXFxuK3N0YXRpYyBib29sIHNyY3VfZGVmZXJfZHJhaW5pbmc7XFxuK1xcbitzdGF0aWMgdm9pZCBfX3NyY3VfZGVmZXJfZHJhaW4oc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIGJvb2wgZ3VhcmQpXFxuK3tcXG4rXFx0c3RydWN0IGxsaXN0X25vZGUgKm5vZGUsICpuZXh0O1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXG4rXFx0LyogQ2FsbGJhY2tzIGFyZSB1bm9yZGVyZWQsIHNvIGRyYWluIGluIGxsaXN0IG9yZGVyIHdpdGhvdXQgcmV2ZXJzaW5nLiAqL1xcbitcXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XFxuK1xcdGlmIChndWFyZClcXG4rXFx0XFx0V1JJVEVfT05DRShzcmN1X2RlZmVyX2RyYWluaW5nLCB0cnVlKTtcXG4rXFx0bGxpc3RfZm9yX2VhY2hfc2FmZShub2RlLCBuZXh0LCBsbGlzdF9kZWxfYWxsKFxcdTAwMjZzc3AtXFx1MDAzZWRlZmVyX2NicykpIHtcXG4rXFx0XFx0c3RydWN0IHJjdV9oZWFkICpyaHAgPSAoc3RydWN0IHJjdV9oZWFkICopbm9kZTtcXG4rXFxuK1xcdFxcdHJocC1cXHUwMDNlbmV4dCA9IE5VTEw7XFxuK1xcdFxcdHNyY3VfZG9fZW5xdWV1ZShzc3AsIHJocCwgcmhwLVxcdTAwM2VmdW5jKTtcXG4rXFx0fVxcbitcXHRpZiAoZ3VhcmQpXFxuK1xcdFxcdFdSSVRFX09OQ0Uoc3JjdV9kZWZlcl9kcmFpbmluZywgZmFsc2UpO1xcbitcXHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XFxuK31cXG4rXFxuKy8qIE9ubHkgdGhlIGlycV93b3JrIGRyYWluIGNhbiBiZSByZS1mZWQgYnkgaXRzIG93biByZS1pc3N1ZTsgc2VlIFRyZWUgU1JDVS4gKi9cXG4rdm9pZCBzcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpXFxuK3tcXG4rXFx0X19zcmN1X2RlZmVyX2RyYWluKGNvbnRhaW5lcl9vZihpdywgc3RydWN0IHNyY3Vfc3RydWN0LCBkZWZlcl9pdyksIHRydWUpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHNyY3VfZGVmZXJfZHJhaW4pO1xcbitcXG4rdm9pZCBjYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxcbitcXHQgICAgICAgcmN1X2NhbGxiYWNrX3QgZnVuYylcXG4re1xcbitcXHRpZiAoc2hvdWxkX3JjdV9kZWZlcigpKSB7XFxuK1xcdFxcdC8qIEEgcmUtZW50cmFudCBjYWxsX3NyY3UoKSBkdXJpbmcgdGhlIGRyYWluIHdvdWxkIGxpdmVsb2NrIGl0LiAqL1xcbitcXHRcXHRpZiAoUkVBRF9PTkNFKHNyY3VfZGVmZXJfZHJhaW5pbmcpIFxcdTAwMjZcXHUwMDI2ICFpbl9ubWkoKSkge1xcbitcXHRcXHRcXHRXQVJOX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSxcXG4rXFx0XFx0XFx0XFx0ICBcXFwiY2FsbF9zcmN1KCkgcmUtZW50ZXJlZCBkdXJpbmcgY2FsbGJhY2sgZHJhaW47IGxlYWtpbmcgY2FsbGJhY2tcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmhwLVxcdTAwM2VmdW5jID0gZnVuYztcXG4rXFx0XFx0aWYgKGxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKilyaHAsIFxcdTAwMjZzc3AtXFx1MDAzZWRlZmVyX2NicykpXFxuK1xcdFxcdFxcdGlycV93b3JrX3F1ZXVlKFxcdTAwMjZzc3AtXFx1MDAzZWRlZmVyX2l3KTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHQvKiBBbiBOTUkgcmVhY2hpbmcgaGVyZSBlbnRlcmVkIHdpdGggaXJxcyBlbmFibGVkLCBzbyB0aGUgZW5xdWV1ZSBjYW4gcmFjZS4gKi9cXG4rXFx0V0FSTl9PTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSkgXFx1MDAyNlxcdTAwMjYgaW5fbm1pKCkpO1xcbitcXG4rXFx0c3JjdV9kb19lbnF1ZXVlKHNzcCwgcmhwLCBmdW5jKTtcXG4rfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChjYWxsX3NyY3UpO1xcbiBcXG4gLypcXG5AQCAtMjYwLDYgKzMyMiwxNSBAQCB2b2lkIHN5bmNocm9uaXplX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfc3JjdSk7XFxuIFxcbisvKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzLCB0aGVuIHdhaXQgZm9yIGFsbCBpbi1mbGlnaHQgb25lcy4gKi9cXG4rdm9pZCBzcmN1X2JhcnJpZXIoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXFxuK3tcXG4rXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpXFxuK1xcdFxcdF9fc3JjdV9kZWZlcl9kcmFpbihzc3AsIGZhbHNlKTtcXG4rXFx0c3luY2hyb25pemVfc3JjdShzc3ApO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHNyY3VfYmFycmllcik7XFxuK1xcbiAvKlxcbiAgKiBnZXRfc3RhdGVfc3luY2hyb25pemVfc3JjdSAtIFByb3ZpZGUgYW4gZW5kLW9mLWdyYWNlLXBlcmlvZCBjb29raWVcXG4gICovXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3Uvc3JjdXRyZWUuYyBiL2tlcm5lbC9yY3Uvc3JjdXRyZWUuY1xcbmluZGV4IDMwNDExMjY3NGU4YTIuLjM1ZmZhY2U1MWQ1MGIgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3JjdS9zcmN1dHJlZS5jXFxuKysrIGIva2VybmVsL3JjdS9zcmN1dHJlZS5jXFxuQEAgLTIwLDYgKzIwLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BlcmNwdS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJlZW1wdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaXJxX3dvcmsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xsaXN0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yY3VwZGF0ZV93YWl0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc21wLmhcXHUwMDNlXFxuQEAgLTc5LDYgKzgwLDQ1IEBAIHN0YXRpYyB2b2lkIHByb2Nlc3Nfc3JjdShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbiBzdGF0aWMgdm9pZCBzcmN1X2lycV93b3JrKHN0cnVjdCBpcnFfd29yayAqd29yayk7XFxuIHN0YXRpYyB2b2lkIHNyY3VfZGVsYXlfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xcbiBcXG4rc3RydWN0IHNyY3VfZGVmZXI7XFxuK3N0YXRpYyB2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdyk7XFxuK3N0YXRpYyB2b2lkIF9fc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3Qgc3JjdV9kZWZlciAqc25kcCwgYm9vbCBndWFyZCk7XFxuK1xcbisvKlxcbisgKiBQZXItQ1BVIGNhbGxfc3JjdSgpIGRlZmVycmFsIHN0YXRlLCBzaGFyZWQgYnkgZXZlcnkgc3JjdV9zdHJ1Y3QuICBBIGRlZmVycmVkXFxuKyAqIGNhbGxiYWNrIGlzIHN0YWdlZCBvbiBpdHMgc3JjdV9kYXRhJ3MgLVxcdTAwM2VkZWZlcl9jYnM7IHRoYXQgc3JjdV9kYXRhIGlzIGNoYWluZWRcXG4rICogdmlhIC1cXHUwMDNlZGVmZXJfbGluayBvbnRvIC1cXHUwMDNlbGlzdCwgd2hpY2ggdGhlIGlycV93b3JrIHdhbGtzLlxcbisgKi9cXG4rc3RydWN0IHNyY3VfZGVmZXIge1xcbitcXHRzdHJ1Y3QgbGxpc3RfaGVhZFxcdGxpc3Q7XFxuK1xcdHN0cnVjdCBpcnFfd29ya1xcdFxcdGl3O1xcbitcXHRyYXdfc3BpbmxvY2tfdFxcdFxcdGxvY2s7XFxuK1xcdGJvb2xcXHRcXHRcXHRkcmFpbmluZztcXG4rfTtcXG4rXFxuK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc3JjdV9kZWZlciwgc3JjdV9kZWZlcikgPSB7XFxuK1xcdC5sb2NrID0gX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VEKHNyY3VfZGVmZXIubG9jayksXFxuK1xcdC5pdyA9IElSUV9XT1JLX0lOSVRfSEFSRChzcmN1X2RlZmVyX2RyYWluKSxcXG4rfTtcXG4rXFxuKy8qXFxuKyAqIEZsdXNoIHBlbmRpbmcgZGVmZXJyZWQgY2FsbGJhY2tzIHNvIGEgZm9sbG93aW5nIHNyY3VfYmFycmllcigpIHdhaXRzIGZvciB0aGVtLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgc3JjdV9kZWZlcl9mbHVzaCh2b2lkKVxcbit7XFxuK1xcdGludCBjcHU7XFxuK1xcbitcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcXG4rXFx0XFx0c3RydWN0IHNyY3VfZGVmZXIgKnNuZHAgPSBcXHUwMDI2cGVyX2NwdShzcmN1X2RlZmVyLCBjcHUpO1xcbitcXG4rXFx0XFx0aWYgKCFsbGlzdF9lbXB0eShcXHUwMDI2c25kcC1cXHUwMDNlbGlzdCkpXFxuK1xcdFxcdFxcdF9fc3JjdV9kZWZlcl9kcmFpbihzbmRwLCBmYWxzZSk7XFxuK1xcdH1cXG4rfVxcbitcXG4gLypcXG4gICogSW5pdGlhbGl6ZSBTUkNVIHBlci1DUFUgZGF0YS4gIE5vdGUgdGhhdCBzdGF0aWNhbGx5IGFsbG9jYXRlZFxcbiAgKiBzcmN1X3N0cnVjdCBzdHJ1Y3R1cmVzIG1pZ2h0IGFscmVhZHkgaGF2ZSBzcmN1X3JlYWRfbG9jaygpIGFuZFxcbkBAIC0xMDcsNiArMTQ3LDExIEBAIHN0YXRpYyB2b2lkIGluaXRfc3JjdV9zdHJ1Y3RfZGF0YShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG4gXFx0XFx0c2RwLVxcdTAwM2VjcHUgPSBjcHU7XFxuIFxcdFxcdElOSVRfV09SSyhcXHUwMDI2c2RwLVxcdTAwM2V3b3JrLCBzcmN1X2ludm9rZV9jYWxsYmFja3MpO1xcbiBcXHRcXHR0aW1lcl9zZXR1cChcXHUwMDI2c2RwLVxcdTAwM2VkZWxheV93b3JrLCBzcmN1X2RlbGF5X3RpbWVyLCAwKTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogLVxcdTAwM2VkZWZlcl9jYnMsIC1cXHUwMDNlZGVmZXJfbGluayBhbmQgLVxcdTAwM2VkZWZlcl9leHAgYXJlIHZhbGlkIHdoZW4gemVyb2VkXFxuK1xcdFxcdCAqIGFuZCBhcmUgbm90IHJlaW5pdGlhbGl6ZWQgaGVyZSwgbGVzdCB3ZSBjbG9iYmVyIGNhbGxiYWNrcyBhXFxuK1xcdFxcdCAqIHJlZW50cmFudCBjYWxsX3NyY3UoKSBhbHJlYWR5IHN0YWdlZC4gIFNlZSBfX2NhbGxfc3JjdSgpLlxcbitcXHRcXHQgKi9cXG4gXFx0XFx0c2RwLVxcdTAwM2Vzc3AgPSBzc3A7XFxuIFxcdH1cXG4gfVxcbkBAIC02OTUsNyArNzQwLDEyIEBAIHZvaWQgY2xlYW51cF9zcmN1X3N0cnVjdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG4gXFx0XFx0cmV0dXJuOyAvKiBKdXN0IGxlYWsgaXQhICovXFxuIFxcdGlmIChXQVJOX09OKHNyY3VfcmVhZGVyc19hY3RpdmUoc3NwKSkpXFxuIFxcdFxcdHJldHVybjsgLyogSnVzdCBsZWFrIGl0ISAqL1xcbi1cXHQvKiBXYWl0IGZvciBpcnFfd29yayB0byBmaW5pc2ggZmlyc3QgYXMgaXQgbWF5IHF1ZXVlIGEgbmV3IHdvcmsuICovXFxuK1xcdC8qXFxuK1xcdCAqIERyYWluIGRlZmVycmVkIGNhbGxiYWNrcyBiZWZvcmUgc3luY2luZyAtXFx1MDAzZWlycV93b3JrOiByZS1pc3N1aW5nIG9uZSBjYW5cXG4rXFx0ICogc3RhcnQgYSBncmFjZSBwZXJpb2QgYW5kIHJlLXF1ZXVlIC1cXHUwMDNlaXJxX3dvcmssIHdoaWNoIHRoZW4gc2NoZWR1bGVzXFxuK1xcdCAqIC1cXHUwMDNld29yaywgc28gYm90aCBtdXN0IGJlIHdhaXRlZCBvdXQgYWZ0ZXIgdGhlIGRyYWluLlxcbitcXHQgKi9cXG4rXFx0c3JjdV9kZWZlcl9mbHVzaCgpO1xcbiBcXHRpcnFfd29ya19zeW5jKFxcdTAwMjZzdXAtXFx1MDAzZWlycV93b3JrKTtcXG4gXFx0Zmx1c2hfZGVsYXllZF93b3JrKFxcdTAwMjZzdXAtXFx1MDAzZXdvcmspO1xcbiBcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XFxuQEAgLTE0MTAsOCArMTQ2MCw4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLFxcbiAgKiBzcmN1X3JlYWRfbG9jaygpLCBhbmQgc3JjdV9yZWFkX3VubG9jaygpIHRoYXQgYXJlIGFsbCBwYXNzZWQgdGhlIHNhbWVcXG4gICogc3JjdV9zdHJ1Y3Qgc3RydWN0dXJlLlxcbiAgKi9cXG4tc3RhdGljIHZvaWQgX19jYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxcbi1cXHRcXHRcXHRyY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGRvX25vcm0pXFxuK3N0YXRpYyB2b2lkIHNyY3VfZG9fZW5xdWV1ZShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsXFxuK1xcdFxcdFxcdCAgICByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGRvX25vcm0pXFxuIHtcXG4gXFx0aWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKHJocCkpIHtcXG4gXFx0XFx0LyogUHJvYmFibGUgZG91YmxlIGNhbGxfc3JjdSgpLCBzbyBsZWFrIHRoZSBjYWxsYmFjay4gKi9cXG5AQCAtMTQyMyw2ICsxNDczLDExMSBAQCBzdGF0aWMgdm9pZCBfX2NhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsXFxuIFxcdCh2b2lkKXNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHNzcCwgcmhwLCBkb19ub3JtKTtcXG4gfVxcbiBcXG4rLypcXG4rICogVGhlIHNyY3VfY2JsaXN0IGFuZCBzcmN1X25vZGUgdHJlZSBhcmUgb25seSBhY2Nlc3NlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWRcXG4rICogKHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKCkgZW5xdWV1ZXMgdW5kZXIgcmF3X3NwaW5fbG9ja19pcnFzYXZlKCkgYW5kIG1heSB3YWxrXFxuKyAqIHRoZSB0cmVlKS4gIExpa2UgY2FsbF9yY3UoKSwgX19jYWxsX3NyY3UoKSBkZWZlcnMgd2hlbiBpbnRlcnJ1cHRzIGFyZSBhbHJlYWR5XFxuKyAqIGRpc2FibGVkLCBzbyBhIHJlLWVudHJhbnQgY2FsbF9zcmN1KCkgLS0gZS5nLiBjYWxsX3JjdV90YXNrc190cmFjZSgpIGZyb20gYVxcbisgKiBCUEYgcHJvZ3JhbSAtLSBjYW5ub3QgY29ycnVwdCB0aGUgbGlzdCBvciBkZWFkbG9jay5cXG4rICovXFxuK3N0YXRpYyB2b2lkIF9fY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcXG4rXFx0XFx0XFx0cmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBkb19ub3JtKVxcbit7XFxuK1xcdGlmIChzaG91bGRfcmN1X2RlZmVyKCkpIHtcXG4rXFx0XFx0c3RydWN0IHNyY3VfZGVmZXIgKnNuZHAgPSB0aGlzX2NwdV9wdHIoXFx1MDAyNnNyY3VfZGVmZXIpO1xcbitcXHRcXHRzdHJ1Y3Qgc3JjdV9kYXRhICpzZHA7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBJbnN0cnVtZW50YXRpb24gb24gdGhlIGVucXVldWUgcGF0aCBjYW4gcmUtZW50ZXIgaGVyZSBmcm9tXFxuK1xcdFxcdCAqIGluc2lkZSBzcmN1X2RlZmVyX2RyYWluKCkuICBSZS1xdWV1aW5nIHdvdWxkIGxpdmVsb2NrIHRoZVxcbitcXHRcXHQgKiBkcmFpbiwgc28gZHJvcCB0aGUgY2FsbGJhY2s7IGFuIE5NSSBjYW5ub3QgbG9vcCwgc28gbGV0IGl0IGluLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKFJFQURfT05DRShzbmRwLVxcdTAwM2VkcmFpbmluZykgXFx1MDAyNlxcdTAwMjYgIWluX25taSgpKSB7XFxuK1xcdFxcdFxcdFdBUk5fT05DRShJU19FTkFCTEVEKENPTkZJR19QUk9WRV9SQ1UpLFxcbitcXHRcXHRcXHRcXHQgIFxcXCJjYWxsX3NyY3UoKSByZS1lbnRlcmVkIGR1cmluZyBjYWxsYmFjayBkcmFpbjsgbGVha2luZyBjYWxsYmFja1xcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0fVxcbitcXHRcXHRzZHAgPSB0aGlzX2NwdV9wdHIoc3NwLVxcdTAwM2VzZGEpO1xcbitcXHRcXHRyaHAtXFx1MDAzZWZ1bmMgPSBmdW5jO1xcbitcXHRcXHRpZiAoIWRvX25vcm0pXFxuK1xcdFxcdFxcdFdSSVRFX09OQ0Uoc2RwLVxcdTAwM2VkZWZlcl9leHAsIHRydWUpO1xcbitcXHRcXHRpZiAobGxpc3RfYWRkKChzdHJ1Y3QgbGxpc3Rfbm9kZSAqKXJocCwgXFx1MDAyNnNkcC1cXHUwMDNlZGVmZXJfY2JzKSkge1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBDaGFpbiB0aGlzIHNyY3VfZGF0YSBmb3IgdGhlIGRyYWluLiAgLVxcdTAwM2Vzc3AgbXVzdCBiZVxcbitcXHRcXHRcXHQgKiBwdWJsaXNoZWQgaGVyZTogZGVmZXJyYWwgc2tpcHMgY2hlY2tfaW5pdF9zcmN1X3N0cnVjdCgpLFxcbitcXHRcXHRcXHQgKiBzbyBvbiBhIG5ldmVyLWluaXRpYWxpemVkIHN0YXRpYyBzcmN1X3N0cnVjdCB0aGVcXG4rXFx0XFx0XFx0ICogc3RhdGljYWxseSB6ZXJvZWQgLVxcdTAwM2VzZGEgc3RpbGwgaGFzIGEgTlVMTCAtXFx1MDAzZXNzcC5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdHNkcC1cXHUwMDNlc3NwID0gc3NwO1xcbitcXHRcXHRcXHRpZiAobGxpc3RfYWRkKFxcdTAwMjZzZHAtXFx1MDAzZWRlZmVyX2xpbmssIFxcdTAwMjZzbmRwLVxcdTAwM2VsaXN0KSlcXG4rXFx0XFx0XFx0XFx0aXJxX3dvcmtfcXVldWUoXFx1MDAyNnNuZHAtXFx1MDAzZWl3KTtcXG4rXFx0XFx0fVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdC8qIEFuIE5NSSByZWFjaGluZyBoZXJlIGVudGVyZWQgd2l0aCBpcnFzIGVuYWJsZWQsIHNvIHRoZSBlbnF1ZXVlIGNhbiByYWNlLiAqL1xcbitcXHRXQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSBcXHUwMDI2XFx1MDAyNiBpbl9ubWkoKSk7XFxuK1xcbitcXHRzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIGZ1bmMsIGRvX25vcm0pO1xcbit9XFxuK1xcbisvKlxcbisgKiBSZS1pc3N1ZSBkZWZlcnJlZCBjYWxsYmFja3Mgc3RyYWlnaHQgdG8gc3JjdV9kb19lbnF1ZXVlKCkgc28gdGhleSBjYW5ub3QgZGVmZXJcXG4rICogYWdhaW4uICAtXFx1MDAzZWxvY2sgc2VyaWFsaXplcyB0aGUgZHJhaW5lcnM6IHRoZSBpcnFfd29yaywgc3JjdV9kZWZlcl9mbHVzaCgpIGFuZFxcbisgKiBzcmN1X29mZmxpbmVfZHJhaW4oKS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIF9fc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3Qgc3JjdV9kZWZlciAqc25kcCwgYm9vbCBndWFyZClcXG4re1xcbitcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqc25vZGUsICpzbmV4dDtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFxuK1xcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2c25kcC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRpZiAoZ3VhcmQpXFxuK1xcdFxcdFdSSVRFX09OQ0Uoc25kcC1cXHUwMDNlZHJhaW5pbmcsIHRydWUpO1xcbitcXHRsbGlzdF9mb3JfZWFjaF9zYWZlKHNub2RlLCBzbmV4dCwgbGxpc3RfZGVsX2FsbChcXHUwMDI2c25kcC1cXHUwMDNlbGlzdCkpIHtcXG4rXFx0XFx0c3RydWN0IHNyY3VfZGF0YSAqc2RwID0gY29udGFpbmVyX29mKHNub2RlLCBzdHJ1Y3Qgc3JjdV9kYXRhLCBkZWZlcl9saW5rKTtcXG4rXFx0XFx0c3RydWN0IHNyY3Vfc3RydWN0ICpzc3AgPSBzZHAtXFx1MDAzZXNzcDtcXG4rXFx0XFx0c3RydWN0IGxsaXN0X25vZGUgKmNub2RlLCAqY25leHQ7XFxuK1xcdFxcdGJvb2wgZG9fbm9ybTtcXG4rXFxuK1xcdFxcdGNub2RlID0gbGxpc3RfZGVsX2FsbChcXHUwMDI2c2RwLVxcdTAwM2VkZWZlcl9jYnMpO1xcbitcXHRcXHRkb19ub3JtID0gIVJFQURfT05DRShzZHAtXFx1MDAzZWRlZmVyX2V4cCk7XFxuK1xcdFxcdGlmICghZG9fbm9ybSlcXG4rXFx0XFx0XFx0V1JJVEVfT05DRShzZHAtXFx1MDAzZWRlZmVyX2V4cCwgZmFsc2UpO1xcbitcXHRcXHRsbGlzdF9mb3JfZWFjaF9zYWZlKGNub2RlLCBjbmV4dCwgY25vZGUpIHtcXG4rXFx0XFx0XFx0c3RydWN0IHJjdV9oZWFkICpyaHAgPSAoc3RydWN0IHJjdV9oZWFkICopY25vZGU7XFxuK1xcbitcXHRcXHRcXHRyaHAtXFx1MDAzZW5leHQgPSBOVUxMO1xcbitcXHRcXHRcXHRzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIHJocC1cXHUwMDNlZnVuYywgZG9fbm9ybSk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRpZiAoZ3VhcmQpXFxuK1xcdFxcdFdSSVRFX09OQ0Uoc25kcC1cXHUwMDNlZHJhaW5pbmcsIGZhbHNlKTtcXG4rXFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnNuZHAtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rfVxcbitcXG4rLypcXG4rICogT25seSB0aGUgaXJxX3dvcmsgZHJhaW4gY2FuIGJlIHJlLWZlZCBieSBpdHMgb3duIHJlLWlzc3VlLCBzbyBvbmx5IGl0IHNldHNcXG4rICogLVxcdTAwM2VkcmFpbmluZy4gIEEgZGlyZWN0IGRyYWluIHJlLWlzc3VlcyBvbnRvIHRoaXMgQ1BVLCBhbmQgYW55dGhpbmcgc3RhZ2VkXFxuKyAqIGR1cmluZyBpdCBpcyBwaWNrZWQgdXAgYnkgdGhhdCBDUFUncyBvd24gaXJxX3dvcmsuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBzcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpXFxuK3tcXG4rXFx0X19zcmN1X2RlZmVyX2RyYWluKGNvbnRhaW5lcl9vZihpdywgc3RydWN0IHNyY3VfZGVmZXIsIGl3KSwgdHJ1ZSk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIERyYWluIEBjcHUncyBkZWZlcnJlZCBjYWxsX3NyY3UoKSBjYWxsYmFja3MgZnJvbSByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKClcXG4rICogb25jZSBAY3B1IGlzIGRlYWQuICBPbmUgcGFzcyBjb3ZlcnMgZXZlcnkgc3JjdV9zdHJ1Y3QsIGFuZCB0aGUgcmUtaXNzdWUgbGFuZHNcXG4rICogb24gdGhlIGN1cnJlbnQgQ1BVLlxcbisgKi9cXG4rdm9pZCBzcmN1X29mZmxpbmVfZHJhaW4oaW50IGNwdSlcXG4re1xcbitcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0X19zcmN1X2RlZmVyX2RyYWluKFxcdTAwMjZwZXJfY3B1KHNyY3VfZGVmZXIsIGNwdSksIGZhbHNlKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIGNhbGxfc3JjdSgpIC0gUXVldWUgYSBjYWxsYmFjayBmb3IgaW52b2NhdGlvbiBhZnRlciBhbiBTUkNVIGdyYWNlIHBlcmlvZFxcbiAgKiBAc3NwOiBzcmN1X3N0cnVjdCBpbiBxdWV1ZSB0aGUgY2FsbGJhY2tcXG5AQCAtMTY3Nyw5ICsxODMyLDE3IEBAIHZvaWQgc3JjdV9iYXJyaWVyKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxcbiB7XFxuIFxcdGludCBjcHU7XFxuIFxcdGludCBpZHg7XFxuLVxcdHVuc2lnbmVkIGxvbmcgcyA9IHJjdV9zZXFfc25hcChcXHUwMDI2c3NwLVxcdTAwM2VzcmN1X3N1cC1cXHUwMDNlc3JjdV9iYXJyaWVyX3NlcSk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgcztcXG4gXFxuIFxcdGNoZWNrX2luaXRfc3JjdV9zdHJ1Y3Qoc3NwKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFJlZ2lzdGVyIGFueSBkZWZlcnJlZCBjYWxsYmFja3MgYmVmb3JlIHNuYXBzaG90dGluZyB0aGUgc2VxdWVuY2UuICBUaGVcXG4rXFx0ICogc2hhcmVkIGlycV93b3JrIG1heSBhbHNvIGRyYWluIG90aGVyIHNyY3Vfc3RydWN0cycsIHdoaWNoIGlzIGhhcm1sZXNzLlxcbitcXHQgKi9cXG4rXFx0c3JjdV9kZWZlcl9mbHVzaCgpO1xcbitcXG4rXFx0cyA9IHJjdV9zZXFfc25hcChcXHUwMDI2c3NwLVxcdTAwM2VzcmN1X3N1cC1cXHUwMDNlc3JjdV9iYXJyaWVyX3NlcSk7XFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNnNzcC1cXHUwMDNlc3JjdV9zdXAtXFx1MDAzZXNyY3VfYmFycmllcl9tdXRleCk7XFxuIFxcdGlmIChyY3Vfc2VxX2RvbmUoXFx1MDAyNnNzcC1cXHUwMDNlc3JjdV9zdXAtXFx1MDAzZXNyY3VfYmFycmllcl9zZXEsIHMpKSB7XFxuIFxcdFxcdHNtcF9tYigpOyAvKiBGb3JjZSBvcmRlcmluZyBmb2xsb3dpbmcgcmV0dXJuLiAqL1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3RpbnkuYyBiL2tlcm5lbC9yY3UvdGlueS5jXFxuaW5kZXggZGNjY2NkNmJlOTQxMS4uYmFmZmU2NjAwNDNmNSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvcmN1L3RpbnkuY1xcbisrKyBiL2tlcm5lbC9yY3UvdGlueS5jXFxuQEAgLTExLDYgKzExLDggQEBcXG4gICovXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21wbGV0aW9uLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbnRlcnJ1cHQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lycV93b3JrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9sbGlzdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbm90aWZpZXIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JjdXBkYXRlX3dhaXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbkBAIC00Miw4ICs0NCw5OSBAQCBzdGF0aWMgc3RydWN0IHJjdV9jdHJsYmxrIHJjdV9jdHJsYmxrID0ge1xcbiBcXHQuZ3Bfc2VxXFx0XFx0PSAwIC0gMzAwVUwsXFxuIH07XFxuIFxcbisvKlxcbisgKiBUaGUgY2FsbGJhY2sgbGlzdCBpcyBvbmx5IGFjY2Vzc2VkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCwgc28gYSBjYWxsX3JjdSgpXFxuKyAqIHRoYXQgYXJyaXZlcyB3aXRoIGludGVycnVwdHMgb2ZmIHN0YWdlcyB0aGUgY2FsbGJhY2sgb24gYSBsb2NrbGVzcyBsaXN0IHRoYXRcXG4rICogYW4gaXJxX3dvcmsgcmUtaXNzdWVzIGxhdGVyLiAgT25lIGdsb2JhbCBsaXN0IGFuZCBpcnFfd29yayBzdWZmaWNlLCBhcyBUaW55XFxuKyAqIFJDVSBpcyB1bmlwcm9jZXNzb3IuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCByY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdyk7XFxuK3N0YXRpYyBMTElTVF9IRUFEKHJjdV9kZWZlcl9saXN0KTtcXG4rc3RhdGljIHN0cnVjdCBpcnFfd29yayByY3VfZGVmZXJfaXcgPSBJUlFfV09SS19JTklUX0hBUkQocmN1X2RlZmVyX2RyYWluKTtcXG4rc3RhdGljIGJvb2wgcmN1X2RlZmVyX2RyYWluaW5nO1xcbitcXG4rLypcXG4rICogRW5xdWV1ZSBAaGVhZCBvbiB0aGUgY2FsbGJhY2sgbGlzdC4gIEFsc28gY2FsbGVkIGJ5IHJjdV9kZWZlcl9kcmFpbigpIHRvXFxuKyAqIHJlLWlzc3VlIGEgZGVmZXJyZWQgY2FsbGJhY2ssIHNvIGl0IG11c3Qgbm90IHJlLWNoZWNrIHRoZSBkZWZlcnJhbCBjb25kaXRpb24uXFxuKyAqL1xcbitzdGF0aWMgdm9pZCByY3VfZG9fZW5xdWV1ZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMpXFxuK3tcXG4rXFx0c3RhdGljIGF0b21pY190IGRvdWJsZWZyZWVzO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXG4rXFx0aWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKGhlYWQpKSB7XFxuK1xcdFxcdGlmIChhdG9taWNfaW5jX3JldHVybihcXHUwMDI2ZG91YmxlZnJlZXMpIFxcdTAwM2MgNCkge1xcbitcXHRcXHRcXHRwcl9lcnIoXFxcIiVzKCk6IERvdWJsZS1mcmVlZCBDQiAlcC1cXHUwMDNlJXBTKCkhISEgIFxcXCIsIF9fZnVuY19fLCBoZWFkLCBoZWFkLVxcdTAwM2VmdW5jKTtcXG4rXFx0XFx0XFx0bWVtX2R1bXBfb2JqKGhlYWQpO1xcbitcXHRcXHR9XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0aGVhZC1cXHUwMDNlZnVuYyA9IGZ1bmM7XFxuK1xcdGhlYWQtXFx1MDAzZW5leHQgPSBOVUxMO1xcbitcXG4rXFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xcbitcXHQqcmN1X2N0cmxibGsuY3VydGFpbCA9IGhlYWQ7XFxuK1xcdHJjdV9jdHJsYmxrLmN1cnRhaWwgPSBcXHUwMDI2aGVhZC1cXHUwMDNlbmV4dDtcXG4rXFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xcbitcXG4rXFx0aWYgKHVubGlrZWx5KGlzX2lkbGVfdGFzayhjdXJyZW50KSkpIHtcXG4rXFx0XFx0LyogZm9yY2Ugc2NoZWR1bGluZyBmb3IgcmN1X3FzKCkgKi9cXG4rXFx0XFx0cmVzY2hlZF9jcHUoMCk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgX19yY3VfZGVmZXJfZHJhaW4oYm9vbCBndWFyZClcXG4re1xcbitcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSwgKm5leHQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcbitcXHQvKiBDYWxsYmFja3MgYXJlIHVub3JkZXJlZCwgc28gZHJhaW4gaW4gbGxpc3Qgb3JkZXIgd2l0aG91dCByZXZlcnNpbmcuICovXFxuK1xcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcXG4rXFx0aWYgKGd1YXJkKVxcbitcXHRcXHRXUklURV9PTkNFKHJjdV9kZWZlcl9kcmFpbmluZywgdHJ1ZSk7XFxuK1xcdGxsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgbmV4dCwgbGxpc3RfZGVsX2FsbChcXHUwMDI2cmN1X2RlZmVyX2xpc3QpKSB7XFxuK1xcdFxcdHN0cnVjdCByY3VfaGVhZCAqaGVhZCA9IChzdHJ1Y3QgcmN1X2hlYWQgKilub2RlO1xcbitcXG4rXFx0XFx0aGVhZC1cXHUwMDNlbmV4dCA9IE5VTEw7XFxuK1xcdFxcdHJjdV9kb19lbnF1ZXVlKGhlYWQsIGhlYWQtXFx1MDAzZWZ1bmMpO1xcbitcXHR9XFxuK1xcdGlmIChndWFyZClcXG4rXFx0XFx0V1JJVEVfT05DRShyY3VfZGVmZXJfZHJhaW5pbmcsIGZhbHNlKTtcXG4rXFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xcbit9XFxuK1xcbisvKiBPbmx5IHRoZSBpcnFfd29yayBkcmFpbiBjYW4gYmUgcmUtZmVkIGJ5IGl0cyBvd24gcmUtaXNzdWU7IHNlZSBUcmVlIFJDVS4gKi9cXG4rc3RhdGljIHZvaWQgcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpXFxuK3tcXG4rXFx0X19yY3VfZGVmZXJfZHJhaW4odHJ1ZSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGNhbGxfcmN1X2RlZmVyKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYylcXG4re1xcbitcXHQvKiBBIHJlLWVudHJhbnQgY2FsbF9yY3UoKSBkdXJpbmcgdGhlIGRyYWluIHdvdWxkIGxpdmVsb2NrIGl0OyBkcm9wIGl0LiAqL1xcbitcXHRpZiAoUkVBRF9PTkNFKHJjdV9kZWZlcl9kcmFpbmluZykgXFx1MDAyNlxcdTAwMjYgIWluX25taSgpKSB7XFxuK1xcdFxcdFdBUk5fT05DRShJU19FTkFCTEVEKENPTkZJR19QUk9WRV9SQ1UpLFxcbitcXHRcXHRcXHQgIFxcXCJjYWxsX3JjdSgpIHJlLWVudGVyZWQgZHVyaW5nIGNhbGxiYWNrIGRyYWluOyBsZWFraW5nIGNhbGxiYWNrXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcdGhlYWQtXFx1MDAzZWZ1bmMgPSBmdW5jO1xcbitcXHRpZiAobGxpc3RfYWRkKChzdHJ1Y3QgbGxpc3Rfbm9kZSAqKWhlYWQsIFxcdTAwMjZyY3VfZGVmZXJfbGlzdCkpXFxuK1xcdFxcdGlycV93b3JrX3F1ZXVlKFxcdTAwMjZyY3VfZGVmZXJfaXcpO1xcbit9XFxuK1xcbisvKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIHNvIGEgZm9sbG93aW5nIHJjdV9iYXJyaWVyKCkgd2FpdHMgZm9yIHRoZW0uICovXFxuK3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9mbHVzaCh2b2lkKVxcbit7XFxuK1xcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRfX3JjdV9kZWZlcl9kcmFpbihmYWxzZSk7XFxuK31cXG4rXFxuIHZvaWQgcmN1X2JhcnJpZXIodm9pZClcXG4ge1xcbitcXHQvKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIGZpcnN0LiAqL1xcbitcXHRyY3VfZGVmZXJfZmx1c2goKTtcXG4gXFx0d2FpdF9yY3VfZ3AoY2FsbF9yY3VfaHVycnkpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0wocmN1X2JhcnJpZXIpO1xcbkBAIC0xNTcsMjkgKzI1MCwxNSBAQCBFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9yY3UpO1xcbiAgKi9cXG4gdm9pZCBjYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMpXFxuIHtcXG4tXFx0c3RhdGljIGF0b21pY190IGRvdWJsZWZyZWVzO1xcbi1cXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbi1cXG4tXFx0aWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKGhlYWQpKSB7XFxuLVxcdFxcdGlmIChhdG9taWNfaW5jX3JldHVybihcXHUwMDI2ZG91YmxlZnJlZXMpIFxcdTAwM2MgNCkge1xcbi1cXHRcXHRcXHRwcl9lcnIoXFxcIiVzKCk6IERvdWJsZS1mcmVlZCBDQiAlcC1cXHUwMDNlJXBTKCkhISEgIFxcXCIsIF9fZnVuY19fLCBoZWFkLCBoZWFkLVxcdTAwM2VmdW5jKTtcXG4tXFx0XFx0XFx0bWVtX2R1bXBfb2JqKGhlYWQpO1xcbi1cXHRcXHR9XFxuK1xcdGlmIChzaG91bGRfcmN1X2RlZmVyKCkpIHtcXG4rXFx0XFx0Y2FsbF9yY3VfZGVmZXIoaGVhZCwgZnVuYyk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4tXFx0aGVhZC1cXHUwMDNlZnVuYyA9IGZ1bmM7XFxuLVxcdGhlYWQtXFx1MDAzZW5leHQgPSBOVUxMO1xcbi1cXG4tXFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xcbi1cXHQqcmN1X2N0cmxibGsuY3VydGFpbCA9IGhlYWQ7XFxuLVxcdHJjdV9jdHJsYmxrLmN1cnRhaWwgPSBcXHUwMDI2aGVhZC1cXHUwMDNlbmV4dDtcXG4tXFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xcbitcXHQvKiBBbiBOTUkgcmVhY2hpbmcgaGVyZSBlbnRlcmVkIHdpdGggaXJxcyBlbmFibGVkLCBzbyB0aGUgZW5xdWV1ZSBjYW4gcmFjZS4gKi9cXG4rXFx0V0FSTl9PTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSkgXFx1MDAyNlxcdTAwMjYgaW5fbm1pKCkpO1xcbiBcXG4tXFx0aWYgKHVubGlrZWx5KGlzX2lkbGVfdGFzayhjdXJyZW50KSkpIHtcXG4tXFx0XFx0LyogZm9yY2Ugc2NoZWR1bGluZyBmb3IgcmN1X3FzKCkgKi9cXG4tXFx0XFx0cmVzY2hlZF9jcHUoMCk7XFxuLVxcdH1cXG4rXFx0cmN1X2RvX2VucXVldWUoaGVhZCwgZnVuYyk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoY2FsbF9yY3UpO1xcbiBcXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS90cmVlLmMgYi9rZXJuZWwvcmN1L3RyZWUuY1xcbmluZGV4IDk2ODQ4ZmMxZjAyYjguLmViNmIxMWNmYWQ0NmYgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3JjdS90cmVlLmNcXG4rKysgYi9rZXJuZWwvcmN1L3RyZWUuY1xcbkBAIC0yNCw2ICsyNCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JjdXBkYXRlX3dhaXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGxpc3QuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9kZWJ1Zy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbm1pLmhcXHUwMDNlXFxuQEAgLTMxNDgsMjEgKzMxNDksMjUgQEAgc3RhdGljIHZvaWQgY2hlY2tfY2Jfb3ZsZChzdHJ1Y3QgcmN1X2RhdGEgKnJkcClcXG4gXFx0cmF3X3NwaW5fdW5sb2NrX3JjdV9ub2RlKHJucCk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkXFxuLV9fY2FsbF9yY3VfY29tbW9uKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBsYXp5X2luKVxcbisvKlxcbisgKiBUaGUgY2FsbGJhY2sgbGlzdCBpcyBvbmx5IGFjY2Vzc2VkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCwgc28gYSBjYWxsX3JjdSgpXFxuKyAqIHRoYXQgYXJyaXZlcyB3aXRoIGludGVycnVwdHMgb2ZmIChzZWUgc2hvdWxkX3JjdV9kZWZlcigpKSBzdGFnZXMgdGhlIGNhbGxiYWNrXFxuKyAqIG9uIGEgcGVyLUNQVSBsbGlzdCB0aGF0IGFuIGlycV93b3JrIHJlLWlzc3VlcyBvbmNlIGludGVycnVwdHMgYXJlIG9uLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpO1xcbitcXG4rLypcXG4rICogRW5xdWV1ZSBAaGVhZCBvbiB0aGlzIENQVSdzIHJjdV9zZWdjYmxpc3QuICBBbHNvIGNhbGxlZCBieSByY3VfZGVmZXJfZHJhaW4oKVxcbisgKiB0byByZS1pc3N1ZSBhIGRlZmVycmVkIGNhbGxiYWNrLCBzbyBpdCBtdXN0IG5vdCByZS1jaGVjayB0aGUgZGVmZXJyYWxcXG4rICogY29uZGl0aW9uLiAgRWl0aGVyIGNhbGxlciBtYXkgaGF2ZSBpbnRlcnJ1cHRzIGFscmVhZHkgZGlzYWJsZWQuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCByY3VfZG9fZW5xdWV1ZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgbGF6eV9pbilcXG4ge1xcbiBcXHRzdGF0aWMgYXRvbWljX3QgZG91YmxlZnJlZXM7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcdGJvb2wgbGF6eTtcXG4gXFx0c3RydWN0IHJjdV9kYXRhICpyZHA7XFxuIFxcbi1cXHQvKiBNaXNhbGlnbmVkIHJjdV9oZWFkISAqL1xcbi1cXHRXQVJOX09OX09OQ0UoKHVuc2lnbmVkIGxvbmcpaGVhZCBcXHUwMDI2IChzaXplb2Yodm9pZCAqKSAtIDEpKTtcXG4tXFxuLVxcdC8qIEF2b2lkIE5VTEwgZGVyZWZlcmVuY2UgaWYgY2FsbGJhY2sgaXMgTlVMTC4gKi9cXG4tXFx0aWYgKFdBUk5fT05fT05DRSghZnVuYykpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuIFxcdGlmIChkZWJ1Z19yY3VfaGVhZF9xdWV1ZShoZWFkKSkge1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBQcm9iYWJsZSBkb3VibGUgY2FsbF9yY3UoKSwgc28gbGVhayB0aGUgY2FsbGJhY2suXFxuQEAgLTMyMDYsNiArMzIxMSwxMDQgQEAgX19jYWxsX3JjdV9jb21tb24oc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGxhenlfaW4pXFxuIFxcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcXG4gfVxcbiBcXG4rLypcXG4rICogUmUtaXNzdWUgZGVmZXJyZWQgY2FsbGJhY2tzIHN0cmFpZ2h0IHRvIHRoZSBlbnF1ZXVlIHNvIHRoZXkgY2Fubm90IGRlZmVyXFxuKyAqIGFnYWluLiAgLVxcdTAwM2VkZWZlcl9sb2NrIHNlcmlhbGl6ZXMgdGhlIGRyYWluZXJzOiB0aGlzIENQVSdzIGlycV93b3JrLFxcbisgKiByY3VfZGVmZXJfZmx1c2goKSBhbmQgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcygpLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgX19yY3VfZGVmZXJfZHJhaW4oc3RydWN0IHJjdV9kYXRhICpyZHAsIGJvb2wgZ3VhcmQpXFxuK3tcXG4rXFx0c3RydWN0IGxsaXN0X25vZGUgKm5vZGUsICpuZXh0O1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXG4rXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnJkcC1cXHUwMDNlZGVmZXJfbG9jaywgZmxhZ3MpO1xcbitcXHRpZiAoZ3VhcmQpXFxuK1xcdFxcdFdSSVRFX09OQ0UocmRwLVxcdTAwM2VkZWZlcl9kcmFpbmluZywgdHJ1ZSk7XFxuK1xcdGxsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgbmV4dCwgbGxpc3RfZGVsX2FsbChcXHUwMDI2cmRwLVxcdTAwM2VkZWZlcl9oZWFkKSkge1xcbitcXHRcXHRzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQgPSAoc3RydWN0IHJjdV9oZWFkICopbm9kZTtcXG4rXFxuK1xcdFxcdGhlYWQtXFx1MDAzZW5leHQgPSBOVUxMO1xcbitcXHRcXHRyY3VfZG9fZW5xdWV1ZShoZWFkLCBoZWFkLVxcdTAwM2VmdW5jLCBmYWxzZSk7XFxuK1xcdH1cXG4rXFx0aWYgKGd1YXJkKVxcbitcXHRcXHRXUklURV9PTkNFKHJkcC1cXHUwMDNlZGVmZXJfZHJhaW5pbmcsIGZhbHNlKTtcXG4rXFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnJkcC1cXHUwMDNlZGVmZXJfbG9jaywgZmxhZ3MpO1xcbit9XFxuK1xcbisvKlxcbisgKiBPbmx5IHRoZSBpcnFfd29yayBkcmFpbiBjYW4gYmUgcmUtZmVkIGJ5IGl0cyBvd24gcmUtaXNzdWUsIHNvIG9ubHkgaXQgc2V0c1xcbisgKiAtXFx1MDAzZWRlZmVyX2RyYWluaW5nLiAgQSBkaXJlY3QgZHJhaW4gcmUtaXNzdWVzIG9udG8gdGhpcyBDUFUsIGFuZCBhbnl0aGluZ1xcbisgKiBzdGFnZWQgZHVyaW5nIGl0IGlzIHBpY2tlZCB1cCBieSB0aGF0IENQVSdzIG93biBpcnFfd29yay5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KVxcbit7XFxuK1xcdF9fcmN1X2RlZmVyX2RyYWluKGNvbnRhaW5lcl9vZihpdywgc3RydWN0IHJjdV9kYXRhLCBkZWZlcl93b3JrKSwgdHJ1ZSk7XFxuK31cXG4rXFxuKy8qIFN0YWdlIEBoZWFkIGZvciB0aGlzIENQVSdzIGlycV93b3JrIHdoZW4gY2FsbF9yY3UoKSBjYW5ub3QgZW5xdWV1ZSBub3cuICovXFxuK3N0YXRpYyB2b2lkIGNhbGxfcmN1X2RlZmVyKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYylcXG4re1xcbitcXHRzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHRoaXNfY3B1X3B0cihcXHUwMDI2cmN1X2RhdGEpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogSW5zdHJ1bWVudGF0aW9uIG9uIHRoZSBlbnF1ZXVlIHBhdGggY2FuIHJlLWVudGVyIGhlcmUgZnJvbSBpbnNpZGVcXG4rXFx0ICogcmN1X2RlZmVyX2RyYWluKCkuICBSZS1xdWV1aW5nIHdvdWxkIGxpdmVsb2NrIHRoZSBkcmFpbiwgc28gZHJvcCB0aGVcXG4rXFx0ICogY2FsbGJhY2s7IGFuIE5NSSBpcyBvbmUtc2hvdCBhbmQgY2Fubm90IGxvb3AsIHNvIGxldCBpdCB0aHJvdWdoLlxcbitcXHQgKi9cXG4rXFx0aWYgKFJFQURfT05DRShyZHAtXFx1MDAzZWRlZmVyX2RyYWluaW5nKSBcXHUwMDI2XFx1MDAyNiAhaW5fbm1pKCkpIHtcXG4rXFx0XFx0V0FSTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSksXFxuK1xcdFxcdFxcdCAgXFxcImNhbGxfcmN1KCkgcmUtZW50ZXJlZCBkdXJpbmcgY2FsbGJhY2sgZHJhaW47IGxlYWtpbmcgY2FsbGJhY2tcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFx0aGVhZC1cXHUwMDNlZnVuYyA9IGZ1bmM7XFxuK1xcdGlmIChsbGlzdF9hZGQoKHN0cnVjdCBsbGlzdF9ub2RlICopaGVhZCwgXFx1MDAyNnJkcC1cXHUwMDNlZGVmZXJfaGVhZCkpXFxuK1xcdFxcdGlycV93b3JrX3F1ZXVlKFxcdTAwMjZyZHAtXFx1MDAzZWRlZmVyX3dvcmspO1xcbit9XFxuK1xcbisvKlxcbisgKiBSZWdpc3RlciBwZW5kaW5nIGRlZmVycmVkIGNhbGxiYWNrcyBpbnRvIHRoZSBjYWxsYmFjayBsaXN0cyBzbyBhIGZvbGxvd2luZ1xcbisgKiByY3VfYmFycmllcigpIHdhaXRzIGZvciB0aGVtLiAgVGhpcyBydW5zIGJlZm9yZSByY3VfYmFycmllcigpIHNjYW5zIHRoZVxcbisgKiBsaXN0cy5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9mbHVzaCh2b2lkKVxcbit7XFxuK1xcdGludCBjcHU7XFxuK1xcbitcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcXG4rXFx0XFx0c3RydWN0IHJjdV9kYXRhICpyZHAgPSBwZXJfY3B1X3B0cihcXHUwMDI2cmN1X2RhdGEsIGNwdSk7XFxuK1xcbitcXHRcXHRpZiAoIWxsaXN0X2VtcHR5KFxcdTAwMjZyZHAtXFx1MDAzZWRlZmVyX2hlYWQpKVxcbitcXHRcXHRcXHRfX3JjdV9kZWZlcl9kcmFpbihyZHAsIGZhbHNlKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZFxcbitfX2NhbGxfcmN1X2NvbW1vbihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgbGF6eV9pbilcXG4re1xcbitcXHQvKiBNaXNhbGlnbmVkIHJjdV9oZWFkISAqL1xcbitcXHRXQVJOX09OX09OQ0UoKHVuc2lnbmVkIGxvbmcpaGVhZCBcXHUwMDI2IChzaXplb2Yodm9pZCAqKSAtIDEpKTtcXG4rXFxuK1xcdC8qIEF2b2lkIE5VTEwgZGVyZWZlcmVuY2UgaWYgY2FsbGJhY2sgaXMgTlVMTC4gKi9cXG4rXFx0aWYgKFdBUk5fT05fT05DRSghZnVuYykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmIChzaG91bGRfcmN1X2RlZmVyKCkpIHtcXG4rXFx0XFx0Y2FsbF9yY3VfZGVmZXIoaGVhZCwgZnVuYyk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0LyogQW4gTk1JIHJlYWNoaW5nIGhlcmUgZW50ZXJlZCB3aXRoIGlycXMgZW5hYmxlZCwgc28gdGhlIGVucXVldWUgY2FuIHJhY2UuICovXFxuK1xcdFdBUk5fT05fT05DRShJU19FTkFCTEVEKENPTkZJR19QUk9WRV9SQ1UpIFxcdTAwMjZcXHUwMDI2IGluX25taSgpKTtcXG4rXFxuK1xcdHJjdV9kb19lbnF1ZXVlKGhlYWQsIGZ1bmMsIGxhenlfaW4pO1xcbit9XFxuK1xcbiAjaWZkZWYgQ09ORklHX1JDVV9MQVpZXFxuIHN0YXRpYyBib29sIGVuYWJsZV9yY3VfbGF6eSBfX3JlYWRfbW9zdGx5ID0gIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9MQVpZX0RFRkFVTFRfT0ZGKTtcXG4gbW9kdWxlX3BhcmFtKGVuYWJsZV9yY3VfbGF6eSwgYm9vbCwgMDQ0NCk7XFxuQEAgLTM4OTYsOCArMzk5OSwxMiBAQCB2b2lkIHJjdV9iYXJyaWVyKHZvaWQpXFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZ3NlcTtcXG4gXFx0c3RydWN0IHJjdV9kYXRhICpyZHA7XFxuLVxcdHVuc2lnbmVkIGxvbmcgcyA9IHJjdV9zZXFfc25hcChcXHUwMDI2cmN1X3N0YXRlLmJhcnJpZXJfc2VxdWVuY2UpO1xcbitcXHR1bnNpZ25lZCBsb25nIHM7XFxuIFxcbitcXHQvKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIGJlZm9yZSBzbmFwc2hvdHRpbmcgdGhlIHNlcXVlbmNlLiAqL1xcbitcXHRyY3VfZGVmZXJfZmx1c2goKTtcXG4rXFxuK1xcdHMgPSByY3Vfc2VxX3NuYXAoXFx1MDAyNnJjdV9zdGF0ZS5iYXJyaWVyX3NlcXVlbmNlKTtcXG4gXFx0cmN1X2JhcnJpZXJfdHJhY2UoVFBTKFxcXCJCZWdpblxcXCIpLCAtMSwgcyk7XFxuIFxcbiBcXHQvKiBUYWtlIG11dGV4IHRvIHNlcmlhbGl6ZSBjb25jdXJyZW50IHJjdV9iYXJyaWVyKCkgcmVxdWVzdHMuICovXFxuQEAgLTQyMzEsNiArNDMzOCwxMCBAQCByY3VfYm9vdF9pbml0X3BlcmNwdV9kYXRhKGludCBjcHUpXFxuIFxcdHJkcC1cXHUwMDNlcmN1X29ubF9ncF9zdGF0ZSA9IFJDVV9HUF9DTEVBTkVEO1xcbiBcXHRyZHAtXFx1MDAzZWxhc3Rfc2NoZWRfY2xvY2sgPSBqaWZmaWVzO1xcbiBcXHRyZHAtXFx1MDAzZWNwdSA9IGNwdTtcXG4rXFx0aW5pdF9sbGlzdF9oZWFkKFxcdTAwMjZyZHAtXFx1MDAzZWRlZmVyX2hlYWQpO1xcbitcXHRyYXdfc3Bpbl9sb2NrX2luaXQoXFx1MDAyNnJkcC1cXHUwMDNlZGVmZXJfbG9jayk7XFxuK1xcdC8qIEhhcmQgaXJxX3dvcmsgc28gdGhlIHJlLWlzc3VlIHJ1bnMgcHJvbXB0bHkuICovXFxuK1xcdHJkcC1cXHUwMDNlZGVmZXJfd29yayA9IElSUV9XT1JLX0lOSVRfSEFSRChyY3VfZGVmZXJfZHJhaW4pO1xcbiBcXHRyY3VfYm9vdF9pbml0X25vY2JfcGVyY3B1X2RhdGEocmRwKTtcXG4gfVxcbiBcXG5AQCAtNDUyOCw2ICs0NjM5LDE2IEBAIHZvaWQgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcyhpbnQgY3B1KVxcbiBcXHRzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHBlcl9jcHVfcHRyKFxcdTAwMjZyY3VfZGF0YSwgY3B1KTtcXG4gXFx0Ym9vbCBuZWVkd2FrZTtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIENhbGxiYWNrcyB0aGUgb3V0Z29pbmcgQ1BVIGRlZmVycmVkIGxhdGUgaW4gdGhlIG9mZmxpbmUgcGF0aCAocGFzdCB0aGVcXG4rXFx0ICogcG9pbnQgaXRzIGlycV93b3JrIGNhbiBydW4pIHNpdCBvbiAtXFx1MDAzZWRlZmVyX2hlYWQsIHdoaWNoIHRoZSAtXFx1MDAzZWNibGlzdFxcbitcXHQgKiBtaWdyYXRpb24gYmVsb3cgZG9lcyBub3QgY292ZXIuICBEcmFpbiB0aGVtIGhlcmUsIGJlZm9yZSB0aGUgZWFybHlcXG4rXFx0ICogcmV0dXJuczsgdGhlIHJlLWlzc3VlIGxhbmRzIG9uIHRoaXMgQ1BVLlxcbitcXHQgKi9cXG4rXFx0X19yY3VfZGVmZXJfZHJhaW4ocmRwLCBmYWxzZSk7XFxuK1xcdC8qIExpa2V3aXNlIGZvciB0aGUgb3V0Z29pbmcgQ1BVJ3MgZGVmZXJyZWQgY2FsbF9zcmN1KCkgY2FsbGJhY2tzLiAqL1xcbitcXHRzcmN1X29mZmxpbmVfZHJhaW4oY3B1KTtcXG4rXFxuIFxcdGlmIChyY3VfcmRwX2lzX29mZmxvYWRlZChyZHApKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3RyZWUuaCBiL2tlcm5lbC9yY3UvdHJlZS5oXFxuaW5kZXggZWVkZmE0MzA1OWU4MC4uYjdjYWM3YTEzYjRmMiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvcmN1L3RyZWUuaFxcbisrKyBiL2tlcm5lbC9yY3UvdHJlZS5oXFxuQEAgLTIyOSw2ICsyMjksMTIgQEAgc3RydWN0IHJjdV9kYXRhIHtcXG4gXFx0c3RydWN0IHJjdV9oZWFkIGJhcnJpZXJfaGVhZDtcXG4gXFx0aW50IGV4cF93YXRjaGluZ19zbmFwO1xcdFxcdC8qIERvdWJsZS1jaGVjayBuZWVkIGZvciBJUEkuICovXFxuIFxcbitcXHQvKiBEZWZlcnJhbCBvZiBhbiBOTUkvcmVlbnRyYW50IGNhbGxfcmN1KCk7IHNlZSBfX2NhbGxfcmN1X2NvbW1vbigpLiAqL1xcbitcXHRzdHJ1Y3QgbGxpc3RfaGVhZCBkZWZlcl9oZWFkO1xcbitcXHRzdHJ1Y3QgaXJxX3dvcmsgZGVmZXJfd29yaztcXG4rXFx0cmF3X3NwaW5sb2NrX3QgZGVmZXJfbG9jaztcXG4rXFx0Ym9vbCBkZWZlcl9kcmFpbmluZztcXG4rXFxuIFxcdC8qIDUpIENhbGxiYWNrIG9mZmxvYWRpbmcuICovXFxuICNpZmRlZiBDT05GSUdfUkNVX05PQ0JfQ1BVXFxuIFxcdHN0cnVjdCBzd2FpdF9xdWV1ZV9oZWFkIG5vY2JfY2Jfd3E7IC8qIEZvciBub2NiIGt0aHJlYWRzIHRvIHNsZWVwIG9uLiAqL1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yY3VfcmVlbnRyeS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmN1X3JlZW50cnkuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZmE4MTNkMWQ0OTJiNlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yY3VfcmVlbnRyeS5jXFxuQEAgLTAsMCArMSw5NSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKlxcbisgKiBFeGVyY2lzZSByZS1lbnRyeSBpbnRvIGNhbGxfc3JjdSgpIGZyb20gQlBGOyBzZWUgcHJvZ3MvcmN1X3JlZW50cnkuYy5cXG4rICpcXG4rICogT24gYSBrZXJuZWwgd2l0aG91dCB0aGUgY2FsbF9zcmN1KCkgYW55LWNvbnRleHQgZml4IHRoZSBuZXN0ZWQgY2FsbFxcbisgKiBzZWxmLWRlYWRsb2NrcyBvbiB0aGUgc3JjdV9kYXRhIGxvY2ssIHNvIHRoaXMgaGFuZ3MgcmF0aGVyIHRoYW4gZmFpbHMuXFxuKyAqL1xcbisjZGVmaW5lIF9HTlVfU09VUkNFXFxuKyNpbmNsdWRlIFxcdTAwM2NzY2hlZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3N5c2NhbGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3Rlc3RfcHJvZ3MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcInJjdV9yZWVudHJ5LnNrZWwuaFxcXCJcXG4rXFxuK3N0YXRpYyBpbnQgc3lzX3BpZGZkX29wZW4ocGlkX3QgcGlkLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuK3tcXG4rXFx0cmV0dXJuIHN5c2NhbGwoX19OUl9waWRmZF9vcGVuLCBwaWQsIGZsYWdzKTtcXG4rfVxcbitcXG4rLyogVGlueSBSQ1UgYnVpbGRzIGhhdmUgbm8gcmN1X3NlZ2NibGlzdF9lbnF1ZXVlKCkgdG8gYXR0YWNoIHRvLiAqL1xcbitzdGF0aWMgYm9vbCBoYXZlX2F0dGFjaF90YXJnZXQodm9pZClcXG4re1xcbitcXHRjaGFyIGJ1ZlsyNTZdO1xcbitcXHRib29sIGZvdW5kID0gZmFsc2U7XFxuK1xcdEZJTEUgKmY7XFxuK1xcbitcXHRmID0gZm9wZW4oXFxcIi9wcm9jL2thbGxzeW1zXFxcIiwgXFxcInJcXFwiKTtcXG4rXFx0aWYgKCFmKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXHQvKiBjYW5ub3QgdGVsbDsgbGV0IHRoZSBhdHRhY2ggZGVjaWRlICovXFxuK1xcdHdoaWxlIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmKSkge1xcbitcXHRcXHRpZiAoc3Ryc3RyKGJ1ZiwgXFxcIiByY3Vfc2VnY2JsaXN0X2VucXVldWVcXFxcblxcXCIpKSB7XFxuK1xcdFxcdFxcdGZvdW5kID0gdHJ1ZTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRmY2xvc2UoZik7XFxuK1xcdHJldHVybiBmb3VuZDtcXG4rfVxcbitcXG4rdm9pZCB0ZXN0X3JjdV9yZWVudHJ5KHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IHJjdV9yZWVudHJ5ICpza2VsO1xcbitcXHRpbnQgZXJyLCBwaWRmZCA9IC0xLCBtYXBfZmQ7XFxuK1xcdGNwdV9zZXRfdCBzZXQsIG9sZF9zZXQ7XFxuK1xcdGJvb2wgYWZmaW5pdHlfc2F2ZWQ7XFxuK1xcdF9fdTY0IHZhbCA9IDE7XFxuK1xcbitcXHRpZiAoIWhhdmVfYXR0YWNoX3RhcmdldCgpKSB7XFxuK1xcdFxcdHRlc3RfX3NraXAoKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRza2VsID0gcmN1X3JlZW50cnlfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJza2VsX29wZW5fYW5kX2xvYWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZXJyID0gcmN1X3JlZW50cnlfX2F0dGFjaChza2VsKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwic2tlbF9hdHRhY2hcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHQvKiBLZWVwIHRoZSByZS1lbnRyeSBvbiBhIHNpbmdsZSBDUFUuICovXFxuK1xcdGFmZmluaXR5X3NhdmVkID0gIXNjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihvbGRfc2V0KSwgXFx1MDAyNm9sZF9zZXQpO1xcbitcXHRDUFVfWkVSTyhcXHUwMDI2c2V0KTtcXG4rXFx0Q1BVX1NFVCgwLCBcXHUwMDI2c2V0KTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soc2NoZWRfc2V0YWZmaW5pdHkoMCwgc2l6ZW9mKHNldCksIFxcdTAwMjZzZXQpLCBcXFwic2V0YWZmaW5pdHlcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRwaWRmZCA9IHN5c19waWRmZF9vcGVuKGdldHBpZCgpLCAwKTtcXG4rXFx0aWYgKCFBU1NFUlRfR0UocGlkZmQsIDAsIFxcXCJwaWRmZF9vcGVuXFxcIikpXFxuK1xcdFxcdGdvdG8gcmVzdG9yZTtcXG4rXFx0bWFwX2ZkID0gYnBmX21hcF9fZmQoc2tlbC1cXHUwMDNlbWFwcy50YXNrX3N0Zyk7XFxuK1xcdGVyciA9IGJwZl9tYXBfdXBkYXRlX2VsZW0obWFwX2ZkLCBcXHUwMDI2cGlkZmQsIFxcdTAwMjZ2YWwsIEJQRl9OT0VYSVNUKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwiYm9vdF9jcmVhdGVcXFwiKSlcXG4rXFx0XFx0Z290byByZXN0b3JlO1xcbitcXG4rXFx0LyogQXJtIHRoZSBoYW5kbGVyIGZvciB0aGlzIHRocmVhZCwgdGhlbiB0cmlnZ2VyIGNhbGxfcmN1X3Rhc2tzX3RyYWNlKCkuICovXFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNldGFyZ2V0X3BpZCA9IHN5c2NhbGwoX19OUl9nZXR0aWQpO1xcbitcXHRlcnIgPSBicGZfbWFwX2RlbGV0ZV9lbGVtKG1hcF9mZCwgXFx1MDAyNnBpZGZkKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwiYm9vdF9kZWxldGVcXFwiKSlcXG4rXFx0XFx0Z290byByZXN0b3JlO1xcbitcXG4rXFx0LyogT25seSBUcmVlIFNSQ1UgZW5xdWV1ZXMgdmlhIHJjdV9zZWdjYmxpc3RfZW5xdWV1ZSgpOyBza2lwIGVsc2V3aGVyZS4gKi9cXG4rXFx0aWYgKCFza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWhpdHMpIHtcXG4rXFx0XFx0dGVzdF9fc2tpcCgpO1xcbitcXHRcXHRnb3RvIHJlc3RvcmU7XFxuK1xcdH1cXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZ2V0X2VycnMsIDAsIFxcXCJuZXN0ZWRfc3RvcmFnZV9nZXRcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZGVsX2VycnMsIDAsIFxcXCJuZXN0ZWRfc3RvcmFnZV9kZWxldGVcXFwiKTtcXG4rcmVzdG9yZTpcXG4rXFx0aWYgKGFmZmluaXR5X3NhdmVkKVxcbitcXHRcXHRzY2hlZF9zZXRhZmZpbml0eSgwLCBzaXplb2Yob2xkX3NldCksIFxcdTAwMjZvbGRfc2V0KTtcXG4rb3V0OlxcbitcXHRpZiAocGlkZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2UocGlkZmQpO1xcbitcXHRyY3VfcmVlbnRyeV9fZGVzdHJveShza2VsKTtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmN1X3JlZW50cnkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yY3VfcmVlbnRyeS5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi40N2EzNmY3MDRjZjNlXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yY3VfcmVlbnRyeS5jXFxuQEAgLTAsMCArMSw1MSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKlxcbisgKiBSZS1lbnRlciBjYWxsX3NyY3UoKSBmcm9tIGEgQlBGIHByb2dyYW0uICBmZW50cnkgb24gcmN1X3NlZ2NibGlzdF9lbnF1ZXVlKClcXG4rICogZmlyZXMgaW5zaWRlIGNhbGxfc3JjdSgpJ3MgZW5xdWV1ZSAocmVhY2hlZCBmcm9tIHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKClcXG4rICogd2l0aCB0aGUgc3JjdV9kYXRhIC1cXHUwMDNlbG9jayBoZWxkKTsgdGhlIGhhbmRsZXIgdGhlbiBjYWxscyBjYWxsX3JjdV90YXNrc190cmFjZSgpXFxuKyAqIC0tIGl0c2VsZiBjYWxsX3NyY3UoKSBvbiByY3VfdGFza3NfdHJhY2Vfc3JjdV9zdHJ1Y3QgLS0gcmUtZW50ZXJpbmcgdGhlIHNhbWVcXG4rICogc3JjdV9kYXRhIG9uIHRoZSBzYW1lIENQVS5cXG4rICovXFxuKyNpbmNsdWRlIFxcXCJ2bWxpbnV4LmhcXFwiXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXFx1MDAzZVxcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuK1xcbitzdHJ1Y3Qge1xcbitcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1RBU0tfU1RPUkFHRSk7XFxuK1xcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTtcXG4rXFx0X190eXBlKGtleSwgaW50KTtcXG4rXFx0X190eXBlKHZhbHVlLCBfX3U2NCk7XFxuK30gdGFza19zdGcgU0VDKFxcXCIubWFwc1xcXCIpO1xcbitcXG4raW50IHRhcmdldF9waWQ7XFxuK2ludCBoaXRzO1xcbitpbnQgZ2V0X2VycnM7XFxuK2ludCBkZWxfZXJycztcXG4raW50IGRvbmU7XFxuK1xcbitTRUMoXFxcImZlbnRyeS9yY3Vfc2VnY2JsaXN0X2VucXVldWVcXFwiKVxcbitpbnQgQlBGX1BST0cocmVlbnRlcilcXG4re1xcbitcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cjtcXG4rXFxuK1xcdGlmIChkb25lIHx8ICF0YXJnZXRfcGlkKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGN1ciA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpO1xcbitcXHRpZiAoY3VyLVxcdTAwM2VwaWQgIT0gdGFyZ2V0X3BpZClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHQvKiBJc3N1ZSB0aGUgbmVzdGVkIGNhbGwgZXhhY3RseSBvbmNlLCBzbyB0aGUgdGVzdCBpcyBkZXRlcm1pbmlzdGljLiAqL1xcbitcXHRkb25lID0gMTtcXG4rXFx0X19zeW5jX2ZldGNoX2FuZF9hZGQoXFx1MDAyNmhpdHMsIDEpO1xcbitcXG4rXFx0LyogUmUtZW50ZXIgdmlhIGEgdGFzay1zdG9yYWdlIGRlbGV0ZSwgd2hpY2ggY2FsbHMgY2FsbF9yY3VfdGFza3NfdHJhY2UoKS4gKi9cXG4rXFx0aWYgKCFicGZfdGFza19zdG9yYWdlX2dldChcXHUwMDI2dGFza19zdGcsIGN1ciwgMCwgQlBGX0xPQ0FMX1NUT1JBR0VfR0VUX0ZfQ1JFQVRFKSlcXG4rXFx0XFx0X19zeW5jX2ZldGNoX2FuZF9hZGQoXFx1MDAyNmdldF9lcnJzLCAxKTtcXG4rXFx0ZWxzZSBpZiAoYnBmX3Rhc2tfc3RvcmFnZV9kZWxldGUoXFx1MDAyNnRhc2tfc3RnLCBjdXIpKVxcbitcXHRcXHRfX3N5bmNfZmV0Y2hfYW5kX2FkZChcXHUwMDI2ZGVsX2VycnMsIDEpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTM6MzE6NDAuOTM5MjIzOVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjc1MDYwNDkyNDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBST1ZFX0xPQ0tJTkdcIixcbiAgICBcIlJDVV9UT1JUVVJFX1RFU1RcIixcbiAgICBcIlBFUkZfRVZFTlRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmN1X2JhcnJpZXJcIixcbiAgICBcInNyY3VfYmFycmllclwiLFxuICAgIFwic3JjdV9vZmZsaW5lX2RyYWluXCIsXG4gICAgXCJyY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzXCIsXG4gICAgXCJzcmN1X2RlZmVyX2RyYWluXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBSQ1UgYW5kIFNSQ1UgbG9naWMgdG8gZGVmZXIgYGNhbGxfcmN1KClgIGFuZCBgY2FsbF9zcmN1KClgIGNhbGxiYWNrcyB3aGVuIGludGVycnVwdHMgYXJlIGRpc2FibGVkLiBUaGlzIHByZXZlbnRzIGRlYWRsb2NrcyBvciBsaXN0IGNvcnJ1cHRpb24gZHVyaW5nIHJlLWVudHJhbnQgY2FsbHMgKGUuZy4sIGZyb20gQlBGIHByb2dyYW1zIG9yIE5NSXMpLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGRlZmVycmFsIG1lY2hhbmlzbSB1c2luZyBgaXJxX3dvcmtgIGFuZCBsb2NrbGVzcyBsaXN0cy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwsIHJlYWNoYWJsZSwgYW5kIGFmZmVjdCBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTRkMjJjNjc3MTg3ZjJlNmRhOTZkN2YzOGE3YTJjYmUxMDkzNjZiMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMTM6MzE6MzkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NyY3V0aW55LmggYi9pbmNsdWRlL2xpbnV4L3NyY3V0aW55LmhcbmluZGV4IGZiY2YxM2JjMTJkMTUuLmEwZTU0ZDkxODJiYWEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NyY3V0aW55LmhcbisrKyBiL2luY2x1ZGUvbGludXgvc3JjdXRpbnkuaFxuQEAgLTEyLDYgKzEyLDcgQEBcbiAjZGVmaW5lIF9MSU5VWF9TUkNVX1RJTllfSFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycV93b3JrX3R5cGVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9sbGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3dhaXQuaFx1MDAzZVxuIFxuIHN0cnVjdCBzcmN1X3N0cnVjdCB7XG5AQCAtMjYsNiArMjcsOCBAQCBzdHJ1Y3Qgc3JjdV9zdHJ1Y3Qge1xuIFx0c3RydWN0IHJjdV9oZWFkICoqc3JjdV9jYl90YWlsO1x0LyogUGVuZGluZyBjYWxsYmFja3M6IFRhaWwuICovXG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc3JjdV93b3JrO1x0LyogRm9yIGRyaXZpbmcgZ3JhY2UgcGVyaW9kcy4gKi9cbiBcdHN0cnVjdCBpcnFfd29yayBzcmN1X2lycV93b3JrO1x0LyogRGVmZXIgc2NoZWR1bGVfd29yaygpIHRvIGlycSB3b3JrLiAqL1xuK1x0c3RydWN0IGxsaXN0X2hlYWQgZGVmZXJfY2JzO1x0LyogQ2FsbGJhY2tzIGRlZmVycmVkIG9uIHJlLWVudHJ5LiAqL1xuK1x0c3RydWN0IGlycV93b3JrIGRlZmVyX2l3O1x0XHQvKiBSZWdpc3RlcnMgZGVmZXJfY2JzIGxhdGVyLiAqL1xuICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQ1xuIFx0c3RydWN0IGxvY2tkZXBfbWFwIGRlcF9tYXA7XG4gI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQyAqL1xuQEAgLTMzLDYgKzM2LDcgQEAgc3RydWN0IHNyY3Vfc3RydWN0IHtcbiBcbiB2b2lkIHNyY3VfZHJpdmVfZ3Aoc3RydWN0IHdvcmtfc3RydWN0ICp3cCk7XG4gdm9pZCBzcmN1X3RpbnlfaXJxX3dvcmsoc3RydWN0IGlycV93b3JrICppcnFfd29yayk7XG4rdm9pZCBzcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXJxX3dvcmspO1xuIFxuICNkZWZpbmUgX19TUkNVX1NUUlVDVF9JTklUKG5hbWUsIF9faWdub3JlZCwgX19faWdub3JlZCwgX19fX2lnbm9yZWQpXHRcXFxuIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuQEAgLTQwLDYgKzQ0LDkgQEAgdm9pZCBzcmN1X3RpbnlfaXJxX3dvcmsoc3RydWN0IGlycV93b3JrICppcnFfd29yayk7XG4gXHQuc3JjdV9jYl90YWlsID0gXHUwMDI2bmFtZS5zcmN1X2NiX2hlYWQsXHRcdFx0XHRcXFxuIFx0LnNyY3Vfd29yayA9IF9fV09SS19JTklUSUFMSVpFUihuYW1lLnNyY3Vfd29yaywgc3JjdV9kcml2ZV9ncCksXHRcXFxuIFx0LnNyY3VfaXJxX3dvcmsgPSB7IC5mdW5jID0gc3JjdV90aW55X2lycV93b3JrIH0sXHRcdFxcXG4rXHQuZGVmZXJfY2JzID0gTExJU1RfSEVBRF9JTklUKG5hbWUuZGVmZXJfY2JzKSxcdFx0XHRcXFxuK1x0LmRlZmVyX2l3ID0geyAubm9kZSA9IHsgLnVfZmxhZ3MgPSBJUlFfV09SS19IQVJEX0lSUSB9LFx0XHRcXFxuK1x0XHQgICAgICAuZnVuYyA9IHNyY3VfZGVmZXJfZHJhaW4gfSxcdFx0XHRcXFxuIFx0X19TUkNVX0RFUF9NQVBfSU5JVChuYW1lKVx0XHRcdFx0XHRcXFxuIH1cbiBcbkBAIC0xMzEsMTAgKzEzOCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzeW5jaHJvbml6ZV9zcmN1X2V4cGVkaXRlZChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbiBcdHN5bmNocm9uaXplX3NyY3Uoc3NwKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbi17XG4tXHRzeW5jaHJvbml6ZV9zcmN1KHNzcCk7XG4tfVxuK3ZvaWQgc3JjdV9iYXJyaWVyKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKTtcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgc3JjdV9leHBlZGl0ZV9jdXJyZW50KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKSB7IH1cbiAjZGVmaW5lIHNyY3VfY2hlY2tfcmVhZF9mbGF2b3Ioc3NwLCByZWFkX2ZsYXZvcikgZG8geyB9IHdoaWxlICgwKVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3JjdXRyZWUuaCBiL2luY2x1ZGUvbGludXgvc3JjdXRyZWUuaFxuaW5kZXggNzVlNTRlNGY5NjNmYS4uMDlhOWM4ZjRhNmQyNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3JjdXRyZWUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zcmN1dHJlZS5oXG5AQCAtMTMsNiArMTMsOCBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdV9ub2RlX3RyZWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBsZXRpb24uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycV93b3JrX3R5cGVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9sbGlzdC5oXHUwMDNlXG4gXG4gc3RydWN0IHNyY3Vfbm9kZTtcbiBzdHJ1Y3Qgc3JjdV9zdHJ1Y3Q7XG5AQCAtNDEsNiArNDMsOSBAQCBzdHJ1Y3Qgc3JjdV9kYXRhIHtcbiBcdGJvb2wgc3JjdV9jYmxpc3RfaW52b2tpbmc7XHRcdC8qIEludm9raW5nIHRoZXNlIENCcz8gKi9cbiBcdHN0cnVjdCB0aW1lcl9saXN0IGRlbGF5X3dvcms7XHRcdC8qIERlbGF5IGZvciBDQiBpbnZva2luZyAqL1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IHdvcms7XHRcdC8qIENvbnRleHQgZm9yIENCIGludm9raW5nLiAqL1xuK1x0c3RydWN0IGxsaXN0X2hlYWQgZGVmZXJfY2JzO1x0XHQvKiBDYWxsYmFja3MgZGVmZXJyZWQgb24gcmUtZW50cnkuICovXG4rXHRzdHJ1Y3QgbGxpc3Rfbm9kZSBkZWZlcl9saW5rO1x0XHQvKiBMaW5rcyBvbnRvIHRoZSBwZXItQ1BVIGRlZmVycmFsIGRyYWluIGxpc3QgKi9cbitcdGJvb2wgZGVmZXJfZXhwO1x0XHRcdFx0LyogQSBkZWZlcnJlZCBjYWxsYmFjayBhc2tlZCB0byBleHBlZGl0ZS4gKi9cbiBcdHN0cnVjdCByY3VfaGVhZCBzcmN1X2JhcnJpZXJfaGVhZDtcdC8qIEZvciBzcmN1X2JhcnJpZXIoKSB1c2UuICovXG4gXHRzdHJ1Y3QgcmN1X2hlYWQgc3JjdV9lY19oZWFkO1x0XHQvKiBGb3Igc3JjdV9leHBlZGl0ZV9jdXJyZW50KCkgdXNlLiAqL1xuIFx0aW50IHNyY3VfZWNfc3RhdGU7XHRcdFx0LyogIFN0YXRlIGZvciBzcmN1X2V4cGVkaXRlX2N1cnJlbnQoKS4gKi9cbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L0tjb25maWcgYi9rZXJuZWwvcmN1L0tjb25maWdcbmluZGV4IDMzMmRmN2E3YTYzNDcuLmJjOTQ4M2MwYjVkODQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvcmN1L0tjb25maWdcbisrKyBiL2tlcm5lbC9yY3UvS2NvbmZpZ1xuQEAgLTE3NSw2ICsxNzUsMTIgQEAgY29uZmlnIFJDVV9TVEFMTF9DT01NT05cbiBjb25maWcgUkNVX05FRURfU0VHQ0JMSVNUXG4gXHRkZWZfYm9vbCAoIFRSRUVfUkNVIHx8IFRSRUVfU1JDVSB8fCBUQVNLU19SQ1VfR0VORVJJQyApXG4gXG4rIyBUaGUgZGVmZXJyYWwgKGFuZCB0aGUgSVJRX1dPUksgaXQgdXNlcykgaXMgb25seSBuZWVkZWQgd2hlcmUgY2FsbF9yY3UoKSAvXG4rIyBjYWxsX3NyY3UoKSBjYW4gYmUgaW52b2tlZCB3aGlsZSBhIGNhbGxiYWNrLWxpc3Qgb3BlcmF0aW9uIGlzIGluIGZsaWdodC5cbitjb25maWcgUkNVX0RFRkVSXG4rXHRkZWZfYm9vbCBIQVZFX05NSSB8fCBLUFJPQkVTIHx8IEZVTkNUSU9OX1RSQUNFUiB8fCBUUkFDRVBPSU5UU1xuK1x0c2VsZWN0IElSUV9XT1JLXG4rXG4gY29uZmlnIFJDVV9GQU5PVVRcbiBcdGludCBcIlRyZWUtYmFzZWQgaGllcmFyY2hpY2FsIFJDVSBmYW5vdXQgdmFsdWVcIlxuIFx0cmFuZ2UgMiA2NCBpZiA2NEJJVFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvcmN1LmggYi9rZXJuZWwvcmN1L3JjdS5oXG5pbmRleCAzOWE5ZjZmYTlhN2IyLi44NGQ3NGNkNWEzNTFjIDEwMDY0NFxuLS0tIGEva2VybmVsL3JjdS9yY3UuaFxuKysrIGIva2VybmVsL3JjdS9yY3UuaFxuQEAgLTU3Miw2ICs1NzIsMjQgQEAgc3RhdGljIGlubGluZSB2b2lkIHRhc2tzX2NibGlzdF9pbml0X2dlbmVyaWModm9pZCkgeyB9XG4gI2RlZmluZSBSQ1VfU0NIRURVTEVSX0lOSVRcdDFcbiAjZGVmaW5lIFJDVV9TQ0hFRFVMRVJfUlVOTklOR1x0MlxuIFxuKy8qXG4rICogRGVmZXIgYSBjYWxsX3JjdSgpL2NhbGxfc3JjdSgpIGNhbGxiYWNrIHJhdGhlciB0aGFuIGVucXVldWUgaXQgbm93PyAgRGVmZXJcbisgKiB3aGVuZXZlciBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCwgc2luY2UgYSBjYWxsYmFjay1saXN0IG9wZXJhdGlvbiBtYXkgYmUgaW5cbisgKiBmbGlnaHQgb24gdGhpcyBDUFUuICBOb3QgYmVmb3JlIHRoZSBzY2hlZHVsZXIgaXMgdXAsIHRob3VnaDogdGhhdCBjb3ZlcnNcbisgKiBlYXJseSBib290LCB3aGVyZSBpcnFfd29yayBpcyBub3QgeWV0IHVzYWJsZSBhbmQgcmN1X2luaXQoKSBpdHNlbGYgYWxyZWFkeVxuKyAqIGNhbGxzIGNhbGxfcmN1KCkuXG4rICovXG4rc3RhdGljIGlubGluZSBib29sIHNob3VsZF9yY3VfZGVmZXIodm9pZClcbit7XG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiBpcnFzX2Rpc2FibGVkKCkgXHUwMDI2XHUwMDI2IHJjdV9zY2hlZHVsZXJfYWN0aXZlICE9IFJDVV9TQ0hFRFVMRVJfSU5BQ1RJVkU7XG4rfVxuK1xuKy8qIERyYWluIGFuIG91dGdvaW5nIENQVSdzIGRlZmVycmVkIFNSQ1UgY2FsbGJhY2tzOyBzZWUgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcygpLiAqL1xuK3ZvaWQgc3JjdV9vZmZsaW5lX2RyYWluKGludCBjcHUpO1xuK1xuIGVudW0gcmN1dG9ydHVyZV90eXBlIHtcbiBcdFJDVV9GTEFWT1IsXG4gXHRSQ1VfVEFTS1NfRkxBVk9SLFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvcmN1dG9ydHVyZS5jIGIva2VybmVsL3JjdS9yY3V0b3J0dXJlLmNcbmluZGV4IDc5NDkzN2UxM2U3YzMuLmE4NGU3MjVlODA2NTYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuY1xuKysrIGIva2VybmVsL3JjdS9yY3V0b3J0dXJlLmNcbkBAIC00OCw2ICs0OCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGljay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGVfdHJhY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25taS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGVyZl9ldmVudC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJyY3UuaFwiXG4gXG5AQCAtMTE1LDYgKzExNiw3IEBAIHRvcnR1cmVfcGFyYW0oaW50LCBsZWFrcG9pbnRlciwgMCwgXCJMZWFrIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGZyb20gcmVhZGVyc1wiKTtcbiB0b3J0dXJlX3BhcmFtKGludCwgbl9iYXJyaWVyX2NicywgMCwgXCIjIG9mIGNhbGxiYWNrcy9rdGhyZWFkcyBmb3IgYmFycmllciB0ZXN0aW5nXCIpO1xuIHRvcnR1cmVfcGFyYW0oaW50LCBuX3VwX2Rvd24sIDMyLCBcIiMgb2YgY29uY3VycmVudCB1cC9kb3duIGhydGltZXItYmFzZWQgUkNVIHJlYWRlcnNcIik7XG4gdG9ydHVyZV9wYXJhbShpbnQsIG5mYWtld3JpdGVycywgNCwgXCJOdW1iZXIgb2YgUkNVIGZha2Ugd3JpdGVyIHRocmVhZHNcIik7XG4rdG9ydHVyZV9wYXJhbShib29sLCBubWlfY2FsbHMsIHRydWUsIFwiRXhlcmNpc2UgLVx1MDAzZWNhbGwoKSBmcm9tIE5NSSBvbiBubWlfY2FwYWJsZSBmbGF2b3JzXCIpO1xuIHRvcnR1cmVfcGFyYW0oaW50LCBucmVhZGVycywgLTEsIFwiTnVtYmVyIG9mIFJDVSByZWFkZXIgdGhyZWFkc1wiKTtcbiB0b3J0dXJlX3BhcmFtKGJvb2wsIG53cml0ZXJzLCAxLCBcIk51bWJlciBvZiBSQ1Ugd3JpdGVyIHRocmVhZHMgKDAgb3IgMSlcIik7XG4gdG9ydHVyZV9wYXJhbShpbnQsIG9iamVjdF9kZWJ1ZywgMCwgXCJFbmFibGUgZGVidWctb2JqZWN0IGRvdWJsZSBjYWxsX3JjdSgpIHRlc3RpbmdcIik7XG5AQCAtMjE2LDYgKzIxOCw4IEBAIHN0YXRpYyBsb25nIG5fcmN1X3RvcnR1cmVfYm9vc3RfZmFpbHVyZTtcbiBzdGF0aWMgbG9uZyBuX3JjdV90b3J0dXJlX2Jvb3N0cztcbiBzdGF0aWMgYXRvbWljX2xvbmdfdCBuX3JjdV90b3J0dXJlX3RpbWVycztcbiBzdGF0aWMgYXRvbWljX2xvbmdfdCBuX3JjdV90b3J0dXJlX2lycXM7XG4rc3RhdGljIGF0b21pY19sb25nX3Qgbl9yY3VfdG9ydHVyZV9ubWlfY2FsbDtcbitzdGF0aWMgYXRvbWljX2xvbmdfdCBuX3JjdV90b3J0dXJlX25taV9jYjtcbiBzdGF0aWMgbG9uZyBuX2JhcnJpZXJfYXR0ZW1wdHM7XG4gc3RhdGljIGxvbmcgbl9iYXJyaWVyX3N1Y2Nlc3NlczsgLyogZGlkIHJjdV9iYXJyaWVyIHRlc3Qgc3VjY2VlZD8gKi9cbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBuX3JlYWRfZXhpdHM7XG5AQCAtNDMzLDYgKzQzNyw3IEBAIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMge1xuIFx0Ym9vbCAoKmlzX3Rhc2tfcmN1X2Jvb3N0ZWQpKHZvaWQpO1xuIFx0bG9uZyBjYmZsb29kX21heDtcbiBcdGludCBpcnFfY2FwYWJsZTtcbitcdGludCBubWlfY2FwYWJsZTtcbiBcdGludCBjYW5fYm9vc3Q7XG4gXHRpbnQgZXh0ZW5kYWJsZXM7XG4gXHRpbnQgc2xvd19ncHM7XG5AQCAtNjQ4LDYgKzY1Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzIHJjdV9vcHMgPSB7XG4gXHQuZXh0ZW5kYWJsZXNcdFx0PSBSQ1VUT1JUVVJFX01BWF9FWFRFTkQsXG4gXHQuZGVidWdfb2JqZWN0c1x0XHQ9IDEsXG4gXHQuc3RhcnRfcG9sbF9pcnFzb2ZmXHQ9IDEsXG4rXHQubm1pX2NhcGFibGVcdFx0PSAxLFxuIFx0Lm5hbWVcdFx0XHQ9IFwicmN1XCJcbiB9O1xuIFxuQEAgLTk0Miw2ICs5NDgsNyBAQCBzdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlX29wcyBzcmN1X29wcyA9IHtcbiBcdC5kZWJ1Z19vYmplY3RzXHQ9IDEsXG4gXHQuaGF2ZV91cF9kb3duXHQ9IElTX0VOQUJMRUQoQ09ORklHX1RJTllfU1JDVSlcbiBcdFx0XHRcdD8gMCA6IFNSQ1VfUkVBRF9GTEFWT1JfTk9STUFMIHwgU1JDVV9SRUFEX0ZMQVZPUl9GQVNUX1VQRE9XTixcbitcdC5ubWlfY2FwYWJsZVx0PSAxLFxuIFx0Lm5hbWVcdFx0PSBcInNyY3VcIlxuIH07XG4gXG5AQCAtMTAwNSw2ICsxMDEyLDcgQEAgc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgc3JjdWRfb3BzID0ge1xuIFx0LmRlYnVnX29iamVjdHNcdD0gMSxcbiBcdC5oYXZlX3VwX2Rvd25cdD0gSVNfRU5BQkxFRChDT05GSUdfVElOWV9TUkNVKVxuIFx0XHRcdFx0PyAwIDogU1JDVV9SRUFEX0ZMQVZPUl9OT1JNQUwgfCBTUkNVX1JFQURfRkxBVk9SX0ZBU1RfVVBET1dOLFxuK1x0Lm5taV9jYXBhYmxlXHQ9IDEsXG4gXHQubmFtZVx0XHQ9IFwic3JjdWRcIlxuIH07XG4gXG5AQCAtMTI2OSw2ICsxMjc3LDcgQEAgc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgdGFza3NfdHJhY2luZ19vcHMgPSB7XG4gXHQuY2JmbG9vZF9tYXhcdD0gNTAwMDAsXG4gXHQuaXJxX2NhcGFibGVcdD0gMSxcbiBcdC5zbG93X2dwc1x0PSAxLFxuK1x0Lm5taV9jYXBhYmxlXHQ9IDEsXG4gXHQubmFtZVx0XHQ9IFwidGFza3MtdHJhY2luZ1wiXG4gfTtcbiBcbkBAIC0yNjU5LDEyICsyNjY4LDEzMSBAQCBzdGF0aWMgYm9vbCByY3VfdG9ydHVyZV9vbmVfcmVhZChzdHJ1Y3QgdG9ydHVyZV9yYW5kb21fc3RhdGUgKnRyc3AsIGxvbmcgbXlpZClcbiBcbiBzdGF0aWMgREVGSU5FX1RPUlRVUkVfUkFORE9NX1BFUkNQVShyY3VfdG9ydHVyZV90aW1lcl9yYW5kKTtcbiBcbisvKlxuKyAqIEV4ZXJjaXNlIC1cdTAwM2VjYWxsKCkgZnJvbSBOTUkgY29udGV4dCBmb3IgZmxhdm9ycyB0aGF0IHNldCAtXHUwMDNlbm1pX2NhcGFibGUuICBBXG4rICogcGVyLUNQVSBoYXJkd2FyZSBwZXJmIGNvdW50ZXIgb3ZlcmZsb3dzIGludG8gYW4gTk1JLCBhbmQgaXRzIGhhbmRsZXIgc3VibWl0c1xuKyAqIG9uZSBwcmVhbGxvY2F0ZWQgY2FsbGJhY2sgdmlhIC1cdTAwM2VjYWxsKCkuICBPbmUgY2FsbGJhY2sgaXMgaW4gZmxpZ2h0IGF0IGEgdGltZVxuKyAqIChndWFyZGVkIGJ5IGFuIGF0b21pYykgdG8gYXZvaWQgYWxsb2NhdGluZyBpbiBOTUkuICBUaGlzIG1pcnJvcnMgaG93IGEgQlBGXG4rICogcHJvZ3JhbSByZWFjaGVzIC1cdTAwM2VjYWxsKCkgZnJvbSBOTUkuXG4rICovXG4rI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UU1xuK3N0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIHJjdV90b3J0dXJlX25taV9hdHRyID0ge1xuK1x0LnR5cGVcdFx0PSBQRVJGX1RZUEVfSEFSRFdBUkUsXG4rXHQuY29uZmlnXHRcdD0gUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTLFxuK1x0LnNpemVcdFx0PSBzaXplb2Yoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciksXG4rXHQucGlubmVkXHRcdD0gMSxcbitcdC5kaXNhYmxlZFx0PSAxLFxuK1x0LmZyZXFcdFx0PSAxLFxuK1x0LnNhbXBsZV9mcmVxXHQ9IDEwMCxcbit9O1xuK1xuKy8qIE9uZSBpbi1mbGlnaHQgY2FsbGJhY2sgcGVyIENQVTsgLVx1MDAzZWludXNlIGlzIHJlbGVhc2VkIGJ5IHRoZSBjYWxsYmFjay4gKi9cbitzdHJ1Y3QgcmN1X3RvcnR1cmVfbm1pX2NicyB7XG4rXHRzdHJ1Y3QgcmN1X2hlYWQgcmg7XG4rXHRhdG9taWNfdCBpbnVzZTtcbit9O1xuK1xuK3N0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudCAqKnJjdV90b3J0dXJlX25taV9ldmVudHM7XG4rc3RhdGljIGludCByY3VfdG9ydHVyZV9ubWlfaHBfc3RhdGU7XG4rc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCByY3VfdG9ydHVyZV9ubWlfY2JzLCByY3VfdG9ydHVyZV9ubWlfY2JzKTtcbitcbitzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfY2Ioc3RydWN0IHJjdV9oZWFkICpyaHApXG4re1xuK1x0c3RydWN0IHJjdV90b3J0dXJlX25taV9jYnMgKnJ0bmNwID0gY29udGFpbmVyX29mKHJocCwgc3RydWN0IHJjdV90b3J0dXJlX25taV9jYnMsIHJoKTtcbitcbitcdGF0b21pY19sb25nX2luYyhcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYik7XG4rXHRhdG9taWNfc2V0KFx1MDAyNnJ0bmNwLVx1MDAzZWludXNlLCAwKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX292ZXJmbG93KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCxcbitcdFx0XHRcdCAgICAgc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuK3tcbitcdHN0cnVjdCByY3VfdG9ydHVyZV9ubWlfY2JzICpydG5jcCA9IHRoaXNfY3B1X3B0cihcdTAwMjZyY3VfdG9ydHVyZV9ubWlfY2JzKTtcbitcbitcdGlmICghaW5fbm1pKCkpXG4rXHRcdHJldHVybjtcbitcdGlmIChjdXJfb3BzLVx1MDAzZWNhbGwgXHUwMDI2XHUwMDI2ICFhdG9taWNfeGNoZyhcdTAwMjZydG5jcC1cdTAwM2VpbnVzZSwgMSkpIHtcbitcdFx0YXRvbWljX2xvbmdfaW5jKFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NhbGwpO1xuK1x0XHRjdXJfb3BzLVx1MDAzZWNhbGwoXHUwMDI2cnRuY3AtXHUwMDNlcmgsIHJjdV90b3J0dXJlX25taV9jYik7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmN1X3RvcnR1cmVfbm1pX29ubGluZSh1bnNpZ25lZCBpbnQgY3B1KVxuK3tcbitcdHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDtcbitcbitcdGV2ZW50ID0gcGVyZl9ldmVudF9jcmVhdGVfa2VybmVsX2NvdW50ZXIoXHUwMDI2cmN1X3RvcnR1cmVfbm1pX2F0dHIsIGNwdSwgTlVMTCxcbitcdFx0XHRcdFx0XHQgcmN1X3RvcnR1cmVfbm1pX292ZXJmbG93LCBOVUxMKTtcbitcdGlmIChJU19FUlIoZXZlbnQpKVxuK1x0XHRyZXR1cm4gMDtcbitcdHJjdV90b3J0dXJlX25taV9ldmVudHNbY3B1XSA9IGV2ZW50O1xuK1x0cGVyZl9ldmVudF9lbmFibGUoZXZlbnQpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmN1X3RvcnR1cmVfbm1pX29mZmxpbmUodW5zaWduZWQgaW50IGNwdSlcbit7XG4rXHRzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSByY3VfdG9ydHVyZV9ubWlfZXZlbnRzW2NwdV07XG4rXG4rXHRpZiAoZXZlbnQpIHtcbitcdFx0cmN1X3RvcnR1cmVfbm1pX2V2ZW50c1tjcHVdID0gTlVMTDtcbitcdFx0cGVyZl9ldmVudF9kaXNhYmxlKGV2ZW50KTtcbitcdFx0cGVyZl9ldmVudF9yZWxlYXNlX2tlcm5lbChldmVudCk7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLypcbisgKiBEcml2ZSB0aGUgY291bnRlcnMgZnJvbSBDUFUtaG90cGx1ZyBjYWxsYmFja3Mgc28gdGhhdCBjb3ZlcmFnZSBzdXJ2aXZlcyB0aGVcbisgKiBvbm9mZiB0ZXN0aW5nIHRoYXQgbW9zdCBzY2VuYXJpb3MgcnVuLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9pbml0KHZvaWQpXG4re1xuK1x0aW50IHJldDtcbitcbitcdGlmICghbm1pX2NhbGxzIHx8ICFjdXJfb3BzLVx1MDAzZW5taV9jYXBhYmxlIHx8ICFjdXJfb3BzLVx1MDAzZWNhbGwpXG4rXHRcdHJldHVybjtcbitcdHJjdV90b3J0dXJlX25taV9ldmVudHMgPSBrY2FsbG9jKG5yX2NwdV9pZHMsIHNpemVvZigqcmN1X3RvcnR1cmVfbm1pX2V2ZW50cyksXG4rXHRcdFx0XHRcdCBHRlBfS0VSTkVMKTtcbitcdGlmICghcmN1X3RvcnR1cmVfbm1pX2V2ZW50cylcbitcdFx0cmV0dXJuO1xuK1x0cmV0ID0gY3B1aHBfc2V0dXBfc3RhdGUoQ1BVSFBfQVBfT05MSU5FX0RZTiwgXCJyY3V0b3J0dXJlL25taTpvbmxpbmVcIixcbitcdFx0XHRcdHJjdV90b3J0dXJlX25taV9vbmxpbmUsIHJjdV90b3J0dXJlX25taV9vZmZsaW5lKTtcbitcdGlmIChyZXQgXHUwMDNjIDApIHtcbitcdFx0a2ZyZWUocmN1X3RvcnR1cmVfbm1pX2V2ZW50cyk7XG4rXHRcdHJjdV90b3J0dXJlX25taV9ldmVudHMgPSBOVUxMO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXHRyY3VfdG9ydHVyZV9ubWlfaHBfc3RhdGUgPSByZXQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9jbGVhbnVwKHZvaWQpXG4re1xuK1x0aWYgKCFyY3VfdG9ydHVyZV9ubWlfZXZlbnRzKVxuK1x0XHRyZXR1cm47XG4rXHRpZiAocmN1X3RvcnR1cmVfbm1pX2hwX3N0YXRlIFx1MDAzZSAwKSB7XG4rXHRcdGNwdWhwX3JlbW92ZV9zdGF0ZShyY3VfdG9ydHVyZV9ubWlfaHBfc3RhdGUpO1xuK1x0XHRyY3VfdG9ydHVyZV9ubWlfaHBfc3RhdGUgPSAwO1xuK1x0fVxuK1x0a2ZyZWUocmN1X3RvcnR1cmVfbm1pX2V2ZW50cyk7XG4rXHRyY3VfdG9ydHVyZV9ubWlfZXZlbnRzID0gTlVMTDtcbitcdGlmICghYXRvbWljX2xvbmdfcmVhZChcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYWxsKSlcbitcdFx0cHJfYWxlcnQoXCIlczogbm1pX2NhbGxzIHNldCBidXQgbm8gLVx1MDAzZWNhbGwoKSBpc3N1ZWQgZnJvbSBOTUk6IG5vdCBzdXBwb3J0ZWQgaGVyZS5cXG5cIixcbitcdFx0XHQgX19mdW5jX18pO1xuK31cbisjZWxzZSAvKiAjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTICovXG4rc3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2luaXQodm9pZCkgeyB9XG4rc3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2NsZWFudXAodm9pZCkgeyB9XG4rI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMgKi9cbitcbiAvKlxuICAqIFJDVSB0b3J0dXJlIHJlYWRlciBmcm9tIHRpbWVyIGhhbmRsZXIuICBEZXJlZmVyZW5jZXMgcmN1X3RvcnR1cmVfY3VycmVudCxcbiAgKiBpbmNyZW1lbnRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBvZiB0aGUgcGlwZWxpbmUgYXJyYXkuICBUaGVcbiAgKiBjb3VudGVyIGluIHRoZSBlbGVtZW50IHNob3VsZCBuZXZlciBiZSBncmVhdGVyIHRoYW4gMSwgb3RoZXJ3aXNlLCB0aGVcbiAgKiBSQ1UgaW1wbGVtZW50YXRpb24gaXMgYnJva2VuLlxuICAqL1xuK1xuIHN0YXRpYyB2b2lkIHJjdV90b3J0dXJlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp1bnVzZWQpXG4ge1xuIFx0V0FSTl9PTl9PTkNFKCFpbl9zZXJ2aW5nX3NvZnRpcnEoKSk7XG5AQCAtMzA0Nyw2ICszMTc1LDkgQEAgcmN1X3RvcnR1cmVfc3RhdHNfcHJpbnQodm9pZClcbiBcdFx0ZGF0YV9yYWNlKG5fYmFycmllcl9hdHRlbXB0cyksXG4gXHRcdGRhdGFfcmFjZShuX3JjdV90b3J0dXJlX2JhcnJpZXJfZXJyb3IpKTtcbiBcdHByX2NvbnQoXCJyZWFkLWV4aXRzOiAlbGQgXCIsIGRhdGFfcmFjZShuX3JlYWRfZXhpdHMpKTsgLy8gU3RhdGlzdGljLlxuK1x0cHJfY29udChcIm5taS1jYWxsczogJWxkIG5taS1jYnM6ICVsZCBcIixcbitcdFx0YXRvbWljX2xvbmdfcmVhZChcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYWxsKSxcbitcdFx0YXRvbWljX2xvbmdfcmVhZChcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYikpO1xuIFx0cHJfY29udChcIm5vY2ItdG9nZ2xlczogJWxkOiVsZCBcIixcbiBcdFx0YXRvbWljX2xvbmdfcmVhZChcdTAwMjZuX25vY2Jfb2ZmbG9hZCksIGF0b21pY19sb25nX3JlYWQoXHUwMDI2bl9ub2NiX2Rlb2ZmbG9hZCkpO1xuIFx0cHJfY29udChcImdwd3JhcHM6ICVsZFxcblwiLCBuX2dwd3JhcHMpO1xuQEAgLTMxOTUsNyArMzMyNiw3IEBAIHJjdV90b3J0dXJlX3ByaW50X21vZHVsZV9wYXJtcyhzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzICpjdXJfb3BzLCBjb25zdCBjaGFyICp0YWcpXG4gXHRcdCBcInJlYWRfZXhpdF9kZWxheT0lZCByZWFkX2V4aXRfYnVyc3Q9JWQgXCJcbiBcdFx0IFwicmVhZGVyX2ZsYXZvcj0leCBcIlxuIFx0XHQgXCJub2Nic19udGhyZWFkcz0lZCBub2Nic190b2dnbGU9JWQgXCJcbi1cdFx0IFwidGVzdF9ubWlzPSVkIFwiXG4rXHRcdCBcInRlc3Rfbm1pcz0lZCBubWlfY2FsbHM9JWQgXCJcbiBcdFx0IFwicHJlZW1wdF9kdXJhdGlvbj0lZCBwcmVlbXB0X2ludGVydmFsPSVkIG5fdXBfZG93bj0lZFxcblwiLFxuIFx0XHQgdG9ydHVyZV90eXBlLCB0YWcsIG5yZWFscmVhZGVycywgbndyaXRlcnMsIG5yZWFsZmFrZXdyaXRlcnMsXG4gXHRcdCBzdGF0X2ludGVydmFsLCB2ZXJib3NlLCB0ZXN0X25vX2lkbGVfaHosIHNodWZmbGVfaW50ZXJ2YWwsXG5AQCAtMzIwOSw3ICszMzQwLDcgQEAgcmN1X3RvcnR1cmVfcHJpbnRfbW9kdWxlX3Bhcm1zKHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgKmN1cl9vcHMsIGNvbnN0IGNoYXIgKnRhZylcbiBcdFx0IHJlYWRfZXhpdF9kZWxheSwgcmVhZF9leGl0X2J1cnN0LFxuIFx0XHQgcmVhZGVyX2ZsYXZvcixcbiBcdFx0IG5vY2JzX250aHJlYWRzLCBub2Nic190b2dnbGUsXG4tXHRcdCB0ZXN0X25taXMsXG4rXHRcdCB0ZXN0X25taXMsIG5taV9jYWxscyxcbiBcdFx0IHByZWVtcHRfZHVyYXRpb24sIHByZWVtcHRfaW50ZXJ2YWwsIG5fdXBfZG93bik7XG4gfVxuIFxuQEAgLTQyODMsNiArNDQxNCw3IEBAIHJjdV90b3J0dXJlX2NsZWFudXAodm9pZClcbiBcdGludCBpO1xuIFxuIFx0aWYgKHRvcnR1cmVfY2xlYW51cF9iZWdpbigpKSB7XG4rXHRcdHJjdV90b3J0dXJlX25taV9jbGVhbnVwKCk7XG4gXHRcdGlmIChjdXJfb3BzLVx1MDAzZWNiX2JhcnJpZXIgIT0gTlVMTCkge1xuIFx0XHRcdHByX2luZm8oXCIlczogSW52b2tpbmcgJXBTKCkuXFxuXCIsIF9fZnVuY19fLCBjdXJfb3BzLVx1MDAzZWNiX2JhcnJpZXIpO1xuIFx0XHRcdGN1cl9vcHMtXHUwMDNlY2JfYmFycmllcigpO1xuQEAgLTQzMjUsNiArNDQ1Nyw4IEBAIHJjdV90b3J0dXJlX2NsZWFudXAodm9pZClcbiBcdFx0a2ZyZWUocmVhZGVyX3Rhc2tzKTtcbiBcdFx0cmVhZGVyX3Rhc2tzID0gTlVMTDtcbiBcdH1cbitcdC8qIERpc2FibGUgdGhlIHBlcmYgY291bnRlcnMgKGFuZCB0aHVzIHRoZSBOTUkgLVx1MDAzZWNhbGwoKSBmaXJpbmcpIG5vdy4gKi9cbitcdHJjdV90b3J0dXJlX25taV9jbGVhbnVwKCk7XG4gXHRrZnJlZShyY3VfdG9ydHVyZV9yZWFkZXJfbWJjaGspO1xuIFx0cmN1X3RvcnR1cmVfcmVhZGVyX21iY2hrID0gTlVMTDtcbiBcbkBAIC00MzU0LDYgKzQ0ODgsMjAgQEAgcmN1X3RvcnR1cmVfY2xlYW51cCh2b2lkKVxuIFx0XHRwcl9pbmZvKFwiJXM6IEludm9raW5nICVwUygpLlxcblwiLCBfX2Z1bmNfXywgY3VyX29wcy1cdTAwM2VjYl9iYXJyaWVyKTtcbiBcdFx0Y3VyX29wcy1cdTAwM2VjYl9iYXJyaWVyKCk7XG4gXHR9XG4rXG4rXHQvKlxuK1x0ICogY2JfYmFycmllcigpIGFib3ZlIGRyYWluZWQgZXZlcnkgZGVmZXJyZWQgTk1JIC1cdTAwM2VjYWxsKCkgY2FsbGJhY2ssIHNvIHRoZVxuK1x0ICogY291bnQgaXNzdWVkIGZyb20gTk1JIG11c3QgZXF1YWwgdGhlIGNvdW50IGludm9rZWQ7IGEgbWlzbWF0Y2ggbWVhbnMgYVxuK1x0ICogY2FsbGJhY2sgd2FzIGxvc3QuXG4rXHQgKi9cbitcdGlmIChhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NhbGwpICE9XG4rXHQgICAgYXRvbWljX2xvbmdfcmVhZChcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYikpIHtcbitcdFx0cHJfYWxlcnQoXCIlczogTk1JIC1cdTAwM2VjYWxsKCkgbG9zdCBhIGNhbGxiYWNrOiBpc3N1ZWQgJWxkIGludm9rZWQgJWxkXFxuXCIsXG4rXHRcdFx0IF9fZnVuY19fLCBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NhbGwpLFxuK1x0XHRcdCBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NiKSk7XG4rXHRcdGF0b21pY19pbmMoXHUwMDI2bl9yY3VfdG9ydHVyZV9lcnJvcik7XG4rXHR9XG4rXG4gXHRpZiAoY3VyX29wcy1cdTAwM2VjbGVhbnVwICE9IE5VTEwpXG4gXHRcdGN1cl9vcHMtXHUwMDNlY2xlYW51cCgpO1xuIFxuQEAgLTQ3ODYsNiArNDkzNCw4IEBAIHJjdV90b3J0dXJlX2luaXQodm9pZClcbiBcdFx0Zmlyc3RlcnIgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIHVud2luZDtcbiBcdH1cbitcdC8qIEFybSB0aGUgcGVyLUNQVSBwZXJmIGNvdW50ZXJzIHRoYXQgZHJpdmUgLVx1MDAzZWNhbGwoKSBmcm9tIE5NSS4gKi9cbitcdHJjdV90b3J0dXJlX25taV9pbml0KCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucmVhbHJlYWRlcnM7IGkrKykge1xuIFx0XHRyY3VfdG9ydHVyZV9yZWFkZXJfbWJjaGtbaV0ucnRjX2Noa3JkciA9IC0xO1xuIFx0XHRmaXJzdGVyciA9IHRvcnR1cmVfY3JlYXRlX2t0aHJlYWQocmN1X3RvcnR1cmVfcmVhZGVyLCAodm9pZCAqKWksXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9zcmN1dGlueS5jIGIva2VybmVsL3JjdS9zcmN1dGlueS5jXG5pbmRleCA1NThiYThkMzE2ZGI2Li43YTdjMWNlZjQzZTEzIDEwMDY0NFxuLS0tIGEva2VybmVsL3JjdS9zcmN1dGlueS5jXG4rKysgYi9rZXJuZWwvcmN1L3NyY3V0aW55LmNcbkBAIC0xMCw2ICsxMCw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnFfd29yay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbGxpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmVlbXB0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VwZGF0ZV93YWl0LmhcdTAwM2VcbkBAIC0yOSw2ICszMCw4IEBAIGV4dGVybiBpbnQgcmN1X3NjaGVkdWxlcl9hY3RpdmU7XG4gc3RhdGljIExJU1RfSEVBRChzcmN1X2Jvb3RfbGlzdCk7XG4gc3RhdGljIGJvb2wgc3JjdV9pbml0X2RvbmU7XG4gXG4rc3RhdGljIHZvaWQgX19zcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBib29sIGd1YXJkKTtcbitcbiBzdGF0aWMgaW50IGluaXRfc3JjdV9zdHJ1Y3RfZmllbGRzKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuIHtcbiBcdHNzcC1cdTAwM2VzcmN1X2xvY2tfbmVzdGluZ1swXSA9IDA7XG5AQCAtNDMsNiArNDYsOCBAQCBzdGF0aWMgaW50IGluaXRfc3JjdV9zdHJ1Y3RfZmllbGRzKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuIFx0SU5JVF9XT1JLKFx1MDAyNnNzcC1cdTAwM2VzcmN1X3dvcmssIHNyY3VfZHJpdmVfZ3ApO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2c3NwLVx1MDAzZXNyY3Vfd29yay5lbnRyeSk7XG4gXHRpbml0X2lycV93b3JrKFx1MDAyNnNzcC1cdTAwM2VzcmN1X2lycV93b3JrLCBzcmN1X3RpbnlfaXJxX3dvcmspO1xuK1x0aW5pdF9sbGlzdF9oZWFkKFx1MDAyNnNzcC1cdTAwM2VkZWZlcl9jYnMpO1xuK1x0c3NwLVx1MDAzZWRlZmVyX2l3ID0gSVJRX1dPUktfSU5JVF9IQVJEKHNyY3VfZGVmZXJfZHJhaW4pO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTg2LDYgKzkxLDExIEBAIEVYUE9SVF9TWU1CT0xfR1BMKGluaXRfc3JjdV9zdHJ1Y3RfZ2VuZXJpYyk7XG4gdm9pZCBjbGVhbnVwX3NyY3Vfc3RydWN0KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuIHtcbiBcdFdBUk5fT04oc3JjdV9yZWFkZXJzX2FjdGl2ZShzc3ApKTtcbitcdC8qIFJlLWlzc3VlIGFueSBkZWZlcnJlZCBjYWxsYmFja3MsIHRoZW4gd2FpdCBvdXQgLVx1MDAzZWRlZmVyX2l3IGJlZm9yZSBpdCBpcyBmcmVlZC4gKi9cbitcdGlmIChJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKSB7XG4rXHRcdF9fc3JjdV9kZWZlcl9kcmFpbihzc3AsIGZhbHNlKTtcbitcdFx0aXJxX3dvcmtfc3luYyhcdTAwMjZzc3AtXHUwMDNlZGVmZXJfaXcpO1xuK1x0fVxuIFx0aXJxX3dvcmtfc3luYyhcdTAwMjZzc3AtXHUwMDNlc3JjdV9pcnFfd29yayk7XG4gXHRmbHVzaF93b3JrKFx1MDAyNnNzcC1cdTAwM2VzcmN1X3dvcmspO1xuIFx0V0FSTl9PTihzc3AtXHUwMDNlc3JjdV9ncF9ydW5uaW5nKTtcbkBAIC0yMTMsMTEgKzIyMywxMSBAQCBzdGF0aWMgdm9pZCBzcmN1X2dwX3N0YXJ0X2lmX25lZWRlZChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbiB9XG4gXG4gLypcbi0gKiBFbnF1ZXVlIGFuIFNSQ1UgY2FsbGJhY2sgb24gdGhlIHNwZWNpZmllZCBzcmN1X3N0cnVjdCBzdHJ1Y3R1cmUsXG4tICogaW5pdGlhdGluZyBncmFjZS1wZXJpb2QgcHJvY2Vzc2luZyBpZiBpdCBpcyBub3QgYWxyZWFkeSBydW5uaW5nLlxuKyAqIEVucXVldWUgQHJocCBvbiB0aGUgY2FsbGJhY2sgbGlzdC4gIEFsc28gY2FsbGVkIGJ5IHNyY3VfZGVmZXJfZHJhaW4oKSB0b1xuKyAqIHJlLWlzc3VlIGEgZGVmZXJyZWQgY2FsbGJhY2ssIHNvIGl0IG11c3Qgbm90IHJlLWNoZWNrIHRoZSBkZWZlcnJhbCBjb25kaXRpb24uXG4gICovXG4tdm9pZCBjYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxuLVx0ICAgICAgIHJjdV9jYWxsYmFja190IGZ1bmMpXG4rc3RhdGljIHZvaWQgc3JjdV9kb19lbnF1ZXVlKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcbitcdFx0XHQgICAgcmN1X2NhbGxiYWNrX3QgZnVuYylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuQEAgLTIzMSw2ICsyNDEsNTggQEAgdm9pZCBjYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxuIFx0c3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoc3NwKTtcbiBcdHByZWVtcHRfZW5hYmxlKCk7XG4gfVxuK1xuKy8qIFNldCB3aGlsZSBzcmN1X2RlZmVyX2RyYWluKCkgcmUtaXNzdWVzLCB0byBjYXRjaCBhIHJlLWVudHJhbnQgY2FsbF9zcmN1KCkuICovXG4rc3RhdGljIGJvb2wgc3JjdV9kZWZlcl9kcmFpbmluZztcbitcbitzdGF0aWMgdm9pZCBfX3NyY3VfZGVmZXJfZHJhaW4oc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIGJvb2wgZ3VhcmQpXG4re1xuK1x0c3RydWN0IGxsaXN0X25vZGUgKm5vZGUsICpuZXh0O1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcbitcdC8qIENhbGxiYWNrcyBhcmUgdW5vcmRlcmVkLCBzbyBkcmFpbiBpbiBsbGlzdCBvcmRlciB3aXRob3V0IHJldmVyc2luZy4gKi9cbitcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbitcdGlmIChndWFyZClcbitcdFx0V1JJVEVfT05DRShzcmN1X2RlZmVyX2RyYWluaW5nLCB0cnVlKTtcbitcdGxsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgbmV4dCwgbGxpc3RfZGVsX2FsbChcdTAwMjZzc3AtXHUwMDNlZGVmZXJfY2JzKSkge1xuK1x0XHRzdHJ1Y3QgcmN1X2hlYWQgKnJocCA9IChzdHJ1Y3QgcmN1X2hlYWQgKilub2RlO1xuK1xuK1x0XHRyaHAtXHUwMDNlbmV4dCA9IE5VTEw7XG4rXHRcdHNyY3VfZG9fZW5xdWV1ZShzc3AsIHJocCwgcmhwLVx1MDAzZWZ1bmMpO1xuK1x0fVxuK1x0aWYgKGd1YXJkKVxuK1x0XHRXUklURV9PTkNFKHNyY3VfZGVmZXJfZHJhaW5pbmcsIGZhbHNlKTtcbitcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbit9XG4rXG4rLyogT25seSB0aGUgaXJxX3dvcmsgZHJhaW4gY2FuIGJlIHJlLWZlZCBieSBpdHMgb3duIHJlLWlzc3VlOyBzZWUgVHJlZSBTUkNVLiAqL1xuK3ZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KVxuK3tcbitcdF9fc3JjdV9kZWZlcl9kcmFpbihjb250YWluZXJfb2YoaXcsIHN0cnVjdCBzcmN1X3N0cnVjdCwgZGVmZXJfaXcpLCB0cnVlKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoc3JjdV9kZWZlcl9kcmFpbik7XG4rXG4rdm9pZCBjYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxuK1x0ICAgICAgIHJjdV9jYWxsYmFja190IGZ1bmMpXG4re1xuK1x0aWYgKHNob3VsZF9yY3VfZGVmZXIoKSkge1xuK1x0XHQvKiBBIHJlLWVudHJhbnQgY2FsbF9zcmN1KCkgZHVyaW5nIHRoZSBkcmFpbiB3b3VsZCBsaXZlbG9jayBpdC4gKi9cbitcdFx0aWYgKFJFQURfT05DRShzcmN1X2RlZmVyX2RyYWluaW5nKSBcdTAwMjZcdTAwMjYgIWluX25taSgpKSB7XG4rXHRcdFx0V0FSTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSksXG4rXHRcdFx0XHQgIFwiY2FsbF9zcmN1KCkgcmUtZW50ZXJlZCBkdXJpbmcgY2FsbGJhY2sgZHJhaW47IGxlYWtpbmcgY2FsbGJhY2tcXG5cIik7XG4rXHRcdFx0cmV0dXJuO1xuK1x0XHR9XG4rXHRcdHJocC1cdTAwM2VmdW5jID0gZnVuYztcbitcdFx0aWYgKGxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKilyaHAsIFx1MDAyNnNzcC1cdTAwM2VkZWZlcl9jYnMpKVxuK1x0XHRcdGlycV93b3JrX3F1ZXVlKFx1MDAyNnNzcC1cdTAwM2VkZWZlcl9pdyk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdC8qIEFuIE5NSSByZWFjaGluZyBoZXJlIGVudGVyZWQgd2l0aCBpcnFzIGVuYWJsZWQsIHNvIHRoZSBlbnF1ZXVlIGNhbiByYWNlLiAqL1xuK1x0V0FSTl9PTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSkgXHUwMDI2XHUwMDI2IGluX25taSgpKTtcbitcbitcdHNyY3VfZG9fZW5xdWV1ZShzc3AsIHJocCwgZnVuYyk7XG4rfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGNhbGxfc3JjdSk7XG4gXG4gLypcbkBAIC0yNjAsNiArMzIyLDE1IEBAIHZvaWQgc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfc3JjdSk7XG4gXG4rLyogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcywgdGhlbiB3YWl0IGZvciBhbGwgaW4tZmxpZ2h0IG9uZXMuICovXG4rdm9pZCBzcmN1X2JhcnJpZXIoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4re1xuK1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpXG4rXHRcdF9fc3JjdV9kZWZlcl9kcmFpbihzc3AsIGZhbHNlKTtcbitcdHN5bmNocm9uaXplX3NyY3Uoc3NwKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoc3JjdV9iYXJyaWVyKTtcbitcbiAvKlxuICAqIGdldF9zdGF0ZV9zeW5jaHJvbml6ZV9zcmN1IC0gUHJvdmlkZSBhbiBlbmQtb2YtZ3JhY2UtcGVyaW9kIGNvb2tpZVxuICAqL1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3Uvc3JjdXRyZWUuYyBiL2tlcm5lbC9yY3Uvc3JjdXRyZWUuY1xuaW5kZXggMzA0MTEyNjc0ZThhMi4uMzVmZmFjZTUxZDUwYiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9yY3Uvc3JjdXRyZWUuY1xuKysrIGIva2VybmVsL3JjdS9zcmN1dHJlZS5jXG5AQCAtMjAsNiArMjAsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcmNwdS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJlZW1wdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXJxX3dvcmsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xsaXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VwZGF0ZV93YWl0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc21wLmhcdTAwM2VcbkBAIC03OSw2ICs4MCw0NSBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX3NyY3Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbiBzdGF0aWMgdm9pZCBzcmN1X2lycV93b3JrKHN0cnVjdCBpcnFfd29yayAqd29yayk7XG4gc3RhdGljIHZvaWQgc3JjdV9kZWxheV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XG4gXG4rc3RydWN0IHNyY3VfZGVmZXI7XG4rc3RhdGljIHZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KTtcbitzdGF0aWMgdm9pZCBfX3NyY3VfZGVmZXJfZHJhaW4oc3RydWN0IHNyY3VfZGVmZXIgKnNuZHAsIGJvb2wgZ3VhcmQpO1xuK1xuKy8qXG4rICogUGVyLUNQVSBjYWxsX3NyY3UoKSBkZWZlcnJhbCBzdGF0ZSwgc2hhcmVkIGJ5IGV2ZXJ5IHNyY3Vfc3RydWN0LiAgQSBkZWZlcnJlZFxuKyAqIGNhbGxiYWNrIGlzIHN0YWdlZCBvbiBpdHMgc3JjdV9kYXRhJ3MgLVx1MDAzZWRlZmVyX2NiczsgdGhhdCBzcmN1X2RhdGEgaXMgY2hhaW5lZFxuKyAqIHZpYSAtXHUwMDNlZGVmZXJfbGluayBvbnRvIC1cdTAwM2VsaXN0LCB3aGljaCB0aGUgaXJxX3dvcmsgd2Fsa3MuXG4rICovXG4rc3RydWN0IHNyY3VfZGVmZXIge1xuK1x0c3RydWN0IGxsaXN0X2hlYWRcdGxpc3Q7XG4rXHRzdHJ1Y3QgaXJxX3dvcmtcdFx0aXc7XG4rXHRyYXdfc3BpbmxvY2tfdFx0XHRsb2NrO1xuK1x0Ym9vbFx0XHRcdGRyYWluaW5nO1xuK307XG4rXG4rc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBzcmN1X2RlZmVyLCBzcmN1X2RlZmVyKSA9IHtcbitcdC5sb2NrID0gX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VEKHNyY3VfZGVmZXIubG9jayksXG4rXHQuaXcgPSBJUlFfV09SS19JTklUX0hBUkQoc3JjdV9kZWZlcl9kcmFpbiksXG4rfTtcbitcbisvKlxuKyAqIEZsdXNoIHBlbmRpbmcgZGVmZXJyZWQgY2FsbGJhY2tzIHNvIGEgZm9sbG93aW5nIHNyY3VfYmFycmllcigpIHdhaXRzIGZvciB0aGVtLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHNyY3VfZGVmZXJfZmx1c2godm9pZClcbit7XG4rXHRpbnQgY3B1O1xuK1xuK1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4rXHRcdHN0cnVjdCBzcmN1X2RlZmVyICpzbmRwID0gXHUwMDI2cGVyX2NwdShzcmN1X2RlZmVyLCBjcHUpO1xuK1xuK1x0XHRpZiAoIWxsaXN0X2VtcHR5KFx1MDAyNnNuZHAtXHUwMDNlbGlzdCkpXG4rXHRcdFx0X19zcmN1X2RlZmVyX2RyYWluKHNuZHAsIGZhbHNlKTtcbitcdH1cbit9XG4rXG4gLypcbiAgKiBJbml0aWFsaXplIFNSQ1UgcGVyLUNQVSBkYXRhLiAgTm90ZSB0aGF0IHN0YXRpY2FsbHkgYWxsb2NhdGVkXG4gICogc3JjdV9zdHJ1Y3Qgc3RydWN0dXJlcyBtaWdodCBhbHJlYWR5IGhhdmUgc3JjdV9yZWFkX2xvY2soKSBhbmRcbkBAIC0xMDcsNiArMTQ3LDExIEBAIHN0YXRpYyB2b2lkIGluaXRfc3JjdV9zdHJ1Y3RfZGF0YShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbiBcdFx0c2RwLVx1MDAzZWNwdSA9IGNwdTtcbiBcdFx0SU5JVF9XT1JLKFx1MDAyNnNkcC1cdTAwM2V3b3JrLCBzcmN1X2ludm9rZV9jYWxsYmFja3MpO1xuIFx0XHR0aW1lcl9zZXR1cChcdTAwMjZzZHAtXHUwMDNlZGVsYXlfd29yaywgc3JjdV9kZWxheV90aW1lciwgMCk7XG4rXHRcdC8qXG4rXHRcdCAqIC1cdTAwM2VkZWZlcl9jYnMsIC1cdTAwM2VkZWZlcl9saW5rIGFuZCAtXHUwMDNlZGVmZXJfZXhwIGFyZSB2YWxpZCB3aGVuIHplcm9lZFxuK1x0XHQgKiBhbmQgYXJlIG5vdCByZWluaXRpYWxpemVkIGhlcmUsIGxlc3Qgd2UgY2xvYmJlciBjYWxsYmFja3MgYVxuK1x0XHQgKiByZWVudHJhbnQgY2FsbF9zcmN1KCkgYWxyZWFkeSBzdGFnZWQuICBTZWUgX19jYWxsX3NyY3UoKS5cbitcdFx0ICovXG4gXHRcdHNkcC1cdTAwM2Vzc3AgPSBzc3A7XG4gXHR9XG4gfVxuQEAgLTY5NSw3ICs3NDAsMTIgQEAgdm9pZCBjbGVhbnVwX3NyY3Vfc3RydWN0KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuIFx0XHRyZXR1cm47IC8qIEp1c3QgbGVhayBpdCEgKi9cbiBcdGlmIChXQVJOX09OKHNyY3VfcmVhZGVyc19hY3RpdmUoc3NwKSkpXG4gXHRcdHJldHVybjsgLyogSnVzdCBsZWFrIGl0ISAqL1xuLVx0LyogV2FpdCBmb3IgaXJxX3dvcmsgdG8gZmluaXNoIGZpcnN0IGFzIGl0IG1heSBxdWV1ZSBhIG5ldyB3b3JrLiAqL1xuK1x0LypcbitcdCAqIERyYWluIGRlZmVycmVkIGNhbGxiYWNrcyBiZWZvcmUgc3luY2luZyAtXHUwMDNlaXJxX3dvcms6IHJlLWlzc3Vpbmcgb25lIGNhblxuK1x0ICogc3RhcnQgYSBncmFjZSBwZXJpb2QgYW5kIHJlLXF1ZXVlIC1cdTAwM2VpcnFfd29yaywgd2hpY2ggdGhlbiBzY2hlZHVsZXNcbitcdCAqIC1cdTAwM2V3b3JrLCBzbyBib3RoIG11c3QgYmUgd2FpdGVkIG91dCBhZnRlciB0aGUgZHJhaW4uXG4rXHQgKi9cbitcdHNyY3VfZGVmZXJfZmx1c2goKTtcbiBcdGlycV93b3JrX3N5bmMoXHUwMDI2c3VwLVx1MDAzZWlycV93b3JrKTtcbiBcdGZsdXNoX2RlbGF5ZWRfd29yayhcdTAwMjZzdXAtXHUwMDNld29yayk7XG4gXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG5AQCAtMTQxMCw4ICsxNDYwLDggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsXG4gICogc3JjdV9yZWFkX2xvY2soKSwgYW5kIHNyY3VfcmVhZF91bmxvY2soKSB0aGF0IGFyZSBhbGwgcGFzc2VkIHRoZSBzYW1lXG4gICogc3JjdV9zdHJ1Y3Qgc3RydWN0dXJlLlxuICAqL1xuLXN0YXRpYyB2b2lkIF9fY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcbi1cdFx0XHRyY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGRvX25vcm0pXG4rc3RhdGljIHZvaWQgc3JjdV9kb19lbnF1ZXVlKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcbitcdFx0XHQgICAgcmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBkb19ub3JtKVxuIHtcbiBcdGlmIChkZWJ1Z19yY3VfaGVhZF9xdWV1ZShyaHApKSB7XG4gXHRcdC8qIFByb2JhYmxlIGRvdWJsZSBjYWxsX3NyY3UoKSwgc28gbGVhayB0aGUgY2FsbGJhY2suICovXG5AQCAtMTQyMyw2ICsxNDczLDExMSBAQCBzdGF0aWMgdm9pZCBfX2NhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsXG4gXHQodm9pZClzcmN1X2dwX3N0YXJ0X2lmX25lZWRlZChzc3AsIHJocCwgZG9fbm9ybSk7XG4gfVxuIFxuKy8qXG4rICogVGhlIHNyY3VfY2JsaXN0IGFuZCBzcmN1X25vZGUgdHJlZSBhcmUgb25seSBhY2Nlc3NlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWRcbisgKiAoc3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoKSBlbnF1ZXVlcyB1bmRlciByYXdfc3Bpbl9sb2NrX2lycXNhdmUoKSBhbmQgbWF5IHdhbGtcbisgKiB0aGUgdHJlZSkuICBMaWtlIGNhbGxfcmN1KCksIF9fY2FsbF9zcmN1KCkgZGVmZXJzIHdoZW4gaW50ZXJydXB0cyBhcmUgYWxyZWFkeVxuKyAqIGRpc2FibGVkLCBzbyBhIHJlLWVudHJhbnQgY2FsbF9zcmN1KCkgLS0gZS5nLiBjYWxsX3JjdV90YXNrc190cmFjZSgpIGZyb20gYVxuKyAqIEJQRiBwcm9ncmFtIC0tIGNhbm5vdCBjb3JydXB0IHRoZSBsaXN0IG9yIGRlYWRsb2NrLlxuKyAqL1xuK3N0YXRpYyB2b2lkIF9fY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcbitcdFx0XHRyY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGRvX25vcm0pXG4re1xuK1x0aWYgKHNob3VsZF9yY3VfZGVmZXIoKSkge1xuK1x0XHRzdHJ1Y3Qgc3JjdV9kZWZlciAqc25kcCA9IHRoaXNfY3B1X3B0cihcdTAwMjZzcmN1X2RlZmVyKTtcbitcdFx0c3RydWN0IHNyY3VfZGF0YSAqc2RwO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBJbnN0cnVtZW50YXRpb24gb24gdGhlIGVucXVldWUgcGF0aCBjYW4gcmUtZW50ZXIgaGVyZSBmcm9tXG4rXHRcdCAqIGluc2lkZSBzcmN1X2RlZmVyX2RyYWluKCkuICBSZS1xdWV1aW5nIHdvdWxkIGxpdmVsb2NrIHRoZVxuK1x0XHQgKiBkcmFpbiwgc28gZHJvcCB0aGUgY2FsbGJhY2s7IGFuIE5NSSBjYW5ub3QgbG9vcCwgc28gbGV0IGl0IGluLlxuK1x0XHQgKi9cbitcdFx0aWYgKFJFQURfT05DRShzbmRwLVx1MDAzZWRyYWluaW5nKSBcdTAwMjZcdTAwMjYgIWluX25taSgpKSB7XG4rXHRcdFx0V0FSTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSksXG4rXHRcdFx0XHQgIFwiY2FsbF9zcmN1KCkgcmUtZW50ZXJlZCBkdXJpbmcgY2FsbGJhY2sgZHJhaW47IGxlYWtpbmcgY2FsbGJhY2tcXG5cIik7XG4rXHRcdFx0cmV0dXJuO1xuK1x0XHR9XG4rXHRcdHNkcCA9IHRoaXNfY3B1X3B0cihzc3AtXHUwMDNlc2RhKTtcbitcdFx0cmhwLVx1MDAzZWZ1bmMgPSBmdW5jO1xuK1x0XHRpZiAoIWRvX25vcm0pXG4rXHRcdFx0V1JJVEVfT05DRShzZHAtXHUwMDNlZGVmZXJfZXhwLCB0cnVlKTtcbitcdFx0aWYgKGxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKilyaHAsIFx1MDAyNnNkcC1cdTAwM2VkZWZlcl9jYnMpKSB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBDaGFpbiB0aGlzIHNyY3VfZGF0YSBmb3IgdGhlIGRyYWluLiAgLVx1MDAzZXNzcCBtdXN0IGJlXG4rXHRcdFx0ICogcHVibGlzaGVkIGhlcmU6IGRlZmVycmFsIHNraXBzIGNoZWNrX2luaXRfc3JjdV9zdHJ1Y3QoKSxcbitcdFx0XHQgKiBzbyBvbiBhIG5ldmVyLWluaXRpYWxpemVkIHN0YXRpYyBzcmN1X3N0cnVjdCB0aGVcbitcdFx0XHQgKiBzdGF0aWNhbGx5IHplcm9lZCAtXHUwMDNlc2RhIHN0aWxsIGhhcyBhIE5VTEwgLVx1MDAzZXNzcC5cbitcdFx0XHQgKi9cbitcdFx0XHRzZHAtXHUwMDNlc3NwID0gc3NwO1xuK1x0XHRcdGlmIChsbGlzdF9hZGQoXHUwMDI2c2RwLVx1MDAzZWRlZmVyX2xpbmssIFx1MDAyNnNuZHAtXHUwMDNlbGlzdCkpXG4rXHRcdFx0XHRpcnFfd29ya19xdWV1ZShcdTAwMjZzbmRwLVx1MDAzZWl3KTtcbitcdFx0fVxuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHQvKiBBbiBOTUkgcmVhY2hpbmcgaGVyZSBlbnRlcmVkIHdpdGggaXJxcyBlbmFibGVkLCBzbyB0aGUgZW5xdWV1ZSBjYW4gcmFjZS4gKi9cbitcdFdBUk5fT05fT05DRShJU19FTkFCTEVEKENPTkZJR19QUk9WRV9SQ1UpIFx1MDAyNlx1MDAyNiBpbl9ubWkoKSk7XG4rXG4rXHRzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIGZ1bmMsIGRvX25vcm0pO1xuK31cbitcbisvKlxuKyAqIFJlLWlzc3VlIGRlZmVycmVkIGNhbGxiYWNrcyBzdHJhaWdodCB0byBzcmN1X2RvX2VucXVldWUoKSBzbyB0aGV5IGNhbm5vdCBkZWZlclxuKyAqIGFnYWluLiAgLVx1MDAzZWxvY2sgc2VyaWFsaXplcyB0aGUgZHJhaW5lcnM6IHRoZSBpcnFfd29yaywgc3JjdV9kZWZlcl9mbHVzaCgpIGFuZFxuKyAqIHNyY3Vfb2ZmbGluZV9kcmFpbigpLlxuKyAqL1xuK3N0YXRpYyB2b2lkIF9fc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3Qgc3JjdV9kZWZlciAqc25kcCwgYm9vbCBndWFyZClcbit7XG4rXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqc25vZGUsICpzbmV4dDtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2c25kcC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRpZiAoZ3VhcmQpXG4rXHRcdFdSSVRFX09OQ0Uoc25kcC1cdTAwM2VkcmFpbmluZywgdHJ1ZSk7XG4rXHRsbGlzdF9mb3JfZWFjaF9zYWZlKHNub2RlLCBzbmV4dCwgbGxpc3RfZGVsX2FsbChcdTAwMjZzbmRwLVx1MDAzZWxpc3QpKSB7XG4rXHRcdHN0cnVjdCBzcmN1X2RhdGEgKnNkcCA9IGNvbnRhaW5lcl9vZihzbm9kZSwgc3RydWN0IHNyY3VfZGF0YSwgZGVmZXJfbGluayk7XG4rXHRcdHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwID0gc2RwLVx1MDAzZXNzcDtcbitcdFx0c3RydWN0IGxsaXN0X25vZGUgKmNub2RlLCAqY25leHQ7XG4rXHRcdGJvb2wgZG9fbm9ybTtcbitcbitcdFx0Y25vZGUgPSBsbGlzdF9kZWxfYWxsKFx1MDAyNnNkcC1cdTAwM2VkZWZlcl9jYnMpO1xuK1x0XHRkb19ub3JtID0gIVJFQURfT05DRShzZHAtXHUwMDNlZGVmZXJfZXhwKTtcbitcdFx0aWYgKCFkb19ub3JtKVxuK1x0XHRcdFdSSVRFX09OQ0Uoc2RwLVx1MDAzZWRlZmVyX2V4cCwgZmFsc2UpO1xuK1x0XHRsbGlzdF9mb3JfZWFjaF9zYWZlKGNub2RlLCBjbmV4dCwgY25vZGUpIHtcbitcdFx0XHRzdHJ1Y3QgcmN1X2hlYWQgKnJocCA9IChzdHJ1Y3QgcmN1X2hlYWQgKiljbm9kZTtcbitcbitcdFx0XHRyaHAtXHUwMDNlbmV4dCA9IE5VTEw7XG4rXHRcdFx0c3JjdV9kb19lbnF1ZXVlKHNzcCwgcmhwLCByaHAtXHUwMDNlZnVuYywgZG9fbm9ybSk7XG4rXHRcdH1cbitcdH1cbitcdGlmIChndWFyZClcbitcdFx0V1JJVEVfT05DRShzbmRwLVx1MDAzZWRyYWluaW5nLCBmYWxzZSk7XG4rXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZzbmRwLVx1MDAzZWxvY2ssIGZsYWdzKTtcbit9XG4rXG4rLypcbisgKiBPbmx5IHRoZSBpcnFfd29yayBkcmFpbiBjYW4gYmUgcmUtZmVkIGJ5IGl0cyBvd24gcmUtaXNzdWUsIHNvIG9ubHkgaXQgc2V0c1xuKyAqIC1cdTAwM2VkcmFpbmluZy4gIEEgZGlyZWN0IGRyYWluIHJlLWlzc3VlcyBvbnRvIHRoaXMgQ1BVLCBhbmQgYW55dGhpbmcgc3RhZ2VkXG4rICogZHVyaW5nIGl0IGlzIHBpY2tlZCB1cCBieSB0aGF0IENQVSdzIG93biBpcnFfd29yay5cbisgKi9cbitzdGF0aWMgdm9pZCBzcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpXG4re1xuK1x0X19zcmN1X2RlZmVyX2RyYWluKGNvbnRhaW5lcl9vZihpdywgc3RydWN0IHNyY3VfZGVmZXIsIGl3KSwgdHJ1ZSk7XG4rfVxuK1xuKy8qXG4rICogRHJhaW4gQGNwdSdzIGRlZmVycmVkIGNhbGxfc3JjdSgpIGNhbGxiYWNrcyBmcm9tIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoKVxuKyAqIG9uY2UgQGNwdSBpcyBkZWFkLiAgT25lIHBhc3MgY292ZXJzIGV2ZXJ5IHNyY3Vfc3RydWN0LCBhbmQgdGhlIHJlLWlzc3VlIGxhbmRzXG4rICogb24gdGhlIGN1cnJlbnQgQ1BVLlxuKyAqL1xuK3ZvaWQgc3JjdV9vZmZsaW5lX2RyYWluKGludCBjcHUpXG4re1xuK1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxuK1x0XHRyZXR1cm47XG4rXHRfX3NyY3VfZGVmZXJfZHJhaW4oXHUwMDI2cGVyX2NwdShzcmN1X2RlZmVyLCBjcHUpLCBmYWxzZSk7XG4rfVxuK1xuIC8qKlxuICAqIGNhbGxfc3JjdSgpIC0gUXVldWUgYSBjYWxsYmFjayBmb3IgaW52b2NhdGlvbiBhZnRlciBhbiBTUkNVIGdyYWNlIHBlcmlvZFxuICAqIEBzc3A6IHNyY3Vfc3RydWN0IGluIHF1ZXVlIHRoZSBjYWxsYmFja1xuQEAgLTE2NzcsOSArMTgzMiwxNyBAQCB2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbiB7XG4gXHRpbnQgY3B1O1xuIFx0aW50IGlkeDtcbi1cdHVuc2lnbmVkIGxvbmcgcyA9IHJjdV9zZXFfc25hcChcdTAwMjZzc3AtXHUwMDNlc3JjdV9zdXAtXHUwMDNlc3JjdV9iYXJyaWVyX3NlcSk7XG4rXHR1bnNpZ25lZCBsb25nIHM7XG4gXG4gXHRjaGVja19pbml0X3NyY3Vfc3RydWN0KHNzcCk7XG4rXG4rXHQvKlxuK1x0ICogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcyBiZWZvcmUgc25hcHNob3R0aW5nIHRoZSBzZXF1ZW5jZS4gIFRoZVxuK1x0ICogc2hhcmVkIGlycV93b3JrIG1heSBhbHNvIGRyYWluIG90aGVyIHNyY3Vfc3RydWN0cycsIHdoaWNoIGlzIGhhcm1sZXNzLlxuK1x0ICovXG4rXHRzcmN1X2RlZmVyX2ZsdXNoKCk7XG4rXG4rXHRzID0gcmN1X3NlcV9zbmFwKFx1MDAyNnNzcC1cdTAwM2VzcmN1X3N1cC1cdTAwM2VzcmN1X2JhcnJpZXJfc2VxKTtcbiBcdG11dGV4X2xvY2soXHUwMDI2c3NwLVx1MDAzZXNyY3Vfc3VwLVx1MDAzZXNyY3VfYmFycmllcl9tdXRleCk7XG4gXHRpZiAocmN1X3NlcV9kb25lKFx1MDAyNnNzcC1cdTAwM2VzcmN1X3N1cC1cdTAwM2VzcmN1X2JhcnJpZXJfc2VxLCBzKSkge1xuIFx0XHRzbXBfbWIoKTsgLyogRm9yY2Ugb3JkZXJpbmcgZm9sbG93aW5nIHJldHVybi4gKi9cbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3RpbnkuYyBiL2tlcm5lbC9yY3UvdGlueS5jXG5pbmRleCBkY2NjY2Q2YmU5NDExLi5iYWZmZTY2MDA0M2Y1IDEwMDY0NFxuLS0tIGEva2VybmVsL3JjdS90aW55LmNcbisrKyBiL2tlcm5lbC9yY3UvdGlueS5jXG5AQCAtMTEsNiArMTEsOCBAQFxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBsZXRpb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaXJxX3dvcmsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xsaXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ub3RpZmllci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGVfd2FpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbkBAIC00Miw4ICs0NCw5OSBAQCBzdGF0aWMgc3RydWN0IHJjdV9jdHJsYmxrIHJjdV9jdHJsYmxrID0ge1xuIFx0LmdwX3NlcVx0XHQ9IDAgLSAzMDBVTCxcbiB9O1xuIFxuKy8qXG4rICogVGhlIGNhbGxiYWNrIGxpc3QgaXMgb25seSBhY2Nlc3NlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQsIHNvIGEgY2FsbF9yY3UoKVxuKyAqIHRoYXQgYXJyaXZlcyB3aXRoIGludGVycnVwdHMgb2ZmIHN0YWdlcyB0aGUgY2FsbGJhY2sgb24gYSBsb2NrbGVzcyBsaXN0IHRoYXRcbisgKiBhbiBpcnFfd29yayByZS1pc3N1ZXMgbGF0ZXIuICBPbmUgZ2xvYmFsIGxpc3QgYW5kIGlycV93b3JrIHN1ZmZpY2UsIGFzIFRpbnlcbisgKiBSQ1UgaXMgdW5pcHJvY2Vzc29yLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KTtcbitzdGF0aWMgTExJU1RfSEVBRChyY3VfZGVmZXJfbGlzdCk7XG4rc3RhdGljIHN0cnVjdCBpcnFfd29yayByY3VfZGVmZXJfaXcgPSBJUlFfV09SS19JTklUX0hBUkQocmN1X2RlZmVyX2RyYWluKTtcbitzdGF0aWMgYm9vbCByY3VfZGVmZXJfZHJhaW5pbmc7XG4rXG4rLypcbisgKiBFbnF1ZXVlIEBoZWFkIG9uIHRoZSBjYWxsYmFjayBsaXN0LiAgQWxzbyBjYWxsZWQgYnkgcmN1X2RlZmVyX2RyYWluKCkgdG9cbisgKiByZS1pc3N1ZSBhIGRlZmVycmVkIGNhbGxiYWNrLCBzbyBpdCBtdXN0IG5vdCByZS1jaGVjayB0aGUgZGVmZXJyYWwgY29uZGl0aW9uLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHJjdV9kb19lbnF1ZXVlKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYylcbit7XG4rXHRzdGF0aWMgYXRvbWljX3QgZG91YmxlZnJlZXM7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1xuK1x0aWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKGhlYWQpKSB7XG4rXHRcdGlmIChhdG9taWNfaW5jX3JldHVybihcdTAwMjZkb3VibGVmcmVlcykgXHUwMDNjIDQpIHtcbitcdFx0XHRwcl9lcnIoXCIlcygpOiBEb3VibGUtZnJlZWQgQ0IgJXAtXHUwMDNlJXBTKCkhISEgIFwiLCBfX2Z1bmNfXywgaGVhZCwgaGVhZC1cdTAwM2VmdW5jKTtcbitcdFx0XHRtZW1fZHVtcF9vYmooaGVhZCk7XG4rXHRcdH1cbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aGVhZC1cdTAwM2VmdW5jID0gZnVuYztcbitcdGhlYWQtXHUwMDNlbmV4dCA9IE5VTEw7XG4rXG4rXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4rXHQqcmN1X2N0cmxibGsuY3VydGFpbCA9IGhlYWQ7XG4rXHRyY3VfY3RybGJsay5jdXJ0YWlsID0gXHUwMDI2aGVhZC1cdTAwM2VuZXh0O1xuK1x0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuK1xuK1x0aWYgKHVubGlrZWx5KGlzX2lkbGVfdGFzayhjdXJyZW50KSkpIHtcbitcdFx0LyogZm9yY2Ugc2NoZWR1bGluZyBmb3IgcmN1X3FzKCkgKi9cbitcdFx0cmVzY2hlZF9jcHUoMCk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIF9fcmN1X2RlZmVyX2RyYWluKGJvb2wgZ3VhcmQpXG4re1xuK1x0c3RydWN0IGxsaXN0X25vZGUgKm5vZGUsICpuZXh0O1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcbitcdC8qIENhbGxiYWNrcyBhcmUgdW5vcmRlcmVkLCBzbyBkcmFpbiBpbiBsbGlzdCBvcmRlciB3aXRob3V0IHJldmVyc2luZy4gKi9cbitcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbitcdGlmIChndWFyZClcbitcdFx0V1JJVEVfT05DRShyY3VfZGVmZXJfZHJhaW5pbmcsIHRydWUpO1xuK1x0bGxpc3RfZm9yX2VhY2hfc2FmZShub2RlLCBuZXh0LCBsbGlzdF9kZWxfYWxsKFx1MDAyNnJjdV9kZWZlcl9saXN0KSkge1xuK1x0XHRzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQgPSAoc3RydWN0IHJjdV9oZWFkICopbm9kZTtcbitcbitcdFx0aGVhZC1cdTAwM2VuZXh0ID0gTlVMTDtcbitcdFx0cmN1X2RvX2VucXVldWUoaGVhZCwgaGVhZC1cdTAwM2VmdW5jKTtcbitcdH1cbitcdGlmIChndWFyZClcbitcdFx0V1JJVEVfT05DRShyY3VfZGVmZXJfZHJhaW5pbmcsIGZhbHNlKTtcbitcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbit9XG4rXG4rLyogT25seSB0aGUgaXJxX3dvcmsgZHJhaW4gY2FuIGJlIHJlLWZlZCBieSBpdHMgb3duIHJlLWlzc3VlOyBzZWUgVHJlZSBSQ1UuICovXG4rc3RhdGljIHZvaWQgcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpXG4re1xuK1x0X19yY3VfZGVmZXJfZHJhaW4odHJ1ZSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGNhbGxfcmN1X2RlZmVyKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYylcbit7XG4rXHQvKiBBIHJlLWVudHJhbnQgY2FsbF9yY3UoKSBkdXJpbmcgdGhlIGRyYWluIHdvdWxkIGxpdmVsb2NrIGl0OyBkcm9wIGl0LiAqL1xuK1x0aWYgKFJFQURfT05DRShyY3VfZGVmZXJfZHJhaW5pbmcpIFx1MDAyNlx1MDAyNiAhaW5fbm1pKCkpIHtcbitcdFx0V0FSTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSksXG4rXHRcdFx0ICBcImNhbGxfcmN1KCkgcmUtZW50ZXJlZCBkdXJpbmcgY2FsbGJhY2sgZHJhaW47IGxlYWtpbmcgY2FsbGJhY2tcXG5cIik7XG4rXHRcdHJldHVybjtcbitcdH1cbitcdGhlYWQtXHUwMDNlZnVuYyA9IGZ1bmM7XG4rXHRpZiAobGxpc3RfYWRkKChzdHJ1Y3QgbGxpc3Rfbm9kZSAqKWhlYWQsIFx1MDAyNnJjdV9kZWZlcl9saXN0KSlcbitcdFx0aXJxX3dvcmtfcXVldWUoXHUwMDI2cmN1X2RlZmVyX2l3KTtcbit9XG4rXG4rLyogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcyBzbyBhIGZvbGxvd2luZyByY3VfYmFycmllcigpIHdhaXRzIGZvciB0aGVtLiAqL1xuK3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9mbHVzaCh2b2lkKVxuK3tcbitcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSlcbitcdFx0cmV0dXJuO1xuK1x0X19yY3VfZGVmZXJfZHJhaW4oZmFsc2UpO1xuK31cbitcbiB2b2lkIHJjdV9iYXJyaWVyKHZvaWQpXG4ge1xuK1x0LyogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcyBmaXJzdC4gKi9cbitcdHJjdV9kZWZlcl9mbHVzaCgpO1xuIFx0d2FpdF9yY3VfZ3AoY2FsbF9yY3VfaHVycnkpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKHJjdV9iYXJyaWVyKTtcbkBAIC0xNTcsMjkgKzI1MCwxNSBAQCBFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9yY3UpO1xuICAqL1xuIHZvaWQgY2FsbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jKVxuIHtcbi1cdHN0YXRpYyBhdG9taWNfdCBkb3VibGVmcmVlcztcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tXG4tXHRpZiAoZGVidWdfcmN1X2hlYWRfcXVldWUoaGVhZCkpIHtcbi1cdFx0aWYgKGF0b21pY19pbmNfcmV0dXJuKFx1MDAyNmRvdWJsZWZyZWVzKSBcdTAwM2MgNCkge1xuLVx0XHRcdHByX2VycihcIiVzKCk6IERvdWJsZS1mcmVlZCBDQiAlcC1cdTAwM2UlcFMoKSEhISAgXCIsIF9fZnVuY19fLCBoZWFkLCBoZWFkLVx1MDAzZWZ1bmMpO1xuLVx0XHRcdG1lbV9kdW1wX29iaihoZWFkKTtcbi1cdFx0fVxuK1x0aWYgKHNob3VsZF9yY3VfZGVmZXIoKSkge1xuK1x0XHRjYWxsX3JjdV9kZWZlcihoZWFkLCBmdW5jKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0aGVhZC1cdTAwM2VmdW5jID0gZnVuYztcbi1cdGhlYWQtXHUwMDNlbmV4dCA9IE5VTEw7XG4tXG4tXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4tXHQqcmN1X2N0cmxibGsuY3VydGFpbCA9IGhlYWQ7XG4tXHRyY3VfY3RybGJsay5jdXJ0YWlsID0gXHUwMDI2aGVhZC1cdTAwM2VuZXh0O1xuLVx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuK1x0LyogQW4gTk1JIHJlYWNoaW5nIGhlcmUgZW50ZXJlZCB3aXRoIGlycXMgZW5hYmxlZCwgc28gdGhlIGVucXVldWUgY2FuIHJhY2UuICovXG4rXHRXQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSBcdTAwMjZcdTAwMjYgaW5fbm1pKCkpO1xuIFxuLVx0aWYgKHVubGlrZWx5KGlzX2lkbGVfdGFzayhjdXJyZW50KSkpIHtcbi1cdFx0LyogZm9yY2Ugc2NoZWR1bGluZyBmb3IgcmN1X3FzKCkgKi9cbi1cdFx0cmVzY2hlZF9jcHUoMCk7XG4tXHR9XG4rXHRyY3VfZG9fZW5xdWV1ZShoZWFkLCBmdW5jKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoY2FsbF9yY3UpO1xuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdHJlZS5jIGIva2VybmVsL3JjdS90cmVlLmNcbmluZGV4IDk2ODQ4ZmMxZjAyYjguLmViNmIxMWNmYWQ0NmYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvcmN1L3RyZWUuY1xuKysrIGIva2VybmVsL3JjdS90cmVlLmNcbkBAIC0yNCw2ICsyNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc21wLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VwZGF0ZV93YWl0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbnRlcnJ1cHQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xsaXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvZGVidWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25taS5oXHUwMDNlXG5AQCAtMzE0OCwyMSArMzE0OSwyNSBAQCBzdGF0aWMgdm9pZCBjaGVja19jYl9vdmxkKHN0cnVjdCByY3VfZGF0YSAqcmRwKVxuIFx0cmF3X3NwaW5fdW5sb2NrX3JjdV9ub2RlKHJucCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkXG4tX19jYWxsX3JjdV9jb21tb24oc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGxhenlfaW4pXG4rLypcbisgKiBUaGUgY2FsbGJhY2sgbGlzdCBpcyBvbmx5IGFjY2Vzc2VkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCwgc28gYSBjYWxsX3JjdSgpXG4rICogdGhhdCBhcnJpdmVzIHdpdGggaW50ZXJydXB0cyBvZmYgKHNlZSBzaG91bGRfcmN1X2RlZmVyKCkpIHN0YWdlcyB0aGUgY2FsbGJhY2tcbisgKiBvbiBhIHBlci1DUFUgbGxpc3QgdGhhdCBhbiBpcnFfd29yayByZS1pc3N1ZXMgb25jZSBpbnRlcnJ1cHRzIGFyZSBvbi5cbisgKi9cbitzdGF0aWMgdm9pZCByY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdyk7XG4rXG4rLypcbisgKiBFbnF1ZXVlIEBoZWFkIG9uIHRoaXMgQ1BVJ3MgcmN1X3NlZ2NibGlzdC4gIEFsc28gY2FsbGVkIGJ5IHJjdV9kZWZlcl9kcmFpbigpXG4rICogdG8gcmUtaXNzdWUgYSBkZWZlcnJlZCBjYWxsYmFjaywgc28gaXQgbXVzdCBub3QgcmUtY2hlY2sgdGhlIGRlZmVycmFsXG4rICogY29uZGl0aW9uLiAgRWl0aGVyIGNhbGxlciBtYXkgaGF2ZSBpbnRlcnJ1cHRzIGFscmVhZHkgZGlzYWJsZWQuXG4rICovXG4rc3RhdGljIHZvaWQgcmN1X2RvX2VucXVldWUoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGxhenlfaW4pXG4ge1xuIFx0c3RhdGljIGF0b21pY190IGRvdWJsZWZyZWVzO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGJvb2wgbGF6eTtcbiBcdHN0cnVjdCByY3VfZGF0YSAqcmRwO1xuIFxuLVx0LyogTWlzYWxpZ25lZCByY3VfaGVhZCEgKi9cbi1cdFdBUk5fT05fT05DRSgodW5zaWduZWQgbG9uZyloZWFkIFx1MDAyNiAoc2l6ZW9mKHZvaWQgKikgLSAxKSk7XG4tXG4tXHQvKiBBdm9pZCBOVUxMIGRlcmVmZXJlbmNlIGlmIGNhbGxiYWNrIGlzIE5VTEwuICovXG4tXHRpZiAoV0FSTl9PTl9PTkNFKCFmdW5jKSlcbi1cdFx0cmV0dXJuO1xuLVxuIFx0aWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKGhlYWQpKSB7XG4gXHRcdC8qXG4gXHRcdCAqIFByb2JhYmxlIGRvdWJsZSBjYWxsX3JjdSgpLCBzbyBsZWFrIHRoZSBjYWxsYmFjay5cbkBAIC0zMjA2LDYgKzMyMTEsMTA0IEBAIF9fY2FsbF9yY3VfY29tbW9uKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBsYXp5X2luKVxuIFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuIH1cbiBcbisvKlxuKyAqIFJlLWlzc3VlIGRlZmVycmVkIGNhbGxiYWNrcyBzdHJhaWdodCB0byB0aGUgZW5xdWV1ZSBzbyB0aGV5IGNhbm5vdCBkZWZlclxuKyAqIGFnYWluLiAgLVx1MDAzZWRlZmVyX2xvY2sgc2VyaWFsaXplcyB0aGUgZHJhaW5lcnM6IHRoaXMgQ1BVJ3MgaXJxX3dvcmssXG4rICogcmN1X2RlZmVyX2ZsdXNoKCkgYW5kIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoKS5cbisgKi9cbitzdGF0aWMgdm9pZCBfX3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgcmN1X2RhdGEgKnJkcCwgYm9vbCBndWFyZClcbit7XG4rXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSwgKm5leHQ7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1xuK1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cmRwLVx1MDAzZWRlZmVyX2xvY2ssIGZsYWdzKTtcbitcdGlmIChndWFyZClcbitcdFx0V1JJVEVfT05DRShyZHAtXHUwMDNlZGVmZXJfZHJhaW5pbmcsIHRydWUpO1xuK1x0bGxpc3RfZm9yX2VhY2hfc2FmZShub2RlLCBuZXh0LCBsbGlzdF9kZWxfYWxsKFx1MDAyNnJkcC1cdTAwM2VkZWZlcl9oZWFkKSkge1xuK1x0XHRzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQgPSAoc3RydWN0IHJjdV9oZWFkICopbm9kZTtcbitcbitcdFx0aGVhZC1cdTAwM2VuZXh0ID0gTlVMTDtcbitcdFx0cmN1X2RvX2VucXVldWUoaGVhZCwgaGVhZC1cdTAwM2VmdW5jLCBmYWxzZSk7XG4rXHR9XG4rXHRpZiAoZ3VhcmQpXG4rXHRcdFdSSVRFX09OQ0UocmRwLVx1MDAzZWRlZmVyX2RyYWluaW5nLCBmYWxzZSk7XG4rXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZyZHAtXHUwMDNlZGVmZXJfbG9jaywgZmxhZ3MpO1xuK31cbitcbisvKlxuKyAqIE9ubHkgdGhlIGlycV93b3JrIGRyYWluIGNhbiBiZSByZS1mZWQgYnkgaXRzIG93biByZS1pc3N1ZSwgc28gb25seSBpdCBzZXRzXG4rICogLVx1MDAzZWRlZmVyX2RyYWluaW5nLiAgQSBkaXJlY3QgZHJhaW4gcmUtaXNzdWVzIG9udG8gdGhpcyBDUFUsIGFuZCBhbnl0aGluZ1xuKyAqIHN0YWdlZCBkdXJpbmcgaXQgaXMgcGlja2VkIHVwIGJ5IHRoYXQgQ1BVJ3Mgb3duIGlycV93b3JrLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KVxuK3tcbitcdF9fcmN1X2RlZmVyX2RyYWluKGNvbnRhaW5lcl9vZihpdywgc3RydWN0IHJjdV9kYXRhLCBkZWZlcl93b3JrKSwgdHJ1ZSk7XG4rfVxuK1xuKy8qIFN0YWdlIEBoZWFkIGZvciB0aGlzIENQVSdzIGlycV93b3JrIHdoZW4gY2FsbF9yY3UoKSBjYW5ub3QgZW5xdWV1ZSBub3cuICovXG4rc3RhdGljIHZvaWQgY2FsbF9yY3VfZGVmZXIoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jKVxuK3tcbitcdHN0cnVjdCByY3VfZGF0YSAqcmRwID0gdGhpc19jcHVfcHRyKFx1MDAyNnJjdV9kYXRhKTtcbitcbitcdC8qXG4rXHQgKiBJbnN0cnVtZW50YXRpb24gb24gdGhlIGVucXVldWUgcGF0aCBjYW4gcmUtZW50ZXIgaGVyZSBmcm9tIGluc2lkZVxuK1x0ICogcmN1X2RlZmVyX2RyYWluKCkuICBSZS1xdWV1aW5nIHdvdWxkIGxpdmVsb2NrIHRoZSBkcmFpbiwgc28gZHJvcCB0aGVcbitcdCAqIGNhbGxiYWNrOyBhbiBOTUkgaXMgb25lLXNob3QgYW5kIGNhbm5vdCBsb29wLCBzbyBsZXQgaXQgdGhyb3VnaC5cbitcdCAqL1xuK1x0aWYgKFJFQURfT05DRShyZHAtXHUwMDNlZGVmZXJfZHJhaW5pbmcpIFx1MDAyNlx1MDAyNiAhaW5fbm1pKCkpIHtcbitcdFx0V0FSTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSksXG4rXHRcdFx0ICBcImNhbGxfcmN1KCkgcmUtZW50ZXJlZCBkdXJpbmcgY2FsbGJhY2sgZHJhaW47IGxlYWtpbmcgY2FsbGJhY2tcXG5cIik7XG4rXHRcdHJldHVybjtcbitcdH1cbitcdGhlYWQtXHUwMDNlZnVuYyA9IGZ1bmM7XG4rXHRpZiAobGxpc3RfYWRkKChzdHJ1Y3QgbGxpc3Rfbm9kZSAqKWhlYWQsIFx1MDAyNnJkcC1cdTAwM2VkZWZlcl9oZWFkKSlcbitcdFx0aXJxX3dvcmtfcXVldWUoXHUwMDI2cmRwLVx1MDAzZWRlZmVyX3dvcmspO1xuK31cbitcbisvKlxuKyAqIFJlZ2lzdGVyIHBlbmRpbmcgZGVmZXJyZWQgY2FsbGJhY2tzIGludG8gdGhlIGNhbGxiYWNrIGxpc3RzIHNvIGEgZm9sbG93aW5nXG4rICogcmN1X2JhcnJpZXIoKSB3YWl0cyBmb3IgdGhlbS4gIFRoaXMgcnVucyBiZWZvcmUgcmN1X2JhcnJpZXIoKSBzY2FucyB0aGVcbisgKiBsaXN0cy5cbisgKi9cbitzdGF0aWMgdm9pZCByY3VfZGVmZXJfZmx1c2godm9pZClcbit7XG4rXHRpbnQgY3B1O1xuK1xuK1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4rXHRcdHN0cnVjdCByY3VfZGF0YSAqcmRwID0gcGVyX2NwdV9wdHIoXHUwMDI2cmN1X2RhdGEsIGNwdSk7XG4rXG4rXHRcdGlmICghbGxpc3RfZW1wdHkoXHUwMDI2cmRwLVx1MDAzZWRlZmVyX2hlYWQpKVxuK1x0XHRcdF9fcmN1X2RlZmVyX2RyYWluKHJkcCwgZmFsc2UpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZFxuK19fY2FsbF9yY3VfY29tbW9uKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBsYXp5X2luKVxuK3tcbitcdC8qIE1pc2FsaWduZWQgcmN1X2hlYWQhICovXG4rXHRXQVJOX09OX09OQ0UoKHVuc2lnbmVkIGxvbmcpaGVhZCBcdTAwMjYgKHNpemVvZih2b2lkICopIC0gMSkpO1xuK1xuK1x0LyogQXZvaWQgTlVMTCBkZXJlZmVyZW5jZSBpZiBjYWxsYmFjayBpcyBOVUxMLiAqL1xuK1x0aWYgKFdBUk5fT05fT05DRSghZnVuYykpXG4rXHRcdHJldHVybjtcbitcbitcdGlmIChzaG91bGRfcmN1X2RlZmVyKCkpIHtcbitcdFx0Y2FsbF9yY3VfZGVmZXIoaGVhZCwgZnVuYyk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdC8qIEFuIE5NSSByZWFjaGluZyBoZXJlIGVudGVyZWQgd2l0aCBpcnFzIGVuYWJsZWQsIHNvIHRoZSBlbnF1ZXVlIGNhbiByYWNlLiAqL1xuK1x0V0FSTl9PTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSkgXHUwMDI2XHUwMDI2IGluX25taSgpKTtcbitcbitcdHJjdV9kb19lbnF1ZXVlKGhlYWQsIGZ1bmMsIGxhenlfaW4pO1xuK31cbitcbiAjaWZkZWYgQ09ORklHX1JDVV9MQVpZXG4gc3RhdGljIGJvb2wgZW5hYmxlX3JjdV9sYXp5IF9fcmVhZF9tb3N0bHkgPSAhSVNfRU5BQkxFRChDT05GSUdfUkNVX0xBWllfREVGQVVMVF9PRkYpO1xuIG1vZHVsZV9wYXJhbShlbmFibGVfcmN1X2xhenksIGJvb2wsIDA0NDQpO1xuQEAgLTM4OTYsOCArMzk5OSwxMiBAQCB2b2lkIHJjdV9iYXJyaWVyKHZvaWQpXG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0dW5zaWduZWQgbG9uZyBnc2VxO1xuIFx0c3RydWN0IHJjdV9kYXRhICpyZHA7XG4tXHR1bnNpZ25lZCBsb25nIHMgPSByY3Vfc2VxX3NuYXAoXHUwMDI2cmN1X3N0YXRlLmJhcnJpZXJfc2VxdWVuY2UpO1xuK1x0dW5zaWduZWQgbG9uZyBzO1xuIFxuK1x0LyogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcyBiZWZvcmUgc25hcHNob3R0aW5nIHRoZSBzZXF1ZW5jZS4gKi9cbitcdHJjdV9kZWZlcl9mbHVzaCgpO1xuK1xuK1x0cyA9IHJjdV9zZXFfc25hcChcdTAwMjZyY3Vfc3RhdGUuYmFycmllcl9zZXF1ZW5jZSk7XG4gXHRyY3VfYmFycmllcl90cmFjZShUUFMoXCJCZWdpblwiKSwgLTEsIHMpO1xuIFxuIFx0LyogVGFrZSBtdXRleCB0byBzZXJpYWxpemUgY29uY3VycmVudCByY3VfYmFycmllcigpIHJlcXVlc3RzLiAqL1xuQEAgLTQyMzEsNiArNDMzOCwxMCBAQCByY3VfYm9vdF9pbml0X3BlcmNwdV9kYXRhKGludCBjcHUpXG4gXHRyZHAtXHUwMDNlcmN1X29ubF9ncF9zdGF0ZSA9IFJDVV9HUF9DTEVBTkVEO1xuIFx0cmRwLVx1MDAzZWxhc3Rfc2NoZWRfY2xvY2sgPSBqaWZmaWVzO1xuIFx0cmRwLVx1MDAzZWNwdSA9IGNwdTtcbitcdGluaXRfbGxpc3RfaGVhZChcdTAwMjZyZHAtXHUwMDNlZGVmZXJfaGVhZCk7XG4rXHRyYXdfc3Bpbl9sb2NrX2luaXQoXHUwMDI2cmRwLVx1MDAzZWRlZmVyX2xvY2spO1xuK1x0LyogSGFyZCBpcnFfd29yayBzbyB0aGUgcmUtaXNzdWUgcnVucyBwcm9tcHRseS4gKi9cbitcdHJkcC1cdTAwM2VkZWZlcl93b3JrID0gSVJRX1dPUktfSU5JVF9IQVJEKHJjdV9kZWZlcl9kcmFpbik7XG4gXHRyY3VfYm9vdF9pbml0X25vY2JfcGVyY3B1X2RhdGEocmRwKTtcbiB9XG4gXG5AQCAtNDUyOCw2ICs0NjM5LDE2IEBAIHZvaWQgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcyhpbnQgY3B1KVxuIFx0c3RydWN0IHJjdV9kYXRhICpyZHAgPSBwZXJfY3B1X3B0cihcdTAwMjZyY3VfZGF0YSwgY3B1KTtcbiBcdGJvb2wgbmVlZHdha2U7XG4gXG4rXHQvKlxuK1x0ICogQ2FsbGJhY2tzIHRoZSBvdXRnb2luZyBDUFUgZGVmZXJyZWQgbGF0ZSBpbiB0aGUgb2ZmbGluZSBwYXRoIChwYXN0IHRoZVxuK1x0ICogcG9pbnQgaXRzIGlycV93b3JrIGNhbiBydW4pIHNpdCBvbiAtXHUwMDNlZGVmZXJfaGVhZCwgd2hpY2ggdGhlIC1cdTAwM2VjYmxpc3RcbitcdCAqIG1pZ3JhdGlvbiBiZWxvdyBkb2VzIG5vdCBjb3Zlci4gIERyYWluIHRoZW0gaGVyZSwgYmVmb3JlIHRoZSBlYXJseVxuK1x0ICogcmV0dXJuczsgdGhlIHJlLWlzc3VlIGxhbmRzIG9uIHRoaXMgQ1BVLlxuK1x0ICovXG4rXHRfX3JjdV9kZWZlcl9kcmFpbihyZHAsIGZhbHNlKTtcbitcdC8qIExpa2V3aXNlIGZvciB0aGUgb3V0Z29pbmcgQ1BVJ3MgZGVmZXJyZWQgY2FsbF9zcmN1KCkgY2FsbGJhY2tzLiAqL1xuK1x0c3JjdV9vZmZsaW5lX2RyYWluKGNwdSk7XG4rXG4gXHRpZiAocmN1X3JkcF9pc19vZmZsb2FkZWQocmRwKSlcbiBcdFx0cmV0dXJuO1xuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdHJlZS5oIGIva2VybmVsL3JjdS90cmVlLmhcbmluZGV4IGVlZGZhNDMwNTllODAuLmI3Y2FjN2ExM2I0ZjIgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvcmN1L3RyZWUuaFxuKysrIGIva2VybmVsL3JjdS90cmVlLmhcbkBAIC0yMjksNiArMjI5LDEyIEBAIHN0cnVjdCByY3VfZGF0YSB7XG4gXHRzdHJ1Y3QgcmN1X2hlYWQgYmFycmllcl9oZWFkO1xuIFx0aW50IGV4cF93YXRjaGluZ19zbmFwO1x0XHQvKiBEb3VibGUtY2hlY2sgbmVlZCBmb3IgSVBJLiAqL1xuIFxuK1x0LyogRGVmZXJyYWwgb2YgYW4gTk1JL3JlZW50cmFudCBjYWxsX3JjdSgpOyBzZWUgX19jYWxsX3JjdV9jb21tb24oKS4gKi9cbitcdHN0cnVjdCBsbGlzdF9oZWFkIGRlZmVyX2hlYWQ7XG4rXHRzdHJ1Y3QgaXJxX3dvcmsgZGVmZXJfd29yaztcbitcdHJhd19zcGlubG9ja190IGRlZmVyX2xvY2s7XG4rXHRib29sIGRlZmVyX2RyYWluaW5nO1xuK1xuIFx0LyogNSkgQ2FsbGJhY2sgb2ZmbG9hZGluZy4gKi9cbiAjaWZkZWYgQ09ORklHX1JDVV9OT0NCX0NQVVxuIFx0c3RydWN0IHN3YWl0X3F1ZXVlX2hlYWQgbm9jYl9jYl93cTsgLyogRm9yIG5vY2Iga3RocmVhZHMgdG8gc2xlZXAgb24uICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmN1X3JlZW50cnkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JjdV9yZWVudHJ5LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5mYTgxM2QxZDQ5MmI2XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yY3VfcmVlbnRyeS5jXG5AQCAtMCwwICsxLDk1IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKlxuKyAqIEV4ZXJjaXNlIHJlLWVudHJ5IGludG8gY2FsbF9zcmN1KCkgZnJvbSBCUEY7IHNlZSBwcm9ncy9yY3VfcmVlbnRyeS5jLlxuKyAqXG4rICogT24gYSBrZXJuZWwgd2l0aG91dCB0aGUgY2FsbF9zcmN1KCkgYW55LWNvbnRleHQgZml4IHRoZSBuZXN0ZWQgY2FsbFxuKyAqIHNlbGYtZGVhZGxvY2tzIG9uIHRoZSBzcmN1X2RhdGEgbG9jaywgc28gdGhpcyBoYW5ncyByYXRoZXIgdGhhbiBmYWlscy5cbisgKi9cbisjZGVmaW5lIF9HTlVfU09VUkNFXG4rI2luY2x1ZGUgXHUwMDNjc2NoZWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbisjaW5jbHVkZSBcInJjdV9yZWVudHJ5LnNrZWwuaFwiXG4rXG4rc3RhdGljIGludCBzeXNfcGlkZmRfb3BlbihwaWRfdCBwaWQsIHVuc2lnbmVkIGludCBmbGFncylcbit7XG4rXHRyZXR1cm4gc3lzY2FsbChfX05SX3BpZGZkX29wZW4sIHBpZCwgZmxhZ3MpO1xuK31cbitcbisvKiBUaW55IFJDVSBidWlsZHMgaGF2ZSBubyByY3Vfc2VnY2JsaXN0X2VucXVldWUoKSB0byBhdHRhY2ggdG8uICovXG4rc3RhdGljIGJvb2wgaGF2ZV9hdHRhY2hfdGFyZ2V0KHZvaWQpXG4re1xuK1x0Y2hhciBidWZbMjU2XTtcbitcdGJvb2wgZm91bmQgPSBmYWxzZTtcbitcdEZJTEUgKmY7XG4rXG4rXHRmID0gZm9wZW4oXCIvcHJvYy9rYWxsc3ltc1wiLCBcInJcIik7XG4rXHRpZiAoIWYpXG4rXHRcdHJldHVybiB0cnVlO1x0LyogY2Fubm90IHRlbGw7IGxldCB0aGUgYXR0YWNoIGRlY2lkZSAqL1xuK1x0d2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGYpKSB7XG4rXHRcdGlmIChzdHJzdHIoYnVmLCBcIiByY3Vfc2VnY2JsaXN0X2VucXVldWVcXG5cIikpIHtcbitcdFx0XHRmb3VuZCA9IHRydWU7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH1cbitcdGZjbG9zZShmKTtcbitcdHJldHVybiBmb3VuZDtcbit9XG4rXG4rdm9pZCB0ZXN0X3JjdV9yZWVudHJ5KHZvaWQpXG4re1xuK1x0c3RydWN0IHJjdV9yZWVudHJ5ICpza2VsO1xuK1x0aW50IGVyciwgcGlkZmQgPSAtMSwgbWFwX2ZkO1xuK1x0Y3B1X3NldF90IHNldCwgb2xkX3NldDtcbitcdGJvb2wgYWZmaW5pdHlfc2F2ZWQ7XG4rXHRfX3U2NCB2YWwgPSAxO1xuK1xuK1x0aWYgKCFoYXZlX2F0dGFjaF90YXJnZXQoKSkge1xuK1x0XHR0ZXN0X19za2lwKCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHNrZWwgPSByY3VfcmVlbnRyeV9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwic2tlbF9vcGVuX2FuZF9sb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRlcnIgPSByY3VfcmVlbnRyeV9fYXR0YWNoKHNrZWwpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInNrZWxfYXR0YWNoXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qIEtlZXAgdGhlIHJlLWVudHJ5IG9uIGEgc2luZ2xlIENQVS4gKi9cbitcdGFmZmluaXR5X3NhdmVkID0gIXNjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihvbGRfc2V0KSwgXHUwMDI2b2xkX3NldCk7XG4rXHRDUFVfWkVSTyhcdTAwMjZzZXQpO1xuK1x0Q1BVX1NFVCgwLCBcdTAwMjZzZXQpO1xuK1x0aWYgKCFBU1NFUlRfT0soc2NoZWRfc2V0YWZmaW5pdHkoMCwgc2l6ZW9mKHNldCksIFx1MDAyNnNldCksIFwic2V0YWZmaW5pdHlcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0cGlkZmQgPSBzeXNfcGlkZmRfb3BlbihnZXRwaWQoKSwgMCk7XG4rXHRpZiAoIUFTU0VSVF9HRShwaWRmZCwgMCwgXCJwaWRmZF9vcGVuXCIpKVxuK1x0XHRnb3RvIHJlc3RvcmU7XG4rXHRtYXBfZmQgPSBicGZfbWFwX19mZChza2VsLVx1MDAzZW1hcHMudGFza19zdGcpO1xuK1x0ZXJyID0gYnBmX21hcF91cGRhdGVfZWxlbShtYXBfZmQsIFx1MDAyNnBpZGZkLCBcdTAwMjZ2YWwsIEJQRl9OT0VYSVNUKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJib290X2NyZWF0ZVwiKSlcbitcdFx0Z290byByZXN0b3JlO1xuK1xuK1x0LyogQXJtIHRoZSBoYW5kbGVyIGZvciB0aGlzIHRocmVhZCwgdGhlbiB0cmlnZ2VyIGNhbGxfcmN1X3Rhc2tzX3RyYWNlKCkuICovXG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2V0YXJnZXRfcGlkID0gc3lzY2FsbChfX05SX2dldHRpZCk7XG4rXHRlcnIgPSBicGZfbWFwX2RlbGV0ZV9lbGVtKG1hcF9mZCwgXHUwMDI2cGlkZmQpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcImJvb3RfZGVsZXRlXCIpKVxuK1x0XHRnb3RvIHJlc3RvcmU7XG4rXG4rXHQvKiBPbmx5IFRyZWUgU1JDVSBlbnF1ZXVlcyB2aWEgcmN1X3NlZ2NibGlzdF9lbnF1ZXVlKCk7IHNraXAgZWxzZXdoZXJlLiAqL1xuK1x0aWYgKCFza2VsLVx1MDAzZWJzcy1cdTAwM2VoaXRzKSB7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0Z290byByZXN0b3JlO1xuK1x0fVxuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWdldF9lcnJzLCAwLCBcIm5lc3RlZF9zdG9yYWdlX2dldFwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VkZWxfZXJycywgMCwgXCJuZXN0ZWRfc3RvcmFnZV9kZWxldGVcIik7XG4rcmVzdG9yZTpcbitcdGlmIChhZmZpbml0eV9zYXZlZClcbitcdFx0c2NoZWRfc2V0YWZmaW5pdHkoMCwgc2l6ZW9mKG9sZF9zZXQpLCBcdTAwMjZvbGRfc2V0KTtcbitvdXQ6XG4rXHRpZiAocGlkZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShwaWRmZCk7XG4rXHRyY3VfcmVlbnRyeV9fZGVzdHJveShza2VsKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JjdV9yZWVudHJ5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmN1X3JlZW50cnkuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjQ3YTM2ZjcwNGNmM2Vcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yY3VfcmVlbnRyeS5jXG5AQCAtMCwwICsxLDUxIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKlxuKyAqIFJlLWVudGVyIGNhbGxfc3JjdSgpIGZyb20gYSBCUEYgcHJvZ3JhbS4gIGZlbnRyeSBvbiByY3Vfc2VnY2JsaXN0X2VucXVldWUoKVxuKyAqIGZpcmVzIGluc2lkZSBjYWxsX3NyY3UoKSdzIGVucXVldWUgKHJlYWNoZWQgZnJvbSBzcmN1X2dwX3N0YXJ0X2lmX25lZWRlZCgpXG4rICogd2l0aCB0aGUgc3JjdV9kYXRhIC1cdTAwM2Vsb2NrIGhlbGQpOyB0aGUgaGFuZGxlciB0aGVuIGNhbGxzIGNhbGxfcmN1X3Rhc2tzX3RyYWNlKClcbisgKiAtLSBpdHNlbGYgY2FsbF9zcmN1KCkgb24gcmN1X3Rhc2tzX3RyYWNlX3NyY3Vfc3RydWN0IC0tIHJlLWVudGVyaW5nIHRoZSBzYW1lXG4rICogc3JjdV9kYXRhIG9uIHRoZSBzYW1lIENQVS5cbisgKi9cbisjaW5jbHVkZSBcInZtbGludXguaFwiXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbitcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9UQVNLX1NUT1JBR0UpO1xuK1x0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTk9fUFJFQUxMT0MpO1xuK1x0X190eXBlKGtleSwgaW50KTtcbitcdF9fdHlwZSh2YWx1ZSwgX191NjQpO1xuK30gdGFza19zdGcgU0VDKFwiLm1hcHNcIik7XG4rXG4raW50IHRhcmdldF9waWQ7XG4raW50IGhpdHM7XG4raW50IGdldF9lcnJzO1xuK2ludCBkZWxfZXJycztcbitpbnQgZG9uZTtcbitcbitTRUMoXCJmZW50cnkvcmN1X3NlZ2NibGlzdF9lbnF1ZXVlXCIpXG4raW50IEJQRl9QUk9HKHJlZW50ZXIpXG4re1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICpjdXI7XG4rXG4rXHRpZiAoZG9uZSB8fCAhdGFyZ2V0X3BpZClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRjdXIgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbitcdGlmIChjdXItXHUwMDNlcGlkICE9IHRhcmdldF9waWQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0LyogSXNzdWUgdGhlIG5lc3RlZCBjYWxsIGV4YWN0bHkgb25jZSwgc28gdGhlIHRlc3QgaXMgZGV0ZXJtaW5pc3RpYy4gKi9cbitcdGRvbmUgPSAxO1xuK1x0X19zeW5jX2ZldGNoX2FuZF9hZGQoXHUwMDI2aGl0cywgMSk7XG4rXG4rXHQvKiBSZS1lbnRlciB2aWEgYSB0YXNrLXN0b3JhZ2UgZGVsZXRlLCB3aGljaCBjYWxscyBjYWxsX3JjdV90YXNrc190cmFjZSgpLiAqL1xuK1x0aWYgKCFicGZfdGFza19zdG9yYWdlX2dldChcdTAwMjZ0YXNrX3N0ZywgY3VyLCAwLCBCUEZfTE9DQUxfU1RPUkFHRV9HRVRfRl9DUkVBVEUpKVxuK1x0XHRfX3N5bmNfZmV0Y2hfYW5kX2FkZChcdTAwMjZnZXRfZXJycywgMSk7XG4rXHRlbHNlIGlmIChicGZfdGFza19zdG9yYWdlX2RlbGV0ZShcdTAwMjZ0YXNrX3N0ZywgY3VyKSlcbitcdFx0X19zeW5jX2ZldGNoX2FuZF9hZGQoXHUwMDI2ZGVsX2VycnMsIDEpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTM6MzE6NDAuOTM5MjI3ODExWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU3NjIxMjQxMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBQbGFuIGZvciBSQ1UvU1JDVSBEZWZlcnJhbCBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBzZXJpZXMuIEl0J3MgZGVmZXJyaW5nIGBjYWxsX3JjdSgpYCBhbmQgYGNhbGxfc3JjdSgpYCBjYWxsYmFja3Mgd2hlbiBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCwgd2hpY2ggc2VlbXMgbGlrZSBhIHNvbGlkIG1vdmUgdG8gcHJldmVudCB0aG9zZSBuYXN0eSBkZWFkbG9ja3MgYW5kIGxpc3QgY29ycnVwdGlvbnMgd2Ugc29tZXRpbWVzIHNlZSwgZXNwZWNpYWxseSB3aXRoIHRob3NlIHBlc2t5IEJQRiBwcm9ncmFtcyBhbmQgTk1Jcy4gSSd2ZSBhbHJlYWR5IGNvbmZpcm1lZCB0aGF0IGl0IG1vZGlmaWVzIGtleSBSQ1UgbG9naWMuXG5cbkZpcnN0LCBJIG5lZWQgdG8gc2VlIGlmIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYW55ICpuZXcqIGZ1bmN0aW9uYWxpdHkgdGhhdCB3ZSBuZWVkIHRvIGhpdCB3aXRoIG91ciBmdXp6aW5nIGVmZm9ydHMuIFllcywgdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBhIG5ldyBjb25maWd1cmF0aW9uIG9wdGlvbjogYENPTkZJR19SQ1VfREVGRVJgLiBJdCBhbHNvIG1vZGlmaWVzIGByY3V0b3J0dXJlYCwgc3BlY2lmaWNhbGx5IHRvIHRlc3QgTk1JIGNhbGxzLlxuXG5Ob3csIGxldCdzIHplcm8gaW4gb24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIHRhcmdldC4gSSdtIHRoaW5raW5nIHdlIHNob3VsZCBkZWZpbml0ZWx5IGZvY3VzIG9uIGBjYWxsX3JjdWAsIGBjYWxsX3NyY3VgLCBgc3JjdV9iYXJyaWVyYCwgYW5kIGByY3VfYmFycmllcmAuIFdlIGFsc28gaGF2ZSBgcmN1X2RlZmVyX2RyYWluYCBhbmQgYHNyY3VfZGVmZXJfZHJhaW5gLlxuXG5JIGp1c3QgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBkb2luZyB0aGUgcmlnaHQgdGhpbmcuIEJhc2VkIG9uIHdoYXQgSSBoYXZlIHJlYWQsIGBDT05GSUdfUkNVX0RFRkVSYCBpcyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgaWYgd2UgaGF2ZSBOTUlzLCBLUFJPQkVTLCBvciBvdGhlciB0cmFjaW5nIGVuYWJsZWQuIEknbGwganVzdCBuZWVkIHRvIGxpc3QgYFJDVV9ERUZFUmAgaW4gdGhlIGBFbmFibGVDb25maWdzYC5cblxuTG9va2luZyBhdCBga2VybmVsL3JjdS9yY3V0b3J0dXJlLmNgLCBJIHNlZSBpdCBub3cgaW5jb3Jwb3JhdGVzIGBubWlfY2FsbHNgIGFzIGEgcGFyYW1ldGVyIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJdCBtb2RpZmllZCBgY2FsbF9zcmN1YCwgYHNyY3VfYmFycmllcmAsIGBjYWxsX3JjdWAsIGByY3VfYmFycmllcmAsIGBzcmN1X29mZmxpbmVfZHJhaW5gLCBhbmQgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGF0IGBjYWxsX3JjdWAgYW5kIGBjYWxsX3NyY3VgIGFyZSBleHBvcnRlZCBhbmQgY2FuIGJlIGNhbGxlZCBmcm9tIGFueXdoZXJlLiBZZXAsIHRoZXkgYXJlLiBUaGV5IGFyZSBjb3JlIGtlcm5lbCBBUElzLlxuXG5GaW5hbGx5LCBJJ2xsIGhpdCBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgaW50ZXJlc3RpbmcgZnVuY3Rpb25zIGluIHRoZXNlIHBhdGNoZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTI5LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTY0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTM6MzE6NTYuNzAxMzU0ODM1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjgyODYyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHZvaWR8aW50fGJvb2wpIFthLXowLTlfXStcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvcmN1L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDExMDIgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmtlcm5lbC9yY3UvcmN1Lmg9Mjk3PWV4dGVybiBib29sIHJjdV9leHBfc3RhbGxfdGFza19kZXRhaWxzIF9fcmVhZF9tb3N0bHk7XFxua2VybmVsL3JjdS9yY3UuaDoyOTg6aW50IHJjdV9qaWZmaWVzX3RpbGxfc3RhbGxfY2hlY2sodm9pZCk7XFxua2VybmVsL3JjdS9yY3UuaDoyOTk6aW50IHJjdV9leHBfamlmZmllc190aWxsX3N0YWxsX2NoZWNrKHZvaWQpO1xcbmtlcm5lbC9yY3UvcmN1LmgtMzAwLVxcbi0tXFxua2VybmVsL3JjdS9yY3UuaD0zMzk9ZG8geyBcXFxcXFxuLS1cXG5rZXJuZWwvcmN1L3JjdS5oLTM1MC1cXG5rZXJuZWwvcmN1L3JjdS5oOjM1MTp2b2lkIHJjdV9lYXJseV9ib290X3Rlc3RzKHZvaWQpO1xcbmtlcm5lbC9yY3UvcmN1Lmg6MzUyOnZvaWQgcmN1X3Rlc3Rfc3luY19wcmltcyh2b2lkKTtcXG5rZXJuZWwvcmN1L3JjdS5oLTM1My1cXG4tLVxcbmtlcm5lbC9yY3UvcmN1Lmg9NTM3PXN0YXRpYyBpbmxpbmUgYm9vbCByY3VfY3B1X29ubGluZShpbnQgY3B1KSB7IHJldHVybiB0cnVlOyB9XFxua2VybmVsL3JjdS9yY3UuaC01MzgtI2Vsc2UgLyogI2lmZGVmIENPTkZJR19USU5ZX1JDVSAqL1xcbmtlcm5lbC9yY3UvcmN1Lmg6NTM5OmJvb2wgcmN1X2dwX2lzX25vcm1hbCh2b2lkKTsgICAgIC8qIEludGVybmFsIFJDVSB1c2UuICovXFxua2VybmVsL3JjdS9yY3UuaDo1NDA6Ym9vbCByY3VfZ3BfaXNfZXhwZWRpdGVkKHZvaWQpOyAgLyogSW50ZXJuYWwgUkNVIHVzZS4gKi9cXG5rZXJuZWwvcmN1L3JjdS5oOjU0MTpib29sIHJjdV9hc3luY19zaG91bGRfaHVycnkodm9pZCk7ICAvKiBJbnRlcm5hbCBSQ1UgdXNlLiAqL1xcbmtlcm5lbC9yY3UvcmN1Lmg6NTQyOnZvaWQgcmN1X2V4cGVkaXRlX2dwKHZvaWQpO1xcbmtlcm5lbC9yY3UvcmN1Lmg6NTQzOnZvaWQgcmN1X3VuZXhwZWRpdGVfZ3Aodm9pZCk7XFxua2VybmVsL3JjdS9yY3UuaDo1NDQ6dm9pZCByY3VfYXN5bmNfaHVycnkodm9pZCk7XFxua2VybmVsL3JjdS9yY3UuaDo1NDU6dm9pZCByY3VfYXN5bmNfcmVsYXgodm9pZCk7XFxua2VybmVsL3JjdS9yY3UuaDo1NDY6dm9pZCByY3VwZGF0ZV9hbm5vdW5jZV9ib290dXBfb2RkbmVzcyh2b2lkKTtcXG5rZXJuZWwvcmN1L3JjdS5oOjU0Nzpib29sIHJjdV9jcHVfb25saW5lKGludCBjcHUpO1xcbmtlcm5lbC9yY3UvcmN1LmgtNTQ4LSNpZmRlZiBDT05GSUdfVEFTS1NfUkNVX0dFTkVSSUNcXG5rZXJuZWwvcmN1L3JjdS5oOjU0OTp2b2lkIHNob3dfcmN1X3Rhc2tzX2dwX2t0aHJlYWRzKHZvaWQpO1xcbmtlcm5lbC9yY3UvcmN1LmgtNTUwLSNlbHNlIC8qICNpZmRlZiBDT05GSUdfVEFTS1NfUkNVX0dFTkVSSUMgKi9cXG4tLVxcbmtlcm5lbC9yY3UvcmN1Lmg9NTU2PXN0cnVjdCB0YXNrX3N0cnVjdCAqZ2V0X3JjdV90YXNrc19ncF9rdGhyZWFkKHZvaWQpO1xcbmtlcm5lbC9yY3UvcmN1Lmg6NTU3OnZvaWQgcmN1X3Rhc2tzX2dldF9ncF9kYXRhKGludCAqZmxhZ3MsIHVuc2lnbmVkIGxvbmcgKmdwX3NlcSk7XFxua2VybmVsL3JjdS9yY3UuaC01NTgtI2VuZGlmIC8vICMgaWZkZWYgQ09ORklHX1RBU0tTX1JDVVxcbi0tXFxua2VybmVsL3JjdS9yY3UuaD01NjE9c3RydWN0IHRhc2tfc3RydWN0ICpnZXRfcmN1X3Rhc2tzX3J1ZGVfZ3Bfa3RocmVhZCh2b2lkKTtcXG5rZXJuZWwvcmN1L3JjdS5oOjU2Mjp2b2lkIHJjdV90YXNrc19ydWRlX2dldF9ncF9kYXRhKGludCAqZmxhZ3MsIHVuc2lnbmVkIGxvbmcgKmdwX3NlcSk7XFxua2VybmVsL3JjdS9yY3UuaC01NjMtI2VuZGlmIC8vICMgaWZkZWYgQ09ORklHX1RBU0tTX1JVREVfUkNVXFxuLS1cXG5rZXJuZWwvcmN1L3JjdS5oLTU2NS0jaWZkZWYgQ09ORklHX1RBU0tTX1JDVV9HRU5FUklDXFxua2VybmVsL3JjdS9yY3UuaDo1NjY6dm9pZCB0YXNrc19jYmxpc3RfaW5pdF9nZW5lcmljKHZvaWQpO1xcbmtlcm5lbC9yY3UvcmN1LmgtNTY3LSNlbHNlIC8qICNpZmRlZiBDT05GSUdfVEFTS1NfUkNVX0dFTkVSSUMgKi9cXG4tLVxcbmtlcm5lbC9yY3UvcmN1Lmg9NTgyPXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfcmN1X2RlZmVyKHZvaWQpXFxuLS1cXG5rZXJuZWwvcmN1L3JjdS5oLTU5MC0vKiBEcmFpbiBhbiBvdXRnb2luZyBDUFUncyBkZWZlcnJlZCBTUkNVIGNhbGxiYWNrczsgc2VlIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoKS4gKi9cXG5rZXJuZWwvcmN1L3JjdS5oOjU5MTp2b2lkIHNyY3Vfb2ZmbGluZV9kcmFpbihpbnQgY3B1KTtcXG5rZXJuZWwvcmN1L3JjdS5oLTU5Mi1cXG4tLVxcbmtlcm5lbC9yY3UvcmN1Lmg9NjA0PXVuc2lnbmVkIGxvbmcgcmN1X2dldF9qaWZmaWVzX2xhenlfZmx1c2godm9pZCk7XFxua2VybmVsL3JjdS9yY3UuaDo2MDU6dm9pZCByY3Vfc2V0X2ppZmZpZXNfbGF6eV9mbHVzaCh1bnNpZ25lZCBsb25nIGopO1xcbmtlcm5lbC9yY3UvcmN1LmgtNjA2LSNlbHNlXFxuLS1cXG5rZXJuZWwvcmN1L3JjdS5oPTYwOD1zdGF0aWMgaW5saW5lIHZvaWQgcmN1X3NldF9qaWZmaWVzX2xhenlfZmx1c2godW5zaWduZWQgbG9uZyBqKSB7IH1cXG4tLVxcbmtlcm5lbC9yY3UvcmN1LmgtNjExLSNpZiBkZWZpbmVkKENPTkZJR19UUkVFX1JDVSlcXG5rZXJuZWwvcmN1L3JjdS5oOjYxMjp2b2lkIHJjdXRvcnR1cmVfZ2V0X2dwX2RhdGEoaW50ICpmbGFncywgdW5zaWduZWQgbG9uZyAqZ3Bfc2VxKTtcXG5rZXJuZWwvcmN1L3JjdS5oOjYxMzp2b2lkIGRvX3RyYWNlX3JjdV90b3J0dXJlX3JlYWQoY29uc3QgY2hhciAqcmN1dG9ydHVyZW5hbWUsXFxua2VybmVsL3JjdS9yY3UuaC02MTQtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxcbi0tXFxua2VybmVsL3JjdS9yY3UuaC02MTctXFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgYyk7XFxua2VybmVsL3JjdS9yY3UuaDo2MTg6dm9pZCByY3VfZ3Bfc2V0X3RvcnR1cmVfd2FpdChpbnQgZHVyYXRpb24pO1xcbmtlcm5lbC9yY3UvcmN1Lmg6NjE5OnZvaWQgcmN1X3NldF9ncHdyYXBfbGFnKHVuc2lnbmVkIGxvbmcgbGFnKTtcXG5rZXJuZWwvcmN1L3JjdS5oOjYyMDppbnQgcmN1X2dldF9ncHdyYXBfY291bnQoaW50IGNwdSk7XFxua2VybmVsL3JjdS9yY3UuaC02MjEtI2Vsc2VcXG5rZXJuZWwvcmN1L3JjdS5oPTYyMj1zdGF0aWMgaW5saW5lIHZvaWQgcmN1dG9ydHVyZV9nZXRfZ3BfZGF0YShpbnQgKmZsYWdzLCB1bnNpZ25lZCBsb25nICpncF9zZXEpXFxuLS1cXG5rZXJuZWwvcmN1L3JjdS5oLTYyNy0jaWZkZWYgQ09ORklHX1JDVV9UUkFDRVxcbmtlcm5lbC9yY3UvcmN1Lmg6NjI4OnZvaWQgZG9fdHJhY2VfcmN1X3RvcnR1cmVfcmVhZChjb25zdCBjaGFyICpyY3V0b3J0dXJlbmFtZSxcXG5rZXJuZWwvcmN1L3JjdS5oLTYyOS1cXHRcXHRcXHQgICAgICAgc3RydWN0IHJjdV9oZWFkICpyaHAsXFxuLS1cXG5rZXJuZWwvcmN1L3JjdS5oPTY0MT11bnNpZ25lZCBsb25nIGxvbmcgcmN1dG9ydHVyZV9nYXRoZXJfZ3Bfc2Vxcyh2b2lkKTtcXG5rZXJuZWwvcmN1L3JjdS5oOjY0Mjp2b2lkIHJjdXRvcnR1cmVfZm9ybWF0X2dwX3NlcXModW5zaWduZWQgbG9uZyBsb25nIHNlcXMsIGNoYXIgKmNwLCBzaXplX3QgbGVuKTtcXG5rZXJuZWwvcmN1L3JjdS5oLTY0My1cXG4tLVxcbmtlcm5lbC9yY3UvcmN1Lmg9NjQ2PXN0YXRpYyBpbmxpbmUgdm9pZCBzcmN1dG9ydHVyZV9nZXRfZ3BfZGF0YShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwLCBpbnQgKmZsYWdzLFxcbi0tXFxua2VybmVsL3JjdS9yY3UuaC02NTQtXFxua2VybmVsL3JjdS9yY3UuaDo2NTU6dm9pZCBzcmN1dG9ydHVyZV9nZXRfZ3BfZGF0YShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwLCBpbnQgKmZsYWdzLFxcbmtlcm5lbC9yY3UvcmN1LmgtNjU2LVxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyAqZ3Bfc2VxKTtcXG4tLVxcbmtlcm5lbC9yY3UvcmN1Lmg9NjcwPXN0YXRpYyBpbmxpbmUgdm9pZCByY3VfZ3Bfc2xvd191bnJlZ2lzdGVyKGF0b21pY190ICpyZ3NzcCkgeyB9XFxua2VybmVsL3JjdS9yY3UuaC02NzEtI2Vsc2UgLyogI2lmZGVmIENPTkZJR19USU5ZX1JDVSAqL1xcbmtlcm5lbC9yY3UvcmN1Lmg6NjcyOmJvb2wgcmN1X3dhdGNoaW5nX3plcm9faW5fZXFzKGludCBjcHUsIGludCAqdnApO1xcbmtlcm5lbC9yY3UvcmN1LmgtNjczLXVuc2lnbmVkIGxvbmcgcmN1X2dldF9ncF9zZXEodm9pZCk7XFxua2VybmVsL3JjdS9yY3UuaD02NzQ9dW5zaWduZWQgbG9uZyByY3VfZXhwX2JhdGNoZXNfY29tcGxldGVkKHZvaWQpO1xcbmtlcm5lbC9yY3UvcmN1Lmg6Njc1OmJvb2wgcmN1X2NoZWNrX2Jvb3N0X2ZhaWwodW5zaWduZWQgbG9uZyBncF9zdGF0ZSwgaW50ICpjcHVwKTtcXG5rZXJuZWwvcmN1L3JjdS5oOjY3Njp2b2lkIHNob3dfcmN1X2dwX2t0aHJlYWRzKHZvaWQpO1xcbmtlcm5lbC9yY3UvcmN1Lmg6Njc3OmludCByY3VfZ2V0X2dwX2t0aHJlYWRzX3ByaW8odm9pZCk7XFxua2VybmVsL3JjdS9yY3UuaDo2Nzg6dm9pZCByY3VfZndkX3Byb2dyZXNzX2NoZWNrKHVuc2lnbmVkIGxvbmcgaik7XFxua2VybmVsL3JjdS9yY3UuaDo2Nzk6dm9pZCByY3VfZm9yY2VfcXVpZXNjZW50X3N0YXRlKHZvaWQpO1xcbmtlcm5lbC9yY3UvcmN1LmgtNjgwLWV4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcmN1X2dwX3dxO1xcbmtlcm5lbC9yY3UvcmN1Lmg9NjgxPWV4dGVybiBzdHJ1Y3Qga3RocmVhZF93b3JrZXIgKnJjdV9leHBfZ3Bfa3dvcmtlcjtcXG5rZXJuZWwvcmN1L3JjdS5oOjY4Mjp2b2lkIHJjdV9ncF9zbG93X3JlZ2lzdGVyKGF0b21pY190ICpyZ3NzcCk7XFxua2VybmVsL3JjdS9yY3UuaDo2ODM6dm9pZCByY3VfZ3Bfc2xvd191bnJlZ2lzdGVyKGF0b21pY190ICpyZ3NzcCk7XFxua2VybmVsL3JjdS9yY3UuaC02ODQtI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfVElOWV9SQ1UgKi9cXG4tLVxcbmtlcm5lbC9yY3UvcmN1Lmg9Njg5PXVuc2lnbmVkIGxvbmcgc3JjdV9iYXRjaGVzX2NvbXBsZXRlZChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwKTtcXG4tLVxcbmtlcm5lbC9yY3UvcmN1LmgtNjkyLSNpZmRlZiBDT05GSUdfUkNVX05PQ0JfQ1BVXFxua2VybmVsL3JjdS9yY3UuaDo2OTM6dm9pZCByY3VfYmluZF9jdXJyZW50X3RvX25vY2Iodm9pZCk7XFxua2VybmVsL3JjdS9yY3UuaC02OTQtI2Vsc2VcXG5rZXJuZWwvcmN1L3JjdS5oPTY5NT1zdGF0aWMgaW5saW5lIHZvaWQgcmN1X2JpbmRfY3VycmVudF90b19ub2NiKHZvaWQpIHsgfVxcbi0tXFxua2VybmVsL3JjdS9yY3UuaC02OTgtI2lmICFkZWZpbmVkKENPTkZJR19USU5ZX1JDVSkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfVEFTS1NfUkNVKVxcbmtlcm5lbC9yY3UvcmN1Lmg6Njk5OnZvaWQgc2hvd19yY3VfdGFza3NfY2xhc3NpY19ncF9rdGhyZWFkKHZvaWQpO1xcbmtlcm5lbC9yY3UvcmN1LmgtNzAwLSNlbHNlXFxua2VybmVsL3JjdS9yY3UuaD03MDE9c3RhdGljIGlubGluZSB2b2lkIHNob3dfcmN1X3Rhc2tzX2NsYXNzaWNfZ3Bfa3RocmVhZCh2b2lkKSB7fVxcbi0tXFxua2VybmVsL3JjdS9yY3UuaC03MDMtI2lmICFkZWZpbmVkKENPTkZJR19USU5ZX1JDVSkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfVEFTS1NfUlVERV9SQ1UpXFxua2VybmVsL3JjdS9yY3UuaDo3MDQ6dm9pZCBzaG93X3JjdV90YXNrc19ydWRlX2dwX2t0aHJlYWQodm9pZCk7XFxua2VybmVsL3JjdS9yY3UuaC03MDUtI2Vsc2VcXG4tLVxcbmtlcm5lbC9yY3UvcmN1Lmg9NzEwPXN0YXRpYyBpbmxpbmUgYm9vbCByY3VfY3B1X2JlZW5mdWxseW9ubGluZShpbnQgY3B1KSB7IHJldHVybiB0cnVlOyB9XFxua2VybmVsL3JjdS9yY3UuaC03MTEtI2Vsc2VcXG5rZXJuZWwvcmN1L3JjdS5oOjcxMjpib29sIHJjdV9jcHVfYmVlbmZ1bGx5b25saW5lKGludCBjcHUpO1xcbmtlcm5lbC9yY3UvcmN1LmgtNzEzLSNlbmRpZlxcbi0tXFxua2VybmVsL3JjdS9yY3UuaC03MTUtI2lmIGRlZmluZWQoQ09ORklHX1JDVV9TVEFMTF9DT01NT04pIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1JDVV9DUFVfU1RBTExfTk9USUZJRVIpXFxua2VybmVsL3JjdS9yY3UuaDo3MTY6aW50IHJjdV9zdGFsbF9ub3RpZmllcl9jYWxsX2NoYWluKHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICp2KTtcXG5rZXJuZWwvcmN1L3JjdS5oLTcxNy0jZWxzZSAvLyAjaWYgZGVmaW5lZChDT05GSUdfUkNVX1NUQUxMX0NPTU1PTikgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfUkNVX0NQVV9TVEFMTF9OT1RJRklFUilcXG5rZXJuZWwvcmN1L3JjdS5oPTcxOD1zdGF0aWMgaW5saW5lIGludCByY3Vfc3RhbGxfbm90aWZpZXJfY2FsbF9jaGFpbih1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqdikgeyByZXR1cm4gTk9USUZZX0RPTkU7IH1cXG4tLVxcbmtlcm5lbC9yY3UvcmN1LmgtNzIxLSNpZmRlZiBDT05GSUdfVFJJVklBTF9QUkVFTVBUX1JDVVxcbmtlcm5lbC9yY3UvcmN1Lmg6NzIyOnZvaWQgc3luY2hyb25pemVfcmN1X3RyaXZpYWxfcHJlZW1wdCh2b2lkKTtcXG5rZXJuZWwvcmN1L3JjdS5oLTcyMy0jZW5kaWYgLy8gI2lmZGVmIENPTkZJR19UUklWSUFMX1BSRUVNUFRfUkNVXFxuLS1cXG5rZXJuZWwvcmN1L3JjdS5oLTcyNS0jaWYgZGVmaW5lZChDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfUkNVX0JPT1NUKVxcbmtlcm5lbC9yY3UvcmN1Lmg6NzI2OmJvb2wgcmN1X2lzX3Rhc2tfcmN1X2Jvb3N0ZWQodm9pZCk7XFxua2VybmVsL3JjdS9yY3UuaC03MjctI2Vsc2UgLy8gI2lmIGRlZmluZWQoQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1JDVV9CT09TVClcXG4tLVxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTE4LS8qIEluaXRpYWxpemUgc2ltcGxlIGNhbGxiYWNrIGxpc3QuICovXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmM6MTk6dm9pZCByY3VfY2JsaXN0X2luaXQoc3RydWN0IHJjdV9jYmxpc3QgKnJjbHApXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtMjAte1xcbi0tXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtMjgtICovXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmM6Mjk6dm9pZCByY3VfY2JsaXN0X2VucXVldWUoc3RydWN0IHJjdV9jYmxpc3QgKnJjbHAsIHN0cnVjdCByY3VfaGVhZCAqcmhwKVxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTMwLXtcXG4tLVxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTQzLSAqL1xcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jOjQ0OnZvaWQgcmN1X2NibGlzdF9mbHVzaF9lbnF1ZXVlKHN0cnVjdCByY3VfY2JsaXN0ICpkcmNscCxcXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy00NS1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgcmN1X2NibGlzdCAqc3JjbHAsXFxuLS1cXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYz0xMzk9c3RhdGljIHZvaWQgcmN1X3NlZ2NibGlzdF9pbmNfc2VnbGVuKHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscCwgaW50IHNlZylcXG4tLVxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTIxMC0gKi9cXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzoyMTE6dm9pZCByY3Vfc2VnY2JsaXN0X2FkZF9sZW4oc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwLCBsb25nIHYpXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtMjEyLXtcXG4tLVxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTIyOS0gKi9cXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzoyMzA6dm9pZCByY3Vfc2VnY2JsaXN0X2luY19sZW4oc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwKVxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTIzMS17XFxuLS1cXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy0yMzctICovXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmM6MjM4OnZvaWQgcmN1X3NlZ2NibGlzdF9pbml0KHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscClcXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy0yMzkte1xcbi0tXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtMjU2LSAqL1xcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jOjI1Nzp2b2lkIHJjdV9zZWdjYmxpc3RfZGlzYWJsZShzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHApXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtMjU4LXtcXG4tLVxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTI2Ny0gKi9cXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzoyNjg6Ym9vbCByY3Vfc2VnY2JsaXN0X3JlYWR5X2NicyhzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHApXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtMjY5LXtcXG4tLVxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTI3Ny0gKi9cXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzoyNzg6Ym9vbCByY3Vfc2VnY2JsaXN0X3BlbmRfY2JzKHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscClcXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy0yNzkte1xcbi0tXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmM9MzAyPXN0cnVjdCByY3VfaGVhZCAqcmN1X3NlZ2NibGlzdF9maXJzdF9wZW5kX2NiKHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscClcXG4tLVxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTMxMi0gKi9cXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzozMTM6Ym9vbCByY3Vfc2VnY2JsaXN0X25leHRncChzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHAsIHN0cnVjdCByY3VfZ3Bfc2VxICpnc3ApXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtMzE0LXtcXG4tLVxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTMyOS0gKi9cXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzozMzA6dm9pZCByY3Vfc2VnY2JsaXN0X2VucXVldWUoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwLFxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTMzMS1cXHRcXHRcXHQgICBzdHJ1Y3QgcmN1X2hlYWQgKnJocClcXG4tLVxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTM0OS0gKi9cXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzozNTA6Ym9vbCByY3Vfc2VnY2JsaXN0X2VudHJhaW4oc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwLFxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTM1MS1cXHRcXHRcXHQgICBzdHJ1Y3QgcmN1X2hlYWQgKnJocClcXG4tLVxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTM3NC0gKi9cXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzozNzU6dm9pZCByY3Vfc2VnY2JsaXN0X2V4dHJhY3RfZG9uZV9jYnMoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwLFxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTM3Ni1cXHRcXHRcXHRcXHQgICAgc3RydWN0IHJjdV9jYmxpc3QgKnJjbHApXFxuLS1cXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy0zOTktICovXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmM6NDAwOnZvaWQgcmN1X3NlZ2NibGlzdF9leHRyYWN0X3BlbmRfY2JzKHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscCxcXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy00MDEtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCByY3VfY2JsaXN0ICpyY2xwKVxcbi0tXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtNDIxLSAqL1xcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jOjQyMjp2b2lkIHJjdV9zZWdjYmxpc3RfaW5zZXJ0X2NvdW50KHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscCxcXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy00MjMtXFx0XFx0XFx0XFx0c3RydWN0IHJjdV9jYmxpc3QgKnJjbHApXFxuLS1cXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy00MzEtICovXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmM6NDMyOnZvaWQgcmN1X3NlZ2NibGlzdF9pbnNlcnRfZG9uZV9jYnMoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwLFxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTQzMy1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgcmN1X2NibGlzdCAqcmNscClcXG4tLVxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTQ1NC0gKi9cXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzo0NTU6dm9pZCByY3Vfc2VnY2JsaXN0X2luc2VydF9wZW5kX2NicyhzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHAsXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtNDU2LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCByY3VfY2JsaXN0ICpyY2xwKVxcbi0tXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmM9NDczPXN0YXRpYyB2b2lkIHJjdV9zZWdjYmxpc3RfYWR2YW5jZV9jb21wYWN0KHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscCwgaW50IGkpXFxuLS1cXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy01MDAtICovXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmM6NTAxOnZvaWQgcmN1X3NlZ2NibGlzdF9hZHZhbmNlKHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscClcXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy01MDIte1xcbi0tXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtNTQzLSAqL1xcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jOjU0NDpib29sIHJjdV9zZWdjYmxpc3RfYWNjZWxlcmF0ZShzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHAsIHN0cnVjdCByY3VfZ3Bfc2VxICpnc3ApXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtNTQ1LXtcXG4tLVxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTYxMy0gKi9cXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzo2MTQ6dm9pZCByY3Vfc2VnY2JsaXN0X21lcmdlKHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpkc3RfcnNjbHAsXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtNjE1LVxcdFxcdFxcdCBzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqc3JjX3JzY2xwKVxcbi0tXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtNjQxLVxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jOjY0Mjp2b2lkIHNyY3Vfc2VnY2JsaXN0X2FkdmFuY2Uoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwLCB1bnNpZ25lZCBsb25nIHNlcSlcXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy02NDMte1xcbi0tXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtNjczLSAqL1xcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jOjY3NDpib29sIHNyY3Vfc2VnY2JsaXN0X2FjY2VsZXJhdGUoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwLCB1bnNpZ25lZCBsb25nIHNlcSlcXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy02NzUte1xcbi0tXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0Lmg9MjE9bG9uZyByY3Vfc2VnY2JsaXN0X25fc2VnbWVudF9jYnMoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwKTtcXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaC0yMi1cXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaDoyMzp2b2lkIHJjdV9jYmxpc3RfaW5pdChzdHJ1Y3QgcmN1X2NibGlzdCAqcmNscCk7XFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0Lmg6MjQ6dm9pZCByY3VfY2JsaXN0X2VucXVldWUoc3RydWN0IHJjdV9jYmxpc3QgKnJjbHAsIHN0cnVjdCByY3VfaGVhZCAqcmhwKTtcXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaDoyNTp2b2lkIHJjdV9jYmxpc3RfZmx1c2hfZW5xdWV1ZShzdHJ1Y3QgcmN1X2NibGlzdCAqZHJjbHAsXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmgtMjYtXFx0XFx0XFx0ICAgICAgc3RydWN0IHJjdV9jYmxpc3QgKnNyY2xwLFxcbi0tXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0Lmg9MTEyPXN0YXRpYyBpbmxpbmUgYm9vbCByY3Vfc2VnY2JsaXN0X3NlZ2VtcHR5KHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscCwgaW50IHNlZylcXG4tLVxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oLTExOC1cXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaDoxMTk6dm9pZCByY3Vfc2VnY2JsaXN0X2luY19sZW4oc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwKTtcXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaDoxMjA6dm9pZCByY3Vfc2VnY2JsaXN0X2FkZF9sZW4oc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwLCBsb25nIHYpO1xcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oOjEyMTp2b2lkIHJjdV9zZWdjYmxpc3RfaW5pdChzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHApO1xcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oOjEyMjp2b2lkIHJjdV9zZWdjYmxpc3RfZGlzYWJsZShzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHApO1xcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oOjEyMzpib29sIHJjdV9zZWdjYmxpc3RfcmVhZHlfY2JzKHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscCk7XFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0Lmg6MTI0OmJvb2wgcmN1X3NlZ2NibGlzdF9wZW5kX2NicyhzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHApO1xcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oLTEyNS1zdHJ1Y3QgcmN1X2hlYWQgKnJjdV9zZWdjYmxpc3RfZmlyc3RfY2Ioc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwKTtcXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaD0xMjY9c3RydWN0IHJjdV9oZWFkICpyY3Vfc2VnY2JsaXN0X2ZpcnN0X3BlbmRfY2Ioc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwKTtcXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaDoxMjc6Ym9vbCByY3Vfc2VnY2JsaXN0X25leHRncChzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHAsIHN0cnVjdCByY3VfZ3Bfc2VxICpnc3ApO1xcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oOjEyODp2b2lkIHJjdV9zZWdjYmxpc3RfZW5xdWV1ZShzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHAsXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmgtMTI5LVxcdFxcdFxcdCAgIHN0cnVjdCByY3VfaGVhZCAqcmhwKTtcXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaDoxMzA6Ym9vbCByY3Vfc2VnY2JsaXN0X2VudHJhaW4oc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwLFxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oLTEzMS1cXHRcXHRcXHQgICBzdHJ1Y3QgcmN1X2hlYWQgKnJocCk7XFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0Lmg6MTMyOnZvaWQgcmN1X3NlZ2NibGlzdF9leHRyYWN0X2RvbmVfY2JzKHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscCxcXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaC0xMzMtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCByY3VfY2JsaXN0ICpyY2xwKTtcXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaDoxMzQ6dm9pZCByY3Vfc2VnY2JsaXN0X2V4dHJhY3RfcGVuZF9jYnMoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwLFxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oLTEzNS1cXHRcXHRcXHRcXHQgICAgc3RydWN0IHJjdV9jYmxpc3QgKnJjbHApO1xcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oOjEzNjp2b2lkIHJjdV9zZWdjYmxpc3RfaW5zZXJ0X2NvdW50KHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscCxcXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaC0xMzctXFx0XFx0XFx0XFx0c3RydWN0IHJjdV9jYmxpc3QgKnJjbHApO1xcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oOjEzODp2b2lkIHJjdV9zZWdjYmxpc3RfaW5zZXJ0X2RvbmVfY2JzKHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscCxcXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaC0xMzktXFx0XFx0XFx0XFx0ICAgc3RydWN0IHJjdV9jYmxpc3QgKnJjbHApO1xcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oOjE0MDp2b2lkIHJjdV9zZWdjYmxpc3RfaW5zZXJ0X3BlbmRfY2JzKHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscCxcXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaC0xNDEtXFx0XFx0XFx0XFx0ICAgc3RydWN0IHJjdV9jYmxpc3QgKnJjbHApO1xcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oOjE0Mjp2b2lkIHJjdV9zZWdjYmxpc3RfYWR2YW5jZShzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHApO1xcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oOjE0Mzpib29sIHJjdV9zZWdjYmxpc3RfYWNjZWxlcmF0ZShzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHAsIHN0cnVjdCByY3VfZ3Bfc2VxICpnc3ApO1xcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oOjE0NDp2b2lkIHJjdV9zZWdjYmxpc3RfbWVyZ2Uoc3RydWN0IHJjdV9zZWdjYmxpc3QgKmRzdF9yc2NscCxcXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaC0xNDUtXFx0XFx0XFx0IHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpzcmNfcnNjbHApO1xcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oOjE0Njp2b2lkIHNyY3Vfc2VnY2JsaXN0X2FkdmFuY2Uoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwLCB1bnNpZ25lZCBsb25nIHNlcSk7XFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0Lmg6MTQ3OmJvb2wgc3JjdV9zZWdjYmxpc3RfYWNjZWxlcmF0ZShzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHAsIHVuc2lnbmVkIGxvbmcgc2VxKTtcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYz0zNT1zdGF0aWMgaW50IGluaXRfc3JjdV9zdHJ1Y3RfZmllbGRzKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxcbi0tXFxua2VybmVsL3JjdS9zcmN1dGlueS5jLTU1LVxcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYzo1NjppbnQgaW5pdF9zcmN1X3N0cnVjdF9sb2NrZGVwKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBjb25zdCBjaGFyICpuYW1lLFxcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy01Ny1cXHRcXHQgICAgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KVxcbi0tXFxua2VybmVsL3JjdS9zcmN1dGlueS5jPTY0PUVYUE9SVF9TWU1CT0xfR1BMKGluaXRfc3JjdV9zdHJ1Y3RfbG9ja2RlcCk7XFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0aW55LmMtNzUtICovXFxua2VybmVsL3JjdS9zcmN1dGlueS5jOjc2OmludCBpbml0X3NyY3Vfc3RydWN0X2dlbmVyaWMoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXFxua2VybmVsL3JjdS9zcmN1dGlueS5jLTc3LXtcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYz04MD1FWFBPUlRfU1lNQk9MX0dQTChpbml0X3NyY3Vfc3RydWN0X2dlbmVyaWMpO1xcbi0tXFxua2VybmVsL3JjdS9zcmN1dGlueS5jLTkwLSAqL1xcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYzo5MTp2b2lkIGNsZWFudXBfc3JjdV9zdHJ1Y3Qoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXFxua2VybmVsL3JjdS9zcmN1dGlueS5jLTkyLXtcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYz0xMDg9RVhQT1JUX1NZTUJPTF9HUEwoY2xlYW51cF9zcmN1X3N0cnVjdCk7XFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0aW55LmMtMTEzLSAqL1xcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYzoxMTQ6dm9pZCBfX3NyY3VfcmVhZF91bmxvY2soc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIGludCBpZHgpXFxua2VybmVsL3JjdS9zcmN1dGlueS5jLTExNS17XFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0aW55LmM9MTI1PUVYUE9SVF9TWU1CT0xfR1BMKF9fc3JjdV9yZWFkX3VubG9jayk7XFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0aW55LmMtMTMxLSAqL1xcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYzoxMzI6dm9pZCBzcmN1X2RyaXZlX2dwKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3ApXFxua2VybmVsL3JjdS9zcmN1dGlueS5jLTEzMy17XFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0aW55LmM9MTkxPUVYUE9SVF9TWU1CT0xfR1BMKHNyY3VfZHJpdmVfZ3ApO1xcbi0tXFxua2VybmVsL3JjdS9zcmN1dGlueS5jLTE5Ny0gKi9cXG5rZXJuZWwvcmN1L3NyY3V0aW55LmM6MTk4OnZvaWQgc3JjdV90aW55X2lycV93b3JrKHN0cnVjdCBpcnFfd29yayAqaXJxX3dvcmspXFxua2VybmVsL3JjdS9zcmN1dGlueS5jLTE5OS17XFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0aW55LmM9MjQ4PXN0YXRpYyB2b2lkIF9fc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgYm9vbCBndWFyZClcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy0yNjgtLyogT25seSB0aGUgaXJxX3dvcmsgZHJhaW4gY2FuIGJlIHJlLWZlZCBieSBpdHMgb3duIHJlLWlzc3VlOyBzZWUgVHJlZSBTUkNVLiAqL1xcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYzoyNjk6dm9pZCBzcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpXFxua2VybmVsL3JjdS9zcmN1dGlueS5jLTI3MC17XFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0aW55LmM9MjczPUVYUE9SVF9TWU1CT0xfR1BMKHNyY3VfZGVmZXJfZHJhaW4pO1xcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy0yNzQtXFxua2VybmVsL3JjdS9zcmN1dGlueS5jOjI3NTp2b2lkIGNhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsXFxua2VybmVsL3JjdS9zcmN1dGlueS5jLTI3Ni1cXHQgICAgICAgcmN1X2NhbGxiYWNrX3QgZnVuYylcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYz0yOTY9RVhQT1JUX1NZTUJPTF9HUEwoY2FsbF9zcmN1KTtcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy0zMDAtICovXFxua2VybmVsL3JjdS9zcmN1dGlueS5jOjMwMTp2b2lkIHN5bmNocm9uaXplX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXFxua2VybmVsL3JjdS9zcmN1dGlueS5jLTMwMi17XFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0aW55LmM9MzIzPUVYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3NyY3UpO1xcbi0tXFxua2VybmVsL3JjdS9zcmN1dGlueS5jLTMyNS0vKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzLCB0aGVuIHdhaXQgZm9yIGFsbCBpbi1mbGlnaHQgb25lcy4gKi9cXG5rZXJuZWwvcmN1L3NyY3V0aW55LmM6MzI2OnZvaWQgc3JjdV9iYXJyaWVyKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy0zMjcte1xcbi0tXFxua2VybmVsL3JjdS9zcmN1dGlueS5jPTM2NT1FWFBPUlRfU1lNQk9MX0dQTChzdGFydF9wb2xsX3N5bmNocm9uaXplX3NyY3UpO1xcbi0tXFxua2VybmVsL3JjdS9zcmN1dGlueS5jLTM2OS0gKi9cXG5rZXJuZWwvcmN1L3NyY3V0aW55LmM6MzcwOmJvb2wgcG9sbF9zdGF0ZV9zeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCB1bnNpZ25lZCBsb25nIGNvb2tpZSlcXG5rZXJuZWwvcmN1L3NyY3V0aW55LmMtMzcxLXtcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYz0zMDY9X19pbml0X3NyY3Vfc3RydWN0X2NvbW1vbihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpXFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMzEzLVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYzozMTQ6aW50IGluaXRfc3JjdV9zdHJ1Y3RfbG9ja2RlcChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgY29uc3QgY2hhciAqbmFtZSxcXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMzE1LVxcdFxcdFxcdCAgICAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpXFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM9MzIwPUVYUE9SVF9TWU1CT0xfR1BMKGluaXRfc3JjdV9zdHJ1Y3RfbG9ja2RlcCk7XFxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTMyMS1cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM6MzIyOmludCBfX2luaXRfc3JjdV9zdHJ1Y3RfZmFzdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTMyMy17XFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM9MzI3PUVYUE9SVF9TWU1CT0xfR1BMKF9faW5pdF9zcmN1X3N0cnVjdF9mYXN0KTtcXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMzI4LVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYzozMjk6aW50IF9faW5pdF9zcmN1X3N0cnVjdF9mYXN0X3VwZG93bihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgY29uc3QgY2hhciAqbmFtZSxcXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMzMwLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KVxcbi0tXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTMzNT1FWFBPUlRfU1lNQk9MX0dQTChfX2luaXRfc3JjdV9zdHJ1Y3RfZmFzdF91cGRvd24pO1xcbi0tXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTM0OS0gKi9cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM6MzUwOmludCBpbml0X3NyY3Vfc3RydWN0X2dlbmVyaWMoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTM1MS17XFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM9MzU1PUVYUE9SVF9TWU1CT0xfR1BMKGluaXRfc3JjdV9zdHJ1Y3RfZ2VuZXJpYyk7XFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMzY2LSAqL1xcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYzozNjc6aW50IGluaXRfc3JjdV9zdHJ1Y3RfZmFzdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMzY4LXtcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYz0zNzI9RVhQT1JUX1NZTUJPTF9HUEwoaW5pdF9zcmN1X3N0cnVjdF9mYXN0KTtcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0zODQtICovXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jOjM4NTppbnQgaW5pdF9zcmN1X3N0cnVjdF9mYXN0X3VwZG93bihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMzg2LXtcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYz02OTg9c3RhdGljIHVuc2lnbmVkIGxvbmcgc3JjdV9nZXRfZGVsYXkoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtNzI5LSAqL1xcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYzo3MzA6dm9pZCBjbGVhbnVwX3NyY3Vfc3RydWN0KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy03MzEte1xcbi0tXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTc4ND1FWFBPUlRfU1lNQk9MX0dQTChjbGVhbnVwX3NyY3Vfc3RydWN0KTtcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy03ODgtICovXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jOjc4OTp2b2lkIF9fc3JjdV9jaGVja19yZWFkX2ZsYXZvcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgaW50IHJlYWRfZmxhdm9yKVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy03OTAte1xcbi0tXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTgxMj1FWFBPUlRfU1lNQk9MX0dQTChfX3NyY3VfY2hlY2tfcmVhZF9mbGF2b3IpO1xcbi0tXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTgxOS0gKi9cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM6ODIwOmludCBfX3NyY3VfcmVhZF9sb2NrKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy04MjEte1xcbi0tXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTgyOD1FWFBPUlRfU1lNQk9MX0dQTChfX3NyY3VfcmVhZF9sb2NrKTtcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy04MzQtICovXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jOjgzNTp2b2lkIF9fc3JjdV9yZWFkX3VubG9jayhzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgaW50IGlkeClcXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtODM2LXtcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYz04NDA9RVhQT1JUX1NZTUJPTF9HUEwoX19zcmN1X3JlYWRfdW5sb2NrKTtcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy04NDgtICovXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jOjg0OTppbnQgX19zcmN1X3JlYWRfbG9ja19ubWlzYWZlKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy04NTAte1xcbi0tXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTg1OD1FWFBPUlRfU1lNQk9MX0dQTChfX3NyY3VfcmVhZF9sb2NrX25taXNhZmUpO1xcbi0tXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTg2NC0gKi9cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM6ODY1OnZvaWQgX19zcmN1X3JlYWRfdW5sb2NrX25taXNhZmUoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIGludCBpZHgpXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTg2Ni17XFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM9MTU2ND1zdGF0aWMgdm9pZCBzcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpXFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMTU3My0gKi9cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM6MTU3NDp2b2lkIHNyY3Vfb2ZmbGluZV9kcmFpbihpbnQgY3B1KVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0xNTc1LXtcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0xNjAxLSAqL1xcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYzoxNjAyOnZvaWQgY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMTYwMy1cXHQgICAgICAgcmN1X2NhbGxiYWNrX3QgZnVuYylcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYz0xNjEyPXN0YXRpYyB2b2lkIF9fc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgYm9vbCBkb19ub3JtKVxcbi0tXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE2NTMtICovXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jOjE2NTQ6dm9pZCBzeW5jaHJvbml6ZV9zcmN1X2V4cGVkaXRlZChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMTY1NS17XFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM9MTY1OD1FWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9zcmN1X2V4cGVkaXRlZCk7XFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMTcwOC0gKi9cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM6MTcwOTp2b2lkIHN5bmNocm9uaXplX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE3MTAte1xcbi0tXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTE3NTE9RVhQT1JUX1NZTUJPTF9HUEwoc3RhcnRfcG9sbF9zeW5jaHJvbml6ZV9zcmN1KTtcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0xNzc3LSAqL1xcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYzoxNzc4OmJvb2wgcG9sbF9zdGF0ZV9zeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCB1bnNpZ25lZCBsb25nIGNvb2tpZSlcXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMTc3OS17XFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM9MTgxMz1zdGF0aWMgdm9pZCBzcmN1X2JhcnJpZXJfb25lX2NwdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHNyY3VfZGF0YSAqc2RwKVxcbi0tXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE4MzAtICovXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jOjE4MzE6dm9pZCBzcmN1X2JhcnJpZXIoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE4MzIte1xcbi0tXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTE4Nzc9c3RhdGljIHZvaWQgc3JjdV9leHBlZGl0ZV9jdXJyZW50X2NiKHN0cnVjdCByY3VfaGVhZCAqcmhwKVxcbi0tXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE5MDgtICovXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jOjE5MDk6dm9pZCBzcmN1X2V4cGVkaXRlX2N1cnJlbnQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE5MTAte1xcbi0tXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTIxMzc9c3RhdGljIHZvaWQgc3JjdV9pcnFfd29yayhzdHJ1Y3QgaXJxX3dvcmsgKndvcmspXFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMjE1My1cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM6MjE1NDp2b2lkIHNyY3V0b3J0dXJlX2dldF9ncF9kYXRhKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBpbnQgKmZsYWdzLFxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0yMTU1LVxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyAqZ3Bfc2VxKVxcbi0tXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTIxNjI9c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzcmN1X3NpemVfc3RhdGVfbmFtZVtdID0ge1xcbi0tXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTIxNzQtXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jOjIxNzU6dm9pZCBzcmN1X3RvcnR1cmVfc3RhdHNfcHJpbnQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIGNoYXIgKnR0LCBjaGFyICp0ZilcXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMjE3Ni17XFxuLS1cXG5rZXJuZWwvcmN1L3N5bmMuYz0xMz1lbnVtIHsgR1BfSURMRSA9IDAsIEdQX0VOVEVSLCBHUF9QQVNTRUQsIEdQX0VYSVQsIEdQX1JFUExBWSB9O1xcbi0tXFxua2VybmVsL3JjdS9zeW5jLmMtMjAtICovXFxua2VybmVsL3JjdS9zeW5jLmM6MjE6dm9pZCByY3Vfc3luY19pbml0KHN0cnVjdCByY3Vfc3luYyAqcnNwKVxcbmtlcm5lbC9yY3Uvc3luYy5jLTIyLXtcXG4tLVxcbmtlcm5lbC9yY3Uvc3luYy5jPTU3PXN0YXRpYyB2b2lkIHJjdV9zeW5jX2Z1bmMoc3RydWN0IHJjdV9oZWFkICpyaHApXFxuLS1cXG5rZXJuZWwvcmN1L3N5bmMuYy0xMDQtICovXFxua2VybmVsL3JjdS9zeW5jLmM6MTA1OnZvaWQgcmN1X3N5bmNfZW50ZXIoc3RydWN0IHJjdV9zeW5jICpyc3ApXFxua2VybmVsL3JjdS9zeW5jLmMtMTA2LXtcXG4tLVxcbmtlcm5lbC9yY3Uvc3luYy5jLTE1MS0gKi9cXG5rZXJuZWwvcmN1L3N5bmMuYzoxNTI6dm9pZCByY3Vfc3luY19leGl0KHN0cnVjdCByY3Vfc3luYyAqcnNwKVxcbmtlcm5lbC9yY3Uvc3luYy5jLTE1My17XFxuLS1cXG5rZXJuZWwvcmN1L3N5bmMuYy0xNzItICovXFxua2VybmVsL3JjdS9zeW5jLmM6MTczOnZvaWQgcmN1X3N5bmNfZHRvcihzdHJ1Y3QgcmN1X3N5bmMgKnJzcClcXG5rZXJuZWwvcmN1L3N5bmMuYy0xNzQte1xcbi0tXFxua2VybmVsL3JjdS90YXNrcy5oPTEwMTU9c3RhdGljIHZvaWQgcmN1X3Rhc2tzX3BlcnRhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0LCBzdHJ1Y3QgbGlzdF9oZWFkICpob3ApXFxuLS1cXG5rZXJuZWwvcmN1L3Rhc2tzLmgtMTAyNC1cXG5rZXJuZWwvcmN1L3Rhc2tzLmg6MTAyNTp2b2lkIGNhbGxfcmN1X3Rhc2tzKHN0cnVjdCByY3VfaGVhZCAqcmhwLCByY3VfY2FsbGJhY2tfdCBmdW5jKTtcXG5rZXJuZWwvcmN1L3Rhc2tzLmgtMTAyNi1ERUZJTkVfUkNVX1RBU0tTKHJjdV90YXNrcywgcmN1X3Rhc2tzX3dhaXRfZ3AsIGNhbGxfcmN1X3Rhc2tzLCBcXFwiUkNVIFRhc2tzXFxcIik7XFxuLS1cXG5rZXJuZWwvcmN1L3Rhc2tzLmg9MTE2MT1zdGF0aWMgdm9pZCB0YXNrc19yY3VfZXhpdF9zdGFsbChzdHJ1Y3QgdGltZXJfbGlzdCAqdW51c2VkKVxcbi0tXFxua2VybmVsL3JjdS90YXNrcy5oLTExOTMtICovXFxua2VybmVsL3JjdS90YXNrcy5oOjExOTQ6dm9pZCBjYWxsX3JjdV90YXNrcyhzdHJ1Y3QgcmN1X2hlYWQgKnJocCwgcmN1X2NhbGxiYWNrX3QgZnVuYylcXG5rZXJuZWwvcmN1L3Rhc2tzLmgtMTE5NS17XFxuLS1cXG5rZXJuZWwvcmN1L3Rhc2tzLmg9MTE5OD1FWFBPUlRfU1lNQk9MX0dQTChjYWxsX3JjdV90YXNrcyk7XFxuLS1cXG5rZXJuZWwvcmN1L3Rhc2tzLmgtMTIxNy0gKi9cXG5rZXJuZWwvcmN1L3Rhc2tzLmg6MTIxODp2b2lkIHN5bmNocm9uaXplX3JjdV90YXNrcyh2b2lkKVxcbmtlcm5lbC9yY3UvdGFza3MuaC0xMjE5LXtcXG4tLVxcbmtlcm5lbC9yY3UvdGFza3MuaD0xMjIyPUVYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3JjdV90YXNrcyk7XFxuLS1cXG5rZXJuZWwvcmN1L3Rhc2tzLmgtMTIyOS0gKi9cXG5rZXJuZWwvcmN1L3Rhc2tzLmg6MTIzMDp2b2lkIHJjdV9iYXJyaWVyX3Rhc2tzKHZvaWQpXFxua2VybmVsL3JjdS90YXNrcy5oLTEyMzEte1xcbi0tXFxua2VybmVsL3JjdS90YXNrcy5oPTEyMzk9c3RhdGljIGludCBfX2luaXQgcmN1X3NwYXduX3Rhc2tzX2t0aHJlYWQodm9pZClcXG4tLVxcbmtlcm5lbC9yY3UvdGFza3MuaC0xMjU1LSNpZiAhZGVmaW5lZChDT05GSUdfVElOWV9SQ1UpXFxua2VybmVsL3JjdS90YXNrcy5oOjEyNTY6dm9pZCBzaG93X3JjdV90YXNrc19jbGFzc2ljX2dwX2t0aHJlYWQodm9pZClcXG5rZXJuZWwvcmN1L3Rhc2tzLmgtMTI1Ny17XFxuLS1cXG5rZXJuZWwvcmN1L3Rhc2tzLmg9MTI2MD1FWFBPUlRfU1lNQk9MX0dQTChzaG93X3JjdV90YXNrc19jbGFzc2ljX2dwX2t0aHJlYWQpO1xcbmtlcm5lbC9yY3UvdGFza3MuaC0xMjYxLVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMzozMTo1Ni45MDQxODczMDlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODI1NDIyOTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipSQ1UgSW52ZXN0aWdhdGlvbjogRm9jdXMgU2hpZnQqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBkaXZpbmcgaW50byBSQ1UgbW9kaWZpY2F0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYW55IGNoYW5nZXMgdG8gYGNhbGxfcmN1X3Rhc2tzYCBvciBgY2FsbF9yY3VfdGFza3NfdHJhY2VgLiBUaG9zZSBhcmUga2V5IGZ1bmN0aW9ucyB3aGVuIHlvdSdyZSBsb29raW5nIGF0IHNjaGVkdWxpbmcgYW5kIHRyYWNpbmcgaW1wYWN0cy4gQnV0IHdhaXQgYSBtaW51dGUuLi4gaXQgbG9va3MgbGlrZSB0aG9zZSB0d28gZnVuY3Rpb25zIGFyZSB1bnRvdWNoZWQuIFRoYXQgbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIG1vZGlmaWNhdGlvbnMgZGlyZWN0bHkgd2l0aGluIGBjYWxsX3JjdWAgYW5kIGBjYWxsX3NyY3VgLlxuXG5BbHJpZ2h0LCBhIG1vcmUgZ3JhbnVsYXIgYW5hbHlzaXMgaXMgbmVlZGVkLiBNeSBuZXh0IHN0ZXAgaXMgdG8gaGVhZCBkaXJlY3RseSB0byBga2VybmVsL3JjdS90cmVlLmNgLCBiZWNhdXNlIHRoYXQncyB3aGVyZSBgY2FsbF9yY3VgIGxpdmVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgY2hhbmdlZCBpbiB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgcm9vdCBjYXVzZSBsaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTM0NCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDEzOjMyOjA0LjcyOTYxNDM4OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDI1NzkwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHZvaWR8aW50fGJvb2wpIFthLXowLTlfXStcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvcmN1L3RyZWUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvcmN1L3RyZWUuYz04MT1zdGF0aWMgREVGSU5FX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQoc3RydWN0IHJjdV9kYXRhLCByY3VfZGF0YSkgPSB7XFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYy04NC1cXG5rZXJuZWwvcmN1L3RyZWUuYzo4NTppbnQgcmN1X2dldF9ncHdyYXBfY291bnQoaW50IGNwdSlcXG5rZXJuZWwvcmN1L3RyZWUuYy04Ni17XFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYz0xOTU9bW9kdWxlX3BhcmFtKHJjdV91bmxvY2tfZGVsYXksIGludCwgMDQ0NCk7XFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYy0xOTgtLyogUmV0cmlldmUgUkNVIGt0aHJlYWRzIHByaW9yaXR5IGZvciByY3V0b3J0dXJlICovXFxua2VybmVsL3JjdS90cmVlLmM6MTk5OmludCByY3VfZ2V0X2dwX2t0aHJlYWRzX3ByaW8odm9pZClcXG5rZXJuZWwvcmN1L3RyZWUuYy0yMDAte1xcbi0tXFxua2VybmVsL3JjdS90cmVlLmM9MjMwPXN0YXRpYyBsb25nIHJjdV9nZXRfbl9jYnNfY3B1KGludCBjcHUpXFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYy0yNjItICovXFxua2VybmVsL3JjdS90cmVlLmM6MjYzOnZvaWQgcmN1X3NvZnRpcnFfcXModm9pZClcXG5rZXJuZWwvcmN1L3RyZWUuYy0yNjQte1xcbi0tXFxua2VybmVsL3JjdS90cmVlLmM9MzEzPXN0YXRpYyBib29sIHJjdV93YXRjaGluZ19zbmFwX3N0b3BwZWRfc2luY2Uoc3RydWN0IHJjdV9kYXRhICpyZHAsIGludCBzbmFwKVxcbi0tXFxua2VybmVsL3JjdS90cmVlLmMtMzMyLSAqL1xcbmtlcm5lbC9yY3UvdHJlZS5jOjMzMzpib29sIHJjdV93YXRjaGluZ196ZXJvX2luX2VxcyhpbnQgY3B1LCBpbnQgKnZwKVxcbmtlcm5lbC9yY3UvdHJlZS5jLTMzNC17XFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYz01NDQ9c3RhdGljIHN0cnVjdCByY3Vfbm9kZSAqcmN1X2dldF9yb290KHZvaWQpXFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYy01NTEtICovXFxua2VybmVsL3JjdS90cmVlLmM6NTUyOnZvaWQgcmN1dG9ydHVyZV9nZXRfZ3BfZGF0YShpbnQgKmZsYWdzLCB1bnNpZ25lZCBsb25nICpncF9zZXEpXFxua2VybmVsL3JjdS90cmVlLmMtNTUzLXtcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jPTU2Nj1FWFBPUlRfU1lNQk9MX0dQTChyY3V0b3J0dXJlX2dhdGhlcl9ncF9zZXFzKTtcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jLTU2OC0vKiBGb3JtYXQgZ3JhY2UtcGVyaW9kIHNlcXVlbmNlIG51bWJlcnMgZm9yIHJjdXRvcnR1cmUgZGlhZ25vc3RpY3MuICovXFxua2VybmVsL3JjdS90cmVlLmM6NTY5OnZvaWQgcmN1dG9ydHVyZV9mb3JtYXRfZ3Bfc2Vxcyh1bnNpZ25lZCBsb25nIGxvbmcgc2VxcywgY2hhciAqY3AsIHNpemVfdCBsZW4pXFxua2VybmVsL3JjdS90cmVlLmMtNTcwLXtcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jPTYwMT1ub2luc3RyIHZvaWQgcmN1X2lycV93b3JrX3Jlc2NoZWQodm9pZClcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jLTYyMi0gKi9cXG5rZXJuZWwvcmN1L3RyZWUuYzo2MjM6dm9pZCByY3VfaXJxX2V4aXRfY2hlY2tfcHJlZW1wdCh2b2lkKVxcbmtlcm5lbC9yY3UvdHJlZS5jLTYyNC17XFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYy02NjMtICovXFxua2VybmVsL3JjdS90cmVlLmM6NjY0OnZvaWQgX19yY3VfaXJxX2VudGVyX2NoZWNrX3RpY2sodm9pZClcXG5rZXJuZWwvcmN1L3RyZWUuYy02NjUte1xcbi0tXFxua2VybmVsL3JjdS90cmVlLmM9Njk4PU5PS1BST0JFX1NZTUJPTChfX3JjdV9pcnFfZW50ZXJfY2hlY2tfdGljayk7XFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYy03MTEtICovXFxua2VybmVsL3JjdS90cmVlLmM6NzEyOmludCByY3VfbmVlZHNfY3B1KHZvaWQpXFxua2VybmVsL3JjdS90cmVlLmMtNzEzLXtcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jPTc1OD1FWFBPUlRfU1lNQk9MX0dQTChyY3VfaXNfd2F0Y2hpbmcpO1xcbi0tXFxua2VybmVsL3JjdS90cmVlLmMtNzY2LSAqL1xcbmtlcm5lbC9yY3UvdHJlZS5jOjc2Nzp2b2lkIHJjdV9yZXF1ZXN0X3VyZ2VudF9xc190YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcXG5rZXJuZWwvcmN1L3RyZWUuYy03Njgte1xcbi0tXFxua2VybmVsL3JjdS90cmVlLmM9Nzc4PXN0YXRpYyB1bnNpZ25lZCBsb25nIHNlcV9ncHdyYXBfbGFnID0gVUxPTkdfTUFYIC8gNDtcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jLTc4NS0gKi9cXG5rZXJuZWwvcmN1L3RyZWUuYzo3ODY6dm9pZCByY3Vfc2V0X2dwd3JhcF9sYWcodW5zaWduZWQgbG9uZyBsYWdfZ3BzKVxcbmtlcm5lbC9yY3UvdHJlZS5jLTc4Ny17XFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYz0xMzQwPXN0YXRpYyBhdG9taWNfdCAqcmN1X2dwX3Nsb3dfc3VwcHJlc3M7XFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYy0xMzQyLS8qIFJlZ2lzdGVyIGEgY291bnRlciB0byBzdXBwcmVzcyBkZWJ1Z2dpbmcgZ3JhY2UtcGVyaW9kIGRlbGF5cy4gKi9cXG5rZXJuZWwvcmN1L3RyZWUuYzoxMzQzOnZvaWQgcmN1X2dwX3Nsb3dfcmVnaXN0ZXIoYXRvbWljX3QgKnJnc3NwKVxcbmtlcm5lbC9yY3UvdHJlZS5jLTEzNDQte1xcbi0tXFxua2VybmVsL3JjdS90cmVlLmM9MTM0OT1FWFBPUlRfU1lNQk9MX0dQTChyY3VfZ3Bfc2xvd19yZWdpc3Rlcik7XFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYy0xMzUxLS8qIFVucmVnaXN0ZXIgYSBjb3VudGVyLCB3aXRoIE5VTEwgZm9yIG5vdCBjYXJpbmcgd2hpY2guICovXFxua2VybmVsL3JjdS90cmVlLmM6MTM1Mjp2b2lkIHJjdV9ncF9zbG93X3VucmVnaXN0ZXIoYXRvbWljX3QgKnJnc3NwKVxcbmtlcm5lbC9yY3UvdHJlZS5jLTEzNTMte1xcbi0tXFxua2VybmVsL3JjdS90cmVlLmM9MTM3ND1zdGF0aWMgdW5zaWduZWQgbG9uZyBzbGVlcF9kdXJhdGlvbjtcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jLTEzNzYtLyogQWxsb3cgcmN1dG9ydHVyZSB0byBzdGFsbCB0aGUgZ3JhY2UtcGVyaW9kIGt0aHJlYWQuICovXFxua2VybmVsL3JjdS90cmVlLmM6MTM3Nzp2b2lkIHJjdV9ncF9zZXRfdG9ydHVyZV93YWl0KGludCBkdXJhdGlvbilcXG5rZXJuZWwvcmN1L3RyZWUuYy0xMzc4LXtcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jPTI1NzQ9c3RhdGljIHZvaWQgcmN1X2RvX2JhdGNoKHN0cnVjdCByY3VfZGF0YSAqcmRwKVxcbi0tXFxua2VybmVsL3JjdS90cmVlLmMtMjcyOS0gKi9cXG5rZXJuZWwvcmN1L3RyZWUuYzoyNzMwOnZvaWQgcmN1X3NjaGVkX2Nsb2NrX2lycShpbnQgdXNlcilcXG5rZXJuZWwvcmN1L3RyZWUuYy0yNzMxLXtcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jPTI3NjY9c3RhdGljIHZvaWQgZm9yY2VfcXNfcm5wKGludCAoKmYpKHN0cnVjdCByY3VfZGF0YSAqcmRwKSlcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jLTI4MjQtICovXFxua2VybmVsL3JjdS90cmVlLmM6MjgyNTp2b2lkIHJjdV9mb3JjZV9xdWllc2NlbnRfc3RhdGUodm9pZClcXG5rZXJuZWwvcmN1L3RyZWUuYy0yODI2LXtcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jPTMzMTQ9bW9kdWxlX3BhcmFtKGVuYWJsZV9yY3VfbGF6eSwgYm9vbCwgMDQ0NCk7XFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYy0zMzM1LSAqL1xcbmtlcm5lbC9yY3UvdHJlZS5jOjMzMzY6dm9pZCBjYWxsX3JjdV9odXJyeShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMpXFxua2VybmVsL3JjdS90cmVlLmMtMzMzNy17XFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYz0zMzQwPUVYUE9SVF9TWU1CT0xfR1BMKGNhbGxfcmN1X2h1cnJ5KTtcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jLTM0MDEtICovXFxua2VybmVsL3JjdS90cmVlLmM6MzQwMjp2b2lkIGNhbGxfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYylcXG5rZXJuZWwvcmN1L3RyZWUuYy0zNDAzLXtcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jPTM0MzA9c3RhdGljIHZvaWQgc3luY2hyb25pemVfcmN1X25vcm1hbCh2b2lkKVxcbi0tXFxua2VybmVsL3JjdS90cmVlLmMtMzUwMi0gKi9cXG5rZXJuZWwvcmN1L3RyZWUuYzozNTAzOnZvaWQgc3luY2hyb25pemVfcmN1KHZvaWQpXFxua2VybmVsL3JjdS90cmVlLmMtMzUwNC17XFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYz0zNTQwPUVYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3JjdSk7XFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYy0zNTQ5LSAqL1xcbmtlcm5lbC9yY3UvdHJlZS5jOjM1NTA6dm9pZCBnZXRfY29tcGxldGVkX3N5bmNocm9uaXplX3JjdV9mdWxsKHN0cnVjdCByY3VfZ3Bfc2VxICpnc3ApXFxua2VybmVsL3JjdS90cmVlLmMtMzU1MS17XFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYz0zNTczPUVYUE9SVF9TWU1CT0xfR1BMKGdldF9zdGF0ZV9zeW5jaHJvbml6ZV9yY3UpO1xcbi0tXFxua2VybmVsL3JjdS90cmVlLmMtMzU5MC0gKi9cXG5rZXJuZWwvcmN1L3RyZWUuYzozNTkxOnZvaWQgZ2V0X3N0YXRlX3N5bmNocm9uaXplX3JjdV9mdWxsKHN0cnVjdCByY3VfZ3Bfc2VxICpnc3ApXFxua2VybmVsL3JjdS90cmVlLmMtMzU5Mi17XFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYz0zNjUxPUVYUE9SVF9TWU1CT0xfR1BMKHN0YXJ0X3BvbGxfc3luY2hyb25pemVfcmN1KTtcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jLTM2NjMtICovXFxua2VybmVsL3JjdS90cmVlLmM6MzY2NDp2b2lkIHN0YXJ0X3BvbGxfc3luY2hyb25pemVfcmN1X2Z1bGwoc3RydWN0IHJjdV9ncF9zZXEgKmdzcClcXG5rZXJuZWwvcmN1L3RyZWUuYy0zNjY1LXtcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jPTM2NzA9RVhQT1JUX1NZTUJPTF9HUEwoc3RhcnRfcG9sbF9zeW5jaHJvbml6ZV9yY3VfZnVsbCk7XFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYy0zNzA0LSAqL1xcbmtlcm5lbC9yY3UvdHJlZS5jOjM3MDU6Ym9vbCBwb2xsX3N0YXRlX3N5bmNocm9uaXplX3JjdSh1bnNpZ25lZCBsb25nIG9sZHN0YXRlKVxcbmtlcm5lbC9yY3UvdHJlZS5jLTM3MDYte1xcbi0tXFxua2VybmVsL3JjdS90cmVlLmM9MzcyMz1zdGF0aWMgYm9vbCBwb2xsX3N0YXRlX3N5bmNocm9uaXplX3JjdV9mdWxsX3Vub3JkZXJlZChzdHJ1Y3QgcmN1X2dwX3NlcSAqZ3NwKVxcbi0tXFxua2VybmVsL3JjdS90cmVlLmMtMzc2Ni0gKi9cXG5rZXJuZWwvcmN1L3RyZWUuYzozNzY3OmJvb2wgcG9sbF9zdGF0ZV9zeW5jaHJvbml6ZV9yY3VfZnVsbChzdHJ1Y3QgcmN1X2dwX3NlcSAqZ3NwKVxcbmtlcm5lbC9yY3UvdHJlZS5jLTM3Njgte1xcbi0tXFxua2VybmVsL3JjdS90cmVlLmM9Mzc3Nj1FWFBPUlRfU1lNQk9MX0dQTChwb2xsX3N0YXRlX3N5bmNocm9uaXplX3JjdV9mdWxsKTtcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jLTM3OTUtICovXFxua2VybmVsL3JjdS90cmVlLmM6Mzc5Njp2b2lkIGNvbmRfc3luY2hyb25pemVfcmN1KHVuc2lnbmVkIGxvbmcgb2xkc3RhdGUpXFxua2VybmVsL3JjdS90cmVlLmMtMzc5Ny17XFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYz0zODAxPUVYUE9SVF9TWU1CT0xfR1BMKGNvbmRfc3luY2hyb25pemVfcmN1KTtcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jLTM4MjItICovXFxua2VybmVsL3JjdS90cmVlLmM6MzgyMzp2b2lkIGNvbmRfc3luY2hyb25pemVfcmN1X2Z1bGwoc3RydWN0IHJjdV9ncF9zZXEgKmdzcClcXG5rZXJuZWwvcmN1L3RyZWUuYy0zODI0LXtcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jPTM5NzA9c3RhdGljIHZvaWQgcmN1X2JhcnJpZXJfaGFuZGxlcih2b2lkICpjcHVfaW4pXFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYy0zOTk1LSAqL1xcbmtlcm5lbC9yY3UvdHJlZS5jOjM5OTY6dm9pZCByY3VfYmFycmllcih2b2lkKVxcbmtlcm5lbC9yY3UvdHJlZS5jLTM5OTcte1xcbi0tXFxua2VybmVsL3JjdS90cmVlLmM9NDE4OD1zdGF0aWMgYm9vbCByY3VfcmRwX2NwdV9vbmxpbmUoc3RydWN0IHJjdV9kYXRhICpyZHApXFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYy00MTkyLVxcbmtlcm5lbC9yY3UvdHJlZS5jOjQxOTM6Ym9vbCByY3VfY3B1X29ubGluZShpbnQgY3B1KVxcbmtlcm5lbC9yY3UvdHJlZS5jLTQxOTQte1xcbi0tXFxua2VybmVsL3JjdS90cmVlLmM9NDQwNz1zdGF0aWMgdm9pZCByY3Vfc3Bhd25fcm5wX2t0aHJlYWRzKHN0cnVjdCByY3Vfbm9kZSAqcm5wKVxcbi0tXFxua2VybmVsL3JjdS90cmVlLmMtNDQyNi0gKi9cXG5rZXJuZWwvcmN1L3RyZWUuYzo0NDI3OmludCByY3V0cmVlX3ByZXBhcmVfY3B1KHVuc2lnbmVkIGludCBjcHUpXFxua2VybmVsL3JjdS90cmVlLmMtNDQyOC17XFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYy00NDc3LSAqL1xcbmtlcm5lbC9yY3UvdHJlZS5jOjQ0Nzg6Ym9vbCByY3VfY3B1X2JlZW5mdWxseW9ubGluZShpbnQgY3B1KVxcbmtlcm5lbC9yY3UvdHJlZS5jLTQ0Nzkte1xcbi0tXFxua2VybmVsL3JjdS90cmVlLmMtNDQ4OC0gKi9cXG5rZXJuZWwvcmN1L3RyZWUuYzo0NDg5OmludCByY3V0cmVlX29ubGluZV9jcHUodW5zaWduZWQgaW50IGNwdSlcXG5rZXJuZWwvcmN1L3RyZWUuYy00NDkwLXtcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jLTQ1MjEtICovXFxua2VybmVsL3JjdS90cmVlLmM6NDUyMjp2b2lkIHJjdXRyZWVfcmVwb3J0X2NwdV9zdGFydGluZyh1bnNpZ25lZCBpbnQgY3B1KVxcbmtlcm5lbC9yY3UvdHJlZS5jLTQ1MjMte1xcbi0tXFxua2VybmVsL3JjdS90cmVlLmMtNDU3OC0gKi9cXG5rZXJuZWwvcmN1L3RyZWUuYzo0NTc5OnZvaWQgcmN1dHJlZV9yZXBvcnRfY3B1X2RlYWQodm9pZClcXG5rZXJuZWwvcmN1L3RyZWUuYy00NTgwLXtcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jLTQ2MzMtICovXFxua2VybmVsL3JjdS90cmVlLmM6NDYzNDp2b2lkIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoaW50IGNwdSlcXG5rZXJuZWwvcmN1L3RyZWUuYy00NjM1LXtcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jLTQ3MDAtICovXFxua2VybmVsL3JjdS90cmVlLmM6NDcwMTppbnQgcmN1dHJlZV9kZWFkX2NwdSh1bnNpZ25lZCBpbnQgY3B1KVxcbmtlcm5lbC9yY3UvdHJlZS5jLTQ3MDIte1xcbi0tXFxua2VybmVsL3JjdS90cmVlLmMtNDcxMy0gKi9cXG5rZXJuZWwvcmN1L3RyZWUuYzo0NzE0OmludCByY3V0cmVlX2R5aW5nX2NwdSh1bnNpZ25lZCBpbnQgY3B1KVxcbmtlcm5lbC9yY3UvdHJlZS5jLTQ3MTUte1xcbi0tXFxua2VybmVsL3JjdS90cmVlLmMtNDcyOS0gKi9cXG5rZXJuZWwvcmN1L3RyZWUuYzo0NzMwOmludCByY3V0cmVlX29mZmxpbmVfY3B1KHVuc2lnbmVkIGludCBjcHUpXFxua2VybmVsL3JjdS90cmVlLmMtNDczMS17XFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYz00ODEyPWVhcmx5X2luaXRjYWxsKHJjdV9zcGF3bl9ncF9rdGhyZWFkKTtcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jLTQ4MjMtICovXFxua2VybmVsL3JjdS90cmVlLmM6NDgyNDp2b2lkIHJjdV9zY2hlZHVsZXJfc3RhcnRpbmcodm9pZClcXG5rZXJuZWwvcmN1L3RyZWUuYy00ODI1LXtcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jPTQ5MzU9c3RhdGljIHZvaWQgX19pbml0IHNhbml0aXplX2t0aHJlYWRfcHJpbyh2b2lkKVxcbi0tXFxua2VybmVsL3JjdS90cmVlLmMtNDk1OC0gKi9cXG5rZXJuZWwvcmN1L3RyZWUuYzo0OTU5OnZvaWQgcmN1X2luaXRfZ2VvbWV0cnkodm9pZClcXG5rZXJuZWwvcmN1L3RyZWUuYy00OTYwLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTM6MzI6MDQuODA5ODc5MzE2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjE1NjAxNTYyODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gUkNVL1NSQ1UgQ29uY3VycmVuY3kgQnVnIEZpeGVzKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCByZS1lbnRyYW5jeSBpc3N1ZXMgaW4gUkNVL1NSQ1UgZHVlIHRvIG1vZGlmaWNhdGlvbnMgcmVsYXRlZCB0byBkZWZlcnJlZCBkcmFpbmluZywgcGFydGljdWxhcmx5IHdoZW4gaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBwbGFjZXMgdG8gZm9jdXMgZnV6emluZyBlZmZvcnRzLCBiYWxhbmNpbmcgdGFyZ2V0ZWQgY292ZXJhZ2Ugd2l0aCBhdm9pZGluZyBvdmVyYnJvYWQsIGdlbmVyaWMgZnVuY3Rpb25zIHRoYXQgbWlnaHQgc2tldyB0aGUgdGVzdHMuXG5cblRoZSBpbml0aWFsIGltcHVsc2Ugd2FzIHRvIHplcm8gaW4gb24gYGNhbGxfcmN1YCBhbmQgYGNhbGxfc3JjdWAsIGFzIHRoZXkncmUgdGhlIGhlYXZpbHktbW9kaWZpZWQgZnVuY3Rpb25zLiBIb3dldmVyLCB0aGUgaW5zdHJ1Y3Rpb25zIGV4cGxpY2l0bHkgYWR2aXNlIGFnYWluc3QgbGlzdGluZyBcImdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLlwiIFRob3VnaCB0aGVzZSBhcmUgd2hlcmUgdGhlIHBhdGNoJ3MgY29yZSBsb2dpYyBjaGFuZ2Ugb2NjdXJzLCBhbmQgdGhlIGlzc3VlIGlzIHNwZWNpZmljYWxseSBhYm91dCByZS1lbnRyYW5jeSBpbiB0aGVzZSBmdW5jdGlvbnMsIGxpc3RpbmcgdGhlbSB3b3VsZCBiZSB0b28gYnJvYWQuXG5cbkluc3RlYWQsIEknbGwgY29uY2VudHJhdGUgb24gdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBhZmZlY3RlZCBhbmQgY2FuIHByb3ZpZGUgYmV0dGVyIHRhcmdldGluZy4gVGhpcyBpbmNsdWRlcyBgcmN1X2JhcnJpZXJgLCBgc3JjdV9iYXJyaWVyYCwgYHNyY3Vfb2ZmbGluZV9kcmFpbmAsIGFuZCBgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc2AuIFRoZXNlIGFyZSBmdW5jdGlvbnMgdGhhdCBhcmUgbW9kaWZpZWQgYnV0IGFyZSBub3QgZ2VuZXJpYyBob3QtcGF0aHMuIGBzcmN1X29mZmxpbmVfZHJhaW5gIGFuZCBgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc2AgYXJlIGtleSwgZ2l2ZW4gdGhlIG9mZmxpbmUgQ1BVIGFuZCB0cmVlIG1hbmFnZW1lbnQgY29udGV4dC5cblxuTm93LCBjb25zaWRlcmluZyB0aGUgcGF0Y2gncyB1c2Ugb2YgYHJjdXRvcnR1cmUuY2AsIGFuZCB0aGUgYHNob3VsZF9yY3VfZGVmZXIoKWAgbG9naWMgcmVsYXRlZCB0byBgaXJxc19kaXNhYmxlZCgpYCBhbmQgYHJjdV9zY2hlZHVsZXJfYWN0aXZlYCwgSSdsbCBuZWVkIHRvIGVuYWJsZSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gZmxhZ3MuIGBSQ1VfVE9SVFVSRV9URVNUYCBpcyBhIG11c3QsIGdpdmVuIHRoZSBkaXJlY3QgY2hhbmdlcyB0byB0aGUgdGVzdCBjb2RlLiBBbHNvLCBgUEVSRl9FVkVOVFNgIGlzIHJlcXVpcmVkIGZvciB0aGUgTk1JLWJhc2VkIHRlc3RzIHdpdGhpbiBgcmN1dG9ydHVyZS5jYCwgc28gSSdsbCBpbmNsdWRlIGl0LlxuXG5TaW5jZSB0aGUgcGF0Y2ggaW5jbHVkZXMgYFdBUk5fT05DRShJU19FTkFCTEVEKENPTkZJR19QUk9WRV9SQ1UpLCAuLi4pYCBzdGF0ZW1lbnRzLCBJJ2xsIGFkZCBgUFJPVkVfUkNVYCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgIHRvIGVuc3VyZSB0aGlzIGNoZWNrIGlzIGFjdGl2ZSBhbmQgdGhhdCB0aGUgdGVzdGluZyBpcyBjb21wcmVoZW5zaXZlLlxuXG5JbiBzdW1tYXJ5LCB0aGUgYEZvY3VzU3ltYm9sc2Agd2lsbCBiZTpcblxuKiAgIGByY3VfYmFycmllcmBcbiogICBgc3JjdV9iYXJyaWVyYFxuKiAgIGBzcmN1X29mZmxpbmVfZHJhaW5gXG4qICAgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgXG5cbkFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIHdpbGwgYmU6XG5cbiogICBgUkNVX1RPUlRVUkVfVEVTVGBcbiogICBgUEVSRl9FVkVOVFNgXG4qICAgYFBST1ZFX1JDVWBcblxuVGhpcyBzZXR1cCBzaG91bGQgcHJvdmlkZSBmb2N1c2VkIGZ1enppbmcgb24gdGhlIG1vZGlmaWVkIFJDVS9TUkNVIGZ1bmN0aW9ucywgYW5kIGFsc28gZW5zdXJlIHRoZSBuZXcgdG9ydHVyZSB0ZXN0cyBhcmUgYWN0aXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTIwMiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTM6MzI6MjYuMzcwMDM4MzNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU0MTc4Mjc1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUFJPVkVfUkNVXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvcmN1L0tjb25maWcuZGVidWc9Nj1tZW51IFxcXCJSQ1UgRGVidWdnaW5nXFxcIlxcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zy03LVxcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zzo4OmNvbmZpZyBQUk9WRV9SQ1VcXG5rZXJuZWwvcmN1L0tjb25maWcuZGVidWctOS1cXHRkZWZfYm9vbCBQUk9WRV9MT0NLSU5HXFxua2VybmVsL3JjdS9LY29uZmlnLmRlYnVnLTEwLVxcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1ZzoxMTpjb25maWcgUFJPVkVfUkNVX0xJU1RcXG5rZXJuZWwvcmN1L0tjb25maWcuZGVidWctMTItXFx0Ym9vbCBcXFwiUkNVIGxpc3QgbG9ja2RlcCBkZWJ1Z2dpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDEzOjMyOjI4LjkxMTgyNTYxNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MzQzNzIxODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6XG5cbioqUkNVIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLiBgUFJPVkVfUkNVYC4uLiByaWdodCwgaXQncyBkZWZpbmVkIGFzIGBkZWZfYm9vbCBQUk9WRV9MT0NLSU5HYC4gVGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZC4gU28sIGlmIHdlIHdhbnQgYFBST1ZFX1JDVWAgdG8gYmUgYWN0aXZlLCB3ZSAqbXVzdCogYWxzbyBlbmFibGUgYFBST1ZFX0xPQ0tJTkdgLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IHRoZSBSQ1UgcHJvdmluZyBncm91bmQgcmVsaWVzIG9uIHRoZSBpbmZyYXN0cnVjdHVyZSBwcm92aWRlZCBieSB0aGUgbG9ja2luZyBwcm92aW5nIHN5c3RlbS5cblxuTm93LCB3aGVyZSBkb2VzIHRoYXQgbGVhdmUgdXM/IEkgdGhpbmsgaXQncyB0aW1lIHRvIGNoZWNrIHRoZSBzdGF0ZSBvZiBgUkNVX1RPUlRVUkVfVEVTVGAuIEkgbmVlZCB0byBlbnN1cmUgd2UndmUgZ290IHRoZSBuZWNlc3NhcnkgaW5mcmFzdHJ1Y3R1cmUgaW4gcGxhY2UgZm9yIHByb3BlciB0ZXN0aW5nLiBXZSBkb24ndCB3YW50IHRvIGdldCBjYXVnaHQgb2ZmLWd1YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzQ1MCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDEzOjMyOjMyLjc0NjIwMTAzMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzMjY4MzQwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUkNVX1RPUlRVUkVfVEVTVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3JjdS9LY29uZmlnLmRlYnVnPTI2PWNvbmZpZyBSQ1VfU0NBTEVfVEVTVFxcbi0tXFxua2VybmVsL3JjdS9LY29uZmlnLmRlYnVnLTQwLVxcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zzo0MTpjb25maWcgUkNVX1RPUlRVUkVfVEVTVFxcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zy00Mi1cXHR0cmlzdGF0ZSBcXFwidG9ydHVyZSB0ZXN0cyBmb3IgUkNVXFxcIlxcbi0tXFxua2VybmVsL3JjdS9LY29uZmlnLmRlYnVnLTU1LVxcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zzo1Njpjb25maWcgUkNVX1RPUlRVUkVfVEVTVF9DSEtfUkRSX1NUQVRFXFxua2VybmVsL3JjdS9LY29uZmlnLmRlYnVnLTU3LVxcdGJvb2wgXFxcIkNoZWNrIHJjdXRvcnR1cmUgcmVhZGVyIHN0YXRlXFxcIlxcbi0tXFxua2VybmVsL3JjdS9LY29uZmlnLmRlYnVnLTcxLVxcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zzo3Mjpjb25maWcgUkNVX1RPUlRVUkVfVEVTVF9MT0dfQ1BVXFxua2VybmVsL3JjdS9LY29uZmlnLmRlYnVnLTczLVxcdGJvb2wgXFxcIkxvZyBDUFUgZm9yIHJjdXRvcnR1cmUgZmFpbHVyZXNcXFwiXFxuLS1cXG5rZXJuZWwvcmN1L0tjb25maWcuZGVidWctODYtXFxua2VybmVsL3JjdS9LY29uZmlnLmRlYnVnOjg3OmNvbmZpZyBSQ1VfVE9SVFVSRV9URVNUX0xPR19HUFxcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zy04OC1cXHRib29sIFxcXCJMb2cgZ3JhY2UtcGVyaW9kIG51bWJlcnMgZm9yIHJjdXRvcnR1cmUgZmFpbHVyZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDEzOjMyOjM0Ljk3ODk0ODMwNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Njk0MDAyNTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyB0aGUgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBgUkNVX1RPUlRVUkVfVEVTVGAuIEkgdW5kZXJzdGFuZCB0aGF0J3MgYSB0cmlzdGF0ZSBvcHRpb24sIG1lYW5pbmcgaXQgY2FuIGJlIGVpdGhlciBlbmFibGVkLCBkaXNhYmxlZCwgb3IgYnVpbHQgYXMgYSBtb2R1bGUuIEludGVyZXN0aW5nLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHdoZXRoZXIgd2UgY2FuIGFjdHVhbGx5IGVuYWJsZSBpdCBmb3IgdGhlIHNpdHVhdGlvbiB3ZSdyZSBpbi4gVGhpcyBpcyBnb2luZyB0byBkZXBlbmQgb24gYSBsb3Qgb2YgdGhpbmdzLiBCZWZvcmUgSSBkaXZlIGluIHRvbyBkZWVwIG9uIFJDVSwgSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIGxvb2sgYXQgdGhlIGBQRVJGX0VWRU5UU2Agb3B0aW9uLiBJdCBjb3VsZCBiZSByZWxldmFudCwgZm9yIGFsbCBraW5kcyBvZiByZWFzb25zLiBBcmUgdGhleSBlbmFibGVkPyBEbyB0aGV5IGludGVyZmVyZT8gRG9lcyB0aGUgYnVpbGQgZW52aXJvbm1lbnQgZXZlbiBzdXBwb3J0IGJvdGg/IEl0IHNlZW1zIGxpa2UgYFBFUkZfRVZFTlRTYCBpcyBhIHBvdGVudGlhbCBwaWVjZSBvZiB0aGUgbGFyZ2VyIHBpY3R1cmUsIGRlcGVuZGluZyBvbiBob3cgdGhpcyB0ZXN0IGlzIGdvaW5nIHRvIGJlIHVzZWQgYW5kIHdoZXJlIGFuZCBob3cgd2Ugd2lsbCBnYXRoZXIgaW5zaWdodHMgaW50byBpdHMgcmVzdWx0cy4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgcmVsYXRlIGJlZm9yZSBJIHNwZW5kIHRvbyBtdWNoIHRpbWUgb24gdGhlIHRvcnR1cmUgdGVzdCBpdHNlbGYuIExldCdzIG1ha2Ugc3VyZSBgUEVSRl9FVkVOVFNgIGlzIGluIHRoZSByaWdodCBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODAxMSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDEzOjMyOjQxLjY3Mjk1NTE1OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzODA2OTQxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUEVSRl9FVkVOVFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2V2ZW50cy9LY29uZmlnPTI9bWVudSBcXFwiUGVyZm9ybWFuY2UgbW9uaXRvcmluZ1xcXCJcXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0zLVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjQ6Y29uZmlnIFBFUkZfRVZFTlRTX0lOVEVMX1VOQ09SRVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTUtXFx0dHJpc3RhdGUgXFxcIkludGVsIHVuY29yZSBwZXJmb3JtYW5jZSBldmVudHNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0xMS1cXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZzoxMjpjb25maWcgUEVSRl9FVkVOVFNfSU5URUxfUkFQTFxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTEzLVxcdHRyaXN0YXRlIFxcXCJJbnRlbC9BTUQgcmFwbCBwZXJmb3JtYW5jZSBldmVudHNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0xOS1cXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZzoyMDpjb25maWcgUEVSRl9FVkVOVFNfSU5URUxfQ1NUQVRFXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMjEtXFx0dHJpc3RhdGUgXFxcIkludGVsIGNzdGF0ZSBwZXJmb3JtYW5jZSBldmVudHNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0yNy1cXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZzoyODpjb25maWcgUEVSRl9FVkVOVFNfQU1EX1BPV0VSXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMjktXFx0ZGVwZW5kcyBvbiBQRVJGX0VWRU5UUyBcXHUwMDI2XFx1MDAyNiBDUFVfU1VQX0FNRFxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMzYtXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWc6Mzc6Y29uZmlnIFBFUkZfRVZFTlRTX0FNRF9VTkNPUkVcXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0zOC1cXHR0cmlzdGF0ZSBcXFwiQU1EIFVuY29yZSBwZXJmb3JtYW5jZSBldmVudHNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy00Ny1cXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZzo0ODpjb25maWcgUEVSRl9FVkVOVFNfQU1EX0JSU1xcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTQ5LVxcdGRlcGVuZHMgb24gUEVSRl9FVkVOVFMgXFx1MDAyNlxcdTAwMjYgQ1BVX1NVUF9BTURcXG4tLVxcbmluaXQvS2NvbmZpZz0yMTc1PW1lbnUgXFxcIktlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzXFxcIlxcbmluaXQvS2NvbmZpZy0yMTc2LVxcbmluaXQvS2NvbmZpZzoyMTc3OmNvbmZpZyBQRVJGX0VWRU5UU1xcbmluaXQvS2NvbmZpZy0yMTc4LVxcdGJvb2wgXFxcIktlcm5lbCBwZXJmb3JtYW5jZSBldmVudHMgYW5kIGNvdW50ZXJzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMzozMjo0My45MTEwMzAxOTNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE5NjI1MzI3OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUkNVL1NSQ1UgRGVmZXJyYWwgSW1wbGVtZW50YXRpb24gVGhvdWdodHMqKlxuXG5Pa2F5LCBzbyBgUEVSRl9FVkVOVFNgIGlzIGNvbmZpcm1lZCBhcyBhIGJvb2xlYW4gdmFsdWUuIFRoYXQgbWVhbnMgdGhlIGBFbmFibGVDb25maWdzYCB3aWxsIGNvbnNpc3Qgb2YgYFBST1ZFX0xPQ0tJTkdgLCBgUkNVX1RPUlRVUkVfVEVTVGAsIGFuZCwgb2YgY291cnNlLCBgUEVSRl9FVkVOVFNgLlxuXG5Ob3csIGZvciB0aGUgYEZvY3VzU3ltYm9sc2A6IGByY3VfYmFycmllcmAsIGBzcmN1X2JhcnJpZXJgLCBgc3JjdV9vZmZsaW5lX2RyYWluYCwgYW5kIGByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzYCBhcmUgdGhlIGtleSBmdW5jdGlvbnMgSSdtIGZvY3VzaW5nIG9uLlxuXG5XYWl0LCBgc3JjdV9kZWZlcl9kcmFpbmAgaXMgZXhwb3J0ZWQgZnJvbSBga2VybmVsL3JjdS9zcmN1dGlueS5jYC4gIEkgYWxtb3N0IG1pc3NlZCB0aGF0LiAgTG9va2luZyBhdCBpdHMgZGVmaW5pdGlvbjpcblxuYGBgY1xudm9pZCBzcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpXG5gYGBcblxuSXQncyBhbiBgaXJxX3dvcmtgIGNhbGxiYWNrLCBzbyBpdCdzIG5vdCB1c3VhbGx5IGNhbGxlZCBkaXJlY3RseSwgYnV0IHRoZSBmYWN0IHRoYXQgaXQncyBleHBvcnRlZCBtZWFucyBpdCAqY291bGQqIGJlIHVzZWQgZXh0ZXJuYWxseS4gSSBzaG91bGQgZGVmaW5pdGVseSBpbmNsdWRlIGl0LiBCZXR0ZXIgdG8gYmUgdGhvcm91Z2gsIEkgc3VwcG9zZS5cblxuTGV0J3MgZG8gYSBxdWljayBzY2FuIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBvdGhlciBleHBvcnRlZCBmdW5jdGlvbnMuICBBaCwgYGNhbGxfc3JjdWAgaXMgZXhwb3J0ZWQuIEhvd2V2ZXIsIGl0IGlzIGEgaG90IHBhdGggc28gSSB3b24ndCBpbmNsdWRlIGl0LlxuXG5BbHJpZ2h0LCBiYWNrIHRvIGBzcmN1X2RlZmVyX2RyYWluYC4gSSdsbCBnbyB3aXRoIGluY2x1ZGluZyB0aGF0IGluIHRoZSBzZXQuXG5cbk15IHJlYXNvbmluZyBoZXJlIGlzIHRoYXQgdGhlIG92ZXJhbGwgcGF0Y2ggYWRkcmVzc2VzIGEgY3JpdGljYWwgaXNzdWU6IGRlZmVycmluZyBgY2FsbF9yY3UoKWAgYW5kIGBjYWxsX3NyY3UoKWAgY2FsbGJhY2tzLCBlc3BlY2lhbGx5IHdoZW4gaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQuIFRoaXMgaXMgZXNzZW50aWFsIHRvIHByZXZlbnQgZGVhZGxvY2tzIGFuZCBwb3RlbnRpYWwgbGlzdCBjb3JydXB0aW9uIGR1cmluZyByZS1lbnRyYW50IGNhbGxzIOKAkyB0aGluayBCUEYgb3IgTk1Jcy4gVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgYGlycV93b3JrYCBhbmQgbG9ja2xlc3MgbGlzdHMgZm9yIHRoZSBkZWZlcnJhbC4gSXQncyBmdW5jdGlvbmFsLCB0aGUgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgdGhlc2UgY2hhbmdlcyB0b3VjaCBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcywgc28gaXQncyBhIGNyaXRpY2FsIGFyZWEgdG8gYW5hbHl6ZS5cblxuSnVzdCBhIGZpbmFsIGNoZWNrLCBJIG5lZWQgdG8gdmVyaWZ5IGBzcmN1X29mZmxpbmVfZHJhaW5gLiBJJ2xsIGxvb2sgYXQgdGhlIGRlZmluaXRpb24gaW4gYGtlcm5lbC9yY3Uvc3JjdXRyZWUuY2A6XG5cbmBgYGNcbnZvaWQgc3JjdV9vZmZsaW5lX2RyYWluKGludCBjcHUpXG5gYGBcbkFsdGhvdWdoIGl0IGlzIG5vdCBleHBvcnRlZCwgaXQgaXMgY2FsbGVkIGJ5IGByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzYCB3aGljaCBpcyBpbiBga2VybmVsL3JjdS90cmVlLmNgLCBzbyBJIHNob3VsZCBiZSBnb29kIHRvIGluY2x1ZGUgaXQuXG5cbk9rYXksIEknbSBjb25maWRlbnQuIFRpbWUgdG8gdXNlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjozODgxMiwiT3V0cHV0VG9rZW5zIjoxODYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTM6MzI6NTUuODczNTY3ODQ5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2MTQ0Mzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUk9WRV9MT0NLSU5HXCIsXG4gICAgXCJSQ1VfVE9SVFVSRV9URVNUXCIsXG4gICAgXCJQRVJGX0VWRU5UU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJjdV9iYXJyaWVyXCIsXG4gICAgXCJzcmN1X2JhcnJpZXJcIixcbiAgICBcInNyY3Vfb2ZmbGluZV9kcmFpblwiLFxuICAgIFwicmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc1wiLFxuICAgIFwic3JjdV9kZWZlcl9kcmFpblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgUkNVIGFuZCBTUkNVIGxvZ2ljIHRvIGRlZmVyIGBjYWxsX3JjdSgpYCBhbmQgYGNhbGxfc3JjdSgpYCBjYWxsYmFja3Mgd2hlbiBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZC4gVGhpcyBwcmV2ZW50cyBkZWFkbG9ja3Mgb3IgbGlzdCBjb3JydXB0aW9uIGR1cmluZyByZS1lbnRyYW50IGNhbGxzIChlLmcuLCBmcm9tIEJQRiBwcm9ncmFtcyBvciBOTUlzKS4gSXQgaW50cm9kdWNlcyBhIG5ldyBkZWZlcnJhbCBtZWNoYW5pc20gdXNpbmcgYGlycV93b3JrYCBhbmQgbG9ja2xlc3MgbGlzdHMuIFRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsLCByZWFjaGFibGUsIGFuZCBhZmZlY3QgY29yZSBrZXJuZWwgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFJPVkVfTE9DS0lOR1wiLFxuICAgIFwiUkNVX1RPUlRVUkVfVEVTVFwiLFxuICAgIFwiUEVSRl9FVkVOVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyY3VfYmFycmllclwiLFxuICAgIFwic3JjdV9iYXJyaWVyXCIsXG4gICAgXCJzcmN1X29mZmxpbmVfZHJhaW5cIixcbiAgICBcInJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NcIixcbiAgICBcInNyY3VfZGVmZXJfZHJhaW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFJDVSBhbmQgU1JDVSBsb2dpYyB0byBkZWZlciBgY2FsbF9yY3UoKWAgYW5kIGBjYWxsX3NyY3UoKWAgY2FsbGJhY2tzIHdoZW4gaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQuIFRoaXMgcHJldmVudHMgZGVhZGxvY2tzIG9yIGxpc3QgY29ycnVwdGlvbiBkdXJpbmcgcmUtZW50cmFudCBjYWxscyAoZS5nLiwgZnJvbSBCUEYgcHJvZ3JhbXMgb3IgTk1JcykuIEl0IGludHJvZHVjZXMgYSBuZXcgZGVmZXJyYWwgbWVjaGFuaXNtIHVzaW5nIGBpcnFfd29ya2AgYW5kIGxvY2tsZXNzIGxpc3RzLiBUaGUgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCwgcmVhY2hhYmxlLCBhbmQgYWZmZWN0IGNvcmUga2VybmVsIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7w45t[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-05 13:29:13 +0000 UTC FinishedAt: 2026-08-05 13:32:57 +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": "0f6da28aab51b16762ed82e8fdeaa5042da45b08", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROVE_LOCKING", "RCU_TORTURE_TEST", "PERF_EVENTS" ], "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": "0f6da28aab51b16762ed82e8fdeaa5042da45b08", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROVE_LOCKING", "RCU_TORTURE_TEST", "PERF_EVENTS" ], "series_id": "b70039bd-ccf0-4ffb-990d-965605a29dc1" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "rcu_barrier", "srcu_barrier", "srcu_offline_drain", "rcutree_migrate_callbacks", "srcu_defer_drain" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDEzOjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BST1ZFX0xPQ0tJTkcmIzM0OywKICAgICYjMzQ7UkNVX1RPUlRVUkVfVEVTVCYjMzQ7LAogICAgJiMzNDtQRVJGX0VWRU5UUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JjdV9iYXJyaWVyJiMzNDssCiAgICAmIzM0O3NyY3VfYmFycmllciYjMzQ7LAogICAgJiMzNDtzcmN1X29mZmxpbmVfZHJhaW4mIzM0OywKICAgICYjMzQ7cmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcyYjMzQ7LAogICAgJiMzNDtzcmN1X2RlZmVyX2RyYWluJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgUkNVIGFuZCBTUkNVIGxvZ2ljIHRvIGRlZmVyIGBjYWxsX3JjdSgpYCBhbmQgYGNhbGxfc3JjdSgpYCBjYWxsYmFja3Mgd2hlbiBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZC4gVGhpcyBwcmV2ZW50cyBkZWFkbG9ja3Mgb3IgbGlzdCBjb3JydXB0aW9uIGR1cmluZyByZS1lbnRyYW50IGNhbGxzIChlLmcuLCBmcm9tIEJQRiBwcm9ncmFtcyBvciBOTUlzKS4gSXQgaW50cm9kdWNlcyBhIG5ldyBkZWZlcnJhbCBtZWNoYW5pc20gdXNpbmcgYGlycV93b3JrYCBhbmQgbG9ja2xlc3MgbGlzdHMuIFRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsLCByZWFjaGFibGUsIGFuZCBhZmZlY3QgY29yZSBrZXJuZWwgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTM6MzE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5NGQyMmM2NzcxODdmMmU2ZGE5NmQ3ZjM4YTdhMmNiZTEwOTM2NmIwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgNSAxMzozMTozOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NyY3V0aW55LmggYi9pbmNsdWRlL2xpbnV4L3NyY3V0aW55LmhcbmluZGV4IGZiY2YxM2JjMTJkMTUuLmEwZTU0ZDkxODJiYWEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NyY3V0aW55LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3JjdXRpbnkuaFxuQEAgLTEyLDYgJiM0MzsxMiw3IEBAXG4gI2RlZmluZSBfTElOVVhfU1JDVV9USU5ZX0hcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnFfd29ya190eXBlcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xsaXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zd2FpdC5oXHUwMDNlXG4gXG4gc3RydWN0IHNyY3Vfc3RydWN0IHtcbkBAIC0yNiw2ICYjNDM7MjcsOCBAQCBzdHJ1Y3Qgc3JjdV9zdHJ1Y3Qge1xuIFx0c3RydWN0IHJjdV9oZWFkICoqc3JjdV9jYl90YWlsO1x0LyogUGVuZGluZyBjYWxsYmFja3M6IFRhaWwuICovXG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc3JjdV93b3JrO1x0LyogRm9yIGRyaXZpbmcgZ3JhY2UgcGVyaW9kcy4gKi9cbiBcdHN0cnVjdCBpcnFfd29yayBzcmN1X2lycV93b3JrO1x0LyogRGVmZXIgc2NoZWR1bGVfd29yaygpIHRvIGlycSB3b3JrLiAqL1xuJiM0MztcdHN0cnVjdCBsbGlzdF9oZWFkIGRlZmVyX2NicztcdC8qIENhbGxiYWNrcyBkZWZlcnJlZCBvbiByZS1lbnRyeS4gKi9cbiYjNDM7XHRzdHJ1Y3QgaXJxX3dvcmsgZGVmZXJfaXc7XHRcdC8qIFJlZ2lzdGVycyBkZWZlcl9jYnMgbGF0ZXIuICovXG4gI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DXG4gXHRzdHJ1Y3QgbG9ja2RlcF9tYXAgZGVwX21hcDtcbiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DICovXG5AQCAtMzMsNiAmIzQzOzM2LDcgQEAgc3RydWN0IHNyY3Vfc3RydWN0IHtcbiBcbiB2b2lkIHNyY3VfZHJpdmVfZ3Aoc3RydWN0IHdvcmtfc3RydWN0ICp3cCk7XG4gdm9pZCBzcmN1X3RpbnlfaXJxX3dvcmsoc3RydWN0IGlycV93b3JrICppcnFfd29yayk7XG4mIzQzO3ZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKmlycV93b3JrKTtcbiBcbiAjZGVmaW5lIF9fU1JDVV9TVFJVQ1RfSU5JVChuYW1lLCBfX2lnbm9yZWQsIF9fX2lnbm9yZWQsIF9fX19pZ25vcmVkKVx0XFxcbiB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbkBAIC00MCw2ICYjNDM7NDQsOSBAQCB2b2lkIHNyY3VfdGlueV9pcnFfd29yayhzdHJ1Y3QgaXJxX3dvcmsgKmlycV93b3JrKTtcbiBcdC5zcmN1X2NiX3RhaWwgPSBcdTAwMjZuYW1lLnNyY3VfY2JfaGVhZCxcdFx0XHRcdFxcXG4gXHQuc3JjdV93b3JrID0gX19XT1JLX0lOSVRJQUxJWkVSKG5hbWUuc3JjdV93b3JrLCBzcmN1X2RyaXZlX2dwKSxcdFxcXG4gXHQuc3JjdV9pcnFfd29yayA9IHsgLmZ1bmMgPSBzcmN1X3RpbnlfaXJxX3dvcmsgfSxcdFx0XFxcbiYjNDM7XHQuZGVmZXJfY2JzID0gTExJU1RfSEVBRF9JTklUKG5hbWUuZGVmZXJfY2JzKSxcdFx0XHRcXFxuJiM0MztcdC5kZWZlcl9pdyA9IHsgLm5vZGUgPSB7IC51X2ZsYWdzID0gSVJRX1dPUktfSEFSRF9JUlEgfSxcdFx0XFxcbiYjNDM7XHRcdCAgICAgIC5mdW5jID0gc3JjdV9kZWZlcl9kcmFpbiB9LFx0XHRcdFxcXG4gXHRfX1NSQ1VfREVQX01BUF9JTklUKG5hbWUpXHRcdFx0XHRcdFxcXG4gfVxuIFxuQEAgLTEzMSwxMCAmIzQzOzEzOCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzeW5jaHJvbml6ZV9zcmN1X2V4cGVkaXRlZChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbiBcdHN5bmNocm9uaXplX3NyY3Uoc3NwKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbi17XG4tXHRzeW5jaHJvbml6ZV9zcmN1KHNzcCk7XG4tfVxuJiM0Mzt2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCk7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIHNyY3VfZXhwZWRpdGVfY3VycmVudChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCkgeyB9XG4gI2RlZmluZSBzcmN1X2NoZWNrX3JlYWRfZmxhdm9yKHNzcCwgcmVhZF9mbGF2b3IpIGRvIHsgfSB3aGlsZSAoMClcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NyY3V0cmVlLmggYi9pbmNsdWRlL2xpbnV4L3NyY3V0cmVlLmhcbmluZGV4IDc1ZTU0ZTRmOTYzZmEuLjA5YTljOGY0YTZkMjQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NyY3V0cmVlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3JjdXRyZWUuaFxuQEAgLTEzLDYgJiM0MzsxMyw4IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1X25vZGVfdHJlZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGxldGlvbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycV93b3JrX3R5cGVzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGxpc3QuaFx1MDAzZVxuIFxuIHN0cnVjdCBzcmN1X25vZGU7XG4gc3RydWN0IHNyY3Vfc3RydWN0O1xuQEAgLTQxLDYgJiM0Mzs0Myw5IEBAIHN0cnVjdCBzcmN1X2RhdGEge1xuIFx0Ym9vbCBzcmN1X2NibGlzdF9pbnZva2luZztcdFx0LyogSW52b2tpbmcgdGhlc2UgQ0JzPyAqL1xuIFx0c3RydWN0IHRpbWVyX2xpc3QgZGVsYXlfd29yaztcdFx0LyogRGVsYXkgZm9yIENCIGludm9raW5nICovXG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yaztcdFx0LyogQ29udGV4dCBmb3IgQ0IgaW52b2tpbmcuICovXG4mIzQzO1x0c3RydWN0IGxsaXN0X2hlYWQgZGVmZXJfY2JzO1x0XHQvKiBDYWxsYmFja3MgZGVmZXJyZWQgb24gcmUtZW50cnkuICovXG4mIzQzO1x0c3RydWN0IGxsaXN0X25vZGUgZGVmZXJfbGluaztcdFx0LyogTGlua3Mgb250byB0aGUgcGVyLUNQVSBkZWZlcnJhbCBkcmFpbiBsaXN0ICovXG4mIzQzO1x0Ym9vbCBkZWZlcl9leHA7XHRcdFx0XHQvKiBBIGRlZmVycmVkIGNhbGxiYWNrIGFza2VkIHRvIGV4cGVkaXRlLiAqL1xuIFx0c3RydWN0IHJjdV9oZWFkIHNyY3VfYmFycmllcl9oZWFkO1x0LyogRm9yIHNyY3VfYmFycmllcigpIHVzZS4gKi9cbiBcdHN0cnVjdCByY3VfaGVhZCBzcmN1X2VjX2hlYWQ7XHRcdC8qIEZvciBzcmN1X2V4cGVkaXRlX2N1cnJlbnQoKSB1c2UuICovXG4gXHRpbnQgc3JjdV9lY19zdGF0ZTtcdFx0XHQvKiAgU3RhdGUgZm9yIHNyY3VfZXhwZWRpdGVfY3VycmVudCgpLiAqL1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvS2NvbmZpZyBiL2tlcm5lbC9yY3UvS2NvbmZpZ1xuaW5kZXggMzMyZGY3YTdhNjM0Ny4uYmM5NDgzYzBiNWQ4NCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9yY3UvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS9LY29uZmlnXG5AQCAtMTc1LDYgJiM0MzsxNzUsMTIgQEAgY29uZmlnIFJDVV9TVEFMTF9DT01NT05cbiBjb25maWcgUkNVX05FRURfU0VHQ0JMSVNUXG4gXHRkZWZfYm9vbCAoIFRSRUVfUkNVIHx8IFRSRUVfU1JDVSB8fCBUQVNLU19SQ1VfR0VORVJJQyApXG4gXG4mIzQzOyMgVGhlIGRlZmVycmFsIChhbmQgdGhlIElSUV9XT1JLIGl0IHVzZXMpIGlzIG9ubHkgbmVlZGVkIHdoZXJlIGNhbGxfcmN1KCkgL1xuJiM0MzsjIGNhbGxfc3JjdSgpIGNhbiBiZSBpbnZva2VkIHdoaWxlIGEgY2FsbGJhY2stbGlzdCBvcGVyYXRpb24gaXMgaW4gZmxpZ2h0LlxuJiM0Mztjb25maWcgUkNVX0RFRkVSXG4mIzQzO1x0ZGVmX2Jvb2wgSEFWRV9OTUkgfHwgS1BST0JFUyB8fCBGVU5DVElPTl9UUkFDRVIgfHwgVFJBQ0VQT0lOVFNcbiYjNDM7XHRzZWxlY3QgSVJRX1dPUktcbiYjNDM7XG4gY29uZmlnIFJDVV9GQU5PVVRcbiBcdGludCBcJiMzNDtUcmVlLWJhc2VkIGhpZXJhcmNoaWNhbCBSQ1UgZmFub3V0IHZhbHVlXCYjMzQ7XG4gXHRyYW5nZSAyIDY0IGlmIDY0QklUXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9yY3UuaCBiL2tlcm5lbC9yY3UvcmN1LmhcbmluZGV4IDM5YTlmNmZhOWE3YjIuLjg0ZDc0Y2Q1YTM1MWMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvcmN1L3JjdS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvcmN1L3JjdS5oXG5AQCAtNTcyLDYgJiM0Mzs1NzIsMjQgQEAgc3RhdGljIGlubGluZSB2b2lkIHRhc2tzX2NibGlzdF9pbml0X2dlbmVyaWModm9pZCkgeyB9XG4gI2RlZmluZSBSQ1VfU0NIRURVTEVSX0lOSVRcdDFcbiAjZGVmaW5lIFJDVV9TQ0hFRFVMRVJfUlVOTklOR1x0MlxuIFxuJiM0MzsvKlxuJiM0MzsgKiBEZWZlciBhIGNhbGxfcmN1KCkvY2FsbF9zcmN1KCkgY2FsbGJhY2sgcmF0aGVyIHRoYW4gZW5xdWV1ZSBpdCBub3c/ICBEZWZlclxuJiM0MzsgKiB3aGVuZXZlciBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCwgc2luY2UgYSBjYWxsYmFjay1saXN0IG9wZXJhdGlvbiBtYXkgYmUgaW5cbiYjNDM7ICogZmxpZ2h0IG9uIHRoaXMgQ1BVLiAgTm90IGJlZm9yZSB0aGUgc2NoZWR1bGVyIGlzIHVwLCB0aG91Z2g6IHRoYXQgY292ZXJzXG4mIzQzOyAqIGVhcmx5IGJvb3QsIHdoZXJlIGlycV93b3JrIGlzIG5vdCB5ZXQgdXNhYmxlIGFuZCByY3VfaW5pdCgpIGl0c2VsZiBhbHJlYWR5XG4mIzQzOyAqIGNhbGxzIGNhbGxfcmN1KCkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX3JjdV9kZWZlcih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaXJxc19kaXNhYmxlZCgpIFx1MDAyNlx1MDAyNiByY3Vfc2NoZWR1bGVyX2FjdGl2ZSAhPSBSQ1VfU0NIRURVTEVSX0lOQUNUSVZFO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBEcmFpbiBhbiBvdXRnb2luZyBDUFUmIzM5O3MgZGVmZXJyZWQgU1JDVSBjYWxsYmFja3M7IHNlZSByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKCkuICovXG4mIzQzO3ZvaWQgc3JjdV9vZmZsaW5lX2RyYWluKGludCBjcHUpO1xuJiM0MztcbiBlbnVtIHJjdXRvcnR1cmVfdHlwZSB7XG4gXHRSQ1VfRkxBVk9SLFxuIFx0UkNVX1RBU0tTX0ZMQVZPUixcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYyBiL2tlcm5lbC9yY3UvcmN1dG9ydHVyZS5jXG5pbmRleCA3OTQ5MzdlMTNlN2MzLi5hODRlNzI1ZTgwNjU2IDEwMDY0NFxuLS0tIGEva2VybmVsL3JjdS9yY3V0b3J0dXJlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9yY3UvcmN1dG9ydHVyZS5jXG5AQCAtNDgsNiAmIzQzOzQ4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90aWNrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VwZGF0ZV90cmFjZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbm1pLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGVyZl9ldmVudC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7cmN1LmhcJiMzNDtcbiBcbkBAIC0xMTUsNiAmIzQzOzExNiw3IEBAIHRvcnR1cmVfcGFyYW0oaW50LCBsZWFrcG9pbnRlciwgMCwgXCYjMzQ7TGVhayBwb2ludGVyIGRlcmVmZXJlbmNlcyBmcm9tIHJlYWRlcnNcJiMzNDspO1xuIHRvcnR1cmVfcGFyYW0oaW50LCBuX2JhcnJpZXJfY2JzLCAwLCBcJiMzNDsjIG9mIGNhbGxiYWNrcy9rdGhyZWFkcyBmb3IgYmFycmllciB0ZXN0aW5nXCYjMzQ7KTtcbiB0b3J0dXJlX3BhcmFtKGludCwgbl91cF9kb3duLCAzMiwgXCYjMzQ7IyBvZiBjb25jdXJyZW50IHVwL2Rvd24gaHJ0aW1lci1iYXNlZCBSQ1UgcmVhZGVyc1wmIzM0Oyk7XG4gdG9ydHVyZV9wYXJhbShpbnQsIG5mYWtld3JpdGVycywgNCwgXCYjMzQ7TnVtYmVyIG9mIFJDVSBmYWtlIHdyaXRlciB0aHJlYWRzXCYjMzQ7KTtcbiYjNDM7dG9ydHVyZV9wYXJhbShib29sLCBubWlfY2FsbHMsIHRydWUsIFwmIzM0O0V4ZXJjaXNlIC1cdTAwM2VjYWxsKCkgZnJvbSBOTUkgb24gbm1pX2NhcGFibGUgZmxhdm9yc1wmIzM0Oyk7XG4gdG9ydHVyZV9wYXJhbShpbnQsIG5yZWFkZXJzLCAtMSwgXCYjMzQ7TnVtYmVyIG9mIFJDVSByZWFkZXIgdGhyZWFkc1wmIzM0Oyk7XG4gdG9ydHVyZV9wYXJhbShib29sLCBud3JpdGVycywgMSwgXCYjMzQ7TnVtYmVyIG9mIFJDVSB3cml0ZXIgdGhyZWFkcyAoMCBvciAxKVwmIzM0Oyk7XG4gdG9ydHVyZV9wYXJhbShpbnQsIG9iamVjdF9kZWJ1ZywgMCwgXCYjMzQ7RW5hYmxlIGRlYnVnLW9iamVjdCBkb3VibGUgY2FsbF9yY3UoKSB0ZXN0aW5nXCYjMzQ7KTtcbkBAIC0yMTYsNiAmIzQzOzIxOCw4IEBAIHN0YXRpYyBsb25nIG5fcmN1X3RvcnR1cmVfYm9vc3RfZmFpbHVyZTtcbiBzdGF0aWMgbG9uZyBuX3JjdV90b3J0dXJlX2Jvb3N0cztcbiBzdGF0aWMgYXRvbWljX2xvbmdfdCBuX3JjdV90b3J0dXJlX3RpbWVycztcbiBzdGF0aWMgYXRvbWljX2xvbmdfdCBuX3JjdV90b3J0dXJlX2lycXM7XG4mIzQzO3N0YXRpYyBhdG9taWNfbG9uZ190IG5fcmN1X3RvcnR1cmVfbm1pX2NhbGw7XG4mIzQzO3N0YXRpYyBhdG9taWNfbG9uZ190IG5fcmN1X3RvcnR1cmVfbm1pX2NiO1xuIHN0YXRpYyBsb25nIG5fYmFycmllcl9hdHRlbXB0cztcbiBzdGF0aWMgbG9uZyBuX2JhcnJpZXJfc3VjY2Vzc2VzOyAvKiBkaWQgcmN1X2JhcnJpZXIgdGVzdCBzdWNjZWVkPyAqL1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIG5fcmVhZF9leGl0cztcbkBAIC00MzMsNiAmIzQzOzQzNyw3IEBAIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMge1xuIFx0Ym9vbCAoKmlzX3Rhc2tfcmN1X2Jvb3N0ZWQpKHZvaWQpO1xuIFx0bG9uZyBjYmZsb29kX21heDtcbiBcdGludCBpcnFfY2FwYWJsZTtcbiYjNDM7XHRpbnQgbm1pX2NhcGFibGU7XG4gXHRpbnQgY2FuX2Jvb3N0O1xuIFx0aW50IGV4dGVuZGFibGVzO1xuIFx0aW50IHNsb3dfZ3BzO1xuQEAgLTY0OCw2ICYjNDM7NjUzLDcgQEAgc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgcmN1X29wcyA9IHtcbiBcdC5leHRlbmRhYmxlc1x0XHQ9IFJDVVRPUlRVUkVfTUFYX0VYVEVORCxcbiBcdC5kZWJ1Z19vYmplY3RzXHRcdD0gMSxcbiBcdC5zdGFydF9wb2xsX2lycXNvZmZcdD0gMSxcbiYjNDM7XHQubm1pX2NhcGFibGVcdFx0PSAxLFxuIFx0Lm5hbWVcdFx0XHQ9IFwmIzM0O3JjdVwmIzM0O1xuIH07XG4gXG5AQCAtOTQyLDYgJiM0Mzs5NDgsNyBAQCBzdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlX29wcyBzcmN1X29wcyA9IHtcbiBcdC5kZWJ1Z19vYmplY3RzXHQ9IDEsXG4gXHQuaGF2ZV91cF9kb3duXHQ9IElTX0VOQUJMRUQoQ09ORklHX1RJTllfU1JDVSlcbiBcdFx0XHRcdD8gMCA6IFNSQ1VfUkVBRF9GTEFWT1JfTk9STUFMIHwgU1JDVV9SRUFEX0ZMQVZPUl9GQVNUX1VQRE9XTixcbiYjNDM7XHQubm1pX2NhcGFibGVcdD0gMSxcbiBcdC5uYW1lXHRcdD0gXCYjMzQ7c3JjdVwmIzM0O1xuIH07XG4gXG5AQCAtMTAwNSw2ICYjNDM7MTAxMiw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzIHNyY3VkX29wcyA9IHtcbiBcdC5kZWJ1Z19vYmplY3RzXHQ9IDEsXG4gXHQuaGF2ZV91cF9kb3duXHQ9IElTX0VOQUJMRUQoQ09ORklHX1RJTllfU1JDVSlcbiBcdFx0XHRcdD8gMCA6IFNSQ1VfUkVBRF9GTEFWT1JfTk9STUFMIHwgU1JDVV9SRUFEX0ZMQVZPUl9GQVNUX1VQRE9XTixcbiYjNDM7XHQubm1pX2NhcGFibGVcdD0gMSxcbiBcdC5uYW1lXHRcdD0gXCYjMzQ7c3JjdWRcJiMzNDtcbiB9O1xuIFxuQEAgLTEyNjksNiAmIzQzOzEyNzcsNyBAQCBzdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlX29wcyB0YXNrc190cmFjaW5nX29wcyA9IHtcbiBcdC5jYmZsb29kX21heFx0PSA1MDAwMCxcbiBcdC5pcnFfY2FwYWJsZVx0PSAxLFxuIFx0LnNsb3dfZ3BzXHQ9IDEsXG4mIzQzO1x0Lm5taV9jYXBhYmxlXHQ9IDEsXG4gXHQubmFtZVx0XHQ9IFwmIzM0O3Rhc2tzLXRyYWNpbmdcJiMzNDtcbiB9O1xuIFxuQEAgLTI2NTksMTIgJiM0MzsyNjY4LDEzMSBAQCBzdGF0aWMgYm9vbCByY3VfdG9ydHVyZV9vbmVfcmVhZChzdHJ1Y3QgdG9ydHVyZV9yYW5kb21fc3RhdGUgKnRyc3AsIGxvbmcgbXlpZClcbiBcbiBzdGF0aWMgREVGSU5FX1RPUlRVUkVfUkFORE9NX1BFUkNQVShyY3VfdG9ydHVyZV90aW1lcl9yYW5kKTtcbiBcbiYjNDM7LypcbiYjNDM7ICogRXhlcmNpc2UgLVx1MDAzZWNhbGwoKSBmcm9tIE5NSSBjb250ZXh0IGZvciBmbGF2b3JzIHRoYXQgc2V0IC1cdTAwM2VubWlfY2FwYWJsZS4gIEFcbiYjNDM7ICogcGVyLUNQVSBoYXJkd2FyZSBwZXJmIGNvdW50ZXIgb3ZlcmZsb3dzIGludG8gYW4gTk1JLCBhbmQgaXRzIGhhbmRsZXIgc3VibWl0c1xuJiM0MzsgKiBvbmUgcHJlYWxsb2NhdGVkIGNhbGxiYWNrIHZpYSAtXHUwMDNlY2FsbCgpLiAgT25lIGNhbGxiYWNrIGlzIGluIGZsaWdodCBhdCBhIHRpbWVcbiYjNDM7ICogKGd1YXJkZWQgYnkgYW4gYXRvbWljKSB0byBhdm9pZCBhbGxvY2F0aW5nIGluIE5NSS4gIFRoaXMgbWlycm9ycyBob3cgYSBCUEZcbiYjNDM7ICogcHJvZ3JhbSByZWFjaGVzIC1cdTAwM2VjYWxsKCkgZnJvbSBOTUkuXG4mIzQzOyAqL1xuJiM0MzsjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIHJjdV90b3J0dXJlX25taV9hdHRyID0ge1xuJiM0MztcdC50eXBlXHRcdD0gUEVSRl9UWVBFX0hBUkRXQVJFLFxuJiM0MztcdC5jb25maWdcdFx0PSBQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVMsXG4mIzQzO1x0LnNpemVcdFx0PSBzaXplb2Yoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciksXG4mIzQzO1x0LnBpbm5lZFx0XHQ9IDEsXG4mIzQzO1x0LmRpc2FibGVkXHQ9IDEsXG4mIzQzO1x0LmZyZXFcdFx0PSAxLFxuJiM0MztcdC5zYW1wbGVfZnJlcVx0PSAxMDAsXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKiBPbmUgaW4tZmxpZ2h0IGNhbGxiYWNrIHBlciBDUFU7IC1cdTAwM2VpbnVzZSBpcyByZWxlYXNlZCBieSB0aGUgY2FsbGJhY2suICovXG4mIzQzO3N0cnVjdCByY3VfdG9ydHVyZV9ubWlfY2JzIHtcbiYjNDM7XHRzdHJ1Y3QgcmN1X2hlYWQgcmg7XG4mIzQzO1x0YXRvbWljX3QgaW51c2U7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnQgKipyY3VfdG9ydHVyZV9ubWlfZXZlbnRzO1xuJiM0MztzdGF0aWMgaW50IHJjdV90b3J0dXJlX25taV9ocF9zdGF0ZTtcbiYjNDM7c3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCByY3VfdG9ydHVyZV9ubWlfY2JzLCByY3VfdG9ydHVyZV9ubWlfY2JzKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9jYihzdHJ1Y3QgcmN1X2hlYWQgKnJocClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByY3VfdG9ydHVyZV9ubWlfY2JzICpydG5jcCA9IGNvbnRhaW5lcl9vZihyaHAsIHN0cnVjdCByY3VfdG9ydHVyZV9ubWlfY2JzLCByaCk7XG4mIzQzO1xuJiM0MztcdGF0b21pY19sb25nX2luYyhcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYik7XG4mIzQzO1x0YXRvbWljX3NldChcdTAwMjZydG5jcC1cdTAwM2VpbnVzZSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9vdmVyZmxvdyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSxcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJjdV90b3J0dXJlX25taV9jYnMgKnJ0bmNwID0gdGhpc19jcHVfcHRyKFx1MDAyNnJjdV90b3J0dXJlX25taV9jYnMpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWluX25taSgpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGlmIChjdXJfb3BzLVx1MDAzZWNhbGwgXHUwMDI2XHUwMDI2ICFhdG9taWNfeGNoZyhcdTAwMjZydG5jcC1cdTAwM2VpbnVzZSwgMSkpIHtcbiYjNDM7XHRcdGF0b21pY19sb25nX2luYyhcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYWxsKTtcbiYjNDM7XHRcdGN1cl9vcHMtXHUwMDNlY2FsbChcdTAwMjZydG5jcC1cdTAwM2VyaCwgcmN1X3RvcnR1cmVfbm1pX2NiKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmN1X3RvcnR1cmVfbm1pX29ubGluZSh1bnNpZ25lZCBpbnQgY3B1KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50O1xuJiM0MztcbiYjNDM7XHRldmVudCA9IHBlcmZfZXZlbnRfY3JlYXRlX2tlcm5lbF9jb3VudGVyKFx1MDAyNnJjdV90b3J0dXJlX25taV9hdHRyLCBjcHUsIE5VTEwsXG4mIzQzO1x0XHRcdFx0XHRcdCByY3VfdG9ydHVyZV9ubWlfb3ZlcmZsb3csIE5VTEwpO1xuJiM0MztcdGlmIChJU19FUlIoZXZlbnQpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0cmN1X3RvcnR1cmVfbm1pX2V2ZW50c1tjcHVdID0gZXZlbnQ7XG4mIzQzO1x0cGVyZl9ldmVudF9lbmFibGUoZXZlbnQpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJjdV90b3J0dXJlX25taV9vZmZsaW5lKHVuc2lnbmVkIGludCBjcHUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSByY3VfdG9ydHVyZV9ubWlfZXZlbnRzW2NwdV07XG4mIzQzO1xuJiM0MztcdGlmIChldmVudCkge1xuJiM0MztcdFx0cmN1X3RvcnR1cmVfbm1pX2V2ZW50c1tjcHVdID0gTlVMTDtcbiYjNDM7XHRcdHBlcmZfZXZlbnRfZGlzYWJsZShldmVudCk7XG4mIzQzO1x0XHRwZXJmX2V2ZW50X3JlbGVhc2Vfa2VybmVsKGV2ZW50KTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIERyaXZlIHRoZSBjb3VudGVycyBmcm9tIENQVS1ob3RwbHVnIGNhbGxiYWNrcyBzbyB0aGF0IGNvdmVyYWdlIHN1cnZpdmVzIHRoZVxuJiM0MzsgKiBvbm9mZiB0ZXN0aW5nIHRoYXQgbW9zdCBzY2VuYXJpb3MgcnVuLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2luaXQodm9pZClcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghbm1pX2NhbGxzIHx8ICFjdXJfb3BzLVx1MDAzZW5taV9jYXBhYmxlIHx8ICFjdXJfb3BzLVx1MDAzZWNhbGwpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0cmN1X3RvcnR1cmVfbm1pX2V2ZW50cyA9IGtjYWxsb2MobnJfY3B1X2lkcywgc2l6ZW9mKCpyY3VfdG9ydHVyZV9ubWlfZXZlbnRzKSxcbiYjNDM7XHRcdFx0XHRcdCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXJjdV90b3J0dXJlX25taV9ldmVudHMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0cmV0ID0gY3B1aHBfc2V0dXBfc3RhdGUoQ1BVSFBfQVBfT05MSU5FX0RZTiwgXCYjMzQ7cmN1dG9ydHVyZS9ubWk6b25saW5lXCYjMzQ7LFxuJiM0MztcdFx0XHRcdHJjdV90b3J0dXJlX25taV9vbmxpbmUsIHJjdV90b3J0dXJlX25taV9vZmZsaW5lKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRrZnJlZShyY3VfdG9ydHVyZV9ubWlfZXZlbnRzKTtcbiYjNDM7XHRcdHJjdV90b3J0dXJlX25taV9ldmVudHMgPSBOVUxMO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XHRyY3VfdG9ydHVyZV9ubWlfaHBfc3RhdGUgPSByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9jbGVhbnVwKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXJjdV90b3J0dXJlX25taV9ldmVudHMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0aWYgKHJjdV90b3J0dXJlX25taV9ocF9zdGF0ZSBcdTAwM2UgMCkge1xuJiM0MztcdFx0Y3B1aHBfcmVtb3ZlX3N0YXRlKHJjdV90b3J0dXJlX25taV9ocF9zdGF0ZSk7XG4mIzQzO1x0XHRyY3VfdG9ydHVyZV9ubWlfaHBfc3RhdGUgPSAwO1xuJiM0MztcdH1cbiYjNDM7XHRrZnJlZShyY3VfdG9ydHVyZV9ubWlfZXZlbnRzKTtcbiYjNDM7XHRyY3VfdG9ydHVyZV9ubWlfZXZlbnRzID0gTlVMTDtcbiYjNDM7XHRpZiAoIWF0b21pY19sb25nX3JlYWQoXHUwMDI2bl9yY3VfdG9ydHVyZV9ubWlfY2FsbCkpXG4mIzQzO1x0XHRwcl9hbGVydChcJiMzNDslczogbm1pX2NhbGxzIHNldCBidXQgbm8gLVx1MDAzZWNhbGwoKSBpc3N1ZWQgZnJvbSBOTUk6IG5vdCBzdXBwb3J0ZWQgaGVyZS5cXG5cJiMzNDssXG4mIzQzO1x0XHRcdCBfX2Z1bmNfXyk7XG4mIzQzO31cbiYjNDM7I2Vsc2UgLyogI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUyAqL1xuJiM0MztzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfaW5pdCh2b2lkKSB7IH1cbiYjNDM7c3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2NsZWFudXAodm9pZCkgeyB9XG4mIzQzOyNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTICovXG4mIzQzO1xuIC8qXG4gICogUkNVIHRvcnR1cmUgcmVhZGVyIGZyb20gdGltZXIgaGFuZGxlci4gIERlcmVmZXJlbmNlcyByY3VfdG9ydHVyZV9jdXJyZW50LFxuICAqIGluY3JlbWVudGluZyB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IG9mIHRoZSBwaXBlbGluZSBhcnJheS4gIFRoZVxuICAqIGNvdW50ZXIgaW4gdGhlIGVsZW1lbnQgc2hvdWxkIG5ldmVyIGJlIGdyZWF0ZXIgdGhhbiAxLCBvdGhlcndpc2UsIHRoZVxuICAqIFJDVSBpbXBsZW1lbnRhdGlvbiBpcyBicm9rZW4uXG4gICovXG4mIzQzO1xuIHN0YXRpYyB2b2lkIHJjdV90b3J0dXJlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp1bnVzZWQpXG4ge1xuIFx0V0FSTl9PTl9PTkNFKCFpbl9zZXJ2aW5nX3NvZnRpcnEoKSk7XG5AQCAtMzA0Nyw2ICYjNDM7MzE3NSw5IEBAIHJjdV90b3J0dXJlX3N0YXRzX3ByaW50KHZvaWQpXG4gXHRcdGRhdGFfcmFjZShuX2JhcnJpZXJfYXR0ZW1wdHMpLFxuIFx0XHRkYXRhX3JhY2Uobl9yY3VfdG9ydHVyZV9iYXJyaWVyX2Vycm9yKSk7XG4gXHRwcl9jb250KFwmIzM0O3JlYWQtZXhpdHM6ICVsZCBcJiMzNDssIGRhdGFfcmFjZShuX3JlYWRfZXhpdHMpKTsgLy8gU3RhdGlzdGljLlxuJiM0MztcdHByX2NvbnQoXCYjMzQ7bm1pLWNhbGxzOiAlbGQgbm1pLWNiczogJWxkIFwmIzM0OyxcbiYjNDM7XHRcdGF0b21pY19sb25nX3JlYWQoXHUwMDI2bl9yY3VfdG9ydHVyZV9ubWlfY2FsbCksXG4mIzQzO1x0XHRhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NiKSk7XG4gXHRwcl9jb250KFwmIzM0O25vY2ItdG9nZ2xlczogJWxkOiVsZCBcJiMzNDssXG4gXHRcdGF0b21pY19sb25nX3JlYWQoXHUwMDI2bl9ub2NiX29mZmxvYWQpLCBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm5fbm9jYl9kZW9mZmxvYWQpKTtcbiBcdHByX2NvbnQoXCYjMzQ7Z3B3cmFwczogJWxkXFxuXCYjMzQ7LCBuX2dwd3JhcHMpO1xuQEAgLTMxOTUsNyAmIzQzOzMzMjYsNyBAQCByY3VfdG9ydHVyZV9wcmludF9tb2R1bGVfcGFybXMoc3RydWN0IHJjdV90b3J0dXJlX29wcyAqY3VyX29wcywgY29uc3QgY2hhciAqdGFnKVxuIFx0XHQgXCYjMzQ7cmVhZF9leGl0X2RlbGF5PSVkIHJlYWRfZXhpdF9idXJzdD0lZCBcJiMzNDtcbiBcdFx0IFwmIzM0O3JlYWRlcl9mbGF2b3I9JXggXCYjMzQ7XG4gXHRcdCBcJiMzNDtub2Nic19udGhyZWFkcz0lZCBub2Nic190b2dnbGU9JWQgXCYjMzQ7XG4tXHRcdCBcJiMzNDt0ZXN0X25taXM9JWQgXCYjMzQ7XG4mIzQzO1x0XHQgXCYjMzQ7dGVzdF9ubWlzPSVkIG5taV9jYWxscz0lZCBcJiMzNDtcbiBcdFx0IFwmIzM0O3ByZWVtcHRfZHVyYXRpb249JWQgcHJlZW1wdF9pbnRlcnZhbD0lZCBuX3VwX2Rvd249JWRcXG5cJiMzNDssXG4gXHRcdCB0b3J0dXJlX3R5cGUsIHRhZywgbnJlYWxyZWFkZXJzLCBud3JpdGVycywgbnJlYWxmYWtld3JpdGVycyxcbiBcdFx0IHN0YXRfaW50ZXJ2YWwsIHZlcmJvc2UsIHRlc3Rfbm9faWRsZV9oeiwgc2h1ZmZsZV9pbnRlcnZhbCxcbkBAIC0zMjA5LDcgJiM0MzszMzQwLDcgQEAgcmN1X3RvcnR1cmVfcHJpbnRfbW9kdWxlX3Bhcm1zKHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgKmN1cl9vcHMsIGNvbnN0IGNoYXIgKnRhZylcbiBcdFx0IHJlYWRfZXhpdF9kZWxheSwgcmVhZF9leGl0X2J1cnN0LFxuIFx0XHQgcmVhZGVyX2ZsYXZvcixcbiBcdFx0IG5vY2JzX250aHJlYWRzLCBub2Nic190b2dnbGUsXG4tXHRcdCB0ZXN0X25taXMsXG4mIzQzO1x0XHQgdGVzdF9ubWlzLCBubWlfY2FsbHMsXG4gXHRcdCBwcmVlbXB0X2R1cmF0aW9uLCBwcmVlbXB0X2ludGVydmFsLCBuX3VwX2Rvd24pO1xuIH1cbiBcbkBAIC00MjgzLDYgJiM0Mzs0NDE0LDcgQEAgcmN1X3RvcnR1cmVfY2xlYW51cCh2b2lkKVxuIFx0aW50IGk7XG4gXG4gXHRpZiAodG9ydHVyZV9jbGVhbnVwX2JlZ2luKCkpIHtcbiYjNDM7XHRcdHJjdV90b3J0dXJlX25taV9jbGVhbnVwKCk7XG4gXHRcdGlmIChjdXJfb3BzLVx1MDAzZWNiX2JhcnJpZXIgIT0gTlVMTCkge1xuIFx0XHRcdHByX2luZm8oXCYjMzQ7JXM6IEludm9raW5nICVwUygpLlxcblwmIzM0OywgX19mdW5jX18sIGN1cl9vcHMtXHUwMDNlY2JfYmFycmllcik7XG4gXHRcdFx0Y3VyX29wcy1cdTAwM2VjYl9iYXJyaWVyKCk7XG5AQCAtNDMyNSw2ICYjNDM7NDQ1Nyw4IEBAIHJjdV90b3J0dXJlX2NsZWFudXAodm9pZClcbiBcdFx0a2ZyZWUocmVhZGVyX3Rhc2tzKTtcbiBcdFx0cmVhZGVyX3Rhc2tzID0gTlVMTDtcbiBcdH1cbiYjNDM7XHQvKiBEaXNhYmxlIHRoZSBwZXJmIGNvdW50ZXJzIChhbmQgdGh1cyB0aGUgTk1JIC1cdTAwM2VjYWxsKCkgZmlyaW5nKSBub3cuICovXG4mIzQzO1x0cmN1X3RvcnR1cmVfbm1pX2NsZWFudXAoKTtcbiBcdGtmcmVlKHJjdV90b3J0dXJlX3JlYWRlcl9tYmNoayk7XG4gXHRyY3VfdG9ydHVyZV9yZWFkZXJfbWJjaGsgPSBOVUxMO1xuIFxuQEAgLTQzNTQsNiAmIzQzOzQ0ODgsMjAgQEAgcmN1X3RvcnR1cmVfY2xlYW51cCh2b2lkKVxuIFx0XHRwcl9pbmZvKFwmIzM0OyVzOiBJbnZva2luZyAlcFMoKS5cXG5cJiMzNDssIF9fZnVuY19fLCBjdXJfb3BzLVx1MDAzZWNiX2JhcnJpZXIpO1xuIFx0XHRjdXJfb3BzLVx1MDAzZWNiX2JhcnJpZXIoKTtcbiBcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBjYl9iYXJyaWVyKCkgYWJvdmUgZHJhaW5lZCBldmVyeSBkZWZlcnJlZCBOTUkgLVx1MDAzZWNhbGwoKSBjYWxsYmFjaywgc28gdGhlXG4mIzQzO1x0ICogY291bnQgaXNzdWVkIGZyb20gTk1JIG11c3QgZXF1YWwgdGhlIGNvdW50IGludm9rZWQ7IGEgbWlzbWF0Y2ggbWVhbnMgYVxuJiM0MztcdCAqIGNhbGxiYWNrIHdhcyBsb3N0LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NhbGwpICE9XG4mIzQzO1x0ICAgIGF0b21pY19sb25nX3JlYWQoXHUwMDI2bl9yY3VfdG9ydHVyZV9ubWlfY2IpKSB7XG4mIzQzO1x0XHRwcl9hbGVydChcJiMzNDslczogTk1JIC1cdTAwM2VjYWxsKCkgbG9zdCBhIGNhbGxiYWNrOiBpc3N1ZWQgJWxkIGludm9rZWQgJWxkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgX19mdW5jX18sIGF0b21pY19sb25nX3JlYWQoXHUwMDI2bl9yY3VfdG9ydHVyZV9ubWlfY2FsbCksXG4mIzQzO1x0XHRcdCBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NiKSk7XG4mIzQzO1x0XHRhdG9taWNfaW5jKFx1MDAyNm5fcmN1X3RvcnR1cmVfZXJyb3IpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoY3VyX29wcy1cdTAwM2VjbGVhbnVwICE9IE5VTEwpXG4gXHRcdGN1cl9vcHMtXHUwMDNlY2xlYW51cCgpO1xuIFxuQEAgLTQ3ODYsNiAmIzQzOzQ5MzQsOCBAQCByY3VfdG9ydHVyZV9pbml0KHZvaWQpXG4gXHRcdGZpcnN0ZXJyID0gLUVOT01FTTtcbiBcdFx0Z290byB1bndpbmQ7XG4gXHR9XG4mIzQzO1x0LyogQXJtIHRoZSBwZXItQ1BVIHBlcmYgY291bnRlcnMgdGhhdCBkcml2ZSAtXHUwMDNlY2FsbCgpIGZyb20gTk1JLiAqL1xuJiM0MztcdHJjdV90b3J0dXJlX25taV9pbml0KCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucmVhbHJlYWRlcnM7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHJjdV90b3J0dXJlX3JlYWRlcl9tYmNoa1tpXS5ydGNfY2hrcmRyID0gLTE7XG4gXHRcdGZpcnN0ZXJyID0gdG9ydHVyZV9jcmVhdGVfa3RocmVhZChyY3VfdG9ydHVyZV9yZWFkZXIsICh2b2lkICopaSxcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3NyY3V0aW55LmMgYi9rZXJuZWwvcmN1L3NyY3V0aW55LmNcbmluZGV4IDU1OGJhOGQzMTZkYjYuLjdhN2MxY2VmNDNlMTMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvcmN1L3NyY3V0aW55LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9yY3Uvc3JjdXRpbnkuY1xuQEAgLTEwLDYgJiM0MzsxMCw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnFfd29yay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xsaXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJlZW1wdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGVfd2FpdC5oXHUwMDNlXG5AQCAtMjksNiAmIzQzOzMwLDggQEAgZXh0ZXJuIGludCByY3Vfc2NoZWR1bGVyX2FjdGl2ZTtcbiBzdGF0aWMgTElTVF9IRUFEKHNyY3VfYm9vdF9saXN0KTtcbiBzdGF0aWMgYm9vbCBzcmN1X2luaXRfZG9uZTtcbiBcbiYjNDM7c3RhdGljIHZvaWQgX19zcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBib29sIGd1YXJkKTtcbiYjNDM7XG4gc3RhdGljIGludCBpbml0X3NyY3Vfc3RydWN0X2ZpZWxkcyhzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbiB7XG4gXHRzc3AtXHUwMDNlc3JjdV9sb2NrX25lc3RpbmdbMF0gPSAwO1xuQEAgLTQzLDYgJiM0Mzs0Niw4IEBAIHN0YXRpYyBpbnQgaW5pdF9zcmN1X3N0cnVjdF9maWVsZHMoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4gXHRJTklUX1dPUksoXHUwMDI2c3NwLVx1MDAzZXNyY3Vfd29yaywgc3JjdV9kcml2ZV9ncCk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZzc3AtXHUwMDNlc3JjdV93b3JrLmVudHJ5KTtcbiBcdGluaXRfaXJxX3dvcmsoXHUwMDI2c3NwLVx1MDAzZXNyY3VfaXJxX3dvcmssIHNyY3VfdGlueV9pcnFfd29yayk7XG4mIzQzO1x0aW5pdF9sbGlzdF9oZWFkKFx1MDAyNnNzcC1cdTAwM2VkZWZlcl9jYnMpO1xuJiM0MztcdHNzcC1cdTAwM2VkZWZlcl9pdyA9IElSUV9XT1JLX0lOSVRfSEFSRChzcmN1X2RlZmVyX2RyYWluKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC04Niw2ICYjNDM7OTEsMTEgQEAgRVhQT1JUX1NZTUJPTF9HUEwoaW5pdF9zcmN1X3N0cnVjdF9nZW5lcmljKTtcbiB2b2lkIGNsZWFudXBfc3JjdV9zdHJ1Y3Qoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4ge1xuIFx0V0FSTl9PTihzcmN1X3JlYWRlcnNfYWN0aXZlKHNzcCkpO1xuJiM0MztcdC8qIFJlLWlzc3VlIGFueSBkZWZlcnJlZCBjYWxsYmFja3MsIHRoZW4gd2FpdCBvdXQgLVx1MDAzZWRlZmVyX2l3IGJlZm9yZSBpdCBpcyBmcmVlZC4gKi9cbiYjNDM7XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSkge1xuJiM0MztcdFx0X19zcmN1X2RlZmVyX2RyYWluKHNzcCwgZmFsc2UpO1xuJiM0MztcdFx0aXJxX3dvcmtfc3luYyhcdTAwMjZzc3AtXHUwMDNlZGVmZXJfaXcpO1xuJiM0MztcdH1cbiBcdGlycV93b3JrX3N5bmMoXHUwMDI2c3NwLVx1MDAzZXNyY3VfaXJxX3dvcmspO1xuIFx0Zmx1c2hfd29yayhcdTAwMjZzc3AtXHUwMDNlc3JjdV93b3JrKTtcbiBcdFdBUk5fT04oc3NwLVx1MDAzZXNyY3VfZ3BfcnVubmluZyk7XG5AQCAtMjEzLDExICYjNDM7MjIzLDExIEBAIHN0YXRpYyB2b2lkIHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuIH1cbiBcbiAvKlxuLSAqIEVucXVldWUgYW4gU1JDVSBjYWxsYmFjayBvbiB0aGUgc3BlY2lmaWVkIHNyY3Vfc3RydWN0IHN0cnVjdHVyZSxcbi0gKiBpbml0aWF0aW5nIGdyYWNlLXBlcmlvZCBwcm9jZXNzaW5nIGlmIGl0IGlzIG5vdCBhbHJlYWR5IHJ1bm5pbmcuXG4mIzQzOyAqIEVucXVldWUgQHJocCBvbiB0aGUgY2FsbGJhY2sgbGlzdC4gIEFsc28gY2FsbGVkIGJ5IHNyY3VfZGVmZXJfZHJhaW4oKSB0b1xuJiM0MzsgKiByZS1pc3N1ZSBhIGRlZmVycmVkIGNhbGxiYWNrLCBzbyBpdCBtdXN0IG5vdCByZS1jaGVjayB0aGUgZGVmZXJyYWwgY29uZGl0aW9uLlxuICAqL1xuLXZvaWQgY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcbi1cdCAgICAgICByY3VfY2FsbGJhY2tfdCBmdW5jKVxuJiM0MztzdGF0aWMgdm9pZCBzcmN1X2RvX2VucXVldWUoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxuJiM0MztcdFx0XHQgICAgcmN1X2NhbGxiYWNrX3QgZnVuYylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuQEAgLTIzMSw2ICYjNDM7MjQxLDU4IEBAIHZvaWQgY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcbiBcdHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHNzcCk7XG4gXHRwcmVlbXB0X2VuYWJsZSgpO1xuIH1cbiYjNDM7XG4mIzQzOy8qIFNldCB3aGlsZSBzcmN1X2RlZmVyX2RyYWluKCkgcmUtaXNzdWVzLCB0byBjYXRjaCBhIHJlLWVudHJhbnQgY2FsbF9zcmN1KCkuICovXG4mIzQzO3N0YXRpYyBib29sIHNyY3VfZGVmZXJfZHJhaW5pbmc7XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBfX3NyY3VfZGVmZXJfZHJhaW4oc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIGJvb2wgZ3VhcmQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSwgKm5leHQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XG4mIzQzO1x0LyogQ2FsbGJhY2tzIGFyZSB1bm9yZGVyZWQsIHNvIGRyYWluIGluIGxsaXN0IG9yZGVyIHdpdGhvdXQgcmV2ZXJzaW5nLiAqL1xuJiM0MztcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbiYjNDM7XHRpZiAoZ3VhcmQpXG4mIzQzO1x0XHRXUklURV9PTkNFKHNyY3VfZGVmZXJfZHJhaW5pbmcsIHRydWUpO1xuJiM0MztcdGxsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgbmV4dCwgbGxpc3RfZGVsX2FsbChcdTAwMjZzc3AtXHUwMDNlZGVmZXJfY2JzKSkge1xuJiM0MztcdFx0c3RydWN0IHJjdV9oZWFkICpyaHAgPSAoc3RydWN0IHJjdV9oZWFkICopbm9kZTtcbiYjNDM7XG4mIzQzO1x0XHRyaHAtXHUwMDNlbmV4dCA9IE5VTEw7XG4mIzQzO1x0XHRzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIHJocC1cdTAwM2VmdW5jKTtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKGd1YXJkKVxuJiM0MztcdFx0V1JJVEVfT05DRShzcmN1X2RlZmVyX2RyYWluaW5nLCBmYWxzZSk7XG4mIzQzO1x0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBPbmx5IHRoZSBpcnFfd29yayBkcmFpbiBjYW4gYmUgcmUtZmVkIGJ5IGl0cyBvd24gcmUtaXNzdWU7IHNlZSBUcmVlIFNSQ1UuICovXG4mIzQzO3ZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KVxuJiM0Mzt7XG4mIzQzO1x0X19zcmN1X2RlZmVyX2RyYWluKGNvbnRhaW5lcl9vZihpdywgc3RydWN0IHNyY3Vfc3RydWN0LCBkZWZlcl9pdyksIHRydWUpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHNyY3VfZGVmZXJfZHJhaW4pO1xuJiM0MztcbiYjNDM7dm9pZCBjYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxuJiM0MztcdCAgICAgICByY3VfY2FsbGJhY2tfdCBmdW5jKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHNob3VsZF9yY3VfZGVmZXIoKSkge1xuJiM0MztcdFx0LyogQSByZS1lbnRyYW50IGNhbGxfc3JjdSgpIGR1cmluZyB0aGUgZHJhaW4gd291bGQgbGl2ZWxvY2sgaXQuICovXG4mIzQzO1x0XHRpZiAoUkVBRF9PTkNFKHNyY3VfZGVmZXJfZHJhaW5pbmcpIFx1MDAyNlx1MDAyNiAhaW5fbm1pKCkpIHtcbiYjNDM7XHRcdFx0V0FSTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSksXG4mIzQzO1x0XHRcdFx0ICBcJiMzNDtjYWxsX3NyY3UoKSByZS1lbnRlcmVkIGR1cmluZyBjYWxsYmFjayBkcmFpbjsgbGVha2luZyBjYWxsYmFja1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJocC1cdTAwM2VmdW5jID0gZnVuYztcbiYjNDM7XHRcdGlmIChsbGlzdF9hZGQoKHN0cnVjdCBsbGlzdF9ub2RlICopcmhwLCBcdTAwMjZzc3AtXHUwMDNlZGVmZXJfY2JzKSlcbiYjNDM7XHRcdFx0aXJxX3dvcmtfcXVldWUoXHUwMDI2c3NwLVx1MDAzZWRlZmVyX2l3KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEFuIE5NSSByZWFjaGluZyBoZXJlIGVudGVyZWQgd2l0aCBpcnFzIGVuYWJsZWQsIHNvIHRoZSBlbnF1ZXVlIGNhbiByYWNlLiAqL1xuJiM0MztcdFdBUk5fT05fT05DRShJU19FTkFCTEVEKENPTkZJR19QUk9WRV9SQ1UpIFx1MDAyNlx1MDAyNiBpbl9ubWkoKSk7XG4mIzQzO1xuJiM0MztcdHNyY3VfZG9fZW5xdWV1ZShzc3AsIHJocCwgZnVuYyk7XG4mIzQzO31cbiBFWFBPUlRfU1lNQk9MX0dQTChjYWxsX3NyY3UpO1xuIFxuIC8qXG5AQCAtMjYwLDYgJiM0MzszMjIsMTUgQEAgdm9pZCBzeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9zcmN1KTtcbiBcbiYjNDM7LyogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcywgdGhlbiB3YWl0IGZvciBhbGwgaW4tZmxpZ2h0IG9uZXMuICovXG4mIzQzO3ZvaWQgc3JjdV9iYXJyaWVyKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpXG4mIzQzO1x0XHRfX3NyY3VfZGVmZXJfZHJhaW4oc3NwLCBmYWxzZSk7XG4mIzQzO1x0c3luY2hyb25pemVfc3JjdShzc3ApO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHNyY3VfYmFycmllcik7XG4mIzQzO1xuIC8qXG4gICogZ2V0X3N0YXRlX3N5bmNocm9uaXplX3NyY3UgLSBQcm92aWRlIGFuIGVuZC1vZi1ncmFjZS1wZXJpb2QgY29va2llXG4gICovXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9zcmN1dHJlZS5jIGIva2VybmVsL3JjdS9zcmN1dHJlZS5jXG5pbmRleCAzMDQxMTI2NzRlOGEyLi4zNWZmYWNlNTFkNTBiIDEwMDY0NFxuLS0tIGEva2VybmVsL3JjdS9zcmN1dHJlZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvcmN1L3NyY3V0cmVlLmNcbkBAIC0yMCw2ICYjNDM7MjAsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcmNwdS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJlZW1wdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXJxX3dvcmsuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9sbGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGVfd2FpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NtcC5oXHUwMDNlXG5AQCAtNzksNiAmIzQzOzgwLDQ1IEBAIHN0YXRpYyB2b2lkIHByb2Nlc3Nfc3JjdShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuIHN0YXRpYyB2b2lkIHNyY3VfaXJxX3dvcmsoc3RydWN0IGlycV93b3JrICp3b3JrKTtcbiBzdGF0aWMgdm9pZCBzcmN1X2RlbGF5X3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcbiBcbiYjNDM7c3RydWN0IHNyY3VfZGVmZXI7XG4mIzQzO3N0YXRpYyB2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdyk7XG4mIzQzO3N0YXRpYyB2b2lkIF9fc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3Qgc3JjdV9kZWZlciAqc25kcCwgYm9vbCBndWFyZCk7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBQZXItQ1BVIGNhbGxfc3JjdSgpIGRlZmVycmFsIHN0YXRlLCBzaGFyZWQgYnkgZXZlcnkgc3JjdV9zdHJ1Y3QuICBBIGRlZmVycmVkXG4mIzQzOyAqIGNhbGxiYWNrIGlzIHN0YWdlZCBvbiBpdHMgc3JjdV9kYXRhJiMzOTtzIC1cdTAwM2VkZWZlcl9jYnM7IHRoYXQgc3JjdV9kYXRhIGlzIGNoYWluZWRcbiYjNDM7ICogdmlhIC1cdTAwM2VkZWZlcl9saW5rIG9udG8gLVx1MDAzZWxpc3QsIHdoaWNoIHRoZSBpcnFfd29yayB3YWxrcy5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBzcmN1X2RlZmVyIHtcbiYjNDM7XHRzdHJ1Y3QgbGxpc3RfaGVhZFx0bGlzdDtcbiYjNDM7XHRzdHJ1Y3QgaXJxX3dvcmtcdFx0aXc7XG4mIzQzO1x0cmF3X3NwaW5sb2NrX3RcdFx0bG9jaztcbiYjNDM7XHRib29sXHRcdFx0ZHJhaW5pbmc7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHNyY3VfZGVmZXIsIHNyY3VfZGVmZXIpID0ge1xuJiM0MztcdC5sb2NrID0gX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VEKHNyY3VfZGVmZXIubG9jayksXG4mIzQzO1x0Lml3ID0gSVJRX1dPUktfSU5JVF9IQVJEKHNyY3VfZGVmZXJfZHJhaW4pLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogRmx1c2ggcGVuZGluZyBkZWZlcnJlZCBjYWxsYmFja3Mgc28gYSBmb2xsb3dpbmcgc3JjdV9iYXJyaWVyKCkgd2FpdHMgZm9yIHRoZW0uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBzcmN1X2RlZmVyX2ZsdXNoKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgY3B1O1xuJiM0MztcbiYjNDM7XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbiYjNDM7XHRcdHN0cnVjdCBzcmN1X2RlZmVyICpzbmRwID0gXHUwMDI2cGVyX2NwdShzcmN1X2RlZmVyLCBjcHUpO1xuJiM0MztcbiYjNDM7XHRcdGlmICghbGxpc3RfZW1wdHkoXHUwMDI2c25kcC1cdTAwM2VsaXN0KSlcbiYjNDM7XHRcdFx0X19zcmN1X2RlZmVyX2RyYWluKHNuZHAsIGZhbHNlKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBJbml0aWFsaXplIFNSQ1UgcGVyLUNQVSBkYXRhLiAgTm90ZSB0aGF0IHN0YXRpY2FsbHkgYWxsb2NhdGVkXG4gICogc3JjdV9zdHJ1Y3Qgc3RydWN0dXJlcyBtaWdodCBhbHJlYWR5IGhhdmUgc3JjdV9yZWFkX2xvY2soKSBhbmRcbkBAIC0xMDcsNiAmIzQzOzE0NywxMSBAQCBzdGF0aWMgdm9pZCBpbml0X3NyY3Vfc3RydWN0X2RhdGEoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4gXHRcdHNkcC1cdTAwM2VjcHUgPSBjcHU7XG4gXHRcdElOSVRfV09SSyhcdTAwMjZzZHAtXHUwMDNld29yaywgc3JjdV9pbnZva2VfY2FsbGJhY2tzKTtcbiBcdFx0dGltZXJfc2V0dXAoXHUwMDI2c2RwLVx1MDAzZWRlbGF5X3dvcmssIHNyY3VfZGVsYXlfdGltZXIsIDApO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIC1cdTAwM2VkZWZlcl9jYnMsIC1cdTAwM2VkZWZlcl9saW5rIGFuZCAtXHUwMDNlZGVmZXJfZXhwIGFyZSB2YWxpZCB3aGVuIHplcm9lZFxuJiM0MztcdFx0ICogYW5kIGFyZSBub3QgcmVpbml0aWFsaXplZCBoZXJlLCBsZXN0IHdlIGNsb2JiZXIgY2FsbGJhY2tzIGFcbiYjNDM7XHRcdCAqIHJlZW50cmFudCBjYWxsX3NyY3UoKSBhbHJlYWR5IHN0YWdlZC4gIFNlZSBfX2NhbGxfc3JjdSgpLlxuJiM0MztcdFx0ICovXG4gXHRcdHNkcC1cdTAwM2Vzc3AgPSBzc3A7XG4gXHR9XG4gfVxuQEAgLTY5NSw3ICYjNDM7NzQwLDEyIEBAIHZvaWQgY2xlYW51cF9zcmN1X3N0cnVjdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbiBcdFx0cmV0dXJuOyAvKiBKdXN0IGxlYWsgaXQhICovXG4gXHRpZiAoV0FSTl9PTihzcmN1X3JlYWRlcnNfYWN0aXZlKHNzcCkpKVxuIFx0XHRyZXR1cm47IC8qIEp1c3QgbGVhayBpdCEgKi9cbi1cdC8qIFdhaXQgZm9yIGlycV93b3JrIHRvIGZpbmlzaCBmaXJzdCBhcyBpdCBtYXkgcXVldWUgYSBuZXcgd29yay4gKi9cbiYjNDM7XHQvKlxuJiM0MztcdCAqIERyYWluIGRlZmVycmVkIGNhbGxiYWNrcyBiZWZvcmUgc3luY2luZyAtXHUwMDNlaXJxX3dvcms6IHJlLWlzc3Vpbmcgb25lIGNhblxuJiM0MztcdCAqIHN0YXJ0IGEgZ3JhY2UgcGVyaW9kIGFuZCByZS1xdWV1ZSAtXHUwMDNlaXJxX3dvcmssIHdoaWNoIHRoZW4gc2NoZWR1bGVzXG4mIzQzO1x0ICogLVx1MDAzZXdvcmssIHNvIGJvdGggbXVzdCBiZSB3YWl0ZWQgb3V0IGFmdGVyIHRoZSBkcmFpbi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzcmN1X2RlZmVyX2ZsdXNoKCk7XG4gXHRpcnFfd29ya19zeW5jKFx1MDAyNnN1cC1cdTAwM2VpcnFfd29yayk7XG4gXHRmbHVzaF9kZWxheWVkX3dvcmsoXHUwMDI2c3VwLVx1MDAzZXdvcmspO1xuIFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuQEAgLTE0MTAsOCAmIzQzOzE0NjAsOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzcmN1X2dwX3N0YXJ0X2lmX25lZWRlZChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCxcbiAgKiBzcmN1X3JlYWRfbG9jaygpLCBhbmQgc3JjdV9yZWFkX3VubG9jaygpIHRoYXQgYXJlIGFsbCBwYXNzZWQgdGhlIHNhbWVcbiAgKiBzcmN1X3N0cnVjdCBzdHJ1Y3R1cmUuXG4gICovXG4tc3RhdGljIHZvaWQgX19jYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxuLVx0XHRcdHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgZG9fbm9ybSlcbiYjNDM7c3RhdGljIHZvaWQgc3JjdV9kb19lbnF1ZXVlKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcbiYjNDM7XHRcdFx0ICAgIHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgZG9fbm9ybSlcbiB7XG4gXHRpZiAoZGVidWdfcmN1X2hlYWRfcXVldWUocmhwKSkge1xuIFx0XHQvKiBQcm9iYWJsZSBkb3VibGUgY2FsbF9zcmN1KCksIHNvIGxlYWsgdGhlIGNhbGxiYWNrLiAqL1xuQEAgLTE0MjMsNiAmIzQzOzE0NzMsMTExIEBAIHN0YXRpYyB2b2lkIF9fY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcbiBcdCh2b2lkKXNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHNzcCwgcmhwLCBkb19ub3JtKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFRoZSBzcmN1X2NibGlzdCBhbmQgc3JjdV9ub2RlIHRyZWUgYXJlIG9ubHkgYWNjZXNzZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkXG4mIzQzOyAqIChzcmN1X2dwX3N0YXJ0X2lmX25lZWRlZCgpIGVucXVldWVzIHVuZGVyIHJhd19zcGluX2xvY2tfaXJxc2F2ZSgpIGFuZCBtYXkgd2Fsa1xuJiM0MzsgKiB0aGUgdHJlZSkuICBMaWtlIGNhbGxfcmN1KCksIF9fY2FsbF9zcmN1KCkgZGVmZXJzIHdoZW4gaW50ZXJydXB0cyBhcmUgYWxyZWFkeVxuJiM0MzsgKiBkaXNhYmxlZCwgc28gYSByZS1lbnRyYW50IGNhbGxfc3JjdSgpIC0tIGUuZy4gY2FsbF9yY3VfdGFza3NfdHJhY2UoKSBmcm9tIGFcbiYjNDM7ICogQlBGIHByb2dyYW0gLS0gY2Fubm90IGNvcnJ1cHQgdGhlIGxpc3Qgb3IgZGVhZGxvY2suXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBfX2NhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsXG4mIzQzO1x0XHRcdHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgZG9fbm9ybSlcbiYjNDM7e1xuJiM0MztcdGlmIChzaG91bGRfcmN1X2RlZmVyKCkpIHtcbiYjNDM7XHRcdHN0cnVjdCBzcmN1X2RlZmVyICpzbmRwID0gdGhpc19jcHVfcHRyKFx1MDAyNnNyY3VfZGVmZXIpO1xuJiM0MztcdFx0c3RydWN0IHNyY3VfZGF0YSAqc2RwO1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBJbnN0cnVtZW50YXRpb24gb24gdGhlIGVucXVldWUgcGF0aCBjYW4gcmUtZW50ZXIgaGVyZSBmcm9tXG4mIzQzO1x0XHQgKiBpbnNpZGUgc3JjdV9kZWZlcl9kcmFpbigpLiAgUmUtcXVldWluZyB3b3VsZCBsaXZlbG9jayB0aGVcbiYjNDM7XHRcdCAqIGRyYWluLCBzbyBkcm9wIHRoZSBjYWxsYmFjazsgYW4gTk1JIGNhbm5vdCBsb29wLCBzbyBsZXQgaXQgaW4uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChSRUFEX09OQ0Uoc25kcC1cdTAwM2VkcmFpbmluZykgXHUwMDI2XHUwMDI2ICFpbl9ubWkoKSkge1xuJiM0MztcdFx0XHRXQVJOX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSxcbiYjNDM7XHRcdFx0XHQgIFwmIzM0O2NhbGxfc3JjdSgpIHJlLWVudGVyZWQgZHVyaW5nIGNhbGxiYWNrIGRyYWluOyBsZWFraW5nIGNhbGxiYWNrXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0c2RwID0gdGhpc19jcHVfcHRyKHNzcC1cdTAwM2VzZGEpO1xuJiM0MztcdFx0cmhwLVx1MDAzZWZ1bmMgPSBmdW5jO1xuJiM0MztcdFx0aWYgKCFkb19ub3JtKVxuJiM0MztcdFx0XHRXUklURV9PTkNFKHNkcC1cdTAwM2VkZWZlcl9leHAsIHRydWUpO1xuJiM0MztcdFx0aWYgKGxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKilyaHAsIFx1MDAyNnNkcC1cdTAwM2VkZWZlcl9jYnMpKSB7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIENoYWluIHRoaXMgc3JjdV9kYXRhIGZvciB0aGUgZHJhaW4uICAtXHUwMDNlc3NwIG11c3QgYmVcbiYjNDM7XHRcdFx0ICogcHVibGlzaGVkIGhlcmU6IGRlZmVycmFsIHNraXBzIGNoZWNrX2luaXRfc3JjdV9zdHJ1Y3QoKSxcbiYjNDM7XHRcdFx0ICogc28gb24gYSBuZXZlci1pbml0aWFsaXplZCBzdGF0aWMgc3JjdV9zdHJ1Y3QgdGhlXG4mIzQzO1x0XHRcdCAqIHN0YXRpY2FsbHkgemVyb2VkIC1cdTAwM2VzZGEgc3RpbGwgaGFzIGEgTlVMTCAtXHUwMDNlc3NwLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0c2RwLVx1MDAzZXNzcCA9IHNzcDtcbiYjNDM7XHRcdFx0aWYgKGxsaXN0X2FkZChcdTAwMjZzZHAtXHUwMDNlZGVmZXJfbGluaywgXHUwMDI2c25kcC1cdTAwM2VsaXN0KSlcbiYjNDM7XHRcdFx0XHRpcnFfd29ya19xdWV1ZShcdTAwMjZzbmRwLVx1MDAzZWl3KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEFuIE5NSSByZWFjaGluZyBoZXJlIGVudGVyZWQgd2l0aCBpcnFzIGVuYWJsZWQsIHNvIHRoZSBlbnF1ZXVlIGNhbiByYWNlLiAqL1xuJiM0MztcdFdBUk5fT05fT05DRShJU19FTkFCTEVEKENPTkZJR19QUk9WRV9SQ1UpIFx1MDAyNlx1MDAyNiBpbl9ubWkoKSk7XG4mIzQzO1xuJiM0MztcdHNyY3VfZG9fZW5xdWV1ZShzc3AsIHJocCwgZnVuYywgZG9fbm9ybSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFJlLWlzc3VlIGRlZmVycmVkIGNhbGxiYWNrcyBzdHJhaWdodCB0byBzcmN1X2RvX2VucXVldWUoKSBzbyB0aGV5IGNhbm5vdCBkZWZlclxuJiM0MzsgKiBhZ2Fpbi4gIC1cdTAwM2Vsb2NrIHNlcmlhbGl6ZXMgdGhlIGRyYWluZXJzOiB0aGUgaXJxX3dvcmssIHNyY3VfZGVmZXJfZmx1c2goKSBhbmRcbiYjNDM7ICogc3JjdV9vZmZsaW5lX2RyYWluKCkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBfX3NyY3VfZGVmZXJfZHJhaW4oc3RydWN0IHNyY3VfZGVmZXIgKnNuZHAsIGJvb2wgZ3VhcmQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqc25vZGUsICpzbmV4dDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcbiYjNDM7XHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2c25kcC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0aWYgKGd1YXJkKVxuJiM0MztcdFx0V1JJVEVfT05DRShzbmRwLVx1MDAzZWRyYWluaW5nLCB0cnVlKTtcbiYjNDM7XHRsbGlzdF9mb3JfZWFjaF9zYWZlKHNub2RlLCBzbmV4dCwgbGxpc3RfZGVsX2FsbChcdTAwMjZzbmRwLVx1MDAzZWxpc3QpKSB7XG4mIzQzO1x0XHRzdHJ1Y3Qgc3JjdV9kYXRhICpzZHAgPSBjb250YWluZXJfb2Yoc25vZGUsIHN0cnVjdCBzcmN1X2RhdGEsIGRlZmVyX2xpbmspO1xuJiM0MztcdFx0c3RydWN0IHNyY3Vfc3RydWN0ICpzc3AgPSBzZHAtXHUwMDNlc3NwO1xuJiM0MztcdFx0c3RydWN0IGxsaXN0X25vZGUgKmNub2RlLCAqY25leHQ7XG4mIzQzO1x0XHRib29sIGRvX25vcm07XG4mIzQzO1xuJiM0MztcdFx0Y25vZGUgPSBsbGlzdF9kZWxfYWxsKFx1MDAyNnNkcC1cdTAwM2VkZWZlcl9jYnMpO1xuJiM0MztcdFx0ZG9fbm9ybSA9ICFSRUFEX09OQ0Uoc2RwLVx1MDAzZWRlZmVyX2V4cCk7XG4mIzQzO1x0XHRpZiAoIWRvX25vcm0pXG4mIzQzO1x0XHRcdFdSSVRFX09OQ0Uoc2RwLVx1MDAzZWRlZmVyX2V4cCwgZmFsc2UpO1xuJiM0MztcdFx0bGxpc3RfZm9yX2VhY2hfc2FmZShjbm9kZSwgY25leHQsIGNub2RlKSB7XG4mIzQzO1x0XHRcdHN0cnVjdCByY3VfaGVhZCAqcmhwID0gKHN0cnVjdCByY3VfaGVhZCAqKWNub2RlO1xuJiM0MztcbiYjNDM7XHRcdFx0cmhwLVx1MDAzZW5leHQgPSBOVUxMO1xuJiM0MztcdFx0XHRzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIHJocC1cdTAwM2VmdW5jLCBkb19ub3JtKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0aWYgKGd1YXJkKVxuJiM0MztcdFx0V1JJVEVfT05DRShzbmRwLVx1MDAzZWRyYWluaW5nLCBmYWxzZSk7XG4mIzQzO1x0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2c25kcC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIE9ubHkgdGhlIGlycV93b3JrIGRyYWluIGNhbiBiZSByZS1mZWQgYnkgaXRzIG93biByZS1pc3N1ZSwgc28gb25seSBpdCBzZXRzXG4mIzQzOyAqIC1cdTAwM2VkcmFpbmluZy4gIEEgZGlyZWN0IGRyYWluIHJlLWlzc3VlcyBvbnRvIHRoaXMgQ1BVLCBhbmQgYW55dGhpbmcgc3RhZ2VkXG4mIzQzOyAqIGR1cmluZyBpdCBpcyBwaWNrZWQgdXAgYnkgdGhhdCBDUFUmIzM5O3Mgb3duIGlycV93b3JrLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KVxuJiM0Mzt7XG4mIzQzO1x0X19zcmN1X2RlZmVyX2RyYWluKGNvbnRhaW5lcl9vZihpdywgc3RydWN0IHNyY3VfZGVmZXIsIGl3KSwgdHJ1ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIERyYWluIEBjcHUmIzM5O3MgZGVmZXJyZWQgY2FsbF9zcmN1KCkgY2FsbGJhY2tzIGZyb20gcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcygpXG4mIzQzOyAqIG9uY2UgQGNwdSBpcyBkZWFkLiAgT25lIHBhc3MgY292ZXJzIGV2ZXJ5IHNyY3Vfc3RydWN0LCBhbmQgdGhlIHJlLWlzc3VlIGxhbmRzXG4mIzQzOyAqIG9uIHRoZSBjdXJyZW50IENQVS5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgc3JjdV9vZmZsaW5lX2RyYWluKGludCBjcHUpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0X19zcmN1X2RlZmVyX2RyYWluKFx1MDAyNnBlcl9jcHUoc3JjdV9kZWZlciwgY3B1KSwgZmFsc2UpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGNhbGxfc3JjdSgpIC0gUXVldWUgYSBjYWxsYmFjayBmb3IgaW52b2NhdGlvbiBhZnRlciBhbiBTUkNVIGdyYWNlIHBlcmlvZFxuICAqIEBzc3A6IHNyY3Vfc3RydWN0IGluIHF1ZXVlIHRoZSBjYWxsYmFja1xuQEAgLTE2NzcsOSAmIzQzOzE4MzIsMTcgQEAgdm9pZCBzcmN1X2JhcnJpZXIoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4ge1xuIFx0aW50IGNwdTtcbiBcdGludCBpZHg7XG4tXHR1bnNpZ25lZCBsb25nIHMgPSByY3Vfc2VxX3NuYXAoXHUwMDI2c3NwLVx1MDAzZXNyY3Vfc3VwLVx1MDAzZXNyY3VfYmFycmllcl9zZXEpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgcztcbiBcbiBcdGNoZWNrX2luaXRfc3JjdV9zdHJ1Y3Qoc3NwKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIGJlZm9yZSBzbmFwc2hvdHRpbmcgdGhlIHNlcXVlbmNlLiAgVGhlXG4mIzQzO1x0ICogc2hhcmVkIGlycV93b3JrIG1heSBhbHNvIGRyYWluIG90aGVyIHNyY3Vfc3RydWN0cyYjMzk7LCB3aGljaCBpcyBoYXJtbGVzcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzcmN1X2RlZmVyX2ZsdXNoKCk7XG4mIzQzO1xuJiM0MztcdHMgPSByY3Vfc2VxX3NuYXAoXHUwMDI2c3NwLVx1MDAzZXNyY3Vfc3VwLVx1MDAzZXNyY3VfYmFycmllcl9zZXEpO1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZzc3AtXHUwMDNlc3JjdV9zdXAtXHUwMDNlc3JjdV9iYXJyaWVyX211dGV4KTtcbiBcdGlmIChyY3Vfc2VxX2RvbmUoXHUwMDI2c3NwLVx1MDAzZXNyY3Vfc3VwLVx1MDAzZXNyY3VfYmFycmllcl9zZXEsIHMpKSB7XG4gXHRcdHNtcF9tYigpOyAvKiBGb3JjZSBvcmRlcmluZyBmb2xsb3dpbmcgcmV0dXJuLiAqL1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdGlueS5jIGIva2VybmVsL3JjdS90aW55LmNcbmluZGV4IGRjY2NjZDZiZTk0MTEuLmJhZmZlNjYwMDQzZjUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvcmN1L3RpbnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS90aW55LmNcbkBAIC0xMSw2ICYjNDM7MTEsOCBAQFxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBsZXRpb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycV93b3JrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGxpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25vdGlmaWVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VwZGF0ZV93YWl0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuQEAgLTQyLDggJiM0Mzs0NCw5OSBAQCBzdGF0aWMgc3RydWN0IHJjdV9jdHJsYmxrIHJjdV9jdHJsYmxrID0ge1xuIFx0LmdwX3NlcVx0XHQ9IDAgLSAzMDBVTCxcbiB9O1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBUaGUgY2FsbGJhY2sgbGlzdCBpcyBvbmx5IGFjY2Vzc2VkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCwgc28gYSBjYWxsX3JjdSgpXG4mIzQzOyAqIHRoYXQgYXJyaXZlcyB3aXRoIGludGVycnVwdHMgb2ZmIHN0YWdlcyB0aGUgY2FsbGJhY2sgb24gYSBsb2NrbGVzcyBsaXN0IHRoYXRcbiYjNDM7ICogYW4gaXJxX3dvcmsgcmUtaXNzdWVzIGxhdGVyLiAgT25lIGdsb2JhbCBsaXN0IGFuZCBpcnFfd29yayBzdWZmaWNlLCBhcyBUaW55XG4mIzQzOyAqIFJDVSBpcyB1bmlwcm9jZXNzb3IuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCByY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdyk7XG4mIzQzO3N0YXRpYyBMTElTVF9IRUFEKHJjdV9kZWZlcl9saXN0KTtcbiYjNDM7c3RhdGljIHN0cnVjdCBpcnFfd29yayByY3VfZGVmZXJfaXcgPSBJUlFfV09SS19JTklUX0hBUkQocmN1X2RlZmVyX2RyYWluKTtcbiYjNDM7c3RhdGljIGJvb2wgcmN1X2RlZmVyX2RyYWluaW5nO1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogRW5xdWV1ZSBAaGVhZCBvbiB0aGUgY2FsbGJhY2sgbGlzdC4gIEFsc28gY2FsbGVkIGJ5IHJjdV9kZWZlcl9kcmFpbigpIHRvXG4mIzQzOyAqIHJlLWlzc3VlIGEgZGVmZXJyZWQgY2FsbGJhY2ssIHNvIGl0IG11c3Qgbm90IHJlLWNoZWNrIHRoZSBkZWZlcnJhbCBjb25kaXRpb24uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCByY3VfZG9fZW5xdWV1ZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMpXG4mIzQzO3tcbiYjNDM7XHRzdGF0aWMgYXRvbWljX3QgZG91YmxlZnJlZXM7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XG4mIzQzO1x0aWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKGhlYWQpKSB7XG4mIzQzO1x0XHRpZiAoYXRvbWljX2luY19yZXR1cm4oXHUwMDI2ZG91YmxlZnJlZXMpIFx1MDAzYyA0KSB7XG4mIzQzO1x0XHRcdHByX2VycihcJiMzNDslcygpOiBEb3VibGUtZnJlZWQgQ0IgJXAtXHUwMDNlJXBTKCkhISEgIFwmIzM0OywgX19mdW5jX18sIGhlYWQsIGhlYWQtXHUwMDNlZnVuYyk7XG4mIzQzO1x0XHRcdG1lbV9kdW1wX29iaihoZWFkKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGhlYWQtXHUwMDNlZnVuYyA9IGZ1bmM7XG4mIzQzO1x0aGVhZC1cdTAwM2VuZXh0ID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuJiM0MztcdCpyY3VfY3RybGJsay5jdXJ0YWlsID0gaGVhZDtcbiYjNDM7XHRyY3VfY3RybGJsay5jdXJ0YWlsID0gXHUwMDI2aGVhZC1cdTAwM2VuZXh0O1xuJiM0MztcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGlzX2lkbGVfdGFzayhjdXJyZW50KSkpIHtcbiYjNDM7XHRcdC8qIGZvcmNlIHNjaGVkdWxpbmcgZm9yIHJjdV9xcygpICovXG4mIzQzO1x0XHRyZXNjaGVkX2NwdSgwKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIF9fcmN1X2RlZmVyX2RyYWluKGJvb2wgZ3VhcmQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSwgKm5leHQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XG4mIzQzO1x0LyogQ2FsbGJhY2tzIGFyZSB1bm9yZGVyZWQsIHNvIGRyYWluIGluIGxsaXN0IG9yZGVyIHdpdGhvdXQgcmV2ZXJzaW5nLiAqL1xuJiM0MztcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbiYjNDM7XHRpZiAoZ3VhcmQpXG4mIzQzO1x0XHRXUklURV9PTkNFKHJjdV9kZWZlcl9kcmFpbmluZywgdHJ1ZSk7XG4mIzQzO1x0bGxpc3RfZm9yX2VhY2hfc2FmZShub2RlLCBuZXh0LCBsbGlzdF9kZWxfYWxsKFx1MDAyNnJjdV9kZWZlcl9saXN0KSkge1xuJiM0MztcdFx0c3RydWN0IHJjdV9oZWFkICpoZWFkID0gKHN0cnVjdCByY3VfaGVhZCAqKW5vZGU7XG4mIzQzO1xuJiM0MztcdFx0aGVhZC1cdTAwM2VuZXh0ID0gTlVMTDtcbiYjNDM7XHRcdHJjdV9kb19lbnF1ZXVlKGhlYWQsIGhlYWQtXHUwMDNlZnVuYyk7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChndWFyZClcbiYjNDM7XHRcdFdSSVRFX09OQ0UocmN1X2RlZmVyX2RyYWluaW5nLCBmYWxzZSk7XG4mIzQzO1x0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBPbmx5IHRoZSBpcnFfd29yayBkcmFpbiBjYW4gYmUgcmUtZmVkIGJ5IGl0cyBvd24gcmUtaXNzdWU7IHNlZSBUcmVlIFJDVS4gKi9cbiYjNDM7c3RhdGljIHZvaWQgcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpXG4mIzQzO3tcbiYjNDM7XHRfX3JjdV9kZWZlcl9kcmFpbih0cnVlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgY2FsbF9yY3VfZGVmZXIoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jKVxuJiM0Mzt7XG4mIzQzO1x0LyogQSByZS1lbnRyYW50IGNhbGxfcmN1KCkgZHVyaW5nIHRoZSBkcmFpbiB3b3VsZCBsaXZlbG9jayBpdDsgZHJvcCBpdC4gKi9cbiYjNDM7XHRpZiAoUkVBRF9PTkNFKHJjdV9kZWZlcl9kcmFpbmluZykgXHUwMDI2XHUwMDI2ICFpbl9ubWkoKSkge1xuJiM0MztcdFx0V0FSTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSksXG4mIzQzO1x0XHRcdCAgXCYjMzQ7Y2FsbF9yY3UoKSByZS1lbnRlcmVkIGR1cmluZyBjYWxsYmFjayBkcmFpbjsgbGVha2luZyBjYWxsYmFja1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcdGhlYWQtXHUwMDNlZnVuYyA9IGZ1bmM7XG4mIzQzO1x0aWYgKGxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKiloZWFkLCBcdTAwMjZyY3VfZGVmZXJfbGlzdCkpXG4mIzQzO1x0XHRpcnFfd29ya19xdWV1ZShcdTAwMjZyY3VfZGVmZXJfaXcpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIHNvIGEgZm9sbG93aW5nIHJjdV9iYXJyaWVyKCkgd2FpdHMgZm9yIHRoZW0uICovXG4mIzQzO3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9mbHVzaCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdF9fcmN1X2RlZmVyX2RyYWluKGZhbHNlKTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIHJjdV9iYXJyaWVyKHZvaWQpXG4ge1xuJiM0MztcdC8qIFJlZ2lzdGVyIGFueSBkZWZlcnJlZCBjYWxsYmFja3MgZmlyc3QuICovXG4mIzQzO1x0cmN1X2RlZmVyX2ZsdXNoKCk7XG4gXHR3YWl0X3JjdV9ncChjYWxsX3JjdV9odXJyeSk7XG4gfVxuIEVYUE9SVF9TWU1CT0wocmN1X2JhcnJpZXIpO1xuQEAgLTE1NywyOSAmIzQzOzI1MCwxNSBAQCBFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9yY3UpO1xuICAqL1xuIHZvaWQgY2FsbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jKVxuIHtcbi1cdHN0YXRpYyBhdG9taWNfdCBkb3VibGVmcmVlcztcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tXG4tXHRpZiAoZGVidWdfcmN1X2hlYWRfcXVldWUoaGVhZCkpIHtcbi1cdFx0aWYgKGF0b21pY19pbmNfcmV0dXJuKFx1MDAyNmRvdWJsZWZyZWVzKSBcdTAwM2MgNCkge1xuLVx0XHRcdHByX2VycihcJiMzNDslcygpOiBEb3VibGUtZnJlZWQgQ0IgJXAtXHUwMDNlJXBTKCkhISEgIFwmIzM0OywgX19mdW5jX18sIGhlYWQsIGhlYWQtXHUwMDNlZnVuYyk7XG4tXHRcdFx0bWVtX2R1bXBfb2JqKGhlYWQpO1xuLVx0XHR9XG4mIzQzO1x0aWYgKHNob3VsZF9yY3VfZGVmZXIoKSkge1xuJiM0MztcdFx0Y2FsbF9yY3VfZGVmZXIoaGVhZCwgZnVuYyk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdGhlYWQtXHUwMDNlZnVuYyA9IGZ1bmM7XG4tXHRoZWFkLVx1MDAzZW5leHQgPSBOVUxMO1xuLVxuLVx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuLVx0KnJjdV9jdHJsYmxrLmN1cnRhaWwgPSBoZWFkO1xuLVx0cmN1X2N0cmxibGsuY3VydGFpbCA9IFx1MDAyNmhlYWQtXHUwMDNlbmV4dDtcbi1cdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbiYjNDM7XHQvKiBBbiBOTUkgcmVhY2hpbmcgaGVyZSBlbnRlcmVkIHdpdGggaXJxcyBlbmFibGVkLCBzbyB0aGUgZW5xdWV1ZSBjYW4gcmFjZS4gKi9cbiYjNDM7XHRXQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSBcdTAwMjZcdTAwMjYgaW5fbm1pKCkpO1xuIFxuLVx0aWYgKHVubGlrZWx5KGlzX2lkbGVfdGFzayhjdXJyZW50KSkpIHtcbi1cdFx0LyogZm9yY2Ugc2NoZWR1bGluZyBmb3IgcmN1X3FzKCkgKi9cbi1cdFx0cmVzY2hlZF9jcHUoMCk7XG4tXHR9XG4mIzQzO1x0cmN1X2RvX2VucXVldWUoaGVhZCwgZnVuYyk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGNhbGxfcmN1KTtcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3RyZWUuYyBiL2tlcm5lbC9yY3UvdHJlZS5jXG5pbmRleCA5Njg0OGZjMWYwMmI4Li5lYjZiMTFjZmFkNDZmIDEwMDY0NFxuLS0tIGEva2VybmVsL3JjdS90cmVlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9yY3UvdHJlZS5jXG5AQCAtMjQsNiAmIzQzOzI0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlX3dhaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xsaXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvZGVidWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25taS5oXHUwMDNlXG5AQCAtMzE0OCwyMSAmIzQzOzMxNDksMjUgQEAgc3RhdGljIHZvaWQgY2hlY2tfY2Jfb3ZsZChzdHJ1Y3QgcmN1X2RhdGEgKnJkcClcbiBcdHJhd19zcGluX3VubG9ja19yY3Vfbm9kZShybnApO1xuIH1cbiBcbi1zdGF0aWMgdm9pZFxuLV9fY2FsbF9yY3VfY29tbW9uKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBsYXp5X2luKVxuJiM0MzsvKlxuJiM0MzsgKiBUaGUgY2FsbGJhY2sgbGlzdCBpcyBvbmx5IGFjY2Vzc2VkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCwgc28gYSBjYWxsX3JjdSgpXG4mIzQzOyAqIHRoYXQgYXJyaXZlcyB3aXRoIGludGVycnVwdHMgb2ZmIChzZWUgc2hvdWxkX3JjdV9kZWZlcigpKSBzdGFnZXMgdGhlIGNhbGxiYWNrXG4mIzQzOyAqIG9uIGEgcGVyLUNQVSBsbGlzdCB0aGF0IGFuIGlycV93b3JrIHJlLWlzc3VlcyBvbmNlIGludGVycnVwdHMgYXJlIG9uLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpO1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogRW5xdWV1ZSBAaGVhZCBvbiB0aGlzIENQVSYjMzk7cyByY3Vfc2VnY2JsaXN0LiAgQWxzbyBjYWxsZWQgYnkgcmN1X2RlZmVyX2RyYWluKClcbiYjNDM7ICogdG8gcmUtaXNzdWUgYSBkZWZlcnJlZCBjYWxsYmFjaywgc28gaXQgbXVzdCBub3QgcmUtY2hlY2sgdGhlIGRlZmVycmFsXG4mIzQzOyAqIGNvbmRpdGlvbi4gIEVpdGhlciBjYWxsZXIgbWF5IGhhdmUgaW50ZXJydXB0cyBhbHJlYWR5IGRpc2FibGVkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgcmN1X2RvX2VucXVldWUoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGxhenlfaW4pXG4ge1xuIFx0c3RhdGljIGF0b21pY190IGRvdWJsZWZyZWVzO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGJvb2wgbGF6eTtcbiBcdHN0cnVjdCByY3VfZGF0YSAqcmRwO1xuIFxuLVx0LyogTWlzYWxpZ25lZCByY3VfaGVhZCEgKi9cbi1cdFdBUk5fT05fT05DRSgodW5zaWduZWQgbG9uZyloZWFkIFx1MDAyNiAoc2l6ZW9mKHZvaWQgKikgLSAxKSk7XG4tXG4tXHQvKiBBdm9pZCBOVUxMIGRlcmVmZXJlbmNlIGlmIGNhbGxiYWNrIGlzIE5VTEwuICovXG4tXHRpZiAoV0FSTl9PTl9PTkNFKCFmdW5jKSlcbi1cdFx0cmV0dXJuO1xuLVxuIFx0aWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKGhlYWQpKSB7XG4gXHRcdC8qXG4gXHRcdCAqIFByb2JhYmxlIGRvdWJsZSBjYWxsX3JjdSgpLCBzbyBsZWFrIHRoZSBjYWxsYmFjay5cbkBAIC0zMjA2LDYgJiM0MzszMjExLDEwNCBAQCBfX2NhbGxfcmN1X2NvbW1vbihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgbGF6eV9pbilcbiBcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFJlLWlzc3VlIGRlZmVycmVkIGNhbGxiYWNrcyBzdHJhaWdodCB0byB0aGUgZW5xdWV1ZSBzbyB0aGV5IGNhbm5vdCBkZWZlclxuJiM0MzsgKiBhZ2Fpbi4gIC1cdTAwM2VkZWZlcl9sb2NrIHNlcmlhbGl6ZXMgdGhlIGRyYWluZXJzOiB0aGlzIENQVSYjMzk7cyBpcnFfd29yayxcbiYjNDM7ICogcmN1X2RlZmVyX2ZsdXNoKCkgYW5kIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoKS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIF9fcmN1X2RlZmVyX2RyYWluKHN0cnVjdCByY3VfZGF0YSAqcmRwLCBib29sIGd1YXJkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGxsaXN0X25vZGUgKm5vZGUsICpuZXh0O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1xuJiM0MztcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnJkcC1cdTAwM2VkZWZlcl9sb2NrLCBmbGFncyk7XG4mIzQzO1x0aWYgKGd1YXJkKVxuJiM0MztcdFx0V1JJVEVfT05DRShyZHAtXHUwMDNlZGVmZXJfZHJhaW5pbmcsIHRydWUpO1xuJiM0MztcdGxsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgbmV4dCwgbGxpc3RfZGVsX2FsbChcdTAwMjZyZHAtXHUwMDNlZGVmZXJfaGVhZCkpIHtcbiYjNDM7XHRcdHN0cnVjdCByY3VfaGVhZCAqaGVhZCA9IChzdHJ1Y3QgcmN1X2hlYWQgKilub2RlO1xuJiM0MztcbiYjNDM7XHRcdGhlYWQtXHUwMDNlbmV4dCA9IE5VTEw7XG4mIzQzO1x0XHRyY3VfZG9fZW5xdWV1ZShoZWFkLCBoZWFkLVx1MDAzZWZ1bmMsIGZhbHNlKTtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKGd1YXJkKVxuJiM0MztcdFx0V1JJVEVfT05DRShyZHAtXHUwMDNlZGVmZXJfZHJhaW5pbmcsIGZhbHNlKTtcbiYjNDM7XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZyZHAtXHUwMDNlZGVmZXJfbG9jaywgZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBPbmx5IHRoZSBpcnFfd29yayBkcmFpbiBjYW4gYmUgcmUtZmVkIGJ5IGl0cyBvd24gcmUtaXNzdWUsIHNvIG9ubHkgaXQgc2V0c1xuJiM0MzsgKiAtXHUwMDNlZGVmZXJfZHJhaW5pbmcuICBBIGRpcmVjdCBkcmFpbiByZS1pc3N1ZXMgb250byB0aGlzIENQVSwgYW5kIGFueXRoaW5nXG4mIzQzOyAqIHN0YWdlZCBkdXJpbmcgaXQgaXMgcGlja2VkIHVwIGJ5IHRoYXQgQ1BVJiMzOTtzIG93biBpcnFfd29yay5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KVxuJiM0Mzt7XG4mIzQzO1x0X19yY3VfZGVmZXJfZHJhaW4oY29udGFpbmVyX29mKGl3LCBzdHJ1Y3QgcmN1X2RhdGEsIGRlZmVyX3dvcmspLCB0cnVlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogU3RhZ2UgQGhlYWQgZm9yIHRoaXMgQ1BVJiMzOTtzIGlycV93b3JrIHdoZW4gY2FsbF9yY3UoKSBjYW5ub3QgZW5xdWV1ZSBub3cuICovXG4mIzQzO3N0YXRpYyB2b2lkIGNhbGxfcmN1X2RlZmVyKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByY3VfZGF0YSAqcmRwID0gdGhpc19jcHVfcHRyKFx1MDAyNnJjdV9kYXRhKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJbnN0cnVtZW50YXRpb24gb24gdGhlIGVucXVldWUgcGF0aCBjYW4gcmUtZW50ZXIgaGVyZSBmcm9tIGluc2lkZVxuJiM0MztcdCAqIHJjdV9kZWZlcl9kcmFpbigpLiAgUmUtcXVldWluZyB3b3VsZCBsaXZlbG9jayB0aGUgZHJhaW4sIHNvIGRyb3AgdGhlXG4mIzQzO1x0ICogY2FsbGJhY2s7IGFuIE5NSSBpcyBvbmUtc2hvdCBhbmQgY2Fubm90IGxvb3AsIHNvIGxldCBpdCB0aHJvdWdoLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChSRUFEX09OQ0UocmRwLVx1MDAzZWRlZmVyX2RyYWluaW5nKSBcdTAwMjZcdTAwMjYgIWluX25taSgpKSB7XG4mIzQzO1x0XHRXQVJOX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSxcbiYjNDM7XHRcdFx0ICBcJiMzNDtjYWxsX3JjdSgpIHJlLWVudGVyZWQgZHVyaW5nIGNhbGxiYWNrIGRyYWluOyBsZWFraW5nIGNhbGxiYWNrXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1x0aGVhZC1cdTAwM2VmdW5jID0gZnVuYztcbiYjNDM7XHRpZiAobGxpc3RfYWRkKChzdHJ1Y3QgbGxpc3Rfbm9kZSAqKWhlYWQsIFx1MDAyNnJkcC1cdTAwM2VkZWZlcl9oZWFkKSlcbiYjNDM7XHRcdGlycV93b3JrX3F1ZXVlKFx1MDAyNnJkcC1cdTAwM2VkZWZlcl93b3JrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUmVnaXN0ZXIgcGVuZGluZyBkZWZlcnJlZCBjYWxsYmFja3MgaW50byB0aGUgY2FsbGJhY2sgbGlzdHMgc28gYSBmb2xsb3dpbmdcbiYjNDM7ICogcmN1X2JhcnJpZXIoKSB3YWl0cyBmb3IgdGhlbS4gIFRoaXMgcnVucyBiZWZvcmUgcmN1X2JhcnJpZXIoKSBzY2FucyB0aGVcbiYjNDM7ICogbGlzdHMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCByY3VfZGVmZXJfZmx1c2godm9pZClcbiYjNDM7e1xuJiM0MztcdGludCBjcHU7XG4mIzQzO1xuJiM0MztcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuJiM0MztcdFx0c3RydWN0IHJjdV9kYXRhICpyZHAgPSBwZXJfY3B1X3B0cihcdTAwMjZyY3VfZGF0YSwgY3B1KTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWxsaXN0X2VtcHR5KFx1MDAyNnJkcC1cdTAwM2VkZWZlcl9oZWFkKSlcbiYjNDM7XHRcdFx0X19yY3VfZGVmZXJfZHJhaW4ocmRwLCBmYWxzZSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZFxuJiM0MztfX2NhbGxfcmN1X2NvbW1vbihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgbGF6eV9pbilcbiYjNDM7e1xuJiM0MztcdC8qIE1pc2FsaWduZWQgcmN1X2hlYWQhICovXG4mIzQzO1x0V0FSTl9PTl9PTkNFKCh1bnNpZ25lZCBsb25nKWhlYWQgXHUwMDI2IChzaXplb2Yodm9pZCAqKSAtIDEpKTtcbiYjNDM7XG4mIzQzO1x0LyogQXZvaWQgTlVMTCBkZXJlZmVyZW5jZSBpZiBjYWxsYmFjayBpcyBOVUxMLiAqL1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UoIWZ1bmMpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAoc2hvdWxkX3JjdV9kZWZlcigpKSB7XG4mIzQzO1x0XHRjYWxsX3JjdV9kZWZlcihoZWFkLCBmdW5jKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEFuIE5NSSByZWFjaGluZyBoZXJlIGVudGVyZWQgd2l0aCBpcnFzIGVuYWJsZWQsIHNvIHRoZSBlbnF1ZXVlIGNhbiByYWNlLiAqL1xuJiM0MztcdFdBUk5fT05fT05DRShJU19FTkFCTEVEKENPTkZJR19QUk9WRV9SQ1UpIFx1MDAyNlx1MDAyNiBpbl9ubWkoKSk7XG4mIzQzO1xuJiM0MztcdHJjdV9kb19lbnF1ZXVlKGhlYWQsIGZ1bmMsIGxhenlfaW4pO1xuJiM0Mzt9XG4mIzQzO1xuICNpZmRlZiBDT05GSUdfUkNVX0xBWllcbiBzdGF0aWMgYm9vbCBlbmFibGVfcmN1X2xhenkgX19yZWFkX21vc3RseSA9ICFJU19FTkFCTEVEKENPTkZJR19SQ1VfTEFaWV9ERUZBVUxUX09GRik7XG4gbW9kdWxlX3BhcmFtKGVuYWJsZV9yY3VfbGF6eSwgYm9vbCwgMDQ0NCk7XG5AQCAtMzg5Niw4ICYjNDM7Mzk5OSwxMiBAQCB2b2lkIHJjdV9iYXJyaWVyKHZvaWQpXG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0dW5zaWduZWQgbG9uZyBnc2VxO1xuIFx0c3RydWN0IHJjdV9kYXRhICpyZHA7XG4tXHR1bnNpZ25lZCBsb25nIHMgPSByY3Vfc2VxX3NuYXAoXHUwMDI2cmN1X3N0YXRlLmJhcnJpZXJfc2VxdWVuY2UpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgcztcbiBcbiYjNDM7XHQvKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIGJlZm9yZSBzbmFwc2hvdHRpbmcgdGhlIHNlcXVlbmNlLiAqL1xuJiM0MztcdHJjdV9kZWZlcl9mbHVzaCgpO1xuJiM0MztcbiYjNDM7XHRzID0gcmN1X3NlcV9zbmFwKFx1MDAyNnJjdV9zdGF0ZS5iYXJyaWVyX3NlcXVlbmNlKTtcbiBcdHJjdV9iYXJyaWVyX3RyYWNlKFRQUyhcJiMzNDtCZWdpblwmIzM0OyksIC0xLCBzKTtcbiBcbiBcdC8qIFRha2UgbXV0ZXggdG8gc2VyaWFsaXplIGNvbmN1cnJlbnQgcmN1X2JhcnJpZXIoKSByZXF1ZXN0cy4gKi9cbkBAIC00MjMxLDYgJiM0Mzs0MzM4LDEwIEBAIHJjdV9ib290X2luaXRfcGVyY3B1X2RhdGEoaW50IGNwdSlcbiBcdHJkcC1cdTAwM2VyY3Vfb25sX2dwX3N0YXRlID0gUkNVX0dQX0NMRUFORUQ7XG4gXHRyZHAtXHUwMDNlbGFzdF9zY2hlZF9jbG9jayA9IGppZmZpZXM7XG4gXHRyZHAtXHUwMDNlY3B1ID0gY3B1O1xuJiM0MztcdGluaXRfbGxpc3RfaGVhZChcdTAwMjZyZHAtXHUwMDNlZGVmZXJfaGVhZCk7XG4mIzQzO1x0cmF3X3NwaW5fbG9ja19pbml0KFx1MDAyNnJkcC1cdTAwM2VkZWZlcl9sb2NrKTtcbiYjNDM7XHQvKiBIYXJkIGlycV93b3JrIHNvIHRoZSByZS1pc3N1ZSBydW5zIHByb21wdGx5LiAqL1xuJiM0MztcdHJkcC1cdTAwM2VkZWZlcl93b3JrID0gSVJRX1dPUktfSU5JVF9IQVJEKHJjdV9kZWZlcl9kcmFpbik7XG4gXHRyY3VfYm9vdF9pbml0X25vY2JfcGVyY3B1X2RhdGEocmRwKTtcbiB9XG4gXG5AQCAtNDUyOCw2ICYjNDM7NDYzOSwxNiBAQCB2b2lkIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoaW50IGNwdSlcbiBcdHN0cnVjdCByY3VfZGF0YSAqcmRwID0gcGVyX2NwdV9wdHIoXHUwMDI2cmN1X2RhdGEsIGNwdSk7XG4gXHRib29sIG5lZWR3YWtlO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogQ2FsbGJhY2tzIHRoZSBvdXRnb2luZyBDUFUgZGVmZXJyZWQgbGF0ZSBpbiB0aGUgb2ZmbGluZSBwYXRoIChwYXN0IHRoZVxuJiM0MztcdCAqIHBvaW50IGl0cyBpcnFfd29yayBjYW4gcnVuKSBzaXQgb24gLVx1MDAzZWRlZmVyX2hlYWQsIHdoaWNoIHRoZSAtXHUwMDNlY2JsaXN0XG4mIzQzO1x0ICogbWlncmF0aW9uIGJlbG93IGRvZXMgbm90IGNvdmVyLiAgRHJhaW4gdGhlbSBoZXJlLCBiZWZvcmUgdGhlIGVhcmx5XG4mIzQzO1x0ICogcmV0dXJuczsgdGhlIHJlLWlzc3VlIGxhbmRzIG9uIHRoaXMgQ1BVLlxuJiM0MztcdCAqL1xuJiM0MztcdF9fcmN1X2RlZmVyX2RyYWluKHJkcCwgZmFsc2UpO1xuJiM0MztcdC8qIExpa2V3aXNlIGZvciB0aGUgb3V0Z29pbmcgQ1BVJiMzOTtzIGRlZmVycmVkIGNhbGxfc3JjdSgpIGNhbGxiYWNrcy4gKi9cbiYjNDM7XHRzcmN1X29mZmxpbmVfZHJhaW4oY3B1KTtcbiYjNDM7XG4gXHRpZiAocmN1X3JkcF9pc19vZmZsb2FkZWQocmRwKSlcbiBcdFx0cmV0dXJuO1xuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdHJlZS5oIGIva2VybmVsL3JjdS90cmVlLmhcbmluZGV4IGVlZGZhNDMwNTllODAuLmI3Y2FjN2ExM2I0ZjIgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvcmN1L3RyZWUuaFxuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS90cmVlLmhcbkBAIC0yMjksNiAmIzQzOzIyOSwxMiBAQCBzdHJ1Y3QgcmN1X2RhdGEge1xuIFx0c3RydWN0IHJjdV9oZWFkIGJhcnJpZXJfaGVhZDtcbiBcdGludCBleHBfd2F0Y2hpbmdfc25hcDtcdFx0LyogRG91YmxlLWNoZWNrIG5lZWQgZm9yIElQSS4gKi9cbiBcbiYjNDM7XHQvKiBEZWZlcnJhbCBvZiBhbiBOTUkvcmVlbnRyYW50IGNhbGxfcmN1KCk7IHNlZSBfX2NhbGxfcmN1X2NvbW1vbigpLiAqL1xuJiM0MztcdHN0cnVjdCBsbGlzdF9oZWFkIGRlZmVyX2hlYWQ7XG4mIzQzO1x0c3RydWN0IGlycV93b3JrIGRlZmVyX3dvcms7XG4mIzQzO1x0cmF3X3NwaW5sb2NrX3QgZGVmZXJfbG9jaztcbiYjNDM7XHRib29sIGRlZmVyX2RyYWluaW5nO1xuJiM0MztcbiBcdC8qIDUpIENhbGxiYWNrIG9mZmxvYWRpbmcuICovXG4gI2lmZGVmIENPTkZJR19SQ1VfTk9DQl9DUFVcbiBcdHN0cnVjdCBzd2FpdF9xdWV1ZV9oZWFkIG5vY2JfY2Jfd3E7IC8qIEZvciBub2NiIGt0aHJlYWRzIHRvIHNsZWVwIG9uLiAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JjdV9yZWVudHJ5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yY3VfcmVlbnRyeS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZmE4MTNkMWQ0OTJiNlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmN1X3JlZW50cnkuY1xuQEAgLTAsMCAmIzQzOzEsOTUgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LypcbiYjNDM7ICogRXhlcmNpc2UgcmUtZW50cnkgaW50byBjYWxsX3NyY3UoKSBmcm9tIEJQRjsgc2VlIHByb2dzL3JjdV9yZWVudHJ5LmMuXG4mIzQzOyAqXG4mIzQzOyAqIE9uIGEga2VybmVsIHdpdGhvdXQgdGhlIGNhbGxfc3JjdSgpIGFueS1jb250ZXh0IGZpeCB0aGUgbmVzdGVkIGNhbGxcbiYjNDM7ICogc2VsZi1kZWFkbG9ja3Mgb24gdGhlIHNyY3VfZGF0YSBsb2NrLCBzbyB0aGlzIGhhbmdzIHJhdGhlciB0aGFuIGZhaWxzLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBfR05VX1NPVVJDRVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzY2hlZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O3JjdV9yZWVudHJ5LnNrZWwuaFwmIzM0O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBzeXNfcGlkZmRfb3BlbihwaWRfdCBwaWQsIHVuc2lnbmVkIGludCBmbGFncylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBzeXNjYWxsKF9fTlJfcGlkZmRfb3BlbiwgcGlkLCBmbGFncyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFRpbnkgUkNVIGJ1aWxkcyBoYXZlIG5vIHJjdV9zZWdjYmxpc3RfZW5xdWV1ZSgpIHRvIGF0dGFjaCB0by4gKi9cbiYjNDM7c3RhdGljIGJvb2wgaGF2ZV9hdHRhY2hfdGFyZ2V0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGJ1ZlsyNTZdO1xuJiM0MztcdGJvb2wgZm91bmQgPSBmYWxzZTtcbiYjNDM7XHRGSUxFICpmO1xuJiM0MztcbiYjNDM7XHRmID0gZm9wZW4oXCYjMzQ7L3Byb2Mva2FsbHN5bXNcJiMzNDssIFwmIzM0O3JcJiMzNDspO1xuJiM0MztcdGlmICghZilcbiYjNDM7XHRcdHJldHVybiB0cnVlO1x0LyogY2Fubm90IHRlbGw7IGxldCB0aGUgYXR0YWNoIGRlY2lkZSAqL1xuJiM0MztcdHdoaWxlIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmKSkge1xuJiM0MztcdFx0aWYgKHN0cnN0cihidWYsIFwmIzM0OyByY3Vfc2VnY2JsaXN0X2VucXVldWVcXG5cJiMzNDspKSB7XG4mIzQzO1x0XHRcdGZvdW5kID0gdHJ1ZTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdGZjbG9zZShmKTtcbiYjNDM7XHRyZXR1cm4gZm91bmQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgdGVzdF9yY3VfcmVlbnRyeSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJjdV9yZWVudHJ5ICpza2VsO1xuJiM0MztcdGludCBlcnIsIHBpZGZkID0gLTEsIG1hcF9mZDtcbiYjNDM7XHRjcHVfc2V0X3Qgc2V0LCBvbGRfc2V0O1xuJiM0MztcdGJvb2wgYWZmaW5pdHlfc2F2ZWQ7XG4mIzQzO1x0X191NjQgdmFsID0gMTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFoYXZlX2F0dGFjaF90YXJnZXQoKSkge1xuJiM0MztcdFx0dGVzdF9fc2tpcCgpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2tlbCA9IHJjdV9yZWVudHJ5X19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O3NrZWxfb3Blbl9hbmRfbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGVyciA9IHJjdV9yZWVudHJ5X19hdHRhY2goc2tlbCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtza2VsX2F0dGFjaFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0LyogS2VlcCB0aGUgcmUtZW50cnkgb24gYSBzaW5nbGUgQ1BVLiAqL1xuJiM0MztcdGFmZmluaXR5X3NhdmVkID0gIXNjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihvbGRfc2V0KSwgXHUwMDI2b2xkX3NldCk7XG4mIzQzO1x0Q1BVX1pFUk8oXHUwMDI2c2V0KTtcbiYjNDM7XHRDUFVfU0VUKDAsIFx1MDAyNnNldCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soc2NoZWRfc2V0YWZmaW5pdHkoMCwgc2l6ZW9mKHNldCksIFx1MDAyNnNldCksIFwmIzM0O3NldGFmZmluaXR5XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRwaWRmZCA9IHN5c19waWRmZF9vcGVuKGdldHBpZCgpLCAwKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShwaWRmZCwgMCwgXCYjMzQ7cGlkZmRfb3BlblwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIHJlc3RvcmU7XG4mIzQzO1x0bWFwX2ZkID0gYnBmX21hcF9fZmQoc2tlbC1cdTAwM2VtYXBzLnRhc2tfc3RnKTtcbiYjNDM7XHRlcnIgPSBicGZfbWFwX3VwZGF0ZV9lbGVtKG1hcF9mZCwgXHUwMDI2cGlkZmQsIFx1MDAyNnZhbCwgQlBGX05PRVhJU1QpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7Ym9vdF9jcmVhdGVcJiMzNDspKVxuJiM0MztcdFx0Z290byByZXN0b3JlO1xuJiM0MztcbiYjNDM7XHQvKiBBcm0gdGhlIGhhbmRsZXIgZm9yIHRoaXMgdGhyZWFkLCB0aGVuIHRyaWdnZXIgY2FsbF9yY3VfdGFza3NfdHJhY2UoKS4gKi9cbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2V0YXJnZXRfcGlkID0gc3lzY2FsbChfX05SX2dldHRpZCk7XG4mIzQzO1x0ZXJyID0gYnBmX21hcF9kZWxldGVfZWxlbShtYXBfZmQsIFx1MDAyNnBpZGZkKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O2Jvb3RfZGVsZXRlXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0LyogT25seSBUcmVlIFNSQ1UgZW5xdWV1ZXMgdmlhIHJjdV9zZWdjYmxpc3RfZW5xdWV1ZSgpOyBza2lwIGVsc2V3aGVyZS4gKi9cbiYjNDM7XHRpZiAoIXNrZWwtXHUwMDNlYnNzLVx1MDAzZWhpdHMpIHtcbiYjNDM7XHRcdHRlc3RfX3NraXAoKTtcbiYjNDM7XHRcdGdvdG8gcmVzdG9yZTtcbiYjNDM7XHR9XG4mIzQzO1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWdldF9lcnJzLCAwLCBcJiMzNDtuZXN0ZWRfc3RvcmFnZV9nZXRcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VkZWxfZXJycywgMCwgXCYjMzQ7bmVzdGVkX3N0b3JhZ2VfZGVsZXRlXCYjMzQ7KTtcbiYjNDM7cmVzdG9yZTpcbiYjNDM7XHRpZiAoYWZmaW5pdHlfc2F2ZWQpXG4mIzQzO1x0XHRzY2hlZF9zZXRhZmZpbml0eSgwLCBzaXplb2Yob2xkX3NldCksIFx1MDAyNm9sZF9zZXQpO1xuJiM0MztvdXQ6XG4mIzQzO1x0aWYgKHBpZGZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKHBpZGZkKTtcbiYjNDM7XHRyY3VfcmVlbnRyeV9fZGVzdHJveShza2VsKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yY3VfcmVlbnRyeS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JjdV9yZWVudHJ5LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi40N2EzNmY3MDRjZjNlXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmN1X3JlZW50cnkuY1xuQEAgLTAsMCAmIzQzOzEsNTEgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LypcbiYjNDM7ICogUmUtZW50ZXIgY2FsbF9zcmN1KCkgZnJvbSBhIEJQRiBwcm9ncmFtLiAgZmVudHJ5IG9uIHJjdV9zZWdjYmxpc3RfZW5xdWV1ZSgpXG4mIzQzOyAqIGZpcmVzIGluc2lkZSBjYWxsX3NyY3UoKSYjMzk7cyBlbnF1ZXVlIChyZWFjaGVkIGZyb20gc3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoKVxuJiM0MzsgKiB3aXRoIHRoZSBzcmN1X2RhdGEgLVx1MDAzZWxvY2sgaGVsZCk7IHRoZSBoYW5kbGVyIHRoZW4gY2FsbHMgY2FsbF9yY3VfdGFza3NfdHJhY2UoKVxuJiM0MzsgKiAtLSBpdHNlbGYgY2FsbF9zcmN1KCkgb24gcmN1X3Rhc2tzX3RyYWNlX3NyY3Vfc3RydWN0IC0tIHJlLWVudGVyaW5nIHRoZSBzYW1lXG4mIzQzOyAqIHNyY3VfZGF0YSBvbiB0aGUgc2FtZSBDUFUuXG4mIzQzOyAqL1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt2bWxpbnV4LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbiYjNDM7XG4mIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4mIzQzO1xuJiM0MztzdHJ1Y3Qge1xuJiM0MztcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfVEFTS19TVE9SQUdFKTtcbiYjNDM7XHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7XG4mIzQzO1x0X190eXBlKGtleSwgaW50KTtcbiYjNDM7XHRfX3R5cGUodmFsdWUsIF9fdTY0KTtcbiYjNDM7fSB0YXNrX3N0ZyBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuJiM0MztcbiYjNDM7aW50IHRhcmdldF9waWQ7XG4mIzQzO2ludCBoaXRzO1xuJiM0MztpbnQgZ2V0X2VycnM7XG4mIzQzO2ludCBkZWxfZXJycztcbiYjNDM7aW50IGRvbmU7XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7ZmVudHJ5L3JjdV9zZWdjYmxpc3RfZW5xdWV1ZVwmIzM0OylcbiYjNDM7aW50IEJQRl9QUk9HKHJlZW50ZXIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cjtcbiYjNDM7XG4mIzQzO1x0aWYgKGRvbmUgfHwgIXRhcmdldF9waWQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0Y3VyID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7XG4mIzQzO1x0aWYgKGN1ci1cdTAwM2VwaWQgIT0gdGFyZ2V0X3BpZClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHQvKiBJc3N1ZSB0aGUgbmVzdGVkIGNhbGwgZXhhY3RseSBvbmNlLCBzbyB0aGUgdGVzdCBpcyBkZXRlcm1pbmlzdGljLiAqL1xuJiM0MztcdGRvbmUgPSAxO1xuJiM0MztcdF9fc3luY19mZXRjaF9hbmRfYWRkKFx1MDAyNmhpdHMsIDEpO1xuJiM0MztcbiYjNDM7XHQvKiBSZS1lbnRlciB2aWEgYSB0YXNrLXN0b3JhZ2UgZGVsZXRlLCB3aGljaCBjYWxscyBjYWxsX3JjdV90YXNrc190cmFjZSgpLiAqL1xuJiM0MztcdGlmICghYnBmX3Rhc2tfc3RvcmFnZV9nZXQoXHUwMDI2dGFza19zdGcsIGN1ciwgMCwgQlBGX0xPQ0FMX1NUT1JBR0VfR0VUX0ZfQ1JFQVRFKSlcbiYjNDM7XHRcdF9fc3luY19mZXRjaF9hbmRfYWRkKFx1MDAyNmdldF9lcnJzLCAxKTtcbiYjNDM7XHRlbHNlIGlmIChicGZfdGFza19zdG9yYWdlX2RlbGV0ZShcdTAwMjZ0YXNrX3N0ZywgY3VyKSlcbiYjNDM7XHRcdF9fc3luY19mZXRjaF9hbmRfYWRkKFx1MDAyNmRlbF9lcnJzLCAxKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMzozMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJPVkVfTE9DS0lORyYjMzQ7LAogICAgJiMzNDtSQ1VfVE9SVFVSRV9URVNUJiMzNDssCiAgICAmIzM0O1BFUkZfRVZFTlRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmN1X2JhcnJpZXImIzM0OywKICAgICYjMzQ7c3JjdV9iYXJyaWVyJiMzNDssCiAgICAmIzM0O3NyY3Vfb2ZmbGluZV9kcmFpbiYjMzQ7LAogICAgJiMzNDtyY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzJiMzNDssCiAgICAmIzM0O3NyY3VfZGVmZXJfZHJhaW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBSQ1UgYW5kIFNSQ1UgbG9naWMgdG8gZGVmZXIgYGNhbGxfcmN1KClgIGFuZCBgY2FsbF9zcmN1KClgIGNhbGxiYWNrcyB3aGVuIGludGVycnVwdHMgYXJlIGRpc2FibGVkLiBUaGlzIHByZXZlbnRzIGRlYWRsb2NrcyBvciBsaXN0IGNvcnJ1cHRpb24gZHVyaW5nIHJlLWVudHJhbnQgY2FsbHMgKGUuZy4sIGZyb20gQlBGIHByb2dyYW1zIG9yIE5NSXMpLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGRlZmVycmFsIG1lY2hhbmlzbSB1c2luZyBgaXJxX3dvcmtgIGFuZCBsb2NrbGVzcyBsaXN0cy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwsIHJlYWNoYWJsZSwgYW5kIGFmZmVjdCBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk0ZDIyYzY3NzE4N2YyZTZkYTk2ZDdmMzhhN2EyY2JlMTA5MzY2YjAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyA1IDEzOjMxOjM5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcmN1dGlueS5oIGIvaW5jbHVkZS9saW51eC9zcmN1dGlueS5oCmluZGV4IGZiY2YxM2JjMTJkMTUuLmEwZTU0ZDkxODJiYWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3JjdXRpbnkuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NyY3V0aW55LmgKQEAgLTEyLDYgJiM0MzsxMiw3IEBACiAjZGVmaW5lIF9MSU5VWF9TUkNVX1RJTllfSAogCiAjaW5jbHVkZSAmbHQ7bGludXgvaXJxX3dvcmtfdHlwZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbGxpc3QuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zd2FpdC5oJmd0OwogCiBzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgewpAQCAtMjYsNiAmIzQzOzI3LDggQEAgc3RydWN0IHNyY3Vfc3RydWN0IHsKIAlzdHJ1Y3QgcmN1X2hlYWQgKipzcmN1X2NiX3RhaWw7CS8qIFBlbmRpbmcgY2FsbGJhY2tzOiBUYWlsLiAqLwogCXN0cnVjdCB3b3JrX3N0cnVjdCBzcmN1X3dvcms7CS8qIEZvciBkcml2aW5nIGdyYWNlIHBlcmlvZHMuICovCiAJc3RydWN0IGlycV93b3JrIHNyY3VfaXJxX3dvcms7CS8qIERlZmVyIHNjaGVkdWxlX3dvcmsoKSB0byBpcnEgd29yay4gKi8KJiM0MzsJc3RydWN0IGxsaXN0X2hlYWQgZGVmZXJfY2JzOwkvKiBDYWxsYmFja3MgZGVmZXJyZWQgb24gcmUtZW50cnkuICovCiYjNDM7CXN0cnVjdCBpcnFfd29yayBkZWZlcl9pdzsJCS8qIFJlZ2lzdGVycyBkZWZlcl9jYnMgbGF0ZXIuICovCiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKIAlzdHJ1Y3QgbG9ja2RlcF9tYXAgZGVwX21hcDsKICNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgKi8KQEAgLTMzLDYgJiM0MzszNiw3IEBAIHN0cnVjdCBzcmN1X3N0cnVjdCB7CiAKIHZvaWQgc3JjdV9kcml2ZV9ncChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndwKTsKIHZvaWQgc3JjdV90aW55X2lycV93b3JrKHN0cnVjdCBpcnFfd29yayAqaXJxX3dvcmspOwomIzQzO3ZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKmlycV93b3JrKTsKIAogI2RlZmluZSBfX1NSQ1VfU1RSVUNUX0lOSVQobmFtZSwgX19pZ25vcmVkLCBfX19pZ25vcmVkLCBfX19faWdub3JlZCkJXAogewkJCQkJCQkJCVwKQEAgLTQwLDYgJiM0Mzs0NCw5IEBAIHZvaWQgc3JjdV90aW55X2lycV93b3JrKHN0cnVjdCBpcnFfd29yayAqaXJxX3dvcmspOwogCS5zcmN1X2NiX3RhaWwgPSAmYW1wO25hbWUuc3JjdV9jYl9oZWFkLAkJCQlcCiAJLnNyY3Vfd29yayA9IF9fV09SS19JTklUSUFMSVpFUihuYW1lLnNyY3Vfd29yaywgc3JjdV9kcml2ZV9ncCksCVwKIAkuc3JjdV9pcnFfd29yayA9IHsgLmZ1bmMgPSBzcmN1X3RpbnlfaXJxX3dvcmsgfSwJCVwKJiM0MzsJLmRlZmVyX2NicyA9IExMSVNUX0hFQURfSU5JVChuYW1lLmRlZmVyX2NicyksCQkJXAomIzQzOwkuZGVmZXJfaXcgPSB7IC5ub2RlID0geyAudV9mbGFncyA9IElSUV9XT1JLX0hBUkRfSVJRIH0sCQlcCiYjNDM7CQkgICAgICAuZnVuYyA9IHNyY3VfZGVmZXJfZHJhaW4gfSwJCQlcCiAJX19TUkNVX0RFUF9NQVBfSU5JVChuYW1lKQkJCQkJXAogfQogCkBAIC0xMzEsMTAgJiM0MzsxMzgsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3luY2hyb25pemVfc3JjdV9leHBlZGl0ZWQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApCiAJc3luY2hyb25pemVfc3JjdShzc3ApOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc3JjdV9iYXJyaWVyKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKQotewotCXN5bmNocm9uaXplX3NyY3Uoc3NwKTsKLX0KJiM0Mzt2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzcmN1X2V4cGVkaXRlX2N1cnJlbnQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApIHsgfQogI2RlZmluZSBzcmN1X2NoZWNrX3JlYWRfZmxhdm9yKHNzcCwgcmVhZF9mbGF2b3IpIGRvIHsgfSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3JjdXRyZWUuaCBiL2luY2x1ZGUvbGludXgvc3JjdXRyZWUuaAppbmRleCA3NWU1NGU0Zjk2M2ZhLi4wOWE5YzhmNGE2ZDI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NyY3V0cmVlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zcmN1dHJlZS5oCkBAIC0xMyw2ICYjNDM7MTMsOCBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvcmN1X25vZGVfdHJlZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2NvbXBsZXRpb24uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaXJxX3dvcmtfdHlwZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbGxpc3QuaCZndDsKIAogc3RydWN0IHNyY3Vfbm9kZTsKIHN0cnVjdCBzcmN1X3N0cnVjdDsKQEAgLTQxLDYgJiM0Mzs0Myw5IEBAIHN0cnVjdCBzcmN1X2RhdGEgewogCWJvb2wgc3JjdV9jYmxpc3RfaW52b2tpbmc7CQkvKiBJbnZva2luZyB0aGVzZSBDQnM/ICovCiAJc3RydWN0IHRpbWVyX2xpc3QgZGVsYXlfd29yazsJCS8qIERlbGF5IGZvciBDQiBpbnZva2luZyAqLwogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwkJLyogQ29udGV4dCBmb3IgQ0IgaW52b2tpbmcuICovCiYjNDM7CXN0cnVjdCBsbGlzdF9oZWFkIGRlZmVyX2NiczsJCS8qIENhbGxiYWNrcyBkZWZlcnJlZCBvbiByZS1lbnRyeS4gKi8KJiM0MzsJc3RydWN0IGxsaXN0X25vZGUgZGVmZXJfbGluazsJCS8qIExpbmtzIG9udG8gdGhlIHBlci1DUFUgZGVmZXJyYWwgZHJhaW4gbGlzdCAqLwomIzQzOwlib29sIGRlZmVyX2V4cDsJCQkJLyogQSBkZWZlcnJlZCBjYWxsYmFjayBhc2tlZCB0byBleHBlZGl0ZS4gKi8KIAlzdHJ1Y3QgcmN1X2hlYWQgc3JjdV9iYXJyaWVyX2hlYWQ7CS8qIEZvciBzcmN1X2JhcnJpZXIoKSB1c2UuICovCiAJc3RydWN0IHJjdV9oZWFkIHNyY3VfZWNfaGVhZDsJCS8qIEZvciBzcmN1X2V4cGVkaXRlX2N1cnJlbnQoKSB1c2UuICovCiAJaW50IHNyY3VfZWNfc3RhdGU7CQkJLyogIFN0YXRlIGZvciBzcmN1X2V4cGVkaXRlX2N1cnJlbnQoKS4gKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvS2NvbmZpZyBiL2tlcm5lbC9yY3UvS2NvbmZpZwppbmRleCAzMzJkZjdhN2E2MzQ3Li5iYzk0ODNjMGI1ZDg0IDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1L0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS9LY29uZmlnCkBAIC0xNzUsNiAmIzQzOzE3NSwxMiBAQCBjb25maWcgUkNVX1NUQUxMX0NPTU1PTgogY29uZmlnIFJDVV9ORUVEX1NFR0NCTElTVAogCWRlZl9ib29sICggVFJFRV9SQ1UgfHwgVFJFRV9TUkNVIHx8IFRBU0tTX1JDVV9HRU5FUklDICkKIAomIzQzOyMgVGhlIGRlZmVycmFsIChhbmQgdGhlIElSUV9XT1JLIGl0IHVzZXMpIGlzIG9ubHkgbmVlZGVkIHdoZXJlIGNhbGxfcmN1KCkgLwomIzQzOyMgY2FsbF9zcmN1KCkgY2FuIGJlIGludm9rZWQgd2hpbGUgYSBjYWxsYmFjay1saXN0IG9wZXJhdGlvbiBpcyBpbiBmbGlnaHQuCiYjNDM7Y29uZmlnIFJDVV9ERUZFUgomIzQzOwlkZWZfYm9vbCBIQVZFX05NSSB8fCBLUFJPQkVTIHx8IEZVTkNUSU9OX1RSQUNFUiB8fCBUUkFDRVBPSU5UUwomIzQzOwlzZWxlY3QgSVJRX1dPUksKJiM0MzsKIGNvbmZpZyBSQ1VfRkFOT1VUCiAJaW50ICYjMzQ7VHJlZS1iYXNlZCBoaWVyYXJjaGljYWwgUkNVIGZhbm91dCB2YWx1ZSYjMzQ7CiAJcmFuZ2UgMiA2NCBpZiA2NEJJVApkaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9yY3UuaCBiL2tlcm5lbC9yY3UvcmN1LmgKaW5kZXggMzlhOWY2ZmE5YTdiMi4uODRkNzRjZDVhMzUxYyAxMDA2NDQKLS0tIGEva2VybmVsL3JjdS9yY3UuaAomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvcmN1L3JjdS5oCkBAIC01NzIsNiAmIzQzOzU3MiwyNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdGFza3NfY2JsaXN0X2luaXRfZ2VuZXJpYyh2b2lkKSB7IH0KICNkZWZpbmUgUkNVX1NDSEVEVUxFUl9JTklUCTEKICNkZWZpbmUgUkNVX1NDSEVEVUxFUl9SVU5OSU5HCTIKIAomIzQzOy8qCiYjNDM7ICogRGVmZXIgYSBjYWxsX3JjdSgpL2NhbGxfc3JjdSgpIGNhbGxiYWNrIHJhdGhlciB0aGFuIGVucXVldWUgaXQgbm93PyAgRGVmZXIKJiM0MzsgKiB3aGVuZXZlciBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCwgc2luY2UgYSBjYWxsYmFjay1saXN0IG9wZXJhdGlvbiBtYXkgYmUgaW4KJiM0MzsgKiBmbGlnaHQgb24gdGhpcyBDUFUuICBOb3QgYmVmb3JlIHRoZSBzY2hlZHVsZXIgaXMgdXAsIHRob3VnaDogdGhhdCBjb3ZlcnMKJiM0MzsgKiBlYXJseSBib290LCB3aGVyZSBpcnFfd29yayBpcyBub3QgeWV0IHVzYWJsZSBhbmQgcmN1X2luaXQoKSBpdHNlbGYgYWxyZWFkeQomIzQzOyAqIGNhbGxzIGNhbGxfcmN1KCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBib29sIHNob3VsZF9yY3VfZGVmZXIodm9pZCkKJiM0Mzt7CiYjNDM7CWlmICghSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcmV0dXJuIGlycXNfZGlzYWJsZWQoKSAmYW1wOyZhbXA7IHJjdV9zY2hlZHVsZXJfYWN0aXZlICE9IFJDVV9TQ0hFRFVMRVJfSU5BQ1RJVkU7CiYjNDM7fQomIzQzOwomIzQzOy8qIERyYWluIGFuIG91dGdvaW5nIENQVSYjMzk7cyBkZWZlcnJlZCBTUkNVIGNhbGxiYWNrczsgc2VlIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoKS4gKi8KJiM0Mzt2b2lkIHNyY3Vfb2ZmbGluZV9kcmFpbihpbnQgY3B1KTsKJiM0MzsKIGVudW0gcmN1dG9ydHVyZV90eXBlIHsKIAlSQ1VfRkxBVk9SLAogCVJDVV9UQVNLU19GTEFWT1IsCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYyBiL2tlcm5lbC9yY3UvcmN1dG9ydHVyZS5jCmluZGV4IDc5NDkzN2UxM2U3YzMuLmE4NGU3MjVlODA2NTYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3UvcmN1dG9ydHVyZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9yY3UvcmN1dG9ydHVyZS5jCkBAIC00OCw2ICYjNDM7NDgsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3RpY2suaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9yY3VwZGF0ZV90cmFjZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L25taS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wZXJmX2V2ZW50LmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7cmN1LmgmIzM0OwogCkBAIC0xMTUsNiAmIzQzOzExNiw3IEBAIHRvcnR1cmVfcGFyYW0oaW50LCBsZWFrcG9pbnRlciwgMCwgJiMzNDtMZWFrIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGZyb20gcmVhZGVycyYjMzQ7KTsKIHRvcnR1cmVfcGFyYW0oaW50LCBuX2JhcnJpZXJfY2JzLCAwLCAmIzM0OyMgb2YgY2FsbGJhY2tzL2t0aHJlYWRzIGZvciBiYXJyaWVyIHRlc3RpbmcmIzM0Oyk7CiB0b3J0dXJlX3BhcmFtKGludCwgbl91cF9kb3duLCAzMiwgJiMzNDsjIG9mIGNvbmN1cnJlbnQgdXAvZG93biBocnRpbWVyLWJhc2VkIFJDVSByZWFkZXJzJiMzNDspOwogdG9ydHVyZV9wYXJhbShpbnQsIG5mYWtld3JpdGVycywgNCwgJiMzNDtOdW1iZXIgb2YgUkNVIGZha2Ugd3JpdGVyIHRocmVhZHMmIzM0Oyk7CiYjNDM7dG9ydHVyZV9wYXJhbShib29sLCBubWlfY2FsbHMsIHRydWUsICYjMzQ7RXhlcmNpc2UgLSZndDtjYWxsKCkgZnJvbSBOTUkgb24gbm1pX2NhcGFibGUgZmxhdm9ycyYjMzQ7KTsKIHRvcnR1cmVfcGFyYW0oaW50LCBucmVhZGVycywgLTEsICYjMzQ7TnVtYmVyIG9mIFJDVSByZWFkZXIgdGhyZWFkcyYjMzQ7KTsKIHRvcnR1cmVfcGFyYW0oYm9vbCwgbndyaXRlcnMsIDEsICYjMzQ7TnVtYmVyIG9mIFJDVSB3cml0ZXIgdGhyZWFkcyAoMCBvciAxKSYjMzQ7KTsKIHRvcnR1cmVfcGFyYW0oaW50LCBvYmplY3RfZGVidWcsIDAsICYjMzQ7RW5hYmxlIGRlYnVnLW9iamVjdCBkb3VibGUgY2FsbF9yY3UoKSB0ZXN0aW5nJiMzNDspOwpAQCAtMjE2LDYgJiM0MzsyMTgsOCBAQCBzdGF0aWMgbG9uZyBuX3JjdV90b3J0dXJlX2Jvb3N0X2ZhaWx1cmU7CiBzdGF0aWMgbG9uZyBuX3JjdV90b3J0dXJlX2Jvb3N0czsKIHN0YXRpYyBhdG9taWNfbG9uZ190IG5fcmN1X3RvcnR1cmVfdGltZXJzOwogc3RhdGljIGF0b21pY19sb25nX3Qgbl9yY3VfdG9ydHVyZV9pcnFzOwomIzQzO3N0YXRpYyBhdG9taWNfbG9uZ190IG5fcmN1X3RvcnR1cmVfbm1pX2NhbGw7CiYjNDM7c3RhdGljIGF0b21pY19sb25nX3Qgbl9yY3VfdG9ydHVyZV9ubWlfY2I7CiBzdGF0aWMgbG9uZyBuX2JhcnJpZXJfYXR0ZW1wdHM7CiBzdGF0aWMgbG9uZyBuX2JhcnJpZXJfc3VjY2Vzc2VzOyAvKiBkaWQgcmN1X2JhcnJpZXIgdGVzdCBzdWNjZWVkPyAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgbl9yZWFkX2V4aXRzOwpAQCAtNDMzLDYgJiM0Mzs0MzcsNyBAQCBzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzIHsKIAlib29sICgqaXNfdGFza19yY3VfYm9vc3RlZCkodm9pZCk7CiAJbG9uZyBjYmZsb29kX21heDsKIAlpbnQgaXJxX2NhcGFibGU7CiYjNDM7CWludCBubWlfY2FwYWJsZTsKIAlpbnQgY2FuX2Jvb3N0OwogCWludCBleHRlbmRhYmxlczsKIAlpbnQgc2xvd19ncHM7CkBAIC02NDgsNiAmIzQzOzY1Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzIHJjdV9vcHMgPSB7CiAJLmV4dGVuZGFibGVzCQk9IFJDVVRPUlRVUkVfTUFYX0VYVEVORCwKIAkuZGVidWdfb2JqZWN0cwkJPSAxLAogCS5zdGFydF9wb2xsX2lycXNvZmYJPSAxLAomIzQzOwkubm1pX2NhcGFibGUJCT0gMSwKIAkubmFtZQkJCT0gJiMzNDtyY3UmIzM0OwogfTsKIApAQCAtOTQyLDYgJiM0Mzs5NDgsNyBAQCBzdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlX29wcyBzcmN1X29wcyA9IHsKIAkuZGVidWdfb2JqZWN0cwk9IDEsCiAJLmhhdmVfdXBfZG93bgk9IElTX0VOQUJMRUQoQ09ORklHX1RJTllfU1JDVSkKIAkJCQk/IDAgOiBTUkNVX1JFQURfRkxBVk9SX05PUk1BTCB8IFNSQ1VfUkVBRF9GTEFWT1JfRkFTVF9VUERPV04sCiYjNDM7CS5ubWlfY2FwYWJsZQk9IDEsCiAJLm5hbWUJCT0gJiMzNDtzcmN1JiMzNDsKIH07CiAKQEAgLTEwMDUsNiAmIzQzOzEwMTIsNyBAQCBzdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlX29wcyBzcmN1ZF9vcHMgPSB7CiAJLmRlYnVnX29iamVjdHMJPSAxLAogCS5oYXZlX3VwX2Rvd24JPSBJU19FTkFCTEVEKENPTkZJR19USU5ZX1NSQ1UpCiAJCQkJPyAwIDogU1JDVV9SRUFEX0ZMQVZPUl9OT1JNQUwgfCBTUkNVX1JFQURfRkxBVk9SX0ZBU1RfVVBET1dOLAomIzQzOwkubm1pX2NhcGFibGUJPSAxLAogCS5uYW1lCQk9ICYjMzQ7c3JjdWQmIzM0OwogfTsKIApAQCAtMTI2OSw2ICYjNDM7MTI3Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzIHRhc2tzX3RyYWNpbmdfb3BzID0gewogCS5jYmZsb29kX21heAk9IDUwMDAwLAogCS5pcnFfY2FwYWJsZQk9IDEsCiAJLnNsb3dfZ3BzCT0gMSwKJiM0MzsJLm5taV9jYXBhYmxlCT0gMSwKIAkubmFtZQkJPSAmIzM0O3Rhc2tzLXRyYWNpbmcmIzM0OwogfTsKIApAQCAtMjY1OSwxMiAmIzQzOzI2NjgsMTMxIEBAIHN0YXRpYyBib29sIHJjdV90b3J0dXJlX29uZV9yZWFkKHN0cnVjdCB0b3J0dXJlX3JhbmRvbV9zdGF0ZSAqdHJzcCwgbG9uZyBteWlkKQogCiBzdGF0aWMgREVGSU5FX1RPUlRVUkVfUkFORE9NX1BFUkNQVShyY3VfdG9ydHVyZV90aW1lcl9yYW5kKTsKIAomIzQzOy8qCiYjNDM7ICogRXhlcmNpc2UgLSZndDtjYWxsKCkgZnJvbSBOTUkgY29udGV4dCBmb3IgZmxhdm9ycyB0aGF0IHNldCAtJmd0O25taV9jYXBhYmxlLiAgQQomIzQzOyAqIHBlci1DUFUgaGFyZHdhcmUgcGVyZiBjb3VudGVyIG92ZXJmbG93cyBpbnRvIGFuIE5NSSwgYW5kIGl0cyBoYW5kbGVyIHN1Ym1pdHMKJiM0MzsgKiBvbmUgcHJlYWxsb2NhdGVkIGNhbGxiYWNrIHZpYSAtJmd0O2NhbGwoKS4gIE9uZSBjYWxsYmFjayBpcyBpbiBmbGlnaHQgYXQgYSB0aW1lCiYjNDM7ICogKGd1YXJkZWQgYnkgYW4gYXRvbWljKSB0byBhdm9pZCBhbGxvY2F0aW5nIGluIE5NSS4gIFRoaXMgbWlycm9ycyBob3cgYSBCUEYKJiM0MzsgKiBwcm9ncmFtIHJlYWNoZXMgLSZndDtjYWxsKCkgZnJvbSBOTUkuCiYjNDM7ICovCiYjNDM7I2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUwomIzQzO3N0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIHJjdV90b3J0dXJlX25taV9hdHRyID0gewomIzQzOwkudHlwZQkJPSBQRVJGX1RZUEVfSEFSRFdBUkUsCiYjNDM7CS5jb25maWcJCT0gUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTLAomIzQzOwkuc2l6ZQkJPSBzaXplb2Yoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciksCiYjNDM7CS5waW5uZWQJCT0gMSwKJiM0MzsJLmRpc2FibGVkCT0gMSwKJiM0MzsJLmZyZXEJCT0gMSwKJiM0MzsJLnNhbXBsZV9mcmVxCT0gMTAwLAomIzQzO307CiYjNDM7CiYjNDM7LyogT25lIGluLWZsaWdodCBjYWxsYmFjayBwZXIgQ1BVOyAtJmd0O2ludXNlIGlzIHJlbGVhc2VkIGJ5IHRoZSBjYWxsYmFjay4gKi8KJiM0MztzdHJ1Y3QgcmN1X3RvcnR1cmVfbm1pX2NicyB7CiYjNDM7CXN0cnVjdCByY3VfaGVhZCByaDsKJiM0MzsJYXRvbWljX3QgaW51c2U7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnQgKipyY3VfdG9ydHVyZV9ubWlfZXZlbnRzOwomIzQzO3N0YXRpYyBpbnQgcmN1X3RvcnR1cmVfbm1pX2hwX3N0YXRlOwomIzQzO3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcmN1X3RvcnR1cmVfbm1pX2NicywgcmN1X3RvcnR1cmVfbm1pX2Nicyk7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2NiKHN0cnVjdCByY3VfaGVhZCAqcmhwKQomIzQzO3sKJiM0MzsJc3RydWN0IHJjdV90b3J0dXJlX25taV9jYnMgKnJ0bmNwID0gY29udGFpbmVyX29mKHJocCwgc3RydWN0IHJjdV90b3J0dXJlX25taV9jYnMsIHJoKTsKJiM0MzsKJiM0MzsJYXRvbWljX2xvbmdfaW5jKCZhbXA7bl9yY3VfdG9ydHVyZV9ubWlfY2IpOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7cnRuY3AtJmd0O2ludXNlLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX292ZXJmbG93KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKJiM0Mzt7CiYjNDM7CXN0cnVjdCByY3VfdG9ydHVyZV9ubWlfY2JzICpydG5jcCA9IHRoaXNfY3B1X3B0cigmYW1wO3JjdV90b3J0dXJlX25taV9jYnMpOwomIzQzOwomIzQzOwlpZiAoIWluX25taSgpKQomIzQzOwkJcmV0dXJuOwomIzQzOwlpZiAoY3VyX29wcy0mZ3Q7Y2FsbCAmYW1wOyZhbXA7ICFhdG9taWNfeGNoZygmYW1wO3J0bmNwLSZndDtpbnVzZSwgMSkpIHsKJiM0MzsJCWF0b21pY19sb25nX2luYygmYW1wO25fcmN1X3RvcnR1cmVfbm1pX2NhbGwpOwomIzQzOwkJY3VyX29wcy0mZ3Q7Y2FsbCgmYW1wO3J0bmNwLSZndDtyaCwgcmN1X3RvcnR1cmVfbm1pX2NiKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJjdV90b3J0dXJlX25taV9vbmxpbmUodW5zaWduZWQgaW50IGNwdSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKJiM0MzsKJiM0MzsJZXZlbnQgPSBwZXJmX2V2ZW50X2NyZWF0ZV9rZXJuZWxfY291bnRlcigmYW1wO3JjdV90b3J0dXJlX25taV9hdHRyLCBjcHUsIE5VTEwsCiYjNDM7CQkJCQkJIHJjdV90b3J0dXJlX25taV9vdmVyZmxvdywgTlVMTCk7CiYjNDM7CWlmIChJU19FUlIoZXZlbnQpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CXJjdV90b3J0dXJlX25taV9ldmVudHNbY3B1XSA9IGV2ZW50OwomIzQzOwlwZXJmX2V2ZW50X2VuYWJsZShldmVudCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJjdV90b3J0dXJlX25taV9vZmZsaW5lKHVuc2lnbmVkIGludCBjcHUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSByY3VfdG9ydHVyZV9ubWlfZXZlbnRzW2NwdV07CiYjNDM7CiYjNDM7CWlmIChldmVudCkgewomIzQzOwkJcmN1X3RvcnR1cmVfbm1pX2V2ZW50c1tjcHVdID0gTlVMTDsKJiM0MzsJCXBlcmZfZXZlbnRfZGlzYWJsZShldmVudCk7CiYjNDM7CQlwZXJmX2V2ZW50X3JlbGVhc2Vfa2VybmVsKGV2ZW50KTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBEcml2ZSB0aGUgY291bnRlcnMgZnJvbSBDUFUtaG90cGx1ZyBjYWxsYmFja3Mgc28gdGhhdCBjb3ZlcmFnZSBzdXJ2aXZlcyB0aGUKJiM0MzsgKiBvbm9mZiB0ZXN0aW5nIHRoYXQgbW9zdCBzY2VuYXJpb3MgcnVuLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9pbml0KHZvaWQpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIW5taV9jYWxscyB8fCAhY3VyX29wcy0mZ3Q7bm1pX2NhcGFibGUgfHwgIWN1cl9vcHMtJmd0O2NhbGwpCiYjNDM7CQlyZXR1cm47CiYjNDM7CXJjdV90b3J0dXJlX25taV9ldmVudHMgPSBrY2FsbG9jKG5yX2NwdV9pZHMsIHNpemVvZigqcmN1X3RvcnR1cmVfbm1pX2V2ZW50cyksCiYjNDM7CQkJCQkgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcmN1X3RvcnR1cmVfbm1pX2V2ZW50cykKJiM0MzsJCXJldHVybjsKJiM0MzsJcmV0ID0gY3B1aHBfc2V0dXBfc3RhdGUoQ1BVSFBfQVBfT05MSU5FX0RZTiwgJiMzNDtyY3V0b3J0dXJlL25taTpvbmxpbmUmIzM0OywKJiM0MzsJCQkJcmN1X3RvcnR1cmVfbm1pX29ubGluZSwgcmN1X3RvcnR1cmVfbm1pX29mZmxpbmUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkgewomIzQzOwkJa2ZyZWUocmN1X3RvcnR1cmVfbm1pX2V2ZW50cyk7CiYjNDM7CQlyY3VfdG9ydHVyZV9ubWlfZXZlbnRzID0gTlVMTDsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwlyY3VfdG9ydHVyZV9ubWlfaHBfc3RhdGUgPSByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9jbGVhbnVwKHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoIXJjdV90b3J0dXJlX25taV9ldmVudHMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWlmIChyY3VfdG9ydHVyZV9ubWlfaHBfc3RhdGUgJmd0OyAwKSB7CiYjNDM7CQljcHVocF9yZW1vdmVfc3RhdGUocmN1X3RvcnR1cmVfbm1pX2hwX3N0YXRlKTsKJiM0MzsJCXJjdV90b3J0dXJlX25taV9ocF9zdGF0ZSA9IDA7CiYjNDM7CX0KJiM0MzsJa2ZyZWUocmN1X3RvcnR1cmVfbm1pX2V2ZW50cyk7CiYjNDM7CXJjdV90b3J0dXJlX25taV9ldmVudHMgPSBOVUxMOwomIzQzOwlpZiAoIWF0b21pY19sb25nX3JlYWQoJmFtcDtuX3JjdV90b3J0dXJlX25taV9jYWxsKSkKJiM0MzsJCXByX2FsZXJ0KCYjMzQ7JXM6IG5taV9jYWxscyBzZXQgYnV0IG5vIC0mZ3Q7Y2FsbCgpIGlzc3VlZCBmcm9tIE5NSTogbm90IHN1cHBvcnRlZCBoZXJlLlxuJiMzNDssCiYjNDM7CQkJIF9fZnVuY19fKTsKJiM0Mzt9CiYjNDM7I2Vsc2UgLyogI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUyAqLwomIzQzO3N0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9pbml0KHZvaWQpIHsgfQomIzQzO3N0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9jbGVhbnVwKHZvaWQpIHsgfQomIzQzOyNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTICovCiYjNDM7CiAvKgogICogUkNVIHRvcnR1cmUgcmVhZGVyIGZyb20gdGltZXIgaGFuZGxlci4gIERlcmVmZXJlbmNlcyByY3VfdG9ydHVyZV9jdXJyZW50LAogICogaW5jcmVtZW50aW5nIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgb2YgdGhlIHBpcGVsaW5lIGFycmF5LiAgVGhlCiAgKiBjb3VudGVyIGluIHRoZSBlbGVtZW50IHNob3VsZCBuZXZlciBiZSBncmVhdGVyIHRoYW4gMSwgb3RoZXJ3aXNlLCB0aGUKICAqIFJDVSBpbXBsZW1lbnRhdGlvbiBpcyBicm9rZW4uCiAgKi8KJiM0MzsKIHN0YXRpYyB2b2lkIHJjdV90b3J0dXJlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp1bnVzZWQpCiB7CiAJV0FSTl9PTl9PTkNFKCFpbl9zZXJ2aW5nX3NvZnRpcnEoKSk7CkBAIC0zMDQ3LDYgJiM0MzszMTc1LDkgQEAgcmN1X3RvcnR1cmVfc3RhdHNfcHJpbnQodm9pZCkKIAkJZGF0YV9yYWNlKG5fYmFycmllcl9hdHRlbXB0cyksCiAJCWRhdGFfcmFjZShuX3JjdV90b3J0dXJlX2JhcnJpZXJfZXJyb3IpKTsKIAlwcl9jb250KCYjMzQ7cmVhZC1leGl0czogJWxkICYjMzQ7LCBkYXRhX3JhY2Uobl9yZWFkX2V4aXRzKSk7IC8vIFN0YXRpc3RpYy4KJiM0MzsJcHJfY29udCgmIzM0O25taS1jYWxsczogJWxkIG5taS1jYnM6ICVsZCAmIzM0OywKJiM0MzsJCWF0b21pY19sb25nX3JlYWQoJmFtcDtuX3JjdV90b3J0dXJlX25taV9jYWxsKSwKJiM0MzsJCWF0b21pY19sb25nX3JlYWQoJmFtcDtuX3JjdV90b3J0dXJlX25taV9jYikpOwogCXByX2NvbnQoJiMzNDtub2NiLXRvZ2dsZXM6ICVsZDolbGQgJiMzNDssCiAJCWF0b21pY19sb25nX3JlYWQoJmFtcDtuX25vY2Jfb2ZmbG9hZCksIGF0b21pY19sb25nX3JlYWQoJmFtcDtuX25vY2JfZGVvZmZsb2FkKSk7CiAJcHJfY29udCgmIzM0O2dwd3JhcHM6ICVsZFxuJiMzNDssIG5fZ3B3cmFwcyk7CkBAIC0zMTk1LDcgJiM0MzszMzI2LDcgQEAgcmN1X3RvcnR1cmVfcHJpbnRfbW9kdWxlX3Bhcm1zKHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgKmN1cl9vcHMsIGNvbnN0IGNoYXIgKnRhZykKIAkJICYjMzQ7cmVhZF9leGl0X2RlbGF5PSVkIHJlYWRfZXhpdF9idXJzdD0lZCAmIzM0OwogCQkgJiMzNDtyZWFkZXJfZmxhdm9yPSV4ICYjMzQ7CiAJCSAmIzM0O25vY2JzX250aHJlYWRzPSVkIG5vY2JzX3RvZ2dsZT0lZCAmIzM0OwotCQkgJiMzNDt0ZXN0X25taXM9JWQgJiMzNDsKJiM0MzsJCSAmIzM0O3Rlc3Rfbm1pcz0lZCBubWlfY2FsbHM9JWQgJiMzNDsKIAkJICYjMzQ7cHJlZW1wdF9kdXJhdGlvbj0lZCBwcmVlbXB0X2ludGVydmFsPSVkIG5fdXBfZG93bj0lZFxuJiMzNDssCiAJCSB0b3J0dXJlX3R5cGUsIHRhZywgbnJlYWxyZWFkZXJzLCBud3JpdGVycywgbnJlYWxmYWtld3JpdGVycywKIAkJIHN0YXRfaW50ZXJ2YWwsIHZlcmJvc2UsIHRlc3Rfbm9faWRsZV9oeiwgc2h1ZmZsZV9pbnRlcnZhbCwKQEAgLTMyMDksNyAmIzQzOzMzNDAsNyBAQCByY3VfdG9ydHVyZV9wcmludF9tb2R1bGVfcGFybXMoc3RydWN0IHJjdV90b3J0dXJlX29wcyAqY3VyX29wcywgY29uc3QgY2hhciAqdGFnKQogCQkgcmVhZF9leGl0X2RlbGF5LCByZWFkX2V4aXRfYnVyc3QsCiAJCSByZWFkZXJfZmxhdm9yLAogCQkgbm9jYnNfbnRocmVhZHMsIG5vY2JzX3RvZ2dsZSwKLQkJIHRlc3Rfbm1pcywKJiM0MzsJCSB0ZXN0X25taXMsIG5taV9jYWxscywKIAkJIHByZWVtcHRfZHVyYXRpb24sIHByZWVtcHRfaW50ZXJ2YWwsIG5fdXBfZG93bik7CiB9CiAKQEAgLTQyODMsNiAmIzQzOzQ0MTQsNyBAQCByY3VfdG9ydHVyZV9jbGVhbnVwKHZvaWQpCiAJaW50IGk7CiAKIAlpZiAodG9ydHVyZV9jbGVhbnVwX2JlZ2luKCkpIHsKJiM0MzsJCXJjdV90b3J0dXJlX25taV9jbGVhbnVwKCk7CiAJCWlmIChjdXJfb3BzLSZndDtjYl9iYXJyaWVyICE9IE5VTEwpIHsKIAkJCXByX2luZm8oJiMzNDslczogSW52b2tpbmcgJXBTKCkuXG4mIzM0OywgX19mdW5jX18sIGN1cl9vcHMtJmd0O2NiX2JhcnJpZXIpOwogCQkJY3VyX29wcy0mZ3Q7Y2JfYmFycmllcigpOwpAQCAtNDMyNSw2ICYjNDM7NDQ1Nyw4IEBAIHJjdV90b3J0dXJlX2NsZWFudXAodm9pZCkKIAkJa2ZyZWUocmVhZGVyX3Rhc2tzKTsKIAkJcmVhZGVyX3Rhc2tzID0gTlVMTDsKIAl9CiYjNDM7CS8qIERpc2FibGUgdGhlIHBlcmYgY291bnRlcnMgKGFuZCB0aHVzIHRoZSBOTUkgLSZndDtjYWxsKCkgZmlyaW5nKSBub3cuICovCiYjNDM7CXJjdV90b3J0dXJlX25taV9jbGVhbnVwKCk7CiAJa2ZyZWUocmN1X3RvcnR1cmVfcmVhZGVyX21iY2hrKTsKIAlyY3VfdG9ydHVyZV9yZWFkZXJfbWJjaGsgPSBOVUxMOwogCkBAIC00MzU0LDYgJiM0Mzs0NDg4LDIwIEBAIHJjdV90b3J0dXJlX2NsZWFudXAodm9pZCkKIAkJcHJfaW5mbygmIzM0OyVzOiBJbnZva2luZyAlcFMoKS5cbiYjMzQ7LCBfX2Z1bmNfXywgY3VyX29wcy0mZ3Q7Y2JfYmFycmllcik7CiAJCWN1cl9vcHMtJmd0O2NiX2JhcnJpZXIoKTsKIAl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIGNiX2JhcnJpZXIoKSBhYm92ZSBkcmFpbmVkIGV2ZXJ5IGRlZmVycmVkIE5NSSAtJmd0O2NhbGwoKSBjYWxsYmFjaywgc28gdGhlCiYjNDM7CSAqIGNvdW50IGlzc3VlZCBmcm9tIE5NSSBtdXN0IGVxdWFsIHRoZSBjb3VudCBpbnZva2VkOyBhIG1pc21hdGNoIG1lYW5zIGEKJiM0MzsJICogY2FsbGJhY2sgd2FzIGxvc3QuCiYjNDM7CSAqLwomIzQzOwlpZiAoYXRvbWljX2xvbmdfcmVhZCgmYW1wO25fcmN1X3RvcnR1cmVfbm1pX2NhbGwpICE9CiYjNDM7CSAgICBhdG9taWNfbG9uZ19yZWFkKCZhbXA7bl9yY3VfdG9ydHVyZV9ubWlfY2IpKSB7CiYjNDM7CQlwcl9hbGVydCgmIzM0OyVzOiBOTUkgLSZndDtjYWxsKCkgbG9zdCBhIGNhbGxiYWNrOiBpc3N1ZWQgJWxkIGludm9rZWQgJWxkXG4mIzM0OywKJiM0MzsJCQkgX19mdW5jX18sIGF0b21pY19sb25nX3JlYWQoJmFtcDtuX3JjdV90b3J0dXJlX25taV9jYWxsKSwKJiM0MzsJCQkgYXRvbWljX2xvbmdfcmVhZCgmYW1wO25fcmN1X3RvcnR1cmVfbm1pX2NiKSk7CiYjNDM7CQlhdG9taWNfaW5jKCZhbXA7bl9yY3VfdG9ydHVyZV9lcnJvcik7CiYjNDM7CX0KJiM0MzsKIAlpZiAoY3VyX29wcy0mZ3Q7Y2xlYW51cCAhPSBOVUxMKQogCQljdXJfb3BzLSZndDtjbGVhbnVwKCk7CiAKQEAgLTQ3ODYsNiAmIzQzOzQ5MzQsOCBAQCByY3VfdG9ydHVyZV9pbml0KHZvaWQpCiAJCWZpcnN0ZXJyID0gLUVOT01FTTsKIAkJZ290byB1bndpbmQ7CiAJfQomIzQzOwkvKiBBcm0gdGhlIHBlci1DUFUgcGVyZiBjb3VudGVycyB0aGF0IGRyaXZlIC0mZ3Q7Y2FsbCgpIGZyb20gTk1JLiAqLwomIzQzOwlyY3VfdG9ydHVyZV9ubWlfaW5pdCgpOwogCWZvciAoaSA9IDA7IGkgJmx0OyBucmVhbHJlYWRlcnM7IGkmIzQzOyYjNDM7KSB7CiAJCXJjdV90b3J0dXJlX3JlYWRlcl9tYmNoa1tpXS5ydGNfY2hrcmRyID0gLTE7CiAJCWZpcnN0ZXJyID0gdG9ydHVyZV9jcmVhdGVfa3RocmVhZChyY3VfdG9ydHVyZV9yZWFkZXIsICh2b2lkICopaSwKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3Uvc3JjdXRpbnkuYyBiL2tlcm5lbC9yY3Uvc3JjdXRpbnkuYwppbmRleCA1NThiYThkMzE2ZGI2Li43YTdjMWNlZjQzZTEzIDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1L3NyY3V0aW55LmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS9zcmN1dGlueS5jCkBAIC0xMCw2ICYjNDM7MTAsNyBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvZXhwb3J0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaXJxX3dvcmsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbGxpc3QuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tdXRleC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3ByZWVtcHQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9yY3VwZGF0ZV93YWl0LmgmZ3Q7CkBAIC0yOSw2ICYjNDM7MzAsOCBAQCBleHRlcm4gaW50IHJjdV9zY2hlZHVsZXJfYWN0aXZlOwogc3RhdGljIExJU1RfSEVBRChzcmN1X2Jvb3RfbGlzdCk7CiBzdGF0aWMgYm9vbCBzcmN1X2luaXRfZG9uZTsKIAomIzQzO3N0YXRpYyB2b2lkIF9fc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgYm9vbCBndWFyZCk7CiYjNDM7CiBzdGF0aWMgaW50IGluaXRfc3JjdV9zdHJ1Y3RfZmllbGRzKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKQogewogCXNzcC0mZ3Q7c3JjdV9sb2NrX25lc3RpbmdbMF0gPSAwOwpAQCAtNDMsNiAmIzQzOzQ2LDggQEAgc3RhdGljIGludCBpbml0X3NyY3Vfc3RydWN0X2ZpZWxkcyhzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCkKIAlJTklUX1dPUksoJmFtcDtzc3AtJmd0O3NyY3Vfd29yaywgc3JjdV9kcml2ZV9ncCk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtzc3AtJmd0O3NyY3Vfd29yay5lbnRyeSk7CiAJaW5pdF9pcnFfd29yaygmYW1wO3NzcC0mZ3Q7c3JjdV9pcnFfd29yaywgc3JjdV90aW55X2lycV93b3JrKTsKJiM0MzsJaW5pdF9sbGlzdF9oZWFkKCZhbXA7c3NwLSZndDtkZWZlcl9jYnMpOwomIzQzOwlzc3AtJmd0O2RlZmVyX2l3ID0gSVJRX1dPUktfSU5JVF9IQVJEKHNyY3VfZGVmZXJfZHJhaW4pOwogCXJldHVybiAwOwogfQogCkBAIC04Niw2ICYjNDM7OTEsMTEgQEAgRVhQT1JUX1NZTUJPTF9HUEwoaW5pdF9zcmN1X3N0cnVjdF9nZW5lcmljKTsKIHZvaWQgY2xlYW51cF9zcmN1X3N0cnVjdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCkKIHsKIAlXQVJOX09OKHNyY3VfcmVhZGVyc19hY3RpdmUoc3NwKSk7CiYjNDM7CS8qIFJlLWlzc3VlIGFueSBkZWZlcnJlZCBjYWxsYmFja3MsIHRoZW4gd2FpdCBvdXQgLSZndDtkZWZlcl9pdyBiZWZvcmUgaXQgaXMgZnJlZWQuICovCiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKSB7CiYjNDM7CQlfX3NyY3VfZGVmZXJfZHJhaW4oc3NwLCBmYWxzZSk7CiYjNDM7CQlpcnFfd29ya19zeW5jKCZhbXA7c3NwLSZndDtkZWZlcl9pdyk7CiYjNDM7CX0KIAlpcnFfd29ya19zeW5jKCZhbXA7c3NwLSZndDtzcmN1X2lycV93b3JrKTsKIAlmbHVzaF93b3JrKCZhbXA7c3NwLSZndDtzcmN1X3dvcmspOwogCVdBUk5fT04oc3NwLSZndDtzcmN1X2dwX3J1bm5pbmcpOwpAQCAtMjEzLDExICYjNDM7MjIzLDExIEBAIHN0YXRpYyB2b2lkIHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKQogfQogCiAvKgotICogRW5xdWV1ZSBhbiBTUkNVIGNhbGxiYWNrIG9uIHRoZSBzcGVjaWZpZWQgc3JjdV9zdHJ1Y3Qgc3RydWN0dXJlLAotICogaW5pdGlhdGluZyBncmFjZS1wZXJpb2QgcHJvY2Vzc2luZyBpZiBpdCBpcyBub3QgYWxyZWFkeSBydW5uaW5nLgomIzQzOyAqIEVucXVldWUgQHJocCBvbiB0aGUgY2FsbGJhY2sgbGlzdC4gIEFsc28gY2FsbGVkIGJ5IHNyY3VfZGVmZXJfZHJhaW4oKSB0bwomIzQzOyAqIHJlLWlzc3VlIGEgZGVmZXJyZWQgY2FsbGJhY2ssIHNvIGl0IG11c3Qgbm90IHJlLWNoZWNrIHRoZSBkZWZlcnJhbCBjb25kaXRpb24uCiAgKi8KLXZvaWQgY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCwKLQkgICAgICAgcmN1X2NhbGxiYWNrX3QgZnVuYykKJiM0MztzdGF0aWMgdm9pZCBzcmN1X2RvX2VucXVldWUoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLAomIzQzOwkJCSAgICByY3VfY2FsbGJhY2tfdCBmdW5jKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTIzMSw2ICYjNDM7MjQxLDU4IEBAIHZvaWQgY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCwKIAlzcmN1X2dwX3N0YXJ0X2lmX25lZWRlZChzc3ApOwogCXByZWVtcHRfZW5hYmxlKCk7CiB9CiYjNDM7CiYjNDM7LyogU2V0IHdoaWxlIHNyY3VfZGVmZXJfZHJhaW4oKSByZS1pc3N1ZXMsIHRvIGNhdGNoIGEgcmUtZW50cmFudCBjYWxsX3NyY3UoKS4gKi8KJiM0MztzdGF0aWMgYm9vbCBzcmN1X2RlZmVyX2RyYWluaW5nOwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIF9fc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgYm9vbCBndWFyZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsbGlzdF9ub2RlICpub2RlLCAqbmV4dDsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKJiM0MzsJLyogQ2FsbGJhY2tzIGFyZSB1bm9yZGVyZWQsIHNvIGRyYWluIGluIGxsaXN0IG9yZGVyIHdpdGhvdXQgcmV2ZXJzaW5nLiAqLwomIzQzOwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiYjNDM7CWlmIChndWFyZCkKJiM0MzsJCVdSSVRFX09OQ0Uoc3JjdV9kZWZlcl9kcmFpbmluZywgdHJ1ZSk7CiYjNDM7CWxsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgbmV4dCwgbGxpc3RfZGVsX2FsbCgmYW1wO3NzcC0mZ3Q7ZGVmZXJfY2JzKSkgewomIzQzOwkJc3RydWN0IHJjdV9oZWFkICpyaHAgPSAoc3RydWN0IHJjdV9oZWFkICopbm9kZTsKJiM0MzsKJiM0MzsJCXJocC0mZ3Q7bmV4dCA9IE5VTEw7CiYjNDM7CQlzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIHJocC0mZ3Q7ZnVuYyk7CiYjNDM7CX0KJiM0MzsJaWYgKGd1YXJkKQomIzQzOwkJV1JJVEVfT05DRShzcmN1X2RlZmVyX2RyYWluaW5nLCBmYWxzZSk7CiYjNDM7CWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogT25seSB0aGUgaXJxX3dvcmsgZHJhaW4gY2FuIGJlIHJlLWZlZCBieSBpdHMgb3duIHJlLWlzc3VlOyBzZWUgVHJlZSBTUkNVLiAqLwomIzQzO3ZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KQomIzQzO3sKJiM0MzsJX19zcmN1X2RlZmVyX2RyYWluKGNvbnRhaW5lcl9vZihpdywgc3RydWN0IHNyY3Vfc3RydWN0LCBkZWZlcl9pdyksIHRydWUpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChzcmN1X2RlZmVyX2RyYWluKTsKJiM0MzsKJiM0Mzt2b2lkIGNhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsCiYjNDM7CSAgICAgICByY3VfY2FsbGJhY2tfdCBmdW5jKQomIzQzO3sKJiM0MzsJaWYgKHNob3VsZF9yY3VfZGVmZXIoKSkgewomIzQzOwkJLyogQSByZS1lbnRyYW50IGNhbGxfc3JjdSgpIGR1cmluZyB0aGUgZHJhaW4gd291bGQgbGl2ZWxvY2sgaXQuICovCiYjNDM7CQlpZiAoUkVBRF9PTkNFKHNyY3VfZGVmZXJfZHJhaW5pbmcpICZhbXA7JmFtcDsgIWluX25taSgpKSB7CiYjNDM7CQkJV0FSTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSksCiYjNDM7CQkJCSAgJiMzNDtjYWxsX3NyY3UoKSByZS1lbnRlcmVkIGR1cmluZyBjYWxsYmFjayBkcmFpbjsgbGVha2luZyBjYWxsYmFja1xuJiMzNDspOwomIzQzOwkJCXJldHVybjsKJiM0MzsJCX0KJiM0MzsJCXJocC0mZ3Q7ZnVuYyA9IGZ1bmM7CiYjNDM7CQlpZiAobGxpc3RfYWRkKChzdHJ1Y3QgbGxpc3Rfbm9kZSAqKXJocCwgJmFtcDtzc3AtJmd0O2RlZmVyX2NicykpCiYjNDM7CQkJaXJxX3dvcmtfcXVldWUoJmFtcDtzc3AtJmd0O2RlZmVyX2l3KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBBbiBOTUkgcmVhY2hpbmcgaGVyZSBlbnRlcmVkIHdpdGggaXJxcyBlbmFibGVkLCBzbyB0aGUgZW5xdWV1ZSBjYW4gcmFjZS4gKi8KJiM0MzsJV0FSTl9PTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSkgJmFtcDsmYW1wOyBpbl9ubWkoKSk7CiYjNDM7CiYjNDM7CXNyY3VfZG9fZW5xdWV1ZShzc3AsIHJocCwgZnVuYyk7CiYjNDM7fQogRVhQT1JUX1NZTUJPTF9HUEwoY2FsbF9zcmN1KTsKIAogLyoKQEAgLTI2MCw2ICYjNDM7MzIyLDE1IEBAIHZvaWQgc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCkKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3NyY3UpOwogCiYjNDM7LyogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcywgdGhlbiB3YWl0IGZvciBhbGwgaW4tZmxpZ2h0IG9uZXMuICovCiYjNDM7dm9pZCBzcmN1X2JhcnJpZXIoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApCiYjNDM7ewomIzQzOwlpZiAoSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSkKJiM0MzsJCV9fc3JjdV9kZWZlcl9kcmFpbihzc3AsIGZhbHNlKTsKJiM0MzsJc3luY2hyb25pemVfc3JjdShzc3ApOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChzcmN1X2JhcnJpZXIpOwomIzQzOwogLyoKICAqIGdldF9zdGF0ZV9zeW5jaHJvbml6ZV9zcmN1IC0gUHJvdmlkZSBhbiBlbmQtb2YtZ3JhY2UtcGVyaW9kIGNvb2tpZQogICovCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3NyY3V0cmVlLmMgYi9rZXJuZWwvcmN1L3NyY3V0cmVlLmMKaW5kZXggMzA0MTEyNjc0ZThhMi4uMzVmZmFjZTUxZDUwYiAxMDA2NDQKLS0tIGEva2VybmVsL3JjdS9zcmN1dHJlZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9yY3Uvc3JjdXRyZWUuYwpAQCAtMjAsNiAmIzQzOzIwLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9wZXJjcHUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wcmVlbXB0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaXJxX3dvcmsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbGxpc3QuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9yY3VwZGF0ZV93YWl0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zbXAuaCZndDsKQEAgLTc5LDYgJiM0Mzs4MCw0NSBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX3NyY3Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIHN0YXRpYyB2b2lkIHNyY3VfaXJxX3dvcmsoc3RydWN0IGlycV93b3JrICp3b3JrKTsKIHN0YXRpYyB2b2lkIHNyY3VfZGVsYXlfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpOwogCiYjNDM7c3RydWN0IHNyY3VfZGVmZXI7CiYjNDM7c3RhdGljIHZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KTsKJiM0MztzdGF0aWMgdm9pZCBfX3NyY3VfZGVmZXJfZHJhaW4oc3RydWN0IHNyY3VfZGVmZXIgKnNuZHAsIGJvb2wgZ3VhcmQpOwomIzQzOwomIzQzOy8qCiYjNDM7ICogUGVyLUNQVSBjYWxsX3NyY3UoKSBkZWZlcnJhbCBzdGF0ZSwgc2hhcmVkIGJ5IGV2ZXJ5IHNyY3Vfc3RydWN0LiAgQSBkZWZlcnJlZAomIzQzOyAqIGNhbGxiYWNrIGlzIHN0YWdlZCBvbiBpdHMgc3JjdV9kYXRhJiMzOTtzIC0mZ3Q7ZGVmZXJfY2JzOyB0aGF0IHNyY3VfZGF0YSBpcyBjaGFpbmVkCiYjNDM7ICogdmlhIC0mZ3Q7ZGVmZXJfbGluayBvbnRvIC0mZ3Q7bGlzdCwgd2hpY2ggdGhlIGlycV93b3JrIHdhbGtzLgomIzQzOyAqLwomIzQzO3N0cnVjdCBzcmN1X2RlZmVyIHsKJiM0MzsJc3RydWN0IGxsaXN0X2hlYWQJbGlzdDsKJiM0MzsJc3RydWN0IGlycV93b3JrCQlpdzsKJiM0MzsJcmF3X3NwaW5sb2NrX3QJCWxvY2s7CiYjNDM7CWJvb2wJCQlkcmFpbmluZzsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc3JjdV9kZWZlciwgc3JjdV9kZWZlcikgPSB7CiYjNDM7CS5sb2NrID0gX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VEKHNyY3VfZGVmZXIubG9jayksCiYjNDM7CS5pdyA9IElSUV9XT1JLX0lOSVRfSEFSRChzcmN1X2RlZmVyX2RyYWluKSwKJiM0Mzt9OwomIzQzOwomIzQzOy8qCiYjNDM7ICogRmx1c2ggcGVuZGluZyBkZWZlcnJlZCBjYWxsYmFja3Mgc28gYSBmb2xsb3dpbmcgc3JjdV9iYXJyaWVyKCkgd2FpdHMgZm9yIHRoZW0uCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgc3JjdV9kZWZlcl9mbHVzaCh2b2lkKQomIzQzO3sKJiM0MzsJaW50IGNwdTsKJiM0MzsKJiM0MzsJaWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiYjNDM7CQlzdHJ1Y3Qgc3JjdV9kZWZlciAqc25kcCA9ICZhbXA7cGVyX2NwdShzcmN1X2RlZmVyLCBjcHUpOwomIzQzOwomIzQzOwkJaWYgKCFsbGlzdF9lbXB0eSgmYW1wO3NuZHAtJmd0O2xpc3QpKQomIzQzOwkJCV9fc3JjdV9kZWZlcl9kcmFpbihzbmRwLCBmYWxzZSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiAvKgogICogSW5pdGlhbGl6ZSBTUkNVIHBlci1DUFUgZGF0YS4gIE5vdGUgdGhhdCBzdGF0aWNhbGx5IGFsbG9jYXRlZAogICogc3JjdV9zdHJ1Y3Qgc3RydWN0dXJlcyBtaWdodCBhbHJlYWR5IGhhdmUgc3JjdV9yZWFkX2xvY2soKSBhbmQKQEAgLTEwNyw2ICYjNDM7MTQ3LDExIEBAIHN0YXRpYyB2b2lkIGluaXRfc3JjdV9zdHJ1Y3RfZGF0YShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCkKIAkJc2RwLSZndDtjcHUgPSBjcHU7CiAJCUlOSVRfV09SSygmYW1wO3NkcC0mZ3Q7d29yaywgc3JjdV9pbnZva2VfY2FsbGJhY2tzKTsKIAkJdGltZXJfc2V0dXAoJmFtcDtzZHAtJmd0O2RlbGF5X3dvcmssIHNyY3VfZGVsYXlfdGltZXIsIDApOwomIzQzOwkJLyoKJiM0MzsJCSAqIC0mZ3Q7ZGVmZXJfY2JzLCAtJmd0O2RlZmVyX2xpbmsgYW5kIC0mZ3Q7ZGVmZXJfZXhwIGFyZSB2YWxpZCB3aGVuIHplcm9lZAomIzQzOwkJICogYW5kIGFyZSBub3QgcmVpbml0aWFsaXplZCBoZXJlLCBsZXN0IHdlIGNsb2JiZXIgY2FsbGJhY2tzIGEKJiM0MzsJCSAqIHJlZW50cmFudCBjYWxsX3NyY3UoKSBhbHJlYWR5IHN0YWdlZC4gIFNlZSBfX2NhbGxfc3JjdSgpLgomIzQzOwkJICovCiAJCXNkcC0mZ3Q7c3NwID0gc3NwOwogCX0KIH0KQEAgLTY5NSw3ICYjNDM7NzQwLDEyIEBAIHZvaWQgY2xlYW51cF9zcmN1X3N0cnVjdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCkKIAkJcmV0dXJuOyAvKiBKdXN0IGxlYWsgaXQhICovCiAJaWYgKFdBUk5fT04oc3JjdV9yZWFkZXJzX2FjdGl2ZShzc3ApKSkKIAkJcmV0dXJuOyAvKiBKdXN0IGxlYWsgaXQhICovCi0JLyogV2FpdCBmb3IgaXJxX3dvcmsgdG8gZmluaXNoIGZpcnN0IGFzIGl0IG1heSBxdWV1ZSBhIG5ldyB3b3JrLiAqLwomIzQzOwkvKgomIzQzOwkgKiBEcmFpbiBkZWZlcnJlZCBjYWxsYmFja3MgYmVmb3JlIHN5bmNpbmcgLSZndDtpcnFfd29yazogcmUtaXNzdWluZyBvbmUgY2FuCiYjNDM7CSAqIHN0YXJ0IGEgZ3JhY2UgcGVyaW9kIGFuZCByZS1xdWV1ZSAtJmd0O2lycV93b3JrLCB3aGljaCB0aGVuIHNjaGVkdWxlcwomIzQzOwkgKiAtJmd0O3dvcmssIHNvIGJvdGggbXVzdCBiZSB3YWl0ZWQgb3V0IGFmdGVyIHRoZSBkcmFpbi4KJiM0MzsJICovCiYjNDM7CXNyY3VfZGVmZXJfZmx1c2goKTsKIAlpcnFfd29ya19zeW5jKCZhbXA7c3VwLSZndDtpcnFfd29yayk7CiAJZmx1c2hfZGVsYXllZF93b3JrKCZhbXA7c3VwLSZndDt3b3JrKTsKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CkBAIC0xNDEwLDggJiM0MzsxNDYwLDggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsCiAgKiBzcmN1X3JlYWRfbG9jaygpLCBhbmQgc3JjdV9yZWFkX3VubG9jaygpIHRoYXQgYXJlIGFsbCBwYXNzZWQgdGhlIHNhbWUKICAqIHNyY3Vfc3RydWN0IHN0cnVjdHVyZS4KICAqLwotc3RhdGljIHZvaWQgX19jYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLAotCQkJcmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBkb19ub3JtKQomIzQzO3N0YXRpYyB2b2lkIHNyY3VfZG9fZW5xdWV1ZShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsCiYjNDM7CQkJICAgIHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgZG9fbm9ybSkKIHsKIAlpZiAoZGVidWdfcmN1X2hlYWRfcXVldWUocmhwKSkgewogCQkvKiBQcm9iYWJsZSBkb3VibGUgY2FsbF9zcmN1KCksIHNvIGxlYWsgdGhlIGNhbGxiYWNrLiAqLwpAQCAtMTQyMyw2ICYjNDM7MTQ3MywxMTEgQEAgc3RhdGljIHZvaWQgX19jYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLAogCSh2b2lkKXNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHNzcCwgcmhwLCBkb19ub3JtKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogVGhlIHNyY3VfY2JsaXN0IGFuZCBzcmN1X25vZGUgdHJlZSBhcmUgb25seSBhY2Nlc3NlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQKJiM0MzsgKiAoc3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoKSBlbnF1ZXVlcyB1bmRlciByYXdfc3Bpbl9sb2NrX2lycXNhdmUoKSBhbmQgbWF5IHdhbGsKJiM0MzsgKiB0aGUgdHJlZSkuICBMaWtlIGNhbGxfcmN1KCksIF9fY2FsbF9zcmN1KCkgZGVmZXJzIHdoZW4gaW50ZXJydXB0cyBhcmUgYWxyZWFkeQomIzQzOyAqIGRpc2FibGVkLCBzbyBhIHJlLWVudHJhbnQgY2FsbF9zcmN1KCkgLS0gZS5nLiBjYWxsX3JjdV90YXNrc190cmFjZSgpIGZyb20gYQomIzQzOyAqIEJQRiBwcm9ncmFtIC0tIGNhbm5vdCBjb3JydXB0IHRoZSBsaXN0IG9yIGRlYWRsb2NrLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIF9fY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCwKJiM0MzsJCQlyY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGRvX25vcm0pCiYjNDM7ewomIzQzOwlpZiAoc2hvdWxkX3JjdV9kZWZlcigpKSB7CiYjNDM7CQlzdHJ1Y3Qgc3JjdV9kZWZlciAqc25kcCA9IHRoaXNfY3B1X3B0cigmYW1wO3NyY3VfZGVmZXIpOwomIzQzOwkJc3RydWN0IHNyY3VfZGF0YSAqc2RwOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIEluc3RydW1lbnRhdGlvbiBvbiB0aGUgZW5xdWV1ZSBwYXRoIGNhbiByZS1lbnRlciBoZXJlIGZyb20KJiM0MzsJCSAqIGluc2lkZSBzcmN1X2RlZmVyX2RyYWluKCkuICBSZS1xdWV1aW5nIHdvdWxkIGxpdmVsb2NrIHRoZQomIzQzOwkJICogZHJhaW4sIHNvIGRyb3AgdGhlIGNhbGxiYWNrOyBhbiBOTUkgY2Fubm90IGxvb3AsIHNvIGxldCBpdCBpbi4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKFJFQURfT05DRShzbmRwLSZndDtkcmFpbmluZykgJmFtcDsmYW1wOyAhaW5fbm1pKCkpIHsKJiM0MzsJCQlXQVJOX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSwKJiM0MzsJCQkJICAmIzM0O2NhbGxfc3JjdSgpIHJlLWVudGVyZWQgZHVyaW5nIGNhbGxiYWNrIGRyYWluOyBsZWFraW5nIGNhbGxiYWNrXG4mIzM0Oyk7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQomIzQzOwkJc2RwID0gdGhpc19jcHVfcHRyKHNzcC0mZ3Q7c2RhKTsKJiM0MzsJCXJocC0mZ3Q7ZnVuYyA9IGZ1bmM7CiYjNDM7CQlpZiAoIWRvX25vcm0pCiYjNDM7CQkJV1JJVEVfT05DRShzZHAtJmd0O2RlZmVyX2V4cCwgdHJ1ZSk7CiYjNDM7CQlpZiAobGxpc3RfYWRkKChzdHJ1Y3QgbGxpc3Rfbm9kZSAqKXJocCwgJmFtcDtzZHAtJmd0O2RlZmVyX2NicykpIHsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIENoYWluIHRoaXMgc3JjdV9kYXRhIGZvciB0aGUgZHJhaW4uICAtJmd0O3NzcCBtdXN0IGJlCiYjNDM7CQkJICogcHVibGlzaGVkIGhlcmU6IGRlZmVycmFsIHNraXBzIGNoZWNrX2luaXRfc3JjdV9zdHJ1Y3QoKSwKJiM0MzsJCQkgKiBzbyBvbiBhIG5ldmVyLWluaXRpYWxpemVkIHN0YXRpYyBzcmN1X3N0cnVjdCB0aGUKJiM0MzsJCQkgKiBzdGF0aWNhbGx5IHplcm9lZCAtJmd0O3NkYSBzdGlsbCBoYXMgYSBOVUxMIC0mZ3Q7c3NwLgomIzQzOwkJCSAqLwomIzQzOwkJCXNkcC0mZ3Q7c3NwID0gc3NwOwomIzQzOwkJCWlmIChsbGlzdF9hZGQoJmFtcDtzZHAtJmd0O2RlZmVyX2xpbmssICZhbXA7c25kcC0mZ3Q7bGlzdCkpCiYjNDM7CQkJCWlycV93b3JrX3F1ZXVlKCZhbXA7c25kcC0mZ3Q7aXcpOwomIzQzOwkJfQomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFuIE5NSSByZWFjaGluZyBoZXJlIGVudGVyZWQgd2l0aCBpcnFzIGVuYWJsZWQsIHNvIHRoZSBlbnF1ZXVlIGNhbiByYWNlLiAqLwomIzQzOwlXQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSAmYW1wOyZhbXA7IGluX25taSgpKTsKJiM0MzsKJiM0MzsJc3JjdV9kb19lbnF1ZXVlKHNzcCwgcmhwLCBmdW5jLCBkb19ub3JtKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBSZS1pc3N1ZSBkZWZlcnJlZCBjYWxsYmFja3Mgc3RyYWlnaHQgdG8gc3JjdV9kb19lbnF1ZXVlKCkgc28gdGhleSBjYW5ub3QgZGVmZXIKJiM0MzsgKiBhZ2Fpbi4gIC0mZ3Q7bG9jayBzZXJpYWxpemVzIHRoZSBkcmFpbmVyczogdGhlIGlycV93b3JrLCBzcmN1X2RlZmVyX2ZsdXNoKCkgYW5kCiYjNDM7ICogc3JjdV9vZmZsaW5lX2RyYWluKCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgX19zcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBzcmN1X2RlZmVyICpzbmRwLCBib29sIGd1YXJkKQomIzQzO3sKJiM0MzsJc3RydWN0IGxsaXN0X25vZGUgKnNub2RlLCAqc25leHQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiYjNDM7CXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3NuZHAtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJaWYgKGd1YXJkKQomIzQzOwkJV1JJVEVfT05DRShzbmRwLSZndDtkcmFpbmluZywgdHJ1ZSk7CiYjNDM7CWxsaXN0X2Zvcl9lYWNoX3NhZmUoc25vZGUsIHNuZXh0LCBsbGlzdF9kZWxfYWxsKCZhbXA7c25kcC0mZ3Q7bGlzdCkpIHsKJiM0MzsJCXN0cnVjdCBzcmN1X2RhdGEgKnNkcCA9IGNvbnRhaW5lcl9vZihzbm9kZSwgc3RydWN0IHNyY3VfZGF0YSwgZGVmZXJfbGluayk7CiYjNDM7CQlzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCA9IHNkcC0mZ3Q7c3NwOwomIzQzOwkJc3RydWN0IGxsaXN0X25vZGUgKmNub2RlLCAqY25leHQ7CiYjNDM7CQlib29sIGRvX25vcm07CiYjNDM7CiYjNDM7CQljbm9kZSA9IGxsaXN0X2RlbF9hbGwoJmFtcDtzZHAtJmd0O2RlZmVyX2Nicyk7CiYjNDM7CQlkb19ub3JtID0gIVJFQURfT05DRShzZHAtJmd0O2RlZmVyX2V4cCk7CiYjNDM7CQlpZiAoIWRvX25vcm0pCiYjNDM7CQkJV1JJVEVfT05DRShzZHAtJmd0O2RlZmVyX2V4cCwgZmFsc2UpOwomIzQzOwkJbGxpc3RfZm9yX2VhY2hfc2FmZShjbm9kZSwgY25leHQsIGNub2RlKSB7CiYjNDM7CQkJc3RydWN0IHJjdV9oZWFkICpyaHAgPSAoc3RydWN0IHJjdV9oZWFkICopY25vZGU7CiYjNDM7CiYjNDM7CQkJcmhwLSZndDtuZXh0ID0gTlVMTDsKJiM0MzsJCQlzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIHJocC0mZ3Q7ZnVuYywgZG9fbm9ybSk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJaWYgKGd1YXJkKQomIzQzOwkJV1JJVEVfT05DRShzbmRwLSZndDtkcmFpbmluZywgZmFsc2UpOwomIzQzOwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3NuZHAtJmd0O2xvY2ssIGZsYWdzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBPbmx5IHRoZSBpcnFfd29yayBkcmFpbiBjYW4gYmUgcmUtZmVkIGJ5IGl0cyBvd24gcmUtaXNzdWUsIHNvIG9ubHkgaXQgc2V0cwomIzQzOyAqIC0mZ3Q7ZHJhaW5pbmcuICBBIGRpcmVjdCBkcmFpbiByZS1pc3N1ZXMgb250byB0aGlzIENQVSwgYW5kIGFueXRoaW5nIHN0YWdlZAomIzQzOyAqIGR1cmluZyBpdCBpcyBwaWNrZWQgdXAgYnkgdGhhdCBDUFUmIzM5O3Mgb3duIGlycV93b3JrLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdykKJiM0Mzt7CiYjNDM7CV9fc3JjdV9kZWZlcl9kcmFpbihjb250YWluZXJfb2YoaXcsIHN0cnVjdCBzcmN1X2RlZmVyLCBpdyksIHRydWUpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIERyYWluIEBjcHUmIzM5O3MgZGVmZXJyZWQgY2FsbF9zcmN1KCkgY2FsbGJhY2tzIGZyb20gcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcygpCiYjNDM7ICogb25jZSBAY3B1IGlzIGRlYWQuICBPbmUgcGFzcyBjb3ZlcnMgZXZlcnkgc3JjdV9zdHJ1Y3QsIGFuZCB0aGUgcmUtaXNzdWUgbGFuZHMKJiM0MzsgKiBvbiB0aGUgY3VycmVudCBDUFUuCiYjNDM7ICovCiYjNDM7dm9pZCBzcmN1X29mZmxpbmVfZHJhaW4oaW50IGNwdSkKJiM0Mzt7CiYjNDM7CWlmICghSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSkKJiM0MzsJCXJldHVybjsKJiM0MzsJX19zcmN1X2RlZmVyX2RyYWluKCZhbXA7cGVyX2NwdShzcmN1X2RlZmVyLCBjcHUpLCBmYWxzZSk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBjYWxsX3NyY3UoKSAtIFF1ZXVlIGEgY2FsbGJhY2sgZm9yIGludm9jYXRpb24gYWZ0ZXIgYW4gU1JDVSBncmFjZSBwZXJpb2QKICAqIEBzc3A6IHNyY3Vfc3RydWN0IGluIHF1ZXVlIHRoZSBjYWxsYmFjawpAQCAtMTY3Nyw5ICYjNDM7MTgzMiwxNyBAQCB2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCkKIHsKIAlpbnQgY3B1OwogCWludCBpZHg7Ci0JdW5zaWduZWQgbG9uZyBzID0gcmN1X3NlcV9zbmFwKCZhbXA7c3NwLSZndDtzcmN1X3N1cC0mZ3Q7c3JjdV9iYXJyaWVyX3NlcSk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgczsKIAogCWNoZWNrX2luaXRfc3JjdV9zdHJ1Y3Qoc3NwKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcyBiZWZvcmUgc25hcHNob3R0aW5nIHRoZSBzZXF1ZW5jZS4gIFRoZQomIzQzOwkgKiBzaGFyZWQgaXJxX3dvcmsgbWF5IGFsc28gZHJhaW4gb3RoZXIgc3JjdV9zdHJ1Y3RzJiMzOTssIHdoaWNoIGlzIGhhcm1sZXNzLgomIzQzOwkgKi8KJiM0MzsJc3JjdV9kZWZlcl9mbHVzaCgpOwomIzQzOwomIzQzOwlzID0gcmN1X3NlcV9zbmFwKCZhbXA7c3NwLSZndDtzcmN1X3N1cC0mZ3Q7c3JjdV9iYXJyaWVyX3NlcSk7CiAJbXV0ZXhfbG9jaygmYW1wO3NzcC0mZ3Q7c3JjdV9zdXAtJmd0O3NyY3VfYmFycmllcl9tdXRleCk7CiAJaWYgKHJjdV9zZXFfZG9uZSgmYW1wO3NzcC0mZ3Q7c3JjdV9zdXAtJmd0O3NyY3VfYmFycmllcl9zZXEsIHMpKSB7CiAJCXNtcF9tYigpOyAvKiBGb3JjZSBvcmRlcmluZyBmb2xsb3dpbmcgcmV0dXJuLiAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdS90aW55LmMgYi9rZXJuZWwvcmN1L3RpbnkuYwppbmRleCBkY2NjY2Q2YmU5NDExLi5iYWZmZTY2MDA0M2Y1IDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1L3RpbnkuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvcmN1L3RpbnkuYwpAQCAtMTEsNiAmIzQzOzExLDggQEAKICAqLwogI2luY2x1ZGUgJmx0O2xpbnV4L2NvbXBsZXRpb24uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pbnRlcnJ1cHQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaXJxX3dvcmsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbGxpc3QuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ub3RpZmllci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JjdXBkYXRlX3dhaXQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKQEAgLTQyLDggJiM0Mzs0NCw5OSBAQCBzdGF0aWMgc3RydWN0IHJjdV9jdHJsYmxrIHJjdV9jdHJsYmxrID0gewogCS5ncF9zZXEJCT0gMCAtIDMwMFVMLAogfTsKIAomIzQzOy8qCiYjNDM7ICogVGhlIGNhbGxiYWNrIGxpc3QgaXMgb25seSBhY2Nlc3NlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQsIHNvIGEgY2FsbF9yY3UoKQomIzQzOyAqIHRoYXQgYXJyaXZlcyB3aXRoIGludGVycnVwdHMgb2ZmIHN0YWdlcyB0aGUgY2FsbGJhY2sgb24gYSBsb2NrbGVzcyBsaXN0IHRoYXQKJiM0MzsgKiBhbiBpcnFfd29yayByZS1pc3N1ZXMgbGF0ZXIuICBPbmUgZ2xvYmFsIGxpc3QgYW5kIGlycV93b3JrIHN1ZmZpY2UsIGFzIFRpbnkKJiM0MzsgKiBSQ1UgaXMgdW5pcHJvY2Vzc29yLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KTsKJiM0MztzdGF0aWMgTExJU1RfSEVBRChyY3VfZGVmZXJfbGlzdCk7CiYjNDM7c3RhdGljIHN0cnVjdCBpcnFfd29yayByY3VfZGVmZXJfaXcgPSBJUlFfV09SS19JTklUX0hBUkQocmN1X2RlZmVyX2RyYWluKTsKJiM0MztzdGF0aWMgYm9vbCByY3VfZGVmZXJfZHJhaW5pbmc7CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBFbnF1ZXVlIEBoZWFkIG9uIHRoZSBjYWxsYmFjayBsaXN0LiAgQWxzbyBjYWxsZWQgYnkgcmN1X2RlZmVyX2RyYWluKCkgdG8KJiM0MzsgKiByZS1pc3N1ZSBhIGRlZmVycmVkIGNhbGxiYWNrLCBzbyBpdCBtdXN0IG5vdCByZS1jaGVjayB0aGUgZGVmZXJyYWwgY29uZGl0aW9uLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHJjdV9kb19lbnF1ZXVlKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYykKJiM0Mzt7CiYjNDM7CXN0YXRpYyBhdG9taWNfdCBkb3VibGVmcmVlczsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKJiM0MzsJaWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKGhlYWQpKSB7CiYjNDM7CQlpZiAoYXRvbWljX2luY19yZXR1cm4oJmFtcDtkb3VibGVmcmVlcykgJmx0OyA0KSB7CiYjNDM7CQkJcHJfZXJyKCYjMzQ7JXMoKTogRG91YmxlLWZyZWVkIENCICVwLSZndDslcFMoKSEhISAgJiMzNDssIF9fZnVuY19fLCBoZWFkLCBoZWFkLSZndDtmdW5jKTsKJiM0MzsJCQltZW1fZHVtcF9vYmooaGVhZCk7CiYjNDM7CQl9CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJaGVhZC0mZ3Q7ZnVuYyA9IGZ1bmM7CiYjNDM7CWhlYWQtJmd0O25leHQgPSBOVUxMOwomIzQzOwomIzQzOwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiYjNDM7CSpyY3VfY3RybGJsay5jdXJ0YWlsID0gaGVhZDsKJiM0MzsJcmN1X2N0cmxibGsuY3VydGFpbCA9ICZhbXA7aGVhZC0mZ3Q7bmV4dDsKJiM0MzsJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoaXNfaWRsZV90YXNrKGN1cnJlbnQpKSkgewomIzQzOwkJLyogZm9yY2Ugc2NoZWR1bGluZyBmb3IgcmN1X3FzKCkgKi8KJiM0MzsJCXJlc2NoZWRfY3B1KDApOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIF9fcmN1X2RlZmVyX2RyYWluKGJvb2wgZ3VhcmQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSwgKm5leHQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiYjNDM7CS8qIENhbGxiYWNrcyBhcmUgdW5vcmRlcmVkLCBzbyBkcmFpbiBpbiBsbGlzdCBvcmRlciB3aXRob3V0IHJldmVyc2luZy4gKi8KJiM0MzsJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwomIzQzOwlpZiAoZ3VhcmQpCiYjNDM7CQlXUklURV9PTkNFKHJjdV9kZWZlcl9kcmFpbmluZywgdHJ1ZSk7CiYjNDM7CWxsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgbmV4dCwgbGxpc3RfZGVsX2FsbCgmYW1wO3JjdV9kZWZlcl9saXN0KSkgewomIzQzOwkJc3RydWN0IHJjdV9oZWFkICpoZWFkID0gKHN0cnVjdCByY3VfaGVhZCAqKW5vZGU7CiYjNDM7CiYjNDM7CQloZWFkLSZndDtuZXh0ID0gTlVMTDsKJiM0MzsJCXJjdV9kb19lbnF1ZXVlKGhlYWQsIGhlYWQtJmd0O2Z1bmMpOwomIzQzOwl9CiYjNDM7CWlmIChndWFyZCkKJiM0MzsJCVdSSVRFX09OQ0UocmN1X2RlZmVyX2RyYWluaW5nLCBmYWxzZSk7CiYjNDM7CWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogT25seSB0aGUgaXJxX3dvcmsgZHJhaW4gY2FuIGJlIHJlLWZlZCBieSBpdHMgb3duIHJlLWlzc3VlOyBzZWUgVHJlZSBSQ1UuICovCiYjNDM7c3RhdGljIHZvaWQgcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpCiYjNDM7ewomIzQzOwlfX3JjdV9kZWZlcl9kcmFpbih0cnVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgY2FsbF9yY3VfZGVmZXIoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jKQomIzQzO3sKJiM0MzsJLyogQSByZS1lbnRyYW50IGNhbGxfcmN1KCkgZHVyaW5nIHRoZSBkcmFpbiB3b3VsZCBsaXZlbG9jayBpdDsgZHJvcCBpdC4gKi8KJiM0MzsJaWYgKFJFQURfT05DRShyY3VfZGVmZXJfZHJhaW5pbmcpICZhbXA7JmFtcDsgIWluX25taSgpKSB7CiYjNDM7CQlXQVJOX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSwKJiM0MzsJCQkgICYjMzQ7Y2FsbF9yY3UoKSByZS1lbnRlcmVkIGR1cmluZyBjYWxsYmFjayBkcmFpbjsgbGVha2luZyBjYWxsYmFja1xuJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CWhlYWQtJmd0O2Z1bmMgPSBmdW5jOwomIzQzOwlpZiAobGxpc3RfYWRkKChzdHJ1Y3QgbGxpc3Rfbm9kZSAqKWhlYWQsICZhbXA7cmN1X2RlZmVyX2xpc3QpKQomIzQzOwkJaXJxX3dvcmtfcXVldWUoJmFtcDtyY3VfZGVmZXJfaXcpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIHNvIGEgZm9sbG93aW5nIHJjdV9iYXJyaWVyKCkgd2FpdHMgZm9yIHRoZW0uICovCiYjNDM7c3RhdGljIHZvaWQgcmN1X2RlZmVyX2ZsdXNoKHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpCiYjNDM7CQlyZXR1cm47CiYjNDM7CV9fcmN1X2RlZmVyX2RyYWluKGZhbHNlKTsKJiM0Mzt9CiYjNDM7CiB2b2lkIHJjdV9iYXJyaWVyKHZvaWQpCiB7CiYjNDM7CS8qIFJlZ2lzdGVyIGFueSBkZWZlcnJlZCBjYWxsYmFja3MgZmlyc3QuICovCiYjNDM7CXJjdV9kZWZlcl9mbHVzaCgpOwogCXdhaXRfcmN1X2dwKGNhbGxfcmN1X2h1cnJ5KTsKIH0KIEVYUE9SVF9TWU1CT0wocmN1X2JhcnJpZXIpOwpAQCAtMTU3LDI5ICYjNDM7MjUwLDE1IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3JjdSk7CiAgKi8KIHZvaWQgY2FsbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jKQogewotCXN0YXRpYyBhdG9taWNfdCBkb3VibGVmcmVlczsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKGhlYWQpKSB7Ci0JCWlmIChhdG9taWNfaW5jX3JldHVybigmYW1wO2RvdWJsZWZyZWVzKSAmbHQ7IDQpIHsKLQkJCXByX2VycigmIzM0OyVzKCk6IERvdWJsZS1mcmVlZCBDQiAlcC0mZ3Q7JXBTKCkhISEgICYjMzQ7LCBfX2Z1bmNfXywgaGVhZCwgaGVhZC0mZ3Q7ZnVuYyk7Ci0JCQltZW1fZHVtcF9vYmooaGVhZCk7Ci0JCX0KJiM0MzsJaWYgKHNob3VsZF9yY3VfZGVmZXIoKSkgewomIzQzOwkJY2FsbF9yY3VfZGVmZXIoaGVhZCwgZnVuYyk7CiAJCXJldHVybjsKIAl9CiAKLQloZWFkLSZndDtmdW5jID0gZnVuYzsKLQloZWFkLSZndDtuZXh0ID0gTlVMTDsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkqcmN1X2N0cmxibGsuY3VydGFpbCA9IGhlYWQ7Ci0JcmN1X2N0cmxibGsuY3VydGFpbCA9ICZhbXA7aGVhZC0mZ3Q7bmV4dDsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiYjNDM7CS8qIEFuIE5NSSByZWFjaGluZyBoZXJlIGVudGVyZWQgd2l0aCBpcnFzIGVuYWJsZWQsIHNvIHRoZSBlbnF1ZXVlIGNhbiByYWNlLiAqLwomIzQzOwlXQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSAmYW1wOyZhbXA7IGluX25taSgpKTsKIAotCWlmICh1bmxpa2VseShpc19pZGxlX3Rhc2soY3VycmVudCkpKSB7Ci0JCS8qIGZvcmNlIHNjaGVkdWxpbmcgZm9yIHJjdV9xcygpICovCi0JCXJlc2NoZWRfY3B1KDApOwotCX0KJiM0MzsJcmN1X2RvX2VucXVldWUoaGVhZCwgZnVuYyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjYWxsX3JjdSk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdHJlZS5jIGIva2VybmVsL3JjdS90cmVlLmMKaW5kZXggOTY4NDhmYzFmMDJiOC4uZWI2YjExY2ZhZDQ2ZiAxMDA2NDQKLS0tIGEva2VybmVsL3JjdS90cmVlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3JjdS90cmVlLmMKQEAgLTI0LDYgJiM0MzsyNCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc21wLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmN1cGRhdGVfd2FpdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ludGVycnVwdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9sbGlzdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvZGVidWcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ubWkuaCZndDsKQEAgLTMxNDgsMjEgJiM0MzszMTQ5LDI1IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2NiX292bGQoc3RydWN0IHJjdV9kYXRhICpyZHApCiAJcmF3X3NwaW5fdW5sb2NrX3JjdV9ub2RlKHJucCk7CiB9CiAKLXN0YXRpYyB2b2lkCi1fX2NhbGxfcmN1X2NvbW1vbihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgbGF6eV9pbikKJiM0MzsvKgomIzQzOyAqIFRoZSBjYWxsYmFjayBsaXN0IGlzIG9ubHkgYWNjZXNzZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLCBzbyBhIGNhbGxfcmN1KCkKJiM0MzsgKiB0aGF0IGFycml2ZXMgd2l0aCBpbnRlcnJ1cHRzIG9mZiAoc2VlIHNob3VsZF9yY3VfZGVmZXIoKSkgc3RhZ2VzIHRoZSBjYWxsYmFjawomIzQzOyAqIG9uIGEgcGVyLUNQVSBsbGlzdCB0aGF0IGFuIGlycV93b3JrIHJlLWlzc3VlcyBvbmNlIGludGVycnVwdHMgYXJlIG9uLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIEVucXVldWUgQGhlYWQgb24gdGhpcyBDUFUmIzM5O3MgcmN1X3NlZ2NibGlzdC4gIEFsc28gY2FsbGVkIGJ5IHJjdV9kZWZlcl9kcmFpbigpCiYjNDM7ICogdG8gcmUtaXNzdWUgYSBkZWZlcnJlZCBjYWxsYmFjaywgc28gaXQgbXVzdCBub3QgcmUtY2hlY2sgdGhlIGRlZmVycmFsCiYjNDM7ICogY29uZGl0aW9uLiAgRWl0aGVyIGNhbGxlciBtYXkgaGF2ZSBpbnRlcnJ1cHRzIGFscmVhZHkgZGlzYWJsZWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgcmN1X2RvX2VucXVldWUoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGxhenlfaW4pCiB7CiAJc3RhdGljIGF0b21pY190IGRvdWJsZWZyZWVzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJYm9vbCBsYXp5OwogCXN0cnVjdCByY3VfZGF0YSAqcmRwOwogCi0JLyogTWlzYWxpZ25lZCByY3VfaGVhZCEgKi8KLQlXQVJOX09OX09OQ0UoKHVuc2lnbmVkIGxvbmcpaGVhZCAmYW1wOyAoc2l6ZW9mKHZvaWQgKikgLSAxKSk7Ci0KLQkvKiBBdm9pZCBOVUxMIGRlcmVmZXJlbmNlIGlmIGNhbGxiYWNrIGlzIE5VTEwuICovCi0JaWYgKFdBUk5fT05fT05DRSghZnVuYykpCi0JCXJldHVybjsKLQogCWlmIChkZWJ1Z19yY3VfaGVhZF9xdWV1ZShoZWFkKSkgewogCQkvKgogCQkgKiBQcm9iYWJsZSBkb3VibGUgY2FsbF9yY3UoKSwgc28gbGVhayB0aGUgY2FsbGJhY2suCkBAIC0zMjA2LDYgJiM0MzszMjExLDEwNCBAQCBfX2NhbGxfcmN1X2NvbW1vbihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgbGF6eV9pbikKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFJlLWlzc3VlIGRlZmVycmVkIGNhbGxiYWNrcyBzdHJhaWdodCB0byB0aGUgZW5xdWV1ZSBzbyB0aGV5IGNhbm5vdCBkZWZlcgomIzQzOyAqIGFnYWluLiAgLSZndDtkZWZlcl9sb2NrIHNlcmlhbGl6ZXMgdGhlIGRyYWluZXJzOiB0aGlzIENQVSYjMzk7cyBpcnFfd29yaywKJiM0MzsgKiByY3VfZGVmZXJfZmx1c2goKSBhbmQgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcygpLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIF9fcmN1X2RlZmVyX2RyYWluKHN0cnVjdCByY3VfZGF0YSAqcmRwLCBib29sIGd1YXJkKQomIzQzO3sKJiM0MzsJc3RydWN0IGxsaXN0X25vZGUgKm5vZGUsICpuZXh0OwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwomIzQzOwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3JkcC0mZ3Q7ZGVmZXJfbG9jaywgZmxhZ3MpOwomIzQzOwlpZiAoZ3VhcmQpCiYjNDM7CQlXUklURV9PTkNFKHJkcC0mZ3Q7ZGVmZXJfZHJhaW5pbmcsIHRydWUpOwomIzQzOwlsbGlzdF9mb3JfZWFjaF9zYWZlKG5vZGUsIG5leHQsIGxsaXN0X2RlbF9hbGwoJmFtcDtyZHAtJmd0O2RlZmVyX2hlYWQpKSB7CiYjNDM7CQlzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQgPSAoc3RydWN0IHJjdV9oZWFkICopbm9kZTsKJiM0MzsKJiM0MzsJCWhlYWQtJmd0O25leHQgPSBOVUxMOwomIzQzOwkJcmN1X2RvX2VucXVldWUoaGVhZCwgaGVhZC0mZ3Q7ZnVuYywgZmFsc2UpOwomIzQzOwl9CiYjNDM7CWlmIChndWFyZCkKJiM0MzsJCVdSSVRFX09OQ0UocmRwLSZndDtkZWZlcl9kcmFpbmluZywgZmFsc2UpOwomIzQzOwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3JkcC0mZ3Q7ZGVmZXJfbG9jaywgZmxhZ3MpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIE9ubHkgdGhlIGlycV93b3JrIGRyYWluIGNhbiBiZSByZS1mZWQgYnkgaXRzIG93biByZS1pc3N1ZSwgc28gb25seSBpdCBzZXRzCiYjNDM7ICogLSZndDtkZWZlcl9kcmFpbmluZy4gIEEgZGlyZWN0IGRyYWluIHJlLWlzc3VlcyBvbnRvIHRoaXMgQ1BVLCBhbmQgYW55dGhpbmcKJiM0MzsgKiBzdGFnZWQgZHVyaW5nIGl0IGlzIHBpY2tlZCB1cCBieSB0aGF0IENQVSYjMzk7cyBvd24gaXJxX3dvcmsuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpCiYjNDM7ewomIzQzOwlfX3JjdV9kZWZlcl9kcmFpbihjb250YWluZXJfb2YoaXcsIHN0cnVjdCByY3VfZGF0YSwgZGVmZXJfd29yayksIHRydWUpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBTdGFnZSBAaGVhZCBmb3IgdGhpcyBDUFUmIzM5O3MgaXJxX3dvcmsgd2hlbiBjYWxsX3JjdSgpIGNhbm5vdCBlbnF1ZXVlIG5vdy4gKi8KJiM0MztzdGF0aWMgdm9pZCBjYWxsX3JjdV9kZWZlcihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHRoaXNfY3B1X3B0cigmYW1wO3JjdV9kYXRhKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSW5zdHJ1bWVudGF0aW9uIG9uIHRoZSBlbnF1ZXVlIHBhdGggY2FuIHJlLWVudGVyIGhlcmUgZnJvbSBpbnNpZGUKJiM0MzsJICogcmN1X2RlZmVyX2RyYWluKCkuICBSZS1xdWV1aW5nIHdvdWxkIGxpdmVsb2NrIHRoZSBkcmFpbiwgc28gZHJvcCB0aGUKJiM0MzsJICogY2FsbGJhY2s7IGFuIE5NSSBpcyBvbmUtc2hvdCBhbmQgY2Fubm90IGxvb3AsIHNvIGxldCBpdCB0aHJvdWdoLgomIzQzOwkgKi8KJiM0MzsJaWYgKFJFQURfT05DRShyZHAtJmd0O2RlZmVyX2RyYWluaW5nKSAmYW1wOyZhbXA7ICFpbl9ubWkoKSkgewomIzQzOwkJV0FSTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSksCiYjNDM7CQkJICAmIzM0O2NhbGxfcmN1KCkgcmUtZW50ZXJlZCBkdXJpbmcgY2FsbGJhY2sgZHJhaW47IGxlYWtpbmcgY2FsbGJhY2tcbiYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwloZWFkLSZndDtmdW5jID0gZnVuYzsKJiM0MzsJaWYgKGxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKiloZWFkLCAmYW1wO3JkcC0mZ3Q7ZGVmZXJfaGVhZCkpCiYjNDM7CQlpcnFfd29ya19xdWV1ZSgmYW1wO3JkcC0mZ3Q7ZGVmZXJfd29yayk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUmVnaXN0ZXIgcGVuZGluZyBkZWZlcnJlZCBjYWxsYmFja3MgaW50byB0aGUgY2FsbGJhY2sgbGlzdHMgc28gYSBmb2xsb3dpbmcKJiM0MzsgKiByY3VfYmFycmllcigpIHdhaXRzIGZvciB0aGVtLiAgVGhpcyBydW5zIGJlZm9yZSByY3VfYmFycmllcigpIHNjYW5zIHRoZQomIzQzOyAqIGxpc3RzLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9mbHVzaCh2b2lkKQomIzQzO3sKJiM0MzsJaW50IGNwdTsKJiM0MzsKJiM0MzsJaWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiYjNDM7CQlzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHBlcl9jcHVfcHRyKCZhbXA7cmN1X2RhdGEsIGNwdSk7CiYjNDM7CiYjNDM7CQlpZiAoIWxsaXN0X2VtcHR5KCZhbXA7cmRwLSZndDtkZWZlcl9oZWFkKSkKJiM0MzsJCQlfX3JjdV9kZWZlcl9kcmFpbihyZHAsIGZhbHNlKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZAomIzQzO19fY2FsbF9yY3VfY29tbW9uKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBsYXp5X2luKQomIzQzO3sKJiM0MzsJLyogTWlzYWxpZ25lZCByY3VfaGVhZCEgKi8KJiM0MzsJV0FSTl9PTl9PTkNFKCh1bnNpZ25lZCBsb25nKWhlYWQgJmFtcDsgKHNpemVvZih2b2lkICopIC0gMSkpOwomIzQzOwomIzQzOwkvKiBBdm9pZCBOVUxMIGRlcmVmZXJlbmNlIGlmIGNhbGxiYWNrIGlzIE5VTEwuICovCiYjNDM7CWlmIChXQVJOX09OX09OQ0UoIWZ1bmMpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAoc2hvdWxkX3JjdV9kZWZlcigpKSB7CiYjNDM7CQljYWxsX3JjdV9kZWZlcihoZWFkLCBmdW5jKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBBbiBOTUkgcmVhY2hpbmcgaGVyZSBlbnRlcmVkIHdpdGggaXJxcyBlbmFibGVkLCBzbyB0aGUgZW5xdWV1ZSBjYW4gcmFjZS4gKi8KJiM0MzsJV0FSTl9PTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSkgJmFtcDsmYW1wOyBpbl9ubWkoKSk7CiYjNDM7CiYjNDM7CXJjdV9kb19lbnF1ZXVlKGhlYWQsIGZ1bmMsIGxhenlfaW4pOwomIzQzO30KJiM0MzsKICNpZmRlZiBDT05GSUdfUkNVX0xBWlkKIHN0YXRpYyBib29sIGVuYWJsZV9yY3VfbGF6eSBfX3JlYWRfbW9zdGx5ID0gIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9MQVpZX0RFRkFVTFRfT0ZGKTsKIG1vZHVsZV9wYXJhbShlbmFibGVfcmN1X2xhenksIGJvb2wsIDA0NDQpOwpAQCAtMzg5Niw4ICYjNDM7Mzk5OSwxMiBAQCB2b2lkIHJjdV9iYXJyaWVyKHZvaWQpCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBsb25nIGdzZXE7CiAJc3RydWN0IHJjdV9kYXRhICpyZHA7Ci0JdW5zaWduZWQgbG9uZyBzID0gcmN1X3NlcV9zbmFwKCZhbXA7cmN1X3N0YXRlLmJhcnJpZXJfc2VxdWVuY2UpOwomIzQzOwl1bnNpZ25lZCBsb25nIHM7CiAKJiM0MzsJLyogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcyBiZWZvcmUgc25hcHNob3R0aW5nIHRoZSBzZXF1ZW5jZS4gKi8KJiM0MzsJcmN1X2RlZmVyX2ZsdXNoKCk7CiYjNDM7CiYjNDM7CXMgPSByY3Vfc2VxX3NuYXAoJmFtcDtyY3Vfc3RhdGUuYmFycmllcl9zZXF1ZW5jZSk7CiAJcmN1X2JhcnJpZXJfdHJhY2UoVFBTKCYjMzQ7QmVnaW4mIzM0OyksIC0xLCBzKTsKIAogCS8qIFRha2UgbXV0ZXggdG8gc2VyaWFsaXplIGNvbmN1cnJlbnQgcmN1X2JhcnJpZXIoKSByZXF1ZXN0cy4gKi8KQEAgLTQyMzEsNiAmIzQzOzQzMzgsMTAgQEAgcmN1X2Jvb3RfaW5pdF9wZXJjcHVfZGF0YShpbnQgY3B1KQogCXJkcC0mZ3Q7cmN1X29ubF9ncF9zdGF0ZSA9IFJDVV9HUF9DTEVBTkVEOwogCXJkcC0mZ3Q7bGFzdF9zY2hlZF9jbG9jayA9IGppZmZpZXM7CiAJcmRwLSZndDtjcHUgPSBjcHU7CiYjNDM7CWluaXRfbGxpc3RfaGVhZCgmYW1wO3JkcC0mZ3Q7ZGVmZXJfaGVhZCk7CiYjNDM7CXJhd19zcGluX2xvY2tfaW5pdCgmYW1wO3JkcC0mZ3Q7ZGVmZXJfbG9jayk7CiYjNDM7CS8qIEhhcmQgaXJxX3dvcmsgc28gdGhlIHJlLWlzc3VlIHJ1bnMgcHJvbXB0bHkuICovCiYjNDM7CXJkcC0mZ3Q7ZGVmZXJfd29yayA9IElSUV9XT1JLX0lOSVRfSEFSRChyY3VfZGVmZXJfZHJhaW4pOwogCXJjdV9ib290X2luaXRfbm9jYl9wZXJjcHVfZGF0YShyZHApOwogfQogCkBAIC00NTI4LDYgJiM0Mzs0NjM5LDE2IEBAIHZvaWQgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcyhpbnQgY3B1KQogCXN0cnVjdCByY3VfZGF0YSAqcmRwID0gcGVyX2NwdV9wdHIoJmFtcDtyY3VfZGF0YSwgY3B1KTsKIAlib29sIG5lZWR3YWtlOwogCiYjNDM7CS8qCiYjNDM7CSAqIENhbGxiYWNrcyB0aGUgb3V0Z29pbmcgQ1BVIGRlZmVycmVkIGxhdGUgaW4gdGhlIG9mZmxpbmUgcGF0aCAocGFzdCB0aGUKJiM0MzsJICogcG9pbnQgaXRzIGlycV93b3JrIGNhbiBydW4pIHNpdCBvbiAtJmd0O2RlZmVyX2hlYWQsIHdoaWNoIHRoZSAtJmd0O2NibGlzdAomIzQzOwkgKiBtaWdyYXRpb24gYmVsb3cgZG9lcyBub3QgY292ZXIuICBEcmFpbiB0aGVtIGhlcmUsIGJlZm9yZSB0aGUgZWFybHkKJiM0MzsJICogcmV0dXJuczsgdGhlIHJlLWlzc3VlIGxhbmRzIG9uIHRoaXMgQ1BVLgomIzQzOwkgKi8KJiM0MzsJX19yY3VfZGVmZXJfZHJhaW4ocmRwLCBmYWxzZSk7CiYjNDM7CS8qIExpa2V3aXNlIGZvciB0aGUgb3V0Z29pbmcgQ1BVJiMzOTtzIGRlZmVycmVkIGNhbGxfc3JjdSgpIGNhbGxiYWNrcy4gKi8KJiM0MzsJc3JjdV9vZmZsaW5lX2RyYWluKGNwdSk7CiYjNDM7CiAJaWYgKHJjdV9yZHBfaXNfb2ZmbG9hZGVkKHJkcCkpCiAJCXJldHVybjsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3JjdS90cmVlLmggYi9rZXJuZWwvcmN1L3RyZWUuaAppbmRleCBlZWRmYTQzMDU5ZTgwLi5iN2NhYzdhMTNiNGYyIDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1L3RyZWUuaAomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvcmN1L3RyZWUuaApAQCAtMjI5LDYgJiM0MzsyMjksMTIgQEAgc3RydWN0IHJjdV9kYXRhIHsKIAlzdHJ1Y3QgcmN1X2hlYWQgYmFycmllcl9oZWFkOwogCWludCBleHBfd2F0Y2hpbmdfc25hcDsJCS8qIERvdWJsZS1jaGVjayBuZWVkIGZvciBJUEkuICovCiAKJiM0MzsJLyogRGVmZXJyYWwgb2YgYW4gTk1JL3JlZW50cmFudCBjYWxsX3JjdSgpOyBzZWUgX19jYWxsX3JjdV9jb21tb24oKS4gKi8KJiM0MzsJc3RydWN0IGxsaXN0X2hlYWQgZGVmZXJfaGVhZDsKJiM0MzsJc3RydWN0IGlycV93b3JrIGRlZmVyX3dvcms7CiYjNDM7CXJhd19zcGlubG9ja190IGRlZmVyX2xvY2s7CiYjNDM7CWJvb2wgZGVmZXJfZHJhaW5pbmc7CiYjNDM7CiAJLyogNSkgQ2FsbGJhY2sgb2ZmbG9hZGluZy4gKi8KICNpZmRlZiBDT05GSUdfUkNVX05PQ0JfQ1BVCiAJc3RydWN0IHN3YWl0X3F1ZXVlX2hlYWQgbm9jYl9jYl93cTsgLyogRm9yIG5vY2Iga3RocmVhZHMgdG8gc2xlZXAgb24uICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yY3VfcmVlbnRyeS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmN1X3JlZW50cnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5mYTgxM2QxZDQ5MmI2Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmN1X3JlZW50cnkuYwpAQCAtMCwwICYjNDM7MSw5NSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBFeGVyY2lzZSByZS1lbnRyeSBpbnRvIGNhbGxfc3JjdSgpIGZyb20gQlBGOyBzZWUgcHJvZ3MvcmN1X3JlZW50cnkuYy4KJiM0MzsgKgomIzQzOyAqIE9uIGEga2VybmVsIHdpdGhvdXQgdGhlIGNhbGxfc3JjdSgpIGFueS1jb250ZXh0IGZpeCB0aGUgbmVzdGVkIGNhbGwKJiM0MzsgKiBzZWxmLWRlYWRsb2NrcyBvbiB0aGUgc3JjdV9kYXRhIGxvY2ssIHNvIHRoaXMgaGFuZ3MgcmF0aGVyIHRoYW4gZmFpbHMuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBfR05VX1NPVVJDRQomIzQzOyNpbmNsdWRlICZsdDtzY2hlZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvc3lzY2FsbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt0ZXN0X3Byb2dzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDtyY3VfcmVlbnRyeS5za2VsLmgmIzM0OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgc3lzX3BpZGZkX29wZW4ocGlkX3QgcGlkLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiYjNDM7ewomIzQzOwlyZXR1cm4gc3lzY2FsbChfX05SX3BpZGZkX29wZW4sIHBpZCwgZmxhZ3MpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBUaW55IFJDVSBidWlsZHMgaGF2ZSBubyByY3Vfc2VnY2JsaXN0X2VucXVldWUoKSB0byBhdHRhY2ggdG8uICovCiYjNDM7c3RhdGljIGJvb2wgaGF2ZV9hdHRhY2hfdGFyZ2V0KHZvaWQpCiYjNDM7ewomIzQzOwljaGFyIGJ1ZlsyNTZdOwomIzQzOwlib29sIGZvdW5kID0gZmFsc2U7CiYjNDM7CUZJTEUgKmY7CiYjNDM7CiYjNDM7CWYgPSBmb3BlbigmIzM0Oy9wcm9jL2thbGxzeW1zJiMzNDssICYjMzQ7ciYjMzQ7KTsKJiM0MzsJaWYgKCFmKQomIzQzOwkJcmV0dXJuIHRydWU7CS8qIGNhbm5vdCB0ZWxsOyBsZXQgdGhlIGF0dGFjaCBkZWNpZGUgKi8KJiM0MzsJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGYpKSB7CiYjNDM7CQlpZiAoc3Ryc3RyKGJ1ZiwgJiMzNDsgcmN1X3NlZ2NibGlzdF9lbnF1ZXVlXG4mIzM0OykpIHsKJiM0MzsJCQlmb3VuZCA9IHRydWU7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJZmNsb3NlKGYpOwomIzQzOwlyZXR1cm4gZm91bmQ7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgdGVzdF9yY3VfcmVlbnRyeSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHJjdV9yZWVudHJ5ICpza2VsOwomIzQzOwlpbnQgZXJyLCBwaWRmZCA9IC0xLCBtYXBfZmQ7CiYjNDM7CWNwdV9zZXRfdCBzZXQsIG9sZF9zZXQ7CiYjNDM7CWJvb2wgYWZmaW5pdHlfc2F2ZWQ7CiYjNDM7CV9fdTY0IHZhbCA9IDE7CiYjNDM7CiYjNDM7CWlmICghaGF2ZV9hdHRhY2hfdGFyZ2V0KCkpIHsKJiM0MzsJCXRlc3RfX3NraXAoKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlza2VsID0gcmN1X3JlZW50cnlfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7c2tlbF9vcGVuX2FuZF9sb2FkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwllcnIgPSByY3VfcmVlbnRyeV9fYXR0YWNoKHNrZWwpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7c2tlbF9hdHRhY2gmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyogS2VlcCB0aGUgcmUtZW50cnkgb24gYSBzaW5nbGUgQ1BVLiAqLwomIzQzOwlhZmZpbml0eV9zYXZlZCA9ICFzY2hlZF9nZXRhZmZpbml0eSgwLCBzaXplb2Yob2xkX3NldCksICZhbXA7b2xkX3NldCk7CiYjNDM7CUNQVV9aRVJPKCZhbXA7c2V0KTsKJiM0MzsJQ1BVX1NFVCgwLCAmYW1wO3NldCk7CiYjNDM7CWlmICghQVNTRVJUX09LKHNjaGVkX3NldGFmZmluaXR5KDAsIHNpemVvZihzZXQpLCAmYW1wO3NldCksICYjMzQ7c2V0YWZmaW5pdHkmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJcGlkZmQgPSBzeXNfcGlkZmRfb3BlbihnZXRwaWQoKSwgMCk7CiYjNDM7CWlmICghQVNTRVJUX0dFKHBpZGZkLCAwLCAmIzM0O3BpZGZkX29wZW4mIzM0OykpCiYjNDM7CQlnb3RvIHJlc3RvcmU7CiYjNDM7CW1hcF9mZCA9IGJwZl9tYXBfX2ZkKHNrZWwtJmd0O21hcHMudGFza19zdGcpOwomIzQzOwllcnIgPSBicGZfbWFwX3VwZGF0ZV9lbGVtKG1hcF9mZCwgJmFtcDtwaWRmZCwgJmFtcDt2YWwsIEJQRl9OT0VYSVNUKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2Jvb3RfY3JlYXRlJiMzNDspKQomIzQzOwkJZ290byByZXN0b3JlOwomIzQzOwomIzQzOwkvKiBBcm0gdGhlIGhhbmRsZXIgZm9yIHRoaXMgdGhyZWFkLCB0aGVuIHRyaWdnZXIgY2FsbF9yY3VfdGFza3NfdHJhY2UoKS4gKi8KJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDt0YXJnZXRfcGlkID0gc3lzY2FsbChfX05SX2dldHRpZCk7CiYjNDM7CWVyciA9IGJwZl9tYXBfZGVsZXRlX2VsZW0obWFwX2ZkLCAmYW1wO3BpZGZkKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2Jvb3RfZGVsZXRlJiMzNDspKQomIzQzOwkJZ290byByZXN0b3JlOwomIzQzOwomIzQzOwkvKiBPbmx5IFRyZWUgU1JDVSBlbnF1ZXVlcyB2aWEgcmN1X3NlZ2NibGlzdF9lbnF1ZXVlKCk7IHNraXAgZWxzZXdoZXJlLiAqLwomIzQzOwlpZiAoIXNrZWwtJmd0O2Jzcy0mZ3Q7aGl0cykgewomIzQzOwkJdGVzdF9fc2tpcCgpOwomIzQzOwkJZ290byByZXN0b3JlOwomIzQzOwl9CiYjNDM7CUFTU0VSVF9FUShza2VsLSZndDtic3MtJmd0O2dldF9lcnJzLCAwLCAmIzM0O25lc3RlZF9zdG9yYWdlX2dldCYjMzQ7KTsKJiM0MzsJQVNTRVJUX0VRKHNrZWwtJmd0O2Jzcy0mZ3Q7ZGVsX2VycnMsIDAsICYjMzQ7bmVzdGVkX3N0b3JhZ2VfZGVsZXRlJiMzNDspOwomIzQzO3Jlc3RvcmU6CiYjNDM7CWlmIChhZmZpbml0eV9zYXZlZCkKJiM0MzsJCXNjaGVkX3NldGFmZmluaXR5KDAsIHNpemVvZihvbGRfc2V0KSwgJmFtcDtvbGRfc2V0KTsKJiM0MztvdXQ6CiYjNDM7CWlmIChwaWRmZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UocGlkZmQpOwomIzQzOwlyY3VfcmVlbnRyeV9fZGVzdHJveShza2VsKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmN1X3JlZW50cnkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yY3VfcmVlbnRyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjQ3YTM2ZjcwNGNmM2UKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmN1X3JlZW50cnkuYwpAQCAtMCwwICYjNDM7MSw1MSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBSZS1lbnRlciBjYWxsX3NyY3UoKSBmcm9tIGEgQlBGIHByb2dyYW0uICBmZW50cnkgb24gcmN1X3NlZ2NibGlzdF9lbnF1ZXVlKCkKJiM0MzsgKiBmaXJlcyBpbnNpZGUgY2FsbF9zcmN1KCkmIzM5O3MgZW5xdWV1ZSAocmVhY2hlZCBmcm9tIHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKCkKJiM0MzsgKiB3aXRoIHRoZSBzcmN1X2RhdGEgLSZndDtsb2NrIGhlbGQpOyB0aGUgaGFuZGxlciB0aGVuIGNhbGxzIGNhbGxfcmN1X3Rhc2tzX3RyYWNlKCkKJiM0MzsgKiAtLSBpdHNlbGYgY2FsbF9zcmN1KCkgb24gcmN1X3Rhc2tzX3RyYWNlX3NyY3Vfc3RydWN0IC0tIHJlLWVudGVyaW5nIHRoZSBzYW1lCiYjNDM7ICogc3JjdV9kYXRhIG9uIHRoZSBzYW1lIENQVS4KJiM0MzsgKi8KJiM0MzsjaW5jbHVkZSAmIzM0O3ZtbGludXguaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX3RyYWNpbmcuaCZndDsKJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CiYjNDM7CiYjNDM7c3RydWN0IHsKJiM0MzsJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9UQVNLX1NUT1JBR0UpOwomIzQzOwlfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9OT19QUkVBTExPQyk7CiYjNDM7CV9fdHlwZShrZXksIGludCk7CiYjNDM7CV9fdHlwZSh2YWx1ZSwgX191NjQpOwomIzQzO30gdGFza19zdGcgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7aW50IHRhcmdldF9waWQ7CiYjNDM7aW50IGhpdHM7CiYjNDM7aW50IGdldF9lcnJzOwomIzQzO2ludCBkZWxfZXJyczsKJiM0MztpbnQgZG9uZTsKJiM0MzsKJiM0MztTRUMoJiMzNDtmZW50cnkvcmN1X3NlZ2NibGlzdF9lbnF1ZXVlJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKHJlZW50ZXIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cjsKJiM0MzsKJiM0MzsJaWYgKGRvbmUgfHwgIXRhcmdldF9waWQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJY3VyID0gYnBmX2dldF9jdXJyZW50X3Rhc2tfYnRmKCk7CiYjNDM7CWlmIChjdXItJmd0O3BpZCAhPSB0YXJnZXRfcGlkKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qIElzc3VlIHRoZSBuZXN0ZWQgY2FsbCBleGFjdGx5IG9uY2UsIHNvIHRoZSB0ZXN0IGlzIGRldGVybWluaXN0aWMuICovCiYjNDM7CWRvbmUgPSAxOwomIzQzOwlfX3N5bmNfZmV0Y2hfYW5kX2FkZCgmYW1wO2hpdHMsIDEpOwomIzQzOwomIzQzOwkvKiBSZS1lbnRlciB2aWEgYSB0YXNrLXN0b3JhZ2UgZGVsZXRlLCB3aGljaCBjYWxscyBjYWxsX3JjdV90YXNrc190cmFjZSgpLiAqLwomIzQzOwlpZiAoIWJwZl90YXNrX3N0b3JhZ2VfZ2V0KCZhbXA7dGFza19zdGcsIGN1ciwgMCwgQlBGX0xPQ0FMX1NUT1JBR0VfR0VUX0ZfQ1JFQVRFKSkKJiM0MzsJCV9fc3luY19mZXRjaF9hbmRfYWRkKCZhbXA7Z2V0X2VycnMsIDEpOwomIzQzOwllbHNlIGlmIChicGZfdGFza19zdG9yYWdlX2RlbGV0ZSgmYW1wO3Rhc2tfc3RnLCBjdXIpKQomIzQzOwkJX19zeW5jX2ZldGNoX2FuZF9hZGQoJmFtcDtkZWxfZXJycywgMSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTM6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5MjkKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA1NjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBQbGFuIGZvciBSQ1UvU1JDVSBEZWZlcnJhbCBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIHNlcmllcy4gSXQmIzM5O3MgZGVmZXJyaW5nIGBjYWxsX3JjdSgpYCBhbmQgYGNhbGxfc3JjdSgpYCBjYWxsYmFja3Mgd2hlbiBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCwgd2hpY2ggc2VlbXMgbGlrZSBhIHNvbGlkIG1vdmUgdG8gcHJldmVudCB0aG9zZSBuYXN0eSBkZWFkbG9ja3MgYW5kIGxpc3QgY29ycnVwdGlvbnMgd2Ugc29tZXRpbWVzIHNlZSwgZXNwZWNpYWxseSB3aXRoIHRob3NlIHBlc2t5IEJQRiBwcm9ncmFtcyBhbmQgTk1Jcy4gSSYjMzk7dmUgYWxyZWFkeSBjb25maXJtZWQgdGhhdCBpdCBtb2RpZmllcyBrZXkgUkNVIGxvZ2ljLgoKRmlyc3QsIEkgbmVlZCB0byBzZWUgaWYgdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBhbnkgKm5ldyogZnVuY3Rpb25hbGl0eSB0aGF0IHdlIG5lZWQgdG8gaGl0IHdpdGggb3VyIGZ1enppbmcgZWZmb3J0cy4gWWVzLCB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGEgbmV3IGNvbmZpZ3VyYXRpb24gb3B0aW9uOiBgQ09ORklHX1JDVV9ERUZFUmAuIEl0IGFsc28gbW9kaWZpZXMgYHJjdXRvcnR1cmVgLCBzcGVjaWZpY2FsbHkgdG8gdGVzdCBOTUkgY2FsbHMuCgpOb3csIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgd2UgbmVlZCB0byB0YXJnZXQuIEkmIzM5O20gdGhpbmtpbmcgd2Ugc2hvdWxkIGRlZmluaXRlbHkgZm9jdXMgb24gYGNhbGxfcmN1YCwgYGNhbGxfc3JjdWAsIGBzcmN1X2JhcnJpZXJgLCBhbmQgYHJjdV9iYXJyaWVyYC4gV2UgYWxzbyBoYXZlIGByY3VfZGVmZXJfZHJhaW5gIGFuZCBgc3JjdV9kZWZlcl9kcmFpbmAuCgpJIGp1c3QgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBkb2luZyB0aGUgcmlnaHQgdGhpbmcuIEJhc2VkIG9uIHdoYXQgSSBoYXZlIHJlYWQsIGBDT05GSUdfUkNVX0RFRkVSYCBpcyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgaWYgd2UgaGF2ZSBOTUlzLCBLUFJPQkVTLCBvciBvdGhlciB0cmFjaW5nIGVuYWJsZWQuIEkmIzM5O2xsIGp1c3QgbmVlZCB0byBsaXN0IGBSQ1VfREVGRVJgIGluIHRoZSBgRW5hYmxlQ29uZmlnc2AuCgpMb29raW5nIGF0IGBrZXJuZWwvcmN1L3JjdXRvcnR1cmUuY2AsIEkgc2VlIGl0IG5vdyBpbmNvcnBvcmF0ZXMgYG5taV9jYWxsc2AgYXMgYSBwYXJhbWV0ZXIgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0IG1vZGlmaWVkIGBjYWxsX3NyY3VgLCBgc3JjdV9iYXJyaWVyYCwgYGNhbGxfcmN1YCwgYHJjdV9iYXJyaWVyYCwgYHNyY3Vfb2ZmbGluZV9kcmFpbmAsIGFuZCBgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc2AuCgpJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBjYWxsX3JjdWAgYW5kIGBjYWxsX3NyY3VgIGFyZSBleHBvcnRlZCBhbmQgY2FuIGJlIGNhbGxlZCBmcm9tIGFueXdoZXJlLiBZZXAsIHRoZXkgYXJlLiBUaGV5IGFyZSBjb3JlIGtlcm5lbCBBUElzLgoKRmluYWxseSwgSSYjMzk7bGwgaGl0IGBkZWZhdWx0X2FwaTpncmVwcGVyYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBpbnRlcmVzdGluZyBmdW5jdGlvbnMgaW4gdGhlc2UgcGF0Y2hlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMzozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHZvaWR8aW50fGJvb2wpIFthLXowLTlfXSYjNDM7XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3JjdS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDExMDIgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmtlcm5lbC9yY3UvcmN1Lmg9Mjk3PWV4dGVybiBib29sIHJjdV9leHBfc3RhbGxfdGFza19kZXRhaWxzIF9fcmVhZF9tb3N0bHk7XG5rZXJuZWwvcmN1L3JjdS5oOjI5ODppbnQgcmN1X2ppZmZpZXNfdGlsbF9zdGFsbF9jaGVjayh2b2lkKTtcbmtlcm5lbC9yY3UvcmN1Lmg6Mjk5OmludCByY3VfZXhwX2ppZmZpZXNfdGlsbF9zdGFsbF9jaGVjayh2b2lkKTtcbmtlcm5lbC9yY3UvcmN1LmgtMzAwLVxuLS1cbmtlcm5lbC9yY3UvcmN1Lmg9MzM5PWRvIHsgXFxcbi0tXG5rZXJuZWwvcmN1L3JjdS5oLTM1MC1cbmtlcm5lbC9yY3UvcmN1Lmg6MzUxOnZvaWQgcmN1X2Vhcmx5X2Jvb3RfdGVzdHModm9pZCk7XG5rZXJuZWwvcmN1L3JjdS5oOjM1Mjp2b2lkIHJjdV90ZXN0X3N5bmNfcHJpbXModm9pZCk7XG5rZXJuZWwvcmN1L3JjdS5oLTM1My1cbi0tXG5rZXJuZWwvcmN1L3JjdS5oPTUzNz1zdGF0aWMgaW5saW5lIGJvb2wgcmN1X2NwdV9vbmxpbmUoaW50IGNwdSkgeyByZXR1cm4gdHJ1ZTsgfVxua2VybmVsL3JjdS9yY3UuaC01MzgtI2Vsc2UgLyogI2lmZGVmIENPTkZJR19USU5ZX1JDVSAqL1xua2VybmVsL3JjdS9yY3UuaDo1Mzk6Ym9vbCByY3VfZ3BfaXNfbm9ybWFsKHZvaWQpOyAgICAgLyogSW50ZXJuYWwgUkNVIHVzZS4gKi9cbmtlcm5lbC9yY3UvcmN1Lmg6NTQwOmJvb2wgcmN1X2dwX2lzX2V4cGVkaXRlZCh2b2lkKTsgIC8qIEludGVybmFsIFJDVSB1c2UuICovXG5rZXJuZWwvcmN1L3JjdS5oOjU0MTpib29sIHJjdV9hc3luY19zaG91bGRfaHVycnkodm9pZCk7ICAvKiBJbnRlcm5hbCBSQ1UgdXNlLiAqL1xua2VybmVsL3JjdS9yY3UuaDo1NDI6dm9pZCByY3VfZXhwZWRpdGVfZ3Aodm9pZCk7XG5rZXJuZWwvcmN1L3JjdS5oOjU0Mzp2b2lkIHJjdV91bmV4cGVkaXRlX2dwKHZvaWQpO1xua2VybmVsL3JjdS9yY3UuaDo1NDQ6dm9pZCByY3VfYXN5bmNfaHVycnkodm9pZCk7XG5rZXJuZWwvcmN1L3JjdS5oOjU0NTp2b2lkIHJjdV9hc3luY19yZWxheCh2b2lkKTtcbmtlcm5lbC9yY3UvcmN1Lmg6NTQ2OnZvaWQgcmN1cGRhdGVfYW5ub3VuY2VfYm9vdHVwX29kZG5lc3Modm9pZCk7XG5rZXJuZWwvcmN1L3JjdS5oOjU0Nzpib29sIHJjdV9jcHVfb25saW5lKGludCBjcHUpO1xua2VybmVsL3JjdS9yY3UuaC01NDgtI2lmZGVmIENPTkZJR19UQVNLU19SQ1VfR0VORVJJQ1xua2VybmVsL3JjdS9yY3UuaDo1NDk6dm9pZCBzaG93X3JjdV90YXNrc19ncF9rdGhyZWFkcyh2b2lkKTtcbmtlcm5lbC9yY3UvcmN1LmgtNTUwLSNlbHNlIC8qICNpZmRlZiBDT05GSUdfVEFTS1NfUkNVX0dFTkVSSUMgKi9cbi0tXG5rZXJuZWwvcmN1L3JjdS5oPTU1Nj1zdHJ1Y3QgdGFza19zdHJ1Y3QgKmdldF9yY3VfdGFza3NfZ3Bfa3RocmVhZCh2b2lkKTtcbmtlcm5lbC9yY3UvcmN1Lmg6NTU3OnZvaWQgcmN1X3Rhc2tzX2dldF9ncF9kYXRhKGludCAqZmxhZ3MsIHVuc2lnbmVkIGxvbmcgKmdwX3NlcSk7XG5rZXJuZWwvcmN1L3JjdS5oLTU1OC0jZW5kaWYgLy8gIyBpZmRlZiBDT05GSUdfVEFTS1NfUkNVXG4tLVxua2VybmVsL3JjdS9yY3UuaD01NjE9c3RydWN0IHRhc2tfc3RydWN0ICpnZXRfcmN1X3Rhc2tzX3J1ZGVfZ3Bfa3RocmVhZCh2b2lkKTtcbmtlcm5lbC9yY3UvcmN1Lmg6NTYyOnZvaWQgcmN1X3Rhc2tzX3J1ZGVfZ2V0X2dwX2RhdGEoaW50ICpmbGFncywgdW5zaWduZWQgbG9uZyAqZ3Bfc2VxKTtcbmtlcm5lbC9yY3UvcmN1LmgtNTYzLSNlbmRpZiAvLyAjIGlmZGVmIENPTkZJR19UQVNLU19SVURFX1JDVVxuLS1cbmtlcm5lbC9yY3UvcmN1LmgtNTY1LSNpZmRlZiBDT05GSUdfVEFTS1NfUkNVX0dFTkVSSUNcbmtlcm5lbC9yY3UvcmN1Lmg6NTY2OnZvaWQgdGFza3NfY2JsaXN0X2luaXRfZ2VuZXJpYyh2b2lkKTtcbmtlcm5lbC9yY3UvcmN1LmgtNTY3LSNlbHNlIC8qICNpZmRlZiBDT05GSUdfVEFTS1NfUkNVX0dFTkVSSUMgKi9cbi0tXG5rZXJuZWwvcmN1L3JjdS5oPTU4Mj1zdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX3JjdV9kZWZlcih2b2lkKVxuLS1cbmtlcm5lbC9yY3UvcmN1LmgtNTkwLS8qIERyYWluIGFuIG91dGdvaW5nIENQVSYjMzk7cyBkZWZlcnJlZCBTUkNVIGNhbGxiYWNrczsgc2VlIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoKS4gKi9cbmtlcm5lbC9yY3UvcmN1Lmg6NTkxOnZvaWQgc3JjdV9vZmZsaW5lX2RyYWluKGludCBjcHUpO1xua2VybmVsL3JjdS9yY3UuaC01OTItXG4tLVxua2VybmVsL3JjdS9yY3UuaD02MDQ9dW5zaWduZWQgbG9uZyByY3VfZ2V0X2ppZmZpZXNfbGF6eV9mbHVzaCh2b2lkKTtcbmtlcm5lbC9yY3UvcmN1Lmg6NjA1OnZvaWQgcmN1X3NldF9qaWZmaWVzX2xhenlfZmx1c2godW5zaWduZWQgbG9uZyBqKTtcbmtlcm5lbC9yY3UvcmN1LmgtNjA2LSNlbHNlXG4tLVxua2VybmVsL3JjdS9yY3UuaD02MDg9c3RhdGljIGlubGluZSB2b2lkIHJjdV9zZXRfamlmZmllc19sYXp5X2ZsdXNoKHVuc2lnbmVkIGxvbmcgaikgeyB9XG4tLVxua2VybmVsL3JjdS9yY3UuaC02MTEtI2lmIGRlZmluZWQoQ09ORklHX1RSRUVfUkNVKVxua2VybmVsL3JjdS9yY3UuaDo2MTI6dm9pZCByY3V0b3J0dXJlX2dldF9ncF9kYXRhKGludCAqZmxhZ3MsIHVuc2lnbmVkIGxvbmcgKmdwX3NlcSk7XG5rZXJuZWwvcmN1L3JjdS5oOjYxMzp2b2lkIGRvX3RyYWNlX3JjdV90b3J0dXJlX3JlYWQoY29uc3QgY2hhciAqcmN1dG9ydHVyZW5hbWUsXG5rZXJuZWwvcmN1L3JjdS5oLTYxNC1cdFx0XHQgICAgICAgc3RydWN0IHJjdV9oZWFkICpyaHAsXG4tLVxua2VybmVsL3JjdS9yY3UuaC02MTctXHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgYyk7XG5rZXJuZWwvcmN1L3JjdS5oOjYxODp2b2lkIHJjdV9ncF9zZXRfdG9ydHVyZV93YWl0KGludCBkdXJhdGlvbik7XG5rZXJuZWwvcmN1L3JjdS5oOjYxOTp2b2lkIHJjdV9zZXRfZ3B3cmFwX2xhZyh1bnNpZ25lZCBsb25nIGxhZyk7XG5rZXJuZWwvcmN1L3JjdS5oOjYyMDppbnQgcmN1X2dldF9ncHdyYXBfY291bnQoaW50IGNwdSk7XG5rZXJuZWwvcmN1L3JjdS5oLTYyMS0jZWxzZVxua2VybmVsL3JjdS9yY3UuaD02MjI9c3RhdGljIGlubGluZSB2b2lkIHJjdXRvcnR1cmVfZ2V0X2dwX2RhdGEoaW50ICpmbGFncywgdW5zaWduZWQgbG9uZyAqZ3Bfc2VxKVxuLS1cbmtlcm5lbC9yY3UvcmN1LmgtNjI3LSNpZmRlZiBDT05GSUdfUkNVX1RSQUNFXG5rZXJuZWwvcmN1L3JjdS5oOjYyODp2b2lkIGRvX3RyYWNlX3JjdV90b3J0dXJlX3JlYWQoY29uc3QgY2hhciAqcmN1dG9ydHVyZW5hbWUsXG5rZXJuZWwvcmN1L3JjdS5oLTYyOS1cdFx0XHQgICAgICAgc3RydWN0IHJjdV9oZWFkICpyaHAsXG4tLVxua2VybmVsL3JjdS9yY3UuaD02NDE9dW5zaWduZWQgbG9uZyBsb25nIHJjdXRvcnR1cmVfZ2F0aGVyX2dwX3NlcXModm9pZCk7XG5rZXJuZWwvcmN1L3JjdS5oOjY0Mjp2b2lkIHJjdXRvcnR1cmVfZm9ybWF0X2dwX3NlcXModW5zaWduZWQgbG9uZyBsb25nIHNlcXMsIGNoYXIgKmNwLCBzaXplX3QgbGVuKTtcbmtlcm5lbC9yY3UvcmN1LmgtNjQzLVxuLS1cbmtlcm5lbC9yY3UvcmN1Lmg9NjQ2PXN0YXRpYyBpbmxpbmUgdm9pZCBzcmN1dG9ydHVyZV9nZXRfZ3BfZGF0YShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwLCBpbnQgKmZsYWdzLFxuLS1cbmtlcm5lbC9yY3UvcmN1LmgtNjU0LVxua2VybmVsL3JjdS9yY3UuaDo2NTU6dm9pZCBzcmN1dG9ydHVyZV9nZXRfZ3BfZGF0YShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwLCBpbnQgKmZsYWdzLFxua2VybmVsL3JjdS9yY3UuaC02NTYtXHRcdFx0ICAgICB1bnNpZ25lZCBsb25nICpncF9zZXEpO1xuLS1cbmtlcm5lbC9yY3UvcmN1Lmg9NjcwPXN0YXRpYyBpbmxpbmUgdm9pZCByY3VfZ3Bfc2xvd191bnJlZ2lzdGVyKGF0b21pY190ICpyZ3NzcCkgeyB9XG5rZXJuZWwvcmN1L3JjdS5oLTY3MS0jZWxzZSAvKiAjaWZkZWYgQ09ORklHX1RJTllfUkNVICovXG5rZXJuZWwvcmN1L3JjdS5oOjY3Mjpib29sIHJjdV93YXRjaGluZ196ZXJvX2luX2VxcyhpbnQgY3B1LCBpbnQgKnZwKTtcbmtlcm5lbC9yY3UvcmN1LmgtNjczLXVuc2lnbmVkIGxvbmcgcmN1X2dldF9ncF9zZXEodm9pZCk7XG5rZXJuZWwvcmN1L3JjdS5oPTY3ND11bnNpZ25lZCBsb25nIHJjdV9leHBfYmF0Y2hlc19jb21wbGV0ZWQodm9pZCk7XG5rZXJuZWwvcmN1L3JjdS5oOjY3NTpib29sIHJjdV9jaGVja19ib29zdF9mYWlsKHVuc2lnbmVkIGxvbmcgZ3Bfc3RhdGUsIGludCAqY3B1cCk7XG5rZXJuZWwvcmN1L3JjdS5oOjY3Njp2b2lkIHNob3dfcmN1X2dwX2t0aHJlYWRzKHZvaWQpO1xua2VybmVsL3JjdS9yY3UuaDo2Nzc6aW50IHJjdV9nZXRfZ3Bfa3RocmVhZHNfcHJpbyh2b2lkKTtcbmtlcm5lbC9yY3UvcmN1Lmg6Njc4OnZvaWQgcmN1X2Z3ZF9wcm9ncmVzc19jaGVjayh1bnNpZ25lZCBsb25nIGopO1xua2VybmVsL3JjdS9yY3UuaDo2Nzk6dm9pZCByY3VfZm9yY2VfcXVpZXNjZW50X3N0YXRlKHZvaWQpO1xua2VybmVsL3JjdS9yY3UuaC02ODAtZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpyY3VfZ3Bfd3E7XG5rZXJuZWwvcmN1L3JjdS5oPTY4MT1leHRlcm4gc3RydWN0IGt0aHJlYWRfd29ya2VyICpyY3VfZXhwX2dwX2t3b3JrZXI7XG5rZXJuZWwvcmN1L3JjdS5oOjY4Mjp2b2lkIHJjdV9ncF9zbG93X3JlZ2lzdGVyKGF0b21pY190ICpyZ3NzcCk7XG5rZXJuZWwvcmN1L3JjdS5oOjY4Mzp2b2lkIHJjdV9ncF9zbG93X3VucmVnaXN0ZXIoYXRvbWljX3QgKnJnc3NwKTtcbmtlcm5lbC9yY3UvcmN1LmgtNjg0LSNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX1RJTllfUkNVICovXG4tLVxua2VybmVsL3JjdS9yY3UuaD02ODk9dW5zaWduZWQgbG9uZyBzcmN1X2JhdGNoZXNfY29tcGxldGVkKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3ApO1xuLS1cbmtlcm5lbC9yY3UvcmN1LmgtNjkyLSNpZmRlZiBDT05GSUdfUkNVX05PQ0JfQ1BVXG5rZXJuZWwvcmN1L3JjdS5oOjY5Mzp2b2lkIHJjdV9iaW5kX2N1cnJlbnRfdG9fbm9jYih2b2lkKTtcbmtlcm5lbC9yY3UvcmN1LmgtNjk0LSNlbHNlXG5rZXJuZWwvcmN1L3JjdS5oPTY5NT1zdGF0aWMgaW5saW5lIHZvaWQgcmN1X2JpbmRfY3VycmVudF90b19ub2NiKHZvaWQpIHsgfVxuLS1cbmtlcm5lbC9yY3UvcmN1LmgtNjk4LSNpZiAhZGVmaW5lZChDT05GSUdfVElOWV9SQ1UpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19UQVNLU19SQ1UpXG5rZXJuZWwvcmN1L3JjdS5oOjY5OTp2b2lkIHNob3dfcmN1X3Rhc2tzX2NsYXNzaWNfZ3Bfa3RocmVhZCh2b2lkKTtcbmtlcm5lbC9yY3UvcmN1LmgtNzAwLSNlbHNlXG5rZXJuZWwvcmN1L3JjdS5oPTcwMT1zdGF0aWMgaW5saW5lIHZvaWQgc2hvd19yY3VfdGFza3NfY2xhc3NpY19ncF9rdGhyZWFkKHZvaWQpIHt9XG4tLVxua2VybmVsL3JjdS9yY3UuaC03MDMtI2lmICFkZWZpbmVkKENPTkZJR19USU5ZX1JDVSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1RBU0tTX1JVREVfUkNVKVxua2VybmVsL3JjdS9yY3UuaDo3MDQ6dm9pZCBzaG93X3JjdV90YXNrc19ydWRlX2dwX2t0aHJlYWQodm9pZCk7XG5rZXJuZWwvcmN1L3JjdS5oLTcwNS0jZWxzZVxuLS1cbmtlcm5lbC9yY3UvcmN1Lmg9NzEwPXN0YXRpYyBpbmxpbmUgYm9vbCByY3VfY3B1X2JlZW5mdWxseW9ubGluZShpbnQgY3B1KSB7IHJldHVybiB0cnVlOyB9XG5rZXJuZWwvcmN1L3JjdS5oLTcxMS0jZWxzZVxua2VybmVsL3JjdS9yY3UuaDo3MTI6Ym9vbCByY3VfY3B1X2JlZW5mdWxseW9ubGluZShpbnQgY3B1KTtcbmtlcm5lbC9yY3UvcmN1LmgtNzEzLSNlbmRpZlxuLS1cbmtlcm5lbC9yY3UvcmN1LmgtNzE1LSNpZiBkZWZpbmVkKENPTkZJR19SQ1VfU1RBTExfQ09NTU9OKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfUkNVX0NQVV9TVEFMTF9OT1RJRklFUilcbmtlcm5lbC9yY3UvcmN1Lmg6NzE2OmludCByY3Vfc3RhbGxfbm90aWZpZXJfY2FsbF9jaGFpbih1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqdik7XG5rZXJuZWwvcmN1L3JjdS5oLTcxNy0jZWxzZSAvLyAjaWYgZGVmaW5lZChDT05GSUdfUkNVX1NUQUxMX0NPTU1PTikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1JDVV9DUFVfU1RBTExfTk9USUZJRVIpXG5rZXJuZWwvcmN1L3JjdS5oPTcxOD1zdGF0aWMgaW5saW5lIGludCByY3Vfc3RhbGxfbm90aWZpZXJfY2FsbF9jaGFpbih1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqdikgeyByZXR1cm4gTk9USUZZX0RPTkU7IH1cbi0tXG5rZXJuZWwvcmN1L3JjdS5oLTcyMS0jaWZkZWYgQ09ORklHX1RSSVZJQUxfUFJFRU1QVF9SQ1Vcbmtlcm5lbC9yY3UvcmN1Lmg6NzIyOnZvaWQgc3luY2hyb25pemVfcmN1X3RyaXZpYWxfcHJlZW1wdCh2b2lkKTtcbmtlcm5lbC9yY3UvcmN1LmgtNzIzLSNlbmRpZiAvLyAjaWZkZWYgQ09ORklHX1RSSVZJQUxfUFJFRU1QVF9SQ1Vcbi0tXG5rZXJuZWwvcmN1L3JjdS5oLTcyNS0jaWYgZGVmaW5lZChDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1JDVV9CT09TVClcbmtlcm5lbC9yY3UvcmN1Lmg6NzI2OmJvb2wgcmN1X2lzX3Rhc2tfcmN1X2Jvb3N0ZWQodm9pZCk7XG5rZXJuZWwvcmN1L3JjdS5oLTcyNy0jZWxzZSAvLyAjaWYgZGVmaW5lZChDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1JDVV9CT09TVClcbi0tXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy0xOC0vKiBJbml0aWFsaXplIHNpbXBsZSBjYWxsYmFjayBsaXN0LiAqL1xua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmM6MTk6dm9pZCByY3VfY2JsaXN0X2luaXQoc3RydWN0IHJjdV9jYmxpc3QgKnJjbHApXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy0yMC17XG4tLVxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtMjgtICovXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzoyOTp2b2lkIHJjdV9jYmxpc3RfZW5xdWV1ZShzdHJ1Y3QgcmN1X2NibGlzdCAqcmNscCwgc3RydWN0IHJjdV9oZWFkICpyaHApXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy0zMC17XG4tLVxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtNDMtICovXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzo0NDp2b2lkIHJjdV9jYmxpc3RfZmx1c2hfZW5xdWV1ZShzdHJ1Y3QgcmN1X2NibGlzdCAqZHJjbHAsXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy00NS1cdFx0XHQgICAgICBzdHJ1Y3QgcmN1X2NibGlzdCAqc3JjbHAsXG4tLVxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmM9MTM5PXN0YXRpYyB2b2lkIHJjdV9zZWdjYmxpc3RfaW5jX3NlZ2xlbihzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHAsIGludCBzZWcpXG4tLVxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtMjEwLSAqL1xua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmM6MjExOnZvaWQgcmN1X3NlZ2NibGlzdF9hZGRfbGVuKHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscCwgbG9uZyB2KVxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtMjEyLXtcbi0tXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy0yMjktICovXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzoyMzA6dm9pZCByY3Vfc2VnY2JsaXN0X2luY19sZW4oc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwKVxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtMjMxLXtcbi0tXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy0yMzctICovXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzoyMzg6dm9pZCByY3Vfc2VnY2JsaXN0X2luaXQoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwKVxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtMjM5LXtcbi0tXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy0yNTYtICovXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzoyNTc6dm9pZCByY3Vfc2VnY2JsaXN0X2Rpc2FibGUoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwKVxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtMjU4LXtcbi0tXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy0yNjctICovXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzoyNjg6Ym9vbCByY3Vfc2VnY2JsaXN0X3JlYWR5X2NicyhzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHApXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy0yNjkte1xuLS1cbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTI3Ny0gKi9cbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jOjI3ODpib29sIHJjdV9zZWdjYmxpc3RfcGVuZF9jYnMoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwKVxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtMjc5LXtcbi0tXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYz0zMDI9c3RydWN0IHJjdV9oZWFkICpyY3Vfc2VnY2JsaXN0X2ZpcnN0X3BlbmRfY2Ioc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwKVxuLS1cbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTMxMi0gKi9cbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jOjMxMzpib29sIHJjdV9zZWdjYmxpc3RfbmV4dGdwKHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscCwgc3RydWN0IHJjdV9ncF9zZXEgKmdzcClcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTMxNC17XG4tLVxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtMzI5LSAqL1xua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmM6MzMwOnZvaWQgcmN1X3NlZ2NibGlzdF9lbnF1ZXVlKHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscCxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTMzMS1cdFx0XHQgICBzdHJ1Y3QgcmN1X2hlYWQgKnJocClcbi0tXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy0zNDktICovXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzozNTA6Ym9vbCByY3Vfc2VnY2JsaXN0X2VudHJhaW4oc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwLFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtMzUxLVx0XHRcdCAgIHN0cnVjdCByY3VfaGVhZCAqcmhwKVxuLS1cbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTM3NC0gKi9cbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jOjM3NTp2b2lkIHJjdV9zZWdjYmxpc3RfZXh0cmFjdF9kb25lX2NicyhzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHAsXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy0zNzYtXHRcdFx0XHQgICAgc3RydWN0IHJjdV9jYmxpc3QgKnJjbHApXG4tLVxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtMzk5LSAqL1xua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmM6NDAwOnZvaWQgcmN1X3NlZ2NibGlzdF9leHRyYWN0X3BlbmRfY2JzKHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscCxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTQwMS1cdFx0XHRcdCAgICBzdHJ1Y3QgcmN1X2NibGlzdCAqcmNscClcbi0tXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy00MjEtICovXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzo0MjI6dm9pZCByY3Vfc2VnY2JsaXN0X2luc2VydF9jb3VudChzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHAsXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy00MjMtXHRcdFx0XHRzdHJ1Y3QgcmN1X2NibGlzdCAqcmNscClcbi0tXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy00MzEtICovXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzo0MzI6dm9pZCByY3Vfc2VnY2JsaXN0X2luc2VydF9kb25lX2NicyhzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHAsXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy00MzMtXHRcdFx0XHQgICBzdHJ1Y3QgcmN1X2NibGlzdCAqcmNscClcbi0tXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy00NTQtICovXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzo0NTU6dm9pZCByY3Vfc2VnY2JsaXN0X2luc2VydF9wZW5kX2NicyhzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHAsXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy00NTYtXHRcdFx0XHQgICBzdHJ1Y3QgcmN1X2NibGlzdCAqcmNscClcbi0tXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYz00NzM9c3RhdGljIHZvaWQgcmN1X3NlZ2NibGlzdF9hZHZhbmNlX2NvbXBhY3Qoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwLCBpbnQgaSlcbi0tXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy01MDAtICovXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzo1MDE6dm9pZCByY3Vfc2VnY2JsaXN0X2FkdmFuY2Uoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwKVxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtNTAyLXtcbi0tXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy01NDMtICovXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzo1NDQ6Ym9vbCByY3Vfc2VnY2JsaXN0X2FjY2VsZXJhdGUoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwLCBzdHJ1Y3QgcmN1X2dwX3NlcSAqZ3NwKVxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtNTQ1LXtcbi0tXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy02MTMtICovXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzo2MTQ6dm9pZCByY3Vfc2VnY2JsaXN0X21lcmdlKHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpkc3RfcnNjbHAsXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy02MTUtXHRcdFx0IHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpzcmNfcnNjbHApXG4tLVxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtNjQxLVxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmM6NjQyOnZvaWQgc3JjdV9zZWdjYmxpc3RfYWR2YW5jZShzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHAsIHVuc2lnbmVkIGxvbmcgc2VxKVxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtNjQzLXtcbi0tXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy02NzMtICovXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzo2NzQ6Ym9vbCBzcmN1X3NlZ2NibGlzdF9hY2NlbGVyYXRlKHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscCwgdW5zaWduZWQgbG9uZyBzZXEpXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy02NzUte1xuLS1cbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oPTIxPWxvbmcgcmN1X3NlZ2NibGlzdF9uX3NlZ21lbnRfY2JzKHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscCk7XG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaC0yMi1cbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oOjIzOnZvaWQgcmN1X2NibGlzdF9pbml0KHN0cnVjdCByY3VfY2JsaXN0ICpyY2xwKTtcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oOjI0OnZvaWQgcmN1X2NibGlzdF9lbnF1ZXVlKHN0cnVjdCByY3VfY2JsaXN0ICpyY2xwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCk7XG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaDoyNTp2b2lkIHJjdV9jYmxpc3RfZmx1c2hfZW5xdWV1ZShzdHJ1Y3QgcmN1X2NibGlzdCAqZHJjbHAsXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaC0yNi1cdFx0XHQgICAgICBzdHJ1Y3QgcmN1X2NibGlzdCAqc3JjbHAsXG4tLVxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0Lmg9MTEyPXN0YXRpYyBpbmxpbmUgYm9vbCByY3Vfc2VnY2JsaXN0X3NlZ2VtcHR5KHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscCwgaW50IHNlZylcbi0tXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaC0xMTgtXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaDoxMTk6dm9pZCByY3Vfc2VnY2JsaXN0X2luY19sZW4oc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwKTtcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oOjEyMDp2b2lkIHJjdV9zZWdjYmxpc3RfYWRkX2xlbihzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHAsIGxvbmcgdik7XG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaDoxMjE6dm9pZCByY3Vfc2VnY2JsaXN0X2luaXQoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwKTtcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oOjEyMjp2b2lkIHJjdV9zZWdjYmxpc3RfZGlzYWJsZShzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHApO1xua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0Lmg6MTIzOmJvb2wgcmN1X3NlZ2NibGlzdF9yZWFkeV9jYnMoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwKTtcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oOjEyNDpib29sIHJjdV9zZWdjYmxpc3RfcGVuZF9jYnMoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwKTtcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oLTEyNS1zdHJ1Y3QgcmN1X2hlYWQgKnJjdV9zZWdjYmxpc3RfZmlyc3RfY2Ioc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwKTtcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oPTEyNj1zdHJ1Y3QgcmN1X2hlYWQgKnJjdV9zZWdjYmxpc3RfZmlyc3RfcGVuZF9jYihzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHApO1xua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0Lmg6MTI3OmJvb2wgcmN1X3NlZ2NibGlzdF9uZXh0Z3Aoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwLCBzdHJ1Y3QgcmN1X2dwX3NlcSAqZ3NwKTtcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oOjEyODp2b2lkIHJjdV9zZWdjYmxpc3RfZW5xdWV1ZShzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHAsXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaC0xMjktXHRcdFx0ICAgc3RydWN0IHJjdV9oZWFkICpyaHApO1xua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0Lmg6MTMwOmJvb2wgcmN1X3NlZ2NibGlzdF9lbnRyYWluKHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscCxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oLTEzMS1cdFx0XHQgICBzdHJ1Y3QgcmN1X2hlYWQgKnJocCk7XG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaDoxMzI6dm9pZCByY3Vfc2VnY2JsaXN0X2V4dHJhY3RfZG9uZV9jYnMoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwLFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmgtMTMzLVx0XHRcdFx0ICAgIHN0cnVjdCByY3VfY2JsaXN0ICpyY2xwKTtcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oOjEzNDp2b2lkIHJjdV9zZWdjYmxpc3RfZXh0cmFjdF9wZW5kX2NicyhzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHAsXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaC0xMzUtXHRcdFx0XHQgICAgc3RydWN0IHJjdV9jYmxpc3QgKnJjbHApO1xua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0Lmg6MTM2OnZvaWQgcmN1X3NlZ2NibGlzdF9pbnNlcnRfY291bnQoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwLFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmgtMTM3LVx0XHRcdFx0c3RydWN0IHJjdV9jYmxpc3QgKnJjbHApO1xua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0Lmg6MTM4OnZvaWQgcmN1X3NlZ2NibGlzdF9pbnNlcnRfZG9uZV9jYnMoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwLFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmgtMTM5LVx0XHRcdFx0ICAgc3RydWN0IHJjdV9jYmxpc3QgKnJjbHApO1xua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0Lmg6MTQwOnZvaWQgcmN1X3NlZ2NibGlzdF9pbnNlcnRfcGVuZF9jYnMoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwLFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmgtMTQxLVx0XHRcdFx0ICAgc3RydWN0IHJjdV9jYmxpc3QgKnJjbHApO1xua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0Lmg6MTQyOnZvaWQgcmN1X3NlZ2NibGlzdF9hZHZhbmNlKHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscCk7XG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaDoxNDM6Ym9vbCByY3Vfc2VnY2JsaXN0X2FjY2VsZXJhdGUoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwLCBzdHJ1Y3QgcmN1X2dwX3NlcSAqZ3NwKTtcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oOjE0NDp2b2lkIHJjdV9zZWdjYmxpc3RfbWVyZ2Uoc3RydWN0IHJjdV9zZWdjYmxpc3QgKmRzdF9yc2NscCxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oLTE0NS1cdFx0XHQgc3RydWN0IHJjdV9zZWdjYmxpc3QgKnNyY19yc2NscCk7XG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaDoxNDY6dm9pZCBzcmN1X3NlZ2NibGlzdF9hZHZhbmNlKHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscCwgdW5zaWduZWQgbG9uZyBzZXEpO1xua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0Lmg6MTQ3OmJvb2wgc3JjdV9zZWdjYmxpc3RfYWNjZWxlcmF0ZShzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHAsIHVuc2lnbmVkIGxvbmcgc2VxKTtcbi0tXG5rZXJuZWwvcmN1L3NyY3V0aW55LmM9MzU9c3RhdGljIGludCBpbml0X3NyY3Vfc3RydWN0X2ZpZWxkcyhzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbi0tXG5rZXJuZWwvcmN1L3NyY3V0aW55LmMtNTUtXG5rZXJuZWwvcmN1L3NyY3V0aW55LmM6NTY6aW50IGluaXRfc3JjdV9zdHJ1Y3RfbG9ja2RlcChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgY29uc3QgY2hhciAqbmFtZSxcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy01Ny1cdFx0ICAgICBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSlcbi0tXG5rZXJuZWwvcmN1L3NyY3V0aW55LmM9NjQ9RVhQT1JUX1NZTUJPTF9HUEwoaW5pdF9zcmN1X3N0cnVjdF9sb2NrZGVwKTtcbi0tXG5rZXJuZWwvcmN1L3NyY3V0aW55LmMtNzUtICovXG5rZXJuZWwvcmN1L3NyY3V0aW55LmM6NzY6aW50IGluaXRfc3JjdV9zdHJ1Y3RfZ2VuZXJpYyhzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy03Ny17XG4tLVxua2VybmVsL3JjdS9zcmN1dGlueS5jPTgwPUVYUE9SVF9TWU1CT0xfR1BMKGluaXRfc3JjdV9zdHJ1Y3RfZ2VuZXJpYyk7XG4tLVxua2VybmVsL3JjdS9zcmN1dGlueS5jLTkwLSAqL1xua2VybmVsL3JjdS9zcmN1dGlueS5jOjkxOnZvaWQgY2xlYW51cF9zcmN1X3N0cnVjdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy05Mi17XG4tLVxua2VybmVsL3JjdS9zcmN1dGlueS5jPTEwOD1FWFBPUlRfU1lNQk9MX0dQTChjbGVhbnVwX3NyY3Vfc3RydWN0KTtcbi0tXG5rZXJuZWwvcmN1L3NyY3V0aW55LmMtMTEzLSAqL1xua2VybmVsL3JjdS9zcmN1dGlueS5jOjExNDp2b2lkIF9fc3JjdV9yZWFkX3VubG9jayhzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgaW50IGlkeClcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy0xMTUte1xuLS1cbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYz0xMjU9RVhQT1JUX1NZTUJPTF9HUEwoX19zcmN1X3JlYWRfdW5sb2NrKTtcbi0tXG5rZXJuZWwvcmN1L3NyY3V0aW55LmMtMTMxLSAqL1xua2VybmVsL3JjdS9zcmN1dGlueS5jOjEzMjp2b2lkIHNyY3VfZHJpdmVfZ3Aoc3RydWN0IHdvcmtfc3RydWN0ICp3cClcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy0xMzMte1xuLS1cbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYz0xOTE9RVhQT1JUX1NZTUJPTF9HUEwoc3JjdV9kcml2ZV9ncCk7XG4tLVxua2VybmVsL3JjdS9zcmN1dGlueS5jLTE5Ny0gKi9cbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYzoxOTg6dm9pZCBzcmN1X3RpbnlfaXJxX3dvcmsoc3RydWN0IGlycV93b3JrICppcnFfd29yaylcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy0xOTkte1xuLS1cbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYz0yNDg9c3RhdGljIHZvaWQgX19zcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBib29sIGd1YXJkKVxuLS1cbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy0yNjgtLyogT25seSB0aGUgaXJxX3dvcmsgZHJhaW4gY2FuIGJlIHJlLWZlZCBieSBpdHMgb3duIHJlLWlzc3VlOyBzZWUgVHJlZSBTUkNVLiAqL1xua2VybmVsL3JjdS9zcmN1dGlueS5jOjI2OTp2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdylcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy0yNzAte1xuLS1cbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYz0yNzM9RVhQT1JUX1NZTUJPTF9HUEwoc3JjdV9kZWZlcl9kcmFpbik7XG5rZXJuZWwvcmN1L3NyY3V0aW55LmMtMjc0LVxua2VybmVsL3JjdS9zcmN1dGlueS5jOjI3NTp2b2lkIGNhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsXG5rZXJuZWwvcmN1L3NyY3V0aW55LmMtMjc2LVx0ICAgICAgIHJjdV9jYWxsYmFja190IGZ1bmMpXG4tLVxua2VybmVsL3JjdS9zcmN1dGlueS5jPTI5Nj1FWFBPUlRfU1lNQk9MX0dQTChjYWxsX3NyY3UpO1xuLS1cbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy0zMDAtICovXG5rZXJuZWwvcmN1L3NyY3V0aW55LmM6MzAxOnZvaWQgc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy0zMDIte1xuLS1cbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYz0zMjM9RVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfc3JjdSk7XG4tLVxua2VybmVsL3JjdS9zcmN1dGlueS5jLTMyNS0vKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzLCB0aGVuIHdhaXQgZm9yIGFsbCBpbi1mbGlnaHQgb25lcy4gKi9cbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYzozMjY6dm9pZCBzcmN1X2JhcnJpZXIoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG5rZXJuZWwvcmN1L3NyY3V0aW55LmMtMzI3LXtcbi0tXG5rZXJuZWwvcmN1L3NyY3V0aW55LmM9MzY1PUVYUE9SVF9TWU1CT0xfR1BMKHN0YXJ0X3BvbGxfc3luY2hyb25pemVfc3JjdSk7XG4tLVxua2VybmVsL3JjdS9zcmN1dGlueS5jLTM2OS0gKi9cbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYzozNzA6Ym9vbCBwb2xsX3N0YXRlX3N5bmNocm9uaXplX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHVuc2lnbmVkIGxvbmcgY29va2llKVxua2VybmVsL3JjdS9zcmN1dGlueS5jLTM3MS17XG4tLVxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTMwNj1fX2luaXRfc3JjdV9zdHJ1Y3RfY29tbW9uKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSlcbi0tXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMzEzLVxua2VybmVsL3JjdS9zcmN1dHJlZS5jOjMxNDppbnQgaW5pdF9zcmN1X3N0cnVjdF9sb2NrZGVwKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBjb25zdCBjaGFyICpuYW1lLFxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTMxNS1cdFx0XHQgICAgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KVxuLS1cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYz0zMjA9RVhQT1JUX1NZTUJPTF9HUEwoaW5pdF9zcmN1X3N0cnVjdF9sb2NrZGVwKTtcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0zMjEtXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM6MzIyOmludCBfX2luaXRfc3JjdV9zdHJ1Y3RfZmFzdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMzIzLXtcbi0tXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM9MzI3PUVYUE9SVF9TWU1CT0xfR1BMKF9faW5pdF9zcmN1X3N0cnVjdF9mYXN0KTtcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0zMjgtXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM6MzI5OmludCBfX2luaXRfc3JjdV9zdHJ1Y3RfZmFzdF91cGRvd24oc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIGNvbnN0IGNoYXIgKm5hbWUsXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMzMwLVx0XHRcdFx0ICAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpXG4tLVxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTMzNT1FWFBPUlRfU1lNQk9MX0dQTChfX2luaXRfc3JjdV9zdHJ1Y3RfZmFzdF91cGRvd24pO1xuLS1cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0zNDktICovXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM6MzUwOmludCBpbml0X3NyY3Vfc3RydWN0X2dlbmVyaWMoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMzUxLXtcbi0tXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM9MzU1PUVYUE9SVF9TWU1CT0xfR1BMKGluaXRfc3JjdV9zdHJ1Y3RfZ2VuZXJpYyk7XG4tLVxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTM2Ni0gKi9cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYzozNjc6aW50IGluaXRfc3JjdV9zdHJ1Y3RfZmFzdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0zNjgte1xuLS1cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYz0zNzI9RVhQT1JUX1NZTUJPTF9HUEwoaW5pdF9zcmN1X3N0cnVjdF9mYXN0KTtcbi0tXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMzg0LSAqL1xua2VybmVsL3JjdS9zcmN1dHJlZS5jOjM4NTppbnQgaW5pdF9zcmN1X3N0cnVjdF9mYXN0X3VwZG93bihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0zODYte1xuLS1cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYz02OTg9c3RhdGljIHVuc2lnbmVkIGxvbmcgc3JjdV9nZXRfZGVsYXkoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4tLVxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTcyOS0gKi9cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYzo3MzA6dm9pZCBjbGVhbnVwX3NyY3Vfc3RydWN0KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTczMS17XG4tLVxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTc4ND1FWFBPUlRfU1lNQk9MX0dQTChjbGVhbnVwX3NyY3Vfc3RydWN0KTtcbi0tXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtNzg4LSAqL1xua2VybmVsL3JjdS9zcmN1dHJlZS5jOjc4OTp2b2lkIF9fc3JjdV9jaGVja19yZWFkX2ZsYXZvcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgaW50IHJlYWRfZmxhdm9yKVxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTc5MC17XG4tLVxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTgxMj1FWFBPUlRfU1lNQk9MX0dQTChfX3NyY3VfY2hlY2tfcmVhZF9mbGF2b3IpO1xuLS1cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy04MTktICovXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM6ODIwOmludCBfX3NyY3VfcmVhZF9sb2NrKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTgyMS17XG4tLVxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTgyOD1FWFBPUlRfU1lNQk9MX0dQTChfX3NyY3VfcmVhZF9sb2NrKTtcbi0tXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtODM0LSAqL1xua2VybmVsL3JjdS9zcmN1dHJlZS5jOjgzNTp2b2lkIF9fc3JjdV9yZWFkX3VubG9jayhzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgaW50IGlkeClcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy04MzYte1xuLS1cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYz04NDA9RVhQT1JUX1NZTUJPTF9HUEwoX19zcmN1X3JlYWRfdW5sb2NrKTtcbi0tXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtODQ4LSAqL1xua2VybmVsL3JjdS9zcmN1dHJlZS5jOjg0OTppbnQgX19zcmN1X3JlYWRfbG9ja19ubWlzYWZlKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTg1MC17XG4tLVxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTg1OD1FWFBPUlRfU1lNQk9MX0dQTChfX3NyY3VfcmVhZF9sb2NrX25taXNhZmUpO1xuLS1cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy04NjQtICovXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM6ODY1OnZvaWQgX19zcmN1X3JlYWRfdW5sb2NrX25taXNhZmUoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIGludCBpZHgpXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtODY2LXtcbi0tXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM9MTU2ND1zdGF0aWMgdm9pZCBzcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpXG4tLVxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE1NzMtICovXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM6MTU3NDp2b2lkIHNyY3Vfb2ZmbGluZV9kcmFpbihpbnQgY3B1KVxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE1NzUte1xuLS1cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0xNjAxLSAqL1xua2VybmVsL3JjdS9zcmN1dHJlZS5jOjE2MDI6dm9pZCBjYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE2MDMtXHQgICAgICAgcmN1X2NhbGxiYWNrX3QgZnVuYylcbi0tXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM9MTYxMj1zdGF0aWMgdm9pZCBfX3N5bmNocm9uaXplX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIGJvb2wgZG9fbm9ybSlcbi0tXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMTY1My0gKi9cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYzoxNjU0OnZvaWQgc3luY2hyb25pemVfc3JjdV9leHBlZGl0ZWQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMTY1NS17XG4tLVxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTE2NTg9RVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfc3JjdV9leHBlZGl0ZWQpO1xuLS1cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0xNzA4LSAqL1xua2VybmVsL3JjdS9zcmN1dHJlZS5jOjE3MDk6dm9pZCBzeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE3MTAte1xuLS1cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYz0xNzUxPUVYUE9SVF9TWU1CT0xfR1BMKHN0YXJ0X3BvbGxfc3luY2hyb25pemVfc3JjdSk7XG4tLVxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE3NzctICovXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM6MTc3ODpib29sIHBvbGxfc3RhdGVfc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgdW5zaWduZWQgbG9uZyBjb29raWUpXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMTc3OS17XG4tLVxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTE4MTM9c3RhdGljIHZvaWQgc3JjdV9iYXJyaWVyX29uZV9jcHUoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCBzcmN1X2RhdGEgKnNkcClcbi0tXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMTgzMC0gKi9cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYzoxODMxOnZvaWQgc3JjdV9iYXJyaWVyKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE4MzIte1xuLS1cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYz0xODc3PXN0YXRpYyB2b2lkIHNyY3VfZXhwZWRpdGVfY3VycmVudF9jYihzdHJ1Y3QgcmN1X2hlYWQgKnJocClcbi0tXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMTkwOC0gKi9cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYzoxOTA5OnZvaWQgc3JjdV9leHBlZGl0ZV9jdXJyZW50KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE5MTAte1xuLS1cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYz0yMTM3PXN0YXRpYyB2b2lkIHNyY3VfaXJxX3dvcmsoc3RydWN0IGlycV93b3JrICp3b3JrKVxuLS1cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0yMTUzLVxua2VybmVsL3JjdS9zcmN1dHJlZS5jOjIxNTQ6dm9pZCBzcmN1dG9ydHVyZV9nZXRfZ3BfZGF0YShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgaW50ICpmbGFncyxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0yMTU1LVx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyAqZ3Bfc2VxKVxuLS1cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYz0yMTYyPXN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc3JjdV9zaXplX3N0YXRlX25hbWVbXSA9IHtcbi0tXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMjE3NC1cbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYzoyMTc1OnZvaWQgc3JjdV90b3J0dXJlX3N0YXRzX3ByaW50KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBjaGFyICp0dCwgY2hhciAqdGYpXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMjE3Ni17XG4tLVxua2VybmVsL3JjdS9zeW5jLmM9MTM9ZW51bSB7IEdQX0lETEUgPSAwLCBHUF9FTlRFUiwgR1BfUEFTU0VELCBHUF9FWElULCBHUF9SRVBMQVkgfTtcbi0tXG5rZXJuZWwvcmN1L3N5bmMuYy0yMC0gKi9cbmtlcm5lbC9yY3Uvc3luYy5jOjIxOnZvaWQgcmN1X3N5bmNfaW5pdChzdHJ1Y3QgcmN1X3N5bmMgKnJzcClcbmtlcm5lbC9yY3Uvc3luYy5jLTIyLXtcbi0tXG5rZXJuZWwvcmN1L3N5bmMuYz01Nz1zdGF0aWMgdm9pZCByY3Vfc3luY19mdW5jKHN0cnVjdCByY3VfaGVhZCAqcmhwKVxuLS1cbmtlcm5lbC9yY3Uvc3luYy5jLTEwNC0gKi9cbmtlcm5lbC9yY3Uvc3luYy5jOjEwNTp2b2lkIHJjdV9zeW5jX2VudGVyKHN0cnVjdCByY3Vfc3luYyAqcnNwKVxua2VybmVsL3JjdS9zeW5jLmMtMTA2LXtcbi0tXG5rZXJuZWwvcmN1L3N5bmMuYy0xNTEtICovXG5rZXJuZWwvcmN1L3N5bmMuYzoxNTI6dm9pZCByY3Vfc3luY19leGl0KHN0cnVjdCByY3Vfc3luYyAqcnNwKVxua2VybmVsL3JjdS9zeW5jLmMtMTUzLXtcbi0tXG5rZXJuZWwvcmN1L3N5bmMuYy0xNzItICovXG5rZXJuZWwvcmN1L3N5bmMuYzoxNzM6dm9pZCByY3Vfc3luY19kdG9yKHN0cnVjdCByY3Vfc3luYyAqcnNwKVxua2VybmVsL3JjdS9zeW5jLmMtMTc0LXtcbi0tXG5rZXJuZWwvcmN1L3Rhc2tzLmg9MTAxNT1zdGF0aWMgdm9pZCByY3VfdGFza3NfcGVydGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIHN0cnVjdCBsaXN0X2hlYWQgKmhvcClcbi0tXG5rZXJuZWwvcmN1L3Rhc2tzLmgtMTAyNC1cbmtlcm5lbC9yY3UvdGFza3MuaDoxMDI1OnZvaWQgY2FsbF9yY3VfdGFza3Moc3RydWN0IHJjdV9oZWFkICpyaHAsIHJjdV9jYWxsYmFja190IGZ1bmMpO1xua2VybmVsL3JjdS90YXNrcy5oLTEwMjYtREVGSU5FX1JDVV9UQVNLUyhyY3VfdGFza3MsIHJjdV90YXNrc193YWl0X2dwLCBjYWxsX3JjdV90YXNrcywgXCYjMzQ7UkNVIFRhc2tzXCYjMzQ7KTtcbi0tXG5rZXJuZWwvcmN1L3Rhc2tzLmg9MTE2MT1zdGF0aWMgdm9pZCB0YXNrc19yY3VfZXhpdF9zdGFsbChzdHJ1Y3QgdGltZXJfbGlzdCAqdW51c2VkKVxuLS1cbmtlcm5lbC9yY3UvdGFza3MuaC0xMTkzLSAqL1xua2VybmVsL3JjdS90YXNrcy5oOjExOTQ6dm9pZCBjYWxsX3JjdV90YXNrcyhzdHJ1Y3QgcmN1X2hlYWQgKnJocCwgcmN1X2NhbGxiYWNrX3QgZnVuYylcbmtlcm5lbC9yY3UvdGFza3MuaC0xMTk1LXtcbi0tXG5rZXJuZWwvcmN1L3Rhc2tzLmg9MTE5OD1FWFBPUlRfU1lNQk9MX0dQTChjYWxsX3JjdV90YXNrcyk7XG4tLVxua2VybmVsL3JjdS90YXNrcy5oLTEyMTctICovXG5rZXJuZWwvcmN1L3Rhc2tzLmg6MTIxODp2b2lkIHN5bmNocm9uaXplX3JjdV90YXNrcyh2b2lkKVxua2VybmVsL3JjdS90YXNrcy5oLTEyMTkte1xuLS1cbmtlcm5lbC9yY3UvdGFza3MuaD0xMjIyPUVYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3JjdV90YXNrcyk7XG4tLVxua2VybmVsL3JjdS90YXNrcy5oLTEyMjktICovXG5rZXJuZWwvcmN1L3Rhc2tzLmg6MTIzMDp2b2lkIHJjdV9iYXJyaWVyX3Rhc2tzKHZvaWQpXG5rZXJuZWwvcmN1L3Rhc2tzLmgtMTIzMS17XG4tLVxua2VybmVsL3JjdS90YXNrcy5oPTEyMzk9c3RhdGljIGludCBfX2luaXQgcmN1X3NwYXduX3Rhc2tzX2t0aHJlYWQodm9pZClcbi0tXG5rZXJuZWwvcmN1L3Rhc2tzLmgtMTI1NS0jaWYgIWRlZmluZWQoQ09ORklHX1RJTllfUkNVKVxua2VybmVsL3JjdS90YXNrcy5oOjEyNTY6dm9pZCBzaG93X3JjdV90YXNrc19jbGFzc2ljX2dwX2t0aHJlYWQodm9pZClcbmtlcm5lbC9yY3UvdGFza3MuaC0xMjU3LXtcbi0tXG5rZXJuZWwvcmN1L3Rhc2tzLmg9MTI2MD1FWFBPUlRfU1lNQk9MX0dQTChzaG93X3JjdV90YXNrc19jbGFzc2ljX2dwX2t0aHJlYWQpO1xua2VybmVsL3JjdS90YXNrcy5oLTEyNjEtXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTM0NAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6CgoqKlJDVSBJbnZlc3RpZ2F0aW9uOiBGb2N1cyBTaGlmdCoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZGl2aW5nIGludG8gUkNVIG1vZGlmaWNhdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGFueSBjaGFuZ2VzIHRvIGBjYWxsX3JjdV90YXNrc2Agb3IgYGNhbGxfcmN1X3Rhc2tzX3RyYWNlYC4gVGhvc2UgYXJlIGtleSBmdW5jdGlvbnMgd2hlbiB5b3UmIzM5O3JlIGxvb2tpbmcgYXQgc2NoZWR1bGluZyBhbmQgdHJhY2luZyBpbXBhY3RzLiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiBpdCBsb29rcyBsaWtlIHRob3NlIHR3byBmdW5jdGlvbnMgYXJlIHVudG91Y2hlZC4gVGhhdCBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG1vZGlmaWNhdGlvbnMgZGlyZWN0bHkgd2l0aGluIGBjYWxsX3JjdWAgYW5kIGBjYWxsX3NyY3VgLgoKQWxyaWdodCwgYSBtb3JlIGdyYW51bGFyIGFuYWx5c2lzIGlzIG5lZWRlZC4gTXkgbmV4dCBzdGVwIGlzIHRvIGhlYWQgZGlyZWN0bHkgdG8gYGtlcm5lbC9yY3UvdHJlZS5jYCwgYmVjYXVzZSB0aGF0JiMzOTtzIHdoZXJlIGBjYWxsX3JjdWAgbGl2ZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgY2hhbmdlZCBpbiB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgcm9vdCBjYXVzZSBsaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDEzOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14odm9pZHxpbnR8Ym9vbCkgW2EtejAtOV9dJiM0MztcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvcmN1L3RyZWUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvcmN1L3RyZWUuYz04MT1zdGF0aWMgREVGSU5FX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQoc3RydWN0IHJjdV9kYXRhLCByY3VfZGF0YSkgPSB7XG4tLVxua2VybmVsL3JjdS90cmVlLmMtODQtXG5rZXJuZWwvcmN1L3RyZWUuYzo4NTppbnQgcmN1X2dldF9ncHdyYXBfY291bnQoaW50IGNwdSlcbmtlcm5lbC9yY3UvdHJlZS5jLTg2LXtcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYz0xOTU9bW9kdWxlX3BhcmFtKHJjdV91bmxvY2tfZGVsYXksIGludCwgMDQ0NCk7XG4tLVxua2VybmVsL3JjdS90cmVlLmMtMTk4LS8qIFJldHJpZXZlIFJDVSBrdGhyZWFkcyBwcmlvcml0eSBmb3IgcmN1dG9ydHVyZSAqL1xua2VybmVsL3JjdS90cmVlLmM6MTk5OmludCByY3VfZ2V0X2dwX2t0aHJlYWRzX3ByaW8odm9pZClcbmtlcm5lbC9yY3UvdHJlZS5jLTIwMC17XG4tLVxua2VybmVsL3JjdS90cmVlLmM9MjMwPXN0YXRpYyBsb25nIHJjdV9nZXRfbl9jYnNfY3B1KGludCBjcHUpXG4tLVxua2VybmVsL3JjdS90cmVlLmMtMjYyLSAqL1xua2VybmVsL3JjdS90cmVlLmM6MjYzOnZvaWQgcmN1X3NvZnRpcnFfcXModm9pZClcbmtlcm5lbC9yY3UvdHJlZS5jLTI2NC17XG4tLVxua2VybmVsL3JjdS90cmVlLmM9MzEzPXN0YXRpYyBib29sIHJjdV93YXRjaGluZ19zbmFwX3N0b3BwZWRfc2luY2Uoc3RydWN0IHJjdV9kYXRhICpyZHAsIGludCBzbmFwKVxuLS1cbmtlcm5lbC9yY3UvdHJlZS5jLTMzMi0gKi9cbmtlcm5lbC9yY3UvdHJlZS5jOjMzMzpib29sIHJjdV93YXRjaGluZ196ZXJvX2luX2VxcyhpbnQgY3B1LCBpbnQgKnZwKVxua2VybmVsL3JjdS90cmVlLmMtMzM0LXtcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYz01NDQ9c3RhdGljIHN0cnVjdCByY3Vfbm9kZSAqcmN1X2dldF9yb290KHZvaWQpXG4tLVxua2VybmVsL3JjdS90cmVlLmMtNTUxLSAqL1xua2VybmVsL3JjdS90cmVlLmM6NTUyOnZvaWQgcmN1dG9ydHVyZV9nZXRfZ3BfZGF0YShpbnQgKmZsYWdzLCB1bnNpZ25lZCBsb25nICpncF9zZXEpXG5rZXJuZWwvcmN1L3RyZWUuYy01NTMte1xuLS1cbmtlcm5lbC9yY3UvdHJlZS5jPTU2Nj1FWFBPUlRfU1lNQk9MX0dQTChyY3V0b3J0dXJlX2dhdGhlcl9ncF9zZXFzKTtcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYy01NjgtLyogRm9ybWF0IGdyYWNlLXBlcmlvZCBzZXF1ZW5jZSBudW1iZXJzIGZvciByY3V0b3J0dXJlIGRpYWdub3N0aWNzLiAqL1xua2VybmVsL3JjdS90cmVlLmM6NTY5OnZvaWQgcmN1dG9ydHVyZV9mb3JtYXRfZ3Bfc2Vxcyh1bnNpZ25lZCBsb25nIGxvbmcgc2VxcywgY2hhciAqY3AsIHNpemVfdCBsZW4pXG5rZXJuZWwvcmN1L3RyZWUuYy01NzAte1xuLS1cbmtlcm5lbC9yY3UvdHJlZS5jPTYwMT1ub2luc3RyIHZvaWQgcmN1X2lycV93b3JrX3Jlc2NoZWQodm9pZClcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYy02MjItICovXG5rZXJuZWwvcmN1L3RyZWUuYzo2MjM6dm9pZCByY3VfaXJxX2V4aXRfY2hlY2tfcHJlZW1wdCh2b2lkKVxua2VybmVsL3JjdS90cmVlLmMtNjI0LXtcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYy02NjMtICovXG5rZXJuZWwvcmN1L3RyZWUuYzo2NjQ6dm9pZCBfX3JjdV9pcnFfZW50ZXJfY2hlY2tfdGljayh2b2lkKVxua2VybmVsL3JjdS90cmVlLmMtNjY1LXtcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYz02OTg9Tk9LUFJPQkVfU1lNQk9MKF9fcmN1X2lycV9lbnRlcl9jaGVja190aWNrKTtcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYy03MTEtICovXG5rZXJuZWwvcmN1L3RyZWUuYzo3MTI6aW50IHJjdV9uZWVkc19jcHUodm9pZClcbmtlcm5lbC9yY3UvdHJlZS5jLTcxMy17XG4tLVxua2VybmVsL3JjdS90cmVlLmM9NzU4PUVYUE9SVF9TWU1CT0xfR1BMKHJjdV9pc193YXRjaGluZyk7XG4tLVxua2VybmVsL3JjdS90cmVlLmMtNzY2LSAqL1xua2VybmVsL3JjdS90cmVlLmM6NzY3OnZvaWQgcmN1X3JlcXVlc3RfdXJnZW50X3FzX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0KVxua2VybmVsL3JjdS90cmVlLmMtNzY4LXtcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYz03Nzg9c3RhdGljIHVuc2lnbmVkIGxvbmcgc2VxX2dwd3JhcF9sYWcgPSBVTE9OR19NQVggLyA0O1xuLS1cbmtlcm5lbC9yY3UvdHJlZS5jLTc4NS0gKi9cbmtlcm5lbC9yY3UvdHJlZS5jOjc4Njp2b2lkIHJjdV9zZXRfZ3B3cmFwX2xhZyh1bnNpZ25lZCBsb25nIGxhZ19ncHMpXG5rZXJuZWwvcmN1L3RyZWUuYy03ODcte1xuLS1cbmtlcm5lbC9yY3UvdHJlZS5jPTEzNDA9c3RhdGljIGF0b21pY190ICpyY3VfZ3Bfc2xvd19zdXBwcmVzcztcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYy0xMzQyLS8qIFJlZ2lzdGVyIGEgY291bnRlciB0byBzdXBwcmVzcyBkZWJ1Z2dpbmcgZ3JhY2UtcGVyaW9kIGRlbGF5cy4gKi9cbmtlcm5lbC9yY3UvdHJlZS5jOjEzNDM6dm9pZCByY3VfZ3Bfc2xvd19yZWdpc3RlcihhdG9taWNfdCAqcmdzc3ApXG5rZXJuZWwvcmN1L3RyZWUuYy0xMzQ0LXtcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYz0xMzQ5PUVYUE9SVF9TWU1CT0xfR1BMKHJjdV9ncF9zbG93X3JlZ2lzdGVyKTtcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYy0xMzUxLS8qIFVucmVnaXN0ZXIgYSBjb3VudGVyLCB3aXRoIE5VTEwgZm9yIG5vdCBjYXJpbmcgd2hpY2guICovXG5rZXJuZWwvcmN1L3RyZWUuYzoxMzUyOnZvaWQgcmN1X2dwX3Nsb3dfdW5yZWdpc3RlcihhdG9taWNfdCAqcmdzc3ApXG5rZXJuZWwvcmN1L3RyZWUuYy0xMzUzLXtcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYz0xMzc0PXN0YXRpYyB1bnNpZ25lZCBsb25nIHNsZWVwX2R1cmF0aW9uO1xuLS1cbmtlcm5lbC9yY3UvdHJlZS5jLTEzNzYtLyogQWxsb3cgcmN1dG9ydHVyZSB0byBzdGFsbCB0aGUgZ3JhY2UtcGVyaW9kIGt0aHJlYWQuICovXG5rZXJuZWwvcmN1L3RyZWUuYzoxMzc3OnZvaWQgcmN1X2dwX3NldF90b3J0dXJlX3dhaXQoaW50IGR1cmF0aW9uKVxua2VybmVsL3JjdS90cmVlLmMtMTM3OC17XG4tLVxua2VybmVsL3JjdS90cmVlLmM9MjU3ND1zdGF0aWMgdm9pZCByY3VfZG9fYmF0Y2goc3RydWN0IHJjdV9kYXRhICpyZHApXG4tLVxua2VybmVsL3JjdS90cmVlLmMtMjcyOS0gKi9cbmtlcm5lbC9yY3UvdHJlZS5jOjI3MzA6dm9pZCByY3Vfc2NoZWRfY2xvY2tfaXJxKGludCB1c2VyKVxua2VybmVsL3JjdS90cmVlLmMtMjczMS17XG4tLVxua2VybmVsL3JjdS90cmVlLmM9Mjc2Nj1zdGF0aWMgdm9pZCBmb3JjZV9xc19ybnAoaW50ICgqZikoc3RydWN0IHJjdV9kYXRhICpyZHApKVxuLS1cbmtlcm5lbC9yY3UvdHJlZS5jLTI4MjQtICovXG5rZXJuZWwvcmN1L3RyZWUuYzoyODI1OnZvaWQgcmN1X2ZvcmNlX3F1aWVzY2VudF9zdGF0ZSh2b2lkKVxua2VybmVsL3JjdS90cmVlLmMtMjgyNi17XG4tLVxua2VybmVsL3JjdS90cmVlLmM9MzMxND1tb2R1bGVfcGFyYW0oZW5hYmxlX3JjdV9sYXp5LCBib29sLCAwNDQ0KTtcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYy0zMzM1LSAqL1xua2VybmVsL3JjdS90cmVlLmM6MzMzNjp2b2lkIGNhbGxfcmN1X2h1cnJ5KHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYylcbmtlcm5lbC9yY3UvdHJlZS5jLTMzMzcte1xuLS1cbmtlcm5lbC9yY3UvdHJlZS5jPTMzNDA9RVhQT1JUX1NZTUJPTF9HUEwoY2FsbF9yY3VfaHVycnkpO1xuLS1cbmtlcm5lbC9yY3UvdHJlZS5jLTM0MDEtICovXG5rZXJuZWwvcmN1L3RyZWUuYzozNDAyOnZvaWQgY2FsbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jKVxua2VybmVsL3JjdS90cmVlLmMtMzQwMy17XG4tLVxua2VybmVsL3JjdS90cmVlLmM9MzQzMD1zdGF0aWMgdm9pZCBzeW5jaHJvbml6ZV9yY3Vfbm9ybWFsKHZvaWQpXG4tLVxua2VybmVsL3JjdS90cmVlLmMtMzUwMi0gKi9cbmtlcm5lbC9yY3UvdHJlZS5jOjM1MDM6dm9pZCBzeW5jaHJvbml6ZV9yY3Uodm9pZClcbmtlcm5lbC9yY3UvdHJlZS5jLTM1MDQte1xuLS1cbmtlcm5lbC9yY3UvdHJlZS5jPTM1NDA9RVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfcmN1KTtcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYy0zNTQ5LSAqL1xua2VybmVsL3JjdS90cmVlLmM6MzU1MDp2b2lkIGdldF9jb21wbGV0ZWRfc3luY2hyb25pemVfcmN1X2Z1bGwoc3RydWN0IHJjdV9ncF9zZXEgKmdzcClcbmtlcm5lbC9yY3UvdHJlZS5jLTM1NTEte1xuLS1cbmtlcm5lbC9yY3UvdHJlZS5jPTM1NzM9RVhQT1JUX1NZTUJPTF9HUEwoZ2V0X3N0YXRlX3N5bmNocm9uaXplX3JjdSk7XG4tLVxua2VybmVsL3JjdS90cmVlLmMtMzU5MC0gKi9cbmtlcm5lbC9yY3UvdHJlZS5jOjM1OTE6dm9pZCBnZXRfc3RhdGVfc3luY2hyb25pemVfcmN1X2Z1bGwoc3RydWN0IHJjdV9ncF9zZXEgKmdzcClcbmtlcm5lbC9yY3UvdHJlZS5jLTM1OTIte1xuLS1cbmtlcm5lbC9yY3UvdHJlZS5jPTM2NTE9RVhQT1JUX1NZTUJPTF9HUEwoc3RhcnRfcG9sbF9zeW5jaHJvbml6ZV9yY3UpO1xuLS1cbmtlcm5lbC9yY3UvdHJlZS5jLTM2NjMtICovXG5rZXJuZWwvcmN1L3RyZWUuYzozNjY0OnZvaWQgc3RhcnRfcG9sbF9zeW5jaHJvbml6ZV9yY3VfZnVsbChzdHJ1Y3QgcmN1X2dwX3NlcSAqZ3NwKVxua2VybmVsL3JjdS90cmVlLmMtMzY2NS17XG4tLVxua2VybmVsL3JjdS90cmVlLmM9MzY3MD1FWFBPUlRfU1lNQk9MX0dQTChzdGFydF9wb2xsX3N5bmNocm9uaXplX3JjdV9mdWxsKTtcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYy0zNzA0LSAqL1xua2VybmVsL3JjdS90cmVlLmM6MzcwNTpib29sIHBvbGxfc3RhdGVfc3luY2hyb25pemVfcmN1KHVuc2lnbmVkIGxvbmcgb2xkc3RhdGUpXG5rZXJuZWwvcmN1L3RyZWUuYy0zNzA2LXtcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYz0zNzIzPXN0YXRpYyBib29sIHBvbGxfc3RhdGVfc3luY2hyb25pemVfcmN1X2Z1bGxfdW5vcmRlcmVkKHN0cnVjdCByY3VfZ3Bfc2VxICpnc3ApXG4tLVxua2VybmVsL3JjdS90cmVlLmMtMzc2Ni0gKi9cbmtlcm5lbC9yY3UvdHJlZS5jOjM3Njc6Ym9vbCBwb2xsX3N0YXRlX3N5bmNocm9uaXplX3JjdV9mdWxsKHN0cnVjdCByY3VfZ3Bfc2VxICpnc3ApXG5rZXJuZWwvcmN1L3RyZWUuYy0zNzY4LXtcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYz0zNzc2PUVYUE9SVF9TWU1CT0xfR1BMKHBvbGxfc3RhdGVfc3luY2hyb25pemVfcmN1X2Z1bGwpO1xuLS1cbmtlcm5lbC9yY3UvdHJlZS5jLTM3OTUtICovXG5rZXJuZWwvcmN1L3RyZWUuYzozNzk2OnZvaWQgY29uZF9zeW5jaHJvbml6ZV9yY3UodW5zaWduZWQgbG9uZyBvbGRzdGF0ZSlcbmtlcm5lbC9yY3UvdHJlZS5jLTM3OTcte1xuLS1cbmtlcm5lbC9yY3UvdHJlZS5jPTM4MDE9RVhQT1JUX1NZTUJPTF9HUEwoY29uZF9zeW5jaHJvbml6ZV9yY3UpO1xuLS1cbmtlcm5lbC9yY3UvdHJlZS5jLTM4MjItICovXG5rZXJuZWwvcmN1L3RyZWUuYzozODIzOnZvaWQgY29uZF9zeW5jaHJvbml6ZV9yY3VfZnVsbChzdHJ1Y3QgcmN1X2dwX3NlcSAqZ3NwKVxua2VybmVsL3JjdS90cmVlLmMtMzgyNC17XG4tLVxua2VybmVsL3JjdS90cmVlLmM9Mzk3MD1zdGF0aWMgdm9pZCByY3VfYmFycmllcl9oYW5kbGVyKHZvaWQgKmNwdV9pbilcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYy0zOTk1LSAqL1xua2VybmVsL3JjdS90cmVlLmM6Mzk5Njp2b2lkIHJjdV9iYXJyaWVyKHZvaWQpXG5rZXJuZWwvcmN1L3RyZWUuYy0zOTk3LXtcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYz00MTg4PXN0YXRpYyBib29sIHJjdV9yZHBfY3B1X29ubGluZShzdHJ1Y3QgcmN1X2RhdGEgKnJkcClcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYy00MTkyLVxua2VybmVsL3JjdS90cmVlLmM6NDE5Mzpib29sIHJjdV9jcHVfb25saW5lKGludCBjcHUpXG5rZXJuZWwvcmN1L3RyZWUuYy00MTk0LXtcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYz00NDA3PXN0YXRpYyB2b2lkIHJjdV9zcGF3bl9ybnBfa3RocmVhZHMoc3RydWN0IHJjdV9ub2RlICpybnApXG4tLVxua2VybmVsL3JjdS90cmVlLmMtNDQyNi0gKi9cbmtlcm5lbC9yY3UvdHJlZS5jOjQ0Mjc6aW50IHJjdXRyZWVfcHJlcGFyZV9jcHUodW5zaWduZWQgaW50IGNwdSlcbmtlcm5lbC9yY3UvdHJlZS5jLTQ0Mjgte1xuLS1cbmtlcm5lbC9yY3UvdHJlZS5jLTQ0NzctICovXG5rZXJuZWwvcmN1L3RyZWUuYzo0NDc4OmJvb2wgcmN1X2NwdV9iZWVuZnVsbHlvbmxpbmUoaW50IGNwdSlcbmtlcm5lbC9yY3UvdHJlZS5jLTQ0Nzkte1xuLS1cbmtlcm5lbC9yY3UvdHJlZS5jLTQ0ODgtICovXG5rZXJuZWwvcmN1L3RyZWUuYzo0NDg5OmludCByY3V0cmVlX29ubGluZV9jcHUodW5zaWduZWQgaW50IGNwdSlcbmtlcm5lbC9yY3UvdHJlZS5jLTQ0OTAte1xuLS1cbmtlcm5lbC9yY3UvdHJlZS5jLTQ1MjEtICovXG5rZXJuZWwvcmN1L3RyZWUuYzo0NTIyOnZvaWQgcmN1dHJlZV9yZXBvcnRfY3B1X3N0YXJ0aW5nKHVuc2lnbmVkIGludCBjcHUpXG5rZXJuZWwvcmN1L3RyZWUuYy00NTIzLXtcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYy00NTc4LSAqL1xua2VybmVsL3JjdS90cmVlLmM6NDU3OTp2b2lkIHJjdXRyZWVfcmVwb3J0X2NwdV9kZWFkKHZvaWQpXG5rZXJuZWwvcmN1L3RyZWUuYy00NTgwLXtcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYy00NjMzLSAqL1xua2VybmVsL3JjdS90cmVlLmM6NDYzNDp2b2lkIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoaW50IGNwdSlcbmtlcm5lbC9yY3UvdHJlZS5jLTQ2MzUte1xuLS1cbmtlcm5lbC9yY3UvdHJlZS5jLTQ3MDAtICovXG5rZXJuZWwvcmN1L3RyZWUuYzo0NzAxOmludCByY3V0cmVlX2RlYWRfY3B1KHVuc2lnbmVkIGludCBjcHUpXG5rZXJuZWwvcmN1L3RyZWUuYy00NzAyLXtcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYy00NzEzLSAqL1xua2VybmVsL3JjdS90cmVlLmM6NDcxNDppbnQgcmN1dHJlZV9keWluZ19jcHUodW5zaWduZWQgaW50IGNwdSlcbmtlcm5lbC9yY3UvdHJlZS5jLTQ3MTUte1xuLS1cbmtlcm5lbC9yY3UvdHJlZS5jLTQ3MjktICovXG5rZXJuZWwvcmN1L3RyZWUuYzo0NzMwOmludCByY3V0cmVlX29mZmxpbmVfY3B1KHVuc2lnbmVkIGludCBjcHUpXG5rZXJuZWwvcmN1L3RyZWUuYy00NzMxLXtcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYz00ODEyPWVhcmx5X2luaXRjYWxsKHJjdV9zcGF3bl9ncF9rdGhyZWFkKTtcbi0tXG5rZXJuZWwvcmN1L3RyZWUuYy00ODIzLSAqL1xua2VybmVsL3JjdS90cmVlLmM6NDgyNDp2b2lkIHJjdV9zY2hlZHVsZXJfc3RhcnRpbmcodm9pZClcbmtlcm5lbC9yY3UvdHJlZS5jLTQ4MjUte1xuLS1cbmtlcm5lbC9yY3UvdHJlZS5jPTQ5MzU9c3RhdGljIHZvaWQgX19pbml0IHNhbml0aXplX2t0aHJlYWRfcHJpbyh2b2lkKVxuLS1cbmtlcm5lbC9yY3UvdHJlZS5jLTQ5NTgtICovXG5rZXJuZWwvcmN1L3RyZWUuYzo0OTU5OnZvaWQgcmN1X2luaXRfZ2VvbWV0cnkodm9pZClcbmtlcm5lbC9yY3UvdHJlZS5jLTQ5NjAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDEzOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MjAyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTUxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBSQ1UvU1JDVSBDb25jdXJyZW5jeSBCdWcgRml4ZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgcmUtZW50cmFuY3kgaXNzdWVzIGluIFJDVS9TUkNVIGR1ZSB0byBtb2RpZmljYXRpb25zIHJlbGF0ZWQgdG8gZGVmZXJyZWQgZHJhaW5pbmcsIHBhcnRpY3VsYXJseSB3aGVuIGludGVycnVwdHMgYXJlIGRpc2FibGVkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgcGxhY2VzIHRvIGZvY3VzIGZ1enppbmcgZWZmb3J0cywgYmFsYW5jaW5nIHRhcmdldGVkIGNvdmVyYWdlIHdpdGggYXZvaWRpbmcgb3ZlcmJyb2FkLCBnZW5lcmljIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IHNrZXcgdGhlIHRlc3RzLgoKVGhlIGluaXRpYWwgaW1wdWxzZSB3YXMgdG8gemVybyBpbiBvbiBgY2FsbF9yY3VgIGFuZCBgY2FsbF9zcmN1YCwgYXMgdGhleSYjMzk7cmUgdGhlIGhlYXZpbHktbW9kaWZpZWQgZnVuY3Rpb25zLiBIb3dldmVyLCB0aGUgaW5zdHJ1Y3Rpb25zIGV4cGxpY2l0bHkgYWR2aXNlIGFnYWluc3QgbGlzdGluZyAmIzM0O2dlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLiYjMzQ7IFRob3VnaCB0aGVzZSBhcmUgd2hlcmUgdGhlIHBhdGNoJiMzOTtzIGNvcmUgbG9naWMgY2hhbmdlIG9jY3VycywgYW5kIHRoZSBpc3N1ZSBpcyBzcGVjaWZpY2FsbHkgYWJvdXQgcmUtZW50cmFuY3kgaW4gdGhlc2UgZnVuY3Rpb25zLCBsaXN0aW5nIHRoZW0gd291bGQgYmUgdG9vIGJyb2FkLgoKSW5zdGVhZCwgSSYjMzk7bGwgY29uY2VudHJhdGUgb24gdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBhZmZlY3RlZCBhbmQgY2FuIHByb3ZpZGUgYmV0dGVyIHRhcmdldGluZy4gVGhpcyBpbmNsdWRlcyBgcmN1X2JhcnJpZXJgLCBgc3JjdV9iYXJyaWVyYCwgYHNyY3Vfb2ZmbGluZV9kcmFpbmAsIGFuZCBgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc2AuIFRoZXNlIGFyZSBmdW5jdGlvbnMgdGhhdCBhcmUgbW9kaWZpZWQgYnV0IGFyZSBub3QgZ2VuZXJpYyBob3QtcGF0aHMuIGBzcmN1X29mZmxpbmVfZHJhaW5gIGFuZCBgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc2AgYXJlIGtleSwgZ2l2ZW4gdGhlIG9mZmxpbmUgQ1BVIGFuZCB0cmVlIG1hbmFnZW1lbnQgY29udGV4dC4KCk5vdywgY29uc2lkZXJpbmcgdGhlIHBhdGNoJiMzOTtzIHVzZSBvZiBgcmN1dG9ydHVyZS5jYCwgYW5kIHRoZSBgc2hvdWxkX3JjdV9kZWZlcigpYCBsb2dpYyByZWxhdGVkIHRvIGBpcnFzX2Rpc2FibGVkKClgIGFuZCBgcmN1X3NjaGVkdWxlcl9hY3RpdmVgLCBJJiMzOTtsbCBuZWVkIHRvIGVuYWJsZSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gZmxhZ3MuIGBSQ1VfVE9SVFVSRV9URVNUYCBpcyBhIG11c3QsIGdpdmVuIHRoZSBkaXJlY3QgY2hhbmdlcyB0byB0aGUgdGVzdCBjb2RlLiBBbHNvLCBgUEVSRl9FVkVOVFNgIGlzIHJlcXVpcmVkIGZvciB0aGUgTk1JLWJhc2VkIHRlc3RzIHdpdGhpbiBgcmN1dG9ydHVyZS5jYCwgc28gSSYjMzk7bGwgaW5jbHVkZSBpdC4KClNpbmNlIHRoZSBwYXRjaCBpbmNsdWRlcyBgV0FSTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSksIC4uLilgIHN0YXRlbWVudHMsIEkmIzM5O2xsIGFkZCBgUFJPVkVfUkNVYCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgIHRvIGVuc3VyZSB0aGlzIGNoZWNrIGlzIGFjdGl2ZSBhbmQgdGhhdCB0aGUgdGVzdGluZyBpcyBjb21wcmVoZW5zaXZlLgoKSW4gc3VtbWFyeSwgdGhlIGBGb2N1c1N5bWJvbHNgIHdpbGwgYmU6CgoqICAgYHJjdV9iYXJyaWVyYAoqICAgYHNyY3VfYmFycmllcmAKKiAgIGBzcmN1X29mZmxpbmVfZHJhaW5gCiogICBgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc2AKCkFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIHdpbGwgYmU6CgoqICAgYFJDVV9UT1JUVVJFX1RFU1RgCiogICBgUEVSRl9FVkVOVFNgCiogICBgUFJPVkVfUkNVYAoKVGhpcyBzZXR1cCBzaG91bGQgcHJvdmlkZSBmb2N1c2VkIGZ1enppbmcgb24gdGhlIG1vZGlmaWVkIFJDVS9TUkNVIGZ1bmN0aW9ucywgYW5kIGFsc28gZW5zdXJlIHRoZSBuZXcgdG9ydHVyZSB0ZXN0cyBhcmUgYWN0aXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDEzOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQUk9WRV9SQ1UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3JjdS9LY29uZmlnLmRlYnVnPTY9bWVudSBcJiMzNDtSQ1UgRGVidWdnaW5nXCYjMzQ7XG5rZXJuZWwvcmN1L0tjb25maWcuZGVidWctNy1cbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zzo4OmNvbmZpZyBQUk9WRV9SQ1Vcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zy05LVx0ZGVmX2Jvb2wgUFJPVkVfTE9DS0lOR1xua2VybmVsL3JjdS9LY29uZmlnLmRlYnVnLTEwLVxua2VybmVsL3JjdS9LY29uZmlnLmRlYnVnOjExOmNvbmZpZyBQUk9WRV9SQ1VfTElTVFxua2VybmVsL3JjdS9LY29uZmlnLmRlYnVnLTEyLVx0Ym9vbCBcJiMzNDtSQ1UgbGlzdCBsb2NrZGVwIGRlYnVnZ2luZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDEzOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3NDUwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYToKCioqUkNVIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuIGBQUk9WRV9SQ1VgLi4uIHJpZ2h0LCBpdCYjMzk7cyBkZWZpbmVkIGFzIGBkZWZfYm9vbCBQUk9WRV9MT0NLSU5HYC4gVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQuIFNvLCBpZiB3ZSB3YW50IGBQUk9WRV9SQ1VgIHRvIGJlIGFjdGl2ZSwgd2UgKm11c3QqIGFsc28gZW5hYmxlIGBQUk9WRV9MT0NLSU5HYC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyB0aGUgUkNVIHByb3ZpbmcgZ3JvdW5kIHJlbGllcyBvbiB0aGUgaW5mcmFzdHJ1Y3R1cmUgcHJvdmlkZWQgYnkgdGhlIGxvY2tpbmcgcHJvdmluZyBzeXN0ZW0uCgpOb3csIHdoZXJlIGRvZXMgdGhhdCBsZWF2ZSB1cz8gSSB0aGluayBpdCYjMzk7cyB0aW1lIHRvIGNoZWNrIHRoZSBzdGF0ZSBvZiBgUkNVX1RPUlRVUkVfVEVTVGAuIEkgbmVlZCB0byBlbnN1cmUgd2UmIzM5O3ZlIGdvdCB0aGUgbmVjZXNzYXJ5IGluZnJhc3RydWN0dXJlIGluIHBsYWNlIGZvciBwcm9wZXIgdGVzdGluZy4gV2UgZG9uJiMzOTt0IHdhbnQgdG8gZ2V0IGNhdWdodCBvZmYtZ3VhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDEzOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBSQ1VfVE9SVFVSRV9URVNUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zz0yNj1jb25maWcgUkNVX1NDQUxFX1RFU1Rcbi0tXG5rZXJuZWwvcmN1L0tjb25maWcuZGVidWctNDAtXG5rZXJuZWwvcmN1L0tjb25maWcuZGVidWc6NDE6Y29uZmlnIFJDVV9UT1JUVVJFX1RFU1Rcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zy00Mi1cdHRyaXN0YXRlIFwmIzM0O3RvcnR1cmUgdGVzdHMgZm9yIFJDVVwmIzM0O1xuLS1cbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zy01NS1cbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zzo1Njpjb25maWcgUkNVX1RPUlRVUkVfVEVTVF9DSEtfUkRSX1NUQVRFXG5rZXJuZWwvcmN1L0tjb25maWcuZGVidWctNTctXHRib29sIFwmIzM0O0NoZWNrIHJjdXRvcnR1cmUgcmVhZGVyIHN0YXRlXCYjMzQ7XG4tLVxua2VybmVsL3JjdS9LY29uZmlnLmRlYnVnLTcxLVxua2VybmVsL3JjdS9LY29uZmlnLmRlYnVnOjcyOmNvbmZpZyBSQ1VfVE9SVFVSRV9URVNUX0xPR19DUFVcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zy03My1cdGJvb2wgXCYjMzQ7TG9nIENQVSBmb3IgcmN1dG9ydHVyZSBmYWlsdXJlc1wmIzM0O1xuLS1cbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zy04Ni1cbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zzo4Nzpjb25maWcgUkNVX1RPUlRVUkVfVEVTVF9MT0dfR1Bcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zy04OC1cdGJvb2wgXCYjMzQ7TG9nIGdyYWNlLXBlcmlvZCBudW1iZXJzIGZvciByY3V0b3J0dXJlIGZhaWx1cmVzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDEzOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MDExCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgdGhlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBgUkNVX1RPUlRVUkVfVEVTVGAuIEkgdW5kZXJzdGFuZCB0aGF0JiMzOTtzIGEgdHJpc3RhdGUgb3B0aW9uLCBtZWFuaW5nIGl0IGNhbiBiZSBlaXRoZXIgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIGJ1aWx0IGFzIGEgbW9kdWxlLiBJbnRlcmVzdGluZy4gTXkgZmlyc3QgdGhvdWdodCBpcyB3aGV0aGVyIHdlIGNhbiBhY3R1YWxseSBlbmFibGUgaXQgZm9yIHRoZSBzaXR1YXRpb24gd2UmIzM5O3JlIGluLiBUaGlzIGlzIGdvaW5nIHRvIGRlcGVuZCBvbiBhIGxvdCBvZiB0aGluZ3MuIEJlZm9yZSBJIGRpdmUgaW4gdG9vIGRlZXAgb24gUkNVLCBJIHNob3VsZCBwcm9iYWJseSB0YWtlIGEgbG9vayBhdCB0aGUgYFBFUkZfRVZFTlRTYCBvcHRpb24uIEl0IGNvdWxkIGJlIHJlbGV2YW50LCBmb3IgYWxsIGtpbmRzIG9mIHJlYXNvbnMuIEFyZSB0aGV5IGVuYWJsZWQ/IERvIHRoZXkgaW50ZXJmZXJlPyBEb2VzIHRoZSBidWlsZCBlbnZpcm9ubWVudCBldmVuIHN1cHBvcnQgYm90aD8gSXQgc2VlbXMgbGlrZSBgUEVSRl9FVkVOVFNgIGlzIGEgcG90ZW50aWFsIHBpZWNlIG9mIHRoZSBsYXJnZXIgcGljdHVyZSwgZGVwZW5kaW5nIG9uIGhvdyB0aGlzIHRlc3QgaXMgZ29pbmcgdG8gYmUgdXNlZCBhbmQgd2hlcmUgYW5kIGhvdyB3ZSB3aWxsIGdhdGhlciBpbnNpZ2h0cyBpbnRvIGl0cyByZXN1bHRzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSByZWxhdGUgYmVmb3JlIEkgc3BlbmQgdG9vIG11Y2ggdGltZSBvbiB0aGUgdG9ydHVyZSB0ZXN0IGl0c2VsZi4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBgUEVSRl9FVkVOVFNgIGlzIGluIHRoZSByaWdodCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUEVSRl9FVkVOVFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvZXZlbnRzL0tjb25maWc9Mj1tZW51IFwmIzM0O1BlcmZvcm1hbmNlIG1vbml0b3JpbmdcJiMzNDtcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTMtXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZzo0OmNvbmZpZyBQRVJGX0VWRU5UU19JTlRFTF9VTkNPUkVcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTUtXHR0cmlzdGF0ZSBcJiMzNDtJbnRlbCB1bmNvcmUgcGVyZm9ybWFuY2UgZXZlbnRzXCYjMzQ7XG4tLVxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMTEtXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZzoxMjpjb25maWcgUEVSRl9FVkVOVFNfSU5URUxfUkFQTFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMTMtXHR0cmlzdGF0ZSBcJiMzNDtJbnRlbC9BTUQgcmFwbCBwZXJmb3JtYW5jZSBldmVudHNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0xOS1cbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjIwOmNvbmZpZyBQRVJGX0VWRU5UU19JTlRFTF9DU1RBVEVcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTIxLVx0dHJpc3RhdGUgXCYjMzQ7SW50ZWwgY3N0YXRlIHBlcmZvcm1hbmNlIGV2ZW50c1wmIzM0O1xuLS1cbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTI3LVxuYXJjaC94ODYvZXZlbnRzL0tjb25maWc6Mjg6Y29uZmlnIFBFUkZfRVZFTlRTX0FNRF9QT1dFUlxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMjktXHRkZXBlbmRzIG9uIFBFUkZfRVZFTlRTIFx1MDAyNlx1MDAyNiBDUFVfU1VQX0FNRFxuLS1cbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTM2LVxuYXJjaC94ODYvZXZlbnRzL0tjb25maWc6Mzc6Y29uZmlnIFBFUkZfRVZFTlRTX0FNRF9VTkNPUkVcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTM4LVx0dHJpc3RhdGUgXCYjMzQ7QU1EIFVuY29yZSBwZXJmb3JtYW5jZSBldmVudHNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy00Ny1cbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjQ4OmNvbmZpZyBQRVJGX0VWRU5UU19BTURfQlJTXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy00OS1cdGRlcGVuZHMgb24gUEVSRl9FVkVOVFMgXHUwMDI2XHUwMDI2IENQVV9TVVBfQU1EXG4tLVxuaW5pdC9LY29uZmlnPTIxNzU9bWVudSBcJiMzNDtLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVyc1wmIzM0O1xuaW5pdC9LY29uZmlnLTIxNzYtXG5pbml0L0tjb25maWc6MjE3Nzpjb25maWcgUEVSRl9FVkVOVFNcbmluaXQvS2NvbmZpZy0yMTc4LVx0Ym9vbCBcJiMzNDtLZXJuZWwgcGVyZm9ybWFuY2UgZXZlbnRzIGFuZCBjb3VudGVyc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMzozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODgxMgoJCQkJCQkJb3V0cHV0OiAxODYKCQkJCQkJCXRob3VnaHRzOiA0MjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUkNVL1NSQ1UgRGVmZXJyYWwgSW1wbGVtZW50YXRpb24gVGhvdWdodHMqKgoKT2theSwgc28gYFBFUkZfRVZFTlRTYCBpcyBjb25maXJtZWQgYXMgYSBib29sZWFuIHZhbHVlLiBUaGF0IG1lYW5zIHRoZSBgRW5hYmxlQ29uZmlnc2Agd2lsbCBjb25zaXN0IG9mIGBQUk9WRV9MT0NLSU5HYCwgYFJDVV9UT1JUVVJFX1RFU1RgLCBhbmQsIG9mIGNvdXJzZSwgYFBFUkZfRVZFTlRTYC4KCk5vdywgZm9yIHRoZSBgRm9jdXNTeW1ib2xzYDogYHJjdV9iYXJyaWVyYCwgYHNyY3VfYmFycmllcmAsIGBzcmN1X29mZmxpbmVfZHJhaW5gLCBhbmQgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBJJiMzOTttIGZvY3VzaW5nIG9uLgoKV2FpdCwgYHNyY3VfZGVmZXJfZHJhaW5gIGlzIGV4cG9ydGVkIGZyb20gYGtlcm5lbC9yY3Uvc3JjdXRpbnkuY2AuICBJIGFsbW9zdCBtaXNzZWQgdGhhdC4gIExvb2tpbmcgYXQgaXRzIGRlZmluaXRpb246CgpgYGBjCnZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KQpgYGAKCkl0JiMzOTtzIGFuIGBpcnFfd29ya2AgY2FsbGJhY2ssIHNvIGl0JiMzOTtzIG5vdCB1c3VhbGx5IGNhbGxlZCBkaXJlY3RseSwgYnV0IHRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgZXhwb3J0ZWQgbWVhbnMgaXQgKmNvdWxkKiBiZSB1c2VkIGV4dGVybmFsbHkuIEkgc2hvdWxkIGRlZmluaXRlbHkgaW5jbHVkZSBpdC4gQmV0dGVyIHRvIGJlIHRob3JvdWdoLCBJIHN1cHBvc2UuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBzY2FuIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgb3RoZXIgZXhwb3J0ZWQgZnVuY3Rpb25zLiAgQWgsIGBjYWxsX3NyY3VgIGlzIGV4cG9ydGVkLiBIb3dldmVyLCBpdCBpcyBhIGhvdCBwYXRoIHNvIEkgd29uJiMzOTt0IGluY2x1ZGUgaXQuCgpBbHJpZ2h0LCBiYWNrIHRvIGBzcmN1X2RlZmVyX2RyYWluYC4gSSYjMzk7bGwgZ28gd2l0aCBpbmNsdWRpbmcgdGhhdCBpbiB0aGUgc2V0LgoKTXkgcmVhc29uaW5nIGhlcmUgaXMgdGhhdCB0aGUgb3ZlcmFsbCBwYXRjaCBhZGRyZXNzZXMgYSBjcml0aWNhbCBpc3N1ZTogZGVmZXJyaW5nIGBjYWxsX3JjdSgpYCBhbmQgYGNhbGxfc3JjdSgpYCBjYWxsYmFja3MsIGVzcGVjaWFsbHkgd2hlbiBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZC4gVGhpcyBpcyBlc3NlbnRpYWwgdG8gcHJldmVudCBkZWFkbG9ja3MgYW5kIHBvdGVudGlhbCBsaXN0IGNvcnJ1cHRpb24gZHVyaW5nIHJlLWVudHJhbnQgY2FsbHMg4oCTIHRoaW5rIEJQRiBvciBOTUlzLiBUaGUgaW1wbGVtZW50YXRpb24gdXNlcyBgaXJxX3dvcmtgIGFuZCBsb2NrbGVzcyBsaXN0cyBmb3IgdGhlIGRlZmVycmFsLiBJdCYjMzk7cyBmdW5jdGlvbmFsLCB0aGUgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgdGhlc2UgY2hhbmdlcyB0b3VjaCBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcywgc28gaXQmIzM5O3MgYSBjcml0aWNhbCBhcmVhIHRvIGFuYWx5emUuCgpKdXN0IGEgZmluYWwgY2hlY2ssIEkgbmVlZCB0byB2ZXJpZnkgYHNyY3Vfb2ZmbGluZV9kcmFpbmAuIEkmIzM5O2xsIGxvb2sgYXQgdGhlIGRlZmluaXRpb24gaW4gYGtlcm5lbC9yY3Uvc3JjdXRyZWUuY2A6CgpgYGBjCnZvaWQgc3JjdV9vZmZsaW5lX2RyYWluKGludCBjcHUpCmBgYApBbHRob3VnaCBpdCBpcyBub3QgZXhwb3J0ZWQsIGl0IGlzIGNhbGxlZCBieSBgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc2Agd2hpY2ggaXMgaW4gYGtlcm5lbC9yY3UvdHJlZS5jYCwgc28gSSBzaG91bGQgYmUgZ29vZCB0byBpbmNsdWRlIGl0LgoKT2theSwgSSYjMzk7bSBjb25maWRlbnQuIFRpbWUgdG8gdXNlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxMzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJPVkVfTE9DS0lORyYjMzQ7LAogICAgJiMzNDtSQ1VfVE9SVFVSRV9URVNUJiMzNDssCiAgICAmIzM0O1BFUkZfRVZFTlRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmN1X2JhcnJpZXImIzM0OywKICAgICYjMzQ7c3JjdV9iYXJyaWVyJiMzNDssCiAgICAmIzM0O3NyY3Vfb2ZmbGluZV9kcmFpbiYjMzQ7LAogICAgJiMzNDtyY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzJiMzNDssCiAgICAmIzM0O3NyY3VfZGVmZXJfZHJhaW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBSQ1UgYW5kIFNSQ1UgbG9naWMgdG8gZGVmZXIgYGNhbGxfcmN1KClgIGFuZCBgY2FsbF9zcmN1KClgIGNhbGxiYWNrcyB3aGVuIGludGVycnVwdHMgYXJlIGRpc2FibGVkLiBUaGlzIHByZXZlbnRzIGRlYWRsb2NrcyBvciBsaXN0IGNvcnJ1cHRpb24gZHVyaW5nIHJlLWVudHJhbnQgY2FsbHMgKGUuZy4sIGZyb20gQlBGIHByb2dyYW1zIG9yIE5NSXMpLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGRlZmVycmFsIG1lY2hhbmlzbSB1c2luZyBgaXJxX3dvcmtgIGFuZCBsb2NrbGVzcyBsaXN0cy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwsIHJlYWNoYWJsZSwgYW5kIGFmZmVjdCBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJPVkVfTE9DS0lORyYjMzQ7LAogICAgJiMzNDtSQ1VfVE9SVFVSRV9URVNUJiMzNDssCiAgICAmIzM0O1BFUkZfRVZFTlRTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmN1X2JhcnJpZXImIzM0OywKICAgICYjMzQ7c3JjdV9iYXJyaWVyJiMzNDssCiAgICAmIzM0O3NyY3Vfb2ZmbGluZV9kcmFpbiYjMzQ7LAogICAgJiMzNDtyY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzJiMzNDssCiAgICAmIzM0O3NyY3VfZGVmZXJfZHJhaW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBSQ1UgYW5kIFNSQ1UgbG9naWMgdG8gZGVmZXIgYGNhbGxfcmN1KClgIGFuZCBgY2FsbF9zcmN1KClgIGNhbGxiYWNrcyB3aGVuIGludGVycnVwdHMgYXJlIGRpc2FibGVkLiBUaGlzIHByZXZlbnRzIGRlYWRsb2NrcyBvciBsaXN0IGNvcnJ1cHRpb24gZHVyaW5nIHJlLWVudHJhbnQgY2FsbHMgKGUuZy4sIGZyb20gQlBGIHByb2dyYW1zIG9yIE5NSXMpLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGRlZmVycmFsIG1lY2hhbmlzbSB1c2luZyBgaXJxX3dvcmtgIGFuZCBsb2NrbGVzcyBsaXN0cy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwsIHJlYWNoYWJsZSwgYW5kIGFmZmVjdCBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDEzOjMxOjQwLjM0MTk2MDkwOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NjU3NzY0NDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBST1ZFX0xPQ0tJTkdcIixcbiAgICBcIlJDVV9UT1JUVVJFX1RFU1RcIixcbiAgICBcIlBFUkZfRVZFTlRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmN1X2JhcnJpZXJcIixcbiAgICBcInNyY3VfYmFycmllclwiLFxuICAgIFwic3JjdV9vZmZsaW5lX2RyYWluXCIsXG4gICAgXCJyY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzXCIsXG4gICAgXCJzcmN1X2RlZmVyX2RyYWluXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBSQ1UgYW5kIFNSQ1UgbG9naWMgdG8gZGVmZXIgYGNhbGxfcmN1KClgIGFuZCBgY2FsbF9zcmN1KClgIGNhbGxiYWNrcyB3aGVuIGludGVycnVwdHMgYXJlIGRpc2FibGVkLiBUaGlzIHByZXZlbnRzIGRlYWRsb2NrcyBvciBsaXN0IGNvcnJ1cHRpb24gZHVyaW5nIHJlLWVudHJhbnQgY2FsbHMgKGUuZy4sIGZyb20gQlBGIHByb2dyYW1zIG9yIE5NSXMpLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGRlZmVycmFsIG1lY2hhbmlzbSB1c2luZyBgaXJxX3dvcmtgIGFuZCBsb2NrbGVzcyBsaXN0cy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwsIHJlYWNoYWJsZSwgYW5kIGFmZmVjdCBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTM6MzE6NDAuMzQxOTY4OTQ4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTU4ODc5MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5NGQyMmM2NzcxODdmMmU2ZGE5NmQ3ZjM4YTdhMmNiZTEwOTM2NmIwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDUgMTM6MzE6MzkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcmN1dGlueS5oIGIvaW5jbHVkZS9saW51eC9zcmN1dGlueS5oXFxuaW5kZXggZmJjZjEzYmMxMmQxNS4uYTBlNTRkOTE4MmJhYSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NyY3V0aW55LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NyY3V0aW55LmhcXG5AQCAtMTIsNiArMTIsNyBAQFxcbiAjZGVmaW5lIF9MSU5VWF9TUkNVX1RJTllfSFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lycV93b3JrX3R5cGVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9sbGlzdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3dhaXQuaFxcdTAwM2VcXG4gXFxuIHN0cnVjdCBzcmN1X3N0cnVjdCB7XFxuQEAgLTI2LDYgKzI3LDggQEAgc3RydWN0IHNyY3Vfc3RydWN0IHtcXG4gXFx0c3RydWN0IHJjdV9oZWFkICoqc3JjdV9jYl90YWlsO1xcdC8qIFBlbmRpbmcgY2FsbGJhY2tzOiBUYWlsLiAqL1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc3JjdV93b3JrO1xcdC8qIEZvciBkcml2aW5nIGdyYWNlIHBlcmlvZHMuICovXFxuIFxcdHN0cnVjdCBpcnFfd29yayBzcmN1X2lycV93b3JrO1xcdC8qIERlZmVyIHNjaGVkdWxlX3dvcmsoKSB0byBpcnEgd29yay4gKi9cXG4rXFx0c3RydWN0IGxsaXN0X2hlYWQgZGVmZXJfY2JzO1xcdC8qIENhbGxiYWNrcyBkZWZlcnJlZCBvbiByZS1lbnRyeS4gKi9cXG4rXFx0c3RydWN0IGlycV93b3JrIGRlZmVyX2l3O1xcdFxcdC8qIFJlZ2lzdGVycyBkZWZlcl9jYnMgbGF0ZXIuICovXFxuICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQ1xcbiBcXHRzdHJ1Y3QgbG9ja2RlcF9tYXAgZGVwX21hcDtcXG4gI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQyAqL1xcbkBAIC0zMyw2ICszNiw3IEBAIHN0cnVjdCBzcmN1X3N0cnVjdCB7XFxuIFxcbiB2b2lkIHNyY3VfZHJpdmVfZ3Aoc3RydWN0IHdvcmtfc3RydWN0ICp3cCk7XFxuIHZvaWQgc3JjdV90aW55X2lycV93b3JrKHN0cnVjdCBpcnFfd29yayAqaXJxX3dvcmspO1xcbit2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppcnFfd29yayk7XFxuIFxcbiAjZGVmaW5lIF9fU1JDVV9TVFJVQ1RfSU5JVChuYW1lLCBfX2lnbm9yZWQsIF9fX2lnbm9yZWQsIF9fX19pZ25vcmVkKVxcdFxcXFxcXG4ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5AQCAtNDAsNiArNDQsOSBAQCB2b2lkIHNyY3VfdGlueV9pcnFfd29yayhzdHJ1Y3QgaXJxX3dvcmsgKmlycV93b3JrKTtcXG4gXFx0LnNyY3VfY2JfdGFpbCA9IFxcdTAwMjZuYW1lLnNyY3VfY2JfaGVhZCxcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdC5zcmN1X3dvcmsgPSBfX1dPUktfSU5JVElBTElaRVIobmFtZS5zcmN1X3dvcmssIHNyY3VfZHJpdmVfZ3ApLFxcdFxcXFxcXG4gXFx0LnNyY3VfaXJxX3dvcmsgPSB7IC5mdW5jID0gc3JjdV90aW55X2lycV93b3JrIH0sXFx0XFx0XFxcXFxcbitcXHQuZGVmZXJfY2JzID0gTExJU1RfSEVBRF9JTklUKG5hbWUuZGVmZXJfY2JzKSxcXHRcXHRcXHRcXFxcXFxuK1xcdC5kZWZlcl9pdyA9IHsgLm5vZGUgPSB7IC51X2ZsYWdzID0gSVJRX1dPUktfSEFSRF9JUlEgfSxcXHRcXHRcXFxcXFxuK1xcdFxcdCAgICAgIC5mdW5jID0gc3JjdV9kZWZlcl9kcmFpbiB9LFxcdFxcdFxcdFxcXFxcXG4gXFx0X19TUkNVX0RFUF9NQVBfSU5JVChuYW1lKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gfVxcbiBcXG5AQCAtMTMxLDEwICsxMzgsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3luY2hyb25pemVfc3JjdV9leHBlZGl0ZWQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXFxuIFxcdHN5bmNocm9uaXplX3NyY3Uoc3NwKTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG4te1xcbi1cXHRzeW5jaHJvbml6ZV9zcmN1KHNzcCk7XFxuLX1cXG4rdm9pZCBzcmN1X2JhcnJpZXIoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApO1xcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIHNyY3VfZXhwZWRpdGVfY3VycmVudChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCkgeyB9XFxuICNkZWZpbmUgc3JjdV9jaGVja19yZWFkX2ZsYXZvcihzc3AsIHJlYWRfZmxhdm9yKSBkbyB7IH0gd2hpbGUgKDApXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3JjdXRyZWUuaCBiL2luY2x1ZGUvbGludXgvc3JjdXRyZWUuaFxcbmluZGV4IDc1ZTU0ZTRmOTYzZmEuLjA5YTljOGY0YTZkMjQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zcmN1dHJlZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zcmN1dHJlZS5oXFxuQEAgLTEzLDYgKzEzLDggQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yY3Vfbm9kZV90cmVlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21wbGV0aW9uLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcnFfd29ya190eXBlcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGxpc3QuaFxcdTAwM2VcXG4gXFxuIHN0cnVjdCBzcmN1X25vZGU7XFxuIHN0cnVjdCBzcmN1X3N0cnVjdDtcXG5AQCAtNDEsNiArNDMsOSBAQCBzdHJ1Y3Qgc3JjdV9kYXRhIHtcXG4gXFx0Ym9vbCBzcmN1X2NibGlzdF9pbnZva2luZztcXHRcXHQvKiBJbnZva2luZyB0aGVzZSBDQnM/ICovXFxuIFxcdHN0cnVjdCB0aW1lcl9saXN0IGRlbGF5X3dvcms7XFx0XFx0LyogRGVsYXkgZm9yIENCIGludm9raW5nICovXFxuIFxcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xcdFxcdC8qIENvbnRleHQgZm9yIENCIGludm9raW5nLiAqL1xcbitcXHRzdHJ1Y3QgbGxpc3RfaGVhZCBkZWZlcl9jYnM7XFx0XFx0LyogQ2FsbGJhY2tzIGRlZmVycmVkIG9uIHJlLWVudHJ5LiAqL1xcbitcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSBkZWZlcl9saW5rO1xcdFxcdC8qIExpbmtzIG9udG8gdGhlIHBlci1DUFUgZGVmZXJyYWwgZHJhaW4gbGlzdCAqL1xcbitcXHRib29sIGRlZmVyX2V4cDtcXHRcXHRcXHRcXHQvKiBBIGRlZmVycmVkIGNhbGxiYWNrIGFza2VkIHRvIGV4cGVkaXRlLiAqL1xcbiBcXHRzdHJ1Y3QgcmN1X2hlYWQgc3JjdV9iYXJyaWVyX2hlYWQ7XFx0LyogRm9yIHNyY3VfYmFycmllcigpIHVzZS4gKi9cXG4gXFx0c3RydWN0IHJjdV9oZWFkIHNyY3VfZWNfaGVhZDtcXHRcXHQvKiBGb3Igc3JjdV9leHBlZGl0ZV9jdXJyZW50KCkgdXNlLiAqL1xcbiBcXHRpbnQgc3JjdV9lY19zdGF0ZTtcXHRcXHRcXHQvKiAgU3RhdGUgZm9yIHNyY3VfZXhwZWRpdGVfY3VycmVudCgpLiAqL1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L0tjb25maWcgYi9rZXJuZWwvcmN1L0tjb25maWdcXG5pbmRleCAzMzJkZjdhN2E2MzQ3Li5iYzk0ODNjMGI1ZDg0IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9yY3UvS2NvbmZpZ1xcbisrKyBiL2tlcm5lbC9yY3UvS2NvbmZpZ1xcbkBAIC0xNzUsNiArMTc1LDEyIEBAIGNvbmZpZyBSQ1VfU1RBTExfQ09NTU9OXFxuIGNvbmZpZyBSQ1VfTkVFRF9TRUdDQkxJU1RcXG4gXFx0ZGVmX2Jvb2wgKCBUUkVFX1JDVSB8fCBUUkVFX1NSQ1UgfHwgVEFTS1NfUkNVX0dFTkVSSUMgKVxcbiBcXG4rIyBUaGUgZGVmZXJyYWwgKGFuZCB0aGUgSVJRX1dPUksgaXQgdXNlcykgaXMgb25seSBuZWVkZWQgd2hlcmUgY2FsbF9yY3UoKSAvXFxuKyMgY2FsbF9zcmN1KCkgY2FuIGJlIGludm9rZWQgd2hpbGUgYSBjYWxsYmFjay1saXN0IG9wZXJhdGlvbiBpcyBpbiBmbGlnaHQuXFxuK2NvbmZpZyBSQ1VfREVGRVJcXG4rXFx0ZGVmX2Jvb2wgSEFWRV9OTUkgfHwgS1BST0JFUyB8fCBGVU5DVElPTl9UUkFDRVIgfHwgVFJBQ0VQT0lOVFNcXG4rXFx0c2VsZWN0IElSUV9XT1JLXFxuK1xcbiBjb25maWcgUkNVX0ZBTk9VVFxcbiBcXHRpbnQgXFxcIlRyZWUtYmFzZWQgaGllcmFyY2hpY2FsIFJDVSBmYW5vdXQgdmFsdWVcXFwiXFxuIFxcdHJhbmdlIDIgNjQgaWYgNjRCSVRcXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9yY3UuaCBiL2tlcm5lbC9yY3UvcmN1LmhcXG5pbmRleCAzOWE5ZjZmYTlhN2IyLi44NGQ3NGNkNWEzNTFjIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9yY3UvcmN1LmhcXG4rKysgYi9rZXJuZWwvcmN1L3JjdS5oXFxuQEAgLTU3Miw2ICs1NzIsMjQgQEAgc3RhdGljIGlubGluZSB2b2lkIHRhc2tzX2NibGlzdF9pbml0X2dlbmVyaWModm9pZCkgeyB9XFxuICNkZWZpbmUgUkNVX1NDSEVEVUxFUl9JTklUXFx0MVxcbiAjZGVmaW5lIFJDVV9TQ0hFRFVMRVJfUlVOTklOR1xcdDJcXG4gXFxuKy8qXFxuKyAqIERlZmVyIGEgY2FsbF9yY3UoKS9jYWxsX3NyY3UoKSBjYWxsYmFjayByYXRoZXIgdGhhbiBlbnF1ZXVlIGl0IG5vdz8gIERlZmVyXFxuKyAqIHdoZW5ldmVyIGludGVycnVwdHMgYXJlIGRpc2FibGVkLCBzaW5jZSBhIGNhbGxiYWNrLWxpc3Qgb3BlcmF0aW9uIG1heSBiZSBpblxcbisgKiBmbGlnaHQgb24gdGhpcyBDUFUuICBOb3QgYmVmb3JlIHRoZSBzY2hlZHVsZXIgaXMgdXAsIHRob3VnaDogdGhhdCBjb3ZlcnNcXG4rICogZWFybHkgYm9vdCwgd2hlcmUgaXJxX3dvcmsgaXMgbm90IHlldCB1c2FibGUgYW5kIHJjdV9pbml0KCkgaXRzZWxmIGFscmVhZHlcXG4rICogY2FsbHMgY2FsbF9yY3UoKS5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfcmN1X2RlZmVyKHZvaWQpXFxuK3tcXG4rXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRyZXR1cm4gaXJxc19kaXNhYmxlZCgpIFxcdTAwMjZcXHUwMDI2IHJjdV9zY2hlZHVsZXJfYWN0aXZlICE9IFJDVV9TQ0hFRFVMRVJfSU5BQ1RJVkU7XFxuK31cXG4rXFxuKy8qIERyYWluIGFuIG91dGdvaW5nIENQVSdzIGRlZmVycmVkIFNSQ1UgY2FsbGJhY2tzOyBzZWUgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcygpLiAqL1xcbit2b2lkIHNyY3Vfb2ZmbGluZV9kcmFpbihpbnQgY3B1KTtcXG4rXFxuIGVudW0gcmN1dG9ydHVyZV90eXBlIHtcXG4gXFx0UkNVX0ZMQVZPUixcXG4gXFx0UkNVX1RBU0tTX0ZMQVZPUixcXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9yY3V0b3J0dXJlLmMgYi9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuY1xcbmluZGV4IDc5NDkzN2UxM2U3YzMuLmE4NGU3MjVlODA2NTYgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3JjdS9yY3V0b3J0dXJlLmNcXG4rKysgYi9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuY1xcbkBAIC00OCw2ICs0OCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC90aWNrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yY3VwZGF0ZV90cmFjZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbm1pLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wZXJmX2V2ZW50LmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwicmN1LmhcXFwiXFxuIFxcbkBAIC0xMTUsNiArMTE2LDcgQEAgdG9ydHVyZV9wYXJhbShpbnQsIGxlYWtwb2ludGVyLCAwLCBcXFwiTGVhayBwb2ludGVyIGRlcmVmZXJlbmNlcyBmcm9tIHJlYWRlcnNcXFwiKTtcXG4gdG9ydHVyZV9wYXJhbShpbnQsIG5fYmFycmllcl9jYnMsIDAsIFxcXCIjIG9mIGNhbGxiYWNrcy9rdGhyZWFkcyBmb3IgYmFycmllciB0ZXN0aW5nXFxcIik7XFxuIHRvcnR1cmVfcGFyYW0oaW50LCBuX3VwX2Rvd24sIDMyLCBcXFwiIyBvZiBjb25jdXJyZW50IHVwL2Rvd24gaHJ0aW1lci1iYXNlZCBSQ1UgcmVhZGVyc1xcXCIpO1xcbiB0b3J0dXJlX3BhcmFtKGludCwgbmZha2V3cml0ZXJzLCA0LCBcXFwiTnVtYmVyIG9mIFJDVSBmYWtlIHdyaXRlciB0aHJlYWRzXFxcIik7XFxuK3RvcnR1cmVfcGFyYW0oYm9vbCwgbm1pX2NhbGxzLCB0cnVlLCBcXFwiRXhlcmNpc2UgLVxcdTAwM2VjYWxsKCkgZnJvbSBOTUkgb24gbm1pX2NhcGFibGUgZmxhdm9yc1xcXCIpO1xcbiB0b3J0dXJlX3BhcmFtKGludCwgbnJlYWRlcnMsIC0xLCBcXFwiTnVtYmVyIG9mIFJDVSByZWFkZXIgdGhyZWFkc1xcXCIpO1xcbiB0b3J0dXJlX3BhcmFtKGJvb2wsIG53cml0ZXJzLCAxLCBcXFwiTnVtYmVyIG9mIFJDVSB3cml0ZXIgdGhyZWFkcyAoMCBvciAxKVxcXCIpO1xcbiB0b3J0dXJlX3BhcmFtKGludCwgb2JqZWN0X2RlYnVnLCAwLCBcXFwiRW5hYmxlIGRlYnVnLW9iamVjdCBkb3VibGUgY2FsbF9yY3UoKSB0ZXN0aW5nXFxcIik7XFxuQEAgLTIxNiw2ICsyMTgsOCBAQCBzdGF0aWMgbG9uZyBuX3JjdV90b3J0dXJlX2Jvb3N0X2ZhaWx1cmU7XFxuIHN0YXRpYyBsb25nIG5fcmN1X3RvcnR1cmVfYm9vc3RzO1xcbiBzdGF0aWMgYXRvbWljX2xvbmdfdCBuX3JjdV90b3J0dXJlX3RpbWVycztcXG4gc3RhdGljIGF0b21pY19sb25nX3Qgbl9yY3VfdG9ydHVyZV9pcnFzO1xcbitzdGF0aWMgYXRvbWljX2xvbmdfdCBuX3JjdV90b3J0dXJlX25taV9jYWxsO1xcbitzdGF0aWMgYXRvbWljX2xvbmdfdCBuX3JjdV90b3J0dXJlX25taV9jYjtcXG4gc3RhdGljIGxvbmcgbl9iYXJyaWVyX2F0dGVtcHRzO1xcbiBzdGF0aWMgbG9uZyBuX2JhcnJpZXJfc3VjY2Vzc2VzOyAvKiBkaWQgcmN1X2JhcnJpZXIgdGVzdCBzdWNjZWVkPyAqL1xcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBuX3JlYWRfZXhpdHM7XFxuQEAgLTQzMyw2ICs0MzcsNyBAQCBzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzIHtcXG4gXFx0Ym9vbCAoKmlzX3Rhc2tfcmN1X2Jvb3N0ZWQpKHZvaWQpO1xcbiBcXHRsb25nIGNiZmxvb2RfbWF4O1xcbiBcXHRpbnQgaXJxX2NhcGFibGU7XFxuK1xcdGludCBubWlfY2FwYWJsZTtcXG4gXFx0aW50IGNhbl9ib29zdDtcXG4gXFx0aW50IGV4dGVuZGFibGVzO1xcbiBcXHRpbnQgc2xvd19ncHM7XFxuQEAgLTY0OCw2ICs2NTMsNyBAQCBzdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlX29wcyByY3Vfb3BzID0ge1xcbiBcXHQuZXh0ZW5kYWJsZXNcXHRcXHQ9IFJDVVRPUlRVUkVfTUFYX0VYVEVORCxcXG4gXFx0LmRlYnVnX29iamVjdHNcXHRcXHQ9IDEsXFxuIFxcdC5zdGFydF9wb2xsX2lycXNvZmZcXHQ9IDEsXFxuK1xcdC5ubWlfY2FwYWJsZVxcdFxcdD0gMSxcXG4gXFx0Lm5hbWVcXHRcXHRcXHQ9IFxcXCJyY3VcXFwiXFxuIH07XFxuIFxcbkBAIC05NDIsNiArOTQ4LDcgQEAgc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgc3JjdV9vcHMgPSB7XFxuIFxcdC5kZWJ1Z19vYmplY3RzXFx0PSAxLFxcbiBcXHQuaGF2ZV91cF9kb3duXFx0PSBJU19FTkFCTEVEKENPTkZJR19USU5ZX1NSQ1UpXFxuIFxcdFxcdFxcdFxcdD8gMCA6IFNSQ1VfUkVBRF9GTEFWT1JfTk9STUFMIHwgU1JDVV9SRUFEX0ZMQVZPUl9GQVNUX1VQRE9XTixcXG4rXFx0Lm5taV9jYXBhYmxlXFx0PSAxLFxcbiBcXHQubmFtZVxcdFxcdD0gXFxcInNyY3VcXFwiXFxuIH07XFxuIFxcbkBAIC0xMDA1LDYgKzEwMTIsNyBAQCBzdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlX29wcyBzcmN1ZF9vcHMgPSB7XFxuIFxcdC5kZWJ1Z19vYmplY3RzXFx0PSAxLFxcbiBcXHQuaGF2ZV91cF9kb3duXFx0PSBJU19FTkFCTEVEKENPTkZJR19USU5ZX1NSQ1UpXFxuIFxcdFxcdFxcdFxcdD8gMCA6IFNSQ1VfUkVBRF9GTEFWT1JfTk9STUFMIHwgU1JDVV9SRUFEX0ZMQVZPUl9GQVNUX1VQRE9XTixcXG4rXFx0Lm5taV9jYXBhYmxlXFx0PSAxLFxcbiBcXHQubmFtZVxcdFxcdD0gXFxcInNyY3VkXFxcIlxcbiB9O1xcbiBcXG5AQCAtMTI2OSw2ICsxMjc3LDcgQEAgc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgdGFza3NfdHJhY2luZ19vcHMgPSB7XFxuIFxcdC5jYmZsb29kX21heFxcdD0gNTAwMDAsXFxuIFxcdC5pcnFfY2FwYWJsZVxcdD0gMSxcXG4gXFx0LnNsb3dfZ3BzXFx0PSAxLFxcbitcXHQubm1pX2NhcGFibGVcXHQ9IDEsXFxuIFxcdC5uYW1lXFx0XFx0PSBcXFwidGFza3MtdHJhY2luZ1xcXCJcXG4gfTtcXG4gXFxuQEAgLTI2NTksMTIgKzI2NjgsMTMxIEBAIHN0YXRpYyBib29sIHJjdV90b3J0dXJlX29uZV9yZWFkKHN0cnVjdCB0b3J0dXJlX3JhbmRvbV9zdGF0ZSAqdHJzcCwgbG9uZyBteWlkKVxcbiBcXG4gc3RhdGljIERFRklORV9UT1JUVVJFX1JBTkRPTV9QRVJDUFUocmN1X3RvcnR1cmVfdGltZXJfcmFuZCk7XFxuIFxcbisvKlxcbisgKiBFeGVyY2lzZSAtXFx1MDAzZWNhbGwoKSBmcm9tIE5NSSBjb250ZXh0IGZvciBmbGF2b3JzIHRoYXQgc2V0IC1cXHUwMDNlbm1pX2NhcGFibGUuICBBXFxuKyAqIHBlci1DUFUgaGFyZHdhcmUgcGVyZiBjb3VudGVyIG92ZXJmbG93cyBpbnRvIGFuIE5NSSwgYW5kIGl0cyBoYW5kbGVyIHN1Ym1pdHNcXG4rICogb25lIHByZWFsbG9jYXRlZCBjYWxsYmFjayB2aWEgLVxcdTAwM2VjYWxsKCkuICBPbmUgY2FsbGJhY2sgaXMgaW4gZmxpZ2h0IGF0IGEgdGltZVxcbisgKiAoZ3VhcmRlZCBieSBhbiBhdG9taWMpIHRvIGF2b2lkIGFsbG9jYXRpbmcgaW4gTk1JLiAgVGhpcyBtaXJyb3JzIGhvdyBhIEJQRlxcbisgKiBwcm9ncmFtIHJlYWNoZXMgLVxcdTAwM2VjYWxsKCkgZnJvbSBOTUkuXFxuKyAqL1xcbisjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTXFxuK3N0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIHJjdV90b3J0dXJlX25taV9hdHRyID0ge1xcbitcXHQudHlwZVxcdFxcdD0gUEVSRl9UWVBFX0hBUkRXQVJFLFxcbitcXHQuY29uZmlnXFx0XFx0PSBQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVMsXFxuK1xcdC5zaXplXFx0XFx0PSBzaXplb2Yoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciksXFxuK1xcdC5waW5uZWRcXHRcXHQ9IDEsXFxuK1xcdC5kaXNhYmxlZFxcdD0gMSxcXG4rXFx0LmZyZXFcXHRcXHQ9IDEsXFxuK1xcdC5zYW1wbGVfZnJlcVxcdD0gMTAwLFxcbit9O1xcbitcXG4rLyogT25lIGluLWZsaWdodCBjYWxsYmFjayBwZXIgQ1BVOyAtXFx1MDAzZWludXNlIGlzIHJlbGVhc2VkIGJ5IHRoZSBjYWxsYmFjay4gKi9cXG4rc3RydWN0IHJjdV90b3J0dXJlX25taV9jYnMge1xcbitcXHRzdHJ1Y3QgcmN1X2hlYWQgcmg7XFxuK1xcdGF0b21pY190IGludXNlO1xcbit9O1xcbitcXG4rc3RhdGljIHN0cnVjdCBwZXJmX2V2ZW50ICoqcmN1X3RvcnR1cmVfbm1pX2V2ZW50cztcXG4rc3RhdGljIGludCByY3VfdG9ydHVyZV9ubWlfaHBfc3RhdGU7XFxuK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcmN1X3RvcnR1cmVfbm1pX2NicywgcmN1X3RvcnR1cmVfbm1pX2Nicyk7XFxuK1xcbitzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfY2Ioc3RydWN0IHJjdV9oZWFkICpyaHApXFxuK3tcXG4rXFx0c3RydWN0IHJjdV90b3J0dXJlX25taV9jYnMgKnJ0bmNwID0gY29udGFpbmVyX29mKHJocCwgc3RydWN0IHJjdV90b3J0dXJlX25taV9jYnMsIHJoKTtcXG4rXFxuK1xcdGF0b21pY19sb25nX2luYyhcXHUwMDI2bl9yY3VfdG9ydHVyZV9ubWlfY2IpO1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZydG5jcC1cXHUwMDNlaW51c2UsIDApO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfb3ZlcmZsb3coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbit7XFxuK1xcdHN0cnVjdCByY3VfdG9ydHVyZV9ubWlfY2JzICpydG5jcCA9IHRoaXNfY3B1X3B0cihcXHUwMDI2cmN1X3RvcnR1cmVfbm1pX2Nicyk7XFxuK1xcbitcXHRpZiAoIWluX25taSgpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdGlmIChjdXJfb3BzLVxcdTAwM2VjYWxsIFxcdTAwMjZcXHUwMDI2ICFhdG9taWNfeGNoZyhcXHUwMDI2cnRuY3AtXFx1MDAzZWludXNlLCAxKSkge1xcbitcXHRcXHRhdG9taWNfbG9uZ19pbmMoXFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NhbGwpO1xcbitcXHRcXHRjdXJfb3BzLVxcdTAwM2VjYWxsKFxcdTAwMjZydG5jcC1cXHUwMDNlcmgsIHJjdV90b3J0dXJlX25taV9jYik7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludCByY3VfdG9ydHVyZV9ubWlfb25saW5lKHVuc2lnbmVkIGludCBjcHUpXFxuK3tcXG4rXFx0c3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50O1xcbitcXG4rXFx0ZXZlbnQgPSBwZXJmX2V2ZW50X2NyZWF0ZV9rZXJuZWxfY291bnRlcihcXHUwMDI2cmN1X3RvcnR1cmVfbm1pX2F0dHIsIGNwdSwgTlVMTCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IHJjdV90b3J0dXJlX25taV9vdmVyZmxvdywgTlVMTCk7XFxuK1xcdGlmIChJU19FUlIoZXZlbnQpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmN1X3RvcnR1cmVfbm1pX2V2ZW50c1tjcHVdID0gZXZlbnQ7XFxuK1xcdHBlcmZfZXZlbnRfZW5hYmxlKGV2ZW50KTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmN1X3RvcnR1cmVfbm1pX29mZmxpbmUodW5zaWduZWQgaW50IGNwdSlcXG4re1xcbitcXHRzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSByY3VfdG9ydHVyZV9ubWlfZXZlbnRzW2NwdV07XFxuK1xcbitcXHRpZiAoZXZlbnQpIHtcXG4rXFx0XFx0cmN1X3RvcnR1cmVfbm1pX2V2ZW50c1tjcHVdID0gTlVMTDtcXG4rXFx0XFx0cGVyZl9ldmVudF9kaXNhYmxlKGV2ZW50KTtcXG4rXFx0XFx0cGVyZl9ldmVudF9yZWxlYXNlX2tlcm5lbChldmVudCk7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qXFxuKyAqIERyaXZlIHRoZSBjb3VudGVycyBmcm9tIENQVS1ob3RwbHVnIGNhbGxiYWNrcyBzbyB0aGF0IGNvdmVyYWdlIHN1cnZpdmVzIHRoZVxcbisgKiBvbm9mZiB0ZXN0aW5nIHRoYXQgbW9zdCBzY2VuYXJpb3MgcnVuLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2luaXQodm9pZClcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCFubWlfY2FsbHMgfHwgIWN1cl9vcHMtXFx1MDAzZW5taV9jYXBhYmxlIHx8ICFjdXJfb3BzLVxcdTAwM2VjYWxsKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdHJjdV90b3J0dXJlX25taV9ldmVudHMgPSBrY2FsbG9jKG5yX2NwdV9pZHMsIHNpemVvZigqcmN1X3RvcnR1cmVfbm1pX2V2ZW50cyksXFxuK1xcdFxcdFxcdFxcdFxcdCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFyY3VfdG9ydHVyZV9ubWlfZXZlbnRzKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdHJldCA9IGNwdWhwX3NldHVwX3N0YXRlKENQVUhQX0FQX09OTElORV9EWU4sIFxcXCJyY3V0b3J0dXJlL25taTpvbmxpbmVcXFwiLFxcbitcXHRcXHRcXHRcXHRyY3VfdG9ydHVyZV9ubWlfb25saW5lLCByY3VfdG9ydHVyZV9ubWlfb2ZmbGluZSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGtmcmVlKHJjdV90b3J0dXJlX25taV9ldmVudHMpO1xcbitcXHRcXHRyY3VfdG9ydHVyZV9ubWlfZXZlbnRzID0gTlVMTDtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcdHJjdV90b3J0dXJlX25taV9ocF9zdGF0ZSA9IHJldDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2NsZWFudXAodm9pZClcXG4re1xcbitcXHRpZiAoIXJjdV90b3J0dXJlX25taV9ldmVudHMpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0aWYgKHJjdV90b3J0dXJlX25taV9ocF9zdGF0ZSBcXHUwMDNlIDApIHtcXG4rXFx0XFx0Y3B1aHBfcmVtb3ZlX3N0YXRlKHJjdV90b3J0dXJlX25taV9ocF9zdGF0ZSk7XFxuK1xcdFxcdHJjdV90b3J0dXJlX25taV9ocF9zdGF0ZSA9IDA7XFxuK1xcdH1cXG4rXFx0a2ZyZWUocmN1X3RvcnR1cmVfbm1pX2V2ZW50cyk7XFxuK1xcdHJjdV90b3J0dXJlX25taV9ldmVudHMgPSBOVUxMO1xcbitcXHRpZiAoIWF0b21pY19sb25nX3JlYWQoXFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NhbGwpKVxcbitcXHRcXHRwcl9hbGVydChcXFwiJXM6IG5taV9jYWxscyBzZXQgYnV0IG5vIC1cXHUwMDNlY2FsbCgpIGlzc3VlZCBmcm9tIE5NSTogbm90IHN1cHBvcnRlZCBoZXJlLlxcXFxuXFxcIixcXG4rXFx0XFx0XFx0IF9fZnVuY19fKTtcXG4rfVxcbisjZWxzZSAvKiAjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTICovXFxuK3N0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9pbml0KHZvaWQpIHsgfVxcbitzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfY2xlYW51cCh2b2lkKSB7IH1cXG4rI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMgKi9cXG4rXFxuIC8qXFxuICAqIFJDVSB0b3J0dXJlIHJlYWRlciBmcm9tIHRpbWVyIGhhbmRsZXIuICBEZXJlZmVyZW5jZXMgcmN1X3RvcnR1cmVfY3VycmVudCxcXG4gICogaW5jcmVtZW50aW5nIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgb2YgdGhlIHBpcGVsaW5lIGFycmF5LiAgVGhlXFxuICAqIGNvdW50ZXIgaW4gdGhlIGVsZW1lbnQgc2hvdWxkIG5ldmVyIGJlIGdyZWF0ZXIgdGhhbiAxLCBvdGhlcndpc2UsIHRoZVxcbiAgKiBSQ1UgaW1wbGVtZW50YXRpb24gaXMgYnJva2VuLlxcbiAgKi9cXG4rXFxuIHN0YXRpYyB2b2lkIHJjdV90b3J0dXJlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp1bnVzZWQpXFxuIHtcXG4gXFx0V0FSTl9PTl9PTkNFKCFpbl9zZXJ2aW5nX3NvZnRpcnEoKSk7XFxuQEAgLTMwNDcsNiArMzE3NSw5IEBAIHJjdV90b3J0dXJlX3N0YXRzX3ByaW50KHZvaWQpXFxuIFxcdFxcdGRhdGFfcmFjZShuX2JhcnJpZXJfYXR0ZW1wdHMpLFxcbiBcXHRcXHRkYXRhX3JhY2Uobl9yY3VfdG9ydHVyZV9iYXJyaWVyX2Vycm9yKSk7XFxuIFxcdHByX2NvbnQoXFxcInJlYWQtZXhpdHM6ICVsZCBcXFwiLCBkYXRhX3JhY2Uobl9yZWFkX2V4aXRzKSk7IC8vIFN0YXRpc3RpYy5cXG4rXFx0cHJfY29udChcXFwibm1pLWNhbGxzOiAlbGQgbm1pLWNiczogJWxkIFxcXCIsXFxuK1xcdFxcdGF0b21pY19sb25nX3JlYWQoXFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NhbGwpLFxcbitcXHRcXHRhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYikpO1xcbiBcXHRwcl9jb250KFxcXCJub2NiLXRvZ2dsZXM6ICVsZDolbGQgXFxcIixcXG4gXFx0XFx0YXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bl9ub2NiX29mZmxvYWQpLCBhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZuX25vY2JfZGVvZmZsb2FkKSk7XFxuIFxcdHByX2NvbnQoXFxcImdwd3JhcHM6ICVsZFxcXFxuXFxcIiwgbl9ncHdyYXBzKTtcXG5AQCAtMzE5NSw3ICszMzI2LDcgQEAgcmN1X3RvcnR1cmVfcHJpbnRfbW9kdWxlX3Bhcm1zKHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgKmN1cl9vcHMsIGNvbnN0IGNoYXIgKnRhZylcXG4gXFx0XFx0IFxcXCJyZWFkX2V4aXRfZGVsYXk9JWQgcmVhZF9leGl0X2J1cnN0PSVkIFxcXCJcXG4gXFx0XFx0IFxcXCJyZWFkZXJfZmxhdm9yPSV4IFxcXCJcXG4gXFx0XFx0IFxcXCJub2Nic19udGhyZWFkcz0lZCBub2Nic190b2dnbGU9JWQgXFxcIlxcbi1cXHRcXHQgXFxcInRlc3Rfbm1pcz0lZCBcXFwiXFxuK1xcdFxcdCBcXFwidGVzdF9ubWlzPSVkIG5taV9jYWxscz0lZCBcXFwiXFxuIFxcdFxcdCBcXFwicHJlZW1wdF9kdXJhdGlvbj0lZCBwcmVlbXB0X2ludGVydmFsPSVkIG5fdXBfZG93bj0lZFxcXFxuXFxcIixcXG4gXFx0XFx0IHRvcnR1cmVfdHlwZSwgdGFnLCBucmVhbHJlYWRlcnMsIG53cml0ZXJzLCBucmVhbGZha2V3cml0ZXJzLFxcbiBcXHRcXHQgc3RhdF9pbnRlcnZhbCwgdmVyYm9zZSwgdGVzdF9ub19pZGxlX2h6LCBzaHVmZmxlX2ludGVydmFsLFxcbkBAIC0zMjA5LDcgKzMzNDAsNyBAQCByY3VfdG9ydHVyZV9wcmludF9tb2R1bGVfcGFybXMoc3RydWN0IHJjdV90b3J0dXJlX29wcyAqY3VyX29wcywgY29uc3QgY2hhciAqdGFnKVxcbiBcXHRcXHQgcmVhZF9leGl0X2RlbGF5LCByZWFkX2V4aXRfYnVyc3QsXFxuIFxcdFxcdCByZWFkZXJfZmxhdm9yLFxcbiBcXHRcXHQgbm9jYnNfbnRocmVhZHMsIG5vY2JzX3RvZ2dsZSxcXG4tXFx0XFx0IHRlc3Rfbm1pcyxcXG4rXFx0XFx0IHRlc3Rfbm1pcywgbm1pX2NhbGxzLFxcbiBcXHRcXHQgcHJlZW1wdF9kdXJhdGlvbiwgcHJlZW1wdF9pbnRlcnZhbCwgbl91cF9kb3duKTtcXG4gfVxcbiBcXG5AQCAtNDI4Myw2ICs0NDE0LDcgQEAgcmN1X3RvcnR1cmVfY2xlYW51cCh2b2lkKVxcbiBcXHRpbnQgaTtcXG4gXFxuIFxcdGlmICh0b3J0dXJlX2NsZWFudXBfYmVnaW4oKSkge1xcbitcXHRcXHRyY3VfdG9ydHVyZV9ubWlfY2xlYW51cCgpO1xcbiBcXHRcXHRpZiAoY3VyX29wcy1cXHUwMDNlY2JfYmFycmllciAhPSBOVUxMKSB7XFxuIFxcdFxcdFxcdHByX2luZm8oXFxcIiVzOiBJbnZva2luZyAlcFMoKS5cXFxcblxcXCIsIF9fZnVuY19fLCBjdXJfb3BzLVxcdTAwM2VjYl9iYXJyaWVyKTtcXG4gXFx0XFx0XFx0Y3VyX29wcy1cXHUwMDNlY2JfYmFycmllcigpO1xcbkBAIC00MzI1LDYgKzQ0NTcsOCBAQCByY3VfdG9ydHVyZV9jbGVhbnVwKHZvaWQpXFxuIFxcdFxcdGtmcmVlKHJlYWRlcl90YXNrcyk7XFxuIFxcdFxcdHJlYWRlcl90YXNrcyA9IE5VTEw7XFxuIFxcdH1cXG4rXFx0LyogRGlzYWJsZSB0aGUgcGVyZiBjb3VudGVycyAoYW5kIHRodXMgdGhlIE5NSSAtXFx1MDAzZWNhbGwoKSBmaXJpbmcpIG5vdy4gKi9cXG4rXFx0cmN1X3RvcnR1cmVfbm1pX2NsZWFudXAoKTtcXG4gXFx0a2ZyZWUocmN1X3RvcnR1cmVfcmVhZGVyX21iY2hrKTtcXG4gXFx0cmN1X3RvcnR1cmVfcmVhZGVyX21iY2hrID0gTlVMTDtcXG4gXFxuQEAgLTQzNTQsNiArNDQ4OCwyMCBAQCByY3VfdG9ydHVyZV9jbGVhbnVwKHZvaWQpXFxuIFxcdFxcdHByX2luZm8oXFxcIiVzOiBJbnZva2luZyAlcFMoKS5cXFxcblxcXCIsIF9fZnVuY19fLCBjdXJfb3BzLVxcdTAwM2VjYl9iYXJyaWVyKTtcXG4gXFx0XFx0Y3VyX29wcy1cXHUwMDNlY2JfYmFycmllcigpO1xcbiBcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBjYl9iYXJyaWVyKCkgYWJvdmUgZHJhaW5lZCBldmVyeSBkZWZlcnJlZCBOTUkgLVxcdTAwM2VjYWxsKCkgY2FsbGJhY2ssIHNvIHRoZVxcbitcXHQgKiBjb3VudCBpc3N1ZWQgZnJvbSBOTUkgbXVzdCBlcXVhbCB0aGUgY291bnQgaW52b2tlZDsgYSBtaXNtYXRjaCBtZWFucyBhXFxuK1xcdCAqIGNhbGxiYWNrIHdhcyBsb3N0LlxcbitcXHQgKi9cXG4rXFx0aWYgKGF0b21pY19sb25nX3JlYWQoXFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NhbGwpICE9XFxuK1xcdCAgICBhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYikpIHtcXG4rXFx0XFx0cHJfYWxlcnQoXFxcIiVzOiBOTUkgLVxcdTAwM2VjYWxsKCkgbG9zdCBhIGNhbGxiYWNrOiBpc3N1ZWQgJWxkIGludm9rZWQgJWxkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgX19mdW5jX18sIGF0b21pY19sb25nX3JlYWQoXFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NhbGwpLFxcbitcXHRcXHRcXHQgYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bl9yY3VfdG9ydHVyZV9ubWlfY2IpKTtcXG4rXFx0XFx0YXRvbWljX2luYyhcXHUwMDI2bl9yY3VfdG9ydHVyZV9lcnJvcik7XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChjdXJfb3BzLVxcdTAwM2VjbGVhbnVwICE9IE5VTEwpXFxuIFxcdFxcdGN1cl9vcHMtXFx1MDAzZWNsZWFudXAoKTtcXG4gXFxuQEAgLTQ3ODYsNiArNDkzNCw4IEBAIHJjdV90b3J0dXJlX2luaXQodm9pZClcXG4gXFx0XFx0Zmlyc3RlcnIgPSAtRU5PTUVNO1xcbiBcXHRcXHRnb3RvIHVud2luZDtcXG4gXFx0fVxcbitcXHQvKiBBcm0gdGhlIHBlci1DUFUgcGVyZiBjb3VudGVycyB0aGF0IGRyaXZlIC1cXHUwMDNlY2FsbCgpIGZyb20gTk1JLiAqL1xcbitcXHRyY3VfdG9ydHVyZV9ubWlfaW5pdCgpO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJlYWxyZWFkZXJzOyBpKyspIHtcXG4gXFx0XFx0cmN1X3RvcnR1cmVfcmVhZGVyX21iY2hrW2ldLnJ0Y19jaGtyZHIgPSAtMTtcXG4gXFx0XFx0Zmlyc3RlcnIgPSB0b3J0dXJlX2NyZWF0ZV9rdGhyZWFkKHJjdV90b3J0dXJlX3JlYWRlciwgKHZvaWQgKilpLFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3NyY3V0aW55LmMgYi9rZXJuZWwvcmN1L3NyY3V0aW55LmNcXG5pbmRleCA1NThiYThkMzE2ZGI2Li43YTdjMWNlZjQzZTEzIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9yY3Uvc3JjdXRpbnkuY1xcbisrKyBiL2tlcm5lbC9yY3Uvc3JjdXRpbnkuY1xcbkBAIC0xMCw2ICsxMCw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcnFfd29yay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGxpc3QuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L211dGV4LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcmVlbXB0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yY3VwZGF0ZV93YWl0LmhcXHUwMDNlXFxuQEAgLTI5LDYgKzMwLDggQEAgZXh0ZXJuIGludCByY3Vfc2NoZWR1bGVyX2FjdGl2ZTtcXG4gc3RhdGljIExJU1RfSEVBRChzcmN1X2Jvb3RfbGlzdCk7XFxuIHN0YXRpYyBib29sIHNyY3VfaW5pdF9kb25lO1xcbiBcXG4rc3RhdGljIHZvaWQgX19zcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBib29sIGd1YXJkKTtcXG4rXFxuIHN0YXRpYyBpbnQgaW5pdF9zcmN1X3N0cnVjdF9maWVsZHMoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXFxuIHtcXG4gXFx0c3NwLVxcdTAwM2VzcmN1X2xvY2tfbmVzdGluZ1swXSA9IDA7XFxuQEAgLTQzLDYgKzQ2LDggQEAgc3RhdGljIGludCBpbml0X3NyY3Vfc3RydWN0X2ZpZWxkcyhzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG4gXFx0SU5JVF9XT1JLKFxcdTAwMjZzc3AtXFx1MDAzZXNyY3Vfd29yaywgc3JjdV9kcml2ZV9ncCk7XFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZzc3AtXFx1MDAzZXNyY3Vfd29yay5lbnRyeSk7XFxuIFxcdGluaXRfaXJxX3dvcmsoXFx1MDAyNnNzcC1cXHUwMDNlc3JjdV9pcnFfd29yaywgc3JjdV90aW55X2lycV93b3JrKTtcXG4rXFx0aW5pdF9sbGlzdF9oZWFkKFxcdTAwMjZzc3AtXFx1MDAzZWRlZmVyX2Nicyk7XFxuK1xcdHNzcC1cXHUwMDNlZGVmZXJfaXcgPSBJUlFfV09SS19JTklUX0hBUkQoc3JjdV9kZWZlcl9kcmFpbik7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC04Niw2ICs5MSwxMSBAQCBFWFBPUlRfU1lNQk9MX0dQTChpbml0X3NyY3Vfc3RydWN0X2dlbmVyaWMpO1xcbiB2b2lkIGNsZWFudXBfc3JjdV9zdHJ1Y3Qoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXFxuIHtcXG4gXFx0V0FSTl9PTihzcmN1X3JlYWRlcnNfYWN0aXZlKHNzcCkpO1xcbitcXHQvKiBSZS1pc3N1ZSBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzLCB0aGVuIHdhaXQgb3V0IC1cXHUwMDNlZGVmZXJfaXcgYmVmb3JlIGl0IGlzIGZyZWVkLiAqL1xcbitcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSkge1xcbitcXHRcXHRfX3NyY3VfZGVmZXJfZHJhaW4oc3NwLCBmYWxzZSk7XFxuK1xcdFxcdGlycV93b3JrX3N5bmMoXFx1MDAyNnNzcC1cXHUwMDNlZGVmZXJfaXcpO1xcbitcXHR9XFxuIFxcdGlycV93b3JrX3N5bmMoXFx1MDAyNnNzcC1cXHUwMDNlc3JjdV9pcnFfd29yayk7XFxuIFxcdGZsdXNoX3dvcmsoXFx1MDAyNnNzcC1cXHUwMDNlc3JjdV93b3JrKTtcXG4gXFx0V0FSTl9PTihzc3AtXFx1MDAzZXNyY3VfZ3BfcnVubmluZyk7XFxuQEAgLTIxMywxMSArMjIzLDExIEBAIHN0YXRpYyB2b2lkIHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxcbiB9XFxuIFxcbiAvKlxcbi0gKiBFbnF1ZXVlIGFuIFNSQ1UgY2FsbGJhY2sgb24gdGhlIHNwZWNpZmllZCBzcmN1X3N0cnVjdCBzdHJ1Y3R1cmUsXFxuLSAqIGluaXRpYXRpbmcgZ3JhY2UtcGVyaW9kIHByb2Nlc3NpbmcgaWYgaXQgaXMgbm90IGFscmVhZHkgcnVubmluZy5cXG4rICogRW5xdWV1ZSBAcmhwIG9uIHRoZSBjYWxsYmFjayBsaXN0LiAgQWxzbyBjYWxsZWQgYnkgc3JjdV9kZWZlcl9kcmFpbigpIHRvXFxuKyAqIHJlLWlzc3VlIGEgZGVmZXJyZWQgY2FsbGJhY2ssIHNvIGl0IG11c3Qgbm90IHJlLWNoZWNrIHRoZSBkZWZlcnJhbCBjb25kaXRpb24uXFxuICAqL1xcbi12b2lkIGNhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsXFxuLVxcdCAgICAgICByY3VfY2FsbGJhY2tfdCBmdW5jKVxcbitzdGF0aWMgdm9pZCBzcmN1X2RvX2VucXVldWUoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxcbitcXHRcXHRcXHQgICAgcmN1X2NhbGxiYWNrX3QgZnVuYylcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXG5AQCAtMjMxLDYgKzI0MSw1OCBAQCB2b2lkIGNhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsXFxuIFxcdHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHNzcCk7XFxuIFxcdHByZWVtcHRfZW5hYmxlKCk7XFxuIH1cXG4rXFxuKy8qIFNldCB3aGlsZSBzcmN1X2RlZmVyX2RyYWluKCkgcmUtaXNzdWVzLCB0byBjYXRjaCBhIHJlLWVudHJhbnQgY2FsbF9zcmN1KCkuICovXFxuK3N0YXRpYyBib29sIHNyY3VfZGVmZXJfZHJhaW5pbmc7XFxuK1xcbitzdGF0aWMgdm9pZCBfX3NyY3VfZGVmZXJfZHJhaW4oc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIGJvb2wgZ3VhcmQpXFxuK3tcXG4rXFx0c3RydWN0IGxsaXN0X25vZGUgKm5vZGUsICpuZXh0O1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXG4rXFx0LyogQ2FsbGJhY2tzIGFyZSB1bm9yZGVyZWQsIHNvIGRyYWluIGluIGxsaXN0IG9yZGVyIHdpdGhvdXQgcmV2ZXJzaW5nLiAqL1xcbitcXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XFxuK1xcdGlmIChndWFyZClcXG4rXFx0XFx0V1JJVEVfT05DRShzcmN1X2RlZmVyX2RyYWluaW5nLCB0cnVlKTtcXG4rXFx0bGxpc3RfZm9yX2VhY2hfc2FmZShub2RlLCBuZXh0LCBsbGlzdF9kZWxfYWxsKFxcdTAwMjZzc3AtXFx1MDAzZWRlZmVyX2NicykpIHtcXG4rXFx0XFx0c3RydWN0IHJjdV9oZWFkICpyaHAgPSAoc3RydWN0IHJjdV9oZWFkICopbm9kZTtcXG4rXFxuK1xcdFxcdHJocC1cXHUwMDNlbmV4dCA9IE5VTEw7XFxuK1xcdFxcdHNyY3VfZG9fZW5xdWV1ZShzc3AsIHJocCwgcmhwLVxcdTAwM2VmdW5jKTtcXG4rXFx0fVxcbitcXHRpZiAoZ3VhcmQpXFxuK1xcdFxcdFdSSVRFX09OQ0Uoc3JjdV9kZWZlcl9kcmFpbmluZywgZmFsc2UpO1xcbitcXHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XFxuK31cXG4rXFxuKy8qIE9ubHkgdGhlIGlycV93b3JrIGRyYWluIGNhbiBiZSByZS1mZWQgYnkgaXRzIG93biByZS1pc3N1ZTsgc2VlIFRyZWUgU1JDVS4gKi9cXG4rdm9pZCBzcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpXFxuK3tcXG4rXFx0X19zcmN1X2RlZmVyX2RyYWluKGNvbnRhaW5lcl9vZihpdywgc3RydWN0IHNyY3Vfc3RydWN0LCBkZWZlcl9pdyksIHRydWUpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHNyY3VfZGVmZXJfZHJhaW4pO1xcbitcXG4rdm9pZCBjYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxcbitcXHQgICAgICAgcmN1X2NhbGxiYWNrX3QgZnVuYylcXG4re1xcbitcXHRpZiAoc2hvdWxkX3JjdV9kZWZlcigpKSB7XFxuK1xcdFxcdC8qIEEgcmUtZW50cmFudCBjYWxsX3NyY3UoKSBkdXJpbmcgdGhlIGRyYWluIHdvdWxkIGxpdmVsb2NrIGl0LiAqL1xcbitcXHRcXHRpZiAoUkVBRF9PTkNFKHNyY3VfZGVmZXJfZHJhaW5pbmcpIFxcdTAwMjZcXHUwMDI2ICFpbl9ubWkoKSkge1xcbitcXHRcXHRcXHRXQVJOX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSxcXG4rXFx0XFx0XFx0XFx0ICBcXFwiY2FsbF9zcmN1KCkgcmUtZW50ZXJlZCBkdXJpbmcgY2FsbGJhY2sgZHJhaW47IGxlYWtpbmcgY2FsbGJhY2tcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmhwLVxcdTAwM2VmdW5jID0gZnVuYztcXG4rXFx0XFx0aWYgKGxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKilyaHAsIFxcdTAwMjZzc3AtXFx1MDAzZWRlZmVyX2NicykpXFxuK1xcdFxcdFxcdGlycV93b3JrX3F1ZXVlKFxcdTAwMjZzc3AtXFx1MDAzZWRlZmVyX2l3KTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHQvKiBBbiBOTUkgcmVhY2hpbmcgaGVyZSBlbnRlcmVkIHdpdGggaXJxcyBlbmFibGVkLCBzbyB0aGUgZW5xdWV1ZSBjYW4gcmFjZS4gKi9cXG4rXFx0V0FSTl9PTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSkgXFx1MDAyNlxcdTAwMjYgaW5fbm1pKCkpO1xcbitcXG4rXFx0c3JjdV9kb19lbnF1ZXVlKHNzcCwgcmhwLCBmdW5jKTtcXG4rfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChjYWxsX3NyY3UpO1xcbiBcXG4gLypcXG5AQCAtMjYwLDYgKzMyMiwxNSBAQCB2b2lkIHN5bmNocm9uaXplX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfc3JjdSk7XFxuIFxcbisvKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzLCB0aGVuIHdhaXQgZm9yIGFsbCBpbi1mbGlnaHQgb25lcy4gKi9cXG4rdm9pZCBzcmN1X2JhcnJpZXIoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXFxuK3tcXG4rXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpXFxuK1xcdFxcdF9fc3JjdV9kZWZlcl9kcmFpbihzc3AsIGZhbHNlKTtcXG4rXFx0c3luY2hyb25pemVfc3JjdShzc3ApO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHNyY3VfYmFycmllcik7XFxuK1xcbiAvKlxcbiAgKiBnZXRfc3RhdGVfc3luY2hyb25pemVfc3JjdSAtIFByb3ZpZGUgYW4gZW5kLW9mLWdyYWNlLXBlcmlvZCBjb29raWVcXG4gICovXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3Uvc3JjdXRyZWUuYyBiL2tlcm5lbC9yY3Uvc3JjdXRyZWUuY1xcbmluZGV4IDMwNDExMjY3NGU4YTIuLjM1ZmZhY2U1MWQ1MGIgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3JjdS9zcmN1dHJlZS5jXFxuKysrIGIva2VybmVsL3JjdS9zcmN1dHJlZS5jXFxuQEAgLTIwLDYgKzIwLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BlcmNwdS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJlZW1wdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaXJxX3dvcmsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xsaXN0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yY3VwZGF0ZV93YWl0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc21wLmhcXHUwMDNlXFxuQEAgLTc5LDYgKzgwLDQ1IEBAIHN0YXRpYyB2b2lkIHByb2Nlc3Nfc3JjdShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbiBzdGF0aWMgdm9pZCBzcmN1X2lycV93b3JrKHN0cnVjdCBpcnFfd29yayAqd29yayk7XFxuIHN0YXRpYyB2b2lkIHNyY3VfZGVsYXlfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xcbiBcXG4rc3RydWN0IHNyY3VfZGVmZXI7XFxuK3N0YXRpYyB2b2lkIHNyY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdyk7XFxuK3N0YXRpYyB2b2lkIF9fc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3Qgc3JjdV9kZWZlciAqc25kcCwgYm9vbCBndWFyZCk7XFxuK1xcbisvKlxcbisgKiBQZXItQ1BVIGNhbGxfc3JjdSgpIGRlZmVycmFsIHN0YXRlLCBzaGFyZWQgYnkgZXZlcnkgc3JjdV9zdHJ1Y3QuICBBIGRlZmVycmVkXFxuKyAqIGNhbGxiYWNrIGlzIHN0YWdlZCBvbiBpdHMgc3JjdV9kYXRhJ3MgLVxcdTAwM2VkZWZlcl9jYnM7IHRoYXQgc3JjdV9kYXRhIGlzIGNoYWluZWRcXG4rICogdmlhIC1cXHUwMDNlZGVmZXJfbGluayBvbnRvIC1cXHUwMDNlbGlzdCwgd2hpY2ggdGhlIGlycV93b3JrIHdhbGtzLlxcbisgKi9cXG4rc3RydWN0IHNyY3VfZGVmZXIge1xcbitcXHRzdHJ1Y3QgbGxpc3RfaGVhZFxcdGxpc3Q7XFxuK1xcdHN0cnVjdCBpcnFfd29ya1xcdFxcdGl3O1xcbitcXHRyYXdfc3BpbmxvY2tfdFxcdFxcdGxvY2s7XFxuK1xcdGJvb2xcXHRcXHRcXHRkcmFpbmluZztcXG4rfTtcXG4rXFxuK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc3JjdV9kZWZlciwgc3JjdV9kZWZlcikgPSB7XFxuK1xcdC5sb2NrID0gX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VEKHNyY3VfZGVmZXIubG9jayksXFxuK1xcdC5pdyA9IElSUV9XT1JLX0lOSVRfSEFSRChzcmN1X2RlZmVyX2RyYWluKSxcXG4rfTtcXG4rXFxuKy8qXFxuKyAqIEZsdXNoIHBlbmRpbmcgZGVmZXJyZWQgY2FsbGJhY2tzIHNvIGEgZm9sbG93aW5nIHNyY3VfYmFycmllcigpIHdhaXRzIGZvciB0aGVtLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgc3JjdV9kZWZlcl9mbHVzaCh2b2lkKVxcbit7XFxuK1xcdGludCBjcHU7XFxuK1xcbitcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcXG4rXFx0XFx0c3RydWN0IHNyY3VfZGVmZXIgKnNuZHAgPSBcXHUwMDI2cGVyX2NwdShzcmN1X2RlZmVyLCBjcHUpO1xcbitcXG4rXFx0XFx0aWYgKCFsbGlzdF9lbXB0eShcXHUwMDI2c25kcC1cXHUwMDNlbGlzdCkpXFxuK1xcdFxcdFxcdF9fc3JjdV9kZWZlcl9kcmFpbihzbmRwLCBmYWxzZSk7XFxuK1xcdH1cXG4rfVxcbitcXG4gLypcXG4gICogSW5pdGlhbGl6ZSBTUkNVIHBlci1DUFUgZGF0YS4gIE5vdGUgdGhhdCBzdGF0aWNhbGx5IGFsbG9jYXRlZFxcbiAgKiBzcmN1X3N0cnVjdCBzdHJ1Y3R1cmVzIG1pZ2h0IGFscmVhZHkgaGF2ZSBzcmN1X3JlYWRfbG9jaygpIGFuZFxcbkBAIC0xMDcsNiArMTQ3LDExIEBAIHN0YXRpYyB2b2lkIGluaXRfc3JjdV9zdHJ1Y3RfZGF0YShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG4gXFx0XFx0c2RwLVxcdTAwM2VjcHUgPSBjcHU7XFxuIFxcdFxcdElOSVRfV09SSyhcXHUwMDI2c2RwLVxcdTAwM2V3b3JrLCBzcmN1X2ludm9rZV9jYWxsYmFja3MpO1xcbiBcXHRcXHR0aW1lcl9zZXR1cChcXHUwMDI2c2RwLVxcdTAwM2VkZWxheV93b3JrLCBzcmN1X2RlbGF5X3RpbWVyLCAwKTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogLVxcdTAwM2VkZWZlcl9jYnMsIC1cXHUwMDNlZGVmZXJfbGluayBhbmQgLVxcdTAwM2VkZWZlcl9leHAgYXJlIHZhbGlkIHdoZW4gemVyb2VkXFxuK1xcdFxcdCAqIGFuZCBhcmUgbm90IHJlaW5pdGlhbGl6ZWQgaGVyZSwgbGVzdCB3ZSBjbG9iYmVyIGNhbGxiYWNrcyBhXFxuK1xcdFxcdCAqIHJlZW50cmFudCBjYWxsX3NyY3UoKSBhbHJlYWR5IHN0YWdlZC4gIFNlZSBfX2NhbGxfc3JjdSgpLlxcbitcXHRcXHQgKi9cXG4gXFx0XFx0c2RwLVxcdTAwM2Vzc3AgPSBzc3A7XFxuIFxcdH1cXG4gfVxcbkBAIC02OTUsNyArNzQwLDEyIEBAIHZvaWQgY2xlYW51cF9zcmN1X3N0cnVjdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG4gXFx0XFx0cmV0dXJuOyAvKiBKdXN0IGxlYWsgaXQhICovXFxuIFxcdGlmIChXQVJOX09OKHNyY3VfcmVhZGVyc19hY3RpdmUoc3NwKSkpXFxuIFxcdFxcdHJldHVybjsgLyogSnVzdCBsZWFrIGl0ISAqL1xcbi1cXHQvKiBXYWl0IGZvciBpcnFfd29yayB0byBmaW5pc2ggZmlyc3QgYXMgaXQgbWF5IHF1ZXVlIGEgbmV3IHdvcmsuICovXFxuK1xcdC8qXFxuK1xcdCAqIERyYWluIGRlZmVycmVkIGNhbGxiYWNrcyBiZWZvcmUgc3luY2luZyAtXFx1MDAzZWlycV93b3JrOiByZS1pc3N1aW5nIG9uZSBjYW5cXG4rXFx0ICogc3RhcnQgYSBncmFjZSBwZXJpb2QgYW5kIHJlLXF1ZXVlIC1cXHUwMDNlaXJxX3dvcmssIHdoaWNoIHRoZW4gc2NoZWR1bGVzXFxuK1xcdCAqIC1cXHUwMDNld29yaywgc28gYm90aCBtdXN0IGJlIHdhaXRlZCBvdXQgYWZ0ZXIgdGhlIGRyYWluLlxcbitcXHQgKi9cXG4rXFx0c3JjdV9kZWZlcl9mbHVzaCgpO1xcbiBcXHRpcnFfd29ya19zeW5jKFxcdTAwMjZzdXAtXFx1MDAzZWlycV93b3JrKTtcXG4gXFx0Zmx1c2hfZGVsYXllZF93b3JrKFxcdTAwMjZzdXAtXFx1MDAzZXdvcmspO1xcbiBcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XFxuQEAgLTE0MTAsOCArMTQ2MCw4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLFxcbiAgKiBzcmN1X3JlYWRfbG9jaygpLCBhbmQgc3JjdV9yZWFkX3VubG9jaygpIHRoYXQgYXJlIGFsbCBwYXNzZWQgdGhlIHNhbWVcXG4gICogc3JjdV9zdHJ1Y3Qgc3RydWN0dXJlLlxcbiAgKi9cXG4tc3RhdGljIHZvaWQgX19jYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxcbi1cXHRcXHRcXHRyY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGRvX25vcm0pXFxuK3N0YXRpYyB2b2lkIHNyY3VfZG9fZW5xdWV1ZShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsXFxuK1xcdFxcdFxcdCAgICByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGRvX25vcm0pXFxuIHtcXG4gXFx0aWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKHJocCkpIHtcXG4gXFx0XFx0LyogUHJvYmFibGUgZG91YmxlIGNhbGxfc3JjdSgpLCBzbyBsZWFrIHRoZSBjYWxsYmFjay4gKi9cXG5AQCAtMTQyMyw2ICsxNDczLDExMSBAQCBzdGF0aWMgdm9pZCBfX2NhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsXFxuIFxcdCh2b2lkKXNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKHNzcCwgcmhwLCBkb19ub3JtKTtcXG4gfVxcbiBcXG4rLypcXG4rICogVGhlIHNyY3VfY2JsaXN0IGFuZCBzcmN1X25vZGUgdHJlZSBhcmUgb25seSBhY2Nlc3NlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWRcXG4rICogKHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKCkgZW5xdWV1ZXMgdW5kZXIgcmF3X3NwaW5fbG9ja19pcnFzYXZlKCkgYW5kIG1heSB3YWxrXFxuKyAqIHRoZSB0cmVlKS4gIExpa2UgY2FsbF9yY3UoKSwgX19jYWxsX3NyY3UoKSBkZWZlcnMgd2hlbiBpbnRlcnJ1cHRzIGFyZSBhbHJlYWR5XFxuKyAqIGRpc2FibGVkLCBzbyBhIHJlLWVudHJhbnQgY2FsbF9zcmN1KCkgLS0gZS5nLiBjYWxsX3JjdV90YXNrc190cmFjZSgpIGZyb20gYVxcbisgKiBCUEYgcHJvZ3JhbSAtLSBjYW5ub3QgY29ycnVwdCB0aGUgbGlzdCBvciBkZWFkbG9jay5cXG4rICovXFxuK3N0YXRpYyB2b2lkIF9fY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcXG4rXFx0XFx0XFx0cmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBkb19ub3JtKVxcbit7XFxuK1xcdGlmIChzaG91bGRfcmN1X2RlZmVyKCkpIHtcXG4rXFx0XFx0c3RydWN0IHNyY3VfZGVmZXIgKnNuZHAgPSB0aGlzX2NwdV9wdHIoXFx1MDAyNnNyY3VfZGVmZXIpO1xcbitcXHRcXHRzdHJ1Y3Qgc3JjdV9kYXRhICpzZHA7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBJbnN0cnVtZW50YXRpb24gb24gdGhlIGVucXVldWUgcGF0aCBjYW4gcmUtZW50ZXIgaGVyZSBmcm9tXFxuK1xcdFxcdCAqIGluc2lkZSBzcmN1X2RlZmVyX2RyYWluKCkuICBSZS1xdWV1aW5nIHdvdWxkIGxpdmVsb2NrIHRoZVxcbitcXHRcXHQgKiBkcmFpbiwgc28gZHJvcCB0aGUgY2FsbGJhY2s7IGFuIE5NSSBjYW5ub3QgbG9vcCwgc28gbGV0IGl0IGluLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKFJFQURfT05DRShzbmRwLVxcdTAwM2VkcmFpbmluZykgXFx1MDAyNlxcdTAwMjYgIWluX25taSgpKSB7XFxuK1xcdFxcdFxcdFdBUk5fT05DRShJU19FTkFCTEVEKENPTkZJR19QUk9WRV9SQ1UpLFxcbitcXHRcXHRcXHRcXHQgIFxcXCJjYWxsX3NyY3UoKSByZS1lbnRlcmVkIGR1cmluZyBjYWxsYmFjayBkcmFpbjsgbGVha2luZyBjYWxsYmFja1xcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0fVxcbitcXHRcXHRzZHAgPSB0aGlzX2NwdV9wdHIoc3NwLVxcdTAwM2VzZGEpO1xcbitcXHRcXHRyaHAtXFx1MDAzZWZ1bmMgPSBmdW5jO1xcbitcXHRcXHRpZiAoIWRvX25vcm0pXFxuK1xcdFxcdFxcdFdSSVRFX09OQ0Uoc2RwLVxcdTAwM2VkZWZlcl9leHAsIHRydWUpO1xcbitcXHRcXHRpZiAobGxpc3RfYWRkKChzdHJ1Y3QgbGxpc3Rfbm9kZSAqKXJocCwgXFx1MDAyNnNkcC1cXHUwMDNlZGVmZXJfY2JzKSkge1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBDaGFpbiB0aGlzIHNyY3VfZGF0YSBmb3IgdGhlIGRyYWluLiAgLVxcdTAwM2Vzc3AgbXVzdCBiZVxcbitcXHRcXHRcXHQgKiBwdWJsaXNoZWQgaGVyZTogZGVmZXJyYWwgc2tpcHMgY2hlY2tfaW5pdF9zcmN1X3N0cnVjdCgpLFxcbitcXHRcXHRcXHQgKiBzbyBvbiBhIG5ldmVyLWluaXRpYWxpemVkIHN0YXRpYyBzcmN1X3N0cnVjdCB0aGVcXG4rXFx0XFx0XFx0ICogc3RhdGljYWxseSB6ZXJvZWQgLVxcdTAwM2VzZGEgc3RpbGwgaGFzIGEgTlVMTCAtXFx1MDAzZXNzcC5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdHNkcC1cXHUwMDNlc3NwID0gc3NwO1xcbitcXHRcXHRcXHRpZiAobGxpc3RfYWRkKFxcdTAwMjZzZHAtXFx1MDAzZWRlZmVyX2xpbmssIFxcdTAwMjZzbmRwLVxcdTAwM2VsaXN0KSlcXG4rXFx0XFx0XFx0XFx0aXJxX3dvcmtfcXVldWUoXFx1MDAyNnNuZHAtXFx1MDAzZWl3KTtcXG4rXFx0XFx0fVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdC8qIEFuIE5NSSByZWFjaGluZyBoZXJlIGVudGVyZWQgd2l0aCBpcnFzIGVuYWJsZWQsIHNvIHRoZSBlbnF1ZXVlIGNhbiByYWNlLiAqL1xcbitcXHRXQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSBcXHUwMDI2XFx1MDAyNiBpbl9ubWkoKSk7XFxuK1xcbitcXHRzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIGZ1bmMsIGRvX25vcm0pO1xcbit9XFxuK1xcbisvKlxcbisgKiBSZS1pc3N1ZSBkZWZlcnJlZCBjYWxsYmFja3Mgc3RyYWlnaHQgdG8gc3JjdV9kb19lbnF1ZXVlKCkgc28gdGhleSBjYW5ub3QgZGVmZXJcXG4rICogYWdhaW4uICAtXFx1MDAzZWxvY2sgc2VyaWFsaXplcyB0aGUgZHJhaW5lcnM6IHRoZSBpcnFfd29yaywgc3JjdV9kZWZlcl9mbHVzaCgpIGFuZFxcbisgKiBzcmN1X29mZmxpbmVfZHJhaW4oKS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIF9fc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3Qgc3JjdV9kZWZlciAqc25kcCwgYm9vbCBndWFyZClcXG4re1xcbitcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqc25vZGUsICpzbmV4dDtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFxuK1xcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2c25kcC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRpZiAoZ3VhcmQpXFxuK1xcdFxcdFdSSVRFX09OQ0Uoc25kcC1cXHUwMDNlZHJhaW5pbmcsIHRydWUpO1xcbitcXHRsbGlzdF9mb3JfZWFjaF9zYWZlKHNub2RlLCBzbmV4dCwgbGxpc3RfZGVsX2FsbChcXHUwMDI2c25kcC1cXHUwMDNlbGlzdCkpIHtcXG4rXFx0XFx0c3RydWN0IHNyY3VfZGF0YSAqc2RwID0gY29udGFpbmVyX29mKHNub2RlLCBzdHJ1Y3Qgc3JjdV9kYXRhLCBkZWZlcl9saW5rKTtcXG4rXFx0XFx0c3RydWN0IHNyY3Vfc3RydWN0ICpzc3AgPSBzZHAtXFx1MDAzZXNzcDtcXG4rXFx0XFx0c3RydWN0IGxsaXN0X25vZGUgKmNub2RlLCAqY25leHQ7XFxuK1xcdFxcdGJvb2wgZG9fbm9ybTtcXG4rXFxuK1xcdFxcdGNub2RlID0gbGxpc3RfZGVsX2FsbChcXHUwMDI2c2RwLVxcdTAwM2VkZWZlcl9jYnMpO1xcbitcXHRcXHRkb19ub3JtID0gIVJFQURfT05DRShzZHAtXFx1MDAzZWRlZmVyX2V4cCk7XFxuK1xcdFxcdGlmICghZG9fbm9ybSlcXG4rXFx0XFx0XFx0V1JJVEVfT05DRShzZHAtXFx1MDAzZWRlZmVyX2V4cCwgZmFsc2UpO1xcbitcXHRcXHRsbGlzdF9mb3JfZWFjaF9zYWZlKGNub2RlLCBjbmV4dCwgY25vZGUpIHtcXG4rXFx0XFx0XFx0c3RydWN0IHJjdV9oZWFkICpyaHAgPSAoc3RydWN0IHJjdV9oZWFkICopY25vZGU7XFxuK1xcbitcXHRcXHRcXHRyaHAtXFx1MDAzZW5leHQgPSBOVUxMO1xcbitcXHRcXHRcXHRzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIHJocC1cXHUwMDNlZnVuYywgZG9fbm9ybSk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRpZiAoZ3VhcmQpXFxuK1xcdFxcdFdSSVRFX09OQ0Uoc25kcC1cXHUwMDNlZHJhaW5pbmcsIGZhbHNlKTtcXG4rXFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnNuZHAtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rfVxcbitcXG4rLypcXG4rICogT25seSB0aGUgaXJxX3dvcmsgZHJhaW4gY2FuIGJlIHJlLWZlZCBieSBpdHMgb3duIHJlLWlzc3VlLCBzbyBvbmx5IGl0IHNldHNcXG4rICogLVxcdTAwM2VkcmFpbmluZy4gIEEgZGlyZWN0IGRyYWluIHJlLWlzc3VlcyBvbnRvIHRoaXMgQ1BVLCBhbmQgYW55dGhpbmcgc3RhZ2VkXFxuKyAqIGR1cmluZyBpdCBpcyBwaWNrZWQgdXAgYnkgdGhhdCBDUFUncyBvd24gaXJxX3dvcmsuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBzcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpXFxuK3tcXG4rXFx0X19zcmN1X2RlZmVyX2RyYWluKGNvbnRhaW5lcl9vZihpdywgc3RydWN0IHNyY3VfZGVmZXIsIGl3KSwgdHJ1ZSk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIERyYWluIEBjcHUncyBkZWZlcnJlZCBjYWxsX3NyY3UoKSBjYWxsYmFja3MgZnJvbSByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKClcXG4rICogb25jZSBAY3B1IGlzIGRlYWQuICBPbmUgcGFzcyBjb3ZlcnMgZXZlcnkgc3JjdV9zdHJ1Y3QsIGFuZCB0aGUgcmUtaXNzdWUgbGFuZHNcXG4rICogb24gdGhlIGN1cnJlbnQgQ1BVLlxcbisgKi9cXG4rdm9pZCBzcmN1X29mZmxpbmVfZHJhaW4oaW50IGNwdSlcXG4re1xcbitcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0X19zcmN1X2RlZmVyX2RyYWluKFxcdTAwMjZwZXJfY3B1KHNyY3VfZGVmZXIsIGNwdSksIGZhbHNlKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIGNhbGxfc3JjdSgpIC0gUXVldWUgYSBjYWxsYmFjayBmb3IgaW52b2NhdGlvbiBhZnRlciBhbiBTUkNVIGdyYWNlIHBlcmlvZFxcbiAgKiBAc3NwOiBzcmN1X3N0cnVjdCBpbiBxdWV1ZSB0aGUgY2FsbGJhY2tcXG5AQCAtMTY3Nyw5ICsxODMyLDE3IEBAIHZvaWQgc3JjdV9iYXJyaWVyKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxcbiB7XFxuIFxcdGludCBjcHU7XFxuIFxcdGludCBpZHg7XFxuLVxcdHVuc2lnbmVkIGxvbmcgcyA9IHJjdV9zZXFfc25hcChcXHUwMDI2c3NwLVxcdTAwM2VzcmN1X3N1cC1cXHUwMDNlc3JjdV9iYXJyaWVyX3NlcSk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgcztcXG4gXFxuIFxcdGNoZWNrX2luaXRfc3JjdV9zdHJ1Y3Qoc3NwKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFJlZ2lzdGVyIGFueSBkZWZlcnJlZCBjYWxsYmFja3MgYmVmb3JlIHNuYXBzaG90dGluZyB0aGUgc2VxdWVuY2UuICBUaGVcXG4rXFx0ICogc2hhcmVkIGlycV93b3JrIG1heSBhbHNvIGRyYWluIG90aGVyIHNyY3Vfc3RydWN0cycsIHdoaWNoIGlzIGhhcm1sZXNzLlxcbitcXHQgKi9cXG4rXFx0c3JjdV9kZWZlcl9mbHVzaCgpO1xcbitcXG4rXFx0cyA9IHJjdV9zZXFfc25hcChcXHUwMDI2c3NwLVxcdTAwM2VzcmN1X3N1cC1cXHUwMDNlc3JjdV9iYXJyaWVyX3NlcSk7XFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNnNzcC1cXHUwMDNlc3JjdV9zdXAtXFx1MDAzZXNyY3VfYmFycmllcl9tdXRleCk7XFxuIFxcdGlmIChyY3Vfc2VxX2RvbmUoXFx1MDAyNnNzcC1cXHUwMDNlc3JjdV9zdXAtXFx1MDAzZXNyY3VfYmFycmllcl9zZXEsIHMpKSB7XFxuIFxcdFxcdHNtcF9tYigpOyAvKiBGb3JjZSBvcmRlcmluZyBmb2xsb3dpbmcgcmV0dXJuLiAqL1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3RpbnkuYyBiL2tlcm5lbC9yY3UvdGlueS5jXFxuaW5kZXggZGNjY2NkNmJlOTQxMS4uYmFmZmU2NjAwNDNmNSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvcmN1L3RpbnkuY1xcbisrKyBiL2tlcm5lbC9yY3UvdGlueS5jXFxuQEAgLTExLDYgKzExLDggQEBcXG4gICovXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21wbGV0aW9uLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbnRlcnJ1cHQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lycV93b3JrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9sbGlzdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbm90aWZpZXIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JjdXBkYXRlX3dhaXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbkBAIC00Miw4ICs0NCw5OSBAQCBzdGF0aWMgc3RydWN0IHJjdV9jdHJsYmxrIHJjdV9jdHJsYmxrID0ge1xcbiBcXHQuZ3Bfc2VxXFx0XFx0PSAwIC0gMzAwVUwsXFxuIH07XFxuIFxcbisvKlxcbisgKiBUaGUgY2FsbGJhY2sgbGlzdCBpcyBvbmx5IGFjY2Vzc2VkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCwgc28gYSBjYWxsX3JjdSgpXFxuKyAqIHRoYXQgYXJyaXZlcyB3aXRoIGludGVycnVwdHMgb2ZmIHN0YWdlcyB0aGUgY2FsbGJhY2sgb24gYSBsb2NrbGVzcyBsaXN0IHRoYXRcXG4rICogYW4gaXJxX3dvcmsgcmUtaXNzdWVzIGxhdGVyLiAgT25lIGdsb2JhbCBsaXN0IGFuZCBpcnFfd29yayBzdWZmaWNlLCBhcyBUaW55XFxuKyAqIFJDVSBpcyB1bmlwcm9jZXNzb3IuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCByY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdyk7XFxuK3N0YXRpYyBMTElTVF9IRUFEKHJjdV9kZWZlcl9saXN0KTtcXG4rc3RhdGljIHN0cnVjdCBpcnFfd29yayByY3VfZGVmZXJfaXcgPSBJUlFfV09SS19JTklUX0hBUkQocmN1X2RlZmVyX2RyYWluKTtcXG4rc3RhdGljIGJvb2wgcmN1X2RlZmVyX2RyYWluaW5nO1xcbitcXG4rLypcXG4rICogRW5xdWV1ZSBAaGVhZCBvbiB0aGUgY2FsbGJhY2sgbGlzdC4gIEFsc28gY2FsbGVkIGJ5IHJjdV9kZWZlcl9kcmFpbigpIHRvXFxuKyAqIHJlLWlzc3VlIGEgZGVmZXJyZWQgY2FsbGJhY2ssIHNvIGl0IG11c3Qgbm90IHJlLWNoZWNrIHRoZSBkZWZlcnJhbCBjb25kaXRpb24uXFxuKyAqL1xcbitzdGF0aWMgdm9pZCByY3VfZG9fZW5xdWV1ZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMpXFxuK3tcXG4rXFx0c3RhdGljIGF0b21pY190IGRvdWJsZWZyZWVzO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXG4rXFx0aWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKGhlYWQpKSB7XFxuK1xcdFxcdGlmIChhdG9taWNfaW5jX3JldHVybihcXHUwMDI2ZG91YmxlZnJlZXMpIFxcdTAwM2MgNCkge1xcbitcXHRcXHRcXHRwcl9lcnIoXFxcIiVzKCk6IERvdWJsZS1mcmVlZCBDQiAlcC1cXHUwMDNlJXBTKCkhISEgIFxcXCIsIF9fZnVuY19fLCBoZWFkLCBoZWFkLVxcdTAwM2VmdW5jKTtcXG4rXFx0XFx0XFx0bWVtX2R1bXBfb2JqKGhlYWQpO1xcbitcXHRcXHR9XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0aGVhZC1cXHUwMDNlZnVuYyA9IGZ1bmM7XFxuK1xcdGhlYWQtXFx1MDAzZW5leHQgPSBOVUxMO1xcbitcXG4rXFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xcbitcXHQqcmN1X2N0cmxibGsuY3VydGFpbCA9IGhlYWQ7XFxuK1xcdHJjdV9jdHJsYmxrLmN1cnRhaWwgPSBcXHUwMDI2aGVhZC1cXHUwMDNlbmV4dDtcXG4rXFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xcbitcXG4rXFx0aWYgKHVubGlrZWx5KGlzX2lkbGVfdGFzayhjdXJyZW50KSkpIHtcXG4rXFx0XFx0LyogZm9yY2Ugc2NoZWR1bGluZyBmb3IgcmN1X3FzKCkgKi9cXG4rXFx0XFx0cmVzY2hlZF9jcHUoMCk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgX19yY3VfZGVmZXJfZHJhaW4oYm9vbCBndWFyZClcXG4re1xcbitcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSwgKm5leHQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcbitcXHQvKiBDYWxsYmFja3MgYXJlIHVub3JkZXJlZCwgc28gZHJhaW4gaW4gbGxpc3Qgb3JkZXIgd2l0aG91dCByZXZlcnNpbmcuICovXFxuK1xcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcXG4rXFx0aWYgKGd1YXJkKVxcbitcXHRcXHRXUklURV9PTkNFKHJjdV9kZWZlcl9kcmFpbmluZywgdHJ1ZSk7XFxuK1xcdGxsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgbmV4dCwgbGxpc3RfZGVsX2FsbChcXHUwMDI2cmN1X2RlZmVyX2xpc3QpKSB7XFxuK1xcdFxcdHN0cnVjdCByY3VfaGVhZCAqaGVhZCA9IChzdHJ1Y3QgcmN1X2hlYWQgKilub2RlO1xcbitcXG4rXFx0XFx0aGVhZC1cXHUwMDNlbmV4dCA9IE5VTEw7XFxuK1xcdFxcdHJjdV9kb19lbnF1ZXVlKGhlYWQsIGhlYWQtXFx1MDAzZWZ1bmMpO1xcbitcXHR9XFxuK1xcdGlmIChndWFyZClcXG4rXFx0XFx0V1JJVEVfT05DRShyY3VfZGVmZXJfZHJhaW5pbmcsIGZhbHNlKTtcXG4rXFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xcbit9XFxuK1xcbisvKiBPbmx5IHRoZSBpcnFfd29yayBkcmFpbiBjYW4gYmUgcmUtZmVkIGJ5IGl0cyBvd24gcmUtaXNzdWU7IHNlZSBUcmVlIFJDVS4gKi9cXG4rc3RhdGljIHZvaWQgcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpXFxuK3tcXG4rXFx0X19yY3VfZGVmZXJfZHJhaW4odHJ1ZSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGNhbGxfcmN1X2RlZmVyKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYylcXG4re1xcbitcXHQvKiBBIHJlLWVudHJhbnQgY2FsbF9yY3UoKSBkdXJpbmcgdGhlIGRyYWluIHdvdWxkIGxpdmVsb2NrIGl0OyBkcm9wIGl0LiAqL1xcbitcXHRpZiAoUkVBRF9PTkNFKHJjdV9kZWZlcl9kcmFpbmluZykgXFx1MDAyNlxcdTAwMjYgIWluX25taSgpKSB7XFxuK1xcdFxcdFdBUk5fT05DRShJU19FTkFCTEVEKENPTkZJR19QUk9WRV9SQ1UpLFxcbitcXHRcXHRcXHQgIFxcXCJjYWxsX3JjdSgpIHJlLWVudGVyZWQgZHVyaW5nIGNhbGxiYWNrIGRyYWluOyBsZWFraW5nIGNhbGxiYWNrXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcdGhlYWQtXFx1MDAzZWZ1bmMgPSBmdW5jO1xcbitcXHRpZiAobGxpc3RfYWRkKChzdHJ1Y3QgbGxpc3Rfbm9kZSAqKWhlYWQsIFxcdTAwMjZyY3VfZGVmZXJfbGlzdCkpXFxuK1xcdFxcdGlycV93b3JrX3F1ZXVlKFxcdTAwMjZyY3VfZGVmZXJfaXcpO1xcbit9XFxuK1xcbisvKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIHNvIGEgZm9sbG93aW5nIHJjdV9iYXJyaWVyKCkgd2FpdHMgZm9yIHRoZW0uICovXFxuK3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9mbHVzaCh2b2lkKVxcbit7XFxuK1xcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRfX3JjdV9kZWZlcl9kcmFpbihmYWxzZSk7XFxuK31cXG4rXFxuIHZvaWQgcmN1X2JhcnJpZXIodm9pZClcXG4ge1xcbitcXHQvKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIGZpcnN0LiAqL1xcbitcXHRyY3VfZGVmZXJfZmx1c2goKTtcXG4gXFx0d2FpdF9yY3VfZ3AoY2FsbF9yY3VfaHVycnkpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0wocmN1X2JhcnJpZXIpO1xcbkBAIC0xNTcsMjkgKzI1MCwxNSBAQCBFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9yY3UpO1xcbiAgKi9cXG4gdm9pZCBjYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMpXFxuIHtcXG4tXFx0c3RhdGljIGF0b21pY190IGRvdWJsZWZyZWVzO1xcbi1cXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbi1cXG4tXFx0aWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKGhlYWQpKSB7XFxuLVxcdFxcdGlmIChhdG9taWNfaW5jX3JldHVybihcXHUwMDI2ZG91YmxlZnJlZXMpIFxcdTAwM2MgNCkge1xcbi1cXHRcXHRcXHRwcl9lcnIoXFxcIiVzKCk6IERvdWJsZS1mcmVlZCBDQiAlcC1cXHUwMDNlJXBTKCkhISEgIFxcXCIsIF9fZnVuY19fLCBoZWFkLCBoZWFkLVxcdTAwM2VmdW5jKTtcXG4tXFx0XFx0XFx0bWVtX2R1bXBfb2JqKGhlYWQpO1xcbi1cXHRcXHR9XFxuK1xcdGlmIChzaG91bGRfcmN1X2RlZmVyKCkpIHtcXG4rXFx0XFx0Y2FsbF9yY3VfZGVmZXIoaGVhZCwgZnVuYyk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4tXFx0aGVhZC1cXHUwMDNlZnVuYyA9IGZ1bmM7XFxuLVxcdGhlYWQtXFx1MDAzZW5leHQgPSBOVUxMO1xcbi1cXG4tXFx0bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xcbi1cXHQqcmN1X2N0cmxibGsuY3VydGFpbCA9IGhlYWQ7XFxuLVxcdHJjdV9jdHJsYmxrLmN1cnRhaWwgPSBcXHUwMDI2aGVhZC1cXHUwMDNlbmV4dDtcXG4tXFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xcbitcXHQvKiBBbiBOTUkgcmVhY2hpbmcgaGVyZSBlbnRlcmVkIHdpdGggaXJxcyBlbmFibGVkLCBzbyB0aGUgZW5xdWV1ZSBjYW4gcmFjZS4gKi9cXG4rXFx0V0FSTl9PTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSkgXFx1MDAyNlxcdTAwMjYgaW5fbm1pKCkpO1xcbiBcXG4tXFx0aWYgKHVubGlrZWx5KGlzX2lkbGVfdGFzayhjdXJyZW50KSkpIHtcXG4tXFx0XFx0LyogZm9yY2Ugc2NoZWR1bGluZyBmb3IgcmN1X3FzKCkgKi9cXG4tXFx0XFx0cmVzY2hlZF9jcHUoMCk7XFxuLVxcdH1cXG4rXFx0cmN1X2RvX2VucXVldWUoaGVhZCwgZnVuYyk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoY2FsbF9yY3UpO1xcbiBcXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS90cmVlLmMgYi9rZXJuZWwvcmN1L3RyZWUuY1xcbmluZGV4IDk2ODQ4ZmMxZjAyYjguLmViNmIxMWNmYWQ0NmYgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3JjdS90cmVlLmNcXG4rKysgYi9rZXJuZWwvcmN1L3RyZWUuY1xcbkBAIC0yNCw2ICsyNCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JjdXBkYXRlX3dhaXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGxpc3QuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9kZWJ1Zy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbm1pLmhcXHUwMDNlXFxuQEAgLTMxNDgsMjEgKzMxNDksMjUgQEAgc3RhdGljIHZvaWQgY2hlY2tfY2Jfb3ZsZChzdHJ1Y3QgcmN1X2RhdGEgKnJkcClcXG4gXFx0cmF3X3NwaW5fdW5sb2NrX3JjdV9ub2RlKHJucCk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkXFxuLV9fY2FsbF9yY3VfY29tbW9uKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBsYXp5X2luKVxcbisvKlxcbisgKiBUaGUgY2FsbGJhY2sgbGlzdCBpcyBvbmx5IGFjY2Vzc2VkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCwgc28gYSBjYWxsX3JjdSgpXFxuKyAqIHRoYXQgYXJyaXZlcyB3aXRoIGludGVycnVwdHMgb2ZmIChzZWUgc2hvdWxkX3JjdV9kZWZlcigpKSBzdGFnZXMgdGhlIGNhbGxiYWNrXFxuKyAqIG9uIGEgcGVyLUNQVSBsbGlzdCB0aGF0IGFuIGlycV93b3JrIHJlLWlzc3VlcyBvbmNlIGludGVycnVwdHMgYXJlIG9uLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpO1xcbitcXG4rLypcXG4rICogRW5xdWV1ZSBAaGVhZCBvbiB0aGlzIENQVSdzIHJjdV9zZWdjYmxpc3QuICBBbHNvIGNhbGxlZCBieSByY3VfZGVmZXJfZHJhaW4oKVxcbisgKiB0byByZS1pc3N1ZSBhIGRlZmVycmVkIGNhbGxiYWNrLCBzbyBpdCBtdXN0IG5vdCByZS1jaGVjayB0aGUgZGVmZXJyYWxcXG4rICogY29uZGl0aW9uLiAgRWl0aGVyIGNhbGxlciBtYXkgaGF2ZSBpbnRlcnJ1cHRzIGFscmVhZHkgZGlzYWJsZWQuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCByY3VfZG9fZW5xdWV1ZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgbGF6eV9pbilcXG4ge1xcbiBcXHRzdGF0aWMgYXRvbWljX3QgZG91YmxlZnJlZXM7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcdGJvb2wgbGF6eTtcXG4gXFx0c3RydWN0IHJjdV9kYXRhICpyZHA7XFxuIFxcbi1cXHQvKiBNaXNhbGlnbmVkIHJjdV9oZWFkISAqL1xcbi1cXHRXQVJOX09OX09OQ0UoKHVuc2lnbmVkIGxvbmcpaGVhZCBcXHUwMDI2IChzaXplb2Yodm9pZCAqKSAtIDEpKTtcXG4tXFxuLVxcdC8qIEF2b2lkIE5VTEwgZGVyZWZlcmVuY2UgaWYgY2FsbGJhY2sgaXMgTlVMTC4gKi9cXG4tXFx0aWYgKFdBUk5fT05fT05DRSghZnVuYykpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuIFxcdGlmIChkZWJ1Z19yY3VfaGVhZF9xdWV1ZShoZWFkKSkge1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBQcm9iYWJsZSBkb3VibGUgY2FsbF9yY3UoKSwgc28gbGVhayB0aGUgY2FsbGJhY2suXFxuQEAgLTMyMDYsNiArMzIxMSwxMDQgQEAgX19jYWxsX3JjdV9jb21tb24oc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGxhenlfaW4pXFxuIFxcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcXG4gfVxcbiBcXG4rLypcXG4rICogUmUtaXNzdWUgZGVmZXJyZWQgY2FsbGJhY2tzIHN0cmFpZ2h0IHRvIHRoZSBlbnF1ZXVlIHNvIHRoZXkgY2Fubm90IGRlZmVyXFxuKyAqIGFnYWluLiAgLVxcdTAwM2VkZWZlcl9sb2NrIHNlcmlhbGl6ZXMgdGhlIGRyYWluZXJzOiB0aGlzIENQVSdzIGlycV93b3JrLFxcbisgKiByY3VfZGVmZXJfZmx1c2goKSBhbmQgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcygpLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgX19yY3VfZGVmZXJfZHJhaW4oc3RydWN0IHJjdV9kYXRhICpyZHAsIGJvb2wgZ3VhcmQpXFxuK3tcXG4rXFx0c3RydWN0IGxsaXN0X25vZGUgKm5vZGUsICpuZXh0O1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXG4rXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnJkcC1cXHUwMDNlZGVmZXJfbG9jaywgZmxhZ3MpO1xcbitcXHRpZiAoZ3VhcmQpXFxuK1xcdFxcdFdSSVRFX09OQ0UocmRwLVxcdTAwM2VkZWZlcl9kcmFpbmluZywgdHJ1ZSk7XFxuK1xcdGxsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgbmV4dCwgbGxpc3RfZGVsX2FsbChcXHUwMDI2cmRwLVxcdTAwM2VkZWZlcl9oZWFkKSkge1xcbitcXHRcXHRzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQgPSAoc3RydWN0IHJjdV9oZWFkICopbm9kZTtcXG4rXFxuK1xcdFxcdGhlYWQtXFx1MDAzZW5leHQgPSBOVUxMO1xcbitcXHRcXHRyY3VfZG9fZW5xdWV1ZShoZWFkLCBoZWFkLVxcdTAwM2VmdW5jLCBmYWxzZSk7XFxuK1xcdH1cXG4rXFx0aWYgKGd1YXJkKVxcbitcXHRcXHRXUklURV9PTkNFKHJkcC1cXHUwMDNlZGVmZXJfZHJhaW5pbmcsIGZhbHNlKTtcXG4rXFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnJkcC1cXHUwMDNlZGVmZXJfbG9jaywgZmxhZ3MpO1xcbit9XFxuK1xcbisvKlxcbisgKiBPbmx5IHRoZSBpcnFfd29yayBkcmFpbiBjYW4gYmUgcmUtZmVkIGJ5IGl0cyBvd24gcmUtaXNzdWUsIHNvIG9ubHkgaXQgc2V0c1xcbisgKiAtXFx1MDAzZWRlZmVyX2RyYWluaW5nLiAgQSBkaXJlY3QgZHJhaW4gcmUtaXNzdWVzIG9udG8gdGhpcyBDUFUsIGFuZCBhbnl0aGluZ1xcbisgKiBzdGFnZWQgZHVyaW5nIGl0IGlzIHBpY2tlZCB1cCBieSB0aGF0IENQVSdzIG93biBpcnFfd29yay5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KVxcbit7XFxuK1xcdF9fcmN1X2RlZmVyX2RyYWluKGNvbnRhaW5lcl9vZihpdywgc3RydWN0IHJjdV9kYXRhLCBkZWZlcl93b3JrKSwgdHJ1ZSk7XFxuK31cXG4rXFxuKy8qIFN0YWdlIEBoZWFkIGZvciB0aGlzIENQVSdzIGlycV93b3JrIHdoZW4gY2FsbF9yY3UoKSBjYW5ub3QgZW5xdWV1ZSBub3cuICovXFxuK3N0YXRpYyB2b2lkIGNhbGxfcmN1X2RlZmVyKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYylcXG4re1xcbitcXHRzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHRoaXNfY3B1X3B0cihcXHUwMDI2cmN1X2RhdGEpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogSW5zdHJ1bWVudGF0aW9uIG9uIHRoZSBlbnF1ZXVlIHBhdGggY2FuIHJlLWVudGVyIGhlcmUgZnJvbSBpbnNpZGVcXG4rXFx0ICogcmN1X2RlZmVyX2RyYWluKCkuICBSZS1xdWV1aW5nIHdvdWxkIGxpdmVsb2NrIHRoZSBkcmFpbiwgc28gZHJvcCB0aGVcXG4rXFx0ICogY2FsbGJhY2s7IGFuIE5NSSBpcyBvbmUtc2hvdCBhbmQgY2Fubm90IGxvb3AsIHNvIGxldCBpdCB0aHJvdWdoLlxcbitcXHQgKi9cXG4rXFx0aWYgKFJFQURfT05DRShyZHAtXFx1MDAzZWRlZmVyX2RyYWluaW5nKSBcXHUwMDI2XFx1MDAyNiAhaW5fbm1pKCkpIHtcXG4rXFx0XFx0V0FSTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSksXFxuK1xcdFxcdFxcdCAgXFxcImNhbGxfcmN1KCkgcmUtZW50ZXJlZCBkdXJpbmcgY2FsbGJhY2sgZHJhaW47IGxlYWtpbmcgY2FsbGJhY2tcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFx0aGVhZC1cXHUwMDNlZnVuYyA9IGZ1bmM7XFxuK1xcdGlmIChsbGlzdF9hZGQoKHN0cnVjdCBsbGlzdF9ub2RlICopaGVhZCwgXFx1MDAyNnJkcC1cXHUwMDNlZGVmZXJfaGVhZCkpXFxuK1xcdFxcdGlycV93b3JrX3F1ZXVlKFxcdTAwMjZyZHAtXFx1MDAzZWRlZmVyX3dvcmspO1xcbit9XFxuK1xcbisvKlxcbisgKiBSZWdpc3RlciBwZW5kaW5nIGRlZmVycmVkIGNhbGxiYWNrcyBpbnRvIHRoZSBjYWxsYmFjayBsaXN0cyBzbyBhIGZvbGxvd2luZ1xcbisgKiByY3VfYmFycmllcigpIHdhaXRzIGZvciB0aGVtLiAgVGhpcyBydW5zIGJlZm9yZSByY3VfYmFycmllcigpIHNjYW5zIHRoZVxcbisgKiBsaXN0cy5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9mbHVzaCh2b2lkKVxcbit7XFxuK1xcdGludCBjcHU7XFxuK1xcbitcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcXG4rXFx0XFx0c3RydWN0IHJjdV9kYXRhICpyZHAgPSBwZXJfY3B1X3B0cihcXHUwMDI2cmN1X2RhdGEsIGNwdSk7XFxuK1xcbitcXHRcXHRpZiAoIWxsaXN0X2VtcHR5KFxcdTAwMjZyZHAtXFx1MDAzZWRlZmVyX2hlYWQpKVxcbitcXHRcXHRcXHRfX3JjdV9kZWZlcl9kcmFpbihyZHAsIGZhbHNlKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZFxcbitfX2NhbGxfcmN1X2NvbW1vbihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMsIGJvb2wgbGF6eV9pbilcXG4re1xcbitcXHQvKiBNaXNhbGlnbmVkIHJjdV9oZWFkISAqL1xcbitcXHRXQVJOX09OX09OQ0UoKHVuc2lnbmVkIGxvbmcpaGVhZCBcXHUwMDI2IChzaXplb2Yodm9pZCAqKSAtIDEpKTtcXG4rXFxuK1xcdC8qIEF2b2lkIE5VTEwgZGVyZWZlcmVuY2UgaWYgY2FsbGJhY2sgaXMgTlVMTC4gKi9cXG4rXFx0aWYgKFdBUk5fT05fT05DRSghZnVuYykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmIChzaG91bGRfcmN1X2RlZmVyKCkpIHtcXG4rXFx0XFx0Y2FsbF9yY3VfZGVmZXIoaGVhZCwgZnVuYyk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0LyogQW4gTk1JIHJlYWNoaW5nIGhlcmUgZW50ZXJlZCB3aXRoIGlycXMgZW5hYmxlZCwgc28gdGhlIGVucXVldWUgY2FuIHJhY2UuICovXFxuK1xcdFdBUk5fT05fT05DRShJU19FTkFCTEVEKENPTkZJR19QUk9WRV9SQ1UpIFxcdTAwMjZcXHUwMDI2IGluX25taSgpKTtcXG4rXFxuK1xcdHJjdV9kb19lbnF1ZXVlKGhlYWQsIGZ1bmMsIGxhenlfaW4pO1xcbit9XFxuK1xcbiAjaWZkZWYgQ09ORklHX1JDVV9MQVpZXFxuIHN0YXRpYyBib29sIGVuYWJsZV9yY3VfbGF6eSBfX3JlYWRfbW9zdGx5ID0gIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9MQVpZX0RFRkFVTFRfT0ZGKTtcXG4gbW9kdWxlX3BhcmFtKGVuYWJsZV9yY3VfbGF6eSwgYm9vbCwgMDQ0NCk7XFxuQEAgLTM4OTYsOCArMzk5OSwxMiBAQCB2b2lkIHJjdV9iYXJyaWVyKHZvaWQpXFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZ3NlcTtcXG4gXFx0c3RydWN0IHJjdV9kYXRhICpyZHA7XFxuLVxcdHVuc2lnbmVkIGxvbmcgcyA9IHJjdV9zZXFfc25hcChcXHUwMDI2cmN1X3N0YXRlLmJhcnJpZXJfc2VxdWVuY2UpO1xcbitcXHR1bnNpZ25lZCBsb25nIHM7XFxuIFxcbitcXHQvKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzIGJlZm9yZSBzbmFwc2hvdHRpbmcgdGhlIHNlcXVlbmNlLiAqL1xcbitcXHRyY3VfZGVmZXJfZmx1c2goKTtcXG4rXFxuK1xcdHMgPSByY3Vfc2VxX3NuYXAoXFx1MDAyNnJjdV9zdGF0ZS5iYXJyaWVyX3NlcXVlbmNlKTtcXG4gXFx0cmN1X2JhcnJpZXJfdHJhY2UoVFBTKFxcXCJCZWdpblxcXCIpLCAtMSwgcyk7XFxuIFxcbiBcXHQvKiBUYWtlIG11dGV4IHRvIHNlcmlhbGl6ZSBjb25jdXJyZW50IHJjdV9iYXJyaWVyKCkgcmVxdWVzdHMuICovXFxuQEAgLTQyMzEsNiArNDMzOCwxMCBAQCByY3VfYm9vdF9pbml0X3BlcmNwdV9kYXRhKGludCBjcHUpXFxuIFxcdHJkcC1cXHUwMDNlcmN1X29ubF9ncF9zdGF0ZSA9IFJDVV9HUF9DTEVBTkVEO1xcbiBcXHRyZHAtXFx1MDAzZWxhc3Rfc2NoZWRfY2xvY2sgPSBqaWZmaWVzO1xcbiBcXHRyZHAtXFx1MDAzZWNwdSA9IGNwdTtcXG4rXFx0aW5pdF9sbGlzdF9oZWFkKFxcdTAwMjZyZHAtXFx1MDAzZWRlZmVyX2hlYWQpO1xcbitcXHRyYXdfc3Bpbl9sb2NrX2luaXQoXFx1MDAyNnJkcC1cXHUwMDNlZGVmZXJfbG9jayk7XFxuK1xcdC8qIEhhcmQgaXJxX3dvcmsgc28gdGhlIHJlLWlzc3VlIHJ1bnMgcHJvbXB0bHkuICovXFxuK1xcdHJkcC1cXHUwMDNlZGVmZXJfd29yayA9IElSUV9XT1JLX0lOSVRfSEFSRChyY3VfZGVmZXJfZHJhaW4pO1xcbiBcXHRyY3VfYm9vdF9pbml0X25vY2JfcGVyY3B1X2RhdGEocmRwKTtcXG4gfVxcbiBcXG5AQCAtNDUyOCw2ICs0NjM5LDE2IEBAIHZvaWQgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcyhpbnQgY3B1KVxcbiBcXHRzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHBlcl9jcHVfcHRyKFxcdTAwMjZyY3VfZGF0YSwgY3B1KTtcXG4gXFx0Ym9vbCBuZWVkd2FrZTtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIENhbGxiYWNrcyB0aGUgb3V0Z29pbmcgQ1BVIGRlZmVycmVkIGxhdGUgaW4gdGhlIG9mZmxpbmUgcGF0aCAocGFzdCB0aGVcXG4rXFx0ICogcG9pbnQgaXRzIGlycV93b3JrIGNhbiBydW4pIHNpdCBvbiAtXFx1MDAzZWRlZmVyX2hlYWQsIHdoaWNoIHRoZSAtXFx1MDAzZWNibGlzdFxcbitcXHQgKiBtaWdyYXRpb24gYmVsb3cgZG9lcyBub3QgY292ZXIuICBEcmFpbiB0aGVtIGhlcmUsIGJlZm9yZSB0aGUgZWFybHlcXG4rXFx0ICogcmV0dXJuczsgdGhlIHJlLWlzc3VlIGxhbmRzIG9uIHRoaXMgQ1BVLlxcbitcXHQgKi9cXG4rXFx0X19yY3VfZGVmZXJfZHJhaW4ocmRwLCBmYWxzZSk7XFxuK1xcdC8qIExpa2V3aXNlIGZvciB0aGUgb3V0Z29pbmcgQ1BVJ3MgZGVmZXJyZWQgY2FsbF9zcmN1KCkgY2FsbGJhY2tzLiAqL1xcbitcXHRzcmN1X29mZmxpbmVfZHJhaW4oY3B1KTtcXG4rXFxuIFxcdGlmIChyY3VfcmRwX2lzX29mZmxvYWRlZChyZHApKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3RyZWUuaCBiL2tlcm5lbC9yY3UvdHJlZS5oXFxuaW5kZXggZWVkZmE0MzA1OWU4MC4uYjdjYWM3YTEzYjRmMiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvcmN1L3RyZWUuaFxcbisrKyBiL2tlcm5lbC9yY3UvdHJlZS5oXFxuQEAgLTIyOSw2ICsyMjksMTIgQEAgc3RydWN0IHJjdV9kYXRhIHtcXG4gXFx0c3RydWN0IHJjdV9oZWFkIGJhcnJpZXJfaGVhZDtcXG4gXFx0aW50IGV4cF93YXRjaGluZ19zbmFwO1xcdFxcdC8qIERvdWJsZS1jaGVjayBuZWVkIGZvciBJUEkuICovXFxuIFxcbitcXHQvKiBEZWZlcnJhbCBvZiBhbiBOTUkvcmVlbnRyYW50IGNhbGxfcmN1KCk7IHNlZSBfX2NhbGxfcmN1X2NvbW1vbigpLiAqL1xcbitcXHRzdHJ1Y3QgbGxpc3RfaGVhZCBkZWZlcl9oZWFkO1xcbitcXHRzdHJ1Y3QgaXJxX3dvcmsgZGVmZXJfd29yaztcXG4rXFx0cmF3X3NwaW5sb2NrX3QgZGVmZXJfbG9jaztcXG4rXFx0Ym9vbCBkZWZlcl9kcmFpbmluZztcXG4rXFxuIFxcdC8qIDUpIENhbGxiYWNrIG9mZmxvYWRpbmcuICovXFxuICNpZmRlZiBDT05GSUdfUkNVX05PQ0JfQ1BVXFxuIFxcdHN0cnVjdCBzd2FpdF9xdWV1ZV9oZWFkIG5vY2JfY2Jfd3E7IC8qIEZvciBub2NiIGt0aHJlYWRzIHRvIHNsZWVwIG9uLiAqL1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yY3VfcmVlbnRyeS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmN1X3JlZW50cnkuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZmE4MTNkMWQ0OTJiNlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yY3VfcmVlbnRyeS5jXFxuQEAgLTAsMCArMSw5NSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKlxcbisgKiBFeGVyY2lzZSByZS1lbnRyeSBpbnRvIGNhbGxfc3JjdSgpIGZyb20gQlBGOyBzZWUgcHJvZ3MvcmN1X3JlZW50cnkuYy5cXG4rICpcXG4rICogT24gYSBrZXJuZWwgd2l0aG91dCB0aGUgY2FsbF9zcmN1KCkgYW55LWNvbnRleHQgZml4IHRoZSBuZXN0ZWQgY2FsbFxcbisgKiBzZWxmLWRlYWRsb2NrcyBvbiB0aGUgc3JjdV9kYXRhIGxvY2ssIHNvIHRoaXMgaGFuZ3MgcmF0aGVyIHRoYW4gZmFpbHMuXFxuKyAqL1xcbisjZGVmaW5lIF9HTlVfU09VUkNFXFxuKyNpbmNsdWRlIFxcdTAwM2NzY2hlZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3N5c2NhbGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3Rlc3RfcHJvZ3MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcInJjdV9yZWVudHJ5LnNrZWwuaFxcXCJcXG4rXFxuK3N0YXRpYyBpbnQgc3lzX3BpZGZkX29wZW4ocGlkX3QgcGlkLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuK3tcXG4rXFx0cmV0dXJuIHN5c2NhbGwoX19OUl9waWRmZF9vcGVuLCBwaWQsIGZsYWdzKTtcXG4rfVxcbitcXG4rLyogVGlueSBSQ1UgYnVpbGRzIGhhdmUgbm8gcmN1X3NlZ2NibGlzdF9lbnF1ZXVlKCkgdG8gYXR0YWNoIHRvLiAqL1xcbitzdGF0aWMgYm9vbCBoYXZlX2F0dGFjaF90YXJnZXQodm9pZClcXG4re1xcbitcXHRjaGFyIGJ1ZlsyNTZdO1xcbitcXHRib29sIGZvdW5kID0gZmFsc2U7XFxuK1xcdEZJTEUgKmY7XFxuK1xcbitcXHRmID0gZm9wZW4oXFxcIi9wcm9jL2thbGxzeW1zXFxcIiwgXFxcInJcXFwiKTtcXG4rXFx0aWYgKCFmKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXHQvKiBjYW5ub3QgdGVsbDsgbGV0IHRoZSBhdHRhY2ggZGVjaWRlICovXFxuK1xcdHdoaWxlIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmKSkge1xcbitcXHRcXHRpZiAoc3Ryc3RyKGJ1ZiwgXFxcIiByY3Vfc2VnY2JsaXN0X2VucXVldWVcXFxcblxcXCIpKSB7XFxuK1xcdFxcdFxcdGZvdW5kID0gdHJ1ZTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRmY2xvc2UoZik7XFxuK1xcdHJldHVybiBmb3VuZDtcXG4rfVxcbitcXG4rdm9pZCB0ZXN0X3JjdV9yZWVudHJ5KHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IHJjdV9yZWVudHJ5ICpza2VsO1xcbitcXHRpbnQgZXJyLCBwaWRmZCA9IC0xLCBtYXBfZmQ7XFxuK1xcdGNwdV9zZXRfdCBzZXQsIG9sZF9zZXQ7XFxuK1xcdGJvb2wgYWZmaW5pdHlfc2F2ZWQ7XFxuK1xcdF9fdTY0IHZhbCA9IDE7XFxuK1xcbitcXHRpZiAoIWhhdmVfYXR0YWNoX3RhcmdldCgpKSB7XFxuK1xcdFxcdHRlc3RfX3NraXAoKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRza2VsID0gcmN1X3JlZW50cnlfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJza2VsX29wZW5fYW5kX2xvYWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZXJyID0gcmN1X3JlZW50cnlfX2F0dGFjaChza2VsKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwic2tlbF9hdHRhY2hcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHQvKiBLZWVwIHRoZSByZS1lbnRyeSBvbiBhIHNpbmdsZSBDUFUuICovXFxuK1xcdGFmZmluaXR5X3NhdmVkID0gIXNjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihvbGRfc2V0KSwgXFx1MDAyNm9sZF9zZXQpO1xcbitcXHRDUFVfWkVSTyhcXHUwMDI2c2V0KTtcXG4rXFx0Q1BVX1NFVCgwLCBcXHUwMDI2c2V0KTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soc2NoZWRfc2V0YWZmaW5pdHkoMCwgc2l6ZW9mKHNldCksIFxcdTAwMjZzZXQpLCBcXFwic2V0YWZmaW5pdHlcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRwaWRmZCA9IHN5c19waWRmZF9vcGVuKGdldHBpZCgpLCAwKTtcXG4rXFx0aWYgKCFBU1NFUlRfR0UocGlkZmQsIDAsIFxcXCJwaWRmZF9vcGVuXFxcIikpXFxuK1xcdFxcdGdvdG8gcmVzdG9yZTtcXG4rXFx0bWFwX2ZkID0gYnBmX21hcF9fZmQoc2tlbC1cXHUwMDNlbWFwcy50YXNrX3N0Zyk7XFxuK1xcdGVyciA9IGJwZl9tYXBfdXBkYXRlX2VsZW0obWFwX2ZkLCBcXHUwMDI2cGlkZmQsIFxcdTAwMjZ2YWwsIEJQRl9OT0VYSVNUKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwiYm9vdF9jcmVhdGVcXFwiKSlcXG4rXFx0XFx0Z290byByZXN0b3JlO1xcbitcXG4rXFx0LyogQXJtIHRoZSBoYW5kbGVyIGZvciB0aGlzIHRocmVhZCwgdGhlbiB0cmlnZ2VyIGNhbGxfcmN1X3Rhc2tzX3RyYWNlKCkuICovXFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNldGFyZ2V0X3BpZCA9IHN5c2NhbGwoX19OUl9nZXR0aWQpO1xcbitcXHRlcnIgPSBicGZfbWFwX2RlbGV0ZV9lbGVtKG1hcF9mZCwgXFx1MDAyNnBpZGZkKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwiYm9vdF9kZWxldGVcXFwiKSlcXG4rXFx0XFx0Z290byByZXN0b3JlO1xcbitcXG4rXFx0LyogT25seSBUcmVlIFNSQ1UgZW5xdWV1ZXMgdmlhIHJjdV9zZWdjYmxpc3RfZW5xdWV1ZSgpOyBza2lwIGVsc2V3aGVyZS4gKi9cXG4rXFx0aWYgKCFza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWhpdHMpIHtcXG4rXFx0XFx0dGVzdF9fc2tpcCgpO1xcbitcXHRcXHRnb3RvIHJlc3RvcmU7XFxuK1xcdH1cXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZ2V0X2VycnMsIDAsIFxcXCJuZXN0ZWRfc3RvcmFnZV9nZXRcXFwiKTtcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlZGVsX2VycnMsIDAsIFxcXCJuZXN0ZWRfc3RvcmFnZV9kZWxldGVcXFwiKTtcXG4rcmVzdG9yZTpcXG4rXFx0aWYgKGFmZmluaXR5X3NhdmVkKVxcbitcXHRcXHRzY2hlZF9zZXRhZmZpbml0eSgwLCBzaXplb2Yob2xkX3NldCksIFxcdTAwMjZvbGRfc2V0KTtcXG4rb3V0OlxcbitcXHRpZiAocGlkZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2UocGlkZmQpO1xcbitcXHRyY3VfcmVlbnRyeV9fZGVzdHJveShza2VsKTtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmN1X3JlZW50cnkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yY3VfcmVlbnRyeS5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi40N2EzNmY3MDRjZjNlXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yY3VfcmVlbnRyeS5jXFxuQEAgLTAsMCArMSw1MSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKlxcbisgKiBSZS1lbnRlciBjYWxsX3NyY3UoKSBmcm9tIGEgQlBGIHByb2dyYW0uICBmZW50cnkgb24gcmN1X3NlZ2NibGlzdF9lbnF1ZXVlKClcXG4rICogZmlyZXMgaW5zaWRlIGNhbGxfc3JjdSgpJ3MgZW5xdWV1ZSAocmVhY2hlZCBmcm9tIHNyY3VfZ3Bfc3RhcnRfaWZfbmVlZGVkKClcXG4rICogd2l0aCB0aGUgc3JjdV9kYXRhIC1cXHUwMDNlbG9jayBoZWxkKTsgdGhlIGhhbmRsZXIgdGhlbiBjYWxscyBjYWxsX3JjdV90YXNrc190cmFjZSgpXFxuKyAqIC0tIGl0c2VsZiBjYWxsX3NyY3UoKSBvbiByY3VfdGFza3NfdHJhY2Vfc3JjdV9zdHJ1Y3QgLS0gcmUtZW50ZXJpbmcgdGhlIHNhbWVcXG4rICogc3JjdV9kYXRhIG9uIHRoZSBzYW1lIENQVS5cXG4rICovXFxuKyNpbmNsdWRlIFxcXCJ2bWxpbnV4LmhcXFwiXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXFx1MDAzZVxcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuK1xcbitzdHJ1Y3Qge1xcbitcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1RBU0tfU1RPUkFHRSk7XFxuK1xcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX05PX1BSRUFMTE9DKTtcXG4rXFx0X190eXBlKGtleSwgaW50KTtcXG4rXFx0X190eXBlKHZhbHVlLCBfX3U2NCk7XFxuK30gdGFza19zdGcgU0VDKFxcXCIubWFwc1xcXCIpO1xcbitcXG4raW50IHRhcmdldF9waWQ7XFxuK2ludCBoaXRzO1xcbitpbnQgZ2V0X2VycnM7XFxuK2ludCBkZWxfZXJycztcXG4raW50IGRvbmU7XFxuK1xcbitTRUMoXFxcImZlbnRyeS9yY3Vfc2VnY2JsaXN0X2VucXVldWVcXFwiKVxcbitpbnQgQlBGX1BST0cocmVlbnRlcilcXG4re1xcbitcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cjtcXG4rXFxuK1xcdGlmIChkb25lIHx8ICF0YXJnZXRfcGlkKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGN1ciA9IGJwZl9nZXRfY3VycmVudF90YXNrX2J0ZigpO1xcbitcXHRpZiAoY3VyLVxcdTAwM2VwaWQgIT0gdGFyZ2V0X3BpZClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHQvKiBJc3N1ZSB0aGUgbmVzdGVkIGNhbGwgZXhhY3RseSBvbmNlLCBzbyB0aGUgdGVzdCBpcyBkZXRlcm1pbmlzdGljLiAqL1xcbitcXHRkb25lID0gMTtcXG4rXFx0X19zeW5jX2ZldGNoX2FuZF9hZGQoXFx1MDAyNmhpdHMsIDEpO1xcbitcXG4rXFx0LyogUmUtZW50ZXIgdmlhIGEgdGFzay1zdG9yYWdlIGRlbGV0ZSwgd2hpY2ggY2FsbHMgY2FsbF9yY3VfdGFza3NfdHJhY2UoKS4gKi9cXG4rXFx0aWYgKCFicGZfdGFza19zdG9yYWdlX2dldChcXHUwMDI2dGFza19zdGcsIGN1ciwgMCwgQlBGX0xPQ0FMX1NUT1JBR0VfR0VUX0ZfQ1JFQVRFKSlcXG4rXFx0XFx0X19zeW5jX2ZldGNoX2FuZF9hZGQoXFx1MDAyNmdldF9lcnJzLCAxKTtcXG4rXFx0ZWxzZSBpZiAoYnBmX3Rhc2tfc3RvcmFnZV9kZWxldGUoXFx1MDAyNnRhc2tfc3RnLCBjdXIpKVxcbitcXHRcXHRfX3N5bmNfZmV0Y2hfYW5kX2FkZChcXHUwMDI2ZGVsX2VycnMsIDEpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTM6MzE6NDAuOTM5MjIzOVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjc1MDYwNDkyNDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBST1ZFX0xPQ0tJTkdcIixcbiAgICBcIlJDVV9UT1JUVVJFX1RFU1RcIixcbiAgICBcIlBFUkZfRVZFTlRTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmN1X2JhcnJpZXJcIixcbiAgICBcInNyY3VfYmFycmllclwiLFxuICAgIFwic3JjdV9vZmZsaW5lX2RyYWluXCIsXG4gICAgXCJyY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzXCIsXG4gICAgXCJzcmN1X2RlZmVyX2RyYWluXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBSQ1UgYW5kIFNSQ1UgbG9naWMgdG8gZGVmZXIgYGNhbGxfcmN1KClgIGFuZCBgY2FsbF9zcmN1KClgIGNhbGxiYWNrcyB3aGVuIGludGVycnVwdHMgYXJlIGRpc2FibGVkLiBUaGlzIHByZXZlbnRzIGRlYWRsb2NrcyBvciBsaXN0IGNvcnJ1cHRpb24gZHVyaW5nIHJlLWVudHJhbnQgY2FsbHMgKGUuZy4sIGZyb20gQlBGIHByb2dyYW1zIG9yIE5NSXMpLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGRlZmVycmFsIG1lY2hhbmlzbSB1c2luZyBgaXJxX3dvcmtgIGFuZCBsb2NrbGVzcyBsaXN0cy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwsIHJlYWNoYWJsZSwgYW5kIGFmZmVjdCBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTRkMjJjNjc3MTg3ZjJlNmRhOTZkN2YzOGE3YTJjYmUxMDkzNjZiMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMTM6MzE6MzkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NyY3V0aW55LmggYi9pbmNsdWRlL2xpbnV4L3NyY3V0aW55LmhcbmluZGV4IGZiY2YxM2JjMTJkMTUuLmEwZTU0ZDkxODJiYWEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NyY3V0aW55LmhcbisrKyBiL2luY2x1ZGUvbGludXgvc3JjdXRpbnkuaFxuQEAgLTEyLDYgKzEyLDcgQEBcbiAjZGVmaW5lIF9MSU5VWF9TUkNVX1RJTllfSFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycV93b3JrX3R5cGVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9sbGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3dhaXQuaFx1MDAzZVxuIFxuIHN0cnVjdCBzcmN1X3N0cnVjdCB7XG5AQCAtMjYsNiArMjcsOCBAQCBzdHJ1Y3Qgc3JjdV9zdHJ1Y3Qge1xuIFx0c3RydWN0IHJjdV9oZWFkICoqc3JjdV9jYl90YWlsO1x0LyogUGVuZGluZyBjYWxsYmFja3M6IFRhaWwuICovXG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc3JjdV93b3JrO1x0LyogRm9yIGRyaXZpbmcgZ3JhY2UgcGVyaW9kcy4gKi9cbiBcdHN0cnVjdCBpcnFfd29yayBzcmN1X2lycV93b3JrO1x0LyogRGVmZXIgc2NoZWR1bGVfd29yaygpIHRvIGlycSB3b3JrLiAqL1xuK1x0c3RydWN0IGxsaXN0X2hlYWQgZGVmZXJfY2JzO1x0LyogQ2FsbGJhY2tzIGRlZmVycmVkIG9uIHJlLWVudHJ5LiAqL1xuK1x0c3RydWN0IGlycV93b3JrIGRlZmVyX2l3O1x0XHQvKiBSZWdpc3RlcnMgZGVmZXJfY2JzIGxhdGVyLiAqL1xuICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQ1xuIFx0c3RydWN0IGxvY2tkZXBfbWFwIGRlcF9tYXA7XG4gI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQyAqL1xuQEAgLTMzLDYgKzM2LDcgQEAgc3RydWN0IHNyY3Vfc3RydWN0IHtcbiBcbiB2b2lkIHNyY3VfZHJpdmVfZ3Aoc3RydWN0IHdvcmtfc3RydWN0ICp3cCk7XG4gdm9pZCBzcmN1X3RpbnlfaXJxX3dvcmsoc3RydWN0IGlycV93b3JrICppcnFfd29yayk7XG4rdm9pZCBzcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXJxX3dvcmspO1xuIFxuICNkZWZpbmUgX19TUkNVX1NUUlVDVF9JTklUKG5hbWUsIF9faWdub3JlZCwgX19faWdub3JlZCwgX19fX2lnbm9yZWQpXHRcXFxuIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuQEAgLTQwLDYgKzQ0LDkgQEAgdm9pZCBzcmN1X3RpbnlfaXJxX3dvcmsoc3RydWN0IGlycV93b3JrICppcnFfd29yayk7XG4gXHQuc3JjdV9jYl90YWlsID0gXHUwMDI2bmFtZS5zcmN1X2NiX2hlYWQsXHRcdFx0XHRcXFxuIFx0LnNyY3Vfd29yayA9IF9fV09SS19JTklUSUFMSVpFUihuYW1lLnNyY3Vfd29yaywgc3JjdV9kcml2ZV9ncCksXHRcXFxuIFx0LnNyY3VfaXJxX3dvcmsgPSB7IC5mdW5jID0gc3JjdV90aW55X2lycV93b3JrIH0sXHRcdFxcXG4rXHQuZGVmZXJfY2JzID0gTExJU1RfSEVBRF9JTklUKG5hbWUuZGVmZXJfY2JzKSxcdFx0XHRcXFxuK1x0LmRlZmVyX2l3ID0geyAubm9kZSA9IHsgLnVfZmxhZ3MgPSBJUlFfV09SS19IQVJEX0lSUSB9LFx0XHRcXFxuK1x0XHQgICAgICAuZnVuYyA9IHNyY3VfZGVmZXJfZHJhaW4gfSxcdFx0XHRcXFxuIFx0X19TUkNVX0RFUF9NQVBfSU5JVChuYW1lKVx0XHRcdFx0XHRcXFxuIH1cbiBcbkBAIC0xMzEsMTAgKzEzOCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzeW5jaHJvbml6ZV9zcmN1X2V4cGVkaXRlZChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbiBcdHN5bmNocm9uaXplX3NyY3Uoc3NwKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbi17XG4tXHRzeW5jaHJvbml6ZV9zcmN1KHNzcCk7XG4tfVxuK3ZvaWQgc3JjdV9iYXJyaWVyKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKTtcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgc3JjdV9leHBlZGl0ZV9jdXJyZW50KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKSB7IH1cbiAjZGVmaW5lIHNyY3VfY2hlY2tfcmVhZF9mbGF2b3Ioc3NwLCByZWFkX2ZsYXZvcikgZG8geyB9IHdoaWxlICgwKVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3JjdXRyZWUuaCBiL2luY2x1ZGUvbGludXgvc3JjdXRyZWUuaFxuaW5kZXggNzVlNTRlNGY5NjNmYS4uMDlhOWM4ZjRhNmQyNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3JjdXRyZWUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zcmN1dHJlZS5oXG5AQCAtMTMsNiArMTMsOCBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdV9ub2RlX3RyZWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBsZXRpb24uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycV93b3JrX3R5cGVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9sbGlzdC5oXHUwMDNlXG4gXG4gc3RydWN0IHNyY3Vfbm9kZTtcbiBzdHJ1Y3Qgc3JjdV9zdHJ1Y3Q7XG5AQCAtNDEsNiArNDMsOSBAQCBzdHJ1Y3Qgc3JjdV9kYXRhIHtcbiBcdGJvb2wgc3JjdV9jYmxpc3RfaW52b2tpbmc7XHRcdC8qIEludm9raW5nIHRoZXNlIENCcz8gKi9cbiBcdHN0cnVjdCB0aW1lcl9saXN0IGRlbGF5X3dvcms7XHRcdC8qIERlbGF5IGZvciBDQiBpbnZva2luZyAqL1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IHdvcms7XHRcdC8qIENvbnRleHQgZm9yIENCIGludm9raW5nLiAqL1xuK1x0c3RydWN0IGxsaXN0X2hlYWQgZGVmZXJfY2JzO1x0XHQvKiBDYWxsYmFja3MgZGVmZXJyZWQgb24gcmUtZW50cnkuICovXG4rXHRzdHJ1Y3QgbGxpc3Rfbm9kZSBkZWZlcl9saW5rO1x0XHQvKiBMaW5rcyBvbnRvIHRoZSBwZXItQ1BVIGRlZmVycmFsIGRyYWluIGxpc3QgKi9cbitcdGJvb2wgZGVmZXJfZXhwO1x0XHRcdFx0LyogQSBkZWZlcnJlZCBjYWxsYmFjayBhc2tlZCB0byBleHBlZGl0ZS4gKi9cbiBcdHN0cnVjdCByY3VfaGVhZCBzcmN1X2JhcnJpZXJfaGVhZDtcdC8qIEZvciBzcmN1X2JhcnJpZXIoKSB1c2UuICovXG4gXHRzdHJ1Y3QgcmN1X2hlYWQgc3JjdV9lY19oZWFkO1x0XHQvKiBGb3Igc3JjdV9leHBlZGl0ZV9jdXJyZW50KCkgdXNlLiAqL1xuIFx0aW50IHNyY3VfZWNfc3RhdGU7XHRcdFx0LyogIFN0YXRlIGZvciBzcmN1X2V4cGVkaXRlX2N1cnJlbnQoKS4gKi9cbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L0tjb25maWcgYi9rZXJuZWwvcmN1L0tjb25maWdcbmluZGV4IDMzMmRmN2E3YTYzNDcuLmJjOTQ4M2MwYjVkODQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvcmN1L0tjb25maWdcbisrKyBiL2tlcm5lbC9yY3UvS2NvbmZpZ1xuQEAgLTE3NSw2ICsxNzUsMTIgQEAgY29uZmlnIFJDVV9TVEFMTF9DT01NT05cbiBjb25maWcgUkNVX05FRURfU0VHQ0JMSVNUXG4gXHRkZWZfYm9vbCAoIFRSRUVfUkNVIHx8IFRSRUVfU1JDVSB8fCBUQVNLU19SQ1VfR0VORVJJQyApXG4gXG4rIyBUaGUgZGVmZXJyYWwgKGFuZCB0aGUgSVJRX1dPUksgaXQgdXNlcykgaXMgb25seSBuZWVkZWQgd2hlcmUgY2FsbF9yY3UoKSAvXG4rIyBjYWxsX3NyY3UoKSBjYW4gYmUgaW52b2tlZCB3aGlsZSBhIGNhbGxiYWNrLWxpc3Qgb3BlcmF0aW9uIGlzIGluIGZsaWdodC5cbitjb25maWcgUkNVX0RFRkVSXG4rXHRkZWZfYm9vbCBIQVZFX05NSSB8fCBLUFJPQkVTIHx8IEZVTkNUSU9OX1RSQUNFUiB8fCBUUkFDRVBPSU5UU1xuK1x0c2VsZWN0IElSUV9XT1JLXG4rXG4gY29uZmlnIFJDVV9GQU5PVVRcbiBcdGludCBcIlRyZWUtYmFzZWQgaGllcmFyY2hpY2FsIFJDVSBmYW5vdXQgdmFsdWVcIlxuIFx0cmFuZ2UgMiA2NCBpZiA2NEJJVFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvcmN1LmggYi9rZXJuZWwvcmN1L3JjdS5oXG5pbmRleCAzOWE5ZjZmYTlhN2IyLi44NGQ3NGNkNWEzNTFjIDEwMDY0NFxuLS0tIGEva2VybmVsL3JjdS9yY3UuaFxuKysrIGIva2VybmVsL3JjdS9yY3UuaFxuQEAgLTU3Miw2ICs1NzIsMjQgQEAgc3RhdGljIGlubGluZSB2b2lkIHRhc2tzX2NibGlzdF9pbml0X2dlbmVyaWModm9pZCkgeyB9XG4gI2RlZmluZSBSQ1VfU0NIRURVTEVSX0lOSVRcdDFcbiAjZGVmaW5lIFJDVV9TQ0hFRFVMRVJfUlVOTklOR1x0MlxuIFxuKy8qXG4rICogRGVmZXIgYSBjYWxsX3JjdSgpL2NhbGxfc3JjdSgpIGNhbGxiYWNrIHJhdGhlciB0aGFuIGVucXVldWUgaXQgbm93PyAgRGVmZXJcbisgKiB3aGVuZXZlciBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCwgc2luY2UgYSBjYWxsYmFjay1saXN0IG9wZXJhdGlvbiBtYXkgYmUgaW5cbisgKiBmbGlnaHQgb24gdGhpcyBDUFUuICBOb3QgYmVmb3JlIHRoZSBzY2hlZHVsZXIgaXMgdXAsIHRob3VnaDogdGhhdCBjb3ZlcnNcbisgKiBlYXJseSBib290LCB3aGVyZSBpcnFfd29yayBpcyBub3QgeWV0IHVzYWJsZSBhbmQgcmN1X2luaXQoKSBpdHNlbGYgYWxyZWFkeVxuKyAqIGNhbGxzIGNhbGxfcmN1KCkuXG4rICovXG4rc3RhdGljIGlubGluZSBib29sIHNob3VsZF9yY3VfZGVmZXIodm9pZClcbit7XG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiBpcnFzX2Rpc2FibGVkKCkgXHUwMDI2XHUwMDI2IHJjdV9zY2hlZHVsZXJfYWN0aXZlICE9IFJDVV9TQ0hFRFVMRVJfSU5BQ1RJVkU7XG4rfVxuK1xuKy8qIERyYWluIGFuIG91dGdvaW5nIENQVSdzIGRlZmVycmVkIFNSQ1UgY2FsbGJhY2tzOyBzZWUgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcygpLiAqL1xuK3ZvaWQgc3JjdV9vZmZsaW5lX2RyYWluKGludCBjcHUpO1xuK1xuIGVudW0gcmN1dG9ydHVyZV90eXBlIHtcbiBcdFJDVV9GTEFWT1IsXG4gXHRSQ1VfVEFTS1NfRkxBVk9SLFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvcmN1dG9ydHVyZS5jIGIva2VybmVsL3JjdS9yY3V0b3J0dXJlLmNcbmluZGV4IDc5NDkzN2UxM2U3YzMuLmE4NGU3MjVlODA2NTYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuY1xuKysrIGIva2VybmVsL3JjdS9yY3V0b3J0dXJlLmNcbkBAIC00OCw2ICs0OCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGljay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGVfdHJhY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25taS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGVyZl9ldmVudC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJyY3UuaFwiXG4gXG5AQCAtMTE1LDYgKzExNiw3IEBAIHRvcnR1cmVfcGFyYW0oaW50LCBsZWFrcG9pbnRlciwgMCwgXCJMZWFrIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGZyb20gcmVhZGVyc1wiKTtcbiB0b3J0dXJlX3BhcmFtKGludCwgbl9iYXJyaWVyX2NicywgMCwgXCIjIG9mIGNhbGxiYWNrcy9rdGhyZWFkcyBmb3IgYmFycmllciB0ZXN0aW5nXCIpO1xuIHRvcnR1cmVfcGFyYW0oaW50LCBuX3VwX2Rvd24sIDMyLCBcIiMgb2YgY29uY3VycmVudCB1cC9kb3duIGhydGltZXItYmFzZWQgUkNVIHJlYWRlcnNcIik7XG4gdG9ydHVyZV9wYXJhbShpbnQsIG5mYWtld3JpdGVycywgNCwgXCJOdW1iZXIgb2YgUkNVIGZha2Ugd3JpdGVyIHRocmVhZHNcIik7XG4rdG9ydHVyZV9wYXJhbShib29sLCBubWlfY2FsbHMsIHRydWUsIFwiRXhlcmNpc2UgLVx1MDAzZWNhbGwoKSBmcm9tIE5NSSBvbiBubWlfY2FwYWJsZSBmbGF2b3JzXCIpO1xuIHRvcnR1cmVfcGFyYW0oaW50LCBucmVhZGVycywgLTEsIFwiTnVtYmVyIG9mIFJDVSByZWFkZXIgdGhyZWFkc1wiKTtcbiB0b3J0dXJlX3BhcmFtKGJvb2wsIG53cml0ZXJzLCAxLCBcIk51bWJlciBvZiBSQ1Ugd3JpdGVyIHRocmVhZHMgKDAgb3IgMSlcIik7XG4gdG9ydHVyZV9wYXJhbShpbnQsIG9iamVjdF9kZWJ1ZywgMCwgXCJFbmFibGUgZGVidWctb2JqZWN0IGRvdWJsZSBjYWxsX3JjdSgpIHRlc3RpbmdcIik7XG5AQCAtMjE2LDYgKzIxOCw4IEBAIHN0YXRpYyBsb25nIG5fcmN1X3RvcnR1cmVfYm9vc3RfZmFpbHVyZTtcbiBzdGF0aWMgbG9uZyBuX3JjdV90b3J0dXJlX2Jvb3N0cztcbiBzdGF0aWMgYXRvbWljX2xvbmdfdCBuX3JjdV90b3J0dXJlX3RpbWVycztcbiBzdGF0aWMgYXRvbWljX2xvbmdfdCBuX3JjdV90b3J0dXJlX2lycXM7XG4rc3RhdGljIGF0b21pY19sb25nX3Qgbl9yY3VfdG9ydHVyZV9ubWlfY2FsbDtcbitzdGF0aWMgYXRvbWljX2xvbmdfdCBuX3JjdV90b3J0dXJlX25taV9jYjtcbiBzdGF0aWMgbG9uZyBuX2JhcnJpZXJfYXR0ZW1wdHM7XG4gc3RhdGljIGxvbmcgbl9iYXJyaWVyX3N1Y2Nlc3NlczsgLyogZGlkIHJjdV9iYXJyaWVyIHRlc3Qgc3VjY2VlZD8gKi9cbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBuX3JlYWRfZXhpdHM7XG5AQCAtNDMzLDYgKzQzNyw3IEBAIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMge1xuIFx0Ym9vbCAoKmlzX3Rhc2tfcmN1X2Jvb3N0ZWQpKHZvaWQpO1xuIFx0bG9uZyBjYmZsb29kX21heDtcbiBcdGludCBpcnFfY2FwYWJsZTtcbitcdGludCBubWlfY2FwYWJsZTtcbiBcdGludCBjYW5fYm9vc3Q7XG4gXHRpbnQgZXh0ZW5kYWJsZXM7XG4gXHRpbnQgc2xvd19ncHM7XG5AQCAtNjQ4LDYgKzY1Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzIHJjdV9vcHMgPSB7XG4gXHQuZXh0ZW5kYWJsZXNcdFx0PSBSQ1VUT1JUVVJFX01BWF9FWFRFTkQsXG4gXHQuZGVidWdfb2JqZWN0c1x0XHQ9IDEsXG4gXHQuc3RhcnRfcG9sbF9pcnFzb2ZmXHQ9IDEsXG4rXHQubm1pX2NhcGFibGVcdFx0PSAxLFxuIFx0Lm5hbWVcdFx0XHQ9IFwicmN1XCJcbiB9O1xuIFxuQEAgLTk0Miw2ICs5NDgsNyBAQCBzdGF0aWMgc3RydWN0IHJjdV90b3J0dXJlX29wcyBzcmN1X29wcyA9IHtcbiBcdC5kZWJ1Z19vYmplY3RzXHQ9IDEsXG4gXHQuaGF2ZV91cF9kb3duXHQ9IElTX0VOQUJMRUQoQ09ORklHX1RJTllfU1JDVSlcbiBcdFx0XHRcdD8gMCA6IFNSQ1VfUkVBRF9GTEFWT1JfTk9STUFMIHwgU1JDVV9SRUFEX0ZMQVZPUl9GQVNUX1VQRE9XTixcbitcdC5ubWlfY2FwYWJsZVx0PSAxLFxuIFx0Lm5hbWVcdFx0PSBcInNyY3VcIlxuIH07XG4gXG5AQCAtMTAwNSw2ICsxMDEyLDcgQEAgc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgc3JjdWRfb3BzID0ge1xuIFx0LmRlYnVnX29iamVjdHNcdD0gMSxcbiBcdC5oYXZlX3VwX2Rvd25cdD0gSVNfRU5BQkxFRChDT05GSUdfVElOWV9TUkNVKVxuIFx0XHRcdFx0PyAwIDogU1JDVV9SRUFEX0ZMQVZPUl9OT1JNQUwgfCBTUkNVX1JFQURfRkxBVk9SX0ZBU1RfVVBET1dOLFxuK1x0Lm5taV9jYXBhYmxlXHQ9IDEsXG4gXHQubmFtZVx0XHQ9IFwic3JjdWRcIlxuIH07XG4gXG5AQCAtMTI2OSw2ICsxMjc3LDcgQEAgc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgdGFza3NfdHJhY2luZ19vcHMgPSB7XG4gXHQuY2JmbG9vZF9tYXhcdD0gNTAwMDAsXG4gXHQuaXJxX2NhcGFibGVcdD0gMSxcbiBcdC5zbG93X2dwc1x0PSAxLFxuK1x0Lm5taV9jYXBhYmxlXHQ9IDEsXG4gXHQubmFtZVx0XHQ9IFwidGFza3MtdHJhY2luZ1wiXG4gfTtcbiBcbkBAIC0yNjU5LDEyICsyNjY4LDEzMSBAQCBzdGF0aWMgYm9vbCByY3VfdG9ydHVyZV9vbmVfcmVhZChzdHJ1Y3QgdG9ydHVyZV9yYW5kb21fc3RhdGUgKnRyc3AsIGxvbmcgbXlpZClcbiBcbiBzdGF0aWMgREVGSU5FX1RPUlRVUkVfUkFORE9NX1BFUkNQVShyY3VfdG9ydHVyZV90aW1lcl9yYW5kKTtcbiBcbisvKlxuKyAqIEV4ZXJjaXNlIC1cdTAwM2VjYWxsKCkgZnJvbSBOTUkgY29udGV4dCBmb3IgZmxhdm9ycyB0aGF0IHNldCAtXHUwMDNlbm1pX2NhcGFibGUuICBBXG4rICogcGVyLUNQVSBoYXJkd2FyZSBwZXJmIGNvdW50ZXIgb3ZlcmZsb3dzIGludG8gYW4gTk1JLCBhbmQgaXRzIGhhbmRsZXIgc3VibWl0c1xuKyAqIG9uZSBwcmVhbGxvY2F0ZWQgY2FsbGJhY2sgdmlhIC1cdTAwM2VjYWxsKCkuICBPbmUgY2FsbGJhY2sgaXMgaW4gZmxpZ2h0IGF0IGEgdGltZVxuKyAqIChndWFyZGVkIGJ5IGFuIGF0b21pYykgdG8gYXZvaWQgYWxsb2NhdGluZyBpbiBOTUkuICBUaGlzIG1pcnJvcnMgaG93IGEgQlBGXG4rICogcHJvZ3JhbSByZWFjaGVzIC1cdTAwM2VjYWxsKCkgZnJvbSBOTUkuXG4rICovXG4rI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UU1xuK3N0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIHJjdV90b3J0dXJlX25taV9hdHRyID0ge1xuK1x0LnR5cGVcdFx0PSBQRVJGX1RZUEVfSEFSRFdBUkUsXG4rXHQuY29uZmlnXHRcdD0gUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTLFxuK1x0LnNpemVcdFx0PSBzaXplb2Yoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciksXG4rXHQucGlubmVkXHRcdD0gMSxcbitcdC5kaXNhYmxlZFx0PSAxLFxuK1x0LmZyZXFcdFx0PSAxLFxuK1x0LnNhbXBsZV9mcmVxXHQ9IDEwMCxcbit9O1xuK1xuKy8qIE9uZSBpbi1mbGlnaHQgY2FsbGJhY2sgcGVyIENQVTsgLVx1MDAzZWludXNlIGlzIHJlbGVhc2VkIGJ5IHRoZSBjYWxsYmFjay4gKi9cbitzdHJ1Y3QgcmN1X3RvcnR1cmVfbm1pX2NicyB7XG4rXHRzdHJ1Y3QgcmN1X2hlYWQgcmg7XG4rXHRhdG9taWNfdCBpbnVzZTtcbit9O1xuK1xuK3N0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudCAqKnJjdV90b3J0dXJlX25taV9ldmVudHM7XG4rc3RhdGljIGludCByY3VfdG9ydHVyZV9ubWlfaHBfc3RhdGU7XG4rc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCByY3VfdG9ydHVyZV9ubWlfY2JzLCByY3VfdG9ydHVyZV9ubWlfY2JzKTtcbitcbitzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9ubWlfY2Ioc3RydWN0IHJjdV9oZWFkICpyaHApXG4re1xuK1x0c3RydWN0IHJjdV90b3J0dXJlX25taV9jYnMgKnJ0bmNwID0gY29udGFpbmVyX29mKHJocCwgc3RydWN0IHJjdV90b3J0dXJlX25taV9jYnMsIHJoKTtcbitcbitcdGF0b21pY19sb25nX2luYyhcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYik7XG4rXHRhdG9taWNfc2V0KFx1MDAyNnJ0bmNwLVx1MDAzZWludXNlLCAwKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX292ZXJmbG93KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCxcbitcdFx0XHRcdCAgICAgc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuK3tcbitcdHN0cnVjdCByY3VfdG9ydHVyZV9ubWlfY2JzICpydG5jcCA9IHRoaXNfY3B1X3B0cihcdTAwMjZyY3VfdG9ydHVyZV9ubWlfY2JzKTtcbitcbitcdGlmICghaW5fbm1pKCkpXG4rXHRcdHJldHVybjtcbitcdGlmIChjdXJfb3BzLVx1MDAzZWNhbGwgXHUwMDI2XHUwMDI2ICFhdG9taWNfeGNoZyhcdTAwMjZydG5jcC1cdTAwM2VpbnVzZSwgMSkpIHtcbitcdFx0YXRvbWljX2xvbmdfaW5jKFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NhbGwpO1xuK1x0XHRjdXJfb3BzLVx1MDAzZWNhbGwoXHUwMDI2cnRuY3AtXHUwMDNlcmgsIHJjdV90b3J0dXJlX25taV9jYik7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmN1X3RvcnR1cmVfbm1pX29ubGluZSh1bnNpZ25lZCBpbnQgY3B1KVxuK3tcbitcdHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDtcbitcbitcdGV2ZW50ID0gcGVyZl9ldmVudF9jcmVhdGVfa2VybmVsX2NvdW50ZXIoXHUwMDI2cmN1X3RvcnR1cmVfbm1pX2F0dHIsIGNwdSwgTlVMTCxcbitcdFx0XHRcdFx0XHQgcmN1X3RvcnR1cmVfbm1pX292ZXJmbG93LCBOVUxMKTtcbitcdGlmIChJU19FUlIoZXZlbnQpKVxuK1x0XHRyZXR1cm4gMDtcbitcdHJjdV90b3J0dXJlX25taV9ldmVudHNbY3B1XSA9IGV2ZW50O1xuK1x0cGVyZl9ldmVudF9lbmFibGUoZXZlbnQpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmN1X3RvcnR1cmVfbm1pX29mZmxpbmUodW5zaWduZWQgaW50IGNwdSlcbit7XG4rXHRzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSByY3VfdG9ydHVyZV9ubWlfZXZlbnRzW2NwdV07XG4rXG4rXHRpZiAoZXZlbnQpIHtcbitcdFx0cmN1X3RvcnR1cmVfbm1pX2V2ZW50c1tjcHVdID0gTlVMTDtcbitcdFx0cGVyZl9ldmVudF9kaXNhYmxlKGV2ZW50KTtcbitcdFx0cGVyZl9ldmVudF9yZWxlYXNlX2tlcm5lbChldmVudCk7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLypcbisgKiBEcml2ZSB0aGUgY291bnRlcnMgZnJvbSBDUFUtaG90cGx1ZyBjYWxsYmFja3Mgc28gdGhhdCBjb3ZlcmFnZSBzdXJ2aXZlcyB0aGVcbisgKiBvbm9mZiB0ZXN0aW5nIHRoYXQgbW9zdCBzY2VuYXJpb3MgcnVuLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9pbml0KHZvaWQpXG4re1xuK1x0aW50IHJldDtcbitcbitcdGlmICghbm1pX2NhbGxzIHx8ICFjdXJfb3BzLVx1MDAzZW5taV9jYXBhYmxlIHx8ICFjdXJfb3BzLVx1MDAzZWNhbGwpXG4rXHRcdHJldHVybjtcbitcdHJjdV90b3J0dXJlX25taV9ldmVudHMgPSBrY2FsbG9jKG5yX2NwdV9pZHMsIHNpemVvZigqcmN1X3RvcnR1cmVfbm1pX2V2ZW50cyksXG4rXHRcdFx0XHRcdCBHRlBfS0VSTkVMKTtcbitcdGlmICghcmN1X3RvcnR1cmVfbm1pX2V2ZW50cylcbitcdFx0cmV0dXJuO1xuK1x0cmV0ID0gY3B1aHBfc2V0dXBfc3RhdGUoQ1BVSFBfQVBfT05MSU5FX0RZTiwgXCJyY3V0b3J0dXJlL25taTpvbmxpbmVcIixcbitcdFx0XHRcdHJjdV90b3J0dXJlX25taV9vbmxpbmUsIHJjdV90b3J0dXJlX25taV9vZmZsaW5lKTtcbitcdGlmIChyZXQgXHUwMDNjIDApIHtcbitcdFx0a2ZyZWUocmN1X3RvcnR1cmVfbm1pX2V2ZW50cyk7XG4rXHRcdHJjdV90b3J0dXJlX25taV9ldmVudHMgPSBOVUxMO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXHRyY3VfdG9ydHVyZV9ubWlfaHBfc3RhdGUgPSByZXQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJjdV90b3J0dXJlX25taV9jbGVhbnVwKHZvaWQpXG4re1xuK1x0aWYgKCFyY3VfdG9ydHVyZV9ubWlfZXZlbnRzKVxuK1x0XHRyZXR1cm47XG4rXHRpZiAocmN1X3RvcnR1cmVfbm1pX2hwX3N0YXRlIFx1MDAzZSAwKSB7XG4rXHRcdGNwdWhwX3JlbW92ZV9zdGF0ZShyY3VfdG9ydHVyZV9ubWlfaHBfc3RhdGUpO1xuK1x0XHRyY3VfdG9ydHVyZV9ubWlfaHBfc3RhdGUgPSAwO1xuK1x0fVxuK1x0a2ZyZWUocmN1X3RvcnR1cmVfbm1pX2V2ZW50cyk7XG4rXHRyY3VfdG9ydHVyZV9ubWlfZXZlbnRzID0gTlVMTDtcbitcdGlmICghYXRvbWljX2xvbmdfcmVhZChcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYWxsKSlcbitcdFx0cHJfYWxlcnQoXCIlczogbm1pX2NhbGxzIHNldCBidXQgbm8gLVx1MDAzZWNhbGwoKSBpc3N1ZWQgZnJvbSBOTUk6IG5vdCBzdXBwb3J0ZWQgaGVyZS5cXG5cIixcbitcdFx0XHQgX19mdW5jX18pO1xuK31cbisjZWxzZSAvKiAjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTICovXG4rc3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2luaXQodm9pZCkgeyB9XG4rc3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfbm1pX2NsZWFudXAodm9pZCkgeyB9XG4rI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMgKi9cbitcbiAvKlxuICAqIFJDVSB0b3J0dXJlIHJlYWRlciBmcm9tIHRpbWVyIGhhbmRsZXIuICBEZXJlZmVyZW5jZXMgcmN1X3RvcnR1cmVfY3VycmVudCxcbiAgKiBpbmNyZW1lbnRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBvZiB0aGUgcGlwZWxpbmUgYXJyYXkuICBUaGVcbiAgKiBjb3VudGVyIGluIHRoZSBlbGVtZW50IHNob3VsZCBuZXZlciBiZSBncmVhdGVyIHRoYW4gMSwgb3RoZXJ3aXNlLCB0aGVcbiAgKiBSQ1UgaW1wbGVtZW50YXRpb24gaXMgYnJva2VuLlxuICAqL1xuK1xuIHN0YXRpYyB2b2lkIHJjdV90b3J0dXJlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp1bnVzZWQpXG4ge1xuIFx0V0FSTl9PTl9PTkNFKCFpbl9zZXJ2aW5nX3NvZnRpcnEoKSk7XG5AQCAtMzA0Nyw2ICszMTc1LDkgQEAgcmN1X3RvcnR1cmVfc3RhdHNfcHJpbnQodm9pZClcbiBcdFx0ZGF0YV9yYWNlKG5fYmFycmllcl9hdHRlbXB0cyksXG4gXHRcdGRhdGFfcmFjZShuX3JjdV90b3J0dXJlX2JhcnJpZXJfZXJyb3IpKTtcbiBcdHByX2NvbnQoXCJyZWFkLWV4aXRzOiAlbGQgXCIsIGRhdGFfcmFjZShuX3JlYWRfZXhpdHMpKTsgLy8gU3RhdGlzdGljLlxuK1x0cHJfY29udChcIm5taS1jYWxsczogJWxkIG5taS1jYnM6ICVsZCBcIixcbitcdFx0YXRvbWljX2xvbmdfcmVhZChcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYWxsKSxcbitcdFx0YXRvbWljX2xvbmdfcmVhZChcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYikpO1xuIFx0cHJfY29udChcIm5vY2ItdG9nZ2xlczogJWxkOiVsZCBcIixcbiBcdFx0YXRvbWljX2xvbmdfcmVhZChcdTAwMjZuX25vY2Jfb2ZmbG9hZCksIGF0b21pY19sb25nX3JlYWQoXHUwMDI2bl9ub2NiX2Rlb2ZmbG9hZCkpO1xuIFx0cHJfY29udChcImdwd3JhcHM6ICVsZFxcblwiLCBuX2dwd3JhcHMpO1xuQEAgLTMxOTUsNyArMzMyNiw3IEBAIHJjdV90b3J0dXJlX3ByaW50X21vZHVsZV9wYXJtcyhzdHJ1Y3QgcmN1X3RvcnR1cmVfb3BzICpjdXJfb3BzLCBjb25zdCBjaGFyICp0YWcpXG4gXHRcdCBcInJlYWRfZXhpdF9kZWxheT0lZCByZWFkX2V4aXRfYnVyc3Q9JWQgXCJcbiBcdFx0IFwicmVhZGVyX2ZsYXZvcj0leCBcIlxuIFx0XHQgXCJub2Nic19udGhyZWFkcz0lZCBub2Nic190b2dnbGU9JWQgXCJcbi1cdFx0IFwidGVzdF9ubWlzPSVkIFwiXG4rXHRcdCBcInRlc3Rfbm1pcz0lZCBubWlfY2FsbHM9JWQgXCJcbiBcdFx0IFwicHJlZW1wdF9kdXJhdGlvbj0lZCBwcmVlbXB0X2ludGVydmFsPSVkIG5fdXBfZG93bj0lZFxcblwiLFxuIFx0XHQgdG9ydHVyZV90eXBlLCB0YWcsIG5yZWFscmVhZGVycywgbndyaXRlcnMsIG5yZWFsZmFrZXdyaXRlcnMsXG4gXHRcdCBzdGF0X2ludGVydmFsLCB2ZXJib3NlLCB0ZXN0X25vX2lkbGVfaHosIHNodWZmbGVfaW50ZXJ2YWwsXG5AQCAtMzIwOSw3ICszMzQwLDcgQEAgcmN1X3RvcnR1cmVfcHJpbnRfbW9kdWxlX3Bhcm1zKHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgKmN1cl9vcHMsIGNvbnN0IGNoYXIgKnRhZylcbiBcdFx0IHJlYWRfZXhpdF9kZWxheSwgcmVhZF9leGl0X2J1cnN0LFxuIFx0XHQgcmVhZGVyX2ZsYXZvcixcbiBcdFx0IG5vY2JzX250aHJlYWRzLCBub2Nic190b2dnbGUsXG4tXHRcdCB0ZXN0X25taXMsXG4rXHRcdCB0ZXN0X25taXMsIG5taV9jYWxscyxcbiBcdFx0IHByZWVtcHRfZHVyYXRpb24sIHByZWVtcHRfaW50ZXJ2YWwsIG5fdXBfZG93bik7XG4gfVxuIFxuQEAgLTQyODMsNiArNDQxNCw3IEBAIHJjdV90b3J0dXJlX2NsZWFudXAodm9pZClcbiBcdGludCBpO1xuIFxuIFx0aWYgKHRvcnR1cmVfY2xlYW51cF9iZWdpbigpKSB7XG4rXHRcdHJjdV90b3J0dXJlX25taV9jbGVhbnVwKCk7XG4gXHRcdGlmIChjdXJfb3BzLVx1MDAzZWNiX2JhcnJpZXIgIT0gTlVMTCkge1xuIFx0XHRcdHByX2luZm8oXCIlczogSW52b2tpbmcgJXBTKCkuXFxuXCIsIF9fZnVuY19fLCBjdXJfb3BzLVx1MDAzZWNiX2JhcnJpZXIpO1xuIFx0XHRcdGN1cl9vcHMtXHUwMDNlY2JfYmFycmllcigpO1xuQEAgLTQzMjUsNiArNDQ1Nyw4IEBAIHJjdV90b3J0dXJlX2NsZWFudXAodm9pZClcbiBcdFx0a2ZyZWUocmVhZGVyX3Rhc2tzKTtcbiBcdFx0cmVhZGVyX3Rhc2tzID0gTlVMTDtcbiBcdH1cbitcdC8qIERpc2FibGUgdGhlIHBlcmYgY291bnRlcnMgKGFuZCB0aHVzIHRoZSBOTUkgLVx1MDAzZWNhbGwoKSBmaXJpbmcpIG5vdy4gKi9cbitcdHJjdV90b3J0dXJlX25taV9jbGVhbnVwKCk7XG4gXHRrZnJlZShyY3VfdG9ydHVyZV9yZWFkZXJfbWJjaGspO1xuIFx0cmN1X3RvcnR1cmVfcmVhZGVyX21iY2hrID0gTlVMTDtcbiBcbkBAIC00MzU0LDYgKzQ0ODgsMjAgQEAgcmN1X3RvcnR1cmVfY2xlYW51cCh2b2lkKVxuIFx0XHRwcl9pbmZvKFwiJXM6IEludm9raW5nICVwUygpLlxcblwiLCBfX2Z1bmNfXywgY3VyX29wcy1cdTAwM2VjYl9iYXJyaWVyKTtcbiBcdFx0Y3VyX29wcy1cdTAwM2VjYl9iYXJyaWVyKCk7XG4gXHR9XG4rXG4rXHQvKlxuK1x0ICogY2JfYmFycmllcigpIGFib3ZlIGRyYWluZWQgZXZlcnkgZGVmZXJyZWQgTk1JIC1cdTAwM2VjYWxsKCkgY2FsbGJhY2ssIHNvIHRoZVxuK1x0ICogY291bnQgaXNzdWVkIGZyb20gTk1JIG11c3QgZXF1YWwgdGhlIGNvdW50IGludm9rZWQ7IGEgbWlzbWF0Y2ggbWVhbnMgYVxuK1x0ICogY2FsbGJhY2sgd2FzIGxvc3QuXG4rXHQgKi9cbitcdGlmIChhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NhbGwpICE9XG4rXHQgICAgYXRvbWljX2xvbmdfcmVhZChcdTAwMjZuX3JjdV90b3J0dXJlX25taV9jYikpIHtcbitcdFx0cHJfYWxlcnQoXCIlczogTk1JIC1cdTAwM2VjYWxsKCkgbG9zdCBhIGNhbGxiYWNrOiBpc3N1ZWQgJWxkIGludm9rZWQgJWxkXFxuXCIsXG4rXHRcdFx0IF9fZnVuY19fLCBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NhbGwpLFxuK1x0XHRcdCBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm5fcmN1X3RvcnR1cmVfbm1pX2NiKSk7XG4rXHRcdGF0b21pY19pbmMoXHUwMDI2bl9yY3VfdG9ydHVyZV9lcnJvcik7XG4rXHR9XG4rXG4gXHRpZiAoY3VyX29wcy1cdTAwM2VjbGVhbnVwICE9IE5VTEwpXG4gXHRcdGN1cl9vcHMtXHUwMDNlY2xlYW51cCgpO1xuIFxuQEAgLTQ3ODYsNiArNDkzNCw4IEBAIHJjdV90b3J0dXJlX2luaXQodm9pZClcbiBcdFx0Zmlyc3RlcnIgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIHVud2luZDtcbiBcdH1cbitcdC8qIEFybSB0aGUgcGVyLUNQVSBwZXJmIGNvdW50ZXJzIHRoYXQgZHJpdmUgLVx1MDAzZWNhbGwoKSBmcm9tIE5NSS4gKi9cbitcdHJjdV90b3J0dXJlX25taV9pbml0KCk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucmVhbHJlYWRlcnM7IGkrKykge1xuIFx0XHRyY3VfdG9ydHVyZV9yZWFkZXJfbWJjaGtbaV0ucnRjX2Noa3JkciA9IC0xO1xuIFx0XHRmaXJzdGVyciA9IHRvcnR1cmVfY3JlYXRlX2t0aHJlYWQocmN1X3RvcnR1cmVfcmVhZGVyLCAodm9pZCAqKWksXG5kaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9zcmN1dGlueS5jIGIva2VybmVsL3JjdS9zcmN1dGlueS5jXG5pbmRleCA1NThiYThkMzE2ZGI2Li43YTdjMWNlZjQzZTEzIDEwMDY0NFxuLS0tIGEva2VybmVsL3JjdS9zcmN1dGlueS5jXG4rKysgYi9rZXJuZWwvcmN1L3NyY3V0aW55LmNcbkBAIC0xMCw2ICsxMCw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnFfd29yay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbGxpc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmVlbXB0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VwZGF0ZV93YWl0LmhcdTAwM2VcbkBAIC0yOSw2ICszMCw4IEBAIGV4dGVybiBpbnQgcmN1X3NjaGVkdWxlcl9hY3RpdmU7XG4gc3RhdGljIExJU1RfSEVBRChzcmN1X2Jvb3RfbGlzdCk7XG4gc3RhdGljIGJvb2wgc3JjdV9pbml0X2RvbmU7XG4gXG4rc3RhdGljIHZvaWQgX19zcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBib29sIGd1YXJkKTtcbitcbiBzdGF0aWMgaW50IGluaXRfc3JjdV9zdHJ1Y3RfZmllbGRzKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuIHtcbiBcdHNzcC1cdTAwM2VzcmN1X2xvY2tfbmVzdGluZ1swXSA9IDA7XG5AQCAtNDMsNiArNDYsOCBAQCBzdGF0aWMgaW50IGluaXRfc3JjdV9zdHJ1Y3RfZmllbGRzKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuIFx0SU5JVF9XT1JLKFx1MDAyNnNzcC1cdTAwM2VzcmN1X3dvcmssIHNyY3VfZHJpdmVfZ3ApO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2c3NwLVx1MDAzZXNyY3Vfd29yay5lbnRyeSk7XG4gXHRpbml0X2lycV93b3JrKFx1MDAyNnNzcC1cdTAwM2VzcmN1X2lycV93b3JrLCBzcmN1X3RpbnlfaXJxX3dvcmspO1xuK1x0aW5pdF9sbGlzdF9oZWFkKFx1MDAyNnNzcC1cdTAwM2VkZWZlcl9jYnMpO1xuK1x0c3NwLVx1MDAzZWRlZmVyX2l3ID0gSVJRX1dPUktfSU5JVF9IQVJEKHNyY3VfZGVmZXJfZHJhaW4pO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTg2LDYgKzkxLDExIEBAIEVYUE9SVF9TWU1CT0xfR1BMKGluaXRfc3JjdV9zdHJ1Y3RfZ2VuZXJpYyk7XG4gdm9pZCBjbGVhbnVwX3NyY3Vfc3RydWN0KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuIHtcbiBcdFdBUk5fT04oc3JjdV9yZWFkZXJzX2FjdGl2ZShzc3ApKTtcbitcdC8qIFJlLWlzc3VlIGFueSBkZWZlcnJlZCBjYWxsYmFja3MsIHRoZW4gd2FpdCBvdXQgLVx1MDAzZWRlZmVyX2l3IGJlZm9yZSBpdCBpcyBmcmVlZC4gKi9cbitcdGlmIChJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKSB7XG4rXHRcdF9fc3JjdV9kZWZlcl9kcmFpbihzc3AsIGZhbHNlKTtcbitcdFx0aXJxX3dvcmtfc3luYyhcdTAwMjZzc3AtXHUwMDNlZGVmZXJfaXcpO1xuK1x0fVxuIFx0aXJxX3dvcmtfc3luYyhcdTAwMjZzc3AtXHUwMDNlc3JjdV9pcnFfd29yayk7XG4gXHRmbHVzaF93b3JrKFx1MDAyNnNzcC1cdTAwM2VzcmN1X3dvcmspO1xuIFx0V0FSTl9PTihzc3AtXHUwMDNlc3JjdV9ncF9ydW5uaW5nKTtcbkBAIC0yMTMsMTEgKzIyMywxMSBAQCBzdGF0aWMgdm9pZCBzcmN1X2dwX3N0YXJ0X2lmX25lZWRlZChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbiB9XG4gXG4gLypcbi0gKiBFbnF1ZXVlIGFuIFNSQ1UgY2FsbGJhY2sgb24gdGhlIHNwZWNpZmllZCBzcmN1X3N0cnVjdCBzdHJ1Y3R1cmUsXG4tICogaW5pdGlhdGluZyBncmFjZS1wZXJpb2QgcHJvY2Vzc2luZyBpZiBpdCBpcyBub3QgYWxyZWFkeSBydW5uaW5nLlxuKyAqIEVucXVldWUgQHJocCBvbiB0aGUgY2FsbGJhY2sgbGlzdC4gIEFsc28gY2FsbGVkIGJ5IHNyY3VfZGVmZXJfZHJhaW4oKSB0b1xuKyAqIHJlLWlzc3VlIGEgZGVmZXJyZWQgY2FsbGJhY2ssIHNvIGl0IG11c3Qgbm90IHJlLWNoZWNrIHRoZSBkZWZlcnJhbCBjb25kaXRpb24uXG4gICovXG4tdm9pZCBjYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxuLVx0ICAgICAgIHJjdV9jYWxsYmFja190IGZ1bmMpXG4rc3RhdGljIHZvaWQgc3JjdV9kb19lbnF1ZXVlKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcbitcdFx0XHQgICAgcmN1X2NhbGxiYWNrX3QgZnVuYylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuQEAgLTIzMSw2ICsyNDEsNTggQEAgdm9pZCBjYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxuIFx0c3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoc3NwKTtcbiBcdHByZWVtcHRfZW5hYmxlKCk7XG4gfVxuK1xuKy8qIFNldCB3aGlsZSBzcmN1X2RlZmVyX2RyYWluKCkgcmUtaXNzdWVzLCB0byBjYXRjaCBhIHJlLWVudHJhbnQgY2FsbF9zcmN1KCkuICovXG4rc3RhdGljIGJvb2wgc3JjdV9kZWZlcl9kcmFpbmluZztcbitcbitzdGF0aWMgdm9pZCBfX3NyY3VfZGVmZXJfZHJhaW4oc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIGJvb2wgZ3VhcmQpXG4re1xuK1x0c3RydWN0IGxsaXN0X25vZGUgKm5vZGUsICpuZXh0O1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcbitcdC8qIENhbGxiYWNrcyBhcmUgdW5vcmRlcmVkLCBzbyBkcmFpbiBpbiBsbGlzdCBvcmRlciB3aXRob3V0IHJldmVyc2luZy4gKi9cbitcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbitcdGlmIChndWFyZClcbitcdFx0V1JJVEVfT05DRShzcmN1X2RlZmVyX2RyYWluaW5nLCB0cnVlKTtcbitcdGxsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgbmV4dCwgbGxpc3RfZGVsX2FsbChcdTAwMjZzc3AtXHUwMDNlZGVmZXJfY2JzKSkge1xuK1x0XHRzdHJ1Y3QgcmN1X2hlYWQgKnJocCA9IChzdHJ1Y3QgcmN1X2hlYWQgKilub2RlO1xuK1xuK1x0XHRyaHAtXHUwMDNlbmV4dCA9IE5VTEw7XG4rXHRcdHNyY3VfZG9fZW5xdWV1ZShzc3AsIHJocCwgcmhwLVx1MDAzZWZ1bmMpO1xuK1x0fVxuK1x0aWYgKGd1YXJkKVxuK1x0XHRXUklURV9PTkNFKHNyY3VfZGVmZXJfZHJhaW5pbmcsIGZhbHNlKTtcbitcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbit9XG4rXG4rLyogT25seSB0aGUgaXJxX3dvcmsgZHJhaW4gY2FuIGJlIHJlLWZlZCBieSBpdHMgb3duIHJlLWlzc3VlOyBzZWUgVHJlZSBTUkNVLiAqL1xuK3ZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KVxuK3tcbitcdF9fc3JjdV9kZWZlcl9kcmFpbihjb250YWluZXJfb2YoaXcsIHN0cnVjdCBzcmN1X3N0cnVjdCwgZGVmZXJfaXcpLCB0cnVlKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoc3JjdV9kZWZlcl9kcmFpbik7XG4rXG4rdm9pZCBjYWxsX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxuK1x0ICAgICAgIHJjdV9jYWxsYmFja190IGZ1bmMpXG4re1xuK1x0aWYgKHNob3VsZF9yY3VfZGVmZXIoKSkge1xuK1x0XHQvKiBBIHJlLWVudHJhbnQgY2FsbF9zcmN1KCkgZHVyaW5nIHRoZSBkcmFpbiB3b3VsZCBsaXZlbG9jayBpdC4gKi9cbitcdFx0aWYgKFJFQURfT05DRShzcmN1X2RlZmVyX2RyYWluaW5nKSBcdTAwMjZcdTAwMjYgIWluX25taSgpKSB7XG4rXHRcdFx0V0FSTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSksXG4rXHRcdFx0XHQgIFwiY2FsbF9zcmN1KCkgcmUtZW50ZXJlZCBkdXJpbmcgY2FsbGJhY2sgZHJhaW47IGxlYWtpbmcgY2FsbGJhY2tcXG5cIik7XG4rXHRcdFx0cmV0dXJuO1xuK1x0XHR9XG4rXHRcdHJocC1cdTAwM2VmdW5jID0gZnVuYztcbitcdFx0aWYgKGxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKilyaHAsIFx1MDAyNnNzcC1cdTAwM2VkZWZlcl9jYnMpKVxuK1x0XHRcdGlycV93b3JrX3F1ZXVlKFx1MDAyNnNzcC1cdTAwM2VkZWZlcl9pdyk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdC8qIEFuIE5NSSByZWFjaGluZyBoZXJlIGVudGVyZWQgd2l0aCBpcnFzIGVuYWJsZWQsIHNvIHRoZSBlbnF1ZXVlIGNhbiByYWNlLiAqL1xuK1x0V0FSTl9PTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSkgXHUwMDI2XHUwMDI2IGluX25taSgpKTtcbitcbitcdHNyY3VfZG9fZW5xdWV1ZShzc3AsIHJocCwgZnVuYyk7XG4rfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGNhbGxfc3JjdSk7XG4gXG4gLypcbkBAIC0yNjAsNiArMzIyLDE1IEBAIHZvaWQgc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfc3JjdSk7XG4gXG4rLyogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcywgdGhlbiB3YWl0IGZvciBhbGwgaW4tZmxpZ2h0IG9uZXMuICovXG4rdm9pZCBzcmN1X2JhcnJpZXIoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXG4re1xuK1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX1JDVV9ERUZFUikpXG4rXHRcdF9fc3JjdV9kZWZlcl9kcmFpbihzc3AsIGZhbHNlKTtcbitcdHN5bmNocm9uaXplX3NyY3Uoc3NwKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoc3JjdV9iYXJyaWVyKTtcbitcbiAvKlxuICAqIGdldF9zdGF0ZV9zeW5jaHJvbml6ZV9zcmN1IC0gUHJvdmlkZSBhbiBlbmQtb2YtZ3JhY2UtcGVyaW9kIGNvb2tpZVxuICAqL1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3Uvc3JjdXRyZWUuYyBiL2tlcm5lbC9yY3Uvc3JjdXRyZWUuY1xuaW5kZXggMzA0MTEyNjc0ZThhMi4uMzVmZmFjZTUxZDUwYiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9yY3Uvc3JjdXRyZWUuY1xuKysrIGIva2VybmVsL3JjdS9zcmN1dHJlZS5jXG5AQCAtMjAsNiArMjAsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcmNwdS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJlZW1wdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXJxX3dvcmsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xsaXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VwZGF0ZV93YWl0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc21wLmhcdTAwM2VcbkBAIC03OSw2ICs4MCw0NSBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX3NyY3Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbiBzdGF0aWMgdm9pZCBzcmN1X2lycV93b3JrKHN0cnVjdCBpcnFfd29yayAqd29yayk7XG4gc3RhdGljIHZvaWQgc3JjdV9kZWxheV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XG4gXG4rc3RydWN0IHNyY3VfZGVmZXI7XG4rc3RhdGljIHZvaWQgc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KTtcbitzdGF0aWMgdm9pZCBfX3NyY3VfZGVmZXJfZHJhaW4oc3RydWN0IHNyY3VfZGVmZXIgKnNuZHAsIGJvb2wgZ3VhcmQpO1xuK1xuKy8qXG4rICogUGVyLUNQVSBjYWxsX3NyY3UoKSBkZWZlcnJhbCBzdGF0ZSwgc2hhcmVkIGJ5IGV2ZXJ5IHNyY3Vfc3RydWN0LiAgQSBkZWZlcnJlZFxuKyAqIGNhbGxiYWNrIGlzIHN0YWdlZCBvbiBpdHMgc3JjdV9kYXRhJ3MgLVx1MDAzZWRlZmVyX2NiczsgdGhhdCBzcmN1X2RhdGEgaXMgY2hhaW5lZFxuKyAqIHZpYSAtXHUwMDNlZGVmZXJfbGluayBvbnRvIC1cdTAwM2VsaXN0LCB3aGljaCB0aGUgaXJxX3dvcmsgd2Fsa3MuXG4rICovXG4rc3RydWN0IHNyY3VfZGVmZXIge1xuK1x0c3RydWN0IGxsaXN0X2hlYWRcdGxpc3Q7XG4rXHRzdHJ1Y3QgaXJxX3dvcmtcdFx0aXc7XG4rXHRyYXdfc3BpbmxvY2tfdFx0XHRsb2NrO1xuK1x0Ym9vbFx0XHRcdGRyYWluaW5nO1xuK307XG4rXG4rc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBzcmN1X2RlZmVyLCBzcmN1X2RlZmVyKSA9IHtcbitcdC5sb2NrID0gX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VEKHNyY3VfZGVmZXIubG9jayksXG4rXHQuaXcgPSBJUlFfV09SS19JTklUX0hBUkQoc3JjdV9kZWZlcl9kcmFpbiksXG4rfTtcbitcbisvKlxuKyAqIEZsdXNoIHBlbmRpbmcgZGVmZXJyZWQgY2FsbGJhY2tzIHNvIGEgZm9sbG93aW5nIHNyY3VfYmFycmllcigpIHdhaXRzIGZvciB0aGVtLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHNyY3VfZGVmZXJfZmx1c2godm9pZClcbit7XG4rXHRpbnQgY3B1O1xuK1xuK1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4rXHRcdHN0cnVjdCBzcmN1X2RlZmVyICpzbmRwID0gXHUwMDI2cGVyX2NwdShzcmN1X2RlZmVyLCBjcHUpO1xuK1xuK1x0XHRpZiAoIWxsaXN0X2VtcHR5KFx1MDAyNnNuZHAtXHUwMDNlbGlzdCkpXG4rXHRcdFx0X19zcmN1X2RlZmVyX2RyYWluKHNuZHAsIGZhbHNlKTtcbitcdH1cbit9XG4rXG4gLypcbiAgKiBJbml0aWFsaXplIFNSQ1UgcGVyLUNQVSBkYXRhLiAgTm90ZSB0aGF0IHN0YXRpY2FsbHkgYWxsb2NhdGVkXG4gICogc3JjdV9zdHJ1Y3Qgc3RydWN0dXJlcyBtaWdodCBhbHJlYWR5IGhhdmUgc3JjdV9yZWFkX2xvY2soKSBhbmRcbkBAIC0xMDcsNiArMTQ3LDExIEBAIHN0YXRpYyB2b2lkIGluaXRfc3JjdV9zdHJ1Y3RfZGF0YShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbiBcdFx0c2RwLVx1MDAzZWNwdSA9IGNwdTtcbiBcdFx0SU5JVF9XT1JLKFx1MDAyNnNkcC1cdTAwM2V3b3JrLCBzcmN1X2ludm9rZV9jYWxsYmFja3MpO1xuIFx0XHR0aW1lcl9zZXR1cChcdTAwMjZzZHAtXHUwMDNlZGVsYXlfd29yaywgc3JjdV9kZWxheV90aW1lciwgMCk7XG4rXHRcdC8qXG4rXHRcdCAqIC1cdTAwM2VkZWZlcl9jYnMsIC1cdTAwM2VkZWZlcl9saW5rIGFuZCAtXHUwMDNlZGVmZXJfZXhwIGFyZSB2YWxpZCB3aGVuIHplcm9lZFxuK1x0XHQgKiBhbmQgYXJlIG5vdCByZWluaXRpYWxpemVkIGhlcmUsIGxlc3Qgd2UgY2xvYmJlciBjYWxsYmFja3MgYVxuK1x0XHQgKiByZWVudHJhbnQgY2FsbF9zcmN1KCkgYWxyZWFkeSBzdGFnZWQuICBTZWUgX19jYWxsX3NyY3UoKS5cbitcdFx0ICovXG4gXHRcdHNkcC1cdTAwM2Vzc3AgPSBzc3A7XG4gXHR9XG4gfVxuQEAgLTY5NSw3ICs3NDAsMTIgQEAgdm9pZCBjbGVhbnVwX3NyY3Vfc3RydWN0KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxuIFx0XHRyZXR1cm47IC8qIEp1c3QgbGVhayBpdCEgKi9cbiBcdGlmIChXQVJOX09OKHNyY3VfcmVhZGVyc19hY3RpdmUoc3NwKSkpXG4gXHRcdHJldHVybjsgLyogSnVzdCBsZWFrIGl0ISAqL1xuLVx0LyogV2FpdCBmb3IgaXJxX3dvcmsgdG8gZmluaXNoIGZpcnN0IGFzIGl0IG1heSBxdWV1ZSBhIG5ldyB3b3JrLiAqL1xuK1x0LypcbitcdCAqIERyYWluIGRlZmVycmVkIGNhbGxiYWNrcyBiZWZvcmUgc3luY2luZyAtXHUwMDNlaXJxX3dvcms6IHJlLWlzc3Vpbmcgb25lIGNhblxuK1x0ICogc3RhcnQgYSBncmFjZSBwZXJpb2QgYW5kIHJlLXF1ZXVlIC1cdTAwM2VpcnFfd29yaywgd2hpY2ggdGhlbiBzY2hlZHVsZXNcbitcdCAqIC1cdTAwM2V3b3JrLCBzbyBib3RoIG11c3QgYmUgd2FpdGVkIG91dCBhZnRlciB0aGUgZHJhaW4uXG4rXHQgKi9cbitcdHNyY3VfZGVmZXJfZmx1c2goKTtcbiBcdGlycV93b3JrX3N5bmMoXHUwMDI2c3VwLVx1MDAzZWlycV93b3JrKTtcbiBcdGZsdXNoX2RlbGF5ZWRfd29yayhcdTAwMjZzdXAtXHUwMDNld29yayk7XG4gXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG5AQCAtMTQxMCw4ICsxNDYwLDggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsXG4gICogc3JjdV9yZWFkX2xvY2soKSwgYW5kIHNyY3VfcmVhZF91bmxvY2soKSB0aGF0IGFyZSBhbGwgcGFzc2VkIHRoZSBzYW1lXG4gICogc3JjdV9zdHJ1Y3Qgc3RydWN0dXJlLlxuICAqL1xuLXN0YXRpYyB2b2lkIF9fY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcbi1cdFx0XHRyY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGRvX25vcm0pXG4rc3RhdGljIHZvaWQgc3JjdV9kb19lbnF1ZXVlKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcbitcdFx0XHQgICAgcmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBkb19ub3JtKVxuIHtcbiBcdGlmIChkZWJ1Z19yY3VfaGVhZF9xdWV1ZShyaHApKSB7XG4gXHRcdC8qIFByb2JhYmxlIGRvdWJsZSBjYWxsX3NyY3UoKSwgc28gbGVhayB0aGUgY2FsbGJhY2suICovXG5AQCAtMTQyMyw2ICsxNDczLDExMSBAQCBzdGF0aWMgdm9pZCBfX2NhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsXG4gXHQodm9pZClzcmN1X2dwX3N0YXJ0X2lmX25lZWRlZChzc3AsIHJocCwgZG9fbm9ybSk7XG4gfVxuIFxuKy8qXG4rICogVGhlIHNyY3VfY2JsaXN0IGFuZCBzcmN1X25vZGUgdHJlZSBhcmUgb25seSBhY2Nlc3NlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWRcbisgKiAoc3JjdV9ncF9zdGFydF9pZl9uZWVkZWQoKSBlbnF1ZXVlcyB1bmRlciByYXdfc3Bpbl9sb2NrX2lycXNhdmUoKSBhbmQgbWF5IHdhbGtcbisgKiB0aGUgdHJlZSkuICBMaWtlIGNhbGxfcmN1KCksIF9fY2FsbF9zcmN1KCkgZGVmZXJzIHdoZW4gaW50ZXJydXB0cyBhcmUgYWxyZWFkeVxuKyAqIGRpc2FibGVkLCBzbyBhIHJlLWVudHJhbnQgY2FsbF9zcmN1KCkgLS0gZS5nLiBjYWxsX3JjdV90YXNrc190cmFjZSgpIGZyb20gYVxuKyAqIEJQRiBwcm9ncmFtIC0tIGNhbm5vdCBjb3JydXB0IHRoZSBsaXN0IG9yIGRlYWRsb2NrLlxuKyAqL1xuK3N0YXRpYyB2b2lkIF9fY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcbitcdFx0XHRyY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGRvX25vcm0pXG4re1xuK1x0aWYgKHNob3VsZF9yY3VfZGVmZXIoKSkge1xuK1x0XHRzdHJ1Y3Qgc3JjdV9kZWZlciAqc25kcCA9IHRoaXNfY3B1X3B0cihcdTAwMjZzcmN1X2RlZmVyKTtcbitcdFx0c3RydWN0IHNyY3VfZGF0YSAqc2RwO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBJbnN0cnVtZW50YXRpb24gb24gdGhlIGVucXVldWUgcGF0aCBjYW4gcmUtZW50ZXIgaGVyZSBmcm9tXG4rXHRcdCAqIGluc2lkZSBzcmN1X2RlZmVyX2RyYWluKCkuICBSZS1xdWV1aW5nIHdvdWxkIGxpdmVsb2NrIHRoZVxuK1x0XHQgKiBkcmFpbiwgc28gZHJvcCB0aGUgY2FsbGJhY2s7IGFuIE5NSSBjYW5ub3QgbG9vcCwgc28gbGV0IGl0IGluLlxuK1x0XHQgKi9cbitcdFx0aWYgKFJFQURfT05DRShzbmRwLVx1MDAzZWRyYWluaW5nKSBcdTAwMjZcdTAwMjYgIWluX25taSgpKSB7XG4rXHRcdFx0V0FSTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSksXG4rXHRcdFx0XHQgIFwiY2FsbF9zcmN1KCkgcmUtZW50ZXJlZCBkdXJpbmcgY2FsbGJhY2sgZHJhaW47IGxlYWtpbmcgY2FsbGJhY2tcXG5cIik7XG4rXHRcdFx0cmV0dXJuO1xuK1x0XHR9XG4rXHRcdHNkcCA9IHRoaXNfY3B1X3B0cihzc3AtXHUwMDNlc2RhKTtcbitcdFx0cmhwLVx1MDAzZWZ1bmMgPSBmdW5jO1xuK1x0XHRpZiAoIWRvX25vcm0pXG4rXHRcdFx0V1JJVEVfT05DRShzZHAtXHUwMDNlZGVmZXJfZXhwLCB0cnVlKTtcbitcdFx0aWYgKGxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKilyaHAsIFx1MDAyNnNkcC1cdTAwM2VkZWZlcl9jYnMpKSB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBDaGFpbiB0aGlzIHNyY3VfZGF0YSBmb3IgdGhlIGRyYWluLiAgLVx1MDAzZXNzcCBtdXN0IGJlXG4rXHRcdFx0ICogcHVibGlzaGVkIGhlcmU6IGRlZmVycmFsIHNraXBzIGNoZWNrX2luaXRfc3JjdV9zdHJ1Y3QoKSxcbitcdFx0XHQgKiBzbyBvbiBhIG5ldmVyLWluaXRpYWxpemVkIHN0YXRpYyBzcmN1X3N0cnVjdCB0aGVcbitcdFx0XHQgKiBzdGF0aWNhbGx5IHplcm9lZCAtXHUwMDNlc2RhIHN0aWxsIGhhcyBhIE5VTEwgLVx1MDAzZXNzcC5cbitcdFx0XHQgKi9cbitcdFx0XHRzZHAtXHUwMDNlc3NwID0gc3NwO1xuK1x0XHRcdGlmIChsbGlzdF9hZGQoXHUwMDI2c2RwLVx1MDAzZWRlZmVyX2xpbmssIFx1MDAyNnNuZHAtXHUwMDNlbGlzdCkpXG4rXHRcdFx0XHRpcnFfd29ya19xdWV1ZShcdTAwMjZzbmRwLVx1MDAzZWl3KTtcbitcdFx0fVxuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHQvKiBBbiBOTUkgcmVhY2hpbmcgaGVyZSBlbnRlcmVkIHdpdGggaXJxcyBlbmFibGVkLCBzbyB0aGUgZW5xdWV1ZSBjYW4gcmFjZS4gKi9cbitcdFdBUk5fT05fT05DRShJU19FTkFCTEVEKENPTkZJR19QUk9WRV9SQ1UpIFx1MDAyNlx1MDAyNiBpbl9ubWkoKSk7XG4rXG4rXHRzcmN1X2RvX2VucXVldWUoc3NwLCByaHAsIGZ1bmMsIGRvX25vcm0pO1xuK31cbitcbisvKlxuKyAqIFJlLWlzc3VlIGRlZmVycmVkIGNhbGxiYWNrcyBzdHJhaWdodCB0byBzcmN1X2RvX2VucXVldWUoKSBzbyB0aGV5IGNhbm5vdCBkZWZlclxuKyAqIGFnYWluLiAgLVx1MDAzZWxvY2sgc2VyaWFsaXplcyB0aGUgZHJhaW5lcnM6IHRoZSBpcnFfd29yaywgc3JjdV9kZWZlcl9mbHVzaCgpIGFuZFxuKyAqIHNyY3Vfb2ZmbGluZV9kcmFpbigpLlxuKyAqL1xuK3N0YXRpYyB2b2lkIF9fc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3Qgc3JjdV9kZWZlciAqc25kcCwgYm9vbCBndWFyZClcbit7XG4rXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqc25vZGUsICpzbmV4dDtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2c25kcC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRpZiAoZ3VhcmQpXG4rXHRcdFdSSVRFX09OQ0Uoc25kcC1cdTAwM2VkcmFpbmluZywgdHJ1ZSk7XG4rXHRsbGlzdF9mb3JfZWFjaF9zYWZlKHNub2RlLCBzbmV4dCwgbGxpc3RfZGVsX2FsbChcdTAwMjZzbmRwLVx1MDAzZWxpc3QpKSB7XG4rXHRcdHN0cnVjdCBzcmN1X2RhdGEgKnNkcCA9IGNvbnRhaW5lcl9vZihzbm9kZSwgc3RydWN0IHNyY3VfZGF0YSwgZGVmZXJfbGluayk7XG4rXHRcdHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwID0gc2RwLVx1MDAzZXNzcDtcbitcdFx0c3RydWN0IGxsaXN0X25vZGUgKmNub2RlLCAqY25leHQ7XG4rXHRcdGJvb2wgZG9fbm9ybTtcbitcbitcdFx0Y25vZGUgPSBsbGlzdF9kZWxfYWxsKFx1MDAyNnNkcC1cdTAwM2VkZWZlcl9jYnMpO1xuK1x0XHRkb19ub3JtID0gIVJFQURfT05DRShzZHAtXHUwMDNlZGVmZXJfZXhwKTtcbitcdFx0aWYgKCFkb19ub3JtKVxuK1x0XHRcdFdSSVRFX09OQ0Uoc2RwLVx1MDAzZWRlZmVyX2V4cCwgZmFsc2UpO1xuK1x0XHRsbGlzdF9mb3JfZWFjaF9zYWZlKGNub2RlLCBjbmV4dCwgY25vZGUpIHtcbitcdFx0XHRzdHJ1Y3QgcmN1X2hlYWQgKnJocCA9IChzdHJ1Y3QgcmN1X2hlYWQgKiljbm9kZTtcbitcbitcdFx0XHRyaHAtXHUwMDNlbmV4dCA9IE5VTEw7XG4rXHRcdFx0c3JjdV9kb19lbnF1ZXVlKHNzcCwgcmhwLCByaHAtXHUwMDNlZnVuYywgZG9fbm9ybSk7XG4rXHRcdH1cbitcdH1cbitcdGlmIChndWFyZClcbitcdFx0V1JJVEVfT05DRShzbmRwLVx1MDAzZWRyYWluaW5nLCBmYWxzZSk7XG4rXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZzbmRwLVx1MDAzZWxvY2ssIGZsYWdzKTtcbit9XG4rXG4rLypcbisgKiBPbmx5IHRoZSBpcnFfd29yayBkcmFpbiBjYW4gYmUgcmUtZmVkIGJ5IGl0cyBvd24gcmUtaXNzdWUsIHNvIG9ubHkgaXQgc2V0c1xuKyAqIC1cdTAwM2VkcmFpbmluZy4gIEEgZGlyZWN0IGRyYWluIHJlLWlzc3VlcyBvbnRvIHRoaXMgQ1BVLCBhbmQgYW55dGhpbmcgc3RhZ2VkXG4rICogZHVyaW5nIGl0IGlzIHBpY2tlZCB1cCBieSB0aGF0IENQVSdzIG93biBpcnFfd29yay5cbisgKi9cbitzdGF0aWMgdm9pZCBzcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpXG4re1xuK1x0X19zcmN1X2RlZmVyX2RyYWluKGNvbnRhaW5lcl9vZihpdywgc3RydWN0IHNyY3VfZGVmZXIsIGl3KSwgdHJ1ZSk7XG4rfVxuK1xuKy8qXG4rICogRHJhaW4gQGNwdSdzIGRlZmVycmVkIGNhbGxfc3JjdSgpIGNhbGxiYWNrcyBmcm9tIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoKVxuKyAqIG9uY2UgQGNwdSBpcyBkZWFkLiAgT25lIHBhc3MgY292ZXJzIGV2ZXJ5IHNyY3Vfc3RydWN0LCBhbmQgdGhlIHJlLWlzc3VlIGxhbmRzXG4rICogb24gdGhlIGN1cnJlbnQgQ1BVLlxuKyAqL1xuK3ZvaWQgc3JjdV9vZmZsaW5lX2RyYWluKGludCBjcHUpXG4re1xuK1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxuK1x0XHRyZXR1cm47XG4rXHRfX3NyY3VfZGVmZXJfZHJhaW4oXHUwMDI2cGVyX2NwdShzcmN1X2RlZmVyLCBjcHUpLCBmYWxzZSk7XG4rfVxuK1xuIC8qKlxuICAqIGNhbGxfc3JjdSgpIC0gUXVldWUgYSBjYWxsYmFjayBmb3IgaW52b2NhdGlvbiBhZnRlciBhbiBTUkNVIGdyYWNlIHBlcmlvZFxuICAqIEBzc3A6IHNyY3Vfc3RydWN0IGluIHF1ZXVlIHRoZSBjYWxsYmFja1xuQEAgLTE2NzcsOSArMTgzMiwxNyBAQCB2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcbiB7XG4gXHRpbnQgY3B1O1xuIFx0aW50IGlkeDtcbi1cdHVuc2lnbmVkIGxvbmcgcyA9IHJjdV9zZXFfc25hcChcdTAwMjZzc3AtXHUwMDNlc3JjdV9zdXAtXHUwMDNlc3JjdV9iYXJyaWVyX3NlcSk7XG4rXHR1bnNpZ25lZCBsb25nIHM7XG4gXG4gXHRjaGVja19pbml0X3NyY3Vfc3RydWN0KHNzcCk7XG4rXG4rXHQvKlxuK1x0ICogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcyBiZWZvcmUgc25hcHNob3R0aW5nIHRoZSBzZXF1ZW5jZS4gIFRoZVxuK1x0ICogc2hhcmVkIGlycV93b3JrIG1heSBhbHNvIGRyYWluIG90aGVyIHNyY3Vfc3RydWN0cycsIHdoaWNoIGlzIGhhcm1sZXNzLlxuK1x0ICovXG4rXHRzcmN1X2RlZmVyX2ZsdXNoKCk7XG4rXG4rXHRzID0gcmN1X3NlcV9zbmFwKFx1MDAyNnNzcC1cdTAwM2VzcmN1X3N1cC1cdTAwM2VzcmN1X2JhcnJpZXJfc2VxKTtcbiBcdG11dGV4X2xvY2soXHUwMDI2c3NwLVx1MDAzZXNyY3Vfc3VwLVx1MDAzZXNyY3VfYmFycmllcl9tdXRleCk7XG4gXHRpZiAocmN1X3NlcV9kb25lKFx1MDAyNnNzcC1cdTAwM2VzcmN1X3N1cC1cdTAwM2VzcmN1X2JhcnJpZXJfc2VxLCBzKSkge1xuIFx0XHRzbXBfbWIoKTsgLyogRm9yY2Ugb3JkZXJpbmcgZm9sbG93aW5nIHJldHVybi4gKi9cbmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3RpbnkuYyBiL2tlcm5lbC9yY3UvdGlueS5jXG5pbmRleCBkY2NjY2Q2YmU5NDExLi5iYWZmZTY2MDA0M2Y1IDEwMDY0NFxuLS0tIGEva2VybmVsL3JjdS90aW55LmNcbisrKyBiL2tlcm5lbC9yY3UvdGlueS5jXG5AQCAtMTEsNiArMTEsOCBAQFxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBsZXRpb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaXJxX3dvcmsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xsaXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ub3RpZmllci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGVfd2FpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbkBAIC00Miw4ICs0NCw5OSBAQCBzdGF0aWMgc3RydWN0IHJjdV9jdHJsYmxrIHJjdV9jdHJsYmxrID0ge1xuIFx0LmdwX3NlcVx0XHQ9IDAgLSAzMDBVTCxcbiB9O1xuIFxuKy8qXG4rICogVGhlIGNhbGxiYWNrIGxpc3QgaXMgb25seSBhY2Nlc3NlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQsIHNvIGEgY2FsbF9yY3UoKVxuKyAqIHRoYXQgYXJyaXZlcyB3aXRoIGludGVycnVwdHMgb2ZmIHN0YWdlcyB0aGUgY2FsbGJhY2sgb24gYSBsb2NrbGVzcyBsaXN0IHRoYXRcbisgKiBhbiBpcnFfd29yayByZS1pc3N1ZXMgbGF0ZXIuICBPbmUgZ2xvYmFsIGxpc3QgYW5kIGlycV93b3JrIHN1ZmZpY2UsIGFzIFRpbnlcbisgKiBSQ1UgaXMgdW5pcHJvY2Vzc29yLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KTtcbitzdGF0aWMgTExJU1RfSEVBRChyY3VfZGVmZXJfbGlzdCk7XG4rc3RhdGljIHN0cnVjdCBpcnFfd29yayByY3VfZGVmZXJfaXcgPSBJUlFfV09SS19JTklUX0hBUkQocmN1X2RlZmVyX2RyYWluKTtcbitzdGF0aWMgYm9vbCByY3VfZGVmZXJfZHJhaW5pbmc7XG4rXG4rLypcbisgKiBFbnF1ZXVlIEBoZWFkIG9uIHRoZSBjYWxsYmFjayBsaXN0LiAgQWxzbyBjYWxsZWQgYnkgcmN1X2RlZmVyX2RyYWluKCkgdG9cbisgKiByZS1pc3N1ZSBhIGRlZmVycmVkIGNhbGxiYWNrLCBzbyBpdCBtdXN0IG5vdCByZS1jaGVjayB0aGUgZGVmZXJyYWwgY29uZGl0aW9uLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHJjdV9kb19lbnF1ZXVlKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYylcbit7XG4rXHRzdGF0aWMgYXRvbWljX3QgZG91YmxlZnJlZXM7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1xuK1x0aWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKGhlYWQpKSB7XG4rXHRcdGlmIChhdG9taWNfaW5jX3JldHVybihcdTAwMjZkb3VibGVmcmVlcykgXHUwMDNjIDQpIHtcbitcdFx0XHRwcl9lcnIoXCIlcygpOiBEb3VibGUtZnJlZWQgQ0IgJXAtXHUwMDNlJXBTKCkhISEgIFwiLCBfX2Z1bmNfXywgaGVhZCwgaGVhZC1cdTAwM2VmdW5jKTtcbitcdFx0XHRtZW1fZHVtcF9vYmooaGVhZCk7XG4rXHRcdH1cbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aGVhZC1cdTAwM2VmdW5jID0gZnVuYztcbitcdGhlYWQtXHUwMDNlbmV4dCA9IE5VTEw7XG4rXG4rXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4rXHQqcmN1X2N0cmxibGsuY3VydGFpbCA9IGhlYWQ7XG4rXHRyY3VfY3RybGJsay5jdXJ0YWlsID0gXHUwMDI2aGVhZC1cdTAwM2VuZXh0O1xuK1x0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuK1xuK1x0aWYgKHVubGlrZWx5KGlzX2lkbGVfdGFzayhjdXJyZW50KSkpIHtcbitcdFx0LyogZm9yY2Ugc2NoZWR1bGluZyBmb3IgcmN1X3FzKCkgKi9cbitcdFx0cmVzY2hlZF9jcHUoMCk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIF9fcmN1X2RlZmVyX2RyYWluKGJvb2wgZ3VhcmQpXG4re1xuK1x0c3RydWN0IGxsaXN0X25vZGUgKm5vZGUsICpuZXh0O1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcbitcdC8qIENhbGxiYWNrcyBhcmUgdW5vcmRlcmVkLCBzbyBkcmFpbiBpbiBsbGlzdCBvcmRlciB3aXRob3V0IHJldmVyc2luZy4gKi9cbitcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcbitcdGlmIChndWFyZClcbitcdFx0V1JJVEVfT05DRShyY3VfZGVmZXJfZHJhaW5pbmcsIHRydWUpO1xuK1x0bGxpc3RfZm9yX2VhY2hfc2FmZShub2RlLCBuZXh0LCBsbGlzdF9kZWxfYWxsKFx1MDAyNnJjdV9kZWZlcl9saXN0KSkge1xuK1x0XHRzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQgPSAoc3RydWN0IHJjdV9oZWFkICopbm9kZTtcbitcbitcdFx0aGVhZC1cdTAwM2VuZXh0ID0gTlVMTDtcbitcdFx0cmN1X2RvX2VucXVldWUoaGVhZCwgaGVhZC1cdTAwM2VmdW5jKTtcbitcdH1cbitcdGlmIChndWFyZClcbitcdFx0V1JJVEVfT05DRShyY3VfZGVmZXJfZHJhaW5pbmcsIGZhbHNlKTtcbitcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbit9XG4rXG4rLyogT25seSB0aGUgaXJxX3dvcmsgZHJhaW4gY2FuIGJlIHJlLWZlZCBieSBpdHMgb3duIHJlLWlzc3VlOyBzZWUgVHJlZSBSQ1UuICovXG4rc3RhdGljIHZvaWQgcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpXG4re1xuK1x0X19yY3VfZGVmZXJfZHJhaW4odHJ1ZSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGNhbGxfcmN1X2RlZmVyKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYylcbit7XG4rXHQvKiBBIHJlLWVudHJhbnQgY2FsbF9yY3UoKSBkdXJpbmcgdGhlIGRyYWluIHdvdWxkIGxpdmVsb2NrIGl0OyBkcm9wIGl0LiAqL1xuK1x0aWYgKFJFQURfT05DRShyY3VfZGVmZXJfZHJhaW5pbmcpIFx1MDAyNlx1MDAyNiAhaW5fbm1pKCkpIHtcbitcdFx0V0FSTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSksXG4rXHRcdFx0ICBcImNhbGxfcmN1KCkgcmUtZW50ZXJlZCBkdXJpbmcgY2FsbGJhY2sgZHJhaW47IGxlYWtpbmcgY2FsbGJhY2tcXG5cIik7XG4rXHRcdHJldHVybjtcbitcdH1cbitcdGhlYWQtXHUwMDNlZnVuYyA9IGZ1bmM7XG4rXHRpZiAobGxpc3RfYWRkKChzdHJ1Y3QgbGxpc3Rfbm9kZSAqKWhlYWQsIFx1MDAyNnJjdV9kZWZlcl9saXN0KSlcbitcdFx0aXJxX3dvcmtfcXVldWUoXHUwMDI2cmN1X2RlZmVyX2l3KTtcbit9XG4rXG4rLyogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcyBzbyBhIGZvbGxvd2luZyByY3VfYmFycmllcigpIHdhaXRzIGZvciB0aGVtLiAqL1xuK3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9mbHVzaCh2b2lkKVxuK3tcbitcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUkNVX0RFRkVSKSlcbitcdFx0cmV0dXJuO1xuK1x0X19yY3VfZGVmZXJfZHJhaW4oZmFsc2UpO1xuK31cbitcbiB2b2lkIHJjdV9iYXJyaWVyKHZvaWQpXG4ge1xuK1x0LyogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcyBmaXJzdC4gKi9cbitcdHJjdV9kZWZlcl9mbHVzaCgpO1xuIFx0d2FpdF9yY3VfZ3AoY2FsbF9yY3VfaHVycnkpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKHJjdV9iYXJyaWVyKTtcbkBAIC0xNTcsMjkgKzI1MCwxNSBAQCBFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9yY3UpO1xuICAqL1xuIHZvaWQgY2FsbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jKVxuIHtcbi1cdHN0YXRpYyBhdG9taWNfdCBkb3VibGVmcmVlcztcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tXG4tXHRpZiAoZGVidWdfcmN1X2hlYWRfcXVldWUoaGVhZCkpIHtcbi1cdFx0aWYgKGF0b21pY19pbmNfcmV0dXJuKFx1MDAyNmRvdWJsZWZyZWVzKSBcdTAwM2MgNCkge1xuLVx0XHRcdHByX2VycihcIiVzKCk6IERvdWJsZS1mcmVlZCBDQiAlcC1cdTAwM2UlcFMoKSEhISAgXCIsIF9fZnVuY19fLCBoZWFkLCBoZWFkLVx1MDAzZWZ1bmMpO1xuLVx0XHRcdG1lbV9kdW1wX29iaihoZWFkKTtcbi1cdFx0fVxuK1x0aWYgKHNob3VsZF9yY3VfZGVmZXIoKSkge1xuK1x0XHRjYWxsX3JjdV9kZWZlcihoZWFkLCBmdW5jKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0aGVhZC1cdTAwM2VmdW5jID0gZnVuYztcbi1cdGhlYWQtXHUwMDNlbmV4dCA9IE5VTEw7XG4tXG4tXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4tXHQqcmN1X2N0cmxibGsuY3VydGFpbCA9IGhlYWQ7XG4tXHRyY3VfY3RybGJsay5jdXJ0YWlsID0gXHUwMDI2aGVhZC1cdTAwM2VuZXh0O1xuLVx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuK1x0LyogQW4gTk1JIHJlYWNoaW5nIGhlcmUgZW50ZXJlZCB3aXRoIGlycXMgZW5hYmxlZCwgc28gdGhlIGVucXVldWUgY2FuIHJhY2UuICovXG4rXHRXQVJOX09OX09OQ0UoSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfUkNVKSBcdTAwMjZcdTAwMjYgaW5fbm1pKCkpO1xuIFxuLVx0aWYgKHVubGlrZWx5KGlzX2lkbGVfdGFzayhjdXJyZW50KSkpIHtcbi1cdFx0LyogZm9yY2Ugc2NoZWR1bGluZyBmb3IgcmN1X3FzKCkgKi9cbi1cdFx0cmVzY2hlZF9jcHUoMCk7XG4tXHR9XG4rXHRyY3VfZG9fZW5xdWV1ZShoZWFkLCBmdW5jKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoY2FsbF9yY3UpO1xuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdHJlZS5jIGIva2VybmVsL3JjdS90cmVlLmNcbmluZGV4IDk2ODQ4ZmMxZjAyYjguLmViNmIxMWNmYWQ0NmYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvcmN1L3RyZWUuY1xuKysrIGIva2VybmVsL3JjdS90cmVlLmNcbkBAIC0yNCw2ICsyNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc21wLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VwZGF0ZV93YWl0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbnRlcnJ1cHQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xsaXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvZGVidWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25taS5oXHUwMDNlXG5AQCAtMzE0OCwyMSArMzE0OSwyNSBAQCBzdGF0aWMgdm9pZCBjaGVja19jYl9vdmxkKHN0cnVjdCByY3VfZGF0YSAqcmRwKVxuIFx0cmF3X3NwaW5fdW5sb2NrX3JjdV9ub2RlKHJucCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkXG4tX19jYWxsX3JjdV9jb21tb24oc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGxhenlfaW4pXG4rLypcbisgKiBUaGUgY2FsbGJhY2sgbGlzdCBpcyBvbmx5IGFjY2Vzc2VkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCwgc28gYSBjYWxsX3JjdSgpXG4rICogdGhhdCBhcnJpdmVzIHdpdGggaW50ZXJydXB0cyBvZmYgKHNlZSBzaG91bGRfcmN1X2RlZmVyKCkpIHN0YWdlcyB0aGUgY2FsbGJhY2tcbisgKiBvbiBhIHBlci1DUFUgbGxpc3QgdGhhdCBhbiBpcnFfd29yayByZS1pc3N1ZXMgb25jZSBpbnRlcnJ1cHRzIGFyZSBvbi5cbisgKi9cbitzdGF0aWMgdm9pZCByY3VfZGVmZXJfZHJhaW4oc3RydWN0IGlycV93b3JrICppdyk7XG4rXG4rLypcbisgKiBFbnF1ZXVlIEBoZWFkIG9uIHRoaXMgQ1BVJ3MgcmN1X3NlZ2NibGlzdC4gIEFsc28gY2FsbGVkIGJ5IHJjdV9kZWZlcl9kcmFpbigpXG4rICogdG8gcmUtaXNzdWUgYSBkZWZlcnJlZCBjYWxsYmFjaywgc28gaXQgbXVzdCBub3QgcmUtY2hlY2sgdGhlIGRlZmVycmFsXG4rICogY29uZGl0aW9uLiAgRWl0aGVyIGNhbGxlciBtYXkgaGF2ZSBpbnRlcnJ1cHRzIGFscmVhZHkgZGlzYWJsZWQuXG4rICovXG4rc3RhdGljIHZvaWQgcmN1X2RvX2VucXVldWUoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jLCBib29sIGxhenlfaW4pXG4ge1xuIFx0c3RhdGljIGF0b21pY190IGRvdWJsZWZyZWVzO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGJvb2wgbGF6eTtcbiBcdHN0cnVjdCByY3VfZGF0YSAqcmRwO1xuIFxuLVx0LyogTWlzYWxpZ25lZCByY3VfaGVhZCEgKi9cbi1cdFdBUk5fT05fT05DRSgodW5zaWduZWQgbG9uZyloZWFkIFx1MDAyNiAoc2l6ZW9mKHZvaWQgKikgLSAxKSk7XG4tXG4tXHQvKiBBdm9pZCBOVUxMIGRlcmVmZXJlbmNlIGlmIGNhbGxiYWNrIGlzIE5VTEwuICovXG4tXHRpZiAoV0FSTl9PTl9PTkNFKCFmdW5jKSlcbi1cdFx0cmV0dXJuO1xuLVxuIFx0aWYgKGRlYnVnX3JjdV9oZWFkX3F1ZXVlKGhlYWQpKSB7XG4gXHRcdC8qXG4gXHRcdCAqIFByb2JhYmxlIGRvdWJsZSBjYWxsX3JjdSgpLCBzbyBsZWFrIHRoZSBjYWxsYmFjay5cbkBAIC0zMjA2LDYgKzMyMTEsMTA0IEBAIF9fY2FsbF9yY3VfY29tbW9uKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBsYXp5X2luKVxuIFx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuIH1cbiBcbisvKlxuKyAqIFJlLWlzc3VlIGRlZmVycmVkIGNhbGxiYWNrcyBzdHJhaWdodCB0byB0aGUgZW5xdWV1ZSBzbyB0aGV5IGNhbm5vdCBkZWZlclxuKyAqIGFnYWluLiAgLVx1MDAzZWRlZmVyX2xvY2sgc2VyaWFsaXplcyB0aGUgZHJhaW5lcnM6IHRoaXMgQ1BVJ3MgaXJxX3dvcmssXG4rICogcmN1X2RlZmVyX2ZsdXNoKCkgYW5kIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoKS5cbisgKi9cbitzdGF0aWMgdm9pZCBfX3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgcmN1X2RhdGEgKnJkcCwgYm9vbCBndWFyZClcbit7XG4rXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSwgKm5leHQ7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1xuK1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cmRwLVx1MDAzZWRlZmVyX2xvY2ssIGZsYWdzKTtcbitcdGlmIChndWFyZClcbitcdFx0V1JJVEVfT05DRShyZHAtXHUwMDNlZGVmZXJfZHJhaW5pbmcsIHRydWUpO1xuK1x0bGxpc3RfZm9yX2VhY2hfc2FmZShub2RlLCBuZXh0LCBsbGlzdF9kZWxfYWxsKFx1MDAyNnJkcC1cdTAwM2VkZWZlcl9oZWFkKSkge1xuK1x0XHRzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQgPSAoc3RydWN0IHJjdV9oZWFkICopbm9kZTtcbitcbitcdFx0aGVhZC1cdTAwM2VuZXh0ID0gTlVMTDtcbitcdFx0cmN1X2RvX2VucXVldWUoaGVhZCwgaGVhZC1cdTAwM2VmdW5jLCBmYWxzZSk7XG4rXHR9XG4rXHRpZiAoZ3VhcmQpXG4rXHRcdFdSSVRFX09OQ0UocmRwLVx1MDAzZWRlZmVyX2RyYWluaW5nLCBmYWxzZSk7XG4rXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZyZHAtXHUwMDNlZGVmZXJfbG9jaywgZmxhZ3MpO1xuK31cbitcbisvKlxuKyAqIE9ubHkgdGhlIGlycV93b3JrIGRyYWluIGNhbiBiZSByZS1mZWQgYnkgaXRzIG93biByZS1pc3N1ZSwgc28gb25seSBpdCBzZXRzXG4rICogLVx1MDAzZWRlZmVyX2RyYWluaW5nLiAgQSBkaXJlY3QgZHJhaW4gcmUtaXNzdWVzIG9udG8gdGhpcyBDUFUsIGFuZCBhbnl0aGluZ1xuKyAqIHN0YWdlZCBkdXJpbmcgaXQgaXMgcGlja2VkIHVwIGJ5IHRoYXQgQ1BVJ3Mgb3duIGlycV93b3JrLlxuKyAqL1xuK3N0YXRpYyB2b2lkIHJjdV9kZWZlcl9kcmFpbihzdHJ1Y3QgaXJxX3dvcmsgKml3KVxuK3tcbitcdF9fcmN1X2RlZmVyX2RyYWluKGNvbnRhaW5lcl9vZihpdywgc3RydWN0IHJjdV9kYXRhLCBkZWZlcl93b3JrKSwgdHJ1ZSk7XG4rfVxuK1xuKy8qIFN0YWdlIEBoZWFkIGZvciB0aGlzIENQVSdzIGlycV93b3JrIHdoZW4gY2FsbF9yY3UoKSBjYW5ub3QgZW5xdWV1ZSBub3cuICovXG4rc3RhdGljIHZvaWQgY2FsbF9yY3VfZGVmZXIoc3RydWN0IHJjdV9oZWFkICpoZWFkLCByY3VfY2FsbGJhY2tfdCBmdW5jKVxuK3tcbitcdHN0cnVjdCByY3VfZGF0YSAqcmRwID0gdGhpc19jcHVfcHRyKFx1MDAyNnJjdV9kYXRhKTtcbitcbitcdC8qXG4rXHQgKiBJbnN0cnVtZW50YXRpb24gb24gdGhlIGVucXVldWUgcGF0aCBjYW4gcmUtZW50ZXIgaGVyZSBmcm9tIGluc2lkZVxuK1x0ICogcmN1X2RlZmVyX2RyYWluKCkuICBSZS1xdWV1aW5nIHdvdWxkIGxpdmVsb2NrIHRoZSBkcmFpbiwgc28gZHJvcCB0aGVcbitcdCAqIGNhbGxiYWNrOyBhbiBOTUkgaXMgb25lLXNob3QgYW5kIGNhbm5vdCBsb29wLCBzbyBsZXQgaXQgdGhyb3VnaC5cbitcdCAqL1xuK1x0aWYgKFJFQURfT05DRShyZHAtXHUwMDNlZGVmZXJfZHJhaW5pbmcpIFx1MDAyNlx1MDAyNiAhaW5fbm1pKCkpIHtcbitcdFx0V0FSTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSksXG4rXHRcdFx0ICBcImNhbGxfcmN1KCkgcmUtZW50ZXJlZCBkdXJpbmcgY2FsbGJhY2sgZHJhaW47IGxlYWtpbmcgY2FsbGJhY2tcXG5cIik7XG4rXHRcdHJldHVybjtcbitcdH1cbitcdGhlYWQtXHUwMDNlZnVuYyA9IGZ1bmM7XG4rXHRpZiAobGxpc3RfYWRkKChzdHJ1Y3QgbGxpc3Rfbm9kZSAqKWhlYWQsIFx1MDAyNnJkcC1cdTAwM2VkZWZlcl9oZWFkKSlcbitcdFx0aXJxX3dvcmtfcXVldWUoXHUwMDI2cmRwLVx1MDAzZWRlZmVyX3dvcmspO1xuK31cbitcbisvKlxuKyAqIFJlZ2lzdGVyIHBlbmRpbmcgZGVmZXJyZWQgY2FsbGJhY2tzIGludG8gdGhlIGNhbGxiYWNrIGxpc3RzIHNvIGEgZm9sbG93aW5nXG4rICogcmN1X2JhcnJpZXIoKSB3YWl0cyBmb3IgdGhlbS4gIFRoaXMgcnVucyBiZWZvcmUgcmN1X2JhcnJpZXIoKSBzY2FucyB0aGVcbisgKiBsaXN0cy5cbisgKi9cbitzdGF0aWMgdm9pZCByY3VfZGVmZXJfZmx1c2godm9pZClcbit7XG4rXHRpbnQgY3B1O1xuK1xuK1x0aWYgKCFJU19FTkFCTEVEKENPTkZJR19SQ1VfREVGRVIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4rXHRcdHN0cnVjdCByY3VfZGF0YSAqcmRwID0gcGVyX2NwdV9wdHIoXHUwMDI2cmN1X2RhdGEsIGNwdSk7XG4rXG4rXHRcdGlmICghbGxpc3RfZW1wdHkoXHUwMDI2cmRwLVx1MDAzZWRlZmVyX2hlYWQpKVxuK1x0XHRcdF9fcmN1X2RlZmVyX2RyYWluKHJkcCwgZmFsc2UpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZFxuK19fY2FsbF9yY3VfY29tbW9uKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYywgYm9vbCBsYXp5X2luKVxuK3tcbitcdC8qIE1pc2FsaWduZWQgcmN1X2hlYWQhICovXG4rXHRXQVJOX09OX09OQ0UoKHVuc2lnbmVkIGxvbmcpaGVhZCBcdTAwMjYgKHNpemVvZih2b2lkICopIC0gMSkpO1xuK1xuK1x0LyogQXZvaWQgTlVMTCBkZXJlZmVyZW5jZSBpZiBjYWxsYmFjayBpcyBOVUxMLiAqL1xuK1x0aWYgKFdBUk5fT05fT05DRSghZnVuYykpXG4rXHRcdHJldHVybjtcbitcbitcdGlmIChzaG91bGRfcmN1X2RlZmVyKCkpIHtcbitcdFx0Y2FsbF9yY3VfZGVmZXIoaGVhZCwgZnVuYyk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdC8qIEFuIE5NSSByZWFjaGluZyBoZXJlIGVudGVyZWQgd2l0aCBpcnFzIGVuYWJsZWQsIHNvIHRoZSBlbnF1ZXVlIGNhbiByYWNlLiAqL1xuK1x0V0FSTl9PTl9PTkNFKElTX0VOQUJMRUQoQ09ORklHX1BST1ZFX1JDVSkgXHUwMDI2XHUwMDI2IGluX25taSgpKTtcbitcbitcdHJjdV9kb19lbnF1ZXVlKGhlYWQsIGZ1bmMsIGxhenlfaW4pO1xuK31cbitcbiAjaWZkZWYgQ09ORklHX1JDVV9MQVpZXG4gc3RhdGljIGJvb2wgZW5hYmxlX3JjdV9sYXp5IF9fcmVhZF9tb3N0bHkgPSAhSVNfRU5BQkxFRChDT05GSUdfUkNVX0xBWllfREVGQVVMVF9PRkYpO1xuIG1vZHVsZV9wYXJhbShlbmFibGVfcmN1X2xhenksIGJvb2wsIDA0NDQpO1xuQEAgLTM4OTYsOCArMzk5OSwxMiBAQCB2b2lkIHJjdV9iYXJyaWVyKHZvaWQpXG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0dW5zaWduZWQgbG9uZyBnc2VxO1xuIFx0c3RydWN0IHJjdV9kYXRhICpyZHA7XG4tXHR1bnNpZ25lZCBsb25nIHMgPSByY3Vfc2VxX3NuYXAoXHUwMDI2cmN1X3N0YXRlLmJhcnJpZXJfc2VxdWVuY2UpO1xuK1x0dW5zaWduZWQgbG9uZyBzO1xuIFxuK1x0LyogUmVnaXN0ZXIgYW55IGRlZmVycmVkIGNhbGxiYWNrcyBiZWZvcmUgc25hcHNob3R0aW5nIHRoZSBzZXF1ZW5jZS4gKi9cbitcdHJjdV9kZWZlcl9mbHVzaCgpO1xuK1xuK1x0cyA9IHJjdV9zZXFfc25hcChcdTAwMjZyY3Vfc3RhdGUuYmFycmllcl9zZXF1ZW5jZSk7XG4gXHRyY3VfYmFycmllcl90cmFjZShUUFMoXCJCZWdpblwiKSwgLTEsIHMpO1xuIFxuIFx0LyogVGFrZSBtdXRleCB0byBzZXJpYWxpemUgY29uY3VycmVudCByY3VfYmFycmllcigpIHJlcXVlc3RzLiAqL1xuQEAgLTQyMzEsNiArNDMzOCwxMCBAQCByY3VfYm9vdF9pbml0X3BlcmNwdV9kYXRhKGludCBjcHUpXG4gXHRyZHAtXHUwMDNlcmN1X29ubF9ncF9zdGF0ZSA9IFJDVV9HUF9DTEVBTkVEO1xuIFx0cmRwLVx1MDAzZWxhc3Rfc2NoZWRfY2xvY2sgPSBqaWZmaWVzO1xuIFx0cmRwLVx1MDAzZWNwdSA9IGNwdTtcbitcdGluaXRfbGxpc3RfaGVhZChcdTAwMjZyZHAtXHUwMDNlZGVmZXJfaGVhZCk7XG4rXHRyYXdfc3Bpbl9sb2NrX2luaXQoXHUwMDI2cmRwLVx1MDAzZWRlZmVyX2xvY2spO1xuK1x0LyogSGFyZCBpcnFfd29yayBzbyB0aGUgcmUtaXNzdWUgcnVucyBwcm9tcHRseS4gKi9cbitcdHJkcC1cdTAwM2VkZWZlcl93b3JrID0gSVJRX1dPUktfSU5JVF9IQVJEKHJjdV9kZWZlcl9kcmFpbik7XG4gXHRyY3VfYm9vdF9pbml0X25vY2JfcGVyY3B1X2RhdGEocmRwKTtcbiB9XG4gXG5AQCAtNDUyOCw2ICs0NjM5LDE2IEBAIHZvaWQgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrcyhpbnQgY3B1KVxuIFx0c3RydWN0IHJjdV9kYXRhICpyZHAgPSBwZXJfY3B1X3B0cihcdTAwMjZyY3VfZGF0YSwgY3B1KTtcbiBcdGJvb2wgbmVlZHdha2U7XG4gXG4rXHQvKlxuK1x0ICogQ2FsbGJhY2tzIHRoZSBvdXRnb2luZyBDUFUgZGVmZXJyZWQgbGF0ZSBpbiB0aGUgb2ZmbGluZSBwYXRoIChwYXN0IHRoZVxuK1x0ICogcG9pbnQgaXRzIGlycV93b3JrIGNhbiBydW4pIHNpdCBvbiAtXHUwMDNlZGVmZXJfaGVhZCwgd2hpY2ggdGhlIC1cdTAwM2VjYmxpc3RcbitcdCAqIG1pZ3JhdGlvbiBiZWxvdyBkb2VzIG5vdCBjb3Zlci4gIERyYWluIHRoZW0gaGVyZSwgYmVmb3JlIHRoZSBlYXJseVxuK1x0ICogcmV0dXJuczsgdGhlIHJlLWlzc3VlIGxhbmRzIG9uIHRoaXMgQ1BVLlxuK1x0ICovXG4rXHRfX3JjdV9kZWZlcl9kcmFpbihyZHAsIGZhbHNlKTtcbitcdC8qIExpa2V3aXNlIGZvciB0aGUgb3V0Z29pbmcgQ1BVJ3MgZGVmZXJyZWQgY2FsbF9zcmN1KCkgY2FsbGJhY2tzLiAqL1xuK1x0c3JjdV9vZmZsaW5lX2RyYWluKGNwdSk7XG4rXG4gXHRpZiAocmN1X3JkcF9pc19vZmZsb2FkZWQocmRwKSlcbiBcdFx0cmV0dXJuO1xuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdHJlZS5oIGIva2VybmVsL3JjdS90cmVlLmhcbmluZGV4IGVlZGZhNDMwNTllODAuLmI3Y2FjN2ExM2I0ZjIgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvcmN1L3RyZWUuaFxuKysrIGIva2VybmVsL3JjdS90cmVlLmhcbkBAIC0yMjksNiArMjI5LDEyIEBAIHN0cnVjdCByY3VfZGF0YSB7XG4gXHRzdHJ1Y3QgcmN1X2hlYWQgYmFycmllcl9oZWFkO1xuIFx0aW50IGV4cF93YXRjaGluZ19zbmFwO1x0XHQvKiBEb3VibGUtY2hlY2sgbmVlZCBmb3IgSVBJLiAqL1xuIFxuK1x0LyogRGVmZXJyYWwgb2YgYW4gTk1JL3JlZW50cmFudCBjYWxsX3JjdSgpOyBzZWUgX19jYWxsX3JjdV9jb21tb24oKS4gKi9cbitcdHN0cnVjdCBsbGlzdF9oZWFkIGRlZmVyX2hlYWQ7XG4rXHRzdHJ1Y3QgaXJxX3dvcmsgZGVmZXJfd29yaztcbitcdHJhd19zcGlubG9ja190IGRlZmVyX2xvY2s7XG4rXHRib29sIGRlZmVyX2RyYWluaW5nO1xuK1xuIFx0LyogNSkgQ2FsbGJhY2sgb2ZmbG9hZGluZy4gKi9cbiAjaWZkZWYgQ09ORklHX1JDVV9OT0NCX0NQVVxuIFx0c3RydWN0IHN3YWl0X3F1ZXVlX2hlYWQgbm9jYl9jYl93cTsgLyogRm9yIG5vY2Iga3RocmVhZHMgdG8gc2xlZXAgb24uICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvcmN1X3JlZW50cnkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3JjdV9yZWVudHJ5LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5mYTgxM2QxZDQ5MmI2XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9yY3VfcmVlbnRyeS5jXG5AQCAtMCwwICsxLDk1IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKlxuKyAqIEV4ZXJjaXNlIHJlLWVudHJ5IGludG8gY2FsbF9zcmN1KCkgZnJvbSBCUEY7IHNlZSBwcm9ncy9yY3VfcmVlbnRyeS5jLlxuKyAqXG4rICogT24gYSBrZXJuZWwgd2l0aG91dCB0aGUgY2FsbF9zcmN1KCkgYW55LWNvbnRleHQgZml4IHRoZSBuZXN0ZWQgY2FsbFxuKyAqIHNlbGYtZGVhZGxvY2tzIG9uIHRoZSBzcmN1X2RhdGEgbG9jaywgc28gdGhpcyBoYW5ncyByYXRoZXIgdGhhbiBmYWlscy5cbisgKi9cbisjZGVmaW5lIF9HTlVfU09VUkNFXG4rI2luY2x1ZGUgXHUwMDNjc2NoZWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbisjaW5jbHVkZSBcInJjdV9yZWVudHJ5LnNrZWwuaFwiXG4rXG4rc3RhdGljIGludCBzeXNfcGlkZmRfb3BlbihwaWRfdCBwaWQsIHVuc2lnbmVkIGludCBmbGFncylcbit7XG4rXHRyZXR1cm4gc3lzY2FsbChfX05SX3BpZGZkX29wZW4sIHBpZCwgZmxhZ3MpO1xuK31cbitcbisvKiBUaW55IFJDVSBidWlsZHMgaGF2ZSBubyByY3Vfc2VnY2JsaXN0X2VucXVldWUoKSB0byBhdHRhY2ggdG8uICovXG4rc3RhdGljIGJvb2wgaGF2ZV9hdHRhY2hfdGFyZ2V0KHZvaWQpXG4re1xuK1x0Y2hhciBidWZbMjU2XTtcbitcdGJvb2wgZm91bmQgPSBmYWxzZTtcbitcdEZJTEUgKmY7XG4rXG4rXHRmID0gZm9wZW4oXCIvcHJvYy9rYWxsc3ltc1wiLCBcInJcIik7XG4rXHRpZiAoIWYpXG4rXHRcdHJldHVybiB0cnVlO1x0LyogY2Fubm90IHRlbGw7IGxldCB0aGUgYXR0YWNoIGRlY2lkZSAqL1xuK1x0d2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGYpKSB7XG4rXHRcdGlmIChzdHJzdHIoYnVmLCBcIiByY3Vfc2VnY2JsaXN0X2VucXVldWVcXG5cIikpIHtcbitcdFx0XHRmb3VuZCA9IHRydWU7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH1cbitcdGZjbG9zZShmKTtcbitcdHJldHVybiBmb3VuZDtcbit9XG4rXG4rdm9pZCB0ZXN0X3JjdV9yZWVudHJ5KHZvaWQpXG4re1xuK1x0c3RydWN0IHJjdV9yZWVudHJ5ICpza2VsO1xuK1x0aW50IGVyciwgcGlkZmQgPSAtMSwgbWFwX2ZkO1xuK1x0Y3B1X3NldF90IHNldCwgb2xkX3NldDtcbitcdGJvb2wgYWZmaW5pdHlfc2F2ZWQ7XG4rXHRfX3U2NCB2YWwgPSAxO1xuK1xuK1x0aWYgKCFoYXZlX2F0dGFjaF90YXJnZXQoKSkge1xuK1x0XHR0ZXN0X19za2lwKCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHNrZWwgPSByY3VfcmVlbnRyeV9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwic2tlbF9vcGVuX2FuZF9sb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRlcnIgPSByY3VfcmVlbnRyeV9fYXR0YWNoKHNrZWwpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInNrZWxfYXR0YWNoXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qIEtlZXAgdGhlIHJlLWVudHJ5IG9uIGEgc2luZ2xlIENQVS4gKi9cbitcdGFmZmluaXR5X3NhdmVkID0gIXNjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihvbGRfc2V0KSwgXHUwMDI2b2xkX3NldCk7XG4rXHRDUFVfWkVSTyhcdTAwMjZzZXQpO1xuK1x0Q1BVX1NFVCgwLCBcdTAwMjZzZXQpO1xuK1x0aWYgKCFBU1NFUlRfT0soc2NoZWRfc2V0YWZmaW5pdHkoMCwgc2l6ZW9mKHNldCksIFx1MDAyNnNldCksIFwic2V0YWZmaW5pdHlcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0cGlkZmQgPSBzeXNfcGlkZmRfb3BlbihnZXRwaWQoKSwgMCk7XG4rXHRpZiAoIUFTU0VSVF9HRShwaWRmZCwgMCwgXCJwaWRmZF9vcGVuXCIpKVxuK1x0XHRnb3RvIHJlc3RvcmU7XG4rXHRtYXBfZmQgPSBicGZfbWFwX19mZChza2VsLVx1MDAzZW1hcHMudGFza19zdGcpO1xuK1x0ZXJyID0gYnBmX21hcF91cGRhdGVfZWxlbShtYXBfZmQsIFx1MDAyNnBpZGZkLCBcdTAwMjZ2YWwsIEJQRl9OT0VYSVNUKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJib290X2NyZWF0ZVwiKSlcbitcdFx0Z290byByZXN0b3JlO1xuK1xuK1x0LyogQXJtIHRoZSBoYW5kbGVyIGZvciB0aGlzIHRocmVhZCwgdGhlbiB0cmlnZ2VyIGNhbGxfcmN1X3Rhc2tzX3RyYWNlKCkuICovXG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2V0YXJnZXRfcGlkID0gc3lzY2FsbChfX05SX2dldHRpZCk7XG4rXHRlcnIgPSBicGZfbWFwX2RlbGV0ZV9lbGVtKG1hcF9mZCwgXHUwMDI2cGlkZmQpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcImJvb3RfZGVsZXRlXCIpKVxuK1x0XHRnb3RvIHJlc3RvcmU7XG4rXG4rXHQvKiBPbmx5IFRyZWUgU1JDVSBlbnF1ZXVlcyB2aWEgcmN1X3NlZ2NibGlzdF9lbnF1ZXVlKCk7IHNraXAgZWxzZXdoZXJlLiAqL1xuK1x0aWYgKCFza2VsLVx1MDAzZWJzcy1cdTAwM2VoaXRzKSB7XG4rXHRcdHRlc3RfX3NraXAoKTtcbitcdFx0Z290byByZXN0b3JlO1xuK1x0fVxuK1x0QVNTRVJUX0VRKHNrZWwtXHUwMDNlYnNzLVx1MDAzZWdldF9lcnJzLCAwLCBcIm5lc3RlZF9zdG9yYWdlX2dldFwiKTtcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VkZWxfZXJycywgMCwgXCJuZXN0ZWRfc3RvcmFnZV9kZWxldGVcIik7XG4rcmVzdG9yZTpcbitcdGlmIChhZmZpbml0eV9zYXZlZClcbitcdFx0c2NoZWRfc2V0YWZmaW5pdHkoMCwgc2l6ZW9mKG9sZF9zZXQpLCBcdTAwMjZvbGRfc2V0KTtcbitvdXQ6XG4rXHRpZiAocGlkZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShwaWRmZCk7XG4rXHRyY3VfcmVlbnRyeV9fZGVzdHJveShza2VsKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JjdV9yZWVudHJ5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmN1X3JlZW50cnkuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjQ3YTM2ZjcwNGNmM2Vcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yY3VfcmVlbnRyeS5jXG5AQCAtMCwwICsxLDUxIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKlxuKyAqIFJlLWVudGVyIGNhbGxfc3JjdSgpIGZyb20gYSBCUEYgcHJvZ3JhbS4gIGZlbnRyeSBvbiByY3Vfc2VnY2JsaXN0X2VucXVldWUoKVxuKyAqIGZpcmVzIGluc2lkZSBjYWxsX3NyY3UoKSdzIGVucXVldWUgKHJlYWNoZWQgZnJvbSBzcmN1X2dwX3N0YXJ0X2lmX25lZWRlZCgpXG4rICogd2l0aCB0aGUgc3JjdV9kYXRhIC1cdTAwM2Vsb2NrIGhlbGQpOyB0aGUgaGFuZGxlciB0aGVuIGNhbGxzIGNhbGxfcmN1X3Rhc2tzX3RyYWNlKClcbisgKiAtLSBpdHNlbGYgY2FsbF9zcmN1KCkgb24gcmN1X3Rhc2tzX3RyYWNlX3NyY3Vfc3RydWN0IC0tIHJlLWVudGVyaW5nIHRoZSBzYW1lXG4rICogc3JjdV9kYXRhIG9uIHRoZSBzYW1lIENQVS5cbisgKi9cbisjaW5jbHVkZSBcInZtbGludXguaFwiXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbitcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9UQVNLX1NUT1JBR0UpO1xuK1x0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTk9fUFJFQUxMT0MpO1xuK1x0X190eXBlKGtleSwgaW50KTtcbitcdF9fdHlwZSh2YWx1ZSwgX191NjQpO1xuK30gdGFza19zdGcgU0VDKFwiLm1hcHNcIik7XG4rXG4raW50IHRhcmdldF9waWQ7XG4raW50IGhpdHM7XG4raW50IGdldF9lcnJzO1xuK2ludCBkZWxfZXJycztcbitpbnQgZG9uZTtcbitcbitTRUMoXCJmZW50cnkvcmN1X3NlZ2NibGlzdF9lbnF1ZXVlXCIpXG4raW50IEJQRl9QUk9HKHJlZW50ZXIpXG4re1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICpjdXI7XG4rXG4rXHRpZiAoZG9uZSB8fCAhdGFyZ2V0X3BpZClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRjdXIgPSBicGZfZ2V0X2N1cnJlbnRfdGFza19idGYoKTtcbitcdGlmIChjdXItXHUwMDNlcGlkICE9IHRhcmdldF9waWQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0LyogSXNzdWUgdGhlIG5lc3RlZCBjYWxsIGV4YWN0bHkgb25jZSwgc28gdGhlIHRlc3QgaXMgZGV0ZXJtaW5pc3RpYy4gKi9cbitcdGRvbmUgPSAxO1xuK1x0X19zeW5jX2ZldGNoX2FuZF9hZGQoXHUwMDI2aGl0cywgMSk7XG4rXG4rXHQvKiBSZS1lbnRlciB2aWEgYSB0YXNrLXN0b3JhZ2UgZGVsZXRlLCB3aGljaCBjYWxscyBjYWxsX3JjdV90YXNrc190cmFjZSgpLiAqL1xuK1x0aWYgKCFicGZfdGFza19zdG9yYWdlX2dldChcdTAwMjZ0YXNrX3N0ZywgY3VyLCAwLCBCUEZfTE9DQUxfU1RPUkFHRV9HRVRfRl9DUkVBVEUpKVxuK1x0XHRfX3N5bmNfZmV0Y2hfYW5kX2FkZChcdTAwMjZnZXRfZXJycywgMSk7XG4rXHRlbHNlIGlmIChicGZfdGFza19zdG9yYWdlX2RlbGV0ZShcdTAwMjZ0YXNrX3N0ZywgY3VyKSlcbitcdFx0X19zeW5jX2ZldGNoX2FuZF9hZGQoXHUwMDI2ZGVsX2VycnMsIDEpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTM6MzE6NDAuOTM5MjI3ODExWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU3NjIxMjQxMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBQbGFuIGZvciBSQ1UvU1JDVSBEZWZlcnJhbCBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBzZXJpZXMuIEl0J3MgZGVmZXJyaW5nIGBjYWxsX3JjdSgpYCBhbmQgYGNhbGxfc3JjdSgpYCBjYWxsYmFja3Mgd2hlbiBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCwgd2hpY2ggc2VlbXMgbGlrZSBhIHNvbGlkIG1vdmUgdG8gcHJldmVudCB0aG9zZSBuYXN0eSBkZWFkbG9ja3MgYW5kIGxpc3QgY29ycnVwdGlvbnMgd2Ugc29tZXRpbWVzIHNlZSwgZXNwZWNpYWxseSB3aXRoIHRob3NlIHBlc2t5IEJQRiBwcm9ncmFtcyBhbmQgTk1Jcy4gSSd2ZSBhbHJlYWR5IGNvbmZpcm1lZCB0aGF0IGl0IG1vZGlmaWVzIGtleSBSQ1UgbG9naWMuXG5cbkZpcnN0LCBJIG5lZWQgdG8gc2VlIGlmIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYW55ICpuZXcqIGZ1bmN0aW9uYWxpdHkgdGhhdCB3ZSBuZWVkIHRvIGhpdCB3aXRoIG91ciBmdXp6aW5nIGVmZm9ydHMuIFllcywgdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBhIG5ldyBjb25maWd1cmF0aW9uIG9wdGlvbjogYENPTkZJR19SQ1VfREVGRVJgLiBJdCBhbHNvIG1vZGlmaWVzIGByY3V0b3J0dXJlYCwgc3BlY2lmaWNhbGx5IHRvIHRlc3QgTk1JIGNhbGxzLlxuXG5Ob3csIGxldCdzIHplcm8gaW4gb24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIHRhcmdldC4gSSdtIHRoaW5raW5nIHdlIHNob3VsZCBkZWZpbml0ZWx5IGZvY3VzIG9uIGBjYWxsX3JjdWAsIGBjYWxsX3NyY3VgLCBgc3JjdV9iYXJyaWVyYCwgYW5kIGByY3VfYmFycmllcmAuIFdlIGFsc28gaGF2ZSBgcmN1X2RlZmVyX2RyYWluYCBhbmQgYHNyY3VfZGVmZXJfZHJhaW5gLlxuXG5JIGp1c3QgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBkb2luZyB0aGUgcmlnaHQgdGhpbmcuIEJhc2VkIG9uIHdoYXQgSSBoYXZlIHJlYWQsIGBDT05GSUdfUkNVX0RFRkVSYCBpcyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgaWYgd2UgaGF2ZSBOTUlzLCBLUFJPQkVTLCBvciBvdGhlciB0cmFjaW5nIGVuYWJsZWQuIEknbGwganVzdCBuZWVkIHRvIGxpc3QgYFJDVV9ERUZFUmAgaW4gdGhlIGBFbmFibGVDb25maWdzYC5cblxuTG9va2luZyBhdCBga2VybmVsL3JjdS9yY3V0b3J0dXJlLmNgLCBJIHNlZSBpdCBub3cgaW5jb3Jwb3JhdGVzIGBubWlfY2FsbHNgIGFzIGEgcGFyYW1ldGVyIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJdCBtb2RpZmllZCBgY2FsbF9zcmN1YCwgYHNyY3VfYmFycmllcmAsIGBjYWxsX3JjdWAsIGByY3VfYmFycmllcmAsIGBzcmN1X29mZmxpbmVfZHJhaW5gLCBhbmQgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGF0IGBjYWxsX3JjdWAgYW5kIGBjYWxsX3NyY3VgIGFyZSBleHBvcnRlZCBhbmQgY2FuIGJlIGNhbGxlZCBmcm9tIGFueXdoZXJlLiBZZXAsIHRoZXkgYXJlLiBUaGV5IGFyZSBjb3JlIGtlcm5lbCBBUElzLlxuXG5GaW5hbGx5LCBJJ2xsIGhpdCBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgaW50ZXJlc3RpbmcgZnVuY3Rpb25zIGluIHRoZXNlIHBhdGNoZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTI5LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTY0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTM6MzE6NTYuNzAxMzU0ODM1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjgyODYyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHZvaWR8aW50fGJvb2wpIFthLXowLTlfXStcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvcmN1L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDExMDIgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmtlcm5lbC9yY3UvcmN1Lmg9Mjk3PWV4dGVybiBib29sIHJjdV9leHBfc3RhbGxfdGFza19kZXRhaWxzIF9fcmVhZF9tb3N0bHk7XFxua2VybmVsL3JjdS9yY3UuaDoyOTg6aW50IHJjdV9qaWZmaWVzX3RpbGxfc3RhbGxfY2hlY2sodm9pZCk7XFxua2VybmVsL3JjdS9yY3UuaDoyOTk6aW50IHJjdV9leHBfamlmZmllc190aWxsX3N0YWxsX2NoZWNrKHZvaWQpO1xcbmtlcm5lbC9yY3UvcmN1LmgtMzAwLVxcbi0tXFxua2VybmVsL3JjdS9yY3UuaD0zMzk9ZG8geyBcXFxcXFxuLS1cXG5rZXJuZWwvcmN1L3JjdS5oLTM1MC1cXG5rZXJuZWwvcmN1L3JjdS5oOjM1MTp2b2lkIHJjdV9lYXJseV9ib290X3Rlc3RzKHZvaWQpO1xcbmtlcm5lbC9yY3UvcmN1Lmg6MzUyOnZvaWQgcmN1X3Rlc3Rfc3luY19wcmltcyh2b2lkKTtcXG5rZXJuZWwvcmN1L3JjdS5oLTM1My1cXG4tLVxcbmtlcm5lbC9yY3UvcmN1Lmg9NTM3PXN0YXRpYyBpbmxpbmUgYm9vbCByY3VfY3B1X29ubGluZShpbnQgY3B1KSB7IHJldHVybiB0cnVlOyB9XFxua2VybmVsL3JjdS9yY3UuaC01MzgtI2Vsc2UgLyogI2lmZGVmIENPTkZJR19USU5ZX1JDVSAqL1xcbmtlcm5lbC9yY3UvcmN1Lmg6NTM5OmJvb2wgcmN1X2dwX2lzX25vcm1hbCh2b2lkKTsgICAgIC8qIEludGVybmFsIFJDVSB1c2UuICovXFxua2VybmVsL3JjdS9yY3UuaDo1NDA6Ym9vbCByY3VfZ3BfaXNfZXhwZWRpdGVkKHZvaWQpOyAgLyogSW50ZXJuYWwgUkNVIHVzZS4gKi9cXG5rZXJuZWwvcmN1L3JjdS5oOjU0MTpib29sIHJjdV9hc3luY19zaG91bGRfaHVycnkodm9pZCk7ICAvKiBJbnRlcm5hbCBSQ1UgdXNlLiAqL1xcbmtlcm5lbC9yY3UvcmN1Lmg6NTQyOnZvaWQgcmN1X2V4cGVkaXRlX2dwKHZvaWQpO1xcbmtlcm5lbC9yY3UvcmN1Lmg6NTQzOnZvaWQgcmN1X3VuZXhwZWRpdGVfZ3Aodm9pZCk7XFxua2VybmVsL3JjdS9yY3UuaDo1NDQ6dm9pZCByY3VfYXN5bmNfaHVycnkodm9pZCk7XFxua2VybmVsL3JjdS9yY3UuaDo1NDU6dm9pZCByY3VfYXN5bmNfcmVsYXgodm9pZCk7XFxua2VybmVsL3JjdS9yY3UuaDo1NDY6dm9pZCByY3VwZGF0ZV9hbm5vdW5jZV9ib290dXBfb2RkbmVzcyh2b2lkKTtcXG5rZXJuZWwvcmN1L3JjdS5oOjU0Nzpib29sIHJjdV9jcHVfb25saW5lKGludCBjcHUpO1xcbmtlcm5lbC9yY3UvcmN1LmgtNTQ4LSNpZmRlZiBDT05GSUdfVEFTS1NfUkNVX0dFTkVSSUNcXG5rZXJuZWwvcmN1L3JjdS5oOjU0OTp2b2lkIHNob3dfcmN1X3Rhc2tzX2dwX2t0aHJlYWRzKHZvaWQpO1xcbmtlcm5lbC9yY3UvcmN1LmgtNTUwLSNlbHNlIC8qICNpZmRlZiBDT05GSUdfVEFTS1NfUkNVX0dFTkVSSUMgKi9cXG4tLVxcbmtlcm5lbC9yY3UvcmN1Lmg9NTU2PXN0cnVjdCB0YXNrX3N0cnVjdCAqZ2V0X3JjdV90YXNrc19ncF9rdGhyZWFkKHZvaWQpO1xcbmtlcm5lbC9yY3UvcmN1Lmg6NTU3OnZvaWQgcmN1X3Rhc2tzX2dldF9ncF9kYXRhKGludCAqZmxhZ3MsIHVuc2lnbmVkIGxvbmcgKmdwX3NlcSk7XFxua2VybmVsL3JjdS9yY3UuaC01NTgtI2VuZGlmIC8vICMgaWZkZWYgQ09ORklHX1RBU0tTX1JDVVxcbi0tXFxua2VybmVsL3JjdS9yY3UuaD01NjE9c3RydWN0IHRhc2tfc3RydWN0ICpnZXRfcmN1X3Rhc2tzX3J1ZGVfZ3Bfa3RocmVhZCh2b2lkKTtcXG5rZXJuZWwvcmN1L3JjdS5oOjU2Mjp2b2lkIHJjdV90YXNrc19ydWRlX2dldF9ncF9kYXRhKGludCAqZmxhZ3MsIHVuc2lnbmVkIGxvbmcgKmdwX3NlcSk7XFxua2VybmVsL3JjdS9yY3UuaC01NjMtI2VuZGlmIC8vICMgaWZkZWYgQ09ORklHX1RBU0tTX1JVREVfUkNVXFxuLS1cXG5rZXJuZWwvcmN1L3JjdS5oLTU2NS0jaWZkZWYgQ09ORklHX1RBU0tTX1JDVV9HRU5FUklDXFxua2VybmVsL3JjdS9yY3UuaDo1NjY6dm9pZCB0YXNrc19jYmxpc3RfaW5pdF9nZW5lcmljKHZvaWQpO1xcbmtlcm5lbC9yY3UvcmN1LmgtNTY3LSNlbHNlIC8qICNpZmRlZiBDT05GSUdfVEFTS1NfUkNVX0dFTkVSSUMgKi9cXG4tLVxcbmtlcm5lbC9yY3UvcmN1Lmg9NTgyPXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfcmN1X2RlZmVyKHZvaWQpXFxuLS1cXG5rZXJuZWwvcmN1L3JjdS5oLTU5MC0vKiBEcmFpbiBhbiBvdXRnb2luZyBDUFUncyBkZWZlcnJlZCBTUkNVIGNhbGxiYWNrczsgc2VlIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoKS4gKi9cXG5rZXJuZWwvcmN1L3JjdS5oOjU5MTp2b2lkIHNyY3Vfb2ZmbGluZV9kcmFpbihpbnQgY3B1KTtcXG5rZXJuZWwvcmN1L3JjdS5oLTU5Mi1cXG4tLVxcbmtlcm5lbC9yY3UvcmN1Lmg9NjA0PXVuc2lnbmVkIGxvbmcgcmN1X2dldF9qaWZmaWVzX2xhenlfZmx1c2godm9pZCk7XFxua2VybmVsL3JjdS9yY3UuaDo2MDU6dm9pZCByY3Vfc2V0X2ppZmZpZXNfbGF6eV9mbHVzaCh1bnNpZ25lZCBsb25nIGopO1xcbmtlcm5lbC9yY3UvcmN1LmgtNjA2LSNlbHNlXFxuLS1cXG5rZXJuZWwvcmN1L3JjdS5oPTYwOD1zdGF0aWMgaW5saW5lIHZvaWQgcmN1X3NldF9qaWZmaWVzX2xhenlfZmx1c2godW5zaWduZWQgbG9uZyBqKSB7IH1cXG4tLVxcbmtlcm5lbC9yY3UvcmN1LmgtNjExLSNpZiBkZWZpbmVkKENPTkZJR19UUkVFX1JDVSlcXG5rZXJuZWwvcmN1L3JjdS5oOjYxMjp2b2lkIHJjdXRvcnR1cmVfZ2V0X2dwX2RhdGEoaW50ICpmbGFncywgdW5zaWduZWQgbG9uZyAqZ3Bfc2VxKTtcXG5rZXJuZWwvcmN1L3JjdS5oOjYxMzp2b2lkIGRvX3RyYWNlX3JjdV90b3J0dXJlX3JlYWQoY29uc3QgY2hhciAqcmN1dG9ydHVyZW5hbWUsXFxua2VybmVsL3JjdS9yY3UuaC02MTQtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCByY3VfaGVhZCAqcmhwLFxcbi0tXFxua2VybmVsL3JjdS9yY3UuaC02MTctXFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgYyk7XFxua2VybmVsL3JjdS9yY3UuaDo2MTg6dm9pZCByY3VfZ3Bfc2V0X3RvcnR1cmVfd2FpdChpbnQgZHVyYXRpb24pO1xcbmtlcm5lbC9yY3UvcmN1Lmg6NjE5OnZvaWQgcmN1X3NldF9ncHdyYXBfbGFnKHVuc2lnbmVkIGxvbmcgbGFnKTtcXG5rZXJuZWwvcmN1L3JjdS5oOjYyMDppbnQgcmN1X2dldF9ncHdyYXBfY291bnQoaW50IGNwdSk7XFxua2VybmVsL3JjdS9yY3UuaC02MjEtI2Vsc2VcXG5rZXJuZWwvcmN1L3JjdS5oPTYyMj1zdGF0aWMgaW5saW5lIHZvaWQgcmN1dG9ydHVyZV9nZXRfZ3BfZGF0YShpbnQgKmZsYWdzLCB1bnNpZ25lZCBsb25nICpncF9zZXEpXFxuLS1cXG5rZXJuZWwvcmN1L3JjdS5oLTYyNy0jaWZkZWYgQ09ORklHX1JDVV9UUkFDRVxcbmtlcm5lbC9yY3UvcmN1Lmg6NjI4OnZvaWQgZG9fdHJhY2VfcmN1X3RvcnR1cmVfcmVhZChjb25zdCBjaGFyICpyY3V0b3J0dXJlbmFtZSxcXG5rZXJuZWwvcmN1L3JjdS5oLTYyOS1cXHRcXHRcXHQgICAgICAgc3RydWN0IHJjdV9oZWFkICpyaHAsXFxuLS1cXG5rZXJuZWwvcmN1L3JjdS5oPTY0MT11bnNpZ25lZCBsb25nIGxvbmcgcmN1dG9ydHVyZV9nYXRoZXJfZ3Bfc2Vxcyh2b2lkKTtcXG5rZXJuZWwvcmN1L3JjdS5oOjY0Mjp2b2lkIHJjdXRvcnR1cmVfZm9ybWF0X2dwX3NlcXModW5zaWduZWQgbG9uZyBsb25nIHNlcXMsIGNoYXIgKmNwLCBzaXplX3QgbGVuKTtcXG5rZXJuZWwvcmN1L3JjdS5oLTY0My1cXG4tLVxcbmtlcm5lbC9yY3UvcmN1Lmg9NjQ2PXN0YXRpYyBpbmxpbmUgdm9pZCBzcmN1dG9ydHVyZV9nZXRfZ3BfZGF0YShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwLCBpbnQgKmZsYWdzLFxcbi0tXFxua2VybmVsL3JjdS9yY3UuaC02NTQtXFxua2VybmVsL3JjdS9yY3UuaDo2NTU6dm9pZCBzcmN1dG9ydHVyZV9nZXRfZ3BfZGF0YShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwLCBpbnQgKmZsYWdzLFxcbmtlcm5lbC9yY3UvcmN1LmgtNjU2LVxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyAqZ3Bfc2VxKTtcXG4tLVxcbmtlcm5lbC9yY3UvcmN1Lmg9NjcwPXN0YXRpYyBpbmxpbmUgdm9pZCByY3VfZ3Bfc2xvd191bnJlZ2lzdGVyKGF0b21pY190ICpyZ3NzcCkgeyB9XFxua2VybmVsL3JjdS9yY3UuaC02NzEtI2Vsc2UgLyogI2lmZGVmIENPTkZJR19USU5ZX1JDVSAqL1xcbmtlcm5lbC9yY3UvcmN1Lmg6NjcyOmJvb2wgcmN1X3dhdGNoaW5nX3plcm9faW5fZXFzKGludCBjcHUsIGludCAqdnApO1xcbmtlcm5lbC9yY3UvcmN1LmgtNjczLXVuc2lnbmVkIGxvbmcgcmN1X2dldF9ncF9zZXEodm9pZCk7XFxua2VybmVsL3JjdS9yY3UuaD02NzQ9dW5zaWduZWQgbG9uZyByY3VfZXhwX2JhdGNoZXNfY29tcGxldGVkKHZvaWQpO1xcbmtlcm5lbC9yY3UvcmN1Lmg6Njc1OmJvb2wgcmN1X2NoZWNrX2Jvb3N0X2ZhaWwodW5zaWduZWQgbG9uZyBncF9zdGF0ZSwgaW50ICpjcHVwKTtcXG5rZXJuZWwvcmN1L3JjdS5oOjY3Njp2b2lkIHNob3dfcmN1X2dwX2t0aHJlYWRzKHZvaWQpO1xcbmtlcm5lbC9yY3UvcmN1Lmg6Njc3OmludCByY3VfZ2V0X2dwX2t0aHJlYWRzX3ByaW8odm9pZCk7XFxua2VybmVsL3JjdS9yY3UuaDo2Nzg6dm9pZCByY3VfZndkX3Byb2dyZXNzX2NoZWNrKHVuc2lnbmVkIGxvbmcgaik7XFxua2VybmVsL3JjdS9yY3UuaDo2Nzk6dm9pZCByY3VfZm9yY2VfcXVpZXNjZW50X3N0YXRlKHZvaWQpO1xcbmtlcm5lbC9yY3UvcmN1LmgtNjgwLWV4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcmN1X2dwX3dxO1xcbmtlcm5lbC9yY3UvcmN1Lmg9NjgxPWV4dGVybiBzdHJ1Y3Qga3RocmVhZF93b3JrZXIgKnJjdV9leHBfZ3Bfa3dvcmtlcjtcXG5rZXJuZWwvcmN1L3JjdS5oOjY4Mjp2b2lkIHJjdV9ncF9zbG93X3JlZ2lzdGVyKGF0b21pY190ICpyZ3NzcCk7XFxua2VybmVsL3JjdS9yY3UuaDo2ODM6dm9pZCByY3VfZ3Bfc2xvd191bnJlZ2lzdGVyKGF0b21pY190ICpyZ3NzcCk7XFxua2VybmVsL3JjdS9yY3UuaC02ODQtI2VuZGlmIC8qICNlbHNlICNpZmRlZiBDT05GSUdfVElOWV9SQ1UgKi9cXG4tLVxcbmtlcm5lbC9yY3UvcmN1Lmg9Njg5PXVuc2lnbmVkIGxvbmcgc3JjdV9iYXRjaGVzX2NvbXBsZXRlZChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwKTtcXG4tLVxcbmtlcm5lbC9yY3UvcmN1LmgtNjkyLSNpZmRlZiBDT05GSUdfUkNVX05PQ0JfQ1BVXFxua2VybmVsL3JjdS9yY3UuaDo2OTM6dm9pZCByY3VfYmluZF9jdXJyZW50X3RvX25vY2Iodm9pZCk7XFxua2VybmVsL3JjdS9yY3UuaC02OTQtI2Vsc2VcXG5rZXJuZWwvcmN1L3JjdS5oPTY5NT1zdGF0aWMgaW5saW5lIHZvaWQgcmN1X2JpbmRfY3VycmVudF90b19ub2NiKHZvaWQpIHsgfVxcbi0tXFxua2VybmVsL3JjdS9yY3UuaC02OTgtI2lmICFkZWZpbmVkKENPTkZJR19USU5ZX1JDVSkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfVEFTS1NfUkNVKVxcbmtlcm5lbC9yY3UvcmN1Lmg6Njk5OnZvaWQgc2hvd19yY3VfdGFza3NfY2xhc3NpY19ncF9rdGhyZWFkKHZvaWQpO1xcbmtlcm5lbC9yY3UvcmN1LmgtNzAwLSNlbHNlXFxua2VybmVsL3JjdS9yY3UuaD03MDE9c3RhdGljIGlubGluZSB2b2lkIHNob3dfcmN1X3Rhc2tzX2NsYXNzaWNfZ3Bfa3RocmVhZCh2b2lkKSB7fVxcbi0tXFxua2VybmVsL3JjdS9yY3UuaC03MDMtI2lmICFkZWZpbmVkKENPTkZJR19USU5ZX1JDVSkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfVEFTS1NfUlVERV9SQ1UpXFxua2VybmVsL3JjdS9yY3UuaDo3MDQ6dm9pZCBzaG93X3JjdV90YXNrc19ydWRlX2dwX2t0aHJlYWQodm9pZCk7XFxua2VybmVsL3JjdS9yY3UuaC03MDUtI2Vsc2VcXG4tLVxcbmtlcm5lbC9yY3UvcmN1Lmg9NzEwPXN0YXRpYyBpbmxpbmUgYm9vbCByY3VfY3B1X2JlZW5mdWxseW9ubGluZShpbnQgY3B1KSB7IHJldHVybiB0cnVlOyB9XFxua2VybmVsL3JjdS9yY3UuaC03MTEtI2Vsc2VcXG5rZXJuZWwvcmN1L3JjdS5oOjcxMjpib29sIHJjdV9jcHVfYmVlbmZ1bGx5b25saW5lKGludCBjcHUpO1xcbmtlcm5lbC9yY3UvcmN1LmgtNzEzLSNlbmRpZlxcbi0tXFxua2VybmVsL3JjdS9yY3UuaC03MTUtI2lmIGRlZmluZWQoQ09ORklHX1JDVV9TVEFMTF9DT01NT04pIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1JDVV9DUFVfU1RBTExfTk9USUZJRVIpXFxua2VybmVsL3JjdS9yY3UuaDo3MTY6aW50IHJjdV9zdGFsbF9ub3RpZmllcl9jYWxsX2NoYWluKHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICp2KTtcXG5rZXJuZWwvcmN1L3JjdS5oLTcxNy0jZWxzZSAvLyAjaWYgZGVmaW5lZChDT05GSUdfUkNVX1NUQUxMX0NPTU1PTikgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfUkNVX0NQVV9TVEFMTF9OT1RJRklFUilcXG5rZXJuZWwvcmN1L3JjdS5oPTcxOD1zdGF0aWMgaW5saW5lIGludCByY3Vfc3RhbGxfbm90aWZpZXJfY2FsbF9jaGFpbih1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqdikgeyByZXR1cm4gTk9USUZZX0RPTkU7IH1cXG4tLVxcbmtlcm5lbC9yY3UvcmN1LmgtNzIxLSNpZmRlZiBDT05GSUdfVFJJVklBTF9QUkVFTVBUX1JDVVxcbmtlcm5lbC9yY3UvcmN1Lmg6NzIyOnZvaWQgc3luY2hyb25pemVfcmN1X3RyaXZpYWxfcHJlZW1wdCh2b2lkKTtcXG5rZXJuZWwvcmN1L3JjdS5oLTcyMy0jZW5kaWYgLy8gI2lmZGVmIENPTkZJR19UUklWSUFMX1BSRUVNUFRfUkNVXFxuLS1cXG5rZXJuZWwvcmN1L3JjdS5oLTcyNS0jaWYgZGVmaW5lZChDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfUkNVX0JPT1NUKVxcbmtlcm5lbC9yY3UvcmN1Lmg6NzI2OmJvb2wgcmN1X2lzX3Rhc2tfcmN1X2Jvb3N0ZWQodm9pZCk7XFxua2VybmVsL3JjdS9yY3UuaC03MjctI2Vsc2UgLy8gI2lmIGRlZmluZWQoQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1JDVV9CT09TVClcXG4tLVxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTE4LS8qIEluaXRpYWxpemUgc2ltcGxlIGNhbGxiYWNrIGxpc3QuICovXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmM6MTk6dm9pZCByY3VfY2JsaXN0X2luaXQoc3RydWN0IHJjdV9jYmxpc3QgKnJjbHApXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtMjAte1xcbi0tXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtMjgtICovXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmM6Mjk6dm9pZCByY3VfY2JsaXN0X2VucXVldWUoc3RydWN0IHJjdV9jYmxpc3QgKnJjbHAsIHN0cnVjdCByY3VfaGVhZCAqcmhwKVxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTMwLXtcXG4tLVxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTQzLSAqL1xcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jOjQ0OnZvaWQgcmN1X2NibGlzdF9mbHVzaF9lbnF1ZXVlKHN0cnVjdCByY3VfY2JsaXN0ICpkcmNscCxcXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy00NS1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgcmN1X2NibGlzdCAqc3JjbHAsXFxuLS1cXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYz0xMzk9c3RhdGljIHZvaWQgcmN1X3NlZ2NibGlzdF9pbmNfc2VnbGVuKHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscCwgaW50IHNlZylcXG4tLVxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTIxMC0gKi9cXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzoyMTE6dm9pZCByY3Vfc2VnY2JsaXN0X2FkZF9sZW4oc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwLCBsb25nIHYpXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtMjEyLXtcXG4tLVxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTIyOS0gKi9cXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzoyMzA6dm9pZCByY3Vfc2VnY2JsaXN0X2luY19sZW4oc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwKVxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTIzMS17XFxuLS1cXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy0yMzctICovXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmM6MjM4OnZvaWQgcmN1X3NlZ2NibGlzdF9pbml0KHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscClcXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy0yMzkte1xcbi0tXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtMjU2LSAqL1xcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jOjI1Nzp2b2lkIHJjdV9zZWdjYmxpc3RfZGlzYWJsZShzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHApXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtMjU4LXtcXG4tLVxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTI2Ny0gKi9cXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzoyNjg6Ym9vbCByY3Vfc2VnY2JsaXN0X3JlYWR5X2NicyhzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHApXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtMjY5LXtcXG4tLVxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTI3Ny0gKi9cXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzoyNzg6Ym9vbCByY3Vfc2VnY2JsaXN0X3BlbmRfY2JzKHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscClcXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy0yNzkte1xcbi0tXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmM9MzAyPXN0cnVjdCByY3VfaGVhZCAqcmN1X3NlZ2NibGlzdF9maXJzdF9wZW5kX2NiKHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscClcXG4tLVxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTMxMi0gKi9cXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzozMTM6Ym9vbCByY3Vfc2VnY2JsaXN0X25leHRncChzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHAsIHN0cnVjdCByY3VfZ3Bfc2VxICpnc3ApXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtMzE0LXtcXG4tLVxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTMyOS0gKi9cXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzozMzA6dm9pZCByY3Vfc2VnY2JsaXN0X2VucXVldWUoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwLFxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTMzMS1cXHRcXHRcXHQgICBzdHJ1Y3QgcmN1X2hlYWQgKnJocClcXG4tLVxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTM0OS0gKi9cXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzozNTA6Ym9vbCByY3Vfc2VnY2JsaXN0X2VudHJhaW4oc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwLFxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTM1MS1cXHRcXHRcXHQgICBzdHJ1Y3QgcmN1X2hlYWQgKnJocClcXG4tLVxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTM3NC0gKi9cXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzozNzU6dm9pZCByY3Vfc2VnY2JsaXN0X2V4dHJhY3RfZG9uZV9jYnMoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwLFxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTM3Ni1cXHRcXHRcXHRcXHQgICAgc3RydWN0IHJjdV9jYmxpc3QgKnJjbHApXFxuLS1cXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy0zOTktICovXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmM6NDAwOnZvaWQgcmN1X3NlZ2NibGlzdF9leHRyYWN0X3BlbmRfY2JzKHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscCxcXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy00MDEtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCByY3VfY2JsaXN0ICpyY2xwKVxcbi0tXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtNDIxLSAqL1xcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jOjQyMjp2b2lkIHJjdV9zZWdjYmxpc3RfaW5zZXJ0X2NvdW50KHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscCxcXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy00MjMtXFx0XFx0XFx0XFx0c3RydWN0IHJjdV9jYmxpc3QgKnJjbHApXFxuLS1cXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy00MzEtICovXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmM6NDMyOnZvaWQgcmN1X3NlZ2NibGlzdF9pbnNlcnRfZG9uZV9jYnMoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwLFxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTQzMy1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgcmN1X2NibGlzdCAqcmNscClcXG4tLVxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTQ1NC0gKi9cXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzo0NTU6dm9pZCByY3Vfc2VnY2JsaXN0X2luc2VydF9wZW5kX2NicyhzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHAsXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtNDU2LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCByY3VfY2JsaXN0ICpyY2xwKVxcbi0tXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmM9NDczPXN0YXRpYyB2b2lkIHJjdV9zZWdjYmxpc3RfYWR2YW5jZV9jb21wYWN0KHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscCwgaW50IGkpXFxuLS1cXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy01MDAtICovXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmM6NTAxOnZvaWQgcmN1X3NlZ2NibGlzdF9hZHZhbmNlKHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscClcXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy01MDIte1xcbi0tXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtNTQzLSAqL1xcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jOjU0NDpib29sIHJjdV9zZWdjYmxpc3RfYWNjZWxlcmF0ZShzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHAsIHN0cnVjdCByY3VfZ3Bfc2VxICpnc3ApXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtNTQ1LXtcXG4tLVxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jLTYxMy0gKi9cXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYzo2MTQ6dm9pZCByY3Vfc2VnY2JsaXN0X21lcmdlKHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpkc3RfcnNjbHAsXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtNjE1LVxcdFxcdFxcdCBzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqc3JjX3JzY2xwKVxcbi0tXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtNjQxLVxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jOjY0Mjp2b2lkIHNyY3Vfc2VnY2JsaXN0X2FkdmFuY2Uoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwLCB1bnNpZ25lZCBsb25nIHNlcSlcXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy02NDMte1xcbi0tXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmMtNjczLSAqL1xcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5jOjY3NDpib29sIHNyY3Vfc2VnY2JsaXN0X2FjY2VsZXJhdGUoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwLCB1bnNpZ25lZCBsb25nIHNlcSlcXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuYy02NzUte1xcbi0tXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0Lmg9MjE9bG9uZyByY3Vfc2VnY2JsaXN0X25fc2VnbWVudF9jYnMoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwKTtcXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaC0yMi1cXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaDoyMzp2b2lkIHJjdV9jYmxpc3RfaW5pdChzdHJ1Y3QgcmN1X2NibGlzdCAqcmNscCk7XFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0Lmg6MjQ6dm9pZCByY3VfY2JsaXN0X2VucXVldWUoc3RydWN0IHJjdV9jYmxpc3QgKnJjbHAsIHN0cnVjdCByY3VfaGVhZCAqcmhwKTtcXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaDoyNTp2b2lkIHJjdV9jYmxpc3RfZmx1c2hfZW5xdWV1ZShzdHJ1Y3QgcmN1X2NibGlzdCAqZHJjbHAsXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmgtMjYtXFx0XFx0XFx0ICAgICAgc3RydWN0IHJjdV9jYmxpc3QgKnNyY2xwLFxcbi0tXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0Lmg9MTEyPXN0YXRpYyBpbmxpbmUgYm9vbCByY3Vfc2VnY2JsaXN0X3NlZ2VtcHR5KHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscCwgaW50IHNlZylcXG4tLVxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oLTExOC1cXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaDoxMTk6dm9pZCByY3Vfc2VnY2JsaXN0X2luY19sZW4oc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwKTtcXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaDoxMjA6dm9pZCByY3Vfc2VnY2JsaXN0X2FkZF9sZW4oc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwLCBsb25nIHYpO1xcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oOjEyMTp2b2lkIHJjdV9zZWdjYmxpc3RfaW5pdChzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHApO1xcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oOjEyMjp2b2lkIHJjdV9zZWdjYmxpc3RfZGlzYWJsZShzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHApO1xcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oOjEyMzpib29sIHJjdV9zZWdjYmxpc3RfcmVhZHlfY2JzKHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscCk7XFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0Lmg6MTI0OmJvb2wgcmN1X3NlZ2NibGlzdF9wZW5kX2NicyhzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHApO1xcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oLTEyNS1zdHJ1Y3QgcmN1X2hlYWQgKnJjdV9zZWdjYmxpc3RfZmlyc3RfY2Ioc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwKTtcXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaD0xMjY9c3RydWN0IHJjdV9oZWFkICpyY3Vfc2VnY2JsaXN0X2ZpcnN0X3BlbmRfY2Ioc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwKTtcXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaDoxMjc6Ym9vbCByY3Vfc2VnY2JsaXN0X25leHRncChzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHAsIHN0cnVjdCByY3VfZ3Bfc2VxICpnc3ApO1xcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oOjEyODp2b2lkIHJjdV9zZWdjYmxpc3RfZW5xdWV1ZShzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHAsXFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0LmgtMTI5LVxcdFxcdFxcdCAgIHN0cnVjdCByY3VfaGVhZCAqcmhwKTtcXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaDoxMzA6Ym9vbCByY3Vfc2VnY2JsaXN0X2VudHJhaW4oc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwLFxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oLTEzMS1cXHRcXHRcXHQgICBzdHJ1Y3QgcmN1X2hlYWQgKnJocCk7XFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0Lmg6MTMyOnZvaWQgcmN1X3NlZ2NibGlzdF9leHRyYWN0X2RvbmVfY2JzKHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscCxcXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaC0xMzMtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCByY3VfY2JsaXN0ICpyY2xwKTtcXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaDoxMzQ6dm9pZCByY3Vfc2VnY2JsaXN0X2V4dHJhY3RfcGVuZF9jYnMoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwLFxcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oLTEzNS1cXHRcXHRcXHRcXHQgICAgc3RydWN0IHJjdV9jYmxpc3QgKnJjbHApO1xcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oOjEzNjp2b2lkIHJjdV9zZWdjYmxpc3RfaW5zZXJ0X2NvdW50KHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscCxcXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaC0xMzctXFx0XFx0XFx0XFx0c3RydWN0IHJjdV9jYmxpc3QgKnJjbHApO1xcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oOjEzODp2b2lkIHJjdV9zZWdjYmxpc3RfaW5zZXJ0X2RvbmVfY2JzKHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscCxcXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaC0xMzktXFx0XFx0XFx0XFx0ICAgc3RydWN0IHJjdV9jYmxpc3QgKnJjbHApO1xcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oOjE0MDp2b2lkIHJjdV9zZWdjYmxpc3RfaW5zZXJ0X3BlbmRfY2JzKHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpyc2NscCxcXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaC0xNDEtXFx0XFx0XFx0XFx0ICAgc3RydWN0IHJjdV9jYmxpc3QgKnJjbHApO1xcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oOjE0Mjp2b2lkIHJjdV9zZWdjYmxpc3RfYWR2YW5jZShzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHApO1xcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oOjE0Mzpib29sIHJjdV9zZWdjYmxpc3RfYWNjZWxlcmF0ZShzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHAsIHN0cnVjdCByY3VfZ3Bfc2VxICpnc3ApO1xcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oOjE0NDp2b2lkIHJjdV9zZWdjYmxpc3RfbWVyZ2Uoc3RydWN0IHJjdV9zZWdjYmxpc3QgKmRzdF9yc2NscCxcXG5rZXJuZWwvcmN1L3JjdV9zZWdjYmxpc3QuaC0xNDUtXFx0XFx0XFx0IHN0cnVjdCByY3Vfc2VnY2JsaXN0ICpzcmNfcnNjbHApO1xcbmtlcm5lbC9yY3UvcmN1X3NlZ2NibGlzdC5oOjE0Njp2b2lkIHNyY3Vfc2VnY2JsaXN0X2FkdmFuY2Uoc3RydWN0IHJjdV9zZWdjYmxpc3QgKnJzY2xwLCB1bnNpZ25lZCBsb25nIHNlcSk7XFxua2VybmVsL3JjdS9yY3Vfc2VnY2JsaXN0Lmg6MTQ3OmJvb2wgc3JjdV9zZWdjYmxpc3RfYWNjZWxlcmF0ZShzdHJ1Y3QgcmN1X3NlZ2NibGlzdCAqcnNjbHAsIHVuc2lnbmVkIGxvbmcgc2VxKTtcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYz0zNT1zdGF0aWMgaW50IGluaXRfc3JjdV9zdHJ1Y3RfZmllbGRzKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxcbi0tXFxua2VybmVsL3JjdS9zcmN1dGlueS5jLTU1LVxcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYzo1NjppbnQgaW5pdF9zcmN1X3N0cnVjdF9sb2NrZGVwKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBjb25zdCBjaGFyICpuYW1lLFxcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy01Ny1cXHRcXHQgICAgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KVxcbi0tXFxua2VybmVsL3JjdS9zcmN1dGlueS5jPTY0PUVYUE9SVF9TWU1CT0xfR1BMKGluaXRfc3JjdV9zdHJ1Y3RfbG9ja2RlcCk7XFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0aW55LmMtNzUtICovXFxua2VybmVsL3JjdS9zcmN1dGlueS5jOjc2OmludCBpbml0X3NyY3Vfc3RydWN0X2dlbmVyaWMoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXFxua2VybmVsL3JjdS9zcmN1dGlueS5jLTc3LXtcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYz04MD1FWFBPUlRfU1lNQk9MX0dQTChpbml0X3NyY3Vfc3RydWN0X2dlbmVyaWMpO1xcbi0tXFxua2VybmVsL3JjdS9zcmN1dGlueS5jLTkwLSAqL1xcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYzo5MTp2b2lkIGNsZWFudXBfc3JjdV9zdHJ1Y3Qoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXFxua2VybmVsL3JjdS9zcmN1dGlueS5jLTkyLXtcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYz0xMDg9RVhQT1JUX1NZTUJPTF9HUEwoY2xlYW51cF9zcmN1X3N0cnVjdCk7XFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0aW55LmMtMTEzLSAqL1xcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYzoxMTQ6dm9pZCBfX3NyY3VfcmVhZF91bmxvY2soc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIGludCBpZHgpXFxua2VybmVsL3JjdS9zcmN1dGlueS5jLTExNS17XFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0aW55LmM9MTI1PUVYUE9SVF9TWU1CT0xfR1BMKF9fc3JjdV9yZWFkX3VubG9jayk7XFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0aW55LmMtMTMxLSAqL1xcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYzoxMzI6dm9pZCBzcmN1X2RyaXZlX2dwKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3ApXFxua2VybmVsL3JjdS9zcmN1dGlueS5jLTEzMy17XFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0aW55LmM9MTkxPUVYUE9SVF9TWU1CT0xfR1BMKHNyY3VfZHJpdmVfZ3ApO1xcbi0tXFxua2VybmVsL3JjdS9zcmN1dGlueS5jLTE5Ny0gKi9cXG5rZXJuZWwvcmN1L3NyY3V0aW55LmM6MTk4OnZvaWQgc3JjdV90aW55X2lycV93b3JrKHN0cnVjdCBpcnFfd29yayAqaXJxX3dvcmspXFxua2VybmVsL3JjdS9zcmN1dGlueS5jLTE5OS17XFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0aW55LmM9MjQ4PXN0YXRpYyB2b2lkIF9fc3JjdV9kZWZlcl9kcmFpbihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgYm9vbCBndWFyZClcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy0yNjgtLyogT25seSB0aGUgaXJxX3dvcmsgZHJhaW4gY2FuIGJlIHJlLWZlZCBieSBpdHMgb3duIHJlLWlzc3VlOyBzZWUgVHJlZSBTUkNVLiAqL1xcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYzoyNjk6dm9pZCBzcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpXFxua2VybmVsL3JjdS9zcmN1dGlueS5jLTI3MC17XFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0aW55LmM9MjczPUVYUE9SVF9TWU1CT0xfR1BMKHNyY3VfZGVmZXJfZHJhaW4pO1xcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy0yNzQtXFxua2VybmVsL3JjdS9zcmN1dGlueS5jOjI3NTp2b2lkIGNhbGxfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHJjdV9oZWFkICpyaHAsXFxua2VybmVsL3JjdS9zcmN1dGlueS5jLTI3Ni1cXHQgICAgICAgcmN1X2NhbGxiYWNrX3QgZnVuYylcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYz0yOTY9RVhQT1JUX1NZTUJPTF9HUEwoY2FsbF9zcmN1KTtcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy0zMDAtICovXFxua2VybmVsL3JjdS9zcmN1dGlueS5jOjMwMTp2b2lkIHN5bmNocm9uaXplX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXFxua2VybmVsL3JjdS9zcmN1dGlueS5jLTMwMi17XFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0aW55LmM9MzIzPUVYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3NyY3UpO1xcbi0tXFxua2VybmVsL3JjdS9zcmN1dGlueS5jLTMyNS0vKiBSZWdpc3RlciBhbnkgZGVmZXJyZWQgY2FsbGJhY2tzLCB0aGVuIHdhaXQgZm9yIGFsbCBpbi1mbGlnaHQgb25lcy4gKi9cXG5rZXJuZWwvcmN1L3NyY3V0aW55LmM6MzI2OnZvaWQgc3JjdV9iYXJyaWVyKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxcbmtlcm5lbC9yY3Uvc3JjdXRpbnkuYy0zMjcte1xcbi0tXFxua2VybmVsL3JjdS9zcmN1dGlueS5jPTM2NT1FWFBPUlRfU1lNQk9MX0dQTChzdGFydF9wb2xsX3N5bmNocm9uaXplX3NyY3UpO1xcbi0tXFxua2VybmVsL3JjdS9zcmN1dGlueS5jLTM2OS0gKi9cXG5rZXJuZWwvcmN1L3NyY3V0aW55LmM6MzcwOmJvb2wgcG9sbF9zdGF0ZV9zeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCB1bnNpZ25lZCBsb25nIGNvb2tpZSlcXG5rZXJuZWwvcmN1L3NyY3V0aW55LmMtMzcxLXtcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYz0zMDY9X19pbml0X3NyY3Vfc3RydWN0X2NvbW1vbihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpXFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMzEzLVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYzozMTQ6aW50IGluaXRfc3JjdV9zdHJ1Y3RfbG9ja2RlcChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgY29uc3QgY2hhciAqbmFtZSxcXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMzE1LVxcdFxcdFxcdCAgICAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpXFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM9MzIwPUVYUE9SVF9TWU1CT0xfR1BMKGluaXRfc3JjdV9zdHJ1Y3RfbG9ja2RlcCk7XFxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTMyMS1cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM6MzIyOmludCBfX2luaXRfc3JjdV9zdHJ1Y3RfZmFzdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTMyMy17XFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM9MzI3PUVYUE9SVF9TWU1CT0xfR1BMKF9faW5pdF9zcmN1X3N0cnVjdF9mYXN0KTtcXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMzI4LVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYzozMjk6aW50IF9faW5pdF9zcmN1X3N0cnVjdF9mYXN0X3VwZG93bihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgY29uc3QgY2hhciAqbmFtZSxcXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMzMwLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KVxcbi0tXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTMzNT1FWFBPUlRfU1lNQk9MX0dQTChfX2luaXRfc3JjdV9zdHJ1Y3RfZmFzdF91cGRvd24pO1xcbi0tXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTM0OS0gKi9cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM6MzUwOmludCBpbml0X3NyY3Vfc3RydWN0X2dlbmVyaWMoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTM1MS17XFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM9MzU1PUVYUE9SVF9TWU1CT0xfR1BMKGluaXRfc3JjdV9zdHJ1Y3RfZ2VuZXJpYyk7XFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMzY2LSAqL1xcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYzozNjc6aW50IGluaXRfc3JjdV9zdHJ1Y3RfZmFzdChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMzY4LXtcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYz0zNzI9RVhQT1JUX1NZTUJPTF9HUEwoaW5pdF9zcmN1X3N0cnVjdF9mYXN0KTtcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0zODQtICovXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jOjM4NTppbnQgaW5pdF9zcmN1X3N0cnVjdF9mYXN0X3VwZG93bihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMzg2LXtcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYz02OTg9c3RhdGljIHVuc2lnbmVkIGxvbmcgc3JjdV9nZXRfZGVsYXkoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtNzI5LSAqL1xcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYzo3MzA6dm9pZCBjbGVhbnVwX3NyY3Vfc3RydWN0KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy03MzEte1xcbi0tXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTc4ND1FWFBPUlRfU1lNQk9MX0dQTChjbGVhbnVwX3NyY3Vfc3RydWN0KTtcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy03ODgtICovXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jOjc4OTp2b2lkIF9fc3JjdV9jaGVja19yZWFkX2ZsYXZvcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgaW50IHJlYWRfZmxhdm9yKVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy03OTAte1xcbi0tXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTgxMj1FWFBPUlRfU1lNQk9MX0dQTChfX3NyY3VfY2hlY2tfcmVhZF9mbGF2b3IpO1xcbi0tXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTgxOS0gKi9cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM6ODIwOmludCBfX3NyY3VfcmVhZF9sb2NrKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy04MjEte1xcbi0tXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTgyOD1FWFBPUlRfU1lNQk9MX0dQTChfX3NyY3VfcmVhZF9sb2NrKTtcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy04MzQtICovXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jOjgzNTp2b2lkIF9fc3JjdV9yZWFkX3VubG9jayhzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgaW50IGlkeClcXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtODM2LXtcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYz04NDA9RVhQT1JUX1NZTUJPTF9HUEwoX19zcmN1X3JlYWRfdW5sb2NrKTtcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy04NDgtICovXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jOjg0OTppbnQgX19zcmN1X3JlYWRfbG9ja19ubWlzYWZlKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwKVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy04NTAte1xcbi0tXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTg1OD1FWFBPUlRfU1lNQk9MX0dQTChfX3NyY3VfcmVhZF9sb2NrX25taXNhZmUpO1xcbi0tXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTg2NC0gKi9cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM6ODY1OnZvaWQgX19zcmN1X3JlYWRfdW5sb2NrX25taXNhZmUoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIGludCBpZHgpXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTg2Ni17XFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM9MTU2ND1zdGF0aWMgdm9pZCBzcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpXFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMTU3My0gKi9cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM6MTU3NDp2b2lkIHNyY3Vfb2ZmbGluZV9kcmFpbihpbnQgY3B1KVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0xNTc1LXtcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0xNjAxLSAqL1xcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYzoxNjAyOnZvaWQgY2FsbF9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBzdHJ1Y3QgcmN1X2hlYWQgKnJocCxcXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMTYwMy1cXHQgICAgICAgcmN1X2NhbGxiYWNrX3QgZnVuYylcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYz0xNjEyPXN0YXRpYyB2b2lkIF9fc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgYm9vbCBkb19ub3JtKVxcbi0tXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE2NTMtICovXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jOjE2NTQ6dm9pZCBzeW5jaHJvbml6ZV9zcmN1X2V4cGVkaXRlZChzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcClcXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMTY1NS17XFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM9MTY1OD1FWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9zcmN1X2V4cGVkaXRlZCk7XFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMTcwOC0gKi9cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM6MTcwOTp2b2lkIHN5bmNocm9uaXplX3NyY3Uoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE3MTAte1xcbi0tXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTE3NTE9RVhQT1JUX1NZTUJPTF9HUEwoc3RhcnRfcG9sbF9zeW5jaHJvbml6ZV9zcmN1KTtcXG4tLVxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0xNzc3LSAqL1xcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYzoxNzc4OmJvb2wgcG9sbF9zdGF0ZV9zeW5jaHJvbml6ZV9zcmN1KHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCB1bnNpZ25lZCBsb25nIGNvb2tpZSlcXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMTc3OS17XFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM9MTgxMz1zdGF0aWMgdm9pZCBzcmN1X2JhcnJpZXJfb25lX2NwdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNzcCwgc3RydWN0IHNyY3VfZGF0YSAqc2RwKVxcbi0tXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE4MzAtICovXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jOjE4MzE6dm9pZCBzcmN1X2JhcnJpZXIoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE4MzIte1xcbi0tXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTE4Nzc9c3RhdGljIHZvaWQgc3JjdV9leHBlZGl0ZV9jdXJyZW50X2NiKHN0cnVjdCByY3VfaGVhZCAqcmhwKVxcbi0tXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE5MDgtICovXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jOjE5MDk6dm9pZCBzcmN1X2V4cGVkaXRlX2N1cnJlbnQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3ApXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTE5MTAte1xcbi0tXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTIxMzc9c3RhdGljIHZvaWQgc3JjdV9pcnFfd29yayhzdHJ1Y3QgaXJxX3dvcmsgKndvcmspXFxuLS1cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMjE1My1cXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmM6MjE1NDp2b2lkIHNyY3V0b3J0dXJlX2dldF9ncF9kYXRhKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3NwLCBpbnQgKmZsYWdzLFxcbmtlcm5lbC9yY3Uvc3JjdXRyZWUuYy0yMTU1LVxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyAqZ3Bfc2VxKVxcbi0tXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jPTIxNjI9c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzcmN1X3NpemVfc3RhdGVfbmFtZVtdID0ge1xcbi0tXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jLTIxNzQtXFxua2VybmVsL3JjdS9zcmN1dHJlZS5jOjIxNzU6dm9pZCBzcmN1X3RvcnR1cmVfc3RhdHNfcHJpbnQoc3RydWN0IHNyY3Vfc3RydWN0ICpzc3AsIGNoYXIgKnR0LCBjaGFyICp0ZilcXG5rZXJuZWwvcmN1L3NyY3V0cmVlLmMtMjE3Ni17XFxuLS1cXG5rZXJuZWwvcmN1L3N5bmMuYz0xMz1lbnVtIHsgR1BfSURMRSA9IDAsIEdQX0VOVEVSLCBHUF9QQVNTRUQsIEdQX0VYSVQsIEdQX1JFUExBWSB9O1xcbi0tXFxua2VybmVsL3JjdS9zeW5jLmMtMjAtICovXFxua2VybmVsL3JjdS9zeW5jLmM6MjE6dm9pZCByY3Vfc3luY19pbml0KHN0cnVjdCByY3Vfc3luYyAqcnNwKVxcbmtlcm5lbC9yY3Uvc3luYy5jLTIyLXtcXG4tLVxcbmtlcm5lbC9yY3Uvc3luYy5jPTU3PXN0YXRpYyB2b2lkIHJjdV9zeW5jX2Z1bmMoc3RydWN0IHJjdV9oZWFkICpyaHApXFxuLS1cXG5rZXJuZWwvcmN1L3N5bmMuYy0xMDQtICovXFxua2VybmVsL3JjdS9zeW5jLmM6MTA1OnZvaWQgcmN1X3N5bmNfZW50ZXIoc3RydWN0IHJjdV9zeW5jICpyc3ApXFxua2VybmVsL3JjdS9zeW5jLmMtMTA2LXtcXG4tLVxcbmtlcm5lbC9yY3Uvc3luYy5jLTE1MS0gKi9cXG5rZXJuZWwvcmN1L3N5bmMuYzoxNTI6dm9pZCByY3Vfc3luY19leGl0KHN0cnVjdCByY3Vfc3luYyAqcnNwKVxcbmtlcm5lbC9yY3Uvc3luYy5jLTE1My17XFxuLS1cXG5rZXJuZWwvcmN1L3N5bmMuYy0xNzItICovXFxua2VybmVsL3JjdS9zeW5jLmM6MTczOnZvaWQgcmN1X3N5bmNfZHRvcihzdHJ1Y3QgcmN1X3N5bmMgKnJzcClcXG5rZXJuZWwvcmN1L3N5bmMuYy0xNzQte1xcbi0tXFxua2VybmVsL3JjdS90YXNrcy5oPTEwMTU9c3RhdGljIHZvaWQgcmN1X3Rhc2tzX3BlcnRhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0LCBzdHJ1Y3QgbGlzdF9oZWFkICpob3ApXFxuLS1cXG5rZXJuZWwvcmN1L3Rhc2tzLmgtMTAyNC1cXG5rZXJuZWwvcmN1L3Rhc2tzLmg6MTAyNTp2b2lkIGNhbGxfcmN1X3Rhc2tzKHN0cnVjdCByY3VfaGVhZCAqcmhwLCByY3VfY2FsbGJhY2tfdCBmdW5jKTtcXG5rZXJuZWwvcmN1L3Rhc2tzLmgtMTAyNi1ERUZJTkVfUkNVX1RBU0tTKHJjdV90YXNrcywgcmN1X3Rhc2tzX3dhaXRfZ3AsIGNhbGxfcmN1X3Rhc2tzLCBcXFwiUkNVIFRhc2tzXFxcIik7XFxuLS1cXG5rZXJuZWwvcmN1L3Rhc2tzLmg9MTE2MT1zdGF0aWMgdm9pZCB0YXNrc19yY3VfZXhpdF9zdGFsbChzdHJ1Y3QgdGltZXJfbGlzdCAqdW51c2VkKVxcbi0tXFxua2VybmVsL3JjdS90YXNrcy5oLTExOTMtICovXFxua2VybmVsL3JjdS90YXNrcy5oOjExOTQ6dm9pZCBjYWxsX3JjdV90YXNrcyhzdHJ1Y3QgcmN1X2hlYWQgKnJocCwgcmN1X2NhbGxiYWNrX3QgZnVuYylcXG5rZXJuZWwvcmN1L3Rhc2tzLmgtMTE5NS17XFxuLS1cXG5rZXJuZWwvcmN1L3Rhc2tzLmg9MTE5OD1FWFBPUlRfU1lNQk9MX0dQTChjYWxsX3JjdV90YXNrcyk7XFxuLS1cXG5rZXJuZWwvcmN1L3Rhc2tzLmgtMTIxNy0gKi9cXG5rZXJuZWwvcmN1L3Rhc2tzLmg6MTIxODp2b2lkIHN5bmNocm9uaXplX3JjdV90YXNrcyh2b2lkKVxcbmtlcm5lbC9yY3UvdGFza3MuaC0xMjE5LXtcXG4tLVxcbmtlcm5lbC9yY3UvdGFza3MuaD0xMjIyPUVYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3JjdV90YXNrcyk7XFxuLS1cXG5rZXJuZWwvcmN1L3Rhc2tzLmgtMTIyOS0gKi9cXG5rZXJuZWwvcmN1L3Rhc2tzLmg6MTIzMDp2b2lkIHJjdV9iYXJyaWVyX3Rhc2tzKHZvaWQpXFxua2VybmVsL3JjdS90YXNrcy5oLTEyMzEte1xcbi0tXFxua2VybmVsL3JjdS90YXNrcy5oPTEyMzk9c3RhdGljIGludCBfX2luaXQgcmN1X3NwYXduX3Rhc2tzX2t0aHJlYWQodm9pZClcXG4tLVxcbmtlcm5lbC9yY3UvdGFza3MuaC0xMjU1LSNpZiAhZGVmaW5lZChDT05GSUdfVElOWV9SQ1UpXFxua2VybmVsL3JjdS90YXNrcy5oOjEyNTY6dm9pZCBzaG93X3JjdV90YXNrc19jbGFzc2ljX2dwX2t0aHJlYWQodm9pZClcXG5rZXJuZWwvcmN1L3Rhc2tzLmgtMTI1Ny17XFxuLS1cXG5rZXJuZWwvcmN1L3Rhc2tzLmg9MTI2MD1FWFBPUlRfU1lNQk9MX0dQTChzaG93X3JjdV90YXNrc19jbGFzc2ljX2dwX2t0aHJlYWQpO1xcbmtlcm5lbC9yY3UvdGFza3MuaC0xMjYxLVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMzozMTo1Ni45MDQxODczMDlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODI1NDIyOTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipSQ1UgSW52ZXN0aWdhdGlvbjogRm9jdXMgU2hpZnQqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBkaXZpbmcgaW50byBSQ1UgbW9kaWZpY2F0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYW55IGNoYW5nZXMgdG8gYGNhbGxfcmN1X3Rhc2tzYCBvciBgY2FsbF9yY3VfdGFza3NfdHJhY2VgLiBUaG9zZSBhcmUga2V5IGZ1bmN0aW9ucyB3aGVuIHlvdSdyZSBsb29raW5nIGF0IHNjaGVkdWxpbmcgYW5kIHRyYWNpbmcgaW1wYWN0cy4gQnV0IHdhaXQgYSBtaW51dGUuLi4gaXQgbG9va3MgbGlrZSB0aG9zZSB0d28gZnVuY3Rpb25zIGFyZSB1bnRvdWNoZWQuIFRoYXQgbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIG1vZGlmaWNhdGlvbnMgZGlyZWN0bHkgd2l0aGluIGBjYWxsX3JjdWAgYW5kIGBjYWxsX3NyY3VgLlxuXG5BbHJpZ2h0LCBhIG1vcmUgZ3JhbnVsYXIgYW5hbHlzaXMgaXMgbmVlZGVkLiBNeSBuZXh0IHN0ZXAgaXMgdG8gaGVhZCBkaXJlY3RseSB0byBga2VybmVsL3JjdS90cmVlLmNgLCBiZWNhdXNlIHRoYXQncyB3aGVyZSBgY2FsbF9yY3VgIGxpdmVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgY2hhbmdlZCBpbiB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgcm9vdCBjYXVzZSBsaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTM0NCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDEzOjMyOjA0LjcyOTYxNDM4OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDI1NzkwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHZvaWR8aW50fGJvb2wpIFthLXowLTlfXStcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvcmN1L3RyZWUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvcmN1L3RyZWUuYz04MT1zdGF0aWMgREVGSU5FX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQoc3RydWN0IHJjdV9kYXRhLCByY3VfZGF0YSkgPSB7XFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYy04NC1cXG5rZXJuZWwvcmN1L3RyZWUuYzo4NTppbnQgcmN1X2dldF9ncHdyYXBfY291bnQoaW50IGNwdSlcXG5rZXJuZWwvcmN1L3RyZWUuYy04Ni17XFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYz0xOTU9bW9kdWxlX3BhcmFtKHJjdV91bmxvY2tfZGVsYXksIGludCwgMDQ0NCk7XFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYy0xOTgtLyogUmV0cmlldmUgUkNVIGt0aHJlYWRzIHByaW9yaXR5IGZvciByY3V0b3J0dXJlICovXFxua2VybmVsL3JjdS90cmVlLmM6MTk5OmludCByY3VfZ2V0X2dwX2t0aHJlYWRzX3ByaW8odm9pZClcXG5rZXJuZWwvcmN1L3RyZWUuYy0yMDAte1xcbi0tXFxua2VybmVsL3JjdS90cmVlLmM9MjMwPXN0YXRpYyBsb25nIHJjdV9nZXRfbl9jYnNfY3B1KGludCBjcHUpXFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYy0yNjItICovXFxua2VybmVsL3JjdS90cmVlLmM6MjYzOnZvaWQgcmN1X3NvZnRpcnFfcXModm9pZClcXG5rZXJuZWwvcmN1L3RyZWUuYy0yNjQte1xcbi0tXFxua2VybmVsL3JjdS90cmVlLmM9MzEzPXN0YXRpYyBib29sIHJjdV93YXRjaGluZ19zbmFwX3N0b3BwZWRfc2luY2Uoc3RydWN0IHJjdV9kYXRhICpyZHAsIGludCBzbmFwKVxcbi0tXFxua2VybmVsL3JjdS90cmVlLmMtMzMyLSAqL1xcbmtlcm5lbC9yY3UvdHJlZS5jOjMzMzpib29sIHJjdV93YXRjaGluZ196ZXJvX2luX2VxcyhpbnQgY3B1LCBpbnQgKnZwKVxcbmtlcm5lbC9yY3UvdHJlZS5jLTMzNC17XFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYz01NDQ9c3RhdGljIHN0cnVjdCByY3Vfbm9kZSAqcmN1X2dldF9yb290KHZvaWQpXFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYy01NTEtICovXFxua2VybmVsL3JjdS90cmVlLmM6NTUyOnZvaWQgcmN1dG9ydHVyZV9nZXRfZ3BfZGF0YShpbnQgKmZsYWdzLCB1bnNpZ25lZCBsb25nICpncF9zZXEpXFxua2VybmVsL3JjdS90cmVlLmMtNTUzLXtcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jPTU2Nj1FWFBPUlRfU1lNQk9MX0dQTChyY3V0b3J0dXJlX2dhdGhlcl9ncF9zZXFzKTtcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jLTU2OC0vKiBGb3JtYXQgZ3JhY2UtcGVyaW9kIHNlcXVlbmNlIG51bWJlcnMgZm9yIHJjdXRvcnR1cmUgZGlhZ25vc3RpY3MuICovXFxua2VybmVsL3JjdS90cmVlLmM6NTY5OnZvaWQgcmN1dG9ydHVyZV9mb3JtYXRfZ3Bfc2Vxcyh1bnNpZ25lZCBsb25nIGxvbmcgc2VxcywgY2hhciAqY3AsIHNpemVfdCBsZW4pXFxua2VybmVsL3JjdS90cmVlLmMtNTcwLXtcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jPTYwMT1ub2luc3RyIHZvaWQgcmN1X2lycV93b3JrX3Jlc2NoZWQodm9pZClcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jLTYyMi0gKi9cXG5rZXJuZWwvcmN1L3RyZWUuYzo2MjM6dm9pZCByY3VfaXJxX2V4aXRfY2hlY2tfcHJlZW1wdCh2b2lkKVxcbmtlcm5lbC9yY3UvdHJlZS5jLTYyNC17XFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYy02NjMtICovXFxua2VybmVsL3JjdS90cmVlLmM6NjY0OnZvaWQgX19yY3VfaXJxX2VudGVyX2NoZWNrX3RpY2sodm9pZClcXG5rZXJuZWwvcmN1L3RyZWUuYy02NjUte1xcbi0tXFxua2VybmVsL3JjdS90cmVlLmM9Njk4PU5PS1BST0JFX1NZTUJPTChfX3JjdV9pcnFfZW50ZXJfY2hlY2tfdGljayk7XFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYy03MTEtICovXFxua2VybmVsL3JjdS90cmVlLmM6NzEyOmludCByY3VfbmVlZHNfY3B1KHZvaWQpXFxua2VybmVsL3JjdS90cmVlLmMtNzEzLXtcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jPTc1OD1FWFBPUlRfU1lNQk9MX0dQTChyY3VfaXNfd2F0Y2hpbmcpO1xcbi0tXFxua2VybmVsL3JjdS90cmVlLmMtNzY2LSAqL1xcbmtlcm5lbC9yY3UvdHJlZS5jOjc2Nzp2b2lkIHJjdV9yZXF1ZXN0X3VyZ2VudF9xc190YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcXG5rZXJuZWwvcmN1L3RyZWUuYy03Njgte1xcbi0tXFxua2VybmVsL3JjdS90cmVlLmM9Nzc4PXN0YXRpYyB1bnNpZ25lZCBsb25nIHNlcV9ncHdyYXBfbGFnID0gVUxPTkdfTUFYIC8gNDtcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jLTc4NS0gKi9cXG5rZXJuZWwvcmN1L3RyZWUuYzo3ODY6dm9pZCByY3Vfc2V0X2dwd3JhcF9sYWcodW5zaWduZWQgbG9uZyBsYWdfZ3BzKVxcbmtlcm5lbC9yY3UvdHJlZS5jLTc4Ny17XFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYz0xMzQwPXN0YXRpYyBhdG9taWNfdCAqcmN1X2dwX3Nsb3dfc3VwcHJlc3M7XFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYy0xMzQyLS8qIFJlZ2lzdGVyIGEgY291bnRlciB0byBzdXBwcmVzcyBkZWJ1Z2dpbmcgZ3JhY2UtcGVyaW9kIGRlbGF5cy4gKi9cXG5rZXJuZWwvcmN1L3RyZWUuYzoxMzQzOnZvaWQgcmN1X2dwX3Nsb3dfcmVnaXN0ZXIoYXRvbWljX3QgKnJnc3NwKVxcbmtlcm5lbC9yY3UvdHJlZS5jLTEzNDQte1xcbi0tXFxua2VybmVsL3JjdS90cmVlLmM9MTM0OT1FWFBPUlRfU1lNQk9MX0dQTChyY3VfZ3Bfc2xvd19yZWdpc3Rlcik7XFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYy0xMzUxLS8qIFVucmVnaXN0ZXIgYSBjb3VudGVyLCB3aXRoIE5VTEwgZm9yIG5vdCBjYXJpbmcgd2hpY2guICovXFxua2VybmVsL3JjdS90cmVlLmM6MTM1Mjp2b2lkIHJjdV9ncF9zbG93X3VucmVnaXN0ZXIoYXRvbWljX3QgKnJnc3NwKVxcbmtlcm5lbC9yY3UvdHJlZS5jLTEzNTMte1xcbi0tXFxua2VybmVsL3JjdS90cmVlLmM9MTM3ND1zdGF0aWMgdW5zaWduZWQgbG9uZyBzbGVlcF9kdXJhdGlvbjtcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jLTEzNzYtLyogQWxsb3cgcmN1dG9ydHVyZSB0byBzdGFsbCB0aGUgZ3JhY2UtcGVyaW9kIGt0aHJlYWQuICovXFxua2VybmVsL3JjdS90cmVlLmM6MTM3Nzp2b2lkIHJjdV9ncF9zZXRfdG9ydHVyZV93YWl0KGludCBkdXJhdGlvbilcXG5rZXJuZWwvcmN1L3RyZWUuYy0xMzc4LXtcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jPTI1NzQ9c3RhdGljIHZvaWQgcmN1X2RvX2JhdGNoKHN0cnVjdCByY3VfZGF0YSAqcmRwKVxcbi0tXFxua2VybmVsL3JjdS90cmVlLmMtMjcyOS0gKi9cXG5rZXJuZWwvcmN1L3RyZWUuYzoyNzMwOnZvaWQgcmN1X3NjaGVkX2Nsb2NrX2lycShpbnQgdXNlcilcXG5rZXJuZWwvcmN1L3RyZWUuYy0yNzMxLXtcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jPTI3NjY9c3RhdGljIHZvaWQgZm9yY2VfcXNfcm5wKGludCAoKmYpKHN0cnVjdCByY3VfZGF0YSAqcmRwKSlcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jLTI4MjQtICovXFxua2VybmVsL3JjdS90cmVlLmM6MjgyNTp2b2lkIHJjdV9mb3JjZV9xdWllc2NlbnRfc3RhdGUodm9pZClcXG5rZXJuZWwvcmN1L3RyZWUuYy0yODI2LXtcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jPTMzMTQ9bW9kdWxlX3BhcmFtKGVuYWJsZV9yY3VfbGF6eSwgYm9vbCwgMDQ0NCk7XFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYy0zMzM1LSAqL1xcbmtlcm5lbC9yY3UvdHJlZS5jOjMzMzY6dm9pZCBjYWxsX3JjdV9odXJyeShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHJjdV9jYWxsYmFja190IGZ1bmMpXFxua2VybmVsL3JjdS90cmVlLmMtMzMzNy17XFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYz0zMzQwPUVYUE9SVF9TWU1CT0xfR1BMKGNhbGxfcmN1X2h1cnJ5KTtcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jLTM0MDEtICovXFxua2VybmVsL3JjdS90cmVlLmM6MzQwMjp2b2lkIGNhbGxfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCwgcmN1X2NhbGxiYWNrX3QgZnVuYylcXG5rZXJuZWwvcmN1L3RyZWUuYy0zNDAzLXtcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jPTM0MzA9c3RhdGljIHZvaWQgc3luY2hyb25pemVfcmN1X25vcm1hbCh2b2lkKVxcbi0tXFxua2VybmVsL3JjdS90cmVlLmMtMzUwMi0gKi9cXG5rZXJuZWwvcmN1L3RyZWUuYzozNTAzOnZvaWQgc3luY2hyb25pemVfcmN1KHZvaWQpXFxua2VybmVsL3JjdS90cmVlLmMtMzUwNC17XFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYz0zNTQwPUVYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX3JjdSk7XFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYy0zNTQ5LSAqL1xcbmtlcm5lbC9yY3UvdHJlZS5jOjM1NTA6dm9pZCBnZXRfY29tcGxldGVkX3N5bmNocm9uaXplX3JjdV9mdWxsKHN0cnVjdCByY3VfZ3Bfc2VxICpnc3ApXFxua2VybmVsL3JjdS90cmVlLmMtMzU1MS17XFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYz0zNTczPUVYUE9SVF9TWU1CT0xfR1BMKGdldF9zdGF0ZV9zeW5jaHJvbml6ZV9yY3UpO1xcbi0tXFxua2VybmVsL3JjdS90cmVlLmMtMzU5MC0gKi9cXG5rZXJuZWwvcmN1L3RyZWUuYzozNTkxOnZvaWQgZ2V0X3N0YXRlX3N5bmNocm9uaXplX3JjdV9mdWxsKHN0cnVjdCByY3VfZ3Bfc2VxICpnc3ApXFxua2VybmVsL3JjdS90cmVlLmMtMzU5Mi17XFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYz0zNjUxPUVYUE9SVF9TWU1CT0xfR1BMKHN0YXJ0X3BvbGxfc3luY2hyb25pemVfcmN1KTtcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jLTM2NjMtICovXFxua2VybmVsL3JjdS90cmVlLmM6MzY2NDp2b2lkIHN0YXJ0X3BvbGxfc3luY2hyb25pemVfcmN1X2Z1bGwoc3RydWN0IHJjdV9ncF9zZXEgKmdzcClcXG5rZXJuZWwvcmN1L3RyZWUuYy0zNjY1LXtcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jPTM2NzA9RVhQT1JUX1NZTUJPTF9HUEwoc3RhcnRfcG9sbF9zeW5jaHJvbml6ZV9yY3VfZnVsbCk7XFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYy0zNzA0LSAqL1xcbmtlcm5lbC9yY3UvdHJlZS5jOjM3MDU6Ym9vbCBwb2xsX3N0YXRlX3N5bmNocm9uaXplX3JjdSh1bnNpZ25lZCBsb25nIG9sZHN0YXRlKVxcbmtlcm5lbC9yY3UvdHJlZS5jLTM3MDYte1xcbi0tXFxua2VybmVsL3JjdS90cmVlLmM9MzcyMz1zdGF0aWMgYm9vbCBwb2xsX3N0YXRlX3N5bmNocm9uaXplX3JjdV9mdWxsX3Vub3JkZXJlZChzdHJ1Y3QgcmN1X2dwX3NlcSAqZ3NwKVxcbi0tXFxua2VybmVsL3JjdS90cmVlLmMtMzc2Ni0gKi9cXG5rZXJuZWwvcmN1L3RyZWUuYzozNzY3OmJvb2wgcG9sbF9zdGF0ZV9zeW5jaHJvbml6ZV9yY3VfZnVsbChzdHJ1Y3QgcmN1X2dwX3NlcSAqZ3NwKVxcbmtlcm5lbC9yY3UvdHJlZS5jLTM3Njgte1xcbi0tXFxua2VybmVsL3JjdS90cmVlLmM9Mzc3Nj1FWFBPUlRfU1lNQk9MX0dQTChwb2xsX3N0YXRlX3N5bmNocm9uaXplX3JjdV9mdWxsKTtcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jLTM3OTUtICovXFxua2VybmVsL3JjdS90cmVlLmM6Mzc5Njp2b2lkIGNvbmRfc3luY2hyb25pemVfcmN1KHVuc2lnbmVkIGxvbmcgb2xkc3RhdGUpXFxua2VybmVsL3JjdS90cmVlLmMtMzc5Ny17XFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYz0zODAxPUVYUE9SVF9TWU1CT0xfR1BMKGNvbmRfc3luY2hyb25pemVfcmN1KTtcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jLTM4MjItICovXFxua2VybmVsL3JjdS90cmVlLmM6MzgyMzp2b2lkIGNvbmRfc3luY2hyb25pemVfcmN1X2Z1bGwoc3RydWN0IHJjdV9ncF9zZXEgKmdzcClcXG5rZXJuZWwvcmN1L3RyZWUuYy0zODI0LXtcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jPTM5NzA9c3RhdGljIHZvaWQgcmN1X2JhcnJpZXJfaGFuZGxlcih2b2lkICpjcHVfaW4pXFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYy0zOTk1LSAqL1xcbmtlcm5lbC9yY3UvdHJlZS5jOjM5OTY6dm9pZCByY3VfYmFycmllcih2b2lkKVxcbmtlcm5lbC9yY3UvdHJlZS5jLTM5OTcte1xcbi0tXFxua2VybmVsL3JjdS90cmVlLmM9NDE4OD1zdGF0aWMgYm9vbCByY3VfcmRwX2NwdV9vbmxpbmUoc3RydWN0IHJjdV9kYXRhICpyZHApXFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYy00MTkyLVxcbmtlcm5lbC9yY3UvdHJlZS5jOjQxOTM6Ym9vbCByY3VfY3B1X29ubGluZShpbnQgY3B1KVxcbmtlcm5lbC9yY3UvdHJlZS5jLTQxOTQte1xcbi0tXFxua2VybmVsL3JjdS90cmVlLmM9NDQwNz1zdGF0aWMgdm9pZCByY3Vfc3Bhd25fcm5wX2t0aHJlYWRzKHN0cnVjdCByY3Vfbm9kZSAqcm5wKVxcbi0tXFxua2VybmVsL3JjdS90cmVlLmMtNDQyNi0gKi9cXG5rZXJuZWwvcmN1L3RyZWUuYzo0NDI3OmludCByY3V0cmVlX3ByZXBhcmVfY3B1KHVuc2lnbmVkIGludCBjcHUpXFxua2VybmVsL3JjdS90cmVlLmMtNDQyOC17XFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYy00NDc3LSAqL1xcbmtlcm5lbC9yY3UvdHJlZS5jOjQ0Nzg6Ym9vbCByY3VfY3B1X2JlZW5mdWxseW9ubGluZShpbnQgY3B1KVxcbmtlcm5lbC9yY3UvdHJlZS5jLTQ0Nzkte1xcbi0tXFxua2VybmVsL3JjdS90cmVlLmMtNDQ4OC0gKi9cXG5rZXJuZWwvcmN1L3RyZWUuYzo0NDg5OmludCByY3V0cmVlX29ubGluZV9jcHUodW5zaWduZWQgaW50IGNwdSlcXG5rZXJuZWwvcmN1L3RyZWUuYy00NDkwLXtcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jLTQ1MjEtICovXFxua2VybmVsL3JjdS90cmVlLmM6NDUyMjp2b2lkIHJjdXRyZWVfcmVwb3J0X2NwdV9zdGFydGluZyh1bnNpZ25lZCBpbnQgY3B1KVxcbmtlcm5lbC9yY3UvdHJlZS5jLTQ1MjMte1xcbi0tXFxua2VybmVsL3JjdS90cmVlLmMtNDU3OC0gKi9cXG5rZXJuZWwvcmN1L3RyZWUuYzo0NTc5OnZvaWQgcmN1dHJlZV9yZXBvcnRfY3B1X2RlYWQodm9pZClcXG5rZXJuZWwvcmN1L3RyZWUuYy00NTgwLXtcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jLTQ2MzMtICovXFxua2VybmVsL3JjdS90cmVlLmM6NDYzNDp2b2lkIHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3MoaW50IGNwdSlcXG5rZXJuZWwvcmN1L3RyZWUuYy00NjM1LXtcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jLTQ3MDAtICovXFxua2VybmVsL3JjdS90cmVlLmM6NDcwMTppbnQgcmN1dHJlZV9kZWFkX2NwdSh1bnNpZ25lZCBpbnQgY3B1KVxcbmtlcm5lbC9yY3UvdHJlZS5jLTQ3MDIte1xcbi0tXFxua2VybmVsL3JjdS90cmVlLmMtNDcxMy0gKi9cXG5rZXJuZWwvcmN1L3RyZWUuYzo0NzE0OmludCByY3V0cmVlX2R5aW5nX2NwdSh1bnNpZ25lZCBpbnQgY3B1KVxcbmtlcm5lbC9yY3UvdHJlZS5jLTQ3MTUte1xcbi0tXFxua2VybmVsL3JjdS90cmVlLmMtNDcyOS0gKi9cXG5rZXJuZWwvcmN1L3RyZWUuYzo0NzMwOmludCByY3V0cmVlX29mZmxpbmVfY3B1KHVuc2lnbmVkIGludCBjcHUpXFxua2VybmVsL3JjdS90cmVlLmMtNDczMS17XFxuLS1cXG5rZXJuZWwvcmN1L3RyZWUuYz00ODEyPWVhcmx5X2luaXRjYWxsKHJjdV9zcGF3bl9ncF9rdGhyZWFkKTtcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jLTQ4MjMtICovXFxua2VybmVsL3JjdS90cmVlLmM6NDgyNDp2b2lkIHJjdV9zY2hlZHVsZXJfc3RhcnRpbmcodm9pZClcXG5rZXJuZWwvcmN1L3RyZWUuYy00ODI1LXtcXG4tLVxcbmtlcm5lbC9yY3UvdHJlZS5jPTQ5MzU9c3RhdGljIHZvaWQgX19pbml0IHNhbml0aXplX2t0aHJlYWRfcHJpbyh2b2lkKVxcbi0tXFxua2VybmVsL3JjdS90cmVlLmMtNDk1OC0gKi9cXG5rZXJuZWwvcmN1L3RyZWUuYzo0OTU5OnZvaWQgcmN1X2luaXRfZ2VvbWV0cnkodm9pZClcXG5rZXJuZWwvcmN1L3RyZWUuYy00OTYwLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTM6MzI6MDQuODA5ODc5MzE2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjE1NjAxNTYyODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gUkNVL1NSQ1UgQ29uY3VycmVuY3kgQnVnIEZpeGVzKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBvZiB0aGUgcHJvYmxlbSBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCByZS1lbnRyYW5jeSBpc3N1ZXMgaW4gUkNVL1NSQ1UgZHVlIHRvIG1vZGlmaWNhdGlvbnMgcmVsYXRlZCB0byBkZWZlcnJlZCBkcmFpbmluZywgcGFydGljdWxhcmx5IHdoZW4gaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBwbGFjZXMgdG8gZm9jdXMgZnV6emluZyBlZmZvcnRzLCBiYWxhbmNpbmcgdGFyZ2V0ZWQgY292ZXJhZ2Ugd2l0aCBhdm9pZGluZyBvdmVyYnJvYWQsIGdlbmVyaWMgZnVuY3Rpb25zIHRoYXQgbWlnaHQgc2tldyB0aGUgdGVzdHMuXG5cblRoZSBpbml0aWFsIGltcHVsc2Ugd2FzIHRvIHplcm8gaW4gb24gYGNhbGxfcmN1YCBhbmQgYGNhbGxfc3JjdWAsIGFzIHRoZXkncmUgdGhlIGhlYXZpbHktbW9kaWZpZWQgZnVuY3Rpb25zLiBIb3dldmVyLCB0aGUgaW5zdHJ1Y3Rpb25zIGV4cGxpY2l0bHkgYWR2aXNlIGFnYWluc3QgbGlzdGluZyBcImdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLlwiIFRob3VnaCB0aGVzZSBhcmUgd2hlcmUgdGhlIHBhdGNoJ3MgY29yZSBsb2dpYyBjaGFuZ2Ugb2NjdXJzLCBhbmQgdGhlIGlzc3VlIGlzIHNwZWNpZmljYWxseSBhYm91dCByZS1lbnRyYW5jeSBpbiB0aGVzZSBmdW5jdGlvbnMsIGxpc3RpbmcgdGhlbSB3b3VsZCBiZSB0b28gYnJvYWQuXG5cbkluc3RlYWQsIEknbGwgY29uY2VudHJhdGUgb24gdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBhZmZlY3RlZCBhbmQgY2FuIHByb3ZpZGUgYmV0dGVyIHRhcmdldGluZy4gVGhpcyBpbmNsdWRlcyBgcmN1X2JhcnJpZXJgLCBgc3JjdV9iYXJyaWVyYCwgYHNyY3Vfb2ZmbGluZV9kcmFpbmAsIGFuZCBgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc2AuIFRoZXNlIGFyZSBmdW5jdGlvbnMgdGhhdCBhcmUgbW9kaWZpZWQgYnV0IGFyZSBub3QgZ2VuZXJpYyBob3QtcGF0aHMuIGBzcmN1X29mZmxpbmVfZHJhaW5gIGFuZCBgcmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc2AgYXJlIGtleSwgZ2l2ZW4gdGhlIG9mZmxpbmUgQ1BVIGFuZCB0cmVlIG1hbmFnZW1lbnQgY29udGV4dC5cblxuTm93LCBjb25zaWRlcmluZyB0aGUgcGF0Y2gncyB1c2Ugb2YgYHJjdXRvcnR1cmUuY2AsIGFuZCB0aGUgYHNob3VsZF9yY3VfZGVmZXIoKWAgbG9naWMgcmVsYXRlZCB0byBgaXJxc19kaXNhYmxlZCgpYCBhbmQgYHJjdV9zY2hlZHVsZXJfYWN0aXZlYCwgSSdsbCBuZWVkIHRvIGVuYWJsZSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gZmxhZ3MuIGBSQ1VfVE9SVFVSRV9URVNUYCBpcyBhIG11c3QsIGdpdmVuIHRoZSBkaXJlY3QgY2hhbmdlcyB0byB0aGUgdGVzdCBjb2RlLiBBbHNvLCBgUEVSRl9FVkVOVFNgIGlzIHJlcXVpcmVkIGZvciB0aGUgTk1JLWJhc2VkIHRlc3RzIHdpdGhpbiBgcmN1dG9ydHVyZS5jYCwgc28gSSdsbCBpbmNsdWRlIGl0LlxuXG5TaW5jZSB0aGUgcGF0Y2ggaW5jbHVkZXMgYFdBUk5fT05DRShJU19FTkFCTEVEKENPTkZJR19QUk9WRV9SQ1UpLCAuLi4pYCBzdGF0ZW1lbnRzLCBJJ2xsIGFkZCBgUFJPVkVfUkNVYCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgIHRvIGVuc3VyZSB0aGlzIGNoZWNrIGlzIGFjdGl2ZSBhbmQgdGhhdCB0aGUgdGVzdGluZyBpcyBjb21wcmVoZW5zaXZlLlxuXG5JbiBzdW1tYXJ5LCB0aGUgYEZvY3VzU3ltYm9sc2Agd2lsbCBiZTpcblxuKiAgIGByY3VfYmFycmllcmBcbiogICBgc3JjdV9iYXJyaWVyYFxuKiAgIGBzcmN1X29mZmxpbmVfZHJhaW5gXG4qICAgYHJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NgXG5cbkFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIHdpbGwgYmU6XG5cbiogICBgUkNVX1RPUlRVUkVfVEVTVGBcbiogICBgUEVSRl9FVkVOVFNgXG4qICAgYFBST1ZFX1JDVWBcblxuVGhpcyBzZXR1cCBzaG91bGQgcHJvdmlkZSBmb2N1c2VkIGZ1enppbmcgb24gdGhlIG1vZGlmaWVkIFJDVS9TUkNVIGZ1bmN0aW9ucywgYW5kIGFsc28gZW5zdXJlIHRoZSBuZXcgdG9ydHVyZSB0ZXN0cyBhcmUgYWN0aXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTIwMiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTM6MzI6MjYuMzcwMDM4MzNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU0MTc4Mjc1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUFJPVkVfUkNVXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvcmN1L0tjb25maWcuZGVidWc9Nj1tZW51IFxcXCJSQ1UgRGVidWdnaW5nXFxcIlxcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zy03LVxcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zzo4OmNvbmZpZyBQUk9WRV9SQ1VcXG5rZXJuZWwvcmN1L0tjb25maWcuZGVidWctOS1cXHRkZWZfYm9vbCBQUk9WRV9MT0NLSU5HXFxua2VybmVsL3JjdS9LY29uZmlnLmRlYnVnLTEwLVxcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1ZzoxMTpjb25maWcgUFJPVkVfUkNVX0xJU1RcXG5rZXJuZWwvcmN1L0tjb25maWcuZGVidWctMTItXFx0Ym9vbCBcXFwiUkNVIGxpc3QgbG9ja2RlcCBkZWJ1Z2dpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDEzOjMyOjI4LjkxMTgyNTYxNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MzQzNzIxODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6XG5cbioqUkNVIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLiBgUFJPVkVfUkNVYC4uLiByaWdodCwgaXQncyBkZWZpbmVkIGFzIGBkZWZfYm9vbCBQUk9WRV9MT0NLSU5HYC4gVGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZC4gU28sIGlmIHdlIHdhbnQgYFBST1ZFX1JDVWAgdG8gYmUgYWN0aXZlLCB3ZSAqbXVzdCogYWxzbyBlbmFibGUgYFBST1ZFX0xPQ0tJTkdgLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IHRoZSBSQ1UgcHJvdmluZyBncm91bmQgcmVsaWVzIG9uIHRoZSBpbmZyYXN0cnVjdHVyZSBwcm92aWRlZCBieSB0aGUgbG9ja2luZyBwcm92aW5nIHN5c3RlbS5cblxuTm93LCB3aGVyZSBkb2VzIHRoYXQgbGVhdmUgdXM/IEkgdGhpbmsgaXQncyB0aW1lIHRvIGNoZWNrIHRoZSBzdGF0ZSBvZiBgUkNVX1RPUlRVUkVfVEVTVGAuIEkgbmVlZCB0byBlbnN1cmUgd2UndmUgZ290IHRoZSBuZWNlc3NhcnkgaW5mcmFzdHJ1Y3R1cmUgaW4gcGxhY2UgZm9yIHByb3BlciB0ZXN0aW5nLiBXZSBkb24ndCB3YW50IHRvIGdldCBjYXVnaHQgb2ZmLWd1YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzQ1MCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDEzOjMyOjMyLjc0NjIwMTAzMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzMjY4MzQwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUkNVX1RPUlRVUkVfVEVTVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3JjdS9LY29uZmlnLmRlYnVnPTI2PWNvbmZpZyBSQ1VfU0NBTEVfVEVTVFxcbi0tXFxua2VybmVsL3JjdS9LY29uZmlnLmRlYnVnLTQwLVxcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zzo0MTpjb25maWcgUkNVX1RPUlRVUkVfVEVTVFxcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zy00Mi1cXHR0cmlzdGF0ZSBcXFwidG9ydHVyZSB0ZXN0cyBmb3IgUkNVXFxcIlxcbi0tXFxua2VybmVsL3JjdS9LY29uZmlnLmRlYnVnLTU1LVxcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zzo1Njpjb25maWcgUkNVX1RPUlRVUkVfVEVTVF9DSEtfUkRSX1NUQVRFXFxua2VybmVsL3JjdS9LY29uZmlnLmRlYnVnLTU3LVxcdGJvb2wgXFxcIkNoZWNrIHJjdXRvcnR1cmUgcmVhZGVyIHN0YXRlXFxcIlxcbi0tXFxua2VybmVsL3JjdS9LY29uZmlnLmRlYnVnLTcxLVxcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zzo3Mjpjb25maWcgUkNVX1RPUlRVUkVfVEVTVF9MT0dfQ1BVXFxua2VybmVsL3JjdS9LY29uZmlnLmRlYnVnLTczLVxcdGJvb2wgXFxcIkxvZyBDUFUgZm9yIHJjdXRvcnR1cmUgZmFpbHVyZXNcXFwiXFxuLS1cXG5rZXJuZWwvcmN1L0tjb25maWcuZGVidWctODYtXFxua2VybmVsL3JjdS9LY29uZmlnLmRlYnVnOjg3OmNvbmZpZyBSQ1VfVE9SVFVSRV9URVNUX0xPR19HUFxcbmtlcm5lbC9yY3UvS2NvbmZpZy5kZWJ1Zy04OC1cXHRib29sIFxcXCJMb2cgZ3JhY2UtcGVyaW9kIG51bWJlcnMgZm9yIHJjdXRvcnR1cmUgZmFpbHVyZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDEzOjMyOjM0Ljk3ODk0ODMwNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Njk0MDAyNTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyB0aGUgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBgUkNVX1RPUlRVUkVfVEVTVGAuIEkgdW5kZXJzdGFuZCB0aGF0J3MgYSB0cmlzdGF0ZSBvcHRpb24sIG1lYW5pbmcgaXQgY2FuIGJlIGVpdGhlciBlbmFibGVkLCBkaXNhYmxlZCwgb3IgYnVpbHQgYXMgYSBtb2R1bGUuIEludGVyZXN0aW5nLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHdoZXRoZXIgd2UgY2FuIGFjdHVhbGx5IGVuYWJsZSBpdCBmb3IgdGhlIHNpdHVhdGlvbiB3ZSdyZSBpbi4gVGhpcyBpcyBnb2luZyB0byBkZXBlbmQgb24gYSBsb3Qgb2YgdGhpbmdzLiBCZWZvcmUgSSBkaXZlIGluIHRvbyBkZWVwIG9uIFJDVSwgSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIGxvb2sgYXQgdGhlIGBQRVJGX0VWRU5UU2Agb3B0aW9uLiBJdCBjb3VsZCBiZSByZWxldmFudCwgZm9yIGFsbCBraW5kcyBvZiByZWFzb25zLiBBcmUgdGhleSBlbmFibGVkPyBEbyB0aGV5IGludGVyZmVyZT8gRG9lcyB0aGUgYnVpbGQgZW52aXJvbm1lbnQgZXZlbiBzdXBwb3J0IGJvdGg/IEl0IHNlZW1zIGxpa2UgYFBFUkZfRVZFTlRTYCBpcyBhIHBvdGVudGlhbCBwaWVjZSBvZiB0aGUgbGFyZ2VyIHBpY3R1cmUsIGRlcGVuZGluZyBvbiBob3cgdGhpcyB0ZXN0IGlzIGdvaW5nIHRvIGJlIHVzZWQgYW5kIHdoZXJlIGFuZCBob3cgd2Ugd2lsbCBnYXRoZXIgaW5zaWdodHMgaW50byBpdHMgcmVzdWx0cy4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgcmVsYXRlIGJlZm9yZSBJIHNwZW5kIHRvbyBtdWNoIHRpbWUgb24gdGhlIHRvcnR1cmUgdGVzdCBpdHNlbGYuIExldCdzIG1ha2Ugc3VyZSBgUEVSRl9FVkVOVFNgIGlzIGluIHRoZSByaWdodCBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODAxMSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDEzOjMyOjQxLjY3Mjk1NTE1OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzODA2OTQxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUEVSRl9FVkVOVFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2V2ZW50cy9LY29uZmlnPTI9bWVudSBcXFwiUGVyZm9ybWFuY2UgbW9uaXRvcmluZ1xcXCJcXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0zLVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnOjQ6Y29uZmlnIFBFUkZfRVZFTlRTX0lOVEVMX1VOQ09SRVxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTUtXFx0dHJpc3RhdGUgXFxcIkludGVsIHVuY29yZSBwZXJmb3JtYW5jZSBldmVudHNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0xMS1cXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZzoxMjpjb25maWcgUEVSRl9FVkVOVFNfSU5URUxfUkFQTFxcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTEzLVxcdHRyaXN0YXRlIFxcXCJJbnRlbC9BTUQgcmFwbCBwZXJmb3JtYW5jZSBldmVudHNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0xOS1cXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZzoyMDpjb25maWcgUEVSRl9FVkVOVFNfSU5URUxfQ1NUQVRFXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMjEtXFx0dHJpc3RhdGUgXFxcIkludGVsIGNzdGF0ZSBwZXJmb3JtYW5jZSBldmVudHNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0yNy1cXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZzoyODpjb25maWcgUEVSRl9FVkVOVFNfQU1EX1BPV0VSXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMjktXFx0ZGVwZW5kcyBvbiBQRVJGX0VWRU5UUyBcXHUwMDI2XFx1MDAyNiBDUFVfU1VQX0FNRFxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWctMzYtXFxuYXJjaC94ODYvZXZlbnRzL0tjb25maWc6Mzc6Y29uZmlnIFBFUkZfRVZFTlRTX0FNRF9VTkNPUkVcXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy0zOC1cXHR0cmlzdGF0ZSBcXFwiQU1EIFVuY29yZSBwZXJmb3JtYW5jZSBldmVudHNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZy00Ny1cXG5hcmNoL3g4Ni9ldmVudHMvS2NvbmZpZzo0ODpjb25maWcgUEVSRl9FVkVOVFNfQU1EX0JSU1xcbmFyY2gveDg2L2V2ZW50cy9LY29uZmlnLTQ5LVxcdGRlcGVuZHMgb24gUEVSRl9FVkVOVFMgXFx1MDAyNlxcdTAwMjYgQ1BVX1NVUF9BTURcXG4tLVxcbmluaXQvS2NvbmZpZz0yMTc1PW1lbnUgXFxcIktlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzXFxcIlxcbmluaXQvS2NvbmZpZy0yMTc2LVxcbmluaXQvS2NvbmZpZzoyMTc3OmNvbmZpZyBQRVJGX0VWRU5UU1xcbmluaXQvS2NvbmZpZy0yMTc4LVxcdGJvb2wgXFxcIktlcm5lbCBwZXJmb3JtYW5jZSBldmVudHMgYW5kIGNvdW50ZXJzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxMzozMjo0My45MTEwMzAxOTNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE5NjI1MzI3OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUkNVL1NSQ1UgRGVmZXJyYWwgSW1wbGVtZW50YXRpb24gVGhvdWdodHMqKlxuXG5Pa2F5LCBzbyBgUEVSRl9FVkVOVFNgIGlzIGNvbmZpcm1lZCBhcyBhIGJvb2xlYW4gdmFsdWUuIFRoYXQgbWVhbnMgdGhlIGBFbmFibGVDb25maWdzYCB3aWxsIGNvbnNpc3Qgb2YgYFBST1ZFX0xPQ0tJTkdgLCBgUkNVX1RPUlRVUkVfVEVTVGAsIGFuZCwgb2YgY291cnNlLCBgUEVSRl9FVkVOVFNgLlxuXG5Ob3csIGZvciB0aGUgYEZvY3VzU3ltYm9sc2A6IGByY3VfYmFycmllcmAsIGBzcmN1X2JhcnJpZXJgLCBgc3JjdV9vZmZsaW5lX2RyYWluYCwgYW5kIGByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzYCBhcmUgdGhlIGtleSBmdW5jdGlvbnMgSSdtIGZvY3VzaW5nIG9uLlxuXG5XYWl0LCBgc3JjdV9kZWZlcl9kcmFpbmAgaXMgZXhwb3J0ZWQgZnJvbSBga2VybmVsL3JjdS9zcmN1dGlueS5jYC4gIEkgYWxtb3N0IG1pc3NlZCB0aGF0LiAgTG9va2luZyBhdCBpdHMgZGVmaW5pdGlvbjpcblxuYGBgY1xudm9pZCBzcmN1X2RlZmVyX2RyYWluKHN0cnVjdCBpcnFfd29yayAqaXcpXG5gYGBcblxuSXQncyBhbiBgaXJxX3dvcmtgIGNhbGxiYWNrLCBzbyBpdCdzIG5vdCB1c3VhbGx5IGNhbGxlZCBkaXJlY3RseSwgYnV0IHRoZSBmYWN0IHRoYXQgaXQncyBleHBvcnRlZCBtZWFucyBpdCAqY291bGQqIGJlIHVzZWQgZXh0ZXJuYWxseS4gSSBzaG91bGQgZGVmaW5pdGVseSBpbmNsdWRlIGl0LiBCZXR0ZXIgdG8gYmUgdGhvcm91Z2gsIEkgc3VwcG9zZS5cblxuTGV0J3MgZG8gYSBxdWljayBzY2FuIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBvdGhlciBleHBvcnRlZCBmdW5jdGlvbnMuICBBaCwgYGNhbGxfc3JjdWAgaXMgZXhwb3J0ZWQuIEhvd2V2ZXIsIGl0IGlzIGEgaG90IHBhdGggc28gSSB3b24ndCBpbmNsdWRlIGl0LlxuXG5BbHJpZ2h0LCBiYWNrIHRvIGBzcmN1X2RlZmVyX2RyYWluYC4gSSdsbCBnbyB3aXRoIGluY2x1ZGluZyB0aGF0IGluIHRoZSBzZXQuXG5cbk15IHJlYXNvbmluZyBoZXJlIGlzIHRoYXQgdGhlIG92ZXJhbGwgcGF0Y2ggYWRkcmVzc2VzIGEgY3JpdGljYWwgaXNzdWU6IGRlZmVycmluZyBgY2FsbF9yY3UoKWAgYW5kIGBjYWxsX3NyY3UoKWAgY2FsbGJhY2tzLCBlc3BlY2lhbGx5IHdoZW4gaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQuIFRoaXMgaXMgZXNzZW50aWFsIHRvIHByZXZlbnQgZGVhZGxvY2tzIGFuZCBwb3RlbnRpYWwgbGlzdCBjb3JydXB0aW9uIGR1cmluZyByZS1lbnRyYW50IGNhbGxzIOKAkyB0aGluayBCUEYgb3IgTk1Jcy4gVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgYGlycV93b3JrYCBhbmQgbG9ja2xlc3MgbGlzdHMgZm9yIHRoZSBkZWZlcnJhbC4gSXQncyBmdW5jdGlvbmFsLCB0aGUgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgdGhlc2UgY2hhbmdlcyB0b3VjaCBjb3JlIGtlcm5lbCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcywgc28gaXQncyBhIGNyaXRpY2FsIGFyZWEgdG8gYW5hbHl6ZS5cblxuSnVzdCBhIGZpbmFsIGNoZWNrLCBJIG5lZWQgdG8gdmVyaWZ5IGBzcmN1X29mZmxpbmVfZHJhaW5gLiBJJ2xsIGxvb2sgYXQgdGhlIGRlZmluaXRpb24gaW4gYGtlcm5lbC9yY3Uvc3JjdXRyZWUuY2A6XG5cbmBgYGNcbnZvaWQgc3JjdV9vZmZsaW5lX2RyYWluKGludCBjcHUpXG5gYGBcbkFsdGhvdWdoIGl0IGlzIG5vdCBleHBvcnRlZCwgaXQgaXMgY2FsbGVkIGJ5IGByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzYCB3aGljaCBpcyBpbiBga2VybmVsL3JjdS90cmVlLmNgLCBzbyBJIHNob3VsZCBiZSBnb29kIHRvIGluY2x1ZGUgaXQuXG5cbk9rYXksIEknbSBjb25maWRlbnQuIFRpbWUgdG8gdXNlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjozODgxMiwiT3V0cHV0VG9rZW5zIjoxODYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTM6MzI6NTUuODczNTY3ODQ5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2MTQ0Mzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUk9WRV9MT0NLSU5HXCIsXG4gICAgXCJSQ1VfVE9SVFVSRV9URVNUXCIsXG4gICAgXCJQRVJGX0VWRU5UU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJjdV9iYXJyaWVyXCIsXG4gICAgXCJzcmN1X2JhcnJpZXJcIixcbiAgICBcInNyY3Vfb2ZmbGluZV9kcmFpblwiLFxuICAgIFwicmN1dHJlZV9taWdyYXRlX2NhbGxiYWNrc1wiLFxuICAgIFwic3JjdV9kZWZlcl9kcmFpblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgUkNVIGFuZCBTUkNVIGxvZ2ljIHRvIGRlZmVyIGBjYWxsX3JjdSgpYCBhbmQgYGNhbGxfc3JjdSgpYCBjYWxsYmFja3Mgd2hlbiBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZC4gVGhpcyBwcmV2ZW50cyBkZWFkbG9ja3Mgb3IgbGlzdCBjb3JydXB0aW9uIGR1cmluZyByZS1lbnRyYW50IGNhbGxzIChlLmcuLCBmcm9tIEJQRiBwcm9ncmFtcyBvciBOTUlzKS4gSXQgaW50cm9kdWNlcyBhIG5ldyBkZWZlcnJhbCBtZWNoYW5pc20gdXNpbmcgYGlycV93b3JrYCBhbmQgbG9ja2xlc3MgbGlzdHMuIFRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsLCByZWFjaGFibGUsIGFuZCBhZmZlY3QgY29yZSBrZXJuZWwgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFJPVkVfTE9DS0lOR1wiLFxuICAgIFwiUkNVX1RPUlRVUkVfVEVTVFwiLFxuICAgIFwiUEVSRl9FVkVOVFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyY3VfYmFycmllclwiLFxuICAgIFwic3JjdV9iYXJyaWVyXCIsXG4gICAgXCJzcmN1X29mZmxpbmVfZHJhaW5cIixcbiAgICBcInJjdXRyZWVfbWlncmF0ZV9jYWxsYmFja3NcIixcbiAgICBcInNyY3VfZGVmZXJfZHJhaW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFJDVSBhbmQgU1JDVSBsb2dpYyB0byBkZWZlciBgY2FsbF9yY3UoKWAgYW5kIGBjYWxsX3NyY3UoKWAgY2FsbGJhY2tzIHdoZW4gaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQuIFRoaXMgcHJldmVudHMgZGVhZGxvY2tzIG9yIGxpc3QgY29ycnVwdGlvbiBkdXJpbmcgcmUtZW50cmFudCBjYWxscyAoZS5nLiwgZnJvbSBCUEYgcHJvZ3JhbXMgb3IgTk1JcykuIEl0IGludHJvZHVjZXMgYSBuZXcgZGVmZXJyYWwgbWVjaGFuaXNtIHVzaW5nIGBpcnFfd29ya2AgYW5kIGxvY2tsZXNzIGxpc3RzLiBUaGUgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCwgcmVhY2hhYmxlLCBhbmQgYWZmZWN0IGNvcmUga2VybmVsIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7w45t[1] Phase: Succeeded StartedAt: 2026-08-05 13:33:07 +0000 UTC FinishedAt: 2026-08-05 13:33:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7w45t[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-05 13:33:07 +0000 UTC FinishedAt: 2026-08-05 13:33:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7w45t[2] Phase: Succeeded StartedAt: 2026-08-05 13:33:07 +0000 UTC FinishedAt: 2026-08-05 14:26:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7w45t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","RCU_TORTURE_TEST","PERF_EVENTS"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","srcu_offline_drain","rcutree_migrate_callbacks","srcu_defer_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","RCU_TORTURE_TEST","PERF_EVENTS"],"series_id":"b70039bd-ccf0-4ffb-990d-965605a29dc1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-08-05 13:33:07 +0000 UTC FinishedAt: 2026-08-05 14:26:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","RCU_TORTURE_TEST","PERF_EVENTS"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","srcu_offline_drain","rcutree_migrate_callbacks","srcu_defer_drain"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","RCU_TORTURE_TEST","PERF_EVENTS"],"series_id":"b70039bd-ccf0-4ffb-990d-965605a29dc1","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-workflow7w45t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","RCU_TORTURE_TEST","PERF_EVENTS"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","srcu_offline_drain","rcutree_migrate_callbacks","srcu_defer_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","RCU_TORTURE_TEST","PERF_EVENTS"],"series_id":"b70039bd-ccf0-4ffb-990d-965605a29dc1","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-05 13:33:07 +0000 UTC FinishedAt: 2026-08-05 13:33:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7w45t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","RCU_TORTURE_TEST","PERF_EVENTS"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","srcu_offline_drain","rcutree_migrate_callbacks","srcu_defer_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","RCU_TORTURE_TEST","PERF_EVENTS"],"series_id":"b70039bd-ccf0-4ffb-990d-965605a29dc1","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-05 13:33:07 +0000 UTC FinishedAt: 2026-08-05 13:33:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","RCU_TORTURE_TEST","PERF_EVENTS"],"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-workflow7w45t/series-workflow7w45t-convert-artifact-2367015371/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7w45t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","RCU_TORTURE_TEST","PERF_EVENTS"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","srcu_offline_drain","rcutree_migrate_callbacks","srcu_defer_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","RCU_TORTURE_TEST","PERF_EVENTS"],"series_id":"b70039bd-ccf0-4ffb-990d-965605a29dc1","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-05 13:33:18 +0000 UTC FinishedAt: 2026-08-05 13:55:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7w45t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","RCU_TORTURE_TEST","PERF_EVENTS"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","srcu_offline_drain","rcutree_migrate_callbacks","srcu_defer_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","RCU_TORTURE_TEST","PERF_EVENTS"],"series_id":"b70039bd-ccf0-4ffb-990d-965605a29dc1","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-05 13:33:18 +0000 UTC FinishedAt: 2026-08-05 13:55:07 +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:*f1b0e451-0a62-4554-adc2-fe8b87a110ad,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-workflow7w45t/series-workflow7w45t-convert-artifact-2367015371/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": "07374c17-4200-4a3e-b3e0-2fa576208aac", "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-workflow7w45t/series-workflow7w45t-build-action-1842954441/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7w45t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","RCU_TORTURE_TEST","PERF_EVENTS"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","srcu_offline_drain","rcutree_migrate_callbacks","srcu_defer_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","RCU_TORTURE_TEST","PERF_EVENTS"],"series_id":"b70039bd-ccf0-4ffb-990d-965605a29dc1","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-05 13:33:18 +0000 UTC FinishedAt: 2026-08-05 13:54:57 +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:*f1b0e451-0a62-4554-adc2-fe8b87a110ad,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-workflow7w45t/series-workflow7w45t-convert-artifact-2367015371/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": "07374c17-4200-4a3e-b3e0-2fa576208aac", "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-workflow7w45t/series-workflow7w45t-build-action-1842954441/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7w45t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","RCU_TORTURE_TEST","PERF_EVENTS"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","srcu_offline_drain","rcutree_migrate_callbacks","srcu_defer_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","RCU_TORTURE_TEST","PERF_EVENTS"],"series_id":"b70039bd-ccf0-4ffb-990d-965605a29dc1","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-05 13:55:07 +0000 UTC FinishedAt: 2026-08-05 13:55:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7w45t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","RCU_TORTURE_TEST","PERF_EVENTS"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","srcu_offline_drain","rcutree_migrate_callbacks","srcu_defer_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","RCU_TORTURE_TEST","PERF_EVENTS"],"series_id":"b70039bd-ccf0-4ffb-990d-965605a29dc1","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-05 13:55:07 +0000 UTC FinishedAt: 2026-08-05 13:55:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7w45t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","RCU_TORTURE_TEST","PERF_EVENTS"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","srcu_offline_drain","rcutree_migrate_callbacks","srcu_defer_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","RCU_TORTURE_TEST","PERF_EVENTS"],"series_id":"b70039bd-ccf0-4ffb-990d-965605a29dc1","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-05 13:55:07 +0000 UTC FinishedAt: 2026-08-05 13:55:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7w45t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","RCU_TORTURE_TEST","PERF_EVENTS"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","srcu_offline_drain","rcutree_migrate_callbacks","srcu_defer_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","RCU_TORTURE_TEST","PERF_EVENTS"],"series_id":"b70039bd-ccf0-4ffb-990d-965605a29dc1","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-05 13:55:07 +0000 UTC FinishedAt: 2026-08-05 13:55:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","RCU_TORTURE_TEST","PERF_EVENTS"],"series_id":"b70039bd-ccf0-4ffb-990d-965605a29dc1","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-workflow7w45t/series-workflow7w45t-convert-artifact-2476693026/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7w45t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","RCU_TORTURE_TEST","PERF_EVENTS"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","srcu_offline_drain","rcutree_migrate_callbacks","srcu_defer_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","RCU_TORTURE_TEST","PERF_EVENTS"],"series_id":"b70039bd-ccf0-4ffb-990d-965605a29dc1","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-05 13:55:18 +0000 UTC FinishedAt: 2026-08-05 14:26:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7w45t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","RCU_TORTURE_TEST","PERF_EVENTS"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","srcu_offline_drain","rcutree_migrate_callbacks","srcu_defer_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","RCU_TORTURE_TEST","PERF_EVENTS"],"series_id":"b70039bd-ccf0-4ffb-990d-965605a29dc1","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-05 13:55:18 +0000 UTC FinishedAt: 2026-08-05 14:26:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*07374c17-4200-4a3e-b3e0-2fa576208aac,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-workflow7w45t/series-workflow7w45t-build-action-1842954441/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": false },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-workflow7w45t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","RCU_TORTURE_TEST","PERF_EVENTS"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","srcu_offline_drain","rcutree_migrate_callbacks","srcu_defer_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","RCU_TORTURE_TEST","PERF_EVENTS"],"series_id":"b70039bd-ccf0-4ffb-990d-965605a29dc1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Failed StartedAt: 2026-08-05 14:26:32 +0000 UTC FinishedAt: 2026-08-05 14:26:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7w45t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","RCU_TORTURE_TEST","PERF_EVENTS"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["rcu_barrier","srcu_barrier","srcu_offline_drain","rcutree_migrate_callbacks","srcu_defer_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0f6da28aab51b16762ed82e8fdeaa5042da45b08","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","RCU_TORTURE_TEST","PERF_EVENTS"],"series_id":"b70039bd-ccf0-4ffb-990d-965605a29dc1","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: Failed StartedAt: 2026-08-05 14:26:32 +0000 UTC FinishedAt: 2026-08-05 14:26:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}