Name: series-workflow56d4b Phase: Succeeded StartedAt: 2026-07-23 14:44:06 +0000 UTC FinishedAt: 2026-07-23 16:32:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow56d4b[0] Phase: Succeeded StartedAt: 2026-07-23 14:44:06 +0000 UTC FinishedAt: 2026-07-23 15:07:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow56d4b[0].run-triage Phase: Succeeded StartedAt: 2026-07-23 14:44:06 +0000 UTC FinishedAt: 2026-07-23 15:07:02 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "87267b89459813cb50ab5377e076b639c07b4491", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT", "FRAME_POINTER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "87267b89459813cb50ab5377e076b639c07b4491", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT", "FRAME_POINTER" ], "series_id": "0ba34b37-9a16-44b3-ba20-71d2eb01602a" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "arch_bpf_stack_walk", "bpf_jit_build_prologue", "bpf_jit_supports_exceptions" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE1OjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7RlJBTUVfUE9JTlRFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FyY2hfYnBmX3N0YWNrX3dhbGsmIzM0OywKICAgICYjMzQ7YnBmX2ppdF9idWlsZF9wcm9sb2d1ZSYjMzQ7LAogICAgJiMzNDticGZfaml0X3N1cHBvcnRzX2V4Y2VwdGlvbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBCUEYgZXhjZXB0aW9uIHN1cHBvcnQgdG8gdGhlIFJJU0MtViBhcmNoaXRlY3R1cmUuIEl0IG1vZGlmaWVzIHRoZSBCUEYgSklUIGNvbXBpbGVyIHRvIGVtaXQgZXhjZXB0aW9uIHByb2xvZ3VlcyBhbmQgZXBpbG9ndWVzLCBhbmQgaW1wbGVtZW50cyBgYXJjaF9icGZfc3RhY2tfd2Fsa2AgZm9yIHVud2luZGluZyB0aGUgc3RhY2sgZHVyaW5nIEJQRiBleGNlcHRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBrZXJuZWwgYW5kIEJQRiBKSVQgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE1OjA2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODdhNDc2MmFkOTMzYjRjOTBjOGE5ZDcxN2UwOTNmZjI4NmVkYWU3M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIzIDE1OjA2OjMwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3RhY2t0cmFjZS5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9zdGFja3RyYWNlLmhcbmluZGV4IGIxNDk1YTdlMDZjZTY5Li5mZDFmZjA0YTA0MGU5NSAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3RhY2t0cmFjZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3N0YWNrdHJhY2UuaFxuQEAgLTExLDggJiM0MzsxMSwxMSBAQCBzdHJ1Y3Qgc3RhY2tmcmFtZSB7XG4gXHR1bnNpZ25lZCBsb25nIHJhO1xuIH07XG4gXG4mIzQzO3R5cGVkZWYgYm9vbCAoKndhbGtfc3RhY2tmcmFtZV9mbikodm9pZCAqYXJnLCB1bnNpZ25lZCBsb25nIHBjLFxuJiM0MztcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc3AsIHVuc2lnbmVkIGxvbmcgZnApO1xuJiM0MztcbiBleHRlcm4gdm9pZCBub3RyYWNlIHdhbGtfc3RhY2tmcmFtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzLFxuLVx0XHRcdFx0ICAgIGJvb2wgKCpmbikodm9pZCAqLCB1bnNpZ25lZCBsb25nKSwgdm9pZCAqYXJnKTtcbiYjNDM7XHRcdFx0XHQgICAgd2Fsa19zdGFja2ZyYW1lX2ZuIGZuLCB2b2lkICphcmcpO1xuIGV4dGVybiB2b2lkIGR1bXBfYmFja3RyYWNlKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssXG4gXHRcdFx0ICAgY29uc3QgY2hhciAqbG9nbHZsKTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2tlcm5lbC9wZXJmX2NhbGxjaGFpbi5jIGIvYXJjaC9yaXNjdi9rZXJuZWwvcGVyZl9jYWxsY2hhaW4uY1xuaW5kZXggYjQ2NWJjOWViODcwZWMuLjkzYTEyZDUzYWEyNmQ3IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rZXJuZWwvcGVyZl9jYWxsY2hhaW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rZXJuZWwvcGVyZl9jYWxsY2hhaW4uY1xuQEAgLTIsNiAmIzQzOzIsNyBAQFxuIC8qIENvcHlyaWdodCAoQykgMjAxOSBIYW5nemhvdSBDLVNLWSBNaWNyb3N5c3RlbXMgY28uLGx0ZC4gKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wZXJmX2V2ZW50LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc3RhY2t0cmFjZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3N0YWNrdHJhY2UuaFx1MDAzZVxuQEAgLTQ0LDUgJiM0Mzs0NSw1IEBAIHZvaWQgcGVyZl9jYWxsY2hhaW5fa2VybmVsKHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeV9jdHggKmVudHJ5LFxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHR3YWxrX3N0YWNrZnJhbWUoTlVMTCwgcmVncywgZmlsbF9jYWxsY2hhaW4sIGVudHJ5KTtcbiYjNDM7XHRhcmNoX3N0YWNrX3dhbGsoZmlsbF9jYWxsY2hhaW4sIGVudHJ5LCBjdXJyZW50LCByZWdzKTtcbiB9XG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rZXJuZWwvc3RhY2t0cmFjZS5jIGIvYXJjaC9yaXNjdi9rZXJuZWwvc3RhY2t0cmFjZS5jXG5pbmRleCBjNzU1NTQ0NzE0OWJmZS4uYzBmMjM5M2U1MTYzY2IgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2tlcm5lbC9zdGFja3RyYWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva2VybmVsL3N0YWNrdHJhY2UuY1xuQEAgLTUsNiAmIzQzOzUsNyBAQFxuICAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbHRlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2FsbHN5bXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9kZWJ1Zy5oXHUwMDNlXG5AQCAtNDYsNyAmIzQzOzQ3LDcgQEAgc3RhdGljIGlubGluZSBpbnQgZnBfaXNfdmFsaWQodW5zaWduZWQgbG9uZyBmcCwgdW5zaWduZWQgbG9uZyBzcClcbiB9XG4gXG4gdm9pZCBub3RyYWNlIHdhbGtfc3RhY2tmcmFtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzLFxuLVx0XHRcdCAgICAgYm9vbCAoKmZuKSh2b2lkICosIHVuc2lnbmVkIGxvbmcpLCB2b2lkICphcmcpXG4mIzQzO1x0XHRcdCAgICAgd2Fsa19zdGFja2ZyYW1lX2ZuIGZuLCB2b2lkICphcmcpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBmcCwgc3AsIHBjO1xuIFx0aW50IGdyYXBoX2lkeCA9IDA7XG5AQCAtNzEsNyAmIzQzOzcyLDkgQEAgdm9pZCBub3RyYWNlIHdhbGtfc3RhY2tmcmFtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzLFxuIFx0Zm9yICg7Oykge1xuIFx0XHRzdHJ1Y3Qgc3RhY2tmcmFtZSAqZnJhbWU7XG4gXG4tXHRcdGlmICh1bmxpa2VseSghX19rZXJuZWxfdGV4dF9hZGRyZXNzKHBjKSB8fCAobGV2ZWwmIzQzOyYjNDM7IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgIWZuKGFyZywgcGMpKSkpXG4mIzQzO1x0XHQvKiBwYyBiZWxvbmdzIHRvIHRoZSBmdW5jdGlvbiB3aG9zZSBmcmFtZSBwb2ludGVyIGlzIGZwICovXG4mIzQzO1x0XHRpZiAodW5saWtlbHkoIV9fa2VybmVsX3RleHRfYWRkcmVzcyhwYykgfHxcbiYjNDM7XHRcdFx0ICAgICAobGV2ZWwmIzQzOyYjNDM7IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgIWZuKGFyZywgcGMsIHNwLCBmcCkpKSlcbiBcdFx0XHRicmVhaztcbiBcbiBcdFx0aWYgKHVubGlrZWx5KCFmcF9pc192YWxpZChmcCwgc3ApKSlcbkBAIC05MSw3ICYjNDM7OTQsNyBAQCB2b2lkIG5vdHJhY2Ugd2Fsa19zdGFja2ZyYW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXG4gXHRcdFx0XHRcdFx0ICAgXHUwMDI2ZnJhbWUtXHUwMDNlcmEpO1xuIFx0XHRcdGlmIChwYyBcdTAwM2U9ICh1bnNpZ25lZCBsb25nKWhhbmRsZV9leGNlcHRpb24gXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgIHBjIFx1MDAzYyAodW5zaWduZWQgbG9uZylcdTAwMjZyZXRfZnJvbV9leGNlcHRpb25fZW5kKSB7XG4tXHRcdFx0XHRpZiAodW5saWtlbHkoIWZuKGFyZywgcGMpKSlcbiYjNDM7XHRcdFx0XHRpZiAodW5saWtlbHkoIWZuKGFyZywgcGMsIHNwLCBmcCkpKVxuIFx0XHRcdFx0XHRicmVhaztcbiBcbiBcdFx0XHRcdHBjID0gKChzdHJ1Y3QgcHRfcmVncyAqKXNwKS1cdTAwM2VlcGM7XG5AQCAtMTAyLDEwICYjNDM7MTA1LDM0IEBAIHZvaWQgbm90cmFjZSB3YWxrX3N0YWNrZnJhbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyxcbiBcdH1cbiB9XG4gXG4mIzQzO3N0cnVjdCBicGZfdW53aW5kX2NvbnN1bWVfZW50cnlfZGF0YSB7XG4mIzQzO1x0Ym9vbCAoKmNvbnN1bWVfZW50cnkpKHZvaWQgKmNvb2tpZSwgdTY0IGlwLCB1NjQgc3AsIHU2NCBmcCk7XG4mIzQzO1x0dm9pZCAqY29va2llO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgYnBmX3Vud2luZF9jb25zdW1lX2VudHJ5KHZvaWQgKmFyZywgdW5zaWduZWQgbG9uZyBwYyxcbiYjNDM7XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgc3AsIHVuc2lnbmVkIGxvbmcgZnApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX3Vud2luZF9jb25zdW1lX2VudHJ5X2RhdGEgKmRhdGEgPSBhcmc7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkYXRhLVx1MDAzZWNvbnN1bWVfZW50cnkoZGF0YS1cdTAwM2Vjb29raWUsIHBjLCBzcCwgZnApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIG5vdHJhY2UgYXJjaF9icGZfc3RhY2tfd2Fsayhib29sICgqY29uc3VtZV9mbikodm9pZCAqY29va2llLCB1NjQgaXAsIHU2NCBzcCwgdTY0IGJwKSxcbiYjNDM7XHRcdFx0XHQgdm9pZCAqY29va2llKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl91bndpbmRfY29uc3VtZV9lbnRyeV9kYXRhIGRhdGEgPSB7XG4mIzQzO1x0XHQuY29uc3VtZV9lbnRyeSA9IGNvbnN1bWVfZm4sXG4mIzQzO1x0XHQuY29va2llID0gY29va2llLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHdhbGtfc3RhY2tmcmFtZShjdXJyZW50LCBOVUxMLCBicGZfdW53aW5kX2NvbnN1bWVfZW50cnksIFx1MDAyNmRhdGEpO1xuJiM0Mzt9XG4mIzQzO1xuICNlbHNlIC8qICFDT05GSUdfRlJBTUVfUE9JTlRFUiAqL1xuIFxuIHZvaWQgbm90cmFjZSB3YWxrX3N0YWNrZnJhbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLFxuLVx0c3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGJvb2wgKCpmbikodm9pZCAqLCB1bnNpZ25lZCBsb25nKSwgdm9pZCAqYXJnKVxuJiM0MztcdHN0cnVjdCBwdF9yZWdzICpyZWdzLCB3YWxrX3N0YWNrZnJhbWVfZm4gZm4sIHZvaWQgKmFyZylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHNwLCBwYztcbiBcdHVuc2lnbmVkIGxvbmcgKmtzcDtcbkBAIC0xMjcsNyAmIzQzOzE1NCw4IEBAIHZvaWQgbm90cmFjZSB3YWxrX3N0YWNrZnJhbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLFxuIFxuIFx0a3NwID0gKHVuc2lnbmVkIGxvbmcgKilzcDtcbiBcdHdoaWxlICgha3N0YWNrX2VuZChrc3ApKSB7XG4tXHRcdGlmIChfX2tlcm5lbF90ZXh0X2FkZHJlc3MocGMpIFx1MDAyNlx1MDAyNiB1bmxpa2VseSghZm4oYXJnLCBwYykpKVxuJiM0MztcdFx0aWYgKF9fa2VybmVsX3RleHRfYWRkcmVzcyhwYykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgdW5saWtlbHkoIWZuKGFyZywgcGMsICh1bnNpZ25lZCBsb25nKWtzcCwgMCkpKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRwYyA9IFJFQURfT05DRV9OT0NIRUNLKCprc3AmIzQzOyYjNDM7KTtcbiBcdH1cbkBAIC0xMzUsNyAmIzQzOzE2Myw4IEBAIHZvaWQgbm90cmFjZSB3YWxrX3N0YWNrZnJhbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLFxuIFxuICNlbmRpZiAvKiBDT05GSUdfRlJBTUVfUE9JTlRFUiAqL1xuIFxuLXN0YXRpYyBib29sIHByaW50X3RyYWNlX2FkZHJlc3Modm9pZCAqYXJnLCB1bnNpZ25lZCBsb25nIHBjKVxuJiM0MztzdGF0aWMgYm9vbCBwcmludF90cmFjZV9hZGRyZXNzKHZvaWQgKmFyZywgdW5zaWduZWQgbG9uZyBwYyxcbiYjNDM7XHRcdFx0XHR1bnNpZ25lZCBsb25nIHNwLCB1bnNpZ25lZCBsb25nIGZwKVxuIHtcbiBcdGNvbnN0IGNoYXIgKmxvZ2x2bCA9IGFyZztcbiBcbkBAIC0xNTUsNyAmIzQzOzE4NCw4IEBAIHZvaWQgc2hvd19zdGFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHVuc2lnbmVkIGxvbmcgKnNwLCBjb25zdCBjaGFyICpsb2dsdmwpXG4gXHRkdW1wX2JhY2t0cmFjZShOVUxMLCB0YXNrLCBsb2dsdmwpO1xuIH1cbiBcbi1zdGF0aWMgYm9vbCBzYXZlX3djaGFuKHZvaWQgKmFyZywgdW5zaWduZWQgbG9uZyBwYylcbiYjNDM7c3RhdGljIGJvb2wgc2F2ZV93Y2hhbih2b2lkICphcmcsIHVuc2lnbmVkIGxvbmcgcGMsXG4mIzQzO1x0XHQgICAgICAgdW5zaWduZWQgbG9uZyBzcCwgdW5zaWduZWQgbG9uZyBmcClcbiB7XG4gXHRpZiAoIWluX3NjaGVkX2Z1bmN0aW9ucyhwYykpIHtcbiBcdFx0dW5zaWduZWQgbG9uZyAqcCA9IGFyZztcbkBAIC0xNzYsMTAgJiM0MzsyMDYsMjggQEAgdW5zaWduZWQgbG9uZyBfX2dldF93Y2hhbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXG4gXHRyZXR1cm4gcGM7XG4gfVxuIFxuJiM0MztzdHJ1Y3Qgd2Fsa19zdGFja2ZyYW1lX2NvbnN1bWVfZW50cnlfZGF0YSB7XG4mIzQzO1x0c3RhY2tfdHJhY2VfY29uc3VtZV9mbiBjb25zdW1lX2VudHJ5O1xuJiM0MztcdHZvaWQgKmNvb2tpZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHdhbGtfc3RhY2tmcmFtZV9jb25zdW1lX2VudHJ5KHZvaWQgKmFyZywgdW5zaWduZWQgbG9uZyBwYyxcbiYjNDM7XHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBzcCwgdW5zaWduZWQgbG9uZyBmcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB3YWxrX3N0YWNrZnJhbWVfY29uc3VtZV9lbnRyeV9kYXRhICpkYXRhID0gYXJnO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZGF0YS1cdTAwM2Vjb25zdW1lX2VudHJ5KGRhdGEtXHUwMDNlY29va2llLCBwYyk7XG4mIzQzO31cbiYjNDM7XG4gbm9pbmxpbmUgbm9pbnN0ciB2b2lkIGFyY2hfc3RhY2tfd2FsayhzdGFja190cmFjZV9jb25zdW1lX2ZuIGNvbnN1bWVfZW50cnksIHZvaWQgKmNvb2tpZSxcbiBcdFx0ICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIHtcbi1cdHdhbGtfc3RhY2tmcmFtZSh0YXNrLCByZWdzLCBjb25zdW1lX2VudHJ5LCBjb29raWUpO1xuJiM0MztcdHN0cnVjdCB3YWxrX3N0YWNrZnJhbWVfY29uc3VtZV9lbnRyeV9kYXRhIGRhdGEgPSB7XG4mIzQzO1x0XHQuY29uc3VtZV9lbnRyeSA9IGNvbnN1bWVfZW50cnksXG4mIzQzO1x0XHQuY29va2llID0gY29va2llLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHdhbGtfc3RhY2tmcmFtZSh0YXNrLCByZWdzLCB3YWxrX3N0YWNrZnJhbWVfY29uc3VtZV9lbnRyeSwgXHUwMDI2ZGF0YSk7XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbmluZGV4IGFkMDg5YTlhNGVhOWFjLi5lMGMyZjczYmM2NDZhMyAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbkBAIC01Niw2ICYjNDM7NTYsMjkgQEAgc3RhdGljIGNvbnN0IGludCBwdF9yZWdtYXBbXSA9IHtcbiBcdFtSVl9SRUdfVDBdID0gb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHQwKSxcbiB9O1xuIFxuJiM0MzsvKiBGdWxsIHNldCBvZiBSSVNDLVYgY2FsbGVlLXNhdmVkIEdQIHJlZ2lzdGVycyAocmEsIHMwLXMxMSkgc2F2ZWQgYnkgYSBwcm9ncmFtXG4mIzQzOyAqIGFjdGluZyBhcyBhbiBleGNlcHRpb24gYm91bmRhcnksIGluIHRoZSBvcmRlciB0aGV5IGFyZSBzdG9yZWQgb24gdGhlIHN0YWNrLlxuJiM0MzsgKiBSQSBhbmQgRlAgY29tZSBmaXJzdCBzbyB0aGUgc2F2ZWQgcmEvZnAgcGFpciBmb3JtcyBhIHZhbGlkIHN0YWNrZnJhbWUgcmVjb3JkXG4mIzQzOyAqIGF0IFtGUC04XS9bRlAtMTZdIGZvciB0aGUgdW53aW5kZXIuIFRoZSBleGNlcHRpb24gY2FsbGJhY2sgcmV1c2VzIHRoZVxuJiM0MzsgKiBib3VuZGFyeSBwcm9ncmFtJiMzOTtzIGZyYW1lIGFuZCByZXN0b3JlcyB0aGlzIHNhbWUgc2V0IGluIGl0cyBlcGlsb2d1ZSwgc28gYm90aFxuJiM0MzsgKiBwYXRocyBtdXN0IGFncmVlIG9uIHRoZSBjb250ZW50cyBhbmQgb3JkZXJpbmcgb2YgdGhpcyBsaXN0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGNvbnN0IGludCBydl9leGNlcHRpb25fY3NhdmVfcmVnc1tdID0ge1xuJiM0MztcdFJWX1JFR19SQSxcbiYjNDM7XHRSVl9SRUdfRlAsXG4mIzQzO1x0UlZfUkVHX1MxLFxuJiM0MztcdFJWX1JFR19TMixcbiYjNDM7XHRSVl9SRUdfUzMsXG4mIzQzO1x0UlZfUkVHX1M0LFxuJiM0MztcdFJWX1JFR19TNSxcbiYjNDM7XHRSVl9SRUdfUzYsXG4mIzQzO1x0UlZfUkVHX1M3LFxuJiM0MztcdFJWX1JFR19TOCxcbiYjNDM7XHRSVl9SRUdfUzksXG4mIzQzO1x0UlZfUkVHX1MxMCxcbiYjNDM7XHRSVl9SRUdfUzExLFxuJiM0Mzt9O1xuJiM0MztcbiBlbnVtIHtcbiBcdFJWX0NUWF9GX1NFRU5fQ0FMTCA9XHRcdFJWX1JFR19SQSxcbiBcdFJWX0NUWF9GX1NFRU5fUzEgPVx0XHRSVl9SRUdfUzEsXG5AQCAtMTk4LDkgJiM0MzsyMjEsODQgQEAgc3RhdGljIHZvaWQgZW1pdF9pbW0odTggcmQsIHM2NCB2YWwsIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KVxuIFx0XHRlbWl0X2FkZGkocmQsIHJkLCBsb3dlciwgY3R4KTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgX19idWlsZF9lcGlsb2d1ZShib29sIGlzX3RhaWxfY2FsbCwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpXG4mIzQzOy8qIFN0YWNrIHNwYWNlIGZvciB0aGUgY2FsbGVlLXNhdmVkIHJlZ2lzdGVycyBhIG5vcm1hbCBwcm9ncmFtIHNwaWxscyxcbiYjNDM7ICogZXhjbHVkaW5nIHRoZSBCUEYgc3RhY2sgaXRzZWxmLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBub3JtYWxfc3RhY2tfYWRqdXN0KHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHN0YWNrX2FkanVzdCA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChzZWVuX3JlZyhSVl9SRUdfUkEsIGN0eCkpXG4mIzQzO1x0XHRzdGFja19hZGp1c3QgJiM0Mzs9IDg7XG4mIzQzO1x0c3RhY2tfYWRqdXN0ICYjNDM7PSA4OyAvKiBSVl9SRUdfRlAgKi9cbiYjNDM7XHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1MxLCBjdHgpKVxuJiM0MztcdFx0c3RhY2tfYWRqdXN0ICYjNDM7PSA4O1xuJiM0MztcdGlmIChzZWVuX3JlZyhSVl9SRUdfUzIsIGN0eCkpXG4mIzQzO1x0XHRzdGFja19hZGp1c3QgJiM0Mzs9IDg7XG4mIzQzO1x0aWYgKHNlZW5fcmVnKFJWX1JFR19TMywgY3R4KSlcbiYjNDM7XHRcdHN0YWNrX2FkanVzdCAmIzQzOz0gODtcbiYjNDM7XHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1M0LCBjdHgpKVxuJiM0MztcdFx0c3RhY2tfYWRqdXN0ICYjNDM7PSA4O1xuJiM0MztcdGlmIChzZWVuX3JlZyhSVl9SRUdfUzUsIGN0eCkpXG4mIzQzO1x0XHRzdGFja19hZGp1c3QgJiM0Mzs9IDg7XG4mIzQzO1x0aWYgKGN0eC1cdTAwM2VhcmVuYV92bV9zdGFydClcbiYjNDM7XHRcdHN0YWNrX2FkanVzdCAmIzQzOz0gODtcbiYjNDM7XHRzdGFja19hZGp1c3QgJiM0Mzs9IDg7IC8qIFJWX1JFR19UQ0MgKi9cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJvdW5kX3VwKHN0YWNrX2FkanVzdCwgU1RBQ0tfQUxJR04pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBBbGxvY2F0ZSB0aGUgZnJhbWUgYW5kIHNhdmUgdGhlIGNhbGxlZS1zYXZlZCByZWdpc3RlcnMgdGhlIHByb2dyYW1cbiYjNDM7ICogYWN0dWFsbHkgY2xvYmJlcnMsIHRoZW4gcG9pbnQgRlAgYXQgdGhlIGZyYW1lIHRvcC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGVtaXRfbm9ybWFsX3Byb2xvZ3VlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LCBpbnQgc3RhY2tfYWRqdXN0KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHN0b3JlX29mZnNldCA9IHN0YWNrX2FkanVzdCAtIDg7XG4mIzQzO1x0LyogdGFpbGNhbGwgc3RhcnRzIGhlcmUsIGVtaXQgaW5zbiBiZWZvcmUgaXQgbXVzdCBiZSBmaXhlZCAqL1xuJiM0MztcbiYjNDM7XHRlbWl0X2FkZGkoUlZfUkVHX1NQLCBSVl9SRUdfU1AsIC1zdGFja19hZGp1c3QsIGN0eCk7XG4mIzQzO1xuJiM0MztcdGlmIChzZWVuX3JlZyhSVl9SRUdfUkEsIGN0eCkpIHtcbiYjNDM7XHRcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19SQSwgY3R4KTtcbiYjNDM7XHRcdHN0b3JlX29mZnNldCAtPSA4O1xuJiM0MztcdH1cbiYjNDM7XHRlbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfRlAsIGN0eCk7XG4mIzQzO1x0c3RvcmVfb2Zmc2V0IC09IDg7XG4mIzQzO1x0aWYgKHNlZW5fcmVnKFJWX1JFR19TMSwgY3R4KSkge1xuJiM0MztcdFx0ZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX1MxLCBjdHgpO1xuJiM0MztcdFx0c3RvcmVfb2Zmc2V0IC09IDg7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChzZWVuX3JlZyhSVl9SRUdfUzIsIGN0eCkpIHtcbiYjNDM7XHRcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19TMiwgY3R4KTtcbiYjNDM7XHRcdHN0b3JlX29mZnNldCAtPSA4O1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1MzLCBjdHgpKSB7XG4mIzQzO1x0XHRlbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfUzMsIGN0eCk7XG4mIzQzO1x0XHRzdG9yZV9vZmZzZXQgLT0gODtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKHNlZW5fcmVnKFJWX1JFR19TNCwgY3R4KSkge1xuJiM0MztcdFx0ZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX1M0LCBjdHgpO1xuJiM0MztcdFx0c3RvcmVfb2Zmc2V0IC09IDg7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChzZWVuX3JlZyhSVl9SRUdfUzUsIGN0eCkpIHtcbiYjNDM7XHRcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19TNSwgY3R4KTtcbiYjNDM7XHRcdHN0b3JlX29mZnNldCAtPSA4O1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoY3R4LVx1MDAzZWFyZW5hX3ZtX3N0YXJ0KSB7XG4mIzQzO1x0XHRlbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfQVJFTkEsIGN0eCk7XG4mIzQzO1x0XHRzdG9yZV9vZmZzZXQgLT0gODtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIHN0b3JlIFRDQyBmcm9tIFJWX1JFR19UQ0MgdG8gc3RhY2sgKi9cbiYjNDM7XHRlbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfVENDLCBjdHgpO1xuJiM0MztcdGN0eC1cdTAwM2V0Y2Nfb2Zmc2V0ID0gc3RvcmVfb2Zmc2V0O1xuJiM0MztcbiYjNDM7XHRlbWl0X2FkZGkoUlZfUkVHX0ZQLCBSVl9SRUdfU1AsIHN0YWNrX2FkanVzdCwgY3R4KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZW1pdF9ub3JtYWxfcmVzdG9yZShzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCwgaW50IHN0YWNrX2FkanVzdClcbiB7XG4tXHRpbnQgc3RhY2tfYWRqdXN0ID0gY3R4LVx1MDAzZXN0YWNrX3NpemUsIHN0b3JlX29mZnNldCA9IHN0YWNrX2FkanVzdCAtIDg7XG4mIzQzO1x0aW50IHN0b3JlX29mZnNldCA9IHN0YWNrX2FkanVzdCAtIDg7XG4gXG4gXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1JBLCBjdHgpKSB7XG4gXHRcdGVtaXRfbGQoUlZfUkVHX1JBLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19TUCwgY3R4KTtcbkBAIC0yMzUsNiAmIzQzOzMzMyw2OSBAQCBzdGF0aWMgdm9pZCBfX2J1aWxkX2VwaWxvZ3VlKGJvb2wgaXNfdGFpbF9jYWxsLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eClcbiBcbiBcdC8qIHJlc3RvcmUgVENDIGZyb20gc3RhY2sgdG8gUlZfUkVHX1RDQyAqL1xuIFx0ZW1pdF9sZChSVl9SRUdfVENDLCBjdHgtXHUwMDNldGNjX29mZnNldCwgUlZfUkVHX1NQLCBjdHgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBpc19leGNlcHRpb25fcHJvZyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcHJvZy1cdTAwM2VhdXgtXHUwMDNlZXhjZXB0aW9uX2JvdW5kYXJ5IHx8IHByb2ctXHUwMDNlYXV4LVx1MDAzZWV4Y2VwdGlvbl9jYjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZW1pdF9leGNlcHRpb25fYm91bmRhcnlfcHJvbG9ndWUoc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXG4mIzQzO1x0XHRcdFx0XHQgICAgIGludCBzdGFja19hZGp1c3QpXG4mIzQzO3tcbiYjNDM7XHRpbnQgc3RvcmVfb2Zmc2V0ID0gc3RhY2tfYWRqdXN0IC0gODtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0ZW1pdF9hZGRpKFJWX1JFR19TUCwgUlZfUkVHX1NQLCAtc3RhY2tfYWRqdXN0LCBjdHgpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocnZfZXhjZXB0aW9uX2NzYXZlX3JlZ3MpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0ZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgcnZfZXhjZXB0aW9uX2NzYXZlX3JlZ3NbaV0sIGN0eCk7XG4mIzQzO1x0XHRzdG9yZV9vZmZzZXQgLT0gODtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIHN0b3JlIFRDQyBmcm9tIFJWX1JFR19UQ0MgdG8gc3RhY2sgKi9cbiYjNDM7XHRlbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfVENDLCBjdHgpO1xuJiM0MztcdGN0eC1cdTAwM2V0Y2Nfb2Zmc2V0ID0gc3RvcmVfb2Zmc2V0O1xuJiM0MztcbiYjNDM7XHRlbWl0X2FkZGkoUlZfUkVHX0ZQLCBSVl9SRUdfU1AsIHN0YWNrX2FkanVzdCwgY3R4KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogcmV1c2VzIHRoZSBib3VuZGFyeSBwcm9ncmFtJiMzOTtzIGZyYW1lLCB3aG9zZSBmcmFtZSBwb2ludGVyXG4mIzQzOyAqIGlzIHBhc3NlZCBpbiBhMiAoc2luY2UgaXQmIzM5O3MgdGhlIHRoaXJkIGFyZ3VtZW50IGZyb20gYnBmX3Rocm93KCkpLlxuJiM0MzsgKiBTZXR0aW5nIFNQID0gRlAgLSBzdGFja19hZGp1c3QgbGluZXMgdGhlIGVwaWxvZ3VlJiMzOTtzIGxvYWRzIHVwIHdpdGhcbiYjNDM7ICogdGhlIHJlZ2lzdGVycyB0aGUgYm91bmRhcnkgc2F2ZWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBlbWl0X2V4Y2VwdGlvbl9jYl9wcm9sb2d1ZShzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcbiYjNDM7XHRcdFx0XHQgICAgICAgaW50IHN0YWNrX2FkanVzdClcbiYjNDM7e1xuJiM0MztcdGVtaXRfbXYoUlZfUkVHX0ZQLCBSVl9SRUdfQTIsIGN0eCk7XG4mIzQzO1x0ZW1pdF9hZGRpKFJWX1JFR19TUCwgUlZfUkVHX0ZQLCAtc3RhY2tfYWRqdXN0LCBjdHgpO1xuJiM0MztcdGN0eC1cdTAwM2V0Y2Nfb2Zmc2V0ID0gc3RhY2tfYWRqdXN0IC0gOCAtIEFSUkFZX1NJWkUocnZfZXhjZXB0aW9uX2NzYXZlX3JlZ3MpICogODtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogVXNlZCBieSBib3RoIHRoZSBib3VuZGFyeSBwcm9ncmFtIGFuZCB0aGUgZXhjZXB0aW9uIGNhbGxiYWNrIGFsaWtlLCBzaW5jZSB0aGVcbiYjNDM7ICogY2FsbGJhY2sgcnVucyBvbiB0aGUgYm91bmRhcnkmIzM5O3MgZnJhbWUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBlbWl0X2V4Y2VwdGlvbl9yZXN0b3JlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LCBpbnQgc3RhY2tfYWRqdXN0KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHN0b3JlX29mZnNldCA9IHN0YWNrX2FkanVzdCAtIDg7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocnZfZXhjZXB0aW9uX2NzYXZlX3JlZ3MpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0ZW1pdF9sZChydl9leGNlcHRpb25fY3NhdmVfcmVnc1tpXSwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfU1AsIGN0eCk7XG4mIzQzO1x0XHRzdG9yZV9vZmZzZXQgLT0gODtcbiYjNDM7XHR9XG4mIzQzO1x0LyogcmVzdG9yZSBUQ0MgZnJvbSBzdGFjayB0byBSVl9SRUdfVENDICovXG4mIzQzO1x0ZW1pdF9sZChSVl9SRUdfVENDLCBjdHgtXHUwMDNldGNjX29mZnNldCwgUlZfUkVHX1NQLCBjdHgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBfX2J1aWxkX2VwaWxvZ3VlKGJvb2wgaXNfdGFpbF9jYWxsLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eClcbiYjNDM7e1xuJiM0MztcdGludCBzdGFja19hZGp1c3QgPSBjdHgtXHUwMDNlc3RhY2tfc2l6ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKGlzX2V4Y2VwdGlvbl9wcm9nKGN0eC1cdTAwM2Vwcm9nKSlcbiYjNDM7XHRcdGVtaXRfZXhjZXB0aW9uX3Jlc3RvcmUoY3R4LCBzdGFja19hZGp1c3QpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGVtaXRfbm9ybWFsX3Jlc3RvcmUoY3R4LCBzdGFja19hZGp1c3QpO1xuIFxuIFx0ZW1pdF9hZGRpKFJWX1JFR19TUCwgUlZfUkVHX1NQLCBzdGFja19hZGp1c3QsIGN0eCk7XG4gXHQvKiBTZXQgcmV0dXJuIHZhbHVlLiAqL1xuQEAgLTIwMDQsMzYgJiM0MzsyMTY1LDIzIEBAIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGV4Y2VwdGlvbl9zdGFja19hZGp1c3Qodm9pZClcbiYjNDM7e1xuJiM0MztcdGludCBzdGFja19hZGp1c3QgPSAwO1xuJiM0MztcbiYjNDM7XHRzdGFja19hZGp1c3QgJiM0Mzs9IDg7IC8qIFJWX1JFR19UQ0MgKi9cbiYjNDM7XHRzdGFja19hZGp1c3QgJiM0Mzs9IEFSUkFZX1NJWkUocnZfZXhjZXB0aW9uX2NzYXZlX3JlZ3MpICogODtcbiYjNDM7XHRyZXR1cm4gcm91bmRfdXAoc3RhY2tfYWRqdXN0LCBTVEFDS19BTElHTik7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCBicGZfaml0X2J1aWxkX3Byb2xvZ3VlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LCBib29sIGlzX3N1YnByb2cpXG4ge1xuLVx0aW50IGksIHN0YWNrX2FkanVzdCA9IDAsIHN0b3JlX29mZnNldCwgYnBmX3N0YWNrX2FkanVzdDtcbiYjNDM7XHRpbnQgaSwgc3RhY2tfYWRqdXN0LCBicGZfc3RhY2tfYWRqdXN0O1xuIFxuIFx0YnBmX3N0YWNrX2FkanVzdCA9IHJvdW5kX3VwKGN0eC1cdTAwM2Vwcm9nLVx1MDAzZWF1eC1cdTAwM2VzdGFja19kZXB0aCwgU1RBQ0tfQUxJR04pO1xuIFx0aWYgKGJwZl9zdGFja19hZGp1c3QpXG4gXHRcdG1hcmtfZnAoY3R4KTtcbiBcbi1cdGlmIChzZWVuX3JlZyhSVl9SRUdfUkEsIGN0eCkpXG4tXHRcdHN0YWNrX2FkanVzdCAmIzQzOz0gODtcbi1cdHN0YWNrX2FkanVzdCAmIzQzOz0gODsgLyogUlZfUkVHX0ZQICovXG4tXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1MxLCBjdHgpKVxuLVx0XHRzdGFja19hZGp1c3QgJiM0Mzs9IDg7XG4tXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1MyLCBjdHgpKVxuLVx0XHRzdGFja19hZGp1c3QgJiM0Mzs9IDg7XG4tXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1MzLCBjdHgpKVxuLVx0XHRzdGFja19hZGp1c3QgJiM0Mzs9IDg7XG4tXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1M0LCBjdHgpKVxuLVx0XHRzdGFja19hZGp1c3QgJiM0Mzs9IDg7XG4tXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1M1LCBjdHgpKVxuLVx0XHRzdGFja19hZGp1c3QgJiM0Mzs9IDg7XG4tXHRpZiAoY3R4LVx1MDAzZWFyZW5hX3ZtX3N0YXJ0KVxuLVx0XHRzdGFja19hZGp1c3QgJiM0Mzs9IDg7XG4tXHRzdGFja19hZGp1c3QgJiM0Mzs9IDg7IC8qIFJWX1JFR19UQ0MgKi9cbi1cbi1cdHN0YWNrX2FkanVzdCA9IHJvdW5kX3VwKHN0YWNrX2FkanVzdCwgU1RBQ0tfQUxJR04pO1xuLVx0c3RhY2tfYWRqdXN0ICYjNDM7PSBicGZfc3RhY2tfYWRqdXN0O1xuLVxuLVx0c3RvcmVfb2Zmc2V0ID0gc3RhY2tfYWRqdXN0IC0gODtcbi1cbiBcdC8qIGVtaXQga2NmaSB0eXBlIHByZWFtYmxlIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgIGZpcnN0IGluc24gKi9cbiBcdGVtaXRfa2NmaShpc19zdWJwcm9nID8gY2ZpX2JwZl9zdWJwcm9nX2hhc2ggOiBjZmlfYnBmX2hhc2gsIGN0eCk7XG4gXG5AQCAtMjA0Niw0NyAmIzQzOzIxOTQsMTggQEAgdm9pZCBicGZfaml0X2J1aWxkX3Byb2xvZ3VlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LCBib29sIGlzX3N1YnByb2cpXG4gXHRpZiAoIWlzX3N1YnByb2cpXG4gXHRcdGVtaXQocnZfYWRkaShSVl9SRUdfVENDLCBSVl9SRUdfWkVSTywgTUFYX1RBSUxfQ0FMTF9DTlQpLCBjdHgpO1xuIFxuLVx0LyogdGFpbGNhbGwgc3RhcnRzIGhlcmUsIGVtaXQgaW5zbiBiZWZvcmUgaXQgbXVzdCBiZSBmaXhlZCAqL1xuJiM0MztcdGlmIChpc19leGNlcHRpb25fcHJvZyhjdHgtXHUwMDNlcHJvZykpIHtcbiYjNDM7XHRcdHN0YWNrX2FkanVzdCA9IGV4Y2VwdGlvbl9zdGFja19hZGp1c3QoKSAmIzQzOyBicGZfc3RhY2tfYWRqdXN0O1xuIFxuLVx0ZW1pdF9hZGRpKFJWX1JFR19TUCwgUlZfUkVHX1NQLCAtc3RhY2tfYWRqdXN0LCBjdHgpO1xuLVxuLVx0aWYgKHNlZW5fcmVnKFJWX1JFR19SQSwgY3R4KSkge1xuLVx0XHRlbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfUkEsIGN0eCk7XG4tXHRcdHN0b3JlX29mZnNldCAtPSA4O1xuLVx0fVxuLVx0ZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX0ZQLCBjdHgpO1xuLVx0c3RvcmVfb2Zmc2V0IC09IDg7XG4tXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1MxLCBjdHgpKSB7XG4tXHRcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19TMSwgY3R4KTtcbi1cdFx0c3RvcmVfb2Zmc2V0IC09IDg7XG4tXHR9XG4tXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1MyLCBjdHgpKSB7XG4tXHRcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19TMiwgY3R4KTtcbi1cdFx0c3RvcmVfb2Zmc2V0IC09IDg7XG4tXHR9XG4tXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1MzLCBjdHgpKSB7XG4tXHRcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19TMywgY3R4KTtcbi1cdFx0c3RvcmVfb2Zmc2V0IC09IDg7XG4tXHR9XG4tXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1M0LCBjdHgpKSB7XG4tXHRcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19TNCwgY3R4KTtcbi1cdFx0c3RvcmVfb2Zmc2V0IC09IDg7XG4tXHR9XG4tXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1M1LCBjdHgpKSB7XG4tXHRcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19TNSwgY3R4KTtcbi1cdFx0c3RvcmVfb2Zmc2V0IC09IDg7XG4tXHR9XG4tXHRpZiAoY3R4LVx1MDAzZWFyZW5hX3ZtX3N0YXJ0KSB7XG4tXHRcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19BUkVOQSwgY3R4KTtcbi1cdFx0c3RvcmVfb2Zmc2V0IC09IDg7XG4mIzQzO1x0XHRpZiAoY3R4LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZWV4Y2VwdGlvbl9jYilcbiYjNDM7XHRcdFx0ZW1pdF9leGNlcHRpb25fY2JfcHJvbG9ndWUoY3R4LCBzdGFja19hZGp1c3QpO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRlbWl0X2V4Y2VwdGlvbl9ib3VuZGFyeV9wcm9sb2d1ZShjdHgsIHN0YWNrX2FkanVzdCk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHN0YWNrX2FkanVzdCA9IG5vcm1hbF9zdGFja19hZGp1c3QoY3R4KSAmIzQzOyBicGZfc3RhY2tfYWRqdXN0O1xuJiM0MztcdFx0ZW1pdF9ub3JtYWxfcHJvbG9ndWUoY3R4LCBzdGFja19hZGp1c3QpO1xuIFx0fVxuIFxuLVx0Lyogc3RvcmUgVENDIGZyb20gUlZfUkVHX1RDQyB0byBzdGFjayAqL1xuLVx0ZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX1RDQywgY3R4KTtcbi1cdGN0eC1cdTAwM2V0Y2Nfb2Zmc2V0ID0gc3RvcmVfb2Zmc2V0O1xuLVxuLVx0ZW1pdF9hZGRpKFJWX1JFR19GUCwgUlZfUkVHX1NQLCBzdGFja19hZGp1c3QsIGN0eCk7XG4tXG4gXHRpZiAoYnBmX3N0YWNrX2FkanVzdClcbiBcdFx0ZW1pdF9hZGRpKFJWX1JFR19TNSwgUlZfUkVHX1NQLCBicGZfc3RhY2tfYWRqdXN0LCBjdHgpO1xuIFxuQEAgLTIxNjEsMyAmIzQzOzIyODAsMTIgQEAgYm9vbCBicGZfaml0X3N1cHBvcnRzX3N1YnByb2dfdGFpbGNhbGxzKHZvaWQpXG4ge1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuJiM0MztcbiYjNDM7Ym9vbCBicGZfaml0X3N1cHBvcnRzX2V4Y2VwdGlvbnModm9pZClcbiYjNDM7e1xuJiM0MztcdC8qIGJwZl90aHJvdygpIHVud2luZHMgYnkgd2Fsa2luZyB0aGUgZnJhbWUtcG9pbnRlciBjaGFpbiBmcm9tIGluc2lkZVxuJiM0MztcdCAqIHRoZSBrZXJuZWwgYmFjayBpbnRvIHRoZSBCUEYgZnJhbWVzIChzZWUgYXJjaF9icGZfc3RhY2tfd2FsaygpKSwgc29cbiYjNDM7XHQgKiBleGNlcHRpb25zIHJlcXVpcmUgdGhlIGZyYW1lLXBvaW50ZXIgdW53aW5kZXIgdG8gYmUgZW5hYmxlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfRlJBTUVfUE9JTlRFUik7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvREVOWUxJU1QucmlzY3Y2NCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9ERU5ZTElTVC5yaXNjdjY0XG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IGNhMWJlYWU3ZmU4ZjEwLi4wMDAwMDAwMDAwMDAwMFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL0RFTllMSVNULnJpc2N2NjRcbiYjNDM7JiM0MzsmIzQzOyAvZGV2L251bGxcbkBAIC0xLDIgJiM0MzswLDAgQEBcbi0jIHJpc2N2NjQgZGVueSBsaXN0IGZvciBCUEYgQ0kgYW5kIGxvY2FsIHZtdGVzdFxuLWV4Y2VwdGlvbnNcdFx0XHRcdFx0IyBKSVQgZG9lcyBub3Qgc3VwcG9ydCBleGNlcHRpb25zXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTU6MDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7RlJBTUVfUE9JTlRFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FyY2hfYnBmX3N0YWNrX3dhbGsmIzM0OywKICAgICYjMzQ7YnBmX2ppdF9idWlsZF9wcm9sb2d1ZSYjMzQ7LAogICAgJiMzNDticGZfaml0X3N1cHBvcnRzX2V4Y2VwdGlvbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBCUEYgZXhjZXB0aW9uIHN1cHBvcnQgdG8gdGhlIFJJU0MtViBhcmNoaXRlY3R1cmUuIEl0IG1vZGlmaWVzIHRoZSBCUEYgSklUIGNvbXBpbGVyIHRvIGVtaXQgZXhjZXB0aW9uIHByb2xvZ3VlcyBhbmQgZXBpbG9ndWVzLCBhbmQgaW1wbGVtZW50cyBgYXJjaF9icGZfc3RhY2tfd2Fsa2AgZm9yIHVud2luZGluZyB0aGUgc3RhY2sgZHVyaW5nIEJQRiBleGNlcHRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBrZXJuZWwgYW5kIEJQRiBKSVQgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4N2E0NzYyYWQ5MzNiNGM5MGM4YTlkNzE3ZTA5M2ZmMjg2ZWRhZTczCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMjMgMTU6MDY6MzAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3N0YWNrdHJhY2UuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3RhY2t0cmFjZS5oCmluZGV4IGIxNDk1YTdlMDZjZTY5Li5mZDFmZjA0YTA0MGU5NSAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9zdGFja3RyYWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9zdGFja3RyYWNlLmgKQEAgLTExLDggJiM0MzsxMSwxMSBAQCBzdHJ1Y3Qgc3RhY2tmcmFtZSB7CiAJdW5zaWduZWQgbG9uZyByYTsKIH07CiAKJiM0Mzt0eXBlZGVmIGJvb2wgKCp3YWxrX3N0YWNrZnJhbWVfZm4pKHZvaWQgKmFyZywgdW5zaWduZWQgbG9uZyBwYywKJiM0MzsJCQkJICAgdW5zaWduZWQgbG9uZyBzcCwgdW5zaWduZWQgbG9uZyBmcCk7CiYjNDM7CiBleHRlcm4gdm9pZCBub3RyYWNlIHdhbGtfc3RhY2tmcmFtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzLAotCQkJCSAgICBib29sICgqZm4pKHZvaWQgKiwgdW5zaWduZWQgbG9uZyksIHZvaWQgKmFyZyk7CiYjNDM7CQkJCSAgICB3YWxrX3N0YWNrZnJhbWVfZm4gZm4sIHZvaWQgKmFyZyk7CiBleHRlcm4gdm9pZCBkdW1wX2JhY2t0cmFjZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAogCQkJICAgY29uc3QgY2hhciAqbG9nbHZsKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rZXJuZWwvcGVyZl9jYWxsY2hhaW4uYyBiL2FyY2gvcmlzY3Yva2VybmVsL3BlcmZfY2FsbGNoYWluLmMKaW5kZXggYjQ2NWJjOWViODcwZWMuLjkzYTEyZDUzYWEyNmQ3IDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2tlcm5lbC9wZXJmX2NhbGxjaGFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva2VybmVsL3BlcmZfY2FsbGNoYWluLmMKQEAgLTIsNiAmIzQzOzIsNyBAQAogLyogQ29weXJpZ2h0IChDKSAyMDE5IEhhbmd6aG91IEMtU0tZIE1pY3Jvc3lzdGVtcyBjby4sbHRkLiAqLwogCiAjaW5jbHVkZSAmbHQ7bGludXgvcGVyZl9ldmVudC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zdGFja3RyYWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdWFjY2Vzcy5oJmd0OwogCiAjaW5jbHVkZSAmbHQ7YXNtL3N0YWNrdHJhY2UuaCZndDsKQEAgLTQ0LDUgJiM0Mzs0NSw1IEBAIHZvaWQgcGVyZl9jYWxsY2hhaW5fa2VybmVsKHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeV9jdHggKmVudHJ5LAogCQlyZXR1cm47CiAJfQogCi0Jd2Fsa19zdGFja2ZyYW1lKE5VTEwsIHJlZ3MsIGZpbGxfY2FsbGNoYWluLCBlbnRyeSk7CiYjNDM7CWFyY2hfc3RhY2tfd2FsayhmaWxsX2NhbGxjaGFpbiwgZW50cnksIGN1cnJlbnQsIHJlZ3MpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rZXJuZWwvc3RhY2t0cmFjZS5jIGIvYXJjaC9yaXNjdi9rZXJuZWwvc3RhY2t0cmFjZS5jCmluZGV4IGM3NTU1NDQ3MTQ5YmZlLi5jMGYyMzkzZTUxNjNjYiAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9rZXJuZWwvc3RhY2t0cmFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva2VybmVsL3N0YWNrdHJhY2UuYwpAQCAtNSw2ICYjNDM7NSw3IEBACiAgKi8KIAogI2luY2x1ZGUgJmx0O2xpbnV4L2V4cG9ydC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9maWx0ZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rYWxsc3ltcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvZGVidWcuaCZndDsKQEAgLTQ2LDcgJiM0Mzs0Nyw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGZwX2lzX3ZhbGlkKHVuc2lnbmVkIGxvbmcgZnAsIHVuc2lnbmVkIGxvbmcgc3ApCiB9CiAKIHZvaWQgbm90cmFjZSB3YWxrX3N0YWNrZnJhbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQkJCSAgICAgYm9vbCAoKmZuKSh2b2lkICosIHVuc2lnbmVkIGxvbmcpLCB2b2lkICphcmcpCiYjNDM7CQkJICAgICB3YWxrX3N0YWNrZnJhbWVfZm4gZm4sIHZvaWQgKmFyZykKIHsKIAl1bnNpZ25lZCBsb25nIGZwLCBzcCwgcGM7CiAJaW50IGdyYXBoX2lkeCA9IDA7CkBAIC03MSw3ICYjNDM7NzIsOSBAQCB2b2lkIG5vdHJhY2Ugd2Fsa19zdGFja2ZyYW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCiAJZm9yICg7OykgewogCQlzdHJ1Y3Qgc3RhY2tmcmFtZSAqZnJhbWU7CiAKLQkJaWYgKHVubGlrZWx5KCFfX2tlcm5lbF90ZXh0X2FkZHJlc3MocGMpIHx8IChsZXZlbCYjNDM7JiM0MzsgJmd0Oz0gMCAmYW1wOyZhbXA7ICFmbihhcmcsIHBjKSkpKQomIzQzOwkJLyogcGMgYmVsb25ncyB0byB0aGUgZnVuY3Rpb24gd2hvc2UgZnJhbWUgcG9pbnRlciBpcyBmcCAqLwomIzQzOwkJaWYgKHVubGlrZWx5KCFfX2tlcm5lbF90ZXh0X2FkZHJlc3MocGMpIHx8CiYjNDM7CQkJICAgICAobGV2ZWwmIzQzOyYjNDM7ICZndDs9IDAgJmFtcDsmYW1wOyAhZm4oYXJnLCBwYywgc3AsIGZwKSkpKQogCQkJYnJlYWs7CiAKIAkJaWYgKHVubGlrZWx5KCFmcF9pc192YWxpZChmcCwgc3ApKSkKQEAgLTkxLDcgJiM0Mzs5NCw3IEBAIHZvaWQgbm90cmFjZSB3YWxrX3N0YWNrZnJhbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKIAkJCQkJCSAgICZhbXA7ZnJhbWUtJmd0O3JhKTsKIAkJCWlmIChwYyAmZ3Q7PSAodW5zaWduZWQgbG9uZyloYW5kbGVfZXhjZXB0aW9uICZhbXA7JmFtcDsKIAkJCSAgICBwYyAmbHQ7ICh1bnNpZ25lZCBsb25nKSZhbXA7cmV0X2Zyb21fZXhjZXB0aW9uX2VuZCkgewotCQkJCWlmICh1bmxpa2VseSghZm4oYXJnLCBwYykpKQomIzQzOwkJCQlpZiAodW5saWtlbHkoIWZuKGFyZywgcGMsIHNwLCBmcCkpKQogCQkJCQlicmVhazsKIAogCQkJCXBjID0gKChzdHJ1Y3QgcHRfcmVncyAqKXNwKS0mZ3Q7ZXBjOwpAQCAtMTAyLDEwICYjNDM7MTA1LDM0IEBAIHZvaWQgbm90cmFjZSB3YWxrX3N0YWNrZnJhbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKIAl9CiB9CiAKJiM0MztzdHJ1Y3QgYnBmX3Vud2luZF9jb25zdW1lX2VudHJ5X2RhdGEgewomIzQzOwlib29sICgqY29uc3VtZV9lbnRyeSkodm9pZCAqY29va2llLCB1NjQgaXAsIHU2NCBzcCwgdTY0IGZwKTsKJiM0MzsJdm9pZCAqY29va2llOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgYnBmX3Vud2luZF9jb25zdW1lX2VudHJ5KHZvaWQgKmFyZywgdW5zaWduZWQgbG9uZyBwYywKJiM0MzsJCQkJICAgICB1bnNpZ25lZCBsb25nIHNwLCB1bnNpZ25lZCBsb25nIGZwKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl91bndpbmRfY29uc3VtZV9lbnRyeV9kYXRhICpkYXRhID0gYXJnOwomIzQzOwomIzQzOwlyZXR1cm4gZGF0YS0mZ3Q7Y29uc3VtZV9lbnRyeShkYXRhLSZndDtjb29raWUsIHBjLCBzcCwgZnApOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIG5vdHJhY2UgYXJjaF9icGZfc3RhY2tfd2Fsayhib29sICgqY29uc3VtZV9mbikodm9pZCAqY29va2llLCB1NjQgaXAsIHU2NCBzcCwgdTY0IGJwKSwKJiM0MzsJCQkJIHZvaWQgKmNvb2tpZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfdW53aW5kX2NvbnN1bWVfZW50cnlfZGF0YSBkYXRhID0gewomIzQzOwkJLmNvbnN1bWVfZW50cnkgPSBjb25zdW1lX2ZuLAomIzQzOwkJLmNvb2tpZSA9IGNvb2tpZSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJd2Fsa19zdGFja2ZyYW1lKGN1cnJlbnQsIE5VTEwsIGJwZl91bndpbmRfY29uc3VtZV9lbnRyeSwgJmFtcDtkYXRhKTsKJiM0Mzt9CiYjNDM7CiAjZWxzZSAvKiAhQ09ORklHX0ZSQU1FX1BPSU5URVIgKi8KIAogdm9pZCBub3RyYWNlIHdhbGtfc3RhY2tmcmFtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCi0Jc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGJvb2wgKCpmbikodm9pZCAqLCB1bnNpZ25lZCBsb25nKSwgdm9pZCAqYXJnKQomIzQzOwlzdHJ1Y3QgcHRfcmVncyAqcmVncywgd2Fsa19zdGFja2ZyYW1lX2ZuIGZuLCB2b2lkICphcmcpCiB7CiAJdW5zaWduZWQgbG9uZyBzcCwgcGM7CiAJdW5zaWduZWQgbG9uZyAqa3NwOwpAQCAtMTI3LDcgJiM0MzsxNTQsOCBAQCB2b2lkIG5vdHJhY2Ugd2Fsa19zdGFja2ZyYW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKIAogCWtzcCA9ICh1bnNpZ25lZCBsb25nICopc3A7CiAJd2hpbGUgKCFrc3RhY2tfZW5kKGtzcCkpIHsKLQkJaWYgKF9fa2VybmVsX3RleHRfYWRkcmVzcyhwYykgJmFtcDsmYW1wOyB1bmxpa2VseSghZm4oYXJnLCBwYykpKQomIzQzOwkJaWYgKF9fa2VybmVsX3RleHRfYWRkcmVzcyhwYykgJmFtcDsmYW1wOwomIzQzOwkJICAgIHVubGlrZWx5KCFmbihhcmcsIHBjLCAodW5zaWduZWQgbG9uZylrc3AsIDApKSkKIAkJCWJyZWFrOwogCQlwYyA9IFJFQURfT05DRV9OT0NIRUNLKCprc3AmIzQzOyYjNDM7KTsKIAl9CkBAIC0xMzUsNyAmIzQzOzE2Myw4IEBAIHZvaWQgbm90cmFjZSB3YWxrX3N0YWNrZnJhbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAogCiAjZW5kaWYgLyogQ09ORklHX0ZSQU1FX1BPSU5URVIgKi8KIAotc3RhdGljIGJvb2wgcHJpbnRfdHJhY2VfYWRkcmVzcyh2b2lkICphcmcsIHVuc2lnbmVkIGxvbmcgcGMpCiYjNDM7c3RhdGljIGJvb2wgcHJpbnRfdHJhY2VfYWRkcmVzcyh2b2lkICphcmcsIHVuc2lnbmVkIGxvbmcgcGMsCiYjNDM7CQkJCXVuc2lnbmVkIGxvbmcgc3AsIHVuc2lnbmVkIGxvbmcgZnApCiB7CiAJY29uc3QgY2hhciAqbG9nbHZsID0gYXJnOwogCkBAIC0xNTUsNyAmIzQzOzE4NCw4IEBAIHZvaWQgc2hvd19zdGFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHVuc2lnbmVkIGxvbmcgKnNwLCBjb25zdCBjaGFyICpsb2dsdmwpCiAJZHVtcF9iYWNrdHJhY2UoTlVMTCwgdGFzaywgbG9nbHZsKTsKIH0KIAotc3RhdGljIGJvb2wgc2F2ZV93Y2hhbih2b2lkICphcmcsIHVuc2lnbmVkIGxvbmcgcGMpCiYjNDM7c3RhdGljIGJvb2wgc2F2ZV93Y2hhbih2b2lkICphcmcsIHVuc2lnbmVkIGxvbmcgcGMsCiYjNDM7CQkgICAgICAgdW5zaWduZWQgbG9uZyBzcCwgdW5zaWduZWQgbG9uZyBmcCkKIHsKIAlpZiAoIWluX3NjaGVkX2Z1bmN0aW9ucyhwYykpIHsKIAkJdW5zaWduZWQgbG9uZyAqcCA9IGFyZzsKQEAgLTE3NiwxMCAmIzQzOzIwNiwyOCBAQCB1bnNpZ25lZCBsb25nIF9fZ2V0X3djaGFuKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIAlyZXR1cm4gcGM7CiB9CiAKJiM0MztzdHJ1Y3Qgd2Fsa19zdGFja2ZyYW1lX2NvbnN1bWVfZW50cnlfZGF0YSB7CiYjNDM7CXN0YWNrX3RyYWNlX2NvbnN1bWVfZm4gY29uc3VtZV9lbnRyeTsKJiM0MzsJdm9pZCAqY29va2llOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgd2Fsa19zdGFja2ZyYW1lX2NvbnN1bWVfZW50cnkodm9pZCAqYXJnLCB1bnNpZ25lZCBsb25nIHBjLAomIzQzOwkJCQkJICB1bnNpZ25lZCBsb25nIHNwLCB1bnNpZ25lZCBsb25nIGZwKQomIzQzO3sKJiM0MzsJc3RydWN0IHdhbGtfc3RhY2tmcmFtZV9jb25zdW1lX2VudHJ5X2RhdGEgKmRhdGEgPSBhcmc7CiYjNDM7CiYjNDM7CXJldHVybiBkYXRhLSZndDtjb25zdW1lX2VudHJ5KGRhdGEtJmd0O2Nvb2tpZSwgcGMpOwomIzQzO30KJiM0MzsKIG5vaW5saW5lIG5vaW5zdHIgdm9pZCBhcmNoX3N0YWNrX3dhbGsoc3RhY2tfdHJhY2VfY29uc3VtZV9mbiBjb25zdW1lX2VudHJ5LCB2b2lkICpjb29raWUsCiAJCSAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQl3YWxrX3N0YWNrZnJhbWUodGFzaywgcmVncywgY29uc3VtZV9lbnRyeSwgY29va2llKTsKJiM0MzsJc3RydWN0IHdhbGtfc3RhY2tmcmFtZV9jb25zdW1lX2VudHJ5X2RhdGEgZGF0YSA9IHsKJiM0MzsJCS5jb25zdW1lX2VudHJ5ID0gY29uc3VtZV9lbnRyeSwKJiM0MzsJCS5jb29raWUgPSBjb29raWUsCiYjNDM7CX07CiYjNDM7CiYjNDM7CXdhbGtfc3RhY2tmcmFtZSh0YXNrLCByZWdzLCB3YWxrX3N0YWNrZnJhbWVfY29uc3VtZV9lbnRyeSwgJmFtcDtkYXRhKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jCmluZGV4IGFkMDg5YTlhNGVhOWFjLi5lMGMyZjczYmM2NDZhMyAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jCkBAIC01Niw2ICYjNDM7NTYsMjkgQEAgc3RhdGljIGNvbnN0IGludCBwdF9yZWdtYXBbXSA9IHsKIAlbUlZfUkVHX1QwXSA9IG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCB0MCksCiB9OwogCiYjNDM7LyogRnVsbCBzZXQgb2YgUklTQy1WIGNhbGxlZS1zYXZlZCBHUCByZWdpc3RlcnMgKHJhLCBzMC1zMTEpIHNhdmVkIGJ5IGEgcHJvZ3JhbQomIzQzOyAqIGFjdGluZyBhcyBhbiBleGNlcHRpb24gYm91bmRhcnksIGluIHRoZSBvcmRlciB0aGV5IGFyZSBzdG9yZWQgb24gdGhlIHN0YWNrLgomIzQzOyAqIFJBIGFuZCBGUCBjb21lIGZpcnN0IHNvIHRoZSBzYXZlZCByYS9mcCBwYWlyIGZvcm1zIGEgdmFsaWQgc3RhY2tmcmFtZSByZWNvcmQKJiM0MzsgKiBhdCBbRlAtOF0vW0ZQLTE2XSBmb3IgdGhlIHVud2luZGVyLiBUaGUgZXhjZXB0aW9uIGNhbGxiYWNrIHJldXNlcyB0aGUKJiM0MzsgKiBib3VuZGFyeSBwcm9ncmFtJiMzOTtzIGZyYW1lIGFuZCByZXN0b3JlcyB0aGlzIHNhbWUgc2V0IGluIGl0cyBlcGlsb2d1ZSwgc28gYm90aAomIzQzOyAqIHBhdGhzIG11c3QgYWdyZWUgb24gdGhlIGNvbnRlbnRzIGFuZCBvcmRlcmluZyBvZiB0aGlzIGxpc3QuCiYjNDM7ICovCiYjNDM7c3RhdGljIGNvbnN0IGludCBydl9leGNlcHRpb25fY3NhdmVfcmVnc1tdID0gewomIzQzOwlSVl9SRUdfUkEsCiYjNDM7CVJWX1JFR19GUCwKJiM0MzsJUlZfUkVHX1MxLAomIzQzOwlSVl9SRUdfUzIsCiYjNDM7CVJWX1JFR19TMywKJiM0MzsJUlZfUkVHX1M0LAomIzQzOwlSVl9SRUdfUzUsCiYjNDM7CVJWX1JFR19TNiwKJiM0MzsJUlZfUkVHX1M3LAomIzQzOwlSVl9SRUdfUzgsCiYjNDM7CVJWX1JFR19TOSwKJiM0MzsJUlZfUkVHX1MxMCwKJiM0MzsJUlZfUkVHX1MxMSwKJiM0Mzt9OwomIzQzOwogZW51bSB7CiAJUlZfQ1RYX0ZfU0VFTl9DQUxMID0JCVJWX1JFR19SQSwKIAlSVl9DVFhfRl9TRUVOX1MxID0JCVJWX1JFR19TMSwKQEAgLTE5OCw5ICYjNDM7MjIxLDg0IEBAIHN0YXRpYyB2b2lkIGVtaXRfaW1tKHU4IHJkLCBzNjQgdmFsLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCkKIAkJZW1pdF9hZGRpKHJkLCByZCwgbG93ZXIsIGN0eCk7CiB9CiAKLXN0YXRpYyB2b2lkIF9fYnVpbGRfZXBpbG9ndWUoYm9vbCBpc190YWlsX2NhbGwsIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KQomIzQzOy8qIFN0YWNrIHNwYWNlIGZvciB0aGUgY2FsbGVlLXNhdmVkIHJlZ2lzdGVycyBhIG5vcm1hbCBwcm9ncmFtIHNwaWxscywKJiM0MzsgKiBleGNsdWRpbmcgdGhlIEJQRiBzdGFjayBpdHNlbGYuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBub3JtYWxfc3RhY2tfYWRqdXN0KHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KQomIzQzO3sKJiM0MzsJaW50IHN0YWNrX2FkanVzdCA9IDA7CiYjNDM7CiYjNDM7CWlmIChzZWVuX3JlZyhSVl9SRUdfUkEsIGN0eCkpCiYjNDM7CQlzdGFja19hZGp1c3QgJiM0Mzs9IDg7CiYjNDM7CXN0YWNrX2FkanVzdCAmIzQzOz0gODsgLyogUlZfUkVHX0ZQICovCiYjNDM7CWlmIChzZWVuX3JlZyhSVl9SRUdfUzEsIGN0eCkpCiYjNDM7CQlzdGFja19hZGp1c3QgJiM0Mzs9IDg7CiYjNDM7CWlmIChzZWVuX3JlZyhSVl9SRUdfUzIsIGN0eCkpCiYjNDM7CQlzdGFja19hZGp1c3QgJiM0Mzs9IDg7CiYjNDM7CWlmIChzZWVuX3JlZyhSVl9SRUdfUzMsIGN0eCkpCiYjNDM7CQlzdGFja19hZGp1c3QgJiM0Mzs9IDg7CiYjNDM7CWlmIChzZWVuX3JlZyhSVl9SRUdfUzQsIGN0eCkpCiYjNDM7CQlzdGFja19hZGp1c3QgJiM0Mzs9IDg7CiYjNDM7CWlmIChzZWVuX3JlZyhSVl9SRUdfUzUsIGN0eCkpCiYjNDM7CQlzdGFja19hZGp1c3QgJiM0Mzs9IDg7CiYjNDM7CWlmIChjdHgtJmd0O2FyZW5hX3ZtX3N0YXJ0KQomIzQzOwkJc3RhY2tfYWRqdXN0ICYjNDM7PSA4OwomIzQzOwlzdGFja19hZGp1c3QgJiM0Mzs9IDg7IC8qIFJWX1JFR19UQ0MgKi8KJiM0MzsKJiM0MzsJcmV0dXJuIHJvdW5kX3VwKHN0YWNrX2FkanVzdCwgU1RBQ0tfQUxJR04pOwomIzQzO30KJiM0MzsKJiM0MzsvKiBBbGxvY2F0ZSB0aGUgZnJhbWUgYW5kIHNhdmUgdGhlIGNhbGxlZS1zYXZlZCByZWdpc3RlcnMgdGhlIHByb2dyYW0KJiM0MzsgKiBhY3R1YWxseSBjbG9iYmVycywgdGhlbiBwb2ludCBGUCBhdCB0aGUgZnJhbWUgdG9wLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGVtaXRfbm9ybWFsX3Byb2xvZ3VlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LCBpbnQgc3RhY2tfYWRqdXN0KQomIzQzO3sKJiM0MzsJaW50IHN0b3JlX29mZnNldCA9IHN0YWNrX2FkanVzdCAtIDg7CiYjNDM7CS8qIHRhaWxjYWxsIHN0YXJ0cyBoZXJlLCBlbWl0IGluc24gYmVmb3JlIGl0IG11c3QgYmUgZml4ZWQgKi8KJiM0MzsKJiM0MzsJZW1pdF9hZGRpKFJWX1JFR19TUCwgUlZfUkVHX1NQLCAtc3RhY2tfYWRqdXN0LCBjdHgpOwomIzQzOwomIzQzOwlpZiAoc2Vlbl9yZWcoUlZfUkVHX1JBLCBjdHgpKSB7CiYjNDM7CQllbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfUkEsIGN0eCk7CiYjNDM7CQlzdG9yZV9vZmZzZXQgLT0gODsKJiM0MzsJfQomIzQzOwllbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfRlAsIGN0eCk7CiYjNDM7CXN0b3JlX29mZnNldCAtPSA4OwomIzQzOwlpZiAoc2Vlbl9yZWcoUlZfUkVHX1MxLCBjdHgpKSB7CiYjNDM7CQllbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfUzEsIGN0eCk7CiYjNDM7CQlzdG9yZV9vZmZzZXQgLT0gODsKJiM0MzsJfQomIzQzOwlpZiAoc2Vlbl9yZWcoUlZfUkVHX1MyLCBjdHgpKSB7CiYjNDM7CQllbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfUzIsIGN0eCk7CiYjNDM7CQlzdG9yZV9vZmZzZXQgLT0gODsKJiM0MzsJfQomIzQzOwlpZiAoc2Vlbl9yZWcoUlZfUkVHX1MzLCBjdHgpKSB7CiYjNDM7CQllbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfUzMsIGN0eCk7CiYjNDM7CQlzdG9yZV9vZmZzZXQgLT0gODsKJiM0MzsJfQomIzQzOwlpZiAoc2Vlbl9yZWcoUlZfUkVHX1M0LCBjdHgpKSB7CiYjNDM7CQllbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfUzQsIGN0eCk7CiYjNDM7CQlzdG9yZV9vZmZzZXQgLT0gODsKJiM0MzsJfQomIzQzOwlpZiAoc2Vlbl9yZWcoUlZfUkVHX1M1LCBjdHgpKSB7CiYjNDM7CQllbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfUzUsIGN0eCk7CiYjNDM7CQlzdG9yZV9vZmZzZXQgLT0gODsKJiM0MzsJfQomIzQzOwlpZiAoY3R4LSZndDthcmVuYV92bV9zdGFydCkgewomIzQzOwkJZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX0FSRU5BLCBjdHgpOwomIzQzOwkJc3RvcmVfb2Zmc2V0IC09IDg7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogc3RvcmUgVENDIGZyb20gUlZfUkVHX1RDQyB0byBzdGFjayAqLwomIzQzOwllbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfVENDLCBjdHgpOwomIzQzOwljdHgtJmd0O3RjY19vZmZzZXQgPSBzdG9yZV9vZmZzZXQ7CiYjNDM7CiYjNDM7CWVtaXRfYWRkaShSVl9SRUdfRlAsIFJWX1JFR19TUCwgc3RhY2tfYWRqdXN0LCBjdHgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBlbWl0X25vcm1hbF9yZXN0b3JlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LCBpbnQgc3RhY2tfYWRqdXN0KQogewotCWludCBzdGFja19hZGp1c3QgPSBjdHgtJmd0O3N0YWNrX3NpemUsIHN0b3JlX29mZnNldCA9IHN0YWNrX2FkanVzdCAtIDg7CiYjNDM7CWludCBzdG9yZV9vZmZzZXQgPSBzdGFja19hZGp1c3QgLSA4OwogCiAJaWYgKHNlZW5fcmVnKFJWX1JFR19SQSwgY3R4KSkgewogCQllbWl0X2xkKFJWX1JFR19SQSwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfU1AsIGN0eCk7CkBAIC0yMzUsNiAmIzQzOzMzMyw2OSBAQCBzdGF0aWMgdm9pZCBfX2J1aWxkX2VwaWxvZ3VlKGJvb2wgaXNfdGFpbF9jYWxsLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCkKIAogCS8qIHJlc3RvcmUgVENDIGZyb20gc3RhY2sgdG8gUlZfUkVHX1RDQyAqLwogCWVtaXRfbGQoUlZfUkVHX1RDQywgY3R4LSZndDt0Y2Nfb2Zmc2V0LCBSVl9SRUdfU1AsIGN0eCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIGlzX2V4Y2VwdGlvbl9wcm9nKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZykKJiM0Mzt7CiYjNDM7CXJldHVybiBwcm9nLSZndDthdXgtJmd0O2V4Y2VwdGlvbl9ib3VuZGFyeSB8fCBwcm9nLSZndDthdXgtJmd0O2V4Y2VwdGlvbl9jYjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZW1pdF9leGNlcHRpb25fYm91bmRhcnlfcHJvbG9ndWUoc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsCiYjNDM7CQkJCQkgICAgIGludCBzdGFja19hZGp1c3QpCiYjNDM7ewomIzQzOwlpbnQgc3RvcmVfb2Zmc2V0ID0gc3RhY2tfYWRqdXN0IC0gODsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWVtaXRfYWRkaShSVl9SRUdfU1AsIFJWX1JFR19TUCwgLXN0YWNrX2FkanVzdCwgY3R4KTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUocnZfZXhjZXB0aW9uX2NzYXZlX3JlZ3MpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgcnZfZXhjZXB0aW9uX2NzYXZlX3JlZ3NbaV0sIGN0eCk7CiYjNDM7CQlzdG9yZV9vZmZzZXQgLT0gODsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBzdG9yZSBUQ0MgZnJvbSBSVl9SRUdfVENDIHRvIHN0YWNrICovCiYjNDM7CWVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19UQ0MsIGN0eCk7CiYjNDM7CWN0eC0mZ3Q7dGNjX29mZnNldCA9IHN0b3JlX29mZnNldDsKJiM0MzsKJiM0MzsJZW1pdF9hZGRpKFJWX1JFR19GUCwgUlZfUkVHX1NQLCBzdGFja19hZGp1c3QsIGN0eCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIHJldXNlcyB0aGUgYm91bmRhcnkgcHJvZ3JhbSYjMzk7cyBmcmFtZSwgd2hvc2UgZnJhbWUgcG9pbnRlcgomIzQzOyAqIGlzIHBhc3NlZCBpbiBhMiAoc2luY2UgaXQmIzM5O3MgdGhlIHRoaXJkIGFyZ3VtZW50IGZyb20gYnBmX3Rocm93KCkpLgomIzQzOyAqIFNldHRpbmcgU1AgPSBGUCAtIHN0YWNrX2FkanVzdCBsaW5lcyB0aGUgZXBpbG9ndWUmIzM5O3MgbG9hZHMgdXAgd2l0aAomIzQzOyAqIHRoZSByZWdpc3RlcnMgdGhlIGJvdW5kYXJ5IHNhdmVkLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGVtaXRfZXhjZXB0aW9uX2NiX3Byb2xvZ3VlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LAomIzQzOwkJCQkgICAgICAgaW50IHN0YWNrX2FkanVzdCkKJiM0Mzt7CiYjNDM7CWVtaXRfbXYoUlZfUkVHX0ZQLCBSVl9SRUdfQTIsIGN0eCk7CiYjNDM7CWVtaXRfYWRkaShSVl9SRUdfU1AsIFJWX1JFR19GUCwgLXN0YWNrX2FkanVzdCwgY3R4KTsKJiM0MzsJY3R4LSZndDt0Y2Nfb2Zmc2V0ID0gc3RhY2tfYWRqdXN0IC0gOCAtIEFSUkFZX1NJWkUocnZfZXhjZXB0aW9uX2NzYXZlX3JlZ3MpICogODsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogVXNlZCBieSBib3RoIHRoZSBib3VuZGFyeSBwcm9ncmFtIGFuZCB0aGUgZXhjZXB0aW9uIGNhbGxiYWNrIGFsaWtlLCBzaW5jZSB0aGUKJiM0MzsgKiBjYWxsYmFjayBydW5zIG9uIHRoZSBib3VuZGFyeSYjMzk7cyBmcmFtZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBlbWl0X2V4Y2VwdGlvbl9yZXN0b3JlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LCBpbnQgc3RhY2tfYWRqdXN0KQomIzQzO3sKJiM0MzsJaW50IHN0b3JlX29mZnNldCA9IHN0YWNrX2FkanVzdCAtIDg7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShydl9leGNlcHRpb25fY3NhdmVfcmVncyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQllbWl0X2xkKHJ2X2V4Y2VwdGlvbl9jc2F2ZV9yZWdzW2ldLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19TUCwgY3R4KTsKJiM0MzsJCXN0b3JlX29mZnNldCAtPSA4OwomIzQzOwl9CiYjNDM7CS8qIHJlc3RvcmUgVENDIGZyb20gc3RhY2sgdG8gUlZfUkVHX1RDQyAqLwomIzQzOwllbWl0X2xkKFJWX1JFR19UQ0MsIGN0eC0mZ3Q7dGNjX29mZnNldCwgUlZfUkVHX1NQLCBjdHgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBfX2J1aWxkX2VwaWxvZ3VlKGJvb2wgaXNfdGFpbF9jYWxsLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCkKJiM0Mzt7CiYjNDM7CWludCBzdGFja19hZGp1c3QgPSBjdHgtJmd0O3N0YWNrX3NpemU7CiYjNDM7CiYjNDM7CWlmIChpc19leGNlcHRpb25fcHJvZyhjdHgtJmd0O3Byb2cpKQomIzQzOwkJZW1pdF9leGNlcHRpb25fcmVzdG9yZShjdHgsIHN0YWNrX2FkanVzdCk7CiYjNDM7CWVsc2UKJiM0MzsJCWVtaXRfbm9ybWFsX3Jlc3RvcmUoY3R4LCBzdGFja19hZGp1c3QpOwogCiAJZW1pdF9hZGRpKFJWX1JFR19TUCwgUlZfUkVHX1NQLCBzdGFja19hZGp1c3QsIGN0eCk7CiAJLyogU2V0IHJldHVybiB2YWx1ZS4gKi8KQEAgLTIwMDQsMzYgJiM0MzsyMTY1LDIzIEBAIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBleGNlcHRpb25fc3RhY2tfYWRqdXN0KHZvaWQpCiYjNDM7ewomIzQzOwlpbnQgc3RhY2tfYWRqdXN0ID0gMDsKJiM0MzsKJiM0MzsJc3RhY2tfYWRqdXN0ICYjNDM7PSA4OyAvKiBSVl9SRUdfVENDICovCiYjNDM7CXN0YWNrX2FkanVzdCAmIzQzOz0gQVJSQVlfU0laRShydl9leGNlcHRpb25fY3NhdmVfcmVncykgKiA4OwomIzQzOwlyZXR1cm4gcm91bmRfdXAoc3RhY2tfYWRqdXN0LCBTVEFDS19BTElHTik7CiYjNDM7fQomIzQzOwogdm9pZCBicGZfaml0X2J1aWxkX3Byb2xvZ3VlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LCBib29sIGlzX3N1YnByb2cpCiB7Ci0JaW50IGksIHN0YWNrX2FkanVzdCA9IDAsIHN0b3JlX29mZnNldCwgYnBmX3N0YWNrX2FkanVzdDsKJiM0MzsJaW50IGksIHN0YWNrX2FkanVzdCwgYnBmX3N0YWNrX2FkanVzdDsKIAogCWJwZl9zdGFja19hZGp1c3QgPSByb3VuZF91cChjdHgtJmd0O3Byb2ctJmd0O2F1eC0mZ3Q7c3RhY2tfZGVwdGgsIFNUQUNLX0FMSUdOKTsKIAlpZiAoYnBmX3N0YWNrX2FkanVzdCkKIAkJbWFya19mcChjdHgpOwogCi0JaWYgKHNlZW5fcmVnKFJWX1JFR19SQSwgY3R4KSkKLQkJc3RhY2tfYWRqdXN0ICYjNDM7PSA4OwotCXN0YWNrX2FkanVzdCAmIzQzOz0gODsgLyogUlZfUkVHX0ZQICovCi0JaWYgKHNlZW5fcmVnKFJWX1JFR19TMSwgY3R4KSkKLQkJc3RhY2tfYWRqdXN0ICYjNDM7PSA4OwotCWlmIChzZWVuX3JlZyhSVl9SRUdfUzIsIGN0eCkpCi0JCXN0YWNrX2FkanVzdCAmIzQzOz0gODsKLQlpZiAoc2Vlbl9yZWcoUlZfUkVHX1MzLCBjdHgpKQotCQlzdGFja19hZGp1c3QgJiM0Mzs9IDg7Ci0JaWYgKHNlZW5fcmVnKFJWX1JFR19TNCwgY3R4KSkKLQkJc3RhY2tfYWRqdXN0ICYjNDM7PSA4OwotCWlmIChzZWVuX3JlZyhSVl9SRUdfUzUsIGN0eCkpCi0JCXN0YWNrX2FkanVzdCAmIzQzOz0gODsKLQlpZiAoY3R4LSZndDthcmVuYV92bV9zdGFydCkKLQkJc3RhY2tfYWRqdXN0ICYjNDM7PSA4OwotCXN0YWNrX2FkanVzdCAmIzQzOz0gODsgLyogUlZfUkVHX1RDQyAqLwotCi0Jc3RhY2tfYWRqdXN0ID0gcm91bmRfdXAoc3RhY2tfYWRqdXN0LCBTVEFDS19BTElHTik7Ci0Jc3RhY2tfYWRqdXN0ICYjNDM7PSBicGZfc3RhY2tfYWRqdXN0OwotCi0Jc3RvcmVfb2Zmc2V0ID0gc3RhY2tfYWRqdXN0IC0gODsKLQogCS8qIGVtaXQga2NmaSB0eXBlIHByZWFtYmxlIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgIGZpcnN0IGluc24gKi8KIAllbWl0X2tjZmkoaXNfc3VicHJvZyA/IGNmaV9icGZfc3VicHJvZ19oYXNoIDogY2ZpX2JwZl9oYXNoLCBjdHgpOwogCkBAIC0yMDQ2LDQ3ICYjNDM7MjE5NCwxOCBAQCB2b2lkIGJwZl9qaXRfYnVpbGRfcHJvbG9ndWUoc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsIGJvb2wgaXNfc3VicHJvZykKIAlpZiAoIWlzX3N1YnByb2cpCiAJCWVtaXQocnZfYWRkaShSVl9SRUdfVENDLCBSVl9SRUdfWkVSTywgTUFYX1RBSUxfQ0FMTF9DTlQpLCBjdHgpOwogCi0JLyogdGFpbGNhbGwgc3RhcnRzIGhlcmUsIGVtaXQgaW5zbiBiZWZvcmUgaXQgbXVzdCBiZSBmaXhlZCAqLwomIzQzOwlpZiAoaXNfZXhjZXB0aW9uX3Byb2coY3R4LSZndDtwcm9nKSkgewomIzQzOwkJc3RhY2tfYWRqdXN0ID0gZXhjZXB0aW9uX3N0YWNrX2FkanVzdCgpICYjNDM7IGJwZl9zdGFja19hZGp1c3Q7CiAKLQllbWl0X2FkZGkoUlZfUkVHX1NQLCBSVl9SRUdfU1AsIC1zdGFja19hZGp1c3QsIGN0eCk7Ci0KLQlpZiAoc2Vlbl9yZWcoUlZfUkVHX1JBLCBjdHgpKSB7Ci0JCWVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19SQSwgY3R4KTsKLQkJc3RvcmVfb2Zmc2V0IC09IDg7Ci0JfQotCWVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19GUCwgY3R4KTsKLQlzdG9yZV9vZmZzZXQgLT0gODsKLQlpZiAoc2Vlbl9yZWcoUlZfUkVHX1MxLCBjdHgpKSB7Ci0JCWVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19TMSwgY3R4KTsKLQkJc3RvcmVfb2Zmc2V0IC09IDg7Ci0JfQotCWlmIChzZWVuX3JlZyhSVl9SRUdfUzIsIGN0eCkpIHsKLQkJZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX1MyLCBjdHgpOwotCQlzdG9yZV9vZmZzZXQgLT0gODsKLQl9Ci0JaWYgKHNlZW5fcmVnKFJWX1JFR19TMywgY3R4KSkgewotCQllbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfUzMsIGN0eCk7Ci0JCXN0b3JlX29mZnNldCAtPSA4OwotCX0KLQlpZiAoc2Vlbl9yZWcoUlZfUkVHX1M0LCBjdHgpKSB7Ci0JCWVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19TNCwgY3R4KTsKLQkJc3RvcmVfb2Zmc2V0IC09IDg7Ci0JfQotCWlmIChzZWVuX3JlZyhSVl9SRUdfUzUsIGN0eCkpIHsKLQkJZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX1M1LCBjdHgpOwotCQlzdG9yZV9vZmZzZXQgLT0gODsKLQl9Ci0JaWYgKGN0eC0mZ3Q7YXJlbmFfdm1fc3RhcnQpIHsKLQkJZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX0FSRU5BLCBjdHgpOwotCQlzdG9yZV9vZmZzZXQgLT0gODsKJiM0MzsJCWlmIChjdHgtJmd0O3Byb2ctJmd0O2F1eC0mZ3Q7ZXhjZXB0aW9uX2NiKQomIzQzOwkJCWVtaXRfZXhjZXB0aW9uX2NiX3Byb2xvZ3VlKGN0eCwgc3RhY2tfYWRqdXN0KTsKJiM0MzsJCWVsc2UKJiM0MzsJCQllbWl0X2V4Y2VwdGlvbl9ib3VuZGFyeV9wcm9sb2d1ZShjdHgsIHN0YWNrX2FkanVzdCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlzdGFja19hZGp1c3QgPSBub3JtYWxfc3RhY2tfYWRqdXN0KGN0eCkgJiM0MzsgYnBmX3N0YWNrX2FkanVzdDsKJiM0MzsJCWVtaXRfbm9ybWFsX3Byb2xvZ3VlKGN0eCwgc3RhY2tfYWRqdXN0KTsKIAl9CiAKLQkvKiBzdG9yZSBUQ0MgZnJvbSBSVl9SRUdfVENDIHRvIHN0YWNrICovCi0JZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX1RDQywgY3R4KTsKLQljdHgtJmd0O3RjY19vZmZzZXQgPSBzdG9yZV9vZmZzZXQ7Ci0KLQllbWl0X2FkZGkoUlZfUkVHX0ZQLCBSVl9SRUdfU1AsIHN0YWNrX2FkanVzdCwgY3R4KTsKLQogCWlmIChicGZfc3RhY2tfYWRqdXN0KQogCQllbWl0X2FkZGkoUlZfUkVHX1M1LCBSVl9SRUdfU1AsIGJwZl9zdGFja19hZGp1c3QsIGN0eCk7CiAKQEAgLTIxNjEsMyAmIzQzOzIyODAsMTIgQEAgYm9vbCBicGZfaml0X3N1cHBvcnRzX3N1YnByb2dfdGFpbGNhbGxzKHZvaWQpCiB7CiAJcmV0dXJuIHRydWU7CiB9CiYjNDM7CiYjNDM7Ym9vbCBicGZfaml0X3N1cHBvcnRzX2V4Y2VwdGlvbnModm9pZCkKJiM0Mzt7CiYjNDM7CS8qIGJwZl90aHJvdygpIHVud2luZHMgYnkgd2Fsa2luZyB0aGUgZnJhbWUtcG9pbnRlciBjaGFpbiBmcm9tIGluc2lkZQomIzQzOwkgKiB0aGUga2VybmVsIGJhY2sgaW50byB0aGUgQlBGIGZyYW1lcyAoc2VlIGFyY2hfYnBmX3N0YWNrX3dhbGsoKSksIHNvCiYjNDM7CSAqIGV4Y2VwdGlvbnMgcmVxdWlyZSB0aGUgZnJhbWUtcG9pbnRlciB1bndpbmRlciB0byBiZSBlbmFibGVkLgomIzQzOwkgKi8KJiM0MzsJcmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0ZSQU1FX1BPSU5URVIpOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9ERU5ZTElTVC5yaXNjdjY0IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL0RFTllMSVNULnJpc2N2NjQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhMWJlYWU3ZmU4ZjEwLi4wMDAwMDAwMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvREVOWUxJU1QucmlzY3Y2NAomIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsCkBAIC0xLDIgJiM0MzswLDAgQEAKLSMgcmlzY3Y2NCBkZW55IGxpc3QgZm9yIEJQRiBDSSBhbmQgbG9jYWwgdm10ZXN0Ci1leGNlcHRpb25zCQkJCQkjIEpJVCBkb2VzIG5vdCBzdXBwb3J0IGV4Y2VwdGlvbnMKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTU6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE5MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDMzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBSSVNDLVYgQlBGIEV4Y2VwdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGFkZHMgQlBGIGV4Y2VwdGlvbiBzdXBwb3J0IHRvIHRoZSBSSVNDLVYgYXJjaGl0ZWN0dXJlLiBJdCBzZWVtcyB0byBiZSBhIGZhaXJseSBmb2N1c2VkIGNoYW5nZSwgdG91Y2hpbmcgb24gc29tZSBrZXkgYXJlYXM6IGBzdGFja3RyYWNlLmhgLCBwZXJmb3JtYW5jZSBjYWxsY2hhaW5zLCBzdGFjayB1bndpbmRpbmcsIGFuZCB0aGUgQlBGIEpJVCBjb21waWxlciAoc3BlY2lmaWNhbGx5IHRoZSA2NC1iaXQgdmVyc2lvbikuIEl0JiMzOTtzIGltcGxlbWVudGluZyBhbiBleGNlcHRpb24gcHJvbG9ndWUgYW5kIGVwaWxvZ3VlLCBhbmQgdGhlbiBpdCYjMzk7cyBhbHNvIG1ha2luZyBzb21lIGNydWNpYWwgbW9kaWZpY2F0aW9ucyB0byBgd2Fsa19zdGFja2ZyYW1lYCB0byBlbmFibGUgcGFzc2luZyB0aGUgc3RhY2sgYW5kIGZyYW1lIHBvaW50ZXJzIHRvIHRoZSBjYWxsYmFjayBhbmQgdGhlbiBwcm92aWRpbmcgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBzdGFjayB3YWxrIGZ1bmN0aW9uYWxpdHkuCgpUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vIGRvdWJ0LiBXZSYjMzk7cmUgaW50cm9kdWNpbmcgQlBGIGV4Y2VwdGlvbiBzdXBwb3J0LCB3aGljaCB3aWxsIG1vZGlmeSBib3RoIHN0YWNrIHVud2luZGluZyBhbmQgdGhlIEpJVCBjb21waWxlci4gVGhhdCYjMzk7cyBhIHRleHRib29rIGRlZmluaXRpb24gb2YgYSBjaGFuZ2UgdGhhdCYjMzk7cyAqYmVnZ2luZyogdG8gYmUgZnV6emVkISBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHJvYnVzdCwgZXNwZWNpYWxseSBnaXZlbiB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgdXNlci1zdXBwbGllZCBCUEYgY29kZSBydW5uaW5nIGluIGtlcm5lbCBzcGFjZS4KCk5vdywgYmVmb3JlIEkgZGlnIHRvbyBkZWVwLCBsZXQmIzM5O3Mgc2VlIHdoYXQgY29uZmlncyBhcmUgcmVxdWlyZWQuIEkga25vdyB0aGF0IHRoZSBCUEYgSklUIG9uIFJJU0MtViBpcyBlbmFibGVkIGJ5IGBDT05GSUdfQlBGX0pJVGAuIFRoZSBwYXRjaCBpdHNlbGYgbWVudGlvbnMgdGhhdCBgQ09ORklHX0ZSQU1FX1BPSU5URVJgIGlzIG5lY2Vzc2FyeSBmb3IgdGhlIGV4Y2VwdGlvbiBzdXBwb3J0LCB3aGljaCBhbGlnbnMgd2l0aCBob3cgc3RhY2sgdW53aW5kaW5nIHVzdWFsbHkgd29ya3MuIFRvIGJlIHByZWNpc2UsIEkgc2hvdWxkIGZpbmQgdGhvc2UgY29uZmlnIHN5bWJvbHMuIEnigJlsbCBxdWlja2x5IGNoZWNrIGBhcmNoL3Jpc2N2L0tjb25maWdgIG9yIGBhcmNoL3Jpc2N2L25ldC9LY29uZmlnYCB0byBjb25maXJtIHdoZXJlIGBCUEZfSklUYCBpcyBkZWZpbmVkLiBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIGxvY2F0ZSB0aGVzZSBjb25maWcgb3B0aW9ucyBhbmQgdmVyaWZ5IHRoZSByZXF1aXJlZCBzZXR0aW5ncy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2V0IHVwIGNvcnJlY3RseSBiZWZvcmUgSSBzdGFydCBkZWVwZXIgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTU6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX0pJVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE1OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5NDkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqS2NvbmZpZyBEaXZlIGZvciBCUEYgU3VwcG9ydCBpbiBSSVNDLVYqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgQlBGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyKSBzdXBwb3J0IGxpdmVzIGluIHRoZSBSSVNDLVYga2VybmVsIGNvbmZpZ3VyYXRpb24uIEdpdmVuIG15IGV4cGVyaWVuY2UsIHRoZSBmaXJzdCBwbGFjZSBJJiMzOTtkIGxvb2sgaXMgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBLY29uZmlnIGZpbGUuIFRoYXQmIzM5O3MgYWxtb3N0IGFsd2F5cyB0aGUgc3RhbmRhcmQuIFNvLCBsZXQmIzM5O3Mgc3RhcnQgd2l0aCBgYXJjaC9yaXNjdi9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBvcHRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCBwZXJoYXBzIHNvbWUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbnNpZGVyYXRpb25zIGZvciBlbmFibGluZyBCUEYgZnVuY3Rpb25hbGl0eS4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9LY29uZmlnPTEzPWNvbmZpZyBSSVNDVlxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZy0xNjctXHRzZWxlY3QgSEFWRV9GVU5DVElPTl9UUkFDRVIgaWYgSEFWRV9EWU5BTUlDX0ZUUkFDRVxuYXJjaC9yaXNjdi9LY29uZmlnOjE2ODpcdHNlbGVjdCBIQVZFX0VCUEZfSklUIGlmIE1NVVxuYXJjaC9yaXNjdi9LY29uZmlnLTE2OS1cdHNlbGVjdCBIQVZFX0dFTkVSSUNfVElGX0JJVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjQ0CgkJCQkJCQlvdXRwdXQ6IDE2NAoJCQkJCQkJdGhvdWdodHM6IDYzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBCUEYgSklUIEV4Y2VwdGlvbiBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBCUEYgSklUIGNvbmZpZ3VyYXRpb24uIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGBDT05GSUdfQlBGX0pJVGAsIHdoaWNoIGlzIHByZXR0eSBnZW5lcmljLCBidXQgdGhpcyBzcGVjaWZpYyBmZWF0dXJlIHJlcXVpcmVzIGBDT05GSUdfRlJBTUVfUE9JTlRFUmAuIFRoZSBwYXRjaCBpcyBleHBsaWNpdCBhYm91dCB0aGF0LiBJdCYjMzk7cyB1c2luZyB0aGUgZnJhbWUgcG9pbnRlciBmb3IgdW53aW5kaW5nIHdpdGggYGJwZl90aHJvdygpYCwgYW5kIHRoYXQgbWVhbnMgYENPTkZJR19GUkFNRV9QT0lOVEVSYCAqbXVzdCogYmUgZW5hYmxlZC4gU28sIHRoZSBlc3NlbnRpYWwgY29uZmlncyBmb3IgdGhpcyBmZWF0dXJlIGFyZSBjbGVhcmx5IGBDT05GSUdfRlJBTUVfUE9JTlRFUmAgYW5kLCBvZiBjb3Vyc2UsIGBDT05GSUdfQlBGX0pJVGAuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBjcml0aWNhbCBzeW1ib2xzLiBUaGUgcGF0Y2ggdG91Y2hlcyBhIGZldyBmdW5jdGlvbnMsIGluY2x1ZGluZyBgd2Fsa19zdGFja2ZyYW1lYCwgYGFyY2hfYnBmX3N0YWNrX3dhbGtgLCBgYnBmX2ppdF9idWlsZF9wcm9sb2d1ZWAsIGBicGZfaml0X2VtaXRfaW5zbmAgKHRob3VnaCBpbmRpcmVjdGx5KSwgYW5kIGBicGZfaml0X3N1cHBvcnRzX2V4Y2VwdGlvbnNgLiBJIHRoaW5rIHRoZSBtYWluIHBvaW50cyBvZiBpbnRlcmVzdCBhcmUgYGFyY2hfYnBmX3N0YWNrX3dhbGtgLCB3aGljaCBpcyBhIGtleSBwYXJ0IG9mIHRoZSBzdGFjayB3YWxraW5nIHByb2Nlc3MsIGBicGZfaml0X2J1aWxkX3Byb2xvZ3VlYCBiZWNhdXNlIGl0JiMzOTtzIGdlbmVyYXRpbmcgdGhlIHByb2xvZ3VlLCBhbmQgYGJwZl9qaXRfc3VwcG9ydHNfZXhjZXB0aW9uc2AgYmVjYXVzZSBpdCBleHBsaWNpdGx5IGNoZWNrcyBmb3IgYEZSQU1FX1BPSU5URVJgLiBBbHRob3VnaCBgd2Fsa19zdGFja2ZyYW1lYCBpcyBtb2RpZmllZCwgd2hpY2ggc2VlbXMgbGlrZSBhIGhvdHNwb3QgZm9yIHN0YWNrIHRyYWNlcywgYGFyY2hfYnBmX3N0YWNrX3dhbGtgIHdpbGwgbGlrZWx5IHByb3ZpZGUgYSBtb3JlIGZvY3VzZWQgdmlldy4KCkkmIzM5O20gYWxzbyBsb29raW5nIHNwZWNpZmljYWxseSBhdCBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AgdG8gc2VlIHRoZSBkZXRhaWxzIG9mIHRoZSBjaGFuZ2VzLiBUaGUgcmVsZXZhbnQgZnVuY3Rpb25zIHRoZXJlIGFyZTogYGVtaXRfZXhjZXB0aW9uX2JvdW5kYXJ5X3Byb2xvZ3VlYCwgYGVtaXRfZXhjZXB0aW9uX2NiX3Byb2xvZ3VlYCwgYGVtaXRfZXhjZXB0aW9uX3Jlc3RvcmVgLCBgYnBmX2ppdF9idWlsZF9wcm9sb2d1ZWAsIGBfX2J1aWxkX2VwaWxvZ3VlYCwgYW5kIGFnYWluLCBgYnBmX2ppdF9zdXBwb3J0c19leGNlcHRpb25zYC4gSSBzZWUgdGhhdCBgZW1pdF9leGNlcHRpb25fYm91bmRhcnlfcHJvbG9ndWVgIGlzIHN0YXRpYywgc28gaXQmIzM5O3Mgbm90IGV4cG9zZWQsIGJ1dCBgYnBmX2ppdF9idWlsZF9wcm9sb2d1ZWAgaXMgZXhwb3J0ZWQgYW5kIGdsb2JhbCwgYW5kIGltcG9ydGFudGx5LCBgYXJjaF9icGZfc3RhY2tfd2Fsa2AgaXMgYWxzbyBnbG9iYWwuCgpMZXQgbWUgY29uZmlybSB0aGF0IGBhcmNoX2JwZl9zdGFja193YWxrYCBpcywgaW4gZmFjdCwgZ2xvYmFsLiBZZXAsIGl0IGlzLiBUaGUgcHJvdG90eXBlIGRlY2xhcmVzIGl0IGB2b2lkIG5vdHJhY2UgYXJjaF9icGZfc3RhY2tfd2FsayguLi4pYCwgc28gaXQmIzM5O3MgZGVmaW5pdGVseSBhY2Nlc3NpYmxlLgoKU28sIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGFyZSBub3cgZmlybWx5IHNldCBhczoKCiogICBgYXJjaF9icGZfc3RhY2tfd2Fsa2AKKiAgIGBicGZfaml0X2J1aWxkX3Byb2xvZ3VlYAoqICAgYGJwZl9qaXRfc3VwcG9ydHNfZXhjZXB0aW9uc2AKCkZpbmFsbHksIGxldCYjMzk7cyBxdWlja2x5IHJldmlldyB0aGUgZXNzZW50aWFsIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBXZSYjMzk7dmUgZ290IGBDT05GSUdfQlBGX1NZU0NBTExgIGZvciBCUEYgaW4gZ2VuZXJhbCwgYENPTkZJR19CUEZfSklUYCBmb3IgdGhlIEpJVCwgYW5kIGBDT05GSUdfRlJBTUVfUE9JTlRFUmAgZm9yIGV4Y2VwdGlvbnMsIGFzIHByZXZpb3VzbHkgZGlzY3Vzc2VkLgoKQWxyaWdodCwgSSB0aGluayBJIGhhdmUgYSBjbGVhciBwaWN0dXJlLiBMZXQmIzM5O3MgcmVwb3J0IHRoZSByZXN1bHRzIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7LAogICAgJiMzNDtGUkFNRV9QT0lOVEVSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXJjaF9icGZfc3RhY2tfd2FsayYjMzQ7LAogICAgJiMzNDticGZfaml0X2J1aWxkX3Byb2xvZ3VlJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfc3VwcG9ydHNfZXhjZXB0aW9ucyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIEJQRiBleGNlcHRpb24gc3VwcG9ydCB0byB0aGUgUklTQy1WIGFyY2hpdGVjdHVyZS4gSXQgbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgdG8gZW1pdCBleGNlcHRpb24gcHJvbG9ndWVzIGFuZCBlcGlsb2d1ZXMsIGFuZCBpbXBsZW1lbnRzIGBhcmNoX2JwZl9zdGFja193YWxrYCBmb3IgdW53aW5kaW5nIHRoZSBzdGFjayBkdXJpbmcgQlBGIGV4Y2VwdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGtlcm5lbCBhbmQgQlBGIEpJVCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7RlJBTUVfUE9JTlRFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FyY2hfYnBmX3N0YWNrX3dhbGsmIzM0OywKICAgICYjMzQ7YnBmX2ppdF9idWlsZF9wcm9sb2d1ZSYjMzQ7LAogICAgJiMzNDticGZfaml0X3N1cHBvcnRzX2V4Y2VwdGlvbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBCUEYgZXhjZXB0aW9uIHN1cHBvcnQgdG8gdGhlIFJJU0MtViBhcmNoaXRlY3R1cmUuIEl0IG1vZGlmaWVzIHRoZSBCUEYgSklUIGNvbXBpbGVyIHRvIGVtaXQgZXhjZXB0aW9uIHByb2xvZ3VlcyBhbmQgZXBpbG9ndWVzLCBhbmQgaW1wbGVtZW50cyBgYXJjaF9icGZfc3RhY2tfd2Fsa2AgZm9yIHVud2luZGluZyB0aGUgc3RhY2sgZHVyaW5nIEJQRiBleGNlcHRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBrZXJuZWwgYW5kIEJQRiBKSVQgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjNUMTU6MDY6MzEuNTYzNzY3Njc4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg5NDE1NDA2OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkZSQU1FX1BPSU5URVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhcmNoX2JwZl9zdGFja193YWxrXCIsXG4gICAgXCJicGZfaml0X2J1aWxkX3Byb2xvZ3VlXCIsXG4gICAgXCJicGZfaml0X3N1cHBvcnRzX2V4Y2VwdGlvbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIEJQRiBleGNlcHRpb24gc3VwcG9ydCB0byB0aGUgUklTQy1WIGFyY2hpdGVjdHVyZS4gSXQgbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgdG8gZW1pdCBleGNlcHRpb24gcHJvbG9ndWVzIGFuZCBlcGlsb2d1ZXMsIGFuZCBpbXBsZW1lbnRzIGBhcmNoX2JwZl9zdGFja193YWxrYCBmb3IgdW53aW5kaW5nIHRoZSBzdGFjayBkdXJpbmcgQlBGIGV4Y2VwdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGtlcm5lbCBhbmQgQlBGIEpJVCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE1OjA2OjMxLjU2Mzc3MjQ2OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQzMTUzNzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODdhNDc2MmFkOTMzYjRjOTBjOGE5ZDcxN2UwOTNmZjI4NmVkYWU3M1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAyMyAxNTowNjozMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3N0YWNrdHJhY2UuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3RhY2t0cmFjZS5oXFxuaW5kZXggYjE0OTVhN2UwNmNlNjkuLmZkMWZmMDRhMDQwZTk1IDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3RhY2t0cmFjZS5oXFxuKysrIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9zdGFja3RyYWNlLmhcXG5AQCAtMTEsOCArMTEsMTEgQEAgc3RydWN0IHN0YWNrZnJhbWUge1xcbiBcXHR1bnNpZ25lZCBsb25nIHJhO1xcbiB9O1xcbiBcXG4rdHlwZWRlZiBib29sICgqd2Fsa19zdGFja2ZyYW1lX2ZuKSh2b2lkICphcmcsIHVuc2lnbmVkIGxvbmcgcGMsXFxuK1xcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgc3AsIHVuc2lnbmVkIGxvbmcgZnApO1xcbitcXG4gZXh0ZXJuIHZvaWQgbm90cmFjZSB3YWxrX3N0YWNrZnJhbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyxcXG4tXFx0XFx0XFx0XFx0ICAgIGJvb2wgKCpmbikodm9pZCAqLCB1bnNpZ25lZCBsb25nKSwgdm9pZCAqYXJnKTtcXG4rXFx0XFx0XFx0XFx0ICAgIHdhbGtfc3RhY2tmcmFtZV9mbiBmbiwgdm9pZCAqYXJnKTtcXG4gZXh0ZXJuIHZvaWQgZHVtcF9iYWNrdHJhY2Uoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcXG4gXFx0XFx0XFx0ICAgY29uc3QgY2hhciAqbG9nbHZsKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva2VybmVsL3BlcmZfY2FsbGNoYWluLmMgYi9hcmNoL3Jpc2N2L2tlcm5lbC9wZXJmX2NhbGxjaGFpbi5jXFxuaW5kZXggYjQ2NWJjOWViODcwZWMuLjkzYTEyZDUzYWEyNmQ3IDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3Yva2VybmVsL3BlcmZfY2FsbGNoYWluLmNcXG4rKysgYi9hcmNoL3Jpc2N2L2tlcm5lbC9wZXJmX2NhbGxjaGFpbi5jXFxuQEAgLTIsNiArMiw3IEBAXFxuIC8qIENvcHlyaWdodCAoQykgMjAxOSBIYW5nemhvdSBDLVNLWSBNaWNyb3N5c3RlbXMgY28uLGx0ZC4gKi9cXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wZXJmX2V2ZW50LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdGFja3RyYWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC91YWNjZXNzLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3N0YWNrdHJhY2UuaFxcdTAwM2VcXG5AQCAtNDQsNSArNDUsNSBAQCB2b2lkIHBlcmZfY2FsbGNoYWluX2tlcm5lbChzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnlfY3R4ICplbnRyeSxcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcbi1cXHR3YWxrX3N0YWNrZnJhbWUoTlVMTCwgcmVncywgZmlsbF9jYWxsY2hhaW4sIGVudHJ5KTtcXG4rXFx0YXJjaF9zdGFja193YWxrKGZpbGxfY2FsbGNoYWluLCBlbnRyeSwgY3VycmVudCwgcmVncyk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rZXJuZWwvc3RhY2t0cmFjZS5jIGIvYXJjaC9yaXNjdi9rZXJuZWwvc3RhY2t0cmFjZS5jXFxuaW5kZXggYzc1NTU0NDcxNDliZmUuLmMwZjIzOTNlNTE2M2NiIDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3Yva2VybmVsL3N0YWNrdHJhY2UuY1xcbisrKyBiL2FyY2gvcmlzY3Yva2VybmVsL3N0YWNrdHJhY2UuY1xcbkBAIC01LDYgKzUsNyBAQFxcbiAgKi9cXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9leHBvcnQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZpbHRlci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva2FsbHN5bXMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9kZWJ1Zy5oXFx1MDAzZVxcbkBAIC00Niw3ICs0Nyw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGZwX2lzX3ZhbGlkKHVuc2lnbmVkIGxvbmcgZnAsIHVuc2lnbmVkIGxvbmcgc3ApXFxuIH1cXG4gXFxuIHZvaWQgbm90cmFjZSB3YWxrX3N0YWNrZnJhbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyxcXG4tXFx0XFx0XFx0ICAgICBib29sICgqZm4pKHZvaWQgKiwgdW5zaWduZWQgbG9uZyksIHZvaWQgKmFyZylcXG4rXFx0XFx0XFx0ICAgICB3YWxrX3N0YWNrZnJhbWVfZm4gZm4sIHZvaWQgKmFyZylcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGZwLCBzcCwgcGM7XFxuIFxcdGludCBncmFwaF9pZHggPSAwO1xcbkBAIC03MSw3ICs3Miw5IEBAIHZvaWQgbm90cmFjZSB3YWxrX3N0YWNrZnJhbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyxcXG4gXFx0Zm9yICg7Oykge1xcbiBcXHRcXHRzdHJ1Y3Qgc3RhY2tmcmFtZSAqZnJhbWU7XFxuIFxcbi1cXHRcXHRpZiAodW5saWtlbHkoIV9fa2VybmVsX3RleHRfYWRkcmVzcyhwYykgfHwgKGxldmVsKysgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiAhZm4oYXJnLCBwYykpKSlcXG4rXFx0XFx0LyogcGMgYmVsb25ncyB0byB0aGUgZnVuY3Rpb24gd2hvc2UgZnJhbWUgcG9pbnRlciBpcyBmcCAqL1xcbitcXHRcXHRpZiAodW5saWtlbHkoIV9fa2VybmVsX3RleHRfYWRkcmVzcyhwYykgfHxcXG4rXFx0XFx0XFx0ICAgICAobGV2ZWwrKyBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2ICFmbihhcmcsIHBjLCBzcCwgZnApKSkpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0XFx0aWYgKHVubGlrZWx5KCFmcF9pc192YWxpZChmcCwgc3ApKSlcXG5AQCAtOTEsNyArOTQsNyBAQCB2b2lkIG5vdHJhY2Ugd2Fsa19zdGFja2ZyYW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZmcmFtZS1cXHUwMDNlcmEpO1xcbiBcXHRcXHRcXHRpZiAocGMgXFx1MDAzZT0gKHVuc2lnbmVkIGxvbmcpaGFuZGxlX2V4Y2VwdGlvbiBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHQgICAgcGMgXFx1MDAzYyAodW5zaWduZWQgbG9uZylcXHUwMDI2cmV0X2Zyb21fZXhjZXB0aW9uX2VuZCkge1xcbi1cXHRcXHRcXHRcXHRpZiAodW5saWtlbHkoIWZuKGFyZywgcGMpKSlcXG4rXFx0XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFmbihhcmcsIHBjLCBzcCwgZnApKSlcXG4gXFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcbiBcXHRcXHRcXHRcXHRwYyA9ICgoc3RydWN0IHB0X3JlZ3MgKilzcCktXFx1MDAzZWVwYztcXG5AQCAtMTAyLDEwICsxMDUsMzQgQEAgdm9pZCBub3RyYWNlIHdhbGtfc3RhY2tmcmFtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzLFxcbiBcXHR9XFxuIH1cXG4gXFxuK3N0cnVjdCBicGZfdW53aW5kX2NvbnN1bWVfZW50cnlfZGF0YSB7XFxuK1xcdGJvb2wgKCpjb25zdW1lX2VudHJ5KSh2b2lkICpjb29raWUsIHU2NCBpcCwgdTY0IHNwLCB1NjQgZnApO1xcbitcXHR2b2lkICpjb29raWU7XFxuK307XFxuK1xcbitzdGF0aWMgYm9vbCBicGZfdW53aW5kX2NvbnN1bWVfZW50cnkodm9pZCAqYXJnLCB1bnNpZ25lZCBsb25nIHBjLFxcbitcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgc3AsIHVuc2lnbmVkIGxvbmcgZnApXFxuK3tcXG4rXFx0c3RydWN0IGJwZl91bndpbmRfY29uc3VtZV9lbnRyeV9kYXRhICpkYXRhID0gYXJnO1xcbitcXG4rXFx0cmV0dXJuIGRhdGEtXFx1MDAzZWNvbnN1bWVfZW50cnkoZGF0YS1cXHUwMDNlY29va2llLCBwYywgc3AsIGZwKTtcXG4rfVxcbitcXG4rdm9pZCBub3RyYWNlIGFyY2hfYnBmX3N0YWNrX3dhbGsoYm9vbCAoKmNvbnN1bWVfZm4pKHZvaWQgKmNvb2tpZSwgdTY0IGlwLCB1NjQgc3AsIHU2NCBicCksXFxuK1xcdFxcdFxcdFxcdCB2b2lkICpjb29raWUpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl91bndpbmRfY29uc3VtZV9lbnRyeV9kYXRhIGRhdGEgPSB7XFxuK1xcdFxcdC5jb25zdW1lX2VudHJ5ID0gY29uc3VtZV9mbixcXG4rXFx0XFx0LmNvb2tpZSA9IGNvb2tpZSxcXG4rXFx0fTtcXG4rXFxuK1xcdHdhbGtfc3RhY2tmcmFtZShjdXJyZW50LCBOVUxMLCBicGZfdW53aW5kX2NvbnN1bWVfZW50cnksIFxcdTAwMjZkYXRhKTtcXG4rfVxcbitcXG4gI2Vsc2UgLyogIUNPTkZJR19GUkFNRV9QT0lOVEVSICovXFxuIFxcbiB2b2lkIG5vdHJhY2Ugd2Fsa19zdGFja2ZyYW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcXG4tXFx0c3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGJvb2wgKCpmbikodm9pZCAqLCB1bnNpZ25lZCBsb25nKSwgdm9pZCAqYXJnKVxcbitcXHRzdHJ1Y3QgcHRfcmVncyAqcmVncywgd2Fsa19zdGFja2ZyYW1lX2ZuIGZuLCB2b2lkICphcmcpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBzcCwgcGM7XFxuIFxcdHVuc2lnbmVkIGxvbmcgKmtzcDtcXG5AQCAtMTI3LDcgKzE1NCw4IEBAIHZvaWQgbm90cmFjZSB3YWxrX3N0YWNrZnJhbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLFxcbiBcXG4gXFx0a3NwID0gKHVuc2lnbmVkIGxvbmcgKilzcDtcXG4gXFx0d2hpbGUgKCFrc3RhY2tfZW5kKGtzcCkpIHtcXG4tXFx0XFx0aWYgKF9fa2VybmVsX3RleHRfYWRkcmVzcyhwYykgXFx1MDAyNlxcdTAwMjYgdW5saWtlbHkoIWZuKGFyZywgcGMpKSlcXG4rXFx0XFx0aWYgKF9fa2VybmVsX3RleHRfYWRkcmVzcyhwYykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIHVubGlrZWx5KCFmbihhcmcsIHBjLCAodW5zaWduZWQgbG9uZylrc3AsIDApKSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdHBjID0gUkVBRF9PTkNFX05PQ0hFQ0soKmtzcCsrKTtcXG4gXFx0fVxcbkBAIC0xMzUsNyArMTYzLDggQEAgdm9pZCBub3RyYWNlIHdhbGtfc3RhY2tmcmFtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssXFxuIFxcbiAjZW5kaWYgLyogQ09ORklHX0ZSQU1FX1BPSU5URVIgKi9cXG4gXFxuLXN0YXRpYyBib29sIHByaW50X3RyYWNlX2FkZHJlc3Modm9pZCAqYXJnLCB1bnNpZ25lZCBsb25nIHBjKVxcbitzdGF0aWMgYm9vbCBwcmludF90cmFjZV9hZGRyZXNzKHZvaWQgKmFyZywgdW5zaWduZWQgbG9uZyBwYyxcXG4rXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBzcCwgdW5zaWduZWQgbG9uZyBmcClcXG4ge1xcbiBcXHRjb25zdCBjaGFyICpsb2dsdmwgPSBhcmc7XFxuIFxcbkBAIC0xNTUsNyArMTg0LDggQEAgdm9pZCBzaG93X3N0YWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdW5zaWduZWQgbG9uZyAqc3AsIGNvbnN0IGNoYXIgKmxvZ2x2bClcXG4gXFx0ZHVtcF9iYWNrdHJhY2UoTlVMTCwgdGFzaywgbG9nbHZsKTtcXG4gfVxcbiBcXG4tc3RhdGljIGJvb2wgc2F2ZV93Y2hhbih2b2lkICphcmcsIHVuc2lnbmVkIGxvbmcgcGMpXFxuK3N0YXRpYyBib29sIHNhdmVfd2NoYW4odm9pZCAqYXJnLCB1bnNpZ25lZCBsb25nIHBjLFxcbitcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBzcCwgdW5zaWduZWQgbG9uZyBmcClcXG4ge1xcbiBcXHRpZiAoIWluX3NjaGVkX2Z1bmN0aW9ucyhwYykpIHtcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyAqcCA9IGFyZztcXG5AQCAtMTc2LDEwICsyMDYsMjggQEAgdW5zaWduZWQgbG9uZyBfX2dldF93Y2hhbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXFxuIFxcdHJldHVybiBwYztcXG4gfVxcbiBcXG4rc3RydWN0IHdhbGtfc3RhY2tmcmFtZV9jb25zdW1lX2VudHJ5X2RhdGEge1xcbitcXHRzdGFja190cmFjZV9jb25zdW1lX2ZuIGNvbnN1bWVfZW50cnk7XFxuK1xcdHZvaWQgKmNvb2tpZTtcXG4rfTtcXG4rXFxuK3N0YXRpYyBib29sIHdhbGtfc3RhY2tmcmFtZV9jb25zdW1lX2VudHJ5KHZvaWQgKmFyZywgdW5zaWduZWQgbG9uZyBwYyxcXG4rXFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIHNwLCB1bnNpZ25lZCBsb25nIGZwKVxcbit7XFxuK1xcdHN0cnVjdCB3YWxrX3N0YWNrZnJhbWVfY29uc3VtZV9lbnRyeV9kYXRhICpkYXRhID0gYXJnO1xcbitcXG4rXFx0cmV0dXJuIGRhdGEtXFx1MDAzZWNvbnN1bWVfZW50cnkoZGF0YS1cXHUwMDNlY29va2llLCBwYyk7XFxuK31cXG4rXFxuIG5vaW5saW5lIG5vaW5zdHIgdm9pZCBhcmNoX3N0YWNrX3dhbGsoc3RhY2tfdHJhY2VfY29uc3VtZV9mbiBjb25zdW1lX2VudHJ5LCB2b2lkICpjb29raWUsXFxuIFxcdFxcdCAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4ge1xcbi1cXHR3YWxrX3N0YWNrZnJhbWUodGFzaywgcmVncywgY29uc3VtZV9lbnRyeSwgY29va2llKTtcXG4rXFx0c3RydWN0IHdhbGtfc3RhY2tmcmFtZV9jb25zdW1lX2VudHJ5X2RhdGEgZGF0YSA9IHtcXG4rXFx0XFx0LmNvbnN1bWVfZW50cnkgPSBjb25zdW1lX2VudHJ5LFxcbitcXHRcXHQuY29va2llID0gY29va2llLFxcbitcXHR9O1xcbitcXG4rXFx0d2Fsa19zdGFja2ZyYW1lKHRhc2ssIHJlZ3MsIHdhbGtfc3RhY2tmcmFtZV9jb25zdW1lX2VudHJ5LCBcXHUwMDI2ZGF0YSk7XFxuIH1cXG4gXFxuIC8qXFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXFxuaW5kZXggYWQwODlhOWE0ZWE5YWMuLmUwYzJmNzNiYzY0NmEzIDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcXG4rKysgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXFxuQEAgLTU2LDYgKzU2LDI5IEBAIHN0YXRpYyBjb25zdCBpbnQgcHRfcmVnbWFwW10gPSB7XFxuIFxcdFtSVl9SRUdfVDBdID0gb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHQwKSxcXG4gfTtcXG4gXFxuKy8qIEZ1bGwgc2V0IG9mIFJJU0MtViBjYWxsZWUtc2F2ZWQgR1AgcmVnaXN0ZXJzIChyYSwgczAtczExKSBzYXZlZCBieSBhIHByb2dyYW1cXG4rICogYWN0aW5nIGFzIGFuIGV4Y2VwdGlvbiBib3VuZGFyeSwgaW4gdGhlIG9yZGVyIHRoZXkgYXJlIHN0b3JlZCBvbiB0aGUgc3RhY2suXFxuKyAqIFJBIGFuZCBGUCBjb21lIGZpcnN0IHNvIHRoZSBzYXZlZCByYS9mcCBwYWlyIGZvcm1zIGEgdmFsaWQgc3RhY2tmcmFtZSByZWNvcmRcXG4rICogYXQgW0ZQLThdL1tGUC0xNl0gZm9yIHRoZSB1bndpbmRlci4gVGhlIGV4Y2VwdGlvbiBjYWxsYmFjayByZXVzZXMgdGhlXFxuKyAqIGJvdW5kYXJ5IHByb2dyYW0ncyBmcmFtZSBhbmQgcmVzdG9yZXMgdGhpcyBzYW1lIHNldCBpbiBpdHMgZXBpbG9ndWUsIHNvIGJvdGhcXG4rICogcGF0aHMgbXVzdCBhZ3JlZSBvbiB0aGUgY29udGVudHMgYW5kIG9yZGVyaW5nIG9mIHRoaXMgbGlzdC5cXG4rICovXFxuK3N0YXRpYyBjb25zdCBpbnQgcnZfZXhjZXB0aW9uX2NzYXZlX3JlZ3NbXSA9IHtcXG4rXFx0UlZfUkVHX1JBLFxcbitcXHRSVl9SRUdfRlAsXFxuK1xcdFJWX1JFR19TMSxcXG4rXFx0UlZfUkVHX1MyLFxcbitcXHRSVl9SRUdfUzMsXFxuK1xcdFJWX1JFR19TNCxcXG4rXFx0UlZfUkVHX1M1LFxcbitcXHRSVl9SRUdfUzYsXFxuK1xcdFJWX1JFR19TNyxcXG4rXFx0UlZfUkVHX1M4LFxcbitcXHRSVl9SRUdfUzksXFxuK1xcdFJWX1JFR19TMTAsXFxuK1xcdFJWX1JFR19TMTEsXFxuK307XFxuK1xcbiBlbnVtIHtcXG4gXFx0UlZfQ1RYX0ZfU0VFTl9DQUxMID1cXHRcXHRSVl9SRUdfUkEsXFxuIFxcdFJWX0NUWF9GX1NFRU5fUzEgPVxcdFxcdFJWX1JFR19TMSxcXG5AQCAtMTk4LDkgKzIyMSw4NCBAQCBzdGF0aWMgdm9pZCBlbWl0X2ltbSh1OCByZCwgczY0IHZhbCwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpXFxuIFxcdFxcdGVtaXRfYWRkaShyZCwgcmQsIGxvd2VyLCBjdHgpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBfX2J1aWxkX2VwaWxvZ3VlKGJvb2wgaXNfdGFpbF9jYWxsLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eClcXG4rLyogU3RhY2sgc3BhY2UgZm9yIHRoZSBjYWxsZWUtc2F2ZWQgcmVnaXN0ZXJzIGEgbm9ybWFsIHByb2dyYW0gc3BpbGxzLFxcbisgKiBleGNsdWRpbmcgdGhlIEJQRiBzdGFjayBpdHNlbGYuXFxuKyAqL1xcbitzdGF0aWMgaW50IG5vcm1hbF9zdGFja19hZGp1c3Qoc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpXFxuK3tcXG4rXFx0aW50IHN0YWNrX2FkanVzdCA9IDA7XFxuK1xcbitcXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1JBLCBjdHgpKVxcbitcXHRcXHRzdGFja19hZGp1c3QgKz0gODtcXG4rXFx0c3RhY2tfYWRqdXN0ICs9IDg7IC8qIFJWX1JFR19GUCAqL1xcbitcXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1MxLCBjdHgpKVxcbitcXHRcXHRzdGFja19hZGp1c3QgKz0gODtcXG4rXFx0aWYgKHNlZW5fcmVnKFJWX1JFR19TMiwgY3R4KSlcXG4rXFx0XFx0c3RhY2tfYWRqdXN0ICs9IDg7XFxuK1xcdGlmIChzZWVuX3JlZyhSVl9SRUdfUzMsIGN0eCkpXFxuK1xcdFxcdHN0YWNrX2FkanVzdCArPSA4O1xcbitcXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1M0LCBjdHgpKVxcbitcXHRcXHRzdGFja19hZGp1c3QgKz0gODtcXG4rXFx0aWYgKHNlZW5fcmVnKFJWX1JFR19TNSwgY3R4KSlcXG4rXFx0XFx0c3RhY2tfYWRqdXN0ICs9IDg7XFxuK1xcdGlmIChjdHgtXFx1MDAzZWFyZW5hX3ZtX3N0YXJ0KVxcbitcXHRcXHRzdGFja19hZGp1c3QgKz0gODtcXG4rXFx0c3RhY2tfYWRqdXN0ICs9IDg7IC8qIFJWX1JFR19UQ0MgKi9cXG4rXFxuK1xcdHJldHVybiByb3VuZF91cChzdGFja19hZGp1c3QsIFNUQUNLX0FMSUdOKTtcXG4rfVxcbitcXG4rLyogQWxsb2NhdGUgdGhlIGZyYW1lIGFuZCBzYXZlIHRoZSBjYWxsZWUtc2F2ZWQgcmVnaXN0ZXJzIHRoZSBwcm9ncmFtXFxuKyAqIGFjdHVhbGx5IGNsb2JiZXJzLCB0aGVuIHBvaW50IEZQIGF0IHRoZSBmcmFtZSB0b3AuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBlbWl0X25vcm1hbF9wcm9sb2d1ZShzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCwgaW50IHN0YWNrX2FkanVzdClcXG4re1xcbitcXHRpbnQgc3RvcmVfb2Zmc2V0ID0gc3RhY2tfYWRqdXN0IC0gODtcXG4rXFx0LyogdGFpbGNhbGwgc3RhcnRzIGhlcmUsIGVtaXQgaW5zbiBiZWZvcmUgaXQgbXVzdCBiZSBmaXhlZCAqL1xcbitcXG4rXFx0ZW1pdF9hZGRpKFJWX1JFR19TUCwgUlZfUkVHX1NQLCAtc3RhY2tfYWRqdXN0LCBjdHgpO1xcbitcXG4rXFx0aWYgKHNlZW5fcmVnKFJWX1JFR19SQSwgY3R4KSkge1xcbitcXHRcXHRlbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfUkEsIGN0eCk7XFxuK1xcdFxcdHN0b3JlX29mZnNldCAtPSA4O1xcbitcXHR9XFxuK1xcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19GUCwgY3R4KTtcXG4rXFx0c3RvcmVfb2Zmc2V0IC09IDg7XFxuK1xcdGlmIChzZWVuX3JlZyhSVl9SRUdfUzEsIGN0eCkpIHtcXG4rXFx0XFx0ZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX1MxLCBjdHgpO1xcbitcXHRcXHRzdG9yZV9vZmZzZXQgLT0gODtcXG4rXFx0fVxcbitcXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1MyLCBjdHgpKSB7XFxuK1xcdFxcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19TMiwgY3R4KTtcXG4rXFx0XFx0c3RvcmVfb2Zmc2V0IC09IDg7XFxuK1xcdH1cXG4rXFx0aWYgKHNlZW5fcmVnKFJWX1JFR19TMywgY3R4KSkge1xcbitcXHRcXHRlbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfUzMsIGN0eCk7XFxuK1xcdFxcdHN0b3JlX29mZnNldCAtPSA4O1xcbitcXHR9XFxuK1xcdGlmIChzZWVuX3JlZyhSVl9SRUdfUzQsIGN0eCkpIHtcXG4rXFx0XFx0ZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX1M0LCBjdHgpO1xcbitcXHRcXHRzdG9yZV9vZmZzZXQgLT0gODtcXG4rXFx0fVxcbitcXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1M1LCBjdHgpKSB7XFxuK1xcdFxcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19TNSwgY3R4KTtcXG4rXFx0XFx0c3RvcmVfb2Zmc2V0IC09IDg7XFxuK1xcdH1cXG4rXFx0aWYgKGN0eC1cXHUwMDNlYXJlbmFfdm1fc3RhcnQpIHtcXG4rXFx0XFx0ZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX0FSRU5BLCBjdHgpO1xcbitcXHRcXHRzdG9yZV9vZmZzZXQgLT0gODtcXG4rXFx0fVxcbitcXG4rXFx0Lyogc3RvcmUgVENDIGZyb20gUlZfUkVHX1RDQyB0byBzdGFjayAqL1xcbitcXHRlbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfVENDLCBjdHgpO1xcbitcXHRjdHgtXFx1MDAzZXRjY19vZmZzZXQgPSBzdG9yZV9vZmZzZXQ7XFxuK1xcbitcXHRlbWl0X2FkZGkoUlZfUkVHX0ZQLCBSVl9SRUdfU1AsIHN0YWNrX2FkanVzdCwgY3R4KTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZW1pdF9ub3JtYWxfcmVzdG9yZShzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCwgaW50IHN0YWNrX2FkanVzdClcXG4ge1xcbi1cXHRpbnQgc3RhY2tfYWRqdXN0ID0gY3R4LVxcdTAwM2VzdGFja19zaXplLCBzdG9yZV9vZmZzZXQgPSBzdGFja19hZGp1c3QgLSA4O1xcbitcXHRpbnQgc3RvcmVfb2Zmc2V0ID0gc3RhY2tfYWRqdXN0IC0gODtcXG4gXFxuIFxcdGlmIChzZWVuX3JlZyhSVl9SRUdfUkEsIGN0eCkpIHtcXG4gXFx0XFx0ZW1pdF9sZChSVl9SRUdfUkEsIHN0b3JlX29mZnNldCwgUlZfUkVHX1NQLCBjdHgpO1xcbkBAIC0yMzUsNiArMzMzLDY5IEBAIHN0YXRpYyB2b2lkIF9fYnVpbGRfZXBpbG9ndWUoYm9vbCBpc190YWlsX2NhbGwsIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KVxcbiBcXG4gXFx0LyogcmVzdG9yZSBUQ0MgZnJvbSBzdGFjayB0byBSVl9SRUdfVENDICovXFxuIFxcdGVtaXRfbGQoUlZfUkVHX1RDQywgY3R4LVxcdTAwM2V0Y2Nfb2Zmc2V0LCBSVl9SRUdfU1AsIGN0eCk7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIGlzX2V4Y2VwdGlvbl9wcm9nKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4re1xcbitcXHRyZXR1cm4gcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VleGNlcHRpb25fYm91bmRhcnkgfHwgcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VleGNlcHRpb25fY2I7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVtaXRfZXhjZXB0aW9uX2JvdW5kYXJ5X3Byb2xvZ3VlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGludCBzdGFja19hZGp1c3QpXFxuK3tcXG4rXFx0aW50IHN0b3JlX29mZnNldCA9IHN0YWNrX2FkanVzdCAtIDg7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0ZW1pdF9hZGRpKFJWX1JFR19TUCwgUlZfUkVHX1NQLCAtc3RhY2tfYWRqdXN0LCBjdHgpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShydl9leGNlcHRpb25fY3NhdmVfcmVncyk7IGkrKykge1xcbitcXHRcXHRlbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBydl9leGNlcHRpb25fY3NhdmVfcmVnc1tpXSwgY3R4KTtcXG4rXFx0XFx0c3RvcmVfb2Zmc2V0IC09IDg7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIHN0b3JlIFRDQyBmcm9tIFJWX1JFR19UQ0MgdG8gc3RhY2sgKi9cXG4rXFx0ZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX1RDQywgY3R4KTtcXG4rXFx0Y3R4LVxcdTAwM2V0Y2Nfb2Zmc2V0ID0gc3RvcmVfb2Zmc2V0O1xcbitcXG4rXFx0ZW1pdF9hZGRpKFJWX1JFR19GUCwgUlZfUkVHX1NQLCBzdGFja19hZGp1c3QsIGN0eCk7XFxuK31cXG4rXFxuKy8qIHJldXNlcyB0aGUgYm91bmRhcnkgcHJvZ3JhbSdzIGZyYW1lLCB3aG9zZSBmcmFtZSBwb2ludGVyXFxuKyAqIGlzIHBhc3NlZCBpbiBhMiAoc2luY2UgaXQncyB0aGUgdGhpcmQgYXJndW1lbnQgZnJvbSBicGZfdGhyb3coKSkuXFxuKyAqIFNldHRpbmcgU1AgPSBGUCAtIHN0YWNrX2FkanVzdCBsaW5lcyB0aGUgZXBpbG9ndWUncyBsb2FkcyB1cCB3aXRoXFxuKyAqIHRoZSByZWdpc3RlcnMgdGhlIGJvdW5kYXJ5IHNhdmVkLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgZW1pdF9leGNlcHRpb25fY2JfcHJvbG9ndWUoc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBpbnQgc3RhY2tfYWRqdXN0KVxcbit7XFxuK1xcdGVtaXRfbXYoUlZfUkVHX0ZQLCBSVl9SRUdfQTIsIGN0eCk7XFxuK1xcdGVtaXRfYWRkaShSVl9SRUdfU1AsIFJWX1JFR19GUCwgLXN0YWNrX2FkanVzdCwgY3R4KTtcXG4rXFx0Y3R4LVxcdTAwM2V0Y2Nfb2Zmc2V0ID0gc3RhY2tfYWRqdXN0IC0gOCAtIEFSUkFZX1NJWkUocnZfZXhjZXB0aW9uX2NzYXZlX3JlZ3MpICogODtcXG4rfVxcbitcXG4rLyogVXNlZCBieSBib3RoIHRoZSBib3VuZGFyeSBwcm9ncmFtIGFuZCB0aGUgZXhjZXB0aW9uIGNhbGxiYWNrIGFsaWtlLCBzaW5jZSB0aGVcXG4rICogY2FsbGJhY2sgcnVucyBvbiB0aGUgYm91bmRhcnkncyBmcmFtZS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGVtaXRfZXhjZXB0aW9uX3Jlc3RvcmUoc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsIGludCBzdGFja19hZGp1c3QpXFxuK3tcXG4rXFx0aW50IHN0b3JlX29mZnNldCA9IHN0YWNrX2FkanVzdCAtIDg7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUocnZfZXhjZXB0aW9uX2NzYXZlX3JlZ3MpOyBpKyspIHtcXG4rXFx0XFx0ZW1pdF9sZChydl9leGNlcHRpb25fY3NhdmVfcmVnc1tpXSwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfU1AsIGN0eCk7XFxuK1xcdFxcdHN0b3JlX29mZnNldCAtPSA4O1xcbitcXHR9XFxuK1xcdC8qIHJlc3RvcmUgVENDIGZyb20gc3RhY2sgdG8gUlZfUkVHX1RDQyAqL1xcbitcXHRlbWl0X2xkKFJWX1JFR19UQ0MsIGN0eC1cXHUwMDNldGNjX29mZnNldCwgUlZfUkVHX1NQLCBjdHgpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBfX2J1aWxkX2VwaWxvZ3VlKGJvb2wgaXNfdGFpbF9jYWxsLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eClcXG4re1xcbitcXHRpbnQgc3RhY2tfYWRqdXN0ID0gY3R4LVxcdTAwM2VzdGFja19zaXplO1xcbitcXG4rXFx0aWYgKGlzX2V4Y2VwdGlvbl9wcm9nKGN0eC1cXHUwMDNlcHJvZykpXFxuK1xcdFxcdGVtaXRfZXhjZXB0aW9uX3Jlc3RvcmUoY3R4LCBzdGFja19hZGp1c3QpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGVtaXRfbm9ybWFsX3Jlc3RvcmUoY3R4LCBzdGFja19hZGp1c3QpO1xcbiBcXG4gXFx0ZW1pdF9hZGRpKFJWX1JFR19TUCwgUlZfUkVHX1NQLCBzdGFja19hZGp1c3QsIGN0eCk7XFxuIFxcdC8qIFNldCByZXR1cm4gdmFsdWUuICovXFxuQEAgLTIwMDQsMzYgKzIxNjUsMjMgQEAgaW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGV4Y2VwdGlvbl9zdGFja19hZGp1c3Qodm9pZClcXG4re1xcbitcXHRpbnQgc3RhY2tfYWRqdXN0ID0gMDtcXG4rXFxuK1xcdHN0YWNrX2FkanVzdCArPSA4OyAvKiBSVl9SRUdfVENDICovXFxuK1xcdHN0YWNrX2FkanVzdCArPSBBUlJBWV9TSVpFKHJ2X2V4Y2VwdGlvbl9jc2F2ZV9yZWdzKSAqIDg7XFxuK1xcdHJldHVybiByb3VuZF91cChzdGFja19hZGp1c3QsIFNUQUNLX0FMSUdOKTtcXG4rfVxcbitcXG4gdm9pZCBicGZfaml0X2J1aWxkX3Byb2xvZ3VlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LCBib29sIGlzX3N1YnByb2cpXFxuIHtcXG4tXFx0aW50IGksIHN0YWNrX2FkanVzdCA9IDAsIHN0b3JlX29mZnNldCwgYnBmX3N0YWNrX2FkanVzdDtcXG4rXFx0aW50IGksIHN0YWNrX2FkanVzdCwgYnBmX3N0YWNrX2FkanVzdDtcXG4gXFxuIFxcdGJwZl9zdGFja19hZGp1c3QgPSByb3VuZF91cChjdHgtXFx1MDAzZXByb2ctXFx1MDAzZWF1eC1cXHUwMDNlc3RhY2tfZGVwdGgsIFNUQUNLX0FMSUdOKTtcXG4gXFx0aWYgKGJwZl9zdGFja19hZGp1c3QpXFxuIFxcdFxcdG1hcmtfZnAoY3R4KTtcXG4gXFxuLVxcdGlmIChzZWVuX3JlZyhSVl9SRUdfUkEsIGN0eCkpXFxuLVxcdFxcdHN0YWNrX2FkanVzdCArPSA4O1xcbi1cXHRzdGFja19hZGp1c3QgKz0gODsgLyogUlZfUkVHX0ZQICovXFxuLVxcdGlmIChzZWVuX3JlZyhSVl9SRUdfUzEsIGN0eCkpXFxuLVxcdFxcdHN0YWNrX2FkanVzdCArPSA4O1xcbi1cXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1MyLCBjdHgpKVxcbi1cXHRcXHRzdGFja19hZGp1c3QgKz0gODtcXG4tXFx0aWYgKHNlZW5fcmVnKFJWX1JFR19TMywgY3R4KSlcXG4tXFx0XFx0c3RhY2tfYWRqdXN0ICs9IDg7XFxuLVxcdGlmIChzZWVuX3JlZyhSVl9SRUdfUzQsIGN0eCkpXFxuLVxcdFxcdHN0YWNrX2FkanVzdCArPSA4O1xcbi1cXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1M1LCBjdHgpKVxcbi1cXHRcXHRzdGFja19hZGp1c3QgKz0gODtcXG4tXFx0aWYgKGN0eC1cXHUwMDNlYXJlbmFfdm1fc3RhcnQpXFxuLVxcdFxcdHN0YWNrX2FkanVzdCArPSA4O1xcbi1cXHRzdGFja19hZGp1c3QgKz0gODsgLyogUlZfUkVHX1RDQyAqL1xcbi1cXG4tXFx0c3RhY2tfYWRqdXN0ID0gcm91bmRfdXAoc3RhY2tfYWRqdXN0LCBTVEFDS19BTElHTik7XFxuLVxcdHN0YWNrX2FkanVzdCArPSBicGZfc3RhY2tfYWRqdXN0O1xcbi1cXG4tXFx0c3RvcmVfb2Zmc2V0ID0gc3RhY2tfYWRqdXN0IC0gODtcXG4tXFxuIFxcdC8qIGVtaXQga2NmaSB0eXBlIHByZWFtYmxlIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgIGZpcnN0IGluc24gKi9cXG4gXFx0ZW1pdF9rY2ZpKGlzX3N1YnByb2cgPyBjZmlfYnBmX3N1YnByb2dfaGFzaCA6IGNmaV9icGZfaGFzaCwgY3R4KTtcXG4gXFxuQEAgLTIwNDYsNDcgKzIxOTQsMTggQEAgdm9pZCBicGZfaml0X2J1aWxkX3Byb2xvZ3VlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LCBib29sIGlzX3N1YnByb2cpXFxuIFxcdGlmICghaXNfc3VicHJvZylcXG4gXFx0XFx0ZW1pdChydl9hZGRpKFJWX1JFR19UQ0MsIFJWX1JFR19aRVJPLCBNQVhfVEFJTF9DQUxMX0NOVCksIGN0eCk7XFxuIFxcbi1cXHQvKiB0YWlsY2FsbCBzdGFydHMgaGVyZSwgZW1pdCBpbnNuIGJlZm9yZSBpdCBtdXN0IGJlIGZpeGVkICovXFxuK1xcdGlmIChpc19leGNlcHRpb25fcHJvZyhjdHgtXFx1MDAzZXByb2cpKSB7XFxuK1xcdFxcdHN0YWNrX2FkanVzdCA9IGV4Y2VwdGlvbl9zdGFja19hZGp1c3QoKSArIGJwZl9zdGFja19hZGp1c3Q7XFxuIFxcbi1cXHRlbWl0X2FkZGkoUlZfUkVHX1NQLCBSVl9SRUdfU1AsIC1zdGFja19hZGp1c3QsIGN0eCk7XFxuLVxcbi1cXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1JBLCBjdHgpKSB7XFxuLVxcdFxcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19SQSwgY3R4KTtcXG4tXFx0XFx0c3RvcmVfb2Zmc2V0IC09IDg7XFxuLVxcdH1cXG4tXFx0ZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX0ZQLCBjdHgpO1xcbi1cXHRzdG9yZV9vZmZzZXQgLT0gODtcXG4tXFx0aWYgKHNlZW5fcmVnKFJWX1JFR19TMSwgY3R4KSkge1xcbi1cXHRcXHRlbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfUzEsIGN0eCk7XFxuLVxcdFxcdHN0b3JlX29mZnNldCAtPSA4O1xcbi1cXHR9XFxuLVxcdGlmIChzZWVuX3JlZyhSVl9SRUdfUzIsIGN0eCkpIHtcXG4tXFx0XFx0ZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX1MyLCBjdHgpO1xcbi1cXHRcXHRzdG9yZV9vZmZzZXQgLT0gODtcXG4tXFx0fVxcbi1cXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1MzLCBjdHgpKSB7XFxuLVxcdFxcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19TMywgY3R4KTtcXG4tXFx0XFx0c3RvcmVfb2Zmc2V0IC09IDg7XFxuLVxcdH1cXG4tXFx0aWYgKHNlZW5fcmVnKFJWX1JFR19TNCwgY3R4KSkge1xcbi1cXHRcXHRlbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfUzQsIGN0eCk7XFxuLVxcdFxcdHN0b3JlX29mZnNldCAtPSA4O1xcbi1cXHR9XFxuLVxcdGlmIChzZWVuX3JlZyhSVl9SRUdfUzUsIGN0eCkpIHtcXG4tXFx0XFx0ZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX1M1LCBjdHgpO1xcbi1cXHRcXHRzdG9yZV9vZmZzZXQgLT0gODtcXG4tXFx0fVxcbi1cXHRpZiAoY3R4LVxcdTAwM2VhcmVuYV92bV9zdGFydCkge1xcbi1cXHRcXHRlbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfQVJFTkEsIGN0eCk7XFxuLVxcdFxcdHN0b3JlX29mZnNldCAtPSA4O1xcbitcXHRcXHRpZiAoY3R4LVxcdTAwM2Vwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWV4Y2VwdGlvbl9jYilcXG4rXFx0XFx0XFx0ZW1pdF9leGNlcHRpb25fY2JfcHJvbG9ndWUoY3R4LCBzdGFja19hZGp1c3QpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGVtaXRfZXhjZXB0aW9uX2JvdW5kYXJ5X3Byb2xvZ3VlKGN0eCwgc3RhY2tfYWRqdXN0KTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0c3RhY2tfYWRqdXN0ID0gbm9ybWFsX3N0YWNrX2FkanVzdChjdHgpICsgYnBmX3N0YWNrX2FkanVzdDtcXG4rXFx0XFx0ZW1pdF9ub3JtYWxfcHJvbG9ndWUoY3R4LCBzdGFja19hZGp1c3QpO1xcbiBcXHR9XFxuIFxcbi1cXHQvKiBzdG9yZSBUQ0MgZnJvbSBSVl9SRUdfVENDIHRvIHN0YWNrICovXFxuLVxcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19UQ0MsIGN0eCk7XFxuLVxcdGN0eC1cXHUwMDNldGNjX29mZnNldCA9IHN0b3JlX29mZnNldDtcXG4tXFxuLVxcdGVtaXRfYWRkaShSVl9SRUdfRlAsIFJWX1JFR19TUCwgc3RhY2tfYWRqdXN0LCBjdHgpO1xcbi1cXG4gXFx0aWYgKGJwZl9zdGFja19hZGp1c3QpXFxuIFxcdFxcdGVtaXRfYWRkaShSVl9SRUdfUzUsIFJWX1JFR19TUCwgYnBmX3N0YWNrX2FkanVzdCwgY3R4KTtcXG4gXFxuQEAgLTIxNjEsMyArMjI4MCwxMiBAQCBib29sIGJwZl9qaXRfc3VwcG9ydHNfc3VicHJvZ190YWlsY2FsbHModm9pZClcXG4ge1xcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbitcXG4rYm9vbCBicGZfaml0X3N1cHBvcnRzX2V4Y2VwdGlvbnModm9pZClcXG4re1xcbitcXHQvKiBicGZfdGhyb3coKSB1bndpbmRzIGJ5IHdhbGtpbmcgdGhlIGZyYW1lLXBvaW50ZXIgY2hhaW4gZnJvbSBpbnNpZGVcXG4rXFx0ICogdGhlIGtlcm5lbCBiYWNrIGludG8gdGhlIEJQRiBmcmFtZXMgKHNlZSBhcmNoX2JwZl9zdGFja193YWxrKCkpLCBzb1xcbitcXHQgKiBleGNlcHRpb25zIHJlcXVpcmUgdGhlIGZyYW1lLXBvaW50ZXIgdW53aW5kZXIgdG8gYmUgZW5hYmxlZC5cXG4rXFx0ICovXFxuK1xcdHJldHVybiBJU19FTkFCTEVEKENPTkZJR19GUkFNRV9QT0lOVEVSKTtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvREVOWUxJU1QucmlzY3Y2NCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9ERU5ZTElTVC5yaXNjdjY0XFxuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggY2ExYmVhZTdmZThmMTAuLjAwMDAwMDAwMDAwMDAwXFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL0RFTllMSVNULnJpc2N2NjRcXG4rKysgL2Rldi9udWxsXFxuQEAgLTEsMiArMCwwIEBAXFxuLSMgcmlzY3Y2NCBkZW55IGxpc3QgZm9yIEJQRiBDSSBhbmQgbG9jYWwgdm10ZXN0XFxuLWV4Y2VwdGlvbnNcXHRcXHRcXHRcXHRcXHQjIEpJVCBkb2VzIG5vdCBzdXBwb3J0IGV4Y2VwdGlvbnNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTU6MDY6MzIuMDA3NDkyOTQ0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTg0OTc4MDYyNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkZSQU1FX1BPSU5URVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhcmNoX2JwZl9zdGFja193YWxrXCIsXG4gICAgXCJicGZfaml0X2J1aWxkX3Byb2xvZ3VlXCIsXG4gICAgXCJicGZfaml0X3N1cHBvcnRzX2V4Y2VwdGlvbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIEJQRiBleGNlcHRpb24gc3VwcG9ydCB0byB0aGUgUklTQy1WIGFyY2hpdGVjdHVyZS4gSXQgbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgdG8gZW1pdCBleGNlcHRpb24gcHJvbG9ndWVzIGFuZCBlcGlsb2d1ZXMsIGFuZCBpbXBsZW1lbnRzIGBhcmNoX2JwZl9zdGFja193YWxrYCBmb3IgdW53aW5kaW5nIHRoZSBzdGFjayBkdXJpbmcgQlBGIGV4Y2VwdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGtlcm5lbCBhbmQgQlBGIEpJVCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODdhNDc2MmFkOTMzYjRjOTBjOGE5ZDcxN2UwOTNmZjI4NmVkYWU3M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIzIDE1OjA2OjMwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9zdGFja3RyYWNlLmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3N0YWNrdHJhY2UuaFxuaW5kZXggYjE0OTVhN2UwNmNlNjkuLmZkMWZmMDRhMDQwZTk1IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9zdGFja3RyYWNlLmhcbisrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3RhY2t0cmFjZS5oXG5AQCAtMTEsOCArMTEsMTEgQEAgc3RydWN0IHN0YWNrZnJhbWUge1xuIFx0dW5zaWduZWQgbG9uZyByYTtcbiB9O1xuIFxuK3R5cGVkZWYgYm9vbCAoKndhbGtfc3RhY2tmcmFtZV9mbikodm9pZCAqYXJnLCB1bnNpZ25lZCBsb25nIHBjLFxuK1x0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBzcCwgdW5zaWduZWQgbG9uZyBmcCk7XG4rXG4gZXh0ZXJuIHZvaWQgbm90cmFjZSB3YWxrX3N0YWNrZnJhbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyxcbi1cdFx0XHRcdCAgICBib29sICgqZm4pKHZvaWQgKiwgdW5zaWduZWQgbG9uZyksIHZvaWQgKmFyZyk7XG4rXHRcdFx0XHQgICAgd2Fsa19zdGFja2ZyYW1lX2ZuIGZuLCB2b2lkICphcmcpO1xuIGV4dGVybiB2b2lkIGR1bXBfYmFja3RyYWNlKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssXG4gXHRcdFx0ICAgY29uc3QgY2hhciAqbG9nbHZsKTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2tlcm5lbC9wZXJmX2NhbGxjaGFpbi5jIGIvYXJjaC9yaXNjdi9rZXJuZWwvcGVyZl9jYWxsY2hhaW4uY1xuaW5kZXggYjQ2NWJjOWViODcwZWMuLjkzYTEyZDUzYWEyNmQ3IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rZXJuZWwvcGVyZl9jYWxsY2hhaW4uY1xuKysrIGIvYXJjaC9yaXNjdi9rZXJuZWwvcGVyZl9jYWxsY2hhaW4uY1xuQEAgLTIsNiArMiw3IEBAXG4gLyogQ29weXJpZ2h0IChDKSAyMDE5IEhhbmd6aG91IEMtU0tZIE1pY3Jvc3lzdGVtcyBjby4sbHRkLiAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcmZfZXZlbnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0YWNrdHJhY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS9zdGFja3RyYWNlLmhcdTAwM2VcbkBAIC00NCw1ICs0NSw1IEBAIHZvaWQgcGVyZl9jYWxsY2hhaW5fa2VybmVsKHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeV9jdHggKmVudHJ5LFxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHR3YWxrX3N0YWNrZnJhbWUoTlVMTCwgcmVncywgZmlsbF9jYWxsY2hhaW4sIGVudHJ5KTtcbitcdGFyY2hfc3RhY2tfd2FsayhmaWxsX2NhbGxjaGFpbiwgZW50cnksIGN1cnJlbnQsIHJlZ3MpO1xuIH1cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2tlcm5lbC9zdGFja3RyYWNlLmMgYi9hcmNoL3Jpc2N2L2tlcm5lbC9zdGFja3RyYWNlLmNcbmluZGV4IGM3NTU1NDQ3MTQ5YmZlLi5jMGYyMzkzZTUxNjNjYiAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva2VybmVsL3N0YWNrdHJhY2UuY1xuKysrIGIvYXJjaC9yaXNjdi9rZXJuZWwvc3RhY2t0cmFjZS5jXG5AQCAtNSw2ICs1LDcgQEBcbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbHRlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2FsbHN5bXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9kZWJ1Zy5oXHUwMDNlXG5AQCAtNDYsNyArNDcsNyBAQCBzdGF0aWMgaW5saW5lIGludCBmcF9pc192YWxpZCh1bnNpZ25lZCBsb25nIGZwLCB1bnNpZ25lZCBsb25nIHNwKVxuIH1cbiBcbiB2b2lkIG5vdHJhY2Ugd2Fsa19zdGFja2ZyYW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXG4tXHRcdFx0ICAgICBib29sICgqZm4pKHZvaWQgKiwgdW5zaWduZWQgbG9uZyksIHZvaWQgKmFyZylcbitcdFx0XHQgICAgIHdhbGtfc3RhY2tmcmFtZV9mbiBmbiwgdm9pZCAqYXJnKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZnAsIHNwLCBwYztcbiBcdGludCBncmFwaF9pZHggPSAwO1xuQEAgLTcxLDcgKzcyLDkgQEAgdm9pZCBub3RyYWNlIHdhbGtfc3RhY2tmcmFtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzLFxuIFx0Zm9yICg7Oykge1xuIFx0XHRzdHJ1Y3Qgc3RhY2tmcmFtZSAqZnJhbWU7XG4gXG4tXHRcdGlmICh1bmxpa2VseSghX19rZXJuZWxfdGV4dF9hZGRyZXNzKHBjKSB8fCAobGV2ZWwrKyBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2ICFmbihhcmcsIHBjKSkpKVxuK1x0XHQvKiBwYyBiZWxvbmdzIHRvIHRoZSBmdW5jdGlvbiB3aG9zZSBmcmFtZSBwb2ludGVyIGlzIGZwICovXG4rXHRcdGlmICh1bmxpa2VseSghX19rZXJuZWxfdGV4dF9hZGRyZXNzKHBjKSB8fFxuK1x0XHRcdCAgICAgKGxldmVsKysgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiAhZm4oYXJnLCBwYywgc3AsIGZwKSkpKVxuIFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRpZiAodW5saWtlbHkoIWZwX2lzX3ZhbGlkKGZwLCBzcCkpKVxuQEAgLTkxLDcgKzk0LDcgQEAgdm9pZCBub3RyYWNlIHdhbGtfc3RhY2tmcmFtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzLFxuIFx0XHRcdFx0XHRcdCAgIFx1MDAyNmZyYW1lLVx1MDAzZXJhKTtcbiBcdFx0XHRpZiAocGMgXHUwMDNlPSAodW5zaWduZWQgbG9uZyloYW5kbGVfZXhjZXB0aW9uIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICBwYyBcdTAwM2MgKHVuc2lnbmVkIGxvbmcpXHUwMDI2cmV0X2Zyb21fZXhjZXB0aW9uX2VuZCkge1xuLVx0XHRcdFx0aWYgKHVubGlrZWx5KCFmbihhcmcsIHBjKSkpXG4rXHRcdFx0XHRpZiAodW5saWtlbHkoIWZuKGFyZywgcGMsIHNwLCBmcCkpKVxuIFx0XHRcdFx0XHRicmVhaztcbiBcbiBcdFx0XHRcdHBjID0gKChzdHJ1Y3QgcHRfcmVncyAqKXNwKS1cdTAwM2VlcGM7XG5AQCAtMTAyLDEwICsxMDUsMzQgQEAgdm9pZCBub3RyYWNlIHdhbGtfc3RhY2tmcmFtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzLFxuIFx0fVxuIH1cbiBcbitzdHJ1Y3QgYnBmX3Vud2luZF9jb25zdW1lX2VudHJ5X2RhdGEge1xuK1x0Ym9vbCAoKmNvbnN1bWVfZW50cnkpKHZvaWQgKmNvb2tpZSwgdTY0IGlwLCB1NjQgc3AsIHU2NCBmcCk7XG4rXHR2b2lkICpjb29raWU7XG4rfTtcbitcbitzdGF0aWMgYm9vbCBicGZfdW53aW5kX2NvbnN1bWVfZW50cnkodm9pZCAqYXJnLCB1bnNpZ25lZCBsb25nIHBjLFxuK1x0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIHNwLCB1bnNpZ25lZCBsb25nIGZwKVxuK3tcbitcdHN0cnVjdCBicGZfdW53aW5kX2NvbnN1bWVfZW50cnlfZGF0YSAqZGF0YSA9IGFyZztcbitcbitcdHJldHVybiBkYXRhLVx1MDAzZWNvbnN1bWVfZW50cnkoZGF0YS1cdTAwM2Vjb29raWUsIHBjLCBzcCwgZnApO1xuK31cbitcbit2b2lkIG5vdHJhY2UgYXJjaF9icGZfc3RhY2tfd2Fsayhib29sICgqY29uc3VtZV9mbikodm9pZCAqY29va2llLCB1NjQgaXAsIHU2NCBzcCwgdTY0IGJwKSxcbitcdFx0XHRcdCB2b2lkICpjb29raWUpXG4re1xuK1x0c3RydWN0IGJwZl91bndpbmRfY29uc3VtZV9lbnRyeV9kYXRhIGRhdGEgPSB7XG4rXHRcdC5jb25zdW1lX2VudHJ5ID0gY29uc3VtZV9mbixcbitcdFx0LmNvb2tpZSA9IGNvb2tpZSxcbitcdH07XG4rXG4rXHR3YWxrX3N0YWNrZnJhbWUoY3VycmVudCwgTlVMTCwgYnBmX3Vud2luZF9jb25zdW1lX2VudHJ5LCBcdTAwMjZkYXRhKTtcbit9XG4rXG4gI2Vsc2UgLyogIUNPTkZJR19GUkFNRV9QT0lOVEVSICovXG4gXG4gdm9pZCBub3RyYWNlIHdhbGtfc3RhY2tmcmFtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssXG4tXHRzdHJ1Y3QgcHRfcmVncyAqcmVncywgYm9vbCAoKmZuKSh2b2lkICosIHVuc2lnbmVkIGxvbmcpLCB2b2lkICphcmcpXG4rXHRzdHJ1Y3QgcHRfcmVncyAqcmVncywgd2Fsa19zdGFja2ZyYW1lX2ZuIGZuLCB2b2lkICphcmcpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBzcCwgcGM7XG4gXHR1bnNpZ25lZCBsb25nICprc3A7XG5AQCAtMTI3LDcgKzE1NCw4IEBAIHZvaWQgbm90cmFjZSB3YWxrX3N0YWNrZnJhbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLFxuIFxuIFx0a3NwID0gKHVuc2lnbmVkIGxvbmcgKilzcDtcbiBcdHdoaWxlICgha3N0YWNrX2VuZChrc3ApKSB7XG4tXHRcdGlmIChfX2tlcm5lbF90ZXh0X2FkZHJlc3MocGMpIFx1MDAyNlx1MDAyNiB1bmxpa2VseSghZm4oYXJnLCBwYykpKVxuK1x0XHRpZiAoX19rZXJuZWxfdGV4dF9hZGRyZXNzKHBjKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHVubGlrZWx5KCFmbihhcmcsIHBjLCAodW5zaWduZWQgbG9uZylrc3AsIDApKSlcbiBcdFx0XHRicmVhaztcbiBcdFx0cGMgPSBSRUFEX09OQ0VfTk9DSEVDSygqa3NwKyspO1xuIFx0fVxuQEAgLTEzNSw3ICsxNjMsOCBAQCB2b2lkIG5vdHJhY2Ugd2Fsa19zdGFja2ZyYW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcbiBcbiAjZW5kaWYgLyogQ09ORklHX0ZSQU1FX1BPSU5URVIgKi9cbiBcbi1zdGF0aWMgYm9vbCBwcmludF90cmFjZV9hZGRyZXNzKHZvaWQgKmFyZywgdW5zaWduZWQgbG9uZyBwYylcbitzdGF0aWMgYm9vbCBwcmludF90cmFjZV9hZGRyZXNzKHZvaWQgKmFyZywgdW5zaWduZWQgbG9uZyBwYyxcbitcdFx0XHRcdHVuc2lnbmVkIGxvbmcgc3AsIHVuc2lnbmVkIGxvbmcgZnApXG4ge1xuIFx0Y29uc3QgY2hhciAqbG9nbHZsID0gYXJnO1xuIFxuQEAgLTE1NSw3ICsxODQsOCBAQCB2b2lkIHNob3dfc3RhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1bnNpZ25lZCBsb25nICpzcCwgY29uc3QgY2hhciAqbG9nbHZsKVxuIFx0ZHVtcF9iYWNrdHJhY2UoTlVMTCwgdGFzaywgbG9nbHZsKTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgc2F2ZV93Y2hhbih2b2lkICphcmcsIHVuc2lnbmVkIGxvbmcgcGMpXG4rc3RhdGljIGJvb2wgc2F2ZV93Y2hhbih2b2lkICphcmcsIHVuc2lnbmVkIGxvbmcgcGMsXG4rXHRcdCAgICAgICB1bnNpZ25lZCBsb25nIHNwLCB1bnNpZ25lZCBsb25nIGZwKVxuIHtcbiBcdGlmICghaW5fc2NoZWRfZnVuY3Rpb25zKHBjKSkge1xuIFx0XHR1bnNpZ25lZCBsb25nICpwID0gYXJnO1xuQEAgLTE3NiwxMCArMjA2LDI4IEBAIHVuc2lnbmVkIGxvbmcgX19nZXRfd2NoYW4oc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxuIFx0cmV0dXJuIHBjO1xuIH1cbiBcbitzdHJ1Y3Qgd2Fsa19zdGFja2ZyYW1lX2NvbnN1bWVfZW50cnlfZGF0YSB7XG4rXHRzdGFja190cmFjZV9jb25zdW1lX2ZuIGNvbnN1bWVfZW50cnk7XG4rXHR2b2lkICpjb29raWU7XG4rfTtcbitcbitzdGF0aWMgYm9vbCB3YWxrX3N0YWNrZnJhbWVfY29uc3VtZV9lbnRyeSh2b2lkICphcmcsIHVuc2lnbmVkIGxvbmcgcGMsXG4rXHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBzcCwgdW5zaWduZWQgbG9uZyBmcClcbit7XG4rXHRzdHJ1Y3Qgd2Fsa19zdGFja2ZyYW1lX2NvbnN1bWVfZW50cnlfZGF0YSAqZGF0YSA9IGFyZztcbitcbitcdHJldHVybiBkYXRhLVx1MDAzZWNvbnN1bWVfZW50cnkoZGF0YS1cdTAwM2Vjb29raWUsIHBjKTtcbit9XG4rXG4gbm9pbmxpbmUgbm9pbnN0ciB2b2lkIGFyY2hfc3RhY2tfd2FsayhzdGFja190cmFjZV9jb25zdW1lX2ZuIGNvbnN1bWVfZW50cnksIHZvaWQgKmNvb2tpZSxcbiBcdFx0ICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIHtcbi1cdHdhbGtfc3RhY2tmcmFtZSh0YXNrLCByZWdzLCBjb25zdW1lX2VudHJ5LCBjb29raWUpO1xuK1x0c3RydWN0IHdhbGtfc3RhY2tmcmFtZV9jb25zdW1lX2VudHJ5X2RhdGEgZGF0YSA9IHtcbitcdFx0LmNvbnN1bWVfZW50cnkgPSBjb25zdW1lX2VudHJ5LFxuK1x0XHQuY29va2llID0gY29va2llLFxuK1x0fTtcbitcbitcdHdhbGtfc3RhY2tmcmFtZSh0YXNrLCByZWdzLCB3YWxrX3N0YWNrZnJhbWVfY29uc3VtZV9lbnRyeSwgXHUwMDI2ZGF0YSk7XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbmluZGV4IGFkMDg5YTlhNGVhOWFjLi5lMGMyZjczYmM2NDZhMyAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbisrKyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbkBAIC01Niw2ICs1NiwyOSBAQCBzdGF0aWMgY29uc3QgaW50IHB0X3JlZ21hcFtdID0ge1xuIFx0W1JWX1JFR19UMF0gPSBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgdDApLFxuIH07XG4gXG4rLyogRnVsbCBzZXQgb2YgUklTQy1WIGNhbGxlZS1zYXZlZCBHUCByZWdpc3RlcnMgKHJhLCBzMC1zMTEpIHNhdmVkIGJ5IGEgcHJvZ3JhbVxuKyAqIGFjdGluZyBhcyBhbiBleGNlcHRpb24gYm91bmRhcnksIGluIHRoZSBvcmRlciB0aGV5IGFyZSBzdG9yZWQgb24gdGhlIHN0YWNrLlxuKyAqIFJBIGFuZCBGUCBjb21lIGZpcnN0IHNvIHRoZSBzYXZlZCByYS9mcCBwYWlyIGZvcm1zIGEgdmFsaWQgc3RhY2tmcmFtZSByZWNvcmRcbisgKiBhdCBbRlAtOF0vW0ZQLTE2XSBmb3IgdGhlIHVud2luZGVyLiBUaGUgZXhjZXB0aW9uIGNhbGxiYWNrIHJldXNlcyB0aGVcbisgKiBib3VuZGFyeSBwcm9ncmFtJ3MgZnJhbWUgYW5kIHJlc3RvcmVzIHRoaXMgc2FtZSBzZXQgaW4gaXRzIGVwaWxvZ3VlLCBzbyBib3RoXG4rICogcGF0aHMgbXVzdCBhZ3JlZSBvbiB0aGUgY29udGVudHMgYW5kIG9yZGVyaW5nIG9mIHRoaXMgbGlzdC5cbisgKi9cbitzdGF0aWMgY29uc3QgaW50IHJ2X2V4Y2VwdGlvbl9jc2F2ZV9yZWdzW10gPSB7XG4rXHRSVl9SRUdfUkEsXG4rXHRSVl9SRUdfRlAsXG4rXHRSVl9SRUdfUzEsXG4rXHRSVl9SRUdfUzIsXG4rXHRSVl9SRUdfUzMsXG4rXHRSVl9SRUdfUzQsXG4rXHRSVl9SRUdfUzUsXG4rXHRSVl9SRUdfUzYsXG4rXHRSVl9SRUdfUzcsXG4rXHRSVl9SRUdfUzgsXG4rXHRSVl9SRUdfUzksXG4rXHRSVl9SRUdfUzEwLFxuK1x0UlZfUkVHX1MxMSxcbit9O1xuK1xuIGVudW0ge1xuIFx0UlZfQ1RYX0ZfU0VFTl9DQUxMID1cdFx0UlZfUkVHX1JBLFxuIFx0UlZfQ1RYX0ZfU0VFTl9TMSA9XHRcdFJWX1JFR19TMSxcbkBAIC0xOTgsOSArMjIxLDg0IEBAIHN0YXRpYyB2b2lkIGVtaXRfaW1tKHU4IHJkLCBzNjQgdmFsLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eClcbiBcdFx0ZW1pdF9hZGRpKHJkLCByZCwgbG93ZXIsIGN0eCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIF9fYnVpbGRfZXBpbG9ndWUoYm9vbCBpc190YWlsX2NhbGwsIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KVxuKy8qIFN0YWNrIHNwYWNlIGZvciB0aGUgY2FsbGVlLXNhdmVkIHJlZ2lzdGVycyBhIG5vcm1hbCBwcm9ncmFtIHNwaWxscyxcbisgKiBleGNsdWRpbmcgdGhlIEJQRiBzdGFjayBpdHNlbGYuXG4rICovXG4rc3RhdGljIGludCBub3JtYWxfc3RhY2tfYWRqdXN0KHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KVxuK3tcbitcdGludCBzdGFja19hZGp1c3QgPSAwO1xuK1xuK1x0aWYgKHNlZW5fcmVnKFJWX1JFR19SQSwgY3R4KSlcbitcdFx0c3RhY2tfYWRqdXN0ICs9IDg7XG4rXHRzdGFja19hZGp1c3QgKz0gODsgLyogUlZfUkVHX0ZQICovXG4rXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1MxLCBjdHgpKVxuK1x0XHRzdGFja19hZGp1c3QgKz0gODtcbitcdGlmIChzZWVuX3JlZyhSVl9SRUdfUzIsIGN0eCkpXG4rXHRcdHN0YWNrX2FkanVzdCArPSA4O1xuK1x0aWYgKHNlZW5fcmVnKFJWX1JFR19TMywgY3R4KSlcbitcdFx0c3RhY2tfYWRqdXN0ICs9IDg7XG4rXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1M0LCBjdHgpKVxuK1x0XHRzdGFja19hZGp1c3QgKz0gODtcbitcdGlmIChzZWVuX3JlZyhSVl9SRUdfUzUsIGN0eCkpXG4rXHRcdHN0YWNrX2FkanVzdCArPSA4O1xuK1x0aWYgKGN0eC1cdTAwM2VhcmVuYV92bV9zdGFydClcbitcdFx0c3RhY2tfYWRqdXN0ICs9IDg7XG4rXHRzdGFja19hZGp1c3QgKz0gODsgLyogUlZfUkVHX1RDQyAqL1xuK1xuK1x0cmV0dXJuIHJvdW5kX3VwKHN0YWNrX2FkanVzdCwgU1RBQ0tfQUxJR04pO1xuK31cbitcbisvKiBBbGxvY2F0ZSB0aGUgZnJhbWUgYW5kIHNhdmUgdGhlIGNhbGxlZS1zYXZlZCByZWdpc3RlcnMgdGhlIHByb2dyYW1cbisgKiBhY3R1YWxseSBjbG9iYmVycywgdGhlbiBwb2ludCBGUCBhdCB0aGUgZnJhbWUgdG9wLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGVtaXRfbm9ybWFsX3Byb2xvZ3VlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LCBpbnQgc3RhY2tfYWRqdXN0KVxuK3tcbitcdGludCBzdG9yZV9vZmZzZXQgPSBzdGFja19hZGp1c3QgLSA4O1xuK1x0LyogdGFpbGNhbGwgc3RhcnRzIGhlcmUsIGVtaXQgaW5zbiBiZWZvcmUgaXQgbXVzdCBiZSBmaXhlZCAqL1xuK1xuK1x0ZW1pdF9hZGRpKFJWX1JFR19TUCwgUlZfUkVHX1NQLCAtc3RhY2tfYWRqdXN0LCBjdHgpO1xuK1xuK1x0aWYgKHNlZW5fcmVnKFJWX1JFR19SQSwgY3R4KSkge1xuK1x0XHRlbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfUkEsIGN0eCk7XG4rXHRcdHN0b3JlX29mZnNldCAtPSA4O1xuK1x0fVxuK1x0ZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX0ZQLCBjdHgpO1xuK1x0c3RvcmVfb2Zmc2V0IC09IDg7XG4rXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1MxLCBjdHgpKSB7XG4rXHRcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19TMSwgY3R4KTtcbitcdFx0c3RvcmVfb2Zmc2V0IC09IDg7XG4rXHR9XG4rXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1MyLCBjdHgpKSB7XG4rXHRcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19TMiwgY3R4KTtcbitcdFx0c3RvcmVfb2Zmc2V0IC09IDg7XG4rXHR9XG4rXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1MzLCBjdHgpKSB7XG4rXHRcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19TMywgY3R4KTtcbitcdFx0c3RvcmVfb2Zmc2V0IC09IDg7XG4rXHR9XG4rXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1M0LCBjdHgpKSB7XG4rXHRcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19TNCwgY3R4KTtcbitcdFx0c3RvcmVfb2Zmc2V0IC09IDg7XG4rXHR9XG4rXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1M1LCBjdHgpKSB7XG4rXHRcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19TNSwgY3R4KTtcbitcdFx0c3RvcmVfb2Zmc2V0IC09IDg7XG4rXHR9XG4rXHRpZiAoY3R4LVx1MDAzZWFyZW5hX3ZtX3N0YXJ0KSB7XG4rXHRcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19BUkVOQSwgY3R4KTtcbitcdFx0c3RvcmVfb2Zmc2V0IC09IDg7XG4rXHR9XG4rXG4rXHQvKiBzdG9yZSBUQ0MgZnJvbSBSVl9SRUdfVENDIHRvIHN0YWNrICovXG4rXHRlbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfVENDLCBjdHgpO1xuK1x0Y3R4LVx1MDAzZXRjY19vZmZzZXQgPSBzdG9yZV9vZmZzZXQ7XG4rXG4rXHRlbWl0X2FkZGkoUlZfUkVHX0ZQLCBSVl9SRUdfU1AsIHN0YWNrX2FkanVzdCwgY3R4KTtcbit9XG4rXG4rc3RhdGljIHZvaWQgZW1pdF9ub3JtYWxfcmVzdG9yZShzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCwgaW50IHN0YWNrX2FkanVzdClcbiB7XG4tXHRpbnQgc3RhY2tfYWRqdXN0ID0gY3R4LVx1MDAzZXN0YWNrX3NpemUsIHN0b3JlX29mZnNldCA9IHN0YWNrX2FkanVzdCAtIDg7XG4rXHRpbnQgc3RvcmVfb2Zmc2V0ID0gc3RhY2tfYWRqdXN0IC0gODtcbiBcbiBcdGlmIChzZWVuX3JlZyhSVl9SRUdfUkEsIGN0eCkpIHtcbiBcdFx0ZW1pdF9sZChSVl9SRUdfUkEsIHN0b3JlX29mZnNldCwgUlZfUkVHX1NQLCBjdHgpO1xuQEAgLTIzNSw2ICszMzMsNjkgQEAgc3RhdGljIHZvaWQgX19idWlsZF9lcGlsb2d1ZShib29sIGlzX3RhaWxfY2FsbCwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpXG4gXG4gXHQvKiByZXN0b3JlIFRDQyBmcm9tIHN0YWNrIHRvIFJWX1JFR19UQ0MgKi9cbiBcdGVtaXRfbGQoUlZfUkVHX1RDQywgY3R4LVx1MDAzZXRjY19vZmZzZXQsIFJWX1JFR19TUCwgY3R4KTtcbit9XG4rXG4rc3RhdGljIGJvb2wgaXNfZXhjZXB0aW9uX3Byb2coY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuK3tcbitcdHJldHVybiBwcm9nLVx1MDAzZWF1eC1cdTAwM2VleGNlcHRpb25fYm91bmRhcnkgfHwgcHJvZy1cdTAwM2VhdXgtXHUwMDNlZXhjZXB0aW9uX2NiO1xuK31cbitcbitzdGF0aWMgdm9pZCBlbWl0X2V4Y2VwdGlvbl9ib3VuZGFyeV9wcm9sb2d1ZShzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcbitcdFx0XHRcdFx0ICAgICBpbnQgc3RhY2tfYWRqdXN0KVxuK3tcbitcdGludCBzdG9yZV9vZmZzZXQgPSBzdGFja19hZGp1c3QgLSA4O1xuK1x0aW50IGk7XG4rXG4rXHRlbWl0X2FkZGkoUlZfUkVHX1NQLCBSVl9SRUdfU1AsIC1zdGFja19hZGp1c3QsIGN0eCk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHJ2X2V4Y2VwdGlvbl9jc2F2ZV9yZWdzKTsgaSsrKSB7XG4rXHRcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIHJ2X2V4Y2VwdGlvbl9jc2F2ZV9yZWdzW2ldLCBjdHgpO1xuK1x0XHRzdG9yZV9vZmZzZXQgLT0gODtcbitcdH1cbitcbitcdC8qIHN0b3JlIFRDQyBmcm9tIFJWX1JFR19UQ0MgdG8gc3RhY2sgKi9cbitcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19UQ0MsIGN0eCk7XG4rXHRjdHgtXHUwMDNldGNjX29mZnNldCA9IHN0b3JlX29mZnNldDtcbitcbitcdGVtaXRfYWRkaShSVl9SRUdfRlAsIFJWX1JFR19TUCwgc3RhY2tfYWRqdXN0LCBjdHgpO1xuK31cbitcbisvKiByZXVzZXMgdGhlIGJvdW5kYXJ5IHByb2dyYW0ncyBmcmFtZSwgd2hvc2UgZnJhbWUgcG9pbnRlclxuKyAqIGlzIHBhc3NlZCBpbiBhMiAoc2luY2UgaXQncyB0aGUgdGhpcmQgYXJndW1lbnQgZnJvbSBicGZfdGhyb3coKSkuXG4rICogU2V0dGluZyBTUCA9IEZQIC0gc3RhY2tfYWRqdXN0IGxpbmVzIHRoZSBlcGlsb2d1ZSdzIGxvYWRzIHVwIHdpdGhcbisgKiB0aGUgcmVnaXN0ZXJzIHRoZSBib3VuZGFyeSBzYXZlZC5cbisgKi9cbitzdGF0aWMgdm9pZCBlbWl0X2V4Y2VwdGlvbl9jYl9wcm9sb2d1ZShzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcbitcdFx0XHRcdCAgICAgICBpbnQgc3RhY2tfYWRqdXN0KVxuK3tcbitcdGVtaXRfbXYoUlZfUkVHX0ZQLCBSVl9SRUdfQTIsIGN0eCk7XG4rXHRlbWl0X2FkZGkoUlZfUkVHX1NQLCBSVl9SRUdfRlAsIC1zdGFja19hZGp1c3QsIGN0eCk7XG4rXHRjdHgtXHUwMDNldGNjX29mZnNldCA9IHN0YWNrX2FkanVzdCAtIDggLSBBUlJBWV9TSVpFKHJ2X2V4Y2VwdGlvbl9jc2F2ZV9yZWdzKSAqIDg7XG4rfVxuK1xuKy8qIFVzZWQgYnkgYm90aCB0aGUgYm91bmRhcnkgcHJvZ3JhbSBhbmQgdGhlIGV4Y2VwdGlvbiBjYWxsYmFjayBhbGlrZSwgc2luY2UgdGhlXG4rICogY2FsbGJhY2sgcnVucyBvbiB0aGUgYm91bmRhcnkncyBmcmFtZS5cbisgKi9cbitzdGF0aWMgdm9pZCBlbWl0X2V4Y2VwdGlvbl9yZXN0b3JlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LCBpbnQgc3RhY2tfYWRqdXN0KVxuK3tcbitcdGludCBzdG9yZV9vZmZzZXQgPSBzdGFja19hZGp1c3QgLSA4O1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHJ2X2V4Y2VwdGlvbl9jc2F2ZV9yZWdzKTsgaSsrKSB7XG4rXHRcdGVtaXRfbGQocnZfZXhjZXB0aW9uX2NzYXZlX3JlZ3NbaV0sIHN0b3JlX29mZnNldCwgUlZfUkVHX1NQLCBjdHgpO1xuK1x0XHRzdG9yZV9vZmZzZXQgLT0gODtcbitcdH1cbitcdC8qIHJlc3RvcmUgVENDIGZyb20gc3RhY2sgdG8gUlZfUkVHX1RDQyAqL1xuK1x0ZW1pdF9sZChSVl9SRUdfVENDLCBjdHgtXHUwMDNldGNjX29mZnNldCwgUlZfUkVHX1NQLCBjdHgpO1xuK31cbitcbitzdGF0aWMgdm9pZCBfX2J1aWxkX2VwaWxvZ3VlKGJvb2wgaXNfdGFpbF9jYWxsLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eClcbit7XG4rXHRpbnQgc3RhY2tfYWRqdXN0ID0gY3R4LVx1MDAzZXN0YWNrX3NpemU7XG4rXG4rXHRpZiAoaXNfZXhjZXB0aW9uX3Byb2coY3R4LVx1MDAzZXByb2cpKVxuK1x0XHRlbWl0X2V4Y2VwdGlvbl9yZXN0b3JlKGN0eCwgc3RhY2tfYWRqdXN0KTtcbitcdGVsc2VcbitcdFx0ZW1pdF9ub3JtYWxfcmVzdG9yZShjdHgsIHN0YWNrX2FkanVzdCk7XG4gXG4gXHRlbWl0X2FkZGkoUlZfUkVHX1NQLCBSVl9SRUdfU1AsIHN0YWNrX2FkanVzdCwgY3R4KTtcbiBcdC8qIFNldCByZXR1cm4gdmFsdWUuICovXG5AQCAtMjAwNCwzNiArMjE2NSwyMyBAQCBpbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IGV4Y2VwdGlvbl9zdGFja19hZGp1c3Qodm9pZClcbit7XG4rXHRpbnQgc3RhY2tfYWRqdXN0ID0gMDtcbitcbitcdHN0YWNrX2FkanVzdCArPSA4OyAvKiBSVl9SRUdfVENDICovXG4rXHRzdGFja19hZGp1c3QgKz0gQVJSQVlfU0laRShydl9leGNlcHRpb25fY3NhdmVfcmVncykgKiA4O1xuK1x0cmV0dXJuIHJvdW5kX3VwKHN0YWNrX2FkanVzdCwgU1RBQ0tfQUxJR04pO1xuK31cbitcbiB2b2lkIGJwZl9qaXRfYnVpbGRfcHJvbG9ndWUoc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsIGJvb2wgaXNfc3VicHJvZylcbiB7XG4tXHRpbnQgaSwgc3RhY2tfYWRqdXN0ID0gMCwgc3RvcmVfb2Zmc2V0LCBicGZfc3RhY2tfYWRqdXN0O1xuK1x0aW50IGksIHN0YWNrX2FkanVzdCwgYnBmX3N0YWNrX2FkanVzdDtcbiBcbiBcdGJwZl9zdGFja19hZGp1c3QgPSByb3VuZF91cChjdHgtXHUwMDNlcHJvZy1cdTAwM2VhdXgtXHUwMDNlc3RhY2tfZGVwdGgsIFNUQUNLX0FMSUdOKTtcbiBcdGlmIChicGZfc3RhY2tfYWRqdXN0KVxuIFx0XHRtYXJrX2ZwKGN0eCk7XG4gXG4tXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1JBLCBjdHgpKVxuLVx0XHRzdGFja19hZGp1c3QgKz0gODtcbi1cdHN0YWNrX2FkanVzdCArPSA4OyAvKiBSVl9SRUdfRlAgKi9cbi1cdGlmIChzZWVuX3JlZyhSVl9SRUdfUzEsIGN0eCkpXG4tXHRcdHN0YWNrX2FkanVzdCArPSA4O1xuLVx0aWYgKHNlZW5fcmVnKFJWX1JFR19TMiwgY3R4KSlcbi1cdFx0c3RhY2tfYWRqdXN0ICs9IDg7XG4tXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1MzLCBjdHgpKVxuLVx0XHRzdGFja19hZGp1c3QgKz0gODtcbi1cdGlmIChzZWVuX3JlZyhSVl9SRUdfUzQsIGN0eCkpXG4tXHRcdHN0YWNrX2FkanVzdCArPSA4O1xuLVx0aWYgKHNlZW5fcmVnKFJWX1JFR19TNSwgY3R4KSlcbi1cdFx0c3RhY2tfYWRqdXN0ICs9IDg7XG4tXHRpZiAoY3R4LVx1MDAzZWFyZW5hX3ZtX3N0YXJ0KVxuLVx0XHRzdGFja19hZGp1c3QgKz0gODtcbi1cdHN0YWNrX2FkanVzdCArPSA4OyAvKiBSVl9SRUdfVENDICovXG4tXG4tXHRzdGFja19hZGp1c3QgPSByb3VuZF91cChzdGFja19hZGp1c3QsIFNUQUNLX0FMSUdOKTtcbi1cdHN0YWNrX2FkanVzdCArPSBicGZfc3RhY2tfYWRqdXN0O1xuLVxuLVx0c3RvcmVfb2Zmc2V0ID0gc3RhY2tfYWRqdXN0IC0gODtcbi1cbiBcdC8qIGVtaXQga2NmaSB0eXBlIHByZWFtYmxlIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgIGZpcnN0IGluc24gKi9cbiBcdGVtaXRfa2NmaShpc19zdWJwcm9nID8gY2ZpX2JwZl9zdWJwcm9nX2hhc2ggOiBjZmlfYnBmX2hhc2gsIGN0eCk7XG4gXG5AQCAtMjA0Niw0NyArMjE5NCwxOCBAQCB2b2lkIGJwZl9qaXRfYnVpbGRfcHJvbG9ndWUoc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsIGJvb2wgaXNfc3VicHJvZylcbiBcdGlmICghaXNfc3VicHJvZylcbiBcdFx0ZW1pdChydl9hZGRpKFJWX1JFR19UQ0MsIFJWX1JFR19aRVJPLCBNQVhfVEFJTF9DQUxMX0NOVCksIGN0eCk7XG4gXG4tXHQvKiB0YWlsY2FsbCBzdGFydHMgaGVyZSwgZW1pdCBpbnNuIGJlZm9yZSBpdCBtdXN0IGJlIGZpeGVkICovXG4rXHRpZiAoaXNfZXhjZXB0aW9uX3Byb2coY3R4LVx1MDAzZXByb2cpKSB7XG4rXHRcdHN0YWNrX2FkanVzdCA9IGV4Y2VwdGlvbl9zdGFja19hZGp1c3QoKSArIGJwZl9zdGFja19hZGp1c3Q7XG4gXG4tXHRlbWl0X2FkZGkoUlZfUkVHX1NQLCBSVl9SRUdfU1AsIC1zdGFja19hZGp1c3QsIGN0eCk7XG4tXG4tXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1JBLCBjdHgpKSB7XG4tXHRcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19SQSwgY3R4KTtcbi1cdFx0c3RvcmVfb2Zmc2V0IC09IDg7XG4tXHR9XG4tXHRlbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfRlAsIGN0eCk7XG4tXHRzdG9yZV9vZmZzZXQgLT0gODtcbi1cdGlmIChzZWVuX3JlZyhSVl9SRUdfUzEsIGN0eCkpIHtcbi1cdFx0ZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX1MxLCBjdHgpO1xuLVx0XHRzdG9yZV9vZmZzZXQgLT0gODtcbi1cdH1cbi1cdGlmIChzZWVuX3JlZyhSVl9SRUdfUzIsIGN0eCkpIHtcbi1cdFx0ZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX1MyLCBjdHgpO1xuLVx0XHRzdG9yZV9vZmZzZXQgLT0gODtcbi1cdH1cbi1cdGlmIChzZWVuX3JlZyhSVl9SRUdfUzMsIGN0eCkpIHtcbi1cdFx0ZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX1MzLCBjdHgpO1xuLVx0XHRzdG9yZV9vZmZzZXQgLT0gODtcbi1cdH1cbi1cdGlmIChzZWVuX3JlZyhSVl9SRUdfUzQsIGN0eCkpIHtcbi1cdFx0ZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX1M0LCBjdHgpO1xuLVx0XHRzdG9yZV9vZmZzZXQgLT0gODtcbi1cdH1cbi1cdGlmIChzZWVuX3JlZyhSVl9SRUdfUzUsIGN0eCkpIHtcbi1cdFx0ZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX1M1LCBjdHgpO1xuLVx0XHRzdG9yZV9vZmZzZXQgLT0gODtcbi1cdH1cbi1cdGlmIChjdHgtXHUwMDNlYXJlbmFfdm1fc3RhcnQpIHtcbi1cdFx0ZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX0FSRU5BLCBjdHgpO1xuLVx0XHRzdG9yZV9vZmZzZXQgLT0gODtcbitcdFx0aWYgKGN0eC1cdTAwM2Vwcm9nLVx1MDAzZWF1eC1cdTAwM2VleGNlcHRpb25fY2IpXG4rXHRcdFx0ZW1pdF9leGNlcHRpb25fY2JfcHJvbG9ndWUoY3R4LCBzdGFja19hZGp1c3QpO1xuK1x0XHRlbHNlXG4rXHRcdFx0ZW1pdF9leGNlcHRpb25fYm91bmRhcnlfcHJvbG9ndWUoY3R4LCBzdGFja19hZGp1c3QpO1xuK1x0fSBlbHNlIHtcbitcdFx0c3RhY2tfYWRqdXN0ID0gbm9ybWFsX3N0YWNrX2FkanVzdChjdHgpICsgYnBmX3N0YWNrX2FkanVzdDtcbitcdFx0ZW1pdF9ub3JtYWxfcHJvbG9ndWUoY3R4LCBzdGFja19hZGp1c3QpO1xuIFx0fVxuIFxuLVx0Lyogc3RvcmUgVENDIGZyb20gUlZfUkVHX1RDQyB0byBzdGFjayAqL1xuLVx0ZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX1RDQywgY3R4KTtcbi1cdGN0eC1cdTAwM2V0Y2Nfb2Zmc2V0ID0gc3RvcmVfb2Zmc2V0O1xuLVxuLVx0ZW1pdF9hZGRpKFJWX1JFR19GUCwgUlZfUkVHX1NQLCBzdGFja19hZGp1c3QsIGN0eCk7XG4tXG4gXHRpZiAoYnBmX3N0YWNrX2FkanVzdClcbiBcdFx0ZW1pdF9hZGRpKFJWX1JFR19TNSwgUlZfUkVHX1NQLCBicGZfc3RhY2tfYWRqdXN0LCBjdHgpO1xuIFxuQEAgLTIxNjEsMyArMjI4MCwxMiBAQCBib29sIGJwZl9qaXRfc3VwcG9ydHNfc3VicHJvZ190YWlsY2FsbHModm9pZClcbiB7XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4rXG4rYm9vbCBicGZfaml0X3N1cHBvcnRzX2V4Y2VwdGlvbnModm9pZClcbit7XG4rXHQvKiBicGZfdGhyb3coKSB1bndpbmRzIGJ5IHdhbGtpbmcgdGhlIGZyYW1lLXBvaW50ZXIgY2hhaW4gZnJvbSBpbnNpZGVcbitcdCAqIHRoZSBrZXJuZWwgYmFjayBpbnRvIHRoZSBCUEYgZnJhbWVzIChzZWUgYXJjaF9icGZfc3RhY2tfd2FsaygpKSwgc29cbitcdCAqIGV4Y2VwdGlvbnMgcmVxdWlyZSB0aGUgZnJhbWUtcG9pbnRlciB1bndpbmRlciB0byBiZSBlbmFibGVkLlxuK1x0ICovXG4rXHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfRlJBTUVfUE9JTlRFUik7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9ERU5ZTElTVC5yaXNjdjY0IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL0RFTllMSVNULnJpc2N2NjRcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggY2ExYmVhZTdmZThmMTAuLjAwMDAwMDAwMDAwMDAwXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvREVOWUxJU1QucmlzY3Y2NFxuKysrIC9kZXYvbnVsbFxuQEAgLTEsMiArMCwwIEBAXG4tIyByaXNjdjY0IGRlbnkgbGlzdCBmb3IgQlBGIENJIGFuZCBsb2NhbCB2bXRlc3Rcbi1leGNlcHRpb25zXHRcdFx0XHRcdCMgSklUIGRvZXMgbm90IHN1cHBvcnQgZXhjZXB0aW9uc1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTU6MDY6MzIuMDA3NDk0MDI0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY2OTA5MDU2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBSSVNDLVYgQlBGIEV4Y2VwdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBhZGRzIEJQRiBleGNlcHRpb24gc3VwcG9ydCB0byB0aGUgUklTQy1WIGFyY2hpdGVjdHVyZS4gSXQgc2VlbXMgdG8gYmUgYSBmYWlybHkgZm9jdXNlZCBjaGFuZ2UsIHRvdWNoaW5nIG9uIHNvbWUga2V5IGFyZWFzOiBgc3RhY2t0cmFjZS5oYCwgcGVyZm9ybWFuY2UgY2FsbGNoYWlucywgc3RhY2sgdW53aW5kaW5nLCBhbmQgdGhlIEJQRiBKSVQgY29tcGlsZXIgKHNwZWNpZmljYWxseSB0aGUgNjQtYml0IHZlcnNpb24pLiBJdCdzIGltcGxlbWVudGluZyBhbiBleGNlcHRpb24gcHJvbG9ndWUgYW5kIGVwaWxvZ3VlLCBhbmQgdGhlbiBpdCdzIGFsc28gbWFraW5nIHNvbWUgY3J1Y2lhbCBtb2RpZmljYXRpb25zIHRvIGB3YWxrX3N0YWNrZnJhbWVgIHRvIGVuYWJsZSBwYXNzaW5nIHRoZSBzdGFjayBhbmQgZnJhbWUgcG9pbnRlcnMgdG8gdGhlIGNhbGxiYWNrIGFuZCB0aGVuIHByb3ZpZGluZyB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHN0YWNrIHdhbGsgZnVuY3Rpb25hbGl0eS5cblxuVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBubyBkb3VidC4gV2UncmUgaW50cm9kdWNpbmcgQlBGIGV4Y2VwdGlvbiBzdXBwb3J0LCB3aGljaCB3aWxsIG1vZGlmeSBib3RoIHN0YWNrIHVud2luZGluZyBhbmQgdGhlIEpJVCBjb21waWxlci4gVGhhdCdzIGEgdGV4dGJvb2sgZGVmaW5pdGlvbiBvZiBhIGNoYW5nZSB0aGF0J3MgKmJlZ2dpbmcqIHRvIGJlIGZ1enplZCEgV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyByb2J1c3QsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgdXNlci1zdXBwbGllZCBCUEYgY29kZSBydW5uaW5nIGluIGtlcm5lbCBzcGFjZS5cblxuTm93LCBiZWZvcmUgSSBkaWcgdG9vIGRlZXAsIGxldCdzIHNlZSB3aGF0IGNvbmZpZ3MgYXJlIHJlcXVpcmVkLiBJIGtub3cgdGhhdCB0aGUgQlBGIEpJVCBvbiBSSVNDLVYgaXMgZW5hYmxlZCBieSBgQ09ORklHX0JQRl9KSVRgLiBUaGUgcGF0Y2ggaXRzZWxmIG1lbnRpb25zIHRoYXQgYENPTkZJR19GUkFNRV9QT0lOVEVSYCBpcyBuZWNlc3NhcnkgZm9yIHRoZSBleGNlcHRpb24gc3VwcG9ydCwgd2hpY2ggYWxpZ25zIHdpdGggaG93IHN0YWNrIHVud2luZGluZyB1c3VhbGx5IHdvcmtzLiBUbyBiZSBwcmVjaXNlLCBJIHNob3VsZCBmaW5kIHRob3NlIGNvbmZpZyBzeW1ib2xzLiBJ4oCZbGwgcXVpY2tseSBjaGVjayBgYXJjaC9yaXNjdi9LY29uZmlnYCBvciBgYXJjaC9yaXNjdi9uZXQvS2NvbmZpZ2AgdG8gY29uZmlybSB3aGVyZSBgQlBGX0pJVGAgaXMgZGVmaW5lZC4gSSdsbCB1c2UgYGdyZXBwZXJgIHRvIGxvY2F0ZSB0aGVzZSBjb25maWcgb3B0aW9ucyBhbmQgdmVyaWZ5IHRoZSByZXF1aXJlZCBzZXR0aW5ncy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2V0IHVwIGNvcnJlY3RseSBiZWZvcmUgSSBzdGFydCBkZWVwZXIgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxOTEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNTowNjozNy42NzY1ODYzOTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ0NDYzMjgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfSklUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3ZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE1OjA2OjM3Ljc0MTAzOTQ5M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MzUxMTM0MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipLY29uZmlnIERpdmUgZm9yIEJQRiBTdXBwb3J0IGluIFJJU0MtVioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIEJQRiAoQmVya2VsZXkgUGFja2V0IEZpbHRlcikgc3VwcG9ydCBsaXZlcyBpbiB0aGUgUklTQy1WIGtlcm5lbCBjb25maWd1cmF0aW9uLiBHaXZlbiBteSBleHBlcmllbmNlLCB0aGUgZmlyc3QgcGxhY2UgSSdkIGxvb2sgaXMgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBLY29uZmlnIGZpbGUuIFRoYXQncyBhbG1vc3QgYWx3YXlzIHRoZSBzdGFuZGFyZC4gU28sIGxldCdzIHN0YXJ0IHdpdGggYGFyY2gvcmlzY3YvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIHJlbGV2YW50IG9wdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIHBlcmhhcHMgc29tZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uc2lkZXJhdGlvbnMgZm9yIGVuYWJsaW5nIEJQRiBmdW5jdGlvbmFsaXR5LiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk0OSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE1OjA2OjQxLjQ3NjE1NTcwMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODQ0NjgzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3YvS2NvbmZpZz0xMz1jb25maWcgUklTQ1ZcXG4tLVxcbmFyY2gvcmlzY3YvS2NvbmZpZy0xNjctXFx0c2VsZWN0IEhBVkVfRlVOQ1RJT05fVFJBQ0VSIGlmIEhBVkVfRFlOQU1JQ19GVFJBQ0VcXG5hcmNoL3Jpc2N2L0tjb25maWc6MTY4OlxcdHNlbGVjdCBIQVZFX0VCUEZfSklUIGlmIE1NVVxcbmFyY2gvcmlzY3YvS2NvbmZpZy0xNjktXFx0c2VsZWN0IEhBVkVfR0VORVJJQ19USUZfQklUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNTowNjo0MS41MzQ2MDg0NzlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODkwODg1OTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEJQRiBKSVQgRXhjZXB0aW9uIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBCUEYgSklUIGNvbmZpZ3VyYXRpb24uIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGBDT05GSUdfQlBGX0pJVGAsIHdoaWNoIGlzIHByZXR0eSBnZW5lcmljLCBidXQgdGhpcyBzcGVjaWZpYyBmZWF0dXJlIHJlcXVpcmVzIGBDT05GSUdfRlJBTUVfUE9JTlRFUmAuIFRoZSBwYXRjaCBpcyBleHBsaWNpdCBhYm91dCB0aGF0LiBJdCdzIHVzaW5nIHRoZSBmcmFtZSBwb2ludGVyIGZvciB1bndpbmRpbmcgd2l0aCBgYnBmX3Rocm93KClgLCBhbmQgdGhhdCBtZWFucyBgQ09ORklHX0ZSQU1FX1BPSU5URVJgICptdXN0KiBiZSBlbmFibGVkLiBTbywgdGhlIGVzc2VudGlhbCBjb25maWdzIGZvciB0aGlzIGZlYXR1cmUgYXJlIGNsZWFybHkgYENPTkZJR19GUkFNRV9QT0lOVEVSYCBhbmQsIG9mIGNvdXJzZSwgYENPTkZJR19CUEZfSklUYC4gVGhhdCdzIHRoZSBiYXNlbGluZS5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIHN5bWJvbHMuIFRoZSBwYXRjaCB0b3VjaGVzIGEgZmV3IGZ1bmN0aW9ucywgaW5jbHVkaW5nIGB3YWxrX3N0YWNrZnJhbWVgLCBgYXJjaF9icGZfc3RhY2tfd2Fsa2AsIGBicGZfaml0X2J1aWxkX3Byb2xvZ3VlYCwgYGJwZl9qaXRfZW1pdF9pbnNuYCAodGhvdWdoIGluZGlyZWN0bHkpLCBhbmQgYGJwZl9qaXRfc3VwcG9ydHNfZXhjZXB0aW9uc2AuIEkgdGhpbmsgdGhlIG1haW4gcG9pbnRzIG9mIGludGVyZXN0IGFyZSBgYXJjaF9icGZfc3RhY2tfd2Fsa2AsIHdoaWNoIGlzIGEga2V5IHBhcnQgb2YgdGhlIHN0YWNrIHdhbGtpbmcgcHJvY2VzcywgYGJwZl9qaXRfYnVpbGRfcHJvbG9ndWVgIGJlY2F1c2UgaXQncyBnZW5lcmF0aW5nIHRoZSBwcm9sb2d1ZSwgYW5kIGBicGZfaml0X3N1cHBvcnRzX2V4Y2VwdGlvbnNgIGJlY2F1c2UgaXQgZXhwbGljaXRseSBjaGVja3MgZm9yIGBGUkFNRV9QT0lOVEVSYC4gQWx0aG91Z2ggYHdhbGtfc3RhY2tmcmFtZWAgaXMgbW9kaWZpZWQsIHdoaWNoIHNlZW1zIGxpa2UgYSBob3RzcG90IGZvciBzdGFjayB0cmFjZXMsIGBhcmNoX2JwZl9zdGFja193YWxrYCB3aWxsIGxpa2VseSBwcm92aWRlIGEgbW9yZSBmb2N1c2VkIHZpZXcuXG5cbkknbSBhbHNvIGxvb2tpbmcgc3BlY2lmaWNhbGx5IGF0IGBhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jYCB0byBzZWUgdGhlIGRldGFpbHMgb2YgdGhlIGNoYW5nZXMuIFRoZSByZWxldmFudCBmdW5jdGlvbnMgdGhlcmUgYXJlOiBgZW1pdF9leGNlcHRpb25fYm91bmRhcnlfcHJvbG9ndWVgLCBgZW1pdF9leGNlcHRpb25fY2JfcHJvbG9ndWVgLCBgZW1pdF9leGNlcHRpb25fcmVzdG9yZWAsIGBicGZfaml0X2J1aWxkX3Byb2xvZ3VlYCwgYF9fYnVpbGRfZXBpbG9ndWVgLCBhbmQgYWdhaW4sIGBicGZfaml0X3N1cHBvcnRzX2V4Y2VwdGlvbnNgLiBJIHNlZSB0aGF0IGBlbWl0X2V4Y2VwdGlvbl9ib3VuZGFyeV9wcm9sb2d1ZWAgaXMgc3RhdGljLCBzbyBpdCdzIG5vdCBleHBvc2VkLCBidXQgYGJwZl9qaXRfYnVpbGRfcHJvbG9ndWVgIGlzIGV4cG9ydGVkIGFuZCBnbG9iYWwsIGFuZCBpbXBvcnRhbnRseSwgYGFyY2hfYnBmX3N0YWNrX3dhbGtgIGlzIGFsc28gZ2xvYmFsLlxuXG5MZXQgbWUgY29uZmlybSB0aGF0IGBhcmNoX2JwZl9zdGFja193YWxrYCBpcywgaW4gZmFjdCwgZ2xvYmFsLiBZZXAsIGl0IGlzLiBUaGUgcHJvdG90eXBlIGRlY2xhcmVzIGl0IGB2b2lkIG5vdHJhY2UgYXJjaF9icGZfc3RhY2tfd2FsayguLi4pYCwgc28gaXQncyBkZWZpbml0ZWx5IGFjY2Vzc2libGUuXG5cblNvLCB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBhcmUgbm93IGZpcm1seSBzZXQgYXM6XG5cbiogICBgYXJjaF9icGZfc3RhY2tfd2Fsa2BcbiogICBgYnBmX2ppdF9idWlsZF9wcm9sb2d1ZWBcbiogICBgYnBmX2ppdF9zdXBwb3J0c19leGNlcHRpb25zYFxuXG5GaW5hbGx5LCBsZXQncyBxdWlja2x5IHJldmlldyB0aGUgZXNzZW50aWFsIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBXZSd2ZSBnb3QgYENPTkZJR19CUEZfU1lTQ0FMTGAgZm9yIEJQRiBpbiBnZW5lcmFsLCBgQ09ORklHX0JQRl9KSVRgIGZvciB0aGUgSklULCBhbmQgYENPTkZJR19GUkFNRV9QT0lOVEVSYCBmb3IgZXhjZXB0aW9ucywgYXMgcHJldmlvdXNseSBkaXNjdXNzZWQuXG5cbkFscmlnaHQsIEkgdGhpbmsgSSBoYXZlIGEgY2xlYXIgcGljdHVyZS4gTGV0J3MgcmVwb3J0IHRoZSByZXN1bHRzIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI0NCwiT3V0cHV0VG9rZW5zIjoxNjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTU6MDY6NTAuNDI1NDk3MTI0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTc5OTQ3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkZSQU1FX1BPSU5URVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhcmNoX2JwZl9zdGFja193YWxrXCIsXG4gICAgXCJicGZfaml0X2J1aWxkX3Byb2xvZ3VlXCIsXG4gICAgXCJicGZfaml0X3N1cHBvcnRzX2V4Y2VwdGlvbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIEJQRiBleGNlcHRpb24gc3VwcG9ydCB0byB0aGUgUklTQy1WIGFyY2hpdGVjdHVyZS4gSXQgbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgdG8gZW1pdCBleGNlcHRpb24gcHJvbG9ndWVzIGFuZCBlcGlsb2d1ZXMsIGFuZCBpbXBsZW1lbnRzIGBhcmNoX2JwZl9zdGFja193YWxrYCBmb3IgdW53aW5kaW5nIHRoZSBzdGFjayBkdXJpbmcgQlBGIGV4Y2VwdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGtlcm5lbCBhbmQgQlBGIEpJVCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkZSQU1FX1BPSU5URVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhcmNoX2JwZl9zdGFja193YWxrXCIsXG4gICAgXCJicGZfaml0X2J1aWxkX3Byb2xvZ3VlXCIsXG4gICAgXCJicGZfaml0X3N1cHBvcnRzX2V4Y2VwdGlvbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIEJQRiBleGNlcHRpb24gc3VwcG9ydCB0byB0aGUgUklTQy1WIGFyY2hpdGVjdHVyZS4gSXQgbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgdG8gZW1pdCBleGNlcHRpb24gcHJvbG9ndWVzIGFuZCBlcGlsb2d1ZXMsIGFuZCBpbXBsZW1lbnRzIGBhcmNoX2JwZl9zdGFja193YWxrYCBmb3IgdW53aW5kaW5nIHRoZSBzdGFjayBkdXJpbmcgQlBGIGV4Y2VwdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGtlcm5lbCBhbmQgQlBGIEpJVCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow56d4b[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-23 14:44:06 +0000 UTC FinishedAt: 2026-07-23 15:06:52 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "87267b89459813cb50ab5377e076b639c07b4491", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT", "FRAME_POINTER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "87267b89459813cb50ab5377e076b639c07b4491", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT", "FRAME_POINTER" ], "series_id": "0ba34b37-9a16-44b3-ba20-71d2eb01602a" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "arch_bpf_stack_walk", "bpf_jit_build_prologue", "bpf_jit_supports_exceptions" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE1OjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7RlJBTUVfUE9JTlRFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FyY2hfYnBmX3N0YWNrX3dhbGsmIzM0OywKICAgICYjMzQ7YnBmX2ppdF9idWlsZF9wcm9sb2d1ZSYjMzQ7LAogICAgJiMzNDticGZfaml0X3N1cHBvcnRzX2V4Y2VwdGlvbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBCUEYgZXhjZXB0aW9uIHN1cHBvcnQgdG8gdGhlIFJJU0MtViBhcmNoaXRlY3R1cmUuIEl0IG1vZGlmaWVzIHRoZSBCUEYgSklUIGNvbXBpbGVyIHRvIGVtaXQgZXhjZXB0aW9uIHByb2xvZ3VlcyBhbmQgZXBpbG9ndWVzLCBhbmQgaW1wbGVtZW50cyBgYXJjaF9icGZfc3RhY2tfd2Fsa2AgZm9yIHVud2luZGluZyB0aGUgc3RhY2sgZHVyaW5nIEJQRiBleGNlcHRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBrZXJuZWwgYW5kIEJQRiBKSVQgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE1OjA2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODdhNDc2MmFkOTMzYjRjOTBjOGE5ZDcxN2UwOTNmZjI4NmVkYWU3M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIzIDE1OjA2OjMwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3RhY2t0cmFjZS5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9zdGFja3RyYWNlLmhcbmluZGV4IGIxNDk1YTdlMDZjZTY5Li5mZDFmZjA0YTA0MGU5NSAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3RhY2t0cmFjZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3N0YWNrdHJhY2UuaFxuQEAgLTExLDggJiM0MzsxMSwxMSBAQCBzdHJ1Y3Qgc3RhY2tmcmFtZSB7XG4gXHR1bnNpZ25lZCBsb25nIHJhO1xuIH07XG4gXG4mIzQzO3R5cGVkZWYgYm9vbCAoKndhbGtfc3RhY2tmcmFtZV9mbikodm9pZCAqYXJnLCB1bnNpZ25lZCBsb25nIHBjLFxuJiM0MztcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc3AsIHVuc2lnbmVkIGxvbmcgZnApO1xuJiM0MztcbiBleHRlcm4gdm9pZCBub3RyYWNlIHdhbGtfc3RhY2tmcmFtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzLFxuLVx0XHRcdFx0ICAgIGJvb2wgKCpmbikodm9pZCAqLCB1bnNpZ25lZCBsb25nKSwgdm9pZCAqYXJnKTtcbiYjNDM7XHRcdFx0XHQgICAgd2Fsa19zdGFja2ZyYW1lX2ZuIGZuLCB2b2lkICphcmcpO1xuIGV4dGVybiB2b2lkIGR1bXBfYmFja3RyYWNlKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssXG4gXHRcdFx0ICAgY29uc3QgY2hhciAqbG9nbHZsKTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2tlcm5lbC9wZXJmX2NhbGxjaGFpbi5jIGIvYXJjaC9yaXNjdi9rZXJuZWwvcGVyZl9jYWxsY2hhaW4uY1xuaW5kZXggYjQ2NWJjOWViODcwZWMuLjkzYTEyZDUzYWEyNmQ3IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rZXJuZWwvcGVyZl9jYWxsY2hhaW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rZXJuZWwvcGVyZl9jYWxsY2hhaW4uY1xuQEAgLTIsNiAmIzQzOzIsNyBAQFxuIC8qIENvcHlyaWdodCAoQykgMjAxOSBIYW5nemhvdSBDLVNLWSBNaWNyb3N5c3RlbXMgY28uLGx0ZC4gKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wZXJmX2V2ZW50LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc3RhY2t0cmFjZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3N0YWNrdHJhY2UuaFx1MDAzZVxuQEAgLTQ0LDUgJiM0Mzs0NSw1IEBAIHZvaWQgcGVyZl9jYWxsY2hhaW5fa2VybmVsKHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeV9jdHggKmVudHJ5LFxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHR3YWxrX3N0YWNrZnJhbWUoTlVMTCwgcmVncywgZmlsbF9jYWxsY2hhaW4sIGVudHJ5KTtcbiYjNDM7XHRhcmNoX3N0YWNrX3dhbGsoZmlsbF9jYWxsY2hhaW4sIGVudHJ5LCBjdXJyZW50LCByZWdzKTtcbiB9XG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rZXJuZWwvc3RhY2t0cmFjZS5jIGIvYXJjaC9yaXNjdi9rZXJuZWwvc3RhY2t0cmFjZS5jXG5pbmRleCBjNzU1NTQ0NzE0OWJmZS4uYzBmMjM5M2U1MTYzY2IgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2tlcm5lbC9zdGFja3RyYWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva2VybmVsL3N0YWNrdHJhY2UuY1xuQEAgLTUsNiAmIzQzOzUsNyBAQFxuICAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbHRlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2FsbHN5bXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9kZWJ1Zy5oXHUwMDNlXG5AQCAtNDYsNyAmIzQzOzQ3LDcgQEAgc3RhdGljIGlubGluZSBpbnQgZnBfaXNfdmFsaWQodW5zaWduZWQgbG9uZyBmcCwgdW5zaWduZWQgbG9uZyBzcClcbiB9XG4gXG4gdm9pZCBub3RyYWNlIHdhbGtfc3RhY2tmcmFtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzLFxuLVx0XHRcdCAgICAgYm9vbCAoKmZuKSh2b2lkICosIHVuc2lnbmVkIGxvbmcpLCB2b2lkICphcmcpXG4mIzQzO1x0XHRcdCAgICAgd2Fsa19zdGFja2ZyYW1lX2ZuIGZuLCB2b2lkICphcmcpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBmcCwgc3AsIHBjO1xuIFx0aW50IGdyYXBoX2lkeCA9IDA7XG5AQCAtNzEsNyAmIzQzOzcyLDkgQEAgdm9pZCBub3RyYWNlIHdhbGtfc3RhY2tmcmFtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzLFxuIFx0Zm9yICg7Oykge1xuIFx0XHRzdHJ1Y3Qgc3RhY2tmcmFtZSAqZnJhbWU7XG4gXG4tXHRcdGlmICh1bmxpa2VseSghX19rZXJuZWxfdGV4dF9hZGRyZXNzKHBjKSB8fCAobGV2ZWwmIzQzOyYjNDM7IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgIWZuKGFyZywgcGMpKSkpXG4mIzQzO1x0XHQvKiBwYyBiZWxvbmdzIHRvIHRoZSBmdW5jdGlvbiB3aG9zZSBmcmFtZSBwb2ludGVyIGlzIGZwICovXG4mIzQzO1x0XHRpZiAodW5saWtlbHkoIV9fa2VybmVsX3RleHRfYWRkcmVzcyhwYykgfHxcbiYjNDM7XHRcdFx0ICAgICAobGV2ZWwmIzQzOyYjNDM7IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgIWZuKGFyZywgcGMsIHNwLCBmcCkpKSlcbiBcdFx0XHRicmVhaztcbiBcbiBcdFx0aWYgKHVubGlrZWx5KCFmcF9pc192YWxpZChmcCwgc3ApKSlcbkBAIC05MSw3ICYjNDM7OTQsNyBAQCB2b2lkIG5vdHJhY2Ugd2Fsa19zdGFja2ZyYW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXG4gXHRcdFx0XHRcdFx0ICAgXHUwMDI2ZnJhbWUtXHUwMDNlcmEpO1xuIFx0XHRcdGlmIChwYyBcdTAwM2U9ICh1bnNpZ25lZCBsb25nKWhhbmRsZV9leGNlcHRpb24gXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgIHBjIFx1MDAzYyAodW5zaWduZWQgbG9uZylcdTAwMjZyZXRfZnJvbV9leGNlcHRpb25fZW5kKSB7XG4tXHRcdFx0XHRpZiAodW5saWtlbHkoIWZuKGFyZywgcGMpKSlcbiYjNDM7XHRcdFx0XHRpZiAodW5saWtlbHkoIWZuKGFyZywgcGMsIHNwLCBmcCkpKVxuIFx0XHRcdFx0XHRicmVhaztcbiBcbiBcdFx0XHRcdHBjID0gKChzdHJ1Y3QgcHRfcmVncyAqKXNwKS1cdTAwM2VlcGM7XG5AQCAtMTAyLDEwICYjNDM7MTA1LDM0IEBAIHZvaWQgbm90cmFjZSB3YWxrX3N0YWNrZnJhbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyxcbiBcdH1cbiB9XG4gXG4mIzQzO3N0cnVjdCBicGZfdW53aW5kX2NvbnN1bWVfZW50cnlfZGF0YSB7XG4mIzQzO1x0Ym9vbCAoKmNvbnN1bWVfZW50cnkpKHZvaWQgKmNvb2tpZSwgdTY0IGlwLCB1NjQgc3AsIHU2NCBmcCk7XG4mIzQzO1x0dm9pZCAqY29va2llO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgYnBmX3Vud2luZF9jb25zdW1lX2VudHJ5KHZvaWQgKmFyZywgdW5zaWduZWQgbG9uZyBwYyxcbiYjNDM7XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgc3AsIHVuc2lnbmVkIGxvbmcgZnApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX3Vud2luZF9jb25zdW1lX2VudHJ5X2RhdGEgKmRhdGEgPSBhcmc7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkYXRhLVx1MDAzZWNvbnN1bWVfZW50cnkoZGF0YS1cdTAwM2Vjb29raWUsIHBjLCBzcCwgZnApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIG5vdHJhY2UgYXJjaF9icGZfc3RhY2tfd2Fsayhib29sICgqY29uc3VtZV9mbikodm9pZCAqY29va2llLCB1NjQgaXAsIHU2NCBzcCwgdTY0IGJwKSxcbiYjNDM7XHRcdFx0XHQgdm9pZCAqY29va2llKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl91bndpbmRfY29uc3VtZV9lbnRyeV9kYXRhIGRhdGEgPSB7XG4mIzQzO1x0XHQuY29uc3VtZV9lbnRyeSA9IGNvbnN1bWVfZm4sXG4mIzQzO1x0XHQuY29va2llID0gY29va2llLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHdhbGtfc3RhY2tmcmFtZShjdXJyZW50LCBOVUxMLCBicGZfdW53aW5kX2NvbnN1bWVfZW50cnksIFx1MDAyNmRhdGEpO1xuJiM0Mzt9XG4mIzQzO1xuICNlbHNlIC8qICFDT05GSUdfRlJBTUVfUE9JTlRFUiAqL1xuIFxuIHZvaWQgbm90cmFjZSB3YWxrX3N0YWNrZnJhbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLFxuLVx0c3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGJvb2wgKCpmbikodm9pZCAqLCB1bnNpZ25lZCBsb25nKSwgdm9pZCAqYXJnKVxuJiM0MztcdHN0cnVjdCBwdF9yZWdzICpyZWdzLCB3YWxrX3N0YWNrZnJhbWVfZm4gZm4sIHZvaWQgKmFyZylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHNwLCBwYztcbiBcdHVuc2lnbmVkIGxvbmcgKmtzcDtcbkBAIC0xMjcsNyAmIzQzOzE1NCw4IEBAIHZvaWQgbm90cmFjZSB3YWxrX3N0YWNrZnJhbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLFxuIFxuIFx0a3NwID0gKHVuc2lnbmVkIGxvbmcgKilzcDtcbiBcdHdoaWxlICgha3N0YWNrX2VuZChrc3ApKSB7XG4tXHRcdGlmIChfX2tlcm5lbF90ZXh0X2FkZHJlc3MocGMpIFx1MDAyNlx1MDAyNiB1bmxpa2VseSghZm4oYXJnLCBwYykpKVxuJiM0MztcdFx0aWYgKF9fa2VybmVsX3RleHRfYWRkcmVzcyhwYykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgdW5saWtlbHkoIWZuKGFyZywgcGMsICh1bnNpZ25lZCBsb25nKWtzcCwgMCkpKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRwYyA9IFJFQURfT05DRV9OT0NIRUNLKCprc3AmIzQzOyYjNDM7KTtcbiBcdH1cbkBAIC0xMzUsNyAmIzQzOzE2Myw4IEBAIHZvaWQgbm90cmFjZSB3YWxrX3N0YWNrZnJhbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLFxuIFxuICNlbmRpZiAvKiBDT05GSUdfRlJBTUVfUE9JTlRFUiAqL1xuIFxuLXN0YXRpYyBib29sIHByaW50X3RyYWNlX2FkZHJlc3Modm9pZCAqYXJnLCB1bnNpZ25lZCBsb25nIHBjKVxuJiM0MztzdGF0aWMgYm9vbCBwcmludF90cmFjZV9hZGRyZXNzKHZvaWQgKmFyZywgdW5zaWduZWQgbG9uZyBwYyxcbiYjNDM7XHRcdFx0XHR1bnNpZ25lZCBsb25nIHNwLCB1bnNpZ25lZCBsb25nIGZwKVxuIHtcbiBcdGNvbnN0IGNoYXIgKmxvZ2x2bCA9IGFyZztcbiBcbkBAIC0xNTUsNyAmIzQzOzE4NCw4IEBAIHZvaWQgc2hvd19zdGFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHVuc2lnbmVkIGxvbmcgKnNwLCBjb25zdCBjaGFyICpsb2dsdmwpXG4gXHRkdW1wX2JhY2t0cmFjZShOVUxMLCB0YXNrLCBsb2dsdmwpO1xuIH1cbiBcbi1zdGF0aWMgYm9vbCBzYXZlX3djaGFuKHZvaWQgKmFyZywgdW5zaWduZWQgbG9uZyBwYylcbiYjNDM7c3RhdGljIGJvb2wgc2F2ZV93Y2hhbih2b2lkICphcmcsIHVuc2lnbmVkIGxvbmcgcGMsXG4mIzQzO1x0XHQgICAgICAgdW5zaWduZWQgbG9uZyBzcCwgdW5zaWduZWQgbG9uZyBmcClcbiB7XG4gXHRpZiAoIWluX3NjaGVkX2Z1bmN0aW9ucyhwYykpIHtcbiBcdFx0dW5zaWduZWQgbG9uZyAqcCA9IGFyZztcbkBAIC0xNzYsMTAgJiM0MzsyMDYsMjggQEAgdW5zaWduZWQgbG9uZyBfX2dldF93Y2hhbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXG4gXHRyZXR1cm4gcGM7XG4gfVxuIFxuJiM0MztzdHJ1Y3Qgd2Fsa19zdGFja2ZyYW1lX2NvbnN1bWVfZW50cnlfZGF0YSB7XG4mIzQzO1x0c3RhY2tfdHJhY2VfY29uc3VtZV9mbiBjb25zdW1lX2VudHJ5O1xuJiM0MztcdHZvaWQgKmNvb2tpZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHdhbGtfc3RhY2tmcmFtZV9jb25zdW1lX2VudHJ5KHZvaWQgKmFyZywgdW5zaWduZWQgbG9uZyBwYyxcbiYjNDM7XHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBzcCwgdW5zaWduZWQgbG9uZyBmcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB3YWxrX3N0YWNrZnJhbWVfY29uc3VtZV9lbnRyeV9kYXRhICpkYXRhID0gYXJnO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZGF0YS1cdTAwM2Vjb25zdW1lX2VudHJ5KGRhdGEtXHUwMDNlY29va2llLCBwYyk7XG4mIzQzO31cbiYjNDM7XG4gbm9pbmxpbmUgbm9pbnN0ciB2b2lkIGFyY2hfc3RhY2tfd2FsayhzdGFja190cmFjZV9jb25zdW1lX2ZuIGNvbnN1bWVfZW50cnksIHZvaWQgKmNvb2tpZSxcbiBcdFx0ICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIHtcbi1cdHdhbGtfc3RhY2tmcmFtZSh0YXNrLCByZWdzLCBjb25zdW1lX2VudHJ5LCBjb29raWUpO1xuJiM0MztcdHN0cnVjdCB3YWxrX3N0YWNrZnJhbWVfY29uc3VtZV9lbnRyeV9kYXRhIGRhdGEgPSB7XG4mIzQzO1x0XHQuY29uc3VtZV9lbnRyeSA9IGNvbnN1bWVfZW50cnksXG4mIzQzO1x0XHQuY29va2llID0gY29va2llLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHdhbGtfc3RhY2tmcmFtZSh0YXNrLCByZWdzLCB3YWxrX3N0YWNrZnJhbWVfY29uc3VtZV9lbnRyeSwgXHUwMDI2ZGF0YSk7XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbmluZGV4IGFkMDg5YTlhNGVhOWFjLi5lMGMyZjczYmM2NDZhMyAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbkBAIC01Niw2ICYjNDM7NTYsMjkgQEAgc3RhdGljIGNvbnN0IGludCBwdF9yZWdtYXBbXSA9IHtcbiBcdFtSVl9SRUdfVDBdID0gb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHQwKSxcbiB9O1xuIFxuJiM0MzsvKiBGdWxsIHNldCBvZiBSSVNDLVYgY2FsbGVlLXNhdmVkIEdQIHJlZ2lzdGVycyAocmEsIHMwLXMxMSkgc2F2ZWQgYnkgYSBwcm9ncmFtXG4mIzQzOyAqIGFjdGluZyBhcyBhbiBleGNlcHRpb24gYm91bmRhcnksIGluIHRoZSBvcmRlciB0aGV5IGFyZSBzdG9yZWQgb24gdGhlIHN0YWNrLlxuJiM0MzsgKiBSQSBhbmQgRlAgY29tZSBmaXJzdCBzbyB0aGUgc2F2ZWQgcmEvZnAgcGFpciBmb3JtcyBhIHZhbGlkIHN0YWNrZnJhbWUgcmVjb3JkXG4mIzQzOyAqIGF0IFtGUC04XS9bRlAtMTZdIGZvciB0aGUgdW53aW5kZXIuIFRoZSBleGNlcHRpb24gY2FsbGJhY2sgcmV1c2VzIHRoZVxuJiM0MzsgKiBib3VuZGFyeSBwcm9ncmFtJiMzOTtzIGZyYW1lIGFuZCByZXN0b3JlcyB0aGlzIHNhbWUgc2V0IGluIGl0cyBlcGlsb2d1ZSwgc28gYm90aFxuJiM0MzsgKiBwYXRocyBtdXN0IGFncmVlIG9uIHRoZSBjb250ZW50cyBhbmQgb3JkZXJpbmcgb2YgdGhpcyBsaXN0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGNvbnN0IGludCBydl9leGNlcHRpb25fY3NhdmVfcmVnc1tdID0ge1xuJiM0MztcdFJWX1JFR19SQSxcbiYjNDM7XHRSVl9SRUdfRlAsXG4mIzQzO1x0UlZfUkVHX1MxLFxuJiM0MztcdFJWX1JFR19TMixcbiYjNDM7XHRSVl9SRUdfUzMsXG4mIzQzO1x0UlZfUkVHX1M0LFxuJiM0MztcdFJWX1JFR19TNSxcbiYjNDM7XHRSVl9SRUdfUzYsXG4mIzQzO1x0UlZfUkVHX1M3LFxuJiM0MztcdFJWX1JFR19TOCxcbiYjNDM7XHRSVl9SRUdfUzksXG4mIzQzO1x0UlZfUkVHX1MxMCxcbiYjNDM7XHRSVl9SRUdfUzExLFxuJiM0Mzt9O1xuJiM0MztcbiBlbnVtIHtcbiBcdFJWX0NUWF9GX1NFRU5fQ0FMTCA9XHRcdFJWX1JFR19SQSxcbiBcdFJWX0NUWF9GX1NFRU5fUzEgPVx0XHRSVl9SRUdfUzEsXG5AQCAtMTk4LDkgJiM0MzsyMjEsODQgQEAgc3RhdGljIHZvaWQgZW1pdF9pbW0odTggcmQsIHM2NCB2YWwsIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KVxuIFx0XHRlbWl0X2FkZGkocmQsIHJkLCBsb3dlciwgY3R4KTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgX19idWlsZF9lcGlsb2d1ZShib29sIGlzX3RhaWxfY2FsbCwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpXG4mIzQzOy8qIFN0YWNrIHNwYWNlIGZvciB0aGUgY2FsbGVlLXNhdmVkIHJlZ2lzdGVycyBhIG5vcm1hbCBwcm9ncmFtIHNwaWxscyxcbiYjNDM7ICogZXhjbHVkaW5nIHRoZSBCUEYgc3RhY2sgaXRzZWxmLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBub3JtYWxfc3RhY2tfYWRqdXN0KHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHN0YWNrX2FkanVzdCA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChzZWVuX3JlZyhSVl9SRUdfUkEsIGN0eCkpXG4mIzQzO1x0XHRzdGFja19hZGp1c3QgJiM0Mzs9IDg7XG4mIzQzO1x0c3RhY2tfYWRqdXN0ICYjNDM7PSA4OyAvKiBSVl9SRUdfRlAgKi9cbiYjNDM7XHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1MxLCBjdHgpKVxuJiM0MztcdFx0c3RhY2tfYWRqdXN0ICYjNDM7PSA4O1xuJiM0MztcdGlmIChzZWVuX3JlZyhSVl9SRUdfUzIsIGN0eCkpXG4mIzQzO1x0XHRzdGFja19hZGp1c3QgJiM0Mzs9IDg7XG4mIzQzO1x0aWYgKHNlZW5fcmVnKFJWX1JFR19TMywgY3R4KSlcbiYjNDM7XHRcdHN0YWNrX2FkanVzdCAmIzQzOz0gODtcbiYjNDM7XHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1M0LCBjdHgpKVxuJiM0MztcdFx0c3RhY2tfYWRqdXN0ICYjNDM7PSA4O1xuJiM0MztcdGlmIChzZWVuX3JlZyhSVl9SRUdfUzUsIGN0eCkpXG4mIzQzO1x0XHRzdGFja19hZGp1c3QgJiM0Mzs9IDg7XG4mIzQzO1x0aWYgKGN0eC1cdTAwM2VhcmVuYV92bV9zdGFydClcbiYjNDM7XHRcdHN0YWNrX2FkanVzdCAmIzQzOz0gODtcbiYjNDM7XHRzdGFja19hZGp1c3QgJiM0Mzs9IDg7IC8qIFJWX1JFR19UQ0MgKi9cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJvdW5kX3VwKHN0YWNrX2FkanVzdCwgU1RBQ0tfQUxJR04pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBBbGxvY2F0ZSB0aGUgZnJhbWUgYW5kIHNhdmUgdGhlIGNhbGxlZS1zYXZlZCByZWdpc3RlcnMgdGhlIHByb2dyYW1cbiYjNDM7ICogYWN0dWFsbHkgY2xvYmJlcnMsIHRoZW4gcG9pbnQgRlAgYXQgdGhlIGZyYW1lIHRvcC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGVtaXRfbm9ybWFsX3Byb2xvZ3VlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LCBpbnQgc3RhY2tfYWRqdXN0KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHN0b3JlX29mZnNldCA9IHN0YWNrX2FkanVzdCAtIDg7XG4mIzQzO1x0LyogdGFpbGNhbGwgc3RhcnRzIGhlcmUsIGVtaXQgaW5zbiBiZWZvcmUgaXQgbXVzdCBiZSBmaXhlZCAqL1xuJiM0MztcbiYjNDM7XHRlbWl0X2FkZGkoUlZfUkVHX1NQLCBSVl9SRUdfU1AsIC1zdGFja19hZGp1c3QsIGN0eCk7XG4mIzQzO1xuJiM0MztcdGlmIChzZWVuX3JlZyhSVl9SRUdfUkEsIGN0eCkpIHtcbiYjNDM7XHRcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19SQSwgY3R4KTtcbiYjNDM7XHRcdHN0b3JlX29mZnNldCAtPSA4O1xuJiM0MztcdH1cbiYjNDM7XHRlbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfRlAsIGN0eCk7XG4mIzQzO1x0c3RvcmVfb2Zmc2V0IC09IDg7XG4mIzQzO1x0aWYgKHNlZW5fcmVnKFJWX1JFR19TMSwgY3R4KSkge1xuJiM0MztcdFx0ZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX1MxLCBjdHgpO1xuJiM0MztcdFx0c3RvcmVfb2Zmc2V0IC09IDg7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChzZWVuX3JlZyhSVl9SRUdfUzIsIGN0eCkpIHtcbiYjNDM7XHRcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19TMiwgY3R4KTtcbiYjNDM7XHRcdHN0b3JlX29mZnNldCAtPSA4O1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1MzLCBjdHgpKSB7XG4mIzQzO1x0XHRlbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfUzMsIGN0eCk7XG4mIzQzO1x0XHRzdG9yZV9vZmZzZXQgLT0gODtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKHNlZW5fcmVnKFJWX1JFR19TNCwgY3R4KSkge1xuJiM0MztcdFx0ZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX1M0LCBjdHgpO1xuJiM0MztcdFx0c3RvcmVfb2Zmc2V0IC09IDg7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChzZWVuX3JlZyhSVl9SRUdfUzUsIGN0eCkpIHtcbiYjNDM7XHRcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19TNSwgY3R4KTtcbiYjNDM7XHRcdHN0b3JlX29mZnNldCAtPSA4O1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoY3R4LVx1MDAzZWFyZW5hX3ZtX3N0YXJ0KSB7XG4mIzQzO1x0XHRlbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfQVJFTkEsIGN0eCk7XG4mIzQzO1x0XHRzdG9yZV9vZmZzZXQgLT0gODtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIHN0b3JlIFRDQyBmcm9tIFJWX1JFR19UQ0MgdG8gc3RhY2sgKi9cbiYjNDM7XHRlbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfVENDLCBjdHgpO1xuJiM0MztcdGN0eC1cdTAwM2V0Y2Nfb2Zmc2V0ID0gc3RvcmVfb2Zmc2V0O1xuJiM0MztcbiYjNDM7XHRlbWl0X2FkZGkoUlZfUkVHX0ZQLCBSVl9SRUdfU1AsIHN0YWNrX2FkanVzdCwgY3R4KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZW1pdF9ub3JtYWxfcmVzdG9yZShzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCwgaW50IHN0YWNrX2FkanVzdClcbiB7XG4tXHRpbnQgc3RhY2tfYWRqdXN0ID0gY3R4LVx1MDAzZXN0YWNrX3NpemUsIHN0b3JlX29mZnNldCA9IHN0YWNrX2FkanVzdCAtIDg7XG4mIzQzO1x0aW50IHN0b3JlX29mZnNldCA9IHN0YWNrX2FkanVzdCAtIDg7XG4gXG4gXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1JBLCBjdHgpKSB7XG4gXHRcdGVtaXRfbGQoUlZfUkVHX1JBLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19TUCwgY3R4KTtcbkBAIC0yMzUsNiAmIzQzOzMzMyw2OSBAQCBzdGF0aWMgdm9pZCBfX2J1aWxkX2VwaWxvZ3VlKGJvb2wgaXNfdGFpbF9jYWxsLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eClcbiBcbiBcdC8qIHJlc3RvcmUgVENDIGZyb20gc3RhY2sgdG8gUlZfUkVHX1RDQyAqL1xuIFx0ZW1pdF9sZChSVl9SRUdfVENDLCBjdHgtXHUwMDNldGNjX29mZnNldCwgUlZfUkVHX1NQLCBjdHgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBpc19leGNlcHRpb25fcHJvZyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcHJvZy1cdTAwM2VhdXgtXHUwMDNlZXhjZXB0aW9uX2JvdW5kYXJ5IHx8IHByb2ctXHUwMDNlYXV4LVx1MDAzZWV4Y2VwdGlvbl9jYjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZW1pdF9leGNlcHRpb25fYm91bmRhcnlfcHJvbG9ndWUoc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXG4mIzQzO1x0XHRcdFx0XHQgICAgIGludCBzdGFja19hZGp1c3QpXG4mIzQzO3tcbiYjNDM7XHRpbnQgc3RvcmVfb2Zmc2V0ID0gc3RhY2tfYWRqdXN0IC0gODtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0ZW1pdF9hZGRpKFJWX1JFR19TUCwgUlZfUkVHX1NQLCAtc3RhY2tfYWRqdXN0LCBjdHgpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocnZfZXhjZXB0aW9uX2NzYXZlX3JlZ3MpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0ZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgcnZfZXhjZXB0aW9uX2NzYXZlX3JlZ3NbaV0sIGN0eCk7XG4mIzQzO1x0XHRzdG9yZV9vZmZzZXQgLT0gODtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIHN0b3JlIFRDQyBmcm9tIFJWX1JFR19UQ0MgdG8gc3RhY2sgKi9cbiYjNDM7XHRlbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfVENDLCBjdHgpO1xuJiM0MztcdGN0eC1cdTAwM2V0Y2Nfb2Zmc2V0ID0gc3RvcmVfb2Zmc2V0O1xuJiM0MztcbiYjNDM7XHRlbWl0X2FkZGkoUlZfUkVHX0ZQLCBSVl9SRUdfU1AsIHN0YWNrX2FkanVzdCwgY3R4KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogcmV1c2VzIHRoZSBib3VuZGFyeSBwcm9ncmFtJiMzOTtzIGZyYW1lLCB3aG9zZSBmcmFtZSBwb2ludGVyXG4mIzQzOyAqIGlzIHBhc3NlZCBpbiBhMiAoc2luY2UgaXQmIzM5O3MgdGhlIHRoaXJkIGFyZ3VtZW50IGZyb20gYnBmX3Rocm93KCkpLlxuJiM0MzsgKiBTZXR0aW5nIFNQID0gRlAgLSBzdGFja19hZGp1c3QgbGluZXMgdGhlIGVwaWxvZ3VlJiMzOTtzIGxvYWRzIHVwIHdpdGhcbiYjNDM7ICogdGhlIHJlZ2lzdGVycyB0aGUgYm91bmRhcnkgc2F2ZWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBlbWl0X2V4Y2VwdGlvbl9jYl9wcm9sb2d1ZShzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcbiYjNDM7XHRcdFx0XHQgICAgICAgaW50IHN0YWNrX2FkanVzdClcbiYjNDM7e1xuJiM0MztcdGVtaXRfbXYoUlZfUkVHX0ZQLCBSVl9SRUdfQTIsIGN0eCk7XG4mIzQzO1x0ZW1pdF9hZGRpKFJWX1JFR19TUCwgUlZfUkVHX0ZQLCAtc3RhY2tfYWRqdXN0LCBjdHgpO1xuJiM0MztcdGN0eC1cdTAwM2V0Y2Nfb2Zmc2V0ID0gc3RhY2tfYWRqdXN0IC0gOCAtIEFSUkFZX1NJWkUocnZfZXhjZXB0aW9uX2NzYXZlX3JlZ3MpICogODtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogVXNlZCBieSBib3RoIHRoZSBib3VuZGFyeSBwcm9ncmFtIGFuZCB0aGUgZXhjZXB0aW9uIGNhbGxiYWNrIGFsaWtlLCBzaW5jZSB0aGVcbiYjNDM7ICogY2FsbGJhY2sgcnVucyBvbiB0aGUgYm91bmRhcnkmIzM5O3MgZnJhbWUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBlbWl0X2V4Y2VwdGlvbl9yZXN0b3JlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LCBpbnQgc3RhY2tfYWRqdXN0KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHN0b3JlX29mZnNldCA9IHN0YWNrX2FkanVzdCAtIDg7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocnZfZXhjZXB0aW9uX2NzYXZlX3JlZ3MpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0ZW1pdF9sZChydl9leGNlcHRpb25fY3NhdmVfcmVnc1tpXSwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfU1AsIGN0eCk7XG4mIzQzO1x0XHRzdG9yZV9vZmZzZXQgLT0gODtcbiYjNDM7XHR9XG4mIzQzO1x0LyogcmVzdG9yZSBUQ0MgZnJvbSBzdGFjayB0byBSVl9SRUdfVENDICovXG4mIzQzO1x0ZW1pdF9sZChSVl9SRUdfVENDLCBjdHgtXHUwMDNldGNjX29mZnNldCwgUlZfUkVHX1NQLCBjdHgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBfX2J1aWxkX2VwaWxvZ3VlKGJvb2wgaXNfdGFpbF9jYWxsLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eClcbiYjNDM7e1xuJiM0MztcdGludCBzdGFja19hZGp1c3QgPSBjdHgtXHUwMDNlc3RhY2tfc2l6ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKGlzX2V4Y2VwdGlvbl9wcm9nKGN0eC1cdTAwM2Vwcm9nKSlcbiYjNDM7XHRcdGVtaXRfZXhjZXB0aW9uX3Jlc3RvcmUoY3R4LCBzdGFja19hZGp1c3QpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGVtaXRfbm9ybWFsX3Jlc3RvcmUoY3R4LCBzdGFja19hZGp1c3QpO1xuIFxuIFx0ZW1pdF9hZGRpKFJWX1JFR19TUCwgUlZfUkVHX1NQLCBzdGFja19hZGp1c3QsIGN0eCk7XG4gXHQvKiBTZXQgcmV0dXJuIHZhbHVlLiAqL1xuQEAgLTIwMDQsMzYgJiM0MzsyMTY1LDIzIEBAIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGV4Y2VwdGlvbl9zdGFja19hZGp1c3Qodm9pZClcbiYjNDM7e1xuJiM0MztcdGludCBzdGFja19hZGp1c3QgPSAwO1xuJiM0MztcbiYjNDM7XHRzdGFja19hZGp1c3QgJiM0Mzs9IDg7IC8qIFJWX1JFR19UQ0MgKi9cbiYjNDM7XHRzdGFja19hZGp1c3QgJiM0Mzs9IEFSUkFZX1NJWkUocnZfZXhjZXB0aW9uX2NzYXZlX3JlZ3MpICogODtcbiYjNDM7XHRyZXR1cm4gcm91bmRfdXAoc3RhY2tfYWRqdXN0LCBTVEFDS19BTElHTik7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCBicGZfaml0X2J1aWxkX3Byb2xvZ3VlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LCBib29sIGlzX3N1YnByb2cpXG4ge1xuLVx0aW50IGksIHN0YWNrX2FkanVzdCA9IDAsIHN0b3JlX29mZnNldCwgYnBmX3N0YWNrX2FkanVzdDtcbiYjNDM7XHRpbnQgaSwgc3RhY2tfYWRqdXN0LCBicGZfc3RhY2tfYWRqdXN0O1xuIFxuIFx0YnBmX3N0YWNrX2FkanVzdCA9IHJvdW5kX3VwKGN0eC1cdTAwM2Vwcm9nLVx1MDAzZWF1eC1cdTAwM2VzdGFja19kZXB0aCwgU1RBQ0tfQUxJR04pO1xuIFx0aWYgKGJwZl9zdGFja19hZGp1c3QpXG4gXHRcdG1hcmtfZnAoY3R4KTtcbiBcbi1cdGlmIChzZWVuX3JlZyhSVl9SRUdfUkEsIGN0eCkpXG4tXHRcdHN0YWNrX2FkanVzdCAmIzQzOz0gODtcbi1cdHN0YWNrX2FkanVzdCAmIzQzOz0gODsgLyogUlZfUkVHX0ZQICovXG4tXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1MxLCBjdHgpKVxuLVx0XHRzdGFja19hZGp1c3QgJiM0Mzs9IDg7XG4tXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1MyLCBjdHgpKVxuLVx0XHRzdGFja19hZGp1c3QgJiM0Mzs9IDg7XG4tXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1MzLCBjdHgpKVxuLVx0XHRzdGFja19hZGp1c3QgJiM0Mzs9IDg7XG4tXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1M0LCBjdHgpKVxuLVx0XHRzdGFja19hZGp1c3QgJiM0Mzs9IDg7XG4tXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1M1LCBjdHgpKVxuLVx0XHRzdGFja19hZGp1c3QgJiM0Mzs9IDg7XG4tXHRpZiAoY3R4LVx1MDAzZWFyZW5hX3ZtX3N0YXJ0KVxuLVx0XHRzdGFja19hZGp1c3QgJiM0Mzs9IDg7XG4tXHRzdGFja19hZGp1c3QgJiM0Mzs9IDg7IC8qIFJWX1JFR19UQ0MgKi9cbi1cbi1cdHN0YWNrX2FkanVzdCA9IHJvdW5kX3VwKHN0YWNrX2FkanVzdCwgU1RBQ0tfQUxJR04pO1xuLVx0c3RhY2tfYWRqdXN0ICYjNDM7PSBicGZfc3RhY2tfYWRqdXN0O1xuLVxuLVx0c3RvcmVfb2Zmc2V0ID0gc3RhY2tfYWRqdXN0IC0gODtcbi1cbiBcdC8qIGVtaXQga2NmaSB0eXBlIHByZWFtYmxlIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgIGZpcnN0IGluc24gKi9cbiBcdGVtaXRfa2NmaShpc19zdWJwcm9nID8gY2ZpX2JwZl9zdWJwcm9nX2hhc2ggOiBjZmlfYnBmX2hhc2gsIGN0eCk7XG4gXG5AQCAtMjA0Niw0NyAmIzQzOzIxOTQsMTggQEAgdm9pZCBicGZfaml0X2J1aWxkX3Byb2xvZ3VlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LCBib29sIGlzX3N1YnByb2cpXG4gXHRpZiAoIWlzX3N1YnByb2cpXG4gXHRcdGVtaXQocnZfYWRkaShSVl9SRUdfVENDLCBSVl9SRUdfWkVSTywgTUFYX1RBSUxfQ0FMTF9DTlQpLCBjdHgpO1xuIFxuLVx0LyogdGFpbGNhbGwgc3RhcnRzIGhlcmUsIGVtaXQgaW5zbiBiZWZvcmUgaXQgbXVzdCBiZSBmaXhlZCAqL1xuJiM0MztcdGlmIChpc19leGNlcHRpb25fcHJvZyhjdHgtXHUwMDNlcHJvZykpIHtcbiYjNDM7XHRcdHN0YWNrX2FkanVzdCA9IGV4Y2VwdGlvbl9zdGFja19hZGp1c3QoKSAmIzQzOyBicGZfc3RhY2tfYWRqdXN0O1xuIFxuLVx0ZW1pdF9hZGRpKFJWX1JFR19TUCwgUlZfUkVHX1NQLCAtc3RhY2tfYWRqdXN0LCBjdHgpO1xuLVxuLVx0aWYgKHNlZW5fcmVnKFJWX1JFR19SQSwgY3R4KSkge1xuLVx0XHRlbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfUkEsIGN0eCk7XG4tXHRcdHN0b3JlX29mZnNldCAtPSA4O1xuLVx0fVxuLVx0ZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX0ZQLCBjdHgpO1xuLVx0c3RvcmVfb2Zmc2V0IC09IDg7XG4tXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1MxLCBjdHgpKSB7XG4tXHRcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19TMSwgY3R4KTtcbi1cdFx0c3RvcmVfb2Zmc2V0IC09IDg7XG4tXHR9XG4tXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1MyLCBjdHgpKSB7XG4tXHRcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19TMiwgY3R4KTtcbi1cdFx0c3RvcmVfb2Zmc2V0IC09IDg7XG4tXHR9XG4tXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1MzLCBjdHgpKSB7XG4tXHRcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19TMywgY3R4KTtcbi1cdFx0c3RvcmVfb2Zmc2V0IC09IDg7XG4tXHR9XG4tXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1M0LCBjdHgpKSB7XG4tXHRcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19TNCwgY3R4KTtcbi1cdFx0c3RvcmVfb2Zmc2V0IC09IDg7XG4tXHR9XG4tXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1M1LCBjdHgpKSB7XG4tXHRcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19TNSwgY3R4KTtcbi1cdFx0c3RvcmVfb2Zmc2V0IC09IDg7XG4tXHR9XG4tXHRpZiAoY3R4LVx1MDAzZWFyZW5hX3ZtX3N0YXJ0KSB7XG4tXHRcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19BUkVOQSwgY3R4KTtcbi1cdFx0c3RvcmVfb2Zmc2V0IC09IDg7XG4mIzQzO1x0XHRpZiAoY3R4LVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZWV4Y2VwdGlvbl9jYilcbiYjNDM7XHRcdFx0ZW1pdF9leGNlcHRpb25fY2JfcHJvbG9ndWUoY3R4LCBzdGFja19hZGp1c3QpO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRlbWl0X2V4Y2VwdGlvbl9ib3VuZGFyeV9wcm9sb2d1ZShjdHgsIHN0YWNrX2FkanVzdCk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHN0YWNrX2FkanVzdCA9IG5vcm1hbF9zdGFja19hZGp1c3QoY3R4KSAmIzQzOyBicGZfc3RhY2tfYWRqdXN0O1xuJiM0MztcdFx0ZW1pdF9ub3JtYWxfcHJvbG9ndWUoY3R4LCBzdGFja19hZGp1c3QpO1xuIFx0fVxuIFxuLVx0Lyogc3RvcmUgVENDIGZyb20gUlZfUkVHX1RDQyB0byBzdGFjayAqL1xuLVx0ZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX1RDQywgY3R4KTtcbi1cdGN0eC1cdTAwM2V0Y2Nfb2Zmc2V0ID0gc3RvcmVfb2Zmc2V0O1xuLVxuLVx0ZW1pdF9hZGRpKFJWX1JFR19GUCwgUlZfUkVHX1NQLCBzdGFja19hZGp1c3QsIGN0eCk7XG4tXG4gXHRpZiAoYnBmX3N0YWNrX2FkanVzdClcbiBcdFx0ZW1pdF9hZGRpKFJWX1JFR19TNSwgUlZfUkVHX1NQLCBicGZfc3RhY2tfYWRqdXN0LCBjdHgpO1xuIFxuQEAgLTIxNjEsMyAmIzQzOzIyODAsMTIgQEAgYm9vbCBicGZfaml0X3N1cHBvcnRzX3N1YnByb2dfdGFpbGNhbGxzKHZvaWQpXG4ge1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuJiM0MztcbiYjNDM7Ym9vbCBicGZfaml0X3N1cHBvcnRzX2V4Y2VwdGlvbnModm9pZClcbiYjNDM7e1xuJiM0MztcdC8qIGJwZl90aHJvdygpIHVud2luZHMgYnkgd2Fsa2luZyB0aGUgZnJhbWUtcG9pbnRlciBjaGFpbiBmcm9tIGluc2lkZVxuJiM0MztcdCAqIHRoZSBrZXJuZWwgYmFjayBpbnRvIHRoZSBCUEYgZnJhbWVzIChzZWUgYXJjaF9icGZfc3RhY2tfd2FsaygpKSwgc29cbiYjNDM7XHQgKiBleGNlcHRpb25zIHJlcXVpcmUgdGhlIGZyYW1lLXBvaW50ZXIgdW53aW5kZXIgdG8gYmUgZW5hYmxlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfRlJBTUVfUE9JTlRFUik7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvREVOWUxJU1QucmlzY3Y2NCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9ERU5ZTElTVC5yaXNjdjY0XG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IGNhMWJlYWU3ZmU4ZjEwLi4wMDAwMDAwMDAwMDAwMFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL0RFTllMSVNULnJpc2N2NjRcbiYjNDM7JiM0MzsmIzQzOyAvZGV2L251bGxcbkBAIC0xLDIgJiM0MzswLDAgQEBcbi0jIHJpc2N2NjQgZGVueSBsaXN0IGZvciBCUEYgQ0kgYW5kIGxvY2FsIHZtdGVzdFxuLWV4Y2VwdGlvbnNcdFx0XHRcdFx0IyBKSVQgZG9lcyBub3Qgc3VwcG9ydCBleGNlcHRpb25zXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTU6MDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7RlJBTUVfUE9JTlRFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FyY2hfYnBmX3N0YWNrX3dhbGsmIzM0OywKICAgICYjMzQ7YnBmX2ppdF9idWlsZF9wcm9sb2d1ZSYjMzQ7LAogICAgJiMzNDticGZfaml0X3N1cHBvcnRzX2V4Y2VwdGlvbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBCUEYgZXhjZXB0aW9uIHN1cHBvcnQgdG8gdGhlIFJJU0MtViBhcmNoaXRlY3R1cmUuIEl0IG1vZGlmaWVzIHRoZSBCUEYgSklUIGNvbXBpbGVyIHRvIGVtaXQgZXhjZXB0aW9uIHByb2xvZ3VlcyBhbmQgZXBpbG9ndWVzLCBhbmQgaW1wbGVtZW50cyBgYXJjaF9icGZfc3RhY2tfd2Fsa2AgZm9yIHVud2luZGluZyB0aGUgc3RhY2sgZHVyaW5nIEJQRiBleGNlcHRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBrZXJuZWwgYW5kIEJQRiBKSVQgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4N2E0NzYyYWQ5MzNiNGM5MGM4YTlkNzE3ZTA5M2ZmMjg2ZWRhZTczCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMjMgMTU6MDY6MzAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3N0YWNrdHJhY2UuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3RhY2t0cmFjZS5oCmluZGV4IGIxNDk1YTdlMDZjZTY5Li5mZDFmZjA0YTA0MGU5NSAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9zdGFja3RyYWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9zdGFja3RyYWNlLmgKQEAgLTExLDggJiM0MzsxMSwxMSBAQCBzdHJ1Y3Qgc3RhY2tmcmFtZSB7CiAJdW5zaWduZWQgbG9uZyByYTsKIH07CiAKJiM0Mzt0eXBlZGVmIGJvb2wgKCp3YWxrX3N0YWNrZnJhbWVfZm4pKHZvaWQgKmFyZywgdW5zaWduZWQgbG9uZyBwYywKJiM0MzsJCQkJICAgdW5zaWduZWQgbG9uZyBzcCwgdW5zaWduZWQgbG9uZyBmcCk7CiYjNDM7CiBleHRlcm4gdm9pZCBub3RyYWNlIHdhbGtfc3RhY2tmcmFtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzLAotCQkJCSAgICBib29sICgqZm4pKHZvaWQgKiwgdW5zaWduZWQgbG9uZyksIHZvaWQgKmFyZyk7CiYjNDM7CQkJCSAgICB3YWxrX3N0YWNrZnJhbWVfZm4gZm4sIHZvaWQgKmFyZyk7CiBleHRlcm4gdm9pZCBkdW1wX2JhY2t0cmFjZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAogCQkJICAgY29uc3QgY2hhciAqbG9nbHZsKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rZXJuZWwvcGVyZl9jYWxsY2hhaW4uYyBiL2FyY2gvcmlzY3Yva2VybmVsL3BlcmZfY2FsbGNoYWluLmMKaW5kZXggYjQ2NWJjOWViODcwZWMuLjkzYTEyZDUzYWEyNmQ3IDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2tlcm5lbC9wZXJmX2NhbGxjaGFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva2VybmVsL3BlcmZfY2FsbGNoYWluLmMKQEAgLTIsNiAmIzQzOzIsNyBAQAogLyogQ29weXJpZ2h0IChDKSAyMDE5IEhhbmd6aG91IEMtU0tZIE1pY3Jvc3lzdGVtcyBjby4sbHRkLiAqLwogCiAjaW5jbHVkZSAmbHQ7bGludXgvcGVyZl9ldmVudC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zdGFja3RyYWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdWFjY2Vzcy5oJmd0OwogCiAjaW5jbHVkZSAmbHQ7YXNtL3N0YWNrdHJhY2UuaCZndDsKQEAgLTQ0LDUgJiM0Mzs0NSw1IEBAIHZvaWQgcGVyZl9jYWxsY2hhaW5fa2VybmVsKHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeV9jdHggKmVudHJ5LAogCQlyZXR1cm47CiAJfQogCi0Jd2Fsa19zdGFja2ZyYW1lKE5VTEwsIHJlZ3MsIGZpbGxfY2FsbGNoYWluLCBlbnRyeSk7CiYjNDM7CWFyY2hfc3RhY2tfd2FsayhmaWxsX2NhbGxjaGFpbiwgZW50cnksIGN1cnJlbnQsIHJlZ3MpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rZXJuZWwvc3RhY2t0cmFjZS5jIGIvYXJjaC9yaXNjdi9rZXJuZWwvc3RhY2t0cmFjZS5jCmluZGV4IGM3NTU1NDQ3MTQ5YmZlLi5jMGYyMzkzZTUxNjNjYiAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9rZXJuZWwvc3RhY2t0cmFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva2VybmVsL3N0YWNrdHJhY2UuYwpAQCAtNSw2ICYjNDM7NSw3IEBACiAgKi8KIAogI2luY2x1ZGUgJmx0O2xpbnV4L2V4cG9ydC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9maWx0ZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rYWxsc3ltcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvZGVidWcuaCZndDsKQEAgLTQ2LDcgJiM0Mzs0Nyw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGZwX2lzX3ZhbGlkKHVuc2lnbmVkIGxvbmcgZnAsIHVuc2lnbmVkIGxvbmcgc3ApCiB9CiAKIHZvaWQgbm90cmFjZSB3YWxrX3N0YWNrZnJhbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQkJCSAgICAgYm9vbCAoKmZuKSh2b2lkICosIHVuc2lnbmVkIGxvbmcpLCB2b2lkICphcmcpCiYjNDM7CQkJICAgICB3YWxrX3N0YWNrZnJhbWVfZm4gZm4sIHZvaWQgKmFyZykKIHsKIAl1bnNpZ25lZCBsb25nIGZwLCBzcCwgcGM7CiAJaW50IGdyYXBoX2lkeCA9IDA7CkBAIC03MSw3ICYjNDM7NzIsOSBAQCB2b2lkIG5vdHJhY2Ugd2Fsa19zdGFja2ZyYW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCiAJZm9yICg7OykgewogCQlzdHJ1Y3Qgc3RhY2tmcmFtZSAqZnJhbWU7CiAKLQkJaWYgKHVubGlrZWx5KCFfX2tlcm5lbF90ZXh0X2FkZHJlc3MocGMpIHx8IChsZXZlbCYjNDM7JiM0MzsgJmd0Oz0gMCAmYW1wOyZhbXA7ICFmbihhcmcsIHBjKSkpKQomIzQzOwkJLyogcGMgYmVsb25ncyB0byB0aGUgZnVuY3Rpb24gd2hvc2UgZnJhbWUgcG9pbnRlciBpcyBmcCAqLwomIzQzOwkJaWYgKHVubGlrZWx5KCFfX2tlcm5lbF90ZXh0X2FkZHJlc3MocGMpIHx8CiYjNDM7CQkJICAgICAobGV2ZWwmIzQzOyYjNDM7ICZndDs9IDAgJmFtcDsmYW1wOyAhZm4oYXJnLCBwYywgc3AsIGZwKSkpKQogCQkJYnJlYWs7CiAKIAkJaWYgKHVubGlrZWx5KCFmcF9pc192YWxpZChmcCwgc3ApKSkKQEAgLTkxLDcgJiM0Mzs5NCw3IEBAIHZvaWQgbm90cmFjZSB3YWxrX3N0YWNrZnJhbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKIAkJCQkJCSAgICZhbXA7ZnJhbWUtJmd0O3JhKTsKIAkJCWlmIChwYyAmZ3Q7PSAodW5zaWduZWQgbG9uZyloYW5kbGVfZXhjZXB0aW9uICZhbXA7JmFtcDsKIAkJCSAgICBwYyAmbHQ7ICh1bnNpZ25lZCBsb25nKSZhbXA7cmV0X2Zyb21fZXhjZXB0aW9uX2VuZCkgewotCQkJCWlmICh1bmxpa2VseSghZm4oYXJnLCBwYykpKQomIzQzOwkJCQlpZiAodW5saWtlbHkoIWZuKGFyZywgcGMsIHNwLCBmcCkpKQogCQkJCQlicmVhazsKIAogCQkJCXBjID0gKChzdHJ1Y3QgcHRfcmVncyAqKXNwKS0mZ3Q7ZXBjOwpAQCAtMTAyLDEwICYjNDM7MTA1LDM0IEBAIHZvaWQgbm90cmFjZSB3YWxrX3N0YWNrZnJhbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKIAl9CiB9CiAKJiM0MztzdHJ1Y3QgYnBmX3Vud2luZF9jb25zdW1lX2VudHJ5X2RhdGEgewomIzQzOwlib29sICgqY29uc3VtZV9lbnRyeSkodm9pZCAqY29va2llLCB1NjQgaXAsIHU2NCBzcCwgdTY0IGZwKTsKJiM0MzsJdm9pZCAqY29va2llOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgYnBmX3Vud2luZF9jb25zdW1lX2VudHJ5KHZvaWQgKmFyZywgdW5zaWduZWQgbG9uZyBwYywKJiM0MzsJCQkJICAgICB1bnNpZ25lZCBsb25nIHNwLCB1bnNpZ25lZCBsb25nIGZwKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl91bndpbmRfY29uc3VtZV9lbnRyeV9kYXRhICpkYXRhID0gYXJnOwomIzQzOwomIzQzOwlyZXR1cm4gZGF0YS0mZ3Q7Y29uc3VtZV9lbnRyeShkYXRhLSZndDtjb29raWUsIHBjLCBzcCwgZnApOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIG5vdHJhY2UgYXJjaF9icGZfc3RhY2tfd2Fsayhib29sICgqY29uc3VtZV9mbikodm9pZCAqY29va2llLCB1NjQgaXAsIHU2NCBzcCwgdTY0IGJwKSwKJiM0MzsJCQkJIHZvaWQgKmNvb2tpZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfdW53aW5kX2NvbnN1bWVfZW50cnlfZGF0YSBkYXRhID0gewomIzQzOwkJLmNvbnN1bWVfZW50cnkgPSBjb25zdW1lX2ZuLAomIzQzOwkJLmNvb2tpZSA9IGNvb2tpZSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJd2Fsa19zdGFja2ZyYW1lKGN1cnJlbnQsIE5VTEwsIGJwZl91bndpbmRfY29uc3VtZV9lbnRyeSwgJmFtcDtkYXRhKTsKJiM0Mzt9CiYjNDM7CiAjZWxzZSAvKiAhQ09ORklHX0ZSQU1FX1BPSU5URVIgKi8KIAogdm9pZCBub3RyYWNlIHdhbGtfc3RhY2tmcmFtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCi0Jc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGJvb2wgKCpmbikodm9pZCAqLCB1bnNpZ25lZCBsb25nKSwgdm9pZCAqYXJnKQomIzQzOwlzdHJ1Y3QgcHRfcmVncyAqcmVncywgd2Fsa19zdGFja2ZyYW1lX2ZuIGZuLCB2b2lkICphcmcpCiB7CiAJdW5zaWduZWQgbG9uZyBzcCwgcGM7CiAJdW5zaWduZWQgbG9uZyAqa3NwOwpAQCAtMTI3LDcgJiM0MzsxNTQsOCBAQCB2b2lkIG5vdHJhY2Ugd2Fsa19zdGFja2ZyYW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKIAogCWtzcCA9ICh1bnNpZ25lZCBsb25nICopc3A7CiAJd2hpbGUgKCFrc3RhY2tfZW5kKGtzcCkpIHsKLQkJaWYgKF9fa2VybmVsX3RleHRfYWRkcmVzcyhwYykgJmFtcDsmYW1wOyB1bmxpa2VseSghZm4oYXJnLCBwYykpKQomIzQzOwkJaWYgKF9fa2VybmVsX3RleHRfYWRkcmVzcyhwYykgJmFtcDsmYW1wOwomIzQzOwkJICAgIHVubGlrZWx5KCFmbihhcmcsIHBjLCAodW5zaWduZWQgbG9uZylrc3AsIDApKSkKIAkJCWJyZWFrOwogCQlwYyA9IFJFQURfT05DRV9OT0NIRUNLKCprc3AmIzQzOyYjNDM7KTsKIAl9CkBAIC0xMzUsNyAmIzQzOzE2Myw4IEBAIHZvaWQgbm90cmFjZSB3YWxrX3N0YWNrZnJhbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAogCiAjZW5kaWYgLyogQ09ORklHX0ZSQU1FX1BPSU5URVIgKi8KIAotc3RhdGljIGJvb2wgcHJpbnRfdHJhY2VfYWRkcmVzcyh2b2lkICphcmcsIHVuc2lnbmVkIGxvbmcgcGMpCiYjNDM7c3RhdGljIGJvb2wgcHJpbnRfdHJhY2VfYWRkcmVzcyh2b2lkICphcmcsIHVuc2lnbmVkIGxvbmcgcGMsCiYjNDM7CQkJCXVuc2lnbmVkIGxvbmcgc3AsIHVuc2lnbmVkIGxvbmcgZnApCiB7CiAJY29uc3QgY2hhciAqbG9nbHZsID0gYXJnOwogCkBAIC0xNTUsNyAmIzQzOzE4NCw4IEBAIHZvaWQgc2hvd19zdGFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHVuc2lnbmVkIGxvbmcgKnNwLCBjb25zdCBjaGFyICpsb2dsdmwpCiAJZHVtcF9iYWNrdHJhY2UoTlVMTCwgdGFzaywgbG9nbHZsKTsKIH0KIAotc3RhdGljIGJvb2wgc2F2ZV93Y2hhbih2b2lkICphcmcsIHVuc2lnbmVkIGxvbmcgcGMpCiYjNDM7c3RhdGljIGJvb2wgc2F2ZV93Y2hhbih2b2lkICphcmcsIHVuc2lnbmVkIGxvbmcgcGMsCiYjNDM7CQkgICAgICAgdW5zaWduZWQgbG9uZyBzcCwgdW5zaWduZWQgbG9uZyBmcCkKIHsKIAlpZiAoIWluX3NjaGVkX2Z1bmN0aW9ucyhwYykpIHsKIAkJdW5zaWduZWQgbG9uZyAqcCA9IGFyZzsKQEAgLTE3NiwxMCAmIzQzOzIwNiwyOCBAQCB1bnNpZ25lZCBsb25nIF9fZ2V0X3djaGFuKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIAlyZXR1cm4gcGM7CiB9CiAKJiM0MztzdHJ1Y3Qgd2Fsa19zdGFja2ZyYW1lX2NvbnN1bWVfZW50cnlfZGF0YSB7CiYjNDM7CXN0YWNrX3RyYWNlX2NvbnN1bWVfZm4gY29uc3VtZV9lbnRyeTsKJiM0MzsJdm9pZCAqY29va2llOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgd2Fsa19zdGFja2ZyYW1lX2NvbnN1bWVfZW50cnkodm9pZCAqYXJnLCB1bnNpZ25lZCBsb25nIHBjLAomIzQzOwkJCQkJICB1bnNpZ25lZCBsb25nIHNwLCB1bnNpZ25lZCBsb25nIGZwKQomIzQzO3sKJiM0MzsJc3RydWN0IHdhbGtfc3RhY2tmcmFtZV9jb25zdW1lX2VudHJ5X2RhdGEgKmRhdGEgPSBhcmc7CiYjNDM7CiYjNDM7CXJldHVybiBkYXRhLSZndDtjb25zdW1lX2VudHJ5KGRhdGEtJmd0O2Nvb2tpZSwgcGMpOwomIzQzO30KJiM0MzsKIG5vaW5saW5lIG5vaW5zdHIgdm9pZCBhcmNoX3N0YWNrX3dhbGsoc3RhY2tfdHJhY2VfY29uc3VtZV9mbiBjb25zdW1lX2VudHJ5LCB2b2lkICpjb29raWUsCiAJCSAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQl3YWxrX3N0YWNrZnJhbWUodGFzaywgcmVncywgY29uc3VtZV9lbnRyeSwgY29va2llKTsKJiM0MzsJc3RydWN0IHdhbGtfc3RhY2tmcmFtZV9jb25zdW1lX2VudHJ5X2RhdGEgZGF0YSA9IHsKJiM0MzsJCS5jb25zdW1lX2VudHJ5ID0gY29uc3VtZV9lbnRyeSwKJiM0MzsJCS5jb29raWUgPSBjb29raWUsCiYjNDM7CX07CiYjNDM7CiYjNDM7CXdhbGtfc3RhY2tmcmFtZSh0YXNrLCByZWdzLCB3YWxrX3N0YWNrZnJhbWVfY29uc3VtZV9lbnRyeSwgJmFtcDtkYXRhKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jCmluZGV4IGFkMDg5YTlhNGVhOWFjLi5lMGMyZjczYmM2NDZhMyAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jCkBAIC01Niw2ICYjNDM7NTYsMjkgQEAgc3RhdGljIGNvbnN0IGludCBwdF9yZWdtYXBbXSA9IHsKIAlbUlZfUkVHX1QwXSA9IG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCB0MCksCiB9OwogCiYjNDM7LyogRnVsbCBzZXQgb2YgUklTQy1WIGNhbGxlZS1zYXZlZCBHUCByZWdpc3RlcnMgKHJhLCBzMC1zMTEpIHNhdmVkIGJ5IGEgcHJvZ3JhbQomIzQzOyAqIGFjdGluZyBhcyBhbiBleGNlcHRpb24gYm91bmRhcnksIGluIHRoZSBvcmRlciB0aGV5IGFyZSBzdG9yZWQgb24gdGhlIHN0YWNrLgomIzQzOyAqIFJBIGFuZCBGUCBjb21lIGZpcnN0IHNvIHRoZSBzYXZlZCByYS9mcCBwYWlyIGZvcm1zIGEgdmFsaWQgc3RhY2tmcmFtZSByZWNvcmQKJiM0MzsgKiBhdCBbRlAtOF0vW0ZQLTE2XSBmb3IgdGhlIHVud2luZGVyLiBUaGUgZXhjZXB0aW9uIGNhbGxiYWNrIHJldXNlcyB0aGUKJiM0MzsgKiBib3VuZGFyeSBwcm9ncmFtJiMzOTtzIGZyYW1lIGFuZCByZXN0b3JlcyB0aGlzIHNhbWUgc2V0IGluIGl0cyBlcGlsb2d1ZSwgc28gYm90aAomIzQzOyAqIHBhdGhzIG11c3QgYWdyZWUgb24gdGhlIGNvbnRlbnRzIGFuZCBvcmRlcmluZyBvZiB0aGlzIGxpc3QuCiYjNDM7ICovCiYjNDM7c3RhdGljIGNvbnN0IGludCBydl9leGNlcHRpb25fY3NhdmVfcmVnc1tdID0gewomIzQzOwlSVl9SRUdfUkEsCiYjNDM7CVJWX1JFR19GUCwKJiM0MzsJUlZfUkVHX1MxLAomIzQzOwlSVl9SRUdfUzIsCiYjNDM7CVJWX1JFR19TMywKJiM0MzsJUlZfUkVHX1M0LAomIzQzOwlSVl9SRUdfUzUsCiYjNDM7CVJWX1JFR19TNiwKJiM0MzsJUlZfUkVHX1M3LAomIzQzOwlSVl9SRUdfUzgsCiYjNDM7CVJWX1JFR19TOSwKJiM0MzsJUlZfUkVHX1MxMCwKJiM0MzsJUlZfUkVHX1MxMSwKJiM0Mzt9OwomIzQzOwogZW51bSB7CiAJUlZfQ1RYX0ZfU0VFTl9DQUxMID0JCVJWX1JFR19SQSwKIAlSVl9DVFhfRl9TRUVOX1MxID0JCVJWX1JFR19TMSwKQEAgLTE5OCw5ICYjNDM7MjIxLDg0IEBAIHN0YXRpYyB2b2lkIGVtaXRfaW1tKHU4IHJkLCBzNjQgdmFsLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCkKIAkJZW1pdF9hZGRpKHJkLCByZCwgbG93ZXIsIGN0eCk7CiB9CiAKLXN0YXRpYyB2b2lkIF9fYnVpbGRfZXBpbG9ndWUoYm9vbCBpc190YWlsX2NhbGwsIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KQomIzQzOy8qIFN0YWNrIHNwYWNlIGZvciB0aGUgY2FsbGVlLXNhdmVkIHJlZ2lzdGVycyBhIG5vcm1hbCBwcm9ncmFtIHNwaWxscywKJiM0MzsgKiBleGNsdWRpbmcgdGhlIEJQRiBzdGFjayBpdHNlbGYuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBub3JtYWxfc3RhY2tfYWRqdXN0KHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KQomIzQzO3sKJiM0MzsJaW50IHN0YWNrX2FkanVzdCA9IDA7CiYjNDM7CiYjNDM7CWlmIChzZWVuX3JlZyhSVl9SRUdfUkEsIGN0eCkpCiYjNDM7CQlzdGFja19hZGp1c3QgJiM0Mzs9IDg7CiYjNDM7CXN0YWNrX2FkanVzdCAmIzQzOz0gODsgLyogUlZfUkVHX0ZQICovCiYjNDM7CWlmIChzZWVuX3JlZyhSVl9SRUdfUzEsIGN0eCkpCiYjNDM7CQlzdGFja19hZGp1c3QgJiM0Mzs9IDg7CiYjNDM7CWlmIChzZWVuX3JlZyhSVl9SRUdfUzIsIGN0eCkpCiYjNDM7CQlzdGFja19hZGp1c3QgJiM0Mzs9IDg7CiYjNDM7CWlmIChzZWVuX3JlZyhSVl9SRUdfUzMsIGN0eCkpCiYjNDM7CQlzdGFja19hZGp1c3QgJiM0Mzs9IDg7CiYjNDM7CWlmIChzZWVuX3JlZyhSVl9SRUdfUzQsIGN0eCkpCiYjNDM7CQlzdGFja19hZGp1c3QgJiM0Mzs9IDg7CiYjNDM7CWlmIChzZWVuX3JlZyhSVl9SRUdfUzUsIGN0eCkpCiYjNDM7CQlzdGFja19hZGp1c3QgJiM0Mzs9IDg7CiYjNDM7CWlmIChjdHgtJmd0O2FyZW5hX3ZtX3N0YXJ0KQomIzQzOwkJc3RhY2tfYWRqdXN0ICYjNDM7PSA4OwomIzQzOwlzdGFja19hZGp1c3QgJiM0Mzs9IDg7IC8qIFJWX1JFR19UQ0MgKi8KJiM0MzsKJiM0MzsJcmV0dXJuIHJvdW5kX3VwKHN0YWNrX2FkanVzdCwgU1RBQ0tfQUxJR04pOwomIzQzO30KJiM0MzsKJiM0MzsvKiBBbGxvY2F0ZSB0aGUgZnJhbWUgYW5kIHNhdmUgdGhlIGNhbGxlZS1zYXZlZCByZWdpc3RlcnMgdGhlIHByb2dyYW0KJiM0MzsgKiBhY3R1YWxseSBjbG9iYmVycywgdGhlbiBwb2ludCBGUCBhdCB0aGUgZnJhbWUgdG9wLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGVtaXRfbm9ybWFsX3Byb2xvZ3VlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LCBpbnQgc3RhY2tfYWRqdXN0KQomIzQzO3sKJiM0MzsJaW50IHN0b3JlX29mZnNldCA9IHN0YWNrX2FkanVzdCAtIDg7CiYjNDM7CS8qIHRhaWxjYWxsIHN0YXJ0cyBoZXJlLCBlbWl0IGluc24gYmVmb3JlIGl0IG11c3QgYmUgZml4ZWQgKi8KJiM0MzsKJiM0MzsJZW1pdF9hZGRpKFJWX1JFR19TUCwgUlZfUkVHX1NQLCAtc3RhY2tfYWRqdXN0LCBjdHgpOwomIzQzOwomIzQzOwlpZiAoc2Vlbl9yZWcoUlZfUkVHX1JBLCBjdHgpKSB7CiYjNDM7CQllbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfUkEsIGN0eCk7CiYjNDM7CQlzdG9yZV9vZmZzZXQgLT0gODsKJiM0MzsJfQomIzQzOwllbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfRlAsIGN0eCk7CiYjNDM7CXN0b3JlX29mZnNldCAtPSA4OwomIzQzOwlpZiAoc2Vlbl9yZWcoUlZfUkVHX1MxLCBjdHgpKSB7CiYjNDM7CQllbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfUzEsIGN0eCk7CiYjNDM7CQlzdG9yZV9vZmZzZXQgLT0gODsKJiM0MzsJfQomIzQzOwlpZiAoc2Vlbl9yZWcoUlZfUkVHX1MyLCBjdHgpKSB7CiYjNDM7CQllbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfUzIsIGN0eCk7CiYjNDM7CQlzdG9yZV9vZmZzZXQgLT0gODsKJiM0MzsJfQomIzQzOwlpZiAoc2Vlbl9yZWcoUlZfUkVHX1MzLCBjdHgpKSB7CiYjNDM7CQllbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfUzMsIGN0eCk7CiYjNDM7CQlzdG9yZV9vZmZzZXQgLT0gODsKJiM0MzsJfQomIzQzOwlpZiAoc2Vlbl9yZWcoUlZfUkVHX1M0LCBjdHgpKSB7CiYjNDM7CQllbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfUzQsIGN0eCk7CiYjNDM7CQlzdG9yZV9vZmZzZXQgLT0gODsKJiM0MzsJfQomIzQzOwlpZiAoc2Vlbl9yZWcoUlZfUkVHX1M1LCBjdHgpKSB7CiYjNDM7CQllbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfUzUsIGN0eCk7CiYjNDM7CQlzdG9yZV9vZmZzZXQgLT0gODsKJiM0MzsJfQomIzQzOwlpZiAoY3R4LSZndDthcmVuYV92bV9zdGFydCkgewomIzQzOwkJZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX0FSRU5BLCBjdHgpOwomIzQzOwkJc3RvcmVfb2Zmc2V0IC09IDg7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogc3RvcmUgVENDIGZyb20gUlZfUkVHX1RDQyB0byBzdGFjayAqLwomIzQzOwllbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfVENDLCBjdHgpOwomIzQzOwljdHgtJmd0O3RjY19vZmZzZXQgPSBzdG9yZV9vZmZzZXQ7CiYjNDM7CiYjNDM7CWVtaXRfYWRkaShSVl9SRUdfRlAsIFJWX1JFR19TUCwgc3RhY2tfYWRqdXN0LCBjdHgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBlbWl0X25vcm1hbF9yZXN0b3JlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LCBpbnQgc3RhY2tfYWRqdXN0KQogewotCWludCBzdGFja19hZGp1c3QgPSBjdHgtJmd0O3N0YWNrX3NpemUsIHN0b3JlX29mZnNldCA9IHN0YWNrX2FkanVzdCAtIDg7CiYjNDM7CWludCBzdG9yZV9vZmZzZXQgPSBzdGFja19hZGp1c3QgLSA4OwogCiAJaWYgKHNlZW5fcmVnKFJWX1JFR19SQSwgY3R4KSkgewogCQllbWl0X2xkKFJWX1JFR19SQSwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfU1AsIGN0eCk7CkBAIC0yMzUsNiAmIzQzOzMzMyw2OSBAQCBzdGF0aWMgdm9pZCBfX2J1aWxkX2VwaWxvZ3VlKGJvb2wgaXNfdGFpbF9jYWxsLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCkKIAogCS8qIHJlc3RvcmUgVENDIGZyb20gc3RhY2sgdG8gUlZfUkVHX1RDQyAqLwogCWVtaXRfbGQoUlZfUkVHX1RDQywgY3R4LSZndDt0Y2Nfb2Zmc2V0LCBSVl9SRUdfU1AsIGN0eCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIGlzX2V4Y2VwdGlvbl9wcm9nKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZykKJiM0Mzt7CiYjNDM7CXJldHVybiBwcm9nLSZndDthdXgtJmd0O2V4Y2VwdGlvbl9ib3VuZGFyeSB8fCBwcm9nLSZndDthdXgtJmd0O2V4Y2VwdGlvbl9jYjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZW1pdF9leGNlcHRpb25fYm91bmRhcnlfcHJvbG9ndWUoc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsCiYjNDM7CQkJCQkgICAgIGludCBzdGFja19hZGp1c3QpCiYjNDM7ewomIzQzOwlpbnQgc3RvcmVfb2Zmc2V0ID0gc3RhY2tfYWRqdXN0IC0gODsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWVtaXRfYWRkaShSVl9SRUdfU1AsIFJWX1JFR19TUCwgLXN0YWNrX2FkanVzdCwgY3R4KTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUocnZfZXhjZXB0aW9uX2NzYXZlX3JlZ3MpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgcnZfZXhjZXB0aW9uX2NzYXZlX3JlZ3NbaV0sIGN0eCk7CiYjNDM7CQlzdG9yZV9vZmZzZXQgLT0gODsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBzdG9yZSBUQ0MgZnJvbSBSVl9SRUdfVENDIHRvIHN0YWNrICovCiYjNDM7CWVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19UQ0MsIGN0eCk7CiYjNDM7CWN0eC0mZ3Q7dGNjX29mZnNldCA9IHN0b3JlX29mZnNldDsKJiM0MzsKJiM0MzsJZW1pdF9hZGRpKFJWX1JFR19GUCwgUlZfUkVHX1NQLCBzdGFja19hZGp1c3QsIGN0eCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIHJldXNlcyB0aGUgYm91bmRhcnkgcHJvZ3JhbSYjMzk7cyBmcmFtZSwgd2hvc2UgZnJhbWUgcG9pbnRlcgomIzQzOyAqIGlzIHBhc3NlZCBpbiBhMiAoc2luY2UgaXQmIzM5O3MgdGhlIHRoaXJkIGFyZ3VtZW50IGZyb20gYnBmX3Rocm93KCkpLgomIzQzOyAqIFNldHRpbmcgU1AgPSBGUCAtIHN0YWNrX2FkanVzdCBsaW5lcyB0aGUgZXBpbG9ndWUmIzM5O3MgbG9hZHMgdXAgd2l0aAomIzQzOyAqIHRoZSByZWdpc3RlcnMgdGhlIGJvdW5kYXJ5IHNhdmVkLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGVtaXRfZXhjZXB0aW9uX2NiX3Byb2xvZ3VlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LAomIzQzOwkJCQkgICAgICAgaW50IHN0YWNrX2FkanVzdCkKJiM0Mzt7CiYjNDM7CWVtaXRfbXYoUlZfUkVHX0ZQLCBSVl9SRUdfQTIsIGN0eCk7CiYjNDM7CWVtaXRfYWRkaShSVl9SRUdfU1AsIFJWX1JFR19GUCwgLXN0YWNrX2FkanVzdCwgY3R4KTsKJiM0MzsJY3R4LSZndDt0Y2Nfb2Zmc2V0ID0gc3RhY2tfYWRqdXN0IC0gOCAtIEFSUkFZX1NJWkUocnZfZXhjZXB0aW9uX2NzYXZlX3JlZ3MpICogODsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogVXNlZCBieSBib3RoIHRoZSBib3VuZGFyeSBwcm9ncmFtIGFuZCB0aGUgZXhjZXB0aW9uIGNhbGxiYWNrIGFsaWtlLCBzaW5jZSB0aGUKJiM0MzsgKiBjYWxsYmFjayBydW5zIG9uIHRoZSBib3VuZGFyeSYjMzk7cyBmcmFtZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBlbWl0X2V4Y2VwdGlvbl9yZXN0b3JlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LCBpbnQgc3RhY2tfYWRqdXN0KQomIzQzO3sKJiM0MzsJaW50IHN0b3JlX29mZnNldCA9IHN0YWNrX2FkanVzdCAtIDg7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShydl9leGNlcHRpb25fY3NhdmVfcmVncyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQllbWl0X2xkKHJ2X2V4Y2VwdGlvbl9jc2F2ZV9yZWdzW2ldLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19TUCwgY3R4KTsKJiM0MzsJCXN0b3JlX29mZnNldCAtPSA4OwomIzQzOwl9CiYjNDM7CS8qIHJlc3RvcmUgVENDIGZyb20gc3RhY2sgdG8gUlZfUkVHX1RDQyAqLwomIzQzOwllbWl0X2xkKFJWX1JFR19UQ0MsIGN0eC0mZ3Q7dGNjX29mZnNldCwgUlZfUkVHX1NQLCBjdHgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBfX2J1aWxkX2VwaWxvZ3VlKGJvb2wgaXNfdGFpbF9jYWxsLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCkKJiM0Mzt7CiYjNDM7CWludCBzdGFja19hZGp1c3QgPSBjdHgtJmd0O3N0YWNrX3NpemU7CiYjNDM7CiYjNDM7CWlmIChpc19leGNlcHRpb25fcHJvZyhjdHgtJmd0O3Byb2cpKQomIzQzOwkJZW1pdF9leGNlcHRpb25fcmVzdG9yZShjdHgsIHN0YWNrX2FkanVzdCk7CiYjNDM7CWVsc2UKJiM0MzsJCWVtaXRfbm9ybWFsX3Jlc3RvcmUoY3R4LCBzdGFja19hZGp1c3QpOwogCiAJZW1pdF9hZGRpKFJWX1JFR19TUCwgUlZfUkVHX1NQLCBzdGFja19hZGp1c3QsIGN0eCk7CiAJLyogU2V0IHJldHVybiB2YWx1ZS4gKi8KQEAgLTIwMDQsMzYgJiM0MzsyMTY1LDIzIEBAIGludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBleGNlcHRpb25fc3RhY2tfYWRqdXN0KHZvaWQpCiYjNDM7ewomIzQzOwlpbnQgc3RhY2tfYWRqdXN0ID0gMDsKJiM0MzsKJiM0MzsJc3RhY2tfYWRqdXN0ICYjNDM7PSA4OyAvKiBSVl9SRUdfVENDICovCiYjNDM7CXN0YWNrX2FkanVzdCAmIzQzOz0gQVJSQVlfU0laRShydl9leGNlcHRpb25fY3NhdmVfcmVncykgKiA4OwomIzQzOwlyZXR1cm4gcm91bmRfdXAoc3RhY2tfYWRqdXN0LCBTVEFDS19BTElHTik7CiYjNDM7fQomIzQzOwogdm9pZCBicGZfaml0X2J1aWxkX3Byb2xvZ3VlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LCBib29sIGlzX3N1YnByb2cpCiB7Ci0JaW50IGksIHN0YWNrX2FkanVzdCA9IDAsIHN0b3JlX29mZnNldCwgYnBmX3N0YWNrX2FkanVzdDsKJiM0MzsJaW50IGksIHN0YWNrX2FkanVzdCwgYnBmX3N0YWNrX2FkanVzdDsKIAogCWJwZl9zdGFja19hZGp1c3QgPSByb3VuZF91cChjdHgtJmd0O3Byb2ctJmd0O2F1eC0mZ3Q7c3RhY2tfZGVwdGgsIFNUQUNLX0FMSUdOKTsKIAlpZiAoYnBmX3N0YWNrX2FkanVzdCkKIAkJbWFya19mcChjdHgpOwogCi0JaWYgKHNlZW5fcmVnKFJWX1JFR19SQSwgY3R4KSkKLQkJc3RhY2tfYWRqdXN0ICYjNDM7PSA4OwotCXN0YWNrX2FkanVzdCAmIzQzOz0gODsgLyogUlZfUkVHX0ZQICovCi0JaWYgKHNlZW5fcmVnKFJWX1JFR19TMSwgY3R4KSkKLQkJc3RhY2tfYWRqdXN0ICYjNDM7PSA4OwotCWlmIChzZWVuX3JlZyhSVl9SRUdfUzIsIGN0eCkpCi0JCXN0YWNrX2FkanVzdCAmIzQzOz0gODsKLQlpZiAoc2Vlbl9yZWcoUlZfUkVHX1MzLCBjdHgpKQotCQlzdGFja19hZGp1c3QgJiM0Mzs9IDg7Ci0JaWYgKHNlZW5fcmVnKFJWX1JFR19TNCwgY3R4KSkKLQkJc3RhY2tfYWRqdXN0ICYjNDM7PSA4OwotCWlmIChzZWVuX3JlZyhSVl9SRUdfUzUsIGN0eCkpCi0JCXN0YWNrX2FkanVzdCAmIzQzOz0gODsKLQlpZiAoY3R4LSZndDthcmVuYV92bV9zdGFydCkKLQkJc3RhY2tfYWRqdXN0ICYjNDM7PSA4OwotCXN0YWNrX2FkanVzdCAmIzQzOz0gODsgLyogUlZfUkVHX1RDQyAqLwotCi0Jc3RhY2tfYWRqdXN0ID0gcm91bmRfdXAoc3RhY2tfYWRqdXN0LCBTVEFDS19BTElHTik7Ci0Jc3RhY2tfYWRqdXN0ICYjNDM7PSBicGZfc3RhY2tfYWRqdXN0OwotCi0Jc3RvcmVfb2Zmc2V0ID0gc3RhY2tfYWRqdXN0IC0gODsKLQogCS8qIGVtaXQga2NmaSB0eXBlIHByZWFtYmxlIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgIGZpcnN0IGluc24gKi8KIAllbWl0X2tjZmkoaXNfc3VicHJvZyA/IGNmaV9icGZfc3VicHJvZ19oYXNoIDogY2ZpX2JwZl9oYXNoLCBjdHgpOwogCkBAIC0yMDQ2LDQ3ICYjNDM7MjE5NCwxOCBAQCB2b2lkIGJwZl9qaXRfYnVpbGRfcHJvbG9ndWUoc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsIGJvb2wgaXNfc3VicHJvZykKIAlpZiAoIWlzX3N1YnByb2cpCiAJCWVtaXQocnZfYWRkaShSVl9SRUdfVENDLCBSVl9SRUdfWkVSTywgTUFYX1RBSUxfQ0FMTF9DTlQpLCBjdHgpOwogCi0JLyogdGFpbGNhbGwgc3RhcnRzIGhlcmUsIGVtaXQgaW5zbiBiZWZvcmUgaXQgbXVzdCBiZSBmaXhlZCAqLwomIzQzOwlpZiAoaXNfZXhjZXB0aW9uX3Byb2coY3R4LSZndDtwcm9nKSkgewomIzQzOwkJc3RhY2tfYWRqdXN0ID0gZXhjZXB0aW9uX3N0YWNrX2FkanVzdCgpICYjNDM7IGJwZl9zdGFja19hZGp1c3Q7CiAKLQllbWl0X2FkZGkoUlZfUkVHX1NQLCBSVl9SRUdfU1AsIC1zdGFja19hZGp1c3QsIGN0eCk7Ci0KLQlpZiAoc2Vlbl9yZWcoUlZfUkVHX1JBLCBjdHgpKSB7Ci0JCWVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19SQSwgY3R4KTsKLQkJc3RvcmVfb2Zmc2V0IC09IDg7Ci0JfQotCWVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19GUCwgY3R4KTsKLQlzdG9yZV9vZmZzZXQgLT0gODsKLQlpZiAoc2Vlbl9yZWcoUlZfUkVHX1MxLCBjdHgpKSB7Ci0JCWVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19TMSwgY3R4KTsKLQkJc3RvcmVfb2Zmc2V0IC09IDg7Ci0JfQotCWlmIChzZWVuX3JlZyhSVl9SRUdfUzIsIGN0eCkpIHsKLQkJZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX1MyLCBjdHgpOwotCQlzdG9yZV9vZmZzZXQgLT0gODsKLQl9Ci0JaWYgKHNlZW5fcmVnKFJWX1JFR19TMywgY3R4KSkgewotCQllbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfUzMsIGN0eCk7Ci0JCXN0b3JlX29mZnNldCAtPSA4OwotCX0KLQlpZiAoc2Vlbl9yZWcoUlZfUkVHX1M0LCBjdHgpKSB7Ci0JCWVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19TNCwgY3R4KTsKLQkJc3RvcmVfb2Zmc2V0IC09IDg7Ci0JfQotCWlmIChzZWVuX3JlZyhSVl9SRUdfUzUsIGN0eCkpIHsKLQkJZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX1M1LCBjdHgpOwotCQlzdG9yZV9vZmZzZXQgLT0gODsKLQl9Ci0JaWYgKGN0eC0mZ3Q7YXJlbmFfdm1fc3RhcnQpIHsKLQkJZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX0FSRU5BLCBjdHgpOwotCQlzdG9yZV9vZmZzZXQgLT0gODsKJiM0MzsJCWlmIChjdHgtJmd0O3Byb2ctJmd0O2F1eC0mZ3Q7ZXhjZXB0aW9uX2NiKQomIzQzOwkJCWVtaXRfZXhjZXB0aW9uX2NiX3Byb2xvZ3VlKGN0eCwgc3RhY2tfYWRqdXN0KTsKJiM0MzsJCWVsc2UKJiM0MzsJCQllbWl0X2V4Y2VwdGlvbl9ib3VuZGFyeV9wcm9sb2d1ZShjdHgsIHN0YWNrX2FkanVzdCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlzdGFja19hZGp1c3QgPSBub3JtYWxfc3RhY2tfYWRqdXN0KGN0eCkgJiM0MzsgYnBmX3N0YWNrX2FkanVzdDsKJiM0MzsJCWVtaXRfbm9ybWFsX3Byb2xvZ3VlKGN0eCwgc3RhY2tfYWRqdXN0KTsKIAl9CiAKLQkvKiBzdG9yZSBUQ0MgZnJvbSBSVl9SRUdfVENDIHRvIHN0YWNrICovCi0JZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX1RDQywgY3R4KTsKLQljdHgtJmd0O3RjY19vZmZzZXQgPSBzdG9yZV9vZmZzZXQ7Ci0KLQllbWl0X2FkZGkoUlZfUkVHX0ZQLCBSVl9SRUdfU1AsIHN0YWNrX2FkanVzdCwgY3R4KTsKLQogCWlmIChicGZfc3RhY2tfYWRqdXN0KQogCQllbWl0X2FkZGkoUlZfUkVHX1M1LCBSVl9SRUdfU1AsIGJwZl9zdGFja19hZGp1c3QsIGN0eCk7CiAKQEAgLTIxNjEsMyAmIzQzOzIyODAsMTIgQEAgYm9vbCBicGZfaml0X3N1cHBvcnRzX3N1YnByb2dfdGFpbGNhbGxzKHZvaWQpCiB7CiAJcmV0dXJuIHRydWU7CiB9CiYjNDM7CiYjNDM7Ym9vbCBicGZfaml0X3N1cHBvcnRzX2V4Y2VwdGlvbnModm9pZCkKJiM0Mzt7CiYjNDM7CS8qIGJwZl90aHJvdygpIHVud2luZHMgYnkgd2Fsa2luZyB0aGUgZnJhbWUtcG9pbnRlciBjaGFpbiBmcm9tIGluc2lkZQomIzQzOwkgKiB0aGUga2VybmVsIGJhY2sgaW50byB0aGUgQlBGIGZyYW1lcyAoc2VlIGFyY2hfYnBmX3N0YWNrX3dhbGsoKSksIHNvCiYjNDM7CSAqIGV4Y2VwdGlvbnMgcmVxdWlyZSB0aGUgZnJhbWUtcG9pbnRlciB1bndpbmRlciB0byBiZSBlbmFibGVkLgomIzQzOwkgKi8KJiM0MzsJcmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0ZSQU1FX1BPSU5URVIpOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9ERU5ZTElTVC5yaXNjdjY0IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL0RFTllMSVNULnJpc2N2NjQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhMWJlYWU3ZmU4ZjEwLi4wMDAwMDAwMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvREVOWUxJU1QucmlzY3Y2NAomIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsCkBAIC0xLDIgJiM0MzswLDAgQEAKLSMgcmlzY3Y2NCBkZW55IGxpc3QgZm9yIEJQRiBDSSBhbmQgbG9jYWwgdm10ZXN0Ci1leGNlcHRpb25zCQkJCQkjIEpJVCBkb2VzIG5vdCBzdXBwb3J0IGV4Y2VwdGlvbnMKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTU6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE5MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDMzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBSSVNDLVYgQlBGIEV4Y2VwdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGFkZHMgQlBGIGV4Y2VwdGlvbiBzdXBwb3J0IHRvIHRoZSBSSVNDLVYgYXJjaGl0ZWN0dXJlLiBJdCBzZWVtcyB0byBiZSBhIGZhaXJseSBmb2N1c2VkIGNoYW5nZSwgdG91Y2hpbmcgb24gc29tZSBrZXkgYXJlYXM6IGBzdGFja3RyYWNlLmhgLCBwZXJmb3JtYW5jZSBjYWxsY2hhaW5zLCBzdGFjayB1bndpbmRpbmcsIGFuZCB0aGUgQlBGIEpJVCBjb21waWxlciAoc3BlY2lmaWNhbGx5IHRoZSA2NC1iaXQgdmVyc2lvbikuIEl0JiMzOTtzIGltcGxlbWVudGluZyBhbiBleGNlcHRpb24gcHJvbG9ndWUgYW5kIGVwaWxvZ3VlLCBhbmQgdGhlbiBpdCYjMzk7cyBhbHNvIG1ha2luZyBzb21lIGNydWNpYWwgbW9kaWZpY2F0aW9ucyB0byBgd2Fsa19zdGFja2ZyYW1lYCB0byBlbmFibGUgcGFzc2luZyB0aGUgc3RhY2sgYW5kIGZyYW1lIHBvaW50ZXJzIHRvIHRoZSBjYWxsYmFjayBhbmQgdGhlbiBwcm92aWRpbmcgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBzdGFjayB3YWxrIGZ1bmN0aW9uYWxpdHkuCgpUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vIGRvdWJ0LiBXZSYjMzk7cmUgaW50cm9kdWNpbmcgQlBGIGV4Y2VwdGlvbiBzdXBwb3J0LCB3aGljaCB3aWxsIG1vZGlmeSBib3RoIHN0YWNrIHVud2luZGluZyBhbmQgdGhlIEpJVCBjb21waWxlci4gVGhhdCYjMzk7cyBhIHRleHRib29rIGRlZmluaXRpb24gb2YgYSBjaGFuZ2UgdGhhdCYjMzk7cyAqYmVnZ2luZyogdG8gYmUgZnV6emVkISBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHJvYnVzdCwgZXNwZWNpYWxseSBnaXZlbiB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgdXNlci1zdXBwbGllZCBCUEYgY29kZSBydW5uaW5nIGluIGtlcm5lbCBzcGFjZS4KCk5vdywgYmVmb3JlIEkgZGlnIHRvbyBkZWVwLCBsZXQmIzM5O3Mgc2VlIHdoYXQgY29uZmlncyBhcmUgcmVxdWlyZWQuIEkga25vdyB0aGF0IHRoZSBCUEYgSklUIG9uIFJJU0MtViBpcyBlbmFibGVkIGJ5IGBDT05GSUdfQlBGX0pJVGAuIFRoZSBwYXRjaCBpdHNlbGYgbWVudGlvbnMgdGhhdCBgQ09ORklHX0ZSQU1FX1BPSU5URVJgIGlzIG5lY2Vzc2FyeSBmb3IgdGhlIGV4Y2VwdGlvbiBzdXBwb3J0LCB3aGljaCBhbGlnbnMgd2l0aCBob3cgc3RhY2sgdW53aW5kaW5nIHVzdWFsbHkgd29ya3MuIFRvIGJlIHByZWNpc2UsIEkgc2hvdWxkIGZpbmQgdGhvc2UgY29uZmlnIHN5bWJvbHMuIEnigJlsbCBxdWlja2x5IGNoZWNrIGBhcmNoL3Jpc2N2L0tjb25maWdgIG9yIGBhcmNoL3Jpc2N2L25ldC9LY29uZmlnYCB0byBjb25maXJtIHdoZXJlIGBCUEZfSklUYCBpcyBkZWZpbmVkLiBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIGxvY2F0ZSB0aGVzZSBjb25maWcgb3B0aW9ucyBhbmQgdmVyaWZ5IHRoZSByZXF1aXJlZCBzZXR0aW5ncy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2V0IHVwIGNvcnJlY3RseSBiZWZvcmUgSSBzdGFydCBkZWVwZXIgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTU6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX0pJVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE1OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5NDkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqS2NvbmZpZyBEaXZlIGZvciBCUEYgU3VwcG9ydCBpbiBSSVNDLVYqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgQlBGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyKSBzdXBwb3J0IGxpdmVzIGluIHRoZSBSSVNDLVYga2VybmVsIGNvbmZpZ3VyYXRpb24uIEdpdmVuIG15IGV4cGVyaWVuY2UsIHRoZSBmaXJzdCBwbGFjZSBJJiMzOTtkIGxvb2sgaXMgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBLY29uZmlnIGZpbGUuIFRoYXQmIzM5O3MgYWxtb3N0IGFsd2F5cyB0aGUgc3RhbmRhcmQuIFNvLCBsZXQmIzM5O3Mgc3RhcnQgd2l0aCBgYXJjaC9yaXNjdi9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBvcHRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCBwZXJoYXBzIHNvbWUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbnNpZGVyYXRpb25zIGZvciBlbmFibGluZyBCUEYgZnVuY3Rpb25hbGl0eS4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9LY29uZmlnPTEzPWNvbmZpZyBSSVNDVlxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZy0xNjctXHRzZWxlY3QgSEFWRV9GVU5DVElPTl9UUkFDRVIgaWYgSEFWRV9EWU5BTUlDX0ZUUkFDRVxuYXJjaC9yaXNjdi9LY29uZmlnOjE2ODpcdHNlbGVjdCBIQVZFX0VCUEZfSklUIGlmIE1NVVxuYXJjaC9yaXNjdi9LY29uZmlnLTE2OS1cdHNlbGVjdCBIQVZFX0dFTkVSSUNfVElGX0JJVFNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjQ0CgkJCQkJCQlvdXRwdXQ6IDE2NAoJCQkJCQkJdGhvdWdodHM6IDYzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBCUEYgSklUIEV4Y2VwdGlvbiBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBCUEYgSklUIGNvbmZpZ3VyYXRpb24uIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGBDT05GSUdfQlBGX0pJVGAsIHdoaWNoIGlzIHByZXR0eSBnZW5lcmljLCBidXQgdGhpcyBzcGVjaWZpYyBmZWF0dXJlIHJlcXVpcmVzIGBDT05GSUdfRlJBTUVfUE9JTlRFUmAuIFRoZSBwYXRjaCBpcyBleHBsaWNpdCBhYm91dCB0aGF0LiBJdCYjMzk7cyB1c2luZyB0aGUgZnJhbWUgcG9pbnRlciBmb3IgdW53aW5kaW5nIHdpdGggYGJwZl90aHJvdygpYCwgYW5kIHRoYXQgbWVhbnMgYENPTkZJR19GUkFNRV9QT0lOVEVSYCAqbXVzdCogYmUgZW5hYmxlZC4gU28sIHRoZSBlc3NlbnRpYWwgY29uZmlncyBmb3IgdGhpcyBmZWF0dXJlIGFyZSBjbGVhcmx5IGBDT05GSUdfRlJBTUVfUE9JTlRFUmAgYW5kLCBvZiBjb3Vyc2UsIGBDT05GSUdfQlBGX0pJVGAuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBjcml0aWNhbCBzeW1ib2xzLiBUaGUgcGF0Y2ggdG91Y2hlcyBhIGZldyBmdW5jdGlvbnMsIGluY2x1ZGluZyBgd2Fsa19zdGFja2ZyYW1lYCwgYGFyY2hfYnBmX3N0YWNrX3dhbGtgLCBgYnBmX2ppdF9idWlsZF9wcm9sb2d1ZWAsIGBicGZfaml0X2VtaXRfaW5zbmAgKHRob3VnaCBpbmRpcmVjdGx5KSwgYW5kIGBicGZfaml0X3N1cHBvcnRzX2V4Y2VwdGlvbnNgLiBJIHRoaW5rIHRoZSBtYWluIHBvaW50cyBvZiBpbnRlcmVzdCBhcmUgYGFyY2hfYnBmX3N0YWNrX3dhbGtgLCB3aGljaCBpcyBhIGtleSBwYXJ0IG9mIHRoZSBzdGFjayB3YWxraW5nIHByb2Nlc3MsIGBicGZfaml0X2J1aWxkX3Byb2xvZ3VlYCBiZWNhdXNlIGl0JiMzOTtzIGdlbmVyYXRpbmcgdGhlIHByb2xvZ3VlLCBhbmQgYGJwZl9qaXRfc3VwcG9ydHNfZXhjZXB0aW9uc2AgYmVjYXVzZSBpdCBleHBsaWNpdGx5IGNoZWNrcyBmb3IgYEZSQU1FX1BPSU5URVJgLiBBbHRob3VnaCBgd2Fsa19zdGFja2ZyYW1lYCBpcyBtb2RpZmllZCwgd2hpY2ggc2VlbXMgbGlrZSBhIGhvdHNwb3QgZm9yIHN0YWNrIHRyYWNlcywgYGFyY2hfYnBmX3N0YWNrX3dhbGtgIHdpbGwgbGlrZWx5IHByb3ZpZGUgYSBtb3JlIGZvY3VzZWQgdmlldy4KCkkmIzM5O20gYWxzbyBsb29raW5nIHNwZWNpZmljYWxseSBhdCBgYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuY2AgdG8gc2VlIHRoZSBkZXRhaWxzIG9mIHRoZSBjaGFuZ2VzLiBUaGUgcmVsZXZhbnQgZnVuY3Rpb25zIHRoZXJlIGFyZTogYGVtaXRfZXhjZXB0aW9uX2JvdW5kYXJ5X3Byb2xvZ3VlYCwgYGVtaXRfZXhjZXB0aW9uX2NiX3Byb2xvZ3VlYCwgYGVtaXRfZXhjZXB0aW9uX3Jlc3RvcmVgLCBgYnBmX2ppdF9idWlsZF9wcm9sb2d1ZWAsIGBfX2J1aWxkX2VwaWxvZ3VlYCwgYW5kIGFnYWluLCBgYnBmX2ppdF9zdXBwb3J0c19leGNlcHRpb25zYC4gSSBzZWUgdGhhdCBgZW1pdF9leGNlcHRpb25fYm91bmRhcnlfcHJvbG9ndWVgIGlzIHN0YXRpYywgc28gaXQmIzM5O3Mgbm90IGV4cG9zZWQsIGJ1dCBgYnBmX2ppdF9idWlsZF9wcm9sb2d1ZWAgaXMgZXhwb3J0ZWQgYW5kIGdsb2JhbCwgYW5kIGltcG9ydGFudGx5LCBgYXJjaF9icGZfc3RhY2tfd2Fsa2AgaXMgYWxzbyBnbG9iYWwuCgpMZXQgbWUgY29uZmlybSB0aGF0IGBhcmNoX2JwZl9zdGFja193YWxrYCBpcywgaW4gZmFjdCwgZ2xvYmFsLiBZZXAsIGl0IGlzLiBUaGUgcHJvdG90eXBlIGRlY2xhcmVzIGl0IGB2b2lkIG5vdHJhY2UgYXJjaF9icGZfc3RhY2tfd2FsayguLi4pYCwgc28gaXQmIzM5O3MgZGVmaW5pdGVseSBhY2Nlc3NpYmxlLgoKU28sIHRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGFyZSBub3cgZmlybWx5IHNldCBhczoKCiogICBgYXJjaF9icGZfc3RhY2tfd2Fsa2AKKiAgIGBicGZfaml0X2J1aWxkX3Byb2xvZ3VlYAoqICAgYGJwZl9qaXRfc3VwcG9ydHNfZXhjZXB0aW9uc2AKCkZpbmFsbHksIGxldCYjMzk7cyBxdWlja2x5IHJldmlldyB0aGUgZXNzZW50aWFsIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBXZSYjMzk7dmUgZ290IGBDT05GSUdfQlBGX1NZU0NBTExgIGZvciBCUEYgaW4gZ2VuZXJhbCwgYENPTkZJR19CUEZfSklUYCBmb3IgdGhlIEpJVCwgYW5kIGBDT05GSUdfRlJBTUVfUE9JTlRFUmAgZm9yIGV4Y2VwdGlvbnMsIGFzIHByZXZpb3VzbHkgZGlzY3Vzc2VkLgoKQWxyaWdodCwgSSB0aGluayBJIGhhdmUgYSBjbGVhciBwaWN0dXJlLiBMZXQmIzM5O3MgcmVwb3J0IHRoZSByZXN1bHRzIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7LAogICAgJiMzNDtGUkFNRV9QT0lOVEVSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXJjaF9icGZfc3RhY2tfd2FsayYjMzQ7LAogICAgJiMzNDticGZfaml0X2J1aWxkX3Byb2xvZ3VlJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfc3VwcG9ydHNfZXhjZXB0aW9ucyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIEJQRiBleGNlcHRpb24gc3VwcG9ydCB0byB0aGUgUklTQy1WIGFyY2hpdGVjdHVyZS4gSXQgbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgdG8gZW1pdCBleGNlcHRpb24gcHJvbG9ndWVzIGFuZCBlcGlsb2d1ZXMsIGFuZCBpbXBsZW1lbnRzIGBhcmNoX2JwZl9zdGFja193YWxrYCBmb3IgdW53aW5kaW5nIHRoZSBzdGFjayBkdXJpbmcgQlBGIGV4Y2VwdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGtlcm5lbCBhbmQgQlBGIEpJVCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7RlJBTUVfUE9JTlRFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FyY2hfYnBmX3N0YWNrX3dhbGsmIzM0OywKICAgICYjMzQ7YnBmX2ppdF9idWlsZF9wcm9sb2d1ZSYjMzQ7LAogICAgJiMzNDticGZfaml0X3N1cHBvcnRzX2V4Y2VwdGlvbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBCUEYgZXhjZXB0aW9uIHN1cHBvcnQgdG8gdGhlIFJJU0MtViBhcmNoaXRlY3R1cmUuIEl0IG1vZGlmaWVzIHRoZSBCUEYgSklUIGNvbXBpbGVyIHRvIGVtaXQgZXhjZXB0aW9uIHByb2xvZ3VlcyBhbmQgZXBpbG9ndWVzLCBhbmQgaW1wbGVtZW50cyBgYXJjaF9icGZfc3RhY2tfd2Fsa2AgZm9yIHVud2luZGluZyB0aGUgc3RhY2sgZHVyaW5nIEJQRiBleGNlcHRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBrZXJuZWwgYW5kIEJQRiBKSVQgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjNUMTU6MDY6MzEuNTYzNzY3Njc4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg5NDE1NDA2OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkZSQU1FX1BPSU5URVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhcmNoX2JwZl9zdGFja193YWxrXCIsXG4gICAgXCJicGZfaml0X2J1aWxkX3Byb2xvZ3VlXCIsXG4gICAgXCJicGZfaml0X3N1cHBvcnRzX2V4Y2VwdGlvbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIEJQRiBleGNlcHRpb24gc3VwcG9ydCB0byB0aGUgUklTQy1WIGFyY2hpdGVjdHVyZS4gSXQgbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgdG8gZW1pdCBleGNlcHRpb24gcHJvbG9ndWVzIGFuZCBlcGlsb2d1ZXMsIGFuZCBpbXBsZW1lbnRzIGBhcmNoX2JwZl9zdGFja193YWxrYCBmb3IgdW53aW5kaW5nIHRoZSBzdGFjayBkdXJpbmcgQlBGIGV4Y2VwdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGtlcm5lbCBhbmQgQlBGIEpJVCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE1OjA2OjMxLjU2Mzc3MjQ2OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQzMTUzNzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODdhNDc2MmFkOTMzYjRjOTBjOGE5ZDcxN2UwOTNmZjI4NmVkYWU3M1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAyMyAxNTowNjozMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3N0YWNrdHJhY2UuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3RhY2t0cmFjZS5oXFxuaW5kZXggYjE0OTVhN2UwNmNlNjkuLmZkMWZmMDRhMDQwZTk1IDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3RhY2t0cmFjZS5oXFxuKysrIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9zdGFja3RyYWNlLmhcXG5AQCAtMTEsOCArMTEsMTEgQEAgc3RydWN0IHN0YWNrZnJhbWUge1xcbiBcXHR1bnNpZ25lZCBsb25nIHJhO1xcbiB9O1xcbiBcXG4rdHlwZWRlZiBib29sICgqd2Fsa19zdGFja2ZyYW1lX2ZuKSh2b2lkICphcmcsIHVuc2lnbmVkIGxvbmcgcGMsXFxuK1xcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgc3AsIHVuc2lnbmVkIGxvbmcgZnApO1xcbitcXG4gZXh0ZXJuIHZvaWQgbm90cmFjZSB3YWxrX3N0YWNrZnJhbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyxcXG4tXFx0XFx0XFx0XFx0ICAgIGJvb2wgKCpmbikodm9pZCAqLCB1bnNpZ25lZCBsb25nKSwgdm9pZCAqYXJnKTtcXG4rXFx0XFx0XFx0XFx0ICAgIHdhbGtfc3RhY2tmcmFtZV9mbiBmbiwgdm9pZCAqYXJnKTtcXG4gZXh0ZXJuIHZvaWQgZHVtcF9iYWNrdHJhY2Uoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcXG4gXFx0XFx0XFx0ICAgY29uc3QgY2hhciAqbG9nbHZsKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva2VybmVsL3BlcmZfY2FsbGNoYWluLmMgYi9hcmNoL3Jpc2N2L2tlcm5lbC9wZXJmX2NhbGxjaGFpbi5jXFxuaW5kZXggYjQ2NWJjOWViODcwZWMuLjkzYTEyZDUzYWEyNmQ3IDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3Yva2VybmVsL3BlcmZfY2FsbGNoYWluLmNcXG4rKysgYi9hcmNoL3Jpc2N2L2tlcm5lbC9wZXJmX2NhbGxjaGFpbi5jXFxuQEAgLTIsNiArMiw3IEBAXFxuIC8qIENvcHlyaWdodCAoQykgMjAxOSBIYW5nemhvdSBDLVNLWSBNaWNyb3N5c3RlbXMgY28uLGx0ZC4gKi9cXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wZXJmX2V2ZW50LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdGFja3RyYWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC91YWNjZXNzLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3N0YWNrdHJhY2UuaFxcdTAwM2VcXG5AQCAtNDQsNSArNDUsNSBAQCB2b2lkIHBlcmZfY2FsbGNoYWluX2tlcm5lbChzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnlfY3R4ICplbnRyeSxcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcbi1cXHR3YWxrX3N0YWNrZnJhbWUoTlVMTCwgcmVncywgZmlsbF9jYWxsY2hhaW4sIGVudHJ5KTtcXG4rXFx0YXJjaF9zdGFja193YWxrKGZpbGxfY2FsbGNoYWluLCBlbnRyeSwgY3VycmVudCwgcmVncyk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rZXJuZWwvc3RhY2t0cmFjZS5jIGIvYXJjaC9yaXNjdi9rZXJuZWwvc3RhY2t0cmFjZS5jXFxuaW5kZXggYzc1NTU0NDcxNDliZmUuLmMwZjIzOTNlNTE2M2NiIDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3Yva2VybmVsL3N0YWNrdHJhY2UuY1xcbisrKyBiL2FyY2gvcmlzY3Yva2VybmVsL3N0YWNrdHJhY2UuY1xcbkBAIC01LDYgKzUsNyBAQFxcbiAgKi9cXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9leHBvcnQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZpbHRlci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva2FsbHN5bXMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9kZWJ1Zy5oXFx1MDAzZVxcbkBAIC00Niw3ICs0Nyw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGZwX2lzX3ZhbGlkKHVuc2lnbmVkIGxvbmcgZnAsIHVuc2lnbmVkIGxvbmcgc3ApXFxuIH1cXG4gXFxuIHZvaWQgbm90cmFjZSB3YWxrX3N0YWNrZnJhbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyxcXG4tXFx0XFx0XFx0ICAgICBib29sICgqZm4pKHZvaWQgKiwgdW5zaWduZWQgbG9uZyksIHZvaWQgKmFyZylcXG4rXFx0XFx0XFx0ICAgICB3YWxrX3N0YWNrZnJhbWVfZm4gZm4sIHZvaWQgKmFyZylcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIGZwLCBzcCwgcGM7XFxuIFxcdGludCBncmFwaF9pZHggPSAwO1xcbkBAIC03MSw3ICs3Miw5IEBAIHZvaWQgbm90cmFjZSB3YWxrX3N0YWNrZnJhbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyxcXG4gXFx0Zm9yICg7Oykge1xcbiBcXHRcXHRzdHJ1Y3Qgc3RhY2tmcmFtZSAqZnJhbWU7XFxuIFxcbi1cXHRcXHRpZiAodW5saWtlbHkoIV9fa2VybmVsX3RleHRfYWRkcmVzcyhwYykgfHwgKGxldmVsKysgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiAhZm4oYXJnLCBwYykpKSlcXG4rXFx0XFx0LyogcGMgYmVsb25ncyB0byB0aGUgZnVuY3Rpb24gd2hvc2UgZnJhbWUgcG9pbnRlciBpcyBmcCAqL1xcbitcXHRcXHRpZiAodW5saWtlbHkoIV9fa2VybmVsX3RleHRfYWRkcmVzcyhwYykgfHxcXG4rXFx0XFx0XFx0ICAgICAobGV2ZWwrKyBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2ICFmbihhcmcsIHBjLCBzcCwgZnApKSkpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0XFx0aWYgKHVubGlrZWx5KCFmcF9pc192YWxpZChmcCwgc3ApKSlcXG5AQCAtOTEsNyArOTQsNyBAQCB2b2lkIG5vdHJhY2Ugd2Fsa19zdGFja2ZyYW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZmcmFtZS1cXHUwMDNlcmEpO1xcbiBcXHRcXHRcXHRpZiAocGMgXFx1MDAzZT0gKHVuc2lnbmVkIGxvbmcpaGFuZGxlX2V4Y2VwdGlvbiBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHQgICAgcGMgXFx1MDAzYyAodW5zaWduZWQgbG9uZylcXHUwMDI2cmV0X2Zyb21fZXhjZXB0aW9uX2VuZCkge1xcbi1cXHRcXHRcXHRcXHRpZiAodW5saWtlbHkoIWZuKGFyZywgcGMpKSlcXG4rXFx0XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFmbihhcmcsIHBjLCBzcCwgZnApKSlcXG4gXFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcbiBcXHRcXHRcXHRcXHRwYyA9ICgoc3RydWN0IHB0X3JlZ3MgKilzcCktXFx1MDAzZWVwYztcXG5AQCAtMTAyLDEwICsxMDUsMzQgQEAgdm9pZCBub3RyYWNlIHdhbGtfc3RhY2tmcmFtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzLFxcbiBcXHR9XFxuIH1cXG4gXFxuK3N0cnVjdCBicGZfdW53aW5kX2NvbnN1bWVfZW50cnlfZGF0YSB7XFxuK1xcdGJvb2wgKCpjb25zdW1lX2VudHJ5KSh2b2lkICpjb29raWUsIHU2NCBpcCwgdTY0IHNwLCB1NjQgZnApO1xcbitcXHR2b2lkICpjb29raWU7XFxuK307XFxuK1xcbitzdGF0aWMgYm9vbCBicGZfdW53aW5kX2NvbnN1bWVfZW50cnkodm9pZCAqYXJnLCB1bnNpZ25lZCBsb25nIHBjLFxcbitcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgc3AsIHVuc2lnbmVkIGxvbmcgZnApXFxuK3tcXG4rXFx0c3RydWN0IGJwZl91bndpbmRfY29uc3VtZV9lbnRyeV9kYXRhICpkYXRhID0gYXJnO1xcbitcXG4rXFx0cmV0dXJuIGRhdGEtXFx1MDAzZWNvbnN1bWVfZW50cnkoZGF0YS1cXHUwMDNlY29va2llLCBwYywgc3AsIGZwKTtcXG4rfVxcbitcXG4rdm9pZCBub3RyYWNlIGFyY2hfYnBmX3N0YWNrX3dhbGsoYm9vbCAoKmNvbnN1bWVfZm4pKHZvaWQgKmNvb2tpZSwgdTY0IGlwLCB1NjQgc3AsIHU2NCBicCksXFxuK1xcdFxcdFxcdFxcdCB2b2lkICpjb29raWUpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl91bndpbmRfY29uc3VtZV9lbnRyeV9kYXRhIGRhdGEgPSB7XFxuK1xcdFxcdC5jb25zdW1lX2VudHJ5ID0gY29uc3VtZV9mbixcXG4rXFx0XFx0LmNvb2tpZSA9IGNvb2tpZSxcXG4rXFx0fTtcXG4rXFxuK1xcdHdhbGtfc3RhY2tmcmFtZShjdXJyZW50LCBOVUxMLCBicGZfdW53aW5kX2NvbnN1bWVfZW50cnksIFxcdTAwMjZkYXRhKTtcXG4rfVxcbitcXG4gI2Vsc2UgLyogIUNPTkZJR19GUkFNRV9QT0lOVEVSICovXFxuIFxcbiB2b2lkIG5vdHJhY2Ugd2Fsa19zdGFja2ZyYW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcXG4tXFx0c3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGJvb2wgKCpmbikodm9pZCAqLCB1bnNpZ25lZCBsb25nKSwgdm9pZCAqYXJnKVxcbitcXHRzdHJ1Y3QgcHRfcmVncyAqcmVncywgd2Fsa19zdGFja2ZyYW1lX2ZuIGZuLCB2b2lkICphcmcpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBzcCwgcGM7XFxuIFxcdHVuc2lnbmVkIGxvbmcgKmtzcDtcXG5AQCAtMTI3LDcgKzE1NCw4IEBAIHZvaWQgbm90cmFjZSB3YWxrX3N0YWNrZnJhbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLFxcbiBcXG4gXFx0a3NwID0gKHVuc2lnbmVkIGxvbmcgKilzcDtcXG4gXFx0d2hpbGUgKCFrc3RhY2tfZW5kKGtzcCkpIHtcXG4tXFx0XFx0aWYgKF9fa2VybmVsX3RleHRfYWRkcmVzcyhwYykgXFx1MDAyNlxcdTAwMjYgdW5saWtlbHkoIWZuKGFyZywgcGMpKSlcXG4rXFx0XFx0aWYgKF9fa2VybmVsX3RleHRfYWRkcmVzcyhwYykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIHVubGlrZWx5KCFmbihhcmcsIHBjLCAodW5zaWduZWQgbG9uZylrc3AsIDApKSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdHBjID0gUkVBRF9PTkNFX05PQ0hFQ0soKmtzcCsrKTtcXG4gXFx0fVxcbkBAIC0xMzUsNyArMTYzLDggQEAgdm9pZCBub3RyYWNlIHdhbGtfc3RhY2tmcmFtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssXFxuIFxcbiAjZW5kaWYgLyogQ09ORklHX0ZSQU1FX1BPSU5URVIgKi9cXG4gXFxuLXN0YXRpYyBib29sIHByaW50X3RyYWNlX2FkZHJlc3Modm9pZCAqYXJnLCB1bnNpZ25lZCBsb25nIHBjKVxcbitzdGF0aWMgYm9vbCBwcmludF90cmFjZV9hZGRyZXNzKHZvaWQgKmFyZywgdW5zaWduZWQgbG9uZyBwYyxcXG4rXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBzcCwgdW5zaWduZWQgbG9uZyBmcClcXG4ge1xcbiBcXHRjb25zdCBjaGFyICpsb2dsdmwgPSBhcmc7XFxuIFxcbkBAIC0xNTUsNyArMTg0LDggQEAgdm9pZCBzaG93X3N0YWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdW5zaWduZWQgbG9uZyAqc3AsIGNvbnN0IGNoYXIgKmxvZ2x2bClcXG4gXFx0ZHVtcF9iYWNrdHJhY2UoTlVMTCwgdGFzaywgbG9nbHZsKTtcXG4gfVxcbiBcXG4tc3RhdGljIGJvb2wgc2F2ZV93Y2hhbih2b2lkICphcmcsIHVuc2lnbmVkIGxvbmcgcGMpXFxuK3N0YXRpYyBib29sIHNhdmVfd2NoYW4odm9pZCAqYXJnLCB1bnNpZ25lZCBsb25nIHBjLFxcbitcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBzcCwgdW5zaWduZWQgbG9uZyBmcClcXG4ge1xcbiBcXHRpZiAoIWluX3NjaGVkX2Z1bmN0aW9ucyhwYykpIHtcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyAqcCA9IGFyZztcXG5AQCAtMTc2LDEwICsyMDYsMjggQEAgdW5zaWduZWQgbG9uZyBfX2dldF93Y2hhbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXFxuIFxcdHJldHVybiBwYztcXG4gfVxcbiBcXG4rc3RydWN0IHdhbGtfc3RhY2tmcmFtZV9jb25zdW1lX2VudHJ5X2RhdGEge1xcbitcXHRzdGFja190cmFjZV9jb25zdW1lX2ZuIGNvbnN1bWVfZW50cnk7XFxuK1xcdHZvaWQgKmNvb2tpZTtcXG4rfTtcXG4rXFxuK3N0YXRpYyBib29sIHdhbGtfc3RhY2tmcmFtZV9jb25zdW1lX2VudHJ5KHZvaWQgKmFyZywgdW5zaWduZWQgbG9uZyBwYyxcXG4rXFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIHNwLCB1bnNpZ25lZCBsb25nIGZwKVxcbit7XFxuK1xcdHN0cnVjdCB3YWxrX3N0YWNrZnJhbWVfY29uc3VtZV9lbnRyeV9kYXRhICpkYXRhID0gYXJnO1xcbitcXG4rXFx0cmV0dXJuIGRhdGEtXFx1MDAzZWNvbnN1bWVfZW50cnkoZGF0YS1cXHUwMDNlY29va2llLCBwYyk7XFxuK31cXG4rXFxuIG5vaW5saW5lIG5vaW5zdHIgdm9pZCBhcmNoX3N0YWNrX3dhbGsoc3RhY2tfdHJhY2VfY29uc3VtZV9mbiBjb25zdW1lX2VudHJ5LCB2b2lkICpjb29raWUsXFxuIFxcdFxcdCAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4ge1xcbi1cXHR3YWxrX3N0YWNrZnJhbWUodGFzaywgcmVncywgY29uc3VtZV9lbnRyeSwgY29va2llKTtcXG4rXFx0c3RydWN0IHdhbGtfc3RhY2tmcmFtZV9jb25zdW1lX2VudHJ5X2RhdGEgZGF0YSA9IHtcXG4rXFx0XFx0LmNvbnN1bWVfZW50cnkgPSBjb25zdW1lX2VudHJ5LFxcbitcXHRcXHQuY29va2llID0gY29va2llLFxcbitcXHR9O1xcbitcXG4rXFx0d2Fsa19zdGFja2ZyYW1lKHRhc2ssIHJlZ3MsIHdhbGtfc3RhY2tmcmFtZV9jb25zdW1lX2VudHJ5LCBcXHUwMDI2ZGF0YSk7XFxuIH1cXG4gXFxuIC8qXFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXFxuaW5kZXggYWQwODlhOWE0ZWE5YWMuLmUwYzJmNzNiYzY0NmEzIDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcXG4rKysgYi9hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jXFxuQEAgLTU2LDYgKzU2LDI5IEBAIHN0YXRpYyBjb25zdCBpbnQgcHRfcmVnbWFwW10gPSB7XFxuIFxcdFtSVl9SRUdfVDBdID0gb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHQwKSxcXG4gfTtcXG4gXFxuKy8qIEZ1bGwgc2V0IG9mIFJJU0MtViBjYWxsZWUtc2F2ZWQgR1AgcmVnaXN0ZXJzIChyYSwgczAtczExKSBzYXZlZCBieSBhIHByb2dyYW1cXG4rICogYWN0aW5nIGFzIGFuIGV4Y2VwdGlvbiBib3VuZGFyeSwgaW4gdGhlIG9yZGVyIHRoZXkgYXJlIHN0b3JlZCBvbiB0aGUgc3RhY2suXFxuKyAqIFJBIGFuZCBGUCBjb21lIGZpcnN0IHNvIHRoZSBzYXZlZCByYS9mcCBwYWlyIGZvcm1zIGEgdmFsaWQgc3RhY2tmcmFtZSByZWNvcmRcXG4rICogYXQgW0ZQLThdL1tGUC0xNl0gZm9yIHRoZSB1bndpbmRlci4gVGhlIGV4Y2VwdGlvbiBjYWxsYmFjayByZXVzZXMgdGhlXFxuKyAqIGJvdW5kYXJ5IHByb2dyYW0ncyBmcmFtZSBhbmQgcmVzdG9yZXMgdGhpcyBzYW1lIHNldCBpbiBpdHMgZXBpbG9ndWUsIHNvIGJvdGhcXG4rICogcGF0aHMgbXVzdCBhZ3JlZSBvbiB0aGUgY29udGVudHMgYW5kIG9yZGVyaW5nIG9mIHRoaXMgbGlzdC5cXG4rICovXFxuK3N0YXRpYyBjb25zdCBpbnQgcnZfZXhjZXB0aW9uX2NzYXZlX3JlZ3NbXSA9IHtcXG4rXFx0UlZfUkVHX1JBLFxcbitcXHRSVl9SRUdfRlAsXFxuK1xcdFJWX1JFR19TMSxcXG4rXFx0UlZfUkVHX1MyLFxcbitcXHRSVl9SRUdfUzMsXFxuK1xcdFJWX1JFR19TNCxcXG4rXFx0UlZfUkVHX1M1LFxcbitcXHRSVl9SRUdfUzYsXFxuK1xcdFJWX1JFR19TNyxcXG4rXFx0UlZfUkVHX1M4LFxcbitcXHRSVl9SRUdfUzksXFxuK1xcdFJWX1JFR19TMTAsXFxuK1xcdFJWX1JFR19TMTEsXFxuK307XFxuK1xcbiBlbnVtIHtcXG4gXFx0UlZfQ1RYX0ZfU0VFTl9DQUxMID1cXHRcXHRSVl9SRUdfUkEsXFxuIFxcdFJWX0NUWF9GX1NFRU5fUzEgPVxcdFxcdFJWX1JFR19TMSxcXG5AQCAtMTk4LDkgKzIyMSw4NCBAQCBzdGF0aWMgdm9pZCBlbWl0X2ltbSh1OCByZCwgczY0IHZhbCwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpXFxuIFxcdFxcdGVtaXRfYWRkaShyZCwgcmQsIGxvd2VyLCBjdHgpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBfX2J1aWxkX2VwaWxvZ3VlKGJvb2wgaXNfdGFpbF9jYWxsLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eClcXG4rLyogU3RhY2sgc3BhY2UgZm9yIHRoZSBjYWxsZWUtc2F2ZWQgcmVnaXN0ZXJzIGEgbm9ybWFsIHByb2dyYW0gc3BpbGxzLFxcbisgKiBleGNsdWRpbmcgdGhlIEJQRiBzdGFjayBpdHNlbGYuXFxuKyAqL1xcbitzdGF0aWMgaW50IG5vcm1hbF9zdGFja19hZGp1c3Qoc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpXFxuK3tcXG4rXFx0aW50IHN0YWNrX2FkanVzdCA9IDA7XFxuK1xcbitcXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1JBLCBjdHgpKVxcbitcXHRcXHRzdGFja19hZGp1c3QgKz0gODtcXG4rXFx0c3RhY2tfYWRqdXN0ICs9IDg7IC8qIFJWX1JFR19GUCAqL1xcbitcXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1MxLCBjdHgpKVxcbitcXHRcXHRzdGFja19hZGp1c3QgKz0gODtcXG4rXFx0aWYgKHNlZW5fcmVnKFJWX1JFR19TMiwgY3R4KSlcXG4rXFx0XFx0c3RhY2tfYWRqdXN0ICs9IDg7XFxuK1xcdGlmIChzZWVuX3JlZyhSVl9SRUdfUzMsIGN0eCkpXFxuK1xcdFxcdHN0YWNrX2FkanVzdCArPSA4O1xcbitcXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1M0LCBjdHgpKVxcbitcXHRcXHRzdGFja19hZGp1c3QgKz0gODtcXG4rXFx0aWYgKHNlZW5fcmVnKFJWX1JFR19TNSwgY3R4KSlcXG4rXFx0XFx0c3RhY2tfYWRqdXN0ICs9IDg7XFxuK1xcdGlmIChjdHgtXFx1MDAzZWFyZW5hX3ZtX3N0YXJ0KVxcbitcXHRcXHRzdGFja19hZGp1c3QgKz0gODtcXG4rXFx0c3RhY2tfYWRqdXN0ICs9IDg7IC8qIFJWX1JFR19UQ0MgKi9cXG4rXFxuK1xcdHJldHVybiByb3VuZF91cChzdGFja19hZGp1c3QsIFNUQUNLX0FMSUdOKTtcXG4rfVxcbitcXG4rLyogQWxsb2NhdGUgdGhlIGZyYW1lIGFuZCBzYXZlIHRoZSBjYWxsZWUtc2F2ZWQgcmVnaXN0ZXJzIHRoZSBwcm9ncmFtXFxuKyAqIGFjdHVhbGx5IGNsb2JiZXJzLCB0aGVuIHBvaW50IEZQIGF0IHRoZSBmcmFtZSB0b3AuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBlbWl0X25vcm1hbF9wcm9sb2d1ZShzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCwgaW50IHN0YWNrX2FkanVzdClcXG4re1xcbitcXHRpbnQgc3RvcmVfb2Zmc2V0ID0gc3RhY2tfYWRqdXN0IC0gODtcXG4rXFx0LyogdGFpbGNhbGwgc3RhcnRzIGhlcmUsIGVtaXQgaW5zbiBiZWZvcmUgaXQgbXVzdCBiZSBmaXhlZCAqL1xcbitcXG4rXFx0ZW1pdF9hZGRpKFJWX1JFR19TUCwgUlZfUkVHX1NQLCAtc3RhY2tfYWRqdXN0LCBjdHgpO1xcbitcXG4rXFx0aWYgKHNlZW5fcmVnKFJWX1JFR19SQSwgY3R4KSkge1xcbitcXHRcXHRlbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfUkEsIGN0eCk7XFxuK1xcdFxcdHN0b3JlX29mZnNldCAtPSA4O1xcbitcXHR9XFxuK1xcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19GUCwgY3R4KTtcXG4rXFx0c3RvcmVfb2Zmc2V0IC09IDg7XFxuK1xcdGlmIChzZWVuX3JlZyhSVl9SRUdfUzEsIGN0eCkpIHtcXG4rXFx0XFx0ZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX1MxLCBjdHgpO1xcbitcXHRcXHRzdG9yZV9vZmZzZXQgLT0gODtcXG4rXFx0fVxcbitcXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1MyLCBjdHgpKSB7XFxuK1xcdFxcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19TMiwgY3R4KTtcXG4rXFx0XFx0c3RvcmVfb2Zmc2V0IC09IDg7XFxuK1xcdH1cXG4rXFx0aWYgKHNlZW5fcmVnKFJWX1JFR19TMywgY3R4KSkge1xcbitcXHRcXHRlbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfUzMsIGN0eCk7XFxuK1xcdFxcdHN0b3JlX29mZnNldCAtPSA4O1xcbitcXHR9XFxuK1xcdGlmIChzZWVuX3JlZyhSVl9SRUdfUzQsIGN0eCkpIHtcXG4rXFx0XFx0ZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX1M0LCBjdHgpO1xcbitcXHRcXHRzdG9yZV9vZmZzZXQgLT0gODtcXG4rXFx0fVxcbitcXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1M1LCBjdHgpKSB7XFxuK1xcdFxcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19TNSwgY3R4KTtcXG4rXFx0XFx0c3RvcmVfb2Zmc2V0IC09IDg7XFxuK1xcdH1cXG4rXFx0aWYgKGN0eC1cXHUwMDNlYXJlbmFfdm1fc3RhcnQpIHtcXG4rXFx0XFx0ZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX0FSRU5BLCBjdHgpO1xcbitcXHRcXHRzdG9yZV9vZmZzZXQgLT0gODtcXG4rXFx0fVxcbitcXG4rXFx0Lyogc3RvcmUgVENDIGZyb20gUlZfUkVHX1RDQyB0byBzdGFjayAqL1xcbitcXHRlbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfVENDLCBjdHgpO1xcbitcXHRjdHgtXFx1MDAzZXRjY19vZmZzZXQgPSBzdG9yZV9vZmZzZXQ7XFxuK1xcbitcXHRlbWl0X2FkZGkoUlZfUkVHX0ZQLCBSVl9SRUdfU1AsIHN0YWNrX2FkanVzdCwgY3R4KTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZW1pdF9ub3JtYWxfcmVzdG9yZShzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCwgaW50IHN0YWNrX2FkanVzdClcXG4ge1xcbi1cXHRpbnQgc3RhY2tfYWRqdXN0ID0gY3R4LVxcdTAwM2VzdGFja19zaXplLCBzdG9yZV9vZmZzZXQgPSBzdGFja19hZGp1c3QgLSA4O1xcbitcXHRpbnQgc3RvcmVfb2Zmc2V0ID0gc3RhY2tfYWRqdXN0IC0gODtcXG4gXFxuIFxcdGlmIChzZWVuX3JlZyhSVl9SRUdfUkEsIGN0eCkpIHtcXG4gXFx0XFx0ZW1pdF9sZChSVl9SRUdfUkEsIHN0b3JlX29mZnNldCwgUlZfUkVHX1NQLCBjdHgpO1xcbkBAIC0yMzUsNiArMzMzLDY5IEBAIHN0YXRpYyB2b2lkIF9fYnVpbGRfZXBpbG9ndWUoYm9vbCBpc190YWlsX2NhbGwsIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KVxcbiBcXG4gXFx0LyogcmVzdG9yZSBUQ0MgZnJvbSBzdGFjayB0byBSVl9SRUdfVENDICovXFxuIFxcdGVtaXRfbGQoUlZfUkVHX1RDQywgY3R4LVxcdTAwM2V0Y2Nfb2Zmc2V0LCBSVl9SRUdfU1AsIGN0eCk7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIGlzX2V4Y2VwdGlvbl9wcm9nKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4re1xcbitcXHRyZXR1cm4gcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VleGNlcHRpb25fYm91bmRhcnkgfHwgcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VleGNlcHRpb25fY2I7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVtaXRfZXhjZXB0aW9uX2JvdW5kYXJ5X3Byb2xvZ3VlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGludCBzdGFja19hZGp1c3QpXFxuK3tcXG4rXFx0aW50IHN0b3JlX29mZnNldCA9IHN0YWNrX2FkanVzdCAtIDg7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0ZW1pdF9hZGRpKFJWX1JFR19TUCwgUlZfUkVHX1NQLCAtc3RhY2tfYWRqdXN0LCBjdHgpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShydl9leGNlcHRpb25fY3NhdmVfcmVncyk7IGkrKykge1xcbitcXHRcXHRlbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBydl9leGNlcHRpb25fY3NhdmVfcmVnc1tpXSwgY3R4KTtcXG4rXFx0XFx0c3RvcmVfb2Zmc2V0IC09IDg7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIHN0b3JlIFRDQyBmcm9tIFJWX1JFR19UQ0MgdG8gc3RhY2sgKi9cXG4rXFx0ZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX1RDQywgY3R4KTtcXG4rXFx0Y3R4LVxcdTAwM2V0Y2Nfb2Zmc2V0ID0gc3RvcmVfb2Zmc2V0O1xcbitcXG4rXFx0ZW1pdF9hZGRpKFJWX1JFR19GUCwgUlZfUkVHX1NQLCBzdGFja19hZGp1c3QsIGN0eCk7XFxuK31cXG4rXFxuKy8qIHJldXNlcyB0aGUgYm91bmRhcnkgcHJvZ3JhbSdzIGZyYW1lLCB3aG9zZSBmcmFtZSBwb2ludGVyXFxuKyAqIGlzIHBhc3NlZCBpbiBhMiAoc2luY2UgaXQncyB0aGUgdGhpcmQgYXJndW1lbnQgZnJvbSBicGZfdGhyb3coKSkuXFxuKyAqIFNldHRpbmcgU1AgPSBGUCAtIHN0YWNrX2FkanVzdCBsaW5lcyB0aGUgZXBpbG9ndWUncyBsb2FkcyB1cCB3aXRoXFxuKyAqIHRoZSByZWdpc3RlcnMgdGhlIGJvdW5kYXJ5IHNhdmVkLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgZW1pdF9leGNlcHRpb25fY2JfcHJvbG9ndWUoc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBpbnQgc3RhY2tfYWRqdXN0KVxcbit7XFxuK1xcdGVtaXRfbXYoUlZfUkVHX0ZQLCBSVl9SRUdfQTIsIGN0eCk7XFxuK1xcdGVtaXRfYWRkaShSVl9SRUdfU1AsIFJWX1JFR19GUCwgLXN0YWNrX2FkanVzdCwgY3R4KTtcXG4rXFx0Y3R4LVxcdTAwM2V0Y2Nfb2Zmc2V0ID0gc3RhY2tfYWRqdXN0IC0gOCAtIEFSUkFZX1NJWkUocnZfZXhjZXB0aW9uX2NzYXZlX3JlZ3MpICogODtcXG4rfVxcbitcXG4rLyogVXNlZCBieSBib3RoIHRoZSBib3VuZGFyeSBwcm9ncmFtIGFuZCB0aGUgZXhjZXB0aW9uIGNhbGxiYWNrIGFsaWtlLCBzaW5jZSB0aGVcXG4rICogY2FsbGJhY2sgcnVucyBvbiB0aGUgYm91bmRhcnkncyBmcmFtZS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGVtaXRfZXhjZXB0aW9uX3Jlc3RvcmUoc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsIGludCBzdGFja19hZGp1c3QpXFxuK3tcXG4rXFx0aW50IHN0b3JlX29mZnNldCA9IHN0YWNrX2FkanVzdCAtIDg7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUocnZfZXhjZXB0aW9uX2NzYXZlX3JlZ3MpOyBpKyspIHtcXG4rXFx0XFx0ZW1pdF9sZChydl9leGNlcHRpb25fY3NhdmVfcmVnc1tpXSwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfU1AsIGN0eCk7XFxuK1xcdFxcdHN0b3JlX29mZnNldCAtPSA4O1xcbitcXHR9XFxuK1xcdC8qIHJlc3RvcmUgVENDIGZyb20gc3RhY2sgdG8gUlZfUkVHX1RDQyAqL1xcbitcXHRlbWl0X2xkKFJWX1JFR19UQ0MsIGN0eC1cXHUwMDNldGNjX29mZnNldCwgUlZfUkVHX1NQLCBjdHgpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBfX2J1aWxkX2VwaWxvZ3VlKGJvb2wgaXNfdGFpbF9jYWxsLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eClcXG4re1xcbitcXHRpbnQgc3RhY2tfYWRqdXN0ID0gY3R4LVxcdTAwM2VzdGFja19zaXplO1xcbitcXG4rXFx0aWYgKGlzX2V4Y2VwdGlvbl9wcm9nKGN0eC1cXHUwMDNlcHJvZykpXFxuK1xcdFxcdGVtaXRfZXhjZXB0aW9uX3Jlc3RvcmUoY3R4LCBzdGFja19hZGp1c3QpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGVtaXRfbm9ybWFsX3Jlc3RvcmUoY3R4LCBzdGFja19hZGp1c3QpO1xcbiBcXG4gXFx0ZW1pdF9hZGRpKFJWX1JFR19TUCwgUlZfUkVHX1NQLCBzdGFja19hZGp1c3QsIGN0eCk7XFxuIFxcdC8qIFNldCByZXR1cm4gdmFsdWUuICovXFxuQEAgLTIwMDQsMzYgKzIxNjUsMjMgQEAgaW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGV4Y2VwdGlvbl9zdGFja19hZGp1c3Qodm9pZClcXG4re1xcbitcXHRpbnQgc3RhY2tfYWRqdXN0ID0gMDtcXG4rXFxuK1xcdHN0YWNrX2FkanVzdCArPSA4OyAvKiBSVl9SRUdfVENDICovXFxuK1xcdHN0YWNrX2FkanVzdCArPSBBUlJBWV9TSVpFKHJ2X2V4Y2VwdGlvbl9jc2F2ZV9yZWdzKSAqIDg7XFxuK1xcdHJldHVybiByb3VuZF91cChzdGFja19hZGp1c3QsIFNUQUNLX0FMSUdOKTtcXG4rfVxcbitcXG4gdm9pZCBicGZfaml0X2J1aWxkX3Byb2xvZ3VlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LCBib29sIGlzX3N1YnByb2cpXFxuIHtcXG4tXFx0aW50IGksIHN0YWNrX2FkanVzdCA9IDAsIHN0b3JlX29mZnNldCwgYnBmX3N0YWNrX2FkanVzdDtcXG4rXFx0aW50IGksIHN0YWNrX2FkanVzdCwgYnBmX3N0YWNrX2FkanVzdDtcXG4gXFxuIFxcdGJwZl9zdGFja19hZGp1c3QgPSByb3VuZF91cChjdHgtXFx1MDAzZXByb2ctXFx1MDAzZWF1eC1cXHUwMDNlc3RhY2tfZGVwdGgsIFNUQUNLX0FMSUdOKTtcXG4gXFx0aWYgKGJwZl9zdGFja19hZGp1c3QpXFxuIFxcdFxcdG1hcmtfZnAoY3R4KTtcXG4gXFxuLVxcdGlmIChzZWVuX3JlZyhSVl9SRUdfUkEsIGN0eCkpXFxuLVxcdFxcdHN0YWNrX2FkanVzdCArPSA4O1xcbi1cXHRzdGFja19hZGp1c3QgKz0gODsgLyogUlZfUkVHX0ZQICovXFxuLVxcdGlmIChzZWVuX3JlZyhSVl9SRUdfUzEsIGN0eCkpXFxuLVxcdFxcdHN0YWNrX2FkanVzdCArPSA4O1xcbi1cXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1MyLCBjdHgpKVxcbi1cXHRcXHRzdGFja19hZGp1c3QgKz0gODtcXG4tXFx0aWYgKHNlZW5fcmVnKFJWX1JFR19TMywgY3R4KSlcXG4tXFx0XFx0c3RhY2tfYWRqdXN0ICs9IDg7XFxuLVxcdGlmIChzZWVuX3JlZyhSVl9SRUdfUzQsIGN0eCkpXFxuLVxcdFxcdHN0YWNrX2FkanVzdCArPSA4O1xcbi1cXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1M1LCBjdHgpKVxcbi1cXHRcXHRzdGFja19hZGp1c3QgKz0gODtcXG4tXFx0aWYgKGN0eC1cXHUwMDNlYXJlbmFfdm1fc3RhcnQpXFxuLVxcdFxcdHN0YWNrX2FkanVzdCArPSA4O1xcbi1cXHRzdGFja19hZGp1c3QgKz0gODsgLyogUlZfUkVHX1RDQyAqL1xcbi1cXG4tXFx0c3RhY2tfYWRqdXN0ID0gcm91bmRfdXAoc3RhY2tfYWRqdXN0LCBTVEFDS19BTElHTik7XFxuLVxcdHN0YWNrX2FkanVzdCArPSBicGZfc3RhY2tfYWRqdXN0O1xcbi1cXG4tXFx0c3RvcmVfb2Zmc2V0ID0gc3RhY2tfYWRqdXN0IC0gODtcXG4tXFxuIFxcdC8qIGVtaXQga2NmaSB0eXBlIHByZWFtYmxlIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgIGZpcnN0IGluc24gKi9cXG4gXFx0ZW1pdF9rY2ZpKGlzX3N1YnByb2cgPyBjZmlfYnBmX3N1YnByb2dfaGFzaCA6IGNmaV9icGZfaGFzaCwgY3R4KTtcXG4gXFxuQEAgLTIwNDYsNDcgKzIxOTQsMTggQEAgdm9pZCBicGZfaml0X2J1aWxkX3Byb2xvZ3VlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LCBib29sIGlzX3N1YnByb2cpXFxuIFxcdGlmICghaXNfc3VicHJvZylcXG4gXFx0XFx0ZW1pdChydl9hZGRpKFJWX1JFR19UQ0MsIFJWX1JFR19aRVJPLCBNQVhfVEFJTF9DQUxMX0NOVCksIGN0eCk7XFxuIFxcbi1cXHQvKiB0YWlsY2FsbCBzdGFydHMgaGVyZSwgZW1pdCBpbnNuIGJlZm9yZSBpdCBtdXN0IGJlIGZpeGVkICovXFxuK1xcdGlmIChpc19leGNlcHRpb25fcHJvZyhjdHgtXFx1MDAzZXByb2cpKSB7XFxuK1xcdFxcdHN0YWNrX2FkanVzdCA9IGV4Y2VwdGlvbl9zdGFja19hZGp1c3QoKSArIGJwZl9zdGFja19hZGp1c3Q7XFxuIFxcbi1cXHRlbWl0X2FkZGkoUlZfUkVHX1NQLCBSVl9SRUdfU1AsIC1zdGFja19hZGp1c3QsIGN0eCk7XFxuLVxcbi1cXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1JBLCBjdHgpKSB7XFxuLVxcdFxcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19SQSwgY3R4KTtcXG4tXFx0XFx0c3RvcmVfb2Zmc2V0IC09IDg7XFxuLVxcdH1cXG4tXFx0ZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX0ZQLCBjdHgpO1xcbi1cXHRzdG9yZV9vZmZzZXQgLT0gODtcXG4tXFx0aWYgKHNlZW5fcmVnKFJWX1JFR19TMSwgY3R4KSkge1xcbi1cXHRcXHRlbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfUzEsIGN0eCk7XFxuLVxcdFxcdHN0b3JlX29mZnNldCAtPSA4O1xcbi1cXHR9XFxuLVxcdGlmIChzZWVuX3JlZyhSVl9SRUdfUzIsIGN0eCkpIHtcXG4tXFx0XFx0ZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX1MyLCBjdHgpO1xcbi1cXHRcXHRzdG9yZV9vZmZzZXQgLT0gODtcXG4tXFx0fVxcbi1cXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1MzLCBjdHgpKSB7XFxuLVxcdFxcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19TMywgY3R4KTtcXG4tXFx0XFx0c3RvcmVfb2Zmc2V0IC09IDg7XFxuLVxcdH1cXG4tXFx0aWYgKHNlZW5fcmVnKFJWX1JFR19TNCwgY3R4KSkge1xcbi1cXHRcXHRlbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfUzQsIGN0eCk7XFxuLVxcdFxcdHN0b3JlX29mZnNldCAtPSA4O1xcbi1cXHR9XFxuLVxcdGlmIChzZWVuX3JlZyhSVl9SRUdfUzUsIGN0eCkpIHtcXG4tXFx0XFx0ZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX1M1LCBjdHgpO1xcbi1cXHRcXHRzdG9yZV9vZmZzZXQgLT0gODtcXG4tXFx0fVxcbi1cXHRpZiAoY3R4LVxcdTAwM2VhcmVuYV92bV9zdGFydCkge1xcbi1cXHRcXHRlbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfQVJFTkEsIGN0eCk7XFxuLVxcdFxcdHN0b3JlX29mZnNldCAtPSA4O1xcbitcXHRcXHRpZiAoY3R4LVxcdTAwM2Vwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWV4Y2VwdGlvbl9jYilcXG4rXFx0XFx0XFx0ZW1pdF9leGNlcHRpb25fY2JfcHJvbG9ndWUoY3R4LCBzdGFja19hZGp1c3QpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGVtaXRfZXhjZXB0aW9uX2JvdW5kYXJ5X3Byb2xvZ3VlKGN0eCwgc3RhY2tfYWRqdXN0KTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0c3RhY2tfYWRqdXN0ID0gbm9ybWFsX3N0YWNrX2FkanVzdChjdHgpICsgYnBmX3N0YWNrX2FkanVzdDtcXG4rXFx0XFx0ZW1pdF9ub3JtYWxfcHJvbG9ndWUoY3R4LCBzdGFja19hZGp1c3QpO1xcbiBcXHR9XFxuIFxcbi1cXHQvKiBzdG9yZSBUQ0MgZnJvbSBSVl9SRUdfVENDIHRvIHN0YWNrICovXFxuLVxcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19UQ0MsIGN0eCk7XFxuLVxcdGN0eC1cXHUwMDNldGNjX29mZnNldCA9IHN0b3JlX29mZnNldDtcXG4tXFxuLVxcdGVtaXRfYWRkaShSVl9SRUdfRlAsIFJWX1JFR19TUCwgc3RhY2tfYWRqdXN0LCBjdHgpO1xcbi1cXG4gXFx0aWYgKGJwZl9zdGFja19hZGp1c3QpXFxuIFxcdFxcdGVtaXRfYWRkaShSVl9SRUdfUzUsIFJWX1JFR19TUCwgYnBmX3N0YWNrX2FkanVzdCwgY3R4KTtcXG4gXFxuQEAgLTIxNjEsMyArMjI4MCwxMiBAQCBib29sIGJwZl9qaXRfc3VwcG9ydHNfc3VicHJvZ190YWlsY2FsbHModm9pZClcXG4ge1xcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbitcXG4rYm9vbCBicGZfaml0X3N1cHBvcnRzX2V4Y2VwdGlvbnModm9pZClcXG4re1xcbitcXHQvKiBicGZfdGhyb3coKSB1bndpbmRzIGJ5IHdhbGtpbmcgdGhlIGZyYW1lLXBvaW50ZXIgY2hhaW4gZnJvbSBpbnNpZGVcXG4rXFx0ICogdGhlIGtlcm5lbCBiYWNrIGludG8gdGhlIEJQRiBmcmFtZXMgKHNlZSBhcmNoX2JwZl9zdGFja193YWxrKCkpLCBzb1xcbitcXHQgKiBleGNlcHRpb25zIHJlcXVpcmUgdGhlIGZyYW1lLXBvaW50ZXIgdW53aW5kZXIgdG8gYmUgZW5hYmxlZC5cXG4rXFx0ICovXFxuK1xcdHJldHVybiBJU19FTkFCTEVEKENPTkZJR19GUkFNRV9QT0lOVEVSKTtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvREVOWUxJU1QucmlzY3Y2NCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9ERU5ZTElTVC5yaXNjdjY0XFxuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggY2ExYmVhZTdmZThmMTAuLjAwMDAwMDAwMDAwMDAwXFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL0RFTllMSVNULnJpc2N2NjRcXG4rKysgL2Rldi9udWxsXFxuQEAgLTEsMiArMCwwIEBAXFxuLSMgcmlzY3Y2NCBkZW55IGxpc3QgZm9yIEJQRiBDSSBhbmQgbG9jYWwgdm10ZXN0XFxuLWV4Y2VwdGlvbnNcXHRcXHRcXHRcXHRcXHQjIEpJVCBkb2VzIG5vdCBzdXBwb3J0IGV4Y2VwdGlvbnNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTU6MDY6MzIuMDA3NDkyOTQ0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTg0OTc4MDYyNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkZSQU1FX1BPSU5URVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhcmNoX2JwZl9zdGFja193YWxrXCIsXG4gICAgXCJicGZfaml0X2J1aWxkX3Byb2xvZ3VlXCIsXG4gICAgXCJicGZfaml0X3N1cHBvcnRzX2V4Y2VwdGlvbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIEJQRiBleGNlcHRpb24gc3VwcG9ydCB0byB0aGUgUklTQy1WIGFyY2hpdGVjdHVyZS4gSXQgbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgdG8gZW1pdCBleGNlcHRpb24gcHJvbG9ndWVzIGFuZCBlcGlsb2d1ZXMsIGFuZCBpbXBsZW1lbnRzIGBhcmNoX2JwZl9zdGFja193YWxrYCBmb3IgdW53aW5kaW5nIHRoZSBzdGFjayBkdXJpbmcgQlBGIGV4Y2VwdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGtlcm5lbCBhbmQgQlBGIEpJVCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODdhNDc2MmFkOTMzYjRjOTBjOGE5ZDcxN2UwOTNmZjI4NmVkYWU3M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIzIDE1OjA2OjMwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9zdGFja3RyYWNlLmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3N0YWNrdHJhY2UuaFxuaW5kZXggYjE0OTVhN2UwNmNlNjkuLmZkMWZmMDRhMDQwZTk1IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9zdGFja3RyYWNlLmhcbisrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3RhY2t0cmFjZS5oXG5AQCAtMTEsOCArMTEsMTEgQEAgc3RydWN0IHN0YWNrZnJhbWUge1xuIFx0dW5zaWduZWQgbG9uZyByYTtcbiB9O1xuIFxuK3R5cGVkZWYgYm9vbCAoKndhbGtfc3RhY2tmcmFtZV9mbikodm9pZCAqYXJnLCB1bnNpZ25lZCBsb25nIHBjLFxuK1x0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBzcCwgdW5zaWduZWQgbG9uZyBmcCk7XG4rXG4gZXh0ZXJuIHZvaWQgbm90cmFjZSB3YWxrX3N0YWNrZnJhbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyxcbi1cdFx0XHRcdCAgICBib29sICgqZm4pKHZvaWQgKiwgdW5zaWduZWQgbG9uZyksIHZvaWQgKmFyZyk7XG4rXHRcdFx0XHQgICAgd2Fsa19zdGFja2ZyYW1lX2ZuIGZuLCB2b2lkICphcmcpO1xuIGV4dGVybiB2b2lkIGR1bXBfYmFja3RyYWNlKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssXG4gXHRcdFx0ICAgY29uc3QgY2hhciAqbG9nbHZsKTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2tlcm5lbC9wZXJmX2NhbGxjaGFpbi5jIGIvYXJjaC9yaXNjdi9rZXJuZWwvcGVyZl9jYWxsY2hhaW4uY1xuaW5kZXggYjQ2NWJjOWViODcwZWMuLjkzYTEyZDUzYWEyNmQ3IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rZXJuZWwvcGVyZl9jYWxsY2hhaW4uY1xuKysrIGIvYXJjaC9yaXNjdi9rZXJuZWwvcGVyZl9jYWxsY2hhaW4uY1xuQEAgLTIsNiArMiw3IEBAXG4gLyogQ29weXJpZ2h0IChDKSAyMDE5IEhhbmd6aG91IEMtU0tZIE1pY3Jvc3lzdGVtcyBjby4sbHRkLiAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcmZfZXZlbnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0YWNrdHJhY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS9zdGFja3RyYWNlLmhcdTAwM2VcbkBAIC00NCw1ICs0NSw1IEBAIHZvaWQgcGVyZl9jYWxsY2hhaW5fa2VybmVsKHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeV9jdHggKmVudHJ5LFxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHR3YWxrX3N0YWNrZnJhbWUoTlVMTCwgcmVncywgZmlsbF9jYWxsY2hhaW4sIGVudHJ5KTtcbitcdGFyY2hfc3RhY2tfd2FsayhmaWxsX2NhbGxjaGFpbiwgZW50cnksIGN1cnJlbnQsIHJlZ3MpO1xuIH1cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2tlcm5lbC9zdGFja3RyYWNlLmMgYi9hcmNoL3Jpc2N2L2tlcm5lbC9zdGFja3RyYWNlLmNcbmluZGV4IGM3NTU1NDQ3MTQ5YmZlLi5jMGYyMzkzZTUxNjNjYiAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva2VybmVsL3N0YWNrdHJhY2UuY1xuKysrIGIvYXJjaC9yaXNjdi9rZXJuZWwvc3RhY2t0cmFjZS5jXG5AQCAtNSw2ICs1LDcgQEBcbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbHRlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2FsbHN5bXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9kZWJ1Zy5oXHUwMDNlXG5AQCAtNDYsNyArNDcsNyBAQCBzdGF0aWMgaW5saW5lIGludCBmcF9pc192YWxpZCh1bnNpZ25lZCBsb25nIGZwLCB1bnNpZ25lZCBsb25nIHNwKVxuIH1cbiBcbiB2b2lkIG5vdHJhY2Ugd2Fsa19zdGFja2ZyYW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXG4tXHRcdFx0ICAgICBib29sICgqZm4pKHZvaWQgKiwgdW5zaWduZWQgbG9uZyksIHZvaWQgKmFyZylcbitcdFx0XHQgICAgIHdhbGtfc3RhY2tmcmFtZV9mbiBmbiwgdm9pZCAqYXJnKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZnAsIHNwLCBwYztcbiBcdGludCBncmFwaF9pZHggPSAwO1xuQEAgLTcxLDcgKzcyLDkgQEAgdm9pZCBub3RyYWNlIHdhbGtfc3RhY2tmcmFtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzLFxuIFx0Zm9yICg7Oykge1xuIFx0XHRzdHJ1Y3Qgc3RhY2tmcmFtZSAqZnJhbWU7XG4gXG4tXHRcdGlmICh1bmxpa2VseSghX19rZXJuZWxfdGV4dF9hZGRyZXNzKHBjKSB8fCAobGV2ZWwrKyBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2ICFmbihhcmcsIHBjKSkpKVxuK1x0XHQvKiBwYyBiZWxvbmdzIHRvIHRoZSBmdW5jdGlvbiB3aG9zZSBmcmFtZSBwb2ludGVyIGlzIGZwICovXG4rXHRcdGlmICh1bmxpa2VseSghX19rZXJuZWxfdGV4dF9hZGRyZXNzKHBjKSB8fFxuK1x0XHRcdCAgICAgKGxldmVsKysgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiAhZm4oYXJnLCBwYywgc3AsIGZwKSkpKVxuIFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRpZiAodW5saWtlbHkoIWZwX2lzX3ZhbGlkKGZwLCBzcCkpKVxuQEAgLTkxLDcgKzk0LDcgQEAgdm9pZCBub3RyYWNlIHdhbGtfc3RhY2tmcmFtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzLFxuIFx0XHRcdFx0XHRcdCAgIFx1MDAyNmZyYW1lLVx1MDAzZXJhKTtcbiBcdFx0XHRpZiAocGMgXHUwMDNlPSAodW5zaWduZWQgbG9uZyloYW5kbGVfZXhjZXB0aW9uIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICBwYyBcdTAwM2MgKHVuc2lnbmVkIGxvbmcpXHUwMDI2cmV0X2Zyb21fZXhjZXB0aW9uX2VuZCkge1xuLVx0XHRcdFx0aWYgKHVubGlrZWx5KCFmbihhcmcsIHBjKSkpXG4rXHRcdFx0XHRpZiAodW5saWtlbHkoIWZuKGFyZywgcGMsIHNwLCBmcCkpKVxuIFx0XHRcdFx0XHRicmVhaztcbiBcbiBcdFx0XHRcdHBjID0gKChzdHJ1Y3QgcHRfcmVncyAqKXNwKS1cdTAwM2VlcGM7XG5AQCAtMTAyLDEwICsxMDUsMzQgQEAgdm9pZCBub3RyYWNlIHdhbGtfc3RhY2tmcmFtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzLFxuIFx0fVxuIH1cbiBcbitzdHJ1Y3QgYnBmX3Vud2luZF9jb25zdW1lX2VudHJ5X2RhdGEge1xuK1x0Ym9vbCAoKmNvbnN1bWVfZW50cnkpKHZvaWQgKmNvb2tpZSwgdTY0IGlwLCB1NjQgc3AsIHU2NCBmcCk7XG4rXHR2b2lkICpjb29raWU7XG4rfTtcbitcbitzdGF0aWMgYm9vbCBicGZfdW53aW5kX2NvbnN1bWVfZW50cnkodm9pZCAqYXJnLCB1bnNpZ25lZCBsb25nIHBjLFxuK1x0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIHNwLCB1bnNpZ25lZCBsb25nIGZwKVxuK3tcbitcdHN0cnVjdCBicGZfdW53aW5kX2NvbnN1bWVfZW50cnlfZGF0YSAqZGF0YSA9IGFyZztcbitcbitcdHJldHVybiBkYXRhLVx1MDAzZWNvbnN1bWVfZW50cnkoZGF0YS1cdTAwM2Vjb29raWUsIHBjLCBzcCwgZnApO1xuK31cbitcbit2b2lkIG5vdHJhY2UgYXJjaF9icGZfc3RhY2tfd2Fsayhib29sICgqY29uc3VtZV9mbikodm9pZCAqY29va2llLCB1NjQgaXAsIHU2NCBzcCwgdTY0IGJwKSxcbitcdFx0XHRcdCB2b2lkICpjb29raWUpXG4re1xuK1x0c3RydWN0IGJwZl91bndpbmRfY29uc3VtZV9lbnRyeV9kYXRhIGRhdGEgPSB7XG4rXHRcdC5jb25zdW1lX2VudHJ5ID0gY29uc3VtZV9mbixcbitcdFx0LmNvb2tpZSA9IGNvb2tpZSxcbitcdH07XG4rXG4rXHR3YWxrX3N0YWNrZnJhbWUoY3VycmVudCwgTlVMTCwgYnBmX3Vud2luZF9jb25zdW1lX2VudHJ5LCBcdTAwMjZkYXRhKTtcbit9XG4rXG4gI2Vsc2UgLyogIUNPTkZJR19GUkFNRV9QT0lOVEVSICovXG4gXG4gdm9pZCBub3RyYWNlIHdhbGtfc3RhY2tmcmFtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssXG4tXHRzdHJ1Y3QgcHRfcmVncyAqcmVncywgYm9vbCAoKmZuKSh2b2lkICosIHVuc2lnbmVkIGxvbmcpLCB2b2lkICphcmcpXG4rXHRzdHJ1Y3QgcHRfcmVncyAqcmVncywgd2Fsa19zdGFja2ZyYW1lX2ZuIGZuLCB2b2lkICphcmcpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBzcCwgcGM7XG4gXHR1bnNpZ25lZCBsb25nICprc3A7XG5AQCAtMTI3LDcgKzE1NCw4IEBAIHZvaWQgbm90cmFjZSB3YWxrX3N0YWNrZnJhbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLFxuIFxuIFx0a3NwID0gKHVuc2lnbmVkIGxvbmcgKilzcDtcbiBcdHdoaWxlICgha3N0YWNrX2VuZChrc3ApKSB7XG4tXHRcdGlmIChfX2tlcm5lbF90ZXh0X2FkZHJlc3MocGMpIFx1MDAyNlx1MDAyNiB1bmxpa2VseSghZm4oYXJnLCBwYykpKVxuK1x0XHRpZiAoX19rZXJuZWxfdGV4dF9hZGRyZXNzKHBjKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHVubGlrZWx5KCFmbihhcmcsIHBjLCAodW5zaWduZWQgbG9uZylrc3AsIDApKSlcbiBcdFx0XHRicmVhaztcbiBcdFx0cGMgPSBSRUFEX09OQ0VfTk9DSEVDSygqa3NwKyspO1xuIFx0fVxuQEAgLTEzNSw3ICsxNjMsOCBAQCB2b2lkIG5vdHJhY2Ugd2Fsa19zdGFja2ZyYW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcbiBcbiAjZW5kaWYgLyogQ09ORklHX0ZSQU1FX1BPSU5URVIgKi9cbiBcbi1zdGF0aWMgYm9vbCBwcmludF90cmFjZV9hZGRyZXNzKHZvaWQgKmFyZywgdW5zaWduZWQgbG9uZyBwYylcbitzdGF0aWMgYm9vbCBwcmludF90cmFjZV9hZGRyZXNzKHZvaWQgKmFyZywgdW5zaWduZWQgbG9uZyBwYyxcbitcdFx0XHRcdHVuc2lnbmVkIGxvbmcgc3AsIHVuc2lnbmVkIGxvbmcgZnApXG4ge1xuIFx0Y29uc3QgY2hhciAqbG9nbHZsID0gYXJnO1xuIFxuQEAgLTE1NSw3ICsxODQsOCBAQCB2b2lkIHNob3dfc3RhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1bnNpZ25lZCBsb25nICpzcCwgY29uc3QgY2hhciAqbG9nbHZsKVxuIFx0ZHVtcF9iYWNrdHJhY2UoTlVMTCwgdGFzaywgbG9nbHZsKTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgc2F2ZV93Y2hhbih2b2lkICphcmcsIHVuc2lnbmVkIGxvbmcgcGMpXG4rc3RhdGljIGJvb2wgc2F2ZV93Y2hhbih2b2lkICphcmcsIHVuc2lnbmVkIGxvbmcgcGMsXG4rXHRcdCAgICAgICB1bnNpZ25lZCBsb25nIHNwLCB1bnNpZ25lZCBsb25nIGZwKVxuIHtcbiBcdGlmICghaW5fc2NoZWRfZnVuY3Rpb25zKHBjKSkge1xuIFx0XHR1bnNpZ25lZCBsb25nICpwID0gYXJnO1xuQEAgLTE3NiwxMCArMjA2LDI4IEBAIHVuc2lnbmVkIGxvbmcgX19nZXRfd2NoYW4oc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxuIFx0cmV0dXJuIHBjO1xuIH1cbiBcbitzdHJ1Y3Qgd2Fsa19zdGFja2ZyYW1lX2NvbnN1bWVfZW50cnlfZGF0YSB7XG4rXHRzdGFja190cmFjZV9jb25zdW1lX2ZuIGNvbnN1bWVfZW50cnk7XG4rXHR2b2lkICpjb29raWU7XG4rfTtcbitcbitzdGF0aWMgYm9vbCB3YWxrX3N0YWNrZnJhbWVfY29uc3VtZV9lbnRyeSh2b2lkICphcmcsIHVuc2lnbmVkIGxvbmcgcGMsXG4rXHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBzcCwgdW5zaWduZWQgbG9uZyBmcClcbit7XG4rXHRzdHJ1Y3Qgd2Fsa19zdGFja2ZyYW1lX2NvbnN1bWVfZW50cnlfZGF0YSAqZGF0YSA9IGFyZztcbitcbitcdHJldHVybiBkYXRhLVx1MDAzZWNvbnN1bWVfZW50cnkoZGF0YS1cdTAwM2Vjb29raWUsIHBjKTtcbit9XG4rXG4gbm9pbmxpbmUgbm9pbnN0ciB2b2lkIGFyY2hfc3RhY2tfd2FsayhzdGFja190cmFjZV9jb25zdW1lX2ZuIGNvbnN1bWVfZW50cnksIHZvaWQgKmNvb2tpZSxcbiBcdFx0ICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuIHtcbi1cdHdhbGtfc3RhY2tmcmFtZSh0YXNrLCByZWdzLCBjb25zdW1lX2VudHJ5LCBjb29raWUpO1xuK1x0c3RydWN0IHdhbGtfc3RhY2tmcmFtZV9jb25zdW1lX2VudHJ5X2RhdGEgZGF0YSA9IHtcbitcdFx0LmNvbnN1bWVfZW50cnkgPSBjb25zdW1lX2VudHJ5LFxuK1x0XHQuY29va2llID0gY29va2llLFxuK1x0fTtcbitcbitcdHdhbGtfc3RhY2tmcmFtZSh0YXNrLCByZWdzLCB3YWxrX3N0YWNrZnJhbWVfY29uc3VtZV9lbnRyeSwgXHUwMDI2ZGF0YSk7XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbmluZGV4IGFkMDg5YTlhNGVhOWFjLi5lMGMyZjczYmM2NDZhMyAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbisrKyBiL2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmNcbkBAIC01Niw2ICs1NiwyOSBAQCBzdGF0aWMgY29uc3QgaW50IHB0X3JlZ21hcFtdID0ge1xuIFx0W1JWX1JFR19UMF0gPSBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgdDApLFxuIH07XG4gXG4rLyogRnVsbCBzZXQgb2YgUklTQy1WIGNhbGxlZS1zYXZlZCBHUCByZWdpc3RlcnMgKHJhLCBzMC1zMTEpIHNhdmVkIGJ5IGEgcHJvZ3JhbVxuKyAqIGFjdGluZyBhcyBhbiBleGNlcHRpb24gYm91bmRhcnksIGluIHRoZSBvcmRlciB0aGV5IGFyZSBzdG9yZWQgb24gdGhlIHN0YWNrLlxuKyAqIFJBIGFuZCBGUCBjb21lIGZpcnN0IHNvIHRoZSBzYXZlZCByYS9mcCBwYWlyIGZvcm1zIGEgdmFsaWQgc3RhY2tmcmFtZSByZWNvcmRcbisgKiBhdCBbRlAtOF0vW0ZQLTE2XSBmb3IgdGhlIHVud2luZGVyLiBUaGUgZXhjZXB0aW9uIGNhbGxiYWNrIHJldXNlcyB0aGVcbisgKiBib3VuZGFyeSBwcm9ncmFtJ3MgZnJhbWUgYW5kIHJlc3RvcmVzIHRoaXMgc2FtZSBzZXQgaW4gaXRzIGVwaWxvZ3VlLCBzbyBib3RoXG4rICogcGF0aHMgbXVzdCBhZ3JlZSBvbiB0aGUgY29udGVudHMgYW5kIG9yZGVyaW5nIG9mIHRoaXMgbGlzdC5cbisgKi9cbitzdGF0aWMgY29uc3QgaW50IHJ2X2V4Y2VwdGlvbl9jc2F2ZV9yZWdzW10gPSB7XG4rXHRSVl9SRUdfUkEsXG4rXHRSVl9SRUdfRlAsXG4rXHRSVl9SRUdfUzEsXG4rXHRSVl9SRUdfUzIsXG4rXHRSVl9SRUdfUzMsXG4rXHRSVl9SRUdfUzQsXG4rXHRSVl9SRUdfUzUsXG4rXHRSVl9SRUdfUzYsXG4rXHRSVl9SRUdfUzcsXG4rXHRSVl9SRUdfUzgsXG4rXHRSVl9SRUdfUzksXG4rXHRSVl9SRUdfUzEwLFxuK1x0UlZfUkVHX1MxMSxcbit9O1xuK1xuIGVudW0ge1xuIFx0UlZfQ1RYX0ZfU0VFTl9DQUxMID1cdFx0UlZfUkVHX1JBLFxuIFx0UlZfQ1RYX0ZfU0VFTl9TMSA9XHRcdFJWX1JFR19TMSxcbkBAIC0xOTgsOSArMjIxLDg0IEBAIHN0YXRpYyB2b2lkIGVtaXRfaW1tKHU4IHJkLCBzNjQgdmFsLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eClcbiBcdFx0ZW1pdF9hZGRpKHJkLCByZCwgbG93ZXIsIGN0eCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIF9fYnVpbGRfZXBpbG9ndWUoYm9vbCBpc190YWlsX2NhbGwsIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KVxuKy8qIFN0YWNrIHNwYWNlIGZvciB0aGUgY2FsbGVlLXNhdmVkIHJlZ2lzdGVycyBhIG5vcm1hbCBwcm9ncmFtIHNwaWxscyxcbisgKiBleGNsdWRpbmcgdGhlIEJQRiBzdGFjayBpdHNlbGYuXG4rICovXG4rc3RhdGljIGludCBub3JtYWxfc3RhY2tfYWRqdXN0KHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KVxuK3tcbitcdGludCBzdGFja19hZGp1c3QgPSAwO1xuK1xuK1x0aWYgKHNlZW5fcmVnKFJWX1JFR19SQSwgY3R4KSlcbitcdFx0c3RhY2tfYWRqdXN0ICs9IDg7XG4rXHRzdGFja19hZGp1c3QgKz0gODsgLyogUlZfUkVHX0ZQICovXG4rXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1MxLCBjdHgpKVxuK1x0XHRzdGFja19hZGp1c3QgKz0gODtcbitcdGlmIChzZWVuX3JlZyhSVl9SRUdfUzIsIGN0eCkpXG4rXHRcdHN0YWNrX2FkanVzdCArPSA4O1xuK1x0aWYgKHNlZW5fcmVnKFJWX1JFR19TMywgY3R4KSlcbitcdFx0c3RhY2tfYWRqdXN0ICs9IDg7XG4rXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1M0LCBjdHgpKVxuK1x0XHRzdGFja19hZGp1c3QgKz0gODtcbitcdGlmIChzZWVuX3JlZyhSVl9SRUdfUzUsIGN0eCkpXG4rXHRcdHN0YWNrX2FkanVzdCArPSA4O1xuK1x0aWYgKGN0eC1cdTAwM2VhcmVuYV92bV9zdGFydClcbitcdFx0c3RhY2tfYWRqdXN0ICs9IDg7XG4rXHRzdGFja19hZGp1c3QgKz0gODsgLyogUlZfUkVHX1RDQyAqL1xuK1xuK1x0cmV0dXJuIHJvdW5kX3VwKHN0YWNrX2FkanVzdCwgU1RBQ0tfQUxJR04pO1xuK31cbitcbisvKiBBbGxvY2F0ZSB0aGUgZnJhbWUgYW5kIHNhdmUgdGhlIGNhbGxlZS1zYXZlZCByZWdpc3RlcnMgdGhlIHByb2dyYW1cbisgKiBhY3R1YWxseSBjbG9iYmVycywgdGhlbiBwb2ludCBGUCBhdCB0aGUgZnJhbWUgdG9wLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGVtaXRfbm9ybWFsX3Byb2xvZ3VlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LCBpbnQgc3RhY2tfYWRqdXN0KVxuK3tcbitcdGludCBzdG9yZV9vZmZzZXQgPSBzdGFja19hZGp1c3QgLSA4O1xuK1x0LyogdGFpbGNhbGwgc3RhcnRzIGhlcmUsIGVtaXQgaW5zbiBiZWZvcmUgaXQgbXVzdCBiZSBmaXhlZCAqL1xuK1xuK1x0ZW1pdF9hZGRpKFJWX1JFR19TUCwgUlZfUkVHX1NQLCAtc3RhY2tfYWRqdXN0LCBjdHgpO1xuK1xuK1x0aWYgKHNlZW5fcmVnKFJWX1JFR19SQSwgY3R4KSkge1xuK1x0XHRlbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfUkEsIGN0eCk7XG4rXHRcdHN0b3JlX29mZnNldCAtPSA4O1xuK1x0fVxuK1x0ZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX0ZQLCBjdHgpO1xuK1x0c3RvcmVfb2Zmc2V0IC09IDg7XG4rXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1MxLCBjdHgpKSB7XG4rXHRcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19TMSwgY3R4KTtcbitcdFx0c3RvcmVfb2Zmc2V0IC09IDg7XG4rXHR9XG4rXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1MyLCBjdHgpKSB7XG4rXHRcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19TMiwgY3R4KTtcbitcdFx0c3RvcmVfb2Zmc2V0IC09IDg7XG4rXHR9XG4rXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1MzLCBjdHgpKSB7XG4rXHRcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19TMywgY3R4KTtcbitcdFx0c3RvcmVfb2Zmc2V0IC09IDg7XG4rXHR9XG4rXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1M0LCBjdHgpKSB7XG4rXHRcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19TNCwgY3R4KTtcbitcdFx0c3RvcmVfb2Zmc2V0IC09IDg7XG4rXHR9XG4rXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1M1LCBjdHgpKSB7XG4rXHRcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19TNSwgY3R4KTtcbitcdFx0c3RvcmVfb2Zmc2V0IC09IDg7XG4rXHR9XG4rXHRpZiAoY3R4LVx1MDAzZWFyZW5hX3ZtX3N0YXJ0KSB7XG4rXHRcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19BUkVOQSwgY3R4KTtcbitcdFx0c3RvcmVfb2Zmc2V0IC09IDg7XG4rXHR9XG4rXG4rXHQvKiBzdG9yZSBUQ0MgZnJvbSBSVl9SRUdfVENDIHRvIHN0YWNrICovXG4rXHRlbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfVENDLCBjdHgpO1xuK1x0Y3R4LVx1MDAzZXRjY19vZmZzZXQgPSBzdG9yZV9vZmZzZXQ7XG4rXG4rXHRlbWl0X2FkZGkoUlZfUkVHX0ZQLCBSVl9SRUdfU1AsIHN0YWNrX2FkanVzdCwgY3R4KTtcbit9XG4rXG4rc3RhdGljIHZvaWQgZW1pdF9ub3JtYWxfcmVzdG9yZShzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCwgaW50IHN0YWNrX2FkanVzdClcbiB7XG4tXHRpbnQgc3RhY2tfYWRqdXN0ID0gY3R4LVx1MDAzZXN0YWNrX3NpemUsIHN0b3JlX29mZnNldCA9IHN0YWNrX2FkanVzdCAtIDg7XG4rXHRpbnQgc3RvcmVfb2Zmc2V0ID0gc3RhY2tfYWRqdXN0IC0gODtcbiBcbiBcdGlmIChzZWVuX3JlZyhSVl9SRUdfUkEsIGN0eCkpIHtcbiBcdFx0ZW1pdF9sZChSVl9SRUdfUkEsIHN0b3JlX29mZnNldCwgUlZfUkVHX1NQLCBjdHgpO1xuQEAgLTIzNSw2ICszMzMsNjkgQEAgc3RhdGljIHZvaWQgX19idWlsZF9lcGlsb2d1ZShib29sIGlzX3RhaWxfY2FsbCwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpXG4gXG4gXHQvKiByZXN0b3JlIFRDQyBmcm9tIHN0YWNrIHRvIFJWX1JFR19UQ0MgKi9cbiBcdGVtaXRfbGQoUlZfUkVHX1RDQywgY3R4LVx1MDAzZXRjY19vZmZzZXQsIFJWX1JFR19TUCwgY3R4KTtcbit9XG4rXG4rc3RhdGljIGJvb2wgaXNfZXhjZXB0aW9uX3Byb2coY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuK3tcbitcdHJldHVybiBwcm9nLVx1MDAzZWF1eC1cdTAwM2VleGNlcHRpb25fYm91bmRhcnkgfHwgcHJvZy1cdTAwM2VhdXgtXHUwMDNlZXhjZXB0aW9uX2NiO1xuK31cbitcbitzdGF0aWMgdm9pZCBlbWl0X2V4Y2VwdGlvbl9ib3VuZGFyeV9wcm9sb2d1ZShzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcbitcdFx0XHRcdFx0ICAgICBpbnQgc3RhY2tfYWRqdXN0KVxuK3tcbitcdGludCBzdG9yZV9vZmZzZXQgPSBzdGFja19hZGp1c3QgLSA4O1xuK1x0aW50IGk7XG4rXG4rXHRlbWl0X2FkZGkoUlZfUkVHX1NQLCBSVl9SRUdfU1AsIC1zdGFja19hZGp1c3QsIGN0eCk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHJ2X2V4Y2VwdGlvbl9jc2F2ZV9yZWdzKTsgaSsrKSB7XG4rXHRcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIHJ2X2V4Y2VwdGlvbl9jc2F2ZV9yZWdzW2ldLCBjdHgpO1xuK1x0XHRzdG9yZV9vZmZzZXQgLT0gODtcbitcdH1cbitcbitcdC8qIHN0b3JlIFRDQyBmcm9tIFJWX1JFR19UQ0MgdG8gc3RhY2sgKi9cbitcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19UQ0MsIGN0eCk7XG4rXHRjdHgtXHUwMDNldGNjX29mZnNldCA9IHN0b3JlX29mZnNldDtcbitcbitcdGVtaXRfYWRkaShSVl9SRUdfRlAsIFJWX1JFR19TUCwgc3RhY2tfYWRqdXN0LCBjdHgpO1xuK31cbitcbisvKiByZXVzZXMgdGhlIGJvdW5kYXJ5IHByb2dyYW0ncyBmcmFtZSwgd2hvc2UgZnJhbWUgcG9pbnRlclxuKyAqIGlzIHBhc3NlZCBpbiBhMiAoc2luY2UgaXQncyB0aGUgdGhpcmQgYXJndW1lbnQgZnJvbSBicGZfdGhyb3coKSkuXG4rICogU2V0dGluZyBTUCA9IEZQIC0gc3RhY2tfYWRqdXN0IGxpbmVzIHRoZSBlcGlsb2d1ZSdzIGxvYWRzIHVwIHdpdGhcbisgKiB0aGUgcmVnaXN0ZXJzIHRoZSBib3VuZGFyeSBzYXZlZC5cbisgKi9cbitzdGF0aWMgdm9pZCBlbWl0X2V4Y2VwdGlvbl9jYl9wcm9sb2d1ZShzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcbitcdFx0XHRcdCAgICAgICBpbnQgc3RhY2tfYWRqdXN0KVxuK3tcbitcdGVtaXRfbXYoUlZfUkVHX0ZQLCBSVl9SRUdfQTIsIGN0eCk7XG4rXHRlbWl0X2FkZGkoUlZfUkVHX1NQLCBSVl9SRUdfRlAsIC1zdGFja19hZGp1c3QsIGN0eCk7XG4rXHRjdHgtXHUwMDNldGNjX29mZnNldCA9IHN0YWNrX2FkanVzdCAtIDggLSBBUlJBWV9TSVpFKHJ2X2V4Y2VwdGlvbl9jc2F2ZV9yZWdzKSAqIDg7XG4rfVxuK1xuKy8qIFVzZWQgYnkgYm90aCB0aGUgYm91bmRhcnkgcHJvZ3JhbSBhbmQgdGhlIGV4Y2VwdGlvbiBjYWxsYmFjayBhbGlrZSwgc2luY2UgdGhlXG4rICogY2FsbGJhY2sgcnVucyBvbiB0aGUgYm91bmRhcnkncyBmcmFtZS5cbisgKi9cbitzdGF0aWMgdm9pZCBlbWl0X2V4Y2VwdGlvbl9yZXN0b3JlKHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LCBpbnQgc3RhY2tfYWRqdXN0KVxuK3tcbitcdGludCBzdG9yZV9vZmZzZXQgPSBzdGFja19hZGp1c3QgLSA4O1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHJ2X2V4Y2VwdGlvbl9jc2F2ZV9yZWdzKTsgaSsrKSB7XG4rXHRcdGVtaXRfbGQocnZfZXhjZXB0aW9uX2NzYXZlX3JlZ3NbaV0sIHN0b3JlX29mZnNldCwgUlZfUkVHX1NQLCBjdHgpO1xuK1x0XHRzdG9yZV9vZmZzZXQgLT0gODtcbitcdH1cbitcdC8qIHJlc3RvcmUgVENDIGZyb20gc3RhY2sgdG8gUlZfUkVHX1RDQyAqL1xuK1x0ZW1pdF9sZChSVl9SRUdfVENDLCBjdHgtXHUwMDNldGNjX29mZnNldCwgUlZfUkVHX1NQLCBjdHgpO1xuK31cbitcbitzdGF0aWMgdm9pZCBfX2J1aWxkX2VwaWxvZ3VlKGJvb2wgaXNfdGFpbF9jYWxsLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eClcbit7XG4rXHRpbnQgc3RhY2tfYWRqdXN0ID0gY3R4LVx1MDAzZXN0YWNrX3NpemU7XG4rXG4rXHRpZiAoaXNfZXhjZXB0aW9uX3Byb2coY3R4LVx1MDAzZXByb2cpKVxuK1x0XHRlbWl0X2V4Y2VwdGlvbl9yZXN0b3JlKGN0eCwgc3RhY2tfYWRqdXN0KTtcbitcdGVsc2VcbitcdFx0ZW1pdF9ub3JtYWxfcmVzdG9yZShjdHgsIHN0YWNrX2FkanVzdCk7XG4gXG4gXHRlbWl0X2FkZGkoUlZfUkVHX1NQLCBSVl9SRUdfU1AsIHN0YWNrX2FkanVzdCwgY3R4KTtcbiBcdC8qIFNldCByZXR1cm4gdmFsdWUuICovXG5AQCAtMjAwNCwzNiArMjE2NSwyMyBAQCBpbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IGV4Y2VwdGlvbl9zdGFja19hZGp1c3Qodm9pZClcbit7XG4rXHRpbnQgc3RhY2tfYWRqdXN0ID0gMDtcbitcbitcdHN0YWNrX2FkanVzdCArPSA4OyAvKiBSVl9SRUdfVENDICovXG4rXHRzdGFja19hZGp1c3QgKz0gQVJSQVlfU0laRShydl9leGNlcHRpb25fY3NhdmVfcmVncykgKiA4O1xuK1x0cmV0dXJuIHJvdW5kX3VwKHN0YWNrX2FkanVzdCwgU1RBQ0tfQUxJR04pO1xuK31cbitcbiB2b2lkIGJwZl9qaXRfYnVpbGRfcHJvbG9ndWUoc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsIGJvb2wgaXNfc3VicHJvZylcbiB7XG4tXHRpbnQgaSwgc3RhY2tfYWRqdXN0ID0gMCwgc3RvcmVfb2Zmc2V0LCBicGZfc3RhY2tfYWRqdXN0O1xuK1x0aW50IGksIHN0YWNrX2FkanVzdCwgYnBmX3N0YWNrX2FkanVzdDtcbiBcbiBcdGJwZl9zdGFja19hZGp1c3QgPSByb3VuZF91cChjdHgtXHUwMDNlcHJvZy1cdTAwM2VhdXgtXHUwMDNlc3RhY2tfZGVwdGgsIFNUQUNLX0FMSUdOKTtcbiBcdGlmIChicGZfc3RhY2tfYWRqdXN0KVxuIFx0XHRtYXJrX2ZwKGN0eCk7XG4gXG4tXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1JBLCBjdHgpKVxuLVx0XHRzdGFja19hZGp1c3QgKz0gODtcbi1cdHN0YWNrX2FkanVzdCArPSA4OyAvKiBSVl9SRUdfRlAgKi9cbi1cdGlmIChzZWVuX3JlZyhSVl9SRUdfUzEsIGN0eCkpXG4tXHRcdHN0YWNrX2FkanVzdCArPSA4O1xuLVx0aWYgKHNlZW5fcmVnKFJWX1JFR19TMiwgY3R4KSlcbi1cdFx0c3RhY2tfYWRqdXN0ICs9IDg7XG4tXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1MzLCBjdHgpKVxuLVx0XHRzdGFja19hZGp1c3QgKz0gODtcbi1cdGlmIChzZWVuX3JlZyhSVl9SRUdfUzQsIGN0eCkpXG4tXHRcdHN0YWNrX2FkanVzdCArPSA4O1xuLVx0aWYgKHNlZW5fcmVnKFJWX1JFR19TNSwgY3R4KSlcbi1cdFx0c3RhY2tfYWRqdXN0ICs9IDg7XG4tXHRpZiAoY3R4LVx1MDAzZWFyZW5hX3ZtX3N0YXJ0KVxuLVx0XHRzdGFja19hZGp1c3QgKz0gODtcbi1cdHN0YWNrX2FkanVzdCArPSA4OyAvKiBSVl9SRUdfVENDICovXG4tXG4tXHRzdGFja19hZGp1c3QgPSByb3VuZF91cChzdGFja19hZGp1c3QsIFNUQUNLX0FMSUdOKTtcbi1cdHN0YWNrX2FkanVzdCArPSBicGZfc3RhY2tfYWRqdXN0O1xuLVxuLVx0c3RvcmVfb2Zmc2V0ID0gc3RhY2tfYWRqdXN0IC0gODtcbi1cbiBcdC8qIGVtaXQga2NmaSB0eXBlIHByZWFtYmxlIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgIGZpcnN0IGluc24gKi9cbiBcdGVtaXRfa2NmaShpc19zdWJwcm9nID8gY2ZpX2JwZl9zdWJwcm9nX2hhc2ggOiBjZmlfYnBmX2hhc2gsIGN0eCk7XG4gXG5AQCAtMjA0Niw0NyArMjE5NCwxOCBAQCB2b2lkIGJwZl9qaXRfYnVpbGRfcHJvbG9ndWUoc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsIGJvb2wgaXNfc3VicHJvZylcbiBcdGlmICghaXNfc3VicHJvZylcbiBcdFx0ZW1pdChydl9hZGRpKFJWX1JFR19UQ0MsIFJWX1JFR19aRVJPLCBNQVhfVEFJTF9DQUxMX0NOVCksIGN0eCk7XG4gXG4tXHQvKiB0YWlsY2FsbCBzdGFydHMgaGVyZSwgZW1pdCBpbnNuIGJlZm9yZSBpdCBtdXN0IGJlIGZpeGVkICovXG4rXHRpZiAoaXNfZXhjZXB0aW9uX3Byb2coY3R4LVx1MDAzZXByb2cpKSB7XG4rXHRcdHN0YWNrX2FkanVzdCA9IGV4Y2VwdGlvbl9zdGFja19hZGp1c3QoKSArIGJwZl9zdGFja19hZGp1c3Q7XG4gXG4tXHRlbWl0X2FkZGkoUlZfUkVHX1NQLCBSVl9SRUdfU1AsIC1zdGFja19hZGp1c3QsIGN0eCk7XG4tXG4tXHRpZiAoc2Vlbl9yZWcoUlZfUkVHX1JBLCBjdHgpKSB7XG4tXHRcdGVtaXRfc2QoUlZfUkVHX1NQLCBzdG9yZV9vZmZzZXQsIFJWX1JFR19SQSwgY3R4KTtcbi1cdFx0c3RvcmVfb2Zmc2V0IC09IDg7XG4tXHR9XG4tXHRlbWl0X3NkKFJWX1JFR19TUCwgc3RvcmVfb2Zmc2V0LCBSVl9SRUdfRlAsIGN0eCk7XG4tXHRzdG9yZV9vZmZzZXQgLT0gODtcbi1cdGlmIChzZWVuX3JlZyhSVl9SRUdfUzEsIGN0eCkpIHtcbi1cdFx0ZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX1MxLCBjdHgpO1xuLVx0XHRzdG9yZV9vZmZzZXQgLT0gODtcbi1cdH1cbi1cdGlmIChzZWVuX3JlZyhSVl9SRUdfUzIsIGN0eCkpIHtcbi1cdFx0ZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX1MyLCBjdHgpO1xuLVx0XHRzdG9yZV9vZmZzZXQgLT0gODtcbi1cdH1cbi1cdGlmIChzZWVuX3JlZyhSVl9SRUdfUzMsIGN0eCkpIHtcbi1cdFx0ZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX1MzLCBjdHgpO1xuLVx0XHRzdG9yZV9vZmZzZXQgLT0gODtcbi1cdH1cbi1cdGlmIChzZWVuX3JlZyhSVl9SRUdfUzQsIGN0eCkpIHtcbi1cdFx0ZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX1M0LCBjdHgpO1xuLVx0XHRzdG9yZV9vZmZzZXQgLT0gODtcbi1cdH1cbi1cdGlmIChzZWVuX3JlZyhSVl9SRUdfUzUsIGN0eCkpIHtcbi1cdFx0ZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX1M1LCBjdHgpO1xuLVx0XHRzdG9yZV9vZmZzZXQgLT0gODtcbi1cdH1cbi1cdGlmIChjdHgtXHUwMDNlYXJlbmFfdm1fc3RhcnQpIHtcbi1cdFx0ZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX0FSRU5BLCBjdHgpO1xuLVx0XHRzdG9yZV9vZmZzZXQgLT0gODtcbitcdFx0aWYgKGN0eC1cdTAwM2Vwcm9nLVx1MDAzZWF1eC1cdTAwM2VleGNlcHRpb25fY2IpXG4rXHRcdFx0ZW1pdF9leGNlcHRpb25fY2JfcHJvbG9ndWUoY3R4LCBzdGFja19hZGp1c3QpO1xuK1x0XHRlbHNlXG4rXHRcdFx0ZW1pdF9leGNlcHRpb25fYm91bmRhcnlfcHJvbG9ndWUoY3R4LCBzdGFja19hZGp1c3QpO1xuK1x0fSBlbHNlIHtcbitcdFx0c3RhY2tfYWRqdXN0ID0gbm9ybWFsX3N0YWNrX2FkanVzdChjdHgpICsgYnBmX3N0YWNrX2FkanVzdDtcbitcdFx0ZW1pdF9ub3JtYWxfcHJvbG9ndWUoY3R4LCBzdGFja19hZGp1c3QpO1xuIFx0fVxuIFxuLVx0Lyogc3RvcmUgVENDIGZyb20gUlZfUkVHX1RDQyB0byBzdGFjayAqL1xuLVx0ZW1pdF9zZChSVl9SRUdfU1AsIHN0b3JlX29mZnNldCwgUlZfUkVHX1RDQywgY3R4KTtcbi1cdGN0eC1cdTAwM2V0Y2Nfb2Zmc2V0ID0gc3RvcmVfb2Zmc2V0O1xuLVxuLVx0ZW1pdF9hZGRpKFJWX1JFR19GUCwgUlZfUkVHX1NQLCBzdGFja19hZGp1c3QsIGN0eCk7XG4tXG4gXHRpZiAoYnBmX3N0YWNrX2FkanVzdClcbiBcdFx0ZW1pdF9hZGRpKFJWX1JFR19TNSwgUlZfUkVHX1NQLCBicGZfc3RhY2tfYWRqdXN0LCBjdHgpO1xuIFxuQEAgLTIxNjEsMyArMjI4MCwxMiBAQCBib29sIGJwZl9qaXRfc3VwcG9ydHNfc3VicHJvZ190YWlsY2FsbHModm9pZClcbiB7XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4rXG4rYm9vbCBicGZfaml0X3N1cHBvcnRzX2V4Y2VwdGlvbnModm9pZClcbit7XG4rXHQvKiBicGZfdGhyb3coKSB1bndpbmRzIGJ5IHdhbGtpbmcgdGhlIGZyYW1lLXBvaW50ZXIgY2hhaW4gZnJvbSBpbnNpZGVcbitcdCAqIHRoZSBrZXJuZWwgYmFjayBpbnRvIHRoZSBCUEYgZnJhbWVzIChzZWUgYXJjaF9icGZfc3RhY2tfd2FsaygpKSwgc29cbitcdCAqIGV4Y2VwdGlvbnMgcmVxdWlyZSB0aGUgZnJhbWUtcG9pbnRlciB1bndpbmRlciB0byBiZSBlbmFibGVkLlxuK1x0ICovXG4rXHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfRlJBTUVfUE9JTlRFUik7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9ERU5ZTElTVC5yaXNjdjY0IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL0RFTllMSVNULnJpc2N2NjRcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggY2ExYmVhZTdmZThmMTAuLjAwMDAwMDAwMDAwMDAwXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvREVOWUxJU1QucmlzY3Y2NFxuKysrIC9kZXYvbnVsbFxuQEAgLTEsMiArMCwwIEBAXG4tIyByaXNjdjY0IGRlbnkgbGlzdCBmb3IgQlBGIENJIGFuZCBsb2NhbCB2bXRlc3Rcbi1leGNlcHRpb25zXHRcdFx0XHRcdCMgSklUIGRvZXMgbm90IHN1cHBvcnQgZXhjZXB0aW9uc1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTU6MDY6MzIuMDA3NDk0MDI0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY2OTA5MDU2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBSSVNDLVYgQlBGIEV4Y2VwdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBhZGRzIEJQRiBleGNlcHRpb24gc3VwcG9ydCB0byB0aGUgUklTQy1WIGFyY2hpdGVjdHVyZS4gSXQgc2VlbXMgdG8gYmUgYSBmYWlybHkgZm9jdXNlZCBjaGFuZ2UsIHRvdWNoaW5nIG9uIHNvbWUga2V5IGFyZWFzOiBgc3RhY2t0cmFjZS5oYCwgcGVyZm9ybWFuY2UgY2FsbGNoYWlucywgc3RhY2sgdW53aW5kaW5nLCBhbmQgdGhlIEJQRiBKSVQgY29tcGlsZXIgKHNwZWNpZmljYWxseSB0aGUgNjQtYml0IHZlcnNpb24pLiBJdCdzIGltcGxlbWVudGluZyBhbiBleGNlcHRpb24gcHJvbG9ndWUgYW5kIGVwaWxvZ3VlLCBhbmQgdGhlbiBpdCdzIGFsc28gbWFraW5nIHNvbWUgY3J1Y2lhbCBtb2RpZmljYXRpb25zIHRvIGB3YWxrX3N0YWNrZnJhbWVgIHRvIGVuYWJsZSBwYXNzaW5nIHRoZSBzdGFjayBhbmQgZnJhbWUgcG9pbnRlcnMgdG8gdGhlIGNhbGxiYWNrIGFuZCB0aGVuIHByb3ZpZGluZyB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHN0YWNrIHdhbGsgZnVuY3Rpb25hbGl0eS5cblxuVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBubyBkb3VidC4gV2UncmUgaW50cm9kdWNpbmcgQlBGIGV4Y2VwdGlvbiBzdXBwb3J0LCB3aGljaCB3aWxsIG1vZGlmeSBib3RoIHN0YWNrIHVud2luZGluZyBhbmQgdGhlIEpJVCBjb21waWxlci4gVGhhdCdzIGEgdGV4dGJvb2sgZGVmaW5pdGlvbiBvZiBhIGNoYW5nZSB0aGF0J3MgKmJlZ2dpbmcqIHRvIGJlIGZ1enplZCEgV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyByb2J1c3QsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgdXNlci1zdXBwbGllZCBCUEYgY29kZSBydW5uaW5nIGluIGtlcm5lbCBzcGFjZS5cblxuTm93LCBiZWZvcmUgSSBkaWcgdG9vIGRlZXAsIGxldCdzIHNlZSB3aGF0IGNvbmZpZ3MgYXJlIHJlcXVpcmVkLiBJIGtub3cgdGhhdCB0aGUgQlBGIEpJVCBvbiBSSVNDLVYgaXMgZW5hYmxlZCBieSBgQ09ORklHX0JQRl9KSVRgLiBUaGUgcGF0Y2ggaXRzZWxmIG1lbnRpb25zIHRoYXQgYENPTkZJR19GUkFNRV9QT0lOVEVSYCBpcyBuZWNlc3NhcnkgZm9yIHRoZSBleGNlcHRpb24gc3VwcG9ydCwgd2hpY2ggYWxpZ25zIHdpdGggaG93IHN0YWNrIHVud2luZGluZyB1c3VhbGx5IHdvcmtzLiBUbyBiZSBwcmVjaXNlLCBJIHNob3VsZCBmaW5kIHRob3NlIGNvbmZpZyBzeW1ib2xzLiBJ4oCZbGwgcXVpY2tseSBjaGVjayBgYXJjaC9yaXNjdi9LY29uZmlnYCBvciBgYXJjaC9yaXNjdi9uZXQvS2NvbmZpZ2AgdG8gY29uZmlybSB3aGVyZSBgQlBGX0pJVGAgaXMgZGVmaW5lZC4gSSdsbCB1c2UgYGdyZXBwZXJgIHRvIGxvY2F0ZSB0aGVzZSBjb25maWcgb3B0aW9ucyBhbmQgdmVyaWZ5IHRoZSByZXF1aXJlZCBzZXR0aW5ncy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2V0IHVwIGNvcnJlY3RseSBiZWZvcmUgSSBzdGFydCBkZWVwZXIgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxOTEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNTowNjozNy42NzY1ODYzOTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ0NDYzMjgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfSklUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3ZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE1OjA2OjM3Ljc0MTAzOTQ5M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MzUxMTM0MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipLY29uZmlnIERpdmUgZm9yIEJQRiBTdXBwb3J0IGluIFJJU0MtVioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIEJQRiAoQmVya2VsZXkgUGFja2V0IEZpbHRlcikgc3VwcG9ydCBsaXZlcyBpbiB0aGUgUklTQy1WIGtlcm5lbCBjb25maWd1cmF0aW9uLiBHaXZlbiBteSBleHBlcmllbmNlLCB0aGUgZmlyc3QgcGxhY2UgSSdkIGxvb2sgaXMgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBLY29uZmlnIGZpbGUuIFRoYXQncyBhbG1vc3QgYWx3YXlzIHRoZSBzdGFuZGFyZC4gU28sIGxldCdzIHN0YXJ0IHdpdGggYGFyY2gvcmlzY3YvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIHJlbGV2YW50IG9wdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIHBlcmhhcHMgc29tZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uc2lkZXJhdGlvbnMgZm9yIGVuYWJsaW5nIEJQRiBmdW5jdGlvbmFsaXR5LiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk0OSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE1OjA2OjQxLjQ3NjE1NTcwMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODQ0NjgzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3YvS2NvbmZpZz0xMz1jb25maWcgUklTQ1ZcXG4tLVxcbmFyY2gvcmlzY3YvS2NvbmZpZy0xNjctXFx0c2VsZWN0IEhBVkVfRlVOQ1RJT05fVFJBQ0VSIGlmIEhBVkVfRFlOQU1JQ19GVFJBQ0VcXG5hcmNoL3Jpc2N2L0tjb25maWc6MTY4OlxcdHNlbGVjdCBIQVZFX0VCUEZfSklUIGlmIE1NVVxcbmFyY2gvcmlzY3YvS2NvbmZpZy0xNjktXFx0c2VsZWN0IEhBVkVfR0VORVJJQ19USUZfQklUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNTowNjo0MS41MzQ2MDg0NzlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODkwODg1OTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEJQRiBKSVQgRXhjZXB0aW9uIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBCUEYgSklUIGNvbmZpZ3VyYXRpb24uIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGBDT05GSUdfQlBGX0pJVGAsIHdoaWNoIGlzIHByZXR0eSBnZW5lcmljLCBidXQgdGhpcyBzcGVjaWZpYyBmZWF0dXJlIHJlcXVpcmVzIGBDT05GSUdfRlJBTUVfUE9JTlRFUmAuIFRoZSBwYXRjaCBpcyBleHBsaWNpdCBhYm91dCB0aGF0LiBJdCdzIHVzaW5nIHRoZSBmcmFtZSBwb2ludGVyIGZvciB1bndpbmRpbmcgd2l0aCBgYnBmX3Rocm93KClgLCBhbmQgdGhhdCBtZWFucyBgQ09ORklHX0ZSQU1FX1BPSU5URVJgICptdXN0KiBiZSBlbmFibGVkLiBTbywgdGhlIGVzc2VudGlhbCBjb25maWdzIGZvciB0aGlzIGZlYXR1cmUgYXJlIGNsZWFybHkgYENPTkZJR19GUkFNRV9QT0lOVEVSYCBhbmQsIG9mIGNvdXJzZSwgYENPTkZJR19CUEZfSklUYC4gVGhhdCdzIHRoZSBiYXNlbGluZS5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIHN5bWJvbHMuIFRoZSBwYXRjaCB0b3VjaGVzIGEgZmV3IGZ1bmN0aW9ucywgaW5jbHVkaW5nIGB3YWxrX3N0YWNrZnJhbWVgLCBgYXJjaF9icGZfc3RhY2tfd2Fsa2AsIGBicGZfaml0X2J1aWxkX3Byb2xvZ3VlYCwgYGJwZl9qaXRfZW1pdF9pbnNuYCAodGhvdWdoIGluZGlyZWN0bHkpLCBhbmQgYGJwZl9qaXRfc3VwcG9ydHNfZXhjZXB0aW9uc2AuIEkgdGhpbmsgdGhlIG1haW4gcG9pbnRzIG9mIGludGVyZXN0IGFyZSBgYXJjaF9icGZfc3RhY2tfd2Fsa2AsIHdoaWNoIGlzIGEga2V5IHBhcnQgb2YgdGhlIHN0YWNrIHdhbGtpbmcgcHJvY2VzcywgYGJwZl9qaXRfYnVpbGRfcHJvbG9ndWVgIGJlY2F1c2UgaXQncyBnZW5lcmF0aW5nIHRoZSBwcm9sb2d1ZSwgYW5kIGBicGZfaml0X3N1cHBvcnRzX2V4Y2VwdGlvbnNgIGJlY2F1c2UgaXQgZXhwbGljaXRseSBjaGVja3MgZm9yIGBGUkFNRV9QT0lOVEVSYC4gQWx0aG91Z2ggYHdhbGtfc3RhY2tmcmFtZWAgaXMgbW9kaWZpZWQsIHdoaWNoIHNlZW1zIGxpa2UgYSBob3RzcG90IGZvciBzdGFjayB0cmFjZXMsIGBhcmNoX2JwZl9zdGFja193YWxrYCB3aWxsIGxpa2VseSBwcm92aWRlIGEgbW9yZSBmb2N1c2VkIHZpZXcuXG5cbkknbSBhbHNvIGxvb2tpbmcgc3BlY2lmaWNhbGx5IGF0IGBhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jYCB0byBzZWUgdGhlIGRldGFpbHMgb2YgdGhlIGNoYW5nZXMuIFRoZSByZWxldmFudCBmdW5jdGlvbnMgdGhlcmUgYXJlOiBgZW1pdF9leGNlcHRpb25fYm91bmRhcnlfcHJvbG9ndWVgLCBgZW1pdF9leGNlcHRpb25fY2JfcHJvbG9ndWVgLCBgZW1pdF9leGNlcHRpb25fcmVzdG9yZWAsIGBicGZfaml0X2J1aWxkX3Byb2xvZ3VlYCwgYF9fYnVpbGRfZXBpbG9ndWVgLCBhbmQgYWdhaW4sIGBicGZfaml0X3N1cHBvcnRzX2V4Y2VwdGlvbnNgLiBJIHNlZSB0aGF0IGBlbWl0X2V4Y2VwdGlvbl9ib3VuZGFyeV9wcm9sb2d1ZWAgaXMgc3RhdGljLCBzbyBpdCdzIG5vdCBleHBvc2VkLCBidXQgYGJwZl9qaXRfYnVpbGRfcHJvbG9ndWVgIGlzIGV4cG9ydGVkIGFuZCBnbG9iYWwsIGFuZCBpbXBvcnRhbnRseSwgYGFyY2hfYnBmX3N0YWNrX3dhbGtgIGlzIGFsc28gZ2xvYmFsLlxuXG5MZXQgbWUgY29uZmlybSB0aGF0IGBhcmNoX2JwZl9zdGFja193YWxrYCBpcywgaW4gZmFjdCwgZ2xvYmFsLiBZZXAsIGl0IGlzLiBUaGUgcHJvdG90eXBlIGRlY2xhcmVzIGl0IGB2b2lkIG5vdHJhY2UgYXJjaF9icGZfc3RhY2tfd2FsayguLi4pYCwgc28gaXQncyBkZWZpbml0ZWx5IGFjY2Vzc2libGUuXG5cblNvLCB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBhcmUgbm93IGZpcm1seSBzZXQgYXM6XG5cbiogICBgYXJjaF9icGZfc3RhY2tfd2Fsa2BcbiogICBgYnBmX2ppdF9idWlsZF9wcm9sb2d1ZWBcbiogICBgYnBmX2ppdF9zdXBwb3J0c19leGNlcHRpb25zYFxuXG5GaW5hbGx5LCBsZXQncyBxdWlja2x5IHJldmlldyB0aGUgZXNzZW50aWFsIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBXZSd2ZSBnb3QgYENPTkZJR19CUEZfU1lTQ0FMTGAgZm9yIEJQRiBpbiBnZW5lcmFsLCBgQ09ORklHX0JQRl9KSVRgIGZvciB0aGUgSklULCBhbmQgYENPTkZJR19GUkFNRV9QT0lOVEVSYCBmb3IgZXhjZXB0aW9ucywgYXMgcHJldmlvdXNseSBkaXNjdXNzZWQuXG5cbkFscmlnaHQsIEkgdGhpbmsgSSBoYXZlIGEgY2xlYXIgcGljdHVyZS4gTGV0J3MgcmVwb3J0IHRoZSByZXN1bHRzIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI0NCwiT3V0cHV0VG9rZW5zIjoxNjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTU6MDY6NTAuNDI1NDk3MTI0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTc5OTQ3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkZSQU1FX1BPSU5URVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhcmNoX2JwZl9zdGFja193YWxrXCIsXG4gICAgXCJicGZfaml0X2J1aWxkX3Byb2xvZ3VlXCIsXG4gICAgXCJicGZfaml0X3N1cHBvcnRzX2V4Y2VwdGlvbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIEJQRiBleGNlcHRpb24gc3VwcG9ydCB0byB0aGUgUklTQy1WIGFyY2hpdGVjdHVyZS4gSXQgbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgdG8gZW1pdCBleGNlcHRpb24gcHJvbG9ndWVzIGFuZCBlcGlsb2d1ZXMsIGFuZCBpbXBsZW1lbnRzIGBhcmNoX2JwZl9zdGFja193YWxrYCBmb3IgdW53aW5kaW5nIHRoZSBzdGFjayBkdXJpbmcgQlBGIGV4Y2VwdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGtlcm5lbCBhbmQgQlBGIEpJVCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkZSQU1FX1BPSU5URVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhcmNoX2JwZl9zdGFja193YWxrXCIsXG4gICAgXCJicGZfaml0X2J1aWxkX3Byb2xvZ3VlXCIsXG4gICAgXCJicGZfaml0X3N1cHBvcnRzX2V4Y2VwdGlvbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIEJQRiBleGNlcHRpb24gc3VwcG9ydCB0byB0aGUgUklTQy1WIGFyY2hpdGVjdHVyZS4gSXQgbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgdG8gZW1pdCBleGNlcHRpb24gcHJvbG9ndWVzIGFuZCBlcGlsb2d1ZXMsIGFuZCBpbXBsZW1lbnRzIGBhcmNoX2JwZl9zdGFja193YWxrYCBmb3IgdW53aW5kaW5nIHRoZSBzdGFjayBkdXJpbmcgQlBGIGV4Y2VwdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGtlcm5lbCBhbmQgQlBGIEpJVCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow56d4b[1] Phase: Succeeded StartedAt: 2026-07-23 15:07:02 +0000 UTC FinishedAt: 2026-07-23 15:07:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow56d4b[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-23 15:07:02 +0000 UTC FinishedAt: 2026-07-23 15:07:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow56d4b[2] Phase: Succeeded StartedAt: 2026-07-23 15:07:02 +0000 UTC FinishedAt: 2026-07-23 16:32:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow56d4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_stack_walk","bpf_jit_build_prologue","bpf_jit_supports_exceptions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"0ba34b37-9a16-44b3-ba20-71d2eb01602a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-23 15:07:02 +0000 UTC FinishedAt: 2026-07-23 16:32:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_stack_walk","bpf_jit_build_prologue","bpf_jit_supports_exceptions"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"0ba34b37-9a16-44b3-ba20-71d2eb01602a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow56d4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_stack_walk","bpf_jit_build_prologue","bpf_jit_supports_exceptions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"0ba34b37-9a16-44b3-ba20-71d2eb01602a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-23 15:07:02 +0000 UTC FinishedAt: 2026-07-23 15:07:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow56d4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_stack_walk","bpf_jit_build_prologue","bpf_jit_supports_exceptions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"0ba34b37-9a16-44b3-ba20-71d2eb01602a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-23 15:07:02 +0000 UTC FinishedAt: 2026-07-23 15:07:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},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-workflow56d4b/series-workflow56d4b-convert-artifact-948940801/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow56d4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_stack_walk","bpf_jit_build_prologue","bpf_jit_supports_exceptions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"0ba34b37-9a16-44b3-ba20-71d2eb01602a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-23 15:07:12 +0000 UTC FinishedAt: 2026-07-23 15:47:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow56d4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_stack_walk","bpf_jit_build_prologue","bpf_jit_supports_exceptions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"0ba34b37-9a16-44b3-ba20-71d2eb01602a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-23 15:07:12 +0000 UTC FinishedAt: 2026-07-23 15:47:54 +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:*a366ddf8-a575-47db-a16d-069a22c9ad04,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-workflow56d4b/series-workflow56d4b-convert-artifact-948940801/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": "84e6b142-528a-4664-9212-c933b24f62d3", "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-workflow56d4b/series-workflow56d4b-build-action-2934377775/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow56d4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_stack_walk","bpf_jit_build_prologue","bpf_jit_supports_exceptions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"0ba34b37-9a16-44b3-ba20-71d2eb01602a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-23 15:07:12 +0000 UTC FinishedAt: 2026-07-23 15:47:44 +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:*a366ddf8-a575-47db-a16d-069a22c9ad04,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-workflow56d4b/series-workflow56d4b-convert-artifact-948940801/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": "84e6b142-528a-4664-9212-c933b24f62d3", "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-workflow56d4b/series-workflow56d4b-build-action-2934377775/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow56d4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_stack_walk","bpf_jit_build_prologue","bpf_jit_supports_exceptions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"0ba34b37-9a16-44b3-ba20-71d2eb01602a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-23 15:47:54 +0000 UTC FinishedAt: 2026-07-23 15:47:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow56d4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_stack_walk","bpf_jit_build_prologue","bpf_jit_supports_exceptions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"0ba34b37-9a16-44b3-ba20-71d2eb01602a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-23 15:47:54 +0000 UTC FinishedAt: 2026-07-23 15:47:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow56d4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_stack_walk","bpf_jit_build_prologue","bpf_jit_supports_exceptions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"0ba34b37-9a16-44b3-ba20-71d2eb01602a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-23 15:47:54 +0000 UTC FinishedAt: 2026-07-23 15:48:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow56d4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_stack_walk","bpf_jit_build_prologue","bpf_jit_supports_exceptions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"0ba34b37-9a16-44b3-ba20-71d2eb01602a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-23 15:47:54 +0000 UTC FinishedAt: 2026-07-23 15:48:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"0ba34b37-9a16-44b3-ba20-71d2eb01602a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},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-workflow56d4b/series-workflow56d4b-convert-artifact-179943892/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow56d4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_stack_walk","bpf_jit_build_prologue","bpf_jit_supports_exceptions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"0ba34b37-9a16-44b3-ba20-71d2eb01602a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-23 15:48:14 +0000 UTC FinishedAt: 2026-07-23 15:50:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow56d4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_stack_walk","bpf_jit_build_prologue","bpf_jit_supports_exceptions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"0ba34b37-9a16-44b3-ba20-71d2eb01602a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-23 15:48:14 +0000 UTC FinishedAt: 2026-07-23 15:50:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*84e6b142-528a-4664-9212-c933b24f62d3,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-workflow56d4b/series-workflow56d4b-build-action-2934377775/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-workflow56d4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_stack_walk","bpf_jit_build_prologue","bpf_jit_supports_exceptions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"0ba34b37-9a16-44b3-ba20-71d2eb01602a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-23 15:50:35 +0000 UTC FinishedAt: 2026-07-23 15:50:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow56d4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_stack_walk","bpf_jit_build_prologue","bpf_jit_supports_exceptions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"0ba34b37-9a16-44b3-ba20-71d2eb01602a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-23 15:50:35 +0000 UTC FinishedAt: 2026-07-23 15:50:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow56d4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_stack_walk","bpf_jit_build_prologue","bpf_jit_supports_exceptions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"0ba34b37-9a16-44b3-ba20-71d2eb01602a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-23 15:50:35 +0000 UTC FinishedAt: 2026-07-23 16:28:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow56d4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_stack_walk","bpf_jit_build_prologue","bpf_jit_supports_exceptions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"0ba34b37-9a16-44b3-ba20-71d2eb01602a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-23 15:50:35 +0000 UTC FinishedAt: 2026-07-23 16:28:05 +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:*a366ddf8-a575-47db-a16d-069a22c9ad04,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-workflow56d4b/series-workflow56d4b-convert-artifact-179943892/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": "3c9f10fd-b0f0-4896-a8c6-290fd3c59565", "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-workflow56d4b/series-workflow56d4b-build-action-4099026336/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow56d4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_stack_walk","bpf_jit_build_prologue","bpf_jit_supports_exceptions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"0ba34b37-9a16-44b3-ba20-71d2eb01602a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-23 15:50:35 +0000 UTC FinishedAt: 2026-07-23 16:27:15 +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:*a366ddf8-a575-47db-a16d-069a22c9ad04,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-workflow56d4b/series-workflow56d4b-convert-artifact-179943892/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": "3c9f10fd-b0f0-4896-a8c6-290fd3c59565", "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-workflow56d4b/series-workflow56d4b-build-action-4099026336/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow56d4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_stack_walk","bpf_jit_build_prologue","bpf_jit_supports_exceptions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"0ba34b37-9a16-44b3-ba20-71d2eb01602a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-23 16:28:05 +0000 UTC FinishedAt: 2026-07-23 16:28:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow56d4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_stack_walk","bpf_jit_build_prologue","bpf_jit_supports_exceptions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"0ba34b37-9a16-44b3-ba20-71d2eb01602a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-23 16:28:05 +0000 UTC FinishedAt: 2026-07-23 16:28:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow56d4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_stack_walk","bpf_jit_build_prologue","bpf_jit_supports_exceptions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"0ba34b37-9a16-44b3-ba20-71d2eb01602a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-23 16:28:05 +0000 UTC FinishedAt: 2026-07-23 16:30:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow56d4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_stack_walk","bpf_jit_build_prologue","bpf_jit_supports_exceptions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"0ba34b37-9a16-44b3-ba20-71d2eb01602a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-23 16:28:05 +0000 UTC FinishedAt: 2026-07-23 16:30:01 +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:*3c9f10fd-b0f0-4896-a8c6-290fd3c59565,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-workflow56d4b/series-workflow56d4b-build-action-4099026336/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-workflow56d4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_stack_walk","bpf_jit_build_prologue","bpf_jit_supports_exceptions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"0ba34b37-9a16-44b3-ba20-71d2eb01602a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-23 16:30:10 +0000 UTC FinishedAt: 2026-07-23 16:32:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow56d4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_stack_walk","bpf_jit_build_prologue","bpf_jit_supports_exceptions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"0ba34b37-9a16-44b3-ba20-71d2eb01602a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-23 16:30:10 +0000 UTC FinishedAt: 2026-07-23 16:32:56 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_stack_walk","bpf_jit_build_prologue","bpf_jit_supports_exceptions"],"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:*84e6b142-528a-4664-9212-c933b24f62d3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3c9f10fd-b0f0-4896-a8c6-290fd3c59565,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-workflow56d4b/series-workflow56d4b-build-action-2934377775/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-workflow56d4b/series-workflow56d4b-build-action-4099026336/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow56d4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_stack_walk","bpf_jit_build_prologue","bpf_jit_supports_exceptions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"0ba34b37-9a16-44b3-ba20-71d2eb01602a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-23 16:30:10 +0000 UTC FinishedAt: 2026-07-23 16:30:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow56d4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_stack_walk","bpf_jit_build_prologue","bpf_jit_supports_exceptions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"0ba34b37-9a16-44b3-ba20-71d2eb01602a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-23 16:30:10 +0000 UTC FinishedAt: 2026-07-23 16:30:16 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_stack_walk","bpf_jit_build_prologue","bpf_jit_supports_exceptions"],"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-workflow56d4b/series-workflow56d4b-convert-artifact-2768414205/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow56d4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_stack_walk","bpf_jit_build_prologue","bpf_jit_supports_exceptions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"0ba34b37-9a16-44b3-ba20-71d2eb01602a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-23 16:30:10 +0000 UTC FinishedAt: 2026-07-23 16:30:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow56d4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_stack_walk","bpf_jit_build_prologue","bpf_jit_supports_exceptions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"0ba34b37-9a16-44b3-ba20-71d2eb01602a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-23 16:30:10 +0000 UTC FinishedAt: 2026-07-23 16:30:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow56d4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_stack_walk","bpf_jit_build_prologue","bpf_jit_supports_exceptions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"0ba34b37-9a16-44b3-ba20-71d2eb01602a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-23 16:30:10 +0000 UTC FinishedAt: 2026-07-23 16:30:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow56d4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_stack_walk","bpf_jit_build_prologue","bpf_jit_supports_exceptions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"0ba34b37-9a16-44b3-ba20-71d2eb01602a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-23 16:30:20 +0000 UTC FinishedAt: 2026-07-23 16:32:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow56d4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arch_bpf_stack_walk","bpf_jit_build_prologue","bpf_jit_supports_exceptions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"87267b89459813cb50ab5377e076b639c07b4491","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","FRAME_POINTER"],"series_id":"0ba34b37-9a16-44b3-ba20-71d2eb01602a","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-23 16:30:20 +0000 UTC FinishedAt: 2026-07-23 16:32:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*84e6b142-528a-4664-9212-c933b24f62d3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3c9f10fd-b0f0-4896-a8c6-290fd3c59565,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-workflow56d4b/series-workflow56d4b-build-action-2934377775/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-workflow56d4b/series-workflow56d4b-build-action-4099026336/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-workflow56d4b/series-workflow56d4b-convert-artifact-2768414205/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,}