Name: series-workflowwfsfp Phase: Succeeded StartedAt: 2026-07-27 11:24:43 +0000 UTC FinishedAt: 2026-07-27 16:50:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfsfp[0] Phase: Succeeded StartedAt: 2026-07-27 11:24:43 +0000 UTC FinishedAt: 2026-07-27 12:03:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfsfp[0].run-triage Phase: Succeeded StartedAt: 2026-07-27 11:24:43 +0000 UTC FinishedAt: 2026-07-27 12:03:20 +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": "53658c6f3682967a5e76ed4bc7462c4bdcddaec3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TLS" ], "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": "53658c6f3682967a5e76ed4bc7462c4bdcddaec3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TLS" ], "series_id": "63214efa-4d82-4af7-9b6f-1d69148280a3" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tls_sw_recvmsg", "tls_sw_splice_read", "tls_sw_read_sock" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RMUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Rsc19zd19yZWN2bXNnJiMzNDssCiAgICAmIzM0O3Rsc19zd19zcGxpY2VfcmVhZCYjMzQ7LAogICAgJiMzNDt0bHNfc3dfcmVhZF9zb2NrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUTFMgc29mdHdhcmUgcmVjZWl2ZSBwYXRoIHRvIHByb3Blcmx5IGhhbmRsZSB6ZXJvLWxlbmd0aCBhcHBsaWNhdGlvbl9kYXRhIHJlY29yZHMgKGVtcHR5IGRhdGEgcmVjb3JkcykgaW4gVExTIDEuMiBhbmQgVExTIDEuMy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgYHJlY3Ztc2dgLCBgc3BsaWNlX3JlYWRgLCBhbmQgYHJlYWRfc29ja2Agb3BlcmF0aW9ucyBvbiBUTFMgc29ja2V0cywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjowMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDg5ZmMyMjMwYjVjZDI0MjgwOTllM2NjNWUzYmIzOWVkZWFlN2JiMDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyNyAxMjowMjozMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdGxzL3Rsc19zdy5jIGIvbmV0L3Rscy90bHNfc3cuY1xuaW5kZXggZDRhZmM5MGZkNzk2NmUuLjBlNzZiMzFiMTI5MTRiIDEwMDY0NFxuLS0tIGEvbmV0L3Rscy90bHNfc3cuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Rscy90bHNfc3cuY1xuQEAgLTM3LDYgJiM0MzszNyw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnVnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1la2VlcGluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwbGljZS5oXHUwMDNlXG5AQCAtMTc4Nyw2ICYjNDM7MTc4OCwyNCBAQCBzdGF0aWMgdm9pZCB0bHNfcnhfcmVhZGVyX3VubG9jayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0bHNfc3dfY29udGV4dF9yeCAqY3R4KVxuIFx0cmVsZWFzZV9zb2NrKHNrKTtcbiB9XG4gXG4mIzQzOy8qIFRMUyAxLjIgYW5kIFRMUyAxLjMgYm90aCBwZXJtaXQgYSB6ZXJvLWxlbmd0aCBhcHBsaWNhdGlvbl9kYXRhXG4mIzQzOyAqIHJlY29yZCBhcyBhIHRyYWZmaWMtYW5hbHlzaXMgY291bnRlcm1lYXN1cmUgKFJGQyA1MjQ2LCBTZWN0aW9uXG4mIzQzOyAqIDYuMi4xOyBSRkMgODQ0NiwgU2VjdGlvbiA1LjEpLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGJvb2wgdGxzX3J4X2VtcHR5X2RhdGFfcmVjKGludCBsZW4sIHVuc2lnbmVkIGNoYXIgY29udHJvbClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAhbGVuIFx1MDAyNlx1MDAyNiBjb250cm9sID09IFRMU19SRUNPUkRfVFlQRV9EQVRBO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBzb2NrX2ludHJfZXJybm8oKSBtYXBzIHRoZSB6ZXJvIHRpbWVvIG9mIGEgcmVhZGVyIHRoYXQgY2Fubm90IHdhaXRcbiYjNDM7ICogdG8gLUVJTlRSLCBidXQgc3VjaCBhIHJlYWRlciBoYXMgbm8gYmxvY2tpbmcgdG8gaW50ZXJydXB0LiBUaGUgcmVzdFxuJiM0MzsgKiBvZiB0aGUgcmVjZWl2ZSBzaWRlIHJlcG9ydHMgdGhhdCBjYXNlIGFzIC1FQUdBSU4uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHRsc19yeF9pbnRyX2Vycm5vKGxvbmcgdGltZW8pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gdGltZW8gPyBzb2NrX2ludHJfZXJybm8odGltZW8pIDogLUVBR0FJTjtcbiYjNDM7fVxuJiM0MztcbiBpbnQgdGxzX3N3X3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLFxuIFx0XHQgICBzdHJ1Y3QgbXNnaGRyICptc2csXG4gXHRcdCAgIHNpemVfdCBsZW4sXG5AQCAtMTg1OCw5ICYjNDM7MTg3NywxMiBAQCBpbnQgdGxzX3N3X3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLFxuIFx0XHQgICAgdGxtLVx1MDAzZWNvbnRyb2wgPT0gVExTX1JFQ09SRF9UWVBFX0RBVEEpXG4gXHRcdFx0ZGFyZy56YyA9IHRydWU7XG4gXG4tXHRcdC8qIERvIG5vdCB1c2UgYXN5bmMgbW9kZSBpZiByZWNvcmQgaXMgbm9uLWRhdGEgKi9cbiYjNDM7XHRcdC8qIERvIG5vdCB1c2UgYXN5bmMgbW9kZSBpZiByZWNvcmQgaXMgbm9uLWRhdGEsIG9yIGlmIGl0XG4mIzQzO1x0XHQgKiBpcyBlbXB0eTogdGhlIHJlY2VpdmUgbG9vcCBmcmVlcyBhbiBlbXB0eSByZWNvcmQmIzM5O3Mgc2tiLFxuJiM0MztcdFx0ICogc28gaXRzIGRlY3J5cHRpb24gbXVzdCBoYXZlIGNvbXBsZXRlZC5cbiYjNDM7XHRcdCAqL1xuIFx0XHRpZiAodGxtLVx1MDAzZWNvbnRyb2wgPT0gVExTX1JFQ09SRF9UWVBFX0RBVEEpXG4tXHRcdFx0ZGFyZy5hc3luYyA9IGN0eC1cdTAwM2Vhc3luY19jYXBhYmxlO1xuJiM0MztcdFx0XHRkYXJnLmFzeW5jID0gY3R4LVx1MDAzZWFzeW5jX2NhcGFibGUgXHUwMDI2XHUwMDI2IHRvX2RlY3J5cHQ7XG4gXHRcdGVsc2VcbiBcdFx0XHRkYXJnLmFzeW5jID0gZmFsc2U7XG4gXG5AQCAtMTg5Niw2ICYjNDM7MTkxOCwyNyBAQCBpbnQgdGxzX3N3X3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRjaHVuayA9IHJ4bS1cdTAwM2VmdWxsX2xlbjtcbiBcdFx0dGxzX3J4X3JlY19kb25lKGN0eCk7XG4gXG4mIzQzO1x0XHQvKiBBbiBlbXB0eSByZWNvcmQgYWR2YW5jZXMgbmVpdGhlciBsb29wIGJvdW5kLCBzbyBhIGZsb29kXG4mIzQzO1x0XHQgKiBvZiB0aGVtIGNhbiBiZSBpbnRlcnJ1cHRlZCBvbmx5IGhlcmUuIE9uIHRoZSB6ZXJvLWNvcHlcbiYjNDM7XHRcdCAqIHBhdGggZGFyZy5za2IgaXMgdGhlIHN0cnBhcnNlciBhbmNob3IsIGFscmVhZHkgcmVsZWFzZWRcbiYjNDM7XHRcdCAqIGJ5IHRsc19yeF9yZWNfZG9uZSgpLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAodGxzX3J4X2VtcHR5X2RhdGFfcmVjKGNodW5rLCBjb250cm9sKSkge1xuJiM0MztcdFx0XHRsb25nIHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoIWRhcmcuemMpXG4mIzQzO1x0XHRcdFx0Y29uc3VtZV9za2IoZGFyZy5za2IpO1xuJiM0MztcbiYjNDM7XHRcdFx0LyogQW4gZW1wdHkgcmVjb3JkIHN0aWxsIG1hcmtzIGEgYm91bmRhcnkuICovXG4mIzQzO1x0XHRcdG1zZy1cdTAwM2Vtc2dfZmxhZ3MgfD0gTVNHX0VPUjtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xuJiM0MztcdFx0XHRcdGVyciA9IHRsc19yeF9pbnRyX2Vycm5vKHRpbWVvKTtcbiYjNDM7XHRcdFx0XHRnb3RvIHJlY3ZfZW5kO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0aWYgKCFkYXJnLnpjKSB7XG4gXHRcdFx0Ym9vbCBwYXJ0aWFsbHlfY29uc3VtZWQgPSBjaHVuayBcdTAwM2UgbGVuO1xuIFx0XHRcdHN0cnVjdCBza19idWZmICpza2IgPSBkYXJnLnNrYjtcbkBAIC0xOTkwLDIxICYjNDM7MjAzMywzMSBAQCBzc2l6ZV90IHRsc19zd19zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCAgbG9mZl90ICpwcG9zLFxuIFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cdTAwM2VzaztcbiBcdHN0cnVjdCB0bHNfbXNnICp0bG07XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiM0MztcdGJvb2wgcmVsZWFzZWQgPSB0cnVlO1xuIFx0c3NpemVfdCBjb3BpZWQgPSAwO1xuJiM0MztcdGJvb2wgbm9uYmxvY2s7XG4gXHRpbnQgY2h1bms7XG4gXHRpbnQgZXJyO1xuIFxuLVx0ZXJyID0gdGxzX3J4X3JlYWRlcl9sb2NrKHNrLCBjdHgsIGZsYWdzIFx1MDAyNiBTUExJQ0VfRl9OT05CTE9DSyk7XG4mIzQzO1x0bm9uYmxvY2sgPSAoZmxhZ3MgXHUwMDI2IFNQTElDRV9GX05PTkJMT0NLKSB8fFxuJiM0MztcdFx0ICAgKHNvY2stXHUwMDNlZmlsZS1cdTAwM2VmX2ZsYWdzIFx1MDAyNiBPX05PTkJMT0NLKTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gdGxzX3J4X3JlYWRlcl9sb2NrKHNrLCBjdHgsIG5vbmJsb2NrKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdHJldHVybiBlcnI7XG4gXG4mIzQzO1x0LyogSWYgY3J5cHRvIGZhaWxlZCB0aGUgY29ubmVjdGlvbiBpcyBicm9rZW4gKi9cbiYjNDM7XHRlcnIgPSBjdHgtXHUwMDNlYXN5bmNfd2FpdC5lcnI7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gc3BsaWNlX3JlYWRfZW5kO1xuJiM0MztcbiYjNDM7cmV0cnk6XG4gXHRpZiAoIXNrYl9xdWV1ZV9lbXB0eShcdTAwMjZjdHgtXHUwMDNlcnhfbGlzdCkpIHtcbiBcdFx0c2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZjdHgtXHUwMDNlcnhfbGlzdCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRzdHJ1Y3QgdGxzX2RlY3J5cHRfYXJnIGRhcmc7XG4gXG4tXHRcdGVyciA9IHRsc19yeF9yZWNfd2FpdChzaywgZmxhZ3MgXHUwMDI2IFNQTElDRV9GX05PTkJMT0NLLFxuLVx0XHRcdFx0ICAgICAgdHJ1ZSwgZmFsc2UpO1xuJiM0MztcdFx0ZXJyID0gdGxzX3J4X3JlY193YWl0KHNrLCBub25ibG9jaywgcmVsZWFzZWQsIGZhbHNlKTtcbiBcdFx0aWYgKGVyciBcdTAwM2M9IDApXG4gXHRcdFx0Z290byBzcGxpY2VfcmVhZF9lbmQ7XG4gXG5AQCAtMjAxNiw2ICYjNDM7MjA2OSwxMSBAQCBzc2l6ZV90IHRsc19zd19zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCAgbG9mZl90ICpwcG9zLFxuIFxuIFx0XHR0bHNfcnhfcmVjX2RvbmUoY3R4KTtcbiBcdFx0c2tiID0gZGFyZy5za2I7XG4mIzQzO1xuJiM0MztcdFx0LyogVGhlIHNvY2tldCBsb2NrIHN0YXlzIGhlbGQgdG8gdGhlIHJldHJ5LCBzbyB0aGVcbiYjNDM7XHRcdCAqIGFuY2hvciB0aGlzIHdhaXQgbG9hZGVkIHN1cnZpdmVzIGl0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyZWxlYXNlZCA9IGZhbHNlO1xuIFx0fVxuIFxuIFx0cnhtID0gc3RycF9tc2coc2tiKTtcbkBAIC0yMDI3LDYgJiM0MzsyMDg1LDIxIEBAIHNzaXplX3QgdGxzX3N3X3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssICBsb2ZmX3QgKnBwb3MsXG4gXHRcdGdvdG8gc3BsaWNlX3JlcXVldWU7XG4gXHR9XG4gXG4mIzQzO1x0LyogU3BsaWNpbmcgYW4gZW1wdHkgZGF0YSByZWNvcmQgZGVsaXZlcnMgemVybyBieXRlcywgd2hpY2ggdGhlXG4mIzQzO1x0ICogY2FsbGVyIHJlYWRzIGFzIEVPRi4gdGxzX3J4X3JlY193YWl0KCkgc2tpcHMgaXRzIHNpZ25hbCBjaGVja1xuJiM0MztcdCAqIHdoaWxlIGEgcmVjb3JkIGlzIHBhcnNlZCwgc28gdGVzdCBmb3IgYSBzaWduYWwgaGVyZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAodGxzX3J4X2VtcHR5X2RhdGFfcmVjKHJ4bS1cdTAwM2VmdWxsX2xlbiwgdGxtLVx1MDAzZWNvbnRyb2wpKSB7XG4mIzQzO1x0XHRsb25nIHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgbm9uYmxvY2spO1xuJiM0MztcbiYjNDM7XHRcdGNvbnN1bWVfc2tiKHNrYik7XG4mIzQzO1x0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbiYjNDM7XHRcdFx0ZXJyID0gdGxzX3J4X2ludHJfZXJybm8odGltZW8pO1xuJiM0MztcdFx0XHRnb3RvIHNwbGljZV9yZWFkX2VuZDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGNodW5rID0gbWluX3QodW5zaWduZWQgaW50LCByeG0tXHUwMDNlZnVsbF9sZW4sIGxlbik7XG4gXHRjb3BpZWQgPSBza2Jfc3BsaWNlX2JpdHMoc2tiLCBzaywgcnhtLVx1MDAzZW9mZnNldCwgcGlwZSwgY2h1bmssIGZsYWdzKTtcbiBcdGlmIChjb3BpZWQgXHUwMDNjIDApXG5AQCAtMjA0OSw2ICYjNDM7MjEyMiwxMSBAQCBzc2l6ZV90IHRsc19zd19zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCAgbG9mZl90ICpwcG9zLFxuIFx0Z290byBzcGxpY2VfcmVhZF9lbmQ7XG4gfVxuIFxuJiM0MzsvKiBCb3VuZCB0aGUgdGltZSB0aGF0IGNvbnNlY3V0aXZlIGVtcHR5IGluZ3Jlc3MgZGF0YSByZWNvcmRzIGtlZXBcbiYjNDM7ICogdGhlIHNvY2tldCBsb2NrIGhlbGQgd2l0aG91dCByZWxlYXNpbmcgaXQuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFRMU19SWF9OT0RBVEFfTlMgTlNFQ19QRVJfTVNFQ1xuJiM0MztcbiBpbnQgdGxzX3N3X3JlYWRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxuIFx0XHQgICAgIHNrX3JlYWRfYWN0b3JfdCByZWFkX2FjdG9yKVxuIHtcbkBAIC0yMDU3LDYgJiM0MzsyMTM1LDcgQEAgaW50IHRsc19zd19yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbiBcdHN0cnVjdCB0bHNfcHJvdF9pbmZvICpwcm90ID0gXHUwMDI2dGxzX2N0eC1cdTAwM2Vwcm90X2luZm87XG4gXHRzdHJ1Y3Qgc3RycF9tc2cgKnJ4bSA9IE5VTEw7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcbiYjNDM7XHR1NjQgbm9kYXRhX2RlYWRsaW5lID0gMDtcbiBcdHN0cnVjdCBza19wc29jayAqcHNvY2s7XG4gXHRzaXplX3QgZmx1c2hlZF9hdCA9IDA7XG4gXHRib29sIHJlbGVhc2VkID0gdHJ1ZTtcbkBAIC0yMTE1LDE0ICYjNDM7MjE5NCwyNSBAQCBpbnQgdGxzX3N3X3JlYWRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxuIFx0XHRcdGdvdG8gcmVhZF9zb2NrX3JlcXVldWU7XG4gXHRcdH1cbiBcbi1cdFx0LyogQW4gZW1wdHkgZGF0YSByZWNvcmQgKGxlZ2FsIGluIFRMUyAxLjMpIGdpdmVzIGEgemVyb1xuLVx0XHQgKiByZWFkX2FjdG9yIHJldHVybiwgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSB0aGUgY29uc3VtZXJcbi1cdFx0ICogc3RhbGxpbmc7IHRoZSB1c2VkIFx1MDAzYz0gMCBwYXRoIHdvdWxkIHJlcXVldWUgaXQgYXQgdGhlXG4tXHRcdCAqIGhlYWQgb2YgcnhfbGlzdCBhbmQgYmxvY2sgYWxsIGxhdGVyIHJlY29yZHMuIENvbnN1bWUgaXRcbi1cdFx0ICogaGVyZSBpbnN0ZWFkLlxuJiM0MztcdFx0LyogQW4gZW1wdHkgZGF0YSByZWNvcmQgZ2l2ZXMgYSB6ZXJvIHJlYWRfYWN0b3IgcmV0dXJuLFxuJiM0MztcdFx0ICogaW5kaXN0aW5ndWlzaGFibGUgZnJvbSB0aGUgY29uc3VtZXIgc3RhbGxpbmc7IHRoZVxuJiM0MztcdFx0ICogdXNlZCBcdTAwM2M9IDAgcGF0aCB3b3VsZCByZXF1ZXVlIGl0IGF0IHRoZSBoZWFkIG9mIHJ4X2xpc3RcbiYjNDM7XHRcdCAqIGFuZCBibG9jayBhbGwgbGF0ZXIgcmVjb3Jkcy4gQ29uc3VtZSBpdCBoZXJlIGluc3RlYWQuXG4gXHRcdCAqL1xuLVx0XHRpZiAocnhtLVx1MDAzZWZ1bGxfbGVuID09IDApIHtcbiYjNDM7XHRcdGlmICh0bHNfcnhfZW1wdHlfZGF0YV9yZWMocnhtLVx1MDAzZWZ1bGxfbGVuLCB0bG0tXHUwMDNlY29udHJvbCkpIHtcbiYjNDM7XHRcdFx0ZXJyID0gMDtcbiBcdFx0XHRjb25zdW1lX3NrYihza2IpO1xuJiM0MztcdFx0XHRpZiAoIW5vZGF0YV9kZWFkbGluZSkge1xuJiM0MztcdFx0XHRcdG5vZGF0YV9kZWFkbGluZSA9IGt0aW1lX2dldF9ucygpICYjNDM7XG4mIzQzO1x0XHRcdFx0XHRcdCAgVExTX1JYX05PREFUQV9OUztcbiYjNDM7XHRcdFx0fSBlbHNlIGlmIChrdGltZV9nZXRfbnMoKSBcdTAwM2U9IG5vZGF0YV9kZWFkbGluZSkge1xuJiM0MztcdFx0XHRcdC8qIFF1ZXVlZCByZWNvcmRzIHJhaXNlIG5vIG5ldyBza19kYXRhX3JlYWR5KCksXG4mIzQzO1x0XHRcdFx0ICogYW5kIHRsc19yeF9yZWFkZXJfcmVsZWFzZSgpIGFubm91bmNlcyBvbmx5IHRvXG4mIzQzO1x0XHRcdFx0ICogc2F2ZWRfZGF0YV9yZWFkeSgpLCBub3QgdGhlIGNvbnN1bWVyJiMzOTtzIG93bi5cbiYjNDM7XHRcdFx0XHQgKi9cbiYjNDM7XHRcdFx0XHRzay1cdTAwM2Vza19kYXRhX3JlYWR5KHNrKTtcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0fVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG5AQCAtMjEzMyw2ICYjNDM7MjIyMyw3IEBAIGludCB0bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG4gXHRcdFx0Z290byByZWFkX3NvY2tfcmVxdWV1ZTtcbiBcdFx0fVxuIFx0XHRjb3BpZWQgJiM0Mzs9IHVzZWQ7XG4mIzQzO1x0XHRub2RhdGFfZGVhZGxpbmUgPSAwO1xuIFx0XHRpZiAodXNlZCBcdTAwM2MgcnhtLVx1MDAzZWZ1bGxfbGVuKSB7XG4gXHRcdFx0cnhtLVx1MDAzZW9mZnNldCAmIzQzOz0gdXNlZDtcbiBcdFx0XHRyeG0tXHUwMDNlZnVsbF9sZW4gLT0gdXNlZDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmNcbmluZGV4IGNiZGQzZWEyOGI5OThmLi44YjY4ZGJmY2M1OTI0NiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jXG5AQCAtMjQsNiAmIzQzOzI0LDcgQEBcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oXCYjMzQ7XG4gXG4gI2RlZmluZSBUTFNfUEFZTE9BRF9NQVhfTEVOIDE2Mzg0XG4mIzQzOyNkZWZpbmUgVExTX0hEUl9MRU4gNVxuICNkZWZpbmUgU09MX1RMUyAyODJcbiBcbiBzdGF0aWMgaW50IGZpcHNfZW5hYmxlZDtcbkBAIC0yNTQ0LDYgJiM0MzsyNTQ1LDkgQEAgVEVTVF9GKHplcm9fbGVuLCB0ZXN0KVxuIFx0aW50IHJlY19vZmY7XG4gXHRpbnQgaTtcbiBcbiYjNDM7XHRpZiAoc2VsZi1cdTAwM2Vub3RscylcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtubyBUTFMgc3VwcG9ydFwmIzM0Oyk7XG4mIzQzO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgNCBcdTAwMjZcdTAwMjYgdmFyaWFudC1cdTAwM2VyZWNzW2ldOyBpJiM0MzsmIzQzOylcbiBcdFx0RVhQRUNUX0VRKHNlbmQoc2VsZi1cdTAwM2VmZCwgdmFyaWFudC1cdTAwM2VyZWNzW2ldLVx1MDAzZWNpcGhlcl9kYXRhLFxuIFx0XHRcdCAgICAgICB2YXJpYW50LVx1MDAzZXJlY3NbaV0tXHUwMDNlY2lwaGVyX2xlbiwgMCksXG5AQCAtMjU3Myw2ICYjNDM7MjU3NywyNDggQEAgVEVTVF9GKHplcm9fbGVuLCB0ZXN0KVxuIFx0fVxuIH07XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHplcm9fbGVuX3NvY2tfcGFpcihzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsXG4mIzQzO1x0XHRcdCAgICAgICBpbnQgKmZkLCBpbnQgKmNmZCwgYm9vbCAqbm90bHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGxzX2NyeXB0b19pbmZvX2tleXMgdGxzMTI7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0dGxzX2NyeXB0b19pbmZvX2luaXQoVExTXzFfMl9WRVJTSU9OLCBUTFNfQ0lQSEVSX0FFU19DQ01fMTI4LFxuJiM0MztcdFx0XHQgICAgIFx1MDAyNnRsczEyLCAwKTtcbiYjNDM7XG4mIzQzO1x0dWxwX3NvY2tfcGFpcihfbWV0YWRhdGEsIGZkLCBjZmQsIG5vdGxzKTtcbiYjNDM7XHRpZiAoKm5vdGxzKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHQvKiBmZCBzdGF5cyBrZXlsZXNzOyB0aGVzZSBmaXh0dXJlcyBzZW5kIHJhdyByZWNvcmRzIG92ZXIgaXQgKi9cbiYjNDM7XHRyZXQgPSBzZXRzb2Nrb3B0KCpjZmQsIFNPTF9UTFMsIFRMU19SWCwgXHUwMDI2dGxzMTIsIHRsczEyLmxlbik7XG4mIzQzO1x0QVNTRVJUX0VRKHJldCwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFNlbmQgYSB2YXJpYW50JiMzOTtzIHJlY29yZHM7IHJldHVybiB0aGUgbGFzdCBvbmUgY2FycnlpbmcgcGF5bG9hZCAqL1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJhd19yZWMgKlxuJiM0Mzt6ZXJvX2xlbl9zZW5kX3JlY3Moc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLCBpbnQgZmQsXG4mIzQzO1x0XHQgICBjb25zdCBzdHJ1Y3QgcmF3X3JlYyAqY29uc3QgKnJlY3MpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcmF3X3JlYyAqcGF5bG9hZCA9IE5VTEw7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDQgXHUwMDI2XHUwMDI2IHJlY3NbaV07IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRFWFBFQ1RfRVEoc2VuZChmZCwgcmVjc1tpXS1cdTAwM2VjaXBoZXJfZGF0YSwgcmVjc1tpXS1cdTAwM2VjaXBoZXJfbGVuLCAwKSxcbiYjNDM7XHRcdFx0ICByZWNzW2ldLVx1MDAzZWNpcGhlcl9sZW4pO1xuJiM0MztcdFx0aWYgKHJlY3NbaV0tXHUwMDNlcGxhaW5fbGVuKVxuJiM0MztcdFx0XHRwYXlsb2FkID0gcmVjc1tpXTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBwYXlsb2FkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztGSVhUVVJFKHplcm9fbGVuX3BlZWspXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQsIGNmZDtcbiYjNDM7XHRib29sIG5vdGxzO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UKHplcm9fbGVuX3BlZWspXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcmF3X3JlYyAqcmVjc1s0XTtcbiYjNDM7XHRzc2l6ZV90IHBlZWtfcmV0O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERCh6ZXJvX2xlbl9wZWVrLCAwZGF0YV8wZGF0YV9kYXRhKVxuJiM0Mzt7XG4mIzQzO1x0LnJlY3MgPSB7IFx1MDAyNmlkMF9kYXRhX2wwLCBcdTAwMjZpZDFfZGF0YV9sMCwgXHUwMDI2aWQyX2RhdGFfbDExLCB9LFxuJiM0MztcdC5wZWVrX3JldCA9IDExLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERCh6ZXJvX2xlbl9wZWVrLCAwZGF0YV8wZGF0YV8wZGF0YSlcbiYjNDM7e1xuJiM0MztcdC5yZWNzID0geyBcdTAwMjZpZDBfZGF0YV9sMCwgXHUwMDI2aWQxX2RhdGFfbDAsIFx1MDAyNmlkMl9kYXRhX2wwLCB9LFxuJiM0MztcdC5wZWVrX3JldCA9IC1FQUdBSU4sXG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1NFVFVQKHplcm9fbGVuX3BlZWspXG4mIzQzO3tcbiYjNDM7XHR6ZXJvX2xlbl9zb2NrX3BhaXIoX21ldGFkYXRhLCBcdTAwMjZzZWxmLVx1MDAzZWZkLCBcdTAwMjZzZWxmLVx1MDAzZWNmZCwgXHUwMDI2c2VsZi1cdTAwM2Vub3Rscyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVEVBUkRPV04oemVyb19sZW5fcGVlaylcbiYjNDM7e1xuJiM0MztcdGNsb3NlKHNlbGYtXHUwMDNlZmQpO1xuJiM0MztcdGNsb3NlKHNlbGYtXHUwMDNlY2ZkKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUGVla2luZyBwYXN0IGEgcnVuIG9mIGVtcHR5IGRhdGEgcmVjb3JkcyBtdXN0IHJlYWNoIHRoZSBwYXlsb2FkXG4mIzQzOyAqIGJlaGluZCB0aGVtLCBhbmQgYSBydW4gd2l0aCBubyBwYXlsb2FkIGJlaGluZCBpdCBtdXN0IHJlcG9ydCBFQUdBSU5cbiYjNDM7ICogcmF0aGVyIHRoYW4gdGhlIHplcm8gcmV0dXJuIHRoYXQgbWVhbnMgRU9GLlxuJiM0MzsgKi9cbiYjNDM7VEVTVF9GKHplcm9fbGVuX3BlZWssIHRlc3QpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcmF3X3JlYyAqcGF5bG9hZDtcbiYjNDM7XHR1bnNpZ25lZCBjaGFyIGJ1ZlsxMjhdO1xuJiM0MztcdHNzaXplX3QgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoc2VsZi1cdTAwM2Vub3RscylcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtubyBUTFMgc3VwcG9ydFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHBheWxvYWQgPSB6ZXJvX2xlbl9zZW5kX3JlY3MoX21ldGFkYXRhLCBzZWxmLVx1MDAzZWZkLCB2YXJpYW50LVx1MDAzZXJlY3MpO1xuJiM0MztcbiYjNDM7XHRpZiAodmFyaWFudC1cdTAwM2VwZWVrX3JldCBcdTAwM2MgMCkge1xuJiM0MztcdFx0cmV0ID0gcmVjdihzZWxmLVx1MDAzZWNmZCwgYnVmLCBzaXplb2YoYnVmKSxcbiYjNDM7XHRcdFx0ICAgTVNHX0RPTlRXQUlUIHwgTVNHX1BFRUspO1xuJiM0MztcdFx0RVhQRUNUX0VRKHJldCwgLTEpO1xuJiM0MztcdFx0aWYgKHJldCA9PSAtMSlcbiYjNDM7XHRcdFx0RVhQRUNUX0VRKGVycm5vLCAtdmFyaWFudC1cdTAwM2VwZWVrX3JldCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSByZWN2KHNlbGYtXHUwMDNlY2ZkLCBidWYsIHNpemVvZihidWYpLCBNU0dfRE9OVFdBSVQgfCBNU0dfUEVFSyk7XG4mIzQzO1x0RVhQRUNUX0VRKHJldCwgdmFyaWFudC1cdTAwM2VwZWVrX3JldCk7XG4mIzQzO1x0aWYgKHJldCA9PSB2YXJpYW50LVx1MDAzZXBlZWtfcmV0KVxuJiM0MztcdFx0RVhQRUNUX0VRKG1lbWNtcChidWYsIHBheWxvYWQtXHUwMDNlcGxhaW5fZGF0YSxcbiYjNDM7XHRcdFx0XHQgdmFyaWFudC1cdTAwM2VwZWVrX3JldCksIDApO1xuJiM0MztcbiYjNDM7XHQvKiBQZWVraW5nIGxlZnQgdGhlIHBheWxvYWQgaW4gcGxhY2UgZm9yIHRoZSByZWFkIHRoYXQgZm9sbG93cyAqL1xuJiM0MztcdHJldCA9IHJlY3Yoc2VsZi1cdTAwM2VjZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIE1TR19ET05UV0FJVCk7XG4mIzQzO1x0RVhQRUNUX0VRKHJldCwgdmFyaWFudC1cdTAwM2VwZWVrX3JldCk7XG4mIzQzO1x0aWYgKHJldCA9PSB2YXJpYW50LVx1MDAzZXBlZWtfcmV0KVxuJiM0MztcdFx0RVhQRUNUX0VRKG1lbWNtcChidWYsIHBheWxvYWQtXHUwMDNlcGxhaW5fZGF0YSxcbiYjNDM7XHRcdFx0XHQgdmFyaWFudC1cdTAwM2VwZWVrX3JldCksIDApO1xuJiM0MztcbiYjNDM7XHRyZXQgPSByZWN2KHNlbGYtXHUwMDNlY2ZkLCBidWYsIHNpemVvZihidWYpLCBNU0dfRE9OVFdBSVQpO1xuJiM0MztcdEVYUEVDVF9FUShyZXQsIC0xKTtcbiYjNDM7XHRpZiAocmV0ID09IC0xKVxuJiM0MztcdFx0RVhQRUNUX0VRKGVycm5vLCBFQUdBSU4pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztGSVhUVVJFKHplcm9fbGVuX3NwbGljZSlcbiYjNDM7e1xuJiM0MztcdGludCBmZCwgY2ZkO1xuJiM0MztcdGJvb2wgbm90bHM7XG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlQoemVyb19sZW5fc3BsaWNlKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJhd19yZWMgKnJlY3NbNF07XG4mIzQzO1x0c3NpemVfdCBzcGxpY2VfcmV0O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERCh6ZXJvX2xlbl9zcGxpY2UsIDBkYXRhX2RhdGEpXG4mIzQzO3tcbiYjNDM7XHQucmVjcyA9IHsgXHUwMDI2aWQwX2RhdGFfbDAsIFx1MDAyNmlkMV9kYXRhX2wxMSwgfSxcbiYjNDM7XHQuc3BsaWNlX3JldCA9IDExLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERCh6ZXJvX2xlbl9zcGxpY2UsIDBkYXRhXzBkYXRhX2RhdGEpXG4mIzQzO3tcbiYjNDM7XHQucmVjcyA9IHsgXHUwMDI2aWQwX2RhdGFfbDAsIFx1MDAyNmlkMV9kYXRhX2wwLCBcdTAwMjZpZDJfZGF0YV9sMTEsIH0sXG4mIzQzO1x0LnNwbGljZV9yZXQgPSAxMSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoemVyb19sZW5fc3BsaWNlLCAwZGF0YV8wZGF0YV8wZGF0YSlcbiYjNDM7e1xuJiM0MztcdC5yZWNzID0geyBcdTAwMjZpZDBfZGF0YV9sMCwgXHUwMDI2aWQxX2RhdGFfbDAsIFx1MDAyNmlkMl9kYXRhX2wwLCB9LFxuJiM0MztcdC5zcGxpY2VfcmV0ID0gLUVBR0FJTixcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoemVyb19sZW5fc3BsaWNlLCAwZGF0YV8wY3RybClcbiYjNDM7e1xuJiM0MztcdC5yZWNzID0geyBcdTAwMjZpZDBfZGF0YV9sMCwgXHUwMDI2aWQxX2N0cmxfbDAsIH0sXG4mIzQzO1x0LnNwbGljZV9yZXQgPSAtRUlOVkFMLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9TRVRVUCh6ZXJvX2xlbl9zcGxpY2UpXG4mIzQzO3tcbiYjNDM7XHR6ZXJvX2xlbl9zb2NrX3BhaXIoX21ldGFkYXRhLCBcdTAwMjZzZWxmLVx1MDAzZWZkLCBcdTAwMjZzZWxmLVx1MDAzZWNmZCwgXHUwMDI2c2VsZi1cdTAwM2Vub3Rscyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVEVBUkRPV04oemVyb19sZW5fc3BsaWNlKVxuJiM0Mzt7XG4mIzQzO1x0Y2xvc2Uoc2VsZi1cdTAwM2VmZCk7XG4mIzQzO1x0Y2xvc2Uoc2VsZi1cdTAwM2VjZmQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBBbiBlbXB0eSBkYXRhIHJlY29yZCBzcGxpY2VzIHplcm8gYnl0ZXMsIHdoaWNoIGEgc3BsaWNlIGNhbGxlciByZWFkc1xuJiM0MzsgKiBhcyBFT0YuIFNwbGljaW5nIG11c3Qgc2tpcCBwYXN0IHN1Y2ggYSByZWNvcmQgdG8gdGhlIHBheWxvYWQgYmVoaW5kXG4mIzQzOyAqIGl0LCBhbmQgcmVwb3J0IEVBR0FJTiB3aGVuIGEgcnVuIG9mIHRoZW0gaGFzIG5vIHBheWxvYWQgYmVoaW5kIGl0LlxuJiM0MzsgKiBBIGNvbnRyb2wgcmVjb3JkIGJlaGluZCB0aGUgcnVuIHJlcG9ydHMgRUlOVkFMLCB0aGUgZXJyb3Igc3BsaWNlXG4mIzQzOyAqIGFscmVhZHkgcmVwb3J0cyBmb3IgYSBjb250cm9sIHJlY29yZCBpdCBtZWV0cyBmaXJzdC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkXG4mIzQzO3plcm9fbGVuX2RvX3NwbGljZShzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsXG4mIzQzO1x0XHQgICBzdHJ1Y3QgX3Rlc3RfZGF0YV96ZXJvX2xlbl9zcGxpY2UgKnNlbGYsXG4mIzQzO1x0XHQgICBjb25zdCBzdHJ1Y3QgX2ZpeHR1cmVfdmFyaWFudF96ZXJvX2xlbl9zcGxpY2UgKnZhcmlhbnQsXG4mIzQzO1x0XHQgICB1bnNpZ25lZCBpbnQgc3BsaWNlX2ZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJhd19yZWMgKnBheWxvYWQ7XG4mIzQzO1x0dW5zaWduZWQgY2hhciBidWZbMTI4XTtcbiYjNDM7XHRzc2l6ZV90IHJldDtcbiYjNDM7XHRpbnQgcFsyXTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0dFKHBpcGUocCksIDApO1xuJiM0MztcbiYjNDM7XHRwYXlsb2FkID0gemVyb19sZW5fc2VuZF9yZWNzKF9tZXRhZGF0YSwgc2VsZi1cdTAwM2VmZCwgdmFyaWFudC1cdTAwM2VyZWNzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHZhcmlhbnQtXHUwMDNlc3BsaWNlX3JldCBcdTAwM2MgMCkge1xuJiM0MztcdFx0cmV0ID0gc3BsaWNlKHNlbGYtXHUwMDNlY2ZkLCBOVUxMLCBwWzFdLCBOVUxMLCBzaXplb2YoYnVmKSxcbiYjNDM7XHRcdFx0ICAgICBzcGxpY2VfZmxhZ3MpO1xuJiM0MztcdFx0RVhQRUNUX0VRKHJldCwgLTEpO1xuJiM0MztcdFx0aWYgKHJldCA9PSAtMSlcbiYjNDM7XHRcdFx0RVhQRUNUX0VRKGVycm5vLCAtdmFyaWFudC1cdTAwM2VzcGxpY2VfcmV0KTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0LyogQXNzZXJ0OiBhIHplcm8gcmV0dXJuLCB3aGljaCBpcyB3aGF0IGFuIHVuZml4ZWQga2VybmVsXG4mIzQzO1x0XHQgKiBnaXZlcyBoZXJlLCBsZWF2ZXMgdGhlIHBpcGUgZW1wdHksIGFuZCB0aGUgcmVhZCBiZWxvd1xuJiM0MztcdFx0ICogd291bGQgdGhlbiBibG9jayB1bnRpbCB0aGUgaGFybmVzcyB0aW1lb3V0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRBU1NFUlRfRVEoc3BsaWNlKHNlbGYtXHUwMDNlY2ZkLCBOVUxMLCBwWzFdLCBOVUxMLCBzaXplb2YoYnVmKSxcbiYjNDM7XHRcdFx0XHQgc3BsaWNlX2ZsYWdzKSwgdmFyaWFudC1cdTAwM2VzcGxpY2VfcmV0KTtcbiYjNDM7XHRcdHJldCA9IHJlYWQocFswXSwgYnVmLCBzaXplb2YoYnVmKSk7XG4mIzQzO1x0XHRFWFBFQ1RfRVEocmV0LCB2YXJpYW50LVx1MDAzZXNwbGljZV9yZXQpO1xuJiM0MztcdFx0aWYgKHJldCA9PSB2YXJpYW50LVx1MDAzZXNwbGljZV9yZXQpXG4mIzQzO1x0XHRcdEVYUEVDVF9FUShtZW1jbXAoYnVmLCBwYXlsb2FkLVx1MDAzZXBsYWluX2RhdGEsXG4mIzQzO1x0XHRcdFx0XHQgdmFyaWFudC1cdTAwM2VzcGxpY2VfcmV0KSwgMCk7XG4mIzQzO1xuJiM0MztcdFx0LyogUmVhY2hpbmcgdGhlIHBheWxvYWQgY29uc3VtZWQgdGhlIGVtcHR5IHJlY29yZHMgYWhlYWRcbiYjNDM7XHRcdCAqIG9mIGl0IHJhdGhlciB0aGFuIGxlYXZpbmcgdGhlbSBvbiB0aGUgcmVjZWl2ZSBxdWV1ZVxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyZXQgPSByZWN2KHNlbGYtXHUwMDNlY2ZkLCBidWYsIHNpemVvZihidWYpLCBNU0dfRE9OVFdBSVQpO1xuJiM0MztcdFx0RVhQRUNUX0VRKHJldCwgLTEpO1xuJiM0MztcdFx0aWYgKHJldCA9PSAtMSlcbiYjNDM7XHRcdFx0RVhQRUNUX0VRKGVycm5vLCBFQUdBSU4pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y2xvc2UocFswXSk7XG4mIzQzO1x0Y2xvc2UocFsxXSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRih6ZXJvX2xlbl9zcGxpY2UsIHRlc3QpXG4mIzQzO3tcbiYjNDM7XHRpZiAoc2VsZi1cdTAwM2Vub3RscylcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtubyBUTFMgc3VwcG9ydFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHplcm9fbGVuX2RvX3NwbGljZShfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIFNQTElDRV9GX05PTkJMT0NLKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogVGhlIHNvY2tldCYjMzk7cyBvd24gT19OT05CTE9DSyBnb3Zlcm5zIHRoZSByZWNvcmQgd2FpdCwgYXMgaXQgZG9lcyBvbiBhXG4mIzQzOyAqIHBsYWluIFRDUCBzb2NrZXQsIHNvIGEgc3BsaWNlIHRoYXQgb21pdHMgU1BMSUNFX0ZfTk9OQkxPQ0sgcmVhY2hlc1xuJiM0MzsgKiB0aGUgc2FtZSBvdXRjb21lIGFzIG9uZSB0aGF0IHNldHMgaXQuIEFuIHVuZml4ZWQga2VybmVsIGRlcml2ZXMgdGhlXG4mIzQzOyAqIHdhaXQgZnJvbSBTUExJQ0VfRl9OT05CTE9DSyBhbG9uZSBhbmQgc2xlZXBzIGhlcmUgdW50aWwgdGhlIGhhcm5lc3NcbiYjNDM7ICogdGltZW91dC5cbiYjNDM7ICovXG4mIzQzO1RFU1RfRih6ZXJvX2xlbl9zcGxpY2UsIG5vbmJsb2NrX3NvY2tldClcbiYjNDM7e1xuJiM0MztcdGludCBzZmxhZ3M7XG4mIzQzO1xuJiM0MztcdGlmIChzZWxmLVx1MDAzZW5vdGxzKVxuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O25vIFRMUyBzdXBwb3J0XCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0c2ZsYWdzID0gZmNudGwoc2VsZi1cdTAwM2VjZmQsIEZfR0VURkwsIDApO1xuJiM0MztcdEFTU0VSVF9HRShzZmxhZ3MsIDApO1xuJiM0MztcdEFTU0VSVF9FUShmY250bChzZWxmLVx1MDAzZWNmZCwgRl9TRVRGTCwgc2ZsYWdzIHwgT19OT05CTE9DSyksIDApO1xuJiM0MztcbiYjNDM7XHR6ZXJvX2xlbl9kb19zcGxpY2UoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCAwKTtcbiYjNDM7fVxuJiM0MztcbiBGSVhUVVJFKHRsc19lcnIpXG4ge1xuIFx0aW50IGZkLCBjZmQ7XG5AQCAtMjYzOCwyOCAmIzQzOzI4ODQsODUgQEAgVEVTVF9GKHRsc19lcnIsIGJhZF9yZWMpXG4gXHRFWFBFQ1RfRVEoZXJybm8sIEVBR0FJTik7XG4gfVxuIFxuJiM0MzsvKiBFbmNyeXB0IGEgcmVjb3JkIG9uIHRoZSBUWC1vbmx5IHNvY2tldCBwYWlyLCBjb3JydXB0IGl0cyBsYXN0XG4mIzQzOyAqIGJ5dGUsIGFuZCBoYW5kIHRoZSByZXN1bHQgdG8gdGhlIHNvY2tldCB1bmRlciB0ZXN0LiBjZmQgY2FycmllcyBhXG4mIzQzOyAqIGJ5dGUgc3RyZWFtLCBzbyBvbmUgcmVjdigpIGNhbiByZXR1cm4gcGFydCBvZiBhIHJlY29yZDogdGFrZSB0aGVcbiYjNDM7ICogZnJhZ21lbnQgbGVuZ3RoIGZyb20gdGhlIHJlY29yZCBoZWFkZXIgYW5kIHdhaXQgZm9yIHRoZSByZW1haW5kZXIuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCB0bHNfc2VuZF9iYWRfYXV0aChzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsXG4mIzQzO1x0XHRcdCAgICAgIGludCBmZCwgaW50IGNmZCwgaW50IGZkMilcbiYjNDM7e1xuJiM0MztcdGNoYXIgYnVmWzEyOF07XG4mIzQzO1x0aW50IGxlbjtcbiYjNDM7XG4mIzQzO1x0bWVtcm5kKGJ1Ziwgc2l6ZW9mKGJ1ZikgLyAyKTtcbiYjNDM7XHRBU1NFUlRfRVEoc2VuZChmZCwgYnVmLCBzaXplb2YoYnVmKSAvIDIsIDApLCBzaXplb2YoYnVmKSAvIDIpO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEocmVjdihjZmQsIGJ1ZiwgVExTX0hEUl9MRU4sIE1TR19XQUlUQUxMKSwgVExTX0hEUl9MRU4pO1xuJiM0MztcbiYjNDM7XHRsZW4gPSAoKHVuc2lnbmVkIGNoYXIpYnVmWzNdIFx1MDAzY1x1MDAzYyA4KSB8ICh1bnNpZ25lZCBjaGFyKWJ1Zls0XTtcbiYjNDM7XHRBU1NFUlRfR1QobGVuLCAwKTtcbiYjNDM7XHRBU1NFUlRfTEUobGVuLCAoaW50KXNpemVvZihidWYpIC0gVExTX0hEUl9MRU4pO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEocmVjdihjZmQsIGJ1ZiAmIzQzOyBUTFNfSERSX0xFTiwgbGVuLCBNU0dfV0FJVEFMTCksIGxlbik7XG4mIzQzO1xuJiM0MztcdGJ1ZltUTFNfSERSX0xFTiAmIzQzOyBsZW4gLSAxXSYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUShzZW5kKGZkMiwgYnVmLCBUTFNfSERSX0xFTiAmIzQzOyBsZW4sIDApLCBUTFNfSERSX0xFTiAmIzQzOyBsZW4pO1xuJiM0Mzt9XG4mIzQzO1xuIFRFU1RfRih0bHNfZXJyLCBiYWRfYXV0aClcbiB7XG4gXHRjaGFyIGJ1ZlsxMjhdO1xuLVx0aW50IG47XG4gXG4gXHRpZiAoc2VsZi1cdTAwM2Vub3RscylcbiBcdFx0U0tJUChyZXR1cm4sIFwmIzM0O25vIFRMUyBzdXBwb3J0XCYjMzQ7KTtcbiBcbi1cdG1lbXJuZChidWYsIHNpemVvZihidWYpIC8gMik7XG4tXHRFWFBFQ1RfRVEoc2VuZChzZWxmLVx1MDAzZWZkLCBidWYsIHNpemVvZihidWYpIC8gMiwgMCksIHNpemVvZihidWYpIC8gMik7XG4tXHRuID0gcmVjdihzZWxmLVx1MDAzZWNmZCwgYnVmLCBzaXplb2YoYnVmKSwgMCk7XG4tXHRFWFBFQ1RfR1Qobiwgc2l6ZW9mKGJ1ZikgLyAyKTtcbi1cbi1cdGJ1ZltuIC0gMV0mIzQzOyYjNDM7O1xuJiM0MztcdHRsc19zZW5kX2JhZF9hdXRoKF9tZXRhZGF0YSwgc2VsZi1cdTAwM2VmZCwgc2VsZi1cdTAwM2VjZmQsIHNlbGYtXHUwMDNlZmQyKTtcbiBcbi1cdEVYUEVDVF9FUShzZW5kKHNlbGYtXHUwMDNlZmQyLCBidWYsIG4sIDApLCBuKTtcbiBcdEVYUEVDVF9FUShyZWN2KHNlbGYtXHUwMDNlY2ZkMiwgYnVmLCBzaXplb2YoYnVmKSwgMCksIC0xKTtcbiBcdEVYUEVDVF9FUShlcnJubywgRUJBRE1TRyk7XG4gXHRFWFBFQ1RfRVEocmVjdihzZWxmLVx1MDAzZWNmZDIsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApLCAtMSk7XG4gXHRFWFBFQ1RfRVEoZXJybm8sIEVCQURNU0cpO1xuIH1cbiBcbiYjNDM7LyogQSByZWNvcmQgdGhhdCBkaWQgbm90IGF1dGhlbnRpY2F0ZSBicmVha3MgdGhlIGNvbm5lY3Rpb24gZm9yIGV2ZXJ5XG4mIzQzOyAqIHJlYWRlciwgc3BsaWNlIGluY2x1ZGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgdHdvIGRlY3J5cHQgcGF0aHMgcmVhY2ggdGhhdCByZXN1bHQgZGlmZmVyZW50bHkuIEEgc3luY2hyb25vdXNcbiYjNDM7ICogZGVjcnlwdCBsZWF2ZXMgdGhlIHJlY29yZCBwYXJzZWQsIHNvIHRoZSBzcGxpY2UgcmUtcnVucyB0aGUgZGVjcnlwdFxuJiM0MzsgKiBhbmQgZmFpbHMgb24gdGhlIHJlY29yZCBpdHNlbGY7IHRoZSBjdHgtXHUwMDNlYXN5bmNfd2FpdC5lcnIgY2hlY2sgaW5cbiYjNDM7ICogdGxzX3N3X3NwbGljZV9yZWFkKCkgaXMgbm90IHdoYXQgc3RvcHMgaXQuIE9ubHkgYW4gYXN5bmNocm9ub3VzXG4mIzQzOyAqIGRlY3J5cHQsIHdoaWNoIG5lZWRzIGEgVExTIDEuMiBzb2NrZXQgYW5kIGFuIEFFQUQgYWR2ZXJ0aXNpbmdcbiYjNDM7ICogQ1JZUFRPX0FMR19BU1lOQywgY29uc3VtZXMgdGhlIHJlY29yZCBiZWZvcmUgdGhlIGZhaWx1cmUgaXNcbiYjNDM7ICogcmVjb3JkZWQsIGxlYXZpbmcgdGhhdCBjaGVjayB0aGUgc29sZSByZWFzb24gdGhlIHNwbGljZSBmYWlscy5cbiYjNDM7ICovXG4mIzQzO1RFU1RfRih0bHNfZXJyLCBiYWRfYXV0aF9zcGxpY2UpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGJ1ZlsxMjhdO1xuJiM0MztcdHNzaXplX3QgcmV0O1xuJiM0MztcdGludCBwWzJdO1xuJiM0MztcbiYjNDM7XHRpZiAoc2VsZi1cdTAwM2Vub3RscylcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtubyBUTFMgc3VwcG9ydFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHRsc19zZW5kX2JhZF9hdXRoKF9tZXRhZGF0YSwgc2VsZi1cdTAwM2VmZCwgc2VsZi1cdTAwM2VjZmQsIHNlbGYtXHUwMDNlZmQyKTtcbiYjNDM7XG4mIzQzO1x0RVhQRUNUX0VRKHJlY3Yoc2VsZi1cdTAwM2VjZmQyLCBidWYsIHNpemVvZihidWYpLCAwKSwgLTEpO1xuJiM0MztcdEVYUEVDVF9FUShlcnJubywgRUJBRE1TRyk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9HRShwaXBlKHApLCAwKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gc3BsaWNlKHNlbGYtXHUwMDNlY2ZkMiwgTlVMTCwgcFsxXSwgTlVMTCwgc2l6ZW9mKGJ1ZiksXG4mIzQzO1x0XHQgICAgIFNQTElDRV9GX05PTkJMT0NLKTtcbiYjNDM7XHRFWFBFQ1RfRVEocmV0LCAtMSk7XG4mIzQzO1x0aWYgKHJldCA9PSAtMSlcbiYjNDM7XHRcdEVYUEVDVF9FUShlcnJubywgRUJBRE1TRyk7XG4mIzQzO1xuJiM0MztcdGNsb3NlKHBbMF0pO1xuJiM0MztcdGNsb3NlKHBbMV0pO1xuJiM0Mzt9XG4mIzQzO1xuIFRFU1RfRih0bHNfZXJyLCBiYWRfaW5fbGFyZ2VfcmVhZClcbiB7XG4gXHRjaGFyIHR4dFszXVs2NF07XG5AQCAtMjkxNSw3ICYjNDM7MzIxOCw2IEBAIHN0YXRpYyBzaXplX3QgcGFyc2VfdGxzX3JlY29yZHMoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLFxuIHtcbiBcdGNvbnN0IF9fdTggKnJlYyA9IHJ4X2J1ZjtcbiBcdHNpemVfdCB0b3RhbF9wbGFpbnRleHRfcnggPSAwO1xuLVx0Y29uc3QgX191OCByZWNfaGVhZGVyX2xlbiA9IDU7XG4gXG4gXHR3aGlsZSAocmVjIFx1MDAzYyByeF9idWYgJiM0MzsgcnhfbGVuKSB7XG4gXHRcdF9fdTE2IHJlY29yZF9wYXlsb2FkX2xlbjtcbkBAIC0yOTM1LDcgJiM0MzszMjM3LDcgQEAgc3RhdGljIHNpemVfdCBwYXJzZV90bHNfcmVjb3JkcyhzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsXG4gXG4gXHRcdC8qIFBsYWludGV4dCBtdXN0IG5vdCBleGNlZWQgdGhlIHNwZWNpZmllZCBsaW1pdCAqL1xuIFx0XHRBU1NFUlRfTEUocGxhaW50ZXh0X2xlbiwgbWF4X3BheWxvYWRfbGVuKTtcbi1cdFx0cmVjICYjNDM7PSByZWNfaGVhZGVyX2xlbiAmIzQzOyByZWNvcmRfcGF5bG9hZF9sZW47XG4mIzQzO1x0XHRyZWMgJiM0Mzs9IFRMU19IRFJfTEVOICYjNDM7IHJlY29yZF9wYXlsb2FkX2xlbjtcbiBcdH1cbiBcbiBcdHJldHVybiB0b3RhbF9wbGFpbnRleHRfcng7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTI6MDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RMUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Rsc19zd19yZWN2bXNnJiMzNDssCiAgICAmIzM0O3Rsc19zd19zcGxpY2VfcmVhZCYjMzQ7LAogICAgJiMzNDt0bHNfc3dfcmVhZF9zb2NrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUTFMgc29mdHdhcmUgcmVjZWl2ZSBwYXRoIHRvIHByb3Blcmx5IGhhbmRsZSB6ZXJvLWxlbmd0aCBhcHBsaWNhdGlvbl9kYXRhIHJlY29yZHMgKGVtcHR5IGRhdGEgcmVjb3JkcykgaW4gVExTIDEuMiBhbmQgVExTIDEuMy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgYHJlY3Ztc2dgLCBgc3BsaWNlX3JlYWRgLCBhbmQgYHJlYWRfc29ja2Agb3BlcmF0aW9ucyBvbiBUTFMgc29ja2V0cywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg5ZmMyMjMwYjVjZDI0MjgwOTllM2NjNWUzYmIzOWVkZWFlN2JiMDAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAyNyAxMjowMjozMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC90bHMvdGxzX3N3LmMgYi9uZXQvdGxzL3Rsc19zdy5jCmluZGV4IGQ0YWZjOTBmZDc5NjZlLi4wZTc2YjMxYjEyOTE0YiAxMDA2NDQKLS0tIGEvbmV0L3Rscy90bHNfc3cuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGxzL3Rsc19zdy5jCkBAIC0zNyw2ICYjNDM7MzcsNyBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvYnVnLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvc2lnbmFsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3RpbWVrZWVwaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva2VybmVsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3BsaWNlLmgmZ3Q7CkBAIC0xNzg3LDYgJiM0MzsxNzg4LDI0IEBAIHN0YXRpYyB2b2lkIHRsc19yeF9yZWFkZXJfdW5sb2NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRsc19zd19jb250ZXh0X3J4ICpjdHgpCiAJcmVsZWFzZV9zb2NrKHNrKTsKIH0KIAomIzQzOy8qIFRMUyAxLjIgYW5kIFRMUyAxLjMgYm90aCBwZXJtaXQgYSB6ZXJvLWxlbmd0aCBhcHBsaWNhdGlvbl9kYXRhCiYjNDM7ICogcmVjb3JkIGFzIGEgdHJhZmZpYy1hbmFseXNpcyBjb3VudGVybWVhc3VyZSAoUkZDIDUyNDYsIFNlY3Rpb24KJiM0MzsgKiA2LjIuMTsgUkZDIDg0NDYsIFNlY3Rpb24gNS4xKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCB0bHNfcnhfZW1wdHlfZGF0YV9yZWMoaW50IGxlbiwgdW5zaWduZWQgY2hhciBjb250cm9sKQomIzQzO3sKJiM0MzsJcmV0dXJuICFsZW4gJmFtcDsmYW1wOyBjb250cm9sID09IFRMU19SRUNPUkRfVFlQRV9EQVRBOwomIzQzO30KJiM0MzsKJiM0MzsvKiBzb2NrX2ludHJfZXJybm8oKSBtYXBzIHRoZSB6ZXJvIHRpbWVvIG9mIGEgcmVhZGVyIHRoYXQgY2Fubm90IHdhaXQKJiM0MzsgKiB0byAtRUlOVFIsIGJ1dCBzdWNoIGEgcmVhZGVyIGhhcyBubyBibG9ja2luZyB0byBpbnRlcnJ1cHQuIFRoZSByZXN0CiYjNDM7ICogb2YgdGhlIHJlY2VpdmUgc2lkZSByZXBvcnRzIHRoYXQgY2FzZSBhcyAtRUFHQUlOLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgdGxzX3J4X2ludHJfZXJybm8obG9uZyB0aW1lbykKJiM0Mzt7CiYjNDM7CXJldHVybiB0aW1lbyA/IHNvY2tfaW50cl9lcnJubyh0aW1lbykgOiAtRUFHQUlOOwomIzQzO30KJiM0MzsKIGludCB0bHNfc3dfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssCiAJCSAgIHN0cnVjdCBtc2doZHIgKm1zZywKIAkJICAgc2l6ZV90IGxlbiwKQEAgLTE4NTgsOSAmIzQzOzE4NzcsMTIgQEAgaW50IHRsc19zd19yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywKIAkJICAgIHRsbS0mZ3Q7Y29udHJvbCA9PSBUTFNfUkVDT1JEX1RZUEVfREFUQSkKIAkJCWRhcmcuemMgPSB0cnVlOwogCi0JCS8qIERvIG5vdCB1c2UgYXN5bmMgbW9kZSBpZiByZWNvcmQgaXMgbm9uLWRhdGEgKi8KJiM0MzsJCS8qIERvIG5vdCB1c2UgYXN5bmMgbW9kZSBpZiByZWNvcmQgaXMgbm9uLWRhdGEsIG9yIGlmIGl0CiYjNDM7CQkgKiBpcyBlbXB0eTogdGhlIHJlY2VpdmUgbG9vcCBmcmVlcyBhbiBlbXB0eSByZWNvcmQmIzM5O3Mgc2tiLAomIzQzOwkJICogc28gaXRzIGRlY3J5cHRpb24gbXVzdCBoYXZlIGNvbXBsZXRlZC4KJiM0MzsJCSAqLwogCQlpZiAodGxtLSZndDtjb250cm9sID09IFRMU19SRUNPUkRfVFlQRV9EQVRBKQotCQkJZGFyZy5hc3luYyA9IGN0eC0mZ3Q7YXN5bmNfY2FwYWJsZTsKJiM0MzsJCQlkYXJnLmFzeW5jID0gY3R4LSZndDthc3luY19jYXBhYmxlICZhbXA7JmFtcDsgdG9fZGVjcnlwdDsKIAkJZWxzZQogCQkJZGFyZy5hc3luYyA9IGZhbHNlOwogCkBAIC0xODk2LDYgJiM0MzsxOTE4LDI3IEBAIGludCB0bHNfc3dfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssCiAJCWNodW5rID0gcnhtLSZndDtmdWxsX2xlbjsKIAkJdGxzX3J4X3JlY19kb25lKGN0eCk7CiAKJiM0MzsJCS8qIEFuIGVtcHR5IHJlY29yZCBhZHZhbmNlcyBuZWl0aGVyIGxvb3AgYm91bmQsIHNvIGEgZmxvb2QKJiM0MzsJCSAqIG9mIHRoZW0gY2FuIGJlIGludGVycnVwdGVkIG9ubHkgaGVyZS4gT24gdGhlIHplcm8tY29weQomIzQzOwkJICogcGF0aCBkYXJnLnNrYiBpcyB0aGUgc3RycGFyc2VyIGFuY2hvciwgYWxyZWFkeSByZWxlYXNlZAomIzQzOwkJICogYnkgdGxzX3J4X3JlY19kb25lKCkuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICh0bHNfcnhfZW1wdHlfZGF0YV9yZWMoY2h1bmssIGNvbnRyb2wpKSB7CiYjNDM7CQkJbG9uZyB0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzICZhbXA7IE1TR19ET05UV0FJVCk7CiYjNDM7CiYjNDM7CQkJaWYgKCFkYXJnLnpjKQomIzQzOwkJCQljb25zdW1lX3NrYihkYXJnLnNrYik7CiYjNDM7CiYjNDM7CQkJLyogQW4gZW1wdHkgcmVjb3JkIHN0aWxsIG1hcmtzIGEgYm91bmRhcnkuICovCiYjNDM7CQkJbXNnLSZndDttc2dfZmxhZ3MgfD0gTVNHX0VPUjsKJiM0MzsKJiM0MzsJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKJiM0MzsJCQkJZXJyID0gdGxzX3J4X2ludHJfZXJybm8odGltZW8pOwomIzQzOwkJCQlnb3RvIHJlY3ZfZW5kOwomIzQzOwkJCX0KJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKIAkJaWYgKCFkYXJnLnpjKSB7CiAJCQlib29sIHBhcnRpYWxseV9jb25zdW1lZCA9IGNodW5rICZndDsgbGVuOwogCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRhcmcuc2tiOwpAQCAtMTk5MCwyMSAmIzQzOzIwMzMsMzEgQEAgc3NpemVfdCB0bHNfc3dfc3BsaWNlX3JlYWQoc3RydWN0IHNvY2tldCAqc29jaywgIGxvZmZfdCAqcHBvcywKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLSZndDtzazsKIAlzdHJ1Y3QgdGxzX21zZyAqdGxtOwogCXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CWJvb2wgcmVsZWFzZWQgPSB0cnVlOwogCXNzaXplX3QgY29waWVkID0gMDsKJiM0MzsJYm9vbCBub25ibG9jazsKIAlpbnQgY2h1bms7CiAJaW50IGVycjsKIAotCWVyciA9IHRsc19yeF9yZWFkZXJfbG9jayhzaywgY3R4LCBmbGFncyAmYW1wOyBTUExJQ0VfRl9OT05CTE9DSyk7CiYjNDM7CW5vbmJsb2NrID0gKGZsYWdzICZhbXA7IFNQTElDRV9GX05PTkJMT0NLKSB8fAomIzQzOwkJICAgKHNvY2stJmd0O2ZpbGUtJmd0O2ZfZmxhZ3MgJmFtcDsgT19OT05CTE9DSyk7CiYjNDM7CiYjNDM7CWVyciA9IHRsc19yeF9yZWFkZXJfbG9jayhzaywgY3R4LCBub25ibG9jayk7CiAJaWYgKGVyciAmbHQ7IDApCiAJCXJldHVybiBlcnI7CiAKJiM0MzsJLyogSWYgY3J5cHRvIGZhaWxlZCB0aGUgY29ubmVjdGlvbiBpcyBicm9rZW4gKi8KJiM0MzsJZXJyID0gY3R4LSZndDthc3luY193YWl0LmVycjsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gc3BsaWNlX3JlYWRfZW5kOwomIzQzOwomIzQzO3JldHJ5OgogCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZhbXA7Y3R4LSZndDtyeF9saXN0KSkgewogCQlza2IgPSBfX3NrYl9kZXF1ZXVlKCZhbXA7Y3R4LSZndDtyeF9saXN0KTsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgdGxzX2RlY3J5cHRfYXJnIGRhcmc7CiAKLQkJZXJyID0gdGxzX3J4X3JlY193YWl0KHNrLCBmbGFncyAmYW1wOyBTUExJQ0VfRl9OT05CTE9DSywKLQkJCQkgICAgICB0cnVlLCBmYWxzZSk7CiYjNDM7CQllcnIgPSB0bHNfcnhfcmVjX3dhaXQoc2ssIG5vbmJsb2NrLCByZWxlYXNlZCwgZmFsc2UpOwogCQlpZiAoZXJyICZsdDs9IDApCiAJCQlnb3RvIHNwbGljZV9yZWFkX2VuZDsKIApAQCAtMjAxNiw2ICYjNDM7MjA2OSwxMSBAQCBzc2l6ZV90IHRsc19zd19zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCAgbG9mZl90ICpwcG9zLAogCiAJCXRsc19yeF9yZWNfZG9uZShjdHgpOwogCQlza2IgPSBkYXJnLnNrYjsKJiM0MzsKJiM0MzsJCS8qIFRoZSBzb2NrZXQgbG9jayBzdGF5cyBoZWxkIHRvIHRoZSByZXRyeSwgc28gdGhlCiYjNDM7CQkgKiBhbmNob3IgdGhpcyB3YWl0IGxvYWRlZCBzdXJ2aXZlcyBpdC4KJiM0MzsJCSAqLwomIzQzOwkJcmVsZWFzZWQgPSBmYWxzZTsKIAl9CiAKIAlyeG0gPSBzdHJwX21zZyhza2IpOwpAQCAtMjAyNyw2ICYjNDM7MjA4NSwyMSBAQCBzc2l6ZV90IHRsc19zd19zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCAgbG9mZl90ICpwcG9zLAogCQlnb3RvIHNwbGljZV9yZXF1ZXVlOwogCX0KIAomIzQzOwkvKiBTcGxpY2luZyBhbiBlbXB0eSBkYXRhIHJlY29yZCBkZWxpdmVycyB6ZXJvIGJ5dGVzLCB3aGljaCB0aGUKJiM0MzsJICogY2FsbGVyIHJlYWRzIGFzIEVPRi4gdGxzX3J4X3JlY193YWl0KCkgc2tpcHMgaXRzIHNpZ25hbCBjaGVjawomIzQzOwkgKiB3aGlsZSBhIHJlY29yZCBpcyBwYXJzZWQsIHNvIHRlc3QgZm9yIGEgc2lnbmFsIGhlcmUuCiYjNDM7CSAqLwomIzQzOwlpZiAodGxzX3J4X2VtcHR5X2RhdGFfcmVjKHJ4bS0mZ3Q7ZnVsbF9sZW4sIHRsbS0mZ3Q7Y29udHJvbCkpIHsKJiM0MzsJCWxvbmcgdGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBub25ibG9jayk7CiYjNDM7CiYjNDM7CQljb25zdW1lX3NrYihza2IpOwomIzQzOwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CiYjNDM7CQkJZXJyID0gdGxzX3J4X2ludHJfZXJybm8odGltZW8pOwomIzQzOwkJCWdvdG8gc3BsaWNlX3JlYWRfZW5kOwomIzQzOwkJfQomIzQzOwkJZ290byByZXRyeTsKJiM0MzsJfQomIzQzOwogCWNodW5rID0gbWluX3QodW5zaWduZWQgaW50LCByeG0tJmd0O2Z1bGxfbGVuLCBsZW4pOwogCWNvcGllZCA9IHNrYl9zcGxpY2VfYml0cyhza2IsIHNrLCByeG0tJmd0O29mZnNldCwgcGlwZSwgY2h1bmssIGZsYWdzKTsKIAlpZiAoY29waWVkICZsdDsgMCkKQEAgLTIwNDksNiAmIzQzOzIxMjIsMTEgQEAgc3NpemVfdCB0bHNfc3dfc3BsaWNlX3JlYWQoc3RydWN0IHNvY2tldCAqc29jaywgIGxvZmZfdCAqcHBvcywKIAlnb3RvIHNwbGljZV9yZWFkX2VuZDsKIH0KIAomIzQzOy8qIEJvdW5kIHRoZSB0aW1lIHRoYXQgY29uc2VjdXRpdmUgZW1wdHkgaW5ncmVzcyBkYXRhIHJlY29yZHMga2VlcAomIzQzOyAqIHRoZSBzb2NrZXQgbG9jayBoZWxkIHdpdGhvdXQgcmVsZWFzaW5nIGl0LgomIzQzOyAqLwomIzQzOyNkZWZpbmUgVExTX1JYX05PREFUQV9OUyBOU0VDX1BFUl9NU0VDCiYjNDM7CiBpbnQgdGxzX3N3X3JlYWRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLAogCQkgICAgIHNrX3JlYWRfYWN0b3JfdCByZWFkX2FjdG9yKQogewpAQCAtMjA1Nyw2ICYjNDM7MjEzNSw3IEBAIGludCB0bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsCiAJc3RydWN0IHRsc19wcm90X2luZm8gKnByb3QgPSAmYW1wO3Rsc19jdHgtJmd0O3Byb3RfaW5mbzsKIAlzdHJ1Y3Qgc3RycF9tc2cgKnJ4bSA9IE5VTEw7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CiYjNDM7CXU2NCBub2RhdGFfZGVhZGxpbmUgPSAwOwogCXN0cnVjdCBza19wc29jayAqcHNvY2s7CiAJc2l6ZV90IGZsdXNoZWRfYXQgPSAwOwogCWJvb2wgcmVsZWFzZWQgPSB0cnVlOwpAQCAtMjExNSwxNCAmIzQzOzIxOTQsMjUgQEAgaW50IHRsc19zd19yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYywKIAkJCWdvdG8gcmVhZF9zb2NrX3JlcXVldWU7CiAJCX0KIAotCQkvKiBBbiBlbXB0eSBkYXRhIHJlY29yZCAobGVnYWwgaW4gVExTIDEuMykgZ2l2ZXMgYSB6ZXJvCi0JCSAqIHJlYWRfYWN0b3IgcmV0dXJuLCBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIHRoZSBjb25zdW1lcgotCQkgKiBzdGFsbGluZzsgdGhlIHVzZWQgJmx0Oz0gMCBwYXRoIHdvdWxkIHJlcXVldWUgaXQgYXQgdGhlCi0JCSAqIGhlYWQgb2YgcnhfbGlzdCBhbmQgYmxvY2sgYWxsIGxhdGVyIHJlY29yZHMuIENvbnN1bWUgaXQKLQkJICogaGVyZSBpbnN0ZWFkLgomIzQzOwkJLyogQW4gZW1wdHkgZGF0YSByZWNvcmQgZ2l2ZXMgYSB6ZXJvIHJlYWRfYWN0b3IgcmV0dXJuLAomIzQzOwkJICogaW5kaXN0aW5ndWlzaGFibGUgZnJvbSB0aGUgY29uc3VtZXIgc3RhbGxpbmc7IHRoZQomIzQzOwkJICogdXNlZCAmbHQ7PSAwIHBhdGggd291bGQgcmVxdWV1ZSBpdCBhdCB0aGUgaGVhZCBvZiByeF9saXN0CiYjNDM7CQkgKiBhbmQgYmxvY2sgYWxsIGxhdGVyIHJlY29yZHMuIENvbnN1bWUgaXQgaGVyZSBpbnN0ZWFkLgogCQkgKi8KLQkJaWYgKHJ4bS0mZ3Q7ZnVsbF9sZW4gPT0gMCkgewomIzQzOwkJaWYgKHRsc19yeF9lbXB0eV9kYXRhX3JlYyhyeG0tJmd0O2Z1bGxfbGVuLCB0bG0tJmd0O2NvbnRyb2wpKSB7CiYjNDM7CQkJZXJyID0gMDsKIAkJCWNvbnN1bWVfc2tiKHNrYik7CiYjNDM7CQkJaWYgKCFub2RhdGFfZGVhZGxpbmUpIHsKJiM0MzsJCQkJbm9kYXRhX2RlYWRsaW5lID0ga3RpbWVfZ2V0X25zKCkgJiM0MzsKJiM0MzsJCQkJCQkgIFRMU19SWF9OT0RBVEFfTlM7CiYjNDM7CQkJfSBlbHNlIGlmIChrdGltZV9nZXRfbnMoKSAmZ3Q7PSBub2RhdGFfZGVhZGxpbmUpIHsKJiM0MzsJCQkJLyogUXVldWVkIHJlY29yZHMgcmFpc2Ugbm8gbmV3IHNrX2RhdGFfcmVhZHkoKSwKJiM0MzsJCQkJICogYW5kIHRsc19yeF9yZWFkZXJfcmVsZWFzZSgpIGFubm91bmNlcyBvbmx5IHRvCiYjNDM7CQkJCSAqIHNhdmVkX2RhdGFfcmVhZHkoKSwgbm90IHRoZSBjb25zdW1lciYjMzk7cyBvd24uCiYjNDM7CQkJCSAqLwomIzQzOwkJCQlzay0mZ3Q7c2tfZGF0YV9yZWFkeShzayk7CiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCX0KIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTIxMzMsNiAmIzQzOzIyMjMsNyBAQCBpbnQgdGxzX3N3X3JlYWRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLAogCQkJZ290byByZWFkX3NvY2tfcmVxdWV1ZTsKIAkJfQogCQljb3BpZWQgJiM0Mzs9IHVzZWQ7CiYjNDM7CQlub2RhdGFfZGVhZGxpbmUgPSAwOwogCQlpZiAodXNlZCAmbHQ7IHJ4bS0mZ3Q7ZnVsbF9sZW4pIHsKIAkJCXJ4bS0mZ3Q7b2Zmc2V0ICYjNDM7PSB1c2VkOwogCQkJcnhtLSZndDtmdWxsX2xlbiAtPSB1c2VkOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jCmluZGV4IGNiZGQzZWEyOGI5OThmLi44YjY4ZGJmY2M1OTI0NiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYwpAQCAtMjQsNiAmIzQzOzI0LDcgQEAKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaCYjMzQ7CiAKICNkZWZpbmUgVExTX1BBWUxPQURfTUFYX0xFTiAxNjM4NAomIzQzOyNkZWZpbmUgVExTX0hEUl9MRU4gNQogI2RlZmluZSBTT0xfVExTIDI4MgogCiBzdGF0aWMgaW50IGZpcHNfZW5hYmxlZDsKQEAgLTI1NDQsNiAmIzQzOzI1NDUsOSBAQCBURVNUX0YoemVyb19sZW4sIHRlc3QpCiAJaW50IHJlY19vZmY7CiAJaW50IGk7CiAKJiM0MzsJaWYgKHNlbGYtJmd0O25vdGxzKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7bm8gVExTIHN1cHBvcnQmIzM0Oyk7CiYjNDM7CiAJZm9yIChpID0gMDsgaSAmbHQ7IDQgJmFtcDsmYW1wOyB2YXJpYW50LSZndDtyZWNzW2ldOyBpJiM0MzsmIzQzOykKIAkJRVhQRUNUX0VRKHNlbmQoc2VsZi0mZ3Q7ZmQsIHZhcmlhbnQtJmd0O3JlY3NbaV0tJmd0O2NpcGhlcl9kYXRhLAogCQkJICAgICAgIHZhcmlhbnQtJmd0O3JlY3NbaV0tJmd0O2NpcGhlcl9sZW4sIDApLApAQCAtMjU3Myw2ICYjNDM7MjU3NywyNDggQEAgVEVTVF9GKHplcm9fbGVuLCB0ZXN0KQogCX0KIH07CiAKJiM0MztzdGF0aWMgdm9pZCB6ZXJvX2xlbl9zb2NrX3BhaXIoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLAomIzQzOwkJCSAgICAgICBpbnQgKmZkLCBpbnQgKmNmZCwgYm9vbCAqbm90bHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGxzX2NyeXB0b19pbmZvX2tleXMgdGxzMTI7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXRsc19jcnlwdG9faW5mb19pbml0KFRMU18xXzJfVkVSU0lPTiwgVExTX0NJUEhFUl9BRVNfQ0NNXzEyOCwKJiM0MzsJCQkgICAgICZhbXA7dGxzMTIsIDApOwomIzQzOwomIzQzOwl1bHBfc29ja19wYWlyKF9tZXRhZGF0YSwgZmQsIGNmZCwgbm90bHMpOwomIzQzOwlpZiAoKm5vdGxzKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwkvKiBmZCBzdGF5cyBrZXlsZXNzOyB0aGVzZSBmaXh0dXJlcyBzZW5kIHJhdyByZWNvcmRzIG92ZXIgaXQgKi8KJiM0MzsJcmV0ID0gc2V0c29ja29wdCgqY2ZkLCBTT0xfVExTLCBUTFNfUlgsICZhbXA7dGxzMTIsIHRsczEyLmxlbik7CiYjNDM7CUFTU0VSVF9FUShyZXQsIDApOwomIzQzO30KJiM0MzsKJiM0MzsvKiBTZW5kIGEgdmFyaWFudCYjMzk7cyByZWNvcmRzOyByZXR1cm4gdGhlIGxhc3Qgb25lIGNhcnJ5aW5nIHBheWxvYWQgKi8KJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJhd19yZWMgKgomIzQzO3plcm9fbGVuX3NlbmRfcmVjcyhzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIGludCBmZCwKJiM0MzsJCSAgIGNvbnN0IHN0cnVjdCByYXdfcmVjICpjb25zdCAqcmVjcykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCByYXdfcmVjICpwYXlsb2FkID0gTlVMTDsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyA0ICZhbXA7JmFtcDsgcmVjc1tpXTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCUVYUEVDVF9FUShzZW5kKGZkLCByZWNzW2ldLSZndDtjaXBoZXJfZGF0YSwgcmVjc1tpXS0mZ3Q7Y2lwaGVyX2xlbiwgMCksCiYjNDM7CQkJICByZWNzW2ldLSZndDtjaXBoZXJfbGVuKTsKJiM0MzsJCWlmIChyZWNzW2ldLSZndDtwbGFpbl9sZW4pCiYjNDM7CQkJcGF5bG9hZCA9IHJlY3NbaV07CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHBheWxvYWQ7CiYjNDM7fQomIzQzOwomIzQzO0ZJWFRVUkUoemVyb19sZW5fcGVlaykKJiM0Mzt7CiYjNDM7CWludCBmZCwgY2ZkOwomIzQzOwlib29sIG5vdGxzOwomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UKHplcm9fbGVuX3BlZWspCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgcmF3X3JlYyAqcmVjc1s0XTsKJiM0MzsJc3NpemVfdCBwZWVrX3JldDsKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoemVyb19sZW5fcGVlaywgMGRhdGFfMGRhdGFfZGF0YSkKJiM0Mzt7CiYjNDM7CS5yZWNzID0geyAmYW1wO2lkMF9kYXRhX2wwLCAmYW1wO2lkMV9kYXRhX2wwLCAmYW1wO2lkMl9kYXRhX2wxMSwgfSwKJiM0MzsJLnBlZWtfcmV0ID0gMTEsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKHplcm9fbGVuX3BlZWssIDBkYXRhXzBkYXRhXzBkYXRhKQomIzQzO3sKJiM0MzsJLnJlY3MgPSB7ICZhbXA7aWQwX2RhdGFfbDAsICZhbXA7aWQxX2RhdGFfbDAsICZhbXA7aWQyX2RhdGFfbDAsIH0sCiYjNDM7CS5wZWVrX3JldCA9IC1FQUdBSU4sCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1NFVFVQKHplcm9fbGVuX3BlZWspCiYjNDM7ewomIzQzOwl6ZXJvX2xlbl9zb2NrX3BhaXIoX21ldGFkYXRhLCAmYW1wO3NlbGYtJmd0O2ZkLCAmYW1wO3NlbGYtJmd0O2NmZCwgJmFtcDtzZWxmLSZndDtub3Rscyk7CiYjNDM7fQomIzQzOwomIzQzO0ZJWFRVUkVfVEVBUkRPV04oemVyb19sZW5fcGVlaykKJiM0Mzt7CiYjNDM7CWNsb3NlKHNlbGYtJmd0O2ZkKTsKJiM0MzsJY2xvc2Uoc2VsZi0mZ3Q7Y2ZkKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogUGVla2luZyBwYXN0IGEgcnVuIG9mIGVtcHR5IGRhdGEgcmVjb3JkcyBtdXN0IHJlYWNoIHRoZSBwYXlsb2FkCiYjNDM7ICogYmVoaW5kIHRoZW0sIGFuZCBhIHJ1biB3aXRoIG5vIHBheWxvYWQgYmVoaW5kIGl0IG11c3QgcmVwb3J0IEVBR0FJTgomIzQzOyAqIHJhdGhlciB0aGFuIHRoZSB6ZXJvIHJldHVybiB0aGF0IG1lYW5zIEVPRi4KJiM0MzsgKi8KJiM0MztURVNUX0YoemVyb19sZW5fcGVlaywgdGVzdCkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCByYXdfcmVjICpwYXlsb2FkOwomIzQzOwl1bnNpZ25lZCBjaGFyIGJ1ZlsxMjhdOwomIzQzOwlzc2l6ZV90IHJldDsKJiM0MzsKJiM0MzsJaWYgKHNlbGYtJmd0O25vdGxzKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7bm8gVExTIHN1cHBvcnQmIzM0Oyk7CiYjNDM7CiYjNDM7CXBheWxvYWQgPSB6ZXJvX2xlbl9zZW5kX3JlY3MoX21ldGFkYXRhLCBzZWxmLSZndDtmZCwgdmFyaWFudC0mZ3Q7cmVjcyk7CiYjNDM7CiYjNDM7CWlmICh2YXJpYW50LSZndDtwZWVrX3JldCAmbHQ7IDApIHsKJiM0MzsJCXJldCA9IHJlY3Yoc2VsZi0mZ3Q7Y2ZkLCBidWYsIHNpemVvZihidWYpLAomIzQzOwkJCSAgIE1TR19ET05UV0FJVCB8IE1TR19QRUVLKTsKJiM0MzsJCUVYUEVDVF9FUShyZXQsIC0xKTsKJiM0MzsJCWlmIChyZXQgPT0gLTEpCiYjNDM7CQkJRVhQRUNUX0VRKGVycm5vLCAtdmFyaWFudC0mZ3Q7cGVla19yZXQpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHJlY3Yoc2VsZi0mZ3Q7Y2ZkLCBidWYsIHNpemVvZihidWYpLCBNU0dfRE9OVFdBSVQgfCBNU0dfUEVFSyk7CiYjNDM7CUVYUEVDVF9FUShyZXQsIHZhcmlhbnQtJmd0O3BlZWtfcmV0KTsKJiM0MzsJaWYgKHJldCA9PSB2YXJpYW50LSZndDtwZWVrX3JldCkKJiM0MzsJCUVYUEVDVF9FUShtZW1jbXAoYnVmLCBwYXlsb2FkLSZndDtwbGFpbl9kYXRhLAomIzQzOwkJCQkgdmFyaWFudC0mZ3Q7cGVla19yZXQpLCAwKTsKJiM0MzsKJiM0MzsJLyogUGVla2luZyBsZWZ0IHRoZSBwYXlsb2FkIGluIHBsYWNlIGZvciB0aGUgcmVhZCB0aGF0IGZvbGxvd3MgKi8KJiM0MzsJcmV0ID0gcmVjdihzZWxmLSZndDtjZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIE1TR19ET05UV0FJVCk7CiYjNDM7CUVYUEVDVF9FUShyZXQsIHZhcmlhbnQtJmd0O3BlZWtfcmV0KTsKJiM0MzsJaWYgKHJldCA9PSB2YXJpYW50LSZndDtwZWVrX3JldCkKJiM0MzsJCUVYUEVDVF9FUShtZW1jbXAoYnVmLCBwYXlsb2FkLSZndDtwbGFpbl9kYXRhLAomIzQzOwkJCQkgdmFyaWFudC0mZ3Q7cGVla19yZXQpLCAwKTsKJiM0MzsKJiM0MzsJcmV0ID0gcmVjdihzZWxmLSZndDtjZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIE1TR19ET05UV0FJVCk7CiYjNDM7CUVYUEVDVF9FUShyZXQsIC0xKTsKJiM0MzsJaWYgKHJldCA9PSAtMSkKJiM0MzsJCUVYUEVDVF9FUShlcnJubywgRUFHQUlOKTsKJiM0Mzt9CiYjNDM7CiYjNDM7RklYVFVSRSh6ZXJvX2xlbl9zcGxpY2UpCiYjNDM7ewomIzQzOwlpbnQgZmQsIGNmZDsKJiM0MzsJYm9vbCBub3RsczsKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVCh6ZXJvX2xlbl9zcGxpY2UpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgcmF3X3JlYyAqcmVjc1s0XTsKJiM0MzsJc3NpemVfdCBzcGxpY2VfcmV0OwomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERCh6ZXJvX2xlbl9zcGxpY2UsIDBkYXRhX2RhdGEpCiYjNDM7ewomIzQzOwkucmVjcyA9IHsgJmFtcDtpZDBfZGF0YV9sMCwgJmFtcDtpZDFfZGF0YV9sMTEsIH0sCiYjNDM7CS5zcGxpY2VfcmV0ID0gMTEsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKHplcm9fbGVuX3NwbGljZSwgMGRhdGFfMGRhdGFfZGF0YSkKJiM0Mzt7CiYjNDM7CS5yZWNzID0geyAmYW1wO2lkMF9kYXRhX2wwLCAmYW1wO2lkMV9kYXRhX2wwLCAmYW1wO2lkMl9kYXRhX2wxMSwgfSwKJiM0MzsJLnNwbGljZV9yZXQgPSAxMSwKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoemVyb19sZW5fc3BsaWNlLCAwZGF0YV8wZGF0YV8wZGF0YSkKJiM0Mzt7CiYjNDM7CS5yZWNzID0geyAmYW1wO2lkMF9kYXRhX2wwLCAmYW1wO2lkMV9kYXRhX2wwLCAmYW1wO2lkMl9kYXRhX2wwLCB9LAomIzQzOwkuc3BsaWNlX3JldCA9IC1FQUdBSU4sCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKHplcm9fbGVuX3NwbGljZSwgMGRhdGFfMGN0cmwpCiYjNDM7ewomIzQzOwkucmVjcyA9IHsgJmFtcDtpZDBfZGF0YV9sMCwgJmFtcDtpZDFfY3RybF9sMCwgfSwKJiM0MzsJLnNwbGljZV9yZXQgPSAtRUlOVkFMLAomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9TRVRVUCh6ZXJvX2xlbl9zcGxpY2UpCiYjNDM7ewomIzQzOwl6ZXJvX2xlbl9zb2NrX3BhaXIoX21ldGFkYXRhLCAmYW1wO3NlbGYtJmd0O2ZkLCAmYW1wO3NlbGYtJmd0O2NmZCwgJmFtcDtzZWxmLSZndDtub3Rscyk7CiYjNDM7fQomIzQzOwomIzQzO0ZJWFRVUkVfVEVBUkRPV04oemVyb19sZW5fc3BsaWNlKQomIzQzO3sKJiM0MzsJY2xvc2Uoc2VsZi0mZ3Q7ZmQpOwomIzQzOwljbG9zZShzZWxmLSZndDtjZmQpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBBbiBlbXB0eSBkYXRhIHJlY29yZCBzcGxpY2VzIHplcm8gYnl0ZXMsIHdoaWNoIGEgc3BsaWNlIGNhbGxlciByZWFkcwomIzQzOyAqIGFzIEVPRi4gU3BsaWNpbmcgbXVzdCBza2lwIHBhc3Qgc3VjaCBhIHJlY29yZCB0byB0aGUgcGF5bG9hZCBiZWhpbmQKJiM0MzsgKiBpdCwgYW5kIHJlcG9ydCBFQUdBSU4gd2hlbiBhIHJ1biBvZiB0aGVtIGhhcyBubyBwYXlsb2FkIGJlaGluZCBpdC4KJiM0MzsgKiBBIGNvbnRyb2wgcmVjb3JkIGJlaGluZCB0aGUgcnVuIHJlcG9ydHMgRUlOVkFMLCB0aGUgZXJyb3Igc3BsaWNlCiYjNDM7ICogYWxyZWFkeSByZXBvcnRzIGZvciBhIGNvbnRyb2wgcmVjb3JkIGl0IG1lZXRzIGZpcnN0LgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkCiYjNDM7emVyb19sZW5fZG9fc3BsaWNlKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSwKJiM0MzsJCSAgIHN0cnVjdCBfdGVzdF9kYXRhX3plcm9fbGVuX3NwbGljZSAqc2VsZiwKJiM0MzsJCSAgIGNvbnN0IHN0cnVjdCBfZml4dHVyZV92YXJpYW50X3plcm9fbGVuX3NwbGljZSAqdmFyaWFudCwKJiM0MzsJCSAgIHVuc2lnbmVkIGludCBzcGxpY2VfZmxhZ3MpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgcmF3X3JlYyAqcGF5bG9hZDsKJiM0MzsJdW5zaWduZWQgY2hhciBidWZbMTI4XTsKJiM0MzsJc3NpemVfdCByZXQ7CiYjNDM7CWludCBwWzJdOwomIzQzOwomIzQzOwlBU1NFUlRfR0UocGlwZShwKSwgMCk7CiYjNDM7CiYjNDM7CXBheWxvYWQgPSB6ZXJvX2xlbl9zZW5kX3JlY3MoX21ldGFkYXRhLCBzZWxmLSZndDtmZCwgdmFyaWFudC0mZ3Q7cmVjcyk7CiYjNDM7CiYjNDM7CWlmICh2YXJpYW50LSZndDtzcGxpY2VfcmV0ICZsdDsgMCkgewomIzQzOwkJcmV0ID0gc3BsaWNlKHNlbGYtJmd0O2NmZCwgTlVMTCwgcFsxXSwgTlVMTCwgc2l6ZW9mKGJ1ZiksCiYjNDM7CQkJICAgICBzcGxpY2VfZmxhZ3MpOwomIzQzOwkJRVhQRUNUX0VRKHJldCwgLTEpOwomIzQzOwkJaWYgKHJldCA9PSAtMSkKJiM0MzsJCQlFWFBFQ1RfRVEoZXJybm8sIC12YXJpYW50LSZndDtzcGxpY2VfcmV0KTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIEFzc2VydDogYSB6ZXJvIHJldHVybiwgd2hpY2ggaXMgd2hhdCBhbiB1bmZpeGVkIGtlcm5lbAomIzQzOwkJICogZ2l2ZXMgaGVyZSwgbGVhdmVzIHRoZSBwaXBlIGVtcHR5LCBhbmQgdGhlIHJlYWQgYmVsb3cKJiM0MzsJCSAqIHdvdWxkIHRoZW4gYmxvY2sgdW50aWwgdGhlIGhhcm5lc3MgdGltZW91dC4KJiM0MzsJCSAqLwomIzQzOwkJQVNTRVJUX0VRKHNwbGljZShzZWxmLSZndDtjZmQsIE5VTEwsIHBbMV0sIE5VTEwsIHNpemVvZihidWYpLAomIzQzOwkJCQkgc3BsaWNlX2ZsYWdzKSwgdmFyaWFudC0mZ3Q7c3BsaWNlX3JldCk7CiYjNDM7CQlyZXQgPSByZWFkKHBbMF0sIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwomIzQzOwkJRVhQRUNUX0VRKHJldCwgdmFyaWFudC0mZ3Q7c3BsaWNlX3JldCk7CiYjNDM7CQlpZiAocmV0ID09IHZhcmlhbnQtJmd0O3NwbGljZV9yZXQpCiYjNDM7CQkJRVhQRUNUX0VRKG1lbWNtcChidWYsIHBheWxvYWQtJmd0O3BsYWluX2RhdGEsCiYjNDM7CQkJCQkgdmFyaWFudC0mZ3Q7c3BsaWNlX3JldCksIDApOwomIzQzOwomIzQzOwkJLyogUmVhY2hpbmcgdGhlIHBheWxvYWQgY29uc3VtZWQgdGhlIGVtcHR5IHJlY29yZHMgYWhlYWQKJiM0MzsJCSAqIG9mIGl0IHJhdGhlciB0aGFuIGxlYXZpbmcgdGhlbSBvbiB0aGUgcmVjZWl2ZSBxdWV1ZQomIzQzOwkJICovCiYjNDM7CQlyZXQgPSByZWN2KHNlbGYtJmd0O2NmZCwgYnVmLCBzaXplb2YoYnVmKSwgTVNHX0RPTlRXQUlUKTsKJiM0MzsJCUVYUEVDVF9FUShyZXQsIC0xKTsKJiM0MzsJCWlmIChyZXQgPT0gLTEpCiYjNDM7CQkJRVhQRUNUX0VRKGVycm5vLCBFQUdBSU4pOwomIzQzOwl9CiYjNDM7CiYjNDM7CWNsb3NlKHBbMF0pOwomIzQzOwljbG9zZShwWzFdKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKHplcm9fbGVuX3NwbGljZSwgdGVzdCkKJiM0Mzt7CiYjNDM7CWlmIChzZWxmLSZndDtub3RscykKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O25vIFRMUyBzdXBwb3J0JiMzNDspOwomIzQzOwomIzQzOwl6ZXJvX2xlbl9kb19zcGxpY2UoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBTUExJQ0VfRl9OT05CTE9DSyk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFRoZSBzb2NrZXQmIzM5O3Mgb3duIE9fTk9OQkxPQ0sgZ292ZXJucyB0aGUgcmVjb3JkIHdhaXQsIGFzIGl0IGRvZXMgb24gYQomIzQzOyAqIHBsYWluIFRDUCBzb2NrZXQsIHNvIGEgc3BsaWNlIHRoYXQgb21pdHMgU1BMSUNFX0ZfTk9OQkxPQ0sgcmVhY2hlcwomIzQzOyAqIHRoZSBzYW1lIG91dGNvbWUgYXMgb25lIHRoYXQgc2V0cyBpdC4gQW4gdW5maXhlZCBrZXJuZWwgZGVyaXZlcyB0aGUKJiM0MzsgKiB3YWl0IGZyb20gU1BMSUNFX0ZfTk9OQkxPQ0sgYWxvbmUgYW5kIHNsZWVwcyBoZXJlIHVudGlsIHRoZSBoYXJuZXNzCiYjNDM7ICogdGltZW91dC4KJiM0MzsgKi8KJiM0MztURVNUX0YoemVyb19sZW5fc3BsaWNlLCBub25ibG9ja19zb2NrZXQpCiYjNDM7ewomIzQzOwlpbnQgc2ZsYWdzOwomIzQzOwomIzQzOwlpZiAoc2VsZi0mZ3Q7bm90bHMpCiYjNDM7CQlTS0lQKHJldHVybiwgJiMzNDtubyBUTFMgc3VwcG9ydCYjMzQ7KTsKJiM0MzsKJiM0MzsJc2ZsYWdzID0gZmNudGwoc2VsZi0mZ3Q7Y2ZkLCBGX0dFVEZMLCAwKTsKJiM0MzsJQVNTRVJUX0dFKHNmbGFncywgMCk7CiYjNDM7CUFTU0VSVF9FUShmY250bChzZWxmLSZndDtjZmQsIEZfU0VURkwsIHNmbGFncyB8IE9fTk9OQkxPQ0spLCAwKTsKJiM0MzsKJiM0MzsJemVyb19sZW5fZG9fc3BsaWNlKF9tZXRhZGF0YSwgc2VsZiwgdmFyaWFudCwgMCk7CiYjNDM7fQomIzQzOwogRklYVFVSRSh0bHNfZXJyKQogewogCWludCBmZCwgY2ZkOwpAQCAtMjYzOCwyOCAmIzQzOzI4ODQsODUgQEAgVEVTVF9GKHRsc19lcnIsIGJhZF9yZWMpCiAJRVhQRUNUX0VRKGVycm5vLCBFQUdBSU4pOwogfQogCiYjNDM7LyogRW5jcnlwdCBhIHJlY29yZCBvbiB0aGUgVFgtb25seSBzb2NrZXQgcGFpciwgY29ycnVwdCBpdHMgbGFzdAomIzQzOyAqIGJ5dGUsIGFuZCBoYW5kIHRoZSByZXN1bHQgdG8gdGhlIHNvY2tldCB1bmRlciB0ZXN0LiBjZmQgY2FycmllcyBhCiYjNDM7ICogYnl0ZSBzdHJlYW0sIHNvIG9uZSByZWN2KCkgY2FuIHJldHVybiBwYXJ0IG9mIGEgcmVjb3JkOiB0YWtlIHRoZQomIzQzOyAqIGZyYWdtZW50IGxlbmd0aCBmcm9tIHRoZSByZWNvcmQgaGVhZGVyIGFuZCB3YWl0IGZvciB0aGUgcmVtYWluZGVyLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHRsc19zZW5kX2JhZF9hdXRoKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSwKJiM0MzsJCQkgICAgICBpbnQgZmQsIGludCBjZmQsIGludCBmZDIpCiYjNDM7ewomIzQzOwljaGFyIGJ1ZlsxMjhdOwomIzQzOwlpbnQgbGVuOwomIzQzOwomIzQzOwltZW1ybmQoYnVmLCBzaXplb2YoYnVmKSAvIDIpOwomIzQzOwlBU1NFUlRfRVEoc2VuZChmZCwgYnVmLCBzaXplb2YoYnVmKSAvIDIsIDApLCBzaXplb2YoYnVmKSAvIDIpOwomIzQzOwomIzQzOwlBU1NFUlRfRVEocmVjdihjZmQsIGJ1ZiwgVExTX0hEUl9MRU4sIE1TR19XQUlUQUxMKSwgVExTX0hEUl9MRU4pOwomIzQzOwomIzQzOwlsZW4gPSAoKHVuc2lnbmVkIGNoYXIpYnVmWzNdICZsdDsmbHQ7IDgpIHwgKHVuc2lnbmVkIGNoYXIpYnVmWzRdOwomIzQzOwlBU1NFUlRfR1QobGVuLCAwKTsKJiM0MzsJQVNTRVJUX0xFKGxlbiwgKGludClzaXplb2YoYnVmKSAtIFRMU19IRFJfTEVOKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKHJlY3YoY2ZkLCBidWYgJiM0MzsgVExTX0hEUl9MRU4sIGxlbiwgTVNHX1dBSVRBTEwpLCBsZW4pOwomIzQzOwomIzQzOwlidWZbVExTX0hEUl9MRU4gJiM0MzsgbGVuIC0gMV0mIzQzOyYjNDM7OwomIzQzOwomIzQzOwlBU1NFUlRfRVEoc2VuZChmZDIsIGJ1ZiwgVExTX0hEUl9MRU4gJiM0MzsgbGVuLCAwKSwgVExTX0hEUl9MRU4gJiM0MzsgbGVuKTsKJiM0Mzt9CiYjNDM7CiBURVNUX0YodGxzX2VyciwgYmFkX2F1dGgpCiB7CiAJY2hhciBidWZbMTI4XTsKLQlpbnQgbjsKIAogCWlmIChzZWxmLSZndDtub3RscykKIAkJU0tJUChyZXR1cm4sICYjMzQ7bm8gVExTIHN1cHBvcnQmIzM0Oyk7CiAKLQltZW1ybmQoYnVmLCBzaXplb2YoYnVmKSAvIDIpOwotCUVYUEVDVF9FUShzZW5kKHNlbGYtJmd0O2ZkLCBidWYsIHNpemVvZihidWYpIC8gMiwgMCksIHNpemVvZihidWYpIC8gMik7Ci0JbiA9IHJlY3Yoc2VsZi0mZ3Q7Y2ZkLCBidWYsIHNpemVvZihidWYpLCAwKTsKLQlFWFBFQ1RfR1Qobiwgc2l6ZW9mKGJ1ZikgLyAyKTsKLQotCWJ1ZltuIC0gMV0mIzQzOyYjNDM7OwomIzQzOwl0bHNfc2VuZF9iYWRfYXV0aChfbWV0YWRhdGEsIHNlbGYtJmd0O2ZkLCBzZWxmLSZndDtjZmQsIHNlbGYtJmd0O2ZkMik7CiAKLQlFWFBFQ1RfRVEoc2VuZChzZWxmLSZndDtmZDIsIGJ1ZiwgbiwgMCksIG4pOwogCUVYUEVDVF9FUShyZWN2KHNlbGYtJmd0O2NmZDIsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApLCAtMSk7CiAJRVhQRUNUX0VRKGVycm5vLCBFQkFETVNHKTsKIAlFWFBFQ1RfRVEocmVjdihzZWxmLSZndDtjZmQyLCBidWYsIHNpemVvZihidWYpLCAwKSwgLTEpOwogCUVYUEVDVF9FUShlcnJubywgRUJBRE1TRyk7CiB9CiAKJiM0MzsvKiBBIHJlY29yZCB0aGF0IGRpZCBub3QgYXV0aGVudGljYXRlIGJyZWFrcyB0aGUgY29ubmVjdGlvbiBmb3IgZXZlcnkKJiM0MzsgKiByZWFkZXIsIHNwbGljZSBpbmNsdWRlZC4KJiM0MzsgKgomIzQzOyAqIFRoZSB0d28gZGVjcnlwdCBwYXRocyByZWFjaCB0aGF0IHJlc3VsdCBkaWZmZXJlbnRseS4gQSBzeW5jaHJvbm91cwomIzQzOyAqIGRlY3J5cHQgbGVhdmVzIHRoZSByZWNvcmQgcGFyc2VkLCBzbyB0aGUgc3BsaWNlIHJlLXJ1bnMgdGhlIGRlY3J5cHQKJiM0MzsgKiBhbmQgZmFpbHMgb24gdGhlIHJlY29yZCBpdHNlbGY7IHRoZSBjdHgtJmd0O2FzeW5jX3dhaXQuZXJyIGNoZWNrIGluCiYjNDM7ICogdGxzX3N3X3NwbGljZV9yZWFkKCkgaXMgbm90IHdoYXQgc3RvcHMgaXQuIE9ubHkgYW4gYXN5bmNocm9ub3VzCiYjNDM7ICogZGVjcnlwdCwgd2hpY2ggbmVlZHMgYSBUTFMgMS4yIHNvY2tldCBhbmQgYW4gQUVBRCBhZHZlcnRpc2luZwomIzQzOyAqIENSWVBUT19BTEdfQVNZTkMsIGNvbnN1bWVzIHRoZSByZWNvcmQgYmVmb3JlIHRoZSBmYWlsdXJlIGlzCiYjNDM7ICogcmVjb3JkZWQsIGxlYXZpbmcgdGhhdCBjaGVjayB0aGUgc29sZSByZWFzb24gdGhlIHNwbGljZSBmYWlscy4KJiM0MzsgKi8KJiM0MztURVNUX0YodGxzX2VyciwgYmFkX2F1dGhfc3BsaWNlKQomIzQzO3sKJiM0MzsJY2hhciBidWZbMTI4XTsKJiM0MzsJc3NpemVfdCByZXQ7CiYjNDM7CWludCBwWzJdOwomIzQzOwomIzQzOwlpZiAoc2VsZi0mZ3Q7bm90bHMpCiYjNDM7CQlTS0lQKHJldHVybiwgJiMzNDtubyBUTFMgc3VwcG9ydCYjMzQ7KTsKJiM0MzsKJiM0MzsJdGxzX3NlbmRfYmFkX2F1dGgoX21ldGFkYXRhLCBzZWxmLSZndDtmZCwgc2VsZi0mZ3Q7Y2ZkLCBzZWxmLSZndDtmZDIpOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEocmVjdihzZWxmLSZndDtjZmQyLCBidWYsIHNpemVvZihidWYpLCAwKSwgLTEpOwomIzQzOwlFWFBFQ1RfRVEoZXJybm8sIEVCQURNU0cpOwomIzQzOwomIzQzOwlBU1NFUlRfR0UocGlwZShwKSwgMCk7CiYjNDM7CiYjNDM7CXJldCA9IHNwbGljZShzZWxmLSZndDtjZmQyLCBOVUxMLCBwWzFdLCBOVUxMLCBzaXplb2YoYnVmKSwKJiM0MzsJCSAgICAgU1BMSUNFX0ZfTk9OQkxPQ0spOwomIzQzOwlFWFBFQ1RfRVEocmV0LCAtMSk7CiYjNDM7CWlmIChyZXQgPT0gLTEpCiYjNDM7CQlFWFBFQ1RfRVEoZXJybm8sIEVCQURNU0cpOwomIzQzOwomIzQzOwljbG9zZShwWzBdKTsKJiM0MzsJY2xvc2UocFsxXSk7CiYjNDM7fQomIzQzOwogVEVTVF9GKHRsc19lcnIsIGJhZF9pbl9sYXJnZV9yZWFkKQogewogCWNoYXIgdHh0WzNdWzY0XTsKQEAgLTI5MTUsNyAmIzQzOzMyMTgsNiBAQCBzdGF0aWMgc2l6ZV90IHBhcnNlX3Rsc19yZWNvcmRzKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSwKIHsKIAljb25zdCBfX3U4ICpyZWMgPSByeF9idWY7CiAJc2l6ZV90IHRvdGFsX3BsYWludGV4dF9yeCA9IDA7Ci0JY29uc3QgX191OCByZWNfaGVhZGVyX2xlbiA9IDU7CiAKIAl3aGlsZSAocmVjICZsdDsgcnhfYnVmICYjNDM7IHJ4X2xlbikgewogCQlfX3UxNiByZWNvcmRfcGF5bG9hZF9sZW47CkBAIC0yOTM1LDcgJiM0MzszMjM3LDcgQEAgc3RhdGljIHNpemVfdCBwYXJzZV90bHNfcmVjb3JkcyhzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsCiAKIAkJLyogUGxhaW50ZXh0IG11c3Qgbm90IGV4Y2VlZCB0aGUgc3BlY2lmaWVkIGxpbWl0ICovCiAJCUFTU0VSVF9MRShwbGFpbnRleHRfbGVuLCBtYXhfcGF5bG9hZF9sZW4pOwotCQlyZWMgJiM0Mzs9IHJlY19oZWFkZXJfbGVuICYjNDM7IHJlY29yZF9wYXlsb2FkX2xlbjsKJiM0MzsJCXJlYyAmIzQzOz0gVExTX0hEUl9MRU4gJiM0MzsgcmVjb3JkX3BheWxvYWRfbGVuOwogCX0KIAogCXJldHVybiB0b3RhbF9wbGFpbnRleHRfcng7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3ODcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUTFMgRW1wdHkgRGF0YSBSZWNvcmQgSGFuZGxpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIFRMUyBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IGluIGBuZXQvdGxzL3Rsc19zdy5jYC4gVGhpcyBpcyBmb2N1c2VkIG9uIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgdGhvc2UgcGVza3kgemVyby1sZW5ndGggYGFwcGxpY2F0aW9uX2RhdGFgIHJlY29yZHMsIHRoZSBvbmVzIHdpdGggbm8gYWN0dWFsIHBheWxvYWQsIGluIGJvdGggVExTIDEuMiBhbmQgMS4zLgoKVGhlIGtleSBhZGRpdGlvbnMgYXJlIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IHRoZXkmIzM5O3ZlIGFkZGVkIGB0bHNfcnhfZW1wdHlfZGF0YV9yZWNgIHRvIGNoZWNrIGZvciB0aGVzZSBlbXB0eSByZWNvcmRzLiBBbmQsIGNyaXRpY2FsbHksIHRoZSBjb2RlIGluIGB0bHNfc3dfcmVjdm1zZ2AsIGB0bHNfc3dfc3BsaWNlX3JlYWRgLCBhbmQgYHRsc19zd19yZWFkX3NvY2tgIGhhcyBiZWVuIG1vZGlmaWVkIHRvIGhhbmRsZSB0aGVtIGNvcnJlY3RseS4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTt2ZSBoYWQgdG8gYWRkIGEgY2hlY2sgZm9yIGBjdHgtJmd0O2FzeW5jX3dhaXQuZXJyYCBpbiBgdGxzX3N3X3NwbGljZV9yZWFkYCB0byBhY2NvdW50IGZvciBwb3RlbnRpYWwgY3J5cHRvIGZhaWx1cmVzLCB3aGljaCBtYWtlcyBzZW5zZSwgYXMgYW4gZW1wdHkgcmVjb3JkIGNvdWxkIGJlIHVzZWQgdG8gZXhwbG9pdCBhbiBlcnJvci4gUGx1cywgYHRsc19yeF9pbnRyX2Vycm5vYCBoYXMgYmVlbiB0aHJvd24gaW4gdGhlcmUgZm9yIHNpZ25hbCBpbnRlcnJ1cHRpb24gaGFuZGxpbmcuIFRoZSBjaGFuZ2VzIHRvIGB0bHNfc3dfcmVhZF9zb2NrYCBsb29rIGxpa2UgdGhleSYjMzk7cmUgYm91bmRpbmcgdGhlIHRpbWUgY29uc2VjdXRpdmUgZW1wdHkgcmVjb3JkcyBjYW4gaG9sZCB0aGUgc29ja2V0IGxvY2ssIHdoaWNoIGlzIGEgZ29vZCBtb3ZlIHRvIHByZXZlbnQgcG90ZW50aWFsIGRlbmlhbC1vZi1zZXJ2aWNlIG9yIGxvY2sgY29udGVudGlvbi4KClRoaXMgZmVlbHMgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBoZWFydCBvZiB0aGUgbmV0d29ya2luZyBzdGFjaywgdGhlIFRMUyBpbXBsZW1lbnRhdGlvbiBpdHNlbGYuIEZyb20gYSBzZWN1cml0eSBwZXJzcGVjdGl2ZSwgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IG5lZWRzIHRob3JvdWdoIGZ1enppbmcuCgpNeSBwcmltYXJ5IGZvY3VzIGhlcmUgd2lsbCBiZSB0byBleGFtaW5lIHRoZSBmdW5jdGlvbnMgYWZmZWN0ZWQuIFNvOgoKKiAgIGB0bHNfc3dfcmVjdm1zZ2AKKiAgIGB0bHNfc3dfc3BsaWNlX3JlYWRgCiogICBgdGxzX3N3X3JlYWRfc29ja2AKCk5vdywgbGV0JiMzOTtzIHNlZSBob3cgdGhlc2UgYXJlICp1c2VkKi4gQXJlIHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMsIG9yIGFyZSB0aGV5IGV4cG9ydGVkIG9yIHVzZWQgYXMgY2FsbGJhY2tzPyBBIHF1aWNrIGNoZWNrIHNob3dzIHRoYXQgZWFjaCBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgaW4gYHRsc19zdy5jYCAtIGEgZ29vZCBzdGFydCwgYnV0IEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIGluIG90aGVyIGZpbGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Rsc19zd19yZWN2bXNnfHRsc19zd19zcGxpY2VfcmVhZHx0bHNfc3dfcmVhZF9zb2NrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90bHMvdGxzLmg9MTYyPXZvaWQgdGxzX3N3X2ZyZWVfY3R4X3J4KHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCk7XG5uZXQvdGxzL3Rscy5oOjE2MzppbnQgdGxzX3N3X3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG5uZXQvdGxzL3Rscy5oLTE2NC1cdFx0ICAgaW50IGZsYWdzKTtcbm5ldC90bHMvdGxzLmg9MTY1PWJvb2wgdGxzX3N3X3NvY2tfaXNfcmVhZGFibGUoc3RydWN0IHNvY2sgKnNrKTtcbm5ldC90bHMvdGxzLmg6MTY2OnNzaXplX3QgdGxzX3N3X3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvZmZfdCAqcHBvcyxcbm5ldC90bHMvdGxzLmgtMTY3LVx0XHRcdCAgIHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsXG5uZXQvdGxzL3Rscy5oLTE2OC1cdFx0XHQgICBzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xubmV0L3Rscy90bHMuaDoxNjk6aW50IHRsc19zd19yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbm5ldC90bHMvdGxzLmgtMTcwLVx0XHQgICAgIHNrX3JlYWRfYWN0b3JfdCByZWFkX2FjdG9yKTtcbi0tXG5uZXQvdGxzL3Rsc19tYWluLmM9OTQwPXN0YXRpYyB2b2lkIGJ1aWxkX3Byb3RvX29wcyhzdHJ1Y3QgcHJvdG9fb3BzIG9wc1tUTFNfTlVNX0NPTkZJR11bVExTX05VTV9DT05GSUddLFxuLS1cbm5ldC90bHMvdGxzX21haW4uYy05NDgtXHRvcHNbVExTX0JBU0VdW1RMU19TVyAgXSA9IG9wc1tUTFNfQkFTRV1bVExTX0JBU0VdO1xubmV0L3Rscy90bHNfbWFpbi5jOjk0OTpcdG9wc1tUTFNfQkFTRV1bVExTX1NXICBdLnNwbGljZV9yZWFkXHQ9IHRsc19zd19zcGxpY2VfcmVhZDtcbm5ldC90bHMvdGxzX21haW4uYy05NTAtXHRvcHNbVExTX0JBU0VdW1RMU19TVyAgXS5wb2xsXHRcdD0gdGxzX3NrX3BvbGw7XG5uZXQvdGxzL3Rsc19tYWluLmM6OTUxOlx0b3BzW1RMU19CQVNFXVtUTFNfU1cgIF0ucmVhZF9zb2NrXHQ9IHRsc19zd19yZWFkX3NvY2s7XG5uZXQvdGxzL3Rsc19tYWluLmMtOTUyLVxubmV0L3Rscy90bHNfbWFpbi5jLTk1My1cdG9wc1tUTFNfU1cgIF1bVExTX1NXICBdID0gb3BzW1RMU19TVyAgXVtUTFNfQkFTRV07XG5uZXQvdGxzL3Rsc19tYWluLmM6OTU0Olx0b3BzW1RMU19TVyAgXVtUTFNfU1cgIF0uc3BsaWNlX3JlYWRcdD0gdGxzX3N3X3NwbGljZV9yZWFkO1xubmV0L3Rscy90bHNfbWFpbi5jLTk1NS1cdG9wc1tUTFNfU1cgIF1bVExTX1NXICBdLnBvbGxcdFx0PSB0bHNfc2tfcG9sbDtcbm5ldC90bHMvdGxzX21haW4uYzo5NTY6XHRvcHNbVExTX1NXICBdW1RMU19TVyAgXS5yZWFkX3NvY2tcdD0gdGxzX3N3X3JlYWRfc29jaztcbm5ldC90bHMvdGxzX21haW4uYy05NTctXG4tLVxubmV0L3Rscy90bHNfbWFpbi5jPTEwMDI9c3RhdGljIHZvaWQgYnVpbGRfcHJvdG9zKHN0cnVjdCBwcm90byBwcm90W1RMU19OVU1fQ09ORklHXVtUTFNfTlVNX0NPTkZJR10sXG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTEwMTUtXHRwcm90W1RMU19CQVNFXVtUTFNfU1ddID0gcHJvdFtUTFNfQkFTRV1bVExTX0JBU0VdO1xubmV0L3Rscy90bHNfbWFpbi5jOjEwMTY6XHRwcm90W1RMU19CQVNFXVtUTFNfU1ddLnJlY3Ztc2dcdFx0ICA9IHRsc19zd19yZWN2bXNnO1xubmV0L3Rscy90bHNfbWFpbi5jLTEwMTctXHRwcm90W1RMU19CQVNFXVtUTFNfU1ddLnNvY2tfaXNfcmVhZGFibGUgICA9IHRsc19zd19zb2NrX2lzX3JlYWRhYmxlO1xuLS1cbm5ldC90bHMvdGxzX21haW4uYy0xMDIwLVx0cHJvdFtUTFNfU1ddW1RMU19TV10gPSBwcm90W1RMU19TV11bVExTX0JBU0VdO1xubmV0L3Rscy90bHNfbWFpbi5jOjEwMjE6XHRwcm90W1RMU19TV11bVExTX1NXXS5yZWN2bXNnXHRcdD0gdGxzX3N3X3JlY3Ztc2c7XG5uZXQvdGxzL3Rsc19tYWluLmMtMTAyMi1cdHByb3RbVExTX1NXXVtUTFNfU1ddLnNvY2tfaXNfcmVhZGFibGUgICA9IHRsc19zd19zb2NrX2lzX3JlYWRhYmxlO1xuLS1cbm5ldC90bHMvdGxzX3N3LmM9MTgwND1zdGF0aWMgaW50IHRsc19yeF9pbnRyX2Vycm5vKGxvbmcgdGltZW8pXG4tLVxubmV0L3Rscy90bHNfc3cuYy0xODA4LVxubmV0L3Rscy90bHNfc3cuYzoxODA5OmludCB0bHNfc3dfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvdGxzL3Rsc19zdy5jLTE4MTAtXHRcdCAgIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvdGxzL3Rsc19zdy5jLTIwMjUtXG5uZXQvdGxzL3Rsc19zdy5jOjIwMjY6c3NpemVfdCB0bHNfc3dfc3BsaWNlX3JlYWQoc3RydWN0IHNvY2tldCAqc29jaywgIGxvZmZfdCAqcHBvcyxcbm5ldC90bHMvdGxzX3N3LmMtMjAyNy1cdFx0XHQgICBzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxuLS1cbm5ldC90bHMvdGxzX3N3LmMtMjEyOS1cbm5ldC90bHMvdGxzX3N3LmM6MjEzMDppbnQgdGxzX3N3X3JlYWRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxubmV0L3Rscy90bHNfc3cuYy0yMTMxLVx0XHQgICAgIHNrX3JlYWRfYWN0b3JfdCByZWFkX2FjdG9yKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYz0yOTE0PVRFU1RfRih0bHNfZXJyLCBiYWRfYXV0aClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmMtMjkzNC0gKiBhbmQgZmFpbHMgb24gdGhlIHJlY29yZCBpdHNlbGY7IHRoZSBjdHgtXHUwMDNlYXN5bmNfd2FpdC5lcnIgY2hlY2sgaW5cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYzoyOTM1OiAqIHRsc19zd19zcGxpY2VfcmVhZCgpIGlzIG5vdCB3aGF0IHN0b3BzIGl0LiBPbmx5IGFuIGFzeW5jaHJvbm91c1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jLTI5MzYtICogZGVjcnlwdCwgd2hpY2ggbmVlZHMgYSBUTFMgMS4yIHNvY2tldCBhbmQgYW4gQUVBRCBhZHZlcnRpc2luZ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTg2CgkJCQkJCQlvdXRwdXQ6IDE2CgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMgYW5kIHRoZWlyIHNpZ25pZmljYW5jZSwgYXMgdGhvdWdoIEkmIzM5O20gcHJvY2Vzc2luZyB0aGUgaW5mb3JtYXRpb246CgoqKktleSBUTFMgU29ja2V0IEZ1bmN0aW9uIEZvY3VzKioKCkFscmlnaHQsIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBpdCYjMzk7cyBjbGVhciB0aGF0IGB0bHNfc3dfcmVjdm1zZ2AsIGB0bHNfc3dfc3BsaWNlX3JlYWRgLCBhbmQgYHRsc19zd19yZWFkX3NvY2tgIGFyZSB0aGUgYnJlYWQgYW5kIGJ1dHRlciBmdW5jdGlvbnMgdG8gZm9jdXMgb24gZm9yIFRMUyBzb2NrZXQgSS9PLiBUaGV5JiMzOTtyZSBkZWZpbml0ZWx5IHRoZSBrZXkgc3ltYm9scyB0byB1bmRlcnN0YW5kIGhvdyBkYXRhIG1vdmVzIHdpdGhpbiB0aGUgVExTIGxheWVyLiBUaGUgZmFjdCB0aGF0IHRoZXkmIzM5O3JlIHRpZWQgdG8gdGhlIGBwcm90b2AgYW5kIGBwcm90b19vcHNgIHN0cnVjdHVyZXMgaXMgY3J1Y2lhbC4gSXQgbWVhbnMgdGhlc2UgZnVuY3Rpb25zIGFyZSBkaXJlY3RseSBpbnRlZ3JhdGVkIGludG8gdGhlIHN0YW5kYXJkIHNvY2tldCBvcGVyYXRpb25zIOKAkyB0aGUgYHJlY3Ztc2dgLCBgc3BsaWNlYCwgdGhlIGdlbmVyYWwgcmVhZCBwYXRocy4gSXQgbWVhbnMgdGhleSB3aWxsIGJlIHRyaWdnZXJlZCB3aGVuIHN0YW5kYXJkIHNvY2tldCBjYWxscyBhcmUgbWFkZSwgd2hpY2ggaXMgZXhhY3RseSB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBzZWUgdGhlIFRMUyBpbnRlcmFjdGlvbi4gTm93IEkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBmbGFncyB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLiBXaGF0IGFyZSB0aGUgYnVpbGQgcmVxdWlyZW1lbnRzIHRvIGJyaW5nIHRoaXMgVExTIGZ1bmN0aW9uYWxpdHkgdG8gbGlmZT8gV2hhdCBjb25maWd1cmF0aW9ucyBhcmUgbmVlZGVkIGZvciB0aGUgc3lzdGVtIHRvIHN1cHBvcnQgdGhpcyBmdW5jdGlvbmFsaXR5PwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUTFMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm0vbW0vS2NvbmZpZz04NzM9Y29uZmlnIEhBUkRFTl9CUkFOQ0hfSElTVE9SWVxuLS1cbmFyY2gvYXJtL21tL0tjb25maWctODgyLVxuYXJjaC9hcm0vbW0vS2NvbmZpZzo4ODM6Y29uZmlnIFRMU19SRUdfRU1VTFxuYXJjaC9hcm0vbW0vS2NvbmZpZy04ODQtXHRib29sXG4tLVxubmV0L3Rscy9LY29uZmlnLTQtI1xubmV0L3Rscy9LY29uZmlnOjU6Y29uZmlnIFRMU1xubmV0L3Rscy9LY29uZmlnLTYtXHR0cmlzdGF0ZSBcJiMzNDtUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC90bHMvS2NvbmZpZy0xOC1cbm5ldC90bHMvS2NvbmZpZzoxOTpjb25maWcgVExTX0RFVklDRVxubmV0L3Rscy9LY29uZmlnLTIwLVx0Ym9vbCBcJiMzNDtUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgSFcgb2ZmbG9hZFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDc5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVExTIENvbmZpZ3VyYXRpb24gQXNzZXNzbWVudCoqCgpPa2F5LCBzbyB0aGUgY29uZmlndXJhdGlvbiBpbiBxdWVzdGlvbiBpcyBgVExTYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGlzIHRoZSAqb25seSogbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyBzZWUuLi4gdGhlIHBhdGNoIGlzIG1vZGlmeWluZyBgbmV0L3Rscy90bHNfc3cuY2AuIEFoLCByaWdodCwgdGhhdCYjMzk7cyBmaXJtbHkgd2l0aGluIHRoZSBUTFMgc3Vic3lzdGVtLiBHaXZlbiB0aGF0IGNvbnRleHQsIGBDT05GSUdfVExTYCBhbG9uZSAqc2hvdWxkKiBiZSBzdWZmaWNpZW50LiBIb3dldmVyLCBJIGFsd2F5cyBtYWtlIHN1cmUuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcyB0aGF0IGFyZW4mIzM5O3QgaW1tZWRpYXRlbHkgb2J2aW91cy4gSXQmIzM5O3MgYSBnb29kIHByYWN0aWNlLCBldmVuIHdoZW4gaXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLCB0byBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC90bHMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFRMUyBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdGNvbmZpZyBUTFNcbiAgIDY6XHRcdHRyaXN0YXRlIFwmIzM0O1RyYW5zcG9ydCBMYXllciBTZWN1cml0eSBzdXBwb3J0XCYjMzQ7XG4gICA3Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDg6XHRcdHNlbGVjdCBDUllQVE9cbiAgIDk6XHRcdHNlbGVjdCBDUllQVE9fQUVTXG4gIDEwOlx0XHRzZWxlY3QgQ1JZUFRPX0dDTVxuICAxMTpcdFx0c2VsZWN0IE5FVF9TT0NLX01TR1xuICAxMjpcdFx0ZGVmYXVsdCBuXG4gIDEzOlx0XHRoZWxwXG4gIDE0Olx0XHRFbmFibGUga2VybmVsIHN1cHBvcnQgZm9yIFRMUyBwcm90b2NvbC4gVGhpcyBhbGxvd3Mgc3ltbWV0cmljXG4gIDE1Olx0XHRlbmNyeXB0aW9uIGhhbmRsaW5nIG9mIHRoZSBUTFMgcHJvdG9jb2wgdG8gYmUgZG9uZSBpbi1rZXJuZWwuXG4gIDE2Olx0XG4gIDE3Olx0XHRJZiB1bnN1cmUsIHNheSBOLlxuICAxODpcdFxuICAxOTpcdGNvbmZpZyBUTFNfREVWSUNFXG4gIDIwOlx0XHRib29sIFwmIzM0O1RyYW5zcG9ydCBMYXllciBTZWN1cml0eSBIVyBvZmZsb2FkXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTI6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5MzMKCQkJCQkJCW91dHB1dDogMTI4CgkJCQkJCQl0aG91Z2h0czogMzc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSB0aGUgZGVwZW5kZW5jeTogYENPTkZJR19UTFNgIHJlbGllcyBvbiBgSU5FVGAuICBgSU5FVGAgaXMgcHJhY3RpY2FsbHkgYWx3YXlzIGVuYWJsZWQsIHdoaWNoIG1lYW5zLCBlc3NlbnRpYWxseSwgSSBqdXN0IG5lZWQgdG8gZXhwbGljaXRseSBlbmFibGUgYFRMU2AuCgpUaGUgcGF0Y2ggYWxzbyBicmluZ3MgdXAgYFRMUyAxLjJgIGFuZCBgVExTIDEuM2AuICBCdXQsIGFzIGZhciBhcyBJIGNhbiB0ZWxsLCB0aGVyZSBhcmVuJiMzOTt0IGFueSBzZXBhcmF0ZSBjb25maWcgb3B0aW9ucyBzcGVjaWZpY2FsbHkgZm9yIHRob3NlOyBpdCYjMzk7cyBhbGwgaGFuZGxlZCB1bmRlciB0aGUgdW1icmVsbGEgb2YgYENPTkZJR19UTFNgLiBHb29kIHRvIGtub3cuCgpOZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNvZGUgY2hhbmdlcy4gSSBzZWUgdGhlc2UgbW9kaWZpZWQgZnVuY3Rpb25zOiBgdGxzX3J4X2VtcHR5X2RhdGFfcmVjYCAoc3RhdGljKSwgYHRsc19yeF9pbnRyX2Vycm5vYCAoc3RhdGljKSwgYHRsc19zd19yZWN2bXNnYCwgYHRsc19zd19zcGxpY2VfcmVhZGAsIGFuZCBgdGxzX3N3X3JlYWRfc29ja2AuIFRoZSBzdGF0aWMgb25lcywgSSBjYW4gZ2VuZXJhbGx5IGlnbm9yZSBmb3Igbm93LgoKUmlnaHQsIHNvIHRoZSBpbXBvcnRhbnQgc3ltYm9scyBoZXJlIGFyZSBgdGxzX3N3X3JlY3Ztc2dgLCBgdGxzX3N3X3NwbGljZV9yZWFkYCwgYW5kIGB0bHNfc3dfcmVhZF9zb2NrYC4KCkFscmlnaHQsIGl0JiMzOTtzIGFib3V0IGhhbmRsaW5nIGVtcHR5IGRhdGEgcmVjb3JkcyBpbiBUTFMgMS4yIGFuZCAxLjMuIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSB0byBob3cgVExTIHJlY2VpdmVzIGRhdGEuIEl0JiMzOTtzIGluIHRoZSByZWNlaXZlIHBhdGgsIGFuZCB0aGVzZSBzb2NrZXQgb3BlcmF0aW9ucywgbGlrZSBgcmVjdm1zZ2AsIGFyZSBkaXJlY3RseSBleHBvc2VkIHRvIHVzZXJzcGFjZS4KClRoYXQgdGVsbHMgbWUgSSBuZWVkIHRvIG1hcmsgYFdvcnRoRnV6emluZ2AgYXMgYHRydWVgLiAgVGhpcyBpcyBhIGNyaXRpY2FsIGFyZWEgZm9yIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzIGFyZSBjb25maWd1cmVkIGNvcnJlY3RseToKCiogICBgRW5hYmxlQ29uZmlnc2A6IGBbJiMzNDtUTFMmIzM0O11gIOKAkyBDaGVjay4KKiAgIGBGb2N1c1N5bWJvbHNgOiBgWyYjMzQ7dGxzX3N3X3JlY3Ztc2cmIzM0OywgJiMzNDt0bHNfc3dfc3BsaWNlX3JlYWQmIzM0OywgJiMzNDt0bHNfc3dfcmVhZF9zb2NrJiMzNDtdYCDigJMgQ2hlY2suCiogICBgUmVhc29uaW5nYDogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRMUyBzb2Z0d2FyZSByZWNlaXZlIHBhdGggdG8gcHJvcGVybHkgaGFuZGxlIHplcm8tbGVuZ3RoIGFwcGxpY2F0aW9uX2RhdGEgcmVjb3JkcyAoZW1wdHkgZGF0YSByZWNvcmRzKSBpbiBUTFMgMS4yIGFuZCBUTFMgMS4zLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBgcmVjdm1zZ2AsIGBzcGxpY2VfcmVhZGAsIGFuZCBgcmVhZF9zb2NrYCBvcGVyYXRpb25zIG9uIFRMUyBzb2NrZXRzLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLiYjMzQ7IOKAkyBQZXJmZWN0LCBjb3ZlcnMgdGhlIGNvcmUgaXNzdWUuCiogICBgV29ydGhGdXp6aW5nYDogYHRydWVgIOKAkyBUaGF0JiMzOTtzIHRoZSBjb3JyZWN0IGV2YWx1YXRpb24uCgpMb29rcyBnb29kLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTI6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RMUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Rsc19zd19yZWN2bXNnJiMzNDssCiAgICAmIzM0O3Rsc19zd19zcGxpY2VfcmVhZCYjMzQ7LAogICAgJiMzNDt0bHNfc3dfcmVhZF9zb2NrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUTFMgc29mdHdhcmUgcmVjZWl2ZSBwYXRoIHRvIHByb3Blcmx5IGhhbmRsZSB6ZXJvLWxlbmd0aCBhcHBsaWNhdGlvbl9kYXRhIHJlY29yZHMgKGVtcHR5IGRhdGEgcmVjb3JkcykgaW4gVExTIDEuMiBhbmQgVExTIDEuMy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgYHJlY3Ztc2dgLCBgc3BsaWNlX3JlYWRgLCBhbmQgYHJlYWRfc29ja2Agb3BlcmF0aW9ucyBvbiBUTFMgc29ja2V0cywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VExTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGxzX3N3X3JlY3Ztc2cmIzM0OywKICAgICYjMzQ7dGxzX3N3X3NwbGljZV9yZWFkJiMzNDssCiAgICAmIzM0O3Rsc19zd19yZWFkX3NvY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRMUyBzb2Z0d2FyZSByZWNlaXZlIHBhdGggdG8gcHJvcGVybHkgaGFuZGxlIHplcm8tbGVuZ3RoIGFwcGxpY2F0aW9uX2RhdGEgcmVjb3JkcyAoZW1wdHkgZGF0YSByZWNvcmRzKSBpbiBUTFMgMS4yIGFuZCBUTFMgMS4zLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBgcmVjdm1zZ2AsIGBzcGxpY2VfcmVhZGAsIGFuZCBgcmVhZF9zb2NrYCBvcGVyYXRpb25zIG9uIFRMUyBzb2NrZXRzLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MDI6MzQuMzQzOTc5MjQzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ3MTYzMTMxOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVExTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGxzX3N3X3JlY3Ztc2dcIixcbiAgICBcInRsc19zd19zcGxpY2VfcmVhZFwiLFxuICAgIFwidGxzX3N3X3JlYWRfc29ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUTFMgc29mdHdhcmUgcmVjZWl2ZSBwYXRoIHRvIHByb3Blcmx5IGhhbmRsZSB6ZXJvLWxlbmd0aCBhcHBsaWNhdGlvbl9kYXRhIHJlY29yZHMgKGVtcHR5IGRhdGEgcmVjb3JkcykgaW4gVExTIDEuMiBhbmQgVExTIDEuMy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgYHJlY3Ztc2dgLCBgc3BsaWNlX3JlYWRgLCBhbmQgYHJlYWRfc29ja2Agb3BlcmF0aW9ucyBvbiBUTFMgc29ja2V0cywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MDI6MzQuMzQzOTg3NTkzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDIyMTkzODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4OWZjMjIzMGI1Y2QyNDI4MDk5ZTNjYzVlM2JiMzllZGVhZTdiYjAwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDI3IDEyOjAyOjMyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC90bHMvdGxzX3N3LmMgYi9uZXQvdGxzL3Rsc19zdy5jXFxuaW5kZXggZDRhZmM5MGZkNzk2NmUuLjBlNzZiMzFiMTI5MTRiIDEwMDY0NFxcbi0tLSBhL25ldC90bHMvdGxzX3N3LmNcXG4rKysgYi9uZXQvdGxzL3Rsc19zdy5jXFxuQEAgLTM3LDYgKzM3LDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9idWcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdGltZWtlZXBpbmcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zcGxpY2UuaFxcdTAwM2VcXG5AQCAtMTc4Nyw2ICsxNzg4LDI0IEBAIHN0YXRpYyB2b2lkIHRsc19yeF9yZWFkZXJfdW5sb2NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRsc19zd19jb250ZXh0X3J4ICpjdHgpXFxuIFxcdHJlbGVhc2Vfc29jayhzayk7XFxuIH1cXG4gXFxuKy8qIFRMUyAxLjIgYW5kIFRMUyAxLjMgYm90aCBwZXJtaXQgYSB6ZXJvLWxlbmd0aCBhcHBsaWNhdGlvbl9kYXRhXFxuKyAqIHJlY29yZCBhcyBhIHRyYWZmaWMtYW5hbHlzaXMgY291bnRlcm1lYXN1cmUgKFJGQyA1MjQ2LCBTZWN0aW9uXFxuKyAqIDYuMi4xOyBSRkMgODQ0NiwgU2VjdGlvbiA1LjEpLlxcbisgKi9cXG4rc3RhdGljIGJvb2wgdGxzX3J4X2VtcHR5X2RhdGFfcmVjKGludCBsZW4sIHVuc2lnbmVkIGNoYXIgY29udHJvbClcXG4re1xcbitcXHRyZXR1cm4gIWxlbiBcXHUwMDI2XFx1MDAyNiBjb250cm9sID09IFRMU19SRUNPUkRfVFlQRV9EQVRBO1xcbit9XFxuK1xcbisvKiBzb2NrX2ludHJfZXJybm8oKSBtYXBzIHRoZSB6ZXJvIHRpbWVvIG9mIGEgcmVhZGVyIHRoYXQgY2Fubm90IHdhaXRcXG4rICogdG8gLUVJTlRSLCBidXQgc3VjaCBhIHJlYWRlciBoYXMgbm8gYmxvY2tpbmcgdG8gaW50ZXJydXB0LiBUaGUgcmVzdFxcbisgKiBvZiB0aGUgcmVjZWl2ZSBzaWRlIHJlcG9ydHMgdGhhdCBjYXNlIGFzIC1FQUdBSU4uXFxuKyAqL1xcbitzdGF0aWMgaW50IHRsc19yeF9pbnRyX2Vycm5vKGxvbmcgdGltZW8pXFxuK3tcXG4rXFx0cmV0dXJuIHRpbWVvID8gc29ja19pbnRyX2Vycm5vKHRpbWVvKSA6IC1FQUdBSU47XFxuK31cXG4rXFxuIGludCB0bHNfc3dfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdFxcdCAgIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4gXFx0XFx0ICAgc2l6ZV90IGxlbixcXG5AQCAtMTg1OCw5ICsxODc3LDEyIEBAIGludCB0bHNfc3dfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdFxcdCAgICB0bG0tXFx1MDAzZWNvbnRyb2wgPT0gVExTX1JFQ09SRF9UWVBFX0RBVEEpXFxuIFxcdFxcdFxcdGRhcmcuemMgPSB0cnVlO1xcbiBcXG4tXFx0XFx0LyogRG8gbm90IHVzZSBhc3luYyBtb2RlIGlmIHJlY29yZCBpcyBub24tZGF0YSAqL1xcbitcXHRcXHQvKiBEbyBub3QgdXNlIGFzeW5jIG1vZGUgaWYgcmVjb3JkIGlzIG5vbi1kYXRhLCBvciBpZiBpdFxcbitcXHRcXHQgKiBpcyBlbXB0eTogdGhlIHJlY2VpdmUgbG9vcCBmcmVlcyBhbiBlbXB0eSByZWNvcmQncyBza2IsXFxuK1xcdFxcdCAqIHNvIGl0cyBkZWNyeXB0aW9uIG11c3QgaGF2ZSBjb21wbGV0ZWQuXFxuK1xcdFxcdCAqL1xcbiBcXHRcXHRpZiAodGxtLVxcdTAwM2Vjb250cm9sID09IFRMU19SRUNPUkRfVFlQRV9EQVRBKVxcbi1cXHRcXHRcXHRkYXJnLmFzeW5jID0gY3R4LVxcdTAwM2Vhc3luY19jYXBhYmxlO1xcbitcXHRcXHRcXHRkYXJnLmFzeW5jID0gY3R4LVxcdTAwM2Vhc3luY19jYXBhYmxlIFxcdTAwMjZcXHUwMDI2IHRvX2RlY3J5cHQ7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0ZGFyZy5hc3luYyA9IGZhbHNlO1xcbiBcXG5AQCAtMTg5Niw2ICsxOTE4LDI3IEBAIGludCB0bHNfc3dfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdFxcdGNodW5rID0gcnhtLVxcdTAwM2VmdWxsX2xlbjtcXG4gXFx0XFx0dGxzX3J4X3JlY19kb25lKGN0eCk7XFxuIFxcbitcXHRcXHQvKiBBbiBlbXB0eSByZWNvcmQgYWR2YW5jZXMgbmVpdGhlciBsb29wIGJvdW5kLCBzbyBhIGZsb29kXFxuK1xcdFxcdCAqIG9mIHRoZW0gY2FuIGJlIGludGVycnVwdGVkIG9ubHkgaGVyZS4gT24gdGhlIHplcm8tY29weVxcbitcXHRcXHQgKiBwYXRoIGRhcmcuc2tiIGlzIHRoZSBzdHJwYXJzZXIgYW5jaG9yLCBhbHJlYWR5IHJlbGVhc2VkXFxuK1xcdFxcdCAqIGJ5IHRsc19yeF9yZWNfZG9uZSgpLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHRsc19yeF9lbXB0eV9kYXRhX3JlYyhjaHVuaywgY29udHJvbCkpIHtcXG4rXFx0XFx0XFx0bG9uZyB0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzIFxcdTAwMjYgTVNHX0RPTlRXQUlUKTtcXG4rXFxuK1xcdFxcdFxcdGlmICghZGFyZy56YylcXG4rXFx0XFx0XFx0XFx0Y29uc3VtZV9za2IoZGFyZy5za2IpO1xcbitcXG4rXFx0XFx0XFx0LyogQW4gZW1wdHkgcmVjb3JkIHN0aWxsIG1hcmtzIGEgYm91bmRhcnkuICovXFxuK1xcdFxcdFxcdG1zZy1cXHUwMDNlbXNnX2ZsYWdzIHw9IE1TR19FT1I7XFxuK1xcbitcXHRcXHRcXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcXG4rXFx0XFx0XFx0XFx0ZXJyID0gdGxzX3J4X2ludHJfZXJybm8odGltZW8pO1xcbitcXHRcXHRcXHRcXHRnb3RvIHJlY3ZfZW5kO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRpZiAoIWRhcmcuemMpIHtcXG4gXFx0XFx0XFx0Ym9vbCBwYXJ0aWFsbHlfY29uc3VtZWQgPSBjaHVuayBcXHUwMDNlIGxlbjtcXG4gXFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRhcmcuc2tiO1xcbkBAIC0xOTkwLDIxICsyMDMzLDMxIEBAIHNzaXplX3QgdGxzX3N3X3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssICBsb2ZmX3QgKnBwb3MsXFxuIFxcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXFx1MDAzZXNrO1xcbiBcXHRzdHJ1Y3QgdGxzX21zZyAqdGxtO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXHRib29sIHJlbGVhc2VkID0gdHJ1ZTtcXG4gXFx0c3NpemVfdCBjb3BpZWQgPSAwO1xcbitcXHRib29sIG5vbmJsb2NrO1xcbiBcXHRpbnQgY2h1bms7XFxuIFxcdGludCBlcnI7XFxuIFxcbi1cXHRlcnIgPSB0bHNfcnhfcmVhZGVyX2xvY2soc2ssIGN0eCwgZmxhZ3MgXFx1MDAyNiBTUExJQ0VfRl9OT05CTE9DSyk7XFxuK1xcdG5vbmJsb2NrID0gKGZsYWdzIFxcdTAwMjYgU1BMSUNFX0ZfTk9OQkxPQ0spIHx8XFxuK1xcdFxcdCAgIChzb2NrLVxcdTAwM2VmaWxlLVxcdTAwM2VmX2ZsYWdzIFxcdTAwMjYgT19OT05CTE9DSyk7XFxuK1xcbitcXHRlcnIgPSB0bHNfcnhfcmVhZGVyX2xvY2soc2ssIGN0eCwgbm9uYmxvY2spO1xcbiBcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuK1xcdC8qIElmIGNyeXB0byBmYWlsZWQgdGhlIGNvbm5lY3Rpb24gaXMgYnJva2VuICovXFxuK1xcdGVyciA9IGN0eC1cXHUwMDNlYXN5bmNfd2FpdC5lcnI7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gc3BsaWNlX3JlYWRfZW5kO1xcbitcXG4rcmV0cnk6XFxuIFxcdGlmICghc2tiX3F1ZXVlX2VtcHR5KFxcdTAwMjZjdHgtXFx1MDAzZXJ4X2xpc3QpKSB7XFxuIFxcdFxcdHNrYiA9IF9fc2tiX2RlcXVldWUoXFx1MDAyNmN0eC1cXHUwMDNlcnhfbGlzdCk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHN0cnVjdCB0bHNfZGVjcnlwdF9hcmcgZGFyZztcXG4gXFxuLVxcdFxcdGVyciA9IHRsc19yeF9yZWNfd2FpdChzaywgZmxhZ3MgXFx1MDAyNiBTUExJQ0VfRl9OT05CTE9DSyxcXG4tXFx0XFx0XFx0XFx0ICAgICAgdHJ1ZSwgZmFsc2UpO1xcbitcXHRcXHRlcnIgPSB0bHNfcnhfcmVjX3dhaXQoc2ssIG5vbmJsb2NrLCByZWxlYXNlZCwgZmFsc2UpO1xcbiBcXHRcXHRpZiAoZXJyIFxcdTAwM2M9IDApXFxuIFxcdFxcdFxcdGdvdG8gc3BsaWNlX3JlYWRfZW5kO1xcbiBcXG5AQCAtMjAxNiw2ICsyMDY5LDExIEBAIHNzaXplX3QgdGxzX3N3X3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssICBsb2ZmX3QgKnBwb3MsXFxuIFxcbiBcXHRcXHR0bHNfcnhfcmVjX2RvbmUoY3R4KTtcXG4gXFx0XFx0c2tiID0gZGFyZy5za2I7XFxuK1xcbitcXHRcXHQvKiBUaGUgc29ja2V0IGxvY2sgc3RheXMgaGVsZCB0byB0aGUgcmV0cnksIHNvIHRoZVxcbitcXHRcXHQgKiBhbmNob3IgdGhpcyB3YWl0IGxvYWRlZCBzdXJ2aXZlcyBpdC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJlbGVhc2VkID0gZmFsc2U7XFxuIFxcdH1cXG4gXFxuIFxcdHJ4bSA9IHN0cnBfbXNnKHNrYik7XFxuQEAgLTIwMjcsNiArMjA4NSwyMSBAQCBzc2l6ZV90IHRsc19zd19zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCAgbG9mZl90ICpwcG9zLFxcbiBcXHRcXHRnb3RvIHNwbGljZV9yZXF1ZXVlO1xcbiBcXHR9XFxuIFxcbitcXHQvKiBTcGxpY2luZyBhbiBlbXB0eSBkYXRhIHJlY29yZCBkZWxpdmVycyB6ZXJvIGJ5dGVzLCB3aGljaCB0aGVcXG4rXFx0ICogY2FsbGVyIHJlYWRzIGFzIEVPRi4gdGxzX3J4X3JlY193YWl0KCkgc2tpcHMgaXRzIHNpZ25hbCBjaGVja1xcbitcXHQgKiB3aGlsZSBhIHJlY29yZCBpcyBwYXJzZWQsIHNvIHRlc3QgZm9yIGEgc2lnbmFsIGhlcmUuXFxuK1xcdCAqL1xcbitcXHRpZiAodGxzX3J4X2VtcHR5X2RhdGFfcmVjKHJ4bS1cXHUwMDNlZnVsbF9sZW4sIHRsbS1cXHUwMDNlY29udHJvbCkpIHtcXG4rXFx0XFx0bG9uZyB0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIG5vbmJsb2NrKTtcXG4rXFxuK1xcdFxcdGNvbnN1bWVfc2tiKHNrYik7XFxuK1xcdFxcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xcbitcXHRcXHRcXHRlcnIgPSB0bHNfcnhfaW50cl9lcnJubyh0aW1lbyk7XFxuK1xcdFxcdFxcdGdvdG8gc3BsaWNlX3JlYWRfZW5kO1xcbitcXHRcXHR9XFxuK1xcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdH1cXG4rXFxuIFxcdGNodW5rID0gbWluX3QodW5zaWduZWQgaW50LCByeG0tXFx1MDAzZWZ1bGxfbGVuLCBsZW4pO1xcbiBcXHRjb3BpZWQgPSBza2Jfc3BsaWNlX2JpdHMoc2tiLCBzaywgcnhtLVxcdTAwM2VvZmZzZXQsIHBpcGUsIGNodW5rLCBmbGFncyk7XFxuIFxcdGlmIChjb3BpZWQgXFx1MDAzYyAwKVxcbkBAIC0yMDQ5LDYgKzIxMjIsMTEgQEAgc3NpemVfdCB0bHNfc3dfc3BsaWNlX3JlYWQoc3RydWN0IHNvY2tldCAqc29jaywgIGxvZmZfdCAqcHBvcyxcXG4gXFx0Z290byBzcGxpY2VfcmVhZF9lbmQ7XFxuIH1cXG4gXFxuKy8qIEJvdW5kIHRoZSB0aW1lIHRoYXQgY29uc2VjdXRpdmUgZW1wdHkgaW5ncmVzcyBkYXRhIHJlY29yZHMga2VlcFxcbisgKiB0aGUgc29ja2V0IGxvY2sgaGVsZCB3aXRob3V0IHJlbGVhc2luZyBpdC5cXG4rICovXFxuKyNkZWZpbmUgVExTX1JYX05PREFUQV9OUyBOU0VDX1BFUl9NU0VDXFxuK1xcbiBpbnQgdGxzX3N3X3JlYWRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxcbiBcXHRcXHQgICAgIHNrX3JlYWRfYWN0b3JfdCByZWFkX2FjdG9yKVxcbiB7XFxuQEAgLTIwNTcsNiArMjEzNSw3IEBAIGludCB0bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXFxuIFxcdHN0cnVjdCB0bHNfcHJvdF9pbmZvICpwcm90ID0gXFx1MDAyNnRsc19jdHgtXFx1MDAzZXByb3RfaW5mbztcXG4gXFx0c3RydWN0IHN0cnBfbXNnICpyeG0gPSBOVUxMO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcXG4rXFx0dTY0IG5vZGF0YV9kZWFkbGluZSA9IDA7XFxuIFxcdHN0cnVjdCBza19wc29jayAqcHNvY2s7XFxuIFxcdHNpemVfdCBmbHVzaGVkX2F0ID0gMDtcXG4gXFx0Ym9vbCByZWxlYXNlZCA9IHRydWU7XFxuQEAgLTIxMTUsMTQgKzIxOTQsMjUgQEAgaW50IHRsc19zd19yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcXG4gXFx0XFx0XFx0Z290byByZWFkX3NvY2tfcmVxdWV1ZTtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0LyogQW4gZW1wdHkgZGF0YSByZWNvcmQgKGxlZ2FsIGluIFRMUyAxLjMpIGdpdmVzIGEgemVyb1xcbi1cXHRcXHQgKiByZWFkX2FjdG9yIHJldHVybiwgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSB0aGUgY29uc3VtZXJcXG4tXFx0XFx0ICogc3RhbGxpbmc7IHRoZSB1c2VkIFxcdTAwM2M9IDAgcGF0aCB3b3VsZCByZXF1ZXVlIGl0IGF0IHRoZVxcbi1cXHRcXHQgKiBoZWFkIG9mIHJ4X2xpc3QgYW5kIGJsb2NrIGFsbCBsYXRlciByZWNvcmRzLiBDb25zdW1lIGl0XFxuLVxcdFxcdCAqIGhlcmUgaW5zdGVhZC5cXG4rXFx0XFx0LyogQW4gZW1wdHkgZGF0YSByZWNvcmQgZ2l2ZXMgYSB6ZXJvIHJlYWRfYWN0b3IgcmV0dXJuLFxcbitcXHRcXHQgKiBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIHRoZSBjb25zdW1lciBzdGFsbGluZzsgdGhlXFxuK1xcdFxcdCAqIHVzZWQgXFx1MDAzYz0gMCBwYXRoIHdvdWxkIHJlcXVldWUgaXQgYXQgdGhlIGhlYWQgb2YgcnhfbGlzdFxcbitcXHRcXHQgKiBhbmQgYmxvY2sgYWxsIGxhdGVyIHJlY29yZHMuIENvbnN1bWUgaXQgaGVyZSBpbnN0ZWFkLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0aWYgKHJ4bS1cXHUwMDNlZnVsbF9sZW4gPT0gMCkge1xcbitcXHRcXHRpZiAodGxzX3J4X2VtcHR5X2RhdGFfcmVjKHJ4bS1cXHUwMDNlZnVsbF9sZW4sIHRsbS1cXHUwMDNlY29udHJvbCkpIHtcXG4rXFx0XFx0XFx0ZXJyID0gMDtcXG4gXFx0XFx0XFx0Y29uc3VtZV9za2Ioc2tiKTtcXG4rXFx0XFx0XFx0aWYgKCFub2RhdGFfZGVhZGxpbmUpIHtcXG4rXFx0XFx0XFx0XFx0bm9kYXRhX2RlYWRsaW5lID0ga3RpbWVfZ2V0X25zKCkgK1xcbitcXHRcXHRcXHRcXHRcXHRcXHQgIFRMU19SWF9OT0RBVEFfTlM7XFxuK1xcdFxcdFxcdH0gZWxzZSBpZiAoa3RpbWVfZ2V0X25zKCkgXFx1MDAzZT0gbm9kYXRhX2RlYWRsaW5lKSB7XFxuK1xcdFxcdFxcdFxcdC8qIFF1ZXVlZCByZWNvcmRzIHJhaXNlIG5vIG5ldyBza19kYXRhX3JlYWR5KCksXFxuK1xcdFxcdFxcdFxcdCAqIGFuZCB0bHNfcnhfcmVhZGVyX3JlbGVhc2UoKSBhbm5vdW5jZXMgb25seSB0b1xcbitcXHRcXHRcXHRcXHQgKiBzYXZlZF9kYXRhX3JlYWR5KCksIG5vdCB0aGUgY29uc3VtZXIncyBvd24uXFxuK1xcdFxcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRcXHRzay1cXHUwMDNlc2tfZGF0YV9yZWFkeShzayk7XFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC0yMTMzLDYgKzIyMjMsNyBAQCBpbnQgdGxzX3N3X3JlYWRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxcbiBcXHRcXHRcXHRnb3RvIHJlYWRfc29ja19yZXF1ZXVlO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGNvcGllZCArPSB1c2VkO1xcbitcXHRcXHRub2RhdGFfZGVhZGxpbmUgPSAwO1xcbiBcXHRcXHRpZiAodXNlZCBcXHUwMDNjIHJ4bS1cXHUwMDNlZnVsbF9sZW4pIHtcXG4gXFx0XFx0XFx0cnhtLVxcdTAwM2VvZmZzZXQgKz0gdXNlZDtcXG4gXFx0XFx0XFx0cnhtLVxcdTAwM2VmdWxsX2xlbiAtPSB1c2VkO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmNcXG5pbmRleCBjYmRkM2VhMjhiOTk4Zi4uOGI2OGRiZmNjNTkyNDYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jXFxuQEAgLTI0LDYgKzI0LDcgQEBcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdF9oYXJuZXNzLmhcXFwiXFxuIFxcbiAjZGVmaW5lIFRMU19QQVlMT0FEX01BWF9MRU4gMTYzODRcXG4rI2RlZmluZSBUTFNfSERSX0xFTiA1XFxuICNkZWZpbmUgU09MX1RMUyAyODJcXG4gXFxuIHN0YXRpYyBpbnQgZmlwc19lbmFibGVkO1xcbkBAIC0yNTQ0LDYgKzI1NDUsOSBAQCBURVNUX0YoemVyb19sZW4sIHRlc3QpXFxuIFxcdGludCByZWNfb2ZmO1xcbiBcXHRpbnQgaTtcXG4gXFxuK1xcdGlmIChzZWxmLVxcdTAwM2Vub3RscylcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJubyBUTFMgc3VwcG9ydFxcXCIpO1xcbitcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDQgXFx1MDAyNlxcdTAwMjYgdmFyaWFudC1cXHUwMDNlcmVjc1tpXTsgaSsrKVxcbiBcXHRcXHRFWFBFQ1RfRVEoc2VuZChzZWxmLVxcdTAwM2VmZCwgdmFyaWFudC1cXHUwMDNlcmVjc1tpXS1cXHUwMDNlY2lwaGVyX2RhdGEsXFxuIFxcdFxcdFxcdCAgICAgICB2YXJpYW50LVxcdTAwM2VyZWNzW2ldLVxcdTAwM2VjaXBoZXJfbGVuLCAwKSxcXG5AQCAtMjU3Myw2ICsyNTc3LDI0OCBAQCBURVNUX0YoemVyb19sZW4sIHRlc3QpXFxuIFxcdH1cXG4gfTtcXG4gXFxuK3N0YXRpYyB2b2lkIHplcm9fbGVuX3NvY2tfcGFpcihzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsXFxuK1xcdFxcdFxcdCAgICAgICBpbnQgKmZkLCBpbnQgKmNmZCwgYm9vbCAqbm90bHMpXFxuK3tcXG4rXFx0c3RydWN0IHRsc19jcnlwdG9faW5mb19rZXlzIHRsczEyO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0dGxzX2NyeXB0b19pbmZvX2luaXQoVExTXzFfMl9WRVJTSU9OLCBUTFNfQ0lQSEVSX0FFU19DQ01fMTI4LFxcbitcXHRcXHRcXHQgICAgIFxcdTAwMjZ0bHMxMiwgMCk7XFxuK1xcbitcXHR1bHBfc29ja19wYWlyKF9tZXRhZGF0YSwgZmQsIGNmZCwgbm90bHMpO1xcbitcXHRpZiAoKm5vdGxzKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHQvKiBmZCBzdGF5cyBrZXlsZXNzOyB0aGVzZSBmaXh0dXJlcyBzZW5kIHJhdyByZWNvcmRzIG92ZXIgaXQgKi9cXG4rXFx0cmV0ID0gc2V0c29ja29wdCgqY2ZkLCBTT0xfVExTLCBUTFNfUlgsIFxcdTAwMjZ0bHMxMiwgdGxzMTIubGVuKTtcXG4rXFx0QVNTRVJUX0VRKHJldCwgMCk7XFxuK31cXG4rXFxuKy8qIFNlbmQgYSB2YXJpYW50J3MgcmVjb3JkczsgcmV0dXJuIHRoZSBsYXN0IG9uZSBjYXJyeWluZyBwYXlsb2FkICovXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmF3X3JlYyAqXFxuK3plcm9fbGVuX3NlbmRfcmVjcyhzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIGludCBmZCxcXG4rXFx0XFx0ICAgY29uc3Qgc3RydWN0IHJhd19yZWMgKmNvbnN0ICpyZWNzKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCByYXdfcmVjICpwYXlsb2FkID0gTlVMTDtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgNCBcXHUwMDI2XFx1MDAyNiByZWNzW2ldOyBpKyspIHtcXG4rXFx0XFx0RVhQRUNUX0VRKHNlbmQoZmQsIHJlY3NbaV0tXFx1MDAzZWNpcGhlcl9kYXRhLCByZWNzW2ldLVxcdTAwM2VjaXBoZXJfbGVuLCAwKSxcXG4rXFx0XFx0XFx0ICByZWNzW2ldLVxcdTAwM2VjaXBoZXJfbGVuKTtcXG4rXFx0XFx0aWYgKHJlY3NbaV0tXFx1MDAzZXBsYWluX2xlbilcXG4rXFx0XFx0XFx0cGF5bG9hZCA9IHJlY3NbaV07XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBwYXlsb2FkO1xcbit9XFxuK1xcbitGSVhUVVJFKHplcm9fbGVuX3BlZWspXFxuK3tcXG4rXFx0aW50IGZkLCBjZmQ7XFxuK1xcdGJvb2wgbm90bHM7XFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlQoemVyb19sZW5fcGVlaylcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgcmF3X3JlYyAqcmVjc1s0XTtcXG4rXFx0c3NpemVfdCBwZWVrX3JldDtcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVF9BREQoemVyb19sZW5fcGVlaywgMGRhdGFfMGRhdGFfZGF0YSlcXG4re1xcbitcXHQucmVjcyA9IHsgXFx1MDAyNmlkMF9kYXRhX2wwLCBcXHUwMDI2aWQxX2RhdGFfbDAsIFxcdTAwMjZpZDJfZGF0YV9sMTEsIH0sXFxuK1xcdC5wZWVrX3JldCA9IDExLFxcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERCh6ZXJvX2xlbl9wZWVrLCAwZGF0YV8wZGF0YV8wZGF0YSlcXG4re1xcbitcXHQucmVjcyA9IHsgXFx1MDAyNmlkMF9kYXRhX2wwLCBcXHUwMDI2aWQxX2RhdGFfbDAsIFxcdTAwMjZpZDJfZGF0YV9sMCwgfSxcXG4rXFx0LnBlZWtfcmV0ID0gLUVBR0FJTixcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfU0VUVVAoemVyb19sZW5fcGVlaylcXG4re1xcbitcXHR6ZXJvX2xlbl9zb2NrX3BhaXIoX21ldGFkYXRhLCBcXHUwMDI2c2VsZi1cXHUwMDNlZmQsIFxcdTAwMjZzZWxmLVxcdTAwM2VjZmQsIFxcdTAwMjZzZWxmLVxcdTAwM2Vub3Rscyk7XFxuK31cXG4rXFxuK0ZJWFRVUkVfVEVBUkRPV04oemVyb19sZW5fcGVlaylcXG4re1xcbitcXHRjbG9zZShzZWxmLVxcdTAwM2VmZCk7XFxuK1xcdGNsb3NlKHNlbGYtXFx1MDAzZWNmZCk7XFxuK31cXG4rXFxuKy8qIFBlZWtpbmcgcGFzdCBhIHJ1biBvZiBlbXB0eSBkYXRhIHJlY29yZHMgbXVzdCByZWFjaCB0aGUgcGF5bG9hZFxcbisgKiBiZWhpbmQgdGhlbSwgYW5kIGEgcnVuIHdpdGggbm8gcGF5bG9hZCBiZWhpbmQgaXQgbXVzdCByZXBvcnQgRUFHQUlOXFxuKyAqIHJhdGhlciB0aGFuIHRoZSB6ZXJvIHJldHVybiB0aGF0IG1lYW5zIEVPRi5cXG4rICovXFxuK1RFU1RfRih6ZXJvX2xlbl9wZWVrLCB0ZXN0KVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCByYXdfcmVjICpwYXlsb2FkO1xcbitcXHR1bnNpZ25lZCBjaGFyIGJ1ZlsxMjhdO1xcbitcXHRzc2l6ZV90IHJldDtcXG4rXFxuK1xcdGlmIChzZWxmLVxcdTAwM2Vub3RscylcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJubyBUTFMgc3VwcG9ydFxcXCIpO1xcbitcXG4rXFx0cGF5bG9hZCA9IHplcm9fbGVuX3NlbmRfcmVjcyhfbWV0YWRhdGEsIHNlbGYtXFx1MDAzZWZkLCB2YXJpYW50LVxcdTAwM2VyZWNzKTtcXG4rXFxuK1xcdGlmICh2YXJpYW50LVxcdTAwM2VwZWVrX3JldCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0cmV0ID0gcmVjdihzZWxmLVxcdTAwM2VjZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksXFxuK1xcdFxcdFxcdCAgIE1TR19ET05UV0FJVCB8IE1TR19QRUVLKTtcXG4rXFx0XFx0RVhQRUNUX0VRKHJldCwgLTEpO1xcbitcXHRcXHRpZiAocmV0ID09IC0xKVxcbitcXHRcXHRcXHRFWFBFQ1RfRVEoZXJybm8sIC12YXJpYW50LVxcdTAwM2VwZWVrX3JldCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gcmVjdihzZWxmLVxcdTAwM2VjZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIE1TR19ET05UV0FJVCB8IE1TR19QRUVLKTtcXG4rXFx0RVhQRUNUX0VRKHJldCwgdmFyaWFudC1cXHUwMDNlcGVla19yZXQpO1xcbitcXHRpZiAocmV0ID09IHZhcmlhbnQtXFx1MDAzZXBlZWtfcmV0KVxcbitcXHRcXHRFWFBFQ1RfRVEobWVtY21wKGJ1ZiwgcGF5bG9hZC1cXHUwMDNlcGxhaW5fZGF0YSxcXG4rXFx0XFx0XFx0XFx0IHZhcmlhbnQtXFx1MDAzZXBlZWtfcmV0KSwgMCk7XFxuK1xcbitcXHQvKiBQZWVraW5nIGxlZnQgdGhlIHBheWxvYWQgaW4gcGxhY2UgZm9yIHRoZSByZWFkIHRoYXQgZm9sbG93cyAqL1xcbitcXHRyZXQgPSByZWN2KHNlbGYtXFx1MDAzZWNmZCwgYnVmLCBzaXplb2YoYnVmKSwgTVNHX0RPTlRXQUlUKTtcXG4rXFx0RVhQRUNUX0VRKHJldCwgdmFyaWFudC1cXHUwMDNlcGVla19yZXQpO1xcbitcXHRpZiAocmV0ID09IHZhcmlhbnQtXFx1MDAzZXBlZWtfcmV0KVxcbitcXHRcXHRFWFBFQ1RfRVEobWVtY21wKGJ1ZiwgcGF5bG9hZC1cXHUwMDNlcGxhaW5fZGF0YSxcXG4rXFx0XFx0XFx0XFx0IHZhcmlhbnQtXFx1MDAzZXBlZWtfcmV0KSwgMCk7XFxuK1xcbitcXHRyZXQgPSByZWN2KHNlbGYtXFx1MDAzZWNmZCwgYnVmLCBzaXplb2YoYnVmKSwgTVNHX0RPTlRXQUlUKTtcXG4rXFx0RVhQRUNUX0VRKHJldCwgLTEpO1xcbitcXHRpZiAocmV0ID09IC0xKVxcbitcXHRcXHRFWFBFQ1RfRVEoZXJybm8sIEVBR0FJTik7XFxuK31cXG4rXFxuK0ZJWFRVUkUoemVyb19sZW5fc3BsaWNlKVxcbit7XFxuK1xcdGludCBmZCwgY2ZkO1xcbitcXHRib29sIG5vdGxzO1xcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UKHplcm9fbGVuX3NwbGljZSlcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgcmF3X3JlYyAqcmVjc1s0XTtcXG4rXFx0c3NpemVfdCBzcGxpY2VfcmV0O1xcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERCh6ZXJvX2xlbl9zcGxpY2UsIDBkYXRhX2RhdGEpXFxuK3tcXG4rXFx0LnJlY3MgPSB7IFxcdTAwMjZpZDBfZGF0YV9sMCwgXFx1MDAyNmlkMV9kYXRhX2wxMSwgfSxcXG4rXFx0LnNwbGljZV9yZXQgPSAxMSxcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVF9BREQoemVyb19sZW5fc3BsaWNlLCAwZGF0YV8wZGF0YV9kYXRhKVxcbit7XFxuK1xcdC5yZWNzID0geyBcXHUwMDI2aWQwX2RhdGFfbDAsIFxcdTAwMjZpZDFfZGF0YV9sMCwgXFx1MDAyNmlkMl9kYXRhX2wxMSwgfSxcXG4rXFx0LnNwbGljZV9yZXQgPSAxMSxcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVF9BREQoemVyb19sZW5fc3BsaWNlLCAwZGF0YV8wZGF0YV8wZGF0YSlcXG4re1xcbitcXHQucmVjcyA9IHsgXFx1MDAyNmlkMF9kYXRhX2wwLCBcXHUwMDI2aWQxX2RhdGFfbDAsIFxcdTAwMjZpZDJfZGF0YV9sMCwgfSxcXG4rXFx0LnNwbGljZV9yZXQgPSAtRUFHQUlOLFxcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERCh6ZXJvX2xlbl9zcGxpY2UsIDBkYXRhXzBjdHJsKVxcbit7XFxuK1xcdC5yZWNzID0geyBcXHUwMDI2aWQwX2RhdGFfbDAsIFxcdTAwMjZpZDFfY3RybF9sMCwgfSxcXG4rXFx0LnNwbGljZV9yZXQgPSAtRUlOVkFMLFxcbit9O1xcbitcXG4rRklYVFVSRV9TRVRVUCh6ZXJvX2xlbl9zcGxpY2UpXFxuK3tcXG4rXFx0emVyb19sZW5fc29ja19wYWlyKF9tZXRhZGF0YSwgXFx1MDAyNnNlbGYtXFx1MDAzZWZkLCBcXHUwMDI2c2VsZi1cXHUwMDNlY2ZkLCBcXHUwMDI2c2VsZi1cXHUwMDNlbm90bHMpO1xcbit9XFxuK1xcbitGSVhUVVJFX1RFQVJET1dOKHplcm9fbGVuX3NwbGljZSlcXG4re1xcbitcXHRjbG9zZShzZWxmLVxcdTAwM2VmZCk7XFxuK1xcdGNsb3NlKHNlbGYtXFx1MDAzZWNmZCk7XFxuK31cXG4rXFxuKy8qIEFuIGVtcHR5IGRhdGEgcmVjb3JkIHNwbGljZXMgemVybyBieXRlcywgd2hpY2ggYSBzcGxpY2UgY2FsbGVyIHJlYWRzXFxuKyAqIGFzIEVPRi4gU3BsaWNpbmcgbXVzdCBza2lwIHBhc3Qgc3VjaCBhIHJlY29yZCB0byB0aGUgcGF5bG9hZCBiZWhpbmRcXG4rICogaXQsIGFuZCByZXBvcnQgRUFHQUlOIHdoZW4gYSBydW4gb2YgdGhlbSBoYXMgbm8gcGF5bG9hZCBiZWhpbmQgaXQuXFxuKyAqIEEgY29udHJvbCByZWNvcmQgYmVoaW5kIHRoZSBydW4gcmVwb3J0cyBFSU5WQUwsIHRoZSBlcnJvciBzcGxpY2VcXG4rICogYWxyZWFkeSByZXBvcnRzIGZvciBhIGNvbnRyb2wgcmVjb3JkIGl0IG1lZXRzIGZpcnN0LlxcbisgKi9cXG4rc3RhdGljIHZvaWRcXG4remVyb19sZW5fZG9fc3BsaWNlKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSxcXG4rXFx0XFx0ICAgc3RydWN0IF90ZXN0X2RhdGFfemVyb19sZW5fc3BsaWNlICpzZWxmLFxcbitcXHRcXHQgICBjb25zdCBzdHJ1Y3QgX2ZpeHR1cmVfdmFyaWFudF96ZXJvX2xlbl9zcGxpY2UgKnZhcmlhbnQsXFxuK1xcdFxcdCAgIHVuc2lnbmVkIGludCBzcGxpY2VfZmxhZ3MpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IHJhd19yZWMgKnBheWxvYWQ7XFxuK1xcdHVuc2lnbmVkIGNoYXIgYnVmWzEyOF07XFxuK1xcdHNzaXplX3QgcmV0O1xcbitcXHRpbnQgcFsyXTtcXG4rXFxuK1xcdEFTU0VSVF9HRShwaXBlKHApLCAwKTtcXG4rXFxuK1xcdHBheWxvYWQgPSB6ZXJvX2xlbl9zZW5kX3JlY3MoX21ldGFkYXRhLCBzZWxmLVxcdTAwM2VmZCwgdmFyaWFudC1cXHUwMDNlcmVjcyk7XFxuK1xcbitcXHRpZiAodmFyaWFudC1cXHUwMDNlc3BsaWNlX3JldCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0cmV0ID0gc3BsaWNlKHNlbGYtXFx1MDAzZWNmZCwgTlVMTCwgcFsxXSwgTlVMTCwgc2l6ZW9mKGJ1ZiksXFxuK1xcdFxcdFxcdCAgICAgc3BsaWNlX2ZsYWdzKTtcXG4rXFx0XFx0RVhQRUNUX0VRKHJldCwgLTEpO1xcbitcXHRcXHRpZiAocmV0ID09IC0xKVxcbitcXHRcXHRcXHRFWFBFQ1RfRVEoZXJybm8sIC12YXJpYW50LVxcdTAwM2VzcGxpY2VfcmV0KTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogQXNzZXJ0OiBhIHplcm8gcmV0dXJuLCB3aGljaCBpcyB3aGF0IGFuIHVuZml4ZWQga2VybmVsXFxuK1xcdFxcdCAqIGdpdmVzIGhlcmUsIGxlYXZlcyB0aGUgcGlwZSBlbXB0eSwgYW5kIHRoZSByZWFkIGJlbG93XFxuK1xcdFxcdCAqIHdvdWxkIHRoZW4gYmxvY2sgdW50aWwgdGhlIGhhcm5lc3MgdGltZW91dC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdEFTU0VSVF9FUShzcGxpY2Uoc2VsZi1cXHUwMDNlY2ZkLCBOVUxMLCBwWzFdLCBOVUxMLCBzaXplb2YoYnVmKSxcXG4rXFx0XFx0XFx0XFx0IHNwbGljZV9mbGFncyksIHZhcmlhbnQtXFx1MDAzZXNwbGljZV9yZXQpO1xcbitcXHRcXHRyZXQgPSByZWFkKHBbMF0sIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xcbitcXHRcXHRFWFBFQ1RfRVEocmV0LCB2YXJpYW50LVxcdTAwM2VzcGxpY2VfcmV0KTtcXG4rXFx0XFx0aWYgKHJldCA9PSB2YXJpYW50LVxcdTAwM2VzcGxpY2VfcmV0KVxcbitcXHRcXHRcXHRFWFBFQ1RfRVEobWVtY21wKGJ1ZiwgcGF5bG9hZC1cXHUwMDNlcGxhaW5fZGF0YSxcXG4rXFx0XFx0XFx0XFx0XFx0IHZhcmlhbnQtXFx1MDAzZXNwbGljZV9yZXQpLCAwKTtcXG4rXFxuK1xcdFxcdC8qIFJlYWNoaW5nIHRoZSBwYXlsb2FkIGNvbnN1bWVkIHRoZSBlbXB0eSByZWNvcmRzIGFoZWFkXFxuK1xcdFxcdCAqIG9mIGl0IHJhdGhlciB0aGFuIGxlYXZpbmcgdGhlbSBvbiB0aGUgcmVjZWl2ZSBxdWV1ZVxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmV0ID0gcmVjdihzZWxmLVxcdTAwM2VjZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIE1TR19ET05UV0FJVCk7XFxuK1xcdFxcdEVYUEVDVF9FUShyZXQsIC0xKTtcXG4rXFx0XFx0aWYgKHJldCA9PSAtMSlcXG4rXFx0XFx0XFx0RVhQRUNUX0VRKGVycm5vLCBFQUdBSU4pO1xcbitcXHR9XFxuK1xcbitcXHRjbG9zZShwWzBdKTtcXG4rXFx0Y2xvc2UocFsxXSk7XFxuK31cXG4rXFxuK1RFU1RfRih6ZXJvX2xlbl9zcGxpY2UsIHRlc3QpXFxuK3tcXG4rXFx0aWYgKHNlbGYtXFx1MDAzZW5vdGxzKVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcIm5vIFRMUyBzdXBwb3J0XFxcIik7XFxuK1xcbitcXHR6ZXJvX2xlbl9kb19zcGxpY2UoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBTUExJQ0VfRl9OT05CTE9DSyk7XFxuK31cXG4rXFxuKy8qIFRoZSBzb2NrZXQncyBvd24gT19OT05CTE9DSyBnb3Zlcm5zIHRoZSByZWNvcmQgd2FpdCwgYXMgaXQgZG9lcyBvbiBhXFxuKyAqIHBsYWluIFRDUCBzb2NrZXQsIHNvIGEgc3BsaWNlIHRoYXQgb21pdHMgU1BMSUNFX0ZfTk9OQkxPQ0sgcmVhY2hlc1xcbisgKiB0aGUgc2FtZSBvdXRjb21lIGFzIG9uZSB0aGF0IHNldHMgaXQuIEFuIHVuZml4ZWQga2VybmVsIGRlcml2ZXMgdGhlXFxuKyAqIHdhaXQgZnJvbSBTUExJQ0VfRl9OT05CTE9DSyBhbG9uZSBhbmQgc2xlZXBzIGhlcmUgdW50aWwgdGhlIGhhcm5lc3NcXG4rICogdGltZW91dC5cXG4rICovXFxuK1RFU1RfRih6ZXJvX2xlbl9zcGxpY2UsIG5vbmJsb2NrX3NvY2tldClcXG4re1xcbitcXHRpbnQgc2ZsYWdzO1xcbitcXG4rXFx0aWYgKHNlbGYtXFx1MDAzZW5vdGxzKVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcIm5vIFRMUyBzdXBwb3J0XFxcIik7XFxuK1xcbitcXHRzZmxhZ3MgPSBmY250bChzZWxmLVxcdTAwM2VjZmQsIEZfR0VURkwsIDApO1xcbitcXHRBU1NFUlRfR0Uoc2ZsYWdzLCAwKTtcXG4rXFx0QVNTRVJUX0VRKGZjbnRsKHNlbGYtXFx1MDAzZWNmZCwgRl9TRVRGTCwgc2ZsYWdzIHwgT19OT05CTE9DSyksIDApO1xcbitcXG4rXFx0emVyb19sZW5fZG9fc3BsaWNlKF9tZXRhZGF0YSwgc2VsZiwgdmFyaWFudCwgMCk7XFxuK31cXG4rXFxuIEZJWFRVUkUodGxzX2VycilcXG4ge1xcbiBcXHRpbnQgZmQsIGNmZDtcXG5AQCAtMjYzOCwyOCArMjg4NCw4NSBAQCBURVNUX0YodGxzX2VyciwgYmFkX3JlYylcXG4gXFx0RVhQRUNUX0VRKGVycm5vLCBFQUdBSU4pO1xcbiB9XFxuIFxcbisvKiBFbmNyeXB0IGEgcmVjb3JkIG9uIHRoZSBUWC1vbmx5IHNvY2tldCBwYWlyLCBjb3JydXB0IGl0cyBsYXN0XFxuKyAqIGJ5dGUsIGFuZCBoYW5kIHRoZSByZXN1bHQgdG8gdGhlIHNvY2tldCB1bmRlciB0ZXN0LiBjZmQgY2FycmllcyBhXFxuKyAqIGJ5dGUgc3RyZWFtLCBzbyBvbmUgcmVjdigpIGNhbiByZXR1cm4gcGFydCBvZiBhIHJlY29yZDogdGFrZSB0aGVcXG4rICogZnJhZ21lbnQgbGVuZ3RoIGZyb20gdGhlIHJlY29yZCBoZWFkZXIgYW5kIHdhaXQgZm9yIHRoZSByZW1haW5kZXIuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCB0bHNfc2VuZF9iYWRfYXV0aChzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsXFxuK1xcdFxcdFxcdCAgICAgIGludCBmZCwgaW50IGNmZCwgaW50IGZkMilcXG4re1xcbitcXHRjaGFyIGJ1ZlsxMjhdO1xcbitcXHRpbnQgbGVuO1xcbitcXG4rXFx0bWVtcm5kKGJ1Ziwgc2l6ZW9mKGJ1ZikgLyAyKTtcXG4rXFx0QVNTRVJUX0VRKHNlbmQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikgLyAyLCAwKSwgc2l6ZW9mKGJ1ZikgLyAyKTtcXG4rXFxuK1xcdEFTU0VSVF9FUShyZWN2KGNmZCwgYnVmLCBUTFNfSERSX0xFTiwgTVNHX1dBSVRBTEwpLCBUTFNfSERSX0xFTik7XFxuK1xcbitcXHRsZW4gPSAoKHVuc2lnbmVkIGNoYXIpYnVmWzNdIFxcdTAwM2NcXHUwMDNjIDgpIHwgKHVuc2lnbmVkIGNoYXIpYnVmWzRdO1xcbitcXHRBU1NFUlRfR1QobGVuLCAwKTtcXG4rXFx0QVNTRVJUX0xFKGxlbiwgKGludClzaXplb2YoYnVmKSAtIFRMU19IRFJfTEVOKTtcXG4rXFxuK1xcdEFTU0VSVF9FUShyZWN2KGNmZCwgYnVmICsgVExTX0hEUl9MRU4sIGxlbiwgTVNHX1dBSVRBTEwpLCBsZW4pO1xcbitcXG4rXFx0YnVmW1RMU19IRFJfTEVOICsgbGVuIC0gMV0rKztcXG4rXFxuK1xcdEFTU0VSVF9FUShzZW5kKGZkMiwgYnVmLCBUTFNfSERSX0xFTiArIGxlbiwgMCksIFRMU19IRFJfTEVOICsgbGVuKTtcXG4rfVxcbitcXG4gVEVTVF9GKHRsc19lcnIsIGJhZF9hdXRoKVxcbiB7XFxuIFxcdGNoYXIgYnVmWzEyOF07XFxuLVxcdGludCBuO1xcbiBcXG4gXFx0aWYgKHNlbGYtXFx1MDAzZW5vdGxzKVxcbiBcXHRcXHRTS0lQKHJldHVybiwgXFxcIm5vIFRMUyBzdXBwb3J0XFxcIik7XFxuIFxcbi1cXHRtZW1ybmQoYnVmLCBzaXplb2YoYnVmKSAvIDIpO1xcbi1cXHRFWFBFQ1RfRVEoc2VuZChzZWxmLVxcdTAwM2VmZCwgYnVmLCBzaXplb2YoYnVmKSAvIDIsIDApLCBzaXplb2YoYnVmKSAvIDIpO1xcbi1cXHRuID0gcmVjdihzZWxmLVxcdTAwM2VjZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApO1xcbi1cXHRFWFBFQ1RfR1Qobiwgc2l6ZW9mKGJ1ZikgLyAyKTtcXG4tXFxuLVxcdGJ1ZltuIC0gMV0rKztcXG4rXFx0dGxzX3NlbmRfYmFkX2F1dGgoX21ldGFkYXRhLCBzZWxmLVxcdTAwM2VmZCwgc2VsZi1cXHUwMDNlY2ZkLCBzZWxmLVxcdTAwM2VmZDIpO1xcbiBcXG4tXFx0RVhQRUNUX0VRKHNlbmQoc2VsZi1cXHUwMDNlZmQyLCBidWYsIG4sIDApLCBuKTtcXG4gXFx0RVhQRUNUX0VRKHJlY3Yoc2VsZi1cXHUwMDNlY2ZkMiwgYnVmLCBzaXplb2YoYnVmKSwgMCksIC0xKTtcXG4gXFx0RVhQRUNUX0VRKGVycm5vLCBFQkFETVNHKTtcXG4gXFx0RVhQRUNUX0VRKHJlY3Yoc2VsZi1cXHUwMDNlY2ZkMiwgYnVmLCBzaXplb2YoYnVmKSwgMCksIC0xKTtcXG4gXFx0RVhQRUNUX0VRKGVycm5vLCBFQkFETVNHKTtcXG4gfVxcbiBcXG4rLyogQSByZWNvcmQgdGhhdCBkaWQgbm90IGF1dGhlbnRpY2F0ZSBicmVha3MgdGhlIGNvbm5lY3Rpb24gZm9yIGV2ZXJ5XFxuKyAqIHJlYWRlciwgc3BsaWNlIGluY2x1ZGVkLlxcbisgKlxcbisgKiBUaGUgdHdvIGRlY3J5cHQgcGF0aHMgcmVhY2ggdGhhdCByZXN1bHQgZGlmZmVyZW50bHkuIEEgc3luY2hyb25vdXNcXG4rICogZGVjcnlwdCBsZWF2ZXMgdGhlIHJlY29yZCBwYXJzZWQsIHNvIHRoZSBzcGxpY2UgcmUtcnVucyB0aGUgZGVjcnlwdFxcbisgKiBhbmQgZmFpbHMgb24gdGhlIHJlY29yZCBpdHNlbGY7IHRoZSBjdHgtXFx1MDAzZWFzeW5jX3dhaXQuZXJyIGNoZWNrIGluXFxuKyAqIHRsc19zd19zcGxpY2VfcmVhZCgpIGlzIG5vdCB3aGF0IHN0b3BzIGl0LiBPbmx5IGFuIGFzeW5jaHJvbm91c1xcbisgKiBkZWNyeXB0LCB3aGljaCBuZWVkcyBhIFRMUyAxLjIgc29ja2V0IGFuZCBhbiBBRUFEIGFkdmVydGlzaW5nXFxuKyAqIENSWVBUT19BTEdfQVNZTkMsIGNvbnN1bWVzIHRoZSByZWNvcmQgYmVmb3JlIHRoZSBmYWlsdXJlIGlzXFxuKyAqIHJlY29yZGVkLCBsZWF2aW5nIHRoYXQgY2hlY2sgdGhlIHNvbGUgcmVhc29uIHRoZSBzcGxpY2UgZmFpbHMuXFxuKyAqL1xcbitURVNUX0YodGxzX2VyciwgYmFkX2F1dGhfc3BsaWNlKVxcbit7XFxuK1xcdGNoYXIgYnVmWzEyOF07XFxuK1xcdHNzaXplX3QgcmV0O1xcbitcXHRpbnQgcFsyXTtcXG4rXFxuK1xcdGlmIChzZWxmLVxcdTAwM2Vub3RscylcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJubyBUTFMgc3VwcG9ydFxcXCIpO1xcbitcXG4rXFx0dGxzX3NlbmRfYmFkX2F1dGgoX21ldGFkYXRhLCBzZWxmLVxcdTAwM2VmZCwgc2VsZi1cXHUwMDNlY2ZkLCBzZWxmLVxcdTAwM2VmZDIpO1xcbitcXG4rXFx0RVhQRUNUX0VRKHJlY3Yoc2VsZi1cXHUwMDNlY2ZkMiwgYnVmLCBzaXplb2YoYnVmKSwgMCksIC0xKTtcXG4rXFx0RVhQRUNUX0VRKGVycm5vLCBFQkFETVNHKTtcXG4rXFxuK1xcdEFTU0VSVF9HRShwaXBlKHApLCAwKTtcXG4rXFxuK1xcdHJldCA9IHNwbGljZShzZWxmLVxcdTAwM2VjZmQyLCBOVUxMLCBwWzFdLCBOVUxMLCBzaXplb2YoYnVmKSxcXG4rXFx0XFx0ICAgICBTUExJQ0VfRl9OT05CTE9DSyk7XFxuK1xcdEVYUEVDVF9FUShyZXQsIC0xKTtcXG4rXFx0aWYgKHJldCA9PSAtMSlcXG4rXFx0XFx0RVhQRUNUX0VRKGVycm5vLCBFQkFETVNHKTtcXG4rXFxuK1xcdGNsb3NlKHBbMF0pO1xcbitcXHRjbG9zZShwWzFdKTtcXG4rfVxcbitcXG4gVEVTVF9GKHRsc19lcnIsIGJhZF9pbl9sYXJnZV9yZWFkKVxcbiB7XFxuIFxcdGNoYXIgdHh0WzNdWzY0XTtcXG5AQCAtMjkxNSw3ICszMjE4LDYgQEAgc3RhdGljIHNpemVfdCBwYXJzZV90bHNfcmVjb3JkcyhzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsXFxuIHtcXG4gXFx0Y29uc3QgX191OCAqcmVjID0gcnhfYnVmO1xcbiBcXHRzaXplX3QgdG90YWxfcGxhaW50ZXh0X3J4ID0gMDtcXG4tXFx0Y29uc3QgX191OCByZWNfaGVhZGVyX2xlbiA9IDU7XFxuIFxcbiBcXHR3aGlsZSAocmVjIFxcdTAwM2MgcnhfYnVmICsgcnhfbGVuKSB7XFxuIFxcdFxcdF9fdTE2IHJlY29yZF9wYXlsb2FkX2xlbjtcXG5AQCAtMjkzNSw3ICszMjM3LDcgQEAgc3RhdGljIHNpemVfdCBwYXJzZV90bHNfcmVjb3JkcyhzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsXFxuIFxcbiBcXHRcXHQvKiBQbGFpbnRleHQgbXVzdCBub3QgZXhjZWVkIHRoZSBzcGVjaWZpZWQgbGltaXQgKi9cXG4gXFx0XFx0QVNTRVJUX0xFKHBsYWludGV4dF9sZW4sIG1heF9wYXlsb2FkX2xlbik7XFxuLVxcdFxcdHJlYyArPSByZWNfaGVhZGVyX2xlbiArIHJlY29yZF9wYXlsb2FkX2xlbjtcXG4rXFx0XFx0cmVjICs9IFRMU19IRFJfTEVOICsgcmVjb3JkX3BheWxvYWRfbGVuO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gdG90YWxfcGxhaW50ZXh0X3J4O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjowMjozNS4wODcyOTI0NTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozMzk3Mjk5MTA1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUTFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0bHNfc3dfcmVjdm1zZ1wiLFxuICAgIFwidGxzX3N3X3NwbGljZV9yZWFkXCIsXG4gICAgXCJ0bHNfc3dfcmVhZF9zb2NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRMUyBzb2Z0d2FyZSByZWNlaXZlIHBhdGggdG8gcHJvcGVybHkgaGFuZGxlIHplcm8tbGVuZ3RoIGFwcGxpY2F0aW9uX2RhdGEgcmVjb3JkcyAoZW1wdHkgZGF0YSByZWNvcmRzKSBpbiBUTFMgMS4yIGFuZCBUTFMgMS4zLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBgcmVjdm1zZ2AsIGBzcGxpY2VfcmVhZGAsIGFuZCBgcmVhZF9zb2NrYCBvcGVyYXRpb25zIG9uIFRMUyBzb2NrZXRzLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4OWZjMjIzMGI1Y2QyNDI4MDk5ZTNjYzVlM2JiMzllZGVhZTdiYjAwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjcgMTI6MDI6MzIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdGxzL3Rsc19zdy5jIGIvbmV0L3Rscy90bHNfc3cuY1xuaW5kZXggZDRhZmM5MGZkNzk2NmUuLjBlNzZiMzFiMTI5MTRiIDEwMDY0NFxuLS0tIGEvbmV0L3Rscy90bHNfc3cuY1xuKysrIGIvbmV0L3Rscy90bHNfc3cuY1xuQEAgLTM3LDYgKzM3LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9idWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdGltZWtlZXBpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGxpY2UuaFx1MDAzZVxuQEAgLTE3ODcsNiArMTc4OCwyNCBAQCBzdGF0aWMgdm9pZCB0bHNfcnhfcmVhZGVyX3VubG9jayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0bHNfc3dfY29udGV4dF9yeCAqY3R4KVxuIFx0cmVsZWFzZV9zb2NrKHNrKTtcbiB9XG4gXG4rLyogVExTIDEuMiBhbmQgVExTIDEuMyBib3RoIHBlcm1pdCBhIHplcm8tbGVuZ3RoIGFwcGxpY2F0aW9uX2RhdGFcbisgKiByZWNvcmQgYXMgYSB0cmFmZmljLWFuYWx5c2lzIGNvdW50ZXJtZWFzdXJlIChSRkMgNTI0NiwgU2VjdGlvblxuKyAqIDYuMi4xOyBSRkMgODQ0NiwgU2VjdGlvbiA1LjEpLlxuKyAqL1xuK3N0YXRpYyBib29sIHRsc19yeF9lbXB0eV9kYXRhX3JlYyhpbnQgbGVuLCB1bnNpZ25lZCBjaGFyIGNvbnRyb2wpXG4re1xuK1x0cmV0dXJuICFsZW4gXHUwMDI2XHUwMDI2IGNvbnRyb2wgPT0gVExTX1JFQ09SRF9UWVBFX0RBVEE7XG4rfVxuK1xuKy8qIHNvY2tfaW50cl9lcnJubygpIG1hcHMgdGhlIHplcm8gdGltZW8gb2YgYSByZWFkZXIgdGhhdCBjYW5ub3Qgd2FpdFxuKyAqIHRvIC1FSU5UUiwgYnV0IHN1Y2ggYSByZWFkZXIgaGFzIG5vIGJsb2NraW5nIHRvIGludGVycnVwdC4gVGhlIHJlc3RcbisgKiBvZiB0aGUgcmVjZWl2ZSBzaWRlIHJlcG9ydHMgdGhhdCBjYXNlIGFzIC1FQUdBSU4uXG4rICovXG4rc3RhdGljIGludCB0bHNfcnhfaW50cl9lcnJubyhsb25nIHRpbWVvKVxuK3tcbitcdHJldHVybiB0aW1lbyA/IHNvY2tfaW50cl9lcnJubyh0aW1lbykgOiAtRUFHQUlOO1xuK31cbitcbiBpbnQgdGxzX3N3X3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLFxuIFx0XHQgICBzdHJ1Y3QgbXNnaGRyICptc2csXG4gXHRcdCAgIHNpemVfdCBsZW4sXG5AQCAtMTg1OCw5ICsxODc3LDEyIEBAIGludCB0bHNfc3dfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdCAgICB0bG0tXHUwMDNlY29udHJvbCA9PSBUTFNfUkVDT1JEX1RZUEVfREFUQSlcbiBcdFx0XHRkYXJnLnpjID0gdHJ1ZTtcbiBcbi1cdFx0LyogRG8gbm90IHVzZSBhc3luYyBtb2RlIGlmIHJlY29yZCBpcyBub24tZGF0YSAqL1xuK1x0XHQvKiBEbyBub3QgdXNlIGFzeW5jIG1vZGUgaWYgcmVjb3JkIGlzIG5vbi1kYXRhLCBvciBpZiBpdFxuK1x0XHQgKiBpcyBlbXB0eTogdGhlIHJlY2VpdmUgbG9vcCBmcmVlcyBhbiBlbXB0eSByZWNvcmQncyBza2IsXG4rXHRcdCAqIHNvIGl0cyBkZWNyeXB0aW9uIG11c3QgaGF2ZSBjb21wbGV0ZWQuXG4rXHRcdCAqL1xuIFx0XHRpZiAodGxtLVx1MDAzZWNvbnRyb2wgPT0gVExTX1JFQ09SRF9UWVBFX0RBVEEpXG4tXHRcdFx0ZGFyZy5hc3luYyA9IGN0eC1cdTAwM2Vhc3luY19jYXBhYmxlO1xuK1x0XHRcdGRhcmcuYXN5bmMgPSBjdHgtXHUwMDNlYXN5bmNfY2FwYWJsZSBcdTAwMjZcdTAwMjYgdG9fZGVjcnlwdDtcbiBcdFx0ZWxzZVxuIFx0XHRcdGRhcmcuYXN5bmMgPSBmYWxzZTtcbiBcbkBAIC0xODk2LDYgKzE5MTgsMjcgQEAgaW50IHRsc19zd19yZWN2bXNnKHN0cnVjdCBzb2NrICpzayxcbiBcdFx0Y2h1bmsgPSByeG0tXHUwMDNlZnVsbF9sZW47XG4gXHRcdHRsc19yeF9yZWNfZG9uZShjdHgpO1xuIFxuK1x0XHQvKiBBbiBlbXB0eSByZWNvcmQgYWR2YW5jZXMgbmVpdGhlciBsb29wIGJvdW5kLCBzbyBhIGZsb29kXG4rXHRcdCAqIG9mIHRoZW0gY2FuIGJlIGludGVycnVwdGVkIG9ubHkgaGVyZS4gT24gdGhlIHplcm8tY29weVxuK1x0XHQgKiBwYXRoIGRhcmcuc2tiIGlzIHRoZSBzdHJwYXJzZXIgYW5jaG9yLCBhbHJlYWR5IHJlbGVhc2VkXG4rXHRcdCAqIGJ5IHRsc19yeF9yZWNfZG9uZSgpLlxuK1x0XHQgKi9cbitcdFx0aWYgKHRsc19yeF9lbXB0eV9kYXRhX3JlYyhjaHVuaywgY29udHJvbCkpIHtcbitcdFx0XHRsb25nIHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCk7XG4rXG4rXHRcdFx0aWYgKCFkYXJnLnpjKVxuK1x0XHRcdFx0Y29uc3VtZV9za2IoZGFyZy5za2IpO1xuK1xuK1x0XHRcdC8qIEFuIGVtcHR5IHJlY29yZCBzdGlsbCBtYXJrcyBhIGJvdW5kYXJ5LiAqL1xuK1x0XHRcdG1zZy1cdTAwM2Vtc2dfZmxhZ3MgfD0gTVNHX0VPUjtcbitcbitcdFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbitcdFx0XHRcdGVyciA9IHRsc19yeF9pbnRyX2Vycm5vKHRpbWVvKTtcbitcdFx0XHRcdGdvdG8gcmVjdl9lbmQ7XG4rXHRcdFx0fVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4gXHRcdGlmICghZGFyZy56Yykge1xuIFx0XHRcdGJvb2wgcGFydGlhbGx5X2NvbnN1bWVkID0gY2h1bmsgXHUwMDNlIGxlbjtcbiBcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGFyZy5za2I7XG5AQCAtMTk5MCwyMSArMjAzMywzMSBAQCBzc2l6ZV90IHRsc19zd19zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCAgbG9mZl90ICpwcG9zLFxuIFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cdTAwM2VzaztcbiBcdHN0cnVjdCB0bHNfbXNnICp0bG07XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuK1x0Ym9vbCByZWxlYXNlZCA9IHRydWU7XG4gXHRzc2l6ZV90IGNvcGllZCA9IDA7XG4rXHRib29sIG5vbmJsb2NrO1xuIFx0aW50IGNodW5rO1xuIFx0aW50IGVycjtcbiBcbi1cdGVyciA9IHRsc19yeF9yZWFkZXJfbG9jayhzaywgY3R4LCBmbGFncyBcdTAwMjYgU1BMSUNFX0ZfTk9OQkxPQ0spO1xuK1x0bm9uYmxvY2sgPSAoZmxhZ3MgXHUwMDI2IFNQTElDRV9GX05PTkJMT0NLKSB8fFxuK1x0XHQgICAoc29jay1cdTAwM2VmaWxlLVx1MDAzZWZfZmxhZ3MgXHUwMDI2IE9fTk9OQkxPQ0spO1xuK1xuK1x0ZXJyID0gdGxzX3J4X3JlYWRlcl9sb2NrKHNrLCBjdHgsIG5vbmJsb2NrKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdHJldHVybiBlcnI7XG4gXG4rXHQvKiBJZiBjcnlwdG8gZmFpbGVkIHRoZSBjb25uZWN0aW9uIGlzIGJyb2tlbiAqL1xuK1x0ZXJyID0gY3R4LVx1MDAzZWFzeW5jX3dhaXQuZXJyO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBzcGxpY2VfcmVhZF9lbmQ7XG4rXG4rcmV0cnk6XG4gXHRpZiAoIXNrYl9xdWV1ZV9lbXB0eShcdTAwMjZjdHgtXHUwMDNlcnhfbGlzdCkpIHtcbiBcdFx0c2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZjdHgtXHUwMDNlcnhfbGlzdCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRzdHJ1Y3QgdGxzX2RlY3J5cHRfYXJnIGRhcmc7XG4gXG4tXHRcdGVyciA9IHRsc19yeF9yZWNfd2FpdChzaywgZmxhZ3MgXHUwMDI2IFNQTElDRV9GX05PTkJMT0NLLFxuLVx0XHRcdFx0ICAgICAgdHJ1ZSwgZmFsc2UpO1xuK1x0XHRlcnIgPSB0bHNfcnhfcmVjX3dhaXQoc2ssIG5vbmJsb2NrLCByZWxlYXNlZCwgZmFsc2UpO1xuIFx0XHRpZiAoZXJyIFx1MDAzYz0gMClcbiBcdFx0XHRnb3RvIHNwbGljZV9yZWFkX2VuZDtcbiBcbkBAIC0yMDE2LDYgKzIwNjksMTEgQEAgc3NpemVfdCB0bHNfc3dfc3BsaWNlX3JlYWQoc3RydWN0IHNvY2tldCAqc29jaywgIGxvZmZfdCAqcHBvcyxcbiBcbiBcdFx0dGxzX3J4X3JlY19kb25lKGN0eCk7XG4gXHRcdHNrYiA9IGRhcmcuc2tiO1xuK1xuK1x0XHQvKiBUaGUgc29ja2V0IGxvY2sgc3RheXMgaGVsZCB0byB0aGUgcmV0cnksIHNvIHRoZVxuK1x0XHQgKiBhbmNob3IgdGhpcyB3YWl0IGxvYWRlZCBzdXJ2aXZlcyBpdC5cbitcdFx0ICovXG4rXHRcdHJlbGVhc2VkID0gZmFsc2U7XG4gXHR9XG4gXG4gXHRyeG0gPSBzdHJwX21zZyhza2IpO1xuQEAgLTIwMjcsNiArMjA4NSwyMSBAQCBzc2l6ZV90IHRsc19zd19zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCAgbG9mZl90ICpwcG9zLFxuIFx0XHRnb3RvIHNwbGljZV9yZXF1ZXVlO1xuIFx0fVxuIFxuK1x0LyogU3BsaWNpbmcgYW4gZW1wdHkgZGF0YSByZWNvcmQgZGVsaXZlcnMgemVybyBieXRlcywgd2hpY2ggdGhlXG4rXHQgKiBjYWxsZXIgcmVhZHMgYXMgRU9GLiB0bHNfcnhfcmVjX3dhaXQoKSBza2lwcyBpdHMgc2lnbmFsIGNoZWNrXG4rXHQgKiB3aGlsZSBhIHJlY29yZCBpcyBwYXJzZWQsIHNvIHRlc3QgZm9yIGEgc2lnbmFsIGhlcmUuXG4rXHQgKi9cbitcdGlmICh0bHNfcnhfZW1wdHlfZGF0YV9yZWMocnhtLVx1MDAzZWZ1bGxfbGVuLCB0bG0tXHUwMDNlY29udHJvbCkpIHtcbitcdFx0bG9uZyB0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIG5vbmJsb2NrKTtcbitcbitcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbitcdFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XG4rXHRcdFx0ZXJyID0gdGxzX3J4X2ludHJfZXJybm8odGltZW8pO1xuK1x0XHRcdGdvdG8gc3BsaWNlX3JlYWRfZW5kO1xuK1x0XHR9XG4rXHRcdGdvdG8gcmV0cnk7XG4rXHR9XG4rXG4gXHRjaHVuayA9IG1pbl90KHVuc2lnbmVkIGludCwgcnhtLVx1MDAzZWZ1bGxfbGVuLCBsZW4pO1xuIFx0Y29waWVkID0gc2tiX3NwbGljZV9iaXRzKHNrYiwgc2ssIHJ4bS1cdTAwM2VvZmZzZXQsIHBpcGUsIGNodW5rLCBmbGFncyk7XG4gXHRpZiAoY29waWVkIFx1MDAzYyAwKVxuQEAgLTIwNDksNiArMjEyMiwxMSBAQCBzc2l6ZV90IHRsc19zd19zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCAgbG9mZl90ICpwcG9zLFxuIFx0Z290byBzcGxpY2VfcmVhZF9lbmQ7XG4gfVxuIFxuKy8qIEJvdW5kIHRoZSB0aW1lIHRoYXQgY29uc2VjdXRpdmUgZW1wdHkgaW5ncmVzcyBkYXRhIHJlY29yZHMga2VlcFxuKyAqIHRoZSBzb2NrZXQgbG9jayBoZWxkIHdpdGhvdXQgcmVsZWFzaW5nIGl0LlxuKyAqL1xuKyNkZWZpbmUgVExTX1JYX05PREFUQV9OUyBOU0VDX1BFUl9NU0VDXG4rXG4gaW50IHRsc19zd19yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbiBcdFx0ICAgICBza19yZWFkX2FjdG9yX3QgcmVhZF9hY3RvcilcbiB7XG5AQCAtMjA1Nyw2ICsyMTM1LDcgQEAgaW50IHRsc19zd19yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbiBcdHN0cnVjdCB0bHNfcHJvdF9pbmZvICpwcm90ID0gXHUwMDI2dGxzX2N0eC1cdTAwM2Vwcm90X2luZm87XG4gXHRzdHJ1Y3Qgc3RycF9tc2cgKnJ4bSA9IE5VTEw7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcbitcdHU2NCBub2RhdGFfZGVhZGxpbmUgPSAwO1xuIFx0c3RydWN0IHNrX3Bzb2NrICpwc29jaztcbiBcdHNpemVfdCBmbHVzaGVkX2F0ID0gMDtcbiBcdGJvb2wgcmVsZWFzZWQgPSB0cnVlO1xuQEAgLTIxMTUsMTQgKzIxOTQsMjUgQEAgaW50IHRsc19zd19yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbiBcdFx0XHRnb3RvIHJlYWRfc29ja19yZXF1ZXVlO1xuIFx0XHR9XG4gXG4tXHRcdC8qIEFuIGVtcHR5IGRhdGEgcmVjb3JkIChsZWdhbCBpbiBUTFMgMS4zKSBnaXZlcyBhIHplcm9cbi1cdFx0ICogcmVhZF9hY3RvciByZXR1cm4sIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gdGhlIGNvbnN1bWVyXG4tXHRcdCAqIHN0YWxsaW5nOyB0aGUgdXNlZCBcdTAwM2M9IDAgcGF0aCB3b3VsZCByZXF1ZXVlIGl0IGF0IHRoZVxuLVx0XHQgKiBoZWFkIG9mIHJ4X2xpc3QgYW5kIGJsb2NrIGFsbCBsYXRlciByZWNvcmRzLiBDb25zdW1lIGl0XG4tXHRcdCAqIGhlcmUgaW5zdGVhZC5cbitcdFx0LyogQW4gZW1wdHkgZGF0YSByZWNvcmQgZ2l2ZXMgYSB6ZXJvIHJlYWRfYWN0b3IgcmV0dXJuLFxuK1x0XHQgKiBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIHRoZSBjb25zdW1lciBzdGFsbGluZzsgdGhlXG4rXHRcdCAqIHVzZWQgXHUwMDNjPSAwIHBhdGggd291bGQgcmVxdWV1ZSBpdCBhdCB0aGUgaGVhZCBvZiByeF9saXN0XG4rXHRcdCAqIGFuZCBibG9jayBhbGwgbGF0ZXIgcmVjb3Jkcy4gQ29uc3VtZSBpdCBoZXJlIGluc3RlYWQuXG4gXHRcdCAqL1xuLVx0XHRpZiAocnhtLVx1MDAzZWZ1bGxfbGVuID09IDApIHtcbitcdFx0aWYgKHRsc19yeF9lbXB0eV9kYXRhX3JlYyhyeG0tXHUwMDNlZnVsbF9sZW4sIHRsbS1cdTAwM2Vjb250cm9sKSkge1xuK1x0XHRcdGVyciA9IDA7XG4gXHRcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbitcdFx0XHRpZiAoIW5vZGF0YV9kZWFkbGluZSkge1xuK1x0XHRcdFx0bm9kYXRhX2RlYWRsaW5lID0ga3RpbWVfZ2V0X25zKCkgK1xuK1x0XHRcdFx0XHRcdCAgVExTX1JYX05PREFUQV9OUztcbitcdFx0XHR9IGVsc2UgaWYgKGt0aW1lX2dldF9ucygpIFx1MDAzZT0gbm9kYXRhX2RlYWRsaW5lKSB7XG4rXHRcdFx0XHQvKiBRdWV1ZWQgcmVjb3JkcyByYWlzZSBubyBuZXcgc2tfZGF0YV9yZWFkeSgpLFxuK1x0XHRcdFx0ICogYW5kIHRsc19yeF9yZWFkZXJfcmVsZWFzZSgpIGFubm91bmNlcyBvbmx5IHRvXG4rXHRcdFx0XHQgKiBzYXZlZF9kYXRhX3JlYWR5KCksIG5vdCB0aGUgY29uc3VtZXIncyBvd24uXG4rXHRcdFx0XHQgKi9cbitcdFx0XHRcdHNrLVx1MDAzZXNrX2RhdGFfcmVhZHkoc2spO1xuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG5AQCAtMjEzMyw2ICsyMjIzLDcgQEAgaW50IHRsc19zd19yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbiBcdFx0XHRnb3RvIHJlYWRfc29ja19yZXF1ZXVlO1xuIFx0XHR9XG4gXHRcdGNvcGllZCArPSB1c2VkO1xuK1x0XHRub2RhdGFfZGVhZGxpbmUgPSAwO1xuIFx0XHRpZiAodXNlZCBcdTAwM2MgcnhtLVx1MDAzZWZ1bGxfbGVuKSB7XG4gXHRcdFx0cnhtLVx1MDAzZW9mZnNldCArPSB1c2VkO1xuIFx0XHRcdHJ4bS1cdTAwM2VmdWxsX2xlbiAtPSB1c2VkO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuY1xuaW5kZXggY2JkZDNlYTI4Yjk5OGYuLjhiNjhkYmZjYzU5MjQ2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmNcbkBAIC0yNCw2ICsyNCw3IEBAXG4gI2luY2x1ZGUgXCJrc2VsZnRlc3RfaGFybmVzcy5oXCJcbiBcbiAjZGVmaW5lIFRMU19QQVlMT0FEX01BWF9MRU4gMTYzODRcbisjZGVmaW5lIFRMU19IRFJfTEVOIDVcbiAjZGVmaW5lIFNPTF9UTFMgMjgyXG4gXG4gc3RhdGljIGludCBmaXBzX2VuYWJsZWQ7XG5AQCAtMjU0NCw2ICsyNTQ1LDkgQEAgVEVTVF9GKHplcm9fbGVuLCB0ZXN0KVxuIFx0aW50IHJlY19vZmY7XG4gXHRpbnQgaTtcbiBcbitcdGlmIChzZWxmLVx1MDAzZW5vdGxzKVxuK1x0XHRTS0lQKHJldHVybiwgXCJubyBUTFMgc3VwcG9ydFwiKTtcbitcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDQgXHUwMDI2XHUwMDI2IHZhcmlhbnQtXHUwMDNlcmVjc1tpXTsgaSsrKVxuIFx0XHRFWFBFQ1RfRVEoc2VuZChzZWxmLVx1MDAzZWZkLCB2YXJpYW50LVx1MDAzZXJlY3NbaV0tXHUwMDNlY2lwaGVyX2RhdGEsXG4gXHRcdFx0ICAgICAgIHZhcmlhbnQtXHUwMDNlcmVjc1tpXS1cdTAwM2VjaXBoZXJfbGVuLCAwKSxcbkBAIC0yNTczLDYgKzI1NzcsMjQ4IEBAIFRFU1RfRih6ZXJvX2xlbiwgdGVzdClcbiBcdH1cbiB9O1xuIFxuK3N0YXRpYyB2b2lkIHplcm9fbGVuX3NvY2tfcGFpcihzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsXG4rXHRcdFx0ICAgICAgIGludCAqZmQsIGludCAqY2ZkLCBib29sICpub3Rscylcbit7XG4rXHRzdHJ1Y3QgdGxzX2NyeXB0b19pbmZvX2tleXMgdGxzMTI7XG4rXHRpbnQgcmV0O1xuK1xuK1x0dGxzX2NyeXB0b19pbmZvX2luaXQoVExTXzFfMl9WRVJTSU9OLCBUTFNfQ0lQSEVSX0FFU19DQ01fMTI4LFxuK1x0XHRcdCAgICAgXHUwMDI2dGxzMTIsIDApO1xuK1xuK1x0dWxwX3NvY2tfcGFpcihfbWV0YWRhdGEsIGZkLCBjZmQsIG5vdGxzKTtcbitcdGlmICgqbm90bHMpXG4rXHRcdHJldHVybjtcbitcbitcdC8qIGZkIHN0YXlzIGtleWxlc3M7IHRoZXNlIGZpeHR1cmVzIHNlbmQgcmF3IHJlY29yZHMgb3ZlciBpdCAqL1xuK1x0cmV0ID0gc2V0c29ja29wdCgqY2ZkLCBTT0xfVExTLCBUTFNfUlgsIFx1MDAyNnRsczEyLCB0bHMxMi5sZW4pO1xuK1x0QVNTRVJUX0VRKHJldCwgMCk7XG4rfVxuK1xuKy8qIFNlbmQgYSB2YXJpYW50J3MgcmVjb3JkczsgcmV0dXJuIHRoZSBsYXN0IG9uZSBjYXJyeWluZyBwYXlsb2FkICovXG4rc3RhdGljIGNvbnN0IHN0cnVjdCByYXdfcmVjICpcbit6ZXJvX2xlbl9zZW5kX3JlY3Moc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLCBpbnQgZmQsXG4rXHRcdCAgIGNvbnN0IHN0cnVjdCByYXdfcmVjICpjb25zdCAqcmVjcylcbit7XG4rXHRjb25zdCBzdHJ1Y3QgcmF3X3JlYyAqcGF5bG9hZCA9IE5VTEw7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDQgXHUwMDI2XHUwMDI2IHJlY3NbaV07IGkrKykge1xuK1x0XHRFWFBFQ1RfRVEoc2VuZChmZCwgcmVjc1tpXS1cdTAwM2VjaXBoZXJfZGF0YSwgcmVjc1tpXS1cdTAwM2VjaXBoZXJfbGVuLCAwKSxcbitcdFx0XHQgIHJlY3NbaV0tXHUwMDNlY2lwaGVyX2xlbik7XG4rXHRcdGlmIChyZWNzW2ldLVx1MDAzZXBsYWluX2xlbilcbitcdFx0XHRwYXlsb2FkID0gcmVjc1tpXTtcbitcdH1cbitcbitcdHJldHVybiBwYXlsb2FkO1xuK31cbitcbitGSVhUVVJFKHplcm9fbGVuX3BlZWspXG4re1xuK1x0aW50IGZkLCBjZmQ7XG4rXHRib29sIG5vdGxzO1xuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UKHplcm9fbGVuX3BlZWspXG4re1xuK1x0Y29uc3Qgc3RydWN0IHJhd19yZWMgKnJlY3NbNF07XG4rXHRzc2l6ZV90IHBlZWtfcmV0O1xuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UX0FERCh6ZXJvX2xlbl9wZWVrLCAwZGF0YV8wZGF0YV9kYXRhKVxuK3tcbitcdC5yZWNzID0geyBcdTAwMjZpZDBfZGF0YV9sMCwgXHUwMDI2aWQxX2RhdGFfbDAsIFx1MDAyNmlkMl9kYXRhX2wxMSwgfSxcbitcdC5wZWVrX3JldCA9IDExLFxuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UX0FERCh6ZXJvX2xlbl9wZWVrLCAwZGF0YV8wZGF0YV8wZGF0YSlcbit7XG4rXHQucmVjcyA9IHsgXHUwMDI2aWQwX2RhdGFfbDAsIFx1MDAyNmlkMV9kYXRhX2wwLCBcdTAwMjZpZDJfZGF0YV9sMCwgfSxcbitcdC5wZWVrX3JldCA9IC1FQUdBSU4sXG4rfTtcbitcbitGSVhUVVJFX1NFVFVQKHplcm9fbGVuX3BlZWspXG4re1xuK1x0emVyb19sZW5fc29ja19wYWlyKF9tZXRhZGF0YSwgXHUwMDI2c2VsZi1cdTAwM2VmZCwgXHUwMDI2c2VsZi1cdTAwM2VjZmQsIFx1MDAyNnNlbGYtXHUwMDNlbm90bHMpO1xuK31cbitcbitGSVhUVVJFX1RFQVJET1dOKHplcm9fbGVuX3BlZWspXG4re1xuK1x0Y2xvc2Uoc2VsZi1cdTAwM2VmZCk7XG4rXHRjbG9zZShzZWxmLVx1MDAzZWNmZCk7XG4rfVxuK1xuKy8qIFBlZWtpbmcgcGFzdCBhIHJ1biBvZiBlbXB0eSBkYXRhIHJlY29yZHMgbXVzdCByZWFjaCB0aGUgcGF5bG9hZFxuKyAqIGJlaGluZCB0aGVtLCBhbmQgYSBydW4gd2l0aCBubyBwYXlsb2FkIGJlaGluZCBpdCBtdXN0IHJlcG9ydCBFQUdBSU5cbisgKiByYXRoZXIgdGhhbiB0aGUgemVybyByZXR1cm4gdGhhdCBtZWFucyBFT0YuXG4rICovXG4rVEVTVF9GKHplcm9fbGVuX3BlZWssIHRlc3QpXG4re1xuK1x0Y29uc3Qgc3RydWN0IHJhd19yZWMgKnBheWxvYWQ7XG4rXHR1bnNpZ25lZCBjaGFyIGJ1ZlsxMjhdO1xuK1x0c3NpemVfdCByZXQ7XG4rXG4rXHRpZiAoc2VsZi1cdTAwM2Vub3RscylcbitcdFx0U0tJUChyZXR1cm4sIFwibm8gVExTIHN1cHBvcnRcIik7XG4rXG4rXHRwYXlsb2FkID0gemVyb19sZW5fc2VuZF9yZWNzKF9tZXRhZGF0YSwgc2VsZi1cdTAwM2VmZCwgdmFyaWFudC1cdTAwM2VyZWNzKTtcbitcbitcdGlmICh2YXJpYW50LVx1MDAzZXBlZWtfcmV0IFx1MDAzYyAwKSB7XG4rXHRcdHJldCA9IHJlY3Yoc2VsZi1cdTAwM2VjZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksXG4rXHRcdFx0ICAgTVNHX0RPTlRXQUlUIHwgTVNHX1BFRUspO1xuK1x0XHRFWFBFQ1RfRVEocmV0LCAtMSk7XG4rXHRcdGlmIChyZXQgPT0gLTEpXG4rXHRcdFx0RVhQRUNUX0VRKGVycm5vLCAtdmFyaWFudC1cdTAwM2VwZWVrX3JldCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHJldCA9IHJlY3Yoc2VsZi1cdTAwM2VjZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIE1TR19ET05UV0FJVCB8IE1TR19QRUVLKTtcbitcdEVYUEVDVF9FUShyZXQsIHZhcmlhbnQtXHUwMDNlcGVla19yZXQpO1xuK1x0aWYgKHJldCA9PSB2YXJpYW50LVx1MDAzZXBlZWtfcmV0KVxuK1x0XHRFWFBFQ1RfRVEobWVtY21wKGJ1ZiwgcGF5bG9hZC1cdTAwM2VwbGFpbl9kYXRhLFxuK1x0XHRcdFx0IHZhcmlhbnQtXHUwMDNlcGVla19yZXQpLCAwKTtcbitcbitcdC8qIFBlZWtpbmcgbGVmdCB0aGUgcGF5bG9hZCBpbiBwbGFjZSBmb3IgdGhlIHJlYWQgdGhhdCBmb2xsb3dzICovXG4rXHRyZXQgPSByZWN2KHNlbGYtXHUwMDNlY2ZkLCBidWYsIHNpemVvZihidWYpLCBNU0dfRE9OVFdBSVQpO1xuK1x0RVhQRUNUX0VRKHJldCwgdmFyaWFudC1cdTAwM2VwZWVrX3JldCk7XG4rXHRpZiAocmV0ID09IHZhcmlhbnQtXHUwMDNlcGVla19yZXQpXG4rXHRcdEVYUEVDVF9FUShtZW1jbXAoYnVmLCBwYXlsb2FkLVx1MDAzZXBsYWluX2RhdGEsXG4rXHRcdFx0XHQgdmFyaWFudC1cdTAwM2VwZWVrX3JldCksIDApO1xuK1xuK1x0cmV0ID0gcmVjdihzZWxmLVx1MDAzZWNmZCwgYnVmLCBzaXplb2YoYnVmKSwgTVNHX0RPTlRXQUlUKTtcbitcdEVYUEVDVF9FUShyZXQsIC0xKTtcbitcdGlmIChyZXQgPT0gLTEpXG4rXHRcdEVYUEVDVF9FUShlcnJubywgRUFHQUlOKTtcbit9XG4rXG4rRklYVFVSRSh6ZXJvX2xlbl9zcGxpY2UpXG4re1xuK1x0aW50IGZkLCBjZmQ7XG4rXHRib29sIG5vdGxzO1xuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UKHplcm9fbGVuX3NwbGljZSlcbit7XG4rXHRjb25zdCBzdHJ1Y3QgcmF3X3JlYyAqcmVjc1s0XTtcbitcdHNzaXplX3Qgc3BsaWNlX3JldDtcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BREQoemVyb19sZW5fc3BsaWNlLCAwZGF0YV9kYXRhKVxuK3tcbitcdC5yZWNzID0geyBcdTAwMjZpZDBfZGF0YV9sMCwgXHUwMDI2aWQxX2RhdGFfbDExLCB9LFxuK1x0LnNwbGljZV9yZXQgPSAxMSxcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BREQoemVyb19sZW5fc3BsaWNlLCAwZGF0YV8wZGF0YV9kYXRhKVxuK3tcbitcdC5yZWNzID0geyBcdTAwMjZpZDBfZGF0YV9sMCwgXHUwMDI2aWQxX2RhdGFfbDAsIFx1MDAyNmlkMl9kYXRhX2wxMSwgfSxcbitcdC5zcGxpY2VfcmV0ID0gMTEsXG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlRfQUREKHplcm9fbGVuX3NwbGljZSwgMGRhdGFfMGRhdGFfMGRhdGEpXG4re1xuK1x0LnJlY3MgPSB7IFx1MDAyNmlkMF9kYXRhX2wwLCBcdTAwMjZpZDFfZGF0YV9sMCwgXHUwMDI2aWQyX2RhdGFfbDAsIH0sXG4rXHQuc3BsaWNlX3JldCA9IC1FQUdBSU4sXG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlRfQUREKHplcm9fbGVuX3NwbGljZSwgMGRhdGFfMGN0cmwpXG4re1xuK1x0LnJlY3MgPSB7IFx1MDAyNmlkMF9kYXRhX2wwLCBcdTAwMjZpZDFfY3RybF9sMCwgfSxcbitcdC5zcGxpY2VfcmV0ID0gLUVJTlZBTCxcbit9O1xuK1xuK0ZJWFRVUkVfU0VUVVAoemVyb19sZW5fc3BsaWNlKVxuK3tcbitcdHplcm9fbGVuX3NvY2tfcGFpcihfbWV0YWRhdGEsIFx1MDAyNnNlbGYtXHUwMDNlZmQsIFx1MDAyNnNlbGYtXHUwMDNlY2ZkLCBcdTAwMjZzZWxmLVx1MDAzZW5vdGxzKTtcbit9XG4rXG4rRklYVFVSRV9URUFSRE9XTih6ZXJvX2xlbl9zcGxpY2UpXG4re1xuK1x0Y2xvc2Uoc2VsZi1cdTAwM2VmZCk7XG4rXHRjbG9zZShzZWxmLVx1MDAzZWNmZCk7XG4rfVxuK1xuKy8qIEFuIGVtcHR5IGRhdGEgcmVjb3JkIHNwbGljZXMgemVybyBieXRlcywgd2hpY2ggYSBzcGxpY2UgY2FsbGVyIHJlYWRzXG4rICogYXMgRU9GLiBTcGxpY2luZyBtdXN0IHNraXAgcGFzdCBzdWNoIGEgcmVjb3JkIHRvIHRoZSBwYXlsb2FkIGJlaGluZFxuKyAqIGl0LCBhbmQgcmVwb3J0IEVBR0FJTiB3aGVuIGEgcnVuIG9mIHRoZW0gaGFzIG5vIHBheWxvYWQgYmVoaW5kIGl0LlxuKyAqIEEgY29udHJvbCByZWNvcmQgYmVoaW5kIHRoZSBydW4gcmVwb3J0cyBFSU5WQUwsIHRoZSBlcnJvciBzcGxpY2VcbisgKiBhbHJlYWR5IHJlcG9ydHMgZm9yIGEgY29udHJvbCByZWNvcmQgaXQgbWVldHMgZmlyc3QuXG4rICovXG4rc3RhdGljIHZvaWRcbit6ZXJvX2xlbl9kb19zcGxpY2Uoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLFxuK1x0XHQgICBzdHJ1Y3QgX3Rlc3RfZGF0YV96ZXJvX2xlbl9zcGxpY2UgKnNlbGYsXG4rXHRcdCAgIGNvbnN0IHN0cnVjdCBfZml4dHVyZV92YXJpYW50X3plcm9fbGVuX3NwbGljZSAqdmFyaWFudCxcbitcdFx0ICAgdW5zaWduZWQgaW50IHNwbGljZV9mbGFncylcbit7XG4rXHRjb25zdCBzdHJ1Y3QgcmF3X3JlYyAqcGF5bG9hZDtcbitcdHVuc2lnbmVkIGNoYXIgYnVmWzEyOF07XG4rXHRzc2l6ZV90IHJldDtcbitcdGludCBwWzJdO1xuK1xuK1x0QVNTRVJUX0dFKHBpcGUocCksIDApO1xuK1xuK1x0cGF5bG9hZCA9IHplcm9fbGVuX3NlbmRfcmVjcyhfbWV0YWRhdGEsIHNlbGYtXHUwMDNlZmQsIHZhcmlhbnQtXHUwMDNlcmVjcyk7XG4rXG4rXHRpZiAodmFyaWFudC1cdTAwM2VzcGxpY2VfcmV0IFx1MDAzYyAwKSB7XG4rXHRcdHJldCA9IHNwbGljZShzZWxmLVx1MDAzZWNmZCwgTlVMTCwgcFsxXSwgTlVMTCwgc2l6ZW9mKGJ1ZiksXG4rXHRcdFx0ICAgICBzcGxpY2VfZmxhZ3MpO1xuK1x0XHRFWFBFQ1RfRVEocmV0LCAtMSk7XG4rXHRcdGlmIChyZXQgPT0gLTEpXG4rXHRcdFx0RVhQRUNUX0VRKGVycm5vLCAtdmFyaWFudC1cdTAwM2VzcGxpY2VfcmV0KTtcbitcdH0gZWxzZSB7XG4rXHRcdC8qIEFzc2VydDogYSB6ZXJvIHJldHVybiwgd2hpY2ggaXMgd2hhdCBhbiB1bmZpeGVkIGtlcm5lbFxuK1x0XHQgKiBnaXZlcyBoZXJlLCBsZWF2ZXMgdGhlIHBpcGUgZW1wdHksIGFuZCB0aGUgcmVhZCBiZWxvd1xuK1x0XHQgKiB3b3VsZCB0aGVuIGJsb2NrIHVudGlsIHRoZSBoYXJuZXNzIHRpbWVvdXQuXG4rXHRcdCAqL1xuK1x0XHRBU1NFUlRfRVEoc3BsaWNlKHNlbGYtXHUwMDNlY2ZkLCBOVUxMLCBwWzFdLCBOVUxMLCBzaXplb2YoYnVmKSxcbitcdFx0XHRcdCBzcGxpY2VfZmxhZ3MpLCB2YXJpYW50LVx1MDAzZXNwbGljZV9yZXQpO1xuK1x0XHRyZXQgPSByZWFkKHBbMF0sIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xuK1x0XHRFWFBFQ1RfRVEocmV0LCB2YXJpYW50LVx1MDAzZXNwbGljZV9yZXQpO1xuK1x0XHRpZiAocmV0ID09IHZhcmlhbnQtXHUwMDNlc3BsaWNlX3JldClcbitcdFx0XHRFWFBFQ1RfRVEobWVtY21wKGJ1ZiwgcGF5bG9hZC1cdTAwM2VwbGFpbl9kYXRhLFxuK1x0XHRcdFx0XHQgdmFyaWFudC1cdTAwM2VzcGxpY2VfcmV0KSwgMCk7XG4rXG4rXHRcdC8qIFJlYWNoaW5nIHRoZSBwYXlsb2FkIGNvbnN1bWVkIHRoZSBlbXB0eSByZWNvcmRzIGFoZWFkXG4rXHRcdCAqIG9mIGl0IHJhdGhlciB0aGFuIGxlYXZpbmcgdGhlbSBvbiB0aGUgcmVjZWl2ZSBxdWV1ZVxuK1x0XHQgKi9cbitcdFx0cmV0ID0gcmVjdihzZWxmLVx1MDAzZWNmZCwgYnVmLCBzaXplb2YoYnVmKSwgTVNHX0RPTlRXQUlUKTtcbitcdFx0RVhQRUNUX0VRKHJldCwgLTEpO1xuK1x0XHRpZiAocmV0ID09IC0xKVxuK1x0XHRcdEVYUEVDVF9FUShlcnJubywgRUFHQUlOKTtcbitcdH1cbitcbitcdGNsb3NlKHBbMF0pO1xuK1x0Y2xvc2UocFsxXSk7XG4rfVxuK1xuK1RFU1RfRih6ZXJvX2xlbl9zcGxpY2UsIHRlc3QpXG4re1xuK1x0aWYgKHNlbGYtXHUwMDNlbm90bHMpXG4rXHRcdFNLSVAocmV0dXJuLCBcIm5vIFRMUyBzdXBwb3J0XCIpO1xuK1xuK1x0emVyb19sZW5fZG9fc3BsaWNlKF9tZXRhZGF0YSwgc2VsZiwgdmFyaWFudCwgU1BMSUNFX0ZfTk9OQkxPQ0spO1xuK31cbitcbisvKiBUaGUgc29ja2V0J3Mgb3duIE9fTk9OQkxPQ0sgZ292ZXJucyB0aGUgcmVjb3JkIHdhaXQsIGFzIGl0IGRvZXMgb24gYVxuKyAqIHBsYWluIFRDUCBzb2NrZXQsIHNvIGEgc3BsaWNlIHRoYXQgb21pdHMgU1BMSUNFX0ZfTk9OQkxPQ0sgcmVhY2hlc1xuKyAqIHRoZSBzYW1lIG91dGNvbWUgYXMgb25lIHRoYXQgc2V0cyBpdC4gQW4gdW5maXhlZCBrZXJuZWwgZGVyaXZlcyB0aGVcbisgKiB3YWl0IGZyb20gU1BMSUNFX0ZfTk9OQkxPQ0sgYWxvbmUgYW5kIHNsZWVwcyBoZXJlIHVudGlsIHRoZSBoYXJuZXNzXG4rICogdGltZW91dC5cbisgKi9cbitURVNUX0YoemVyb19sZW5fc3BsaWNlLCBub25ibG9ja19zb2NrZXQpXG4re1xuK1x0aW50IHNmbGFncztcbitcbitcdGlmIChzZWxmLVx1MDAzZW5vdGxzKVxuK1x0XHRTS0lQKHJldHVybiwgXCJubyBUTFMgc3VwcG9ydFwiKTtcbitcbitcdHNmbGFncyA9IGZjbnRsKHNlbGYtXHUwMDNlY2ZkLCBGX0dFVEZMLCAwKTtcbitcdEFTU0VSVF9HRShzZmxhZ3MsIDApO1xuK1x0QVNTRVJUX0VRKGZjbnRsKHNlbGYtXHUwMDNlY2ZkLCBGX1NFVEZMLCBzZmxhZ3MgfCBPX05PTkJMT0NLKSwgMCk7XG4rXG4rXHR6ZXJvX2xlbl9kb19zcGxpY2UoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCAwKTtcbit9XG4rXG4gRklYVFVSRSh0bHNfZXJyKVxuIHtcbiBcdGludCBmZCwgY2ZkO1xuQEAgLTI2MzgsMjggKzI4ODQsODUgQEAgVEVTVF9GKHRsc19lcnIsIGJhZF9yZWMpXG4gXHRFWFBFQ1RfRVEoZXJybm8sIEVBR0FJTik7XG4gfVxuIFxuKy8qIEVuY3J5cHQgYSByZWNvcmQgb24gdGhlIFRYLW9ubHkgc29ja2V0IHBhaXIsIGNvcnJ1cHQgaXRzIGxhc3RcbisgKiBieXRlLCBhbmQgaGFuZCB0aGUgcmVzdWx0IHRvIHRoZSBzb2NrZXQgdW5kZXIgdGVzdC4gY2ZkIGNhcnJpZXMgYVxuKyAqIGJ5dGUgc3RyZWFtLCBzbyBvbmUgcmVjdigpIGNhbiByZXR1cm4gcGFydCBvZiBhIHJlY29yZDogdGFrZSB0aGVcbisgKiBmcmFnbWVudCBsZW5ndGggZnJvbSB0aGUgcmVjb3JkIGhlYWRlciBhbmQgd2FpdCBmb3IgdGhlIHJlbWFpbmRlci5cbisgKi9cbitzdGF0aWMgdm9pZCB0bHNfc2VuZF9iYWRfYXV0aChzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsXG4rXHRcdFx0ICAgICAgaW50IGZkLCBpbnQgY2ZkLCBpbnQgZmQyKVxuK3tcbitcdGNoYXIgYnVmWzEyOF07XG4rXHRpbnQgbGVuO1xuK1xuK1x0bWVtcm5kKGJ1Ziwgc2l6ZW9mKGJ1ZikgLyAyKTtcbitcdEFTU0VSVF9FUShzZW5kKGZkLCBidWYsIHNpemVvZihidWYpIC8gMiwgMCksIHNpemVvZihidWYpIC8gMik7XG4rXG4rXHRBU1NFUlRfRVEocmVjdihjZmQsIGJ1ZiwgVExTX0hEUl9MRU4sIE1TR19XQUlUQUxMKSwgVExTX0hEUl9MRU4pO1xuK1xuK1x0bGVuID0gKCh1bnNpZ25lZCBjaGFyKWJ1ZlszXSBcdTAwM2NcdTAwM2MgOCkgfCAodW5zaWduZWQgY2hhcilidWZbNF07XG4rXHRBU1NFUlRfR1QobGVuLCAwKTtcbitcdEFTU0VSVF9MRShsZW4sIChpbnQpc2l6ZW9mKGJ1ZikgLSBUTFNfSERSX0xFTik7XG4rXG4rXHRBU1NFUlRfRVEocmVjdihjZmQsIGJ1ZiArIFRMU19IRFJfTEVOLCBsZW4sIE1TR19XQUlUQUxMKSwgbGVuKTtcbitcbitcdGJ1ZltUTFNfSERSX0xFTiArIGxlbiAtIDFdKys7XG4rXG4rXHRBU1NFUlRfRVEoc2VuZChmZDIsIGJ1ZiwgVExTX0hEUl9MRU4gKyBsZW4sIDApLCBUTFNfSERSX0xFTiArIGxlbik7XG4rfVxuK1xuIFRFU1RfRih0bHNfZXJyLCBiYWRfYXV0aClcbiB7XG4gXHRjaGFyIGJ1ZlsxMjhdO1xuLVx0aW50IG47XG4gXG4gXHRpZiAoc2VsZi1cdTAwM2Vub3RscylcbiBcdFx0U0tJUChyZXR1cm4sIFwibm8gVExTIHN1cHBvcnRcIik7XG4gXG4tXHRtZW1ybmQoYnVmLCBzaXplb2YoYnVmKSAvIDIpO1xuLVx0RVhQRUNUX0VRKHNlbmQoc2VsZi1cdTAwM2VmZCwgYnVmLCBzaXplb2YoYnVmKSAvIDIsIDApLCBzaXplb2YoYnVmKSAvIDIpO1xuLVx0biA9IHJlY3Yoc2VsZi1cdTAwM2VjZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApO1xuLVx0RVhQRUNUX0dUKG4sIHNpemVvZihidWYpIC8gMik7XG4tXG4tXHRidWZbbiAtIDFdKys7XG4rXHR0bHNfc2VuZF9iYWRfYXV0aChfbWV0YWRhdGEsIHNlbGYtXHUwMDNlZmQsIHNlbGYtXHUwMDNlY2ZkLCBzZWxmLVx1MDAzZWZkMik7XG4gXG4tXHRFWFBFQ1RfRVEoc2VuZChzZWxmLVx1MDAzZWZkMiwgYnVmLCBuLCAwKSwgbik7XG4gXHRFWFBFQ1RfRVEocmVjdihzZWxmLVx1MDAzZWNmZDIsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApLCAtMSk7XG4gXHRFWFBFQ1RfRVEoZXJybm8sIEVCQURNU0cpO1xuIFx0RVhQRUNUX0VRKHJlY3Yoc2VsZi1cdTAwM2VjZmQyLCBidWYsIHNpemVvZihidWYpLCAwKSwgLTEpO1xuIFx0RVhQRUNUX0VRKGVycm5vLCBFQkFETVNHKTtcbiB9XG4gXG4rLyogQSByZWNvcmQgdGhhdCBkaWQgbm90IGF1dGhlbnRpY2F0ZSBicmVha3MgdGhlIGNvbm5lY3Rpb24gZm9yIGV2ZXJ5XG4rICogcmVhZGVyLCBzcGxpY2UgaW5jbHVkZWQuXG4rICpcbisgKiBUaGUgdHdvIGRlY3J5cHQgcGF0aHMgcmVhY2ggdGhhdCByZXN1bHQgZGlmZmVyZW50bHkuIEEgc3luY2hyb25vdXNcbisgKiBkZWNyeXB0IGxlYXZlcyB0aGUgcmVjb3JkIHBhcnNlZCwgc28gdGhlIHNwbGljZSByZS1ydW5zIHRoZSBkZWNyeXB0XG4rICogYW5kIGZhaWxzIG9uIHRoZSByZWNvcmQgaXRzZWxmOyB0aGUgY3R4LVx1MDAzZWFzeW5jX3dhaXQuZXJyIGNoZWNrIGluXG4rICogdGxzX3N3X3NwbGljZV9yZWFkKCkgaXMgbm90IHdoYXQgc3RvcHMgaXQuIE9ubHkgYW4gYXN5bmNocm9ub3VzXG4rICogZGVjcnlwdCwgd2hpY2ggbmVlZHMgYSBUTFMgMS4yIHNvY2tldCBhbmQgYW4gQUVBRCBhZHZlcnRpc2luZ1xuKyAqIENSWVBUT19BTEdfQVNZTkMsIGNvbnN1bWVzIHRoZSByZWNvcmQgYmVmb3JlIHRoZSBmYWlsdXJlIGlzXG4rICogcmVjb3JkZWQsIGxlYXZpbmcgdGhhdCBjaGVjayB0aGUgc29sZSByZWFzb24gdGhlIHNwbGljZSBmYWlscy5cbisgKi9cbitURVNUX0YodGxzX2VyciwgYmFkX2F1dGhfc3BsaWNlKVxuK3tcbitcdGNoYXIgYnVmWzEyOF07XG4rXHRzc2l6ZV90IHJldDtcbitcdGludCBwWzJdO1xuK1xuK1x0aWYgKHNlbGYtXHUwMDNlbm90bHMpXG4rXHRcdFNLSVAocmV0dXJuLCBcIm5vIFRMUyBzdXBwb3J0XCIpO1xuK1xuK1x0dGxzX3NlbmRfYmFkX2F1dGgoX21ldGFkYXRhLCBzZWxmLVx1MDAzZWZkLCBzZWxmLVx1MDAzZWNmZCwgc2VsZi1cdTAwM2VmZDIpO1xuK1xuK1x0RVhQRUNUX0VRKHJlY3Yoc2VsZi1cdTAwM2VjZmQyLCBidWYsIHNpemVvZihidWYpLCAwKSwgLTEpO1xuK1x0RVhQRUNUX0VRKGVycm5vLCBFQkFETVNHKTtcbitcbitcdEFTU0VSVF9HRShwaXBlKHApLCAwKTtcbitcbitcdHJldCA9IHNwbGljZShzZWxmLVx1MDAzZWNmZDIsIE5VTEwsIHBbMV0sIE5VTEwsIHNpemVvZihidWYpLFxuK1x0XHQgICAgIFNQTElDRV9GX05PTkJMT0NLKTtcbitcdEVYUEVDVF9FUShyZXQsIC0xKTtcbitcdGlmIChyZXQgPT0gLTEpXG4rXHRcdEVYUEVDVF9FUShlcnJubywgRUJBRE1TRyk7XG4rXG4rXHRjbG9zZShwWzBdKTtcbitcdGNsb3NlKHBbMV0pO1xuK31cbitcbiBURVNUX0YodGxzX2VyciwgYmFkX2luX2xhcmdlX3JlYWQpXG4ge1xuIFx0Y2hhciB0eHRbM11bNjRdO1xuQEAgLTI5MTUsNyArMzIxOCw2IEBAIHN0YXRpYyBzaXplX3QgcGFyc2VfdGxzX3JlY29yZHMoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLFxuIHtcbiBcdGNvbnN0IF9fdTggKnJlYyA9IHJ4X2J1ZjtcbiBcdHNpemVfdCB0b3RhbF9wbGFpbnRleHRfcnggPSAwO1xuLVx0Y29uc3QgX191OCByZWNfaGVhZGVyX2xlbiA9IDU7XG4gXG4gXHR3aGlsZSAocmVjIFx1MDAzYyByeF9idWYgKyByeF9sZW4pIHtcbiBcdFx0X191MTYgcmVjb3JkX3BheWxvYWRfbGVuO1xuQEAgLTI5MzUsNyArMzIzNyw3IEBAIHN0YXRpYyBzaXplX3QgcGFyc2VfdGxzX3JlY29yZHMoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLFxuIFxuIFx0XHQvKiBQbGFpbnRleHQgbXVzdCBub3QgZXhjZWVkIHRoZSBzcGVjaWZpZWQgbGltaXQgKi9cbiBcdFx0QVNTRVJUX0xFKHBsYWludGV4dF9sZW4sIG1heF9wYXlsb2FkX2xlbik7XG4tXHRcdHJlYyArPSByZWNfaGVhZGVyX2xlbiArIHJlY29yZF9wYXlsb2FkX2xlbjtcbitcdFx0cmVjICs9IFRMU19IRFJfTEVOICsgcmVjb3JkX3BheWxvYWRfbGVuO1xuIFx0fVxuIFxuIFx0cmV0dXJuIHRvdGFsX3BsYWludGV4dF9yeDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjAyOjM1LjA4NzI5NDc0NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0NjY2MDkyMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUTFMgRW1wdHkgRGF0YSBSZWNvcmQgSGFuZGxpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBUTFMgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSBpbiBgbmV0L3Rscy90bHNfc3cuY2AuIFRoaXMgaXMgZm9jdXNlZCBvbiBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIHRob3NlIHBlc2t5IHplcm8tbGVuZ3RoIGBhcHBsaWNhdGlvbl9kYXRhYCByZWNvcmRzLCB0aGUgb25lcyB3aXRoIG5vIGFjdHVhbCBwYXlsb2FkLCBpbiBib3RoIFRMUyAxLjIgYW5kIDEuMy5cblxuVGhlIGtleSBhZGRpdGlvbnMgYXJlIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IHRoZXkndmUgYWRkZWQgYHRsc19yeF9lbXB0eV9kYXRhX3JlY2AgdG8gY2hlY2sgZm9yIHRoZXNlIGVtcHR5IHJlY29yZHMuIEFuZCwgY3JpdGljYWxseSwgdGhlIGNvZGUgaW4gYHRsc19zd19yZWN2bXNnYCwgYHRsc19zd19zcGxpY2VfcmVhZGAsIGFuZCBgdGxzX3N3X3JlYWRfc29ja2AgaGFzIGJlZW4gbW9kaWZpZWQgdG8gaGFuZGxlIHRoZW0gY29ycmVjdGx5LiBJdCBsb29rcyBsaWtlIHRoZXkndmUgaGFkIHRvIGFkZCBhIGNoZWNrIGZvciBgY3R4LVx1MDAzZWFzeW5jX3dhaXQuZXJyYCBpbiBgdGxzX3N3X3NwbGljZV9yZWFkYCB0byBhY2NvdW50IGZvciBwb3RlbnRpYWwgY3J5cHRvIGZhaWx1cmVzLCB3aGljaCBtYWtlcyBzZW5zZSwgYXMgYW4gZW1wdHkgcmVjb3JkIGNvdWxkIGJlIHVzZWQgdG8gZXhwbG9pdCBhbiBlcnJvci4gUGx1cywgYHRsc19yeF9pbnRyX2Vycm5vYCBoYXMgYmVlbiB0aHJvd24gaW4gdGhlcmUgZm9yIHNpZ25hbCBpbnRlcnJ1cHRpb24gaGFuZGxpbmcuIFRoZSBjaGFuZ2VzIHRvIGB0bHNfc3dfcmVhZF9zb2NrYCBsb29rIGxpa2UgdGhleSdyZSBib3VuZGluZyB0aGUgdGltZSBjb25zZWN1dGl2ZSBlbXB0eSByZWNvcmRzIGNhbiBob2xkIHRoZSBzb2NrZXQgbG9jaywgd2hpY2ggaXMgYSBnb29kIG1vdmUgdG8gcHJldmVudCBwb3RlbnRpYWwgZGVuaWFsLW9mLXNlcnZpY2Ugb3IgbG9jayBjb250ZW50aW9uLlxuXG5UaGlzIGZlZWxzIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgaGVhcnQgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2ssIHRoZSBUTFMgaW1wbGVtZW50YXRpb24gaXRzZWxmLiBGcm9tIGEgc2VjdXJpdHkgcGVyc3BlY3RpdmUsIHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBuZWVkcyB0aG9yb3VnaCBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIGhlcmUgd2lsbCBiZSB0byBleGFtaW5lIHRoZSBmdW5jdGlvbnMgYWZmZWN0ZWQuIFNvOlxuXG4qICAgYHRsc19zd19yZWN2bXNnYFxuKiAgIGB0bHNfc3dfc3BsaWNlX3JlYWRgXG4qICAgYHRsc19zd19yZWFkX3NvY2tgXG5cbk5vdywgbGV0J3Mgc2VlIGhvdyB0aGVzZSBhcmUgKnVzZWQqLiBBcmUgdGhlc2Ugc3RhdGljIGZ1bmN0aW9ucywgb3IgYXJlIHRoZXkgZXhwb3J0ZWQgb3IgdXNlZCBhcyBjYWxsYmFja3M/IEEgcXVpY2sgY2hlY2sgc2hvd3MgdGhhdCBlYWNoIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCBpbiBgdGxzX3N3LmNgIC0gYSBnb29kIHN0YXJ0LCBidXQgSSdsbCBuZWVkIHRvIGxvb2sgYXQgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCBpbiBvdGhlciBmaWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc4NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjAyOjQ0LjU1MzkwNjYyNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTA1NjIwMjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRsc19zd19yZWN2bXNnfHRsc19zd19zcGxpY2VfcmVhZHx0bHNfc3dfcmVhZF9zb2NrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90bHMvdGxzLmg9MTYyPXZvaWQgdGxzX3N3X2ZyZWVfY3R4X3J4KHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCk7XFxubmV0L3Rscy90bHMuaDoxNjM6aW50IHRsc19zd19yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbm5ldC90bHMvdGxzLmgtMTY0LVxcdFxcdCAgIGludCBmbGFncyk7XFxubmV0L3Rscy90bHMuaD0xNjU9Ym9vbCB0bHNfc3dfc29ja19pc19yZWFkYWJsZShzdHJ1Y3Qgc29jayAqc2spO1xcbm5ldC90bHMvdGxzLmg6MTY2OnNzaXplX3QgdGxzX3N3X3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvZmZfdCAqcHBvcyxcXG5uZXQvdGxzL3Rscy5oLTE2Ny1cXHRcXHRcXHQgICBzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxcbm5ldC90bHMvdGxzLmgtMTY4LVxcdFxcdFxcdCAgIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncyk7XFxubmV0L3Rscy90bHMuaDoxNjk6aW50IHRsc19zd19yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcXG5uZXQvdGxzL3Rscy5oLTE3MC1cXHRcXHQgICAgIHNrX3JlYWRfYWN0b3JfdCByZWFkX2FjdG9yKTtcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYz05NDA9c3RhdGljIHZvaWQgYnVpbGRfcHJvdG9fb3BzKHN0cnVjdCBwcm90b19vcHMgb3BzW1RMU19OVU1fQ09ORklHXVtUTFNfTlVNX0NPTkZJR10sXFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtOTQ4LVxcdG9wc1tUTFNfQkFTRV1bVExTX1NXICBdID0gb3BzW1RMU19CQVNFXVtUTFNfQkFTRV07XFxubmV0L3Rscy90bHNfbWFpbi5jOjk0OTpcXHRvcHNbVExTX0JBU0VdW1RMU19TVyAgXS5zcGxpY2VfcmVhZFxcdD0gdGxzX3N3X3NwbGljZV9yZWFkO1xcbm5ldC90bHMvdGxzX21haW4uYy05NTAtXFx0b3BzW1RMU19CQVNFXVtUTFNfU1cgIF0ucG9sbFxcdFxcdD0gdGxzX3NrX3BvbGw7XFxubmV0L3Rscy90bHNfbWFpbi5jOjk1MTpcXHRvcHNbVExTX0JBU0VdW1RMU19TVyAgXS5yZWFkX3NvY2tcXHQ9IHRsc19zd19yZWFkX3NvY2s7XFxubmV0L3Rscy90bHNfbWFpbi5jLTk1Mi1cXG5uZXQvdGxzL3Rsc19tYWluLmMtOTUzLVxcdG9wc1tUTFNfU1cgIF1bVExTX1NXICBdID0gb3BzW1RMU19TVyAgXVtUTFNfQkFTRV07XFxubmV0L3Rscy90bHNfbWFpbi5jOjk1NDpcXHRvcHNbVExTX1NXICBdW1RMU19TVyAgXS5zcGxpY2VfcmVhZFxcdD0gdGxzX3N3X3NwbGljZV9yZWFkO1xcbm5ldC90bHMvdGxzX21haW4uYy05NTUtXFx0b3BzW1RMU19TVyAgXVtUTFNfU1cgIF0ucG9sbFxcdFxcdD0gdGxzX3NrX3BvbGw7XFxubmV0L3Rscy90bHNfbWFpbi5jOjk1NjpcXHRvcHNbVExTX1NXICBdW1RMU19TVyAgXS5yZWFkX3NvY2tcXHQ9IHRsc19zd19yZWFkX3NvY2s7XFxubmV0L3Rscy90bHNfbWFpbi5jLTk1Ny1cXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYz0xMDAyPXN0YXRpYyB2b2lkIGJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gcHJvdFtUTFNfTlVNX0NPTkZJR11bVExTX05VTV9DT05GSUddLFxcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jLTEwMTUtXFx0cHJvdFtUTFNfQkFTRV1bVExTX1NXXSA9IHByb3RbVExTX0JBU0VdW1RMU19CQVNFXTtcXG5uZXQvdGxzL3Rsc19tYWluLmM6MTAxNjpcXHRwcm90W1RMU19CQVNFXVtUTFNfU1ddLnJlY3Ztc2dcXHRcXHQgID0gdGxzX3N3X3JlY3Ztc2c7XFxubmV0L3Rscy90bHNfbWFpbi5jLTEwMTctXFx0cHJvdFtUTFNfQkFTRV1bVExTX1NXXS5zb2NrX2lzX3JlYWRhYmxlICAgPSB0bHNfc3dfc29ja19pc19yZWFkYWJsZTtcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYy0xMDIwLVxcdHByb3RbVExTX1NXXVtUTFNfU1ddID0gcHJvdFtUTFNfU1ddW1RMU19CQVNFXTtcXG5uZXQvdGxzL3Rsc19tYWluLmM6MTAyMTpcXHRwcm90W1RMU19TV11bVExTX1NXXS5yZWN2bXNnXFx0XFx0PSB0bHNfc3dfcmVjdm1zZztcXG5uZXQvdGxzL3Rsc19tYWluLmMtMTAyMi1cXHRwcm90W1RMU19TV11bVExTX1NXXS5zb2NrX2lzX3JlYWRhYmxlICAgPSB0bHNfc3dfc29ja19pc19yZWFkYWJsZTtcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmM9MTgwND1zdGF0aWMgaW50IHRsc19yeF9pbnRyX2Vycm5vKGxvbmcgdGltZW8pXFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jLTE4MDgtXFxubmV0L3Rscy90bHNfc3cuYzoxODA5OmludCB0bHNfc3dfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L3Rscy90bHNfc3cuYy0xODEwLVxcdFxcdCAgIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmMtMjAyNS1cXG5uZXQvdGxzL3Rsc19zdy5jOjIwMjY6c3NpemVfdCB0bHNfc3dfc3BsaWNlX3JlYWQoc3RydWN0IHNvY2tldCAqc29jaywgIGxvZmZfdCAqcHBvcyxcXG5uZXQvdGxzL3Rsc19zdy5jLTIwMjctXFx0XFx0XFx0ICAgc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmMtMjEyOS1cXG5uZXQvdGxzL3Rsc19zdy5jOjIxMzA6aW50IHRsc19zd19yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcXG5uZXQvdGxzL3Rsc19zdy5jLTIxMzEtXFx0XFx0ICAgICBza19yZWFkX2FjdG9yX3QgcmVhZF9hY3RvcilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYz0yOTE0PVRFU1RfRih0bHNfZXJyLCBiYWRfYXV0aClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYy0yOTM0LSAqIGFuZCBmYWlscyBvbiB0aGUgcmVjb3JkIGl0c2VsZjsgdGhlIGN0eC1cXHUwMDNlYXN5bmNfd2FpdC5lcnIgY2hlY2sgaW5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmM6MjkzNTogKiB0bHNfc3dfc3BsaWNlX3JlYWQoKSBpcyBub3Qgd2hhdCBzdG9wcyBpdC4gT25seSBhbiBhc3luY2hyb25vdXNcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmMtMjkzNi0gKiBkZWNyeXB0LCB3aGljaCBuZWVkcyBhIFRMUyAxLjIgc29ja2V0IGFuZCBhbiBBRUFEIGFkdmVydGlzaW5nXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjAyOjQ4LjQ1OTUzNTc3M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3OTgyNjU3MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucyBhbmQgdGhlaXIgc2lnbmlmaWNhbmNlLCBhcyB0aG91Z2ggSSdtIHByb2Nlc3NpbmcgdGhlIGluZm9ybWF0aW9uOlxuXG4qKktleSBUTFMgU29ja2V0IEZ1bmN0aW9uIEZvY3VzKipcblxuQWxyaWdodCwgbG9va2luZyBhdCB0aGlzIGNvZGUsIGl0J3MgY2xlYXIgdGhhdCBgdGxzX3N3X3JlY3Ztc2dgLCBgdGxzX3N3X3NwbGljZV9yZWFkYCwgYW5kIGB0bHNfc3dfcmVhZF9zb2NrYCBhcmUgdGhlIGJyZWFkIGFuZCBidXR0ZXIgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGZvciBUTFMgc29ja2V0IEkvTy4gVGhleSdyZSBkZWZpbml0ZWx5IHRoZSBrZXkgc3ltYm9scyB0byB1bmRlcnN0YW5kIGhvdyBkYXRhIG1vdmVzIHdpdGhpbiB0aGUgVExTIGxheWVyLiBUaGUgZmFjdCB0aGF0IHRoZXkncmUgdGllZCB0byB0aGUgYHByb3RvYCBhbmQgYHByb3RvX29wc2Agc3RydWN0dXJlcyBpcyBjcnVjaWFsLiBJdCBtZWFucyB0aGVzZSBmdW5jdGlvbnMgYXJlIGRpcmVjdGx5IGludGVncmF0ZWQgaW50byB0aGUgc3RhbmRhcmQgc29ja2V0IG9wZXJhdGlvbnMg4oCTIHRoZSBgcmVjdm1zZ2AsIGBzcGxpY2VgLCB0aGUgZ2VuZXJhbCByZWFkIHBhdGhzLiBJdCBtZWFucyB0aGV5IHdpbGwgYmUgdHJpZ2dlcmVkIHdoZW4gc3RhbmRhcmQgc29ja2V0IGNhbGxzIGFyZSBtYWRlLCB3aGljaCBpcyBleGFjdGx5IHdoZXJlIEknZCBleHBlY3QgdG8gc2VlIHRoZSBUTFMgaW50ZXJhY3Rpb24uIE5vdyBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gZmxhZ3MgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZS4gV2hhdCBhcmUgdGhlIGJ1aWxkIHJlcXVpcmVtZW50cyB0byBicmluZyB0aGlzIFRMUyBmdW5jdGlvbmFsaXR5IHRvIGxpZmU/IFdoYXQgY29uZmlndXJhdGlvbnMgYXJlIG5lZWRlZCBmb3IgdGhlIHN5c3RlbSB0byBzdXBwb3J0IHRoaXMgZnVuY3Rpb25hbGl0eT9cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5ODYsIk91dHB1dFRva2VucyI6MTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjowMjo1Mi4yNTc4MDUyNDRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc4NzAzNDM4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVExTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtL21tL0tjb25maWc9ODczPWNvbmZpZyBIQVJERU5fQlJBTkNIX0hJU1RPUllcXG4tLVxcbmFyY2gvYXJtL21tL0tjb25maWctODgyLVxcbmFyY2gvYXJtL21tL0tjb25maWc6ODgzOmNvbmZpZyBUTFNfUkVHX0VNVUxcXG5hcmNoL2FybS9tbS9LY29uZmlnLTg4NC1cXHRib29sXFxuLS1cXG5uZXQvdGxzL0tjb25maWctNC0jXFxubmV0L3Rscy9LY29uZmlnOjU6Y29uZmlnIFRMU1xcbm5ldC90bHMvS2NvbmZpZy02LVxcdHRyaXN0YXRlIFxcXCJUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC90bHMvS2NvbmZpZy0xOC1cXG5uZXQvdGxzL0tjb25maWc6MTk6Y29uZmlnIFRMU19ERVZJQ0VcXG5uZXQvdGxzL0tjb25maWctMjAtXFx0Ym9vbCBcXFwiVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IEhXIG9mZmxvYWRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjAyOjU1LjA0NDg1Mjc1OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NjQwNTgyODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVExTIENvbmZpZ3VyYXRpb24gQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIHRoZSBjb25maWd1cmF0aW9uIGluIHF1ZXN0aW9uIGlzIGBUTFNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgdGhlICpvbmx5KiBuZWNlc3NhcnkgY29uZmlndXJhdGlvbi4gTGV0J3Mgc2VlLi4uIHRoZSBwYXRjaCBpcyBtb2RpZnlpbmcgYG5ldC90bHMvdGxzX3N3LmNgLiBBaCwgcmlnaHQsIHRoYXQncyBmaXJtbHkgd2l0aGluIHRoZSBUTFMgc3Vic3lzdGVtLiBHaXZlbiB0aGF0IGNvbnRleHQsIGBDT05GSUdfVExTYCBhbG9uZSAqc2hvdWxkKiBiZSBzdWZmaWNpZW50LiBIb3dldmVyLCBJIGFsd2F5cyBtYWtlIHN1cmUuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMgdGhhdCBhcmVuJ3QgaW1tZWRpYXRlbHkgb2J2aW91cy4gSXQncyBhIGdvb2QgcHJhY3RpY2UsIGV2ZW4gd2hlbiBpdCBzZWVtcyBzdHJhaWdodGZvcndhcmQsIHRvIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQ3OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjAyOjU4LjUwODkxNTE5OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdGxzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgVExTIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdGNvbmZpZyBUTFNcXG4gICA2OlxcdFxcdHRyaXN0YXRlIFxcXCJUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgc3VwcG9ydFxcXCJcXG4gICA3OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgIDg6XFx0XFx0c2VsZWN0IENSWVBUT1xcbiAgIDk6XFx0XFx0c2VsZWN0IENSWVBUT19BRVNcXG4gIDEwOlxcdFxcdHNlbGVjdCBDUllQVE9fR0NNXFxuICAxMTpcXHRcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxuICAxMjpcXHRcXHRkZWZhdWx0IG5cXG4gIDEzOlxcdFxcdGhlbHBcXG4gIDE0OlxcdFxcdEVuYWJsZSBrZXJuZWwgc3VwcG9ydCBmb3IgVExTIHByb3RvY29sLiBUaGlzIGFsbG93cyBzeW1tZXRyaWNcXG4gIDE1OlxcdFxcdGVuY3J5cHRpb24gaGFuZGxpbmcgb2YgdGhlIFRMUyBwcm90b2NvbCB0byBiZSBkb25lIGluLWtlcm5lbC5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0XFx0SWYgdW5zdXJlLCBzYXkgTi5cXG4gIDE4OlxcdFxcbiAgMTk6XFx0Y29uZmlnIFRMU19ERVZJQ0VcXG4gIDIwOlxcdFxcdGJvb2wgXFxcIlRyYW5zcG9ydCBMYXllciBTZWN1cml0eSBIVyBvZmZsb2FkXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjowMjo1OC41MDkwMjMzNjhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDM5NzM2NDE5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGlzIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIHRoZSBkZXBlbmRlbmN5OiBgQ09ORklHX1RMU2AgcmVsaWVzIG9uIGBJTkVUYC4gIGBJTkVUYCBpcyBwcmFjdGljYWxseSBhbHdheXMgZW5hYmxlZCwgd2hpY2ggbWVhbnMsIGVzc2VudGlhbGx5LCBJIGp1c3QgbmVlZCB0byBleHBsaWNpdGx5IGVuYWJsZSBgVExTYC5cblxuVGhlIHBhdGNoIGFsc28gYnJpbmdzIHVwIGBUTFMgMS4yYCBhbmQgYFRMUyAxLjNgLiAgQnV0LCBhcyBmYXIgYXMgSSBjYW4gdGVsbCwgdGhlcmUgYXJlbid0IGFueSBzZXBhcmF0ZSBjb25maWcgb3B0aW9ucyBzcGVjaWZpY2FsbHkgZm9yIHRob3NlOyBpdCdzIGFsbCBoYW5kbGVkIHVuZGVyIHRoZSB1bWJyZWxsYSBvZiBgQ09ORklHX1RMU2AuIEdvb2QgdG8ga25vdy5cblxuTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjb2RlIGNoYW5nZXMuIEkgc2VlIHRoZXNlIG1vZGlmaWVkIGZ1bmN0aW9uczogYHRsc19yeF9lbXB0eV9kYXRhX3JlY2AgKHN0YXRpYyksIGB0bHNfcnhfaW50cl9lcnJub2AgKHN0YXRpYyksIGB0bHNfc3dfcmVjdm1zZ2AsIGB0bHNfc3dfc3BsaWNlX3JlYWRgLCBhbmQgYHRsc19zd19yZWFkX3NvY2tgLiBUaGUgc3RhdGljIG9uZXMsIEkgY2FuIGdlbmVyYWxseSBpZ25vcmUgZm9yIG5vdy5cblxuUmlnaHQsIHNvIHRoZSBpbXBvcnRhbnQgc3ltYm9scyBoZXJlIGFyZSBgdGxzX3N3X3JlY3Ztc2dgLCBgdGxzX3N3X3NwbGljZV9yZWFkYCwgYW5kIGB0bHNfc3dfcmVhZF9zb2NrYC5cblxuQWxyaWdodCwgaXQncyBhYm91dCBoYW5kbGluZyBlbXB0eSBkYXRhIHJlY29yZHMgaW4gVExTIDEuMiBhbmQgMS4zLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gaG93IFRMUyByZWNlaXZlcyBkYXRhLiBJdCdzIGluIHRoZSByZWNlaXZlIHBhdGgsIGFuZCB0aGVzZSBzb2NrZXQgb3BlcmF0aW9ucywgbGlrZSBgcmVjdm1zZ2AsIGFyZSBkaXJlY3RseSBleHBvc2VkIHRvIHVzZXJzcGFjZS5cblxuVGhhdCB0ZWxscyBtZSBJIG5lZWQgdG8gbWFyayBgV29ydGhGdXp6aW5nYCBhcyBgdHJ1ZWAuICBUaGlzIGlzIGEgY3JpdGljYWwgYXJlYSBmb3IgZnV6emluZy5cblxuTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzIGFyZSBjb25maWd1cmVkIGNvcnJlY3RseTpcblxuKiAgIGBFbmFibGVDb25maWdzYDogYFtcIlRMU1wiXWAg4oCTIENoZWNrLlxuKiAgIGBGb2N1c1N5bWJvbHNgOiBgW1widGxzX3N3X3JlY3Ztc2dcIiwgXCJ0bHNfc3dfc3BsaWNlX3JlYWRcIiwgXCJ0bHNfc3dfcmVhZF9zb2NrXCJdYCDigJMgQ2hlY2suXG4qICAgYFJlYXNvbmluZ2A6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUTFMgc29mdHdhcmUgcmVjZWl2ZSBwYXRoIHRvIHByb3Blcmx5IGhhbmRsZSB6ZXJvLWxlbmd0aCBhcHBsaWNhdGlvbl9kYXRhIHJlY29yZHMgKGVtcHR5IGRhdGEgcmVjb3JkcykgaW4gVExTIDEuMiBhbmQgVExTIDEuMy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgYHJlY3Ztc2dgLCBgc3BsaWNlX3JlYWRgLCBhbmQgYHJlYWRfc29ja2Agb3BlcmF0aW9ucyBvbiBUTFMgc29ja2V0cywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZS5cIiDigJMgUGVyZmVjdCwgY292ZXJzIHRoZSBjb3JlIGlzc3VlLlxuKiAgIGBXb3J0aEZ1enppbmdgOiBgdHJ1ZWAg4oCTIFRoYXQncyB0aGUgY29ycmVjdCBldmFsdWF0aW9uLlxuXG5Mb29rcyBnb29kLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5MzMsIk91dHB1dFRva2VucyI6MTI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MDM6MDguOTA2MzkwNjA1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzODg5Njg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUTFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0bHNfc3dfcmVjdm1zZ1wiLFxuICAgIFwidGxzX3N3X3NwbGljZV9yZWFkXCIsXG4gICAgXCJ0bHNfc3dfcmVhZF9zb2NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRMUyBzb2Z0d2FyZSByZWNlaXZlIHBhdGggdG8gcHJvcGVybHkgaGFuZGxlIHplcm8tbGVuZ3RoIGFwcGxpY2F0aW9uX2RhdGEgcmVjb3JkcyAoZW1wdHkgZGF0YSByZWNvcmRzKSBpbiBUTFMgMS4yIGFuZCBUTFMgMS4zLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBgcmVjdm1zZ2AsIGBzcGxpY2VfcmVhZGAsIGFuZCBgcmVhZF9zb2NrYCBvcGVyYXRpb25zIG9uIFRMUyBzb2NrZXRzLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRMU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRsc19zd19yZWN2bXNnXCIsXG4gICAgXCJ0bHNfc3dfc3BsaWNlX3JlYWRcIixcbiAgICBcInRsc19zd19yZWFkX3NvY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVExTIHNvZnR3YXJlIHJlY2VpdmUgcGF0aCB0byBwcm9wZXJseSBoYW5kbGUgemVyby1sZW5ndGggYXBwbGljYXRpb25fZGF0YSByZWNvcmRzIChlbXB0eSBkYXRhIHJlY29yZHMpIGluIFRMUyAxLjIgYW5kIFRMUyAxLjMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGByZWN2bXNnYCwgYHNwbGljZV9yZWFkYCwgYW5kIGByZWFkX3NvY2tgIG9wZXJhdGlvbnMgb24gVExTIHNvY2tldHMsIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwfsfp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-27 11:24:43 +0000 UTC FinishedAt: 2026-07-27 12:03:10 +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": "53658c6f3682967a5e76ed4bc7462c4bdcddaec3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TLS" ], "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": "53658c6f3682967a5e76ed4bc7462c4bdcddaec3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TLS" ], "series_id": "63214efa-4d82-4af7-9b6f-1d69148280a3" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tls_sw_recvmsg", "tls_sw_splice_read", "tls_sw_read_sock" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RMUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Rsc19zd19yZWN2bXNnJiMzNDssCiAgICAmIzM0O3Rsc19zd19zcGxpY2VfcmVhZCYjMzQ7LAogICAgJiMzNDt0bHNfc3dfcmVhZF9zb2NrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUTFMgc29mdHdhcmUgcmVjZWl2ZSBwYXRoIHRvIHByb3Blcmx5IGhhbmRsZSB6ZXJvLWxlbmd0aCBhcHBsaWNhdGlvbl9kYXRhIHJlY29yZHMgKGVtcHR5IGRhdGEgcmVjb3JkcykgaW4gVExTIDEuMiBhbmQgVExTIDEuMy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgYHJlY3Ztc2dgLCBgc3BsaWNlX3JlYWRgLCBhbmQgYHJlYWRfc29ja2Agb3BlcmF0aW9ucyBvbiBUTFMgc29ja2V0cywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjowMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDg5ZmMyMjMwYjVjZDI0MjgwOTllM2NjNWUzYmIzOWVkZWFlN2JiMDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyNyAxMjowMjozMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdGxzL3Rsc19zdy5jIGIvbmV0L3Rscy90bHNfc3cuY1xuaW5kZXggZDRhZmM5MGZkNzk2NmUuLjBlNzZiMzFiMTI5MTRiIDEwMDY0NFxuLS0tIGEvbmV0L3Rscy90bHNfc3cuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Rscy90bHNfc3cuY1xuQEAgLTM3LDYgJiM0MzszNyw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnVnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1la2VlcGluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwbGljZS5oXHUwMDNlXG5AQCAtMTc4Nyw2ICYjNDM7MTc4OCwyNCBAQCBzdGF0aWMgdm9pZCB0bHNfcnhfcmVhZGVyX3VubG9jayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0bHNfc3dfY29udGV4dF9yeCAqY3R4KVxuIFx0cmVsZWFzZV9zb2NrKHNrKTtcbiB9XG4gXG4mIzQzOy8qIFRMUyAxLjIgYW5kIFRMUyAxLjMgYm90aCBwZXJtaXQgYSB6ZXJvLWxlbmd0aCBhcHBsaWNhdGlvbl9kYXRhXG4mIzQzOyAqIHJlY29yZCBhcyBhIHRyYWZmaWMtYW5hbHlzaXMgY291bnRlcm1lYXN1cmUgKFJGQyA1MjQ2LCBTZWN0aW9uXG4mIzQzOyAqIDYuMi4xOyBSRkMgODQ0NiwgU2VjdGlvbiA1LjEpLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGJvb2wgdGxzX3J4X2VtcHR5X2RhdGFfcmVjKGludCBsZW4sIHVuc2lnbmVkIGNoYXIgY29udHJvbClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAhbGVuIFx1MDAyNlx1MDAyNiBjb250cm9sID09IFRMU19SRUNPUkRfVFlQRV9EQVRBO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBzb2NrX2ludHJfZXJybm8oKSBtYXBzIHRoZSB6ZXJvIHRpbWVvIG9mIGEgcmVhZGVyIHRoYXQgY2Fubm90IHdhaXRcbiYjNDM7ICogdG8gLUVJTlRSLCBidXQgc3VjaCBhIHJlYWRlciBoYXMgbm8gYmxvY2tpbmcgdG8gaW50ZXJydXB0LiBUaGUgcmVzdFxuJiM0MzsgKiBvZiB0aGUgcmVjZWl2ZSBzaWRlIHJlcG9ydHMgdGhhdCBjYXNlIGFzIC1FQUdBSU4uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHRsc19yeF9pbnRyX2Vycm5vKGxvbmcgdGltZW8pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gdGltZW8gPyBzb2NrX2ludHJfZXJybm8odGltZW8pIDogLUVBR0FJTjtcbiYjNDM7fVxuJiM0MztcbiBpbnQgdGxzX3N3X3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLFxuIFx0XHQgICBzdHJ1Y3QgbXNnaGRyICptc2csXG4gXHRcdCAgIHNpemVfdCBsZW4sXG5AQCAtMTg1OCw5ICYjNDM7MTg3NywxMiBAQCBpbnQgdGxzX3N3X3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLFxuIFx0XHQgICAgdGxtLVx1MDAzZWNvbnRyb2wgPT0gVExTX1JFQ09SRF9UWVBFX0RBVEEpXG4gXHRcdFx0ZGFyZy56YyA9IHRydWU7XG4gXG4tXHRcdC8qIERvIG5vdCB1c2UgYXN5bmMgbW9kZSBpZiByZWNvcmQgaXMgbm9uLWRhdGEgKi9cbiYjNDM7XHRcdC8qIERvIG5vdCB1c2UgYXN5bmMgbW9kZSBpZiByZWNvcmQgaXMgbm9uLWRhdGEsIG9yIGlmIGl0XG4mIzQzO1x0XHQgKiBpcyBlbXB0eTogdGhlIHJlY2VpdmUgbG9vcCBmcmVlcyBhbiBlbXB0eSByZWNvcmQmIzM5O3Mgc2tiLFxuJiM0MztcdFx0ICogc28gaXRzIGRlY3J5cHRpb24gbXVzdCBoYXZlIGNvbXBsZXRlZC5cbiYjNDM7XHRcdCAqL1xuIFx0XHRpZiAodGxtLVx1MDAzZWNvbnRyb2wgPT0gVExTX1JFQ09SRF9UWVBFX0RBVEEpXG4tXHRcdFx0ZGFyZy5hc3luYyA9IGN0eC1cdTAwM2Vhc3luY19jYXBhYmxlO1xuJiM0MztcdFx0XHRkYXJnLmFzeW5jID0gY3R4LVx1MDAzZWFzeW5jX2NhcGFibGUgXHUwMDI2XHUwMDI2IHRvX2RlY3J5cHQ7XG4gXHRcdGVsc2VcbiBcdFx0XHRkYXJnLmFzeW5jID0gZmFsc2U7XG4gXG5AQCAtMTg5Niw2ICYjNDM7MTkxOCwyNyBAQCBpbnQgdGxzX3N3X3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRjaHVuayA9IHJ4bS1cdTAwM2VmdWxsX2xlbjtcbiBcdFx0dGxzX3J4X3JlY19kb25lKGN0eCk7XG4gXG4mIzQzO1x0XHQvKiBBbiBlbXB0eSByZWNvcmQgYWR2YW5jZXMgbmVpdGhlciBsb29wIGJvdW5kLCBzbyBhIGZsb29kXG4mIzQzO1x0XHQgKiBvZiB0aGVtIGNhbiBiZSBpbnRlcnJ1cHRlZCBvbmx5IGhlcmUuIE9uIHRoZSB6ZXJvLWNvcHlcbiYjNDM7XHRcdCAqIHBhdGggZGFyZy5za2IgaXMgdGhlIHN0cnBhcnNlciBhbmNob3IsIGFscmVhZHkgcmVsZWFzZWRcbiYjNDM7XHRcdCAqIGJ5IHRsc19yeF9yZWNfZG9uZSgpLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAodGxzX3J4X2VtcHR5X2RhdGFfcmVjKGNodW5rLCBjb250cm9sKSkge1xuJiM0MztcdFx0XHRsb25nIHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoIWRhcmcuemMpXG4mIzQzO1x0XHRcdFx0Y29uc3VtZV9za2IoZGFyZy5za2IpO1xuJiM0MztcbiYjNDM7XHRcdFx0LyogQW4gZW1wdHkgcmVjb3JkIHN0aWxsIG1hcmtzIGEgYm91bmRhcnkuICovXG4mIzQzO1x0XHRcdG1zZy1cdTAwM2Vtc2dfZmxhZ3MgfD0gTVNHX0VPUjtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xuJiM0MztcdFx0XHRcdGVyciA9IHRsc19yeF9pbnRyX2Vycm5vKHRpbWVvKTtcbiYjNDM7XHRcdFx0XHRnb3RvIHJlY3ZfZW5kO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0aWYgKCFkYXJnLnpjKSB7XG4gXHRcdFx0Ym9vbCBwYXJ0aWFsbHlfY29uc3VtZWQgPSBjaHVuayBcdTAwM2UgbGVuO1xuIFx0XHRcdHN0cnVjdCBza19idWZmICpza2IgPSBkYXJnLnNrYjtcbkBAIC0xOTkwLDIxICYjNDM7MjAzMywzMSBAQCBzc2l6ZV90IHRsc19zd19zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCAgbG9mZl90ICpwcG9zLFxuIFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cdTAwM2VzaztcbiBcdHN0cnVjdCB0bHNfbXNnICp0bG07XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiM0MztcdGJvb2wgcmVsZWFzZWQgPSB0cnVlO1xuIFx0c3NpemVfdCBjb3BpZWQgPSAwO1xuJiM0MztcdGJvb2wgbm9uYmxvY2s7XG4gXHRpbnQgY2h1bms7XG4gXHRpbnQgZXJyO1xuIFxuLVx0ZXJyID0gdGxzX3J4X3JlYWRlcl9sb2NrKHNrLCBjdHgsIGZsYWdzIFx1MDAyNiBTUExJQ0VfRl9OT05CTE9DSyk7XG4mIzQzO1x0bm9uYmxvY2sgPSAoZmxhZ3MgXHUwMDI2IFNQTElDRV9GX05PTkJMT0NLKSB8fFxuJiM0MztcdFx0ICAgKHNvY2stXHUwMDNlZmlsZS1cdTAwM2VmX2ZsYWdzIFx1MDAyNiBPX05PTkJMT0NLKTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gdGxzX3J4X3JlYWRlcl9sb2NrKHNrLCBjdHgsIG5vbmJsb2NrKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdHJldHVybiBlcnI7XG4gXG4mIzQzO1x0LyogSWYgY3J5cHRvIGZhaWxlZCB0aGUgY29ubmVjdGlvbiBpcyBicm9rZW4gKi9cbiYjNDM7XHRlcnIgPSBjdHgtXHUwMDNlYXN5bmNfd2FpdC5lcnI7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gc3BsaWNlX3JlYWRfZW5kO1xuJiM0MztcbiYjNDM7cmV0cnk6XG4gXHRpZiAoIXNrYl9xdWV1ZV9lbXB0eShcdTAwMjZjdHgtXHUwMDNlcnhfbGlzdCkpIHtcbiBcdFx0c2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZjdHgtXHUwMDNlcnhfbGlzdCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRzdHJ1Y3QgdGxzX2RlY3J5cHRfYXJnIGRhcmc7XG4gXG4tXHRcdGVyciA9IHRsc19yeF9yZWNfd2FpdChzaywgZmxhZ3MgXHUwMDI2IFNQTElDRV9GX05PTkJMT0NLLFxuLVx0XHRcdFx0ICAgICAgdHJ1ZSwgZmFsc2UpO1xuJiM0MztcdFx0ZXJyID0gdGxzX3J4X3JlY193YWl0KHNrLCBub25ibG9jaywgcmVsZWFzZWQsIGZhbHNlKTtcbiBcdFx0aWYgKGVyciBcdTAwM2M9IDApXG4gXHRcdFx0Z290byBzcGxpY2VfcmVhZF9lbmQ7XG4gXG5AQCAtMjAxNiw2ICYjNDM7MjA2OSwxMSBAQCBzc2l6ZV90IHRsc19zd19zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCAgbG9mZl90ICpwcG9zLFxuIFxuIFx0XHR0bHNfcnhfcmVjX2RvbmUoY3R4KTtcbiBcdFx0c2tiID0gZGFyZy5za2I7XG4mIzQzO1xuJiM0MztcdFx0LyogVGhlIHNvY2tldCBsb2NrIHN0YXlzIGhlbGQgdG8gdGhlIHJldHJ5LCBzbyB0aGVcbiYjNDM7XHRcdCAqIGFuY2hvciB0aGlzIHdhaXQgbG9hZGVkIHN1cnZpdmVzIGl0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyZWxlYXNlZCA9IGZhbHNlO1xuIFx0fVxuIFxuIFx0cnhtID0gc3RycF9tc2coc2tiKTtcbkBAIC0yMDI3LDYgJiM0MzsyMDg1LDIxIEBAIHNzaXplX3QgdGxzX3N3X3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssICBsb2ZmX3QgKnBwb3MsXG4gXHRcdGdvdG8gc3BsaWNlX3JlcXVldWU7XG4gXHR9XG4gXG4mIzQzO1x0LyogU3BsaWNpbmcgYW4gZW1wdHkgZGF0YSByZWNvcmQgZGVsaXZlcnMgemVybyBieXRlcywgd2hpY2ggdGhlXG4mIzQzO1x0ICogY2FsbGVyIHJlYWRzIGFzIEVPRi4gdGxzX3J4X3JlY193YWl0KCkgc2tpcHMgaXRzIHNpZ25hbCBjaGVja1xuJiM0MztcdCAqIHdoaWxlIGEgcmVjb3JkIGlzIHBhcnNlZCwgc28gdGVzdCBmb3IgYSBzaWduYWwgaGVyZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAodGxzX3J4X2VtcHR5X2RhdGFfcmVjKHJ4bS1cdTAwM2VmdWxsX2xlbiwgdGxtLVx1MDAzZWNvbnRyb2wpKSB7XG4mIzQzO1x0XHRsb25nIHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgbm9uYmxvY2spO1xuJiM0MztcbiYjNDM7XHRcdGNvbnN1bWVfc2tiKHNrYik7XG4mIzQzO1x0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbiYjNDM7XHRcdFx0ZXJyID0gdGxzX3J4X2ludHJfZXJybm8odGltZW8pO1xuJiM0MztcdFx0XHRnb3RvIHNwbGljZV9yZWFkX2VuZDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGNodW5rID0gbWluX3QodW5zaWduZWQgaW50LCByeG0tXHUwMDNlZnVsbF9sZW4sIGxlbik7XG4gXHRjb3BpZWQgPSBza2Jfc3BsaWNlX2JpdHMoc2tiLCBzaywgcnhtLVx1MDAzZW9mZnNldCwgcGlwZSwgY2h1bmssIGZsYWdzKTtcbiBcdGlmIChjb3BpZWQgXHUwMDNjIDApXG5AQCAtMjA0OSw2ICYjNDM7MjEyMiwxMSBAQCBzc2l6ZV90IHRsc19zd19zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCAgbG9mZl90ICpwcG9zLFxuIFx0Z290byBzcGxpY2VfcmVhZF9lbmQ7XG4gfVxuIFxuJiM0MzsvKiBCb3VuZCB0aGUgdGltZSB0aGF0IGNvbnNlY3V0aXZlIGVtcHR5IGluZ3Jlc3MgZGF0YSByZWNvcmRzIGtlZXBcbiYjNDM7ICogdGhlIHNvY2tldCBsb2NrIGhlbGQgd2l0aG91dCByZWxlYXNpbmcgaXQuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFRMU19SWF9OT0RBVEFfTlMgTlNFQ19QRVJfTVNFQ1xuJiM0MztcbiBpbnQgdGxzX3N3X3JlYWRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxuIFx0XHQgICAgIHNrX3JlYWRfYWN0b3JfdCByZWFkX2FjdG9yKVxuIHtcbkBAIC0yMDU3LDYgJiM0MzsyMTM1LDcgQEAgaW50IHRsc19zd19yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbiBcdHN0cnVjdCB0bHNfcHJvdF9pbmZvICpwcm90ID0gXHUwMDI2dGxzX2N0eC1cdTAwM2Vwcm90X2luZm87XG4gXHRzdHJ1Y3Qgc3RycF9tc2cgKnJ4bSA9IE5VTEw7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcbiYjNDM7XHR1NjQgbm9kYXRhX2RlYWRsaW5lID0gMDtcbiBcdHN0cnVjdCBza19wc29jayAqcHNvY2s7XG4gXHRzaXplX3QgZmx1c2hlZF9hdCA9IDA7XG4gXHRib29sIHJlbGVhc2VkID0gdHJ1ZTtcbkBAIC0yMTE1LDE0ICYjNDM7MjE5NCwyNSBAQCBpbnQgdGxzX3N3X3JlYWRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxuIFx0XHRcdGdvdG8gcmVhZF9zb2NrX3JlcXVldWU7XG4gXHRcdH1cbiBcbi1cdFx0LyogQW4gZW1wdHkgZGF0YSByZWNvcmQgKGxlZ2FsIGluIFRMUyAxLjMpIGdpdmVzIGEgemVyb1xuLVx0XHQgKiByZWFkX2FjdG9yIHJldHVybiwgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSB0aGUgY29uc3VtZXJcbi1cdFx0ICogc3RhbGxpbmc7IHRoZSB1c2VkIFx1MDAzYz0gMCBwYXRoIHdvdWxkIHJlcXVldWUgaXQgYXQgdGhlXG4tXHRcdCAqIGhlYWQgb2YgcnhfbGlzdCBhbmQgYmxvY2sgYWxsIGxhdGVyIHJlY29yZHMuIENvbnN1bWUgaXRcbi1cdFx0ICogaGVyZSBpbnN0ZWFkLlxuJiM0MztcdFx0LyogQW4gZW1wdHkgZGF0YSByZWNvcmQgZ2l2ZXMgYSB6ZXJvIHJlYWRfYWN0b3IgcmV0dXJuLFxuJiM0MztcdFx0ICogaW5kaXN0aW5ndWlzaGFibGUgZnJvbSB0aGUgY29uc3VtZXIgc3RhbGxpbmc7IHRoZVxuJiM0MztcdFx0ICogdXNlZCBcdTAwM2M9IDAgcGF0aCB3b3VsZCByZXF1ZXVlIGl0IGF0IHRoZSBoZWFkIG9mIHJ4X2xpc3RcbiYjNDM7XHRcdCAqIGFuZCBibG9jayBhbGwgbGF0ZXIgcmVjb3Jkcy4gQ29uc3VtZSBpdCBoZXJlIGluc3RlYWQuXG4gXHRcdCAqL1xuLVx0XHRpZiAocnhtLVx1MDAzZWZ1bGxfbGVuID09IDApIHtcbiYjNDM7XHRcdGlmICh0bHNfcnhfZW1wdHlfZGF0YV9yZWMocnhtLVx1MDAzZWZ1bGxfbGVuLCB0bG0tXHUwMDNlY29udHJvbCkpIHtcbiYjNDM7XHRcdFx0ZXJyID0gMDtcbiBcdFx0XHRjb25zdW1lX3NrYihza2IpO1xuJiM0MztcdFx0XHRpZiAoIW5vZGF0YV9kZWFkbGluZSkge1xuJiM0MztcdFx0XHRcdG5vZGF0YV9kZWFkbGluZSA9IGt0aW1lX2dldF9ucygpICYjNDM7XG4mIzQzO1x0XHRcdFx0XHRcdCAgVExTX1JYX05PREFUQV9OUztcbiYjNDM7XHRcdFx0fSBlbHNlIGlmIChrdGltZV9nZXRfbnMoKSBcdTAwM2U9IG5vZGF0YV9kZWFkbGluZSkge1xuJiM0MztcdFx0XHRcdC8qIFF1ZXVlZCByZWNvcmRzIHJhaXNlIG5vIG5ldyBza19kYXRhX3JlYWR5KCksXG4mIzQzO1x0XHRcdFx0ICogYW5kIHRsc19yeF9yZWFkZXJfcmVsZWFzZSgpIGFubm91bmNlcyBvbmx5IHRvXG4mIzQzO1x0XHRcdFx0ICogc2F2ZWRfZGF0YV9yZWFkeSgpLCBub3QgdGhlIGNvbnN1bWVyJiMzOTtzIG93bi5cbiYjNDM7XHRcdFx0XHQgKi9cbiYjNDM7XHRcdFx0XHRzay1cdTAwM2Vza19kYXRhX3JlYWR5KHNrKTtcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0fVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG5AQCAtMjEzMyw2ICYjNDM7MjIyMyw3IEBAIGludCB0bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG4gXHRcdFx0Z290byByZWFkX3NvY2tfcmVxdWV1ZTtcbiBcdFx0fVxuIFx0XHRjb3BpZWQgJiM0Mzs9IHVzZWQ7XG4mIzQzO1x0XHRub2RhdGFfZGVhZGxpbmUgPSAwO1xuIFx0XHRpZiAodXNlZCBcdTAwM2MgcnhtLVx1MDAzZWZ1bGxfbGVuKSB7XG4gXHRcdFx0cnhtLVx1MDAzZW9mZnNldCAmIzQzOz0gdXNlZDtcbiBcdFx0XHRyeG0tXHUwMDNlZnVsbF9sZW4gLT0gdXNlZDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmNcbmluZGV4IGNiZGQzZWEyOGI5OThmLi44YjY4ZGJmY2M1OTI0NiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jXG5AQCAtMjQsNiAmIzQzOzI0LDcgQEBcbiAjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3RfaGFybmVzcy5oXCYjMzQ7XG4gXG4gI2RlZmluZSBUTFNfUEFZTE9BRF9NQVhfTEVOIDE2Mzg0XG4mIzQzOyNkZWZpbmUgVExTX0hEUl9MRU4gNVxuICNkZWZpbmUgU09MX1RMUyAyODJcbiBcbiBzdGF0aWMgaW50IGZpcHNfZW5hYmxlZDtcbkBAIC0yNTQ0LDYgJiM0MzsyNTQ1LDkgQEAgVEVTVF9GKHplcm9fbGVuLCB0ZXN0KVxuIFx0aW50IHJlY19vZmY7XG4gXHRpbnQgaTtcbiBcbiYjNDM7XHRpZiAoc2VsZi1cdTAwM2Vub3RscylcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtubyBUTFMgc3VwcG9ydFwmIzM0Oyk7XG4mIzQzO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgNCBcdTAwMjZcdTAwMjYgdmFyaWFudC1cdTAwM2VyZWNzW2ldOyBpJiM0MzsmIzQzOylcbiBcdFx0RVhQRUNUX0VRKHNlbmQoc2VsZi1cdTAwM2VmZCwgdmFyaWFudC1cdTAwM2VyZWNzW2ldLVx1MDAzZWNpcGhlcl9kYXRhLFxuIFx0XHRcdCAgICAgICB2YXJpYW50LVx1MDAzZXJlY3NbaV0tXHUwMDNlY2lwaGVyX2xlbiwgMCksXG5AQCAtMjU3Myw2ICYjNDM7MjU3NywyNDggQEAgVEVTVF9GKHplcm9fbGVuLCB0ZXN0KVxuIFx0fVxuIH07XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHplcm9fbGVuX3NvY2tfcGFpcihzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsXG4mIzQzO1x0XHRcdCAgICAgICBpbnQgKmZkLCBpbnQgKmNmZCwgYm9vbCAqbm90bHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGxzX2NyeXB0b19pbmZvX2tleXMgdGxzMTI7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0dGxzX2NyeXB0b19pbmZvX2luaXQoVExTXzFfMl9WRVJTSU9OLCBUTFNfQ0lQSEVSX0FFU19DQ01fMTI4LFxuJiM0MztcdFx0XHQgICAgIFx1MDAyNnRsczEyLCAwKTtcbiYjNDM7XG4mIzQzO1x0dWxwX3NvY2tfcGFpcihfbWV0YWRhdGEsIGZkLCBjZmQsIG5vdGxzKTtcbiYjNDM7XHRpZiAoKm5vdGxzKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHQvKiBmZCBzdGF5cyBrZXlsZXNzOyB0aGVzZSBmaXh0dXJlcyBzZW5kIHJhdyByZWNvcmRzIG92ZXIgaXQgKi9cbiYjNDM7XHRyZXQgPSBzZXRzb2Nrb3B0KCpjZmQsIFNPTF9UTFMsIFRMU19SWCwgXHUwMDI2dGxzMTIsIHRsczEyLmxlbik7XG4mIzQzO1x0QVNTRVJUX0VRKHJldCwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFNlbmQgYSB2YXJpYW50JiMzOTtzIHJlY29yZHM7IHJldHVybiB0aGUgbGFzdCBvbmUgY2FycnlpbmcgcGF5bG9hZCAqL1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJhd19yZWMgKlxuJiM0Mzt6ZXJvX2xlbl9zZW5kX3JlY3Moc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLCBpbnQgZmQsXG4mIzQzO1x0XHQgICBjb25zdCBzdHJ1Y3QgcmF3X3JlYyAqY29uc3QgKnJlY3MpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcmF3X3JlYyAqcGF5bG9hZCA9IE5VTEw7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDQgXHUwMDI2XHUwMDI2IHJlY3NbaV07IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRFWFBFQ1RfRVEoc2VuZChmZCwgcmVjc1tpXS1cdTAwM2VjaXBoZXJfZGF0YSwgcmVjc1tpXS1cdTAwM2VjaXBoZXJfbGVuLCAwKSxcbiYjNDM7XHRcdFx0ICByZWNzW2ldLVx1MDAzZWNpcGhlcl9sZW4pO1xuJiM0MztcdFx0aWYgKHJlY3NbaV0tXHUwMDNlcGxhaW5fbGVuKVxuJiM0MztcdFx0XHRwYXlsb2FkID0gcmVjc1tpXTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBwYXlsb2FkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztGSVhUVVJFKHplcm9fbGVuX3BlZWspXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQsIGNmZDtcbiYjNDM7XHRib29sIG5vdGxzO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UKHplcm9fbGVuX3BlZWspXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcmF3X3JlYyAqcmVjc1s0XTtcbiYjNDM7XHRzc2l6ZV90IHBlZWtfcmV0O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERCh6ZXJvX2xlbl9wZWVrLCAwZGF0YV8wZGF0YV9kYXRhKVxuJiM0Mzt7XG4mIzQzO1x0LnJlY3MgPSB7IFx1MDAyNmlkMF9kYXRhX2wwLCBcdTAwMjZpZDFfZGF0YV9sMCwgXHUwMDI2aWQyX2RhdGFfbDExLCB9LFxuJiM0MztcdC5wZWVrX3JldCA9IDExLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERCh6ZXJvX2xlbl9wZWVrLCAwZGF0YV8wZGF0YV8wZGF0YSlcbiYjNDM7e1xuJiM0MztcdC5yZWNzID0geyBcdTAwMjZpZDBfZGF0YV9sMCwgXHUwMDI2aWQxX2RhdGFfbDAsIFx1MDAyNmlkMl9kYXRhX2wwLCB9LFxuJiM0MztcdC5wZWVrX3JldCA9IC1FQUdBSU4sXG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1NFVFVQKHplcm9fbGVuX3BlZWspXG4mIzQzO3tcbiYjNDM7XHR6ZXJvX2xlbl9zb2NrX3BhaXIoX21ldGFkYXRhLCBcdTAwMjZzZWxmLVx1MDAzZWZkLCBcdTAwMjZzZWxmLVx1MDAzZWNmZCwgXHUwMDI2c2VsZi1cdTAwM2Vub3Rscyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVEVBUkRPV04oemVyb19sZW5fcGVlaylcbiYjNDM7e1xuJiM0MztcdGNsb3NlKHNlbGYtXHUwMDNlZmQpO1xuJiM0MztcdGNsb3NlKHNlbGYtXHUwMDNlY2ZkKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUGVla2luZyBwYXN0IGEgcnVuIG9mIGVtcHR5IGRhdGEgcmVjb3JkcyBtdXN0IHJlYWNoIHRoZSBwYXlsb2FkXG4mIzQzOyAqIGJlaGluZCB0aGVtLCBhbmQgYSBydW4gd2l0aCBubyBwYXlsb2FkIGJlaGluZCBpdCBtdXN0IHJlcG9ydCBFQUdBSU5cbiYjNDM7ICogcmF0aGVyIHRoYW4gdGhlIHplcm8gcmV0dXJuIHRoYXQgbWVhbnMgRU9GLlxuJiM0MzsgKi9cbiYjNDM7VEVTVF9GKHplcm9fbGVuX3BlZWssIHRlc3QpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcmF3X3JlYyAqcGF5bG9hZDtcbiYjNDM7XHR1bnNpZ25lZCBjaGFyIGJ1ZlsxMjhdO1xuJiM0MztcdHNzaXplX3QgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoc2VsZi1cdTAwM2Vub3RscylcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtubyBUTFMgc3VwcG9ydFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHBheWxvYWQgPSB6ZXJvX2xlbl9zZW5kX3JlY3MoX21ldGFkYXRhLCBzZWxmLVx1MDAzZWZkLCB2YXJpYW50LVx1MDAzZXJlY3MpO1xuJiM0MztcbiYjNDM7XHRpZiAodmFyaWFudC1cdTAwM2VwZWVrX3JldCBcdTAwM2MgMCkge1xuJiM0MztcdFx0cmV0ID0gcmVjdihzZWxmLVx1MDAzZWNmZCwgYnVmLCBzaXplb2YoYnVmKSxcbiYjNDM7XHRcdFx0ICAgTVNHX0RPTlRXQUlUIHwgTVNHX1BFRUspO1xuJiM0MztcdFx0RVhQRUNUX0VRKHJldCwgLTEpO1xuJiM0MztcdFx0aWYgKHJldCA9PSAtMSlcbiYjNDM7XHRcdFx0RVhQRUNUX0VRKGVycm5vLCAtdmFyaWFudC1cdTAwM2VwZWVrX3JldCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSByZWN2KHNlbGYtXHUwMDNlY2ZkLCBidWYsIHNpemVvZihidWYpLCBNU0dfRE9OVFdBSVQgfCBNU0dfUEVFSyk7XG4mIzQzO1x0RVhQRUNUX0VRKHJldCwgdmFyaWFudC1cdTAwM2VwZWVrX3JldCk7XG4mIzQzO1x0aWYgKHJldCA9PSB2YXJpYW50LVx1MDAzZXBlZWtfcmV0KVxuJiM0MztcdFx0RVhQRUNUX0VRKG1lbWNtcChidWYsIHBheWxvYWQtXHUwMDNlcGxhaW5fZGF0YSxcbiYjNDM7XHRcdFx0XHQgdmFyaWFudC1cdTAwM2VwZWVrX3JldCksIDApO1xuJiM0MztcbiYjNDM7XHQvKiBQZWVraW5nIGxlZnQgdGhlIHBheWxvYWQgaW4gcGxhY2UgZm9yIHRoZSByZWFkIHRoYXQgZm9sbG93cyAqL1xuJiM0MztcdHJldCA9IHJlY3Yoc2VsZi1cdTAwM2VjZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIE1TR19ET05UV0FJVCk7XG4mIzQzO1x0RVhQRUNUX0VRKHJldCwgdmFyaWFudC1cdTAwM2VwZWVrX3JldCk7XG4mIzQzO1x0aWYgKHJldCA9PSB2YXJpYW50LVx1MDAzZXBlZWtfcmV0KVxuJiM0MztcdFx0RVhQRUNUX0VRKG1lbWNtcChidWYsIHBheWxvYWQtXHUwMDNlcGxhaW5fZGF0YSxcbiYjNDM7XHRcdFx0XHQgdmFyaWFudC1cdTAwM2VwZWVrX3JldCksIDApO1xuJiM0MztcbiYjNDM7XHRyZXQgPSByZWN2KHNlbGYtXHUwMDNlY2ZkLCBidWYsIHNpemVvZihidWYpLCBNU0dfRE9OVFdBSVQpO1xuJiM0MztcdEVYUEVDVF9FUShyZXQsIC0xKTtcbiYjNDM7XHRpZiAocmV0ID09IC0xKVxuJiM0MztcdFx0RVhQRUNUX0VRKGVycm5vLCBFQUdBSU4pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztGSVhUVVJFKHplcm9fbGVuX3NwbGljZSlcbiYjNDM7e1xuJiM0MztcdGludCBmZCwgY2ZkO1xuJiM0MztcdGJvb2wgbm90bHM7XG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1ZBUklBTlQoemVyb19sZW5fc3BsaWNlKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJhd19yZWMgKnJlY3NbNF07XG4mIzQzO1x0c3NpemVfdCBzcGxpY2VfcmV0O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERCh6ZXJvX2xlbl9zcGxpY2UsIDBkYXRhX2RhdGEpXG4mIzQzO3tcbiYjNDM7XHQucmVjcyA9IHsgXHUwMDI2aWQwX2RhdGFfbDAsIFx1MDAyNmlkMV9kYXRhX2wxMSwgfSxcbiYjNDM7XHQuc3BsaWNlX3JldCA9IDExLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERCh6ZXJvX2xlbl9zcGxpY2UsIDBkYXRhXzBkYXRhX2RhdGEpXG4mIzQzO3tcbiYjNDM7XHQucmVjcyA9IHsgXHUwMDI2aWQwX2RhdGFfbDAsIFx1MDAyNmlkMV9kYXRhX2wwLCBcdTAwMjZpZDJfZGF0YV9sMTEsIH0sXG4mIzQzO1x0LnNwbGljZV9yZXQgPSAxMSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoemVyb19sZW5fc3BsaWNlLCAwZGF0YV8wZGF0YV8wZGF0YSlcbiYjNDM7e1xuJiM0MztcdC5yZWNzID0geyBcdTAwMjZpZDBfZGF0YV9sMCwgXHUwMDI2aWQxX2RhdGFfbDAsIFx1MDAyNmlkMl9kYXRhX2wwLCB9LFxuJiM0MztcdC5zcGxpY2VfcmV0ID0gLUVBR0FJTixcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoemVyb19sZW5fc3BsaWNlLCAwZGF0YV8wY3RybClcbiYjNDM7e1xuJiM0MztcdC5yZWNzID0geyBcdTAwMjZpZDBfZGF0YV9sMCwgXHUwMDI2aWQxX2N0cmxfbDAsIH0sXG4mIzQzO1x0LnNwbGljZV9yZXQgPSAtRUlOVkFMLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9TRVRVUCh6ZXJvX2xlbl9zcGxpY2UpXG4mIzQzO3tcbiYjNDM7XHR6ZXJvX2xlbl9zb2NrX3BhaXIoX21ldGFkYXRhLCBcdTAwMjZzZWxmLVx1MDAzZWZkLCBcdTAwMjZzZWxmLVx1MDAzZWNmZCwgXHUwMDI2c2VsZi1cdTAwM2Vub3Rscyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVEVBUkRPV04oemVyb19sZW5fc3BsaWNlKVxuJiM0Mzt7XG4mIzQzO1x0Y2xvc2Uoc2VsZi1cdTAwM2VmZCk7XG4mIzQzO1x0Y2xvc2Uoc2VsZi1cdTAwM2VjZmQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBBbiBlbXB0eSBkYXRhIHJlY29yZCBzcGxpY2VzIHplcm8gYnl0ZXMsIHdoaWNoIGEgc3BsaWNlIGNhbGxlciByZWFkc1xuJiM0MzsgKiBhcyBFT0YuIFNwbGljaW5nIG11c3Qgc2tpcCBwYXN0IHN1Y2ggYSByZWNvcmQgdG8gdGhlIHBheWxvYWQgYmVoaW5kXG4mIzQzOyAqIGl0LCBhbmQgcmVwb3J0IEVBR0FJTiB3aGVuIGEgcnVuIG9mIHRoZW0gaGFzIG5vIHBheWxvYWQgYmVoaW5kIGl0LlxuJiM0MzsgKiBBIGNvbnRyb2wgcmVjb3JkIGJlaGluZCB0aGUgcnVuIHJlcG9ydHMgRUlOVkFMLCB0aGUgZXJyb3Igc3BsaWNlXG4mIzQzOyAqIGFscmVhZHkgcmVwb3J0cyBmb3IgYSBjb250cm9sIHJlY29yZCBpdCBtZWV0cyBmaXJzdC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkXG4mIzQzO3plcm9fbGVuX2RvX3NwbGljZShzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsXG4mIzQzO1x0XHQgICBzdHJ1Y3QgX3Rlc3RfZGF0YV96ZXJvX2xlbl9zcGxpY2UgKnNlbGYsXG4mIzQzO1x0XHQgICBjb25zdCBzdHJ1Y3QgX2ZpeHR1cmVfdmFyaWFudF96ZXJvX2xlbl9zcGxpY2UgKnZhcmlhbnQsXG4mIzQzO1x0XHQgICB1bnNpZ25lZCBpbnQgc3BsaWNlX2ZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJhd19yZWMgKnBheWxvYWQ7XG4mIzQzO1x0dW5zaWduZWQgY2hhciBidWZbMTI4XTtcbiYjNDM7XHRzc2l6ZV90IHJldDtcbiYjNDM7XHRpbnQgcFsyXTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0dFKHBpcGUocCksIDApO1xuJiM0MztcbiYjNDM7XHRwYXlsb2FkID0gemVyb19sZW5fc2VuZF9yZWNzKF9tZXRhZGF0YSwgc2VsZi1cdTAwM2VmZCwgdmFyaWFudC1cdTAwM2VyZWNzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHZhcmlhbnQtXHUwMDNlc3BsaWNlX3JldCBcdTAwM2MgMCkge1xuJiM0MztcdFx0cmV0ID0gc3BsaWNlKHNlbGYtXHUwMDNlY2ZkLCBOVUxMLCBwWzFdLCBOVUxMLCBzaXplb2YoYnVmKSxcbiYjNDM7XHRcdFx0ICAgICBzcGxpY2VfZmxhZ3MpO1xuJiM0MztcdFx0RVhQRUNUX0VRKHJldCwgLTEpO1xuJiM0MztcdFx0aWYgKHJldCA9PSAtMSlcbiYjNDM7XHRcdFx0RVhQRUNUX0VRKGVycm5vLCAtdmFyaWFudC1cdTAwM2VzcGxpY2VfcmV0KTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0LyogQXNzZXJ0OiBhIHplcm8gcmV0dXJuLCB3aGljaCBpcyB3aGF0IGFuIHVuZml4ZWQga2VybmVsXG4mIzQzO1x0XHQgKiBnaXZlcyBoZXJlLCBsZWF2ZXMgdGhlIHBpcGUgZW1wdHksIGFuZCB0aGUgcmVhZCBiZWxvd1xuJiM0MztcdFx0ICogd291bGQgdGhlbiBibG9jayB1bnRpbCB0aGUgaGFybmVzcyB0aW1lb3V0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRBU1NFUlRfRVEoc3BsaWNlKHNlbGYtXHUwMDNlY2ZkLCBOVUxMLCBwWzFdLCBOVUxMLCBzaXplb2YoYnVmKSxcbiYjNDM7XHRcdFx0XHQgc3BsaWNlX2ZsYWdzKSwgdmFyaWFudC1cdTAwM2VzcGxpY2VfcmV0KTtcbiYjNDM7XHRcdHJldCA9IHJlYWQocFswXSwgYnVmLCBzaXplb2YoYnVmKSk7XG4mIzQzO1x0XHRFWFBFQ1RfRVEocmV0LCB2YXJpYW50LVx1MDAzZXNwbGljZV9yZXQpO1xuJiM0MztcdFx0aWYgKHJldCA9PSB2YXJpYW50LVx1MDAzZXNwbGljZV9yZXQpXG4mIzQzO1x0XHRcdEVYUEVDVF9FUShtZW1jbXAoYnVmLCBwYXlsb2FkLVx1MDAzZXBsYWluX2RhdGEsXG4mIzQzO1x0XHRcdFx0XHQgdmFyaWFudC1cdTAwM2VzcGxpY2VfcmV0KSwgMCk7XG4mIzQzO1xuJiM0MztcdFx0LyogUmVhY2hpbmcgdGhlIHBheWxvYWQgY29uc3VtZWQgdGhlIGVtcHR5IHJlY29yZHMgYWhlYWRcbiYjNDM7XHRcdCAqIG9mIGl0IHJhdGhlciB0aGFuIGxlYXZpbmcgdGhlbSBvbiB0aGUgcmVjZWl2ZSBxdWV1ZVxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyZXQgPSByZWN2KHNlbGYtXHUwMDNlY2ZkLCBidWYsIHNpemVvZihidWYpLCBNU0dfRE9OVFdBSVQpO1xuJiM0MztcdFx0RVhQRUNUX0VRKHJldCwgLTEpO1xuJiM0MztcdFx0aWYgKHJldCA9PSAtMSlcbiYjNDM7XHRcdFx0RVhQRUNUX0VRKGVycm5vLCBFQUdBSU4pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y2xvc2UocFswXSk7XG4mIzQzO1x0Y2xvc2UocFsxXSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1RFU1RfRih6ZXJvX2xlbl9zcGxpY2UsIHRlc3QpXG4mIzQzO3tcbiYjNDM7XHRpZiAoc2VsZi1cdTAwM2Vub3RscylcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtubyBUTFMgc3VwcG9ydFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHplcm9fbGVuX2RvX3NwbGljZShfbWV0YWRhdGEsIHNlbGYsIHZhcmlhbnQsIFNQTElDRV9GX05PTkJMT0NLKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogVGhlIHNvY2tldCYjMzk7cyBvd24gT19OT05CTE9DSyBnb3Zlcm5zIHRoZSByZWNvcmQgd2FpdCwgYXMgaXQgZG9lcyBvbiBhXG4mIzQzOyAqIHBsYWluIFRDUCBzb2NrZXQsIHNvIGEgc3BsaWNlIHRoYXQgb21pdHMgU1BMSUNFX0ZfTk9OQkxPQ0sgcmVhY2hlc1xuJiM0MzsgKiB0aGUgc2FtZSBvdXRjb21lIGFzIG9uZSB0aGF0IHNldHMgaXQuIEFuIHVuZml4ZWQga2VybmVsIGRlcml2ZXMgdGhlXG4mIzQzOyAqIHdhaXQgZnJvbSBTUExJQ0VfRl9OT05CTE9DSyBhbG9uZSBhbmQgc2xlZXBzIGhlcmUgdW50aWwgdGhlIGhhcm5lc3NcbiYjNDM7ICogdGltZW91dC5cbiYjNDM7ICovXG4mIzQzO1RFU1RfRih6ZXJvX2xlbl9zcGxpY2UsIG5vbmJsb2NrX3NvY2tldClcbiYjNDM7e1xuJiM0MztcdGludCBzZmxhZ3M7XG4mIzQzO1xuJiM0MztcdGlmIChzZWxmLVx1MDAzZW5vdGxzKVxuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O25vIFRMUyBzdXBwb3J0XCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0c2ZsYWdzID0gZmNudGwoc2VsZi1cdTAwM2VjZmQsIEZfR0VURkwsIDApO1xuJiM0MztcdEFTU0VSVF9HRShzZmxhZ3MsIDApO1xuJiM0MztcdEFTU0VSVF9FUShmY250bChzZWxmLVx1MDAzZWNmZCwgRl9TRVRGTCwgc2ZsYWdzIHwgT19OT05CTE9DSyksIDApO1xuJiM0MztcbiYjNDM7XHR6ZXJvX2xlbl9kb19zcGxpY2UoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCAwKTtcbiYjNDM7fVxuJiM0MztcbiBGSVhUVVJFKHRsc19lcnIpXG4ge1xuIFx0aW50IGZkLCBjZmQ7XG5AQCAtMjYzOCwyOCAmIzQzOzI4ODQsODUgQEAgVEVTVF9GKHRsc19lcnIsIGJhZF9yZWMpXG4gXHRFWFBFQ1RfRVEoZXJybm8sIEVBR0FJTik7XG4gfVxuIFxuJiM0MzsvKiBFbmNyeXB0IGEgcmVjb3JkIG9uIHRoZSBUWC1vbmx5IHNvY2tldCBwYWlyLCBjb3JydXB0IGl0cyBsYXN0XG4mIzQzOyAqIGJ5dGUsIGFuZCBoYW5kIHRoZSByZXN1bHQgdG8gdGhlIHNvY2tldCB1bmRlciB0ZXN0LiBjZmQgY2FycmllcyBhXG4mIzQzOyAqIGJ5dGUgc3RyZWFtLCBzbyBvbmUgcmVjdigpIGNhbiByZXR1cm4gcGFydCBvZiBhIHJlY29yZDogdGFrZSB0aGVcbiYjNDM7ICogZnJhZ21lbnQgbGVuZ3RoIGZyb20gdGhlIHJlY29yZCBoZWFkZXIgYW5kIHdhaXQgZm9yIHRoZSByZW1haW5kZXIuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCB0bHNfc2VuZF9iYWRfYXV0aChzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsXG4mIzQzO1x0XHRcdCAgICAgIGludCBmZCwgaW50IGNmZCwgaW50IGZkMilcbiYjNDM7e1xuJiM0MztcdGNoYXIgYnVmWzEyOF07XG4mIzQzO1x0aW50IGxlbjtcbiYjNDM7XG4mIzQzO1x0bWVtcm5kKGJ1Ziwgc2l6ZW9mKGJ1ZikgLyAyKTtcbiYjNDM7XHRBU1NFUlRfRVEoc2VuZChmZCwgYnVmLCBzaXplb2YoYnVmKSAvIDIsIDApLCBzaXplb2YoYnVmKSAvIDIpO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEocmVjdihjZmQsIGJ1ZiwgVExTX0hEUl9MRU4sIE1TR19XQUlUQUxMKSwgVExTX0hEUl9MRU4pO1xuJiM0MztcbiYjNDM7XHRsZW4gPSAoKHVuc2lnbmVkIGNoYXIpYnVmWzNdIFx1MDAzY1x1MDAzYyA4KSB8ICh1bnNpZ25lZCBjaGFyKWJ1Zls0XTtcbiYjNDM7XHRBU1NFUlRfR1QobGVuLCAwKTtcbiYjNDM7XHRBU1NFUlRfTEUobGVuLCAoaW50KXNpemVvZihidWYpIC0gVExTX0hEUl9MRU4pO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEocmVjdihjZmQsIGJ1ZiAmIzQzOyBUTFNfSERSX0xFTiwgbGVuLCBNU0dfV0FJVEFMTCksIGxlbik7XG4mIzQzO1xuJiM0MztcdGJ1ZltUTFNfSERSX0xFTiAmIzQzOyBsZW4gLSAxXSYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUShzZW5kKGZkMiwgYnVmLCBUTFNfSERSX0xFTiAmIzQzOyBsZW4sIDApLCBUTFNfSERSX0xFTiAmIzQzOyBsZW4pO1xuJiM0Mzt9XG4mIzQzO1xuIFRFU1RfRih0bHNfZXJyLCBiYWRfYXV0aClcbiB7XG4gXHRjaGFyIGJ1ZlsxMjhdO1xuLVx0aW50IG47XG4gXG4gXHRpZiAoc2VsZi1cdTAwM2Vub3RscylcbiBcdFx0U0tJUChyZXR1cm4sIFwmIzM0O25vIFRMUyBzdXBwb3J0XCYjMzQ7KTtcbiBcbi1cdG1lbXJuZChidWYsIHNpemVvZihidWYpIC8gMik7XG4tXHRFWFBFQ1RfRVEoc2VuZChzZWxmLVx1MDAzZWZkLCBidWYsIHNpemVvZihidWYpIC8gMiwgMCksIHNpemVvZihidWYpIC8gMik7XG4tXHRuID0gcmVjdihzZWxmLVx1MDAzZWNmZCwgYnVmLCBzaXplb2YoYnVmKSwgMCk7XG4tXHRFWFBFQ1RfR1Qobiwgc2l6ZW9mKGJ1ZikgLyAyKTtcbi1cbi1cdGJ1ZltuIC0gMV0mIzQzOyYjNDM7O1xuJiM0MztcdHRsc19zZW5kX2JhZF9hdXRoKF9tZXRhZGF0YSwgc2VsZi1cdTAwM2VmZCwgc2VsZi1cdTAwM2VjZmQsIHNlbGYtXHUwMDNlZmQyKTtcbiBcbi1cdEVYUEVDVF9FUShzZW5kKHNlbGYtXHUwMDNlZmQyLCBidWYsIG4sIDApLCBuKTtcbiBcdEVYUEVDVF9FUShyZWN2KHNlbGYtXHUwMDNlY2ZkMiwgYnVmLCBzaXplb2YoYnVmKSwgMCksIC0xKTtcbiBcdEVYUEVDVF9FUShlcnJubywgRUJBRE1TRyk7XG4gXHRFWFBFQ1RfRVEocmVjdihzZWxmLVx1MDAzZWNmZDIsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApLCAtMSk7XG4gXHRFWFBFQ1RfRVEoZXJybm8sIEVCQURNU0cpO1xuIH1cbiBcbiYjNDM7LyogQSByZWNvcmQgdGhhdCBkaWQgbm90IGF1dGhlbnRpY2F0ZSBicmVha3MgdGhlIGNvbm5lY3Rpb24gZm9yIGV2ZXJ5XG4mIzQzOyAqIHJlYWRlciwgc3BsaWNlIGluY2x1ZGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgdHdvIGRlY3J5cHQgcGF0aHMgcmVhY2ggdGhhdCByZXN1bHQgZGlmZmVyZW50bHkuIEEgc3luY2hyb25vdXNcbiYjNDM7ICogZGVjcnlwdCBsZWF2ZXMgdGhlIHJlY29yZCBwYXJzZWQsIHNvIHRoZSBzcGxpY2UgcmUtcnVucyB0aGUgZGVjcnlwdFxuJiM0MzsgKiBhbmQgZmFpbHMgb24gdGhlIHJlY29yZCBpdHNlbGY7IHRoZSBjdHgtXHUwMDNlYXN5bmNfd2FpdC5lcnIgY2hlY2sgaW5cbiYjNDM7ICogdGxzX3N3X3NwbGljZV9yZWFkKCkgaXMgbm90IHdoYXQgc3RvcHMgaXQuIE9ubHkgYW4gYXN5bmNocm9ub3VzXG4mIzQzOyAqIGRlY3J5cHQsIHdoaWNoIG5lZWRzIGEgVExTIDEuMiBzb2NrZXQgYW5kIGFuIEFFQUQgYWR2ZXJ0aXNpbmdcbiYjNDM7ICogQ1JZUFRPX0FMR19BU1lOQywgY29uc3VtZXMgdGhlIHJlY29yZCBiZWZvcmUgdGhlIGZhaWx1cmUgaXNcbiYjNDM7ICogcmVjb3JkZWQsIGxlYXZpbmcgdGhhdCBjaGVjayB0aGUgc29sZSByZWFzb24gdGhlIHNwbGljZSBmYWlscy5cbiYjNDM7ICovXG4mIzQzO1RFU1RfRih0bHNfZXJyLCBiYWRfYXV0aF9zcGxpY2UpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGJ1ZlsxMjhdO1xuJiM0MztcdHNzaXplX3QgcmV0O1xuJiM0MztcdGludCBwWzJdO1xuJiM0MztcbiYjNDM7XHRpZiAoc2VsZi1cdTAwM2Vub3RscylcbiYjNDM7XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtubyBUTFMgc3VwcG9ydFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHRsc19zZW5kX2JhZF9hdXRoKF9tZXRhZGF0YSwgc2VsZi1cdTAwM2VmZCwgc2VsZi1cdTAwM2VjZmQsIHNlbGYtXHUwMDNlZmQyKTtcbiYjNDM7XG4mIzQzO1x0RVhQRUNUX0VRKHJlY3Yoc2VsZi1cdTAwM2VjZmQyLCBidWYsIHNpemVvZihidWYpLCAwKSwgLTEpO1xuJiM0MztcdEVYUEVDVF9FUShlcnJubywgRUJBRE1TRyk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9HRShwaXBlKHApLCAwKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gc3BsaWNlKHNlbGYtXHUwMDNlY2ZkMiwgTlVMTCwgcFsxXSwgTlVMTCwgc2l6ZW9mKGJ1ZiksXG4mIzQzO1x0XHQgICAgIFNQTElDRV9GX05PTkJMT0NLKTtcbiYjNDM7XHRFWFBFQ1RfRVEocmV0LCAtMSk7XG4mIzQzO1x0aWYgKHJldCA9PSAtMSlcbiYjNDM7XHRcdEVYUEVDVF9FUShlcnJubywgRUJBRE1TRyk7XG4mIzQzO1xuJiM0MztcdGNsb3NlKHBbMF0pO1xuJiM0MztcdGNsb3NlKHBbMV0pO1xuJiM0Mzt9XG4mIzQzO1xuIFRFU1RfRih0bHNfZXJyLCBiYWRfaW5fbGFyZ2VfcmVhZClcbiB7XG4gXHRjaGFyIHR4dFszXVs2NF07XG5AQCAtMjkxNSw3ICYjNDM7MzIxOCw2IEBAIHN0YXRpYyBzaXplX3QgcGFyc2VfdGxzX3JlY29yZHMoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLFxuIHtcbiBcdGNvbnN0IF9fdTggKnJlYyA9IHJ4X2J1ZjtcbiBcdHNpemVfdCB0b3RhbF9wbGFpbnRleHRfcnggPSAwO1xuLVx0Y29uc3QgX191OCByZWNfaGVhZGVyX2xlbiA9IDU7XG4gXG4gXHR3aGlsZSAocmVjIFx1MDAzYyByeF9idWYgJiM0MzsgcnhfbGVuKSB7XG4gXHRcdF9fdTE2IHJlY29yZF9wYXlsb2FkX2xlbjtcbkBAIC0yOTM1LDcgJiM0MzszMjM3LDcgQEAgc3RhdGljIHNpemVfdCBwYXJzZV90bHNfcmVjb3JkcyhzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsXG4gXG4gXHRcdC8qIFBsYWludGV4dCBtdXN0IG5vdCBleGNlZWQgdGhlIHNwZWNpZmllZCBsaW1pdCAqL1xuIFx0XHRBU1NFUlRfTEUocGxhaW50ZXh0X2xlbiwgbWF4X3BheWxvYWRfbGVuKTtcbi1cdFx0cmVjICYjNDM7PSByZWNfaGVhZGVyX2xlbiAmIzQzOyByZWNvcmRfcGF5bG9hZF9sZW47XG4mIzQzO1x0XHRyZWMgJiM0Mzs9IFRMU19IRFJfTEVOICYjNDM7IHJlY29yZF9wYXlsb2FkX2xlbjtcbiBcdH1cbiBcbiBcdHJldHVybiB0b3RhbF9wbGFpbnRleHRfcng7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTI6MDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RMUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Rsc19zd19yZWN2bXNnJiMzNDssCiAgICAmIzM0O3Rsc19zd19zcGxpY2VfcmVhZCYjMzQ7LAogICAgJiMzNDt0bHNfc3dfcmVhZF9zb2NrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUTFMgc29mdHdhcmUgcmVjZWl2ZSBwYXRoIHRvIHByb3Blcmx5IGhhbmRsZSB6ZXJvLWxlbmd0aCBhcHBsaWNhdGlvbl9kYXRhIHJlY29yZHMgKGVtcHR5IGRhdGEgcmVjb3JkcykgaW4gVExTIDEuMiBhbmQgVExTIDEuMy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgYHJlY3Ztc2dgLCBgc3BsaWNlX3JlYWRgLCBhbmQgYHJlYWRfc29ja2Agb3BlcmF0aW9ucyBvbiBUTFMgc29ja2V0cywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg5ZmMyMjMwYjVjZDI0MjgwOTllM2NjNWUzYmIzOWVkZWFlN2JiMDAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAyNyAxMjowMjozMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC90bHMvdGxzX3N3LmMgYi9uZXQvdGxzL3Rsc19zdy5jCmluZGV4IGQ0YWZjOTBmZDc5NjZlLi4wZTc2YjMxYjEyOTE0YiAxMDA2NDQKLS0tIGEvbmV0L3Rscy90bHNfc3cuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGxzL3Rsc19zdy5jCkBAIC0zNyw2ICYjNDM7MzcsNyBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvYnVnLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvc2lnbmFsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3RpbWVrZWVwaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva2VybmVsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3BsaWNlLmgmZ3Q7CkBAIC0xNzg3LDYgJiM0MzsxNzg4LDI0IEBAIHN0YXRpYyB2b2lkIHRsc19yeF9yZWFkZXJfdW5sb2NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRsc19zd19jb250ZXh0X3J4ICpjdHgpCiAJcmVsZWFzZV9zb2NrKHNrKTsKIH0KIAomIzQzOy8qIFRMUyAxLjIgYW5kIFRMUyAxLjMgYm90aCBwZXJtaXQgYSB6ZXJvLWxlbmd0aCBhcHBsaWNhdGlvbl9kYXRhCiYjNDM7ICogcmVjb3JkIGFzIGEgdHJhZmZpYy1hbmFseXNpcyBjb3VudGVybWVhc3VyZSAoUkZDIDUyNDYsIFNlY3Rpb24KJiM0MzsgKiA2LjIuMTsgUkZDIDg0NDYsIFNlY3Rpb24gNS4xKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCB0bHNfcnhfZW1wdHlfZGF0YV9yZWMoaW50IGxlbiwgdW5zaWduZWQgY2hhciBjb250cm9sKQomIzQzO3sKJiM0MzsJcmV0dXJuICFsZW4gJmFtcDsmYW1wOyBjb250cm9sID09IFRMU19SRUNPUkRfVFlQRV9EQVRBOwomIzQzO30KJiM0MzsKJiM0MzsvKiBzb2NrX2ludHJfZXJybm8oKSBtYXBzIHRoZSB6ZXJvIHRpbWVvIG9mIGEgcmVhZGVyIHRoYXQgY2Fubm90IHdhaXQKJiM0MzsgKiB0byAtRUlOVFIsIGJ1dCBzdWNoIGEgcmVhZGVyIGhhcyBubyBibG9ja2luZyB0byBpbnRlcnJ1cHQuIFRoZSByZXN0CiYjNDM7ICogb2YgdGhlIHJlY2VpdmUgc2lkZSByZXBvcnRzIHRoYXQgY2FzZSBhcyAtRUFHQUlOLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgdGxzX3J4X2ludHJfZXJybm8obG9uZyB0aW1lbykKJiM0Mzt7CiYjNDM7CXJldHVybiB0aW1lbyA/IHNvY2tfaW50cl9lcnJubyh0aW1lbykgOiAtRUFHQUlOOwomIzQzO30KJiM0MzsKIGludCB0bHNfc3dfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssCiAJCSAgIHN0cnVjdCBtc2doZHIgKm1zZywKIAkJICAgc2l6ZV90IGxlbiwKQEAgLTE4NTgsOSAmIzQzOzE4NzcsMTIgQEAgaW50IHRsc19zd19yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywKIAkJICAgIHRsbS0mZ3Q7Y29udHJvbCA9PSBUTFNfUkVDT1JEX1RZUEVfREFUQSkKIAkJCWRhcmcuemMgPSB0cnVlOwogCi0JCS8qIERvIG5vdCB1c2UgYXN5bmMgbW9kZSBpZiByZWNvcmQgaXMgbm9uLWRhdGEgKi8KJiM0MzsJCS8qIERvIG5vdCB1c2UgYXN5bmMgbW9kZSBpZiByZWNvcmQgaXMgbm9uLWRhdGEsIG9yIGlmIGl0CiYjNDM7CQkgKiBpcyBlbXB0eTogdGhlIHJlY2VpdmUgbG9vcCBmcmVlcyBhbiBlbXB0eSByZWNvcmQmIzM5O3Mgc2tiLAomIzQzOwkJICogc28gaXRzIGRlY3J5cHRpb24gbXVzdCBoYXZlIGNvbXBsZXRlZC4KJiM0MzsJCSAqLwogCQlpZiAodGxtLSZndDtjb250cm9sID09IFRMU19SRUNPUkRfVFlQRV9EQVRBKQotCQkJZGFyZy5hc3luYyA9IGN0eC0mZ3Q7YXN5bmNfY2FwYWJsZTsKJiM0MzsJCQlkYXJnLmFzeW5jID0gY3R4LSZndDthc3luY19jYXBhYmxlICZhbXA7JmFtcDsgdG9fZGVjcnlwdDsKIAkJZWxzZQogCQkJZGFyZy5hc3luYyA9IGZhbHNlOwogCkBAIC0xODk2LDYgJiM0MzsxOTE4LDI3IEBAIGludCB0bHNfc3dfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssCiAJCWNodW5rID0gcnhtLSZndDtmdWxsX2xlbjsKIAkJdGxzX3J4X3JlY19kb25lKGN0eCk7CiAKJiM0MzsJCS8qIEFuIGVtcHR5IHJlY29yZCBhZHZhbmNlcyBuZWl0aGVyIGxvb3AgYm91bmQsIHNvIGEgZmxvb2QKJiM0MzsJCSAqIG9mIHRoZW0gY2FuIGJlIGludGVycnVwdGVkIG9ubHkgaGVyZS4gT24gdGhlIHplcm8tY29weQomIzQzOwkJICogcGF0aCBkYXJnLnNrYiBpcyB0aGUgc3RycGFyc2VyIGFuY2hvciwgYWxyZWFkeSByZWxlYXNlZAomIzQzOwkJICogYnkgdGxzX3J4X3JlY19kb25lKCkuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICh0bHNfcnhfZW1wdHlfZGF0YV9yZWMoY2h1bmssIGNvbnRyb2wpKSB7CiYjNDM7CQkJbG9uZyB0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzICZhbXA7IE1TR19ET05UV0FJVCk7CiYjNDM7CiYjNDM7CQkJaWYgKCFkYXJnLnpjKQomIzQzOwkJCQljb25zdW1lX3NrYihkYXJnLnNrYik7CiYjNDM7CiYjNDM7CQkJLyogQW4gZW1wdHkgcmVjb3JkIHN0aWxsIG1hcmtzIGEgYm91bmRhcnkuICovCiYjNDM7CQkJbXNnLSZndDttc2dfZmxhZ3MgfD0gTVNHX0VPUjsKJiM0MzsKJiM0MzsJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKJiM0MzsJCQkJZXJyID0gdGxzX3J4X2ludHJfZXJybm8odGltZW8pOwomIzQzOwkJCQlnb3RvIHJlY3ZfZW5kOwomIzQzOwkJCX0KJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKIAkJaWYgKCFkYXJnLnpjKSB7CiAJCQlib29sIHBhcnRpYWxseV9jb25zdW1lZCA9IGNodW5rICZndDsgbGVuOwogCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRhcmcuc2tiOwpAQCAtMTk5MCwyMSAmIzQzOzIwMzMsMzEgQEAgc3NpemVfdCB0bHNfc3dfc3BsaWNlX3JlYWQoc3RydWN0IHNvY2tldCAqc29jaywgIGxvZmZfdCAqcHBvcywKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLSZndDtzazsKIAlzdHJ1Y3QgdGxzX21zZyAqdGxtOwogCXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CWJvb2wgcmVsZWFzZWQgPSB0cnVlOwogCXNzaXplX3QgY29waWVkID0gMDsKJiM0MzsJYm9vbCBub25ibG9jazsKIAlpbnQgY2h1bms7CiAJaW50IGVycjsKIAotCWVyciA9IHRsc19yeF9yZWFkZXJfbG9jayhzaywgY3R4LCBmbGFncyAmYW1wOyBTUExJQ0VfRl9OT05CTE9DSyk7CiYjNDM7CW5vbmJsb2NrID0gKGZsYWdzICZhbXA7IFNQTElDRV9GX05PTkJMT0NLKSB8fAomIzQzOwkJICAgKHNvY2stJmd0O2ZpbGUtJmd0O2ZfZmxhZ3MgJmFtcDsgT19OT05CTE9DSyk7CiYjNDM7CiYjNDM7CWVyciA9IHRsc19yeF9yZWFkZXJfbG9jayhzaywgY3R4LCBub25ibG9jayk7CiAJaWYgKGVyciAmbHQ7IDApCiAJCXJldHVybiBlcnI7CiAKJiM0MzsJLyogSWYgY3J5cHRvIGZhaWxlZCB0aGUgY29ubmVjdGlvbiBpcyBicm9rZW4gKi8KJiM0MzsJZXJyID0gY3R4LSZndDthc3luY193YWl0LmVycjsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gc3BsaWNlX3JlYWRfZW5kOwomIzQzOwomIzQzO3JldHJ5OgogCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZhbXA7Y3R4LSZndDtyeF9saXN0KSkgewogCQlza2IgPSBfX3NrYl9kZXF1ZXVlKCZhbXA7Y3R4LSZndDtyeF9saXN0KTsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgdGxzX2RlY3J5cHRfYXJnIGRhcmc7CiAKLQkJZXJyID0gdGxzX3J4X3JlY193YWl0KHNrLCBmbGFncyAmYW1wOyBTUExJQ0VfRl9OT05CTE9DSywKLQkJCQkgICAgICB0cnVlLCBmYWxzZSk7CiYjNDM7CQllcnIgPSB0bHNfcnhfcmVjX3dhaXQoc2ssIG5vbmJsb2NrLCByZWxlYXNlZCwgZmFsc2UpOwogCQlpZiAoZXJyICZsdDs9IDApCiAJCQlnb3RvIHNwbGljZV9yZWFkX2VuZDsKIApAQCAtMjAxNiw2ICYjNDM7MjA2OSwxMSBAQCBzc2l6ZV90IHRsc19zd19zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCAgbG9mZl90ICpwcG9zLAogCiAJCXRsc19yeF9yZWNfZG9uZShjdHgpOwogCQlza2IgPSBkYXJnLnNrYjsKJiM0MzsKJiM0MzsJCS8qIFRoZSBzb2NrZXQgbG9jayBzdGF5cyBoZWxkIHRvIHRoZSByZXRyeSwgc28gdGhlCiYjNDM7CQkgKiBhbmNob3IgdGhpcyB3YWl0IGxvYWRlZCBzdXJ2aXZlcyBpdC4KJiM0MzsJCSAqLwomIzQzOwkJcmVsZWFzZWQgPSBmYWxzZTsKIAl9CiAKIAlyeG0gPSBzdHJwX21zZyhza2IpOwpAQCAtMjAyNyw2ICYjNDM7MjA4NSwyMSBAQCBzc2l6ZV90IHRsc19zd19zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCAgbG9mZl90ICpwcG9zLAogCQlnb3RvIHNwbGljZV9yZXF1ZXVlOwogCX0KIAomIzQzOwkvKiBTcGxpY2luZyBhbiBlbXB0eSBkYXRhIHJlY29yZCBkZWxpdmVycyB6ZXJvIGJ5dGVzLCB3aGljaCB0aGUKJiM0MzsJICogY2FsbGVyIHJlYWRzIGFzIEVPRi4gdGxzX3J4X3JlY193YWl0KCkgc2tpcHMgaXRzIHNpZ25hbCBjaGVjawomIzQzOwkgKiB3aGlsZSBhIHJlY29yZCBpcyBwYXJzZWQsIHNvIHRlc3QgZm9yIGEgc2lnbmFsIGhlcmUuCiYjNDM7CSAqLwomIzQzOwlpZiAodGxzX3J4X2VtcHR5X2RhdGFfcmVjKHJ4bS0mZ3Q7ZnVsbF9sZW4sIHRsbS0mZ3Q7Y29udHJvbCkpIHsKJiM0MzsJCWxvbmcgdGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBub25ibG9jayk7CiYjNDM7CiYjNDM7CQljb25zdW1lX3NrYihza2IpOwomIzQzOwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CiYjNDM7CQkJZXJyID0gdGxzX3J4X2ludHJfZXJybm8odGltZW8pOwomIzQzOwkJCWdvdG8gc3BsaWNlX3JlYWRfZW5kOwomIzQzOwkJfQomIzQzOwkJZ290byByZXRyeTsKJiM0MzsJfQomIzQzOwogCWNodW5rID0gbWluX3QodW5zaWduZWQgaW50LCByeG0tJmd0O2Z1bGxfbGVuLCBsZW4pOwogCWNvcGllZCA9IHNrYl9zcGxpY2VfYml0cyhza2IsIHNrLCByeG0tJmd0O29mZnNldCwgcGlwZSwgY2h1bmssIGZsYWdzKTsKIAlpZiAoY29waWVkICZsdDsgMCkKQEAgLTIwNDksNiAmIzQzOzIxMjIsMTEgQEAgc3NpemVfdCB0bHNfc3dfc3BsaWNlX3JlYWQoc3RydWN0IHNvY2tldCAqc29jaywgIGxvZmZfdCAqcHBvcywKIAlnb3RvIHNwbGljZV9yZWFkX2VuZDsKIH0KIAomIzQzOy8qIEJvdW5kIHRoZSB0aW1lIHRoYXQgY29uc2VjdXRpdmUgZW1wdHkgaW5ncmVzcyBkYXRhIHJlY29yZHMga2VlcAomIzQzOyAqIHRoZSBzb2NrZXQgbG9jayBoZWxkIHdpdGhvdXQgcmVsZWFzaW5nIGl0LgomIzQzOyAqLwomIzQzOyNkZWZpbmUgVExTX1JYX05PREFUQV9OUyBOU0VDX1BFUl9NU0VDCiYjNDM7CiBpbnQgdGxzX3N3X3JlYWRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLAogCQkgICAgIHNrX3JlYWRfYWN0b3JfdCByZWFkX2FjdG9yKQogewpAQCAtMjA1Nyw2ICYjNDM7MjEzNSw3IEBAIGludCB0bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsCiAJc3RydWN0IHRsc19wcm90X2luZm8gKnByb3QgPSAmYW1wO3Rsc19jdHgtJmd0O3Byb3RfaW5mbzsKIAlzdHJ1Y3Qgc3RycF9tc2cgKnJ4bSA9IE5VTEw7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CiYjNDM7CXU2NCBub2RhdGFfZGVhZGxpbmUgPSAwOwogCXN0cnVjdCBza19wc29jayAqcHNvY2s7CiAJc2l6ZV90IGZsdXNoZWRfYXQgPSAwOwogCWJvb2wgcmVsZWFzZWQgPSB0cnVlOwpAQCAtMjExNSwxNCAmIzQzOzIxOTQsMjUgQEAgaW50IHRsc19zd19yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYywKIAkJCWdvdG8gcmVhZF9zb2NrX3JlcXVldWU7CiAJCX0KIAotCQkvKiBBbiBlbXB0eSBkYXRhIHJlY29yZCAobGVnYWwgaW4gVExTIDEuMykgZ2l2ZXMgYSB6ZXJvCi0JCSAqIHJlYWRfYWN0b3IgcmV0dXJuLCBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIHRoZSBjb25zdW1lcgotCQkgKiBzdGFsbGluZzsgdGhlIHVzZWQgJmx0Oz0gMCBwYXRoIHdvdWxkIHJlcXVldWUgaXQgYXQgdGhlCi0JCSAqIGhlYWQgb2YgcnhfbGlzdCBhbmQgYmxvY2sgYWxsIGxhdGVyIHJlY29yZHMuIENvbnN1bWUgaXQKLQkJICogaGVyZSBpbnN0ZWFkLgomIzQzOwkJLyogQW4gZW1wdHkgZGF0YSByZWNvcmQgZ2l2ZXMgYSB6ZXJvIHJlYWRfYWN0b3IgcmV0dXJuLAomIzQzOwkJICogaW5kaXN0aW5ndWlzaGFibGUgZnJvbSB0aGUgY29uc3VtZXIgc3RhbGxpbmc7IHRoZQomIzQzOwkJICogdXNlZCAmbHQ7PSAwIHBhdGggd291bGQgcmVxdWV1ZSBpdCBhdCB0aGUgaGVhZCBvZiByeF9saXN0CiYjNDM7CQkgKiBhbmQgYmxvY2sgYWxsIGxhdGVyIHJlY29yZHMuIENvbnN1bWUgaXQgaGVyZSBpbnN0ZWFkLgogCQkgKi8KLQkJaWYgKHJ4bS0mZ3Q7ZnVsbF9sZW4gPT0gMCkgewomIzQzOwkJaWYgKHRsc19yeF9lbXB0eV9kYXRhX3JlYyhyeG0tJmd0O2Z1bGxfbGVuLCB0bG0tJmd0O2NvbnRyb2wpKSB7CiYjNDM7CQkJZXJyID0gMDsKIAkJCWNvbnN1bWVfc2tiKHNrYik7CiYjNDM7CQkJaWYgKCFub2RhdGFfZGVhZGxpbmUpIHsKJiM0MzsJCQkJbm9kYXRhX2RlYWRsaW5lID0ga3RpbWVfZ2V0X25zKCkgJiM0MzsKJiM0MzsJCQkJCQkgIFRMU19SWF9OT0RBVEFfTlM7CiYjNDM7CQkJfSBlbHNlIGlmIChrdGltZV9nZXRfbnMoKSAmZ3Q7PSBub2RhdGFfZGVhZGxpbmUpIHsKJiM0MzsJCQkJLyogUXVldWVkIHJlY29yZHMgcmFpc2Ugbm8gbmV3IHNrX2RhdGFfcmVhZHkoKSwKJiM0MzsJCQkJICogYW5kIHRsc19yeF9yZWFkZXJfcmVsZWFzZSgpIGFubm91bmNlcyBvbmx5IHRvCiYjNDM7CQkJCSAqIHNhdmVkX2RhdGFfcmVhZHkoKSwgbm90IHRoZSBjb25zdW1lciYjMzk7cyBvd24uCiYjNDM7CQkJCSAqLwomIzQzOwkJCQlzay0mZ3Q7c2tfZGF0YV9yZWFkeShzayk7CiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCX0KIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTIxMzMsNiAmIzQzOzIyMjMsNyBAQCBpbnQgdGxzX3N3X3JlYWRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLAogCQkJZ290byByZWFkX3NvY2tfcmVxdWV1ZTsKIAkJfQogCQljb3BpZWQgJiM0Mzs9IHVzZWQ7CiYjNDM7CQlub2RhdGFfZGVhZGxpbmUgPSAwOwogCQlpZiAodXNlZCAmbHQ7IHJ4bS0mZ3Q7ZnVsbF9sZW4pIHsKIAkJCXJ4bS0mZ3Q7b2Zmc2V0ICYjNDM7PSB1c2VkOwogCQkJcnhtLSZndDtmdWxsX2xlbiAtPSB1c2VkOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jCmluZGV4IGNiZGQzZWEyOGI5OThmLi44YjY4ZGJmY2M1OTI0NiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYwpAQCAtMjQsNiAmIzQzOzI0LDcgQEAKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaCYjMzQ7CiAKICNkZWZpbmUgVExTX1BBWUxPQURfTUFYX0xFTiAxNjM4NAomIzQzOyNkZWZpbmUgVExTX0hEUl9MRU4gNQogI2RlZmluZSBTT0xfVExTIDI4MgogCiBzdGF0aWMgaW50IGZpcHNfZW5hYmxlZDsKQEAgLTI1NDQsNiAmIzQzOzI1NDUsOSBAQCBURVNUX0YoemVyb19sZW4sIHRlc3QpCiAJaW50IHJlY19vZmY7CiAJaW50IGk7CiAKJiM0MzsJaWYgKHNlbGYtJmd0O25vdGxzKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7bm8gVExTIHN1cHBvcnQmIzM0Oyk7CiYjNDM7CiAJZm9yIChpID0gMDsgaSAmbHQ7IDQgJmFtcDsmYW1wOyB2YXJpYW50LSZndDtyZWNzW2ldOyBpJiM0MzsmIzQzOykKIAkJRVhQRUNUX0VRKHNlbmQoc2VsZi0mZ3Q7ZmQsIHZhcmlhbnQtJmd0O3JlY3NbaV0tJmd0O2NpcGhlcl9kYXRhLAogCQkJICAgICAgIHZhcmlhbnQtJmd0O3JlY3NbaV0tJmd0O2NpcGhlcl9sZW4sIDApLApAQCAtMjU3Myw2ICYjNDM7MjU3NywyNDggQEAgVEVTVF9GKHplcm9fbGVuLCB0ZXN0KQogCX0KIH07CiAKJiM0MztzdGF0aWMgdm9pZCB6ZXJvX2xlbl9zb2NrX3BhaXIoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLAomIzQzOwkJCSAgICAgICBpbnQgKmZkLCBpbnQgKmNmZCwgYm9vbCAqbm90bHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGxzX2NyeXB0b19pbmZvX2tleXMgdGxzMTI7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXRsc19jcnlwdG9faW5mb19pbml0KFRMU18xXzJfVkVSU0lPTiwgVExTX0NJUEhFUl9BRVNfQ0NNXzEyOCwKJiM0MzsJCQkgICAgICZhbXA7dGxzMTIsIDApOwomIzQzOwomIzQzOwl1bHBfc29ja19wYWlyKF9tZXRhZGF0YSwgZmQsIGNmZCwgbm90bHMpOwomIzQzOwlpZiAoKm5vdGxzKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwkvKiBmZCBzdGF5cyBrZXlsZXNzOyB0aGVzZSBmaXh0dXJlcyBzZW5kIHJhdyByZWNvcmRzIG92ZXIgaXQgKi8KJiM0MzsJcmV0ID0gc2V0c29ja29wdCgqY2ZkLCBTT0xfVExTLCBUTFNfUlgsICZhbXA7dGxzMTIsIHRsczEyLmxlbik7CiYjNDM7CUFTU0VSVF9FUShyZXQsIDApOwomIzQzO30KJiM0MzsKJiM0MzsvKiBTZW5kIGEgdmFyaWFudCYjMzk7cyByZWNvcmRzOyByZXR1cm4gdGhlIGxhc3Qgb25lIGNhcnJ5aW5nIHBheWxvYWQgKi8KJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHJhd19yZWMgKgomIzQzO3plcm9fbGVuX3NlbmRfcmVjcyhzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIGludCBmZCwKJiM0MzsJCSAgIGNvbnN0IHN0cnVjdCByYXdfcmVjICpjb25zdCAqcmVjcykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCByYXdfcmVjICpwYXlsb2FkID0gTlVMTDsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyA0ICZhbXA7JmFtcDsgcmVjc1tpXTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCUVYUEVDVF9FUShzZW5kKGZkLCByZWNzW2ldLSZndDtjaXBoZXJfZGF0YSwgcmVjc1tpXS0mZ3Q7Y2lwaGVyX2xlbiwgMCksCiYjNDM7CQkJICByZWNzW2ldLSZndDtjaXBoZXJfbGVuKTsKJiM0MzsJCWlmIChyZWNzW2ldLSZndDtwbGFpbl9sZW4pCiYjNDM7CQkJcGF5bG9hZCA9IHJlY3NbaV07CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHBheWxvYWQ7CiYjNDM7fQomIzQzOwomIzQzO0ZJWFRVUkUoemVyb19sZW5fcGVlaykKJiM0Mzt7CiYjNDM7CWludCBmZCwgY2ZkOwomIzQzOwlib29sIG5vdGxzOwomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UKHplcm9fbGVuX3BlZWspCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgcmF3X3JlYyAqcmVjc1s0XTsKJiM0MzsJc3NpemVfdCBwZWVrX3JldDsKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoemVyb19sZW5fcGVlaywgMGRhdGFfMGRhdGFfZGF0YSkKJiM0Mzt7CiYjNDM7CS5yZWNzID0geyAmYW1wO2lkMF9kYXRhX2wwLCAmYW1wO2lkMV9kYXRhX2wwLCAmYW1wO2lkMl9kYXRhX2wxMSwgfSwKJiM0MzsJLnBlZWtfcmV0ID0gMTEsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKHplcm9fbGVuX3BlZWssIDBkYXRhXzBkYXRhXzBkYXRhKQomIzQzO3sKJiM0MzsJLnJlY3MgPSB7ICZhbXA7aWQwX2RhdGFfbDAsICZhbXA7aWQxX2RhdGFfbDAsICZhbXA7aWQyX2RhdGFfbDAsIH0sCiYjNDM7CS5wZWVrX3JldCA9IC1FQUdBSU4sCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1NFVFVQKHplcm9fbGVuX3BlZWspCiYjNDM7ewomIzQzOwl6ZXJvX2xlbl9zb2NrX3BhaXIoX21ldGFkYXRhLCAmYW1wO3NlbGYtJmd0O2ZkLCAmYW1wO3NlbGYtJmd0O2NmZCwgJmFtcDtzZWxmLSZndDtub3Rscyk7CiYjNDM7fQomIzQzOwomIzQzO0ZJWFRVUkVfVEVBUkRPV04oemVyb19sZW5fcGVlaykKJiM0Mzt7CiYjNDM7CWNsb3NlKHNlbGYtJmd0O2ZkKTsKJiM0MzsJY2xvc2Uoc2VsZi0mZ3Q7Y2ZkKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogUGVla2luZyBwYXN0IGEgcnVuIG9mIGVtcHR5IGRhdGEgcmVjb3JkcyBtdXN0IHJlYWNoIHRoZSBwYXlsb2FkCiYjNDM7ICogYmVoaW5kIHRoZW0sIGFuZCBhIHJ1biB3aXRoIG5vIHBheWxvYWQgYmVoaW5kIGl0IG11c3QgcmVwb3J0IEVBR0FJTgomIzQzOyAqIHJhdGhlciB0aGFuIHRoZSB6ZXJvIHJldHVybiB0aGF0IG1lYW5zIEVPRi4KJiM0MzsgKi8KJiM0MztURVNUX0YoemVyb19sZW5fcGVlaywgdGVzdCkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCByYXdfcmVjICpwYXlsb2FkOwomIzQzOwl1bnNpZ25lZCBjaGFyIGJ1ZlsxMjhdOwomIzQzOwlzc2l6ZV90IHJldDsKJiM0MzsKJiM0MzsJaWYgKHNlbGYtJmd0O25vdGxzKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7bm8gVExTIHN1cHBvcnQmIzM0Oyk7CiYjNDM7CiYjNDM7CXBheWxvYWQgPSB6ZXJvX2xlbl9zZW5kX3JlY3MoX21ldGFkYXRhLCBzZWxmLSZndDtmZCwgdmFyaWFudC0mZ3Q7cmVjcyk7CiYjNDM7CiYjNDM7CWlmICh2YXJpYW50LSZndDtwZWVrX3JldCAmbHQ7IDApIHsKJiM0MzsJCXJldCA9IHJlY3Yoc2VsZi0mZ3Q7Y2ZkLCBidWYsIHNpemVvZihidWYpLAomIzQzOwkJCSAgIE1TR19ET05UV0FJVCB8IE1TR19QRUVLKTsKJiM0MzsJCUVYUEVDVF9FUShyZXQsIC0xKTsKJiM0MzsJCWlmIChyZXQgPT0gLTEpCiYjNDM7CQkJRVhQRUNUX0VRKGVycm5vLCAtdmFyaWFudC0mZ3Q7cGVla19yZXQpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHJlY3Yoc2VsZi0mZ3Q7Y2ZkLCBidWYsIHNpemVvZihidWYpLCBNU0dfRE9OVFdBSVQgfCBNU0dfUEVFSyk7CiYjNDM7CUVYUEVDVF9FUShyZXQsIHZhcmlhbnQtJmd0O3BlZWtfcmV0KTsKJiM0MzsJaWYgKHJldCA9PSB2YXJpYW50LSZndDtwZWVrX3JldCkKJiM0MzsJCUVYUEVDVF9FUShtZW1jbXAoYnVmLCBwYXlsb2FkLSZndDtwbGFpbl9kYXRhLAomIzQzOwkJCQkgdmFyaWFudC0mZ3Q7cGVla19yZXQpLCAwKTsKJiM0MzsKJiM0MzsJLyogUGVla2luZyBsZWZ0IHRoZSBwYXlsb2FkIGluIHBsYWNlIGZvciB0aGUgcmVhZCB0aGF0IGZvbGxvd3MgKi8KJiM0MzsJcmV0ID0gcmVjdihzZWxmLSZndDtjZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIE1TR19ET05UV0FJVCk7CiYjNDM7CUVYUEVDVF9FUShyZXQsIHZhcmlhbnQtJmd0O3BlZWtfcmV0KTsKJiM0MzsJaWYgKHJldCA9PSB2YXJpYW50LSZndDtwZWVrX3JldCkKJiM0MzsJCUVYUEVDVF9FUShtZW1jbXAoYnVmLCBwYXlsb2FkLSZndDtwbGFpbl9kYXRhLAomIzQzOwkJCQkgdmFyaWFudC0mZ3Q7cGVla19yZXQpLCAwKTsKJiM0MzsKJiM0MzsJcmV0ID0gcmVjdihzZWxmLSZndDtjZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIE1TR19ET05UV0FJVCk7CiYjNDM7CUVYUEVDVF9FUShyZXQsIC0xKTsKJiM0MzsJaWYgKHJldCA9PSAtMSkKJiM0MzsJCUVYUEVDVF9FUShlcnJubywgRUFHQUlOKTsKJiM0Mzt9CiYjNDM7CiYjNDM7RklYVFVSRSh6ZXJvX2xlbl9zcGxpY2UpCiYjNDM7ewomIzQzOwlpbnQgZmQsIGNmZDsKJiM0MzsJYm9vbCBub3RsczsKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVCh6ZXJvX2xlbl9zcGxpY2UpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgcmF3X3JlYyAqcmVjc1s0XTsKJiM0MzsJc3NpemVfdCBzcGxpY2VfcmV0OwomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERCh6ZXJvX2xlbl9zcGxpY2UsIDBkYXRhX2RhdGEpCiYjNDM7ewomIzQzOwkucmVjcyA9IHsgJmFtcDtpZDBfZGF0YV9sMCwgJmFtcDtpZDFfZGF0YV9sMTEsIH0sCiYjNDM7CS5zcGxpY2VfcmV0ID0gMTEsCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKHplcm9fbGVuX3NwbGljZSwgMGRhdGFfMGRhdGFfZGF0YSkKJiM0Mzt7CiYjNDM7CS5yZWNzID0geyAmYW1wO2lkMF9kYXRhX2wwLCAmYW1wO2lkMV9kYXRhX2wwLCAmYW1wO2lkMl9kYXRhX2wxMSwgfSwKJiM0MzsJLnNwbGljZV9yZXQgPSAxMSwKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoemVyb19sZW5fc3BsaWNlLCAwZGF0YV8wZGF0YV8wZGF0YSkKJiM0Mzt7CiYjNDM7CS5yZWNzID0geyAmYW1wO2lkMF9kYXRhX2wwLCAmYW1wO2lkMV9kYXRhX2wwLCAmYW1wO2lkMl9kYXRhX2wwLCB9LAomIzQzOwkuc3BsaWNlX3JldCA9IC1FQUdBSU4sCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREKHplcm9fbGVuX3NwbGljZSwgMGRhdGFfMGN0cmwpCiYjNDM7ewomIzQzOwkucmVjcyA9IHsgJmFtcDtpZDBfZGF0YV9sMCwgJmFtcDtpZDFfY3RybF9sMCwgfSwKJiM0MzsJLnNwbGljZV9yZXQgPSAtRUlOVkFMLAomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9TRVRVUCh6ZXJvX2xlbl9zcGxpY2UpCiYjNDM7ewomIzQzOwl6ZXJvX2xlbl9zb2NrX3BhaXIoX21ldGFkYXRhLCAmYW1wO3NlbGYtJmd0O2ZkLCAmYW1wO3NlbGYtJmd0O2NmZCwgJmFtcDtzZWxmLSZndDtub3Rscyk7CiYjNDM7fQomIzQzOwomIzQzO0ZJWFRVUkVfVEVBUkRPV04oemVyb19sZW5fc3BsaWNlKQomIzQzO3sKJiM0MzsJY2xvc2Uoc2VsZi0mZ3Q7ZmQpOwomIzQzOwljbG9zZShzZWxmLSZndDtjZmQpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBBbiBlbXB0eSBkYXRhIHJlY29yZCBzcGxpY2VzIHplcm8gYnl0ZXMsIHdoaWNoIGEgc3BsaWNlIGNhbGxlciByZWFkcwomIzQzOyAqIGFzIEVPRi4gU3BsaWNpbmcgbXVzdCBza2lwIHBhc3Qgc3VjaCBhIHJlY29yZCB0byB0aGUgcGF5bG9hZCBiZWhpbmQKJiM0MzsgKiBpdCwgYW5kIHJlcG9ydCBFQUdBSU4gd2hlbiBhIHJ1biBvZiB0aGVtIGhhcyBubyBwYXlsb2FkIGJlaGluZCBpdC4KJiM0MzsgKiBBIGNvbnRyb2wgcmVjb3JkIGJlaGluZCB0aGUgcnVuIHJlcG9ydHMgRUlOVkFMLCB0aGUgZXJyb3Igc3BsaWNlCiYjNDM7ICogYWxyZWFkeSByZXBvcnRzIGZvciBhIGNvbnRyb2wgcmVjb3JkIGl0IG1lZXRzIGZpcnN0LgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkCiYjNDM7emVyb19sZW5fZG9fc3BsaWNlKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSwKJiM0MzsJCSAgIHN0cnVjdCBfdGVzdF9kYXRhX3plcm9fbGVuX3NwbGljZSAqc2VsZiwKJiM0MzsJCSAgIGNvbnN0IHN0cnVjdCBfZml4dHVyZV92YXJpYW50X3plcm9fbGVuX3NwbGljZSAqdmFyaWFudCwKJiM0MzsJCSAgIHVuc2lnbmVkIGludCBzcGxpY2VfZmxhZ3MpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgcmF3X3JlYyAqcGF5bG9hZDsKJiM0MzsJdW5zaWduZWQgY2hhciBidWZbMTI4XTsKJiM0MzsJc3NpemVfdCByZXQ7CiYjNDM7CWludCBwWzJdOwomIzQzOwomIzQzOwlBU1NFUlRfR0UocGlwZShwKSwgMCk7CiYjNDM7CiYjNDM7CXBheWxvYWQgPSB6ZXJvX2xlbl9zZW5kX3JlY3MoX21ldGFkYXRhLCBzZWxmLSZndDtmZCwgdmFyaWFudC0mZ3Q7cmVjcyk7CiYjNDM7CiYjNDM7CWlmICh2YXJpYW50LSZndDtzcGxpY2VfcmV0ICZsdDsgMCkgewomIzQzOwkJcmV0ID0gc3BsaWNlKHNlbGYtJmd0O2NmZCwgTlVMTCwgcFsxXSwgTlVMTCwgc2l6ZW9mKGJ1ZiksCiYjNDM7CQkJICAgICBzcGxpY2VfZmxhZ3MpOwomIzQzOwkJRVhQRUNUX0VRKHJldCwgLTEpOwomIzQzOwkJaWYgKHJldCA9PSAtMSkKJiM0MzsJCQlFWFBFQ1RfRVEoZXJybm8sIC12YXJpYW50LSZndDtzcGxpY2VfcmV0KTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIEFzc2VydDogYSB6ZXJvIHJldHVybiwgd2hpY2ggaXMgd2hhdCBhbiB1bmZpeGVkIGtlcm5lbAomIzQzOwkJICogZ2l2ZXMgaGVyZSwgbGVhdmVzIHRoZSBwaXBlIGVtcHR5LCBhbmQgdGhlIHJlYWQgYmVsb3cKJiM0MzsJCSAqIHdvdWxkIHRoZW4gYmxvY2sgdW50aWwgdGhlIGhhcm5lc3MgdGltZW91dC4KJiM0MzsJCSAqLwomIzQzOwkJQVNTRVJUX0VRKHNwbGljZShzZWxmLSZndDtjZmQsIE5VTEwsIHBbMV0sIE5VTEwsIHNpemVvZihidWYpLAomIzQzOwkJCQkgc3BsaWNlX2ZsYWdzKSwgdmFyaWFudC0mZ3Q7c3BsaWNlX3JldCk7CiYjNDM7CQlyZXQgPSByZWFkKHBbMF0sIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwomIzQzOwkJRVhQRUNUX0VRKHJldCwgdmFyaWFudC0mZ3Q7c3BsaWNlX3JldCk7CiYjNDM7CQlpZiAocmV0ID09IHZhcmlhbnQtJmd0O3NwbGljZV9yZXQpCiYjNDM7CQkJRVhQRUNUX0VRKG1lbWNtcChidWYsIHBheWxvYWQtJmd0O3BsYWluX2RhdGEsCiYjNDM7CQkJCQkgdmFyaWFudC0mZ3Q7c3BsaWNlX3JldCksIDApOwomIzQzOwomIzQzOwkJLyogUmVhY2hpbmcgdGhlIHBheWxvYWQgY29uc3VtZWQgdGhlIGVtcHR5IHJlY29yZHMgYWhlYWQKJiM0MzsJCSAqIG9mIGl0IHJhdGhlciB0aGFuIGxlYXZpbmcgdGhlbSBvbiB0aGUgcmVjZWl2ZSBxdWV1ZQomIzQzOwkJICovCiYjNDM7CQlyZXQgPSByZWN2KHNlbGYtJmd0O2NmZCwgYnVmLCBzaXplb2YoYnVmKSwgTVNHX0RPTlRXQUlUKTsKJiM0MzsJCUVYUEVDVF9FUShyZXQsIC0xKTsKJiM0MzsJCWlmIChyZXQgPT0gLTEpCiYjNDM7CQkJRVhQRUNUX0VRKGVycm5vLCBFQUdBSU4pOwomIzQzOwl9CiYjNDM7CiYjNDM7CWNsb3NlKHBbMF0pOwomIzQzOwljbG9zZShwWzFdKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKHplcm9fbGVuX3NwbGljZSwgdGVzdCkKJiM0Mzt7CiYjNDM7CWlmIChzZWxmLSZndDtub3RscykKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O25vIFRMUyBzdXBwb3J0JiMzNDspOwomIzQzOwomIzQzOwl6ZXJvX2xlbl9kb19zcGxpY2UoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBTUExJQ0VfRl9OT05CTE9DSyk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFRoZSBzb2NrZXQmIzM5O3Mgb3duIE9fTk9OQkxPQ0sgZ292ZXJucyB0aGUgcmVjb3JkIHdhaXQsIGFzIGl0IGRvZXMgb24gYQomIzQzOyAqIHBsYWluIFRDUCBzb2NrZXQsIHNvIGEgc3BsaWNlIHRoYXQgb21pdHMgU1BMSUNFX0ZfTk9OQkxPQ0sgcmVhY2hlcwomIzQzOyAqIHRoZSBzYW1lIG91dGNvbWUgYXMgb25lIHRoYXQgc2V0cyBpdC4gQW4gdW5maXhlZCBrZXJuZWwgZGVyaXZlcyB0aGUKJiM0MzsgKiB3YWl0IGZyb20gU1BMSUNFX0ZfTk9OQkxPQ0sgYWxvbmUgYW5kIHNsZWVwcyBoZXJlIHVudGlsIHRoZSBoYXJuZXNzCiYjNDM7ICogdGltZW91dC4KJiM0MzsgKi8KJiM0MztURVNUX0YoemVyb19sZW5fc3BsaWNlLCBub25ibG9ja19zb2NrZXQpCiYjNDM7ewomIzQzOwlpbnQgc2ZsYWdzOwomIzQzOwomIzQzOwlpZiAoc2VsZi0mZ3Q7bm90bHMpCiYjNDM7CQlTS0lQKHJldHVybiwgJiMzNDtubyBUTFMgc3VwcG9ydCYjMzQ7KTsKJiM0MzsKJiM0MzsJc2ZsYWdzID0gZmNudGwoc2VsZi0mZ3Q7Y2ZkLCBGX0dFVEZMLCAwKTsKJiM0MzsJQVNTRVJUX0dFKHNmbGFncywgMCk7CiYjNDM7CUFTU0VSVF9FUShmY250bChzZWxmLSZndDtjZmQsIEZfU0VURkwsIHNmbGFncyB8IE9fTk9OQkxPQ0spLCAwKTsKJiM0MzsKJiM0MzsJemVyb19sZW5fZG9fc3BsaWNlKF9tZXRhZGF0YSwgc2VsZiwgdmFyaWFudCwgMCk7CiYjNDM7fQomIzQzOwogRklYVFVSRSh0bHNfZXJyKQogewogCWludCBmZCwgY2ZkOwpAQCAtMjYzOCwyOCAmIzQzOzI4ODQsODUgQEAgVEVTVF9GKHRsc19lcnIsIGJhZF9yZWMpCiAJRVhQRUNUX0VRKGVycm5vLCBFQUdBSU4pOwogfQogCiYjNDM7LyogRW5jcnlwdCBhIHJlY29yZCBvbiB0aGUgVFgtb25seSBzb2NrZXQgcGFpciwgY29ycnVwdCBpdHMgbGFzdAomIzQzOyAqIGJ5dGUsIGFuZCBoYW5kIHRoZSByZXN1bHQgdG8gdGhlIHNvY2tldCB1bmRlciB0ZXN0LiBjZmQgY2FycmllcyBhCiYjNDM7ICogYnl0ZSBzdHJlYW0sIHNvIG9uZSByZWN2KCkgY2FuIHJldHVybiBwYXJ0IG9mIGEgcmVjb3JkOiB0YWtlIHRoZQomIzQzOyAqIGZyYWdtZW50IGxlbmd0aCBmcm9tIHRoZSByZWNvcmQgaGVhZGVyIGFuZCB3YWl0IGZvciB0aGUgcmVtYWluZGVyLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHRsc19zZW5kX2JhZF9hdXRoKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSwKJiM0MzsJCQkgICAgICBpbnQgZmQsIGludCBjZmQsIGludCBmZDIpCiYjNDM7ewomIzQzOwljaGFyIGJ1ZlsxMjhdOwomIzQzOwlpbnQgbGVuOwomIzQzOwomIzQzOwltZW1ybmQoYnVmLCBzaXplb2YoYnVmKSAvIDIpOwomIzQzOwlBU1NFUlRfRVEoc2VuZChmZCwgYnVmLCBzaXplb2YoYnVmKSAvIDIsIDApLCBzaXplb2YoYnVmKSAvIDIpOwomIzQzOwomIzQzOwlBU1NFUlRfRVEocmVjdihjZmQsIGJ1ZiwgVExTX0hEUl9MRU4sIE1TR19XQUlUQUxMKSwgVExTX0hEUl9MRU4pOwomIzQzOwomIzQzOwlsZW4gPSAoKHVuc2lnbmVkIGNoYXIpYnVmWzNdICZsdDsmbHQ7IDgpIHwgKHVuc2lnbmVkIGNoYXIpYnVmWzRdOwomIzQzOwlBU1NFUlRfR1QobGVuLCAwKTsKJiM0MzsJQVNTRVJUX0xFKGxlbiwgKGludClzaXplb2YoYnVmKSAtIFRMU19IRFJfTEVOKTsKJiM0MzsKJiM0MzsJQVNTRVJUX0VRKHJlY3YoY2ZkLCBidWYgJiM0MzsgVExTX0hEUl9MRU4sIGxlbiwgTVNHX1dBSVRBTEwpLCBsZW4pOwomIzQzOwomIzQzOwlidWZbVExTX0hEUl9MRU4gJiM0MzsgbGVuIC0gMV0mIzQzOyYjNDM7OwomIzQzOwomIzQzOwlBU1NFUlRfRVEoc2VuZChmZDIsIGJ1ZiwgVExTX0hEUl9MRU4gJiM0MzsgbGVuLCAwKSwgVExTX0hEUl9MRU4gJiM0MzsgbGVuKTsKJiM0Mzt9CiYjNDM7CiBURVNUX0YodGxzX2VyciwgYmFkX2F1dGgpCiB7CiAJY2hhciBidWZbMTI4XTsKLQlpbnQgbjsKIAogCWlmIChzZWxmLSZndDtub3RscykKIAkJU0tJUChyZXR1cm4sICYjMzQ7bm8gVExTIHN1cHBvcnQmIzM0Oyk7CiAKLQltZW1ybmQoYnVmLCBzaXplb2YoYnVmKSAvIDIpOwotCUVYUEVDVF9FUShzZW5kKHNlbGYtJmd0O2ZkLCBidWYsIHNpemVvZihidWYpIC8gMiwgMCksIHNpemVvZihidWYpIC8gMik7Ci0JbiA9IHJlY3Yoc2VsZi0mZ3Q7Y2ZkLCBidWYsIHNpemVvZihidWYpLCAwKTsKLQlFWFBFQ1RfR1Qobiwgc2l6ZW9mKGJ1ZikgLyAyKTsKLQotCWJ1ZltuIC0gMV0mIzQzOyYjNDM7OwomIzQzOwl0bHNfc2VuZF9iYWRfYXV0aChfbWV0YWRhdGEsIHNlbGYtJmd0O2ZkLCBzZWxmLSZndDtjZmQsIHNlbGYtJmd0O2ZkMik7CiAKLQlFWFBFQ1RfRVEoc2VuZChzZWxmLSZndDtmZDIsIGJ1ZiwgbiwgMCksIG4pOwogCUVYUEVDVF9FUShyZWN2KHNlbGYtJmd0O2NmZDIsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApLCAtMSk7CiAJRVhQRUNUX0VRKGVycm5vLCBFQkFETVNHKTsKIAlFWFBFQ1RfRVEocmVjdihzZWxmLSZndDtjZmQyLCBidWYsIHNpemVvZihidWYpLCAwKSwgLTEpOwogCUVYUEVDVF9FUShlcnJubywgRUJBRE1TRyk7CiB9CiAKJiM0MzsvKiBBIHJlY29yZCB0aGF0IGRpZCBub3QgYXV0aGVudGljYXRlIGJyZWFrcyB0aGUgY29ubmVjdGlvbiBmb3IgZXZlcnkKJiM0MzsgKiByZWFkZXIsIHNwbGljZSBpbmNsdWRlZC4KJiM0MzsgKgomIzQzOyAqIFRoZSB0d28gZGVjcnlwdCBwYXRocyByZWFjaCB0aGF0IHJlc3VsdCBkaWZmZXJlbnRseS4gQSBzeW5jaHJvbm91cwomIzQzOyAqIGRlY3J5cHQgbGVhdmVzIHRoZSByZWNvcmQgcGFyc2VkLCBzbyB0aGUgc3BsaWNlIHJlLXJ1bnMgdGhlIGRlY3J5cHQKJiM0MzsgKiBhbmQgZmFpbHMgb24gdGhlIHJlY29yZCBpdHNlbGY7IHRoZSBjdHgtJmd0O2FzeW5jX3dhaXQuZXJyIGNoZWNrIGluCiYjNDM7ICogdGxzX3N3X3NwbGljZV9yZWFkKCkgaXMgbm90IHdoYXQgc3RvcHMgaXQuIE9ubHkgYW4gYXN5bmNocm9ub3VzCiYjNDM7ICogZGVjcnlwdCwgd2hpY2ggbmVlZHMgYSBUTFMgMS4yIHNvY2tldCBhbmQgYW4gQUVBRCBhZHZlcnRpc2luZwomIzQzOyAqIENSWVBUT19BTEdfQVNZTkMsIGNvbnN1bWVzIHRoZSByZWNvcmQgYmVmb3JlIHRoZSBmYWlsdXJlIGlzCiYjNDM7ICogcmVjb3JkZWQsIGxlYXZpbmcgdGhhdCBjaGVjayB0aGUgc29sZSByZWFzb24gdGhlIHNwbGljZSBmYWlscy4KJiM0MzsgKi8KJiM0MztURVNUX0YodGxzX2VyciwgYmFkX2F1dGhfc3BsaWNlKQomIzQzO3sKJiM0MzsJY2hhciBidWZbMTI4XTsKJiM0MzsJc3NpemVfdCByZXQ7CiYjNDM7CWludCBwWzJdOwomIzQzOwomIzQzOwlpZiAoc2VsZi0mZ3Q7bm90bHMpCiYjNDM7CQlTS0lQKHJldHVybiwgJiMzNDtubyBUTFMgc3VwcG9ydCYjMzQ7KTsKJiM0MzsKJiM0MzsJdGxzX3NlbmRfYmFkX2F1dGgoX21ldGFkYXRhLCBzZWxmLSZndDtmZCwgc2VsZi0mZ3Q7Y2ZkLCBzZWxmLSZndDtmZDIpOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEocmVjdihzZWxmLSZndDtjZmQyLCBidWYsIHNpemVvZihidWYpLCAwKSwgLTEpOwomIzQzOwlFWFBFQ1RfRVEoZXJybm8sIEVCQURNU0cpOwomIzQzOwomIzQzOwlBU1NFUlRfR0UocGlwZShwKSwgMCk7CiYjNDM7CiYjNDM7CXJldCA9IHNwbGljZShzZWxmLSZndDtjZmQyLCBOVUxMLCBwWzFdLCBOVUxMLCBzaXplb2YoYnVmKSwKJiM0MzsJCSAgICAgU1BMSUNFX0ZfTk9OQkxPQ0spOwomIzQzOwlFWFBFQ1RfRVEocmV0LCAtMSk7CiYjNDM7CWlmIChyZXQgPT0gLTEpCiYjNDM7CQlFWFBFQ1RfRVEoZXJybm8sIEVCQURNU0cpOwomIzQzOwomIzQzOwljbG9zZShwWzBdKTsKJiM0MzsJY2xvc2UocFsxXSk7CiYjNDM7fQomIzQzOwogVEVTVF9GKHRsc19lcnIsIGJhZF9pbl9sYXJnZV9yZWFkKQogewogCWNoYXIgdHh0WzNdWzY0XTsKQEAgLTI5MTUsNyAmIzQzOzMyMTgsNiBAQCBzdGF0aWMgc2l6ZV90IHBhcnNlX3Rsc19yZWNvcmRzKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSwKIHsKIAljb25zdCBfX3U4ICpyZWMgPSByeF9idWY7CiAJc2l6ZV90IHRvdGFsX3BsYWludGV4dF9yeCA9IDA7Ci0JY29uc3QgX191OCByZWNfaGVhZGVyX2xlbiA9IDU7CiAKIAl3aGlsZSAocmVjICZsdDsgcnhfYnVmICYjNDM7IHJ4X2xlbikgewogCQlfX3UxNiByZWNvcmRfcGF5bG9hZF9sZW47CkBAIC0yOTM1LDcgJiM0MzszMjM3LDcgQEAgc3RhdGljIHNpemVfdCBwYXJzZV90bHNfcmVjb3JkcyhzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsCiAKIAkJLyogUGxhaW50ZXh0IG11c3Qgbm90IGV4Y2VlZCB0aGUgc3BlY2lmaWVkIGxpbWl0ICovCiAJCUFTU0VSVF9MRShwbGFpbnRleHRfbGVuLCBtYXhfcGF5bG9hZF9sZW4pOwotCQlyZWMgJiM0Mzs9IHJlY19oZWFkZXJfbGVuICYjNDM7IHJlY29yZF9wYXlsb2FkX2xlbjsKJiM0MzsJCXJlYyAmIzQzOz0gVExTX0hEUl9MRU4gJiM0MzsgcmVjb3JkX3BheWxvYWRfbGVuOwogCX0KIAogCXJldHVybiB0b3RhbF9wbGFpbnRleHRfcng7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3ODcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUTFMgRW1wdHkgRGF0YSBSZWNvcmQgSGFuZGxpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIFRMUyBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IGluIGBuZXQvdGxzL3Rsc19zdy5jYC4gVGhpcyBpcyBmb2N1c2VkIG9uIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgdGhvc2UgcGVza3kgemVyby1sZW5ndGggYGFwcGxpY2F0aW9uX2RhdGFgIHJlY29yZHMsIHRoZSBvbmVzIHdpdGggbm8gYWN0dWFsIHBheWxvYWQsIGluIGJvdGggVExTIDEuMiBhbmQgMS4zLgoKVGhlIGtleSBhZGRpdGlvbnMgYXJlIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IHRoZXkmIzM5O3ZlIGFkZGVkIGB0bHNfcnhfZW1wdHlfZGF0YV9yZWNgIHRvIGNoZWNrIGZvciB0aGVzZSBlbXB0eSByZWNvcmRzLiBBbmQsIGNyaXRpY2FsbHksIHRoZSBjb2RlIGluIGB0bHNfc3dfcmVjdm1zZ2AsIGB0bHNfc3dfc3BsaWNlX3JlYWRgLCBhbmQgYHRsc19zd19yZWFkX3NvY2tgIGhhcyBiZWVuIG1vZGlmaWVkIHRvIGhhbmRsZSB0aGVtIGNvcnJlY3RseS4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTt2ZSBoYWQgdG8gYWRkIGEgY2hlY2sgZm9yIGBjdHgtJmd0O2FzeW5jX3dhaXQuZXJyYCBpbiBgdGxzX3N3X3NwbGljZV9yZWFkYCB0byBhY2NvdW50IGZvciBwb3RlbnRpYWwgY3J5cHRvIGZhaWx1cmVzLCB3aGljaCBtYWtlcyBzZW5zZSwgYXMgYW4gZW1wdHkgcmVjb3JkIGNvdWxkIGJlIHVzZWQgdG8gZXhwbG9pdCBhbiBlcnJvci4gUGx1cywgYHRsc19yeF9pbnRyX2Vycm5vYCBoYXMgYmVlbiB0aHJvd24gaW4gdGhlcmUgZm9yIHNpZ25hbCBpbnRlcnJ1cHRpb24gaGFuZGxpbmcuIFRoZSBjaGFuZ2VzIHRvIGB0bHNfc3dfcmVhZF9zb2NrYCBsb29rIGxpa2UgdGhleSYjMzk7cmUgYm91bmRpbmcgdGhlIHRpbWUgY29uc2VjdXRpdmUgZW1wdHkgcmVjb3JkcyBjYW4gaG9sZCB0aGUgc29ja2V0IGxvY2ssIHdoaWNoIGlzIGEgZ29vZCBtb3ZlIHRvIHByZXZlbnQgcG90ZW50aWFsIGRlbmlhbC1vZi1zZXJ2aWNlIG9yIGxvY2sgY29udGVudGlvbi4KClRoaXMgZmVlbHMgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBoZWFydCBvZiB0aGUgbmV0d29ya2luZyBzdGFjaywgdGhlIFRMUyBpbXBsZW1lbnRhdGlvbiBpdHNlbGYuIEZyb20gYSBzZWN1cml0eSBwZXJzcGVjdGl2ZSwgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IG5lZWRzIHRob3JvdWdoIGZ1enppbmcuCgpNeSBwcmltYXJ5IGZvY3VzIGhlcmUgd2lsbCBiZSB0byBleGFtaW5lIHRoZSBmdW5jdGlvbnMgYWZmZWN0ZWQuIFNvOgoKKiAgIGB0bHNfc3dfcmVjdm1zZ2AKKiAgIGB0bHNfc3dfc3BsaWNlX3JlYWRgCiogICBgdGxzX3N3X3JlYWRfc29ja2AKCk5vdywgbGV0JiMzOTtzIHNlZSBob3cgdGhlc2UgYXJlICp1c2VkKi4gQXJlIHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMsIG9yIGFyZSB0aGV5IGV4cG9ydGVkIG9yIHVzZWQgYXMgY2FsbGJhY2tzPyBBIHF1aWNrIGNoZWNrIHNob3dzIHRoYXQgZWFjaCBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgaW4gYHRsc19zdy5jYCAtIGEgZ29vZCBzdGFydCwgYnV0IEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIGluIG90aGVyIGZpbGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Rsc19zd19yZWN2bXNnfHRsc19zd19zcGxpY2VfcmVhZHx0bHNfc3dfcmVhZF9zb2NrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90bHMvdGxzLmg9MTYyPXZvaWQgdGxzX3N3X2ZyZWVfY3R4X3J4KHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCk7XG5uZXQvdGxzL3Rscy5oOjE2MzppbnQgdGxzX3N3X3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG5uZXQvdGxzL3Rscy5oLTE2NC1cdFx0ICAgaW50IGZsYWdzKTtcbm5ldC90bHMvdGxzLmg9MTY1PWJvb2wgdGxzX3N3X3NvY2tfaXNfcmVhZGFibGUoc3RydWN0IHNvY2sgKnNrKTtcbm5ldC90bHMvdGxzLmg6MTY2OnNzaXplX3QgdGxzX3N3X3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvZmZfdCAqcHBvcyxcbm5ldC90bHMvdGxzLmgtMTY3LVx0XHRcdCAgIHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsXG5uZXQvdGxzL3Rscy5oLTE2OC1cdFx0XHQgICBzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xubmV0L3Rscy90bHMuaDoxNjk6aW50IHRsc19zd19yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbm5ldC90bHMvdGxzLmgtMTcwLVx0XHQgICAgIHNrX3JlYWRfYWN0b3JfdCByZWFkX2FjdG9yKTtcbi0tXG5uZXQvdGxzL3Rsc19tYWluLmM9OTQwPXN0YXRpYyB2b2lkIGJ1aWxkX3Byb3RvX29wcyhzdHJ1Y3QgcHJvdG9fb3BzIG9wc1tUTFNfTlVNX0NPTkZJR11bVExTX05VTV9DT05GSUddLFxuLS1cbm5ldC90bHMvdGxzX21haW4uYy05NDgtXHRvcHNbVExTX0JBU0VdW1RMU19TVyAgXSA9IG9wc1tUTFNfQkFTRV1bVExTX0JBU0VdO1xubmV0L3Rscy90bHNfbWFpbi5jOjk0OTpcdG9wc1tUTFNfQkFTRV1bVExTX1NXICBdLnNwbGljZV9yZWFkXHQ9IHRsc19zd19zcGxpY2VfcmVhZDtcbm5ldC90bHMvdGxzX21haW4uYy05NTAtXHRvcHNbVExTX0JBU0VdW1RMU19TVyAgXS5wb2xsXHRcdD0gdGxzX3NrX3BvbGw7XG5uZXQvdGxzL3Rsc19tYWluLmM6OTUxOlx0b3BzW1RMU19CQVNFXVtUTFNfU1cgIF0ucmVhZF9zb2NrXHQ9IHRsc19zd19yZWFkX3NvY2s7XG5uZXQvdGxzL3Rsc19tYWluLmMtOTUyLVxubmV0L3Rscy90bHNfbWFpbi5jLTk1My1cdG9wc1tUTFNfU1cgIF1bVExTX1NXICBdID0gb3BzW1RMU19TVyAgXVtUTFNfQkFTRV07XG5uZXQvdGxzL3Rsc19tYWluLmM6OTU0Olx0b3BzW1RMU19TVyAgXVtUTFNfU1cgIF0uc3BsaWNlX3JlYWRcdD0gdGxzX3N3X3NwbGljZV9yZWFkO1xubmV0L3Rscy90bHNfbWFpbi5jLTk1NS1cdG9wc1tUTFNfU1cgIF1bVExTX1NXICBdLnBvbGxcdFx0PSB0bHNfc2tfcG9sbDtcbm5ldC90bHMvdGxzX21haW4uYzo5NTY6XHRvcHNbVExTX1NXICBdW1RMU19TVyAgXS5yZWFkX3NvY2tcdD0gdGxzX3N3X3JlYWRfc29jaztcbm5ldC90bHMvdGxzX21haW4uYy05NTctXG4tLVxubmV0L3Rscy90bHNfbWFpbi5jPTEwMDI9c3RhdGljIHZvaWQgYnVpbGRfcHJvdG9zKHN0cnVjdCBwcm90byBwcm90W1RMU19OVU1fQ09ORklHXVtUTFNfTlVNX0NPTkZJR10sXG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTEwMTUtXHRwcm90W1RMU19CQVNFXVtUTFNfU1ddID0gcHJvdFtUTFNfQkFTRV1bVExTX0JBU0VdO1xubmV0L3Rscy90bHNfbWFpbi5jOjEwMTY6XHRwcm90W1RMU19CQVNFXVtUTFNfU1ddLnJlY3Ztc2dcdFx0ICA9IHRsc19zd19yZWN2bXNnO1xubmV0L3Rscy90bHNfbWFpbi5jLTEwMTctXHRwcm90W1RMU19CQVNFXVtUTFNfU1ddLnNvY2tfaXNfcmVhZGFibGUgICA9IHRsc19zd19zb2NrX2lzX3JlYWRhYmxlO1xuLS1cbm5ldC90bHMvdGxzX21haW4uYy0xMDIwLVx0cHJvdFtUTFNfU1ddW1RMU19TV10gPSBwcm90W1RMU19TV11bVExTX0JBU0VdO1xubmV0L3Rscy90bHNfbWFpbi5jOjEwMjE6XHRwcm90W1RMU19TV11bVExTX1NXXS5yZWN2bXNnXHRcdD0gdGxzX3N3X3JlY3Ztc2c7XG5uZXQvdGxzL3Rsc19tYWluLmMtMTAyMi1cdHByb3RbVExTX1NXXVtUTFNfU1ddLnNvY2tfaXNfcmVhZGFibGUgICA9IHRsc19zd19zb2NrX2lzX3JlYWRhYmxlO1xuLS1cbm5ldC90bHMvdGxzX3N3LmM9MTgwND1zdGF0aWMgaW50IHRsc19yeF9pbnRyX2Vycm5vKGxvbmcgdGltZW8pXG4tLVxubmV0L3Rscy90bHNfc3cuYy0xODA4LVxubmV0L3Rscy90bHNfc3cuYzoxODA5OmludCB0bHNfc3dfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvdGxzL3Rsc19zdy5jLTE4MTAtXHRcdCAgIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvdGxzL3Rsc19zdy5jLTIwMjUtXG5uZXQvdGxzL3Rsc19zdy5jOjIwMjY6c3NpemVfdCB0bHNfc3dfc3BsaWNlX3JlYWQoc3RydWN0IHNvY2tldCAqc29jaywgIGxvZmZfdCAqcHBvcyxcbm5ldC90bHMvdGxzX3N3LmMtMjAyNy1cdFx0XHQgICBzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxuLS1cbm5ldC90bHMvdGxzX3N3LmMtMjEyOS1cbm5ldC90bHMvdGxzX3N3LmM6MjEzMDppbnQgdGxzX3N3X3JlYWRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxubmV0L3Rscy90bHNfc3cuYy0yMTMxLVx0XHQgICAgIHNrX3JlYWRfYWN0b3JfdCByZWFkX2FjdG9yKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYz0yOTE0PVRFU1RfRih0bHNfZXJyLCBiYWRfYXV0aClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmMtMjkzNC0gKiBhbmQgZmFpbHMgb24gdGhlIHJlY29yZCBpdHNlbGY7IHRoZSBjdHgtXHUwMDNlYXN5bmNfd2FpdC5lcnIgY2hlY2sgaW5cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYzoyOTM1OiAqIHRsc19zd19zcGxpY2VfcmVhZCgpIGlzIG5vdCB3aGF0IHN0b3BzIGl0LiBPbmx5IGFuIGFzeW5jaHJvbm91c1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jLTI5MzYtICogZGVjcnlwdCwgd2hpY2ggbmVlZHMgYSBUTFMgMS4yIHNvY2tldCBhbmQgYW4gQUVBRCBhZHZlcnRpc2luZ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTg2CgkJCQkJCQlvdXRwdXQ6IDE2CgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMgYW5kIHRoZWlyIHNpZ25pZmljYW5jZSwgYXMgdGhvdWdoIEkmIzM5O20gcHJvY2Vzc2luZyB0aGUgaW5mb3JtYXRpb246CgoqKktleSBUTFMgU29ja2V0IEZ1bmN0aW9uIEZvY3VzKioKCkFscmlnaHQsIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBpdCYjMzk7cyBjbGVhciB0aGF0IGB0bHNfc3dfcmVjdm1zZ2AsIGB0bHNfc3dfc3BsaWNlX3JlYWRgLCBhbmQgYHRsc19zd19yZWFkX3NvY2tgIGFyZSB0aGUgYnJlYWQgYW5kIGJ1dHRlciBmdW5jdGlvbnMgdG8gZm9jdXMgb24gZm9yIFRMUyBzb2NrZXQgSS9PLiBUaGV5JiMzOTtyZSBkZWZpbml0ZWx5IHRoZSBrZXkgc3ltYm9scyB0byB1bmRlcnN0YW5kIGhvdyBkYXRhIG1vdmVzIHdpdGhpbiB0aGUgVExTIGxheWVyLiBUaGUgZmFjdCB0aGF0IHRoZXkmIzM5O3JlIHRpZWQgdG8gdGhlIGBwcm90b2AgYW5kIGBwcm90b19vcHNgIHN0cnVjdHVyZXMgaXMgY3J1Y2lhbC4gSXQgbWVhbnMgdGhlc2UgZnVuY3Rpb25zIGFyZSBkaXJlY3RseSBpbnRlZ3JhdGVkIGludG8gdGhlIHN0YW5kYXJkIHNvY2tldCBvcGVyYXRpb25zIOKAkyB0aGUgYHJlY3Ztc2dgLCBgc3BsaWNlYCwgdGhlIGdlbmVyYWwgcmVhZCBwYXRocy4gSXQgbWVhbnMgdGhleSB3aWxsIGJlIHRyaWdnZXJlZCB3aGVuIHN0YW5kYXJkIHNvY2tldCBjYWxscyBhcmUgbWFkZSwgd2hpY2ggaXMgZXhhY3RseSB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBzZWUgdGhlIFRMUyBpbnRlcmFjdGlvbi4gTm93IEkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBmbGFncyB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLiBXaGF0IGFyZSB0aGUgYnVpbGQgcmVxdWlyZW1lbnRzIHRvIGJyaW5nIHRoaXMgVExTIGZ1bmN0aW9uYWxpdHkgdG8gbGlmZT8gV2hhdCBjb25maWd1cmF0aW9ucyBhcmUgbmVlZGVkIGZvciB0aGUgc3lzdGVtIHRvIHN1cHBvcnQgdGhpcyBmdW5jdGlvbmFsaXR5PwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUTFMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm0vbW0vS2NvbmZpZz04NzM9Y29uZmlnIEhBUkRFTl9CUkFOQ0hfSElTVE9SWVxuLS1cbmFyY2gvYXJtL21tL0tjb25maWctODgyLVxuYXJjaC9hcm0vbW0vS2NvbmZpZzo4ODM6Y29uZmlnIFRMU19SRUdfRU1VTFxuYXJjaC9hcm0vbW0vS2NvbmZpZy04ODQtXHRib29sXG4tLVxubmV0L3Rscy9LY29uZmlnLTQtI1xubmV0L3Rscy9LY29uZmlnOjU6Y29uZmlnIFRMU1xubmV0L3Rscy9LY29uZmlnLTYtXHR0cmlzdGF0ZSBcJiMzNDtUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC90bHMvS2NvbmZpZy0xOC1cbm5ldC90bHMvS2NvbmZpZzoxOTpjb25maWcgVExTX0RFVklDRVxubmV0L3Rscy9LY29uZmlnLTIwLVx0Ym9vbCBcJiMzNDtUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgSFcgb2ZmbG9hZFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDc5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVExTIENvbmZpZ3VyYXRpb24gQXNzZXNzbWVudCoqCgpPa2F5LCBzbyB0aGUgY29uZmlndXJhdGlvbiBpbiBxdWVzdGlvbiBpcyBgVExTYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGlzIHRoZSAqb25seSogbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyBzZWUuLi4gdGhlIHBhdGNoIGlzIG1vZGlmeWluZyBgbmV0L3Rscy90bHNfc3cuY2AuIEFoLCByaWdodCwgdGhhdCYjMzk7cyBmaXJtbHkgd2l0aGluIHRoZSBUTFMgc3Vic3lzdGVtLiBHaXZlbiB0aGF0IGNvbnRleHQsIGBDT05GSUdfVExTYCBhbG9uZSAqc2hvdWxkKiBiZSBzdWZmaWNpZW50LiBIb3dldmVyLCBJIGFsd2F5cyBtYWtlIHN1cmUuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcyB0aGF0IGFyZW4mIzM5O3QgaW1tZWRpYXRlbHkgb2J2aW91cy4gSXQmIzM5O3MgYSBnb29kIHByYWN0aWNlLCBldmVuIHdoZW4gaXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLCB0byBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC90bHMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFRMUyBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdGNvbmZpZyBUTFNcbiAgIDY6XHRcdHRyaXN0YXRlIFwmIzM0O1RyYW5zcG9ydCBMYXllciBTZWN1cml0eSBzdXBwb3J0XCYjMzQ7XG4gICA3Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDg6XHRcdHNlbGVjdCBDUllQVE9cbiAgIDk6XHRcdHNlbGVjdCBDUllQVE9fQUVTXG4gIDEwOlx0XHRzZWxlY3QgQ1JZUFRPX0dDTVxuICAxMTpcdFx0c2VsZWN0IE5FVF9TT0NLX01TR1xuICAxMjpcdFx0ZGVmYXVsdCBuXG4gIDEzOlx0XHRoZWxwXG4gIDE0Olx0XHRFbmFibGUga2VybmVsIHN1cHBvcnQgZm9yIFRMUyBwcm90b2NvbC4gVGhpcyBhbGxvd3Mgc3ltbWV0cmljXG4gIDE1Olx0XHRlbmNyeXB0aW9uIGhhbmRsaW5nIG9mIHRoZSBUTFMgcHJvdG9jb2wgdG8gYmUgZG9uZSBpbi1rZXJuZWwuXG4gIDE2Olx0XG4gIDE3Olx0XHRJZiB1bnN1cmUsIHNheSBOLlxuICAxODpcdFxuICAxOTpcdGNvbmZpZyBUTFNfREVWSUNFXG4gIDIwOlx0XHRib29sIFwmIzM0O1RyYW5zcG9ydCBMYXllciBTZWN1cml0eSBIVyBvZmZsb2FkXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTI6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5MzMKCQkJCQkJCW91dHB1dDogMTI4CgkJCQkJCQl0aG91Z2h0czogMzc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSB0aGUgZGVwZW5kZW5jeTogYENPTkZJR19UTFNgIHJlbGllcyBvbiBgSU5FVGAuICBgSU5FVGAgaXMgcHJhY3RpY2FsbHkgYWx3YXlzIGVuYWJsZWQsIHdoaWNoIG1lYW5zLCBlc3NlbnRpYWxseSwgSSBqdXN0IG5lZWQgdG8gZXhwbGljaXRseSBlbmFibGUgYFRMU2AuCgpUaGUgcGF0Y2ggYWxzbyBicmluZ3MgdXAgYFRMUyAxLjJgIGFuZCBgVExTIDEuM2AuICBCdXQsIGFzIGZhciBhcyBJIGNhbiB0ZWxsLCB0aGVyZSBhcmVuJiMzOTt0IGFueSBzZXBhcmF0ZSBjb25maWcgb3B0aW9ucyBzcGVjaWZpY2FsbHkgZm9yIHRob3NlOyBpdCYjMzk7cyBhbGwgaGFuZGxlZCB1bmRlciB0aGUgdW1icmVsbGEgb2YgYENPTkZJR19UTFNgLiBHb29kIHRvIGtub3cuCgpOZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNvZGUgY2hhbmdlcy4gSSBzZWUgdGhlc2UgbW9kaWZpZWQgZnVuY3Rpb25zOiBgdGxzX3J4X2VtcHR5X2RhdGFfcmVjYCAoc3RhdGljKSwgYHRsc19yeF9pbnRyX2Vycm5vYCAoc3RhdGljKSwgYHRsc19zd19yZWN2bXNnYCwgYHRsc19zd19zcGxpY2VfcmVhZGAsIGFuZCBgdGxzX3N3X3JlYWRfc29ja2AuIFRoZSBzdGF0aWMgb25lcywgSSBjYW4gZ2VuZXJhbGx5IGlnbm9yZSBmb3Igbm93LgoKUmlnaHQsIHNvIHRoZSBpbXBvcnRhbnQgc3ltYm9scyBoZXJlIGFyZSBgdGxzX3N3X3JlY3Ztc2dgLCBgdGxzX3N3X3NwbGljZV9yZWFkYCwgYW5kIGB0bHNfc3dfcmVhZF9zb2NrYC4KCkFscmlnaHQsIGl0JiMzOTtzIGFib3V0IGhhbmRsaW5nIGVtcHR5IGRhdGEgcmVjb3JkcyBpbiBUTFMgMS4yIGFuZCAxLjMuIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSB0byBob3cgVExTIHJlY2VpdmVzIGRhdGEuIEl0JiMzOTtzIGluIHRoZSByZWNlaXZlIHBhdGgsIGFuZCB0aGVzZSBzb2NrZXQgb3BlcmF0aW9ucywgbGlrZSBgcmVjdm1zZ2AsIGFyZSBkaXJlY3RseSBleHBvc2VkIHRvIHVzZXJzcGFjZS4KClRoYXQgdGVsbHMgbWUgSSBuZWVkIHRvIG1hcmsgYFdvcnRoRnV6emluZ2AgYXMgYHRydWVgLiAgVGhpcyBpcyBhIGNyaXRpY2FsIGFyZWEgZm9yIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzIGFyZSBjb25maWd1cmVkIGNvcnJlY3RseToKCiogICBgRW5hYmxlQ29uZmlnc2A6IGBbJiMzNDtUTFMmIzM0O11gIOKAkyBDaGVjay4KKiAgIGBGb2N1c1N5bWJvbHNgOiBgWyYjMzQ7dGxzX3N3X3JlY3Ztc2cmIzM0OywgJiMzNDt0bHNfc3dfc3BsaWNlX3JlYWQmIzM0OywgJiMzNDt0bHNfc3dfcmVhZF9zb2NrJiMzNDtdYCDigJMgQ2hlY2suCiogICBgUmVhc29uaW5nYDogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRMUyBzb2Z0d2FyZSByZWNlaXZlIHBhdGggdG8gcHJvcGVybHkgaGFuZGxlIHplcm8tbGVuZ3RoIGFwcGxpY2F0aW9uX2RhdGEgcmVjb3JkcyAoZW1wdHkgZGF0YSByZWNvcmRzKSBpbiBUTFMgMS4yIGFuZCBUTFMgMS4zLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBgcmVjdm1zZ2AsIGBzcGxpY2VfcmVhZGAsIGFuZCBgcmVhZF9zb2NrYCBvcGVyYXRpb25zIG9uIFRMUyBzb2NrZXRzLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLiYjMzQ7IOKAkyBQZXJmZWN0LCBjb3ZlcnMgdGhlIGNvcmUgaXNzdWUuCiogICBgV29ydGhGdXp6aW5nYDogYHRydWVgIOKAkyBUaGF0JiMzOTtzIHRoZSBjb3JyZWN0IGV2YWx1YXRpb24uCgpMb29rcyBnb29kLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTI6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RMUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Rsc19zd19yZWN2bXNnJiMzNDssCiAgICAmIzM0O3Rsc19zd19zcGxpY2VfcmVhZCYjMzQ7LAogICAgJiMzNDt0bHNfc3dfcmVhZF9zb2NrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUTFMgc29mdHdhcmUgcmVjZWl2ZSBwYXRoIHRvIHByb3Blcmx5IGhhbmRsZSB6ZXJvLWxlbmd0aCBhcHBsaWNhdGlvbl9kYXRhIHJlY29yZHMgKGVtcHR5IGRhdGEgcmVjb3JkcykgaW4gVExTIDEuMiBhbmQgVExTIDEuMy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgYHJlY3Ztc2dgLCBgc3BsaWNlX3JlYWRgLCBhbmQgYHJlYWRfc29ja2Agb3BlcmF0aW9ucyBvbiBUTFMgc29ja2V0cywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VExTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGxzX3N3X3JlY3Ztc2cmIzM0OywKICAgICYjMzQ7dGxzX3N3X3NwbGljZV9yZWFkJiMzNDssCiAgICAmIzM0O3Rsc19zd19yZWFkX3NvY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRMUyBzb2Z0d2FyZSByZWNlaXZlIHBhdGggdG8gcHJvcGVybHkgaGFuZGxlIHplcm8tbGVuZ3RoIGFwcGxpY2F0aW9uX2RhdGEgcmVjb3JkcyAoZW1wdHkgZGF0YSByZWNvcmRzKSBpbiBUTFMgMS4yIGFuZCBUTFMgMS4zLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBgcmVjdm1zZ2AsIGBzcGxpY2VfcmVhZGAsIGFuZCBgcmVhZF9zb2NrYCBvcGVyYXRpb25zIG9uIFRMUyBzb2NrZXRzLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MDI6MzQuMzQzOTc5MjQzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ3MTYzMTMxOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVExTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGxzX3N3X3JlY3Ztc2dcIixcbiAgICBcInRsc19zd19zcGxpY2VfcmVhZFwiLFxuICAgIFwidGxzX3N3X3JlYWRfc29ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUTFMgc29mdHdhcmUgcmVjZWl2ZSBwYXRoIHRvIHByb3Blcmx5IGhhbmRsZSB6ZXJvLWxlbmd0aCBhcHBsaWNhdGlvbl9kYXRhIHJlY29yZHMgKGVtcHR5IGRhdGEgcmVjb3JkcykgaW4gVExTIDEuMiBhbmQgVExTIDEuMy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgYHJlY3Ztc2dgLCBgc3BsaWNlX3JlYWRgLCBhbmQgYHJlYWRfc29ja2Agb3BlcmF0aW9ucyBvbiBUTFMgc29ja2V0cywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MDI6MzQuMzQzOTg3NTkzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDIyMTkzODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4OWZjMjIzMGI1Y2QyNDI4MDk5ZTNjYzVlM2JiMzllZGVhZTdiYjAwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDI3IDEyOjAyOjMyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC90bHMvdGxzX3N3LmMgYi9uZXQvdGxzL3Rsc19zdy5jXFxuaW5kZXggZDRhZmM5MGZkNzk2NmUuLjBlNzZiMzFiMTI5MTRiIDEwMDY0NFxcbi0tLSBhL25ldC90bHMvdGxzX3N3LmNcXG4rKysgYi9uZXQvdGxzL3Rsc19zdy5jXFxuQEAgLTM3LDYgKzM3LDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9idWcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdGltZWtlZXBpbmcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zcGxpY2UuaFxcdTAwM2VcXG5AQCAtMTc4Nyw2ICsxNzg4LDI0IEBAIHN0YXRpYyB2b2lkIHRsc19yeF9yZWFkZXJfdW5sb2NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRsc19zd19jb250ZXh0X3J4ICpjdHgpXFxuIFxcdHJlbGVhc2Vfc29jayhzayk7XFxuIH1cXG4gXFxuKy8qIFRMUyAxLjIgYW5kIFRMUyAxLjMgYm90aCBwZXJtaXQgYSB6ZXJvLWxlbmd0aCBhcHBsaWNhdGlvbl9kYXRhXFxuKyAqIHJlY29yZCBhcyBhIHRyYWZmaWMtYW5hbHlzaXMgY291bnRlcm1lYXN1cmUgKFJGQyA1MjQ2LCBTZWN0aW9uXFxuKyAqIDYuMi4xOyBSRkMgODQ0NiwgU2VjdGlvbiA1LjEpLlxcbisgKi9cXG4rc3RhdGljIGJvb2wgdGxzX3J4X2VtcHR5X2RhdGFfcmVjKGludCBsZW4sIHVuc2lnbmVkIGNoYXIgY29udHJvbClcXG4re1xcbitcXHRyZXR1cm4gIWxlbiBcXHUwMDI2XFx1MDAyNiBjb250cm9sID09IFRMU19SRUNPUkRfVFlQRV9EQVRBO1xcbit9XFxuK1xcbisvKiBzb2NrX2ludHJfZXJybm8oKSBtYXBzIHRoZSB6ZXJvIHRpbWVvIG9mIGEgcmVhZGVyIHRoYXQgY2Fubm90IHdhaXRcXG4rICogdG8gLUVJTlRSLCBidXQgc3VjaCBhIHJlYWRlciBoYXMgbm8gYmxvY2tpbmcgdG8gaW50ZXJydXB0LiBUaGUgcmVzdFxcbisgKiBvZiB0aGUgcmVjZWl2ZSBzaWRlIHJlcG9ydHMgdGhhdCBjYXNlIGFzIC1FQUdBSU4uXFxuKyAqL1xcbitzdGF0aWMgaW50IHRsc19yeF9pbnRyX2Vycm5vKGxvbmcgdGltZW8pXFxuK3tcXG4rXFx0cmV0dXJuIHRpbWVvID8gc29ja19pbnRyX2Vycm5vKHRpbWVvKSA6IC1FQUdBSU47XFxuK31cXG4rXFxuIGludCB0bHNfc3dfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdFxcdCAgIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4gXFx0XFx0ICAgc2l6ZV90IGxlbixcXG5AQCAtMTg1OCw5ICsxODc3LDEyIEBAIGludCB0bHNfc3dfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdFxcdCAgICB0bG0tXFx1MDAzZWNvbnRyb2wgPT0gVExTX1JFQ09SRF9UWVBFX0RBVEEpXFxuIFxcdFxcdFxcdGRhcmcuemMgPSB0cnVlO1xcbiBcXG4tXFx0XFx0LyogRG8gbm90IHVzZSBhc3luYyBtb2RlIGlmIHJlY29yZCBpcyBub24tZGF0YSAqL1xcbitcXHRcXHQvKiBEbyBub3QgdXNlIGFzeW5jIG1vZGUgaWYgcmVjb3JkIGlzIG5vbi1kYXRhLCBvciBpZiBpdFxcbitcXHRcXHQgKiBpcyBlbXB0eTogdGhlIHJlY2VpdmUgbG9vcCBmcmVlcyBhbiBlbXB0eSByZWNvcmQncyBza2IsXFxuK1xcdFxcdCAqIHNvIGl0cyBkZWNyeXB0aW9uIG11c3QgaGF2ZSBjb21wbGV0ZWQuXFxuK1xcdFxcdCAqL1xcbiBcXHRcXHRpZiAodGxtLVxcdTAwM2Vjb250cm9sID09IFRMU19SRUNPUkRfVFlQRV9EQVRBKVxcbi1cXHRcXHRcXHRkYXJnLmFzeW5jID0gY3R4LVxcdTAwM2Vhc3luY19jYXBhYmxlO1xcbitcXHRcXHRcXHRkYXJnLmFzeW5jID0gY3R4LVxcdTAwM2Vhc3luY19jYXBhYmxlIFxcdTAwMjZcXHUwMDI2IHRvX2RlY3J5cHQ7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0ZGFyZy5hc3luYyA9IGZhbHNlO1xcbiBcXG5AQCAtMTg5Niw2ICsxOTE4LDI3IEBAIGludCB0bHNfc3dfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdFxcdGNodW5rID0gcnhtLVxcdTAwM2VmdWxsX2xlbjtcXG4gXFx0XFx0dGxzX3J4X3JlY19kb25lKGN0eCk7XFxuIFxcbitcXHRcXHQvKiBBbiBlbXB0eSByZWNvcmQgYWR2YW5jZXMgbmVpdGhlciBsb29wIGJvdW5kLCBzbyBhIGZsb29kXFxuK1xcdFxcdCAqIG9mIHRoZW0gY2FuIGJlIGludGVycnVwdGVkIG9ubHkgaGVyZS4gT24gdGhlIHplcm8tY29weVxcbitcXHRcXHQgKiBwYXRoIGRhcmcuc2tiIGlzIHRoZSBzdHJwYXJzZXIgYW5jaG9yLCBhbHJlYWR5IHJlbGVhc2VkXFxuK1xcdFxcdCAqIGJ5IHRsc19yeF9yZWNfZG9uZSgpLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHRsc19yeF9lbXB0eV9kYXRhX3JlYyhjaHVuaywgY29udHJvbCkpIHtcXG4rXFx0XFx0XFx0bG9uZyB0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzIFxcdTAwMjYgTVNHX0RPTlRXQUlUKTtcXG4rXFxuK1xcdFxcdFxcdGlmICghZGFyZy56YylcXG4rXFx0XFx0XFx0XFx0Y29uc3VtZV9za2IoZGFyZy5za2IpO1xcbitcXG4rXFx0XFx0XFx0LyogQW4gZW1wdHkgcmVjb3JkIHN0aWxsIG1hcmtzIGEgYm91bmRhcnkuICovXFxuK1xcdFxcdFxcdG1zZy1cXHUwMDNlbXNnX2ZsYWdzIHw9IE1TR19FT1I7XFxuK1xcbitcXHRcXHRcXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcXG4rXFx0XFx0XFx0XFx0ZXJyID0gdGxzX3J4X2ludHJfZXJybm8odGltZW8pO1xcbitcXHRcXHRcXHRcXHRnb3RvIHJlY3ZfZW5kO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRpZiAoIWRhcmcuemMpIHtcXG4gXFx0XFx0XFx0Ym9vbCBwYXJ0aWFsbHlfY29uc3VtZWQgPSBjaHVuayBcXHUwMDNlIGxlbjtcXG4gXFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRhcmcuc2tiO1xcbkBAIC0xOTkwLDIxICsyMDMzLDMxIEBAIHNzaXplX3QgdGxzX3N3X3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssICBsb2ZmX3QgKnBwb3MsXFxuIFxcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXFx1MDAzZXNrO1xcbiBcXHRzdHJ1Y3QgdGxzX21zZyAqdGxtO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXHRib29sIHJlbGVhc2VkID0gdHJ1ZTtcXG4gXFx0c3NpemVfdCBjb3BpZWQgPSAwO1xcbitcXHRib29sIG5vbmJsb2NrO1xcbiBcXHRpbnQgY2h1bms7XFxuIFxcdGludCBlcnI7XFxuIFxcbi1cXHRlcnIgPSB0bHNfcnhfcmVhZGVyX2xvY2soc2ssIGN0eCwgZmxhZ3MgXFx1MDAyNiBTUExJQ0VfRl9OT05CTE9DSyk7XFxuK1xcdG5vbmJsb2NrID0gKGZsYWdzIFxcdTAwMjYgU1BMSUNFX0ZfTk9OQkxPQ0spIHx8XFxuK1xcdFxcdCAgIChzb2NrLVxcdTAwM2VmaWxlLVxcdTAwM2VmX2ZsYWdzIFxcdTAwMjYgT19OT05CTE9DSyk7XFxuK1xcbitcXHRlcnIgPSB0bHNfcnhfcmVhZGVyX2xvY2soc2ssIGN0eCwgbm9uYmxvY2spO1xcbiBcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuK1xcdC8qIElmIGNyeXB0byBmYWlsZWQgdGhlIGNvbm5lY3Rpb24gaXMgYnJva2VuICovXFxuK1xcdGVyciA9IGN0eC1cXHUwMDNlYXN5bmNfd2FpdC5lcnI7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gc3BsaWNlX3JlYWRfZW5kO1xcbitcXG4rcmV0cnk6XFxuIFxcdGlmICghc2tiX3F1ZXVlX2VtcHR5KFxcdTAwMjZjdHgtXFx1MDAzZXJ4X2xpc3QpKSB7XFxuIFxcdFxcdHNrYiA9IF9fc2tiX2RlcXVldWUoXFx1MDAyNmN0eC1cXHUwMDNlcnhfbGlzdCk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHN0cnVjdCB0bHNfZGVjcnlwdF9hcmcgZGFyZztcXG4gXFxuLVxcdFxcdGVyciA9IHRsc19yeF9yZWNfd2FpdChzaywgZmxhZ3MgXFx1MDAyNiBTUExJQ0VfRl9OT05CTE9DSyxcXG4tXFx0XFx0XFx0XFx0ICAgICAgdHJ1ZSwgZmFsc2UpO1xcbitcXHRcXHRlcnIgPSB0bHNfcnhfcmVjX3dhaXQoc2ssIG5vbmJsb2NrLCByZWxlYXNlZCwgZmFsc2UpO1xcbiBcXHRcXHRpZiAoZXJyIFxcdTAwM2M9IDApXFxuIFxcdFxcdFxcdGdvdG8gc3BsaWNlX3JlYWRfZW5kO1xcbiBcXG5AQCAtMjAxNiw2ICsyMDY5LDExIEBAIHNzaXplX3QgdGxzX3N3X3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssICBsb2ZmX3QgKnBwb3MsXFxuIFxcbiBcXHRcXHR0bHNfcnhfcmVjX2RvbmUoY3R4KTtcXG4gXFx0XFx0c2tiID0gZGFyZy5za2I7XFxuK1xcbitcXHRcXHQvKiBUaGUgc29ja2V0IGxvY2sgc3RheXMgaGVsZCB0byB0aGUgcmV0cnksIHNvIHRoZVxcbitcXHRcXHQgKiBhbmNob3IgdGhpcyB3YWl0IGxvYWRlZCBzdXJ2aXZlcyBpdC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJlbGVhc2VkID0gZmFsc2U7XFxuIFxcdH1cXG4gXFxuIFxcdHJ4bSA9IHN0cnBfbXNnKHNrYik7XFxuQEAgLTIwMjcsNiArMjA4NSwyMSBAQCBzc2l6ZV90IHRsc19zd19zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCAgbG9mZl90ICpwcG9zLFxcbiBcXHRcXHRnb3RvIHNwbGljZV9yZXF1ZXVlO1xcbiBcXHR9XFxuIFxcbitcXHQvKiBTcGxpY2luZyBhbiBlbXB0eSBkYXRhIHJlY29yZCBkZWxpdmVycyB6ZXJvIGJ5dGVzLCB3aGljaCB0aGVcXG4rXFx0ICogY2FsbGVyIHJlYWRzIGFzIEVPRi4gdGxzX3J4X3JlY193YWl0KCkgc2tpcHMgaXRzIHNpZ25hbCBjaGVja1xcbitcXHQgKiB3aGlsZSBhIHJlY29yZCBpcyBwYXJzZWQsIHNvIHRlc3QgZm9yIGEgc2lnbmFsIGhlcmUuXFxuK1xcdCAqL1xcbitcXHRpZiAodGxzX3J4X2VtcHR5X2RhdGFfcmVjKHJ4bS1cXHUwMDNlZnVsbF9sZW4sIHRsbS1cXHUwMDNlY29udHJvbCkpIHtcXG4rXFx0XFx0bG9uZyB0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIG5vbmJsb2NrKTtcXG4rXFxuK1xcdFxcdGNvbnN1bWVfc2tiKHNrYik7XFxuK1xcdFxcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xcbitcXHRcXHRcXHRlcnIgPSB0bHNfcnhfaW50cl9lcnJubyh0aW1lbyk7XFxuK1xcdFxcdFxcdGdvdG8gc3BsaWNlX3JlYWRfZW5kO1xcbitcXHRcXHR9XFxuK1xcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdH1cXG4rXFxuIFxcdGNodW5rID0gbWluX3QodW5zaWduZWQgaW50LCByeG0tXFx1MDAzZWZ1bGxfbGVuLCBsZW4pO1xcbiBcXHRjb3BpZWQgPSBza2Jfc3BsaWNlX2JpdHMoc2tiLCBzaywgcnhtLVxcdTAwM2VvZmZzZXQsIHBpcGUsIGNodW5rLCBmbGFncyk7XFxuIFxcdGlmIChjb3BpZWQgXFx1MDAzYyAwKVxcbkBAIC0yMDQ5LDYgKzIxMjIsMTEgQEAgc3NpemVfdCB0bHNfc3dfc3BsaWNlX3JlYWQoc3RydWN0IHNvY2tldCAqc29jaywgIGxvZmZfdCAqcHBvcyxcXG4gXFx0Z290byBzcGxpY2VfcmVhZF9lbmQ7XFxuIH1cXG4gXFxuKy8qIEJvdW5kIHRoZSB0aW1lIHRoYXQgY29uc2VjdXRpdmUgZW1wdHkgaW5ncmVzcyBkYXRhIHJlY29yZHMga2VlcFxcbisgKiB0aGUgc29ja2V0IGxvY2sgaGVsZCB3aXRob3V0IHJlbGVhc2luZyBpdC5cXG4rICovXFxuKyNkZWZpbmUgVExTX1JYX05PREFUQV9OUyBOU0VDX1BFUl9NU0VDXFxuK1xcbiBpbnQgdGxzX3N3X3JlYWRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxcbiBcXHRcXHQgICAgIHNrX3JlYWRfYWN0b3JfdCByZWFkX2FjdG9yKVxcbiB7XFxuQEAgLTIwNTcsNiArMjEzNSw3IEBAIGludCB0bHNfc3dfcmVhZF9zb2NrKHN0cnVjdCBzb2NrICpzaywgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXFxuIFxcdHN0cnVjdCB0bHNfcHJvdF9pbmZvICpwcm90ID0gXFx1MDAyNnRsc19jdHgtXFx1MDAzZXByb3RfaW5mbztcXG4gXFx0c3RydWN0IHN0cnBfbXNnICpyeG0gPSBOVUxMO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcXG4rXFx0dTY0IG5vZGF0YV9kZWFkbGluZSA9IDA7XFxuIFxcdHN0cnVjdCBza19wc29jayAqcHNvY2s7XFxuIFxcdHNpemVfdCBmbHVzaGVkX2F0ID0gMDtcXG4gXFx0Ym9vbCByZWxlYXNlZCA9IHRydWU7XFxuQEAgLTIxMTUsMTQgKzIxOTQsMjUgQEAgaW50IHRsc19zd19yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcXG4gXFx0XFx0XFx0Z290byByZWFkX3NvY2tfcmVxdWV1ZTtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0LyogQW4gZW1wdHkgZGF0YSByZWNvcmQgKGxlZ2FsIGluIFRMUyAxLjMpIGdpdmVzIGEgemVyb1xcbi1cXHRcXHQgKiByZWFkX2FjdG9yIHJldHVybiwgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSB0aGUgY29uc3VtZXJcXG4tXFx0XFx0ICogc3RhbGxpbmc7IHRoZSB1c2VkIFxcdTAwM2M9IDAgcGF0aCB3b3VsZCByZXF1ZXVlIGl0IGF0IHRoZVxcbi1cXHRcXHQgKiBoZWFkIG9mIHJ4X2xpc3QgYW5kIGJsb2NrIGFsbCBsYXRlciByZWNvcmRzLiBDb25zdW1lIGl0XFxuLVxcdFxcdCAqIGhlcmUgaW5zdGVhZC5cXG4rXFx0XFx0LyogQW4gZW1wdHkgZGF0YSByZWNvcmQgZ2l2ZXMgYSB6ZXJvIHJlYWRfYWN0b3IgcmV0dXJuLFxcbitcXHRcXHQgKiBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIHRoZSBjb25zdW1lciBzdGFsbGluZzsgdGhlXFxuK1xcdFxcdCAqIHVzZWQgXFx1MDAzYz0gMCBwYXRoIHdvdWxkIHJlcXVldWUgaXQgYXQgdGhlIGhlYWQgb2YgcnhfbGlzdFxcbitcXHRcXHQgKiBhbmQgYmxvY2sgYWxsIGxhdGVyIHJlY29yZHMuIENvbnN1bWUgaXQgaGVyZSBpbnN0ZWFkLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0aWYgKHJ4bS1cXHUwMDNlZnVsbF9sZW4gPT0gMCkge1xcbitcXHRcXHRpZiAodGxzX3J4X2VtcHR5X2RhdGFfcmVjKHJ4bS1cXHUwMDNlZnVsbF9sZW4sIHRsbS1cXHUwMDNlY29udHJvbCkpIHtcXG4rXFx0XFx0XFx0ZXJyID0gMDtcXG4gXFx0XFx0XFx0Y29uc3VtZV9za2Ioc2tiKTtcXG4rXFx0XFx0XFx0aWYgKCFub2RhdGFfZGVhZGxpbmUpIHtcXG4rXFx0XFx0XFx0XFx0bm9kYXRhX2RlYWRsaW5lID0ga3RpbWVfZ2V0X25zKCkgK1xcbitcXHRcXHRcXHRcXHRcXHRcXHQgIFRMU19SWF9OT0RBVEFfTlM7XFxuK1xcdFxcdFxcdH0gZWxzZSBpZiAoa3RpbWVfZ2V0X25zKCkgXFx1MDAzZT0gbm9kYXRhX2RlYWRsaW5lKSB7XFxuK1xcdFxcdFxcdFxcdC8qIFF1ZXVlZCByZWNvcmRzIHJhaXNlIG5vIG5ldyBza19kYXRhX3JlYWR5KCksXFxuK1xcdFxcdFxcdFxcdCAqIGFuZCB0bHNfcnhfcmVhZGVyX3JlbGVhc2UoKSBhbm5vdW5jZXMgb25seSB0b1xcbitcXHRcXHRcXHRcXHQgKiBzYXZlZF9kYXRhX3JlYWR5KCksIG5vdCB0aGUgY29uc3VtZXIncyBvd24uXFxuK1xcdFxcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRcXHRzay1cXHUwMDNlc2tfZGF0YV9yZWFkeShzayk7XFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHR9XFxuIFxcbkBAIC0yMTMzLDYgKzIyMjMsNyBAQCBpbnQgdGxzX3N3X3JlYWRfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxcbiBcXHRcXHRcXHRnb3RvIHJlYWRfc29ja19yZXF1ZXVlO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGNvcGllZCArPSB1c2VkO1xcbitcXHRcXHRub2RhdGFfZGVhZGxpbmUgPSAwO1xcbiBcXHRcXHRpZiAodXNlZCBcXHUwMDNjIHJ4bS1cXHUwMDNlZnVsbF9sZW4pIHtcXG4gXFx0XFx0XFx0cnhtLVxcdTAwM2VvZmZzZXQgKz0gdXNlZDtcXG4gXFx0XFx0XFx0cnhtLVxcdTAwM2VmdWxsX2xlbiAtPSB1c2VkO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmNcXG5pbmRleCBjYmRkM2VhMjhiOTk4Zi4uOGI2OGRiZmNjNTkyNDYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jXFxuQEAgLTI0LDYgKzI0LDcgQEBcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdF9oYXJuZXNzLmhcXFwiXFxuIFxcbiAjZGVmaW5lIFRMU19QQVlMT0FEX01BWF9MRU4gMTYzODRcXG4rI2RlZmluZSBUTFNfSERSX0xFTiA1XFxuICNkZWZpbmUgU09MX1RMUyAyODJcXG4gXFxuIHN0YXRpYyBpbnQgZmlwc19lbmFibGVkO1xcbkBAIC0yNTQ0LDYgKzI1NDUsOSBAQCBURVNUX0YoemVyb19sZW4sIHRlc3QpXFxuIFxcdGludCByZWNfb2ZmO1xcbiBcXHRpbnQgaTtcXG4gXFxuK1xcdGlmIChzZWxmLVxcdTAwM2Vub3RscylcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJubyBUTFMgc3VwcG9ydFxcXCIpO1xcbitcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDQgXFx1MDAyNlxcdTAwMjYgdmFyaWFudC1cXHUwMDNlcmVjc1tpXTsgaSsrKVxcbiBcXHRcXHRFWFBFQ1RfRVEoc2VuZChzZWxmLVxcdTAwM2VmZCwgdmFyaWFudC1cXHUwMDNlcmVjc1tpXS1cXHUwMDNlY2lwaGVyX2RhdGEsXFxuIFxcdFxcdFxcdCAgICAgICB2YXJpYW50LVxcdTAwM2VyZWNzW2ldLVxcdTAwM2VjaXBoZXJfbGVuLCAwKSxcXG5AQCAtMjU3Myw2ICsyNTc3LDI0OCBAQCBURVNUX0YoemVyb19sZW4sIHRlc3QpXFxuIFxcdH1cXG4gfTtcXG4gXFxuK3N0YXRpYyB2b2lkIHplcm9fbGVuX3NvY2tfcGFpcihzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsXFxuK1xcdFxcdFxcdCAgICAgICBpbnQgKmZkLCBpbnQgKmNmZCwgYm9vbCAqbm90bHMpXFxuK3tcXG4rXFx0c3RydWN0IHRsc19jcnlwdG9faW5mb19rZXlzIHRsczEyO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0dGxzX2NyeXB0b19pbmZvX2luaXQoVExTXzFfMl9WRVJTSU9OLCBUTFNfQ0lQSEVSX0FFU19DQ01fMTI4LFxcbitcXHRcXHRcXHQgICAgIFxcdTAwMjZ0bHMxMiwgMCk7XFxuK1xcbitcXHR1bHBfc29ja19wYWlyKF9tZXRhZGF0YSwgZmQsIGNmZCwgbm90bHMpO1xcbitcXHRpZiAoKm5vdGxzKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHQvKiBmZCBzdGF5cyBrZXlsZXNzOyB0aGVzZSBmaXh0dXJlcyBzZW5kIHJhdyByZWNvcmRzIG92ZXIgaXQgKi9cXG4rXFx0cmV0ID0gc2V0c29ja29wdCgqY2ZkLCBTT0xfVExTLCBUTFNfUlgsIFxcdTAwMjZ0bHMxMiwgdGxzMTIubGVuKTtcXG4rXFx0QVNTRVJUX0VRKHJldCwgMCk7XFxuK31cXG4rXFxuKy8qIFNlbmQgYSB2YXJpYW50J3MgcmVjb3JkczsgcmV0dXJuIHRoZSBsYXN0IG9uZSBjYXJyeWluZyBwYXlsb2FkICovXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmF3X3JlYyAqXFxuK3plcm9fbGVuX3NlbmRfcmVjcyhzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIGludCBmZCxcXG4rXFx0XFx0ICAgY29uc3Qgc3RydWN0IHJhd19yZWMgKmNvbnN0ICpyZWNzKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCByYXdfcmVjICpwYXlsb2FkID0gTlVMTDtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgNCBcXHUwMDI2XFx1MDAyNiByZWNzW2ldOyBpKyspIHtcXG4rXFx0XFx0RVhQRUNUX0VRKHNlbmQoZmQsIHJlY3NbaV0tXFx1MDAzZWNpcGhlcl9kYXRhLCByZWNzW2ldLVxcdTAwM2VjaXBoZXJfbGVuLCAwKSxcXG4rXFx0XFx0XFx0ICByZWNzW2ldLVxcdTAwM2VjaXBoZXJfbGVuKTtcXG4rXFx0XFx0aWYgKHJlY3NbaV0tXFx1MDAzZXBsYWluX2xlbilcXG4rXFx0XFx0XFx0cGF5bG9hZCA9IHJlY3NbaV07XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBwYXlsb2FkO1xcbit9XFxuK1xcbitGSVhUVVJFKHplcm9fbGVuX3BlZWspXFxuK3tcXG4rXFx0aW50IGZkLCBjZmQ7XFxuK1xcdGJvb2wgbm90bHM7XFxuK307XFxuK1xcbitGSVhUVVJFX1ZBUklBTlQoemVyb19sZW5fcGVlaylcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgcmF3X3JlYyAqcmVjc1s0XTtcXG4rXFx0c3NpemVfdCBwZWVrX3JldDtcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVF9BREQoemVyb19sZW5fcGVlaywgMGRhdGFfMGRhdGFfZGF0YSlcXG4re1xcbitcXHQucmVjcyA9IHsgXFx1MDAyNmlkMF9kYXRhX2wwLCBcXHUwMDI2aWQxX2RhdGFfbDAsIFxcdTAwMjZpZDJfZGF0YV9sMTEsIH0sXFxuK1xcdC5wZWVrX3JldCA9IDExLFxcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERCh6ZXJvX2xlbl9wZWVrLCAwZGF0YV8wZGF0YV8wZGF0YSlcXG4re1xcbitcXHQucmVjcyA9IHsgXFx1MDAyNmlkMF9kYXRhX2wwLCBcXHUwMDI2aWQxX2RhdGFfbDAsIFxcdTAwMjZpZDJfZGF0YV9sMCwgfSxcXG4rXFx0LnBlZWtfcmV0ID0gLUVBR0FJTixcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfU0VUVVAoemVyb19sZW5fcGVlaylcXG4re1xcbitcXHR6ZXJvX2xlbl9zb2NrX3BhaXIoX21ldGFkYXRhLCBcXHUwMDI2c2VsZi1cXHUwMDNlZmQsIFxcdTAwMjZzZWxmLVxcdTAwM2VjZmQsIFxcdTAwMjZzZWxmLVxcdTAwM2Vub3Rscyk7XFxuK31cXG4rXFxuK0ZJWFRVUkVfVEVBUkRPV04oemVyb19sZW5fcGVlaylcXG4re1xcbitcXHRjbG9zZShzZWxmLVxcdTAwM2VmZCk7XFxuK1xcdGNsb3NlKHNlbGYtXFx1MDAzZWNmZCk7XFxuK31cXG4rXFxuKy8qIFBlZWtpbmcgcGFzdCBhIHJ1biBvZiBlbXB0eSBkYXRhIHJlY29yZHMgbXVzdCByZWFjaCB0aGUgcGF5bG9hZFxcbisgKiBiZWhpbmQgdGhlbSwgYW5kIGEgcnVuIHdpdGggbm8gcGF5bG9hZCBiZWhpbmQgaXQgbXVzdCByZXBvcnQgRUFHQUlOXFxuKyAqIHJhdGhlciB0aGFuIHRoZSB6ZXJvIHJldHVybiB0aGF0IG1lYW5zIEVPRi5cXG4rICovXFxuK1RFU1RfRih6ZXJvX2xlbl9wZWVrLCB0ZXN0KVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCByYXdfcmVjICpwYXlsb2FkO1xcbitcXHR1bnNpZ25lZCBjaGFyIGJ1ZlsxMjhdO1xcbitcXHRzc2l6ZV90IHJldDtcXG4rXFxuK1xcdGlmIChzZWxmLVxcdTAwM2Vub3RscylcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJubyBUTFMgc3VwcG9ydFxcXCIpO1xcbitcXG4rXFx0cGF5bG9hZCA9IHplcm9fbGVuX3NlbmRfcmVjcyhfbWV0YWRhdGEsIHNlbGYtXFx1MDAzZWZkLCB2YXJpYW50LVxcdTAwM2VyZWNzKTtcXG4rXFxuK1xcdGlmICh2YXJpYW50LVxcdTAwM2VwZWVrX3JldCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0cmV0ID0gcmVjdihzZWxmLVxcdTAwM2VjZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksXFxuK1xcdFxcdFxcdCAgIE1TR19ET05UV0FJVCB8IE1TR19QRUVLKTtcXG4rXFx0XFx0RVhQRUNUX0VRKHJldCwgLTEpO1xcbitcXHRcXHRpZiAocmV0ID09IC0xKVxcbitcXHRcXHRcXHRFWFBFQ1RfRVEoZXJybm8sIC12YXJpYW50LVxcdTAwM2VwZWVrX3JldCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gcmVjdihzZWxmLVxcdTAwM2VjZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIE1TR19ET05UV0FJVCB8IE1TR19QRUVLKTtcXG4rXFx0RVhQRUNUX0VRKHJldCwgdmFyaWFudC1cXHUwMDNlcGVla19yZXQpO1xcbitcXHRpZiAocmV0ID09IHZhcmlhbnQtXFx1MDAzZXBlZWtfcmV0KVxcbitcXHRcXHRFWFBFQ1RfRVEobWVtY21wKGJ1ZiwgcGF5bG9hZC1cXHUwMDNlcGxhaW5fZGF0YSxcXG4rXFx0XFx0XFx0XFx0IHZhcmlhbnQtXFx1MDAzZXBlZWtfcmV0KSwgMCk7XFxuK1xcbitcXHQvKiBQZWVraW5nIGxlZnQgdGhlIHBheWxvYWQgaW4gcGxhY2UgZm9yIHRoZSByZWFkIHRoYXQgZm9sbG93cyAqL1xcbitcXHRyZXQgPSByZWN2KHNlbGYtXFx1MDAzZWNmZCwgYnVmLCBzaXplb2YoYnVmKSwgTVNHX0RPTlRXQUlUKTtcXG4rXFx0RVhQRUNUX0VRKHJldCwgdmFyaWFudC1cXHUwMDNlcGVla19yZXQpO1xcbitcXHRpZiAocmV0ID09IHZhcmlhbnQtXFx1MDAzZXBlZWtfcmV0KVxcbitcXHRcXHRFWFBFQ1RfRVEobWVtY21wKGJ1ZiwgcGF5bG9hZC1cXHUwMDNlcGxhaW5fZGF0YSxcXG4rXFx0XFx0XFx0XFx0IHZhcmlhbnQtXFx1MDAzZXBlZWtfcmV0KSwgMCk7XFxuK1xcbitcXHRyZXQgPSByZWN2KHNlbGYtXFx1MDAzZWNmZCwgYnVmLCBzaXplb2YoYnVmKSwgTVNHX0RPTlRXQUlUKTtcXG4rXFx0RVhQRUNUX0VRKHJldCwgLTEpO1xcbitcXHRpZiAocmV0ID09IC0xKVxcbitcXHRcXHRFWFBFQ1RfRVEoZXJybm8sIEVBR0FJTik7XFxuK31cXG4rXFxuK0ZJWFRVUkUoemVyb19sZW5fc3BsaWNlKVxcbit7XFxuK1xcdGludCBmZCwgY2ZkO1xcbitcXHRib29sIG5vdGxzO1xcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UKHplcm9fbGVuX3NwbGljZSlcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgcmF3X3JlYyAqcmVjc1s0XTtcXG4rXFx0c3NpemVfdCBzcGxpY2VfcmV0O1xcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERCh6ZXJvX2xlbl9zcGxpY2UsIDBkYXRhX2RhdGEpXFxuK3tcXG4rXFx0LnJlY3MgPSB7IFxcdTAwMjZpZDBfZGF0YV9sMCwgXFx1MDAyNmlkMV9kYXRhX2wxMSwgfSxcXG4rXFx0LnNwbGljZV9yZXQgPSAxMSxcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVF9BREQoemVyb19sZW5fc3BsaWNlLCAwZGF0YV8wZGF0YV9kYXRhKVxcbit7XFxuK1xcdC5yZWNzID0geyBcXHUwMDI2aWQwX2RhdGFfbDAsIFxcdTAwMjZpZDFfZGF0YV9sMCwgXFx1MDAyNmlkMl9kYXRhX2wxMSwgfSxcXG4rXFx0LnNwbGljZV9yZXQgPSAxMSxcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVF9BREQoemVyb19sZW5fc3BsaWNlLCAwZGF0YV8wZGF0YV8wZGF0YSlcXG4re1xcbitcXHQucmVjcyA9IHsgXFx1MDAyNmlkMF9kYXRhX2wwLCBcXHUwMDI2aWQxX2RhdGFfbDAsIFxcdTAwMjZpZDJfZGF0YV9sMCwgfSxcXG4rXFx0LnNwbGljZV9yZXQgPSAtRUFHQUlOLFxcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERCh6ZXJvX2xlbl9zcGxpY2UsIDBkYXRhXzBjdHJsKVxcbit7XFxuK1xcdC5yZWNzID0geyBcXHUwMDI2aWQwX2RhdGFfbDAsIFxcdTAwMjZpZDFfY3RybF9sMCwgfSxcXG4rXFx0LnNwbGljZV9yZXQgPSAtRUlOVkFMLFxcbit9O1xcbitcXG4rRklYVFVSRV9TRVRVUCh6ZXJvX2xlbl9zcGxpY2UpXFxuK3tcXG4rXFx0emVyb19sZW5fc29ja19wYWlyKF9tZXRhZGF0YSwgXFx1MDAyNnNlbGYtXFx1MDAzZWZkLCBcXHUwMDI2c2VsZi1cXHUwMDNlY2ZkLCBcXHUwMDI2c2VsZi1cXHUwMDNlbm90bHMpO1xcbit9XFxuK1xcbitGSVhUVVJFX1RFQVJET1dOKHplcm9fbGVuX3NwbGljZSlcXG4re1xcbitcXHRjbG9zZShzZWxmLVxcdTAwM2VmZCk7XFxuK1xcdGNsb3NlKHNlbGYtXFx1MDAzZWNmZCk7XFxuK31cXG4rXFxuKy8qIEFuIGVtcHR5IGRhdGEgcmVjb3JkIHNwbGljZXMgemVybyBieXRlcywgd2hpY2ggYSBzcGxpY2UgY2FsbGVyIHJlYWRzXFxuKyAqIGFzIEVPRi4gU3BsaWNpbmcgbXVzdCBza2lwIHBhc3Qgc3VjaCBhIHJlY29yZCB0byB0aGUgcGF5bG9hZCBiZWhpbmRcXG4rICogaXQsIGFuZCByZXBvcnQgRUFHQUlOIHdoZW4gYSBydW4gb2YgdGhlbSBoYXMgbm8gcGF5bG9hZCBiZWhpbmQgaXQuXFxuKyAqIEEgY29udHJvbCByZWNvcmQgYmVoaW5kIHRoZSBydW4gcmVwb3J0cyBFSU5WQUwsIHRoZSBlcnJvciBzcGxpY2VcXG4rICogYWxyZWFkeSByZXBvcnRzIGZvciBhIGNvbnRyb2wgcmVjb3JkIGl0IG1lZXRzIGZpcnN0LlxcbisgKi9cXG4rc3RhdGljIHZvaWRcXG4remVyb19sZW5fZG9fc3BsaWNlKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSxcXG4rXFx0XFx0ICAgc3RydWN0IF90ZXN0X2RhdGFfemVyb19sZW5fc3BsaWNlICpzZWxmLFxcbitcXHRcXHQgICBjb25zdCBzdHJ1Y3QgX2ZpeHR1cmVfdmFyaWFudF96ZXJvX2xlbl9zcGxpY2UgKnZhcmlhbnQsXFxuK1xcdFxcdCAgIHVuc2lnbmVkIGludCBzcGxpY2VfZmxhZ3MpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IHJhd19yZWMgKnBheWxvYWQ7XFxuK1xcdHVuc2lnbmVkIGNoYXIgYnVmWzEyOF07XFxuK1xcdHNzaXplX3QgcmV0O1xcbitcXHRpbnQgcFsyXTtcXG4rXFxuK1xcdEFTU0VSVF9HRShwaXBlKHApLCAwKTtcXG4rXFxuK1xcdHBheWxvYWQgPSB6ZXJvX2xlbl9zZW5kX3JlY3MoX21ldGFkYXRhLCBzZWxmLVxcdTAwM2VmZCwgdmFyaWFudC1cXHUwMDNlcmVjcyk7XFxuK1xcbitcXHRpZiAodmFyaWFudC1cXHUwMDNlc3BsaWNlX3JldCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0cmV0ID0gc3BsaWNlKHNlbGYtXFx1MDAzZWNmZCwgTlVMTCwgcFsxXSwgTlVMTCwgc2l6ZW9mKGJ1ZiksXFxuK1xcdFxcdFxcdCAgICAgc3BsaWNlX2ZsYWdzKTtcXG4rXFx0XFx0RVhQRUNUX0VRKHJldCwgLTEpO1xcbitcXHRcXHRpZiAocmV0ID09IC0xKVxcbitcXHRcXHRcXHRFWFBFQ1RfRVEoZXJybm8sIC12YXJpYW50LVxcdTAwM2VzcGxpY2VfcmV0KTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogQXNzZXJ0OiBhIHplcm8gcmV0dXJuLCB3aGljaCBpcyB3aGF0IGFuIHVuZml4ZWQga2VybmVsXFxuK1xcdFxcdCAqIGdpdmVzIGhlcmUsIGxlYXZlcyB0aGUgcGlwZSBlbXB0eSwgYW5kIHRoZSByZWFkIGJlbG93XFxuK1xcdFxcdCAqIHdvdWxkIHRoZW4gYmxvY2sgdW50aWwgdGhlIGhhcm5lc3MgdGltZW91dC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdEFTU0VSVF9FUShzcGxpY2Uoc2VsZi1cXHUwMDNlY2ZkLCBOVUxMLCBwWzFdLCBOVUxMLCBzaXplb2YoYnVmKSxcXG4rXFx0XFx0XFx0XFx0IHNwbGljZV9mbGFncyksIHZhcmlhbnQtXFx1MDAzZXNwbGljZV9yZXQpO1xcbitcXHRcXHRyZXQgPSByZWFkKHBbMF0sIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xcbitcXHRcXHRFWFBFQ1RfRVEocmV0LCB2YXJpYW50LVxcdTAwM2VzcGxpY2VfcmV0KTtcXG4rXFx0XFx0aWYgKHJldCA9PSB2YXJpYW50LVxcdTAwM2VzcGxpY2VfcmV0KVxcbitcXHRcXHRcXHRFWFBFQ1RfRVEobWVtY21wKGJ1ZiwgcGF5bG9hZC1cXHUwMDNlcGxhaW5fZGF0YSxcXG4rXFx0XFx0XFx0XFx0XFx0IHZhcmlhbnQtXFx1MDAzZXNwbGljZV9yZXQpLCAwKTtcXG4rXFxuK1xcdFxcdC8qIFJlYWNoaW5nIHRoZSBwYXlsb2FkIGNvbnN1bWVkIHRoZSBlbXB0eSByZWNvcmRzIGFoZWFkXFxuK1xcdFxcdCAqIG9mIGl0IHJhdGhlciB0aGFuIGxlYXZpbmcgdGhlbSBvbiB0aGUgcmVjZWl2ZSBxdWV1ZVxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmV0ID0gcmVjdihzZWxmLVxcdTAwM2VjZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIE1TR19ET05UV0FJVCk7XFxuK1xcdFxcdEVYUEVDVF9FUShyZXQsIC0xKTtcXG4rXFx0XFx0aWYgKHJldCA9PSAtMSlcXG4rXFx0XFx0XFx0RVhQRUNUX0VRKGVycm5vLCBFQUdBSU4pO1xcbitcXHR9XFxuK1xcbitcXHRjbG9zZShwWzBdKTtcXG4rXFx0Y2xvc2UocFsxXSk7XFxuK31cXG4rXFxuK1RFU1RfRih6ZXJvX2xlbl9zcGxpY2UsIHRlc3QpXFxuK3tcXG4rXFx0aWYgKHNlbGYtXFx1MDAzZW5vdGxzKVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcIm5vIFRMUyBzdXBwb3J0XFxcIik7XFxuK1xcbitcXHR6ZXJvX2xlbl9kb19zcGxpY2UoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCBTUExJQ0VfRl9OT05CTE9DSyk7XFxuK31cXG4rXFxuKy8qIFRoZSBzb2NrZXQncyBvd24gT19OT05CTE9DSyBnb3Zlcm5zIHRoZSByZWNvcmQgd2FpdCwgYXMgaXQgZG9lcyBvbiBhXFxuKyAqIHBsYWluIFRDUCBzb2NrZXQsIHNvIGEgc3BsaWNlIHRoYXQgb21pdHMgU1BMSUNFX0ZfTk9OQkxPQ0sgcmVhY2hlc1xcbisgKiB0aGUgc2FtZSBvdXRjb21lIGFzIG9uZSB0aGF0IHNldHMgaXQuIEFuIHVuZml4ZWQga2VybmVsIGRlcml2ZXMgdGhlXFxuKyAqIHdhaXQgZnJvbSBTUExJQ0VfRl9OT05CTE9DSyBhbG9uZSBhbmQgc2xlZXBzIGhlcmUgdW50aWwgdGhlIGhhcm5lc3NcXG4rICogdGltZW91dC5cXG4rICovXFxuK1RFU1RfRih6ZXJvX2xlbl9zcGxpY2UsIG5vbmJsb2NrX3NvY2tldClcXG4re1xcbitcXHRpbnQgc2ZsYWdzO1xcbitcXG4rXFx0aWYgKHNlbGYtXFx1MDAzZW5vdGxzKVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcIm5vIFRMUyBzdXBwb3J0XFxcIik7XFxuK1xcbitcXHRzZmxhZ3MgPSBmY250bChzZWxmLVxcdTAwM2VjZmQsIEZfR0VURkwsIDApO1xcbitcXHRBU1NFUlRfR0Uoc2ZsYWdzLCAwKTtcXG4rXFx0QVNTRVJUX0VRKGZjbnRsKHNlbGYtXFx1MDAzZWNmZCwgRl9TRVRGTCwgc2ZsYWdzIHwgT19OT05CTE9DSyksIDApO1xcbitcXG4rXFx0emVyb19sZW5fZG9fc3BsaWNlKF9tZXRhZGF0YSwgc2VsZiwgdmFyaWFudCwgMCk7XFxuK31cXG4rXFxuIEZJWFRVUkUodGxzX2VycilcXG4ge1xcbiBcXHRpbnQgZmQsIGNmZDtcXG5AQCAtMjYzOCwyOCArMjg4NCw4NSBAQCBURVNUX0YodGxzX2VyciwgYmFkX3JlYylcXG4gXFx0RVhQRUNUX0VRKGVycm5vLCBFQUdBSU4pO1xcbiB9XFxuIFxcbisvKiBFbmNyeXB0IGEgcmVjb3JkIG9uIHRoZSBUWC1vbmx5IHNvY2tldCBwYWlyLCBjb3JydXB0IGl0cyBsYXN0XFxuKyAqIGJ5dGUsIGFuZCBoYW5kIHRoZSByZXN1bHQgdG8gdGhlIHNvY2tldCB1bmRlciB0ZXN0LiBjZmQgY2FycmllcyBhXFxuKyAqIGJ5dGUgc3RyZWFtLCBzbyBvbmUgcmVjdigpIGNhbiByZXR1cm4gcGFydCBvZiBhIHJlY29yZDogdGFrZSB0aGVcXG4rICogZnJhZ21lbnQgbGVuZ3RoIGZyb20gdGhlIHJlY29yZCBoZWFkZXIgYW5kIHdhaXQgZm9yIHRoZSByZW1haW5kZXIuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCB0bHNfc2VuZF9iYWRfYXV0aChzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsXFxuK1xcdFxcdFxcdCAgICAgIGludCBmZCwgaW50IGNmZCwgaW50IGZkMilcXG4re1xcbitcXHRjaGFyIGJ1ZlsxMjhdO1xcbitcXHRpbnQgbGVuO1xcbitcXG4rXFx0bWVtcm5kKGJ1Ziwgc2l6ZW9mKGJ1ZikgLyAyKTtcXG4rXFx0QVNTRVJUX0VRKHNlbmQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikgLyAyLCAwKSwgc2l6ZW9mKGJ1ZikgLyAyKTtcXG4rXFxuK1xcdEFTU0VSVF9FUShyZWN2KGNmZCwgYnVmLCBUTFNfSERSX0xFTiwgTVNHX1dBSVRBTEwpLCBUTFNfSERSX0xFTik7XFxuK1xcbitcXHRsZW4gPSAoKHVuc2lnbmVkIGNoYXIpYnVmWzNdIFxcdTAwM2NcXHUwMDNjIDgpIHwgKHVuc2lnbmVkIGNoYXIpYnVmWzRdO1xcbitcXHRBU1NFUlRfR1QobGVuLCAwKTtcXG4rXFx0QVNTRVJUX0xFKGxlbiwgKGludClzaXplb2YoYnVmKSAtIFRMU19IRFJfTEVOKTtcXG4rXFxuK1xcdEFTU0VSVF9FUShyZWN2KGNmZCwgYnVmICsgVExTX0hEUl9MRU4sIGxlbiwgTVNHX1dBSVRBTEwpLCBsZW4pO1xcbitcXG4rXFx0YnVmW1RMU19IRFJfTEVOICsgbGVuIC0gMV0rKztcXG4rXFxuK1xcdEFTU0VSVF9FUShzZW5kKGZkMiwgYnVmLCBUTFNfSERSX0xFTiArIGxlbiwgMCksIFRMU19IRFJfTEVOICsgbGVuKTtcXG4rfVxcbitcXG4gVEVTVF9GKHRsc19lcnIsIGJhZF9hdXRoKVxcbiB7XFxuIFxcdGNoYXIgYnVmWzEyOF07XFxuLVxcdGludCBuO1xcbiBcXG4gXFx0aWYgKHNlbGYtXFx1MDAzZW5vdGxzKVxcbiBcXHRcXHRTS0lQKHJldHVybiwgXFxcIm5vIFRMUyBzdXBwb3J0XFxcIik7XFxuIFxcbi1cXHRtZW1ybmQoYnVmLCBzaXplb2YoYnVmKSAvIDIpO1xcbi1cXHRFWFBFQ1RfRVEoc2VuZChzZWxmLVxcdTAwM2VmZCwgYnVmLCBzaXplb2YoYnVmKSAvIDIsIDApLCBzaXplb2YoYnVmKSAvIDIpO1xcbi1cXHRuID0gcmVjdihzZWxmLVxcdTAwM2VjZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApO1xcbi1cXHRFWFBFQ1RfR1Qobiwgc2l6ZW9mKGJ1ZikgLyAyKTtcXG4tXFxuLVxcdGJ1ZltuIC0gMV0rKztcXG4rXFx0dGxzX3NlbmRfYmFkX2F1dGgoX21ldGFkYXRhLCBzZWxmLVxcdTAwM2VmZCwgc2VsZi1cXHUwMDNlY2ZkLCBzZWxmLVxcdTAwM2VmZDIpO1xcbiBcXG4tXFx0RVhQRUNUX0VRKHNlbmQoc2VsZi1cXHUwMDNlZmQyLCBidWYsIG4sIDApLCBuKTtcXG4gXFx0RVhQRUNUX0VRKHJlY3Yoc2VsZi1cXHUwMDNlY2ZkMiwgYnVmLCBzaXplb2YoYnVmKSwgMCksIC0xKTtcXG4gXFx0RVhQRUNUX0VRKGVycm5vLCBFQkFETVNHKTtcXG4gXFx0RVhQRUNUX0VRKHJlY3Yoc2VsZi1cXHUwMDNlY2ZkMiwgYnVmLCBzaXplb2YoYnVmKSwgMCksIC0xKTtcXG4gXFx0RVhQRUNUX0VRKGVycm5vLCBFQkFETVNHKTtcXG4gfVxcbiBcXG4rLyogQSByZWNvcmQgdGhhdCBkaWQgbm90IGF1dGhlbnRpY2F0ZSBicmVha3MgdGhlIGNvbm5lY3Rpb24gZm9yIGV2ZXJ5XFxuKyAqIHJlYWRlciwgc3BsaWNlIGluY2x1ZGVkLlxcbisgKlxcbisgKiBUaGUgdHdvIGRlY3J5cHQgcGF0aHMgcmVhY2ggdGhhdCByZXN1bHQgZGlmZmVyZW50bHkuIEEgc3luY2hyb25vdXNcXG4rICogZGVjcnlwdCBsZWF2ZXMgdGhlIHJlY29yZCBwYXJzZWQsIHNvIHRoZSBzcGxpY2UgcmUtcnVucyB0aGUgZGVjcnlwdFxcbisgKiBhbmQgZmFpbHMgb24gdGhlIHJlY29yZCBpdHNlbGY7IHRoZSBjdHgtXFx1MDAzZWFzeW5jX3dhaXQuZXJyIGNoZWNrIGluXFxuKyAqIHRsc19zd19zcGxpY2VfcmVhZCgpIGlzIG5vdCB3aGF0IHN0b3BzIGl0LiBPbmx5IGFuIGFzeW5jaHJvbm91c1xcbisgKiBkZWNyeXB0LCB3aGljaCBuZWVkcyBhIFRMUyAxLjIgc29ja2V0IGFuZCBhbiBBRUFEIGFkdmVydGlzaW5nXFxuKyAqIENSWVBUT19BTEdfQVNZTkMsIGNvbnN1bWVzIHRoZSByZWNvcmQgYmVmb3JlIHRoZSBmYWlsdXJlIGlzXFxuKyAqIHJlY29yZGVkLCBsZWF2aW5nIHRoYXQgY2hlY2sgdGhlIHNvbGUgcmVhc29uIHRoZSBzcGxpY2UgZmFpbHMuXFxuKyAqL1xcbitURVNUX0YodGxzX2VyciwgYmFkX2F1dGhfc3BsaWNlKVxcbit7XFxuK1xcdGNoYXIgYnVmWzEyOF07XFxuK1xcdHNzaXplX3QgcmV0O1xcbitcXHRpbnQgcFsyXTtcXG4rXFxuK1xcdGlmIChzZWxmLVxcdTAwM2Vub3RscylcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJubyBUTFMgc3VwcG9ydFxcXCIpO1xcbitcXG4rXFx0dGxzX3NlbmRfYmFkX2F1dGgoX21ldGFkYXRhLCBzZWxmLVxcdTAwM2VmZCwgc2VsZi1cXHUwMDNlY2ZkLCBzZWxmLVxcdTAwM2VmZDIpO1xcbitcXG4rXFx0RVhQRUNUX0VRKHJlY3Yoc2VsZi1cXHUwMDNlY2ZkMiwgYnVmLCBzaXplb2YoYnVmKSwgMCksIC0xKTtcXG4rXFx0RVhQRUNUX0VRKGVycm5vLCBFQkFETVNHKTtcXG4rXFxuK1xcdEFTU0VSVF9HRShwaXBlKHApLCAwKTtcXG4rXFxuK1xcdHJldCA9IHNwbGljZShzZWxmLVxcdTAwM2VjZmQyLCBOVUxMLCBwWzFdLCBOVUxMLCBzaXplb2YoYnVmKSxcXG4rXFx0XFx0ICAgICBTUExJQ0VfRl9OT05CTE9DSyk7XFxuK1xcdEVYUEVDVF9FUShyZXQsIC0xKTtcXG4rXFx0aWYgKHJldCA9PSAtMSlcXG4rXFx0XFx0RVhQRUNUX0VRKGVycm5vLCBFQkFETVNHKTtcXG4rXFxuK1xcdGNsb3NlKHBbMF0pO1xcbitcXHRjbG9zZShwWzFdKTtcXG4rfVxcbitcXG4gVEVTVF9GKHRsc19lcnIsIGJhZF9pbl9sYXJnZV9yZWFkKVxcbiB7XFxuIFxcdGNoYXIgdHh0WzNdWzY0XTtcXG5AQCAtMjkxNSw3ICszMjE4LDYgQEAgc3RhdGljIHNpemVfdCBwYXJzZV90bHNfcmVjb3JkcyhzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsXFxuIHtcXG4gXFx0Y29uc3QgX191OCAqcmVjID0gcnhfYnVmO1xcbiBcXHRzaXplX3QgdG90YWxfcGxhaW50ZXh0X3J4ID0gMDtcXG4tXFx0Y29uc3QgX191OCByZWNfaGVhZGVyX2xlbiA9IDU7XFxuIFxcbiBcXHR3aGlsZSAocmVjIFxcdTAwM2MgcnhfYnVmICsgcnhfbGVuKSB7XFxuIFxcdFxcdF9fdTE2IHJlY29yZF9wYXlsb2FkX2xlbjtcXG5AQCAtMjkzNSw3ICszMjM3LDcgQEAgc3RhdGljIHNpemVfdCBwYXJzZV90bHNfcmVjb3JkcyhzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsXFxuIFxcbiBcXHRcXHQvKiBQbGFpbnRleHQgbXVzdCBub3QgZXhjZWVkIHRoZSBzcGVjaWZpZWQgbGltaXQgKi9cXG4gXFx0XFx0QVNTRVJUX0xFKHBsYWludGV4dF9sZW4sIG1heF9wYXlsb2FkX2xlbik7XFxuLVxcdFxcdHJlYyArPSByZWNfaGVhZGVyX2xlbiArIHJlY29yZF9wYXlsb2FkX2xlbjtcXG4rXFx0XFx0cmVjICs9IFRMU19IRFJfTEVOICsgcmVjb3JkX3BheWxvYWRfbGVuO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gdG90YWxfcGxhaW50ZXh0X3J4O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjowMjozNS4wODcyOTI0NTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozMzk3Mjk5MTA1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUTFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0bHNfc3dfcmVjdm1zZ1wiLFxuICAgIFwidGxzX3N3X3NwbGljZV9yZWFkXCIsXG4gICAgXCJ0bHNfc3dfcmVhZF9zb2NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRMUyBzb2Z0d2FyZSByZWNlaXZlIHBhdGggdG8gcHJvcGVybHkgaGFuZGxlIHplcm8tbGVuZ3RoIGFwcGxpY2F0aW9uX2RhdGEgcmVjb3JkcyAoZW1wdHkgZGF0YSByZWNvcmRzKSBpbiBUTFMgMS4yIGFuZCBUTFMgMS4zLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBgcmVjdm1zZ2AsIGBzcGxpY2VfcmVhZGAsIGFuZCBgcmVhZF9zb2NrYCBvcGVyYXRpb25zIG9uIFRMUyBzb2NrZXRzLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4OWZjMjIzMGI1Y2QyNDI4MDk5ZTNjYzVlM2JiMzllZGVhZTdiYjAwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjcgMTI6MDI6MzIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdGxzL3Rsc19zdy5jIGIvbmV0L3Rscy90bHNfc3cuY1xuaW5kZXggZDRhZmM5MGZkNzk2NmUuLjBlNzZiMzFiMTI5MTRiIDEwMDY0NFxuLS0tIGEvbmV0L3Rscy90bHNfc3cuY1xuKysrIGIvbmV0L3Rscy90bHNfc3cuY1xuQEAgLTM3LDYgKzM3LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9idWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdGltZWtlZXBpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGxpY2UuaFx1MDAzZVxuQEAgLTE3ODcsNiArMTc4OCwyNCBAQCBzdGF0aWMgdm9pZCB0bHNfcnhfcmVhZGVyX3VubG9jayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0bHNfc3dfY29udGV4dF9yeCAqY3R4KVxuIFx0cmVsZWFzZV9zb2NrKHNrKTtcbiB9XG4gXG4rLyogVExTIDEuMiBhbmQgVExTIDEuMyBib3RoIHBlcm1pdCBhIHplcm8tbGVuZ3RoIGFwcGxpY2F0aW9uX2RhdGFcbisgKiByZWNvcmQgYXMgYSB0cmFmZmljLWFuYWx5c2lzIGNvdW50ZXJtZWFzdXJlIChSRkMgNTI0NiwgU2VjdGlvblxuKyAqIDYuMi4xOyBSRkMgODQ0NiwgU2VjdGlvbiA1LjEpLlxuKyAqL1xuK3N0YXRpYyBib29sIHRsc19yeF9lbXB0eV9kYXRhX3JlYyhpbnQgbGVuLCB1bnNpZ25lZCBjaGFyIGNvbnRyb2wpXG4re1xuK1x0cmV0dXJuICFsZW4gXHUwMDI2XHUwMDI2IGNvbnRyb2wgPT0gVExTX1JFQ09SRF9UWVBFX0RBVEE7XG4rfVxuK1xuKy8qIHNvY2tfaW50cl9lcnJubygpIG1hcHMgdGhlIHplcm8gdGltZW8gb2YgYSByZWFkZXIgdGhhdCBjYW5ub3Qgd2FpdFxuKyAqIHRvIC1FSU5UUiwgYnV0IHN1Y2ggYSByZWFkZXIgaGFzIG5vIGJsb2NraW5nIHRvIGludGVycnVwdC4gVGhlIHJlc3RcbisgKiBvZiB0aGUgcmVjZWl2ZSBzaWRlIHJlcG9ydHMgdGhhdCBjYXNlIGFzIC1FQUdBSU4uXG4rICovXG4rc3RhdGljIGludCB0bHNfcnhfaW50cl9lcnJubyhsb25nIHRpbWVvKVxuK3tcbitcdHJldHVybiB0aW1lbyA/IHNvY2tfaW50cl9lcnJubyh0aW1lbykgOiAtRUFHQUlOO1xuK31cbitcbiBpbnQgdGxzX3N3X3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLFxuIFx0XHQgICBzdHJ1Y3QgbXNnaGRyICptc2csXG4gXHRcdCAgIHNpemVfdCBsZW4sXG5AQCAtMTg1OCw5ICsxODc3LDEyIEBAIGludCB0bHNfc3dfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdCAgICB0bG0tXHUwMDNlY29udHJvbCA9PSBUTFNfUkVDT1JEX1RZUEVfREFUQSlcbiBcdFx0XHRkYXJnLnpjID0gdHJ1ZTtcbiBcbi1cdFx0LyogRG8gbm90IHVzZSBhc3luYyBtb2RlIGlmIHJlY29yZCBpcyBub24tZGF0YSAqL1xuK1x0XHQvKiBEbyBub3QgdXNlIGFzeW5jIG1vZGUgaWYgcmVjb3JkIGlzIG5vbi1kYXRhLCBvciBpZiBpdFxuK1x0XHQgKiBpcyBlbXB0eTogdGhlIHJlY2VpdmUgbG9vcCBmcmVlcyBhbiBlbXB0eSByZWNvcmQncyBza2IsXG4rXHRcdCAqIHNvIGl0cyBkZWNyeXB0aW9uIG11c3QgaGF2ZSBjb21wbGV0ZWQuXG4rXHRcdCAqL1xuIFx0XHRpZiAodGxtLVx1MDAzZWNvbnRyb2wgPT0gVExTX1JFQ09SRF9UWVBFX0RBVEEpXG4tXHRcdFx0ZGFyZy5hc3luYyA9IGN0eC1cdTAwM2Vhc3luY19jYXBhYmxlO1xuK1x0XHRcdGRhcmcuYXN5bmMgPSBjdHgtXHUwMDNlYXN5bmNfY2FwYWJsZSBcdTAwMjZcdTAwMjYgdG9fZGVjcnlwdDtcbiBcdFx0ZWxzZVxuIFx0XHRcdGRhcmcuYXN5bmMgPSBmYWxzZTtcbiBcbkBAIC0xODk2LDYgKzE5MTgsMjcgQEAgaW50IHRsc19zd19yZWN2bXNnKHN0cnVjdCBzb2NrICpzayxcbiBcdFx0Y2h1bmsgPSByeG0tXHUwMDNlZnVsbF9sZW47XG4gXHRcdHRsc19yeF9yZWNfZG9uZShjdHgpO1xuIFxuK1x0XHQvKiBBbiBlbXB0eSByZWNvcmQgYWR2YW5jZXMgbmVpdGhlciBsb29wIGJvdW5kLCBzbyBhIGZsb29kXG4rXHRcdCAqIG9mIHRoZW0gY2FuIGJlIGludGVycnVwdGVkIG9ubHkgaGVyZS4gT24gdGhlIHplcm8tY29weVxuK1x0XHQgKiBwYXRoIGRhcmcuc2tiIGlzIHRoZSBzdHJwYXJzZXIgYW5jaG9yLCBhbHJlYWR5IHJlbGVhc2VkXG4rXHRcdCAqIGJ5IHRsc19yeF9yZWNfZG9uZSgpLlxuK1x0XHQgKi9cbitcdFx0aWYgKHRsc19yeF9lbXB0eV9kYXRhX3JlYyhjaHVuaywgY29udHJvbCkpIHtcbitcdFx0XHRsb25nIHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCk7XG4rXG4rXHRcdFx0aWYgKCFkYXJnLnpjKVxuK1x0XHRcdFx0Y29uc3VtZV9za2IoZGFyZy5za2IpO1xuK1xuK1x0XHRcdC8qIEFuIGVtcHR5IHJlY29yZCBzdGlsbCBtYXJrcyBhIGJvdW5kYXJ5LiAqL1xuK1x0XHRcdG1zZy1cdTAwM2Vtc2dfZmxhZ3MgfD0gTVNHX0VPUjtcbitcbitcdFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbitcdFx0XHRcdGVyciA9IHRsc19yeF9pbnRyX2Vycm5vKHRpbWVvKTtcbitcdFx0XHRcdGdvdG8gcmVjdl9lbmQ7XG4rXHRcdFx0fVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4gXHRcdGlmICghZGFyZy56Yykge1xuIFx0XHRcdGJvb2wgcGFydGlhbGx5X2NvbnN1bWVkID0gY2h1bmsgXHUwMDNlIGxlbjtcbiBcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGFyZy5za2I7XG5AQCAtMTk5MCwyMSArMjAzMywzMSBAQCBzc2l6ZV90IHRsc19zd19zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCAgbG9mZl90ICpwcG9zLFxuIFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cdTAwM2VzaztcbiBcdHN0cnVjdCB0bHNfbXNnICp0bG07XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuK1x0Ym9vbCByZWxlYXNlZCA9IHRydWU7XG4gXHRzc2l6ZV90IGNvcGllZCA9IDA7XG4rXHRib29sIG5vbmJsb2NrO1xuIFx0aW50IGNodW5rO1xuIFx0aW50IGVycjtcbiBcbi1cdGVyciA9IHRsc19yeF9yZWFkZXJfbG9jayhzaywgY3R4LCBmbGFncyBcdTAwMjYgU1BMSUNFX0ZfTk9OQkxPQ0spO1xuK1x0bm9uYmxvY2sgPSAoZmxhZ3MgXHUwMDI2IFNQTElDRV9GX05PTkJMT0NLKSB8fFxuK1x0XHQgICAoc29jay1cdTAwM2VmaWxlLVx1MDAzZWZfZmxhZ3MgXHUwMDI2IE9fTk9OQkxPQ0spO1xuK1xuK1x0ZXJyID0gdGxzX3J4X3JlYWRlcl9sb2NrKHNrLCBjdHgsIG5vbmJsb2NrKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdHJldHVybiBlcnI7XG4gXG4rXHQvKiBJZiBjcnlwdG8gZmFpbGVkIHRoZSBjb25uZWN0aW9uIGlzIGJyb2tlbiAqL1xuK1x0ZXJyID0gY3R4LVx1MDAzZWFzeW5jX3dhaXQuZXJyO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBzcGxpY2VfcmVhZF9lbmQ7XG4rXG4rcmV0cnk6XG4gXHRpZiAoIXNrYl9xdWV1ZV9lbXB0eShcdTAwMjZjdHgtXHUwMDNlcnhfbGlzdCkpIHtcbiBcdFx0c2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZjdHgtXHUwMDNlcnhfbGlzdCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRzdHJ1Y3QgdGxzX2RlY3J5cHRfYXJnIGRhcmc7XG4gXG4tXHRcdGVyciA9IHRsc19yeF9yZWNfd2FpdChzaywgZmxhZ3MgXHUwMDI2IFNQTElDRV9GX05PTkJMT0NLLFxuLVx0XHRcdFx0ICAgICAgdHJ1ZSwgZmFsc2UpO1xuK1x0XHRlcnIgPSB0bHNfcnhfcmVjX3dhaXQoc2ssIG5vbmJsb2NrLCByZWxlYXNlZCwgZmFsc2UpO1xuIFx0XHRpZiAoZXJyIFx1MDAzYz0gMClcbiBcdFx0XHRnb3RvIHNwbGljZV9yZWFkX2VuZDtcbiBcbkBAIC0yMDE2LDYgKzIwNjksMTEgQEAgc3NpemVfdCB0bHNfc3dfc3BsaWNlX3JlYWQoc3RydWN0IHNvY2tldCAqc29jaywgIGxvZmZfdCAqcHBvcyxcbiBcbiBcdFx0dGxzX3J4X3JlY19kb25lKGN0eCk7XG4gXHRcdHNrYiA9IGRhcmcuc2tiO1xuK1xuK1x0XHQvKiBUaGUgc29ja2V0IGxvY2sgc3RheXMgaGVsZCB0byB0aGUgcmV0cnksIHNvIHRoZVxuK1x0XHQgKiBhbmNob3IgdGhpcyB3YWl0IGxvYWRlZCBzdXJ2aXZlcyBpdC5cbitcdFx0ICovXG4rXHRcdHJlbGVhc2VkID0gZmFsc2U7XG4gXHR9XG4gXG4gXHRyeG0gPSBzdHJwX21zZyhza2IpO1xuQEAgLTIwMjcsNiArMjA4NSwyMSBAQCBzc2l6ZV90IHRsc19zd19zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCAgbG9mZl90ICpwcG9zLFxuIFx0XHRnb3RvIHNwbGljZV9yZXF1ZXVlO1xuIFx0fVxuIFxuK1x0LyogU3BsaWNpbmcgYW4gZW1wdHkgZGF0YSByZWNvcmQgZGVsaXZlcnMgemVybyBieXRlcywgd2hpY2ggdGhlXG4rXHQgKiBjYWxsZXIgcmVhZHMgYXMgRU9GLiB0bHNfcnhfcmVjX3dhaXQoKSBza2lwcyBpdHMgc2lnbmFsIGNoZWNrXG4rXHQgKiB3aGlsZSBhIHJlY29yZCBpcyBwYXJzZWQsIHNvIHRlc3QgZm9yIGEgc2lnbmFsIGhlcmUuXG4rXHQgKi9cbitcdGlmICh0bHNfcnhfZW1wdHlfZGF0YV9yZWMocnhtLVx1MDAzZWZ1bGxfbGVuLCB0bG0tXHUwMDNlY29udHJvbCkpIHtcbitcdFx0bG9uZyB0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIG5vbmJsb2NrKTtcbitcbitcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbitcdFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XG4rXHRcdFx0ZXJyID0gdGxzX3J4X2ludHJfZXJybm8odGltZW8pO1xuK1x0XHRcdGdvdG8gc3BsaWNlX3JlYWRfZW5kO1xuK1x0XHR9XG4rXHRcdGdvdG8gcmV0cnk7XG4rXHR9XG4rXG4gXHRjaHVuayA9IG1pbl90KHVuc2lnbmVkIGludCwgcnhtLVx1MDAzZWZ1bGxfbGVuLCBsZW4pO1xuIFx0Y29waWVkID0gc2tiX3NwbGljZV9iaXRzKHNrYiwgc2ssIHJ4bS1cdTAwM2VvZmZzZXQsIHBpcGUsIGNodW5rLCBmbGFncyk7XG4gXHRpZiAoY29waWVkIFx1MDAzYyAwKVxuQEAgLTIwNDksNiArMjEyMiwxMSBAQCBzc2l6ZV90IHRsc19zd19zcGxpY2VfcmVhZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCAgbG9mZl90ICpwcG9zLFxuIFx0Z290byBzcGxpY2VfcmVhZF9lbmQ7XG4gfVxuIFxuKy8qIEJvdW5kIHRoZSB0aW1lIHRoYXQgY29uc2VjdXRpdmUgZW1wdHkgaW5ncmVzcyBkYXRhIHJlY29yZHMga2VlcFxuKyAqIHRoZSBzb2NrZXQgbG9jayBoZWxkIHdpdGhvdXQgcmVsZWFzaW5nIGl0LlxuKyAqL1xuKyNkZWZpbmUgVExTX1JYX05PREFUQV9OUyBOU0VDX1BFUl9NU0VDXG4rXG4gaW50IHRsc19zd19yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbiBcdFx0ICAgICBza19yZWFkX2FjdG9yX3QgcmVhZF9hY3RvcilcbiB7XG5AQCAtMjA1Nyw2ICsyMTM1LDcgQEAgaW50IHRsc19zd19yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbiBcdHN0cnVjdCB0bHNfcHJvdF9pbmZvICpwcm90ID0gXHUwMDI2dGxzX2N0eC1cdTAwM2Vwcm90X2luZm87XG4gXHRzdHJ1Y3Qgc3RycF9tc2cgKnJ4bSA9IE5VTEw7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcbitcdHU2NCBub2RhdGFfZGVhZGxpbmUgPSAwO1xuIFx0c3RydWN0IHNrX3Bzb2NrICpwc29jaztcbiBcdHNpemVfdCBmbHVzaGVkX2F0ID0gMDtcbiBcdGJvb2wgcmVsZWFzZWQgPSB0cnVlO1xuQEAgLTIxMTUsMTQgKzIxOTQsMjUgQEAgaW50IHRsc19zd19yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbiBcdFx0XHRnb3RvIHJlYWRfc29ja19yZXF1ZXVlO1xuIFx0XHR9XG4gXG4tXHRcdC8qIEFuIGVtcHR5IGRhdGEgcmVjb3JkIChsZWdhbCBpbiBUTFMgMS4zKSBnaXZlcyBhIHplcm9cbi1cdFx0ICogcmVhZF9hY3RvciByZXR1cm4sIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gdGhlIGNvbnN1bWVyXG4tXHRcdCAqIHN0YWxsaW5nOyB0aGUgdXNlZCBcdTAwM2M9IDAgcGF0aCB3b3VsZCByZXF1ZXVlIGl0IGF0IHRoZVxuLVx0XHQgKiBoZWFkIG9mIHJ4X2xpc3QgYW5kIGJsb2NrIGFsbCBsYXRlciByZWNvcmRzLiBDb25zdW1lIGl0XG4tXHRcdCAqIGhlcmUgaW5zdGVhZC5cbitcdFx0LyogQW4gZW1wdHkgZGF0YSByZWNvcmQgZ2l2ZXMgYSB6ZXJvIHJlYWRfYWN0b3IgcmV0dXJuLFxuK1x0XHQgKiBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIHRoZSBjb25zdW1lciBzdGFsbGluZzsgdGhlXG4rXHRcdCAqIHVzZWQgXHUwMDNjPSAwIHBhdGggd291bGQgcmVxdWV1ZSBpdCBhdCB0aGUgaGVhZCBvZiByeF9saXN0XG4rXHRcdCAqIGFuZCBibG9jayBhbGwgbGF0ZXIgcmVjb3Jkcy4gQ29uc3VtZSBpdCBoZXJlIGluc3RlYWQuXG4gXHRcdCAqL1xuLVx0XHRpZiAocnhtLVx1MDAzZWZ1bGxfbGVuID09IDApIHtcbitcdFx0aWYgKHRsc19yeF9lbXB0eV9kYXRhX3JlYyhyeG0tXHUwMDNlZnVsbF9sZW4sIHRsbS1cdTAwM2Vjb250cm9sKSkge1xuK1x0XHRcdGVyciA9IDA7XG4gXHRcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbitcdFx0XHRpZiAoIW5vZGF0YV9kZWFkbGluZSkge1xuK1x0XHRcdFx0bm9kYXRhX2RlYWRsaW5lID0ga3RpbWVfZ2V0X25zKCkgK1xuK1x0XHRcdFx0XHRcdCAgVExTX1JYX05PREFUQV9OUztcbitcdFx0XHR9IGVsc2UgaWYgKGt0aW1lX2dldF9ucygpIFx1MDAzZT0gbm9kYXRhX2RlYWRsaW5lKSB7XG4rXHRcdFx0XHQvKiBRdWV1ZWQgcmVjb3JkcyByYWlzZSBubyBuZXcgc2tfZGF0YV9yZWFkeSgpLFxuK1x0XHRcdFx0ICogYW5kIHRsc19yeF9yZWFkZXJfcmVsZWFzZSgpIGFubm91bmNlcyBvbmx5IHRvXG4rXHRcdFx0XHQgKiBzYXZlZF9kYXRhX3JlYWR5KCksIG5vdCB0aGUgY29uc3VtZXIncyBvd24uXG4rXHRcdFx0XHQgKi9cbitcdFx0XHRcdHNrLVx1MDAzZXNrX2RhdGFfcmVhZHkoc2spO1xuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG5AQCAtMjEzMyw2ICsyMjIzLDcgQEAgaW50IHRsc19zd19yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbiBcdFx0XHRnb3RvIHJlYWRfc29ja19yZXF1ZXVlO1xuIFx0XHR9XG4gXHRcdGNvcGllZCArPSB1c2VkO1xuK1x0XHRub2RhdGFfZGVhZGxpbmUgPSAwO1xuIFx0XHRpZiAodXNlZCBcdTAwM2MgcnhtLVx1MDAzZWZ1bGxfbGVuKSB7XG4gXHRcdFx0cnhtLVx1MDAzZW9mZnNldCArPSB1c2VkO1xuIFx0XHRcdHJ4bS1cdTAwM2VmdWxsX2xlbiAtPSB1c2VkO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuY1xuaW5kZXggY2JkZDNlYTI4Yjk5OGYuLjhiNjhkYmZjYzU5MjQ2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmNcbkBAIC0yNCw2ICsyNCw3IEBAXG4gI2luY2x1ZGUgXCJrc2VsZnRlc3RfaGFybmVzcy5oXCJcbiBcbiAjZGVmaW5lIFRMU19QQVlMT0FEX01BWF9MRU4gMTYzODRcbisjZGVmaW5lIFRMU19IRFJfTEVOIDVcbiAjZGVmaW5lIFNPTF9UTFMgMjgyXG4gXG4gc3RhdGljIGludCBmaXBzX2VuYWJsZWQ7XG5AQCAtMjU0NCw2ICsyNTQ1LDkgQEAgVEVTVF9GKHplcm9fbGVuLCB0ZXN0KVxuIFx0aW50IHJlY19vZmY7XG4gXHRpbnQgaTtcbiBcbitcdGlmIChzZWxmLVx1MDAzZW5vdGxzKVxuK1x0XHRTS0lQKHJldHVybiwgXCJubyBUTFMgc3VwcG9ydFwiKTtcbitcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDQgXHUwMDI2XHUwMDI2IHZhcmlhbnQtXHUwMDNlcmVjc1tpXTsgaSsrKVxuIFx0XHRFWFBFQ1RfRVEoc2VuZChzZWxmLVx1MDAzZWZkLCB2YXJpYW50LVx1MDAzZXJlY3NbaV0tXHUwMDNlY2lwaGVyX2RhdGEsXG4gXHRcdFx0ICAgICAgIHZhcmlhbnQtXHUwMDNlcmVjc1tpXS1cdTAwM2VjaXBoZXJfbGVuLCAwKSxcbkBAIC0yNTczLDYgKzI1NzcsMjQ4IEBAIFRFU1RfRih6ZXJvX2xlbiwgdGVzdClcbiBcdH1cbiB9O1xuIFxuK3N0YXRpYyB2b2lkIHplcm9fbGVuX3NvY2tfcGFpcihzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsXG4rXHRcdFx0ICAgICAgIGludCAqZmQsIGludCAqY2ZkLCBib29sICpub3Rscylcbit7XG4rXHRzdHJ1Y3QgdGxzX2NyeXB0b19pbmZvX2tleXMgdGxzMTI7XG4rXHRpbnQgcmV0O1xuK1xuK1x0dGxzX2NyeXB0b19pbmZvX2luaXQoVExTXzFfMl9WRVJTSU9OLCBUTFNfQ0lQSEVSX0FFU19DQ01fMTI4LFxuK1x0XHRcdCAgICAgXHUwMDI2dGxzMTIsIDApO1xuK1xuK1x0dWxwX3NvY2tfcGFpcihfbWV0YWRhdGEsIGZkLCBjZmQsIG5vdGxzKTtcbitcdGlmICgqbm90bHMpXG4rXHRcdHJldHVybjtcbitcbitcdC8qIGZkIHN0YXlzIGtleWxlc3M7IHRoZXNlIGZpeHR1cmVzIHNlbmQgcmF3IHJlY29yZHMgb3ZlciBpdCAqL1xuK1x0cmV0ID0gc2V0c29ja29wdCgqY2ZkLCBTT0xfVExTLCBUTFNfUlgsIFx1MDAyNnRsczEyLCB0bHMxMi5sZW4pO1xuK1x0QVNTRVJUX0VRKHJldCwgMCk7XG4rfVxuK1xuKy8qIFNlbmQgYSB2YXJpYW50J3MgcmVjb3JkczsgcmV0dXJuIHRoZSBsYXN0IG9uZSBjYXJyeWluZyBwYXlsb2FkICovXG4rc3RhdGljIGNvbnN0IHN0cnVjdCByYXdfcmVjICpcbit6ZXJvX2xlbl9zZW5kX3JlY3Moc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLCBpbnQgZmQsXG4rXHRcdCAgIGNvbnN0IHN0cnVjdCByYXdfcmVjICpjb25zdCAqcmVjcylcbit7XG4rXHRjb25zdCBzdHJ1Y3QgcmF3X3JlYyAqcGF5bG9hZCA9IE5VTEw7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDQgXHUwMDI2XHUwMDI2IHJlY3NbaV07IGkrKykge1xuK1x0XHRFWFBFQ1RfRVEoc2VuZChmZCwgcmVjc1tpXS1cdTAwM2VjaXBoZXJfZGF0YSwgcmVjc1tpXS1cdTAwM2VjaXBoZXJfbGVuLCAwKSxcbitcdFx0XHQgIHJlY3NbaV0tXHUwMDNlY2lwaGVyX2xlbik7XG4rXHRcdGlmIChyZWNzW2ldLVx1MDAzZXBsYWluX2xlbilcbitcdFx0XHRwYXlsb2FkID0gcmVjc1tpXTtcbitcdH1cbitcbitcdHJldHVybiBwYXlsb2FkO1xuK31cbitcbitGSVhUVVJFKHplcm9fbGVuX3BlZWspXG4re1xuK1x0aW50IGZkLCBjZmQ7XG4rXHRib29sIG5vdGxzO1xuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UKHplcm9fbGVuX3BlZWspXG4re1xuK1x0Y29uc3Qgc3RydWN0IHJhd19yZWMgKnJlY3NbNF07XG4rXHRzc2l6ZV90IHBlZWtfcmV0O1xuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UX0FERCh6ZXJvX2xlbl9wZWVrLCAwZGF0YV8wZGF0YV9kYXRhKVxuK3tcbitcdC5yZWNzID0geyBcdTAwMjZpZDBfZGF0YV9sMCwgXHUwMDI2aWQxX2RhdGFfbDAsIFx1MDAyNmlkMl9kYXRhX2wxMSwgfSxcbitcdC5wZWVrX3JldCA9IDExLFxuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UX0FERCh6ZXJvX2xlbl9wZWVrLCAwZGF0YV8wZGF0YV8wZGF0YSlcbit7XG4rXHQucmVjcyA9IHsgXHUwMDI2aWQwX2RhdGFfbDAsIFx1MDAyNmlkMV9kYXRhX2wwLCBcdTAwMjZpZDJfZGF0YV9sMCwgfSxcbitcdC5wZWVrX3JldCA9IC1FQUdBSU4sXG4rfTtcbitcbitGSVhUVVJFX1NFVFVQKHplcm9fbGVuX3BlZWspXG4re1xuK1x0emVyb19sZW5fc29ja19wYWlyKF9tZXRhZGF0YSwgXHUwMDI2c2VsZi1cdTAwM2VmZCwgXHUwMDI2c2VsZi1cdTAwM2VjZmQsIFx1MDAyNnNlbGYtXHUwMDNlbm90bHMpO1xuK31cbitcbitGSVhUVVJFX1RFQVJET1dOKHplcm9fbGVuX3BlZWspXG4re1xuK1x0Y2xvc2Uoc2VsZi1cdTAwM2VmZCk7XG4rXHRjbG9zZShzZWxmLVx1MDAzZWNmZCk7XG4rfVxuK1xuKy8qIFBlZWtpbmcgcGFzdCBhIHJ1biBvZiBlbXB0eSBkYXRhIHJlY29yZHMgbXVzdCByZWFjaCB0aGUgcGF5bG9hZFxuKyAqIGJlaGluZCB0aGVtLCBhbmQgYSBydW4gd2l0aCBubyBwYXlsb2FkIGJlaGluZCBpdCBtdXN0IHJlcG9ydCBFQUdBSU5cbisgKiByYXRoZXIgdGhhbiB0aGUgemVybyByZXR1cm4gdGhhdCBtZWFucyBFT0YuXG4rICovXG4rVEVTVF9GKHplcm9fbGVuX3BlZWssIHRlc3QpXG4re1xuK1x0Y29uc3Qgc3RydWN0IHJhd19yZWMgKnBheWxvYWQ7XG4rXHR1bnNpZ25lZCBjaGFyIGJ1ZlsxMjhdO1xuK1x0c3NpemVfdCByZXQ7XG4rXG4rXHRpZiAoc2VsZi1cdTAwM2Vub3RscylcbitcdFx0U0tJUChyZXR1cm4sIFwibm8gVExTIHN1cHBvcnRcIik7XG4rXG4rXHRwYXlsb2FkID0gemVyb19sZW5fc2VuZF9yZWNzKF9tZXRhZGF0YSwgc2VsZi1cdTAwM2VmZCwgdmFyaWFudC1cdTAwM2VyZWNzKTtcbitcbitcdGlmICh2YXJpYW50LVx1MDAzZXBlZWtfcmV0IFx1MDAzYyAwKSB7XG4rXHRcdHJldCA9IHJlY3Yoc2VsZi1cdTAwM2VjZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksXG4rXHRcdFx0ICAgTVNHX0RPTlRXQUlUIHwgTVNHX1BFRUspO1xuK1x0XHRFWFBFQ1RfRVEocmV0LCAtMSk7XG4rXHRcdGlmIChyZXQgPT0gLTEpXG4rXHRcdFx0RVhQRUNUX0VRKGVycm5vLCAtdmFyaWFudC1cdTAwM2VwZWVrX3JldCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHJldCA9IHJlY3Yoc2VsZi1cdTAwM2VjZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIE1TR19ET05UV0FJVCB8IE1TR19QRUVLKTtcbitcdEVYUEVDVF9FUShyZXQsIHZhcmlhbnQtXHUwMDNlcGVla19yZXQpO1xuK1x0aWYgKHJldCA9PSB2YXJpYW50LVx1MDAzZXBlZWtfcmV0KVxuK1x0XHRFWFBFQ1RfRVEobWVtY21wKGJ1ZiwgcGF5bG9hZC1cdTAwM2VwbGFpbl9kYXRhLFxuK1x0XHRcdFx0IHZhcmlhbnQtXHUwMDNlcGVla19yZXQpLCAwKTtcbitcbitcdC8qIFBlZWtpbmcgbGVmdCB0aGUgcGF5bG9hZCBpbiBwbGFjZSBmb3IgdGhlIHJlYWQgdGhhdCBmb2xsb3dzICovXG4rXHRyZXQgPSByZWN2KHNlbGYtXHUwMDNlY2ZkLCBidWYsIHNpemVvZihidWYpLCBNU0dfRE9OVFdBSVQpO1xuK1x0RVhQRUNUX0VRKHJldCwgdmFyaWFudC1cdTAwM2VwZWVrX3JldCk7XG4rXHRpZiAocmV0ID09IHZhcmlhbnQtXHUwMDNlcGVla19yZXQpXG4rXHRcdEVYUEVDVF9FUShtZW1jbXAoYnVmLCBwYXlsb2FkLVx1MDAzZXBsYWluX2RhdGEsXG4rXHRcdFx0XHQgdmFyaWFudC1cdTAwM2VwZWVrX3JldCksIDApO1xuK1xuK1x0cmV0ID0gcmVjdihzZWxmLVx1MDAzZWNmZCwgYnVmLCBzaXplb2YoYnVmKSwgTVNHX0RPTlRXQUlUKTtcbitcdEVYUEVDVF9FUShyZXQsIC0xKTtcbitcdGlmIChyZXQgPT0gLTEpXG4rXHRcdEVYUEVDVF9FUShlcnJubywgRUFHQUlOKTtcbit9XG4rXG4rRklYVFVSRSh6ZXJvX2xlbl9zcGxpY2UpXG4re1xuK1x0aW50IGZkLCBjZmQ7XG4rXHRib29sIG5vdGxzO1xuK307XG4rXG4rRklYVFVSRV9WQVJJQU5UKHplcm9fbGVuX3NwbGljZSlcbit7XG4rXHRjb25zdCBzdHJ1Y3QgcmF3X3JlYyAqcmVjc1s0XTtcbitcdHNzaXplX3Qgc3BsaWNlX3JldDtcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BREQoemVyb19sZW5fc3BsaWNlLCAwZGF0YV9kYXRhKVxuK3tcbitcdC5yZWNzID0geyBcdTAwMjZpZDBfZGF0YV9sMCwgXHUwMDI2aWQxX2RhdGFfbDExLCB9LFxuK1x0LnNwbGljZV9yZXQgPSAxMSxcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BREQoemVyb19sZW5fc3BsaWNlLCAwZGF0YV8wZGF0YV9kYXRhKVxuK3tcbitcdC5yZWNzID0geyBcdTAwMjZpZDBfZGF0YV9sMCwgXHUwMDI2aWQxX2RhdGFfbDAsIFx1MDAyNmlkMl9kYXRhX2wxMSwgfSxcbitcdC5zcGxpY2VfcmV0ID0gMTEsXG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlRfQUREKHplcm9fbGVuX3NwbGljZSwgMGRhdGFfMGRhdGFfMGRhdGEpXG4re1xuK1x0LnJlY3MgPSB7IFx1MDAyNmlkMF9kYXRhX2wwLCBcdTAwMjZpZDFfZGF0YV9sMCwgXHUwMDI2aWQyX2RhdGFfbDAsIH0sXG4rXHQuc3BsaWNlX3JldCA9IC1FQUdBSU4sXG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlRfQUREKHplcm9fbGVuX3NwbGljZSwgMGRhdGFfMGN0cmwpXG4re1xuK1x0LnJlY3MgPSB7IFx1MDAyNmlkMF9kYXRhX2wwLCBcdTAwMjZpZDFfY3RybF9sMCwgfSxcbitcdC5zcGxpY2VfcmV0ID0gLUVJTlZBTCxcbit9O1xuK1xuK0ZJWFRVUkVfU0VUVVAoemVyb19sZW5fc3BsaWNlKVxuK3tcbitcdHplcm9fbGVuX3NvY2tfcGFpcihfbWV0YWRhdGEsIFx1MDAyNnNlbGYtXHUwMDNlZmQsIFx1MDAyNnNlbGYtXHUwMDNlY2ZkLCBcdTAwMjZzZWxmLVx1MDAzZW5vdGxzKTtcbit9XG4rXG4rRklYVFVSRV9URUFSRE9XTih6ZXJvX2xlbl9zcGxpY2UpXG4re1xuK1x0Y2xvc2Uoc2VsZi1cdTAwM2VmZCk7XG4rXHRjbG9zZShzZWxmLVx1MDAzZWNmZCk7XG4rfVxuK1xuKy8qIEFuIGVtcHR5IGRhdGEgcmVjb3JkIHNwbGljZXMgemVybyBieXRlcywgd2hpY2ggYSBzcGxpY2UgY2FsbGVyIHJlYWRzXG4rICogYXMgRU9GLiBTcGxpY2luZyBtdXN0IHNraXAgcGFzdCBzdWNoIGEgcmVjb3JkIHRvIHRoZSBwYXlsb2FkIGJlaGluZFxuKyAqIGl0LCBhbmQgcmVwb3J0IEVBR0FJTiB3aGVuIGEgcnVuIG9mIHRoZW0gaGFzIG5vIHBheWxvYWQgYmVoaW5kIGl0LlxuKyAqIEEgY29udHJvbCByZWNvcmQgYmVoaW5kIHRoZSBydW4gcmVwb3J0cyBFSU5WQUwsIHRoZSBlcnJvciBzcGxpY2VcbisgKiBhbHJlYWR5IHJlcG9ydHMgZm9yIGEgY29udHJvbCByZWNvcmQgaXQgbWVldHMgZmlyc3QuXG4rICovXG4rc3RhdGljIHZvaWRcbit6ZXJvX2xlbl9kb19zcGxpY2Uoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLFxuK1x0XHQgICBzdHJ1Y3QgX3Rlc3RfZGF0YV96ZXJvX2xlbl9zcGxpY2UgKnNlbGYsXG4rXHRcdCAgIGNvbnN0IHN0cnVjdCBfZml4dHVyZV92YXJpYW50X3plcm9fbGVuX3NwbGljZSAqdmFyaWFudCxcbitcdFx0ICAgdW5zaWduZWQgaW50IHNwbGljZV9mbGFncylcbit7XG4rXHRjb25zdCBzdHJ1Y3QgcmF3X3JlYyAqcGF5bG9hZDtcbitcdHVuc2lnbmVkIGNoYXIgYnVmWzEyOF07XG4rXHRzc2l6ZV90IHJldDtcbitcdGludCBwWzJdO1xuK1xuK1x0QVNTRVJUX0dFKHBpcGUocCksIDApO1xuK1xuK1x0cGF5bG9hZCA9IHplcm9fbGVuX3NlbmRfcmVjcyhfbWV0YWRhdGEsIHNlbGYtXHUwMDNlZmQsIHZhcmlhbnQtXHUwMDNlcmVjcyk7XG4rXG4rXHRpZiAodmFyaWFudC1cdTAwM2VzcGxpY2VfcmV0IFx1MDAzYyAwKSB7XG4rXHRcdHJldCA9IHNwbGljZShzZWxmLVx1MDAzZWNmZCwgTlVMTCwgcFsxXSwgTlVMTCwgc2l6ZW9mKGJ1ZiksXG4rXHRcdFx0ICAgICBzcGxpY2VfZmxhZ3MpO1xuK1x0XHRFWFBFQ1RfRVEocmV0LCAtMSk7XG4rXHRcdGlmIChyZXQgPT0gLTEpXG4rXHRcdFx0RVhQRUNUX0VRKGVycm5vLCAtdmFyaWFudC1cdTAwM2VzcGxpY2VfcmV0KTtcbitcdH0gZWxzZSB7XG4rXHRcdC8qIEFzc2VydDogYSB6ZXJvIHJldHVybiwgd2hpY2ggaXMgd2hhdCBhbiB1bmZpeGVkIGtlcm5lbFxuK1x0XHQgKiBnaXZlcyBoZXJlLCBsZWF2ZXMgdGhlIHBpcGUgZW1wdHksIGFuZCB0aGUgcmVhZCBiZWxvd1xuK1x0XHQgKiB3b3VsZCB0aGVuIGJsb2NrIHVudGlsIHRoZSBoYXJuZXNzIHRpbWVvdXQuXG4rXHRcdCAqL1xuK1x0XHRBU1NFUlRfRVEoc3BsaWNlKHNlbGYtXHUwMDNlY2ZkLCBOVUxMLCBwWzFdLCBOVUxMLCBzaXplb2YoYnVmKSxcbitcdFx0XHRcdCBzcGxpY2VfZmxhZ3MpLCB2YXJpYW50LVx1MDAzZXNwbGljZV9yZXQpO1xuK1x0XHRyZXQgPSByZWFkKHBbMF0sIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xuK1x0XHRFWFBFQ1RfRVEocmV0LCB2YXJpYW50LVx1MDAzZXNwbGljZV9yZXQpO1xuK1x0XHRpZiAocmV0ID09IHZhcmlhbnQtXHUwMDNlc3BsaWNlX3JldClcbitcdFx0XHRFWFBFQ1RfRVEobWVtY21wKGJ1ZiwgcGF5bG9hZC1cdTAwM2VwbGFpbl9kYXRhLFxuK1x0XHRcdFx0XHQgdmFyaWFudC1cdTAwM2VzcGxpY2VfcmV0KSwgMCk7XG4rXG4rXHRcdC8qIFJlYWNoaW5nIHRoZSBwYXlsb2FkIGNvbnN1bWVkIHRoZSBlbXB0eSByZWNvcmRzIGFoZWFkXG4rXHRcdCAqIG9mIGl0IHJhdGhlciB0aGFuIGxlYXZpbmcgdGhlbSBvbiB0aGUgcmVjZWl2ZSBxdWV1ZVxuK1x0XHQgKi9cbitcdFx0cmV0ID0gcmVjdihzZWxmLVx1MDAzZWNmZCwgYnVmLCBzaXplb2YoYnVmKSwgTVNHX0RPTlRXQUlUKTtcbitcdFx0RVhQRUNUX0VRKHJldCwgLTEpO1xuK1x0XHRpZiAocmV0ID09IC0xKVxuK1x0XHRcdEVYUEVDVF9FUShlcnJubywgRUFHQUlOKTtcbitcdH1cbitcbitcdGNsb3NlKHBbMF0pO1xuK1x0Y2xvc2UocFsxXSk7XG4rfVxuK1xuK1RFU1RfRih6ZXJvX2xlbl9zcGxpY2UsIHRlc3QpXG4re1xuK1x0aWYgKHNlbGYtXHUwMDNlbm90bHMpXG4rXHRcdFNLSVAocmV0dXJuLCBcIm5vIFRMUyBzdXBwb3J0XCIpO1xuK1xuK1x0emVyb19sZW5fZG9fc3BsaWNlKF9tZXRhZGF0YSwgc2VsZiwgdmFyaWFudCwgU1BMSUNFX0ZfTk9OQkxPQ0spO1xuK31cbitcbisvKiBUaGUgc29ja2V0J3Mgb3duIE9fTk9OQkxPQ0sgZ292ZXJucyB0aGUgcmVjb3JkIHdhaXQsIGFzIGl0IGRvZXMgb24gYVxuKyAqIHBsYWluIFRDUCBzb2NrZXQsIHNvIGEgc3BsaWNlIHRoYXQgb21pdHMgU1BMSUNFX0ZfTk9OQkxPQ0sgcmVhY2hlc1xuKyAqIHRoZSBzYW1lIG91dGNvbWUgYXMgb25lIHRoYXQgc2V0cyBpdC4gQW4gdW5maXhlZCBrZXJuZWwgZGVyaXZlcyB0aGVcbisgKiB3YWl0IGZyb20gU1BMSUNFX0ZfTk9OQkxPQ0sgYWxvbmUgYW5kIHNsZWVwcyBoZXJlIHVudGlsIHRoZSBoYXJuZXNzXG4rICogdGltZW91dC5cbisgKi9cbitURVNUX0YoemVyb19sZW5fc3BsaWNlLCBub25ibG9ja19zb2NrZXQpXG4re1xuK1x0aW50IHNmbGFncztcbitcbitcdGlmIChzZWxmLVx1MDAzZW5vdGxzKVxuK1x0XHRTS0lQKHJldHVybiwgXCJubyBUTFMgc3VwcG9ydFwiKTtcbitcbitcdHNmbGFncyA9IGZjbnRsKHNlbGYtXHUwMDNlY2ZkLCBGX0dFVEZMLCAwKTtcbitcdEFTU0VSVF9HRShzZmxhZ3MsIDApO1xuK1x0QVNTRVJUX0VRKGZjbnRsKHNlbGYtXHUwMDNlY2ZkLCBGX1NFVEZMLCBzZmxhZ3MgfCBPX05PTkJMT0NLKSwgMCk7XG4rXG4rXHR6ZXJvX2xlbl9kb19zcGxpY2UoX21ldGFkYXRhLCBzZWxmLCB2YXJpYW50LCAwKTtcbit9XG4rXG4gRklYVFVSRSh0bHNfZXJyKVxuIHtcbiBcdGludCBmZCwgY2ZkO1xuQEAgLTI2MzgsMjggKzI4ODQsODUgQEAgVEVTVF9GKHRsc19lcnIsIGJhZF9yZWMpXG4gXHRFWFBFQ1RfRVEoZXJybm8sIEVBR0FJTik7XG4gfVxuIFxuKy8qIEVuY3J5cHQgYSByZWNvcmQgb24gdGhlIFRYLW9ubHkgc29ja2V0IHBhaXIsIGNvcnJ1cHQgaXRzIGxhc3RcbisgKiBieXRlLCBhbmQgaGFuZCB0aGUgcmVzdWx0IHRvIHRoZSBzb2NrZXQgdW5kZXIgdGVzdC4gY2ZkIGNhcnJpZXMgYVxuKyAqIGJ5dGUgc3RyZWFtLCBzbyBvbmUgcmVjdigpIGNhbiByZXR1cm4gcGFydCBvZiBhIHJlY29yZDogdGFrZSB0aGVcbisgKiBmcmFnbWVudCBsZW5ndGggZnJvbSB0aGUgcmVjb3JkIGhlYWRlciBhbmQgd2FpdCBmb3IgdGhlIHJlbWFpbmRlci5cbisgKi9cbitzdGF0aWMgdm9pZCB0bHNfc2VuZF9iYWRfYXV0aChzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsXG4rXHRcdFx0ICAgICAgaW50IGZkLCBpbnQgY2ZkLCBpbnQgZmQyKVxuK3tcbitcdGNoYXIgYnVmWzEyOF07XG4rXHRpbnQgbGVuO1xuK1xuK1x0bWVtcm5kKGJ1Ziwgc2l6ZW9mKGJ1ZikgLyAyKTtcbitcdEFTU0VSVF9FUShzZW5kKGZkLCBidWYsIHNpemVvZihidWYpIC8gMiwgMCksIHNpemVvZihidWYpIC8gMik7XG4rXG4rXHRBU1NFUlRfRVEocmVjdihjZmQsIGJ1ZiwgVExTX0hEUl9MRU4sIE1TR19XQUlUQUxMKSwgVExTX0hEUl9MRU4pO1xuK1xuK1x0bGVuID0gKCh1bnNpZ25lZCBjaGFyKWJ1ZlszXSBcdTAwM2NcdTAwM2MgOCkgfCAodW5zaWduZWQgY2hhcilidWZbNF07XG4rXHRBU1NFUlRfR1QobGVuLCAwKTtcbitcdEFTU0VSVF9MRShsZW4sIChpbnQpc2l6ZW9mKGJ1ZikgLSBUTFNfSERSX0xFTik7XG4rXG4rXHRBU1NFUlRfRVEocmVjdihjZmQsIGJ1ZiArIFRMU19IRFJfTEVOLCBsZW4sIE1TR19XQUlUQUxMKSwgbGVuKTtcbitcbitcdGJ1ZltUTFNfSERSX0xFTiArIGxlbiAtIDFdKys7XG4rXG4rXHRBU1NFUlRfRVEoc2VuZChmZDIsIGJ1ZiwgVExTX0hEUl9MRU4gKyBsZW4sIDApLCBUTFNfSERSX0xFTiArIGxlbik7XG4rfVxuK1xuIFRFU1RfRih0bHNfZXJyLCBiYWRfYXV0aClcbiB7XG4gXHRjaGFyIGJ1ZlsxMjhdO1xuLVx0aW50IG47XG4gXG4gXHRpZiAoc2VsZi1cdTAwM2Vub3RscylcbiBcdFx0U0tJUChyZXR1cm4sIFwibm8gVExTIHN1cHBvcnRcIik7XG4gXG4tXHRtZW1ybmQoYnVmLCBzaXplb2YoYnVmKSAvIDIpO1xuLVx0RVhQRUNUX0VRKHNlbmQoc2VsZi1cdTAwM2VmZCwgYnVmLCBzaXplb2YoYnVmKSAvIDIsIDApLCBzaXplb2YoYnVmKSAvIDIpO1xuLVx0biA9IHJlY3Yoc2VsZi1cdTAwM2VjZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApO1xuLVx0RVhQRUNUX0dUKG4sIHNpemVvZihidWYpIC8gMik7XG4tXG4tXHRidWZbbiAtIDFdKys7XG4rXHR0bHNfc2VuZF9iYWRfYXV0aChfbWV0YWRhdGEsIHNlbGYtXHUwMDNlZmQsIHNlbGYtXHUwMDNlY2ZkLCBzZWxmLVx1MDAzZWZkMik7XG4gXG4tXHRFWFBFQ1RfRVEoc2VuZChzZWxmLVx1MDAzZWZkMiwgYnVmLCBuLCAwKSwgbik7XG4gXHRFWFBFQ1RfRVEocmVjdihzZWxmLVx1MDAzZWNmZDIsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApLCAtMSk7XG4gXHRFWFBFQ1RfRVEoZXJybm8sIEVCQURNU0cpO1xuIFx0RVhQRUNUX0VRKHJlY3Yoc2VsZi1cdTAwM2VjZmQyLCBidWYsIHNpemVvZihidWYpLCAwKSwgLTEpO1xuIFx0RVhQRUNUX0VRKGVycm5vLCBFQkFETVNHKTtcbiB9XG4gXG4rLyogQSByZWNvcmQgdGhhdCBkaWQgbm90IGF1dGhlbnRpY2F0ZSBicmVha3MgdGhlIGNvbm5lY3Rpb24gZm9yIGV2ZXJ5XG4rICogcmVhZGVyLCBzcGxpY2UgaW5jbHVkZWQuXG4rICpcbisgKiBUaGUgdHdvIGRlY3J5cHQgcGF0aHMgcmVhY2ggdGhhdCByZXN1bHQgZGlmZmVyZW50bHkuIEEgc3luY2hyb25vdXNcbisgKiBkZWNyeXB0IGxlYXZlcyB0aGUgcmVjb3JkIHBhcnNlZCwgc28gdGhlIHNwbGljZSByZS1ydW5zIHRoZSBkZWNyeXB0XG4rICogYW5kIGZhaWxzIG9uIHRoZSByZWNvcmQgaXRzZWxmOyB0aGUgY3R4LVx1MDAzZWFzeW5jX3dhaXQuZXJyIGNoZWNrIGluXG4rICogdGxzX3N3X3NwbGljZV9yZWFkKCkgaXMgbm90IHdoYXQgc3RvcHMgaXQuIE9ubHkgYW4gYXN5bmNocm9ub3VzXG4rICogZGVjcnlwdCwgd2hpY2ggbmVlZHMgYSBUTFMgMS4yIHNvY2tldCBhbmQgYW4gQUVBRCBhZHZlcnRpc2luZ1xuKyAqIENSWVBUT19BTEdfQVNZTkMsIGNvbnN1bWVzIHRoZSByZWNvcmQgYmVmb3JlIHRoZSBmYWlsdXJlIGlzXG4rICogcmVjb3JkZWQsIGxlYXZpbmcgdGhhdCBjaGVjayB0aGUgc29sZSByZWFzb24gdGhlIHNwbGljZSBmYWlscy5cbisgKi9cbitURVNUX0YodGxzX2VyciwgYmFkX2F1dGhfc3BsaWNlKVxuK3tcbitcdGNoYXIgYnVmWzEyOF07XG4rXHRzc2l6ZV90IHJldDtcbitcdGludCBwWzJdO1xuK1xuK1x0aWYgKHNlbGYtXHUwMDNlbm90bHMpXG4rXHRcdFNLSVAocmV0dXJuLCBcIm5vIFRMUyBzdXBwb3J0XCIpO1xuK1xuK1x0dGxzX3NlbmRfYmFkX2F1dGgoX21ldGFkYXRhLCBzZWxmLVx1MDAzZWZkLCBzZWxmLVx1MDAzZWNmZCwgc2VsZi1cdTAwM2VmZDIpO1xuK1xuK1x0RVhQRUNUX0VRKHJlY3Yoc2VsZi1cdTAwM2VjZmQyLCBidWYsIHNpemVvZihidWYpLCAwKSwgLTEpO1xuK1x0RVhQRUNUX0VRKGVycm5vLCBFQkFETVNHKTtcbitcbitcdEFTU0VSVF9HRShwaXBlKHApLCAwKTtcbitcbitcdHJldCA9IHNwbGljZShzZWxmLVx1MDAzZWNmZDIsIE5VTEwsIHBbMV0sIE5VTEwsIHNpemVvZihidWYpLFxuK1x0XHQgICAgIFNQTElDRV9GX05PTkJMT0NLKTtcbitcdEVYUEVDVF9FUShyZXQsIC0xKTtcbitcdGlmIChyZXQgPT0gLTEpXG4rXHRcdEVYUEVDVF9FUShlcnJubywgRUJBRE1TRyk7XG4rXG4rXHRjbG9zZShwWzBdKTtcbitcdGNsb3NlKHBbMV0pO1xuK31cbitcbiBURVNUX0YodGxzX2VyciwgYmFkX2luX2xhcmdlX3JlYWQpXG4ge1xuIFx0Y2hhciB0eHRbM11bNjRdO1xuQEAgLTI5MTUsNyArMzIxOCw2IEBAIHN0YXRpYyBzaXplX3QgcGFyc2VfdGxzX3JlY29yZHMoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLFxuIHtcbiBcdGNvbnN0IF9fdTggKnJlYyA9IHJ4X2J1ZjtcbiBcdHNpemVfdCB0b3RhbF9wbGFpbnRleHRfcnggPSAwO1xuLVx0Y29uc3QgX191OCByZWNfaGVhZGVyX2xlbiA9IDU7XG4gXG4gXHR3aGlsZSAocmVjIFx1MDAzYyByeF9idWYgKyByeF9sZW4pIHtcbiBcdFx0X191MTYgcmVjb3JkX3BheWxvYWRfbGVuO1xuQEAgLTI5MzUsNyArMzIzNyw3IEBAIHN0YXRpYyBzaXplX3QgcGFyc2VfdGxzX3JlY29yZHMoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLFxuIFxuIFx0XHQvKiBQbGFpbnRleHQgbXVzdCBub3QgZXhjZWVkIHRoZSBzcGVjaWZpZWQgbGltaXQgKi9cbiBcdFx0QVNTRVJUX0xFKHBsYWludGV4dF9sZW4sIG1heF9wYXlsb2FkX2xlbik7XG4tXHRcdHJlYyArPSByZWNfaGVhZGVyX2xlbiArIHJlY29yZF9wYXlsb2FkX2xlbjtcbitcdFx0cmVjICs9IFRMU19IRFJfTEVOICsgcmVjb3JkX3BheWxvYWRfbGVuO1xuIFx0fVxuIFxuIFx0cmV0dXJuIHRvdGFsX3BsYWludGV4dF9yeDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjAyOjM1LjA4NzI5NDc0NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0NjY2MDkyMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUTFMgRW1wdHkgRGF0YSBSZWNvcmQgSGFuZGxpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBUTFMgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSBpbiBgbmV0L3Rscy90bHNfc3cuY2AuIFRoaXMgaXMgZm9jdXNlZCBvbiBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIHRob3NlIHBlc2t5IHplcm8tbGVuZ3RoIGBhcHBsaWNhdGlvbl9kYXRhYCByZWNvcmRzLCB0aGUgb25lcyB3aXRoIG5vIGFjdHVhbCBwYXlsb2FkLCBpbiBib3RoIFRMUyAxLjIgYW5kIDEuMy5cblxuVGhlIGtleSBhZGRpdGlvbnMgYXJlIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IHRoZXkndmUgYWRkZWQgYHRsc19yeF9lbXB0eV9kYXRhX3JlY2AgdG8gY2hlY2sgZm9yIHRoZXNlIGVtcHR5IHJlY29yZHMuIEFuZCwgY3JpdGljYWxseSwgdGhlIGNvZGUgaW4gYHRsc19zd19yZWN2bXNnYCwgYHRsc19zd19zcGxpY2VfcmVhZGAsIGFuZCBgdGxzX3N3X3JlYWRfc29ja2AgaGFzIGJlZW4gbW9kaWZpZWQgdG8gaGFuZGxlIHRoZW0gY29ycmVjdGx5LiBJdCBsb29rcyBsaWtlIHRoZXkndmUgaGFkIHRvIGFkZCBhIGNoZWNrIGZvciBgY3R4LVx1MDAzZWFzeW5jX3dhaXQuZXJyYCBpbiBgdGxzX3N3X3NwbGljZV9yZWFkYCB0byBhY2NvdW50IGZvciBwb3RlbnRpYWwgY3J5cHRvIGZhaWx1cmVzLCB3aGljaCBtYWtlcyBzZW5zZSwgYXMgYW4gZW1wdHkgcmVjb3JkIGNvdWxkIGJlIHVzZWQgdG8gZXhwbG9pdCBhbiBlcnJvci4gUGx1cywgYHRsc19yeF9pbnRyX2Vycm5vYCBoYXMgYmVlbiB0aHJvd24gaW4gdGhlcmUgZm9yIHNpZ25hbCBpbnRlcnJ1cHRpb24gaGFuZGxpbmcuIFRoZSBjaGFuZ2VzIHRvIGB0bHNfc3dfcmVhZF9zb2NrYCBsb29rIGxpa2UgdGhleSdyZSBib3VuZGluZyB0aGUgdGltZSBjb25zZWN1dGl2ZSBlbXB0eSByZWNvcmRzIGNhbiBob2xkIHRoZSBzb2NrZXQgbG9jaywgd2hpY2ggaXMgYSBnb29kIG1vdmUgdG8gcHJldmVudCBwb3RlbnRpYWwgZGVuaWFsLW9mLXNlcnZpY2Ugb3IgbG9jayBjb250ZW50aW9uLlxuXG5UaGlzIGZlZWxzIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgaGVhcnQgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2ssIHRoZSBUTFMgaW1wbGVtZW50YXRpb24gaXRzZWxmLiBGcm9tIGEgc2VjdXJpdHkgcGVyc3BlY3RpdmUsIHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBuZWVkcyB0aG9yb3VnaCBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIGhlcmUgd2lsbCBiZSB0byBleGFtaW5lIHRoZSBmdW5jdGlvbnMgYWZmZWN0ZWQuIFNvOlxuXG4qICAgYHRsc19zd19yZWN2bXNnYFxuKiAgIGB0bHNfc3dfc3BsaWNlX3JlYWRgXG4qICAgYHRsc19zd19yZWFkX3NvY2tgXG5cbk5vdywgbGV0J3Mgc2VlIGhvdyB0aGVzZSBhcmUgKnVzZWQqLiBBcmUgdGhlc2Ugc3RhdGljIGZ1bmN0aW9ucywgb3IgYXJlIHRoZXkgZXhwb3J0ZWQgb3IgdXNlZCBhcyBjYWxsYmFja3M/IEEgcXVpY2sgY2hlY2sgc2hvd3MgdGhhdCBlYWNoIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCBpbiBgdGxzX3N3LmNgIC0gYSBnb29kIHN0YXJ0LCBidXQgSSdsbCBuZWVkIHRvIGxvb2sgYXQgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCBpbiBvdGhlciBmaWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc4NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjAyOjQ0LjU1MzkwNjYyNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTA1NjIwMjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRsc19zd19yZWN2bXNnfHRsc19zd19zcGxpY2VfcmVhZHx0bHNfc3dfcmVhZF9zb2NrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90bHMvdGxzLmg9MTYyPXZvaWQgdGxzX3N3X2ZyZWVfY3R4X3J4KHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCk7XFxubmV0L3Rscy90bHMuaDoxNjM6aW50IHRsc19zd19yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbm5ldC90bHMvdGxzLmgtMTY0LVxcdFxcdCAgIGludCBmbGFncyk7XFxubmV0L3Rscy90bHMuaD0xNjU9Ym9vbCB0bHNfc3dfc29ja19pc19yZWFkYWJsZShzdHJ1Y3Qgc29jayAqc2spO1xcbm5ldC90bHMvdGxzLmg6MTY2OnNzaXplX3QgdGxzX3N3X3NwbGljZV9yZWFkKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvZmZfdCAqcHBvcyxcXG5uZXQvdGxzL3Rscy5oLTE2Ny1cXHRcXHRcXHQgICBzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxcbm5ldC90bHMvdGxzLmgtMTY4LVxcdFxcdFxcdCAgIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncyk7XFxubmV0L3Rscy90bHMuaDoxNjk6aW50IHRsc19zd19yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcXG5uZXQvdGxzL3Rscy5oLTE3MC1cXHRcXHQgICAgIHNrX3JlYWRfYWN0b3JfdCByZWFkX2FjdG9yKTtcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYz05NDA9c3RhdGljIHZvaWQgYnVpbGRfcHJvdG9fb3BzKHN0cnVjdCBwcm90b19vcHMgb3BzW1RMU19OVU1fQ09ORklHXVtUTFNfTlVNX0NPTkZJR10sXFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtOTQ4LVxcdG9wc1tUTFNfQkFTRV1bVExTX1NXICBdID0gb3BzW1RMU19CQVNFXVtUTFNfQkFTRV07XFxubmV0L3Rscy90bHNfbWFpbi5jOjk0OTpcXHRvcHNbVExTX0JBU0VdW1RMU19TVyAgXS5zcGxpY2VfcmVhZFxcdD0gdGxzX3N3X3NwbGljZV9yZWFkO1xcbm5ldC90bHMvdGxzX21haW4uYy05NTAtXFx0b3BzW1RMU19CQVNFXVtUTFNfU1cgIF0ucG9sbFxcdFxcdD0gdGxzX3NrX3BvbGw7XFxubmV0L3Rscy90bHNfbWFpbi5jOjk1MTpcXHRvcHNbVExTX0JBU0VdW1RMU19TVyAgXS5yZWFkX3NvY2tcXHQ9IHRsc19zd19yZWFkX3NvY2s7XFxubmV0L3Rscy90bHNfbWFpbi5jLTk1Mi1cXG5uZXQvdGxzL3Rsc19tYWluLmMtOTUzLVxcdG9wc1tUTFNfU1cgIF1bVExTX1NXICBdID0gb3BzW1RMU19TVyAgXVtUTFNfQkFTRV07XFxubmV0L3Rscy90bHNfbWFpbi5jOjk1NDpcXHRvcHNbVExTX1NXICBdW1RMU19TVyAgXS5zcGxpY2VfcmVhZFxcdD0gdGxzX3N3X3NwbGljZV9yZWFkO1xcbm5ldC90bHMvdGxzX21haW4uYy05NTUtXFx0b3BzW1RMU19TVyAgXVtUTFNfU1cgIF0ucG9sbFxcdFxcdD0gdGxzX3NrX3BvbGw7XFxubmV0L3Rscy90bHNfbWFpbi5jOjk1NjpcXHRvcHNbVExTX1NXICBdW1RMU19TVyAgXS5yZWFkX3NvY2tcXHQ9IHRsc19zd19yZWFkX3NvY2s7XFxubmV0L3Rscy90bHNfbWFpbi5jLTk1Ny1cXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYz0xMDAyPXN0YXRpYyB2b2lkIGJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gcHJvdFtUTFNfTlVNX0NPTkZJR11bVExTX05VTV9DT05GSUddLFxcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jLTEwMTUtXFx0cHJvdFtUTFNfQkFTRV1bVExTX1NXXSA9IHByb3RbVExTX0JBU0VdW1RMU19CQVNFXTtcXG5uZXQvdGxzL3Rsc19tYWluLmM6MTAxNjpcXHRwcm90W1RMU19CQVNFXVtUTFNfU1ddLnJlY3Ztc2dcXHRcXHQgID0gdGxzX3N3X3JlY3Ztc2c7XFxubmV0L3Rscy90bHNfbWFpbi5jLTEwMTctXFx0cHJvdFtUTFNfQkFTRV1bVExTX1NXXS5zb2NrX2lzX3JlYWRhYmxlICAgPSB0bHNfc3dfc29ja19pc19yZWFkYWJsZTtcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYy0xMDIwLVxcdHByb3RbVExTX1NXXVtUTFNfU1ddID0gcHJvdFtUTFNfU1ddW1RMU19CQVNFXTtcXG5uZXQvdGxzL3Rsc19tYWluLmM6MTAyMTpcXHRwcm90W1RMU19TV11bVExTX1NXXS5yZWN2bXNnXFx0XFx0PSB0bHNfc3dfcmVjdm1zZztcXG5uZXQvdGxzL3Rsc19tYWluLmMtMTAyMi1cXHRwcm90W1RMU19TV11bVExTX1NXXS5zb2NrX2lzX3JlYWRhYmxlICAgPSB0bHNfc3dfc29ja19pc19yZWFkYWJsZTtcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmM9MTgwND1zdGF0aWMgaW50IHRsc19yeF9pbnRyX2Vycm5vKGxvbmcgdGltZW8pXFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jLTE4MDgtXFxubmV0L3Rscy90bHNfc3cuYzoxODA5OmludCB0bHNfc3dfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L3Rscy90bHNfc3cuYy0xODEwLVxcdFxcdCAgIHN0cnVjdCBtc2doZHIgKm1zZyxcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmMtMjAyNS1cXG5uZXQvdGxzL3Rsc19zdy5jOjIwMjY6c3NpemVfdCB0bHNfc3dfc3BsaWNlX3JlYWQoc3RydWN0IHNvY2tldCAqc29jaywgIGxvZmZfdCAqcHBvcyxcXG5uZXQvdGxzL3Rsc19zdy5jLTIwMjctXFx0XFx0XFx0ICAgc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcXG4tLVxcbm5ldC90bHMvdGxzX3N3LmMtMjEyOS1cXG5uZXQvdGxzL3Rsc19zdy5jOjIxMzA6aW50IHRsc19zd19yZWFkX3NvY2soc3RydWN0IHNvY2sgKnNrLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcXG5uZXQvdGxzL3Rsc19zdy5jLTIxMzEtXFx0XFx0ICAgICBza19yZWFkX2FjdG9yX3QgcmVhZF9hY3RvcilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYz0yOTE0PVRFU1RfRih0bHNfZXJyLCBiYWRfYXV0aClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYy0yOTM0LSAqIGFuZCBmYWlscyBvbiB0aGUgcmVjb3JkIGl0c2VsZjsgdGhlIGN0eC1cXHUwMDNlYXN5bmNfd2FpdC5lcnIgY2hlY2sgaW5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmM6MjkzNTogKiB0bHNfc3dfc3BsaWNlX3JlYWQoKSBpcyBub3Qgd2hhdCBzdG9wcyBpdC4gT25seSBhbiBhc3luY2hyb25vdXNcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmMtMjkzNi0gKiBkZWNyeXB0LCB3aGljaCBuZWVkcyBhIFRMUyAxLjIgc29ja2V0IGFuZCBhbiBBRUFEIGFkdmVydGlzaW5nXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjAyOjQ4LjQ1OTUzNTc3M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3OTgyNjU3MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9ucyBhbmQgdGhlaXIgc2lnbmlmaWNhbmNlLCBhcyB0aG91Z2ggSSdtIHByb2Nlc3NpbmcgdGhlIGluZm9ybWF0aW9uOlxuXG4qKktleSBUTFMgU29ja2V0IEZ1bmN0aW9uIEZvY3VzKipcblxuQWxyaWdodCwgbG9va2luZyBhdCB0aGlzIGNvZGUsIGl0J3MgY2xlYXIgdGhhdCBgdGxzX3N3X3JlY3Ztc2dgLCBgdGxzX3N3X3NwbGljZV9yZWFkYCwgYW5kIGB0bHNfc3dfcmVhZF9zb2NrYCBhcmUgdGhlIGJyZWFkIGFuZCBidXR0ZXIgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGZvciBUTFMgc29ja2V0IEkvTy4gVGhleSdyZSBkZWZpbml0ZWx5IHRoZSBrZXkgc3ltYm9scyB0byB1bmRlcnN0YW5kIGhvdyBkYXRhIG1vdmVzIHdpdGhpbiB0aGUgVExTIGxheWVyLiBUaGUgZmFjdCB0aGF0IHRoZXkncmUgdGllZCB0byB0aGUgYHByb3RvYCBhbmQgYHByb3RvX29wc2Agc3RydWN0dXJlcyBpcyBjcnVjaWFsLiBJdCBtZWFucyB0aGVzZSBmdW5jdGlvbnMgYXJlIGRpcmVjdGx5IGludGVncmF0ZWQgaW50byB0aGUgc3RhbmRhcmQgc29ja2V0IG9wZXJhdGlvbnMg4oCTIHRoZSBgcmVjdm1zZ2AsIGBzcGxpY2VgLCB0aGUgZ2VuZXJhbCByZWFkIHBhdGhzLiBJdCBtZWFucyB0aGV5IHdpbGwgYmUgdHJpZ2dlcmVkIHdoZW4gc3RhbmRhcmQgc29ja2V0IGNhbGxzIGFyZSBtYWRlLCB3aGljaCBpcyBleGFjdGx5IHdoZXJlIEknZCBleHBlY3QgdG8gc2VlIHRoZSBUTFMgaW50ZXJhY3Rpb24uIE5vdyBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gZmxhZ3MgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZS4gV2hhdCBhcmUgdGhlIGJ1aWxkIHJlcXVpcmVtZW50cyB0byBicmluZyB0aGlzIFRMUyBmdW5jdGlvbmFsaXR5IHRvIGxpZmU/IFdoYXQgY29uZmlndXJhdGlvbnMgYXJlIG5lZWRlZCBmb3IgdGhlIHN5c3RlbSB0byBzdXBwb3J0IHRoaXMgZnVuY3Rpb25hbGl0eT9cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5ODYsIk91dHB1dFRva2VucyI6MTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjowMjo1Mi4yNTc4MDUyNDRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc4NzAzNDM4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVExTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtL21tL0tjb25maWc9ODczPWNvbmZpZyBIQVJERU5fQlJBTkNIX0hJU1RPUllcXG4tLVxcbmFyY2gvYXJtL21tL0tjb25maWctODgyLVxcbmFyY2gvYXJtL21tL0tjb25maWc6ODgzOmNvbmZpZyBUTFNfUkVHX0VNVUxcXG5hcmNoL2FybS9tbS9LY29uZmlnLTg4NC1cXHRib29sXFxuLS1cXG5uZXQvdGxzL0tjb25maWctNC0jXFxubmV0L3Rscy9LY29uZmlnOjU6Y29uZmlnIFRMU1xcbm5ldC90bHMvS2NvbmZpZy02LVxcdHRyaXN0YXRlIFxcXCJUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC90bHMvS2NvbmZpZy0xOC1cXG5uZXQvdGxzL0tjb25maWc6MTk6Y29uZmlnIFRMU19ERVZJQ0VcXG5uZXQvdGxzL0tjb25maWctMjAtXFx0Ym9vbCBcXFwiVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IEhXIG9mZmxvYWRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjAyOjU1LjA0NDg1Mjc1OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NjQwNTgyODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVExTIENvbmZpZ3VyYXRpb24gQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIHRoZSBjb25maWd1cmF0aW9uIGluIHF1ZXN0aW9uIGlzIGBUTFNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgdGhlICpvbmx5KiBuZWNlc3NhcnkgY29uZmlndXJhdGlvbi4gTGV0J3Mgc2VlLi4uIHRoZSBwYXRjaCBpcyBtb2RpZnlpbmcgYG5ldC90bHMvdGxzX3N3LmNgLiBBaCwgcmlnaHQsIHRoYXQncyBmaXJtbHkgd2l0aGluIHRoZSBUTFMgc3Vic3lzdGVtLiBHaXZlbiB0aGF0IGNvbnRleHQsIGBDT05GSUdfVExTYCBhbG9uZSAqc2hvdWxkKiBiZSBzdWZmaWNpZW50LiBIb3dldmVyLCBJIGFsd2F5cyBtYWtlIHN1cmUuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhhdCB0aGVyZSBhcmVuJ3QgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMgdGhhdCBhcmVuJ3QgaW1tZWRpYXRlbHkgb2J2aW91cy4gSXQncyBhIGdvb2QgcHJhY3RpY2UsIGV2ZW4gd2hlbiBpdCBzZWVtcyBzdHJhaWdodGZvcndhcmQsIHRvIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQ3OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjAyOjU4LjUwODkxNTE5OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdGxzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgVExTIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdGNvbmZpZyBUTFNcXG4gICA2OlxcdFxcdHRyaXN0YXRlIFxcXCJUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgc3VwcG9ydFxcXCJcXG4gICA3OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgIDg6XFx0XFx0c2VsZWN0IENSWVBUT1xcbiAgIDk6XFx0XFx0c2VsZWN0IENSWVBUT19BRVNcXG4gIDEwOlxcdFxcdHNlbGVjdCBDUllQVE9fR0NNXFxuICAxMTpcXHRcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxuICAxMjpcXHRcXHRkZWZhdWx0IG5cXG4gIDEzOlxcdFxcdGhlbHBcXG4gIDE0OlxcdFxcdEVuYWJsZSBrZXJuZWwgc3VwcG9ydCBmb3IgVExTIHByb3RvY29sLiBUaGlzIGFsbG93cyBzeW1tZXRyaWNcXG4gIDE1OlxcdFxcdGVuY3J5cHRpb24gaGFuZGxpbmcgb2YgdGhlIFRMUyBwcm90b2NvbCB0byBiZSBkb25lIGluLWtlcm5lbC5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0XFx0SWYgdW5zdXJlLCBzYXkgTi5cXG4gIDE4OlxcdFxcbiAgMTk6XFx0Y29uZmlnIFRMU19ERVZJQ0VcXG4gIDIwOlxcdFxcdGJvb2wgXFxcIlRyYW5zcG9ydCBMYXllciBTZWN1cml0eSBIVyBvZmZsb2FkXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjowMjo1OC41MDkwMjMzNjhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDM5NzM2NDE5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGlzIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIHRoZSBkZXBlbmRlbmN5OiBgQ09ORklHX1RMU2AgcmVsaWVzIG9uIGBJTkVUYC4gIGBJTkVUYCBpcyBwcmFjdGljYWxseSBhbHdheXMgZW5hYmxlZCwgd2hpY2ggbWVhbnMsIGVzc2VudGlhbGx5LCBJIGp1c3QgbmVlZCB0byBleHBsaWNpdGx5IGVuYWJsZSBgVExTYC5cblxuVGhlIHBhdGNoIGFsc28gYnJpbmdzIHVwIGBUTFMgMS4yYCBhbmQgYFRMUyAxLjNgLiAgQnV0LCBhcyBmYXIgYXMgSSBjYW4gdGVsbCwgdGhlcmUgYXJlbid0IGFueSBzZXBhcmF0ZSBjb25maWcgb3B0aW9ucyBzcGVjaWZpY2FsbHkgZm9yIHRob3NlOyBpdCdzIGFsbCBoYW5kbGVkIHVuZGVyIHRoZSB1bWJyZWxsYSBvZiBgQ09ORklHX1RMU2AuIEdvb2QgdG8ga25vdy5cblxuTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjb2RlIGNoYW5nZXMuIEkgc2VlIHRoZXNlIG1vZGlmaWVkIGZ1bmN0aW9uczogYHRsc19yeF9lbXB0eV9kYXRhX3JlY2AgKHN0YXRpYyksIGB0bHNfcnhfaW50cl9lcnJub2AgKHN0YXRpYyksIGB0bHNfc3dfcmVjdm1zZ2AsIGB0bHNfc3dfc3BsaWNlX3JlYWRgLCBhbmQgYHRsc19zd19yZWFkX3NvY2tgLiBUaGUgc3RhdGljIG9uZXMsIEkgY2FuIGdlbmVyYWxseSBpZ25vcmUgZm9yIG5vdy5cblxuUmlnaHQsIHNvIHRoZSBpbXBvcnRhbnQgc3ltYm9scyBoZXJlIGFyZSBgdGxzX3N3X3JlY3Ztc2dgLCBgdGxzX3N3X3NwbGljZV9yZWFkYCwgYW5kIGB0bHNfc3dfcmVhZF9zb2NrYC5cblxuQWxyaWdodCwgaXQncyBhYm91dCBoYW5kbGluZyBlbXB0eSBkYXRhIHJlY29yZHMgaW4gVExTIDEuMiBhbmQgMS4zLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gaG93IFRMUyByZWNlaXZlcyBkYXRhLiBJdCdzIGluIHRoZSByZWNlaXZlIHBhdGgsIGFuZCB0aGVzZSBzb2NrZXQgb3BlcmF0aW9ucywgbGlrZSBgcmVjdm1zZ2AsIGFyZSBkaXJlY3RseSBleHBvc2VkIHRvIHVzZXJzcGFjZS5cblxuVGhhdCB0ZWxscyBtZSBJIG5lZWQgdG8gbWFyayBgV29ydGhGdXp6aW5nYCBhcyBgdHJ1ZWAuICBUaGlzIGlzIGEgY3JpdGljYWwgYXJlYSBmb3IgZnV6emluZy5cblxuTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzIGFyZSBjb25maWd1cmVkIGNvcnJlY3RseTpcblxuKiAgIGBFbmFibGVDb25maWdzYDogYFtcIlRMU1wiXWAg4oCTIENoZWNrLlxuKiAgIGBGb2N1c1N5bWJvbHNgOiBgW1widGxzX3N3X3JlY3Ztc2dcIiwgXCJ0bHNfc3dfc3BsaWNlX3JlYWRcIiwgXCJ0bHNfc3dfcmVhZF9zb2NrXCJdYCDigJMgQ2hlY2suXG4qICAgYFJlYXNvbmluZ2A6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUTFMgc29mdHdhcmUgcmVjZWl2ZSBwYXRoIHRvIHByb3Blcmx5IGhhbmRsZSB6ZXJvLWxlbmd0aCBhcHBsaWNhdGlvbl9kYXRhIHJlY29yZHMgKGVtcHR5IGRhdGEgcmVjb3JkcykgaW4gVExTIDEuMiBhbmQgVExTIDEuMy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgYHJlY3Ztc2dgLCBgc3BsaWNlX3JlYWRgLCBhbmQgYHJlYWRfc29ja2Agb3BlcmF0aW9ucyBvbiBUTFMgc29ja2V0cywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZS5cIiDigJMgUGVyZmVjdCwgY292ZXJzIHRoZSBjb3JlIGlzc3VlLlxuKiAgIGBXb3J0aEZ1enppbmdgOiBgdHJ1ZWAg4oCTIFRoYXQncyB0aGUgY29ycmVjdCBldmFsdWF0aW9uLlxuXG5Mb29rcyBnb29kLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5MzMsIk91dHB1dFRva2VucyI6MTI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MDM6MDguOTA2MzkwNjA1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzODg5Njg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUTFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0bHNfc3dfcmVjdm1zZ1wiLFxuICAgIFwidGxzX3N3X3NwbGljZV9yZWFkXCIsXG4gICAgXCJ0bHNfc3dfcmVhZF9zb2NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRMUyBzb2Z0d2FyZSByZWNlaXZlIHBhdGggdG8gcHJvcGVybHkgaGFuZGxlIHplcm8tbGVuZ3RoIGFwcGxpY2F0aW9uX2RhdGEgcmVjb3JkcyAoZW1wdHkgZGF0YSByZWNvcmRzKSBpbiBUTFMgMS4yIGFuZCBUTFMgMS4zLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBgcmVjdm1zZ2AsIGBzcGxpY2VfcmVhZGAsIGFuZCBgcmVhZF9zb2NrYCBvcGVyYXRpb25zIG9uIFRMUyBzb2NrZXRzLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRMU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRsc19zd19yZWN2bXNnXCIsXG4gICAgXCJ0bHNfc3dfc3BsaWNlX3JlYWRcIixcbiAgICBcInRsc19zd19yZWFkX3NvY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVExTIHNvZnR3YXJlIHJlY2VpdmUgcGF0aCB0byBwcm9wZXJseSBoYW5kbGUgemVyby1sZW5ndGggYXBwbGljYXRpb25fZGF0YSByZWNvcmRzIChlbXB0eSBkYXRhIHJlY29yZHMpIGluIFRMUyAxLjIgYW5kIFRMUyAxLjMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGByZWN2bXNnYCwgYHNwbGljZV9yZWFkYCwgYW5kIGByZWFkX3NvY2tgIG9wZXJhdGlvbnMgb24gVExTIHNvY2tldHMsIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwfsfp[1] Phase: Succeeded StartedAt: 2026-07-27 12:03:20 +0000 UTC FinishedAt: 2026-07-27 12:03:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfsfp[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-27 12:03:20 +0000 UTC FinishedAt: 2026-07-27 12:03:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfsfp[2] Phase: Succeeded StartedAt: 2026-07-27 12:03:20 +0000 UTC FinishedAt: 2026-07-27 16:50:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfsfp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_sw_recvmsg","tls_sw_splice_read","tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"63214efa-4d82-4af7-9b6f-1d69148280a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-27 12:03:20 +0000 UTC FinishedAt: 2026-07-27 16:50:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_sw_recvmsg","tls_sw_splice_read","tls_sw_read_sock"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"63214efa-4d82-4af7-9b6f-1d69148280a3","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-workflowwfsfp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_sw_recvmsg","tls_sw_splice_read","tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"63214efa-4d82-4af7-9b6f-1d69148280a3","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-07-27 12:03:20 +0000 UTC FinishedAt: 2026-07-27 12:03:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfsfp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_sw_recvmsg","tls_sw_splice_read","tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"63214efa-4d82-4af7-9b6f-1d69148280a3","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-07-27 12:03:20 +0000 UTC FinishedAt: 2026-07-27 12:03:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"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-workflowwfsfp/series-workflowwfsfp-convert-artifact-135373511/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwfsfp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_sw_recvmsg","tls_sw_splice_read","tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"63214efa-4d82-4af7-9b6f-1d69148280a3","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-07-27 12:03:30 +0000 UTC FinishedAt: 2026-07-27 12:53:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfsfp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_sw_recvmsg","tls_sw_splice_read","tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"63214efa-4d82-4af7-9b6f-1d69148280a3","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-07-27 12:03:30 +0000 UTC FinishedAt: 2026-07-27 12:53:28 +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:*27b7cb43-f7a3-4d11-bc36-e3f36bfdc2dd,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-workflowwfsfp/series-workflowwfsfp-convert-artifact-135373511/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": "d4719595-d656-4aaf-ae6e-705c21367fa6", "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-workflowwfsfp/series-workflowwfsfp-build-action-3619466077/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwfsfp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_sw_recvmsg","tls_sw_splice_read","tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"63214efa-4d82-4af7-9b6f-1d69148280a3","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-07-27 12:03:30 +0000 UTC FinishedAt: 2026-07-27 12:52:20 +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:*27b7cb43-f7a3-4d11-bc36-e3f36bfdc2dd,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-workflowwfsfp/series-workflowwfsfp-convert-artifact-135373511/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": "d4719595-d656-4aaf-ae6e-705c21367fa6", "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-workflowwfsfp/series-workflowwfsfp-build-action-3619466077/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwfsfp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_sw_recvmsg","tls_sw_splice_read","tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"63214efa-4d82-4af7-9b6f-1d69148280a3","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-07-27 12:53:28 +0000 UTC FinishedAt: 2026-07-27 12:53:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfsfp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_sw_recvmsg","tls_sw_splice_read","tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"63214efa-4d82-4af7-9b6f-1d69148280a3","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-07-27 12:53:28 +0000 UTC FinishedAt: 2026-07-27 12:53:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfsfp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_sw_recvmsg","tls_sw_splice_read","tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"63214efa-4d82-4af7-9b6f-1d69148280a3","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-07-27 12:53:28 +0000 UTC FinishedAt: 2026-07-27 12:53:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfsfp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_sw_recvmsg","tls_sw_splice_read","tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"63214efa-4d82-4af7-9b6f-1d69148280a3","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-07-27 12:53:28 +0000 UTC FinishedAt: 2026-07-27 12:53:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"63214efa-4d82-4af7-9b6f-1d69148280a3","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-workflowwfsfp/series-workflowwfsfp-convert-artifact-1573203446/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwfsfp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_sw_recvmsg","tls_sw_splice_read","tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"63214efa-4d82-4af7-9b6f-1d69148280a3","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-07-27 12:53:50 +0000 UTC FinishedAt: 2026-07-27 12:55:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfsfp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_sw_recvmsg","tls_sw_splice_read","tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"63214efa-4d82-4af7-9b6f-1d69148280a3","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-07-27 12:53:50 +0000 UTC FinishedAt: 2026-07-27 12:55:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d4719595-d656-4aaf-ae6e-705c21367fa6,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-workflowwfsfp/series-workflowwfsfp-build-action-3619466077/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwfsfp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_sw_recvmsg","tls_sw_splice_read","tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"63214efa-4d82-4af7-9b6f-1d69148280a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-27 12:55:39 +0000 UTC FinishedAt: 2026-07-27 12:55:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfsfp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_sw_recvmsg","tls_sw_splice_read","tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"63214efa-4d82-4af7-9b6f-1d69148280a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-27 12:55:39 +0000 UTC FinishedAt: 2026-07-27 12:55:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfsfp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_sw_recvmsg","tls_sw_splice_read","tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"63214efa-4d82-4af7-9b6f-1d69148280a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-27 12:55:39 +0000 UTC FinishedAt: 2026-07-27 13:46:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfsfp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_sw_recvmsg","tls_sw_splice_read","tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"63214efa-4d82-4af7-9b6f-1d69148280a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-27 12:55:39 +0000 UTC FinishedAt: 2026-07-27 13:46:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*27b7cb43-f7a3-4d11-bc36-e3f36bfdc2dd,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-workflowwfsfp/series-workflowwfsfp-convert-artifact-1573203446/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": "4a96a2f2-191d-486c-bb78-ff4dc6d28b7b", "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-workflowwfsfp/series-workflowwfsfp-build-action-3059111162/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwfsfp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_sw_recvmsg","tls_sw_splice_read","tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"63214efa-4d82-4af7-9b6f-1d69148280a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-27 12:55:39 +0000 UTC FinishedAt: 2026-07-27 13:46:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*27b7cb43-f7a3-4d11-bc36-e3f36bfdc2dd,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-workflowwfsfp/series-workflowwfsfp-convert-artifact-1573203446/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": "4a96a2f2-191d-486c-bb78-ff4dc6d28b7b", "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-workflowwfsfp/series-workflowwfsfp-build-action-3059111162/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwfsfp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_sw_recvmsg","tls_sw_splice_read","tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"63214efa-4d82-4af7-9b6f-1d69148280a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-27 13:46:56 +0000 UTC FinishedAt: 2026-07-27 13:46:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfsfp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_sw_recvmsg","tls_sw_splice_read","tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"63214efa-4d82-4af7-9b6f-1d69148280a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-27 13:46:56 +0000 UTC FinishedAt: 2026-07-27 13:46:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfsfp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_sw_recvmsg","tls_sw_splice_read","tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"63214efa-4d82-4af7-9b6f-1d69148280a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-27 13:46:56 +0000 UTC FinishedAt: 2026-07-27 13:48:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfsfp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_sw_recvmsg","tls_sw_splice_read","tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"63214efa-4d82-4af7-9b6f-1d69148280a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-27 13:46:56 +0000 UTC FinishedAt: 2026-07-27 13:48:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4a96a2f2-191d-486c-bb78-ff4dc6d28b7b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwfsfp/series-workflowwfsfp-build-action-3059111162/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwfsfp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_sw_recvmsg","tls_sw_splice_read","tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"63214efa-4d82-4af7-9b6f-1d69148280a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-27 13:48:55 +0000 UTC FinishedAt: 2026-07-27 16:50:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfsfp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_sw_recvmsg","tls_sw_splice_read","tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"63214efa-4d82-4af7-9b6f-1d69148280a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-27 13:48:55 +0000 UTC FinishedAt: 2026-07-27 16:50:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_sw_recvmsg","tls_sw_splice_read","tls_sw_read_sock"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*d4719595-d656-4aaf-ae6e-705c21367fa6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4a96a2f2-191d-486c-bb78-ff4dc6d28b7b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwfsfp/series-workflowwfsfp-build-action-3619466077/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwfsfp/series-workflowwfsfp-build-action-3059111162/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwfsfp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_sw_recvmsg","tls_sw_splice_read","tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"63214efa-4d82-4af7-9b6f-1d69148280a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-27 13:48:55 +0000 UTC FinishedAt: 2026-07-27 13:49:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfsfp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_sw_recvmsg","tls_sw_splice_read","tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"63214efa-4d82-4af7-9b6f-1d69148280a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-27 13:48:55 +0000 UTC FinishedAt: 2026-07-27 13:48:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_sw_recvmsg","tls_sw_splice_read","tls_sw_read_sock"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwfsfp/series-workflowwfsfp-convert-artifact-3711203611/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwfsfp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_sw_recvmsg","tls_sw_splice_read","tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"63214efa-4d82-4af7-9b6f-1d69148280a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-27 13:48:55 +0000 UTC FinishedAt: 2026-07-27 13:48:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfsfp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_sw_recvmsg","tls_sw_splice_read","tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"63214efa-4d82-4af7-9b6f-1d69148280a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-27 13:48:55 +0000 UTC FinishedAt: 2026-07-27 13:48:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfsfp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_sw_recvmsg","tls_sw_splice_read","tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"63214efa-4d82-4af7-9b6f-1d69148280a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-27 13:48:55 +0000 UTC FinishedAt: 2026-07-27 13:48:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfsfp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_sw_recvmsg","tls_sw_splice_read","tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"63214efa-4d82-4af7-9b6f-1d69148280a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-27 13:49:05 +0000 UTC FinishedAt: 2026-07-27 16:50:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwfsfp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tls_sw_recvmsg","tls_sw_splice_read","tls_sw_read_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS"],"series_id":"63214efa-4d82-4af7-9b6f-1d69148280a3","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-27 13:49:05 +0000 UTC FinishedAt: 2026-07-27 16:50:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d4719595-d656-4aaf-ae6e-705c21367fa6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4a96a2f2-191d-486c-bb78-ff4dc6d28b7b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwfsfp/series-workflowwfsfp-build-action-3619466077/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwfsfp/series-workflowwfsfp-build-action-3059111162/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwfsfp/series-workflowwfsfp-convert-artifact-3711203611/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}