Name: series-workflowz9pwk Phase: Succeeded StartedAt: 2026-08-16 07:26:46 +0000 UTC FinishedAt: 2026-08-16 11:10:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz9pwk[0] Phase: Succeeded StartedAt: 2026-08-16 07:26:46 +0000 UTC FinishedAt: 2026-08-16 07:31:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz9pwk[0].run-triage Phase: Succeeded StartedAt: 2026-08-16 07:26:46 +0000 UTC FinishedAt: 2026-08-16 07:31:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "a5161661ae99f497affa83a5b8654e457cda6267", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "a5161661ae99f497affa83a5b8654e457cda6267", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING" ], "series_id": "642897a0-bc8f-473d-978f-033c1aa749f7" }, "track": "KASAN", "fuzz": { "focus": [ "io_uring" ], "focus_symbols": [ "io_create_region", "io_free_region", "io_uring_mmap" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDA3OjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9fY3JlYXRlX3JlZ2lvbiYjMzQ7LAogICAgJiMzNDtpb19mcmVlX3JlZ2lvbiYjMzQ7LAogICAgJiMzNDtpb191cmluZ19tbWFwJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBpbnRlcm5hbCBzdHJ1Y3R1cmUgYGlvX3JlZ2lvbl9hY2NvdW50YCB0byB0cmFjayBtZW1vcnkgYWNjb3VudGluZyBmb3IgaW9fdXJpbmcgbWVtb3J5IHJlZ2lvbnMgYWNyb3NzIFZNQSBsaWZlY3ljbGVzLiBUaGUgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCBpbnRlcm5hbGx5IGFuZCBhbGwgaXRzIGZpZWxkcyAoYHJlZnNgLCBgdXNlcmAsIGBucl9wYWdlc2ApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBleHBvc2VkIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgYWRkcmVzcyBtZW1vcnkgYWNjb3VudGluZyBhbmQgb2JqZWN0IGxpZmVjeWNsZXMsIHdoZXJlIGFueSBwb3RlbnRpYWwgYnVncyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVha3MpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgbWVtb3J5IGxlYWsgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBhY2NvdW50aW5nIGFuZCBtYXBwaW5nIGxvZ2ljIGZvciBpb191cmluZyByZWdpb25zLCBpbnRyb2R1Y2luZyBgc3RydWN0IGlvX3JlZ2lvbl9hY2NvdW50YCBhbmQgY2hhbmdpbmcgaG93IG1lbW9yeSBpcyBhY2NvdW50ZWQgYW5kIGZyZWVkLiBUaGlzIGFmZmVjdHMgYGlvX2NyZWF0ZV9yZWdpb25gLCBgaW9fZnJlZV9yZWdpb25gLCBhbmQgYGlvX3VyaW5nX21tYXBgLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDA3OjI5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzUxMjk0N2MwZDM2MDI0ZWZkNTExOWZlYjU5NDFkNWFhMGRmZDQzMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDE2IDA3OjI5OjMzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW9fdXJpbmdfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvaW9fdXJpbmdfdHlwZXMuaFxuaW5kZXggODcxNTFhNWI2MmMxYi4uNmZlYjdlZTM0NDBmZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaW9fdXJpbmdfdHlwZXMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oXG5AQCAtOTQsMTEgJiM0Mzs5NCwxNCBAQCBzdHJ1Y3QgaW9faGFzaF90YWJsZSB7XG4gXHR1bnNpZ25lZFx0XHRoYXNoX2JpdHM7XG4gfTtcbiBcbiYjNDM7c3RydWN0IGlvX3JlZ2lvbl9hY2NvdW50O1xuJiM0MztcbiBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiB7XG4gXHRzdHJ1Y3QgcGFnZVx0XHQqKnBhZ2VzO1xuIFx0dm9pZFx0XHRcdCpwdHI7XG4gXHR1bnNpZ25lZFx0XHRucl9wYWdlcztcbiBcdHVuc2lnbmVkXHRcdGZsYWdzO1xuJiM0MztcdHN0cnVjdCBpb19yZWdpb25fYWNjb3VudFx0KmFjY291bnQ7XG4gfTtcbiBcbiAvKlxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL21lbW1hcC5jIGIvaW9fdXJpbmcvbWVtbWFwLmNcbmluZGV4IDIzZThhODUxMTFiY2EuLmNhMjhhOTQyOWMxNjggMTAwNjQ0XG4tLS0gYS9pb191cmluZy9tZW1tYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvbWVtbWFwLmNcbkBAIC00LDYgJiM0Mzs0LDggQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnJuby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYW4uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWZjb3VudC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3VzZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvX3VyaW5nLmhcdTAwM2VcbkBAIC04OCw2ICYjNDM7OTAsNTIgQEAgZW51bSB7XG4gXHRJT19SRUdJT05fRl9TSU5HTEVfUkVGXHRcdFx0PSA0LFxuIH07XG4gXG4mIzQzO3N0cnVjdCBpb19yZWdpb25fYWNjb3VudCB7XG4mIzQzO1x0cmVmY291bnRfdCByZWZzO1xuJiM0MztcdHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlcjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBpb19yZWdpb25fYWNjb3VudCAqXG4mIzQzO2lvX3JlZ2lvbl9hY2NvdW50X2FsbG9jKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpb19yZWdpb25fYWNjb3VudCAqYWNjb3VudDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIXVzZXIpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0YWNjb3VudCA9IGttYWxsb2Nfb2JqKCphY2NvdW50LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuJiM0MztcdGlmICghYWNjb3VudClcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBfX2lvX2FjY291bnRfbWVtKHVzZXIsIG5yX3BhZ2VzKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRrZnJlZShhY2NvdW50KTtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZWZjb3VudF9zZXQoXHUwMDI2YWNjb3VudC1cdTAwM2VyZWZzLCAxKTtcbiYjNDM7XHRhY2NvdW50LVx1MDAzZXVzZXIgPSBnZXRfdWlkKHVzZXIpO1xuJiM0MztcdGFjY291bnQtXHUwMDNlbnJfcGFnZXMgPSBucl9wYWdlcztcbiYjNDM7XHRyZXR1cm4gYWNjb3VudDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaW9fcmVnaW9uX2FjY291bnRfZ2V0KHN0cnVjdCBpb19yZWdpb25fYWNjb3VudCAqYWNjb3VudClcbiYjNDM7e1xuJiM0MztcdGlmIChhY2NvdW50KVxuJiM0MztcdFx0cmVmY291bnRfaW5jKFx1MDAyNmFjY291bnQtXHUwMDNlcmVmcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGlvX3JlZ2lvbl9hY2NvdW50X3B1dChzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnQgKmFjY291bnQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoYWNjb3VudCBcdTAwMjZcdTAwMjYgcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmFjY291bnQtXHUwMDNlcmVmcykpIHtcbiYjNDM7XHRcdF9faW9fdW5hY2NvdW50X21lbShhY2NvdW50LVx1MDAzZXVzZXIsIGFjY291bnQtXHUwMDNlbnJfcGFnZXMpO1xuJiM0MztcdFx0ZnJlZV91aWQoYWNjb3VudC1cdTAwM2V1c2VyKTtcbiYjNDM7XHRcdGtmcmVlKGFjY291bnQpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiB2b2lkIGlvX2ZyZWVfcmVnaW9uKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlciwgc3RydWN0IGlvX21hcHBlZF9yZWdpb24gKm1yKVxuIHtcbiBcdGlmIChtci1cdTAwM2VwYWdlcykge1xuQEAgLTEwNSw4ICYjNDM7MTUzLDEyIEBAIHZvaWQgaW9fZnJlZV9yZWdpb24oc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyLCBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIpXG4gXHR9XG4gXHRpZiAoKG1yLVx1MDAzZWZsYWdzIFx1MDAyNiBJT19SRUdJT05fRl9WTUFQKSBcdTAwMjZcdTAwMjYgbXItXHUwMDNlcHRyKVxuIFx0XHR2dW5tYXAobXItXHUwMDNlcHRyKTtcbi1cdGlmIChtci1cdTAwM2Vucl9wYWdlcyBcdTAwMjZcdTAwMjYgdXNlcilcbiYjNDM7XHRpZiAobXItXHUwMDNlYWNjb3VudCkge1xuJiM0MztcdFx0V0FSTl9PTl9PTkNFKG1yLVx1MDAzZWFjY291bnQtXHUwMDNldXNlciAhPSB1c2VyKTtcbiYjNDM7XHRcdGlvX3JlZ2lvbl9hY2NvdW50X3B1dChtci1cdTAwM2VhY2NvdW50KTtcbiYjNDM7XHR9IGVsc2UgaWYgKG1yLVx1MDAzZW5yX3BhZ2VzIFx1MDAyNlx1MDAyNiB1c2VyKSB7XG4gXHRcdF9faW9fdW5hY2NvdW50X21lbSh1c2VyLCBtci1cdTAwM2Vucl9wYWdlcyk7XG4mIzQzO1x0fVxuIFxuIFx0bWVtc2V0KG1yLCAwLCBzaXplb2YoKm1yKSk7XG4gfVxuQEAgLTE4OCw3ICYjNDM7MjQwLDggQEAgaW50IGlvX2NyZWF0ZV9yZWdpb24oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcbiBcdGludCBucl9wYWdlcywgcmV0O1xuIFx0dTY0IGVuZDtcbiBcbi1cdGlmIChXQVJOX09OX09OQ0UobXItXHUwMDNlcGFnZXMgfHwgbXItXHUwMDNlcHRyIHx8IG1yLVx1MDAzZW5yX3BhZ2VzKSlcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKG1yLVx1MDAzZXBhZ2VzIHx8IG1yLVx1MDAzZXB0ciB8fCBtci1cdTAwM2Vucl9wYWdlcyB8fFxuJiM0MztcdFx0XHQgbXItXHUwMDNlYWNjb3VudCkpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuIFx0aWYgKG1lbWNocl9pbnYoXHUwMDI2cmVnLVx1MDAzZV9fcmVzdiwgMCwgc2l6ZW9mKHJlZy1cdTAwM2VfX3Jlc3YpKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMjA3LDEwICYjNDM7MjYwLDIzIEBAIGludCBpb19jcmVhdGVfcmVnaW9uKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXG4gXHRcdHJldHVybiAtRU9WRVJGTE9XO1xuIFxuIFx0bnJfcGFnZXMgPSByZWctXHUwMDNlc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbi1cdGlmIChjdHgtXHUwMDNldXNlcikge1xuLVx0XHRyZXQgPSBfX2lvX2FjY291bnRfbWVtKGN0eC1cdTAwM2V1c2VyLCBucl9wYWdlcyk7XG4tXHRcdGlmIChyZXQpXG4mIzQzO1x0aWYgKHJlZy1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX01FTV9SRUdJT05fVFlQRV9VU0VSKSB7XG4mIzQzO1x0XHRpZiAoY3R4LVx1MDAzZXVzZXIpIHtcbiYjNDM7XHRcdFx0cmV0ID0gX19pb19hY2NvdW50X21lbShjdHgtXHUwMDNldXNlciwgbnJfcGFnZXMpO1xuJiM0MztcdFx0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBLZXJuZWwtYWxsb2NhdGVkIHBhZ2VzIGNhbiBvdXRsaXZlIHRoZWlyIGFjdGl2ZSByZWdpb24gdGhyb3VnaFxuJiM0MztcdFx0ICogdXNlcnNwYWNlIG1hcHBpbmdzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRtci1cdTAwM2VhY2NvdW50ID0gaW9fcmVnaW9uX2FjY291bnRfYWxsb2MoY3R4LVx1MDAzZXVzZXIsIG5yX3BhZ2VzKTtcbiYjNDM7XHRcdGlmIChJU19FUlIobXItXHUwMDNlYWNjb3VudCkpIHtcbiYjNDM7XHRcdFx0cmV0ID0gUFRSX0VSUihtci1cdTAwM2VhY2NvdW50KTtcbiYjNDM7XHRcdFx0bXItXHUwMDNlYWNjb3VudCA9IE5VTEw7XG4gXHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdH1cbiBcdH1cbiBcdG1yLVx1MDAzZW5yX3BhZ2VzID0gbnJfcGFnZXM7XG4gXG5AQCAtMjgxLDE1ICYjNDM7MzQ3LDQxIEBAIHN0YXRpYyB2b2lkICppb191cmluZ192YWxpZGF0ZV9tbWFwX3JlcXVlc3Qoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBwZ29mZilcbiBcbiAjaWZkZWYgQ09ORklHX01NVVxuIFxuJiM0MztzdGF0aWMgdm9pZCBpb19yZWdpb25fdm1fb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiYjNDM7e1xuJiM0MztcdGlvX3JlZ2lvbl9hY2NvdW50X2dldCh2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaW9fcmVnaW9uX3ZtX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuJiM0Mzt7XG4mIzQzO1x0aW9fcmVnaW9uX2FjY291bnRfcHV0KHZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGlvX3JlZ2lvbl92bV9vcHMgPSB7XG4mIzQzO1x0Lm9wZW4gPSBpb19yZWdpb25fdm1fb3BlbixcbiYjNDM7XHQuY2xvc2UgPSBpb19yZWdpb25fdm1fY2xvc2UsXG4mIzQzO307XG4mIzQzO1xuIHN0YXRpYyBpbnQgaW9fcmVnaW9uX21tYXAoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4gXHRcdFx0ICBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXG4gXHRcdFx0ICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHQgIHVuc2lnbmVkIG1heF9wYWdlcylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gbWluKG1yLVx1MDAzZW5yX3BhZ2VzLCBtYXhfcGFnZXMpO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHR2bV9mbGFnc19zZXQodm1hLCBWTV9ET05URVhQQU5EKTtcbi1cdHJldHVybiB2bV9pbnNlcnRfcGFnZXModm1hLCB2bWEtXHUwMDNldm1fc3RhcnQsIG1yLVx1MDAzZXBhZ2VzLCBcdTAwMjZucl9wYWdlcyk7XG4mIzQzO1x0cmV0ID0gdm1faW5zZXJ0X3BhZ2VzKHZtYSwgdm1hLVx1MDAzZXZtX3N0YXJ0LCBtci1cdTAwM2VwYWdlcywgXHUwMDI2bnJfcGFnZXMpO1xuJiM0MztcdGlmICghcmV0IFx1MDAyNlx1MDAyNiBtci1cdTAwM2VhY2NvdW50KSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogQWNjb3VudGluZyBkZWxpYmVyYXRlbHkgcmVtYWlucyBhdCByZWdpb24gZ3JhbnVsYXJpdHkgd2hlblxuJiM0MztcdFx0ICogdGhpcyBWTUEgbWFwcyBvbmx5IHBhcnQgb2YgdGhlIHJlZ2lvbi5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0dm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IG1yLVx1MDAzZWFjY291bnQ7XG4mIzQzO1x0XHR2bWEtXHUwMDNldm1fb3BzID0gXHUwMDI2aW9fcmVnaW9uX3ZtX29wcztcbiYjNDM7XHRcdHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlb3Blbih2bWEpO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBfX2NvbGQgaW50IGlvX3VyaW5nX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuQEAgLTM3OSw2ICYjNDM7NDcxLDggQEAgc3RhdGljIHZvaWQgaW9fdXJpbmdfbm9tbXVfdm1fY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gXG4gXHRmb3IgKGluZGV4ID0gdm1hLVx1MDAzZXZtX3N0YXJ0OyBpbmRleCBcdTAwM2Mgdm1hLVx1MDAzZXZtX2VuZDsgaW5kZXggJiM0Mzs9IFBBR0VfU0laRSlcbiBcdFx0cHV0X3BhZ2UodmlydF90b19wYWdlKCh2b2lkICopIGluZGV4KSk7XG4mIzQzO1xuJiM0MztcdGlvX3JlZ2lvbl9hY2NvdW50X3B1dCh2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhKTtcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBpb191cmluZ19ub21tdV92bV9vcHMgPSB7XG5AQCAtNDExLDYgJiM0Mzs1MDUsOCBAQCBpbnQgaW9fdXJpbmdfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyByZWdpb24tXHUwMDNlbnJfcGFnZXM7IGkmIzQzOyYjNDM7KVxuIFx0XHRnZXRfcGFnZShyZWdpb24tXHUwMDNlcGFnZXNbaV0pO1xuIFxuJiM0MztcdHZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGEgPSByZWdpb24tXHUwMDNlYWNjb3VudDtcbiYjNDM7XHRpb19yZWdpb25fYWNjb3VudF9nZXQocmVnaW9uLVx1MDAzZWFjY291bnQpO1xuIFx0dm1hLVx1MDAzZXZtX29wcyA9IFx1MDAyNmlvX3VyaW5nX25vbW11X3ZtX29wcztcbiBcdHJldHVybiAwO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzoyOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19jcmVhdGVfcmVnaW9uJiMzNDssCiAgICAmIzM0O2lvX2ZyZWVfcmVnaW9uJiMzNDssCiAgICAmIzM0O2lvX3VyaW5nX21tYXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGFjY291bnRpbmcgYW5kIG1hcHBpbmcgbG9naWMgZm9yIGlvX3VyaW5nIHJlZ2lvbnMsIGludHJvZHVjaW5nIGBzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnRgIGFuZCBjaGFuZ2luZyBob3cgbWVtb3J5IGlzIGFjY291bnRlZCBhbmQgZnJlZWQuIFRoaXMgYWZmZWN0cyBgaW9fY3JlYXRlX3JlZ2lvbmAsIGBpb19mcmVlX3JlZ2lvbmAsIGFuZCBgaW9fdXJpbmdfbW1hcGAuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzNTEyOTQ3YzBkMzYwMjRlZmQ1MTE5ZmViNTk0MWQ1YWEwZGZkNDMwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMTYgMDc6Mjk6MzMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmgKaW5kZXggODcxNTFhNWI2MmMxYi4uNmZlYjdlZTM0NDBmZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaW9fdXJpbmdfdHlwZXMuaApAQCAtOTQsMTEgJiM0Mzs5NCwxNCBAQCBzdHJ1Y3QgaW9faGFzaF90YWJsZSB7CiAJdW5zaWduZWQJCWhhc2hfYml0czsKIH07CiAKJiM0MztzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnQ7CiYjNDM7CiBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiB7CiAJc3RydWN0IHBhZ2UJCSoqcGFnZXM7CiAJdm9pZAkJCSpwdHI7CiAJdW5zaWduZWQJCW5yX3BhZ2VzOwogCXVuc2lnbmVkCQlmbGFnczsKJiM0MzsJc3RydWN0IGlvX3JlZ2lvbl9hY2NvdW50CSphY2NvdW50OwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2lvX3VyaW5nL21lbW1hcC5jIGIvaW9fdXJpbmcvbWVtbWFwLmMKaW5kZXggMjNlOGE4NTExMWJjYS4uY2EyOGE5NDI5YzE2OCAxMDA2NDQKLS0tIGEvaW9fdXJpbmcvbWVtbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvbWVtbWFwLmMKQEAgLTQsNiAmIzQzOzQsOCBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2Vycm5vLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW0uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tbWFuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3JlZmNvdW50LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL3VzZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdm1hbGxvYy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lvX3VyaW5nLmgmZ3Q7CkBAIC04OCw2ICYjNDM7OTAsNTIgQEAgZW51bSB7CiAJSU9fUkVHSU9OX0ZfU0lOR0xFX1JFRgkJCT0gNCwKIH07CiAKJiM0MztzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnQgewomIzQzOwlyZWZjb3VudF90IHJlZnM7CiYjNDM7CXN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlcjsKJiM0MzsJdW5zaWduZWQgbG9uZyBucl9wYWdlczsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnQgKgomIzQzO2lvX3JlZ2lvbl9hY2NvdW50X2FsbG9jKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpb19yZWdpb25fYWNjb3VudCAqYWNjb3VudDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCF1c2VyKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CWFjY291bnQgPSBrbWFsbG9jX29iaigqYWNjb3VudCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKJiM0MzsJaWYgKCFhY2NvdW50KQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CiYjNDM7CXJldCA9IF9faW9fYWNjb3VudF9tZW0odXNlciwgbnJfcGFnZXMpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlrZnJlZShhY2NvdW50KTsKJiM0MzsJCXJldHVybiBFUlJfUFRSKHJldCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmVmY291bnRfc2V0KCZhbXA7YWNjb3VudC0mZ3Q7cmVmcywgMSk7CiYjNDM7CWFjY291bnQtJmd0O3VzZXIgPSBnZXRfdWlkKHVzZXIpOwomIzQzOwlhY2NvdW50LSZndDtucl9wYWdlcyA9IG5yX3BhZ2VzOwomIzQzOwlyZXR1cm4gYWNjb3VudDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaW9fcmVnaW9uX2FjY291bnRfZ2V0KHN0cnVjdCBpb19yZWdpb25fYWNjb3VudCAqYWNjb3VudCkKJiM0Mzt7CiYjNDM7CWlmIChhY2NvdW50KQomIzQzOwkJcmVmY291bnRfaW5jKCZhbXA7YWNjb3VudC0mZ3Q7cmVmcyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlvX3JlZ2lvbl9hY2NvdW50X3B1dChzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnQgKmFjY291bnQpCiYjNDM7ewomIzQzOwlpZiAoYWNjb3VudCAmYW1wOyZhbXA7IHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO2FjY291bnQtJmd0O3JlZnMpKSB7CiYjNDM7CQlfX2lvX3VuYWNjb3VudF9tZW0oYWNjb3VudC0mZ3Q7dXNlciwgYWNjb3VudC0mZ3Q7bnJfcGFnZXMpOwomIzQzOwkJZnJlZV91aWQoYWNjb3VudC0mZ3Q7dXNlcik7CiYjNDM7CQlrZnJlZShhY2NvdW50KTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHZvaWQgaW9fZnJlZV9yZWdpb24oc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyLCBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIpCiB7CiAJaWYgKG1yLSZndDtwYWdlcykgewpAQCAtMTA1LDggJiM0MzsxNTMsMTIgQEAgdm9pZCBpb19mcmVlX3JlZ2lvbihzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIsIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcikKIAl9CiAJaWYgKChtci0mZ3Q7ZmxhZ3MgJmFtcDsgSU9fUkVHSU9OX0ZfVk1BUCkgJmFtcDsmYW1wOyBtci0mZ3Q7cHRyKQogCQl2dW5tYXAobXItJmd0O3B0cik7Ci0JaWYgKG1yLSZndDtucl9wYWdlcyAmYW1wOyZhbXA7IHVzZXIpCiYjNDM7CWlmIChtci0mZ3Q7YWNjb3VudCkgewomIzQzOwkJV0FSTl9PTl9PTkNFKG1yLSZndDthY2NvdW50LSZndDt1c2VyICE9IHVzZXIpOwomIzQzOwkJaW9fcmVnaW9uX2FjY291bnRfcHV0KG1yLSZndDthY2NvdW50KTsKJiM0MzsJfSBlbHNlIGlmIChtci0mZ3Q7bnJfcGFnZXMgJmFtcDsmYW1wOyB1c2VyKSB7CiAJCV9faW9fdW5hY2NvdW50X21lbSh1c2VyLCBtci0mZ3Q7bnJfcGFnZXMpOwomIzQzOwl9CiAKIAltZW1zZXQobXIsIDAsIHNpemVvZigqbXIpKTsKIH0KQEAgLTE4OCw3ICYjNDM7MjQwLDggQEAgaW50IGlvX2NyZWF0ZV9yZWdpb24oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptciwKIAlpbnQgbnJfcGFnZXMsIHJldDsKIAl1NjQgZW5kOwogCi0JaWYgKFdBUk5fT05fT05DRShtci0mZ3Q7cGFnZXMgfHwgbXItJmd0O3B0ciB8fCBtci0mZ3Q7bnJfcGFnZXMpKQomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKG1yLSZndDtwYWdlcyB8fCBtci0mZ3Q7cHRyIHx8IG1yLSZndDtucl9wYWdlcyB8fAomIzQzOwkJCSBtci0mZ3Q7YWNjb3VudCkpCiAJCXJldHVybiAtRUZBVUxUOwogCWlmIChtZW1jaHJfaW52KCZhbXA7cmVnLSZndDtfX3Jlc3YsIDAsIHNpemVvZihyZWctJmd0O19fcmVzdikpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTIwNywxMCAmIzQzOzI2MCwyMyBAQCBpbnQgaW9fY3JlYXRlX3JlZ2lvbihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX21hcHBlZF9yZWdpb24gKm1yLAogCQlyZXR1cm4gLUVPVkVSRkxPVzsKIAogCW5yX3BhZ2VzID0gcmVnLSZndDtzaXplICZndDsmZ3Q7IFBBR0VfU0hJRlQ7Ci0JaWYgKGN0eC0mZ3Q7dXNlcikgewotCQlyZXQgPSBfX2lvX2FjY291bnRfbWVtKGN0eC0mZ3Q7dXNlciwgbnJfcGFnZXMpOwotCQlpZiAocmV0KQomIzQzOwlpZiAocmVnLSZndDtmbGFncyAmYW1wOyBJT1JJTkdfTUVNX1JFR0lPTl9UWVBFX1VTRVIpIHsKJiM0MzsJCWlmIChjdHgtJmd0O3VzZXIpIHsKJiM0MzsJCQlyZXQgPSBfX2lvX2FjY291bnRfbWVtKGN0eC0mZ3Q7dXNlciwgbnJfcGFnZXMpOwomIzQzOwkJCWlmIChyZXQpCiYjNDM7CQkJCXJldHVybiByZXQ7CiYjNDM7CQl9CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKgomIzQzOwkJICogS2VybmVsLWFsbG9jYXRlZCBwYWdlcyBjYW4gb3V0bGl2ZSB0aGVpciBhY3RpdmUgcmVnaW9uIHRocm91Z2gKJiM0MzsJCSAqIHVzZXJzcGFjZSBtYXBwaW5ncy4KJiM0MzsJCSAqLwomIzQzOwkJbXItJmd0O2FjY291bnQgPSBpb19yZWdpb25fYWNjb3VudF9hbGxvYyhjdHgtJmd0O3VzZXIsIG5yX3BhZ2VzKTsKJiM0MzsJCWlmIChJU19FUlIobXItJmd0O2FjY291bnQpKSB7CiYjNDM7CQkJcmV0ID0gUFRSX0VSUihtci0mZ3Q7YWNjb3VudCk7CiYjNDM7CQkJbXItJmd0O2FjY291bnQgPSBOVUxMOwogCQkJcmV0dXJuIHJldDsKJiM0MzsJCX0KIAl9CiAJbXItJmd0O25yX3BhZ2VzID0gbnJfcGFnZXM7CiAKQEAgLTI4MSwxNSAmIzQzOzM0Nyw0MSBAQCBzdGF0aWMgdm9pZCAqaW9fdXJpbmdfdmFsaWRhdGVfbW1hcF9yZXF1ZXN0KHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3QgcGdvZmYpCiAKICNpZmRlZiBDT05GSUdfTU1VCiAKJiM0MztzdGF0aWMgdm9pZCBpb19yZWdpb25fdm1fb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKJiM0Mzt7CiYjNDM7CWlvX3JlZ2lvbl9hY2NvdW50X2dldCh2bWEtJmd0O3ZtX3ByaXZhdGVfZGF0YSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlvX3JlZ2lvbl92bV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKJiM0Mzt7CiYjNDM7CWlvX3JlZ2lvbl9hY2NvdW50X3B1dCh2bWEtJmd0O3ZtX3ByaXZhdGVfZGF0YSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaW9fcmVnaW9uX3ZtX29wcyA9IHsKJiM0MzsJLm9wZW4gPSBpb19yZWdpb25fdm1fb3BlbiwKJiM0MzsJLmNsb3NlID0gaW9fcmVnaW9uX3ZtX2Nsb3NlLAomIzQzO307CiYjNDM7CiBzdGF0aWMgaW50IGlvX3JlZ2lvbl9tbWFwKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LAogCQkJICBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsCiAJCQkgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJICB1bnNpZ25lZCBtYXhfcGFnZXMpCiB7CiAJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IG1pbihtci0mZ3Q7bnJfcGFnZXMsIG1heF9wYWdlcyk7CiYjNDM7CWludCByZXQ7CiAKIAl2bV9mbGFnc19zZXQodm1hLCBWTV9ET05URVhQQU5EKTsKLQlyZXR1cm4gdm1faW5zZXJ0X3BhZ2VzKHZtYSwgdm1hLSZndDt2bV9zdGFydCwgbXItJmd0O3BhZ2VzLCAmYW1wO25yX3BhZ2VzKTsKJiM0MzsJcmV0ID0gdm1faW5zZXJ0X3BhZ2VzKHZtYSwgdm1hLSZndDt2bV9zdGFydCwgbXItJmd0O3BhZ2VzLCAmYW1wO25yX3BhZ2VzKTsKJiM0MzsJaWYgKCFyZXQgJmFtcDsmYW1wOyBtci0mZ3Q7YWNjb3VudCkgewomIzQzOwkJLyoKJiM0MzsJCSAqIEFjY291bnRpbmcgZGVsaWJlcmF0ZWx5IHJlbWFpbnMgYXQgcmVnaW9uIGdyYW51bGFyaXR5IHdoZW4KJiM0MzsJCSAqIHRoaXMgVk1BIG1hcHMgb25seSBwYXJ0IG9mIHRoZSByZWdpb24uCiYjNDM7CQkgKi8KJiM0MzsJCXZtYS0mZ3Q7dm1fcHJpdmF0ZV9kYXRhID0gbXItJmd0O2FjY291bnQ7CiYjNDM7CQl2bWEtJmd0O3ZtX29wcyA9ICZhbXA7aW9fcmVnaW9uX3ZtX29wczsKJiM0MzsJCXZtYS0mZ3Q7dm1fb3BzLSZndDtvcGVuKHZtYSk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogX19jb2xkIGludCBpb191cmluZ19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKQEAgLTM3OSw2ICYjNDM7NDcxLDggQEAgc3RhdGljIHZvaWQgaW9fdXJpbmdfbm9tbXVfdm1fY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiAKIAlmb3IgKGluZGV4ID0gdm1hLSZndDt2bV9zdGFydDsgaW5kZXggJmx0OyB2bWEtJmd0O3ZtX2VuZDsgaW5kZXggJiM0Mzs9IFBBR0VfU0laRSkKIAkJcHV0X3BhZ2UodmlydF90b19wYWdlKCh2b2lkICopIGluZGV4KSk7CiYjNDM7CiYjNDM7CWlvX3JlZ2lvbl9hY2NvdW50X3B1dCh2bWEtJmd0O3ZtX3ByaXZhdGVfZGF0YSk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaW9fdXJpbmdfbm9tbXVfdm1fb3BzID0gewpAQCAtNDExLDYgJiM0Mzs1MDUsOCBAQCBpbnQgaW9fdXJpbmdfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiAJZm9yIChpID0gMDsgaSAmbHQ7IHJlZ2lvbi0mZ3Q7bnJfcGFnZXM7IGkmIzQzOyYjNDM7KQogCQlnZXRfcGFnZShyZWdpb24tJmd0O3BhZ2VzW2ldKTsKIAomIzQzOwl2bWEtJmd0O3ZtX3ByaXZhdGVfZGF0YSA9IHJlZ2lvbi0mZ3Q7YWNjb3VudDsKJiM0MzsJaW9fcmVnaW9uX2FjY291bnRfZ2V0KHJlZ2lvbi0mZ3Q7YWNjb3VudCk7CiAJdm1hLSZndDt2bV9vcHMgPSAmYW1wO2lvX3VyaW5nX25vbW11X3ZtX29wczsKIAlyZXR1cm4gMDsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDc6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA0MAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDI0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBpb191cmluZyBNZW1vcnkgQWNjb3VudGluZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgbWVtb3J5IGFjY291bnRpbmcgd2l0aGluIGBpb191cmluZy9tZW1tYXAuY2AgYW5kIGBpbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmhgLiBJdCBzZWVtcyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhpcyBgc3RydWN0IGlvX3JlZ2lvbl9hY2NvdW50YCBhbmQgYSByZWZhY3RvciBvZiBob3cgYGlvX21hcHBlZF9yZWdpb25gIG1lbW9yeSBpcyB0cmFja2VkLiBUaGUgcGF0Y2ggaXMgYWRkaW5nIGBpb19yZWdpb25fYWNjb3VudF9hbGxvY2AsIGBpb19yZWdpb25fYWNjb3VudF9nZXRgLCBhbmQgYGlvX3JlZ2lvbl9hY2NvdW50X3B1dGAgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBhYm91dCByZWZlcmVuY2UgY291bnRpbmcgb3IgYSBzaW1pbGFyIG1lY2hhbmlzbSBmb3IgbWFuYWdpbmcgdGhlIGxpZmV0aW1lIG9mIHRoZXNlIHJlZ2lvbnMuIEl0JiMzOTtzIGFsc28gbW9kaWZ5aW5nIGBpb19mcmVlX3JlZ2lvbmAsIGBpb19jcmVhdGVfcmVnaW9uYCwgYW5kIGJvdGggYGlvX3JlZ2lvbl9tbWFwYCBhbmQgdGhlIGBpb191cmluZ19tbWFwYCBmb3Igbm9tbXUgc3lzdGVtcy4KClRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGl0IGdvZXMgcmlnaHQgdG8gdGhlIGhlYXJ0IG9mIGhvdyBpb191cmluZyBtYW5hZ2VzIG1lbW9yeSBtYXBwaW5nLiBHaXZlbiB0aGF0LCBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBjb2RlIGFuZCBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzLiBGcm9tIHdoYXQgSSBzZWUgbm93LCBgaW9fY3JlYXRlX3JlZ2lvbmAsIGBpb19mcmVlX3JlZ2lvbmAsIGFuZCBgaW9fdXJpbmdfbW1hcGAgYXJlIGdvaW5nIHRvIGJlIG15IHByaW1hcnkgdGFyZ2V0cy4KCkJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB3cml0aW5nIHRlc3QgY2FzZXMsIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIE9idmlvdXNseSwgYENPTkZJR19JT19VUklOR2AgaXMgdGhlIGJpZyBvbmUsIGJ1dCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBlaXRoZXIgYGlvX3VyaW5nL0tjb25maWdgIG9yIHBvc3NpYmx5IGV2ZW4gYGluaXQvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1pZ2h0IGFmZmVjdCB0aGUgYmVoYXZpb3Igb2YgdGhlc2UgZnVuY3Rpb25zIG9yIGludHJvZHVjZSBlZGdlIGNhc2VzIHRoYXQgSSBuZWVkIHRvIGFjY291bnQgZm9yLiBJIG5lZWQgdG8gYmUgc3VyZSBJJiMzOTttIHRlc3RpbmcgdGhlIGNvZGUgYXMgaXQgd291bGQgYmUgY29uZmlndXJlZCBpbiB0aGUgcmVhbCB3b3JsZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU9fVVJJTkcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE5MTA9Y29uZmlnIEFJT1xuLS1cbmluaXQvS2NvbmZpZy0xOTE3LVxuaW5pdC9LY29uZmlnOjE5MTg6Y29uZmlnIElPX1VSSU5HXG5pbml0L0tjb25maWctMTkxOS1cdGJvb2wgXCYjMzQ7RW5hYmxlIElPIHVyaW5nIHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG4tLVxuaW5pdC9LY29uZmlnPTE5Mjc9Y29uZmlnIEdDT1ZfUFJPRklMRV9VUklOR1xuLS1cbmluaXQvS2NvbmZpZy0xOTM5LVxuaW5pdC9LY29uZmlnOjE5NDA6Y29uZmlnIElPX1VSSU5HX01PQ0tfRklMRVxuaW5pdC9LY29uZmlnLTE5NDEtXHR0cmlzdGF0ZSBcJiMzNDtFbmFibGUgaW9fdXJpbmcgbW9jayBmaWxlcyAoRXhwZXJpbWVudGFsKVwmIzM0OyBpZiBFWFBFUlRcbi0tXG5pb191cmluZy9LY29uZmlnLTUtXG5pb191cmluZy9LY29uZmlnOjY6Y29uZmlnIElPX1VSSU5HX1pDUlhcbmlvX3VyaW5nL0tjb25maWctNy1cdGRlZl9ib29sIHlcbi0tXG5pb191cmluZy9LY29uZmlnLTEyLVxuaW9fdXJpbmcvS2NvbmZpZzoxMzpjb25maWcgSU9fVVJJTkdfQlBGXG5pb191cmluZy9LY29uZmlnLTE0LVx0ZGVmX2Jvb2wgeVxuLS1cbmlvX3VyaW5nL0tjb25maWctMTctXG5pb191cmluZy9LY29uZmlnOjE4OmNvbmZpZyBJT19VUklOR19CUEZfT1BTXG5pb191cmluZy9LY29uZmlnLTE5LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDA3OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5OTkKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBJT19VUklORyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYW4gYElPX1VSSU5HYCBjb25maWd1cmF0aW9uIGhlcmUuIFJpZ2h0LiBOb3csIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IG1lbW9yeSByZWdpb25zIGFyZSBtYW5hZ2VkIHdpdGhpbiB0aGlzIGNvbnRleHQuIE15IHByaW1hcnkgY29uY2VybiBpcyB3aXRoIHRoZSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gc3RyYXRlZ2llcyBmb3IgSS9PIGJ1ZmZlcnMuIFNvLCBJIG5lZWQgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIHJvbGVzIG9mIGBpb19jcmVhdGVfcmVnaW9uYCBhbmQgYGlvX2ZyZWVfcmVnaW9uYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjZW50cmFsIHRvIHRoZSBpbnRlZ3JpdHkgYW5kIHBlcmZvcm1hbmNlIG9mIHRoZSBJL08gc3lzdGVtLCBhbmQgSSBoYXZlIHRvIGZ1bGx5IGdyYXNwIHRoZWlyIGludGVyYWN0aW9uLiBJIG5lZWQgdG8gdHJhY2UgdGhlaXIgaW1wbGVtZW50YXRpb24sIHVuZGVyc3RhbmQgYW55IHBvdGVudGlhbCBvdmVyaGVhZCB0aGV5IGludHJvZHVjZSwgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgdW5kZXJseWluZyBtZW1vcnkgbWFuYWdlbWVudCBtZWNoYW5pc21zLiBFc3NlbnRpYWxseSwgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSByZWdpb24gY3JlYXRpb24gYW5kIGRlc3RydWN0aW9uIGFyZSByb2J1c3QgYW5kIG9wdGltYWxseSBkZXNpZ25lZCwgYW5kIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGRvbiYjMzk7dCBiZWNvbWUgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDc6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fY3JlYXRlX3JlZ2lvbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9pb191cmluZy5jPTI3MjY9c3RhdGljIF9fY29sZCBpbnQgaW9fYWxsb2NhdGVfc2NxX3VyaW5ncyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbi0tXG5pb191cmluZy9pb191cmluZy5jLTI3NDQtXHR9XG5pb191cmluZy9pb191cmluZy5jOjI3NDU6XHRyZXQgPSBpb19jcmVhdGVfcmVnaW9uKGN0eCwgXHUwMDI2Y3R4LVx1MDAzZXJpbmdfcmVnaW9uLCBcdTAwMjZyZCwgSU9SSU5HX09GRl9DUV9SSU5HKTtcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjc0Ni1cdGlmIChyZXQpXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yNzU4LVx0fVxuaW9fdXJpbmcvaW9fdXJpbmcuYzoyNzU5Olx0cmV0ID0gaW9fY3JlYXRlX3JlZ2lvbihjdHgsIFx1MDAyNmN0eC1cdTAwM2VzcV9yZWdpb24sIFx1MDAyNnJkLCBJT1JJTkdfT0ZGX1NRRVMpO1xuaW9fdXJpbmcvaW9fdXJpbmcuYy0yNzYwLVx0aWYgKHJldCkge1xuLS1cbmlvX3VyaW5nL2tidWYuYz02Mjk9aW50IGlvX3JlZ2lzdGVyX3BidWZfcmluZyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZylcbi0tXG5pb191cmluZy9rYnVmLmMtNjc3LVx0fVxuaW9fdXJpbmcva2J1Zi5jOjY3ODpcdHJldCA9IGlvX2NyZWF0ZV9yZWdpb24oY3R4LCBcdTAwMjZibC1cdTAwM2VyZWdpb24sIFx1MDAyNnJkLCBtbWFwX29mZnNldCk7XG5pb191cmluZy9rYnVmLmMtNjc5LVx0aWYgKHJldClcbi0tXG5pb191cmluZy9tZW1tYXAuYz0yMDQ9c3RhdGljIGludCBpb19yZWdpb25fYWxsb2NhdGVfcGFnZXMoc3RydWN0IGlvX21hcHBlZF9yZWdpb24gKm1yLFxuLS1cbmlvX3VyaW5nL21lbW1hcC5jLTIzNS1cbmlvX3VyaW5nL21lbW1hcC5jOjIzNjppbnQgaW9fY3JlYXRlX3JlZ2lvbihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX21hcHBlZF9yZWdpb24gKm1yLFxuaW9fdXJpbmcvbWVtbWFwLmMtMjM3LVx0XHQgICAgIHN0cnVjdCBpb191cmluZ19yZWdpb25fZGVzYyAqcmVnLFxuLS1cbmlvX3VyaW5nL21lbW1hcC5oPTIwPXZvaWQgaW9fZnJlZV9yZWdpb24oc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyLCBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIpO1xuaW9fdXJpbmcvbWVtbWFwLmg6MjE6aW50IGlvX2NyZWF0ZV9yZWdpb24oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcbmlvX3VyaW5nL21lbW1hcC5oLTIyLVx0XHQgICAgIHN0cnVjdCBpb191cmluZ19yZWdpb25fZGVzYyAqcmVnLFxuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmM9NDk4PXN0YXRpYyBpbnQgaW9fcmVnaXN0ZXJfcmVzaXplX3JpbmdzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnKVxuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNTMxLVx0fVxuaW9fdXJpbmcvcmVnaXN0ZXIuYzo1MzI6XHRyZXQgPSBpb19jcmVhdGVfcmVnaW9uKGN0eCwgXHUwMDI2bi5yaW5nX3JlZ2lvbiwgXHUwMDI2cmQsIElPUklOR19PRkZfQ1FfUklORyk7XG5pb191cmluZy9yZWdpc3Rlci5jLTUzMy1cdGlmIChyZXQpXG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYy01NjEtXHR9XG5pb191cmluZy9yZWdpc3Rlci5jOjU2MjpcdHJldCA9IGlvX2NyZWF0ZV9yZWdpb24oY3R4LCBcdTAwMjZuLnNxX3JlZ2lvbiwgXHUwMDI2cmQsIElPUklOR19PRkZfU1FFUyk7XG5pb191cmluZy9yZWdpc3Rlci5jLTU2My1cdGlmIChyZXQpIHtcbi0tXG5pb191cmluZy9yZWdpc3Rlci5jPTcwMz1zdGF0aWMgaW50IGlvX3JlZ2lzdGVyX21lbV9yZWdpb24oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICp1YXJnKVxuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNzMyLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYzo3MzM6XHRyZXQgPSBpb19jcmVhdGVfcmVnaW9uKGN0eCwgXHUwMDI2cmVnaW9uLCBcdTAwMjZyZCwgSU9SSU5HX01BUF9PRkZfUEFSQU1fUkVHSU9OKTtcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNzM0LVx0aWYgKHJldClcbi0tXG5pb191cmluZy96Y3J4LmM9MzgwPXN0YXRpYyBpbnQgaW9fYWxsb2NhdGVfcmJ1Zl9yaW5nKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL3pjcnguYy0zOTktXG5pb191cmluZy96Y3J4LmM6NDAwOlx0cmV0ID0gaW9fY3JlYXRlX3JlZ2lvbihjdHgsIFx1MDAyNmlmcS1cdTAwM2VycV9yZWdpb24sIHJkLCBtbWFwX29mZnNldCk7XG5pb191cmluZy96Y3J4LmMtNDAxLVx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjI1CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMuCgoqKkluaXRpYWwgQ29uc2lkZXJhdGlvbnMgZm9yIE1lbW9yeSBNYW5hZ2VtZW50KioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgZGl2aW5nIGludG8gbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoaXMgc3lzdGVtLCBhbmQgbXkgaW1tZWRpYXRlIGZvY3VzIGxhbmRzIG9uIHRoZXNlIHNwZWNpZmljIGZ1bmN0aW9uczogYGlvX2NyZWF0ZV9yZWdpb25gLCBgaW9fZnJlZV9yZWdpb25gLCBgaW9fdXJpbmdfbW1hcGAsIGBpb19yZWdpc3Rlcl9tZW1fcmVnaW9uYCwgYGlvX3JlZ2lzdGVyX3BidWZfcmluZ2AsIGFuZCBgaW9fcmVnaXN0ZXJfcmVzaXplX3JpbmdzYC4gSXQgc2VlbXMgdGhlc2UgYXJlIHRoZSBjb3JlIGJ1aWxkaW5nIGJsb2NrcyBmb3IgaG93IG1lbW9yeSByZWdpb25zIGFyZSBjcmVhdGVkLCBmcmVlZCwgbWFwcGVkIHdpdGggaW9fdXJpbmcsIGFuZCByZWdpc3RlcmVkIGZvciB2YXJpb3VzIHB1cnBvc2VzIOKAkyBwcm9iYWJseSB0byBzZXJ2ZSB0aGUgaW9fdXJpbmcgb3BlcmF0aW9ucy4gSSYjMzk7bSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgd29yayB0b2dldGhlciwgYnV0IGdpdmVuIHRoZWlyIG5hbWVzLCBJJiMzOTttIGV4cGVjdGluZyBzb21lIGtpbmQgb2YgbGF5ZXJlZCBhcHByb2FjaCBoZXJlIGZvciBib3RoIHRoZSBtZW1vcnkgYW5kIHJpbmdzLgoKTXkgZ3V0IHRlbGxzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB1bnBpY2sgdGhlIGFyY2hpdGVjdHVyZSBpcyB0byBoYXZlIGEgbG9vayBhdCBgaW9fZnJlZV9yZWdpb25gLiBUaGF0JiMzOTtsbCBiZSBhIHVzZWZ1bCBwbGFjZSB0byBzdGFydCBiZWNhdXNlIGl0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZSByZXNvdXJjZXMgYXJlIG1hbmFnZWQgZnJvbSBiZWdpbm5pbmcgdG8gZW5kLiBLbm93aW5nIGhvdyBtZW1vcnkgaXMgZGVhbGxvY2F0ZWQgaXMgb2Z0ZW4ga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGFsbG9jYXRpb24gcHJvY2VzcyBhbmQgaWRlbnRpZnlpbmcgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciBpbmVmZmljaWVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19mcmVlX3JlZ2lvbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9pb191cmluZy5jPTIwNzg9c3RhdGljIHZvaWQgaW9fcmluZ3NfZnJlZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjA3OS17XG5pb191cmluZy9pb191cmluZy5jOjIwODA6XHRpb19mcmVlX3JlZ2lvbihjdHgtXHUwMDNldXNlciwgXHUwMDI2Y3R4LVx1MDAzZXNxX3JlZ2lvbik7XG5pb191cmluZy9pb191cmluZy5jOjIwODE6XHRpb19mcmVlX3JlZ2lvbihjdHgtXHUwMDNldXNlciwgXHUwMDI2Y3R4LVx1MDAzZXJpbmdfcmVnaW9uKTtcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjA4Mi1cdGN0eC1cdTAwM2VyaW5ncyA9IE5VTEw7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYz0yMTYzPXN0YXRpYyBfX2NvbGQgdm9pZCBpb19yaW5nX2N0eF9mcmVlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjE3NS1cdGlvX2Rlc3Ryb3lfYnVmZmVycyhjdHgpO1xuaW9fdXJpbmcvaW9fdXJpbmcuYzoyMTc2Olx0aW9fZnJlZV9yZWdpb24oY3R4LVx1MDAzZXVzZXIsIFx1MDAyNmN0eC1cdTAwM2VwYXJhbV9yZWdpb24pO1xuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMTc3LVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmN0eC1cdTAwM2V1cmluZ19sb2NrKTtcbi0tXG5pb191cmluZy9rYnVmLmM9NDU4PXN0YXRpYyB2b2lkIGlvX3B1dF9ibChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibClcbi0tXG5pb191cmluZy9rYnVmLmMtNDYwLVx0aWYgKGJsLVx1MDAzZWZsYWdzIFx1MDAyNiBJT0JMX0JVRl9SSU5HKVxuaW9fdXJpbmcva2J1Zi5jOjQ2MTpcdFx0aW9fZnJlZV9yZWdpb24oY3R4LVx1MDAzZXVzZXIsIFx1MDAyNmJsLVx1MDAzZXJlZ2lvbik7XG5pb191cmluZy9rYnVmLmMtNDYyLVx0ZWxzZVxuLS1cbmlvX3VyaW5nL2tidWYuYz02Mjk9aW50IGlvX3JlZ2lzdGVyX3BidWZfcmluZyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZylcbi0tXG5pb191cmluZy9rYnVmLmMtNzEwLWZhaWw6XG5pb191cmluZy9rYnVmLmM6NzExOlx0aW9fZnJlZV9yZWdpb24oY3R4LVx1MDAzZXVzZXIsIFx1MDAyNmJsLVx1MDAzZXJlZ2lvbik7XG5pb191cmluZy9rYnVmLmMtNzEyLVx0a2ZyZWUoYmwpO1xuLS1cbmlvX3VyaW5nL21lbW1hcC5jPTEzMD1zdGF0aWMgdm9pZCBpb19yZWdpb25fYWNjb3VudF9wdXQoc3RydWN0IGlvX3JlZ2lvbl9hY2NvdW50ICphY2NvdW50KVxuLS1cbmlvX3VyaW5nL21lbW1hcC5jLTEzOC1cbmlvX3VyaW5nL21lbW1hcC5jOjEzOTp2b2lkIGlvX2ZyZWVfcmVnaW9uKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlciwgc3RydWN0IGlvX21hcHBlZF9yZWdpb24gKm1yKVxuaW9fdXJpbmcvbWVtbWFwLmMtMTQwLXtcbi0tXG5pb191cmluZy9tZW1tYXAuYz0yMzY9aW50IGlvX2NyZWF0ZV9yZWdpb24oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcbi0tXG5pb191cmluZy9tZW1tYXAuYy0yOTQtb3V0X2ZyZWU6XG5pb191cmluZy9tZW1tYXAuYzoyOTU6XHRpb19mcmVlX3JlZ2lvbihjdHgtXHUwMDNldXNlciwgbXIpO1xuaW9fdXJpbmcvbWVtbWFwLmMtMjk2LVx0cmV0dXJuIHJldDtcbi0tXG5pb191cmluZy9tZW1tYXAuYz00ODI9aW50IGlvX3VyaW5nX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmlvX3VyaW5nL21lbW1hcC5jLTUwMC1cdC8qXG5pb191cmluZy9tZW1tYXAuYzo1MDE6XHQgKiBQaW4gdGhlIHBhZ2VzIHNvIGlvX2ZyZWVfcmVnaW9uKCkmIzM5O3MgcmVsZWFzZV9wYWdlcygpIGRvZXMgbm90XG5pb191cmluZy9tZW1tYXAuYy01MDItXHQgKiBkcm9wIHRoZSBsYXN0IHJlZmVyZW5jZSB3aGlsZSB0aGlzIFZNQSBleGlzdHMuIGRlbGV0ZV92bWEoKVxuLS1cbmlvX3VyaW5nL21lbW1hcC5oPTE4PWludCBpb191cmluZ19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG5pb191cmluZy9tZW1tYXAuaC0xOS1cbmlvX3VyaW5nL21lbW1hcC5oOjIwOnZvaWQgaW9fZnJlZV9yZWdpb24oc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyLCBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIpO1xuaW9fdXJpbmcvbWVtbWFwLmgtMjEtaW50IGlvX2NyZWF0ZV9yZWdpb24oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcbi0tXG5pb191cmluZy9yZWdpc3Rlci5jPTQ4MD1zdGF0aWMgdm9pZCBpb19yZWdpc3Rlcl9mcmVlX3JpbmdzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNDgyLXtcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6NDgzOlx0aW9fZnJlZV9yZWdpb24oY3R4LVx1MDAzZXVzZXIsIFx1MDAyNnItXHUwMDNlc3FfcmVnaW9uKTtcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6NDg0Olx0aW9fZnJlZV9yZWdpb24oY3R4LVx1MDAzZXVzZXIsIFx1MDAyNnItXHUwMDNlcmluZ19yZWdpb24pO1xuaW9fdXJpbmcvcmVnaXN0ZXIuYy00ODUtfVxuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmM9NzAzPXN0YXRpYyBpbnQgaW9fcmVnaXN0ZXJfbWVtX3JlZ2lvbihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKnVhcmcpXG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYy03MzYtXHRpZiAoY29weV90b191c2VyKHJkX3VwdHIsIFx1MDAyNnJkLCBzaXplb2YocmQpKSkge1xuaW9fdXJpbmcvcmVnaXN0ZXIuYzo3Mzc6XHRcdGlvX2ZyZWVfcmVnaW9uKGN0eC1cdTAwM2V1c2VyLCBcdTAwMjZyZWdpb24pO1xuaW9fdXJpbmcvcmVnaXN0ZXIuYy03MzgtXHRcdHJldHVybiAtRUZBVUxUO1xuLS1cbmlvX3VyaW5nL3pjcnguYz00MTI9c3RhdGljIHZvaWQgaW9fZnJlZV9yYnVmX3Jpbmcoc3RydWN0IGlvX3pjcnhfaWZxICppZnEpXG5pb191cmluZy96Y3J4LmMtNDEzLXtcbmlvX3VyaW5nL3pjcnguYzo0MTQ6XHRpb19mcmVlX3JlZ2lvbihpZnEtXHUwMDNldXNlciwgXHUwMDI2aWZxLVx1MDAzZXJxX3JlZ2lvbik7XG5pb191cmluZy96Y3J4LmMtNDE1LVx0aWZxLVx1MDAzZXJxLnJpbmcgPSBJT19VUklOR19QVFJfUE9JU09OO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDA3OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4OTEKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEkvTyBSZWdpb24gRnVuY3Rpb25zKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHRoaW5raW5nLiBXZSYjMzk7dmUgZ290IGEgaGFuZGZ1bCBvZiBjcml0aWNhbCBJL08gcmVnaW9uIGZ1bmN0aW9ucyB0byB6ZXJvIGluIG9uOiBgaW9fY3JlYXRlX3JlZ2lvbmAsIGBpb19mcmVlX3JlZ2lvbmAsIGBpb191cmluZ19tbWFwYCwgYGlvX3JlZ2lvbl9tbWFwYCwgYW5kIGBpb19yZWdpc3Rlcl9tZW1fcmVnaW9uYC4gR2l2ZW4gd2hhdCBJIGtub3cgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHRoZSBrZXJuZWwsIHRoZXNlIGFyZSBsaWtlbHkgdGhlIGNvcmUgYnVpbGRpbmcgYmxvY2tzIGZvciBob3cgdGhlc2UgcmVnaW9ucyBhcmUgY3JlYXRlZCwgbWFuYWdlZCwgYW5kIG1hcHBlZC4gTXkgZ3V0IHRlbGxzIG1lIHRoYXQgYW55IGlzc3VlcyBoZXJlIGNvdWxkIHJpcHBsZSBvdXQgYW5kIGNhdXNlIHNpZ25pZmljYW50IHByb2JsZW1zIGZ1cnRoZXIgZG93biB0aGUgbGluZSwgc28gaXQmIzM5O3MgYmVzdCB0byBpbnZlc3RpZ2F0ZSB0aGVtIHRob3JvdWdobHkuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiB0aGUgbGlzdCBhbmQgaXRzIGNvbnRleHQsIGlzIHRvIGRlbHZlIGludG8gYGlvX3JlZ2lvbl9tbWFwYC4gVW5kZXJzdGFuZGluZyBob3cgdGhlc2UgcmVnaW9ucyBhcmUgYWN0dWFsbHkgbWFwcGVkIGludG8gdGhlIHVzZXIgc3BhY2Ugb3Iga2VybmVsIGFkZHJlc3Mgc3BhY2Ugc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCB0byBnYWluIGluc2lnaHRzIGFuZCB0byBzdGFydCB0byBkZXRlcm1pbmUgaG93IHRoaXMgaXMgYWxsIGltcGxlbWVudGVkIGF0IHRoZSBsb3dlciBsZXZlbHMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIHVwIHRvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19yZWdpb25fbW1hcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9tZW1tYXAuYz0zNjA9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBpb19yZWdpb25fdm1fb3BzID0ge1xuLS1cbmlvX3VyaW5nL21lbW1hcC5jLTM2NC1cbmlvX3VyaW5nL21lbW1hcC5jOjM2NTpzdGF0aWMgaW50IGlvX3JlZ2lvbl9tbWFwKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuaW9fdXJpbmcvbWVtbWFwLmMtMzY2LVx0XHRcdCAgc3RydWN0IGlvX21hcHBlZF9yZWdpb24gKm1yLFxuLS1cbmlvX3VyaW5nL21lbW1hcC5jPTM4Nz1fX2NvbGQgaW50IGlvX3VyaW5nX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmlvX3VyaW5nL21lbW1hcC5jLTQwOS1cdHJlZ2lvbiA9IGlvX21tYXBfZ2V0X3JlZ2lvbihjdHgsIHZtYS1cdTAwM2V2bV9wZ29mZik7XG5pb191cmluZy9tZW1tYXAuYzo0MTA6XHRyZXR1cm4gaW9fcmVnaW9uX21tYXAoY3R4LCByZWdpb24sIHZtYSwgcGFnZV9saW1pdCk7XG5pb191cmluZy9tZW1tYXAuYy00MTEtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDM0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGlvX3VyaW5nJiMzOTtzIE1lbW9yeSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIEkmIzM5O20gc3RhcnRpbmcgd2l0aCBgaW9fdXJpbmdfbW1hcGAuIFRoYXQmIzM5O3Mgd2hlcmUgaXQgYWxsIGJlZ2lucywgcmlnaHQ/IFRoZSBpbml0aWFsIG1hcHBpbmcuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtZW1vcnkgcmVnaXN0cmF0aW9uIGFjdHVhbGx5IHdvcmtzIHdpdGhpbiB0aGF0IGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gZ28gZGVlcGVyIHRvIHNlZSBob3cgYGlvX3VyaW5nYCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBzeXN0ZW0gbWVtb3J5LiBMZXQmIzM5O3MgZGlnIGludG8gYGlvX3JlZ2lzdGVyX21lbV9yZWdpb25gIG5leHQ7IEkmIzM5O20gcHJldHR5IHN1cmUgdGhhdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHVzZXItc3BhY2UgbWVtb3J5IGdldHMgcGx1bWJlZCBpbnRvIGBpb191cmluZ2AmIzM5O3Mgd29ybGQuIEkgd2FudCB0byBzZWUgaG93IHRoYXQgcmVnaXN0cmF0aW9uIHRpZXMgaW50byB0aGUgd2hvbGUgcGljdHVyZSwgZXNwZWNpYWxseSByZWdhcmRpbmcgRE1BIGFuZCB0aG9zZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucyB0aGF0IGFyZSB0aGUgd2hvbGUgcG9pbnQgb2YgYGlvX3VyaW5nYC4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbiB3aXRoIHBhZ2UgdGFibGVzIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDA3OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3JlZ2lzdGVyX21lbV9yZWdpb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvcmVnaXN0ZXIuYz00OTg9c3RhdGljIGludCBpb19yZWdpc3Rlcl9yZXNpemVfcmluZ3Moc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcpXG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYy03MDItXG5pb191cmluZy9yZWdpc3Rlci5jOjcwMzpzdGF0aWMgaW50IGlvX3JlZ2lzdGVyX21lbV9yZWdpb24oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICp1YXJnKVxuaW9fdXJpbmcvcmVnaXN0ZXIuYy03MDQte1xuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmM9NzUwPXN0YXRpYyBpbnQgX19pb191cmluZ19yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdW5zaWduZWQgb3Bjb2RlLFxuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmMtOTUzLVx0XHRcdGJyZWFrO1xuaW9fdXJpbmcvcmVnaXN0ZXIuYzo5NTQ6XHRcdHJldCA9IGlvX3JlZ2lzdGVyX21lbV9yZWdpb24oY3R4LCBhcmcpO1xuaW9fdXJpbmcvcmVnaXN0ZXIuYy05NTUtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODg3CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBNZW1vcnkgUmVnaXN0cmF0aW9uIGluIHRoZSBJT191cmluZyBDb250ZXh0KioKCk9rYXksIHNvIGBpb19yZWdpc3Rlcl9tZW1fcmVnaW9uYCBpcyBkZWZpbml0ZWx5IHRyaWdnZXJlZCBieSBgX19pb191cmluZ19yZWdpc3RlcmAuIE1ha2VzIHNlbnNlOyB0aGF0JiMzOTtzIHRoZSBjb3JlIHJlZ2lzdHJhdGlvbiBmdW5jdGlvbi4gTXkgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyBoZXJlIHNvLCBsZXQmIzM5O3MgdHJhY2UgdGhpcyBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGludGVybmFsbHkuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIG1lbW9yeSBtYW5hZ2VtZW50IG51YW5jZXMgc28gSSYjMzk7bGwgY2hlY2sgYGlvX3JlZ2lzdGVyX3BidWZfcmluZ2AgZm9yIHNvbWUgY29udGV4dCBhcm91bmQgdGhhdC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19yZWdpc3Rlcl9wYnVmX3JpbmcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcva2J1Zi5jPTYxMT1pbnQgaW9fbWFuYWdlX2J1ZmZlcnNfbGVnYWN5KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcva2J1Zi5jLTYyOC1cbmlvX3VyaW5nL2tidWYuYzo2Mjk6aW50IGlvX3JlZ2lzdGVyX3BidWZfcmluZyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZylcbmlvX3VyaW5nL2tidWYuYy02MzAte1xuLS1cbmlvX3VyaW5nL2tidWYuaD04MD1pbnQgaW9fbWFuYWdlX2J1ZmZlcnNfbGVnYWN5KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xuaW9fdXJpbmcva2J1Zi5oLTgxLVxuaW9fdXJpbmcva2J1Zi5oOjgyOmludCBpb19yZWdpc3Rlcl9wYnVmX3Jpbmcoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcpO1xuaW9fdXJpbmcva2J1Zi5oLTgzLWludCBpb191bnJlZ2lzdGVyX3BidWZfcmluZyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZyk7XG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYz03NTA9c3RhdGljIGludCBfX2lvX3VyaW5nX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB1bnNpZ25lZCBvcGNvZGUsXG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYy04ODctXHRcdFx0YnJlYWs7XG5pb191cmluZy9yZWdpc3Rlci5jOjg4ODpcdFx0cmV0ID0gaW9fcmVnaXN0ZXJfcGJ1Zl9yaW5nKGN0eCwgYXJnKTtcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtODg5LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDc6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQxMAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBpb19yZWdpc3Rlcl9wYnVmX3JpbmcqKgoKT2theSwgc28gYGlvX3JlZ2lzdGVyX3BidWZfcmluZ2AgaXMgY2FsbGVkIGZyb20gYF9faW9fdXJpbmdfcmVnaXN0ZXJgLiBUaGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludCwgdGhlIHJlZ2lzdHJhdGlvbiBwYXRoLiBJdCYjMzk7cyB0aW1lIHRvIGZvbGxvdyB0aGUgdHJhaWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYnVmZmVyIHJpbmdzIGFyZSBiZWluZyBzZXQgdXAuIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHJlc2l6ZSBvcGVyYXRpb24uIExldCYjMzk7cyBkaWcgaW50byBgaW9fcmVnaXN0ZXJfcmVzaXplX3JpbmdzYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgbG93ZG93biBvbiB0aGUgcmluZyBzaXplcywgYW5kIGhvdyB0aGUgYnVmZmVyIG1lbW9yeSBpcyBhbGxvY2F0ZWQgYW5kIG1hbmFnZWQgZHVyaW5nIHRoaXMgaW5pdGlhbGl6YXRpb24gcGhhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDA3OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3JlZ2lzdGVyX3Jlc2l6ZV9yaW5ncyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9yZWdpc3Rlci5jPTQ4MD1zdGF0aWMgdm9pZCBpb19yZWdpc3Rlcl9mcmVlX3JpbmdzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNDk3LVxuaW9fdXJpbmcvcmVnaXN0ZXIuYzo0OTg6c3RhdGljIGludCBpb19yZWdpc3Rlcl9yZXNpemVfcmluZ3Moc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcpXG5pb191cmluZy9yZWdpc3Rlci5jLTQ5OS17XG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYz03NTA9c3RhdGljIGludCBfX2lvX3VyaW5nX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB1bnNpZ25lZCBvcGNvZGUsXG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYy05NDctXHRcdFx0YnJlYWs7XG5pb191cmluZy9yZWdpc3Rlci5jOjk0ODpcdFx0cmV0ID0gaW9fcmVnaXN0ZXJfcmVzaXplX3JpbmdzKGN0eCwgYXJnKTtcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtOTQ5LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDc6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTgwOQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDI0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBgaW9fdXJpbmdgIFJpbmcgUmVnaXN0cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgY2FsbHMgcmVsYXRlZCB0byByZWdpc3RlcmluZyBhbmQgcmVzaXppbmcgdGhlIHJpbmdzIHdpdGhpbiB0aGUgYGlvX3VyaW5nYCBzdWJzeXN0ZW0uIE15IHN0YXJ0aW5nIHBvaW50IGlzIGBpb19yZWdpc3Rlcl9yZXNpemVfcmluZ3NgLCB3aGljaCBJIHNlZSBpcyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgX19pb191cmluZ19yZWdpc3RlcmAuIFRoZXJlZm9yZSwgdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMuCgpNeSBhdHRlbnRpb24gaW1tZWRpYXRlbHkgc2hpZnRzIHRvIHNldmVyYWwgZnVuY3Rpb25zOiBgaW9fY3JlYXRlX3JlZ2lvbmAsIGBpb19mcmVlX3JlZ2lvbmAsIGBpb191cmluZ19tbWFwYCwgYGlvX3JlZ2lzdGVyX21lbV9yZWdpb25gLCBgaW9fcmVnaXN0ZXJfcGJ1Zl9yaW5nYCwgYW5kIGBpb19yZWdpc3Rlcl9yZXNpemVfcmluZ3NgLgoKTm93LCBgaW9fY3JlYXRlX3JlZ2lvbmAgYW5kIGBpb19mcmVlX3JlZ2lvbmAgY2F0Y2ggbXkgZXllLiBUaGV5IGFyZW4mIzM5O3QgZGVjbGFyZWQgYXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZywgZXZlbiBpZiB0aGV5IGFyZSBpbnRlcm5hbCB0byBgaW9fdXJpbmdgLiBUaGlzIG1lYW5zIHRoZXkmIzM5O3JlIGFjY2Vzc2libGUgb3V0c2lkZSBhIHNwZWNpZmljIHNvdXJjZSBmaWxlLCBzbyBhcmUgcHJvYmFibHkgd29ydGggc2NydXRpbml6aW5nLiBJIHNlZSB0aGF0IGBpb19yZWdpc3Rlcl9tZW1fcmVnaW9uYCwgYGlvX3JlZ2lzdGVyX3BidWZfcmluZ2AsIGFuZCBgaW9fcmVnaXN0ZXJfcmVzaXplX3JpbmdzYCBhbHNvIHNlZW0gaW1wb3J0YW50LgoKQSBxdWljayBjaGVjayBjb25maXJtcyBhIGNvdXBsZSBvZiB0aGluZ3MsIGFuZCB0cmlnZ2VycyBhbiBlcnJvciBpbiBteSB0aGlua2luZy4gYGlvX3JlZ2lzdGVyX21lbV9yZWdpb25gIGlzLCBpbiBmYWN0LCBzdGF0aWMuICpBbmQqLCBzbyBpcyBgaW9fcmVnaXN0ZXJfcmVzaXplX3JpbmdzYC4gTXkgaW5pdGlhbCBtZW50YWwgbW9kZWwgd2FzIGZsYXdlZC4gT24gdGhlIG90aGVyIGhhbmQsIGBpb19yZWdpc3Rlcl9wYnVmX3JpbmdgIGFuZCBgaW9fdXJpbmdfbW1hcGAgYXJlICpub3QqIHN0YXRpYywgc28gd2lsbCBiZSB1c2VmdWwuCgpJIG5lZWQgdG8gY2lyY2xlIGJhY2sgYW5kIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiBgaW9fcmVnaXN0ZXJfbWVtX3JlZ2lvbmAgYW5kIGBpb19yZWdpc3Rlcl9yZXNpemVfcmluZ3NgLiBUaGV5JiMzOTtyZSBpbnRlcm5hbCwgc28gYXJlIHRoZXkgdGhlIHJpZ2h0IHBsYWNlcyB0byBmb2N1cz8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDc6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fcmVnaXN0ZXJfbWVtX3JlZ2lvbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9yZWdpc3Rlci5jPTQ5OD1zdGF0aWMgaW50IGlvX3JlZ2lzdGVyX3Jlc2l6ZV9yaW5ncyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZylcbi0tXG5pb191cmluZy9yZWdpc3Rlci5jLTcwMi1cbmlvX3VyaW5nL3JlZ2lzdGVyLmM6NzAzOnN0YXRpYyBpbnQgaW9fcmVnaXN0ZXJfbWVtX3JlZ2lvbihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKnVhcmcpXG5pb191cmluZy9yZWdpc3Rlci5jLTcwNC17XG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYz03NTA9c3RhdGljIGludCBfX2lvX3VyaW5nX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB1bnNpZ25lZCBvcGNvZGUsXG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYy05NTMtXHRcdFx0YnJlYWs7XG5pb191cmluZy9yZWdpc3Rlci5jOjk1NDpcdFx0cmV0ID0gaW9fcmVnaXN0ZXJfbWVtX3JlZ2lvbihjdHgsIGFyZyk7XG5pb191cmluZy9yZWdpc3Rlci5jLTk1NS1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDA3OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjY2CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIEtleSBJTyBGdW5jdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gR2l2ZW4gdGhhdCBgaW9fcmVnaXN0ZXJfbWVtX3JlZ2lvbmAgaXMgc3RhdGljLCBteSBhdHRlbnRpb24gbmVlZHMgdG8gc2hpZnQgdG8gdGhlIG1vcmUgZHluYW1pYyBjb21wb25lbnRzLiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gSU8gcmVnaW9uIG1hbmFnZW1lbnQsIHdoaWNoIGFyZSB3aGVyZSB0aGUgY29yZSBpbnRlcmFjdGlvbnMgbGlrZWx5IHJlc2lkZS4gU3BlY2lmaWNhbGx5LCBgaW9fY3JlYXRlX3JlZ2lvbmAsIGBpb19mcmVlX3JlZ2lvbmAsIGBpb191cmluZ19tbWFwYCwgYW5kIGBpb19yZWdpc3Rlcl9wYnVmX3JpbmdgLiBQZXJoYXBzLCBhbHRob3VnaCBtYXliZSB0b28gYnJvYWQgYXMgYW4gZW50cnkgcG9pbnQsIGBfX2lvX3VyaW5nX3JlZ2lzdGVyYCBkZXNlcnZlcyBhIHNlY29uZCBsb29rLgoKT2theSwgbGV0IG1lIGNvbmZpcm0gdGhlIHN0YXRpYy9ub24tc3RhdGljIHN0YXR1cyBvZiB0aG9zZSBmaXJzdCBmb3VyIGFnYWluOiBZdXAsIGBpb19jcmVhdGVfcmVnaW9uYCwgYGlvX2ZyZWVfcmVnaW9uYCwgYGlvX3VyaW5nX21tYXBgLCBhbmQgYGlvX3JlZ2lzdGVyX3BidWZfcmluZ2AgYXJlIGFsbCBub24tc3RhdGljLCB3aGljaCBpcyB3aGF0IEkgZXhwZWN0LgoKSnVzdCB0byBiZSB0aG9yb3VnaCwgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGdsYW5jZSBhdCBhbnkgb3RoZXIgcG90ZW50aWFsbHkgcmVsYXRlZCBmdW5jdGlvbnMuIExvb2tzIGxpa2UgYGlvX3JlZ2lvbl9hY2NvdW50X2FsbG9jYCwgYGlvX3JlZ2lvbl9hY2NvdW50X2dldGAsIGFuZCBgaW9fcmVnaW9uX2FjY291bnRfcHV0YCBhcmUgc3RhdGljLCBzbyBJIGNhbiBwcm9iYWJseSBrZWVwIHRob3NlIG91dCBvZiB0aGUgc2NvcGUgZm9yIG5vdy4KCkNvbnNpZGVyaW5nIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucywgdGhlIG1vc3QgcHJvbWlzaW5nIGNhbmRpZGF0ZXMgYXJlIGBpb19jcmVhdGVfcmVnaW9uYCwgYGlvX2ZyZWVfcmVnaW9uYCwgYW5kIGBpb191cmluZ19tbWFwYCBiYXNlZCBvbiB0aGVpciByb2xlIGluIHJlZ2lvbiBsaWZlY3ljbGUgYW5kIG1hcHBpbmcuCgpJIHRoaW5rIGl0JiMzOTtzIHRpbWUgdG8gZGl2ZSBpbnRvIGEgZGVlcGVyIGFuYWx5c2lzIG9mIGBpb191cmluZ19tbWFwYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDc6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fdXJpbmdfbW1hcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9pb191cmluZy5jPTI3MDg9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaW9fdXJpbmdfZm9wcyA9IHtcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjcwOS1cdC5yZWxlYXNlXHQ9IGlvX3VyaW5nX3JlbGVhc2UsXG5pb191cmluZy9pb191cmluZy5jOjI3MTA6XHQubW1hcFx0XHQ9IGlvX3VyaW5nX21tYXAsXG5pb191cmluZy9pb191cmluZy5jLTI3MTEtXHQuZ2V0X3VubWFwcGVkX2FyZWEgPSBpb191cmluZ19nZXRfdW5tYXBwZWRfYXJlYSxcbi0tXG5pb191cmluZy9tZW1tYXAuYz0zNjU9c3RhdGljIGludCBpb19yZWdpb25fbW1hcChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbi0tXG5pb191cmluZy9tZW1tYXAuYy0zODYtXG5pb191cmluZy9tZW1tYXAuYzozODc6X19jb2xkIGludCBpb191cmluZ19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbmlvX3VyaW5nL21lbW1hcC5jLTM4OC17XG4tLVxuaW9fdXJpbmcvbWVtbWFwLmM9NDEzPXVuc2lnbmVkIGxvbmcgaW9fdXJpbmdfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5pb191cmluZy9tZW1tYXAuYy00NjItICogRHJvcCB0aGUgcGFnZXMgdGhhdCB3ZXJlIGluaXRpYWxseSByZWZlcmVuY2VkIGFuZCBhZGRlZCBpblxuaW9fdXJpbmcvbWVtbWFwLmM6NDYzOiAqIGlvX3VyaW5nX21tYXAoKS4gV2UgY2Fubm90IGhhdmUgaGFkIGEgbXJlbWFwKCkgYXMgdGhhdCBpc24mIzM5O3Qgc3VwcG9ydGVkLFxuaW9fdXJpbmcvbWVtbWFwLmMtNDY0LSAqIGhlbmNlIHRoZSB2bWEgc2hvdWxkIGJlIGlkZW50aWNhbCB0byB0aGUgb25lIHdlIGluaXRpYWxseSByZWZlcmVuY2VkIGFuZFxuLS1cbmlvX3VyaW5nL21lbW1hcC5jPTQ3OD1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGlvX3VyaW5nX25vbW11X3ZtX29wcyA9IHtcbi0tXG5pb191cmluZy9tZW1tYXAuYy00ODEtXG5pb191cmluZy9tZW1tYXAuYzo0ODI6aW50IGlvX3VyaW5nX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuaW9fdXJpbmcvbWVtbWFwLmMtNDgzLXtcbi0tXG5pb191cmluZy9tZW1tYXAuaD0xNT11bnNpZ25lZCBsb25nIGlvX3VyaW5nX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxuaW9fdXJpbmcvbWVtbWFwLmgtMTctXHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGZsYWdzKTtcbmlvX3VyaW5nL21lbW1hcC5oOjE4OmludCBpb191cmluZ19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG5pb191cmluZy9tZW1tYXAuaC0xOS1cbi0tXG50b29scy9pbmNsdWRlL2lvX3VyaW5nL21pbmlfbGlidXJpbmcuaD01NT1zdHJ1Y3QgaW9fdXJpbmcge1xuLS1cbnRvb2xzL2luY2x1ZGUvaW9fdXJpbmcvbWluaV9saWJ1cmluZy5oLTY5LVxudG9vbHMvaW5jbHVkZS9pb191cmluZy9taW5pX2xpYnVyaW5nLmg6NzA6c3RhdGljIGlubGluZSBpbnQgaW9fdXJpbmdfbW1hcChpbnQgZmQsIHN0cnVjdCBpb191cmluZ19wYXJhbXMgKnAsXG50b29scy9pbmNsdWRlL2lvX3VyaW5nL21pbmlfbGlidXJpbmcuaC03MS1cdFx0XHRcdHN0cnVjdCBpb191cmluZ19zcSAqc3EsIHN0cnVjdCBpb191cmluZ19jcSAqY3EpXG4tLVxudG9vbHMvaW5jbHVkZS9pb191cmluZy9taW5pX2xpYnVyaW5nLmg9MTM5PXN0YXRpYyBpbmxpbmUgaW50IGlvX3VyaW5nX3F1ZXVlX2luaXRfcGFyYW1zKHVuc2lnbmVkIGludCBlbnRyaWVzLFxuLS1cbnRvb2xzL2luY2x1ZGUvaW9fdXJpbmcvbWluaV9saWJ1cmluZy5oLTE0OS1cdFx0cmV0dXJuIGZkO1xudG9vbHMvaW5jbHVkZS9pb191cmluZy9taW5pX2xpYnVyaW5nLmg6MTUwOlx0cmV0ID0gaW9fdXJpbmdfbW1hcChmZCwgcCwgXHUwMDI2cmluZy1cdTAwM2VzcSwgXHUwMDI2cmluZy1cdTAwM2VjcSk7XG50b29scy9pbmNsdWRlL2lvX3VyaW5nL21pbmlfbGlidXJpbmcuaC0xNTEtXHRpZiAoIXJldCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA5MAoJCQkJCQkJb3V0cHV0OiAxMzAKCQkJCQkJCXRob3VnaHRzOiAxOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBmb3IgaW9fdXJpbmcgTWVtb3J5IE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWxhdGVkIHRvIG1lbW9yeSBtYXBwaW5nIHdpdGhpbiBpb191cmluZy4gU3BlY2lmaWNhbGx5LCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBgaW9fdXJpbmdfbW1hcGAgZnVuY3Rpb24sIHdoaWNoIGhhbmRsZXMgbW1hcCBjYWxscyB3aXRoaW4gdGhlIGlvX3VyaW5nIGNvbnRleHQuIFdlJiMzOTt2ZSBnb3QgYGlvX2NyZWF0ZV9yZWdpb25gIGFuZCBgaW9fZnJlZV9yZWdpb25gIGJlaW5nIHVzZWQgbm93IHdoZW5ldmVyIHJlZ2lvbnMgYXJlIGNyZWF0ZWQgb3IgcmVsZWFzZWQuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBzaGlmdCBpbiBob3cgaW9fdXJpbmcgbWFuYWdlcyBpdHMgbWVtb3J5IGFjY291bnRpbmcuCgpHaXZlbiB0aGlzLCBJJiMzOTttIHRoaW5raW5nIHRoaXMgaXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgY2hhbmdlcyBpbnRyb2R1Y2UgYHN0cnVjdCBpb19yZWdpb25fYWNjb3VudGAgYW5kIG1vZGlmeSBob3cgbWVtb3J5IGlzIG1hbmFnZWQgYW5kIGZyZWVkLiBUaGlzIG1lYW5zIHdlJiMzOTt2ZSBnb3QgbmV3IGxvZ2ljIHBhdGhzIGluIHRoZXNlIHRocmVlIGZ1bmN0aW9ucywgYGlvX2NyZWF0ZV9yZWdpb25gLCBgaW9fZnJlZV9yZWdpb25gLCBhbmQgYGlvX3VyaW5nX21tYXBgIHRoYXQgYXJlIHBvdGVudGlhbGx5IHZ1bG5lcmFibGUuIFRoZXNlIGFyZSBjb3JlIGtlcm5lbCByb3V0aW5lcywgc28gZmluZGluZyBhIGJ1ZyBoZXJlIHdvdWxkIGJlIGltcGFjdGZ1bC4KClRoZXJlZm9yZSwgbXkgc3RyYXRlZ3kgaXMgc2ltcGxlOiBJJiMzOTtsbCBmbGFnIHRoaXMgYXMgYFdvcnRoRnV6emluZzogdHJ1ZWAsIGFuZCBjb25jZW50cmF0ZSBteSBmdXp6aW5nIGVmZm9ydHMgb24gdGhvc2Ugc3BlY2lmaWMgc3ltYm9sczogYGlvX2NyZWF0ZV9yZWdpb25gLCBgaW9fZnJlZV9yZWdpb25gLCBhbmQgYGlvX3VyaW5nX21tYXBgLiBUaGUgb2J2aW91cyBwcmVyZXF1aXNpdGUgaXMgYEVuYWJsZUNvbmZpZ3M6IElPX1VSSU5HYCwgYmVjYXVzZSBpZiB0aGF0IGlzbiYjMzk7dCBzZXQsIHRoZW4gdGhlIHdob2xlIHRoaW5nIGlzIGlycmVsZXZhbnQuIEJlY2F1c2Ugb2YgdGhlIG1lbW9yeSBoYW5kbGluZyBhc3BlY3QsIHRoaXMgY291bGQgYmUgYSBmdW4gYW5kIGZydWl0ZnVsIHRhcmdldC4gTGV0JiMzOTtzIGdldCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19jcmVhdGVfcmVnaW9uJiMzNDssCiAgICAmIzM0O2lvX2ZyZWVfcmVnaW9uJiMzNDssCiAgICAmIzM0O2lvX3VyaW5nX21tYXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGFjY291bnRpbmcgYW5kIG1hcHBpbmcgbG9naWMgZm9yIGlvX3VyaW5nIHJlZ2lvbnMsIGludHJvZHVjaW5nIGBzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnRgIGFuZCBjaGFuZ2luZyBob3cgbWVtb3J5IGlzIGFjY291bnRlZCBhbmQgZnJlZWQuIFRoaXMgYWZmZWN0cyBgaW9fY3JlYXRlX3JlZ2lvbmAsIGBpb19mcmVlX3JlZ2lvbmAsIGFuZCBgaW9fdXJpbmdfbW1hcGAuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9fY3JlYXRlX3JlZ2lvbiYjMzQ7LAogICAgJiMzNDtpb19mcmVlX3JlZ2lvbiYjMzQ7LAogICAgJiMzNDtpb191cmluZ19tbWFwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBhY2NvdW50aW5nIGFuZCBtYXBwaW5nIGxvZ2ljIGZvciBpb191cmluZyByZWdpb25zLCBpbnRyb2R1Y2luZyBgc3RydWN0IGlvX3JlZ2lvbl9hY2NvdW50YCBhbmQgY2hhbmdpbmcgaG93IG1lbW9yeSBpcyBhY2NvdW50ZWQgYW5kIGZyZWVkLiBUaGlzIGFmZmVjdHMgYGlvX2NyZWF0ZV9yZWdpb25gLCBgaW9fZnJlZV9yZWdpb25gLCBhbmQgYGlvX3VyaW5nX21tYXBgLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzozMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDA3OjMwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgaW50ZXJuYWwgc3RydWN0dXJlIGBpb19yZWdpb25fYWNjb3VudGAgdG8gdHJhY2sgbWVtb3J5IGFjY291bnRpbmcgZm9yIGlvX3VyaW5nIG1lbW9yeSByZWdpb25zIGFjcm9zcyBWTUEgbGlmZWN5Y2xlcy4gVGhlIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgaW50ZXJuYWxseSBhbmQgYWxsIGl0cyBmaWVsZHMgKGByZWZzYCwgYHVzZXJgLCBgbnJfcGFnZXNgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZXhwb3NlZCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGFkZHJlc3MgbWVtb3J5IGFjY291bnRpbmcgYW5kIG9iamVjdCBsaWZlY3ljbGVzLCB3aGVyZSBhbnkgcG90ZW50aWFsIGJ1Z3MgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgbWVtb3J5IGxlYWtzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIG1lbW9yeSBsZWFrIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzNTEyOTQ3YzBkMzYwMjRlZmQ1MTE5ZmViNTk0MWQ1YWEwZGZkNDMwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMTYgMDc6Mjk6MzMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmgKaW5kZXggODcxNTFhNWI2MmMxYi4uNmZlYjdlZTM0NDBmZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaW9fdXJpbmdfdHlwZXMuaApAQCAtOTQsMTEgJiM0Mzs5NCwxNCBAQCBzdHJ1Y3QgaW9faGFzaF90YWJsZSB7CiAJdW5zaWduZWQJCWhhc2hfYml0czsKIH07CiAKJiM0MztzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnQ7CiYjNDM7CiBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiB7CiAJc3RydWN0IHBhZ2UJCSoqcGFnZXM7CiAJdm9pZAkJCSpwdHI7CiAJdW5zaWduZWQJCW5yX3BhZ2VzOwogCXVuc2lnbmVkCQlmbGFnczsKJiM0MzsJc3RydWN0IGlvX3JlZ2lvbl9hY2NvdW50CSphY2NvdW50OwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2lvX3VyaW5nL21lbW1hcC5jIGIvaW9fdXJpbmcvbWVtbWFwLmMKaW5kZXggMjNlOGE4NTExMWJjYS4uY2EyOGE5NDI5YzE2OCAxMDA2NDQKLS0tIGEvaW9fdXJpbmcvbWVtbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvbWVtbWFwLmMKQEAgLTQsNiAmIzQzOzQsOCBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2Vycm5vLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW0uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tbWFuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3JlZmNvdW50LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL3VzZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdm1hbGxvYy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lvX3VyaW5nLmgmZ3Q7CkBAIC04OCw2ICYjNDM7OTAsNTIgQEAgZW51bSB7CiAJSU9fUkVHSU9OX0ZfU0lOR0xFX1JFRgkJCT0gNCwKIH07CiAKJiM0MztzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnQgewomIzQzOwlyZWZjb3VudF90IHJlZnM7CiYjNDM7CXN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlcjsKJiM0MzsJdW5zaWduZWQgbG9uZyBucl9wYWdlczsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnQgKgomIzQzO2lvX3JlZ2lvbl9hY2NvdW50X2FsbG9jKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpb19yZWdpb25fYWNjb3VudCAqYWNjb3VudDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCF1c2VyKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CWFjY291bnQgPSBrbWFsbG9jX29iaigqYWNjb3VudCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKJiM0MzsJaWYgKCFhY2NvdW50KQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CiYjNDM7CXJldCA9IF9faW9fYWNjb3VudF9tZW0odXNlciwgbnJfcGFnZXMpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlrZnJlZShhY2NvdW50KTsKJiM0MzsJCXJldHVybiBFUlJfUFRSKHJldCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmVmY291bnRfc2V0KCZhbXA7YWNjb3VudC0mZ3Q7cmVmcywgMSk7CiYjNDM7CWFjY291bnQtJmd0O3VzZXIgPSBnZXRfdWlkKHVzZXIpOwomIzQzOwlhY2NvdW50LSZndDtucl9wYWdlcyA9IG5yX3BhZ2VzOwomIzQzOwlyZXR1cm4gYWNjb3VudDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaW9fcmVnaW9uX2FjY291bnRfZ2V0KHN0cnVjdCBpb19yZWdpb25fYWNjb3VudCAqYWNjb3VudCkKJiM0Mzt7CiYjNDM7CWlmIChhY2NvdW50KQomIzQzOwkJcmVmY291bnRfaW5jKCZhbXA7YWNjb3VudC0mZ3Q7cmVmcyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlvX3JlZ2lvbl9hY2NvdW50X3B1dChzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnQgKmFjY291bnQpCiYjNDM7ewomIzQzOwlpZiAoYWNjb3VudCAmYW1wOyZhbXA7IHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO2FjY291bnQtJmd0O3JlZnMpKSB7CiYjNDM7CQlfX2lvX3VuYWNjb3VudF9tZW0oYWNjb3VudC0mZ3Q7dXNlciwgYWNjb3VudC0mZ3Q7bnJfcGFnZXMpOwomIzQzOwkJZnJlZV91aWQoYWNjb3VudC0mZ3Q7dXNlcik7CiYjNDM7CQlrZnJlZShhY2NvdW50KTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHZvaWQgaW9fZnJlZV9yZWdpb24oc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyLCBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIpCiB7CiAJaWYgKG1yLSZndDtwYWdlcykgewpAQCAtMTA1LDggJiM0MzsxNTMsMTIgQEAgdm9pZCBpb19mcmVlX3JlZ2lvbihzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIsIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcikKIAl9CiAJaWYgKChtci0mZ3Q7ZmxhZ3MgJmFtcDsgSU9fUkVHSU9OX0ZfVk1BUCkgJmFtcDsmYW1wOyBtci0mZ3Q7cHRyKQogCQl2dW5tYXAobXItJmd0O3B0cik7Ci0JaWYgKG1yLSZndDtucl9wYWdlcyAmYW1wOyZhbXA7IHVzZXIpCiYjNDM7CWlmIChtci0mZ3Q7YWNjb3VudCkgewomIzQzOwkJV0FSTl9PTl9PTkNFKG1yLSZndDthY2NvdW50LSZndDt1c2VyICE9IHVzZXIpOwomIzQzOwkJaW9fcmVnaW9uX2FjY291bnRfcHV0KG1yLSZndDthY2NvdW50KTsKJiM0MzsJfSBlbHNlIGlmIChtci0mZ3Q7bnJfcGFnZXMgJmFtcDsmYW1wOyB1c2VyKSB7CiAJCV9faW9fdW5hY2NvdW50X21lbSh1c2VyLCBtci0mZ3Q7bnJfcGFnZXMpOwomIzQzOwl9CiAKIAltZW1zZXQobXIsIDAsIHNpemVvZigqbXIpKTsKIH0KQEAgLTE4OCw3ICYjNDM7MjQwLDggQEAgaW50IGlvX2NyZWF0ZV9yZWdpb24oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptciwKIAlpbnQgbnJfcGFnZXMsIHJldDsKIAl1NjQgZW5kOwogCi0JaWYgKFdBUk5fT05fT05DRShtci0mZ3Q7cGFnZXMgfHwgbXItJmd0O3B0ciB8fCBtci0mZ3Q7bnJfcGFnZXMpKQomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKG1yLSZndDtwYWdlcyB8fCBtci0mZ3Q7cHRyIHx8IG1yLSZndDtucl9wYWdlcyB8fAomIzQzOwkJCSBtci0mZ3Q7YWNjb3VudCkpCiAJCXJldHVybiAtRUZBVUxUOwogCWlmIChtZW1jaHJfaW52KCZhbXA7cmVnLSZndDtfX3Jlc3YsIDAsIHNpemVvZihyZWctJmd0O19fcmVzdikpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTIwNywxMCAmIzQzOzI2MCwyMyBAQCBpbnQgaW9fY3JlYXRlX3JlZ2lvbihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX21hcHBlZF9yZWdpb24gKm1yLAogCQlyZXR1cm4gLUVPVkVSRkxPVzsKIAogCW5yX3BhZ2VzID0gcmVnLSZndDtzaXplICZndDsmZ3Q7IFBBR0VfU0hJRlQ7Ci0JaWYgKGN0eC0mZ3Q7dXNlcikgewotCQlyZXQgPSBfX2lvX2FjY291bnRfbWVtKGN0eC0mZ3Q7dXNlciwgbnJfcGFnZXMpOwotCQlpZiAocmV0KQomIzQzOwlpZiAocmVnLSZndDtmbGFncyAmYW1wOyBJT1JJTkdfTUVNX1JFR0lPTl9UWVBFX1VTRVIpIHsKJiM0MzsJCWlmIChjdHgtJmd0O3VzZXIpIHsKJiM0MzsJCQlyZXQgPSBfX2lvX2FjY291bnRfbWVtKGN0eC0mZ3Q7dXNlciwgbnJfcGFnZXMpOwomIzQzOwkJCWlmIChyZXQpCiYjNDM7CQkJCXJldHVybiByZXQ7CiYjNDM7CQl9CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKgomIzQzOwkJICogS2VybmVsLWFsbG9jYXRlZCBwYWdlcyBjYW4gb3V0bGl2ZSB0aGVpciBhY3RpdmUgcmVnaW9uIHRocm91Z2gKJiM0MzsJCSAqIHVzZXJzcGFjZSBtYXBwaW5ncy4KJiM0MzsJCSAqLwomIzQzOwkJbXItJmd0O2FjY291bnQgPSBpb19yZWdpb25fYWNjb3VudF9hbGxvYyhjdHgtJmd0O3VzZXIsIG5yX3BhZ2VzKTsKJiM0MzsJCWlmIChJU19FUlIobXItJmd0O2FjY291bnQpKSB7CiYjNDM7CQkJcmV0ID0gUFRSX0VSUihtci0mZ3Q7YWNjb3VudCk7CiYjNDM7CQkJbXItJmd0O2FjY291bnQgPSBOVUxMOwogCQkJcmV0dXJuIHJldDsKJiM0MzsJCX0KIAl9CiAJbXItJmd0O25yX3BhZ2VzID0gbnJfcGFnZXM7CiAKQEAgLTI4MSwxNSAmIzQzOzM0Nyw0MSBAQCBzdGF0aWMgdm9pZCAqaW9fdXJpbmdfdmFsaWRhdGVfbW1hcF9yZXF1ZXN0KHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3QgcGdvZmYpCiAKICNpZmRlZiBDT05GSUdfTU1VCiAKJiM0MztzdGF0aWMgdm9pZCBpb19yZWdpb25fdm1fb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKJiM0Mzt7CiYjNDM7CWlvX3JlZ2lvbl9hY2NvdW50X2dldCh2bWEtJmd0O3ZtX3ByaXZhdGVfZGF0YSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlvX3JlZ2lvbl92bV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKJiM0Mzt7CiYjNDM7CWlvX3JlZ2lvbl9hY2NvdW50X3B1dCh2bWEtJmd0O3ZtX3ByaXZhdGVfZGF0YSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaW9fcmVnaW9uX3ZtX29wcyA9IHsKJiM0MzsJLm9wZW4gPSBpb19yZWdpb25fdm1fb3BlbiwKJiM0MzsJLmNsb3NlID0gaW9fcmVnaW9uX3ZtX2Nsb3NlLAomIzQzO307CiYjNDM7CiBzdGF0aWMgaW50IGlvX3JlZ2lvbl9tbWFwKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LAogCQkJICBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsCiAJCQkgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJICB1bnNpZ25lZCBtYXhfcGFnZXMpCiB7CiAJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IG1pbihtci0mZ3Q7bnJfcGFnZXMsIG1heF9wYWdlcyk7CiYjNDM7CWludCByZXQ7CiAKIAl2bV9mbGFnc19zZXQodm1hLCBWTV9ET05URVhQQU5EKTsKLQlyZXR1cm4gdm1faW5zZXJ0X3BhZ2VzKHZtYSwgdm1hLSZndDt2bV9zdGFydCwgbXItJmd0O3BhZ2VzLCAmYW1wO25yX3BhZ2VzKTsKJiM0MzsJcmV0ID0gdm1faW5zZXJ0X3BhZ2VzKHZtYSwgdm1hLSZndDt2bV9zdGFydCwgbXItJmd0O3BhZ2VzLCAmYW1wO25yX3BhZ2VzKTsKJiM0MzsJaWYgKCFyZXQgJmFtcDsmYW1wOyBtci0mZ3Q7YWNjb3VudCkgewomIzQzOwkJLyoKJiM0MzsJCSAqIEFjY291bnRpbmcgZGVsaWJlcmF0ZWx5IHJlbWFpbnMgYXQgcmVnaW9uIGdyYW51bGFyaXR5IHdoZW4KJiM0MzsJCSAqIHRoaXMgVk1BIG1hcHMgb25seSBwYXJ0IG9mIHRoZSByZWdpb24uCiYjNDM7CQkgKi8KJiM0MzsJCXZtYS0mZ3Q7dm1fcHJpdmF0ZV9kYXRhID0gbXItJmd0O2FjY291bnQ7CiYjNDM7CQl2bWEtJmd0O3ZtX29wcyA9ICZhbXA7aW9fcmVnaW9uX3ZtX29wczsKJiM0MzsJCXZtYS0mZ3Q7dm1fb3BzLSZndDtvcGVuKHZtYSk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogX19jb2xkIGludCBpb191cmluZ19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKQEAgLTM3OSw2ICYjNDM7NDcxLDggQEAgc3RhdGljIHZvaWQgaW9fdXJpbmdfbm9tbXVfdm1fY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiAKIAlmb3IgKGluZGV4ID0gdm1hLSZndDt2bV9zdGFydDsgaW5kZXggJmx0OyB2bWEtJmd0O3ZtX2VuZDsgaW5kZXggJiM0Mzs9IFBBR0VfU0laRSkKIAkJcHV0X3BhZ2UodmlydF90b19wYWdlKCh2b2lkICopIGluZGV4KSk7CiYjNDM7CiYjNDM7CWlvX3JlZ2lvbl9hY2NvdW50X3B1dCh2bWEtJmd0O3ZtX3ByaXZhdGVfZGF0YSk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaW9fdXJpbmdfbm9tbXVfdm1fb3BzID0gewpAQCAtNDExLDYgJiM0Mzs1MDUsOCBAQCBpbnQgaW9fdXJpbmdfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiAJZm9yIChpID0gMDsgaSAmbHQ7IHJlZ2lvbi0mZ3Q7bnJfcGFnZXM7IGkmIzQzOyYjNDM7KQogCQlnZXRfcGFnZShyZWdpb24tJmd0O3BhZ2VzW2ldKTsKIAomIzQzOwl2bWEtJmd0O3ZtX3ByaXZhdGVfZGF0YSA9IHJlZ2lvbi0mZ3Q7YWNjb3VudDsKJiM0MzsJaW9fcmVnaW9uX2FjY291bnRfZ2V0KHJlZ2lvbi0mZ3Q7YWNjb3VudCk7CiAJdm1hLSZndDt2bV9vcHMgPSAmYW1wO2lvX3VyaW5nX25vbW11X3ZtX29wczsKIAlyZXR1cm4gMDsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDA3OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMzcKCQkJCQkJCW91dHB1dDogMTYyCgkJCQkJCQl0aG91Z2h0czogMTQ0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Kippb191cmluZyBNZW1vcnkgQWNjb3VudGluZyBGaXg6IE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2sqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBpb191cmluZy9tZW1tYXAuY2AuIEl0JiMzOTtzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBhZGRpdGlvbiBmb3IgbWVtb3J5IG1hbmFnZW1lbnQuIFRoZSBjb3JlIG9mIGl0IGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhpcyBgaW9fcmVnaW9uX2FjY291bnRgIHN0cnVjdC4gIEl0JiMzOTtzIG1lYW50IHRvIHRyYWNrIHRoZSBtZW1vcnkgYWNjb3VudGluZyBmb3IgdGhvc2UgYGlvX21hcHBlZF9yZWdpb25gIHJlZ2lvbnMuIEkgc2VlIHRoZSBmaWVsZHM6IGEgcmVmZXJlbmNlIGNvdW50IChgcmVmc2ApLCB0aGUgYHVzZXJgIHdobyBvd25zIHRoZSBtZW1vcnksIGFuZCB0aGUgbnVtYmVyIG9mIHBhZ2VzIChgbnJfcGFnZXNgKS4gIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWxsb2NhdGVkIHVzaW5nIGBrbWFsbG9jX29iamAsIHdoaWNoIEkgc3VzcGVjdCBpcyBqdXN0IGEgbWFjcm8gZm9yIGBrbWFsbG9jYCB3aXRoIHNvbWUgZmxhZ3MsIGxpa2VseSBgR0ZQX0tFUk5FTF9BQ0NPVU5UYC4uLiB5ZXAsIHRoYXQmIzM5O3Mgd2hhdCBpdCBsb29rcyBsaWtlLiAgSXQmIzM5O3MgaW1wb3J0YW50IHRoYXQgdGhpcyBzdHJ1Y3QgY29udGFpbnMgYSBgcmVmY291bnRgIGFzIGEgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlIGNvdWxkIGV4aXN0LgoKUmlnaHQsIHNvIHRoZSBwYXRjaCBhbGxvY2F0ZXMgdGhpcyBgaW9fcmVnaW9uX2FjY291bnRgIGFuZCBjYXJlZnVsbHkgaW5pdGlhbGl6ZXMgKmFsbCogaXRzIGZpZWxkcyDigJMgdGhlIHJlZmNvdW50LCB0aGUgdXNlciwgYW5kIHRoZSBudW1iZXIgb2YgcGFnZXMuICBUaGVuIGl0IGxpbmtzIHRoaXMgYWNjb3VudCB0byB0aGUgYGlvX21hcHBlZF9yZWdpb25gIHN0cnVjdCAoYG1yLSZndDthY2NvdW50YCkuICBBbmQsIGNyaXRpY2FsbHksIGl0IGFzc29jaWF0ZXMgdGhpcyBhY2NvdW50IHdpdGggdGhlIFZNQSAoVmlydHVhbCBNZW1vcnkgQXJlYSkgZHVyaW5nIGBpb19yZWdpb25fbW1hcGAuIFRoZSBgdm1hLSZndDt2bV9wcml2YXRlX2RhdGEgPSBtci0mZ3Q7YWNjb3VudDtgIGxpbmUgaXMgd2hhdCBtYXR0ZXJzIGZvciB0aGUgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuIFRoZSBhY2NvdW50aW5nIGlzIG5vdyBwcm9wZXJseSB0aWVkIHRvIHRoZSBWTUEmIzM5O3MgbGlmZXRpbWUuCgpUaGUgYmVhdXR5IGlzIHRoYXQgdGhpcyBpcyAqZW50aXJlbHkqIGludGVybmFsLiAgTm90aGluZyBmcm9tIHRoaXMgYGlvX3JlZ2lvbl9hY2NvdW50YCBzdHJ1Y3QgaXMgZXZlciBjb3BpZWQgb3V0IHRvIHVzZXJzcGFjZS4gTm8gbmV3IHVzZXItZmFjaW5nIHN0cnVjdHMgYXJlIGNyZWF0ZWQsIG9yIGV4aXN0aW5nIG9uZXMgbW9kaWZpZWQgaW4gYSB3YXkgdGhhdCByaXNrcyBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBpcyBhbGwgYWJvdXQgdGhlIGtlcm5lbCYjMzk7cyBpbnRlcm5hbCBtZW1vcnkgYWNjb3VudGluZy4gIE15IHByaW1hcnkgY29uY2VybiBpcyBhbHdheXMgdW5pbml0aWFsaXplZCBtZW1vcnksIGJ1dCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcmlzayBvZiB0aGF0IGtpbmQuICBNeSB0aG91Z2h0IGlzIHRoYXQgdGhlIHBhdGNoICpjb3JyZWN0cyogYSBidWcgd2hlcmUga2VybmVsLWFsbG9jYXRlZCBwYWdlcyBjb3VsZCBvdXRsaXZlIHRoZWlyIGFzc29jaWF0ZWQgbWVtb3J5IHJlZ2lvbiBhbmQsIGJ5IGV4dGVuc2lvbiwgdGhlIHVzZXIgc3BhY2UgbWFwcGluZywgYW5kIHNvIHRoZSBhY2NvdW50aW5nIHdvdWxkIGJlIGluY29ycmVjdC4KCkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgYmVjYXVzZSBJIHdhbnQgdG8gYmUgKmFic29sdXRlbHkqIHN1cmUuIFRoZSBgaW9fcmVnaW9uX2FjY291bnRgIGFuZCBgaW9fbWFwcGVkX3JlZ2lvbmAgc3RydWN0cyB0aGVtc2VsdmVzIGFyZSBpbnRlcm5hbC4gVGhlIGBpb19jcmVhdGVfcmVnaW9uYCBmdW5jdGlvbiB1c2VzIGEgYHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcmAsIHdoaWNoIGlzIGFsc28gaW50ZXJuYWwuICBXZSYjMzk7cmUgYWRkaW5nIHRoaXMgYG1yLSZndDthY2NvdW50YCBhbmQgaW5pdGlhbGl6aW5nIGl0LiBObyBleHRlcm5hbCBzdHJ1Y3RzIGFyZSBjaGFuZ2VkLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyBoZXJlIHRoYXQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGlzIHBhdGNoIGlzIGp1c3QgbWVtb3J5IGFjY291bnRpbmcgbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIHRoYXQgaXMsIGl0IGlzIGZpeGluZyBhIGxlYWsuIEtBU0FOIHdvdWxkIGRlZmluaXRlbHkgY2F0Y2ggdXNlLWFmdGVyLWZyZWUgaXNzdWVzIGhlcmUsIGlmIGFueSBleGlzdGVkLiBLTVNBTiB3b3VsZG4mIzM5O3QgYXBwbHkgaGVyZS4KCk9rYXksIGxldCYjMzk7cyBqdXN0IGRvIGEgcXVpY2sgc2NhbiBvZiB0aGUgY29kZSBhZ2FpbiwganVzdCB0byBiZSB0aG9yb3VnaDogWXVwLCBgYWNjb3VudGAgaXMgYSBwb2ludGVyLCB0aGF0IGlzIGluaXRpYWxpemVkLiBUaGUgYGlvX3JlZ2lvbl9hY2NvdW50X2FsbG9jYCBmdW5jdGlvbiBpbml0aWFsaXplcyBldmVyeSBmaWVsZCBiZWZvcmUgcmV0dXJuaW5nIHRoZSBhY2NvdW50LiBHb29kLiBUaGVuIGluIGNsZWFudXAgZnVuY3Rpb25zIHRoZSBgYWNjb3VudGAgaXMgZGUtcmVmZXJlbmNlZCBhbmQgemVyb2VkLiBBbmQgZmluYWxseSBhIGNoZWNrIGVuc3VyZXMgdGhhdCB0aGUgcmVnaW9uIGhhcyBiZWVuIGluaXRpYWxpemVkLiBTdGFuZGFyZCBWTUEgb3BlcmF0aW9ucyBhcmUgY29ycmVjdGx5IGNhbGxlZDogYGlvX3JlZ2lvbl92bV9vcGVuYC4KCkkmIzM5O20gY29uZmlkZW50LiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIHRvIHVzZXJzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFRoaXMgaXMgYSBtZW1vcnkgYWNjb3VudGluZyBmaXguIE5vIG5lZWQgZm9yIEtNU0FOLiBUaGUgcmVhc29uaW5nIGlzIHRoYXQgdGhlIG5ldyBgaW9fcmVnaW9uX2FjY291bnRgIHN0cnVjdCB0cmFja3MgbWVtb3J5IGFjcm9zcyBWTUEgbGlmZWN5Y2xlcyBhbmQgZXZlcnkgZmllbGQgaXMgaW5pdGlhbGl6ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDA3OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgaW50ZXJuYWwgc3RydWN0dXJlIGBpb19yZWdpb25fYWNjb3VudGAgdG8gdHJhY2sgbWVtb3J5IGFjY291bnRpbmcgZm9yIGlvX3VyaW5nIG1lbW9yeSByZWdpb25zIGFjcm9zcyBWTUEgbGlmZWN5Y2xlcy4gVGhlIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgaW50ZXJuYWxseSBhbmQgYWxsIGl0cyBmaWVsZHMgKGByZWZzYCwgYHVzZXJgLCBgbnJfcGFnZXNgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZXhwb3NlZCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGFkZHJlc3MgbWVtb3J5IGFjY291bnRpbmcgYW5kIG9iamVjdCBsaWZlY3ljbGVzLCB3aGVyZSBhbnkgcG90ZW50aWFsIGJ1Z3MgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgbWVtb3J5IGxlYWtzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIG1lbW9yeSBsZWFrIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBpbnRlcm5hbCBzdHJ1Y3R1cmUgYGlvX3JlZ2lvbl9hY2NvdW50YCB0byB0cmFjayBtZW1vcnkgYWNjb3VudGluZyBmb3IgaW9fdXJpbmcgbWVtb3J5IHJlZ2lvbnMgYWNyb3NzIFZNQSBsaWZlY3ljbGVzLiBUaGUgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCBpbnRlcm5hbGx5IGFuZCBhbGwgaXRzIGZpZWxkcyAoYHJlZnNgLCBgdXNlcmAsIGBucl9wYWdlc2ApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBleHBvc2VkIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgYWRkcmVzcyBtZW1vcnkgYWNjb3VudGluZyBhbmQgb2JqZWN0IGxpZmVjeWNsZXMsIHdoZXJlIGFueSBwb3RlbnRpYWwgYnVncyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVha3MpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgbWVtb3J5IGxlYWsgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDA3OjI5OjM1LjUyNTI0MTEyN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MTI0MzkwMzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9fY3JlYXRlX3JlZ2lvblwiLFxuICAgIFwiaW9fZnJlZV9yZWdpb25cIixcbiAgICBcImlvX3VyaW5nX21tYXBcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgaW50ZXJuYWwgc3RydWN0dXJlIGBpb19yZWdpb25fYWNjb3VudGAgdG8gdHJhY2sgbWVtb3J5IGFjY291bnRpbmcgZm9yIGlvX3VyaW5nIG1lbW9yeSByZWdpb25zIGFjcm9zcyBWTUEgbGlmZWN5Y2xlcy4gVGhlIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgaW50ZXJuYWxseSBhbmQgYWxsIGl0cyBmaWVsZHMgKGByZWZzYCwgYHVzZXJgLCBgbnJfcGFnZXNgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZXhwb3NlZCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGFkZHJlc3MgbWVtb3J5IGFjY291bnRpbmcgYW5kIG9iamVjdCBsaWZlY3ljbGVzLCB3aGVyZSBhbnkgcG90ZW50aWFsIGJ1Z3MgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgbWVtb3J5IGxlYWtzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIG1lbW9yeSBsZWFrIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBhY2NvdW50aW5nIGFuZCBtYXBwaW5nIGxvZ2ljIGZvciBpb191cmluZyByZWdpb25zLCBpbnRyb2R1Y2luZyBgc3RydWN0IGlvX3JlZ2lvbl9hY2NvdW50YCBhbmQgY2hhbmdpbmcgaG93IG1lbW9yeSBpcyBhY2NvdW50ZWQgYW5kIGZyZWVkLiBUaGlzIGFmZmVjdHMgYGlvX2NyZWF0ZV9yZWdpb25gLCBgaW9fZnJlZV9yZWdpb25gLCBhbmQgYGlvX3VyaW5nX21tYXBgLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwNzoyOTozNS41MjUyNDY1MjdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTQ0NzkwNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzNTEyOTQ3YzBkMzYwMjRlZmQ1MTE5ZmViNTk0MWQ1YWEwZGZkNDMwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDE2IDA3OjI5OjMzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW9fdXJpbmdfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvaW9fdXJpbmdfdHlwZXMuaFxcbmluZGV4IDg3MTUxYTViNjJjMWIuLjZmZWI3ZWUzNDQwZmQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oXFxuQEAgLTk0LDExICs5NCwxNCBAQCBzdHJ1Y3QgaW9faGFzaF90YWJsZSB7XFxuIFxcdHVuc2lnbmVkXFx0XFx0aGFzaF9iaXRzO1xcbiB9O1xcbiBcXG4rc3RydWN0IGlvX3JlZ2lvbl9hY2NvdW50O1xcbitcXG4gc3RydWN0IGlvX21hcHBlZF9yZWdpb24ge1xcbiBcXHRzdHJ1Y3QgcGFnZVxcdFxcdCoqcGFnZXM7XFxuIFxcdHZvaWRcXHRcXHRcXHQqcHRyO1xcbiBcXHR1bnNpZ25lZFxcdFxcdG5yX3BhZ2VzO1xcbiBcXHR1bnNpZ25lZFxcdFxcdGZsYWdzO1xcbitcXHRzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnRcXHQqYWNjb3VudDtcXG4gfTtcXG4gXFxuIC8qXFxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL21lbW1hcC5jIGIvaW9fdXJpbmcvbWVtbWFwLmNcXG5pbmRleCAyM2U4YTg1MTExYmNhLi5jYTI4YTk0MjljMTY4IDEwMDY0NFxcbi0tLSBhL2lvX3VyaW5nL21lbW1hcC5jXFxuKysrIGIvaW9fdXJpbmcvbWVtbWFwLmNcXG5AQCAtNCw2ICs0LDggQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Vycm5vLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW1hbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcmVmY291bnQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL3VzZXIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvX3VyaW5nLmhcXHUwMDNlXFxuQEAgLTg4LDYgKzkwLDUyIEBAIGVudW0ge1xcbiBcXHRJT19SRUdJT05fRl9TSU5HTEVfUkVGXFx0XFx0XFx0PSA0LFxcbiB9O1xcbiBcXG4rc3RydWN0IGlvX3JlZ2lvbl9hY2NvdW50IHtcXG4rXFx0cmVmY291bnRfdCByZWZzO1xcbitcXHRzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXI7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7XFxuK307XFxuK1xcbitzdGF0aWMgc3RydWN0IGlvX3JlZ2lvbl9hY2NvdW50ICpcXG4raW9fcmVnaW9uX2FjY291bnRfYWxsb2Moc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbit7XFxuK1xcdHN0cnVjdCBpb19yZWdpb25fYWNjb3VudCAqYWNjb3VudDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICghdXNlcilcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRhY2NvdW50ID0ga21hbGxvY19vYmooKmFjY291bnQsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuK1xcdGlmICghYWNjb3VudClcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuK1xcbitcXHRyZXQgPSBfX2lvX2FjY291bnRfbWVtKHVzZXIsIG5yX3BhZ2VzKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRrZnJlZShhY2NvdW50KTtcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4rXFx0fVxcbitcXG4rXFx0cmVmY291bnRfc2V0KFxcdTAwMjZhY2NvdW50LVxcdTAwM2VyZWZzLCAxKTtcXG4rXFx0YWNjb3VudC1cXHUwMDNldXNlciA9IGdldF91aWQodXNlcik7XFxuK1xcdGFjY291bnQtXFx1MDAzZW5yX3BhZ2VzID0gbnJfcGFnZXM7XFxuK1xcdHJldHVybiBhY2NvdW50O1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpb19yZWdpb25fYWNjb3VudF9nZXQoc3RydWN0IGlvX3JlZ2lvbl9hY2NvdW50ICphY2NvdW50KVxcbit7XFxuK1xcdGlmIChhY2NvdW50KVxcbitcXHRcXHRyZWZjb3VudF9pbmMoXFx1MDAyNmFjY291bnQtXFx1MDAzZXJlZnMpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpb19yZWdpb25fYWNjb3VudF9wdXQoc3RydWN0IGlvX3JlZ2lvbl9hY2NvdW50ICphY2NvdW50KVxcbit7XFxuK1xcdGlmIChhY2NvdW50IFxcdTAwMjZcXHUwMDI2IHJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2YWNjb3VudC1cXHUwMDNlcmVmcykpIHtcXG4rXFx0XFx0X19pb191bmFjY291bnRfbWVtKGFjY291bnQtXFx1MDAzZXVzZXIsIGFjY291bnQtXFx1MDAzZW5yX3BhZ2VzKTtcXG4rXFx0XFx0ZnJlZV91aWQoYWNjb3VudC1cXHUwMDNldXNlcik7XFxuK1xcdFxcdGtmcmVlKGFjY291bnQpO1xcbitcXHR9XFxuK31cXG4rXFxuIHZvaWQgaW9fZnJlZV9yZWdpb24oc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyLCBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIpXFxuIHtcXG4gXFx0aWYgKG1yLVxcdTAwM2VwYWdlcykge1xcbkBAIC0xMDUsOCArMTUzLDEyIEBAIHZvaWQgaW9fZnJlZV9yZWdpb24oc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyLCBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIpXFxuIFxcdH1cXG4gXFx0aWYgKChtci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT19SRUdJT05fRl9WTUFQKSBcXHUwMDI2XFx1MDAyNiBtci1cXHUwMDNlcHRyKVxcbiBcXHRcXHR2dW5tYXAobXItXFx1MDAzZXB0cik7XFxuLVxcdGlmIChtci1cXHUwMDNlbnJfcGFnZXMgXFx1MDAyNlxcdTAwMjYgdXNlcilcXG4rXFx0aWYgKG1yLVxcdTAwM2VhY2NvdW50KSB7XFxuK1xcdFxcdFdBUk5fT05fT05DRShtci1cXHUwMDNlYWNjb3VudC1cXHUwMDNldXNlciAhPSB1c2VyKTtcXG4rXFx0XFx0aW9fcmVnaW9uX2FjY291bnRfcHV0KG1yLVxcdTAwM2VhY2NvdW50KTtcXG4rXFx0fSBlbHNlIGlmIChtci1cXHUwMDNlbnJfcGFnZXMgXFx1MDAyNlxcdTAwMjYgdXNlcikge1xcbiBcXHRcXHRfX2lvX3VuYWNjb3VudF9tZW0odXNlciwgbXItXFx1MDAzZW5yX3BhZ2VzKTtcXG4rXFx0fVxcbiBcXG4gXFx0bWVtc2V0KG1yLCAwLCBzaXplb2YoKm1yKSk7XFxuIH1cXG5AQCAtMTg4LDcgKzI0MCw4IEBAIGludCBpb19jcmVhdGVfcmVnaW9uKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXFxuIFxcdGludCBucl9wYWdlcywgcmV0O1xcbiBcXHR1NjQgZW5kO1xcbiBcXG4tXFx0aWYgKFdBUk5fT05fT05DRShtci1cXHUwMDNlcGFnZXMgfHwgbXItXFx1MDAzZXB0ciB8fCBtci1cXHUwMDNlbnJfcGFnZXMpKVxcbitcXHRpZiAoV0FSTl9PTl9PTkNFKG1yLVxcdTAwM2VwYWdlcyB8fCBtci1cXHUwMDNlcHRyIHx8IG1yLVxcdTAwM2Vucl9wYWdlcyB8fFxcbitcXHRcXHRcXHQgbXItXFx1MDAzZWFjY291bnQpKVxcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gXFx0aWYgKG1lbWNocl9pbnYoXFx1MDAyNnJlZy1cXHUwMDNlX19yZXN2LCAwLCBzaXplb2YocmVnLVxcdTAwM2VfX3Jlc3YpKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuQEAgLTIwNywxMCArMjYwLDIzIEBAIGludCBpb19jcmVhdGVfcmVnaW9uKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXFxuIFxcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbiBcXG4gXFx0bnJfcGFnZXMgPSByZWctXFx1MDAzZXNpemUgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4tXFx0aWYgKGN0eC1cXHUwMDNldXNlcikge1xcbi1cXHRcXHRyZXQgPSBfX2lvX2FjY291bnRfbWVtKGN0eC1cXHUwMDNldXNlciwgbnJfcGFnZXMpO1xcbi1cXHRcXHRpZiAocmV0KVxcbitcXHRpZiAocmVnLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19NRU1fUkVHSU9OX1RZUEVfVVNFUikge1xcbitcXHRcXHRpZiAoY3R4LVxcdTAwM2V1c2VyKSB7XFxuK1xcdFxcdFxcdHJldCA9IF9faW9fYWNjb3VudF9tZW0oY3R4LVxcdTAwM2V1c2VyLCBucl9wYWdlcyk7XFxuK1xcdFxcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdH1cXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogS2VybmVsLWFsbG9jYXRlZCBwYWdlcyBjYW4gb3V0bGl2ZSB0aGVpciBhY3RpdmUgcmVnaW9uIHRocm91Z2hcXG4rXFx0XFx0ICogdXNlcnNwYWNlIG1hcHBpbmdzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0bXItXFx1MDAzZWFjY291bnQgPSBpb19yZWdpb25fYWNjb3VudF9hbGxvYyhjdHgtXFx1MDAzZXVzZXIsIG5yX3BhZ2VzKTtcXG4rXFx0XFx0aWYgKElTX0VSUihtci1cXHUwMDNlYWNjb3VudCkpIHtcXG4rXFx0XFx0XFx0cmV0ID0gUFRSX0VSUihtci1cXHUwMDNlYWNjb3VudCk7XFxuK1xcdFxcdFxcdG1yLVxcdTAwM2VhY2NvdW50ID0gTlVMTDtcXG4gXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcdG1yLVxcdTAwM2Vucl9wYWdlcyA9IG5yX3BhZ2VzO1xcbiBcXG5AQCAtMjgxLDE1ICszNDcsNDEgQEAgc3RhdGljIHZvaWQgKmlvX3VyaW5nX3ZhbGlkYXRlX21tYXBfcmVxdWVzdChzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHBnb2ZmKVxcbiBcXG4gI2lmZGVmIENPTkZJR19NTVVcXG4gXFxuK3N0YXRpYyB2b2lkIGlvX3JlZ2lvbl92bV9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbit7XFxuK1xcdGlvX3JlZ2lvbl9hY2NvdW50X2dldCh2bWEtXFx1MDAzZXZtX3ByaXZhdGVfZGF0YSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGlvX3JlZ2lvbl92bV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4re1xcbitcXHRpb19yZWdpb25fYWNjb3VudF9wdXQodm1hLVxcdTAwM2V2bV9wcml2YXRlX2RhdGEpO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGlvX3JlZ2lvbl92bV9vcHMgPSB7XFxuK1xcdC5vcGVuID0gaW9fcmVnaW9uX3ZtX29wZW4sXFxuK1xcdC5jbG9zZSA9IGlvX3JlZ2lvbl92bV9jbG9zZSxcXG4rfTtcXG4rXFxuIHN0YXRpYyBpbnQgaW9fcmVnaW9uX21tYXAoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuIFxcdFxcdFxcdCAgc3RydWN0IGlvX21hcHBlZF9yZWdpb24gKm1yLFxcbiBcXHRcXHRcXHQgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHRcXHQgIHVuc2lnbmVkIG1heF9wYWdlcylcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gbWluKG1yLVxcdTAwM2Vucl9wYWdlcywgbWF4X3BhZ2VzKTtcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdHZtX2ZsYWdzX3NldCh2bWEsIFZNX0RPTlRFWFBBTkQpO1xcbi1cXHRyZXR1cm4gdm1faW5zZXJ0X3BhZ2VzKHZtYSwgdm1hLVxcdTAwM2V2bV9zdGFydCwgbXItXFx1MDAzZXBhZ2VzLCBcXHUwMDI2bnJfcGFnZXMpO1xcbitcXHRyZXQgPSB2bV9pbnNlcnRfcGFnZXModm1hLCB2bWEtXFx1MDAzZXZtX3N0YXJ0LCBtci1cXHUwMDNlcGFnZXMsIFxcdTAwMjZucl9wYWdlcyk7XFxuK1xcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2IG1yLVxcdTAwM2VhY2NvdW50KSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEFjY291bnRpbmcgZGVsaWJlcmF0ZWx5IHJlbWFpbnMgYXQgcmVnaW9uIGdyYW51bGFyaXR5IHdoZW5cXG4rXFx0XFx0ICogdGhpcyBWTUEgbWFwcyBvbmx5IHBhcnQgb2YgdGhlIHJlZ2lvbi5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHZtYS1cXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gbXItXFx1MDAzZWFjY291bnQ7XFxuK1xcdFxcdHZtYS1cXHUwMDNldm1fb3BzID0gXFx1MDAyNmlvX3JlZ2lvbl92bV9vcHM7XFxuK1xcdFxcdHZtYS1cXHUwMDNldm1fb3BzLVxcdTAwM2VvcGVuKHZtYSk7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gX19jb2xkIGludCBpb191cmluZ19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5AQCAtMzc5LDYgKzQ3MSw4IEBAIHN0YXRpYyB2b2lkIGlvX3VyaW5nX25vbW11X3ZtX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiBcXG4gXFx0Zm9yIChpbmRleCA9IHZtYS1cXHUwMDNldm1fc3RhcnQ7IGluZGV4IFxcdTAwM2Mgdm1hLVxcdTAwM2V2bV9lbmQ7IGluZGV4ICs9IFBBR0VfU0laRSlcXG4gXFx0XFx0cHV0X3BhZ2UodmlydF90b19wYWdlKCh2b2lkICopIGluZGV4KSk7XFxuK1xcbitcXHRpb19yZWdpb25fYWNjb3VudF9wdXQodm1hLVxcdTAwM2V2bV9wcml2YXRlX2RhdGEpO1xcbiB9XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGlvX3VyaW5nX25vbW11X3ZtX29wcyA9IHtcXG5AQCAtNDExLDYgKzUwNSw4IEBAIGludCBpb191cmluZ19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHJlZ2lvbi1cXHUwMDNlbnJfcGFnZXM7IGkrKylcXG4gXFx0XFx0Z2V0X3BhZ2UocmVnaW9uLVxcdTAwM2VwYWdlc1tpXSk7XFxuIFxcbitcXHR2bWEtXFx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IHJlZ2lvbi1cXHUwMDNlYWNjb3VudDtcXG4rXFx0aW9fcmVnaW9uX2FjY291bnRfZ2V0KHJlZ2lvbi1cXHUwMDNlYWNjb3VudCk7XFxuIFxcdHZtYS1cXHUwMDNldm1fb3BzID0gXFx1MDAyNmlvX3VyaW5nX25vbW11X3ZtX29wcztcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDc6Mjk6MzYuOTIwMzk3MzM0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjM2MjM5NTgxMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb19jcmVhdGVfcmVnaW9uXCIsXG4gICAgXCJpb19mcmVlX3JlZ2lvblwiLFxuICAgIFwiaW9fdXJpbmdfbW1hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBhY2NvdW50aW5nIGFuZCBtYXBwaW5nIGxvZ2ljIGZvciBpb191cmluZyByZWdpb25zLCBpbnRyb2R1Y2luZyBgc3RydWN0IGlvX3JlZ2lvbl9hY2NvdW50YCBhbmQgY2hhbmdpbmcgaG93IG1lbW9yeSBpcyBhY2NvdW50ZWQgYW5kIGZyZWVkLiBUaGlzIGFmZmVjdHMgYGlvX2NyZWF0ZV9yZWdpb25gLCBgaW9fZnJlZV9yZWdpb25gLCBhbmQgYGlvX3VyaW5nX21tYXBgLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzNTEyOTQ3YzBkMzYwMjRlZmQ1MTE5ZmViNTk0MWQ1YWEwZGZkNDMwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMTYgMDc6Mjk6MzMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmhcbmluZGV4IDg3MTUxYTViNjJjMWIuLjZmZWI3ZWUzNDQwZmQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvaW9fdXJpbmdfdHlwZXMuaFxuQEAgLTk0LDExICs5NCwxNCBAQCBzdHJ1Y3QgaW9faGFzaF90YWJsZSB7XG4gXHR1bnNpZ25lZFx0XHRoYXNoX2JpdHM7XG4gfTtcbiBcbitzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnQ7XG4rXG4gc3RydWN0IGlvX21hcHBlZF9yZWdpb24ge1xuIFx0c3RydWN0IHBhZ2VcdFx0KipwYWdlcztcbiBcdHZvaWRcdFx0XHQqcHRyO1xuIFx0dW5zaWduZWRcdFx0bnJfcGFnZXM7XG4gXHR1bnNpZ25lZFx0XHRmbGFncztcbitcdHN0cnVjdCBpb19yZWdpb25fYWNjb3VudFx0KmFjY291bnQ7XG4gfTtcbiBcbiAvKlxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL21lbW1hcC5jIGIvaW9fdXJpbmcvbWVtbWFwLmNcbmluZGV4IDIzZThhODUxMTFiY2EuLmNhMjhhOTQyOWMxNjggMTAwNjQ0XG4tLS0gYS9pb191cmluZy9tZW1tYXAuY1xuKysrIGIvaW9fdXJpbmcvbWVtbWFwLmNcbkBAIC00LDYgKzQsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vycm5vLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW1hbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcmVmY291bnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3VzZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvX3VyaW5nLmhcdTAwM2VcbkBAIC04OCw2ICs5MCw1MiBAQCBlbnVtIHtcbiBcdElPX1JFR0lPTl9GX1NJTkdMRV9SRUZcdFx0XHQ9IDQsXG4gfTtcbiBcbitzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnQge1xuK1x0cmVmY291bnRfdCByZWZzO1xuK1x0c3RydWN0IHVzZXJfc3RydWN0ICp1c2VyO1xuK1x0dW5zaWduZWQgbG9uZyBucl9wYWdlcztcbit9O1xuK1xuK3N0YXRpYyBzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnQgKlxuK2lvX3JlZ2lvbl9hY2NvdW50X2FsbG9jKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbit7XG4rXHRzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnQgKmFjY291bnQ7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCF1c2VyKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdGFjY291bnQgPSBrbWFsbG9jX29iaigqYWNjb3VudCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbitcdGlmICghYWNjb3VudClcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXG4rXHRyZXQgPSBfX2lvX2FjY291bnRfbWVtKHVzZXIsIG5yX3BhZ2VzKTtcbitcdGlmIChyZXQpIHtcbitcdFx0a2ZyZWUoYWNjb3VudCk7XG4rXHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4rXHR9XG4rXG4rXHRyZWZjb3VudF9zZXQoXHUwMDI2YWNjb3VudC1cdTAwM2VyZWZzLCAxKTtcbitcdGFjY291bnQtXHUwMDNldXNlciA9IGdldF91aWQodXNlcik7XG4rXHRhY2NvdW50LVx1MDAzZW5yX3BhZ2VzID0gbnJfcGFnZXM7XG4rXHRyZXR1cm4gYWNjb3VudDtcbit9XG4rXG4rc3RhdGljIHZvaWQgaW9fcmVnaW9uX2FjY291bnRfZ2V0KHN0cnVjdCBpb19yZWdpb25fYWNjb3VudCAqYWNjb3VudClcbit7XG4rXHRpZiAoYWNjb3VudClcbitcdFx0cmVmY291bnRfaW5jKFx1MDAyNmFjY291bnQtXHUwMDNlcmVmcyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGlvX3JlZ2lvbl9hY2NvdW50X3B1dChzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnQgKmFjY291bnQpXG4re1xuK1x0aWYgKGFjY291bnQgXHUwMDI2XHUwMDI2IHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZhY2NvdW50LVx1MDAzZXJlZnMpKSB7XG4rXHRcdF9faW9fdW5hY2NvdW50X21lbShhY2NvdW50LVx1MDAzZXVzZXIsIGFjY291bnQtXHUwMDNlbnJfcGFnZXMpO1xuK1x0XHRmcmVlX3VpZChhY2NvdW50LVx1MDAzZXVzZXIpO1xuK1x0XHRrZnJlZShhY2NvdW50KTtcbitcdH1cbit9XG4rXG4gdm9pZCBpb19mcmVlX3JlZ2lvbihzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIsIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcilcbiB7XG4gXHRpZiAobXItXHUwMDNlcGFnZXMpIHtcbkBAIC0xMDUsOCArMTUzLDEyIEBAIHZvaWQgaW9fZnJlZV9yZWdpb24oc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyLCBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIpXG4gXHR9XG4gXHRpZiAoKG1yLVx1MDAzZWZsYWdzIFx1MDAyNiBJT19SRUdJT05fRl9WTUFQKSBcdTAwMjZcdTAwMjYgbXItXHUwMDNlcHRyKVxuIFx0XHR2dW5tYXAobXItXHUwMDNlcHRyKTtcbi1cdGlmIChtci1cdTAwM2Vucl9wYWdlcyBcdTAwMjZcdTAwMjYgdXNlcilcbitcdGlmIChtci1cdTAwM2VhY2NvdW50KSB7XG4rXHRcdFdBUk5fT05fT05DRShtci1cdTAwM2VhY2NvdW50LVx1MDAzZXVzZXIgIT0gdXNlcik7XG4rXHRcdGlvX3JlZ2lvbl9hY2NvdW50X3B1dChtci1cdTAwM2VhY2NvdW50KTtcbitcdH0gZWxzZSBpZiAobXItXHUwMDNlbnJfcGFnZXMgXHUwMDI2XHUwMDI2IHVzZXIpIHtcbiBcdFx0X19pb191bmFjY291bnRfbWVtKHVzZXIsIG1yLVx1MDAzZW5yX3BhZ2VzKTtcbitcdH1cbiBcbiBcdG1lbXNldChtciwgMCwgc2l6ZW9mKCptcikpO1xuIH1cbkBAIC0xODgsNyArMjQwLDggQEAgaW50IGlvX2NyZWF0ZV9yZWdpb24oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcbiBcdGludCBucl9wYWdlcywgcmV0O1xuIFx0dTY0IGVuZDtcbiBcbi1cdGlmIChXQVJOX09OX09OQ0UobXItXHUwMDNlcGFnZXMgfHwgbXItXHUwMDNlcHRyIHx8IG1yLVx1MDAzZW5yX3BhZ2VzKSlcbitcdGlmIChXQVJOX09OX09OQ0UobXItXHUwMDNlcGFnZXMgfHwgbXItXHUwMDNlcHRyIHx8IG1yLVx1MDAzZW5yX3BhZ2VzIHx8XG4rXHRcdFx0IG1yLVx1MDAzZWFjY291bnQpKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdGlmIChtZW1jaHJfaW52KFx1MDAyNnJlZy1cdTAwM2VfX3Jlc3YsIDAsIHNpemVvZihyZWctXHUwMDNlX19yZXN2KSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTIwNywxMCArMjYwLDIzIEBAIGludCBpb19jcmVhdGVfcmVnaW9uKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXG4gXHRcdHJldHVybiAtRU9WRVJGTE9XO1xuIFxuIFx0bnJfcGFnZXMgPSByZWctXHUwMDNlc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbi1cdGlmIChjdHgtXHUwMDNldXNlcikge1xuLVx0XHRyZXQgPSBfX2lvX2FjY291bnRfbWVtKGN0eC1cdTAwM2V1c2VyLCBucl9wYWdlcyk7XG4tXHRcdGlmIChyZXQpXG4rXHRpZiAocmVnLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfTUVNX1JFR0lPTl9UWVBFX1VTRVIpIHtcbitcdFx0aWYgKGN0eC1cdTAwM2V1c2VyKSB7XG4rXHRcdFx0cmV0ID0gX19pb19hY2NvdW50X21lbShjdHgtXHUwMDNldXNlciwgbnJfcGFnZXMpO1xuK1x0XHRcdGlmIChyZXQpXG4rXHRcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHQvKlxuK1x0XHQgKiBLZXJuZWwtYWxsb2NhdGVkIHBhZ2VzIGNhbiBvdXRsaXZlIHRoZWlyIGFjdGl2ZSByZWdpb24gdGhyb3VnaFxuK1x0XHQgKiB1c2Vyc3BhY2UgbWFwcGluZ3MuXG4rXHRcdCAqL1xuK1x0XHRtci1cdTAwM2VhY2NvdW50ID0gaW9fcmVnaW9uX2FjY291bnRfYWxsb2MoY3R4LVx1MDAzZXVzZXIsIG5yX3BhZ2VzKTtcbitcdFx0aWYgKElTX0VSUihtci1cdTAwM2VhY2NvdW50KSkge1xuK1x0XHRcdHJldCA9IFBUUl9FUlIobXItXHUwMDNlYWNjb3VudCk7XG4rXHRcdFx0bXItXHUwMDNlYWNjb3VudCA9IE5VTEw7XG4gXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0fVxuIFx0fVxuIFx0bXItXHUwMDNlbnJfcGFnZXMgPSBucl9wYWdlcztcbiBcbkBAIC0yODEsMTUgKzM0Nyw0MSBAQCBzdGF0aWMgdm9pZCAqaW9fdXJpbmdfdmFsaWRhdGVfbW1hcF9yZXF1ZXN0KHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3QgcGdvZmYpXG4gXG4gI2lmZGVmIENPTkZJR19NTVVcbiBcbitzdGF0aWMgdm9pZCBpb19yZWdpb25fdm1fb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbit7XG4rXHRpb19yZWdpb25fYWNjb3VudF9nZXQodm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGlvX3JlZ2lvbl92bV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbit7XG4rXHRpb19yZWdpb25fYWNjb3VudF9wdXQodm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSk7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaW9fcmVnaW9uX3ZtX29wcyA9IHtcbitcdC5vcGVuID0gaW9fcmVnaW9uX3ZtX29wZW4sXG4rXHQuY2xvc2UgPSBpb19yZWdpb25fdm1fY2xvc2UsXG4rfTtcbitcbiBzdGF0aWMgaW50IGlvX3JlZ2lvbl9tbWFwKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuIFx0XHRcdCAgc3RydWN0IGlvX21hcHBlZF9yZWdpb24gKm1yLFxuIFx0XHRcdCAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0ICB1bnNpZ25lZCBtYXhfcGFnZXMpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IG1pbihtci1cdTAwM2Vucl9wYWdlcywgbWF4X3BhZ2VzKTtcbitcdGludCByZXQ7XG4gXG4gXHR2bV9mbGFnc19zZXQodm1hLCBWTV9ET05URVhQQU5EKTtcbi1cdHJldHVybiB2bV9pbnNlcnRfcGFnZXModm1hLCB2bWEtXHUwMDNldm1fc3RhcnQsIG1yLVx1MDAzZXBhZ2VzLCBcdTAwMjZucl9wYWdlcyk7XG4rXHRyZXQgPSB2bV9pbnNlcnRfcGFnZXModm1hLCB2bWEtXHUwMDNldm1fc3RhcnQsIG1yLVx1MDAzZXBhZ2VzLCBcdTAwMjZucl9wYWdlcyk7XG4rXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgbXItXHUwMDNlYWNjb3VudCkge1xuK1x0XHQvKlxuK1x0XHQgKiBBY2NvdW50aW5nIGRlbGliZXJhdGVseSByZW1haW5zIGF0IHJlZ2lvbiBncmFudWxhcml0eSB3aGVuXG4rXHRcdCAqIHRoaXMgVk1BIG1hcHMgb25seSBwYXJ0IG9mIHRoZSByZWdpb24uXG4rXHRcdCAqL1xuK1x0XHR2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gbXItXHUwMDNlYWNjb3VudDtcbitcdFx0dm1hLVx1MDAzZXZtX29wcyA9IFx1MDAyNmlvX3JlZ2lvbl92bV9vcHM7XG4rXHRcdHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlb3Blbih2bWEpO1xuK1x0fVxuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gX19jb2xkIGludCBpb191cmluZ19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbkBAIC0zNzksNiArNDcxLDggQEAgc3RhdGljIHZvaWQgaW9fdXJpbmdfbm9tbXVfdm1fY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gXG4gXHRmb3IgKGluZGV4ID0gdm1hLVx1MDAzZXZtX3N0YXJ0OyBpbmRleCBcdTAwM2Mgdm1hLVx1MDAzZXZtX2VuZDsgaW5kZXggKz0gUEFHRV9TSVpFKVxuIFx0XHRwdXRfcGFnZSh2aXJ0X3RvX3BhZ2UoKHZvaWQgKikgaW5kZXgpKTtcbitcbitcdGlvX3JlZ2lvbl9hY2NvdW50X3B1dCh2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhKTtcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBpb191cmluZ19ub21tdV92bV9vcHMgPSB7XG5AQCAtNDExLDYgKzUwNSw4IEBAIGludCBpb191cmluZ19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHJlZ2lvbi1cdTAwM2Vucl9wYWdlczsgaSsrKVxuIFx0XHRnZXRfcGFnZShyZWdpb24tXHUwMDNlcGFnZXNbaV0pO1xuIFxuK1x0dm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IHJlZ2lvbi1cdTAwM2VhY2NvdW50O1xuK1x0aW9fcmVnaW9uX2FjY291bnRfZ2V0KHJlZ2lvbi1cdTAwM2VhY2NvdW50KTtcbiBcdHZtYS1cdTAwM2V2bV9vcHMgPSBcdTAwMjZpb191cmluZ19ub21tdV92bV9vcHM7XG4gXHRyZXR1cm4gMDtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwNzoyOTozNi45MjAzOTg2OTRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODQxMDU1OTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGlvX3VyaW5nIE1lbW9yeSBBY2NvdW50aW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgbWVtb3J5IGFjY291bnRpbmcgd2l0aGluIGBpb191cmluZy9tZW1tYXAuY2AgYW5kIGBpbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmhgLiBJdCBzZWVtcyB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGludHJvZHVjdGlvbiBvZiB0aGlzIGBzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnRgIGFuZCBhIHJlZmFjdG9yIG9mIGhvdyBgaW9fbWFwcGVkX3JlZ2lvbmAgbWVtb3J5IGlzIHRyYWNrZWQuIFRoZSBwYXRjaCBpcyBhZGRpbmcgYGlvX3JlZ2lvbl9hY2NvdW50X2FsbG9jYCwgYGlvX3JlZ2lvbl9hY2NvdW50X2dldGAsIGFuZCBgaW9fcmVnaW9uX2FjY291bnRfcHV0YCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGlzIGFib3V0IHJlZmVyZW5jZSBjb3VudGluZyBvciBhIHNpbWlsYXIgbWVjaGFuaXNtIGZvciBtYW5hZ2luZyB0aGUgbGlmZXRpbWUgb2YgdGhlc2UgcmVnaW9ucy4gSXQncyBhbHNvIG1vZGlmeWluZyBgaW9fZnJlZV9yZWdpb25gLCBgaW9fY3JlYXRlX3JlZ2lvbmAsIGFuZCBib3RoIGBpb19yZWdpb25fbW1hcGAgYW5kIHRoZSBgaW9fdXJpbmdfbW1hcGAgZm9yIG5vbW11IHN5c3RlbXMuXG5cblRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGl0IGdvZXMgcmlnaHQgdG8gdGhlIGhlYXJ0IG9mIGhvdyBpb191cmluZyBtYW5hZ2VzIG1lbW9yeSBtYXBwaW5nLiBHaXZlbiB0aGF0LCBpdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGNvZGUgYW5kIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMuIEZyb20gd2hhdCBJIHNlZSBub3csIGBpb19jcmVhdGVfcmVnaW9uYCwgYGlvX2ZyZWVfcmVnaW9uYCwgYW5kIGBpb191cmluZ19tbWFwYCBhcmUgZ29pbmcgdG8gYmUgbXkgcHJpbWFyeSB0YXJnZXRzLlxuXG5CZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gd3JpdGluZyB0ZXN0IGNhc2VzLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBPYnZpb3VzbHksIGBDT05GSUdfSU9fVVJJTkdgIGlzIHRoZSBiaWcgb25lLCBidXQgSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdC4gSSdsbCBuZWVkIHRvIGNoZWNrIGVpdGhlciBgaW9fdXJpbmcvS2NvbmZpZ2Agb3IgcG9zc2libHkgZXZlbiBgaW5pdC9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbWlnaHQgYWZmZWN0IHRoZSBiZWhhdmlvciBvZiB0aGVzZSBmdW5jdGlvbnMgb3IgaW50cm9kdWNlIGVkZ2UgY2FzZXMgdGhhdCBJIG5lZWQgdG8gYWNjb3VudCBmb3IuIEkgbmVlZCB0byBiZSBzdXJlIEknbSB0ZXN0aW5nIHRoZSBjb2RlIGFzIGl0IHdvdWxkIGJlIGNvbmZpZ3VyZWQgaW4gdGhlIHJlYWwgd29ybGQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNDAsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwNzoyOTo0Mi43NjE0NTczMDNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4MzgwOTQxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU9fVVJJTkdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE5MTA9Y29uZmlnIEFJT1xcbi0tXFxuaW5pdC9LY29uZmlnLTE5MTctXFxuaW5pdC9LY29uZmlnOjE5MTg6Y29uZmlnIElPX1VSSU5HXFxuaW5pdC9LY29uZmlnLTE5MTktXFx0Ym9vbCBcXFwiRW5hYmxlIElPIHVyaW5nIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbi0tXFxuaW5pdC9LY29uZmlnPTE5Mjc9Y29uZmlnIEdDT1ZfUFJPRklMRV9VUklOR1xcbi0tXFxuaW5pdC9LY29uZmlnLTE5MzktXFxuaW5pdC9LY29uZmlnOjE5NDA6Y29uZmlnIElPX1VSSU5HX01PQ0tfRklMRVxcbmluaXQvS2NvbmZpZy0xOTQxLVxcdHRyaXN0YXRlIFxcXCJFbmFibGUgaW9fdXJpbmcgbW9jayBmaWxlcyAoRXhwZXJpbWVudGFsKVxcXCIgaWYgRVhQRVJUXFxuLS1cXG5pb191cmluZy9LY29uZmlnLTUtXFxuaW9fdXJpbmcvS2NvbmZpZzo2OmNvbmZpZyBJT19VUklOR19aQ1JYXFxuaW9fdXJpbmcvS2NvbmZpZy03LVxcdGRlZl9ib29sIHlcXG4tLVxcbmlvX3VyaW5nL0tjb25maWctMTItXFxuaW9fdXJpbmcvS2NvbmZpZzoxMzpjb25maWcgSU9fVVJJTkdfQlBGXFxuaW9fdXJpbmcvS2NvbmZpZy0xNC1cXHRkZWZfYm9vbCB5XFxuLS1cXG5pb191cmluZy9LY29uZmlnLTE3LVxcbmlvX3VyaW5nL0tjb25maWc6MTg6Y29uZmlnIElPX1VSSU5HX0JQRl9PUFNcXG5pb191cmluZy9LY29uZmlnLTE5LVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDc6Mjk6NDQuNTQ1MjcxMjI3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQwMDQwOTc4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgSU9fVVJJTkcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBhbiBgSU9fVVJJTkdgIGNvbmZpZ3VyYXRpb24gaGVyZS4gUmlnaHQuIE5vdywgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgbWVtb3J5IHJlZ2lvbnMgYXJlIG1hbmFnZWQgd2l0aGluIHRoaXMgY29udGV4dC4gTXkgcHJpbWFyeSBjb25jZXJuIGlzIHdpdGggdGhlIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBzdHJhdGVnaWVzIGZvciBJL08gYnVmZmVycy4gU28sIEkgbmVlZCB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgcm9sZXMgb2YgYGlvX2NyZWF0ZV9yZWdpb25gIGFuZCBgaW9fZnJlZV9yZWdpb25gLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNlbnRyYWwgdG8gdGhlIGludGVncml0eSBhbmQgcGVyZm9ybWFuY2Ugb2YgdGhlIEkvTyBzeXN0ZW0sIGFuZCBJIGhhdmUgdG8gZnVsbHkgZ3Jhc3AgdGhlaXIgaW50ZXJhY3Rpb24uIEkgbmVlZCB0byB0cmFjZSB0aGVpciBpbXBsZW1lbnRhdGlvbiwgdW5kZXJzdGFuZCBhbnkgcG90ZW50aWFsIG92ZXJoZWFkIHRoZXkgaW50cm9kdWNlLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBtYW5hZ2VtZW50IG1lY2hhbmlzbXMuIEVzc2VudGlhbGx5LCBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHJlZ2lvbiBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24gYXJlIHJvYnVzdCBhbmQgb3B0aW1hbGx5IGRlc2lnbmVkLCBhbmQgdGhhdCB0aGVzZSBmdW5jdGlvbnMgZG9uJ3QgYmVjb21lIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTk5LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDc6Mjk6NDguOTQ1NjgzMDE2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDA2OTg3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fY3JlYXRlX3JlZ2lvblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9pb191cmluZy5jPTI3MjY9c3RhdGljIF9fY29sZCBpbnQgaW9fYWxsb2NhdGVfc2NxX3VyaW5ncyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjc0NC1cXHR9XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoyNzQ1OlxcdHJldCA9IGlvX2NyZWF0ZV9yZWdpb24oY3R4LCBcXHUwMDI2Y3R4LVxcdTAwM2VyaW5nX3JlZ2lvbiwgXFx1MDAyNnJkLCBJT1JJTkdfT0ZGX0NRX1JJTkcpO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjc0Ni1cXHRpZiAocmV0KVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yNzU4LVxcdH1cXG5pb191cmluZy9pb191cmluZy5jOjI3NTk6XFx0cmV0ID0gaW9fY3JlYXRlX3JlZ2lvbihjdHgsIFxcdTAwMjZjdHgtXFx1MDAzZXNxX3JlZ2lvbiwgXFx1MDAyNnJkLCBJT1JJTkdfT0ZGX1NRRVMpO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjc2MC1cXHRpZiAocmV0KSB7XFxuLS1cXG5pb191cmluZy9rYnVmLmM9NjI5PWludCBpb19yZWdpc3Rlcl9wYnVmX3Jpbmcoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcpXFxuLS1cXG5pb191cmluZy9rYnVmLmMtNjc3LVxcdH1cXG5pb191cmluZy9rYnVmLmM6Njc4OlxcdHJldCA9IGlvX2NyZWF0ZV9yZWdpb24oY3R4LCBcXHUwMDI2YmwtXFx1MDAzZXJlZ2lvbiwgXFx1MDAyNnJkLCBtbWFwX29mZnNldCk7XFxuaW9fdXJpbmcva2J1Zi5jLTY3OS1cXHRpZiAocmV0KVxcbi0tXFxuaW9fdXJpbmcvbWVtbWFwLmM9MjA0PXN0YXRpYyBpbnQgaW9fcmVnaW9uX2FsbG9jYXRlX3BhZ2VzKHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5jLTIzNS1cXG5pb191cmluZy9tZW1tYXAuYzoyMzY6aW50IGlvX2NyZWF0ZV9yZWdpb24oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcXG5pb191cmluZy9tZW1tYXAuYy0yMzctXFx0XFx0ICAgICBzdHJ1Y3QgaW9fdXJpbmdfcmVnaW9uX2Rlc2MgKnJlZyxcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5oPTIwPXZvaWQgaW9fZnJlZV9yZWdpb24oc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyLCBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIpO1xcbmlvX3VyaW5nL21lbW1hcC5oOjIxOmludCBpb19jcmVhdGVfcmVnaW9uKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXFxuaW9fdXJpbmcvbWVtbWFwLmgtMjItXFx0XFx0ICAgICBzdHJ1Y3QgaW9fdXJpbmdfcmVnaW9uX2Rlc2MgKnJlZyxcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmM9NDk4PXN0YXRpYyBpbnQgaW9fcmVnaXN0ZXJfcmVzaXplX3JpbmdzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnKVxcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy01MzEtXFx0fVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6NTMyOlxcdHJldCA9IGlvX2NyZWF0ZV9yZWdpb24oY3R4LCBcXHUwMDI2bi5yaW5nX3JlZ2lvbiwgXFx1MDAyNnJkLCBJT1JJTkdfT0ZGX0NRX1JJTkcpO1xcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNTMzLVxcdGlmIChyZXQpXFxuLS1cXG5pb191cmluZy9yZWdpc3Rlci5jLTU2MS1cXHR9XFxuaW9fdXJpbmcvcmVnaXN0ZXIuYzo1NjI6XFx0cmV0ID0gaW9fY3JlYXRlX3JlZ2lvbihjdHgsIFxcdTAwMjZuLnNxX3JlZ2lvbiwgXFx1MDAyNnJkLCBJT1JJTkdfT0ZGX1NRRVMpO1xcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNTYzLVxcdGlmIChyZXQpIHtcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmM9NzAzPXN0YXRpYyBpbnQgaW9fcmVnaXN0ZXJfbWVtX3JlZ2lvbihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKnVhcmcpXFxuLS1cXG5pb191cmluZy9yZWdpc3Rlci5jLTczMi1cXG5pb191cmluZy9yZWdpc3Rlci5jOjczMzpcXHRyZXQgPSBpb19jcmVhdGVfcmVnaW9uKGN0eCwgXFx1MDAyNnJlZ2lvbiwgXFx1MDAyNnJkLCBJT1JJTkdfTUFQX09GRl9QQVJBTV9SRUdJT04pO1xcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNzM0LVxcdGlmIChyZXQpXFxuLS1cXG5pb191cmluZy96Y3J4LmM9MzgwPXN0YXRpYyBpbnQgaW9fYWxsb2NhdGVfcmJ1Zl9yaW5nKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbi0tXFxuaW9fdXJpbmcvemNyeC5jLTM5OS1cXG5pb191cmluZy96Y3J4LmM6NDAwOlxcdHJldCA9IGlvX2NyZWF0ZV9yZWdpb24oY3R4LCBcXHUwMDI2aWZxLVxcdTAwM2VycV9yZWdpb24sIHJkLCBtbWFwX29mZnNldCk7XFxuaW9fdXJpbmcvemNyeC5jLTQwMS1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDc6Mjk6NTAuNjg2Mzg2MjY2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwNzQ1NjgxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLlxuXG4qKkluaXRpYWwgQ29uc2lkZXJhdGlvbnMgZm9yIE1lbW9yeSBNYW5hZ2VtZW50KipcblxuUmlnaHQsIHNvIHdlJ3JlIGRpdmluZyBpbnRvIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGlzIHN5c3RlbSwgYW5kIG15IGltbWVkaWF0ZSBmb2N1cyBsYW5kcyBvbiB0aGVzZSBzcGVjaWZpYyBmdW5jdGlvbnM6IGBpb19jcmVhdGVfcmVnaW9uYCwgYGlvX2ZyZWVfcmVnaW9uYCwgYGlvX3VyaW5nX21tYXBgLCBgaW9fcmVnaXN0ZXJfbWVtX3JlZ2lvbmAsIGBpb19yZWdpc3Rlcl9wYnVmX3JpbmdgLCBhbmQgYGlvX3JlZ2lzdGVyX3Jlc2l6ZV9yaW5nc2AuIEl0IHNlZW1zIHRoZXNlIGFyZSB0aGUgY29yZSBidWlsZGluZyBibG9ja3MgZm9yIGhvdyBtZW1vcnkgcmVnaW9ucyBhcmUgY3JlYXRlZCwgZnJlZWQsIG1hcHBlZCB3aXRoIGlvX3VyaW5nLCBhbmQgcmVnaXN0ZXJlZCBmb3IgdmFyaW91cyBwdXJwb3NlcyDigJMgcHJvYmFibHkgdG8gc2VydmUgdGhlIGlvX3VyaW5nIG9wZXJhdGlvbnMuIEknbSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgd29yayB0b2dldGhlciwgYnV0IGdpdmVuIHRoZWlyIG5hbWVzLCBJJ20gZXhwZWN0aW5nIHNvbWUga2luZCBvZiBsYXllcmVkIGFwcHJvYWNoIGhlcmUgZm9yIGJvdGggdGhlIG1lbW9yeSBhbmQgcmluZ3MuXG5cbk15IGd1dCB0ZWxscyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdW5waWNrIHRoZSBhcmNoaXRlY3R1cmUgaXMgdG8gaGF2ZSBhIGxvb2sgYXQgYGlvX2ZyZWVfcmVnaW9uYC4gVGhhdCdsbCBiZSBhIHVzZWZ1bCBwbGFjZSB0byBzdGFydCBiZWNhdXNlIGl0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZSByZXNvdXJjZXMgYXJlIG1hbmFnZWQgZnJvbSBiZWdpbm5pbmcgdG8gZW5kLiBLbm93aW5nIGhvdyBtZW1vcnkgaXMgZGVhbGxvY2F0ZWQgaXMgb2Z0ZW4ga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGFsbG9jYXRpb24gcHJvY2VzcyBhbmQgaWRlbnRpZnlpbmcgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciBpbmVmZmljaWVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjIyNSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDA3OjI5OjU0LjU5Mzg0NjU1N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTUxOTQxMzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX2ZyZWVfcmVnaW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL2lvX3VyaW5nLmM9MjA3OD1zdGF0aWMgdm9pZCBpb19yaW5nc19mcmVlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjA3OS17XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoyMDgwOlxcdGlvX2ZyZWVfcmVnaW9uKGN0eC1cXHUwMDNldXNlciwgXFx1MDAyNmN0eC1cXHUwMDNlc3FfcmVnaW9uKTtcXG5pb191cmluZy9pb191cmluZy5jOjIwODE6XFx0aW9fZnJlZV9yZWdpb24oY3R4LVxcdTAwM2V1c2VyLCBcXHUwMDI2Y3R4LVxcdTAwM2VyaW5nX3JlZ2lvbik7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMDgyLVxcdGN0eC1cXHUwMDNlcmluZ3MgPSBOVUxMO1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz0yMTYzPXN0YXRpYyBfX2NvbGQgdm9pZCBpb19yaW5nX2N0eF9mcmVlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMTc1LVxcdGlvX2Rlc3Ryb3lfYnVmZmVycyhjdHgpO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MjE3NjpcXHRpb19mcmVlX3JlZ2lvbihjdHgtXFx1MDAzZXVzZXIsIFxcdTAwMjZjdHgtXFx1MDAzZXBhcmFtX3JlZ2lvbik7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMTc3LVxcdG11dGV4X3VubG9jayhcXHUwMDI2Y3R4LVxcdTAwM2V1cmluZ19sb2NrKTtcXG4tLVxcbmlvX3VyaW5nL2tidWYuYz00NTg9c3RhdGljIHZvaWQgaW9fcHV0X2JsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsKVxcbi0tXFxuaW9fdXJpbmcva2J1Zi5jLTQ2MC1cXHRpZiAoYmwtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9CTF9CVUZfUklORylcXG5pb191cmluZy9rYnVmLmM6NDYxOlxcdFxcdGlvX2ZyZWVfcmVnaW9uKGN0eC1cXHUwMDNldXNlciwgXFx1MDAyNmJsLVxcdTAwM2VyZWdpb24pO1xcbmlvX3VyaW5nL2tidWYuYy00NjItXFx0ZWxzZVxcbi0tXFxuaW9fdXJpbmcva2J1Zi5jPTYyOT1pbnQgaW9fcmVnaXN0ZXJfcGJ1Zl9yaW5nKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnKVxcbi0tXFxuaW9fdXJpbmcva2J1Zi5jLTcxMC1mYWlsOlxcbmlvX3VyaW5nL2tidWYuYzo3MTE6XFx0aW9fZnJlZV9yZWdpb24oY3R4LVxcdTAwM2V1c2VyLCBcXHUwMDI2YmwtXFx1MDAzZXJlZ2lvbik7XFxuaW9fdXJpbmcva2J1Zi5jLTcxMi1cXHRrZnJlZShibCk7XFxuLS1cXG5pb191cmluZy9tZW1tYXAuYz0xMzA9c3RhdGljIHZvaWQgaW9fcmVnaW9uX2FjY291bnRfcHV0KHN0cnVjdCBpb19yZWdpb25fYWNjb3VudCAqYWNjb3VudClcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5jLTEzOC1cXG5pb191cmluZy9tZW1tYXAuYzoxMzk6dm9pZCBpb19mcmVlX3JlZ2lvbihzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIsIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcilcXG5pb191cmluZy9tZW1tYXAuYy0xNDAte1xcbi0tXFxuaW9fdXJpbmcvbWVtbWFwLmM9MjM2PWludCBpb19jcmVhdGVfcmVnaW9uKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXFxuLS1cXG5pb191cmluZy9tZW1tYXAuYy0yOTQtb3V0X2ZyZWU6XFxuaW9fdXJpbmcvbWVtbWFwLmM6Mjk1OlxcdGlvX2ZyZWVfcmVnaW9uKGN0eC1cXHUwMDNldXNlciwgbXIpO1xcbmlvX3VyaW5nL21lbW1hcC5jLTI5Ni1cXHRyZXR1cm4gcmV0O1xcbi0tXFxuaW9fdXJpbmcvbWVtbWFwLmM9NDgyPWludCBpb191cmluZ19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5jLTUwMC1cXHQvKlxcbmlvX3VyaW5nL21lbW1hcC5jOjUwMTpcXHQgKiBQaW4gdGhlIHBhZ2VzIHNvIGlvX2ZyZWVfcmVnaW9uKCkncyByZWxlYXNlX3BhZ2VzKCkgZG9lcyBub3RcXG5pb191cmluZy9tZW1tYXAuYy01MDItXFx0ICogZHJvcCB0aGUgbGFzdCByZWZlcmVuY2Ugd2hpbGUgdGhpcyBWTUEgZXhpc3RzLiBkZWxldGVfdm1hKClcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5oPTE4PWludCBpb191cmluZ19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuaW9fdXJpbmcvbWVtbWFwLmgtMTktXFxuaW9fdXJpbmcvbWVtbWFwLmg6MjA6dm9pZCBpb19mcmVlX3JlZ2lvbihzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIsIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcik7XFxuaW9fdXJpbmcvbWVtbWFwLmgtMjEtaW50IGlvX2NyZWF0ZV9yZWdpb24oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmM9NDgwPXN0YXRpYyB2b2lkIGlvX3JlZ2lzdGVyX2ZyZWVfcmluZ3Moc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy9yZWdpc3Rlci5jLTQ4Mi17XFxuaW9fdXJpbmcvcmVnaXN0ZXIuYzo0ODM6XFx0aW9fZnJlZV9yZWdpb24oY3R4LVxcdTAwM2V1c2VyLCBcXHUwMDI2ci1cXHUwMDNlc3FfcmVnaW9uKTtcXG5pb191cmluZy9yZWdpc3Rlci5jOjQ4NDpcXHRpb19mcmVlX3JlZ2lvbihjdHgtXFx1MDAzZXVzZXIsIFxcdTAwMjZyLVxcdTAwM2VyaW5nX3JlZ2lvbik7XFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy00ODUtfVxcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYz03MDM9c3RhdGljIGludCBpb19yZWdpc3Rlcl9tZW1fcmVnaW9uKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqdWFyZylcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNzM2LVxcdGlmIChjb3B5X3RvX3VzZXIocmRfdXB0ciwgXFx1MDAyNnJkLCBzaXplb2YocmQpKSkge1xcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6NzM3OlxcdFxcdGlvX2ZyZWVfcmVnaW9uKGN0eC1cXHUwMDNldXNlciwgXFx1MDAyNnJlZ2lvbik7XFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy03MzgtXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuLS1cXG5pb191cmluZy96Y3J4LmM9NDEyPXN0YXRpYyB2b2lkIGlvX2ZyZWVfcmJ1Zl9yaW5nKHN0cnVjdCBpb196Y3J4X2lmcSAqaWZxKVxcbmlvX3VyaW5nL3pjcnguYy00MTMte1xcbmlvX3VyaW5nL3pjcnguYzo0MTQ6XFx0aW9fZnJlZV9yZWdpb24oaWZxLVxcdTAwM2V1c2VyLCBcXHUwMDI2aWZxLVxcdTAwM2VycV9yZWdpb24pO1xcbmlvX3VyaW5nL3pjcnguYy00MTUtXFx0aWZxLVxcdTAwM2VycS5yaW5nID0gSU9fVVJJTkdfUFRSX1BPSVNPTjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDc6Mjk6NTYuMTQ1Nzk0MjI4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA0NTc0NjUwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEkvTyBSZWdpb24gRnVuY3Rpb25zKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nLiBXZSd2ZSBnb3QgYSBoYW5kZnVsIG9mIGNyaXRpY2FsIEkvTyByZWdpb24gZnVuY3Rpb25zIHRvIHplcm8gaW4gb246IGBpb19jcmVhdGVfcmVnaW9uYCwgYGlvX2ZyZWVfcmVnaW9uYCwgYGlvX3VyaW5nX21tYXBgLCBgaW9fcmVnaW9uX21tYXBgLCBhbmQgYGlvX3JlZ2lzdGVyX21lbV9yZWdpb25gLiBHaXZlbiB3aGF0IEkga25vdyBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgdGhlIGtlcm5lbCwgdGhlc2UgYXJlIGxpa2VseSB0aGUgY29yZSBidWlsZGluZyBibG9ja3MgZm9yIGhvdyB0aGVzZSByZWdpb25zIGFyZSBjcmVhdGVkLCBtYW5hZ2VkLCBhbmQgbWFwcGVkLiBNeSBndXQgdGVsbHMgbWUgdGhhdCBhbnkgaXNzdWVzIGhlcmUgY291bGQgcmlwcGxlIG91dCBhbmQgY2F1c2Ugc2lnbmlmaWNhbnQgcHJvYmxlbXMgZnVydGhlciBkb3duIHRoZSBsaW5lLCBzbyBpdCdzIGJlc3QgdG8gaW52ZXN0aWdhdGUgdGhlbSB0aG9yb3VnaGx5LiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gdGhlIGxpc3QgYW5kIGl0cyBjb250ZXh0LCBpcyB0byBkZWx2ZSBpbnRvIGBpb19yZWdpb25fbW1hcGAuIFVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIHJlZ2lvbnMgYXJlIGFjdHVhbGx5IG1hcHBlZCBpbnRvIHRoZSB1c2VyIHNwYWNlIG9yIGtlcm5lbCBhZGRyZXNzIHNwYWNlIHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgdG8gZ2FpbiBpbnNpZ2h0cyBhbmQgdG8gc3RhcnQgdG8gZGV0ZXJtaW5lIGhvdyB0aGlzIGlzIGFsbCBpbXBsZW1lbnRlZCBhdCB0aGUgbG93ZXIgbGV2ZWxzLiBMZXQncyBzZWUgd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIHVwIHRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODkxLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDc6MzA6MDEuMTkxNTQ1NTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjM4MDMyMjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fcmVnaW9uX21tYXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvbWVtbWFwLmM9MzYwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaW9fcmVnaW9uX3ZtX29wcyA9IHtcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5jLTM2NC1cXG5pb191cmluZy9tZW1tYXAuYzozNjU6c3RhdGljIGludCBpb19yZWdpb25fbW1hcChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG5pb191cmluZy9tZW1tYXAuYy0zNjYtXFx0XFx0XFx0ICBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXFxuLS1cXG5pb191cmluZy9tZW1tYXAuYz0zODc9X19jb2xkIGludCBpb191cmluZ19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5jLTQwOS1cXHRyZWdpb24gPSBpb19tbWFwX2dldF9yZWdpb24oY3R4LCB2bWEtXFx1MDAzZXZtX3Bnb2ZmKTtcXG5pb191cmluZy9tZW1tYXAuYzo0MTA6XFx0cmV0dXJuIGlvX3JlZ2lvbl9tbWFwKGN0eCwgcmVnaW9uLCB2bWEsIHBhZ2VfbGltaXQpO1xcbmlvX3VyaW5nL21lbW1hcC5jLTQxMS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDA3OjMwOjAyLjc1NTM1NjA3M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTczMzI2Mzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBpb191cmluZydzIE1lbW9yeSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gSSdtIHN0YXJ0aW5nIHdpdGggYGlvX3VyaW5nX21tYXBgLiBUaGF0J3Mgd2hlcmUgaXQgYWxsIGJlZ2lucywgcmlnaHQ/IFRoZSBpbml0aWFsIG1hcHBpbmcuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtZW1vcnkgcmVnaXN0cmF0aW9uIGFjdHVhbGx5IHdvcmtzIHdpdGhpbiB0aGF0IGNvbnRleHQuIEknbGwgbmVlZCB0byBnbyBkZWVwZXIgdG8gc2VlIGhvdyBgaW9fdXJpbmdgIGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIHN5c3RlbSBtZW1vcnkuIExldCdzIGRpZyBpbnRvIGBpb19yZWdpc3Rlcl9tZW1fcmVnaW9uYCBuZXh0OyBJJ20gcHJldHR5IHN1cmUgdGhhdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdXNlci1zcGFjZSBtZW1vcnkgZ2V0cyBwbHVtYmVkIGludG8gYGlvX3VyaW5nYCdzIHdvcmxkLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGF0IHJlZ2lzdHJhdGlvbiB0aWVzIGludG8gdGhlIHdob2xlIHBpY3R1cmUsIGVzcGVjaWFsbHkgcmVnYXJkaW5nIERNQSBhbmQgdGhvc2UgcG90ZW50aWFsIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMgdGhhdCBhcmUgdGhlIHdob2xlIHBvaW50IG9mIGBpb191cmluZ2AuIEknbSBleHBlY3Rpbmcgc29tZSBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbiB3aXRoIHBhZ2UgdGFibGVzIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0MzQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwNzozMDowNi4zMjg2ODYxODFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTgwMzgwMjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fcmVnaXN0ZXJfbWVtX3JlZ2lvblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9yZWdpc3Rlci5jPTQ5OD1zdGF0aWMgaW50IGlvX3JlZ2lzdGVyX3Jlc2l6ZV9yaW5ncyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZylcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNzAyLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6NzAzOnN0YXRpYyBpbnQgaW9fcmVnaXN0ZXJfbWVtX3JlZ2lvbihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKnVhcmcpXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy03MDQte1xcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYz03NTA9c3RhdGljIGludCBfX2lvX3VyaW5nX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB1bnNpZ25lZCBvcGNvZGUsXFxuLS1cXG5pb191cmluZy9yZWdpc3Rlci5jLTk1My1cXHRcXHRcXHRicmVhaztcXG5pb191cmluZy9yZWdpc3Rlci5jOjk1NDpcXHRcXHRyZXQgPSBpb19yZWdpc3Rlcl9tZW1fcmVnaW9uKGN0eCwgYXJnKTtcXG5pb191cmluZy9yZWdpc3Rlci5jLTk1NS1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDc6MzA6MDcuODg2NzI4NjEzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODgxNjM3NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgTWVtb3J5IFJlZ2lzdHJhdGlvbiBpbiB0aGUgSU9fdXJpbmcgQ29udGV4dCoqXG5cbk9rYXksIHNvIGBpb19yZWdpc3Rlcl9tZW1fcmVnaW9uYCBpcyBkZWZpbml0ZWx5IHRyaWdnZXJlZCBieSBgX19pb191cmluZ19yZWdpc3RlcmAuIE1ha2VzIHNlbnNlOyB0aGF0J3MgdGhlIGNvcmUgcmVnaXN0cmF0aW9uIGZ1bmN0aW9uLiBNeSBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGhlcmUgc28sIGxldCdzIHRyYWNlIHRoaXMgYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nIGludGVybmFsbHkuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gbWVtb3J5IG1hbmFnZW1lbnQgbnVhbmNlcyBzbyBJJ2xsIGNoZWNrIGBpb19yZWdpc3Rlcl9wYnVmX3JpbmdgIGZvciBzb21lIGNvbnRleHQgYXJvdW5kIHRoYXQuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg4NywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDA3OjMwOjExLjU3NDg5NTM3M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2MDI0MTk3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19yZWdpc3Rlcl9wYnVmX3JpbmdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcva2J1Zi5jPTYxMT1pbnQgaW9fbWFuYWdlX2J1ZmZlcnNfbGVnYWN5KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9rYnVmLmMtNjI4LVxcbmlvX3VyaW5nL2tidWYuYzo2Mjk6aW50IGlvX3JlZ2lzdGVyX3BidWZfcmluZyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZylcXG5pb191cmluZy9rYnVmLmMtNjMwLXtcXG4tLVxcbmlvX3VyaW5nL2tidWYuaD04MD1pbnQgaW9fbWFuYWdlX2J1ZmZlcnNfbGVnYWN5KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xcbmlvX3VyaW5nL2tidWYuaC04MS1cXG5pb191cmluZy9rYnVmLmg6ODI6aW50IGlvX3JlZ2lzdGVyX3BidWZfcmluZyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZyk7XFxuaW9fdXJpbmcva2J1Zi5oLTgzLWludCBpb191bnJlZ2lzdGVyX3BidWZfcmluZyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZyk7XFxuLS1cXG5pb191cmluZy9yZWdpc3Rlci5jPTc1MD1zdGF0aWMgaW50IF9faW9fdXJpbmdfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHVuc2lnbmVkIG9wY29kZSxcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtODg3LVxcdFxcdFxcdGJyZWFrO1xcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6ODg4OlxcdFxcdHJldCA9IGlvX3JlZ2lzdGVyX3BidWZfcmluZyhjdHgsIGFyZyk7XFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy04ODktXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDA3OjMwOjEzLjEzNTE0MjQ4NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTY1MDQ1MzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gaW9fcmVnaXN0ZXJfcGJ1Zl9yaW5nKipcblxuT2theSwgc28gYGlvX3JlZ2lzdGVyX3BidWZfcmluZ2AgaXMgY2FsbGVkIGZyb20gYF9faW9fdXJpbmdfcmVnaXN0ZXJgLiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50LCB0aGUgcmVnaXN0cmF0aW9uIHBhdGguIEl0J3MgdGltZSB0byBmb2xsb3cgdGhlIHRyYWlsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGJ1ZmZlciByaW5ncyBhcmUgYmVpbmcgc2V0IHVwLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBleGFtaW5lIHRoZSByZXNpemUgb3BlcmF0aW9uLiBMZXQncyBkaWcgaW50byBgaW9fcmVnaXN0ZXJfcmVzaXplX3JpbmdzYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgbG93ZG93biBvbiB0aGUgcmluZyBzaXplcywgYW5kIGhvdyB0aGUgYnVmZmVyIG1lbW9yeSBpcyBhbGxvY2F0ZWQgYW5kIG1hbmFnZWQgZHVyaW5nIHRoaXMgaW5pdGlhbGl6YXRpb24gcGhhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0MTAsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwNzozMDoxNi4zMDAxOTA3ODNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjQ2MDA1MjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fcmVnaXN0ZXJfcmVzaXplX3JpbmdzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL3JlZ2lzdGVyLmM9NDgwPXN0YXRpYyB2b2lkIGlvX3JlZ2lzdGVyX2ZyZWVfcmluZ3Moc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy9yZWdpc3Rlci5jLTQ5Ny1cXG5pb191cmluZy9yZWdpc3Rlci5jOjQ5ODpzdGF0aWMgaW50IGlvX3JlZ2lzdGVyX3Jlc2l6ZV9yaW5ncyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZylcXG5pb191cmluZy9yZWdpc3Rlci5jLTQ5OS17XFxuLS1cXG5pb191cmluZy9yZWdpc3Rlci5jPTc1MD1zdGF0aWMgaW50IF9faW9fdXJpbmdfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHVuc2lnbmVkIG9wY29kZSxcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtOTQ3LVxcdFxcdFxcdGJyZWFrO1xcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6OTQ4OlxcdFxcdHJldCA9IGlvX3JlZ2lzdGVyX3Jlc2l6ZV9yaW5ncyhjdHgsIGFyZyk7XFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy05NDktXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDA3OjMwOjE3Ljg2NDc5NTMwNloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODU3MjE3Nzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGBpb191cmluZ2AgUmluZyBSZWdpc3RyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGUgY2FsbHMgcmVsYXRlZCB0byByZWdpc3RlcmluZyBhbmQgcmVzaXppbmcgdGhlIHJpbmdzIHdpdGhpbiB0aGUgYGlvX3VyaW5nYCBzdWJzeXN0ZW0uIE15IHN0YXJ0aW5nIHBvaW50IGlzIGBpb19yZWdpc3Rlcl9yZXNpemVfcmluZ3NgLCB3aGljaCBJIHNlZSBpcyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgX19pb191cmluZ19yZWdpc3RlcmAuIFRoZXJlZm9yZSwgdGhhdCdzIHdoZXJlIEkgbmVlZCB0byBmb2N1cy5cblxuTXkgYXR0ZW50aW9uIGltbWVkaWF0ZWx5IHNoaWZ0cyB0byBzZXZlcmFsIGZ1bmN0aW9uczogYGlvX2NyZWF0ZV9yZWdpb25gLCBgaW9fZnJlZV9yZWdpb25gLCBgaW9fdXJpbmdfbW1hcGAsIGBpb19yZWdpc3Rlcl9tZW1fcmVnaW9uYCwgYGlvX3JlZ2lzdGVyX3BidWZfcmluZ2AsIGFuZCBgaW9fcmVnaXN0ZXJfcmVzaXplX3JpbmdzYC5cblxuTm93LCBgaW9fY3JlYXRlX3JlZ2lvbmAgYW5kIGBpb19mcmVlX3JlZ2lvbmAgY2F0Y2ggbXkgZXllLiBUaGV5IGFyZW4ndCBkZWNsYXJlZCBhcyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLCBldmVuIGlmIHRoZXkgYXJlIGludGVybmFsIHRvIGBpb191cmluZ2AuIFRoaXMgbWVhbnMgdGhleSdyZSBhY2Nlc3NpYmxlIG91dHNpZGUgYSBzcGVjaWZpYyBzb3VyY2UgZmlsZSwgc28gYXJlIHByb2JhYmx5IHdvcnRoIHNjcnV0aW5pemluZy4gSSBzZWUgdGhhdCBgaW9fcmVnaXN0ZXJfbWVtX3JlZ2lvbmAsIGBpb19yZWdpc3Rlcl9wYnVmX3JpbmdgLCBhbmQgYGlvX3JlZ2lzdGVyX3Jlc2l6ZV9yaW5nc2AgYWxzbyBzZWVtIGltcG9ydGFudC5cblxuQSBxdWljayBjaGVjayBjb25maXJtcyBhIGNvdXBsZSBvZiB0aGluZ3MsIGFuZCB0cmlnZ2VycyBhbiBlcnJvciBpbiBteSB0aGlua2luZy4gYGlvX3JlZ2lzdGVyX21lbV9yZWdpb25gIGlzLCBpbiBmYWN0LCBzdGF0aWMuICpBbmQqLCBzbyBpcyBgaW9fcmVnaXN0ZXJfcmVzaXplX3JpbmdzYC4gTXkgaW5pdGlhbCBtZW50YWwgbW9kZWwgd2FzIGZsYXdlZC4gT24gdGhlIG90aGVyIGhhbmQsIGBpb19yZWdpc3Rlcl9wYnVmX3JpbmdgIGFuZCBgaW9fdXJpbmdfbW1hcGAgYXJlICpub3QqIHN0YXRpYywgc28gd2lsbCBiZSB1c2VmdWwuXG5cbkkgbmVlZCB0byBjaXJjbGUgYmFjayBhbmQgY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIGBpb19yZWdpc3Rlcl9tZW1fcmVnaW9uYCBhbmQgYGlvX3JlZ2lzdGVyX3Jlc2l6ZV9yaW5nc2AuIFRoZXkncmUgaW50ZXJuYWwsIHNvIGFyZSB0aGV5IHRoZSByaWdodCBwbGFjZXMgdG8gZm9jdXM/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MDksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDc6MzA6MjIuNzIyMDE1NjFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTI4NzY3NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fcmVnaXN0ZXJfbWVtX3JlZ2lvblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9yZWdpc3Rlci5jPTQ5OD1zdGF0aWMgaW50IGlvX3JlZ2lzdGVyX3Jlc2l6ZV9yaW5ncyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZylcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNzAyLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6NzAzOnN0YXRpYyBpbnQgaW9fcmVnaXN0ZXJfbWVtX3JlZ2lvbihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKnVhcmcpXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy03MDQte1xcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYz03NTA9c3RhdGljIGludCBfX2lvX3VyaW5nX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB1bnNpZ25lZCBvcGNvZGUsXFxuLS1cXG5pb191cmluZy9yZWdpc3Rlci5jLTk1My1cXHRcXHRcXHRicmVhaztcXG5pb191cmluZy9yZWdpc3Rlci5jOjk1NDpcXHRcXHRyZXQgPSBpb19yZWdpc3Rlcl9tZW1fcmVnaW9uKGN0eCwgYXJnKTtcXG5pb191cmluZy9yZWdpc3Rlci5jLTk1NS1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDc6MzA6MjQuMjc0ODk3MzgxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyODE5ODM0MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gS2V5IElPIEZ1bmN0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gR2l2ZW4gdGhhdCBgaW9fcmVnaXN0ZXJfbWVtX3JlZ2lvbmAgaXMgc3RhdGljLCBteSBhdHRlbnRpb24gbmVlZHMgdG8gc2hpZnQgdG8gdGhlIG1vcmUgZHluYW1pYyBjb21wb25lbnRzLiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gSU8gcmVnaW9uIG1hbmFnZW1lbnQsIHdoaWNoIGFyZSB3aGVyZSB0aGUgY29yZSBpbnRlcmFjdGlvbnMgbGlrZWx5IHJlc2lkZS4gU3BlY2lmaWNhbGx5LCBgaW9fY3JlYXRlX3JlZ2lvbmAsIGBpb19mcmVlX3JlZ2lvbmAsIGBpb191cmluZ19tbWFwYCwgYW5kIGBpb19yZWdpc3Rlcl9wYnVmX3JpbmdgLiBQZXJoYXBzLCBhbHRob3VnaCBtYXliZSB0b28gYnJvYWQgYXMgYW4gZW50cnkgcG9pbnQsIGBfX2lvX3VyaW5nX3JlZ2lzdGVyYCBkZXNlcnZlcyBhIHNlY29uZCBsb29rLlxuXG5Pa2F5LCBsZXQgbWUgY29uZmlybSB0aGUgc3RhdGljL25vbi1zdGF0aWMgc3RhdHVzIG9mIHRob3NlIGZpcnN0IGZvdXIgYWdhaW46IFl1cCwgYGlvX2NyZWF0ZV9yZWdpb25gLCBgaW9fZnJlZV9yZWdpb25gLCBgaW9fdXJpbmdfbW1hcGAsIGFuZCBgaW9fcmVnaXN0ZXJfcGJ1Zl9yaW5nYCBhcmUgYWxsIG5vbi1zdGF0aWMsIHdoaWNoIGlzIHdoYXQgSSBleHBlY3QuXG5cbkp1c3QgdG8gYmUgdGhvcm91Z2gsIEknbSBnb2luZyB0byBxdWlja2x5IGdsYW5jZSBhdCBhbnkgb3RoZXIgcG90ZW50aWFsbHkgcmVsYXRlZCBmdW5jdGlvbnMuIExvb2tzIGxpa2UgYGlvX3JlZ2lvbl9hY2NvdW50X2FsbG9jYCwgYGlvX3JlZ2lvbl9hY2NvdW50X2dldGAsIGFuZCBgaW9fcmVnaW9uX2FjY291bnRfcHV0YCBhcmUgc3RhdGljLCBzbyBJIGNhbiBwcm9iYWJseSBrZWVwIHRob3NlIG91dCBvZiB0aGUgc2NvcGUgZm9yIG5vdy5cblxuQ29uc2lkZXJpbmcgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCB0aGUgbW9zdCBwcm9taXNpbmcgY2FuZGlkYXRlcyBhcmUgYGlvX2NyZWF0ZV9yZWdpb25gLCBgaW9fZnJlZV9yZWdpb25gLCBhbmQgYGlvX3VyaW5nX21tYXBgIGJhc2VkIG9uIHRoZWlyIHJvbGUgaW4gcmVnaW9uIGxpZmVjeWNsZSBhbmQgbWFwcGluZy5cblxuSSB0aGluayBpdCdzIHRpbWUgdG8gZGl2ZSBpbnRvIGEgZGVlcGVyIGFuYWx5c2lzIG9mIGBpb191cmluZ19tbWFwYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2NjYsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDc6MzA6MzEuNTU2ODgzODExWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc2ODAzMjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3VyaW5nX21tYXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvaW9fdXJpbmcuYz0yNzA4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlvX3VyaW5nX2ZvcHMgPSB7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yNzA5LVxcdC5yZWxlYXNlXFx0PSBpb191cmluZ19yZWxlYXNlLFxcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MjcxMDpcXHQubW1hcFxcdFxcdD0gaW9fdXJpbmdfbW1hcCxcXG5pb191cmluZy9pb191cmluZy5jLTI3MTEtXFx0LmdldF91bm1hcHBlZF9hcmVhID0gaW9fdXJpbmdfZ2V0X3VubWFwcGVkX2FyZWEsXFxuLS1cXG5pb191cmluZy9tZW1tYXAuYz0zNjU9c3RhdGljIGludCBpb19yZWdpb25fbW1hcChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5jLTM4Ni1cXG5pb191cmluZy9tZW1tYXAuYzozODc6X19jb2xkIGludCBpb191cmluZ19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5pb191cmluZy9tZW1tYXAuYy0zODgte1xcbi0tXFxuaW9fdXJpbmcvbWVtbWFwLmM9NDEzPXVuc2lnbmVkIGxvbmcgaW9fdXJpbmdfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5jLTQ2Mi0gKiBEcm9wIHRoZSBwYWdlcyB0aGF0IHdlcmUgaW5pdGlhbGx5IHJlZmVyZW5jZWQgYW5kIGFkZGVkIGluXFxuaW9fdXJpbmcvbWVtbWFwLmM6NDYzOiAqIGlvX3VyaW5nX21tYXAoKS4gV2UgY2Fubm90IGhhdmUgaGFkIGEgbXJlbWFwKCkgYXMgdGhhdCBpc24ndCBzdXBwb3J0ZWQsXFxuaW9fdXJpbmcvbWVtbWFwLmMtNDY0LSAqIGhlbmNlIHRoZSB2bWEgc2hvdWxkIGJlIGlkZW50aWNhbCB0byB0aGUgb25lIHdlIGluaXRpYWxseSByZWZlcmVuY2VkIGFuZFxcbi0tXFxuaW9fdXJpbmcvbWVtbWFwLmM9NDc4PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaW9fdXJpbmdfbm9tbXVfdm1fb3BzID0ge1xcbi0tXFxuaW9fdXJpbmcvbWVtbWFwLmMtNDgxLVxcbmlvX3VyaW5nL21lbW1hcC5jOjQ4MjppbnQgaW9fdXJpbmdfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuaW9fdXJpbmcvbWVtbWFwLmMtNDgzLXtcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5oPTE1PXVuc2lnbmVkIGxvbmcgaW9fdXJpbmdfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5oLTE3LVxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIGZsYWdzKTtcXG5pb191cmluZy9tZW1tYXAuaDoxODppbnQgaW9fdXJpbmdfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbmlvX3VyaW5nL21lbW1hcC5oLTE5LVxcbi0tXFxudG9vbHMvaW5jbHVkZS9pb191cmluZy9taW5pX2xpYnVyaW5nLmg9NTU9c3RydWN0IGlvX3VyaW5nIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvaW9fdXJpbmcvbWluaV9saWJ1cmluZy5oLTY5LVxcbnRvb2xzL2luY2x1ZGUvaW9fdXJpbmcvbWluaV9saWJ1cmluZy5oOjcwOnN0YXRpYyBpbmxpbmUgaW50IGlvX3VyaW5nX21tYXAoaW50IGZkLCBzdHJ1Y3QgaW9fdXJpbmdfcGFyYW1zICpwLFxcbnRvb2xzL2luY2x1ZGUvaW9fdXJpbmcvbWluaV9saWJ1cmluZy5oLTcxLVxcdFxcdFxcdFxcdHN0cnVjdCBpb191cmluZ19zcSAqc3EsIHN0cnVjdCBpb191cmluZ19jcSAqY3EpXFxuLS1cXG50b29scy9pbmNsdWRlL2lvX3VyaW5nL21pbmlfbGlidXJpbmcuaD0xMzk9c3RhdGljIGlubGluZSBpbnQgaW9fdXJpbmdfcXVldWVfaW5pdF9wYXJhbXModW5zaWduZWQgaW50IGVudHJpZXMsXFxuLS1cXG50b29scy9pbmNsdWRlL2lvX3VyaW5nL21pbmlfbGlidXJpbmcuaC0xNDktXFx0XFx0cmV0dXJuIGZkO1xcbnRvb2xzL2luY2x1ZGUvaW9fdXJpbmcvbWluaV9saWJ1cmluZy5oOjE1MDpcXHRyZXQgPSBpb191cmluZ19tbWFwKGZkLCBwLCBcXHUwMDI2cmluZy1cXHUwMDNlc3EsIFxcdTAwMjZyaW5nLVxcdTAwM2VjcSk7XFxudG9vbHMvaW5jbHVkZS9pb191cmluZy9taW5pX2xpYnVyaW5nLmgtMTUxLVxcdGlmICghcmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDA3OjMwOjMzLjEzMzY5MjExNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzM1OTMwNDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3RyYXRlZ3kgZm9yIGlvX3VyaW5nIE1lbW9yeSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVsYXRlZCB0byBtZW1vcnkgbWFwcGluZyB3aXRoaW4gaW9fdXJpbmcuIFNwZWNpZmljYWxseSwgd2UncmUgZGVhbGluZyB3aXRoIHRoZSBgaW9fdXJpbmdfbW1hcGAgZnVuY3Rpb24sIHdoaWNoIGhhbmRsZXMgbW1hcCBjYWxscyB3aXRoaW4gdGhlIGlvX3VyaW5nIGNvbnRleHQuIFdlJ3ZlIGdvdCBgaW9fY3JlYXRlX3JlZ2lvbmAgYW5kIGBpb19mcmVlX3JlZ2lvbmAgYmVpbmcgdXNlZCBub3cgd2hlbmV2ZXIgcmVnaW9ucyBhcmUgY3JlYXRlZCBvciByZWxlYXNlZC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IHNoaWZ0IGluIGhvdyBpb191cmluZyBtYW5hZ2VzIGl0cyBtZW1vcnkgYWNjb3VudGluZy5cblxuR2l2ZW4gdGhpcywgSSdtIHRoaW5raW5nIHRoaXMgaXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgY2hhbmdlcyBpbnRyb2R1Y2UgYHN0cnVjdCBpb19yZWdpb25fYWNjb3VudGAgYW5kIG1vZGlmeSBob3cgbWVtb3J5IGlzIG1hbmFnZWQgYW5kIGZyZWVkLiBUaGlzIG1lYW5zIHdlJ3ZlIGdvdCBuZXcgbG9naWMgcGF0aHMgaW4gdGhlc2UgdGhyZWUgZnVuY3Rpb25zLCBgaW9fY3JlYXRlX3JlZ2lvbmAsIGBpb19mcmVlX3JlZ2lvbmAsIGFuZCBgaW9fdXJpbmdfbW1hcGAgdGhhdCBhcmUgcG90ZW50aWFsbHkgdnVsbmVyYWJsZS4gVGhlc2UgYXJlIGNvcmUga2VybmVsIHJvdXRpbmVzLCBzbyBmaW5kaW5nIGEgYnVnIGhlcmUgd291bGQgYmUgaW1wYWN0ZnVsLlxuXG5UaGVyZWZvcmUsIG15IHN0cmF0ZWd5IGlzIHNpbXBsZTogSSdsbCBmbGFnIHRoaXMgYXMgYFdvcnRoRnV6emluZzogdHJ1ZWAsIGFuZCBjb25jZW50cmF0ZSBteSBmdXp6aW5nIGVmZm9ydHMgb24gdGhvc2Ugc3BlY2lmaWMgc3ltYm9sczogYGlvX2NyZWF0ZV9yZWdpb25gLCBgaW9fZnJlZV9yZWdpb25gLCBhbmQgYGlvX3VyaW5nX21tYXBgLiBUaGUgb2J2aW91cyBwcmVyZXF1aXNpdGUgaXMgYEVuYWJsZUNvbmZpZ3M6IElPX1VSSU5HYCwgYmVjYXVzZSBpZiB0aGF0IGlzbid0IHNldCwgdGhlbiB0aGUgd2hvbGUgdGhpbmcgaXMgaXJyZWxldmFudC4gQmVjYXVzZSBvZiB0aGUgbWVtb3J5IGhhbmRsaW5nIGFzcGVjdCwgdGhpcyBjb3VsZCBiZSBhIGZ1biBhbmQgZnJ1aXRmdWwgdGFyZ2V0LiBMZXQncyBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwOTAsIk91dHB1dFRva2VucyI6MTMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDA3OjMwOjQwLjQ2OTYyNTE5MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NzI3NjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX2NyZWF0ZV9yZWdpb25cIixcbiAgICBcImlvX2ZyZWVfcmVnaW9uXCIsXG4gICAgXCJpb191cmluZ19tbWFwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGFjY291bnRpbmcgYW5kIG1hcHBpbmcgbG9naWMgZm9yIGlvX3VyaW5nIHJlZ2lvbnMsIGludHJvZHVjaW5nIGBzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnRgIGFuZCBjaGFuZ2luZyBob3cgbWVtb3J5IGlzIGFjY291bnRlZCBhbmQgZnJlZWQuIFRoaXMgYWZmZWN0cyBgaW9fY3JlYXRlX3JlZ2lvbmAsIGBpb19mcmVlX3JlZ2lvbmAsIGFuZCBgaW9fdXJpbmdfbW1hcGAuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb19jcmVhdGVfcmVnaW9uXCIsXG4gICAgXCJpb19mcmVlX3JlZ2lvblwiLFxuICAgIFwiaW9fdXJpbmdfbW1hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBhY2NvdW50aW5nIGFuZCBtYXBwaW5nIGxvZ2ljIGZvciBpb191cmluZyByZWdpb25zLCBpbnRyb2R1Y2luZyBgc3RydWN0IGlvX3JlZ2lvbl9hY2NvdW50YCBhbmQgY2hhbmdpbmcgaG93IG1lbW9yeSBpcyBhY2NvdW50ZWQgYW5kIGZyZWVkLiBUaGlzIGFmZmVjdHMgYGlvX2NyZWF0ZV9yZWdpb25gLCBgaW9fZnJlZV9yZWdpb25gLCBhbmQgYGlvX3VyaW5nX21tYXBgLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwNzozMDo0MC41NDQzNTk0NzhaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTA1MjU5NzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDc6MzA6NDAuNTQ1MjM3NDA4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE0MTA0Mzc3NjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGludGVybmFsIHN0cnVjdHVyZSBgaW9fcmVnaW9uX2FjY291bnRgIHRvIHRyYWNrIG1lbW9yeSBhY2NvdW50aW5nIGZvciBpb191cmluZyBtZW1vcnkgcmVnaW9ucyBhY3Jvc3MgVk1BIGxpZmVjeWNsZXMuIFRoZSBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIGludGVybmFsbHkgYW5kIGFsbCBpdHMgZmllbGRzIChgcmVmc2AsIGB1c2VyYCwgYG5yX3BhZ2VzYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGV4cG9zZWQgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFRoZSBjaGFuZ2VzIHByaW1hcmlseSBhZGRyZXNzIG1lbW9yeSBhY2NvdW50aW5nIGFuZCBvYmplY3QgbGlmZWN5Y2xlcywgd2hlcmUgYW55IHBvdGVudGlhbCBidWdzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBsZWFrcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzNTEyOTQ3YzBkMzYwMjRlZmQ1MTE5ZmViNTk0MWQ1YWEwZGZkNDMwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMTYgMDc6Mjk6MzMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmhcbmluZGV4IDg3MTUxYTViNjJjMWIuLjZmZWI3ZWUzNDQwZmQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvaW9fdXJpbmdfdHlwZXMuaFxuQEAgLTk0LDExICs5NCwxNCBAQCBzdHJ1Y3QgaW9faGFzaF90YWJsZSB7XG4gXHR1bnNpZ25lZFx0XHRoYXNoX2JpdHM7XG4gfTtcbiBcbitzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnQ7XG4rXG4gc3RydWN0IGlvX21hcHBlZF9yZWdpb24ge1xuIFx0c3RydWN0IHBhZ2VcdFx0KipwYWdlcztcbiBcdHZvaWRcdFx0XHQqcHRyO1xuIFx0dW5zaWduZWRcdFx0bnJfcGFnZXM7XG4gXHR1bnNpZ25lZFx0XHRmbGFncztcbitcdHN0cnVjdCBpb19yZWdpb25fYWNjb3VudFx0KmFjY291bnQ7XG4gfTtcbiBcbiAvKlxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL21lbW1hcC5jIGIvaW9fdXJpbmcvbWVtbWFwLmNcbmluZGV4IDIzZThhODUxMTFiY2EuLmNhMjhhOTQyOWMxNjggMTAwNjQ0XG4tLS0gYS9pb191cmluZy9tZW1tYXAuY1xuKysrIGIvaW9fdXJpbmcvbWVtbWFwLmNcbkBAIC00LDYgKzQsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vycm5vLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW1hbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcmVmY291bnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3VzZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvX3VyaW5nLmhcdTAwM2VcbkBAIC04OCw2ICs5MCw1MiBAQCBlbnVtIHtcbiBcdElPX1JFR0lPTl9GX1NJTkdMRV9SRUZcdFx0XHQ9IDQsXG4gfTtcbiBcbitzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnQge1xuK1x0cmVmY291bnRfdCByZWZzO1xuK1x0c3RydWN0IHVzZXJfc3RydWN0ICp1c2VyO1xuK1x0dW5zaWduZWQgbG9uZyBucl9wYWdlcztcbit9O1xuK1xuK3N0YXRpYyBzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnQgKlxuK2lvX3JlZ2lvbl9hY2NvdW50X2FsbG9jKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbit7XG4rXHRzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnQgKmFjY291bnQ7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCF1c2VyKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdGFjY291bnQgPSBrbWFsbG9jX29iaigqYWNjb3VudCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbitcdGlmICghYWNjb3VudClcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXG4rXHRyZXQgPSBfX2lvX2FjY291bnRfbWVtKHVzZXIsIG5yX3BhZ2VzKTtcbitcdGlmIChyZXQpIHtcbitcdFx0a2ZyZWUoYWNjb3VudCk7XG4rXHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4rXHR9XG4rXG4rXHRyZWZjb3VudF9zZXQoXHUwMDI2YWNjb3VudC1cdTAwM2VyZWZzLCAxKTtcbitcdGFjY291bnQtXHUwMDNldXNlciA9IGdldF91aWQodXNlcik7XG4rXHRhY2NvdW50LVx1MDAzZW5yX3BhZ2VzID0gbnJfcGFnZXM7XG4rXHRyZXR1cm4gYWNjb3VudDtcbit9XG4rXG4rc3RhdGljIHZvaWQgaW9fcmVnaW9uX2FjY291bnRfZ2V0KHN0cnVjdCBpb19yZWdpb25fYWNjb3VudCAqYWNjb3VudClcbit7XG4rXHRpZiAoYWNjb3VudClcbitcdFx0cmVmY291bnRfaW5jKFx1MDAyNmFjY291bnQtXHUwMDNlcmVmcyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGlvX3JlZ2lvbl9hY2NvdW50X3B1dChzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnQgKmFjY291bnQpXG4re1xuK1x0aWYgKGFjY291bnQgXHUwMDI2XHUwMDI2IHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZhY2NvdW50LVx1MDAzZXJlZnMpKSB7XG4rXHRcdF9faW9fdW5hY2NvdW50X21lbShhY2NvdW50LVx1MDAzZXVzZXIsIGFjY291bnQtXHUwMDNlbnJfcGFnZXMpO1xuK1x0XHRmcmVlX3VpZChhY2NvdW50LVx1MDAzZXVzZXIpO1xuK1x0XHRrZnJlZShhY2NvdW50KTtcbitcdH1cbit9XG4rXG4gdm9pZCBpb19mcmVlX3JlZ2lvbihzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIsIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcilcbiB7XG4gXHRpZiAobXItXHUwMDNlcGFnZXMpIHtcbkBAIC0xMDUsOCArMTUzLDEyIEBAIHZvaWQgaW9fZnJlZV9yZWdpb24oc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyLCBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIpXG4gXHR9XG4gXHRpZiAoKG1yLVx1MDAzZWZsYWdzIFx1MDAyNiBJT19SRUdJT05fRl9WTUFQKSBcdTAwMjZcdTAwMjYgbXItXHUwMDNlcHRyKVxuIFx0XHR2dW5tYXAobXItXHUwMDNlcHRyKTtcbi1cdGlmIChtci1cdTAwM2Vucl9wYWdlcyBcdTAwMjZcdTAwMjYgdXNlcilcbitcdGlmIChtci1cdTAwM2VhY2NvdW50KSB7XG4rXHRcdFdBUk5fT05fT05DRShtci1cdTAwM2VhY2NvdW50LVx1MDAzZXVzZXIgIT0gdXNlcik7XG4rXHRcdGlvX3JlZ2lvbl9hY2NvdW50X3B1dChtci1cdTAwM2VhY2NvdW50KTtcbitcdH0gZWxzZSBpZiAobXItXHUwMDNlbnJfcGFnZXMgXHUwMDI2XHUwMDI2IHVzZXIpIHtcbiBcdFx0X19pb191bmFjY291bnRfbWVtKHVzZXIsIG1yLVx1MDAzZW5yX3BhZ2VzKTtcbitcdH1cbiBcbiBcdG1lbXNldChtciwgMCwgc2l6ZW9mKCptcikpO1xuIH1cbkBAIC0xODgsNyArMjQwLDggQEAgaW50IGlvX2NyZWF0ZV9yZWdpb24oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcbiBcdGludCBucl9wYWdlcywgcmV0O1xuIFx0dTY0IGVuZDtcbiBcbi1cdGlmIChXQVJOX09OX09OQ0UobXItXHUwMDNlcGFnZXMgfHwgbXItXHUwMDNlcHRyIHx8IG1yLVx1MDAzZW5yX3BhZ2VzKSlcbitcdGlmIChXQVJOX09OX09OQ0UobXItXHUwMDNlcGFnZXMgfHwgbXItXHUwMDNlcHRyIHx8IG1yLVx1MDAzZW5yX3BhZ2VzIHx8XG4rXHRcdFx0IG1yLVx1MDAzZWFjY291bnQpKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdGlmIChtZW1jaHJfaW52KFx1MDAyNnJlZy1cdTAwM2VfX3Jlc3YsIDAsIHNpemVvZihyZWctXHUwMDNlX19yZXN2KSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTIwNywxMCArMjYwLDIzIEBAIGludCBpb19jcmVhdGVfcmVnaW9uKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXG4gXHRcdHJldHVybiAtRU9WRVJGTE9XO1xuIFxuIFx0bnJfcGFnZXMgPSByZWctXHUwMDNlc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbi1cdGlmIChjdHgtXHUwMDNldXNlcikge1xuLVx0XHRyZXQgPSBfX2lvX2FjY291bnRfbWVtKGN0eC1cdTAwM2V1c2VyLCBucl9wYWdlcyk7XG4tXHRcdGlmIChyZXQpXG4rXHRpZiAocmVnLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfTUVNX1JFR0lPTl9UWVBFX1VTRVIpIHtcbitcdFx0aWYgKGN0eC1cdTAwM2V1c2VyKSB7XG4rXHRcdFx0cmV0ID0gX19pb19hY2NvdW50X21lbShjdHgtXHUwMDNldXNlciwgbnJfcGFnZXMpO1xuK1x0XHRcdGlmIChyZXQpXG4rXHRcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHQvKlxuK1x0XHQgKiBLZXJuZWwtYWxsb2NhdGVkIHBhZ2VzIGNhbiBvdXRsaXZlIHRoZWlyIGFjdGl2ZSByZWdpb24gdGhyb3VnaFxuK1x0XHQgKiB1c2Vyc3BhY2UgbWFwcGluZ3MuXG4rXHRcdCAqL1xuK1x0XHRtci1cdTAwM2VhY2NvdW50ID0gaW9fcmVnaW9uX2FjY291bnRfYWxsb2MoY3R4LVx1MDAzZXVzZXIsIG5yX3BhZ2VzKTtcbitcdFx0aWYgKElTX0VSUihtci1cdTAwM2VhY2NvdW50KSkge1xuK1x0XHRcdHJldCA9IFBUUl9FUlIobXItXHUwMDNlYWNjb3VudCk7XG4rXHRcdFx0bXItXHUwMDNlYWNjb3VudCA9IE5VTEw7XG4gXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0fVxuIFx0fVxuIFx0bXItXHUwMDNlbnJfcGFnZXMgPSBucl9wYWdlcztcbiBcbkBAIC0yODEsMTUgKzM0Nyw0MSBAQCBzdGF0aWMgdm9pZCAqaW9fdXJpbmdfdmFsaWRhdGVfbW1hcF9yZXF1ZXN0KHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3QgcGdvZmYpXG4gXG4gI2lmZGVmIENPTkZJR19NTVVcbiBcbitzdGF0aWMgdm9pZCBpb19yZWdpb25fdm1fb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbit7XG4rXHRpb19yZWdpb25fYWNjb3VudF9nZXQodm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGlvX3JlZ2lvbl92bV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbit7XG4rXHRpb19yZWdpb25fYWNjb3VudF9wdXQodm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSk7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaW9fcmVnaW9uX3ZtX29wcyA9IHtcbitcdC5vcGVuID0gaW9fcmVnaW9uX3ZtX29wZW4sXG4rXHQuY2xvc2UgPSBpb19yZWdpb25fdm1fY2xvc2UsXG4rfTtcbitcbiBzdGF0aWMgaW50IGlvX3JlZ2lvbl9tbWFwKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuIFx0XHRcdCAgc3RydWN0IGlvX21hcHBlZF9yZWdpb24gKm1yLFxuIFx0XHRcdCAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0ICB1bnNpZ25lZCBtYXhfcGFnZXMpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IG1pbihtci1cdTAwM2Vucl9wYWdlcywgbWF4X3BhZ2VzKTtcbitcdGludCByZXQ7XG4gXG4gXHR2bV9mbGFnc19zZXQodm1hLCBWTV9ET05URVhQQU5EKTtcbi1cdHJldHVybiB2bV9pbnNlcnRfcGFnZXModm1hLCB2bWEtXHUwMDNldm1fc3RhcnQsIG1yLVx1MDAzZXBhZ2VzLCBcdTAwMjZucl9wYWdlcyk7XG4rXHRyZXQgPSB2bV9pbnNlcnRfcGFnZXModm1hLCB2bWEtXHUwMDNldm1fc3RhcnQsIG1yLVx1MDAzZXBhZ2VzLCBcdTAwMjZucl9wYWdlcyk7XG4rXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgbXItXHUwMDNlYWNjb3VudCkge1xuK1x0XHQvKlxuK1x0XHQgKiBBY2NvdW50aW5nIGRlbGliZXJhdGVseSByZW1haW5zIGF0IHJlZ2lvbiBncmFudWxhcml0eSB3aGVuXG4rXHRcdCAqIHRoaXMgVk1BIG1hcHMgb25seSBwYXJ0IG9mIHRoZSByZWdpb24uXG4rXHRcdCAqL1xuK1x0XHR2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gbXItXHUwMDNlYWNjb3VudDtcbitcdFx0dm1hLVx1MDAzZXZtX29wcyA9IFx1MDAyNmlvX3JlZ2lvbl92bV9vcHM7XG4rXHRcdHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlb3Blbih2bWEpO1xuK1x0fVxuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gX19jb2xkIGludCBpb191cmluZ19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbkBAIC0zNzksNiArNDcxLDggQEAgc3RhdGljIHZvaWQgaW9fdXJpbmdfbm9tbXVfdm1fY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gXG4gXHRmb3IgKGluZGV4ID0gdm1hLVx1MDAzZXZtX3N0YXJ0OyBpbmRleCBcdTAwM2Mgdm1hLVx1MDAzZXZtX2VuZDsgaW5kZXggKz0gUEFHRV9TSVpFKVxuIFx0XHRwdXRfcGFnZSh2aXJ0X3RvX3BhZ2UoKHZvaWQgKikgaW5kZXgpKTtcbitcbitcdGlvX3JlZ2lvbl9hY2NvdW50X3B1dCh2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhKTtcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBpb191cmluZ19ub21tdV92bV9vcHMgPSB7XG5AQCAtNDExLDYgKzUwNSw4IEBAIGludCBpb191cmluZ19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHJlZ2lvbi1cdTAwM2Vucl9wYWdlczsgaSsrKVxuIFx0XHRnZXRfcGFnZShyZWdpb24tXHUwMDNlcGFnZXNbaV0pO1xuIFxuK1x0dm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IHJlZ2lvbi1cdTAwM2VhY2NvdW50O1xuK1x0aW9fcmVnaW9uX2FjY291bnRfZ2V0KHJlZ2lvbi1cdTAwM2VhY2NvdW50KTtcbiBcdHZtYS1cdTAwM2V2bV9vcHMgPSBcdTAwMjZpb191cmluZ19ub21tdV92bV9vcHM7XG4gXHRyZXR1cm4gMDtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwNzozMDo0MC41NDUyMzg2NjhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQxMDQzNDkxMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqaW9fdXJpbmcgTWVtb3J5IEFjY291bnRpbmcgRml4OiBObyBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGlvX3VyaW5nL21lbW1hcC5jYC4gSXQncyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgYWRkaXRpb24gZm9yIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGUgY29yZSBvZiBpdCBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIHRoaXMgYGlvX3JlZ2lvbl9hY2NvdW50YCBzdHJ1Y3QuICBJdCdzIG1lYW50IHRvIHRyYWNrIHRoZSBtZW1vcnkgYWNjb3VudGluZyBmb3IgdGhvc2UgYGlvX21hcHBlZF9yZWdpb25gIHJlZ2lvbnMuIEkgc2VlIHRoZSBmaWVsZHM6IGEgcmVmZXJlbmNlIGNvdW50IChgcmVmc2ApLCB0aGUgYHVzZXJgIHdobyBvd25zIHRoZSBtZW1vcnksIGFuZCB0aGUgbnVtYmVyIG9mIHBhZ2VzIChgbnJfcGFnZXNgKS4gIEl0IGxvb2tzIGxpa2UgaXQncyBhbGxvY2F0ZWQgdXNpbmcgYGttYWxsb2Nfb2JqYCwgd2hpY2ggSSBzdXNwZWN0IGlzIGp1c3QgYSBtYWNybyBmb3IgYGttYWxsb2NgIHdpdGggc29tZSBmbGFncywgbGlrZWx5IGBHRlBfS0VSTkVMX0FDQ09VTlRgLi4uIHllcCwgdGhhdCdzIHdoYXQgaXQgbG9va3MgbGlrZS4gIEl0J3MgaW1wb3J0YW50IHRoYXQgdGhpcyBzdHJ1Y3QgY29udGFpbnMgYSBgcmVmY291bnRgIGFzIGEgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlIGNvdWxkIGV4aXN0LlxuXG5SaWdodCwgc28gdGhlIHBhdGNoIGFsbG9jYXRlcyB0aGlzIGBpb19yZWdpb25fYWNjb3VudGAgYW5kIGNhcmVmdWxseSBpbml0aWFsaXplcyAqYWxsKiBpdHMgZmllbGRzIOKAkyB0aGUgcmVmY291bnQsIHRoZSB1c2VyLCBhbmQgdGhlIG51bWJlciBvZiBwYWdlcy4gIFRoZW4gaXQgbGlua3MgdGhpcyBhY2NvdW50IHRvIHRoZSBgaW9fbWFwcGVkX3JlZ2lvbmAgc3RydWN0IChgbXItXHUwMDNlYWNjb3VudGApLiAgQW5kLCBjcml0aWNhbGx5LCBpdCBhc3NvY2lhdGVzIHRoaXMgYWNjb3VudCB3aXRoIHRoZSBWTUEgKFZpcnR1YWwgTWVtb3J5IEFyZWEpIGR1cmluZyBgaW9fcmVnaW9uX21tYXBgLiBUaGUgYHZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGEgPSBtci1cdTAwM2VhY2NvdW50O2AgbGluZSBpcyB3aGF0IG1hdHRlcnMgZm9yIHRoZSBsaWZlY3ljbGUgbWFuYWdlbWVudC4gVGhlIGFjY291bnRpbmcgaXMgbm93IHByb3Blcmx5IHRpZWQgdG8gdGhlIFZNQSdzIGxpZmV0aW1lLlxuXG5UaGUgYmVhdXR5IGlzIHRoYXQgdGhpcyBpcyAqZW50aXJlbHkqIGludGVybmFsLiAgTm90aGluZyBmcm9tIHRoaXMgYGlvX3JlZ2lvbl9hY2NvdW50YCBzdHJ1Y3QgaXMgZXZlciBjb3BpZWQgb3V0IHRvIHVzZXJzcGFjZS4gTm8gbmV3IHVzZXItZmFjaW5nIHN0cnVjdHMgYXJlIGNyZWF0ZWQsIG9yIGV4aXN0aW5nIG9uZXMgbW9kaWZpZWQgaW4gYSB3YXkgdGhhdCByaXNrcyBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBpcyBhbGwgYWJvdXQgdGhlIGtlcm5lbCdzIGludGVybmFsIG1lbW9yeSBhY2NvdW50aW5nLiAgTXkgcHJpbWFyeSBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnV0IHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdGhhdCBraW5kLiAgTXkgdGhvdWdodCBpcyB0aGF0IHRoZSBwYXRjaCAqY29ycmVjdHMqIGEgYnVnIHdoZXJlIGtlcm5lbC1hbGxvY2F0ZWQgcGFnZXMgY291bGQgb3V0bGl2ZSB0aGVpciBhc3NvY2lhdGVkIG1lbW9yeSByZWdpb24gYW5kLCBieSBleHRlbnNpb24sIHRoZSB1c2VyIHNwYWNlIG1hcHBpbmcsIGFuZCBzbyB0aGUgYWNjb3VudGluZyB3b3VsZCBiZSBpbmNvcnJlY3QuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgYmVjYXVzZSBJIHdhbnQgdG8gYmUgKmFic29sdXRlbHkqIHN1cmUuIFRoZSBgaW9fcmVnaW9uX2FjY291bnRgIGFuZCBgaW9fbWFwcGVkX3JlZ2lvbmAgc3RydWN0cyB0aGVtc2VsdmVzIGFyZSBpbnRlcm5hbC4gVGhlIGBpb19jcmVhdGVfcmVnaW9uYCBmdW5jdGlvbiB1c2VzIGEgYHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcmAsIHdoaWNoIGlzIGFsc28gaW50ZXJuYWwuICBXZSdyZSBhZGRpbmcgdGhpcyBgbXItXHUwMDNlYWNjb3VudGAgYW5kIGluaXRpYWxpemluZyBpdC4gTm8gZXh0ZXJuYWwgc3RydWN0cyBhcmUgY2hhbmdlZC4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgaGVyZSB0aGF0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBwYXRjaCBpcyBqdXN0IG1lbW9yeSBhY2NvdW50aW5nIGxpZmVjeWNsZSBtYW5hZ2VtZW50LCB0aGF0IGlzLCBpdCBpcyBmaXhpbmcgYSBsZWFrLiBLQVNBTiB3b3VsZCBkZWZpbml0ZWx5IGNhdGNoIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBoZXJlLCBpZiBhbnkgZXhpc3RlZC4gS01TQU4gd291bGRuJ3QgYXBwbHkgaGVyZS5cblxuT2theSwgbGV0J3MganVzdCBkbyBhIHF1aWNrIHNjYW4gb2YgdGhlIGNvZGUgYWdhaW4sIGp1c3QgdG8gYmUgdGhvcm91Z2g6IFl1cCwgYGFjY291bnRgIGlzIGEgcG9pbnRlciwgdGhhdCBpcyBpbml0aWFsaXplZC4gVGhlIGBpb19yZWdpb25fYWNjb3VudF9hbGxvY2AgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgZXZlcnkgZmllbGQgYmVmb3JlIHJldHVybmluZyB0aGUgYWNjb3VudC4gR29vZC4gVGhlbiBpbiBjbGVhbnVwIGZ1bmN0aW9ucyB0aGUgYGFjY291bnRgIGlzIGRlLXJlZmVyZW5jZWQgYW5kIHplcm9lZC4gQW5kIGZpbmFsbHkgYSBjaGVjayBlbnN1cmVzIHRoYXQgdGhlIHJlZ2lvbiBoYXMgYmVlbiBpbml0aWFsaXplZC4gU3RhbmRhcmQgVk1BIG9wZXJhdGlvbnMgYXJlIGNvcnJlY3RseSBjYWxsZWQ6IGBpb19yZWdpb25fdm1fb3BlbmAuXG5cbkknbSBjb25maWRlbnQuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gVGhpcyBpcyBhIG1lbW9yeSBhY2NvdW50aW5nIGZpeC4gTm8gbmVlZCBmb3IgS01TQU4uIFRoZSByZWFzb25pbmcgaXMgdGhhdCB0aGUgbmV3IGBpb19yZWdpb25fYWNjb3VudGAgc3RydWN0IHRyYWNrcyBtZW1vcnkgYWNyb3NzIFZNQSBsaWZlY3ljbGVzIGFuZCBldmVyeSBmaWVsZCBpcyBpbml0aWFsaXplZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAzNywiT3V0cHV0VG9rZW5zIjoxNjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDQyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDc6MzA6NTQuNjQ5NTkxMDAzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGludGVybmFsIHN0cnVjdHVyZSBgaW9fcmVnaW9uX2FjY291bnRgIHRvIHRyYWNrIG1lbW9yeSBhY2NvdW50aW5nIGZvciBpb191cmluZyBtZW1vcnkgcmVnaW9ucyBhY3Jvc3MgVk1BIGxpZmVjeWNsZXMuIFRoZSBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIGludGVybmFsbHkgYW5kIGFsbCBpdHMgZmllbGRzIChgcmVmc2AsIGB1c2VyYCwgYG5yX3BhZ2VzYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGV4cG9zZWQgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFRoZSBjaGFuZ2VzIHByaW1hcmlseSBhZGRyZXNzIG1lbW9yeSBhY2NvdW50aW5nIGFuZCBvYmplY3QgbGlmZWN5Y2xlcywgd2hlcmUgYW55IHBvdGVudGlhbCBidWdzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBsZWFrcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGludGVybmFsIHN0cnVjdHVyZSBgaW9fcmVnaW9uX2FjY291bnRgIHRvIHRyYWNrIG1lbW9yeSBhY2NvdW50aW5nIGZvciBpb191cmluZyBtZW1vcnkgcmVnaW9ucyBhY3Jvc3MgVk1BIGxpZmVjeWNsZXMuIFRoZSBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIGludGVybmFsbHkgYW5kIGFsbCBpdHMgZmllbGRzIChgcmVmc2AsIGB1c2VyYCwgYG5yX3BhZ2VzYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGV4cG9zZWQgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFRoZSBjaGFuZ2VzIHByaW1hcmlseSBhZGRyZXNzIG1lbW9yeSBhY2NvdW50aW5nIGFuZCBvYmplY3QgbGlmZWN5Y2xlcywgd2hlcmUgYW55IHBvdGVudGlhbCBidWdzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBsZWFrcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowz9pwk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-16 07:26:46 +0000 UTC FinishedAt: 2026-08-16 07:30:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "a5161661ae99f497affa83a5b8654e457cda6267", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "a5161661ae99f497affa83a5b8654e457cda6267", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING" ], "series_id": "642897a0-bc8f-473d-978f-033c1aa749f7" }, "track": "KASAN", "fuzz": { "focus": [ "io_uring" ], "focus_symbols": [ "io_create_region", "io_free_region", "io_uring_mmap" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDA3OjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9fY3JlYXRlX3JlZ2lvbiYjMzQ7LAogICAgJiMzNDtpb19mcmVlX3JlZ2lvbiYjMzQ7LAogICAgJiMzNDtpb191cmluZ19tbWFwJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBpbnRlcm5hbCBzdHJ1Y3R1cmUgYGlvX3JlZ2lvbl9hY2NvdW50YCB0byB0cmFjayBtZW1vcnkgYWNjb3VudGluZyBmb3IgaW9fdXJpbmcgbWVtb3J5IHJlZ2lvbnMgYWNyb3NzIFZNQSBsaWZlY3ljbGVzLiBUaGUgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCBpbnRlcm5hbGx5IGFuZCBhbGwgaXRzIGZpZWxkcyAoYHJlZnNgLCBgdXNlcmAsIGBucl9wYWdlc2ApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBleHBvc2VkIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgYWRkcmVzcyBtZW1vcnkgYWNjb3VudGluZyBhbmQgb2JqZWN0IGxpZmVjeWNsZXMsIHdoZXJlIGFueSBwb3RlbnRpYWwgYnVncyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVha3MpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgbWVtb3J5IGxlYWsgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBhY2NvdW50aW5nIGFuZCBtYXBwaW5nIGxvZ2ljIGZvciBpb191cmluZyByZWdpb25zLCBpbnRyb2R1Y2luZyBgc3RydWN0IGlvX3JlZ2lvbl9hY2NvdW50YCBhbmQgY2hhbmdpbmcgaG93IG1lbW9yeSBpcyBhY2NvdW50ZWQgYW5kIGZyZWVkLiBUaGlzIGFmZmVjdHMgYGlvX2NyZWF0ZV9yZWdpb25gLCBgaW9fZnJlZV9yZWdpb25gLCBhbmQgYGlvX3VyaW5nX21tYXBgLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDA3OjI5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzUxMjk0N2MwZDM2MDI0ZWZkNTExOWZlYjU5NDFkNWFhMGRmZDQzMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDE2IDA3OjI5OjMzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW9fdXJpbmdfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvaW9fdXJpbmdfdHlwZXMuaFxuaW5kZXggODcxNTFhNWI2MmMxYi4uNmZlYjdlZTM0NDBmZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaW9fdXJpbmdfdHlwZXMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oXG5AQCAtOTQsMTEgJiM0Mzs5NCwxNCBAQCBzdHJ1Y3QgaW9faGFzaF90YWJsZSB7XG4gXHR1bnNpZ25lZFx0XHRoYXNoX2JpdHM7XG4gfTtcbiBcbiYjNDM7c3RydWN0IGlvX3JlZ2lvbl9hY2NvdW50O1xuJiM0MztcbiBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiB7XG4gXHRzdHJ1Y3QgcGFnZVx0XHQqKnBhZ2VzO1xuIFx0dm9pZFx0XHRcdCpwdHI7XG4gXHR1bnNpZ25lZFx0XHRucl9wYWdlcztcbiBcdHVuc2lnbmVkXHRcdGZsYWdzO1xuJiM0MztcdHN0cnVjdCBpb19yZWdpb25fYWNjb3VudFx0KmFjY291bnQ7XG4gfTtcbiBcbiAvKlxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL21lbW1hcC5jIGIvaW9fdXJpbmcvbWVtbWFwLmNcbmluZGV4IDIzZThhODUxMTFiY2EuLmNhMjhhOTQyOWMxNjggMTAwNjQ0XG4tLS0gYS9pb191cmluZy9tZW1tYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvbWVtbWFwLmNcbkBAIC00LDYgJiM0Mzs0LDggQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnJuby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYW4uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWZjb3VudC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3VzZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvX3VyaW5nLmhcdTAwM2VcbkBAIC04OCw2ICYjNDM7OTAsNTIgQEAgZW51bSB7XG4gXHRJT19SRUdJT05fRl9TSU5HTEVfUkVGXHRcdFx0PSA0LFxuIH07XG4gXG4mIzQzO3N0cnVjdCBpb19yZWdpb25fYWNjb3VudCB7XG4mIzQzO1x0cmVmY291bnRfdCByZWZzO1xuJiM0MztcdHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlcjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBpb19yZWdpb25fYWNjb3VudCAqXG4mIzQzO2lvX3JlZ2lvbl9hY2NvdW50X2FsbG9jKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpb19yZWdpb25fYWNjb3VudCAqYWNjb3VudDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIXVzZXIpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0YWNjb3VudCA9IGttYWxsb2Nfb2JqKCphY2NvdW50LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuJiM0MztcdGlmICghYWNjb3VudClcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBfX2lvX2FjY291bnRfbWVtKHVzZXIsIG5yX3BhZ2VzKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRrZnJlZShhY2NvdW50KTtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZWZjb3VudF9zZXQoXHUwMDI2YWNjb3VudC1cdTAwM2VyZWZzLCAxKTtcbiYjNDM7XHRhY2NvdW50LVx1MDAzZXVzZXIgPSBnZXRfdWlkKHVzZXIpO1xuJiM0MztcdGFjY291bnQtXHUwMDNlbnJfcGFnZXMgPSBucl9wYWdlcztcbiYjNDM7XHRyZXR1cm4gYWNjb3VudDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaW9fcmVnaW9uX2FjY291bnRfZ2V0KHN0cnVjdCBpb19yZWdpb25fYWNjb3VudCAqYWNjb3VudClcbiYjNDM7e1xuJiM0MztcdGlmIChhY2NvdW50KVxuJiM0MztcdFx0cmVmY291bnRfaW5jKFx1MDAyNmFjY291bnQtXHUwMDNlcmVmcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGlvX3JlZ2lvbl9hY2NvdW50X3B1dChzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnQgKmFjY291bnQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoYWNjb3VudCBcdTAwMjZcdTAwMjYgcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmFjY291bnQtXHUwMDNlcmVmcykpIHtcbiYjNDM7XHRcdF9faW9fdW5hY2NvdW50X21lbShhY2NvdW50LVx1MDAzZXVzZXIsIGFjY291bnQtXHUwMDNlbnJfcGFnZXMpO1xuJiM0MztcdFx0ZnJlZV91aWQoYWNjb3VudC1cdTAwM2V1c2VyKTtcbiYjNDM7XHRcdGtmcmVlKGFjY291bnQpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiB2b2lkIGlvX2ZyZWVfcmVnaW9uKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlciwgc3RydWN0IGlvX21hcHBlZF9yZWdpb24gKm1yKVxuIHtcbiBcdGlmIChtci1cdTAwM2VwYWdlcykge1xuQEAgLTEwNSw4ICYjNDM7MTUzLDEyIEBAIHZvaWQgaW9fZnJlZV9yZWdpb24oc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyLCBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIpXG4gXHR9XG4gXHRpZiAoKG1yLVx1MDAzZWZsYWdzIFx1MDAyNiBJT19SRUdJT05fRl9WTUFQKSBcdTAwMjZcdTAwMjYgbXItXHUwMDNlcHRyKVxuIFx0XHR2dW5tYXAobXItXHUwMDNlcHRyKTtcbi1cdGlmIChtci1cdTAwM2Vucl9wYWdlcyBcdTAwMjZcdTAwMjYgdXNlcilcbiYjNDM7XHRpZiAobXItXHUwMDNlYWNjb3VudCkge1xuJiM0MztcdFx0V0FSTl9PTl9PTkNFKG1yLVx1MDAzZWFjY291bnQtXHUwMDNldXNlciAhPSB1c2VyKTtcbiYjNDM7XHRcdGlvX3JlZ2lvbl9hY2NvdW50X3B1dChtci1cdTAwM2VhY2NvdW50KTtcbiYjNDM7XHR9IGVsc2UgaWYgKG1yLVx1MDAzZW5yX3BhZ2VzIFx1MDAyNlx1MDAyNiB1c2VyKSB7XG4gXHRcdF9faW9fdW5hY2NvdW50X21lbSh1c2VyLCBtci1cdTAwM2Vucl9wYWdlcyk7XG4mIzQzO1x0fVxuIFxuIFx0bWVtc2V0KG1yLCAwLCBzaXplb2YoKm1yKSk7XG4gfVxuQEAgLTE4OCw3ICYjNDM7MjQwLDggQEAgaW50IGlvX2NyZWF0ZV9yZWdpb24oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcbiBcdGludCBucl9wYWdlcywgcmV0O1xuIFx0dTY0IGVuZDtcbiBcbi1cdGlmIChXQVJOX09OX09OQ0UobXItXHUwMDNlcGFnZXMgfHwgbXItXHUwMDNlcHRyIHx8IG1yLVx1MDAzZW5yX3BhZ2VzKSlcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKG1yLVx1MDAzZXBhZ2VzIHx8IG1yLVx1MDAzZXB0ciB8fCBtci1cdTAwM2Vucl9wYWdlcyB8fFxuJiM0MztcdFx0XHQgbXItXHUwMDNlYWNjb3VudCkpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuIFx0aWYgKG1lbWNocl9pbnYoXHUwMDI2cmVnLVx1MDAzZV9fcmVzdiwgMCwgc2l6ZW9mKHJlZy1cdTAwM2VfX3Jlc3YpKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMjA3LDEwICYjNDM7MjYwLDIzIEBAIGludCBpb19jcmVhdGVfcmVnaW9uKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXG4gXHRcdHJldHVybiAtRU9WRVJGTE9XO1xuIFxuIFx0bnJfcGFnZXMgPSByZWctXHUwMDNlc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbi1cdGlmIChjdHgtXHUwMDNldXNlcikge1xuLVx0XHRyZXQgPSBfX2lvX2FjY291bnRfbWVtKGN0eC1cdTAwM2V1c2VyLCBucl9wYWdlcyk7XG4tXHRcdGlmIChyZXQpXG4mIzQzO1x0aWYgKHJlZy1cdTAwM2VmbGFncyBcdTAwMjYgSU9SSU5HX01FTV9SRUdJT05fVFlQRV9VU0VSKSB7XG4mIzQzO1x0XHRpZiAoY3R4LVx1MDAzZXVzZXIpIHtcbiYjNDM7XHRcdFx0cmV0ID0gX19pb19hY2NvdW50X21lbShjdHgtXHUwMDNldXNlciwgbnJfcGFnZXMpO1xuJiM0MztcdFx0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBLZXJuZWwtYWxsb2NhdGVkIHBhZ2VzIGNhbiBvdXRsaXZlIHRoZWlyIGFjdGl2ZSByZWdpb24gdGhyb3VnaFxuJiM0MztcdFx0ICogdXNlcnNwYWNlIG1hcHBpbmdzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRtci1cdTAwM2VhY2NvdW50ID0gaW9fcmVnaW9uX2FjY291bnRfYWxsb2MoY3R4LVx1MDAzZXVzZXIsIG5yX3BhZ2VzKTtcbiYjNDM7XHRcdGlmIChJU19FUlIobXItXHUwMDNlYWNjb3VudCkpIHtcbiYjNDM7XHRcdFx0cmV0ID0gUFRSX0VSUihtci1cdTAwM2VhY2NvdW50KTtcbiYjNDM7XHRcdFx0bXItXHUwMDNlYWNjb3VudCA9IE5VTEw7XG4gXHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdH1cbiBcdH1cbiBcdG1yLVx1MDAzZW5yX3BhZ2VzID0gbnJfcGFnZXM7XG4gXG5AQCAtMjgxLDE1ICYjNDM7MzQ3LDQxIEBAIHN0YXRpYyB2b2lkICppb191cmluZ192YWxpZGF0ZV9tbWFwX3JlcXVlc3Qoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBwZ29mZilcbiBcbiAjaWZkZWYgQ09ORklHX01NVVxuIFxuJiM0MztzdGF0aWMgdm9pZCBpb19yZWdpb25fdm1fb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiYjNDM7e1xuJiM0MztcdGlvX3JlZ2lvbl9hY2NvdW50X2dldCh2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaW9fcmVnaW9uX3ZtX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuJiM0Mzt7XG4mIzQzO1x0aW9fcmVnaW9uX2FjY291bnRfcHV0KHZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGlvX3JlZ2lvbl92bV9vcHMgPSB7XG4mIzQzO1x0Lm9wZW4gPSBpb19yZWdpb25fdm1fb3BlbixcbiYjNDM7XHQuY2xvc2UgPSBpb19yZWdpb25fdm1fY2xvc2UsXG4mIzQzO307XG4mIzQzO1xuIHN0YXRpYyBpbnQgaW9fcmVnaW9uX21tYXAoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG4gXHRcdFx0ICBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXG4gXHRcdFx0ICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHQgIHVuc2lnbmVkIG1heF9wYWdlcylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gbWluKG1yLVx1MDAzZW5yX3BhZ2VzLCBtYXhfcGFnZXMpO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHR2bV9mbGFnc19zZXQodm1hLCBWTV9ET05URVhQQU5EKTtcbi1cdHJldHVybiB2bV9pbnNlcnRfcGFnZXModm1hLCB2bWEtXHUwMDNldm1fc3RhcnQsIG1yLVx1MDAzZXBhZ2VzLCBcdTAwMjZucl9wYWdlcyk7XG4mIzQzO1x0cmV0ID0gdm1faW5zZXJ0X3BhZ2VzKHZtYSwgdm1hLVx1MDAzZXZtX3N0YXJ0LCBtci1cdTAwM2VwYWdlcywgXHUwMDI2bnJfcGFnZXMpO1xuJiM0MztcdGlmICghcmV0IFx1MDAyNlx1MDAyNiBtci1cdTAwM2VhY2NvdW50KSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogQWNjb3VudGluZyBkZWxpYmVyYXRlbHkgcmVtYWlucyBhdCByZWdpb24gZ3JhbnVsYXJpdHkgd2hlblxuJiM0MztcdFx0ICogdGhpcyBWTUEgbWFwcyBvbmx5IHBhcnQgb2YgdGhlIHJlZ2lvbi5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0dm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IG1yLVx1MDAzZWFjY291bnQ7XG4mIzQzO1x0XHR2bWEtXHUwMDNldm1fb3BzID0gXHUwMDI2aW9fcmVnaW9uX3ZtX29wcztcbiYjNDM7XHRcdHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlb3Blbih2bWEpO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBfX2NvbGQgaW50IGlvX3VyaW5nX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuQEAgLTM3OSw2ICYjNDM7NDcxLDggQEAgc3RhdGljIHZvaWQgaW9fdXJpbmdfbm9tbXVfdm1fY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gXG4gXHRmb3IgKGluZGV4ID0gdm1hLVx1MDAzZXZtX3N0YXJ0OyBpbmRleCBcdTAwM2Mgdm1hLVx1MDAzZXZtX2VuZDsgaW5kZXggJiM0Mzs9IFBBR0VfU0laRSlcbiBcdFx0cHV0X3BhZ2UodmlydF90b19wYWdlKCh2b2lkICopIGluZGV4KSk7XG4mIzQzO1xuJiM0MztcdGlvX3JlZ2lvbl9hY2NvdW50X3B1dCh2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhKTtcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBpb191cmluZ19ub21tdV92bV9vcHMgPSB7XG5AQCAtNDExLDYgJiM0Mzs1MDUsOCBAQCBpbnQgaW9fdXJpbmdfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyByZWdpb24tXHUwMDNlbnJfcGFnZXM7IGkmIzQzOyYjNDM7KVxuIFx0XHRnZXRfcGFnZShyZWdpb24tXHUwMDNlcGFnZXNbaV0pO1xuIFxuJiM0MztcdHZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGEgPSByZWdpb24tXHUwMDNlYWNjb3VudDtcbiYjNDM7XHRpb19yZWdpb25fYWNjb3VudF9nZXQocmVnaW9uLVx1MDAzZWFjY291bnQpO1xuIFx0dm1hLVx1MDAzZXZtX29wcyA9IFx1MDAyNmlvX3VyaW5nX25vbW11X3ZtX29wcztcbiBcdHJldHVybiAwO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzoyOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19jcmVhdGVfcmVnaW9uJiMzNDssCiAgICAmIzM0O2lvX2ZyZWVfcmVnaW9uJiMzNDssCiAgICAmIzM0O2lvX3VyaW5nX21tYXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGFjY291bnRpbmcgYW5kIG1hcHBpbmcgbG9naWMgZm9yIGlvX3VyaW5nIHJlZ2lvbnMsIGludHJvZHVjaW5nIGBzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnRgIGFuZCBjaGFuZ2luZyBob3cgbWVtb3J5IGlzIGFjY291bnRlZCBhbmQgZnJlZWQuIFRoaXMgYWZmZWN0cyBgaW9fY3JlYXRlX3JlZ2lvbmAsIGBpb19mcmVlX3JlZ2lvbmAsIGFuZCBgaW9fdXJpbmdfbW1hcGAuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzNTEyOTQ3YzBkMzYwMjRlZmQ1MTE5ZmViNTk0MWQ1YWEwZGZkNDMwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMTYgMDc6Mjk6MzMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmgKaW5kZXggODcxNTFhNWI2MmMxYi4uNmZlYjdlZTM0NDBmZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaW9fdXJpbmdfdHlwZXMuaApAQCAtOTQsMTEgJiM0Mzs5NCwxNCBAQCBzdHJ1Y3QgaW9faGFzaF90YWJsZSB7CiAJdW5zaWduZWQJCWhhc2hfYml0czsKIH07CiAKJiM0MztzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnQ7CiYjNDM7CiBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiB7CiAJc3RydWN0IHBhZ2UJCSoqcGFnZXM7CiAJdm9pZAkJCSpwdHI7CiAJdW5zaWduZWQJCW5yX3BhZ2VzOwogCXVuc2lnbmVkCQlmbGFnczsKJiM0MzsJc3RydWN0IGlvX3JlZ2lvbl9hY2NvdW50CSphY2NvdW50OwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2lvX3VyaW5nL21lbW1hcC5jIGIvaW9fdXJpbmcvbWVtbWFwLmMKaW5kZXggMjNlOGE4NTExMWJjYS4uY2EyOGE5NDI5YzE2OCAxMDA2NDQKLS0tIGEvaW9fdXJpbmcvbWVtbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvbWVtbWFwLmMKQEAgLTQsNiAmIzQzOzQsOCBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2Vycm5vLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW0uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tbWFuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3JlZmNvdW50LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL3VzZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdm1hbGxvYy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lvX3VyaW5nLmgmZ3Q7CkBAIC04OCw2ICYjNDM7OTAsNTIgQEAgZW51bSB7CiAJSU9fUkVHSU9OX0ZfU0lOR0xFX1JFRgkJCT0gNCwKIH07CiAKJiM0MztzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnQgewomIzQzOwlyZWZjb3VudF90IHJlZnM7CiYjNDM7CXN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlcjsKJiM0MzsJdW5zaWduZWQgbG9uZyBucl9wYWdlczsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnQgKgomIzQzO2lvX3JlZ2lvbl9hY2NvdW50X2FsbG9jKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpb19yZWdpb25fYWNjb3VudCAqYWNjb3VudDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCF1c2VyKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CWFjY291bnQgPSBrbWFsbG9jX29iaigqYWNjb3VudCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKJiM0MzsJaWYgKCFhY2NvdW50KQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CiYjNDM7CXJldCA9IF9faW9fYWNjb3VudF9tZW0odXNlciwgbnJfcGFnZXMpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlrZnJlZShhY2NvdW50KTsKJiM0MzsJCXJldHVybiBFUlJfUFRSKHJldCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmVmY291bnRfc2V0KCZhbXA7YWNjb3VudC0mZ3Q7cmVmcywgMSk7CiYjNDM7CWFjY291bnQtJmd0O3VzZXIgPSBnZXRfdWlkKHVzZXIpOwomIzQzOwlhY2NvdW50LSZndDtucl9wYWdlcyA9IG5yX3BhZ2VzOwomIzQzOwlyZXR1cm4gYWNjb3VudDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaW9fcmVnaW9uX2FjY291bnRfZ2V0KHN0cnVjdCBpb19yZWdpb25fYWNjb3VudCAqYWNjb3VudCkKJiM0Mzt7CiYjNDM7CWlmIChhY2NvdW50KQomIzQzOwkJcmVmY291bnRfaW5jKCZhbXA7YWNjb3VudC0mZ3Q7cmVmcyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlvX3JlZ2lvbl9hY2NvdW50X3B1dChzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnQgKmFjY291bnQpCiYjNDM7ewomIzQzOwlpZiAoYWNjb3VudCAmYW1wOyZhbXA7IHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO2FjY291bnQtJmd0O3JlZnMpKSB7CiYjNDM7CQlfX2lvX3VuYWNjb3VudF9tZW0oYWNjb3VudC0mZ3Q7dXNlciwgYWNjb3VudC0mZ3Q7bnJfcGFnZXMpOwomIzQzOwkJZnJlZV91aWQoYWNjb3VudC0mZ3Q7dXNlcik7CiYjNDM7CQlrZnJlZShhY2NvdW50KTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHZvaWQgaW9fZnJlZV9yZWdpb24oc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyLCBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIpCiB7CiAJaWYgKG1yLSZndDtwYWdlcykgewpAQCAtMTA1LDggJiM0MzsxNTMsMTIgQEAgdm9pZCBpb19mcmVlX3JlZ2lvbihzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIsIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcikKIAl9CiAJaWYgKChtci0mZ3Q7ZmxhZ3MgJmFtcDsgSU9fUkVHSU9OX0ZfVk1BUCkgJmFtcDsmYW1wOyBtci0mZ3Q7cHRyKQogCQl2dW5tYXAobXItJmd0O3B0cik7Ci0JaWYgKG1yLSZndDtucl9wYWdlcyAmYW1wOyZhbXA7IHVzZXIpCiYjNDM7CWlmIChtci0mZ3Q7YWNjb3VudCkgewomIzQzOwkJV0FSTl9PTl9PTkNFKG1yLSZndDthY2NvdW50LSZndDt1c2VyICE9IHVzZXIpOwomIzQzOwkJaW9fcmVnaW9uX2FjY291bnRfcHV0KG1yLSZndDthY2NvdW50KTsKJiM0MzsJfSBlbHNlIGlmIChtci0mZ3Q7bnJfcGFnZXMgJmFtcDsmYW1wOyB1c2VyKSB7CiAJCV9faW9fdW5hY2NvdW50X21lbSh1c2VyLCBtci0mZ3Q7bnJfcGFnZXMpOwomIzQzOwl9CiAKIAltZW1zZXQobXIsIDAsIHNpemVvZigqbXIpKTsKIH0KQEAgLTE4OCw3ICYjNDM7MjQwLDggQEAgaW50IGlvX2NyZWF0ZV9yZWdpb24oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptciwKIAlpbnQgbnJfcGFnZXMsIHJldDsKIAl1NjQgZW5kOwogCi0JaWYgKFdBUk5fT05fT05DRShtci0mZ3Q7cGFnZXMgfHwgbXItJmd0O3B0ciB8fCBtci0mZ3Q7bnJfcGFnZXMpKQomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKG1yLSZndDtwYWdlcyB8fCBtci0mZ3Q7cHRyIHx8IG1yLSZndDtucl9wYWdlcyB8fAomIzQzOwkJCSBtci0mZ3Q7YWNjb3VudCkpCiAJCXJldHVybiAtRUZBVUxUOwogCWlmIChtZW1jaHJfaW52KCZhbXA7cmVnLSZndDtfX3Jlc3YsIDAsIHNpemVvZihyZWctJmd0O19fcmVzdikpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTIwNywxMCAmIzQzOzI2MCwyMyBAQCBpbnQgaW9fY3JlYXRlX3JlZ2lvbihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX21hcHBlZF9yZWdpb24gKm1yLAogCQlyZXR1cm4gLUVPVkVSRkxPVzsKIAogCW5yX3BhZ2VzID0gcmVnLSZndDtzaXplICZndDsmZ3Q7IFBBR0VfU0hJRlQ7Ci0JaWYgKGN0eC0mZ3Q7dXNlcikgewotCQlyZXQgPSBfX2lvX2FjY291bnRfbWVtKGN0eC0mZ3Q7dXNlciwgbnJfcGFnZXMpOwotCQlpZiAocmV0KQomIzQzOwlpZiAocmVnLSZndDtmbGFncyAmYW1wOyBJT1JJTkdfTUVNX1JFR0lPTl9UWVBFX1VTRVIpIHsKJiM0MzsJCWlmIChjdHgtJmd0O3VzZXIpIHsKJiM0MzsJCQlyZXQgPSBfX2lvX2FjY291bnRfbWVtKGN0eC0mZ3Q7dXNlciwgbnJfcGFnZXMpOwomIzQzOwkJCWlmIChyZXQpCiYjNDM7CQkJCXJldHVybiByZXQ7CiYjNDM7CQl9CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKgomIzQzOwkJICogS2VybmVsLWFsbG9jYXRlZCBwYWdlcyBjYW4gb3V0bGl2ZSB0aGVpciBhY3RpdmUgcmVnaW9uIHRocm91Z2gKJiM0MzsJCSAqIHVzZXJzcGFjZSBtYXBwaW5ncy4KJiM0MzsJCSAqLwomIzQzOwkJbXItJmd0O2FjY291bnQgPSBpb19yZWdpb25fYWNjb3VudF9hbGxvYyhjdHgtJmd0O3VzZXIsIG5yX3BhZ2VzKTsKJiM0MzsJCWlmIChJU19FUlIobXItJmd0O2FjY291bnQpKSB7CiYjNDM7CQkJcmV0ID0gUFRSX0VSUihtci0mZ3Q7YWNjb3VudCk7CiYjNDM7CQkJbXItJmd0O2FjY291bnQgPSBOVUxMOwogCQkJcmV0dXJuIHJldDsKJiM0MzsJCX0KIAl9CiAJbXItJmd0O25yX3BhZ2VzID0gbnJfcGFnZXM7CiAKQEAgLTI4MSwxNSAmIzQzOzM0Nyw0MSBAQCBzdGF0aWMgdm9pZCAqaW9fdXJpbmdfdmFsaWRhdGVfbW1hcF9yZXF1ZXN0KHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3QgcGdvZmYpCiAKICNpZmRlZiBDT05GSUdfTU1VCiAKJiM0MztzdGF0aWMgdm9pZCBpb19yZWdpb25fdm1fb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKJiM0Mzt7CiYjNDM7CWlvX3JlZ2lvbl9hY2NvdW50X2dldCh2bWEtJmd0O3ZtX3ByaXZhdGVfZGF0YSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlvX3JlZ2lvbl92bV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKJiM0Mzt7CiYjNDM7CWlvX3JlZ2lvbl9hY2NvdW50X3B1dCh2bWEtJmd0O3ZtX3ByaXZhdGVfZGF0YSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaW9fcmVnaW9uX3ZtX29wcyA9IHsKJiM0MzsJLm9wZW4gPSBpb19yZWdpb25fdm1fb3BlbiwKJiM0MzsJLmNsb3NlID0gaW9fcmVnaW9uX3ZtX2Nsb3NlLAomIzQzO307CiYjNDM7CiBzdGF0aWMgaW50IGlvX3JlZ2lvbl9tbWFwKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LAogCQkJICBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsCiAJCQkgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJICB1bnNpZ25lZCBtYXhfcGFnZXMpCiB7CiAJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IG1pbihtci0mZ3Q7bnJfcGFnZXMsIG1heF9wYWdlcyk7CiYjNDM7CWludCByZXQ7CiAKIAl2bV9mbGFnc19zZXQodm1hLCBWTV9ET05URVhQQU5EKTsKLQlyZXR1cm4gdm1faW5zZXJ0X3BhZ2VzKHZtYSwgdm1hLSZndDt2bV9zdGFydCwgbXItJmd0O3BhZ2VzLCAmYW1wO25yX3BhZ2VzKTsKJiM0MzsJcmV0ID0gdm1faW5zZXJ0X3BhZ2VzKHZtYSwgdm1hLSZndDt2bV9zdGFydCwgbXItJmd0O3BhZ2VzLCAmYW1wO25yX3BhZ2VzKTsKJiM0MzsJaWYgKCFyZXQgJmFtcDsmYW1wOyBtci0mZ3Q7YWNjb3VudCkgewomIzQzOwkJLyoKJiM0MzsJCSAqIEFjY291bnRpbmcgZGVsaWJlcmF0ZWx5IHJlbWFpbnMgYXQgcmVnaW9uIGdyYW51bGFyaXR5IHdoZW4KJiM0MzsJCSAqIHRoaXMgVk1BIG1hcHMgb25seSBwYXJ0IG9mIHRoZSByZWdpb24uCiYjNDM7CQkgKi8KJiM0MzsJCXZtYS0mZ3Q7dm1fcHJpdmF0ZV9kYXRhID0gbXItJmd0O2FjY291bnQ7CiYjNDM7CQl2bWEtJmd0O3ZtX29wcyA9ICZhbXA7aW9fcmVnaW9uX3ZtX29wczsKJiM0MzsJCXZtYS0mZ3Q7dm1fb3BzLSZndDtvcGVuKHZtYSk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogX19jb2xkIGludCBpb191cmluZ19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKQEAgLTM3OSw2ICYjNDM7NDcxLDggQEAgc3RhdGljIHZvaWQgaW9fdXJpbmdfbm9tbXVfdm1fY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiAKIAlmb3IgKGluZGV4ID0gdm1hLSZndDt2bV9zdGFydDsgaW5kZXggJmx0OyB2bWEtJmd0O3ZtX2VuZDsgaW5kZXggJiM0Mzs9IFBBR0VfU0laRSkKIAkJcHV0X3BhZ2UodmlydF90b19wYWdlKCh2b2lkICopIGluZGV4KSk7CiYjNDM7CiYjNDM7CWlvX3JlZ2lvbl9hY2NvdW50X3B1dCh2bWEtJmd0O3ZtX3ByaXZhdGVfZGF0YSk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaW9fdXJpbmdfbm9tbXVfdm1fb3BzID0gewpAQCAtNDExLDYgJiM0Mzs1MDUsOCBAQCBpbnQgaW9fdXJpbmdfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiAJZm9yIChpID0gMDsgaSAmbHQ7IHJlZ2lvbi0mZ3Q7bnJfcGFnZXM7IGkmIzQzOyYjNDM7KQogCQlnZXRfcGFnZShyZWdpb24tJmd0O3BhZ2VzW2ldKTsKIAomIzQzOwl2bWEtJmd0O3ZtX3ByaXZhdGVfZGF0YSA9IHJlZ2lvbi0mZ3Q7YWNjb3VudDsKJiM0MzsJaW9fcmVnaW9uX2FjY291bnRfZ2V0KHJlZ2lvbi0mZ3Q7YWNjb3VudCk7CiAJdm1hLSZndDt2bV9vcHMgPSAmYW1wO2lvX3VyaW5nX25vbW11X3ZtX29wczsKIAlyZXR1cm4gMDsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDc6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA0MAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDI0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBpb191cmluZyBNZW1vcnkgQWNjb3VudGluZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgbWVtb3J5IGFjY291bnRpbmcgd2l0aGluIGBpb191cmluZy9tZW1tYXAuY2AgYW5kIGBpbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmhgLiBJdCBzZWVtcyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhpcyBgc3RydWN0IGlvX3JlZ2lvbl9hY2NvdW50YCBhbmQgYSByZWZhY3RvciBvZiBob3cgYGlvX21hcHBlZF9yZWdpb25gIG1lbW9yeSBpcyB0cmFja2VkLiBUaGUgcGF0Y2ggaXMgYWRkaW5nIGBpb19yZWdpb25fYWNjb3VudF9hbGxvY2AsIGBpb19yZWdpb25fYWNjb3VudF9nZXRgLCBhbmQgYGlvX3JlZ2lvbl9hY2NvdW50X3B1dGAgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBhYm91dCByZWZlcmVuY2UgY291bnRpbmcgb3IgYSBzaW1pbGFyIG1lY2hhbmlzbSBmb3IgbWFuYWdpbmcgdGhlIGxpZmV0aW1lIG9mIHRoZXNlIHJlZ2lvbnMuIEl0JiMzOTtzIGFsc28gbW9kaWZ5aW5nIGBpb19mcmVlX3JlZ2lvbmAsIGBpb19jcmVhdGVfcmVnaW9uYCwgYW5kIGJvdGggYGlvX3JlZ2lvbl9tbWFwYCBhbmQgdGhlIGBpb191cmluZ19tbWFwYCBmb3Igbm9tbXUgc3lzdGVtcy4KClRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGl0IGdvZXMgcmlnaHQgdG8gdGhlIGhlYXJ0IG9mIGhvdyBpb191cmluZyBtYW5hZ2VzIG1lbW9yeSBtYXBwaW5nLiBHaXZlbiB0aGF0LCBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBjb2RlIGFuZCBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzLiBGcm9tIHdoYXQgSSBzZWUgbm93LCBgaW9fY3JlYXRlX3JlZ2lvbmAsIGBpb19mcmVlX3JlZ2lvbmAsIGFuZCBgaW9fdXJpbmdfbW1hcGAgYXJlIGdvaW5nIHRvIGJlIG15IHByaW1hcnkgdGFyZ2V0cy4KCkJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB3cml0aW5nIHRlc3QgY2FzZXMsIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIE9idmlvdXNseSwgYENPTkZJR19JT19VUklOR2AgaXMgdGhlIGJpZyBvbmUsIGJ1dCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBlaXRoZXIgYGlvX3VyaW5nL0tjb25maWdgIG9yIHBvc3NpYmx5IGV2ZW4gYGluaXQvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1pZ2h0IGFmZmVjdCB0aGUgYmVoYXZpb3Igb2YgdGhlc2UgZnVuY3Rpb25zIG9yIGludHJvZHVjZSBlZGdlIGNhc2VzIHRoYXQgSSBuZWVkIHRvIGFjY291bnQgZm9yLiBJIG5lZWQgdG8gYmUgc3VyZSBJJiMzOTttIHRlc3RpbmcgdGhlIGNvZGUgYXMgaXQgd291bGQgYmUgY29uZmlndXJlZCBpbiB0aGUgcmVhbCB3b3JsZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU9fVVJJTkcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE5MTA9Y29uZmlnIEFJT1xuLS1cbmluaXQvS2NvbmZpZy0xOTE3LVxuaW5pdC9LY29uZmlnOjE5MTg6Y29uZmlnIElPX1VSSU5HXG5pbml0L0tjb25maWctMTkxOS1cdGJvb2wgXCYjMzQ7RW5hYmxlIElPIHVyaW5nIHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG4tLVxuaW5pdC9LY29uZmlnPTE5Mjc9Y29uZmlnIEdDT1ZfUFJPRklMRV9VUklOR1xuLS1cbmluaXQvS2NvbmZpZy0xOTM5LVxuaW5pdC9LY29uZmlnOjE5NDA6Y29uZmlnIElPX1VSSU5HX01PQ0tfRklMRVxuaW5pdC9LY29uZmlnLTE5NDEtXHR0cmlzdGF0ZSBcJiMzNDtFbmFibGUgaW9fdXJpbmcgbW9jayBmaWxlcyAoRXhwZXJpbWVudGFsKVwmIzM0OyBpZiBFWFBFUlRcbi0tXG5pb191cmluZy9LY29uZmlnLTUtXG5pb191cmluZy9LY29uZmlnOjY6Y29uZmlnIElPX1VSSU5HX1pDUlhcbmlvX3VyaW5nL0tjb25maWctNy1cdGRlZl9ib29sIHlcbi0tXG5pb191cmluZy9LY29uZmlnLTEyLVxuaW9fdXJpbmcvS2NvbmZpZzoxMzpjb25maWcgSU9fVVJJTkdfQlBGXG5pb191cmluZy9LY29uZmlnLTE0LVx0ZGVmX2Jvb2wgeVxuLS1cbmlvX3VyaW5nL0tjb25maWctMTctXG5pb191cmluZy9LY29uZmlnOjE4OmNvbmZpZyBJT19VUklOR19CUEZfT1BTXG5pb191cmluZy9LY29uZmlnLTE5LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDA3OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5OTkKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBJT19VUklORyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYW4gYElPX1VSSU5HYCBjb25maWd1cmF0aW9uIGhlcmUuIFJpZ2h0LiBOb3csIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IG1lbW9yeSByZWdpb25zIGFyZSBtYW5hZ2VkIHdpdGhpbiB0aGlzIGNvbnRleHQuIE15IHByaW1hcnkgY29uY2VybiBpcyB3aXRoIHRoZSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gc3RyYXRlZ2llcyBmb3IgSS9PIGJ1ZmZlcnMuIFNvLCBJIG5lZWQgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIHJvbGVzIG9mIGBpb19jcmVhdGVfcmVnaW9uYCBhbmQgYGlvX2ZyZWVfcmVnaW9uYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjZW50cmFsIHRvIHRoZSBpbnRlZ3JpdHkgYW5kIHBlcmZvcm1hbmNlIG9mIHRoZSBJL08gc3lzdGVtLCBhbmQgSSBoYXZlIHRvIGZ1bGx5IGdyYXNwIHRoZWlyIGludGVyYWN0aW9uLiBJIG5lZWQgdG8gdHJhY2UgdGhlaXIgaW1wbGVtZW50YXRpb24sIHVuZGVyc3RhbmQgYW55IHBvdGVudGlhbCBvdmVyaGVhZCB0aGV5IGludHJvZHVjZSwgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgdW5kZXJseWluZyBtZW1vcnkgbWFuYWdlbWVudCBtZWNoYW5pc21zLiBFc3NlbnRpYWxseSwgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSByZWdpb24gY3JlYXRpb24gYW5kIGRlc3RydWN0aW9uIGFyZSByb2J1c3QgYW5kIG9wdGltYWxseSBkZXNpZ25lZCwgYW5kIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGRvbiYjMzk7dCBiZWNvbWUgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDc6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fY3JlYXRlX3JlZ2lvbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9pb191cmluZy5jPTI3MjY9c3RhdGljIF9fY29sZCBpbnQgaW9fYWxsb2NhdGVfc2NxX3VyaW5ncyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbi0tXG5pb191cmluZy9pb191cmluZy5jLTI3NDQtXHR9XG5pb191cmluZy9pb191cmluZy5jOjI3NDU6XHRyZXQgPSBpb19jcmVhdGVfcmVnaW9uKGN0eCwgXHUwMDI2Y3R4LVx1MDAzZXJpbmdfcmVnaW9uLCBcdTAwMjZyZCwgSU9SSU5HX09GRl9DUV9SSU5HKTtcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjc0Ni1cdGlmIChyZXQpXG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yNzU4LVx0fVxuaW9fdXJpbmcvaW9fdXJpbmcuYzoyNzU5Olx0cmV0ID0gaW9fY3JlYXRlX3JlZ2lvbihjdHgsIFx1MDAyNmN0eC1cdTAwM2VzcV9yZWdpb24sIFx1MDAyNnJkLCBJT1JJTkdfT0ZGX1NRRVMpO1xuaW9fdXJpbmcvaW9fdXJpbmcuYy0yNzYwLVx0aWYgKHJldCkge1xuLS1cbmlvX3VyaW5nL2tidWYuYz02Mjk9aW50IGlvX3JlZ2lzdGVyX3BidWZfcmluZyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZylcbi0tXG5pb191cmluZy9rYnVmLmMtNjc3LVx0fVxuaW9fdXJpbmcva2J1Zi5jOjY3ODpcdHJldCA9IGlvX2NyZWF0ZV9yZWdpb24oY3R4LCBcdTAwMjZibC1cdTAwM2VyZWdpb24sIFx1MDAyNnJkLCBtbWFwX29mZnNldCk7XG5pb191cmluZy9rYnVmLmMtNjc5LVx0aWYgKHJldClcbi0tXG5pb191cmluZy9tZW1tYXAuYz0yMDQ9c3RhdGljIGludCBpb19yZWdpb25fYWxsb2NhdGVfcGFnZXMoc3RydWN0IGlvX21hcHBlZF9yZWdpb24gKm1yLFxuLS1cbmlvX3VyaW5nL21lbW1hcC5jLTIzNS1cbmlvX3VyaW5nL21lbW1hcC5jOjIzNjppbnQgaW9fY3JlYXRlX3JlZ2lvbihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX21hcHBlZF9yZWdpb24gKm1yLFxuaW9fdXJpbmcvbWVtbWFwLmMtMjM3LVx0XHQgICAgIHN0cnVjdCBpb191cmluZ19yZWdpb25fZGVzYyAqcmVnLFxuLS1cbmlvX3VyaW5nL21lbW1hcC5oPTIwPXZvaWQgaW9fZnJlZV9yZWdpb24oc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyLCBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIpO1xuaW9fdXJpbmcvbWVtbWFwLmg6MjE6aW50IGlvX2NyZWF0ZV9yZWdpb24oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcbmlvX3VyaW5nL21lbW1hcC5oLTIyLVx0XHQgICAgIHN0cnVjdCBpb191cmluZ19yZWdpb25fZGVzYyAqcmVnLFxuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmM9NDk4PXN0YXRpYyBpbnQgaW9fcmVnaXN0ZXJfcmVzaXplX3JpbmdzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnKVxuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNTMxLVx0fVxuaW9fdXJpbmcvcmVnaXN0ZXIuYzo1MzI6XHRyZXQgPSBpb19jcmVhdGVfcmVnaW9uKGN0eCwgXHUwMDI2bi5yaW5nX3JlZ2lvbiwgXHUwMDI2cmQsIElPUklOR19PRkZfQ1FfUklORyk7XG5pb191cmluZy9yZWdpc3Rlci5jLTUzMy1cdGlmIChyZXQpXG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYy01NjEtXHR9XG5pb191cmluZy9yZWdpc3Rlci5jOjU2MjpcdHJldCA9IGlvX2NyZWF0ZV9yZWdpb24oY3R4LCBcdTAwMjZuLnNxX3JlZ2lvbiwgXHUwMDI2cmQsIElPUklOR19PRkZfU1FFUyk7XG5pb191cmluZy9yZWdpc3Rlci5jLTU2My1cdGlmIChyZXQpIHtcbi0tXG5pb191cmluZy9yZWdpc3Rlci5jPTcwMz1zdGF0aWMgaW50IGlvX3JlZ2lzdGVyX21lbV9yZWdpb24oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICp1YXJnKVxuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNzMyLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYzo3MzM6XHRyZXQgPSBpb19jcmVhdGVfcmVnaW9uKGN0eCwgXHUwMDI2cmVnaW9uLCBcdTAwMjZyZCwgSU9SSU5HX01BUF9PRkZfUEFSQU1fUkVHSU9OKTtcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNzM0LVx0aWYgKHJldClcbi0tXG5pb191cmluZy96Y3J4LmM9MzgwPXN0YXRpYyBpbnQgaW9fYWxsb2NhdGVfcmJ1Zl9yaW5nKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL3pjcnguYy0zOTktXG5pb191cmluZy96Y3J4LmM6NDAwOlx0cmV0ID0gaW9fY3JlYXRlX3JlZ2lvbihjdHgsIFx1MDAyNmlmcS1cdTAwM2VycV9yZWdpb24sIHJkLCBtbWFwX29mZnNldCk7XG5pb191cmluZy96Y3J4LmMtNDAxLVx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjI1CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBmdW5jdGlvbnMuCgoqKkluaXRpYWwgQ29uc2lkZXJhdGlvbnMgZm9yIE1lbW9yeSBNYW5hZ2VtZW50KioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgZGl2aW5nIGludG8gbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoaXMgc3lzdGVtLCBhbmQgbXkgaW1tZWRpYXRlIGZvY3VzIGxhbmRzIG9uIHRoZXNlIHNwZWNpZmljIGZ1bmN0aW9uczogYGlvX2NyZWF0ZV9yZWdpb25gLCBgaW9fZnJlZV9yZWdpb25gLCBgaW9fdXJpbmdfbW1hcGAsIGBpb19yZWdpc3Rlcl9tZW1fcmVnaW9uYCwgYGlvX3JlZ2lzdGVyX3BidWZfcmluZ2AsIGFuZCBgaW9fcmVnaXN0ZXJfcmVzaXplX3JpbmdzYC4gSXQgc2VlbXMgdGhlc2UgYXJlIHRoZSBjb3JlIGJ1aWxkaW5nIGJsb2NrcyBmb3IgaG93IG1lbW9yeSByZWdpb25zIGFyZSBjcmVhdGVkLCBmcmVlZCwgbWFwcGVkIHdpdGggaW9fdXJpbmcsIGFuZCByZWdpc3RlcmVkIGZvciB2YXJpb3VzIHB1cnBvc2VzIOKAkyBwcm9iYWJseSB0byBzZXJ2ZSB0aGUgaW9fdXJpbmcgb3BlcmF0aW9ucy4gSSYjMzk7bSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgd29yayB0b2dldGhlciwgYnV0IGdpdmVuIHRoZWlyIG5hbWVzLCBJJiMzOTttIGV4cGVjdGluZyBzb21lIGtpbmQgb2YgbGF5ZXJlZCBhcHByb2FjaCBoZXJlIGZvciBib3RoIHRoZSBtZW1vcnkgYW5kIHJpbmdzLgoKTXkgZ3V0IHRlbGxzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB1bnBpY2sgdGhlIGFyY2hpdGVjdHVyZSBpcyB0byBoYXZlIGEgbG9vayBhdCBgaW9fZnJlZV9yZWdpb25gLiBUaGF0JiMzOTtsbCBiZSBhIHVzZWZ1bCBwbGFjZSB0byBzdGFydCBiZWNhdXNlIGl0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZSByZXNvdXJjZXMgYXJlIG1hbmFnZWQgZnJvbSBiZWdpbm5pbmcgdG8gZW5kLiBLbm93aW5nIGhvdyBtZW1vcnkgaXMgZGVhbGxvY2F0ZWQgaXMgb2Z0ZW4ga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGFsbG9jYXRpb24gcHJvY2VzcyBhbmQgaWRlbnRpZnlpbmcgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciBpbmVmZmljaWVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19mcmVlX3JlZ2lvbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9pb191cmluZy5jPTIwNzg9c3RhdGljIHZvaWQgaW9fcmluZ3NfZnJlZShzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eClcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjA3OS17XG5pb191cmluZy9pb191cmluZy5jOjIwODA6XHRpb19mcmVlX3JlZ2lvbihjdHgtXHUwMDNldXNlciwgXHUwMDI2Y3R4LVx1MDAzZXNxX3JlZ2lvbik7XG5pb191cmluZy9pb191cmluZy5jOjIwODE6XHRpb19mcmVlX3JlZ2lvbihjdHgtXHUwMDNldXNlciwgXHUwMDI2Y3R4LVx1MDAzZXJpbmdfcmVnaW9uKTtcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjA4Mi1cdGN0eC1cdTAwM2VyaW5ncyA9IE5VTEw7XG4tLVxuaW9fdXJpbmcvaW9fdXJpbmcuYz0yMTYzPXN0YXRpYyBfX2NvbGQgdm9pZCBpb19yaW5nX2N0eF9mcmVlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KVxuLS1cbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjE3NS1cdGlvX2Rlc3Ryb3lfYnVmZmVycyhjdHgpO1xuaW9fdXJpbmcvaW9fdXJpbmcuYzoyMTc2Olx0aW9fZnJlZV9yZWdpb24oY3R4LVx1MDAzZXVzZXIsIFx1MDAyNmN0eC1cdTAwM2VwYXJhbV9yZWdpb24pO1xuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMTc3LVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmN0eC1cdTAwM2V1cmluZ19sb2NrKTtcbi0tXG5pb191cmluZy9rYnVmLmM9NDU4PXN0YXRpYyB2b2lkIGlvX3B1dF9ibChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX2J1ZmZlcl9saXN0ICpibClcbi0tXG5pb191cmluZy9rYnVmLmMtNDYwLVx0aWYgKGJsLVx1MDAzZWZsYWdzIFx1MDAyNiBJT0JMX0JVRl9SSU5HKVxuaW9fdXJpbmcva2J1Zi5jOjQ2MTpcdFx0aW9fZnJlZV9yZWdpb24oY3R4LVx1MDAzZXVzZXIsIFx1MDAyNmJsLVx1MDAzZXJlZ2lvbik7XG5pb191cmluZy9rYnVmLmMtNDYyLVx0ZWxzZVxuLS1cbmlvX3VyaW5nL2tidWYuYz02Mjk9aW50IGlvX3JlZ2lzdGVyX3BidWZfcmluZyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZylcbi0tXG5pb191cmluZy9rYnVmLmMtNzEwLWZhaWw6XG5pb191cmluZy9rYnVmLmM6NzExOlx0aW9fZnJlZV9yZWdpb24oY3R4LVx1MDAzZXVzZXIsIFx1MDAyNmJsLVx1MDAzZXJlZ2lvbik7XG5pb191cmluZy9rYnVmLmMtNzEyLVx0a2ZyZWUoYmwpO1xuLS1cbmlvX3VyaW5nL21lbW1hcC5jPTEzMD1zdGF0aWMgdm9pZCBpb19yZWdpb25fYWNjb3VudF9wdXQoc3RydWN0IGlvX3JlZ2lvbl9hY2NvdW50ICphY2NvdW50KVxuLS1cbmlvX3VyaW5nL21lbW1hcC5jLTEzOC1cbmlvX3VyaW5nL21lbW1hcC5jOjEzOTp2b2lkIGlvX2ZyZWVfcmVnaW9uKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlciwgc3RydWN0IGlvX21hcHBlZF9yZWdpb24gKm1yKVxuaW9fdXJpbmcvbWVtbWFwLmMtMTQwLXtcbi0tXG5pb191cmluZy9tZW1tYXAuYz0yMzY9aW50IGlvX2NyZWF0ZV9yZWdpb24oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcbi0tXG5pb191cmluZy9tZW1tYXAuYy0yOTQtb3V0X2ZyZWU6XG5pb191cmluZy9tZW1tYXAuYzoyOTU6XHRpb19mcmVlX3JlZ2lvbihjdHgtXHUwMDNldXNlciwgbXIpO1xuaW9fdXJpbmcvbWVtbWFwLmMtMjk2LVx0cmV0dXJuIHJldDtcbi0tXG5pb191cmluZy9tZW1tYXAuYz00ODI9aW50IGlvX3VyaW5nX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmlvX3VyaW5nL21lbW1hcC5jLTUwMC1cdC8qXG5pb191cmluZy9tZW1tYXAuYzo1MDE6XHQgKiBQaW4gdGhlIHBhZ2VzIHNvIGlvX2ZyZWVfcmVnaW9uKCkmIzM5O3MgcmVsZWFzZV9wYWdlcygpIGRvZXMgbm90XG5pb191cmluZy9tZW1tYXAuYy01MDItXHQgKiBkcm9wIHRoZSBsYXN0IHJlZmVyZW5jZSB3aGlsZSB0aGlzIFZNQSBleGlzdHMuIGRlbGV0ZV92bWEoKVxuLS1cbmlvX3VyaW5nL21lbW1hcC5oPTE4PWludCBpb191cmluZ19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG5pb191cmluZy9tZW1tYXAuaC0xOS1cbmlvX3VyaW5nL21lbW1hcC5oOjIwOnZvaWQgaW9fZnJlZV9yZWdpb24oc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyLCBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIpO1xuaW9fdXJpbmcvbWVtbWFwLmgtMjEtaW50IGlvX2NyZWF0ZV9yZWdpb24oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcbi0tXG5pb191cmluZy9yZWdpc3Rlci5jPTQ4MD1zdGF0aWMgdm9pZCBpb19yZWdpc3Rlcl9mcmVlX3JpbmdzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNDgyLXtcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6NDgzOlx0aW9fZnJlZV9yZWdpb24oY3R4LVx1MDAzZXVzZXIsIFx1MDAyNnItXHUwMDNlc3FfcmVnaW9uKTtcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6NDg0Olx0aW9fZnJlZV9yZWdpb24oY3R4LVx1MDAzZXVzZXIsIFx1MDAyNnItXHUwMDNlcmluZ19yZWdpb24pO1xuaW9fdXJpbmcvcmVnaXN0ZXIuYy00ODUtfVxuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmM9NzAzPXN0YXRpYyBpbnQgaW9fcmVnaXN0ZXJfbWVtX3JlZ2lvbihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKnVhcmcpXG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYy03MzYtXHRpZiAoY29weV90b191c2VyKHJkX3VwdHIsIFx1MDAyNnJkLCBzaXplb2YocmQpKSkge1xuaW9fdXJpbmcvcmVnaXN0ZXIuYzo3Mzc6XHRcdGlvX2ZyZWVfcmVnaW9uKGN0eC1cdTAwM2V1c2VyLCBcdTAwMjZyZWdpb24pO1xuaW9fdXJpbmcvcmVnaXN0ZXIuYy03MzgtXHRcdHJldHVybiAtRUZBVUxUO1xuLS1cbmlvX3VyaW5nL3pjcnguYz00MTI9c3RhdGljIHZvaWQgaW9fZnJlZV9yYnVmX3Jpbmcoc3RydWN0IGlvX3pjcnhfaWZxICppZnEpXG5pb191cmluZy96Y3J4LmMtNDEzLXtcbmlvX3VyaW5nL3pjcnguYzo0MTQ6XHRpb19mcmVlX3JlZ2lvbihpZnEtXHUwMDNldXNlciwgXHUwMDI2aWZxLVx1MDAzZXJxX3JlZ2lvbik7XG5pb191cmluZy96Y3J4LmMtNDE1LVx0aWZxLVx1MDAzZXJxLnJpbmcgPSBJT19VUklOR19QVFJfUE9JU09OO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDA3OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4OTEKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEkvTyBSZWdpb24gRnVuY3Rpb25zKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHRoaW5raW5nLiBXZSYjMzk7dmUgZ290IGEgaGFuZGZ1bCBvZiBjcml0aWNhbCBJL08gcmVnaW9uIGZ1bmN0aW9ucyB0byB6ZXJvIGluIG9uOiBgaW9fY3JlYXRlX3JlZ2lvbmAsIGBpb19mcmVlX3JlZ2lvbmAsIGBpb191cmluZ19tbWFwYCwgYGlvX3JlZ2lvbl9tbWFwYCwgYW5kIGBpb19yZWdpc3Rlcl9tZW1fcmVnaW9uYC4gR2l2ZW4gd2hhdCBJIGtub3cgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHRoZSBrZXJuZWwsIHRoZXNlIGFyZSBsaWtlbHkgdGhlIGNvcmUgYnVpbGRpbmcgYmxvY2tzIGZvciBob3cgdGhlc2UgcmVnaW9ucyBhcmUgY3JlYXRlZCwgbWFuYWdlZCwgYW5kIG1hcHBlZC4gTXkgZ3V0IHRlbGxzIG1lIHRoYXQgYW55IGlzc3VlcyBoZXJlIGNvdWxkIHJpcHBsZSBvdXQgYW5kIGNhdXNlIHNpZ25pZmljYW50IHByb2JsZW1zIGZ1cnRoZXIgZG93biB0aGUgbGluZSwgc28gaXQmIzM5O3MgYmVzdCB0byBpbnZlc3RpZ2F0ZSB0aGVtIHRob3JvdWdobHkuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiB0aGUgbGlzdCBhbmQgaXRzIGNvbnRleHQsIGlzIHRvIGRlbHZlIGludG8gYGlvX3JlZ2lvbl9tbWFwYC4gVW5kZXJzdGFuZGluZyBob3cgdGhlc2UgcmVnaW9ucyBhcmUgYWN0dWFsbHkgbWFwcGVkIGludG8gdGhlIHVzZXIgc3BhY2Ugb3Iga2VybmVsIGFkZHJlc3Mgc3BhY2Ugc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCB0byBnYWluIGluc2lnaHRzIGFuZCB0byBzdGFydCB0byBkZXRlcm1pbmUgaG93IHRoaXMgaXMgYWxsIGltcGxlbWVudGVkIGF0IHRoZSBsb3dlciBsZXZlbHMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIHVwIHRvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19yZWdpb25fbW1hcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9tZW1tYXAuYz0zNjA9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBpb19yZWdpb25fdm1fb3BzID0ge1xuLS1cbmlvX3VyaW5nL21lbW1hcC5jLTM2NC1cbmlvX3VyaW5nL21lbW1hcC5jOjM2NTpzdGF0aWMgaW50IGlvX3JlZ2lvbl9tbWFwKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuaW9fdXJpbmcvbWVtbWFwLmMtMzY2LVx0XHRcdCAgc3RydWN0IGlvX21hcHBlZF9yZWdpb24gKm1yLFxuLS1cbmlvX3VyaW5nL21lbW1hcC5jPTM4Nz1fX2NvbGQgaW50IGlvX3VyaW5nX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmlvX3VyaW5nL21lbW1hcC5jLTQwOS1cdHJlZ2lvbiA9IGlvX21tYXBfZ2V0X3JlZ2lvbihjdHgsIHZtYS1cdTAwM2V2bV9wZ29mZik7XG5pb191cmluZy9tZW1tYXAuYzo0MTA6XHRyZXR1cm4gaW9fcmVnaW9uX21tYXAoY3R4LCByZWdpb24sIHZtYSwgcGFnZV9saW1pdCk7XG5pb191cmluZy9tZW1tYXAuYy00MTEtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDM0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGlvX3VyaW5nJiMzOTtzIE1lbW9yeSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIEkmIzM5O20gc3RhcnRpbmcgd2l0aCBgaW9fdXJpbmdfbW1hcGAuIFRoYXQmIzM5O3Mgd2hlcmUgaXQgYWxsIGJlZ2lucywgcmlnaHQ/IFRoZSBpbml0aWFsIG1hcHBpbmcuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtZW1vcnkgcmVnaXN0cmF0aW9uIGFjdHVhbGx5IHdvcmtzIHdpdGhpbiB0aGF0IGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gZ28gZGVlcGVyIHRvIHNlZSBob3cgYGlvX3VyaW5nYCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBzeXN0ZW0gbWVtb3J5LiBMZXQmIzM5O3MgZGlnIGludG8gYGlvX3JlZ2lzdGVyX21lbV9yZWdpb25gIG5leHQ7IEkmIzM5O20gcHJldHR5IHN1cmUgdGhhdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHVzZXItc3BhY2UgbWVtb3J5IGdldHMgcGx1bWJlZCBpbnRvIGBpb191cmluZ2AmIzM5O3Mgd29ybGQuIEkgd2FudCB0byBzZWUgaG93IHRoYXQgcmVnaXN0cmF0aW9uIHRpZXMgaW50byB0aGUgd2hvbGUgcGljdHVyZSwgZXNwZWNpYWxseSByZWdhcmRpbmcgRE1BIGFuZCB0aG9zZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucyB0aGF0IGFyZSB0aGUgd2hvbGUgcG9pbnQgb2YgYGlvX3VyaW5nYC4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbiB3aXRoIHBhZ2UgdGFibGVzIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDA3OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3JlZ2lzdGVyX21lbV9yZWdpb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvcmVnaXN0ZXIuYz00OTg9c3RhdGljIGludCBpb19yZWdpc3Rlcl9yZXNpemVfcmluZ3Moc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcpXG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYy03MDItXG5pb191cmluZy9yZWdpc3Rlci5jOjcwMzpzdGF0aWMgaW50IGlvX3JlZ2lzdGVyX21lbV9yZWdpb24oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICp1YXJnKVxuaW9fdXJpbmcvcmVnaXN0ZXIuYy03MDQte1xuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmM9NzUwPXN0YXRpYyBpbnQgX19pb191cmluZ19yZWdpc3RlcihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdW5zaWduZWQgb3Bjb2RlLFxuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmMtOTUzLVx0XHRcdGJyZWFrO1xuaW9fdXJpbmcvcmVnaXN0ZXIuYzo5NTQ6XHRcdHJldCA9IGlvX3JlZ2lzdGVyX21lbV9yZWdpb24oY3R4LCBhcmcpO1xuaW9fdXJpbmcvcmVnaXN0ZXIuYy05NTUtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODg3CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBNZW1vcnkgUmVnaXN0cmF0aW9uIGluIHRoZSBJT191cmluZyBDb250ZXh0KioKCk9rYXksIHNvIGBpb19yZWdpc3Rlcl9tZW1fcmVnaW9uYCBpcyBkZWZpbml0ZWx5IHRyaWdnZXJlZCBieSBgX19pb191cmluZ19yZWdpc3RlcmAuIE1ha2VzIHNlbnNlOyB0aGF0JiMzOTtzIHRoZSBjb3JlIHJlZ2lzdHJhdGlvbiBmdW5jdGlvbi4gTXkgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyBoZXJlIHNvLCBsZXQmIzM5O3MgdHJhY2UgdGhpcyBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGludGVybmFsbHkuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIG1lbW9yeSBtYW5hZ2VtZW50IG51YW5jZXMgc28gSSYjMzk7bGwgY2hlY2sgYGlvX3JlZ2lzdGVyX3BidWZfcmluZ2AgZm9yIHNvbWUgY29udGV4dCBhcm91bmQgdGhhdC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19yZWdpc3Rlcl9wYnVmX3JpbmcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcva2J1Zi5jPTYxMT1pbnQgaW9fbWFuYWdlX2J1ZmZlcnNfbGVnYWN5KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcva2J1Zi5jLTYyOC1cbmlvX3VyaW5nL2tidWYuYzo2Mjk6aW50IGlvX3JlZ2lzdGVyX3BidWZfcmluZyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZylcbmlvX3VyaW5nL2tidWYuYy02MzAte1xuLS1cbmlvX3VyaW5nL2tidWYuaD04MD1pbnQgaW9fbWFuYWdlX2J1ZmZlcnNfbGVnYWN5KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xuaW9fdXJpbmcva2J1Zi5oLTgxLVxuaW9fdXJpbmcva2J1Zi5oOjgyOmludCBpb19yZWdpc3Rlcl9wYnVmX3Jpbmcoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcpO1xuaW9fdXJpbmcva2J1Zi5oLTgzLWludCBpb191bnJlZ2lzdGVyX3BidWZfcmluZyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZyk7XG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYz03NTA9c3RhdGljIGludCBfX2lvX3VyaW5nX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB1bnNpZ25lZCBvcGNvZGUsXG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYy04ODctXHRcdFx0YnJlYWs7XG5pb191cmluZy9yZWdpc3Rlci5jOjg4ODpcdFx0cmV0ID0gaW9fcmVnaXN0ZXJfcGJ1Zl9yaW5nKGN0eCwgYXJnKTtcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtODg5LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDc6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQxMAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBpb19yZWdpc3Rlcl9wYnVmX3JpbmcqKgoKT2theSwgc28gYGlvX3JlZ2lzdGVyX3BidWZfcmluZ2AgaXMgY2FsbGVkIGZyb20gYF9faW9fdXJpbmdfcmVnaXN0ZXJgLiBUaGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludCwgdGhlIHJlZ2lzdHJhdGlvbiBwYXRoLiBJdCYjMzk7cyB0aW1lIHRvIGZvbGxvdyB0aGUgdHJhaWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYnVmZmVyIHJpbmdzIGFyZSBiZWluZyBzZXQgdXAuIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHJlc2l6ZSBvcGVyYXRpb24uIExldCYjMzk7cyBkaWcgaW50byBgaW9fcmVnaXN0ZXJfcmVzaXplX3JpbmdzYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgbG93ZG93biBvbiB0aGUgcmluZyBzaXplcywgYW5kIGhvdyB0aGUgYnVmZmVyIG1lbW9yeSBpcyBhbGxvY2F0ZWQgYW5kIG1hbmFnZWQgZHVyaW5nIHRoaXMgaW5pdGlhbGl6YXRpb24gcGhhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDA3OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3JlZ2lzdGVyX3Jlc2l6ZV9yaW5ncyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9yZWdpc3Rlci5jPTQ4MD1zdGF0aWMgdm9pZCBpb19yZWdpc3Rlcl9mcmVlX3JpbmdzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNDk3LVxuaW9fdXJpbmcvcmVnaXN0ZXIuYzo0OTg6c3RhdGljIGludCBpb19yZWdpc3Rlcl9yZXNpemVfcmluZ3Moc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcpXG5pb191cmluZy9yZWdpc3Rlci5jLTQ5OS17XG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYz03NTA9c3RhdGljIGludCBfX2lvX3VyaW5nX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB1bnNpZ25lZCBvcGNvZGUsXG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYy05NDctXHRcdFx0YnJlYWs7XG5pb191cmluZy9yZWdpc3Rlci5jOjk0ODpcdFx0cmV0ID0gaW9fcmVnaXN0ZXJfcmVzaXplX3JpbmdzKGN0eCwgYXJnKTtcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtOTQ5LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDc6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTgwOQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDI0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBgaW9fdXJpbmdgIFJpbmcgUmVnaXN0cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgY2FsbHMgcmVsYXRlZCB0byByZWdpc3RlcmluZyBhbmQgcmVzaXppbmcgdGhlIHJpbmdzIHdpdGhpbiB0aGUgYGlvX3VyaW5nYCBzdWJzeXN0ZW0uIE15IHN0YXJ0aW5nIHBvaW50IGlzIGBpb19yZWdpc3Rlcl9yZXNpemVfcmluZ3NgLCB3aGljaCBJIHNlZSBpcyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgX19pb191cmluZ19yZWdpc3RlcmAuIFRoZXJlZm9yZSwgdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMuCgpNeSBhdHRlbnRpb24gaW1tZWRpYXRlbHkgc2hpZnRzIHRvIHNldmVyYWwgZnVuY3Rpb25zOiBgaW9fY3JlYXRlX3JlZ2lvbmAsIGBpb19mcmVlX3JlZ2lvbmAsIGBpb191cmluZ19tbWFwYCwgYGlvX3JlZ2lzdGVyX21lbV9yZWdpb25gLCBgaW9fcmVnaXN0ZXJfcGJ1Zl9yaW5nYCwgYW5kIGBpb19yZWdpc3Rlcl9yZXNpemVfcmluZ3NgLgoKTm93LCBgaW9fY3JlYXRlX3JlZ2lvbmAgYW5kIGBpb19mcmVlX3JlZ2lvbmAgY2F0Y2ggbXkgZXllLiBUaGV5IGFyZW4mIzM5O3QgZGVjbGFyZWQgYXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZywgZXZlbiBpZiB0aGV5IGFyZSBpbnRlcm5hbCB0byBgaW9fdXJpbmdgLiBUaGlzIG1lYW5zIHRoZXkmIzM5O3JlIGFjY2Vzc2libGUgb3V0c2lkZSBhIHNwZWNpZmljIHNvdXJjZSBmaWxlLCBzbyBhcmUgcHJvYmFibHkgd29ydGggc2NydXRpbml6aW5nLiBJIHNlZSB0aGF0IGBpb19yZWdpc3Rlcl9tZW1fcmVnaW9uYCwgYGlvX3JlZ2lzdGVyX3BidWZfcmluZ2AsIGFuZCBgaW9fcmVnaXN0ZXJfcmVzaXplX3JpbmdzYCBhbHNvIHNlZW0gaW1wb3J0YW50LgoKQSBxdWljayBjaGVjayBjb25maXJtcyBhIGNvdXBsZSBvZiB0aGluZ3MsIGFuZCB0cmlnZ2VycyBhbiBlcnJvciBpbiBteSB0aGlua2luZy4gYGlvX3JlZ2lzdGVyX21lbV9yZWdpb25gIGlzLCBpbiBmYWN0LCBzdGF0aWMuICpBbmQqLCBzbyBpcyBgaW9fcmVnaXN0ZXJfcmVzaXplX3JpbmdzYC4gTXkgaW5pdGlhbCBtZW50YWwgbW9kZWwgd2FzIGZsYXdlZC4gT24gdGhlIG90aGVyIGhhbmQsIGBpb19yZWdpc3Rlcl9wYnVmX3JpbmdgIGFuZCBgaW9fdXJpbmdfbW1hcGAgYXJlICpub3QqIHN0YXRpYywgc28gd2lsbCBiZSB1c2VmdWwuCgpJIG5lZWQgdG8gY2lyY2xlIGJhY2sgYW5kIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiBgaW9fcmVnaXN0ZXJfbWVtX3JlZ2lvbmAgYW5kIGBpb19yZWdpc3Rlcl9yZXNpemVfcmluZ3NgLiBUaGV5JiMzOTtyZSBpbnRlcm5hbCwgc28gYXJlIHRoZXkgdGhlIHJpZ2h0IHBsYWNlcyB0byBmb2N1cz8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDc6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fcmVnaXN0ZXJfbWVtX3JlZ2lvbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9yZWdpc3Rlci5jPTQ5OD1zdGF0aWMgaW50IGlvX3JlZ2lzdGVyX3Jlc2l6ZV9yaW5ncyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZylcbi0tXG5pb191cmluZy9yZWdpc3Rlci5jLTcwMi1cbmlvX3VyaW5nL3JlZ2lzdGVyLmM6NzAzOnN0YXRpYyBpbnQgaW9fcmVnaXN0ZXJfbWVtX3JlZ2lvbihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKnVhcmcpXG5pb191cmluZy9yZWdpc3Rlci5jLTcwNC17XG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYz03NTA9c3RhdGljIGludCBfX2lvX3VyaW5nX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB1bnNpZ25lZCBvcGNvZGUsXG4tLVxuaW9fdXJpbmcvcmVnaXN0ZXIuYy05NTMtXHRcdFx0YnJlYWs7XG5pb191cmluZy9yZWdpc3Rlci5jOjk1NDpcdFx0cmV0ID0gaW9fcmVnaXN0ZXJfbWVtX3JlZ2lvbihjdHgsIGFyZyk7XG5pb191cmluZy9yZWdpc3Rlci5jLTk1NS1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDA3OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjY2CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIEtleSBJTyBGdW5jdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gR2l2ZW4gdGhhdCBgaW9fcmVnaXN0ZXJfbWVtX3JlZ2lvbmAgaXMgc3RhdGljLCBteSBhdHRlbnRpb24gbmVlZHMgdG8gc2hpZnQgdG8gdGhlIG1vcmUgZHluYW1pYyBjb21wb25lbnRzLiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gSU8gcmVnaW9uIG1hbmFnZW1lbnQsIHdoaWNoIGFyZSB3aGVyZSB0aGUgY29yZSBpbnRlcmFjdGlvbnMgbGlrZWx5IHJlc2lkZS4gU3BlY2lmaWNhbGx5LCBgaW9fY3JlYXRlX3JlZ2lvbmAsIGBpb19mcmVlX3JlZ2lvbmAsIGBpb191cmluZ19tbWFwYCwgYW5kIGBpb19yZWdpc3Rlcl9wYnVmX3JpbmdgLiBQZXJoYXBzLCBhbHRob3VnaCBtYXliZSB0b28gYnJvYWQgYXMgYW4gZW50cnkgcG9pbnQsIGBfX2lvX3VyaW5nX3JlZ2lzdGVyYCBkZXNlcnZlcyBhIHNlY29uZCBsb29rLgoKT2theSwgbGV0IG1lIGNvbmZpcm0gdGhlIHN0YXRpYy9ub24tc3RhdGljIHN0YXR1cyBvZiB0aG9zZSBmaXJzdCBmb3VyIGFnYWluOiBZdXAsIGBpb19jcmVhdGVfcmVnaW9uYCwgYGlvX2ZyZWVfcmVnaW9uYCwgYGlvX3VyaW5nX21tYXBgLCBhbmQgYGlvX3JlZ2lzdGVyX3BidWZfcmluZ2AgYXJlIGFsbCBub24tc3RhdGljLCB3aGljaCBpcyB3aGF0IEkgZXhwZWN0LgoKSnVzdCB0byBiZSB0aG9yb3VnaCwgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGdsYW5jZSBhdCBhbnkgb3RoZXIgcG90ZW50aWFsbHkgcmVsYXRlZCBmdW5jdGlvbnMuIExvb2tzIGxpa2UgYGlvX3JlZ2lvbl9hY2NvdW50X2FsbG9jYCwgYGlvX3JlZ2lvbl9hY2NvdW50X2dldGAsIGFuZCBgaW9fcmVnaW9uX2FjY291bnRfcHV0YCBhcmUgc3RhdGljLCBzbyBJIGNhbiBwcm9iYWJseSBrZWVwIHRob3NlIG91dCBvZiB0aGUgc2NvcGUgZm9yIG5vdy4KCkNvbnNpZGVyaW5nIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucywgdGhlIG1vc3QgcHJvbWlzaW5nIGNhbmRpZGF0ZXMgYXJlIGBpb19jcmVhdGVfcmVnaW9uYCwgYGlvX2ZyZWVfcmVnaW9uYCwgYW5kIGBpb191cmluZ19tbWFwYCBiYXNlZCBvbiB0aGVpciByb2xlIGluIHJlZ2lvbiBsaWZlY3ljbGUgYW5kIG1hcHBpbmcuCgpJIHRoaW5rIGl0JiMzOTtzIHRpbWUgdG8gZGl2ZSBpbnRvIGEgZGVlcGVyIGFuYWx5c2lzIG9mIGBpb191cmluZ19tbWFwYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDc6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fdXJpbmdfbW1hcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9pb191cmluZy5jPTI3MDg9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaW9fdXJpbmdfZm9wcyA9IHtcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjcwOS1cdC5yZWxlYXNlXHQ9IGlvX3VyaW5nX3JlbGVhc2UsXG5pb191cmluZy9pb191cmluZy5jOjI3MTA6XHQubW1hcFx0XHQ9IGlvX3VyaW5nX21tYXAsXG5pb191cmluZy9pb191cmluZy5jLTI3MTEtXHQuZ2V0X3VubWFwcGVkX2FyZWEgPSBpb191cmluZ19nZXRfdW5tYXBwZWRfYXJlYSxcbi0tXG5pb191cmluZy9tZW1tYXAuYz0zNjU9c3RhdGljIGludCBpb19yZWdpb25fbW1hcChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbi0tXG5pb191cmluZy9tZW1tYXAuYy0zODYtXG5pb191cmluZy9tZW1tYXAuYzozODc6X19jb2xkIGludCBpb191cmluZ19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbmlvX3VyaW5nL21lbW1hcC5jLTM4OC17XG4tLVxuaW9fdXJpbmcvbWVtbWFwLmM9NDEzPXVuc2lnbmVkIGxvbmcgaW9fdXJpbmdfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5pb191cmluZy9tZW1tYXAuYy00NjItICogRHJvcCB0aGUgcGFnZXMgdGhhdCB3ZXJlIGluaXRpYWxseSByZWZlcmVuY2VkIGFuZCBhZGRlZCBpblxuaW9fdXJpbmcvbWVtbWFwLmM6NDYzOiAqIGlvX3VyaW5nX21tYXAoKS4gV2UgY2Fubm90IGhhdmUgaGFkIGEgbXJlbWFwKCkgYXMgdGhhdCBpc24mIzM5O3Qgc3VwcG9ydGVkLFxuaW9fdXJpbmcvbWVtbWFwLmMtNDY0LSAqIGhlbmNlIHRoZSB2bWEgc2hvdWxkIGJlIGlkZW50aWNhbCB0byB0aGUgb25lIHdlIGluaXRpYWxseSByZWZlcmVuY2VkIGFuZFxuLS1cbmlvX3VyaW5nL21lbW1hcC5jPTQ3OD1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGlvX3VyaW5nX25vbW11X3ZtX29wcyA9IHtcbi0tXG5pb191cmluZy9tZW1tYXAuYy00ODEtXG5pb191cmluZy9tZW1tYXAuYzo0ODI6aW50IGlvX3VyaW5nX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuaW9fdXJpbmcvbWVtbWFwLmMtNDgzLXtcbi0tXG5pb191cmluZy9tZW1tYXAuaD0xNT11bnNpZ25lZCBsb25nIGlvX3VyaW5nX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxuaW9fdXJpbmcvbWVtbWFwLmgtMTctXHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGZsYWdzKTtcbmlvX3VyaW5nL21lbW1hcC5oOjE4OmludCBpb191cmluZ19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG5pb191cmluZy9tZW1tYXAuaC0xOS1cbi0tXG50b29scy9pbmNsdWRlL2lvX3VyaW5nL21pbmlfbGlidXJpbmcuaD01NT1zdHJ1Y3QgaW9fdXJpbmcge1xuLS1cbnRvb2xzL2luY2x1ZGUvaW9fdXJpbmcvbWluaV9saWJ1cmluZy5oLTY5LVxudG9vbHMvaW5jbHVkZS9pb191cmluZy9taW5pX2xpYnVyaW5nLmg6NzA6c3RhdGljIGlubGluZSBpbnQgaW9fdXJpbmdfbW1hcChpbnQgZmQsIHN0cnVjdCBpb191cmluZ19wYXJhbXMgKnAsXG50b29scy9pbmNsdWRlL2lvX3VyaW5nL21pbmlfbGlidXJpbmcuaC03MS1cdFx0XHRcdHN0cnVjdCBpb191cmluZ19zcSAqc3EsIHN0cnVjdCBpb191cmluZ19jcSAqY3EpXG4tLVxudG9vbHMvaW5jbHVkZS9pb191cmluZy9taW5pX2xpYnVyaW5nLmg9MTM5PXN0YXRpYyBpbmxpbmUgaW50IGlvX3VyaW5nX3F1ZXVlX2luaXRfcGFyYW1zKHVuc2lnbmVkIGludCBlbnRyaWVzLFxuLS1cbnRvb2xzL2luY2x1ZGUvaW9fdXJpbmcvbWluaV9saWJ1cmluZy5oLTE0OS1cdFx0cmV0dXJuIGZkO1xudG9vbHMvaW5jbHVkZS9pb191cmluZy9taW5pX2xpYnVyaW5nLmg6MTUwOlx0cmV0ID0gaW9fdXJpbmdfbW1hcChmZCwgcCwgXHUwMDI2cmluZy1cdTAwM2VzcSwgXHUwMDI2cmluZy1cdTAwM2VjcSk7XG50b29scy9pbmNsdWRlL2lvX3VyaW5nL21pbmlfbGlidXJpbmcuaC0xNTEtXHRpZiAoIXJldCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA5MAoJCQkJCQkJb3V0cHV0OiAxMzAKCQkJCQkJCXRob3VnaHRzOiAxOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBmb3IgaW9fdXJpbmcgTWVtb3J5IE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWxhdGVkIHRvIG1lbW9yeSBtYXBwaW5nIHdpdGhpbiBpb191cmluZy4gU3BlY2lmaWNhbGx5LCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBgaW9fdXJpbmdfbW1hcGAgZnVuY3Rpb24sIHdoaWNoIGhhbmRsZXMgbW1hcCBjYWxscyB3aXRoaW4gdGhlIGlvX3VyaW5nIGNvbnRleHQuIFdlJiMzOTt2ZSBnb3QgYGlvX2NyZWF0ZV9yZWdpb25gIGFuZCBgaW9fZnJlZV9yZWdpb25gIGJlaW5nIHVzZWQgbm93IHdoZW5ldmVyIHJlZ2lvbnMgYXJlIGNyZWF0ZWQgb3IgcmVsZWFzZWQuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBzaGlmdCBpbiBob3cgaW9fdXJpbmcgbWFuYWdlcyBpdHMgbWVtb3J5IGFjY291bnRpbmcuCgpHaXZlbiB0aGlzLCBJJiMzOTttIHRoaW5raW5nIHRoaXMgaXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgY2hhbmdlcyBpbnRyb2R1Y2UgYHN0cnVjdCBpb19yZWdpb25fYWNjb3VudGAgYW5kIG1vZGlmeSBob3cgbWVtb3J5IGlzIG1hbmFnZWQgYW5kIGZyZWVkLiBUaGlzIG1lYW5zIHdlJiMzOTt2ZSBnb3QgbmV3IGxvZ2ljIHBhdGhzIGluIHRoZXNlIHRocmVlIGZ1bmN0aW9ucywgYGlvX2NyZWF0ZV9yZWdpb25gLCBgaW9fZnJlZV9yZWdpb25gLCBhbmQgYGlvX3VyaW5nX21tYXBgIHRoYXQgYXJlIHBvdGVudGlhbGx5IHZ1bG5lcmFibGUuIFRoZXNlIGFyZSBjb3JlIGtlcm5lbCByb3V0aW5lcywgc28gZmluZGluZyBhIGJ1ZyBoZXJlIHdvdWxkIGJlIGltcGFjdGZ1bC4KClRoZXJlZm9yZSwgbXkgc3RyYXRlZ3kgaXMgc2ltcGxlOiBJJiMzOTtsbCBmbGFnIHRoaXMgYXMgYFdvcnRoRnV6emluZzogdHJ1ZWAsIGFuZCBjb25jZW50cmF0ZSBteSBmdXp6aW5nIGVmZm9ydHMgb24gdGhvc2Ugc3BlY2lmaWMgc3ltYm9sczogYGlvX2NyZWF0ZV9yZWdpb25gLCBgaW9fZnJlZV9yZWdpb25gLCBhbmQgYGlvX3VyaW5nX21tYXBgLiBUaGUgb2J2aW91cyBwcmVyZXF1aXNpdGUgaXMgYEVuYWJsZUNvbmZpZ3M6IElPX1VSSU5HYCwgYmVjYXVzZSBpZiB0aGF0IGlzbiYjMzk7dCBzZXQsIHRoZW4gdGhlIHdob2xlIHRoaW5nIGlzIGlycmVsZXZhbnQuIEJlY2F1c2Ugb2YgdGhlIG1lbW9yeSBoYW5kbGluZyBhc3BlY3QsIHRoaXMgY291bGQgYmUgYSBmdW4gYW5kIGZydWl0ZnVsIHRhcmdldC4gTGV0JiMzOTtzIGdldCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb19jcmVhdGVfcmVnaW9uJiMzNDssCiAgICAmIzM0O2lvX2ZyZWVfcmVnaW9uJiMzNDssCiAgICAmIzM0O2lvX3VyaW5nX21tYXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGFjY291bnRpbmcgYW5kIG1hcHBpbmcgbG9naWMgZm9yIGlvX3VyaW5nIHJlZ2lvbnMsIGludHJvZHVjaW5nIGBzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnRgIGFuZCBjaGFuZ2luZyBob3cgbWVtb3J5IGlzIGFjY291bnRlZCBhbmQgZnJlZWQuIFRoaXMgYWZmZWN0cyBgaW9fY3JlYXRlX3JlZ2lvbmAsIGBpb19mcmVlX3JlZ2lvbmAsIGFuZCBgaW9fdXJpbmdfbW1hcGAuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9fY3JlYXRlX3JlZ2lvbiYjMzQ7LAogICAgJiMzNDtpb19mcmVlX3JlZ2lvbiYjMzQ7LAogICAgJiMzNDtpb191cmluZ19tbWFwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBhY2NvdW50aW5nIGFuZCBtYXBwaW5nIGxvZ2ljIGZvciBpb191cmluZyByZWdpb25zLCBpbnRyb2R1Y2luZyBgc3RydWN0IGlvX3JlZ2lvbl9hY2NvdW50YCBhbmQgY2hhbmdpbmcgaG93IG1lbW9yeSBpcyBhY2NvdW50ZWQgYW5kIGZyZWVkLiBUaGlzIGFmZmVjdHMgYGlvX2NyZWF0ZV9yZWdpb25gLCBgaW9fZnJlZV9yZWdpb25gLCBhbmQgYGlvX3VyaW5nX21tYXBgLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzozMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDA3OjMwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgaW50ZXJuYWwgc3RydWN0dXJlIGBpb19yZWdpb25fYWNjb3VudGAgdG8gdHJhY2sgbWVtb3J5IGFjY291bnRpbmcgZm9yIGlvX3VyaW5nIG1lbW9yeSByZWdpb25zIGFjcm9zcyBWTUEgbGlmZWN5Y2xlcy4gVGhlIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgaW50ZXJuYWxseSBhbmQgYWxsIGl0cyBmaWVsZHMgKGByZWZzYCwgYHVzZXJgLCBgbnJfcGFnZXNgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZXhwb3NlZCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGFkZHJlc3MgbWVtb3J5IGFjY291bnRpbmcgYW5kIG9iamVjdCBsaWZlY3ljbGVzLCB3aGVyZSBhbnkgcG90ZW50aWFsIGJ1Z3MgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgbWVtb3J5IGxlYWtzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIG1lbW9yeSBsZWFrIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzNTEyOTQ3YzBkMzYwMjRlZmQ1MTE5ZmViNTk0MWQ1YWEwZGZkNDMwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMTYgMDc6Mjk6MzMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmgKaW5kZXggODcxNTFhNWI2MmMxYi4uNmZlYjdlZTM0NDBmZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaW9fdXJpbmdfdHlwZXMuaApAQCAtOTQsMTEgJiM0Mzs5NCwxNCBAQCBzdHJ1Y3QgaW9faGFzaF90YWJsZSB7CiAJdW5zaWduZWQJCWhhc2hfYml0czsKIH07CiAKJiM0MztzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnQ7CiYjNDM7CiBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiB7CiAJc3RydWN0IHBhZ2UJCSoqcGFnZXM7CiAJdm9pZAkJCSpwdHI7CiAJdW5zaWduZWQJCW5yX3BhZ2VzOwogCXVuc2lnbmVkCQlmbGFnczsKJiM0MzsJc3RydWN0IGlvX3JlZ2lvbl9hY2NvdW50CSphY2NvdW50OwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2lvX3VyaW5nL21lbW1hcC5jIGIvaW9fdXJpbmcvbWVtbWFwLmMKaW5kZXggMjNlOGE4NTExMWJjYS4uY2EyOGE5NDI5YzE2OCAxMDA2NDQKLS0tIGEvaW9fdXJpbmcvbWVtbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvbWVtbWFwLmMKQEAgLTQsNiAmIzQzOzQsOCBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2Vycm5vLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW0uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tbWFuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3JlZmNvdW50LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL3VzZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdm1hbGxvYy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lvX3VyaW5nLmgmZ3Q7CkBAIC04OCw2ICYjNDM7OTAsNTIgQEAgZW51bSB7CiAJSU9fUkVHSU9OX0ZfU0lOR0xFX1JFRgkJCT0gNCwKIH07CiAKJiM0MztzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnQgewomIzQzOwlyZWZjb3VudF90IHJlZnM7CiYjNDM7CXN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlcjsKJiM0MzsJdW5zaWduZWQgbG9uZyBucl9wYWdlczsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnQgKgomIzQzO2lvX3JlZ2lvbl9hY2NvdW50X2FsbG9jKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpb19yZWdpb25fYWNjb3VudCAqYWNjb3VudDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCF1c2VyKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CWFjY291bnQgPSBrbWFsbG9jX29iaigqYWNjb3VudCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKJiM0MzsJaWYgKCFhY2NvdW50KQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CiYjNDM7CXJldCA9IF9faW9fYWNjb3VudF9tZW0odXNlciwgbnJfcGFnZXMpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlrZnJlZShhY2NvdW50KTsKJiM0MzsJCXJldHVybiBFUlJfUFRSKHJldCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmVmY291bnRfc2V0KCZhbXA7YWNjb3VudC0mZ3Q7cmVmcywgMSk7CiYjNDM7CWFjY291bnQtJmd0O3VzZXIgPSBnZXRfdWlkKHVzZXIpOwomIzQzOwlhY2NvdW50LSZndDtucl9wYWdlcyA9IG5yX3BhZ2VzOwomIzQzOwlyZXR1cm4gYWNjb3VudDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaW9fcmVnaW9uX2FjY291bnRfZ2V0KHN0cnVjdCBpb19yZWdpb25fYWNjb3VudCAqYWNjb3VudCkKJiM0Mzt7CiYjNDM7CWlmIChhY2NvdW50KQomIzQzOwkJcmVmY291bnRfaW5jKCZhbXA7YWNjb3VudC0mZ3Q7cmVmcyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlvX3JlZ2lvbl9hY2NvdW50X3B1dChzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnQgKmFjY291bnQpCiYjNDM7ewomIzQzOwlpZiAoYWNjb3VudCAmYW1wOyZhbXA7IHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO2FjY291bnQtJmd0O3JlZnMpKSB7CiYjNDM7CQlfX2lvX3VuYWNjb3VudF9tZW0oYWNjb3VudC0mZ3Q7dXNlciwgYWNjb3VudC0mZ3Q7bnJfcGFnZXMpOwomIzQzOwkJZnJlZV91aWQoYWNjb3VudC0mZ3Q7dXNlcik7CiYjNDM7CQlrZnJlZShhY2NvdW50KTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHZvaWQgaW9fZnJlZV9yZWdpb24oc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyLCBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIpCiB7CiAJaWYgKG1yLSZndDtwYWdlcykgewpAQCAtMTA1LDggJiM0MzsxNTMsMTIgQEAgdm9pZCBpb19mcmVlX3JlZ2lvbihzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIsIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcikKIAl9CiAJaWYgKChtci0mZ3Q7ZmxhZ3MgJmFtcDsgSU9fUkVHSU9OX0ZfVk1BUCkgJmFtcDsmYW1wOyBtci0mZ3Q7cHRyKQogCQl2dW5tYXAobXItJmd0O3B0cik7Ci0JaWYgKG1yLSZndDtucl9wYWdlcyAmYW1wOyZhbXA7IHVzZXIpCiYjNDM7CWlmIChtci0mZ3Q7YWNjb3VudCkgewomIzQzOwkJV0FSTl9PTl9PTkNFKG1yLSZndDthY2NvdW50LSZndDt1c2VyICE9IHVzZXIpOwomIzQzOwkJaW9fcmVnaW9uX2FjY291bnRfcHV0KG1yLSZndDthY2NvdW50KTsKJiM0MzsJfSBlbHNlIGlmIChtci0mZ3Q7bnJfcGFnZXMgJmFtcDsmYW1wOyB1c2VyKSB7CiAJCV9faW9fdW5hY2NvdW50X21lbSh1c2VyLCBtci0mZ3Q7bnJfcGFnZXMpOwomIzQzOwl9CiAKIAltZW1zZXQobXIsIDAsIHNpemVvZigqbXIpKTsKIH0KQEAgLTE4OCw3ICYjNDM7MjQwLDggQEAgaW50IGlvX2NyZWF0ZV9yZWdpb24oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptciwKIAlpbnQgbnJfcGFnZXMsIHJldDsKIAl1NjQgZW5kOwogCi0JaWYgKFdBUk5fT05fT05DRShtci0mZ3Q7cGFnZXMgfHwgbXItJmd0O3B0ciB8fCBtci0mZ3Q7bnJfcGFnZXMpKQomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKG1yLSZndDtwYWdlcyB8fCBtci0mZ3Q7cHRyIHx8IG1yLSZndDtucl9wYWdlcyB8fAomIzQzOwkJCSBtci0mZ3Q7YWNjb3VudCkpCiAJCXJldHVybiAtRUZBVUxUOwogCWlmIChtZW1jaHJfaW52KCZhbXA7cmVnLSZndDtfX3Jlc3YsIDAsIHNpemVvZihyZWctJmd0O19fcmVzdikpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTIwNywxMCAmIzQzOzI2MCwyMyBAQCBpbnQgaW9fY3JlYXRlX3JlZ2lvbihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgc3RydWN0IGlvX21hcHBlZF9yZWdpb24gKm1yLAogCQlyZXR1cm4gLUVPVkVSRkxPVzsKIAogCW5yX3BhZ2VzID0gcmVnLSZndDtzaXplICZndDsmZ3Q7IFBBR0VfU0hJRlQ7Ci0JaWYgKGN0eC0mZ3Q7dXNlcikgewotCQlyZXQgPSBfX2lvX2FjY291bnRfbWVtKGN0eC0mZ3Q7dXNlciwgbnJfcGFnZXMpOwotCQlpZiAocmV0KQomIzQzOwlpZiAocmVnLSZndDtmbGFncyAmYW1wOyBJT1JJTkdfTUVNX1JFR0lPTl9UWVBFX1VTRVIpIHsKJiM0MzsJCWlmIChjdHgtJmd0O3VzZXIpIHsKJiM0MzsJCQlyZXQgPSBfX2lvX2FjY291bnRfbWVtKGN0eC0mZ3Q7dXNlciwgbnJfcGFnZXMpOwomIzQzOwkJCWlmIChyZXQpCiYjNDM7CQkJCXJldHVybiByZXQ7CiYjNDM7CQl9CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKgomIzQzOwkJICogS2VybmVsLWFsbG9jYXRlZCBwYWdlcyBjYW4gb3V0bGl2ZSB0aGVpciBhY3RpdmUgcmVnaW9uIHRocm91Z2gKJiM0MzsJCSAqIHVzZXJzcGFjZSBtYXBwaW5ncy4KJiM0MzsJCSAqLwomIzQzOwkJbXItJmd0O2FjY291bnQgPSBpb19yZWdpb25fYWNjb3VudF9hbGxvYyhjdHgtJmd0O3VzZXIsIG5yX3BhZ2VzKTsKJiM0MzsJCWlmIChJU19FUlIobXItJmd0O2FjY291bnQpKSB7CiYjNDM7CQkJcmV0ID0gUFRSX0VSUihtci0mZ3Q7YWNjb3VudCk7CiYjNDM7CQkJbXItJmd0O2FjY291bnQgPSBOVUxMOwogCQkJcmV0dXJuIHJldDsKJiM0MzsJCX0KIAl9CiAJbXItJmd0O25yX3BhZ2VzID0gbnJfcGFnZXM7CiAKQEAgLTI4MSwxNSAmIzQzOzM0Nyw0MSBAQCBzdGF0aWMgdm9pZCAqaW9fdXJpbmdfdmFsaWRhdGVfbW1hcF9yZXF1ZXN0KHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3QgcGdvZmYpCiAKICNpZmRlZiBDT05GSUdfTU1VCiAKJiM0MztzdGF0aWMgdm9pZCBpb19yZWdpb25fdm1fb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKJiM0Mzt7CiYjNDM7CWlvX3JlZ2lvbl9hY2NvdW50X2dldCh2bWEtJmd0O3ZtX3ByaXZhdGVfZGF0YSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlvX3JlZ2lvbl92bV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKJiM0Mzt7CiYjNDM7CWlvX3JlZ2lvbl9hY2NvdW50X3B1dCh2bWEtJmd0O3ZtX3ByaXZhdGVfZGF0YSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaW9fcmVnaW9uX3ZtX29wcyA9IHsKJiM0MzsJLm9wZW4gPSBpb19yZWdpb25fdm1fb3BlbiwKJiM0MzsJLmNsb3NlID0gaW9fcmVnaW9uX3ZtX2Nsb3NlLAomIzQzO307CiYjNDM7CiBzdGF0aWMgaW50IGlvX3JlZ2lvbl9tbWFwKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LAogCQkJICBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsCiAJCQkgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJICB1bnNpZ25lZCBtYXhfcGFnZXMpCiB7CiAJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IG1pbihtci0mZ3Q7bnJfcGFnZXMsIG1heF9wYWdlcyk7CiYjNDM7CWludCByZXQ7CiAKIAl2bV9mbGFnc19zZXQodm1hLCBWTV9ET05URVhQQU5EKTsKLQlyZXR1cm4gdm1faW5zZXJ0X3BhZ2VzKHZtYSwgdm1hLSZndDt2bV9zdGFydCwgbXItJmd0O3BhZ2VzLCAmYW1wO25yX3BhZ2VzKTsKJiM0MzsJcmV0ID0gdm1faW5zZXJ0X3BhZ2VzKHZtYSwgdm1hLSZndDt2bV9zdGFydCwgbXItJmd0O3BhZ2VzLCAmYW1wO25yX3BhZ2VzKTsKJiM0MzsJaWYgKCFyZXQgJmFtcDsmYW1wOyBtci0mZ3Q7YWNjb3VudCkgewomIzQzOwkJLyoKJiM0MzsJCSAqIEFjY291bnRpbmcgZGVsaWJlcmF0ZWx5IHJlbWFpbnMgYXQgcmVnaW9uIGdyYW51bGFyaXR5IHdoZW4KJiM0MzsJCSAqIHRoaXMgVk1BIG1hcHMgb25seSBwYXJ0IG9mIHRoZSByZWdpb24uCiYjNDM7CQkgKi8KJiM0MzsJCXZtYS0mZ3Q7dm1fcHJpdmF0ZV9kYXRhID0gbXItJmd0O2FjY291bnQ7CiYjNDM7CQl2bWEtJmd0O3ZtX29wcyA9ICZhbXA7aW9fcmVnaW9uX3ZtX29wczsKJiM0MzsJCXZtYS0mZ3Q7dm1fb3BzLSZndDtvcGVuKHZtYSk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogX19jb2xkIGludCBpb191cmluZ19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKQEAgLTM3OSw2ICYjNDM7NDcxLDggQEAgc3RhdGljIHZvaWQgaW9fdXJpbmdfbm9tbXVfdm1fY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiAKIAlmb3IgKGluZGV4ID0gdm1hLSZndDt2bV9zdGFydDsgaW5kZXggJmx0OyB2bWEtJmd0O3ZtX2VuZDsgaW5kZXggJiM0Mzs9IFBBR0VfU0laRSkKIAkJcHV0X3BhZ2UodmlydF90b19wYWdlKCh2b2lkICopIGluZGV4KSk7CiYjNDM7CiYjNDM7CWlvX3JlZ2lvbl9hY2NvdW50X3B1dCh2bWEtJmd0O3ZtX3ByaXZhdGVfZGF0YSk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaW9fdXJpbmdfbm9tbXVfdm1fb3BzID0gewpAQCAtNDExLDYgJiM0Mzs1MDUsOCBAQCBpbnQgaW9fdXJpbmdfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiAJZm9yIChpID0gMDsgaSAmbHQ7IHJlZ2lvbi0mZ3Q7bnJfcGFnZXM7IGkmIzQzOyYjNDM7KQogCQlnZXRfcGFnZShyZWdpb24tJmd0O3BhZ2VzW2ldKTsKIAomIzQzOwl2bWEtJmd0O3ZtX3ByaXZhdGVfZGF0YSA9IHJlZ2lvbi0mZ3Q7YWNjb3VudDsKJiM0MzsJaW9fcmVnaW9uX2FjY291bnRfZ2V0KHJlZ2lvbi0mZ3Q7YWNjb3VudCk7CiAJdm1hLSZndDt2bV9vcHMgPSAmYW1wO2lvX3VyaW5nX25vbW11X3ZtX29wczsKIAlyZXR1cm4gMDsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDA3OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMzcKCQkJCQkJCW91dHB1dDogMTYyCgkJCQkJCQl0aG91Z2h0czogMTQ0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Kippb191cmluZyBNZW1vcnkgQWNjb3VudGluZyBGaXg6IE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2sqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBpb191cmluZy9tZW1tYXAuY2AuIEl0JiMzOTtzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBhZGRpdGlvbiBmb3IgbWVtb3J5IG1hbmFnZW1lbnQuIFRoZSBjb3JlIG9mIGl0IGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhpcyBgaW9fcmVnaW9uX2FjY291bnRgIHN0cnVjdC4gIEl0JiMzOTtzIG1lYW50IHRvIHRyYWNrIHRoZSBtZW1vcnkgYWNjb3VudGluZyBmb3IgdGhvc2UgYGlvX21hcHBlZF9yZWdpb25gIHJlZ2lvbnMuIEkgc2VlIHRoZSBmaWVsZHM6IGEgcmVmZXJlbmNlIGNvdW50IChgcmVmc2ApLCB0aGUgYHVzZXJgIHdobyBvd25zIHRoZSBtZW1vcnksIGFuZCB0aGUgbnVtYmVyIG9mIHBhZ2VzIChgbnJfcGFnZXNgKS4gIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWxsb2NhdGVkIHVzaW5nIGBrbWFsbG9jX29iamAsIHdoaWNoIEkgc3VzcGVjdCBpcyBqdXN0IGEgbWFjcm8gZm9yIGBrbWFsbG9jYCB3aXRoIHNvbWUgZmxhZ3MsIGxpa2VseSBgR0ZQX0tFUk5FTF9BQ0NPVU5UYC4uLiB5ZXAsIHRoYXQmIzM5O3Mgd2hhdCBpdCBsb29rcyBsaWtlLiAgSXQmIzM5O3MgaW1wb3J0YW50IHRoYXQgdGhpcyBzdHJ1Y3QgY29udGFpbnMgYSBgcmVmY291bnRgIGFzIGEgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlIGNvdWxkIGV4aXN0LgoKUmlnaHQsIHNvIHRoZSBwYXRjaCBhbGxvY2F0ZXMgdGhpcyBgaW9fcmVnaW9uX2FjY291bnRgIGFuZCBjYXJlZnVsbHkgaW5pdGlhbGl6ZXMgKmFsbCogaXRzIGZpZWxkcyDigJMgdGhlIHJlZmNvdW50LCB0aGUgdXNlciwgYW5kIHRoZSBudW1iZXIgb2YgcGFnZXMuICBUaGVuIGl0IGxpbmtzIHRoaXMgYWNjb3VudCB0byB0aGUgYGlvX21hcHBlZF9yZWdpb25gIHN0cnVjdCAoYG1yLSZndDthY2NvdW50YCkuICBBbmQsIGNyaXRpY2FsbHksIGl0IGFzc29jaWF0ZXMgdGhpcyBhY2NvdW50IHdpdGggdGhlIFZNQSAoVmlydHVhbCBNZW1vcnkgQXJlYSkgZHVyaW5nIGBpb19yZWdpb25fbW1hcGAuIFRoZSBgdm1hLSZndDt2bV9wcml2YXRlX2RhdGEgPSBtci0mZ3Q7YWNjb3VudDtgIGxpbmUgaXMgd2hhdCBtYXR0ZXJzIGZvciB0aGUgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuIFRoZSBhY2NvdW50aW5nIGlzIG5vdyBwcm9wZXJseSB0aWVkIHRvIHRoZSBWTUEmIzM5O3MgbGlmZXRpbWUuCgpUaGUgYmVhdXR5IGlzIHRoYXQgdGhpcyBpcyAqZW50aXJlbHkqIGludGVybmFsLiAgTm90aGluZyBmcm9tIHRoaXMgYGlvX3JlZ2lvbl9hY2NvdW50YCBzdHJ1Y3QgaXMgZXZlciBjb3BpZWQgb3V0IHRvIHVzZXJzcGFjZS4gTm8gbmV3IHVzZXItZmFjaW5nIHN0cnVjdHMgYXJlIGNyZWF0ZWQsIG9yIGV4aXN0aW5nIG9uZXMgbW9kaWZpZWQgaW4gYSB3YXkgdGhhdCByaXNrcyBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBpcyBhbGwgYWJvdXQgdGhlIGtlcm5lbCYjMzk7cyBpbnRlcm5hbCBtZW1vcnkgYWNjb3VudGluZy4gIE15IHByaW1hcnkgY29uY2VybiBpcyBhbHdheXMgdW5pbml0aWFsaXplZCBtZW1vcnksIGJ1dCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcmlzayBvZiB0aGF0IGtpbmQuICBNeSB0aG91Z2h0IGlzIHRoYXQgdGhlIHBhdGNoICpjb3JyZWN0cyogYSBidWcgd2hlcmUga2VybmVsLWFsbG9jYXRlZCBwYWdlcyBjb3VsZCBvdXRsaXZlIHRoZWlyIGFzc29jaWF0ZWQgbWVtb3J5IHJlZ2lvbiBhbmQsIGJ5IGV4dGVuc2lvbiwgdGhlIHVzZXIgc3BhY2UgbWFwcGluZywgYW5kIHNvIHRoZSBhY2NvdW50aW5nIHdvdWxkIGJlIGluY29ycmVjdC4KCkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgYmVjYXVzZSBJIHdhbnQgdG8gYmUgKmFic29sdXRlbHkqIHN1cmUuIFRoZSBgaW9fcmVnaW9uX2FjY291bnRgIGFuZCBgaW9fbWFwcGVkX3JlZ2lvbmAgc3RydWN0cyB0aGVtc2VsdmVzIGFyZSBpbnRlcm5hbC4gVGhlIGBpb19jcmVhdGVfcmVnaW9uYCBmdW5jdGlvbiB1c2VzIGEgYHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcmAsIHdoaWNoIGlzIGFsc28gaW50ZXJuYWwuICBXZSYjMzk7cmUgYWRkaW5nIHRoaXMgYG1yLSZndDthY2NvdW50YCBhbmQgaW5pdGlhbGl6aW5nIGl0LiBObyBleHRlcm5hbCBzdHJ1Y3RzIGFyZSBjaGFuZ2VkLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyBoZXJlIHRoYXQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGlzIHBhdGNoIGlzIGp1c3QgbWVtb3J5IGFjY291bnRpbmcgbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIHRoYXQgaXMsIGl0IGlzIGZpeGluZyBhIGxlYWsuIEtBU0FOIHdvdWxkIGRlZmluaXRlbHkgY2F0Y2ggdXNlLWFmdGVyLWZyZWUgaXNzdWVzIGhlcmUsIGlmIGFueSBleGlzdGVkLiBLTVNBTiB3b3VsZG4mIzM5O3QgYXBwbHkgaGVyZS4KCk9rYXksIGxldCYjMzk7cyBqdXN0IGRvIGEgcXVpY2sgc2NhbiBvZiB0aGUgY29kZSBhZ2FpbiwganVzdCB0byBiZSB0aG9yb3VnaDogWXVwLCBgYWNjb3VudGAgaXMgYSBwb2ludGVyLCB0aGF0IGlzIGluaXRpYWxpemVkLiBUaGUgYGlvX3JlZ2lvbl9hY2NvdW50X2FsbG9jYCBmdW5jdGlvbiBpbml0aWFsaXplcyBldmVyeSBmaWVsZCBiZWZvcmUgcmV0dXJuaW5nIHRoZSBhY2NvdW50LiBHb29kLiBUaGVuIGluIGNsZWFudXAgZnVuY3Rpb25zIHRoZSBgYWNjb3VudGAgaXMgZGUtcmVmZXJlbmNlZCBhbmQgemVyb2VkLiBBbmQgZmluYWxseSBhIGNoZWNrIGVuc3VyZXMgdGhhdCB0aGUgcmVnaW9uIGhhcyBiZWVuIGluaXRpYWxpemVkLiBTdGFuZGFyZCBWTUEgb3BlcmF0aW9ucyBhcmUgY29ycmVjdGx5IGNhbGxlZDogYGlvX3JlZ2lvbl92bV9vcGVuYC4KCkkmIzM5O20gY29uZmlkZW50LiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIHRvIHVzZXJzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFRoaXMgaXMgYSBtZW1vcnkgYWNjb3VudGluZyBmaXguIE5vIG5lZWQgZm9yIEtNU0FOLiBUaGUgcmVhc29uaW5nIGlzIHRoYXQgdGhlIG5ldyBgaW9fcmVnaW9uX2FjY291bnRgIHN0cnVjdCB0cmFja3MgbWVtb3J5IGFjcm9zcyBWTUEgbGlmZWN5Y2xlcyBhbmQgZXZlcnkgZmllbGQgaXMgaW5pdGlhbGl6ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDA3OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgaW50ZXJuYWwgc3RydWN0dXJlIGBpb19yZWdpb25fYWNjb3VudGAgdG8gdHJhY2sgbWVtb3J5IGFjY291bnRpbmcgZm9yIGlvX3VyaW5nIG1lbW9yeSByZWdpb25zIGFjcm9zcyBWTUEgbGlmZWN5Y2xlcy4gVGhlIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgaW50ZXJuYWxseSBhbmQgYWxsIGl0cyBmaWVsZHMgKGByZWZzYCwgYHVzZXJgLCBgbnJfcGFnZXNgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZXhwb3NlZCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGFkZHJlc3MgbWVtb3J5IGFjY291bnRpbmcgYW5kIG9iamVjdCBsaWZlY3ljbGVzLCB3aGVyZSBhbnkgcG90ZW50aWFsIGJ1Z3MgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgbWVtb3J5IGxlYWtzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIG1lbW9yeSBsZWFrIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBpbnRlcm5hbCBzdHJ1Y3R1cmUgYGlvX3JlZ2lvbl9hY2NvdW50YCB0byB0cmFjayBtZW1vcnkgYWNjb3VudGluZyBmb3IgaW9fdXJpbmcgbWVtb3J5IHJlZ2lvbnMgYWNyb3NzIFZNQSBsaWZlY3ljbGVzLiBUaGUgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCBpbnRlcm5hbGx5IGFuZCBhbGwgaXRzIGZpZWxkcyAoYHJlZnNgLCBgdXNlcmAsIGBucl9wYWdlc2ApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBleHBvc2VkIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgYWRkcmVzcyBtZW1vcnkgYWNjb3VudGluZyBhbmQgb2JqZWN0IGxpZmVjeWNsZXMsIHdoZXJlIGFueSBwb3RlbnRpYWwgYnVncyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVha3MpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgbWVtb3J5IGxlYWsgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDA3OjI5OjM1LjUyNTI0MTEyN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MTI0MzkwMzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9fY3JlYXRlX3JlZ2lvblwiLFxuICAgIFwiaW9fZnJlZV9yZWdpb25cIixcbiAgICBcImlvX3VyaW5nX21tYXBcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgaW50ZXJuYWwgc3RydWN0dXJlIGBpb19yZWdpb25fYWNjb3VudGAgdG8gdHJhY2sgbWVtb3J5IGFjY291bnRpbmcgZm9yIGlvX3VyaW5nIG1lbW9yeSByZWdpb25zIGFjcm9zcyBWTUEgbGlmZWN5Y2xlcy4gVGhlIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgaW50ZXJuYWxseSBhbmQgYWxsIGl0cyBmaWVsZHMgKGByZWZzYCwgYHVzZXJgLCBgbnJfcGFnZXNgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZXhwb3NlZCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGFkZHJlc3MgbWVtb3J5IGFjY291bnRpbmcgYW5kIG9iamVjdCBsaWZlY3ljbGVzLCB3aGVyZSBhbnkgcG90ZW50aWFsIGJ1Z3MgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgbWVtb3J5IGxlYWtzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIG1lbW9yeSBsZWFrIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBhY2NvdW50aW5nIGFuZCBtYXBwaW5nIGxvZ2ljIGZvciBpb191cmluZyByZWdpb25zLCBpbnRyb2R1Y2luZyBgc3RydWN0IGlvX3JlZ2lvbl9hY2NvdW50YCBhbmQgY2hhbmdpbmcgaG93IG1lbW9yeSBpcyBhY2NvdW50ZWQgYW5kIGZyZWVkLiBUaGlzIGFmZmVjdHMgYGlvX2NyZWF0ZV9yZWdpb25gLCBgaW9fZnJlZV9yZWdpb25gLCBhbmQgYGlvX3VyaW5nX21tYXBgLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwNzoyOTozNS41MjUyNDY1MjdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTQ0NzkwNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzNTEyOTQ3YzBkMzYwMjRlZmQ1MTE5ZmViNTk0MWQ1YWEwZGZkNDMwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDE2IDA3OjI5OjMzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW9fdXJpbmdfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvaW9fdXJpbmdfdHlwZXMuaFxcbmluZGV4IDg3MTUxYTViNjJjMWIuLjZmZWI3ZWUzNDQwZmQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9pb191cmluZ190eXBlcy5oXFxuQEAgLTk0LDExICs5NCwxNCBAQCBzdHJ1Y3QgaW9faGFzaF90YWJsZSB7XFxuIFxcdHVuc2lnbmVkXFx0XFx0aGFzaF9iaXRzO1xcbiB9O1xcbiBcXG4rc3RydWN0IGlvX3JlZ2lvbl9hY2NvdW50O1xcbitcXG4gc3RydWN0IGlvX21hcHBlZF9yZWdpb24ge1xcbiBcXHRzdHJ1Y3QgcGFnZVxcdFxcdCoqcGFnZXM7XFxuIFxcdHZvaWRcXHRcXHRcXHQqcHRyO1xcbiBcXHR1bnNpZ25lZFxcdFxcdG5yX3BhZ2VzO1xcbiBcXHR1bnNpZ25lZFxcdFxcdGZsYWdzO1xcbitcXHRzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnRcXHQqYWNjb3VudDtcXG4gfTtcXG4gXFxuIC8qXFxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL21lbW1hcC5jIGIvaW9fdXJpbmcvbWVtbWFwLmNcXG5pbmRleCAyM2U4YTg1MTExYmNhLi5jYTI4YTk0MjljMTY4IDEwMDY0NFxcbi0tLSBhL2lvX3VyaW5nL21lbW1hcC5jXFxuKysrIGIvaW9fdXJpbmcvbWVtbWFwLmNcXG5AQCAtNCw2ICs0LDggQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Vycm5vLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW1hbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcmVmY291bnQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL3VzZXIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvX3VyaW5nLmhcXHUwMDNlXFxuQEAgLTg4LDYgKzkwLDUyIEBAIGVudW0ge1xcbiBcXHRJT19SRUdJT05fRl9TSU5HTEVfUkVGXFx0XFx0XFx0PSA0LFxcbiB9O1xcbiBcXG4rc3RydWN0IGlvX3JlZ2lvbl9hY2NvdW50IHtcXG4rXFx0cmVmY291bnRfdCByZWZzO1xcbitcXHRzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXI7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXM7XFxuK307XFxuK1xcbitzdGF0aWMgc3RydWN0IGlvX3JlZ2lvbl9hY2NvdW50ICpcXG4raW9fcmVnaW9uX2FjY291bnRfYWxsb2Moc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbit7XFxuK1xcdHN0cnVjdCBpb19yZWdpb25fYWNjb3VudCAqYWNjb3VudDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICghdXNlcilcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRhY2NvdW50ID0ga21hbGxvY19vYmooKmFjY291bnQsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuK1xcdGlmICghYWNjb3VudClcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuK1xcbitcXHRyZXQgPSBfX2lvX2FjY291bnRfbWVtKHVzZXIsIG5yX3BhZ2VzKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRrZnJlZShhY2NvdW50KTtcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4rXFx0fVxcbitcXG4rXFx0cmVmY291bnRfc2V0KFxcdTAwMjZhY2NvdW50LVxcdTAwM2VyZWZzLCAxKTtcXG4rXFx0YWNjb3VudC1cXHUwMDNldXNlciA9IGdldF91aWQodXNlcik7XFxuK1xcdGFjY291bnQtXFx1MDAzZW5yX3BhZ2VzID0gbnJfcGFnZXM7XFxuK1xcdHJldHVybiBhY2NvdW50O1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpb19yZWdpb25fYWNjb3VudF9nZXQoc3RydWN0IGlvX3JlZ2lvbl9hY2NvdW50ICphY2NvdW50KVxcbit7XFxuK1xcdGlmIChhY2NvdW50KVxcbitcXHRcXHRyZWZjb3VudF9pbmMoXFx1MDAyNmFjY291bnQtXFx1MDAzZXJlZnMpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpb19yZWdpb25fYWNjb3VudF9wdXQoc3RydWN0IGlvX3JlZ2lvbl9hY2NvdW50ICphY2NvdW50KVxcbit7XFxuK1xcdGlmIChhY2NvdW50IFxcdTAwMjZcXHUwMDI2IHJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2YWNjb3VudC1cXHUwMDNlcmVmcykpIHtcXG4rXFx0XFx0X19pb191bmFjY291bnRfbWVtKGFjY291bnQtXFx1MDAzZXVzZXIsIGFjY291bnQtXFx1MDAzZW5yX3BhZ2VzKTtcXG4rXFx0XFx0ZnJlZV91aWQoYWNjb3VudC1cXHUwMDNldXNlcik7XFxuK1xcdFxcdGtmcmVlKGFjY291bnQpO1xcbitcXHR9XFxuK31cXG4rXFxuIHZvaWQgaW9fZnJlZV9yZWdpb24oc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyLCBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIpXFxuIHtcXG4gXFx0aWYgKG1yLVxcdTAwM2VwYWdlcykge1xcbkBAIC0xMDUsOCArMTUzLDEyIEBAIHZvaWQgaW9fZnJlZV9yZWdpb24oc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyLCBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIpXFxuIFxcdH1cXG4gXFx0aWYgKChtci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT19SRUdJT05fRl9WTUFQKSBcXHUwMDI2XFx1MDAyNiBtci1cXHUwMDNlcHRyKVxcbiBcXHRcXHR2dW5tYXAobXItXFx1MDAzZXB0cik7XFxuLVxcdGlmIChtci1cXHUwMDNlbnJfcGFnZXMgXFx1MDAyNlxcdTAwMjYgdXNlcilcXG4rXFx0aWYgKG1yLVxcdTAwM2VhY2NvdW50KSB7XFxuK1xcdFxcdFdBUk5fT05fT05DRShtci1cXHUwMDNlYWNjb3VudC1cXHUwMDNldXNlciAhPSB1c2VyKTtcXG4rXFx0XFx0aW9fcmVnaW9uX2FjY291bnRfcHV0KG1yLVxcdTAwM2VhY2NvdW50KTtcXG4rXFx0fSBlbHNlIGlmIChtci1cXHUwMDNlbnJfcGFnZXMgXFx1MDAyNlxcdTAwMjYgdXNlcikge1xcbiBcXHRcXHRfX2lvX3VuYWNjb3VudF9tZW0odXNlciwgbXItXFx1MDAzZW5yX3BhZ2VzKTtcXG4rXFx0fVxcbiBcXG4gXFx0bWVtc2V0KG1yLCAwLCBzaXplb2YoKm1yKSk7XFxuIH1cXG5AQCAtMTg4LDcgKzI0MCw4IEBAIGludCBpb19jcmVhdGVfcmVnaW9uKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXFxuIFxcdGludCBucl9wYWdlcywgcmV0O1xcbiBcXHR1NjQgZW5kO1xcbiBcXG4tXFx0aWYgKFdBUk5fT05fT05DRShtci1cXHUwMDNlcGFnZXMgfHwgbXItXFx1MDAzZXB0ciB8fCBtci1cXHUwMDNlbnJfcGFnZXMpKVxcbitcXHRpZiAoV0FSTl9PTl9PTkNFKG1yLVxcdTAwM2VwYWdlcyB8fCBtci1cXHUwMDNlcHRyIHx8IG1yLVxcdTAwM2Vucl9wYWdlcyB8fFxcbitcXHRcXHRcXHQgbXItXFx1MDAzZWFjY291bnQpKVxcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gXFx0aWYgKG1lbWNocl9pbnYoXFx1MDAyNnJlZy1cXHUwMDNlX19yZXN2LCAwLCBzaXplb2YocmVnLVxcdTAwM2VfX3Jlc3YpKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuQEAgLTIwNywxMCArMjYwLDIzIEBAIGludCBpb19jcmVhdGVfcmVnaW9uKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXFxuIFxcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbiBcXG4gXFx0bnJfcGFnZXMgPSByZWctXFx1MDAzZXNpemUgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4tXFx0aWYgKGN0eC1cXHUwMDNldXNlcikge1xcbi1cXHRcXHRyZXQgPSBfX2lvX2FjY291bnRfbWVtKGN0eC1cXHUwMDNldXNlciwgbnJfcGFnZXMpO1xcbi1cXHRcXHRpZiAocmV0KVxcbitcXHRpZiAocmVnLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPUklOR19NRU1fUkVHSU9OX1RZUEVfVVNFUikge1xcbitcXHRcXHRpZiAoY3R4LVxcdTAwM2V1c2VyKSB7XFxuK1xcdFxcdFxcdHJldCA9IF9faW9fYWNjb3VudF9tZW0oY3R4LVxcdTAwM2V1c2VyLCBucl9wYWdlcyk7XFxuK1xcdFxcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdH1cXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogS2VybmVsLWFsbG9jYXRlZCBwYWdlcyBjYW4gb3V0bGl2ZSB0aGVpciBhY3RpdmUgcmVnaW9uIHRocm91Z2hcXG4rXFx0XFx0ICogdXNlcnNwYWNlIG1hcHBpbmdzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0bXItXFx1MDAzZWFjY291bnQgPSBpb19yZWdpb25fYWNjb3VudF9hbGxvYyhjdHgtXFx1MDAzZXVzZXIsIG5yX3BhZ2VzKTtcXG4rXFx0XFx0aWYgKElTX0VSUihtci1cXHUwMDNlYWNjb3VudCkpIHtcXG4rXFx0XFx0XFx0cmV0ID0gUFRSX0VSUihtci1cXHUwMDNlYWNjb3VudCk7XFxuK1xcdFxcdFxcdG1yLVxcdTAwM2VhY2NvdW50ID0gTlVMTDtcXG4gXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcdG1yLVxcdTAwM2Vucl9wYWdlcyA9IG5yX3BhZ2VzO1xcbiBcXG5AQCAtMjgxLDE1ICszNDcsNDEgQEAgc3RhdGljIHZvaWQgKmlvX3VyaW5nX3ZhbGlkYXRlX21tYXBfcmVxdWVzdChzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHBnb2ZmKVxcbiBcXG4gI2lmZGVmIENPTkZJR19NTVVcXG4gXFxuK3N0YXRpYyB2b2lkIGlvX3JlZ2lvbl92bV9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbit7XFxuK1xcdGlvX3JlZ2lvbl9hY2NvdW50X2dldCh2bWEtXFx1MDAzZXZtX3ByaXZhdGVfZGF0YSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGlvX3JlZ2lvbl92bV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4re1xcbitcXHRpb19yZWdpb25fYWNjb3VudF9wdXQodm1hLVxcdTAwM2V2bV9wcml2YXRlX2RhdGEpO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGlvX3JlZ2lvbl92bV9vcHMgPSB7XFxuK1xcdC5vcGVuID0gaW9fcmVnaW9uX3ZtX29wZW4sXFxuK1xcdC5jbG9zZSA9IGlvX3JlZ2lvbl92bV9jbG9zZSxcXG4rfTtcXG4rXFxuIHN0YXRpYyBpbnQgaW9fcmVnaW9uX21tYXAoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuIFxcdFxcdFxcdCAgc3RydWN0IGlvX21hcHBlZF9yZWdpb24gKm1yLFxcbiBcXHRcXHRcXHQgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHRcXHQgIHVuc2lnbmVkIG1heF9wYWdlcylcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gbWluKG1yLVxcdTAwM2Vucl9wYWdlcywgbWF4X3BhZ2VzKTtcXG4rXFx0aW50IHJldDtcXG4gXFxuIFxcdHZtX2ZsYWdzX3NldCh2bWEsIFZNX0RPTlRFWFBBTkQpO1xcbi1cXHRyZXR1cm4gdm1faW5zZXJ0X3BhZ2VzKHZtYSwgdm1hLVxcdTAwM2V2bV9zdGFydCwgbXItXFx1MDAzZXBhZ2VzLCBcXHUwMDI2bnJfcGFnZXMpO1xcbitcXHRyZXQgPSB2bV9pbnNlcnRfcGFnZXModm1hLCB2bWEtXFx1MDAzZXZtX3N0YXJ0LCBtci1cXHUwMDNlcGFnZXMsIFxcdTAwMjZucl9wYWdlcyk7XFxuK1xcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2IG1yLVxcdTAwM2VhY2NvdW50KSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEFjY291bnRpbmcgZGVsaWJlcmF0ZWx5IHJlbWFpbnMgYXQgcmVnaW9uIGdyYW51bGFyaXR5IHdoZW5cXG4rXFx0XFx0ICogdGhpcyBWTUEgbWFwcyBvbmx5IHBhcnQgb2YgdGhlIHJlZ2lvbi5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHZtYS1cXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gbXItXFx1MDAzZWFjY291bnQ7XFxuK1xcdFxcdHZtYS1cXHUwMDNldm1fb3BzID0gXFx1MDAyNmlvX3JlZ2lvbl92bV9vcHM7XFxuK1xcdFxcdHZtYS1cXHUwMDNldm1fb3BzLVxcdTAwM2VvcGVuKHZtYSk7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gX19jb2xkIGludCBpb191cmluZ19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5AQCAtMzc5LDYgKzQ3MSw4IEBAIHN0YXRpYyB2b2lkIGlvX3VyaW5nX25vbW11X3ZtX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiBcXG4gXFx0Zm9yIChpbmRleCA9IHZtYS1cXHUwMDNldm1fc3RhcnQ7IGluZGV4IFxcdTAwM2Mgdm1hLVxcdTAwM2V2bV9lbmQ7IGluZGV4ICs9IFBBR0VfU0laRSlcXG4gXFx0XFx0cHV0X3BhZ2UodmlydF90b19wYWdlKCh2b2lkICopIGluZGV4KSk7XFxuK1xcbitcXHRpb19yZWdpb25fYWNjb3VudF9wdXQodm1hLVxcdTAwM2V2bV9wcml2YXRlX2RhdGEpO1xcbiB9XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGlvX3VyaW5nX25vbW11X3ZtX29wcyA9IHtcXG5AQCAtNDExLDYgKzUwNSw4IEBAIGludCBpb191cmluZ19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHJlZ2lvbi1cXHUwMDNlbnJfcGFnZXM7IGkrKylcXG4gXFx0XFx0Z2V0X3BhZ2UocmVnaW9uLVxcdTAwM2VwYWdlc1tpXSk7XFxuIFxcbitcXHR2bWEtXFx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IHJlZ2lvbi1cXHUwMDNlYWNjb3VudDtcXG4rXFx0aW9fcmVnaW9uX2FjY291bnRfZ2V0KHJlZ2lvbi1cXHUwMDNlYWNjb3VudCk7XFxuIFxcdHZtYS1cXHUwMDNldm1fb3BzID0gXFx1MDAyNmlvX3VyaW5nX25vbW11X3ZtX29wcztcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDc6Mjk6MzYuOTIwMzk3MzM0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjM2MjM5NTgxMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb19jcmVhdGVfcmVnaW9uXCIsXG4gICAgXCJpb19mcmVlX3JlZ2lvblwiLFxuICAgIFwiaW9fdXJpbmdfbW1hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBhY2NvdW50aW5nIGFuZCBtYXBwaW5nIGxvZ2ljIGZvciBpb191cmluZyByZWdpb25zLCBpbnRyb2R1Y2luZyBgc3RydWN0IGlvX3JlZ2lvbl9hY2NvdW50YCBhbmQgY2hhbmdpbmcgaG93IG1lbW9yeSBpcyBhY2NvdW50ZWQgYW5kIGZyZWVkLiBUaGlzIGFmZmVjdHMgYGlvX2NyZWF0ZV9yZWdpb25gLCBgaW9fZnJlZV9yZWdpb25gLCBhbmQgYGlvX3VyaW5nX21tYXBgLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzNTEyOTQ3YzBkMzYwMjRlZmQ1MTE5ZmViNTk0MWQ1YWEwZGZkNDMwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMTYgMDc6Mjk6MzMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmhcbmluZGV4IDg3MTUxYTViNjJjMWIuLjZmZWI3ZWUzNDQwZmQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvaW9fdXJpbmdfdHlwZXMuaFxuQEAgLTk0LDExICs5NCwxNCBAQCBzdHJ1Y3QgaW9faGFzaF90YWJsZSB7XG4gXHR1bnNpZ25lZFx0XHRoYXNoX2JpdHM7XG4gfTtcbiBcbitzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnQ7XG4rXG4gc3RydWN0IGlvX21hcHBlZF9yZWdpb24ge1xuIFx0c3RydWN0IHBhZ2VcdFx0KipwYWdlcztcbiBcdHZvaWRcdFx0XHQqcHRyO1xuIFx0dW5zaWduZWRcdFx0bnJfcGFnZXM7XG4gXHR1bnNpZ25lZFx0XHRmbGFncztcbitcdHN0cnVjdCBpb19yZWdpb25fYWNjb3VudFx0KmFjY291bnQ7XG4gfTtcbiBcbiAvKlxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL21lbW1hcC5jIGIvaW9fdXJpbmcvbWVtbWFwLmNcbmluZGV4IDIzZThhODUxMTFiY2EuLmNhMjhhOTQyOWMxNjggMTAwNjQ0XG4tLS0gYS9pb191cmluZy9tZW1tYXAuY1xuKysrIGIvaW9fdXJpbmcvbWVtbWFwLmNcbkBAIC00LDYgKzQsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vycm5vLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW1hbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcmVmY291bnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3VzZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvX3VyaW5nLmhcdTAwM2VcbkBAIC04OCw2ICs5MCw1MiBAQCBlbnVtIHtcbiBcdElPX1JFR0lPTl9GX1NJTkdMRV9SRUZcdFx0XHQ9IDQsXG4gfTtcbiBcbitzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnQge1xuK1x0cmVmY291bnRfdCByZWZzO1xuK1x0c3RydWN0IHVzZXJfc3RydWN0ICp1c2VyO1xuK1x0dW5zaWduZWQgbG9uZyBucl9wYWdlcztcbit9O1xuK1xuK3N0YXRpYyBzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnQgKlxuK2lvX3JlZ2lvbl9hY2NvdW50X2FsbG9jKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbit7XG4rXHRzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnQgKmFjY291bnQ7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCF1c2VyKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdGFjY291bnQgPSBrbWFsbG9jX29iaigqYWNjb3VudCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbitcdGlmICghYWNjb3VudClcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXG4rXHRyZXQgPSBfX2lvX2FjY291bnRfbWVtKHVzZXIsIG5yX3BhZ2VzKTtcbitcdGlmIChyZXQpIHtcbitcdFx0a2ZyZWUoYWNjb3VudCk7XG4rXHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4rXHR9XG4rXG4rXHRyZWZjb3VudF9zZXQoXHUwMDI2YWNjb3VudC1cdTAwM2VyZWZzLCAxKTtcbitcdGFjY291bnQtXHUwMDNldXNlciA9IGdldF91aWQodXNlcik7XG4rXHRhY2NvdW50LVx1MDAzZW5yX3BhZ2VzID0gbnJfcGFnZXM7XG4rXHRyZXR1cm4gYWNjb3VudDtcbit9XG4rXG4rc3RhdGljIHZvaWQgaW9fcmVnaW9uX2FjY291bnRfZ2V0KHN0cnVjdCBpb19yZWdpb25fYWNjb3VudCAqYWNjb3VudClcbit7XG4rXHRpZiAoYWNjb3VudClcbitcdFx0cmVmY291bnRfaW5jKFx1MDAyNmFjY291bnQtXHUwMDNlcmVmcyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGlvX3JlZ2lvbl9hY2NvdW50X3B1dChzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnQgKmFjY291bnQpXG4re1xuK1x0aWYgKGFjY291bnQgXHUwMDI2XHUwMDI2IHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZhY2NvdW50LVx1MDAzZXJlZnMpKSB7XG4rXHRcdF9faW9fdW5hY2NvdW50X21lbShhY2NvdW50LVx1MDAzZXVzZXIsIGFjY291bnQtXHUwMDNlbnJfcGFnZXMpO1xuK1x0XHRmcmVlX3VpZChhY2NvdW50LVx1MDAzZXVzZXIpO1xuK1x0XHRrZnJlZShhY2NvdW50KTtcbitcdH1cbit9XG4rXG4gdm9pZCBpb19mcmVlX3JlZ2lvbihzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIsIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcilcbiB7XG4gXHRpZiAobXItXHUwMDNlcGFnZXMpIHtcbkBAIC0xMDUsOCArMTUzLDEyIEBAIHZvaWQgaW9fZnJlZV9yZWdpb24oc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyLCBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIpXG4gXHR9XG4gXHRpZiAoKG1yLVx1MDAzZWZsYWdzIFx1MDAyNiBJT19SRUdJT05fRl9WTUFQKSBcdTAwMjZcdTAwMjYgbXItXHUwMDNlcHRyKVxuIFx0XHR2dW5tYXAobXItXHUwMDNlcHRyKTtcbi1cdGlmIChtci1cdTAwM2Vucl9wYWdlcyBcdTAwMjZcdTAwMjYgdXNlcilcbitcdGlmIChtci1cdTAwM2VhY2NvdW50KSB7XG4rXHRcdFdBUk5fT05fT05DRShtci1cdTAwM2VhY2NvdW50LVx1MDAzZXVzZXIgIT0gdXNlcik7XG4rXHRcdGlvX3JlZ2lvbl9hY2NvdW50X3B1dChtci1cdTAwM2VhY2NvdW50KTtcbitcdH0gZWxzZSBpZiAobXItXHUwMDNlbnJfcGFnZXMgXHUwMDI2XHUwMDI2IHVzZXIpIHtcbiBcdFx0X19pb191bmFjY291bnRfbWVtKHVzZXIsIG1yLVx1MDAzZW5yX3BhZ2VzKTtcbitcdH1cbiBcbiBcdG1lbXNldChtciwgMCwgc2l6ZW9mKCptcikpO1xuIH1cbkBAIC0xODgsNyArMjQwLDggQEAgaW50IGlvX2NyZWF0ZV9yZWdpb24oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcbiBcdGludCBucl9wYWdlcywgcmV0O1xuIFx0dTY0IGVuZDtcbiBcbi1cdGlmIChXQVJOX09OX09OQ0UobXItXHUwMDNlcGFnZXMgfHwgbXItXHUwMDNlcHRyIHx8IG1yLVx1MDAzZW5yX3BhZ2VzKSlcbitcdGlmIChXQVJOX09OX09OQ0UobXItXHUwMDNlcGFnZXMgfHwgbXItXHUwMDNlcHRyIHx8IG1yLVx1MDAzZW5yX3BhZ2VzIHx8XG4rXHRcdFx0IG1yLVx1MDAzZWFjY291bnQpKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdGlmIChtZW1jaHJfaW52KFx1MDAyNnJlZy1cdTAwM2VfX3Jlc3YsIDAsIHNpemVvZihyZWctXHUwMDNlX19yZXN2KSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTIwNywxMCArMjYwLDIzIEBAIGludCBpb19jcmVhdGVfcmVnaW9uKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXG4gXHRcdHJldHVybiAtRU9WRVJGTE9XO1xuIFxuIFx0bnJfcGFnZXMgPSByZWctXHUwMDNlc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbi1cdGlmIChjdHgtXHUwMDNldXNlcikge1xuLVx0XHRyZXQgPSBfX2lvX2FjY291bnRfbWVtKGN0eC1cdTAwM2V1c2VyLCBucl9wYWdlcyk7XG4tXHRcdGlmIChyZXQpXG4rXHRpZiAocmVnLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfTUVNX1JFR0lPTl9UWVBFX1VTRVIpIHtcbitcdFx0aWYgKGN0eC1cdTAwM2V1c2VyKSB7XG4rXHRcdFx0cmV0ID0gX19pb19hY2NvdW50X21lbShjdHgtXHUwMDNldXNlciwgbnJfcGFnZXMpO1xuK1x0XHRcdGlmIChyZXQpXG4rXHRcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHQvKlxuK1x0XHQgKiBLZXJuZWwtYWxsb2NhdGVkIHBhZ2VzIGNhbiBvdXRsaXZlIHRoZWlyIGFjdGl2ZSByZWdpb24gdGhyb3VnaFxuK1x0XHQgKiB1c2Vyc3BhY2UgbWFwcGluZ3MuXG4rXHRcdCAqL1xuK1x0XHRtci1cdTAwM2VhY2NvdW50ID0gaW9fcmVnaW9uX2FjY291bnRfYWxsb2MoY3R4LVx1MDAzZXVzZXIsIG5yX3BhZ2VzKTtcbitcdFx0aWYgKElTX0VSUihtci1cdTAwM2VhY2NvdW50KSkge1xuK1x0XHRcdHJldCA9IFBUUl9FUlIobXItXHUwMDNlYWNjb3VudCk7XG4rXHRcdFx0bXItXHUwMDNlYWNjb3VudCA9IE5VTEw7XG4gXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0fVxuIFx0fVxuIFx0bXItXHUwMDNlbnJfcGFnZXMgPSBucl9wYWdlcztcbiBcbkBAIC0yODEsMTUgKzM0Nyw0MSBAQCBzdGF0aWMgdm9pZCAqaW9fdXJpbmdfdmFsaWRhdGVfbW1hcF9yZXF1ZXN0KHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3QgcGdvZmYpXG4gXG4gI2lmZGVmIENPTkZJR19NTVVcbiBcbitzdGF0aWMgdm9pZCBpb19yZWdpb25fdm1fb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbit7XG4rXHRpb19yZWdpb25fYWNjb3VudF9nZXQodm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGlvX3JlZ2lvbl92bV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbit7XG4rXHRpb19yZWdpb25fYWNjb3VudF9wdXQodm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSk7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaW9fcmVnaW9uX3ZtX29wcyA9IHtcbitcdC5vcGVuID0gaW9fcmVnaW9uX3ZtX29wZW4sXG4rXHQuY2xvc2UgPSBpb19yZWdpb25fdm1fY2xvc2UsXG4rfTtcbitcbiBzdGF0aWMgaW50IGlvX3JlZ2lvbl9tbWFwKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuIFx0XHRcdCAgc3RydWN0IGlvX21hcHBlZF9yZWdpb24gKm1yLFxuIFx0XHRcdCAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0ICB1bnNpZ25lZCBtYXhfcGFnZXMpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IG1pbihtci1cdTAwM2Vucl9wYWdlcywgbWF4X3BhZ2VzKTtcbitcdGludCByZXQ7XG4gXG4gXHR2bV9mbGFnc19zZXQodm1hLCBWTV9ET05URVhQQU5EKTtcbi1cdHJldHVybiB2bV9pbnNlcnRfcGFnZXModm1hLCB2bWEtXHUwMDNldm1fc3RhcnQsIG1yLVx1MDAzZXBhZ2VzLCBcdTAwMjZucl9wYWdlcyk7XG4rXHRyZXQgPSB2bV9pbnNlcnRfcGFnZXModm1hLCB2bWEtXHUwMDNldm1fc3RhcnQsIG1yLVx1MDAzZXBhZ2VzLCBcdTAwMjZucl9wYWdlcyk7XG4rXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgbXItXHUwMDNlYWNjb3VudCkge1xuK1x0XHQvKlxuK1x0XHQgKiBBY2NvdW50aW5nIGRlbGliZXJhdGVseSByZW1haW5zIGF0IHJlZ2lvbiBncmFudWxhcml0eSB3aGVuXG4rXHRcdCAqIHRoaXMgVk1BIG1hcHMgb25seSBwYXJ0IG9mIHRoZSByZWdpb24uXG4rXHRcdCAqL1xuK1x0XHR2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gbXItXHUwMDNlYWNjb3VudDtcbitcdFx0dm1hLVx1MDAzZXZtX29wcyA9IFx1MDAyNmlvX3JlZ2lvbl92bV9vcHM7XG4rXHRcdHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlb3Blbih2bWEpO1xuK1x0fVxuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gX19jb2xkIGludCBpb191cmluZ19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbkBAIC0zNzksNiArNDcxLDggQEAgc3RhdGljIHZvaWQgaW9fdXJpbmdfbm9tbXVfdm1fY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gXG4gXHRmb3IgKGluZGV4ID0gdm1hLVx1MDAzZXZtX3N0YXJ0OyBpbmRleCBcdTAwM2Mgdm1hLVx1MDAzZXZtX2VuZDsgaW5kZXggKz0gUEFHRV9TSVpFKVxuIFx0XHRwdXRfcGFnZSh2aXJ0X3RvX3BhZ2UoKHZvaWQgKikgaW5kZXgpKTtcbitcbitcdGlvX3JlZ2lvbl9hY2NvdW50X3B1dCh2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhKTtcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBpb191cmluZ19ub21tdV92bV9vcHMgPSB7XG5AQCAtNDExLDYgKzUwNSw4IEBAIGludCBpb191cmluZ19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHJlZ2lvbi1cdTAwM2Vucl9wYWdlczsgaSsrKVxuIFx0XHRnZXRfcGFnZShyZWdpb24tXHUwMDNlcGFnZXNbaV0pO1xuIFxuK1x0dm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IHJlZ2lvbi1cdTAwM2VhY2NvdW50O1xuK1x0aW9fcmVnaW9uX2FjY291bnRfZ2V0KHJlZ2lvbi1cdTAwM2VhY2NvdW50KTtcbiBcdHZtYS1cdTAwM2V2bV9vcHMgPSBcdTAwMjZpb191cmluZ19ub21tdV92bV9vcHM7XG4gXHRyZXR1cm4gMDtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwNzoyOTozNi45MjAzOTg2OTRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODQxMDU1OTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGlvX3VyaW5nIE1lbW9yeSBBY2NvdW50aW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgbWVtb3J5IGFjY291bnRpbmcgd2l0aGluIGBpb191cmluZy9tZW1tYXAuY2AgYW5kIGBpbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmhgLiBJdCBzZWVtcyB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGludHJvZHVjdGlvbiBvZiB0aGlzIGBzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnRgIGFuZCBhIHJlZmFjdG9yIG9mIGhvdyBgaW9fbWFwcGVkX3JlZ2lvbmAgbWVtb3J5IGlzIHRyYWNrZWQuIFRoZSBwYXRjaCBpcyBhZGRpbmcgYGlvX3JlZ2lvbl9hY2NvdW50X2FsbG9jYCwgYGlvX3JlZ2lvbl9hY2NvdW50X2dldGAsIGFuZCBgaW9fcmVnaW9uX2FjY291bnRfcHV0YCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGlzIGFib3V0IHJlZmVyZW5jZSBjb3VudGluZyBvciBhIHNpbWlsYXIgbWVjaGFuaXNtIGZvciBtYW5hZ2luZyB0aGUgbGlmZXRpbWUgb2YgdGhlc2UgcmVnaW9ucy4gSXQncyBhbHNvIG1vZGlmeWluZyBgaW9fZnJlZV9yZWdpb25gLCBgaW9fY3JlYXRlX3JlZ2lvbmAsIGFuZCBib3RoIGBpb19yZWdpb25fbW1hcGAgYW5kIHRoZSBgaW9fdXJpbmdfbW1hcGAgZm9yIG5vbW11IHN5c3RlbXMuXG5cblRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGl0IGdvZXMgcmlnaHQgdG8gdGhlIGhlYXJ0IG9mIGhvdyBpb191cmluZyBtYW5hZ2VzIG1lbW9yeSBtYXBwaW5nLiBHaXZlbiB0aGF0LCBpdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGNvZGUgYW5kIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMuIEZyb20gd2hhdCBJIHNlZSBub3csIGBpb19jcmVhdGVfcmVnaW9uYCwgYGlvX2ZyZWVfcmVnaW9uYCwgYW5kIGBpb191cmluZ19tbWFwYCBhcmUgZ29pbmcgdG8gYmUgbXkgcHJpbWFyeSB0YXJnZXRzLlxuXG5CZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gd3JpdGluZyB0ZXN0IGNhc2VzLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBPYnZpb3VzbHksIGBDT05GSUdfSU9fVVJJTkdgIGlzIHRoZSBiaWcgb25lLCBidXQgSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdC4gSSdsbCBuZWVkIHRvIGNoZWNrIGVpdGhlciBgaW9fdXJpbmcvS2NvbmZpZ2Agb3IgcG9zc2libHkgZXZlbiBgaW5pdC9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbWlnaHQgYWZmZWN0IHRoZSBiZWhhdmlvciBvZiB0aGVzZSBmdW5jdGlvbnMgb3IgaW50cm9kdWNlIGVkZ2UgY2FzZXMgdGhhdCBJIG5lZWQgdG8gYWNjb3VudCBmb3IuIEkgbmVlZCB0byBiZSBzdXJlIEknbSB0ZXN0aW5nIHRoZSBjb2RlIGFzIGl0IHdvdWxkIGJlIGNvbmZpZ3VyZWQgaW4gdGhlIHJlYWwgd29ybGQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNDAsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwNzoyOTo0Mi43NjE0NTczMDNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4MzgwOTQxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU9fVVJJTkdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE5MTA9Y29uZmlnIEFJT1xcbi0tXFxuaW5pdC9LY29uZmlnLTE5MTctXFxuaW5pdC9LY29uZmlnOjE5MTg6Y29uZmlnIElPX1VSSU5HXFxuaW5pdC9LY29uZmlnLTE5MTktXFx0Ym9vbCBcXFwiRW5hYmxlIElPIHVyaW5nIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbi0tXFxuaW5pdC9LY29uZmlnPTE5Mjc9Y29uZmlnIEdDT1ZfUFJPRklMRV9VUklOR1xcbi0tXFxuaW5pdC9LY29uZmlnLTE5MzktXFxuaW5pdC9LY29uZmlnOjE5NDA6Y29uZmlnIElPX1VSSU5HX01PQ0tfRklMRVxcbmluaXQvS2NvbmZpZy0xOTQxLVxcdHRyaXN0YXRlIFxcXCJFbmFibGUgaW9fdXJpbmcgbW9jayBmaWxlcyAoRXhwZXJpbWVudGFsKVxcXCIgaWYgRVhQRVJUXFxuLS1cXG5pb191cmluZy9LY29uZmlnLTUtXFxuaW9fdXJpbmcvS2NvbmZpZzo2OmNvbmZpZyBJT19VUklOR19aQ1JYXFxuaW9fdXJpbmcvS2NvbmZpZy03LVxcdGRlZl9ib29sIHlcXG4tLVxcbmlvX3VyaW5nL0tjb25maWctMTItXFxuaW9fdXJpbmcvS2NvbmZpZzoxMzpjb25maWcgSU9fVVJJTkdfQlBGXFxuaW9fdXJpbmcvS2NvbmZpZy0xNC1cXHRkZWZfYm9vbCB5XFxuLS1cXG5pb191cmluZy9LY29uZmlnLTE3LVxcbmlvX3VyaW5nL0tjb25maWc6MTg6Y29uZmlnIElPX1VSSU5HX0JQRl9PUFNcXG5pb191cmluZy9LY29uZmlnLTE5LVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDc6Mjk6NDQuNTQ1MjcxMjI3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQwMDQwOTc4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgSU9fVVJJTkcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBhbiBgSU9fVVJJTkdgIGNvbmZpZ3VyYXRpb24gaGVyZS4gUmlnaHQuIE5vdywgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgbWVtb3J5IHJlZ2lvbnMgYXJlIG1hbmFnZWQgd2l0aGluIHRoaXMgY29udGV4dC4gTXkgcHJpbWFyeSBjb25jZXJuIGlzIHdpdGggdGhlIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBzdHJhdGVnaWVzIGZvciBJL08gYnVmZmVycy4gU28sIEkgbmVlZCB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgcm9sZXMgb2YgYGlvX2NyZWF0ZV9yZWdpb25gIGFuZCBgaW9fZnJlZV9yZWdpb25gLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNlbnRyYWwgdG8gdGhlIGludGVncml0eSBhbmQgcGVyZm9ybWFuY2Ugb2YgdGhlIEkvTyBzeXN0ZW0sIGFuZCBJIGhhdmUgdG8gZnVsbHkgZ3Jhc3AgdGhlaXIgaW50ZXJhY3Rpb24uIEkgbmVlZCB0byB0cmFjZSB0aGVpciBpbXBsZW1lbnRhdGlvbiwgdW5kZXJzdGFuZCBhbnkgcG90ZW50aWFsIG92ZXJoZWFkIHRoZXkgaW50cm9kdWNlLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBtYW5hZ2VtZW50IG1lY2hhbmlzbXMuIEVzc2VudGlhbGx5LCBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHJlZ2lvbiBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24gYXJlIHJvYnVzdCBhbmQgb3B0aW1hbGx5IGRlc2lnbmVkLCBhbmQgdGhhdCB0aGVzZSBmdW5jdGlvbnMgZG9uJ3QgYmVjb21lIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTk5LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDc6Mjk6NDguOTQ1NjgzMDE2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDA2OTg3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fY3JlYXRlX3JlZ2lvblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9pb191cmluZy5jPTI3MjY9c3RhdGljIF9fY29sZCBpbnQgaW9fYWxsb2NhdGVfc2NxX3VyaW5ncyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjc0NC1cXHR9XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoyNzQ1OlxcdHJldCA9IGlvX2NyZWF0ZV9yZWdpb24oY3R4LCBcXHUwMDI2Y3R4LVxcdTAwM2VyaW5nX3JlZ2lvbiwgXFx1MDAyNnJkLCBJT1JJTkdfT0ZGX0NRX1JJTkcpO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjc0Ni1cXHRpZiAocmV0KVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yNzU4LVxcdH1cXG5pb191cmluZy9pb191cmluZy5jOjI3NTk6XFx0cmV0ID0gaW9fY3JlYXRlX3JlZ2lvbihjdHgsIFxcdTAwMjZjdHgtXFx1MDAzZXNxX3JlZ2lvbiwgXFx1MDAyNnJkLCBJT1JJTkdfT0ZGX1NRRVMpO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjc2MC1cXHRpZiAocmV0KSB7XFxuLS1cXG5pb191cmluZy9rYnVmLmM9NjI5PWludCBpb19yZWdpc3Rlcl9wYnVmX3Jpbmcoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHZvaWQgX191c2VyICphcmcpXFxuLS1cXG5pb191cmluZy9rYnVmLmMtNjc3LVxcdH1cXG5pb191cmluZy9rYnVmLmM6Njc4OlxcdHJldCA9IGlvX2NyZWF0ZV9yZWdpb24oY3R4LCBcXHUwMDI2YmwtXFx1MDAzZXJlZ2lvbiwgXFx1MDAyNnJkLCBtbWFwX29mZnNldCk7XFxuaW9fdXJpbmcva2J1Zi5jLTY3OS1cXHRpZiAocmV0KVxcbi0tXFxuaW9fdXJpbmcvbWVtbWFwLmM9MjA0PXN0YXRpYyBpbnQgaW9fcmVnaW9uX2FsbG9jYXRlX3BhZ2VzKHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5jLTIzNS1cXG5pb191cmluZy9tZW1tYXAuYzoyMzY6aW50IGlvX2NyZWF0ZV9yZWdpb24oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcXG5pb191cmluZy9tZW1tYXAuYy0yMzctXFx0XFx0ICAgICBzdHJ1Y3QgaW9fdXJpbmdfcmVnaW9uX2Rlc2MgKnJlZyxcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5oPTIwPXZvaWQgaW9fZnJlZV9yZWdpb24oc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyLCBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIpO1xcbmlvX3VyaW5nL21lbW1hcC5oOjIxOmludCBpb19jcmVhdGVfcmVnaW9uKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXFxuaW9fdXJpbmcvbWVtbWFwLmgtMjItXFx0XFx0ICAgICBzdHJ1Y3QgaW9fdXJpbmdfcmVnaW9uX2Rlc2MgKnJlZyxcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmM9NDk4PXN0YXRpYyBpbnQgaW9fcmVnaXN0ZXJfcmVzaXplX3JpbmdzKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnKVxcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy01MzEtXFx0fVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6NTMyOlxcdHJldCA9IGlvX2NyZWF0ZV9yZWdpb24oY3R4LCBcXHUwMDI2bi5yaW5nX3JlZ2lvbiwgXFx1MDAyNnJkLCBJT1JJTkdfT0ZGX0NRX1JJTkcpO1xcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNTMzLVxcdGlmIChyZXQpXFxuLS1cXG5pb191cmluZy9yZWdpc3Rlci5jLTU2MS1cXHR9XFxuaW9fdXJpbmcvcmVnaXN0ZXIuYzo1NjI6XFx0cmV0ID0gaW9fY3JlYXRlX3JlZ2lvbihjdHgsIFxcdTAwMjZuLnNxX3JlZ2lvbiwgXFx1MDAyNnJkLCBJT1JJTkdfT0ZGX1NRRVMpO1xcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNTYzLVxcdGlmIChyZXQpIHtcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmM9NzAzPXN0YXRpYyBpbnQgaW9fcmVnaXN0ZXJfbWVtX3JlZ2lvbihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKnVhcmcpXFxuLS1cXG5pb191cmluZy9yZWdpc3Rlci5jLTczMi1cXG5pb191cmluZy9yZWdpc3Rlci5jOjczMzpcXHRyZXQgPSBpb19jcmVhdGVfcmVnaW9uKGN0eCwgXFx1MDAyNnJlZ2lvbiwgXFx1MDAyNnJkLCBJT1JJTkdfTUFQX09GRl9QQVJBTV9SRUdJT04pO1xcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNzM0LVxcdGlmIChyZXQpXFxuLS1cXG5pb191cmluZy96Y3J4LmM9MzgwPXN0YXRpYyBpbnQgaW9fYWxsb2NhdGVfcmJ1Zl9yaW5nKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbi0tXFxuaW9fdXJpbmcvemNyeC5jLTM5OS1cXG5pb191cmluZy96Y3J4LmM6NDAwOlxcdHJldCA9IGlvX2NyZWF0ZV9yZWdpb24oY3R4LCBcXHUwMDI2aWZxLVxcdTAwM2VycV9yZWdpb24sIHJkLCBtbWFwX29mZnNldCk7XFxuaW9fdXJpbmcvemNyeC5jLTQwMS1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDc6Mjk6NTAuNjg2Mzg2MjY2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwNzQ1NjgxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLlxuXG4qKkluaXRpYWwgQ29uc2lkZXJhdGlvbnMgZm9yIE1lbW9yeSBNYW5hZ2VtZW50KipcblxuUmlnaHQsIHNvIHdlJ3JlIGRpdmluZyBpbnRvIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGlzIHN5c3RlbSwgYW5kIG15IGltbWVkaWF0ZSBmb2N1cyBsYW5kcyBvbiB0aGVzZSBzcGVjaWZpYyBmdW5jdGlvbnM6IGBpb19jcmVhdGVfcmVnaW9uYCwgYGlvX2ZyZWVfcmVnaW9uYCwgYGlvX3VyaW5nX21tYXBgLCBgaW9fcmVnaXN0ZXJfbWVtX3JlZ2lvbmAsIGBpb19yZWdpc3Rlcl9wYnVmX3JpbmdgLCBhbmQgYGlvX3JlZ2lzdGVyX3Jlc2l6ZV9yaW5nc2AuIEl0IHNlZW1zIHRoZXNlIGFyZSB0aGUgY29yZSBidWlsZGluZyBibG9ja3MgZm9yIGhvdyBtZW1vcnkgcmVnaW9ucyBhcmUgY3JlYXRlZCwgZnJlZWQsIG1hcHBlZCB3aXRoIGlvX3VyaW5nLCBhbmQgcmVnaXN0ZXJlZCBmb3IgdmFyaW91cyBwdXJwb3NlcyDigJMgcHJvYmFibHkgdG8gc2VydmUgdGhlIGlvX3VyaW5nIG9wZXJhdGlvbnMuIEknbSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgd29yayB0b2dldGhlciwgYnV0IGdpdmVuIHRoZWlyIG5hbWVzLCBJJ20gZXhwZWN0aW5nIHNvbWUga2luZCBvZiBsYXllcmVkIGFwcHJvYWNoIGhlcmUgZm9yIGJvdGggdGhlIG1lbW9yeSBhbmQgcmluZ3MuXG5cbk15IGd1dCB0ZWxscyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdW5waWNrIHRoZSBhcmNoaXRlY3R1cmUgaXMgdG8gaGF2ZSBhIGxvb2sgYXQgYGlvX2ZyZWVfcmVnaW9uYC4gVGhhdCdsbCBiZSBhIHVzZWZ1bCBwbGFjZSB0byBzdGFydCBiZWNhdXNlIGl0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZSByZXNvdXJjZXMgYXJlIG1hbmFnZWQgZnJvbSBiZWdpbm5pbmcgdG8gZW5kLiBLbm93aW5nIGhvdyBtZW1vcnkgaXMgZGVhbGxvY2F0ZWQgaXMgb2Z0ZW4ga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGFsbG9jYXRpb24gcHJvY2VzcyBhbmQgaWRlbnRpZnlpbmcgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciBpbmVmZmljaWVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjIyNSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDA3OjI5OjU0LjU5Mzg0NjU1N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTUxOTQxMzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX2ZyZWVfcmVnaW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL2lvX3VyaW5nLmM9MjA3OD1zdGF0aWMgdm9pZCBpb19yaW5nc19mcmVlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KVxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjA3OS17XFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoyMDgwOlxcdGlvX2ZyZWVfcmVnaW9uKGN0eC1cXHUwMDNldXNlciwgXFx1MDAyNmN0eC1cXHUwMDNlc3FfcmVnaW9uKTtcXG5pb191cmluZy9pb191cmluZy5jOjIwODE6XFx0aW9fZnJlZV9yZWdpb24oY3R4LVxcdTAwM2V1c2VyLCBcXHUwMDI2Y3R4LVxcdTAwM2VyaW5nX3JlZ2lvbik7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMDgyLVxcdGN0eC1cXHUwMDNlcmluZ3MgPSBOVUxMO1xcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYz0yMTYzPXN0YXRpYyBfX2NvbGQgdm9pZCBpb19yaW5nX2N0eF9mcmVlKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4KVxcbi0tXFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMTc1LVxcdGlvX2Rlc3Ryb3lfYnVmZmVycyhjdHgpO1xcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MjE3NjpcXHRpb19mcmVlX3JlZ2lvbihjdHgtXFx1MDAzZXVzZXIsIFxcdTAwMjZjdHgtXFx1MDAzZXBhcmFtX3JlZ2lvbik7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yMTc3LVxcdG11dGV4X3VubG9jayhcXHUwMDI2Y3R4LVxcdTAwM2V1cmluZ19sb2NrKTtcXG4tLVxcbmlvX3VyaW5nL2tidWYuYz00NTg9c3RhdGljIHZvaWQgaW9fcHV0X2JsKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fYnVmZmVyX2xpc3QgKmJsKVxcbi0tXFxuaW9fdXJpbmcva2J1Zi5jLTQ2MC1cXHRpZiAoYmwtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9CTF9CVUZfUklORylcXG5pb191cmluZy9rYnVmLmM6NDYxOlxcdFxcdGlvX2ZyZWVfcmVnaW9uKGN0eC1cXHUwMDNldXNlciwgXFx1MDAyNmJsLVxcdTAwM2VyZWdpb24pO1xcbmlvX3VyaW5nL2tidWYuYy00NjItXFx0ZWxzZVxcbi0tXFxuaW9fdXJpbmcva2J1Zi5jPTYyOT1pbnQgaW9fcmVnaXN0ZXJfcGJ1Zl9yaW5nKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqYXJnKVxcbi0tXFxuaW9fdXJpbmcva2J1Zi5jLTcxMC1mYWlsOlxcbmlvX3VyaW5nL2tidWYuYzo3MTE6XFx0aW9fZnJlZV9yZWdpb24oY3R4LVxcdTAwM2V1c2VyLCBcXHUwMDI2YmwtXFx1MDAzZXJlZ2lvbik7XFxuaW9fdXJpbmcva2J1Zi5jLTcxMi1cXHRrZnJlZShibCk7XFxuLS1cXG5pb191cmluZy9tZW1tYXAuYz0xMzA9c3RhdGljIHZvaWQgaW9fcmVnaW9uX2FjY291bnRfcHV0KHN0cnVjdCBpb19yZWdpb25fYWNjb3VudCAqYWNjb3VudClcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5jLTEzOC1cXG5pb191cmluZy9tZW1tYXAuYzoxMzk6dm9pZCBpb19mcmVlX3JlZ2lvbihzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIsIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcilcXG5pb191cmluZy9tZW1tYXAuYy0xNDAte1xcbi0tXFxuaW9fdXJpbmcvbWVtbWFwLmM9MjM2PWludCBpb19jcmVhdGVfcmVnaW9uKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXFxuLS1cXG5pb191cmluZy9tZW1tYXAuYy0yOTQtb3V0X2ZyZWU6XFxuaW9fdXJpbmcvbWVtbWFwLmM6Mjk1OlxcdGlvX2ZyZWVfcmVnaW9uKGN0eC1cXHUwMDNldXNlciwgbXIpO1xcbmlvX3VyaW5nL21lbW1hcC5jLTI5Ni1cXHRyZXR1cm4gcmV0O1xcbi0tXFxuaW9fdXJpbmcvbWVtbWFwLmM9NDgyPWludCBpb191cmluZ19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5jLTUwMC1cXHQvKlxcbmlvX3VyaW5nL21lbW1hcC5jOjUwMTpcXHQgKiBQaW4gdGhlIHBhZ2VzIHNvIGlvX2ZyZWVfcmVnaW9uKCkncyByZWxlYXNlX3BhZ2VzKCkgZG9lcyBub3RcXG5pb191cmluZy9tZW1tYXAuYy01MDItXFx0ICogZHJvcCB0aGUgbGFzdCByZWZlcmVuY2Ugd2hpbGUgdGhpcyBWTUEgZXhpc3RzLiBkZWxldGVfdm1hKClcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5oPTE4PWludCBpb191cmluZ19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuaW9fdXJpbmcvbWVtbWFwLmgtMTktXFxuaW9fdXJpbmcvbWVtbWFwLmg6MjA6dm9pZCBpb19mcmVlX3JlZ2lvbihzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIsIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcik7XFxuaW9fdXJpbmcvbWVtbWFwLmgtMjEtaW50IGlvX2NyZWF0ZV9yZWdpb24oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmM9NDgwPXN0YXRpYyB2b2lkIGlvX3JlZ2lzdGVyX2ZyZWVfcmluZ3Moc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy9yZWdpc3Rlci5jLTQ4Mi17XFxuaW9fdXJpbmcvcmVnaXN0ZXIuYzo0ODM6XFx0aW9fZnJlZV9yZWdpb24oY3R4LVxcdTAwM2V1c2VyLCBcXHUwMDI2ci1cXHUwMDNlc3FfcmVnaW9uKTtcXG5pb191cmluZy9yZWdpc3Rlci5jOjQ4NDpcXHRpb19mcmVlX3JlZ2lvbihjdHgtXFx1MDAzZXVzZXIsIFxcdTAwMjZyLVxcdTAwM2VyaW5nX3JlZ2lvbik7XFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy00ODUtfVxcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYz03MDM9c3RhdGljIGludCBpb19yZWdpc3Rlcl9tZW1fcmVnaW9uKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB2b2lkIF9fdXNlciAqdWFyZylcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNzM2LVxcdGlmIChjb3B5X3RvX3VzZXIocmRfdXB0ciwgXFx1MDAyNnJkLCBzaXplb2YocmQpKSkge1xcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6NzM3OlxcdFxcdGlvX2ZyZWVfcmVnaW9uKGN0eC1cXHUwMDNldXNlciwgXFx1MDAyNnJlZ2lvbik7XFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy03MzgtXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuLS1cXG5pb191cmluZy96Y3J4LmM9NDEyPXN0YXRpYyB2b2lkIGlvX2ZyZWVfcmJ1Zl9yaW5nKHN0cnVjdCBpb196Y3J4X2lmcSAqaWZxKVxcbmlvX3VyaW5nL3pjcnguYy00MTMte1xcbmlvX3VyaW5nL3pjcnguYzo0MTQ6XFx0aW9fZnJlZV9yZWdpb24oaWZxLVxcdTAwM2V1c2VyLCBcXHUwMDI2aWZxLVxcdTAwM2VycV9yZWdpb24pO1xcbmlvX3VyaW5nL3pjcnguYy00MTUtXFx0aWZxLVxcdTAwM2VycS5yaW5nID0gSU9fVVJJTkdfUFRSX1BPSVNPTjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDc6Mjk6NTYuMTQ1Nzk0MjI4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA0NTc0NjUwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEkvTyBSZWdpb24gRnVuY3Rpb25zKipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nLiBXZSd2ZSBnb3QgYSBoYW5kZnVsIG9mIGNyaXRpY2FsIEkvTyByZWdpb24gZnVuY3Rpb25zIHRvIHplcm8gaW4gb246IGBpb19jcmVhdGVfcmVnaW9uYCwgYGlvX2ZyZWVfcmVnaW9uYCwgYGlvX3VyaW5nX21tYXBgLCBgaW9fcmVnaW9uX21tYXBgLCBhbmQgYGlvX3JlZ2lzdGVyX21lbV9yZWdpb25gLiBHaXZlbiB3aGF0IEkga25vdyBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgdGhlIGtlcm5lbCwgdGhlc2UgYXJlIGxpa2VseSB0aGUgY29yZSBidWlsZGluZyBibG9ja3MgZm9yIGhvdyB0aGVzZSByZWdpb25zIGFyZSBjcmVhdGVkLCBtYW5hZ2VkLCBhbmQgbWFwcGVkLiBNeSBndXQgdGVsbHMgbWUgdGhhdCBhbnkgaXNzdWVzIGhlcmUgY291bGQgcmlwcGxlIG91dCBhbmQgY2F1c2Ugc2lnbmlmaWNhbnQgcHJvYmxlbXMgZnVydGhlciBkb3duIHRoZSBsaW5lLCBzbyBpdCdzIGJlc3QgdG8gaW52ZXN0aWdhdGUgdGhlbSB0aG9yb3VnaGx5LiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gdGhlIGxpc3QgYW5kIGl0cyBjb250ZXh0LCBpcyB0byBkZWx2ZSBpbnRvIGBpb19yZWdpb25fbW1hcGAuIFVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIHJlZ2lvbnMgYXJlIGFjdHVhbGx5IG1hcHBlZCBpbnRvIHRoZSB1c2VyIHNwYWNlIG9yIGtlcm5lbCBhZGRyZXNzIHNwYWNlIHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgdG8gZ2FpbiBpbnNpZ2h0cyBhbmQgdG8gc3RhcnQgdG8gZGV0ZXJtaW5lIGhvdyB0aGlzIGlzIGFsbCBpbXBsZW1lbnRlZCBhdCB0aGUgbG93ZXIgbGV2ZWxzLiBMZXQncyBzZWUgd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIHVwIHRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODkxLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDc6MzA6MDEuMTkxNTQ1NTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjM4MDMyMjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fcmVnaW9uX21tYXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvbWVtbWFwLmM9MzYwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaW9fcmVnaW9uX3ZtX29wcyA9IHtcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5jLTM2NC1cXG5pb191cmluZy9tZW1tYXAuYzozNjU6c3RhdGljIGludCBpb19yZWdpb25fbW1hcChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG5pb191cmluZy9tZW1tYXAuYy0zNjYtXFx0XFx0XFx0ICBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXFxuLS1cXG5pb191cmluZy9tZW1tYXAuYz0zODc9X19jb2xkIGludCBpb191cmluZ19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5jLTQwOS1cXHRyZWdpb24gPSBpb19tbWFwX2dldF9yZWdpb24oY3R4LCB2bWEtXFx1MDAzZXZtX3Bnb2ZmKTtcXG5pb191cmluZy9tZW1tYXAuYzo0MTA6XFx0cmV0dXJuIGlvX3JlZ2lvbl9tbWFwKGN0eCwgcmVnaW9uLCB2bWEsIHBhZ2VfbGltaXQpO1xcbmlvX3VyaW5nL21lbW1hcC5jLTQxMS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDA3OjMwOjAyLjc1NTM1NjA3M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTczMzI2Mzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBpb191cmluZydzIE1lbW9yeSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gSSdtIHN0YXJ0aW5nIHdpdGggYGlvX3VyaW5nX21tYXBgLiBUaGF0J3Mgd2hlcmUgaXQgYWxsIGJlZ2lucywgcmlnaHQ/IFRoZSBpbml0aWFsIG1hcHBpbmcuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtZW1vcnkgcmVnaXN0cmF0aW9uIGFjdHVhbGx5IHdvcmtzIHdpdGhpbiB0aGF0IGNvbnRleHQuIEknbGwgbmVlZCB0byBnbyBkZWVwZXIgdG8gc2VlIGhvdyBgaW9fdXJpbmdgIGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIHN5c3RlbSBtZW1vcnkuIExldCdzIGRpZyBpbnRvIGBpb19yZWdpc3Rlcl9tZW1fcmVnaW9uYCBuZXh0OyBJJ20gcHJldHR5IHN1cmUgdGhhdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdXNlci1zcGFjZSBtZW1vcnkgZ2V0cyBwbHVtYmVkIGludG8gYGlvX3VyaW5nYCdzIHdvcmxkLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGF0IHJlZ2lzdHJhdGlvbiB0aWVzIGludG8gdGhlIHdob2xlIHBpY3R1cmUsIGVzcGVjaWFsbHkgcmVnYXJkaW5nIERNQSBhbmQgdGhvc2UgcG90ZW50aWFsIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMgdGhhdCBhcmUgdGhlIHdob2xlIHBvaW50IG9mIGBpb191cmluZ2AuIEknbSBleHBlY3Rpbmcgc29tZSBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbiB3aXRoIHBhZ2UgdGFibGVzIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0MzQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwNzozMDowNi4zMjg2ODYxODFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTgwMzgwMjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fcmVnaXN0ZXJfbWVtX3JlZ2lvblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9yZWdpc3Rlci5jPTQ5OD1zdGF0aWMgaW50IGlvX3JlZ2lzdGVyX3Jlc2l6ZV9yaW5ncyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZylcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNzAyLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6NzAzOnN0YXRpYyBpbnQgaW9fcmVnaXN0ZXJfbWVtX3JlZ2lvbihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKnVhcmcpXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy03MDQte1xcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYz03NTA9c3RhdGljIGludCBfX2lvX3VyaW5nX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB1bnNpZ25lZCBvcGNvZGUsXFxuLS1cXG5pb191cmluZy9yZWdpc3Rlci5jLTk1My1cXHRcXHRcXHRicmVhaztcXG5pb191cmluZy9yZWdpc3Rlci5jOjk1NDpcXHRcXHRyZXQgPSBpb19yZWdpc3Rlcl9tZW1fcmVnaW9uKGN0eCwgYXJnKTtcXG5pb191cmluZy9yZWdpc3Rlci5jLTk1NS1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDc6MzA6MDcuODg2NzI4NjEzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODgxNjM3NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgTWVtb3J5IFJlZ2lzdHJhdGlvbiBpbiB0aGUgSU9fdXJpbmcgQ29udGV4dCoqXG5cbk9rYXksIHNvIGBpb19yZWdpc3Rlcl9tZW1fcmVnaW9uYCBpcyBkZWZpbml0ZWx5IHRyaWdnZXJlZCBieSBgX19pb191cmluZ19yZWdpc3RlcmAuIE1ha2VzIHNlbnNlOyB0aGF0J3MgdGhlIGNvcmUgcmVnaXN0cmF0aW9uIGZ1bmN0aW9uLiBNeSBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGhlcmUgc28sIGxldCdzIHRyYWNlIHRoaXMgYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nIGludGVybmFsbHkuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gbWVtb3J5IG1hbmFnZW1lbnQgbnVhbmNlcyBzbyBJJ2xsIGNoZWNrIGBpb19yZWdpc3Rlcl9wYnVmX3JpbmdgIGZvciBzb21lIGNvbnRleHQgYXJvdW5kIHRoYXQuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg4NywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDA3OjMwOjExLjU3NDg5NTM3M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2MDI0MTk3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19yZWdpc3Rlcl9wYnVmX3JpbmdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcva2J1Zi5jPTYxMT1pbnQgaW9fbWFuYWdlX2J1ZmZlcnNfbGVnYWN5KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9rYnVmLmMtNjI4LVxcbmlvX3VyaW5nL2tidWYuYzo2Mjk6aW50IGlvX3JlZ2lzdGVyX3BidWZfcmluZyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZylcXG5pb191cmluZy9rYnVmLmMtNjMwLXtcXG4tLVxcbmlvX3VyaW5nL2tidWYuaD04MD1pbnQgaW9fbWFuYWdlX2J1ZmZlcnNfbGVnYWN5KHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpO1xcbmlvX3VyaW5nL2tidWYuaC04MS1cXG5pb191cmluZy9rYnVmLmg6ODI6aW50IGlvX3JlZ2lzdGVyX3BidWZfcmluZyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZyk7XFxuaW9fdXJpbmcva2J1Zi5oLTgzLWludCBpb191bnJlZ2lzdGVyX3BidWZfcmluZyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZyk7XFxuLS1cXG5pb191cmluZy9yZWdpc3Rlci5jPTc1MD1zdGF0aWMgaW50IF9faW9fdXJpbmdfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHVuc2lnbmVkIG9wY29kZSxcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtODg3LVxcdFxcdFxcdGJyZWFrO1xcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6ODg4OlxcdFxcdHJldCA9IGlvX3JlZ2lzdGVyX3BidWZfcmluZyhjdHgsIGFyZyk7XFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy04ODktXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDA3OjMwOjEzLjEzNTE0MjQ4NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTY1MDQ1MzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gaW9fcmVnaXN0ZXJfcGJ1Zl9yaW5nKipcblxuT2theSwgc28gYGlvX3JlZ2lzdGVyX3BidWZfcmluZ2AgaXMgY2FsbGVkIGZyb20gYF9faW9fdXJpbmdfcmVnaXN0ZXJgLiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50LCB0aGUgcmVnaXN0cmF0aW9uIHBhdGguIEl0J3MgdGltZSB0byBmb2xsb3cgdGhlIHRyYWlsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGJ1ZmZlciByaW5ncyBhcmUgYmVpbmcgc2V0IHVwLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBleGFtaW5lIHRoZSByZXNpemUgb3BlcmF0aW9uLiBMZXQncyBkaWcgaW50byBgaW9fcmVnaXN0ZXJfcmVzaXplX3JpbmdzYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgbG93ZG93biBvbiB0aGUgcmluZyBzaXplcywgYW5kIGhvdyB0aGUgYnVmZmVyIG1lbW9yeSBpcyBhbGxvY2F0ZWQgYW5kIG1hbmFnZWQgZHVyaW5nIHRoaXMgaW5pdGlhbGl6YXRpb24gcGhhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0MTAsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwNzozMDoxNi4zMDAxOTA3ODNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjQ2MDA1MjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fcmVnaXN0ZXJfcmVzaXplX3JpbmdzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImlvX3VyaW5nL3JlZ2lzdGVyLmM9NDgwPXN0YXRpYyB2b2lkIGlvX3JlZ2lzdGVyX2ZyZWVfcmluZ3Moc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuLS1cXG5pb191cmluZy9yZWdpc3Rlci5jLTQ5Ny1cXG5pb191cmluZy9yZWdpc3Rlci5jOjQ5ODpzdGF0aWMgaW50IGlvX3JlZ2lzdGVyX3Jlc2l6ZV9yaW5ncyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZylcXG5pb191cmluZy9yZWdpc3Rlci5jLTQ5OS17XFxuLS1cXG5pb191cmluZy9yZWdpc3Rlci5jPTc1MD1zdGF0aWMgaW50IF9faW9fdXJpbmdfcmVnaXN0ZXIoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHVuc2lnbmVkIG9wY29kZSxcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtOTQ3LVxcdFxcdFxcdGJyZWFrO1xcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6OTQ4OlxcdFxcdHJldCA9IGlvX3JlZ2lzdGVyX3Jlc2l6ZV9yaW5ncyhjdHgsIGFyZyk7XFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy05NDktXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDA3OjMwOjE3Ljg2NDc5NTMwNloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODU3MjE3Nzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGBpb191cmluZ2AgUmluZyBSZWdpc3RyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGUgY2FsbHMgcmVsYXRlZCB0byByZWdpc3RlcmluZyBhbmQgcmVzaXppbmcgdGhlIHJpbmdzIHdpdGhpbiB0aGUgYGlvX3VyaW5nYCBzdWJzeXN0ZW0uIE15IHN0YXJ0aW5nIHBvaW50IGlzIGBpb19yZWdpc3Rlcl9yZXNpemVfcmluZ3NgLCB3aGljaCBJIHNlZSBpcyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgX19pb191cmluZ19yZWdpc3RlcmAuIFRoZXJlZm9yZSwgdGhhdCdzIHdoZXJlIEkgbmVlZCB0byBmb2N1cy5cblxuTXkgYXR0ZW50aW9uIGltbWVkaWF0ZWx5IHNoaWZ0cyB0byBzZXZlcmFsIGZ1bmN0aW9uczogYGlvX2NyZWF0ZV9yZWdpb25gLCBgaW9fZnJlZV9yZWdpb25gLCBgaW9fdXJpbmdfbW1hcGAsIGBpb19yZWdpc3Rlcl9tZW1fcmVnaW9uYCwgYGlvX3JlZ2lzdGVyX3BidWZfcmluZ2AsIGFuZCBgaW9fcmVnaXN0ZXJfcmVzaXplX3JpbmdzYC5cblxuTm93LCBgaW9fY3JlYXRlX3JlZ2lvbmAgYW5kIGBpb19mcmVlX3JlZ2lvbmAgY2F0Y2ggbXkgZXllLiBUaGV5IGFyZW4ndCBkZWNsYXJlZCBhcyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLCBldmVuIGlmIHRoZXkgYXJlIGludGVybmFsIHRvIGBpb191cmluZ2AuIFRoaXMgbWVhbnMgdGhleSdyZSBhY2Nlc3NpYmxlIG91dHNpZGUgYSBzcGVjaWZpYyBzb3VyY2UgZmlsZSwgc28gYXJlIHByb2JhYmx5IHdvcnRoIHNjcnV0aW5pemluZy4gSSBzZWUgdGhhdCBgaW9fcmVnaXN0ZXJfbWVtX3JlZ2lvbmAsIGBpb19yZWdpc3Rlcl9wYnVmX3JpbmdgLCBhbmQgYGlvX3JlZ2lzdGVyX3Jlc2l6ZV9yaW5nc2AgYWxzbyBzZWVtIGltcG9ydGFudC5cblxuQSBxdWljayBjaGVjayBjb25maXJtcyBhIGNvdXBsZSBvZiB0aGluZ3MsIGFuZCB0cmlnZ2VycyBhbiBlcnJvciBpbiBteSB0aGlua2luZy4gYGlvX3JlZ2lzdGVyX21lbV9yZWdpb25gIGlzLCBpbiBmYWN0LCBzdGF0aWMuICpBbmQqLCBzbyBpcyBgaW9fcmVnaXN0ZXJfcmVzaXplX3JpbmdzYC4gTXkgaW5pdGlhbCBtZW50YWwgbW9kZWwgd2FzIGZsYXdlZC4gT24gdGhlIG90aGVyIGhhbmQsIGBpb19yZWdpc3Rlcl9wYnVmX3JpbmdgIGFuZCBgaW9fdXJpbmdfbW1hcGAgYXJlICpub3QqIHN0YXRpYywgc28gd2lsbCBiZSB1c2VmdWwuXG5cbkkgbmVlZCB0byBjaXJjbGUgYmFjayBhbmQgY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIGBpb19yZWdpc3Rlcl9tZW1fcmVnaW9uYCBhbmQgYGlvX3JlZ2lzdGVyX3Jlc2l6ZV9yaW5nc2AuIFRoZXkncmUgaW50ZXJuYWwsIHNvIGFyZSB0aGV5IHRoZSByaWdodCBwbGFjZXMgdG8gZm9jdXM/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MDksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDc6MzA6MjIuNzIyMDE1NjFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTI4NzY3NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fcmVnaXN0ZXJfbWVtX3JlZ2lvblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9yZWdpc3Rlci5jPTQ5OD1zdGF0aWMgaW50IGlvX3JlZ2lzdGVyX3Jlc2l6ZV9yaW5ncyhzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKmFyZylcXG4tLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmMtNzAyLVxcbmlvX3VyaW5nL3JlZ2lzdGVyLmM6NzAzOnN0YXRpYyBpbnQgaW9fcmVnaXN0ZXJfbWVtX3JlZ2lvbihzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCwgdm9pZCBfX3VzZXIgKnVhcmcpXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYy03MDQte1xcbi0tXFxuaW9fdXJpbmcvcmVnaXN0ZXIuYz03NTA9c3RhdGljIGludCBfX2lvX3VyaW5nX3JlZ2lzdGVyKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCB1bnNpZ25lZCBvcGNvZGUsXFxuLS1cXG5pb191cmluZy9yZWdpc3Rlci5jLTk1My1cXHRcXHRcXHRicmVhaztcXG5pb191cmluZy9yZWdpc3Rlci5jOjk1NDpcXHRcXHRyZXQgPSBpb19yZWdpc3Rlcl9tZW1fcmVnaW9uKGN0eCwgYXJnKTtcXG5pb191cmluZy9yZWdpc3Rlci5jLTk1NS1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDc6MzA6MjQuMjc0ODk3MzgxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyODE5ODM0MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gS2V5IElPIEZ1bmN0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gR2l2ZW4gdGhhdCBgaW9fcmVnaXN0ZXJfbWVtX3JlZ2lvbmAgaXMgc3RhdGljLCBteSBhdHRlbnRpb24gbmVlZHMgdG8gc2hpZnQgdG8gdGhlIG1vcmUgZHluYW1pYyBjb21wb25lbnRzLiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gSU8gcmVnaW9uIG1hbmFnZW1lbnQsIHdoaWNoIGFyZSB3aGVyZSB0aGUgY29yZSBpbnRlcmFjdGlvbnMgbGlrZWx5IHJlc2lkZS4gU3BlY2lmaWNhbGx5LCBgaW9fY3JlYXRlX3JlZ2lvbmAsIGBpb19mcmVlX3JlZ2lvbmAsIGBpb191cmluZ19tbWFwYCwgYW5kIGBpb19yZWdpc3Rlcl9wYnVmX3JpbmdgLiBQZXJoYXBzLCBhbHRob3VnaCBtYXliZSB0b28gYnJvYWQgYXMgYW4gZW50cnkgcG9pbnQsIGBfX2lvX3VyaW5nX3JlZ2lzdGVyYCBkZXNlcnZlcyBhIHNlY29uZCBsb29rLlxuXG5Pa2F5LCBsZXQgbWUgY29uZmlybSB0aGUgc3RhdGljL25vbi1zdGF0aWMgc3RhdHVzIG9mIHRob3NlIGZpcnN0IGZvdXIgYWdhaW46IFl1cCwgYGlvX2NyZWF0ZV9yZWdpb25gLCBgaW9fZnJlZV9yZWdpb25gLCBgaW9fdXJpbmdfbW1hcGAsIGFuZCBgaW9fcmVnaXN0ZXJfcGJ1Zl9yaW5nYCBhcmUgYWxsIG5vbi1zdGF0aWMsIHdoaWNoIGlzIHdoYXQgSSBleHBlY3QuXG5cbkp1c3QgdG8gYmUgdGhvcm91Z2gsIEknbSBnb2luZyB0byBxdWlja2x5IGdsYW5jZSBhdCBhbnkgb3RoZXIgcG90ZW50aWFsbHkgcmVsYXRlZCBmdW5jdGlvbnMuIExvb2tzIGxpa2UgYGlvX3JlZ2lvbl9hY2NvdW50X2FsbG9jYCwgYGlvX3JlZ2lvbl9hY2NvdW50X2dldGAsIGFuZCBgaW9fcmVnaW9uX2FjY291bnRfcHV0YCBhcmUgc3RhdGljLCBzbyBJIGNhbiBwcm9iYWJseSBrZWVwIHRob3NlIG91dCBvZiB0aGUgc2NvcGUgZm9yIG5vdy5cblxuQ29uc2lkZXJpbmcgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCB0aGUgbW9zdCBwcm9taXNpbmcgY2FuZGlkYXRlcyBhcmUgYGlvX2NyZWF0ZV9yZWdpb25gLCBgaW9fZnJlZV9yZWdpb25gLCBhbmQgYGlvX3VyaW5nX21tYXBgIGJhc2VkIG9uIHRoZWlyIHJvbGUgaW4gcmVnaW9uIGxpZmVjeWNsZSBhbmQgbWFwcGluZy5cblxuSSB0aGluayBpdCdzIHRpbWUgdG8gZGl2ZSBpbnRvIGEgZGVlcGVyIGFuYWx5c2lzIG9mIGBpb191cmluZ19tbWFwYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2NjYsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDc6MzA6MzEuNTU2ODgzODExWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc2ODAzMjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3VyaW5nX21tYXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvaW9fdXJpbmcuYz0yNzA4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlvX3VyaW5nX2ZvcHMgPSB7XFxuaW9fdXJpbmcvaW9fdXJpbmcuYy0yNzA5LVxcdC5yZWxlYXNlXFx0PSBpb191cmluZ19yZWxlYXNlLFxcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MjcxMDpcXHQubW1hcFxcdFxcdD0gaW9fdXJpbmdfbW1hcCxcXG5pb191cmluZy9pb191cmluZy5jLTI3MTEtXFx0LmdldF91bm1hcHBlZF9hcmVhID0gaW9fdXJpbmdfZ2V0X3VubWFwcGVkX2FyZWEsXFxuLS1cXG5pb191cmluZy9tZW1tYXAuYz0zNjU9c3RhdGljIGludCBpb19yZWdpb25fbW1hcChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5jLTM4Ni1cXG5pb191cmluZy9tZW1tYXAuYzozODc6X19jb2xkIGludCBpb191cmluZ19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5pb191cmluZy9tZW1tYXAuYy0zODgte1xcbi0tXFxuaW9fdXJpbmcvbWVtbWFwLmM9NDEzPXVuc2lnbmVkIGxvbmcgaW9fdXJpbmdfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5jLTQ2Mi0gKiBEcm9wIHRoZSBwYWdlcyB0aGF0IHdlcmUgaW5pdGlhbGx5IHJlZmVyZW5jZWQgYW5kIGFkZGVkIGluXFxuaW9fdXJpbmcvbWVtbWFwLmM6NDYzOiAqIGlvX3VyaW5nX21tYXAoKS4gV2UgY2Fubm90IGhhdmUgaGFkIGEgbXJlbWFwKCkgYXMgdGhhdCBpc24ndCBzdXBwb3J0ZWQsXFxuaW9fdXJpbmcvbWVtbWFwLmMtNDY0LSAqIGhlbmNlIHRoZSB2bWEgc2hvdWxkIGJlIGlkZW50aWNhbCB0byB0aGUgb25lIHdlIGluaXRpYWxseSByZWZlcmVuY2VkIGFuZFxcbi0tXFxuaW9fdXJpbmcvbWVtbWFwLmM9NDc4PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaW9fdXJpbmdfbm9tbXVfdm1fb3BzID0ge1xcbi0tXFxuaW9fdXJpbmcvbWVtbWFwLmMtNDgxLVxcbmlvX3VyaW5nL21lbW1hcC5jOjQ4MjppbnQgaW9fdXJpbmdfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuaW9fdXJpbmcvbWVtbWFwLmMtNDgzLXtcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5oPTE1PXVuc2lnbmVkIGxvbmcgaW9fdXJpbmdfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5oLTE3LVxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIGZsYWdzKTtcXG5pb191cmluZy9tZW1tYXAuaDoxODppbnQgaW9fdXJpbmdfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbmlvX3VyaW5nL21lbW1hcC5oLTE5LVxcbi0tXFxudG9vbHMvaW5jbHVkZS9pb191cmluZy9taW5pX2xpYnVyaW5nLmg9NTU9c3RydWN0IGlvX3VyaW5nIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvaW9fdXJpbmcvbWluaV9saWJ1cmluZy5oLTY5LVxcbnRvb2xzL2luY2x1ZGUvaW9fdXJpbmcvbWluaV9saWJ1cmluZy5oOjcwOnN0YXRpYyBpbmxpbmUgaW50IGlvX3VyaW5nX21tYXAoaW50IGZkLCBzdHJ1Y3QgaW9fdXJpbmdfcGFyYW1zICpwLFxcbnRvb2xzL2luY2x1ZGUvaW9fdXJpbmcvbWluaV9saWJ1cmluZy5oLTcxLVxcdFxcdFxcdFxcdHN0cnVjdCBpb191cmluZ19zcSAqc3EsIHN0cnVjdCBpb191cmluZ19jcSAqY3EpXFxuLS1cXG50b29scy9pbmNsdWRlL2lvX3VyaW5nL21pbmlfbGlidXJpbmcuaD0xMzk9c3RhdGljIGlubGluZSBpbnQgaW9fdXJpbmdfcXVldWVfaW5pdF9wYXJhbXModW5zaWduZWQgaW50IGVudHJpZXMsXFxuLS1cXG50b29scy9pbmNsdWRlL2lvX3VyaW5nL21pbmlfbGlidXJpbmcuaC0xNDktXFx0XFx0cmV0dXJuIGZkO1xcbnRvb2xzL2luY2x1ZGUvaW9fdXJpbmcvbWluaV9saWJ1cmluZy5oOjE1MDpcXHRyZXQgPSBpb191cmluZ19tbWFwKGZkLCBwLCBcXHUwMDI2cmluZy1cXHUwMDNlc3EsIFxcdTAwMjZyaW5nLVxcdTAwM2VjcSk7XFxudG9vbHMvaW5jbHVkZS9pb191cmluZy9taW5pX2xpYnVyaW5nLmgtMTUxLVxcdGlmICghcmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDA3OjMwOjMzLjEzMzY5MjExNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzM1OTMwNDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3RyYXRlZ3kgZm9yIGlvX3VyaW5nIE1lbW9yeSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVsYXRlZCB0byBtZW1vcnkgbWFwcGluZyB3aXRoaW4gaW9fdXJpbmcuIFNwZWNpZmljYWxseSwgd2UncmUgZGVhbGluZyB3aXRoIHRoZSBgaW9fdXJpbmdfbW1hcGAgZnVuY3Rpb24sIHdoaWNoIGhhbmRsZXMgbW1hcCBjYWxscyB3aXRoaW4gdGhlIGlvX3VyaW5nIGNvbnRleHQuIFdlJ3ZlIGdvdCBgaW9fY3JlYXRlX3JlZ2lvbmAgYW5kIGBpb19mcmVlX3JlZ2lvbmAgYmVpbmcgdXNlZCBub3cgd2hlbmV2ZXIgcmVnaW9ucyBhcmUgY3JlYXRlZCBvciByZWxlYXNlZC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IHNoaWZ0IGluIGhvdyBpb191cmluZyBtYW5hZ2VzIGl0cyBtZW1vcnkgYWNjb3VudGluZy5cblxuR2l2ZW4gdGhpcywgSSdtIHRoaW5raW5nIHRoaXMgaXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgY2hhbmdlcyBpbnRyb2R1Y2UgYHN0cnVjdCBpb19yZWdpb25fYWNjb3VudGAgYW5kIG1vZGlmeSBob3cgbWVtb3J5IGlzIG1hbmFnZWQgYW5kIGZyZWVkLiBUaGlzIG1lYW5zIHdlJ3ZlIGdvdCBuZXcgbG9naWMgcGF0aHMgaW4gdGhlc2UgdGhyZWUgZnVuY3Rpb25zLCBgaW9fY3JlYXRlX3JlZ2lvbmAsIGBpb19mcmVlX3JlZ2lvbmAsIGFuZCBgaW9fdXJpbmdfbW1hcGAgdGhhdCBhcmUgcG90ZW50aWFsbHkgdnVsbmVyYWJsZS4gVGhlc2UgYXJlIGNvcmUga2VybmVsIHJvdXRpbmVzLCBzbyBmaW5kaW5nIGEgYnVnIGhlcmUgd291bGQgYmUgaW1wYWN0ZnVsLlxuXG5UaGVyZWZvcmUsIG15IHN0cmF0ZWd5IGlzIHNpbXBsZTogSSdsbCBmbGFnIHRoaXMgYXMgYFdvcnRoRnV6emluZzogdHJ1ZWAsIGFuZCBjb25jZW50cmF0ZSBteSBmdXp6aW5nIGVmZm9ydHMgb24gdGhvc2Ugc3BlY2lmaWMgc3ltYm9sczogYGlvX2NyZWF0ZV9yZWdpb25gLCBgaW9fZnJlZV9yZWdpb25gLCBhbmQgYGlvX3VyaW5nX21tYXBgLiBUaGUgb2J2aW91cyBwcmVyZXF1aXNpdGUgaXMgYEVuYWJsZUNvbmZpZ3M6IElPX1VSSU5HYCwgYmVjYXVzZSBpZiB0aGF0IGlzbid0IHNldCwgdGhlbiB0aGUgd2hvbGUgdGhpbmcgaXMgaXJyZWxldmFudC4gQmVjYXVzZSBvZiB0aGUgbWVtb3J5IGhhbmRsaW5nIGFzcGVjdCwgdGhpcyBjb3VsZCBiZSBhIGZ1biBhbmQgZnJ1aXRmdWwgdGFyZ2V0LiBMZXQncyBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwOTAsIk91dHB1dFRva2VucyI6MTMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDA3OjMwOjQwLjQ2OTYyNTE5MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NzI3NjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX2NyZWF0ZV9yZWdpb25cIixcbiAgICBcImlvX2ZyZWVfcmVnaW9uXCIsXG4gICAgXCJpb191cmluZ19tbWFwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGFjY291bnRpbmcgYW5kIG1hcHBpbmcgbG9naWMgZm9yIGlvX3VyaW5nIHJlZ2lvbnMsIGludHJvZHVjaW5nIGBzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnRgIGFuZCBjaGFuZ2luZyBob3cgbWVtb3J5IGlzIGFjY291bnRlZCBhbmQgZnJlZWQuIFRoaXMgYWZmZWN0cyBgaW9fY3JlYXRlX3JlZ2lvbmAsIGBpb19mcmVlX3JlZ2lvbmAsIGFuZCBgaW9fdXJpbmdfbW1hcGAuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb19jcmVhdGVfcmVnaW9uXCIsXG4gICAgXCJpb19mcmVlX3JlZ2lvblwiLFxuICAgIFwiaW9fdXJpbmdfbW1hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBhY2NvdW50aW5nIGFuZCBtYXBwaW5nIGxvZ2ljIGZvciBpb191cmluZyByZWdpb25zLCBpbnRyb2R1Y2luZyBgc3RydWN0IGlvX3JlZ2lvbl9hY2NvdW50YCBhbmQgY2hhbmdpbmcgaG93IG1lbW9yeSBpcyBhY2NvdW50ZWQgYW5kIGZyZWVkLiBUaGlzIGFmZmVjdHMgYGlvX2NyZWF0ZV9yZWdpb25gLCBgaW9fZnJlZV9yZWdpb25gLCBhbmQgYGlvX3VyaW5nX21tYXBgLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwNzozMDo0MC41NDQzNTk0NzhaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTA1MjU5NzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDc6MzA6NDAuNTQ1MjM3NDA4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE0MTA0Mzc3NjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGludGVybmFsIHN0cnVjdHVyZSBgaW9fcmVnaW9uX2FjY291bnRgIHRvIHRyYWNrIG1lbW9yeSBhY2NvdW50aW5nIGZvciBpb191cmluZyBtZW1vcnkgcmVnaW9ucyBhY3Jvc3MgVk1BIGxpZmVjeWNsZXMuIFRoZSBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIGludGVybmFsbHkgYW5kIGFsbCBpdHMgZmllbGRzIChgcmVmc2AsIGB1c2VyYCwgYG5yX3BhZ2VzYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGV4cG9zZWQgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFRoZSBjaGFuZ2VzIHByaW1hcmlseSBhZGRyZXNzIG1lbW9yeSBhY2NvdW50aW5nIGFuZCBvYmplY3QgbGlmZWN5Y2xlcywgd2hlcmUgYW55IHBvdGVudGlhbCBidWdzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBsZWFrcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzNTEyOTQ3YzBkMzYwMjRlZmQ1MTE5ZmViNTk0MWQ1YWEwZGZkNDMwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMTYgMDc6Mjk6MzMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmhcbmluZGV4IDg3MTUxYTViNjJjMWIuLjZmZWI3ZWUzNDQwZmQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2lvX3VyaW5nX3R5cGVzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvaW9fdXJpbmdfdHlwZXMuaFxuQEAgLTk0LDExICs5NCwxNCBAQCBzdHJ1Y3QgaW9faGFzaF90YWJsZSB7XG4gXHR1bnNpZ25lZFx0XHRoYXNoX2JpdHM7XG4gfTtcbiBcbitzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnQ7XG4rXG4gc3RydWN0IGlvX21hcHBlZF9yZWdpb24ge1xuIFx0c3RydWN0IHBhZ2VcdFx0KipwYWdlcztcbiBcdHZvaWRcdFx0XHQqcHRyO1xuIFx0dW5zaWduZWRcdFx0bnJfcGFnZXM7XG4gXHR1bnNpZ25lZFx0XHRmbGFncztcbitcdHN0cnVjdCBpb19yZWdpb25fYWNjb3VudFx0KmFjY291bnQ7XG4gfTtcbiBcbiAvKlxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL21lbW1hcC5jIGIvaW9fdXJpbmcvbWVtbWFwLmNcbmluZGV4IDIzZThhODUxMTFiY2EuLmNhMjhhOTQyOWMxNjggMTAwNjQ0XG4tLS0gYS9pb191cmluZy9tZW1tYXAuY1xuKysrIGIvaW9fdXJpbmcvbWVtbWFwLmNcbkBAIC00LDYgKzQsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vycm5vLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW1hbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcmVmY291bnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3VzZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvX3VyaW5nLmhcdTAwM2VcbkBAIC04OCw2ICs5MCw1MiBAQCBlbnVtIHtcbiBcdElPX1JFR0lPTl9GX1NJTkdMRV9SRUZcdFx0XHQ9IDQsXG4gfTtcbiBcbitzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnQge1xuK1x0cmVmY291bnRfdCByZWZzO1xuK1x0c3RydWN0IHVzZXJfc3RydWN0ICp1c2VyO1xuK1x0dW5zaWduZWQgbG9uZyBucl9wYWdlcztcbit9O1xuK1xuK3N0YXRpYyBzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnQgKlxuK2lvX3JlZ2lvbl9hY2NvdW50X2FsbG9jKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlciwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbit7XG4rXHRzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnQgKmFjY291bnQ7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCF1c2VyKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdGFjY291bnQgPSBrbWFsbG9jX29iaigqYWNjb3VudCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbitcdGlmICghYWNjb3VudClcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXG4rXHRyZXQgPSBfX2lvX2FjY291bnRfbWVtKHVzZXIsIG5yX3BhZ2VzKTtcbitcdGlmIChyZXQpIHtcbitcdFx0a2ZyZWUoYWNjb3VudCk7XG4rXHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4rXHR9XG4rXG4rXHRyZWZjb3VudF9zZXQoXHUwMDI2YWNjb3VudC1cdTAwM2VyZWZzLCAxKTtcbitcdGFjY291bnQtXHUwMDNldXNlciA9IGdldF91aWQodXNlcik7XG4rXHRhY2NvdW50LVx1MDAzZW5yX3BhZ2VzID0gbnJfcGFnZXM7XG4rXHRyZXR1cm4gYWNjb3VudDtcbit9XG4rXG4rc3RhdGljIHZvaWQgaW9fcmVnaW9uX2FjY291bnRfZ2V0KHN0cnVjdCBpb19yZWdpb25fYWNjb3VudCAqYWNjb3VudClcbit7XG4rXHRpZiAoYWNjb3VudClcbitcdFx0cmVmY291bnRfaW5jKFx1MDAyNmFjY291bnQtXHUwMDNlcmVmcyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGlvX3JlZ2lvbl9hY2NvdW50X3B1dChzdHJ1Y3QgaW9fcmVnaW9uX2FjY291bnQgKmFjY291bnQpXG4re1xuK1x0aWYgKGFjY291bnQgXHUwMDI2XHUwMDI2IHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZhY2NvdW50LVx1MDAzZXJlZnMpKSB7XG4rXHRcdF9faW9fdW5hY2NvdW50X21lbShhY2NvdW50LVx1MDAzZXVzZXIsIGFjY291bnQtXHUwMDNlbnJfcGFnZXMpO1xuK1x0XHRmcmVlX3VpZChhY2NvdW50LVx1MDAzZXVzZXIpO1xuK1x0XHRrZnJlZShhY2NvdW50KTtcbitcdH1cbit9XG4rXG4gdm9pZCBpb19mcmVlX3JlZ2lvbihzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIsIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcilcbiB7XG4gXHRpZiAobXItXHUwMDNlcGFnZXMpIHtcbkBAIC0xMDUsOCArMTUzLDEyIEBAIHZvaWQgaW9fZnJlZV9yZWdpb24oc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyLCBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIpXG4gXHR9XG4gXHRpZiAoKG1yLVx1MDAzZWZsYWdzIFx1MDAyNiBJT19SRUdJT05fRl9WTUFQKSBcdTAwMjZcdTAwMjYgbXItXHUwMDNlcHRyKVxuIFx0XHR2dW5tYXAobXItXHUwMDNlcHRyKTtcbi1cdGlmIChtci1cdTAwM2Vucl9wYWdlcyBcdTAwMjZcdTAwMjYgdXNlcilcbitcdGlmIChtci1cdTAwM2VhY2NvdW50KSB7XG4rXHRcdFdBUk5fT05fT05DRShtci1cdTAwM2VhY2NvdW50LVx1MDAzZXVzZXIgIT0gdXNlcik7XG4rXHRcdGlvX3JlZ2lvbl9hY2NvdW50X3B1dChtci1cdTAwM2VhY2NvdW50KTtcbitcdH0gZWxzZSBpZiAobXItXHUwMDNlbnJfcGFnZXMgXHUwMDI2XHUwMDI2IHVzZXIpIHtcbiBcdFx0X19pb191bmFjY291bnRfbWVtKHVzZXIsIG1yLVx1MDAzZW5yX3BhZ2VzKTtcbitcdH1cbiBcbiBcdG1lbXNldChtciwgMCwgc2l6ZW9mKCptcikpO1xuIH1cbkBAIC0xODgsNyArMjQwLDggQEAgaW50IGlvX2NyZWF0ZV9yZWdpb24oc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcbiBcdGludCBucl9wYWdlcywgcmV0O1xuIFx0dTY0IGVuZDtcbiBcbi1cdGlmIChXQVJOX09OX09OQ0UobXItXHUwMDNlcGFnZXMgfHwgbXItXHUwMDNlcHRyIHx8IG1yLVx1MDAzZW5yX3BhZ2VzKSlcbitcdGlmIChXQVJOX09OX09OQ0UobXItXHUwMDNlcGFnZXMgfHwgbXItXHUwMDNlcHRyIHx8IG1yLVx1MDAzZW5yX3BhZ2VzIHx8XG4rXHRcdFx0IG1yLVx1MDAzZWFjY291bnQpKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdGlmIChtZW1jaHJfaW52KFx1MDAyNnJlZy1cdTAwM2VfX3Jlc3YsIDAsIHNpemVvZihyZWctXHUwMDNlX19yZXN2KSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTIwNywxMCArMjYwLDIzIEBAIGludCBpb19jcmVhdGVfcmVnaW9uKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LCBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXG4gXHRcdHJldHVybiAtRU9WRVJGTE9XO1xuIFxuIFx0bnJfcGFnZXMgPSByZWctXHUwMDNlc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbi1cdGlmIChjdHgtXHUwMDNldXNlcikge1xuLVx0XHRyZXQgPSBfX2lvX2FjY291bnRfbWVtKGN0eC1cdTAwM2V1c2VyLCBucl9wYWdlcyk7XG4tXHRcdGlmIChyZXQpXG4rXHRpZiAocmVnLVx1MDAzZWZsYWdzIFx1MDAyNiBJT1JJTkdfTUVNX1JFR0lPTl9UWVBFX1VTRVIpIHtcbitcdFx0aWYgKGN0eC1cdTAwM2V1c2VyKSB7XG4rXHRcdFx0cmV0ID0gX19pb19hY2NvdW50X21lbShjdHgtXHUwMDNldXNlciwgbnJfcGFnZXMpO1xuK1x0XHRcdGlmIChyZXQpXG4rXHRcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHQvKlxuK1x0XHQgKiBLZXJuZWwtYWxsb2NhdGVkIHBhZ2VzIGNhbiBvdXRsaXZlIHRoZWlyIGFjdGl2ZSByZWdpb24gdGhyb3VnaFxuK1x0XHQgKiB1c2Vyc3BhY2UgbWFwcGluZ3MuXG4rXHRcdCAqL1xuK1x0XHRtci1cdTAwM2VhY2NvdW50ID0gaW9fcmVnaW9uX2FjY291bnRfYWxsb2MoY3R4LVx1MDAzZXVzZXIsIG5yX3BhZ2VzKTtcbitcdFx0aWYgKElTX0VSUihtci1cdTAwM2VhY2NvdW50KSkge1xuK1x0XHRcdHJldCA9IFBUUl9FUlIobXItXHUwMDNlYWNjb3VudCk7XG4rXHRcdFx0bXItXHUwMDNlYWNjb3VudCA9IE5VTEw7XG4gXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0fVxuIFx0fVxuIFx0bXItXHUwMDNlbnJfcGFnZXMgPSBucl9wYWdlcztcbiBcbkBAIC0yODEsMTUgKzM0Nyw0MSBAQCBzdGF0aWMgdm9pZCAqaW9fdXJpbmdfdmFsaWRhdGVfbW1hcF9yZXF1ZXN0KHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3QgcGdvZmYpXG4gXG4gI2lmZGVmIENPTkZJR19NTVVcbiBcbitzdGF0aWMgdm9pZCBpb19yZWdpb25fdm1fb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbit7XG4rXHRpb19yZWdpb25fYWNjb3VudF9nZXQodm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGlvX3JlZ2lvbl92bV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbit7XG4rXHRpb19yZWdpb25fYWNjb3VudF9wdXQodm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSk7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaW9fcmVnaW9uX3ZtX29wcyA9IHtcbitcdC5vcGVuID0gaW9fcmVnaW9uX3ZtX29wZW4sXG4rXHQuY2xvc2UgPSBpb19yZWdpb25fdm1fY2xvc2UsXG4rfTtcbitcbiBzdGF0aWMgaW50IGlvX3JlZ2lvbl9tbWFwKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuIFx0XHRcdCAgc3RydWN0IGlvX21hcHBlZF9yZWdpb24gKm1yLFxuIFx0XHRcdCAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0ICB1bnNpZ25lZCBtYXhfcGFnZXMpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IG1pbihtci1cdTAwM2Vucl9wYWdlcywgbWF4X3BhZ2VzKTtcbitcdGludCByZXQ7XG4gXG4gXHR2bV9mbGFnc19zZXQodm1hLCBWTV9ET05URVhQQU5EKTtcbi1cdHJldHVybiB2bV9pbnNlcnRfcGFnZXModm1hLCB2bWEtXHUwMDNldm1fc3RhcnQsIG1yLVx1MDAzZXBhZ2VzLCBcdTAwMjZucl9wYWdlcyk7XG4rXHRyZXQgPSB2bV9pbnNlcnRfcGFnZXModm1hLCB2bWEtXHUwMDNldm1fc3RhcnQsIG1yLVx1MDAzZXBhZ2VzLCBcdTAwMjZucl9wYWdlcyk7XG4rXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgbXItXHUwMDNlYWNjb3VudCkge1xuK1x0XHQvKlxuK1x0XHQgKiBBY2NvdW50aW5nIGRlbGliZXJhdGVseSByZW1haW5zIGF0IHJlZ2lvbiBncmFudWxhcml0eSB3aGVuXG4rXHRcdCAqIHRoaXMgVk1BIG1hcHMgb25seSBwYXJ0IG9mIHRoZSByZWdpb24uXG4rXHRcdCAqL1xuK1x0XHR2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gbXItXHUwMDNlYWNjb3VudDtcbitcdFx0dm1hLVx1MDAzZXZtX29wcyA9IFx1MDAyNmlvX3JlZ2lvbl92bV9vcHM7XG4rXHRcdHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlb3Blbih2bWEpO1xuK1x0fVxuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gX19jb2xkIGludCBpb191cmluZ19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbkBAIC0zNzksNiArNDcxLDggQEAgc3RhdGljIHZvaWQgaW9fdXJpbmdfbm9tbXVfdm1fY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gXG4gXHRmb3IgKGluZGV4ID0gdm1hLVx1MDAzZXZtX3N0YXJ0OyBpbmRleCBcdTAwM2Mgdm1hLVx1MDAzZXZtX2VuZDsgaW5kZXggKz0gUEFHRV9TSVpFKVxuIFx0XHRwdXRfcGFnZSh2aXJ0X3RvX3BhZ2UoKHZvaWQgKikgaW5kZXgpKTtcbitcbitcdGlvX3JlZ2lvbl9hY2NvdW50X3B1dCh2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhKTtcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBpb191cmluZ19ub21tdV92bV9vcHMgPSB7XG5AQCAtNDExLDYgKzUwNSw4IEBAIGludCBpb191cmluZ19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHJlZ2lvbi1cdTAwM2Vucl9wYWdlczsgaSsrKVxuIFx0XHRnZXRfcGFnZShyZWdpb24tXHUwMDNlcGFnZXNbaV0pO1xuIFxuK1x0dm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IHJlZ2lvbi1cdTAwM2VhY2NvdW50O1xuK1x0aW9fcmVnaW9uX2FjY291bnRfZ2V0KHJlZ2lvbi1cdTAwM2VhY2NvdW50KTtcbiBcdHZtYS1cdTAwM2V2bV9vcHMgPSBcdTAwMjZpb191cmluZ19ub21tdV92bV9vcHM7XG4gXHRyZXR1cm4gMDtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwNzozMDo0MC41NDUyMzg2NjhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQxMDQzNDkxMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqaW9fdXJpbmcgTWVtb3J5IEFjY291bnRpbmcgRml4OiBObyBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGlvX3VyaW5nL21lbW1hcC5jYC4gSXQncyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgYWRkaXRpb24gZm9yIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGUgY29yZSBvZiBpdCBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIHRoaXMgYGlvX3JlZ2lvbl9hY2NvdW50YCBzdHJ1Y3QuICBJdCdzIG1lYW50IHRvIHRyYWNrIHRoZSBtZW1vcnkgYWNjb3VudGluZyBmb3IgdGhvc2UgYGlvX21hcHBlZF9yZWdpb25gIHJlZ2lvbnMuIEkgc2VlIHRoZSBmaWVsZHM6IGEgcmVmZXJlbmNlIGNvdW50IChgcmVmc2ApLCB0aGUgYHVzZXJgIHdobyBvd25zIHRoZSBtZW1vcnksIGFuZCB0aGUgbnVtYmVyIG9mIHBhZ2VzIChgbnJfcGFnZXNgKS4gIEl0IGxvb2tzIGxpa2UgaXQncyBhbGxvY2F0ZWQgdXNpbmcgYGttYWxsb2Nfb2JqYCwgd2hpY2ggSSBzdXNwZWN0IGlzIGp1c3QgYSBtYWNybyBmb3IgYGttYWxsb2NgIHdpdGggc29tZSBmbGFncywgbGlrZWx5IGBHRlBfS0VSTkVMX0FDQ09VTlRgLi4uIHllcCwgdGhhdCdzIHdoYXQgaXQgbG9va3MgbGlrZS4gIEl0J3MgaW1wb3J0YW50IHRoYXQgdGhpcyBzdHJ1Y3QgY29udGFpbnMgYSBgcmVmY291bnRgIGFzIGEgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlIGNvdWxkIGV4aXN0LlxuXG5SaWdodCwgc28gdGhlIHBhdGNoIGFsbG9jYXRlcyB0aGlzIGBpb19yZWdpb25fYWNjb3VudGAgYW5kIGNhcmVmdWxseSBpbml0aWFsaXplcyAqYWxsKiBpdHMgZmllbGRzIOKAkyB0aGUgcmVmY291bnQsIHRoZSB1c2VyLCBhbmQgdGhlIG51bWJlciBvZiBwYWdlcy4gIFRoZW4gaXQgbGlua3MgdGhpcyBhY2NvdW50IHRvIHRoZSBgaW9fbWFwcGVkX3JlZ2lvbmAgc3RydWN0IChgbXItXHUwMDNlYWNjb3VudGApLiAgQW5kLCBjcml0aWNhbGx5LCBpdCBhc3NvY2lhdGVzIHRoaXMgYWNjb3VudCB3aXRoIHRoZSBWTUEgKFZpcnR1YWwgTWVtb3J5IEFyZWEpIGR1cmluZyBgaW9fcmVnaW9uX21tYXBgLiBUaGUgYHZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGEgPSBtci1cdTAwM2VhY2NvdW50O2AgbGluZSBpcyB3aGF0IG1hdHRlcnMgZm9yIHRoZSBsaWZlY3ljbGUgbWFuYWdlbWVudC4gVGhlIGFjY291bnRpbmcgaXMgbm93IHByb3Blcmx5IHRpZWQgdG8gdGhlIFZNQSdzIGxpZmV0aW1lLlxuXG5UaGUgYmVhdXR5IGlzIHRoYXQgdGhpcyBpcyAqZW50aXJlbHkqIGludGVybmFsLiAgTm90aGluZyBmcm9tIHRoaXMgYGlvX3JlZ2lvbl9hY2NvdW50YCBzdHJ1Y3QgaXMgZXZlciBjb3BpZWQgb3V0IHRvIHVzZXJzcGFjZS4gTm8gbmV3IHVzZXItZmFjaW5nIHN0cnVjdHMgYXJlIGNyZWF0ZWQsIG9yIGV4aXN0aW5nIG9uZXMgbW9kaWZpZWQgaW4gYSB3YXkgdGhhdCByaXNrcyBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBpcyBhbGwgYWJvdXQgdGhlIGtlcm5lbCdzIGludGVybmFsIG1lbW9yeSBhY2NvdW50aW5nLiAgTXkgcHJpbWFyeSBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnV0IHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdGhhdCBraW5kLiAgTXkgdGhvdWdodCBpcyB0aGF0IHRoZSBwYXRjaCAqY29ycmVjdHMqIGEgYnVnIHdoZXJlIGtlcm5lbC1hbGxvY2F0ZWQgcGFnZXMgY291bGQgb3V0bGl2ZSB0aGVpciBhc3NvY2lhdGVkIG1lbW9yeSByZWdpb24gYW5kLCBieSBleHRlbnNpb24sIHRoZSB1c2VyIHNwYWNlIG1hcHBpbmcsIGFuZCBzbyB0aGUgYWNjb3VudGluZyB3b3VsZCBiZSBpbmNvcnJlY3QuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgYmVjYXVzZSBJIHdhbnQgdG8gYmUgKmFic29sdXRlbHkqIHN1cmUuIFRoZSBgaW9fcmVnaW9uX2FjY291bnRgIGFuZCBgaW9fbWFwcGVkX3JlZ2lvbmAgc3RydWN0cyB0aGVtc2VsdmVzIGFyZSBpbnRlcm5hbC4gVGhlIGBpb19jcmVhdGVfcmVnaW9uYCBmdW5jdGlvbiB1c2VzIGEgYHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcmAsIHdoaWNoIGlzIGFsc28gaW50ZXJuYWwuICBXZSdyZSBhZGRpbmcgdGhpcyBgbXItXHUwMDNlYWNjb3VudGAgYW5kIGluaXRpYWxpemluZyBpdC4gTm8gZXh0ZXJuYWwgc3RydWN0cyBhcmUgY2hhbmdlZC4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgaGVyZSB0aGF0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBwYXRjaCBpcyBqdXN0IG1lbW9yeSBhY2NvdW50aW5nIGxpZmVjeWNsZSBtYW5hZ2VtZW50LCB0aGF0IGlzLCBpdCBpcyBmaXhpbmcgYSBsZWFrLiBLQVNBTiB3b3VsZCBkZWZpbml0ZWx5IGNhdGNoIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBoZXJlLCBpZiBhbnkgZXhpc3RlZC4gS01TQU4gd291bGRuJ3QgYXBwbHkgaGVyZS5cblxuT2theSwgbGV0J3MganVzdCBkbyBhIHF1aWNrIHNjYW4gb2YgdGhlIGNvZGUgYWdhaW4sIGp1c3QgdG8gYmUgdGhvcm91Z2g6IFl1cCwgYGFjY291bnRgIGlzIGEgcG9pbnRlciwgdGhhdCBpcyBpbml0aWFsaXplZC4gVGhlIGBpb19yZWdpb25fYWNjb3VudF9hbGxvY2AgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgZXZlcnkgZmllbGQgYmVmb3JlIHJldHVybmluZyB0aGUgYWNjb3VudC4gR29vZC4gVGhlbiBpbiBjbGVhbnVwIGZ1bmN0aW9ucyB0aGUgYGFjY291bnRgIGlzIGRlLXJlZmVyZW5jZWQgYW5kIHplcm9lZC4gQW5kIGZpbmFsbHkgYSBjaGVjayBlbnN1cmVzIHRoYXQgdGhlIHJlZ2lvbiBoYXMgYmVlbiBpbml0aWFsaXplZC4gU3RhbmRhcmQgVk1BIG9wZXJhdGlvbnMgYXJlIGNvcnJlY3RseSBjYWxsZWQ6IGBpb19yZWdpb25fdm1fb3BlbmAuXG5cbkknbSBjb25maWRlbnQuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gVGhpcyBpcyBhIG1lbW9yeSBhY2NvdW50aW5nIGZpeC4gTm8gbmVlZCBmb3IgS01TQU4uIFRoZSByZWFzb25pbmcgaXMgdGhhdCB0aGUgbmV3IGBpb19yZWdpb25fYWNjb3VudGAgc3RydWN0IHRyYWNrcyBtZW1vcnkgYWNyb3NzIFZNQSBsaWZlY3ljbGVzIGFuZCBldmVyeSBmaWVsZCBpcyBpbml0aWFsaXplZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAzNywiT3V0cHV0VG9rZW5zIjoxNjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDQyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDc6MzA6NTQuNjQ5NTkxMDAzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGludGVybmFsIHN0cnVjdHVyZSBgaW9fcmVnaW9uX2FjY291bnRgIHRvIHRyYWNrIG1lbW9yeSBhY2NvdW50aW5nIGZvciBpb191cmluZyBtZW1vcnkgcmVnaW9ucyBhY3Jvc3MgVk1BIGxpZmVjeWNsZXMuIFRoZSBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIGludGVybmFsbHkgYW5kIGFsbCBpdHMgZmllbGRzIChgcmVmc2AsIGB1c2VyYCwgYG5yX3BhZ2VzYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGV4cG9zZWQgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFRoZSBjaGFuZ2VzIHByaW1hcmlseSBhZGRyZXNzIG1lbW9yeSBhY2NvdW50aW5nIGFuZCBvYmplY3QgbGlmZWN5Y2xlcywgd2hlcmUgYW55IHBvdGVudGlhbCBidWdzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBsZWFrcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGludGVybmFsIHN0cnVjdHVyZSBgaW9fcmVnaW9uX2FjY291bnRgIHRvIHRyYWNrIG1lbW9yeSBhY2NvdW50aW5nIGZvciBpb191cmluZyBtZW1vcnkgcmVnaW9ucyBhY3Jvc3MgVk1BIGxpZmVjeWNsZXMuIFRoZSBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIGludGVybmFsbHkgYW5kIGFsbCBpdHMgZmllbGRzIChgcmVmc2AsIGB1c2VyYCwgYG5yX3BhZ2VzYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGV4cG9zZWQgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFRoZSBjaGFuZ2VzIHByaW1hcmlseSBhZGRyZXNzIG1lbW9yeSBhY2NvdW50aW5nIGFuZCBvYmplY3QgbGlmZWN5Y2xlcywgd2hlcmUgYW55IHBvdGVudGlhbCBidWdzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBsZWFrcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBtZW1vcnkgbGVhayBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowz9pwk[1] Phase: Succeeded StartedAt: 2026-08-16 07:31:05 +0000 UTC FinishedAt: 2026-08-16 07:31:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz9pwk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-16 07:31:05 +0000 UTC FinishedAt: 2026-08-16 07:31:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz9pwk[2] Phase: Succeeded StartedAt: 2026-08-16 07:31:05 +0000 UTC FinishedAt: 2026-08-16 11:10:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz9pwk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_create_region","io_free_region","io_uring_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"642897a0-bc8f-473d-978f-033c1aa749f7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-16 07:31:05 +0000 UTC FinishedAt: 2026-08-16 11:10:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_create_region","io_free_region","io_uring_mmap"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"642897a0-bc8f-473d-978f-033c1aa749f7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowz9pwk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_create_region","io_free_region","io_uring_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"642897a0-bc8f-473d-978f-033c1aa749f7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-16 07:31:05 +0000 UTC FinishedAt: 2026-08-16 07:31:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz9pwk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_create_region","io_free_region","io_uring_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"642897a0-bc8f-473d-978f-033c1aa749f7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-16 07:31:05 +0000 UTC FinishedAt: 2026-08-16 07:31:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowz9pwk/series-workflowz9pwk-convert-artifact-2045097433/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz9pwk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_create_region","io_free_region","io_uring_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"642897a0-bc8f-473d-978f-033c1aa749f7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-16 07:31:15 +0000 UTC FinishedAt: 2026-08-16 07:47:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz9pwk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_create_region","io_free_region","io_uring_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"642897a0-bc8f-473d-978f-033c1aa749f7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-16 07:31:15 +0000 UTC FinishedAt: 2026-08-16 07:47:32 +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:*549daaee-defc-4afa-b9a0-85a2e516e832,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-workflowz9pwk/series-workflowz9pwk-convert-artifact-2045097433/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": "82428b98-3f0d-488c-ba28-86713b68edaa", "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-workflowz9pwk/series-workflowz9pwk-build-action-3042563703/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz9pwk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_create_region","io_free_region","io_uring_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"642897a0-bc8f-473d-978f-033c1aa749f7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-16 07:31:15 +0000 UTC FinishedAt: 2026-08-16 07:47:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*549daaee-defc-4afa-b9a0-85a2e516e832,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-workflowz9pwk/series-workflowz9pwk-convert-artifact-2045097433/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": "82428b98-3f0d-488c-ba28-86713b68edaa", "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-workflowz9pwk/series-workflowz9pwk-build-action-3042563703/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz9pwk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_create_region","io_free_region","io_uring_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"642897a0-bc8f-473d-978f-033c1aa749f7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-16 07:47:32 +0000 UTC FinishedAt: 2026-08-16 07:47:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz9pwk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_create_region","io_free_region","io_uring_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"642897a0-bc8f-473d-978f-033c1aa749f7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-16 07:47:32 +0000 UTC FinishedAt: 2026-08-16 07:47:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz9pwk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_create_region","io_free_region","io_uring_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"642897a0-bc8f-473d-978f-033c1aa749f7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-16 07:47:32 +0000 UTC FinishedAt: 2026-08-16 07:47:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz9pwk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_create_region","io_free_region","io_uring_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"642897a0-bc8f-473d-978f-033c1aa749f7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-16 07:47:32 +0000 UTC FinishedAt: 2026-08-16 07:47:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"642897a0-bc8f-473d-978f-033c1aa749f7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowz9pwk/series-workflowz9pwk-convert-artifact-2717023404/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz9pwk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_create_region","io_free_region","io_uring_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"642897a0-bc8f-473d-978f-033c1aa749f7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-16 07:47:43 +0000 UTC FinishedAt: 2026-08-16 07:49:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz9pwk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_create_region","io_free_region","io_uring_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"642897a0-bc8f-473d-978f-033c1aa749f7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-16 07:47:43 +0000 UTC FinishedAt: 2026-08-16 07:49:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*82428b98-3f0d-488c-ba28-86713b68edaa,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-workflowz9pwk/series-workflowz9pwk-build-action-3042563703/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-workflowz9pwk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_create_region","io_free_region","io_uring_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"642897a0-bc8f-473d-978f-033c1aa749f7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-16 07:49:59 +0000 UTC FinishedAt: 2026-08-16 07:49:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz9pwk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_create_region","io_free_region","io_uring_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"642897a0-bc8f-473d-978f-033c1aa749f7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-16 07:49:59 +0000 UTC FinishedAt: 2026-08-16 07:49:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz9pwk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_create_region","io_free_region","io_uring_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"642897a0-bc8f-473d-978f-033c1aa749f7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-16 07:49:59 +0000 UTC FinishedAt: 2026-08-16 08:06:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz9pwk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_create_region","io_free_region","io_uring_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"642897a0-bc8f-473d-978f-033c1aa749f7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-16 07:49:59 +0000 UTC FinishedAt: 2026-08-16 08:06:17 +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:*549daaee-defc-4afa-b9a0-85a2e516e832,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-workflowz9pwk/series-workflowz9pwk-convert-artifact-2717023404/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": "61aab1fc-63ff-4e9c-a51c-935ed2b678c6", "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-workflowz9pwk/series-workflowz9pwk-build-action-252969800/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz9pwk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_create_region","io_free_region","io_uring_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"642897a0-bc8f-473d-978f-033c1aa749f7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-16 07:49:59 +0000 UTC FinishedAt: 2026-08-16 08:06:07 +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:*549daaee-defc-4afa-b9a0-85a2e516e832,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-workflowz9pwk/series-workflowz9pwk-convert-artifact-2717023404/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": "61aab1fc-63ff-4e9c-a51c-935ed2b678c6", "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-workflowz9pwk/series-workflowz9pwk-build-action-252969800/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz9pwk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_create_region","io_free_region","io_uring_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"642897a0-bc8f-473d-978f-033c1aa749f7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-16 08:06:17 +0000 UTC FinishedAt: 2026-08-16 08:06:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz9pwk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_create_region","io_free_region","io_uring_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"642897a0-bc8f-473d-978f-033c1aa749f7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-16 08:06:17 +0000 UTC FinishedAt: 2026-08-16 08:06:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz9pwk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_create_region","io_free_region","io_uring_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"642897a0-bc8f-473d-978f-033c1aa749f7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-16 08:06:17 +0000 UTC FinishedAt: 2026-08-16 08:08:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz9pwk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_create_region","io_free_region","io_uring_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"642897a0-bc8f-473d-978f-033c1aa749f7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-16 08:06:17 +0000 UTC FinishedAt: 2026-08-16 08:08:16 +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:*61aab1fc-63ff-4e9c-a51c-935ed2b678c6,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-workflowz9pwk/series-workflowz9pwk-build-action-252969800/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-workflowz9pwk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_create_region","io_free_region","io_uring_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"642897a0-bc8f-473d-978f-033c1aa749f7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-16 08:08:26 +0000 UTC FinishedAt: 2026-08-16 11:10:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz9pwk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_create_region","io_free_region","io_uring_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"642897a0-bc8f-473d-978f-033c1aa749f7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-16 08:08:26 +0000 UTC FinishedAt: 2026-08-16 11:10:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_create_region","io_free_region","io_uring_mmap"],"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:*82428b98-3f0d-488c-ba28-86713b68edaa,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*61aab1fc-63ff-4e9c-a51c-935ed2b678c6,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-workflowz9pwk/series-workflowz9pwk-build-action-3042563703/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-workflowz9pwk/series-workflowz9pwk-build-action-252969800/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowz9pwk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_create_region","io_free_region","io_uring_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"642897a0-bc8f-473d-978f-033c1aa749f7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-16 08:08:26 +0000 UTC FinishedAt: 2026-08-16 08:08:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz9pwk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_create_region","io_free_region","io_uring_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"642897a0-bc8f-473d-978f-033c1aa749f7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-16 08:08:26 +0000 UTC FinishedAt: 2026-08-16 08:08:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_create_region","io_free_region","io_uring_mmap"],"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-workflowz9pwk/series-workflowz9pwk-convert-artifact-3417886357/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz9pwk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_create_region","io_free_region","io_uring_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"642897a0-bc8f-473d-978f-033c1aa749f7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-16 08:08:26 +0000 UTC FinishedAt: 2026-08-16 08:08:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz9pwk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_create_region","io_free_region","io_uring_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"642897a0-bc8f-473d-978f-033c1aa749f7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-16 08:08:26 +0000 UTC FinishedAt: 2026-08-16 08:08:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz9pwk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_create_region","io_free_region","io_uring_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"642897a0-bc8f-473d-978f-033c1aa749f7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-16 08:08:26 +0000 UTC FinishedAt: 2026-08-16 08:08:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz9pwk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_create_region","io_free_region","io_uring_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"642897a0-bc8f-473d-978f-033c1aa749f7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-16 08:08:36 +0000 UTC FinishedAt: 2026-08-16 11:10:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz9pwk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_create_region","io_free_region","io_uring_mmap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5161661ae99f497affa83a5b8654e457cda6267","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"642897a0-bc8f-473d-978f-033c1aa749f7","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-16 08:08:36 +0000 UTC FinishedAt: 2026-08-16 11:10:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*82428b98-3f0d-488c-ba28-86713b68edaa,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*61aab1fc-63ff-4e9c-a51c-935ed2b678c6,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-workflowz9pwk/series-workflowz9pwk-build-action-3042563703/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-workflowz9pwk/series-workflowz9pwk-build-action-252969800/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-workflowz9pwk/series-workflowz9pwk-convert-artifact-3417886357/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,}