Name: series-workflowxmvmk Phase: Succeeded StartedAt: 2026-06-26 22:37:48 +0000 UTC FinishedAt: 2026-06-27 00:08:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmvmk[0] Phase: Succeeded StartedAt: 2026-06-26 22:37:48 +0000 UTC FinishedAt: 2026-06-26 22:46:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmvmk[0].run-triage Phase: Succeeded StartedAt: 2026-06-26 22:37:48 +0000 UTC FinishedAt: 2026-06-26 22:46:44 +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": "52738352a6f29279e15285fcb7b50241ef867e27", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "CPU_IDLE", "SUSPEND" ], "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": "52738352a6f29279e15285fcb7b50241ef867e27", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "CPU_IDLE", "SUSPEND" ], "series_id": "e0a55055-7268-4630-9cbf-b7bb204ef912" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_riscv_cpu_pm_notifier", "kvm_riscv_aia_enable", "kvm_riscv_aia_disable", "kvm_riscv_clear_former_vcpu", "kvm_arch_enable_virtualization_cpu", "kvm_arch_disable_virtualization_cpu", "kvm_riscv_csr_enable", "kvm_riscv_csr_disable" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIyOjQ0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtDUFVfSURMRSYjMzQ7LAogICAgJiMzNDtTVVNQRU5EJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3Jpc2N2X2NwdV9wbV9ub3RpZmllciYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfYWlhX2VuYWJsZSYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfYWlhX2Rpc2FibGUmIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X2NsZWFyX2Zvcm1lcl92Y3B1JiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX2VuYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUmIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X2Nzcl9lbmFibGUmIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X2Nzcl9kaXNhYmxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhpcyBwYXRjaCBtb2RpZmllcyBSSVNDLVYgS1ZNIHRvIGhhbmRsZSBDUFUgcG93ZXIgbWFuYWdlbWVudCBldmVudHMgKENQVV9QTSkgZm9yIG5vbi1yZXRlbnRpb24gaWRsZSBzdGF0ZXMuIEl0IGludHJvZHVjZXMgYSBDUFUgUE0gbm90aWZpZXIgYW5kIG1vZGlmaWVzIEFJQSAoQWR2YW5jZWQgSW50ZXJydXB0IEFyY2hpdGVjdHVyZSkgZW5hYmxlL2Rpc2FibGUgcGF0aHMgdG8gc3VwcG9ydCBsaWdodHdlaWdodCBDU1Igc2F2ZS9yZXN0b3JlLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgS1ZNIGxvZ2ljIG9uIFJJU0MtViBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gdmlydHVhbGl6YXRpb24gb3IgcG93ZXIgbWFuYWdlbWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMjo0NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDEyNTE2NzIxNmZhMjNkYWU4ZmNhZmRjYzcxZDlmMjkwN2Q0YjU0ZWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1biAyNiAyMjo0NDozMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9haWEuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2FpYS5oXG5pbmRleCBjNjdlYzVhYzBhMTQ2Yi4uN2MxYzMyNTA1OThmYjAgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9haWEuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fYWlhLmhcbkBAIC0xNjUsOCAmIzQzOzE2NSwxOSBAQCBpbnQga3ZtX3Jpc2N2X2FpYV9hbGxvY19oZ2VpKGludCBjcHUsIHN0cnVjdCBrdm1fdmNwdSAqb3duZXIsXG4gXHRcdFx0ICAgICB2b2lkIF9faW9tZW0gKipoZ2VpX3ZhLCBwaHlzX2FkZHJfdCAqaGdlaV9wYSk7XG4gdm9pZCBrdm1fcmlzY3ZfYWlhX2ZyZWVfaGdlaShpbnQgY3B1LCBpbnQgaGdlaSk7XG4gXG4tdm9pZCBrdm1fcmlzY3ZfYWlhX2VuYWJsZSh2b2lkKTtcbi12b2lkIGt2bV9yaXNjdl9haWFfZGlzYWJsZSh2b2lkKTtcbiYjNDM7LyoqXG4mIzQzOyAqIGt2bV9yaXNjdl9haWFfZW5hYmxlKCkgLSBFbmFibGUgQUlBIHN1cHBvcnQgb24gY3VycmVudCBDUFVcbiYjNDM7ICogQGZ1bGxfY2xlYW51cDogdHJ1ZSA9IGZ1bGwgaGFyZHdhcmUgaW5pdCAoQ1BVIGhvdHBsdWcvbW9kdWxlIGxvYWQpLFxuJiM0MzsgKiAgICAgICAgICAgICAgICBmYWxzZSA9IGxpZ2h0d2VpZ2h0IENTUiByZXN0b3JlIChDUFUgbm9uLXJldGVudGlvbiBpZGxlIHJlc3VtZSlcbiYjNDM7ICovXG4mIzQzO3ZvaWQga3ZtX3Jpc2N2X2FpYV9lbmFibGUoYm9vbCBmdWxsX2NsZWFudXApO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGt2bV9yaXNjdl9haWFfZGlzYWJsZSgpIC0gRGlzYWJsZSBBSUEgc3VwcG9ydCBvbiBjdXJyZW50IENQVVxuJiM0MzsgKiBAZnVsbF9jbGVhbnVwOiB0cnVlID0gZnVsbCBoYXJkd2FyZSBjbGVhbnVwIChDUFUgaG90cGx1Zy9tb2R1bGUgZXhpdCksXG4mIzQzOyAqICAgICAgICAgICAgICAgIGZhbHNlID0gbGlnaHR3ZWlnaHQgQ1NSIHNhdmUgKENQVSBub24tcmV0ZW50aW9uIGlkbGUgZW50cnkpXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIGt2bV9yaXNjdl9haWFfZGlzYWJsZShib29sIGZ1bGxfY2xlYW51cCk7XG4gaW50IGt2bV9yaXNjdl9haWFfaW5pdCh2b2lkKTtcbiB2b2lkIGt2bV9yaXNjdl9haWFfZXhpdCh2b2lkKTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IDYwMDE3Y2VlYzlkMmFmLi44MDhiNGVlMWJkMTBhYyAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtMzE5LDYgJiM0MzszMTksOCBAQCBib29sIGt2bV9yaXNjdl92Y3B1X3N0b3BwZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcbiB2b2lkIGt2bV9yaXNjdl92Y3B1X3JlY29yZF9zdGVhbF90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG4mIzQzO3ZvaWQga3ZtX3Jpc2N2X2NsZWFyX2Zvcm1lcl92Y3B1KHZvaWQpO1xuJiM0MztcbiAvKiBGbGFncyByZXByZXNlbnRpbmcgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgZGV0YWlscyAqL1xuIERFQ0xBUkVfU1RBVElDX0tFWV9GQUxTRShrdm1fcmlzY3ZfdnNzdGFnZV90bGJfbm9fZ3BhKTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9haWEuYyBiL2FyY2gvcmlzY3Yva3ZtL2FpYS5jXG5pbmRleCBiYWZiMDA5YzVjZTU1OS4uNGNmMzUxZjkxYzY0M2YgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9haWEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rdm0vYWlhLmNcbkBAIC0yNSw2ICYjNDM7MjUsNyBAQCBzdHJ1Y3QgYWlhX2hnZWlfY29udHJvbCB7XG4gXHR1bnNpZ25lZCBsb25nIGZyZWVfYml0bWFwO1xuIFx0c3RydWN0IGt2bV92Y3B1ICpvd25lcnNbQklUU19QRVJfTE9OR107XG4gXHR1bnNpZ25lZCBpbnQgbnJfaGdlaTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHNhdmVkX3ZhbHVlO1xuIH07XG4gc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBhaWFfaGdlaV9jb250cm9sLCBhaWFfaGdlaSk7XG4gc3RhdGljIGludCBoZ2VpX3BhcmVudF9pcnE7XG5AQCAtNTMyLDUwICYjNDM7NTMzLDU5IEBAIHN0YXRpYyB2b2lkIGFpYV9oZ2VpX2V4aXQodm9pZClcbiBcdGZyZWVfcGVyY3B1X2lycShoZ2VpX3BhcmVudF9pcnEsIFx1MDAyNmFpYV9oZ2VpKTtcbiB9XG4gXG4tdm9pZCBrdm1fcmlzY3ZfYWlhX2VuYWJsZSh2b2lkKVxuJiM0Mzt2b2lkIGt2bV9yaXNjdl9haWFfZW5hYmxlKGJvb2wgZnVsbF9jbGVhbnVwKVxuIHtcbi1cdGNvbnN0IHN0cnVjdCBpbXNpY19nbG9iYWxfY29uZmlnICpnYztcbi1cdGNvbnN0IHN0cnVjdCBpbXNpY19sb2NhbF9jb25maWcgKmxjO1xuIFx0c3RydWN0IGFpYV9oZ2VpX2NvbnRyb2wgKmhnY3RybDtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tXHRpbnQgYWlhX25yX2hnZWk7XG4gXG4gXHRpZiAoIWt2bV9yaXNjdl9haWFfYXZhaWxhYmxlKCkpXG4gXHRcdHJldHVybjtcbiBcbi1cdGdjID0gaW1zaWNfZ2V0X2dsb2JhbF9jb25maWcoKTtcbi1cdGxjID0gKGdjKSA/IHRoaXNfY3B1X3B0cihnYy1cdTAwM2Vsb2NhbCkgOiBOVUxMO1xuIFx0aGdjdHJsID0gdGhpc19jcHVfcHRyKFx1MDAyNmFpYV9oZ2VpKTtcbiBcbi1cdC8qIEZpZ3VyZS1vdXQgbnVtYmVyIG9mIGJpdHMgaW4gSEdFSUUgKi9cbi1cdGNzcl93cml0ZShDU1JfSEdFSUUsIC0xVUwpO1xuLVx0aGdjdHJsLVx1MDAzZW5yX2hnZWkgPSBmbHNfbG9uZyhjc3JfcmVhZChDU1JfSEdFSUUpKTtcbi1cdGNzcl93cml0ZShDU1JfSEdFSUUsIDApO1xuLVx0aWYgKGhnY3RybC1cdTAwM2Vucl9oZ2VpKVxuLVx0XHRoZ2N0cmwtXHUwMDNlbnJfaGdlaS0tO1xuJiM0MztcdGlmIChmdWxsX2NsZWFudXApIHtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBpbXNpY19nbG9iYWxfY29uZmlnICpnYztcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBpbXNpY19sb2NhbF9jb25maWcgKmxjO1xuJiM0MztcdFx0aW50IGFpYV9ucl9oZ2VpO1xuIFxuLVx0Lypcbi1cdCAqIE51bWJlciBvZiB1c2FibGUgcGVyLUhBUlQgSEdFSSBsaW5lcyBzaG91bGQgYmUgbWluaW11bSBvZlxuLVx0ICogcGVyLUhBUlQgSU1TSUMgZ3Vlc3QgZmlsZXMgYW5kIG51bWJlciBvZiBiaXRzIGluIEhHRUlFLlxuLVx0ICovXG4tXHRpZiAobGMpXG4tXHRcdGhnY3RybC1cdTAwM2Vucl9oZ2VpID0gbWluKCh1bG9uZyloZ2N0cmwtXHUwMDNlbnJfaGdlaSwgbGMtXHUwMDNlbnJfZ3Vlc3RfZmlsZXMpO1xuLVx0ZWxzZVxuLVx0XHRoZ2N0cmwtXHUwMDNlbnJfaGdlaSA9IDA7XG4mIzQzO1x0XHRnYyA9IGltc2ljX2dldF9nbG9iYWxfY29uZmlnKCk7XG4mIzQzO1x0XHRsYyA9IChnYykgPyB0aGlzX2NwdV9wdHIoZ2MtXHUwMDNlbG9jYWwpIDogTlVMTDtcbiBcbi1cdC8qIFVwZGF0ZSB0aGUgbnVtYmVyIG9mIElNU0lDIGd1ZXN0IGZpbGVzIGFjcm9zcyBhbGwgSEFSVHMgKi9cbi1cdGFpYV9ucl9oZ2VpID0gYXRvbWljX3JlYWQoXHUwMDI2a3ZtX3Jpc2N2X2FpYV9ucl9oZ2VpKTtcbi1cdGRvIHtcbi1cdFx0aWYgKGFpYV9ucl9oZ2VpIFx1MDAzYz0gaGdjdHJsLVx1MDAzZW5yX2hnZWkpXG4tXHRcdFx0YnJlYWs7XG4tXHR9IHdoaWxlICghYXRvbWljX3RyeV9jbXB4Y2hnKFx1MDAyNmt2bV9yaXNjdl9haWFfbnJfaGdlaSwgXHUwMDI2YWlhX25yX2hnZWksIGhnY3RybC1cdTAwM2Vucl9oZ2VpKSk7XG4mIzQzO1x0XHQvKiBGaWd1cmUtb3V0IG51bWJlciBvZiBiaXRzIGluIEhHRUlFICovXG4mIzQzO1x0XHRjc3Jfd3JpdGUoQ1NSX0hHRUlFLCAtMVVMKTtcbiYjNDM7XHRcdGhnY3RybC1cdTAwM2Vucl9oZ2VpID0gZmxzX2xvbmcoY3NyX3JlYWQoQ1NSX0hHRUlFKSk7XG4mIzQzO1x0XHRjc3Jfd3JpdGUoQ1NSX0hHRUlFLCAwKTtcbiYjNDM7XHRcdGlmIChoZ2N0cmwtXHUwMDNlbnJfaGdlaSlcbiYjNDM7XHRcdFx0aGdjdHJsLVx1MDAzZW5yX2hnZWktLTtcbiBcbi1cdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZoZ2N0cmwtXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVx0aWYgKCFoZ2N0cmwtXHUwMDNlZnJlZV9iaXRtYXBfaW5pdGlhbGl6ZWQpIHtcbi1cdFx0aGdjdHJsLVx1MDAzZWZyZWVfYml0bWFwID0gKGhnY3RybC1cdTAwM2Vucl9oZ2VpKSA/IEdFTk1BU0tfVUxMKGhnY3RybC1cdTAwM2Vucl9oZ2VpLCAxKSA6IDA7XG4tXHRcdGhnY3RybC1cdTAwM2VmcmVlX2JpdG1hcF9pbml0aWFsaXplZCA9IHRydWU7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogTnVtYmVyIG9mIHVzYWJsZSBwZXItSEFSVCBIR0VJIGxpbmVzIHNob3VsZCBiZSBtaW5pbXVtIG9mXG4mIzQzO1x0XHQgKiBwZXItSEFSVCBJTVNJQyBndWVzdCBmaWxlcyBhbmQgbnVtYmVyIG9mIGJpdHMgaW4gSEdFSUUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChsYylcbiYjNDM7XHRcdFx0aGdjdHJsLVx1MDAzZW5yX2hnZWkgPSBtaW4oKHVsb25nKWhnY3RybC1cdTAwM2Vucl9oZ2VpLCBsYy1cdTAwM2Vucl9ndWVzdF9maWxlcyk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGhnY3RybC1cdTAwM2Vucl9oZ2VpID0gMDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBVcGRhdGUgdGhlIG51bWJlciBvZiBJTVNJQyBndWVzdCBmaWxlcyBhY3Jvc3MgYWxsIEhBUlRzICovXG4mIzQzO1x0XHRhaWFfbnJfaGdlaSA9IGF0b21pY19yZWFkKFx1MDAyNmt2bV9yaXNjdl9haWFfbnJfaGdlaSk7XG4mIzQzO1x0XHRkbyB7XG4mIzQzO1x0XHRcdGlmIChhaWFfbnJfaGdlaSBcdTAwM2M9IGhnY3RybC1cdTAwM2Vucl9oZ2VpKVxuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0fSB3aGlsZSAoIWF0b21pY190cnlfY21weGNoZyhcdTAwMjZrdm1fcmlzY3ZfYWlhX25yX2hnZWksIFx1MDAyNmFpYV9ucl9oZ2VpLFxuJiM0MztcdFx0XHRcdFx0ICAgICBoZ2N0cmwtXHUwMDNlbnJfaGdlaSkpO1xuJiM0MztcbiYjNDM7XHRcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZoZ2N0cmwtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0aWYgKCFoZ2N0cmwtXHUwMDNlZnJlZV9iaXRtYXBfaW5pdGlhbGl6ZWQpIHtcbiYjNDM7XHRcdFx0aGdjdHJsLVx1MDAzZWZyZWVfYml0bWFwID0gKGhnY3RybC1cdTAwM2Vucl9oZ2VpKSA/XG4mIzQzO1x0XHRcdFx0XHQgICAgICBHRU5NQVNLX1VMTChoZ2N0cmwtXHUwMDNlbnJfaGdlaSwgMSkgOlxuJiM0MztcdFx0XHRcdFx0ICAgICAgMDtcbiYjNDM7XHRcdFx0aGdjdHJsLVx1MDAzZWZyZWVfYml0bWFwX2luaXRpYWxpemVkID0gdHJ1ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmhnY3RybC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGNzcl93cml0ZShDU1JfSEdFSUUsIGhnY3RybC1cdTAwM2VzYXZlZF92YWx1ZSk7XG4gXHR9XG4tXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZoZ2N0cmwtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFxuIFx0Y3NyX3dyaXRlKENTUl9IVklDVEwsIGFpYV9odmljdGxfdmFsdWUoZmFsc2UpKTtcbiBcdGNzcl93cml0ZShDU1JfSFZJUFJJTzEsIDB4MCk7XG5AQCAtNTg3LDE2ICYjNDM7NTk3LDE3IEBAIHZvaWQga3ZtX3Jpc2N2X2FpYV9lbmFibGUodm9pZClcbiBcdGNzcl93cml0ZShDU1JfSFZJUFJJTzJILCAweDApO1xuICNlbmRpZlxuIFxuLVx0LyogRW5hYmxlIHBlci1DUFUgU0dFSSBpbnRlcnJ1cHQgKi9cbi1cdGVuYWJsZV9wZXJjcHVfaXJxKGhnZWlfcGFyZW50X2lycSxcbi1cdFx0XHQgIGlycV9nZXRfdHJpZ2dlcl90eXBlKGhnZWlfcGFyZW50X2lycSkpO1xuJiM0MztcdGlmIChmdWxsX2NsZWFudXApXG4mIzQzO1x0XHRlbmFibGVfcGVyY3B1X2lycShoZ2VpX3BhcmVudF9pcnEsXG4mIzQzO1x0XHRcdFx0ICBpcnFfZ2V0X3RyaWdnZXJfdHlwZShoZ2VpX3BhcmVudF9pcnEpKTtcbiBcdGNzcl9zZXQoQ1NSX0hJRSwgQklUKElSUV9TX0dFWFQpKTtcbiYjNDM7XG4gXHQvKiBFbmFibGUgSVJRIGZpbHRlcmluZyBmb3Igb3ZlcmZsb3cgaW50ZXJydXB0IG9ubHkgaWYgc3Njb2ZwbWYgaXMgcHJlc2VudCAqL1xuIFx0aWYgKF9fcmlzY3ZfaXNhX2V4dGVuc2lvbl9hdmFpbGFibGUoTlVMTCwgUklTQ1ZfSVNBX0VYVF9TU0NPRlBNRikpXG4gXHRcdGNzcl9zZXQoQ1NSX0hWSUVOLCBCSVQoSVJRX1BNVV9PVkYpKTtcbiB9XG4gXG4tdm9pZCBrdm1fcmlzY3ZfYWlhX2Rpc2FibGUodm9pZClcbiYjNDM7dm9pZCBrdm1fcmlzY3ZfYWlhX2Rpc2FibGUoYm9vbCBmdWxsX2NsZWFudXApXG4ge1xuIFx0aW50IGk7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuQEAgLTYwOSw0MiAmIzQzOzYyMCw0OSBAQCB2b2lkIGt2bV9yaXNjdl9haWFfZGlzYWJsZSh2b2lkKVxuIFxuIFx0aWYgKF9fcmlzY3ZfaXNhX2V4dGVuc2lvbl9hdmFpbGFibGUoTlVMTCwgUklTQ1ZfSVNBX0VYVF9TU0NPRlBNRikpXG4gXHRcdGNzcl9jbGVhcihDU1JfSFZJRU4sIEJJVChJUlFfUE1VX09WRikpO1xuLVx0LyogRGlzYWJsZSBwZXItQ1BVIFNHRUkgaW50ZXJydXB0ICovXG4tXHRjc3JfY2xlYXIoQ1NSX0hJRSwgQklUKElSUV9TX0dFWFQpKTtcbi1cdGRpc2FibGVfcGVyY3B1X2lycShoZ2VpX3BhcmVudF9pcnEpO1xuIFxuLVx0Y3NyX3dyaXRlKENTUl9IVklDVEwsIGFpYV9odmljdGxfdmFsdWUoZmFsc2UpKTtcbi1cbi1cdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZoZ2N0cmwtXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2M9IGhnY3RybC1cdTAwM2Vucl9oZ2VpOyBpJiM0MzsmIzQzOykge1xuLVx0XHR2Y3B1ID0gaGdjdHJsLVx1MDAzZW93bmVyc1tpXTtcbi1cdFx0aWYgKCF2Y3B1KVxuLVx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdGlmIChmdWxsX2NsZWFudXApIHtcbiYjNDM7XHRcdC8qIERpc2FibGUgcGVyLUNQVSBTR0VJIGludGVycnVwdCAqL1xuJiM0MztcdFx0Y3NyX2NsZWFyKENTUl9ISUUsIEJJVChJUlFfU19HRVhUKSk7XG4mIzQzO1x0XHRkaXNhYmxlX3BlcmNwdV9pcnEoaGdlaV9wYXJlbnRfaXJxKTtcbiYjNDM7XHR9XG4gXG4tXHRcdC8qXG4tXHRcdCAqIFdlIHJlbGVhc2UgaGdjdHJsLVx1MDAzZWxvY2sgYmVmb3JlIG5vdGlmeWluZyBJTVNJQ1xuLVx0XHQgKiBzbyB0aGF0IHdlIGRvbiYjMzk7dCBoYXZlIGxvY2sgb3JkZXJpbmcgaXNzdWVzLlxuLVx0XHQgKi9cbi1cdFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aGdjdHJsLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRjc3Jfd3JpdGUoQ1NSX0hWSUNUTCwgYWlhX2h2aWN0bF92YWx1ZShmYWxzZSkpO1xuIFxuLVx0XHQvKiBOb3RpZnkgSU1TSUMgKi9cbi1cdFx0a3ZtX3Jpc2N2X3ZjcHVfYWlhX2ltc2ljX3JlbGVhc2UodmNwdSk7XG4mIzQzO1x0aWYgKGZ1bGxfY2xlYW51cCkge1xuJiM0MztcdFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmhnY3RybC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4tXHRcdC8qXG4tXHRcdCAqIFdha2V1cCBWQ1BVIGlmIGl0IHdhcyBibG9ja2VkIHNvIHRoYXQgaXQgY2FuXG4tXHRcdCAqIHJ1biBvbiBvdGhlciBIQVJUc1xuLVx0XHQgKi9cbi1cdFx0aWYgKGNzcl9yZWFkKENTUl9IR0VJRSkgXHUwMDI2IEJJVChpKSkge1xuLVx0XHRcdGNzcl9jbGVhcihDU1JfSEdFSUUsIEJJVChpKSk7XG4tXHRcdFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBoZ2N0cmwtXHUwMDNlbnJfaGdlaTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0dmNwdSA9IGhnY3RybC1cdTAwM2Vvd25lcnNbaV07XG4mIzQzO1x0XHRcdGlmICghdmNwdSlcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFdlIHJlbGVhc2UgaGdjdHJsLVx1MDAzZWxvY2sgYmVmb3JlIG5vdGlmeWluZyBJTVNJQ1xuJiM0MztcdFx0XHQgKiBzbyB0aGF0IHdlIGRvbiYjMzk7dCBoYXZlIGxvY2sgb3JkZXJpbmcgaXNzdWVzLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aGdjdHJsLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0XHRcdC8qIE5vdGlmeSBJTVNJQyAqL1xuJiM0MztcdFx0XHRrdm1fcmlzY3ZfdmNwdV9haWFfaW1zaWNfcmVsZWFzZSh2Y3B1KTtcbiYjNDM7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFdha2V1cCBWQ1BVIGlmIGl0IHdhcyBibG9ja2VkIHNvIHRoYXQgaXQgY2FuXG4mIzQzO1x0XHRcdCAqIHJ1biBvbiBvdGhlciBIQVJUc1xuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aWYgKGNzcl9yZWFkKENTUl9IR0VJRSkgXHUwMDI2IEJJVChpKSkge1xuJiM0MztcdFx0XHRcdGNzcl9jbGVhcihDU1JfSEdFSUUsIEJJVChpKSk7XG4mIzQzO1x0XHRcdFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmhnY3RybC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRcdH1cbiBcbi1cdFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmhnY3RybC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZoZ2N0cmwtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRoZ2N0cmwtXHUwMDNlc2F2ZWRfdmFsdWUgPSBjc3JfcmVhZChDU1JfSEdFSUUpO1xuIFx0fVxuIFxuLVx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aGdjdHJsLVx1MDAzZWxvY2ssIGZsYWdzKTtcbi1cbiBcdHB1dF9jcHVfcHRyKFx1MDAyNmFpYV9oZ2VpKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vbWFpbi5jIGIvYXJjaC9yaXNjdi9rdm0vbWFpbi5jXG5pbmRleCAwOTI0Yzc1MTAwYTJkMC4uYjg0NjFmMWE1NjlmYWUgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL21haW4uY1xuQEAgLTEwLDYgJiM0MzsxMCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXJyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bV9ob3N0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY3B1X3BtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vY3B1ZmVhdHVyZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9tbXUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fbmFjbC5oXHUwMDNlXG5AQCAtMzMsMTQgJiM0MzszNCw5IEBAIGxvbmcga3ZtX2FyY2hfZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuIFx0cmV0dXJuIC1FSU5WQUw7XG4gfVxuIFxuLWludCBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXG4mIzQzOy8qIEluaXRpYWxpemUgaHlwZXJ2aXNvciBDU1JzIC0gY2FsbGVkIGR1cmluZyBDUFUgb25saW5lIGFuZCBub24tcmV0ZW50aW9uIGlkbGUgcmVzdW1lICovXG4mIzQzO3N0YXRpYyB2b2lkIGt2bV9yaXNjdl9jc3JfZW5hYmxlKHZvaWQpXG4ge1xuLVx0aW50IHJjO1xuLVxuLVx0cmMgPSBrdm1fcmlzY3ZfbmFjbF9lbmFibGUoKTtcbi1cdGlmIChyYylcbi1cdFx0cmV0dXJuIHJjO1xuLVxuIFx0Y3NyX3dyaXRlKENTUl9IRURFTEVHLCAwKTtcbiBcdGNzcl93cml0ZShDU1JfSElERUxFRywgMCk7XG4gXG5AQCAtNDgsMTYgJiM0Mzs0NCwxMSBAQCBpbnQga3ZtX2FyY2hfZW5hYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKVxuIFx0Y3NyX3dyaXRlKENTUl9IQ09VTlRFUkVOLCAweDAyKTtcbiBcbiBcdGNzcl93cml0ZShDU1JfSFZJUCwgMCk7XG4tXG4tXHRrdm1fcmlzY3ZfYWlhX2VuYWJsZSgpO1xuLVxuLVx0cmV0dXJuIDA7XG4gfVxuIFxuLXZvaWQga3ZtX2FyY2hfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUodm9pZClcbiYjNDM7LyogQ2xlYXIgaHlwZXJ2aXNvciBDU1JzIC0gY2FsbGVkIGR1cmluZyBDUFUgb2ZmbGluZSBhbmQgbm9uLXJldGVudGlvbiBpZGxlIGVudHJ5ICovXG4mIzQzO3N0YXRpYyB2b2lkIGt2bV9yaXNjdl9jc3JfZGlzYWJsZSh2b2lkKVxuIHtcbi1cdGt2bV9yaXNjdl9haWFfZGlzYWJsZSgpO1xuLVxuIFx0LypcbiBcdCAqIEFmdGVyIGNsZWFyaW5nIHRoZSBoaWRlbGVnIENTUiwgdGhlIGhvc3Qga2VybmVsIHdpbGwgcmVjZWl2ZVxuIFx0ICogc3B1cmlvdXMgaW50ZXJydXB0cyBpZiBodmlwIENTUiBoYXMgcGVuZGluZyBpbnRlcnJ1cHRzIGFuZCB0aGVcbkBAIC02OSw5ICYjNDM7NjAsNjIgQEAgdm9pZCBrdm1fYXJjaF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKVxuIFx0Y3NyX3dyaXRlKENTUl9IRURFTEVHLCAwKTtcbiBcdGNzcl93cml0ZShDU1JfSElERUxFRywgMCk7XG4gXG4mIzQzO1x0a3ZtX3Jpc2N2X2NsZWFyX2Zvcm1lcl92Y3B1KCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdHJjID0ga3ZtX3Jpc2N2X25hY2xfZW5hYmxlKCk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRrdm1fcmlzY3ZfY3NyX2VuYWJsZSgpO1xuJiM0MztcdGt2bV9yaXNjdl9haWFfZW5hYmxlKHRydWUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBrdm1fYXJjaF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0a3ZtX3Jpc2N2X2FpYV9kaXNhYmxlKHRydWUpO1xuJiM0MztcdGt2bV9yaXNjdl9jc3JfZGlzYWJsZSgpO1xuIFx0a3ZtX3Jpc2N2X25hY2xfZGlzYWJsZSgpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBrdm1fcmlzY3ZfY3B1X3BtX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwgdW5zaWduZWQgbG9uZyBjbWQsIHZvaWQgKnYpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRvIGF2b2lkIHJlZHVuZGFudCBkaXNhYmxlL2VuYWJsZSBvcGVyYXRpb25zIChzaW5jZSBLVk0mIzM5O3NcbiYjNDM7XHQgKiBzeXNjb3JlIG9wcyB3aWxsIGhhbmRsZSB0aGUgc3RhdGUgZHVyaW5nIHN5c3RlbSBzdXNwZW5kKSxcbiYjNDM7XHQgKiBpZ25vcmUgQ1BVX1BNIGV2ZW50cyB3aGVuIGEgc3lzdGVtIHN1c3BlbmQvcmVzdW1lIGlzIGluXG4mIzQzO1x0ICogcHJvZ3Jlc3MuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fU1VTUEVORClcbiYjNDM7XHRcdHJldHVybiBOT1RJRllfRE9ORTtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChjbWQpIHtcbiYjNDM7XHRjYXNlIENQVV9QTV9FWElUOlxuJiM0MztcdGNhc2UgQ1BVX1BNX0VOVEVSX0ZBSUxFRDpcbiYjNDM7XHRcdGt2bV9yaXNjdl9jc3JfZW5hYmxlKCk7XG4mIzQzO1x0XHRrdm1fcmlzY3ZfYWlhX2VuYWJsZShmYWxzZSk7XG4mIzQzO1x0XHRyZXR1cm4gTk9USUZZX09LO1xuJiM0MztcdGNhc2UgQ1BVX1BNX0VOVEVSOlxuJiM0MztcdFx0a3ZtX3Jpc2N2X2FpYV9kaXNhYmxlKGZhbHNlKTtcbiYjNDM7XHRcdGt2bV9yaXNjdl9jc3JfZGlzYWJsZSgpO1xuJiM0MztcdFx0cmV0dXJuIE5PVElGWV9PSztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sga3ZtX3Jpc2N2X2NwdV9wbV9uYiA9IHtcbiYjNDM7XHQubm90aWZpZXJfY2FsbCA9IGt2bV9yaXNjdl9jcHVfcG1fbm90aWZpZXIsXG4mIzQzO307XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGt2bV9yaXNjdl90ZWFyZG93bih2b2lkKVxuIHtcbiBcdGt2bV9yaXNjdl9haWFfZXhpdCgpO1xuQEAgLTE3MiwyMiAmIzQzOzIxNiw0MCBAQCBzdGF0aWMgaW50IF9faW5pdCByaXNjdl9rdm1faW5pdCh2b2lkKVxuIFxuIFx0a3ZtX3JlZ2lzdGVyX3BlcmZfY2FsbGJhY2tzKCk7XG4gXG4tXHRyYyA9IGt2bV9pbml0KHNpemVvZihzdHJ1Y3Qga3ZtX3ZjcHUpLCAwLCBUSElTX01PRFVMRSk7XG4tXHRpZiAocmMpIHtcbi1cdFx0a3ZtX3Jpc2N2X3RlYXJkb3duKCk7XG4tXHRcdHJldHVybiByYztcbiYjNDM7XHQvKiBSZWdpc3RlciBDUFUgUE0gbm90aWZpZXIgZm9yIENQVSBpZGxlIG5vbi1yZXRlbnRpb24gc3RhdGVzICovXG4mIzQzO1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX0NQVV9QTSkpIHtcbiYjNDM7XHRcdHJjID0gY3B1X3BtX3JlZ2lzdGVyX25vdGlmaWVyKFx1MDAyNmt2bV9yaXNjdl9jcHVfcG1fbmIpO1xuJiM0MztcdFx0aWYgKHJjKSB7XG4mIzQzO1x0XHRcdGt2bV9lcnIoXCYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIENQVSBQTSBub3RpZmllcjogJWRcXG5cJiMzNDssIHJjKTtcbiYjNDM7XHRcdFx0Z290byBlcnJfdGVhcmRvd247XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4mIzQzO1x0cmMgPSBrdm1faW5pdChzaXplb2Yoc3RydWN0IGt2bV92Y3B1KSwgMCwgVEhJU19NT0RVTEUpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdGdvdG8gZXJyX3VucmVnaXN0ZXJfY3B1X3BtO1xuJiM0MztcbiBcdGlmIChrdm1fcmlzY3ZfYWlhX2F2YWlsYWJsZSgpKVxuIFx0XHRrdm1faW5mbyhcJiMzNDtBSUEgYXZhaWxhYmxlIHdpdGggJWQgZ3Vlc3QgZXh0ZXJuYWwgaW50ZXJydXB0c1xcblwmIzM0OyxcbiBcdFx0XHQgYXRvbWljX3JlYWQoXHUwMDI2a3ZtX3Jpc2N2X2FpYV9ucl9oZ2VpKSk7XG4gXG4gXHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl91bnJlZ2lzdGVyX2NwdV9wbTpcbiYjNDM7XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQ1BVX1BNKSlcbiYjNDM7XHRcdGNwdV9wbV91bnJlZ2lzdGVyX25vdGlmaWVyKFx1MDAyNmt2bV9yaXNjdl9jcHVfcG1fbmIpO1xuJiM0MztlcnJfdGVhcmRvd246XG4mIzQzO1x0a3ZtX3Jpc2N2X3RlYXJkb3duKCk7XG4mIzQzO1x0cmV0dXJuIHJjO1xuIH1cbiBtb2R1bGVfaW5pdChyaXNjdl9rdm1faW5pdCk7XG4gXG4gc3RhdGljIHZvaWQgX19leGl0IHJpc2N2X2t2bV9leGl0KHZvaWQpXG4ge1xuJiM0MztcdC8qIFVucmVnaXN0ZXIgQ1BVIFBNIG5vdGlmaWVyICovXG4mIzQzO1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX0NQVV9QTSkpXG4mIzQzO1x0XHRjcHVfcG1fdW5yZWdpc3Rlcl9ub3RpZmllcihcdTAwMjZrdm1fcmlzY3ZfY3B1X3BtX25iKTtcbiYjNDM7XG4gXHRrdm1fZXhpdCgpO1xuIFxuIFx0a3ZtX3Jpc2N2X3RlYXJkb3duKCk7XG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vdmNwdS5jIGIvYXJjaC9yaXNjdi9rdm0vdmNwdS5jXG5pbmRleCBjZjZlMjMxZTc2ZTI1NC4uZTQ4MzM4ZjkwN2Y0ODggMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS92Y3B1LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL3ZjcHUuY1xuQEAgLTI2LDYgJiM0MzsyNiwxNyBAQFxuIFxuIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qga3ZtX3ZjcHUgKiwga3ZtX2Zvcm1lcl92Y3B1KTtcbiBcbiYjNDM7dm9pZCBrdm1fcmlzY3ZfY2xlYXJfZm9ybWVyX3ZjcHUodm9pZClcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQ2xlYXIgdGhlIHBlci1DUFUgZm9ybWVyIFZDUFUgcG9pbnRlciBiZWNhdXNlIGh5cGVydmlzb3IgQ1NSIHN0YXRlXG4mIzQzO1x0ICogd2lsbCBiZSBsb3N0LiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgbmV4dCBWQ1BVIGVudHJ5IHdpbGwgcHJvcGVybHlcbiYjNDM7XHQgKiByZXN0b3JlIGFsbCBDU1JzIGluc3RlYWQgb2YgaW5jb3JyZWN0bHkgc2tpcHBpbmcgQ1NSIHJlc3RvcmF0aW9uXG4mIzQzO1x0ICogdmlhIHRoZSBmYXN0LXBhdGggb3B0aW1pemF0aW9uLlxuJiM0MztcdCAqL1xuJiM0MztcdF9fdGhpc19jcHVfd3JpdGUoa3ZtX2Zvcm1lcl92Y3B1LCBOVUxMKTtcbiYjNDM7fVxuJiM0MztcbiBjb25zdCBzdHJ1Y3Qga3ZtX3N0YXRzX2Rlc2Mga3ZtX3ZjcHVfc3RhdHNfZGVzY1tdID0ge1xuIFx0S1ZNX0dFTkVSSUNfVkNQVV9TVEFUUygpLFxuIFx0U1RBVFNfREVTQ19DT1VOVEVSKFZDUFUsIGVjYWxsX2V4aXRfc3RhdCksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjI6NDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0NQVV9JRExFJiMzNDssCiAgICAmIzM0O1NVU1BFTkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fcmlzY3ZfY3B1X3BtX25vdGlmaWVyJiMzNDssCiAgICAmIzM0O2t2bV9yaXNjdl9haWFfZW5hYmxlJiMzNDssCiAgICAmIzM0O2t2bV9yaXNjdl9haWFfZGlzYWJsZSYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfY2xlYXJfZm9ybWVyX3ZjcHUmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfZW5hYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfY3NyX2VuYWJsZSYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfY3NyX2Rpc2FibGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIG1vZGlmaWVzIFJJU0MtViBLVk0gdG8gaGFuZGxlIENQVSBwb3dlciBtYW5hZ2VtZW50IGV2ZW50cyAoQ1BVX1BNKSBmb3Igbm9uLXJldGVudGlvbiBpZGxlIHN0YXRlcy4gSXQgaW50cm9kdWNlcyBhIENQVSBQTSBub3RpZmllciBhbmQgbW9kaWZpZXMgQUlBIChBZHZhbmNlZCBJbnRlcnJ1cHQgQXJjaGl0ZWN0dXJlKSBlbmFibGUvZGlzYWJsZSBwYXRocyB0byBzdXBwb3J0IGxpZ2h0d2VpZ2h0IENTUiBzYXZlL3Jlc3RvcmUuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBLVk0gbG9naWMgb24gUklTQy1WIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBpbiB2aXJ0dWFsaXphdGlvbiBvciBwb3dlciBtYW5hZ2VtZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxMjUxNjcyMTZmYTIzZGFlOGZjYWZkY2M3MWQ5ZjI5MDdkNGI1NGVmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdW4gMjYgMjI6NDQ6MzAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9haWEuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2FpYS5oCmluZGV4IGM2N2VjNWFjMGExNDZiLi43YzFjMzI1MDU5OGZiMCAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fYWlhLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fYWlhLmgKQEAgLTE2NSw4ICYjNDM7MTY1LDE5IEBAIGludCBrdm1fcmlzY3ZfYWlhX2FsbG9jX2hnZWkoaW50IGNwdSwgc3RydWN0IGt2bV92Y3B1ICpvd25lciwKIAkJCSAgICAgdm9pZCBfX2lvbWVtICoqaGdlaV92YSwgcGh5c19hZGRyX3QgKmhnZWlfcGEpOwogdm9pZCBrdm1fcmlzY3ZfYWlhX2ZyZWVfaGdlaShpbnQgY3B1LCBpbnQgaGdlaSk7CiAKLXZvaWQga3ZtX3Jpc2N2X2FpYV9lbmFibGUodm9pZCk7Ci12b2lkIGt2bV9yaXNjdl9haWFfZGlzYWJsZSh2b2lkKTsKJiM0MzsvKioKJiM0MzsgKiBrdm1fcmlzY3ZfYWlhX2VuYWJsZSgpIC0gRW5hYmxlIEFJQSBzdXBwb3J0IG9uIGN1cnJlbnQgQ1BVCiYjNDM7ICogQGZ1bGxfY2xlYW51cDogdHJ1ZSA9IGZ1bGwgaGFyZHdhcmUgaW5pdCAoQ1BVIGhvdHBsdWcvbW9kdWxlIGxvYWQpLAomIzQzOyAqICAgICAgICAgICAgICAgIGZhbHNlID0gbGlnaHR3ZWlnaHQgQ1NSIHJlc3RvcmUgKENQVSBub24tcmV0ZW50aW9uIGlkbGUgcmVzdW1lKQomIzQzOyAqLwomIzQzO3ZvaWQga3ZtX3Jpc2N2X2FpYV9lbmFibGUoYm9vbCBmdWxsX2NsZWFudXApOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIGt2bV9yaXNjdl9haWFfZGlzYWJsZSgpIC0gRGlzYWJsZSBBSUEgc3VwcG9ydCBvbiBjdXJyZW50IENQVQomIzQzOyAqIEBmdWxsX2NsZWFudXA6IHRydWUgPSBmdWxsIGhhcmR3YXJlIGNsZWFudXAgKENQVSBob3RwbHVnL21vZHVsZSBleGl0KSwKJiM0MzsgKiAgICAgICAgICAgICAgICBmYWxzZSA9IGxpZ2h0d2VpZ2h0IENTUiBzYXZlIChDUFUgbm9uLXJldGVudGlvbiBpZGxlIGVudHJ5KQomIzQzOyAqLwomIzQzO3ZvaWQga3ZtX3Jpc2N2X2FpYV9kaXNhYmxlKGJvb2wgZnVsbF9jbGVhbnVwKTsKIGludCBrdm1fcmlzY3ZfYWlhX2luaXQodm9pZCk7CiB2b2lkIGt2bV9yaXNjdl9haWFfZXhpdCh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IDYwMDE3Y2VlYzlkMmFmLi44MDhiNGVlMWJkMTBhYyAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtMzE5LDYgJiM0MzszMTksOCBAQCBib29sIGt2bV9yaXNjdl92Y3B1X3N0b3BwZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogdm9pZCBrdm1fcmlzY3ZfdmNwdV9yZWNvcmRfc3RlYWxfdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiYjNDM7dm9pZCBrdm1fcmlzY3ZfY2xlYXJfZm9ybWVyX3ZjcHUodm9pZCk7CiYjNDM7CiAvKiBGbGFncyByZXByZXNlbnRpbmcgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgZGV0YWlscyAqLwogREVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKGt2bV9yaXNjdl92c3N0YWdlX3RsYl9ub19ncGEpOwogCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9haWEuYyBiL2FyY2gvcmlzY3Yva3ZtL2FpYS5jCmluZGV4IGJhZmIwMDljNWNlNTU5Li40Y2YzNTFmOTFjNjQzZiAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9rdm0vYWlhLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rdm0vYWlhLmMKQEAgLTI1LDYgJiM0MzsyNSw3IEBAIHN0cnVjdCBhaWFfaGdlaV9jb250cm9sIHsKIAl1bnNpZ25lZCBsb25nIGZyZWVfYml0bWFwOwogCXN0cnVjdCBrdm1fdmNwdSAqb3duZXJzW0JJVFNfUEVSX0xPTkddOwogCXVuc2lnbmVkIGludCBucl9oZ2VpOwomIzQzOwl1bnNpZ25lZCBsb25nIHNhdmVkX3ZhbHVlOwogfTsKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgYWlhX2hnZWlfY29udHJvbCwgYWlhX2hnZWkpOwogc3RhdGljIGludCBoZ2VpX3BhcmVudF9pcnE7CkBAIC01MzIsNTAgJiM0Mzs1MzMsNTkgQEAgc3RhdGljIHZvaWQgYWlhX2hnZWlfZXhpdCh2b2lkKQogCWZyZWVfcGVyY3B1X2lycShoZ2VpX3BhcmVudF9pcnEsICZhbXA7YWlhX2hnZWkpOwogfQogCi12b2lkIGt2bV9yaXNjdl9haWFfZW5hYmxlKHZvaWQpCiYjNDM7dm9pZCBrdm1fcmlzY3ZfYWlhX2VuYWJsZShib29sIGZ1bGxfY2xlYW51cCkKIHsKLQljb25zdCBzdHJ1Y3QgaW1zaWNfZ2xvYmFsX2NvbmZpZyAqZ2M7Ci0JY29uc3Qgc3RydWN0IGltc2ljX2xvY2FsX2NvbmZpZyAqbGM7CiAJc3RydWN0IGFpYV9oZ2VpX2NvbnRyb2wgKmhnY3RybDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBhaWFfbnJfaGdlaTsKIAogCWlmICgha3ZtX3Jpc2N2X2FpYV9hdmFpbGFibGUoKSkKIAkJcmV0dXJuOwogCi0JZ2MgPSBpbXNpY19nZXRfZ2xvYmFsX2NvbmZpZygpOwotCWxjID0gKGdjKSA/IHRoaXNfY3B1X3B0cihnYy0mZ3Q7bG9jYWwpIDogTlVMTDsKIAloZ2N0cmwgPSB0aGlzX2NwdV9wdHIoJmFtcDthaWFfaGdlaSk7CiAKLQkvKiBGaWd1cmUtb3V0IG51bWJlciBvZiBiaXRzIGluIEhHRUlFICovCi0JY3NyX3dyaXRlKENTUl9IR0VJRSwgLTFVTCk7Ci0JaGdjdHJsLSZndDtucl9oZ2VpID0gZmxzX2xvbmcoY3NyX3JlYWQoQ1NSX0hHRUlFKSk7Ci0JY3NyX3dyaXRlKENTUl9IR0VJRSwgMCk7Ci0JaWYgKGhnY3RybC0mZ3Q7bnJfaGdlaSkKLQkJaGdjdHJsLSZndDtucl9oZ2VpLS07CiYjNDM7CWlmIChmdWxsX2NsZWFudXApIHsKJiM0MzsJCWNvbnN0IHN0cnVjdCBpbXNpY19nbG9iYWxfY29uZmlnICpnYzsKJiM0MzsJCWNvbnN0IHN0cnVjdCBpbXNpY19sb2NhbF9jb25maWcgKmxjOwomIzQzOwkJaW50IGFpYV9ucl9oZ2VpOwogCi0JLyoKLQkgKiBOdW1iZXIgb2YgdXNhYmxlIHBlci1IQVJUIEhHRUkgbGluZXMgc2hvdWxkIGJlIG1pbmltdW0gb2YKLQkgKiBwZXItSEFSVCBJTVNJQyBndWVzdCBmaWxlcyBhbmQgbnVtYmVyIG9mIGJpdHMgaW4gSEdFSUUuCi0JICovCi0JaWYgKGxjKQotCQloZ2N0cmwtJmd0O25yX2hnZWkgPSBtaW4oKHVsb25nKWhnY3RybC0mZ3Q7bnJfaGdlaSwgbGMtJmd0O25yX2d1ZXN0X2ZpbGVzKTsKLQllbHNlCi0JCWhnY3RybC0mZ3Q7bnJfaGdlaSA9IDA7CiYjNDM7CQlnYyA9IGltc2ljX2dldF9nbG9iYWxfY29uZmlnKCk7CiYjNDM7CQlsYyA9IChnYykgPyB0aGlzX2NwdV9wdHIoZ2MtJmd0O2xvY2FsKSA6IE5VTEw7CiAKLQkvKiBVcGRhdGUgdGhlIG51bWJlciBvZiBJTVNJQyBndWVzdCBmaWxlcyBhY3Jvc3MgYWxsIEhBUlRzICovCi0JYWlhX25yX2hnZWkgPSBhdG9taWNfcmVhZCgmYW1wO2t2bV9yaXNjdl9haWFfbnJfaGdlaSk7Ci0JZG8gewotCQlpZiAoYWlhX25yX2hnZWkgJmx0Oz0gaGdjdHJsLSZndDtucl9oZ2VpKQotCQkJYnJlYWs7Ci0JfSB3aGlsZSAoIWF0b21pY190cnlfY21weGNoZygmYW1wO2t2bV9yaXNjdl9haWFfbnJfaGdlaSwgJmFtcDthaWFfbnJfaGdlaSwgaGdjdHJsLSZndDtucl9oZ2VpKSk7CiYjNDM7CQkvKiBGaWd1cmUtb3V0IG51bWJlciBvZiBiaXRzIGluIEhHRUlFICovCiYjNDM7CQljc3Jfd3JpdGUoQ1NSX0hHRUlFLCAtMVVMKTsKJiM0MzsJCWhnY3RybC0mZ3Q7bnJfaGdlaSA9IGZsc19sb25nKGNzcl9yZWFkKENTUl9IR0VJRSkpOwomIzQzOwkJY3NyX3dyaXRlKENTUl9IR0VJRSwgMCk7CiYjNDM7CQlpZiAoaGdjdHJsLSZndDtucl9oZ2VpKQomIzQzOwkJCWhnY3RybC0mZ3Q7bnJfaGdlaS0tOwogCi0JcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7aGdjdHJsLSZndDtsb2NrLCBmbGFncyk7Ci0JaWYgKCFoZ2N0cmwtJmd0O2ZyZWVfYml0bWFwX2luaXRpYWxpemVkKSB7Ci0JCWhnY3RybC0mZ3Q7ZnJlZV9iaXRtYXAgPSAoaGdjdHJsLSZndDtucl9oZ2VpKSA/IEdFTk1BU0tfVUxMKGhnY3RybC0mZ3Q7bnJfaGdlaSwgMSkgOiAwOwotCQloZ2N0cmwtJmd0O2ZyZWVfYml0bWFwX2luaXRpYWxpemVkID0gdHJ1ZTsKJiM0MzsJCS8qCiYjNDM7CQkgKiBOdW1iZXIgb2YgdXNhYmxlIHBlci1IQVJUIEhHRUkgbGluZXMgc2hvdWxkIGJlIG1pbmltdW0gb2YKJiM0MzsJCSAqIHBlci1IQVJUIElNU0lDIGd1ZXN0IGZpbGVzIGFuZCBudW1iZXIgb2YgYml0cyBpbiBIR0VJRS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGxjKQomIzQzOwkJCWhnY3RybC0mZ3Q7bnJfaGdlaSA9IG1pbigodWxvbmcpaGdjdHJsLSZndDtucl9oZ2VpLCBsYy0mZ3Q7bnJfZ3Vlc3RfZmlsZXMpOwomIzQzOwkJZWxzZQomIzQzOwkJCWhnY3RybC0mZ3Q7bnJfaGdlaSA9IDA7CiYjNDM7CiYjNDM7CQkvKiBVcGRhdGUgdGhlIG51bWJlciBvZiBJTVNJQyBndWVzdCBmaWxlcyBhY3Jvc3MgYWxsIEhBUlRzICovCiYjNDM7CQlhaWFfbnJfaGdlaSA9IGF0b21pY19yZWFkKCZhbXA7a3ZtX3Jpc2N2X2FpYV9ucl9oZ2VpKTsKJiM0MzsJCWRvIHsKJiM0MzsJCQlpZiAoYWlhX25yX2hnZWkgJmx0Oz0gaGdjdHJsLSZndDtucl9oZ2VpKQomIzQzOwkJCQlicmVhazsKJiM0MzsJCX0gd2hpbGUgKCFhdG9taWNfdHJ5X2NtcHhjaGcoJmFtcDtrdm1fcmlzY3ZfYWlhX25yX2hnZWksICZhbXA7YWlhX25yX2hnZWksCiYjNDM7CQkJCQkgICAgIGhnY3RybC0mZ3Q7bnJfaGdlaSkpOwomIzQzOwomIzQzOwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7aGdjdHJsLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CQlpZiAoIWhnY3RybC0mZ3Q7ZnJlZV9iaXRtYXBfaW5pdGlhbGl6ZWQpIHsKJiM0MzsJCQloZ2N0cmwtJmd0O2ZyZWVfYml0bWFwID0gKGhnY3RybC0mZ3Q7bnJfaGdlaSkgPwomIzQzOwkJCQkJICAgICAgR0VOTUFTS19VTEwoaGdjdHJsLSZndDtucl9oZ2VpLCAxKSA6CiYjNDM7CQkJCQkgICAgICAwOwomIzQzOwkJCWhnY3RybC0mZ3Q7ZnJlZV9iaXRtYXBfaW5pdGlhbGl6ZWQgPSB0cnVlOwomIzQzOwkJfQomIzQzOwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtoZ2N0cmwtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWNzcl93cml0ZShDU1JfSEdFSUUsIGhnY3RybC0mZ3Q7c2F2ZWRfdmFsdWUpOwogCX0KLQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2hnY3RybC0mZ3Q7bG9jaywgZmxhZ3MpOwogCiAJY3NyX3dyaXRlKENTUl9IVklDVEwsIGFpYV9odmljdGxfdmFsdWUoZmFsc2UpKTsKIAljc3Jfd3JpdGUoQ1NSX0hWSVBSSU8xLCAweDApOwpAQCAtNTg3LDE2ICYjNDM7NTk3LDE3IEBAIHZvaWQga3ZtX3Jpc2N2X2FpYV9lbmFibGUodm9pZCkKIAljc3Jfd3JpdGUoQ1NSX0hWSVBSSU8ySCwgMHgwKTsKICNlbmRpZgogCi0JLyogRW5hYmxlIHBlci1DUFUgU0dFSSBpbnRlcnJ1cHQgKi8KLQllbmFibGVfcGVyY3B1X2lycShoZ2VpX3BhcmVudF9pcnEsCi0JCQkgIGlycV9nZXRfdHJpZ2dlcl90eXBlKGhnZWlfcGFyZW50X2lycSkpOwomIzQzOwlpZiAoZnVsbF9jbGVhbnVwKQomIzQzOwkJZW5hYmxlX3BlcmNwdV9pcnEoaGdlaV9wYXJlbnRfaXJxLAomIzQzOwkJCQkgIGlycV9nZXRfdHJpZ2dlcl90eXBlKGhnZWlfcGFyZW50X2lycSkpOwogCWNzcl9zZXQoQ1NSX0hJRSwgQklUKElSUV9TX0dFWFQpKTsKJiM0MzsKIAkvKiBFbmFibGUgSVJRIGZpbHRlcmluZyBmb3Igb3ZlcmZsb3cgaW50ZXJydXB0IG9ubHkgaWYgc3Njb2ZwbWYgaXMgcHJlc2VudCAqLwogCWlmIChfX3Jpc2N2X2lzYV9leHRlbnNpb25fYXZhaWxhYmxlKE5VTEwsIFJJU0NWX0lTQV9FWFRfU1NDT0ZQTUYpKQogCQljc3Jfc2V0KENTUl9IVklFTiwgQklUKElSUV9QTVVfT1ZGKSk7CiB9CiAKLXZvaWQga3ZtX3Jpc2N2X2FpYV9kaXNhYmxlKHZvaWQpCiYjNDM7dm9pZCBrdm1fcmlzY3ZfYWlhX2Rpc2FibGUoYm9vbCBmdWxsX2NsZWFudXApCiB7CiAJaW50IGk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTYwOSw0MiAmIzQzOzYyMCw0OSBAQCB2b2lkIGt2bV9yaXNjdl9haWFfZGlzYWJsZSh2b2lkKQogCiAJaWYgKF9fcmlzY3ZfaXNhX2V4dGVuc2lvbl9hdmFpbGFibGUoTlVMTCwgUklTQ1ZfSVNBX0VYVF9TU0NPRlBNRikpCiAJCWNzcl9jbGVhcihDU1JfSFZJRU4sIEJJVChJUlFfUE1VX09WRikpOwotCS8qIERpc2FibGUgcGVyLUNQVSBTR0VJIGludGVycnVwdCAqLwotCWNzcl9jbGVhcihDU1JfSElFLCBCSVQoSVJRX1NfR0VYVCkpOwotCWRpc2FibGVfcGVyY3B1X2lycShoZ2VpX3BhcmVudF9pcnEpOwogCi0JY3NyX3dyaXRlKENTUl9IVklDVEwsIGFpYV9odmljdGxfdmFsdWUoZmFsc2UpKTsKLQotCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2hnY3RybC0mZ3Q7bG9jaywgZmxhZ3MpOwotCi0JZm9yIChpID0gMDsgaSAmbHQ7PSBoZ2N0cmwtJmd0O25yX2hnZWk7IGkmIzQzOyYjNDM7KSB7Ci0JCXZjcHUgPSBoZ2N0cmwtJmd0O293bmVyc1tpXTsKLQkJaWYgKCF2Y3B1KQotCQkJY29udGludWU7CiYjNDM7CWlmIChmdWxsX2NsZWFudXApIHsKJiM0MzsJCS8qIERpc2FibGUgcGVyLUNQVSBTR0VJIGludGVycnVwdCAqLwomIzQzOwkJY3NyX2NsZWFyKENTUl9ISUUsIEJJVChJUlFfU19HRVhUKSk7CiYjNDM7CQlkaXNhYmxlX3BlcmNwdV9pcnEoaGdlaV9wYXJlbnRfaXJxKTsKJiM0MzsJfQogCi0JCS8qCi0JCSAqIFdlIHJlbGVhc2UgaGdjdHJsLSZndDtsb2NrIGJlZm9yZSBub3RpZnlpbmcgSU1TSUMKLQkJICogc28gdGhhdCB3ZSBkb24mIzM5O3QgaGF2ZSBsb2NrIG9yZGVyaW5nIGlzc3Vlcy4KLQkJICovCi0JCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7aGdjdHJsLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CWNzcl93cml0ZShDU1JfSFZJQ1RMLCBhaWFfaHZpY3RsX3ZhbHVlKGZhbHNlKSk7CiAKLQkJLyogTm90aWZ5IElNU0lDICovCi0JCWt2bV9yaXNjdl92Y3B1X2FpYV9pbXNpY19yZWxlYXNlKHZjcHUpOwomIzQzOwlpZiAoZnVsbF9jbGVhbnVwKSB7CiYjNDM7CQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtoZ2N0cmwtJmd0O2xvY2ssIGZsYWdzKTsKIAotCQkvKgotCQkgKiBXYWtldXAgVkNQVSBpZiBpdCB3YXMgYmxvY2tlZCBzbyB0aGF0IGl0IGNhbgotCQkgKiBydW4gb24gb3RoZXIgSEFSVHMKLQkJICovCi0JCWlmIChjc3JfcmVhZChDU1JfSEdFSUUpICZhbXA7IEJJVChpKSkgewotCQkJY3NyX2NsZWFyKENTUl9IR0VJRSwgQklUKGkpKTsKLQkJCWt2bV92Y3B1X2tpY2sodmNwdSk7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDs9IGhnY3RybC0mZ3Q7bnJfaGdlaTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQl2Y3B1ID0gaGdjdHJsLSZndDtvd25lcnNbaV07CiYjNDM7CQkJaWYgKCF2Y3B1KQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIFdlIHJlbGVhc2UgaGdjdHJsLSZndDtsb2NrIGJlZm9yZSBub3RpZnlpbmcgSU1TSUMKJiM0MzsJCQkgKiBzbyB0aGF0IHdlIGRvbiYjMzk7dCBoYXZlIGxvY2sgb3JkZXJpbmcgaXNzdWVzLgomIzQzOwkJCSAqLwomIzQzOwkJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7aGdjdHJsLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CQkJLyogTm90aWZ5IElNU0lDICovCiYjNDM7CQkJa3ZtX3Jpc2N2X3ZjcHVfYWlhX2ltc2ljX3JlbGVhc2UodmNwdSk7CiYjNDM7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBXYWtldXAgVkNQVSBpZiBpdCB3YXMgYmxvY2tlZCBzbyB0aGF0IGl0IGNhbgomIzQzOwkJCSAqIHJ1biBvbiBvdGhlciBIQVJUcwomIzQzOwkJCSAqLwomIzQzOwkJCWlmIChjc3JfcmVhZChDU1JfSEdFSUUpICZhbXA7IEJJVChpKSkgewomIzQzOwkJCQljc3JfY2xlYXIoQ1NSX0hHRUlFLCBCSVQoaSkpOwomIzQzOwkJCQlrdm1fdmNwdV9raWNrKHZjcHUpOwomIzQzOwkJCX0KJiM0MzsKJiM0MzsJCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtoZ2N0cmwtJmd0O2xvY2ssIGZsYWdzKTsKIAkJfQogCi0JCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2hnY3RybC0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtoZ2N0cmwtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWhnY3RybC0mZ3Q7c2F2ZWRfdmFsdWUgPSBjc3JfcmVhZChDU1JfSEdFSUUpOwogCX0KIAotCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7aGdjdHJsLSZndDtsb2NrLCBmbGFncyk7Ci0KIAlwdXRfY3B1X3B0cigmYW1wO2FpYV9oZ2VpKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vbWFpbi5jIGIvYXJjaC9yaXNjdi9rdm0vbWFpbi5jCmluZGV4IDA5MjRjNzUxMDBhMmQwLi5iODQ2MWYxYTU2OWZhZSAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9rdm0vbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL21haW4uYwpAQCAtMTAsNiAmIzQzOzEwLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9lcnIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rdm1faG9zdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jcHVfcG0uaCZndDsKICNpbmNsdWRlICZsdDthc20vY3B1ZmVhdHVyZS5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9rdm1fbW11LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2t2bV9uYWNsLmgmZ3Q7CkBAIC0zMywxNCAmIzQzOzM0LDkgQEAgbG9uZyBrdm1fYXJjaF9kZXZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsCiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLWludCBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpCiYjNDM7LyogSW5pdGlhbGl6ZSBoeXBlcnZpc29yIENTUnMgLSBjYWxsZWQgZHVyaW5nIENQVSBvbmxpbmUgYW5kIG5vbi1yZXRlbnRpb24gaWRsZSByZXN1bWUgKi8KJiM0MztzdGF0aWMgdm9pZCBrdm1fcmlzY3ZfY3NyX2VuYWJsZSh2b2lkKQogewotCWludCByYzsKLQotCXJjID0ga3ZtX3Jpc2N2X25hY2xfZW5hYmxlKCk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0KIAljc3Jfd3JpdGUoQ1NSX0hFREVMRUcsIDApOwogCWNzcl93cml0ZShDU1JfSElERUxFRywgMCk7CiAKQEAgLTQ4LDE2ICYjNDM7NDQsMTEgQEAgaW50IGt2bV9hcmNoX2VuYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUodm9pZCkKIAljc3Jfd3JpdGUoQ1NSX0hDT1VOVEVSRU4sIDB4MDIpOwogCiAJY3NyX3dyaXRlKENTUl9IVklQLCAwKTsKLQotCWt2bV9yaXNjdl9haWFfZW5hYmxlKCk7Ci0KLQlyZXR1cm4gMDsKIH0KIAotdm9pZCBrdm1fYXJjaF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKQomIzQzOy8qIENsZWFyIGh5cGVydmlzb3IgQ1NScyAtIGNhbGxlZCBkdXJpbmcgQ1BVIG9mZmxpbmUgYW5kIG5vbi1yZXRlbnRpb24gaWRsZSBlbnRyeSAqLwomIzQzO3N0YXRpYyB2b2lkIGt2bV9yaXNjdl9jc3JfZGlzYWJsZSh2b2lkKQogewotCWt2bV9yaXNjdl9haWFfZGlzYWJsZSgpOwotCiAJLyoKIAkgKiBBZnRlciBjbGVhcmluZyB0aGUgaGlkZWxlZyBDU1IsIHRoZSBob3N0IGtlcm5lbCB3aWxsIHJlY2VpdmUKIAkgKiBzcHVyaW91cyBpbnRlcnJ1cHRzIGlmIGh2aXAgQ1NSIGhhcyBwZW5kaW5nIGludGVycnVwdHMgYW5kIHRoZQpAQCAtNjksOSAmIzQzOzYwLDYyIEBAIHZvaWQga3ZtX2FyY2hfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUodm9pZCkKIAljc3Jfd3JpdGUoQ1NSX0hFREVMRUcsIDApOwogCWNzcl93cml0ZShDU1JfSElERUxFRywgMCk7CiAKJiM0MzsJa3ZtX3Jpc2N2X2NsZWFyX2Zvcm1lcl92Y3B1KCk7CiYjNDM7fQomIzQzOwomIzQzO2ludCBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpCiYjNDM7ewomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CXJjID0ga3ZtX3Jpc2N2X25hY2xfZW5hYmxlKCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJa3ZtX3Jpc2N2X2Nzcl9lbmFibGUoKTsKJiM0MzsJa3ZtX3Jpc2N2X2FpYV9lbmFibGUodHJ1ZSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGt2bV9hcmNoX2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpCiYjNDM7ewomIzQzOwlrdm1fcmlzY3ZfYWlhX2Rpc2FibGUodHJ1ZSk7CiYjNDM7CWt2bV9yaXNjdl9jc3JfZGlzYWJsZSgpOwogCWt2bV9yaXNjdl9uYWNsX2Rpc2FibGUoKTsKIH0KIAomIzQzO3N0YXRpYyBpbnQga3ZtX3Jpc2N2X2NwdV9wbV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsIHVuc2lnbmVkIGxvbmcgY21kLCB2b2lkICp2KQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogVG8gYXZvaWQgcmVkdW5kYW50IGRpc2FibGUvZW5hYmxlIG9wZXJhdGlvbnMgKHNpbmNlIEtWTSYjMzk7cwomIzQzOwkgKiBzeXNjb3JlIG9wcyB3aWxsIGhhbmRsZSB0aGUgc3RhdGUgZHVyaW5nIHN5c3RlbSBzdXNwZW5kKSwKJiM0MzsJICogaWdub3JlIENQVV9QTSBldmVudHMgd2hlbiBhIHN5c3RlbSBzdXNwZW5kL3Jlc3VtZSBpcyBpbgomIzQzOwkgKiBwcm9ncmVzcy4KJiM0MzsJICovCiYjNDM7CWlmIChzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX1NVU1BFTkQpCiYjNDM7CQlyZXR1cm4gTk9USUZZX0RPTkU7CiYjNDM7CiYjNDM7CXN3aXRjaCAoY21kKSB7CiYjNDM7CWNhc2UgQ1BVX1BNX0VYSVQ6CiYjNDM7CWNhc2UgQ1BVX1BNX0VOVEVSX0ZBSUxFRDoKJiM0MzsJCWt2bV9yaXNjdl9jc3JfZW5hYmxlKCk7CiYjNDM7CQlrdm1fcmlzY3ZfYWlhX2VuYWJsZShmYWxzZSk7CiYjNDM7CQlyZXR1cm4gTk9USUZZX09LOwomIzQzOwljYXNlIENQVV9QTV9FTlRFUjoKJiM0MzsJCWt2bV9yaXNjdl9haWFfZGlzYWJsZShmYWxzZSk7CiYjNDM7CQlrdm1fcmlzY3ZfY3NyX2Rpc2FibGUoKTsKJiM0MzsJCXJldHVybiBOT1RJRllfT0s7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gTk9USUZZX0RPTkU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sga3ZtX3Jpc2N2X2NwdV9wbV9uYiA9IHsKJiM0MzsJLm5vdGlmaWVyX2NhbGwgPSBrdm1fcmlzY3ZfY3B1X3BtX25vdGlmaWVyLAomIzQzO307CiYjNDM7CiBzdGF0aWMgdm9pZCBrdm1fcmlzY3ZfdGVhcmRvd24odm9pZCkKIHsKIAlrdm1fcmlzY3ZfYWlhX2V4aXQoKTsKQEAgLTE3MiwyMiAmIzQzOzIxNiw0MCBAQCBzdGF0aWMgaW50IF9faW5pdCByaXNjdl9rdm1faW5pdCh2b2lkKQogCiAJa3ZtX3JlZ2lzdGVyX3BlcmZfY2FsbGJhY2tzKCk7CiAKLQlyYyA9IGt2bV9pbml0KHNpemVvZihzdHJ1Y3Qga3ZtX3ZjcHUpLCAwLCBUSElTX01PRFVMRSk7Ci0JaWYgKHJjKSB7Ci0JCWt2bV9yaXNjdl90ZWFyZG93bigpOwotCQlyZXR1cm4gcmM7CiYjNDM7CS8qIFJlZ2lzdGVyIENQVSBQTSBub3RpZmllciBmb3IgQ1BVIGlkbGUgbm9uLXJldGVudGlvbiBzdGF0ZXMgKi8KJiM0MzsJaWYgKElTX0VOQUJMRUQoQ09ORklHX0NQVV9QTSkpIHsKJiM0MzsJCXJjID0gY3B1X3BtX3JlZ2lzdGVyX25vdGlmaWVyKCZhbXA7a3ZtX3Jpc2N2X2NwdV9wbV9uYik7CiYjNDM7CQlpZiAocmMpIHsKJiM0MzsJCQlrdm1fZXJyKCYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIENQVSBQTSBub3RpZmllcjogJWRcbiYjMzQ7LCByYyk7CiYjNDM7CQkJZ290byBlcnJfdGVhcmRvd247CiYjNDM7CQl9CiAJfQogCiYjNDM7CXJjID0ga3ZtX2luaXQoc2l6ZW9mKHN0cnVjdCBrdm1fdmNwdSksIDAsIFRISVNfTU9EVUxFKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJZ290byBlcnJfdW5yZWdpc3Rlcl9jcHVfcG07CiYjNDM7CiAJaWYgKGt2bV9yaXNjdl9haWFfYXZhaWxhYmxlKCkpCiAJCWt2bV9pbmZvKCYjMzQ7QUlBIGF2YWlsYWJsZSB3aXRoICVkIGd1ZXN0IGV4dGVybmFsIGludGVycnVwdHNcbiYjMzQ7LAogCQkJIGF0b21pY19yZWFkKCZhbXA7a3ZtX3Jpc2N2X2FpYV9ucl9oZ2VpKSk7CiAKIAlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJfdW5yZWdpc3Rlcl9jcHVfcG06CiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19DUFVfUE0pKQomIzQzOwkJY3B1X3BtX3VucmVnaXN0ZXJfbm90aWZpZXIoJmFtcDtrdm1fcmlzY3ZfY3B1X3BtX25iKTsKJiM0MztlcnJfdGVhcmRvd246CiYjNDM7CWt2bV9yaXNjdl90ZWFyZG93bigpOwomIzQzOwlyZXR1cm4gcmM7CiB9CiBtb2R1bGVfaW5pdChyaXNjdl9rdm1faW5pdCk7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCByaXNjdl9rdm1fZXhpdCh2b2lkKQogewomIzQzOwkvKiBVbnJlZ2lzdGVyIENQVSBQTSBub3RpZmllciAqLwomIzQzOwlpZiAoSVNfRU5BQkxFRChDT05GSUdfQ1BVX1BNKSkKJiM0MzsJCWNwdV9wbV91bnJlZ2lzdGVyX25vdGlmaWVyKCZhbXA7a3ZtX3Jpc2N2X2NwdV9wbV9uYik7CiYjNDM7CiAJa3ZtX2V4aXQoKTsKIAogCWt2bV9yaXNjdl90ZWFyZG93bigpOwpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vdmNwdS5jIGIvYXJjaC9yaXNjdi9rdm0vdmNwdS5jCmluZGV4IGNmNmUyMzFlNzZlMjU0Li5lNDgzMzhmOTA3ZjQ4OCAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9rdm0vdmNwdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL3ZjcHUuYwpAQCAtMjYsNiAmIzQzOzI2LDE3IEBACiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qga3ZtX3ZjcHUgKiwga3ZtX2Zvcm1lcl92Y3B1KTsKIAomIzQzO3ZvaWQga3ZtX3Jpc2N2X2NsZWFyX2Zvcm1lcl92Y3B1KHZvaWQpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBDbGVhciB0aGUgcGVyLUNQVSBmb3JtZXIgVkNQVSBwb2ludGVyIGJlY2F1c2UgaHlwZXJ2aXNvciBDU1Igc3RhdGUKJiM0MzsJICogd2lsbCBiZSBsb3N0LiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgbmV4dCBWQ1BVIGVudHJ5IHdpbGwgcHJvcGVybHkKJiM0MzsJICogcmVzdG9yZSBhbGwgQ1NScyBpbnN0ZWFkIG9mIGluY29ycmVjdGx5IHNraXBwaW5nIENTUiByZXN0b3JhdGlvbgomIzQzOwkgKiB2aWEgdGhlIGZhc3QtcGF0aCBvcHRpbWl6YXRpb24uCiYjNDM7CSAqLwomIzQzOwlfX3RoaXNfY3B1X3dyaXRlKGt2bV9mb3JtZXJfdmNwdSwgTlVMTCk7CiYjNDM7fQomIzQzOwogY29uc3Qgc3RydWN0IGt2bV9zdGF0c19kZXNjIGt2bV92Y3B1X3N0YXRzX2Rlc2NbXSA9IHsKIAlLVk1fR0VORVJJQ19WQ1BVX1NUQVRTKCksCiAJU1RBVFNfREVTQ19DT1VOVEVSKFZDUFUsIGVjYWxsX2V4aXRfc3RhdCksCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwMDUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUklTQy1WIEtWTSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgUklTQy1WIEtWTSBjb2RlLiBJdCYjMzk7cyBtYWtpbmcgc29tZSBrZXkgY2hhbmdlcywgc3BlY2lmaWNhbGx5IHRvIGBrdm1fcmlzY3ZfYWlhX2VuYWJsZWAgYW5kIGBrdm1fcmlzY3ZfYWlhX2Rpc2FibGVgLiAgSW50ZXJlc3RpbmcsIHRoZXkmIzM5O3ZlIGFkZGVkIGEgYGZ1bGxfY2xlYW51cGAgYm9vbGVhbiBhcmd1bWVudCB0byB0aGVzZSBmdW5jdGlvbnMuICBUaGF0IHN1Z2dlc3RzIGEgbW9yZSBjb21wcmVoZW5zaXZlIGNsZWFudXAgcm91dGluZSBpcyBub3cgcG9zc2libGUuICBBbmQsIHRoZXJlJiMzOTtzIGEgbmV3IG5vdGlmaWVyLCBga3ZtX3Jpc2N2X2NwdV9wbV9ub3RpZmllcmAsIHdoaWNoIGhhbmRsZXMgQ1BVIHBvd2VyIG1hbmFnZW1lbnQgZXZlbnRzLiAgVGhhdCYjMzk7cyBpbXBvcnRhbnQuIEkgc2VlIHRoZXkmIzM5O3ZlIGFsc28gYWRkZWQgYGt2bV9yaXNjdl9jbGVhcl9mb3JtZXJfdmNwdWAsIHdoaWNoIGNsZWFycyBga3ZtX2Zvcm1lcl92Y3B1YCwgYSBwZXItQ1BVIHZhcmlhYmxlLgoKTXkgZmlyc3QgdGhvdWdodCBpcywgaXMgdGhpcyBmdW5jdGlvbmFsaXR5IGV2ZW4gKnJlYWNoYWJsZSogYW5kIGRvZXMgaXQgKmZ1bmN0aW9uKj8gR2l2ZW4gdGhlIGNoYW5nZXMsIGl0IHNlZW1zIGNsZWFyIHRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgY2FuIGJlIHJlYWNoZWQuIFNwZWNpZmljYWxseSwgdGhpcyBpcyBhIG1vZGlmaWNhdGlvbiB0byBLVk0gb24gUklTQy1WIGFuZCBkZXBlbmRzIG9uIENQVSBQTSBpbnRlZ3JhdGlvbiB3aXRoIEtWTS4gIFRoZXJlZm9yZSwgaXQmIzM5O3MgZGVmaW5pdGVseSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgKmlmKiBLVk0gYW5kIENQVV9QTSBhcmUgZW5hYmxlZCBvbiBSSVNDLVYuIFRoYXQmIzM5O3MgdGhlIGtleS4KClNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3MuICBJIGltbWVkaWF0ZWx5IHRoaW5rLCBJJiMzOTtsbCBuZWVkIGBDT05GSUdfS1ZNYCBhbmQgYENPTkZJR19DUFVfUE1gIHRvIGJlIHNldC4gIFRoZW4sIEkgbmVlZCB0byBjaGVjayBgYXJjaC9yaXNjdi9rdm0vS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgKnNwZWNpZmljKiBSSVNDLVYgS1ZNIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gdGhpcyBuZXcgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTE5LVxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTIxLVx0dHJpc3RhdGUgXCYjMzQ7S2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjI6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY5OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyBLVk0gUG93ZXIgTWFuYWdlbWVudCBvbiBSSVNDLVYqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYGFyY2gvcmlzY3Yva3ZtL21haW4uY2AuIFRoZSBmYWN0IHRoYXQgYENPTkZJR19DUFVfUE1gIGlzIG9uIG15IHJhZGFyIHN1Z2dlc3RzIHdlJiMzOTtyZSBsaWtlbHkgaW50ZXJlc3RlZCBpbiB0aGUgcG93ZXIgbWFuYWdlbWVudCBhc3BlY3RzIG9mIEtWTSB3aXRoaW4gdGhlIFJJU0MtViBhcmNoaXRlY3R1cmUuIEdpdmVuIHRoYXQgd2UgYXJlIGZvY3VzaW5nIG9uIHBvd2VyIG1hbmFnZW1lbnQsIEkgd2FudCB0byBzZWUgaG93IHRoZSBjb2RlIGhhbmRsZXMgdHJhbnNpdGlvbnMgdG8gYW5kIGZyb20gbG93LXBvd2VyIHN0YXRlcyBhdCB0aGUgQ1BVIGxldmVsLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBoeXBlcnZpc29yIGludGVyYWN0cyB3aXRoIHRoZSBndWVzdCYjMzk7cyBwb3dlciBtYW5hZ2VtZW50IHJlcXVlc3RzIGFuZCB0aGUgdW5kZXJseWluZyBSSVNDLVYgaGFyZHdhcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY29kZSBoYW5kbGVzIHRoZSBzdGF0ZSBvZiB0aGUgdkNQVSBjb250ZXh0LCBhbmQgc2VlIGhvdyB0aGUgc2NoZWR1bGluZyBhbmQgaW50ZXJydXB0IGhhbmRsaW5nIHdvcmsgaW4gcmVsYXRpb24gdG8gcG93ZXIgbWFuYWdlbWVudC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igc3BlY2lmaWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gQ1BVIGhvdHBsdWcsIGlkbGUgaGFuZGxpbmcsIGFuZCBhbnkgc3BlY2lmaWMgUklTQy1WIGZlYXR1cmVzIGxldmVyYWdlZCBmb3IgcG93ZXIgc2F2aW5ncyAoZS5nLiwgc3BlY2lmaWMgQ1NScywgZXh0ZW5zaW9ucykuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBpbnRlcmVzdGluZyBudWFuY2VzIG9yIG9wdGltaXphdGlvbnMgdGhhdCBzdGFuZCBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0NQVV9QTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL21haW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9tYWluLmM9MTI2PXN0YXRpYyBpbnQgX19pbml0IHJpc2N2X2t2bV9pbml0KHZvaWQpXG4tLVxuYXJjaC9yaXNjdi9rdm0vbWFpbi5jLTIxOS1cdC8qIFJlZ2lzdGVyIENQVSBQTSBub3RpZmllciBmb3IgQ1BVIGlkbGUgbm9uLXJldGVudGlvbiBzdGF0ZXMgKi9cbmFyY2gvcmlzY3Yva3ZtL21haW4uYzoyMjA6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQ1BVX1BNKSkge1xuYXJjaC9yaXNjdi9rdm0vbWFpbi5jLTIyMS1cdFx0cmMgPSBjcHVfcG1fcmVnaXN0ZXJfbm90aWZpZXIoXHUwMDI2a3ZtX3Jpc2N2X2NwdV9wbV9uYik7XG4tLVxuYXJjaC9yaXNjdi9rdm0vbWFpbi5jLTIzOC1lcnJfdW5yZWdpc3Rlcl9jcHVfcG06XG5hcmNoL3Jpc2N2L2t2bS9tYWluLmM6MjM5Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0NQVV9QTSkpXG5hcmNoL3Jpc2N2L2t2bS9tYWluLmMtMjQwLVx0XHRjcHVfcG1fdW5yZWdpc3Rlcl9ub3RpZmllcihcdTAwMjZrdm1fcmlzY3ZfY3B1X3BtX25iKTtcbi0tXG5hcmNoL3Jpc2N2L2t2bS9tYWluLmM9MjQ3PXN0YXRpYyB2b2lkIF9fZXhpdCByaXNjdl9rdm1fZXhpdCh2b2lkKVxuLS1cbmFyY2gvcmlzY3Yva3ZtL21haW4uYy0yNDktXHQvKiBVbnJlZ2lzdGVyIENQVSBQTSBub3RpZmllciAqL1xuYXJjaC9yaXNjdi9rdm0vbWFpbi5jOjI1MDpcdGlmIChJU19FTkFCTEVEKENPTkZJR19DUFVfUE0pKVxuYXJjaC9yaXNjdi9rdm0vbWFpbi5jLTI1MS1cdFx0Y3B1X3BtX3VucmVnaXN0ZXJfbm90aWZpZXIoXHUwMDI2a3ZtX3Jpc2N2X2NwdV9wbV9uYik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjI6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM3NgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDM1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNL1JJU0MtViBQb3dlciBNYW5hZ2VtZW50IEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIEtWTSBwYXRjaCBmb3IgUklTQy1WLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaG93IGl0IGhhbmRsZXMgcG93ZXIgbWFuYWdlbWVudC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYSBmZXcga2V5IGZ1bmN0aW9ucy4gIEkgc2VlIGBLVk1gIGFuZCBgQ1BVX1BNYCBhcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIGZsYWdzIGludm9sdmVkLiBOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gIEkmIzM5O3ZlIGdvdCBga3ZtX3Jpc2N2X2NwdV9wbV9ub3RpZmllcmAsIGBrdm1fcmlzY3ZfYWlhX2VuYWJsZWAsIGBrdm1fcmlzY3ZfYWlhX2Rpc2FibGVgLCBga3ZtX3Jpc2N2X2NsZWFyX2Zvcm1lcl92Y3B1YCwgYGt2bV9hcmNoX2VuYWJsZV92aXJ0dWFsaXphdGlvbl9jcHVgLCBhbmQgYGt2bV9hcmNoX2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1YCBvbiBteSByYWRhci4KCkZpcnN0LCBsZXQmIzM5O3MgcXVpY2tseSBjaGVjayB0aGUgc2NvcGUgb2YgYGt2bV9yaXNjdl9jcHVfcG1fbm90aWZpZXJgLiBZdXAsIGl0JiMzOTtzIHN0YXRpYywgd2hpY2ggSSYjMzk7bGwga2VlcCBpbiBtaW5kIGZvciBob3cgaXQmIzM5O3MgdXNlZC4gVGhlbiBJIHNlZSB0aGF0IGBrdm1fcmlzY3ZfYWlhX2VuYWJsZWAgYW5kIGBrdm1fcmlzY3ZfYWlhX2Rpc2FibGVgIGFyZSBleHBvcnRlZCBvciBub24tc3RhdGljLiBGaW5hbGx5LCBga3ZtX3Jpc2N2X2NsZWFyX2Zvcm1lcl92Y3B1YCBpcyBub24tc3RhdGljIGFzIHdlbGwuCgpTbywgaGVyZSYjMzk7cyB0aGUgZGlzdGlsbGVkIGxpc3Qgb2Ygc3ltYm9scyBJIG5lZWQgdG8gdW5kZXJzdGFuZDogYGt2bV9yaXNjdl9jcHVfcG1fbm90aWZpZXJgLCBga3ZtX3Jpc2N2X2FpYV9lbmFibGVgLCBga3ZtX3Jpc2N2X2FpYV9kaXNhYmxlYCwgYGt2bV9yaXNjdl9jbGVhcl9mb3JtZXJfdmNwdWAsIGBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1YCwgYW5kIGBrdm1fYXJjaF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdWAuIFRoZXNlIGFyZSB0aGUgY29yZSBlbGVtZW50cy4KClJpZ2h0LCBhbnl0aGluZyBlbHNlPyAgVGhlIHBhdGNoIGFmZmVjdHMgYGFyY2gvcmlzY3Yva3ZtL2FpYS5jYCwgYGFyY2gvcmlzY3Yva3ZtL21haW4uY2AsIGFuZCBgYXJjaC9yaXNjdi9rdm0vdmNwdS5jYC4gVGhhdCBnaXZlcyBtZSBhIHJvYWRtYXAgb2Ygd2hpY2ggZmlsZXMgdG8gY2hlY2sgZm9yIGNvbnRleHQuCgpOb3csIGxldCYjMzk7cyBzZWUgaG93IGBDUFVfUE1gIGlzIGNvbmZpZ3VyZWQuIElzIHRoaXMgYSB1c2VyLXNldHRhYmxlIG9wdGlvbiwgb3IgaXMgaXQgaW1wbGljaXRseSBzZWxlY3RlZCBiYXNlZCBvbiBvdGhlciBzZXR0aW5ncz8gIFRoaXMgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBwb3dlciBtYW5hZ2VtZW50IGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENQVV9QTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9wb3dlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9wb3dlci9LY29uZmlnPTM4NT1jb25maWcgUE1fR0VORVJJQ19ET01BSU5TX09GXG4tLVxua2VybmVsL3Bvd2VyL0tjb25maWctMzg4LVxua2VybmVsL3Bvd2VyL0tjb25maWc6Mzg5OmNvbmZpZyBDUFVfUE1cbmtlcm5lbC9wb3dlci9LY29uZmlnLTM5MC1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzE5CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJvbSBteSBwZXJzcGVjdGl2ZToKCioqVGhpbmtpbmcgVGhyb3VnaCBDUFUgUG93ZXIgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBgQ1BVX1BNYCBpcyBhIGhpZGRlbiBmbGFnLCBhIGJvb2xlYW4gZGVlcCBpbiB0aGUga2VybmVsLCBsaWtlbHkgbHVya2luZyBpbiB0aGUgc2hhZG93cyBvZiB0aGUgcG93ZXIgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIE15IGd1dCBmZWVsaW5nLCBiYXNlZCBvbiBob3cgdGhlc2UgdGhpbmdzIHVzdWFsbHkgd29yaywgaXMgdGhhdCBpdCYjMzk7cyBwcm9iYWJseSBnZXR0aW5nIHNldCDigJMgZW5hYmxlZCBvciBkaXNhYmxlZCDigJMgZG93bnN0cmVhbSwgcGVyaGFwcyB0cmlnZ2VyZWQgYnkgdGhlIGJyb2FkZXIgc3lzdGVtJiMzOTtzIHN0YXRlLiBJdCYjMzk7cyBhbG1vc3QgY2VydGFpbmx5IHB1bGxlZCBpbiBhcyBhIGRlcGVuZGVuY3kgYnkgY29uZmlndXJhdGlvbnMgbGlrZSBgU1VTUEVORGAgb3IgYENQVV9JRExFYC4gVGhpbmtpbmcgYWJvdXQgdGhlIGNvbnRyb2wgZmxvdywgSSYjMzk7ZCBiZXQgZW5hYmxpbmcgZWl0aGVyIG9mIHRob3NlIHR3byB3b3VsZCB1bHRpbWF0ZWx5IGZsaXAgdGhlIGBDUFVfUE1gIHN3aXRjaC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMgdG8gYmUgc3VyZSwgYnV0IHRoYXQmIzM5O3MgbXkgaW5pdGlhbCBoeXBvdGhlc2lzLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBjb2RlIGNvbmZpcm1zIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgQ1BVX1BNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtL0tjb25maWc9Mj1jb25maWcgQVJNXG4tLVxuYXJjaC9hcm0vS2NvbmZpZy01OC1cdHNlbGVjdCBDTE9ORV9CQUNLV0FSRFNcbmFyY2gvYXJtL0tjb25maWc6NTk6XHRzZWxlY3QgQ1BVX1BNIGlmIFNVU1BFTkQgfHwgQ1BVX0lETEVcbmFyY2gvYXJtL0tjb25maWctNjAtXHRzZWxlY3QgRENBQ0hFX1dPUkRfQUNDRVNTIGlmIEhBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1Ncbi0tXG5hcmNoL2FybS9LY29uZmlnPTk5ND1jb25maWcgQkxfU1dJVENIRVJcbi0tXG5hcmNoL2FybS9LY29uZmlnLTk5Ni1cdGRlcGVuZHMgb24gQklHX0xJVFRMRSBcdTAwMjZcdTAwMjYgTUNQTSBcdTAwMjZcdTAwMjYgSE9UUExVR19DUFUgXHUwMDI2XHUwMDI2IEFSTV9HSUNcbmFyY2gvYXJtL0tjb25maWc6OTk3Olx0c2VsZWN0IENQVV9QTVxuYXJjaC9hcm0vS2NvbmZpZy05OTgtXHRoZWxwXG4tLVxuYXJjaC9hcm02NC9LY29uZmlnPTI9Y29uZmlnIEFSTTY0XG4tLVxuYXJjaC9hcm02NC9LY29uZmlnLTExMS1cdHNlbGVjdCBDT01NT05fQ0xLXG5hcmNoL2FybTY0L0tjb25maWc6MTEyOlx0c2VsZWN0IENQVV9QTSBpZiAoU1VTUEVORCB8fCBDUFVfSURMRSlcbmFyY2gvYXJtNjQvS2NvbmZpZy0xMTMtXHRzZWxlY3QgQ1BVTUFTS19PRkZTVEFDSyBpZiBOUl9DUFVTIFx1MDAzZSAyNTZcbi0tXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnPTI9Y29uZmlnIExPT05HQVJDSFxuLS1cbmFyY2gvbG9vbmdhcmNoL0tjb25maWctODctXHRzZWxlY3QgQ09NTU9OX0NMS1xuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZzo4ODpcdHNlbGVjdCBDUFVfUE1cbmFyY2gvbG9vbmdhcmNoL0tjb25maWctODktXHRzZWxlY3QgRURBQ19TVVBQT1JUXG4tLVxuYXJjaC9taXBzL0tjb25maWc9Mj1jb25maWcgTUlQU1xuLS1cbmFyY2gvbWlwcy9LY29uZmlnLTM1LVx0c2VsZWN0IENQVV9OT19FRkZJQ0lFTlRfRkZTIGlmIChUQVJHRVRfSVNBX1JFViBcdTAwM2MgMSlcbmFyY2gvbWlwcy9LY29uZmlnOjM2Olx0c2VsZWN0IENQVV9QTSBpZiBDUFVfSURMRSB8fCBTVVNQRU5EXG5hcmNoL21pcHMvS2NvbmZpZy0zNy1cdHNlbGVjdCBHRU5FUklDX0FUT01JQzY0IGlmICE2NEJJVFxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZz0xMz1jb25maWcgUklTQ1Zcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWctOTgtXHRzZWxlY3QgQ1BVX05PX0VGRklDSUVOVF9GRlMgaWYgIVJJU0NWX0lTQV9aQkJcbmFyY2gvcmlzY3YvS2NvbmZpZzo5OTpcdHNlbGVjdCBDUFVfUE0gaWYgQ1BVX0lETEUgfHwgSElCRVJOQVRJT04gfHwgU1VTUEVORFxuYXJjaC9yaXNjdi9LY29uZmlnLTEwMC1cdHNlbGVjdCBEWU5BTUlDX0ZUUkFDRSBpZiBGVU5DVElPTl9UUkFDRVJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjI6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxMTEKCQkJCQkJCW91dHB1dDogMjM1CgkJCQkJCQl0aG91Z2h0czogNTAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBSSVNDLVYgS1ZNIGFuZCBDUFUgUG93ZXIgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgYENQVV9JRExFYCwgYFNVU1BFTkRgLCBvciBgSElCRVJOQVRJT05gIG9wdGlvbnMgcmVsYXRlIHRvIGBDUFVfUE1gIG9uIFJJU0MtVi4gSXQgc2VlbXMgbGlrZSBzZWxlY3RpbmcgYW55IG9mIHRoZSBmb3JtZXIgYXV0b21hdGljYWxseSBpbXBsaWVzIHRoZSBsYXR0ZXIsIHdoaWNoIGlzIGdyZWF0LiBJIGNhbiBqdXN0IGV4cGxpY2l0bHkgc2V0IGBDUFVfSURMRWAgYW5kIGBTVVNQRU5EYCBpbiB0aGUgY29uZmlndXJhdGlvbi4gU3l6a2FsbGVyLCB3aXRoIGl0cyBkZXBlbmRlbmN5IHJlc29sdXRpb24gY2FwYWJpbGl0aWVzLCBzaG91bGQgYmUgYWJsZSB0byBoYW5kbGUgdGhlIHVuZGVybHlpbmcgZGVwZW5kZW5jaWVzLCBldmVuIGlmIGBDUFVfUE1gIGl0c2VsZiBpcyBoaWRkZW4uIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MuCgpTbywgdGhlIGtleSBjb25maWdzIEkmIzM5O20gZGVhbGluZyB3aXRoIGFyZSBgS1ZNYCwgYENQVV9JRExFYCwgYW5kIGBTVVNQRU5EYC4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgZm9jdXMgc3ltYm9scy4gSSYjMzk7dmUgZ290IHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIGFueXRoaW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gdGVzdGluZyB0aGUgZm9jdXMgc3ltYm9sczogYGt2bV9yaXNjdl9jcHVfcG1fbm90aWZpZXJgLCBga3ZtX3Jpc2N2X2FpYV9lbmFibGVgLCBga3ZtX3Jpc2N2X2FpYV9kaXNhYmxlYCwgYGt2bV9yaXNjdl9jbGVhcl9mb3JtZXJfdmNwdWAsIGBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1YCwgYW5kIGBrdm1fYXJjaF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdWAuCgpPaCwgYW5kIHRoZXJlIGFyZSBzb21lIG90aGVyIGZ1bmN0aW9ucyB0aGF0IGFyZSBhbHNvIHJlbGV2YW50OiBga3ZtX3Jpc2N2X2Nzcl9lbmFibGVgIGFuZCBga3ZtX3Jpc2N2X2Nzcl9kaXNhYmxlYC4gSSBzaG91bGQgZGVmaW5pdGVseSBpbmNsdWRlIHRob3NlIGluIHRoZSBmdXp6aW5nIHNjb3BlLgoKQSBxdWljayBjaGVjayBjb25maXJtcyB0aGF0IGBrdm1fcmlzY3ZfY3NyX2VuYWJsZWAgYW5kIGBrdm1fcmlzY3ZfY3NyX2Rpc2FibGVgIGFyZSBib3RoIHN0YXRpYywgd2hpY2ggbWVhbnMgdGhleSBhcmUgb25seSB2aXNpYmxlIHdpdGhpbiB0aGVpciByZXNwZWN0aXZlIHNvdXJjZSBmaWxlcy4gSSYjMzk7bGwgYWRkIHRoZW0gdG8gbXkgZm9jdXMgc3ltYm9scy4KClNvLCBteSBmaW5hbCBsaXN0IG9mIGZvY3VzIHN5bWJvbHMgaXM6CmBrdm1fcmlzY3ZfY3B1X3BtX25vdGlmaWVyYApga3ZtX3Jpc2N2X2FpYV9lbmFibGVgCmBrdm1fcmlzY3ZfYWlhX2Rpc2FibGVgCmBrdm1fcmlzY3ZfY2xlYXJfZm9ybWVyX3ZjcHVgCmBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1YApga3ZtX2FyY2hfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHVgCmBrdm1fcmlzY3ZfY3NyX2VuYWJsZWAKYGt2bV9yaXNjdl9jc3JfZGlzYWJsZWAKCkFscmlnaHQsIHRoZSBwYXRjaCBtb2RpZmllcyBSSVNDLVYgS1ZNIHRvIG1hbmFnZSBDUFUgcG93ZXIgZXZlbnRzIGZvciB0aG9zZSBub24tcmV0ZW50aW9uIGlkbGUgc3RhdGVzLiBUaGlzIGludm9sdmVzIGEgQ1BVIFBNIG5vdGlmaWVyIGFuZCBtb2RpZmljYXRpb25zIHRvIEFJQSBlbmFibGUvZGlzYWJsZSBwYXRocyB0byBzdXBwb3J0IHRoaXMgQ1NSIHNhdmUvcmVzdG9yZSBtZWNoYW5pc20uIFRoaXMgaXMgYSBjb3JlIEtWTSBjaGFuZ2UsIGFuZCBpdCYjMzk7cyBhYnNvbHV0ZWx5IGNyaXRpY2FsIHRvIGZ1enogdGhpcyB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gdmlydHVhbGl6YXRpb24gb3IgcG93ZXIgbWFuYWdlbWVudC4KClRpbWUgdG8gY2FsbCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjI6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtDUFVfSURMRSYjMzQ7LAogICAgJiMzNDtTVVNQRU5EJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3Jpc2N2X2NwdV9wbV9ub3RpZmllciYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfYWlhX2VuYWJsZSYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfYWlhX2Rpc2FibGUmIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X2NsZWFyX2Zvcm1lcl92Y3B1JiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX2VuYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUmIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X2Nzcl9lbmFibGUmIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X2Nzcl9kaXNhYmxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhpcyBwYXRjaCBtb2RpZmllcyBSSVNDLVYgS1ZNIHRvIGhhbmRsZSBDUFUgcG93ZXIgbWFuYWdlbWVudCBldmVudHMgKENQVV9QTSkgZm9yIG5vbi1yZXRlbnRpb24gaWRsZSBzdGF0ZXMuIEl0IGludHJvZHVjZXMgYSBDUFUgUE0gbm90aWZpZXIgYW5kIG1vZGlmaWVzIEFJQSAoQWR2YW5jZWQgSW50ZXJydXB0IEFyY2hpdGVjdHVyZSkgZW5hYmxlL2Rpc2FibGUgcGF0aHMgdG8gc3VwcG9ydCBsaWdodHdlaWdodCBDU1Igc2F2ZS9yZXN0b3JlLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgS1ZNIGxvZ2ljIG9uIFJJU0MtViBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gdmlydHVhbGl6YXRpb24gb3IgcG93ZXIgbWFuYWdlbWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0NQVV9JRExFJiMzNDssCiAgICAmIzM0O1NVU1BFTkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fcmlzY3ZfY3B1X3BtX25vdGlmaWVyJiMzNDssCiAgICAmIzM0O2t2bV9yaXNjdl9haWFfZW5hYmxlJiMzNDssCiAgICAmIzM0O2t2bV9yaXNjdl9haWFfZGlzYWJsZSYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfY2xlYXJfZm9ybWVyX3ZjcHUmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfZW5hYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfY3NyX2VuYWJsZSYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfY3NyX2Rpc2FibGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIG1vZGlmaWVzIFJJU0MtViBLVk0gdG8gaGFuZGxlIENQVSBwb3dlciBtYW5hZ2VtZW50IGV2ZW50cyAoQ1BVX1BNKSBmb3Igbm9uLXJldGVudGlvbiBpZGxlIHN0YXRlcy4gSXQgaW50cm9kdWNlcyBhIENQVSBQTSBub3RpZmllciBhbmQgbW9kaWZpZXMgQUlBIChBZHZhbmNlZCBJbnRlcnJ1cHQgQXJjaGl0ZWN0dXJlKSBlbmFibGUvZGlzYWJsZSBwYXRocyB0byBzdXBwb3J0IGxpZ2h0d2VpZ2h0IENTUiBzYXZlL3Jlc3RvcmUuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBLVk0gbG9naWMgb24gUklTQy1WIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBpbiB2aXJ0dWFsaXphdGlvbiBvciBwb3dlciBtYW5hZ2VtZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjI6NDQ6MzEuNTA0Nzg1NDA5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE1ODYyNDIwMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJDUFVfSURMRVwiLFxuICAgIFwiU1VTUEVORFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9yaXNjdl9jcHVfcG1fbm90aWZpZXJcIixcbiAgICBcImt2bV9yaXNjdl9haWFfZW5hYmxlXCIsXG4gICAgXCJrdm1fcmlzY3ZfYWlhX2Rpc2FibGVcIixcbiAgICBcImt2bV9yaXNjdl9jbGVhcl9mb3JtZXJfdmNwdVwiLFxuICAgIFwia3ZtX2FyY2hfZW5hYmxlX3ZpcnR1YWxpemF0aW9uX2NwdVwiLFxuICAgIFwia3ZtX2FyY2hfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHVcIixcbiAgICBcImt2bV9yaXNjdl9jc3JfZW5hYmxlXCIsXG4gICAgXCJrdm1fcmlzY3ZfY3NyX2Rpc2FibGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggbW9kaWZpZXMgUklTQy1WIEtWTSB0byBoYW5kbGUgQ1BVIHBvd2VyIG1hbmFnZW1lbnQgZXZlbnRzIChDUFVfUE0pIGZvciBub24tcmV0ZW50aW9uIGlkbGUgc3RhdGVzLiBJdCBpbnRyb2R1Y2VzIGEgQ1BVIFBNIG5vdGlmaWVyIGFuZCBtb2RpZmllcyBBSUEgKEFkdmFuY2VkIEludGVycnVwdCBBcmNoaXRlY3R1cmUpIGVuYWJsZS9kaXNhYmxlIHBhdGhzIHRvIHN1cHBvcnQgbGlnaHR3ZWlnaHQgQ1NSIHNhdmUvcmVzdG9yZS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEtWTSBsb2dpYyBvbiBSSVNDLVYgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIHZpcnR1YWxpemF0aW9uIG9yIHBvd2VyIG1hbmFnZW1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIyOjQ0OjMxLjUwNDc5MzU5OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxNDUxMzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMTI1MTY3MjE2ZmEyM2RhZThmY2FmZGNjNzFkOWYyOTA3ZDRiNTRlZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1biAyNiAyMjo0NDozMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9haWEuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2FpYS5oXFxuaW5kZXggYzY3ZWM1YWMwYTE0NmIuLjdjMWMzMjUwNTk4ZmIwIDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2FpYS5oXFxuKysrIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fYWlhLmhcXG5AQCAtMTY1LDggKzE2NSwxOSBAQCBpbnQga3ZtX3Jpc2N2X2FpYV9hbGxvY19oZ2VpKGludCBjcHUsIHN0cnVjdCBrdm1fdmNwdSAqb3duZXIsXFxuIFxcdFxcdFxcdCAgICAgdm9pZCBfX2lvbWVtICoqaGdlaV92YSwgcGh5c19hZGRyX3QgKmhnZWlfcGEpO1xcbiB2b2lkIGt2bV9yaXNjdl9haWFfZnJlZV9oZ2VpKGludCBjcHUsIGludCBoZ2VpKTtcXG4gXFxuLXZvaWQga3ZtX3Jpc2N2X2FpYV9lbmFibGUodm9pZCk7XFxuLXZvaWQga3ZtX3Jpc2N2X2FpYV9kaXNhYmxlKHZvaWQpO1xcbisvKipcXG4rICoga3ZtX3Jpc2N2X2FpYV9lbmFibGUoKSAtIEVuYWJsZSBBSUEgc3VwcG9ydCBvbiBjdXJyZW50IENQVVxcbisgKiBAZnVsbF9jbGVhbnVwOiB0cnVlID0gZnVsbCBoYXJkd2FyZSBpbml0IChDUFUgaG90cGx1Zy9tb2R1bGUgbG9hZCksXFxuKyAqICAgICAgICAgICAgICAgIGZhbHNlID0gbGlnaHR3ZWlnaHQgQ1NSIHJlc3RvcmUgKENQVSBub24tcmV0ZW50aW9uIGlkbGUgcmVzdW1lKVxcbisgKi9cXG4rdm9pZCBrdm1fcmlzY3ZfYWlhX2VuYWJsZShib29sIGZ1bGxfY2xlYW51cCk7XFxuK1xcbisvKipcXG4rICoga3ZtX3Jpc2N2X2FpYV9kaXNhYmxlKCkgLSBEaXNhYmxlIEFJQSBzdXBwb3J0IG9uIGN1cnJlbnQgQ1BVXFxuKyAqIEBmdWxsX2NsZWFudXA6IHRydWUgPSBmdWxsIGhhcmR3YXJlIGNsZWFudXAgKENQVSBob3RwbHVnL21vZHVsZSBleGl0KSxcXG4rICogICAgICAgICAgICAgICAgZmFsc2UgPSBsaWdodHdlaWdodCBDU1Igc2F2ZSAoQ1BVIG5vbi1yZXRlbnRpb24gaWRsZSBlbnRyeSlcXG4rICovXFxuK3ZvaWQga3ZtX3Jpc2N2X2FpYV9kaXNhYmxlKGJvb2wgZnVsbF9jbGVhbnVwKTtcXG4gaW50IGt2bV9yaXNjdl9haWFfaW5pdCh2b2lkKTtcXG4gdm9pZCBrdm1fcmlzY3ZfYWlhX2V4aXQodm9pZCk7XFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG5pbmRleCA2MDAxN2NlZWM5ZDJhZi4uODA4YjRlZTFiZDEwYWMgMTAwNjQ0XFxuLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuKysrIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuQEAgLTMxOSw2ICszMTksOCBAQCBib29sIGt2bV9yaXNjdl92Y3B1X3N0b3BwZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gXFxuIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfcmVjb3JkX3N0ZWFsX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gXFxuK3ZvaWQga3ZtX3Jpc2N2X2NsZWFyX2Zvcm1lcl92Y3B1KHZvaWQpO1xcbitcXG4gLyogRmxhZ3MgcmVwcmVzZW50aW5nIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIGRldGFpbHMgKi9cXG4gREVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKGt2bV9yaXNjdl92c3N0YWdlX3RsYl9ub19ncGEpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vYWlhLmMgYi9hcmNoL3Jpc2N2L2t2bS9haWEuY1xcbmluZGV4IGJhZmIwMDljNWNlNTU5Li40Y2YzNTFmOTFjNjQzZiAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9haWEuY1xcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL2FpYS5jXFxuQEAgLTI1LDYgKzI1LDcgQEAgc3RydWN0IGFpYV9oZ2VpX2NvbnRyb2wge1xcbiBcXHR1bnNpZ25lZCBsb25nIGZyZWVfYml0bWFwO1xcbiBcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKm93bmVyc1tCSVRTX1BFUl9MT05HXTtcXG4gXFx0dW5zaWduZWQgaW50IG5yX2hnZWk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc2F2ZWRfdmFsdWU7XFxuIH07XFxuIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgYWlhX2hnZWlfY29udHJvbCwgYWlhX2hnZWkpO1xcbiBzdGF0aWMgaW50IGhnZWlfcGFyZW50X2lycTtcXG5AQCAtNTMyLDUwICs1MzMsNTkgQEAgc3RhdGljIHZvaWQgYWlhX2hnZWlfZXhpdCh2b2lkKVxcbiBcXHRmcmVlX3BlcmNwdV9pcnEoaGdlaV9wYXJlbnRfaXJxLCBcXHUwMDI2YWlhX2hnZWkpO1xcbiB9XFxuIFxcbi12b2lkIGt2bV9yaXNjdl9haWFfZW5hYmxlKHZvaWQpXFxuK3ZvaWQga3ZtX3Jpc2N2X2FpYV9lbmFibGUoYm9vbCBmdWxsX2NsZWFudXApXFxuIHtcXG4tXFx0Y29uc3Qgc3RydWN0IGltc2ljX2dsb2JhbF9jb25maWcgKmdjO1xcbi1cXHRjb25zdCBzdHJ1Y3QgaW1zaWNfbG9jYWxfY29uZmlnICpsYztcXG4gXFx0c3RydWN0IGFpYV9oZ2VpX2NvbnRyb2wgKmhnY3RybDtcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4tXFx0aW50IGFpYV9ucl9oZ2VpO1xcbiBcXG4gXFx0aWYgKCFrdm1fcmlzY3ZfYWlhX2F2YWlsYWJsZSgpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRnYyA9IGltc2ljX2dldF9nbG9iYWxfY29uZmlnKCk7XFxuLVxcdGxjID0gKGdjKSA/IHRoaXNfY3B1X3B0cihnYy1cXHUwMDNlbG9jYWwpIDogTlVMTDtcXG4gXFx0aGdjdHJsID0gdGhpc19jcHVfcHRyKFxcdTAwMjZhaWFfaGdlaSk7XFxuIFxcbi1cXHQvKiBGaWd1cmUtb3V0IG51bWJlciBvZiBiaXRzIGluIEhHRUlFICovXFxuLVxcdGNzcl93cml0ZShDU1JfSEdFSUUsIC0xVUwpO1xcbi1cXHRoZ2N0cmwtXFx1MDAzZW5yX2hnZWkgPSBmbHNfbG9uZyhjc3JfcmVhZChDU1JfSEdFSUUpKTtcXG4tXFx0Y3NyX3dyaXRlKENTUl9IR0VJRSwgMCk7XFxuLVxcdGlmIChoZ2N0cmwtXFx1MDAzZW5yX2hnZWkpXFxuLVxcdFxcdGhnY3RybC1cXHUwMDNlbnJfaGdlaS0tO1xcbitcXHRpZiAoZnVsbF9jbGVhbnVwKSB7XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBpbXNpY19nbG9iYWxfY29uZmlnICpnYztcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IGltc2ljX2xvY2FsX2NvbmZpZyAqbGM7XFxuK1xcdFxcdGludCBhaWFfbnJfaGdlaTtcXG4gXFxuLVxcdC8qXFxuLVxcdCAqIE51bWJlciBvZiB1c2FibGUgcGVyLUhBUlQgSEdFSSBsaW5lcyBzaG91bGQgYmUgbWluaW11bSBvZlxcbi1cXHQgKiBwZXItSEFSVCBJTVNJQyBndWVzdCBmaWxlcyBhbmQgbnVtYmVyIG9mIGJpdHMgaW4gSEdFSUUuXFxuLVxcdCAqL1xcbi1cXHRpZiAobGMpXFxuLVxcdFxcdGhnY3RybC1cXHUwMDNlbnJfaGdlaSA9IG1pbigodWxvbmcpaGdjdHJsLVxcdTAwM2Vucl9oZ2VpLCBsYy1cXHUwMDNlbnJfZ3Vlc3RfZmlsZXMpO1xcbi1cXHRlbHNlXFxuLVxcdFxcdGhnY3RybC1cXHUwMDNlbnJfaGdlaSA9IDA7XFxuK1xcdFxcdGdjID0gaW1zaWNfZ2V0X2dsb2JhbF9jb25maWcoKTtcXG4rXFx0XFx0bGMgPSAoZ2MpID8gdGhpc19jcHVfcHRyKGdjLVxcdTAwM2Vsb2NhbCkgOiBOVUxMO1xcbiBcXG4tXFx0LyogVXBkYXRlIHRoZSBudW1iZXIgb2YgSU1TSUMgZ3Vlc3QgZmlsZXMgYWNyb3NzIGFsbCBIQVJUcyAqL1xcbi1cXHRhaWFfbnJfaGdlaSA9IGF0b21pY19yZWFkKFxcdTAwMjZrdm1fcmlzY3ZfYWlhX25yX2hnZWkpO1xcbi1cXHRkbyB7XFxuLVxcdFxcdGlmIChhaWFfbnJfaGdlaSBcXHUwMDNjPSBoZ2N0cmwtXFx1MDAzZW5yX2hnZWkpXFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHR9IHdoaWxlICghYXRvbWljX3RyeV9jbXB4Y2hnKFxcdTAwMjZrdm1fcmlzY3ZfYWlhX25yX2hnZWksIFxcdTAwMjZhaWFfbnJfaGdlaSwgaGdjdHJsLVxcdTAwM2Vucl9oZ2VpKSk7XFxuK1xcdFxcdC8qIEZpZ3VyZS1vdXQgbnVtYmVyIG9mIGJpdHMgaW4gSEdFSUUgKi9cXG4rXFx0XFx0Y3NyX3dyaXRlKENTUl9IR0VJRSwgLTFVTCk7XFxuK1xcdFxcdGhnY3RybC1cXHUwMDNlbnJfaGdlaSA9IGZsc19sb25nKGNzcl9yZWFkKENTUl9IR0VJRSkpO1xcbitcXHRcXHRjc3Jfd3JpdGUoQ1NSX0hHRUlFLCAwKTtcXG4rXFx0XFx0aWYgKGhnY3RybC1cXHUwMDNlbnJfaGdlaSlcXG4rXFx0XFx0XFx0aGdjdHJsLVxcdTAwM2Vucl9oZ2VpLS07XFxuIFxcbi1cXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmhnY3RybC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbi1cXHRpZiAoIWhnY3RybC1cXHUwMDNlZnJlZV9iaXRtYXBfaW5pdGlhbGl6ZWQpIHtcXG4tXFx0XFx0aGdjdHJsLVxcdTAwM2VmcmVlX2JpdG1hcCA9IChoZ2N0cmwtXFx1MDAzZW5yX2hnZWkpID8gR0VOTUFTS19VTEwoaGdjdHJsLVxcdTAwM2Vucl9oZ2VpLCAxKSA6IDA7XFxuLVxcdFxcdGhnY3RybC1cXHUwMDNlZnJlZV9iaXRtYXBfaW5pdGlhbGl6ZWQgPSB0cnVlO1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBOdW1iZXIgb2YgdXNhYmxlIHBlci1IQVJUIEhHRUkgbGluZXMgc2hvdWxkIGJlIG1pbmltdW0gb2ZcXG4rXFx0XFx0ICogcGVyLUhBUlQgSU1TSUMgZ3Vlc3QgZmlsZXMgYW5kIG51bWJlciBvZiBiaXRzIGluIEhHRUlFLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKGxjKVxcbitcXHRcXHRcXHRoZ2N0cmwtXFx1MDAzZW5yX2hnZWkgPSBtaW4oKHVsb25nKWhnY3RybC1cXHUwMDNlbnJfaGdlaSwgbGMtXFx1MDAzZW5yX2d1ZXN0X2ZpbGVzKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRoZ2N0cmwtXFx1MDAzZW5yX2hnZWkgPSAwO1xcbitcXG4rXFx0XFx0LyogVXBkYXRlIHRoZSBudW1iZXIgb2YgSU1TSUMgZ3Vlc3QgZmlsZXMgYWNyb3NzIGFsbCBIQVJUcyAqL1xcbitcXHRcXHRhaWFfbnJfaGdlaSA9IGF0b21pY19yZWFkKFxcdTAwMjZrdm1fcmlzY3ZfYWlhX25yX2hnZWkpO1xcbitcXHRcXHRkbyB7XFxuK1xcdFxcdFxcdGlmIChhaWFfbnJfaGdlaSBcXHUwMDNjPSBoZ2N0cmwtXFx1MDAzZW5yX2hnZWkpXFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9IHdoaWxlICghYXRvbWljX3RyeV9jbXB4Y2hnKFxcdTAwMjZrdm1fcmlzY3ZfYWlhX25yX2hnZWksIFxcdTAwMjZhaWFfbnJfaGdlaSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBoZ2N0cmwtXFx1MDAzZW5yX2hnZWkpKTtcXG4rXFxuK1xcdFxcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2aGdjdHJsLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdFxcdGlmICghaGdjdHJsLVxcdTAwM2VmcmVlX2JpdG1hcF9pbml0aWFsaXplZCkge1xcbitcXHRcXHRcXHRoZ2N0cmwtXFx1MDAzZWZyZWVfYml0bWFwID0gKGhnY3RybC1cXHUwMDNlbnJfaGdlaSkgP1xcbitcXHRcXHRcXHRcXHRcXHQgICAgICBHRU5NQVNLX1VMTChoZ2N0cmwtXFx1MDAzZW5yX2hnZWksIDEpIDpcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgMDtcXG4rXFx0XFx0XFx0aGdjdHJsLVxcdTAwM2VmcmVlX2JpdG1hcF9pbml0aWFsaXplZCA9IHRydWU7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmhnY3RybC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRjc3Jfd3JpdGUoQ1NSX0hHRUlFLCBoZ2N0cmwtXFx1MDAzZXNhdmVkX3ZhbHVlKTtcXG4gXFx0fVxcbi1cXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2aGdjdHJsLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcbiBcXHRjc3Jfd3JpdGUoQ1NSX0hWSUNUTCwgYWlhX2h2aWN0bF92YWx1ZShmYWxzZSkpO1xcbiBcXHRjc3Jfd3JpdGUoQ1NSX0hWSVBSSU8xLCAweDApO1xcbkBAIC01ODcsMTYgKzU5NywxNyBAQCB2b2lkIGt2bV9yaXNjdl9haWFfZW5hYmxlKHZvaWQpXFxuIFxcdGNzcl93cml0ZShDU1JfSFZJUFJJTzJILCAweDApO1xcbiAjZW5kaWZcXG4gXFxuLVxcdC8qIEVuYWJsZSBwZXItQ1BVIFNHRUkgaW50ZXJydXB0ICovXFxuLVxcdGVuYWJsZV9wZXJjcHVfaXJxKGhnZWlfcGFyZW50X2lycSxcXG4tXFx0XFx0XFx0ICBpcnFfZ2V0X3RyaWdnZXJfdHlwZShoZ2VpX3BhcmVudF9pcnEpKTtcXG4rXFx0aWYgKGZ1bGxfY2xlYW51cClcXG4rXFx0XFx0ZW5hYmxlX3BlcmNwdV9pcnEoaGdlaV9wYXJlbnRfaXJxLFxcbitcXHRcXHRcXHRcXHQgIGlycV9nZXRfdHJpZ2dlcl90eXBlKGhnZWlfcGFyZW50X2lycSkpO1xcbiBcXHRjc3Jfc2V0KENTUl9ISUUsIEJJVChJUlFfU19HRVhUKSk7XFxuK1xcbiBcXHQvKiBFbmFibGUgSVJRIGZpbHRlcmluZyBmb3Igb3ZlcmZsb3cgaW50ZXJydXB0IG9ubHkgaWYgc3Njb2ZwbWYgaXMgcHJlc2VudCAqL1xcbiBcXHRpZiAoX19yaXNjdl9pc2FfZXh0ZW5zaW9uX2F2YWlsYWJsZShOVUxMLCBSSVNDVl9JU0FfRVhUX1NTQ09GUE1GKSlcXG4gXFx0XFx0Y3NyX3NldChDU1JfSFZJRU4sIEJJVChJUlFfUE1VX09WRikpO1xcbiB9XFxuIFxcbi12b2lkIGt2bV9yaXNjdl9haWFfZGlzYWJsZSh2b2lkKVxcbit2b2lkIGt2bV9yaXNjdl9haWFfZGlzYWJsZShib29sIGZ1bGxfY2xlYW51cClcXG4ge1xcbiBcXHRpbnQgaTtcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG5AQCAtNjA5LDQyICs2MjAsNDkgQEAgdm9pZCBrdm1fcmlzY3ZfYWlhX2Rpc2FibGUodm9pZClcXG4gXFxuIFxcdGlmIChfX3Jpc2N2X2lzYV9leHRlbnNpb25fYXZhaWxhYmxlKE5VTEwsIFJJU0NWX0lTQV9FWFRfU1NDT0ZQTUYpKVxcbiBcXHRcXHRjc3JfY2xlYXIoQ1NSX0hWSUVOLCBCSVQoSVJRX1BNVV9PVkYpKTtcXG4tXFx0LyogRGlzYWJsZSBwZXItQ1BVIFNHRUkgaW50ZXJydXB0ICovXFxuLVxcdGNzcl9jbGVhcihDU1JfSElFLCBCSVQoSVJRX1NfR0VYVCkpO1xcbi1cXHRkaXNhYmxlX3BlcmNwdV9pcnEoaGdlaV9wYXJlbnRfaXJxKTtcXG4gXFxuLVxcdGNzcl93cml0ZShDU1JfSFZJQ1RMLCBhaWFfaHZpY3RsX3ZhbHVlKGZhbHNlKSk7XFxuLVxcbi1cXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmhnY3RybC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbi1cXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjPSBoZ2N0cmwtXFx1MDAzZW5yX2hnZWk7IGkrKykge1xcbi1cXHRcXHR2Y3B1ID0gaGdjdHJsLVxcdTAwM2Vvd25lcnNbaV07XFxuLVxcdFxcdGlmICghdmNwdSlcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdGlmIChmdWxsX2NsZWFudXApIHtcXG4rXFx0XFx0LyogRGlzYWJsZSBwZXItQ1BVIFNHRUkgaW50ZXJydXB0ICovXFxuK1xcdFxcdGNzcl9jbGVhcihDU1JfSElFLCBCSVQoSVJRX1NfR0VYVCkpO1xcbitcXHRcXHRkaXNhYmxlX3BlcmNwdV9pcnEoaGdlaV9wYXJlbnRfaXJxKTtcXG4rXFx0fVxcbiBcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogV2UgcmVsZWFzZSBoZ2N0cmwtXFx1MDAzZWxvY2sgYmVmb3JlIG5vdGlmeWluZyBJTVNJQ1xcbi1cXHRcXHQgKiBzbyB0aGF0IHdlIGRvbid0IGhhdmUgbG9jayBvcmRlcmluZyBpc3N1ZXMuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2aGdjdHJsLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdGNzcl93cml0ZShDU1JfSFZJQ1RMLCBhaWFfaHZpY3RsX3ZhbHVlKGZhbHNlKSk7XFxuIFxcbi1cXHRcXHQvKiBOb3RpZnkgSU1TSUMgKi9cXG4tXFx0XFx0a3ZtX3Jpc2N2X3ZjcHVfYWlhX2ltc2ljX3JlbGVhc2UodmNwdSk7XFxuK1xcdGlmIChmdWxsX2NsZWFudXApIHtcXG4rXFx0XFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZoZ2N0cmwtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gXFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIFdha2V1cCBWQ1BVIGlmIGl0IHdhcyBibG9ja2VkIHNvIHRoYXQgaXQgY2FuXFxuLVxcdFxcdCAqIHJ1biBvbiBvdGhlciBIQVJUc1xcbi1cXHRcXHQgKi9cXG4tXFx0XFx0aWYgKGNzcl9yZWFkKENTUl9IR0VJRSkgXFx1MDAyNiBCSVQoaSkpIHtcXG4tXFx0XFx0XFx0Y3NyX2NsZWFyKENTUl9IR0VJRSwgQklUKGkpKTtcXG4tXFx0XFx0XFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjPSBoZ2N0cmwtXFx1MDAzZW5yX2hnZWk7IGkrKykge1xcbitcXHRcXHRcXHR2Y3B1ID0gaGdjdHJsLVxcdTAwM2Vvd25lcnNbaV07XFxuK1xcdFxcdFxcdGlmICghdmNwdSlcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBXZSByZWxlYXNlIGhnY3RybC1cXHUwMDNlbG9jayBiZWZvcmUgbm90aWZ5aW5nIElNU0lDXFxuK1xcdFxcdFxcdCAqIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSBsb2NrIG9yZGVyaW5nIGlzc3Vlcy5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZoZ2N0cmwtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFxuK1xcdFxcdFxcdC8qIE5vdGlmeSBJTVNJQyAqL1xcbitcXHRcXHRcXHRrdm1fcmlzY3ZfdmNwdV9haWFfaW1zaWNfcmVsZWFzZSh2Y3B1KTtcXG4rXFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIFdha2V1cCBWQ1BVIGlmIGl0IHdhcyBibG9ja2VkIHNvIHRoYXQgaXQgY2FuXFxuK1xcdFxcdFxcdCAqIHJ1biBvbiBvdGhlciBIQVJUc1xcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aWYgKGNzcl9yZWFkKENTUl9IR0VJRSkgXFx1MDAyNiBCSVQoaSkpIHtcXG4rXFx0XFx0XFx0XFx0Y3NyX2NsZWFyKENTUl9IR0VJRSwgQklUKGkpKTtcXG4rXFx0XFx0XFx0XFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcXG4rXFx0XFx0XFx0fVxcbitcXG4rXFx0XFx0XFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZoZ2N0cmwtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZoZ2N0cmwtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0XFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmhnY3RybC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRoZ2N0cmwtXFx1MDAzZXNhdmVkX3ZhbHVlID0gY3NyX3JlYWQoQ1NSX0hHRUlFKTtcXG4gXFx0fVxcbiBcXG4tXFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmhnY3RybC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbi1cXG4gXFx0cHV0X2NwdV9wdHIoXFx1MDAyNmFpYV9oZ2VpKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vbWFpbi5jIGIvYXJjaC9yaXNjdi9rdm0vbWFpbi5jXFxuaW5kZXggMDkyNGM3NTEwMGEyZDAuLmI4NDYxZjFhNTY5ZmFlIDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL21haW4uY1xcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL21haW4uY1xcbkBAIC0xMCw2ICsxMCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9lcnIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva3ZtX2hvc3QuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NwdV9wbS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2NwdWZlYXR1cmUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm1fbW11LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX25hY2wuaFxcdTAwM2VcXG5AQCAtMzMsMTQgKzM0LDkgQEAgbG9uZyBrdm1fYXJjaF9kZXZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxuIFxcdHJldHVybiAtRUlOVkFMO1xcbiB9XFxuIFxcbi1pbnQga3ZtX2FyY2hfZW5hYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKVxcbisvKiBJbml0aWFsaXplIGh5cGVydmlzb3IgQ1NScyAtIGNhbGxlZCBkdXJpbmcgQ1BVIG9ubGluZSBhbmQgbm9uLXJldGVudGlvbiBpZGxlIHJlc3VtZSAqL1xcbitzdGF0aWMgdm9pZCBrdm1fcmlzY3ZfY3NyX2VuYWJsZSh2b2lkKVxcbiB7XFxuLVxcdGludCByYztcXG4tXFxuLVxcdHJjID0ga3ZtX3Jpc2N2X25hY2xfZW5hYmxlKCk7XFxuLVxcdGlmIChyYylcXG4tXFx0XFx0cmV0dXJuIHJjO1xcbi1cXG4gXFx0Y3NyX3dyaXRlKENTUl9IRURFTEVHLCAwKTtcXG4gXFx0Y3NyX3dyaXRlKENTUl9ISURFTEVHLCAwKTtcXG4gXFxuQEAgLTQ4LDE2ICs0NCwxMSBAQCBpbnQga3ZtX2FyY2hfZW5hYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKVxcbiBcXHRjc3Jfd3JpdGUoQ1NSX0hDT1VOVEVSRU4sIDB4MDIpO1xcbiBcXG4gXFx0Y3NyX3dyaXRlKENTUl9IVklQLCAwKTtcXG4tXFxuLVxcdGt2bV9yaXNjdl9haWFfZW5hYmxlKCk7XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tdm9pZCBrdm1fYXJjaF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKVxcbisvKiBDbGVhciBoeXBlcnZpc29yIENTUnMgLSBjYWxsZWQgZHVyaW5nIENQVSBvZmZsaW5lIGFuZCBub24tcmV0ZW50aW9uIGlkbGUgZW50cnkgKi9cXG4rc3RhdGljIHZvaWQga3ZtX3Jpc2N2X2Nzcl9kaXNhYmxlKHZvaWQpXFxuIHtcXG4tXFx0a3ZtX3Jpc2N2X2FpYV9kaXNhYmxlKCk7XFxuLVxcbiBcXHQvKlxcbiBcXHQgKiBBZnRlciBjbGVhcmluZyB0aGUgaGlkZWxlZyBDU1IsIHRoZSBob3N0IGtlcm5lbCB3aWxsIHJlY2VpdmVcXG4gXFx0ICogc3B1cmlvdXMgaW50ZXJydXB0cyBpZiBodmlwIENTUiBoYXMgcGVuZGluZyBpbnRlcnJ1cHRzIGFuZCB0aGVcXG5AQCAtNjksOSArNjAsNjIgQEAgdm9pZCBrdm1fYXJjaF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKVxcbiBcXHRjc3Jfd3JpdGUoQ1NSX0hFREVMRUcsIDApO1xcbiBcXHRjc3Jfd3JpdGUoQ1NSX0hJREVMRUcsIDApO1xcbiBcXG4rXFx0a3ZtX3Jpc2N2X2NsZWFyX2Zvcm1lcl92Y3B1KCk7XFxuK31cXG4rXFxuK2ludCBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXFxuK3tcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0cmMgPSBrdm1fcmlzY3ZfbmFjbF9lbmFibGUoKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRrdm1fcmlzY3ZfY3NyX2VuYWJsZSgpO1xcbitcXHRrdm1fcmlzY3ZfYWlhX2VuYWJsZSh0cnVlKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbit2b2lkIGt2bV9hcmNoX2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXFxuK3tcXG4rXFx0a3ZtX3Jpc2N2X2FpYV9kaXNhYmxlKHRydWUpO1xcbitcXHRrdm1fcmlzY3ZfY3NyX2Rpc2FibGUoKTtcXG4gXFx0a3ZtX3Jpc2N2X25hY2xfZGlzYWJsZSgpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGt2bV9yaXNjdl9jcHVfcG1fbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLCB1bnNpZ25lZCBsb25nIGNtZCwgdm9pZCAqdilcXG4re1xcbitcXHQvKlxcbitcXHQgKiBUbyBhdm9pZCByZWR1bmRhbnQgZGlzYWJsZS9lbmFibGUgb3BlcmF0aW9ucyAoc2luY2UgS1ZNJ3NcXG4rXFx0ICogc3lzY29yZSBvcHMgd2lsbCBoYW5kbGUgdGhlIHN0YXRlIGR1cmluZyBzeXN0ZW0gc3VzcGVuZCksXFxuK1xcdCAqIGlnbm9yZSBDUFVfUE0gZXZlbnRzIHdoZW4gYSBzeXN0ZW0gc3VzcGVuZC9yZXN1bWUgaXMgaW5cXG4rXFx0ICogcHJvZ3Jlc3MuXFxuK1xcdCAqL1xcbitcXHRpZiAoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9TVVNQRU5EKVxcbitcXHRcXHRyZXR1cm4gTk9USUZZX0RPTkU7XFxuK1xcbitcXHRzd2l0Y2ggKGNtZCkge1xcbitcXHRjYXNlIENQVV9QTV9FWElUOlxcbitcXHRjYXNlIENQVV9QTV9FTlRFUl9GQUlMRUQ6XFxuK1xcdFxcdGt2bV9yaXNjdl9jc3JfZW5hYmxlKCk7XFxuK1xcdFxcdGt2bV9yaXNjdl9haWFfZW5hYmxlKGZhbHNlKTtcXG4rXFx0XFx0cmV0dXJuIE5PVElGWV9PSztcXG4rXFx0Y2FzZSBDUFVfUE1fRU5URVI6XFxuK1xcdFxcdGt2bV9yaXNjdl9haWFfZGlzYWJsZShmYWxzZSk7XFxuK1xcdFxcdGt2bV9yaXNjdl9jc3JfZGlzYWJsZSgpO1xcbitcXHRcXHRyZXR1cm4gTk9USUZZX09LO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIE5PVElGWV9ET05FO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGt2bV9yaXNjdl9jcHVfcG1fbmIgPSB7XFxuK1xcdC5ub3RpZmllcl9jYWxsID0ga3ZtX3Jpc2N2X2NwdV9wbV9ub3RpZmllcixcXG4rfTtcXG4rXFxuIHN0YXRpYyB2b2lkIGt2bV9yaXNjdl90ZWFyZG93bih2b2lkKVxcbiB7XFxuIFxcdGt2bV9yaXNjdl9haWFfZXhpdCgpO1xcbkBAIC0xNzIsMjIgKzIxNiw0MCBAQCBzdGF0aWMgaW50IF9faW5pdCByaXNjdl9rdm1faW5pdCh2b2lkKVxcbiBcXG4gXFx0a3ZtX3JlZ2lzdGVyX3BlcmZfY2FsbGJhY2tzKCk7XFxuIFxcbi1cXHRyYyA9IGt2bV9pbml0KHNpemVvZihzdHJ1Y3Qga3ZtX3ZjcHUpLCAwLCBUSElTX01PRFVMRSk7XFxuLVxcdGlmIChyYykge1xcbi1cXHRcXHRrdm1fcmlzY3ZfdGVhcmRvd24oKTtcXG4tXFx0XFx0cmV0dXJuIHJjO1xcbitcXHQvKiBSZWdpc3RlciBDUFUgUE0gbm90aWZpZXIgZm9yIENQVSBpZGxlIG5vbi1yZXRlbnRpb24gc3RhdGVzICovXFxuK1xcdGlmIChJU19FTkFCTEVEKENPTkZJR19DUFVfUE0pKSB7XFxuK1xcdFxcdHJjID0gY3B1X3BtX3JlZ2lzdGVyX25vdGlmaWVyKFxcdTAwMjZrdm1fcmlzY3ZfY3B1X3BtX25iKTtcXG4rXFx0XFx0aWYgKHJjKSB7XFxuK1xcdFxcdFxcdGt2bV9lcnIoXFxcIkZhaWxlZCB0byByZWdpc3RlciBDUFUgUE0gbm90aWZpZXI6ICVkXFxcXG5cXFwiLCByYyk7XFxuK1xcdFxcdFxcdGdvdG8gZXJyX3RlYXJkb3duO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFxuK1xcdHJjID0ga3ZtX2luaXQoc2l6ZW9mKHN0cnVjdCBrdm1fdmNwdSksIDAsIFRISVNfTU9EVUxFKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRnb3RvIGVycl91bnJlZ2lzdGVyX2NwdV9wbTtcXG4rXFxuIFxcdGlmIChrdm1fcmlzY3ZfYWlhX2F2YWlsYWJsZSgpKVxcbiBcXHRcXHRrdm1faW5mbyhcXFwiQUlBIGF2YWlsYWJsZSB3aXRoICVkIGd1ZXN0IGV4dGVybmFsIGludGVycnVwdHNcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCBhdG9taWNfcmVhZChcXHUwMDI2a3ZtX3Jpc2N2X2FpYV9ucl9oZ2VpKSk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl91bnJlZ2lzdGVyX2NwdV9wbTpcXG4rXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0NQVV9QTSkpXFxuK1xcdFxcdGNwdV9wbV91bnJlZ2lzdGVyX25vdGlmaWVyKFxcdTAwMjZrdm1fcmlzY3ZfY3B1X3BtX25iKTtcXG4rZXJyX3RlYXJkb3duOlxcbitcXHRrdm1fcmlzY3ZfdGVhcmRvd24oKTtcXG4rXFx0cmV0dXJuIHJjO1xcbiB9XFxuIG1vZHVsZV9pbml0KHJpc2N2X2t2bV9pbml0KTtcXG4gXFxuIHN0YXRpYyB2b2lkIF9fZXhpdCByaXNjdl9rdm1fZXhpdCh2b2lkKVxcbiB7XFxuK1xcdC8qIFVucmVnaXN0ZXIgQ1BVIFBNIG5vdGlmaWVyICovXFxuK1xcdGlmIChJU19FTkFCTEVEKENPTkZJR19DUFVfUE0pKVxcbitcXHRcXHRjcHVfcG1fdW5yZWdpc3Rlcl9ub3RpZmllcihcXHUwMDI2a3ZtX3Jpc2N2X2NwdV9wbV9uYik7XFxuK1xcbiBcXHRrdm1fZXhpdCgpO1xcbiBcXG4gXFx0a3ZtX3Jpc2N2X3RlYXJkb3duKCk7XFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHUuYyBiL2FyY2gvcmlzY3Yva3ZtL3ZjcHUuY1xcbmluZGV4IGNmNmUyMzFlNzZlMjU0Li5lNDgzMzhmOTA3ZjQ4OCAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS92Y3B1LmNcXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1LmNcXG5AQCAtMjYsNiArMjYsMTcgQEBcXG4gXFxuIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qga3ZtX3ZjcHUgKiwga3ZtX2Zvcm1lcl92Y3B1KTtcXG4gXFxuK3ZvaWQga3ZtX3Jpc2N2X2NsZWFyX2Zvcm1lcl92Y3B1KHZvaWQpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogQ2xlYXIgdGhlIHBlci1DUFUgZm9ybWVyIFZDUFUgcG9pbnRlciBiZWNhdXNlIGh5cGVydmlzb3IgQ1NSIHN0YXRlXFxuK1xcdCAqIHdpbGwgYmUgbG9zdC4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIG5leHQgVkNQVSBlbnRyeSB3aWxsIHByb3Blcmx5XFxuK1xcdCAqIHJlc3RvcmUgYWxsIENTUnMgaW5zdGVhZCBvZiBpbmNvcnJlY3RseSBza2lwcGluZyBDU1IgcmVzdG9yYXRpb25cXG4rXFx0ICogdmlhIHRoZSBmYXN0LXBhdGggb3B0aW1pemF0aW9uLlxcbitcXHQgKi9cXG4rXFx0X190aGlzX2NwdV93cml0ZShrdm1fZm9ybWVyX3ZjcHUsIE5VTEwpO1xcbit9XFxuK1xcbiBjb25zdCBzdHJ1Y3Qga3ZtX3N0YXRzX2Rlc2Mga3ZtX3ZjcHVfc3RhdHNfZGVzY1tdID0ge1xcbiBcXHRLVk1fR0VORVJJQ19WQ1BVX1NUQVRTKCksXFxuIFxcdFNUQVRTX0RFU0NfQ09VTlRFUihWQ1BVLCBlY2FsbF9leGl0X3N0YXQpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMjo0NDozMS45NjcwNzY3MTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMTIzOTM2MDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiQ1BVX0lETEVcIixcbiAgICBcIlNVU1BFTkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fcmlzY3ZfY3B1X3BtX25vdGlmaWVyXCIsXG4gICAgXCJrdm1fcmlzY3ZfYWlhX2VuYWJsZVwiLFxuICAgIFwia3ZtX3Jpc2N2X2FpYV9kaXNhYmxlXCIsXG4gICAgXCJrdm1fcmlzY3ZfY2xlYXJfZm9ybWVyX3ZjcHVcIixcbiAgICBcImt2bV9hcmNoX2VuYWJsZV92aXJ0dWFsaXphdGlvbl9jcHVcIixcbiAgICBcImt2bV9hcmNoX2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1XCIsXG4gICAgXCJrdm1fcmlzY3ZfY3NyX2VuYWJsZVwiLFxuICAgIFwia3ZtX3Jpc2N2X2Nzcl9kaXNhYmxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGlzIHBhdGNoIG1vZGlmaWVzIFJJU0MtViBLVk0gdG8gaGFuZGxlIENQVSBwb3dlciBtYW5hZ2VtZW50IGV2ZW50cyAoQ1BVX1BNKSBmb3Igbm9uLXJldGVudGlvbiBpZGxlIHN0YXRlcy4gSXQgaW50cm9kdWNlcyBhIENQVSBQTSBub3RpZmllciBhbmQgbW9kaWZpZXMgQUlBIChBZHZhbmNlZCBJbnRlcnJ1cHQgQXJjaGl0ZWN0dXJlKSBlbmFibGUvZGlzYWJsZSBwYXRocyB0byBzdXBwb3J0IGxpZ2h0d2VpZ2h0IENTUiBzYXZlL3Jlc3RvcmUuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBLVk0gbG9naWMgb24gUklTQy1WIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBpbiB2aXJ0dWFsaXphdGlvbiBvciBwb3dlciBtYW5hZ2VtZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDEyNTE2NzIxNmZhMjNkYWU4ZmNhZmRjYzcxZDlmMjkwN2Q0YjU0ZWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1biAyNiAyMjo0NDozMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2FpYS5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fYWlhLmhcbmluZGV4IGM2N2VjNWFjMGExNDZiLi43YzFjMzI1MDU5OGZiMCAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2FpYS5oXG4rKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9haWEuaFxuQEAgLTE2NSw4ICsxNjUsMTkgQEAgaW50IGt2bV9yaXNjdl9haWFfYWxsb2NfaGdlaShpbnQgY3B1LCBzdHJ1Y3Qga3ZtX3ZjcHUgKm93bmVyLFxuIFx0XHRcdCAgICAgdm9pZCBfX2lvbWVtICoqaGdlaV92YSwgcGh5c19hZGRyX3QgKmhnZWlfcGEpO1xuIHZvaWQga3ZtX3Jpc2N2X2FpYV9mcmVlX2hnZWkoaW50IGNwdSwgaW50IGhnZWkpO1xuIFxuLXZvaWQga3ZtX3Jpc2N2X2FpYV9lbmFibGUodm9pZCk7XG4tdm9pZCBrdm1fcmlzY3ZfYWlhX2Rpc2FibGUodm9pZCk7XG4rLyoqXG4rICoga3ZtX3Jpc2N2X2FpYV9lbmFibGUoKSAtIEVuYWJsZSBBSUEgc3VwcG9ydCBvbiBjdXJyZW50IENQVVxuKyAqIEBmdWxsX2NsZWFudXA6IHRydWUgPSBmdWxsIGhhcmR3YXJlIGluaXQgKENQVSBob3RwbHVnL21vZHVsZSBsb2FkKSxcbisgKiAgICAgICAgICAgICAgICBmYWxzZSA9IGxpZ2h0d2VpZ2h0IENTUiByZXN0b3JlIChDUFUgbm9uLXJldGVudGlvbiBpZGxlIHJlc3VtZSlcbisgKi9cbit2b2lkIGt2bV9yaXNjdl9haWFfZW5hYmxlKGJvb2wgZnVsbF9jbGVhbnVwKTtcbitcbisvKipcbisgKiBrdm1fcmlzY3ZfYWlhX2Rpc2FibGUoKSAtIERpc2FibGUgQUlBIHN1cHBvcnQgb24gY3VycmVudCBDUFVcbisgKiBAZnVsbF9jbGVhbnVwOiB0cnVlID0gZnVsbCBoYXJkd2FyZSBjbGVhbnVwIChDUFUgaG90cGx1Zy9tb2R1bGUgZXhpdCksXG4rICogICAgICAgICAgICAgICAgZmFsc2UgPSBsaWdodHdlaWdodCBDU1Igc2F2ZSAoQ1BVIG5vbi1yZXRlbnRpb24gaWRsZSBlbnRyeSlcbisgKi9cbit2b2lkIGt2bV9yaXNjdl9haWFfZGlzYWJsZShib29sIGZ1bGxfY2xlYW51cCk7XG4gaW50IGt2bV9yaXNjdl9haWFfaW5pdCh2b2lkKTtcbiB2b2lkIGt2bV9yaXNjdl9haWFfZXhpdCh2b2lkKTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IDYwMDE3Y2VlYzlkMmFmLi44MDhiNGVlMWJkMTBhYyAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuKysrIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtMzE5LDYgKzMxOSw4IEBAIGJvb2wga3ZtX3Jpc2N2X3ZjcHVfc3RvcHBlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFxuIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfcmVjb3JkX3N0ZWFsX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcbit2b2lkIGt2bV9yaXNjdl9jbGVhcl9mb3JtZXJfdmNwdSh2b2lkKTtcbitcbiAvKiBGbGFncyByZXByZXNlbnRpbmcgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgZGV0YWlscyAqL1xuIERFQ0xBUkVfU1RBVElDX0tFWV9GQUxTRShrdm1fcmlzY3ZfdnNzdGFnZV90bGJfbm9fZ3BhKTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9haWEuYyBiL2FyY2gvcmlzY3Yva3ZtL2FpYS5jXG5pbmRleCBiYWZiMDA5YzVjZTU1OS4uNGNmMzUxZjkxYzY0M2YgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9haWEuY1xuKysrIGIvYXJjaC9yaXNjdi9rdm0vYWlhLmNcbkBAIC0yNSw2ICsyNSw3IEBAIHN0cnVjdCBhaWFfaGdlaV9jb250cm9sIHtcbiBcdHVuc2lnbmVkIGxvbmcgZnJlZV9iaXRtYXA7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKm93bmVyc1tCSVRTX1BFUl9MT05HXTtcbiBcdHVuc2lnbmVkIGludCBucl9oZ2VpO1xuK1x0dW5zaWduZWQgbG9uZyBzYXZlZF92YWx1ZTtcbiB9O1xuIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgYWlhX2hnZWlfY29udHJvbCwgYWlhX2hnZWkpO1xuIHN0YXRpYyBpbnQgaGdlaV9wYXJlbnRfaXJxO1xuQEAgLTUzMiw1MCArNTMzLDU5IEBAIHN0YXRpYyB2b2lkIGFpYV9oZ2VpX2V4aXQodm9pZClcbiBcdGZyZWVfcGVyY3B1X2lycShoZ2VpX3BhcmVudF9pcnEsIFx1MDAyNmFpYV9oZ2VpKTtcbiB9XG4gXG4tdm9pZCBrdm1fcmlzY3ZfYWlhX2VuYWJsZSh2b2lkKVxuK3ZvaWQga3ZtX3Jpc2N2X2FpYV9lbmFibGUoYm9vbCBmdWxsX2NsZWFudXApXG4ge1xuLVx0Y29uc3Qgc3RydWN0IGltc2ljX2dsb2JhbF9jb25maWcgKmdjO1xuLVx0Y29uc3Qgc3RydWN0IGltc2ljX2xvY2FsX2NvbmZpZyAqbGM7XG4gXHRzdHJ1Y3QgYWlhX2hnZWlfY29udHJvbCAqaGdjdHJsO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbi1cdGludCBhaWFfbnJfaGdlaTtcbiBcbiBcdGlmICgha3ZtX3Jpc2N2X2FpYV9hdmFpbGFibGUoKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0Z2MgPSBpbXNpY19nZXRfZ2xvYmFsX2NvbmZpZygpO1xuLVx0bGMgPSAoZ2MpID8gdGhpc19jcHVfcHRyKGdjLVx1MDAzZWxvY2FsKSA6IE5VTEw7XG4gXHRoZ2N0cmwgPSB0aGlzX2NwdV9wdHIoXHUwMDI2YWlhX2hnZWkpO1xuIFxuLVx0LyogRmlndXJlLW91dCBudW1iZXIgb2YgYml0cyBpbiBIR0VJRSAqL1xuLVx0Y3NyX3dyaXRlKENTUl9IR0VJRSwgLTFVTCk7XG4tXHRoZ2N0cmwtXHUwMDNlbnJfaGdlaSA9IGZsc19sb25nKGNzcl9yZWFkKENTUl9IR0VJRSkpO1xuLVx0Y3NyX3dyaXRlKENTUl9IR0VJRSwgMCk7XG4tXHRpZiAoaGdjdHJsLVx1MDAzZW5yX2hnZWkpXG4tXHRcdGhnY3RybC1cdTAwM2Vucl9oZ2VpLS07XG4rXHRpZiAoZnVsbF9jbGVhbnVwKSB7XG4rXHRcdGNvbnN0IHN0cnVjdCBpbXNpY19nbG9iYWxfY29uZmlnICpnYztcbitcdFx0Y29uc3Qgc3RydWN0IGltc2ljX2xvY2FsX2NvbmZpZyAqbGM7XG4rXHRcdGludCBhaWFfbnJfaGdlaTtcbiBcbi1cdC8qXG4tXHQgKiBOdW1iZXIgb2YgdXNhYmxlIHBlci1IQVJUIEhHRUkgbGluZXMgc2hvdWxkIGJlIG1pbmltdW0gb2Zcbi1cdCAqIHBlci1IQVJUIElNU0lDIGd1ZXN0IGZpbGVzIGFuZCBudW1iZXIgb2YgYml0cyBpbiBIR0VJRS5cbi1cdCAqL1xuLVx0aWYgKGxjKVxuLVx0XHRoZ2N0cmwtXHUwMDNlbnJfaGdlaSA9IG1pbigodWxvbmcpaGdjdHJsLVx1MDAzZW5yX2hnZWksIGxjLVx1MDAzZW5yX2d1ZXN0X2ZpbGVzKTtcbi1cdGVsc2Vcbi1cdFx0aGdjdHJsLVx1MDAzZW5yX2hnZWkgPSAwO1xuK1x0XHRnYyA9IGltc2ljX2dldF9nbG9iYWxfY29uZmlnKCk7XG4rXHRcdGxjID0gKGdjKSA/IHRoaXNfY3B1X3B0cihnYy1cdTAwM2Vsb2NhbCkgOiBOVUxMO1xuIFxuLVx0LyogVXBkYXRlIHRoZSBudW1iZXIgb2YgSU1TSUMgZ3Vlc3QgZmlsZXMgYWNyb3NzIGFsbCBIQVJUcyAqL1xuLVx0YWlhX25yX2hnZWkgPSBhdG9taWNfcmVhZChcdTAwMjZrdm1fcmlzY3ZfYWlhX25yX2hnZWkpO1xuLVx0ZG8ge1xuLVx0XHRpZiAoYWlhX25yX2hnZWkgXHUwMDNjPSBoZ2N0cmwtXHUwMDNlbnJfaGdlaSlcbi1cdFx0XHRicmVhaztcbi1cdH0gd2hpbGUgKCFhdG9taWNfdHJ5X2NtcHhjaGcoXHUwMDI2a3ZtX3Jpc2N2X2FpYV9ucl9oZ2VpLCBcdTAwMjZhaWFfbnJfaGdlaSwgaGdjdHJsLVx1MDAzZW5yX2hnZWkpKTtcbitcdFx0LyogRmlndXJlLW91dCBudW1iZXIgb2YgYml0cyBpbiBIR0VJRSAqL1xuK1x0XHRjc3Jfd3JpdGUoQ1NSX0hHRUlFLCAtMVVMKTtcbitcdFx0aGdjdHJsLVx1MDAzZW5yX2hnZWkgPSBmbHNfbG9uZyhjc3JfcmVhZChDU1JfSEdFSUUpKTtcbitcdFx0Y3NyX3dyaXRlKENTUl9IR0VJRSwgMCk7XG4rXHRcdGlmIChoZ2N0cmwtXHUwMDNlbnJfaGdlaSlcbitcdFx0XHRoZ2N0cmwtXHUwMDNlbnJfaGdlaS0tO1xuIFxuLVx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmhnY3RybC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tXHRpZiAoIWhnY3RybC1cdTAwM2VmcmVlX2JpdG1hcF9pbml0aWFsaXplZCkge1xuLVx0XHRoZ2N0cmwtXHUwMDNlZnJlZV9iaXRtYXAgPSAoaGdjdHJsLVx1MDAzZW5yX2hnZWkpID8gR0VOTUFTS19VTEwoaGdjdHJsLVx1MDAzZW5yX2hnZWksIDEpIDogMDtcbi1cdFx0aGdjdHJsLVx1MDAzZWZyZWVfYml0bWFwX2luaXRpYWxpemVkID0gdHJ1ZTtcbitcdFx0LypcbitcdFx0ICogTnVtYmVyIG9mIHVzYWJsZSBwZXItSEFSVCBIR0VJIGxpbmVzIHNob3VsZCBiZSBtaW5pbXVtIG9mXG4rXHRcdCAqIHBlci1IQVJUIElNU0lDIGd1ZXN0IGZpbGVzIGFuZCBudW1iZXIgb2YgYml0cyBpbiBIR0VJRS5cbitcdFx0ICovXG4rXHRcdGlmIChsYylcbitcdFx0XHRoZ2N0cmwtXHUwMDNlbnJfaGdlaSA9IG1pbigodWxvbmcpaGdjdHJsLVx1MDAzZW5yX2hnZWksIGxjLVx1MDAzZW5yX2d1ZXN0X2ZpbGVzKTtcbitcdFx0ZWxzZVxuK1x0XHRcdGhnY3RybC1cdTAwM2Vucl9oZ2VpID0gMDtcbitcbitcdFx0LyogVXBkYXRlIHRoZSBudW1iZXIgb2YgSU1TSUMgZ3Vlc3QgZmlsZXMgYWNyb3NzIGFsbCBIQVJUcyAqL1xuK1x0XHRhaWFfbnJfaGdlaSA9IGF0b21pY19yZWFkKFx1MDAyNmt2bV9yaXNjdl9haWFfbnJfaGdlaSk7XG4rXHRcdGRvIHtcbitcdFx0XHRpZiAoYWlhX25yX2hnZWkgXHUwMDNjPSBoZ2N0cmwtXHUwMDNlbnJfaGdlaSlcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHR9IHdoaWxlICghYXRvbWljX3RyeV9jbXB4Y2hnKFx1MDAyNmt2bV9yaXNjdl9haWFfbnJfaGdlaSwgXHUwMDI2YWlhX25yX2hnZWksXG4rXHRcdFx0XHRcdCAgICAgaGdjdHJsLVx1MDAzZW5yX2hnZWkpKTtcbitcbitcdFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmhnY3RybC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdGlmICghaGdjdHJsLVx1MDAzZWZyZWVfYml0bWFwX2luaXRpYWxpemVkKSB7XG4rXHRcdFx0aGdjdHJsLVx1MDAzZWZyZWVfYml0bWFwID0gKGhnY3RybC1cdTAwM2Vucl9oZ2VpKSA/XG4rXHRcdFx0XHRcdCAgICAgIEdFTk1BU0tfVUxMKGhnY3RybC1cdTAwM2Vucl9oZ2VpLCAxKSA6XG4rXHRcdFx0XHRcdCAgICAgIDA7XG4rXHRcdFx0aGdjdHJsLVx1MDAzZWZyZWVfYml0bWFwX2luaXRpYWxpemVkID0gdHJ1ZTtcbitcdFx0fVxuK1x0XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZoZ2N0cmwtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0fSBlbHNlIHtcbitcdFx0Y3NyX3dyaXRlKENTUl9IR0VJRSwgaGdjdHJsLVx1MDAzZXNhdmVkX3ZhbHVlKTtcbiBcdH1cbi1cdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmhnY3RybC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4gXHRjc3Jfd3JpdGUoQ1NSX0hWSUNUTCwgYWlhX2h2aWN0bF92YWx1ZShmYWxzZSkpO1xuIFx0Y3NyX3dyaXRlKENTUl9IVklQUklPMSwgMHgwKTtcbkBAIC01ODcsMTYgKzU5NywxNyBAQCB2b2lkIGt2bV9yaXNjdl9haWFfZW5hYmxlKHZvaWQpXG4gXHRjc3Jfd3JpdGUoQ1NSX0hWSVBSSU8ySCwgMHgwKTtcbiAjZW5kaWZcbiBcbi1cdC8qIEVuYWJsZSBwZXItQ1BVIFNHRUkgaW50ZXJydXB0ICovXG4tXHRlbmFibGVfcGVyY3B1X2lycShoZ2VpX3BhcmVudF9pcnEsXG4tXHRcdFx0ICBpcnFfZ2V0X3RyaWdnZXJfdHlwZShoZ2VpX3BhcmVudF9pcnEpKTtcbitcdGlmIChmdWxsX2NsZWFudXApXG4rXHRcdGVuYWJsZV9wZXJjcHVfaXJxKGhnZWlfcGFyZW50X2lycSxcbitcdFx0XHRcdCAgaXJxX2dldF90cmlnZ2VyX3R5cGUoaGdlaV9wYXJlbnRfaXJxKSk7XG4gXHRjc3Jfc2V0KENTUl9ISUUsIEJJVChJUlFfU19HRVhUKSk7XG4rXG4gXHQvKiBFbmFibGUgSVJRIGZpbHRlcmluZyBmb3Igb3ZlcmZsb3cgaW50ZXJydXB0IG9ubHkgaWYgc3Njb2ZwbWYgaXMgcHJlc2VudCAqL1xuIFx0aWYgKF9fcmlzY3ZfaXNhX2V4dGVuc2lvbl9hdmFpbGFibGUoTlVMTCwgUklTQ1ZfSVNBX0VYVF9TU0NPRlBNRikpXG4gXHRcdGNzcl9zZXQoQ1NSX0hWSUVOLCBCSVQoSVJRX1BNVV9PVkYpKTtcbiB9XG4gXG4tdm9pZCBrdm1fcmlzY3ZfYWlhX2Rpc2FibGUodm9pZClcbit2b2lkIGt2bV9yaXNjdl9haWFfZGlzYWJsZShib29sIGZ1bGxfY2xlYW51cClcbiB7XG4gXHRpbnQgaTtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG5AQCAtNjA5LDQyICs2MjAsNDkgQEAgdm9pZCBrdm1fcmlzY3ZfYWlhX2Rpc2FibGUodm9pZClcbiBcbiBcdGlmIChfX3Jpc2N2X2lzYV9leHRlbnNpb25fYXZhaWxhYmxlKE5VTEwsIFJJU0NWX0lTQV9FWFRfU1NDT0ZQTUYpKVxuIFx0XHRjc3JfY2xlYXIoQ1NSX0hWSUVOLCBCSVQoSVJRX1BNVV9PVkYpKTtcbi1cdC8qIERpc2FibGUgcGVyLUNQVSBTR0VJIGludGVycnVwdCAqL1xuLVx0Y3NyX2NsZWFyKENTUl9ISUUsIEJJVChJUlFfU19HRVhUKSk7XG4tXHRkaXNhYmxlX3BlcmNwdV9pcnEoaGdlaV9wYXJlbnRfaXJxKTtcbiBcbi1cdGNzcl93cml0ZShDU1JfSFZJQ1RMLCBhaWFfaHZpY3RsX3ZhbHVlKGZhbHNlKSk7XG4tXG4tXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2aGdjdHJsLVx1MDAzZWxvY2ssIGZsYWdzKTtcbi1cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBoZ2N0cmwtXHUwMDNlbnJfaGdlaTsgaSsrKSB7XG4tXHRcdHZjcHUgPSBoZ2N0cmwtXHUwMDNlb3duZXJzW2ldO1xuLVx0XHRpZiAoIXZjcHUpXG4tXHRcdFx0Y29udGludWU7XG4rXHRpZiAoZnVsbF9jbGVhbnVwKSB7XG4rXHRcdC8qIERpc2FibGUgcGVyLUNQVSBTR0VJIGludGVycnVwdCAqL1xuK1x0XHRjc3JfY2xlYXIoQ1NSX0hJRSwgQklUKElSUV9TX0dFWFQpKTtcbitcdFx0ZGlzYWJsZV9wZXJjcHVfaXJxKGhnZWlfcGFyZW50X2lycSk7XG4rXHR9XG4gXG4tXHRcdC8qXG4tXHRcdCAqIFdlIHJlbGVhc2UgaGdjdHJsLVx1MDAzZWxvY2sgYmVmb3JlIG5vdGlmeWluZyBJTVNJQ1xuLVx0XHQgKiBzbyB0aGF0IHdlIGRvbid0IGhhdmUgbG9jayBvcmRlcmluZyBpc3N1ZXMuXG4tXHRcdCAqL1xuLVx0XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZoZ2N0cmwtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0Y3NyX3dyaXRlKENTUl9IVklDVEwsIGFpYV9odmljdGxfdmFsdWUoZmFsc2UpKTtcbiBcbi1cdFx0LyogTm90aWZ5IElNU0lDICovXG4tXHRcdGt2bV9yaXNjdl92Y3B1X2FpYV9pbXNpY19yZWxlYXNlKHZjcHUpO1xuK1x0aWYgKGZ1bGxfY2xlYW51cCkge1xuK1x0XHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2aGdjdHJsLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbi1cdFx0Lypcbi1cdFx0ICogV2FrZXVwIFZDUFUgaWYgaXQgd2FzIGJsb2NrZWQgc28gdGhhdCBpdCBjYW5cbi1cdFx0ICogcnVuIG9uIG90aGVyIEhBUlRzXG4tXHRcdCAqL1xuLVx0XHRpZiAoY3NyX3JlYWQoQ1NSX0hHRUlFKSBcdTAwMjYgQklUKGkpKSB7XG4tXHRcdFx0Y3NyX2NsZWFyKENTUl9IR0VJRSwgQklUKGkpKTtcbi1cdFx0XHRrdm1fdmNwdV9raWNrKHZjcHUpO1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gaGdjdHJsLVx1MDAzZW5yX2hnZWk7IGkrKykge1xuK1x0XHRcdHZjcHUgPSBoZ2N0cmwtXHUwMDNlb3duZXJzW2ldO1xuK1x0XHRcdGlmICghdmNwdSlcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogV2UgcmVsZWFzZSBoZ2N0cmwtXHUwMDNlbG9jayBiZWZvcmUgbm90aWZ5aW5nIElNU0lDXG4rXHRcdFx0ICogc28gdGhhdCB3ZSBkb24ndCBoYXZlIGxvY2sgb3JkZXJpbmcgaXNzdWVzLlxuK1x0XHRcdCAqL1xuK1x0XHRcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmhnY3RybC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXG4rXHRcdFx0LyogTm90aWZ5IElNU0lDICovXG4rXHRcdFx0a3ZtX3Jpc2N2X3ZjcHVfYWlhX2ltc2ljX3JlbGVhc2UodmNwdSk7XG4rXG4rXHRcdFx0LypcbitcdFx0XHQgKiBXYWtldXAgVkNQVSBpZiBpdCB3YXMgYmxvY2tlZCBzbyB0aGF0IGl0IGNhblxuK1x0XHRcdCAqIHJ1biBvbiBvdGhlciBIQVJUc1xuK1x0XHRcdCAqL1xuK1x0XHRcdGlmIChjc3JfcmVhZChDU1JfSEdFSUUpIFx1MDAyNiBCSVQoaSkpIHtcbitcdFx0XHRcdGNzcl9jbGVhcihDU1JfSEdFSUUsIEJJVChpKSk7XG4rXHRcdFx0XHRrdm1fdmNwdV9raWNrKHZjcHUpO1xuK1x0XHRcdH1cbitcbitcdFx0XHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2aGdjdHJsLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdFx0fVxuIFxuLVx0XHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2aGdjdHJsLVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aGdjdHJsLVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdH0gZWxzZSB7XG4rXHRcdGhnY3RybC1cdTAwM2VzYXZlZF92YWx1ZSA9IGNzcl9yZWFkKENTUl9IR0VJRSk7XG4gXHR9XG4gXG4tXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZoZ2N0cmwtXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVxuIFx0cHV0X2NwdV9wdHIoXHUwMDI2YWlhX2hnZWkpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9tYWluLmMgYi9hcmNoL3Jpc2N2L2t2bS9tYWluLmNcbmluZGV4IDA5MjRjNzUxMDBhMmQwLi5iODQ2MWYxYTU2OWZhZSAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL21haW4uY1xuKysrIGIvYXJjaC9yaXNjdi9rdm0vbWFpbi5jXG5AQCAtMTAsNiArMTAsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vyci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rdm1faG9zdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY3B1X3BtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vY3B1ZmVhdHVyZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9tbXUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fbmFjbC5oXHUwMDNlXG5AQCAtMzMsMTQgKzM0LDkgQEAgbG9uZyBrdm1fYXJjaF9kZXZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4gXHRyZXR1cm4gLUVJTlZBTDtcbiB9XG4gXG4taW50IGt2bV9hcmNoX2VuYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUodm9pZClcbisvKiBJbml0aWFsaXplIGh5cGVydmlzb3IgQ1NScyAtIGNhbGxlZCBkdXJpbmcgQ1BVIG9ubGluZSBhbmQgbm9uLXJldGVudGlvbiBpZGxlIHJlc3VtZSAqL1xuK3N0YXRpYyB2b2lkIGt2bV9yaXNjdl9jc3JfZW5hYmxlKHZvaWQpXG4ge1xuLVx0aW50IHJjO1xuLVxuLVx0cmMgPSBrdm1fcmlzY3ZfbmFjbF9lbmFibGUoKTtcbi1cdGlmIChyYylcbi1cdFx0cmV0dXJuIHJjO1xuLVxuIFx0Y3NyX3dyaXRlKENTUl9IRURFTEVHLCAwKTtcbiBcdGNzcl93cml0ZShDU1JfSElERUxFRywgMCk7XG4gXG5AQCAtNDgsMTYgKzQ0LDExIEBAIGludCBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXG4gXHRjc3Jfd3JpdGUoQ1NSX0hDT1VOVEVSRU4sIDB4MDIpO1xuIFxuIFx0Y3NyX3dyaXRlKENTUl9IVklQLCAwKTtcbi1cbi1cdGt2bV9yaXNjdl9haWFfZW5hYmxlKCk7XG4tXG4tXHRyZXR1cm4gMDtcbiB9XG4gXG4tdm9pZCBrdm1fYXJjaF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKVxuKy8qIENsZWFyIGh5cGVydmlzb3IgQ1NScyAtIGNhbGxlZCBkdXJpbmcgQ1BVIG9mZmxpbmUgYW5kIG5vbi1yZXRlbnRpb24gaWRsZSBlbnRyeSAqL1xuK3N0YXRpYyB2b2lkIGt2bV9yaXNjdl9jc3JfZGlzYWJsZSh2b2lkKVxuIHtcbi1cdGt2bV9yaXNjdl9haWFfZGlzYWJsZSgpO1xuLVxuIFx0LypcbiBcdCAqIEFmdGVyIGNsZWFyaW5nIHRoZSBoaWRlbGVnIENTUiwgdGhlIGhvc3Qga2VybmVsIHdpbGwgcmVjZWl2ZVxuIFx0ICogc3B1cmlvdXMgaW50ZXJydXB0cyBpZiBodmlwIENTUiBoYXMgcGVuZGluZyBpbnRlcnJ1cHRzIGFuZCB0aGVcbkBAIC02OSw5ICs2MCw2MiBAQCB2b2lkIGt2bV9hcmNoX2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXG4gXHRjc3Jfd3JpdGUoQ1NSX0hFREVMRUcsIDApO1xuIFx0Y3NyX3dyaXRlKENTUl9ISURFTEVHLCAwKTtcbiBcbitcdGt2bV9yaXNjdl9jbGVhcl9mb3JtZXJfdmNwdSgpO1xuK31cbitcbitpbnQga3ZtX2FyY2hfZW5hYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKVxuK3tcbitcdGludCByYztcbitcbitcdHJjID0ga3ZtX3Jpc2N2X25hY2xfZW5hYmxlKCk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdGt2bV9yaXNjdl9jc3JfZW5hYmxlKCk7XG4rXHRrdm1fcmlzY3ZfYWlhX2VuYWJsZSh0cnVlKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbit2b2lkIGt2bV9hcmNoX2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXG4re1xuK1x0a3ZtX3Jpc2N2X2FpYV9kaXNhYmxlKHRydWUpO1xuK1x0a3ZtX3Jpc2N2X2Nzcl9kaXNhYmxlKCk7XG4gXHRrdm1fcmlzY3ZfbmFjbF9kaXNhYmxlKCk7XG4gfVxuIFxuK3N0YXRpYyBpbnQga3ZtX3Jpc2N2X2NwdV9wbV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsIHVuc2lnbmVkIGxvbmcgY21kLCB2b2lkICp2KVxuK3tcbitcdC8qXG4rXHQgKiBUbyBhdm9pZCByZWR1bmRhbnQgZGlzYWJsZS9lbmFibGUgb3BlcmF0aW9ucyAoc2luY2UgS1ZNJ3NcbitcdCAqIHN5c2NvcmUgb3BzIHdpbGwgaGFuZGxlIHRoZSBzdGF0ZSBkdXJpbmcgc3lzdGVtIHN1c3BlbmQpLFxuK1x0ICogaWdub3JlIENQVV9QTSBldmVudHMgd2hlbiBhIHN5c3RlbSBzdXNwZW5kL3Jlc3VtZSBpcyBpblxuK1x0ICogcHJvZ3Jlc3MuXG4rXHQgKi9cbitcdGlmIChzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX1NVU1BFTkQpXG4rXHRcdHJldHVybiBOT1RJRllfRE9ORTtcbitcbitcdHN3aXRjaCAoY21kKSB7XG4rXHRjYXNlIENQVV9QTV9FWElUOlxuK1x0Y2FzZSBDUFVfUE1fRU5URVJfRkFJTEVEOlxuK1x0XHRrdm1fcmlzY3ZfY3NyX2VuYWJsZSgpO1xuK1x0XHRrdm1fcmlzY3ZfYWlhX2VuYWJsZShmYWxzZSk7XG4rXHRcdHJldHVybiBOT1RJRllfT0s7XG4rXHRjYXNlIENQVV9QTV9FTlRFUjpcbitcdFx0a3ZtX3Jpc2N2X2FpYV9kaXNhYmxlKGZhbHNlKTtcbitcdFx0a3ZtX3Jpc2N2X2Nzcl9kaXNhYmxlKCk7XG4rXHRcdHJldHVybiBOT1RJRllfT0s7XG4rXHRkZWZhdWx0OlxuK1x0XHRicmVhaztcbitcdH1cbitcbitcdHJldHVybiBOT1RJRllfRE9ORTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBrdm1fcmlzY3ZfY3B1X3BtX25iID0ge1xuK1x0Lm5vdGlmaWVyX2NhbGwgPSBrdm1fcmlzY3ZfY3B1X3BtX25vdGlmaWVyLFxuK307XG4rXG4gc3RhdGljIHZvaWQga3ZtX3Jpc2N2X3RlYXJkb3duKHZvaWQpXG4ge1xuIFx0a3ZtX3Jpc2N2X2FpYV9leGl0KCk7XG5AQCAtMTcyLDIyICsyMTYsNDAgQEAgc3RhdGljIGludCBfX2luaXQgcmlzY3Zfa3ZtX2luaXQodm9pZClcbiBcbiBcdGt2bV9yZWdpc3Rlcl9wZXJmX2NhbGxiYWNrcygpO1xuIFxuLVx0cmMgPSBrdm1faW5pdChzaXplb2Yoc3RydWN0IGt2bV92Y3B1KSwgMCwgVEhJU19NT0RVTEUpO1xuLVx0aWYgKHJjKSB7XG4tXHRcdGt2bV9yaXNjdl90ZWFyZG93bigpO1xuLVx0XHRyZXR1cm4gcmM7XG4rXHQvKiBSZWdpc3RlciBDUFUgUE0gbm90aWZpZXIgZm9yIENQVSBpZGxlIG5vbi1yZXRlbnRpb24gc3RhdGVzICovXG4rXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQ1BVX1BNKSkge1xuK1x0XHRyYyA9IGNwdV9wbV9yZWdpc3Rlcl9ub3RpZmllcihcdTAwMjZrdm1fcmlzY3ZfY3B1X3BtX25iKTtcbitcdFx0aWYgKHJjKSB7XG4rXHRcdFx0a3ZtX2VycihcIkZhaWxlZCB0byByZWdpc3RlciBDUFUgUE0gbm90aWZpZXI6ICVkXFxuXCIsIHJjKTtcbitcdFx0XHRnb3RvIGVycl90ZWFyZG93bjtcbitcdFx0fVxuIFx0fVxuIFxuK1x0cmMgPSBrdm1faW5pdChzaXplb2Yoc3RydWN0IGt2bV92Y3B1KSwgMCwgVEhJU19NT0RVTEUpO1xuK1x0aWYgKHJjKVxuK1x0XHRnb3RvIGVycl91bnJlZ2lzdGVyX2NwdV9wbTtcbitcbiBcdGlmIChrdm1fcmlzY3ZfYWlhX2F2YWlsYWJsZSgpKVxuIFx0XHRrdm1faW5mbyhcIkFJQSBhdmFpbGFibGUgd2l0aCAlZCBndWVzdCBleHRlcm5hbCBpbnRlcnJ1cHRzXFxuXCIsXG4gXHRcdFx0IGF0b21pY19yZWFkKFx1MDAyNmt2bV9yaXNjdl9haWFfbnJfaGdlaSkpO1xuIFxuIFx0cmV0dXJuIDA7XG4rXG4rZXJyX3VucmVnaXN0ZXJfY3B1X3BtOlxuK1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX0NQVV9QTSkpXG4rXHRcdGNwdV9wbV91bnJlZ2lzdGVyX25vdGlmaWVyKFx1MDAyNmt2bV9yaXNjdl9jcHVfcG1fbmIpO1xuK2Vycl90ZWFyZG93bjpcbitcdGt2bV9yaXNjdl90ZWFyZG93bigpO1xuK1x0cmV0dXJuIHJjO1xuIH1cbiBtb2R1bGVfaW5pdChyaXNjdl9rdm1faW5pdCk7XG4gXG4gc3RhdGljIHZvaWQgX19leGl0IHJpc2N2X2t2bV9leGl0KHZvaWQpXG4ge1xuK1x0LyogVW5yZWdpc3RlciBDUFUgUE0gbm90aWZpZXIgKi9cbitcdGlmIChJU19FTkFCTEVEKENPTkZJR19DUFVfUE0pKVxuK1x0XHRjcHVfcG1fdW5yZWdpc3Rlcl9ub3RpZmllcihcdTAwMjZrdm1fcmlzY3ZfY3B1X3BtX25iKTtcbitcbiBcdGt2bV9leGl0KCk7XG4gXG4gXHRrdm1fcmlzY3ZfdGVhcmRvd24oKTtcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS92Y3B1LmMgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1LmNcbmluZGV4IGNmNmUyMzFlNzZlMjU0Li5lNDgzMzhmOTA3ZjQ4OCAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHUuY1xuKysrIGIvYXJjaC9yaXNjdi9rdm0vdmNwdS5jXG5AQCAtMjYsNiArMjYsMTcgQEBcbiBcbiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGt2bV92Y3B1ICosIGt2bV9mb3JtZXJfdmNwdSk7XG4gXG4rdm9pZCBrdm1fcmlzY3ZfY2xlYXJfZm9ybWVyX3ZjcHUodm9pZClcbit7XG4rXHQvKlxuK1x0ICogQ2xlYXIgdGhlIHBlci1DUFUgZm9ybWVyIFZDUFUgcG9pbnRlciBiZWNhdXNlIGh5cGVydmlzb3IgQ1NSIHN0YXRlXG4rXHQgKiB3aWxsIGJlIGxvc3QuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBuZXh0IFZDUFUgZW50cnkgd2lsbCBwcm9wZXJseVxuK1x0ICogcmVzdG9yZSBhbGwgQ1NScyBpbnN0ZWFkIG9mIGluY29ycmVjdGx5IHNraXBwaW5nIENTUiByZXN0b3JhdGlvblxuK1x0ICogdmlhIHRoZSBmYXN0LXBhdGggb3B0aW1pemF0aW9uLlxuK1x0ICovXG4rXHRfX3RoaXNfY3B1X3dyaXRlKGt2bV9mb3JtZXJfdmNwdSwgTlVMTCk7XG4rfVxuK1xuIGNvbnN0IHN0cnVjdCBrdm1fc3RhdHNfZGVzYyBrdm1fdmNwdV9zdGF0c19kZXNjW10gPSB7XG4gXHRLVk1fR0VORVJJQ19WQ1BVX1NUQVRTKCksXG4gXHRTVEFUU19ERVNDX0NPVU5URVIoVkNQVSwgZWNhbGxfZXhpdF9zdGF0KSxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIyOjQ0OjMxLjk2NzA3OTkxNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNDcxMjE0NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUklTQy1WIEtWTSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIFJJU0MtViBLVk0gY29kZS4gSXQncyBtYWtpbmcgc29tZSBrZXkgY2hhbmdlcywgc3BlY2lmaWNhbGx5IHRvIGBrdm1fcmlzY3ZfYWlhX2VuYWJsZWAgYW5kIGBrdm1fcmlzY3ZfYWlhX2Rpc2FibGVgLiAgSW50ZXJlc3RpbmcsIHRoZXkndmUgYWRkZWQgYSBgZnVsbF9jbGVhbnVwYCBib29sZWFuIGFyZ3VtZW50IHRvIHRoZXNlIGZ1bmN0aW9ucy4gIFRoYXQgc3VnZ2VzdHMgYSBtb3JlIGNvbXByZWhlbnNpdmUgY2xlYW51cCByb3V0aW5lIGlzIG5vdyBwb3NzaWJsZS4gIEFuZCwgdGhlcmUncyBhIG5ldyBub3RpZmllciwgYGt2bV9yaXNjdl9jcHVfcG1fbm90aWZpZXJgLCB3aGljaCBoYW5kbGVzIENQVSBwb3dlciBtYW5hZ2VtZW50IGV2ZW50cy4gIFRoYXQncyBpbXBvcnRhbnQuIEkgc2VlIHRoZXkndmUgYWxzbyBhZGRlZCBga3ZtX3Jpc2N2X2NsZWFyX2Zvcm1lcl92Y3B1YCwgd2hpY2ggY2xlYXJzIGBrdm1fZm9ybWVyX3ZjcHVgLCBhIHBlci1DUFUgdmFyaWFibGUuXG5cbk15IGZpcnN0IHRob3VnaHQgaXMsIGlzIHRoaXMgZnVuY3Rpb25hbGl0eSBldmVuICpyZWFjaGFibGUqIGFuZCBkb2VzIGl0ICpmdW5jdGlvbio/IEdpdmVuIHRoZSBjaGFuZ2VzLCBpdCBzZWVtcyBjbGVhciB0aGlzIGlzIGZ1bmN0aW9uYWwgYW5kIGNhbiBiZSByZWFjaGVkLiBTcGVjaWZpY2FsbHksIHRoaXMgaXMgYSBtb2RpZmljYXRpb24gdG8gS1ZNIG9uIFJJU0MtViBhbmQgZGVwZW5kcyBvbiBDUFUgUE0gaW50ZWdyYXRpb24gd2l0aCBLVk0uICBUaGVyZWZvcmUsIGl0J3MgZGVmaW5pdGVseSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgKmlmKiBLVk0gYW5kIENQVV9QTSBhcmUgZW5hYmxlZCBvbiBSSVNDLVYuIFRoYXQncyB0aGUga2V5LlxuXG5TbywgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWdzLiAgSSBpbW1lZGlhdGVseSB0aGluaywgSSdsbCBuZWVkIGBDT05GSUdfS1ZNYCBhbmQgYENPTkZJR19DUFVfUE1gIHRvIGJlIHNldC4gIFRoZW4sIEkgbmVlZCB0byBjaGVjayBgYXJjaC9yaXNjdi9rdm0vS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgKnNwZWNpZmljKiBSSVNDLVYgS1ZNIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gdGhpcyBuZXcgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzAwNSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIyOjQ0OjM3LjIxNDIwNDMyMVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTAxMTQ5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3Yva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMTktXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy0yMS1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMjo0NDozNy4yNzUyMjQ1NDVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTcxNDIzMDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgS1ZNIFBvd2VyIE1hbmFnZW1lbnQgb24gUklTQy1WKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgYXJjaC9yaXNjdi9rdm0vbWFpbi5jYC4gVGhlIGZhY3QgdGhhdCBgQ09ORklHX0NQVV9QTWAgaXMgb24gbXkgcmFkYXIgc3VnZ2VzdHMgd2UncmUgbGlrZWx5IGludGVyZXN0ZWQgaW4gdGhlIHBvd2VyIG1hbmFnZW1lbnQgYXNwZWN0cyBvZiBLVk0gd2l0aGluIHRoZSBSSVNDLVYgYXJjaGl0ZWN0dXJlLiBHaXZlbiB0aGF0IHdlIGFyZSBmb2N1c2luZyBvbiBwb3dlciBtYW5hZ2VtZW50LCBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIHRyYW5zaXRpb25zIHRvIGFuZCBmcm9tIGxvdy1wb3dlciBzdGF0ZXMgYXQgdGhlIENQVSBsZXZlbCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgaHlwZXJ2aXNvciBpbnRlcmFjdHMgd2l0aCB0aGUgZ3Vlc3QncyBwb3dlciBtYW5hZ2VtZW50IHJlcXVlc3RzIGFuZCB0aGUgdW5kZXJseWluZyBSSVNDLVYgaGFyZHdhcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY29kZSBoYW5kbGVzIHRoZSBzdGF0ZSBvZiB0aGUgdkNQVSBjb250ZXh0LCBhbmQgc2VlIGhvdyB0aGUgc2NoZWR1bGluZyBhbmQgaW50ZXJydXB0IGhhbmRsaW5nIHdvcmsgaW4gcmVsYXRpb24gdG8gcG93ZXIgbWFuYWdlbWVudC4gSSdsbCBiZSBsb29raW5nIGZvciBzcGVjaWZpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byBDUFUgaG90cGx1ZywgaWRsZSBoYW5kbGluZywgYW5kIGFueSBzcGVjaWZpYyBSSVNDLVYgZmVhdHVyZXMgbGV2ZXJhZ2VkIGZvciBwb3dlciBzYXZpbmdzIChlLmcuLCBzcGVjaWZpYyBDU1JzLCBleHRlbnNpb25zKS4gTGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3RpbmcgbnVhbmNlcyBvciBvcHRpbWl6YXRpb25zIHRoYXQgc3RhbmQgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Njk4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjI6NDQ6NDAuNDQ2NjUwNTFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc5MzkwNzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0NQVV9QTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L2t2bS9tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9rdm0vbWFpbi5jPTEyNj1zdGF0aWMgaW50IF9faW5pdCByaXNjdl9rdm1faW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vbWFpbi5jLTIxOS1cXHQvKiBSZWdpc3RlciBDUFUgUE0gbm90aWZpZXIgZm9yIENQVSBpZGxlIG5vbi1yZXRlbnRpb24gc3RhdGVzICovXFxuYXJjaC9yaXNjdi9rdm0vbWFpbi5jOjIyMDpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQ1BVX1BNKSkge1xcbmFyY2gvcmlzY3Yva3ZtL21haW4uYy0yMjEtXFx0XFx0cmMgPSBjcHVfcG1fcmVnaXN0ZXJfbm90aWZpZXIoXFx1MDAyNmt2bV9yaXNjdl9jcHVfcG1fbmIpO1xcbi0tXFxuYXJjaC9yaXNjdi9rdm0vbWFpbi5jLTIzOC1lcnJfdW5yZWdpc3Rlcl9jcHVfcG06XFxuYXJjaC9yaXNjdi9rdm0vbWFpbi5jOjIzOTpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQ1BVX1BNKSlcXG5hcmNoL3Jpc2N2L2t2bS9tYWluLmMtMjQwLVxcdFxcdGNwdV9wbV91bnJlZ2lzdGVyX25vdGlmaWVyKFxcdTAwMjZrdm1fcmlzY3ZfY3B1X3BtX25iKTtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL21haW4uYz0yNDc9c3RhdGljIHZvaWQgX19leGl0IHJpc2N2X2t2bV9leGl0KHZvaWQpXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tYWluLmMtMjQ5LVxcdC8qIFVucmVnaXN0ZXIgQ1BVIFBNIG5vdGlmaWVyICovXFxuYXJjaC9yaXNjdi9rdm0vbWFpbi5jOjI1MDpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQ1BVX1BNKSlcXG5hcmNoL3Jpc2N2L2t2bS9tYWluLmMtMjUxLVxcdFxcdGNwdV9wbV91bnJlZ2lzdGVyX25vdGlmaWVyKFxcdTAwMjZrdm1fcmlzY3ZfY3B1X3BtX25iKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjI6NDQ6NDAuNTE0NTk4OTQ0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ4MzIxMDc1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNL1JJU0MtViBQb3dlciBNYW5hZ2VtZW50IEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBLVk0gcGF0Y2ggZm9yIFJJU0MtViwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyBpdCBoYW5kbGVzIHBvd2VyIG1hbmFnZW1lbnQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGEgZmV3IGtleSBmdW5jdGlvbnMuICBJIHNlZSBgS1ZNYCBhbmQgYENQVV9QTWAgYXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBmbGFncyBpbnZvbHZlZC4gTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gIEkndmUgZ290IGBrdm1fcmlzY3ZfY3B1X3BtX25vdGlmaWVyYCwgYGt2bV9yaXNjdl9haWFfZW5hYmxlYCwgYGt2bV9yaXNjdl9haWFfZGlzYWJsZWAsIGBrdm1fcmlzY3ZfY2xlYXJfZm9ybWVyX3ZjcHVgLCBga3ZtX2FyY2hfZW5hYmxlX3ZpcnR1YWxpemF0aW9uX2NwdWAsIGFuZCBga3ZtX2FyY2hfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHVgIG9uIG15IHJhZGFyLlxuXG5GaXJzdCwgbGV0J3MgcXVpY2tseSBjaGVjayB0aGUgc2NvcGUgb2YgYGt2bV9yaXNjdl9jcHVfcG1fbm90aWZpZXJgLiBZdXAsIGl0J3Mgc3RhdGljLCB3aGljaCBJJ2xsIGtlZXAgaW4gbWluZCBmb3IgaG93IGl0J3MgdXNlZC4gVGhlbiBJIHNlZSB0aGF0IGBrdm1fcmlzY3ZfYWlhX2VuYWJsZWAgYW5kIGBrdm1fcmlzY3ZfYWlhX2Rpc2FibGVgIGFyZSBleHBvcnRlZCBvciBub24tc3RhdGljLiBGaW5hbGx5LCBga3ZtX3Jpc2N2X2NsZWFyX2Zvcm1lcl92Y3B1YCBpcyBub24tc3RhdGljIGFzIHdlbGwuXG5cblNvLCBoZXJlJ3MgdGhlIGRpc3RpbGxlZCBsaXN0IG9mIHN5bWJvbHMgSSBuZWVkIHRvIHVuZGVyc3RhbmQ6IGBrdm1fcmlzY3ZfY3B1X3BtX25vdGlmaWVyYCwgYGt2bV9yaXNjdl9haWFfZW5hYmxlYCwgYGt2bV9yaXNjdl9haWFfZGlzYWJsZWAsIGBrdm1fcmlzY3ZfY2xlYXJfZm9ybWVyX3ZjcHVgLCBga3ZtX2FyY2hfZW5hYmxlX3ZpcnR1YWxpemF0aW9uX2NwdWAsIGFuZCBga3ZtX2FyY2hfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHVgLiBUaGVzZSBhcmUgdGhlIGNvcmUgZWxlbWVudHMuXG5cblJpZ2h0LCBhbnl0aGluZyBlbHNlPyAgVGhlIHBhdGNoIGFmZmVjdHMgYGFyY2gvcmlzY3Yva3ZtL2FpYS5jYCwgYGFyY2gvcmlzY3Yva3ZtL21haW4uY2AsIGFuZCBgYXJjaC9yaXNjdi9rdm0vdmNwdS5jYC4gVGhhdCBnaXZlcyBtZSBhIHJvYWRtYXAgb2Ygd2hpY2ggZmlsZXMgdG8gY2hlY2sgZm9yIGNvbnRleHQuXG5cbk5vdywgbGV0J3Mgc2VlIGhvdyBgQ1BVX1BNYCBpcyBjb25maWd1cmVkLiBJcyB0aGlzIGEgdXNlci1zZXR0YWJsZSBvcHRpb24sIG9yIGlzIGl0IGltcGxpY2l0bHkgc2VsZWN0ZWQgYmFzZWQgb24gb3RoZXIgc2V0dGluZ3M/ICBUaGlzIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgcG93ZXIgbWFuYWdlbWVudCBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Mzc2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIyOjQ0OjQ2Ljk5NzgxMzE0MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI4MTI0MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENQVV9QTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvcG93ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvcG93ZXIvS2NvbmZpZz0zODU9Y29uZmlnIFBNX0dFTkVSSUNfRE9NQUlOU19PRlxcbi0tXFxua2VybmVsL3Bvd2VyL0tjb25maWctMzg4LVxcbmtlcm5lbC9wb3dlci9LY29uZmlnOjM4OTpjb25maWcgQ1BVX1BNXFxua2VybmVsL3Bvd2VyL0tjb25maWctMzkwLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjI6NDQ6NDcuMTEwNjY1OTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDkzMjA4MzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJvbSBteSBwZXJzcGVjdGl2ZTpcblxuKipUaGlua2luZyBUaHJvdWdoIENQVSBQb3dlciBNYW5hZ2VtZW50KipcblxuT2theSwgc28gYENQVV9QTWAgaXMgYSBoaWRkZW4gZmxhZywgYSBib29sZWFuIGRlZXAgaW4gdGhlIGtlcm5lbCwgbGlrZWx5IGx1cmtpbmcgaW4gdGhlIHNoYWRvd3Mgb2YgdGhlIHBvd2VyIG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBNeSBndXQgZmVlbGluZywgYmFzZWQgb24gaG93IHRoZXNlIHRoaW5ncyB1c3VhbGx5IHdvcmssIGlzIHRoYXQgaXQncyBwcm9iYWJseSBnZXR0aW5nIHNldCDigJMgZW5hYmxlZCBvciBkaXNhYmxlZCDigJMgZG93bnN0cmVhbSwgcGVyaGFwcyB0cmlnZ2VyZWQgYnkgdGhlIGJyb2FkZXIgc3lzdGVtJ3Mgc3RhdGUuIEl0J3MgYWxtb3N0IGNlcnRhaW5seSBwdWxsZWQgaW4gYXMgYSBkZXBlbmRlbmN5IGJ5IGNvbmZpZ3VyYXRpb25zIGxpa2UgYFNVU1BFTkRgIG9yIGBDUFVfSURMRWAuIFRoaW5raW5nIGFib3V0IHRoZSBjb250cm9sIGZsb3csIEknZCBiZXQgZW5hYmxpbmcgZWl0aGVyIG9mIHRob3NlIHR3byB3b3VsZCB1bHRpbWF0ZWx5IGZsaXAgdGhlIGBDUFVfUE1gIHN3aXRjaC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMgdG8gYmUgc3VyZSwgYnV0IHRoYXQncyBteSBpbml0aWFsIGh5cG90aGVzaXMuIExldCdzIHNlZSBpZiB0aGUgY29kZSBjb25maXJtcyBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTMxOSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIyOjQ0OjUwLjIwMzg3NzkxM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyNDE0MTkxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgQ1BVX1BNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybS9LY29uZmlnPTI9Y29uZmlnIEFSTVxcbi0tXFxuYXJjaC9hcm0vS2NvbmZpZy01OC1cXHRzZWxlY3QgQ0xPTkVfQkFDS1dBUkRTXFxuYXJjaC9hcm0vS2NvbmZpZzo1OTpcXHRzZWxlY3QgQ1BVX1BNIGlmIFNVU1BFTkQgfHwgQ1BVX0lETEVcXG5hcmNoL2FybS9LY29uZmlnLTYwLVxcdHNlbGVjdCBEQ0FDSEVfV09SRF9BQ0NFU1MgaWYgSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTU1xcbi0tXFxuYXJjaC9hcm0vS2NvbmZpZz05OTQ9Y29uZmlnIEJMX1NXSVRDSEVSXFxuLS1cXG5hcmNoL2FybS9LY29uZmlnLTk5Ni1cXHRkZXBlbmRzIG9uIEJJR19MSVRUTEUgXFx1MDAyNlxcdTAwMjYgTUNQTSBcXHUwMDI2XFx1MDAyNiBIT1RQTFVHX0NQVSBcXHUwMDI2XFx1MDAyNiBBUk1fR0lDXFxuYXJjaC9hcm0vS2NvbmZpZzo5OTc6XFx0c2VsZWN0IENQVV9QTVxcbmFyY2gvYXJtL0tjb25maWctOTk4LVxcdGhlbHBcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZz0yPWNvbmZpZyBBUk02NFxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnLTExMS1cXHRzZWxlY3QgQ09NTU9OX0NMS1xcbmFyY2gvYXJtNjQvS2NvbmZpZzoxMTI6XFx0c2VsZWN0IENQVV9QTSBpZiAoU1VTUEVORCB8fCBDUFVfSURMRSlcXG5hcmNoL2FybTY0L0tjb25maWctMTEzLVxcdHNlbGVjdCBDUFVNQVNLX09GRlNUQUNLIGlmIE5SX0NQVVMgXFx1MDAzZSAyNTZcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc9Mj1jb25maWcgTE9PTkdBUkNIXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTg3LVxcdHNlbGVjdCBDT01NT05fQ0xLXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZzo4ODpcXHRzZWxlY3QgQ1BVX1BNXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy04OS1cXHRzZWxlY3QgRURBQ19TVVBQT1JUXFxuLS1cXG5hcmNoL21pcHMvS2NvbmZpZz0yPWNvbmZpZyBNSVBTXFxuLS1cXG5hcmNoL21pcHMvS2NvbmZpZy0zNS1cXHRzZWxlY3QgQ1BVX05PX0VGRklDSUVOVF9GRlMgaWYgKFRBUkdFVF9JU0FfUkVWIFxcdTAwM2MgMSlcXG5hcmNoL21pcHMvS2NvbmZpZzozNjpcXHRzZWxlY3QgQ1BVX1BNIGlmIENQVV9JRExFIHx8IFNVU1BFTkRcXG5hcmNoL21pcHMvS2NvbmZpZy0zNy1cXHRzZWxlY3QgR0VORVJJQ19BVE9NSUM2NCBpZiAhNjRCSVRcXG4tLVxcbmFyY2gvcmlzY3YvS2NvbmZpZz0xMz1jb25maWcgUklTQ1ZcXG4tLVxcbmFyY2gvcmlzY3YvS2NvbmZpZy05OC1cXHRzZWxlY3QgQ1BVX05PX0VGRklDSUVOVF9GRlMgaWYgIVJJU0NWX0lTQV9aQkJcXG5hcmNoL3Jpc2N2L0tjb25maWc6OTk6XFx0c2VsZWN0IENQVV9QTSBpZiBDUFVfSURMRSB8fCBISUJFUk5BVElPTiB8fCBTVVNQRU5EXFxuYXJjaC9yaXNjdi9LY29uZmlnLTEwMC1cXHRzZWxlY3QgRFlOQU1JQ19GVFJBQ0UgaWYgRlVOQ1RJT05fVFJBQ0VSXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIyOjQ0OjUyLjYyODAzMDA2MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDM3ODE5MTAxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUklTQy1WIEtWTSBhbmQgQ1BVIFBvd2VyIE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBgQ1BVX0lETEVgLCBgU1VTUEVORGAsIG9yIGBISUJFUk5BVElPTmAgb3B0aW9ucyByZWxhdGUgdG8gYENQVV9QTWAgb24gUklTQy1WLiBJdCBzZWVtcyBsaWtlIHNlbGVjdGluZyBhbnkgb2YgdGhlIGZvcm1lciBhdXRvbWF0aWNhbGx5IGltcGxpZXMgdGhlIGxhdHRlciwgd2hpY2ggaXMgZ3JlYXQuIEkgY2FuIGp1c3QgZXhwbGljaXRseSBzZXQgYENQVV9JRExFYCBhbmQgYFNVU1BFTkRgIGluIHRoZSBjb25maWd1cmF0aW9uLiBTeXprYWxsZXIsIHdpdGggaXRzIGRlcGVuZGVuY3kgcmVzb2x1dGlvbiBjYXBhYmlsaXRpZXMsIHNob3VsZCBiZSBhYmxlIHRvIGhhbmRsZSB0aGUgdW5kZXJseWluZyBkZXBlbmRlbmNpZXMsIGV2ZW4gaWYgYENQVV9QTWAgaXRzZWxmIGlzIGhpZGRlbi4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncy5cblxuU28sIHRoZSBrZXkgY29uZmlncyBJJ20gZGVhbGluZyB3aXRoIGFyZSBgS1ZNYCwgYENQVV9JRExFYCwgYW5kIGBTVVNQRU5EYC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGZvY3VzIHN5bWJvbHMuIEkndmUgZ290IHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSB0ZXN0aW5nIHRoZSBmb2N1cyBzeW1ib2xzOiBga3ZtX3Jpc2N2X2NwdV9wbV9ub3RpZmllcmAsIGBrdm1fcmlzY3ZfYWlhX2VuYWJsZWAsIGBrdm1fcmlzY3ZfYWlhX2Rpc2FibGVgLCBga3ZtX3Jpc2N2X2NsZWFyX2Zvcm1lcl92Y3B1YCwgYGt2bV9hcmNoX2VuYWJsZV92aXJ0dWFsaXphdGlvbl9jcHVgLCBhbmQgYGt2bV9hcmNoX2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1YC5cblxuT2gsIGFuZCB0aGVyZSBhcmUgc29tZSBvdGhlciBmdW5jdGlvbnMgdGhhdCBhcmUgYWxzbyByZWxldmFudDogYGt2bV9yaXNjdl9jc3JfZW5hYmxlYCBhbmQgYGt2bV9yaXNjdl9jc3JfZGlzYWJsZWAuIEkgc2hvdWxkIGRlZmluaXRlbHkgaW5jbHVkZSB0aG9zZSBpbiB0aGUgZnV6emluZyBzY29wZS5cblxuQSBxdWljayBjaGVjayBjb25maXJtcyB0aGF0IGBrdm1fcmlzY3ZfY3NyX2VuYWJsZWAgYW5kIGBrdm1fcmlzY3ZfY3NyX2Rpc2FibGVgIGFyZSBib3RoIHN0YXRpYywgd2hpY2ggbWVhbnMgdGhleSBhcmUgb25seSB2aXNpYmxlIHdpdGhpbiB0aGVpciByZXNwZWN0aXZlIHNvdXJjZSBmaWxlcy4gSSdsbCBhZGQgdGhlbSB0byBteSBmb2N1cyBzeW1ib2xzLlxuXG5TbywgbXkgZmluYWwgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIGlzOlxuYGt2bV9yaXNjdl9jcHVfcG1fbm90aWZpZXJgXG5ga3ZtX3Jpc2N2X2FpYV9lbmFibGVgXG5ga3ZtX3Jpc2N2X2FpYV9kaXNhYmxlYFxuYGt2bV9yaXNjdl9jbGVhcl9mb3JtZXJfdmNwdWBcbmBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1YFxuYGt2bV9hcmNoX2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1YFxuYGt2bV9yaXNjdl9jc3JfZW5hYmxlYFxuYGt2bV9yaXNjdl9jc3JfZGlzYWJsZWBcblxuQWxyaWdodCwgdGhlIHBhdGNoIG1vZGlmaWVzIFJJU0MtViBLVk0gdG8gbWFuYWdlIENQVSBwb3dlciBldmVudHMgZm9yIHRob3NlIG5vbi1yZXRlbnRpb24gaWRsZSBzdGF0ZXMuIFRoaXMgaW52b2x2ZXMgYSBDUFUgUE0gbm90aWZpZXIgYW5kIG1vZGlmaWNhdGlvbnMgdG8gQUlBIGVuYWJsZS9kaXNhYmxlIHBhdGhzIHRvIHN1cHBvcnQgdGhpcyBDU1Igc2F2ZS9yZXN0b3JlIG1lY2hhbmlzbS4gVGhpcyBpcyBhIGNvcmUgS1ZNIGNoYW5nZSwgYW5kIGl0J3MgYWJzb2x1dGVseSBjcml0aWNhbCB0byBmdXp6IHRoaXMgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIHZpcnR1YWxpemF0aW9uIG9yIHBvd2VyIG1hbmFnZW1lbnQuXG5cblRpbWUgdG8gY2FsbCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxMTEsIk91dHB1dFRva2VucyI6MjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIyOjQ1OjAzLjAwNjIyNzMyNFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0Nzc3MzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIkNQVV9JRExFXCIsXG4gICAgXCJTVVNQRU5EXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3Jpc2N2X2NwdV9wbV9ub3RpZmllclwiLFxuICAgIFwia3ZtX3Jpc2N2X2FpYV9lbmFibGVcIixcbiAgICBcImt2bV9yaXNjdl9haWFfZGlzYWJsZVwiLFxuICAgIFwia3ZtX3Jpc2N2X2NsZWFyX2Zvcm1lcl92Y3B1XCIsXG4gICAgXCJrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1XCIsXG4gICAgXCJrdm1fYXJjaF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdVwiLFxuICAgIFwia3ZtX3Jpc2N2X2Nzcl9lbmFibGVcIixcbiAgICBcImt2bV9yaXNjdl9jc3JfZGlzYWJsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhpcyBwYXRjaCBtb2RpZmllcyBSSVNDLVYgS1ZNIHRvIGhhbmRsZSBDUFUgcG93ZXIgbWFuYWdlbWVudCBldmVudHMgKENQVV9QTSkgZm9yIG5vbi1yZXRlbnRpb24gaWRsZSBzdGF0ZXMuIEl0IGludHJvZHVjZXMgYSBDUFUgUE0gbm90aWZpZXIgYW5kIG1vZGlmaWVzIEFJQSAoQWR2YW5jZWQgSW50ZXJydXB0IEFyY2hpdGVjdHVyZSkgZW5hYmxlL2Rpc2FibGUgcGF0aHMgdG8gc3VwcG9ydCBsaWdodHdlaWdodCBDU1Igc2F2ZS9yZXN0b3JlLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgS1ZNIGxvZ2ljIG9uIFJJU0MtViBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gdmlydHVhbGl6YXRpb24gb3IgcG93ZXIgbWFuYWdlbWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIkNQVV9JRExFXCIsXG4gICAgXCJTVVNQRU5EXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3Jpc2N2X2NwdV9wbV9ub3RpZmllclwiLFxuICAgIFwia3ZtX3Jpc2N2X2FpYV9lbmFibGVcIixcbiAgICBcImt2bV9yaXNjdl9haWFfZGlzYWJsZVwiLFxuICAgIFwia3ZtX3Jpc2N2X2NsZWFyX2Zvcm1lcl92Y3B1XCIsXG4gICAgXCJrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1XCIsXG4gICAgXCJrdm1fYXJjaF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdVwiLFxuICAgIFwia3ZtX3Jpc2N2X2Nzcl9lbmFibGVcIixcbiAgICBcImt2bV9yaXNjdl9jc3JfZGlzYWJsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhpcyBwYXRjaCBtb2RpZmllcyBSSVNDLVYgS1ZNIHRvIGhhbmRsZSBDUFUgcG93ZXIgbWFuYWdlbWVudCBldmVudHMgKENQVV9QTSkgZm9yIG5vbi1yZXRlbnRpb24gaWRsZSBzdGF0ZXMuIEl0IGludHJvZHVjZXMgYSBDUFUgUE0gbm90aWZpZXIgYW5kIG1vZGlmaWVzIEFJQSAoQWR2YW5jZWQgSW50ZXJydXB0IEFyY2hpdGVjdHVyZSkgZW5hYmxlL2Rpc2FibGUgcGF0aHMgdG8gc3VwcG9ydCBsaWdodHdlaWdodCBDU1Igc2F2ZS9yZXN0b3JlLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgS1ZNIGxvZ2ljIG9uIFJJU0MtViBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gdmlydHVhbGl6YXRpb24gb3IgcG93ZXIgbWFuYWdlbWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxmvmk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-26 22:37:48 +0000 UTC FinishedAt: 2026-06-26 22:45:04 +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": "52738352a6f29279e15285fcb7b50241ef867e27", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "CPU_IDLE", "SUSPEND" ], "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": "52738352a6f29279e15285fcb7b50241ef867e27", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "CPU_IDLE", "SUSPEND" ], "series_id": "e0a55055-7268-4630-9cbf-b7bb204ef912" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_riscv_cpu_pm_notifier", "kvm_riscv_aia_enable", "kvm_riscv_aia_disable", "kvm_riscv_clear_former_vcpu", "kvm_arch_enable_virtualization_cpu", "kvm_arch_disable_virtualization_cpu", "kvm_riscv_csr_enable", "kvm_riscv_csr_disable" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIyOjQ0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtDUFVfSURMRSYjMzQ7LAogICAgJiMzNDtTVVNQRU5EJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3Jpc2N2X2NwdV9wbV9ub3RpZmllciYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfYWlhX2VuYWJsZSYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfYWlhX2Rpc2FibGUmIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X2NsZWFyX2Zvcm1lcl92Y3B1JiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX2VuYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUmIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X2Nzcl9lbmFibGUmIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X2Nzcl9kaXNhYmxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhpcyBwYXRjaCBtb2RpZmllcyBSSVNDLVYgS1ZNIHRvIGhhbmRsZSBDUFUgcG93ZXIgbWFuYWdlbWVudCBldmVudHMgKENQVV9QTSkgZm9yIG5vbi1yZXRlbnRpb24gaWRsZSBzdGF0ZXMuIEl0IGludHJvZHVjZXMgYSBDUFUgUE0gbm90aWZpZXIgYW5kIG1vZGlmaWVzIEFJQSAoQWR2YW5jZWQgSW50ZXJydXB0IEFyY2hpdGVjdHVyZSkgZW5hYmxlL2Rpc2FibGUgcGF0aHMgdG8gc3VwcG9ydCBsaWdodHdlaWdodCBDU1Igc2F2ZS9yZXN0b3JlLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgS1ZNIGxvZ2ljIG9uIFJJU0MtViBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gdmlydHVhbGl6YXRpb24gb3IgcG93ZXIgbWFuYWdlbWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMjo0NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDEyNTE2NzIxNmZhMjNkYWU4ZmNhZmRjYzcxZDlmMjkwN2Q0YjU0ZWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1biAyNiAyMjo0NDozMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9haWEuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2FpYS5oXG5pbmRleCBjNjdlYzVhYzBhMTQ2Yi4uN2MxYzMyNTA1OThmYjAgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9haWEuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fYWlhLmhcbkBAIC0xNjUsOCAmIzQzOzE2NSwxOSBAQCBpbnQga3ZtX3Jpc2N2X2FpYV9hbGxvY19oZ2VpKGludCBjcHUsIHN0cnVjdCBrdm1fdmNwdSAqb3duZXIsXG4gXHRcdFx0ICAgICB2b2lkIF9faW9tZW0gKipoZ2VpX3ZhLCBwaHlzX2FkZHJfdCAqaGdlaV9wYSk7XG4gdm9pZCBrdm1fcmlzY3ZfYWlhX2ZyZWVfaGdlaShpbnQgY3B1LCBpbnQgaGdlaSk7XG4gXG4tdm9pZCBrdm1fcmlzY3ZfYWlhX2VuYWJsZSh2b2lkKTtcbi12b2lkIGt2bV9yaXNjdl9haWFfZGlzYWJsZSh2b2lkKTtcbiYjNDM7LyoqXG4mIzQzOyAqIGt2bV9yaXNjdl9haWFfZW5hYmxlKCkgLSBFbmFibGUgQUlBIHN1cHBvcnQgb24gY3VycmVudCBDUFVcbiYjNDM7ICogQGZ1bGxfY2xlYW51cDogdHJ1ZSA9IGZ1bGwgaGFyZHdhcmUgaW5pdCAoQ1BVIGhvdHBsdWcvbW9kdWxlIGxvYWQpLFxuJiM0MzsgKiAgICAgICAgICAgICAgICBmYWxzZSA9IGxpZ2h0d2VpZ2h0IENTUiByZXN0b3JlIChDUFUgbm9uLXJldGVudGlvbiBpZGxlIHJlc3VtZSlcbiYjNDM7ICovXG4mIzQzO3ZvaWQga3ZtX3Jpc2N2X2FpYV9lbmFibGUoYm9vbCBmdWxsX2NsZWFudXApO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGt2bV9yaXNjdl9haWFfZGlzYWJsZSgpIC0gRGlzYWJsZSBBSUEgc3VwcG9ydCBvbiBjdXJyZW50IENQVVxuJiM0MzsgKiBAZnVsbF9jbGVhbnVwOiB0cnVlID0gZnVsbCBoYXJkd2FyZSBjbGVhbnVwIChDUFUgaG90cGx1Zy9tb2R1bGUgZXhpdCksXG4mIzQzOyAqICAgICAgICAgICAgICAgIGZhbHNlID0gbGlnaHR3ZWlnaHQgQ1NSIHNhdmUgKENQVSBub24tcmV0ZW50aW9uIGlkbGUgZW50cnkpXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIGt2bV9yaXNjdl9haWFfZGlzYWJsZShib29sIGZ1bGxfY2xlYW51cCk7XG4gaW50IGt2bV9yaXNjdl9haWFfaW5pdCh2b2lkKTtcbiB2b2lkIGt2bV9yaXNjdl9haWFfZXhpdCh2b2lkKTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IDYwMDE3Y2VlYzlkMmFmLi44MDhiNGVlMWJkMTBhYyAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtMzE5LDYgJiM0MzszMTksOCBAQCBib29sIGt2bV9yaXNjdl92Y3B1X3N0b3BwZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcbiB2b2lkIGt2bV9yaXNjdl92Y3B1X3JlY29yZF9zdGVhbF90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG4gXG4mIzQzO3ZvaWQga3ZtX3Jpc2N2X2NsZWFyX2Zvcm1lcl92Y3B1KHZvaWQpO1xuJiM0MztcbiAvKiBGbGFncyByZXByZXNlbnRpbmcgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgZGV0YWlscyAqL1xuIERFQ0xBUkVfU1RBVElDX0tFWV9GQUxTRShrdm1fcmlzY3ZfdnNzdGFnZV90bGJfbm9fZ3BhKTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9haWEuYyBiL2FyY2gvcmlzY3Yva3ZtL2FpYS5jXG5pbmRleCBiYWZiMDA5YzVjZTU1OS4uNGNmMzUxZjkxYzY0M2YgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9haWEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rdm0vYWlhLmNcbkBAIC0yNSw2ICYjNDM7MjUsNyBAQCBzdHJ1Y3QgYWlhX2hnZWlfY29udHJvbCB7XG4gXHR1bnNpZ25lZCBsb25nIGZyZWVfYml0bWFwO1xuIFx0c3RydWN0IGt2bV92Y3B1ICpvd25lcnNbQklUU19QRVJfTE9OR107XG4gXHR1bnNpZ25lZCBpbnQgbnJfaGdlaTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHNhdmVkX3ZhbHVlO1xuIH07XG4gc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBhaWFfaGdlaV9jb250cm9sLCBhaWFfaGdlaSk7XG4gc3RhdGljIGludCBoZ2VpX3BhcmVudF9pcnE7XG5AQCAtNTMyLDUwICYjNDM7NTMzLDU5IEBAIHN0YXRpYyB2b2lkIGFpYV9oZ2VpX2V4aXQodm9pZClcbiBcdGZyZWVfcGVyY3B1X2lycShoZ2VpX3BhcmVudF9pcnEsIFx1MDAyNmFpYV9oZ2VpKTtcbiB9XG4gXG4tdm9pZCBrdm1fcmlzY3ZfYWlhX2VuYWJsZSh2b2lkKVxuJiM0Mzt2b2lkIGt2bV9yaXNjdl9haWFfZW5hYmxlKGJvb2wgZnVsbF9jbGVhbnVwKVxuIHtcbi1cdGNvbnN0IHN0cnVjdCBpbXNpY19nbG9iYWxfY29uZmlnICpnYztcbi1cdGNvbnN0IHN0cnVjdCBpbXNpY19sb2NhbF9jb25maWcgKmxjO1xuIFx0c3RydWN0IGFpYV9oZ2VpX2NvbnRyb2wgKmhnY3RybDtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tXHRpbnQgYWlhX25yX2hnZWk7XG4gXG4gXHRpZiAoIWt2bV9yaXNjdl9haWFfYXZhaWxhYmxlKCkpXG4gXHRcdHJldHVybjtcbiBcbi1cdGdjID0gaW1zaWNfZ2V0X2dsb2JhbF9jb25maWcoKTtcbi1cdGxjID0gKGdjKSA/IHRoaXNfY3B1X3B0cihnYy1cdTAwM2Vsb2NhbCkgOiBOVUxMO1xuIFx0aGdjdHJsID0gdGhpc19jcHVfcHRyKFx1MDAyNmFpYV9oZ2VpKTtcbiBcbi1cdC8qIEZpZ3VyZS1vdXQgbnVtYmVyIG9mIGJpdHMgaW4gSEdFSUUgKi9cbi1cdGNzcl93cml0ZShDU1JfSEdFSUUsIC0xVUwpO1xuLVx0aGdjdHJsLVx1MDAzZW5yX2hnZWkgPSBmbHNfbG9uZyhjc3JfcmVhZChDU1JfSEdFSUUpKTtcbi1cdGNzcl93cml0ZShDU1JfSEdFSUUsIDApO1xuLVx0aWYgKGhnY3RybC1cdTAwM2Vucl9oZ2VpKVxuLVx0XHRoZ2N0cmwtXHUwMDNlbnJfaGdlaS0tO1xuJiM0MztcdGlmIChmdWxsX2NsZWFudXApIHtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBpbXNpY19nbG9iYWxfY29uZmlnICpnYztcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBpbXNpY19sb2NhbF9jb25maWcgKmxjO1xuJiM0MztcdFx0aW50IGFpYV9ucl9oZ2VpO1xuIFxuLVx0Lypcbi1cdCAqIE51bWJlciBvZiB1c2FibGUgcGVyLUhBUlQgSEdFSSBsaW5lcyBzaG91bGQgYmUgbWluaW11bSBvZlxuLVx0ICogcGVyLUhBUlQgSU1TSUMgZ3Vlc3QgZmlsZXMgYW5kIG51bWJlciBvZiBiaXRzIGluIEhHRUlFLlxuLVx0ICovXG4tXHRpZiAobGMpXG4tXHRcdGhnY3RybC1cdTAwM2Vucl9oZ2VpID0gbWluKCh1bG9uZyloZ2N0cmwtXHUwMDNlbnJfaGdlaSwgbGMtXHUwMDNlbnJfZ3Vlc3RfZmlsZXMpO1xuLVx0ZWxzZVxuLVx0XHRoZ2N0cmwtXHUwMDNlbnJfaGdlaSA9IDA7XG4mIzQzO1x0XHRnYyA9IGltc2ljX2dldF9nbG9iYWxfY29uZmlnKCk7XG4mIzQzO1x0XHRsYyA9IChnYykgPyB0aGlzX2NwdV9wdHIoZ2MtXHUwMDNlbG9jYWwpIDogTlVMTDtcbiBcbi1cdC8qIFVwZGF0ZSB0aGUgbnVtYmVyIG9mIElNU0lDIGd1ZXN0IGZpbGVzIGFjcm9zcyBhbGwgSEFSVHMgKi9cbi1cdGFpYV9ucl9oZ2VpID0gYXRvbWljX3JlYWQoXHUwMDI2a3ZtX3Jpc2N2X2FpYV9ucl9oZ2VpKTtcbi1cdGRvIHtcbi1cdFx0aWYgKGFpYV9ucl9oZ2VpIFx1MDAzYz0gaGdjdHJsLVx1MDAzZW5yX2hnZWkpXG4tXHRcdFx0YnJlYWs7XG4tXHR9IHdoaWxlICghYXRvbWljX3RyeV9jbXB4Y2hnKFx1MDAyNmt2bV9yaXNjdl9haWFfbnJfaGdlaSwgXHUwMDI2YWlhX25yX2hnZWksIGhnY3RybC1cdTAwM2Vucl9oZ2VpKSk7XG4mIzQzO1x0XHQvKiBGaWd1cmUtb3V0IG51bWJlciBvZiBiaXRzIGluIEhHRUlFICovXG4mIzQzO1x0XHRjc3Jfd3JpdGUoQ1NSX0hHRUlFLCAtMVVMKTtcbiYjNDM7XHRcdGhnY3RybC1cdTAwM2Vucl9oZ2VpID0gZmxzX2xvbmcoY3NyX3JlYWQoQ1NSX0hHRUlFKSk7XG4mIzQzO1x0XHRjc3Jfd3JpdGUoQ1NSX0hHRUlFLCAwKTtcbiYjNDM7XHRcdGlmIChoZ2N0cmwtXHUwMDNlbnJfaGdlaSlcbiYjNDM7XHRcdFx0aGdjdHJsLVx1MDAzZW5yX2hnZWktLTtcbiBcbi1cdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZoZ2N0cmwtXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVx0aWYgKCFoZ2N0cmwtXHUwMDNlZnJlZV9iaXRtYXBfaW5pdGlhbGl6ZWQpIHtcbi1cdFx0aGdjdHJsLVx1MDAzZWZyZWVfYml0bWFwID0gKGhnY3RybC1cdTAwM2Vucl9oZ2VpKSA/IEdFTk1BU0tfVUxMKGhnY3RybC1cdTAwM2Vucl9oZ2VpLCAxKSA6IDA7XG4tXHRcdGhnY3RybC1cdTAwM2VmcmVlX2JpdG1hcF9pbml0aWFsaXplZCA9IHRydWU7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogTnVtYmVyIG9mIHVzYWJsZSBwZXItSEFSVCBIR0VJIGxpbmVzIHNob3VsZCBiZSBtaW5pbXVtIG9mXG4mIzQzO1x0XHQgKiBwZXItSEFSVCBJTVNJQyBndWVzdCBmaWxlcyBhbmQgbnVtYmVyIG9mIGJpdHMgaW4gSEdFSUUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChsYylcbiYjNDM7XHRcdFx0aGdjdHJsLVx1MDAzZW5yX2hnZWkgPSBtaW4oKHVsb25nKWhnY3RybC1cdTAwM2Vucl9oZ2VpLCBsYy1cdTAwM2Vucl9ndWVzdF9maWxlcyk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGhnY3RybC1cdTAwM2Vucl9oZ2VpID0gMDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBVcGRhdGUgdGhlIG51bWJlciBvZiBJTVNJQyBndWVzdCBmaWxlcyBhY3Jvc3MgYWxsIEhBUlRzICovXG4mIzQzO1x0XHRhaWFfbnJfaGdlaSA9IGF0b21pY19yZWFkKFx1MDAyNmt2bV9yaXNjdl9haWFfbnJfaGdlaSk7XG4mIzQzO1x0XHRkbyB7XG4mIzQzO1x0XHRcdGlmIChhaWFfbnJfaGdlaSBcdTAwM2M9IGhnY3RybC1cdTAwM2Vucl9oZ2VpKVxuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0fSB3aGlsZSAoIWF0b21pY190cnlfY21weGNoZyhcdTAwMjZrdm1fcmlzY3ZfYWlhX25yX2hnZWksIFx1MDAyNmFpYV9ucl9oZ2VpLFxuJiM0MztcdFx0XHRcdFx0ICAgICBoZ2N0cmwtXHUwMDNlbnJfaGdlaSkpO1xuJiM0MztcbiYjNDM7XHRcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZoZ2N0cmwtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0aWYgKCFoZ2N0cmwtXHUwMDNlZnJlZV9iaXRtYXBfaW5pdGlhbGl6ZWQpIHtcbiYjNDM7XHRcdFx0aGdjdHJsLVx1MDAzZWZyZWVfYml0bWFwID0gKGhnY3RybC1cdTAwM2Vucl9oZ2VpKSA/XG4mIzQzO1x0XHRcdFx0XHQgICAgICBHRU5NQVNLX1VMTChoZ2N0cmwtXHUwMDNlbnJfaGdlaSwgMSkgOlxuJiM0MztcdFx0XHRcdFx0ICAgICAgMDtcbiYjNDM7XHRcdFx0aGdjdHJsLVx1MDAzZWZyZWVfYml0bWFwX2luaXRpYWxpemVkID0gdHJ1ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmhnY3RybC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGNzcl93cml0ZShDU1JfSEdFSUUsIGhnY3RybC1cdTAwM2VzYXZlZF92YWx1ZSk7XG4gXHR9XG4tXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZoZ2N0cmwtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFxuIFx0Y3NyX3dyaXRlKENTUl9IVklDVEwsIGFpYV9odmljdGxfdmFsdWUoZmFsc2UpKTtcbiBcdGNzcl93cml0ZShDU1JfSFZJUFJJTzEsIDB4MCk7XG5AQCAtNTg3LDE2ICYjNDM7NTk3LDE3IEBAIHZvaWQga3ZtX3Jpc2N2X2FpYV9lbmFibGUodm9pZClcbiBcdGNzcl93cml0ZShDU1JfSFZJUFJJTzJILCAweDApO1xuICNlbmRpZlxuIFxuLVx0LyogRW5hYmxlIHBlci1DUFUgU0dFSSBpbnRlcnJ1cHQgKi9cbi1cdGVuYWJsZV9wZXJjcHVfaXJxKGhnZWlfcGFyZW50X2lycSxcbi1cdFx0XHQgIGlycV9nZXRfdHJpZ2dlcl90eXBlKGhnZWlfcGFyZW50X2lycSkpO1xuJiM0MztcdGlmIChmdWxsX2NsZWFudXApXG4mIzQzO1x0XHRlbmFibGVfcGVyY3B1X2lycShoZ2VpX3BhcmVudF9pcnEsXG4mIzQzO1x0XHRcdFx0ICBpcnFfZ2V0X3RyaWdnZXJfdHlwZShoZ2VpX3BhcmVudF9pcnEpKTtcbiBcdGNzcl9zZXQoQ1NSX0hJRSwgQklUKElSUV9TX0dFWFQpKTtcbiYjNDM7XG4gXHQvKiBFbmFibGUgSVJRIGZpbHRlcmluZyBmb3Igb3ZlcmZsb3cgaW50ZXJydXB0IG9ubHkgaWYgc3Njb2ZwbWYgaXMgcHJlc2VudCAqL1xuIFx0aWYgKF9fcmlzY3ZfaXNhX2V4dGVuc2lvbl9hdmFpbGFibGUoTlVMTCwgUklTQ1ZfSVNBX0VYVF9TU0NPRlBNRikpXG4gXHRcdGNzcl9zZXQoQ1NSX0hWSUVOLCBCSVQoSVJRX1BNVV9PVkYpKTtcbiB9XG4gXG4tdm9pZCBrdm1fcmlzY3ZfYWlhX2Rpc2FibGUodm9pZClcbiYjNDM7dm9pZCBrdm1fcmlzY3ZfYWlhX2Rpc2FibGUoYm9vbCBmdWxsX2NsZWFudXApXG4ge1xuIFx0aW50IGk7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuQEAgLTYwOSw0MiAmIzQzOzYyMCw0OSBAQCB2b2lkIGt2bV9yaXNjdl9haWFfZGlzYWJsZSh2b2lkKVxuIFxuIFx0aWYgKF9fcmlzY3ZfaXNhX2V4dGVuc2lvbl9hdmFpbGFibGUoTlVMTCwgUklTQ1ZfSVNBX0VYVF9TU0NPRlBNRikpXG4gXHRcdGNzcl9jbGVhcihDU1JfSFZJRU4sIEJJVChJUlFfUE1VX09WRikpO1xuLVx0LyogRGlzYWJsZSBwZXItQ1BVIFNHRUkgaW50ZXJydXB0ICovXG4tXHRjc3JfY2xlYXIoQ1NSX0hJRSwgQklUKElSUV9TX0dFWFQpKTtcbi1cdGRpc2FibGVfcGVyY3B1X2lycShoZ2VpX3BhcmVudF9pcnEpO1xuIFxuLVx0Y3NyX3dyaXRlKENTUl9IVklDVEwsIGFpYV9odmljdGxfdmFsdWUoZmFsc2UpKTtcbi1cbi1cdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZoZ2N0cmwtXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2M9IGhnY3RybC1cdTAwM2Vucl9oZ2VpOyBpJiM0MzsmIzQzOykge1xuLVx0XHR2Y3B1ID0gaGdjdHJsLVx1MDAzZW93bmVyc1tpXTtcbi1cdFx0aWYgKCF2Y3B1KVxuLVx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdGlmIChmdWxsX2NsZWFudXApIHtcbiYjNDM7XHRcdC8qIERpc2FibGUgcGVyLUNQVSBTR0VJIGludGVycnVwdCAqL1xuJiM0MztcdFx0Y3NyX2NsZWFyKENTUl9ISUUsIEJJVChJUlFfU19HRVhUKSk7XG4mIzQzO1x0XHRkaXNhYmxlX3BlcmNwdV9pcnEoaGdlaV9wYXJlbnRfaXJxKTtcbiYjNDM7XHR9XG4gXG4tXHRcdC8qXG4tXHRcdCAqIFdlIHJlbGVhc2UgaGdjdHJsLVx1MDAzZWxvY2sgYmVmb3JlIG5vdGlmeWluZyBJTVNJQ1xuLVx0XHQgKiBzbyB0aGF0IHdlIGRvbiYjMzk7dCBoYXZlIGxvY2sgb3JkZXJpbmcgaXNzdWVzLlxuLVx0XHQgKi9cbi1cdFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aGdjdHJsLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRjc3Jfd3JpdGUoQ1NSX0hWSUNUTCwgYWlhX2h2aWN0bF92YWx1ZShmYWxzZSkpO1xuIFxuLVx0XHQvKiBOb3RpZnkgSU1TSUMgKi9cbi1cdFx0a3ZtX3Jpc2N2X3ZjcHVfYWlhX2ltc2ljX3JlbGVhc2UodmNwdSk7XG4mIzQzO1x0aWYgKGZ1bGxfY2xlYW51cCkge1xuJiM0MztcdFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmhnY3RybC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4tXHRcdC8qXG4tXHRcdCAqIFdha2V1cCBWQ1BVIGlmIGl0IHdhcyBibG9ja2VkIHNvIHRoYXQgaXQgY2FuXG4tXHRcdCAqIHJ1biBvbiBvdGhlciBIQVJUc1xuLVx0XHQgKi9cbi1cdFx0aWYgKGNzcl9yZWFkKENTUl9IR0VJRSkgXHUwMDI2IEJJVChpKSkge1xuLVx0XHRcdGNzcl9jbGVhcihDU1JfSEdFSUUsIEJJVChpKSk7XG4tXHRcdFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBoZ2N0cmwtXHUwMDNlbnJfaGdlaTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0dmNwdSA9IGhnY3RybC1cdTAwM2Vvd25lcnNbaV07XG4mIzQzO1x0XHRcdGlmICghdmNwdSlcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFdlIHJlbGVhc2UgaGdjdHJsLVx1MDAzZWxvY2sgYmVmb3JlIG5vdGlmeWluZyBJTVNJQ1xuJiM0MztcdFx0XHQgKiBzbyB0aGF0IHdlIGRvbiYjMzk7dCBoYXZlIGxvY2sgb3JkZXJpbmcgaXNzdWVzLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aGdjdHJsLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0XHRcdC8qIE5vdGlmeSBJTVNJQyAqL1xuJiM0MztcdFx0XHRrdm1fcmlzY3ZfdmNwdV9haWFfaW1zaWNfcmVsZWFzZSh2Y3B1KTtcbiYjNDM7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFdha2V1cCBWQ1BVIGlmIGl0IHdhcyBibG9ja2VkIHNvIHRoYXQgaXQgY2FuXG4mIzQzO1x0XHRcdCAqIHJ1biBvbiBvdGhlciBIQVJUc1xuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aWYgKGNzcl9yZWFkKENTUl9IR0VJRSkgXHUwMDI2IEJJVChpKSkge1xuJiM0MztcdFx0XHRcdGNzcl9jbGVhcihDU1JfSEdFSUUsIEJJVChpKSk7XG4mIzQzO1x0XHRcdFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmhnY3RybC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRcdH1cbiBcbi1cdFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmhnY3RybC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZoZ2N0cmwtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRoZ2N0cmwtXHUwMDNlc2F2ZWRfdmFsdWUgPSBjc3JfcmVhZChDU1JfSEdFSUUpO1xuIFx0fVxuIFxuLVx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aGdjdHJsLVx1MDAzZWxvY2ssIGZsYWdzKTtcbi1cbiBcdHB1dF9jcHVfcHRyKFx1MDAyNmFpYV9oZ2VpKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vbWFpbi5jIGIvYXJjaC9yaXNjdi9rdm0vbWFpbi5jXG5pbmRleCAwOTI0Yzc1MTAwYTJkMC4uYjg0NjFmMWE1NjlmYWUgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL21haW4uY1xuQEAgLTEwLDYgJiM0MzsxMCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXJyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2t2bV9ob3N0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY3B1X3BtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vY3B1ZmVhdHVyZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9tbXUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fbmFjbC5oXHUwMDNlXG5AQCAtMzMsMTQgJiM0MzszNCw5IEBAIGxvbmcga3ZtX2FyY2hfZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuIFx0cmV0dXJuIC1FSU5WQUw7XG4gfVxuIFxuLWludCBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXG4mIzQzOy8qIEluaXRpYWxpemUgaHlwZXJ2aXNvciBDU1JzIC0gY2FsbGVkIGR1cmluZyBDUFUgb25saW5lIGFuZCBub24tcmV0ZW50aW9uIGlkbGUgcmVzdW1lICovXG4mIzQzO3N0YXRpYyB2b2lkIGt2bV9yaXNjdl9jc3JfZW5hYmxlKHZvaWQpXG4ge1xuLVx0aW50IHJjO1xuLVxuLVx0cmMgPSBrdm1fcmlzY3ZfbmFjbF9lbmFibGUoKTtcbi1cdGlmIChyYylcbi1cdFx0cmV0dXJuIHJjO1xuLVxuIFx0Y3NyX3dyaXRlKENTUl9IRURFTEVHLCAwKTtcbiBcdGNzcl93cml0ZShDU1JfSElERUxFRywgMCk7XG4gXG5AQCAtNDgsMTYgJiM0Mzs0NCwxMSBAQCBpbnQga3ZtX2FyY2hfZW5hYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKVxuIFx0Y3NyX3dyaXRlKENTUl9IQ09VTlRFUkVOLCAweDAyKTtcbiBcbiBcdGNzcl93cml0ZShDU1JfSFZJUCwgMCk7XG4tXG4tXHRrdm1fcmlzY3ZfYWlhX2VuYWJsZSgpO1xuLVxuLVx0cmV0dXJuIDA7XG4gfVxuIFxuLXZvaWQga3ZtX2FyY2hfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUodm9pZClcbiYjNDM7LyogQ2xlYXIgaHlwZXJ2aXNvciBDU1JzIC0gY2FsbGVkIGR1cmluZyBDUFUgb2ZmbGluZSBhbmQgbm9uLXJldGVudGlvbiBpZGxlIGVudHJ5ICovXG4mIzQzO3N0YXRpYyB2b2lkIGt2bV9yaXNjdl9jc3JfZGlzYWJsZSh2b2lkKVxuIHtcbi1cdGt2bV9yaXNjdl9haWFfZGlzYWJsZSgpO1xuLVxuIFx0LypcbiBcdCAqIEFmdGVyIGNsZWFyaW5nIHRoZSBoaWRlbGVnIENTUiwgdGhlIGhvc3Qga2VybmVsIHdpbGwgcmVjZWl2ZVxuIFx0ICogc3B1cmlvdXMgaW50ZXJydXB0cyBpZiBodmlwIENTUiBoYXMgcGVuZGluZyBpbnRlcnJ1cHRzIGFuZCB0aGVcbkBAIC02OSw5ICYjNDM7NjAsNjIgQEAgdm9pZCBrdm1fYXJjaF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKVxuIFx0Y3NyX3dyaXRlKENTUl9IRURFTEVHLCAwKTtcbiBcdGNzcl93cml0ZShDU1JfSElERUxFRywgMCk7XG4gXG4mIzQzO1x0a3ZtX3Jpc2N2X2NsZWFyX2Zvcm1lcl92Y3B1KCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdHJjID0ga3ZtX3Jpc2N2X25hY2xfZW5hYmxlKCk7XG4mIzQzO1x0aWYgKHJjKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRrdm1fcmlzY3ZfY3NyX2VuYWJsZSgpO1xuJiM0MztcdGt2bV9yaXNjdl9haWFfZW5hYmxlKHRydWUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBrdm1fYXJjaF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0a3ZtX3Jpc2N2X2FpYV9kaXNhYmxlKHRydWUpO1xuJiM0MztcdGt2bV9yaXNjdl9jc3JfZGlzYWJsZSgpO1xuIFx0a3ZtX3Jpc2N2X25hY2xfZGlzYWJsZSgpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBrdm1fcmlzY3ZfY3B1X3BtX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwgdW5zaWduZWQgbG9uZyBjbWQsIHZvaWQgKnYpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRvIGF2b2lkIHJlZHVuZGFudCBkaXNhYmxlL2VuYWJsZSBvcGVyYXRpb25zIChzaW5jZSBLVk0mIzM5O3NcbiYjNDM7XHQgKiBzeXNjb3JlIG9wcyB3aWxsIGhhbmRsZSB0aGUgc3RhdGUgZHVyaW5nIHN5c3RlbSBzdXNwZW5kKSxcbiYjNDM7XHQgKiBpZ25vcmUgQ1BVX1BNIGV2ZW50cyB3aGVuIGEgc3lzdGVtIHN1c3BlbmQvcmVzdW1lIGlzIGluXG4mIzQzO1x0ICogcHJvZ3Jlc3MuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fU1VTUEVORClcbiYjNDM7XHRcdHJldHVybiBOT1RJRllfRE9ORTtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChjbWQpIHtcbiYjNDM7XHRjYXNlIENQVV9QTV9FWElUOlxuJiM0MztcdGNhc2UgQ1BVX1BNX0VOVEVSX0ZBSUxFRDpcbiYjNDM7XHRcdGt2bV9yaXNjdl9jc3JfZW5hYmxlKCk7XG4mIzQzO1x0XHRrdm1fcmlzY3ZfYWlhX2VuYWJsZShmYWxzZSk7XG4mIzQzO1x0XHRyZXR1cm4gTk9USUZZX09LO1xuJiM0MztcdGNhc2UgQ1BVX1BNX0VOVEVSOlxuJiM0MztcdFx0a3ZtX3Jpc2N2X2FpYV9kaXNhYmxlKGZhbHNlKTtcbiYjNDM7XHRcdGt2bV9yaXNjdl9jc3JfZGlzYWJsZSgpO1xuJiM0MztcdFx0cmV0dXJuIE5PVElGWV9PSztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sga3ZtX3Jpc2N2X2NwdV9wbV9uYiA9IHtcbiYjNDM7XHQubm90aWZpZXJfY2FsbCA9IGt2bV9yaXNjdl9jcHVfcG1fbm90aWZpZXIsXG4mIzQzO307XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGt2bV9yaXNjdl90ZWFyZG93bih2b2lkKVxuIHtcbiBcdGt2bV9yaXNjdl9haWFfZXhpdCgpO1xuQEAgLTE3MiwyMiAmIzQzOzIxNiw0MCBAQCBzdGF0aWMgaW50IF9faW5pdCByaXNjdl9rdm1faW5pdCh2b2lkKVxuIFxuIFx0a3ZtX3JlZ2lzdGVyX3BlcmZfY2FsbGJhY2tzKCk7XG4gXG4tXHRyYyA9IGt2bV9pbml0KHNpemVvZihzdHJ1Y3Qga3ZtX3ZjcHUpLCAwLCBUSElTX01PRFVMRSk7XG4tXHRpZiAocmMpIHtcbi1cdFx0a3ZtX3Jpc2N2X3RlYXJkb3duKCk7XG4tXHRcdHJldHVybiByYztcbiYjNDM7XHQvKiBSZWdpc3RlciBDUFUgUE0gbm90aWZpZXIgZm9yIENQVSBpZGxlIG5vbi1yZXRlbnRpb24gc3RhdGVzICovXG4mIzQzO1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX0NQVV9QTSkpIHtcbiYjNDM7XHRcdHJjID0gY3B1X3BtX3JlZ2lzdGVyX25vdGlmaWVyKFx1MDAyNmt2bV9yaXNjdl9jcHVfcG1fbmIpO1xuJiM0MztcdFx0aWYgKHJjKSB7XG4mIzQzO1x0XHRcdGt2bV9lcnIoXCYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIENQVSBQTSBub3RpZmllcjogJWRcXG5cJiMzNDssIHJjKTtcbiYjNDM7XHRcdFx0Z290byBlcnJfdGVhcmRvd247XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4mIzQzO1x0cmMgPSBrdm1faW5pdChzaXplb2Yoc3RydWN0IGt2bV92Y3B1KSwgMCwgVEhJU19NT0RVTEUpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdGdvdG8gZXJyX3VucmVnaXN0ZXJfY3B1X3BtO1xuJiM0MztcbiBcdGlmIChrdm1fcmlzY3ZfYWlhX2F2YWlsYWJsZSgpKVxuIFx0XHRrdm1faW5mbyhcJiMzNDtBSUEgYXZhaWxhYmxlIHdpdGggJWQgZ3Vlc3QgZXh0ZXJuYWwgaW50ZXJydXB0c1xcblwmIzM0OyxcbiBcdFx0XHQgYXRvbWljX3JlYWQoXHUwMDI2a3ZtX3Jpc2N2X2FpYV9ucl9oZ2VpKSk7XG4gXG4gXHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl91bnJlZ2lzdGVyX2NwdV9wbTpcbiYjNDM7XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQ1BVX1BNKSlcbiYjNDM7XHRcdGNwdV9wbV91bnJlZ2lzdGVyX25vdGlmaWVyKFx1MDAyNmt2bV9yaXNjdl9jcHVfcG1fbmIpO1xuJiM0MztlcnJfdGVhcmRvd246XG4mIzQzO1x0a3ZtX3Jpc2N2X3RlYXJkb3duKCk7XG4mIzQzO1x0cmV0dXJuIHJjO1xuIH1cbiBtb2R1bGVfaW5pdChyaXNjdl9rdm1faW5pdCk7XG4gXG4gc3RhdGljIHZvaWQgX19leGl0IHJpc2N2X2t2bV9leGl0KHZvaWQpXG4ge1xuJiM0MztcdC8qIFVucmVnaXN0ZXIgQ1BVIFBNIG5vdGlmaWVyICovXG4mIzQzO1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX0NQVV9QTSkpXG4mIzQzO1x0XHRjcHVfcG1fdW5yZWdpc3Rlcl9ub3RpZmllcihcdTAwMjZrdm1fcmlzY3ZfY3B1X3BtX25iKTtcbiYjNDM7XG4gXHRrdm1fZXhpdCgpO1xuIFxuIFx0a3ZtX3Jpc2N2X3RlYXJkb3duKCk7XG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vdmNwdS5jIGIvYXJjaC9yaXNjdi9rdm0vdmNwdS5jXG5pbmRleCBjZjZlMjMxZTc2ZTI1NC4uZTQ4MzM4ZjkwN2Y0ODggMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS92Y3B1LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL3ZjcHUuY1xuQEAgLTI2LDYgJiM0MzsyNiwxNyBAQFxuIFxuIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qga3ZtX3ZjcHUgKiwga3ZtX2Zvcm1lcl92Y3B1KTtcbiBcbiYjNDM7dm9pZCBrdm1fcmlzY3ZfY2xlYXJfZm9ybWVyX3ZjcHUodm9pZClcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQ2xlYXIgdGhlIHBlci1DUFUgZm9ybWVyIFZDUFUgcG9pbnRlciBiZWNhdXNlIGh5cGVydmlzb3IgQ1NSIHN0YXRlXG4mIzQzO1x0ICogd2lsbCBiZSBsb3N0LiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgbmV4dCBWQ1BVIGVudHJ5IHdpbGwgcHJvcGVybHlcbiYjNDM7XHQgKiByZXN0b3JlIGFsbCBDU1JzIGluc3RlYWQgb2YgaW5jb3JyZWN0bHkgc2tpcHBpbmcgQ1NSIHJlc3RvcmF0aW9uXG4mIzQzO1x0ICogdmlhIHRoZSBmYXN0LXBhdGggb3B0aW1pemF0aW9uLlxuJiM0MztcdCAqL1xuJiM0MztcdF9fdGhpc19jcHVfd3JpdGUoa3ZtX2Zvcm1lcl92Y3B1LCBOVUxMKTtcbiYjNDM7fVxuJiM0MztcbiBjb25zdCBzdHJ1Y3Qga3ZtX3N0YXRzX2Rlc2Mga3ZtX3ZjcHVfc3RhdHNfZGVzY1tdID0ge1xuIFx0S1ZNX0dFTkVSSUNfVkNQVV9TVEFUUygpLFxuIFx0U1RBVFNfREVTQ19DT1VOVEVSKFZDUFUsIGVjYWxsX2V4aXRfc3RhdCksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjI6NDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0NQVV9JRExFJiMzNDssCiAgICAmIzM0O1NVU1BFTkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fcmlzY3ZfY3B1X3BtX25vdGlmaWVyJiMzNDssCiAgICAmIzM0O2t2bV9yaXNjdl9haWFfZW5hYmxlJiMzNDssCiAgICAmIzM0O2t2bV9yaXNjdl9haWFfZGlzYWJsZSYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfY2xlYXJfZm9ybWVyX3ZjcHUmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfZW5hYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfY3NyX2VuYWJsZSYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfY3NyX2Rpc2FibGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIG1vZGlmaWVzIFJJU0MtViBLVk0gdG8gaGFuZGxlIENQVSBwb3dlciBtYW5hZ2VtZW50IGV2ZW50cyAoQ1BVX1BNKSBmb3Igbm9uLXJldGVudGlvbiBpZGxlIHN0YXRlcy4gSXQgaW50cm9kdWNlcyBhIENQVSBQTSBub3RpZmllciBhbmQgbW9kaWZpZXMgQUlBIChBZHZhbmNlZCBJbnRlcnJ1cHQgQXJjaGl0ZWN0dXJlKSBlbmFibGUvZGlzYWJsZSBwYXRocyB0byBzdXBwb3J0IGxpZ2h0d2VpZ2h0IENTUiBzYXZlL3Jlc3RvcmUuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBLVk0gbG9naWMgb24gUklTQy1WIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBpbiB2aXJ0dWFsaXphdGlvbiBvciBwb3dlciBtYW5hZ2VtZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxMjUxNjcyMTZmYTIzZGFlOGZjYWZkY2M3MWQ5ZjI5MDdkNGI1NGVmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdW4gMjYgMjI6NDQ6MzAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9haWEuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2FpYS5oCmluZGV4IGM2N2VjNWFjMGExNDZiLi43YzFjMzI1MDU5OGZiMCAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fYWlhLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fYWlhLmgKQEAgLTE2NSw4ICYjNDM7MTY1LDE5IEBAIGludCBrdm1fcmlzY3ZfYWlhX2FsbG9jX2hnZWkoaW50IGNwdSwgc3RydWN0IGt2bV92Y3B1ICpvd25lciwKIAkJCSAgICAgdm9pZCBfX2lvbWVtICoqaGdlaV92YSwgcGh5c19hZGRyX3QgKmhnZWlfcGEpOwogdm9pZCBrdm1fcmlzY3ZfYWlhX2ZyZWVfaGdlaShpbnQgY3B1LCBpbnQgaGdlaSk7CiAKLXZvaWQga3ZtX3Jpc2N2X2FpYV9lbmFibGUodm9pZCk7Ci12b2lkIGt2bV9yaXNjdl9haWFfZGlzYWJsZSh2b2lkKTsKJiM0MzsvKioKJiM0MzsgKiBrdm1fcmlzY3ZfYWlhX2VuYWJsZSgpIC0gRW5hYmxlIEFJQSBzdXBwb3J0IG9uIGN1cnJlbnQgQ1BVCiYjNDM7ICogQGZ1bGxfY2xlYW51cDogdHJ1ZSA9IGZ1bGwgaGFyZHdhcmUgaW5pdCAoQ1BVIGhvdHBsdWcvbW9kdWxlIGxvYWQpLAomIzQzOyAqICAgICAgICAgICAgICAgIGZhbHNlID0gbGlnaHR3ZWlnaHQgQ1NSIHJlc3RvcmUgKENQVSBub24tcmV0ZW50aW9uIGlkbGUgcmVzdW1lKQomIzQzOyAqLwomIzQzO3ZvaWQga3ZtX3Jpc2N2X2FpYV9lbmFibGUoYm9vbCBmdWxsX2NsZWFudXApOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIGt2bV9yaXNjdl9haWFfZGlzYWJsZSgpIC0gRGlzYWJsZSBBSUEgc3VwcG9ydCBvbiBjdXJyZW50IENQVQomIzQzOyAqIEBmdWxsX2NsZWFudXA6IHRydWUgPSBmdWxsIGhhcmR3YXJlIGNsZWFudXAgKENQVSBob3RwbHVnL21vZHVsZSBleGl0KSwKJiM0MzsgKiAgICAgICAgICAgICAgICBmYWxzZSA9IGxpZ2h0d2VpZ2h0IENTUiBzYXZlIChDUFUgbm9uLXJldGVudGlvbiBpZGxlIGVudHJ5KQomIzQzOyAqLwomIzQzO3ZvaWQga3ZtX3Jpc2N2X2FpYV9kaXNhYmxlKGJvb2wgZnVsbF9jbGVhbnVwKTsKIGludCBrdm1fcmlzY3ZfYWlhX2luaXQodm9pZCk7CiB2b2lkIGt2bV9yaXNjdl9haWFfZXhpdCh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IDYwMDE3Y2VlYzlkMmFmLi44MDhiNGVlMWJkMTBhYyAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtMzE5LDYgJiM0MzszMTksOCBAQCBib29sIGt2bV9yaXNjdl92Y3B1X3N0b3BwZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogdm9pZCBrdm1fcmlzY3ZfdmNwdV9yZWNvcmRfc3RlYWxfdGltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiYjNDM7dm9pZCBrdm1fcmlzY3ZfY2xlYXJfZm9ybWVyX3ZjcHUodm9pZCk7CiYjNDM7CiAvKiBGbGFncyByZXByZXNlbnRpbmcgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgZGV0YWlscyAqLwogREVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKGt2bV9yaXNjdl92c3N0YWdlX3RsYl9ub19ncGEpOwogCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9haWEuYyBiL2FyY2gvcmlzY3Yva3ZtL2FpYS5jCmluZGV4IGJhZmIwMDljNWNlNTU5Li40Y2YzNTFmOTFjNjQzZiAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9rdm0vYWlhLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rdm0vYWlhLmMKQEAgLTI1LDYgJiM0MzsyNSw3IEBAIHN0cnVjdCBhaWFfaGdlaV9jb250cm9sIHsKIAl1bnNpZ25lZCBsb25nIGZyZWVfYml0bWFwOwogCXN0cnVjdCBrdm1fdmNwdSAqb3duZXJzW0JJVFNfUEVSX0xPTkddOwogCXVuc2lnbmVkIGludCBucl9oZ2VpOwomIzQzOwl1bnNpZ25lZCBsb25nIHNhdmVkX3ZhbHVlOwogfTsKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgYWlhX2hnZWlfY29udHJvbCwgYWlhX2hnZWkpOwogc3RhdGljIGludCBoZ2VpX3BhcmVudF9pcnE7CkBAIC01MzIsNTAgJiM0Mzs1MzMsNTkgQEAgc3RhdGljIHZvaWQgYWlhX2hnZWlfZXhpdCh2b2lkKQogCWZyZWVfcGVyY3B1X2lycShoZ2VpX3BhcmVudF9pcnEsICZhbXA7YWlhX2hnZWkpOwogfQogCi12b2lkIGt2bV9yaXNjdl9haWFfZW5hYmxlKHZvaWQpCiYjNDM7dm9pZCBrdm1fcmlzY3ZfYWlhX2VuYWJsZShib29sIGZ1bGxfY2xlYW51cCkKIHsKLQljb25zdCBzdHJ1Y3QgaW1zaWNfZ2xvYmFsX2NvbmZpZyAqZ2M7Ci0JY29uc3Qgc3RydWN0IGltc2ljX2xvY2FsX2NvbmZpZyAqbGM7CiAJc3RydWN0IGFpYV9oZ2VpX2NvbnRyb2wgKmhnY3RybDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBhaWFfbnJfaGdlaTsKIAogCWlmICgha3ZtX3Jpc2N2X2FpYV9hdmFpbGFibGUoKSkKIAkJcmV0dXJuOwogCi0JZ2MgPSBpbXNpY19nZXRfZ2xvYmFsX2NvbmZpZygpOwotCWxjID0gKGdjKSA/IHRoaXNfY3B1X3B0cihnYy0mZ3Q7bG9jYWwpIDogTlVMTDsKIAloZ2N0cmwgPSB0aGlzX2NwdV9wdHIoJmFtcDthaWFfaGdlaSk7CiAKLQkvKiBGaWd1cmUtb3V0IG51bWJlciBvZiBiaXRzIGluIEhHRUlFICovCi0JY3NyX3dyaXRlKENTUl9IR0VJRSwgLTFVTCk7Ci0JaGdjdHJsLSZndDtucl9oZ2VpID0gZmxzX2xvbmcoY3NyX3JlYWQoQ1NSX0hHRUlFKSk7Ci0JY3NyX3dyaXRlKENTUl9IR0VJRSwgMCk7Ci0JaWYgKGhnY3RybC0mZ3Q7bnJfaGdlaSkKLQkJaGdjdHJsLSZndDtucl9oZ2VpLS07CiYjNDM7CWlmIChmdWxsX2NsZWFudXApIHsKJiM0MzsJCWNvbnN0IHN0cnVjdCBpbXNpY19nbG9iYWxfY29uZmlnICpnYzsKJiM0MzsJCWNvbnN0IHN0cnVjdCBpbXNpY19sb2NhbF9jb25maWcgKmxjOwomIzQzOwkJaW50IGFpYV9ucl9oZ2VpOwogCi0JLyoKLQkgKiBOdW1iZXIgb2YgdXNhYmxlIHBlci1IQVJUIEhHRUkgbGluZXMgc2hvdWxkIGJlIG1pbmltdW0gb2YKLQkgKiBwZXItSEFSVCBJTVNJQyBndWVzdCBmaWxlcyBhbmQgbnVtYmVyIG9mIGJpdHMgaW4gSEdFSUUuCi0JICovCi0JaWYgKGxjKQotCQloZ2N0cmwtJmd0O25yX2hnZWkgPSBtaW4oKHVsb25nKWhnY3RybC0mZ3Q7bnJfaGdlaSwgbGMtJmd0O25yX2d1ZXN0X2ZpbGVzKTsKLQllbHNlCi0JCWhnY3RybC0mZ3Q7bnJfaGdlaSA9IDA7CiYjNDM7CQlnYyA9IGltc2ljX2dldF9nbG9iYWxfY29uZmlnKCk7CiYjNDM7CQlsYyA9IChnYykgPyB0aGlzX2NwdV9wdHIoZ2MtJmd0O2xvY2FsKSA6IE5VTEw7CiAKLQkvKiBVcGRhdGUgdGhlIG51bWJlciBvZiBJTVNJQyBndWVzdCBmaWxlcyBhY3Jvc3MgYWxsIEhBUlRzICovCi0JYWlhX25yX2hnZWkgPSBhdG9taWNfcmVhZCgmYW1wO2t2bV9yaXNjdl9haWFfbnJfaGdlaSk7Ci0JZG8gewotCQlpZiAoYWlhX25yX2hnZWkgJmx0Oz0gaGdjdHJsLSZndDtucl9oZ2VpKQotCQkJYnJlYWs7Ci0JfSB3aGlsZSAoIWF0b21pY190cnlfY21weGNoZygmYW1wO2t2bV9yaXNjdl9haWFfbnJfaGdlaSwgJmFtcDthaWFfbnJfaGdlaSwgaGdjdHJsLSZndDtucl9oZ2VpKSk7CiYjNDM7CQkvKiBGaWd1cmUtb3V0IG51bWJlciBvZiBiaXRzIGluIEhHRUlFICovCiYjNDM7CQljc3Jfd3JpdGUoQ1NSX0hHRUlFLCAtMVVMKTsKJiM0MzsJCWhnY3RybC0mZ3Q7bnJfaGdlaSA9IGZsc19sb25nKGNzcl9yZWFkKENTUl9IR0VJRSkpOwomIzQzOwkJY3NyX3dyaXRlKENTUl9IR0VJRSwgMCk7CiYjNDM7CQlpZiAoaGdjdHJsLSZndDtucl9oZ2VpKQomIzQzOwkJCWhnY3RybC0mZ3Q7bnJfaGdlaS0tOwogCi0JcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7aGdjdHJsLSZndDtsb2NrLCBmbGFncyk7Ci0JaWYgKCFoZ2N0cmwtJmd0O2ZyZWVfYml0bWFwX2luaXRpYWxpemVkKSB7Ci0JCWhnY3RybC0mZ3Q7ZnJlZV9iaXRtYXAgPSAoaGdjdHJsLSZndDtucl9oZ2VpKSA/IEdFTk1BU0tfVUxMKGhnY3RybC0mZ3Q7bnJfaGdlaSwgMSkgOiAwOwotCQloZ2N0cmwtJmd0O2ZyZWVfYml0bWFwX2luaXRpYWxpemVkID0gdHJ1ZTsKJiM0MzsJCS8qCiYjNDM7CQkgKiBOdW1iZXIgb2YgdXNhYmxlIHBlci1IQVJUIEhHRUkgbGluZXMgc2hvdWxkIGJlIG1pbmltdW0gb2YKJiM0MzsJCSAqIHBlci1IQVJUIElNU0lDIGd1ZXN0IGZpbGVzIGFuZCBudW1iZXIgb2YgYml0cyBpbiBIR0VJRS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGxjKQomIzQzOwkJCWhnY3RybC0mZ3Q7bnJfaGdlaSA9IG1pbigodWxvbmcpaGdjdHJsLSZndDtucl9oZ2VpLCBsYy0mZ3Q7bnJfZ3Vlc3RfZmlsZXMpOwomIzQzOwkJZWxzZQomIzQzOwkJCWhnY3RybC0mZ3Q7bnJfaGdlaSA9IDA7CiYjNDM7CiYjNDM7CQkvKiBVcGRhdGUgdGhlIG51bWJlciBvZiBJTVNJQyBndWVzdCBmaWxlcyBhY3Jvc3MgYWxsIEhBUlRzICovCiYjNDM7CQlhaWFfbnJfaGdlaSA9IGF0b21pY19yZWFkKCZhbXA7a3ZtX3Jpc2N2X2FpYV9ucl9oZ2VpKTsKJiM0MzsJCWRvIHsKJiM0MzsJCQlpZiAoYWlhX25yX2hnZWkgJmx0Oz0gaGdjdHJsLSZndDtucl9oZ2VpKQomIzQzOwkJCQlicmVhazsKJiM0MzsJCX0gd2hpbGUgKCFhdG9taWNfdHJ5X2NtcHhjaGcoJmFtcDtrdm1fcmlzY3ZfYWlhX25yX2hnZWksICZhbXA7YWlhX25yX2hnZWksCiYjNDM7CQkJCQkgICAgIGhnY3RybC0mZ3Q7bnJfaGdlaSkpOwomIzQzOwomIzQzOwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7aGdjdHJsLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CQlpZiAoIWhnY3RybC0mZ3Q7ZnJlZV9iaXRtYXBfaW5pdGlhbGl6ZWQpIHsKJiM0MzsJCQloZ2N0cmwtJmd0O2ZyZWVfYml0bWFwID0gKGhnY3RybC0mZ3Q7bnJfaGdlaSkgPwomIzQzOwkJCQkJICAgICAgR0VOTUFTS19VTEwoaGdjdHJsLSZndDtucl9oZ2VpLCAxKSA6CiYjNDM7CQkJCQkgICAgICAwOwomIzQzOwkJCWhnY3RybC0mZ3Q7ZnJlZV9iaXRtYXBfaW5pdGlhbGl6ZWQgPSB0cnVlOwomIzQzOwkJfQomIzQzOwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtoZ2N0cmwtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWNzcl93cml0ZShDU1JfSEdFSUUsIGhnY3RybC0mZ3Q7c2F2ZWRfdmFsdWUpOwogCX0KLQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2hnY3RybC0mZ3Q7bG9jaywgZmxhZ3MpOwogCiAJY3NyX3dyaXRlKENTUl9IVklDVEwsIGFpYV9odmljdGxfdmFsdWUoZmFsc2UpKTsKIAljc3Jfd3JpdGUoQ1NSX0hWSVBSSU8xLCAweDApOwpAQCAtNTg3LDE2ICYjNDM7NTk3LDE3IEBAIHZvaWQga3ZtX3Jpc2N2X2FpYV9lbmFibGUodm9pZCkKIAljc3Jfd3JpdGUoQ1NSX0hWSVBSSU8ySCwgMHgwKTsKICNlbmRpZgogCi0JLyogRW5hYmxlIHBlci1DUFUgU0dFSSBpbnRlcnJ1cHQgKi8KLQllbmFibGVfcGVyY3B1X2lycShoZ2VpX3BhcmVudF9pcnEsCi0JCQkgIGlycV9nZXRfdHJpZ2dlcl90eXBlKGhnZWlfcGFyZW50X2lycSkpOwomIzQzOwlpZiAoZnVsbF9jbGVhbnVwKQomIzQzOwkJZW5hYmxlX3BlcmNwdV9pcnEoaGdlaV9wYXJlbnRfaXJxLAomIzQzOwkJCQkgIGlycV9nZXRfdHJpZ2dlcl90eXBlKGhnZWlfcGFyZW50X2lycSkpOwogCWNzcl9zZXQoQ1NSX0hJRSwgQklUKElSUV9TX0dFWFQpKTsKJiM0MzsKIAkvKiBFbmFibGUgSVJRIGZpbHRlcmluZyBmb3Igb3ZlcmZsb3cgaW50ZXJydXB0IG9ubHkgaWYgc3Njb2ZwbWYgaXMgcHJlc2VudCAqLwogCWlmIChfX3Jpc2N2X2lzYV9leHRlbnNpb25fYXZhaWxhYmxlKE5VTEwsIFJJU0NWX0lTQV9FWFRfU1NDT0ZQTUYpKQogCQljc3Jfc2V0KENTUl9IVklFTiwgQklUKElSUV9QTVVfT1ZGKSk7CiB9CiAKLXZvaWQga3ZtX3Jpc2N2X2FpYV9kaXNhYmxlKHZvaWQpCiYjNDM7dm9pZCBrdm1fcmlzY3ZfYWlhX2Rpc2FibGUoYm9vbCBmdWxsX2NsZWFudXApCiB7CiAJaW50IGk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTYwOSw0MiAmIzQzOzYyMCw0OSBAQCB2b2lkIGt2bV9yaXNjdl9haWFfZGlzYWJsZSh2b2lkKQogCiAJaWYgKF9fcmlzY3ZfaXNhX2V4dGVuc2lvbl9hdmFpbGFibGUoTlVMTCwgUklTQ1ZfSVNBX0VYVF9TU0NPRlBNRikpCiAJCWNzcl9jbGVhcihDU1JfSFZJRU4sIEJJVChJUlFfUE1VX09WRikpOwotCS8qIERpc2FibGUgcGVyLUNQVSBTR0VJIGludGVycnVwdCAqLwotCWNzcl9jbGVhcihDU1JfSElFLCBCSVQoSVJRX1NfR0VYVCkpOwotCWRpc2FibGVfcGVyY3B1X2lycShoZ2VpX3BhcmVudF9pcnEpOwogCi0JY3NyX3dyaXRlKENTUl9IVklDVEwsIGFpYV9odmljdGxfdmFsdWUoZmFsc2UpKTsKLQotCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2hnY3RybC0mZ3Q7bG9jaywgZmxhZ3MpOwotCi0JZm9yIChpID0gMDsgaSAmbHQ7PSBoZ2N0cmwtJmd0O25yX2hnZWk7IGkmIzQzOyYjNDM7KSB7Ci0JCXZjcHUgPSBoZ2N0cmwtJmd0O293bmVyc1tpXTsKLQkJaWYgKCF2Y3B1KQotCQkJY29udGludWU7CiYjNDM7CWlmIChmdWxsX2NsZWFudXApIHsKJiM0MzsJCS8qIERpc2FibGUgcGVyLUNQVSBTR0VJIGludGVycnVwdCAqLwomIzQzOwkJY3NyX2NsZWFyKENTUl9ISUUsIEJJVChJUlFfU19HRVhUKSk7CiYjNDM7CQlkaXNhYmxlX3BlcmNwdV9pcnEoaGdlaV9wYXJlbnRfaXJxKTsKJiM0MzsJfQogCi0JCS8qCi0JCSAqIFdlIHJlbGVhc2UgaGdjdHJsLSZndDtsb2NrIGJlZm9yZSBub3RpZnlpbmcgSU1TSUMKLQkJICogc28gdGhhdCB3ZSBkb24mIzM5O3QgaGF2ZSBsb2NrIG9yZGVyaW5nIGlzc3Vlcy4KLQkJICovCi0JCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7aGdjdHJsLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CWNzcl93cml0ZShDU1JfSFZJQ1RMLCBhaWFfaHZpY3RsX3ZhbHVlKGZhbHNlKSk7CiAKLQkJLyogTm90aWZ5IElNU0lDICovCi0JCWt2bV9yaXNjdl92Y3B1X2FpYV9pbXNpY19yZWxlYXNlKHZjcHUpOwomIzQzOwlpZiAoZnVsbF9jbGVhbnVwKSB7CiYjNDM7CQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtoZ2N0cmwtJmd0O2xvY2ssIGZsYWdzKTsKIAotCQkvKgotCQkgKiBXYWtldXAgVkNQVSBpZiBpdCB3YXMgYmxvY2tlZCBzbyB0aGF0IGl0IGNhbgotCQkgKiBydW4gb24gb3RoZXIgSEFSVHMKLQkJICovCi0JCWlmIChjc3JfcmVhZChDU1JfSEdFSUUpICZhbXA7IEJJVChpKSkgewotCQkJY3NyX2NsZWFyKENTUl9IR0VJRSwgQklUKGkpKTsKLQkJCWt2bV92Y3B1X2tpY2sodmNwdSk7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDs9IGhnY3RybC0mZ3Q7bnJfaGdlaTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQl2Y3B1ID0gaGdjdHJsLSZndDtvd25lcnNbaV07CiYjNDM7CQkJaWYgKCF2Y3B1KQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIFdlIHJlbGVhc2UgaGdjdHJsLSZndDtsb2NrIGJlZm9yZSBub3RpZnlpbmcgSU1TSUMKJiM0MzsJCQkgKiBzbyB0aGF0IHdlIGRvbiYjMzk7dCBoYXZlIGxvY2sgb3JkZXJpbmcgaXNzdWVzLgomIzQzOwkJCSAqLwomIzQzOwkJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7aGdjdHJsLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CQkJLyogTm90aWZ5IElNU0lDICovCiYjNDM7CQkJa3ZtX3Jpc2N2X3ZjcHVfYWlhX2ltc2ljX3JlbGVhc2UodmNwdSk7CiYjNDM7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBXYWtldXAgVkNQVSBpZiBpdCB3YXMgYmxvY2tlZCBzbyB0aGF0IGl0IGNhbgomIzQzOwkJCSAqIHJ1biBvbiBvdGhlciBIQVJUcwomIzQzOwkJCSAqLwomIzQzOwkJCWlmIChjc3JfcmVhZChDU1JfSEdFSUUpICZhbXA7IEJJVChpKSkgewomIzQzOwkJCQljc3JfY2xlYXIoQ1NSX0hHRUlFLCBCSVQoaSkpOwomIzQzOwkJCQlrdm1fdmNwdV9raWNrKHZjcHUpOwomIzQzOwkJCX0KJiM0MzsKJiM0MzsJCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtoZ2N0cmwtJmd0O2xvY2ssIGZsYWdzKTsKIAkJfQogCi0JCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2hnY3RybC0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtoZ2N0cmwtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWhnY3RybC0mZ3Q7c2F2ZWRfdmFsdWUgPSBjc3JfcmVhZChDU1JfSEdFSUUpOwogCX0KIAotCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7aGdjdHJsLSZndDtsb2NrLCBmbGFncyk7Ci0KIAlwdXRfY3B1X3B0cigmYW1wO2FpYV9oZ2VpKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vbWFpbi5jIGIvYXJjaC9yaXNjdi9rdm0vbWFpbi5jCmluZGV4IDA5MjRjNzUxMDBhMmQwLi5iODQ2MWYxYTU2OWZhZSAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9rdm0vbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL21haW4uYwpAQCAtMTAsNiAmIzQzOzEwLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9lcnIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rdm1faG9zdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jcHVfcG0uaCZndDsKICNpbmNsdWRlICZsdDthc20vY3B1ZmVhdHVyZS5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9rdm1fbW11LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2t2bV9uYWNsLmgmZ3Q7CkBAIC0zMywxNCAmIzQzOzM0LDkgQEAgbG9uZyBrdm1fYXJjaF9kZXZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsCiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLWludCBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpCiYjNDM7LyogSW5pdGlhbGl6ZSBoeXBlcnZpc29yIENTUnMgLSBjYWxsZWQgZHVyaW5nIENQVSBvbmxpbmUgYW5kIG5vbi1yZXRlbnRpb24gaWRsZSByZXN1bWUgKi8KJiM0MztzdGF0aWMgdm9pZCBrdm1fcmlzY3ZfY3NyX2VuYWJsZSh2b2lkKQogewotCWludCByYzsKLQotCXJjID0ga3ZtX3Jpc2N2X25hY2xfZW5hYmxlKCk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0KIAljc3Jfd3JpdGUoQ1NSX0hFREVMRUcsIDApOwogCWNzcl93cml0ZShDU1JfSElERUxFRywgMCk7CiAKQEAgLTQ4LDE2ICYjNDM7NDQsMTEgQEAgaW50IGt2bV9hcmNoX2VuYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUodm9pZCkKIAljc3Jfd3JpdGUoQ1NSX0hDT1VOVEVSRU4sIDB4MDIpOwogCiAJY3NyX3dyaXRlKENTUl9IVklQLCAwKTsKLQotCWt2bV9yaXNjdl9haWFfZW5hYmxlKCk7Ci0KLQlyZXR1cm4gMDsKIH0KIAotdm9pZCBrdm1fYXJjaF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKQomIzQzOy8qIENsZWFyIGh5cGVydmlzb3IgQ1NScyAtIGNhbGxlZCBkdXJpbmcgQ1BVIG9mZmxpbmUgYW5kIG5vbi1yZXRlbnRpb24gaWRsZSBlbnRyeSAqLwomIzQzO3N0YXRpYyB2b2lkIGt2bV9yaXNjdl9jc3JfZGlzYWJsZSh2b2lkKQogewotCWt2bV9yaXNjdl9haWFfZGlzYWJsZSgpOwotCiAJLyoKIAkgKiBBZnRlciBjbGVhcmluZyB0aGUgaGlkZWxlZyBDU1IsIHRoZSBob3N0IGtlcm5lbCB3aWxsIHJlY2VpdmUKIAkgKiBzcHVyaW91cyBpbnRlcnJ1cHRzIGlmIGh2aXAgQ1NSIGhhcyBwZW5kaW5nIGludGVycnVwdHMgYW5kIHRoZQpAQCAtNjksOSAmIzQzOzYwLDYyIEBAIHZvaWQga3ZtX2FyY2hfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUodm9pZCkKIAljc3Jfd3JpdGUoQ1NSX0hFREVMRUcsIDApOwogCWNzcl93cml0ZShDU1JfSElERUxFRywgMCk7CiAKJiM0MzsJa3ZtX3Jpc2N2X2NsZWFyX2Zvcm1lcl92Y3B1KCk7CiYjNDM7fQomIzQzOwomIzQzO2ludCBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpCiYjNDM7ewomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CXJjID0ga3ZtX3Jpc2N2X25hY2xfZW5hYmxlKCk7CiYjNDM7CWlmIChyYykKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJa3ZtX3Jpc2N2X2Nzcl9lbmFibGUoKTsKJiM0MzsJa3ZtX3Jpc2N2X2FpYV9lbmFibGUodHJ1ZSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGt2bV9hcmNoX2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpCiYjNDM7ewomIzQzOwlrdm1fcmlzY3ZfYWlhX2Rpc2FibGUodHJ1ZSk7CiYjNDM7CWt2bV9yaXNjdl9jc3JfZGlzYWJsZSgpOwogCWt2bV9yaXNjdl9uYWNsX2Rpc2FibGUoKTsKIH0KIAomIzQzO3N0YXRpYyBpbnQga3ZtX3Jpc2N2X2NwdV9wbV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsIHVuc2lnbmVkIGxvbmcgY21kLCB2b2lkICp2KQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogVG8gYXZvaWQgcmVkdW5kYW50IGRpc2FibGUvZW5hYmxlIG9wZXJhdGlvbnMgKHNpbmNlIEtWTSYjMzk7cwomIzQzOwkgKiBzeXNjb3JlIG9wcyB3aWxsIGhhbmRsZSB0aGUgc3RhdGUgZHVyaW5nIHN5c3RlbSBzdXNwZW5kKSwKJiM0MzsJICogaWdub3JlIENQVV9QTSBldmVudHMgd2hlbiBhIHN5c3RlbSBzdXNwZW5kL3Jlc3VtZSBpcyBpbgomIzQzOwkgKiBwcm9ncmVzcy4KJiM0MzsJICovCiYjNDM7CWlmIChzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX1NVU1BFTkQpCiYjNDM7CQlyZXR1cm4gTk9USUZZX0RPTkU7CiYjNDM7CiYjNDM7CXN3aXRjaCAoY21kKSB7CiYjNDM7CWNhc2UgQ1BVX1BNX0VYSVQ6CiYjNDM7CWNhc2UgQ1BVX1BNX0VOVEVSX0ZBSUxFRDoKJiM0MzsJCWt2bV9yaXNjdl9jc3JfZW5hYmxlKCk7CiYjNDM7CQlrdm1fcmlzY3ZfYWlhX2VuYWJsZShmYWxzZSk7CiYjNDM7CQlyZXR1cm4gTk9USUZZX09LOwomIzQzOwljYXNlIENQVV9QTV9FTlRFUjoKJiM0MzsJCWt2bV9yaXNjdl9haWFfZGlzYWJsZShmYWxzZSk7CiYjNDM7CQlrdm1fcmlzY3ZfY3NyX2Rpc2FibGUoKTsKJiM0MzsJCXJldHVybiBOT1RJRllfT0s7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gTk9USUZZX0RPTkU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sga3ZtX3Jpc2N2X2NwdV9wbV9uYiA9IHsKJiM0MzsJLm5vdGlmaWVyX2NhbGwgPSBrdm1fcmlzY3ZfY3B1X3BtX25vdGlmaWVyLAomIzQzO307CiYjNDM7CiBzdGF0aWMgdm9pZCBrdm1fcmlzY3ZfdGVhcmRvd24odm9pZCkKIHsKIAlrdm1fcmlzY3ZfYWlhX2V4aXQoKTsKQEAgLTE3MiwyMiAmIzQzOzIxNiw0MCBAQCBzdGF0aWMgaW50IF9faW5pdCByaXNjdl9rdm1faW5pdCh2b2lkKQogCiAJa3ZtX3JlZ2lzdGVyX3BlcmZfY2FsbGJhY2tzKCk7CiAKLQlyYyA9IGt2bV9pbml0KHNpemVvZihzdHJ1Y3Qga3ZtX3ZjcHUpLCAwLCBUSElTX01PRFVMRSk7Ci0JaWYgKHJjKSB7Ci0JCWt2bV9yaXNjdl90ZWFyZG93bigpOwotCQlyZXR1cm4gcmM7CiYjNDM7CS8qIFJlZ2lzdGVyIENQVSBQTSBub3RpZmllciBmb3IgQ1BVIGlkbGUgbm9uLXJldGVudGlvbiBzdGF0ZXMgKi8KJiM0MzsJaWYgKElTX0VOQUJMRUQoQ09ORklHX0NQVV9QTSkpIHsKJiM0MzsJCXJjID0gY3B1X3BtX3JlZ2lzdGVyX25vdGlmaWVyKCZhbXA7a3ZtX3Jpc2N2X2NwdV9wbV9uYik7CiYjNDM7CQlpZiAocmMpIHsKJiM0MzsJCQlrdm1fZXJyKCYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIENQVSBQTSBub3RpZmllcjogJWRcbiYjMzQ7LCByYyk7CiYjNDM7CQkJZ290byBlcnJfdGVhcmRvd247CiYjNDM7CQl9CiAJfQogCiYjNDM7CXJjID0ga3ZtX2luaXQoc2l6ZW9mKHN0cnVjdCBrdm1fdmNwdSksIDAsIFRISVNfTU9EVUxFKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJZ290byBlcnJfdW5yZWdpc3Rlcl9jcHVfcG07CiYjNDM7CiAJaWYgKGt2bV9yaXNjdl9haWFfYXZhaWxhYmxlKCkpCiAJCWt2bV9pbmZvKCYjMzQ7QUlBIGF2YWlsYWJsZSB3aXRoICVkIGd1ZXN0IGV4dGVybmFsIGludGVycnVwdHNcbiYjMzQ7LAogCQkJIGF0b21pY19yZWFkKCZhbXA7a3ZtX3Jpc2N2X2FpYV9ucl9oZ2VpKSk7CiAKIAlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJfdW5yZWdpc3Rlcl9jcHVfcG06CiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19DUFVfUE0pKQomIzQzOwkJY3B1X3BtX3VucmVnaXN0ZXJfbm90aWZpZXIoJmFtcDtrdm1fcmlzY3ZfY3B1X3BtX25iKTsKJiM0MztlcnJfdGVhcmRvd246CiYjNDM7CWt2bV9yaXNjdl90ZWFyZG93bigpOwomIzQzOwlyZXR1cm4gcmM7CiB9CiBtb2R1bGVfaW5pdChyaXNjdl9rdm1faW5pdCk7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCByaXNjdl9rdm1fZXhpdCh2b2lkKQogewomIzQzOwkvKiBVbnJlZ2lzdGVyIENQVSBQTSBub3RpZmllciAqLwomIzQzOwlpZiAoSVNfRU5BQkxFRChDT05GSUdfQ1BVX1BNKSkKJiM0MzsJCWNwdV9wbV91bnJlZ2lzdGVyX25vdGlmaWVyKCZhbXA7a3ZtX3Jpc2N2X2NwdV9wbV9uYik7CiYjNDM7CiAJa3ZtX2V4aXQoKTsKIAogCWt2bV9yaXNjdl90ZWFyZG93bigpOwpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vdmNwdS5jIGIvYXJjaC9yaXNjdi9rdm0vdmNwdS5jCmluZGV4IGNmNmUyMzFlNzZlMjU0Li5lNDgzMzhmOTA3ZjQ4OCAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9rdm0vdmNwdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL3ZjcHUuYwpAQCAtMjYsNiAmIzQzOzI2LDE3IEBACiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qga3ZtX3ZjcHUgKiwga3ZtX2Zvcm1lcl92Y3B1KTsKIAomIzQzO3ZvaWQga3ZtX3Jpc2N2X2NsZWFyX2Zvcm1lcl92Y3B1KHZvaWQpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBDbGVhciB0aGUgcGVyLUNQVSBmb3JtZXIgVkNQVSBwb2ludGVyIGJlY2F1c2UgaHlwZXJ2aXNvciBDU1Igc3RhdGUKJiM0MzsJICogd2lsbCBiZSBsb3N0LiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgbmV4dCBWQ1BVIGVudHJ5IHdpbGwgcHJvcGVybHkKJiM0MzsJICogcmVzdG9yZSBhbGwgQ1NScyBpbnN0ZWFkIG9mIGluY29ycmVjdGx5IHNraXBwaW5nIENTUiByZXN0b3JhdGlvbgomIzQzOwkgKiB2aWEgdGhlIGZhc3QtcGF0aCBvcHRpbWl6YXRpb24uCiYjNDM7CSAqLwomIzQzOwlfX3RoaXNfY3B1X3dyaXRlKGt2bV9mb3JtZXJfdmNwdSwgTlVMTCk7CiYjNDM7fQomIzQzOwogY29uc3Qgc3RydWN0IGt2bV9zdGF0c19kZXNjIGt2bV92Y3B1X3N0YXRzX2Rlc2NbXSA9IHsKIAlLVk1fR0VORVJJQ19WQ1BVX1NUQVRTKCksCiAJU1RBVFNfREVTQ19DT1VOVEVSKFZDUFUsIGVjYWxsX2V4aXRfc3RhdCksCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIyOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwMDUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUklTQy1WIEtWTSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgUklTQy1WIEtWTSBjb2RlLiBJdCYjMzk7cyBtYWtpbmcgc29tZSBrZXkgY2hhbmdlcywgc3BlY2lmaWNhbGx5IHRvIGBrdm1fcmlzY3ZfYWlhX2VuYWJsZWAgYW5kIGBrdm1fcmlzY3ZfYWlhX2Rpc2FibGVgLiAgSW50ZXJlc3RpbmcsIHRoZXkmIzM5O3ZlIGFkZGVkIGEgYGZ1bGxfY2xlYW51cGAgYm9vbGVhbiBhcmd1bWVudCB0byB0aGVzZSBmdW5jdGlvbnMuICBUaGF0IHN1Z2dlc3RzIGEgbW9yZSBjb21wcmVoZW5zaXZlIGNsZWFudXAgcm91dGluZSBpcyBub3cgcG9zc2libGUuICBBbmQsIHRoZXJlJiMzOTtzIGEgbmV3IG5vdGlmaWVyLCBga3ZtX3Jpc2N2X2NwdV9wbV9ub3RpZmllcmAsIHdoaWNoIGhhbmRsZXMgQ1BVIHBvd2VyIG1hbmFnZW1lbnQgZXZlbnRzLiAgVGhhdCYjMzk7cyBpbXBvcnRhbnQuIEkgc2VlIHRoZXkmIzM5O3ZlIGFsc28gYWRkZWQgYGt2bV9yaXNjdl9jbGVhcl9mb3JtZXJfdmNwdWAsIHdoaWNoIGNsZWFycyBga3ZtX2Zvcm1lcl92Y3B1YCwgYSBwZXItQ1BVIHZhcmlhYmxlLgoKTXkgZmlyc3QgdGhvdWdodCBpcywgaXMgdGhpcyBmdW5jdGlvbmFsaXR5IGV2ZW4gKnJlYWNoYWJsZSogYW5kIGRvZXMgaXQgKmZ1bmN0aW9uKj8gR2l2ZW4gdGhlIGNoYW5nZXMsIGl0IHNlZW1zIGNsZWFyIHRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgY2FuIGJlIHJlYWNoZWQuIFNwZWNpZmljYWxseSwgdGhpcyBpcyBhIG1vZGlmaWNhdGlvbiB0byBLVk0gb24gUklTQy1WIGFuZCBkZXBlbmRzIG9uIENQVSBQTSBpbnRlZ3JhdGlvbiB3aXRoIEtWTS4gIFRoZXJlZm9yZSwgaXQmIzM5O3MgZGVmaW5pdGVseSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgKmlmKiBLVk0gYW5kIENQVV9QTSBhcmUgZW5hYmxlZCBvbiBSSVNDLVYuIFRoYXQmIzM5O3MgdGhlIGtleS4KClNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3MuICBJIGltbWVkaWF0ZWx5IHRoaW5rLCBJJiMzOTtsbCBuZWVkIGBDT05GSUdfS1ZNYCBhbmQgYENPTkZJR19DUFVfUE1gIHRvIGJlIHNldC4gIFRoZW4sIEkgbmVlZCB0byBjaGVjayBgYXJjaC9yaXNjdi9rdm0vS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgKnNwZWNpZmljKiBSSVNDLVYgS1ZNIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gdGhpcyBuZXcgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTE5LVxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTIxLVx0dHJpc3RhdGUgXCYjMzQ7S2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjI6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY5OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyBLVk0gUG93ZXIgTWFuYWdlbWVudCBvbiBSSVNDLVYqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYGFyY2gvcmlzY3Yva3ZtL21haW4uY2AuIFRoZSBmYWN0IHRoYXQgYENPTkZJR19DUFVfUE1gIGlzIG9uIG15IHJhZGFyIHN1Z2dlc3RzIHdlJiMzOTtyZSBsaWtlbHkgaW50ZXJlc3RlZCBpbiB0aGUgcG93ZXIgbWFuYWdlbWVudCBhc3BlY3RzIG9mIEtWTSB3aXRoaW4gdGhlIFJJU0MtViBhcmNoaXRlY3R1cmUuIEdpdmVuIHRoYXQgd2UgYXJlIGZvY3VzaW5nIG9uIHBvd2VyIG1hbmFnZW1lbnQsIEkgd2FudCB0byBzZWUgaG93IHRoZSBjb2RlIGhhbmRsZXMgdHJhbnNpdGlvbnMgdG8gYW5kIGZyb20gbG93LXBvd2VyIHN0YXRlcyBhdCB0aGUgQ1BVIGxldmVsLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBoeXBlcnZpc29yIGludGVyYWN0cyB3aXRoIHRoZSBndWVzdCYjMzk7cyBwb3dlciBtYW5hZ2VtZW50IHJlcXVlc3RzIGFuZCB0aGUgdW5kZXJseWluZyBSSVNDLVYgaGFyZHdhcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY29kZSBoYW5kbGVzIHRoZSBzdGF0ZSBvZiB0aGUgdkNQVSBjb250ZXh0LCBhbmQgc2VlIGhvdyB0aGUgc2NoZWR1bGluZyBhbmQgaW50ZXJydXB0IGhhbmRsaW5nIHdvcmsgaW4gcmVsYXRpb24gdG8gcG93ZXIgbWFuYWdlbWVudC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igc3BlY2lmaWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gQ1BVIGhvdHBsdWcsIGlkbGUgaGFuZGxpbmcsIGFuZCBhbnkgc3BlY2lmaWMgUklTQy1WIGZlYXR1cmVzIGxldmVyYWdlZCBmb3IgcG93ZXIgc2F2aW5ncyAoZS5nLiwgc3BlY2lmaWMgQ1NScywgZXh0ZW5zaW9ucykuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBpbnRlcmVzdGluZyBudWFuY2VzIG9yIG9wdGltaXphdGlvbnMgdGhhdCBzdGFuZCBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0NQVV9QTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL21haW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9tYWluLmM9MTI2PXN0YXRpYyBpbnQgX19pbml0IHJpc2N2X2t2bV9pbml0KHZvaWQpXG4tLVxuYXJjaC9yaXNjdi9rdm0vbWFpbi5jLTIxOS1cdC8qIFJlZ2lzdGVyIENQVSBQTSBub3RpZmllciBmb3IgQ1BVIGlkbGUgbm9uLXJldGVudGlvbiBzdGF0ZXMgKi9cbmFyY2gvcmlzY3Yva3ZtL21haW4uYzoyMjA6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQ1BVX1BNKSkge1xuYXJjaC9yaXNjdi9rdm0vbWFpbi5jLTIyMS1cdFx0cmMgPSBjcHVfcG1fcmVnaXN0ZXJfbm90aWZpZXIoXHUwMDI2a3ZtX3Jpc2N2X2NwdV9wbV9uYik7XG4tLVxuYXJjaC9yaXNjdi9rdm0vbWFpbi5jLTIzOC1lcnJfdW5yZWdpc3Rlcl9jcHVfcG06XG5hcmNoL3Jpc2N2L2t2bS9tYWluLmM6MjM5Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0NQVV9QTSkpXG5hcmNoL3Jpc2N2L2t2bS9tYWluLmMtMjQwLVx0XHRjcHVfcG1fdW5yZWdpc3Rlcl9ub3RpZmllcihcdTAwMjZrdm1fcmlzY3ZfY3B1X3BtX25iKTtcbi0tXG5hcmNoL3Jpc2N2L2t2bS9tYWluLmM9MjQ3PXN0YXRpYyB2b2lkIF9fZXhpdCByaXNjdl9rdm1fZXhpdCh2b2lkKVxuLS1cbmFyY2gvcmlzY3Yva3ZtL21haW4uYy0yNDktXHQvKiBVbnJlZ2lzdGVyIENQVSBQTSBub3RpZmllciAqL1xuYXJjaC9yaXNjdi9rdm0vbWFpbi5jOjI1MDpcdGlmIChJU19FTkFCTEVEKENPTkZJR19DUFVfUE0pKVxuYXJjaC9yaXNjdi9rdm0vbWFpbi5jLTI1MS1cdFx0Y3B1X3BtX3VucmVnaXN0ZXJfbm90aWZpZXIoXHUwMDI2a3ZtX3Jpc2N2X2NwdV9wbV9uYik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjI6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM3NgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDM1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNL1JJU0MtViBQb3dlciBNYW5hZ2VtZW50IEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIEtWTSBwYXRjaCBmb3IgUklTQy1WLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaG93IGl0IGhhbmRsZXMgcG93ZXIgbWFuYWdlbWVudC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYSBmZXcga2V5IGZ1bmN0aW9ucy4gIEkgc2VlIGBLVk1gIGFuZCBgQ1BVX1BNYCBhcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIGZsYWdzIGludm9sdmVkLiBOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gIEkmIzM5O3ZlIGdvdCBga3ZtX3Jpc2N2X2NwdV9wbV9ub3RpZmllcmAsIGBrdm1fcmlzY3ZfYWlhX2VuYWJsZWAsIGBrdm1fcmlzY3ZfYWlhX2Rpc2FibGVgLCBga3ZtX3Jpc2N2X2NsZWFyX2Zvcm1lcl92Y3B1YCwgYGt2bV9hcmNoX2VuYWJsZV92aXJ0dWFsaXphdGlvbl9jcHVgLCBhbmQgYGt2bV9hcmNoX2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1YCBvbiBteSByYWRhci4KCkZpcnN0LCBsZXQmIzM5O3MgcXVpY2tseSBjaGVjayB0aGUgc2NvcGUgb2YgYGt2bV9yaXNjdl9jcHVfcG1fbm90aWZpZXJgLiBZdXAsIGl0JiMzOTtzIHN0YXRpYywgd2hpY2ggSSYjMzk7bGwga2VlcCBpbiBtaW5kIGZvciBob3cgaXQmIzM5O3MgdXNlZC4gVGhlbiBJIHNlZSB0aGF0IGBrdm1fcmlzY3ZfYWlhX2VuYWJsZWAgYW5kIGBrdm1fcmlzY3ZfYWlhX2Rpc2FibGVgIGFyZSBleHBvcnRlZCBvciBub24tc3RhdGljLiBGaW5hbGx5LCBga3ZtX3Jpc2N2X2NsZWFyX2Zvcm1lcl92Y3B1YCBpcyBub24tc3RhdGljIGFzIHdlbGwuCgpTbywgaGVyZSYjMzk7cyB0aGUgZGlzdGlsbGVkIGxpc3Qgb2Ygc3ltYm9scyBJIG5lZWQgdG8gdW5kZXJzdGFuZDogYGt2bV9yaXNjdl9jcHVfcG1fbm90aWZpZXJgLCBga3ZtX3Jpc2N2X2FpYV9lbmFibGVgLCBga3ZtX3Jpc2N2X2FpYV9kaXNhYmxlYCwgYGt2bV9yaXNjdl9jbGVhcl9mb3JtZXJfdmNwdWAsIGBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1YCwgYW5kIGBrdm1fYXJjaF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdWAuIFRoZXNlIGFyZSB0aGUgY29yZSBlbGVtZW50cy4KClJpZ2h0LCBhbnl0aGluZyBlbHNlPyAgVGhlIHBhdGNoIGFmZmVjdHMgYGFyY2gvcmlzY3Yva3ZtL2FpYS5jYCwgYGFyY2gvcmlzY3Yva3ZtL21haW4uY2AsIGFuZCBgYXJjaC9yaXNjdi9rdm0vdmNwdS5jYC4gVGhhdCBnaXZlcyBtZSBhIHJvYWRtYXAgb2Ygd2hpY2ggZmlsZXMgdG8gY2hlY2sgZm9yIGNvbnRleHQuCgpOb3csIGxldCYjMzk7cyBzZWUgaG93IGBDUFVfUE1gIGlzIGNvbmZpZ3VyZWQuIElzIHRoaXMgYSB1c2VyLXNldHRhYmxlIG9wdGlvbiwgb3IgaXMgaXQgaW1wbGljaXRseSBzZWxlY3RlZCBiYXNlZCBvbiBvdGhlciBzZXR0aW5ncz8gIFRoaXMgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBwb3dlciBtYW5hZ2VtZW50IGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjI6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENQVV9QTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9wb3dlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9wb3dlci9LY29uZmlnPTM4NT1jb25maWcgUE1fR0VORVJJQ19ET01BSU5TX09GXG4tLVxua2VybmVsL3Bvd2VyL0tjb25maWctMzg4LVxua2VybmVsL3Bvd2VyL0tjb25maWc6Mzg5OmNvbmZpZyBDUFVfUE1cbmtlcm5lbC9wb3dlci9LY29uZmlnLTM5MC1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzE5CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJvbSBteSBwZXJzcGVjdGl2ZToKCioqVGhpbmtpbmcgVGhyb3VnaCBDUFUgUG93ZXIgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBgQ1BVX1BNYCBpcyBhIGhpZGRlbiBmbGFnLCBhIGJvb2xlYW4gZGVlcCBpbiB0aGUga2VybmVsLCBsaWtlbHkgbHVya2luZyBpbiB0aGUgc2hhZG93cyBvZiB0aGUgcG93ZXIgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIE15IGd1dCBmZWVsaW5nLCBiYXNlZCBvbiBob3cgdGhlc2UgdGhpbmdzIHVzdWFsbHkgd29yaywgaXMgdGhhdCBpdCYjMzk7cyBwcm9iYWJseSBnZXR0aW5nIHNldCDigJMgZW5hYmxlZCBvciBkaXNhYmxlZCDigJMgZG93bnN0cmVhbSwgcGVyaGFwcyB0cmlnZ2VyZWQgYnkgdGhlIGJyb2FkZXIgc3lzdGVtJiMzOTtzIHN0YXRlLiBJdCYjMzk7cyBhbG1vc3QgY2VydGFpbmx5IHB1bGxlZCBpbiBhcyBhIGRlcGVuZGVuY3kgYnkgY29uZmlndXJhdGlvbnMgbGlrZSBgU1VTUEVORGAgb3IgYENQVV9JRExFYC4gVGhpbmtpbmcgYWJvdXQgdGhlIGNvbnRyb2wgZmxvdywgSSYjMzk7ZCBiZXQgZW5hYmxpbmcgZWl0aGVyIG9mIHRob3NlIHR3byB3b3VsZCB1bHRpbWF0ZWx5IGZsaXAgdGhlIGBDUFVfUE1gIHN3aXRjaC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMgdG8gYmUgc3VyZSwgYnV0IHRoYXQmIzM5O3MgbXkgaW5pdGlhbCBoeXBvdGhlc2lzLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBjb2RlIGNvbmZpcm1zIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgQ1BVX1BNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtL0tjb25maWc9Mj1jb25maWcgQVJNXG4tLVxuYXJjaC9hcm0vS2NvbmZpZy01OC1cdHNlbGVjdCBDTE9ORV9CQUNLV0FSRFNcbmFyY2gvYXJtL0tjb25maWc6NTk6XHRzZWxlY3QgQ1BVX1BNIGlmIFNVU1BFTkQgfHwgQ1BVX0lETEVcbmFyY2gvYXJtL0tjb25maWctNjAtXHRzZWxlY3QgRENBQ0hFX1dPUkRfQUNDRVNTIGlmIEhBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1Ncbi0tXG5hcmNoL2FybS9LY29uZmlnPTk5ND1jb25maWcgQkxfU1dJVENIRVJcbi0tXG5hcmNoL2FybS9LY29uZmlnLTk5Ni1cdGRlcGVuZHMgb24gQklHX0xJVFRMRSBcdTAwMjZcdTAwMjYgTUNQTSBcdTAwMjZcdTAwMjYgSE9UUExVR19DUFUgXHUwMDI2XHUwMDI2IEFSTV9HSUNcbmFyY2gvYXJtL0tjb25maWc6OTk3Olx0c2VsZWN0IENQVV9QTVxuYXJjaC9hcm0vS2NvbmZpZy05OTgtXHRoZWxwXG4tLVxuYXJjaC9hcm02NC9LY29uZmlnPTI9Y29uZmlnIEFSTTY0XG4tLVxuYXJjaC9hcm02NC9LY29uZmlnLTExMS1cdHNlbGVjdCBDT01NT05fQ0xLXG5hcmNoL2FybTY0L0tjb25maWc6MTEyOlx0c2VsZWN0IENQVV9QTSBpZiAoU1VTUEVORCB8fCBDUFVfSURMRSlcbmFyY2gvYXJtNjQvS2NvbmZpZy0xMTMtXHRzZWxlY3QgQ1BVTUFTS19PRkZTVEFDSyBpZiBOUl9DUFVTIFx1MDAzZSAyNTZcbi0tXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnPTI9Y29uZmlnIExPT05HQVJDSFxuLS1cbmFyY2gvbG9vbmdhcmNoL0tjb25maWctODctXHRzZWxlY3QgQ09NTU9OX0NMS1xuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZzo4ODpcdHNlbGVjdCBDUFVfUE1cbmFyY2gvbG9vbmdhcmNoL0tjb25maWctODktXHRzZWxlY3QgRURBQ19TVVBQT1JUXG4tLVxuYXJjaC9taXBzL0tjb25maWc9Mj1jb25maWcgTUlQU1xuLS1cbmFyY2gvbWlwcy9LY29uZmlnLTM1LVx0c2VsZWN0IENQVV9OT19FRkZJQ0lFTlRfRkZTIGlmIChUQVJHRVRfSVNBX1JFViBcdTAwM2MgMSlcbmFyY2gvbWlwcy9LY29uZmlnOjM2Olx0c2VsZWN0IENQVV9QTSBpZiBDUFVfSURMRSB8fCBTVVNQRU5EXG5hcmNoL21pcHMvS2NvbmZpZy0zNy1cdHNlbGVjdCBHRU5FUklDX0FUT01JQzY0IGlmICE2NEJJVFxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZz0xMz1jb25maWcgUklTQ1Zcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWctOTgtXHRzZWxlY3QgQ1BVX05PX0VGRklDSUVOVF9GRlMgaWYgIVJJU0NWX0lTQV9aQkJcbmFyY2gvcmlzY3YvS2NvbmZpZzo5OTpcdHNlbGVjdCBDUFVfUE0gaWYgQ1BVX0lETEUgfHwgSElCRVJOQVRJT04gfHwgU1VTUEVORFxuYXJjaC9yaXNjdi9LY29uZmlnLTEwMC1cdHNlbGVjdCBEWU5BTUlDX0ZUUkFDRSBpZiBGVU5DVElPTl9UUkFDRVJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjI6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxMTEKCQkJCQkJCW91dHB1dDogMjM1CgkJCQkJCQl0aG91Z2h0czogNTAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBSSVNDLVYgS1ZNIGFuZCBDUFUgUG93ZXIgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgYENQVV9JRExFYCwgYFNVU1BFTkRgLCBvciBgSElCRVJOQVRJT05gIG9wdGlvbnMgcmVsYXRlIHRvIGBDUFVfUE1gIG9uIFJJU0MtVi4gSXQgc2VlbXMgbGlrZSBzZWxlY3RpbmcgYW55IG9mIHRoZSBmb3JtZXIgYXV0b21hdGljYWxseSBpbXBsaWVzIHRoZSBsYXR0ZXIsIHdoaWNoIGlzIGdyZWF0LiBJIGNhbiBqdXN0IGV4cGxpY2l0bHkgc2V0IGBDUFVfSURMRWAgYW5kIGBTVVNQRU5EYCBpbiB0aGUgY29uZmlndXJhdGlvbi4gU3l6a2FsbGVyLCB3aXRoIGl0cyBkZXBlbmRlbmN5IHJlc29sdXRpb24gY2FwYWJpbGl0aWVzLCBzaG91bGQgYmUgYWJsZSB0byBoYW5kbGUgdGhlIHVuZGVybHlpbmcgZGVwZW5kZW5jaWVzLCBldmVuIGlmIGBDUFVfUE1gIGl0c2VsZiBpcyBoaWRkZW4uIFRoYXQgc2ltcGxpZmllcyB0aGluZ3MuCgpTbywgdGhlIGtleSBjb25maWdzIEkmIzM5O20gZGVhbGluZyB3aXRoIGFyZSBgS1ZNYCwgYENQVV9JRExFYCwgYW5kIGBTVVNQRU5EYC4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgZm9jdXMgc3ltYm9scy4gSSYjMzk7dmUgZ290IHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIGFueXRoaW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gdGVzdGluZyB0aGUgZm9jdXMgc3ltYm9sczogYGt2bV9yaXNjdl9jcHVfcG1fbm90aWZpZXJgLCBga3ZtX3Jpc2N2X2FpYV9lbmFibGVgLCBga3ZtX3Jpc2N2X2FpYV9kaXNhYmxlYCwgYGt2bV9yaXNjdl9jbGVhcl9mb3JtZXJfdmNwdWAsIGBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1YCwgYW5kIGBrdm1fYXJjaF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdWAuCgpPaCwgYW5kIHRoZXJlIGFyZSBzb21lIG90aGVyIGZ1bmN0aW9ucyB0aGF0IGFyZSBhbHNvIHJlbGV2YW50OiBga3ZtX3Jpc2N2X2Nzcl9lbmFibGVgIGFuZCBga3ZtX3Jpc2N2X2Nzcl9kaXNhYmxlYC4gSSBzaG91bGQgZGVmaW5pdGVseSBpbmNsdWRlIHRob3NlIGluIHRoZSBmdXp6aW5nIHNjb3BlLgoKQSBxdWljayBjaGVjayBjb25maXJtcyB0aGF0IGBrdm1fcmlzY3ZfY3NyX2VuYWJsZWAgYW5kIGBrdm1fcmlzY3ZfY3NyX2Rpc2FibGVgIGFyZSBib3RoIHN0YXRpYywgd2hpY2ggbWVhbnMgdGhleSBhcmUgb25seSB2aXNpYmxlIHdpdGhpbiB0aGVpciByZXNwZWN0aXZlIHNvdXJjZSBmaWxlcy4gSSYjMzk7bGwgYWRkIHRoZW0gdG8gbXkgZm9jdXMgc3ltYm9scy4KClNvLCBteSBmaW5hbCBsaXN0IG9mIGZvY3VzIHN5bWJvbHMgaXM6CmBrdm1fcmlzY3ZfY3B1X3BtX25vdGlmaWVyYApga3ZtX3Jpc2N2X2FpYV9lbmFibGVgCmBrdm1fcmlzY3ZfYWlhX2Rpc2FibGVgCmBrdm1fcmlzY3ZfY2xlYXJfZm9ybWVyX3ZjcHVgCmBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1YApga3ZtX2FyY2hfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHVgCmBrdm1fcmlzY3ZfY3NyX2VuYWJsZWAKYGt2bV9yaXNjdl9jc3JfZGlzYWJsZWAKCkFscmlnaHQsIHRoZSBwYXRjaCBtb2RpZmllcyBSSVNDLVYgS1ZNIHRvIG1hbmFnZSBDUFUgcG93ZXIgZXZlbnRzIGZvciB0aG9zZSBub24tcmV0ZW50aW9uIGlkbGUgc3RhdGVzLiBUaGlzIGludm9sdmVzIGEgQ1BVIFBNIG5vdGlmaWVyIGFuZCBtb2RpZmljYXRpb25zIHRvIEFJQSBlbmFibGUvZGlzYWJsZSBwYXRocyB0byBzdXBwb3J0IHRoaXMgQ1NSIHNhdmUvcmVzdG9yZSBtZWNoYW5pc20uIFRoaXMgaXMgYSBjb3JlIEtWTSBjaGFuZ2UsIGFuZCBpdCYjMzk7cyBhYnNvbHV0ZWx5IGNyaXRpY2FsIHRvIGZ1enogdGhpcyB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gdmlydHVhbGl6YXRpb24gb3IgcG93ZXIgbWFuYWdlbWVudC4KClRpbWUgdG8gY2FsbCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjI6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtDUFVfSURMRSYjMzQ7LAogICAgJiMzNDtTVVNQRU5EJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3Jpc2N2X2NwdV9wbV9ub3RpZmllciYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfYWlhX2VuYWJsZSYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfYWlhX2Rpc2FibGUmIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X2NsZWFyX2Zvcm1lcl92Y3B1JiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX2VuYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUmIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X2Nzcl9lbmFibGUmIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X2Nzcl9kaXNhYmxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhpcyBwYXRjaCBtb2RpZmllcyBSSVNDLVYgS1ZNIHRvIGhhbmRsZSBDUFUgcG93ZXIgbWFuYWdlbWVudCBldmVudHMgKENQVV9QTSkgZm9yIG5vbi1yZXRlbnRpb24gaWRsZSBzdGF0ZXMuIEl0IGludHJvZHVjZXMgYSBDUFUgUE0gbm90aWZpZXIgYW5kIG1vZGlmaWVzIEFJQSAoQWR2YW5jZWQgSW50ZXJydXB0IEFyY2hpdGVjdHVyZSkgZW5hYmxlL2Rpc2FibGUgcGF0aHMgdG8gc3VwcG9ydCBsaWdodHdlaWdodCBDU1Igc2F2ZS9yZXN0b3JlLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgS1ZNIGxvZ2ljIG9uIFJJU0MtViBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gdmlydHVhbGl6YXRpb24gb3IgcG93ZXIgbWFuYWdlbWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0NQVV9JRExFJiMzNDssCiAgICAmIzM0O1NVU1BFTkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fcmlzY3ZfY3B1X3BtX25vdGlmaWVyJiMzNDssCiAgICAmIzM0O2t2bV9yaXNjdl9haWFfZW5hYmxlJiMzNDssCiAgICAmIzM0O2t2bV9yaXNjdl9haWFfZGlzYWJsZSYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfY2xlYXJfZm9ybWVyX3ZjcHUmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfZW5hYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfY3NyX2VuYWJsZSYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfY3NyX2Rpc2FibGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIG1vZGlmaWVzIFJJU0MtViBLVk0gdG8gaGFuZGxlIENQVSBwb3dlciBtYW5hZ2VtZW50IGV2ZW50cyAoQ1BVX1BNKSBmb3Igbm9uLXJldGVudGlvbiBpZGxlIHN0YXRlcy4gSXQgaW50cm9kdWNlcyBhIENQVSBQTSBub3RpZmllciBhbmQgbW9kaWZpZXMgQUlBIChBZHZhbmNlZCBJbnRlcnJ1cHQgQXJjaGl0ZWN0dXJlKSBlbmFibGUvZGlzYWJsZSBwYXRocyB0byBzdXBwb3J0IGxpZ2h0d2VpZ2h0IENTUiBzYXZlL3Jlc3RvcmUuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBLVk0gbG9naWMgb24gUklTQy1WIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBpbiB2aXJ0dWFsaXphdGlvbiBvciBwb3dlciBtYW5hZ2VtZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjI6NDQ6MzEuNTA0Nzg1NDA5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE1ODYyNDIwMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJDUFVfSURMRVwiLFxuICAgIFwiU1VTUEVORFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9yaXNjdl9jcHVfcG1fbm90aWZpZXJcIixcbiAgICBcImt2bV9yaXNjdl9haWFfZW5hYmxlXCIsXG4gICAgXCJrdm1fcmlzY3ZfYWlhX2Rpc2FibGVcIixcbiAgICBcImt2bV9yaXNjdl9jbGVhcl9mb3JtZXJfdmNwdVwiLFxuICAgIFwia3ZtX2FyY2hfZW5hYmxlX3ZpcnR1YWxpemF0aW9uX2NwdVwiLFxuICAgIFwia3ZtX2FyY2hfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHVcIixcbiAgICBcImt2bV9yaXNjdl9jc3JfZW5hYmxlXCIsXG4gICAgXCJrdm1fcmlzY3ZfY3NyX2Rpc2FibGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggbW9kaWZpZXMgUklTQy1WIEtWTSB0byBoYW5kbGUgQ1BVIHBvd2VyIG1hbmFnZW1lbnQgZXZlbnRzIChDUFVfUE0pIGZvciBub24tcmV0ZW50aW9uIGlkbGUgc3RhdGVzLiBJdCBpbnRyb2R1Y2VzIGEgQ1BVIFBNIG5vdGlmaWVyIGFuZCBtb2RpZmllcyBBSUEgKEFkdmFuY2VkIEludGVycnVwdCBBcmNoaXRlY3R1cmUpIGVuYWJsZS9kaXNhYmxlIHBhdGhzIHRvIHN1cHBvcnQgbGlnaHR3ZWlnaHQgQ1NSIHNhdmUvcmVzdG9yZS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEtWTSBsb2dpYyBvbiBSSVNDLVYgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIHZpcnR1YWxpemF0aW9uIG9yIHBvd2VyIG1hbmFnZW1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIyOjQ0OjMxLjUwNDc5MzU5OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxNDUxMzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMTI1MTY3MjE2ZmEyM2RhZThmY2FmZGNjNzFkOWYyOTA3ZDRiNTRlZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1biAyNiAyMjo0NDozMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9haWEuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2FpYS5oXFxuaW5kZXggYzY3ZWM1YWMwYTE0NmIuLjdjMWMzMjUwNTk4ZmIwIDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2FpYS5oXFxuKysrIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fYWlhLmhcXG5AQCAtMTY1LDggKzE2NSwxOSBAQCBpbnQga3ZtX3Jpc2N2X2FpYV9hbGxvY19oZ2VpKGludCBjcHUsIHN0cnVjdCBrdm1fdmNwdSAqb3duZXIsXFxuIFxcdFxcdFxcdCAgICAgdm9pZCBfX2lvbWVtICoqaGdlaV92YSwgcGh5c19hZGRyX3QgKmhnZWlfcGEpO1xcbiB2b2lkIGt2bV9yaXNjdl9haWFfZnJlZV9oZ2VpKGludCBjcHUsIGludCBoZ2VpKTtcXG4gXFxuLXZvaWQga3ZtX3Jpc2N2X2FpYV9lbmFibGUodm9pZCk7XFxuLXZvaWQga3ZtX3Jpc2N2X2FpYV9kaXNhYmxlKHZvaWQpO1xcbisvKipcXG4rICoga3ZtX3Jpc2N2X2FpYV9lbmFibGUoKSAtIEVuYWJsZSBBSUEgc3VwcG9ydCBvbiBjdXJyZW50IENQVVxcbisgKiBAZnVsbF9jbGVhbnVwOiB0cnVlID0gZnVsbCBoYXJkd2FyZSBpbml0IChDUFUgaG90cGx1Zy9tb2R1bGUgbG9hZCksXFxuKyAqICAgICAgICAgICAgICAgIGZhbHNlID0gbGlnaHR3ZWlnaHQgQ1NSIHJlc3RvcmUgKENQVSBub24tcmV0ZW50aW9uIGlkbGUgcmVzdW1lKVxcbisgKi9cXG4rdm9pZCBrdm1fcmlzY3ZfYWlhX2VuYWJsZShib29sIGZ1bGxfY2xlYW51cCk7XFxuK1xcbisvKipcXG4rICoga3ZtX3Jpc2N2X2FpYV9kaXNhYmxlKCkgLSBEaXNhYmxlIEFJQSBzdXBwb3J0IG9uIGN1cnJlbnQgQ1BVXFxuKyAqIEBmdWxsX2NsZWFudXA6IHRydWUgPSBmdWxsIGhhcmR3YXJlIGNsZWFudXAgKENQVSBob3RwbHVnL21vZHVsZSBleGl0KSxcXG4rICogICAgICAgICAgICAgICAgZmFsc2UgPSBsaWdodHdlaWdodCBDU1Igc2F2ZSAoQ1BVIG5vbi1yZXRlbnRpb24gaWRsZSBlbnRyeSlcXG4rICovXFxuK3ZvaWQga3ZtX3Jpc2N2X2FpYV9kaXNhYmxlKGJvb2wgZnVsbF9jbGVhbnVwKTtcXG4gaW50IGt2bV9yaXNjdl9haWFfaW5pdCh2b2lkKTtcXG4gdm9pZCBrdm1fcmlzY3ZfYWlhX2V4aXQodm9pZCk7XFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG5pbmRleCA2MDAxN2NlZWM5ZDJhZi4uODA4YjRlZTFiZDEwYWMgMTAwNjQ0XFxuLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuKysrIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuQEAgLTMxOSw2ICszMTksOCBAQCBib29sIGt2bV9yaXNjdl92Y3B1X3N0b3BwZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gXFxuIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfcmVjb3JkX3N0ZWFsX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG4gXFxuK3ZvaWQga3ZtX3Jpc2N2X2NsZWFyX2Zvcm1lcl92Y3B1KHZvaWQpO1xcbitcXG4gLyogRmxhZ3MgcmVwcmVzZW50aW5nIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIGRldGFpbHMgKi9cXG4gREVDTEFSRV9TVEFUSUNfS0VZX0ZBTFNFKGt2bV9yaXNjdl92c3N0YWdlX3RsYl9ub19ncGEpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vYWlhLmMgYi9hcmNoL3Jpc2N2L2t2bS9haWEuY1xcbmluZGV4IGJhZmIwMDljNWNlNTU5Li40Y2YzNTFmOTFjNjQzZiAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9haWEuY1xcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL2FpYS5jXFxuQEAgLTI1LDYgKzI1LDcgQEAgc3RydWN0IGFpYV9oZ2VpX2NvbnRyb2wge1xcbiBcXHR1bnNpZ25lZCBsb25nIGZyZWVfYml0bWFwO1xcbiBcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKm93bmVyc1tCSVRTX1BFUl9MT05HXTtcXG4gXFx0dW5zaWduZWQgaW50IG5yX2hnZWk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc2F2ZWRfdmFsdWU7XFxuIH07XFxuIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgYWlhX2hnZWlfY29udHJvbCwgYWlhX2hnZWkpO1xcbiBzdGF0aWMgaW50IGhnZWlfcGFyZW50X2lycTtcXG5AQCAtNTMyLDUwICs1MzMsNTkgQEAgc3RhdGljIHZvaWQgYWlhX2hnZWlfZXhpdCh2b2lkKVxcbiBcXHRmcmVlX3BlcmNwdV9pcnEoaGdlaV9wYXJlbnRfaXJxLCBcXHUwMDI2YWlhX2hnZWkpO1xcbiB9XFxuIFxcbi12b2lkIGt2bV9yaXNjdl9haWFfZW5hYmxlKHZvaWQpXFxuK3ZvaWQga3ZtX3Jpc2N2X2FpYV9lbmFibGUoYm9vbCBmdWxsX2NsZWFudXApXFxuIHtcXG4tXFx0Y29uc3Qgc3RydWN0IGltc2ljX2dsb2JhbF9jb25maWcgKmdjO1xcbi1cXHRjb25zdCBzdHJ1Y3QgaW1zaWNfbG9jYWxfY29uZmlnICpsYztcXG4gXFx0c3RydWN0IGFpYV9oZ2VpX2NvbnRyb2wgKmhnY3RybDtcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4tXFx0aW50IGFpYV9ucl9oZ2VpO1xcbiBcXG4gXFx0aWYgKCFrdm1fcmlzY3ZfYWlhX2F2YWlsYWJsZSgpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRnYyA9IGltc2ljX2dldF9nbG9iYWxfY29uZmlnKCk7XFxuLVxcdGxjID0gKGdjKSA/IHRoaXNfY3B1X3B0cihnYy1cXHUwMDNlbG9jYWwpIDogTlVMTDtcXG4gXFx0aGdjdHJsID0gdGhpc19jcHVfcHRyKFxcdTAwMjZhaWFfaGdlaSk7XFxuIFxcbi1cXHQvKiBGaWd1cmUtb3V0IG51bWJlciBvZiBiaXRzIGluIEhHRUlFICovXFxuLVxcdGNzcl93cml0ZShDU1JfSEdFSUUsIC0xVUwpO1xcbi1cXHRoZ2N0cmwtXFx1MDAzZW5yX2hnZWkgPSBmbHNfbG9uZyhjc3JfcmVhZChDU1JfSEdFSUUpKTtcXG4tXFx0Y3NyX3dyaXRlKENTUl9IR0VJRSwgMCk7XFxuLVxcdGlmIChoZ2N0cmwtXFx1MDAzZW5yX2hnZWkpXFxuLVxcdFxcdGhnY3RybC1cXHUwMDNlbnJfaGdlaS0tO1xcbitcXHRpZiAoZnVsbF9jbGVhbnVwKSB7XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBpbXNpY19nbG9iYWxfY29uZmlnICpnYztcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IGltc2ljX2xvY2FsX2NvbmZpZyAqbGM7XFxuK1xcdFxcdGludCBhaWFfbnJfaGdlaTtcXG4gXFxuLVxcdC8qXFxuLVxcdCAqIE51bWJlciBvZiB1c2FibGUgcGVyLUhBUlQgSEdFSSBsaW5lcyBzaG91bGQgYmUgbWluaW11bSBvZlxcbi1cXHQgKiBwZXItSEFSVCBJTVNJQyBndWVzdCBmaWxlcyBhbmQgbnVtYmVyIG9mIGJpdHMgaW4gSEdFSUUuXFxuLVxcdCAqL1xcbi1cXHRpZiAobGMpXFxuLVxcdFxcdGhnY3RybC1cXHUwMDNlbnJfaGdlaSA9IG1pbigodWxvbmcpaGdjdHJsLVxcdTAwM2Vucl9oZ2VpLCBsYy1cXHUwMDNlbnJfZ3Vlc3RfZmlsZXMpO1xcbi1cXHRlbHNlXFxuLVxcdFxcdGhnY3RybC1cXHUwMDNlbnJfaGdlaSA9IDA7XFxuK1xcdFxcdGdjID0gaW1zaWNfZ2V0X2dsb2JhbF9jb25maWcoKTtcXG4rXFx0XFx0bGMgPSAoZ2MpID8gdGhpc19jcHVfcHRyKGdjLVxcdTAwM2Vsb2NhbCkgOiBOVUxMO1xcbiBcXG4tXFx0LyogVXBkYXRlIHRoZSBudW1iZXIgb2YgSU1TSUMgZ3Vlc3QgZmlsZXMgYWNyb3NzIGFsbCBIQVJUcyAqL1xcbi1cXHRhaWFfbnJfaGdlaSA9IGF0b21pY19yZWFkKFxcdTAwMjZrdm1fcmlzY3ZfYWlhX25yX2hnZWkpO1xcbi1cXHRkbyB7XFxuLVxcdFxcdGlmIChhaWFfbnJfaGdlaSBcXHUwMDNjPSBoZ2N0cmwtXFx1MDAzZW5yX2hnZWkpXFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHR9IHdoaWxlICghYXRvbWljX3RyeV9jbXB4Y2hnKFxcdTAwMjZrdm1fcmlzY3ZfYWlhX25yX2hnZWksIFxcdTAwMjZhaWFfbnJfaGdlaSwgaGdjdHJsLVxcdTAwM2Vucl9oZ2VpKSk7XFxuK1xcdFxcdC8qIEZpZ3VyZS1vdXQgbnVtYmVyIG9mIGJpdHMgaW4gSEdFSUUgKi9cXG4rXFx0XFx0Y3NyX3dyaXRlKENTUl9IR0VJRSwgLTFVTCk7XFxuK1xcdFxcdGhnY3RybC1cXHUwMDNlbnJfaGdlaSA9IGZsc19sb25nKGNzcl9yZWFkKENTUl9IR0VJRSkpO1xcbitcXHRcXHRjc3Jfd3JpdGUoQ1NSX0hHRUlFLCAwKTtcXG4rXFx0XFx0aWYgKGhnY3RybC1cXHUwMDNlbnJfaGdlaSlcXG4rXFx0XFx0XFx0aGdjdHJsLVxcdTAwM2Vucl9oZ2VpLS07XFxuIFxcbi1cXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmhnY3RybC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbi1cXHRpZiAoIWhnY3RybC1cXHUwMDNlZnJlZV9iaXRtYXBfaW5pdGlhbGl6ZWQpIHtcXG4tXFx0XFx0aGdjdHJsLVxcdTAwM2VmcmVlX2JpdG1hcCA9IChoZ2N0cmwtXFx1MDAzZW5yX2hnZWkpID8gR0VOTUFTS19VTEwoaGdjdHJsLVxcdTAwM2Vucl9oZ2VpLCAxKSA6IDA7XFxuLVxcdFxcdGhnY3RybC1cXHUwMDNlZnJlZV9iaXRtYXBfaW5pdGlhbGl6ZWQgPSB0cnVlO1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBOdW1iZXIgb2YgdXNhYmxlIHBlci1IQVJUIEhHRUkgbGluZXMgc2hvdWxkIGJlIG1pbmltdW0gb2ZcXG4rXFx0XFx0ICogcGVyLUhBUlQgSU1TSUMgZ3Vlc3QgZmlsZXMgYW5kIG51bWJlciBvZiBiaXRzIGluIEhHRUlFLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKGxjKVxcbitcXHRcXHRcXHRoZ2N0cmwtXFx1MDAzZW5yX2hnZWkgPSBtaW4oKHVsb25nKWhnY3RybC1cXHUwMDNlbnJfaGdlaSwgbGMtXFx1MDAzZW5yX2d1ZXN0X2ZpbGVzKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRoZ2N0cmwtXFx1MDAzZW5yX2hnZWkgPSAwO1xcbitcXG4rXFx0XFx0LyogVXBkYXRlIHRoZSBudW1iZXIgb2YgSU1TSUMgZ3Vlc3QgZmlsZXMgYWNyb3NzIGFsbCBIQVJUcyAqL1xcbitcXHRcXHRhaWFfbnJfaGdlaSA9IGF0b21pY19yZWFkKFxcdTAwMjZrdm1fcmlzY3ZfYWlhX25yX2hnZWkpO1xcbitcXHRcXHRkbyB7XFxuK1xcdFxcdFxcdGlmIChhaWFfbnJfaGdlaSBcXHUwMDNjPSBoZ2N0cmwtXFx1MDAzZW5yX2hnZWkpXFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9IHdoaWxlICghYXRvbWljX3RyeV9jbXB4Y2hnKFxcdTAwMjZrdm1fcmlzY3ZfYWlhX25yX2hnZWksIFxcdTAwMjZhaWFfbnJfaGdlaSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBoZ2N0cmwtXFx1MDAzZW5yX2hnZWkpKTtcXG4rXFxuK1xcdFxcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2aGdjdHJsLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdFxcdGlmICghaGdjdHJsLVxcdTAwM2VmcmVlX2JpdG1hcF9pbml0aWFsaXplZCkge1xcbitcXHRcXHRcXHRoZ2N0cmwtXFx1MDAzZWZyZWVfYml0bWFwID0gKGhnY3RybC1cXHUwMDNlbnJfaGdlaSkgP1xcbitcXHRcXHRcXHRcXHRcXHQgICAgICBHRU5NQVNLX1VMTChoZ2N0cmwtXFx1MDAzZW5yX2hnZWksIDEpIDpcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgMDtcXG4rXFx0XFx0XFx0aGdjdHJsLVxcdTAwM2VmcmVlX2JpdG1hcF9pbml0aWFsaXplZCA9IHRydWU7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmhnY3RybC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRjc3Jfd3JpdGUoQ1NSX0hHRUlFLCBoZ2N0cmwtXFx1MDAzZXNhdmVkX3ZhbHVlKTtcXG4gXFx0fVxcbi1cXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2aGdjdHJsLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcbiBcXHRjc3Jfd3JpdGUoQ1NSX0hWSUNUTCwgYWlhX2h2aWN0bF92YWx1ZShmYWxzZSkpO1xcbiBcXHRjc3Jfd3JpdGUoQ1NSX0hWSVBSSU8xLCAweDApO1xcbkBAIC01ODcsMTYgKzU5NywxNyBAQCB2b2lkIGt2bV9yaXNjdl9haWFfZW5hYmxlKHZvaWQpXFxuIFxcdGNzcl93cml0ZShDU1JfSFZJUFJJTzJILCAweDApO1xcbiAjZW5kaWZcXG4gXFxuLVxcdC8qIEVuYWJsZSBwZXItQ1BVIFNHRUkgaW50ZXJydXB0ICovXFxuLVxcdGVuYWJsZV9wZXJjcHVfaXJxKGhnZWlfcGFyZW50X2lycSxcXG4tXFx0XFx0XFx0ICBpcnFfZ2V0X3RyaWdnZXJfdHlwZShoZ2VpX3BhcmVudF9pcnEpKTtcXG4rXFx0aWYgKGZ1bGxfY2xlYW51cClcXG4rXFx0XFx0ZW5hYmxlX3BlcmNwdV9pcnEoaGdlaV9wYXJlbnRfaXJxLFxcbitcXHRcXHRcXHRcXHQgIGlycV9nZXRfdHJpZ2dlcl90eXBlKGhnZWlfcGFyZW50X2lycSkpO1xcbiBcXHRjc3Jfc2V0KENTUl9ISUUsIEJJVChJUlFfU19HRVhUKSk7XFxuK1xcbiBcXHQvKiBFbmFibGUgSVJRIGZpbHRlcmluZyBmb3Igb3ZlcmZsb3cgaW50ZXJydXB0IG9ubHkgaWYgc3Njb2ZwbWYgaXMgcHJlc2VudCAqL1xcbiBcXHRpZiAoX19yaXNjdl9pc2FfZXh0ZW5zaW9uX2F2YWlsYWJsZShOVUxMLCBSSVNDVl9JU0FfRVhUX1NTQ09GUE1GKSlcXG4gXFx0XFx0Y3NyX3NldChDU1JfSFZJRU4sIEJJVChJUlFfUE1VX09WRikpO1xcbiB9XFxuIFxcbi12b2lkIGt2bV9yaXNjdl9haWFfZGlzYWJsZSh2b2lkKVxcbit2b2lkIGt2bV9yaXNjdl9haWFfZGlzYWJsZShib29sIGZ1bGxfY2xlYW51cClcXG4ge1xcbiBcXHRpbnQgaTtcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG5AQCAtNjA5LDQyICs2MjAsNDkgQEAgdm9pZCBrdm1fcmlzY3ZfYWlhX2Rpc2FibGUodm9pZClcXG4gXFxuIFxcdGlmIChfX3Jpc2N2X2lzYV9leHRlbnNpb25fYXZhaWxhYmxlKE5VTEwsIFJJU0NWX0lTQV9FWFRfU1NDT0ZQTUYpKVxcbiBcXHRcXHRjc3JfY2xlYXIoQ1NSX0hWSUVOLCBCSVQoSVJRX1BNVV9PVkYpKTtcXG4tXFx0LyogRGlzYWJsZSBwZXItQ1BVIFNHRUkgaW50ZXJydXB0ICovXFxuLVxcdGNzcl9jbGVhcihDU1JfSElFLCBCSVQoSVJRX1NfR0VYVCkpO1xcbi1cXHRkaXNhYmxlX3BlcmNwdV9pcnEoaGdlaV9wYXJlbnRfaXJxKTtcXG4gXFxuLVxcdGNzcl93cml0ZShDU1JfSFZJQ1RMLCBhaWFfaHZpY3RsX3ZhbHVlKGZhbHNlKSk7XFxuLVxcbi1cXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmhnY3RybC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbi1cXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjPSBoZ2N0cmwtXFx1MDAzZW5yX2hnZWk7IGkrKykge1xcbi1cXHRcXHR2Y3B1ID0gaGdjdHJsLVxcdTAwM2Vvd25lcnNbaV07XFxuLVxcdFxcdGlmICghdmNwdSlcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdGlmIChmdWxsX2NsZWFudXApIHtcXG4rXFx0XFx0LyogRGlzYWJsZSBwZXItQ1BVIFNHRUkgaW50ZXJydXB0ICovXFxuK1xcdFxcdGNzcl9jbGVhcihDU1JfSElFLCBCSVQoSVJRX1NfR0VYVCkpO1xcbitcXHRcXHRkaXNhYmxlX3BlcmNwdV9pcnEoaGdlaV9wYXJlbnRfaXJxKTtcXG4rXFx0fVxcbiBcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogV2UgcmVsZWFzZSBoZ2N0cmwtXFx1MDAzZWxvY2sgYmVmb3JlIG5vdGlmeWluZyBJTVNJQ1xcbi1cXHRcXHQgKiBzbyB0aGF0IHdlIGRvbid0IGhhdmUgbG9jayBvcmRlcmluZyBpc3N1ZXMuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2aGdjdHJsLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdGNzcl93cml0ZShDU1JfSFZJQ1RMLCBhaWFfaHZpY3RsX3ZhbHVlKGZhbHNlKSk7XFxuIFxcbi1cXHRcXHQvKiBOb3RpZnkgSU1TSUMgKi9cXG4tXFx0XFx0a3ZtX3Jpc2N2X3ZjcHVfYWlhX2ltc2ljX3JlbGVhc2UodmNwdSk7XFxuK1xcdGlmIChmdWxsX2NsZWFudXApIHtcXG4rXFx0XFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZoZ2N0cmwtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gXFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIFdha2V1cCBWQ1BVIGlmIGl0IHdhcyBibG9ja2VkIHNvIHRoYXQgaXQgY2FuXFxuLVxcdFxcdCAqIHJ1biBvbiBvdGhlciBIQVJUc1xcbi1cXHRcXHQgKi9cXG4tXFx0XFx0aWYgKGNzcl9yZWFkKENTUl9IR0VJRSkgXFx1MDAyNiBCSVQoaSkpIHtcXG4tXFx0XFx0XFx0Y3NyX2NsZWFyKENTUl9IR0VJRSwgQklUKGkpKTtcXG4tXFx0XFx0XFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjPSBoZ2N0cmwtXFx1MDAzZW5yX2hnZWk7IGkrKykge1xcbitcXHRcXHRcXHR2Y3B1ID0gaGdjdHJsLVxcdTAwM2Vvd25lcnNbaV07XFxuK1xcdFxcdFxcdGlmICghdmNwdSlcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBXZSByZWxlYXNlIGhnY3RybC1cXHUwMDNlbG9jayBiZWZvcmUgbm90aWZ5aW5nIElNU0lDXFxuK1xcdFxcdFxcdCAqIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSBsb2NrIG9yZGVyaW5nIGlzc3Vlcy5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZoZ2N0cmwtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFxuK1xcdFxcdFxcdC8qIE5vdGlmeSBJTVNJQyAqL1xcbitcXHRcXHRcXHRrdm1fcmlzY3ZfdmNwdV9haWFfaW1zaWNfcmVsZWFzZSh2Y3B1KTtcXG4rXFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIFdha2V1cCBWQ1BVIGlmIGl0IHdhcyBibG9ja2VkIHNvIHRoYXQgaXQgY2FuXFxuK1xcdFxcdFxcdCAqIHJ1biBvbiBvdGhlciBIQVJUc1xcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aWYgKGNzcl9yZWFkKENTUl9IR0VJRSkgXFx1MDAyNiBCSVQoaSkpIHtcXG4rXFx0XFx0XFx0XFx0Y3NyX2NsZWFyKENTUl9IR0VJRSwgQklUKGkpKTtcXG4rXFx0XFx0XFx0XFx0a3ZtX3ZjcHVfa2ljayh2Y3B1KTtcXG4rXFx0XFx0XFx0fVxcbitcXG4rXFx0XFx0XFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZoZ2N0cmwtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZoZ2N0cmwtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0XFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmhnY3RybC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRoZ2N0cmwtXFx1MDAzZXNhdmVkX3ZhbHVlID0gY3NyX3JlYWQoQ1NSX0hHRUlFKTtcXG4gXFx0fVxcbiBcXG4tXFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmhnY3RybC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbi1cXG4gXFx0cHV0X2NwdV9wdHIoXFx1MDAyNmFpYV9oZ2VpKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vbWFpbi5jIGIvYXJjaC9yaXNjdi9rdm0vbWFpbi5jXFxuaW5kZXggMDkyNGM3NTEwMGEyZDAuLmI4NDYxZjFhNTY5ZmFlIDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL21haW4uY1xcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL21haW4uY1xcbkBAIC0xMCw2ICsxMCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9lcnIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva3ZtX2hvc3QuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NwdV9wbS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2NwdWZlYXR1cmUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm1fbW11LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX25hY2wuaFxcdTAwM2VcXG5AQCAtMzMsMTQgKzM0LDkgQEAgbG9uZyBrdm1fYXJjaF9kZXZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxuIFxcdHJldHVybiAtRUlOVkFMO1xcbiB9XFxuIFxcbi1pbnQga3ZtX2FyY2hfZW5hYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKVxcbisvKiBJbml0aWFsaXplIGh5cGVydmlzb3IgQ1NScyAtIGNhbGxlZCBkdXJpbmcgQ1BVIG9ubGluZSBhbmQgbm9uLXJldGVudGlvbiBpZGxlIHJlc3VtZSAqL1xcbitzdGF0aWMgdm9pZCBrdm1fcmlzY3ZfY3NyX2VuYWJsZSh2b2lkKVxcbiB7XFxuLVxcdGludCByYztcXG4tXFxuLVxcdHJjID0ga3ZtX3Jpc2N2X25hY2xfZW5hYmxlKCk7XFxuLVxcdGlmIChyYylcXG4tXFx0XFx0cmV0dXJuIHJjO1xcbi1cXG4gXFx0Y3NyX3dyaXRlKENTUl9IRURFTEVHLCAwKTtcXG4gXFx0Y3NyX3dyaXRlKENTUl9ISURFTEVHLCAwKTtcXG4gXFxuQEAgLTQ4LDE2ICs0NCwxMSBAQCBpbnQga3ZtX2FyY2hfZW5hYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKVxcbiBcXHRjc3Jfd3JpdGUoQ1NSX0hDT1VOVEVSRU4sIDB4MDIpO1xcbiBcXG4gXFx0Y3NyX3dyaXRlKENTUl9IVklQLCAwKTtcXG4tXFxuLVxcdGt2bV9yaXNjdl9haWFfZW5hYmxlKCk7XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tdm9pZCBrdm1fYXJjaF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKVxcbisvKiBDbGVhciBoeXBlcnZpc29yIENTUnMgLSBjYWxsZWQgZHVyaW5nIENQVSBvZmZsaW5lIGFuZCBub24tcmV0ZW50aW9uIGlkbGUgZW50cnkgKi9cXG4rc3RhdGljIHZvaWQga3ZtX3Jpc2N2X2Nzcl9kaXNhYmxlKHZvaWQpXFxuIHtcXG4tXFx0a3ZtX3Jpc2N2X2FpYV9kaXNhYmxlKCk7XFxuLVxcbiBcXHQvKlxcbiBcXHQgKiBBZnRlciBjbGVhcmluZyB0aGUgaGlkZWxlZyBDU1IsIHRoZSBob3N0IGtlcm5lbCB3aWxsIHJlY2VpdmVcXG4gXFx0ICogc3B1cmlvdXMgaW50ZXJydXB0cyBpZiBodmlwIENTUiBoYXMgcGVuZGluZyBpbnRlcnJ1cHRzIGFuZCB0aGVcXG5AQCAtNjksOSArNjAsNjIgQEAgdm9pZCBrdm1fYXJjaF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKVxcbiBcXHRjc3Jfd3JpdGUoQ1NSX0hFREVMRUcsIDApO1xcbiBcXHRjc3Jfd3JpdGUoQ1NSX0hJREVMRUcsIDApO1xcbiBcXG4rXFx0a3ZtX3Jpc2N2X2NsZWFyX2Zvcm1lcl92Y3B1KCk7XFxuK31cXG4rXFxuK2ludCBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXFxuK3tcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0cmMgPSBrdm1fcmlzY3ZfbmFjbF9lbmFibGUoKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcbitcXHRrdm1fcmlzY3ZfY3NyX2VuYWJsZSgpO1xcbitcXHRrdm1fcmlzY3ZfYWlhX2VuYWJsZSh0cnVlKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbit2b2lkIGt2bV9hcmNoX2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXFxuK3tcXG4rXFx0a3ZtX3Jpc2N2X2FpYV9kaXNhYmxlKHRydWUpO1xcbitcXHRrdm1fcmlzY3ZfY3NyX2Rpc2FibGUoKTtcXG4gXFx0a3ZtX3Jpc2N2X25hY2xfZGlzYWJsZSgpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGt2bV9yaXNjdl9jcHVfcG1fbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLCB1bnNpZ25lZCBsb25nIGNtZCwgdm9pZCAqdilcXG4re1xcbitcXHQvKlxcbitcXHQgKiBUbyBhdm9pZCByZWR1bmRhbnQgZGlzYWJsZS9lbmFibGUgb3BlcmF0aW9ucyAoc2luY2UgS1ZNJ3NcXG4rXFx0ICogc3lzY29yZSBvcHMgd2lsbCBoYW5kbGUgdGhlIHN0YXRlIGR1cmluZyBzeXN0ZW0gc3VzcGVuZCksXFxuK1xcdCAqIGlnbm9yZSBDUFVfUE0gZXZlbnRzIHdoZW4gYSBzeXN0ZW0gc3VzcGVuZC9yZXN1bWUgaXMgaW5cXG4rXFx0ICogcHJvZ3Jlc3MuXFxuK1xcdCAqL1xcbitcXHRpZiAoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9TVVNQRU5EKVxcbitcXHRcXHRyZXR1cm4gTk9USUZZX0RPTkU7XFxuK1xcbitcXHRzd2l0Y2ggKGNtZCkge1xcbitcXHRjYXNlIENQVV9QTV9FWElUOlxcbitcXHRjYXNlIENQVV9QTV9FTlRFUl9GQUlMRUQ6XFxuK1xcdFxcdGt2bV9yaXNjdl9jc3JfZW5hYmxlKCk7XFxuK1xcdFxcdGt2bV9yaXNjdl9haWFfZW5hYmxlKGZhbHNlKTtcXG4rXFx0XFx0cmV0dXJuIE5PVElGWV9PSztcXG4rXFx0Y2FzZSBDUFVfUE1fRU5URVI6XFxuK1xcdFxcdGt2bV9yaXNjdl9haWFfZGlzYWJsZShmYWxzZSk7XFxuK1xcdFxcdGt2bV9yaXNjdl9jc3JfZGlzYWJsZSgpO1xcbitcXHRcXHRyZXR1cm4gTk9USUZZX09LO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIE5PVElGWV9ET05FO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGt2bV9yaXNjdl9jcHVfcG1fbmIgPSB7XFxuK1xcdC5ub3RpZmllcl9jYWxsID0ga3ZtX3Jpc2N2X2NwdV9wbV9ub3RpZmllcixcXG4rfTtcXG4rXFxuIHN0YXRpYyB2b2lkIGt2bV9yaXNjdl90ZWFyZG93bih2b2lkKVxcbiB7XFxuIFxcdGt2bV9yaXNjdl9haWFfZXhpdCgpO1xcbkBAIC0xNzIsMjIgKzIxNiw0MCBAQCBzdGF0aWMgaW50IF9faW5pdCByaXNjdl9rdm1faW5pdCh2b2lkKVxcbiBcXG4gXFx0a3ZtX3JlZ2lzdGVyX3BlcmZfY2FsbGJhY2tzKCk7XFxuIFxcbi1cXHRyYyA9IGt2bV9pbml0KHNpemVvZihzdHJ1Y3Qga3ZtX3ZjcHUpLCAwLCBUSElTX01PRFVMRSk7XFxuLVxcdGlmIChyYykge1xcbi1cXHRcXHRrdm1fcmlzY3ZfdGVhcmRvd24oKTtcXG4tXFx0XFx0cmV0dXJuIHJjO1xcbitcXHQvKiBSZWdpc3RlciBDUFUgUE0gbm90aWZpZXIgZm9yIENQVSBpZGxlIG5vbi1yZXRlbnRpb24gc3RhdGVzICovXFxuK1xcdGlmIChJU19FTkFCTEVEKENPTkZJR19DUFVfUE0pKSB7XFxuK1xcdFxcdHJjID0gY3B1X3BtX3JlZ2lzdGVyX25vdGlmaWVyKFxcdTAwMjZrdm1fcmlzY3ZfY3B1X3BtX25iKTtcXG4rXFx0XFx0aWYgKHJjKSB7XFxuK1xcdFxcdFxcdGt2bV9lcnIoXFxcIkZhaWxlZCB0byByZWdpc3RlciBDUFUgUE0gbm90aWZpZXI6ICVkXFxcXG5cXFwiLCByYyk7XFxuK1xcdFxcdFxcdGdvdG8gZXJyX3RlYXJkb3duO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFxuK1xcdHJjID0ga3ZtX2luaXQoc2l6ZW9mKHN0cnVjdCBrdm1fdmNwdSksIDAsIFRISVNfTU9EVUxFKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRnb3RvIGVycl91bnJlZ2lzdGVyX2NwdV9wbTtcXG4rXFxuIFxcdGlmIChrdm1fcmlzY3ZfYWlhX2F2YWlsYWJsZSgpKVxcbiBcXHRcXHRrdm1faW5mbyhcXFwiQUlBIGF2YWlsYWJsZSB3aXRoICVkIGd1ZXN0IGV4dGVybmFsIGludGVycnVwdHNcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCBhdG9taWNfcmVhZChcXHUwMDI2a3ZtX3Jpc2N2X2FpYV9ucl9oZ2VpKSk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl91bnJlZ2lzdGVyX2NwdV9wbTpcXG4rXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0NQVV9QTSkpXFxuK1xcdFxcdGNwdV9wbV91bnJlZ2lzdGVyX25vdGlmaWVyKFxcdTAwMjZrdm1fcmlzY3ZfY3B1X3BtX25iKTtcXG4rZXJyX3RlYXJkb3duOlxcbitcXHRrdm1fcmlzY3ZfdGVhcmRvd24oKTtcXG4rXFx0cmV0dXJuIHJjO1xcbiB9XFxuIG1vZHVsZV9pbml0KHJpc2N2X2t2bV9pbml0KTtcXG4gXFxuIHN0YXRpYyB2b2lkIF9fZXhpdCByaXNjdl9rdm1fZXhpdCh2b2lkKVxcbiB7XFxuK1xcdC8qIFVucmVnaXN0ZXIgQ1BVIFBNIG5vdGlmaWVyICovXFxuK1xcdGlmIChJU19FTkFCTEVEKENPTkZJR19DUFVfUE0pKVxcbitcXHRcXHRjcHVfcG1fdW5yZWdpc3Rlcl9ub3RpZmllcihcXHUwMDI2a3ZtX3Jpc2N2X2NwdV9wbV9uYik7XFxuK1xcbiBcXHRrdm1fZXhpdCgpO1xcbiBcXG4gXFx0a3ZtX3Jpc2N2X3RlYXJkb3duKCk7XFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHUuYyBiL2FyY2gvcmlzY3Yva3ZtL3ZjcHUuY1xcbmluZGV4IGNmNmUyMzFlNzZlMjU0Li5lNDgzMzhmOTA3ZjQ4OCAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS92Y3B1LmNcXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1LmNcXG5AQCAtMjYsNiArMjYsMTcgQEBcXG4gXFxuIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qga3ZtX3ZjcHUgKiwga3ZtX2Zvcm1lcl92Y3B1KTtcXG4gXFxuK3ZvaWQga3ZtX3Jpc2N2X2NsZWFyX2Zvcm1lcl92Y3B1KHZvaWQpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogQ2xlYXIgdGhlIHBlci1DUFUgZm9ybWVyIFZDUFUgcG9pbnRlciBiZWNhdXNlIGh5cGVydmlzb3IgQ1NSIHN0YXRlXFxuK1xcdCAqIHdpbGwgYmUgbG9zdC4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIG5leHQgVkNQVSBlbnRyeSB3aWxsIHByb3Blcmx5XFxuK1xcdCAqIHJlc3RvcmUgYWxsIENTUnMgaW5zdGVhZCBvZiBpbmNvcnJlY3RseSBza2lwcGluZyBDU1IgcmVzdG9yYXRpb25cXG4rXFx0ICogdmlhIHRoZSBmYXN0LXBhdGggb3B0aW1pemF0aW9uLlxcbitcXHQgKi9cXG4rXFx0X190aGlzX2NwdV93cml0ZShrdm1fZm9ybWVyX3ZjcHUsIE5VTEwpO1xcbit9XFxuK1xcbiBjb25zdCBzdHJ1Y3Qga3ZtX3N0YXRzX2Rlc2Mga3ZtX3ZjcHVfc3RhdHNfZGVzY1tdID0ge1xcbiBcXHRLVk1fR0VORVJJQ19WQ1BVX1NUQVRTKCksXFxuIFxcdFNUQVRTX0RFU0NfQ09VTlRFUihWQ1BVLCBlY2FsbF9leGl0X3N0YXQpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMjo0NDozMS45NjcwNzY3MTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMTIzOTM2MDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiQ1BVX0lETEVcIixcbiAgICBcIlNVU1BFTkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fcmlzY3ZfY3B1X3BtX25vdGlmaWVyXCIsXG4gICAgXCJrdm1fcmlzY3ZfYWlhX2VuYWJsZVwiLFxuICAgIFwia3ZtX3Jpc2N2X2FpYV9kaXNhYmxlXCIsXG4gICAgXCJrdm1fcmlzY3ZfY2xlYXJfZm9ybWVyX3ZjcHVcIixcbiAgICBcImt2bV9hcmNoX2VuYWJsZV92aXJ0dWFsaXphdGlvbl9jcHVcIixcbiAgICBcImt2bV9hcmNoX2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1XCIsXG4gICAgXCJrdm1fcmlzY3ZfY3NyX2VuYWJsZVwiLFxuICAgIFwia3ZtX3Jpc2N2X2Nzcl9kaXNhYmxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGlzIHBhdGNoIG1vZGlmaWVzIFJJU0MtViBLVk0gdG8gaGFuZGxlIENQVSBwb3dlciBtYW5hZ2VtZW50IGV2ZW50cyAoQ1BVX1BNKSBmb3Igbm9uLXJldGVudGlvbiBpZGxlIHN0YXRlcy4gSXQgaW50cm9kdWNlcyBhIENQVSBQTSBub3RpZmllciBhbmQgbW9kaWZpZXMgQUlBIChBZHZhbmNlZCBJbnRlcnJ1cHQgQXJjaGl0ZWN0dXJlKSBlbmFibGUvZGlzYWJsZSBwYXRocyB0byBzdXBwb3J0IGxpZ2h0d2VpZ2h0IENTUiBzYXZlL3Jlc3RvcmUuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBLVk0gbG9naWMgb24gUklTQy1WIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBpbiB2aXJ0dWFsaXphdGlvbiBvciBwb3dlciBtYW5hZ2VtZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDEyNTE2NzIxNmZhMjNkYWU4ZmNhZmRjYzcxZDlmMjkwN2Q0YjU0ZWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1biAyNiAyMjo0NDozMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2FpYS5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fYWlhLmhcbmluZGV4IGM2N2VjNWFjMGExNDZiLi43YzFjMzI1MDU5OGZiMCAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2FpYS5oXG4rKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9haWEuaFxuQEAgLTE2NSw4ICsxNjUsMTkgQEAgaW50IGt2bV9yaXNjdl9haWFfYWxsb2NfaGdlaShpbnQgY3B1LCBzdHJ1Y3Qga3ZtX3ZjcHUgKm93bmVyLFxuIFx0XHRcdCAgICAgdm9pZCBfX2lvbWVtICoqaGdlaV92YSwgcGh5c19hZGRyX3QgKmhnZWlfcGEpO1xuIHZvaWQga3ZtX3Jpc2N2X2FpYV9mcmVlX2hnZWkoaW50IGNwdSwgaW50IGhnZWkpO1xuIFxuLXZvaWQga3ZtX3Jpc2N2X2FpYV9lbmFibGUodm9pZCk7XG4tdm9pZCBrdm1fcmlzY3ZfYWlhX2Rpc2FibGUodm9pZCk7XG4rLyoqXG4rICoga3ZtX3Jpc2N2X2FpYV9lbmFibGUoKSAtIEVuYWJsZSBBSUEgc3VwcG9ydCBvbiBjdXJyZW50IENQVVxuKyAqIEBmdWxsX2NsZWFudXA6IHRydWUgPSBmdWxsIGhhcmR3YXJlIGluaXQgKENQVSBob3RwbHVnL21vZHVsZSBsb2FkKSxcbisgKiAgICAgICAgICAgICAgICBmYWxzZSA9IGxpZ2h0d2VpZ2h0IENTUiByZXN0b3JlIChDUFUgbm9uLXJldGVudGlvbiBpZGxlIHJlc3VtZSlcbisgKi9cbit2b2lkIGt2bV9yaXNjdl9haWFfZW5hYmxlKGJvb2wgZnVsbF9jbGVhbnVwKTtcbitcbisvKipcbisgKiBrdm1fcmlzY3ZfYWlhX2Rpc2FibGUoKSAtIERpc2FibGUgQUlBIHN1cHBvcnQgb24gY3VycmVudCBDUFVcbisgKiBAZnVsbF9jbGVhbnVwOiB0cnVlID0gZnVsbCBoYXJkd2FyZSBjbGVhbnVwIChDUFUgaG90cGx1Zy9tb2R1bGUgZXhpdCksXG4rICogICAgICAgICAgICAgICAgZmFsc2UgPSBsaWdodHdlaWdodCBDU1Igc2F2ZSAoQ1BVIG5vbi1yZXRlbnRpb24gaWRsZSBlbnRyeSlcbisgKi9cbit2b2lkIGt2bV9yaXNjdl9haWFfZGlzYWJsZShib29sIGZ1bGxfY2xlYW51cCk7XG4gaW50IGt2bV9yaXNjdl9haWFfaW5pdCh2b2lkKTtcbiB2b2lkIGt2bV9yaXNjdl9haWFfZXhpdCh2b2lkKTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IDYwMDE3Y2VlYzlkMmFmLi44MDhiNGVlMWJkMTBhYyAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuKysrIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtMzE5LDYgKzMxOSw4IEBAIGJvb2wga3ZtX3Jpc2N2X3ZjcHVfc3RvcHBlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuIFxuIHZvaWQga3ZtX3Jpc2N2X3ZjcHVfcmVjb3JkX3N0ZWFsX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbiBcbit2b2lkIGt2bV9yaXNjdl9jbGVhcl9mb3JtZXJfdmNwdSh2b2lkKTtcbitcbiAvKiBGbGFncyByZXByZXNlbnRpbmcgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgZGV0YWlscyAqL1xuIERFQ0xBUkVfU1RBVElDX0tFWV9GQUxTRShrdm1fcmlzY3ZfdnNzdGFnZV90bGJfbm9fZ3BhKTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9haWEuYyBiL2FyY2gvcmlzY3Yva3ZtL2FpYS5jXG5pbmRleCBiYWZiMDA5YzVjZTU1OS4uNGNmMzUxZjkxYzY0M2YgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9haWEuY1xuKysrIGIvYXJjaC9yaXNjdi9rdm0vYWlhLmNcbkBAIC0yNSw2ICsyNSw3IEBAIHN0cnVjdCBhaWFfaGdlaV9jb250cm9sIHtcbiBcdHVuc2lnbmVkIGxvbmcgZnJlZV9iaXRtYXA7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHUgKm93bmVyc1tCSVRTX1BFUl9MT05HXTtcbiBcdHVuc2lnbmVkIGludCBucl9oZ2VpO1xuK1x0dW5zaWduZWQgbG9uZyBzYXZlZF92YWx1ZTtcbiB9O1xuIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgYWlhX2hnZWlfY29udHJvbCwgYWlhX2hnZWkpO1xuIHN0YXRpYyBpbnQgaGdlaV9wYXJlbnRfaXJxO1xuQEAgLTUzMiw1MCArNTMzLDU5IEBAIHN0YXRpYyB2b2lkIGFpYV9oZ2VpX2V4aXQodm9pZClcbiBcdGZyZWVfcGVyY3B1X2lycShoZ2VpX3BhcmVudF9pcnEsIFx1MDAyNmFpYV9oZ2VpKTtcbiB9XG4gXG4tdm9pZCBrdm1fcmlzY3ZfYWlhX2VuYWJsZSh2b2lkKVxuK3ZvaWQga3ZtX3Jpc2N2X2FpYV9lbmFibGUoYm9vbCBmdWxsX2NsZWFudXApXG4ge1xuLVx0Y29uc3Qgc3RydWN0IGltc2ljX2dsb2JhbF9jb25maWcgKmdjO1xuLVx0Y29uc3Qgc3RydWN0IGltc2ljX2xvY2FsX2NvbmZpZyAqbGM7XG4gXHRzdHJ1Y3QgYWlhX2hnZWlfY29udHJvbCAqaGdjdHJsO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbi1cdGludCBhaWFfbnJfaGdlaTtcbiBcbiBcdGlmICgha3ZtX3Jpc2N2X2FpYV9hdmFpbGFibGUoKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0Z2MgPSBpbXNpY19nZXRfZ2xvYmFsX2NvbmZpZygpO1xuLVx0bGMgPSAoZ2MpID8gdGhpc19jcHVfcHRyKGdjLVx1MDAzZWxvY2FsKSA6IE5VTEw7XG4gXHRoZ2N0cmwgPSB0aGlzX2NwdV9wdHIoXHUwMDI2YWlhX2hnZWkpO1xuIFxuLVx0LyogRmlndXJlLW91dCBudW1iZXIgb2YgYml0cyBpbiBIR0VJRSAqL1xuLVx0Y3NyX3dyaXRlKENTUl9IR0VJRSwgLTFVTCk7XG4tXHRoZ2N0cmwtXHUwMDNlbnJfaGdlaSA9IGZsc19sb25nKGNzcl9yZWFkKENTUl9IR0VJRSkpO1xuLVx0Y3NyX3dyaXRlKENTUl9IR0VJRSwgMCk7XG4tXHRpZiAoaGdjdHJsLVx1MDAzZW5yX2hnZWkpXG4tXHRcdGhnY3RybC1cdTAwM2Vucl9oZ2VpLS07XG4rXHRpZiAoZnVsbF9jbGVhbnVwKSB7XG4rXHRcdGNvbnN0IHN0cnVjdCBpbXNpY19nbG9iYWxfY29uZmlnICpnYztcbitcdFx0Y29uc3Qgc3RydWN0IGltc2ljX2xvY2FsX2NvbmZpZyAqbGM7XG4rXHRcdGludCBhaWFfbnJfaGdlaTtcbiBcbi1cdC8qXG4tXHQgKiBOdW1iZXIgb2YgdXNhYmxlIHBlci1IQVJUIEhHRUkgbGluZXMgc2hvdWxkIGJlIG1pbmltdW0gb2Zcbi1cdCAqIHBlci1IQVJUIElNU0lDIGd1ZXN0IGZpbGVzIGFuZCBudW1iZXIgb2YgYml0cyBpbiBIR0VJRS5cbi1cdCAqL1xuLVx0aWYgKGxjKVxuLVx0XHRoZ2N0cmwtXHUwMDNlbnJfaGdlaSA9IG1pbigodWxvbmcpaGdjdHJsLVx1MDAzZW5yX2hnZWksIGxjLVx1MDAzZW5yX2d1ZXN0X2ZpbGVzKTtcbi1cdGVsc2Vcbi1cdFx0aGdjdHJsLVx1MDAzZW5yX2hnZWkgPSAwO1xuK1x0XHRnYyA9IGltc2ljX2dldF9nbG9iYWxfY29uZmlnKCk7XG4rXHRcdGxjID0gKGdjKSA/IHRoaXNfY3B1X3B0cihnYy1cdTAwM2Vsb2NhbCkgOiBOVUxMO1xuIFxuLVx0LyogVXBkYXRlIHRoZSBudW1iZXIgb2YgSU1TSUMgZ3Vlc3QgZmlsZXMgYWNyb3NzIGFsbCBIQVJUcyAqL1xuLVx0YWlhX25yX2hnZWkgPSBhdG9taWNfcmVhZChcdTAwMjZrdm1fcmlzY3ZfYWlhX25yX2hnZWkpO1xuLVx0ZG8ge1xuLVx0XHRpZiAoYWlhX25yX2hnZWkgXHUwMDNjPSBoZ2N0cmwtXHUwMDNlbnJfaGdlaSlcbi1cdFx0XHRicmVhaztcbi1cdH0gd2hpbGUgKCFhdG9taWNfdHJ5X2NtcHhjaGcoXHUwMDI2a3ZtX3Jpc2N2X2FpYV9ucl9oZ2VpLCBcdTAwMjZhaWFfbnJfaGdlaSwgaGdjdHJsLVx1MDAzZW5yX2hnZWkpKTtcbitcdFx0LyogRmlndXJlLW91dCBudW1iZXIgb2YgYml0cyBpbiBIR0VJRSAqL1xuK1x0XHRjc3Jfd3JpdGUoQ1NSX0hHRUlFLCAtMVVMKTtcbitcdFx0aGdjdHJsLVx1MDAzZW5yX2hnZWkgPSBmbHNfbG9uZyhjc3JfcmVhZChDU1JfSEdFSUUpKTtcbitcdFx0Y3NyX3dyaXRlKENTUl9IR0VJRSwgMCk7XG4rXHRcdGlmIChoZ2N0cmwtXHUwMDNlbnJfaGdlaSlcbitcdFx0XHRoZ2N0cmwtXHUwMDNlbnJfaGdlaS0tO1xuIFxuLVx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmhnY3RybC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tXHRpZiAoIWhnY3RybC1cdTAwM2VmcmVlX2JpdG1hcF9pbml0aWFsaXplZCkge1xuLVx0XHRoZ2N0cmwtXHUwMDNlZnJlZV9iaXRtYXAgPSAoaGdjdHJsLVx1MDAzZW5yX2hnZWkpID8gR0VOTUFTS19VTEwoaGdjdHJsLVx1MDAzZW5yX2hnZWksIDEpIDogMDtcbi1cdFx0aGdjdHJsLVx1MDAzZWZyZWVfYml0bWFwX2luaXRpYWxpemVkID0gdHJ1ZTtcbitcdFx0LypcbitcdFx0ICogTnVtYmVyIG9mIHVzYWJsZSBwZXItSEFSVCBIR0VJIGxpbmVzIHNob3VsZCBiZSBtaW5pbXVtIG9mXG4rXHRcdCAqIHBlci1IQVJUIElNU0lDIGd1ZXN0IGZpbGVzIGFuZCBudW1iZXIgb2YgYml0cyBpbiBIR0VJRS5cbitcdFx0ICovXG4rXHRcdGlmIChsYylcbitcdFx0XHRoZ2N0cmwtXHUwMDNlbnJfaGdlaSA9IG1pbigodWxvbmcpaGdjdHJsLVx1MDAzZW5yX2hnZWksIGxjLVx1MDAzZW5yX2d1ZXN0X2ZpbGVzKTtcbitcdFx0ZWxzZVxuK1x0XHRcdGhnY3RybC1cdTAwM2Vucl9oZ2VpID0gMDtcbitcbitcdFx0LyogVXBkYXRlIHRoZSBudW1iZXIgb2YgSU1TSUMgZ3Vlc3QgZmlsZXMgYWNyb3NzIGFsbCBIQVJUcyAqL1xuK1x0XHRhaWFfbnJfaGdlaSA9IGF0b21pY19yZWFkKFx1MDAyNmt2bV9yaXNjdl9haWFfbnJfaGdlaSk7XG4rXHRcdGRvIHtcbitcdFx0XHRpZiAoYWlhX25yX2hnZWkgXHUwMDNjPSBoZ2N0cmwtXHUwMDNlbnJfaGdlaSlcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHR9IHdoaWxlICghYXRvbWljX3RyeV9jbXB4Y2hnKFx1MDAyNmt2bV9yaXNjdl9haWFfbnJfaGdlaSwgXHUwMDI2YWlhX25yX2hnZWksXG4rXHRcdFx0XHRcdCAgICAgaGdjdHJsLVx1MDAzZW5yX2hnZWkpKTtcbitcbitcdFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmhnY3RybC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdGlmICghaGdjdHJsLVx1MDAzZWZyZWVfYml0bWFwX2luaXRpYWxpemVkKSB7XG4rXHRcdFx0aGdjdHJsLVx1MDAzZWZyZWVfYml0bWFwID0gKGhnY3RybC1cdTAwM2Vucl9oZ2VpKSA/XG4rXHRcdFx0XHRcdCAgICAgIEdFTk1BU0tfVUxMKGhnY3RybC1cdTAwM2Vucl9oZ2VpLCAxKSA6XG4rXHRcdFx0XHRcdCAgICAgIDA7XG4rXHRcdFx0aGdjdHJsLVx1MDAzZWZyZWVfYml0bWFwX2luaXRpYWxpemVkID0gdHJ1ZTtcbitcdFx0fVxuK1x0XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZoZ2N0cmwtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0fSBlbHNlIHtcbitcdFx0Y3NyX3dyaXRlKENTUl9IR0VJRSwgaGdjdHJsLVx1MDAzZXNhdmVkX3ZhbHVlKTtcbiBcdH1cbi1cdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmhnY3RybC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4gXHRjc3Jfd3JpdGUoQ1NSX0hWSUNUTCwgYWlhX2h2aWN0bF92YWx1ZShmYWxzZSkpO1xuIFx0Y3NyX3dyaXRlKENTUl9IVklQUklPMSwgMHgwKTtcbkBAIC01ODcsMTYgKzU5NywxNyBAQCB2b2lkIGt2bV9yaXNjdl9haWFfZW5hYmxlKHZvaWQpXG4gXHRjc3Jfd3JpdGUoQ1NSX0hWSVBSSU8ySCwgMHgwKTtcbiAjZW5kaWZcbiBcbi1cdC8qIEVuYWJsZSBwZXItQ1BVIFNHRUkgaW50ZXJydXB0ICovXG4tXHRlbmFibGVfcGVyY3B1X2lycShoZ2VpX3BhcmVudF9pcnEsXG4tXHRcdFx0ICBpcnFfZ2V0X3RyaWdnZXJfdHlwZShoZ2VpX3BhcmVudF9pcnEpKTtcbitcdGlmIChmdWxsX2NsZWFudXApXG4rXHRcdGVuYWJsZV9wZXJjcHVfaXJxKGhnZWlfcGFyZW50X2lycSxcbitcdFx0XHRcdCAgaXJxX2dldF90cmlnZ2VyX3R5cGUoaGdlaV9wYXJlbnRfaXJxKSk7XG4gXHRjc3Jfc2V0KENTUl9ISUUsIEJJVChJUlFfU19HRVhUKSk7XG4rXG4gXHQvKiBFbmFibGUgSVJRIGZpbHRlcmluZyBmb3Igb3ZlcmZsb3cgaW50ZXJydXB0IG9ubHkgaWYgc3Njb2ZwbWYgaXMgcHJlc2VudCAqL1xuIFx0aWYgKF9fcmlzY3ZfaXNhX2V4dGVuc2lvbl9hdmFpbGFibGUoTlVMTCwgUklTQ1ZfSVNBX0VYVF9TU0NPRlBNRikpXG4gXHRcdGNzcl9zZXQoQ1NSX0hWSUVOLCBCSVQoSVJRX1BNVV9PVkYpKTtcbiB9XG4gXG4tdm9pZCBrdm1fcmlzY3ZfYWlhX2Rpc2FibGUodm9pZClcbit2b2lkIGt2bV9yaXNjdl9haWFfZGlzYWJsZShib29sIGZ1bGxfY2xlYW51cClcbiB7XG4gXHRpbnQgaTtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG5AQCAtNjA5LDQyICs2MjAsNDkgQEAgdm9pZCBrdm1fcmlzY3ZfYWlhX2Rpc2FibGUodm9pZClcbiBcbiBcdGlmIChfX3Jpc2N2X2lzYV9leHRlbnNpb25fYXZhaWxhYmxlKE5VTEwsIFJJU0NWX0lTQV9FWFRfU1NDT0ZQTUYpKVxuIFx0XHRjc3JfY2xlYXIoQ1NSX0hWSUVOLCBCSVQoSVJRX1BNVV9PVkYpKTtcbi1cdC8qIERpc2FibGUgcGVyLUNQVSBTR0VJIGludGVycnVwdCAqL1xuLVx0Y3NyX2NsZWFyKENTUl9ISUUsIEJJVChJUlFfU19HRVhUKSk7XG4tXHRkaXNhYmxlX3BlcmNwdV9pcnEoaGdlaV9wYXJlbnRfaXJxKTtcbiBcbi1cdGNzcl93cml0ZShDU1JfSFZJQ1RMLCBhaWFfaHZpY3RsX3ZhbHVlKGZhbHNlKSk7XG4tXG4tXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2aGdjdHJsLVx1MDAzZWxvY2ssIGZsYWdzKTtcbi1cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBoZ2N0cmwtXHUwMDNlbnJfaGdlaTsgaSsrKSB7XG4tXHRcdHZjcHUgPSBoZ2N0cmwtXHUwMDNlb3duZXJzW2ldO1xuLVx0XHRpZiAoIXZjcHUpXG4tXHRcdFx0Y29udGludWU7XG4rXHRpZiAoZnVsbF9jbGVhbnVwKSB7XG4rXHRcdC8qIERpc2FibGUgcGVyLUNQVSBTR0VJIGludGVycnVwdCAqL1xuK1x0XHRjc3JfY2xlYXIoQ1NSX0hJRSwgQklUKElSUV9TX0dFWFQpKTtcbitcdFx0ZGlzYWJsZV9wZXJjcHVfaXJxKGhnZWlfcGFyZW50X2lycSk7XG4rXHR9XG4gXG4tXHRcdC8qXG4tXHRcdCAqIFdlIHJlbGVhc2UgaGdjdHJsLVx1MDAzZWxvY2sgYmVmb3JlIG5vdGlmeWluZyBJTVNJQ1xuLVx0XHQgKiBzbyB0aGF0IHdlIGRvbid0IGhhdmUgbG9jayBvcmRlcmluZyBpc3N1ZXMuXG4tXHRcdCAqL1xuLVx0XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZoZ2N0cmwtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0Y3NyX3dyaXRlKENTUl9IVklDVEwsIGFpYV9odmljdGxfdmFsdWUoZmFsc2UpKTtcbiBcbi1cdFx0LyogTm90aWZ5IElNU0lDICovXG4tXHRcdGt2bV9yaXNjdl92Y3B1X2FpYV9pbXNpY19yZWxlYXNlKHZjcHUpO1xuK1x0aWYgKGZ1bGxfY2xlYW51cCkge1xuK1x0XHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2aGdjdHJsLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbi1cdFx0Lypcbi1cdFx0ICogV2FrZXVwIFZDUFUgaWYgaXQgd2FzIGJsb2NrZWQgc28gdGhhdCBpdCBjYW5cbi1cdFx0ICogcnVuIG9uIG90aGVyIEhBUlRzXG4tXHRcdCAqL1xuLVx0XHRpZiAoY3NyX3JlYWQoQ1NSX0hHRUlFKSBcdTAwMjYgQklUKGkpKSB7XG4tXHRcdFx0Y3NyX2NsZWFyKENTUl9IR0VJRSwgQklUKGkpKTtcbi1cdFx0XHRrdm1fdmNwdV9raWNrKHZjcHUpO1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gaGdjdHJsLVx1MDAzZW5yX2hnZWk7IGkrKykge1xuK1x0XHRcdHZjcHUgPSBoZ2N0cmwtXHUwMDNlb3duZXJzW2ldO1xuK1x0XHRcdGlmICghdmNwdSlcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogV2UgcmVsZWFzZSBoZ2N0cmwtXHUwMDNlbG9jayBiZWZvcmUgbm90aWZ5aW5nIElNU0lDXG4rXHRcdFx0ICogc28gdGhhdCB3ZSBkb24ndCBoYXZlIGxvY2sgb3JkZXJpbmcgaXNzdWVzLlxuK1x0XHRcdCAqL1xuK1x0XHRcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmhnY3RybC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXG4rXHRcdFx0LyogTm90aWZ5IElNU0lDICovXG4rXHRcdFx0a3ZtX3Jpc2N2X3ZjcHVfYWlhX2ltc2ljX3JlbGVhc2UodmNwdSk7XG4rXG4rXHRcdFx0LypcbitcdFx0XHQgKiBXYWtldXAgVkNQVSBpZiBpdCB3YXMgYmxvY2tlZCBzbyB0aGF0IGl0IGNhblxuK1x0XHRcdCAqIHJ1biBvbiBvdGhlciBIQVJUc1xuK1x0XHRcdCAqL1xuK1x0XHRcdGlmIChjc3JfcmVhZChDU1JfSEdFSUUpIFx1MDAyNiBCSVQoaSkpIHtcbitcdFx0XHRcdGNzcl9jbGVhcihDU1JfSEdFSUUsIEJJVChpKSk7XG4rXHRcdFx0XHRrdm1fdmNwdV9raWNrKHZjcHUpO1xuK1x0XHRcdH1cbitcbitcdFx0XHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2aGdjdHJsLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdFx0fVxuIFxuLVx0XHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2aGdjdHJsLVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aGdjdHJsLVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdH0gZWxzZSB7XG4rXHRcdGhnY3RybC1cdTAwM2VzYXZlZF92YWx1ZSA9IGNzcl9yZWFkKENTUl9IR0VJRSk7XG4gXHR9XG4gXG4tXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZoZ2N0cmwtXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVxuIFx0cHV0X2NwdV9wdHIoXHUwMDI2YWlhX2hnZWkpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9tYWluLmMgYi9hcmNoL3Jpc2N2L2t2bS9tYWluLmNcbmluZGV4IDA5MjRjNzUxMDBhMmQwLi5iODQ2MWYxYTU2OWZhZSAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL21haW4uY1xuKysrIGIvYXJjaC9yaXNjdi9rdm0vbWFpbi5jXG5AQCAtMTAsNiArMTAsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vyci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rdm1faG9zdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY3B1X3BtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vY3B1ZmVhdHVyZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9tbXUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fbmFjbC5oXHUwMDNlXG5AQCAtMzMsMTQgKzM0LDkgQEAgbG9uZyBrdm1fYXJjaF9kZXZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4gXHRyZXR1cm4gLUVJTlZBTDtcbiB9XG4gXG4taW50IGt2bV9hcmNoX2VuYWJsZV92aXJ0dWFsaXphdGlvbl9jcHUodm9pZClcbisvKiBJbml0aWFsaXplIGh5cGVydmlzb3IgQ1NScyAtIGNhbGxlZCBkdXJpbmcgQ1BVIG9ubGluZSBhbmQgbm9uLXJldGVudGlvbiBpZGxlIHJlc3VtZSAqL1xuK3N0YXRpYyB2b2lkIGt2bV9yaXNjdl9jc3JfZW5hYmxlKHZvaWQpXG4ge1xuLVx0aW50IHJjO1xuLVxuLVx0cmMgPSBrdm1fcmlzY3ZfbmFjbF9lbmFibGUoKTtcbi1cdGlmIChyYylcbi1cdFx0cmV0dXJuIHJjO1xuLVxuIFx0Y3NyX3dyaXRlKENTUl9IRURFTEVHLCAwKTtcbiBcdGNzcl93cml0ZShDU1JfSElERUxFRywgMCk7XG4gXG5AQCAtNDgsMTYgKzQ0LDExIEBAIGludCBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXG4gXHRjc3Jfd3JpdGUoQ1NSX0hDT1VOVEVSRU4sIDB4MDIpO1xuIFxuIFx0Y3NyX3dyaXRlKENTUl9IVklQLCAwKTtcbi1cbi1cdGt2bV9yaXNjdl9haWFfZW5hYmxlKCk7XG4tXG4tXHRyZXR1cm4gMDtcbiB9XG4gXG4tdm9pZCBrdm1fYXJjaF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKVxuKy8qIENsZWFyIGh5cGVydmlzb3IgQ1NScyAtIGNhbGxlZCBkdXJpbmcgQ1BVIG9mZmxpbmUgYW5kIG5vbi1yZXRlbnRpb24gaWRsZSBlbnRyeSAqL1xuK3N0YXRpYyB2b2lkIGt2bV9yaXNjdl9jc3JfZGlzYWJsZSh2b2lkKVxuIHtcbi1cdGt2bV9yaXNjdl9haWFfZGlzYWJsZSgpO1xuLVxuIFx0LypcbiBcdCAqIEFmdGVyIGNsZWFyaW5nIHRoZSBoaWRlbGVnIENTUiwgdGhlIGhvc3Qga2VybmVsIHdpbGwgcmVjZWl2ZVxuIFx0ICogc3B1cmlvdXMgaW50ZXJydXB0cyBpZiBodmlwIENTUiBoYXMgcGVuZGluZyBpbnRlcnJ1cHRzIGFuZCB0aGVcbkBAIC02OSw5ICs2MCw2MiBAQCB2b2lkIGt2bV9hcmNoX2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXG4gXHRjc3Jfd3JpdGUoQ1NSX0hFREVMRUcsIDApO1xuIFx0Y3NyX3dyaXRlKENTUl9ISURFTEVHLCAwKTtcbiBcbitcdGt2bV9yaXNjdl9jbGVhcl9mb3JtZXJfdmNwdSgpO1xuK31cbitcbitpbnQga3ZtX2FyY2hfZW5hYmxlX3ZpcnR1YWxpemF0aW9uX2NwdSh2b2lkKVxuK3tcbitcdGludCByYztcbitcbitcdHJjID0ga3ZtX3Jpc2N2X25hY2xfZW5hYmxlKCk7XG4rXHRpZiAocmMpXG4rXHRcdHJldHVybiByYztcbitcbitcdGt2bV9yaXNjdl9jc3JfZW5hYmxlKCk7XG4rXHRrdm1fcmlzY3ZfYWlhX2VuYWJsZSh0cnVlKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbit2b2lkIGt2bV9hcmNoX2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpXG4re1xuK1x0a3ZtX3Jpc2N2X2FpYV9kaXNhYmxlKHRydWUpO1xuK1x0a3ZtX3Jpc2N2X2Nzcl9kaXNhYmxlKCk7XG4gXHRrdm1fcmlzY3ZfbmFjbF9kaXNhYmxlKCk7XG4gfVxuIFxuK3N0YXRpYyBpbnQga3ZtX3Jpc2N2X2NwdV9wbV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsIHVuc2lnbmVkIGxvbmcgY21kLCB2b2lkICp2KVxuK3tcbitcdC8qXG4rXHQgKiBUbyBhdm9pZCByZWR1bmRhbnQgZGlzYWJsZS9lbmFibGUgb3BlcmF0aW9ucyAoc2luY2UgS1ZNJ3NcbitcdCAqIHN5c2NvcmUgb3BzIHdpbGwgaGFuZGxlIHRoZSBzdGF0ZSBkdXJpbmcgc3lzdGVtIHN1c3BlbmQpLFxuK1x0ICogaWdub3JlIENQVV9QTSBldmVudHMgd2hlbiBhIHN5c3RlbSBzdXNwZW5kL3Jlc3VtZSBpcyBpblxuK1x0ICogcHJvZ3Jlc3MuXG4rXHQgKi9cbitcdGlmIChzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX1NVU1BFTkQpXG4rXHRcdHJldHVybiBOT1RJRllfRE9ORTtcbitcbitcdHN3aXRjaCAoY21kKSB7XG4rXHRjYXNlIENQVV9QTV9FWElUOlxuK1x0Y2FzZSBDUFVfUE1fRU5URVJfRkFJTEVEOlxuK1x0XHRrdm1fcmlzY3ZfY3NyX2VuYWJsZSgpO1xuK1x0XHRrdm1fcmlzY3ZfYWlhX2VuYWJsZShmYWxzZSk7XG4rXHRcdHJldHVybiBOT1RJRllfT0s7XG4rXHRjYXNlIENQVV9QTV9FTlRFUjpcbitcdFx0a3ZtX3Jpc2N2X2FpYV9kaXNhYmxlKGZhbHNlKTtcbitcdFx0a3ZtX3Jpc2N2X2Nzcl9kaXNhYmxlKCk7XG4rXHRcdHJldHVybiBOT1RJRllfT0s7XG4rXHRkZWZhdWx0OlxuK1x0XHRicmVhaztcbitcdH1cbitcbitcdHJldHVybiBOT1RJRllfRE9ORTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBrdm1fcmlzY3ZfY3B1X3BtX25iID0ge1xuK1x0Lm5vdGlmaWVyX2NhbGwgPSBrdm1fcmlzY3ZfY3B1X3BtX25vdGlmaWVyLFxuK307XG4rXG4gc3RhdGljIHZvaWQga3ZtX3Jpc2N2X3RlYXJkb3duKHZvaWQpXG4ge1xuIFx0a3ZtX3Jpc2N2X2FpYV9leGl0KCk7XG5AQCAtMTcyLDIyICsyMTYsNDAgQEAgc3RhdGljIGludCBfX2luaXQgcmlzY3Zfa3ZtX2luaXQodm9pZClcbiBcbiBcdGt2bV9yZWdpc3Rlcl9wZXJmX2NhbGxiYWNrcygpO1xuIFxuLVx0cmMgPSBrdm1faW5pdChzaXplb2Yoc3RydWN0IGt2bV92Y3B1KSwgMCwgVEhJU19NT0RVTEUpO1xuLVx0aWYgKHJjKSB7XG4tXHRcdGt2bV9yaXNjdl90ZWFyZG93bigpO1xuLVx0XHRyZXR1cm4gcmM7XG4rXHQvKiBSZWdpc3RlciBDUFUgUE0gbm90aWZpZXIgZm9yIENQVSBpZGxlIG5vbi1yZXRlbnRpb24gc3RhdGVzICovXG4rXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQ1BVX1BNKSkge1xuK1x0XHRyYyA9IGNwdV9wbV9yZWdpc3Rlcl9ub3RpZmllcihcdTAwMjZrdm1fcmlzY3ZfY3B1X3BtX25iKTtcbitcdFx0aWYgKHJjKSB7XG4rXHRcdFx0a3ZtX2VycihcIkZhaWxlZCB0byByZWdpc3RlciBDUFUgUE0gbm90aWZpZXI6ICVkXFxuXCIsIHJjKTtcbitcdFx0XHRnb3RvIGVycl90ZWFyZG93bjtcbitcdFx0fVxuIFx0fVxuIFxuK1x0cmMgPSBrdm1faW5pdChzaXplb2Yoc3RydWN0IGt2bV92Y3B1KSwgMCwgVEhJU19NT0RVTEUpO1xuK1x0aWYgKHJjKVxuK1x0XHRnb3RvIGVycl91bnJlZ2lzdGVyX2NwdV9wbTtcbitcbiBcdGlmIChrdm1fcmlzY3ZfYWlhX2F2YWlsYWJsZSgpKVxuIFx0XHRrdm1faW5mbyhcIkFJQSBhdmFpbGFibGUgd2l0aCAlZCBndWVzdCBleHRlcm5hbCBpbnRlcnJ1cHRzXFxuXCIsXG4gXHRcdFx0IGF0b21pY19yZWFkKFx1MDAyNmt2bV9yaXNjdl9haWFfbnJfaGdlaSkpO1xuIFxuIFx0cmV0dXJuIDA7XG4rXG4rZXJyX3VucmVnaXN0ZXJfY3B1X3BtOlxuK1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX0NQVV9QTSkpXG4rXHRcdGNwdV9wbV91bnJlZ2lzdGVyX25vdGlmaWVyKFx1MDAyNmt2bV9yaXNjdl9jcHVfcG1fbmIpO1xuK2Vycl90ZWFyZG93bjpcbitcdGt2bV9yaXNjdl90ZWFyZG93bigpO1xuK1x0cmV0dXJuIHJjO1xuIH1cbiBtb2R1bGVfaW5pdChyaXNjdl9rdm1faW5pdCk7XG4gXG4gc3RhdGljIHZvaWQgX19leGl0IHJpc2N2X2t2bV9leGl0KHZvaWQpXG4ge1xuK1x0LyogVW5yZWdpc3RlciBDUFUgUE0gbm90aWZpZXIgKi9cbitcdGlmIChJU19FTkFCTEVEKENPTkZJR19DUFVfUE0pKVxuK1x0XHRjcHVfcG1fdW5yZWdpc3Rlcl9ub3RpZmllcihcdTAwMjZrdm1fcmlzY3ZfY3B1X3BtX25iKTtcbitcbiBcdGt2bV9leGl0KCk7XG4gXG4gXHRrdm1fcmlzY3ZfdGVhcmRvd24oKTtcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS92Y3B1LmMgYi9hcmNoL3Jpc2N2L2t2bS92Y3B1LmNcbmluZGV4IGNmNmUyMzFlNzZlMjU0Li5lNDgzMzhmOTA3ZjQ4OCAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL3ZjcHUuY1xuKysrIGIvYXJjaC9yaXNjdi9rdm0vdmNwdS5jXG5AQCAtMjYsNiArMjYsMTcgQEBcbiBcbiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGt2bV92Y3B1ICosIGt2bV9mb3JtZXJfdmNwdSk7XG4gXG4rdm9pZCBrdm1fcmlzY3ZfY2xlYXJfZm9ybWVyX3ZjcHUodm9pZClcbit7XG4rXHQvKlxuK1x0ICogQ2xlYXIgdGhlIHBlci1DUFUgZm9ybWVyIFZDUFUgcG9pbnRlciBiZWNhdXNlIGh5cGVydmlzb3IgQ1NSIHN0YXRlXG4rXHQgKiB3aWxsIGJlIGxvc3QuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBuZXh0IFZDUFUgZW50cnkgd2lsbCBwcm9wZXJseVxuK1x0ICogcmVzdG9yZSBhbGwgQ1NScyBpbnN0ZWFkIG9mIGluY29ycmVjdGx5IHNraXBwaW5nIENTUiByZXN0b3JhdGlvblxuK1x0ICogdmlhIHRoZSBmYXN0LXBhdGggb3B0aW1pemF0aW9uLlxuK1x0ICovXG4rXHRfX3RoaXNfY3B1X3dyaXRlKGt2bV9mb3JtZXJfdmNwdSwgTlVMTCk7XG4rfVxuK1xuIGNvbnN0IHN0cnVjdCBrdm1fc3RhdHNfZGVzYyBrdm1fdmNwdV9zdGF0c19kZXNjW10gPSB7XG4gXHRLVk1fR0VORVJJQ19WQ1BVX1NUQVRTKCksXG4gXHRTVEFUU19ERVNDX0NPVU5URVIoVkNQVSwgZWNhbGxfZXhpdF9zdGF0KSxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIyOjQ0OjMxLjk2NzA3OTkxNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNDcxMjE0NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUklTQy1WIEtWTSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIFJJU0MtViBLVk0gY29kZS4gSXQncyBtYWtpbmcgc29tZSBrZXkgY2hhbmdlcywgc3BlY2lmaWNhbGx5IHRvIGBrdm1fcmlzY3ZfYWlhX2VuYWJsZWAgYW5kIGBrdm1fcmlzY3ZfYWlhX2Rpc2FibGVgLiAgSW50ZXJlc3RpbmcsIHRoZXkndmUgYWRkZWQgYSBgZnVsbF9jbGVhbnVwYCBib29sZWFuIGFyZ3VtZW50IHRvIHRoZXNlIGZ1bmN0aW9ucy4gIFRoYXQgc3VnZ2VzdHMgYSBtb3JlIGNvbXByZWhlbnNpdmUgY2xlYW51cCByb3V0aW5lIGlzIG5vdyBwb3NzaWJsZS4gIEFuZCwgdGhlcmUncyBhIG5ldyBub3RpZmllciwgYGt2bV9yaXNjdl9jcHVfcG1fbm90aWZpZXJgLCB3aGljaCBoYW5kbGVzIENQVSBwb3dlciBtYW5hZ2VtZW50IGV2ZW50cy4gIFRoYXQncyBpbXBvcnRhbnQuIEkgc2VlIHRoZXkndmUgYWxzbyBhZGRlZCBga3ZtX3Jpc2N2X2NsZWFyX2Zvcm1lcl92Y3B1YCwgd2hpY2ggY2xlYXJzIGBrdm1fZm9ybWVyX3ZjcHVgLCBhIHBlci1DUFUgdmFyaWFibGUuXG5cbk15IGZpcnN0IHRob3VnaHQgaXMsIGlzIHRoaXMgZnVuY3Rpb25hbGl0eSBldmVuICpyZWFjaGFibGUqIGFuZCBkb2VzIGl0ICpmdW5jdGlvbio/IEdpdmVuIHRoZSBjaGFuZ2VzLCBpdCBzZWVtcyBjbGVhciB0aGlzIGlzIGZ1bmN0aW9uYWwgYW5kIGNhbiBiZSByZWFjaGVkLiBTcGVjaWZpY2FsbHksIHRoaXMgaXMgYSBtb2RpZmljYXRpb24gdG8gS1ZNIG9uIFJJU0MtViBhbmQgZGVwZW5kcyBvbiBDUFUgUE0gaW50ZWdyYXRpb24gd2l0aCBLVk0uICBUaGVyZWZvcmUsIGl0J3MgZGVmaW5pdGVseSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgKmlmKiBLVk0gYW5kIENQVV9QTSBhcmUgZW5hYmxlZCBvbiBSSVNDLVYuIFRoYXQncyB0aGUga2V5LlxuXG5TbywgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWdzLiAgSSBpbW1lZGlhdGVseSB0aGluaywgSSdsbCBuZWVkIGBDT05GSUdfS1ZNYCBhbmQgYENPTkZJR19DUFVfUE1gIHRvIGJlIHNldC4gIFRoZW4sIEkgbmVlZCB0byBjaGVjayBgYXJjaC9yaXNjdi9rdm0vS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgKnNwZWNpZmljKiBSSVNDLVYgS1ZNIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gdGhpcyBuZXcgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzAwNSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIyOjQ0OjM3LjIxNDIwNDMyMVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTAxMTQ5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3Yva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMTktXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy0yMS1cXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMjo0NDozNy4yNzUyMjQ1NDVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTcxNDIzMDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgS1ZNIFBvd2VyIE1hbmFnZW1lbnQgb24gUklTQy1WKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgYXJjaC9yaXNjdi9rdm0vbWFpbi5jYC4gVGhlIGZhY3QgdGhhdCBgQ09ORklHX0NQVV9QTWAgaXMgb24gbXkgcmFkYXIgc3VnZ2VzdHMgd2UncmUgbGlrZWx5IGludGVyZXN0ZWQgaW4gdGhlIHBvd2VyIG1hbmFnZW1lbnQgYXNwZWN0cyBvZiBLVk0gd2l0aGluIHRoZSBSSVNDLVYgYXJjaGl0ZWN0dXJlLiBHaXZlbiB0aGF0IHdlIGFyZSBmb2N1c2luZyBvbiBwb3dlciBtYW5hZ2VtZW50LCBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIHRyYW5zaXRpb25zIHRvIGFuZCBmcm9tIGxvdy1wb3dlciBzdGF0ZXMgYXQgdGhlIENQVSBsZXZlbCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgaHlwZXJ2aXNvciBpbnRlcmFjdHMgd2l0aCB0aGUgZ3Vlc3QncyBwb3dlciBtYW5hZ2VtZW50IHJlcXVlc3RzIGFuZCB0aGUgdW5kZXJseWluZyBSSVNDLVYgaGFyZHdhcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY29kZSBoYW5kbGVzIHRoZSBzdGF0ZSBvZiB0aGUgdkNQVSBjb250ZXh0LCBhbmQgc2VlIGhvdyB0aGUgc2NoZWR1bGluZyBhbmQgaW50ZXJydXB0IGhhbmRsaW5nIHdvcmsgaW4gcmVsYXRpb24gdG8gcG93ZXIgbWFuYWdlbWVudC4gSSdsbCBiZSBsb29raW5nIGZvciBzcGVjaWZpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byBDUFUgaG90cGx1ZywgaWRsZSBoYW5kbGluZywgYW5kIGFueSBzcGVjaWZpYyBSSVNDLVYgZmVhdHVyZXMgbGV2ZXJhZ2VkIGZvciBwb3dlciBzYXZpbmdzIChlLmcuLCBzcGVjaWZpYyBDU1JzLCBleHRlbnNpb25zKS4gTGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3RpbmcgbnVhbmNlcyBvciBvcHRpbWl6YXRpb25zIHRoYXQgc3RhbmQgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Njk4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjI6NDQ6NDAuNDQ2NjUwNTFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc5MzkwNzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0NQVV9QTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L2t2bS9tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9rdm0vbWFpbi5jPTEyNj1zdGF0aWMgaW50IF9faW5pdCByaXNjdl9rdm1faW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vbWFpbi5jLTIxOS1cXHQvKiBSZWdpc3RlciBDUFUgUE0gbm90aWZpZXIgZm9yIENQVSBpZGxlIG5vbi1yZXRlbnRpb24gc3RhdGVzICovXFxuYXJjaC9yaXNjdi9rdm0vbWFpbi5jOjIyMDpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQ1BVX1BNKSkge1xcbmFyY2gvcmlzY3Yva3ZtL21haW4uYy0yMjEtXFx0XFx0cmMgPSBjcHVfcG1fcmVnaXN0ZXJfbm90aWZpZXIoXFx1MDAyNmt2bV9yaXNjdl9jcHVfcG1fbmIpO1xcbi0tXFxuYXJjaC9yaXNjdi9rdm0vbWFpbi5jLTIzOC1lcnJfdW5yZWdpc3Rlcl9jcHVfcG06XFxuYXJjaC9yaXNjdi9rdm0vbWFpbi5jOjIzOTpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQ1BVX1BNKSlcXG5hcmNoL3Jpc2N2L2t2bS9tYWluLmMtMjQwLVxcdFxcdGNwdV9wbV91bnJlZ2lzdGVyX25vdGlmaWVyKFxcdTAwMjZrdm1fcmlzY3ZfY3B1X3BtX25iKTtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL21haW4uYz0yNDc9c3RhdGljIHZvaWQgX19leGl0IHJpc2N2X2t2bV9leGl0KHZvaWQpXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tYWluLmMtMjQ5LVxcdC8qIFVucmVnaXN0ZXIgQ1BVIFBNIG5vdGlmaWVyICovXFxuYXJjaC9yaXNjdi9rdm0vbWFpbi5jOjI1MDpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQ1BVX1BNKSlcXG5hcmNoL3Jpc2N2L2t2bS9tYWluLmMtMjUxLVxcdFxcdGNwdV9wbV91bnJlZ2lzdGVyX25vdGlmaWVyKFxcdTAwMjZrdm1fcmlzY3ZfY3B1X3BtX25iKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjI6NDQ6NDAuNTE0NTk4OTQ0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ4MzIxMDc1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNL1JJU0MtViBQb3dlciBNYW5hZ2VtZW50IEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBLVk0gcGF0Y2ggZm9yIFJJU0MtViwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyBpdCBoYW5kbGVzIHBvd2VyIG1hbmFnZW1lbnQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGEgZmV3IGtleSBmdW5jdGlvbnMuICBJIHNlZSBgS1ZNYCBhbmQgYENQVV9QTWAgYXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBmbGFncyBpbnZvbHZlZC4gTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gIEkndmUgZ290IGBrdm1fcmlzY3ZfY3B1X3BtX25vdGlmaWVyYCwgYGt2bV9yaXNjdl9haWFfZW5hYmxlYCwgYGt2bV9yaXNjdl9haWFfZGlzYWJsZWAsIGBrdm1fcmlzY3ZfY2xlYXJfZm9ybWVyX3ZjcHVgLCBga3ZtX2FyY2hfZW5hYmxlX3ZpcnR1YWxpemF0aW9uX2NwdWAsIGFuZCBga3ZtX2FyY2hfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHVgIG9uIG15IHJhZGFyLlxuXG5GaXJzdCwgbGV0J3MgcXVpY2tseSBjaGVjayB0aGUgc2NvcGUgb2YgYGt2bV9yaXNjdl9jcHVfcG1fbm90aWZpZXJgLiBZdXAsIGl0J3Mgc3RhdGljLCB3aGljaCBJJ2xsIGtlZXAgaW4gbWluZCBmb3IgaG93IGl0J3MgdXNlZC4gVGhlbiBJIHNlZSB0aGF0IGBrdm1fcmlzY3ZfYWlhX2VuYWJsZWAgYW5kIGBrdm1fcmlzY3ZfYWlhX2Rpc2FibGVgIGFyZSBleHBvcnRlZCBvciBub24tc3RhdGljLiBGaW5hbGx5LCBga3ZtX3Jpc2N2X2NsZWFyX2Zvcm1lcl92Y3B1YCBpcyBub24tc3RhdGljIGFzIHdlbGwuXG5cblNvLCBoZXJlJ3MgdGhlIGRpc3RpbGxlZCBsaXN0IG9mIHN5bWJvbHMgSSBuZWVkIHRvIHVuZGVyc3RhbmQ6IGBrdm1fcmlzY3ZfY3B1X3BtX25vdGlmaWVyYCwgYGt2bV9yaXNjdl9haWFfZW5hYmxlYCwgYGt2bV9yaXNjdl9haWFfZGlzYWJsZWAsIGBrdm1fcmlzY3ZfY2xlYXJfZm9ybWVyX3ZjcHVgLCBga3ZtX2FyY2hfZW5hYmxlX3ZpcnR1YWxpemF0aW9uX2NwdWAsIGFuZCBga3ZtX2FyY2hfZGlzYWJsZV92aXJ0dWFsaXphdGlvbl9jcHVgLiBUaGVzZSBhcmUgdGhlIGNvcmUgZWxlbWVudHMuXG5cblJpZ2h0LCBhbnl0aGluZyBlbHNlPyAgVGhlIHBhdGNoIGFmZmVjdHMgYGFyY2gvcmlzY3Yva3ZtL2FpYS5jYCwgYGFyY2gvcmlzY3Yva3ZtL21haW4uY2AsIGFuZCBgYXJjaC9yaXNjdi9rdm0vdmNwdS5jYC4gVGhhdCBnaXZlcyBtZSBhIHJvYWRtYXAgb2Ygd2hpY2ggZmlsZXMgdG8gY2hlY2sgZm9yIGNvbnRleHQuXG5cbk5vdywgbGV0J3Mgc2VlIGhvdyBgQ1BVX1BNYCBpcyBjb25maWd1cmVkLiBJcyB0aGlzIGEgdXNlci1zZXR0YWJsZSBvcHRpb24sIG9yIGlzIGl0IGltcGxpY2l0bHkgc2VsZWN0ZWQgYmFzZWQgb24gb3RoZXIgc2V0dGluZ3M/ICBUaGlzIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgcG93ZXIgbWFuYWdlbWVudCBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Mzc2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIyOjQ0OjQ2Ljk5NzgxMzE0MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI4MTI0MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENQVV9QTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvcG93ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvcG93ZXIvS2NvbmZpZz0zODU9Y29uZmlnIFBNX0dFTkVSSUNfRE9NQUlOU19PRlxcbi0tXFxua2VybmVsL3Bvd2VyL0tjb25maWctMzg4LVxcbmtlcm5lbC9wb3dlci9LY29uZmlnOjM4OTpjb25maWcgQ1BVX1BNXFxua2VybmVsL3Bvd2VyL0tjb25maWctMzkwLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjI6NDQ6NDcuMTEwNjY1OTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDkzMjA4MzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJvbSBteSBwZXJzcGVjdGl2ZTpcblxuKipUaGlua2luZyBUaHJvdWdoIENQVSBQb3dlciBNYW5hZ2VtZW50KipcblxuT2theSwgc28gYENQVV9QTWAgaXMgYSBoaWRkZW4gZmxhZywgYSBib29sZWFuIGRlZXAgaW4gdGhlIGtlcm5lbCwgbGlrZWx5IGx1cmtpbmcgaW4gdGhlIHNoYWRvd3Mgb2YgdGhlIHBvd2VyIG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBNeSBndXQgZmVlbGluZywgYmFzZWQgb24gaG93IHRoZXNlIHRoaW5ncyB1c3VhbGx5IHdvcmssIGlzIHRoYXQgaXQncyBwcm9iYWJseSBnZXR0aW5nIHNldCDigJMgZW5hYmxlZCBvciBkaXNhYmxlZCDigJMgZG93bnN0cmVhbSwgcGVyaGFwcyB0cmlnZ2VyZWQgYnkgdGhlIGJyb2FkZXIgc3lzdGVtJ3Mgc3RhdGUuIEl0J3MgYWxtb3N0IGNlcnRhaW5seSBwdWxsZWQgaW4gYXMgYSBkZXBlbmRlbmN5IGJ5IGNvbmZpZ3VyYXRpb25zIGxpa2UgYFNVU1BFTkRgIG9yIGBDUFVfSURMRWAuIFRoaW5raW5nIGFib3V0IHRoZSBjb250cm9sIGZsb3csIEknZCBiZXQgZW5hYmxpbmcgZWl0aGVyIG9mIHRob3NlIHR3byB3b3VsZCB1bHRpbWF0ZWx5IGZsaXAgdGhlIGBDUFVfUE1gIHN3aXRjaC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMgdG8gYmUgc3VyZSwgYnV0IHRoYXQncyBteSBpbml0aWFsIGh5cG90aGVzaXMuIExldCdzIHNlZSBpZiB0aGUgY29kZSBjb25maXJtcyBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTMxOSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIyOjQ0OjUwLjIwMzg3NzkxM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyNDE0MTkxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgQ1BVX1BNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybS9LY29uZmlnPTI9Y29uZmlnIEFSTVxcbi0tXFxuYXJjaC9hcm0vS2NvbmZpZy01OC1cXHRzZWxlY3QgQ0xPTkVfQkFDS1dBUkRTXFxuYXJjaC9hcm0vS2NvbmZpZzo1OTpcXHRzZWxlY3QgQ1BVX1BNIGlmIFNVU1BFTkQgfHwgQ1BVX0lETEVcXG5hcmNoL2FybS9LY29uZmlnLTYwLVxcdHNlbGVjdCBEQ0FDSEVfV09SRF9BQ0NFU1MgaWYgSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTU1xcbi0tXFxuYXJjaC9hcm0vS2NvbmZpZz05OTQ9Y29uZmlnIEJMX1NXSVRDSEVSXFxuLS1cXG5hcmNoL2FybS9LY29uZmlnLTk5Ni1cXHRkZXBlbmRzIG9uIEJJR19MSVRUTEUgXFx1MDAyNlxcdTAwMjYgTUNQTSBcXHUwMDI2XFx1MDAyNiBIT1RQTFVHX0NQVSBcXHUwMDI2XFx1MDAyNiBBUk1fR0lDXFxuYXJjaC9hcm0vS2NvbmZpZzo5OTc6XFx0c2VsZWN0IENQVV9QTVxcbmFyY2gvYXJtL0tjb25maWctOTk4LVxcdGhlbHBcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZz0yPWNvbmZpZyBBUk02NFxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnLTExMS1cXHRzZWxlY3QgQ09NTU9OX0NMS1xcbmFyY2gvYXJtNjQvS2NvbmZpZzoxMTI6XFx0c2VsZWN0IENQVV9QTSBpZiAoU1VTUEVORCB8fCBDUFVfSURMRSlcXG5hcmNoL2FybTY0L0tjb25maWctMTEzLVxcdHNlbGVjdCBDUFVNQVNLX09GRlNUQUNLIGlmIE5SX0NQVVMgXFx1MDAzZSAyNTZcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc9Mj1jb25maWcgTE9PTkdBUkNIXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTg3LVxcdHNlbGVjdCBDT01NT05fQ0xLXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZzo4ODpcXHRzZWxlY3QgQ1BVX1BNXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy04OS1cXHRzZWxlY3QgRURBQ19TVVBQT1JUXFxuLS1cXG5hcmNoL21pcHMvS2NvbmZpZz0yPWNvbmZpZyBNSVBTXFxuLS1cXG5hcmNoL21pcHMvS2NvbmZpZy0zNS1cXHRzZWxlY3QgQ1BVX05PX0VGRklDSUVOVF9GRlMgaWYgKFRBUkdFVF9JU0FfUkVWIFxcdTAwM2MgMSlcXG5hcmNoL21pcHMvS2NvbmZpZzozNjpcXHRzZWxlY3QgQ1BVX1BNIGlmIENQVV9JRExFIHx8IFNVU1BFTkRcXG5hcmNoL21pcHMvS2NvbmZpZy0zNy1cXHRzZWxlY3QgR0VORVJJQ19BVE9NSUM2NCBpZiAhNjRCSVRcXG4tLVxcbmFyY2gvcmlzY3YvS2NvbmZpZz0xMz1jb25maWcgUklTQ1ZcXG4tLVxcbmFyY2gvcmlzY3YvS2NvbmZpZy05OC1cXHRzZWxlY3QgQ1BVX05PX0VGRklDSUVOVF9GRlMgaWYgIVJJU0NWX0lTQV9aQkJcXG5hcmNoL3Jpc2N2L0tjb25maWc6OTk6XFx0c2VsZWN0IENQVV9QTSBpZiBDUFVfSURMRSB8fCBISUJFUk5BVElPTiB8fCBTVVNQRU5EXFxuYXJjaC9yaXNjdi9LY29uZmlnLTEwMC1cXHRzZWxlY3QgRFlOQU1JQ19GVFJBQ0UgaWYgRlVOQ1RJT05fVFJBQ0VSXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIyOjQ0OjUyLjYyODAzMDA2MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDM3ODE5MTAxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUklTQy1WIEtWTSBhbmQgQ1BVIFBvd2VyIE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBgQ1BVX0lETEVgLCBgU1VTUEVORGAsIG9yIGBISUJFUk5BVElPTmAgb3B0aW9ucyByZWxhdGUgdG8gYENQVV9QTWAgb24gUklTQy1WLiBJdCBzZWVtcyBsaWtlIHNlbGVjdGluZyBhbnkgb2YgdGhlIGZvcm1lciBhdXRvbWF0aWNhbGx5IGltcGxpZXMgdGhlIGxhdHRlciwgd2hpY2ggaXMgZ3JlYXQuIEkgY2FuIGp1c3QgZXhwbGljaXRseSBzZXQgYENQVV9JRExFYCBhbmQgYFNVU1BFTkRgIGluIHRoZSBjb25maWd1cmF0aW9uLiBTeXprYWxsZXIsIHdpdGggaXRzIGRlcGVuZGVuY3kgcmVzb2x1dGlvbiBjYXBhYmlsaXRpZXMsIHNob3VsZCBiZSBhYmxlIHRvIGhhbmRsZSB0aGUgdW5kZXJseWluZyBkZXBlbmRlbmNpZXMsIGV2ZW4gaWYgYENQVV9QTWAgaXRzZWxmIGlzIGhpZGRlbi4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncy5cblxuU28sIHRoZSBrZXkgY29uZmlncyBJJ20gZGVhbGluZyB3aXRoIGFyZSBgS1ZNYCwgYENQVV9JRExFYCwgYW5kIGBTVVNQRU5EYC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGZvY3VzIHN5bWJvbHMuIEkndmUgZ290IHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSB0ZXN0aW5nIHRoZSBmb2N1cyBzeW1ib2xzOiBga3ZtX3Jpc2N2X2NwdV9wbV9ub3RpZmllcmAsIGBrdm1fcmlzY3ZfYWlhX2VuYWJsZWAsIGBrdm1fcmlzY3ZfYWlhX2Rpc2FibGVgLCBga3ZtX3Jpc2N2X2NsZWFyX2Zvcm1lcl92Y3B1YCwgYGt2bV9hcmNoX2VuYWJsZV92aXJ0dWFsaXphdGlvbl9jcHVgLCBhbmQgYGt2bV9hcmNoX2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1YC5cblxuT2gsIGFuZCB0aGVyZSBhcmUgc29tZSBvdGhlciBmdW5jdGlvbnMgdGhhdCBhcmUgYWxzbyByZWxldmFudDogYGt2bV9yaXNjdl9jc3JfZW5hYmxlYCBhbmQgYGt2bV9yaXNjdl9jc3JfZGlzYWJsZWAuIEkgc2hvdWxkIGRlZmluaXRlbHkgaW5jbHVkZSB0aG9zZSBpbiB0aGUgZnV6emluZyBzY29wZS5cblxuQSBxdWljayBjaGVjayBjb25maXJtcyB0aGF0IGBrdm1fcmlzY3ZfY3NyX2VuYWJsZWAgYW5kIGBrdm1fcmlzY3ZfY3NyX2Rpc2FibGVgIGFyZSBib3RoIHN0YXRpYywgd2hpY2ggbWVhbnMgdGhleSBhcmUgb25seSB2aXNpYmxlIHdpdGhpbiB0aGVpciByZXNwZWN0aXZlIHNvdXJjZSBmaWxlcy4gSSdsbCBhZGQgdGhlbSB0byBteSBmb2N1cyBzeW1ib2xzLlxuXG5TbywgbXkgZmluYWwgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIGlzOlxuYGt2bV9yaXNjdl9jcHVfcG1fbm90aWZpZXJgXG5ga3ZtX3Jpc2N2X2FpYV9lbmFibGVgXG5ga3ZtX3Jpc2N2X2FpYV9kaXNhYmxlYFxuYGt2bV9yaXNjdl9jbGVhcl9mb3JtZXJfdmNwdWBcbmBrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1YFxuYGt2bV9hcmNoX2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1YFxuYGt2bV9yaXNjdl9jc3JfZW5hYmxlYFxuYGt2bV9yaXNjdl9jc3JfZGlzYWJsZWBcblxuQWxyaWdodCwgdGhlIHBhdGNoIG1vZGlmaWVzIFJJU0MtViBLVk0gdG8gbWFuYWdlIENQVSBwb3dlciBldmVudHMgZm9yIHRob3NlIG5vbi1yZXRlbnRpb24gaWRsZSBzdGF0ZXMuIFRoaXMgaW52b2x2ZXMgYSBDUFUgUE0gbm90aWZpZXIgYW5kIG1vZGlmaWNhdGlvbnMgdG8gQUlBIGVuYWJsZS9kaXNhYmxlIHBhdGhzIHRvIHN1cHBvcnQgdGhpcyBDU1Igc2F2ZS9yZXN0b3JlIG1lY2hhbmlzbS4gVGhpcyBpcyBhIGNvcmUgS1ZNIGNoYW5nZSwgYW5kIGl0J3MgYWJzb2x1dGVseSBjcml0aWNhbCB0byBmdXp6IHRoaXMgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIHZpcnR1YWxpemF0aW9uIG9yIHBvd2VyIG1hbmFnZW1lbnQuXG5cblRpbWUgdG8gY2FsbCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxMTEsIk91dHB1dFRva2VucyI6MjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIyOjQ1OjAzLjAwNjIyNzMyNFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0Nzc3MzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIkNQVV9JRExFXCIsXG4gICAgXCJTVVNQRU5EXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3Jpc2N2X2NwdV9wbV9ub3RpZmllclwiLFxuICAgIFwia3ZtX3Jpc2N2X2FpYV9lbmFibGVcIixcbiAgICBcImt2bV9yaXNjdl9haWFfZGlzYWJsZVwiLFxuICAgIFwia3ZtX3Jpc2N2X2NsZWFyX2Zvcm1lcl92Y3B1XCIsXG4gICAgXCJrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1XCIsXG4gICAgXCJrdm1fYXJjaF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdVwiLFxuICAgIFwia3ZtX3Jpc2N2X2Nzcl9lbmFibGVcIixcbiAgICBcImt2bV9yaXNjdl9jc3JfZGlzYWJsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhpcyBwYXRjaCBtb2RpZmllcyBSSVNDLVYgS1ZNIHRvIGhhbmRsZSBDUFUgcG93ZXIgbWFuYWdlbWVudCBldmVudHMgKENQVV9QTSkgZm9yIG5vbi1yZXRlbnRpb24gaWRsZSBzdGF0ZXMuIEl0IGludHJvZHVjZXMgYSBDUFUgUE0gbm90aWZpZXIgYW5kIG1vZGlmaWVzIEFJQSAoQWR2YW5jZWQgSW50ZXJydXB0IEFyY2hpdGVjdHVyZSkgZW5hYmxlL2Rpc2FibGUgcGF0aHMgdG8gc3VwcG9ydCBsaWdodHdlaWdodCBDU1Igc2F2ZS9yZXN0b3JlLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgS1ZNIGxvZ2ljIG9uIFJJU0MtViBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gdmlydHVhbGl6YXRpb24gb3IgcG93ZXIgbWFuYWdlbWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIkNQVV9JRExFXCIsXG4gICAgXCJTVVNQRU5EXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3Jpc2N2X2NwdV9wbV9ub3RpZmllclwiLFxuICAgIFwia3ZtX3Jpc2N2X2FpYV9lbmFibGVcIixcbiAgICBcImt2bV9yaXNjdl9haWFfZGlzYWJsZVwiLFxuICAgIFwia3ZtX3Jpc2N2X2NsZWFyX2Zvcm1lcl92Y3B1XCIsXG4gICAgXCJrdm1fYXJjaF9lbmFibGVfdmlydHVhbGl6YXRpb25fY3B1XCIsXG4gICAgXCJrdm1fYXJjaF9kaXNhYmxlX3ZpcnR1YWxpemF0aW9uX2NwdVwiLFxuICAgIFwia3ZtX3Jpc2N2X2Nzcl9lbmFibGVcIixcbiAgICBcImt2bV9yaXNjdl9jc3JfZGlzYWJsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhpcyBwYXRjaCBtb2RpZmllcyBSSVNDLVYgS1ZNIHRvIGhhbmRsZSBDUFUgcG93ZXIgbWFuYWdlbWVudCBldmVudHMgKENQVV9QTSkgZm9yIG5vbi1yZXRlbnRpb24gaWRsZSBzdGF0ZXMuIEl0IGludHJvZHVjZXMgYSBDUFUgUE0gbm90aWZpZXIgYW5kIG1vZGlmaWVzIEFJQSAoQWR2YW5jZWQgSW50ZXJydXB0IEFyY2hpdGVjdHVyZSkgZW5hYmxlL2Rpc2FibGUgcGF0aHMgdG8gc3VwcG9ydCBsaWdodHdlaWdodCBDU1Igc2F2ZS9yZXN0b3JlLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgS1ZNIGxvZ2ljIG9uIFJJU0MtViBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gdmlydHVhbGl6YXRpb24gb3IgcG93ZXIgbWFuYWdlbWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxmvmk[1] Phase: Succeeded StartedAt: 2026-06-26 22:46:44 +0000 UTC FinishedAt: 2026-06-26 22:46:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmvmk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-26 22:46:44 +0000 UTC FinishedAt: 2026-06-26 22:46:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmvmk[2] Phase: Succeeded StartedAt: 2026-06-26 22:46:44 +0000 UTC FinishedAt: 2026-06-27 00:08:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmvmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_cpu_pm_notifier","kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_clear_former_vcpu","kvm_arch_enable_virtualization_cpu","kvm_arch_disable_virtualization_cpu","kvm_riscv_csr_enable","kvm_riscv_csr_disable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"series_id":"e0a55055-7268-4630-9cbf-b7bb204ef912","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-06-26 22:46:44 +0000 UTC FinishedAt: 2026-06-27 00:08:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_cpu_pm_notifier","kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_clear_former_vcpu","kvm_arch_enable_virtualization_cpu","kvm_arch_disable_virtualization_cpu","kvm_riscv_csr_enable","kvm_riscv_csr_disable"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"series_id":"e0a55055-7268-4630-9cbf-b7bb204ef912","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-workflowxmvmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_cpu_pm_notifier","kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_clear_former_vcpu","kvm_arch_enable_virtualization_cpu","kvm_arch_disable_virtualization_cpu","kvm_riscv_csr_enable","kvm_riscv_csr_disable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"series_id":"e0a55055-7268-4630-9cbf-b7bb204ef912","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-06-26 22:46:44 +0000 UTC FinishedAt: 2026-06-26 22:46:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmvmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_cpu_pm_notifier","kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_clear_former_vcpu","kvm_arch_enable_virtualization_cpu","kvm_arch_disable_virtualization_cpu","kvm_riscv_csr_enable","kvm_riscv_csr_disable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"series_id":"e0a55055-7268-4630-9cbf-b7bb204ef912","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-06-26 22:46:44 +0000 UTC FinishedAt: 2026-06-26 22:46:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"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-workflowxmvmk/series-workflowxmvmk-convert-artifact-3418491962/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxmvmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_cpu_pm_notifier","kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_clear_former_vcpu","kvm_arch_enable_virtualization_cpu","kvm_arch_disable_virtualization_cpu","kvm_riscv_csr_enable","kvm_riscv_csr_disable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"series_id":"e0a55055-7268-4630-9cbf-b7bb204ef912","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-06-26 22:46:55 +0000 UTC FinishedAt: 2026-06-26 23:35:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmvmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_cpu_pm_notifier","kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_clear_former_vcpu","kvm_arch_enable_virtualization_cpu","kvm_arch_disable_virtualization_cpu","kvm_riscv_csr_enable","kvm_riscv_csr_disable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"series_id":"e0a55055-7268-4630-9cbf-b7bb204ef912","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-06-26 22:46:55 +0000 UTC FinishedAt: 2026-06-26 23:35:53 +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:*5e5a8adf-1e64-46fd-9024-08e8266d1b66,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-workflowxmvmk/series-workflowxmvmk-convert-artifact-3418491962/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": "08a32be4-4a2f-4852-b75d-6b82ce296240", "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-workflowxmvmk/series-workflowxmvmk-build-action-100614632/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxmvmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_cpu_pm_notifier","kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_clear_former_vcpu","kvm_arch_enable_virtualization_cpu","kvm_arch_disable_virtualization_cpu","kvm_riscv_csr_enable","kvm_riscv_csr_disable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"series_id":"e0a55055-7268-4630-9cbf-b7bb204ef912","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-06-26 22:46:55 +0000 UTC FinishedAt: 2026-06-26 23:35:43 +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:*5e5a8adf-1e64-46fd-9024-08e8266d1b66,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-workflowxmvmk/series-workflowxmvmk-convert-artifact-3418491962/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": "08a32be4-4a2f-4852-b75d-6b82ce296240", "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-workflowxmvmk/series-workflowxmvmk-build-action-100614632/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxmvmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_cpu_pm_notifier","kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_clear_former_vcpu","kvm_arch_enable_virtualization_cpu","kvm_arch_disable_virtualization_cpu","kvm_riscv_csr_enable","kvm_riscv_csr_disable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"series_id":"e0a55055-7268-4630-9cbf-b7bb204ef912","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-06-26 23:35:53 +0000 UTC FinishedAt: 2026-06-26 23:35:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmvmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_cpu_pm_notifier","kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_clear_former_vcpu","kvm_arch_enable_virtualization_cpu","kvm_arch_disable_virtualization_cpu","kvm_riscv_csr_enable","kvm_riscv_csr_disable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"series_id":"e0a55055-7268-4630-9cbf-b7bb204ef912","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-06-26 23:35:53 +0000 UTC FinishedAt: 2026-06-26 23:35:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmvmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_cpu_pm_notifier","kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_clear_former_vcpu","kvm_arch_enable_virtualization_cpu","kvm_arch_disable_virtualization_cpu","kvm_riscv_csr_enable","kvm_riscv_csr_disable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"series_id":"e0a55055-7268-4630-9cbf-b7bb204ef912","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-06-26 23:35:53 +0000 UTC FinishedAt: 2026-06-26 23:36:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmvmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_cpu_pm_notifier","kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_clear_former_vcpu","kvm_arch_enable_virtualization_cpu","kvm_arch_disable_virtualization_cpu","kvm_riscv_csr_enable","kvm_riscv_csr_disable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"series_id":"e0a55055-7268-4630-9cbf-b7bb204ef912","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-06-26 23:35:53 +0000 UTC FinishedAt: 2026-06-26 23:36:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"series_id":"e0a55055-7268-4630-9cbf-b7bb204ef912","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-workflowxmvmk/series-workflowxmvmk-convert-artifact-495400597/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxmvmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_cpu_pm_notifier","kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_clear_former_vcpu","kvm_arch_enable_virtualization_cpu","kvm_arch_disable_virtualization_cpu","kvm_riscv_csr_enable","kvm_riscv_csr_disable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"series_id":"e0a55055-7268-4630-9cbf-b7bb204ef912","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-06-26 23:36:13 +0000 UTC FinishedAt: 2026-06-26 23:38:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmvmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_cpu_pm_notifier","kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_clear_former_vcpu","kvm_arch_enable_virtualization_cpu","kvm_arch_disable_virtualization_cpu","kvm_riscv_csr_enable","kvm_riscv_csr_disable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"series_id":"e0a55055-7268-4630-9cbf-b7bb204ef912","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-06-26 23:36:13 +0000 UTC FinishedAt: 2026-06-26 23:38:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*08a32be4-4a2f-4852-b75d-6b82ce296240,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-workflowxmvmk/series-workflowxmvmk-build-action-100614632/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-workflowxmvmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_cpu_pm_notifier","kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_clear_former_vcpu","kvm_arch_enable_virtualization_cpu","kvm_arch_disable_virtualization_cpu","kvm_riscv_csr_enable","kvm_riscv_csr_disable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"series_id":"e0a55055-7268-4630-9cbf-b7bb204ef912","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-06-26 23:38:16 +0000 UTC FinishedAt: 2026-06-26 23:38:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmvmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_cpu_pm_notifier","kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_clear_former_vcpu","kvm_arch_enable_virtualization_cpu","kvm_arch_disable_virtualization_cpu","kvm_riscv_csr_enable","kvm_riscv_csr_disable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"series_id":"e0a55055-7268-4630-9cbf-b7bb204ef912","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-06-26 23:38:16 +0000 UTC FinishedAt: 2026-06-26 23:38:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmvmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_cpu_pm_notifier","kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_clear_former_vcpu","kvm_arch_enable_virtualization_cpu","kvm_arch_disable_virtualization_cpu","kvm_riscv_csr_enable","kvm_riscv_csr_disable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"series_id":"e0a55055-7268-4630-9cbf-b7bb204ef912","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-06-26 23:38:16 +0000 UTC FinishedAt: 2026-06-27 00:05:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmvmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_cpu_pm_notifier","kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_clear_former_vcpu","kvm_arch_enable_virtualization_cpu","kvm_arch_disable_virtualization_cpu","kvm_riscv_csr_enable","kvm_riscv_csr_disable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"series_id":"e0a55055-7268-4630-9cbf-b7bb204ef912","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-06-26 23:38:16 +0000 UTC FinishedAt: 2026-06-27 00:05:01 +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:*5e5a8adf-1e64-46fd-9024-08e8266d1b66,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-workflowxmvmk/series-workflowxmvmk-convert-artifact-495400597/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": "1b002c04-279b-40c8-ac0c-21ad3151d3fa", "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-workflowxmvmk/series-workflowxmvmk-build-action-609606945/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxmvmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_cpu_pm_notifier","kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_clear_former_vcpu","kvm_arch_enable_virtualization_cpu","kvm_arch_disable_virtualization_cpu","kvm_riscv_csr_enable","kvm_riscv_csr_disable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"series_id":"e0a55055-7268-4630-9cbf-b7bb204ef912","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-06-26 23:38:16 +0000 UTC FinishedAt: 2026-06-27 00:04:51 +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:*5e5a8adf-1e64-46fd-9024-08e8266d1b66,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-workflowxmvmk/series-workflowxmvmk-convert-artifact-495400597/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": "1b002c04-279b-40c8-ac0c-21ad3151d3fa", "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-workflowxmvmk/series-workflowxmvmk-build-action-609606945/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxmvmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_cpu_pm_notifier","kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_clear_former_vcpu","kvm_arch_enable_virtualization_cpu","kvm_arch_disable_virtualization_cpu","kvm_riscv_csr_enable","kvm_riscv_csr_disable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"series_id":"e0a55055-7268-4630-9cbf-b7bb204ef912","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-06-27 00:05:01 +0000 UTC FinishedAt: 2026-06-27 00:05:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmvmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_cpu_pm_notifier","kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_clear_former_vcpu","kvm_arch_enable_virtualization_cpu","kvm_arch_disable_virtualization_cpu","kvm_riscv_csr_enable","kvm_riscv_csr_disable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"series_id":"e0a55055-7268-4630-9cbf-b7bb204ef912","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-06-27 00:05:01 +0000 UTC FinishedAt: 2026-06-27 00:05:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmvmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_cpu_pm_notifier","kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_clear_former_vcpu","kvm_arch_enable_virtualization_cpu","kvm_arch_disable_virtualization_cpu","kvm_riscv_csr_enable","kvm_riscv_csr_disable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"series_id":"e0a55055-7268-4630-9cbf-b7bb204ef912","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-06-27 00:05:01 +0000 UTC FinishedAt: 2026-06-27 00:07:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmvmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_cpu_pm_notifier","kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_clear_former_vcpu","kvm_arch_enable_virtualization_cpu","kvm_arch_disable_virtualization_cpu","kvm_riscv_csr_enable","kvm_riscv_csr_disable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"series_id":"e0a55055-7268-4630-9cbf-b7bb204ef912","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-06-27 00:05:01 +0000 UTC FinishedAt: 2026-06-27 00:07: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:*1b002c04-279b-40c8-ac0c-21ad3151d3fa,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-workflowxmvmk/series-workflowxmvmk-build-action-609606945/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-workflowxmvmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_cpu_pm_notifier","kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_clear_former_vcpu","kvm_arch_enable_virtualization_cpu","kvm_arch_disable_virtualization_cpu","kvm_riscv_csr_enable","kvm_riscv_csr_disable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"series_id":"e0a55055-7268-4630-9cbf-b7bb204ef912","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-06-27 00:07:11 +0000 UTC FinishedAt: 2026-06-27 00:08:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmvmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_cpu_pm_notifier","kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_clear_former_vcpu","kvm_arch_enable_virtualization_cpu","kvm_arch_disable_virtualization_cpu","kvm_riscv_csr_enable","kvm_riscv_csr_disable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"series_id":"e0a55055-7268-4630-9cbf-b7bb204ef912","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-06-27 00:07:11 +0000 UTC FinishedAt: 2026-06-27 00:08:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_cpu_pm_notifier","kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_clear_former_vcpu","kvm_arch_enable_virtualization_cpu","kvm_arch_disable_virtualization_cpu","kvm_riscv_csr_enable","kvm_riscv_csr_disable"],"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:*08a32be4-4a2f-4852-b75d-6b82ce296240,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1b002c04-279b-40c8-ac0c-21ad3151d3fa,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-workflowxmvmk/series-workflowxmvmk-build-action-100614632/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-workflowxmvmk/series-workflowxmvmk-build-action-609606945/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowxmvmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_cpu_pm_notifier","kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_clear_former_vcpu","kvm_arch_enable_virtualization_cpu","kvm_arch_disable_virtualization_cpu","kvm_riscv_csr_enable","kvm_riscv_csr_disable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"series_id":"e0a55055-7268-4630-9cbf-b7bb204ef912","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-06-27 00:07:11 +0000 UTC FinishedAt: 2026-06-27 00:07:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmvmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_cpu_pm_notifier","kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_clear_former_vcpu","kvm_arch_enable_virtualization_cpu","kvm_arch_disable_virtualization_cpu","kvm_riscv_csr_enable","kvm_riscv_csr_disable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"series_id":"e0a55055-7268-4630-9cbf-b7bb204ef912","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-06-27 00:07:11 +0000 UTC FinishedAt: 2026-06-27 00:07:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_cpu_pm_notifier","kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_clear_former_vcpu","kvm_arch_enable_virtualization_cpu","kvm_arch_disable_virtualization_cpu","kvm_riscv_csr_enable","kvm_riscv_csr_disable"],"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-workflowxmvmk/series-workflowxmvmk-convert-artifact-1879913850/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxmvmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_cpu_pm_notifier","kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_clear_former_vcpu","kvm_arch_enable_virtualization_cpu","kvm_arch_disable_virtualization_cpu","kvm_riscv_csr_enable","kvm_riscv_csr_disable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"series_id":"e0a55055-7268-4630-9cbf-b7bb204ef912","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-06-27 00:07:11 +0000 UTC FinishedAt: 2026-06-27 00:07:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmvmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_cpu_pm_notifier","kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_clear_former_vcpu","kvm_arch_enable_virtualization_cpu","kvm_arch_disable_virtualization_cpu","kvm_riscv_csr_enable","kvm_riscv_csr_disable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"series_id":"e0a55055-7268-4630-9cbf-b7bb204ef912","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-06-27 00:07:11 +0000 UTC FinishedAt: 2026-06-27 00:07:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmvmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_cpu_pm_notifier","kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_clear_former_vcpu","kvm_arch_enable_virtualization_cpu","kvm_arch_disable_virtualization_cpu","kvm_riscv_csr_enable","kvm_riscv_csr_disable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"series_id":"e0a55055-7268-4630-9cbf-b7bb204ef912","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-06-27 00:07:11 +0000 UTC FinishedAt: 2026-06-27 00:07:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmvmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_cpu_pm_notifier","kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_clear_former_vcpu","kvm_arch_enable_virtualization_cpu","kvm_arch_disable_virtualization_cpu","kvm_riscv_csr_enable","kvm_riscv_csr_disable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"series_id":"e0a55055-7268-4630-9cbf-b7bb204ef912","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-06-27 00:07:35 +0000 UTC FinishedAt: 2026-06-27 00:08:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxmvmk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_cpu_pm_notifier","kvm_riscv_aia_enable","kvm_riscv_aia_disable","kvm_riscv_clear_former_vcpu","kvm_arch_enable_virtualization_cpu","kvm_arch_disable_virtualization_cpu","kvm_riscv_csr_enable","kvm_riscv_csr_disable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"52738352a6f29279e15285fcb7b50241ef867e27","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","CPU_IDLE","SUSPEND"],"series_id":"e0a55055-7268-4630-9cbf-b7bb204ef912","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-06-27 00:07:35 +0000 UTC FinishedAt: 2026-06-27 00:08:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*08a32be4-4a2f-4852-b75d-6b82ce296240,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1b002c04-279b-40c8-ac0c-21ad3151d3fa,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-workflowxmvmk/series-workflowxmvmk-build-action-100614632/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-workflowxmvmk/series-workflowxmvmk-build-action-609606945/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-workflowxmvmk/series-workflowxmvmk-convert-artifact-1879913850/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,}