Name: series-workflow7p9dn Phase: Succeeded StartedAt: 2026-06-25 01:54:19 +0000 UTC FinishedAt: 2026-06-25 06:14:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p9dn[0] Phase: Succeeded StartedAt: 2026-06-25 01:54:19 +0000 UTC FinishedAt: 2026-06-25 02:11:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p9dn[0].run-triage Phase: Succeeded StartedAt: 2026-06-25 01:54:19 +0000 UTC FinishedAt: 2026-06-25 02:11:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "269f2b43fae692d1f3988c9f888a6301aa537b82", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PER_VMA_LOCK", "MMU_GATHER_RCU_TABLE_FREE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "269f2b43fae692d1f3988c9f888a6301aa537b82", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PER_VMA_LOCK", "MMU_GATHER_RCU_TABLE_FREE" ], "series_id": "b616dfd4-c776-4fb2-b2c8-c77c3484c8f4" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "access_remote_vm_fast", "__access_remote_vm", "folio_walk_start", "copy_folio_pages", "vma_permits_fast_access" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDAyOjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BFUl9WTUFfTE9DSyYjMzQ7LAogICAgJiMzNDtNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWNjZXNzX3JlbW90ZV92bV9mYXN0JiMzNDssCiAgICAmIzM0O19fYWNjZXNzX3JlbW90ZV92bSYjMzQ7LAogICAgJiMzNDtmb2xpb193YWxrX3N0YXJ0JiMzNDssCiAgICAmIzM0O2NvcHlfZm9saW9fcGFnZXMmIzM0OywKICAgICYjMzQ7dm1hX3Blcm1pdHNfZmFzdF9hY2Nlc3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxvY2tsZXNzIGZhc3QgcGF0aCBmb3IgcmVtb3RlIG1lbW9yeSBhY2Nlc3MgKGBfX2FjY2Vzc19yZW1vdGVfdm1gKSwgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBzeXNjYWxscyBsaWtlIGBwcm9jZXNzX3ZtX3JlYWR2YCBhbmQgYHB0cmFjZWAuIFRoZSBmYXN0IHBhdGggcmVsaWVzIG9uIHBlci1WTUEgbG9ja3MgYW5kIFJDVS1mcmVlZCBwYWdlIHRhYmxlcywgbWFraW5nIGl0IGhpZ2hseSBmdW5jdGlvbmFsIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDAyOjEwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTYwMTc0NDI2MjNlYTRlNmVkNTBkOWI2MDAzYmZiZTBmNGM5NDM4OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVuIDI1IDAyOjEwOjEzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oXG5pbmRleCBlZjViNTA3ZGUzNGUyZS4uY2VlNzEwZjY0NjU4YWEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oXG5AQCAtMTAwLDE4ICYjNDM7MTAwLDE4IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtbV9sYW1fY3IzX21hc2soc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gc3RhdGljIGlubGluZSB2b2lkIGR1cF9sYW0oc3RydWN0IG1tX3N0cnVjdCAqb2xkbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIHtcbiBcdG1tLVx1MDAzZWNvbnRleHQubGFtX2NyM19tYXNrID0gb2xkbW0tXHUwMDNlY29udGV4dC5sYW1fY3IzX21hc2s7XG4tXHRtbS1cdTAwM2Vjb250ZXh0LnVudGFnX21hc2sgPSBvbGRtbS1cdTAwM2Vjb250ZXh0LnVudGFnX21hc2s7XG4mIzQzO1x0V1JJVEVfT05DRShtbS1cdTAwM2Vjb250ZXh0LnVudGFnX21hc2ssIFJFQURfT05DRShvbGRtbS1cdTAwM2Vjb250ZXh0LnVudGFnX21hc2spKTtcbiB9XG4gXG4gI2RlZmluZSBtbV91bnRhZ19tYXNrIG1tX3VudGFnX21hc2tcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbW1fdW50YWdfbWFzayhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiB7XG4tXHRyZXR1cm4gbW0tXHUwMDNlY29udGV4dC51bnRhZ19tYXNrO1xuJiM0MztcdHJldHVybiBSRUFEX09OQ0UobW0tXHUwMDNlY29udGV4dC51bnRhZ19tYXNrKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIG1tX3Jlc2V0X3VudGFnX21hc2soc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4ge1xuLVx0bW0tXHUwMDNlY29udGV4dC51bnRhZ19tYXNrID0gLTFVTDtcbiYjNDM7XHRXUklURV9PTkNFKG1tLVx1MDAzZWNvbnRleHQudW50YWdfbWFzaywgLTFVTCk7XG4gfVxuIFxuICNkZWZpbmUgYXJjaF9wZ3RhYmxlX2RtYV9jb21wYXQgYXJjaF9wZ3RhYmxlX2RtYV9jb21wYXRcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzXzY0LmhcbmluZGV4IDIwZGUzNGNjOWFhNmU3Li45MzNiMGI4YjRkNjA0NyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oXG5AQCAtMzksMTEgJiM0MzszOSwyMyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX191bnRhZ2dlZF9hZGRyKHVuc2lnbmVkIGxvbmcgYWRkcilcbiBcdChfX2ZvcmNlIF9fdHlwZW9mX18oYWRkcikpX191bnRhZ2dlZF9hZGRyKF9fYWRkcik7XHRcdFxcXG4gfSlcbiBcbiYjNDM7LyogU3RyaXAgdGhlIHRhZyBiaXRzIGZyb20gYSByZW1vdGUgbW0mIzM5O3MgYWRkcmVzczsgdXNhYmxlIHdpdGhvdXQgdGhlIG1tYXAgbG9jay4gKi9cbiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fdW50YWdnZWRfYWRkcl9yZW1vdGVfdW5sb2NrZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgYWRkcilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBhZGRyIFx1MDAyNiBSRUFEX09OQ0UobW0tXHUwMDNlY29udGV4dC51bnRhZ19tYXNrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2RlZmluZSB1bnRhZ2dlZF9hZGRyX3JlbW90ZV91bmxvY2tlZChtbSwgYWRkcilcdCh7XHRcdFx0XFxcbiYjNDM7XHR1bnNpZ25lZCBsb25nIF9fYWRkciA9IChfX2ZvcmNlIHVuc2lnbmVkIGxvbmcpKGFkZHIpO1x0XHRcXFxuJiM0MztcdChfX2ZvcmNlIF9fdHlwZW9mX18oYWRkcikpX191bnRhZ2dlZF9hZGRyX3JlbW90ZV91bmxvY2tlZChtbSwgX19hZGRyKTsgXFxcbiYjNDM7fSlcbiYjNDM7XG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fdW50YWdnZWRfYWRkcl9yZW1vdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gXHRcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBhZGRyKVxuIHtcbiBcdG1tYXBfYXNzZXJ0X2xvY2tlZChtbSk7XG4tXHRyZXR1cm4gYWRkciBcdTAwMjYgKG1tKS1cdTAwM2Vjb250ZXh0LnVudGFnX21hc2s7XG4mIzQzO1x0cmV0dXJuIF9fdW50YWdnZWRfYWRkcl9yZW1vdGVfdW5sb2NrZWQobW0sIGFkZHIpO1xuIH1cbiBcbiAjZGVmaW5lIHVudGFnZ2VkX2FkZHJfcmVtb3RlKG1tLCBhZGRyKVx0KHtcdFx0XHRcdFxcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmNcbmluZGV4IGQ0NGFmYmUwMDViYjUxLi41NTA5NjEzNmRlNTMxMyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmNcbkBAIC04MTQsNyAmIzQzOzgxNCw3IEBAIHN0YXRpYyB2b2lkIGVuYWJsZV9sYW1fZnVuYyh2b2lkICpfX21tKVxuIHN0YXRpYyB2b2lkIG1tX2VuYWJsZV9sYW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4ge1xuIFx0bW0tXHUwMDNlY29udGV4dC5sYW1fY3IzX21hc2sgPSBYODZfQ1IzX0xBTV9VNTc7XG4tXHRtbS1cdTAwM2Vjb250ZXh0LnVudGFnX21hc2sgPSAgfkdFTk1BU0soNjIsIDU3KTtcbiYjNDM7XHRXUklURV9PTkNFKG1tLVx1MDAzZWNvbnRleHQudW50YWdfbWFzaywgfkdFTk1BU0soNjIsIDU3KSk7XG4gXG4gXHQvKlxuIFx0ICogRXZlbiB0aG91Z2ggdGhlIHByb2Nlc3MgbXVzdCBzdGlsbCBiZSBzaW5nbGUtdGhyZWFkZWQgYXQgdGhpc1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZXdhbGsuaCBiL2luY2x1ZGUvbGludXgvcGFnZXdhbGsuaFxuaW5kZXggYjQxZDcyNjVjMDFiYzIuLmQwMzg3NDcwZDczMjJiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdld2Fsay5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmhcbkBAIC0xNTAsNiAmIzQzOzE1MCwxMyBAQCB0eXBlZGVmIGludCBfX2JpdHdpc2UgZm9saW9fd2Fsa19mbGFnc190O1xuIFxuIC8qIFdhbGsgc2hhcmVkIHplcm9wYWdlcyAoc21hbGwgJiM0MzsgaHVnZSkgYXMgd2VsbC4gKi9cbiAjZGVmaW5lIEZXX1pFUk9QQUdFXHRcdFx0KChfX2ZvcmNlIGZvbGlvX3dhbGtfZmxhZ3NfdClCSVQoMCkpXG4mIzQzOy8qXG4mIzQzOyAqIFRoZSBjYWxsZXIgaG9sZHMgdGhlIHBlci1WTUEgbG9jayBpbnN0ZWFkIG9mIHRoZSBtbWFwIGxvY2ssIHdpdGggaW50ZXJydXB0c1xuJiM0MzsgKiBkaXNhYmxlZCBhY3Jvc3MgdGhlIHdhbGsgKHVudGlsIGZvbGlvX3dhbGtfZW5kKCkpIHRvIHNlcmlhbGl6ZSBhZ2FpbnN0IHBhZ2VcbiYjNDM7ICogdGFibGUgZnJlZWluZywgdGhlIHNhbWUgd2F5IGd1cF9mYXN0IGRvZXMuIE9ubHkgdmFsaWQgd2l0aCBSQ1UtZnJlZWQgcGFnZVxuJiM0MzsgKiB0YWJsZXMgKENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFKSBhbmQgbm90IGZvciBodWdldGxiLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBGV19WTUFfTE9DS0VEXHRcdFx0KChfX2ZvcmNlIGZvbGlvX3dhbGtfZmxhZ3NfdClCSVQoMSkpXG4gXG4gZW51bSBmb2xpb193YWxrX2xldmVsIHtcbiBcdEZXX0xFVkVMX1BURSxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaCBiL2luY2x1ZGUvbGludXgvdWFjY2Vzcy5oXG5pbmRleCA4YTI2NDY2MmIyNDJjOC4uYzhjODMzNzJjOWQ4NzggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC91YWNjZXNzLmhcbkBAIC0zNCw2ICYjNDM7MzQsMTcgQEBcbiB9KVxuICNlbmRpZlxuIFxuJiM0MzsvKlxuJiM0MzsgKiBMaWtlIHVudGFnZ2VkX2FkZHJfcmVtb3RlKCksIGJ1dCBmb3IgY2FsbGVycyB0aGF0IHN0YWJpbGl6ZSBAbW0gYnkgb3RoZXJcbiYjNDM7ICogbWVhbnMgKGUuZy4gYSBwZXItVk1BIGxvY2spIGFuZCBtdXN0IG5vdCBhc3NlcnQgdGhlIG1tYXAgbG9jay5cbiYjNDM7ICovXG4mIzQzOyNpZm5kZWYgdW50YWdnZWRfYWRkcl9yZW1vdGVfdW5sb2NrZWRcbiYjNDM7I2RlZmluZSB1bnRhZ2dlZF9hZGRyX3JlbW90ZV91bmxvY2tlZChtbSwgYWRkcilcdCh7XHRcXFxuJiM0MztcdCh2b2lkKShtbSk7XHRcdFx0XHRcdFxcXG4mIzQzO1x0dW50YWdnZWRfYWRkcihhZGRyKTtcdFx0XHRcdFxcXG4mIzQzO30pXG4mIzQzOyNlbmRpZlxuJiM0MztcbiAjaWZkZWYgbWFza2VkX3VzZXJfYWNjZXNzX2JlZ2luXG4gICNkZWZpbmUgY2FuX2RvX21hc2tlZF91c2VyX2FjY2VzcygpIDFcbiAjIGlmbmRlZiBtYXNrZWRfdXNlcl93cml0ZV9hY2Nlc3NfYmVnaW5cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCA4NmE5NzMxMTliZDQ2Yy4uZDJiMmYwMDE0YTBjNjYgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmNcbkBAIC00Miw2ICYjNDM7NDIsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbF9zdGF0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW1faW5saW5lLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2VjcmV0bWVtLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZXdhbGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvdGFzay5oXHUwMDNlXG5AQCAtNzA2Miw2ICYjNDM7NzA2NCwxODAgQEAgaW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBFWFBPUlRfU1lNQk9MX0dQTChnZW5lcmljX2FjY2Vzc19waHlzKTtcbiAjZW5kaWZcbiBcbiYjNDM7LypcbiYjNDM7ICogVGhlIGZhc3QgcGF0aCB1c2VzIGZvbGlvX3dhbGtfc3RhcnQoRldfVk1BX0xPQ0tFRCksIHdoaWNoIG5lZWRzIHRoZSBwZXItVk1BXG4mIzQzOyAqIGxvY2sgYW5kIFJDVS1mcmVlZCBwYWdlIHRhYmxlcyB0byB3YWxrIHBhZ2UgdGFibGVzIHdpdGhvdXQgdGhlIG1tYXAgbG9jay5cbiYjNDM7ICovXG4mIzQzOyNpZiBkZWZpbmVkKENPTkZJR19QRVJfVk1BX0xPQ0spIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFKVxuJiM0MzsvKlxuJiM0MzsgKiBSZWFkLXNpZGUgVk1BIGNoZWNrcyBmb3IgdGhlIGxvY2tsZXNzIGZhc3QgcGF0aCwgbWlycm9yaW5nIHRoZSByZWFkIHNpZGUgb2ZcbiYjNDM7ICogY2hlY2tfdm1hX2ZsYWdzKCk6IHJlamVjdCB3aGF0IEZXX1ZNQV9MT0NLRUQgY2Fubm90IGhhbmRsZSAoaHVnZXRsYiksIHdoYXRcbiYjNDM7ICogbmVlZHMgdGhlIC1cdTAwM2VhY2Nlc3MoKSBoYW5kbGVyIChWTV9JTy9WTV9QRk5NQVApLCBvciB3aGF0IGhhcyBubyBzdHJ1Y3QgcGFnZSB0b1xuJiM0MzsgKiBjb3B5IChzZWNyZXRtZW0pOyBlbmZvcmNlIHRoZSBGT0xMX0FOT04gcmVzdHJpY3Rpb24gdGhhdFxuJiM0MzsgKiAvcHJvYy9QSUQve2NtZGxpbmUsZW52aXJvbn0gcmVseSBvbiAoQ1ZFLTIwMTgtMTEyMCk7IGFuZCByZXF1aXJlIHJlYWQgYWNjZXNzXG4mIzQzOyAqIChob25vcmluZyBGT0xMX0ZPUkNFKS4gIEFueXRoaW5nIG5vdCBwb3NpdGl2ZWx5IGFsbG93ZWQgZmFsbHMgYmFjayB0byB0aGUgc2xvd1xuJiM0MzsgKiBwYXRoLCB3aGljaCByZS12YWxpZGF0ZXMgZXZlcnl0aGluZy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIHZtYV9wZXJtaXRzX2Zhc3RfYWNjZXNzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuJiM0MztcdFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgKFZNX0lPIHwgVk1fUEZOTUFQKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRpZiAoaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkgfHwgdm1hX2lzX3NlY3JldG1lbSh2bWEpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdGlmICgoZ3VwX2ZsYWdzIFx1MDAyNiBGT0xMX0FOT04pIFx1MDAyNlx1MDAyNiAhdm1hX2lzX2Fub255bW91cyh2bWEpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdGlmICghKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUkVBRCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICghKGd1cF9mbGFncyBcdTAwMjYgRk9MTF9GT1JDRSkgfHwgISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX01BWVJFQUQpKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogU2l6ZSBvZiB0aGUgc2luZ2xlIG1hcHBpbmcgZW50cnkgZm9saW9fd2Fsa19zdGFydCgpIGxhbmRlZCBvbi4gKi9cbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgZndfZW50cnlfc2l6ZShlbnVtIGZvbGlvX3dhbGtfbGV2ZWwgbGV2ZWwpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKGxldmVsKSB7XG4mIzQzO1x0Y2FzZSBGV19MRVZFTF9QVUQ6XG4mIzQzO1x0XHRyZXR1cm4gUFVEX1NJWkU7XG4mIzQzO1x0Y2FzZSBGV19MRVZFTF9QTUQ6XG4mIzQzO1x0XHRyZXR1cm4gUE1EX1NJWkU7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiBQQUdFX1NJWkU7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBDb3B5IEBsZW4gYnl0ZXMgb2YgdGhlIHBpbm5lZCBAZm9saW8gb3V0IHRvIEBidWYsIHN0YXJ0aW5nIGF0IGJ5dGUgb2Zmc2V0XG4mIzQzOyAqIEBmb2xpb19vZmYgd2l0aGluIHRoZSBmb2xpbyAodGhlIHBvc2l0aW9uIG9mIEBhZGRyKS4gIE1hcHMgYW5kIGNvcGllcyBvbmVcbiYjNDM7ICogcGFnZSBhdCBhIHRpbWUgLS0ga21hcF9sb2NhbF9mb2xpbygpIGZvciBISUdITUVNLCBjb3B5X2Zyb21fdXNlcl9wYWdlKCkgZm9yXG4mIzQzOyAqIHRoZSBwZXItcGFnZSBmbHVzaCBvbiBhbGlhc2luZyBjYWNoZXMgLS0gd2l0aG91dCByZS13YWxraW5nIHBhZ2UgdGFibGVzLlxuJiM0MzsgKiBFYWNoIHBhZ2UgYm9ycm93cyB0aGUgY2FsbGVyJiMzOTtzIHNpbmdsZSBmb2xpbyByZWZlcmVuY2UsIHNvIHRoZSBtYXBwaW5nIGlzXG4mIzQzOyAqIGRyb3BwZWQgd2l0aCBrdW5tYXBfbG9jYWwoKSByYXRoZXIgdGhhbiBmb2xpb19yZWxlYXNlX2ttYXAoKS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGNvcHlfZm9saW9fcGFnZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBmb2xpb19vZmYsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiYjNDM7XHRcdFx0ICAgICB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgbGVuKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBkb25lID0gMDtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKGRvbmUgXHUwMDNjIGxlbikge1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBwb3MgPSBmb2xpb19vZmYgJiM0MzsgZG9uZTtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgcGFnZV9pZHggPSBwb3MgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgcGFnZV9vZmYgPSBwb3MgXHUwMDI2IH5QQUdFX01BU0s7XG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgY2h1bmsgPSBtaW5fdCh1bnNpZ25lZCBsb25nLCBsZW4gLSBkb25lLFxuJiM0MztcdFx0XHRcdFx0ICAgUEFHRV9TSVpFIC0gcGFnZV9vZmYpO1xuJiM0MztcdFx0dm9pZCAqa2FkZHIgPSBrbWFwX2xvY2FsX2ZvbGlvKGZvbGlvLCBwYWdlX2lkeCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG4mIzQzO1xuJiM0MztcdFx0Y29weV9mcm9tX3VzZXJfcGFnZSh2bWEsIGZvbGlvX3BhZ2UoZm9saW8sIHBhZ2VfaWR4KSxcbiYjNDM7XHRcdFx0XHQgICAgYWRkciAmIzQzOyBkb25lLCBidWYgJiM0MzsgZG9uZSwga2FkZHIgJiM0MzsgcGFnZV9vZmYsXG4mIzQzO1x0XHRcdFx0ICAgIGNodW5rKTtcbiYjNDM7XHRcdGt1bm1hcF9sb2NhbChrYWRkcik7XG4mIzQzO1x0XHRkb25lICYjNDM7PSBjaHVuaztcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIE9wcG9ydHVuaXN0aWMgbG9ja2xlc3MgZmFzdCBwYXRoIGZvciBfX2FjY2Vzc19yZW1vdGVfdm0oKSByZWFkcy5cbiYjNDM7ICpcbiYjNDM7ICogTWVtb3J5IGFscmVhZHkgcmVzaWRlbnQgaW4gQG1tIGNhbiBiZSByZWFkIHdpdGhvdXQgdGFraW5nIHRoZSBmcmVxdWVudGx5XG4mIzQzOyAqIGNvbnRlbmRlZCBtbWFwX2xvY2s6IGEgcGVyLVZNQSBsb2NrIHN0YWJpbGl6ZXMgdGhlIFZNQSwgYW5kIGZvbGlvX3dhbGtfc3RhcnQoKVxuJiM0MzsgKiB3aXRoIEZXX1ZNQV9MT0NLRUQgZ3JhYnMgYSBzaG9ydC1saXZlZCByZWZlcmVuY2UgdG8gYSBwcmVzZW50IHBhZ2UgZnJvbSBhIHBhZ2VcbiYjNDM7ICogdGFibGUgd2FsayBydW4gd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLCB3aGljaCBzZXJpYWxpemVzIGFnYWluc3QgY29uY3VycmVudFxuJiM0MzsgKiBwYWdlIHRhYmxlIGZyZWVpbmcgdGhlIHNhbWUgd2F5IGd1cF9mYXN0IGRvZXMgKHJlbHlpbmcgb25cbiYjNDM7ICogTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSkuXG4mIzQzOyAqXG4mIzQzOyAqIE9ubHkgYSByZXF1ZXN0IHRoYXQgbGllcyBlbnRpcmVseSB3aXRoaW4gYSBzaW5nbGUgVk1BIGlzIGhhbmRsZWQgaGVyZSxcbiYjNDM7ICogd2hpY2ggc2hvdWxkIG5vdCBiZSBhbiBpc3N1ZSBpbiBwcmFjdGljZSBzaW5jZSBldmVyeSBjYWxsZXIgaGFzIGFcbiYjNDM7ICogYnVmZmVyIG9mIFBBR0VfU0laRSBvciBzbWFsbGVyLiBMb29wIGl0ZXJhdGlvbiBpbnNpZGUgdGhpcyBmdW5jdGlvblxuJiM0MzsgKiBzaG91bGQgYmUgcmFyZSwgdG9vLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgdmlhIHRoZSBmYXN0IHBhdGguXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGFjY2Vzc19yZW1vdGVfdm1fZmFzdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuJiM0MztcdFx0XHRcdCB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHR2b2lkICpvbGRfYnVmID0gYnVmO1xuJiM0MztcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuJiM0MztcbiYjNDM7XHRhZGRyID0gdW50YWdnZWRfYWRkcl9yZW1vdGVfdW5sb2NrZWQobW0sIGFkZHIpO1xuJiM0MztcbiYjNDM7XHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHIpO1xuJiM0MztcdGlmICghdm1hKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdC8qIE9ubHkgaGFuZGxlIGEgcmVxdWVzdCBjb250YWluZWQgZW50aXJlbHkgd2l0aGluIHRoaXMgb25lIFZNQS4gKi9cbiYjNDM7XHRpZiAobGVuIFx1MDAzZSB2bWEtXHUwMDNldm1fZW5kIC0gYWRkcilcbiYjNDM7XHRcdGdvdG8gb3V0X3VubG9jaztcbiYjNDM7XG4mIzQzO1x0aWYgKCF2bWFfcGVybWl0c19mYXN0X2FjY2Vzcyh2bWEsIGd1cF9mbGFncykpXG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChsZW4pIHtcbiYjNDM7XHRcdHN0cnVjdCBmb2xpb193YWxrIGZ3O1xuJiM0MztcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiYjNDM7XHRcdHN0cnVjdCBwYWdlICpwYWdlO1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBlbnRyeV9zaXplLCBmb2xpb19vZmYsIHNwYW4sIGlycV9mbGFncztcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVGhlIGxvY2tsZXNzIHBhZ2UgdGFibGUgd2FsayBtdXN0IHJ1biB3aXRoIGludGVycnVwdHNcbiYjNDM7XHRcdCAqIGRpc2FibGVkOiBwYWdlIHRhYmxlIGZyZWVpbmcgKG11bm1hcCBvciBUSFAgY29sbGFwc2UsIHdoaWNoXG4mIzQzO1x0XHQgKiBJUEkgdmlhIHRsYl9yZW1vdmVfdGFibGVfc3luY19vbmUoKSBhbmQgd2FpdCkgdGhlbiBjYW5ub3QgZnJlZVxuJiM0MztcdFx0ICogYSB0YWJsZSBtaWQtd2FsayAtLSB0aGUgc2FtZSBjb250cmFjdCBndXBfZmFzdCByZWxpZXMgb24uICBJUlFzXG4mIzQzO1x0XHQgKiBhcmUgcmVzdG9yZWQgb25jZSB0aGUgZm9saW8gaXMgcGlubmVkOyB0aGUgY29weSBiZWxvdyBob2xkcyBvbmx5XG4mIzQzO1x0XHQgKiB0aGUgZm9saW8gcmVmZXJlbmNlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRsb2NhbF9pcnFfc2F2ZShpcnFfZmxhZ3MpO1xuJiM0MztcdFx0Zm9saW8gPSBmb2xpb193YWxrX3N0YXJ0KFx1MDAyNmZ3LCB2bWEsIGFkZHIsIEZXX1ZNQV9MT0NLRUQpO1xuJiM0MztcdFx0aWYgKCFmb2xpbykge1xuJiM0MztcdFx0XHRsb2NhbF9pcnFfcmVzdG9yZShpcnFfZmxhZ3MpO1xuJiM0MztcdFx0XHRnb3RvIG91dF91bmxvY2s7XHQvKiBub3QgcHJlc2VudDogbGV0IHRoZSBzbG93IHBhdGggZmF1bHQgaXQgaW4gKi9cbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHBhZ2UgPSBmdy5wYWdlO1xuJiM0MztcdFx0aWYgKCFwYWdlKSB7XG4mIzQzO1x0XHRcdC8qIE5vIHN0cnVjdCBwYWdlIHRvIGNvcHkgKGUuZy4gYSBzcGVjaWFsIFBURSkuICovXG4mIzQzO1x0XHRcdGZvbGlvX3dhbGtfZW5kKFx1MDAyNmZ3LCB2bWEpO1xuJiM0MztcdFx0XHRsb2NhbF9pcnFfcmVzdG9yZShpcnFfZmxhZ3MpO1xuJiM0MztcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRlbnRyeV9zaXplID0gZndfZW50cnlfc2l6ZShmdy5sZXZlbCk7XG4mIzQzO1x0XHRmb2xpb19nZXQoZm9saW8pO1xuJiM0MztcdFx0Zm9saW9fd2Fsa19lbmQoXHUwMDI2ZncsIHZtYSk7XG4mIzQzO1x0XHRsb2NhbF9pcnFfcmVzdG9yZShpcnFfZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBmb2xpb193YWxrX3N0YXJ0KCkgdmFsaWRhdGVkIG9uZSBwcmVzZW50IG1hcHBpbmcgZW50cnlcbiYjNDM7XHRcdCAqIChQQUdFL1BNRC9QVURfU0laRSkuICBDb3B5IHRvIHRoZSBlbmQgb2YgdGhhdCBlbnRyeSwgYm91bmRlZCBieVxuJiM0MztcdFx0ICogdGhlIGZvbGlvIGFuZCB0aGUgcmVtYWluaW5nIGxlbmd0aCAoYWxyZWFkeSB3aXRoaW4gdGhlIFZNQSksIHNvXG4mIzQzO1x0XHQgKiBhIGh1Z2UgbWFwcGluZyBpcyBoYW5kbGVkIGluIGEgc2luZ2xlIHdhbGsuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGZvbGlvX29mZiA9IChmb2xpb19wYWdlX2lkeChmb2xpbywgcGFnZSkgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpICYjNDM7XG4mIzQzO1x0XHRcdCAgICBvZmZzZXRfaW5fcGFnZShhZGRyKTtcbiYjNDM7XHRcdHNwYW4gPSBtaW4zKCh1bnNpZ25lZCBsb25nKWxlbixcbiYjNDM7XHRcdFx0ICAgIGVudHJ5X3NpemUgLSAoYWRkciBcdTAwMjYgKGVudHJ5X3NpemUgLSAxKSksXG4mIzQzO1x0XHRcdCAgICAoZm9saW9fbnJfcGFnZXMoZm9saW8pIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSAtIGZvbGlvX29mZik7XG4mIzQzO1xuJiM0MztcdFx0Y29weV9mb2xpb19wYWdlcyh2bWEsIGZvbGlvLCBmb2xpb19vZmYsIGFkZHIsIGJ1Ziwgc3Bhbik7XG4mIzQzO1xuJiM0MztcdFx0LyogTWF0Y2ggdGhlIEZPTExfVE9VQ0ggYmVoYXZpb3VyIG9mIHRoZSBzbG93IChHVVApIHBhdGguICovXG4mIzQzO1x0XHRmb2xpb19tYXJrX2FjY2Vzc2VkKGZvbGlvKTtcbiYjNDM7XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4mIzQzO1x0XHRsZW4gLT0gc3BhbjtcbiYjNDM7XHRcdGJ1ZiAmIzQzOz0gc3BhbjtcbiYjNDM7XHRcdGFkZHIgJiM0Mzs9IHNwYW47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7b3V0X3VubG9jazpcbiYjNDM7XHR2bWFfZW5kX3JlYWQodm1hKTtcbiYjNDM7XHRyZXR1cm4gYnVmIC0gb2xkX2J1ZjtcbiYjNDM7fVxuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW50IGFjY2Vzc19yZW1vdGVfdm1fZmFzdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuJiM0MztcdFx0XHRcdCB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MzsjZW5kaWYgLyogQ09ORklHX1BFUl9WTUFfTE9DSyBcdTAwMjZcdTAwMjYgQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgKi9cbiYjNDM7XG4gLypcbiAgKiBBY2Nlc3MgYW5vdGhlciBwcm9jZXNzJiMzOTsgYWRkcmVzcyBzcGFjZSBhcyBnaXZlbiBpbiBtbS5cbiAgKi9cbkBAIC03MDcxLDE1ICYjNDM7NzI0NywzMCBAQCBzdGF0aWMgaW50IF9fYWNjZXNzX3JlbW90ZV92bShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0dm9pZCAqb2xkX2J1ZiA9IGJ1ZjtcbiBcdGludCB3cml0ZSA9IGd1cF9mbGFncyBcdTAwMjYgRk9MTF9XUklURTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRyeSB0aGUgbG9ja2xlc3MgZmFzdCBwYXRoIGZvciByZWFkcyBmaXJzdDsgaXQgdHJhbnNmZXJzIHdoYXQgaXQgY2FuXG4mIzQzO1x0ICogZnJvbSByZXNpZGVudCBtZW1vcnkgd2l0aG91dCB0YWtpbmcgbW1hcF9sb2NrLCBhbmQgbGVhdmVzIHRoZVxuJiM0MztcdCAqIHJlbWFpbmRlciAoaWYgYW55KSB0byB0aGUgc2xvdyBwYXRoIGJlbG93LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghd3JpdGUpIHtcbiYjNDM7XHRcdGludCBkb25lID0gYWNjZXNzX3JlbW90ZV92bV9mYXN0KG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0XHRhZGRyICYjNDM7PSBkb25lO1xuJiM0MztcdFx0YnVmICYjNDM7PSBkb25lO1xuJiM0MztcdFx0bGVuIC09IGRvbmU7XG4mIzQzO1x0XHRpZiAoIWxlbilcbiYjNDM7XHRcdFx0cmV0dXJuIGJ1ZiAtIG9sZF9idWY7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChtbWFwX3JlYWRfbG9ja19raWxsYWJsZShtbSkpXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdFx0cmV0dXJuIGJ1ZiAtIG9sZF9idWY7XG4gXG4gXHQvKiBVbnRhZyB0aGUgYWRkcmVzcyBiZWZvcmUgbG9va2luZyB1cCB0aGUgVk1BICovXG4gXHRhZGRyID0gdW50YWdnZWRfYWRkcl9yZW1vdGUobW0sIGFkZHIpO1xuIFxuIFx0LyogQXZvaWQgdHJpZ2dlcmluZyB0aGUgdGVtcG9yYXJ5IHdhcm5pbmcgaW4gX19nZXRfdXNlcl9wYWdlcyAqL1xuIFx0aWYgKCF2bWFfbG9va3VwKG1tLCBhZGRyKSBcdTAwMjZcdTAwMjYgIWV4cGFuZF9zdGFjayhtbSwgYWRkcikpXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdFx0cmV0dXJuIGJ1ZiAtIG9sZF9idWY7XG4gXG4gXHQvKiBpZ25vcmUgZXJyb3JzLCBqdXN0IGNoZWNrIGhvdyBtdWNoIHdhcyBzdWNjZXNzZnVsbHkgdHJhbnNmZXJyZWQgKi9cbiBcdHdoaWxlIChsZW4pIHtcbmRpZmYgLS1naXQgYS9tbS9wYWdld2Fsay5jIGIvbW0vcGFnZXdhbGsuY1xuaW5kZXggM2FlMjU4NmZmNDViNDQuLmFiMWU4MTk4M2NiOGM3IDEwMDY0NFxuLS0tIGEvbW0vcGFnZXdhbGsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZXdhbGsuY1xuQEAgLTg5MCw3ICYjNDM7ODkwLDEwIEBAIGludCB3YWxrX3BhZ2VfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBmaXJzdF9pbmRleCxcbiAgKiBodWdlX3B0ZXBfc2V0XyosIC4uLikuIE5vdGUgdGhhdCB0aGUgcGFnZSB0YWJsZSBlbnRyeSBzdG9yZWQgaW4gQGZ3IG1pZ2h0XG4gICogbm90IGNvcnJlc3BvbmQgdG8gdGhlIGZpcnN0IHBoeXNpY2FsIGVudHJ5IG9mIGEgbG9naWNhbCBodWdldGxiIGVudHJ5LlxuICAqXG4tICogVGhlIG1tYXAgbG9jayBtdXN0IGJlIGhlbGQgaW4gcmVhZCBtb2RlLlxuJiM0MzsgKiBUaGUgbW1hcCBsb2NrIG11c3QgYmUgaGVsZCBpbiByZWFkIG1vZGUuIEFsdGVybmF0aXZlbHksIGlmIEBGV19WTUFfTE9DS0VEIGlzXG4mIzQzOyAqIHBhc3NlZCwgdGhlIFZNQSYjMzk7cyBwZXItVk1BIGxvY2sgbXVzdCBiZSBoZWxkIGFuZCBpbnRlcnJ1cHRzIG11c3QgYmUgZGlzYWJsZWRcbiYjNDM7ICogYWNyb3NzIHRoZSB3YWxrIGFuZCB1bnRpbCBmb2xpb193YWxrX2VuZCgpIChvbmx5IHN1cHBvcnRlZCB3aXRoIFJDVS1mcmVlZCBwYWdlXG4mIzQzOyAqIHRhYmxlcywgaS5lLiBDT05GSUdfTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSwgYW5kIG5vdCBmb3IgaHVnZXRsYikuXG4gICpcbiAgKiBSZXR1cm46IGZvbGlvIHBvaW50ZXIgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIE5VTEwuXG4gICovXG5AQCAtOTA4LDcgJiM0Mzs5MTEsMjkgQEAgc3RydWN0IGZvbGlvICpmb2xpb193YWxrX3N0YXJ0KHN0cnVjdCBmb2xpb193YWxrICpmdyxcbiBcdHBnZF90ICpwZ2RwO1xuIFx0cDRkX3QgKnA0ZHA7XG4gXG4tXHRtbWFwX2Fzc2VydF9sb2NrZWQodm1hLVx1MDAzZXZtX21tKTtcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IEZXX1ZNQV9MT0NLRUQpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBMb2NrbGVzcyB3YWxrIHVuZGVyIHRoZSBwZXItVk1BIGxvY2sgaW5zdGVhZCBvZiB0aGUgbW1hcFxuJiM0MztcdFx0ICogbG9jay4gVGhlIFZNQSBsb2NrIGtlZXBzIHRoZSBWTUEgc3RhYmxlLCBidXQgdGhlIHBhZ2UgdGFibGVzXG4mIzQzO1x0XHQgKiB3YWxrZWQgYmVsb3cgaXQgY2FuIHN0aWxsIGJlIGZyZWVkIGNvbmN1cnJlbnRseTogYSBtdW5tYXAoKSBvclxuJiM0MztcdFx0ICogVEhQIGNvbGxhcHNlIG9mIGFuIGFkamFjZW50IHJlZ2lvbiBpbiB0aGUgc2FtZSBtbSBjYW4gZnJlZSBhXG4mIzQzO1x0XHQgKiBzaGFyZWQgdXBwZXItbGV2ZWwgdGFibGUsIGFuZCBjb2xsYXBzZV9odWdlX3BhZ2UoKSAtXHUwMDNlXG4mIzQzO1x0XHQgKiByZXRyYWN0X3BhZ2VfdGFibGVzKCkgZnJlZXMgcGFnZSB0YWJsZXMgb2YgVk1BcyB3aG9zZSBsb2NrIGl0XG4mIzQzO1x0XHQgKiBkb2VzIG5vdCBob2xkLiBQYWdlIHRhYmxlIGZyZWVpbmcgc2VyaWFsaXplcyBhZ2FpbnN0IGxvY2tsZXNzXG4mIzQzO1x0XHQgKiB3YWxrZXJzIHZpYSB0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfb25lKCksIHdoaWNoIElQSXMgYW5kIHdhaXRzXG4mIzQzO1x0XHQgKiBmb3IgZXZlcnkgQ1BVIHRvIGVuYWJsZSBpbnRlcnJ1cHRzOyBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsXG4mIzQzO1x0XHQgKiBzZWN0aW9uIGRvZXMgbm90IGJsb2NrIHRoYXQgSVBJLCBzbyB0aGUgY2FsbGVyIG11c3Qga2VlcFxuJiM0MztcdFx0ICogaW50ZXJydXB0cyBkaXNhYmxlZCBhY3Jvc3MgdGhlIHdob2xlIHdhbGssIGxpa2UgZ3VwX2Zhc3QuXG4mIzQzO1x0XHQgKiBIdWdldGxiIChQTUQgc2hhcmluZykgbWFwcyBwYWdlIHRhYmxlcyBub3QgY292ZXJlZCBieSB0aGlzXG4mIzQzO1x0XHQgKiBWTUEmIzM5O3MgbG9jayBhbmQgaXMgbm90IHN1cHBvcnRlZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0Vk1fV0FSTl9PTl9PTkNFKCFJU19FTkFCTEVEKENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFKSk7XG4mIzQzO1x0XHRWTV9XQVJOX09OX09OQ0UoaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpO1xuJiM0MztcdFx0bG9ja2RlcF9hc3NlcnRfaXJxc19kaXNhYmxlZCgpO1xuJiM0MztcdFx0dm1hX2Fzc2VydF9sb2NrZWQodm1hKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0bW1hcF9hc3NlcnRfbG9ja2VkKHZtYS1cdTAwM2V2bV9tbSk7XG4mIzQzO1x0fVxuIFx0dm1hX3BndGFibGVfd2Fsa19iZWdpbih2bWEpO1xuIFxuIFx0aWYgKFdBUk5fT05fT05DRShhZGRyIFx1MDAzYyB2bWEtXHUwMDNldm1fc3RhcnQgfHwgYWRkciBcdTAwM2U9IHZtYS1cdTAwM2V2bV9lbmQpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDAyOjEwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BFUl9WTUFfTE9DSyYjMzQ7LAogICAgJiMzNDtNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWNjZXNzX3JlbW90ZV92bV9mYXN0JiMzNDssCiAgICAmIzM0O19fYWNjZXNzX3JlbW90ZV92bSYjMzQ7LAogICAgJiMzNDtmb2xpb193YWxrX3N0YXJ0JiMzNDssCiAgICAmIzM0O2NvcHlfZm9saW9fcGFnZXMmIzM0OywKICAgICYjMzQ7dm1hX3Blcm1pdHNfZmFzdF9hY2Nlc3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxvY2tsZXNzIGZhc3QgcGF0aCBmb3IgcmVtb3RlIG1lbW9yeSBhY2Nlc3MgKGBfX2FjY2Vzc19yZW1vdGVfdm1gKSwgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBzeXNjYWxscyBsaWtlIGBwcm9jZXNzX3ZtX3JlYWR2YCBhbmQgYHB0cmFjZWAuIFRoZSBmYXN0IHBhdGggcmVsaWVzIG9uIHBlci1WTUEgbG9ja3MgYW5kIFJDVS1mcmVlZCBwYWdlIHRhYmxlcywgbWFraW5nIGl0IGhpZ2hseSBmdW5jdGlvbmFsIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5NjAxNzQ0MjYyM2VhNGU2ZWQ1MGQ5YjYwMDNiZmJlMGY0Yzk0Mzg5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdW4gMjUgMDI6MTA6MTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAppbmRleCBlZjViNTA3ZGUzNGUyZS4uY2VlNzEwZjY0NjU4YWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaApAQCAtMTAwLDE4ICYjNDM7MTAwLDE4IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtbV9sYW1fY3IzX21hc2soc3RydWN0IG1tX3N0cnVjdCAqbW0pCiBzdGF0aWMgaW5saW5lIHZvaWQgZHVwX2xhbShzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CiAJbW0tJmd0O2NvbnRleHQubGFtX2NyM19tYXNrID0gb2xkbW0tJmd0O2NvbnRleHQubGFtX2NyM19tYXNrOwotCW1tLSZndDtjb250ZXh0LnVudGFnX21hc2sgPSBvbGRtbS0mZ3Q7Y29udGV4dC51bnRhZ19tYXNrOwomIzQzOwlXUklURV9PTkNFKG1tLSZndDtjb250ZXh0LnVudGFnX21hc2ssIFJFQURfT05DRShvbGRtbS0mZ3Q7Y29udGV4dC51bnRhZ19tYXNrKSk7CiB9CiAKICNkZWZpbmUgbW1fdW50YWdfbWFzayBtbV91bnRhZ19tYXNrCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbW1fdW50YWdfbWFzayhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKLQlyZXR1cm4gbW0tJmd0O2NvbnRleHQudW50YWdfbWFzazsKJiM0MzsJcmV0dXJuIFJFQURfT05DRShtbS0mZ3Q7Y29udGV4dC51bnRhZ19tYXNrKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIG1tX3Jlc2V0X3VudGFnX21hc2soc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7Ci0JbW0tJmd0O2NvbnRleHQudW50YWdfbWFzayA9IC0xVUw7CiYjNDM7CVdSSVRFX09OQ0UobW0tJmd0O2NvbnRleHQudW50YWdfbWFzaywgLTFVTCk7CiB9CiAKICNkZWZpbmUgYXJjaF9wZ3RhYmxlX2RtYV9jb21wYXQgYXJjaF9wZ3RhYmxlX2RtYV9jb21wYXQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaAppbmRleCAyMGRlMzRjYzlhYTZlNy4uOTMzYjBiOGI0ZDYwNDcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzXzY0LmgKQEAgLTM5LDExICYjNDM7MzksMjMgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fdW50YWdnZWRfYWRkcih1bnNpZ25lZCBsb25nIGFkZHIpCiAJKF9fZm9yY2UgX190eXBlb2ZfXyhhZGRyKSlfX3VudGFnZ2VkX2FkZHIoX19hZGRyKTsJCVwKIH0pCiAKJiM0MzsvKiBTdHJpcCB0aGUgdGFnIGJpdHMgZnJvbSBhIHJlbW90ZSBtbSYjMzk7cyBhZGRyZXNzOyB1c2FibGUgd2l0aG91dCB0aGUgbW1hcCBsb2NrLiAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3VudGFnZ2VkX2FkZHJfcmVtb3RlX3VubG9ja2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAomIzQzOwkJCQkJCQkgICAgdW5zaWduZWQgbG9uZyBhZGRyKQomIzQzO3sKJiM0MzsJcmV0dXJuIGFkZHIgJmFtcDsgUkVBRF9PTkNFKG1tLSZndDtjb250ZXh0LnVudGFnX21hc2spOwomIzQzO30KJiM0MzsKJiM0MzsjZGVmaW5lIHVudGFnZ2VkX2FkZHJfcmVtb3RlX3VubG9ja2VkKG1tLCBhZGRyKQkoewkJCVwKJiM0MzsJdW5zaWduZWQgbG9uZyBfX2FkZHIgPSAoX19mb3JjZSB1bnNpZ25lZCBsb25nKShhZGRyKTsJCVwKJiM0MzsJKF9fZm9yY2UgX190eXBlb2ZfXyhhZGRyKSlfX3VudGFnZ2VkX2FkZHJfcmVtb3RlX3VubG9ja2VkKG1tLCBfX2FkZHIpOyBcCiYjNDM7fSkKJiM0MzsKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3VudGFnZ2VkX2FkZHJfcmVtb3RlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJCQkJICAgdW5zaWduZWQgbG9uZyBhZGRyKQogewogCW1tYXBfYXNzZXJ0X2xvY2tlZChtbSk7Ci0JcmV0dXJuIGFkZHIgJmFtcDsgKG1tKS0mZ3Q7Y29udGV4dC51bnRhZ19tYXNrOwomIzQzOwlyZXR1cm4gX191bnRhZ2dlZF9hZGRyX3JlbW90ZV91bmxvY2tlZChtbSwgYWRkcik7CiB9CiAKICNkZWZpbmUgdW50YWdnZWRfYWRkcl9yZW1vdGUobW0sIGFkZHIpCSh7CQkJCVwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jCmluZGV4IGQ0NGFmYmUwMDViYjUxLi41NTA5NjEzNmRlNTMxMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jCkBAIC04MTQsNyAmIzQzOzgxNCw3IEBAIHN0YXRpYyB2b2lkIGVuYWJsZV9sYW1fZnVuYyh2b2lkICpfX21tKQogc3RhdGljIHZvaWQgbW1fZW5hYmxlX2xhbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKIAltbS0mZ3Q7Y29udGV4dC5sYW1fY3IzX21hc2sgPSBYODZfQ1IzX0xBTV9VNTc7Ci0JbW0tJmd0O2NvbnRleHQudW50YWdfbWFzayA9ICB+R0VOTUFTSyg2MiwgNTcpOwomIzQzOwlXUklURV9PTkNFKG1tLSZndDtjb250ZXh0LnVudGFnX21hc2ssIH5HRU5NQVNLKDYyLCA1NykpOwogCiAJLyoKIAkgKiBFdmVuIHRob3VnaCB0aGUgcHJvY2VzcyBtdXN0IHN0aWxsIGJlIHNpbmdsZS10aHJlYWRlZCBhdCB0aGlzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmgKaW5kZXggYjQxZDcyNjVjMDFiYzIuLmQwMzg3NDcwZDczMjJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wYWdld2Fsay5oCkBAIC0xNTAsNiAmIzQzOzE1MCwxMyBAQCB0eXBlZGVmIGludCBfX2JpdHdpc2UgZm9saW9fd2Fsa19mbGFnc190OwogCiAvKiBXYWxrIHNoYXJlZCB6ZXJvcGFnZXMgKHNtYWxsICYjNDM7IGh1Z2UpIGFzIHdlbGwuICovCiAjZGVmaW5lIEZXX1pFUk9QQUdFCQkJKChfX2ZvcmNlIGZvbGlvX3dhbGtfZmxhZ3NfdClCSVQoMCkpCiYjNDM7LyoKJiM0MzsgKiBUaGUgY2FsbGVyIGhvbGRzIHRoZSBwZXItVk1BIGxvY2sgaW5zdGVhZCBvZiB0aGUgbW1hcCBsb2NrLCB3aXRoIGludGVycnVwdHMKJiM0MzsgKiBkaXNhYmxlZCBhY3Jvc3MgdGhlIHdhbGsgKHVudGlsIGZvbGlvX3dhbGtfZW5kKCkpIHRvIHNlcmlhbGl6ZSBhZ2FpbnN0IHBhZ2UKJiM0MzsgKiB0YWJsZSBmcmVlaW5nLCB0aGUgc2FtZSB3YXkgZ3VwX2Zhc3QgZG9lcy4gT25seSB2YWxpZCB3aXRoIFJDVS1mcmVlZCBwYWdlCiYjNDM7ICogdGFibGVzIChDT05GSUdfTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSkgYW5kIG5vdCBmb3IgaHVnZXRsYi4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIEZXX1ZNQV9MT0NLRUQJCQkoKF9fZm9yY2UgZm9saW9fd2Fsa19mbGFnc190KUJJVCgxKSkKIAogZW51bSBmb2xpb193YWxrX2xldmVsIHsKIAlGV19MRVZFTF9QVEUsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaCBiL2luY2x1ZGUvbGludXgvdWFjY2Vzcy5oCmluZGV4IDhhMjY0NjYyYjI0MmM4Li5jOGM4MzM3MmM5ZDg3OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91YWNjZXNzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC91YWNjZXNzLmgKQEAgLTM0LDYgJiM0MzszNCwxNyBAQAogfSkKICNlbmRpZgogCiYjNDM7LyoKJiM0MzsgKiBMaWtlIHVudGFnZ2VkX2FkZHJfcmVtb3RlKCksIGJ1dCBmb3IgY2FsbGVycyB0aGF0IHN0YWJpbGl6ZSBAbW0gYnkgb3RoZXIKJiM0MzsgKiBtZWFucyAoZS5nLiBhIHBlci1WTUEgbG9jaykgYW5kIG11c3Qgbm90IGFzc2VydCB0aGUgbW1hcCBsb2NrLgomIzQzOyAqLwomIzQzOyNpZm5kZWYgdW50YWdnZWRfYWRkcl9yZW1vdGVfdW5sb2NrZWQKJiM0MzsjZGVmaW5lIHVudGFnZ2VkX2FkZHJfcmVtb3RlX3VubG9ja2VkKG1tLCBhZGRyKQkoewlcCiYjNDM7CSh2b2lkKShtbSk7CQkJCQlcCiYjNDM7CXVudGFnZ2VkX2FkZHIoYWRkcik7CQkJCVwKJiM0Mzt9KQomIzQzOyNlbmRpZgomIzQzOwogI2lmZGVmIG1hc2tlZF91c2VyX2FjY2Vzc19iZWdpbgogICNkZWZpbmUgY2FuX2RvX21hc2tlZF91c2VyX2FjY2VzcygpIDEKICMgaWZuZGVmIG1hc2tlZF91c2VyX3dyaXRlX2FjY2Vzc19iZWdpbgpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCA4NmE5NzMxMTliZDQ2Yy4uZDJiMmYwMDE0YTBjNjYgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jCkBAIC00Miw2ICYjNDM7NDIsOCBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbF9zdGF0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW0uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tbV9pbmxpbmUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2VjcmV0bWVtLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2V3YWxrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvbW0uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL3Rhc2suaCZndDsKQEAgLTcwNjIsNiAmIzQzOzcwNjQsMTgwIEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCiBFWFBPUlRfU1lNQk9MX0dQTChnZW5lcmljX2FjY2Vzc19waHlzKTsKICNlbmRpZgogCiYjNDM7LyoKJiM0MzsgKiBUaGUgZmFzdCBwYXRoIHVzZXMgZm9saW9fd2Fsa19zdGFydChGV19WTUFfTE9DS0VEKSwgd2hpY2ggbmVlZHMgdGhlIHBlci1WTUEKJiM0MzsgKiBsb2NrIGFuZCBSQ1UtZnJlZWQgcGFnZSB0YWJsZXMgdG8gd2FsayBwYWdlIHRhYmxlcyB3aXRob3V0IHRoZSBtbWFwIGxvY2suCiYjNDM7ICovCiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX1BFUl9WTUFfTE9DSykgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFKQomIzQzOy8qCiYjNDM7ICogUmVhZC1zaWRlIFZNQSBjaGVja3MgZm9yIHRoZSBsb2NrbGVzcyBmYXN0IHBhdGgsIG1pcnJvcmluZyB0aGUgcmVhZCBzaWRlIG9mCiYjNDM7ICogY2hlY2tfdm1hX2ZsYWdzKCk6IHJlamVjdCB3aGF0IEZXX1ZNQV9MT0NLRUQgY2Fubm90IGhhbmRsZSAoaHVnZXRsYiksIHdoYXQKJiM0MzsgKiBuZWVkcyB0aGUgLSZndDthY2Nlc3MoKSBoYW5kbGVyIChWTV9JTy9WTV9QRk5NQVApLCBvciB3aGF0IGhhcyBubyBzdHJ1Y3QgcGFnZSB0bwomIzQzOyAqIGNvcHkgKHNlY3JldG1lbSk7IGVuZm9yY2UgdGhlIEZPTExfQU5PTiByZXN0cmljdGlvbiB0aGF0CiYjNDM7ICogL3Byb2MvUElEL3tjbWRsaW5lLGVudmlyb259IHJlbHkgb24gKENWRS0yMDE4LTExMjApOyBhbmQgcmVxdWlyZSByZWFkIGFjY2VzcwomIzQzOyAqIChob25vcmluZyBGT0xMX0ZPUkNFKS4gIEFueXRoaW5nIG5vdCBwb3NpdGl2ZWx5IGFsbG93ZWQgZmFsbHMgYmFjayB0byB0aGUgc2xvdwomIzQzOyAqIHBhdGgsIHdoaWNoIHJlLXZhbGlkYXRlcyBldmVyeXRoaW5nLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIHZtYV9wZXJtaXRzX2Zhc3RfYWNjZXNzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAomIzQzOwkJCQkgICAgdW5zaWduZWQgaW50IGd1cF9mbGFncykKJiM0Mzt7CiYjNDM7CWlmICh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IChWTV9JTyB8IFZNX1BGTk1BUCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CWlmIChpc192bV9odWdldGxiX3BhZ2Uodm1hKSB8fCB2bWFfaXNfc2VjcmV0bWVtKHZtYSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CWlmICgoZ3VwX2ZsYWdzICZhbXA7IEZPTExfQU5PTikgJmFtcDsmYW1wOyAhdm1hX2lzX2Fub255bW91cyh2bWEpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwlpZiAoISh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX1JFQUQpICZhbXA7JmFtcDsKJiM0MzsJICAgICghKGd1cF9mbGFncyAmYW1wOyBGT0xMX0ZPUkNFKSB8fCAhKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fTUFZUkVBRCkpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogU2l6ZSBvZiB0aGUgc2luZ2xlIG1hcHBpbmcgZW50cnkgZm9saW9fd2Fsa19zdGFydCgpIGxhbmRlZCBvbi4gKi8KJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBmd19lbnRyeV9zaXplKGVudW0gZm9saW9fd2Fsa19sZXZlbCBsZXZlbCkKJiM0Mzt7CiYjNDM7CXN3aXRjaCAobGV2ZWwpIHsKJiM0MzsJY2FzZSBGV19MRVZFTF9QVUQ6CiYjNDM7CQlyZXR1cm4gUFVEX1NJWkU7CiYjNDM7CWNhc2UgRldfTEVWRUxfUE1EOgomIzQzOwkJcmV0dXJuIFBNRF9TSVpFOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIFBBR0VfU0laRTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIENvcHkgQGxlbiBieXRlcyBvZiB0aGUgcGlubmVkIEBmb2xpbyBvdXQgdG8gQGJ1Ziwgc3RhcnRpbmcgYXQgYnl0ZSBvZmZzZXQKJiM0MzsgKiBAZm9saW9fb2ZmIHdpdGhpbiB0aGUgZm9saW8gKHRoZSBwb3NpdGlvbiBvZiBAYWRkcikuICBNYXBzIGFuZCBjb3BpZXMgb25lCiYjNDM7ICogcGFnZSBhdCBhIHRpbWUgLS0ga21hcF9sb2NhbF9mb2xpbygpIGZvciBISUdITUVNLCBjb3B5X2Zyb21fdXNlcl9wYWdlKCkgZm9yCiYjNDM7ICogdGhlIHBlci1wYWdlIGZsdXNoIG9uIGFsaWFzaW5nIGNhY2hlcyAtLSB3aXRob3V0IHJlLXdhbGtpbmcgcGFnZSB0YWJsZXMuCiYjNDM7ICogRWFjaCBwYWdlIGJvcnJvd3MgdGhlIGNhbGxlciYjMzk7cyBzaW5nbGUgZm9saW8gcmVmZXJlbmNlLCBzbyB0aGUgbWFwcGluZyBpcwomIzQzOyAqIGRyb3BwZWQgd2l0aCBrdW5tYXBfbG9jYWwoKSByYXRoZXIgdGhhbiBmb2xpb19yZWxlYXNlX2ttYXAoKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBjb3B5X2ZvbGlvX3BhZ2VzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAomIzQzOwkJCSAgICAgdW5zaWduZWQgbG9uZyBmb2xpb19vZmYsIHVuc2lnbmVkIGxvbmcgYWRkciwKJiM0MzsJCQkgICAgIHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBsZW4pCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGRvbmUgPSAwOwomIzQzOwomIzQzOwl3aGlsZSAoZG9uZSAmbHQ7IGxlbikgewomIzQzOwkJdW5zaWduZWQgbG9uZyBwb3MgPSBmb2xpb19vZmYgJiM0MzsgZG9uZTsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcGFnZV9pZHggPSBwb3MgJmd0OyZndDsgUEFHRV9TSElGVDsKJiM0MzsJCXVuc2lnbmVkIGludCBwYWdlX29mZiA9IHBvcyAmYW1wOyB+UEFHRV9NQVNLOwomIzQzOwkJdW5zaWduZWQgaW50IGNodW5rID0gbWluX3QodW5zaWduZWQgbG9uZywgbGVuIC0gZG9uZSwKJiM0MzsJCQkJCSAgIFBBR0VfU0laRSAtIHBhZ2Vfb2ZmKTsKJiM0MzsJCXZvaWQgKmthZGRyID0ga21hcF9sb2NhbF9mb2xpbyhmb2xpbywgcGFnZV9pZHggJmx0OyZsdDsgUEFHRV9TSElGVCk7CiYjNDM7CiYjNDM7CQljb3B5X2Zyb21fdXNlcl9wYWdlKHZtYSwgZm9saW9fcGFnZShmb2xpbywgcGFnZV9pZHgpLAomIzQzOwkJCQkgICAgYWRkciAmIzQzOyBkb25lLCBidWYgJiM0MzsgZG9uZSwga2FkZHIgJiM0MzsgcGFnZV9vZmYsCiYjNDM7CQkJCSAgICBjaHVuayk7CiYjNDM7CQlrdW5tYXBfbG9jYWwoa2FkZHIpOwomIzQzOwkJZG9uZSAmIzQzOz0gY2h1bms7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBPcHBvcnR1bmlzdGljIGxvY2tsZXNzIGZhc3QgcGF0aCBmb3IgX19hY2Nlc3NfcmVtb3RlX3ZtKCkgcmVhZHMuCiYjNDM7ICoKJiM0MzsgKiBNZW1vcnkgYWxyZWFkeSByZXNpZGVudCBpbiBAbW0gY2FuIGJlIHJlYWQgd2l0aG91dCB0YWtpbmcgdGhlIGZyZXF1ZW50bHkKJiM0MzsgKiBjb250ZW5kZWQgbW1hcF9sb2NrOiBhIHBlci1WTUEgbG9jayBzdGFiaWxpemVzIHRoZSBWTUEsIGFuZCBmb2xpb193YWxrX3N0YXJ0KCkKJiM0MzsgKiB3aXRoIEZXX1ZNQV9MT0NLRUQgZ3JhYnMgYSBzaG9ydC1saXZlZCByZWZlcmVuY2UgdG8gYSBwcmVzZW50IHBhZ2UgZnJvbSBhIHBhZ2UKJiM0MzsgKiB0YWJsZSB3YWxrIHJ1biB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQsIHdoaWNoIHNlcmlhbGl6ZXMgYWdhaW5zdCBjb25jdXJyZW50CiYjNDM7ICogcGFnZSB0YWJsZSBmcmVlaW5nIHRoZSBzYW1lIHdheSBndXBfZmFzdCBkb2VzIChyZWx5aW5nIG9uCiYjNDM7ICogTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSkuCiYjNDM7ICoKJiM0MzsgKiBPbmx5IGEgcmVxdWVzdCB0aGF0IGxpZXMgZW50aXJlbHkgd2l0aGluIGEgc2luZ2xlIFZNQSBpcyBoYW5kbGVkIGhlcmUsCiYjNDM7ICogd2hpY2ggc2hvdWxkIG5vdCBiZSBhbiBpc3N1ZSBpbiBwcmFjdGljZSBzaW5jZSBldmVyeSBjYWxsZXIgaGFzIGEKJiM0MzsgKiBidWZmZXIgb2YgUEFHRV9TSVpFIG9yIHNtYWxsZXIuIExvb3AgaXRlcmF0aW9uIGluc2lkZSB0aGlzIGZ1bmN0aW9uCiYjNDM7ICogc2hvdWxkIGJlIHJhcmUsIHRvby4KJiM0MzsgKgomIzQzOyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCB2aWEgdGhlIGZhc3QgcGF0aC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGFjY2Vzc19yZW1vdGVfdm1fZmFzdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAomIzQzOwkJCQkgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKQomIzQzO3sKJiM0MzsJdm9pZCAqb2xkX2J1ZiA9IGJ1ZjsKJiM0MzsJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiYjNDM7CiYjNDM7CWFkZHIgPSB1bnRhZ2dlZF9hZGRyX3JlbW90ZV91bmxvY2tlZChtbSwgYWRkcik7CiYjNDM7CiYjNDM7CXZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcik7CiYjNDM7CWlmICghdm1hKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qIE9ubHkgaGFuZGxlIGEgcmVxdWVzdCBjb250YWluZWQgZW50aXJlbHkgd2l0aGluIHRoaXMgb25lIFZNQS4gKi8KJiM0MzsJaWYgKGxlbiAmZ3Q7IHZtYS0mZ3Q7dm1fZW5kIC0gYWRkcikKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsKJiM0MzsJaWYgKCF2bWFfcGVybWl0c19mYXN0X2FjY2Vzcyh2bWEsIGd1cF9mbGFncykpCiYjNDM7CQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CiYjNDM7CXdoaWxlIChsZW4pIHsKJiM0MzsJCXN0cnVjdCBmb2xpb193YWxrIGZ3OwomIzQzOwkJc3RydWN0IGZvbGlvICpmb2xpbzsKJiM0MzsJCXN0cnVjdCBwYWdlICpwYWdlOwomIzQzOwkJdW5zaWduZWQgbG9uZyBlbnRyeV9zaXplLCBmb2xpb19vZmYsIHNwYW4sIGlycV9mbGFnczsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgbG9ja2xlc3MgcGFnZSB0YWJsZSB3YWxrIG11c3QgcnVuIHdpdGggaW50ZXJydXB0cwomIzQzOwkJICogZGlzYWJsZWQ6IHBhZ2UgdGFibGUgZnJlZWluZyAobXVubWFwIG9yIFRIUCBjb2xsYXBzZSwgd2hpY2gKJiM0MzsJCSAqIElQSSB2aWEgdGxiX3JlbW92ZV90YWJsZV9zeW5jX29uZSgpIGFuZCB3YWl0KSB0aGVuIGNhbm5vdCBmcmVlCiYjNDM7CQkgKiBhIHRhYmxlIG1pZC13YWxrIC0tIHRoZSBzYW1lIGNvbnRyYWN0IGd1cF9mYXN0IHJlbGllcyBvbi4gIElSUXMKJiM0MzsJCSAqIGFyZSByZXN0b3JlZCBvbmNlIHRoZSBmb2xpbyBpcyBwaW5uZWQ7IHRoZSBjb3B5IGJlbG93IGhvbGRzIG9ubHkKJiM0MzsJCSAqIHRoZSBmb2xpbyByZWZlcmVuY2UuCiYjNDM7CQkgKi8KJiM0MzsJCWxvY2FsX2lycV9zYXZlKGlycV9mbGFncyk7CiYjNDM7CQlmb2xpbyA9IGZvbGlvX3dhbGtfc3RhcnQoJmFtcDtmdywgdm1hLCBhZGRyLCBGV19WTUFfTE9DS0VEKTsKJiM0MzsJCWlmICghZm9saW8pIHsKJiM0MzsJCQlsb2NhbF9pcnFfcmVzdG9yZShpcnFfZmxhZ3MpOwomIzQzOwkJCWdvdG8gb3V0X3VubG9jazsJLyogbm90IHByZXNlbnQ6IGxldCB0aGUgc2xvdyBwYXRoIGZhdWx0IGl0IGluICovCiYjNDM7CQl9CiYjNDM7CQlwYWdlID0gZncucGFnZTsKJiM0MzsJCWlmICghcGFnZSkgewomIzQzOwkJCS8qIE5vIHN0cnVjdCBwYWdlIHRvIGNvcHkgKGUuZy4gYSBzcGVjaWFsIFBURSkuICovCiYjNDM7CQkJZm9saW9fd2Fsa19lbmQoJmFtcDtmdywgdm1hKTsKJiM0MzsJCQlsb2NhbF9pcnFfcmVzdG9yZShpcnFfZmxhZ3MpOwomIzQzOwkJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJCX0KJiM0MzsJCWVudHJ5X3NpemUgPSBmd19lbnRyeV9zaXplKGZ3LmxldmVsKTsKJiM0MzsJCWZvbGlvX2dldChmb2xpbyk7CiYjNDM7CQlmb2xpb193YWxrX2VuZCgmYW1wO2Z3LCB2bWEpOwomIzQzOwkJbG9jYWxfaXJxX3Jlc3RvcmUoaXJxX2ZsYWdzKTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBmb2xpb193YWxrX3N0YXJ0KCkgdmFsaWRhdGVkIG9uZSBwcmVzZW50IG1hcHBpbmcgZW50cnkKJiM0MzsJCSAqIChQQUdFL1BNRC9QVURfU0laRSkuICBDb3B5IHRvIHRoZSBlbmQgb2YgdGhhdCBlbnRyeSwgYm91bmRlZCBieQomIzQzOwkJICogdGhlIGZvbGlvIGFuZCB0aGUgcmVtYWluaW5nIGxlbmd0aCAoYWxyZWFkeSB3aXRoaW4gdGhlIFZNQSksIHNvCiYjNDM7CQkgKiBhIGh1Z2UgbWFwcGluZyBpcyBoYW5kbGVkIGluIGEgc2luZ2xlIHdhbGsuCiYjNDM7CQkgKi8KJiM0MzsJCWZvbGlvX29mZiA9IChmb2xpb19wYWdlX2lkeChmb2xpbywgcGFnZSkgJmx0OyZsdDsgUEFHRV9TSElGVCkgJiM0MzsKJiM0MzsJCQkgICAgb2Zmc2V0X2luX3BhZ2UoYWRkcik7CiYjNDM7CQlzcGFuID0gbWluMygodW5zaWduZWQgbG9uZylsZW4sCiYjNDM7CQkJICAgIGVudHJ5X3NpemUgLSAoYWRkciAmYW1wOyAoZW50cnlfc2l6ZSAtIDEpKSwKJiM0MzsJCQkgICAgKGZvbGlvX25yX3BhZ2VzKGZvbGlvKSAmbHQ7Jmx0OyBQQUdFX1NISUZUKSAtIGZvbGlvX29mZik7CiYjNDM7CiYjNDM7CQljb3B5X2ZvbGlvX3BhZ2VzKHZtYSwgZm9saW8sIGZvbGlvX29mZiwgYWRkciwgYnVmLCBzcGFuKTsKJiM0MzsKJiM0MzsJCS8qIE1hdGNoIHRoZSBGT0xMX1RPVUNIIGJlaGF2aW91ciBvZiB0aGUgc2xvdyAoR1VQKSBwYXRoLiAqLwomIzQzOwkJZm9saW9fbWFya19hY2Nlc3NlZChmb2xpbyk7CiYjNDM7CQlmb2xpb19wdXQoZm9saW8pOwomIzQzOwkJbGVuIC09IHNwYW47CiYjNDM7CQlidWYgJiM0Mzs9IHNwYW47CiYjNDM7CQlhZGRyICYjNDM7PSBzcGFuOwomIzQzOwl9CiYjNDM7CiYjNDM7b3V0X3VubG9jazoKJiM0MzsJdm1hX2VuZF9yZWFkKHZtYSk7CiYjNDM7CXJldHVybiBidWYgLSBvbGRfYnVmOwomIzQzO30KJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbnQgYWNjZXNzX3JlbW90ZV92bV9mYXN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQkJCSB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7I2VuZGlmIC8qIENPTkZJR19QRVJfVk1BX0xPQ0sgJmFtcDsmYW1wOyBDT05GSUdfTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSAqLwomIzQzOwogLyoKICAqIEFjY2VzcyBhbm90aGVyIHByb2Nlc3MmIzM5OyBhZGRyZXNzIHNwYWNlIGFzIGdpdmVuIGluIG1tLgogICovCkBAIC03MDcxLDE1ICYjNDM7NzI0NywzMCBAQCBzdGF0aWMgaW50IF9fYWNjZXNzX3JlbW90ZV92bShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCXZvaWQgKm9sZF9idWYgPSBidWY7CiAJaW50IHdyaXRlID0gZ3VwX2ZsYWdzICZhbXA7IEZPTExfV1JJVEU7CiAKJiM0MzsJLyoKJiM0MzsJICogVHJ5IHRoZSBsb2NrbGVzcyBmYXN0IHBhdGggZm9yIHJlYWRzIGZpcnN0OyBpdCB0cmFuc2ZlcnMgd2hhdCBpdCBjYW4KJiM0MzsJICogZnJvbSByZXNpZGVudCBtZW1vcnkgd2l0aG91dCB0YWtpbmcgbW1hcF9sb2NrLCBhbmQgbGVhdmVzIHRoZQomIzQzOwkgKiByZW1haW5kZXIgKGlmIGFueSkgdG8gdGhlIHNsb3cgcGF0aCBiZWxvdy4KJiM0MzsJICovCiYjNDM7CWlmICghd3JpdGUpIHsKJiM0MzsJCWludCBkb25lID0gYWNjZXNzX3JlbW90ZV92bV9mYXN0KG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTsKJiM0MzsKJiM0MzsJCWFkZHIgJiM0Mzs9IGRvbmU7CiYjNDM7CQlidWYgJiM0Mzs9IGRvbmU7CiYjNDM7CQlsZW4gLT0gZG9uZTsKJiM0MzsJCWlmICghbGVuKQomIzQzOwkJCXJldHVybiBidWYgLSBvbGRfYnVmOwomIzQzOwl9CiYjNDM7CiAJaWYgKG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKG1tKSkKLQkJcmV0dXJuIDA7CiYjNDM7CQlyZXR1cm4gYnVmIC0gb2xkX2J1ZjsKIAogCS8qIFVudGFnIHRoZSBhZGRyZXNzIGJlZm9yZSBsb29raW5nIHVwIHRoZSBWTUEgKi8KIAlhZGRyID0gdW50YWdnZWRfYWRkcl9yZW1vdGUobW0sIGFkZHIpOwogCiAJLyogQXZvaWQgdHJpZ2dlcmluZyB0aGUgdGVtcG9yYXJ5IHdhcm5pbmcgaW4gX19nZXRfdXNlcl9wYWdlcyAqLwogCWlmICghdm1hX2xvb2t1cChtbSwgYWRkcikgJmFtcDsmYW1wOyAhZXhwYW5kX3N0YWNrKG1tLCBhZGRyKSkKLQkJcmV0dXJuIDA7CiYjNDM7CQlyZXR1cm4gYnVmIC0gb2xkX2J1ZjsKIAogCS8qIGlnbm9yZSBlcnJvcnMsIGp1c3QgY2hlY2sgaG93IG11Y2ggd2FzIHN1Y2Nlc3NmdWxseSB0cmFuc2ZlcnJlZCAqLwogCXdoaWxlIChsZW4pIHsKZGlmZiAtLWdpdCBhL21tL3BhZ2V3YWxrLmMgYi9tbS9wYWdld2Fsay5jCmluZGV4IDNhZTI1ODZmZjQ1YjQ0Li5hYjFlODE5ODNjYjhjNyAxMDA2NDQKLS0tIGEvbW0vcGFnZXdhbGsuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdld2Fsay5jCkBAIC04OTAsNyAmIzQzOzg5MCwxMCBAQCBpbnQgd2Fsa19wYWdlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgZmlyc3RfaW5kZXgsCiAgKiBodWdlX3B0ZXBfc2V0XyosIC4uLikuIE5vdGUgdGhhdCB0aGUgcGFnZSB0YWJsZSBlbnRyeSBzdG9yZWQgaW4gQGZ3IG1pZ2h0CiAgKiBub3QgY29ycmVzcG9uZCB0byB0aGUgZmlyc3QgcGh5c2ljYWwgZW50cnkgb2YgYSBsb2dpY2FsIGh1Z2V0bGIgZW50cnkuCiAgKgotICogVGhlIG1tYXAgbG9jayBtdXN0IGJlIGhlbGQgaW4gcmVhZCBtb2RlLgomIzQzOyAqIFRoZSBtbWFwIGxvY2sgbXVzdCBiZSBoZWxkIGluIHJlYWQgbW9kZS4gQWx0ZXJuYXRpdmVseSwgaWYgQEZXX1ZNQV9MT0NLRUQgaXMKJiM0MzsgKiBwYXNzZWQsIHRoZSBWTUEmIzM5O3MgcGVyLVZNQSBsb2NrIG11c3QgYmUgaGVsZCBhbmQgaW50ZXJydXB0cyBtdXN0IGJlIGRpc2FibGVkCiYjNDM7ICogYWNyb3NzIHRoZSB3YWxrIGFuZCB1bnRpbCBmb2xpb193YWxrX2VuZCgpIChvbmx5IHN1cHBvcnRlZCB3aXRoIFJDVS1mcmVlZCBwYWdlCiYjNDM7ICogdGFibGVzLCBpLmUuIENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFLCBhbmQgbm90IGZvciBodWdldGxiKS4KICAqCiAgKiBSZXR1cm46IGZvbGlvIHBvaW50ZXIgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIE5VTEwuCiAgKi8KQEAgLTkwOCw3ICYjNDM7OTExLDI5IEBAIHN0cnVjdCBmb2xpbyAqZm9saW9fd2Fsa19zdGFydChzdHJ1Y3QgZm9saW9fd2FsayAqZncsCiAJcGdkX3QgKnBnZHA7CiAJcDRkX3QgKnA0ZHA7CiAKLQltbWFwX2Fzc2VydF9sb2NrZWQodm1hLSZndDt2bV9tbSk7CiYjNDM7CWlmIChmbGFncyAmYW1wOyBGV19WTUFfTE9DS0VEKSB7CiYjNDM7CQkvKgomIzQzOwkJICogTG9ja2xlc3Mgd2FsayB1bmRlciB0aGUgcGVyLVZNQSBsb2NrIGluc3RlYWQgb2YgdGhlIG1tYXAKJiM0MzsJCSAqIGxvY2suIFRoZSBWTUEgbG9jayBrZWVwcyB0aGUgVk1BIHN0YWJsZSwgYnV0IHRoZSBwYWdlIHRhYmxlcwomIzQzOwkJICogd2Fsa2VkIGJlbG93IGl0IGNhbiBzdGlsbCBiZSBmcmVlZCBjb25jdXJyZW50bHk6IGEgbXVubWFwKCkgb3IKJiM0MzsJCSAqIFRIUCBjb2xsYXBzZSBvZiBhbiBhZGphY2VudCByZWdpb24gaW4gdGhlIHNhbWUgbW0gY2FuIGZyZWUgYQomIzQzOwkJICogc2hhcmVkIHVwcGVyLWxldmVsIHRhYmxlLCBhbmQgY29sbGFwc2VfaHVnZV9wYWdlKCkgLSZndDsKJiM0MzsJCSAqIHJldHJhY3RfcGFnZV90YWJsZXMoKSBmcmVlcyBwYWdlIHRhYmxlcyBvZiBWTUFzIHdob3NlIGxvY2sgaXQKJiM0MzsJCSAqIGRvZXMgbm90IGhvbGQuIFBhZ2UgdGFibGUgZnJlZWluZyBzZXJpYWxpemVzIGFnYWluc3QgbG9ja2xlc3MKJiM0MzsJCSAqIHdhbGtlcnMgdmlhIHRsYl9yZW1vdmVfdGFibGVfc3luY19vbmUoKSwgd2hpY2ggSVBJcyBhbmQgd2FpdHMKJiM0MzsJCSAqIGZvciBldmVyeSBDUFUgdG8gZW5hYmxlIGludGVycnVwdHM7IGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwKJiM0MzsJCSAqIHNlY3Rpb24gZG9lcyBub3QgYmxvY2sgdGhhdCBJUEksIHNvIHRoZSBjYWxsZXIgbXVzdCBrZWVwCiYjNDM7CQkgKiBpbnRlcnJ1cHRzIGRpc2FibGVkIGFjcm9zcyB0aGUgd2hvbGUgd2FsaywgbGlrZSBndXBfZmFzdC4KJiM0MzsJCSAqIEh1Z2V0bGIgKFBNRCBzaGFyaW5nKSBtYXBzIHBhZ2UgdGFibGVzIG5vdCBjb3ZlcmVkIGJ5IHRoaXMKJiM0MzsJCSAqIFZNQSYjMzk7cyBsb2NrIGFuZCBpcyBub3Qgc3VwcG9ydGVkLgomIzQzOwkJICovCiYjNDM7CQlWTV9XQVJOX09OX09OQ0UoIUlTX0VOQUJMRUQoQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUpKTsKJiM0MzsJCVZNX1dBUk5fT05fT05DRShpc192bV9odWdldGxiX3BhZ2Uodm1hKSk7CiYjNDM7CQlsb2NrZGVwX2Fzc2VydF9pcnFzX2Rpc2FibGVkKCk7CiYjNDM7CQl2bWFfYXNzZXJ0X2xvY2tlZCh2bWEpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJbW1hcF9hc3NlcnRfbG9ja2VkKHZtYS0mZ3Q7dm1fbW0pOwomIzQzOwl9CiAJdm1hX3BndGFibGVfd2Fsa19iZWdpbih2bWEpOwogCiAJaWYgKFdBUk5fT05fT05DRShhZGRyICZsdDsgdm1hLSZndDt2bV9zdGFydCB8fCBhZGRyICZndDs9IHZtYS0mZ3Q7dm1fZW5kKSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDI6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjgzNwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDI3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBJbXBhY3Qgb2YgYSBOZXcgS2VybmVsIE1lbW9yeSBBY2Nlc3MgT3B0aW1pemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBtYWtpbmcgY2hhbmdlcyB0byB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBhY2Nlc3Mgcm91dGluZXMuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWRkaW5nIGEgbG9ja2xlc3MgZmFzdCBwYXRoIGZvciBgX19hY2Nlc3NfcmVtb3RlX3ZtKClgIHJlYWRzLiBJbnRlcmVzdGluZy4uLiB0aGV5JiMzOTtyZSBjYWxsaW5nIHRoaXMgbmV3IGZ1bmN0aW9uIGBhY2Nlc3NfcmVtb3RlX3ZtX2Zhc3QoKWAgYW5kIGl0JiMzOTtzIHV0aWxpemluZyBgZm9saW9fd2Fsa19zdGFydCgpYCB3aXRoIGEgbmV3IGZsYWcsIGBGV19WTUFfTE9DS0VEYC4gSXQgbG9va3MgbGlrZSB0aGVyZSYjMzk7cyBhbHNvIHNvbWUgbW9kaWZpY2F0aW9uIG9mIGB1bnRhZ2dlZF9hZGRyX3JlbW90ZSgpYCwgYWxsb3dpbmcgZm9yIHVubG9ja2VkIHVzYWdlIHZpYSBgdW50YWdnZWRfYWRkcl9yZW1vdGVfdW5sb2NrZWQoKWAuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgaXMgdGhpcyBhY3R1YWxseSBnb2luZyB0byBiZSB3b3J0aCBmdXp6aW5nPyBJIG5lZWQgdG8gY2hlY2sgaG93IHJlYWNoYWJsZSB0aGlzIGNvZGUgaXMgYW5kIGlmIGl0JiMzOTtzIGV2ZW4gZnVuY3Rpb25hbC4gVGhlIHBhdGNoIG1vZGlmaWVzIGBtbS9tZW1vcnkuY2AgYW5kIGBtbS9wYWdld2Fsay5jYC4gQSBxdWljayBzY2FuIHRlbGxzIG1lIGBfX2FjY2Vzc19yZW1vdGVfdm0oKWAgaXMgdXNlZCBieSBgYWNjZXNzX3JlbW90ZV92bSgpYCwgd2hpY2ggaW4gdHVybiBpcyB1c2VkIGJ5IHNvbWUgcHJldHR5IGNvcmUgZnVuY3Rpb25hbGl0eTogYHB0cmFjZWAgY2FsbHMgKGxpa2UgYFBUUkFDRV9QRUVLREFUQWApLCBgL3Byb2MvcGlkL21lbWAsIGAvcHJvYy9waWQvY21kbGluZWAsIGFuZCBgL3Byb2MvcGlkL2Vudmlyb25gLiBZZXAsIHRoYXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIGRlZmluaXRlbHkgZnVuY3Rpb25hbC4gVGhpcyBpcyBhIGdvb2QgdGFyZ2V0LgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRob3NlIGNvbmZpZ3VyYXRpb25zLiBUaGUgZmFzdCBwYXRoIGlzIGd1YXJkZWQgYnkgYCNpZiBkZWZpbmVkKENPTkZJR19QRVJfVk1BX0xPQ0spICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSlgLiBTbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlc2UgY29uZmlncyBhbmQgc2VlIHdoYXQgdGhlaXIgZGVwZW5kZW5jaWVzIGFyZSwgYW5kIHdoZXRoZXIgb3Igbm90IHRoZXkmIzM5O3JlIGxpa2VseSB0byBiZSBwcmVzZW50IGluIGFueSBvZiBvdXIgdHlwaWNhbCBmdXp6aW5nIHRhcmdldHMuIEdvdHRhIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgYWN0dWFsbHkgdGVzdGluZyB0aGUgY29kZSB0aGF0JiMzOTtzIGJlaW5nIGludHJvZHVjZWQgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwMjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUEVSX1ZNQV9MT0NLJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTQ1Mj1jb25maWcgQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0tcbi0tXG5tbS9LY29uZmlnLTE0NTQtXG5tbS9LY29uZmlnOjE0NTU6Y29uZmlnIFBFUl9WTUFfTE9DS1xubW0vS2NvbmZpZy0xNDU2LVx0ZGVmX2Jvb2wgeVxuLS1cbm1tL0tjb25maWcuZGVidWc9MzAwPWNvbmZpZyBERUJVR19LTUVNTEVBS19WRVJCT1NFXG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy0zMTAtXG5tbS9LY29uZmlnLmRlYnVnOjMxMTpjb25maWcgUEVSX1ZNQV9MT0NLX1NUQVRTXG5tbS9LY29uZmlnLmRlYnVnLTMxMi1cdGJvb2wgXCYjMzQ7U3RhdGlzdGljcyBmb3IgcGVyLXZtYSBsb2Nrc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDAyOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2ODEKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIEtlcm5lbCYjMzk7cyBNZW1vcnkgTWFuYWdlbWVudCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGRlZmluaXRpb24sIGBQRVJfVk1BX0xPQ0tgLiBJdCYjMzk7cyBzZXQgdG8gJiMzNDt5ZXMmIzM0OyBieSBkZWZhdWx0LCBidXQgb25seSBpZiB0aGUgYXJjaGl0ZWN0dXJlIHN1cHBvcnRzIHRoaXMgJiMzNDtQRVJfVk1BX0xPQ0smIzM0OyBmZWF0dXJlLiBUaGF0IG1ha2VzIHNlbnNlLCBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiB0aGF0IGlzIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQuIE5vdywgd2hhdCYjMzk7cyBpbnRlcmVzdGluZyBpcyBob3cgaXQmIzM5O3MgYmVpbmcgY29uZGl0aW9uZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBmZWF0dXJlLCBzbyBteSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgaXQgaXMgbGlua2VkLiBUaGlzIHdpbGwgZ2l2ZSBhIGRlZXBlciBpbnNpZ2h0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDAyOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvS2NvbmZpZz01MTI9Y29uZmlnIE1NVV9HQVRIRVJfVEFCTEVfRlJFRVxuLS1cbmFyY2gvS2NvbmZpZy01MTQtXG5hcmNoL0tjb25maWc6NTE1OmNvbmZpZyBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG5hcmNoL0tjb25maWctNTE2LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDAyOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5NzUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgY3JhZnRlZCB3aXRoIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgSSYjMzk7bSBkaXNjdXNzaW5nIHRoaXMgd2l0aCBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYSBTeXN0ZW0gQXJjaGl0ZWN0dXJlIFBhcmFtZXRlcioqCgpSaWdodCwgc28gdGhpcyBmZWVscyBsaWtlIGEgZmxhZywgYSBoaWRkZW4gYm9vbGVhbi4gSXQmIzM5O3MgcHJvYmFibHkgYW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHNldHRpbmcsIHNvbWV0aGluZyB0aGUgaGFyZHdhcmUgb3IgZmlybXdhcmUgY29uZmlndXJlcy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUgeDg2IGFyY2hpdGVjdHVyZSBhbmQgc2VlIGlmIHRoaXMgc2V0dGluZyBpcyByZWxldmFudCB0aGVyZS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggeDg2LCBzZWUgaWYgaXQmIzM5O3MgZXZlbiBleHBvc2VkLCBhbmQgaWYgc28sIGhvdyBpdCBhZmZlY3RzIGJlaGF2aW9yLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgaXQmIzM5O3MgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGJlY2F1c2UgdGhlIGJvb2xlYW4gaXMgaGlkZGVuLCBsaWtlbHkgaW4gdGhlIHN5c3RlbS9hcmNoaXRlY3R1cmUgZGVmaW5pdGlvbi4gRnJvbSB0aGVyZSwgd2UgY2FuIGV4cGFuZCBvdXIgcmVzZWFyY2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDI6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hbHBoYS9LY29uZmlnPTI9Y29uZmlnIEFMUEhBXG4tLVxuYXJjaC9hbHBoYS9LY29uZmlnLTQyLVx0c2VsZWN0IE1NVV9HQVRIRVJfTk9fUkFOR0VcbmFyY2gvYWxwaGEvS2NvbmZpZzo0MzpcdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG5hcmNoL2FscGhhL0tjb25maWctNDQtXHRzZWxlY3QgU1BBUlNFTUVNX0VYVFJFTUUgaWYgU1BBUlNFTUVNXG4tLVxuYXJjaC9hcm0vS2NvbmZpZz0yPWNvbmZpZyBBUk1cbi0tXG5hcmNoL2FybS9LY29uZmlnLTEzNS1cdHNlbGVjdCBIQVZFX1BFUkZfVVNFUl9TVEFDS19EVU1QXG5hcmNoL2FybS9LY29uZmlnOjEzNjpcdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFIGlmIFNNUCBcdTAwMjZcdTAwMjYgQVJNX0xQQUVcbmFyY2gvYXJtL0tjb25maWctMTM3LVx0c2VsZWN0IEhBVkVfUkVHU19BTkRfU1RBQ0tfQUNDRVNTX0FQSVxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZz0yPWNvbmZpZyBBUk02NFxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZy0yMjMtXHRzZWxlY3QgSEFWRV9GVU5DVElPTl9BUkdfQUNDRVNTX0FQSVxuYXJjaC9hcm02NC9LY29uZmlnOjIyNDpcdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG5hcmNoL2FybTY0L0tjb25maWctMjI1LVx0c2VsZWN0IEhBVkVfUlNFUVxuLS1cbmFyY2gvbG9vbmdhcmNoL0tjb25maWc9Mj1jb25maWcgTE9PTkdBUkNIXG4tLVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy0xOTEtXHRzZWxlY3QgTU1VX0dBVEhFUl9NRVJHRV9WTUFTIGlmIE1NVVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZzoxOTI6XHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy0xOTMtXHRzZWxlY3QgTU9EVUxFU19VU0VfRUxGX1JFTEEgaWYgTU9EVUxFU1xuLS1cbmFyY2gvbWlwcy9LY29uZmlnPTI9Y29uZmlnIE1JUFNcbi0tXG5hcmNoL21pcHMvS2NvbmZpZy05OS1cdHNlbGVjdCBMT0NLX01NX0FORF9GSU5EX1ZNQVxuYXJjaC9taXBzL0tjb25maWc6MTAwOlx0c2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcbmFyY2gvbWlwcy9LY29uZmlnLTEwMS1cdHNlbGVjdCBNT0RVTEVTX1VTRV9FTEZfUkVMIGlmIE1PRFVMRVNcbi0tXG5hcmNoL3BhcmlzYy9LY29uZmlnPTI9Y29uZmlnIFBBUklTQ1xuLS1cbmFyY2gvcGFyaXNjL0tjb25maWctODItXHRzZWxlY3QgVEhSRUFEX0lORk9fSU5fVEFTS1xuYXJjaC9wYXJpc2MvS2NvbmZpZzo4MzpcdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG5hcmNoL3BhcmlzYy9LY29uZmlnLTg0LVx0c2VsZWN0IE5FRURfRE1BX01BUF9TVEFURVxuLS1cbmFyY2gvcG93ZXJwYy9LY29uZmlnPTExOD1jb25maWcgUFBDXG4tLVxuYXJjaC9wb3dlcnBjL0tjb25maWctMzA2LVx0c2VsZWN0IE1NVV9HQVRIRVJfUEFHRV9TSVpFXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzozMDc6XHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxuYXJjaC9wb3dlcnBjL0tjb25maWctMzA4LVx0c2VsZWN0IEhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnPTEzPWNvbmZpZyBSSVNDVlxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZy0yMDctXHRzZWxlY3QgTE9DS19NTV9BTkRfRklORF9WTUFcbmFyY2gvcmlzY3YvS2NvbmZpZzoyMDg6XHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSBpZiBTTVAgXHUwMDI2XHUwMDI2IE1NVVxuYXJjaC9yaXNjdi9LY29uZmlnLTIwOS1cdHNlbGVjdCBNT0RVTEVTX1VTRV9FTEZfUkVMQSBpZiBNT0RVTEVTXG4tLVxuYXJjaC9zMzkwL0tjb25maWc9NzU9Y29uZmlnIFMzOTBcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy0yNjMtXHRzZWxlY3QgTU1VX0dBVEhFUl9OT19HQVRIRVJcbmFyY2gvczM5MC9LY29uZmlnOjI2NDpcdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG5hcmNoL3MzOTAvS2NvbmZpZy0yNjUtXHRzZWxlY3QgTU9EVUxFU19VU0VfRUxGX1JFTEFcbi0tXG5hcmNoL3NwYXJjL0tjb25maWc9NzA9Y29uZmlnIFNQQVJDNjRcbi0tXG5hcmNoL3NwYXJjL0tjb25maWctNzYtXHRzZWxlY3QgSEFWRV9LUFJPQkVTXG5hcmNoL3NwYXJjL0tjb25maWc6Nzc6XHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSBpZiBTTVBcbmFyY2gvc3BhcmMvS2NvbmZpZy03OC1cdHNlbGVjdCBIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRSBpZiBTTVBcbi0tXG5hcmNoL3VtL0tjb25maWc9NT1jb25maWcgVU1MXG4tLVxuYXJjaC91bS9LY29uZmlnLTQ2LVx0c2VsZWN0IFNQQVJTRV9JUlFcbmFyY2gvdW0vS2NvbmZpZzo0NzpcdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG5hcmNoL3VtL0tjb25maWctNDgtXG4tLVxuYXJjaC94ODYvS2NvbmZpZz01OD1jb25maWcgWDg2XG4tLVxuYXJjaC94ODYvS2NvbmZpZy0yODQtXHRzZWxlY3QgQVNZTkNfS0VSTkVMX1BHVEFCTEVfRlJFRVx0aWYgSU9NTVVfU1ZBXG5hcmNoL3g4Ni9LY29uZmlnOjI4NTpcdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG5hcmNoL3g4Ni9LY29uZmlnLTI4Ni1cdHNlbGVjdCBNTVVfR0FUSEVSX01FUkdFX1ZNQVNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwMjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzI4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gQ29udW5kcnVtKioKCk9rYXksIHNvIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCB0aGVzZSBkZWZhdWx0IHg4NiBjb25maWd1cmF0aW9ucywgc3BlY2lmaWNhbGx5IGBQRVJfVk1BX0xPQ0tgIGFuZCBgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRWAuIFRoZXkmIzM5O3JlIGFscmVhZHkgZW5hYmxlZCBieSBkZWZhdWx0LCB3aGljaCBpcyBnb29kLCBidXQgSSBuZWVkIHRvIGRlY2lkZSB3aGF0IHRvIGxpc3QgZ2l2ZW4gdGhlIHByb21wdCYjMzk7cyBpbnN0cnVjdGlvbiB0byBvbmx5IGxpc3QgdGhvc2UgY29uZmlncyB0aGF0IHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gU2hvdWxkIEkgaW5jbHVkZSBgUEVSX1ZNQV9MT0NLYCBhbnl3YXksIGp1c3QgZm9yIGNsYXJpdHk/IEhtbW0uLi4gdGhlIHBhdGNoICpkb2VzKiBoYXZlIHRoYXQgYCNpZmAgY29uZGl0aW9uIHVzaW5nIGJvdGggdGhhdCBhbmQgdGhlIG90aGVyIG9uZSwgc28gaXQmIzM5O3MgZGlyZWN0bHkgcmVsZXZhbnQgaGVyZS4gT2theSwgSSYjMzk7bGwgcHV0IGl0IGluLgoKTm93IGZvciBmb2N1cyBzeW1ib2xzLiBUaGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBhY2Nlc3NfcmVtb3RlX3ZtX2Zhc3RgLCBgdm1hX3Blcm1pdHNfZmFzdF9hY2Nlc3NgLCBhbmQgYGNvcHlfZm9saW9fcGFnZXNgLCBhbmQgaXQgbW9kaWZpZXMgYF9fYWNjZXNzX3JlbW90ZV92bWAsIGFuZCBgZm9saW9fd2Fsa19zdGFydGAuIGBhY2Nlc3NfcmVtb3RlX3ZtX2Zhc3RgIGlzIGRlZmluaXRlbHkgYSBrZXkgZm9jdXMgcG9pbnQuIEFuZCBgX19hY2Nlc3NfcmVtb3RlX3ZtYCBpcyBhbHNvIGEgZ29vZCBjaG9pY2UuIEV2ZW4gdGhvdWdoIGBmb2xpb193YWxrX3N0YXJ0YCBzZWVtcyBhIGJpdCBnZW5lcmljLCBpdCBpcyBtb2RpZmllZCwgc28gSSYjMzk7bGwga2VlcCB0aGF0IG9uZS4gQWxyaWdodCwgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgdXNlIG9mIGBfX2FjY2Vzc19yZW1vdGVfdm1gIGFuZCBJIHNob3VsZCBoYXZlIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwMjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2FjY2Vzc19yZW1vdGVfdm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rZXJuZWwvbXRlLmM9NDE4PWxvbmcgZ2V0X210ZV9jdHJsKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9tdGUuYy00NDEtICogdGhlIG51bWJlciBvZiB0YWdzIGNvcGllZC4gUmV0dXJuIDAgaWYgYW55IHRhZ3MgY29waWVkLCBlcnJvciBvdGhlcndpc2UuXG5hcmNoL2FybTY0L2tlcm5lbC9tdGUuYzo0NDI6ICogSW5zcGlyZWQgYnkgX19hY2Nlc3NfcmVtb3RlX3ZtKCkuXG5hcmNoL2FybTY0L2tlcm5lbC9tdGUuYy00NDMtICovXG4tLVxua2VybmVsL3RpbWUvbmFtZXNwYWNlX3Zkc28uYz03MT1zdHJ1Y3QgcGFnZSAqZmluZF90aW1lbnNfdnZhcl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmtlcm5lbC90aW1lL25hbWVzcGFjZV92ZHNvLmMtODAtXHQgKiBpbiBzcGVjaWFsX21hcHBpbmdfdm1vcHMoKS5cbmtlcm5lbC90aW1lL25hbWVzcGFjZV92ZHNvLmM6ODE6XHQgKiBGb3IgbW9yZSBkZXRhaWxzIGNoZWNrX3ZtYV9mbGFncygpIGFuZCBfX2FjY2Vzc19yZW1vdGVfdm0oKVxua2VybmVsL3RpbWUvbmFtZXNwYWNlX3Zkc28uYy04Mi1cdCAqL1xuLS1cbm1tL21lbW9yeS5jPTcxMTc9c3RhdGljIHZvaWQgY29weV9mb2xpb19wYWdlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9tZW1vcnkuYy03MTM5LS8qXG5tbS9tZW1vcnkuYzo3MTQwOiAqIE9wcG9ydHVuaXN0aWMgbG9ja2xlc3MgZmFzdCBwYXRoIGZvciBfX2FjY2Vzc19yZW1vdGVfdm0oKSByZWFkcy5cbm1tL21lbW9yeS5jLTcxNDEtICpcbi0tXG5tbS9tZW1vcnkuYz03MjM0PXN0YXRpYyBpbnQgYWNjZXNzX3JlbW90ZV92bV9mYXN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbWVtb3J5LmMtNzI0My0gKi9cbm1tL21lbW9yeS5jOjcyNDQ6c3RhdGljIGludCBfX2FjY2Vzc19yZW1vdGVfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL21lbW9yeS5jLTcyNDUtXHRcdFx0ICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxuLS1cbm1tL21lbW9yeS5jPTczNDk9aW50IGFjY2Vzc19yZW1vdGVfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9tZW1vcnkuYy03MzUxLXtcbm1tL21lbW9yeS5jOjczNTI6XHRyZXR1cm4gX19hY2Nlc3NfcmVtb3RlX3ZtKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTtcbm1tL21lbW9yeS5jLTczNTMtfVxuLS1cbm1tL21lbW9yeS5jPTczNjA9aW50IGFjY2Vzc19wcm9jZXNzX3ZtKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbWVtb3J5LmMtNzM2OS1cbm1tL21lbW9yeS5jOjczNzA6XHRyZXQgPSBfX2FjY2Vzc19yZW1vdGVfdm0obW0sIGFkZHIsIGJ1ZiwgbGVuLCBndXBfZmxhZ3MpO1xubW0vbWVtb3J5LmMtNzM3MS1cbi0tXG5tbS9ub21tdS5jPTE2Mzk9RVhQT1JUX1NZTUJPTChmaWxlbWFwX21hcF9wYWdlcyk7XG5tbS9ub21tdS5jLTE2NDAtXG5tbS9ub21tdS5jOjE2NDE6c3RhdGljIGludCBfX2FjY2Vzc19yZW1vdGVfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL25vbW11LmMtMTY0Mi1cdFx0XHQgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG4tLVxubW0vbm9tbXUuYz0xNjg1PWludCBhY2Nlc3NfcmVtb3RlX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbm9tbXUuYy0xNjg3LXtcbm1tL25vbW11LmM6MTY4ODpcdHJldHVybiBfX2FjY2Vzc19yZW1vdGVfdm0obW0sIGFkZHIsIGJ1ZiwgbGVuLCBndXBfZmxhZ3MpO1xubW0vbm9tbXUuYy0xNjg5LX1cbi0tXG5tbS9ub21tdS5jPTE2OTU9aW50IGFjY2Vzc19wcm9jZXNzX3ZtKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmJ1ZiwgaW50IGxlbixcbi0tXG5tbS9ub21tdS5jLTE3MDYtXG5tbS9ub21tdS5jOjE3MDc6XHRsZW4gPSBfX2FjY2Vzc19yZW1vdGVfdm0obW0sIGFkZHIsIGJ1ZiwgbGVuLCBndXBfZmxhZ3MpO1xubW0vbm9tbXUuYy0xNzA4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwMjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg1MAoJCQkJCQkJb3V0cHV0OiAxNjgKCQkJCQkJCXRob3VnaHRzOiA0NzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IFJlbW90ZSBWTSBBY2Nlc3MgRmFzdCBQYXRoKioKCk9rYXksIHNvIEkmIzM5O3ZlIHplcm9lZCBpbiBvbiB0aGUgbG9ja2xlc3MgZmFzdCBwYXRoIGZvciByZW1vdGUgbWVtb3J5IGFjY2Vzcy4gYF9fYWNjZXNzX3JlbW90ZV92bWAgYW5kIGBhY2Nlc3NfcmVtb3RlX3ZtX2Zhc3RgIGFyZSBkZWZpbml0ZWx5IHRoZSBrZXkgZm9jdXMgc3ltYm9scyBoZXJlLiBFdmVuIHRob3VnaCBgYWNjZXNzX3JlbW90ZV92bV9mYXN0YCBpcyBzdGF0aWMsIHN5emthbGxlciBzaG91bGQgc3RpbGwgYmUgYWJsZSB0byB0YXJnZXQgaXQuIEkmIzM5O2xsIGFsc28gYWRkIGBmb2xpb193YWxrX3N0YXJ0YCB0byB0aGUgbGlzdCBiZWNhdXNlIGl0JiMzOTtzIHJlbGV2YW50IHRvIHRoZSBvcGVyYXRpb24uIEFuZCBzaW5jZSB0aGUgY29kZSBtZW50aW9ucyBpdCwgSSBzaG91bGQgYWxzbyBhZGQgYGNvcHlfZm9saW9fcGFnZXNgLCBhbmQgYHZtYV9wZXJtaXRzX2Zhc3RfYWNjZXNzYC4KCk5vdywgcmVnYXJkaW5nIGNvbmZpZ3VyYXRpb25zLCBJIG5lZWQgdG8gY2hlY2sgd2hpY2ggb25lcyBhcmUgcmVsZXZhbnQuIGBDT05GSUdfUEVSX1ZNQV9MT0NLYCBhbmQgYENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFYCBhcmUgdGhlIGd1YXJkcyBmb3IgdGhlIGZhc3QgcGF0aC4gVGhleSBhcHBlYXIgdG8gYmUgZW5hYmxlZCBieSBkZWZhdWx0IG9uIHg4NiwgYnV0IEkmIzM5O2xsIGluY2x1ZGUgdGhlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBqdXN0IHRvIGJlIHNhZmUuCgpOZXh0LCBJIG5lZWQgdG8gY29uZmlybSByZWFjaGFiaWxpdHkuIEkgc2VlIHRoYXQgdGhlIGBwcm9jZXNzX3ZtX3JlYWR2YCBzeXNjYWxsIHVzZXMgYGFjY2Vzc19wcm9jZXNzX3ZtYCwgd2hpY2ggY2FsbHMgYF9fYWNjZXNzX3JlbW90ZV92bWAsIGFuZCBgcHRyYWNlYCB1c2VzIGl0IGFzIHdlbGwuIFRoYXQgY29uZmlybXMgaXQmIzM5O3MgYSBmdW5jdGlvbmFsIHBhdGggd2UgY2FuIGhpdC4KClNvLCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5IEkmIzM5O3ZlIGdvdDoKCiogICAqKldvcnRoRnV6emluZzoqKiBUcnVlCiogICAqKkZvY3VzU3ltYm9sczoqKiBgYWNjZXNzX3JlbW90ZV92bV9mYXN0YCwgYF9fYWNjZXNzX3JlbW90ZV92bWAsIGBmb2xpb193YWxrX3N0YXJ0YCwgYGNvcHlfZm9saW9fcGFnZXNgLCBgdm1hX3Blcm1pdHNfZmFzdF9hY2Nlc3NgCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYFBFUl9WTUFfTE9DS2AsIGBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFYAoqICAgKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIGludHJvZHVjZXMgYSBsb2NrbGVzcyBmYXN0IHBhdGggZm9yIHJlbW90ZSBtZW1vcnkgYWNjZXNzIChgX19hY2Nlc3NfcmVtb3RlX3ZtYCkuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBgcHRyYWNlYCBhbmQgYHByb2Nlc3Nfdm1fcmVhZHZgIHN5c2NhbGxzLiBUaGUgZmFzdCBwYXRoIHJlbGllcyBvbiBwZXItVk1BIGxvY2tzIGFuZCBSQ1UtZnJlZWQgcGFnZSB0YWJsZXMuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhvc2UgY29uZmlncyBhZ2Fpbi4gQm90aCBzZWVtIHRvIGJlIHN0YW5kYXJkIGRlZmF1bHRzLCBzbyBJJiMzOTtsbCBrZWVwIHRoZW0gaW4gdGhlIGxpc3QuCgpPa2F5LCBsZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMuIExldCBtZSBjaGVjay4uLnllcywgdGhlcmUmIzM5O3MgYHZtYV9wZXJtaXRzX2Zhc3RfYWNjZXNzYCwgYGNvcHlfZm9saW9fcGFnZXNgIGFuZCBgZndfZW50cnlfc2l6ZWAuIFRoZXkgYWxsIGxvb2sgcmVsZXZhbnQsIHNvIEkmIzM5O2xsIGJlIHN1cmUgdG8gaW5jbHVkZSB0aG9zZS4KCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50IHdpdGggdGhpcy4gSSYjMzk7bGwgY2FsbCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDI6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BFUl9WTUFfTE9DSyYjMzQ7LAogICAgJiMzNDtNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWNjZXNzX3JlbW90ZV92bV9mYXN0JiMzNDssCiAgICAmIzM0O19fYWNjZXNzX3JlbW90ZV92bSYjMzQ7LAogICAgJiMzNDtmb2xpb193YWxrX3N0YXJ0JiMzNDssCiAgICAmIzM0O2NvcHlfZm9saW9fcGFnZXMmIzM0OywKICAgICYjMzQ7dm1hX3Blcm1pdHNfZmFzdF9hY2Nlc3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxvY2tsZXNzIGZhc3QgcGF0aCBmb3IgcmVtb3RlIG1lbW9yeSBhY2Nlc3MgKGBfX2FjY2Vzc19yZW1vdGVfdm1gKSwgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBzeXNjYWxscyBsaWtlIGBwcm9jZXNzX3ZtX3JlYWR2YCBhbmQgYHB0cmFjZWAuIFRoZSBmYXN0IHBhdGggcmVsaWVzIG9uIHBlci1WTUEgbG9ja3MgYW5kIFJDVS1mcmVlZCBwYWdlIHRhYmxlcywgbWFraW5nIGl0IGhpZ2hseSBmdW5jdGlvbmFsIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQRVJfVk1BX0xPQ0smIzM0OywKICAgICYjMzQ7TU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FjY2Vzc19yZW1vdGVfdm1fZmFzdCYjMzQ7LAogICAgJiMzNDtfX2FjY2Vzc19yZW1vdGVfdm0mIzM0OywKICAgICYjMzQ7Zm9saW9fd2Fsa19zdGFydCYjMzQ7LAogICAgJiMzNDtjb3B5X2ZvbGlvX3BhZ2VzJiMzNDssCiAgICAmIzM0O3ZtYV9wZXJtaXRzX2Zhc3RfYWNjZXNzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBsb2NrbGVzcyBmYXN0IHBhdGggZm9yIHJlbW90ZSBtZW1vcnkgYWNjZXNzIChgX19hY2Nlc3NfcmVtb3RlX3ZtYCksIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgc3lzY2FsbHMgbGlrZSBgcHJvY2Vzc192bV9yZWFkdmAgYW5kIGBwdHJhY2VgLiBUaGUgZmFzdCBwYXRoIHJlbGllcyBvbiBwZXItVk1BIGxvY2tzIGFuZCBSQ1UtZnJlZWQgcGFnZSB0YWJsZXMsIG1ha2luZyBpdCBoaWdobHkgZnVuY3Rpb25hbCBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDAyOjEwOjE1LjE3NjU3NjE4MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5NjA3MzAxNDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBFUl9WTUFfTE9DS1wiLFxuICAgIFwiTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFjY2Vzc19yZW1vdGVfdm1fZmFzdFwiLFxuICAgIFwiX19hY2Nlc3NfcmVtb3RlX3ZtXCIsXG4gICAgXCJmb2xpb193YWxrX3N0YXJ0XCIsXG4gICAgXCJjb3B5X2ZvbGlvX3BhZ2VzXCIsXG4gICAgXCJ2bWFfcGVybWl0c19mYXN0X2FjY2Vzc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBsb2NrbGVzcyBmYXN0IHBhdGggZm9yIHJlbW90ZSBtZW1vcnkgYWNjZXNzIChgX19hY2Nlc3NfcmVtb3RlX3ZtYCksIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgc3lzY2FsbHMgbGlrZSBgcHJvY2Vzc192bV9yZWFkdmAgYW5kIGBwdHJhY2VgLiBUaGUgZmFzdCBwYXRoIHJlbGllcyBvbiBwZXItVk1BIGxvY2tzIGFuZCBSQ1UtZnJlZWQgcGFnZSB0YWJsZXMsIG1ha2luZyBpdCBoaWdobHkgZnVuY3Rpb25hbCBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDI6MTA6MTUuMTc2NTg4NDMyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTkzMzQ2NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5NjAxNzQ0MjYyM2VhNGU2ZWQ1MGQ5YjYwMDNiZmJlMGY0Yzk0Mzg5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVuIDI1IDAyOjEwOjEzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oXFxuaW5kZXggZWY1YjUwN2RlMzRlMmUuLmNlZTcxMGY2NDY1OGFhIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oXFxuQEAgLTEwMCwxOCArMTAwLDE4IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtbV9sYW1fY3IzX21hc2soc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBkdXBfbGFtKHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4ge1xcbiBcXHRtbS1cXHUwMDNlY29udGV4dC5sYW1fY3IzX21hc2sgPSBvbGRtbS1cXHUwMDNlY29udGV4dC5sYW1fY3IzX21hc2s7XFxuLVxcdG1tLVxcdTAwM2Vjb250ZXh0LnVudGFnX21hc2sgPSBvbGRtbS1cXHUwMDNlY29udGV4dC51bnRhZ19tYXNrO1xcbitcXHRXUklURV9PTkNFKG1tLVxcdTAwM2Vjb250ZXh0LnVudGFnX21hc2ssIFJFQURfT05DRShvbGRtbS1cXHUwMDNlY29udGV4dC51bnRhZ19tYXNrKSk7XFxuIH1cXG4gXFxuICNkZWZpbmUgbW1fdW50YWdfbWFzayBtbV91bnRhZ19tYXNrXFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtbV91bnRhZ19tYXNrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiB7XFxuLVxcdHJldHVybiBtbS1cXHUwMDNlY29udGV4dC51bnRhZ19tYXNrO1xcbitcXHRyZXR1cm4gUkVBRF9PTkNFKG1tLVxcdTAwM2Vjb250ZXh0LnVudGFnX21hc2spO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgbW1fcmVzZXRfdW50YWdfbWFzayhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4ge1xcbi1cXHRtbS1cXHUwMDNlY29udGV4dC51bnRhZ19tYXNrID0gLTFVTDtcXG4rXFx0V1JJVEVfT05DRShtbS1cXHUwMDNlY29udGV4dC51bnRhZ19tYXNrLCAtMVVMKTtcXG4gfVxcbiBcXG4gI2RlZmluZSBhcmNoX3BndGFibGVfZG1hX2NvbXBhdCBhcmNoX3BndGFibGVfZG1hX2NvbXBhdFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzXzY0LmhcXG5pbmRleCAyMGRlMzRjYzlhYTZlNy4uOTMzYjBiOGI0ZDYwNDcgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oXFxuQEAgLTM5LDExICszOSwyMyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX191bnRhZ2dlZF9hZGRyKHVuc2lnbmVkIGxvbmcgYWRkcilcXG4gXFx0KF9fZm9yY2UgX190eXBlb2ZfXyhhZGRyKSlfX3VudGFnZ2VkX2FkZHIoX19hZGRyKTtcXHRcXHRcXFxcXFxuIH0pXFxuIFxcbisvKiBTdHJpcCB0aGUgdGFnIGJpdHMgZnJvbSBhIHJlbW90ZSBtbSdzIGFkZHJlc3M7IHVzYWJsZSB3aXRob3V0IHRoZSBtbWFwIGxvY2suICovXFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3VudGFnZ2VkX2FkZHJfcmVtb3RlX3VubG9ja2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBhZGRyKVxcbit7XFxuK1xcdHJldHVybiBhZGRyIFxcdTAwMjYgUkVBRF9PTkNFKG1tLVxcdTAwM2Vjb250ZXh0LnVudGFnX21hc2spO1xcbit9XFxuK1xcbisjZGVmaW5lIHVudGFnZ2VkX2FkZHJfcmVtb3RlX3VubG9ja2VkKG1tLCBhZGRyKVxcdCh7XFx0XFx0XFx0XFxcXFxcbitcXHR1bnNpZ25lZCBsb25nIF9fYWRkciA9IChfX2ZvcmNlIHVuc2lnbmVkIGxvbmcpKGFkZHIpO1xcdFxcdFxcXFxcXG4rXFx0KF9fZm9yY2UgX190eXBlb2ZfXyhhZGRyKSlfX3VudGFnZ2VkX2FkZHJfcmVtb3RlX3VubG9ja2VkKG1tLCBfX2FkZHIpOyBcXFxcXFxuK30pXFxuK1xcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX191bnRhZ2dlZF9hZGRyX3JlbW90ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBhZGRyKVxcbiB7XFxuIFxcdG1tYXBfYXNzZXJ0X2xvY2tlZChtbSk7XFxuLVxcdHJldHVybiBhZGRyIFxcdTAwMjYgKG1tKS1cXHUwMDNlY29udGV4dC51bnRhZ19tYXNrO1xcbitcXHRyZXR1cm4gX191bnRhZ2dlZF9hZGRyX3JlbW90ZV91bmxvY2tlZChtbSwgYWRkcik7XFxuIH1cXG4gXFxuICNkZWZpbmUgdW50YWdnZWRfYWRkcl9yZW1vdGUobW0sIGFkZHIpXFx0KHtcXHRcXHRcXHRcXHRcXFxcXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jXFxuaW5kZXggZDQ0YWZiZTAwNWJiNTEuLjU1MDk2MTM2ZGU1MzEzIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmNcXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jXFxuQEAgLTgxNCw3ICs4MTQsNyBAQCBzdGF0aWMgdm9pZCBlbmFibGVfbGFtX2Z1bmModm9pZCAqX19tbSlcXG4gc3RhdGljIHZvaWQgbW1fZW5hYmxlX2xhbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4ge1xcbiBcXHRtbS1cXHUwMDNlY29udGV4dC5sYW1fY3IzX21hc2sgPSBYODZfQ1IzX0xBTV9VNTc7XFxuLVxcdG1tLVxcdTAwM2Vjb250ZXh0LnVudGFnX21hc2sgPSAgfkdFTk1BU0soNjIsIDU3KTtcXG4rXFx0V1JJVEVfT05DRShtbS1cXHUwMDNlY29udGV4dC51bnRhZ19tYXNrLCB+R0VOTUFTSyg2MiwgNTcpKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIEV2ZW4gdGhvdWdoIHRoZSBwcm9jZXNzIG11c3Qgc3RpbGwgYmUgc2luZ2xlLXRocmVhZGVkIGF0IHRoaXNcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdld2Fsay5oIGIvaW5jbHVkZS9saW51eC9wYWdld2Fsay5oXFxuaW5kZXggYjQxZDcyNjVjMDFiYzIuLmQwMzg3NDcwZDczMjJiIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZXdhbGsuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZXdhbGsuaFxcbkBAIC0xNTAsNiArMTUwLDEzIEBAIHR5cGVkZWYgaW50IF9fYml0d2lzZSBmb2xpb193YWxrX2ZsYWdzX3Q7XFxuIFxcbiAvKiBXYWxrIHNoYXJlZCB6ZXJvcGFnZXMgKHNtYWxsICsgaHVnZSkgYXMgd2VsbC4gKi9cXG4gI2RlZmluZSBGV19aRVJPUEFHRVxcdFxcdFxcdCgoX19mb3JjZSBmb2xpb193YWxrX2ZsYWdzX3QpQklUKDApKVxcbisvKlxcbisgKiBUaGUgY2FsbGVyIGhvbGRzIHRoZSBwZXItVk1BIGxvY2sgaW5zdGVhZCBvZiB0aGUgbW1hcCBsb2NrLCB3aXRoIGludGVycnVwdHNcXG4rICogZGlzYWJsZWQgYWNyb3NzIHRoZSB3YWxrICh1bnRpbCBmb2xpb193YWxrX2VuZCgpKSB0byBzZXJpYWxpemUgYWdhaW5zdCBwYWdlXFxuKyAqIHRhYmxlIGZyZWVpbmcsIHRoZSBzYW1lIHdheSBndXBfZmFzdCBkb2VzLiBPbmx5IHZhbGlkIHdpdGggUkNVLWZyZWVkIHBhZ2VcXG4rICogdGFibGVzIChDT05GSUdfTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSkgYW5kIG5vdCBmb3IgaHVnZXRsYi5cXG4rICovXFxuKyNkZWZpbmUgRldfVk1BX0xPQ0tFRFxcdFxcdFxcdCgoX19mb3JjZSBmb2xpb193YWxrX2ZsYWdzX3QpQklUKDEpKVxcbiBcXG4gZW51bSBmb2xpb193YWxrX2xldmVsIHtcXG4gXFx0RldfTEVWRUxfUFRFLFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaCBiL2luY2x1ZGUvbGludXgvdWFjY2Vzcy5oXFxuaW5kZXggOGEyNjQ2NjJiMjQyYzguLmM4YzgzMzcyYzlkODc4IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvdWFjY2Vzcy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC91YWNjZXNzLmhcXG5AQCAtMzQsNiArMzQsMTcgQEBcXG4gfSlcXG4gI2VuZGlmXFxuIFxcbisvKlxcbisgKiBMaWtlIHVudGFnZ2VkX2FkZHJfcmVtb3RlKCksIGJ1dCBmb3IgY2FsbGVycyB0aGF0IHN0YWJpbGl6ZSBAbW0gYnkgb3RoZXJcXG4rICogbWVhbnMgKGUuZy4gYSBwZXItVk1BIGxvY2spIGFuZCBtdXN0IG5vdCBhc3NlcnQgdGhlIG1tYXAgbG9jay5cXG4rICovXFxuKyNpZm5kZWYgdW50YWdnZWRfYWRkcl9yZW1vdGVfdW5sb2NrZWRcXG4rI2RlZmluZSB1bnRhZ2dlZF9hZGRyX3JlbW90ZV91bmxvY2tlZChtbSwgYWRkcilcXHQoe1xcdFxcXFxcXG4rXFx0KHZvaWQpKG1tKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHVudGFnZ2VkX2FkZHIoYWRkcik7XFx0XFx0XFx0XFx0XFxcXFxcbit9KVxcbisjZW5kaWZcXG4rXFxuICNpZmRlZiBtYXNrZWRfdXNlcl9hY2Nlc3NfYmVnaW5cXG4gICNkZWZpbmUgY2FuX2RvX21hc2tlZF91c2VyX2FjY2VzcygpIDFcXG4gIyBpZm5kZWYgbWFza2VkX3VzZXJfd3JpdGVfYWNjZXNzX2JlZ2luXFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcXG5pbmRleCA4NmE5NzMxMTliZDQ2Yy4uZDJiMmYwMDE0YTBjNjYgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtb3J5LmNcXG4rKysgYi9tbS9tZW1vcnkuY1xcbkBAIC00Miw2ICs0Miw4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWxfc3RhdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW0uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tX2lubGluZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2VjcmV0bWVtLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wYWdld2Fsay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvbW0uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL251bWFfYmFsYW5jaW5nLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC90YXNrLmhcXHUwMDNlXFxuQEAgLTcwNjIsNiArNzA2NCwxODAgQEAgaW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gRVhQT1JUX1NZTUJPTF9HUEwoZ2VuZXJpY19hY2Nlc3NfcGh5cyk7XFxuICNlbmRpZlxcbiBcXG4rLypcXG4rICogVGhlIGZhc3QgcGF0aCB1c2VzIGZvbGlvX3dhbGtfc3RhcnQoRldfVk1BX0xPQ0tFRCksIHdoaWNoIG5lZWRzIHRoZSBwZXItVk1BXFxuKyAqIGxvY2sgYW5kIFJDVS1mcmVlZCBwYWdlIHRhYmxlcyB0byB3YWxrIHBhZ2UgdGFibGVzIHdpdGhvdXQgdGhlIG1tYXAgbG9jay5cXG4rICovXFxuKyNpZiBkZWZpbmVkKENPTkZJR19QRVJfVk1BX0xPQ0spIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUpXFxuKy8qXFxuKyAqIFJlYWQtc2lkZSBWTUEgY2hlY2tzIGZvciB0aGUgbG9ja2xlc3MgZmFzdCBwYXRoLCBtaXJyb3JpbmcgdGhlIHJlYWQgc2lkZSBvZlxcbisgKiBjaGVja192bWFfZmxhZ3MoKTogcmVqZWN0IHdoYXQgRldfVk1BX0xPQ0tFRCBjYW5ub3QgaGFuZGxlIChodWdldGxiKSwgd2hhdFxcbisgKiBuZWVkcyB0aGUgLVxcdTAwM2VhY2Nlc3MoKSBoYW5kbGVyIChWTV9JTy9WTV9QRk5NQVApLCBvciB3aGF0IGhhcyBubyBzdHJ1Y3QgcGFnZSB0b1xcbisgKiBjb3B5IChzZWNyZXRtZW0pOyBlbmZvcmNlIHRoZSBGT0xMX0FOT04gcmVzdHJpY3Rpb24gdGhhdFxcbisgKiAvcHJvYy9QSUQve2NtZGxpbmUsZW52aXJvbn0gcmVseSBvbiAoQ1ZFLTIwMTgtMTEyMCk7IGFuZCByZXF1aXJlIHJlYWQgYWNjZXNzXFxuKyAqIChob25vcmluZyBGT0xMX0ZPUkNFKS4gIEFueXRoaW5nIG5vdCBwb3NpdGl2ZWx5IGFsbG93ZWQgZmFsbHMgYmFjayB0byB0aGUgc2xvd1xcbisgKiBwYXRoLCB3aGljaCByZS12YWxpZGF0ZXMgZXZlcnl0aGluZy5cXG4rICovXFxuK3N0YXRpYyBib29sIHZtYV9wZXJtaXRzX2Zhc3RfYWNjZXNzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbitcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IGd1cF9mbGFncylcXG4re1xcbitcXHRpZiAodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IChWTV9JTyB8IFZNX1BGTk1BUCkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0aWYgKGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpIHx8IHZtYV9pc19zZWNyZXRtZW0odm1hKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRpZiAoKGd1cF9mbGFncyBcXHUwMDI2IEZPTExfQU5PTikgXFx1MDAyNlxcdTAwMjYgIXZtYV9pc19hbm9ueW1vdXModm1hKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRpZiAoISh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fUkVBRCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICghKGd1cF9mbGFncyBcXHUwMDI2IEZPTExfRk9SQ0UpIHx8ICEodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX01BWVJFQUQpKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rLyogU2l6ZSBvZiB0aGUgc2luZ2xlIG1hcHBpbmcgZW50cnkgZm9saW9fd2Fsa19zdGFydCgpIGxhbmRlZCBvbi4gKi9cXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgZndfZW50cnlfc2l6ZShlbnVtIGZvbGlvX3dhbGtfbGV2ZWwgbGV2ZWwpXFxuK3tcXG4rXFx0c3dpdGNoIChsZXZlbCkge1xcbitcXHRjYXNlIEZXX0xFVkVMX1BVRDpcXG4rXFx0XFx0cmV0dXJuIFBVRF9TSVpFO1xcbitcXHRjYXNlIEZXX0xFVkVMX1BNRDpcXG4rXFx0XFx0cmV0dXJuIFBNRF9TSVpFO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gUEFHRV9TSVpFO1xcbitcXHR9XFxuK31cXG4rXFxuKy8qXFxuKyAqIENvcHkgQGxlbiBieXRlcyBvZiB0aGUgcGlubmVkIEBmb2xpbyBvdXQgdG8gQGJ1Ziwgc3RhcnRpbmcgYXQgYnl0ZSBvZmZzZXRcXG4rICogQGZvbGlvX29mZiB3aXRoaW4gdGhlIGZvbGlvICh0aGUgcG9zaXRpb24gb2YgQGFkZHIpLiAgTWFwcyBhbmQgY29waWVzIG9uZVxcbisgKiBwYWdlIGF0IGEgdGltZSAtLSBrbWFwX2xvY2FsX2ZvbGlvKCkgZm9yIEhJR0hNRU0sIGNvcHlfZnJvbV91c2VyX3BhZ2UoKSBmb3JcXG4rICogdGhlIHBlci1wYWdlIGZsdXNoIG9uIGFsaWFzaW5nIGNhY2hlcyAtLSB3aXRob3V0IHJlLXdhbGtpbmcgcGFnZSB0YWJsZXMuXFxuKyAqIEVhY2ggcGFnZSBib3Jyb3dzIHRoZSBjYWxsZXIncyBzaW5nbGUgZm9saW8gcmVmZXJlbmNlLCBzbyB0aGUgbWFwcGluZyBpc1xcbisgKiBkcm9wcGVkIHdpdGgga3VubWFwX2xvY2FsKCkgcmF0aGVyIHRoYW4gZm9saW9fcmVsZWFzZV9rbWFwKCkuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBjb3B5X2ZvbGlvX3BhZ2VzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbitcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgZm9saW9fb2ZmLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuK1xcdFxcdFxcdCAgICAgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIGxlbilcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIGRvbmUgPSAwO1xcbitcXG4rXFx0d2hpbGUgKGRvbmUgXFx1MDAzYyBsZW4pIHtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBwb3MgPSBmb2xpb19vZmYgKyBkb25lO1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIHBhZ2VfaWR4ID0gcG9zIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuK1xcdFxcdHVuc2lnbmVkIGludCBwYWdlX29mZiA9IHBvcyBcXHUwMDI2IH5QQUdFX01BU0s7XFxuK1xcdFxcdHVuc2lnbmVkIGludCBjaHVuayA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIGxlbiAtIGRvbmUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFBBR0VfU0laRSAtIHBhZ2Vfb2ZmKTtcXG4rXFx0XFx0dm9pZCAqa2FkZHIgPSBrbWFwX2xvY2FsX2ZvbGlvKGZvbGlvLCBwYWdlX2lkeCBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKTtcXG4rXFxuK1xcdFxcdGNvcHlfZnJvbV91c2VyX3BhZ2Uodm1hLCBmb2xpb19wYWdlKGZvbGlvLCBwYWdlX2lkeCksXFxuK1xcdFxcdFxcdFxcdCAgICBhZGRyICsgZG9uZSwgYnVmICsgZG9uZSwga2FkZHIgKyBwYWdlX29mZixcXG4rXFx0XFx0XFx0XFx0ICAgIGNodW5rKTtcXG4rXFx0XFx0a3VubWFwX2xvY2FsKGthZGRyKTtcXG4rXFx0XFx0ZG9uZSArPSBjaHVuaztcXG4rXFx0fVxcbit9XFxuK1xcbisvKlxcbisgKiBPcHBvcnR1bmlzdGljIGxvY2tsZXNzIGZhc3QgcGF0aCBmb3IgX19hY2Nlc3NfcmVtb3RlX3ZtKCkgcmVhZHMuXFxuKyAqXFxuKyAqIE1lbW9yeSBhbHJlYWR5IHJlc2lkZW50IGluIEBtbSBjYW4gYmUgcmVhZCB3aXRob3V0IHRha2luZyB0aGUgZnJlcXVlbnRseVxcbisgKiBjb250ZW5kZWQgbW1hcF9sb2NrOiBhIHBlci1WTUEgbG9jayBzdGFiaWxpemVzIHRoZSBWTUEsIGFuZCBmb2xpb193YWxrX3N0YXJ0KClcXG4rICogd2l0aCBGV19WTUFfTE9DS0VEIGdyYWJzIGEgc2hvcnQtbGl2ZWQgcmVmZXJlbmNlIHRvIGEgcHJlc2VudCBwYWdlIGZyb20gYSBwYWdlXFxuKyAqIHRhYmxlIHdhbGsgcnVuIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCwgd2hpY2ggc2VyaWFsaXplcyBhZ2FpbnN0IGNvbmN1cnJlbnRcXG4rICogcGFnZSB0YWJsZSBmcmVlaW5nIHRoZSBzYW1lIHdheSBndXBfZmFzdCBkb2VzIChyZWx5aW5nIG9uXFxuKyAqIE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUpLlxcbisgKlxcbisgKiBPbmx5IGEgcmVxdWVzdCB0aGF0IGxpZXMgZW50aXJlbHkgd2l0aGluIGEgc2luZ2xlIFZNQSBpcyBoYW5kbGVkIGhlcmUsXFxuKyAqIHdoaWNoIHNob3VsZCBub3QgYmUgYW4gaXNzdWUgaW4gcHJhY3RpY2Ugc2luY2UgZXZlcnkgY2FsbGVyIGhhcyBhXFxuKyAqIGJ1ZmZlciBvZiBQQUdFX1NJWkUgb3Igc21hbGxlci4gTG9vcCBpdGVyYXRpb24gaW5zaWRlIHRoaXMgZnVuY3Rpb25cXG4rICogc2hvdWxkIGJlIHJhcmUsIHRvby5cXG4rICpcXG4rICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkIHZpYSB0aGUgZmFzdCBwYXRoLlxcbisgKi9cXG4rc3RhdGljIGludCBhY2Nlc3NfcmVtb3RlX3ZtX2Zhc3Qoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4rXFx0XFx0XFx0XFx0IHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcXG4re1xcbitcXHR2b2lkICpvbGRfYnVmID0gYnVmO1xcbitcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcXG4rXFxuK1xcdGFkZHIgPSB1bnRhZ2dlZF9hZGRyX3JlbW90ZV91bmxvY2tlZChtbSwgYWRkcik7XFxuK1xcbitcXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHIpO1xcbitcXHRpZiAoIXZtYSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHQvKiBPbmx5IGhhbmRsZSBhIHJlcXVlc3QgY29udGFpbmVkIGVudGlyZWx5IHdpdGhpbiB0aGlzIG9uZSBWTUEuICovXFxuK1xcdGlmIChsZW4gXFx1MDAzZSB2bWEtXFx1MDAzZXZtX2VuZCAtIGFkZHIpXFxuK1xcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4rXFxuK1xcdGlmICghdm1hX3Blcm1pdHNfZmFzdF9hY2Nlc3Modm1hLCBndXBfZmxhZ3MpKVxcbitcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcbitcXHR3aGlsZSAobGVuKSB7XFxuK1xcdFxcdHN0cnVjdCBmb2xpb193YWxrIGZ3O1xcbitcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbitcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBlbnRyeV9zaXplLCBmb2xpb19vZmYsIHNwYW4sIGlycV9mbGFncztcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSBsb2NrbGVzcyBwYWdlIHRhYmxlIHdhbGsgbXVzdCBydW4gd2l0aCBpbnRlcnJ1cHRzXFxuK1xcdFxcdCAqIGRpc2FibGVkOiBwYWdlIHRhYmxlIGZyZWVpbmcgKG11bm1hcCBvciBUSFAgY29sbGFwc2UsIHdoaWNoXFxuK1xcdFxcdCAqIElQSSB2aWEgdGxiX3JlbW92ZV90YWJsZV9zeW5jX29uZSgpIGFuZCB3YWl0KSB0aGVuIGNhbm5vdCBmcmVlXFxuK1xcdFxcdCAqIGEgdGFibGUgbWlkLXdhbGsgLS0gdGhlIHNhbWUgY29udHJhY3QgZ3VwX2Zhc3QgcmVsaWVzIG9uLiAgSVJRc1xcbitcXHRcXHQgKiBhcmUgcmVzdG9yZWQgb25jZSB0aGUgZm9saW8gaXMgcGlubmVkOyB0aGUgY29weSBiZWxvdyBob2xkcyBvbmx5XFxuK1xcdFxcdCAqIHRoZSBmb2xpbyByZWZlcmVuY2UuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRsb2NhbF9pcnFfc2F2ZShpcnFfZmxhZ3MpO1xcbitcXHRcXHRmb2xpbyA9IGZvbGlvX3dhbGtfc3RhcnQoXFx1MDAyNmZ3LCB2bWEsIGFkZHIsIEZXX1ZNQV9MT0NLRUQpO1xcbitcXHRcXHRpZiAoIWZvbGlvKSB7XFxuK1xcdFxcdFxcdGxvY2FsX2lycV9yZXN0b3JlKGlycV9mbGFncyk7XFxuK1xcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXHQvKiBub3QgcHJlc2VudDogbGV0IHRoZSBzbG93IHBhdGggZmF1bHQgaXQgaW4gKi9cXG4rXFx0XFx0fVxcbitcXHRcXHRwYWdlID0gZncucGFnZTtcXG4rXFx0XFx0aWYgKCFwYWdlKSB7XFxuK1xcdFxcdFxcdC8qIE5vIHN0cnVjdCBwYWdlIHRvIGNvcHkgKGUuZy4gYSBzcGVjaWFsIFBURSkuICovXFxuK1xcdFxcdFxcdGZvbGlvX3dhbGtfZW5kKFxcdTAwMjZmdywgdm1hKTtcXG4rXFx0XFx0XFx0bG9jYWxfaXJxX3Jlc3RvcmUoaXJxX2ZsYWdzKTtcXG4rXFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXHRcXHR9XFxuK1xcdFxcdGVudHJ5X3NpemUgPSBmd19lbnRyeV9zaXplKGZ3LmxldmVsKTtcXG4rXFx0XFx0Zm9saW9fZ2V0KGZvbGlvKTtcXG4rXFx0XFx0Zm9saW9fd2Fsa19lbmQoXFx1MDAyNmZ3LCB2bWEpO1xcbitcXHRcXHRsb2NhbF9pcnFfcmVzdG9yZShpcnFfZmxhZ3MpO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogZm9saW9fd2Fsa19zdGFydCgpIHZhbGlkYXRlZCBvbmUgcHJlc2VudCBtYXBwaW5nIGVudHJ5XFxuK1xcdFxcdCAqIChQQUdFL1BNRC9QVURfU0laRSkuICBDb3B5IHRvIHRoZSBlbmQgb2YgdGhhdCBlbnRyeSwgYm91bmRlZCBieVxcbitcXHRcXHQgKiB0aGUgZm9saW8gYW5kIHRoZSByZW1haW5pbmcgbGVuZ3RoIChhbHJlYWR5IHdpdGhpbiB0aGUgVk1BKSwgc29cXG4rXFx0XFx0ICogYSBodWdlIG1hcHBpbmcgaXMgaGFuZGxlZCBpbiBhIHNpbmdsZSB3YWxrLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0Zm9saW9fb2ZmID0gKGZvbGlvX3BhZ2VfaWR4KGZvbGlvLCBwYWdlKSBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKSArXFxuK1xcdFxcdFxcdCAgICBvZmZzZXRfaW5fcGFnZShhZGRyKTtcXG4rXFx0XFx0c3BhbiA9IG1pbjMoKHVuc2lnbmVkIGxvbmcpbGVuLFxcbitcXHRcXHRcXHQgICAgZW50cnlfc2l6ZSAtIChhZGRyIFxcdTAwMjYgKGVudHJ5X3NpemUgLSAxKSksXFxuK1xcdFxcdFxcdCAgICAoZm9saW9fbnJfcGFnZXMoZm9saW8pIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpIC0gZm9saW9fb2ZmKTtcXG4rXFxuK1xcdFxcdGNvcHlfZm9saW9fcGFnZXModm1hLCBmb2xpbywgZm9saW9fb2ZmLCBhZGRyLCBidWYsIHNwYW4pO1xcbitcXG4rXFx0XFx0LyogTWF0Y2ggdGhlIEZPTExfVE9VQ0ggYmVoYXZpb3VyIG9mIHRoZSBzbG93IChHVVApIHBhdGguICovXFxuK1xcdFxcdGZvbGlvX21hcmtfYWNjZXNzZWQoZm9saW8pO1xcbitcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbitcXHRcXHRsZW4gLT0gc3BhbjtcXG4rXFx0XFx0YnVmICs9IHNwYW47XFxuK1xcdFxcdGFkZHIgKz0gc3BhbjtcXG4rXFx0fVxcbitcXG4rb3V0X3VubG9jazpcXG4rXFx0dm1hX2VuZF9yZWFkKHZtYSk7XFxuK1xcdHJldHVybiBidWYgLSBvbGRfYnVmO1xcbit9XFxuKyNlbHNlXFxuK3N0YXRpYyBpbnQgYWNjZXNzX3JlbW90ZV92bV9mYXN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuK1xcdFxcdFxcdFxcdCB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rI2VuZGlmIC8qIENPTkZJR19QRVJfVk1BX0xPQ0sgXFx1MDAyNlxcdTAwMjYgQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgKi9cXG4rXFxuIC8qXFxuICAqIEFjY2VzcyBhbm90aGVyIHByb2Nlc3MnIGFkZHJlc3Mgc3BhY2UgYXMgZ2l2ZW4gaW4gbW0uXFxuICAqL1xcbkBAIC03MDcxLDE1ICs3MjQ3LDMwIEBAIHN0YXRpYyBpbnQgX19hY2Nlc3NfcmVtb3RlX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdHZvaWQgKm9sZF9idWYgPSBidWY7XFxuIFxcdGludCB3cml0ZSA9IGd1cF9mbGFncyBcXHUwMDI2IEZPTExfV1JJVEU7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBUcnkgdGhlIGxvY2tsZXNzIGZhc3QgcGF0aCBmb3IgcmVhZHMgZmlyc3Q7IGl0IHRyYW5zZmVycyB3aGF0IGl0IGNhblxcbitcXHQgKiBmcm9tIHJlc2lkZW50IG1lbW9yeSB3aXRob3V0IHRha2luZyBtbWFwX2xvY2ssIGFuZCBsZWF2ZXMgdGhlXFxuK1xcdCAqIHJlbWFpbmRlciAoaWYgYW55KSB0byB0aGUgc2xvdyBwYXRoIGJlbG93LlxcbitcXHQgKi9cXG4rXFx0aWYgKCF3cml0ZSkge1xcbitcXHRcXHRpbnQgZG9uZSA9IGFjY2Vzc19yZW1vdGVfdm1fZmFzdChtbSwgYWRkciwgYnVmLCBsZW4sIGd1cF9mbGFncyk7XFxuK1xcbitcXHRcXHRhZGRyICs9IGRvbmU7XFxuK1xcdFxcdGJ1ZiArPSBkb25lO1xcbitcXHRcXHRsZW4gLT0gZG9uZTtcXG4rXFx0XFx0aWYgKCFsZW4pXFxuK1xcdFxcdFxcdHJldHVybiBidWYgLSBvbGRfYnVmO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAobW1hcF9yZWFkX2xvY2tfa2lsbGFibGUobW0pKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0cmV0dXJuIGJ1ZiAtIG9sZF9idWY7XFxuIFxcbiBcXHQvKiBVbnRhZyB0aGUgYWRkcmVzcyBiZWZvcmUgbG9va2luZyB1cCB0aGUgVk1BICovXFxuIFxcdGFkZHIgPSB1bnRhZ2dlZF9hZGRyX3JlbW90ZShtbSwgYWRkcik7XFxuIFxcbiBcXHQvKiBBdm9pZCB0cmlnZ2VyaW5nIHRoZSB0ZW1wb3Jhcnkgd2FybmluZyBpbiBfX2dldF91c2VyX3BhZ2VzICovXFxuIFxcdGlmICghdm1hX2xvb2t1cChtbSwgYWRkcikgXFx1MDAyNlxcdTAwMjYgIWV4cGFuZF9zdGFjayhtbSwgYWRkcikpXFxuLVxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRyZXR1cm4gYnVmIC0gb2xkX2J1ZjtcXG4gXFxuIFxcdC8qIGlnbm9yZSBlcnJvcnMsIGp1c3QgY2hlY2sgaG93IG11Y2ggd2FzIHN1Y2Nlc3NmdWxseSB0cmFuc2ZlcnJlZCAqL1xcbiBcXHR3aGlsZSAobGVuKSB7XFxuZGlmZiAtLWdpdCBhL21tL3BhZ2V3YWxrLmMgYi9tbS9wYWdld2Fsay5jXFxuaW5kZXggM2FlMjU4NmZmNDViNDQuLmFiMWU4MTk4M2NiOGM3IDEwMDY0NFxcbi0tLSBhL21tL3BhZ2V3YWxrLmNcXG4rKysgYi9tbS9wYWdld2Fsay5jXFxuQEAgLTg5MCw3ICs4OTAsMTAgQEAgaW50IHdhbGtfcGFnZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IGZpcnN0X2luZGV4LFxcbiAgKiBodWdlX3B0ZXBfc2V0XyosIC4uLikuIE5vdGUgdGhhdCB0aGUgcGFnZSB0YWJsZSBlbnRyeSBzdG9yZWQgaW4gQGZ3IG1pZ2h0XFxuICAqIG5vdCBjb3JyZXNwb25kIHRvIHRoZSBmaXJzdCBwaHlzaWNhbCBlbnRyeSBvZiBhIGxvZ2ljYWwgaHVnZXRsYiBlbnRyeS5cXG4gICpcXG4tICogVGhlIG1tYXAgbG9jayBtdXN0IGJlIGhlbGQgaW4gcmVhZCBtb2RlLlxcbisgKiBUaGUgbW1hcCBsb2NrIG11c3QgYmUgaGVsZCBpbiByZWFkIG1vZGUuIEFsdGVybmF0aXZlbHksIGlmIEBGV19WTUFfTE9DS0VEIGlzXFxuKyAqIHBhc3NlZCwgdGhlIFZNQSdzIHBlci1WTUEgbG9jayBtdXN0IGJlIGhlbGQgYW5kIGludGVycnVwdHMgbXVzdCBiZSBkaXNhYmxlZFxcbisgKiBhY3Jvc3MgdGhlIHdhbGsgYW5kIHVudGlsIGZvbGlvX3dhbGtfZW5kKCkgKG9ubHkgc3VwcG9ydGVkIHdpdGggUkNVLWZyZWVkIHBhZ2VcXG4rICogdGFibGVzLCBpLmUuIENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFLCBhbmQgbm90IGZvciBodWdldGxiKS5cXG4gICpcXG4gICogUmV0dXJuOiBmb2xpbyBwb2ludGVyIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBOVUxMLlxcbiAgKi9cXG5AQCAtOTA4LDcgKzkxMSwyOSBAQCBzdHJ1Y3QgZm9saW8gKmZvbGlvX3dhbGtfc3RhcnQoc3RydWN0IGZvbGlvX3dhbGsgKmZ3LFxcbiBcXHRwZ2RfdCAqcGdkcDtcXG4gXFx0cDRkX3QgKnA0ZHA7XFxuIFxcbi1cXHRtbWFwX2Fzc2VydF9sb2NrZWQodm1hLVxcdTAwM2V2bV9tbSk7XFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IEZXX1ZNQV9MT0NLRUQpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogTG9ja2xlc3Mgd2FsayB1bmRlciB0aGUgcGVyLVZNQSBsb2NrIGluc3RlYWQgb2YgdGhlIG1tYXBcXG4rXFx0XFx0ICogbG9jay4gVGhlIFZNQSBsb2NrIGtlZXBzIHRoZSBWTUEgc3RhYmxlLCBidXQgdGhlIHBhZ2UgdGFibGVzXFxuK1xcdFxcdCAqIHdhbGtlZCBiZWxvdyBpdCBjYW4gc3RpbGwgYmUgZnJlZWQgY29uY3VycmVudGx5OiBhIG11bm1hcCgpIG9yXFxuK1xcdFxcdCAqIFRIUCBjb2xsYXBzZSBvZiBhbiBhZGphY2VudCByZWdpb24gaW4gdGhlIHNhbWUgbW0gY2FuIGZyZWUgYVxcbitcXHRcXHQgKiBzaGFyZWQgdXBwZXItbGV2ZWwgdGFibGUsIGFuZCBjb2xsYXBzZV9odWdlX3BhZ2UoKSAtXFx1MDAzZVxcbitcXHRcXHQgKiByZXRyYWN0X3BhZ2VfdGFibGVzKCkgZnJlZXMgcGFnZSB0YWJsZXMgb2YgVk1BcyB3aG9zZSBsb2NrIGl0XFxuK1xcdFxcdCAqIGRvZXMgbm90IGhvbGQuIFBhZ2UgdGFibGUgZnJlZWluZyBzZXJpYWxpemVzIGFnYWluc3QgbG9ja2xlc3NcXG4rXFx0XFx0ICogd2Fsa2VycyB2aWEgdGxiX3JlbW92ZV90YWJsZV9zeW5jX29uZSgpLCB3aGljaCBJUElzIGFuZCB3YWl0c1xcbitcXHRcXHQgKiBmb3IgZXZlcnkgQ1BVIHRvIGVuYWJsZSBpbnRlcnJ1cHRzOyBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsXFxuK1xcdFxcdCAqIHNlY3Rpb24gZG9lcyBub3QgYmxvY2sgdGhhdCBJUEksIHNvIHRoZSBjYWxsZXIgbXVzdCBrZWVwXFxuK1xcdFxcdCAqIGludGVycnVwdHMgZGlzYWJsZWQgYWNyb3NzIHRoZSB3aG9sZSB3YWxrLCBsaWtlIGd1cF9mYXN0LlxcbitcXHRcXHQgKiBIdWdldGxiIChQTUQgc2hhcmluZykgbWFwcyBwYWdlIHRhYmxlcyBub3QgY292ZXJlZCBieSB0aGlzXFxuK1xcdFxcdCAqIFZNQSdzIGxvY2sgYW5kIGlzIG5vdCBzdXBwb3J0ZWQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRWTV9XQVJOX09OX09OQ0UoIUlTX0VOQUJMRUQoQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUpKTtcXG4rXFx0XFx0Vk1fV0FSTl9PTl9PTkNFKGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKTtcXG4rXFx0XFx0bG9ja2RlcF9hc3NlcnRfaXJxc19kaXNhYmxlZCgpO1xcbitcXHRcXHR2bWFfYXNzZXJ0X2xvY2tlZCh2bWEpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRtbWFwX2Fzc2VydF9sb2NrZWQodm1hLVxcdTAwM2V2bV9tbSk7XFxuK1xcdH1cXG4gXFx0dm1hX3BndGFibGVfd2Fsa19iZWdpbih2bWEpO1xcbiBcXG4gXFx0aWYgKFdBUk5fT05fT05DRShhZGRyIFxcdTAwM2Mgdm1hLVxcdTAwM2V2bV9zdGFydCB8fCBhZGRyIFxcdTAwM2U9IHZtYS1cXHUwMDNldm1fZW5kKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDI6MTA6MTYuMDc3MDEwOTIxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODcwNjg1MjU0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQRVJfVk1BX0xPQ0tcIixcbiAgICBcIk1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhY2Nlc3NfcmVtb3RlX3ZtX2Zhc3RcIixcbiAgICBcIl9fYWNjZXNzX3JlbW90ZV92bVwiLFxuICAgIFwiZm9saW9fd2Fsa19zdGFydFwiLFxuICAgIFwiY29weV9mb2xpb19wYWdlc1wiLFxuICAgIFwidm1hX3Blcm1pdHNfZmFzdF9hY2Nlc3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9ja2xlc3MgZmFzdCBwYXRoIGZvciByZW1vdGUgbWVtb3J5IGFjY2VzcyAoYF9fYWNjZXNzX3JlbW90ZV92bWApLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHN5c2NhbGxzIGxpa2UgYHByb2Nlc3Nfdm1fcmVhZHZgIGFuZCBgcHRyYWNlYC4gVGhlIGZhc3QgcGF0aCByZWxpZXMgb24gcGVyLVZNQSBsb2NrcyBhbmQgUkNVLWZyZWVkIHBhZ2UgdGFibGVzLCBtYWtpbmcgaXQgaGlnaGx5IGZ1bmN0aW9uYWwgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTYwMTc0NDI2MjNlYTRlNmVkNTBkOWI2MDAzYmZiZTBmNGM5NDM4OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVuIDI1IDAyOjEwOjEzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmhcbmluZGV4IGVmNWI1MDdkZTM0ZTJlLi5jZWU3MTBmNjQ2NThhYSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmhcbkBAIC0xMDAsMTggKzEwMCwxOCBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbW1fbGFtX2NyM19tYXNrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBkdXBfbGFtKHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiB7XG4gXHRtbS1cdTAwM2Vjb250ZXh0LmxhbV9jcjNfbWFzayA9IG9sZG1tLVx1MDAzZWNvbnRleHQubGFtX2NyM19tYXNrO1xuLVx0bW0tXHUwMDNlY29udGV4dC51bnRhZ19tYXNrID0gb2xkbW0tXHUwMDNlY29udGV4dC51bnRhZ19tYXNrO1xuK1x0V1JJVEVfT05DRShtbS1cdTAwM2Vjb250ZXh0LnVudGFnX21hc2ssIFJFQURfT05DRShvbGRtbS1cdTAwM2Vjb250ZXh0LnVudGFnX21hc2spKTtcbiB9XG4gXG4gI2RlZmluZSBtbV91bnRhZ19tYXNrIG1tX3VudGFnX21hc2tcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbW1fdW50YWdfbWFzayhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiB7XG4tXHRyZXR1cm4gbW0tXHUwMDNlY29udGV4dC51bnRhZ19tYXNrO1xuK1x0cmV0dXJuIFJFQURfT05DRShtbS1cdTAwM2Vjb250ZXh0LnVudGFnX21hc2spO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgbW1fcmVzZXRfdW50YWdfbWFzayhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiB7XG4tXHRtbS1cdTAwM2Vjb250ZXh0LnVudGFnX21hc2sgPSAtMVVMO1xuK1x0V1JJVEVfT05DRShtbS1cdTAwM2Vjb250ZXh0LnVudGFnX21hc2ssIC0xVUwpO1xuIH1cbiBcbiAjZGVmaW5lIGFyY2hfcGd0YWJsZV9kbWFfY29tcGF0IGFyY2hfcGd0YWJsZV9kbWFfY29tcGF0XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oXG5pbmRleCAyMGRlMzRjYzlhYTZlNy4uOTMzYjBiOGI0ZDYwNDcgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzXzY0LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaFxuQEAgLTM5LDExICszOSwyMyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX191bnRhZ2dlZF9hZGRyKHVuc2lnbmVkIGxvbmcgYWRkcilcbiBcdChfX2ZvcmNlIF9fdHlwZW9mX18oYWRkcikpX191bnRhZ2dlZF9hZGRyKF9fYWRkcik7XHRcdFxcXG4gfSlcbiBcbisvKiBTdHJpcCB0aGUgdGFnIGJpdHMgZnJvbSBhIHJlbW90ZSBtbSdzIGFkZHJlc3M7IHVzYWJsZSB3aXRob3V0IHRoZSBtbWFwIGxvY2suICovXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fdW50YWdnZWRfYWRkcl9yZW1vdGVfdW5sb2NrZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4rXHRcdFx0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBhZGRyKVxuK3tcbitcdHJldHVybiBhZGRyIFx1MDAyNiBSRUFEX09OQ0UobW0tXHUwMDNlY29udGV4dC51bnRhZ19tYXNrKTtcbit9XG4rXG4rI2RlZmluZSB1bnRhZ2dlZF9hZGRyX3JlbW90ZV91bmxvY2tlZChtbSwgYWRkcilcdCh7XHRcdFx0XFxcbitcdHVuc2lnbmVkIGxvbmcgX19hZGRyID0gKF9fZm9yY2UgdW5zaWduZWQgbG9uZykoYWRkcik7XHRcdFxcXG4rXHQoX19mb3JjZSBfX3R5cGVvZl9fKGFkZHIpKV9fdW50YWdnZWRfYWRkcl9yZW1vdGVfdW5sb2NrZWQobW0sIF9fYWRkcik7IFxcXG4rfSlcbitcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX191bnRhZ2dlZF9hZGRyX3JlbW90ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGFkZHIpXG4ge1xuIFx0bW1hcF9hc3NlcnRfbG9ja2VkKG1tKTtcbi1cdHJldHVybiBhZGRyIFx1MDAyNiAobW0pLVx1MDAzZWNvbnRleHQudW50YWdfbWFzaztcbitcdHJldHVybiBfX3VudGFnZ2VkX2FkZHJfcmVtb3RlX3VubG9ja2VkKG1tLCBhZGRyKTtcbiB9XG4gXG4gI2RlZmluZSB1bnRhZ2dlZF9hZGRyX3JlbW90ZShtbSwgYWRkcilcdCh7XHRcdFx0XHRcXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jXG5pbmRleCBkNDRhZmJlMDA1YmI1MS4uNTUwOTYxMzZkZTUzMTMgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jXG5AQCAtODE0LDcgKzgxNCw3IEBAIHN0YXRpYyB2b2lkIGVuYWJsZV9sYW1fZnVuYyh2b2lkICpfX21tKVxuIHN0YXRpYyB2b2lkIG1tX2VuYWJsZV9sYW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4ge1xuIFx0bW0tXHUwMDNlY29udGV4dC5sYW1fY3IzX21hc2sgPSBYODZfQ1IzX0xBTV9VNTc7XG4tXHRtbS1cdTAwM2Vjb250ZXh0LnVudGFnX21hc2sgPSAgfkdFTk1BU0soNjIsIDU3KTtcbitcdFdSSVRFX09OQ0UobW0tXHUwMDNlY29udGV4dC51bnRhZ19tYXNrLCB+R0VOTUFTSyg2MiwgNTcpKTtcbiBcbiBcdC8qXG4gXHQgKiBFdmVuIHRob3VnaCB0aGUgcHJvY2VzcyBtdXN0IHN0aWxsIGJlIHNpbmdsZS10aHJlYWRlZCBhdCB0aGlzXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdld2Fsay5oIGIvaW5jbHVkZS9saW51eC9wYWdld2Fsay5oXG5pbmRleCBiNDFkNzI2NWMwMWJjMi4uZDAzODc0NzBkNzMyMmIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZXdhbGsuaFxuQEAgLTE1MCw2ICsxNTAsMTMgQEAgdHlwZWRlZiBpbnQgX19iaXR3aXNlIGZvbGlvX3dhbGtfZmxhZ3NfdDtcbiBcbiAvKiBXYWxrIHNoYXJlZCB6ZXJvcGFnZXMgKHNtYWxsICsgaHVnZSkgYXMgd2VsbC4gKi9cbiAjZGVmaW5lIEZXX1pFUk9QQUdFXHRcdFx0KChfX2ZvcmNlIGZvbGlvX3dhbGtfZmxhZ3NfdClCSVQoMCkpXG4rLypcbisgKiBUaGUgY2FsbGVyIGhvbGRzIHRoZSBwZXItVk1BIGxvY2sgaW5zdGVhZCBvZiB0aGUgbW1hcCBsb2NrLCB3aXRoIGludGVycnVwdHNcbisgKiBkaXNhYmxlZCBhY3Jvc3MgdGhlIHdhbGsgKHVudGlsIGZvbGlvX3dhbGtfZW5kKCkpIHRvIHNlcmlhbGl6ZSBhZ2FpbnN0IHBhZ2VcbisgKiB0YWJsZSBmcmVlaW5nLCB0aGUgc2FtZSB3YXkgZ3VwX2Zhc3QgZG9lcy4gT25seSB2YWxpZCB3aXRoIFJDVS1mcmVlZCBwYWdlXG4rICogdGFibGVzIChDT05GSUdfTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSkgYW5kIG5vdCBmb3IgaHVnZXRsYi5cbisgKi9cbisjZGVmaW5lIEZXX1ZNQV9MT0NLRURcdFx0XHQoKF9fZm9yY2UgZm9saW9fd2Fsa19mbGFnc190KUJJVCgxKSlcbiBcbiBlbnVtIGZvbGlvX3dhbGtfbGV2ZWwge1xuIFx0RldfTEVWRUxfUFRFLFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdWFjY2Vzcy5oIGIvaW5jbHVkZS9saW51eC91YWNjZXNzLmhcbmluZGV4IDhhMjY0NjYyYjI0MmM4Li5jOGM4MzM3MmM5ZDg3OCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvdWFjY2Vzcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaFxuQEAgLTM0LDYgKzM0LDE3IEBAXG4gfSlcbiAjZW5kaWZcbiBcbisvKlxuKyAqIExpa2UgdW50YWdnZWRfYWRkcl9yZW1vdGUoKSwgYnV0IGZvciBjYWxsZXJzIHRoYXQgc3RhYmlsaXplIEBtbSBieSBvdGhlclxuKyAqIG1lYW5zIChlLmcuIGEgcGVyLVZNQSBsb2NrKSBhbmQgbXVzdCBub3QgYXNzZXJ0IHRoZSBtbWFwIGxvY2suXG4rICovXG4rI2lmbmRlZiB1bnRhZ2dlZF9hZGRyX3JlbW90ZV91bmxvY2tlZFxuKyNkZWZpbmUgdW50YWdnZWRfYWRkcl9yZW1vdGVfdW5sb2NrZWQobW0sIGFkZHIpXHQoe1x0XFxcbitcdCh2b2lkKShtbSk7XHRcdFx0XHRcdFxcXG4rXHR1bnRhZ2dlZF9hZGRyKGFkZHIpO1x0XHRcdFx0XFxcbit9KVxuKyNlbmRpZlxuK1xuICNpZmRlZiBtYXNrZWRfdXNlcl9hY2Nlc3NfYmVnaW5cbiAgI2RlZmluZSBjYW5fZG9fbWFza2VkX3VzZXJfYWNjZXNzKCkgMVxuICMgaWZuZGVmIG1hc2tlZF91c2VyX3dyaXRlX2FjY2Vzc19iZWdpblxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IDg2YTk3MzExOWJkNDZjLi5kMmIyZjAwMTRhMGM2NiAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4rKysgYi9tbS9tZW1vcnkuY1xuQEAgLTQyLDYgKzQyLDggQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWxfc3RhdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tX2lubGluZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2VjcmV0bWVtLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdld2Fsay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvbW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL251bWFfYmFsYW5jaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC90YXNrLmhcdTAwM2VcbkBAIC03MDYyLDYgKzcwNjQsMTgwIEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gRVhQT1JUX1NZTUJPTF9HUEwoZ2VuZXJpY19hY2Nlc3NfcGh5cyk7XG4gI2VuZGlmXG4gXG4rLypcbisgKiBUaGUgZmFzdCBwYXRoIHVzZXMgZm9saW9fd2Fsa19zdGFydChGV19WTUFfTE9DS0VEKSwgd2hpY2ggbmVlZHMgdGhlIHBlci1WTUFcbisgKiBsb2NrIGFuZCBSQ1UtZnJlZWQgcGFnZSB0YWJsZXMgdG8gd2FsayBwYWdlIHRhYmxlcyB3aXRob3V0IHRoZSBtbWFwIGxvY2suXG4rICovXG4rI2lmIGRlZmluZWQoQ09ORklHX1BFUl9WTUFfTE9DSykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUpXG4rLypcbisgKiBSZWFkLXNpZGUgVk1BIGNoZWNrcyBmb3IgdGhlIGxvY2tsZXNzIGZhc3QgcGF0aCwgbWlycm9yaW5nIHRoZSByZWFkIHNpZGUgb2ZcbisgKiBjaGVja192bWFfZmxhZ3MoKTogcmVqZWN0IHdoYXQgRldfVk1BX0xPQ0tFRCBjYW5ub3QgaGFuZGxlIChodWdldGxiKSwgd2hhdFxuKyAqIG5lZWRzIHRoZSAtXHUwMDNlYWNjZXNzKCkgaGFuZGxlciAoVk1fSU8vVk1fUEZOTUFQKSwgb3Igd2hhdCBoYXMgbm8gc3RydWN0IHBhZ2UgdG9cbisgKiBjb3B5IChzZWNyZXRtZW0pOyBlbmZvcmNlIHRoZSBGT0xMX0FOT04gcmVzdHJpY3Rpb24gdGhhdFxuKyAqIC9wcm9jL1BJRC97Y21kbGluZSxlbnZpcm9ufSByZWx5IG9uIChDVkUtMjAxOC0xMTIwKTsgYW5kIHJlcXVpcmUgcmVhZCBhY2Nlc3NcbisgKiAoaG9ub3JpbmcgRk9MTF9GT1JDRSkuICBBbnl0aGluZyBub3QgcG9zaXRpdmVseSBhbGxvd2VkIGZhbGxzIGJhY2sgdG8gdGhlIHNsb3dcbisgKiBwYXRoLCB3aGljaCByZS12YWxpZGF0ZXMgZXZlcnl0aGluZy5cbisgKi9cbitzdGF0aWMgYm9vbCB2bWFfcGVybWl0c19mYXN0X2FjY2VzcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbitcdFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxuK3tcbitcdGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IChWTV9JTyB8IFZNX1BGTk1BUCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGlmIChpc192bV9odWdldGxiX3BhZ2Uodm1hKSB8fCB2bWFfaXNfc2VjcmV0bWVtKHZtYSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGlmICgoZ3VwX2ZsYWdzIFx1MDAyNiBGT0xMX0FOT04pIFx1MDAyNlx1MDAyNiAhdm1hX2lzX2Fub255bW91cyh2bWEpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRpZiAoISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1JFQUQpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICghKGd1cF9mbGFncyBcdTAwMjYgRk9MTF9GT1JDRSkgfHwgISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX01BWVJFQUQpKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuKy8qIFNpemUgb2YgdGhlIHNpbmdsZSBtYXBwaW5nIGVudHJ5IGZvbGlvX3dhbGtfc3RhcnQoKSBsYW5kZWQgb24uICovXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgZndfZW50cnlfc2l6ZShlbnVtIGZvbGlvX3dhbGtfbGV2ZWwgbGV2ZWwpXG4re1xuK1x0c3dpdGNoIChsZXZlbCkge1xuK1x0Y2FzZSBGV19MRVZFTF9QVUQ6XG4rXHRcdHJldHVybiBQVURfU0laRTtcbitcdGNhc2UgRldfTEVWRUxfUE1EOlxuK1x0XHRyZXR1cm4gUE1EX1NJWkU7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gUEFHRV9TSVpFO1xuK1x0fVxuK31cbitcbisvKlxuKyAqIENvcHkgQGxlbiBieXRlcyBvZiB0aGUgcGlubmVkIEBmb2xpbyBvdXQgdG8gQGJ1Ziwgc3RhcnRpbmcgYXQgYnl0ZSBvZmZzZXRcbisgKiBAZm9saW9fb2ZmIHdpdGhpbiB0aGUgZm9saW8gKHRoZSBwb3NpdGlvbiBvZiBAYWRkcikuICBNYXBzIGFuZCBjb3BpZXMgb25lXG4rICogcGFnZSBhdCBhIHRpbWUgLS0ga21hcF9sb2NhbF9mb2xpbygpIGZvciBISUdITUVNLCBjb3B5X2Zyb21fdXNlcl9wYWdlKCkgZm9yXG4rICogdGhlIHBlci1wYWdlIGZsdXNoIG9uIGFsaWFzaW5nIGNhY2hlcyAtLSB3aXRob3V0IHJlLXdhbGtpbmcgcGFnZSB0YWJsZXMuXG4rICogRWFjaCBwYWdlIGJvcnJvd3MgdGhlIGNhbGxlcidzIHNpbmdsZSBmb2xpbyByZWZlcmVuY2UsIHNvIHRoZSBtYXBwaW5nIGlzXG4rICogZHJvcHBlZCB3aXRoIGt1bm1hcF9sb2NhbCgpIHJhdGhlciB0aGFuIGZvbGlvX3JlbGVhc2Vfa21hcCgpLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGNvcHlfZm9saW9fcGFnZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rXHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGZvbGlvX29mZiwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK1x0XHRcdCAgICAgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIGxlbilcbit7XG4rXHR1bnNpZ25lZCBsb25nIGRvbmUgPSAwO1xuK1xuK1x0d2hpbGUgKGRvbmUgXHUwMDNjIGxlbikge1xuK1x0XHR1bnNpZ25lZCBsb25nIHBvcyA9IGZvbGlvX29mZiArIGRvbmU7XG4rXHRcdHVuc2lnbmVkIGxvbmcgcGFnZV9pZHggPSBwb3MgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4rXHRcdHVuc2lnbmVkIGludCBwYWdlX29mZiA9IHBvcyBcdTAwMjYgflBBR0VfTUFTSztcbitcdFx0dW5zaWduZWQgaW50IGNodW5rID0gbWluX3QodW5zaWduZWQgbG9uZywgbGVuIC0gZG9uZSxcbitcdFx0XHRcdFx0ICAgUEFHRV9TSVpFIC0gcGFnZV9vZmYpO1xuK1x0XHR2b2lkICprYWRkciA9IGttYXBfbG9jYWxfZm9saW8oZm9saW8sIHBhZ2VfaWR4IFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKTtcbitcbitcdFx0Y29weV9mcm9tX3VzZXJfcGFnZSh2bWEsIGZvbGlvX3BhZ2UoZm9saW8sIHBhZ2VfaWR4KSxcbitcdFx0XHRcdCAgICBhZGRyICsgZG9uZSwgYnVmICsgZG9uZSwga2FkZHIgKyBwYWdlX29mZixcbitcdFx0XHRcdCAgICBjaHVuayk7XG4rXHRcdGt1bm1hcF9sb2NhbChrYWRkcik7XG4rXHRcdGRvbmUgKz0gY2h1bms7XG4rXHR9XG4rfVxuK1xuKy8qXG4rICogT3Bwb3J0dW5pc3RpYyBsb2NrbGVzcyBmYXN0IHBhdGggZm9yIF9fYWNjZXNzX3JlbW90ZV92bSgpIHJlYWRzLlxuKyAqXG4rICogTWVtb3J5IGFscmVhZHkgcmVzaWRlbnQgaW4gQG1tIGNhbiBiZSByZWFkIHdpdGhvdXQgdGFraW5nIHRoZSBmcmVxdWVudGx5XG4rICogY29udGVuZGVkIG1tYXBfbG9jazogYSBwZXItVk1BIGxvY2sgc3RhYmlsaXplcyB0aGUgVk1BLCBhbmQgZm9saW9fd2Fsa19zdGFydCgpXG4rICogd2l0aCBGV19WTUFfTE9DS0VEIGdyYWJzIGEgc2hvcnQtbGl2ZWQgcmVmZXJlbmNlIHRvIGEgcHJlc2VudCBwYWdlIGZyb20gYSBwYWdlXG4rICogdGFibGUgd2FsayBydW4gd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLCB3aGljaCBzZXJpYWxpemVzIGFnYWluc3QgY29uY3VycmVudFxuKyAqIHBhZ2UgdGFibGUgZnJlZWluZyB0aGUgc2FtZSB3YXkgZ3VwX2Zhc3QgZG9lcyAocmVseWluZyBvblxuKyAqIE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUpLlxuKyAqXG4rICogT25seSBhIHJlcXVlc3QgdGhhdCBsaWVzIGVudGlyZWx5IHdpdGhpbiBhIHNpbmdsZSBWTUEgaXMgaGFuZGxlZCBoZXJlLFxuKyAqIHdoaWNoIHNob3VsZCBub3QgYmUgYW4gaXNzdWUgaW4gcHJhY3RpY2Ugc2luY2UgZXZlcnkgY2FsbGVyIGhhcyBhXG4rICogYnVmZmVyIG9mIFBBR0VfU0laRSBvciBzbWFsbGVyLiBMb29wIGl0ZXJhdGlvbiBpbnNpZGUgdGhpcyBmdW5jdGlvblxuKyAqIHNob3VsZCBiZSByYXJlLCB0b28uXG4rICpcbisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgdmlhIHRoZSBmYXN0IHBhdGguXG4rICovXG4rc3RhdGljIGludCBhY2Nlc3NfcmVtb3RlX3ZtX2Zhc3Qoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbitcdFx0XHRcdCB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG4re1xuK1x0dm9pZCAqb2xkX2J1ZiA9IGJ1ZjtcbitcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuK1xuK1x0YWRkciA9IHVudGFnZ2VkX2FkZHJfcmVtb3RlX3VubG9ja2VkKG1tLCBhZGRyKTtcbitcbitcdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcik7XG4rXHRpZiAoIXZtYSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKiBPbmx5IGhhbmRsZSBhIHJlcXVlc3QgY29udGFpbmVkIGVudGlyZWx5IHdpdGhpbiB0aGlzIG9uZSBWTUEuICovXG4rXHRpZiAobGVuIFx1MDAzZSB2bWEtXHUwMDNldm1fZW5kIC0gYWRkcilcbitcdFx0Z290byBvdXRfdW5sb2NrO1xuK1xuK1x0aWYgKCF2bWFfcGVybWl0c19mYXN0X2FjY2Vzcyh2bWEsIGd1cF9mbGFncykpXG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbitcbitcdHdoaWxlIChsZW4pIHtcbitcdFx0c3RydWN0IGZvbGlvX3dhbGsgZnc7XG4rXHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4rXHRcdHN0cnVjdCBwYWdlICpwYWdlO1xuK1x0XHR1bnNpZ25lZCBsb25nIGVudHJ5X3NpemUsIGZvbGlvX29mZiwgc3BhbiwgaXJxX2ZsYWdzO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBUaGUgbG9ja2xlc3MgcGFnZSB0YWJsZSB3YWxrIG11c3QgcnVuIHdpdGggaW50ZXJydXB0c1xuK1x0XHQgKiBkaXNhYmxlZDogcGFnZSB0YWJsZSBmcmVlaW5nIChtdW5tYXAgb3IgVEhQIGNvbGxhcHNlLCB3aGljaFxuK1x0XHQgKiBJUEkgdmlhIHRsYl9yZW1vdmVfdGFibGVfc3luY19vbmUoKSBhbmQgd2FpdCkgdGhlbiBjYW5ub3QgZnJlZVxuK1x0XHQgKiBhIHRhYmxlIG1pZC13YWxrIC0tIHRoZSBzYW1lIGNvbnRyYWN0IGd1cF9mYXN0IHJlbGllcyBvbi4gIElSUXNcbitcdFx0ICogYXJlIHJlc3RvcmVkIG9uY2UgdGhlIGZvbGlvIGlzIHBpbm5lZDsgdGhlIGNvcHkgYmVsb3cgaG9sZHMgb25seVxuK1x0XHQgKiB0aGUgZm9saW8gcmVmZXJlbmNlLlxuK1x0XHQgKi9cbitcdFx0bG9jYWxfaXJxX3NhdmUoaXJxX2ZsYWdzKTtcbitcdFx0Zm9saW8gPSBmb2xpb193YWxrX3N0YXJ0KFx1MDAyNmZ3LCB2bWEsIGFkZHIsIEZXX1ZNQV9MT0NLRUQpO1xuK1x0XHRpZiAoIWZvbGlvKSB7XG4rXHRcdFx0bG9jYWxfaXJxX3Jlc3RvcmUoaXJxX2ZsYWdzKTtcbitcdFx0XHRnb3RvIG91dF91bmxvY2s7XHQvKiBub3QgcHJlc2VudDogbGV0IHRoZSBzbG93IHBhdGggZmF1bHQgaXQgaW4gKi9cbitcdFx0fVxuK1x0XHRwYWdlID0gZncucGFnZTtcbitcdFx0aWYgKCFwYWdlKSB7XG4rXHRcdFx0LyogTm8gc3RydWN0IHBhZ2UgdG8gY29weSAoZS5nLiBhIHNwZWNpYWwgUFRFKS4gKi9cbitcdFx0XHRmb2xpb193YWxrX2VuZChcdTAwMjZmdywgdm1hKTtcbitcdFx0XHRsb2NhbF9pcnFfcmVzdG9yZShpcnFfZmxhZ3MpO1xuK1x0XHRcdGdvdG8gb3V0X3VubG9jaztcbitcdFx0fVxuK1x0XHRlbnRyeV9zaXplID0gZndfZW50cnlfc2l6ZShmdy5sZXZlbCk7XG4rXHRcdGZvbGlvX2dldChmb2xpbyk7XG4rXHRcdGZvbGlvX3dhbGtfZW5kKFx1MDAyNmZ3LCB2bWEpO1xuK1x0XHRsb2NhbF9pcnFfcmVzdG9yZShpcnFfZmxhZ3MpO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBmb2xpb193YWxrX3N0YXJ0KCkgdmFsaWRhdGVkIG9uZSBwcmVzZW50IG1hcHBpbmcgZW50cnlcbitcdFx0ICogKFBBR0UvUE1EL1BVRF9TSVpFKS4gIENvcHkgdG8gdGhlIGVuZCBvZiB0aGF0IGVudHJ5LCBib3VuZGVkIGJ5XG4rXHRcdCAqIHRoZSBmb2xpbyBhbmQgdGhlIHJlbWFpbmluZyBsZW5ndGggKGFscmVhZHkgd2l0aGluIHRoZSBWTUEpLCBzb1xuK1x0XHQgKiBhIGh1Z2UgbWFwcGluZyBpcyBoYW5kbGVkIGluIGEgc2luZ2xlIHdhbGsuXG4rXHRcdCAqL1xuK1x0XHRmb2xpb19vZmYgPSAoZm9saW9fcGFnZV9pZHgoZm9saW8sIHBhZ2UpIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSArXG4rXHRcdFx0ICAgIG9mZnNldF9pbl9wYWdlKGFkZHIpO1xuK1x0XHRzcGFuID0gbWluMygodW5zaWduZWQgbG9uZylsZW4sXG4rXHRcdFx0ICAgIGVudHJ5X3NpemUgLSAoYWRkciBcdTAwMjYgKGVudHJ5X3NpemUgLSAxKSksXG4rXHRcdFx0ICAgIChmb2xpb19ucl9wYWdlcyhmb2xpbykgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpIC0gZm9saW9fb2ZmKTtcbitcbitcdFx0Y29weV9mb2xpb19wYWdlcyh2bWEsIGZvbGlvLCBmb2xpb19vZmYsIGFkZHIsIGJ1Ziwgc3Bhbik7XG4rXG4rXHRcdC8qIE1hdGNoIHRoZSBGT0xMX1RPVUNIIGJlaGF2aW91ciBvZiB0aGUgc2xvdyAoR1VQKSBwYXRoLiAqL1xuK1x0XHRmb2xpb19tYXJrX2FjY2Vzc2VkKGZvbGlvKTtcbitcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbitcdFx0bGVuIC09IHNwYW47XG4rXHRcdGJ1ZiArPSBzcGFuO1xuK1x0XHRhZGRyICs9IHNwYW47XG4rXHR9XG4rXG4rb3V0X3VubG9jazpcbitcdHZtYV9lbmRfcmVhZCh2bWEpO1xuK1x0cmV0dXJuIGJ1ZiAtIG9sZF9idWY7XG4rfVxuKyNlbHNlXG4rc3RhdGljIGludCBhY2Nlc3NfcmVtb3RlX3ZtX2Zhc3Qoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbitcdFx0XHRcdCB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuKyNlbmRpZiAvKiBDT05GSUdfUEVSX1ZNQV9MT0NLIFx1MDAyNlx1MDAyNiBDT05GSUdfTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSAqL1xuK1xuIC8qXG4gICogQWNjZXNzIGFub3RoZXIgcHJvY2VzcycgYWRkcmVzcyBzcGFjZSBhcyBnaXZlbiBpbiBtbS5cbiAgKi9cbkBAIC03MDcxLDE1ICs3MjQ3LDMwIEBAIHN0YXRpYyBpbnQgX19hY2Nlc3NfcmVtb3RlX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHR2b2lkICpvbGRfYnVmID0gYnVmO1xuIFx0aW50IHdyaXRlID0gZ3VwX2ZsYWdzIFx1MDAyNiBGT0xMX1dSSVRFO1xuIFxuK1x0LypcbitcdCAqIFRyeSB0aGUgbG9ja2xlc3MgZmFzdCBwYXRoIGZvciByZWFkcyBmaXJzdDsgaXQgdHJhbnNmZXJzIHdoYXQgaXQgY2FuXG4rXHQgKiBmcm9tIHJlc2lkZW50IG1lbW9yeSB3aXRob3V0IHRha2luZyBtbWFwX2xvY2ssIGFuZCBsZWF2ZXMgdGhlXG4rXHQgKiByZW1haW5kZXIgKGlmIGFueSkgdG8gdGhlIHNsb3cgcGF0aCBiZWxvdy5cbitcdCAqL1xuK1x0aWYgKCF3cml0ZSkge1xuK1x0XHRpbnQgZG9uZSA9IGFjY2Vzc19yZW1vdGVfdm1fZmFzdChtbSwgYWRkciwgYnVmLCBsZW4sIGd1cF9mbGFncyk7XG4rXG4rXHRcdGFkZHIgKz0gZG9uZTtcbitcdFx0YnVmICs9IGRvbmU7XG4rXHRcdGxlbiAtPSBkb25lO1xuK1x0XHRpZiAoIWxlbilcbitcdFx0XHRyZXR1cm4gYnVmIC0gb2xkX2J1ZjtcbitcdH1cbitcbiBcdGlmIChtbWFwX3JlYWRfbG9ja19raWxsYWJsZShtbSkpXG4tXHRcdHJldHVybiAwO1xuK1x0XHRyZXR1cm4gYnVmIC0gb2xkX2J1ZjtcbiBcbiBcdC8qIFVudGFnIHRoZSBhZGRyZXNzIGJlZm9yZSBsb29raW5nIHVwIHRoZSBWTUEgKi9cbiBcdGFkZHIgPSB1bnRhZ2dlZF9hZGRyX3JlbW90ZShtbSwgYWRkcik7XG4gXG4gXHQvKiBBdm9pZCB0cmlnZ2VyaW5nIHRoZSB0ZW1wb3Jhcnkgd2FybmluZyBpbiBfX2dldF91c2VyX3BhZ2VzICovXG4gXHRpZiAoIXZtYV9sb29rdXAobW0sIGFkZHIpIFx1MDAyNlx1MDAyNiAhZXhwYW5kX3N0YWNrKG1tLCBhZGRyKSlcbi1cdFx0cmV0dXJuIDA7XG4rXHRcdHJldHVybiBidWYgLSBvbGRfYnVmO1xuIFxuIFx0LyogaWdub3JlIGVycm9ycywganVzdCBjaGVjayBob3cgbXVjaCB3YXMgc3VjY2Vzc2Z1bGx5IHRyYW5zZmVycmVkICovXG4gXHR3aGlsZSAobGVuKSB7XG5kaWZmIC0tZ2l0IGEvbW0vcGFnZXdhbGsuYyBiL21tL3BhZ2V3YWxrLmNcbmluZGV4IDNhZTI1ODZmZjQ1YjQ0Li5hYjFlODE5ODNjYjhjNyAxMDA2NDRcbi0tLSBhL21tL3BhZ2V3YWxrLmNcbisrKyBiL21tL3BhZ2V3YWxrLmNcbkBAIC04OTAsNyArODkwLDEwIEBAIGludCB3YWxrX3BhZ2VfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBmaXJzdF9pbmRleCxcbiAgKiBodWdlX3B0ZXBfc2V0XyosIC4uLikuIE5vdGUgdGhhdCB0aGUgcGFnZSB0YWJsZSBlbnRyeSBzdG9yZWQgaW4gQGZ3IG1pZ2h0XG4gICogbm90IGNvcnJlc3BvbmQgdG8gdGhlIGZpcnN0IHBoeXNpY2FsIGVudHJ5IG9mIGEgbG9naWNhbCBodWdldGxiIGVudHJ5LlxuICAqXG4tICogVGhlIG1tYXAgbG9jayBtdXN0IGJlIGhlbGQgaW4gcmVhZCBtb2RlLlxuKyAqIFRoZSBtbWFwIGxvY2sgbXVzdCBiZSBoZWxkIGluIHJlYWQgbW9kZS4gQWx0ZXJuYXRpdmVseSwgaWYgQEZXX1ZNQV9MT0NLRUQgaXNcbisgKiBwYXNzZWQsIHRoZSBWTUEncyBwZXItVk1BIGxvY2sgbXVzdCBiZSBoZWxkIGFuZCBpbnRlcnJ1cHRzIG11c3QgYmUgZGlzYWJsZWRcbisgKiBhY3Jvc3MgdGhlIHdhbGsgYW5kIHVudGlsIGZvbGlvX3dhbGtfZW5kKCkgKG9ubHkgc3VwcG9ydGVkIHdpdGggUkNVLWZyZWVkIHBhZ2VcbisgKiB0YWJsZXMsIGkuZS4gQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUsIGFuZCBub3QgZm9yIGh1Z2V0bGIpLlxuICAqXG4gICogUmV0dXJuOiBmb2xpbyBwb2ludGVyIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBOVUxMLlxuICAqL1xuQEAgLTkwOCw3ICs5MTEsMjkgQEAgc3RydWN0IGZvbGlvICpmb2xpb193YWxrX3N0YXJ0KHN0cnVjdCBmb2xpb193YWxrICpmdyxcbiBcdHBnZF90ICpwZ2RwO1xuIFx0cDRkX3QgKnA0ZHA7XG4gXG4tXHRtbWFwX2Fzc2VydF9sb2NrZWQodm1hLVx1MDAzZXZtX21tKTtcbitcdGlmIChmbGFncyBcdTAwMjYgRldfVk1BX0xPQ0tFRCkge1xuK1x0XHQvKlxuK1x0XHQgKiBMb2NrbGVzcyB3YWxrIHVuZGVyIHRoZSBwZXItVk1BIGxvY2sgaW5zdGVhZCBvZiB0aGUgbW1hcFxuK1x0XHQgKiBsb2NrLiBUaGUgVk1BIGxvY2sga2VlcHMgdGhlIFZNQSBzdGFibGUsIGJ1dCB0aGUgcGFnZSB0YWJsZXNcbitcdFx0ICogd2Fsa2VkIGJlbG93IGl0IGNhbiBzdGlsbCBiZSBmcmVlZCBjb25jdXJyZW50bHk6IGEgbXVubWFwKCkgb3JcbitcdFx0ICogVEhQIGNvbGxhcHNlIG9mIGFuIGFkamFjZW50IHJlZ2lvbiBpbiB0aGUgc2FtZSBtbSBjYW4gZnJlZSBhXG4rXHRcdCAqIHNoYXJlZCB1cHBlci1sZXZlbCB0YWJsZSwgYW5kIGNvbGxhcHNlX2h1Z2VfcGFnZSgpIC1cdTAwM2VcbitcdFx0ICogcmV0cmFjdF9wYWdlX3RhYmxlcygpIGZyZWVzIHBhZ2UgdGFibGVzIG9mIFZNQXMgd2hvc2UgbG9jayBpdFxuK1x0XHQgKiBkb2VzIG5vdCBob2xkLiBQYWdlIHRhYmxlIGZyZWVpbmcgc2VyaWFsaXplcyBhZ2FpbnN0IGxvY2tsZXNzXG4rXHRcdCAqIHdhbGtlcnMgdmlhIHRsYl9yZW1vdmVfdGFibGVfc3luY19vbmUoKSwgd2hpY2ggSVBJcyBhbmQgd2FpdHNcbitcdFx0ICogZm9yIGV2ZXJ5IENQVSB0byBlbmFibGUgaW50ZXJydXB0czsgYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbFxuK1x0XHQgKiBzZWN0aW9uIGRvZXMgbm90IGJsb2NrIHRoYXQgSVBJLCBzbyB0aGUgY2FsbGVyIG11c3Qga2VlcFxuK1x0XHQgKiBpbnRlcnJ1cHRzIGRpc2FibGVkIGFjcm9zcyB0aGUgd2hvbGUgd2FsaywgbGlrZSBndXBfZmFzdC5cbitcdFx0ICogSHVnZXRsYiAoUE1EIHNoYXJpbmcpIG1hcHMgcGFnZSB0YWJsZXMgbm90IGNvdmVyZWQgYnkgdGhpc1xuK1x0XHQgKiBWTUEncyBsb2NrIGFuZCBpcyBub3Qgc3VwcG9ydGVkLlxuK1x0XHQgKi9cbitcdFx0Vk1fV0FSTl9PTl9PTkNFKCFJU19FTkFCTEVEKENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFKSk7XG4rXHRcdFZNX1dBUk5fT05fT05DRShpc192bV9odWdldGxiX3BhZ2Uodm1hKSk7XG4rXHRcdGxvY2tkZXBfYXNzZXJ0X2lycXNfZGlzYWJsZWQoKTtcbitcdFx0dm1hX2Fzc2VydF9sb2NrZWQodm1hKTtcbitcdH0gZWxzZSB7XG4rXHRcdG1tYXBfYXNzZXJ0X2xvY2tlZCh2bWEtXHUwMDNldm1fbW0pO1xuK1x0fVxuIFx0dm1hX3BndGFibGVfd2Fsa19iZWdpbih2bWEpO1xuIFxuIFx0aWYgKFdBUk5fT05fT05DRShhZGRyIFx1MDAzYyB2bWEtXHUwMDNldm1fc3RhcnQgfHwgYWRkciBcdTAwM2U9IHZtYS1cdTAwM2V2bV9lbmQpKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDI6MTA6MTYuMDc3MDEzMDlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDI0NzAyNTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIEltcGFjdCBvZiBhIE5ldyBLZXJuZWwgTWVtb3J5IEFjY2VzcyBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCdzIG1ha2luZyBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwncyBtZW1vcnkgYWNjZXNzIHJvdXRpbmVzLiBTcGVjaWZpY2FsbHksIGl0J3MgYWRkaW5nIGEgbG9ja2xlc3MgZmFzdCBwYXRoIGZvciBgX19hY2Nlc3NfcmVtb3RlX3ZtKClgIHJlYWRzLiBJbnRlcmVzdGluZy4uLiB0aGV5J3JlIGNhbGxpbmcgdGhpcyBuZXcgZnVuY3Rpb24gYGFjY2Vzc19yZW1vdGVfdm1fZmFzdCgpYCBhbmQgaXQncyB1dGlsaXppbmcgYGZvbGlvX3dhbGtfc3RhcnQoKWAgd2l0aCBhIG5ldyBmbGFnLCBgRldfVk1BX0xPQ0tFRGAuIEl0IGxvb2tzIGxpa2UgdGhlcmUncyBhbHNvIHNvbWUgbW9kaWZpY2F0aW9uIG9mIGB1bnRhZ2dlZF9hZGRyX3JlbW90ZSgpYCwgYWxsb3dpbmcgZm9yIHVubG9ja2VkIHVzYWdlIHZpYSBgdW50YWdnZWRfYWRkcl9yZW1vdGVfdW5sb2NrZWQoKWAuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBpcyB0aGlzIGFjdHVhbGx5IGdvaW5nIHRvIGJlIHdvcnRoIGZ1enppbmc/IEkgbmVlZCB0byBjaGVjayBob3cgcmVhY2hhYmxlIHRoaXMgY29kZSBpcyBhbmQgaWYgaXQncyBldmVuIGZ1bmN0aW9uYWwuIFRoZSBwYXRjaCBtb2RpZmllcyBgbW0vbWVtb3J5LmNgIGFuZCBgbW0vcGFnZXdhbGsuY2AuIEEgcXVpY2sgc2NhbiB0ZWxscyBtZSBgX19hY2Nlc3NfcmVtb3RlX3ZtKClgIGlzIHVzZWQgYnkgYGFjY2Vzc19yZW1vdGVfdm0oKWAsIHdoaWNoIGluIHR1cm4gaXMgdXNlZCBieSBzb21lIHByZXR0eSBjb3JlIGZ1bmN0aW9uYWxpdHk6IGBwdHJhY2VgIGNhbGxzIChsaWtlIGBQVFJBQ0VfUEVFS0RBVEFgKSwgYC9wcm9jL3BpZC9tZW1gLCBgL3Byb2MvcGlkL2NtZGxpbmVgLCBhbmQgYC9wcm9jL3BpZC9lbnZpcm9uYC4gWWVwLCB0aGF0J3MgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIGRlZmluaXRlbHkgZnVuY3Rpb25hbC4gVGhpcyBpcyBhIGdvb2QgdGFyZ2V0LlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aG9zZSBjb25maWd1cmF0aW9ucy4gVGhlIGZhc3QgcGF0aCBpcyBndWFyZGVkIGJ5IGAjaWYgZGVmaW5lZChDT05GSUdfUEVSX1ZNQV9MT0NLKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSlgLiBTbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlc2UgY29uZmlncyBhbmQgc2VlIHdoYXQgdGhlaXIgZGVwZW5kZW5jaWVzIGFyZSwgYW5kIHdoZXRoZXIgb3Igbm90IHRoZXkncmUgbGlrZWx5IHRvIGJlIHByZXNlbnQgaW4gYW55IG9mIG91ciB0eXBpY2FsIGZ1enppbmcgdGFyZ2V0cy4gR290dGEgbWFrZSBzdXJlIHdlJ3JlIGFjdHVhbGx5IHRlc3RpbmcgdGhlIGNvZGUgdGhhdCdzIGJlaW5nIGludHJvZHVjZWQgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgzNywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDAyOjEwOjIyLjUwMTcxODQyNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDYzMTYzMjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQRVJfVk1BX0xPQ0tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xNDUyPWNvbmZpZyBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DS1xcbi0tXFxubW0vS2NvbmZpZy0xNDU0LVxcbm1tL0tjb25maWc6MTQ1NTpjb25maWcgUEVSX1ZNQV9MT0NLXFxubW0vS2NvbmZpZy0xNDU2LVxcdGRlZl9ib29sIHlcXG4tLVxcbm1tL0tjb25maWcuZGVidWc9MzAwPWNvbmZpZyBERUJVR19LTUVNTEVBS19WRVJCT1NFXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnLTMxMC1cXG5tbS9LY29uZmlnLmRlYnVnOjMxMTpjb25maWcgUEVSX1ZNQV9MT0NLX1NUQVRTXFxubW0vS2NvbmZpZy5kZWJ1Zy0zMTItXFx0Ym9vbCBcXFwiU3RhdGlzdGljcyBmb3IgcGVyLXZtYSBsb2Nrc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDI6MTA6MjUuOTY0OTA0NTQyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjczMzM2NzQzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIEtlcm5lbCdzIE1lbW9yeSBNYW5hZ2VtZW50IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGRlZmluaXRpb24sIGBQRVJfVk1BX0xPQ0tgLiBJdCdzIHNldCB0byBcInllc1wiIGJ5IGRlZmF1bHQsIGJ1dCBvbmx5IGlmIHRoZSBhcmNoaXRlY3R1cmUgc3VwcG9ydHMgdGhpcyBcIlBFUl9WTUFfTE9DS1wiIGZlYXR1cmUuIFRoYXQgbWFrZXMgc2Vuc2UsIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIHRoYXQgaXMgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudC4gTm93LCB3aGF0J3MgaW50ZXJlc3RpbmcgaXMgaG93IGl0J3MgYmVpbmcgY29uZGl0aW9uZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBmZWF0dXJlLCBzbyBteSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgaXQgaXMgbGlua2VkLiBUaGlzIHdpbGwgZ2l2ZSBhIGRlZXBlciBpbnNpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjgxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDI6MTA6MjguNjk4Mjc0MDk1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4OTkwNTQwNjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9LY29uZmlnPTUxMj1jb25maWcgTU1VX0dBVEhFUl9UQUJMRV9GUkVFXFxuLS1cXG5hcmNoL0tjb25maWctNTE0LVxcbmFyY2gvS2NvbmZpZzo1MTU6Y29uZmlnIE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcXG5hcmNoL0tjb25maWctNTE2LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDI6MTA6MzEuNTk3MzMzOTc1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgyOTAwOTA3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJ20gZGlzY3Vzc2luZyB0aGlzIHdpdGggYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYSBTeXN0ZW0gQXJjaGl0ZWN0dXJlIFBhcmFtZXRlcioqXG5cblJpZ2h0LCBzbyB0aGlzIGZlZWxzIGxpa2UgYSBmbGFnLCBhIGhpZGRlbiBib29sZWFuLiBJdCdzIHByb2JhYmx5IGFuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBzZXR0aW5nLCBzb21ldGhpbmcgdGhlIGhhcmR3YXJlIG9yIGZpcm13YXJlIGNvbmZpZ3VyZXMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIHg4NiBhcmNoaXRlY3R1cmUgYW5kIHNlZSBpZiB0aGlzIHNldHRpbmcgaXMgcmVsZXZhbnQgdGhlcmUuIExldCdzIHN0YXJ0IHdpdGggeDg2LCBzZWUgaWYgaXQncyBldmVuIGV4cG9zZWQsIGFuZCBpZiBzbywgaG93IGl0IGFmZmVjdHMgYmVoYXZpb3IuIEknbSBhc3N1bWluZyB0aGF0IGl0J3MgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGJlY2F1c2UgdGhlIGJvb2xlYW4gaXMgaGlkZGVuLCBsaWtlbHkgaW4gdGhlIHN5c3RlbS9hcmNoaXRlY3R1cmUgZGVmaW5pdGlvbi4gRnJvbSB0aGVyZSwgd2UgY2FuIGV4cGFuZCBvdXIgcmVzZWFyY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NzUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwMjoxMDozNC40MjYzNDYxODdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE3MDM1NDcwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FscGhhL0tjb25maWc9Mj1jb25maWcgQUxQSEFcXG4tLVxcbmFyY2gvYWxwaGEvS2NvbmZpZy00Mi1cXHRzZWxlY3QgTU1VX0dBVEhFUl9OT19SQU5HRVxcbmFyY2gvYWxwaGEvS2NvbmZpZzo0MzpcXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxcbmFyY2gvYWxwaGEvS2NvbmZpZy00NC1cXHRzZWxlY3QgU1BBUlNFTUVNX0VYVFJFTUUgaWYgU1BBUlNFTUVNXFxuLS1cXG5hcmNoL2FybS9LY29uZmlnPTI9Y29uZmlnIEFSTVxcbi0tXFxuYXJjaC9hcm0vS2NvbmZpZy0xMzUtXFx0c2VsZWN0IEhBVkVfUEVSRl9VU0VSX1NUQUNLX0RVTVBcXG5hcmNoL2FybS9LY29uZmlnOjEzNjpcXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSBpZiBTTVAgXFx1MDAyNlxcdTAwMjYgQVJNX0xQQUVcXG5hcmNoL2FybS9LY29uZmlnLTEzNy1cXHRzZWxlY3QgSEFWRV9SRUdTX0FORF9TVEFDS19BQ0NFU1NfQVBJXFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWc9Mj1jb25maWcgQVJNNjRcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZy0yMjMtXFx0c2VsZWN0IEhBVkVfRlVOQ1RJT05fQVJHX0FDQ0VTU19BUElcXG5hcmNoL2FybTY0L0tjb25maWc6MjI0OlxcdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXFxuYXJjaC9hcm02NC9LY29uZmlnLTIyNS1cXHRzZWxlY3QgSEFWRV9SU0VRXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnPTI9Y29uZmlnIExPT05HQVJDSFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy0xOTEtXFx0c2VsZWN0IE1NVV9HQVRIRVJfTUVSR0VfVk1BUyBpZiBNTVVcXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnOjE5MjpcXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWctMTkzLVxcdHNlbGVjdCBNT0RVTEVTX1VTRV9FTEZfUkVMQSBpZiBNT0RVTEVTXFxuLS1cXG5hcmNoL21pcHMvS2NvbmZpZz0yPWNvbmZpZyBNSVBTXFxuLS1cXG5hcmNoL21pcHMvS2NvbmZpZy05OS1cXHRzZWxlY3QgTE9DS19NTV9BTkRfRklORF9WTUFcXG5hcmNoL21pcHMvS2NvbmZpZzoxMDA6XFx0c2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcXG5hcmNoL21pcHMvS2NvbmZpZy0xMDEtXFx0c2VsZWN0IE1PRFVMRVNfVVNFX0VMRl9SRUwgaWYgTU9EVUxFU1xcbi0tXFxuYXJjaC9wYXJpc2MvS2NvbmZpZz0yPWNvbmZpZyBQQVJJU0NcXG4tLVxcbmFyY2gvcGFyaXNjL0tjb25maWctODItXFx0c2VsZWN0IFRIUkVBRF9JTkZPX0lOX1RBU0tcXG5hcmNoL3BhcmlzYy9LY29uZmlnOjgzOlxcdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXFxuYXJjaC9wYXJpc2MvS2NvbmZpZy04NC1cXHRzZWxlY3QgTkVFRF9ETUFfTUFQX1NUQVRFXFxuLS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz0xMTg9Y29uZmlnIFBQQ1xcbi0tXFxuYXJjaC9wb3dlcnBjL0tjb25maWctMzA2LVxcdHNlbGVjdCBNTVVfR0FUSEVSX1BBR0VfU0laRVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnOjMwNzpcXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTMwOC1cXHRzZWxlY3QgSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEVcXG4tLVxcbmFyY2gvcmlzY3YvS2NvbmZpZz0xMz1jb25maWcgUklTQ1ZcXG4tLVxcbmFyY2gvcmlzY3YvS2NvbmZpZy0yMDctXFx0c2VsZWN0IExPQ0tfTU1fQU5EX0ZJTkRfVk1BXFxuYXJjaC9yaXNjdi9LY29uZmlnOjIwODpcXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSBpZiBTTVAgXFx1MDAyNlxcdTAwMjYgTU1VXFxuYXJjaC9yaXNjdi9LY29uZmlnLTIwOS1cXHRzZWxlY3QgTU9EVUxFU19VU0VfRUxGX1JFTEEgaWYgTU9EVUxFU1xcbi0tXFxuYXJjaC9zMzkwL0tjb25maWc9NzU9Y29uZmlnIFMzOTBcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTI2My1cXHRzZWxlY3QgTU1VX0dBVEhFUl9OT19HQVRIRVJcXG5hcmNoL3MzOTAvS2NvbmZpZzoyNjQ6XFx0c2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcXG5hcmNoL3MzOTAvS2NvbmZpZy0yNjUtXFx0c2VsZWN0IE1PRFVMRVNfVVNFX0VMRl9SRUxBXFxuLS1cXG5hcmNoL3NwYXJjL0tjb25maWc9NzA9Y29uZmlnIFNQQVJDNjRcXG4tLVxcbmFyY2gvc3BhcmMvS2NvbmZpZy03Ni1cXHRzZWxlY3QgSEFWRV9LUFJPQkVTXFxuYXJjaC9zcGFyYy9LY29uZmlnOjc3OlxcdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFIGlmIFNNUFxcbmFyY2gvc3BhcmMvS2NvbmZpZy03OC1cXHRzZWxlY3QgSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEUgaWYgU01QXFxuLS1cXG5hcmNoL3VtL0tjb25maWc9NT1jb25maWcgVU1MXFxuLS1cXG5hcmNoL3VtL0tjb25maWctNDYtXFx0c2VsZWN0IFNQQVJTRV9JUlFcXG5hcmNoL3VtL0tjb25maWc6NDc6XFx0c2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcXG5hcmNoL3VtL0tjb25maWctNDgtXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnPTU4PWNvbmZpZyBYODZcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMjg0LVxcdHNlbGVjdCBBU1lOQ19LRVJORUxfUEdUQUJMRV9GUkVFXFx0aWYgSU9NTVVfU1ZBXFxuYXJjaC94ODYvS2NvbmZpZzoyODU6XFx0c2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcXG5hcmNoL3g4Ni9LY29uZmlnLTI4Ni1cXHRzZWxlY3QgTU1VX0dBVEhFUl9NRVJHRV9WTUFTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDAyOjEwOjM4LjU5NjcwODMxNloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5ODc5Nzc0ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBDb251bmRydW0qKlxuXG5Pa2F5LCBzbyBJJ20gdGFraW5nIGEgbG9vayBhdCB0aGVzZSBkZWZhdWx0IHg4NiBjb25maWd1cmF0aW9ucywgc3BlY2lmaWNhbGx5IGBQRVJfVk1BX0xPQ0tgIGFuZCBgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRWAuIFRoZXkncmUgYWxyZWFkeSBlbmFibGVkIGJ5IGRlZmF1bHQsIHdoaWNoIGlzIGdvb2QsIGJ1dCBJIG5lZWQgdG8gZGVjaWRlIHdoYXQgdG8gbGlzdCBnaXZlbiB0aGUgcHJvbXB0J3MgaW5zdHJ1Y3Rpb24gdG8gb25seSBsaXN0IHRob3NlIGNvbmZpZ3MgdGhhdCBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIFNob3VsZCBJIGluY2x1ZGUgYFBFUl9WTUFfTE9DS2AgYW55d2F5LCBqdXN0IGZvciBjbGFyaXR5PyBIbW1tLi4uIHRoZSBwYXRjaCAqZG9lcyogaGF2ZSB0aGF0IGAjaWZgIGNvbmRpdGlvbiB1c2luZyBib3RoIHRoYXQgYW5kIHRoZSBvdGhlciBvbmUsIHNvIGl0J3MgZGlyZWN0bHkgcmVsZXZhbnQgaGVyZS4gT2theSwgSSdsbCBwdXQgaXQgaW4uXG5cbk5vdyBmb3IgZm9jdXMgc3ltYm9scy4gVGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBhY2Nlc3NfcmVtb3RlX3ZtX2Zhc3RgLCBgdm1hX3Blcm1pdHNfZmFzdF9hY2Nlc3NgLCBhbmQgYGNvcHlfZm9saW9fcGFnZXNgLCBhbmQgaXQgbW9kaWZpZXMgYF9fYWNjZXNzX3JlbW90ZV92bWAsIGFuZCBgZm9saW9fd2Fsa19zdGFydGAuIGBhY2Nlc3NfcmVtb3RlX3ZtX2Zhc3RgIGlzIGRlZmluaXRlbHkgYSBrZXkgZm9jdXMgcG9pbnQuIEFuZCBgX19hY2Nlc3NfcmVtb3RlX3ZtYCBpcyBhbHNvIGEgZ29vZCBjaG9pY2UuIEV2ZW4gdGhvdWdoIGBmb2xpb193YWxrX3N0YXJ0YCBzZWVtcyBhIGJpdCBnZW5lcmljLCBpdCBpcyBtb2RpZmllZCwgc28gSSdsbCBrZWVwIHRoYXQgb25lLiBBbHJpZ2h0LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHVzZSBvZiBgX19hY2Nlc3NfcmVtb3RlX3ZtYCBhbmQgSSBzaG91bGQgaGF2ZSBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTMyOCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwMjoxMDo0My41ODQ2ODg1MzZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MTQxMjUzOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19hY2Nlc3NfcmVtb3RlX3ZtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva2VybmVsL210ZS5jPTQxOD1sb25nIGdldF9tdGVfY3RybChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9tdGUuYy00NDEtICogdGhlIG51bWJlciBvZiB0YWdzIGNvcGllZC4gUmV0dXJuIDAgaWYgYW55IHRhZ3MgY29waWVkLCBlcnJvciBvdGhlcndpc2UuXFxuYXJjaC9hcm02NC9rZXJuZWwvbXRlLmM6NDQyOiAqIEluc3BpcmVkIGJ5IF9fYWNjZXNzX3JlbW90ZV92bSgpLlxcbmFyY2gvYXJtNjQva2VybmVsL210ZS5jLTQ0My0gKi9cXG4tLVxcbmtlcm5lbC90aW1lL25hbWVzcGFjZV92ZHNvLmM9NzE9c3RydWN0IHBhZ2UgKmZpbmRfdGltZW5zX3Z2YXJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmtlcm5lbC90aW1lL25hbWVzcGFjZV92ZHNvLmMtODAtXFx0ICogaW4gc3BlY2lhbF9tYXBwaW5nX3Ztb3BzKCkuXFxua2VybmVsL3RpbWUvbmFtZXNwYWNlX3Zkc28uYzo4MTpcXHQgKiBGb3IgbW9yZSBkZXRhaWxzIGNoZWNrX3ZtYV9mbGFncygpIGFuZCBfX2FjY2Vzc19yZW1vdGVfdm0oKVxcbmtlcm5lbC90aW1lL25hbWVzcGFjZV92ZHNvLmMtODItXFx0ICovXFxuLS1cXG5tbS9tZW1vcnkuYz03MTE3PXN0YXRpYyB2b2lkIGNvcHlfZm9saW9fcGFnZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9tZW1vcnkuYy03MTM5LS8qXFxubW0vbWVtb3J5LmM6NzE0MDogKiBPcHBvcnR1bmlzdGljIGxvY2tsZXNzIGZhc3QgcGF0aCBmb3IgX19hY2Nlc3NfcmVtb3RlX3ZtKCkgcmVhZHMuXFxubW0vbWVtb3J5LmMtNzE0MS0gKlxcbi0tXFxubW0vbWVtb3J5LmM9NzIzND1zdGF0aWMgaW50IGFjY2Vzc19yZW1vdGVfdm1fZmFzdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vbWVtb3J5LmMtNzI0My0gKi9cXG5tbS9tZW1vcnkuYzo3MjQ0OnN0YXRpYyBpbnQgX19hY2Nlc3NfcmVtb3RlX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0vbWVtb3J5LmMtNzI0NS1cXHRcXHRcXHQgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXFxuLS1cXG5tbS9tZW1vcnkuYz03MzQ5PWludCBhY2Nlc3NfcmVtb3RlX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9tZW1vcnkuYy03MzUxLXtcXG5tbS9tZW1vcnkuYzo3MzUyOlxcdHJldHVybiBfX2FjY2Vzc19yZW1vdGVfdm0obW0sIGFkZHIsIGJ1ZiwgbGVuLCBndXBfZmxhZ3MpO1xcbm1tL21lbW9yeS5jLTczNTMtfVxcbi0tXFxubW0vbWVtb3J5LmM9NzM2MD1pbnQgYWNjZXNzX3Byb2Nlc3Nfdm0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL21lbW9yeS5jLTczNjktXFxubW0vbWVtb3J5LmM6NzM3MDpcXHRyZXQgPSBfX2FjY2Vzc19yZW1vdGVfdm0obW0sIGFkZHIsIGJ1ZiwgbGVuLCBndXBfZmxhZ3MpO1xcbm1tL21lbW9yeS5jLTczNzEtXFxuLS1cXG5tbS9ub21tdS5jPTE2Mzk9RVhQT1JUX1NZTUJPTChmaWxlbWFwX21hcF9wYWdlcyk7XFxubW0vbm9tbXUuYy0xNjQwLVxcbm1tL25vbW11LmM6MTY0MTpzdGF0aWMgaW50IF9fYWNjZXNzX3JlbW90ZV92bShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL25vbW11LmMtMTY0Mi1cXHRcXHRcXHQgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXFxuLS1cXG5tbS9ub21tdS5jPTE2ODU9aW50IGFjY2Vzc19yZW1vdGVfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL25vbW11LmMtMTY4Ny17XFxubW0vbm9tbXUuYzoxNjg4OlxcdHJldHVybiBfX2FjY2Vzc19yZW1vdGVfdm0obW0sIGFkZHIsIGJ1ZiwgbGVuLCBndXBfZmxhZ3MpO1xcbm1tL25vbW11LmMtMTY4OS19XFxuLS1cXG5tbS9ub21tdS5jPTE2OTU9aW50IGFjY2Vzc19wcm9jZXNzX3ZtKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmJ1ZiwgaW50IGxlbixcXG4tLVxcbm1tL25vbW11LmMtMTcwNi1cXG5tbS9ub21tdS5jOjE3MDc6XFx0bGVuID0gX19hY2Nlc3NfcmVtb3RlX3ZtKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTtcXG5tbS9ub21tdS5jLTE3MDgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDAyOjEwOjQ2LjA5ODgyMDI2NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTAyNDE2MzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBSZW1vdGUgVk0gQWNjZXNzIEZhc3QgUGF0aCoqXG5cbk9rYXksIHNvIEkndmUgemVyb2VkIGluIG9uIHRoZSBsb2NrbGVzcyBmYXN0IHBhdGggZm9yIHJlbW90ZSBtZW1vcnkgYWNjZXNzLiBgX19hY2Nlc3NfcmVtb3RlX3ZtYCBhbmQgYGFjY2Vzc19yZW1vdGVfdm1fZmFzdGAgYXJlIGRlZmluaXRlbHkgdGhlIGtleSBmb2N1cyBzeW1ib2xzIGhlcmUuIEV2ZW4gdGhvdWdoIGBhY2Nlc3NfcmVtb3RlX3ZtX2Zhc3RgIGlzIHN0YXRpYywgc3l6a2FsbGVyIHNob3VsZCBzdGlsbCBiZSBhYmxlIHRvIHRhcmdldCBpdC4gSSdsbCBhbHNvIGFkZCBgZm9saW9fd2Fsa19zdGFydGAgdG8gdGhlIGxpc3QgYmVjYXVzZSBpdCdzIHJlbGV2YW50IHRvIHRoZSBvcGVyYXRpb24uIEFuZCBzaW5jZSB0aGUgY29kZSBtZW50aW9ucyBpdCwgSSBzaG91bGQgYWxzbyBhZGQgYGNvcHlfZm9saW9fcGFnZXNgLCBhbmQgYHZtYV9wZXJtaXRzX2Zhc3RfYWNjZXNzYC5cblxuTm93LCByZWdhcmRpbmcgY29uZmlndXJhdGlvbnMsIEkgbmVlZCB0byBjaGVjayB3aGljaCBvbmVzIGFyZSByZWxldmFudC4gYENPTkZJR19QRVJfVk1BX0xPQ0tgIGFuZCBgQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVgIGFyZSB0aGUgZ3VhcmRzIGZvciB0aGUgZmFzdCBwYXRoLiBUaGV5IGFwcGVhciB0byBiZSBlbmFibGVkIGJ5IGRlZmF1bHQgb24geDg2LCBidXQgSSdsbCBpbmNsdWRlIHRoZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24ganVzdCB0byBiZSBzYWZlLlxuXG5OZXh0LCBJIG5lZWQgdG8gY29uZmlybSByZWFjaGFiaWxpdHkuIEkgc2VlIHRoYXQgdGhlIGBwcm9jZXNzX3ZtX3JlYWR2YCBzeXNjYWxsIHVzZXMgYGFjY2Vzc19wcm9jZXNzX3ZtYCwgd2hpY2ggY2FsbHMgYF9fYWNjZXNzX3JlbW90ZV92bWAsIGFuZCBgcHRyYWNlYCB1c2VzIGl0IGFzIHdlbGwuIFRoYXQgY29uZmlybXMgaXQncyBhIGZ1bmN0aW9uYWwgcGF0aCB3ZSBjYW4gaGl0LlxuXG5TbywgaGVyZSdzIHRoZSBzdW1tYXJ5IEkndmUgZ290OlxuXG4qICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZVxuKiAgICoqRm9jdXNTeW1ib2xzOioqIGBhY2Nlc3NfcmVtb3RlX3ZtX2Zhc3RgLCBgX19hY2Nlc3NfcmVtb3RlX3ZtYCwgYGZvbGlvX3dhbGtfc3RhcnRgLCBgY29weV9mb2xpb19wYWdlc2AsIGB2bWFfcGVybWl0c19mYXN0X2FjY2Vzc2BcbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYFBFUl9WTUFfTE9DS2AsIGBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFYFxuKiAgICoqUmVhc29uaW5nOioqIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9ja2xlc3MgZmFzdCBwYXRoIGZvciByZW1vdGUgbWVtb3J5IGFjY2VzcyAoYF9fYWNjZXNzX3JlbW90ZV92bWApLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgYHB0cmFjZWAgYW5kIGBwcm9jZXNzX3ZtX3JlYWR2YCBzeXNjYWxscy4gVGhlIGZhc3QgcGF0aCByZWxpZXMgb24gcGVyLVZNQSBsb2NrcyBhbmQgUkNVLWZyZWVkIHBhZ2UgdGFibGVzLlxuXG5MZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhvc2UgY29uZmlncyBhZ2Fpbi4gQm90aCBzZWVtIHRvIGJlIHN0YW5kYXJkIGRlZmF1bHRzLCBzbyBJJ2xsIGtlZXAgdGhlbSBpbiB0aGUgbGlzdC5cblxuT2theSwgbGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMuIExldCBtZSBjaGVjay4uLnllcywgdGhlcmUncyBgdm1hX3Blcm1pdHNfZmFzdF9hY2Nlc3NgLCBgY29weV9mb2xpb19wYWdlc2AgYW5kIGBmd19lbnRyeV9zaXplYC4gVGhleSBhbGwgbG9vayByZWxldmFudCwgc28gSSdsbCBiZSBzdXJlIHRvIGluY2x1ZGUgdGhvc2UuXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQgd2l0aCB0aGlzLiBJJ2xsIGNhbGwgc2V0LXJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODUwLCJPdXRwdXRUb2tlbnMiOjE2OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwMjoxMDo1NC42MDEyNDA2OTlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODI2MTI3NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBFUl9WTUFfTE9DS1wiLFxuICAgIFwiTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFjY2Vzc19yZW1vdGVfdm1fZmFzdFwiLFxuICAgIFwiX19hY2Nlc3NfcmVtb3RlX3ZtXCIsXG4gICAgXCJmb2xpb193YWxrX3N0YXJ0XCIsXG4gICAgXCJjb3B5X2ZvbGlvX3BhZ2VzXCIsXG4gICAgXCJ2bWFfcGVybWl0c19mYXN0X2FjY2Vzc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBsb2NrbGVzcyBmYXN0IHBhdGggZm9yIHJlbW90ZSBtZW1vcnkgYWNjZXNzIChgX19hY2Nlc3NfcmVtb3RlX3ZtYCksIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgc3lzY2FsbHMgbGlrZSBgcHJvY2Vzc192bV9yZWFkdmAgYW5kIGBwdHJhY2VgLiBUaGUgZmFzdCBwYXRoIHJlbGllcyBvbiBwZXItVk1BIGxvY2tzIGFuZCBSQ1UtZnJlZWQgcGFnZSB0YWJsZXMsIG1ha2luZyBpdCBoaWdobHkgZnVuY3Rpb25hbCBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQRVJfVk1BX0xPQ0tcIixcbiAgICBcIk1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhY2Nlc3NfcmVtb3RlX3ZtX2Zhc3RcIixcbiAgICBcIl9fYWNjZXNzX3JlbW90ZV92bVwiLFxuICAgIFwiZm9saW9fd2Fsa19zdGFydFwiLFxuICAgIFwiY29weV9mb2xpb19wYWdlc1wiLFxuICAgIFwidm1hX3Blcm1pdHNfZmFzdF9hY2Nlc3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9ja2xlc3MgZmFzdCBwYXRoIGZvciByZW1vdGUgbWVtb3J5IGFjY2VzcyAoYF9fYWNjZXNzX3JlbW90ZV92bWApLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHN5c2NhbGxzIGxpa2UgYHByb2Nlc3Nfdm1fcmVhZHZgIGFuZCBgcHRyYWNlYC4gVGhlIGZhc3QgcGF0aCByZWxpZXMgb24gcGVyLVZNQSBsb2NrcyBhbmQgUkNVLWZyZWVkIHBhZ2UgdGFibGVzLCBtYWtpbmcgaXQgaGlnaGx5IGZ1bmN0aW9uYWwgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7p9dn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-25 01:54:19 +0000 UTC FinishedAt: 2026-06-25 02:10:56 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "269f2b43fae692d1f3988c9f888a6301aa537b82", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PER_VMA_LOCK", "MMU_GATHER_RCU_TABLE_FREE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "269f2b43fae692d1f3988c9f888a6301aa537b82", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PER_VMA_LOCK", "MMU_GATHER_RCU_TABLE_FREE" ], "series_id": "b616dfd4-c776-4fb2-b2c8-c77c3484c8f4" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "access_remote_vm_fast", "__access_remote_vm", "folio_walk_start", "copy_folio_pages", "vma_permits_fast_access" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDAyOjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BFUl9WTUFfTE9DSyYjMzQ7LAogICAgJiMzNDtNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWNjZXNzX3JlbW90ZV92bV9mYXN0JiMzNDssCiAgICAmIzM0O19fYWNjZXNzX3JlbW90ZV92bSYjMzQ7LAogICAgJiMzNDtmb2xpb193YWxrX3N0YXJ0JiMzNDssCiAgICAmIzM0O2NvcHlfZm9saW9fcGFnZXMmIzM0OywKICAgICYjMzQ7dm1hX3Blcm1pdHNfZmFzdF9hY2Nlc3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxvY2tsZXNzIGZhc3QgcGF0aCBmb3IgcmVtb3RlIG1lbW9yeSBhY2Nlc3MgKGBfX2FjY2Vzc19yZW1vdGVfdm1gKSwgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBzeXNjYWxscyBsaWtlIGBwcm9jZXNzX3ZtX3JlYWR2YCBhbmQgYHB0cmFjZWAuIFRoZSBmYXN0IHBhdGggcmVsaWVzIG9uIHBlci1WTUEgbG9ja3MgYW5kIFJDVS1mcmVlZCBwYWdlIHRhYmxlcywgbWFraW5nIGl0IGhpZ2hseSBmdW5jdGlvbmFsIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDAyOjEwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTYwMTc0NDI2MjNlYTRlNmVkNTBkOWI2MDAzYmZiZTBmNGM5NDM4OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVuIDI1IDAyOjEwOjEzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oXG5pbmRleCBlZjViNTA3ZGUzNGUyZS4uY2VlNzEwZjY0NjU4YWEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oXG5AQCAtMTAwLDE4ICYjNDM7MTAwLDE4IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtbV9sYW1fY3IzX21hc2soc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gc3RhdGljIGlubGluZSB2b2lkIGR1cF9sYW0oc3RydWN0IG1tX3N0cnVjdCAqb2xkbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIHtcbiBcdG1tLVx1MDAzZWNvbnRleHQubGFtX2NyM19tYXNrID0gb2xkbW0tXHUwMDNlY29udGV4dC5sYW1fY3IzX21hc2s7XG4tXHRtbS1cdTAwM2Vjb250ZXh0LnVudGFnX21hc2sgPSBvbGRtbS1cdTAwM2Vjb250ZXh0LnVudGFnX21hc2s7XG4mIzQzO1x0V1JJVEVfT05DRShtbS1cdTAwM2Vjb250ZXh0LnVudGFnX21hc2ssIFJFQURfT05DRShvbGRtbS1cdTAwM2Vjb250ZXh0LnVudGFnX21hc2spKTtcbiB9XG4gXG4gI2RlZmluZSBtbV91bnRhZ19tYXNrIG1tX3VudGFnX21hc2tcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbW1fdW50YWdfbWFzayhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiB7XG4tXHRyZXR1cm4gbW0tXHUwMDNlY29udGV4dC51bnRhZ19tYXNrO1xuJiM0MztcdHJldHVybiBSRUFEX09OQ0UobW0tXHUwMDNlY29udGV4dC51bnRhZ19tYXNrKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIG1tX3Jlc2V0X3VudGFnX21hc2soc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4ge1xuLVx0bW0tXHUwMDNlY29udGV4dC51bnRhZ19tYXNrID0gLTFVTDtcbiYjNDM7XHRXUklURV9PTkNFKG1tLVx1MDAzZWNvbnRleHQudW50YWdfbWFzaywgLTFVTCk7XG4gfVxuIFxuICNkZWZpbmUgYXJjaF9wZ3RhYmxlX2RtYV9jb21wYXQgYXJjaF9wZ3RhYmxlX2RtYV9jb21wYXRcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzXzY0LmhcbmluZGV4IDIwZGUzNGNjOWFhNmU3Li45MzNiMGI4YjRkNjA0NyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oXG5AQCAtMzksMTEgJiM0MzszOSwyMyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX191bnRhZ2dlZF9hZGRyKHVuc2lnbmVkIGxvbmcgYWRkcilcbiBcdChfX2ZvcmNlIF9fdHlwZW9mX18oYWRkcikpX191bnRhZ2dlZF9hZGRyKF9fYWRkcik7XHRcdFxcXG4gfSlcbiBcbiYjNDM7LyogU3RyaXAgdGhlIHRhZyBiaXRzIGZyb20gYSByZW1vdGUgbW0mIzM5O3MgYWRkcmVzczsgdXNhYmxlIHdpdGhvdXQgdGhlIG1tYXAgbG9jay4gKi9cbiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fdW50YWdnZWRfYWRkcl9yZW1vdGVfdW5sb2NrZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgYWRkcilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBhZGRyIFx1MDAyNiBSRUFEX09OQ0UobW0tXHUwMDNlY29udGV4dC51bnRhZ19tYXNrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2RlZmluZSB1bnRhZ2dlZF9hZGRyX3JlbW90ZV91bmxvY2tlZChtbSwgYWRkcilcdCh7XHRcdFx0XFxcbiYjNDM7XHR1bnNpZ25lZCBsb25nIF9fYWRkciA9IChfX2ZvcmNlIHVuc2lnbmVkIGxvbmcpKGFkZHIpO1x0XHRcXFxuJiM0MztcdChfX2ZvcmNlIF9fdHlwZW9mX18oYWRkcikpX191bnRhZ2dlZF9hZGRyX3JlbW90ZV91bmxvY2tlZChtbSwgX19hZGRyKTsgXFxcbiYjNDM7fSlcbiYjNDM7XG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fdW50YWdnZWRfYWRkcl9yZW1vdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gXHRcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBhZGRyKVxuIHtcbiBcdG1tYXBfYXNzZXJ0X2xvY2tlZChtbSk7XG4tXHRyZXR1cm4gYWRkciBcdTAwMjYgKG1tKS1cdTAwM2Vjb250ZXh0LnVudGFnX21hc2s7XG4mIzQzO1x0cmV0dXJuIF9fdW50YWdnZWRfYWRkcl9yZW1vdGVfdW5sb2NrZWQobW0sIGFkZHIpO1xuIH1cbiBcbiAjZGVmaW5lIHVudGFnZ2VkX2FkZHJfcmVtb3RlKG1tLCBhZGRyKVx0KHtcdFx0XHRcdFxcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmNcbmluZGV4IGQ0NGFmYmUwMDViYjUxLi41NTA5NjEzNmRlNTMxMyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmNcbkBAIC04MTQsNyAmIzQzOzgxNCw3IEBAIHN0YXRpYyB2b2lkIGVuYWJsZV9sYW1fZnVuYyh2b2lkICpfX21tKVxuIHN0YXRpYyB2b2lkIG1tX2VuYWJsZV9sYW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4ge1xuIFx0bW0tXHUwMDNlY29udGV4dC5sYW1fY3IzX21hc2sgPSBYODZfQ1IzX0xBTV9VNTc7XG4tXHRtbS1cdTAwM2Vjb250ZXh0LnVudGFnX21hc2sgPSAgfkdFTk1BU0soNjIsIDU3KTtcbiYjNDM7XHRXUklURV9PTkNFKG1tLVx1MDAzZWNvbnRleHQudW50YWdfbWFzaywgfkdFTk1BU0soNjIsIDU3KSk7XG4gXG4gXHQvKlxuIFx0ICogRXZlbiB0aG91Z2ggdGhlIHByb2Nlc3MgbXVzdCBzdGlsbCBiZSBzaW5nbGUtdGhyZWFkZWQgYXQgdGhpc1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZXdhbGsuaCBiL2luY2x1ZGUvbGludXgvcGFnZXdhbGsuaFxuaW5kZXggYjQxZDcyNjVjMDFiYzIuLmQwMzg3NDcwZDczMjJiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdld2Fsay5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmhcbkBAIC0xNTAsNiAmIzQzOzE1MCwxMyBAQCB0eXBlZGVmIGludCBfX2JpdHdpc2UgZm9saW9fd2Fsa19mbGFnc190O1xuIFxuIC8qIFdhbGsgc2hhcmVkIHplcm9wYWdlcyAoc21hbGwgJiM0MzsgaHVnZSkgYXMgd2VsbC4gKi9cbiAjZGVmaW5lIEZXX1pFUk9QQUdFXHRcdFx0KChfX2ZvcmNlIGZvbGlvX3dhbGtfZmxhZ3NfdClCSVQoMCkpXG4mIzQzOy8qXG4mIzQzOyAqIFRoZSBjYWxsZXIgaG9sZHMgdGhlIHBlci1WTUEgbG9jayBpbnN0ZWFkIG9mIHRoZSBtbWFwIGxvY2ssIHdpdGggaW50ZXJydXB0c1xuJiM0MzsgKiBkaXNhYmxlZCBhY3Jvc3MgdGhlIHdhbGsgKHVudGlsIGZvbGlvX3dhbGtfZW5kKCkpIHRvIHNlcmlhbGl6ZSBhZ2FpbnN0IHBhZ2VcbiYjNDM7ICogdGFibGUgZnJlZWluZywgdGhlIHNhbWUgd2F5IGd1cF9mYXN0IGRvZXMuIE9ubHkgdmFsaWQgd2l0aCBSQ1UtZnJlZWQgcGFnZVxuJiM0MzsgKiB0YWJsZXMgKENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFKSBhbmQgbm90IGZvciBodWdldGxiLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBGV19WTUFfTE9DS0VEXHRcdFx0KChfX2ZvcmNlIGZvbGlvX3dhbGtfZmxhZ3NfdClCSVQoMSkpXG4gXG4gZW51bSBmb2xpb193YWxrX2xldmVsIHtcbiBcdEZXX0xFVkVMX1BURSxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaCBiL2luY2x1ZGUvbGludXgvdWFjY2Vzcy5oXG5pbmRleCA4YTI2NDY2MmIyNDJjOC4uYzhjODMzNzJjOWQ4NzggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC91YWNjZXNzLmhcbkBAIC0zNCw2ICYjNDM7MzQsMTcgQEBcbiB9KVxuICNlbmRpZlxuIFxuJiM0MzsvKlxuJiM0MzsgKiBMaWtlIHVudGFnZ2VkX2FkZHJfcmVtb3RlKCksIGJ1dCBmb3IgY2FsbGVycyB0aGF0IHN0YWJpbGl6ZSBAbW0gYnkgb3RoZXJcbiYjNDM7ICogbWVhbnMgKGUuZy4gYSBwZXItVk1BIGxvY2spIGFuZCBtdXN0IG5vdCBhc3NlcnQgdGhlIG1tYXAgbG9jay5cbiYjNDM7ICovXG4mIzQzOyNpZm5kZWYgdW50YWdnZWRfYWRkcl9yZW1vdGVfdW5sb2NrZWRcbiYjNDM7I2RlZmluZSB1bnRhZ2dlZF9hZGRyX3JlbW90ZV91bmxvY2tlZChtbSwgYWRkcilcdCh7XHRcXFxuJiM0MztcdCh2b2lkKShtbSk7XHRcdFx0XHRcdFxcXG4mIzQzO1x0dW50YWdnZWRfYWRkcihhZGRyKTtcdFx0XHRcdFxcXG4mIzQzO30pXG4mIzQzOyNlbmRpZlxuJiM0MztcbiAjaWZkZWYgbWFza2VkX3VzZXJfYWNjZXNzX2JlZ2luXG4gICNkZWZpbmUgY2FuX2RvX21hc2tlZF91c2VyX2FjY2VzcygpIDFcbiAjIGlmbmRlZiBtYXNrZWRfdXNlcl93cml0ZV9hY2Nlc3NfYmVnaW5cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCA4NmE5NzMxMTliZDQ2Yy4uZDJiMmYwMDE0YTBjNjYgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmNcbkBAIC00Miw2ICYjNDM7NDIsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbF9zdGF0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW1faW5saW5lLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2VjcmV0bWVtLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZXdhbGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvdGFzay5oXHUwMDNlXG5AQCAtNzA2Miw2ICYjNDM7NzA2NCwxODAgQEAgaW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBFWFBPUlRfU1lNQk9MX0dQTChnZW5lcmljX2FjY2Vzc19waHlzKTtcbiAjZW5kaWZcbiBcbiYjNDM7LypcbiYjNDM7ICogVGhlIGZhc3QgcGF0aCB1c2VzIGZvbGlvX3dhbGtfc3RhcnQoRldfVk1BX0xPQ0tFRCksIHdoaWNoIG5lZWRzIHRoZSBwZXItVk1BXG4mIzQzOyAqIGxvY2sgYW5kIFJDVS1mcmVlZCBwYWdlIHRhYmxlcyB0byB3YWxrIHBhZ2UgdGFibGVzIHdpdGhvdXQgdGhlIG1tYXAgbG9jay5cbiYjNDM7ICovXG4mIzQzOyNpZiBkZWZpbmVkKENPTkZJR19QRVJfVk1BX0xPQ0spIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFKVxuJiM0MzsvKlxuJiM0MzsgKiBSZWFkLXNpZGUgVk1BIGNoZWNrcyBmb3IgdGhlIGxvY2tsZXNzIGZhc3QgcGF0aCwgbWlycm9yaW5nIHRoZSByZWFkIHNpZGUgb2ZcbiYjNDM7ICogY2hlY2tfdm1hX2ZsYWdzKCk6IHJlamVjdCB3aGF0IEZXX1ZNQV9MT0NLRUQgY2Fubm90IGhhbmRsZSAoaHVnZXRsYiksIHdoYXRcbiYjNDM7ICogbmVlZHMgdGhlIC1cdTAwM2VhY2Nlc3MoKSBoYW5kbGVyIChWTV9JTy9WTV9QRk5NQVApLCBvciB3aGF0IGhhcyBubyBzdHJ1Y3QgcGFnZSB0b1xuJiM0MzsgKiBjb3B5IChzZWNyZXRtZW0pOyBlbmZvcmNlIHRoZSBGT0xMX0FOT04gcmVzdHJpY3Rpb24gdGhhdFxuJiM0MzsgKiAvcHJvYy9QSUQve2NtZGxpbmUsZW52aXJvbn0gcmVseSBvbiAoQ1ZFLTIwMTgtMTEyMCk7IGFuZCByZXF1aXJlIHJlYWQgYWNjZXNzXG4mIzQzOyAqIChob25vcmluZyBGT0xMX0ZPUkNFKS4gIEFueXRoaW5nIG5vdCBwb3NpdGl2ZWx5IGFsbG93ZWQgZmFsbHMgYmFjayB0byB0aGUgc2xvd1xuJiM0MzsgKiBwYXRoLCB3aGljaCByZS12YWxpZGF0ZXMgZXZlcnl0aGluZy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIHZtYV9wZXJtaXRzX2Zhc3RfYWNjZXNzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuJiM0MztcdFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgKFZNX0lPIHwgVk1fUEZOTUFQKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRpZiAoaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkgfHwgdm1hX2lzX3NlY3JldG1lbSh2bWEpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdGlmICgoZ3VwX2ZsYWdzIFx1MDAyNiBGT0xMX0FOT04pIFx1MDAyNlx1MDAyNiAhdm1hX2lzX2Fub255bW91cyh2bWEpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdGlmICghKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUkVBRCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICghKGd1cF9mbGFncyBcdTAwMjYgRk9MTF9GT1JDRSkgfHwgISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX01BWVJFQUQpKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogU2l6ZSBvZiB0aGUgc2luZ2xlIG1hcHBpbmcgZW50cnkgZm9saW9fd2Fsa19zdGFydCgpIGxhbmRlZCBvbi4gKi9cbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgZndfZW50cnlfc2l6ZShlbnVtIGZvbGlvX3dhbGtfbGV2ZWwgbGV2ZWwpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKGxldmVsKSB7XG4mIzQzO1x0Y2FzZSBGV19MRVZFTF9QVUQ6XG4mIzQzO1x0XHRyZXR1cm4gUFVEX1NJWkU7XG4mIzQzO1x0Y2FzZSBGV19MRVZFTF9QTUQ6XG4mIzQzO1x0XHRyZXR1cm4gUE1EX1NJWkU7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiBQQUdFX1NJWkU7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBDb3B5IEBsZW4gYnl0ZXMgb2YgdGhlIHBpbm5lZCBAZm9saW8gb3V0IHRvIEBidWYsIHN0YXJ0aW5nIGF0IGJ5dGUgb2Zmc2V0XG4mIzQzOyAqIEBmb2xpb19vZmYgd2l0aGluIHRoZSBmb2xpbyAodGhlIHBvc2l0aW9uIG9mIEBhZGRyKS4gIE1hcHMgYW5kIGNvcGllcyBvbmVcbiYjNDM7ICogcGFnZSBhdCBhIHRpbWUgLS0ga21hcF9sb2NhbF9mb2xpbygpIGZvciBISUdITUVNLCBjb3B5X2Zyb21fdXNlcl9wYWdlKCkgZm9yXG4mIzQzOyAqIHRoZSBwZXItcGFnZSBmbHVzaCBvbiBhbGlhc2luZyBjYWNoZXMgLS0gd2l0aG91dCByZS13YWxraW5nIHBhZ2UgdGFibGVzLlxuJiM0MzsgKiBFYWNoIHBhZ2UgYm9ycm93cyB0aGUgY2FsbGVyJiMzOTtzIHNpbmdsZSBmb2xpbyByZWZlcmVuY2UsIHNvIHRoZSBtYXBwaW5nIGlzXG4mIzQzOyAqIGRyb3BwZWQgd2l0aCBrdW5tYXBfbG9jYWwoKSByYXRoZXIgdGhhbiBmb2xpb19yZWxlYXNlX2ttYXAoKS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGNvcHlfZm9saW9fcGFnZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBmb2xpb19vZmYsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiYjNDM7XHRcdFx0ICAgICB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgbGVuKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBkb25lID0gMDtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKGRvbmUgXHUwMDNjIGxlbikge1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBwb3MgPSBmb2xpb19vZmYgJiM0MzsgZG9uZTtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgcGFnZV9pZHggPSBwb3MgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgcGFnZV9vZmYgPSBwb3MgXHUwMDI2IH5QQUdFX01BU0s7XG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgY2h1bmsgPSBtaW5fdCh1bnNpZ25lZCBsb25nLCBsZW4gLSBkb25lLFxuJiM0MztcdFx0XHRcdFx0ICAgUEFHRV9TSVpFIC0gcGFnZV9vZmYpO1xuJiM0MztcdFx0dm9pZCAqa2FkZHIgPSBrbWFwX2xvY2FsX2ZvbGlvKGZvbGlvLCBwYWdlX2lkeCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG4mIzQzO1xuJiM0MztcdFx0Y29weV9mcm9tX3VzZXJfcGFnZSh2bWEsIGZvbGlvX3BhZ2UoZm9saW8sIHBhZ2VfaWR4KSxcbiYjNDM7XHRcdFx0XHQgICAgYWRkciAmIzQzOyBkb25lLCBidWYgJiM0MzsgZG9uZSwga2FkZHIgJiM0MzsgcGFnZV9vZmYsXG4mIzQzO1x0XHRcdFx0ICAgIGNodW5rKTtcbiYjNDM7XHRcdGt1bm1hcF9sb2NhbChrYWRkcik7XG4mIzQzO1x0XHRkb25lICYjNDM7PSBjaHVuaztcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIE9wcG9ydHVuaXN0aWMgbG9ja2xlc3MgZmFzdCBwYXRoIGZvciBfX2FjY2Vzc19yZW1vdGVfdm0oKSByZWFkcy5cbiYjNDM7ICpcbiYjNDM7ICogTWVtb3J5IGFscmVhZHkgcmVzaWRlbnQgaW4gQG1tIGNhbiBiZSByZWFkIHdpdGhvdXQgdGFraW5nIHRoZSBmcmVxdWVudGx5XG4mIzQzOyAqIGNvbnRlbmRlZCBtbWFwX2xvY2s6IGEgcGVyLVZNQSBsb2NrIHN0YWJpbGl6ZXMgdGhlIFZNQSwgYW5kIGZvbGlvX3dhbGtfc3RhcnQoKVxuJiM0MzsgKiB3aXRoIEZXX1ZNQV9MT0NLRUQgZ3JhYnMgYSBzaG9ydC1saXZlZCByZWZlcmVuY2UgdG8gYSBwcmVzZW50IHBhZ2UgZnJvbSBhIHBhZ2VcbiYjNDM7ICogdGFibGUgd2FsayBydW4gd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLCB3aGljaCBzZXJpYWxpemVzIGFnYWluc3QgY29uY3VycmVudFxuJiM0MzsgKiBwYWdlIHRhYmxlIGZyZWVpbmcgdGhlIHNhbWUgd2F5IGd1cF9mYXN0IGRvZXMgKHJlbHlpbmcgb25cbiYjNDM7ICogTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSkuXG4mIzQzOyAqXG4mIzQzOyAqIE9ubHkgYSByZXF1ZXN0IHRoYXQgbGllcyBlbnRpcmVseSB3aXRoaW4gYSBzaW5nbGUgVk1BIGlzIGhhbmRsZWQgaGVyZSxcbiYjNDM7ICogd2hpY2ggc2hvdWxkIG5vdCBiZSBhbiBpc3N1ZSBpbiBwcmFjdGljZSBzaW5jZSBldmVyeSBjYWxsZXIgaGFzIGFcbiYjNDM7ICogYnVmZmVyIG9mIFBBR0VfU0laRSBvciBzbWFsbGVyLiBMb29wIGl0ZXJhdGlvbiBpbnNpZGUgdGhpcyBmdW5jdGlvblxuJiM0MzsgKiBzaG91bGQgYmUgcmFyZSwgdG9vLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgdmlhIHRoZSBmYXN0IHBhdGguXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGFjY2Vzc19yZW1vdGVfdm1fZmFzdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuJiM0MztcdFx0XHRcdCB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHR2b2lkICpvbGRfYnVmID0gYnVmO1xuJiM0MztcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuJiM0MztcbiYjNDM7XHRhZGRyID0gdW50YWdnZWRfYWRkcl9yZW1vdGVfdW5sb2NrZWQobW0sIGFkZHIpO1xuJiM0MztcbiYjNDM7XHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHIpO1xuJiM0MztcdGlmICghdm1hKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdC8qIE9ubHkgaGFuZGxlIGEgcmVxdWVzdCBjb250YWluZWQgZW50aXJlbHkgd2l0aGluIHRoaXMgb25lIFZNQS4gKi9cbiYjNDM7XHRpZiAobGVuIFx1MDAzZSB2bWEtXHUwMDNldm1fZW5kIC0gYWRkcilcbiYjNDM7XHRcdGdvdG8gb3V0X3VubG9jaztcbiYjNDM7XG4mIzQzO1x0aWYgKCF2bWFfcGVybWl0c19mYXN0X2FjY2Vzcyh2bWEsIGd1cF9mbGFncykpXG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChsZW4pIHtcbiYjNDM7XHRcdHN0cnVjdCBmb2xpb193YWxrIGZ3O1xuJiM0MztcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiYjNDM7XHRcdHN0cnVjdCBwYWdlICpwYWdlO1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBlbnRyeV9zaXplLCBmb2xpb19vZmYsIHNwYW4sIGlycV9mbGFncztcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVGhlIGxvY2tsZXNzIHBhZ2UgdGFibGUgd2FsayBtdXN0IHJ1biB3aXRoIGludGVycnVwdHNcbiYjNDM7XHRcdCAqIGRpc2FibGVkOiBwYWdlIHRhYmxlIGZyZWVpbmcgKG11bm1hcCBvciBUSFAgY29sbGFwc2UsIHdoaWNoXG4mIzQzO1x0XHQgKiBJUEkgdmlhIHRsYl9yZW1vdmVfdGFibGVfc3luY19vbmUoKSBhbmQgd2FpdCkgdGhlbiBjYW5ub3QgZnJlZVxuJiM0MztcdFx0ICogYSB0YWJsZSBtaWQtd2FsayAtLSB0aGUgc2FtZSBjb250cmFjdCBndXBfZmFzdCByZWxpZXMgb24uICBJUlFzXG4mIzQzO1x0XHQgKiBhcmUgcmVzdG9yZWQgb25jZSB0aGUgZm9saW8gaXMgcGlubmVkOyB0aGUgY29weSBiZWxvdyBob2xkcyBvbmx5XG4mIzQzO1x0XHQgKiB0aGUgZm9saW8gcmVmZXJlbmNlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRsb2NhbF9pcnFfc2F2ZShpcnFfZmxhZ3MpO1xuJiM0MztcdFx0Zm9saW8gPSBmb2xpb193YWxrX3N0YXJ0KFx1MDAyNmZ3LCB2bWEsIGFkZHIsIEZXX1ZNQV9MT0NLRUQpO1xuJiM0MztcdFx0aWYgKCFmb2xpbykge1xuJiM0MztcdFx0XHRsb2NhbF9pcnFfcmVzdG9yZShpcnFfZmxhZ3MpO1xuJiM0MztcdFx0XHRnb3RvIG91dF91bmxvY2s7XHQvKiBub3QgcHJlc2VudDogbGV0IHRoZSBzbG93IHBhdGggZmF1bHQgaXQgaW4gKi9cbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHBhZ2UgPSBmdy5wYWdlO1xuJiM0MztcdFx0aWYgKCFwYWdlKSB7XG4mIzQzO1x0XHRcdC8qIE5vIHN0cnVjdCBwYWdlIHRvIGNvcHkgKGUuZy4gYSBzcGVjaWFsIFBURSkuICovXG4mIzQzO1x0XHRcdGZvbGlvX3dhbGtfZW5kKFx1MDAyNmZ3LCB2bWEpO1xuJiM0MztcdFx0XHRsb2NhbF9pcnFfcmVzdG9yZShpcnFfZmxhZ3MpO1xuJiM0MztcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRlbnRyeV9zaXplID0gZndfZW50cnlfc2l6ZShmdy5sZXZlbCk7XG4mIzQzO1x0XHRmb2xpb19nZXQoZm9saW8pO1xuJiM0MztcdFx0Zm9saW9fd2Fsa19lbmQoXHUwMDI2ZncsIHZtYSk7XG4mIzQzO1x0XHRsb2NhbF9pcnFfcmVzdG9yZShpcnFfZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBmb2xpb193YWxrX3N0YXJ0KCkgdmFsaWRhdGVkIG9uZSBwcmVzZW50IG1hcHBpbmcgZW50cnlcbiYjNDM7XHRcdCAqIChQQUdFL1BNRC9QVURfU0laRSkuICBDb3B5IHRvIHRoZSBlbmQgb2YgdGhhdCBlbnRyeSwgYm91bmRlZCBieVxuJiM0MztcdFx0ICogdGhlIGZvbGlvIGFuZCB0aGUgcmVtYWluaW5nIGxlbmd0aCAoYWxyZWFkeSB3aXRoaW4gdGhlIFZNQSksIHNvXG4mIzQzO1x0XHQgKiBhIGh1Z2UgbWFwcGluZyBpcyBoYW5kbGVkIGluIGEgc2luZ2xlIHdhbGsuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGZvbGlvX29mZiA9IChmb2xpb19wYWdlX2lkeChmb2xpbywgcGFnZSkgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpICYjNDM7XG4mIzQzO1x0XHRcdCAgICBvZmZzZXRfaW5fcGFnZShhZGRyKTtcbiYjNDM7XHRcdHNwYW4gPSBtaW4zKCh1bnNpZ25lZCBsb25nKWxlbixcbiYjNDM7XHRcdFx0ICAgIGVudHJ5X3NpemUgLSAoYWRkciBcdTAwMjYgKGVudHJ5X3NpemUgLSAxKSksXG4mIzQzO1x0XHRcdCAgICAoZm9saW9fbnJfcGFnZXMoZm9saW8pIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSAtIGZvbGlvX29mZik7XG4mIzQzO1xuJiM0MztcdFx0Y29weV9mb2xpb19wYWdlcyh2bWEsIGZvbGlvLCBmb2xpb19vZmYsIGFkZHIsIGJ1Ziwgc3Bhbik7XG4mIzQzO1xuJiM0MztcdFx0LyogTWF0Y2ggdGhlIEZPTExfVE9VQ0ggYmVoYXZpb3VyIG9mIHRoZSBzbG93IChHVVApIHBhdGguICovXG4mIzQzO1x0XHRmb2xpb19tYXJrX2FjY2Vzc2VkKGZvbGlvKTtcbiYjNDM7XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4mIzQzO1x0XHRsZW4gLT0gc3BhbjtcbiYjNDM7XHRcdGJ1ZiAmIzQzOz0gc3BhbjtcbiYjNDM7XHRcdGFkZHIgJiM0Mzs9IHNwYW47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7b3V0X3VubG9jazpcbiYjNDM7XHR2bWFfZW5kX3JlYWQodm1hKTtcbiYjNDM7XHRyZXR1cm4gYnVmIC0gb2xkX2J1ZjtcbiYjNDM7fVxuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW50IGFjY2Vzc19yZW1vdGVfdm1fZmFzdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuJiM0MztcdFx0XHRcdCB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MzsjZW5kaWYgLyogQ09ORklHX1BFUl9WTUFfTE9DSyBcdTAwMjZcdTAwMjYgQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgKi9cbiYjNDM7XG4gLypcbiAgKiBBY2Nlc3MgYW5vdGhlciBwcm9jZXNzJiMzOTsgYWRkcmVzcyBzcGFjZSBhcyBnaXZlbiBpbiBtbS5cbiAgKi9cbkBAIC03MDcxLDE1ICYjNDM7NzI0NywzMCBAQCBzdGF0aWMgaW50IF9fYWNjZXNzX3JlbW90ZV92bShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0dm9pZCAqb2xkX2J1ZiA9IGJ1ZjtcbiBcdGludCB3cml0ZSA9IGd1cF9mbGFncyBcdTAwMjYgRk9MTF9XUklURTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRyeSB0aGUgbG9ja2xlc3MgZmFzdCBwYXRoIGZvciByZWFkcyBmaXJzdDsgaXQgdHJhbnNmZXJzIHdoYXQgaXQgY2FuXG4mIzQzO1x0ICogZnJvbSByZXNpZGVudCBtZW1vcnkgd2l0aG91dCB0YWtpbmcgbW1hcF9sb2NrLCBhbmQgbGVhdmVzIHRoZVxuJiM0MztcdCAqIHJlbWFpbmRlciAoaWYgYW55KSB0byB0aGUgc2xvdyBwYXRoIGJlbG93LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghd3JpdGUpIHtcbiYjNDM7XHRcdGludCBkb25lID0gYWNjZXNzX3JlbW90ZV92bV9mYXN0KG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0XHRhZGRyICYjNDM7PSBkb25lO1xuJiM0MztcdFx0YnVmICYjNDM7PSBkb25lO1xuJiM0MztcdFx0bGVuIC09IGRvbmU7XG4mIzQzO1x0XHRpZiAoIWxlbilcbiYjNDM7XHRcdFx0cmV0dXJuIGJ1ZiAtIG9sZF9idWY7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChtbWFwX3JlYWRfbG9ja19raWxsYWJsZShtbSkpXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdFx0cmV0dXJuIGJ1ZiAtIG9sZF9idWY7XG4gXG4gXHQvKiBVbnRhZyB0aGUgYWRkcmVzcyBiZWZvcmUgbG9va2luZyB1cCB0aGUgVk1BICovXG4gXHRhZGRyID0gdW50YWdnZWRfYWRkcl9yZW1vdGUobW0sIGFkZHIpO1xuIFxuIFx0LyogQXZvaWQgdHJpZ2dlcmluZyB0aGUgdGVtcG9yYXJ5IHdhcm5pbmcgaW4gX19nZXRfdXNlcl9wYWdlcyAqL1xuIFx0aWYgKCF2bWFfbG9va3VwKG1tLCBhZGRyKSBcdTAwMjZcdTAwMjYgIWV4cGFuZF9zdGFjayhtbSwgYWRkcikpXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdFx0cmV0dXJuIGJ1ZiAtIG9sZF9idWY7XG4gXG4gXHQvKiBpZ25vcmUgZXJyb3JzLCBqdXN0IGNoZWNrIGhvdyBtdWNoIHdhcyBzdWNjZXNzZnVsbHkgdHJhbnNmZXJyZWQgKi9cbiBcdHdoaWxlIChsZW4pIHtcbmRpZmYgLS1naXQgYS9tbS9wYWdld2Fsay5jIGIvbW0vcGFnZXdhbGsuY1xuaW5kZXggM2FlMjU4NmZmNDViNDQuLmFiMWU4MTk4M2NiOGM3IDEwMDY0NFxuLS0tIGEvbW0vcGFnZXdhbGsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZXdhbGsuY1xuQEAgLTg5MCw3ICYjNDM7ODkwLDEwIEBAIGludCB3YWxrX3BhZ2VfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBmaXJzdF9pbmRleCxcbiAgKiBodWdlX3B0ZXBfc2V0XyosIC4uLikuIE5vdGUgdGhhdCB0aGUgcGFnZSB0YWJsZSBlbnRyeSBzdG9yZWQgaW4gQGZ3IG1pZ2h0XG4gICogbm90IGNvcnJlc3BvbmQgdG8gdGhlIGZpcnN0IHBoeXNpY2FsIGVudHJ5IG9mIGEgbG9naWNhbCBodWdldGxiIGVudHJ5LlxuICAqXG4tICogVGhlIG1tYXAgbG9jayBtdXN0IGJlIGhlbGQgaW4gcmVhZCBtb2RlLlxuJiM0MzsgKiBUaGUgbW1hcCBsb2NrIG11c3QgYmUgaGVsZCBpbiByZWFkIG1vZGUuIEFsdGVybmF0aXZlbHksIGlmIEBGV19WTUFfTE9DS0VEIGlzXG4mIzQzOyAqIHBhc3NlZCwgdGhlIFZNQSYjMzk7cyBwZXItVk1BIGxvY2sgbXVzdCBiZSBoZWxkIGFuZCBpbnRlcnJ1cHRzIG11c3QgYmUgZGlzYWJsZWRcbiYjNDM7ICogYWNyb3NzIHRoZSB3YWxrIGFuZCB1bnRpbCBmb2xpb193YWxrX2VuZCgpIChvbmx5IHN1cHBvcnRlZCB3aXRoIFJDVS1mcmVlZCBwYWdlXG4mIzQzOyAqIHRhYmxlcywgaS5lLiBDT05GSUdfTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSwgYW5kIG5vdCBmb3IgaHVnZXRsYikuXG4gICpcbiAgKiBSZXR1cm46IGZvbGlvIHBvaW50ZXIgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIE5VTEwuXG4gICovXG5AQCAtOTA4LDcgJiM0Mzs5MTEsMjkgQEAgc3RydWN0IGZvbGlvICpmb2xpb193YWxrX3N0YXJ0KHN0cnVjdCBmb2xpb193YWxrICpmdyxcbiBcdHBnZF90ICpwZ2RwO1xuIFx0cDRkX3QgKnA0ZHA7XG4gXG4tXHRtbWFwX2Fzc2VydF9sb2NrZWQodm1hLVx1MDAzZXZtX21tKTtcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IEZXX1ZNQV9MT0NLRUQpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBMb2NrbGVzcyB3YWxrIHVuZGVyIHRoZSBwZXItVk1BIGxvY2sgaW5zdGVhZCBvZiB0aGUgbW1hcFxuJiM0MztcdFx0ICogbG9jay4gVGhlIFZNQSBsb2NrIGtlZXBzIHRoZSBWTUEgc3RhYmxlLCBidXQgdGhlIHBhZ2UgdGFibGVzXG4mIzQzO1x0XHQgKiB3YWxrZWQgYmVsb3cgaXQgY2FuIHN0aWxsIGJlIGZyZWVkIGNvbmN1cnJlbnRseTogYSBtdW5tYXAoKSBvclxuJiM0MztcdFx0ICogVEhQIGNvbGxhcHNlIG9mIGFuIGFkamFjZW50IHJlZ2lvbiBpbiB0aGUgc2FtZSBtbSBjYW4gZnJlZSBhXG4mIzQzO1x0XHQgKiBzaGFyZWQgdXBwZXItbGV2ZWwgdGFibGUsIGFuZCBjb2xsYXBzZV9odWdlX3BhZ2UoKSAtXHUwMDNlXG4mIzQzO1x0XHQgKiByZXRyYWN0X3BhZ2VfdGFibGVzKCkgZnJlZXMgcGFnZSB0YWJsZXMgb2YgVk1BcyB3aG9zZSBsb2NrIGl0XG4mIzQzO1x0XHQgKiBkb2VzIG5vdCBob2xkLiBQYWdlIHRhYmxlIGZyZWVpbmcgc2VyaWFsaXplcyBhZ2FpbnN0IGxvY2tsZXNzXG4mIzQzO1x0XHQgKiB3YWxrZXJzIHZpYSB0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfb25lKCksIHdoaWNoIElQSXMgYW5kIHdhaXRzXG4mIzQzO1x0XHQgKiBmb3IgZXZlcnkgQ1BVIHRvIGVuYWJsZSBpbnRlcnJ1cHRzOyBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsXG4mIzQzO1x0XHQgKiBzZWN0aW9uIGRvZXMgbm90IGJsb2NrIHRoYXQgSVBJLCBzbyB0aGUgY2FsbGVyIG11c3Qga2VlcFxuJiM0MztcdFx0ICogaW50ZXJydXB0cyBkaXNhYmxlZCBhY3Jvc3MgdGhlIHdob2xlIHdhbGssIGxpa2UgZ3VwX2Zhc3QuXG4mIzQzO1x0XHQgKiBIdWdldGxiIChQTUQgc2hhcmluZykgbWFwcyBwYWdlIHRhYmxlcyBub3QgY292ZXJlZCBieSB0aGlzXG4mIzQzO1x0XHQgKiBWTUEmIzM5O3MgbG9jayBhbmQgaXMgbm90IHN1cHBvcnRlZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0Vk1fV0FSTl9PTl9PTkNFKCFJU19FTkFCTEVEKENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFKSk7XG4mIzQzO1x0XHRWTV9XQVJOX09OX09OQ0UoaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpO1xuJiM0MztcdFx0bG9ja2RlcF9hc3NlcnRfaXJxc19kaXNhYmxlZCgpO1xuJiM0MztcdFx0dm1hX2Fzc2VydF9sb2NrZWQodm1hKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0bW1hcF9hc3NlcnRfbG9ja2VkKHZtYS1cdTAwM2V2bV9tbSk7XG4mIzQzO1x0fVxuIFx0dm1hX3BndGFibGVfd2Fsa19iZWdpbih2bWEpO1xuIFxuIFx0aWYgKFdBUk5fT05fT05DRShhZGRyIFx1MDAzYyB2bWEtXHUwMDNldm1fc3RhcnQgfHwgYWRkciBcdTAwM2U9IHZtYS1cdTAwM2V2bV9lbmQpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDAyOjEwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BFUl9WTUFfTE9DSyYjMzQ7LAogICAgJiMzNDtNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWNjZXNzX3JlbW90ZV92bV9mYXN0JiMzNDssCiAgICAmIzM0O19fYWNjZXNzX3JlbW90ZV92bSYjMzQ7LAogICAgJiMzNDtmb2xpb193YWxrX3N0YXJ0JiMzNDssCiAgICAmIzM0O2NvcHlfZm9saW9fcGFnZXMmIzM0OywKICAgICYjMzQ7dm1hX3Blcm1pdHNfZmFzdF9hY2Nlc3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxvY2tsZXNzIGZhc3QgcGF0aCBmb3IgcmVtb3RlIG1lbW9yeSBhY2Nlc3MgKGBfX2FjY2Vzc19yZW1vdGVfdm1gKSwgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBzeXNjYWxscyBsaWtlIGBwcm9jZXNzX3ZtX3JlYWR2YCBhbmQgYHB0cmFjZWAuIFRoZSBmYXN0IHBhdGggcmVsaWVzIG9uIHBlci1WTUEgbG9ja3MgYW5kIFJDVS1mcmVlZCBwYWdlIHRhYmxlcywgbWFraW5nIGl0IGhpZ2hseSBmdW5jdGlvbmFsIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5NjAxNzQ0MjYyM2VhNGU2ZWQ1MGQ5YjYwMDNiZmJlMGY0Yzk0Mzg5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdW4gMjUgMDI6MTA6MTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAppbmRleCBlZjViNTA3ZGUzNGUyZS4uY2VlNzEwZjY0NjU4YWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaApAQCAtMTAwLDE4ICYjNDM7MTAwLDE4IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtbV9sYW1fY3IzX21hc2soc3RydWN0IG1tX3N0cnVjdCAqbW0pCiBzdGF0aWMgaW5saW5lIHZvaWQgZHVwX2xhbShzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CiAJbW0tJmd0O2NvbnRleHQubGFtX2NyM19tYXNrID0gb2xkbW0tJmd0O2NvbnRleHQubGFtX2NyM19tYXNrOwotCW1tLSZndDtjb250ZXh0LnVudGFnX21hc2sgPSBvbGRtbS0mZ3Q7Y29udGV4dC51bnRhZ19tYXNrOwomIzQzOwlXUklURV9PTkNFKG1tLSZndDtjb250ZXh0LnVudGFnX21hc2ssIFJFQURfT05DRShvbGRtbS0mZ3Q7Y29udGV4dC51bnRhZ19tYXNrKSk7CiB9CiAKICNkZWZpbmUgbW1fdW50YWdfbWFzayBtbV91bnRhZ19tYXNrCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbW1fdW50YWdfbWFzayhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKLQlyZXR1cm4gbW0tJmd0O2NvbnRleHQudW50YWdfbWFzazsKJiM0MzsJcmV0dXJuIFJFQURfT05DRShtbS0mZ3Q7Y29udGV4dC51bnRhZ19tYXNrKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIG1tX3Jlc2V0X3VudGFnX21hc2soc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7Ci0JbW0tJmd0O2NvbnRleHQudW50YWdfbWFzayA9IC0xVUw7CiYjNDM7CVdSSVRFX09OQ0UobW0tJmd0O2NvbnRleHQudW50YWdfbWFzaywgLTFVTCk7CiB9CiAKICNkZWZpbmUgYXJjaF9wZ3RhYmxlX2RtYV9jb21wYXQgYXJjaF9wZ3RhYmxlX2RtYV9jb21wYXQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaAppbmRleCAyMGRlMzRjYzlhYTZlNy4uOTMzYjBiOGI0ZDYwNDcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzXzY0LmgKQEAgLTM5LDExICYjNDM7MzksMjMgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fdW50YWdnZWRfYWRkcih1bnNpZ25lZCBsb25nIGFkZHIpCiAJKF9fZm9yY2UgX190eXBlb2ZfXyhhZGRyKSlfX3VudGFnZ2VkX2FkZHIoX19hZGRyKTsJCVwKIH0pCiAKJiM0MzsvKiBTdHJpcCB0aGUgdGFnIGJpdHMgZnJvbSBhIHJlbW90ZSBtbSYjMzk7cyBhZGRyZXNzOyB1c2FibGUgd2l0aG91dCB0aGUgbW1hcCBsb2NrLiAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3VudGFnZ2VkX2FkZHJfcmVtb3RlX3VubG9ja2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAomIzQzOwkJCQkJCQkgICAgdW5zaWduZWQgbG9uZyBhZGRyKQomIzQzO3sKJiM0MzsJcmV0dXJuIGFkZHIgJmFtcDsgUkVBRF9PTkNFKG1tLSZndDtjb250ZXh0LnVudGFnX21hc2spOwomIzQzO30KJiM0MzsKJiM0MzsjZGVmaW5lIHVudGFnZ2VkX2FkZHJfcmVtb3RlX3VubG9ja2VkKG1tLCBhZGRyKQkoewkJCVwKJiM0MzsJdW5zaWduZWQgbG9uZyBfX2FkZHIgPSAoX19mb3JjZSB1bnNpZ25lZCBsb25nKShhZGRyKTsJCVwKJiM0MzsJKF9fZm9yY2UgX190eXBlb2ZfXyhhZGRyKSlfX3VudGFnZ2VkX2FkZHJfcmVtb3RlX3VubG9ja2VkKG1tLCBfX2FkZHIpOyBcCiYjNDM7fSkKJiM0MzsKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3VudGFnZ2VkX2FkZHJfcmVtb3RlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJCQkJICAgdW5zaWduZWQgbG9uZyBhZGRyKQogewogCW1tYXBfYXNzZXJ0X2xvY2tlZChtbSk7Ci0JcmV0dXJuIGFkZHIgJmFtcDsgKG1tKS0mZ3Q7Y29udGV4dC51bnRhZ19tYXNrOwomIzQzOwlyZXR1cm4gX191bnRhZ2dlZF9hZGRyX3JlbW90ZV91bmxvY2tlZChtbSwgYWRkcik7CiB9CiAKICNkZWZpbmUgdW50YWdnZWRfYWRkcl9yZW1vdGUobW0sIGFkZHIpCSh7CQkJCVwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jCmluZGV4IGQ0NGFmYmUwMDViYjUxLi41NTA5NjEzNmRlNTMxMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jCkBAIC04MTQsNyAmIzQzOzgxNCw3IEBAIHN0YXRpYyB2b2lkIGVuYWJsZV9sYW1fZnVuYyh2b2lkICpfX21tKQogc3RhdGljIHZvaWQgbW1fZW5hYmxlX2xhbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKIAltbS0mZ3Q7Y29udGV4dC5sYW1fY3IzX21hc2sgPSBYODZfQ1IzX0xBTV9VNTc7Ci0JbW0tJmd0O2NvbnRleHQudW50YWdfbWFzayA9ICB+R0VOTUFTSyg2MiwgNTcpOwomIzQzOwlXUklURV9PTkNFKG1tLSZndDtjb250ZXh0LnVudGFnX21hc2ssIH5HRU5NQVNLKDYyLCA1NykpOwogCiAJLyoKIAkgKiBFdmVuIHRob3VnaCB0aGUgcHJvY2VzcyBtdXN0IHN0aWxsIGJlIHNpbmdsZS10aHJlYWRlZCBhdCB0aGlzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmgKaW5kZXggYjQxZDcyNjVjMDFiYzIuLmQwMzg3NDcwZDczMjJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wYWdld2Fsay5oCkBAIC0xNTAsNiAmIzQzOzE1MCwxMyBAQCB0eXBlZGVmIGludCBfX2JpdHdpc2UgZm9saW9fd2Fsa19mbGFnc190OwogCiAvKiBXYWxrIHNoYXJlZCB6ZXJvcGFnZXMgKHNtYWxsICYjNDM7IGh1Z2UpIGFzIHdlbGwuICovCiAjZGVmaW5lIEZXX1pFUk9QQUdFCQkJKChfX2ZvcmNlIGZvbGlvX3dhbGtfZmxhZ3NfdClCSVQoMCkpCiYjNDM7LyoKJiM0MzsgKiBUaGUgY2FsbGVyIGhvbGRzIHRoZSBwZXItVk1BIGxvY2sgaW5zdGVhZCBvZiB0aGUgbW1hcCBsb2NrLCB3aXRoIGludGVycnVwdHMKJiM0MzsgKiBkaXNhYmxlZCBhY3Jvc3MgdGhlIHdhbGsgKHVudGlsIGZvbGlvX3dhbGtfZW5kKCkpIHRvIHNlcmlhbGl6ZSBhZ2FpbnN0IHBhZ2UKJiM0MzsgKiB0YWJsZSBmcmVlaW5nLCB0aGUgc2FtZSB3YXkgZ3VwX2Zhc3QgZG9lcy4gT25seSB2YWxpZCB3aXRoIFJDVS1mcmVlZCBwYWdlCiYjNDM7ICogdGFibGVzIChDT05GSUdfTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSkgYW5kIG5vdCBmb3IgaHVnZXRsYi4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIEZXX1ZNQV9MT0NLRUQJCQkoKF9fZm9yY2UgZm9saW9fd2Fsa19mbGFnc190KUJJVCgxKSkKIAogZW51bSBmb2xpb193YWxrX2xldmVsIHsKIAlGV19MRVZFTF9QVEUsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaCBiL2luY2x1ZGUvbGludXgvdWFjY2Vzcy5oCmluZGV4IDhhMjY0NjYyYjI0MmM4Li5jOGM4MzM3MmM5ZDg3OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91YWNjZXNzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC91YWNjZXNzLmgKQEAgLTM0LDYgJiM0MzszNCwxNyBAQAogfSkKICNlbmRpZgogCiYjNDM7LyoKJiM0MzsgKiBMaWtlIHVudGFnZ2VkX2FkZHJfcmVtb3RlKCksIGJ1dCBmb3IgY2FsbGVycyB0aGF0IHN0YWJpbGl6ZSBAbW0gYnkgb3RoZXIKJiM0MzsgKiBtZWFucyAoZS5nLiBhIHBlci1WTUEgbG9jaykgYW5kIG11c3Qgbm90IGFzc2VydCB0aGUgbW1hcCBsb2NrLgomIzQzOyAqLwomIzQzOyNpZm5kZWYgdW50YWdnZWRfYWRkcl9yZW1vdGVfdW5sb2NrZWQKJiM0MzsjZGVmaW5lIHVudGFnZ2VkX2FkZHJfcmVtb3RlX3VubG9ja2VkKG1tLCBhZGRyKQkoewlcCiYjNDM7CSh2b2lkKShtbSk7CQkJCQlcCiYjNDM7CXVudGFnZ2VkX2FkZHIoYWRkcik7CQkJCVwKJiM0Mzt9KQomIzQzOyNlbmRpZgomIzQzOwogI2lmZGVmIG1hc2tlZF91c2VyX2FjY2Vzc19iZWdpbgogICNkZWZpbmUgY2FuX2RvX21hc2tlZF91c2VyX2FjY2VzcygpIDEKICMgaWZuZGVmIG1hc2tlZF91c2VyX3dyaXRlX2FjY2Vzc19iZWdpbgpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCA4NmE5NzMxMTliZDQ2Yy4uZDJiMmYwMDE0YTBjNjYgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jCkBAIC00Miw2ICYjNDM7NDIsOCBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbF9zdGF0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW0uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tbV9pbmxpbmUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2VjcmV0bWVtLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2V3YWxrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvbW0uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL3Rhc2suaCZndDsKQEAgLTcwNjIsNiAmIzQzOzcwNjQsMTgwIEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCiBFWFBPUlRfU1lNQk9MX0dQTChnZW5lcmljX2FjY2Vzc19waHlzKTsKICNlbmRpZgogCiYjNDM7LyoKJiM0MzsgKiBUaGUgZmFzdCBwYXRoIHVzZXMgZm9saW9fd2Fsa19zdGFydChGV19WTUFfTE9DS0VEKSwgd2hpY2ggbmVlZHMgdGhlIHBlci1WTUEKJiM0MzsgKiBsb2NrIGFuZCBSQ1UtZnJlZWQgcGFnZSB0YWJsZXMgdG8gd2FsayBwYWdlIHRhYmxlcyB3aXRob3V0IHRoZSBtbWFwIGxvY2suCiYjNDM7ICovCiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX1BFUl9WTUFfTE9DSykgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFKQomIzQzOy8qCiYjNDM7ICogUmVhZC1zaWRlIFZNQSBjaGVja3MgZm9yIHRoZSBsb2NrbGVzcyBmYXN0IHBhdGgsIG1pcnJvcmluZyB0aGUgcmVhZCBzaWRlIG9mCiYjNDM7ICogY2hlY2tfdm1hX2ZsYWdzKCk6IHJlamVjdCB3aGF0IEZXX1ZNQV9MT0NLRUQgY2Fubm90IGhhbmRsZSAoaHVnZXRsYiksIHdoYXQKJiM0MzsgKiBuZWVkcyB0aGUgLSZndDthY2Nlc3MoKSBoYW5kbGVyIChWTV9JTy9WTV9QRk5NQVApLCBvciB3aGF0IGhhcyBubyBzdHJ1Y3QgcGFnZSB0bwomIzQzOyAqIGNvcHkgKHNlY3JldG1lbSk7IGVuZm9yY2UgdGhlIEZPTExfQU5PTiByZXN0cmljdGlvbiB0aGF0CiYjNDM7ICogL3Byb2MvUElEL3tjbWRsaW5lLGVudmlyb259IHJlbHkgb24gKENWRS0yMDE4LTExMjApOyBhbmQgcmVxdWlyZSByZWFkIGFjY2VzcwomIzQzOyAqIChob25vcmluZyBGT0xMX0ZPUkNFKS4gIEFueXRoaW5nIG5vdCBwb3NpdGl2ZWx5IGFsbG93ZWQgZmFsbHMgYmFjayB0byB0aGUgc2xvdwomIzQzOyAqIHBhdGgsIHdoaWNoIHJlLXZhbGlkYXRlcyBldmVyeXRoaW5nLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIHZtYV9wZXJtaXRzX2Zhc3RfYWNjZXNzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAomIzQzOwkJCQkgICAgdW5zaWduZWQgaW50IGd1cF9mbGFncykKJiM0Mzt7CiYjNDM7CWlmICh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IChWTV9JTyB8IFZNX1BGTk1BUCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CWlmIChpc192bV9odWdldGxiX3BhZ2Uodm1hKSB8fCB2bWFfaXNfc2VjcmV0bWVtKHZtYSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CWlmICgoZ3VwX2ZsYWdzICZhbXA7IEZPTExfQU5PTikgJmFtcDsmYW1wOyAhdm1hX2lzX2Fub255bW91cyh2bWEpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwlpZiAoISh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX1JFQUQpICZhbXA7JmFtcDsKJiM0MzsJICAgICghKGd1cF9mbGFncyAmYW1wOyBGT0xMX0ZPUkNFKSB8fCAhKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fTUFZUkVBRCkpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogU2l6ZSBvZiB0aGUgc2luZ2xlIG1hcHBpbmcgZW50cnkgZm9saW9fd2Fsa19zdGFydCgpIGxhbmRlZCBvbi4gKi8KJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBmd19lbnRyeV9zaXplKGVudW0gZm9saW9fd2Fsa19sZXZlbCBsZXZlbCkKJiM0Mzt7CiYjNDM7CXN3aXRjaCAobGV2ZWwpIHsKJiM0MzsJY2FzZSBGV19MRVZFTF9QVUQ6CiYjNDM7CQlyZXR1cm4gUFVEX1NJWkU7CiYjNDM7CWNhc2UgRldfTEVWRUxfUE1EOgomIzQzOwkJcmV0dXJuIFBNRF9TSVpFOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIFBBR0VfU0laRTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIENvcHkgQGxlbiBieXRlcyBvZiB0aGUgcGlubmVkIEBmb2xpbyBvdXQgdG8gQGJ1Ziwgc3RhcnRpbmcgYXQgYnl0ZSBvZmZzZXQKJiM0MzsgKiBAZm9saW9fb2ZmIHdpdGhpbiB0aGUgZm9saW8gKHRoZSBwb3NpdGlvbiBvZiBAYWRkcikuICBNYXBzIGFuZCBjb3BpZXMgb25lCiYjNDM7ICogcGFnZSBhdCBhIHRpbWUgLS0ga21hcF9sb2NhbF9mb2xpbygpIGZvciBISUdITUVNLCBjb3B5X2Zyb21fdXNlcl9wYWdlKCkgZm9yCiYjNDM7ICogdGhlIHBlci1wYWdlIGZsdXNoIG9uIGFsaWFzaW5nIGNhY2hlcyAtLSB3aXRob3V0IHJlLXdhbGtpbmcgcGFnZSB0YWJsZXMuCiYjNDM7ICogRWFjaCBwYWdlIGJvcnJvd3MgdGhlIGNhbGxlciYjMzk7cyBzaW5nbGUgZm9saW8gcmVmZXJlbmNlLCBzbyB0aGUgbWFwcGluZyBpcwomIzQzOyAqIGRyb3BwZWQgd2l0aCBrdW5tYXBfbG9jYWwoKSByYXRoZXIgdGhhbiBmb2xpb19yZWxlYXNlX2ttYXAoKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBjb3B5X2ZvbGlvX3BhZ2VzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAomIzQzOwkJCSAgICAgdW5zaWduZWQgbG9uZyBmb2xpb19vZmYsIHVuc2lnbmVkIGxvbmcgYWRkciwKJiM0MzsJCQkgICAgIHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBsZW4pCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGRvbmUgPSAwOwomIzQzOwomIzQzOwl3aGlsZSAoZG9uZSAmbHQ7IGxlbikgewomIzQzOwkJdW5zaWduZWQgbG9uZyBwb3MgPSBmb2xpb19vZmYgJiM0MzsgZG9uZTsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcGFnZV9pZHggPSBwb3MgJmd0OyZndDsgUEFHRV9TSElGVDsKJiM0MzsJCXVuc2lnbmVkIGludCBwYWdlX29mZiA9IHBvcyAmYW1wOyB+UEFHRV9NQVNLOwomIzQzOwkJdW5zaWduZWQgaW50IGNodW5rID0gbWluX3QodW5zaWduZWQgbG9uZywgbGVuIC0gZG9uZSwKJiM0MzsJCQkJCSAgIFBBR0VfU0laRSAtIHBhZ2Vfb2ZmKTsKJiM0MzsJCXZvaWQgKmthZGRyID0ga21hcF9sb2NhbF9mb2xpbyhmb2xpbywgcGFnZV9pZHggJmx0OyZsdDsgUEFHRV9TSElGVCk7CiYjNDM7CiYjNDM7CQljb3B5X2Zyb21fdXNlcl9wYWdlKHZtYSwgZm9saW9fcGFnZShmb2xpbywgcGFnZV9pZHgpLAomIzQzOwkJCQkgICAgYWRkciAmIzQzOyBkb25lLCBidWYgJiM0MzsgZG9uZSwga2FkZHIgJiM0MzsgcGFnZV9vZmYsCiYjNDM7CQkJCSAgICBjaHVuayk7CiYjNDM7CQlrdW5tYXBfbG9jYWwoa2FkZHIpOwomIzQzOwkJZG9uZSAmIzQzOz0gY2h1bms7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBPcHBvcnR1bmlzdGljIGxvY2tsZXNzIGZhc3QgcGF0aCBmb3IgX19hY2Nlc3NfcmVtb3RlX3ZtKCkgcmVhZHMuCiYjNDM7ICoKJiM0MzsgKiBNZW1vcnkgYWxyZWFkeSByZXNpZGVudCBpbiBAbW0gY2FuIGJlIHJlYWQgd2l0aG91dCB0YWtpbmcgdGhlIGZyZXF1ZW50bHkKJiM0MzsgKiBjb250ZW5kZWQgbW1hcF9sb2NrOiBhIHBlci1WTUEgbG9jayBzdGFiaWxpemVzIHRoZSBWTUEsIGFuZCBmb2xpb193YWxrX3N0YXJ0KCkKJiM0MzsgKiB3aXRoIEZXX1ZNQV9MT0NLRUQgZ3JhYnMgYSBzaG9ydC1saXZlZCByZWZlcmVuY2UgdG8gYSBwcmVzZW50IHBhZ2UgZnJvbSBhIHBhZ2UKJiM0MzsgKiB0YWJsZSB3YWxrIHJ1biB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQsIHdoaWNoIHNlcmlhbGl6ZXMgYWdhaW5zdCBjb25jdXJyZW50CiYjNDM7ICogcGFnZSB0YWJsZSBmcmVlaW5nIHRoZSBzYW1lIHdheSBndXBfZmFzdCBkb2VzIChyZWx5aW5nIG9uCiYjNDM7ICogTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSkuCiYjNDM7ICoKJiM0MzsgKiBPbmx5IGEgcmVxdWVzdCB0aGF0IGxpZXMgZW50aXJlbHkgd2l0aGluIGEgc2luZ2xlIFZNQSBpcyBoYW5kbGVkIGhlcmUsCiYjNDM7ICogd2hpY2ggc2hvdWxkIG5vdCBiZSBhbiBpc3N1ZSBpbiBwcmFjdGljZSBzaW5jZSBldmVyeSBjYWxsZXIgaGFzIGEKJiM0MzsgKiBidWZmZXIgb2YgUEFHRV9TSVpFIG9yIHNtYWxsZXIuIExvb3AgaXRlcmF0aW9uIGluc2lkZSB0aGlzIGZ1bmN0aW9uCiYjNDM7ICogc2hvdWxkIGJlIHJhcmUsIHRvby4KJiM0MzsgKgomIzQzOyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCB2aWEgdGhlIGZhc3QgcGF0aC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGFjY2Vzc19yZW1vdGVfdm1fZmFzdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAomIzQzOwkJCQkgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKQomIzQzO3sKJiM0MzsJdm9pZCAqb2xkX2J1ZiA9IGJ1ZjsKJiM0MzsJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiYjNDM7CiYjNDM7CWFkZHIgPSB1bnRhZ2dlZF9hZGRyX3JlbW90ZV91bmxvY2tlZChtbSwgYWRkcik7CiYjNDM7CiYjNDM7CXZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcik7CiYjNDM7CWlmICghdm1hKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qIE9ubHkgaGFuZGxlIGEgcmVxdWVzdCBjb250YWluZWQgZW50aXJlbHkgd2l0aGluIHRoaXMgb25lIFZNQS4gKi8KJiM0MzsJaWYgKGxlbiAmZ3Q7IHZtYS0mZ3Q7dm1fZW5kIC0gYWRkcikKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsKJiM0MzsJaWYgKCF2bWFfcGVybWl0c19mYXN0X2FjY2Vzcyh2bWEsIGd1cF9mbGFncykpCiYjNDM7CQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CiYjNDM7CXdoaWxlIChsZW4pIHsKJiM0MzsJCXN0cnVjdCBmb2xpb193YWxrIGZ3OwomIzQzOwkJc3RydWN0IGZvbGlvICpmb2xpbzsKJiM0MzsJCXN0cnVjdCBwYWdlICpwYWdlOwomIzQzOwkJdW5zaWduZWQgbG9uZyBlbnRyeV9zaXplLCBmb2xpb19vZmYsIHNwYW4sIGlycV9mbGFnczsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgbG9ja2xlc3MgcGFnZSB0YWJsZSB3YWxrIG11c3QgcnVuIHdpdGggaW50ZXJydXB0cwomIzQzOwkJICogZGlzYWJsZWQ6IHBhZ2UgdGFibGUgZnJlZWluZyAobXVubWFwIG9yIFRIUCBjb2xsYXBzZSwgd2hpY2gKJiM0MzsJCSAqIElQSSB2aWEgdGxiX3JlbW92ZV90YWJsZV9zeW5jX29uZSgpIGFuZCB3YWl0KSB0aGVuIGNhbm5vdCBmcmVlCiYjNDM7CQkgKiBhIHRhYmxlIG1pZC13YWxrIC0tIHRoZSBzYW1lIGNvbnRyYWN0IGd1cF9mYXN0IHJlbGllcyBvbi4gIElSUXMKJiM0MzsJCSAqIGFyZSByZXN0b3JlZCBvbmNlIHRoZSBmb2xpbyBpcyBwaW5uZWQ7IHRoZSBjb3B5IGJlbG93IGhvbGRzIG9ubHkKJiM0MzsJCSAqIHRoZSBmb2xpbyByZWZlcmVuY2UuCiYjNDM7CQkgKi8KJiM0MzsJCWxvY2FsX2lycV9zYXZlKGlycV9mbGFncyk7CiYjNDM7CQlmb2xpbyA9IGZvbGlvX3dhbGtfc3RhcnQoJmFtcDtmdywgdm1hLCBhZGRyLCBGV19WTUFfTE9DS0VEKTsKJiM0MzsJCWlmICghZm9saW8pIHsKJiM0MzsJCQlsb2NhbF9pcnFfcmVzdG9yZShpcnFfZmxhZ3MpOwomIzQzOwkJCWdvdG8gb3V0X3VubG9jazsJLyogbm90IHByZXNlbnQ6IGxldCB0aGUgc2xvdyBwYXRoIGZhdWx0IGl0IGluICovCiYjNDM7CQl9CiYjNDM7CQlwYWdlID0gZncucGFnZTsKJiM0MzsJCWlmICghcGFnZSkgewomIzQzOwkJCS8qIE5vIHN0cnVjdCBwYWdlIHRvIGNvcHkgKGUuZy4gYSBzcGVjaWFsIFBURSkuICovCiYjNDM7CQkJZm9saW9fd2Fsa19lbmQoJmFtcDtmdywgdm1hKTsKJiM0MzsJCQlsb2NhbF9pcnFfcmVzdG9yZShpcnFfZmxhZ3MpOwomIzQzOwkJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJCX0KJiM0MzsJCWVudHJ5X3NpemUgPSBmd19lbnRyeV9zaXplKGZ3LmxldmVsKTsKJiM0MzsJCWZvbGlvX2dldChmb2xpbyk7CiYjNDM7CQlmb2xpb193YWxrX2VuZCgmYW1wO2Z3LCB2bWEpOwomIzQzOwkJbG9jYWxfaXJxX3Jlc3RvcmUoaXJxX2ZsYWdzKTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBmb2xpb193YWxrX3N0YXJ0KCkgdmFsaWRhdGVkIG9uZSBwcmVzZW50IG1hcHBpbmcgZW50cnkKJiM0MzsJCSAqIChQQUdFL1BNRC9QVURfU0laRSkuICBDb3B5IHRvIHRoZSBlbmQgb2YgdGhhdCBlbnRyeSwgYm91bmRlZCBieQomIzQzOwkJICogdGhlIGZvbGlvIGFuZCB0aGUgcmVtYWluaW5nIGxlbmd0aCAoYWxyZWFkeSB3aXRoaW4gdGhlIFZNQSksIHNvCiYjNDM7CQkgKiBhIGh1Z2UgbWFwcGluZyBpcyBoYW5kbGVkIGluIGEgc2luZ2xlIHdhbGsuCiYjNDM7CQkgKi8KJiM0MzsJCWZvbGlvX29mZiA9IChmb2xpb19wYWdlX2lkeChmb2xpbywgcGFnZSkgJmx0OyZsdDsgUEFHRV9TSElGVCkgJiM0MzsKJiM0MzsJCQkgICAgb2Zmc2V0X2luX3BhZ2UoYWRkcik7CiYjNDM7CQlzcGFuID0gbWluMygodW5zaWduZWQgbG9uZylsZW4sCiYjNDM7CQkJICAgIGVudHJ5X3NpemUgLSAoYWRkciAmYW1wOyAoZW50cnlfc2l6ZSAtIDEpKSwKJiM0MzsJCQkgICAgKGZvbGlvX25yX3BhZ2VzKGZvbGlvKSAmbHQ7Jmx0OyBQQUdFX1NISUZUKSAtIGZvbGlvX29mZik7CiYjNDM7CiYjNDM7CQljb3B5X2ZvbGlvX3BhZ2VzKHZtYSwgZm9saW8sIGZvbGlvX29mZiwgYWRkciwgYnVmLCBzcGFuKTsKJiM0MzsKJiM0MzsJCS8qIE1hdGNoIHRoZSBGT0xMX1RPVUNIIGJlaGF2aW91ciBvZiB0aGUgc2xvdyAoR1VQKSBwYXRoLiAqLwomIzQzOwkJZm9saW9fbWFya19hY2Nlc3NlZChmb2xpbyk7CiYjNDM7CQlmb2xpb19wdXQoZm9saW8pOwomIzQzOwkJbGVuIC09IHNwYW47CiYjNDM7CQlidWYgJiM0Mzs9IHNwYW47CiYjNDM7CQlhZGRyICYjNDM7PSBzcGFuOwomIzQzOwl9CiYjNDM7CiYjNDM7b3V0X3VubG9jazoKJiM0MzsJdm1hX2VuZF9yZWFkKHZtYSk7CiYjNDM7CXJldHVybiBidWYgLSBvbGRfYnVmOwomIzQzO30KJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbnQgYWNjZXNzX3JlbW90ZV92bV9mYXN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQkJCSB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7I2VuZGlmIC8qIENPTkZJR19QRVJfVk1BX0xPQ0sgJmFtcDsmYW1wOyBDT05GSUdfTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSAqLwomIzQzOwogLyoKICAqIEFjY2VzcyBhbm90aGVyIHByb2Nlc3MmIzM5OyBhZGRyZXNzIHNwYWNlIGFzIGdpdmVuIGluIG1tLgogICovCkBAIC03MDcxLDE1ICYjNDM7NzI0NywzMCBAQCBzdGF0aWMgaW50IF9fYWNjZXNzX3JlbW90ZV92bShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCXZvaWQgKm9sZF9idWYgPSBidWY7CiAJaW50IHdyaXRlID0gZ3VwX2ZsYWdzICZhbXA7IEZPTExfV1JJVEU7CiAKJiM0MzsJLyoKJiM0MzsJICogVHJ5IHRoZSBsb2NrbGVzcyBmYXN0IHBhdGggZm9yIHJlYWRzIGZpcnN0OyBpdCB0cmFuc2ZlcnMgd2hhdCBpdCBjYW4KJiM0MzsJICogZnJvbSByZXNpZGVudCBtZW1vcnkgd2l0aG91dCB0YWtpbmcgbW1hcF9sb2NrLCBhbmQgbGVhdmVzIHRoZQomIzQzOwkgKiByZW1haW5kZXIgKGlmIGFueSkgdG8gdGhlIHNsb3cgcGF0aCBiZWxvdy4KJiM0MzsJICovCiYjNDM7CWlmICghd3JpdGUpIHsKJiM0MzsJCWludCBkb25lID0gYWNjZXNzX3JlbW90ZV92bV9mYXN0KG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTsKJiM0MzsKJiM0MzsJCWFkZHIgJiM0Mzs9IGRvbmU7CiYjNDM7CQlidWYgJiM0Mzs9IGRvbmU7CiYjNDM7CQlsZW4gLT0gZG9uZTsKJiM0MzsJCWlmICghbGVuKQomIzQzOwkJCXJldHVybiBidWYgLSBvbGRfYnVmOwomIzQzOwl9CiYjNDM7CiAJaWYgKG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKG1tKSkKLQkJcmV0dXJuIDA7CiYjNDM7CQlyZXR1cm4gYnVmIC0gb2xkX2J1ZjsKIAogCS8qIFVudGFnIHRoZSBhZGRyZXNzIGJlZm9yZSBsb29raW5nIHVwIHRoZSBWTUEgKi8KIAlhZGRyID0gdW50YWdnZWRfYWRkcl9yZW1vdGUobW0sIGFkZHIpOwogCiAJLyogQXZvaWQgdHJpZ2dlcmluZyB0aGUgdGVtcG9yYXJ5IHdhcm5pbmcgaW4gX19nZXRfdXNlcl9wYWdlcyAqLwogCWlmICghdm1hX2xvb2t1cChtbSwgYWRkcikgJmFtcDsmYW1wOyAhZXhwYW5kX3N0YWNrKG1tLCBhZGRyKSkKLQkJcmV0dXJuIDA7CiYjNDM7CQlyZXR1cm4gYnVmIC0gb2xkX2J1ZjsKIAogCS8qIGlnbm9yZSBlcnJvcnMsIGp1c3QgY2hlY2sgaG93IG11Y2ggd2FzIHN1Y2Nlc3NmdWxseSB0cmFuc2ZlcnJlZCAqLwogCXdoaWxlIChsZW4pIHsKZGlmZiAtLWdpdCBhL21tL3BhZ2V3YWxrLmMgYi9tbS9wYWdld2Fsay5jCmluZGV4IDNhZTI1ODZmZjQ1YjQ0Li5hYjFlODE5ODNjYjhjNyAxMDA2NDQKLS0tIGEvbW0vcGFnZXdhbGsuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdld2Fsay5jCkBAIC04OTAsNyAmIzQzOzg5MCwxMCBAQCBpbnQgd2Fsa19wYWdlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgZmlyc3RfaW5kZXgsCiAgKiBodWdlX3B0ZXBfc2V0XyosIC4uLikuIE5vdGUgdGhhdCB0aGUgcGFnZSB0YWJsZSBlbnRyeSBzdG9yZWQgaW4gQGZ3IG1pZ2h0CiAgKiBub3QgY29ycmVzcG9uZCB0byB0aGUgZmlyc3QgcGh5c2ljYWwgZW50cnkgb2YgYSBsb2dpY2FsIGh1Z2V0bGIgZW50cnkuCiAgKgotICogVGhlIG1tYXAgbG9jayBtdXN0IGJlIGhlbGQgaW4gcmVhZCBtb2RlLgomIzQzOyAqIFRoZSBtbWFwIGxvY2sgbXVzdCBiZSBoZWxkIGluIHJlYWQgbW9kZS4gQWx0ZXJuYXRpdmVseSwgaWYgQEZXX1ZNQV9MT0NLRUQgaXMKJiM0MzsgKiBwYXNzZWQsIHRoZSBWTUEmIzM5O3MgcGVyLVZNQSBsb2NrIG11c3QgYmUgaGVsZCBhbmQgaW50ZXJydXB0cyBtdXN0IGJlIGRpc2FibGVkCiYjNDM7ICogYWNyb3NzIHRoZSB3YWxrIGFuZCB1bnRpbCBmb2xpb193YWxrX2VuZCgpIChvbmx5IHN1cHBvcnRlZCB3aXRoIFJDVS1mcmVlZCBwYWdlCiYjNDM7ICogdGFibGVzLCBpLmUuIENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFLCBhbmQgbm90IGZvciBodWdldGxiKS4KICAqCiAgKiBSZXR1cm46IGZvbGlvIHBvaW50ZXIgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIE5VTEwuCiAgKi8KQEAgLTkwOCw3ICYjNDM7OTExLDI5IEBAIHN0cnVjdCBmb2xpbyAqZm9saW9fd2Fsa19zdGFydChzdHJ1Y3QgZm9saW9fd2FsayAqZncsCiAJcGdkX3QgKnBnZHA7CiAJcDRkX3QgKnA0ZHA7CiAKLQltbWFwX2Fzc2VydF9sb2NrZWQodm1hLSZndDt2bV9tbSk7CiYjNDM7CWlmIChmbGFncyAmYW1wOyBGV19WTUFfTE9DS0VEKSB7CiYjNDM7CQkvKgomIzQzOwkJICogTG9ja2xlc3Mgd2FsayB1bmRlciB0aGUgcGVyLVZNQSBsb2NrIGluc3RlYWQgb2YgdGhlIG1tYXAKJiM0MzsJCSAqIGxvY2suIFRoZSBWTUEgbG9jayBrZWVwcyB0aGUgVk1BIHN0YWJsZSwgYnV0IHRoZSBwYWdlIHRhYmxlcwomIzQzOwkJICogd2Fsa2VkIGJlbG93IGl0IGNhbiBzdGlsbCBiZSBmcmVlZCBjb25jdXJyZW50bHk6IGEgbXVubWFwKCkgb3IKJiM0MzsJCSAqIFRIUCBjb2xsYXBzZSBvZiBhbiBhZGphY2VudCByZWdpb24gaW4gdGhlIHNhbWUgbW0gY2FuIGZyZWUgYQomIzQzOwkJICogc2hhcmVkIHVwcGVyLWxldmVsIHRhYmxlLCBhbmQgY29sbGFwc2VfaHVnZV9wYWdlKCkgLSZndDsKJiM0MzsJCSAqIHJldHJhY3RfcGFnZV90YWJsZXMoKSBmcmVlcyBwYWdlIHRhYmxlcyBvZiBWTUFzIHdob3NlIGxvY2sgaXQKJiM0MzsJCSAqIGRvZXMgbm90IGhvbGQuIFBhZ2UgdGFibGUgZnJlZWluZyBzZXJpYWxpemVzIGFnYWluc3QgbG9ja2xlc3MKJiM0MzsJCSAqIHdhbGtlcnMgdmlhIHRsYl9yZW1vdmVfdGFibGVfc3luY19vbmUoKSwgd2hpY2ggSVBJcyBhbmQgd2FpdHMKJiM0MzsJCSAqIGZvciBldmVyeSBDUFUgdG8gZW5hYmxlIGludGVycnVwdHM7IGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwKJiM0MzsJCSAqIHNlY3Rpb24gZG9lcyBub3QgYmxvY2sgdGhhdCBJUEksIHNvIHRoZSBjYWxsZXIgbXVzdCBrZWVwCiYjNDM7CQkgKiBpbnRlcnJ1cHRzIGRpc2FibGVkIGFjcm9zcyB0aGUgd2hvbGUgd2FsaywgbGlrZSBndXBfZmFzdC4KJiM0MzsJCSAqIEh1Z2V0bGIgKFBNRCBzaGFyaW5nKSBtYXBzIHBhZ2UgdGFibGVzIG5vdCBjb3ZlcmVkIGJ5IHRoaXMKJiM0MzsJCSAqIFZNQSYjMzk7cyBsb2NrIGFuZCBpcyBub3Qgc3VwcG9ydGVkLgomIzQzOwkJICovCiYjNDM7CQlWTV9XQVJOX09OX09OQ0UoIUlTX0VOQUJMRUQoQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUpKTsKJiM0MzsJCVZNX1dBUk5fT05fT05DRShpc192bV9odWdldGxiX3BhZ2Uodm1hKSk7CiYjNDM7CQlsb2NrZGVwX2Fzc2VydF9pcnFzX2Rpc2FibGVkKCk7CiYjNDM7CQl2bWFfYXNzZXJ0X2xvY2tlZCh2bWEpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJbW1hcF9hc3NlcnRfbG9ja2VkKHZtYS0mZ3Q7dm1fbW0pOwomIzQzOwl9CiAJdm1hX3BndGFibGVfd2Fsa19iZWdpbih2bWEpOwogCiAJaWYgKFdBUk5fT05fT05DRShhZGRyICZsdDsgdm1hLSZndDt2bV9zdGFydCB8fCBhZGRyICZndDs9IHZtYS0mZ3Q7dm1fZW5kKSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDI6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjgzNwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDI3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBJbXBhY3Qgb2YgYSBOZXcgS2VybmVsIE1lbW9yeSBBY2Nlc3MgT3B0aW1pemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBtYWtpbmcgY2hhbmdlcyB0byB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBhY2Nlc3Mgcm91dGluZXMuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWRkaW5nIGEgbG9ja2xlc3MgZmFzdCBwYXRoIGZvciBgX19hY2Nlc3NfcmVtb3RlX3ZtKClgIHJlYWRzLiBJbnRlcmVzdGluZy4uLiB0aGV5JiMzOTtyZSBjYWxsaW5nIHRoaXMgbmV3IGZ1bmN0aW9uIGBhY2Nlc3NfcmVtb3RlX3ZtX2Zhc3QoKWAgYW5kIGl0JiMzOTtzIHV0aWxpemluZyBgZm9saW9fd2Fsa19zdGFydCgpYCB3aXRoIGEgbmV3IGZsYWcsIGBGV19WTUFfTE9DS0VEYC4gSXQgbG9va3MgbGlrZSB0aGVyZSYjMzk7cyBhbHNvIHNvbWUgbW9kaWZpY2F0aW9uIG9mIGB1bnRhZ2dlZF9hZGRyX3JlbW90ZSgpYCwgYWxsb3dpbmcgZm9yIHVubG9ja2VkIHVzYWdlIHZpYSBgdW50YWdnZWRfYWRkcl9yZW1vdGVfdW5sb2NrZWQoKWAuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgaXMgdGhpcyBhY3R1YWxseSBnb2luZyB0byBiZSB3b3J0aCBmdXp6aW5nPyBJIG5lZWQgdG8gY2hlY2sgaG93IHJlYWNoYWJsZSB0aGlzIGNvZGUgaXMgYW5kIGlmIGl0JiMzOTtzIGV2ZW4gZnVuY3Rpb25hbC4gVGhlIHBhdGNoIG1vZGlmaWVzIGBtbS9tZW1vcnkuY2AgYW5kIGBtbS9wYWdld2Fsay5jYC4gQSBxdWljayBzY2FuIHRlbGxzIG1lIGBfX2FjY2Vzc19yZW1vdGVfdm0oKWAgaXMgdXNlZCBieSBgYWNjZXNzX3JlbW90ZV92bSgpYCwgd2hpY2ggaW4gdHVybiBpcyB1c2VkIGJ5IHNvbWUgcHJldHR5IGNvcmUgZnVuY3Rpb25hbGl0eTogYHB0cmFjZWAgY2FsbHMgKGxpa2UgYFBUUkFDRV9QRUVLREFUQWApLCBgL3Byb2MvcGlkL21lbWAsIGAvcHJvYy9waWQvY21kbGluZWAsIGFuZCBgL3Byb2MvcGlkL2Vudmlyb25gLiBZZXAsIHRoYXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIGRlZmluaXRlbHkgZnVuY3Rpb25hbC4gVGhpcyBpcyBhIGdvb2QgdGFyZ2V0LgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRob3NlIGNvbmZpZ3VyYXRpb25zLiBUaGUgZmFzdCBwYXRoIGlzIGd1YXJkZWQgYnkgYCNpZiBkZWZpbmVkKENPTkZJR19QRVJfVk1BX0xPQ0spICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSlgLiBTbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlc2UgY29uZmlncyBhbmQgc2VlIHdoYXQgdGhlaXIgZGVwZW5kZW5jaWVzIGFyZSwgYW5kIHdoZXRoZXIgb3Igbm90IHRoZXkmIzM5O3JlIGxpa2VseSB0byBiZSBwcmVzZW50IGluIGFueSBvZiBvdXIgdHlwaWNhbCBmdXp6aW5nIHRhcmdldHMuIEdvdHRhIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgYWN0dWFsbHkgdGVzdGluZyB0aGUgY29kZSB0aGF0JiMzOTtzIGJlaW5nIGludHJvZHVjZWQgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwMjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUEVSX1ZNQV9MT0NLJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTQ1Mj1jb25maWcgQVJDSF9TVVBQT1JUU19QRVJfVk1BX0xPQ0tcbi0tXG5tbS9LY29uZmlnLTE0NTQtXG5tbS9LY29uZmlnOjE0NTU6Y29uZmlnIFBFUl9WTUFfTE9DS1xubW0vS2NvbmZpZy0xNDU2LVx0ZGVmX2Jvb2wgeVxuLS1cbm1tL0tjb25maWcuZGVidWc9MzAwPWNvbmZpZyBERUJVR19LTUVNTEVBS19WRVJCT1NFXG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy0zMTAtXG5tbS9LY29uZmlnLmRlYnVnOjMxMTpjb25maWcgUEVSX1ZNQV9MT0NLX1NUQVRTXG5tbS9LY29uZmlnLmRlYnVnLTMxMi1cdGJvb2wgXCYjMzQ7U3RhdGlzdGljcyBmb3IgcGVyLXZtYSBsb2Nrc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDAyOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2ODEKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIEtlcm5lbCYjMzk7cyBNZW1vcnkgTWFuYWdlbWVudCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGRlZmluaXRpb24sIGBQRVJfVk1BX0xPQ0tgLiBJdCYjMzk7cyBzZXQgdG8gJiMzNDt5ZXMmIzM0OyBieSBkZWZhdWx0LCBidXQgb25seSBpZiB0aGUgYXJjaGl0ZWN0dXJlIHN1cHBvcnRzIHRoaXMgJiMzNDtQRVJfVk1BX0xPQ0smIzM0OyBmZWF0dXJlLiBUaGF0IG1ha2VzIHNlbnNlLCBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiB0aGF0IGlzIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQuIE5vdywgd2hhdCYjMzk7cyBpbnRlcmVzdGluZyBpcyBob3cgaXQmIzM5O3MgYmVpbmcgY29uZGl0aW9uZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBmZWF0dXJlLCBzbyBteSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgaXQgaXMgbGlua2VkLiBUaGlzIHdpbGwgZ2l2ZSBhIGRlZXBlciBpbnNpZ2h0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDAyOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvS2NvbmZpZz01MTI9Y29uZmlnIE1NVV9HQVRIRVJfVEFCTEVfRlJFRVxuLS1cbmFyY2gvS2NvbmZpZy01MTQtXG5hcmNoL0tjb25maWc6NTE1OmNvbmZpZyBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG5hcmNoL0tjb25maWctNTE2LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDAyOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5NzUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgY3JhZnRlZCB3aXRoIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgSSYjMzk7bSBkaXNjdXNzaW5nIHRoaXMgd2l0aCBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYSBTeXN0ZW0gQXJjaGl0ZWN0dXJlIFBhcmFtZXRlcioqCgpSaWdodCwgc28gdGhpcyBmZWVscyBsaWtlIGEgZmxhZywgYSBoaWRkZW4gYm9vbGVhbi4gSXQmIzM5O3MgcHJvYmFibHkgYW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHNldHRpbmcsIHNvbWV0aGluZyB0aGUgaGFyZHdhcmUgb3IgZmlybXdhcmUgY29uZmlndXJlcy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUgeDg2IGFyY2hpdGVjdHVyZSBhbmQgc2VlIGlmIHRoaXMgc2V0dGluZyBpcyByZWxldmFudCB0aGVyZS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggeDg2LCBzZWUgaWYgaXQmIzM5O3MgZXZlbiBleHBvc2VkLCBhbmQgaWYgc28sIGhvdyBpdCBhZmZlY3RzIGJlaGF2aW9yLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgaXQmIzM5O3MgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGJlY2F1c2UgdGhlIGJvb2xlYW4gaXMgaGlkZGVuLCBsaWtlbHkgaW4gdGhlIHN5c3RlbS9hcmNoaXRlY3R1cmUgZGVmaW5pdGlvbi4gRnJvbSB0aGVyZSwgd2UgY2FuIGV4cGFuZCBvdXIgcmVzZWFyY2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDI6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hbHBoYS9LY29uZmlnPTI9Y29uZmlnIEFMUEhBXG4tLVxuYXJjaC9hbHBoYS9LY29uZmlnLTQyLVx0c2VsZWN0IE1NVV9HQVRIRVJfTk9fUkFOR0VcbmFyY2gvYWxwaGEvS2NvbmZpZzo0MzpcdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG5hcmNoL2FscGhhL0tjb25maWctNDQtXHRzZWxlY3QgU1BBUlNFTUVNX0VYVFJFTUUgaWYgU1BBUlNFTUVNXG4tLVxuYXJjaC9hcm0vS2NvbmZpZz0yPWNvbmZpZyBBUk1cbi0tXG5hcmNoL2FybS9LY29uZmlnLTEzNS1cdHNlbGVjdCBIQVZFX1BFUkZfVVNFUl9TVEFDS19EVU1QXG5hcmNoL2FybS9LY29uZmlnOjEzNjpcdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFIGlmIFNNUCBcdTAwMjZcdTAwMjYgQVJNX0xQQUVcbmFyY2gvYXJtL0tjb25maWctMTM3LVx0c2VsZWN0IEhBVkVfUkVHU19BTkRfU1RBQ0tfQUNDRVNTX0FQSVxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZz0yPWNvbmZpZyBBUk02NFxuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZy0yMjMtXHRzZWxlY3QgSEFWRV9GVU5DVElPTl9BUkdfQUNDRVNTX0FQSVxuYXJjaC9hcm02NC9LY29uZmlnOjIyNDpcdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG5hcmNoL2FybTY0L0tjb25maWctMjI1LVx0c2VsZWN0IEhBVkVfUlNFUVxuLS1cbmFyY2gvbG9vbmdhcmNoL0tjb25maWc9Mj1jb25maWcgTE9PTkdBUkNIXG4tLVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy0xOTEtXHRzZWxlY3QgTU1VX0dBVEhFUl9NRVJHRV9WTUFTIGlmIE1NVVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZzoxOTI6XHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy0xOTMtXHRzZWxlY3QgTU9EVUxFU19VU0VfRUxGX1JFTEEgaWYgTU9EVUxFU1xuLS1cbmFyY2gvbWlwcy9LY29uZmlnPTI9Y29uZmlnIE1JUFNcbi0tXG5hcmNoL21pcHMvS2NvbmZpZy05OS1cdHNlbGVjdCBMT0NLX01NX0FORF9GSU5EX1ZNQVxuYXJjaC9taXBzL0tjb25maWc6MTAwOlx0c2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcbmFyY2gvbWlwcy9LY29uZmlnLTEwMS1cdHNlbGVjdCBNT0RVTEVTX1VTRV9FTEZfUkVMIGlmIE1PRFVMRVNcbi0tXG5hcmNoL3BhcmlzYy9LY29uZmlnPTI9Y29uZmlnIFBBUklTQ1xuLS1cbmFyY2gvcGFyaXNjL0tjb25maWctODItXHRzZWxlY3QgVEhSRUFEX0lORk9fSU5fVEFTS1xuYXJjaC9wYXJpc2MvS2NvbmZpZzo4MzpcdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG5hcmNoL3BhcmlzYy9LY29uZmlnLTg0LVx0c2VsZWN0IE5FRURfRE1BX01BUF9TVEFURVxuLS1cbmFyY2gvcG93ZXJwYy9LY29uZmlnPTExOD1jb25maWcgUFBDXG4tLVxuYXJjaC9wb3dlcnBjL0tjb25maWctMzA2LVx0c2VsZWN0IE1NVV9HQVRIRVJfUEFHRV9TSVpFXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzozMDc6XHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxuYXJjaC9wb3dlcnBjL0tjb25maWctMzA4LVx0c2VsZWN0IEhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFXG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnPTEzPWNvbmZpZyBSSVNDVlxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZy0yMDctXHRzZWxlY3QgTE9DS19NTV9BTkRfRklORF9WTUFcbmFyY2gvcmlzY3YvS2NvbmZpZzoyMDg6XHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSBpZiBTTVAgXHUwMDI2XHUwMDI2IE1NVVxuYXJjaC9yaXNjdi9LY29uZmlnLTIwOS1cdHNlbGVjdCBNT0RVTEVTX1VTRV9FTEZfUkVMQSBpZiBNT0RVTEVTXG4tLVxuYXJjaC9zMzkwL0tjb25maWc9NzU9Y29uZmlnIFMzOTBcbi0tXG5hcmNoL3MzOTAvS2NvbmZpZy0yNjMtXHRzZWxlY3QgTU1VX0dBVEhFUl9OT19HQVRIRVJcbmFyY2gvczM5MC9LY29uZmlnOjI2NDpcdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG5hcmNoL3MzOTAvS2NvbmZpZy0yNjUtXHRzZWxlY3QgTU9EVUxFU19VU0VfRUxGX1JFTEFcbi0tXG5hcmNoL3NwYXJjL0tjb25maWc9NzA9Y29uZmlnIFNQQVJDNjRcbi0tXG5hcmNoL3NwYXJjL0tjb25maWctNzYtXHRzZWxlY3QgSEFWRV9LUFJPQkVTXG5hcmNoL3NwYXJjL0tjb25maWc6Nzc6XHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSBpZiBTTVBcbmFyY2gvc3BhcmMvS2NvbmZpZy03OC1cdHNlbGVjdCBIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRSBpZiBTTVBcbi0tXG5hcmNoL3VtL0tjb25maWc9NT1jb25maWcgVU1MXG4tLVxuYXJjaC91bS9LY29uZmlnLTQ2LVx0c2VsZWN0IFNQQVJTRV9JUlFcbmFyY2gvdW0vS2NvbmZpZzo0NzpcdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG5hcmNoL3VtL0tjb25maWctNDgtXG4tLVxuYXJjaC94ODYvS2NvbmZpZz01OD1jb25maWcgWDg2XG4tLVxuYXJjaC94ODYvS2NvbmZpZy0yODQtXHRzZWxlY3QgQVNZTkNfS0VSTkVMX1BHVEFCTEVfRlJFRVx0aWYgSU9NTVVfU1ZBXG5hcmNoL3g4Ni9LY29uZmlnOjI4NTpcdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG5hcmNoL3g4Ni9LY29uZmlnLTI4Ni1cdHNlbGVjdCBNTVVfR0FUSEVSX01FUkdFX1ZNQVNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwMjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzI4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gQ29udW5kcnVtKioKCk9rYXksIHNvIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCB0aGVzZSBkZWZhdWx0IHg4NiBjb25maWd1cmF0aW9ucywgc3BlY2lmaWNhbGx5IGBQRVJfVk1BX0xPQ0tgIGFuZCBgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRWAuIFRoZXkmIzM5O3JlIGFscmVhZHkgZW5hYmxlZCBieSBkZWZhdWx0LCB3aGljaCBpcyBnb29kLCBidXQgSSBuZWVkIHRvIGRlY2lkZSB3aGF0IHRvIGxpc3QgZ2l2ZW4gdGhlIHByb21wdCYjMzk7cyBpbnN0cnVjdGlvbiB0byBvbmx5IGxpc3QgdGhvc2UgY29uZmlncyB0aGF0IHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gU2hvdWxkIEkgaW5jbHVkZSBgUEVSX1ZNQV9MT0NLYCBhbnl3YXksIGp1c3QgZm9yIGNsYXJpdHk/IEhtbW0uLi4gdGhlIHBhdGNoICpkb2VzKiBoYXZlIHRoYXQgYCNpZmAgY29uZGl0aW9uIHVzaW5nIGJvdGggdGhhdCBhbmQgdGhlIG90aGVyIG9uZSwgc28gaXQmIzM5O3MgZGlyZWN0bHkgcmVsZXZhbnQgaGVyZS4gT2theSwgSSYjMzk7bGwgcHV0IGl0IGluLgoKTm93IGZvciBmb2N1cyBzeW1ib2xzLiBUaGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBhY2Nlc3NfcmVtb3RlX3ZtX2Zhc3RgLCBgdm1hX3Blcm1pdHNfZmFzdF9hY2Nlc3NgLCBhbmQgYGNvcHlfZm9saW9fcGFnZXNgLCBhbmQgaXQgbW9kaWZpZXMgYF9fYWNjZXNzX3JlbW90ZV92bWAsIGFuZCBgZm9saW9fd2Fsa19zdGFydGAuIGBhY2Nlc3NfcmVtb3RlX3ZtX2Zhc3RgIGlzIGRlZmluaXRlbHkgYSBrZXkgZm9jdXMgcG9pbnQuIEFuZCBgX19hY2Nlc3NfcmVtb3RlX3ZtYCBpcyBhbHNvIGEgZ29vZCBjaG9pY2UuIEV2ZW4gdGhvdWdoIGBmb2xpb193YWxrX3N0YXJ0YCBzZWVtcyBhIGJpdCBnZW5lcmljLCBpdCBpcyBtb2RpZmllZCwgc28gSSYjMzk7bGwga2VlcCB0aGF0IG9uZS4gQWxyaWdodCwgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgdXNlIG9mIGBfX2FjY2Vzc19yZW1vdGVfdm1gIGFuZCBJIHNob3VsZCBoYXZlIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwMjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2FjY2Vzc19yZW1vdGVfdm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rZXJuZWwvbXRlLmM9NDE4PWxvbmcgZ2V0X210ZV9jdHJsKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9tdGUuYy00NDEtICogdGhlIG51bWJlciBvZiB0YWdzIGNvcGllZC4gUmV0dXJuIDAgaWYgYW55IHRhZ3MgY29waWVkLCBlcnJvciBvdGhlcndpc2UuXG5hcmNoL2FybTY0L2tlcm5lbC9tdGUuYzo0NDI6ICogSW5zcGlyZWQgYnkgX19hY2Nlc3NfcmVtb3RlX3ZtKCkuXG5hcmNoL2FybTY0L2tlcm5lbC9tdGUuYy00NDMtICovXG4tLVxua2VybmVsL3RpbWUvbmFtZXNwYWNlX3Zkc28uYz03MT1zdHJ1Y3QgcGFnZSAqZmluZF90aW1lbnNfdnZhcl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmtlcm5lbC90aW1lL25hbWVzcGFjZV92ZHNvLmMtODAtXHQgKiBpbiBzcGVjaWFsX21hcHBpbmdfdm1vcHMoKS5cbmtlcm5lbC90aW1lL25hbWVzcGFjZV92ZHNvLmM6ODE6XHQgKiBGb3IgbW9yZSBkZXRhaWxzIGNoZWNrX3ZtYV9mbGFncygpIGFuZCBfX2FjY2Vzc19yZW1vdGVfdm0oKVxua2VybmVsL3RpbWUvbmFtZXNwYWNlX3Zkc28uYy04Mi1cdCAqL1xuLS1cbm1tL21lbW9yeS5jPTcxMTc9c3RhdGljIHZvaWQgY29weV9mb2xpb19wYWdlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9tZW1vcnkuYy03MTM5LS8qXG5tbS9tZW1vcnkuYzo3MTQwOiAqIE9wcG9ydHVuaXN0aWMgbG9ja2xlc3MgZmFzdCBwYXRoIGZvciBfX2FjY2Vzc19yZW1vdGVfdm0oKSByZWFkcy5cbm1tL21lbW9yeS5jLTcxNDEtICpcbi0tXG5tbS9tZW1vcnkuYz03MjM0PXN0YXRpYyBpbnQgYWNjZXNzX3JlbW90ZV92bV9mYXN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbWVtb3J5LmMtNzI0My0gKi9cbm1tL21lbW9yeS5jOjcyNDQ6c3RhdGljIGludCBfX2FjY2Vzc19yZW1vdGVfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL21lbW9yeS5jLTcyNDUtXHRcdFx0ICAgICAgdm9pZCAqYnVmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxuLS1cbm1tL21lbW9yeS5jPTczNDk9aW50IGFjY2Vzc19yZW1vdGVfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9tZW1vcnkuYy03MzUxLXtcbm1tL21lbW9yeS5jOjczNTI6XHRyZXR1cm4gX19hY2Nlc3NfcmVtb3RlX3ZtKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTtcbm1tL21lbW9yeS5jLTczNTMtfVxuLS1cbm1tL21lbW9yeS5jPTczNjA9aW50IGFjY2Vzc19wcm9jZXNzX3ZtKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbWVtb3J5LmMtNzM2OS1cbm1tL21lbW9yeS5jOjczNzA6XHRyZXQgPSBfX2FjY2Vzc19yZW1vdGVfdm0obW0sIGFkZHIsIGJ1ZiwgbGVuLCBndXBfZmxhZ3MpO1xubW0vbWVtb3J5LmMtNzM3MS1cbi0tXG5tbS9ub21tdS5jPTE2Mzk9RVhQT1JUX1NZTUJPTChmaWxlbWFwX21hcF9wYWdlcyk7XG5tbS9ub21tdS5jLTE2NDAtXG5tbS9ub21tdS5jOjE2NDE6c3RhdGljIGludCBfX2FjY2Vzc19yZW1vdGVfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL25vbW11LmMtMTY0Mi1cdFx0XHQgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG4tLVxubW0vbm9tbXUuYz0xNjg1PWludCBhY2Nlc3NfcmVtb3RlX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbm9tbXUuYy0xNjg3LXtcbm1tL25vbW11LmM6MTY4ODpcdHJldHVybiBfX2FjY2Vzc19yZW1vdGVfdm0obW0sIGFkZHIsIGJ1ZiwgbGVuLCBndXBfZmxhZ3MpO1xubW0vbm9tbXUuYy0xNjg5LX1cbi0tXG5tbS9ub21tdS5jPTE2OTU9aW50IGFjY2Vzc19wcm9jZXNzX3ZtKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmJ1ZiwgaW50IGxlbixcbi0tXG5tbS9ub21tdS5jLTE3MDYtXG5tbS9ub21tdS5jOjE3MDc6XHRsZW4gPSBfX2FjY2Vzc19yZW1vdGVfdm0obW0sIGFkZHIsIGJ1ZiwgbGVuLCBndXBfZmxhZ3MpO1xubW0vbm9tbXUuYy0xNzA4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwMjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg1MAoJCQkJCQkJb3V0cHV0OiAxNjgKCQkJCQkJCXRob3VnaHRzOiA0NzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IFJlbW90ZSBWTSBBY2Nlc3MgRmFzdCBQYXRoKioKCk9rYXksIHNvIEkmIzM5O3ZlIHplcm9lZCBpbiBvbiB0aGUgbG9ja2xlc3MgZmFzdCBwYXRoIGZvciByZW1vdGUgbWVtb3J5IGFjY2Vzcy4gYF9fYWNjZXNzX3JlbW90ZV92bWAgYW5kIGBhY2Nlc3NfcmVtb3RlX3ZtX2Zhc3RgIGFyZSBkZWZpbml0ZWx5IHRoZSBrZXkgZm9jdXMgc3ltYm9scyBoZXJlLiBFdmVuIHRob3VnaCBgYWNjZXNzX3JlbW90ZV92bV9mYXN0YCBpcyBzdGF0aWMsIHN5emthbGxlciBzaG91bGQgc3RpbGwgYmUgYWJsZSB0byB0YXJnZXQgaXQuIEkmIzM5O2xsIGFsc28gYWRkIGBmb2xpb193YWxrX3N0YXJ0YCB0byB0aGUgbGlzdCBiZWNhdXNlIGl0JiMzOTtzIHJlbGV2YW50IHRvIHRoZSBvcGVyYXRpb24uIEFuZCBzaW5jZSB0aGUgY29kZSBtZW50aW9ucyBpdCwgSSBzaG91bGQgYWxzbyBhZGQgYGNvcHlfZm9saW9fcGFnZXNgLCBhbmQgYHZtYV9wZXJtaXRzX2Zhc3RfYWNjZXNzYC4KCk5vdywgcmVnYXJkaW5nIGNvbmZpZ3VyYXRpb25zLCBJIG5lZWQgdG8gY2hlY2sgd2hpY2ggb25lcyBhcmUgcmVsZXZhbnQuIGBDT05GSUdfUEVSX1ZNQV9MT0NLYCBhbmQgYENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFYCBhcmUgdGhlIGd1YXJkcyBmb3IgdGhlIGZhc3QgcGF0aC4gVGhleSBhcHBlYXIgdG8gYmUgZW5hYmxlZCBieSBkZWZhdWx0IG9uIHg4NiwgYnV0IEkmIzM5O2xsIGluY2x1ZGUgdGhlbSBpbiB0aGUgY29uZmlndXJhdGlvbiBqdXN0IHRvIGJlIHNhZmUuCgpOZXh0LCBJIG5lZWQgdG8gY29uZmlybSByZWFjaGFiaWxpdHkuIEkgc2VlIHRoYXQgdGhlIGBwcm9jZXNzX3ZtX3JlYWR2YCBzeXNjYWxsIHVzZXMgYGFjY2Vzc19wcm9jZXNzX3ZtYCwgd2hpY2ggY2FsbHMgYF9fYWNjZXNzX3JlbW90ZV92bWAsIGFuZCBgcHRyYWNlYCB1c2VzIGl0IGFzIHdlbGwuIFRoYXQgY29uZmlybXMgaXQmIzM5O3MgYSBmdW5jdGlvbmFsIHBhdGggd2UgY2FuIGhpdC4KClNvLCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5IEkmIzM5O3ZlIGdvdDoKCiogICAqKldvcnRoRnV6emluZzoqKiBUcnVlCiogICAqKkZvY3VzU3ltYm9sczoqKiBgYWNjZXNzX3JlbW90ZV92bV9mYXN0YCwgYF9fYWNjZXNzX3JlbW90ZV92bWAsIGBmb2xpb193YWxrX3N0YXJ0YCwgYGNvcHlfZm9saW9fcGFnZXNgLCBgdm1hX3Blcm1pdHNfZmFzdF9hY2Nlc3NgCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYFBFUl9WTUFfTE9DS2AsIGBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFYAoqICAgKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIGludHJvZHVjZXMgYSBsb2NrbGVzcyBmYXN0IHBhdGggZm9yIHJlbW90ZSBtZW1vcnkgYWNjZXNzIChgX19hY2Nlc3NfcmVtb3RlX3ZtYCkuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBgcHRyYWNlYCBhbmQgYHByb2Nlc3Nfdm1fcmVhZHZgIHN5c2NhbGxzLiBUaGUgZmFzdCBwYXRoIHJlbGllcyBvbiBwZXItVk1BIGxvY2tzIGFuZCBSQ1UtZnJlZWQgcGFnZSB0YWJsZXMuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhvc2UgY29uZmlncyBhZ2Fpbi4gQm90aCBzZWVtIHRvIGJlIHN0YW5kYXJkIGRlZmF1bHRzLCBzbyBJJiMzOTtsbCBrZWVwIHRoZW0gaW4gdGhlIGxpc3QuCgpPa2F5LCBsZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMuIExldCBtZSBjaGVjay4uLnllcywgdGhlcmUmIzM5O3MgYHZtYV9wZXJtaXRzX2Zhc3RfYWNjZXNzYCwgYGNvcHlfZm9saW9fcGFnZXNgIGFuZCBgZndfZW50cnlfc2l6ZWAuIFRoZXkgYWxsIGxvb2sgcmVsZXZhbnQsIHNvIEkmIzM5O2xsIGJlIHN1cmUgdG8gaW5jbHVkZSB0aG9zZS4KCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50IHdpdGggdGhpcy4gSSYjMzk7bGwgY2FsbCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDI6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BFUl9WTUFfTE9DSyYjMzQ7LAogICAgJiMzNDtNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWNjZXNzX3JlbW90ZV92bV9mYXN0JiMzNDssCiAgICAmIzM0O19fYWNjZXNzX3JlbW90ZV92bSYjMzQ7LAogICAgJiMzNDtmb2xpb193YWxrX3N0YXJ0JiMzNDssCiAgICAmIzM0O2NvcHlfZm9saW9fcGFnZXMmIzM0OywKICAgICYjMzQ7dm1hX3Blcm1pdHNfZmFzdF9hY2Nlc3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxvY2tsZXNzIGZhc3QgcGF0aCBmb3IgcmVtb3RlIG1lbW9yeSBhY2Nlc3MgKGBfX2FjY2Vzc19yZW1vdGVfdm1gKSwgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBzeXNjYWxscyBsaWtlIGBwcm9jZXNzX3ZtX3JlYWR2YCBhbmQgYHB0cmFjZWAuIFRoZSBmYXN0IHBhdGggcmVsaWVzIG9uIHBlci1WTUEgbG9ja3MgYW5kIFJDVS1mcmVlZCBwYWdlIHRhYmxlcywgbWFraW5nIGl0IGhpZ2hseSBmdW5jdGlvbmFsIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQRVJfVk1BX0xPQ0smIzM0OywKICAgICYjMzQ7TU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FjY2Vzc19yZW1vdGVfdm1fZmFzdCYjMzQ7LAogICAgJiMzNDtfX2FjY2Vzc19yZW1vdGVfdm0mIzM0OywKICAgICYjMzQ7Zm9saW9fd2Fsa19zdGFydCYjMzQ7LAogICAgJiMzNDtjb3B5X2ZvbGlvX3BhZ2VzJiMzNDssCiAgICAmIzM0O3ZtYV9wZXJtaXRzX2Zhc3RfYWNjZXNzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBsb2NrbGVzcyBmYXN0IHBhdGggZm9yIHJlbW90ZSBtZW1vcnkgYWNjZXNzIChgX19hY2Nlc3NfcmVtb3RlX3ZtYCksIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgc3lzY2FsbHMgbGlrZSBgcHJvY2Vzc192bV9yZWFkdmAgYW5kIGBwdHJhY2VgLiBUaGUgZmFzdCBwYXRoIHJlbGllcyBvbiBwZXItVk1BIGxvY2tzIGFuZCBSQ1UtZnJlZWQgcGFnZSB0YWJsZXMsIG1ha2luZyBpdCBoaWdobHkgZnVuY3Rpb25hbCBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDAyOjEwOjE1LjE3NjU3NjE4MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5NjA3MzAxNDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBFUl9WTUFfTE9DS1wiLFxuICAgIFwiTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFjY2Vzc19yZW1vdGVfdm1fZmFzdFwiLFxuICAgIFwiX19hY2Nlc3NfcmVtb3RlX3ZtXCIsXG4gICAgXCJmb2xpb193YWxrX3N0YXJ0XCIsXG4gICAgXCJjb3B5X2ZvbGlvX3BhZ2VzXCIsXG4gICAgXCJ2bWFfcGVybWl0c19mYXN0X2FjY2Vzc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBsb2NrbGVzcyBmYXN0IHBhdGggZm9yIHJlbW90ZSBtZW1vcnkgYWNjZXNzIChgX19hY2Nlc3NfcmVtb3RlX3ZtYCksIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgc3lzY2FsbHMgbGlrZSBgcHJvY2Vzc192bV9yZWFkdmAgYW5kIGBwdHJhY2VgLiBUaGUgZmFzdCBwYXRoIHJlbGllcyBvbiBwZXItVk1BIGxvY2tzIGFuZCBSQ1UtZnJlZWQgcGFnZSB0YWJsZXMsIG1ha2luZyBpdCBoaWdobHkgZnVuY3Rpb25hbCBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDI6MTA6MTUuMTc2NTg4NDMyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTkzMzQ2NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5NjAxNzQ0MjYyM2VhNGU2ZWQ1MGQ5YjYwMDNiZmJlMGY0Yzk0Mzg5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVuIDI1IDAyOjEwOjEzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oXFxuaW5kZXggZWY1YjUwN2RlMzRlMmUuLmNlZTcxMGY2NDY1OGFhIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oXFxuQEAgLTEwMCwxOCArMTAwLDE4IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtbV9sYW1fY3IzX21hc2soc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBkdXBfbGFtKHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4ge1xcbiBcXHRtbS1cXHUwMDNlY29udGV4dC5sYW1fY3IzX21hc2sgPSBvbGRtbS1cXHUwMDNlY29udGV4dC5sYW1fY3IzX21hc2s7XFxuLVxcdG1tLVxcdTAwM2Vjb250ZXh0LnVudGFnX21hc2sgPSBvbGRtbS1cXHUwMDNlY29udGV4dC51bnRhZ19tYXNrO1xcbitcXHRXUklURV9PTkNFKG1tLVxcdTAwM2Vjb250ZXh0LnVudGFnX21hc2ssIFJFQURfT05DRShvbGRtbS1cXHUwMDNlY29udGV4dC51bnRhZ19tYXNrKSk7XFxuIH1cXG4gXFxuICNkZWZpbmUgbW1fdW50YWdfbWFzayBtbV91bnRhZ19tYXNrXFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtbV91bnRhZ19tYXNrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiB7XFxuLVxcdHJldHVybiBtbS1cXHUwMDNlY29udGV4dC51bnRhZ19tYXNrO1xcbitcXHRyZXR1cm4gUkVBRF9PTkNFKG1tLVxcdTAwM2Vjb250ZXh0LnVudGFnX21hc2spO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgbW1fcmVzZXRfdW50YWdfbWFzayhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4ge1xcbi1cXHRtbS1cXHUwMDNlY29udGV4dC51bnRhZ19tYXNrID0gLTFVTDtcXG4rXFx0V1JJVEVfT05DRShtbS1cXHUwMDNlY29udGV4dC51bnRhZ19tYXNrLCAtMVVMKTtcXG4gfVxcbiBcXG4gI2RlZmluZSBhcmNoX3BndGFibGVfZG1hX2NvbXBhdCBhcmNoX3BndGFibGVfZG1hX2NvbXBhdFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzXzY0LmhcXG5pbmRleCAyMGRlMzRjYzlhYTZlNy4uOTMzYjBiOGI0ZDYwNDcgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oXFxuQEAgLTM5LDExICszOSwyMyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX191bnRhZ2dlZF9hZGRyKHVuc2lnbmVkIGxvbmcgYWRkcilcXG4gXFx0KF9fZm9yY2UgX190eXBlb2ZfXyhhZGRyKSlfX3VudGFnZ2VkX2FkZHIoX19hZGRyKTtcXHRcXHRcXFxcXFxuIH0pXFxuIFxcbisvKiBTdHJpcCB0aGUgdGFnIGJpdHMgZnJvbSBhIHJlbW90ZSBtbSdzIGFkZHJlc3M7IHVzYWJsZSB3aXRob3V0IHRoZSBtbWFwIGxvY2suICovXFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3VudGFnZ2VkX2FkZHJfcmVtb3RlX3VubG9ja2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBhZGRyKVxcbit7XFxuK1xcdHJldHVybiBhZGRyIFxcdTAwMjYgUkVBRF9PTkNFKG1tLVxcdTAwM2Vjb250ZXh0LnVudGFnX21hc2spO1xcbit9XFxuK1xcbisjZGVmaW5lIHVudGFnZ2VkX2FkZHJfcmVtb3RlX3VubG9ja2VkKG1tLCBhZGRyKVxcdCh7XFx0XFx0XFx0XFxcXFxcbitcXHR1bnNpZ25lZCBsb25nIF9fYWRkciA9IChfX2ZvcmNlIHVuc2lnbmVkIGxvbmcpKGFkZHIpO1xcdFxcdFxcXFxcXG4rXFx0KF9fZm9yY2UgX190eXBlb2ZfXyhhZGRyKSlfX3VudGFnZ2VkX2FkZHJfcmVtb3RlX3VubG9ja2VkKG1tLCBfX2FkZHIpOyBcXFxcXFxuK30pXFxuK1xcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX191bnRhZ2dlZF9hZGRyX3JlbW90ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBhZGRyKVxcbiB7XFxuIFxcdG1tYXBfYXNzZXJ0X2xvY2tlZChtbSk7XFxuLVxcdHJldHVybiBhZGRyIFxcdTAwMjYgKG1tKS1cXHUwMDNlY29udGV4dC51bnRhZ19tYXNrO1xcbitcXHRyZXR1cm4gX191bnRhZ2dlZF9hZGRyX3JlbW90ZV91bmxvY2tlZChtbSwgYWRkcik7XFxuIH1cXG4gXFxuICNkZWZpbmUgdW50YWdnZWRfYWRkcl9yZW1vdGUobW0sIGFkZHIpXFx0KHtcXHRcXHRcXHRcXHRcXFxcXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jXFxuaW5kZXggZDQ0YWZiZTAwNWJiNTEuLjU1MDk2MTM2ZGU1MzEzIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmNcXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jXFxuQEAgLTgxNCw3ICs4MTQsNyBAQCBzdGF0aWMgdm9pZCBlbmFibGVfbGFtX2Z1bmModm9pZCAqX19tbSlcXG4gc3RhdGljIHZvaWQgbW1fZW5hYmxlX2xhbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4ge1xcbiBcXHRtbS1cXHUwMDNlY29udGV4dC5sYW1fY3IzX21hc2sgPSBYODZfQ1IzX0xBTV9VNTc7XFxuLVxcdG1tLVxcdTAwM2Vjb250ZXh0LnVudGFnX21hc2sgPSAgfkdFTk1BU0soNjIsIDU3KTtcXG4rXFx0V1JJVEVfT05DRShtbS1cXHUwMDNlY29udGV4dC51bnRhZ19tYXNrLCB+R0VOTUFTSyg2MiwgNTcpKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIEV2ZW4gdGhvdWdoIHRoZSBwcm9jZXNzIG11c3Qgc3RpbGwgYmUgc2luZ2xlLXRocmVhZGVkIGF0IHRoaXNcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdld2Fsay5oIGIvaW5jbHVkZS9saW51eC9wYWdld2Fsay5oXFxuaW5kZXggYjQxZDcyNjVjMDFiYzIuLmQwMzg3NDcwZDczMjJiIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZXdhbGsuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZXdhbGsuaFxcbkBAIC0xNTAsNiArMTUwLDEzIEBAIHR5cGVkZWYgaW50IF9fYml0d2lzZSBmb2xpb193YWxrX2ZsYWdzX3Q7XFxuIFxcbiAvKiBXYWxrIHNoYXJlZCB6ZXJvcGFnZXMgKHNtYWxsICsgaHVnZSkgYXMgd2VsbC4gKi9cXG4gI2RlZmluZSBGV19aRVJPUEFHRVxcdFxcdFxcdCgoX19mb3JjZSBmb2xpb193YWxrX2ZsYWdzX3QpQklUKDApKVxcbisvKlxcbisgKiBUaGUgY2FsbGVyIGhvbGRzIHRoZSBwZXItVk1BIGxvY2sgaW5zdGVhZCBvZiB0aGUgbW1hcCBsb2NrLCB3aXRoIGludGVycnVwdHNcXG4rICogZGlzYWJsZWQgYWNyb3NzIHRoZSB3YWxrICh1bnRpbCBmb2xpb193YWxrX2VuZCgpKSB0byBzZXJpYWxpemUgYWdhaW5zdCBwYWdlXFxuKyAqIHRhYmxlIGZyZWVpbmcsIHRoZSBzYW1lIHdheSBndXBfZmFzdCBkb2VzLiBPbmx5IHZhbGlkIHdpdGggUkNVLWZyZWVkIHBhZ2VcXG4rICogdGFibGVzIChDT05GSUdfTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSkgYW5kIG5vdCBmb3IgaHVnZXRsYi5cXG4rICovXFxuKyNkZWZpbmUgRldfVk1BX0xPQ0tFRFxcdFxcdFxcdCgoX19mb3JjZSBmb2xpb193YWxrX2ZsYWdzX3QpQklUKDEpKVxcbiBcXG4gZW51bSBmb2xpb193YWxrX2xldmVsIHtcXG4gXFx0RldfTEVWRUxfUFRFLFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaCBiL2luY2x1ZGUvbGludXgvdWFjY2Vzcy5oXFxuaW5kZXggOGEyNjQ2NjJiMjQyYzguLmM4YzgzMzcyYzlkODc4IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvdWFjY2Vzcy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC91YWNjZXNzLmhcXG5AQCAtMzQsNiArMzQsMTcgQEBcXG4gfSlcXG4gI2VuZGlmXFxuIFxcbisvKlxcbisgKiBMaWtlIHVudGFnZ2VkX2FkZHJfcmVtb3RlKCksIGJ1dCBmb3IgY2FsbGVycyB0aGF0IHN0YWJpbGl6ZSBAbW0gYnkgb3RoZXJcXG4rICogbWVhbnMgKGUuZy4gYSBwZXItVk1BIGxvY2spIGFuZCBtdXN0IG5vdCBhc3NlcnQgdGhlIG1tYXAgbG9jay5cXG4rICovXFxuKyNpZm5kZWYgdW50YWdnZWRfYWRkcl9yZW1vdGVfdW5sb2NrZWRcXG4rI2RlZmluZSB1bnRhZ2dlZF9hZGRyX3JlbW90ZV91bmxvY2tlZChtbSwgYWRkcilcXHQoe1xcdFxcXFxcXG4rXFx0KHZvaWQpKG1tKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHVudGFnZ2VkX2FkZHIoYWRkcik7XFx0XFx0XFx0XFx0XFxcXFxcbit9KVxcbisjZW5kaWZcXG4rXFxuICNpZmRlZiBtYXNrZWRfdXNlcl9hY2Nlc3NfYmVnaW5cXG4gICNkZWZpbmUgY2FuX2RvX21hc2tlZF91c2VyX2FjY2VzcygpIDFcXG4gIyBpZm5kZWYgbWFza2VkX3VzZXJfd3JpdGVfYWNjZXNzX2JlZ2luXFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcXG5pbmRleCA4NmE5NzMxMTliZDQ2Yy4uZDJiMmYwMDE0YTBjNjYgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtb3J5LmNcXG4rKysgYi9tbS9tZW1vcnkuY1xcbkBAIC00Miw2ICs0Miw4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWxfc3RhdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW0uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tX2lubGluZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2VjcmV0bWVtLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wYWdld2Fsay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvbW0uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL251bWFfYmFsYW5jaW5nLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC90YXNrLmhcXHUwMDNlXFxuQEAgLTcwNjIsNiArNzA2NCwxODAgQEAgaW50IGdlbmVyaWNfYWNjZXNzX3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gRVhQT1JUX1NZTUJPTF9HUEwoZ2VuZXJpY19hY2Nlc3NfcGh5cyk7XFxuICNlbmRpZlxcbiBcXG4rLypcXG4rICogVGhlIGZhc3QgcGF0aCB1c2VzIGZvbGlvX3dhbGtfc3RhcnQoRldfVk1BX0xPQ0tFRCksIHdoaWNoIG5lZWRzIHRoZSBwZXItVk1BXFxuKyAqIGxvY2sgYW5kIFJDVS1mcmVlZCBwYWdlIHRhYmxlcyB0byB3YWxrIHBhZ2UgdGFibGVzIHdpdGhvdXQgdGhlIG1tYXAgbG9jay5cXG4rICovXFxuKyNpZiBkZWZpbmVkKENPTkZJR19QRVJfVk1BX0xPQ0spIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUpXFxuKy8qXFxuKyAqIFJlYWQtc2lkZSBWTUEgY2hlY2tzIGZvciB0aGUgbG9ja2xlc3MgZmFzdCBwYXRoLCBtaXJyb3JpbmcgdGhlIHJlYWQgc2lkZSBvZlxcbisgKiBjaGVja192bWFfZmxhZ3MoKTogcmVqZWN0IHdoYXQgRldfVk1BX0xPQ0tFRCBjYW5ub3QgaGFuZGxlIChodWdldGxiKSwgd2hhdFxcbisgKiBuZWVkcyB0aGUgLVxcdTAwM2VhY2Nlc3MoKSBoYW5kbGVyIChWTV9JTy9WTV9QRk5NQVApLCBvciB3aGF0IGhhcyBubyBzdHJ1Y3QgcGFnZSB0b1xcbisgKiBjb3B5IChzZWNyZXRtZW0pOyBlbmZvcmNlIHRoZSBGT0xMX0FOT04gcmVzdHJpY3Rpb24gdGhhdFxcbisgKiAvcHJvYy9QSUQve2NtZGxpbmUsZW52aXJvbn0gcmVseSBvbiAoQ1ZFLTIwMTgtMTEyMCk7IGFuZCByZXF1aXJlIHJlYWQgYWNjZXNzXFxuKyAqIChob25vcmluZyBGT0xMX0ZPUkNFKS4gIEFueXRoaW5nIG5vdCBwb3NpdGl2ZWx5IGFsbG93ZWQgZmFsbHMgYmFjayB0byB0aGUgc2xvd1xcbisgKiBwYXRoLCB3aGljaCByZS12YWxpZGF0ZXMgZXZlcnl0aGluZy5cXG4rICovXFxuK3N0YXRpYyBib29sIHZtYV9wZXJtaXRzX2Zhc3RfYWNjZXNzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbitcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IGd1cF9mbGFncylcXG4re1xcbitcXHRpZiAodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IChWTV9JTyB8IFZNX1BGTk1BUCkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0aWYgKGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpIHx8IHZtYV9pc19zZWNyZXRtZW0odm1hKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRpZiAoKGd1cF9mbGFncyBcXHUwMDI2IEZPTExfQU5PTikgXFx1MDAyNlxcdTAwMjYgIXZtYV9pc19hbm9ueW1vdXModm1hKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRpZiAoISh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fUkVBRCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICghKGd1cF9mbGFncyBcXHUwMDI2IEZPTExfRk9SQ0UpIHx8ICEodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX01BWVJFQUQpKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rLyogU2l6ZSBvZiB0aGUgc2luZ2xlIG1hcHBpbmcgZW50cnkgZm9saW9fd2Fsa19zdGFydCgpIGxhbmRlZCBvbi4gKi9cXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgZndfZW50cnlfc2l6ZShlbnVtIGZvbGlvX3dhbGtfbGV2ZWwgbGV2ZWwpXFxuK3tcXG4rXFx0c3dpdGNoIChsZXZlbCkge1xcbitcXHRjYXNlIEZXX0xFVkVMX1BVRDpcXG4rXFx0XFx0cmV0dXJuIFBVRF9TSVpFO1xcbitcXHRjYXNlIEZXX0xFVkVMX1BNRDpcXG4rXFx0XFx0cmV0dXJuIFBNRF9TSVpFO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gUEFHRV9TSVpFO1xcbitcXHR9XFxuK31cXG4rXFxuKy8qXFxuKyAqIENvcHkgQGxlbiBieXRlcyBvZiB0aGUgcGlubmVkIEBmb2xpbyBvdXQgdG8gQGJ1Ziwgc3RhcnRpbmcgYXQgYnl0ZSBvZmZzZXRcXG4rICogQGZvbGlvX29mZiB3aXRoaW4gdGhlIGZvbGlvICh0aGUgcG9zaXRpb24gb2YgQGFkZHIpLiAgTWFwcyBhbmQgY29waWVzIG9uZVxcbisgKiBwYWdlIGF0IGEgdGltZSAtLSBrbWFwX2xvY2FsX2ZvbGlvKCkgZm9yIEhJR0hNRU0sIGNvcHlfZnJvbV91c2VyX3BhZ2UoKSBmb3JcXG4rICogdGhlIHBlci1wYWdlIGZsdXNoIG9uIGFsaWFzaW5nIGNhY2hlcyAtLSB3aXRob3V0IHJlLXdhbGtpbmcgcGFnZSB0YWJsZXMuXFxuKyAqIEVhY2ggcGFnZSBib3Jyb3dzIHRoZSBjYWxsZXIncyBzaW5nbGUgZm9saW8gcmVmZXJlbmNlLCBzbyB0aGUgbWFwcGluZyBpc1xcbisgKiBkcm9wcGVkIHdpdGgga3VubWFwX2xvY2FsKCkgcmF0aGVyIHRoYW4gZm9saW9fcmVsZWFzZV9rbWFwKCkuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBjb3B5X2ZvbGlvX3BhZ2VzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbitcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgZm9saW9fb2ZmLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuK1xcdFxcdFxcdCAgICAgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIGxlbilcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIGRvbmUgPSAwO1xcbitcXG4rXFx0d2hpbGUgKGRvbmUgXFx1MDAzYyBsZW4pIHtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBwb3MgPSBmb2xpb19vZmYgKyBkb25lO1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIHBhZ2VfaWR4ID0gcG9zIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuK1xcdFxcdHVuc2lnbmVkIGludCBwYWdlX29mZiA9IHBvcyBcXHUwMDI2IH5QQUdFX01BU0s7XFxuK1xcdFxcdHVuc2lnbmVkIGludCBjaHVuayA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIGxlbiAtIGRvbmUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFBBR0VfU0laRSAtIHBhZ2Vfb2ZmKTtcXG4rXFx0XFx0dm9pZCAqa2FkZHIgPSBrbWFwX2xvY2FsX2ZvbGlvKGZvbGlvLCBwYWdlX2lkeCBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKTtcXG4rXFxuK1xcdFxcdGNvcHlfZnJvbV91c2VyX3BhZ2Uodm1hLCBmb2xpb19wYWdlKGZvbGlvLCBwYWdlX2lkeCksXFxuK1xcdFxcdFxcdFxcdCAgICBhZGRyICsgZG9uZSwgYnVmICsgZG9uZSwga2FkZHIgKyBwYWdlX29mZixcXG4rXFx0XFx0XFx0XFx0ICAgIGNodW5rKTtcXG4rXFx0XFx0a3VubWFwX2xvY2FsKGthZGRyKTtcXG4rXFx0XFx0ZG9uZSArPSBjaHVuaztcXG4rXFx0fVxcbit9XFxuK1xcbisvKlxcbisgKiBPcHBvcnR1bmlzdGljIGxvY2tsZXNzIGZhc3QgcGF0aCBmb3IgX19hY2Nlc3NfcmVtb3RlX3ZtKCkgcmVhZHMuXFxuKyAqXFxuKyAqIE1lbW9yeSBhbHJlYWR5IHJlc2lkZW50IGluIEBtbSBjYW4gYmUgcmVhZCB3aXRob3V0IHRha2luZyB0aGUgZnJlcXVlbnRseVxcbisgKiBjb250ZW5kZWQgbW1hcF9sb2NrOiBhIHBlci1WTUEgbG9jayBzdGFiaWxpemVzIHRoZSBWTUEsIGFuZCBmb2xpb193YWxrX3N0YXJ0KClcXG4rICogd2l0aCBGV19WTUFfTE9DS0VEIGdyYWJzIGEgc2hvcnQtbGl2ZWQgcmVmZXJlbmNlIHRvIGEgcHJlc2VudCBwYWdlIGZyb20gYSBwYWdlXFxuKyAqIHRhYmxlIHdhbGsgcnVuIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCwgd2hpY2ggc2VyaWFsaXplcyBhZ2FpbnN0IGNvbmN1cnJlbnRcXG4rICogcGFnZSB0YWJsZSBmcmVlaW5nIHRoZSBzYW1lIHdheSBndXBfZmFzdCBkb2VzIChyZWx5aW5nIG9uXFxuKyAqIE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUpLlxcbisgKlxcbisgKiBPbmx5IGEgcmVxdWVzdCB0aGF0IGxpZXMgZW50aXJlbHkgd2l0aGluIGEgc2luZ2xlIFZNQSBpcyBoYW5kbGVkIGhlcmUsXFxuKyAqIHdoaWNoIHNob3VsZCBub3QgYmUgYW4gaXNzdWUgaW4gcHJhY3RpY2Ugc2luY2UgZXZlcnkgY2FsbGVyIGhhcyBhXFxuKyAqIGJ1ZmZlciBvZiBQQUdFX1NJWkUgb3Igc21hbGxlci4gTG9vcCBpdGVyYXRpb24gaW5zaWRlIHRoaXMgZnVuY3Rpb25cXG4rICogc2hvdWxkIGJlIHJhcmUsIHRvby5cXG4rICpcXG4rICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkIHZpYSB0aGUgZmFzdCBwYXRoLlxcbisgKi9cXG4rc3RhdGljIGludCBhY2Nlc3NfcmVtb3RlX3ZtX2Zhc3Qoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4rXFx0XFx0XFx0XFx0IHZvaWQgKmJ1ZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IGd1cF9mbGFncylcXG4re1xcbitcXHR2b2lkICpvbGRfYnVmID0gYnVmO1xcbitcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcXG4rXFxuK1xcdGFkZHIgPSB1bnRhZ2dlZF9hZGRyX3JlbW90ZV91bmxvY2tlZChtbSwgYWRkcik7XFxuK1xcbitcXHR2bWEgPSBsb2NrX3ZtYV91bmRlcl9yY3UobW0sIGFkZHIpO1xcbitcXHRpZiAoIXZtYSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHQvKiBPbmx5IGhhbmRsZSBhIHJlcXVlc3QgY29udGFpbmVkIGVudGlyZWx5IHdpdGhpbiB0aGlzIG9uZSBWTUEuICovXFxuK1xcdGlmIChsZW4gXFx1MDAzZSB2bWEtXFx1MDAzZXZtX2VuZCAtIGFkZHIpXFxuK1xcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4rXFxuK1xcdGlmICghdm1hX3Blcm1pdHNfZmFzdF9hY2Nlc3Modm1hLCBndXBfZmxhZ3MpKVxcbitcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcbitcXHR3aGlsZSAobGVuKSB7XFxuK1xcdFxcdHN0cnVjdCBmb2xpb193YWxrIGZ3O1xcbitcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbitcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBlbnRyeV9zaXplLCBmb2xpb19vZmYsIHNwYW4sIGlycV9mbGFncztcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSBsb2NrbGVzcyBwYWdlIHRhYmxlIHdhbGsgbXVzdCBydW4gd2l0aCBpbnRlcnJ1cHRzXFxuK1xcdFxcdCAqIGRpc2FibGVkOiBwYWdlIHRhYmxlIGZyZWVpbmcgKG11bm1hcCBvciBUSFAgY29sbGFwc2UsIHdoaWNoXFxuK1xcdFxcdCAqIElQSSB2aWEgdGxiX3JlbW92ZV90YWJsZV9zeW5jX29uZSgpIGFuZCB3YWl0KSB0aGVuIGNhbm5vdCBmcmVlXFxuK1xcdFxcdCAqIGEgdGFibGUgbWlkLXdhbGsgLS0gdGhlIHNhbWUgY29udHJhY3QgZ3VwX2Zhc3QgcmVsaWVzIG9uLiAgSVJRc1xcbitcXHRcXHQgKiBhcmUgcmVzdG9yZWQgb25jZSB0aGUgZm9saW8gaXMgcGlubmVkOyB0aGUgY29weSBiZWxvdyBob2xkcyBvbmx5XFxuK1xcdFxcdCAqIHRoZSBmb2xpbyByZWZlcmVuY2UuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRsb2NhbF9pcnFfc2F2ZShpcnFfZmxhZ3MpO1xcbitcXHRcXHRmb2xpbyA9IGZvbGlvX3dhbGtfc3RhcnQoXFx1MDAyNmZ3LCB2bWEsIGFkZHIsIEZXX1ZNQV9MT0NLRUQpO1xcbitcXHRcXHRpZiAoIWZvbGlvKSB7XFxuK1xcdFxcdFxcdGxvY2FsX2lycV9yZXN0b3JlKGlycV9mbGFncyk7XFxuK1xcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXHQvKiBub3QgcHJlc2VudDogbGV0IHRoZSBzbG93IHBhdGggZmF1bHQgaXQgaW4gKi9cXG4rXFx0XFx0fVxcbitcXHRcXHRwYWdlID0gZncucGFnZTtcXG4rXFx0XFx0aWYgKCFwYWdlKSB7XFxuK1xcdFxcdFxcdC8qIE5vIHN0cnVjdCBwYWdlIHRvIGNvcHkgKGUuZy4gYSBzcGVjaWFsIFBURSkuICovXFxuK1xcdFxcdFxcdGZvbGlvX3dhbGtfZW5kKFxcdTAwMjZmdywgdm1hKTtcXG4rXFx0XFx0XFx0bG9jYWxfaXJxX3Jlc3RvcmUoaXJxX2ZsYWdzKTtcXG4rXFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbitcXHRcXHR9XFxuK1xcdFxcdGVudHJ5X3NpemUgPSBmd19lbnRyeV9zaXplKGZ3LmxldmVsKTtcXG4rXFx0XFx0Zm9saW9fZ2V0KGZvbGlvKTtcXG4rXFx0XFx0Zm9saW9fd2Fsa19lbmQoXFx1MDAyNmZ3LCB2bWEpO1xcbitcXHRcXHRsb2NhbF9pcnFfcmVzdG9yZShpcnFfZmxhZ3MpO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogZm9saW9fd2Fsa19zdGFydCgpIHZhbGlkYXRlZCBvbmUgcHJlc2VudCBtYXBwaW5nIGVudHJ5XFxuK1xcdFxcdCAqIChQQUdFL1BNRC9QVURfU0laRSkuICBDb3B5IHRvIHRoZSBlbmQgb2YgdGhhdCBlbnRyeSwgYm91bmRlZCBieVxcbitcXHRcXHQgKiB0aGUgZm9saW8gYW5kIHRoZSByZW1haW5pbmcgbGVuZ3RoIChhbHJlYWR5IHdpdGhpbiB0aGUgVk1BKSwgc29cXG4rXFx0XFx0ICogYSBodWdlIG1hcHBpbmcgaXMgaGFuZGxlZCBpbiBhIHNpbmdsZSB3YWxrLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0Zm9saW9fb2ZmID0gKGZvbGlvX3BhZ2VfaWR4KGZvbGlvLCBwYWdlKSBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKSArXFxuK1xcdFxcdFxcdCAgICBvZmZzZXRfaW5fcGFnZShhZGRyKTtcXG4rXFx0XFx0c3BhbiA9IG1pbjMoKHVuc2lnbmVkIGxvbmcpbGVuLFxcbitcXHRcXHRcXHQgICAgZW50cnlfc2l6ZSAtIChhZGRyIFxcdTAwMjYgKGVudHJ5X3NpemUgLSAxKSksXFxuK1xcdFxcdFxcdCAgICAoZm9saW9fbnJfcGFnZXMoZm9saW8pIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpIC0gZm9saW9fb2ZmKTtcXG4rXFxuK1xcdFxcdGNvcHlfZm9saW9fcGFnZXModm1hLCBmb2xpbywgZm9saW9fb2ZmLCBhZGRyLCBidWYsIHNwYW4pO1xcbitcXG4rXFx0XFx0LyogTWF0Y2ggdGhlIEZPTExfVE9VQ0ggYmVoYXZpb3VyIG9mIHRoZSBzbG93IChHVVApIHBhdGguICovXFxuK1xcdFxcdGZvbGlvX21hcmtfYWNjZXNzZWQoZm9saW8pO1xcbitcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbitcXHRcXHRsZW4gLT0gc3BhbjtcXG4rXFx0XFx0YnVmICs9IHNwYW47XFxuK1xcdFxcdGFkZHIgKz0gc3BhbjtcXG4rXFx0fVxcbitcXG4rb3V0X3VubG9jazpcXG4rXFx0dm1hX2VuZF9yZWFkKHZtYSk7XFxuK1xcdHJldHVybiBidWYgLSBvbGRfYnVmO1xcbit9XFxuKyNlbHNlXFxuK3N0YXRpYyBpbnQgYWNjZXNzX3JlbW90ZV92bV9mYXN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuK1xcdFxcdFxcdFxcdCB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rI2VuZGlmIC8qIENPTkZJR19QRVJfVk1BX0xPQ0sgXFx1MDAyNlxcdTAwMjYgQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgKi9cXG4rXFxuIC8qXFxuICAqIEFjY2VzcyBhbm90aGVyIHByb2Nlc3MnIGFkZHJlc3Mgc3BhY2UgYXMgZ2l2ZW4gaW4gbW0uXFxuICAqL1xcbkBAIC03MDcxLDE1ICs3MjQ3LDMwIEBAIHN0YXRpYyBpbnQgX19hY2Nlc3NfcmVtb3RlX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdHZvaWQgKm9sZF9idWYgPSBidWY7XFxuIFxcdGludCB3cml0ZSA9IGd1cF9mbGFncyBcXHUwMDI2IEZPTExfV1JJVEU7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBUcnkgdGhlIGxvY2tsZXNzIGZhc3QgcGF0aCBmb3IgcmVhZHMgZmlyc3Q7IGl0IHRyYW5zZmVycyB3aGF0IGl0IGNhblxcbitcXHQgKiBmcm9tIHJlc2lkZW50IG1lbW9yeSB3aXRob3V0IHRha2luZyBtbWFwX2xvY2ssIGFuZCBsZWF2ZXMgdGhlXFxuK1xcdCAqIHJlbWFpbmRlciAoaWYgYW55KSB0byB0aGUgc2xvdyBwYXRoIGJlbG93LlxcbitcXHQgKi9cXG4rXFx0aWYgKCF3cml0ZSkge1xcbitcXHRcXHRpbnQgZG9uZSA9IGFjY2Vzc19yZW1vdGVfdm1fZmFzdChtbSwgYWRkciwgYnVmLCBsZW4sIGd1cF9mbGFncyk7XFxuK1xcbitcXHRcXHRhZGRyICs9IGRvbmU7XFxuK1xcdFxcdGJ1ZiArPSBkb25lO1xcbitcXHRcXHRsZW4gLT0gZG9uZTtcXG4rXFx0XFx0aWYgKCFsZW4pXFxuK1xcdFxcdFxcdHJldHVybiBidWYgLSBvbGRfYnVmO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAobW1hcF9yZWFkX2xvY2tfa2lsbGFibGUobW0pKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0cmV0dXJuIGJ1ZiAtIG9sZF9idWY7XFxuIFxcbiBcXHQvKiBVbnRhZyB0aGUgYWRkcmVzcyBiZWZvcmUgbG9va2luZyB1cCB0aGUgVk1BICovXFxuIFxcdGFkZHIgPSB1bnRhZ2dlZF9hZGRyX3JlbW90ZShtbSwgYWRkcik7XFxuIFxcbiBcXHQvKiBBdm9pZCB0cmlnZ2VyaW5nIHRoZSB0ZW1wb3Jhcnkgd2FybmluZyBpbiBfX2dldF91c2VyX3BhZ2VzICovXFxuIFxcdGlmICghdm1hX2xvb2t1cChtbSwgYWRkcikgXFx1MDAyNlxcdTAwMjYgIWV4cGFuZF9zdGFjayhtbSwgYWRkcikpXFxuLVxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRyZXR1cm4gYnVmIC0gb2xkX2J1ZjtcXG4gXFxuIFxcdC8qIGlnbm9yZSBlcnJvcnMsIGp1c3QgY2hlY2sgaG93IG11Y2ggd2FzIHN1Y2Nlc3NmdWxseSB0cmFuc2ZlcnJlZCAqL1xcbiBcXHR3aGlsZSAobGVuKSB7XFxuZGlmZiAtLWdpdCBhL21tL3BhZ2V3YWxrLmMgYi9tbS9wYWdld2Fsay5jXFxuaW5kZXggM2FlMjU4NmZmNDViNDQuLmFiMWU4MTk4M2NiOGM3IDEwMDY0NFxcbi0tLSBhL21tL3BhZ2V3YWxrLmNcXG4rKysgYi9tbS9wYWdld2Fsay5jXFxuQEAgLTg5MCw3ICs4OTAsMTAgQEAgaW50IHdhbGtfcGFnZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IGZpcnN0X2luZGV4LFxcbiAgKiBodWdlX3B0ZXBfc2V0XyosIC4uLikuIE5vdGUgdGhhdCB0aGUgcGFnZSB0YWJsZSBlbnRyeSBzdG9yZWQgaW4gQGZ3IG1pZ2h0XFxuICAqIG5vdCBjb3JyZXNwb25kIHRvIHRoZSBmaXJzdCBwaHlzaWNhbCBlbnRyeSBvZiBhIGxvZ2ljYWwgaHVnZXRsYiBlbnRyeS5cXG4gICpcXG4tICogVGhlIG1tYXAgbG9jayBtdXN0IGJlIGhlbGQgaW4gcmVhZCBtb2RlLlxcbisgKiBUaGUgbW1hcCBsb2NrIG11c3QgYmUgaGVsZCBpbiByZWFkIG1vZGUuIEFsdGVybmF0aXZlbHksIGlmIEBGV19WTUFfTE9DS0VEIGlzXFxuKyAqIHBhc3NlZCwgdGhlIFZNQSdzIHBlci1WTUEgbG9jayBtdXN0IGJlIGhlbGQgYW5kIGludGVycnVwdHMgbXVzdCBiZSBkaXNhYmxlZFxcbisgKiBhY3Jvc3MgdGhlIHdhbGsgYW5kIHVudGlsIGZvbGlvX3dhbGtfZW5kKCkgKG9ubHkgc3VwcG9ydGVkIHdpdGggUkNVLWZyZWVkIHBhZ2VcXG4rICogdGFibGVzLCBpLmUuIENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFLCBhbmQgbm90IGZvciBodWdldGxiKS5cXG4gICpcXG4gICogUmV0dXJuOiBmb2xpbyBwb2ludGVyIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBOVUxMLlxcbiAgKi9cXG5AQCAtOTA4LDcgKzkxMSwyOSBAQCBzdHJ1Y3QgZm9saW8gKmZvbGlvX3dhbGtfc3RhcnQoc3RydWN0IGZvbGlvX3dhbGsgKmZ3LFxcbiBcXHRwZ2RfdCAqcGdkcDtcXG4gXFx0cDRkX3QgKnA0ZHA7XFxuIFxcbi1cXHRtbWFwX2Fzc2VydF9sb2NrZWQodm1hLVxcdTAwM2V2bV9tbSk7XFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IEZXX1ZNQV9MT0NLRUQpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogTG9ja2xlc3Mgd2FsayB1bmRlciB0aGUgcGVyLVZNQSBsb2NrIGluc3RlYWQgb2YgdGhlIG1tYXBcXG4rXFx0XFx0ICogbG9jay4gVGhlIFZNQSBsb2NrIGtlZXBzIHRoZSBWTUEgc3RhYmxlLCBidXQgdGhlIHBhZ2UgdGFibGVzXFxuK1xcdFxcdCAqIHdhbGtlZCBiZWxvdyBpdCBjYW4gc3RpbGwgYmUgZnJlZWQgY29uY3VycmVudGx5OiBhIG11bm1hcCgpIG9yXFxuK1xcdFxcdCAqIFRIUCBjb2xsYXBzZSBvZiBhbiBhZGphY2VudCByZWdpb24gaW4gdGhlIHNhbWUgbW0gY2FuIGZyZWUgYVxcbitcXHRcXHQgKiBzaGFyZWQgdXBwZXItbGV2ZWwgdGFibGUsIGFuZCBjb2xsYXBzZV9odWdlX3BhZ2UoKSAtXFx1MDAzZVxcbitcXHRcXHQgKiByZXRyYWN0X3BhZ2VfdGFibGVzKCkgZnJlZXMgcGFnZSB0YWJsZXMgb2YgVk1BcyB3aG9zZSBsb2NrIGl0XFxuK1xcdFxcdCAqIGRvZXMgbm90IGhvbGQuIFBhZ2UgdGFibGUgZnJlZWluZyBzZXJpYWxpemVzIGFnYWluc3QgbG9ja2xlc3NcXG4rXFx0XFx0ICogd2Fsa2VycyB2aWEgdGxiX3JlbW92ZV90YWJsZV9zeW5jX29uZSgpLCB3aGljaCBJUElzIGFuZCB3YWl0c1xcbitcXHRcXHQgKiBmb3IgZXZlcnkgQ1BVIHRvIGVuYWJsZSBpbnRlcnJ1cHRzOyBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsXFxuK1xcdFxcdCAqIHNlY3Rpb24gZG9lcyBub3QgYmxvY2sgdGhhdCBJUEksIHNvIHRoZSBjYWxsZXIgbXVzdCBrZWVwXFxuK1xcdFxcdCAqIGludGVycnVwdHMgZGlzYWJsZWQgYWNyb3NzIHRoZSB3aG9sZSB3YWxrLCBsaWtlIGd1cF9mYXN0LlxcbitcXHRcXHQgKiBIdWdldGxiIChQTUQgc2hhcmluZykgbWFwcyBwYWdlIHRhYmxlcyBub3QgY292ZXJlZCBieSB0aGlzXFxuK1xcdFxcdCAqIFZNQSdzIGxvY2sgYW5kIGlzIG5vdCBzdXBwb3J0ZWQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRWTV9XQVJOX09OX09OQ0UoIUlTX0VOQUJMRUQoQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUpKTtcXG4rXFx0XFx0Vk1fV0FSTl9PTl9PTkNFKGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKTtcXG4rXFx0XFx0bG9ja2RlcF9hc3NlcnRfaXJxc19kaXNhYmxlZCgpO1xcbitcXHRcXHR2bWFfYXNzZXJ0X2xvY2tlZCh2bWEpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRtbWFwX2Fzc2VydF9sb2NrZWQodm1hLVxcdTAwM2V2bV9tbSk7XFxuK1xcdH1cXG4gXFx0dm1hX3BndGFibGVfd2Fsa19iZWdpbih2bWEpO1xcbiBcXG4gXFx0aWYgKFdBUk5fT05fT05DRShhZGRyIFxcdTAwM2Mgdm1hLVxcdTAwM2V2bV9zdGFydCB8fCBhZGRyIFxcdTAwM2U9IHZtYS1cXHUwMDNldm1fZW5kKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDI6MTA6MTYuMDc3MDEwOTIxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODcwNjg1MjU0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQRVJfVk1BX0xPQ0tcIixcbiAgICBcIk1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhY2Nlc3NfcmVtb3RlX3ZtX2Zhc3RcIixcbiAgICBcIl9fYWNjZXNzX3JlbW90ZV92bVwiLFxuICAgIFwiZm9saW9fd2Fsa19zdGFydFwiLFxuICAgIFwiY29weV9mb2xpb19wYWdlc1wiLFxuICAgIFwidm1hX3Blcm1pdHNfZmFzdF9hY2Nlc3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9ja2xlc3MgZmFzdCBwYXRoIGZvciByZW1vdGUgbWVtb3J5IGFjY2VzcyAoYF9fYWNjZXNzX3JlbW90ZV92bWApLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHN5c2NhbGxzIGxpa2UgYHByb2Nlc3Nfdm1fcmVhZHZgIGFuZCBgcHRyYWNlYC4gVGhlIGZhc3QgcGF0aCByZWxpZXMgb24gcGVyLVZNQSBsb2NrcyBhbmQgUkNVLWZyZWVkIHBhZ2UgdGFibGVzLCBtYWtpbmcgaXQgaGlnaGx5IGZ1bmN0aW9uYWwgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTYwMTc0NDI2MjNlYTRlNmVkNTBkOWI2MDAzYmZiZTBmNGM5NDM4OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVuIDI1IDAyOjEwOjEzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmhcbmluZGV4IGVmNWI1MDdkZTM0ZTJlLi5jZWU3MTBmNjQ2NThhYSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmhcbkBAIC0xMDAsMTggKzEwMCwxOCBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbW1fbGFtX2NyM19tYXNrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBkdXBfbGFtKHN0cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiB7XG4gXHRtbS1cdTAwM2Vjb250ZXh0LmxhbV9jcjNfbWFzayA9IG9sZG1tLVx1MDAzZWNvbnRleHQubGFtX2NyM19tYXNrO1xuLVx0bW0tXHUwMDNlY29udGV4dC51bnRhZ19tYXNrID0gb2xkbW0tXHUwMDNlY29udGV4dC51bnRhZ19tYXNrO1xuK1x0V1JJVEVfT05DRShtbS1cdTAwM2Vjb250ZXh0LnVudGFnX21hc2ssIFJFQURfT05DRShvbGRtbS1cdTAwM2Vjb250ZXh0LnVudGFnX21hc2spKTtcbiB9XG4gXG4gI2RlZmluZSBtbV91bnRhZ19tYXNrIG1tX3VudGFnX21hc2tcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbW1fdW50YWdfbWFzayhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiB7XG4tXHRyZXR1cm4gbW0tXHUwMDNlY29udGV4dC51bnRhZ19tYXNrO1xuK1x0cmV0dXJuIFJFQURfT05DRShtbS1cdTAwM2Vjb250ZXh0LnVudGFnX21hc2spO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgbW1fcmVzZXRfdW50YWdfbWFzayhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiB7XG4tXHRtbS1cdTAwM2Vjb250ZXh0LnVudGFnX21hc2sgPSAtMVVMO1xuK1x0V1JJVEVfT05DRShtbS1cdTAwM2Vjb250ZXh0LnVudGFnX21hc2ssIC0xVUwpO1xuIH1cbiBcbiAjZGVmaW5lIGFyY2hfcGd0YWJsZV9kbWFfY29tcGF0IGFyY2hfcGd0YWJsZV9kbWFfY29tcGF0XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oXG5pbmRleCAyMGRlMzRjYzlhYTZlNy4uOTMzYjBiOGI0ZDYwNDcgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzXzY0LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaFxuQEAgLTM5LDExICszOSwyMyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX191bnRhZ2dlZF9hZGRyKHVuc2lnbmVkIGxvbmcgYWRkcilcbiBcdChfX2ZvcmNlIF9fdHlwZW9mX18oYWRkcikpX191bnRhZ2dlZF9hZGRyKF9fYWRkcik7XHRcdFxcXG4gfSlcbiBcbisvKiBTdHJpcCB0aGUgdGFnIGJpdHMgZnJvbSBhIHJlbW90ZSBtbSdzIGFkZHJlc3M7IHVzYWJsZSB3aXRob3V0IHRoZSBtbWFwIGxvY2suICovXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fdW50YWdnZWRfYWRkcl9yZW1vdGVfdW5sb2NrZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4rXHRcdFx0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBhZGRyKVxuK3tcbitcdHJldHVybiBhZGRyIFx1MDAyNiBSRUFEX09OQ0UobW0tXHUwMDNlY29udGV4dC51bnRhZ19tYXNrKTtcbit9XG4rXG4rI2RlZmluZSB1bnRhZ2dlZF9hZGRyX3JlbW90ZV91bmxvY2tlZChtbSwgYWRkcilcdCh7XHRcdFx0XFxcbitcdHVuc2lnbmVkIGxvbmcgX19hZGRyID0gKF9fZm9yY2UgdW5zaWduZWQgbG9uZykoYWRkcik7XHRcdFxcXG4rXHQoX19mb3JjZSBfX3R5cGVvZl9fKGFkZHIpKV9fdW50YWdnZWRfYWRkcl9yZW1vdGVfdW5sb2NrZWQobW0sIF9fYWRkcik7IFxcXG4rfSlcbitcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX191bnRhZ2dlZF9hZGRyX3JlbW90ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGFkZHIpXG4ge1xuIFx0bW1hcF9hc3NlcnRfbG9ja2VkKG1tKTtcbi1cdHJldHVybiBhZGRyIFx1MDAyNiAobW0pLVx1MDAzZWNvbnRleHQudW50YWdfbWFzaztcbitcdHJldHVybiBfX3VudGFnZ2VkX2FkZHJfcmVtb3RlX3VubG9ja2VkKG1tLCBhZGRyKTtcbiB9XG4gXG4gI2RlZmluZSB1bnRhZ2dlZF9hZGRyX3JlbW90ZShtbSwgYWRkcilcdCh7XHRcdFx0XHRcXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jXG5pbmRleCBkNDRhZmJlMDA1YmI1MS4uNTUwOTYxMzZkZTUzMTMgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jXG5AQCAtODE0LDcgKzgxNCw3IEBAIHN0YXRpYyB2b2lkIGVuYWJsZV9sYW1fZnVuYyh2b2lkICpfX21tKVxuIHN0YXRpYyB2b2lkIG1tX2VuYWJsZV9sYW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4ge1xuIFx0bW0tXHUwMDNlY29udGV4dC5sYW1fY3IzX21hc2sgPSBYODZfQ1IzX0xBTV9VNTc7XG4tXHRtbS1cdTAwM2Vjb250ZXh0LnVudGFnX21hc2sgPSAgfkdFTk1BU0soNjIsIDU3KTtcbitcdFdSSVRFX09OQ0UobW0tXHUwMDNlY29udGV4dC51bnRhZ19tYXNrLCB+R0VOTUFTSyg2MiwgNTcpKTtcbiBcbiBcdC8qXG4gXHQgKiBFdmVuIHRob3VnaCB0aGUgcHJvY2VzcyBtdXN0IHN0aWxsIGJlIHNpbmdsZS10aHJlYWRlZCBhdCB0aGlzXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdld2Fsay5oIGIvaW5jbHVkZS9saW51eC9wYWdld2Fsay5oXG5pbmRleCBiNDFkNzI2NWMwMWJjMi4uZDAzODc0NzBkNzMyMmIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZXdhbGsuaFxuQEAgLTE1MCw2ICsxNTAsMTMgQEAgdHlwZWRlZiBpbnQgX19iaXR3aXNlIGZvbGlvX3dhbGtfZmxhZ3NfdDtcbiBcbiAvKiBXYWxrIHNoYXJlZCB6ZXJvcGFnZXMgKHNtYWxsICsgaHVnZSkgYXMgd2VsbC4gKi9cbiAjZGVmaW5lIEZXX1pFUk9QQUdFXHRcdFx0KChfX2ZvcmNlIGZvbGlvX3dhbGtfZmxhZ3NfdClCSVQoMCkpXG4rLypcbisgKiBUaGUgY2FsbGVyIGhvbGRzIHRoZSBwZXItVk1BIGxvY2sgaW5zdGVhZCBvZiB0aGUgbW1hcCBsb2NrLCB3aXRoIGludGVycnVwdHNcbisgKiBkaXNhYmxlZCBhY3Jvc3MgdGhlIHdhbGsgKHVudGlsIGZvbGlvX3dhbGtfZW5kKCkpIHRvIHNlcmlhbGl6ZSBhZ2FpbnN0IHBhZ2VcbisgKiB0YWJsZSBmcmVlaW5nLCB0aGUgc2FtZSB3YXkgZ3VwX2Zhc3QgZG9lcy4gT25seSB2YWxpZCB3aXRoIFJDVS1mcmVlZCBwYWdlXG4rICogdGFibGVzIChDT05GSUdfTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSkgYW5kIG5vdCBmb3IgaHVnZXRsYi5cbisgKi9cbisjZGVmaW5lIEZXX1ZNQV9MT0NLRURcdFx0XHQoKF9fZm9yY2UgZm9saW9fd2Fsa19mbGFnc190KUJJVCgxKSlcbiBcbiBlbnVtIGZvbGlvX3dhbGtfbGV2ZWwge1xuIFx0RldfTEVWRUxfUFRFLFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdWFjY2Vzcy5oIGIvaW5jbHVkZS9saW51eC91YWNjZXNzLmhcbmluZGV4IDhhMjY0NjYyYjI0MmM4Li5jOGM4MzM3MmM5ZDg3OCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvdWFjY2Vzcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaFxuQEAgLTM0LDYgKzM0LDE3IEBAXG4gfSlcbiAjZW5kaWZcbiBcbisvKlxuKyAqIExpa2UgdW50YWdnZWRfYWRkcl9yZW1vdGUoKSwgYnV0IGZvciBjYWxsZXJzIHRoYXQgc3RhYmlsaXplIEBtbSBieSBvdGhlclxuKyAqIG1lYW5zIChlLmcuIGEgcGVyLVZNQSBsb2NrKSBhbmQgbXVzdCBub3QgYXNzZXJ0IHRoZSBtbWFwIGxvY2suXG4rICovXG4rI2lmbmRlZiB1bnRhZ2dlZF9hZGRyX3JlbW90ZV91bmxvY2tlZFxuKyNkZWZpbmUgdW50YWdnZWRfYWRkcl9yZW1vdGVfdW5sb2NrZWQobW0sIGFkZHIpXHQoe1x0XFxcbitcdCh2b2lkKShtbSk7XHRcdFx0XHRcdFxcXG4rXHR1bnRhZ2dlZF9hZGRyKGFkZHIpO1x0XHRcdFx0XFxcbit9KVxuKyNlbmRpZlxuK1xuICNpZmRlZiBtYXNrZWRfdXNlcl9hY2Nlc3NfYmVnaW5cbiAgI2RlZmluZSBjYW5fZG9fbWFza2VkX3VzZXJfYWNjZXNzKCkgMVxuICMgaWZuZGVmIG1hc2tlZF91c2VyX3dyaXRlX2FjY2Vzc19iZWdpblxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IDg2YTk3MzExOWJkNDZjLi5kMmIyZjAwMTRhMGM2NiAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4rKysgYi9tbS9tZW1vcnkuY1xuQEAgLTQyLDYgKzQyLDggQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWxfc3RhdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tX2lubGluZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2VjcmV0bWVtLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdld2Fsay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvbW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL251bWFfYmFsYW5jaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC90YXNrLmhcdTAwM2VcbkBAIC03MDYyLDYgKzcwNjQsMTgwIEBAIGludCBnZW5lcmljX2FjY2Vzc19waHlzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gRVhQT1JUX1NZTUJPTF9HUEwoZ2VuZXJpY19hY2Nlc3NfcGh5cyk7XG4gI2VuZGlmXG4gXG4rLypcbisgKiBUaGUgZmFzdCBwYXRoIHVzZXMgZm9saW9fd2Fsa19zdGFydChGV19WTUFfTE9DS0VEKSwgd2hpY2ggbmVlZHMgdGhlIHBlci1WTUFcbisgKiBsb2NrIGFuZCBSQ1UtZnJlZWQgcGFnZSB0YWJsZXMgdG8gd2FsayBwYWdlIHRhYmxlcyB3aXRob3V0IHRoZSBtbWFwIGxvY2suXG4rICovXG4rI2lmIGRlZmluZWQoQ09ORklHX1BFUl9WTUFfTE9DSykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUpXG4rLypcbisgKiBSZWFkLXNpZGUgVk1BIGNoZWNrcyBmb3IgdGhlIGxvY2tsZXNzIGZhc3QgcGF0aCwgbWlycm9yaW5nIHRoZSByZWFkIHNpZGUgb2ZcbisgKiBjaGVja192bWFfZmxhZ3MoKTogcmVqZWN0IHdoYXQgRldfVk1BX0xPQ0tFRCBjYW5ub3QgaGFuZGxlIChodWdldGxiKSwgd2hhdFxuKyAqIG5lZWRzIHRoZSAtXHUwMDNlYWNjZXNzKCkgaGFuZGxlciAoVk1fSU8vVk1fUEZOTUFQKSwgb3Igd2hhdCBoYXMgbm8gc3RydWN0IHBhZ2UgdG9cbisgKiBjb3B5IChzZWNyZXRtZW0pOyBlbmZvcmNlIHRoZSBGT0xMX0FOT04gcmVzdHJpY3Rpb24gdGhhdFxuKyAqIC9wcm9jL1BJRC97Y21kbGluZSxlbnZpcm9ufSByZWx5IG9uIChDVkUtMjAxOC0xMTIwKTsgYW5kIHJlcXVpcmUgcmVhZCBhY2Nlc3NcbisgKiAoaG9ub3JpbmcgRk9MTF9GT1JDRSkuICBBbnl0aGluZyBub3QgcG9zaXRpdmVseSBhbGxvd2VkIGZhbGxzIGJhY2sgdG8gdGhlIHNsb3dcbisgKiBwYXRoLCB3aGljaCByZS12YWxpZGF0ZXMgZXZlcnl0aGluZy5cbisgKi9cbitzdGF0aWMgYm9vbCB2bWFfcGVybWl0c19mYXN0X2FjY2VzcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbitcdFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKVxuK3tcbitcdGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IChWTV9JTyB8IFZNX1BGTk1BUCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGlmIChpc192bV9odWdldGxiX3BhZ2Uodm1hKSB8fCB2bWFfaXNfc2VjcmV0bWVtKHZtYSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGlmICgoZ3VwX2ZsYWdzIFx1MDAyNiBGT0xMX0FOT04pIFx1MDAyNlx1MDAyNiAhdm1hX2lzX2Fub255bW91cyh2bWEpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRpZiAoISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1JFQUQpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICghKGd1cF9mbGFncyBcdTAwMjYgRk9MTF9GT1JDRSkgfHwgISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX01BWVJFQUQpKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuKy8qIFNpemUgb2YgdGhlIHNpbmdsZSBtYXBwaW5nIGVudHJ5IGZvbGlvX3dhbGtfc3RhcnQoKSBsYW5kZWQgb24uICovXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgZndfZW50cnlfc2l6ZShlbnVtIGZvbGlvX3dhbGtfbGV2ZWwgbGV2ZWwpXG4re1xuK1x0c3dpdGNoIChsZXZlbCkge1xuK1x0Y2FzZSBGV19MRVZFTF9QVUQ6XG4rXHRcdHJldHVybiBQVURfU0laRTtcbitcdGNhc2UgRldfTEVWRUxfUE1EOlxuK1x0XHRyZXR1cm4gUE1EX1NJWkU7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gUEFHRV9TSVpFO1xuK1x0fVxuK31cbitcbisvKlxuKyAqIENvcHkgQGxlbiBieXRlcyBvZiB0aGUgcGlubmVkIEBmb2xpbyBvdXQgdG8gQGJ1Ziwgc3RhcnRpbmcgYXQgYnl0ZSBvZmZzZXRcbisgKiBAZm9saW9fb2ZmIHdpdGhpbiB0aGUgZm9saW8gKHRoZSBwb3NpdGlvbiBvZiBAYWRkcikuICBNYXBzIGFuZCBjb3BpZXMgb25lXG4rICogcGFnZSBhdCBhIHRpbWUgLS0ga21hcF9sb2NhbF9mb2xpbygpIGZvciBISUdITUVNLCBjb3B5X2Zyb21fdXNlcl9wYWdlKCkgZm9yXG4rICogdGhlIHBlci1wYWdlIGZsdXNoIG9uIGFsaWFzaW5nIGNhY2hlcyAtLSB3aXRob3V0IHJlLXdhbGtpbmcgcGFnZSB0YWJsZXMuXG4rICogRWFjaCBwYWdlIGJvcnJvd3MgdGhlIGNhbGxlcidzIHNpbmdsZSBmb2xpbyByZWZlcmVuY2UsIHNvIHRoZSBtYXBwaW5nIGlzXG4rICogZHJvcHBlZCB3aXRoIGt1bm1hcF9sb2NhbCgpIHJhdGhlciB0aGFuIGZvbGlvX3JlbGVhc2Vfa21hcCgpLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGNvcHlfZm9saW9fcGFnZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rXHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGZvbGlvX29mZiwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK1x0XHRcdCAgICAgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIGxlbilcbit7XG4rXHR1bnNpZ25lZCBsb25nIGRvbmUgPSAwO1xuK1xuK1x0d2hpbGUgKGRvbmUgXHUwMDNjIGxlbikge1xuK1x0XHR1bnNpZ25lZCBsb25nIHBvcyA9IGZvbGlvX29mZiArIGRvbmU7XG4rXHRcdHVuc2lnbmVkIGxvbmcgcGFnZV9pZHggPSBwb3MgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4rXHRcdHVuc2lnbmVkIGludCBwYWdlX29mZiA9IHBvcyBcdTAwMjYgflBBR0VfTUFTSztcbitcdFx0dW5zaWduZWQgaW50IGNodW5rID0gbWluX3QodW5zaWduZWQgbG9uZywgbGVuIC0gZG9uZSxcbitcdFx0XHRcdFx0ICAgUEFHRV9TSVpFIC0gcGFnZV9vZmYpO1xuK1x0XHR2b2lkICprYWRkciA9IGttYXBfbG9jYWxfZm9saW8oZm9saW8sIHBhZ2VfaWR4IFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKTtcbitcbitcdFx0Y29weV9mcm9tX3VzZXJfcGFnZSh2bWEsIGZvbGlvX3BhZ2UoZm9saW8sIHBhZ2VfaWR4KSxcbitcdFx0XHRcdCAgICBhZGRyICsgZG9uZSwgYnVmICsgZG9uZSwga2FkZHIgKyBwYWdlX29mZixcbitcdFx0XHRcdCAgICBjaHVuayk7XG4rXHRcdGt1bm1hcF9sb2NhbChrYWRkcik7XG4rXHRcdGRvbmUgKz0gY2h1bms7XG4rXHR9XG4rfVxuK1xuKy8qXG4rICogT3Bwb3J0dW5pc3RpYyBsb2NrbGVzcyBmYXN0IHBhdGggZm9yIF9fYWNjZXNzX3JlbW90ZV92bSgpIHJlYWRzLlxuKyAqXG4rICogTWVtb3J5IGFscmVhZHkgcmVzaWRlbnQgaW4gQG1tIGNhbiBiZSByZWFkIHdpdGhvdXQgdGFraW5nIHRoZSBmcmVxdWVudGx5XG4rICogY29udGVuZGVkIG1tYXBfbG9jazogYSBwZXItVk1BIGxvY2sgc3RhYmlsaXplcyB0aGUgVk1BLCBhbmQgZm9saW9fd2Fsa19zdGFydCgpXG4rICogd2l0aCBGV19WTUFfTE9DS0VEIGdyYWJzIGEgc2hvcnQtbGl2ZWQgcmVmZXJlbmNlIHRvIGEgcHJlc2VudCBwYWdlIGZyb20gYSBwYWdlXG4rICogdGFibGUgd2FsayBydW4gd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLCB3aGljaCBzZXJpYWxpemVzIGFnYWluc3QgY29uY3VycmVudFxuKyAqIHBhZ2UgdGFibGUgZnJlZWluZyB0aGUgc2FtZSB3YXkgZ3VwX2Zhc3QgZG9lcyAocmVseWluZyBvblxuKyAqIE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUpLlxuKyAqXG4rICogT25seSBhIHJlcXVlc3QgdGhhdCBsaWVzIGVudGlyZWx5IHdpdGhpbiBhIHNpbmdsZSBWTUEgaXMgaGFuZGxlZCBoZXJlLFxuKyAqIHdoaWNoIHNob3VsZCBub3QgYmUgYW4gaXNzdWUgaW4gcHJhY3RpY2Ugc2luY2UgZXZlcnkgY2FsbGVyIGhhcyBhXG4rICogYnVmZmVyIG9mIFBBR0VfU0laRSBvciBzbWFsbGVyLiBMb29wIGl0ZXJhdGlvbiBpbnNpZGUgdGhpcyBmdW5jdGlvblxuKyAqIHNob3VsZCBiZSByYXJlLCB0b28uXG4rICpcbisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgdmlhIHRoZSBmYXN0IHBhdGguXG4rICovXG4rc3RhdGljIGludCBhY2Nlc3NfcmVtb3RlX3ZtX2Zhc3Qoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbitcdFx0XHRcdCB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG4re1xuK1x0dm9pZCAqb2xkX2J1ZiA9IGJ1ZjtcbitcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuK1xuK1x0YWRkciA9IHVudGFnZ2VkX2FkZHJfcmVtb3RlX3VubG9ja2VkKG1tLCBhZGRyKTtcbitcbitcdHZtYSA9IGxvY2tfdm1hX3VuZGVyX3JjdShtbSwgYWRkcik7XG4rXHRpZiAoIXZtYSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKiBPbmx5IGhhbmRsZSBhIHJlcXVlc3QgY29udGFpbmVkIGVudGlyZWx5IHdpdGhpbiB0aGlzIG9uZSBWTUEuICovXG4rXHRpZiAobGVuIFx1MDAzZSB2bWEtXHUwMDNldm1fZW5kIC0gYWRkcilcbitcdFx0Z290byBvdXRfdW5sb2NrO1xuK1xuK1x0aWYgKCF2bWFfcGVybWl0c19mYXN0X2FjY2Vzcyh2bWEsIGd1cF9mbGFncykpXG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbitcbitcdHdoaWxlIChsZW4pIHtcbitcdFx0c3RydWN0IGZvbGlvX3dhbGsgZnc7XG4rXHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4rXHRcdHN0cnVjdCBwYWdlICpwYWdlO1xuK1x0XHR1bnNpZ25lZCBsb25nIGVudHJ5X3NpemUsIGZvbGlvX29mZiwgc3BhbiwgaXJxX2ZsYWdzO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBUaGUgbG9ja2xlc3MgcGFnZSB0YWJsZSB3YWxrIG11c3QgcnVuIHdpdGggaW50ZXJydXB0c1xuK1x0XHQgKiBkaXNhYmxlZDogcGFnZSB0YWJsZSBmcmVlaW5nIChtdW5tYXAgb3IgVEhQIGNvbGxhcHNlLCB3aGljaFxuK1x0XHQgKiBJUEkgdmlhIHRsYl9yZW1vdmVfdGFibGVfc3luY19vbmUoKSBhbmQgd2FpdCkgdGhlbiBjYW5ub3QgZnJlZVxuK1x0XHQgKiBhIHRhYmxlIG1pZC13YWxrIC0tIHRoZSBzYW1lIGNvbnRyYWN0IGd1cF9mYXN0IHJlbGllcyBvbi4gIElSUXNcbitcdFx0ICogYXJlIHJlc3RvcmVkIG9uY2UgdGhlIGZvbGlvIGlzIHBpbm5lZDsgdGhlIGNvcHkgYmVsb3cgaG9sZHMgb25seVxuK1x0XHQgKiB0aGUgZm9saW8gcmVmZXJlbmNlLlxuK1x0XHQgKi9cbitcdFx0bG9jYWxfaXJxX3NhdmUoaXJxX2ZsYWdzKTtcbitcdFx0Zm9saW8gPSBmb2xpb193YWxrX3N0YXJ0KFx1MDAyNmZ3LCB2bWEsIGFkZHIsIEZXX1ZNQV9MT0NLRUQpO1xuK1x0XHRpZiAoIWZvbGlvKSB7XG4rXHRcdFx0bG9jYWxfaXJxX3Jlc3RvcmUoaXJxX2ZsYWdzKTtcbitcdFx0XHRnb3RvIG91dF91bmxvY2s7XHQvKiBub3QgcHJlc2VudDogbGV0IHRoZSBzbG93IHBhdGggZmF1bHQgaXQgaW4gKi9cbitcdFx0fVxuK1x0XHRwYWdlID0gZncucGFnZTtcbitcdFx0aWYgKCFwYWdlKSB7XG4rXHRcdFx0LyogTm8gc3RydWN0IHBhZ2UgdG8gY29weSAoZS5nLiBhIHNwZWNpYWwgUFRFKS4gKi9cbitcdFx0XHRmb2xpb193YWxrX2VuZChcdTAwMjZmdywgdm1hKTtcbitcdFx0XHRsb2NhbF9pcnFfcmVzdG9yZShpcnFfZmxhZ3MpO1xuK1x0XHRcdGdvdG8gb3V0X3VubG9jaztcbitcdFx0fVxuK1x0XHRlbnRyeV9zaXplID0gZndfZW50cnlfc2l6ZShmdy5sZXZlbCk7XG4rXHRcdGZvbGlvX2dldChmb2xpbyk7XG4rXHRcdGZvbGlvX3dhbGtfZW5kKFx1MDAyNmZ3LCB2bWEpO1xuK1x0XHRsb2NhbF9pcnFfcmVzdG9yZShpcnFfZmxhZ3MpO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBmb2xpb193YWxrX3N0YXJ0KCkgdmFsaWRhdGVkIG9uZSBwcmVzZW50IG1hcHBpbmcgZW50cnlcbitcdFx0ICogKFBBR0UvUE1EL1BVRF9TSVpFKS4gIENvcHkgdG8gdGhlIGVuZCBvZiB0aGF0IGVudHJ5LCBib3VuZGVkIGJ5XG4rXHRcdCAqIHRoZSBmb2xpbyBhbmQgdGhlIHJlbWFpbmluZyBsZW5ndGggKGFscmVhZHkgd2l0aGluIHRoZSBWTUEpLCBzb1xuK1x0XHQgKiBhIGh1Z2UgbWFwcGluZyBpcyBoYW5kbGVkIGluIGEgc2luZ2xlIHdhbGsuXG4rXHRcdCAqL1xuK1x0XHRmb2xpb19vZmYgPSAoZm9saW9fcGFnZV9pZHgoZm9saW8sIHBhZ2UpIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSArXG4rXHRcdFx0ICAgIG9mZnNldF9pbl9wYWdlKGFkZHIpO1xuK1x0XHRzcGFuID0gbWluMygodW5zaWduZWQgbG9uZylsZW4sXG4rXHRcdFx0ICAgIGVudHJ5X3NpemUgLSAoYWRkciBcdTAwMjYgKGVudHJ5X3NpemUgLSAxKSksXG4rXHRcdFx0ICAgIChmb2xpb19ucl9wYWdlcyhmb2xpbykgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpIC0gZm9saW9fb2ZmKTtcbitcbitcdFx0Y29weV9mb2xpb19wYWdlcyh2bWEsIGZvbGlvLCBmb2xpb19vZmYsIGFkZHIsIGJ1Ziwgc3Bhbik7XG4rXG4rXHRcdC8qIE1hdGNoIHRoZSBGT0xMX1RPVUNIIGJlaGF2aW91ciBvZiB0aGUgc2xvdyAoR1VQKSBwYXRoLiAqL1xuK1x0XHRmb2xpb19tYXJrX2FjY2Vzc2VkKGZvbGlvKTtcbitcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbitcdFx0bGVuIC09IHNwYW47XG4rXHRcdGJ1ZiArPSBzcGFuO1xuK1x0XHRhZGRyICs9IHNwYW47XG4rXHR9XG4rXG4rb3V0X3VubG9jazpcbitcdHZtYV9lbmRfcmVhZCh2bWEpO1xuK1x0cmV0dXJuIGJ1ZiAtIG9sZF9idWY7XG4rfVxuKyNlbHNlXG4rc3RhdGljIGludCBhY2Nlc3NfcmVtb3RlX3ZtX2Zhc3Qoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbitcdFx0XHRcdCB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuKyNlbmRpZiAvKiBDT05GSUdfUEVSX1ZNQV9MT0NLIFx1MDAyNlx1MDAyNiBDT05GSUdfTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSAqL1xuK1xuIC8qXG4gICogQWNjZXNzIGFub3RoZXIgcHJvY2VzcycgYWRkcmVzcyBzcGFjZSBhcyBnaXZlbiBpbiBtbS5cbiAgKi9cbkBAIC03MDcxLDE1ICs3MjQ3LDMwIEBAIHN0YXRpYyBpbnQgX19hY2Nlc3NfcmVtb3RlX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHR2b2lkICpvbGRfYnVmID0gYnVmO1xuIFx0aW50IHdyaXRlID0gZ3VwX2ZsYWdzIFx1MDAyNiBGT0xMX1dSSVRFO1xuIFxuK1x0LypcbitcdCAqIFRyeSB0aGUgbG9ja2xlc3MgZmFzdCBwYXRoIGZvciByZWFkcyBmaXJzdDsgaXQgdHJhbnNmZXJzIHdoYXQgaXQgY2FuXG4rXHQgKiBmcm9tIHJlc2lkZW50IG1lbW9yeSB3aXRob3V0IHRha2luZyBtbWFwX2xvY2ssIGFuZCBsZWF2ZXMgdGhlXG4rXHQgKiByZW1haW5kZXIgKGlmIGFueSkgdG8gdGhlIHNsb3cgcGF0aCBiZWxvdy5cbitcdCAqL1xuK1x0aWYgKCF3cml0ZSkge1xuK1x0XHRpbnQgZG9uZSA9IGFjY2Vzc19yZW1vdGVfdm1fZmFzdChtbSwgYWRkciwgYnVmLCBsZW4sIGd1cF9mbGFncyk7XG4rXG4rXHRcdGFkZHIgKz0gZG9uZTtcbitcdFx0YnVmICs9IGRvbmU7XG4rXHRcdGxlbiAtPSBkb25lO1xuK1x0XHRpZiAoIWxlbilcbitcdFx0XHRyZXR1cm4gYnVmIC0gb2xkX2J1ZjtcbitcdH1cbitcbiBcdGlmIChtbWFwX3JlYWRfbG9ja19raWxsYWJsZShtbSkpXG4tXHRcdHJldHVybiAwO1xuK1x0XHRyZXR1cm4gYnVmIC0gb2xkX2J1ZjtcbiBcbiBcdC8qIFVudGFnIHRoZSBhZGRyZXNzIGJlZm9yZSBsb29raW5nIHVwIHRoZSBWTUEgKi9cbiBcdGFkZHIgPSB1bnRhZ2dlZF9hZGRyX3JlbW90ZShtbSwgYWRkcik7XG4gXG4gXHQvKiBBdm9pZCB0cmlnZ2VyaW5nIHRoZSB0ZW1wb3Jhcnkgd2FybmluZyBpbiBfX2dldF91c2VyX3BhZ2VzICovXG4gXHRpZiAoIXZtYV9sb29rdXAobW0sIGFkZHIpIFx1MDAyNlx1MDAyNiAhZXhwYW5kX3N0YWNrKG1tLCBhZGRyKSlcbi1cdFx0cmV0dXJuIDA7XG4rXHRcdHJldHVybiBidWYgLSBvbGRfYnVmO1xuIFxuIFx0LyogaWdub3JlIGVycm9ycywganVzdCBjaGVjayBob3cgbXVjaCB3YXMgc3VjY2Vzc2Z1bGx5IHRyYW5zZmVycmVkICovXG4gXHR3aGlsZSAobGVuKSB7XG5kaWZmIC0tZ2l0IGEvbW0vcGFnZXdhbGsuYyBiL21tL3BhZ2V3YWxrLmNcbmluZGV4IDNhZTI1ODZmZjQ1YjQ0Li5hYjFlODE5ODNjYjhjNyAxMDA2NDRcbi0tLSBhL21tL3BhZ2V3YWxrLmNcbisrKyBiL21tL3BhZ2V3YWxrLmNcbkBAIC04OTAsNyArODkwLDEwIEBAIGludCB3YWxrX3BhZ2VfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBmaXJzdF9pbmRleCxcbiAgKiBodWdlX3B0ZXBfc2V0XyosIC4uLikuIE5vdGUgdGhhdCB0aGUgcGFnZSB0YWJsZSBlbnRyeSBzdG9yZWQgaW4gQGZ3IG1pZ2h0XG4gICogbm90IGNvcnJlc3BvbmQgdG8gdGhlIGZpcnN0IHBoeXNpY2FsIGVudHJ5IG9mIGEgbG9naWNhbCBodWdldGxiIGVudHJ5LlxuICAqXG4tICogVGhlIG1tYXAgbG9jayBtdXN0IGJlIGhlbGQgaW4gcmVhZCBtb2RlLlxuKyAqIFRoZSBtbWFwIGxvY2sgbXVzdCBiZSBoZWxkIGluIHJlYWQgbW9kZS4gQWx0ZXJuYXRpdmVseSwgaWYgQEZXX1ZNQV9MT0NLRUQgaXNcbisgKiBwYXNzZWQsIHRoZSBWTUEncyBwZXItVk1BIGxvY2sgbXVzdCBiZSBoZWxkIGFuZCBpbnRlcnJ1cHRzIG11c3QgYmUgZGlzYWJsZWRcbisgKiBhY3Jvc3MgdGhlIHdhbGsgYW5kIHVudGlsIGZvbGlvX3dhbGtfZW5kKCkgKG9ubHkgc3VwcG9ydGVkIHdpdGggUkNVLWZyZWVkIHBhZ2VcbisgKiB0YWJsZXMsIGkuZS4gQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUsIGFuZCBub3QgZm9yIGh1Z2V0bGIpLlxuICAqXG4gICogUmV0dXJuOiBmb2xpbyBwb2ludGVyIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBOVUxMLlxuICAqL1xuQEAgLTkwOCw3ICs5MTEsMjkgQEAgc3RydWN0IGZvbGlvICpmb2xpb193YWxrX3N0YXJ0KHN0cnVjdCBmb2xpb193YWxrICpmdyxcbiBcdHBnZF90ICpwZ2RwO1xuIFx0cDRkX3QgKnA0ZHA7XG4gXG4tXHRtbWFwX2Fzc2VydF9sb2NrZWQodm1hLVx1MDAzZXZtX21tKTtcbitcdGlmIChmbGFncyBcdTAwMjYgRldfVk1BX0xPQ0tFRCkge1xuK1x0XHQvKlxuK1x0XHQgKiBMb2NrbGVzcyB3YWxrIHVuZGVyIHRoZSBwZXItVk1BIGxvY2sgaW5zdGVhZCBvZiB0aGUgbW1hcFxuK1x0XHQgKiBsb2NrLiBUaGUgVk1BIGxvY2sga2VlcHMgdGhlIFZNQSBzdGFibGUsIGJ1dCB0aGUgcGFnZSB0YWJsZXNcbitcdFx0ICogd2Fsa2VkIGJlbG93IGl0IGNhbiBzdGlsbCBiZSBmcmVlZCBjb25jdXJyZW50bHk6IGEgbXVubWFwKCkgb3JcbitcdFx0ICogVEhQIGNvbGxhcHNlIG9mIGFuIGFkamFjZW50IHJlZ2lvbiBpbiB0aGUgc2FtZSBtbSBjYW4gZnJlZSBhXG4rXHRcdCAqIHNoYXJlZCB1cHBlci1sZXZlbCB0YWJsZSwgYW5kIGNvbGxhcHNlX2h1Z2VfcGFnZSgpIC1cdTAwM2VcbitcdFx0ICogcmV0cmFjdF9wYWdlX3RhYmxlcygpIGZyZWVzIHBhZ2UgdGFibGVzIG9mIFZNQXMgd2hvc2UgbG9jayBpdFxuK1x0XHQgKiBkb2VzIG5vdCBob2xkLiBQYWdlIHRhYmxlIGZyZWVpbmcgc2VyaWFsaXplcyBhZ2FpbnN0IGxvY2tsZXNzXG4rXHRcdCAqIHdhbGtlcnMgdmlhIHRsYl9yZW1vdmVfdGFibGVfc3luY19vbmUoKSwgd2hpY2ggSVBJcyBhbmQgd2FpdHNcbitcdFx0ICogZm9yIGV2ZXJ5IENQVSB0byBlbmFibGUgaW50ZXJydXB0czsgYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbFxuK1x0XHQgKiBzZWN0aW9uIGRvZXMgbm90IGJsb2NrIHRoYXQgSVBJLCBzbyB0aGUgY2FsbGVyIG11c3Qga2VlcFxuK1x0XHQgKiBpbnRlcnJ1cHRzIGRpc2FibGVkIGFjcm9zcyB0aGUgd2hvbGUgd2FsaywgbGlrZSBndXBfZmFzdC5cbitcdFx0ICogSHVnZXRsYiAoUE1EIHNoYXJpbmcpIG1hcHMgcGFnZSB0YWJsZXMgbm90IGNvdmVyZWQgYnkgdGhpc1xuK1x0XHQgKiBWTUEncyBsb2NrIGFuZCBpcyBub3Qgc3VwcG9ydGVkLlxuK1x0XHQgKi9cbitcdFx0Vk1fV0FSTl9PTl9PTkNFKCFJU19FTkFCTEVEKENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFKSk7XG4rXHRcdFZNX1dBUk5fT05fT05DRShpc192bV9odWdldGxiX3BhZ2Uodm1hKSk7XG4rXHRcdGxvY2tkZXBfYXNzZXJ0X2lycXNfZGlzYWJsZWQoKTtcbitcdFx0dm1hX2Fzc2VydF9sb2NrZWQodm1hKTtcbitcdH0gZWxzZSB7XG4rXHRcdG1tYXBfYXNzZXJ0X2xvY2tlZCh2bWEtXHUwMDNldm1fbW0pO1xuK1x0fVxuIFx0dm1hX3BndGFibGVfd2Fsa19iZWdpbih2bWEpO1xuIFxuIFx0aWYgKFdBUk5fT05fT05DRShhZGRyIFx1MDAzYyB2bWEtXHUwMDNldm1fc3RhcnQgfHwgYWRkciBcdTAwM2U9IHZtYS1cdTAwM2V2bV9lbmQpKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDI6MTA6MTYuMDc3MDEzMDlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDI0NzAyNTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIEltcGFjdCBvZiBhIE5ldyBLZXJuZWwgTWVtb3J5IEFjY2VzcyBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCdzIG1ha2luZyBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwncyBtZW1vcnkgYWNjZXNzIHJvdXRpbmVzLiBTcGVjaWZpY2FsbHksIGl0J3MgYWRkaW5nIGEgbG9ja2xlc3MgZmFzdCBwYXRoIGZvciBgX19hY2Nlc3NfcmVtb3RlX3ZtKClgIHJlYWRzLiBJbnRlcmVzdGluZy4uLiB0aGV5J3JlIGNhbGxpbmcgdGhpcyBuZXcgZnVuY3Rpb24gYGFjY2Vzc19yZW1vdGVfdm1fZmFzdCgpYCBhbmQgaXQncyB1dGlsaXppbmcgYGZvbGlvX3dhbGtfc3RhcnQoKWAgd2l0aCBhIG5ldyBmbGFnLCBgRldfVk1BX0xPQ0tFRGAuIEl0IGxvb2tzIGxpa2UgdGhlcmUncyBhbHNvIHNvbWUgbW9kaWZpY2F0aW9uIG9mIGB1bnRhZ2dlZF9hZGRyX3JlbW90ZSgpYCwgYWxsb3dpbmcgZm9yIHVubG9ja2VkIHVzYWdlIHZpYSBgdW50YWdnZWRfYWRkcl9yZW1vdGVfdW5sb2NrZWQoKWAuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBpcyB0aGlzIGFjdHVhbGx5IGdvaW5nIHRvIGJlIHdvcnRoIGZ1enppbmc/IEkgbmVlZCB0byBjaGVjayBob3cgcmVhY2hhYmxlIHRoaXMgY29kZSBpcyBhbmQgaWYgaXQncyBldmVuIGZ1bmN0aW9uYWwuIFRoZSBwYXRjaCBtb2RpZmllcyBgbW0vbWVtb3J5LmNgIGFuZCBgbW0vcGFnZXdhbGsuY2AuIEEgcXVpY2sgc2NhbiB0ZWxscyBtZSBgX19hY2Nlc3NfcmVtb3RlX3ZtKClgIGlzIHVzZWQgYnkgYGFjY2Vzc19yZW1vdGVfdm0oKWAsIHdoaWNoIGluIHR1cm4gaXMgdXNlZCBieSBzb21lIHByZXR0eSBjb3JlIGZ1bmN0aW9uYWxpdHk6IGBwdHJhY2VgIGNhbGxzIChsaWtlIGBQVFJBQ0VfUEVFS0RBVEFgKSwgYC9wcm9jL3BpZC9tZW1gLCBgL3Byb2MvcGlkL2NtZGxpbmVgLCBhbmQgYC9wcm9jL3BpZC9lbnZpcm9uYC4gWWVwLCB0aGF0J3MgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIGRlZmluaXRlbHkgZnVuY3Rpb25hbC4gVGhpcyBpcyBhIGdvb2QgdGFyZ2V0LlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aG9zZSBjb25maWd1cmF0aW9ucy4gVGhlIGZhc3QgcGF0aCBpcyBndWFyZGVkIGJ5IGAjaWYgZGVmaW5lZChDT05GSUdfUEVSX1ZNQV9MT0NLKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSlgLiBTbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlc2UgY29uZmlncyBhbmQgc2VlIHdoYXQgdGhlaXIgZGVwZW5kZW5jaWVzIGFyZSwgYW5kIHdoZXRoZXIgb3Igbm90IHRoZXkncmUgbGlrZWx5IHRvIGJlIHByZXNlbnQgaW4gYW55IG9mIG91ciB0eXBpY2FsIGZ1enppbmcgdGFyZ2V0cy4gR290dGEgbWFrZSBzdXJlIHdlJ3JlIGFjdHVhbGx5IHRlc3RpbmcgdGhlIGNvZGUgdGhhdCdzIGJlaW5nIGludHJvZHVjZWQgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgzNywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDAyOjEwOjIyLjUwMTcxODQyNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDYzMTYzMjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQRVJfVk1BX0xPQ0tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xNDUyPWNvbmZpZyBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DS1xcbi0tXFxubW0vS2NvbmZpZy0xNDU0LVxcbm1tL0tjb25maWc6MTQ1NTpjb25maWcgUEVSX1ZNQV9MT0NLXFxubW0vS2NvbmZpZy0xNDU2LVxcdGRlZl9ib29sIHlcXG4tLVxcbm1tL0tjb25maWcuZGVidWc9MzAwPWNvbmZpZyBERUJVR19LTUVNTEVBS19WRVJCT1NFXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnLTMxMC1cXG5tbS9LY29uZmlnLmRlYnVnOjMxMTpjb25maWcgUEVSX1ZNQV9MT0NLX1NUQVRTXFxubW0vS2NvbmZpZy5kZWJ1Zy0zMTItXFx0Ym9vbCBcXFwiU3RhdGlzdGljcyBmb3IgcGVyLXZtYSBsb2Nrc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDI6MTA6MjUuOTY0OTA0NTQyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjczMzM2NzQzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIEtlcm5lbCdzIE1lbW9yeSBNYW5hZ2VtZW50IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGRlZmluaXRpb24sIGBQRVJfVk1BX0xPQ0tgLiBJdCdzIHNldCB0byBcInllc1wiIGJ5IGRlZmF1bHQsIGJ1dCBvbmx5IGlmIHRoZSBhcmNoaXRlY3R1cmUgc3VwcG9ydHMgdGhpcyBcIlBFUl9WTUFfTE9DS1wiIGZlYXR1cmUuIFRoYXQgbWFrZXMgc2Vuc2UsIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIHRoYXQgaXMgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudC4gTm93LCB3aGF0J3MgaW50ZXJlc3RpbmcgaXMgaG93IGl0J3MgYmVpbmcgY29uZGl0aW9uZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBmZWF0dXJlLCBzbyBteSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgaXQgaXMgbGlua2VkLiBUaGlzIHdpbGwgZ2l2ZSBhIGRlZXBlciBpbnNpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjgxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDI6MTA6MjguNjk4Mjc0MDk1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4OTkwNTQwNjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9LY29uZmlnPTUxMj1jb25maWcgTU1VX0dBVEhFUl9UQUJMRV9GUkVFXFxuLS1cXG5hcmNoL0tjb25maWctNTE0LVxcbmFyY2gvS2NvbmZpZzo1MTU6Y29uZmlnIE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcXG5hcmNoL0tjb25maWctNTE2LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDI6MTA6MzEuNTk3MzMzOTc1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgyOTAwOTA3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJ20gZGlzY3Vzc2luZyB0aGlzIHdpdGggYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYSBTeXN0ZW0gQXJjaGl0ZWN0dXJlIFBhcmFtZXRlcioqXG5cblJpZ2h0LCBzbyB0aGlzIGZlZWxzIGxpa2UgYSBmbGFnLCBhIGhpZGRlbiBib29sZWFuLiBJdCdzIHByb2JhYmx5IGFuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBzZXR0aW5nLCBzb21ldGhpbmcgdGhlIGhhcmR3YXJlIG9yIGZpcm13YXJlIGNvbmZpZ3VyZXMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIHg4NiBhcmNoaXRlY3R1cmUgYW5kIHNlZSBpZiB0aGlzIHNldHRpbmcgaXMgcmVsZXZhbnQgdGhlcmUuIExldCdzIHN0YXJ0IHdpdGggeDg2LCBzZWUgaWYgaXQncyBldmVuIGV4cG9zZWQsIGFuZCBpZiBzbywgaG93IGl0IGFmZmVjdHMgYmVoYXZpb3IuIEknbSBhc3N1bWluZyB0aGF0IGl0J3MgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGJlY2F1c2UgdGhlIGJvb2xlYW4gaXMgaGlkZGVuLCBsaWtlbHkgaW4gdGhlIHN5c3RlbS9hcmNoaXRlY3R1cmUgZGVmaW5pdGlvbi4gRnJvbSB0aGVyZSwgd2UgY2FuIGV4cGFuZCBvdXIgcmVzZWFyY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NzUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwMjoxMDozNC40MjYzNDYxODdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE3MDM1NDcwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FscGhhL0tjb25maWc9Mj1jb25maWcgQUxQSEFcXG4tLVxcbmFyY2gvYWxwaGEvS2NvbmZpZy00Mi1cXHRzZWxlY3QgTU1VX0dBVEhFUl9OT19SQU5HRVxcbmFyY2gvYWxwaGEvS2NvbmZpZzo0MzpcXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxcbmFyY2gvYWxwaGEvS2NvbmZpZy00NC1cXHRzZWxlY3QgU1BBUlNFTUVNX0VYVFJFTUUgaWYgU1BBUlNFTUVNXFxuLS1cXG5hcmNoL2FybS9LY29uZmlnPTI9Y29uZmlnIEFSTVxcbi0tXFxuYXJjaC9hcm0vS2NvbmZpZy0xMzUtXFx0c2VsZWN0IEhBVkVfUEVSRl9VU0VSX1NUQUNLX0RVTVBcXG5hcmNoL2FybS9LY29uZmlnOjEzNjpcXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSBpZiBTTVAgXFx1MDAyNlxcdTAwMjYgQVJNX0xQQUVcXG5hcmNoL2FybS9LY29uZmlnLTEzNy1cXHRzZWxlY3QgSEFWRV9SRUdTX0FORF9TVEFDS19BQ0NFU1NfQVBJXFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWc9Mj1jb25maWcgQVJNNjRcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZy0yMjMtXFx0c2VsZWN0IEhBVkVfRlVOQ1RJT05fQVJHX0FDQ0VTU19BUElcXG5hcmNoL2FybTY0L0tjb25maWc6MjI0OlxcdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXFxuYXJjaC9hcm02NC9LY29uZmlnLTIyNS1cXHRzZWxlY3QgSEFWRV9SU0VRXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnPTI9Y29uZmlnIExPT05HQVJDSFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy0xOTEtXFx0c2VsZWN0IE1NVV9HQVRIRVJfTUVSR0VfVk1BUyBpZiBNTVVcXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnOjE5MjpcXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWctMTkzLVxcdHNlbGVjdCBNT0RVTEVTX1VTRV9FTEZfUkVMQSBpZiBNT0RVTEVTXFxuLS1cXG5hcmNoL21pcHMvS2NvbmZpZz0yPWNvbmZpZyBNSVBTXFxuLS1cXG5hcmNoL21pcHMvS2NvbmZpZy05OS1cXHRzZWxlY3QgTE9DS19NTV9BTkRfRklORF9WTUFcXG5hcmNoL21pcHMvS2NvbmZpZzoxMDA6XFx0c2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcXG5hcmNoL21pcHMvS2NvbmZpZy0xMDEtXFx0c2VsZWN0IE1PRFVMRVNfVVNFX0VMRl9SRUwgaWYgTU9EVUxFU1xcbi0tXFxuYXJjaC9wYXJpc2MvS2NvbmZpZz0yPWNvbmZpZyBQQVJJU0NcXG4tLVxcbmFyY2gvcGFyaXNjL0tjb25maWctODItXFx0c2VsZWN0IFRIUkVBRF9JTkZPX0lOX1RBU0tcXG5hcmNoL3BhcmlzYy9LY29uZmlnOjgzOlxcdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXFxuYXJjaC9wYXJpc2MvS2NvbmZpZy04NC1cXHRzZWxlY3QgTkVFRF9ETUFfTUFQX1NUQVRFXFxuLS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz0xMTg9Y29uZmlnIFBQQ1xcbi0tXFxuYXJjaC9wb3dlcnBjL0tjb25maWctMzA2LVxcdHNlbGVjdCBNTVVfR0FUSEVSX1BBR0VfU0laRVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnOjMwNzpcXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTMwOC1cXHRzZWxlY3QgSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEVcXG4tLVxcbmFyY2gvcmlzY3YvS2NvbmZpZz0xMz1jb25maWcgUklTQ1ZcXG4tLVxcbmFyY2gvcmlzY3YvS2NvbmZpZy0yMDctXFx0c2VsZWN0IExPQ0tfTU1fQU5EX0ZJTkRfVk1BXFxuYXJjaC9yaXNjdi9LY29uZmlnOjIwODpcXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSBpZiBTTVAgXFx1MDAyNlxcdTAwMjYgTU1VXFxuYXJjaC9yaXNjdi9LY29uZmlnLTIwOS1cXHRzZWxlY3QgTU9EVUxFU19VU0VfRUxGX1JFTEEgaWYgTU9EVUxFU1xcbi0tXFxuYXJjaC9zMzkwL0tjb25maWc9NzU9Y29uZmlnIFMzOTBcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnLTI2My1cXHRzZWxlY3QgTU1VX0dBVEhFUl9OT19HQVRIRVJcXG5hcmNoL3MzOTAvS2NvbmZpZzoyNjQ6XFx0c2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcXG5hcmNoL3MzOTAvS2NvbmZpZy0yNjUtXFx0c2VsZWN0IE1PRFVMRVNfVVNFX0VMRl9SRUxBXFxuLS1cXG5hcmNoL3NwYXJjL0tjb25maWc9NzA9Y29uZmlnIFNQQVJDNjRcXG4tLVxcbmFyY2gvc3BhcmMvS2NvbmZpZy03Ni1cXHRzZWxlY3QgSEFWRV9LUFJPQkVTXFxuYXJjaC9zcGFyYy9LY29uZmlnOjc3OlxcdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFIGlmIFNNUFxcbmFyY2gvc3BhcmMvS2NvbmZpZy03OC1cXHRzZWxlY3QgSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEUgaWYgU01QXFxuLS1cXG5hcmNoL3VtL0tjb25maWc9NT1jb25maWcgVU1MXFxuLS1cXG5hcmNoL3VtL0tjb25maWctNDYtXFx0c2VsZWN0IFNQQVJTRV9JUlFcXG5hcmNoL3VtL0tjb25maWc6NDc6XFx0c2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcXG5hcmNoL3VtL0tjb25maWctNDgtXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnPTU4PWNvbmZpZyBYODZcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMjg0LVxcdHNlbGVjdCBBU1lOQ19LRVJORUxfUEdUQUJMRV9GUkVFXFx0aWYgSU9NTVVfU1ZBXFxuYXJjaC94ODYvS2NvbmZpZzoyODU6XFx0c2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcXG5hcmNoL3g4Ni9LY29uZmlnLTI4Ni1cXHRzZWxlY3QgTU1VX0dBVEhFUl9NRVJHRV9WTUFTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDAyOjEwOjM4LjU5NjcwODMxNloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5ODc5Nzc0ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBDb251bmRydW0qKlxuXG5Pa2F5LCBzbyBJJ20gdGFraW5nIGEgbG9vayBhdCB0aGVzZSBkZWZhdWx0IHg4NiBjb25maWd1cmF0aW9ucywgc3BlY2lmaWNhbGx5IGBQRVJfVk1BX0xPQ0tgIGFuZCBgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRWAuIFRoZXkncmUgYWxyZWFkeSBlbmFibGVkIGJ5IGRlZmF1bHQsIHdoaWNoIGlzIGdvb2QsIGJ1dCBJIG5lZWQgdG8gZGVjaWRlIHdoYXQgdG8gbGlzdCBnaXZlbiB0aGUgcHJvbXB0J3MgaW5zdHJ1Y3Rpb24gdG8gb25seSBsaXN0IHRob3NlIGNvbmZpZ3MgdGhhdCBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIFNob3VsZCBJIGluY2x1ZGUgYFBFUl9WTUFfTE9DS2AgYW55d2F5LCBqdXN0IGZvciBjbGFyaXR5PyBIbW1tLi4uIHRoZSBwYXRjaCAqZG9lcyogaGF2ZSB0aGF0IGAjaWZgIGNvbmRpdGlvbiB1c2luZyBib3RoIHRoYXQgYW5kIHRoZSBvdGhlciBvbmUsIHNvIGl0J3MgZGlyZWN0bHkgcmVsZXZhbnQgaGVyZS4gT2theSwgSSdsbCBwdXQgaXQgaW4uXG5cbk5vdyBmb3IgZm9jdXMgc3ltYm9scy4gVGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBhY2Nlc3NfcmVtb3RlX3ZtX2Zhc3RgLCBgdm1hX3Blcm1pdHNfZmFzdF9hY2Nlc3NgLCBhbmQgYGNvcHlfZm9saW9fcGFnZXNgLCBhbmQgaXQgbW9kaWZpZXMgYF9fYWNjZXNzX3JlbW90ZV92bWAsIGFuZCBgZm9saW9fd2Fsa19zdGFydGAuIGBhY2Nlc3NfcmVtb3RlX3ZtX2Zhc3RgIGlzIGRlZmluaXRlbHkgYSBrZXkgZm9jdXMgcG9pbnQuIEFuZCBgX19hY2Nlc3NfcmVtb3RlX3ZtYCBpcyBhbHNvIGEgZ29vZCBjaG9pY2UuIEV2ZW4gdGhvdWdoIGBmb2xpb193YWxrX3N0YXJ0YCBzZWVtcyBhIGJpdCBnZW5lcmljLCBpdCBpcyBtb2RpZmllZCwgc28gSSdsbCBrZWVwIHRoYXQgb25lLiBBbHJpZ2h0LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHVzZSBvZiBgX19hY2Nlc3NfcmVtb3RlX3ZtYCBhbmQgSSBzaG91bGQgaGF2ZSBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTMyOCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwMjoxMDo0My41ODQ2ODg1MzZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MTQxMjUzOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19hY2Nlc3NfcmVtb3RlX3ZtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva2VybmVsL210ZS5jPTQxOD1sb25nIGdldF9tdGVfY3RybChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9tdGUuYy00NDEtICogdGhlIG51bWJlciBvZiB0YWdzIGNvcGllZC4gUmV0dXJuIDAgaWYgYW55IHRhZ3MgY29waWVkLCBlcnJvciBvdGhlcndpc2UuXFxuYXJjaC9hcm02NC9rZXJuZWwvbXRlLmM6NDQyOiAqIEluc3BpcmVkIGJ5IF9fYWNjZXNzX3JlbW90ZV92bSgpLlxcbmFyY2gvYXJtNjQva2VybmVsL210ZS5jLTQ0My0gKi9cXG4tLVxcbmtlcm5lbC90aW1lL25hbWVzcGFjZV92ZHNvLmM9NzE9c3RydWN0IHBhZ2UgKmZpbmRfdGltZW5zX3Z2YXJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmtlcm5lbC90aW1lL25hbWVzcGFjZV92ZHNvLmMtODAtXFx0ICogaW4gc3BlY2lhbF9tYXBwaW5nX3Ztb3BzKCkuXFxua2VybmVsL3RpbWUvbmFtZXNwYWNlX3Zkc28uYzo4MTpcXHQgKiBGb3IgbW9yZSBkZXRhaWxzIGNoZWNrX3ZtYV9mbGFncygpIGFuZCBfX2FjY2Vzc19yZW1vdGVfdm0oKVxcbmtlcm5lbC90aW1lL25hbWVzcGFjZV92ZHNvLmMtODItXFx0ICovXFxuLS1cXG5tbS9tZW1vcnkuYz03MTE3PXN0YXRpYyB2b2lkIGNvcHlfZm9saW9fcGFnZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9tZW1vcnkuYy03MTM5LS8qXFxubW0vbWVtb3J5LmM6NzE0MDogKiBPcHBvcnR1bmlzdGljIGxvY2tsZXNzIGZhc3QgcGF0aCBmb3IgX19hY2Nlc3NfcmVtb3RlX3ZtKCkgcmVhZHMuXFxubW0vbWVtb3J5LmMtNzE0MS0gKlxcbi0tXFxubW0vbWVtb3J5LmM9NzIzND1zdGF0aWMgaW50IGFjY2Vzc19yZW1vdGVfdm1fZmFzdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vbWVtb3J5LmMtNzI0My0gKi9cXG5tbS9tZW1vcnkuYzo3MjQ0OnN0YXRpYyBpbnQgX19hY2Nlc3NfcmVtb3RlX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0vbWVtb3J5LmMtNzI0NS1cXHRcXHRcXHQgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXFxuLS1cXG5tbS9tZW1vcnkuYz03MzQ5PWludCBhY2Nlc3NfcmVtb3RlX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9tZW1vcnkuYy03MzUxLXtcXG5tbS9tZW1vcnkuYzo3MzUyOlxcdHJldHVybiBfX2FjY2Vzc19yZW1vdGVfdm0obW0sIGFkZHIsIGJ1ZiwgbGVuLCBndXBfZmxhZ3MpO1xcbm1tL21lbW9yeS5jLTczNTMtfVxcbi0tXFxubW0vbWVtb3J5LmM9NzM2MD1pbnQgYWNjZXNzX3Byb2Nlc3Nfdm0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL21lbW9yeS5jLTczNjktXFxubW0vbWVtb3J5LmM6NzM3MDpcXHRyZXQgPSBfX2FjY2Vzc19yZW1vdGVfdm0obW0sIGFkZHIsIGJ1ZiwgbGVuLCBndXBfZmxhZ3MpO1xcbm1tL21lbW9yeS5jLTczNzEtXFxuLS1cXG5tbS9ub21tdS5jPTE2Mzk9RVhQT1JUX1NZTUJPTChmaWxlbWFwX21hcF9wYWdlcyk7XFxubW0vbm9tbXUuYy0xNjQwLVxcbm1tL25vbW11LmM6MTY0MTpzdGF0aWMgaW50IF9fYWNjZXNzX3JlbW90ZV92bShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL25vbW11LmMtMTY0Mi1cXHRcXHRcXHQgICAgICB2b2lkICpidWYsIGludCBsZW4sIHVuc2lnbmVkIGludCBndXBfZmxhZ3MpXFxuLS1cXG5tbS9ub21tdS5jPTE2ODU9aW50IGFjY2Vzc19yZW1vdGVfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL25vbW11LmMtMTY4Ny17XFxubW0vbm9tbXUuYzoxNjg4OlxcdHJldHVybiBfX2FjY2Vzc19yZW1vdGVfdm0obW0sIGFkZHIsIGJ1ZiwgbGVuLCBndXBfZmxhZ3MpO1xcbm1tL25vbW11LmMtMTY4OS19XFxuLS1cXG5tbS9ub21tdS5jPTE2OTU9aW50IGFjY2Vzc19wcm9jZXNzX3ZtKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmJ1ZiwgaW50IGxlbixcXG4tLVxcbm1tL25vbW11LmMtMTcwNi1cXG5tbS9ub21tdS5jOjE3MDc6XFx0bGVuID0gX19hY2Nlc3NfcmVtb3RlX3ZtKG1tLCBhZGRyLCBidWYsIGxlbiwgZ3VwX2ZsYWdzKTtcXG5tbS9ub21tdS5jLTE3MDgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDAyOjEwOjQ2LjA5ODgyMDI2NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTAyNDE2MzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBSZW1vdGUgVk0gQWNjZXNzIEZhc3QgUGF0aCoqXG5cbk9rYXksIHNvIEkndmUgemVyb2VkIGluIG9uIHRoZSBsb2NrbGVzcyBmYXN0IHBhdGggZm9yIHJlbW90ZSBtZW1vcnkgYWNjZXNzLiBgX19hY2Nlc3NfcmVtb3RlX3ZtYCBhbmQgYGFjY2Vzc19yZW1vdGVfdm1fZmFzdGAgYXJlIGRlZmluaXRlbHkgdGhlIGtleSBmb2N1cyBzeW1ib2xzIGhlcmUuIEV2ZW4gdGhvdWdoIGBhY2Nlc3NfcmVtb3RlX3ZtX2Zhc3RgIGlzIHN0YXRpYywgc3l6a2FsbGVyIHNob3VsZCBzdGlsbCBiZSBhYmxlIHRvIHRhcmdldCBpdC4gSSdsbCBhbHNvIGFkZCBgZm9saW9fd2Fsa19zdGFydGAgdG8gdGhlIGxpc3QgYmVjYXVzZSBpdCdzIHJlbGV2YW50IHRvIHRoZSBvcGVyYXRpb24uIEFuZCBzaW5jZSB0aGUgY29kZSBtZW50aW9ucyBpdCwgSSBzaG91bGQgYWxzbyBhZGQgYGNvcHlfZm9saW9fcGFnZXNgLCBhbmQgYHZtYV9wZXJtaXRzX2Zhc3RfYWNjZXNzYC5cblxuTm93LCByZWdhcmRpbmcgY29uZmlndXJhdGlvbnMsIEkgbmVlZCB0byBjaGVjayB3aGljaCBvbmVzIGFyZSByZWxldmFudC4gYENPTkZJR19QRVJfVk1BX0xPQ0tgIGFuZCBgQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVgIGFyZSB0aGUgZ3VhcmRzIGZvciB0aGUgZmFzdCBwYXRoLiBUaGV5IGFwcGVhciB0byBiZSBlbmFibGVkIGJ5IGRlZmF1bHQgb24geDg2LCBidXQgSSdsbCBpbmNsdWRlIHRoZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24ganVzdCB0byBiZSBzYWZlLlxuXG5OZXh0LCBJIG5lZWQgdG8gY29uZmlybSByZWFjaGFiaWxpdHkuIEkgc2VlIHRoYXQgdGhlIGBwcm9jZXNzX3ZtX3JlYWR2YCBzeXNjYWxsIHVzZXMgYGFjY2Vzc19wcm9jZXNzX3ZtYCwgd2hpY2ggY2FsbHMgYF9fYWNjZXNzX3JlbW90ZV92bWAsIGFuZCBgcHRyYWNlYCB1c2VzIGl0IGFzIHdlbGwuIFRoYXQgY29uZmlybXMgaXQncyBhIGZ1bmN0aW9uYWwgcGF0aCB3ZSBjYW4gaGl0LlxuXG5TbywgaGVyZSdzIHRoZSBzdW1tYXJ5IEkndmUgZ290OlxuXG4qICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZVxuKiAgICoqRm9jdXNTeW1ib2xzOioqIGBhY2Nlc3NfcmVtb3RlX3ZtX2Zhc3RgLCBgX19hY2Nlc3NfcmVtb3RlX3ZtYCwgYGZvbGlvX3dhbGtfc3RhcnRgLCBgY29weV9mb2xpb19wYWdlc2AsIGB2bWFfcGVybWl0c19mYXN0X2FjY2Vzc2BcbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYFBFUl9WTUFfTE9DS2AsIGBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFYFxuKiAgICoqUmVhc29uaW5nOioqIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9ja2xlc3MgZmFzdCBwYXRoIGZvciByZW1vdGUgbWVtb3J5IGFjY2VzcyAoYF9fYWNjZXNzX3JlbW90ZV92bWApLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgYHB0cmFjZWAgYW5kIGBwcm9jZXNzX3ZtX3JlYWR2YCBzeXNjYWxscy4gVGhlIGZhc3QgcGF0aCByZWxpZXMgb24gcGVyLVZNQSBsb2NrcyBhbmQgUkNVLWZyZWVkIHBhZ2UgdGFibGVzLlxuXG5MZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhvc2UgY29uZmlncyBhZ2Fpbi4gQm90aCBzZWVtIHRvIGJlIHN0YW5kYXJkIGRlZmF1bHRzLCBzbyBJJ2xsIGtlZXAgdGhlbSBpbiB0aGUgbGlzdC5cblxuT2theSwgbGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMuIExldCBtZSBjaGVjay4uLnllcywgdGhlcmUncyBgdm1hX3Blcm1pdHNfZmFzdF9hY2Nlc3NgLCBgY29weV9mb2xpb19wYWdlc2AgYW5kIGBmd19lbnRyeV9zaXplYC4gVGhleSBhbGwgbG9vayByZWxldmFudCwgc28gSSdsbCBiZSBzdXJlIHRvIGluY2x1ZGUgdGhvc2UuXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQgd2l0aCB0aGlzLiBJJ2xsIGNhbGwgc2V0LXJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODUwLCJPdXRwdXRUb2tlbnMiOjE2OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwMjoxMDo1NC42MDEyNDA2OTlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODI2MTI3NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBFUl9WTUFfTE9DS1wiLFxuICAgIFwiTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFjY2Vzc19yZW1vdGVfdm1fZmFzdFwiLFxuICAgIFwiX19hY2Nlc3NfcmVtb3RlX3ZtXCIsXG4gICAgXCJmb2xpb193YWxrX3N0YXJ0XCIsXG4gICAgXCJjb3B5X2ZvbGlvX3BhZ2VzXCIsXG4gICAgXCJ2bWFfcGVybWl0c19mYXN0X2FjY2Vzc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBsb2NrbGVzcyBmYXN0IHBhdGggZm9yIHJlbW90ZSBtZW1vcnkgYWNjZXNzIChgX19hY2Nlc3NfcmVtb3RlX3ZtYCksIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgc3lzY2FsbHMgbGlrZSBgcHJvY2Vzc192bV9yZWFkdmAgYW5kIGBwdHJhY2VgLiBUaGUgZmFzdCBwYXRoIHJlbGllcyBvbiBwZXItVk1BIGxvY2tzIGFuZCBSQ1UtZnJlZWQgcGFnZSB0YWJsZXMsIG1ha2luZyBpdCBoaWdobHkgZnVuY3Rpb25hbCBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQRVJfVk1BX0xPQ0tcIixcbiAgICBcIk1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhY2Nlc3NfcmVtb3RlX3ZtX2Zhc3RcIixcbiAgICBcIl9fYWNjZXNzX3JlbW90ZV92bVwiLFxuICAgIFwiZm9saW9fd2Fsa19zdGFydFwiLFxuICAgIFwiY29weV9mb2xpb19wYWdlc1wiLFxuICAgIFwidm1hX3Blcm1pdHNfZmFzdF9hY2Nlc3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9ja2xlc3MgZmFzdCBwYXRoIGZvciByZW1vdGUgbWVtb3J5IGFjY2VzcyAoYF9fYWNjZXNzX3JlbW90ZV92bWApLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHN5c2NhbGxzIGxpa2UgYHByb2Nlc3Nfdm1fcmVhZHZgIGFuZCBgcHRyYWNlYC4gVGhlIGZhc3QgcGF0aCByZWxpZXMgb24gcGVyLVZNQSBsb2NrcyBhbmQgUkNVLWZyZWVkIHBhZ2UgdGFibGVzLCBtYWtpbmcgaXQgaGlnaGx5IGZ1bmN0aW9uYWwgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7p9dn[1] Phase: Succeeded StartedAt: 2026-06-25 02:11:21 +0000 UTC FinishedAt: 2026-06-25 02:11:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p9dn[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-25 02:11:21 +0000 UTC FinishedAt: 2026-06-25 02:11:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p9dn[2] Phase: Succeeded StartedAt: 2026-06-25 02:11:21 +0000 UTC FinishedAt: 2026-06-25 06:14:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p9dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["access_remote_vm_fast","__access_remote_vm","folio_walk_start","copy_folio_pages","vma_permits_fast_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"b616dfd4-c776-4fb2-b2c8-c77c3484c8f4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-25 02:11:21 +0000 UTC FinishedAt: 2026-06-25 06:14:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["access_remote_vm_fast","__access_remote_vm","folio_walk_start","copy_folio_pages","vma_permits_fast_access"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"b616dfd4-c776-4fb2-b2c8-c77c3484c8f4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow7p9dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["access_remote_vm_fast","__access_remote_vm","folio_walk_start","copy_folio_pages","vma_permits_fast_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"b616dfd4-c776-4fb2-b2c8-c77c3484c8f4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-25 02:11:21 +0000 UTC FinishedAt: 2026-06-25 02:11:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p9dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["access_remote_vm_fast","__access_remote_vm","folio_walk_start","copy_folio_pages","vma_permits_fast_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"b616dfd4-c776-4fb2-b2c8-c77c3484c8f4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-25 02:11:21 +0000 UTC FinishedAt: 2026-06-25 02:11:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow7p9dn/series-workflow7p9dn-convert-artifact-3390365036/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7p9dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["access_remote_vm_fast","__access_remote_vm","folio_walk_start","copy_folio_pages","vma_permits_fast_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"b616dfd4-c776-4fb2-b2c8-c77c3484c8f4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-25 02:11:31 +0000 UTC FinishedAt: 2026-06-25 02:40:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p9dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["access_remote_vm_fast","__access_remote_vm","folio_walk_start","copy_folio_pages","vma_permits_fast_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"b616dfd4-c776-4fb2-b2c8-c77c3484c8f4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-25 02:11:31 +0000 UTC FinishedAt: 2026-06-25 02:40:21 +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:*1494e1d5-7e58-4d25-b71e-a025852aeb60,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-workflow7p9dn/series-workflow7p9dn-convert-artifact-3390365036/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": "89ad86c0-121d-40d6-8c31-335c556f2fe5", "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-workflow7p9dn/series-workflow7p9dn-build-action-2586986394/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7p9dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["access_remote_vm_fast","__access_remote_vm","folio_walk_start","copy_folio_pages","vma_permits_fast_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"b616dfd4-c776-4fb2-b2c8-c77c3484c8f4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-25 02:11:31 +0000 UTC FinishedAt: 2026-06-25 02:40:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*1494e1d5-7e58-4d25-b71e-a025852aeb60,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-workflow7p9dn/series-workflow7p9dn-convert-artifact-3390365036/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": "89ad86c0-121d-40d6-8c31-335c556f2fe5", "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-workflow7p9dn/series-workflow7p9dn-build-action-2586986394/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7p9dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["access_remote_vm_fast","__access_remote_vm","folio_walk_start","copy_folio_pages","vma_permits_fast_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"b616dfd4-c776-4fb2-b2c8-c77c3484c8f4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-25 02:40:21 +0000 UTC FinishedAt: 2026-06-25 02:40:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p9dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["access_remote_vm_fast","__access_remote_vm","folio_walk_start","copy_folio_pages","vma_permits_fast_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"b616dfd4-c776-4fb2-b2c8-c77c3484c8f4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-25 02:40:22 +0000 UTC FinishedAt: 2026-06-25 02:40:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p9dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["access_remote_vm_fast","__access_remote_vm","folio_walk_start","copy_folio_pages","vma_permits_fast_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"b616dfd4-c776-4fb2-b2c8-c77c3484c8f4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-25 02:40:22 +0000 UTC FinishedAt: 2026-06-25 02:41:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p9dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["access_remote_vm_fast","__access_remote_vm","folio_walk_start","copy_folio_pages","vma_permits_fast_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"b616dfd4-c776-4fb2-b2c8-c77c3484c8f4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-25 02:40:22 +0000 UTC FinishedAt: 2026-06-25 02:40:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"b616dfd4-c776-4fb2-b2c8-c77c3484c8f4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow7p9dn/series-workflow7p9dn-convert-artifact-2670186027/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7p9dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["access_remote_vm_fast","__access_remote_vm","folio_walk_start","copy_folio_pages","vma_permits_fast_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"b616dfd4-c776-4fb2-b2c8-c77c3484c8f4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-25 02:41:15 +0000 UTC FinishedAt: 2026-06-25 02:43:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p9dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["access_remote_vm_fast","__access_remote_vm","folio_walk_start","copy_folio_pages","vma_permits_fast_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"b616dfd4-c776-4fb2-b2c8-c77c3484c8f4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-25 02:41:15 +0000 UTC FinishedAt: 2026-06-25 02:43:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*89ad86c0-121d-40d6-8c31-335c556f2fe5,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-workflow7p9dn/series-workflow7p9dn-build-action-2586986394/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-workflow7p9dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["access_remote_vm_fast","__access_remote_vm","folio_walk_start","copy_folio_pages","vma_permits_fast_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"b616dfd4-c776-4fb2-b2c8-c77c3484c8f4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-25 02:43:13 +0000 UTC FinishedAt: 2026-06-25 02:43:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p9dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["access_remote_vm_fast","__access_remote_vm","folio_walk_start","copy_folio_pages","vma_permits_fast_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"b616dfd4-c776-4fb2-b2c8-c77c3484c8f4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-25 02:43:13 +0000 UTC FinishedAt: 2026-06-25 02:43:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p9dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["access_remote_vm_fast","__access_remote_vm","folio_walk_start","copy_folio_pages","vma_permits_fast_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"b616dfd4-c776-4fb2-b2c8-c77c3484c8f4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-25 02:43:13 +0000 UTC FinishedAt: 2026-06-25 03:06:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p9dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["access_remote_vm_fast","__access_remote_vm","folio_walk_start","copy_folio_pages","vma_permits_fast_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"b616dfd4-c776-4fb2-b2c8-c77c3484c8f4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-25 02:43:13 +0000 UTC FinishedAt: 2026-06-25 03:06:30 +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:*1494e1d5-7e58-4d25-b71e-a025852aeb60,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-workflow7p9dn/series-workflow7p9dn-convert-artifact-2670186027/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": "2d3e215b-d6ec-4783-9e04-f4c65bc9ba5a", "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-workflow7p9dn/series-workflow7p9dn-build-action-3222371919/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7p9dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["access_remote_vm_fast","__access_remote_vm","folio_walk_start","copy_folio_pages","vma_permits_fast_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"b616dfd4-c776-4fb2-b2c8-c77c3484c8f4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-25 02:43:13 +0000 UTC FinishedAt: 2026-06-25 03:06:20 +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:*1494e1d5-7e58-4d25-b71e-a025852aeb60,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-workflow7p9dn/series-workflow7p9dn-convert-artifact-2670186027/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": "2d3e215b-d6ec-4783-9e04-f4c65bc9ba5a", "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-workflow7p9dn/series-workflow7p9dn-build-action-3222371919/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7p9dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["access_remote_vm_fast","__access_remote_vm","folio_walk_start","copy_folio_pages","vma_permits_fast_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"b616dfd4-c776-4fb2-b2c8-c77c3484c8f4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-25 03:06:30 +0000 UTC FinishedAt: 2026-06-25 03:06:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p9dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["access_remote_vm_fast","__access_remote_vm","folio_walk_start","copy_folio_pages","vma_permits_fast_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"b616dfd4-c776-4fb2-b2c8-c77c3484c8f4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-25 03:06:30 +0000 UTC FinishedAt: 2026-06-25 03:06:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p9dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["access_remote_vm_fast","__access_remote_vm","folio_walk_start","copy_folio_pages","vma_permits_fast_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"b616dfd4-c776-4fb2-b2c8-c77c3484c8f4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-25 03:06:30 +0000 UTC FinishedAt: 2026-06-25 03:08:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p9dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["access_remote_vm_fast","__access_remote_vm","folio_walk_start","copy_folio_pages","vma_permits_fast_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"b616dfd4-c776-4fb2-b2c8-c77c3484c8f4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-25 03:06:30 +0000 UTC FinishedAt: 2026-06-25 03:08:22 +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:*2d3e215b-d6ec-4783-9e04-f4c65bc9ba5a,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-workflow7p9dn/series-workflow7p9dn-build-action-3222371919/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-workflow7p9dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["access_remote_vm_fast","__access_remote_vm","folio_walk_start","copy_folio_pages","vma_permits_fast_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"b616dfd4-c776-4fb2-b2c8-c77c3484c8f4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-25 03:08:31 +0000 UTC FinishedAt: 2026-06-25 06:14:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p9dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["access_remote_vm_fast","__access_remote_vm","folio_walk_start","copy_folio_pages","vma_permits_fast_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"b616dfd4-c776-4fb2-b2c8-c77c3484c8f4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-25 03:08:31 +0000 UTC FinishedAt: 2026-06-25 06:14:00 +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":null,"focus_symbols":["access_remote_vm_fast","__access_remote_vm","folio_walk_start","copy_folio_pages","vma_permits_fast_access"],"skip_cover_check":true},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:*89ad86c0-121d-40d6-8c31-335c556f2fe5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2d3e215b-d6ec-4783-9e04-f4c65bc9ba5a,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-workflow7p9dn/series-workflow7p9dn-build-action-2586986394/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-workflow7p9dn/series-workflow7p9dn-build-action-3222371919/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7p9dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["access_remote_vm_fast","__access_remote_vm","folio_walk_start","copy_folio_pages","vma_permits_fast_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"b616dfd4-c776-4fb2-b2c8-c77c3484c8f4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-25 03:08:31 +0000 UTC FinishedAt: 2026-06-25 03:08:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p9dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["access_remote_vm_fast","__access_remote_vm","folio_walk_start","copy_folio_pages","vma_permits_fast_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"b616dfd4-c776-4fb2-b2c8-c77c3484c8f4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-25 03:08:31 +0000 UTC FinishedAt: 2026-06-25 03:08:36 +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":null,"focus_symbols":["access_remote_vm_fast","__access_remote_vm","folio_walk_start","copy_folio_pages","vma_permits_fast_access"],"skip_cover_check":true},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-workflow7p9dn/series-workflow7p9dn-convert-artifact-1481128516/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7p9dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["access_remote_vm_fast","__access_remote_vm","folio_walk_start","copy_folio_pages","vma_permits_fast_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"b616dfd4-c776-4fb2-b2c8-c77c3484c8f4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-25 03:08:31 +0000 UTC FinishedAt: 2026-06-25 03:08:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p9dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["access_remote_vm_fast","__access_remote_vm","folio_walk_start","copy_folio_pages","vma_permits_fast_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"b616dfd4-c776-4fb2-b2c8-c77c3484c8f4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-25 03:08:31 +0000 UTC FinishedAt: 2026-06-25 03:08:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p9dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["access_remote_vm_fast","__access_remote_vm","folio_walk_start","copy_folio_pages","vma_permits_fast_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"b616dfd4-c776-4fb2-b2c8-c77c3484c8f4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-25 03:08:31 +0000 UTC FinishedAt: 2026-06-25 03:08:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p9dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["access_remote_vm_fast","__access_remote_vm","folio_walk_start","copy_folio_pages","vma_permits_fast_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"b616dfd4-c776-4fb2-b2c8-c77c3484c8f4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-25 03:08:42 +0000 UTC FinishedAt: 2026-06-25 06:14:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7p9dn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["access_remote_vm_fast","__access_remote_vm","folio_walk_start","copy_folio_pages","vma_permits_fast_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"269f2b43fae692d1f3988c9f888a6301aa537b82","config_name":"upstream-apparmor-kasan.config","enable_configs":["PER_VMA_LOCK","MMU_GATHER_RCU_TABLE_FREE"],"series_id":"b616dfd4-c776-4fb2-b2c8-c77c3484c8f4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-25 03:08:42 +0000 UTC FinishedAt: 2026-06-25 06:13:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*89ad86c0-121d-40d6-8c31-335c556f2fe5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2d3e215b-d6ec-4783-9e04-f4c65bc9ba5a,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-workflow7p9dn/series-workflow7p9dn-build-action-2586986394/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-workflow7p9dn/series-workflow7p9dn-build-action-3222371919/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-workflow7p9dn/series-workflow7p9dn-convert-artifact-1481128516/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,}