Name: series-workflowglq4p Phase: Succeeded StartedAt: 2026-07-01 10:50:16 +0000 UTC FinishedAt: 2026-07-01 15:37:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowglq4p[0] Phase: Succeeded StartedAt: 2026-07-01 10:50:16 +0000 UTC FinishedAt: 2026-07-01 11:09:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowglq4p[0].run-triage Phase: Succeeded StartedAt: 2026-07-01 10:50:16 +0000 UTC FinishedAt: 2026-07-01 11:09:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "665159e246749578d4e4bfe106ee3b74edcdab18", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HFSPLUS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "665159e246749578d4e4bfe106ee3b74edcdab18", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HFSPLUS_FS" ], "series_id": "c4ef3812-aac4-49ce-bf4e-f4ee56d60112" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "hfs_brec_remove", "hfs_brec_goto", "__hfs_brec_find" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hGU1BMVVNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoZnNfYnJlY19yZW1vdmUmIzM0OywKICAgICYjMzQ7aGZzX2JyZWNfZ290byYjMzQ7LAogICAgJiMzNDtfX2hmc19icmVjX2ZpbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGZvciBgbnVtX3JlY3NgIGluIEhGUyYjNDM7IGItdHJlZSBub2RlcyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzIGFuZCBvdGhlciBpc3N1ZXMuIEl0IG1vZGlmaWVzIGNvcmUgYi10cmVlIG9wZXJhdGlvbnMgbGlrZSBmaW5kaW5nLCByZW1vdmluZywgYW5kIGl0ZXJhdGluZyBvdmVyIHJlY29yZHMuIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIGFmZmVjdCByZWFjaGFibGUgZmlsZXN5c3RlbSBsb2dpYywgcGFydGljdWxhcmx5IGR1cmluZyBkaXJlY3RvcnkgdHJhdmVyc2FsLCBmaWxlIGRlbGV0aW9uLCBhbmQgYXR0cmlidXRlIG9wZXJhdGlvbnMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIG9wZXJhdGlvbnMgdG8gZW5zdXJlIHRoZSBuZXcgdmFsaWRhdGlvbiBsb2dpYyBjb3JyZWN0bHkgaGFuZGxlcyBtYWxmb3JtZWQgYi10cmVlIG5vZGVzIHdpdGhvdXQgY2F1c2luZyByZWdyZXNzaW9ucyBvciBwYW5pY3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTE6MDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhYWU1N2I2NGQwMmI2M2YwNjM2NmViMzgyYWQ1ZTAxY2NmOTRiOWE1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAxMTowNTozMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2JmaW5kLmMgYi9mcy9oZnNwbHVzL2JmaW5kLmNcbmluZGV4IDlhNTVmYTZkNTI5NDI5Li5hY2U5YmEwMjdhOWRiNCAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvYmZpbmQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9iZmluZC5jXG5AQCAtMTEyLDExICYjNDM7MTEyLDEzIEBAIGludCBfX2hmc19icmVjX2ZpbmQoc3RydWN0IGhmc19ibm9kZSAqYm5vZGUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCxcbiBcdGIgPSAwO1xuIFx0ZSA9IGJub2RlLVx1MDAzZW51bV9yZWNzIC0gMTtcbiBcdHJlcyA9IC1FTk9FTlQ7XG4mIzQzO1x0aWYgKCFibm9kZS1cdTAwM2VudW1fcmVjcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4gXHRkbyB7XG4gXHRcdHJlYyA9IChlICYjNDM7IGIpIC8gMjtcbiBcdFx0bGVuID0gaGZzX2JyZWNfbGVub2ZmKGJub2RlLCByZWMsIFx1MDAyNm9mZik7XG4gXHRcdGtleWxlbiA9IGhmc19icmVjX2tleWxlbihibm9kZSwgcmVjKTtcbi1cdFx0aWYgKGtleWxlbiA9PSAwKSB7XG4mIzQzO1x0XHRpZiAoIWtleWxlbiB8fCBrZXlsZW4gXHUwMDNlPSBsZW4pIHtcbiBcdFx0XHRyZXMgPSAtRUlOVkFMO1xuIFx0XHRcdGdvdG8gZmFpbDtcbiBcdFx0fVxuQEAgLTEzMCw3ICYjNDM7MTMyLDcgQEAgaW50IF9faGZzX2JyZWNfZmluZChzdHJ1Y3QgaGZzX2Jub2RlICpibm9kZSwgc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLFxuIFx0aWYgKHJlYyAhPSBlIFx1MDAyNlx1MDAyNiBlIFx1MDAzZT0gMCkge1xuIFx0XHRsZW4gPSBoZnNfYnJlY19sZW5vZmYoYm5vZGUsIGUsIFx1MDAyNm9mZik7XG4gXHRcdGtleWxlbiA9IGhmc19icmVjX2tleWxlbihibm9kZSwgZSk7XG4tXHRcdGlmIChrZXlsZW4gPT0gMCkge1xuJiM0MztcdFx0aWYgKCFrZXlsZW4gfHwga2V5bGVuIFx1MDAzZT0gbGVuKSB7XG4gXHRcdFx0cmVzID0gLUVJTlZBTDtcbiBcdFx0XHRnb3RvIGZhaWw7XG4gXHRcdH1cbkBAIC0yMzIsNiAmIzQzOzIzNCwxMCBAQCBpbnQgaGZzX2JyZWNfZ290byhzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIGludCBjbnQpXG4gXG4gXHRibm9kZSA9IGZkLVx1MDAzZWJub2RlO1xuIFx0dHJlZSA9IGJub2RlLVx1MDAzZXRyZWU7XG4mIzQzO1x0aWYgKCFibm9kZS1cdTAwM2VudW1fcmVjcykge1xuJiM0MztcdFx0cmVzID0gLUVOT0VOVDtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiBcbiBcdGlmIChjbnQgXHUwMDNjIDApIHtcbiBcdFx0Y250ID0gLWNudDtcbkBAIC0yNzQsNyAmIzQzOzI4MCw3IEBAIGludCBoZnNfYnJlY19nb3RvKHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgaW50IGNudClcbiBcbiBcdGxlbiA9IGhmc19icmVjX2xlbm9mZihibm9kZSwgZmQtXHUwMDNlcmVjb3JkLCBcdTAwMjZvZmYpO1xuIFx0a2V5bGVuID0gaGZzX2JyZWNfa2V5bGVuKGJub2RlLCBmZC1cdTAwM2VyZWNvcmQpO1xuLVx0aWYgKGtleWxlbiA9PSAwKSB7XG4mIzQzO1x0aWYgKCFrZXlsZW4gfHwga2V5bGVuIFx1MDAzZT0gbGVuKSB7XG4gXHRcdHJlcyA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvYm5vZGUuYyBiL2ZzL2hmc3BsdXMvYm5vZGUuY1xuaW5kZXggZDA4OGZiN2ViMGRmYTMuLmRmNDA2Zjc1YTViMzIzIDEwMDY0NFxuLS0tIGEvZnMvaGZzcGx1cy9ibm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnNwbHVzL2Jub2RlLmNcbkBAIC0zNTIsMTUgJiM0MzszNTIsMjIgQEAgdm9pZCBoZnNfYm5vZGVfZHVtcChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlKVxuIFx0c3RydWN0IGhmc19ibm9kZV9kZXNjIGRlc2M7XG4gXHRfX2JlMzIgY25pZDtcbiBcdGludCBpLCBvZmYsIGtleV9vZmY7XG4mIzQzO1x0dTE2IG51bV9yZWNzO1xuIFxuIFx0aGZzX2RiZyhcJiMzNDtub2RlICVkXFxuXCYjMzQ7LCBub2RlLVx1MDAzZXRoaXMpO1xuIFx0aGZzX2Jub2RlX3JlYWQobm9kZSwgXHUwMDI2ZGVzYywgMCwgc2l6ZW9mKGRlc2MpKTtcbiYjNDM7XHRudW1fcmVjcyA9IGJlMTZfdG9fY3B1KGRlc2MubnVtX3JlY3MpO1xuIFx0aGZzX2RiZyhcJiMzNDtuZXh0ICVkLCBwcmV2ICVkLCB0eXBlICVkLCBoZWlnaHQgJWQsIG51bV9yZWNzICVkXFxuXCYjMzQ7LFxuIFx0XHRiZTMyX3RvX2NwdShkZXNjLm5leHQpLCBiZTMyX3RvX2NwdShkZXNjLnByZXYpLFxuLVx0XHRkZXNjLnR5cGUsIGRlc2MuaGVpZ2h0LCBiZTE2X3RvX2NwdShkZXNjLm51bV9yZWNzKSk7XG4mIzQzO1x0XHRkZXNjLnR5cGUsIGRlc2MuaGVpZ2h0LCBudW1fcmVjcyk7XG4mIzQzO1xuJiM0MztcdGlmICghaGZzX2Jub2RlX251bV9yZWNzX3ZhbGlkKG5vZGUsIG51bV9yZWNzKSkge1xuJiM0MztcdFx0aGZzX2RiZyhcJiMzNDtpbnZhbGlkIG51bV9yZWNzICV1XFxuXCYjMzQ7LCBudW1fcmVjcyk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuIFxuIFx0b2ZmID0gbm9kZS1cdTAwM2V0cmVlLVx1MDAzZW5vZGVfc2l6ZSAtIDI7XG4tXHRmb3IgKGkgPSBiZTE2X3RvX2NwdShkZXNjLm51bV9yZWNzKTsgaSBcdTAwM2U9IDA7IG9mZiAtPSAyLCBpLS0pIHtcbiYjNDM7XHRmb3IgKGkgPSBudW1fcmVjczsgaSBcdTAwM2U9IDA7IG9mZiAtPSAyLCBpLS0pIHtcbiBcdFx0a2V5X29mZiA9IGhmc19ibm9kZV9yZWFkX3UxNihub2RlLCBvZmYpO1xuIFx0XHRoZnNfZGJnKFwmIzM0OyBrZXlfb2ZmICVkXCYjMzQ7LCBrZXlfb2ZmKTtcbiBcdFx0aWYgKGkgXHUwMDI2XHUwMDI2IG5vZGUtXHUwMDNldHlwZSA9PSBIRlNfTk9ERV9JTkRFWCkge1xuQEAgLTU3OSw2ICYjNDM7NTg2LDkgQEAgc3RydWN0IGhmc19ibm9kZSAqaGZzX2Jub2RlX2ZpbmQoc3RydWN0IGhmc19idHJlZSAqdHJlZSwgdTMyIG51bSlcbiBcdFx0Z290byBub2RlX2Vycm9yO1xuIFx0fVxuIFxuJiM0MztcdGlmICghaGZzX2Jub2RlX251bV9yZWNzX3ZhbGlkKG5vZGUsIG5vZGUtXHUwMDNlbnVtX3JlY3MpKVxuJiM0MztcdFx0Z290byBub2RlX2Vycm9yO1xuJiM0MztcbiBcdHJlY19vZmYgPSB0cmVlLVx1MDAzZW5vZGVfc2l6ZSAtIDI7XG4gXHRvZmYgPSBoZnNfYm5vZGVfcmVhZF91MTYobm9kZSwgcmVjX29mZik7XG4gXHRpZiAob2ZmICE9IHNpemVvZihzdHJ1Y3QgaGZzX2Jub2RlX2Rlc2MpKVxuQEAgLTU4OCw2ICYjNDM7NTk4LDcgQEAgc3RydWN0IGhmc19ibm9kZSAqaGZzX2Jub2RlX2ZpbmQoc3RydWN0IGhmc19idHJlZSAqdHJlZSwgdTMyIG51bSlcbiBcdFx0bmV4dF9vZmYgPSBoZnNfYm5vZGVfcmVhZF91MTYobm9kZSwgcmVjX29mZik7XG4gXHRcdGlmIChuZXh0X29mZiBcdTAwM2M9IG9mZiB8fFxuIFx0XHQgICAgbmV4dF9vZmYgXHUwMDNlIHRyZWUtXHUwMDNlbm9kZV9zaXplIHx8XG4mIzQzO1x0XHQgICAgbmV4dF9vZmYgXHUwMDNlIHJlY19vZmYgfHxcbiBcdFx0ICAgIG5leHRfb2ZmIFx1MDAyNiAxKVxuIFx0XHRcdGdvdG8gbm9kZV9lcnJvcjtcbiBcdFx0ZW50cnlfc2l6ZSA9IG5leHRfb2ZmIC0gb2ZmO1xuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvYnJlYy5jIGIvZnMvaGZzcGx1cy9icmVjLmNcbmluZGV4IGUzZGY4OTI4NDA3OWRiLi5kY2UzOTdiZTkxNTFmZSAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvYnJlYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnNwbHVzL2JyZWMuY1xuQEAgLTIwLDEyICYjNDM7MjAsMjcgQEAgc3RhdGljIGludCBoZnNfYnRyZWVfaW5jX2hlaWdodChzdHJ1Y3QgaGZzX2J0cmVlICopO1xuIHUxNiBoZnNfYnJlY19sZW5vZmYoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTE2IHJlYywgdTE2ICpvZmYpXG4ge1xuIFx0X19iZTE2IHJldHZhbFsyXTtcbi1cdHUxNiBkYXRhb2ZmO1xuJiM0MztcdHUxNiBkYXRhX29mZjtcbiYjNDM7XHR1MTYgbmV4dF9vZmY7XG4gXG4tXHRkYXRhb2ZmID0gbm9kZS1cdTAwM2V0cmVlLVx1MDAzZW5vZGVfc2l6ZSAtIChyZWMgJiM0MzsgMikgKiAyO1xuLVx0aGZzX2Jub2RlX3JlYWQobm9kZSwgcmV0dmFsLCBkYXRhb2ZmLCA0KTtcbiYjNDM7XHRpZiAocmVjIFx1MDAzZT0gbm9kZS1cdTAwM2VudW1fcmVjcyB8fFxuJiM0MztcdFx0IWhmc19ibm9kZV9udW1fcmVjc192YWxpZChub2RlLCBub2RlLVx1MDAzZW51bV9yZWNzKSkge1xuJiM0MztcdFx0Km9mZiA9IDA7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRhdGFfb2ZmID0gbm9kZS1cdTAwM2V0cmVlLVx1MDAzZW5vZGVfc2l6ZSAtIChyZWMgJiM0MzsgMikgKiAyO1xuJiM0MztcdGhmc19ibm9kZV9yZWFkKG5vZGUsIHJldHZhbCwgZGF0YV9vZmYsIDQpO1xuIFx0Km9mZiA9IGJlMTZfdG9fY3B1KHJldHZhbFsxXSk7XG4tXHRyZXR1cm4gYmUxNl90b19jcHUocmV0dmFsWzBdKSAtICpvZmY7XG4mIzQzO1x0bmV4dF9vZmYgPSBiZTE2X3RvX2NwdShyZXR2YWxbMF0pO1xuJiM0MztcdGlmICgqb2ZmIFx1MDAzYyBzaXplb2Yoc3RydWN0IGhmc19ibm9kZV9kZXNjKSB8fFxuJiM0MztcdFx0Km9mZiBcdTAwMjYgMSB8fFxuJiM0MztcdFx0bmV4dF9vZmYgXHUwMDNjPSAqb2ZmIHx8XG4mIzQzO1x0XHRuZXh0X29mZiBcdTAwM2Ugbm9kZS1cdTAwM2V0cmVlLVx1MDAzZW5vZGVfc2l6ZSB8fFxuJiM0MztcdFx0bmV4dF9vZmYgXHUwMDNlIGRhdGFfb2ZmIHx8XG4mIzQzO1x0XHRuZXh0X29mZiBcdTAwMjYgMSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdHJldHVybiBuZXh0X29mZiAtICpvZmY7XG4gfVxuIFxuIC8qIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBrZXkgZnJvbSBhIGtleWVkIHJlY29yZCAqL1xuQEAgLTM1LDYgJiM0Mzs1MCw5IEBAIHUxNiBoZnNfYnJlY19rZXlsZW4oc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTE2IHJlYylcbiBcbiBcdGlmIChub2RlLVx1MDAzZXR5cGUgIT0gSEZTX05PREVfSU5ERVggXHUwMDI2XHUwMDI2IG5vZGUtXHUwMDNldHlwZSAhPSBIRlNfTk9ERV9MRUFGKVxuIFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRpZiAocmVjIFx1MDAzZT0gbm9kZS1cdTAwM2VudW1fcmVjcyB8fFxuJiM0MztcdFx0IWhmc19ibm9kZV9udW1fcmVjc192YWxpZChub2RlLCBub2RlLVx1MDAzZW51bV9yZWNzKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuIFxuIFx0aWYgKChub2RlLVx1MDAzZXR5cGUgPT0gSEZTX05PREVfSU5ERVgpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIShub2RlLVx1MDAzZXRyZWUtXHUwMDNlYXR0cmlidXRlcyBcdTAwMjYgSEZTX1RSRUVfVkFSSURYS0VZUykgXHUwMDI2XHUwMDI2XG5AQCAtNDMsNyAmIzQzOzYxLDcgQEAgdTE2IGhmc19icmVjX2tleWxlbihzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MTYgcmVjKVxuIFx0fSBlbHNlIHtcbiBcdFx0cmVjb2ZmID0gaGZzX2Jub2RlX3JlYWRfdTE2KG5vZGUsXG4gXHRcdFx0bm9kZS1cdTAwM2V0cmVlLVx1MDAzZW5vZGVfc2l6ZSAtIChyZWMgJiM0MzsgMSkgKiAyKTtcbi1cdFx0aWYgKCFyZWNvZmYpXG4mIzQzO1x0XHRpZiAocmVjb2ZmIFx1MDAzYyBzaXplb2Yoc3RydWN0IGhmc19ibm9kZV9kZXNjKSB8fCByZWNvZmYgXHUwMDI2IDEpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXHRcdGlmIChyZWNvZmYgXHUwMDNlIG5vZGUtXHUwMDNldHJlZS1cdTAwM2Vub2RlX3NpemUgLSAyKSB7XG4gXHRcdFx0cHJfZXJyKFwmIzM0O3JlY29mZiAlZCB0b28gbGFyZ2VcXG5cJiMzNDssIHJlY29mZik7XG5AQCAtMTg1LDEwICYjNDM7MjAzLDE3IEBAIGludCBoZnNfYnJlY19yZW1vdmUoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxuIFx0dHJlZSA9IGZkLVx1MDAzZXRyZWU7XG4gXHRub2RlID0gZmQtXHUwMDNlYm5vZGU7XG4gYWdhaW46XG4mIzQzO1x0aWYgKGZkLVx1MDAzZXJlY29yZCBcdTAwM2MgMCB8fFxuJiM0MztcdFx0ZmQtXHUwMDNlcmVjb3JkIFx1MDAzZT0gbm9kZS1cdTAwM2VudW1fcmVjcyB8fFxuJiM0MztcdFx0IWhmc19ibm9kZV9udW1fcmVjc192YWxpZChub2RlLCBub2RlLVx1MDAzZW51bV9yZWNzKSlcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuJiM0MztcbiBcdHJlY19vZmYgPSB0cmVlLVx1MDAzZW5vZGVfc2l6ZSAtIChmZC1cdTAwM2VyZWNvcmQgJiM0MzsgMikgKiAyO1xuIFx0ZW5kX29mZiA9IHRyZWUtXHUwMDNlbm9kZV9zaXplIC0gKG5vZGUtXHUwMDNlbnVtX3JlY3MgJiM0MzsgMSkgKiAyO1xuIFxuIFx0aWYgKG5vZGUtXHUwMDNldHlwZSA9PSBIRlNfTk9ERV9MRUFGKSB7XG4mIzQzO1x0XHRpZiAoIXRyZWUtXHUwMDNlbGVhZl9jb3VudClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU87XG4gXHRcdHRyZWUtXHUwMDNlbGVhZl9jb3VudC0tO1xuIFx0XHRtYXJrX2lub2RlX2RpcnR5KHRyZWUtXHUwMDNlaW5vZGUpO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oIGIvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmhcbmluZGV4IGVjMDRiODJhZDkyNzg3Li44YjJmMjA0MWI4Yjk4YiAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaFxuQEAgLTU4Nyw2ICYjNDM7NTg3LDI0IEBAIGJvb2wgaXNfYm5vZGVfb2Zmc2V0X3ZhbGlkKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUzMiBvZmYpXG4gXHRyZXR1cm4gaXNfdmFsaWQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lXG4mIzQzO2Jvb2wgaGZzX2Jub2RlX251bV9yZWNzX3ZhbGlkKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUxNiBudW1fcmVjcylcbiYjNDM7e1xuJiM0MztcdHUzMiBub2RlX3NpemU7XG4mIzQzO1x0dTMyIG9mZnNfc2l6ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFub2RlIHx8ICFub2RlLVx1MDAzZXRyZWUpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdG5vZGVfc2l6ZSA9IG5vZGUtXHUwMDNldHJlZS1cdTAwM2Vub2RlX3NpemU7XG4mIzQzO1x0aWYgKG5vZGVfc2l6ZSBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBoZnNfYm5vZGVfZGVzYykgJiM0Mzsgc2l6ZW9mKF9fYmUxNikpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdG9mZnNfc2l6ZSA9ICgodTMyKW51bV9yZWNzICYjNDM7IDEpICogc2l6ZW9mKF9fYmUxNik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBvZmZzX3NpemUgXHUwMDNjPSBub2RlX3NpemUgLSBzaXplb2Yoc3RydWN0IGhmc19ibm9kZV9kZXNjKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lXG4gdTMyIGNoZWNrX2FuZF9jb3JyZWN0X3JlcXVlc3RlZF9sZW5ndGgoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTMyIG9mZiwgdTMyIGxlbilcbiB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTE6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SEZTUExVU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hmc19icmVjX3JlbW92ZSYjMzQ7LAogICAgJiMzNDtoZnNfYnJlY19nb3RvJiMzNDssCiAgICAmIzM0O19faGZzX2JyZWNfZmluZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gZm9yIGBudW1fcmVjc2AgaW4gSEZTJiM0MzsgYi10cmVlIG5vZGVzIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3MgYW5kIG90aGVyIGlzc3Vlcy4gSXQgbW9kaWZpZXMgY29yZSBiLXRyZWUgb3BlcmF0aW9ucyBsaWtlIGZpbmRpbmcsIHJlbW92aW5nLCBhbmQgaXRlcmF0aW5nIG92ZXIgcmVjb3Jkcy4gVGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgYWZmZWN0IHJlYWNoYWJsZSBmaWxlc3lzdGVtIGxvZ2ljLCBwYXJ0aWN1bGFybHkgZHVyaW5nIGRpcmVjdG9yeSB0cmF2ZXJzYWwsIGZpbGUgZGVsZXRpb24sIGFuZCBhdHRyaWJ1dGUgb3BlcmF0aW9ucy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2Ugb3BlcmF0aW9ucyB0byBlbnN1cmUgdGhlIG5ldyB2YWxpZGF0aW9uIGxvZ2ljIGNvcnJlY3RseSBoYW5kbGVzIG1hbGZvcm1lZCBiLXRyZWUgbm9kZXMgd2l0aG91dCBjYXVzaW5nIHJlZ3Jlc3Npb25zIG9yIHBhbmljcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYWFlNTdiNjRkMDJiNjNmMDYzNjZlYjM4MmFkNWUwMWNjZjk0YjlhNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDEgMTE6MDU6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2JmaW5kLmMgYi9mcy9oZnNwbHVzL2JmaW5kLmMKaW5kZXggOWE1NWZhNmQ1Mjk0MjkuLmFjZTliYTAyN2E5ZGI0IDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2JmaW5kLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9iZmluZC5jCkBAIC0xMTIsMTEgJiM0MzsxMTIsMTMgQEAgaW50IF9faGZzX2JyZWNfZmluZChzdHJ1Y3QgaGZzX2Jub2RlICpibm9kZSwgc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLAogCWIgPSAwOwogCWUgPSBibm9kZS0mZ3Q7bnVtX3JlY3MgLSAxOwogCXJlcyA9IC1FTk9FTlQ7CiYjNDM7CWlmICghYm5vZGUtJmd0O251bV9yZWNzKQomIzQzOwkJcmV0dXJuIHJlczsKIAlkbyB7CiAJCXJlYyA9IChlICYjNDM7IGIpIC8gMjsKIAkJbGVuID0gaGZzX2JyZWNfbGVub2ZmKGJub2RlLCByZWMsICZhbXA7b2ZmKTsKIAkJa2V5bGVuID0gaGZzX2JyZWNfa2V5bGVuKGJub2RlLCByZWMpOwotCQlpZiAoa2V5bGVuID09IDApIHsKJiM0MzsJCWlmICgha2V5bGVuIHx8IGtleWxlbiAmZ3Q7PSBsZW4pIHsKIAkJCXJlcyA9IC1FSU5WQUw7CiAJCQlnb3RvIGZhaWw7CiAJCX0KQEAgLTEzMCw3ICYjNDM7MTMyLDcgQEAgaW50IF9faGZzX2JyZWNfZmluZChzdHJ1Y3QgaGZzX2Jub2RlICpibm9kZSwgc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLAogCWlmIChyZWMgIT0gZSAmYW1wOyZhbXA7IGUgJmd0Oz0gMCkgewogCQlsZW4gPSBoZnNfYnJlY19sZW5vZmYoYm5vZGUsIGUsICZhbXA7b2ZmKTsKIAkJa2V5bGVuID0gaGZzX2JyZWNfa2V5bGVuKGJub2RlLCBlKTsKLQkJaWYgKGtleWxlbiA9PSAwKSB7CiYjNDM7CQlpZiAoIWtleWxlbiB8fCBrZXlsZW4gJmd0Oz0gbGVuKSB7CiAJCQlyZXMgPSAtRUlOVkFMOwogCQkJZ290byBmYWlsOwogCQl9CkBAIC0yMzIsNiAmIzQzOzIzNCwxMCBAQCBpbnQgaGZzX2JyZWNfZ290byhzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIGludCBjbnQpCiAKIAlibm9kZSA9IGZkLSZndDtibm9kZTsKIAl0cmVlID0gYm5vZGUtJmd0O3RyZWU7CiYjNDM7CWlmICghYm5vZGUtJmd0O251bV9yZWNzKSB7CiYjNDM7CQlyZXMgPSAtRU5PRU5UOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KIAogCWlmIChjbnQgJmx0OyAwKSB7CiAJCWNudCA9IC1jbnQ7CkBAIC0yNzQsNyAmIzQzOzI4MCw3IEBAIGludCBoZnNfYnJlY19nb3RvKHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgaW50IGNudCkKIAogCWxlbiA9IGhmc19icmVjX2xlbm9mZihibm9kZSwgZmQtJmd0O3JlY29yZCwgJmFtcDtvZmYpOwogCWtleWxlbiA9IGhmc19icmVjX2tleWxlbihibm9kZSwgZmQtJmd0O3JlY29yZCk7Ci0JaWYgKGtleWxlbiA9PSAwKSB7CiYjNDM7CWlmICgha2V5bGVuIHx8IGtleWxlbiAmZ3Q7PSBsZW4pIHsKIAkJcmVzID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9ibm9kZS5jIGIvZnMvaGZzcGx1cy9ibm9kZS5jCmluZGV4IGQwODhmYjdlYjBkZmEzLi5kZjQwNmY3NWE1YjMyMyAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9ibm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2hmc3BsdXMvYm5vZGUuYwpAQCAtMzUyLDE1ICYjNDM7MzUyLDIyIEBAIHZvaWQgaGZzX2Jub2RlX2R1bXAoc3RydWN0IGhmc19ibm9kZSAqbm9kZSkKIAlzdHJ1Y3QgaGZzX2Jub2RlX2Rlc2MgZGVzYzsKIAlfX2JlMzIgY25pZDsKIAlpbnQgaSwgb2ZmLCBrZXlfb2ZmOwomIzQzOwl1MTYgbnVtX3JlY3M7CiAKIAloZnNfZGJnKCYjMzQ7bm9kZSAlZFxuJiMzNDssIG5vZGUtJmd0O3RoaXMpOwogCWhmc19ibm9kZV9yZWFkKG5vZGUsICZhbXA7ZGVzYywgMCwgc2l6ZW9mKGRlc2MpKTsKJiM0MzsJbnVtX3JlY3MgPSBiZTE2X3RvX2NwdShkZXNjLm51bV9yZWNzKTsKIAloZnNfZGJnKCYjMzQ7bmV4dCAlZCwgcHJldiAlZCwgdHlwZSAlZCwgaGVpZ2h0ICVkLCBudW1fcmVjcyAlZFxuJiMzNDssCiAJCWJlMzJfdG9fY3B1KGRlc2MubmV4dCksIGJlMzJfdG9fY3B1KGRlc2MucHJldiksCi0JCWRlc2MudHlwZSwgZGVzYy5oZWlnaHQsIGJlMTZfdG9fY3B1KGRlc2MubnVtX3JlY3MpKTsKJiM0MzsJCWRlc2MudHlwZSwgZGVzYy5oZWlnaHQsIG51bV9yZWNzKTsKJiM0MzsKJiM0MzsJaWYgKCFoZnNfYm5vZGVfbnVtX3JlY3NfdmFsaWQobm9kZSwgbnVtX3JlY3MpKSB7CiYjNDM7CQloZnNfZGJnKCYjMzQ7aW52YWxpZCBudW1fcmVjcyAldVxuJiMzNDssIG51bV9yZWNzKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQogCiAJb2ZmID0gbm9kZS0mZ3Q7dHJlZS0mZ3Q7bm9kZV9zaXplIC0gMjsKLQlmb3IgKGkgPSBiZTE2X3RvX2NwdShkZXNjLm51bV9yZWNzKTsgaSAmZ3Q7PSAwOyBvZmYgLT0gMiwgaS0tKSB7CiYjNDM7CWZvciAoaSA9IG51bV9yZWNzOyBpICZndDs9IDA7IG9mZiAtPSAyLCBpLS0pIHsKIAkJa2V5X29mZiA9IGhmc19ibm9kZV9yZWFkX3UxNihub2RlLCBvZmYpOwogCQloZnNfZGJnKCYjMzQ7IGtleV9vZmYgJWQmIzM0Oywga2V5X29mZik7CiAJCWlmIChpICZhbXA7JmFtcDsgbm9kZS0mZ3Q7dHlwZSA9PSBIRlNfTk9ERV9JTkRFWCkgewpAQCAtNTc5LDYgJiM0Mzs1ODYsOSBAQCBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm5vZGVfZmluZChzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlLCB1MzIgbnVtKQogCQlnb3RvIG5vZGVfZXJyb3I7CiAJfQogCiYjNDM7CWlmICghaGZzX2Jub2RlX251bV9yZWNzX3ZhbGlkKG5vZGUsIG5vZGUtJmd0O251bV9yZWNzKSkKJiM0MzsJCWdvdG8gbm9kZV9lcnJvcjsKJiM0MzsKIAlyZWNfb2ZmID0gdHJlZS0mZ3Q7bm9kZV9zaXplIC0gMjsKIAlvZmYgPSBoZnNfYm5vZGVfcmVhZF91MTYobm9kZSwgcmVjX29mZik7CiAJaWYgKG9mZiAhPSBzaXplb2Yoc3RydWN0IGhmc19ibm9kZV9kZXNjKSkKQEAgLTU4OCw2ICYjNDM7NTk4LDcgQEAgc3RydWN0IGhmc19ibm9kZSAqaGZzX2Jub2RlX2ZpbmQoc3RydWN0IGhmc19idHJlZSAqdHJlZSwgdTMyIG51bSkKIAkJbmV4dF9vZmYgPSBoZnNfYm5vZGVfcmVhZF91MTYobm9kZSwgcmVjX29mZik7CiAJCWlmIChuZXh0X29mZiAmbHQ7PSBvZmYgfHwKIAkJICAgIG5leHRfb2ZmICZndDsgdHJlZS0mZ3Q7bm9kZV9zaXplIHx8CiYjNDM7CQkgICAgbmV4dF9vZmYgJmd0OyByZWNfb2ZmIHx8CiAJCSAgICBuZXh0X29mZiAmYW1wOyAxKQogCQkJZ290byBub2RlX2Vycm9yOwogCQllbnRyeV9zaXplID0gbmV4dF9vZmYgLSBvZmY7CmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2JyZWMuYyBiL2ZzL2hmc3BsdXMvYnJlYy5jCmluZGV4IGUzZGY4OTI4NDA3OWRiLi5kY2UzOTdiZTkxNTFmZSAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9icmVjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9icmVjLmMKQEAgLTIwLDEyICYjNDM7MjAsMjcgQEAgc3RhdGljIGludCBoZnNfYnRyZWVfaW5jX2hlaWdodChzdHJ1Y3QgaGZzX2J0cmVlICopOwogdTE2IGhmc19icmVjX2xlbm9mZihzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MTYgcmVjLCB1MTYgKm9mZikKIHsKIAlfX2JlMTYgcmV0dmFsWzJdOwotCXUxNiBkYXRhb2ZmOwomIzQzOwl1MTYgZGF0YV9vZmY7CiYjNDM7CXUxNiBuZXh0X29mZjsKIAotCWRhdGFvZmYgPSBub2RlLSZndDt0cmVlLSZndDtub2RlX3NpemUgLSAocmVjICYjNDM7IDIpICogMjsKLQloZnNfYm5vZGVfcmVhZChub2RlLCByZXR2YWwsIGRhdGFvZmYsIDQpOwomIzQzOwlpZiAocmVjICZndDs9IG5vZGUtJmd0O251bV9yZWNzIHx8CiYjNDM7CQkhaGZzX2Jub2RlX251bV9yZWNzX3ZhbGlkKG5vZGUsIG5vZGUtJmd0O251bV9yZWNzKSkgewomIzQzOwkJKm9mZiA9IDA7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlkYXRhX29mZiA9IG5vZGUtJmd0O3RyZWUtJmd0O25vZGVfc2l6ZSAtIChyZWMgJiM0MzsgMikgKiAyOwomIzQzOwloZnNfYm5vZGVfcmVhZChub2RlLCByZXR2YWwsIGRhdGFfb2ZmLCA0KTsKIAkqb2ZmID0gYmUxNl90b19jcHUocmV0dmFsWzFdKTsKLQlyZXR1cm4gYmUxNl90b19jcHUocmV0dmFsWzBdKSAtICpvZmY7CiYjNDM7CW5leHRfb2ZmID0gYmUxNl90b19jcHUocmV0dmFsWzBdKTsKJiM0MzsJaWYgKCpvZmYgJmx0OyBzaXplb2Yoc3RydWN0IGhmc19ibm9kZV9kZXNjKSB8fAomIzQzOwkJKm9mZiAmYW1wOyAxIHx8CiYjNDM7CQluZXh0X29mZiAmbHQ7PSAqb2ZmIHx8CiYjNDM7CQluZXh0X29mZiAmZ3Q7IG5vZGUtJmd0O3RyZWUtJmd0O25vZGVfc2l6ZSB8fAomIzQzOwkJbmV4dF9vZmYgJmd0OyBkYXRhX29mZiB8fAomIzQzOwkJbmV4dF9vZmYgJmFtcDsgMSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlyZXR1cm4gbmV4dF9vZmYgLSAqb2ZmOwogfQogCiAvKiBHZXQgdGhlIGxlbmd0aCBvZiB0aGUga2V5IGZyb20gYSBrZXllZCByZWNvcmQgKi8KQEAgLTM1LDYgJiM0Mzs1MCw5IEBAIHUxNiBoZnNfYnJlY19rZXlsZW4oc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTE2IHJlYykKIAogCWlmIChub2RlLSZndDt0eXBlICE9IEhGU19OT0RFX0lOREVYICZhbXA7JmFtcDsgbm9kZS0mZ3Q7dHlwZSAhPSBIRlNfTk9ERV9MRUFGKQogCQlyZXR1cm4gMDsKJiM0MzsJaWYgKHJlYyAmZ3Q7PSBub2RlLSZndDtudW1fcmVjcyB8fAomIzQzOwkJIWhmc19ibm9kZV9udW1fcmVjc192YWxpZChub2RlLCBub2RlLSZndDtudW1fcmVjcykpCiYjNDM7CQlyZXR1cm4gMDsKIAogCWlmICgobm9kZS0mZ3Q7dHlwZSA9PSBIRlNfTk9ERV9JTkRFWCkgJmFtcDsmYW1wOwogCSAgICEobm9kZS0mZ3Q7dHJlZS0mZ3Q7YXR0cmlidXRlcyAmYW1wOyBIRlNfVFJFRV9WQVJJRFhLRVlTKSAmYW1wOyZhbXA7CkBAIC00Myw3ICYjNDM7NjEsNyBAQCB1MTYgaGZzX2JyZWNfa2V5bGVuKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUxNiByZWMpCiAJfSBlbHNlIHsKIAkJcmVjb2ZmID0gaGZzX2Jub2RlX3JlYWRfdTE2KG5vZGUsCiAJCQlub2RlLSZndDt0cmVlLSZndDtub2RlX3NpemUgLSAocmVjICYjNDM7IDEpICogMik7Ci0JCWlmICghcmVjb2ZmKQomIzQzOwkJaWYgKHJlY29mZiAmbHQ7IHNpemVvZihzdHJ1Y3QgaGZzX2Jub2RlX2Rlc2MpIHx8IHJlY29mZiAmYW1wOyAxKQogCQkJcmV0dXJuIDA7CiAJCWlmIChyZWNvZmYgJmd0OyBub2RlLSZndDt0cmVlLSZndDtub2RlX3NpemUgLSAyKSB7CiAJCQlwcl9lcnIoJiMzNDtyZWNvZmYgJWQgdG9vIGxhcmdlXG4mIzM0OywgcmVjb2ZmKTsKQEAgLTE4NSwxMCAmIzQzOzIwMywxNyBAQCBpbnQgaGZzX2JyZWNfcmVtb3ZlKHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCkKIAl0cmVlID0gZmQtJmd0O3RyZWU7CiAJbm9kZSA9IGZkLSZndDtibm9kZTsKIGFnYWluOgomIzQzOwlpZiAoZmQtJmd0O3JlY29yZCAmbHQ7IDAgfHwKJiM0MzsJCWZkLSZndDtyZWNvcmQgJmd0Oz0gbm9kZS0mZ3Q7bnVtX3JlY3MgfHwKJiM0MzsJCSFoZnNfYm5vZGVfbnVtX3JlY3NfdmFsaWQobm9kZSwgbm9kZS0mZ3Q7bnVtX3JlY3MpKQomIzQzOwkJcmV0dXJuIC1FSU87CiYjNDM7CiAJcmVjX29mZiA9IHRyZWUtJmd0O25vZGVfc2l6ZSAtIChmZC0mZ3Q7cmVjb3JkICYjNDM7IDIpICogMjsKIAllbmRfb2ZmID0gdHJlZS0mZ3Q7bm9kZV9zaXplIC0gKG5vZGUtJmd0O251bV9yZWNzICYjNDM7IDEpICogMjsKIAogCWlmIChub2RlLSZndDt0eXBlID09IEhGU19OT0RFX0xFQUYpIHsKJiM0MzsJCWlmICghdHJlZS0mZ3Q7bGVhZl9jb3VudCkKJiM0MzsJCQlyZXR1cm4gLUVJTzsKIAkJdHJlZS0mZ3Q7bGVhZl9jb3VudC0tOwogCQltYXJrX2lub2RlX2RpcnR5KHRyZWUtJmd0O2lub2RlKTsKIAl9CmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaCBiL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oCmluZGV4IGVjMDRiODJhZDkyNzg3Li44YjJmMjA0MWI4Yjk4YiAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgKQEAgLTU4Nyw2ICYjNDM7NTg3LDI0IEBAIGJvb2wgaXNfYm5vZGVfb2Zmc2V0X3ZhbGlkKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUzMiBvZmYpCiAJcmV0dXJuIGlzX3ZhbGlkOwogfQogCiYjNDM7c3RhdGljIGlubGluZQomIzQzO2Jvb2wgaGZzX2Jub2RlX251bV9yZWNzX3ZhbGlkKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUxNiBudW1fcmVjcykKJiM0Mzt7CiYjNDM7CXUzMiBub2RlX3NpemU7CiYjNDM7CXUzMiBvZmZzX3NpemU7CiYjNDM7CiYjNDM7CWlmICghbm9kZSB8fCAhbm9kZS0mZ3Q7dHJlZSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJbm9kZV9zaXplID0gbm9kZS0mZ3Q7dHJlZS0mZ3Q7bm9kZV9zaXplOwomIzQzOwlpZiAobm9kZV9zaXplICZsdDsgc2l6ZW9mKHN0cnVjdCBoZnNfYm5vZGVfZGVzYykgJiM0Mzsgc2l6ZW9mKF9fYmUxNikpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CW9mZnNfc2l6ZSA9ICgodTMyKW51bV9yZWNzICYjNDM7IDEpICogc2l6ZW9mKF9fYmUxNik7CiYjNDM7CiYjNDM7CXJldHVybiBvZmZzX3NpemUgJmx0Oz0gbm9kZV9zaXplIC0gc2l6ZW9mKHN0cnVjdCBoZnNfYm5vZGVfZGVzYyk7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZQogdTMyIGNoZWNrX2FuZF9jb3JyZWN0X3JlcXVlc3RlZF9sZW5ndGgoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTMyIG9mZiwgdTMyIGxlbikKIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTE6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYwMQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipWYWxpZGF0aW5nIEhGUyYjNDM7IEItVHJlZSBOb2RlIFJlY29yZCBDb3VudHMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBjb3JlIG9mIGl0IGlzIGFkZGluZyB2YWxpZGF0aW9uIGZvciBgbnVtX3JlY3NgIHdpdGhpbiBIRlMmIzQzOyBiLXRyZWUgbm9kZXMuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IG1vZGlmaWNhdGlvbnMgYWNyb3NzIGEgZmV3IGtleSBmaWxlczogYGJmaW5kLmNgLCBgYm5vZGUuY2AsIGBicmVjLmNgLCBhbmQgdGhlIGhlYWRlciwgYGhmc3BsdXNfZnMuaGAuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgZGVmaW5lZCBhIG5ldyBpbmxpbmUgZnVuY3Rpb24sIGBoZnNfYm5vZGVfbnVtX3JlY3NfdmFsaWRgLCByaWdodCB0aGVyZSBpbiBgaGZzcGx1c19mcy5oYC4gU21hcnQgbW92ZSwga2VlcHMgaXQgdGlkeS4KCkZyb20gdGhlIGxvb2tzIG9mIGl0LCB0aGlzIG5ldyB2YWxpZGF0aW9uIGlzIGJlaW5nIGludGVncmF0ZWQgaW50byBhIGJ1bmNoIG9mIGV4aXN0aW5nIGZ1bmN0aW9ucyBsaWtlIGBoZnNfYm5vZGVfZHVtcGAsIGBoZnNfYm5vZGVfZmluZGAsIGBoZnNfYnJlY19sZW5vZmZgLCBgaGZzX2JyZWNfa2V5bGVuYCwgYW5kIGBoZnNfYnJlY19yZW1vdmVgLiBUaGF0IG1ha2VzIHNlbnNlOyBjYXRjaGluZyBlcnJvcnMgZWFybHkgaXMgYWx3YXlzIHRoZSBiZXN0IGFwcHJvYWNoLiBUaGV5JiMzOTt2ZSBhbHNvIGFkZGVkIGV4cGxpY2l0IGNoZWNrcyBmb3IgYGJub2RlLSZndDtudW1fcmVjc2AgYmVpbmcgemVybyBpbiBgX19oZnNfYnJlY19maW5kYCBhbmQgYGhmc19icmVjX2dvdG9gLiBHb29kLCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgYWxzbyBhZGRpbmcgc29tZSBjaGVja3MgZm9yIHRoZSBga2V5bGVuYCBhbmQgYG5leHRfb2ZmYCB2YWx1ZXMgYXMgd2VsbCAtIGdvb2QsIHRob3JvdWdoLgoKT3ZlcmFsbCwgdGhlIGNvZGUgbG9va3Mgc29saWQgYW5kIGZ1bmN0aW9uYWwuIE15IGZvY3VzIGlzIGFsd2F5cyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBpbXBsaWNhdGlvbnMgd2l0aGluIHRoZSBIRlMmIzQzOyBmaWxlc3lzdGVtIGNvbnRleHQuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhlIGBIRlNQTFVTX0ZTYCBjb25maWcgb3B0aW9uIGFuZCwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBleGFjdCBjb25maWcgbmFtZSBpbiBgZnMvaGZzcGx1cy9LY29uZmlnYCBvciBgZnMvS2NvbmZpZ2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTE6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SEZTUExVUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9oZnNwbHVzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2hmc3BsdXMvS2NvbmZpZzoyOmNvbmZpZyBIRlNQTFVTX0ZTXG5mcy9oZnNwbHVzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0FwcGxlIEV4dGVuZGVkIEhGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvaGZzcGx1cy9LY29uZmlnLTE3LVxuZnMvaGZzcGx1cy9LY29uZmlnOjE4OmNvbmZpZyBIRlNQTFVTX0tVTklUX1RFU1RcbmZzL2hmc3BsdXMvS2NvbmZpZy0xOS1cdHRyaXN0YXRlIFwmIzM0O0tVbml0IHRlc3RzIGZvciBIRlMmIzQzOyBmaWxlc3lzdGVtXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbmZzL2hmc3BsdXMvS2NvbmZpZzoyMDpcdGRlcGVuZHMgb24gSEZTUExVU19GUyBcdTAwMjZcdTAwMjYgS1VOSVRcbmZzL2hmc3BsdXMvS2NvbmZpZy0yMS1cdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTE6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ4MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBIRlMmIzQzOyBGaWxlc3lzdGVtKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBIRlNQTFVTX0ZTYCBjb25maWcsIGFuZCB0aGUgZ29hbCBpcyB0byBpZGVudGlmeSB0aGUgbW9zdCBwcm9taXNpbmcgZnVuY3Rpb25zIGZvciBmdXp6aW5nLiBTZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiB0aGUgZm9jdXMgc2hvdWxkIGJlIG9uIGZ1bmN0aW9ucyB0aGF0IGFyZSBsaWtlbHkgdG8gZXhwb3NlIHZ1bG5lcmFiaWxpdGllcy4gVGhlIHRleHQgaGlnaGxpZ2h0cyBhIGxpc3Qgb2YgbW9kaWZpZWQgZnVuY3Rpb25zLCBhbmQgSSYjMzk7bSB1c2luZyB0aGF0IGFzIGEgc3RhcnRpbmcgcG9pbnQuCgpMb29raW5nIGF0IHRoZSBsaXN0LCBJIGhhdmU6IGBfX2hmc19icmVjX2ZpbmRgLCBgaGZzX2JyZWNfZ290b2AsIGBoZnNfYm5vZGVfZHVtcGAsIGBoZnNfYm5vZGVfZmluZGAsIGBoZnNfYnJlY19sZW5vZmZgLCBgaGZzX2JyZWNfa2V5bGVuYCwgYW5kIGBoZnNfYnJlY19yZW1vdmVgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYGhmc19ibm9kZV9kdW1wYCBpcyBsaWtlbHkganVzdCBhIGRlYnVnZ2luZyBmdW5jdGlvbiwgc28gaXQmIzM5O3MgcHJvYmFibHkgbm90IHRoZSBiZXN0IHRhcmdldCBmb3IgZnV6emluZyDigJMgbGVzcyBjaGFuY2Ugb2YgdHJpZ2dlcmluZyBhY3R1YWwgdnVsbmVyYWJpbGl0aWVzLiBUaGUgcmVzdCBsb29rIGxpa2Ugc29saWQgY2FuZGlkYXRlczogYF9faGZzX2JyZWNfZmluZGAsIGBoZnNfYnJlY19nb3RvYCwgYGhmc19ibm9kZV9maW5kYCwgYGhmc19icmVjX2xlbm9mZmAsIGBoZnNfYnJlY19rZXlsZW5gLCBhbmQgYGhmc19icmVjX3JlbW92ZWAuCgpOb3csIHdhaXQgYSBzZWNvbmQuIGBoZnNfYnJlY19sZW5vZmZgIGFuZCBgaGZzX2JyZWNfa2V5bGVuYC4uLiB0aG9zZSBzb3VuZCBsaWtlIHRoZXkmIzM5O3JlIHByb2JhYmx5IGNhbGxlZCAqdmVyeSogZnJlcXVlbnRseS4gVGhhdCBjb3VsZCBtZWFuIHRoZXkmIzM5O3JlIGluIGEgaG90IHBhdGgsIGFuZCB0aGF0JiMzOTtzIHRoZSBraW5kIG9mIHBsYWNlIHdoZXJlIEkmIzM5O20gZ29pbmcgdG8gZmluZCB0aGUgbW9zdCBpbnRlcmVzdGluZyByZXN1bHRzLiBJJiMzOTttIGdvaW5nIHRvIGludmVzdGlnYXRlIHRob3NlIHR3byBmdW5jdGlvbnMgYSBiaXQgbW9yZSBjbG9zZWx5IHRvIGRldGVybWluZSBpZiB0aGV5IHJlYWxseSBhcmUgaW4gdGhlIGhvdCBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hmc19icmVjX2xlbm9mZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvYmZpbmQuYz0xMDM9aW50IF9faGZzX2JyZWNfZmluZChzdHJ1Y3QgaGZzX2Jub2RlICpibm9kZSwgc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLFxuLS1cbmZzL2hmc3BsdXMvYmZpbmQuYy0xMTgtXHRcdHJlYyA9IChlICYjNDM7IGIpIC8gMjtcbmZzL2hmc3BsdXMvYmZpbmQuYzoxMTk6XHRcdGxlbiA9IGhmc19icmVjX2xlbm9mZihibm9kZSwgcmVjLCBcdTAwMjZvZmYpO1xuZnMvaGZzcGx1cy9iZmluZC5jLTEyMC1cdFx0a2V5bGVuID0gaGZzX2JyZWNfa2V5bGVuKGJub2RlLCByZWMpO1xuLS1cbmZzL2hmc3BsdXMvYmZpbmQuYy0xMzItXHRpZiAocmVjICE9IGUgXHUwMDI2XHUwMDI2IGUgXHUwMDNlPSAwKSB7XG5mcy9oZnNwbHVzL2JmaW5kLmM6MTMzOlx0XHRsZW4gPSBoZnNfYnJlY19sZW5vZmYoYm5vZGUsIGUsIFx1MDAyNm9mZik7XG5mcy9oZnNwbHVzL2JmaW5kLmMtMTM0LVx0XHRrZXlsZW4gPSBoZnNfYnJlY19rZXlsZW4oYm5vZGUsIGUpO1xuLS1cbmZzL2hmc3BsdXMvYmZpbmQuYz0yMjg9aW50IGhmc19icmVjX2dvdG8oc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLCBpbnQgY250KVxuLS1cbmZzL2hmc3BsdXMvYmZpbmQuYy0yODAtXG5mcy9oZnNwbHVzL2JmaW5kLmM6MjgxOlx0bGVuID0gaGZzX2JyZWNfbGVub2ZmKGJub2RlLCBmZC1cdTAwM2VyZWNvcmQsIFx1MDAyNm9mZik7XG5mcy9oZnNwbHVzL2JmaW5kLmMtMjgyLVx0a2V5bGVuID0gaGZzX2JyZWNfa2V5bGVuKGJub2RlLCBmZC1cdTAwM2VyZWNvcmQpO1xuLS1cbmZzL2hmc3BsdXMvYnJlYy5jPTE3PXN0YXRpYyBpbnQgaGZzX2J0cmVlX2luY19oZWlnaHQoc3RydWN0IGhmc19idHJlZSAqKTtcbi0tXG5mcy9oZnNwbHVzL2JyZWMuYy0xOS0vKiBHZXQgdGhlIGxlbmd0aCBhbmQgb2Zmc2V0IG9mIHRoZSBnaXZlbiByZWNvcmQgaW4gdGhlIGdpdmVuIG5vZGUgKi9cbmZzL2hmc3BsdXMvYnJlYy5jOjIwOnUxNiBoZnNfYnJlY19sZW5vZmYoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTE2IHJlYywgdTE2ICpvZmYpXG5mcy9oZnNwbHVzL2JyZWMuYy0yMS17XG4tLVxuZnMvaGZzcGx1cy9idHJlZS5jPTE0OT1zdGF0aWMgc3RydWN0IHBhZ2UgKmhmc19ibWFwX2dldF9tYXBfcGFnZShzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLFxuLS1cbmZzL2hmc3BsdXMvYnRyZWUuYy0xNjktXG5mcy9oZnNwbHVzL2J0cmVlLmM6MTcwOlx0Y3R4LVx1MDAzZWxlbiA9IGhmc19icmVjX2xlbm9mZihub2RlLCByZWNfaWR4LCBcdTAwMjZvZmYxNik7XG5mcy9oZnNwbHVzL2J0cmVlLmMtMTcxLVx0aWYgKCFjdHgtXHUwMDNlbGVuKVxuLS1cbmZzL2hmc3BsdXMvYnRyZWUuYz02MDk9dm9pZCBoZnNfYm1hcF9mcmVlKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUpXG4tLVxuZnMvaGZzcGx1cy9idHJlZS5jLTYyMy1cdFx0cmV0dXJuO1xuZnMvaGZzcGx1cy9idHJlZS5jOjYyNDpcdGxlbiA9IGhmc19icmVjX2xlbm9mZihub2RlLCAyLCBcdTAwMjZvZmYpO1xuZnMvaGZzcGx1cy9idHJlZS5jLTYyNS1cdHdoaWxlIChuaWR4IFx1MDAzZT0gbGVuICogOCkge1xuLS1cbmZzL2hmc3BsdXMvYnRyZWUuYy02NDktXHRcdH1cbmZzL2hmc3BsdXMvYnRyZWUuYzo2NTA6XHRcdGxlbiA9IGhmc19icmVjX2xlbm9mZihub2RlLCAwLCBcdTAwMjZvZmYpO1xuZnMvaGZzcGx1cy9idHJlZS5jLTY1MS1cdH1cbi0tXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaD0yODA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBoZnNwbHVzX21pbl9pb19zaXplKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMzA5LSNkZWZpbmUgaGZzX2Jub2RlX3B1dCBoZnNwbHVzX2Jub2RlX3B1dFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg6MzEwOiNkZWZpbmUgaGZzX2JyZWNfbGVub2ZmIGhmc3BsdXNfYnJlY19sZW5vZmZcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTMxMS0jZGVmaW5lIGhmc19icmVjX2tleWxlbiBoZnNwbHVzX2JyZWNfa2V5bGVuXG4tLVxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg9MzkwPWJvb2wgaGZzX2Jub2RlX25lZWRfemVyb291dChzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKTtcbi0tXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC0zOTItLyogYnJlYy5jICovXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaDozOTM6dTE2IGhmc19icmVjX2xlbm9mZihzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MTYgcmVjLCB1MTYgKm9mZik7XG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC0zOTQtdTE2IGhmc19icmVjX2tleWxlbihzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MTYgcmVjKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjUxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQnJlYWR0aCBvZiBgaGZzX2JyZWNfbGVub2ZmYCBVc2FnZSoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBoZnNfYnJlY19sZW5vZmZgIGlzIGEgcHJldHR5IGZ1bmRhbWVudGFsIGZ1bmN0aW9uLiBJdCYjMzk7cyBjYWxsZWQgZnJvbSBhIG51bWJlciBvZiBrZXkgcGxhY2VzOiBgX19oZnNfYnJlY19maW5kYCwgYGhmc19icmVjX2dvdG9gLCBgaGZzX2JtYXBfZ2V0X21hcF9wYWdlYCwgYW5kIGBoZnNfYm1hcF9mcmVlYC4gIFJpZ2h0IGF3YXksIEkmIzM5O20gdGhpbmtpbmcgdGhhdCBgX19oZnNfYnJlY19maW5kYCBhbmQgYGhmc19icmVjX2dvdG9gIGFyZSBwcm9iYWJseSBnZXR0aW5nIGhpdCAqYSBsb3QqIGR1cmluZyBkaXJlY3RvcnkgdHJhdmVyc2FsIGFuZCBnZW5lcmFsIGZpbGUgbG9va3VwcyDigJMgdGhlIGNvcmUgb3BlcmF0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgbW9kaWZpY2F0aW9ucyB0aGVyZS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHdoYXQgZWxzZSBpcyBwb3RlbnRpYWxseSBhZmZlY3RlZC4gTGV0JiMzOTtzIHNlZS4uLiBgaGZzX2Jub2RlX2ZpbmRgIGFuZCBgaGZzX2JyZWNfcmVtb3ZlYC4gSW50ZXJlc3RpbmcuIEFscmlnaHQsIGxldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gYGhmc19ibm9kZV9maW5kYCBhbmQgc2VlIHdoYXQgaXQgaXMgZG9pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTE6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGZzX2Jub2RlX2ZpbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9oZnNwbHVzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9oZnNwbHVzL2JmaW5kLmM9MTU1PWludCBoZnNfYnJlY19maW5kKHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgc2VhcmNoX3N0cmF0ZWd5X3QgZG9fa2V5X2NvbXBhcmUpXG4tLVxuZnMvaGZzcGx1cy9iZmluZC5jLTE3OS1cdGZvciAoOzspIHtcbmZzL2hmc3BsdXMvYmZpbmQuYzoxODA6XHRcdGJub2RlID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgbmlkeCk7XG5mcy9oZnNwbHVzL2JmaW5kLmMtMTgxLVx0XHRpZiAoSVNfRVJSKGJub2RlKSkge1xuLS1cbmZzL2hmc3BsdXMvYmZpbmQuYz0yMjg9aW50IGhmc19icmVjX2dvdG8oc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLCBpbnQgY250KVxuLS1cbmZzL2hmc3BsdXMvYmZpbmQuYy0yNTItXHRcdFx0aGZzX2Jub2RlX3B1dChibm9kZSk7XG5mcy9oZnNwbHVzL2JmaW5kLmM6MjUzOlx0XHRcdGJub2RlID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgaWR4KTtcbmZzL2hmc3BsdXMvYmZpbmQuYy0yNTQtXHRcdFx0aWYgKElTX0VSUihibm9kZSkpIHtcbi0tXG5mcy9oZnNwbHVzL2JmaW5kLmMtMjcwLVx0XHRcdGhmc19ibm9kZV9wdXQoYm5vZGUpO1xuZnMvaGZzcGx1cy9iZmluZC5jOjI3MTpcdFx0XHRibm9kZSA9IGhmc19ibm9kZV9maW5kKHRyZWUsIGlkeCk7XG5mcy9oZnNwbHVzL2JmaW5kLmMtMjcyLVx0XHRcdGlmIChJU19FUlIoYm5vZGUpKSB7XG4tLVxuZnMvaGZzcGx1cy9ibm9kZS5jPTM5ND12b2lkIGhmc19ibm9kZV91bmxpbmsoc3RydWN0IGhmc19ibm9kZSAqbm9kZSlcbi0tXG5mcy9oZnNwbHVzL2Jub2RlLmMtNDAxLVx0aWYgKG5vZGUtXHUwMDNlcHJldikge1xuZnMvaGZzcGx1cy9ibm9kZS5jOjQwMjpcdFx0dG1wID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgbm9kZS1cdTAwM2VwcmV2KTtcbmZzL2hmc3BsdXMvYm5vZGUuYy00MDMtXHRcdGlmIChJU19FUlIodG1wKSlcbi0tXG5mcy9oZnNwbHVzL2Jub2RlLmMtNDEzLVx0aWYgKG5vZGUtXHUwMDNlbmV4dCkge1xuZnMvaGZzcGx1cy9ibm9kZS5jOjQxNDpcdFx0dG1wID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgbm9kZS1cdTAwM2VuZXh0KTtcbmZzL2hmc3BsdXMvYm5vZGUuYy00MTUtXHRcdGlmIChJU19FUlIodG1wKSlcbi0tXG5mcy9oZnNwbHVzL2Jub2RlLmM9NDM4PXN0YXRpYyBpbmxpbmUgaW50IGhmc19ibm9kZV9oYXNoKHUzMiBudW0pXG4tLVxuZnMvaGZzcGx1cy9ibm9kZS5jLTQ0NC1cbmZzL2hmc3BsdXMvYm5vZGUuYzo0NDU6c3RydWN0IGhmc19ibm9kZSAqaGZzX2Jub2RlX2ZpbmRoYXNoKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUsIHUzMiBjbmlkKVxuZnMvaGZzcGx1cy9ibm9kZS5jLTQ0Ni17XG4tLVxuZnMvaGZzcGx1cy9ibm9kZS5jPTQ2Mj1zdGF0aWMgc3RydWN0IGhmc19ibm9kZSAqX19oZnNfYm5vZGVfY3JlYXRlKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUsIHUzMiBjbmlkKVxuLS1cbmZzL2hmc3BsdXMvYm5vZGUuYy00ODYtXHRzcGluX2xvY2soXHUwMDI2dHJlZS1cdTAwM2VoYXNoX2xvY2spO1xuZnMvaGZzcGx1cy9ibm9kZS5jOjQ4NzpcdG5vZGUyID0gaGZzX2Jub2RlX2ZpbmRoYXNoKHRyZWUsIGNuaWQpO1xuZnMvaGZzcGx1cy9ibm9kZS5jLTQ4OC1cdGlmICghbm9kZTIpIHtcbi0tXG5mcy9oZnNwbHVzL2Jub2RlLmM9NTIwPXZvaWQgaGZzX2Jub2RlX3VuaGFzaChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlKVxuLS1cbmZzL2hmc3BsdXMvYm5vZGUuYy01MzQtLyogTG9hZCBhIHBhcnRpY3VsYXIgbm9kZSBvdXQgb2YgYSB0cmVlICovXG5mcy9oZnNwbHVzL2Jub2RlLmM6NTM1OnN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibm9kZV9maW5kKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUsIHUzMiBudW0pXG5mcy9oZnNwbHVzL2Jub2RlLmMtNTM2LXtcbi0tXG5mcy9oZnNwbHVzL2Jub2RlLmMtNTQyLVx0c3Bpbl9sb2NrKFx1MDAyNnRyZWUtXHUwMDNlaGFzaF9sb2NrKTtcbmZzL2hmc3BsdXMvYm5vZGUuYzo1NDM6XHRub2RlID0gaGZzX2Jub2RlX2ZpbmRoYXNoKHRyZWUsIG51bSk7XG5mcy9oZnNwbHVzL2Jub2RlLmMtNTQ0LVx0aWYgKG5vZGUpIHtcbi0tXG5mcy9oZnNwbHVzL2Jub2RlLmM9NjM0PXN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibm9kZV9jcmVhdGUoc3RydWN0IGhmc19idHJlZSAqdHJlZSwgdTMyIG51bSlcbi0tXG5mcy9oZnNwbHVzL2Jub2RlLmMtNjQwLVx0c3Bpbl9sb2NrKFx1MDAyNnRyZWUtXHUwMDNlaGFzaF9sb2NrKTtcbmZzL2hmc3BsdXMvYm5vZGUuYzo2NDE6XHRub2RlID0gaGZzX2Jub2RlX2ZpbmRoYXNoKHRyZWUsIG51bSk7XG5mcy9oZnNwbHVzL2Jub2RlLmMtNjQyLVx0c3Bpbl91bmxvY2soXHUwMDI2dHJlZS1cdTAwM2VoYXNoX2xvY2spO1xuLS1cbmZzL2hmc3BsdXMvYnJlYy5jPTgxPWludCBoZnNfYnJlY19pbnNlcnQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLCB2b2lkICplbnRyeSwgdTMyIGVudHJ5X2xlbilcbi0tXG5mcy9oZnNwbHVzL2JyZWMuYy05My1cdFx0XHRoZnNfYnRyZWVfaW5jX2hlaWdodCh0cmVlKTtcbmZzL2hmc3BsdXMvYnJlYy5jOjk0Olx0XHRub2RlID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgdHJlZS1cdTAwM2VsZWFmX2hlYWQpO1xuZnMvaGZzcGx1cy9icmVjLmMtOTUtXHRcdGlmIChJU19FUlIobm9kZSkpXG4tLVxuZnMvaGZzcGx1cy9icmVjLmMtMTY4LVx0XHR9XG5mcy9oZnNwbHVzL2JyZWMuYzoxNjk6XHRcdGZkLVx1MDAzZWJub2RlID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgbmV3X25vZGUtXHUwMDNlcGFyZW50KTtcbmZzL2hmc3BsdXMvYnJlYy5jLTE3MC1cbi0tXG5mcy9oZnNwbHVzL2JyZWMuYz0xOTc9aW50IGhmc19icmVjX3JlbW92ZShzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXG4tLVxuZnMvaGZzcGx1cy9icmVjLmMtMjI2LVx0XHRcdHJldHVybiAwO1xuZnMvaGZzcGx1cy9icmVjLmM6MjI3Olx0XHRwYXJlbnQgPSBoZnNfYm5vZGVfZmluZCh0cmVlLCBub2RlLVx1MDAzZXBhcmVudCk7XG5mcy9oZnNwbHVzL2JyZWMuYy0yMjgtXHRcdGlmIChJU19FUlIocGFyZW50KSlcbi0tXG5mcy9oZnNwbHVzL2JyZWMuYz0yNjA9c3RhdGljIHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibm9kZV9zcGxpdChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXG4tLVxuZnMvaGZzcGx1cy9icmVjLmMtMjg1LVx0aWYgKG5vZGUtXHUwMDNlbmV4dClcbmZzL2hmc3BsdXMvYnJlYy5jOjI4NjpcdFx0bmV4dF9ub2RlID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgbm9kZS1cdTAwM2VuZXh0KTtcbmZzL2hmc3BsdXMvYnJlYy5jLTI4Ny1cdGVsc2Vcbi0tXG5mcy9oZnNwbHVzL2JyZWMuYz0zODk9c3RhdGljIGludCBoZnNfYnJlY191cGRhdGVfcGFyZW50KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcbi0tXG5mcy9oZnNwbHVzL2JyZWMuYy00MDMtYWdhaW46XG5mcy9oZnNwbHVzL2JyZWMuYzo0MDQ6XHRwYXJlbnQgPSBoZnNfYm5vZGVfZmluZCh0cmVlLCBub2RlLVx1MDAzZXBhcmVudCk7XG5mcy9oZnNwbHVzL2JyZWMuYy00MDUtXHRpZiAoSVNfRVJSKHBhcmVudCkpXG4tLVxuZnMvaGZzcGx1cy9icmVjLmMtNDY4LVx0XHR9XG5mcy9oZnNwbHVzL2JyZWMuYzo0Njk6XHRcdGZkLVx1MDAzZWJub2RlID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgbmV3X25vZGUtXHUwMDNlcGFyZW50KTtcbmZzL2hmc3BsdXMvYnJlYy5jLTQ3MC1cdFx0LyogY3JlYXRlIGluZGV4IGtleSBhbmQgZW50cnkgKi9cbi0tXG5mcy9oZnNwbHVzL2JyZWMuYz00OTU9c3RhdGljIGludCBoZnNfYnRyZWVfaW5jX2hlaWdodChzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKVxuLS1cbmZzL2hmc3BsdXMvYnJlYy5jLTUwMy1cdGlmICh0cmVlLVx1MDAzZXJvb3QpIHtcbmZzL2hmc3BsdXMvYnJlYy5jOjUwNDpcdFx0bm9kZSA9IGhmc19ibm9kZV9maW5kKHRyZWUsIHRyZWUtXHUwMDNlcm9vdCk7XG5mcy9oZnNwbHVzL2JyZWMuYy01MDUtXHRcdGlmIChJU19FUlIobm9kZSkpXG4tLVxuZnMvaGZzcGx1cy9idHJlZS5jPTI2OD1zdHJ1Y3QgaGZzX2J0cmVlICpoZnNfYnRyZWVfb3BlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgaWQpXG4tLVxuZnMvaGZzcGx1cy9idHJlZS5jLTM4My1cbmZzL2hmc3BsdXMvYnRyZWUuYzozODQ6XHRub2RlID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgSEZTUExVU19UUkVFX0hFQUQpO1xuZnMvaGZzcGx1cy9idHJlZS5jLTM4NS1cdGlmIChJU19FUlIobm9kZSkpXG4tLVxuZnMvaGZzcGx1cy9idHJlZS5jPTQzNT1pbnQgaGZzX2J0cmVlX3dyaXRlKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUpXG4tLVxuZnMvaGZzcGx1cy9idHJlZS5jLTQ0MC1cbmZzL2hmc3BsdXMvYnRyZWUuYzo0NDE6XHRub2RlID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgMCk7XG5mcy9oZnNwbHVzL2J0cmVlLmMtNDQyLVx0aWYgKElTX0VSUihub2RlKSlcbi0tXG5mcy9oZnNwbHVzL2J0cmVlLmM9NTI4PXN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibWFwX2FsbG9jKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUpXG4tLVxuZnMvaGZzcGx1cy9idHJlZS5jLTU0My1cdG5pZHggPSAwO1xuZnMvaGZzcGx1cy9idHJlZS5jOjU0NDpcdG5vZGUgPSBoZnNfYm5vZGVfZmluZCh0cmVlLCBuaWR4KTtcbmZzL2hmc3BsdXMvYnRyZWUuYy01NDUtXHRpZiAoSVNfRVJSKG5vZGUpKVxuLS1cbmZzL2hmc3BsdXMvYnRyZWUuYy01OTItXHRcdH0gZWxzZVxuZnMvaGZzcGx1cy9idHJlZS5jOjU5MzpcdFx0XHRuZXh0X25vZGUgPSBoZnNfYm5vZGVfZmluZCh0cmVlLCBuaWR4KTtcbmZzL2hmc3BsdXMvYnRyZWUuYy01OTQtXHRcdGhmc19ibm9kZV9wdXQobm9kZSk7XG4tLVxuZnMvaGZzcGx1cy9idHJlZS5jPTYwOT12b2lkIGhmc19ibWFwX2ZyZWUoc3RydWN0IGhmc19ibm9kZSAqbm9kZSlcbi0tXG5mcy9oZnNwbHVzL2J0cmVlLmMtNjIwLVx0bmlkeCA9IG5vZGUtXHUwMDNldGhpcztcbmZzL2hmc3BsdXMvYnRyZWUuYzo2MjE6XHRub2RlID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgMCk7XG5mcy9oZnNwbHVzL2J0cmVlLmMtNjIyLVx0aWYgKElTX0VSUihub2RlKSlcbi0tXG5mcy9oZnNwbHVzL2J0cmVlLmMtNjM4LVx0XHRoZnNfYm5vZGVfcHV0KG5vZGUpO1xuZnMvaGZzcGx1cy9idHJlZS5jOjYzOTpcdFx0bm9kZSA9IGhmc19ibm9kZV9maW5kKHRyZWUsIGkpO1xuZnMvaGZzcGx1cy9idHJlZS5jLTY0MC1cdFx0aWYgKElTX0VSUihub2RlKSlcbi0tXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaD0yODA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBoZnNwbHVzX21pbl9pb19zaXplKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMzAyLSNkZWZpbmUgaGZzX2Jub2RlX3VubGluayBoZnNwbHVzX2Jub2RlX3VubGlua1xuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg6MzAzOiNkZWZpbmUgaGZzX2Jub2RlX2ZpbmRoYXNoIGhmc3BsdXNfYm5vZGVfZmluZGhhc2hcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oOjMwNDojZGVmaW5lIGhmc19ibm9kZV9maW5kIGhmc3BsdXNfYm5vZGVfZmluZFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMzA1LSNkZWZpbmUgaGZzX2Jub2RlX3VuaGFzaCBoZnNwbHVzX2Jub2RlX3VuaGFzaFxuLS1cbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oPTM4Mj12b2lkIGhmc19ibm9kZV91bmxpbmsoc3RydWN0IGhmc19ibm9kZSAqbm9kZSk7XG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaDozODM6c3RydWN0IGhmc19ibm9kZSAqaGZzX2Jub2RlX2ZpbmRoYXNoKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUsIHUzMiBjbmlkKTtcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTM4NC12b2lkIGhmc19ibm9kZV91bmhhc2goc3RydWN0IGhmc19ibm9kZSAqbm9kZSk7XG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaDozODU6c3RydWN0IGhmc19ibm9kZSAqaGZzX2Jub2RlX2ZpbmQoc3RydWN0IGhmc19idHJlZSAqdHJlZSwgdTMyIG51bSk7XG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC0zODYtdm9pZCBoZnNfYm5vZGVfZnJlZShzdHJ1Y3QgaGZzX2Jub2RlICpub2RlKTtcbi0tXG5mcy9oZnNwbHVzL2lub2RlLmM9NjI9c3RhdGljIGJvb2wgaGZzcGx1c19yZWxlYXNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IG1hc2spXG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jLTkxLVx0XHRzcGluX2xvY2soXHUwMDI2dHJlZS1cdTAwM2VoYXNoX2xvY2spO1xuZnMvaGZzcGx1cy9pbm9kZS5jOjkyOlx0XHRub2RlID0gaGZzX2Jub2RlX2ZpbmRoYXNoKHRyZWUsIG5pZHgpO1xuZnMvaGZzcGx1cy9pbm9kZS5jLTkzLVx0XHRpZiAoIW5vZGUpXG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jLTEwNy1cdFx0ZG8ge1xuZnMvaGZzcGx1cy9pbm9kZS5jOjEwODpcdFx0XHRub2RlID0gaGZzX2Jub2RlX2ZpbmRoYXNoKHRyZWUsIG5pZHgmIzQzOyYjNDM7KTtcbmZzL2hmc3BsdXMvaW5vZGUuYy0xMDktXHRcdFx0aWYgKCFub2RlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzYyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBPcHRpbWl6YXRpb24gVGFyZ2V0cyoqCgpPa2F5LCBzbyBgaGZzX2Jub2RlX2ZpbmRgIGlzIHByZXR0eSB1YmlxdWl0b3VzIHdpdGhpbiB0aGlzIGNvZGViYXNlLiBJdCYjMzk7cyB1c2VkIGFsbCBvdmVyIHRoZSBwbGFjZSwgd2hpY2ggbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIHBlcmZvcm1hbmNlIHR1bmluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gZnVuY3Rpb25zIHRoYXQgZGlyZWN0bHkgaW50ZXJhY3Qgd2l0aCB0aGF0LiBgX19oZnNfYnJlY19maW5kYCBhbmQgYGhmc19icmVjX2dvdG9gIGJvdGggc2VlbSBsaWtlIHN0cm9uZyBwb3NzaWJpbGl0aWVzIGZvciBvcHRpbWl6YXRpb24sIGdpdmVuIHRoZWlyIGxpa2VseSByZWxhdGlvbnNoaXAgd2l0aCB0aGUgY29yZSBzZWFyY2ggZnVuY3Rpb25hbGl0eS4gYGhmc19icmVjX3JlbW92ZWAgYWxzbyBjYXRjaGVzIG15IGV5ZSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhhdCwgZXZlbiB0aG91Z2ggaXQgbWF5IGhhdmUgbGVzcyBpbXBhY3Qgb24gZ2VuZXJhbCBzZWFyY2ggYW5kIGxvb2t1cC4gRm9yIG5vdywgbGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgaGZzX2JyZWNfcmVtb3ZlYCB0byBzZWUgd2hhdCBraW5kIG9mIGltcGFjdCBpdHMgb3B0aW1pemF0aW9uIG1heSBoYXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoZnNfYnJlY19yZW1vdmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9oZnNwbHVzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYz0zMDU9c3RhdGljIGludCBfX2hmc3BsdXNfZGVsZXRlX2F0dHIoc3RydWN0IGlub2RlICppbm9kZSwgdTMyIGNuaWQsXG4tLVxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmMtMzM4LVxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmM6MzM5Olx0ZXJyID0gaGZzX2JyZWNfcmVtb3ZlKGZkKTtcbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jLTM0MC1cdGlmIChlcnIpXG4tLVxuZnMvaGZzcGx1cy9icmVjLmM9ODE9aW50IGhmc19icmVjX2luc2VydChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIHZvaWQgKmVudHJ5LCB1MzIgZW50cnlfbGVuKVxuLS1cbmZzL2hmc3BsdXMvYnJlYy5jLTE5Ni1cbmZzL2hmc3BsdXMvYnJlYy5jOjE5NzppbnQgaGZzX2JyZWNfcmVtb3ZlKHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcbmZzL2hmc3BsdXMvYnJlYy5jLTE5OC17XG4tLVxuZnMvaGZzcGx1cy9jYXRhbG9nLmM9MjUzPWludCBoZnNwbHVzX2NyZWF0ZV9jYXQodTMyIGNuaWQsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL2hmc3BsdXMvY2F0YWxvZy5jLTMyNC1cdGlmICghaGZzX2JyZWNfZmluZChcdTAwMjZmZCwgaGZzX2ZpbmRfcmVjX2J5X2tleSkpXG5mcy9oZnNwbHVzL2NhdGFsb2cuYzozMjU6XHRcdGhmc19icmVjX3JlbW92ZShcdTAwMjZmZCk7XG5mcy9oZnNwbHVzL2NhdGFsb2cuYy0zMjYtZXJyMjpcbi0tXG5mcy9oZnNwbHVzL2NhdGFsb2cuYz0zMzE9aW50IGhmc3BsdXNfZGVsZXRlX2NhdCh1MzIgY25pZCwgc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpzdHIpXG4tLVxuZnMvaGZzcGx1cy9jYXRhbG9nLmMtMzkzLVxuZnMvaGZzcGx1cy9jYXRhbG9nLmM6Mzk0Olx0ZXJyID0gaGZzX2JyZWNfcmVtb3ZlKFx1MDAyNmZkKTtcbmZzL2hmc3BsdXMvY2F0YWxvZy5jLTM5NS1cdGlmIChlcnIpXG4tLVxuZnMvaGZzcGx1cy9jYXRhbG9nLmMtNDAyLVxuZnMvaGZzcGx1cy9jYXRhbG9nLmM6NDAzOlx0ZXJyID0gaGZzX2JyZWNfcmVtb3ZlKFx1MDAyNmZkKTtcbmZzL2hmc3BsdXMvY2F0YWxvZy5jLTQwNC1cdGlmIChlcnIpXG4tLVxuZnMvaGZzcGx1cy9jYXRhbG9nLmM9NDI1PWludCBoZnNwbHVzX3JlbmFtZV9jYXQodTMyIGNuaWQsXG4tLVxuZnMvaGZzcGx1cy9jYXRhbG9nLmMtNDk4LVx0XHRnb3RvIG91dDtcbmZzL2hmc3BsdXMvY2F0YWxvZy5jOjQ5OTpcdGVyciA9IGhmc19icmVjX3JlbW92ZShcdTAwMjZzcmNfZmQpO1xuZnMvaGZzcGx1cy9jYXRhbG9nLmMtNTAwLVx0aWYgKGVycilcbi0tXG5mcy9oZnNwbHVzL2NhdGFsb2cuYy01MTItXHR0eXBlID0gaGZzX2Jub2RlX3JlYWRfdTE2KHNyY19mZC5ibm9kZSwgc3JjX2ZkLmVudHJ5b2Zmc2V0KTtcbmZzL2hmc3BsdXMvY2F0YWxvZy5jOjUxMzpcdGVyciA9IGhmc19icmVjX3JlbW92ZShcdTAwMjZzcmNfZmQpO1xuZnMvaGZzcGx1cy9jYXRhbG9nLmMtNTE0LVx0aWYgKGVycilcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYz0zOTM9aW50IGhmc3BsdXNfZnJlZV9mb3JrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBjbmlkLFxuLS1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTQyMy1cdFx0c3RhcnQgPSBiZTMyX3RvX2NwdShmZC5rZXktXHUwMDNlZXh0LnN0YXJ0X2Jsb2NrKTtcbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjQyNDpcdFx0aGZzX2JyZWNfcmVtb3ZlKFx1MDAyNmZkKTtcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTQyNS1cbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYz01NDQ9dm9pZCBoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYy02MDYtXHRcdGlmIChibGtfY250IFx1MDAzYz0gc3RhcnQpXG5mcy9oZnNwbHVzL2V4dGVudHMuYzo2MDc6XHRcdFx0aGZzX2JyZWNfcmVtb3ZlKFx1MDAyNmZkKTtcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTYwOC1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmZkLnRyZWUtXHUwMDNldHJlZV9sb2NrKTtcbi0tXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaD0yODA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBoZnNwbHVzX21pbl9pb19zaXplKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMzEyLSNkZWZpbmUgaGZzX2JyZWNfaW5zZXJ0IGhmc3BsdXNfYnJlY19pbnNlcnRcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oOjMxMzojZGVmaW5lIGhmc19icmVjX3JlbW92ZSBoZnNwbHVzX2JyZWNfcmVtb3ZlXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC0zMTQtI2RlZmluZSBoZnNfZmluZF9pbml0IGhmc3BsdXNfZmluZF9pbml0XG4tLVxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg9Mzk1PWludCBoZnNfYnJlY19pbnNlcnQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLCB2b2lkICplbnRyeSwgdTMyIGVudHJ5X2xlbik7XG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaDozOTY6aW50IGhmc19icmVjX3JlbW92ZShzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpO1xuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMzk3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI0NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgUG90ZW50aWFsOiBoZnNfYnJlY19yZW1vdmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBoZnNfYnJlY19yZW1vdmVgIGFuZCB0aGlua2luZyBhYm91dCBpdHMgcG90ZW50aWFsIGZvciBmdXp6aW5nLiBJJiMzOTt2ZSBub3RpY2VkIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGEgc2lnbmlmaWNhbnQgbnVtYmVyIG9mIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIEhGUyYjNDM7IGNvZGU6IGBfX2hmc3BsdXNfZGVsZXRlX2F0dHJgLCB0aGUgZXJyb3IgcGF0aHMgaW4gYGhmc3BsdXNfY3JlYXRlX2NhdGAsIGBoZnNwbHVzX2RlbGV0ZV9jYXRgLCBgaGZzcGx1c19yZW5hbWVfY2F0YCwgYGhmc3BsdXNfZnJlZV9mb3JrYCwgYW5kIGBoZnNwbHVzX2ZpbGVfdHJ1bmNhdGVgLiBUaGF0JiMzOTtzIGEgcHJldHR5IGRpdmVyc2Ugc2V0IG9mIGNvbnRleHRzLCB3aGljaCBzdWdnZXN0cyBpdCBpbnRlcmFjdHMgd2l0aCBhIGxvdCBvZiBkaWZmZXJlbnQgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBsb2dpYyBwYXRocy4gVGhpcyBtYWtlcyBpdCBhIHByaW1lIGNhbmRpZGF0ZSwgaW4gbXkgdmlldywgYmVjYXVzZSBmdXp6aW5nIGl0IGlzIGxpa2VseSB0byBleHBvc2UgYSByYW5nZSBvZiB2dWxuZXJhYmlsaXRpZXMuCgpOb3csIGxldCYjMzk7cyB0dXJuIG91ciBhdHRlbnRpb24gdG8gaXRzIGNvbXBhbmlvbiBmdW5jdGlvbiwgYF9faGZzX2JyZWNfZmluZGAuIEkmIzM5O20gY3VyaW91cyB0byBzZWUgaG93IGl0IHdvcmtzIGFuZCBjb25zaWRlciB3aGV0aGVyIHRoYXQgZnVuY3Rpb24gaXMgYW5vdGhlciBnb29kIHRhcmdldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTE6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19oZnNfYnJlY19maW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy9iZmluZC5jPTgxPWludCBoZnNfZmluZF9yZWNfYnlfa2V5KHN0cnVjdCBoZnNfYm5vZGUgKmJub2RlLFxuLS1cbmZzL2hmc3BsdXMvYmZpbmQuYy0xMDItLyogRmluZCB0aGUgcmVjb3JkIGluIGJub2RlIHRoYXQgYmVzdCBtYXRjaGVzIGtleSAobm90IGdyZWF0ZXIgdGhhbi4uLikqL1xuZnMvaGZzcGx1cy9iZmluZC5jOjEwMzppbnQgX19oZnNfYnJlY19maW5kKHN0cnVjdCBoZnNfYm5vZGUgKmJub2RlLCBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsXG5mcy9oZnNwbHVzL2JmaW5kLmMtMTA0LVx0XHRcdFx0XHRzZWFyY2hfc3RyYXRlZ3lfdCByZWNfZm91bmQpXG4tLVxuZnMvaGZzcGx1cy9iZmluZC5jPTE1NT1pbnQgaGZzX2JyZWNfZmluZChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIHNlYXJjaF9zdHJhdGVneV90IGRvX2tleV9jb21wYXJlKVxuLS1cbmZzL2hmc3BsdXMvYmZpbmQuYy0xOTEtXG5mcy9oZnNwbHVzL2JmaW5kLmM6MTkyOlx0XHRyZXMgPSBfX2hmc19icmVjX2ZpbmQoYm5vZGUsIGZkLCBkb19rZXlfY29tcGFyZSk7XG5mcy9oZnNwbHVzL2JmaW5kLmMtMTkzLVx0XHRpZiAoIWhlaWdodClcbi0tXG5mcy9oZnNwbHVzL2JyZWMuYz04MT1pbnQgaGZzX2JyZWNfaW5zZXJ0KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgdm9pZCAqZW50cnksIHUzMiBlbnRyeV9sZW4pXG4tLVxuZnMvaGZzcGx1cy9icmVjLmMtMTc3LVx0XHRoZnNfYm5vZGVfcmVhZF9rZXkobmV3X25vZGUsIGZkLVx1MDAzZXNlYXJjaF9rZXksIDE0KTtcbmZzL2hmc3BsdXMvYnJlYy5jOjE3ODpcdFx0X19oZnNfYnJlY19maW5kKGZkLVx1MDAzZWJub2RlLCBmZCwgaGZzX2ZpbmRfcmVjX2J5X2tleSk7XG5mcy9oZnNwbHVzL2JyZWMuYy0xNzktXG4tLVxuZnMvaGZzcGx1cy9icmVjLmM9MTk3PWludCBoZnNfYnJlY19yZW1vdmUoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxuLS1cbmZzL2hmc3BsdXMvYnJlYy5jLTIzMi1cbmZzL2hmc3BsdXMvYnJlYy5jOjIzMzpcdFx0X19oZnNfYnJlY19maW5kKG5vZGUsIGZkLCBoZnNfZmluZF9yZWNfYnlfa2V5KTtcbmZzL2hmc3BsdXMvYnJlYy5jLTIzNC1cdFx0Z290byBhZ2Fpbjtcbi0tXG5mcy9oZnNwbHVzL2JyZWMuYz0zODk9c3RhdGljIGludCBoZnNfYnJlY191cGRhdGVfcGFyZW50KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcbi0tXG5mcy9oZnNwbHVzL2JyZWMuYy00MDYtXHRcdHJldHVybiBQVFJfRVJSKHBhcmVudCk7XG5mcy9oZnNwbHVzL2JyZWMuYzo0MDc6XHRfX2hmc19icmVjX2ZpbmQocGFyZW50LCBmZCwgaGZzX2ZpbmRfcmVjX2J5X2tleSk7XG5mcy9oZnNwbHVzL2JyZWMuYy00MDgtXHRpZiAoZmQtXHUwMDNlcmVjb3JkIFx1MDAzYyAwKVxuLS1cbmZzL2hmc3BsdXMvYnJlYy5jLTQ3My1cbmZzL2hmc3BsdXMvYnJlYy5jOjQ3NDpcdFx0X19oZnNfYnJlY19maW5kKGZkLVx1MDAzZWJub2RlLCBmZCwgaGZzX2ZpbmRfcmVjX2J5X2tleSk7XG5mcy9oZnNwbHVzL2JyZWMuYy00NzUtXHRcdGhmc19icmVjX2luc2VydChmZCwgXHUwMDI2Y25pZCwgc2l6ZW9mKGNuaWQpKTtcbi0tXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaD0yODA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBoZnNwbHVzX21pbl9pb19zaXplKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMzE1LSNkZWZpbmUgaGZzX2ZpbmRfZXhpdCBoZnNwbHVzX2ZpbmRfZXhpdFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg6MzE2OiNkZWZpbmUgX19oZnNfYnJlY19maW5kIF9faGZzcGx1c19icmVjX2ZpbmRcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTMxNy0jZGVmaW5lIGhmc19icmVjX2ZpbmQgaGZzcGx1c19icmVjX2ZpbmRcbi0tXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaD00MDM9aW50IGhmc19maW5kX3JlY19ieV9rZXkoc3RydWN0IGhmc19ibm9kZSAqYm5vZGUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCxcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTQwNC1cdFx0XHRpbnQgKmJlZ2luLCBpbnQgKmVuZCwgaW50ICpjdXJfcmVjKTtcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oOjQwNTppbnQgX19oZnNfYnJlY19maW5kKHN0cnVjdCBoZnNfYm5vZGUgKmJub2RlLCBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC00MDYtXHRcdCAgICBzZWFyY2hfc3RyYXRlZ3lfdCByZWNfZm91bmQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzY4NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nOgoKKipBbmFseXppbmcgQ29yZSBIRlMgQi1UcmVlIEZ1bmN0aW9uYWxpdHkqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhpcyBgX19oZnNfYnJlY19maW5kYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXRzIHdpZGVzcHJlYWQgdXNlIHN1Z2dlc3RzIGl0JiMzOTtzIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIEhGUyBCLXRyZWUgcHV6emxlLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGNhbGxlZCB3aXRoaW4gYGhmc19icmVjX2ZpbmRgIGl0c2VsZiwgYnV0IGFsc28gaW4gYGhmc19icmVjX2luc2VydGAsIGBoZnNfYnJlY19yZW1vdmVgLCBhbmQgZXZlbiBgaGZzX2JyZWNfdXBkYXRlX3BhcmVudGAuLi4gd2VsbCwgdGhhdCYjMzk7cyBhIHByZXR0eSBzdHJvbmcgaW5kaWNhdG9yIG9mIGEgY29yZSBmdW5jdGlvbi4gSXQmIzM5O3MgZXNzZW50aWFsbHkgdGhlIGZvdW5kYXRpb24uIFdlIGNhbiBleHBlY3QgdGhpcyB0byBiZSBhIGtleSBlbGVtZW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgQi1UcmVlJiMzOTtzIGZ1bmRhbWVudGFsIHRhc2tzIGFyZSBpbXBsZW1lbnRlZC4KCkdpdmVuIGl0cyBwZXJ2YXNpdmUgbmF0dXJlLCBJIHRoaW5rIHdlIHNob3VsZCBjaGVjayBgaGZzX2JyZWNfZ290b2AuIEl0IGlzIGFsd2F5cyBhIGdvb2QgaWRlYSB0byBjcm9zcy1yZWZlcmVuY2UgcmVsYXRlZCBjb21wb25lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoZnNfYnJlY19nb3RvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy9iZmluZC5jPTIxNT1pbnQgaGZzX2JyZWNfcmVhZChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIHZvaWQgKnJlYywgdTMyIHJlY19sZW4pXG4tLVxuZnMvaGZzcGx1cy9iZmluZC5jLTIyNy1cbmZzL2hmc3BsdXMvYmZpbmQuYzoyMjg6aW50IGhmc19icmVjX2dvdG8oc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLCBpbnQgY250KVxuZnMvaGZzcGx1cy9iZmluZC5jLTIyOS17XG4tLVxuZnMvaGZzcGx1cy9kaXIuYz0xMzA9c3RhdGljIGludCBoZnNwbHVzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KVxuLS1cbmZzL2hmc3BsdXMvZGlyLmMtMTkyLVx0XHRpZiAoZXJyID09IC1FTk9FTlQpXG5mcy9oZnNwbHVzL2Rpci5jOjE5MzpcdFx0XHRlcnIgPSBoZnNfYnJlY19nb3RvKFx1MDAyNmZkLCAxKTtcbmZzL2hmc3BsdXMvZGlyLmMtMTk0LVx0fSBlbHNlIHtcbmZzL2hmc3BsdXMvZGlyLmM6MTk1Olx0XHRlcnIgPSBoZnNfYnJlY19nb3RvKFx1MDAyNmZkLCBjdHgtXHUwMDNlcG9zIC0gMSk7XG5mcy9oZnNwbHVzL2Rpci5jLTE5Ni1cdH1cbi0tXG5mcy9oZnNwbHVzL2Rpci5jLTI2Ny1cdFx0XHRnb3RvIG91dDtcbmZzL2hmc3BsdXMvZGlyLmM6MjY4Olx0XHRlcnIgPSBoZnNfYnJlY19nb3RvKFx1MDAyNmZkLCAxKTtcbmZzL2hmc3BsdXMvZGlyLmMtMjY5LVx0XHRpZiAoZXJyKVxuLS1cbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oPTI4MD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGhmc3BsdXNfbWluX2lvX3NpemUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC0zMTgtI2RlZmluZSBoZnNfYnJlY19yZWFkIGhmc3BsdXNfYnJlY19yZWFkXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaDozMTk6I2RlZmluZSBoZnNfYnJlY19nb3RvIGhmc3BsdXNfYnJlY19nb3RvXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC0zMjAtI2RlZmluZSBoZnNfcGFydF9maW5kIGhmc3BsdXNfcGFydF9maW5kXG4tLVxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg9NDA4PWludCBoZnNfYnJlY19yZWFkKHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgdm9pZCAqcmVjLCB1MzIgcmVjX2xlbik7XG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaDo0MDk6aW50IGhmc19icmVjX2dvdG8oc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLCBpbnQgY250KTtcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTQxMC1cbi0tXG5mcy9oZnNwbHVzL3hhdHRyLmM9ODAyPXNzaXplX3QgaGZzcGx1c19saXN0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKVxuLS1cbmZzL2hmc3BsdXMveGF0dHIuYy04OTEtXG5mcy9oZnNwbHVzL3hhdHRyLmM6ODkyOlx0XHRpZiAoaGZzX2JyZWNfZ290byhcdTAwMjZmZCwgMSkpXG5mcy9oZnNwbHVzL3hhdHRyLmMtODkzLVx0XHRcdGdvdG8gZW5kX2xpc3R4YXR0cjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTE6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3NDUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA3NDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgSEZTJiM0MzsgQi1UcmVlIE5vZGUgRnVuY3Rpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBgaGZzX2JyZWNfZ290b2AgbG9va2VkIHByb21pc2luZywgYW5kIGl0JiMzOTtzIHVzZWQgd2l0aGluIGBoZnNwbHVzX3JlYWRkaXJgIGFuZCBgaGZzcGx1c19saXN0eGF0dHJgLCBzbyBpdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgY29uc2lkZXJlZCBleHBhbmRpbmcgdGhlIGZvY3VzIHRvIGluY2x1ZGUgYGhmc19icmVjX3JlbW92ZWAgYW5kIGBfX2hmc19icmVjX2ZpbmRgIGFzIHdlbGwuCgpJIHRoZW4gc3RhcnRlZCB0byBldmFsdWF0ZSBjYW5kaWRhdGVzIGFuZCBxdWlja2x5IHJlYWxpemVkIHRoZSBpbXBvcnRhbmNlIG9mIGNoZWNraW5nIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgKm1vZGlmaWVkKiwgcGFydGljdWxhcmx5IGFyb3VuZCBgYm5vZGUtJmd0O251bV9yZWNzYCBvciBpdHMgdmFsaWRpdHkuIFR1cm5zIG91dCwgc2V2ZXJhbCBmdW5jdGlvbnMgYXJlIG1vZGlmaWVkOiBgX19oZnNfYnJlY19maW5kYCwgYGhmc19icmVjX2dvdG9gLCBgaGZzX2Jub2RlX2R1bXBgLCBgaGZzX2Jub2RlX2ZpbmRgLCBgaGZzX2JyZWNfbGVub2ZmYCwgYGhmc19icmVjX2tleWxlbmAsIGFuZCBgaGZzX2JyZWNfcmVtb3ZlYC4KCk5vdywgY29uc2lkZXJpbmcgcGVyZm9ybWFuY2UsIGBoZnNfYnJlY19sZW5vZmZgLCBgaGZzX2JyZWNfa2V5bGVuYCwgYW5kIGBoZnNfYm5vZGVfZmluZGAgYXJlIG9uIHRoZSBob3QgcGF0aCwgYW5kIGJvdGggYF9faGZzX2JyZWNfZmluZGAgYW5kIGBoZnNfYnJlY19nb3RvYCBhcmUgc3RpbGwgZnJlcXVlbnRseSBjYWxsZWQuIGBoZnNfYnJlY19yZW1vdmVgLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgZGVmaW5pdGVseSBsZXNzIHBlcmZvcm1hbmNlIGNyaXRpY2FsLgoKRm9jdXNpbmcgaW4gb24gZnVuY3Rpb24gY29udGV4dCwgYGhmc19icmVjX2dvdG9gIGlzIHVzZWQgZm9yIGByZWFkZGlyYCBhbmQgYGxpc3R4YXR0cmAgY2FsbHMsIHdoaWxlIGBoZnNfYnJlY19yZW1vdmVgIGlzIHRpZWQgdG8gZmlsZSBkZWxldGlvbiwgcmVuYW1lLCBhbmQgdHJ1bmNhdGUgb3BlcmF0aW9ucy4KCkFmdGVyIGV2YWx1YXRpbmcgdGhlc2UgZmFjdG9ycywgSSYjMzk7bSBsZWFuaW5nIHRvd2FyZCBzZWxlY3RpbmcgYGhmc19icmVjX3JlbW92ZWAsIGBoZnNfYnJlY19nb3RvYCwgYW5kIGBfX2hmc19icmVjX2ZpbmRgIGFzIHRoZSBwcmltYXJ5IGZvY3VzIGZ1bmN0aW9ucy4KCkkgbmVlZCB0byBjb25maXJtIG15IHNlbGVjdGlvbiBieSBjaGVja2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gZW5zdXJlIEkmIzM5O20gbm90IG92ZXJsb29raW5nIGFueSByZWxldmFudCBmbGFncy4gTG9va3MgbGlrZSBgSEZTUExVU19GU2AgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIGhlcmUsIGJ1dCBhIGRvdWJsZS1jaGVjayBvZiBgZnMvaGZzcGx1cy9LY29uZmlnYCBpcyBhbHdheXMgYSBnb29kIGlkZWEuIEkgd2lsbCBpbmNsdWRlIHRoZSBhbmFseXNpcyBvZiBgaGZzX2Jub2RlX2ZpbmRgIGluIG15IG1lbnRhbCBtb2RlbCwgYXMgaXQgaXMgYSBmdW5kYW1lbnRhbCBibm9kZSByZWFkLiBCdXQgbXkgcHJpbWFyeSBnb2FsIGlzIHRoZSBvdGhlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIRlNQTFVTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvaGZzcGx1cy9LY29uZmlnOjI6Y29uZmlnIEhGU1BMVVNfRlNcbmZzL2hmc3BsdXMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7QXBwbGUgRXh0ZW5kZWQgSEZTIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9oZnNwbHVzL0tjb25maWctMTctXG5mcy9oZnNwbHVzL0tjb25maWc6MTg6Y29uZmlnIEhGU1BMVVNfS1VOSVRfVEVTVFxuZnMvaGZzcGx1cy9LY29uZmlnLTE5LVx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIEhGUyYjNDM7IGZpbGVzeXN0ZW1cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjE3MQoJCQkJCQkJb3V0cHV0OiAxNjcKCQkJCQkJCXRob3VnaHRzOiAxNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSEZTJiM0MzsgQi1UcmVlIE5vZGUgVmFsaWRhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGxhc2VyLWZvY3VzZWQuIEFmdGVyIHJldmlld2luZyB0aGUgZGV0YWlscywgaXQmIzM5O3MgY2xlYXIgdGhlIGNvcmUgY29uY2VybiBpcyB0aGUgYG51bV9yZWNzYCB2YWxpZGF0aW9uIHdpdGhpbiBIRlMmIzQzOyBiLXRyZWUgbm9kZXMuIFRoZSBjaGFuZ2VzIGFyZSBhbGwgYWJvdXQgaGFyZGVuaW5nIHRob3NlIGZvdW5kYXRpb25hbCBiLXRyZWUgb3BlcmF0aW9uczogZmluZGluZyByZWNvcmRzLCByZW1vdmluZyB0aGVtLCBhbmQgaXRlcmF0aW5nLiBUaGlzIGhhcyBhIGRpcmVjdCBpbXBhY3Qgb24gcmVhY2hhYmxlIGZpbGVzeXN0ZW0gbG9naWMsIHRoaW5ncyBsaWtlIGRpcmVjdG9yeSB0cmF2ZXJzYWwsIGZpbGUgZGVsZXRpb24sIGFuZCBoYW5kbGluZyBhdHRyaWJ1dGVzLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBwcmlvcml0aXplIG15IGZ1enppbmcgZWZmb3J0cyBhcm91bmQgdGhlc2UgYXJlYXMuCgpCYXNlZCBvbiB0aGUgY29udGV4dCwgdGhlcmUmIzM5O3Mgbm8gbmVlZCB0byBjb25zaWRlciBhbnl0aGluZyBiZXlvbmQgdGhlIGBIRlNQTFVTX0ZTYCBjb25maWcgZm9yIHRlc3RpbmcgcHVycG9zZXMuIEl0IHNlZW1zIHRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIGxvZ2ljIG9mIHRoYXQgZmlsZXN5c3RlbS4KClRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIGFyZSBgaGZzX2JyZWNfcmVtb3ZlYCwgYGhmc19icmVjX2dvdG9gLCBhbmQgYF9faGZzX2JyZWNfZmluZGAuIFRoZXNlIGFyZSB0aGUga2V5IGVudHJ5IHBvaW50cyB3aGVyZSB0aGUgbmV3IGBudW1fcmVjc2AgdmFsaWRhdGlvbiBnZXRzIGV4ZXJjaXNlZC4gQW55IHRlc3QgY2FzZXMgZ2VuZXJhdGVkIHNob3VsZCBiZSBkZXNpZ25lZCB0byBpbnRlbnRpb25hbGx5IGNyZWF0ZSBtYWxmb3JtZWQgYi10cmVlIG5vZGVzLCBwdXNoaW5nIHRoZSB2YWxpZGF0aW9uIHRvIGl0cyBsaW1pdHMgYW5kIGVuc3VyaW5nIGl0IGNvcnJlY3RseSByZWplY3RzIHByb2JsZW1hdGljIHN0cnVjdHVyZXMgd2l0aG91dCBjYXVzaW5nIHBhbmljcyBvciByZWdyZXNzaW9ucy4gSSYjMzk7bSBnb2luZyB0byBzZXQgdXAgZnV6emluZyB0byB0YXJnZXQgdGhlc2Ugc3ltYm9scyBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIRlNQTFVTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aGZzX2JyZWNfcmVtb3ZlJiMzNDssCiAgICAmIzM0O2hmc19icmVjX2dvdG8mIzM0OywKICAgICYjMzQ7X19oZnNfYnJlY19maW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBmb3IgYG51bV9yZWNzYCBpbiBIRlMmIzQzOyBiLXRyZWUgbm9kZXMgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIGFjY2VzcyBhbmQgb3RoZXIgaXNzdWVzLiBJdCBtb2RpZmllcyBjb3JlIGItdHJlZSBvcGVyYXRpb25zIGxpa2UgZmluZGluZywgcmVtb3ZpbmcsIGFuZCBpdGVyYXRpbmcgb3ZlciByZWNvcmRzLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCBhZmZlY3QgcmVhY2hhYmxlIGZpbGVzeXN0ZW0gbG9naWMsIHBhcnRpY3VsYXJseSBkdXJpbmcgZGlyZWN0b3J5IHRyYXZlcnNhbCwgZmlsZSBkZWxldGlvbiwgYW5kIGF0dHJpYnV0ZSBvcGVyYXRpb25zLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBvcGVyYXRpb25zIHRvIGVuc3VyZSB0aGUgbmV3IHZhbGlkYXRpb24gbG9naWMgY29ycmVjdGx5IGhhbmRsZXMgbWFsZm9ybWVkIGItdHJlZSBub2RlcyB3aXRob3V0IGNhdXNpbmcgcmVncmVzc2lvbnMgb3IgcGFuaWNzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIRlNQTFVTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aGZzX2JyZWNfcmVtb3ZlJiMzNDssCiAgICAmIzM0O2hmc19icmVjX2dvdG8mIzM0OywKICAgICYjMzQ7X19oZnNfYnJlY19maW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBmb3IgYG51bV9yZWNzYCBpbiBIRlMmIzQzOyBiLXRyZWUgbm9kZXMgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIGFjY2VzcyBhbmQgb3RoZXIgaXNzdWVzLiBJdCBtb2RpZmllcyBjb3JlIGItdHJlZSBvcGVyYXRpb25zIGxpa2UgZmluZGluZywgcmVtb3ZpbmcsIGFuZCBpdGVyYXRpbmcgb3ZlciByZWNvcmRzLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCBhZmZlY3QgcmVhY2hhYmxlIGZpbGVzeXN0ZW0gbG9naWMsIHBhcnRpY3VsYXJseSBkdXJpbmcgZGlyZWN0b3J5IHRyYXZlcnNhbCwgZmlsZSBkZWxldGlvbiwgYW5kIGF0dHJpYnV0ZSBvcGVyYXRpb25zLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBvcGVyYXRpb25zIHRvIGVuc3VyZSB0aGUgbmV3IHZhbGlkYXRpb24gbG9naWMgY29ycmVjdGx5IGhhbmRsZXMgbWFsZm9ybWVkIGItdHJlZSBub2RlcyB3aXRob3V0IGNhdXNpbmcgcmVncmVzc2lvbnMgb3IgcGFuaWNzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDFUMTE6MDU6MzIuNTA2Nzk4ODQ4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyMDkzNDg0NTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhGU1BMVVNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoZnNfYnJlY19yZW1vdmVcIixcbiAgICBcImhmc19icmVjX2dvdG9cIixcbiAgICBcIl9faGZzX2JyZWNfZmluZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBmb3IgYG51bV9yZWNzYCBpbiBIRlMrIGItdHJlZSBub2RlcyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzIGFuZCBvdGhlciBpc3N1ZXMuIEl0IG1vZGlmaWVzIGNvcmUgYi10cmVlIG9wZXJhdGlvbnMgbGlrZSBmaW5kaW5nLCByZW1vdmluZywgYW5kIGl0ZXJhdGluZyBvdmVyIHJlY29yZHMuIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIGFmZmVjdCByZWFjaGFibGUgZmlsZXN5c3RlbSBsb2dpYywgcGFydGljdWxhcmx5IGR1cmluZyBkaXJlY3RvcnkgdHJhdmVyc2FsLCBmaWxlIGRlbGV0aW9uLCBhbmQgYXR0cmlidXRlIG9wZXJhdGlvbnMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIG9wZXJhdGlvbnMgdG8gZW5zdXJlIHRoZSBuZXcgdmFsaWRhdGlvbiBsb2dpYyBjb3JyZWN0bHkgaGFuZGxlcyBtYWxmb3JtZWQgYi10cmVlIG5vZGVzIHdpdGhvdXQgY2F1c2luZyByZWdyZXNzaW9ucyBvciBwYW5pY3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDExOjA1OjMyLjUwNjgwNTE2OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDAwNjczNjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYWFlNTdiNjRkMDJiNjNmMDYzNjZlYjM4MmFkNWUwMWNjZjk0YjlhNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCAxIDExOjA1OjMxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvYmZpbmQuYyBiL2ZzL2hmc3BsdXMvYmZpbmQuY1xcbmluZGV4IDlhNTVmYTZkNTI5NDI5Li5hY2U5YmEwMjdhOWRiNCAxMDA2NDRcXG4tLS0gYS9mcy9oZnNwbHVzL2JmaW5kLmNcXG4rKysgYi9mcy9oZnNwbHVzL2JmaW5kLmNcXG5AQCAtMTEyLDExICsxMTIsMTMgQEAgaW50IF9faGZzX2JyZWNfZmluZChzdHJ1Y3QgaGZzX2Jub2RlICpibm9kZSwgc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLFxcbiBcXHRiID0gMDtcXG4gXFx0ZSA9IGJub2RlLVxcdTAwM2VudW1fcmVjcyAtIDE7XFxuIFxcdHJlcyA9IC1FTk9FTlQ7XFxuK1xcdGlmICghYm5vZGUtXFx1MDAzZW51bV9yZWNzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbiBcXHRkbyB7XFxuIFxcdFxcdHJlYyA9IChlICsgYikgLyAyO1xcbiBcXHRcXHRsZW4gPSBoZnNfYnJlY19sZW5vZmYoYm5vZGUsIHJlYywgXFx1MDAyNm9mZik7XFxuIFxcdFxcdGtleWxlbiA9IGhmc19icmVjX2tleWxlbihibm9kZSwgcmVjKTtcXG4tXFx0XFx0aWYgKGtleWxlbiA9PSAwKSB7XFxuK1xcdFxcdGlmICgha2V5bGVuIHx8IGtleWxlbiBcXHUwMDNlPSBsZW4pIHtcXG4gXFx0XFx0XFx0cmVzID0gLUVJTlZBTDtcXG4gXFx0XFx0XFx0Z290byBmYWlsO1xcbiBcXHRcXHR9XFxuQEAgLTEzMCw3ICsxMzIsNyBAQCBpbnQgX19oZnNfYnJlY19maW5kKHN0cnVjdCBoZnNfYm5vZGUgKmJub2RlLCBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsXFxuIFxcdGlmIChyZWMgIT0gZSBcXHUwMDI2XFx1MDAyNiBlIFxcdTAwM2U9IDApIHtcXG4gXFx0XFx0bGVuID0gaGZzX2JyZWNfbGVub2ZmKGJub2RlLCBlLCBcXHUwMDI2b2ZmKTtcXG4gXFx0XFx0a2V5bGVuID0gaGZzX2JyZWNfa2V5bGVuKGJub2RlLCBlKTtcXG4tXFx0XFx0aWYgKGtleWxlbiA9PSAwKSB7XFxuK1xcdFxcdGlmICgha2V5bGVuIHx8IGtleWxlbiBcXHUwMDNlPSBsZW4pIHtcXG4gXFx0XFx0XFx0cmVzID0gLUVJTlZBTDtcXG4gXFx0XFx0XFx0Z290byBmYWlsO1xcbiBcXHRcXHR9XFxuQEAgLTIzMiw2ICsyMzQsMTAgQEAgaW50IGhmc19icmVjX2dvdG8oc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLCBpbnQgY250KVxcbiBcXG4gXFx0Ym5vZGUgPSBmZC1cXHUwMDNlYm5vZGU7XFxuIFxcdHRyZWUgPSBibm9kZS1cXHUwMDNldHJlZTtcXG4rXFx0aWYgKCFibm9kZS1cXHUwMDNlbnVtX3JlY3MpIHtcXG4rXFx0XFx0cmVzID0gLUVOT0VOVDtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4gXFxuIFxcdGlmIChjbnQgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdGNudCA9IC1jbnQ7XFxuQEAgLTI3NCw3ICsyODAsNyBAQCBpbnQgaGZzX2JyZWNfZ290byhzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIGludCBjbnQpXFxuIFxcbiBcXHRsZW4gPSBoZnNfYnJlY19sZW5vZmYoYm5vZGUsIGZkLVxcdTAwM2VyZWNvcmQsIFxcdTAwMjZvZmYpO1xcbiBcXHRrZXlsZW4gPSBoZnNfYnJlY19rZXlsZW4oYm5vZGUsIGZkLVxcdTAwM2VyZWNvcmQpO1xcbi1cXHRpZiAoa2V5bGVuID09IDApIHtcXG4rXFx0aWYgKCFrZXlsZW4gfHwga2V5bGVuIFxcdTAwM2U9IGxlbikge1xcbiBcXHRcXHRyZXMgPSAtRUlOVkFMO1xcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2Jub2RlLmMgYi9mcy9oZnNwbHVzL2Jub2RlLmNcXG5pbmRleCBkMDg4ZmI3ZWIwZGZhMy4uZGY0MDZmNzVhNWIzMjMgMTAwNjQ0XFxuLS0tIGEvZnMvaGZzcGx1cy9ibm9kZS5jXFxuKysrIGIvZnMvaGZzcGx1cy9ibm9kZS5jXFxuQEAgLTM1MiwxNSArMzUyLDIyIEBAIHZvaWQgaGZzX2Jub2RlX2R1bXAoc3RydWN0IGhmc19ibm9kZSAqbm9kZSlcXG4gXFx0c3RydWN0IGhmc19ibm9kZV9kZXNjIGRlc2M7XFxuIFxcdF9fYmUzMiBjbmlkO1xcbiBcXHRpbnQgaSwgb2ZmLCBrZXlfb2ZmO1xcbitcXHR1MTYgbnVtX3JlY3M7XFxuIFxcbiBcXHRoZnNfZGJnKFxcXCJub2RlICVkXFxcXG5cXFwiLCBub2RlLVxcdTAwM2V0aGlzKTtcXG4gXFx0aGZzX2Jub2RlX3JlYWQobm9kZSwgXFx1MDAyNmRlc2MsIDAsIHNpemVvZihkZXNjKSk7XFxuK1xcdG51bV9yZWNzID0gYmUxNl90b19jcHUoZGVzYy5udW1fcmVjcyk7XFxuIFxcdGhmc19kYmcoXFxcIm5leHQgJWQsIHByZXYgJWQsIHR5cGUgJWQsIGhlaWdodCAlZCwgbnVtX3JlY3MgJWRcXFxcblxcXCIsXFxuIFxcdFxcdGJlMzJfdG9fY3B1KGRlc2MubmV4dCksIGJlMzJfdG9fY3B1KGRlc2MucHJldiksXFxuLVxcdFxcdGRlc2MudHlwZSwgZGVzYy5oZWlnaHQsIGJlMTZfdG9fY3B1KGRlc2MubnVtX3JlY3MpKTtcXG4rXFx0XFx0ZGVzYy50eXBlLCBkZXNjLmhlaWdodCwgbnVtX3JlY3MpO1xcbitcXG4rXFx0aWYgKCFoZnNfYm5vZGVfbnVtX3JlY3NfdmFsaWQobm9kZSwgbnVtX3JlY3MpKSB7XFxuK1xcdFxcdGhmc19kYmcoXFxcImludmFsaWQgbnVtX3JlY3MgJXVcXFxcblxcXCIsIG51bV9yZWNzKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuIFxcbiBcXHRvZmYgPSBub2RlLVxcdTAwM2V0cmVlLVxcdTAwM2Vub2RlX3NpemUgLSAyO1xcbi1cXHRmb3IgKGkgPSBiZTE2X3RvX2NwdShkZXNjLm51bV9yZWNzKTsgaSBcXHUwMDNlPSAwOyBvZmYgLT0gMiwgaS0tKSB7XFxuK1xcdGZvciAoaSA9IG51bV9yZWNzOyBpIFxcdTAwM2U9IDA7IG9mZiAtPSAyLCBpLS0pIHtcXG4gXFx0XFx0a2V5X29mZiA9IGhmc19ibm9kZV9yZWFkX3UxNihub2RlLCBvZmYpO1xcbiBcXHRcXHRoZnNfZGJnKFxcXCIga2V5X29mZiAlZFxcXCIsIGtleV9vZmYpO1xcbiBcXHRcXHRpZiAoaSBcXHUwMDI2XFx1MDAyNiBub2RlLVxcdTAwM2V0eXBlID09IEhGU19OT0RFX0lOREVYKSB7XFxuQEAgLTU3OSw2ICs1ODYsOSBAQCBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm5vZGVfZmluZChzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlLCB1MzIgbnVtKVxcbiBcXHRcXHRnb3RvIG5vZGVfZXJyb3I7XFxuIFxcdH1cXG4gXFxuK1xcdGlmICghaGZzX2Jub2RlX251bV9yZWNzX3ZhbGlkKG5vZGUsIG5vZGUtXFx1MDAzZW51bV9yZWNzKSlcXG4rXFx0XFx0Z290byBub2RlX2Vycm9yO1xcbitcXG4gXFx0cmVjX29mZiA9IHRyZWUtXFx1MDAzZW5vZGVfc2l6ZSAtIDI7XFxuIFxcdG9mZiA9IGhmc19ibm9kZV9yZWFkX3UxNihub2RlLCByZWNfb2ZmKTtcXG4gXFx0aWYgKG9mZiAhPSBzaXplb2Yoc3RydWN0IGhmc19ibm9kZV9kZXNjKSlcXG5AQCAtNTg4LDYgKzU5OCw3IEBAIHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibm9kZV9maW5kKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUsIHUzMiBudW0pXFxuIFxcdFxcdG5leHRfb2ZmID0gaGZzX2Jub2RlX3JlYWRfdTE2KG5vZGUsIHJlY19vZmYpO1xcbiBcXHRcXHRpZiAobmV4dF9vZmYgXFx1MDAzYz0gb2ZmIHx8XFxuIFxcdFxcdCAgICBuZXh0X29mZiBcXHUwMDNlIHRyZWUtXFx1MDAzZW5vZGVfc2l6ZSB8fFxcbitcXHRcXHQgICAgbmV4dF9vZmYgXFx1MDAzZSByZWNfb2ZmIHx8XFxuIFxcdFxcdCAgICBuZXh0X29mZiBcXHUwMDI2IDEpXFxuIFxcdFxcdFxcdGdvdG8gbm9kZV9lcnJvcjtcXG4gXFx0XFx0ZW50cnlfc2l6ZSA9IG5leHRfb2ZmIC0gb2ZmO1xcbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2JyZWMuYyBiL2ZzL2hmc3BsdXMvYnJlYy5jXFxuaW5kZXggZTNkZjg5Mjg0MDc5ZGIuLmRjZTM5N2JlOTE1MWZlIDEwMDY0NFxcbi0tLSBhL2ZzL2hmc3BsdXMvYnJlYy5jXFxuKysrIGIvZnMvaGZzcGx1cy9icmVjLmNcXG5AQCAtMjAsMTIgKzIwLDI3IEBAIHN0YXRpYyBpbnQgaGZzX2J0cmVlX2luY19oZWlnaHQoc3RydWN0IGhmc19idHJlZSAqKTtcXG4gdTE2IGhmc19icmVjX2xlbm9mZihzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MTYgcmVjLCB1MTYgKm9mZilcXG4ge1xcbiBcXHRfX2JlMTYgcmV0dmFsWzJdO1xcbi1cXHR1MTYgZGF0YW9mZjtcXG4rXFx0dTE2IGRhdGFfb2ZmO1xcbitcXHR1MTYgbmV4dF9vZmY7XFxuIFxcbi1cXHRkYXRhb2ZmID0gbm9kZS1cXHUwMDNldHJlZS1cXHUwMDNlbm9kZV9zaXplIC0gKHJlYyArIDIpICogMjtcXG4tXFx0aGZzX2Jub2RlX3JlYWQobm9kZSwgcmV0dmFsLCBkYXRhb2ZmLCA0KTtcXG4rXFx0aWYgKHJlYyBcXHUwMDNlPSBub2RlLVxcdTAwM2VudW1fcmVjcyB8fFxcbitcXHRcXHQhaGZzX2Jub2RlX251bV9yZWNzX3ZhbGlkKG5vZGUsIG5vZGUtXFx1MDAzZW51bV9yZWNzKSkge1xcbitcXHRcXHQqb2ZmID0gMDtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdGRhdGFfb2ZmID0gbm9kZS1cXHUwMDNldHJlZS1cXHUwMDNlbm9kZV9zaXplIC0gKHJlYyArIDIpICogMjtcXG4rXFx0aGZzX2Jub2RlX3JlYWQobm9kZSwgcmV0dmFsLCBkYXRhX29mZiwgNCk7XFxuIFxcdCpvZmYgPSBiZTE2X3RvX2NwdShyZXR2YWxbMV0pO1xcbi1cXHRyZXR1cm4gYmUxNl90b19jcHUocmV0dmFsWzBdKSAtICpvZmY7XFxuK1xcdG5leHRfb2ZmID0gYmUxNl90b19jcHUocmV0dmFsWzBdKTtcXG4rXFx0aWYgKCpvZmYgXFx1MDAzYyBzaXplb2Yoc3RydWN0IGhmc19ibm9kZV9kZXNjKSB8fFxcbitcXHRcXHQqb2ZmIFxcdTAwMjYgMSB8fFxcbitcXHRcXHRuZXh0X29mZiBcXHUwMDNjPSAqb2ZmIHx8XFxuK1xcdFxcdG5leHRfb2ZmIFxcdTAwM2Ugbm9kZS1cXHUwMDNldHJlZS1cXHUwMDNlbm9kZV9zaXplIHx8XFxuK1xcdFxcdG5leHRfb2ZmIFxcdTAwM2UgZGF0YV9vZmYgfHxcXG4rXFx0XFx0bmV4dF9vZmYgXFx1MDAyNiAxKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIG5leHRfb2ZmIC0gKm9mZjtcXG4gfVxcbiBcXG4gLyogR2V0IHRoZSBsZW5ndGggb2YgdGhlIGtleSBmcm9tIGEga2V5ZWQgcmVjb3JkICovXFxuQEAgLTM1LDYgKzUwLDkgQEAgdTE2IGhmc19icmVjX2tleWxlbihzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MTYgcmVjKVxcbiBcXG4gXFx0aWYgKG5vZGUtXFx1MDAzZXR5cGUgIT0gSEZTX05PREVfSU5ERVggXFx1MDAyNlxcdTAwMjYgbm9kZS1cXHUwMDNldHlwZSAhPSBIRlNfTk9ERV9MRUFGKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4rXFx0aWYgKHJlYyBcXHUwMDNlPSBub2RlLVxcdTAwM2VudW1fcmVjcyB8fFxcbitcXHRcXHQhaGZzX2Jub2RlX251bV9yZWNzX3ZhbGlkKG5vZGUsIG5vZGUtXFx1MDAzZW51bV9yZWNzKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRpZiAoKG5vZGUtXFx1MDAzZXR5cGUgPT0gSEZTX05PREVfSU5ERVgpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICEobm9kZS1cXHUwMDNldHJlZS1cXHUwMDNlYXR0cmlidXRlcyBcXHUwMDI2IEhGU19UUkVFX1ZBUklEWEtFWVMpIFxcdTAwMjZcXHUwMDI2XFxuQEAgLTQzLDcgKzYxLDcgQEAgdTE2IGhmc19icmVjX2tleWxlbihzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MTYgcmVjKVxcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRyZWNvZmYgPSBoZnNfYm5vZGVfcmVhZF91MTYobm9kZSxcXG4gXFx0XFx0XFx0bm9kZS1cXHUwMDNldHJlZS1cXHUwMDNlbm9kZV9zaXplIC0gKHJlYyArIDEpICogMik7XFxuLVxcdFxcdGlmICghcmVjb2ZmKVxcbitcXHRcXHRpZiAocmVjb2ZmIFxcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBoZnNfYm5vZGVfZGVzYykgfHwgcmVjb2ZmIFxcdTAwMjYgMSlcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdFxcdGlmIChyZWNvZmYgXFx1MDAzZSBub2RlLVxcdTAwM2V0cmVlLVxcdTAwM2Vub2RlX3NpemUgLSAyKSB7XFxuIFxcdFxcdFxcdHByX2VycihcXFwicmVjb2ZmICVkIHRvbyBsYXJnZVxcXFxuXFxcIiwgcmVjb2ZmKTtcXG5AQCAtMTg1LDEwICsyMDMsMTcgQEAgaW50IGhmc19icmVjX3JlbW92ZShzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXFxuIFxcdHRyZWUgPSBmZC1cXHUwMDNldHJlZTtcXG4gXFx0bm9kZSA9IGZkLVxcdTAwM2Vibm9kZTtcXG4gYWdhaW46XFxuK1xcdGlmIChmZC1cXHUwMDNlcmVjb3JkIFxcdTAwM2MgMCB8fFxcbitcXHRcXHRmZC1cXHUwMDNlcmVjb3JkIFxcdTAwM2U9IG5vZGUtXFx1MDAzZW51bV9yZWNzIHx8XFxuK1xcdFxcdCFoZnNfYm5vZGVfbnVtX3JlY3NfdmFsaWQobm9kZSwgbm9kZS1cXHUwMDNlbnVtX3JlY3MpKVxcbitcXHRcXHRyZXR1cm4gLUVJTztcXG4rXFxuIFxcdHJlY19vZmYgPSB0cmVlLVxcdTAwM2Vub2RlX3NpemUgLSAoZmQtXFx1MDAzZXJlY29yZCArIDIpICogMjtcXG4gXFx0ZW5kX29mZiA9IHRyZWUtXFx1MDAzZW5vZGVfc2l6ZSAtIChub2RlLVxcdTAwM2VudW1fcmVjcyArIDEpICogMjtcXG4gXFxuIFxcdGlmIChub2RlLVxcdTAwM2V0eXBlID09IEhGU19OT0RFX0xFQUYpIHtcXG4rXFx0XFx0aWYgKCF0cmVlLVxcdTAwM2VsZWFmX2NvdW50KVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4gXFx0XFx0dHJlZS1cXHUwMDNlbGVhZl9jb3VudC0tO1xcbiBcXHRcXHRtYXJrX2lub2RlX2RpcnR5KHRyZWUtXFx1MDAzZWlub2RlKTtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaCBiL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oXFxuaW5kZXggZWMwNGI4MmFkOTI3ODcuLjhiMmYyMDQxYjhiOThiIDEwMDY0NFxcbi0tLSBhL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oXFxuKysrIGIvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmhcXG5AQCAtNTg3LDYgKzU4NywyNCBAQCBib29sIGlzX2Jub2RlX29mZnNldF92YWxpZChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MzIgb2ZmKVxcbiBcXHRyZXR1cm4gaXNfdmFsaWQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmVcXG4rYm9vbCBoZnNfYm5vZGVfbnVtX3JlY3NfdmFsaWQoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTE2IG51bV9yZWNzKVxcbit7XFxuK1xcdHUzMiBub2RlX3NpemU7XFxuK1xcdHUzMiBvZmZzX3NpemU7XFxuK1xcbitcXHRpZiAoIW5vZGUgfHwgIW5vZGUtXFx1MDAzZXRyZWUpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdG5vZGVfc2l6ZSA9IG5vZGUtXFx1MDAzZXRyZWUtXFx1MDAzZW5vZGVfc2l6ZTtcXG4rXFx0aWYgKG5vZGVfc2l6ZSBcXHUwMDNjIHNpemVvZihzdHJ1Y3QgaGZzX2Jub2RlX2Rlc2MpICsgc2l6ZW9mKF9fYmUxNikpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdG9mZnNfc2l6ZSA9ICgodTMyKW51bV9yZWNzICsgMSkgKiBzaXplb2YoX19iZTE2KTtcXG4rXFxuK1xcdHJldHVybiBvZmZzX3NpemUgXFx1MDAzYz0gbm9kZV9zaXplIC0gc2l6ZW9mKHN0cnVjdCBoZnNfYm5vZGVfZGVzYyk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmVcXG4gdTMyIGNoZWNrX2FuZF9jb3JyZWN0X3JlcXVlc3RlZF9sZW5ndGgoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTMyIG9mZiwgdTMyIGxlbilcXG4ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMTowNTozMi45MDg1OTE5ODlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMTY5MTY3ODkzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIRlNQTFVTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaGZzX2JyZWNfcmVtb3ZlXCIsXG4gICAgXCJoZnNfYnJlY19nb3RvXCIsXG4gICAgXCJfX2hmc19icmVjX2ZpbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gZm9yIGBudW1fcmVjc2AgaW4gSEZTKyBiLXRyZWUgbm9kZXMgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIGFjY2VzcyBhbmQgb3RoZXIgaXNzdWVzLiBJdCBtb2RpZmllcyBjb3JlIGItdHJlZSBvcGVyYXRpb25zIGxpa2UgZmluZGluZywgcmVtb3ZpbmcsIGFuZCBpdGVyYXRpbmcgb3ZlciByZWNvcmRzLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCBhZmZlY3QgcmVhY2hhYmxlIGZpbGVzeXN0ZW0gbG9naWMsIHBhcnRpY3VsYXJseSBkdXJpbmcgZGlyZWN0b3J5IHRyYXZlcnNhbCwgZmlsZSBkZWxldGlvbiwgYW5kIGF0dHJpYnV0ZSBvcGVyYXRpb25zLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBvcGVyYXRpb25zIHRvIGVuc3VyZSB0aGUgbmV3IHZhbGlkYXRpb24gbG9naWMgY29ycmVjdGx5IGhhbmRsZXMgbWFsZm9ybWVkIGItdHJlZSBub2RlcyB3aXRob3V0IGNhdXNpbmcgcmVncmVzc2lvbnMgb3IgcGFuaWNzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGFhZTU3YjY0ZDAyYjYzZjA2MzY2ZWIzODJhZDVlMDFjY2Y5NGI5YTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxIDExOjA1OjMxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9iZmluZC5jIGIvZnMvaGZzcGx1cy9iZmluZC5jXG5pbmRleCA5YTU1ZmE2ZDUyOTQyOS4uYWNlOWJhMDI3YTlkYjQgMTAwNjQ0XG4tLS0gYS9mcy9oZnNwbHVzL2JmaW5kLmNcbisrKyBiL2ZzL2hmc3BsdXMvYmZpbmQuY1xuQEAgLTExMiwxMSArMTEyLDEzIEBAIGludCBfX2hmc19icmVjX2ZpbmQoc3RydWN0IGhmc19ibm9kZSAqYm5vZGUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCxcbiBcdGIgPSAwO1xuIFx0ZSA9IGJub2RlLVx1MDAzZW51bV9yZWNzIC0gMTtcbiBcdHJlcyA9IC1FTk9FTlQ7XG4rXHRpZiAoIWJub2RlLVx1MDAzZW51bV9yZWNzKVxuK1x0XHRyZXR1cm4gcmVzO1xuIFx0ZG8ge1xuIFx0XHRyZWMgPSAoZSArIGIpIC8gMjtcbiBcdFx0bGVuID0gaGZzX2JyZWNfbGVub2ZmKGJub2RlLCByZWMsIFx1MDAyNm9mZik7XG4gXHRcdGtleWxlbiA9IGhmc19icmVjX2tleWxlbihibm9kZSwgcmVjKTtcbi1cdFx0aWYgKGtleWxlbiA9PSAwKSB7XG4rXHRcdGlmICgha2V5bGVuIHx8IGtleWxlbiBcdTAwM2U9IGxlbikge1xuIFx0XHRcdHJlcyA9IC1FSU5WQUw7XG4gXHRcdFx0Z290byBmYWlsO1xuIFx0XHR9XG5AQCAtMTMwLDcgKzEzMiw3IEBAIGludCBfX2hmc19icmVjX2ZpbmQoc3RydWN0IGhmc19ibm9kZSAqYm5vZGUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCxcbiBcdGlmIChyZWMgIT0gZSBcdTAwMjZcdTAwMjYgZSBcdTAwM2U9IDApIHtcbiBcdFx0bGVuID0gaGZzX2JyZWNfbGVub2ZmKGJub2RlLCBlLCBcdTAwMjZvZmYpO1xuIFx0XHRrZXlsZW4gPSBoZnNfYnJlY19rZXlsZW4oYm5vZGUsIGUpO1xuLVx0XHRpZiAoa2V5bGVuID09IDApIHtcbitcdFx0aWYgKCFrZXlsZW4gfHwga2V5bGVuIFx1MDAzZT0gbGVuKSB7XG4gXHRcdFx0cmVzID0gLUVJTlZBTDtcbiBcdFx0XHRnb3RvIGZhaWw7XG4gXHRcdH1cbkBAIC0yMzIsNiArMjM0LDEwIEBAIGludCBoZnNfYnJlY19nb3RvKHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgaW50IGNudClcbiBcbiBcdGJub2RlID0gZmQtXHUwMDNlYm5vZGU7XG4gXHR0cmVlID0gYm5vZGUtXHUwMDNldHJlZTtcbitcdGlmICghYm5vZGUtXHUwMDNlbnVtX3JlY3MpIHtcbitcdFx0cmVzID0gLUVOT0VOVDtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4gXG4gXHRpZiAoY250IFx1MDAzYyAwKSB7XG4gXHRcdGNudCA9IC1jbnQ7XG5AQCAtMjc0LDcgKzI4MCw3IEBAIGludCBoZnNfYnJlY19nb3RvKHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgaW50IGNudClcbiBcbiBcdGxlbiA9IGhmc19icmVjX2xlbm9mZihibm9kZSwgZmQtXHUwMDNlcmVjb3JkLCBcdTAwMjZvZmYpO1xuIFx0a2V5bGVuID0gaGZzX2JyZWNfa2V5bGVuKGJub2RlLCBmZC1cdTAwM2VyZWNvcmQpO1xuLVx0aWYgKGtleWxlbiA9PSAwKSB7XG4rXHRpZiAoIWtleWxlbiB8fCBrZXlsZW4gXHUwMDNlPSBsZW4pIHtcbiBcdFx0cmVzID0gLUVJTlZBTDtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9ibm9kZS5jIGIvZnMvaGZzcGx1cy9ibm9kZS5jXG5pbmRleCBkMDg4ZmI3ZWIwZGZhMy4uZGY0MDZmNzVhNWIzMjMgMTAwNjQ0XG4tLS0gYS9mcy9oZnNwbHVzL2Jub2RlLmNcbisrKyBiL2ZzL2hmc3BsdXMvYm5vZGUuY1xuQEAgLTM1MiwxNSArMzUyLDIyIEBAIHZvaWQgaGZzX2Jub2RlX2R1bXAoc3RydWN0IGhmc19ibm9kZSAqbm9kZSlcbiBcdHN0cnVjdCBoZnNfYm5vZGVfZGVzYyBkZXNjO1xuIFx0X19iZTMyIGNuaWQ7XG4gXHRpbnQgaSwgb2ZmLCBrZXlfb2ZmO1xuK1x0dTE2IG51bV9yZWNzO1xuIFxuIFx0aGZzX2RiZyhcIm5vZGUgJWRcXG5cIiwgbm9kZS1cdTAwM2V0aGlzKTtcbiBcdGhmc19ibm9kZV9yZWFkKG5vZGUsIFx1MDAyNmRlc2MsIDAsIHNpemVvZihkZXNjKSk7XG4rXHRudW1fcmVjcyA9IGJlMTZfdG9fY3B1KGRlc2MubnVtX3JlY3MpO1xuIFx0aGZzX2RiZyhcIm5leHQgJWQsIHByZXYgJWQsIHR5cGUgJWQsIGhlaWdodCAlZCwgbnVtX3JlY3MgJWRcXG5cIixcbiBcdFx0YmUzMl90b19jcHUoZGVzYy5uZXh0KSwgYmUzMl90b19jcHUoZGVzYy5wcmV2KSxcbi1cdFx0ZGVzYy50eXBlLCBkZXNjLmhlaWdodCwgYmUxNl90b19jcHUoZGVzYy5udW1fcmVjcykpO1xuK1x0XHRkZXNjLnR5cGUsIGRlc2MuaGVpZ2h0LCBudW1fcmVjcyk7XG4rXG4rXHRpZiAoIWhmc19ibm9kZV9udW1fcmVjc192YWxpZChub2RlLCBudW1fcmVjcykpIHtcbitcdFx0aGZzX2RiZyhcImludmFsaWQgbnVtX3JlY3MgJXVcXG5cIiwgbnVtX3JlY3MpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4gXG4gXHRvZmYgPSBub2RlLVx1MDAzZXRyZWUtXHUwMDNlbm9kZV9zaXplIC0gMjtcbi1cdGZvciAoaSA9IGJlMTZfdG9fY3B1KGRlc2MubnVtX3JlY3MpOyBpIFx1MDAzZT0gMDsgb2ZmIC09IDIsIGktLSkge1xuK1x0Zm9yIChpID0gbnVtX3JlY3M7IGkgXHUwMDNlPSAwOyBvZmYgLT0gMiwgaS0tKSB7XG4gXHRcdGtleV9vZmYgPSBoZnNfYm5vZGVfcmVhZF91MTYobm9kZSwgb2ZmKTtcbiBcdFx0aGZzX2RiZyhcIiBrZXlfb2ZmICVkXCIsIGtleV9vZmYpO1xuIFx0XHRpZiAoaSBcdTAwMjZcdTAwMjYgbm9kZS1cdTAwM2V0eXBlID09IEhGU19OT0RFX0lOREVYKSB7XG5AQCAtNTc5LDYgKzU4Niw5IEBAIHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibm9kZV9maW5kKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUsIHUzMiBudW0pXG4gXHRcdGdvdG8gbm9kZV9lcnJvcjtcbiBcdH1cbiBcbitcdGlmICghaGZzX2Jub2RlX251bV9yZWNzX3ZhbGlkKG5vZGUsIG5vZGUtXHUwMDNlbnVtX3JlY3MpKVxuK1x0XHRnb3RvIG5vZGVfZXJyb3I7XG4rXG4gXHRyZWNfb2ZmID0gdHJlZS1cdTAwM2Vub2RlX3NpemUgLSAyO1xuIFx0b2ZmID0gaGZzX2Jub2RlX3JlYWRfdTE2KG5vZGUsIHJlY19vZmYpO1xuIFx0aWYgKG9mZiAhPSBzaXplb2Yoc3RydWN0IGhmc19ibm9kZV9kZXNjKSlcbkBAIC01ODgsNiArNTk4LDcgQEAgc3RydWN0IGhmc19ibm9kZSAqaGZzX2Jub2RlX2ZpbmQoc3RydWN0IGhmc19idHJlZSAqdHJlZSwgdTMyIG51bSlcbiBcdFx0bmV4dF9vZmYgPSBoZnNfYm5vZGVfcmVhZF91MTYobm9kZSwgcmVjX29mZik7XG4gXHRcdGlmIChuZXh0X29mZiBcdTAwM2M9IG9mZiB8fFxuIFx0XHQgICAgbmV4dF9vZmYgXHUwMDNlIHRyZWUtXHUwMDNlbm9kZV9zaXplIHx8XG4rXHRcdCAgICBuZXh0X29mZiBcdTAwM2UgcmVjX29mZiB8fFxuIFx0XHQgICAgbmV4dF9vZmYgXHUwMDI2IDEpXG4gXHRcdFx0Z290byBub2RlX2Vycm9yO1xuIFx0XHRlbnRyeV9zaXplID0gbmV4dF9vZmYgLSBvZmY7XG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9icmVjLmMgYi9mcy9oZnNwbHVzL2JyZWMuY1xuaW5kZXggZTNkZjg5Mjg0MDc5ZGIuLmRjZTM5N2JlOTE1MWZlIDEwMDY0NFxuLS0tIGEvZnMvaGZzcGx1cy9icmVjLmNcbisrKyBiL2ZzL2hmc3BsdXMvYnJlYy5jXG5AQCAtMjAsMTIgKzIwLDI3IEBAIHN0YXRpYyBpbnQgaGZzX2J0cmVlX2luY19oZWlnaHQoc3RydWN0IGhmc19idHJlZSAqKTtcbiB1MTYgaGZzX2JyZWNfbGVub2ZmKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUxNiByZWMsIHUxNiAqb2ZmKVxuIHtcbiBcdF9fYmUxNiByZXR2YWxbMl07XG4tXHR1MTYgZGF0YW9mZjtcbitcdHUxNiBkYXRhX29mZjtcbitcdHUxNiBuZXh0X29mZjtcbiBcbi1cdGRhdGFvZmYgPSBub2RlLVx1MDAzZXRyZWUtXHUwMDNlbm9kZV9zaXplIC0gKHJlYyArIDIpICogMjtcbi1cdGhmc19ibm9kZV9yZWFkKG5vZGUsIHJldHZhbCwgZGF0YW9mZiwgNCk7XG4rXHRpZiAocmVjIFx1MDAzZT0gbm9kZS1cdTAwM2VudW1fcmVjcyB8fFxuK1x0XHQhaGZzX2Jub2RlX251bV9yZWNzX3ZhbGlkKG5vZGUsIG5vZGUtXHUwMDNlbnVtX3JlY3MpKSB7XG4rXHRcdCpvZmYgPSAwO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdGRhdGFfb2ZmID0gbm9kZS1cdTAwM2V0cmVlLVx1MDAzZW5vZGVfc2l6ZSAtIChyZWMgKyAyKSAqIDI7XG4rXHRoZnNfYm5vZGVfcmVhZChub2RlLCByZXR2YWwsIGRhdGFfb2ZmLCA0KTtcbiBcdCpvZmYgPSBiZTE2X3RvX2NwdShyZXR2YWxbMV0pO1xuLVx0cmV0dXJuIGJlMTZfdG9fY3B1KHJldHZhbFswXSkgLSAqb2ZmO1xuK1x0bmV4dF9vZmYgPSBiZTE2X3RvX2NwdShyZXR2YWxbMF0pO1xuK1x0aWYgKCpvZmYgXHUwMDNjIHNpemVvZihzdHJ1Y3QgaGZzX2Jub2RlX2Rlc2MpIHx8XG4rXHRcdCpvZmYgXHUwMDI2IDEgfHxcbitcdFx0bmV4dF9vZmYgXHUwMDNjPSAqb2ZmIHx8XG4rXHRcdG5leHRfb2ZmIFx1MDAzZSBub2RlLVx1MDAzZXRyZWUtXHUwMDNlbm9kZV9zaXplIHx8XG4rXHRcdG5leHRfb2ZmIFx1MDAzZSBkYXRhX29mZiB8fFxuK1x0XHRuZXh0X29mZiBcdTAwMjYgMSlcbitcdFx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gbmV4dF9vZmYgLSAqb2ZmO1xuIH1cbiBcbiAvKiBHZXQgdGhlIGxlbmd0aCBvZiB0aGUga2V5IGZyb20gYSBrZXllZCByZWNvcmQgKi9cbkBAIC0zNSw2ICs1MCw5IEBAIHUxNiBoZnNfYnJlY19rZXlsZW4oc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTE2IHJlYylcbiBcbiBcdGlmIChub2RlLVx1MDAzZXR5cGUgIT0gSEZTX05PREVfSU5ERVggXHUwMDI2XHUwMDI2IG5vZGUtXHUwMDNldHlwZSAhPSBIRlNfTk9ERV9MRUFGKVxuIFx0XHRyZXR1cm4gMDtcbitcdGlmIChyZWMgXHUwMDNlPSBub2RlLVx1MDAzZW51bV9yZWNzIHx8XG4rXHRcdCFoZnNfYm5vZGVfbnVtX3JlY3NfdmFsaWQobm9kZSwgbm9kZS1cdTAwM2VudW1fcmVjcykpXG4rXHRcdHJldHVybiAwO1xuIFxuIFx0aWYgKChub2RlLVx1MDAzZXR5cGUgPT0gSEZTX05PREVfSU5ERVgpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIShub2RlLVx1MDAzZXRyZWUtXHUwMDNlYXR0cmlidXRlcyBcdTAwMjYgSEZTX1RSRUVfVkFSSURYS0VZUykgXHUwMDI2XHUwMDI2XG5AQCAtNDMsNyArNjEsNyBAQCB1MTYgaGZzX2JyZWNfa2V5bGVuKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUxNiByZWMpXG4gXHR9IGVsc2Uge1xuIFx0XHRyZWNvZmYgPSBoZnNfYm5vZGVfcmVhZF91MTYobm9kZSxcbiBcdFx0XHRub2RlLVx1MDAzZXRyZWUtXHUwMDNlbm9kZV9zaXplIC0gKHJlYyArIDEpICogMik7XG4tXHRcdGlmICghcmVjb2ZmKVxuK1x0XHRpZiAocmVjb2ZmIFx1MDAzYyBzaXplb2Yoc3RydWN0IGhmc19ibm9kZV9kZXNjKSB8fCByZWNvZmYgXHUwMDI2IDEpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXHRcdGlmIChyZWNvZmYgXHUwMDNlIG5vZGUtXHUwMDNldHJlZS1cdTAwM2Vub2RlX3NpemUgLSAyKSB7XG4gXHRcdFx0cHJfZXJyKFwicmVjb2ZmICVkIHRvbyBsYXJnZVxcblwiLCByZWNvZmYpO1xuQEAgLTE4NSwxMCArMjAzLDE3IEBAIGludCBoZnNfYnJlY19yZW1vdmUoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxuIFx0dHJlZSA9IGZkLVx1MDAzZXRyZWU7XG4gXHRub2RlID0gZmQtXHUwMDNlYm5vZGU7XG4gYWdhaW46XG4rXHRpZiAoZmQtXHUwMDNlcmVjb3JkIFx1MDAzYyAwIHx8XG4rXHRcdGZkLVx1MDAzZXJlY29yZCBcdTAwM2U9IG5vZGUtXHUwMDNlbnVtX3JlY3MgfHxcbitcdFx0IWhmc19ibm9kZV9udW1fcmVjc192YWxpZChub2RlLCBub2RlLVx1MDAzZW51bV9yZWNzKSlcbitcdFx0cmV0dXJuIC1FSU87XG4rXG4gXHRyZWNfb2ZmID0gdHJlZS1cdTAwM2Vub2RlX3NpemUgLSAoZmQtXHUwMDNlcmVjb3JkICsgMikgKiAyO1xuIFx0ZW5kX29mZiA9IHRyZWUtXHUwMDNlbm9kZV9zaXplIC0gKG5vZGUtXHUwMDNlbnVtX3JlY3MgKyAxKSAqIDI7XG4gXG4gXHRpZiAobm9kZS1cdTAwM2V0eXBlID09IEhGU19OT0RFX0xFQUYpIHtcbitcdFx0aWYgKCF0cmVlLVx1MDAzZWxlYWZfY291bnQpXG4rXHRcdFx0cmV0dXJuIC1FSU87XG4gXHRcdHRyZWUtXHUwMDNlbGVhZl9jb3VudC0tO1xuIFx0XHRtYXJrX2lub2RlX2RpcnR5KHRyZWUtXHUwMDNlaW5vZGUpO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oIGIvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmhcbmluZGV4IGVjMDRiODJhZDkyNzg3Li44YjJmMjA0MWI4Yjk4YiAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oXG4rKysgYi9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaFxuQEAgLTU4Nyw2ICs1ODcsMjQgQEAgYm9vbCBpc19ibm9kZV9vZmZzZXRfdmFsaWQoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTMyIG9mZilcbiBcdHJldHVybiBpc192YWxpZDtcbiB9XG4gXG4rc3RhdGljIGlubGluZVxuK2Jvb2wgaGZzX2Jub2RlX251bV9yZWNzX3ZhbGlkKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUxNiBudW1fcmVjcylcbit7XG4rXHR1MzIgbm9kZV9zaXplO1xuK1x0dTMyIG9mZnNfc2l6ZTtcbitcbitcdGlmICghbm9kZSB8fCAhbm9kZS1cdTAwM2V0cmVlKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRub2RlX3NpemUgPSBub2RlLVx1MDAzZXRyZWUtXHUwMDNlbm9kZV9zaXplO1xuK1x0aWYgKG5vZGVfc2l6ZSBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBoZnNfYm5vZGVfZGVzYykgKyBzaXplb2YoX19iZTE2KSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0b2Zmc19zaXplID0gKCh1MzIpbnVtX3JlY3MgKyAxKSAqIHNpemVvZihfX2JlMTYpO1xuK1xuK1x0cmV0dXJuIG9mZnNfc2l6ZSBcdTAwM2M9IG5vZGVfc2l6ZSAtIHNpemVvZihzdHJ1Y3QgaGZzX2Jub2RlX2Rlc2MpO1xuK31cbitcbiBzdGF0aWMgaW5saW5lXG4gdTMyIGNoZWNrX2FuZF9jb3JyZWN0X3JlcXVlc3RlZF9sZW5ndGgoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTMyIG9mZiwgdTMyIGxlbilcbiB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMTowNTozMi45MDg2MDMwNDlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjI2NDg1MDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlZhbGlkYXRpbmcgSEZTKyBCLVRyZWUgTm9kZSBSZWNvcmQgQ291bnRzKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGNvcmUgb2YgaXQgaXMgYWRkaW5nIHZhbGlkYXRpb24gZm9yIGBudW1fcmVjc2Agd2l0aGluIEhGUysgYi10cmVlIG5vZGVzLiBXZSdyZSB0YWxraW5nIGFib3V0IG1vZGlmaWNhdGlvbnMgYWNyb3NzIGEgZmV3IGtleSBmaWxlczogYGJmaW5kLmNgLCBgYm5vZGUuY2AsIGBicmVjLmNgLCBhbmQgdGhlIGhlYWRlciwgYGhmc3BsdXNfZnMuaGAuIEl0IGxvb2tzIGxpa2UgdGhleSd2ZSBkZWZpbmVkIGEgbmV3IGlubGluZSBmdW5jdGlvbiwgYGhmc19ibm9kZV9udW1fcmVjc192YWxpZGAsIHJpZ2h0IHRoZXJlIGluIGBoZnNwbHVzX2ZzLmhgLiBTbWFydCBtb3ZlLCBrZWVwcyBpdCB0aWR5LlxuXG5Gcm9tIHRoZSBsb29rcyBvZiBpdCwgdGhpcyBuZXcgdmFsaWRhdGlvbiBpcyBiZWluZyBpbnRlZ3JhdGVkIGludG8gYSBidW5jaCBvZiBleGlzdGluZyBmdW5jdGlvbnMgbGlrZSBgaGZzX2Jub2RlX2R1bXBgLCBgaGZzX2Jub2RlX2ZpbmRgLCBgaGZzX2JyZWNfbGVub2ZmYCwgYGhmc19icmVjX2tleWxlbmAsIGFuZCBgaGZzX2JyZWNfcmVtb3ZlYC4gVGhhdCBtYWtlcyBzZW5zZTsgY2F0Y2hpbmcgZXJyb3JzIGVhcmx5IGlzIGFsd2F5cyB0aGUgYmVzdCBhcHByb2FjaC4gVGhleSd2ZSBhbHNvIGFkZGVkIGV4cGxpY2l0IGNoZWNrcyBmb3IgYGJub2RlLVx1MDAzZW51bV9yZWNzYCBiZWluZyB6ZXJvIGluIGBfX2hmc19icmVjX2ZpbmRgIGFuZCBgaGZzX2JyZWNfZ290b2AuIEdvb2QsIGRlZmVuc2l2ZSBwcm9ncmFtbWluZy4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIGFsc28gYWRkaW5nIHNvbWUgY2hlY2tzIGZvciB0aGUgYGtleWxlbmAgYW5kIGBuZXh0X29mZmAgdmFsdWVzIGFzIHdlbGwgLSBnb29kLCB0aG9yb3VnaC5cblxuT3ZlcmFsbCwgdGhlIGNvZGUgbG9va3Mgc29saWQgYW5kIGZ1bmN0aW9uYWwuIE15IGZvY3VzIGlzIGFsd2F5cyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBpbXBsaWNhdGlvbnMgd2l0aGluIHRoZSBIRlMrIGZpbGVzeXN0ZW0gY29udGV4dC4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgYEhGU1BMVVNfRlNgIGNvbmZpZyBvcHRpb24gYW5kLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgZXhhY3QgY29uZmlnIG5hbWUgaW4gYGZzL2hmc3BsdXMvS2NvbmZpZ2Agb3IgYGZzL0tjb25maWdgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjAxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjczLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTE6MDU6MzkuMTM1MDkwNjMzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MzM5MzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkhGU1BMVVNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaGZzcGx1cy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2hmc3BsdXMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2hmc3BsdXMvS2NvbmZpZzoyOmNvbmZpZyBIRlNQTFVTX0ZTXFxuZnMvaGZzcGx1cy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkFwcGxlIEV4dGVuZGVkIEhGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvaGZzcGx1cy9LY29uZmlnLTE3LVxcbmZzL2hmc3BsdXMvS2NvbmZpZzoxODpjb25maWcgSEZTUExVU19LVU5JVF9URVNUXFxuZnMvaGZzcGx1cy9LY29uZmlnLTE5LVxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0cyBmb3IgSEZTKyBmaWxlc3lzdGVtXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuZnMvaGZzcGx1cy9LY29uZmlnOjIwOlxcdGRlcGVuZHMgb24gSEZTUExVU19GUyBcXHUwMDI2XFx1MDAyNiBLVU5JVFxcbmZzL2hmc3BsdXMvS2NvbmZpZy0yMS1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMTowNTozOS4xODk0MzcyMDhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTQ2NTI0MTM0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBIRlMrIEZpbGVzeXN0ZW0qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBIRlNQTFVTX0ZTYCBjb25maWcsIGFuZCB0aGUgZ29hbCBpcyB0byBpZGVudGlmeSB0aGUgbW9zdCBwcm9taXNpbmcgZnVuY3Rpb25zIGZvciBmdXp6aW5nLiBTZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiB0aGUgZm9jdXMgc2hvdWxkIGJlIG9uIGZ1bmN0aW9ucyB0aGF0IGFyZSBsaWtlbHkgdG8gZXhwb3NlIHZ1bG5lcmFiaWxpdGllcy4gVGhlIHRleHQgaGlnaGxpZ2h0cyBhIGxpc3Qgb2YgbW9kaWZpZWQgZnVuY3Rpb25zLCBhbmQgSSdtIHVzaW5nIHRoYXQgYXMgYSBzdGFydGluZyBwb2ludC5cblxuTG9va2luZyBhdCB0aGUgbGlzdCwgSSBoYXZlOiBgX19oZnNfYnJlY19maW5kYCwgYGhmc19icmVjX2dvdG9gLCBgaGZzX2Jub2RlX2R1bXBgLCBgaGZzX2Jub2RlX2ZpbmRgLCBgaGZzX2JyZWNfbGVub2ZmYCwgYGhmc19icmVjX2tleWxlbmAsIGFuZCBgaGZzX2JyZWNfcmVtb3ZlYC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYGhmc19ibm9kZV9kdW1wYCBpcyBsaWtlbHkganVzdCBhIGRlYnVnZ2luZyBmdW5jdGlvbiwgc28gaXQncyBwcm9iYWJseSBub3QgdGhlIGJlc3QgdGFyZ2V0IGZvciBmdXp6aW5nIOKAkyBsZXNzIGNoYW5jZSBvZiB0cmlnZ2VyaW5nIGFjdHVhbCB2dWxuZXJhYmlsaXRpZXMuIFRoZSByZXN0IGxvb2sgbGlrZSBzb2xpZCBjYW5kaWRhdGVzOiBgX19oZnNfYnJlY19maW5kYCwgYGhmc19icmVjX2dvdG9gLCBgaGZzX2Jub2RlX2ZpbmRgLCBgaGZzX2JyZWNfbGVub2ZmYCwgYGhmc19icmVjX2tleWxlbmAsIGFuZCBgaGZzX2JyZWNfcmVtb3ZlYC5cblxuTm93LCB3YWl0IGEgc2Vjb25kLiBgaGZzX2JyZWNfbGVub2ZmYCBhbmQgYGhmc19icmVjX2tleWxlbmAuLi4gdGhvc2Ugc291bmQgbGlrZSB0aGV5J3JlIHByb2JhYmx5IGNhbGxlZCAqdmVyeSogZnJlcXVlbnRseS4gVGhhdCBjb3VsZCBtZWFuIHRoZXkncmUgaW4gYSBob3QgcGF0aCwgYW5kIHRoYXQncyB0aGUga2luZCBvZiBwbGFjZSB3aGVyZSBJJ20gZ29pbmcgdG8gZmluZCB0aGUgbW9zdCBpbnRlcmVzdGluZyByZXN1bHRzLiBJJ20gZ29pbmcgdG8gaW52ZXN0aWdhdGUgdGhvc2UgdHdvIGZ1bmN0aW9ucyBhIGJpdCBtb3JlIGNsb3NlbHkgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgcmVhbGx5IGFyZSBpbiB0aGUgaG90IHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0ODIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTE6MDY6MzQuNjU0NjgyNDJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ4NTM3NzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhmc19icmVjX2xlbm9mZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9oZnNwbHVzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9oZnNwbHVzL2JmaW5kLmM9MTAzPWludCBfX2hmc19icmVjX2ZpbmQoc3RydWN0IGhmc19ibm9kZSAqYm5vZGUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCxcXG4tLVxcbmZzL2hmc3BsdXMvYmZpbmQuYy0xMTgtXFx0XFx0cmVjID0gKGUgKyBiKSAvIDI7XFxuZnMvaGZzcGx1cy9iZmluZC5jOjExOTpcXHRcXHRsZW4gPSBoZnNfYnJlY19sZW5vZmYoYm5vZGUsIHJlYywgXFx1MDAyNm9mZik7XFxuZnMvaGZzcGx1cy9iZmluZC5jLTEyMC1cXHRcXHRrZXlsZW4gPSBoZnNfYnJlY19rZXlsZW4oYm5vZGUsIHJlYyk7XFxuLS1cXG5mcy9oZnNwbHVzL2JmaW5kLmMtMTMyLVxcdGlmIChyZWMgIT0gZSBcXHUwMDI2XFx1MDAyNiBlIFxcdTAwM2U9IDApIHtcXG5mcy9oZnNwbHVzL2JmaW5kLmM6MTMzOlxcdFxcdGxlbiA9IGhmc19icmVjX2xlbm9mZihibm9kZSwgZSwgXFx1MDAyNm9mZik7XFxuZnMvaGZzcGx1cy9iZmluZC5jLTEzNC1cXHRcXHRrZXlsZW4gPSBoZnNfYnJlY19rZXlsZW4oYm5vZGUsIGUpO1xcbi0tXFxuZnMvaGZzcGx1cy9iZmluZC5jPTIyOD1pbnQgaGZzX2JyZWNfZ290byhzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIGludCBjbnQpXFxuLS1cXG5mcy9oZnNwbHVzL2JmaW5kLmMtMjgwLVxcbmZzL2hmc3BsdXMvYmZpbmQuYzoyODE6XFx0bGVuID0gaGZzX2JyZWNfbGVub2ZmKGJub2RlLCBmZC1cXHUwMDNlcmVjb3JkLCBcXHUwMDI2b2ZmKTtcXG5mcy9oZnNwbHVzL2JmaW5kLmMtMjgyLVxcdGtleWxlbiA9IGhmc19icmVjX2tleWxlbihibm9kZSwgZmQtXFx1MDAzZXJlY29yZCk7XFxuLS1cXG5mcy9oZnNwbHVzL2JyZWMuYz0xNz1zdGF0aWMgaW50IGhmc19idHJlZV9pbmNfaGVpZ2h0KHN0cnVjdCBoZnNfYnRyZWUgKik7XFxuLS1cXG5mcy9oZnNwbHVzL2JyZWMuYy0xOS0vKiBHZXQgdGhlIGxlbmd0aCBhbmQgb2Zmc2V0IG9mIHRoZSBnaXZlbiByZWNvcmQgaW4gdGhlIGdpdmVuIG5vZGUgKi9cXG5mcy9oZnNwbHVzL2JyZWMuYzoyMDp1MTYgaGZzX2JyZWNfbGVub2ZmKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUxNiByZWMsIHUxNiAqb2ZmKVxcbmZzL2hmc3BsdXMvYnJlYy5jLTIxLXtcXG4tLVxcbmZzL2hmc3BsdXMvYnRyZWUuYz0xNDk9c3RhdGljIHN0cnVjdCBwYWdlICpoZnNfYm1hcF9nZXRfbWFwX3BhZ2Uoc3RydWN0IGhmc19ibm9kZSAqbm9kZSxcXG4tLVxcbmZzL2hmc3BsdXMvYnRyZWUuYy0xNjktXFxuZnMvaGZzcGx1cy9idHJlZS5jOjE3MDpcXHRjdHgtXFx1MDAzZWxlbiA9IGhmc19icmVjX2xlbm9mZihub2RlLCByZWNfaWR4LCBcXHUwMDI2b2ZmMTYpO1xcbmZzL2hmc3BsdXMvYnRyZWUuYy0xNzEtXFx0aWYgKCFjdHgtXFx1MDAzZWxlbilcXG4tLVxcbmZzL2hmc3BsdXMvYnRyZWUuYz02MDk9dm9pZCBoZnNfYm1hcF9mcmVlKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUpXFxuLS1cXG5mcy9oZnNwbHVzL2J0cmVlLmMtNjIzLVxcdFxcdHJldHVybjtcXG5mcy9oZnNwbHVzL2J0cmVlLmM6NjI0OlxcdGxlbiA9IGhmc19icmVjX2xlbm9mZihub2RlLCAyLCBcXHUwMDI2b2ZmKTtcXG5mcy9oZnNwbHVzL2J0cmVlLmMtNjI1LVxcdHdoaWxlIChuaWR4IFxcdTAwM2U9IGxlbiAqIDgpIHtcXG4tLVxcbmZzL2hmc3BsdXMvYnRyZWUuYy02NDktXFx0XFx0fVxcbmZzL2hmc3BsdXMvYnRyZWUuYzo2NTA6XFx0XFx0bGVuID0gaGZzX2JyZWNfbGVub2ZmKG5vZGUsIDAsIFxcdTAwMjZvZmYpO1xcbmZzL2hmc3BsdXMvYnRyZWUuYy02NTEtXFx0fVxcbi0tXFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg9MjgwPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgaGZzcGx1c19taW5faW9fc2l6ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMzA5LSNkZWZpbmUgaGZzX2Jub2RlX3B1dCBoZnNwbHVzX2Jub2RlX3B1dFxcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oOjMxMDojZGVmaW5lIGhmc19icmVjX2xlbm9mZiBoZnNwbHVzX2JyZWNfbGVub2ZmXFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMzExLSNkZWZpbmUgaGZzX2JyZWNfa2V5bGVuIGhmc3BsdXNfYnJlY19rZXlsZW5cXG4tLVxcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oPTM5MD1ib29sIGhmc19ibm9kZV9uZWVkX3plcm9vdXQoc3RydWN0IGhmc19idHJlZSAqdHJlZSk7XFxuLS1cXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC0zOTItLyogYnJlYy5jICovXFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg6MzkzOnUxNiBoZnNfYnJlY19sZW5vZmYoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTE2IHJlYywgdTE2ICpvZmYpO1xcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTM5NC11MTYgaGZzX2JyZWNfa2V5bGVuKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUxNiByZWMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMTowNjozNS4wMDMyMzQ5MDZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjI0MTgzMjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQnJlYWR0aCBvZiBgaGZzX2JyZWNfbGVub2ZmYCBVc2FnZSoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYGhmc19icmVjX2xlbm9mZmAgaXMgYSBwcmV0dHkgZnVuZGFtZW50YWwgZnVuY3Rpb24uIEl0J3MgY2FsbGVkIGZyb20gYSBudW1iZXIgb2Yga2V5IHBsYWNlczogYF9faGZzX2JyZWNfZmluZGAsIGBoZnNfYnJlY19nb3RvYCwgYGhmc19ibWFwX2dldF9tYXBfcGFnZWAsIGFuZCBgaGZzX2JtYXBfZnJlZWAuICBSaWdodCBhd2F5LCBJJ20gdGhpbmtpbmcgdGhhdCBgX19oZnNfYnJlY19maW5kYCBhbmQgYGhmc19icmVjX2dvdG9gIGFyZSBwcm9iYWJseSBnZXR0aW5nIGhpdCAqYSBsb3QqIGR1cmluZyBkaXJlY3RvcnkgdHJhdmVyc2FsIGFuZCBnZW5lcmFsIGZpbGUgbG9va3VwcyDigJMgdGhlIGNvcmUgb3BlcmF0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgbW9kaWZpY2F0aW9ucyB0aGVyZS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgd2hhdCBlbHNlIGlzIHBvdGVudGlhbGx5IGFmZmVjdGVkLiBMZXQncyBzZWUuLi4gYGhmc19ibm9kZV9maW5kYCBhbmQgYGhmc19icmVjX3JlbW92ZWAuIEludGVyZXN0aW5nLiBBbHJpZ2h0LCBsZXQncyBzdGFydCBieSBkaWdnaW5nIGludG8gYGhmc19ibm9kZV9maW5kYCBhbmQgc2VlIHdoYXQgaXQgaXMgZG9pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNTEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTE6MDY6MzkuMjI3NDIyNDg1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzUzNzU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoZnNfYm5vZGVfZmluZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9oZnNwbHVzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9oZnNwbHVzL2JmaW5kLmM9MTU1PWludCBoZnNfYnJlY19maW5kKHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgc2VhcmNoX3N0cmF0ZWd5X3QgZG9fa2V5X2NvbXBhcmUpXFxuLS1cXG5mcy9oZnNwbHVzL2JmaW5kLmMtMTc5LVxcdGZvciAoOzspIHtcXG5mcy9oZnNwbHVzL2JmaW5kLmM6MTgwOlxcdFxcdGJub2RlID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgbmlkeCk7XFxuZnMvaGZzcGx1cy9iZmluZC5jLTE4MS1cXHRcXHRpZiAoSVNfRVJSKGJub2RlKSkge1xcbi0tXFxuZnMvaGZzcGx1cy9iZmluZC5jPTIyOD1pbnQgaGZzX2JyZWNfZ290byhzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIGludCBjbnQpXFxuLS1cXG5mcy9oZnNwbHVzL2JmaW5kLmMtMjUyLVxcdFxcdFxcdGhmc19ibm9kZV9wdXQoYm5vZGUpO1xcbmZzL2hmc3BsdXMvYmZpbmQuYzoyNTM6XFx0XFx0XFx0Ym5vZGUgPSBoZnNfYm5vZGVfZmluZCh0cmVlLCBpZHgpO1xcbmZzL2hmc3BsdXMvYmZpbmQuYy0yNTQtXFx0XFx0XFx0aWYgKElTX0VSUihibm9kZSkpIHtcXG4tLVxcbmZzL2hmc3BsdXMvYmZpbmQuYy0yNzAtXFx0XFx0XFx0aGZzX2Jub2RlX3B1dChibm9kZSk7XFxuZnMvaGZzcGx1cy9iZmluZC5jOjI3MTpcXHRcXHRcXHRibm9kZSA9IGhmc19ibm9kZV9maW5kKHRyZWUsIGlkeCk7XFxuZnMvaGZzcGx1cy9iZmluZC5jLTI3Mi1cXHRcXHRcXHRpZiAoSVNfRVJSKGJub2RlKSkge1xcbi0tXFxuZnMvaGZzcGx1cy9ibm9kZS5jPTM5ND12b2lkIGhmc19ibm9kZV91bmxpbmsoc3RydWN0IGhmc19ibm9kZSAqbm9kZSlcXG4tLVxcbmZzL2hmc3BsdXMvYm5vZGUuYy00MDEtXFx0aWYgKG5vZGUtXFx1MDAzZXByZXYpIHtcXG5mcy9oZnNwbHVzL2Jub2RlLmM6NDAyOlxcdFxcdHRtcCA9IGhmc19ibm9kZV9maW5kKHRyZWUsIG5vZGUtXFx1MDAzZXByZXYpO1xcbmZzL2hmc3BsdXMvYm5vZGUuYy00MDMtXFx0XFx0aWYgKElTX0VSUih0bXApKVxcbi0tXFxuZnMvaGZzcGx1cy9ibm9kZS5jLTQxMy1cXHRpZiAobm9kZS1cXHUwMDNlbmV4dCkge1xcbmZzL2hmc3BsdXMvYm5vZGUuYzo0MTQ6XFx0XFx0dG1wID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgbm9kZS1cXHUwMDNlbmV4dCk7XFxuZnMvaGZzcGx1cy9ibm9kZS5jLTQxNS1cXHRcXHRpZiAoSVNfRVJSKHRtcCkpXFxuLS1cXG5mcy9oZnNwbHVzL2Jub2RlLmM9NDM4PXN0YXRpYyBpbmxpbmUgaW50IGhmc19ibm9kZV9oYXNoKHUzMiBudW0pXFxuLS1cXG5mcy9oZnNwbHVzL2Jub2RlLmMtNDQ0LVxcbmZzL2hmc3BsdXMvYm5vZGUuYzo0NDU6c3RydWN0IGhmc19ibm9kZSAqaGZzX2Jub2RlX2ZpbmRoYXNoKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUsIHUzMiBjbmlkKVxcbmZzL2hmc3BsdXMvYm5vZGUuYy00NDYte1xcbi0tXFxuZnMvaGZzcGx1cy9ibm9kZS5jPTQ2Mj1zdGF0aWMgc3RydWN0IGhmc19ibm9kZSAqX19oZnNfYm5vZGVfY3JlYXRlKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUsIHUzMiBjbmlkKVxcbi0tXFxuZnMvaGZzcGx1cy9ibm9kZS5jLTQ4Ni1cXHRzcGluX2xvY2soXFx1MDAyNnRyZWUtXFx1MDAzZWhhc2hfbG9jayk7XFxuZnMvaGZzcGx1cy9ibm9kZS5jOjQ4NzpcXHRub2RlMiA9IGhmc19ibm9kZV9maW5kaGFzaCh0cmVlLCBjbmlkKTtcXG5mcy9oZnNwbHVzL2Jub2RlLmMtNDg4LVxcdGlmICghbm9kZTIpIHtcXG4tLVxcbmZzL2hmc3BsdXMvYm5vZGUuYz01MjA9dm9pZCBoZnNfYm5vZGVfdW5oYXNoKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUpXFxuLS1cXG5mcy9oZnNwbHVzL2Jub2RlLmMtNTM0LS8qIExvYWQgYSBwYXJ0aWN1bGFyIG5vZGUgb3V0IG9mIGEgdHJlZSAqL1xcbmZzL2hmc3BsdXMvYm5vZGUuYzo1MzU6c3RydWN0IGhmc19ibm9kZSAqaGZzX2Jub2RlX2ZpbmQoc3RydWN0IGhmc19idHJlZSAqdHJlZSwgdTMyIG51bSlcXG5mcy9oZnNwbHVzL2Jub2RlLmMtNTM2LXtcXG4tLVxcbmZzL2hmc3BsdXMvYm5vZGUuYy01NDItXFx0c3Bpbl9sb2NrKFxcdTAwMjZ0cmVlLVxcdTAwM2VoYXNoX2xvY2spO1xcbmZzL2hmc3BsdXMvYm5vZGUuYzo1NDM6XFx0bm9kZSA9IGhmc19ibm9kZV9maW5kaGFzaCh0cmVlLCBudW0pO1xcbmZzL2hmc3BsdXMvYm5vZGUuYy01NDQtXFx0aWYgKG5vZGUpIHtcXG4tLVxcbmZzL2hmc3BsdXMvYm5vZGUuYz02MzQ9c3RydWN0IGhmc19ibm9kZSAqaGZzX2Jub2RlX2NyZWF0ZShzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlLCB1MzIgbnVtKVxcbi0tXFxuZnMvaGZzcGx1cy9ibm9kZS5jLTY0MC1cXHRzcGluX2xvY2soXFx1MDAyNnRyZWUtXFx1MDAzZWhhc2hfbG9jayk7XFxuZnMvaGZzcGx1cy9ibm9kZS5jOjY0MTpcXHRub2RlID0gaGZzX2Jub2RlX2ZpbmRoYXNoKHRyZWUsIG51bSk7XFxuZnMvaGZzcGx1cy9ibm9kZS5jLTY0Mi1cXHRzcGluX3VubG9jayhcXHUwMDI2dHJlZS1cXHUwMDNlaGFzaF9sb2NrKTtcXG4tLVxcbmZzL2hmc3BsdXMvYnJlYy5jPTgxPWludCBoZnNfYnJlY19pbnNlcnQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLCB2b2lkICplbnRyeSwgdTMyIGVudHJ5X2xlbilcXG4tLVxcbmZzL2hmc3BsdXMvYnJlYy5jLTkzLVxcdFxcdFxcdGhmc19idHJlZV9pbmNfaGVpZ2h0KHRyZWUpO1xcbmZzL2hmc3BsdXMvYnJlYy5jOjk0OlxcdFxcdG5vZGUgPSBoZnNfYm5vZGVfZmluZCh0cmVlLCB0cmVlLVxcdTAwM2VsZWFmX2hlYWQpO1xcbmZzL2hmc3BsdXMvYnJlYy5jLTk1LVxcdFxcdGlmIChJU19FUlIobm9kZSkpXFxuLS1cXG5mcy9oZnNwbHVzL2JyZWMuYy0xNjgtXFx0XFx0fVxcbmZzL2hmc3BsdXMvYnJlYy5jOjE2OTpcXHRcXHRmZC1cXHUwMDNlYm5vZGUgPSBoZnNfYm5vZGVfZmluZCh0cmVlLCBuZXdfbm9kZS1cXHUwMDNlcGFyZW50KTtcXG5mcy9oZnNwbHVzL2JyZWMuYy0xNzAtXFxuLS1cXG5mcy9oZnNwbHVzL2JyZWMuYz0xOTc9aW50IGhmc19icmVjX3JlbW92ZShzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXFxuLS1cXG5mcy9oZnNwbHVzL2JyZWMuYy0yMjYtXFx0XFx0XFx0cmV0dXJuIDA7XFxuZnMvaGZzcGx1cy9icmVjLmM6MjI3OlxcdFxcdHBhcmVudCA9IGhmc19ibm9kZV9maW5kKHRyZWUsIG5vZGUtXFx1MDAzZXBhcmVudCk7XFxuZnMvaGZzcGx1cy9icmVjLmMtMjI4LVxcdFxcdGlmIChJU19FUlIocGFyZW50KSlcXG4tLVxcbmZzL2hmc3BsdXMvYnJlYy5jPTI2MD1zdGF0aWMgc3RydWN0IGhmc19ibm9kZSAqaGZzX2Jub2RlX3NwbGl0KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcXG4tLVxcbmZzL2hmc3BsdXMvYnJlYy5jLTI4NS1cXHRpZiAobm9kZS1cXHUwMDNlbmV4dClcXG5mcy9oZnNwbHVzL2JyZWMuYzoyODY6XFx0XFx0bmV4dF9ub2RlID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgbm9kZS1cXHUwMDNlbmV4dCk7XFxuZnMvaGZzcGx1cy9icmVjLmMtMjg3LVxcdGVsc2VcXG4tLVxcbmZzL2hmc3BsdXMvYnJlYy5jPTM4OT1zdGF0aWMgaW50IGhmc19icmVjX3VwZGF0ZV9wYXJlbnQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxcbi0tXFxuZnMvaGZzcGx1cy9icmVjLmMtNDAzLWFnYWluOlxcbmZzL2hmc3BsdXMvYnJlYy5jOjQwNDpcXHRwYXJlbnQgPSBoZnNfYm5vZGVfZmluZCh0cmVlLCBub2RlLVxcdTAwM2VwYXJlbnQpO1xcbmZzL2hmc3BsdXMvYnJlYy5jLTQwNS1cXHRpZiAoSVNfRVJSKHBhcmVudCkpXFxuLS1cXG5mcy9oZnNwbHVzL2JyZWMuYy00NjgtXFx0XFx0fVxcbmZzL2hmc3BsdXMvYnJlYy5jOjQ2OTpcXHRcXHRmZC1cXHUwMDNlYm5vZGUgPSBoZnNfYm5vZGVfZmluZCh0cmVlLCBuZXdfbm9kZS1cXHUwMDNlcGFyZW50KTtcXG5mcy9oZnNwbHVzL2JyZWMuYy00NzAtXFx0XFx0LyogY3JlYXRlIGluZGV4IGtleSBhbmQgZW50cnkgKi9cXG4tLVxcbmZzL2hmc3BsdXMvYnJlYy5jPTQ5NT1zdGF0aWMgaW50IGhmc19idHJlZV9pbmNfaGVpZ2h0KHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUpXFxuLS1cXG5mcy9oZnNwbHVzL2JyZWMuYy01MDMtXFx0aWYgKHRyZWUtXFx1MDAzZXJvb3QpIHtcXG5mcy9oZnNwbHVzL2JyZWMuYzo1MDQ6XFx0XFx0bm9kZSA9IGhmc19ibm9kZV9maW5kKHRyZWUsIHRyZWUtXFx1MDAzZXJvb3QpO1xcbmZzL2hmc3BsdXMvYnJlYy5jLTUwNS1cXHRcXHRpZiAoSVNfRVJSKG5vZGUpKVxcbi0tXFxuZnMvaGZzcGx1cy9idHJlZS5jPTI2OD1zdHJ1Y3QgaGZzX2J0cmVlICpoZnNfYnRyZWVfb3BlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgaWQpXFxuLS1cXG5mcy9oZnNwbHVzL2J0cmVlLmMtMzgzLVxcbmZzL2hmc3BsdXMvYnRyZWUuYzozODQ6XFx0bm9kZSA9IGhmc19ibm9kZV9maW5kKHRyZWUsIEhGU1BMVVNfVFJFRV9IRUFEKTtcXG5mcy9oZnNwbHVzL2J0cmVlLmMtMzg1LVxcdGlmIChJU19FUlIobm9kZSkpXFxuLS1cXG5mcy9oZnNwbHVzL2J0cmVlLmM9NDM1PWludCBoZnNfYnRyZWVfd3JpdGUoc3RydWN0IGhmc19idHJlZSAqdHJlZSlcXG4tLVxcbmZzL2hmc3BsdXMvYnRyZWUuYy00NDAtXFxuZnMvaGZzcGx1cy9idHJlZS5jOjQ0MTpcXHRub2RlID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgMCk7XFxuZnMvaGZzcGx1cy9idHJlZS5jLTQ0Mi1cXHRpZiAoSVNfRVJSKG5vZGUpKVxcbi0tXFxuZnMvaGZzcGx1cy9idHJlZS5jPTUyOD1zdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm1hcF9hbGxvYyhzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKVxcbi0tXFxuZnMvaGZzcGx1cy9idHJlZS5jLTU0My1cXHRuaWR4ID0gMDtcXG5mcy9oZnNwbHVzL2J0cmVlLmM6NTQ0OlxcdG5vZGUgPSBoZnNfYm5vZGVfZmluZCh0cmVlLCBuaWR4KTtcXG5mcy9oZnNwbHVzL2J0cmVlLmMtNTQ1LVxcdGlmIChJU19FUlIobm9kZSkpXFxuLS1cXG5mcy9oZnNwbHVzL2J0cmVlLmMtNTkyLVxcdFxcdH0gZWxzZVxcbmZzL2hmc3BsdXMvYnRyZWUuYzo1OTM6XFx0XFx0XFx0bmV4dF9ub2RlID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgbmlkeCk7XFxuZnMvaGZzcGx1cy9idHJlZS5jLTU5NC1cXHRcXHRoZnNfYm5vZGVfcHV0KG5vZGUpO1xcbi0tXFxuZnMvaGZzcGx1cy9idHJlZS5jPTYwOT12b2lkIGhmc19ibWFwX2ZyZWUoc3RydWN0IGhmc19ibm9kZSAqbm9kZSlcXG4tLVxcbmZzL2hmc3BsdXMvYnRyZWUuYy02MjAtXFx0bmlkeCA9IG5vZGUtXFx1MDAzZXRoaXM7XFxuZnMvaGZzcGx1cy9idHJlZS5jOjYyMTpcXHRub2RlID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgMCk7XFxuZnMvaGZzcGx1cy9idHJlZS5jLTYyMi1cXHRpZiAoSVNfRVJSKG5vZGUpKVxcbi0tXFxuZnMvaGZzcGx1cy9idHJlZS5jLTYzOC1cXHRcXHRoZnNfYm5vZGVfcHV0KG5vZGUpO1xcbmZzL2hmc3BsdXMvYnRyZWUuYzo2Mzk6XFx0XFx0bm9kZSA9IGhmc19ibm9kZV9maW5kKHRyZWUsIGkpO1xcbmZzL2hmc3BsdXMvYnRyZWUuYy02NDAtXFx0XFx0aWYgKElTX0VSUihub2RlKSlcXG4tLVxcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oPTI4MD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGhmc3BsdXNfbWluX2lvX3NpemUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTMwMi0jZGVmaW5lIGhmc19ibm9kZV91bmxpbmsgaGZzcGx1c19ibm9kZV91bmxpbmtcXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaDozMDM6I2RlZmluZSBoZnNfYm5vZGVfZmluZGhhc2ggaGZzcGx1c19ibm9kZV9maW5kaGFzaFxcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oOjMwNDojZGVmaW5lIGhmc19ibm9kZV9maW5kIGhmc3BsdXNfYm5vZGVfZmluZFxcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTMwNS0jZGVmaW5lIGhmc19ibm9kZV91bmhhc2ggaGZzcGx1c19ibm9kZV91bmhhc2hcXG4tLVxcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oPTM4Mj12b2lkIGhmc19ibm9kZV91bmxpbmsoc3RydWN0IGhmc19ibm9kZSAqbm9kZSk7XFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg6MzgzOnN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibm9kZV9maW5kaGFzaChzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlLCB1MzIgY25pZCk7XFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMzg0LXZvaWQgaGZzX2Jub2RlX3VuaGFzaChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlKTtcXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaDozODU6c3RydWN0IGhmc19ibm9kZSAqaGZzX2Jub2RlX2ZpbmQoc3RydWN0IGhmc19idHJlZSAqdHJlZSwgdTMyIG51bSk7XFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMzg2LXZvaWQgaGZzX2Jub2RlX2ZyZWUoc3RydWN0IGhmc19ibm9kZSAqbm9kZSk7XFxuLS1cXG5mcy9oZnNwbHVzL2lub2RlLmM9NjI9c3RhdGljIGJvb2wgaGZzcGx1c19yZWxlYXNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IG1hc2spXFxuLS1cXG5mcy9oZnNwbHVzL2lub2RlLmMtOTEtXFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZ0cmVlLVxcdTAwM2VoYXNoX2xvY2spO1xcbmZzL2hmc3BsdXMvaW5vZGUuYzo5MjpcXHRcXHRub2RlID0gaGZzX2Jub2RlX2ZpbmRoYXNoKHRyZWUsIG5pZHgpO1xcbmZzL2hmc3BsdXMvaW5vZGUuYy05My1cXHRcXHRpZiAoIW5vZGUpXFxuLS1cXG5mcy9oZnNwbHVzL2lub2RlLmMtMTA3LVxcdFxcdGRvIHtcXG5mcy9oZnNwbHVzL2lub2RlLmM6MTA4OlxcdFxcdFxcdG5vZGUgPSBoZnNfYm5vZGVfZmluZGhhc2godHJlZSwgbmlkeCsrKTtcXG5mcy9oZnNwbHVzL2lub2RlLmMtMTA5LVxcdFxcdFxcdGlmICghbm9kZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTE6MDY6MzkuMzMwOTY5MTY1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTIzMzU3MTQ3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIE9wdGltaXphdGlvbiBUYXJnZXRzKipcblxuT2theSwgc28gYGhmc19ibm9kZV9maW5kYCBpcyBwcmV0dHkgdWJpcXVpdG91cyB3aXRoaW4gdGhpcyBjb2RlYmFzZS4gSXQncyB1c2VkIGFsbCBvdmVyIHRoZSBwbGFjZSwgd2hpY2ggbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIHBlcmZvcm1hbmNlIHR1bmluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gZnVuY3Rpb25zIHRoYXQgZGlyZWN0bHkgaW50ZXJhY3Qgd2l0aCB0aGF0LiBgX19oZnNfYnJlY19maW5kYCBhbmQgYGhmc19icmVjX2dvdG9gIGJvdGggc2VlbSBsaWtlIHN0cm9uZyBwb3NzaWJpbGl0aWVzIGZvciBvcHRpbWl6YXRpb24sIGdpdmVuIHRoZWlyIGxpa2VseSByZWxhdGlvbnNoaXAgd2l0aCB0aGUgY29yZSBzZWFyY2ggZnVuY3Rpb25hbGl0eS4gYGhmc19icmVjX3JlbW92ZWAgYWxzbyBjYXRjaGVzIG15IGV5ZSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhhdCwgZXZlbiB0aG91Z2ggaXQgbWF5IGhhdmUgbGVzcyBpbXBhY3Qgb24gZ2VuZXJhbCBzZWFyY2ggYW5kIGxvb2t1cC4gRm9yIG5vdywgbGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBoZnNfYnJlY19yZW1vdmVgIHRvIHNlZSB3aGF0IGtpbmQgb2YgaW1wYWN0IGl0cyBvcHRpbWl6YXRpb24gbWF5IGhhdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzYyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTE6MDY6NDguNTY0NTQ1MzI2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI3MzE3ODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhmc19icmVjX3JlbW92ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9oZnNwbHVzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYz0zMDU9c3RhdGljIGludCBfX2hmc3BsdXNfZGVsZXRlX2F0dHIoc3RydWN0IGlub2RlICppbm9kZSwgdTMyIGNuaWQsXFxuLS1cXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYy0zMzgtXFxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmM6MzM5OlxcdGVyciA9IGhmc19icmVjX3JlbW92ZShmZCk7XFxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmMtMzQwLVxcdGlmIChlcnIpXFxuLS1cXG5mcy9oZnNwbHVzL2JyZWMuYz04MT1pbnQgaGZzX2JyZWNfaW5zZXJ0KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgdm9pZCAqZW50cnksIHUzMiBlbnRyeV9sZW4pXFxuLS1cXG5mcy9oZnNwbHVzL2JyZWMuYy0xOTYtXFxuZnMvaGZzcGx1cy9icmVjLmM6MTk3OmludCBoZnNfYnJlY19yZW1vdmUoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxcbmZzL2hmc3BsdXMvYnJlYy5jLTE5OC17XFxuLS1cXG5mcy9oZnNwbHVzL2NhdGFsb2cuYz0yNTM9aW50IGhmc3BsdXNfY3JlYXRlX2NhdCh1MzIgY25pZCwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9oZnNwbHVzL2NhdGFsb2cuYy0zMjQtXFx0aWYgKCFoZnNfYnJlY19maW5kKFxcdTAwMjZmZCwgaGZzX2ZpbmRfcmVjX2J5X2tleSkpXFxuZnMvaGZzcGx1cy9jYXRhbG9nLmM6MzI1OlxcdFxcdGhmc19icmVjX3JlbW92ZShcXHUwMDI2ZmQpO1xcbmZzL2hmc3BsdXMvY2F0YWxvZy5jLTMyNi1lcnIyOlxcbi0tXFxuZnMvaGZzcGx1cy9jYXRhbG9nLmM9MzMxPWludCBoZnNwbHVzX2RlbGV0ZV9jYXQodTMyIGNuaWQsIHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqc3RyKVxcbi0tXFxuZnMvaGZzcGx1cy9jYXRhbG9nLmMtMzkzLVxcbmZzL2hmc3BsdXMvY2F0YWxvZy5jOjM5NDpcXHRlcnIgPSBoZnNfYnJlY19yZW1vdmUoXFx1MDAyNmZkKTtcXG5mcy9oZnNwbHVzL2NhdGFsb2cuYy0zOTUtXFx0aWYgKGVycilcXG4tLVxcbmZzL2hmc3BsdXMvY2F0YWxvZy5jLTQwMi1cXG5mcy9oZnNwbHVzL2NhdGFsb2cuYzo0MDM6XFx0ZXJyID0gaGZzX2JyZWNfcmVtb3ZlKFxcdTAwMjZmZCk7XFxuZnMvaGZzcGx1cy9jYXRhbG9nLmMtNDA0LVxcdGlmIChlcnIpXFxuLS1cXG5mcy9oZnNwbHVzL2NhdGFsb2cuYz00MjU9aW50IGhmc3BsdXNfcmVuYW1lX2NhdCh1MzIgY25pZCxcXG4tLVxcbmZzL2hmc3BsdXMvY2F0YWxvZy5jLTQ5OC1cXHRcXHRnb3RvIG91dDtcXG5mcy9oZnNwbHVzL2NhdGFsb2cuYzo0OTk6XFx0ZXJyID0gaGZzX2JyZWNfcmVtb3ZlKFxcdTAwMjZzcmNfZmQpO1xcbmZzL2hmc3BsdXMvY2F0YWxvZy5jLTUwMC1cXHRpZiAoZXJyKVxcbi0tXFxuZnMvaGZzcGx1cy9jYXRhbG9nLmMtNTEyLVxcdHR5cGUgPSBoZnNfYm5vZGVfcmVhZF91MTYoc3JjX2ZkLmJub2RlLCBzcmNfZmQuZW50cnlvZmZzZXQpO1xcbmZzL2hmc3BsdXMvY2F0YWxvZy5jOjUxMzpcXHRlcnIgPSBoZnNfYnJlY19yZW1vdmUoXFx1MDAyNnNyY19mZCk7XFxuZnMvaGZzcGx1cy9jYXRhbG9nLmMtNTE0LVxcdGlmIChlcnIpXFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYz0zOTM9aW50IGhmc3BsdXNfZnJlZV9mb3JrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBjbmlkLFxcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtNDIzLVxcdFxcdHN0YXJ0ID0gYmUzMl90b19jcHUoZmQua2V5LVxcdTAwM2VleHQuc3RhcnRfYmxvY2spO1xcbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjQyNDpcXHRcXHRoZnNfYnJlY19yZW1vdmUoXFx1MDAyNmZkKTtcXG5mcy9oZnNwbHVzL2V4dGVudHMuYy00MjUtXFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYz01NDQ9dm9pZCBoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTYwNi1cXHRcXHRpZiAoYmxrX2NudCBcXHUwMDNjPSBzdGFydClcXG5mcy9oZnNwbHVzL2V4dGVudHMuYzo2MDc6XFx0XFx0XFx0aGZzX2JyZWNfcmVtb3ZlKFxcdTAwMjZmZCk7XFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtNjA4LVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZmQudHJlZS1cXHUwMDNldHJlZV9sb2NrKTtcXG4tLVxcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oPTI4MD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGhmc3BsdXNfbWluX2lvX3NpemUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTMxMi0jZGVmaW5lIGhmc19icmVjX2luc2VydCBoZnNwbHVzX2JyZWNfaW5zZXJ0XFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg6MzEzOiNkZWZpbmUgaGZzX2JyZWNfcmVtb3ZlIGhmc3BsdXNfYnJlY19yZW1vdmVcXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC0zMTQtI2RlZmluZSBoZnNfZmluZF9pbml0IGhmc3BsdXNfZmluZF9pbml0XFxuLS1cXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaD0zOTU9aW50IGhmc19icmVjX2luc2VydChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIHZvaWQgKmVudHJ5LCB1MzIgZW50cnlfbGVuKTtcXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaDozOTY6aW50IGhmc19icmVjX3JlbW92ZShzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpO1xcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTM5Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTE6MDY6NTAuMTkxODcyODg4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODEwMjYzNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBQb3RlbnRpYWw6IGhmc19icmVjX3JlbW92ZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBoZnNfYnJlY19yZW1vdmVgIGFuZCB0aGlua2luZyBhYm91dCBpdHMgcG90ZW50aWFsIGZvciBmdXp6aW5nLiBJJ3ZlIG5vdGljZWQgaXQncyBjYWxsZWQgZnJvbSBhIHNpZ25pZmljYW50IG51bWJlciBvZiBmdW5jdGlvbnMgd2l0aGluIHRoZSBIRlMrIGNvZGU6IGBfX2hmc3BsdXNfZGVsZXRlX2F0dHJgLCB0aGUgZXJyb3IgcGF0aHMgaW4gYGhmc3BsdXNfY3JlYXRlX2NhdGAsIGBoZnNwbHVzX2RlbGV0ZV9jYXRgLCBgaGZzcGx1c19yZW5hbWVfY2F0YCwgYGhmc3BsdXNfZnJlZV9mb3JrYCwgYW5kIGBoZnNwbHVzX2ZpbGVfdHJ1bmNhdGVgLiBUaGF0J3MgYSBwcmV0dHkgZGl2ZXJzZSBzZXQgb2YgY29udGV4dHMsIHdoaWNoIHN1Z2dlc3RzIGl0IGludGVyYWN0cyB3aXRoIGEgbG90IG9mIGRpZmZlcmVudCBkYXRhIHN0cnVjdHVyZXMgYW5kIGxvZ2ljIHBhdGhzLiBUaGlzIG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlLCBpbiBteSB2aWV3LCBiZWNhdXNlIGZ1enppbmcgaXQgaXMgbGlrZWx5IHRvIGV4cG9zZSBhIHJhbmdlIG9mIHZ1bG5lcmFiaWxpdGllcy5cblxuTm93LCBsZXQncyB0dXJuIG91ciBhdHRlbnRpb24gdG8gaXRzIGNvbXBhbmlvbiBmdW5jdGlvbiwgYF9faGZzX2JyZWNfZmluZGAuIEknbSBjdXJpb3VzIHRvIHNlZSBob3cgaXQgd29ya3MgYW5kIGNvbnNpZGVyIHdoZXRoZXIgdGhhdCBmdW5jdGlvbiBpcyBhbm90aGVyIGdvb2QgdGFyZ2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjI0NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDExOjA2OjUzLjc3MjkwMjYxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjkyNDgyMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19oZnNfYnJlY19maW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2hmc3BsdXMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2hmc3BsdXMvYmZpbmQuYz04MT1pbnQgaGZzX2ZpbmRfcmVjX2J5X2tleShzdHJ1Y3QgaGZzX2Jub2RlICpibm9kZSxcXG4tLVxcbmZzL2hmc3BsdXMvYmZpbmQuYy0xMDItLyogRmluZCB0aGUgcmVjb3JkIGluIGJub2RlIHRoYXQgYmVzdCBtYXRjaGVzIGtleSAobm90IGdyZWF0ZXIgdGhhbi4uLikqL1xcbmZzL2hmc3BsdXMvYmZpbmQuYzoxMDM6aW50IF9faGZzX2JyZWNfZmluZChzdHJ1Y3QgaGZzX2Jub2RlICpibm9kZSwgc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLFxcbmZzL2hmc3BsdXMvYmZpbmQuYy0xMDQtXFx0XFx0XFx0XFx0XFx0c2VhcmNoX3N0cmF0ZWd5X3QgcmVjX2ZvdW5kKVxcbi0tXFxuZnMvaGZzcGx1cy9iZmluZC5jPTE1NT1pbnQgaGZzX2JyZWNfZmluZChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIHNlYXJjaF9zdHJhdGVneV90IGRvX2tleV9jb21wYXJlKVxcbi0tXFxuZnMvaGZzcGx1cy9iZmluZC5jLTE5MS1cXG5mcy9oZnNwbHVzL2JmaW5kLmM6MTkyOlxcdFxcdHJlcyA9IF9faGZzX2JyZWNfZmluZChibm9kZSwgZmQsIGRvX2tleV9jb21wYXJlKTtcXG5mcy9oZnNwbHVzL2JmaW5kLmMtMTkzLVxcdFxcdGlmICghaGVpZ2h0KVxcbi0tXFxuZnMvaGZzcGx1cy9icmVjLmM9ODE9aW50IGhmc19icmVjX2luc2VydChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIHZvaWQgKmVudHJ5LCB1MzIgZW50cnlfbGVuKVxcbi0tXFxuZnMvaGZzcGx1cy9icmVjLmMtMTc3LVxcdFxcdGhmc19ibm9kZV9yZWFkX2tleShuZXdfbm9kZSwgZmQtXFx1MDAzZXNlYXJjaF9rZXksIDE0KTtcXG5mcy9oZnNwbHVzL2JyZWMuYzoxNzg6XFx0XFx0X19oZnNfYnJlY19maW5kKGZkLVxcdTAwM2Vibm9kZSwgZmQsIGhmc19maW5kX3JlY19ieV9rZXkpO1xcbmZzL2hmc3BsdXMvYnJlYy5jLTE3OS1cXG4tLVxcbmZzL2hmc3BsdXMvYnJlYy5jPTE5Nz1pbnQgaGZzX2JyZWNfcmVtb3ZlKHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcXG4tLVxcbmZzL2hmc3BsdXMvYnJlYy5jLTIzMi1cXG5mcy9oZnNwbHVzL2JyZWMuYzoyMzM6XFx0XFx0X19oZnNfYnJlY19maW5kKG5vZGUsIGZkLCBoZnNfZmluZF9yZWNfYnlfa2V5KTtcXG5mcy9oZnNwbHVzL2JyZWMuYy0yMzQtXFx0XFx0Z290byBhZ2FpbjtcXG4tLVxcbmZzL2hmc3BsdXMvYnJlYy5jPTM4OT1zdGF0aWMgaW50IGhmc19icmVjX3VwZGF0ZV9wYXJlbnQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxcbi0tXFxuZnMvaGZzcGx1cy9icmVjLmMtNDA2LVxcdFxcdHJldHVybiBQVFJfRVJSKHBhcmVudCk7XFxuZnMvaGZzcGx1cy9icmVjLmM6NDA3OlxcdF9faGZzX2JyZWNfZmluZChwYXJlbnQsIGZkLCBoZnNfZmluZF9yZWNfYnlfa2V5KTtcXG5mcy9oZnNwbHVzL2JyZWMuYy00MDgtXFx0aWYgKGZkLVxcdTAwM2VyZWNvcmQgXFx1MDAzYyAwKVxcbi0tXFxuZnMvaGZzcGx1cy9icmVjLmMtNDczLVxcbmZzL2hmc3BsdXMvYnJlYy5jOjQ3NDpcXHRcXHRfX2hmc19icmVjX2ZpbmQoZmQtXFx1MDAzZWJub2RlLCBmZCwgaGZzX2ZpbmRfcmVjX2J5X2tleSk7XFxuZnMvaGZzcGx1cy9icmVjLmMtNDc1LVxcdFxcdGhmc19icmVjX2luc2VydChmZCwgXFx1MDAyNmNuaWQsIHNpemVvZihjbmlkKSk7XFxuLS1cXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaD0yODA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBoZnNwbHVzX21pbl9pb19zaXplKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC0zMTUtI2RlZmluZSBoZnNfZmluZF9leGl0IGhmc3BsdXNfZmluZF9leGl0XFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg6MzE2OiNkZWZpbmUgX19oZnNfYnJlY19maW5kIF9faGZzcGx1c19icmVjX2ZpbmRcXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC0zMTctI2RlZmluZSBoZnNfYnJlY19maW5kIGhmc3BsdXNfYnJlY19maW5kXFxuLS1cXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaD00MDM9aW50IGhmc19maW5kX3JlY19ieV9rZXkoc3RydWN0IGhmc19ibm9kZSAqYm5vZGUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCxcXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC00MDQtXFx0XFx0XFx0aW50ICpiZWdpbiwgaW50ICplbmQsIGludCAqY3VyX3JlYyk7XFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg6NDA1OmludCBfX2hmc19icmVjX2ZpbmQoc3RydWN0IGhmc19ibm9kZSAqYm5vZGUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCxcXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC00MDYtXFx0XFx0ICAgIHNlYXJjaF9zdHJhdGVneV90IHJlY19mb3VuZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDExOjA2OjU0LjIwMjE2NTE0OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODA0NzUyODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6XG5cbioqQW5hbHl6aW5nIENvcmUgSEZTIEItVHJlZSBGdW5jdGlvbmFsaXR5KipcblxuQWxyaWdodCwgbGV0J3MgemVybyBpbiBvbiB0aGlzIGBfX2hmc19icmVjX2ZpbmRgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdHMgd2lkZXNwcmVhZCB1c2Ugc3VnZ2VzdHMgaXQncyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBIRlMgQi10cmVlIHB1enpsZS4gVGhlIGZhY3QgdGhhdCBpdCdzIGNhbGxlZCB3aXRoaW4gYGhmc19icmVjX2ZpbmRgIGl0c2VsZiwgYnV0IGFsc28gaW4gYGhmc19icmVjX2luc2VydGAsIGBoZnNfYnJlY19yZW1vdmVgLCBhbmQgZXZlbiBgaGZzX2JyZWNfdXBkYXRlX3BhcmVudGAuLi4gd2VsbCwgdGhhdCdzIGEgcHJldHR5IHN0cm9uZyBpbmRpY2F0b3Igb2YgYSBjb3JlIGZ1bmN0aW9uLiBJdCdzIGVzc2VudGlhbGx5IHRoZSBmb3VuZGF0aW9uLiBXZSBjYW4gZXhwZWN0IHRoaXMgdG8gYmUgYSBrZXkgZWxlbWVudCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIEItVHJlZSdzIGZ1bmRhbWVudGFsIHRhc2tzIGFyZSBpbXBsZW1lbnRlZC5cblxuR2l2ZW4gaXRzIHBlcnZhc2l2ZSBuYXR1cmUsIEkgdGhpbmsgd2Ugc2hvdWxkIGNoZWNrIGBoZnNfYnJlY19nb3RvYC4gSXQgaXMgYWx3YXlzIGEgZ29vZCBpZGVhIHRvIGNyb3NzLXJlZmVyZW5jZSByZWxhdGVkIGNvbXBvbmVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjg1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTE6MDY6NTguMDA2OTIyODc4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzY0MDA4MDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGZzX2JyZWNfZ290b1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9oZnNwbHVzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9oZnNwbHVzL2JmaW5kLmM9MjE1PWludCBoZnNfYnJlY19yZWFkKHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgdm9pZCAqcmVjLCB1MzIgcmVjX2xlbilcXG4tLVxcbmZzL2hmc3BsdXMvYmZpbmQuYy0yMjctXFxuZnMvaGZzcGx1cy9iZmluZC5jOjIyODppbnQgaGZzX2JyZWNfZ290byhzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIGludCBjbnQpXFxuZnMvaGZzcGx1cy9iZmluZC5jLTIyOS17XFxuLS1cXG5mcy9oZnNwbHVzL2Rpci5jPTEzMD1zdGF0aWMgaW50IGhmc3BsdXNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXFxuLS1cXG5mcy9oZnNwbHVzL2Rpci5jLTE5Mi1cXHRcXHRpZiAoZXJyID09IC1FTk9FTlQpXFxuZnMvaGZzcGx1cy9kaXIuYzoxOTM6XFx0XFx0XFx0ZXJyID0gaGZzX2JyZWNfZ290byhcXHUwMDI2ZmQsIDEpO1xcbmZzL2hmc3BsdXMvZGlyLmMtMTk0LVxcdH0gZWxzZSB7XFxuZnMvaGZzcGx1cy9kaXIuYzoxOTU6XFx0XFx0ZXJyID0gaGZzX2JyZWNfZ290byhcXHUwMDI2ZmQsIGN0eC1cXHUwMDNlcG9zIC0gMSk7XFxuZnMvaGZzcGx1cy9kaXIuYy0xOTYtXFx0fVxcbi0tXFxuZnMvaGZzcGx1cy9kaXIuYy0yNjctXFx0XFx0XFx0Z290byBvdXQ7XFxuZnMvaGZzcGx1cy9kaXIuYzoyNjg6XFx0XFx0ZXJyID0gaGZzX2JyZWNfZ290byhcXHUwMDI2ZmQsIDEpO1xcbmZzL2hmc3BsdXMvZGlyLmMtMjY5LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaD0yODA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBoZnNwbHVzX21pbl9pb19zaXplKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC0zMTgtI2RlZmluZSBoZnNfYnJlY19yZWFkIGhmc3BsdXNfYnJlY19yZWFkXFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg6MzE5OiNkZWZpbmUgaGZzX2JyZWNfZ290byBoZnNwbHVzX2JyZWNfZ290b1xcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTMyMC0jZGVmaW5lIGhmc19wYXJ0X2ZpbmQgaGZzcGx1c19wYXJ0X2ZpbmRcXG4tLVxcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oPTQwOD1pbnQgaGZzX2JyZWNfcmVhZChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIHZvaWQgKnJlYywgdTMyIHJlY19sZW4pO1xcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oOjQwOTppbnQgaGZzX2JyZWNfZ290byhzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIGludCBjbnQpO1xcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTQxMC1cXG4tLVxcbmZzL2hmc3BsdXMveGF0dHIuYz04MDI9c3NpemVfdCBoZnNwbHVzX2xpc3R4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpXFxuLS1cXG5mcy9oZnNwbHVzL3hhdHRyLmMtODkxLVxcbmZzL2hmc3BsdXMveGF0dHIuYzo4OTI6XFx0XFx0aWYgKGhmc19icmVjX2dvdG8oXFx1MDAyNmZkLCAxKSlcXG5mcy9oZnNwbHVzL3hhdHRyLmMtODkzLVxcdFxcdFxcdGdvdG8gZW5kX2xpc3R4YXR0cjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTE6MDY6NTguMTgzMzMyNFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5OTI3MDI0ODU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEhGUysgQi1UcmVlIE5vZGUgRnVuY3Rpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgYGhmc19icmVjX2dvdG9gIGxvb2tlZCBwcm9taXNpbmcsIGFuZCBpdCdzIHVzZWQgd2l0aGluIGBoZnNwbHVzX3JlYWRkaXJgIGFuZCBgaGZzcGx1c19saXN0eGF0dHJgLCBzbyBpdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBjb25zaWRlcmVkIGV4cGFuZGluZyB0aGUgZm9jdXMgdG8gaW5jbHVkZSBgaGZzX2JyZWNfcmVtb3ZlYCBhbmQgYF9faGZzX2JyZWNfZmluZGAgYXMgd2VsbC5cblxuSSB0aGVuIHN0YXJ0ZWQgdG8gZXZhbHVhdGUgY2FuZGlkYXRlcyBhbmQgcXVpY2tseSByZWFsaXplZCB0aGUgaW1wb3J0YW5jZSBvZiBjaGVja2luZyB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlICptb2RpZmllZCosIHBhcnRpY3VsYXJseSBhcm91bmQgYGJub2RlLVx1MDAzZW51bV9yZWNzYCBvciBpdHMgdmFsaWRpdHkuIFR1cm5zIG91dCwgc2V2ZXJhbCBmdW5jdGlvbnMgYXJlIG1vZGlmaWVkOiBgX19oZnNfYnJlY19maW5kYCwgYGhmc19icmVjX2dvdG9gLCBgaGZzX2Jub2RlX2R1bXBgLCBgaGZzX2Jub2RlX2ZpbmRgLCBgaGZzX2JyZWNfbGVub2ZmYCwgYGhmc19icmVjX2tleWxlbmAsIGFuZCBgaGZzX2JyZWNfcmVtb3ZlYC5cblxuTm93LCBjb25zaWRlcmluZyBwZXJmb3JtYW5jZSwgYGhmc19icmVjX2xlbm9mZmAsIGBoZnNfYnJlY19rZXlsZW5gLCBhbmQgYGhmc19ibm9kZV9maW5kYCBhcmUgb24gdGhlIGhvdCBwYXRoLCBhbmQgYm90aCBgX19oZnNfYnJlY19maW5kYCBhbmQgYGhmc19icmVjX2dvdG9gIGFyZSBzdGlsbCBmcmVxdWVudGx5IGNhbGxlZC4gYGhmc19icmVjX3JlbW92ZWAsIG9uIHRoZSBvdGhlciBoYW5kLCBpcyBkZWZpbml0ZWx5IGxlc3MgcGVyZm9ybWFuY2UgY3JpdGljYWwuXG5cbkZvY3VzaW5nIGluIG9uIGZ1bmN0aW9uIGNvbnRleHQsIGBoZnNfYnJlY19nb3RvYCBpcyB1c2VkIGZvciBgcmVhZGRpcmAgYW5kIGBsaXN0eGF0dHJgIGNhbGxzLCB3aGlsZSBgaGZzX2JyZWNfcmVtb3ZlYCBpcyB0aWVkIHRvIGZpbGUgZGVsZXRpb24sIHJlbmFtZSwgYW5kIHRydW5jYXRlIG9wZXJhdGlvbnMuXG5cbkFmdGVyIGV2YWx1YXRpbmcgdGhlc2UgZmFjdG9ycywgSSdtIGxlYW5pbmcgdG93YXJkIHNlbGVjdGluZyBgaGZzX2JyZWNfcmVtb3ZlYCwgYGhmc19icmVjX2dvdG9gLCBhbmQgYF9faGZzX2JyZWNfZmluZGAgYXMgdGhlIHByaW1hcnkgZm9jdXMgZnVuY3Rpb25zLlxuXG5JIG5lZWQgdG8gY29uZmlybSBteSBzZWxlY3Rpb24gYnkgY2hlY2tpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIGVuc3VyZSBJJ20gbm90IG92ZXJsb29raW5nIGFueSByZWxldmFudCBmbGFncy4gTG9va3MgbGlrZSBgSEZTUExVU19GU2AgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIGhlcmUsIGJ1dCBhIGRvdWJsZS1jaGVjayBvZiBgZnMvaGZzcGx1cy9LY29uZmlnYCBpcyBhbHdheXMgYSBnb29kIGlkZWEuIEkgd2lsbCBpbmNsdWRlIHRoZSBhbmFseXNpcyBvZiBgaGZzX2Jub2RlX2ZpbmRgIGluIG15IG1lbnRhbCBtb2RlbCwgYXMgaXQgaXMgYSBmdW5kYW1lbnRhbCBibm9kZSByZWFkLiBCdXQgbXkgcHJpbWFyeSBnb2FsIGlzIHRoZSBvdGhlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzQ1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDExOjA3OjA4LjExMDM2MDgyNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg2NTU1MzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIRlNQTFVTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2hmc3BsdXMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9oZnNwbHVzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9oZnNwbHVzL0tjb25maWc6Mjpjb25maWcgSEZTUExVU19GU1xcbmZzL2hmc3BsdXMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJBcHBsZSBFeHRlbmRlZCBIRlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL2hmc3BsdXMvS2NvbmZpZy0xNy1cXG5mcy9oZnNwbHVzL0tjb25maWc6MTg6Y29uZmlnIEhGU1BMVVNfS1VOSVRfVEVTVFxcbmZzL2hmc3BsdXMvS2NvbmZpZy0xOS1cXHR0cmlzdGF0ZSBcXFwiS1VuaXQgdGVzdHMgZm9yIEhGUysgZmlsZXN5c3RlbVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMTowNzowOC41OTY5MjM3MzdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc3ODkyNzIyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBIRlMrIEItVHJlZSBOb2RlIFZhbGlkYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGxhc2VyLWZvY3VzZWQuIEFmdGVyIHJldmlld2luZyB0aGUgZGV0YWlscywgaXQncyBjbGVhciB0aGUgY29yZSBjb25jZXJuIGlzIHRoZSBgbnVtX3JlY3NgIHZhbGlkYXRpb24gd2l0aGluIEhGUysgYi10cmVlIG5vZGVzLiBUaGUgY2hhbmdlcyBhcmUgYWxsIGFib3V0IGhhcmRlbmluZyB0aG9zZSBmb3VuZGF0aW9uYWwgYi10cmVlIG9wZXJhdGlvbnM6IGZpbmRpbmcgcmVjb3JkcywgcmVtb3ZpbmcgdGhlbSwgYW5kIGl0ZXJhdGluZy4gVGhpcyBoYXMgYSBkaXJlY3QgaW1wYWN0IG9uIHJlYWNoYWJsZSBmaWxlc3lzdGVtIGxvZ2ljLCB0aGluZ3MgbGlrZSBkaXJlY3RvcnkgdHJhdmVyc2FsLCBmaWxlIGRlbGV0aW9uLCBhbmQgaGFuZGxpbmcgYXR0cmlidXRlcy4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gcHJpb3JpdGl6ZSBteSBmdXp6aW5nIGVmZm9ydHMgYXJvdW5kIHRoZXNlIGFyZWFzLlxuXG5CYXNlZCBvbiB0aGUgY29udGV4dCwgdGhlcmUncyBubyBuZWVkIHRvIGNvbnNpZGVyIGFueXRoaW5nIGJleW9uZCB0aGUgYEhGU1BMVVNfRlNgIGNvbmZpZyBmb3IgdGVzdGluZyBwdXJwb3Nlcy4gSXQgc2VlbXMgdGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGUgbG9naWMgb2YgdGhhdCBmaWxlc3lzdGVtLlxuXG5UaGUgc3BlY2lmaWMgZnVuY3Rpb25zIEknbGwgbmVlZCB0byBzY3J1dGluaXplIGFyZSBgaGZzX2JyZWNfcmVtb3ZlYCwgYGhmc19icmVjX2dvdG9gLCBhbmQgYF9faGZzX2JyZWNfZmluZGAuIFRoZXNlIGFyZSB0aGUga2V5IGVudHJ5IHBvaW50cyB3aGVyZSB0aGUgbmV3IGBudW1fcmVjc2AgdmFsaWRhdGlvbiBnZXRzIGV4ZXJjaXNlZC4gQW55IHRlc3QgY2FzZXMgZ2VuZXJhdGVkIHNob3VsZCBiZSBkZXNpZ25lZCB0byBpbnRlbnRpb25hbGx5IGNyZWF0ZSBtYWxmb3JtZWQgYi10cmVlIG5vZGVzLCBwdXNoaW5nIHRoZSB2YWxpZGF0aW9uIHRvIGl0cyBsaW1pdHMgYW5kIGVuc3VyaW5nIGl0IGNvcnJlY3RseSByZWplY3RzIHByb2JsZW1hdGljIHN0cnVjdHVyZXMgd2l0aG91dCBjYXVzaW5nIHBhbmljcyBvciByZWdyZXNzaW9ucy4gSSdtIGdvaW5nIHRvIHNldCB1cCBmdXp6aW5nIHRvIHRhcmdldCB0aGVzZSBzeW1ib2xzIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxNzEsIk91dHB1dFRva2VucyI6MTY3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDExOjA3OjE0LjM3NTg1NDgzNFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDQwOTc2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSEZTUExVU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhmc19icmVjX3JlbW92ZVwiLFxuICAgIFwiaGZzX2JyZWNfZ290b1wiLFxuICAgIFwiX19oZnNfYnJlY19maW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGZvciBgbnVtX3JlY3NgIGluIEhGUysgYi10cmVlIG5vZGVzIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3MgYW5kIG90aGVyIGlzc3Vlcy4gSXQgbW9kaWZpZXMgY29yZSBiLXRyZWUgb3BlcmF0aW9ucyBsaWtlIGZpbmRpbmcsIHJlbW92aW5nLCBhbmQgaXRlcmF0aW5nIG92ZXIgcmVjb3Jkcy4gVGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgYWZmZWN0IHJlYWNoYWJsZSBmaWxlc3lzdGVtIGxvZ2ljLCBwYXJ0aWN1bGFybHkgZHVyaW5nIGRpcmVjdG9yeSB0cmF2ZXJzYWwsIGZpbGUgZGVsZXRpb24sIGFuZCBhdHRyaWJ1dGUgb3BlcmF0aW9ucy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2Ugb3BlcmF0aW9ucyB0byBlbnN1cmUgdGhlIG5ldyB2YWxpZGF0aW9uIGxvZ2ljIGNvcnJlY3RseSBoYW5kbGVzIG1hbGZvcm1lZCBiLXRyZWUgbm9kZXMgd2l0aG91dCBjYXVzaW5nIHJlZ3Jlc3Npb25zIG9yIHBhbmljcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIRlNQTFVTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaGZzX2JyZWNfcmVtb3ZlXCIsXG4gICAgXCJoZnNfYnJlY19nb3RvXCIsXG4gICAgXCJfX2hmc19icmVjX2ZpbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gZm9yIGBudW1fcmVjc2AgaW4gSEZTKyBiLXRyZWUgbm9kZXMgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIGFjY2VzcyBhbmQgb3RoZXIgaXNzdWVzLiBJdCBtb2RpZmllcyBjb3JlIGItdHJlZSBvcGVyYXRpb25zIGxpa2UgZmluZGluZywgcmVtb3ZpbmcsIGFuZCBpdGVyYXRpbmcgb3ZlciByZWNvcmRzLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCBhZmZlY3QgcmVhY2hhYmxlIGZpbGVzeXN0ZW0gbG9naWMsIHBhcnRpY3VsYXJseSBkdXJpbmcgZGlyZWN0b3J5IHRyYXZlcnNhbCwgZmlsZSBkZWxldGlvbiwgYW5kIGF0dHJpYnV0ZSBvcGVyYXRpb25zLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBvcGVyYXRpb25zIHRvIGVuc3VyZSB0aGUgbmV3IHZhbGlkYXRpb24gbG9naWMgY29ycmVjdGx5IGhhbmRsZXMgbWFsZm9ybWVkIGItdHJlZSBub2RlcyB3aXRob3V0IGNhdXNpbmcgcmVncmVzc2lvbnMgb3IgcGFuaWNzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowglq4p[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-01 10:50:16 +0000 UTC FinishedAt: 2026-07-01 11:07:15 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "665159e246749578d4e4bfe106ee3b74edcdab18", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HFSPLUS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "665159e246749578d4e4bfe106ee3b74edcdab18", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HFSPLUS_FS" ], "series_id": "c4ef3812-aac4-49ce-bf4e-f4ee56d60112" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "hfs_brec_remove", "hfs_brec_goto", "__hfs_brec_find" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hGU1BMVVNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoZnNfYnJlY19yZW1vdmUmIzM0OywKICAgICYjMzQ7aGZzX2JyZWNfZ290byYjMzQ7LAogICAgJiMzNDtfX2hmc19icmVjX2ZpbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGZvciBgbnVtX3JlY3NgIGluIEhGUyYjNDM7IGItdHJlZSBub2RlcyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzIGFuZCBvdGhlciBpc3N1ZXMuIEl0IG1vZGlmaWVzIGNvcmUgYi10cmVlIG9wZXJhdGlvbnMgbGlrZSBmaW5kaW5nLCByZW1vdmluZywgYW5kIGl0ZXJhdGluZyBvdmVyIHJlY29yZHMuIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIGFmZmVjdCByZWFjaGFibGUgZmlsZXN5c3RlbSBsb2dpYywgcGFydGljdWxhcmx5IGR1cmluZyBkaXJlY3RvcnkgdHJhdmVyc2FsLCBmaWxlIGRlbGV0aW9uLCBhbmQgYXR0cmlidXRlIG9wZXJhdGlvbnMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIG9wZXJhdGlvbnMgdG8gZW5zdXJlIHRoZSBuZXcgdmFsaWRhdGlvbiBsb2dpYyBjb3JyZWN0bHkgaGFuZGxlcyBtYWxmb3JtZWQgYi10cmVlIG5vZGVzIHdpdGhvdXQgY2F1c2luZyByZWdyZXNzaW9ucyBvciBwYW5pY3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTE6MDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhYWU1N2I2NGQwMmI2M2YwNjM2NmViMzgyYWQ1ZTAxY2NmOTRiOWE1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAxMTowNTozMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2JmaW5kLmMgYi9mcy9oZnNwbHVzL2JmaW5kLmNcbmluZGV4IDlhNTVmYTZkNTI5NDI5Li5hY2U5YmEwMjdhOWRiNCAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvYmZpbmQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9iZmluZC5jXG5AQCAtMTEyLDExICYjNDM7MTEyLDEzIEBAIGludCBfX2hmc19icmVjX2ZpbmQoc3RydWN0IGhmc19ibm9kZSAqYm5vZGUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCxcbiBcdGIgPSAwO1xuIFx0ZSA9IGJub2RlLVx1MDAzZW51bV9yZWNzIC0gMTtcbiBcdHJlcyA9IC1FTk9FTlQ7XG4mIzQzO1x0aWYgKCFibm9kZS1cdTAwM2VudW1fcmVjcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4gXHRkbyB7XG4gXHRcdHJlYyA9IChlICYjNDM7IGIpIC8gMjtcbiBcdFx0bGVuID0gaGZzX2JyZWNfbGVub2ZmKGJub2RlLCByZWMsIFx1MDAyNm9mZik7XG4gXHRcdGtleWxlbiA9IGhmc19icmVjX2tleWxlbihibm9kZSwgcmVjKTtcbi1cdFx0aWYgKGtleWxlbiA9PSAwKSB7XG4mIzQzO1x0XHRpZiAoIWtleWxlbiB8fCBrZXlsZW4gXHUwMDNlPSBsZW4pIHtcbiBcdFx0XHRyZXMgPSAtRUlOVkFMO1xuIFx0XHRcdGdvdG8gZmFpbDtcbiBcdFx0fVxuQEAgLTEzMCw3ICYjNDM7MTMyLDcgQEAgaW50IF9faGZzX2JyZWNfZmluZChzdHJ1Y3QgaGZzX2Jub2RlICpibm9kZSwgc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLFxuIFx0aWYgKHJlYyAhPSBlIFx1MDAyNlx1MDAyNiBlIFx1MDAzZT0gMCkge1xuIFx0XHRsZW4gPSBoZnNfYnJlY19sZW5vZmYoYm5vZGUsIGUsIFx1MDAyNm9mZik7XG4gXHRcdGtleWxlbiA9IGhmc19icmVjX2tleWxlbihibm9kZSwgZSk7XG4tXHRcdGlmIChrZXlsZW4gPT0gMCkge1xuJiM0MztcdFx0aWYgKCFrZXlsZW4gfHwga2V5bGVuIFx1MDAzZT0gbGVuKSB7XG4gXHRcdFx0cmVzID0gLUVJTlZBTDtcbiBcdFx0XHRnb3RvIGZhaWw7XG4gXHRcdH1cbkBAIC0yMzIsNiAmIzQzOzIzNCwxMCBAQCBpbnQgaGZzX2JyZWNfZ290byhzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIGludCBjbnQpXG4gXG4gXHRibm9kZSA9IGZkLVx1MDAzZWJub2RlO1xuIFx0dHJlZSA9IGJub2RlLVx1MDAzZXRyZWU7XG4mIzQzO1x0aWYgKCFibm9kZS1cdTAwM2VudW1fcmVjcykge1xuJiM0MztcdFx0cmVzID0gLUVOT0VOVDtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiBcbiBcdGlmIChjbnQgXHUwMDNjIDApIHtcbiBcdFx0Y250ID0gLWNudDtcbkBAIC0yNzQsNyAmIzQzOzI4MCw3IEBAIGludCBoZnNfYnJlY19nb3RvKHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgaW50IGNudClcbiBcbiBcdGxlbiA9IGhmc19icmVjX2xlbm9mZihibm9kZSwgZmQtXHUwMDNlcmVjb3JkLCBcdTAwMjZvZmYpO1xuIFx0a2V5bGVuID0gaGZzX2JyZWNfa2V5bGVuKGJub2RlLCBmZC1cdTAwM2VyZWNvcmQpO1xuLVx0aWYgKGtleWxlbiA9PSAwKSB7XG4mIzQzO1x0aWYgKCFrZXlsZW4gfHwga2V5bGVuIFx1MDAzZT0gbGVuKSB7XG4gXHRcdHJlcyA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvYm5vZGUuYyBiL2ZzL2hmc3BsdXMvYm5vZGUuY1xuaW5kZXggZDA4OGZiN2ViMGRmYTMuLmRmNDA2Zjc1YTViMzIzIDEwMDY0NFxuLS0tIGEvZnMvaGZzcGx1cy9ibm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnNwbHVzL2Jub2RlLmNcbkBAIC0zNTIsMTUgJiM0MzszNTIsMjIgQEAgdm9pZCBoZnNfYm5vZGVfZHVtcChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlKVxuIFx0c3RydWN0IGhmc19ibm9kZV9kZXNjIGRlc2M7XG4gXHRfX2JlMzIgY25pZDtcbiBcdGludCBpLCBvZmYsIGtleV9vZmY7XG4mIzQzO1x0dTE2IG51bV9yZWNzO1xuIFxuIFx0aGZzX2RiZyhcJiMzNDtub2RlICVkXFxuXCYjMzQ7LCBub2RlLVx1MDAzZXRoaXMpO1xuIFx0aGZzX2Jub2RlX3JlYWQobm9kZSwgXHUwMDI2ZGVzYywgMCwgc2l6ZW9mKGRlc2MpKTtcbiYjNDM7XHRudW1fcmVjcyA9IGJlMTZfdG9fY3B1KGRlc2MubnVtX3JlY3MpO1xuIFx0aGZzX2RiZyhcJiMzNDtuZXh0ICVkLCBwcmV2ICVkLCB0eXBlICVkLCBoZWlnaHQgJWQsIG51bV9yZWNzICVkXFxuXCYjMzQ7LFxuIFx0XHRiZTMyX3RvX2NwdShkZXNjLm5leHQpLCBiZTMyX3RvX2NwdShkZXNjLnByZXYpLFxuLVx0XHRkZXNjLnR5cGUsIGRlc2MuaGVpZ2h0LCBiZTE2X3RvX2NwdShkZXNjLm51bV9yZWNzKSk7XG4mIzQzO1x0XHRkZXNjLnR5cGUsIGRlc2MuaGVpZ2h0LCBudW1fcmVjcyk7XG4mIzQzO1xuJiM0MztcdGlmICghaGZzX2Jub2RlX251bV9yZWNzX3ZhbGlkKG5vZGUsIG51bV9yZWNzKSkge1xuJiM0MztcdFx0aGZzX2RiZyhcJiMzNDtpbnZhbGlkIG51bV9yZWNzICV1XFxuXCYjMzQ7LCBudW1fcmVjcyk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuIFxuIFx0b2ZmID0gbm9kZS1cdTAwM2V0cmVlLVx1MDAzZW5vZGVfc2l6ZSAtIDI7XG4tXHRmb3IgKGkgPSBiZTE2X3RvX2NwdShkZXNjLm51bV9yZWNzKTsgaSBcdTAwM2U9IDA7IG9mZiAtPSAyLCBpLS0pIHtcbiYjNDM7XHRmb3IgKGkgPSBudW1fcmVjczsgaSBcdTAwM2U9IDA7IG9mZiAtPSAyLCBpLS0pIHtcbiBcdFx0a2V5X29mZiA9IGhmc19ibm9kZV9yZWFkX3UxNihub2RlLCBvZmYpO1xuIFx0XHRoZnNfZGJnKFwmIzM0OyBrZXlfb2ZmICVkXCYjMzQ7LCBrZXlfb2ZmKTtcbiBcdFx0aWYgKGkgXHUwMDI2XHUwMDI2IG5vZGUtXHUwMDNldHlwZSA9PSBIRlNfTk9ERV9JTkRFWCkge1xuQEAgLTU3OSw2ICYjNDM7NTg2LDkgQEAgc3RydWN0IGhmc19ibm9kZSAqaGZzX2Jub2RlX2ZpbmQoc3RydWN0IGhmc19idHJlZSAqdHJlZSwgdTMyIG51bSlcbiBcdFx0Z290byBub2RlX2Vycm9yO1xuIFx0fVxuIFxuJiM0MztcdGlmICghaGZzX2Jub2RlX251bV9yZWNzX3ZhbGlkKG5vZGUsIG5vZGUtXHUwMDNlbnVtX3JlY3MpKVxuJiM0MztcdFx0Z290byBub2RlX2Vycm9yO1xuJiM0MztcbiBcdHJlY19vZmYgPSB0cmVlLVx1MDAzZW5vZGVfc2l6ZSAtIDI7XG4gXHRvZmYgPSBoZnNfYm5vZGVfcmVhZF91MTYobm9kZSwgcmVjX29mZik7XG4gXHRpZiAob2ZmICE9IHNpemVvZihzdHJ1Y3QgaGZzX2Jub2RlX2Rlc2MpKVxuQEAgLTU4OCw2ICYjNDM7NTk4LDcgQEAgc3RydWN0IGhmc19ibm9kZSAqaGZzX2Jub2RlX2ZpbmQoc3RydWN0IGhmc19idHJlZSAqdHJlZSwgdTMyIG51bSlcbiBcdFx0bmV4dF9vZmYgPSBoZnNfYm5vZGVfcmVhZF91MTYobm9kZSwgcmVjX29mZik7XG4gXHRcdGlmIChuZXh0X29mZiBcdTAwM2M9IG9mZiB8fFxuIFx0XHQgICAgbmV4dF9vZmYgXHUwMDNlIHRyZWUtXHUwMDNlbm9kZV9zaXplIHx8XG4mIzQzO1x0XHQgICAgbmV4dF9vZmYgXHUwMDNlIHJlY19vZmYgfHxcbiBcdFx0ICAgIG5leHRfb2ZmIFx1MDAyNiAxKVxuIFx0XHRcdGdvdG8gbm9kZV9lcnJvcjtcbiBcdFx0ZW50cnlfc2l6ZSA9IG5leHRfb2ZmIC0gb2ZmO1xuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvYnJlYy5jIGIvZnMvaGZzcGx1cy9icmVjLmNcbmluZGV4IGUzZGY4OTI4NDA3OWRiLi5kY2UzOTdiZTkxNTFmZSAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvYnJlYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnNwbHVzL2JyZWMuY1xuQEAgLTIwLDEyICYjNDM7MjAsMjcgQEAgc3RhdGljIGludCBoZnNfYnRyZWVfaW5jX2hlaWdodChzdHJ1Y3QgaGZzX2J0cmVlICopO1xuIHUxNiBoZnNfYnJlY19sZW5vZmYoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTE2IHJlYywgdTE2ICpvZmYpXG4ge1xuIFx0X19iZTE2IHJldHZhbFsyXTtcbi1cdHUxNiBkYXRhb2ZmO1xuJiM0MztcdHUxNiBkYXRhX29mZjtcbiYjNDM7XHR1MTYgbmV4dF9vZmY7XG4gXG4tXHRkYXRhb2ZmID0gbm9kZS1cdTAwM2V0cmVlLVx1MDAzZW5vZGVfc2l6ZSAtIChyZWMgJiM0MzsgMikgKiAyO1xuLVx0aGZzX2Jub2RlX3JlYWQobm9kZSwgcmV0dmFsLCBkYXRhb2ZmLCA0KTtcbiYjNDM7XHRpZiAocmVjIFx1MDAzZT0gbm9kZS1cdTAwM2VudW1fcmVjcyB8fFxuJiM0MztcdFx0IWhmc19ibm9kZV9udW1fcmVjc192YWxpZChub2RlLCBub2RlLVx1MDAzZW51bV9yZWNzKSkge1xuJiM0MztcdFx0Km9mZiA9IDA7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRhdGFfb2ZmID0gbm9kZS1cdTAwM2V0cmVlLVx1MDAzZW5vZGVfc2l6ZSAtIChyZWMgJiM0MzsgMikgKiAyO1xuJiM0MztcdGhmc19ibm9kZV9yZWFkKG5vZGUsIHJldHZhbCwgZGF0YV9vZmYsIDQpO1xuIFx0Km9mZiA9IGJlMTZfdG9fY3B1KHJldHZhbFsxXSk7XG4tXHRyZXR1cm4gYmUxNl90b19jcHUocmV0dmFsWzBdKSAtICpvZmY7XG4mIzQzO1x0bmV4dF9vZmYgPSBiZTE2X3RvX2NwdShyZXR2YWxbMF0pO1xuJiM0MztcdGlmICgqb2ZmIFx1MDAzYyBzaXplb2Yoc3RydWN0IGhmc19ibm9kZV9kZXNjKSB8fFxuJiM0MztcdFx0Km9mZiBcdTAwMjYgMSB8fFxuJiM0MztcdFx0bmV4dF9vZmYgXHUwMDNjPSAqb2ZmIHx8XG4mIzQzO1x0XHRuZXh0X29mZiBcdTAwM2Ugbm9kZS1cdTAwM2V0cmVlLVx1MDAzZW5vZGVfc2l6ZSB8fFxuJiM0MztcdFx0bmV4dF9vZmYgXHUwMDNlIGRhdGFfb2ZmIHx8XG4mIzQzO1x0XHRuZXh0X29mZiBcdTAwMjYgMSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdHJldHVybiBuZXh0X29mZiAtICpvZmY7XG4gfVxuIFxuIC8qIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBrZXkgZnJvbSBhIGtleWVkIHJlY29yZCAqL1xuQEAgLTM1LDYgJiM0Mzs1MCw5IEBAIHUxNiBoZnNfYnJlY19rZXlsZW4oc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTE2IHJlYylcbiBcbiBcdGlmIChub2RlLVx1MDAzZXR5cGUgIT0gSEZTX05PREVfSU5ERVggXHUwMDI2XHUwMDI2IG5vZGUtXHUwMDNldHlwZSAhPSBIRlNfTk9ERV9MRUFGKVxuIFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRpZiAocmVjIFx1MDAzZT0gbm9kZS1cdTAwM2VudW1fcmVjcyB8fFxuJiM0MztcdFx0IWhmc19ibm9kZV9udW1fcmVjc192YWxpZChub2RlLCBub2RlLVx1MDAzZW51bV9yZWNzKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuIFxuIFx0aWYgKChub2RlLVx1MDAzZXR5cGUgPT0gSEZTX05PREVfSU5ERVgpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIShub2RlLVx1MDAzZXRyZWUtXHUwMDNlYXR0cmlidXRlcyBcdTAwMjYgSEZTX1RSRUVfVkFSSURYS0VZUykgXHUwMDI2XHUwMDI2XG5AQCAtNDMsNyAmIzQzOzYxLDcgQEAgdTE2IGhmc19icmVjX2tleWxlbihzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MTYgcmVjKVxuIFx0fSBlbHNlIHtcbiBcdFx0cmVjb2ZmID0gaGZzX2Jub2RlX3JlYWRfdTE2KG5vZGUsXG4gXHRcdFx0bm9kZS1cdTAwM2V0cmVlLVx1MDAzZW5vZGVfc2l6ZSAtIChyZWMgJiM0MzsgMSkgKiAyKTtcbi1cdFx0aWYgKCFyZWNvZmYpXG4mIzQzO1x0XHRpZiAocmVjb2ZmIFx1MDAzYyBzaXplb2Yoc3RydWN0IGhmc19ibm9kZV9kZXNjKSB8fCByZWNvZmYgXHUwMDI2IDEpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXHRcdGlmIChyZWNvZmYgXHUwMDNlIG5vZGUtXHUwMDNldHJlZS1cdTAwM2Vub2RlX3NpemUgLSAyKSB7XG4gXHRcdFx0cHJfZXJyKFwmIzM0O3JlY29mZiAlZCB0b28gbGFyZ2VcXG5cJiMzNDssIHJlY29mZik7XG5AQCAtMTg1LDEwICYjNDM7MjAzLDE3IEBAIGludCBoZnNfYnJlY19yZW1vdmUoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxuIFx0dHJlZSA9IGZkLVx1MDAzZXRyZWU7XG4gXHRub2RlID0gZmQtXHUwMDNlYm5vZGU7XG4gYWdhaW46XG4mIzQzO1x0aWYgKGZkLVx1MDAzZXJlY29yZCBcdTAwM2MgMCB8fFxuJiM0MztcdFx0ZmQtXHUwMDNlcmVjb3JkIFx1MDAzZT0gbm9kZS1cdTAwM2VudW1fcmVjcyB8fFxuJiM0MztcdFx0IWhmc19ibm9kZV9udW1fcmVjc192YWxpZChub2RlLCBub2RlLVx1MDAzZW51bV9yZWNzKSlcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuJiM0MztcbiBcdHJlY19vZmYgPSB0cmVlLVx1MDAzZW5vZGVfc2l6ZSAtIChmZC1cdTAwM2VyZWNvcmQgJiM0MzsgMikgKiAyO1xuIFx0ZW5kX29mZiA9IHRyZWUtXHUwMDNlbm9kZV9zaXplIC0gKG5vZGUtXHUwMDNlbnVtX3JlY3MgJiM0MzsgMSkgKiAyO1xuIFxuIFx0aWYgKG5vZGUtXHUwMDNldHlwZSA9PSBIRlNfTk9ERV9MRUFGKSB7XG4mIzQzO1x0XHRpZiAoIXRyZWUtXHUwMDNlbGVhZl9jb3VudClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU87XG4gXHRcdHRyZWUtXHUwMDNlbGVhZl9jb3VudC0tO1xuIFx0XHRtYXJrX2lub2RlX2RpcnR5KHRyZWUtXHUwMDNlaW5vZGUpO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oIGIvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmhcbmluZGV4IGVjMDRiODJhZDkyNzg3Li44YjJmMjA0MWI4Yjk4YiAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaFxuQEAgLTU4Nyw2ICYjNDM7NTg3LDI0IEBAIGJvb2wgaXNfYm5vZGVfb2Zmc2V0X3ZhbGlkKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUzMiBvZmYpXG4gXHRyZXR1cm4gaXNfdmFsaWQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lXG4mIzQzO2Jvb2wgaGZzX2Jub2RlX251bV9yZWNzX3ZhbGlkKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUxNiBudW1fcmVjcylcbiYjNDM7e1xuJiM0MztcdHUzMiBub2RlX3NpemU7XG4mIzQzO1x0dTMyIG9mZnNfc2l6ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFub2RlIHx8ICFub2RlLVx1MDAzZXRyZWUpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdG5vZGVfc2l6ZSA9IG5vZGUtXHUwMDNldHJlZS1cdTAwM2Vub2RlX3NpemU7XG4mIzQzO1x0aWYgKG5vZGVfc2l6ZSBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBoZnNfYm5vZGVfZGVzYykgJiM0Mzsgc2l6ZW9mKF9fYmUxNikpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdG9mZnNfc2l6ZSA9ICgodTMyKW51bV9yZWNzICYjNDM7IDEpICogc2l6ZW9mKF9fYmUxNik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBvZmZzX3NpemUgXHUwMDNjPSBub2RlX3NpemUgLSBzaXplb2Yoc3RydWN0IGhmc19ibm9kZV9kZXNjKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lXG4gdTMyIGNoZWNrX2FuZF9jb3JyZWN0X3JlcXVlc3RlZF9sZW5ndGgoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTMyIG9mZiwgdTMyIGxlbilcbiB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTE6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SEZTUExVU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hmc19icmVjX3JlbW92ZSYjMzQ7LAogICAgJiMzNDtoZnNfYnJlY19nb3RvJiMzNDssCiAgICAmIzM0O19faGZzX2JyZWNfZmluZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gZm9yIGBudW1fcmVjc2AgaW4gSEZTJiM0MzsgYi10cmVlIG5vZGVzIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3MgYW5kIG90aGVyIGlzc3Vlcy4gSXQgbW9kaWZpZXMgY29yZSBiLXRyZWUgb3BlcmF0aW9ucyBsaWtlIGZpbmRpbmcsIHJlbW92aW5nLCBhbmQgaXRlcmF0aW5nIG92ZXIgcmVjb3Jkcy4gVGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgYWZmZWN0IHJlYWNoYWJsZSBmaWxlc3lzdGVtIGxvZ2ljLCBwYXJ0aWN1bGFybHkgZHVyaW5nIGRpcmVjdG9yeSB0cmF2ZXJzYWwsIGZpbGUgZGVsZXRpb24sIGFuZCBhdHRyaWJ1dGUgb3BlcmF0aW9ucy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2Ugb3BlcmF0aW9ucyB0byBlbnN1cmUgdGhlIG5ldyB2YWxpZGF0aW9uIGxvZ2ljIGNvcnJlY3RseSBoYW5kbGVzIG1hbGZvcm1lZCBiLXRyZWUgbm9kZXMgd2l0aG91dCBjYXVzaW5nIHJlZ3Jlc3Npb25zIG9yIHBhbmljcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYWFlNTdiNjRkMDJiNjNmMDYzNjZlYjM4MmFkNWUwMWNjZjk0YjlhNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDEgMTE6MDU6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2JmaW5kLmMgYi9mcy9oZnNwbHVzL2JmaW5kLmMKaW5kZXggOWE1NWZhNmQ1Mjk0MjkuLmFjZTliYTAyN2E5ZGI0IDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2JmaW5kLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9iZmluZC5jCkBAIC0xMTIsMTEgJiM0MzsxMTIsMTMgQEAgaW50IF9faGZzX2JyZWNfZmluZChzdHJ1Y3QgaGZzX2Jub2RlICpibm9kZSwgc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLAogCWIgPSAwOwogCWUgPSBibm9kZS0mZ3Q7bnVtX3JlY3MgLSAxOwogCXJlcyA9IC1FTk9FTlQ7CiYjNDM7CWlmICghYm5vZGUtJmd0O251bV9yZWNzKQomIzQzOwkJcmV0dXJuIHJlczsKIAlkbyB7CiAJCXJlYyA9IChlICYjNDM7IGIpIC8gMjsKIAkJbGVuID0gaGZzX2JyZWNfbGVub2ZmKGJub2RlLCByZWMsICZhbXA7b2ZmKTsKIAkJa2V5bGVuID0gaGZzX2JyZWNfa2V5bGVuKGJub2RlLCByZWMpOwotCQlpZiAoa2V5bGVuID09IDApIHsKJiM0MzsJCWlmICgha2V5bGVuIHx8IGtleWxlbiAmZ3Q7PSBsZW4pIHsKIAkJCXJlcyA9IC1FSU5WQUw7CiAJCQlnb3RvIGZhaWw7CiAJCX0KQEAgLTEzMCw3ICYjNDM7MTMyLDcgQEAgaW50IF9faGZzX2JyZWNfZmluZChzdHJ1Y3QgaGZzX2Jub2RlICpibm9kZSwgc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLAogCWlmIChyZWMgIT0gZSAmYW1wOyZhbXA7IGUgJmd0Oz0gMCkgewogCQlsZW4gPSBoZnNfYnJlY19sZW5vZmYoYm5vZGUsIGUsICZhbXA7b2ZmKTsKIAkJa2V5bGVuID0gaGZzX2JyZWNfa2V5bGVuKGJub2RlLCBlKTsKLQkJaWYgKGtleWxlbiA9PSAwKSB7CiYjNDM7CQlpZiAoIWtleWxlbiB8fCBrZXlsZW4gJmd0Oz0gbGVuKSB7CiAJCQlyZXMgPSAtRUlOVkFMOwogCQkJZ290byBmYWlsOwogCQl9CkBAIC0yMzIsNiAmIzQzOzIzNCwxMCBAQCBpbnQgaGZzX2JyZWNfZ290byhzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIGludCBjbnQpCiAKIAlibm9kZSA9IGZkLSZndDtibm9kZTsKIAl0cmVlID0gYm5vZGUtJmd0O3RyZWU7CiYjNDM7CWlmICghYm5vZGUtJmd0O251bV9yZWNzKSB7CiYjNDM7CQlyZXMgPSAtRU5PRU5UOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KIAogCWlmIChjbnQgJmx0OyAwKSB7CiAJCWNudCA9IC1jbnQ7CkBAIC0yNzQsNyAmIzQzOzI4MCw3IEBAIGludCBoZnNfYnJlY19nb3RvKHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgaW50IGNudCkKIAogCWxlbiA9IGhmc19icmVjX2xlbm9mZihibm9kZSwgZmQtJmd0O3JlY29yZCwgJmFtcDtvZmYpOwogCWtleWxlbiA9IGhmc19icmVjX2tleWxlbihibm9kZSwgZmQtJmd0O3JlY29yZCk7Ci0JaWYgKGtleWxlbiA9PSAwKSB7CiYjNDM7CWlmICgha2V5bGVuIHx8IGtleWxlbiAmZ3Q7PSBsZW4pIHsKIAkJcmVzID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9ibm9kZS5jIGIvZnMvaGZzcGx1cy9ibm9kZS5jCmluZGV4IGQwODhmYjdlYjBkZmEzLi5kZjQwNmY3NWE1YjMyMyAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9ibm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2hmc3BsdXMvYm5vZGUuYwpAQCAtMzUyLDE1ICYjNDM7MzUyLDIyIEBAIHZvaWQgaGZzX2Jub2RlX2R1bXAoc3RydWN0IGhmc19ibm9kZSAqbm9kZSkKIAlzdHJ1Y3QgaGZzX2Jub2RlX2Rlc2MgZGVzYzsKIAlfX2JlMzIgY25pZDsKIAlpbnQgaSwgb2ZmLCBrZXlfb2ZmOwomIzQzOwl1MTYgbnVtX3JlY3M7CiAKIAloZnNfZGJnKCYjMzQ7bm9kZSAlZFxuJiMzNDssIG5vZGUtJmd0O3RoaXMpOwogCWhmc19ibm9kZV9yZWFkKG5vZGUsICZhbXA7ZGVzYywgMCwgc2l6ZW9mKGRlc2MpKTsKJiM0MzsJbnVtX3JlY3MgPSBiZTE2X3RvX2NwdShkZXNjLm51bV9yZWNzKTsKIAloZnNfZGJnKCYjMzQ7bmV4dCAlZCwgcHJldiAlZCwgdHlwZSAlZCwgaGVpZ2h0ICVkLCBudW1fcmVjcyAlZFxuJiMzNDssCiAJCWJlMzJfdG9fY3B1KGRlc2MubmV4dCksIGJlMzJfdG9fY3B1KGRlc2MucHJldiksCi0JCWRlc2MudHlwZSwgZGVzYy5oZWlnaHQsIGJlMTZfdG9fY3B1KGRlc2MubnVtX3JlY3MpKTsKJiM0MzsJCWRlc2MudHlwZSwgZGVzYy5oZWlnaHQsIG51bV9yZWNzKTsKJiM0MzsKJiM0MzsJaWYgKCFoZnNfYm5vZGVfbnVtX3JlY3NfdmFsaWQobm9kZSwgbnVtX3JlY3MpKSB7CiYjNDM7CQloZnNfZGJnKCYjMzQ7aW52YWxpZCBudW1fcmVjcyAldVxuJiMzNDssIG51bV9yZWNzKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQogCiAJb2ZmID0gbm9kZS0mZ3Q7dHJlZS0mZ3Q7bm9kZV9zaXplIC0gMjsKLQlmb3IgKGkgPSBiZTE2X3RvX2NwdShkZXNjLm51bV9yZWNzKTsgaSAmZ3Q7PSAwOyBvZmYgLT0gMiwgaS0tKSB7CiYjNDM7CWZvciAoaSA9IG51bV9yZWNzOyBpICZndDs9IDA7IG9mZiAtPSAyLCBpLS0pIHsKIAkJa2V5X29mZiA9IGhmc19ibm9kZV9yZWFkX3UxNihub2RlLCBvZmYpOwogCQloZnNfZGJnKCYjMzQ7IGtleV9vZmYgJWQmIzM0Oywga2V5X29mZik7CiAJCWlmIChpICZhbXA7JmFtcDsgbm9kZS0mZ3Q7dHlwZSA9PSBIRlNfTk9ERV9JTkRFWCkgewpAQCAtNTc5LDYgJiM0Mzs1ODYsOSBAQCBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm5vZGVfZmluZChzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlLCB1MzIgbnVtKQogCQlnb3RvIG5vZGVfZXJyb3I7CiAJfQogCiYjNDM7CWlmICghaGZzX2Jub2RlX251bV9yZWNzX3ZhbGlkKG5vZGUsIG5vZGUtJmd0O251bV9yZWNzKSkKJiM0MzsJCWdvdG8gbm9kZV9lcnJvcjsKJiM0MzsKIAlyZWNfb2ZmID0gdHJlZS0mZ3Q7bm9kZV9zaXplIC0gMjsKIAlvZmYgPSBoZnNfYm5vZGVfcmVhZF91MTYobm9kZSwgcmVjX29mZik7CiAJaWYgKG9mZiAhPSBzaXplb2Yoc3RydWN0IGhmc19ibm9kZV9kZXNjKSkKQEAgLTU4OCw2ICYjNDM7NTk4LDcgQEAgc3RydWN0IGhmc19ibm9kZSAqaGZzX2Jub2RlX2ZpbmQoc3RydWN0IGhmc19idHJlZSAqdHJlZSwgdTMyIG51bSkKIAkJbmV4dF9vZmYgPSBoZnNfYm5vZGVfcmVhZF91MTYobm9kZSwgcmVjX29mZik7CiAJCWlmIChuZXh0X29mZiAmbHQ7PSBvZmYgfHwKIAkJICAgIG5leHRfb2ZmICZndDsgdHJlZS0mZ3Q7bm9kZV9zaXplIHx8CiYjNDM7CQkgICAgbmV4dF9vZmYgJmd0OyByZWNfb2ZmIHx8CiAJCSAgICBuZXh0X29mZiAmYW1wOyAxKQogCQkJZ290byBub2RlX2Vycm9yOwogCQllbnRyeV9zaXplID0gbmV4dF9vZmYgLSBvZmY7CmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2JyZWMuYyBiL2ZzL2hmc3BsdXMvYnJlYy5jCmluZGV4IGUzZGY4OTI4NDA3OWRiLi5kY2UzOTdiZTkxNTFmZSAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9icmVjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9icmVjLmMKQEAgLTIwLDEyICYjNDM7MjAsMjcgQEAgc3RhdGljIGludCBoZnNfYnRyZWVfaW5jX2hlaWdodChzdHJ1Y3QgaGZzX2J0cmVlICopOwogdTE2IGhmc19icmVjX2xlbm9mZihzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MTYgcmVjLCB1MTYgKm9mZikKIHsKIAlfX2JlMTYgcmV0dmFsWzJdOwotCXUxNiBkYXRhb2ZmOwomIzQzOwl1MTYgZGF0YV9vZmY7CiYjNDM7CXUxNiBuZXh0X29mZjsKIAotCWRhdGFvZmYgPSBub2RlLSZndDt0cmVlLSZndDtub2RlX3NpemUgLSAocmVjICYjNDM7IDIpICogMjsKLQloZnNfYm5vZGVfcmVhZChub2RlLCByZXR2YWwsIGRhdGFvZmYsIDQpOwomIzQzOwlpZiAocmVjICZndDs9IG5vZGUtJmd0O251bV9yZWNzIHx8CiYjNDM7CQkhaGZzX2Jub2RlX251bV9yZWNzX3ZhbGlkKG5vZGUsIG5vZGUtJmd0O251bV9yZWNzKSkgewomIzQzOwkJKm9mZiA9IDA7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlkYXRhX29mZiA9IG5vZGUtJmd0O3RyZWUtJmd0O25vZGVfc2l6ZSAtIChyZWMgJiM0MzsgMikgKiAyOwomIzQzOwloZnNfYm5vZGVfcmVhZChub2RlLCByZXR2YWwsIGRhdGFfb2ZmLCA0KTsKIAkqb2ZmID0gYmUxNl90b19jcHUocmV0dmFsWzFdKTsKLQlyZXR1cm4gYmUxNl90b19jcHUocmV0dmFsWzBdKSAtICpvZmY7CiYjNDM7CW5leHRfb2ZmID0gYmUxNl90b19jcHUocmV0dmFsWzBdKTsKJiM0MzsJaWYgKCpvZmYgJmx0OyBzaXplb2Yoc3RydWN0IGhmc19ibm9kZV9kZXNjKSB8fAomIzQzOwkJKm9mZiAmYW1wOyAxIHx8CiYjNDM7CQluZXh0X29mZiAmbHQ7PSAqb2ZmIHx8CiYjNDM7CQluZXh0X29mZiAmZ3Q7IG5vZGUtJmd0O3RyZWUtJmd0O25vZGVfc2l6ZSB8fAomIzQzOwkJbmV4dF9vZmYgJmd0OyBkYXRhX29mZiB8fAomIzQzOwkJbmV4dF9vZmYgJmFtcDsgMSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlyZXR1cm4gbmV4dF9vZmYgLSAqb2ZmOwogfQogCiAvKiBHZXQgdGhlIGxlbmd0aCBvZiB0aGUga2V5IGZyb20gYSBrZXllZCByZWNvcmQgKi8KQEAgLTM1LDYgJiM0Mzs1MCw5IEBAIHUxNiBoZnNfYnJlY19rZXlsZW4oc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTE2IHJlYykKIAogCWlmIChub2RlLSZndDt0eXBlICE9IEhGU19OT0RFX0lOREVYICZhbXA7JmFtcDsgbm9kZS0mZ3Q7dHlwZSAhPSBIRlNfTk9ERV9MRUFGKQogCQlyZXR1cm4gMDsKJiM0MzsJaWYgKHJlYyAmZ3Q7PSBub2RlLSZndDtudW1fcmVjcyB8fAomIzQzOwkJIWhmc19ibm9kZV9udW1fcmVjc192YWxpZChub2RlLCBub2RlLSZndDtudW1fcmVjcykpCiYjNDM7CQlyZXR1cm4gMDsKIAogCWlmICgobm9kZS0mZ3Q7dHlwZSA9PSBIRlNfTk9ERV9JTkRFWCkgJmFtcDsmYW1wOwogCSAgICEobm9kZS0mZ3Q7dHJlZS0mZ3Q7YXR0cmlidXRlcyAmYW1wOyBIRlNfVFJFRV9WQVJJRFhLRVlTKSAmYW1wOyZhbXA7CkBAIC00Myw3ICYjNDM7NjEsNyBAQCB1MTYgaGZzX2JyZWNfa2V5bGVuKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUxNiByZWMpCiAJfSBlbHNlIHsKIAkJcmVjb2ZmID0gaGZzX2Jub2RlX3JlYWRfdTE2KG5vZGUsCiAJCQlub2RlLSZndDt0cmVlLSZndDtub2RlX3NpemUgLSAocmVjICYjNDM7IDEpICogMik7Ci0JCWlmICghcmVjb2ZmKQomIzQzOwkJaWYgKHJlY29mZiAmbHQ7IHNpemVvZihzdHJ1Y3QgaGZzX2Jub2RlX2Rlc2MpIHx8IHJlY29mZiAmYW1wOyAxKQogCQkJcmV0dXJuIDA7CiAJCWlmIChyZWNvZmYgJmd0OyBub2RlLSZndDt0cmVlLSZndDtub2RlX3NpemUgLSAyKSB7CiAJCQlwcl9lcnIoJiMzNDtyZWNvZmYgJWQgdG9vIGxhcmdlXG4mIzM0OywgcmVjb2ZmKTsKQEAgLTE4NSwxMCAmIzQzOzIwMywxNyBAQCBpbnQgaGZzX2JyZWNfcmVtb3ZlKHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCkKIAl0cmVlID0gZmQtJmd0O3RyZWU7CiAJbm9kZSA9IGZkLSZndDtibm9kZTsKIGFnYWluOgomIzQzOwlpZiAoZmQtJmd0O3JlY29yZCAmbHQ7IDAgfHwKJiM0MzsJCWZkLSZndDtyZWNvcmQgJmd0Oz0gbm9kZS0mZ3Q7bnVtX3JlY3MgfHwKJiM0MzsJCSFoZnNfYm5vZGVfbnVtX3JlY3NfdmFsaWQobm9kZSwgbm9kZS0mZ3Q7bnVtX3JlY3MpKQomIzQzOwkJcmV0dXJuIC1FSU87CiYjNDM7CiAJcmVjX29mZiA9IHRyZWUtJmd0O25vZGVfc2l6ZSAtIChmZC0mZ3Q7cmVjb3JkICYjNDM7IDIpICogMjsKIAllbmRfb2ZmID0gdHJlZS0mZ3Q7bm9kZV9zaXplIC0gKG5vZGUtJmd0O251bV9yZWNzICYjNDM7IDEpICogMjsKIAogCWlmIChub2RlLSZndDt0eXBlID09IEhGU19OT0RFX0xFQUYpIHsKJiM0MzsJCWlmICghdHJlZS0mZ3Q7bGVhZl9jb3VudCkKJiM0MzsJCQlyZXR1cm4gLUVJTzsKIAkJdHJlZS0mZ3Q7bGVhZl9jb3VudC0tOwogCQltYXJrX2lub2RlX2RpcnR5KHRyZWUtJmd0O2lub2RlKTsKIAl9CmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaCBiL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oCmluZGV4IGVjMDRiODJhZDkyNzg3Li44YjJmMjA0MWI4Yjk4YiAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgKQEAgLTU4Nyw2ICYjNDM7NTg3LDI0IEBAIGJvb2wgaXNfYm5vZGVfb2Zmc2V0X3ZhbGlkKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUzMiBvZmYpCiAJcmV0dXJuIGlzX3ZhbGlkOwogfQogCiYjNDM7c3RhdGljIGlubGluZQomIzQzO2Jvb2wgaGZzX2Jub2RlX251bV9yZWNzX3ZhbGlkKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUxNiBudW1fcmVjcykKJiM0Mzt7CiYjNDM7CXUzMiBub2RlX3NpemU7CiYjNDM7CXUzMiBvZmZzX3NpemU7CiYjNDM7CiYjNDM7CWlmICghbm9kZSB8fCAhbm9kZS0mZ3Q7dHJlZSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJbm9kZV9zaXplID0gbm9kZS0mZ3Q7dHJlZS0mZ3Q7bm9kZV9zaXplOwomIzQzOwlpZiAobm9kZV9zaXplICZsdDsgc2l6ZW9mKHN0cnVjdCBoZnNfYm5vZGVfZGVzYykgJiM0Mzsgc2l6ZW9mKF9fYmUxNikpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CW9mZnNfc2l6ZSA9ICgodTMyKW51bV9yZWNzICYjNDM7IDEpICogc2l6ZW9mKF9fYmUxNik7CiYjNDM7CiYjNDM7CXJldHVybiBvZmZzX3NpemUgJmx0Oz0gbm9kZV9zaXplIC0gc2l6ZW9mKHN0cnVjdCBoZnNfYm5vZGVfZGVzYyk7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZQogdTMyIGNoZWNrX2FuZF9jb3JyZWN0X3JlcXVlc3RlZF9sZW5ndGgoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTMyIG9mZiwgdTMyIGxlbikKIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTE6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYwMQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipWYWxpZGF0aW5nIEhGUyYjNDM7IEItVHJlZSBOb2RlIFJlY29yZCBDb3VudHMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBjb3JlIG9mIGl0IGlzIGFkZGluZyB2YWxpZGF0aW9uIGZvciBgbnVtX3JlY3NgIHdpdGhpbiBIRlMmIzQzOyBiLXRyZWUgbm9kZXMuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IG1vZGlmaWNhdGlvbnMgYWNyb3NzIGEgZmV3IGtleSBmaWxlczogYGJmaW5kLmNgLCBgYm5vZGUuY2AsIGBicmVjLmNgLCBhbmQgdGhlIGhlYWRlciwgYGhmc3BsdXNfZnMuaGAuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgZGVmaW5lZCBhIG5ldyBpbmxpbmUgZnVuY3Rpb24sIGBoZnNfYm5vZGVfbnVtX3JlY3NfdmFsaWRgLCByaWdodCB0aGVyZSBpbiBgaGZzcGx1c19mcy5oYC4gU21hcnQgbW92ZSwga2VlcHMgaXQgdGlkeS4KCkZyb20gdGhlIGxvb2tzIG9mIGl0LCB0aGlzIG5ldyB2YWxpZGF0aW9uIGlzIGJlaW5nIGludGVncmF0ZWQgaW50byBhIGJ1bmNoIG9mIGV4aXN0aW5nIGZ1bmN0aW9ucyBsaWtlIGBoZnNfYm5vZGVfZHVtcGAsIGBoZnNfYm5vZGVfZmluZGAsIGBoZnNfYnJlY19sZW5vZmZgLCBgaGZzX2JyZWNfa2V5bGVuYCwgYW5kIGBoZnNfYnJlY19yZW1vdmVgLiBUaGF0IG1ha2VzIHNlbnNlOyBjYXRjaGluZyBlcnJvcnMgZWFybHkgaXMgYWx3YXlzIHRoZSBiZXN0IGFwcHJvYWNoLiBUaGV5JiMzOTt2ZSBhbHNvIGFkZGVkIGV4cGxpY2l0IGNoZWNrcyBmb3IgYGJub2RlLSZndDtudW1fcmVjc2AgYmVpbmcgemVybyBpbiBgX19oZnNfYnJlY19maW5kYCBhbmQgYGhmc19icmVjX2dvdG9gLiBHb29kLCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgYWxzbyBhZGRpbmcgc29tZSBjaGVja3MgZm9yIHRoZSBga2V5bGVuYCBhbmQgYG5leHRfb2ZmYCB2YWx1ZXMgYXMgd2VsbCAtIGdvb2QsIHRob3JvdWdoLgoKT3ZlcmFsbCwgdGhlIGNvZGUgbG9va3Mgc29saWQgYW5kIGZ1bmN0aW9uYWwuIE15IGZvY3VzIGlzIGFsd2F5cyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBpbXBsaWNhdGlvbnMgd2l0aGluIHRoZSBIRlMmIzQzOyBmaWxlc3lzdGVtIGNvbnRleHQuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhlIGBIRlNQTFVTX0ZTYCBjb25maWcgb3B0aW9uIGFuZCwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBleGFjdCBjb25maWcgbmFtZSBpbiBgZnMvaGZzcGx1cy9LY29uZmlnYCBvciBgZnMvS2NvbmZpZ2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTE6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SEZTUExVUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9oZnNwbHVzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2hmc3BsdXMvS2NvbmZpZzoyOmNvbmZpZyBIRlNQTFVTX0ZTXG5mcy9oZnNwbHVzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0FwcGxlIEV4dGVuZGVkIEhGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvaGZzcGx1cy9LY29uZmlnLTE3LVxuZnMvaGZzcGx1cy9LY29uZmlnOjE4OmNvbmZpZyBIRlNQTFVTX0tVTklUX1RFU1RcbmZzL2hmc3BsdXMvS2NvbmZpZy0xOS1cdHRyaXN0YXRlIFwmIzM0O0tVbml0IHRlc3RzIGZvciBIRlMmIzQzOyBmaWxlc3lzdGVtXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbmZzL2hmc3BsdXMvS2NvbmZpZzoyMDpcdGRlcGVuZHMgb24gSEZTUExVU19GUyBcdTAwMjZcdTAwMjYgS1VOSVRcbmZzL2hmc3BsdXMvS2NvbmZpZy0yMS1cdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTE6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ4MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBIRlMmIzQzOyBGaWxlc3lzdGVtKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBIRlNQTFVTX0ZTYCBjb25maWcsIGFuZCB0aGUgZ29hbCBpcyB0byBpZGVudGlmeSB0aGUgbW9zdCBwcm9taXNpbmcgZnVuY3Rpb25zIGZvciBmdXp6aW5nLiBTZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiB0aGUgZm9jdXMgc2hvdWxkIGJlIG9uIGZ1bmN0aW9ucyB0aGF0IGFyZSBsaWtlbHkgdG8gZXhwb3NlIHZ1bG5lcmFiaWxpdGllcy4gVGhlIHRleHQgaGlnaGxpZ2h0cyBhIGxpc3Qgb2YgbW9kaWZpZWQgZnVuY3Rpb25zLCBhbmQgSSYjMzk7bSB1c2luZyB0aGF0IGFzIGEgc3RhcnRpbmcgcG9pbnQuCgpMb29raW5nIGF0IHRoZSBsaXN0LCBJIGhhdmU6IGBfX2hmc19icmVjX2ZpbmRgLCBgaGZzX2JyZWNfZ290b2AsIGBoZnNfYm5vZGVfZHVtcGAsIGBoZnNfYm5vZGVfZmluZGAsIGBoZnNfYnJlY19sZW5vZmZgLCBgaGZzX2JyZWNfa2V5bGVuYCwgYW5kIGBoZnNfYnJlY19yZW1vdmVgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYGhmc19ibm9kZV9kdW1wYCBpcyBsaWtlbHkganVzdCBhIGRlYnVnZ2luZyBmdW5jdGlvbiwgc28gaXQmIzM5O3MgcHJvYmFibHkgbm90IHRoZSBiZXN0IHRhcmdldCBmb3IgZnV6emluZyDigJMgbGVzcyBjaGFuY2Ugb2YgdHJpZ2dlcmluZyBhY3R1YWwgdnVsbmVyYWJpbGl0aWVzLiBUaGUgcmVzdCBsb29rIGxpa2Ugc29saWQgY2FuZGlkYXRlczogYF9faGZzX2JyZWNfZmluZGAsIGBoZnNfYnJlY19nb3RvYCwgYGhmc19ibm9kZV9maW5kYCwgYGhmc19icmVjX2xlbm9mZmAsIGBoZnNfYnJlY19rZXlsZW5gLCBhbmQgYGhmc19icmVjX3JlbW92ZWAuCgpOb3csIHdhaXQgYSBzZWNvbmQuIGBoZnNfYnJlY19sZW5vZmZgIGFuZCBgaGZzX2JyZWNfa2V5bGVuYC4uLiB0aG9zZSBzb3VuZCBsaWtlIHRoZXkmIzM5O3JlIHByb2JhYmx5IGNhbGxlZCAqdmVyeSogZnJlcXVlbnRseS4gVGhhdCBjb3VsZCBtZWFuIHRoZXkmIzM5O3JlIGluIGEgaG90IHBhdGgsIGFuZCB0aGF0JiMzOTtzIHRoZSBraW5kIG9mIHBsYWNlIHdoZXJlIEkmIzM5O20gZ29pbmcgdG8gZmluZCB0aGUgbW9zdCBpbnRlcmVzdGluZyByZXN1bHRzLiBJJiMzOTttIGdvaW5nIHRvIGludmVzdGlnYXRlIHRob3NlIHR3byBmdW5jdGlvbnMgYSBiaXQgbW9yZSBjbG9zZWx5IHRvIGRldGVybWluZSBpZiB0aGV5IHJlYWxseSBhcmUgaW4gdGhlIGhvdCBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hmc19icmVjX2xlbm9mZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvYmZpbmQuYz0xMDM9aW50IF9faGZzX2JyZWNfZmluZChzdHJ1Y3QgaGZzX2Jub2RlICpibm9kZSwgc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLFxuLS1cbmZzL2hmc3BsdXMvYmZpbmQuYy0xMTgtXHRcdHJlYyA9IChlICYjNDM7IGIpIC8gMjtcbmZzL2hmc3BsdXMvYmZpbmQuYzoxMTk6XHRcdGxlbiA9IGhmc19icmVjX2xlbm9mZihibm9kZSwgcmVjLCBcdTAwMjZvZmYpO1xuZnMvaGZzcGx1cy9iZmluZC5jLTEyMC1cdFx0a2V5bGVuID0gaGZzX2JyZWNfa2V5bGVuKGJub2RlLCByZWMpO1xuLS1cbmZzL2hmc3BsdXMvYmZpbmQuYy0xMzItXHRpZiAocmVjICE9IGUgXHUwMDI2XHUwMDI2IGUgXHUwMDNlPSAwKSB7XG5mcy9oZnNwbHVzL2JmaW5kLmM6MTMzOlx0XHRsZW4gPSBoZnNfYnJlY19sZW5vZmYoYm5vZGUsIGUsIFx1MDAyNm9mZik7XG5mcy9oZnNwbHVzL2JmaW5kLmMtMTM0LVx0XHRrZXlsZW4gPSBoZnNfYnJlY19rZXlsZW4oYm5vZGUsIGUpO1xuLS1cbmZzL2hmc3BsdXMvYmZpbmQuYz0yMjg9aW50IGhmc19icmVjX2dvdG8oc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLCBpbnQgY250KVxuLS1cbmZzL2hmc3BsdXMvYmZpbmQuYy0yODAtXG5mcy9oZnNwbHVzL2JmaW5kLmM6MjgxOlx0bGVuID0gaGZzX2JyZWNfbGVub2ZmKGJub2RlLCBmZC1cdTAwM2VyZWNvcmQsIFx1MDAyNm9mZik7XG5mcy9oZnNwbHVzL2JmaW5kLmMtMjgyLVx0a2V5bGVuID0gaGZzX2JyZWNfa2V5bGVuKGJub2RlLCBmZC1cdTAwM2VyZWNvcmQpO1xuLS1cbmZzL2hmc3BsdXMvYnJlYy5jPTE3PXN0YXRpYyBpbnQgaGZzX2J0cmVlX2luY19oZWlnaHQoc3RydWN0IGhmc19idHJlZSAqKTtcbi0tXG5mcy9oZnNwbHVzL2JyZWMuYy0xOS0vKiBHZXQgdGhlIGxlbmd0aCBhbmQgb2Zmc2V0IG9mIHRoZSBnaXZlbiByZWNvcmQgaW4gdGhlIGdpdmVuIG5vZGUgKi9cbmZzL2hmc3BsdXMvYnJlYy5jOjIwOnUxNiBoZnNfYnJlY19sZW5vZmYoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTE2IHJlYywgdTE2ICpvZmYpXG5mcy9oZnNwbHVzL2JyZWMuYy0yMS17XG4tLVxuZnMvaGZzcGx1cy9idHJlZS5jPTE0OT1zdGF0aWMgc3RydWN0IHBhZ2UgKmhmc19ibWFwX2dldF9tYXBfcGFnZShzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLFxuLS1cbmZzL2hmc3BsdXMvYnRyZWUuYy0xNjktXG5mcy9oZnNwbHVzL2J0cmVlLmM6MTcwOlx0Y3R4LVx1MDAzZWxlbiA9IGhmc19icmVjX2xlbm9mZihub2RlLCByZWNfaWR4LCBcdTAwMjZvZmYxNik7XG5mcy9oZnNwbHVzL2J0cmVlLmMtMTcxLVx0aWYgKCFjdHgtXHUwMDNlbGVuKVxuLS1cbmZzL2hmc3BsdXMvYnRyZWUuYz02MDk9dm9pZCBoZnNfYm1hcF9mcmVlKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUpXG4tLVxuZnMvaGZzcGx1cy9idHJlZS5jLTYyMy1cdFx0cmV0dXJuO1xuZnMvaGZzcGx1cy9idHJlZS5jOjYyNDpcdGxlbiA9IGhmc19icmVjX2xlbm9mZihub2RlLCAyLCBcdTAwMjZvZmYpO1xuZnMvaGZzcGx1cy9idHJlZS5jLTYyNS1cdHdoaWxlIChuaWR4IFx1MDAzZT0gbGVuICogOCkge1xuLS1cbmZzL2hmc3BsdXMvYnRyZWUuYy02NDktXHRcdH1cbmZzL2hmc3BsdXMvYnRyZWUuYzo2NTA6XHRcdGxlbiA9IGhmc19icmVjX2xlbm9mZihub2RlLCAwLCBcdTAwMjZvZmYpO1xuZnMvaGZzcGx1cy9idHJlZS5jLTY1MS1cdH1cbi0tXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaD0yODA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBoZnNwbHVzX21pbl9pb19zaXplKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMzA5LSNkZWZpbmUgaGZzX2Jub2RlX3B1dCBoZnNwbHVzX2Jub2RlX3B1dFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg6MzEwOiNkZWZpbmUgaGZzX2JyZWNfbGVub2ZmIGhmc3BsdXNfYnJlY19sZW5vZmZcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTMxMS0jZGVmaW5lIGhmc19icmVjX2tleWxlbiBoZnNwbHVzX2JyZWNfa2V5bGVuXG4tLVxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg9MzkwPWJvb2wgaGZzX2Jub2RlX25lZWRfemVyb291dChzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKTtcbi0tXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC0zOTItLyogYnJlYy5jICovXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaDozOTM6dTE2IGhmc19icmVjX2xlbm9mZihzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MTYgcmVjLCB1MTYgKm9mZik7XG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC0zOTQtdTE2IGhmc19icmVjX2tleWxlbihzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MTYgcmVjKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjUxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQnJlYWR0aCBvZiBgaGZzX2JyZWNfbGVub2ZmYCBVc2FnZSoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBoZnNfYnJlY19sZW5vZmZgIGlzIGEgcHJldHR5IGZ1bmRhbWVudGFsIGZ1bmN0aW9uLiBJdCYjMzk7cyBjYWxsZWQgZnJvbSBhIG51bWJlciBvZiBrZXkgcGxhY2VzOiBgX19oZnNfYnJlY19maW5kYCwgYGhmc19icmVjX2dvdG9gLCBgaGZzX2JtYXBfZ2V0X21hcF9wYWdlYCwgYW5kIGBoZnNfYm1hcF9mcmVlYC4gIFJpZ2h0IGF3YXksIEkmIzM5O20gdGhpbmtpbmcgdGhhdCBgX19oZnNfYnJlY19maW5kYCBhbmQgYGhmc19icmVjX2dvdG9gIGFyZSBwcm9iYWJseSBnZXR0aW5nIGhpdCAqYSBsb3QqIGR1cmluZyBkaXJlY3RvcnkgdHJhdmVyc2FsIGFuZCBnZW5lcmFsIGZpbGUgbG9va3VwcyDigJMgdGhlIGNvcmUgb3BlcmF0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgbW9kaWZpY2F0aW9ucyB0aGVyZS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHdoYXQgZWxzZSBpcyBwb3RlbnRpYWxseSBhZmZlY3RlZC4gTGV0JiMzOTtzIHNlZS4uLiBgaGZzX2Jub2RlX2ZpbmRgIGFuZCBgaGZzX2JyZWNfcmVtb3ZlYC4gSW50ZXJlc3RpbmcuIEFscmlnaHQsIGxldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gYGhmc19ibm9kZV9maW5kYCBhbmQgc2VlIHdoYXQgaXQgaXMgZG9pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTE6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGZzX2Jub2RlX2ZpbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9oZnNwbHVzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9oZnNwbHVzL2JmaW5kLmM9MTU1PWludCBoZnNfYnJlY19maW5kKHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgc2VhcmNoX3N0cmF0ZWd5X3QgZG9fa2V5X2NvbXBhcmUpXG4tLVxuZnMvaGZzcGx1cy9iZmluZC5jLTE3OS1cdGZvciAoOzspIHtcbmZzL2hmc3BsdXMvYmZpbmQuYzoxODA6XHRcdGJub2RlID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgbmlkeCk7XG5mcy9oZnNwbHVzL2JmaW5kLmMtMTgxLVx0XHRpZiAoSVNfRVJSKGJub2RlKSkge1xuLS1cbmZzL2hmc3BsdXMvYmZpbmQuYz0yMjg9aW50IGhmc19icmVjX2dvdG8oc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLCBpbnQgY250KVxuLS1cbmZzL2hmc3BsdXMvYmZpbmQuYy0yNTItXHRcdFx0aGZzX2Jub2RlX3B1dChibm9kZSk7XG5mcy9oZnNwbHVzL2JmaW5kLmM6MjUzOlx0XHRcdGJub2RlID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgaWR4KTtcbmZzL2hmc3BsdXMvYmZpbmQuYy0yNTQtXHRcdFx0aWYgKElTX0VSUihibm9kZSkpIHtcbi0tXG5mcy9oZnNwbHVzL2JmaW5kLmMtMjcwLVx0XHRcdGhmc19ibm9kZV9wdXQoYm5vZGUpO1xuZnMvaGZzcGx1cy9iZmluZC5jOjI3MTpcdFx0XHRibm9kZSA9IGhmc19ibm9kZV9maW5kKHRyZWUsIGlkeCk7XG5mcy9oZnNwbHVzL2JmaW5kLmMtMjcyLVx0XHRcdGlmIChJU19FUlIoYm5vZGUpKSB7XG4tLVxuZnMvaGZzcGx1cy9ibm9kZS5jPTM5ND12b2lkIGhmc19ibm9kZV91bmxpbmsoc3RydWN0IGhmc19ibm9kZSAqbm9kZSlcbi0tXG5mcy9oZnNwbHVzL2Jub2RlLmMtNDAxLVx0aWYgKG5vZGUtXHUwMDNlcHJldikge1xuZnMvaGZzcGx1cy9ibm9kZS5jOjQwMjpcdFx0dG1wID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgbm9kZS1cdTAwM2VwcmV2KTtcbmZzL2hmc3BsdXMvYm5vZGUuYy00MDMtXHRcdGlmIChJU19FUlIodG1wKSlcbi0tXG5mcy9oZnNwbHVzL2Jub2RlLmMtNDEzLVx0aWYgKG5vZGUtXHUwMDNlbmV4dCkge1xuZnMvaGZzcGx1cy9ibm9kZS5jOjQxNDpcdFx0dG1wID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgbm9kZS1cdTAwM2VuZXh0KTtcbmZzL2hmc3BsdXMvYm5vZGUuYy00MTUtXHRcdGlmIChJU19FUlIodG1wKSlcbi0tXG5mcy9oZnNwbHVzL2Jub2RlLmM9NDM4PXN0YXRpYyBpbmxpbmUgaW50IGhmc19ibm9kZV9oYXNoKHUzMiBudW0pXG4tLVxuZnMvaGZzcGx1cy9ibm9kZS5jLTQ0NC1cbmZzL2hmc3BsdXMvYm5vZGUuYzo0NDU6c3RydWN0IGhmc19ibm9kZSAqaGZzX2Jub2RlX2ZpbmRoYXNoKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUsIHUzMiBjbmlkKVxuZnMvaGZzcGx1cy9ibm9kZS5jLTQ0Ni17XG4tLVxuZnMvaGZzcGx1cy9ibm9kZS5jPTQ2Mj1zdGF0aWMgc3RydWN0IGhmc19ibm9kZSAqX19oZnNfYm5vZGVfY3JlYXRlKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUsIHUzMiBjbmlkKVxuLS1cbmZzL2hmc3BsdXMvYm5vZGUuYy00ODYtXHRzcGluX2xvY2soXHUwMDI2dHJlZS1cdTAwM2VoYXNoX2xvY2spO1xuZnMvaGZzcGx1cy9ibm9kZS5jOjQ4NzpcdG5vZGUyID0gaGZzX2Jub2RlX2ZpbmRoYXNoKHRyZWUsIGNuaWQpO1xuZnMvaGZzcGx1cy9ibm9kZS5jLTQ4OC1cdGlmICghbm9kZTIpIHtcbi0tXG5mcy9oZnNwbHVzL2Jub2RlLmM9NTIwPXZvaWQgaGZzX2Jub2RlX3VuaGFzaChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlKVxuLS1cbmZzL2hmc3BsdXMvYm5vZGUuYy01MzQtLyogTG9hZCBhIHBhcnRpY3VsYXIgbm9kZSBvdXQgb2YgYSB0cmVlICovXG5mcy9oZnNwbHVzL2Jub2RlLmM6NTM1OnN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibm9kZV9maW5kKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUsIHUzMiBudW0pXG5mcy9oZnNwbHVzL2Jub2RlLmMtNTM2LXtcbi0tXG5mcy9oZnNwbHVzL2Jub2RlLmMtNTQyLVx0c3Bpbl9sb2NrKFx1MDAyNnRyZWUtXHUwMDNlaGFzaF9sb2NrKTtcbmZzL2hmc3BsdXMvYm5vZGUuYzo1NDM6XHRub2RlID0gaGZzX2Jub2RlX2ZpbmRoYXNoKHRyZWUsIG51bSk7XG5mcy9oZnNwbHVzL2Jub2RlLmMtNTQ0LVx0aWYgKG5vZGUpIHtcbi0tXG5mcy9oZnNwbHVzL2Jub2RlLmM9NjM0PXN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibm9kZV9jcmVhdGUoc3RydWN0IGhmc19idHJlZSAqdHJlZSwgdTMyIG51bSlcbi0tXG5mcy9oZnNwbHVzL2Jub2RlLmMtNjQwLVx0c3Bpbl9sb2NrKFx1MDAyNnRyZWUtXHUwMDNlaGFzaF9sb2NrKTtcbmZzL2hmc3BsdXMvYm5vZGUuYzo2NDE6XHRub2RlID0gaGZzX2Jub2RlX2ZpbmRoYXNoKHRyZWUsIG51bSk7XG5mcy9oZnNwbHVzL2Jub2RlLmMtNjQyLVx0c3Bpbl91bmxvY2soXHUwMDI2dHJlZS1cdTAwM2VoYXNoX2xvY2spO1xuLS1cbmZzL2hmc3BsdXMvYnJlYy5jPTgxPWludCBoZnNfYnJlY19pbnNlcnQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLCB2b2lkICplbnRyeSwgdTMyIGVudHJ5X2xlbilcbi0tXG5mcy9oZnNwbHVzL2JyZWMuYy05My1cdFx0XHRoZnNfYnRyZWVfaW5jX2hlaWdodCh0cmVlKTtcbmZzL2hmc3BsdXMvYnJlYy5jOjk0Olx0XHRub2RlID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgdHJlZS1cdTAwM2VsZWFmX2hlYWQpO1xuZnMvaGZzcGx1cy9icmVjLmMtOTUtXHRcdGlmIChJU19FUlIobm9kZSkpXG4tLVxuZnMvaGZzcGx1cy9icmVjLmMtMTY4LVx0XHR9XG5mcy9oZnNwbHVzL2JyZWMuYzoxNjk6XHRcdGZkLVx1MDAzZWJub2RlID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgbmV3X25vZGUtXHUwMDNlcGFyZW50KTtcbmZzL2hmc3BsdXMvYnJlYy5jLTE3MC1cbi0tXG5mcy9oZnNwbHVzL2JyZWMuYz0xOTc9aW50IGhmc19icmVjX3JlbW92ZShzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXG4tLVxuZnMvaGZzcGx1cy9icmVjLmMtMjI2LVx0XHRcdHJldHVybiAwO1xuZnMvaGZzcGx1cy9icmVjLmM6MjI3Olx0XHRwYXJlbnQgPSBoZnNfYm5vZGVfZmluZCh0cmVlLCBub2RlLVx1MDAzZXBhcmVudCk7XG5mcy9oZnNwbHVzL2JyZWMuYy0yMjgtXHRcdGlmIChJU19FUlIocGFyZW50KSlcbi0tXG5mcy9oZnNwbHVzL2JyZWMuYz0yNjA9c3RhdGljIHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibm9kZV9zcGxpdChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXG4tLVxuZnMvaGZzcGx1cy9icmVjLmMtMjg1LVx0aWYgKG5vZGUtXHUwMDNlbmV4dClcbmZzL2hmc3BsdXMvYnJlYy5jOjI4NjpcdFx0bmV4dF9ub2RlID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgbm9kZS1cdTAwM2VuZXh0KTtcbmZzL2hmc3BsdXMvYnJlYy5jLTI4Ny1cdGVsc2Vcbi0tXG5mcy9oZnNwbHVzL2JyZWMuYz0zODk9c3RhdGljIGludCBoZnNfYnJlY191cGRhdGVfcGFyZW50KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcbi0tXG5mcy9oZnNwbHVzL2JyZWMuYy00MDMtYWdhaW46XG5mcy9oZnNwbHVzL2JyZWMuYzo0MDQ6XHRwYXJlbnQgPSBoZnNfYm5vZGVfZmluZCh0cmVlLCBub2RlLVx1MDAzZXBhcmVudCk7XG5mcy9oZnNwbHVzL2JyZWMuYy00MDUtXHRpZiAoSVNfRVJSKHBhcmVudCkpXG4tLVxuZnMvaGZzcGx1cy9icmVjLmMtNDY4LVx0XHR9XG5mcy9oZnNwbHVzL2JyZWMuYzo0Njk6XHRcdGZkLVx1MDAzZWJub2RlID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgbmV3X25vZGUtXHUwMDNlcGFyZW50KTtcbmZzL2hmc3BsdXMvYnJlYy5jLTQ3MC1cdFx0LyogY3JlYXRlIGluZGV4IGtleSBhbmQgZW50cnkgKi9cbi0tXG5mcy9oZnNwbHVzL2JyZWMuYz00OTU9c3RhdGljIGludCBoZnNfYnRyZWVfaW5jX2hlaWdodChzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKVxuLS1cbmZzL2hmc3BsdXMvYnJlYy5jLTUwMy1cdGlmICh0cmVlLVx1MDAzZXJvb3QpIHtcbmZzL2hmc3BsdXMvYnJlYy5jOjUwNDpcdFx0bm9kZSA9IGhmc19ibm9kZV9maW5kKHRyZWUsIHRyZWUtXHUwMDNlcm9vdCk7XG5mcy9oZnNwbHVzL2JyZWMuYy01MDUtXHRcdGlmIChJU19FUlIobm9kZSkpXG4tLVxuZnMvaGZzcGx1cy9idHJlZS5jPTI2OD1zdHJ1Y3QgaGZzX2J0cmVlICpoZnNfYnRyZWVfb3BlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgaWQpXG4tLVxuZnMvaGZzcGx1cy9idHJlZS5jLTM4My1cbmZzL2hmc3BsdXMvYnRyZWUuYzozODQ6XHRub2RlID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgSEZTUExVU19UUkVFX0hFQUQpO1xuZnMvaGZzcGx1cy9idHJlZS5jLTM4NS1cdGlmIChJU19FUlIobm9kZSkpXG4tLVxuZnMvaGZzcGx1cy9idHJlZS5jPTQzNT1pbnQgaGZzX2J0cmVlX3dyaXRlKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUpXG4tLVxuZnMvaGZzcGx1cy9idHJlZS5jLTQ0MC1cbmZzL2hmc3BsdXMvYnRyZWUuYzo0NDE6XHRub2RlID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgMCk7XG5mcy9oZnNwbHVzL2J0cmVlLmMtNDQyLVx0aWYgKElTX0VSUihub2RlKSlcbi0tXG5mcy9oZnNwbHVzL2J0cmVlLmM9NTI4PXN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibWFwX2FsbG9jKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUpXG4tLVxuZnMvaGZzcGx1cy9idHJlZS5jLTU0My1cdG5pZHggPSAwO1xuZnMvaGZzcGx1cy9idHJlZS5jOjU0NDpcdG5vZGUgPSBoZnNfYm5vZGVfZmluZCh0cmVlLCBuaWR4KTtcbmZzL2hmc3BsdXMvYnRyZWUuYy01NDUtXHRpZiAoSVNfRVJSKG5vZGUpKVxuLS1cbmZzL2hmc3BsdXMvYnRyZWUuYy01OTItXHRcdH0gZWxzZVxuZnMvaGZzcGx1cy9idHJlZS5jOjU5MzpcdFx0XHRuZXh0X25vZGUgPSBoZnNfYm5vZGVfZmluZCh0cmVlLCBuaWR4KTtcbmZzL2hmc3BsdXMvYnRyZWUuYy01OTQtXHRcdGhmc19ibm9kZV9wdXQobm9kZSk7XG4tLVxuZnMvaGZzcGx1cy9idHJlZS5jPTYwOT12b2lkIGhmc19ibWFwX2ZyZWUoc3RydWN0IGhmc19ibm9kZSAqbm9kZSlcbi0tXG5mcy9oZnNwbHVzL2J0cmVlLmMtNjIwLVx0bmlkeCA9IG5vZGUtXHUwMDNldGhpcztcbmZzL2hmc3BsdXMvYnRyZWUuYzo2MjE6XHRub2RlID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgMCk7XG5mcy9oZnNwbHVzL2J0cmVlLmMtNjIyLVx0aWYgKElTX0VSUihub2RlKSlcbi0tXG5mcy9oZnNwbHVzL2J0cmVlLmMtNjM4LVx0XHRoZnNfYm5vZGVfcHV0KG5vZGUpO1xuZnMvaGZzcGx1cy9idHJlZS5jOjYzOTpcdFx0bm9kZSA9IGhmc19ibm9kZV9maW5kKHRyZWUsIGkpO1xuZnMvaGZzcGx1cy9idHJlZS5jLTY0MC1cdFx0aWYgKElTX0VSUihub2RlKSlcbi0tXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaD0yODA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBoZnNwbHVzX21pbl9pb19zaXplKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMzAyLSNkZWZpbmUgaGZzX2Jub2RlX3VubGluayBoZnNwbHVzX2Jub2RlX3VubGlua1xuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg6MzAzOiNkZWZpbmUgaGZzX2Jub2RlX2ZpbmRoYXNoIGhmc3BsdXNfYm5vZGVfZmluZGhhc2hcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oOjMwNDojZGVmaW5lIGhmc19ibm9kZV9maW5kIGhmc3BsdXNfYm5vZGVfZmluZFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMzA1LSNkZWZpbmUgaGZzX2Jub2RlX3VuaGFzaCBoZnNwbHVzX2Jub2RlX3VuaGFzaFxuLS1cbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oPTM4Mj12b2lkIGhmc19ibm9kZV91bmxpbmsoc3RydWN0IGhmc19ibm9kZSAqbm9kZSk7XG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaDozODM6c3RydWN0IGhmc19ibm9kZSAqaGZzX2Jub2RlX2ZpbmRoYXNoKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUsIHUzMiBjbmlkKTtcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTM4NC12b2lkIGhmc19ibm9kZV91bmhhc2goc3RydWN0IGhmc19ibm9kZSAqbm9kZSk7XG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaDozODU6c3RydWN0IGhmc19ibm9kZSAqaGZzX2Jub2RlX2ZpbmQoc3RydWN0IGhmc19idHJlZSAqdHJlZSwgdTMyIG51bSk7XG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC0zODYtdm9pZCBoZnNfYm5vZGVfZnJlZShzdHJ1Y3QgaGZzX2Jub2RlICpub2RlKTtcbi0tXG5mcy9oZnNwbHVzL2lub2RlLmM9NjI9c3RhdGljIGJvb2wgaGZzcGx1c19yZWxlYXNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IG1hc2spXG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jLTkxLVx0XHRzcGluX2xvY2soXHUwMDI2dHJlZS1cdTAwM2VoYXNoX2xvY2spO1xuZnMvaGZzcGx1cy9pbm9kZS5jOjkyOlx0XHRub2RlID0gaGZzX2Jub2RlX2ZpbmRoYXNoKHRyZWUsIG5pZHgpO1xuZnMvaGZzcGx1cy9pbm9kZS5jLTkzLVx0XHRpZiAoIW5vZGUpXG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jLTEwNy1cdFx0ZG8ge1xuZnMvaGZzcGx1cy9pbm9kZS5jOjEwODpcdFx0XHRub2RlID0gaGZzX2Jub2RlX2ZpbmRoYXNoKHRyZWUsIG5pZHgmIzQzOyYjNDM7KTtcbmZzL2hmc3BsdXMvaW5vZGUuYy0xMDktXHRcdFx0aWYgKCFub2RlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzYyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBPcHRpbWl6YXRpb24gVGFyZ2V0cyoqCgpPa2F5LCBzbyBgaGZzX2Jub2RlX2ZpbmRgIGlzIHByZXR0eSB1YmlxdWl0b3VzIHdpdGhpbiB0aGlzIGNvZGViYXNlLiBJdCYjMzk7cyB1c2VkIGFsbCBvdmVyIHRoZSBwbGFjZSwgd2hpY2ggbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIHBlcmZvcm1hbmNlIHR1bmluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gZnVuY3Rpb25zIHRoYXQgZGlyZWN0bHkgaW50ZXJhY3Qgd2l0aCB0aGF0LiBgX19oZnNfYnJlY19maW5kYCBhbmQgYGhmc19icmVjX2dvdG9gIGJvdGggc2VlbSBsaWtlIHN0cm9uZyBwb3NzaWJpbGl0aWVzIGZvciBvcHRpbWl6YXRpb24sIGdpdmVuIHRoZWlyIGxpa2VseSByZWxhdGlvbnNoaXAgd2l0aCB0aGUgY29yZSBzZWFyY2ggZnVuY3Rpb25hbGl0eS4gYGhmc19icmVjX3JlbW92ZWAgYWxzbyBjYXRjaGVzIG15IGV5ZSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhhdCwgZXZlbiB0aG91Z2ggaXQgbWF5IGhhdmUgbGVzcyBpbXBhY3Qgb24gZ2VuZXJhbCBzZWFyY2ggYW5kIGxvb2t1cC4gRm9yIG5vdywgbGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgaGZzX2JyZWNfcmVtb3ZlYCB0byBzZWUgd2hhdCBraW5kIG9mIGltcGFjdCBpdHMgb3B0aW1pemF0aW9uIG1heSBoYXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoZnNfYnJlY19yZW1vdmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9oZnNwbHVzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYz0zMDU9c3RhdGljIGludCBfX2hmc3BsdXNfZGVsZXRlX2F0dHIoc3RydWN0IGlub2RlICppbm9kZSwgdTMyIGNuaWQsXG4tLVxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmMtMzM4LVxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmM6MzM5Olx0ZXJyID0gaGZzX2JyZWNfcmVtb3ZlKGZkKTtcbmZzL2hmc3BsdXMvYXR0cmlidXRlcy5jLTM0MC1cdGlmIChlcnIpXG4tLVxuZnMvaGZzcGx1cy9icmVjLmM9ODE9aW50IGhmc19icmVjX2luc2VydChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIHZvaWQgKmVudHJ5LCB1MzIgZW50cnlfbGVuKVxuLS1cbmZzL2hmc3BsdXMvYnJlYy5jLTE5Ni1cbmZzL2hmc3BsdXMvYnJlYy5jOjE5NzppbnQgaGZzX2JyZWNfcmVtb3ZlKHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcbmZzL2hmc3BsdXMvYnJlYy5jLTE5OC17XG4tLVxuZnMvaGZzcGx1cy9jYXRhbG9nLmM9MjUzPWludCBoZnNwbHVzX2NyZWF0ZV9jYXQodTMyIGNuaWQsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL2hmc3BsdXMvY2F0YWxvZy5jLTMyNC1cdGlmICghaGZzX2JyZWNfZmluZChcdTAwMjZmZCwgaGZzX2ZpbmRfcmVjX2J5X2tleSkpXG5mcy9oZnNwbHVzL2NhdGFsb2cuYzozMjU6XHRcdGhmc19icmVjX3JlbW92ZShcdTAwMjZmZCk7XG5mcy9oZnNwbHVzL2NhdGFsb2cuYy0zMjYtZXJyMjpcbi0tXG5mcy9oZnNwbHVzL2NhdGFsb2cuYz0zMzE9aW50IGhmc3BsdXNfZGVsZXRlX2NhdCh1MzIgY25pZCwgc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpzdHIpXG4tLVxuZnMvaGZzcGx1cy9jYXRhbG9nLmMtMzkzLVxuZnMvaGZzcGx1cy9jYXRhbG9nLmM6Mzk0Olx0ZXJyID0gaGZzX2JyZWNfcmVtb3ZlKFx1MDAyNmZkKTtcbmZzL2hmc3BsdXMvY2F0YWxvZy5jLTM5NS1cdGlmIChlcnIpXG4tLVxuZnMvaGZzcGx1cy9jYXRhbG9nLmMtNDAyLVxuZnMvaGZzcGx1cy9jYXRhbG9nLmM6NDAzOlx0ZXJyID0gaGZzX2JyZWNfcmVtb3ZlKFx1MDAyNmZkKTtcbmZzL2hmc3BsdXMvY2F0YWxvZy5jLTQwNC1cdGlmIChlcnIpXG4tLVxuZnMvaGZzcGx1cy9jYXRhbG9nLmM9NDI1PWludCBoZnNwbHVzX3JlbmFtZV9jYXQodTMyIGNuaWQsXG4tLVxuZnMvaGZzcGx1cy9jYXRhbG9nLmMtNDk4LVx0XHRnb3RvIG91dDtcbmZzL2hmc3BsdXMvY2F0YWxvZy5jOjQ5OTpcdGVyciA9IGhmc19icmVjX3JlbW92ZShcdTAwMjZzcmNfZmQpO1xuZnMvaGZzcGx1cy9jYXRhbG9nLmMtNTAwLVx0aWYgKGVycilcbi0tXG5mcy9oZnNwbHVzL2NhdGFsb2cuYy01MTItXHR0eXBlID0gaGZzX2Jub2RlX3JlYWRfdTE2KHNyY19mZC5ibm9kZSwgc3JjX2ZkLmVudHJ5b2Zmc2V0KTtcbmZzL2hmc3BsdXMvY2F0YWxvZy5jOjUxMzpcdGVyciA9IGhmc19icmVjX3JlbW92ZShcdTAwMjZzcmNfZmQpO1xuZnMvaGZzcGx1cy9jYXRhbG9nLmMtNTE0LVx0aWYgKGVycilcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYz0zOTM9aW50IGhmc3BsdXNfZnJlZV9mb3JrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBjbmlkLFxuLS1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTQyMy1cdFx0c3RhcnQgPSBiZTMyX3RvX2NwdShmZC5rZXktXHUwMDNlZXh0LnN0YXJ0X2Jsb2NrKTtcbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjQyNDpcdFx0aGZzX2JyZWNfcmVtb3ZlKFx1MDAyNmZkKTtcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTQyNS1cbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYz01NDQ9dm9pZCBoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYy02MDYtXHRcdGlmIChibGtfY250IFx1MDAzYz0gc3RhcnQpXG5mcy9oZnNwbHVzL2V4dGVudHMuYzo2MDc6XHRcdFx0aGZzX2JyZWNfcmVtb3ZlKFx1MDAyNmZkKTtcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTYwOC1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmZkLnRyZWUtXHUwMDNldHJlZV9sb2NrKTtcbi0tXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaD0yODA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBoZnNwbHVzX21pbl9pb19zaXplKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMzEyLSNkZWZpbmUgaGZzX2JyZWNfaW5zZXJ0IGhmc3BsdXNfYnJlY19pbnNlcnRcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oOjMxMzojZGVmaW5lIGhmc19icmVjX3JlbW92ZSBoZnNwbHVzX2JyZWNfcmVtb3ZlXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC0zMTQtI2RlZmluZSBoZnNfZmluZF9pbml0IGhmc3BsdXNfZmluZF9pbml0XG4tLVxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg9Mzk1PWludCBoZnNfYnJlY19pbnNlcnQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLCB2b2lkICplbnRyeSwgdTMyIGVudHJ5X2xlbik7XG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaDozOTY6aW50IGhmc19icmVjX3JlbW92ZShzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpO1xuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMzk3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI0NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgUG90ZW50aWFsOiBoZnNfYnJlY19yZW1vdmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBoZnNfYnJlY19yZW1vdmVgIGFuZCB0aGlua2luZyBhYm91dCBpdHMgcG90ZW50aWFsIGZvciBmdXp6aW5nLiBJJiMzOTt2ZSBub3RpY2VkIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGEgc2lnbmlmaWNhbnQgbnVtYmVyIG9mIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIEhGUyYjNDM7IGNvZGU6IGBfX2hmc3BsdXNfZGVsZXRlX2F0dHJgLCB0aGUgZXJyb3IgcGF0aHMgaW4gYGhmc3BsdXNfY3JlYXRlX2NhdGAsIGBoZnNwbHVzX2RlbGV0ZV9jYXRgLCBgaGZzcGx1c19yZW5hbWVfY2F0YCwgYGhmc3BsdXNfZnJlZV9mb3JrYCwgYW5kIGBoZnNwbHVzX2ZpbGVfdHJ1bmNhdGVgLiBUaGF0JiMzOTtzIGEgcHJldHR5IGRpdmVyc2Ugc2V0IG9mIGNvbnRleHRzLCB3aGljaCBzdWdnZXN0cyBpdCBpbnRlcmFjdHMgd2l0aCBhIGxvdCBvZiBkaWZmZXJlbnQgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBsb2dpYyBwYXRocy4gVGhpcyBtYWtlcyBpdCBhIHByaW1lIGNhbmRpZGF0ZSwgaW4gbXkgdmlldywgYmVjYXVzZSBmdXp6aW5nIGl0IGlzIGxpa2VseSB0byBleHBvc2UgYSByYW5nZSBvZiB2dWxuZXJhYmlsaXRpZXMuCgpOb3csIGxldCYjMzk7cyB0dXJuIG91ciBhdHRlbnRpb24gdG8gaXRzIGNvbXBhbmlvbiBmdW5jdGlvbiwgYF9faGZzX2JyZWNfZmluZGAuIEkmIzM5O20gY3VyaW91cyB0byBzZWUgaG93IGl0IHdvcmtzIGFuZCBjb25zaWRlciB3aGV0aGVyIHRoYXQgZnVuY3Rpb24gaXMgYW5vdGhlciBnb29kIHRhcmdldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTE6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19oZnNfYnJlY19maW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy9iZmluZC5jPTgxPWludCBoZnNfZmluZF9yZWNfYnlfa2V5KHN0cnVjdCBoZnNfYm5vZGUgKmJub2RlLFxuLS1cbmZzL2hmc3BsdXMvYmZpbmQuYy0xMDItLyogRmluZCB0aGUgcmVjb3JkIGluIGJub2RlIHRoYXQgYmVzdCBtYXRjaGVzIGtleSAobm90IGdyZWF0ZXIgdGhhbi4uLikqL1xuZnMvaGZzcGx1cy9iZmluZC5jOjEwMzppbnQgX19oZnNfYnJlY19maW5kKHN0cnVjdCBoZnNfYm5vZGUgKmJub2RlLCBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsXG5mcy9oZnNwbHVzL2JmaW5kLmMtMTA0LVx0XHRcdFx0XHRzZWFyY2hfc3RyYXRlZ3lfdCByZWNfZm91bmQpXG4tLVxuZnMvaGZzcGx1cy9iZmluZC5jPTE1NT1pbnQgaGZzX2JyZWNfZmluZChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIHNlYXJjaF9zdHJhdGVneV90IGRvX2tleV9jb21wYXJlKVxuLS1cbmZzL2hmc3BsdXMvYmZpbmQuYy0xOTEtXG5mcy9oZnNwbHVzL2JmaW5kLmM6MTkyOlx0XHRyZXMgPSBfX2hmc19icmVjX2ZpbmQoYm5vZGUsIGZkLCBkb19rZXlfY29tcGFyZSk7XG5mcy9oZnNwbHVzL2JmaW5kLmMtMTkzLVx0XHRpZiAoIWhlaWdodClcbi0tXG5mcy9oZnNwbHVzL2JyZWMuYz04MT1pbnQgaGZzX2JyZWNfaW5zZXJ0KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgdm9pZCAqZW50cnksIHUzMiBlbnRyeV9sZW4pXG4tLVxuZnMvaGZzcGx1cy9icmVjLmMtMTc3LVx0XHRoZnNfYm5vZGVfcmVhZF9rZXkobmV3X25vZGUsIGZkLVx1MDAzZXNlYXJjaF9rZXksIDE0KTtcbmZzL2hmc3BsdXMvYnJlYy5jOjE3ODpcdFx0X19oZnNfYnJlY19maW5kKGZkLVx1MDAzZWJub2RlLCBmZCwgaGZzX2ZpbmRfcmVjX2J5X2tleSk7XG5mcy9oZnNwbHVzL2JyZWMuYy0xNzktXG4tLVxuZnMvaGZzcGx1cy9icmVjLmM9MTk3PWludCBoZnNfYnJlY19yZW1vdmUoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxuLS1cbmZzL2hmc3BsdXMvYnJlYy5jLTIzMi1cbmZzL2hmc3BsdXMvYnJlYy5jOjIzMzpcdFx0X19oZnNfYnJlY19maW5kKG5vZGUsIGZkLCBoZnNfZmluZF9yZWNfYnlfa2V5KTtcbmZzL2hmc3BsdXMvYnJlYy5jLTIzNC1cdFx0Z290byBhZ2Fpbjtcbi0tXG5mcy9oZnNwbHVzL2JyZWMuYz0zODk9c3RhdGljIGludCBoZnNfYnJlY191cGRhdGVfcGFyZW50KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcbi0tXG5mcy9oZnNwbHVzL2JyZWMuYy00MDYtXHRcdHJldHVybiBQVFJfRVJSKHBhcmVudCk7XG5mcy9oZnNwbHVzL2JyZWMuYzo0MDc6XHRfX2hmc19icmVjX2ZpbmQocGFyZW50LCBmZCwgaGZzX2ZpbmRfcmVjX2J5X2tleSk7XG5mcy9oZnNwbHVzL2JyZWMuYy00MDgtXHRpZiAoZmQtXHUwMDNlcmVjb3JkIFx1MDAzYyAwKVxuLS1cbmZzL2hmc3BsdXMvYnJlYy5jLTQ3My1cbmZzL2hmc3BsdXMvYnJlYy5jOjQ3NDpcdFx0X19oZnNfYnJlY19maW5kKGZkLVx1MDAzZWJub2RlLCBmZCwgaGZzX2ZpbmRfcmVjX2J5X2tleSk7XG5mcy9oZnNwbHVzL2JyZWMuYy00NzUtXHRcdGhmc19icmVjX2luc2VydChmZCwgXHUwMDI2Y25pZCwgc2l6ZW9mKGNuaWQpKTtcbi0tXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaD0yODA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBoZnNwbHVzX21pbl9pb19zaXplKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMzE1LSNkZWZpbmUgaGZzX2ZpbmRfZXhpdCBoZnNwbHVzX2ZpbmRfZXhpdFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg6MzE2OiNkZWZpbmUgX19oZnNfYnJlY19maW5kIF9faGZzcGx1c19icmVjX2ZpbmRcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTMxNy0jZGVmaW5lIGhmc19icmVjX2ZpbmQgaGZzcGx1c19icmVjX2ZpbmRcbi0tXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaD00MDM9aW50IGhmc19maW5kX3JlY19ieV9rZXkoc3RydWN0IGhmc19ibm9kZSAqYm5vZGUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCxcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTQwNC1cdFx0XHRpbnQgKmJlZ2luLCBpbnQgKmVuZCwgaW50ICpjdXJfcmVjKTtcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oOjQwNTppbnQgX19oZnNfYnJlY19maW5kKHN0cnVjdCBoZnNfYm5vZGUgKmJub2RlLCBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC00MDYtXHRcdCAgICBzZWFyY2hfc3RyYXRlZ3lfdCByZWNfZm91bmQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzY4NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nOgoKKipBbmFseXppbmcgQ29yZSBIRlMgQi1UcmVlIEZ1bmN0aW9uYWxpdHkqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhpcyBgX19oZnNfYnJlY19maW5kYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXRzIHdpZGVzcHJlYWQgdXNlIHN1Z2dlc3RzIGl0JiMzOTtzIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIEhGUyBCLXRyZWUgcHV6emxlLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGNhbGxlZCB3aXRoaW4gYGhmc19icmVjX2ZpbmRgIGl0c2VsZiwgYnV0IGFsc28gaW4gYGhmc19icmVjX2luc2VydGAsIGBoZnNfYnJlY19yZW1vdmVgLCBhbmQgZXZlbiBgaGZzX2JyZWNfdXBkYXRlX3BhcmVudGAuLi4gd2VsbCwgdGhhdCYjMzk7cyBhIHByZXR0eSBzdHJvbmcgaW5kaWNhdG9yIG9mIGEgY29yZSBmdW5jdGlvbi4gSXQmIzM5O3MgZXNzZW50aWFsbHkgdGhlIGZvdW5kYXRpb24uIFdlIGNhbiBleHBlY3QgdGhpcyB0byBiZSBhIGtleSBlbGVtZW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgQi1UcmVlJiMzOTtzIGZ1bmRhbWVudGFsIHRhc2tzIGFyZSBpbXBsZW1lbnRlZC4KCkdpdmVuIGl0cyBwZXJ2YXNpdmUgbmF0dXJlLCBJIHRoaW5rIHdlIHNob3VsZCBjaGVjayBgaGZzX2JyZWNfZ290b2AuIEl0IGlzIGFsd2F5cyBhIGdvb2QgaWRlYSB0byBjcm9zcy1yZWZlcmVuY2UgcmVsYXRlZCBjb21wb25lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoZnNfYnJlY19nb3RvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy9iZmluZC5jPTIxNT1pbnQgaGZzX2JyZWNfcmVhZChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIHZvaWQgKnJlYywgdTMyIHJlY19sZW4pXG4tLVxuZnMvaGZzcGx1cy9iZmluZC5jLTIyNy1cbmZzL2hmc3BsdXMvYmZpbmQuYzoyMjg6aW50IGhmc19icmVjX2dvdG8oc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLCBpbnQgY250KVxuZnMvaGZzcGx1cy9iZmluZC5jLTIyOS17XG4tLVxuZnMvaGZzcGx1cy9kaXIuYz0xMzA9c3RhdGljIGludCBoZnNwbHVzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KVxuLS1cbmZzL2hmc3BsdXMvZGlyLmMtMTkyLVx0XHRpZiAoZXJyID09IC1FTk9FTlQpXG5mcy9oZnNwbHVzL2Rpci5jOjE5MzpcdFx0XHRlcnIgPSBoZnNfYnJlY19nb3RvKFx1MDAyNmZkLCAxKTtcbmZzL2hmc3BsdXMvZGlyLmMtMTk0LVx0fSBlbHNlIHtcbmZzL2hmc3BsdXMvZGlyLmM6MTk1Olx0XHRlcnIgPSBoZnNfYnJlY19nb3RvKFx1MDAyNmZkLCBjdHgtXHUwMDNlcG9zIC0gMSk7XG5mcy9oZnNwbHVzL2Rpci5jLTE5Ni1cdH1cbi0tXG5mcy9oZnNwbHVzL2Rpci5jLTI2Ny1cdFx0XHRnb3RvIG91dDtcbmZzL2hmc3BsdXMvZGlyLmM6MjY4Olx0XHRlcnIgPSBoZnNfYnJlY19nb3RvKFx1MDAyNmZkLCAxKTtcbmZzL2hmc3BsdXMvZGlyLmMtMjY5LVx0XHRpZiAoZXJyKVxuLS1cbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oPTI4MD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGhmc3BsdXNfbWluX2lvX3NpemUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC0zMTgtI2RlZmluZSBoZnNfYnJlY19yZWFkIGhmc3BsdXNfYnJlY19yZWFkXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaDozMTk6I2RlZmluZSBoZnNfYnJlY19nb3RvIGhmc3BsdXNfYnJlY19nb3RvXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC0zMjAtI2RlZmluZSBoZnNfcGFydF9maW5kIGhmc3BsdXNfcGFydF9maW5kXG4tLVxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg9NDA4PWludCBoZnNfYnJlY19yZWFkKHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgdm9pZCAqcmVjLCB1MzIgcmVjX2xlbik7XG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaDo0MDk6aW50IGhmc19icmVjX2dvdG8oc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLCBpbnQgY250KTtcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTQxMC1cbi0tXG5mcy9oZnNwbHVzL3hhdHRyLmM9ODAyPXNzaXplX3QgaGZzcGx1c19saXN0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKVxuLS1cbmZzL2hmc3BsdXMveGF0dHIuYy04OTEtXG5mcy9oZnNwbHVzL3hhdHRyLmM6ODkyOlx0XHRpZiAoaGZzX2JyZWNfZ290byhcdTAwMjZmZCwgMSkpXG5mcy9oZnNwbHVzL3hhdHRyLmMtODkzLVx0XHRcdGdvdG8gZW5kX2xpc3R4YXR0cjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTE6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3NDUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA3NDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgSEZTJiM0MzsgQi1UcmVlIE5vZGUgRnVuY3Rpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBgaGZzX2JyZWNfZ290b2AgbG9va2VkIHByb21pc2luZywgYW5kIGl0JiMzOTtzIHVzZWQgd2l0aGluIGBoZnNwbHVzX3JlYWRkaXJgIGFuZCBgaGZzcGx1c19saXN0eGF0dHJgLCBzbyBpdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgY29uc2lkZXJlZCBleHBhbmRpbmcgdGhlIGZvY3VzIHRvIGluY2x1ZGUgYGhmc19icmVjX3JlbW92ZWAgYW5kIGBfX2hmc19icmVjX2ZpbmRgIGFzIHdlbGwuCgpJIHRoZW4gc3RhcnRlZCB0byBldmFsdWF0ZSBjYW5kaWRhdGVzIGFuZCBxdWlja2x5IHJlYWxpemVkIHRoZSBpbXBvcnRhbmNlIG9mIGNoZWNraW5nIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgKm1vZGlmaWVkKiwgcGFydGljdWxhcmx5IGFyb3VuZCBgYm5vZGUtJmd0O251bV9yZWNzYCBvciBpdHMgdmFsaWRpdHkuIFR1cm5zIG91dCwgc2V2ZXJhbCBmdW5jdGlvbnMgYXJlIG1vZGlmaWVkOiBgX19oZnNfYnJlY19maW5kYCwgYGhmc19icmVjX2dvdG9gLCBgaGZzX2Jub2RlX2R1bXBgLCBgaGZzX2Jub2RlX2ZpbmRgLCBgaGZzX2JyZWNfbGVub2ZmYCwgYGhmc19icmVjX2tleWxlbmAsIGFuZCBgaGZzX2JyZWNfcmVtb3ZlYC4KCk5vdywgY29uc2lkZXJpbmcgcGVyZm9ybWFuY2UsIGBoZnNfYnJlY19sZW5vZmZgLCBgaGZzX2JyZWNfa2V5bGVuYCwgYW5kIGBoZnNfYm5vZGVfZmluZGAgYXJlIG9uIHRoZSBob3QgcGF0aCwgYW5kIGJvdGggYF9faGZzX2JyZWNfZmluZGAgYW5kIGBoZnNfYnJlY19nb3RvYCBhcmUgc3RpbGwgZnJlcXVlbnRseSBjYWxsZWQuIGBoZnNfYnJlY19yZW1vdmVgLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgZGVmaW5pdGVseSBsZXNzIHBlcmZvcm1hbmNlIGNyaXRpY2FsLgoKRm9jdXNpbmcgaW4gb24gZnVuY3Rpb24gY29udGV4dCwgYGhmc19icmVjX2dvdG9gIGlzIHVzZWQgZm9yIGByZWFkZGlyYCBhbmQgYGxpc3R4YXR0cmAgY2FsbHMsIHdoaWxlIGBoZnNfYnJlY19yZW1vdmVgIGlzIHRpZWQgdG8gZmlsZSBkZWxldGlvbiwgcmVuYW1lLCBhbmQgdHJ1bmNhdGUgb3BlcmF0aW9ucy4KCkFmdGVyIGV2YWx1YXRpbmcgdGhlc2UgZmFjdG9ycywgSSYjMzk7bSBsZWFuaW5nIHRvd2FyZCBzZWxlY3RpbmcgYGhmc19icmVjX3JlbW92ZWAsIGBoZnNfYnJlY19nb3RvYCwgYW5kIGBfX2hmc19icmVjX2ZpbmRgIGFzIHRoZSBwcmltYXJ5IGZvY3VzIGZ1bmN0aW9ucy4KCkkgbmVlZCB0byBjb25maXJtIG15IHNlbGVjdGlvbiBieSBjaGVja2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gZW5zdXJlIEkmIzM5O20gbm90IG92ZXJsb29raW5nIGFueSByZWxldmFudCBmbGFncy4gTG9va3MgbGlrZSBgSEZTUExVU19GU2AgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIGhlcmUsIGJ1dCBhIGRvdWJsZS1jaGVjayBvZiBgZnMvaGZzcGx1cy9LY29uZmlnYCBpcyBhbHdheXMgYSBnb29kIGlkZWEuIEkgd2lsbCBpbmNsdWRlIHRoZSBhbmFseXNpcyBvZiBgaGZzX2Jub2RlX2ZpbmRgIGluIG15IG1lbnRhbCBtb2RlbCwgYXMgaXQgaXMgYSBmdW5kYW1lbnRhbCBibm9kZSByZWFkLiBCdXQgbXkgcHJpbWFyeSBnb2FsIGlzIHRoZSBvdGhlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIRlNQTFVTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvaGZzcGx1cy9LY29uZmlnOjI6Y29uZmlnIEhGU1BMVVNfRlNcbmZzL2hmc3BsdXMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7QXBwbGUgRXh0ZW5kZWQgSEZTIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9oZnNwbHVzL0tjb25maWctMTctXG5mcy9oZnNwbHVzL0tjb25maWc6MTg6Y29uZmlnIEhGU1BMVVNfS1VOSVRfVEVTVFxuZnMvaGZzcGx1cy9LY29uZmlnLTE5LVx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIEhGUyYjNDM7IGZpbGVzeXN0ZW1cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjE3MQoJCQkJCQkJb3V0cHV0OiAxNjcKCQkJCQkJCXRob3VnaHRzOiAxNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSEZTJiM0MzsgQi1UcmVlIE5vZGUgVmFsaWRhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGxhc2VyLWZvY3VzZWQuIEFmdGVyIHJldmlld2luZyB0aGUgZGV0YWlscywgaXQmIzM5O3MgY2xlYXIgdGhlIGNvcmUgY29uY2VybiBpcyB0aGUgYG51bV9yZWNzYCB2YWxpZGF0aW9uIHdpdGhpbiBIRlMmIzQzOyBiLXRyZWUgbm9kZXMuIFRoZSBjaGFuZ2VzIGFyZSBhbGwgYWJvdXQgaGFyZGVuaW5nIHRob3NlIGZvdW5kYXRpb25hbCBiLXRyZWUgb3BlcmF0aW9uczogZmluZGluZyByZWNvcmRzLCByZW1vdmluZyB0aGVtLCBhbmQgaXRlcmF0aW5nLiBUaGlzIGhhcyBhIGRpcmVjdCBpbXBhY3Qgb24gcmVhY2hhYmxlIGZpbGVzeXN0ZW0gbG9naWMsIHRoaW5ncyBsaWtlIGRpcmVjdG9yeSB0cmF2ZXJzYWwsIGZpbGUgZGVsZXRpb24sIGFuZCBoYW5kbGluZyBhdHRyaWJ1dGVzLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBwcmlvcml0aXplIG15IGZ1enppbmcgZWZmb3J0cyBhcm91bmQgdGhlc2UgYXJlYXMuCgpCYXNlZCBvbiB0aGUgY29udGV4dCwgdGhlcmUmIzM5O3Mgbm8gbmVlZCB0byBjb25zaWRlciBhbnl0aGluZyBiZXlvbmQgdGhlIGBIRlNQTFVTX0ZTYCBjb25maWcgZm9yIHRlc3RpbmcgcHVycG9zZXMuIEl0IHNlZW1zIHRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIGxvZ2ljIG9mIHRoYXQgZmlsZXN5c3RlbS4KClRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIGFyZSBgaGZzX2JyZWNfcmVtb3ZlYCwgYGhmc19icmVjX2dvdG9gLCBhbmQgYF9faGZzX2JyZWNfZmluZGAuIFRoZXNlIGFyZSB0aGUga2V5IGVudHJ5IHBvaW50cyB3aGVyZSB0aGUgbmV3IGBudW1fcmVjc2AgdmFsaWRhdGlvbiBnZXRzIGV4ZXJjaXNlZC4gQW55IHRlc3QgY2FzZXMgZ2VuZXJhdGVkIHNob3VsZCBiZSBkZXNpZ25lZCB0byBpbnRlbnRpb25hbGx5IGNyZWF0ZSBtYWxmb3JtZWQgYi10cmVlIG5vZGVzLCBwdXNoaW5nIHRoZSB2YWxpZGF0aW9uIHRvIGl0cyBsaW1pdHMgYW5kIGVuc3VyaW5nIGl0IGNvcnJlY3RseSByZWplY3RzIHByb2JsZW1hdGljIHN0cnVjdHVyZXMgd2l0aG91dCBjYXVzaW5nIHBhbmljcyBvciByZWdyZXNzaW9ucy4gSSYjMzk7bSBnb2luZyB0byBzZXQgdXAgZnV6emluZyB0byB0YXJnZXQgdGhlc2Ugc3ltYm9scyBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDExOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIRlNQTFVTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aGZzX2JyZWNfcmVtb3ZlJiMzNDssCiAgICAmIzM0O2hmc19icmVjX2dvdG8mIzM0OywKICAgICYjMzQ7X19oZnNfYnJlY19maW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBmb3IgYG51bV9yZWNzYCBpbiBIRlMmIzQzOyBiLXRyZWUgbm9kZXMgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIGFjY2VzcyBhbmQgb3RoZXIgaXNzdWVzLiBJdCBtb2RpZmllcyBjb3JlIGItdHJlZSBvcGVyYXRpb25zIGxpa2UgZmluZGluZywgcmVtb3ZpbmcsIGFuZCBpdGVyYXRpbmcgb3ZlciByZWNvcmRzLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCBhZmZlY3QgcmVhY2hhYmxlIGZpbGVzeXN0ZW0gbG9naWMsIHBhcnRpY3VsYXJseSBkdXJpbmcgZGlyZWN0b3J5IHRyYXZlcnNhbCwgZmlsZSBkZWxldGlvbiwgYW5kIGF0dHJpYnV0ZSBvcGVyYXRpb25zLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBvcGVyYXRpb25zIHRvIGVuc3VyZSB0aGUgbmV3IHZhbGlkYXRpb24gbG9naWMgY29ycmVjdGx5IGhhbmRsZXMgbWFsZm9ybWVkIGItdHJlZSBub2RlcyB3aXRob3V0IGNhdXNpbmcgcmVncmVzc2lvbnMgb3IgcGFuaWNzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIRlNQTFVTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aGZzX2JyZWNfcmVtb3ZlJiMzNDssCiAgICAmIzM0O2hmc19icmVjX2dvdG8mIzM0OywKICAgICYjMzQ7X19oZnNfYnJlY19maW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBmb3IgYG51bV9yZWNzYCBpbiBIRlMmIzQzOyBiLXRyZWUgbm9kZXMgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIGFjY2VzcyBhbmQgb3RoZXIgaXNzdWVzLiBJdCBtb2RpZmllcyBjb3JlIGItdHJlZSBvcGVyYXRpb25zIGxpa2UgZmluZGluZywgcmVtb3ZpbmcsIGFuZCBpdGVyYXRpbmcgb3ZlciByZWNvcmRzLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCBhZmZlY3QgcmVhY2hhYmxlIGZpbGVzeXN0ZW0gbG9naWMsIHBhcnRpY3VsYXJseSBkdXJpbmcgZGlyZWN0b3J5IHRyYXZlcnNhbCwgZmlsZSBkZWxldGlvbiwgYW5kIGF0dHJpYnV0ZSBvcGVyYXRpb25zLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBvcGVyYXRpb25zIHRvIGVuc3VyZSB0aGUgbmV3IHZhbGlkYXRpb24gbG9naWMgY29ycmVjdGx5IGhhbmRsZXMgbWFsZm9ybWVkIGItdHJlZSBub2RlcyB3aXRob3V0IGNhdXNpbmcgcmVncmVzc2lvbnMgb3IgcGFuaWNzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDFUMTE6MDU6MzIuNTA2Nzk4ODQ4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyMDkzNDg0NTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhGU1BMVVNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoZnNfYnJlY19yZW1vdmVcIixcbiAgICBcImhmc19icmVjX2dvdG9cIixcbiAgICBcIl9faGZzX2JyZWNfZmluZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBmb3IgYG51bV9yZWNzYCBpbiBIRlMrIGItdHJlZSBub2RlcyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzIGFuZCBvdGhlciBpc3N1ZXMuIEl0IG1vZGlmaWVzIGNvcmUgYi10cmVlIG9wZXJhdGlvbnMgbGlrZSBmaW5kaW5nLCByZW1vdmluZywgYW5kIGl0ZXJhdGluZyBvdmVyIHJlY29yZHMuIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIGFmZmVjdCByZWFjaGFibGUgZmlsZXN5c3RlbSBsb2dpYywgcGFydGljdWxhcmx5IGR1cmluZyBkaXJlY3RvcnkgdHJhdmVyc2FsLCBmaWxlIGRlbGV0aW9uLCBhbmQgYXR0cmlidXRlIG9wZXJhdGlvbnMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIG9wZXJhdGlvbnMgdG8gZW5zdXJlIHRoZSBuZXcgdmFsaWRhdGlvbiBsb2dpYyBjb3JyZWN0bHkgaGFuZGxlcyBtYWxmb3JtZWQgYi10cmVlIG5vZGVzIHdpdGhvdXQgY2F1c2luZyByZWdyZXNzaW9ucyBvciBwYW5pY3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDExOjA1OjMyLjUwNjgwNTE2OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDAwNjczNjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYWFlNTdiNjRkMDJiNjNmMDYzNjZlYjM4MmFkNWUwMWNjZjk0YjlhNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCAxIDExOjA1OjMxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvYmZpbmQuYyBiL2ZzL2hmc3BsdXMvYmZpbmQuY1xcbmluZGV4IDlhNTVmYTZkNTI5NDI5Li5hY2U5YmEwMjdhOWRiNCAxMDA2NDRcXG4tLS0gYS9mcy9oZnNwbHVzL2JmaW5kLmNcXG4rKysgYi9mcy9oZnNwbHVzL2JmaW5kLmNcXG5AQCAtMTEyLDExICsxMTIsMTMgQEAgaW50IF9faGZzX2JyZWNfZmluZChzdHJ1Y3QgaGZzX2Jub2RlICpibm9kZSwgc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLFxcbiBcXHRiID0gMDtcXG4gXFx0ZSA9IGJub2RlLVxcdTAwM2VudW1fcmVjcyAtIDE7XFxuIFxcdHJlcyA9IC1FTk9FTlQ7XFxuK1xcdGlmICghYm5vZGUtXFx1MDAzZW51bV9yZWNzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbiBcXHRkbyB7XFxuIFxcdFxcdHJlYyA9IChlICsgYikgLyAyO1xcbiBcXHRcXHRsZW4gPSBoZnNfYnJlY19sZW5vZmYoYm5vZGUsIHJlYywgXFx1MDAyNm9mZik7XFxuIFxcdFxcdGtleWxlbiA9IGhmc19icmVjX2tleWxlbihibm9kZSwgcmVjKTtcXG4tXFx0XFx0aWYgKGtleWxlbiA9PSAwKSB7XFxuK1xcdFxcdGlmICgha2V5bGVuIHx8IGtleWxlbiBcXHUwMDNlPSBsZW4pIHtcXG4gXFx0XFx0XFx0cmVzID0gLUVJTlZBTDtcXG4gXFx0XFx0XFx0Z290byBmYWlsO1xcbiBcXHRcXHR9XFxuQEAgLTEzMCw3ICsxMzIsNyBAQCBpbnQgX19oZnNfYnJlY19maW5kKHN0cnVjdCBoZnNfYm5vZGUgKmJub2RlLCBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsXFxuIFxcdGlmIChyZWMgIT0gZSBcXHUwMDI2XFx1MDAyNiBlIFxcdTAwM2U9IDApIHtcXG4gXFx0XFx0bGVuID0gaGZzX2JyZWNfbGVub2ZmKGJub2RlLCBlLCBcXHUwMDI2b2ZmKTtcXG4gXFx0XFx0a2V5bGVuID0gaGZzX2JyZWNfa2V5bGVuKGJub2RlLCBlKTtcXG4tXFx0XFx0aWYgKGtleWxlbiA9PSAwKSB7XFxuK1xcdFxcdGlmICgha2V5bGVuIHx8IGtleWxlbiBcXHUwMDNlPSBsZW4pIHtcXG4gXFx0XFx0XFx0cmVzID0gLUVJTlZBTDtcXG4gXFx0XFx0XFx0Z290byBmYWlsO1xcbiBcXHRcXHR9XFxuQEAgLTIzMiw2ICsyMzQsMTAgQEAgaW50IGhmc19icmVjX2dvdG8oc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLCBpbnQgY250KVxcbiBcXG4gXFx0Ym5vZGUgPSBmZC1cXHUwMDNlYm5vZGU7XFxuIFxcdHRyZWUgPSBibm9kZS1cXHUwMDNldHJlZTtcXG4rXFx0aWYgKCFibm9kZS1cXHUwMDNlbnVtX3JlY3MpIHtcXG4rXFx0XFx0cmVzID0gLUVOT0VOVDtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4gXFxuIFxcdGlmIChjbnQgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdGNudCA9IC1jbnQ7XFxuQEAgLTI3NCw3ICsyODAsNyBAQCBpbnQgaGZzX2JyZWNfZ290byhzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIGludCBjbnQpXFxuIFxcbiBcXHRsZW4gPSBoZnNfYnJlY19sZW5vZmYoYm5vZGUsIGZkLVxcdTAwM2VyZWNvcmQsIFxcdTAwMjZvZmYpO1xcbiBcXHRrZXlsZW4gPSBoZnNfYnJlY19rZXlsZW4oYm5vZGUsIGZkLVxcdTAwM2VyZWNvcmQpO1xcbi1cXHRpZiAoa2V5bGVuID09IDApIHtcXG4rXFx0aWYgKCFrZXlsZW4gfHwga2V5bGVuIFxcdTAwM2U9IGxlbikge1xcbiBcXHRcXHRyZXMgPSAtRUlOVkFMO1xcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2Jub2RlLmMgYi9mcy9oZnNwbHVzL2Jub2RlLmNcXG5pbmRleCBkMDg4ZmI3ZWIwZGZhMy4uZGY0MDZmNzVhNWIzMjMgMTAwNjQ0XFxuLS0tIGEvZnMvaGZzcGx1cy9ibm9kZS5jXFxuKysrIGIvZnMvaGZzcGx1cy9ibm9kZS5jXFxuQEAgLTM1MiwxNSArMzUyLDIyIEBAIHZvaWQgaGZzX2Jub2RlX2R1bXAoc3RydWN0IGhmc19ibm9kZSAqbm9kZSlcXG4gXFx0c3RydWN0IGhmc19ibm9kZV9kZXNjIGRlc2M7XFxuIFxcdF9fYmUzMiBjbmlkO1xcbiBcXHRpbnQgaSwgb2ZmLCBrZXlfb2ZmO1xcbitcXHR1MTYgbnVtX3JlY3M7XFxuIFxcbiBcXHRoZnNfZGJnKFxcXCJub2RlICVkXFxcXG5cXFwiLCBub2RlLVxcdTAwM2V0aGlzKTtcXG4gXFx0aGZzX2Jub2RlX3JlYWQobm9kZSwgXFx1MDAyNmRlc2MsIDAsIHNpemVvZihkZXNjKSk7XFxuK1xcdG51bV9yZWNzID0gYmUxNl90b19jcHUoZGVzYy5udW1fcmVjcyk7XFxuIFxcdGhmc19kYmcoXFxcIm5leHQgJWQsIHByZXYgJWQsIHR5cGUgJWQsIGhlaWdodCAlZCwgbnVtX3JlY3MgJWRcXFxcblxcXCIsXFxuIFxcdFxcdGJlMzJfdG9fY3B1KGRlc2MubmV4dCksIGJlMzJfdG9fY3B1KGRlc2MucHJldiksXFxuLVxcdFxcdGRlc2MudHlwZSwgZGVzYy5oZWlnaHQsIGJlMTZfdG9fY3B1KGRlc2MubnVtX3JlY3MpKTtcXG4rXFx0XFx0ZGVzYy50eXBlLCBkZXNjLmhlaWdodCwgbnVtX3JlY3MpO1xcbitcXG4rXFx0aWYgKCFoZnNfYm5vZGVfbnVtX3JlY3NfdmFsaWQobm9kZSwgbnVtX3JlY3MpKSB7XFxuK1xcdFxcdGhmc19kYmcoXFxcImludmFsaWQgbnVtX3JlY3MgJXVcXFxcblxcXCIsIG51bV9yZWNzKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuIFxcbiBcXHRvZmYgPSBub2RlLVxcdTAwM2V0cmVlLVxcdTAwM2Vub2RlX3NpemUgLSAyO1xcbi1cXHRmb3IgKGkgPSBiZTE2X3RvX2NwdShkZXNjLm51bV9yZWNzKTsgaSBcXHUwMDNlPSAwOyBvZmYgLT0gMiwgaS0tKSB7XFxuK1xcdGZvciAoaSA9IG51bV9yZWNzOyBpIFxcdTAwM2U9IDA7IG9mZiAtPSAyLCBpLS0pIHtcXG4gXFx0XFx0a2V5X29mZiA9IGhmc19ibm9kZV9yZWFkX3UxNihub2RlLCBvZmYpO1xcbiBcXHRcXHRoZnNfZGJnKFxcXCIga2V5X29mZiAlZFxcXCIsIGtleV9vZmYpO1xcbiBcXHRcXHRpZiAoaSBcXHUwMDI2XFx1MDAyNiBub2RlLVxcdTAwM2V0eXBlID09IEhGU19OT0RFX0lOREVYKSB7XFxuQEAgLTU3OSw2ICs1ODYsOSBAQCBzdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm5vZGVfZmluZChzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlLCB1MzIgbnVtKVxcbiBcXHRcXHRnb3RvIG5vZGVfZXJyb3I7XFxuIFxcdH1cXG4gXFxuK1xcdGlmICghaGZzX2Jub2RlX251bV9yZWNzX3ZhbGlkKG5vZGUsIG5vZGUtXFx1MDAzZW51bV9yZWNzKSlcXG4rXFx0XFx0Z290byBub2RlX2Vycm9yO1xcbitcXG4gXFx0cmVjX29mZiA9IHRyZWUtXFx1MDAzZW5vZGVfc2l6ZSAtIDI7XFxuIFxcdG9mZiA9IGhmc19ibm9kZV9yZWFkX3UxNihub2RlLCByZWNfb2ZmKTtcXG4gXFx0aWYgKG9mZiAhPSBzaXplb2Yoc3RydWN0IGhmc19ibm9kZV9kZXNjKSlcXG5AQCAtNTg4LDYgKzU5OCw3IEBAIHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibm9kZV9maW5kKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUsIHUzMiBudW0pXFxuIFxcdFxcdG5leHRfb2ZmID0gaGZzX2Jub2RlX3JlYWRfdTE2KG5vZGUsIHJlY19vZmYpO1xcbiBcXHRcXHRpZiAobmV4dF9vZmYgXFx1MDAzYz0gb2ZmIHx8XFxuIFxcdFxcdCAgICBuZXh0X29mZiBcXHUwMDNlIHRyZWUtXFx1MDAzZW5vZGVfc2l6ZSB8fFxcbitcXHRcXHQgICAgbmV4dF9vZmYgXFx1MDAzZSByZWNfb2ZmIHx8XFxuIFxcdFxcdCAgICBuZXh0X29mZiBcXHUwMDI2IDEpXFxuIFxcdFxcdFxcdGdvdG8gbm9kZV9lcnJvcjtcXG4gXFx0XFx0ZW50cnlfc2l6ZSA9IG5leHRfb2ZmIC0gb2ZmO1xcbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2JyZWMuYyBiL2ZzL2hmc3BsdXMvYnJlYy5jXFxuaW5kZXggZTNkZjg5Mjg0MDc5ZGIuLmRjZTM5N2JlOTE1MWZlIDEwMDY0NFxcbi0tLSBhL2ZzL2hmc3BsdXMvYnJlYy5jXFxuKysrIGIvZnMvaGZzcGx1cy9icmVjLmNcXG5AQCAtMjAsMTIgKzIwLDI3IEBAIHN0YXRpYyBpbnQgaGZzX2J0cmVlX2luY19oZWlnaHQoc3RydWN0IGhmc19idHJlZSAqKTtcXG4gdTE2IGhmc19icmVjX2xlbm9mZihzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MTYgcmVjLCB1MTYgKm9mZilcXG4ge1xcbiBcXHRfX2JlMTYgcmV0dmFsWzJdO1xcbi1cXHR1MTYgZGF0YW9mZjtcXG4rXFx0dTE2IGRhdGFfb2ZmO1xcbitcXHR1MTYgbmV4dF9vZmY7XFxuIFxcbi1cXHRkYXRhb2ZmID0gbm9kZS1cXHUwMDNldHJlZS1cXHUwMDNlbm9kZV9zaXplIC0gKHJlYyArIDIpICogMjtcXG4tXFx0aGZzX2Jub2RlX3JlYWQobm9kZSwgcmV0dmFsLCBkYXRhb2ZmLCA0KTtcXG4rXFx0aWYgKHJlYyBcXHUwMDNlPSBub2RlLVxcdTAwM2VudW1fcmVjcyB8fFxcbitcXHRcXHQhaGZzX2Jub2RlX251bV9yZWNzX3ZhbGlkKG5vZGUsIG5vZGUtXFx1MDAzZW51bV9yZWNzKSkge1xcbitcXHRcXHQqb2ZmID0gMDtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdGRhdGFfb2ZmID0gbm9kZS1cXHUwMDNldHJlZS1cXHUwMDNlbm9kZV9zaXplIC0gKHJlYyArIDIpICogMjtcXG4rXFx0aGZzX2Jub2RlX3JlYWQobm9kZSwgcmV0dmFsLCBkYXRhX29mZiwgNCk7XFxuIFxcdCpvZmYgPSBiZTE2X3RvX2NwdShyZXR2YWxbMV0pO1xcbi1cXHRyZXR1cm4gYmUxNl90b19jcHUocmV0dmFsWzBdKSAtICpvZmY7XFxuK1xcdG5leHRfb2ZmID0gYmUxNl90b19jcHUocmV0dmFsWzBdKTtcXG4rXFx0aWYgKCpvZmYgXFx1MDAzYyBzaXplb2Yoc3RydWN0IGhmc19ibm9kZV9kZXNjKSB8fFxcbitcXHRcXHQqb2ZmIFxcdTAwMjYgMSB8fFxcbitcXHRcXHRuZXh0X29mZiBcXHUwMDNjPSAqb2ZmIHx8XFxuK1xcdFxcdG5leHRfb2ZmIFxcdTAwM2Ugbm9kZS1cXHUwMDNldHJlZS1cXHUwMDNlbm9kZV9zaXplIHx8XFxuK1xcdFxcdG5leHRfb2ZmIFxcdTAwM2UgZGF0YV9vZmYgfHxcXG4rXFx0XFx0bmV4dF9vZmYgXFx1MDAyNiAxKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIG5leHRfb2ZmIC0gKm9mZjtcXG4gfVxcbiBcXG4gLyogR2V0IHRoZSBsZW5ndGggb2YgdGhlIGtleSBmcm9tIGEga2V5ZWQgcmVjb3JkICovXFxuQEAgLTM1LDYgKzUwLDkgQEAgdTE2IGhmc19icmVjX2tleWxlbihzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MTYgcmVjKVxcbiBcXG4gXFx0aWYgKG5vZGUtXFx1MDAzZXR5cGUgIT0gSEZTX05PREVfSU5ERVggXFx1MDAyNlxcdTAwMjYgbm9kZS1cXHUwMDNldHlwZSAhPSBIRlNfTk9ERV9MRUFGKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4rXFx0aWYgKHJlYyBcXHUwMDNlPSBub2RlLVxcdTAwM2VudW1fcmVjcyB8fFxcbitcXHRcXHQhaGZzX2Jub2RlX251bV9yZWNzX3ZhbGlkKG5vZGUsIG5vZGUtXFx1MDAzZW51bV9yZWNzKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRpZiAoKG5vZGUtXFx1MDAzZXR5cGUgPT0gSEZTX05PREVfSU5ERVgpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICEobm9kZS1cXHUwMDNldHJlZS1cXHUwMDNlYXR0cmlidXRlcyBcXHUwMDI2IEhGU19UUkVFX1ZBUklEWEtFWVMpIFxcdTAwMjZcXHUwMDI2XFxuQEAgLTQzLDcgKzYxLDcgQEAgdTE2IGhmc19icmVjX2tleWxlbihzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MTYgcmVjKVxcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRyZWNvZmYgPSBoZnNfYm5vZGVfcmVhZF91MTYobm9kZSxcXG4gXFx0XFx0XFx0bm9kZS1cXHUwMDNldHJlZS1cXHUwMDNlbm9kZV9zaXplIC0gKHJlYyArIDEpICogMik7XFxuLVxcdFxcdGlmICghcmVjb2ZmKVxcbitcXHRcXHRpZiAocmVjb2ZmIFxcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBoZnNfYm5vZGVfZGVzYykgfHwgcmVjb2ZmIFxcdTAwMjYgMSlcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdFxcdGlmIChyZWNvZmYgXFx1MDAzZSBub2RlLVxcdTAwM2V0cmVlLVxcdTAwM2Vub2RlX3NpemUgLSAyKSB7XFxuIFxcdFxcdFxcdHByX2VycihcXFwicmVjb2ZmICVkIHRvbyBsYXJnZVxcXFxuXFxcIiwgcmVjb2ZmKTtcXG5AQCAtMTg1LDEwICsyMDMsMTcgQEAgaW50IGhmc19icmVjX3JlbW92ZShzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXFxuIFxcdHRyZWUgPSBmZC1cXHUwMDNldHJlZTtcXG4gXFx0bm9kZSA9IGZkLVxcdTAwM2Vibm9kZTtcXG4gYWdhaW46XFxuK1xcdGlmIChmZC1cXHUwMDNlcmVjb3JkIFxcdTAwM2MgMCB8fFxcbitcXHRcXHRmZC1cXHUwMDNlcmVjb3JkIFxcdTAwM2U9IG5vZGUtXFx1MDAzZW51bV9yZWNzIHx8XFxuK1xcdFxcdCFoZnNfYm5vZGVfbnVtX3JlY3NfdmFsaWQobm9kZSwgbm9kZS1cXHUwMDNlbnVtX3JlY3MpKVxcbitcXHRcXHRyZXR1cm4gLUVJTztcXG4rXFxuIFxcdHJlY19vZmYgPSB0cmVlLVxcdTAwM2Vub2RlX3NpemUgLSAoZmQtXFx1MDAzZXJlY29yZCArIDIpICogMjtcXG4gXFx0ZW5kX29mZiA9IHRyZWUtXFx1MDAzZW5vZGVfc2l6ZSAtIChub2RlLVxcdTAwM2VudW1fcmVjcyArIDEpICogMjtcXG4gXFxuIFxcdGlmIChub2RlLVxcdTAwM2V0eXBlID09IEhGU19OT0RFX0xFQUYpIHtcXG4rXFx0XFx0aWYgKCF0cmVlLVxcdTAwM2VsZWFmX2NvdW50KVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4gXFx0XFx0dHJlZS1cXHUwMDNlbGVhZl9jb3VudC0tO1xcbiBcXHRcXHRtYXJrX2lub2RlX2RpcnR5KHRyZWUtXFx1MDAzZWlub2RlKTtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaCBiL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oXFxuaW5kZXggZWMwNGI4MmFkOTI3ODcuLjhiMmYyMDQxYjhiOThiIDEwMDY0NFxcbi0tLSBhL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oXFxuKysrIGIvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmhcXG5AQCAtNTg3LDYgKzU4NywyNCBAQCBib29sIGlzX2Jub2RlX29mZnNldF92YWxpZChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlLCB1MzIgb2ZmKVxcbiBcXHRyZXR1cm4gaXNfdmFsaWQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmVcXG4rYm9vbCBoZnNfYm5vZGVfbnVtX3JlY3NfdmFsaWQoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTE2IG51bV9yZWNzKVxcbit7XFxuK1xcdHUzMiBub2RlX3NpemU7XFxuK1xcdHUzMiBvZmZzX3NpemU7XFxuK1xcbitcXHRpZiAoIW5vZGUgfHwgIW5vZGUtXFx1MDAzZXRyZWUpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdG5vZGVfc2l6ZSA9IG5vZGUtXFx1MDAzZXRyZWUtXFx1MDAzZW5vZGVfc2l6ZTtcXG4rXFx0aWYgKG5vZGVfc2l6ZSBcXHUwMDNjIHNpemVvZihzdHJ1Y3QgaGZzX2Jub2RlX2Rlc2MpICsgc2l6ZW9mKF9fYmUxNikpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdG9mZnNfc2l6ZSA9ICgodTMyKW51bV9yZWNzICsgMSkgKiBzaXplb2YoX19iZTE2KTtcXG4rXFxuK1xcdHJldHVybiBvZmZzX3NpemUgXFx1MDAzYz0gbm9kZV9zaXplIC0gc2l6ZW9mKHN0cnVjdCBoZnNfYm5vZGVfZGVzYyk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmVcXG4gdTMyIGNoZWNrX2FuZF9jb3JyZWN0X3JlcXVlc3RlZF9sZW5ndGgoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTMyIG9mZiwgdTMyIGxlbilcXG4ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMTowNTozMi45MDg1OTE5ODlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMTY5MTY3ODkzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIRlNQTFVTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaGZzX2JyZWNfcmVtb3ZlXCIsXG4gICAgXCJoZnNfYnJlY19nb3RvXCIsXG4gICAgXCJfX2hmc19icmVjX2ZpbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gZm9yIGBudW1fcmVjc2AgaW4gSEZTKyBiLXRyZWUgbm9kZXMgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIGFjY2VzcyBhbmQgb3RoZXIgaXNzdWVzLiBJdCBtb2RpZmllcyBjb3JlIGItdHJlZSBvcGVyYXRpb25zIGxpa2UgZmluZGluZywgcmVtb3ZpbmcsIGFuZCBpdGVyYXRpbmcgb3ZlciByZWNvcmRzLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCBhZmZlY3QgcmVhY2hhYmxlIGZpbGVzeXN0ZW0gbG9naWMsIHBhcnRpY3VsYXJseSBkdXJpbmcgZGlyZWN0b3J5IHRyYXZlcnNhbCwgZmlsZSBkZWxldGlvbiwgYW5kIGF0dHJpYnV0ZSBvcGVyYXRpb25zLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBvcGVyYXRpb25zIHRvIGVuc3VyZSB0aGUgbmV3IHZhbGlkYXRpb24gbG9naWMgY29ycmVjdGx5IGhhbmRsZXMgbWFsZm9ybWVkIGItdHJlZSBub2RlcyB3aXRob3V0IGNhdXNpbmcgcmVncmVzc2lvbnMgb3IgcGFuaWNzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGFhZTU3YjY0ZDAyYjYzZjA2MzY2ZWIzODJhZDVlMDFjY2Y5NGI5YTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxIDExOjA1OjMxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9iZmluZC5jIGIvZnMvaGZzcGx1cy9iZmluZC5jXG5pbmRleCA5YTU1ZmE2ZDUyOTQyOS4uYWNlOWJhMDI3YTlkYjQgMTAwNjQ0XG4tLS0gYS9mcy9oZnNwbHVzL2JmaW5kLmNcbisrKyBiL2ZzL2hmc3BsdXMvYmZpbmQuY1xuQEAgLTExMiwxMSArMTEyLDEzIEBAIGludCBfX2hmc19icmVjX2ZpbmQoc3RydWN0IGhmc19ibm9kZSAqYm5vZGUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCxcbiBcdGIgPSAwO1xuIFx0ZSA9IGJub2RlLVx1MDAzZW51bV9yZWNzIC0gMTtcbiBcdHJlcyA9IC1FTk9FTlQ7XG4rXHRpZiAoIWJub2RlLVx1MDAzZW51bV9yZWNzKVxuK1x0XHRyZXR1cm4gcmVzO1xuIFx0ZG8ge1xuIFx0XHRyZWMgPSAoZSArIGIpIC8gMjtcbiBcdFx0bGVuID0gaGZzX2JyZWNfbGVub2ZmKGJub2RlLCByZWMsIFx1MDAyNm9mZik7XG4gXHRcdGtleWxlbiA9IGhmc19icmVjX2tleWxlbihibm9kZSwgcmVjKTtcbi1cdFx0aWYgKGtleWxlbiA9PSAwKSB7XG4rXHRcdGlmICgha2V5bGVuIHx8IGtleWxlbiBcdTAwM2U9IGxlbikge1xuIFx0XHRcdHJlcyA9IC1FSU5WQUw7XG4gXHRcdFx0Z290byBmYWlsO1xuIFx0XHR9XG5AQCAtMTMwLDcgKzEzMiw3IEBAIGludCBfX2hmc19icmVjX2ZpbmQoc3RydWN0IGhmc19ibm9kZSAqYm5vZGUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCxcbiBcdGlmIChyZWMgIT0gZSBcdTAwMjZcdTAwMjYgZSBcdTAwM2U9IDApIHtcbiBcdFx0bGVuID0gaGZzX2JyZWNfbGVub2ZmKGJub2RlLCBlLCBcdTAwMjZvZmYpO1xuIFx0XHRrZXlsZW4gPSBoZnNfYnJlY19rZXlsZW4oYm5vZGUsIGUpO1xuLVx0XHRpZiAoa2V5bGVuID09IDApIHtcbitcdFx0aWYgKCFrZXlsZW4gfHwga2V5bGVuIFx1MDAzZT0gbGVuKSB7XG4gXHRcdFx0cmVzID0gLUVJTlZBTDtcbiBcdFx0XHRnb3RvIGZhaWw7XG4gXHRcdH1cbkBAIC0yMzIsNiArMjM0LDEwIEBAIGludCBoZnNfYnJlY19nb3RvKHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgaW50IGNudClcbiBcbiBcdGJub2RlID0gZmQtXHUwMDNlYm5vZGU7XG4gXHR0cmVlID0gYm5vZGUtXHUwMDNldHJlZTtcbitcdGlmICghYm5vZGUtXHUwMDNlbnVtX3JlY3MpIHtcbitcdFx0cmVzID0gLUVOT0VOVDtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4gXG4gXHRpZiAoY250IFx1MDAzYyAwKSB7XG4gXHRcdGNudCA9IC1jbnQ7XG5AQCAtMjc0LDcgKzI4MCw3IEBAIGludCBoZnNfYnJlY19nb3RvKHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgaW50IGNudClcbiBcbiBcdGxlbiA9IGhmc19icmVjX2xlbm9mZihibm9kZSwgZmQtXHUwMDNlcmVjb3JkLCBcdTAwMjZvZmYpO1xuIFx0a2V5bGVuID0gaGZzX2JyZWNfa2V5bGVuKGJub2RlLCBmZC1cdTAwM2VyZWNvcmQpO1xuLVx0aWYgKGtleWxlbiA9PSAwKSB7XG4rXHRpZiAoIWtleWxlbiB8fCBrZXlsZW4gXHUwMDNlPSBsZW4pIHtcbiBcdFx0cmVzID0gLUVJTlZBTDtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9ibm9kZS5jIGIvZnMvaGZzcGx1cy9ibm9kZS5jXG5pbmRleCBkMDg4ZmI3ZWIwZGZhMy4uZGY0MDZmNzVhNWIzMjMgMTAwNjQ0XG4tLS0gYS9mcy9oZnNwbHVzL2Jub2RlLmNcbisrKyBiL2ZzL2hmc3BsdXMvYm5vZGUuY1xuQEAgLTM1MiwxNSArMzUyLDIyIEBAIHZvaWQgaGZzX2Jub2RlX2R1bXAoc3RydWN0IGhmc19ibm9kZSAqbm9kZSlcbiBcdHN0cnVjdCBoZnNfYm5vZGVfZGVzYyBkZXNjO1xuIFx0X19iZTMyIGNuaWQ7XG4gXHRpbnQgaSwgb2ZmLCBrZXlfb2ZmO1xuK1x0dTE2IG51bV9yZWNzO1xuIFxuIFx0aGZzX2RiZyhcIm5vZGUgJWRcXG5cIiwgbm9kZS1cdTAwM2V0aGlzKTtcbiBcdGhmc19ibm9kZV9yZWFkKG5vZGUsIFx1MDAyNmRlc2MsIDAsIHNpemVvZihkZXNjKSk7XG4rXHRudW1fcmVjcyA9IGJlMTZfdG9fY3B1KGRlc2MubnVtX3JlY3MpO1xuIFx0aGZzX2RiZyhcIm5leHQgJWQsIHByZXYgJWQsIHR5cGUgJWQsIGhlaWdodCAlZCwgbnVtX3JlY3MgJWRcXG5cIixcbiBcdFx0YmUzMl90b19jcHUoZGVzYy5uZXh0KSwgYmUzMl90b19jcHUoZGVzYy5wcmV2KSxcbi1cdFx0ZGVzYy50eXBlLCBkZXNjLmhlaWdodCwgYmUxNl90b19jcHUoZGVzYy5udW1fcmVjcykpO1xuK1x0XHRkZXNjLnR5cGUsIGRlc2MuaGVpZ2h0LCBudW1fcmVjcyk7XG4rXG4rXHRpZiAoIWhmc19ibm9kZV9udW1fcmVjc192YWxpZChub2RlLCBudW1fcmVjcykpIHtcbitcdFx0aGZzX2RiZyhcImludmFsaWQgbnVtX3JlY3MgJXVcXG5cIiwgbnVtX3JlY3MpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4gXG4gXHRvZmYgPSBub2RlLVx1MDAzZXRyZWUtXHUwMDNlbm9kZV9zaXplIC0gMjtcbi1cdGZvciAoaSA9IGJlMTZfdG9fY3B1KGRlc2MubnVtX3JlY3MpOyBpIFx1MDAzZT0gMDsgb2ZmIC09IDIsIGktLSkge1xuK1x0Zm9yIChpID0gbnVtX3JlY3M7IGkgXHUwMDNlPSAwOyBvZmYgLT0gMiwgaS0tKSB7XG4gXHRcdGtleV9vZmYgPSBoZnNfYm5vZGVfcmVhZF91MTYobm9kZSwgb2ZmKTtcbiBcdFx0aGZzX2RiZyhcIiBrZXlfb2ZmICVkXCIsIGtleV9vZmYpO1xuIFx0XHRpZiAoaSBcdTAwMjZcdTAwMjYgbm9kZS1cdTAwM2V0eXBlID09IEhGU19OT0RFX0lOREVYKSB7XG5AQCAtNTc5LDYgKzU4Niw5IEBAIHN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibm9kZV9maW5kKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUsIHUzMiBudW0pXG4gXHRcdGdvdG8gbm9kZV9lcnJvcjtcbiBcdH1cbiBcbitcdGlmICghaGZzX2Jub2RlX251bV9yZWNzX3ZhbGlkKG5vZGUsIG5vZGUtXHUwMDNlbnVtX3JlY3MpKVxuK1x0XHRnb3RvIG5vZGVfZXJyb3I7XG4rXG4gXHRyZWNfb2ZmID0gdHJlZS1cdTAwM2Vub2RlX3NpemUgLSAyO1xuIFx0b2ZmID0gaGZzX2Jub2RlX3JlYWRfdTE2KG5vZGUsIHJlY19vZmYpO1xuIFx0aWYgKG9mZiAhPSBzaXplb2Yoc3RydWN0IGhmc19ibm9kZV9kZXNjKSlcbkBAIC01ODgsNiArNTk4LDcgQEAgc3RydWN0IGhmc19ibm9kZSAqaGZzX2Jub2RlX2ZpbmQoc3RydWN0IGhmc19idHJlZSAqdHJlZSwgdTMyIG51bSlcbiBcdFx0bmV4dF9vZmYgPSBoZnNfYm5vZGVfcmVhZF91MTYobm9kZSwgcmVjX29mZik7XG4gXHRcdGlmIChuZXh0X29mZiBcdTAwM2M9IG9mZiB8fFxuIFx0XHQgICAgbmV4dF9vZmYgXHUwMDNlIHRyZWUtXHUwMDNlbm9kZV9zaXplIHx8XG4rXHRcdCAgICBuZXh0X29mZiBcdTAwM2UgcmVjX29mZiB8fFxuIFx0XHQgICAgbmV4dF9vZmYgXHUwMDI2IDEpXG4gXHRcdFx0Z290byBub2RlX2Vycm9yO1xuIFx0XHRlbnRyeV9zaXplID0gbmV4dF9vZmYgLSBvZmY7XG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9icmVjLmMgYi9mcy9oZnNwbHVzL2JyZWMuY1xuaW5kZXggZTNkZjg5Mjg0MDc5ZGIuLmRjZTM5N2JlOTE1MWZlIDEwMDY0NFxuLS0tIGEvZnMvaGZzcGx1cy9icmVjLmNcbisrKyBiL2ZzL2hmc3BsdXMvYnJlYy5jXG5AQCAtMjAsMTIgKzIwLDI3IEBAIHN0YXRpYyBpbnQgaGZzX2J0cmVlX2luY19oZWlnaHQoc3RydWN0IGhmc19idHJlZSAqKTtcbiB1MTYgaGZzX2JyZWNfbGVub2ZmKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUxNiByZWMsIHUxNiAqb2ZmKVxuIHtcbiBcdF9fYmUxNiByZXR2YWxbMl07XG4tXHR1MTYgZGF0YW9mZjtcbitcdHUxNiBkYXRhX29mZjtcbitcdHUxNiBuZXh0X29mZjtcbiBcbi1cdGRhdGFvZmYgPSBub2RlLVx1MDAzZXRyZWUtXHUwMDNlbm9kZV9zaXplIC0gKHJlYyArIDIpICogMjtcbi1cdGhmc19ibm9kZV9yZWFkKG5vZGUsIHJldHZhbCwgZGF0YW9mZiwgNCk7XG4rXHRpZiAocmVjIFx1MDAzZT0gbm9kZS1cdTAwM2VudW1fcmVjcyB8fFxuK1x0XHQhaGZzX2Jub2RlX251bV9yZWNzX3ZhbGlkKG5vZGUsIG5vZGUtXHUwMDNlbnVtX3JlY3MpKSB7XG4rXHRcdCpvZmYgPSAwO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdGRhdGFfb2ZmID0gbm9kZS1cdTAwM2V0cmVlLVx1MDAzZW5vZGVfc2l6ZSAtIChyZWMgKyAyKSAqIDI7XG4rXHRoZnNfYm5vZGVfcmVhZChub2RlLCByZXR2YWwsIGRhdGFfb2ZmLCA0KTtcbiBcdCpvZmYgPSBiZTE2X3RvX2NwdShyZXR2YWxbMV0pO1xuLVx0cmV0dXJuIGJlMTZfdG9fY3B1KHJldHZhbFswXSkgLSAqb2ZmO1xuK1x0bmV4dF9vZmYgPSBiZTE2X3RvX2NwdShyZXR2YWxbMF0pO1xuK1x0aWYgKCpvZmYgXHUwMDNjIHNpemVvZihzdHJ1Y3QgaGZzX2Jub2RlX2Rlc2MpIHx8XG4rXHRcdCpvZmYgXHUwMDI2IDEgfHxcbitcdFx0bmV4dF9vZmYgXHUwMDNjPSAqb2ZmIHx8XG4rXHRcdG5leHRfb2ZmIFx1MDAzZSBub2RlLVx1MDAzZXRyZWUtXHUwMDNlbm9kZV9zaXplIHx8XG4rXHRcdG5leHRfb2ZmIFx1MDAzZSBkYXRhX29mZiB8fFxuK1x0XHRuZXh0X29mZiBcdTAwMjYgMSlcbitcdFx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gbmV4dF9vZmYgLSAqb2ZmO1xuIH1cbiBcbiAvKiBHZXQgdGhlIGxlbmd0aCBvZiB0aGUga2V5IGZyb20gYSBrZXllZCByZWNvcmQgKi9cbkBAIC0zNSw2ICs1MCw5IEBAIHUxNiBoZnNfYnJlY19rZXlsZW4oc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTE2IHJlYylcbiBcbiBcdGlmIChub2RlLVx1MDAzZXR5cGUgIT0gSEZTX05PREVfSU5ERVggXHUwMDI2XHUwMDI2IG5vZGUtXHUwMDNldHlwZSAhPSBIRlNfTk9ERV9MRUFGKVxuIFx0XHRyZXR1cm4gMDtcbitcdGlmIChyZWMgXHUwMDNlPSBub2RlLVx1MDAzZW51bV9yZWNzIHx8XG4rXHRcdCFoZnNfYm5vZGVfbnVtX3JlY3NfdmFsaWQobm9kZSwgbm9kZS1cdTAwM2VudW1fcmVjcykpXG4rXHRcdHJldHVybiAwO1xuIFxuIFx0aWYgKChub2RlLVx1MDAzZXR5cGUgPT0gSEZTX05PREVfSU5ERVgpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIShub2RlLVx1MDAzZXRyZWUtXHUwMDNlYXR0cmlidXRlcyBcdTAwMjYgSEZTX1RSRUVfVkFSSURYS0VZUykgXHUwMDI2XHUwMDI2XG5AQCAtNDMsNyArNjEsNyBAQCB1MTYgaGZzX2JyZWNfa2V5bGVuKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUxNiByZWMpXG4gXHR9IGVsc2Uge1xuIFx0XHRyZWNvZmYgPSBoZnNfYm5vZGVfcmVhZF91MTYobm9kZSxcbiBcdFx0XHRub2RlLVx1MDAzZXRyZWUtXHUwMDNlbm9kZV9zaXplIC0gKHJlYyArIDEpICogMik7XG4tXHRcdGlmICghcmVjb2ZmKVxuK1x0XHRpZiAocmVjb2ZmIFx1MDAzYyBzaXplb2Yoc3RydWN0IGhmc19ibm9kZV9kZXNjKSB8fCByZWNvZmYgXHUwMDI2IDEpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXHRcdGlmIChyZWNvZmYgXHUwMDNlIG5vZGUtXHUwMDNldHJlZS1cdTAwM2Vub2RlX3NpemUgLSAyKSB7XG4gXHRcdFx0cHJfZXJyKFwicmVjb2ZmICVkIHRvbyBsYXJnZVxcblwiLCByZWNvZmYpO1xuQEAgLTE4NSwxMCArMjAzLDE3IEBAIGludCBoZnNfYnJlY19yZW1vdmUoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxuIFx0dHJlZSA9IGZkLVx1MDAzZXRyZWU7XG4gXHRub2RlID0gZmQtXHUwMDNlYm5vZGU7XG4gYWdhaW46XG4rXHRpZiAoZmQtXHUwMDNlcmVjb3JkIFx1MDAzYyAwIHx8XG4rXHRcdGZkLVx1MDAzZXJlY29yZCBcdTAwM2U9IG5vZGUtXHUwMDNlbnVtX3JlY3MgfHxcbitcdFx0IWhmc19ibm9kZV9udW1fcmVjc192YWxpZChub2RlLCBub2RlLVx1MDAzZW51bV9yZWNzKSlcbitcdFx0cmV0dXJuIC1FSU87XG4rXG4gXHRyZWNfb2ZmID0gdHJlZS1cdTAwM2Vub2RlX3NpemUgLSAoZmQtXHUwMDNlcmVjb3JkICsgMikgKiAyO1xuIFx0ZW5kX29mZiA9IHRyZWUtXHUwMDNlbm9kZV9zaXplIC0gKG5vZGUtXHUwMDNlbnVtX3JlY3MgKyAxKSAqIDI7XG4gXG4gXHRpZiAobm9kZS1cdTAwM2V0eXBlID09IEhGU19OT0RFX0xFQUYpIHtcbitcdFx0aWYgKCF0cmVlLVx1MDAzZWxlYWZfY291bnQpXG4rXHRcdFx0cmV0dXJuIC1FSU87XG4gXHRcdHRyZWUtXHUwMDNlbGVhZl9jb3VudC0tO1xuIFx0XHRtYXJrX2lub2RlX2RpcnR5KHRyZWUtXHUwMDNlaW5vZGUpO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oIGIvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmhcbmluZGV4IGVjMDRiODJhZDkyNzg3Li44YjJmMjA0MWI4Yjk4YiAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oXG4rKysgYi9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaFxuQEAgLTU4Nyw2ICs1ODcsMjQgQEAgYm9vbCBpc19ibm9kZV9vZmZzZXRfdmFsaWQoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTMyIG9mZilcbiBcdHJldHVybiBpc192YWxpZDtcbiB9XG4gXG4rc3RhdGljIGlubGluZVxuK2Jvb2wgaGZzX2Jub2RlX251bV9yZWNzX3ZhbGlkKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUxNiBudW1fcmVjcylcbit7XG4rXHR1MzIgbm9kZV9zaXplO1xuK1x0dTMyIG9mZnNfc2l6ZTtcbitcbitcdGlmICghbm9kZSB8fCAhbm9kZS1cdTAwM2V0cmVlKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRub2RlX3NpemUgPSBub2RlLVx1MDAzZXRyZWUtXHUwMDNlbm9kZV9zaXplO1xuK1x0aWYgKG5vZGVfc2l6ZSBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBoZnNfYm5vZGVfZGVzYykgKyBzaXplb2YoX19iZTE2KSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0b2Zmc19zaXplID0gKCh1MzIpbnVtX3JlY3MgKyAxKSAqIHNpemVvZihfX2JlMTYpO1xuK1xuK1x0cmV0dXJuIG9mZnNfc2l6ZSBcdTAwM2M9IG5vZGVfc2l6ZSAtIHNpemVvZihzdHJ1Y3QgaGZzX2Jub2RlX2Rlc2MpO1xuK31cbitcbiBzdGF0aWMgaW5saW5lXG4gdTMyIGNoZWNrX2FuZF9jb3JyZWN0X3JlcXVlc3RlZF9sZW5ndGgoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTMyIG9mZiwgdTMyIGxlbilcbiB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMTowNTozMi45MDg2MDMwNDlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjI2NDg1MDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlZhbGlkYXRpbmcgSEZTKyBCLVRyZWUgTm9kZSBSZWNvcmQgQ291bnRzKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGNvcmUgb2YgaXQgaXMgYWRkaW5nIHZhbGlkYXRpb24gZm9yIGBudW1fcmVjc2Agd2l0aGluIEhGUysgYi10cmVlIG5vZGVzLiBXZSdyZSB0YWxraW5nIGFib3V0IG1vZGlmaWNhdGlvbnMgYWNyb3NzIGEgZmV3IGtleSBmaWxlczogYGJmaW5kLmNgLCBgYm5vZGUuY2AsIGBicmVjLmNgLCBhbmQgdGhlIGhlYWRlciwgYGhmc3BsdXNfZnMuaGAuIEl0IGxvb2tzIGxpa2UgdGhleSd2ZSBkZWZpbmVkIGEgbmV3IGlubGluZSBmdW5jdGlvbiwgYGhmc19ibm9kZV9udW1fcmVjc192YWxpZGAsIHJpZ2h0IHRoZXJlIGluIGBoZnNwbHVzX2ZzLmhgLiBTbWFydCBtb3ZlLCBrZWVwcyBpdCB0aWR5LlxuXG5Gcm9tIHRoZSBsb29rcyBvZiBpdCwgdGhpcyBuZXcgdmFsaWRhdGlvbiBpcyBiZWluZyBpbnRlZ3JhdGVkIGludG8gYSBidW5jaCBvZiBleGlzdGluZyBmdW5jdGlvbnMgbGlrZSBgaGZzX2Jub2RlX2R1bXBgLCBgaGZzX2Jub2RlX2ZpbmRgLCBgaGZzX2JyZWNfbGVub2ZmYCwgYGhmc19icmVjX2tleWxlbmAsIGFuZCBgaGZzX2JyZWNfcmVtb3ZlYC4gVGhhdCBtYWtlcyBzZW5zZTsgY2F0Y2hpbmcgZXJyb3JzIGVhcmx5IGlzIGFsd2F5cyB0aGUgYmVzdCBhcHByb2FjaC4gVGhleSd2ZSBhbHNvIGFkZGVkIGV4cGxpY2l0IGNoZWNrcyBmb3IgYGJub2RlLVx1MDAzZW51bV9yZWNzYCBiZWluZyB6ZXJvIGluIGBfX2hmc19icmVjX2ZpbmRgIGFuZCBgaGZzX2JyZWNfZ290b2AuIEdvb2QsIGRlZmVuc2l2ZSBwcm9ncmFtbWluZy4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIGFsc28gYWRkaW5nIHNvbWUgY2hlY2tzIGZvciB0aGUgYGtleWxlbmAgYW5kIGBuZXh0X29mZmAgdmFsdWVzIGFzIHdlbGwgLSBnb29kLCB0aG9yb3VnaC5cblxuT3ZlcmFsbCwgdGhlIGNvZGUgbG9va3Mgc29saWQgYW5kIGZ1bmN0aW9uYWwuIE15IGZvY3VzIGlzIGFsd2F5cyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBpbXBsaWNhdGlvbnMgd2l0aGluIHRoZSBIRlMrIGZpbGVzeXN0ZW0gY29udGV4dC4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgYEhGU1BMVVNfRlNgIGNvbmZpZyBvcHRpb24gYW5kLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgZXhhY3QgY29uZmlnIG5hbWUgaW4gYGZzL2hmc3BsdXMvS2NvbmZpZ2Agb3IgYGZzL0tjb25maWdgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjAxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjczLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTE6MDU6MzkuMTM1MDkwNjMzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MzM5MzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkhGU1BMVVNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaGZzcGx1cy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2hmc3BsdXMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2hmc3BsdXMvS2NvbmZpZzoyOmNvbmZpZyBIRlNQTFVTX0ZTXFxuZnMvaGZzcGx1cy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkFwcGxlIEV4dGVuZGVkIEhGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvaGZzcGx1cy9LY29uZmlnLTE3LVxcbmZzL2hmc3BsdXMvS2NvbmZpZzoxODpjb25maWcgSEZTUExVU19LVU5JVF9URVNUXFxuZnMvaGZzcGx1cy9LY29uZmlnLTE5LVxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0cyBmb3IgSEZTKyBmaWxlc3lzdGVtXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuZnMvaGZzcGx1cy9LY29uZmlnOjIwOlxcdGRlcGVuZHMgb24gSEZTUExVU19GUyBcXHUwMDI2XFx1MDAyNiBLVU5JVFxcbmZzL2hmc3BsdXMvS2NvbmZpZy0yMS1cXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMTowNTozOS4xODk0MzcyMDhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTQ2NTI0MTM0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBIRlMrIEZpbGVzeXN0ZW0qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBIRlNQTFVTX0ZTYCBjb25maWcsIGFuZCB0aGUgZ29hbCBpcyB0byBpZGVudGlmeSB0aGUgbW9zdCBwcm9taXNpbmcgZnVuY3Rpb25zIGZvciBmdXp6aW5nLiBTZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiB0aGUgZm9jdXMgc2hvdWxkIGJlIG9uIGZ1bmN0aW9ucyB0aGF0IGFyZSBsaWtlbHkgdG8gZXhwb3NlIHZ1bG5lcmFiaWxpdGllcy4gVGhlIHRleHQgaGlnaGxpZ2h0cyBhIGxpc3Qgb2YgbW9kaWZpZWQgZnVuY3Rpb25zLCBhbmQgSSdtIHVzaW5nIHRoYXQgYXMgYSBzdGFydGluZyBwb2ludC5cblxuTG9va2luZyBhdCB0aGUgbGlzdCwgSSBoYXZlOiBgX19oZnNfYnJlY19maW5kYCwgYGhmc19icmVjX2dvdG9gLCBgaGZzX2Jub2RlX2R1bXBgLCBgaGZzX2Jub2RlX2ZpbmRgLCBgaGZzX2JyZWNfbGVub2ZmYCwgYGhmc19icmVjX2tleWxlbmAsIGFuZCBgaGZzX2JyZWNfcmVtb3ZlYC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYGhmc19ibm9kZV9kdW1wYCBpcyBsaWtlbHkganVzdCBhIGRlYnVnZ2luZyBmdW5jdGlvbiwgc28gaXQncyBwcm9iYWJseSBub3QgdGhlIGJlc3QgdGFyZ2V0IGZvciBmdXp6aW5nIOKAkyBsZXNzIGNoYW5jZSBvZiB0cmlnZ2VyaW5nIGFjdHVhbCB2dWxuZXJhYmlsaXRpZXMuIFRoZSByZXN0IGxvb2sgbGlrZSBzb2xpZCBjYW5kaWRhdGVzOiBgX19oZnNfYnJlY19maW5kYCwgYGhmc19icmVjX2dvdG9gLCBgaGZzX2Jub2RlX2ZpbmRgLCBgaGZzX2JyZWNfbGVub2ZmYCwgYGhmc19icmVjX2tleWxlbmAsIGFuZCBgaGZzX2JyZWNfcmVtb3ZlYC5cblxuTm93LCB3YWl0IGEgc2Vjb25kLiBgaGZzX2JyZWNfbGVub2ZmYCBhbmQgYGhmc19icmVjX2tleWxlbmAuLi4gdGhvc2Ugc291bmQgbGlrZSB0aGV5J3JlIHByb2JhYmx5IGNhbGxlZCAqdmVyeSogZnJlcXVlbnRseS4gVGhhdCBjb3VsZCBtZWFuIHRoZXkncmUgaW4gYSBob3QgcGF0aCwgYW5kIHRoYXQncyB0aGUga2luZCBvZiBwbGFjZSB3aGVyZSBJJ20gZ29pbmcgdG8gZmluZCB0aGUgbW9zdCBpbnRlcmVzdGluZyByZXN1bHRzLiBJJ20gZ29pbmcgdG8gaW52ZXN0aWdhdGUgdGhvc2UgdHdvIGZ1bmN0aW9ucyBhIGJpdCBtb3JlIGNsb3NlbHkgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgcmVhbGx5IGFyZSBpbiB0aGUgaG90IHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0ODIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTE6MDY6MzQuNjU0NjgyNDJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ4NTM3NzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhmc19icmVjX2xlbm9mZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9oZnNwbHVzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9oZnNwbHVzL2JmaW5kLmM9MTAzPWludCBfX2hmc19icmVjX2ZpbmQoc3RydWN0IGhmc19ibm9kZSAqYm5vZGUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCxcXG4tLVxcbmZzL2hmc3BsdXMvYmZpbmQuYy0xMTgtXFx0XFx0cmVjID0gKGUgKyBiKSAvIDI7XFxuZnMvaGZzcGx1cy9iZmluZC5jOjExOTpcXHRcXHRsZW4gPSBoZnNfYnJlY19sZW5vZmYoYm5vZGUsIHJlYywgXFx1MDAyNm9mZik7XFxuZnMvaGZzcGx1cy9iZmluZC5jLTEyMC1cXHRcXHRrZXlsZW4gPSBoZnNfYnJlY19rZXlsZW4oYm5vZGUsIHJlYyk7XFxuLS1cXG5mcy9oZnNwbHVzL2JmaW5kLmMtMTMyLVxcdGlmIChyZWMgIT0gZSBcXHUwMDI2XFx1MDAyNiBlIFxcdTAwM2U9IDApIHtcXG5mcy9oZnNwbHVzL2JmaW5kLmM6MTMzOlxcdFxcdGxlbiA9IGhmc19icmVjX2xlbm9mZihibm9kZSwgZSwgXFx1MDAyNm9mZik7XFxuZnMvaGZzcGx1cy9iZmluZC5jLTEzNC1cXHRcXHRrZXlsZW4gPSBoZnNfYnJlY19rZXlsZW4oYm5vZGUsIGUpO1xcbi0tXFxuZnMvaGZzcGx1cy9iZmluZC5jPTIyOD1pbnQgaGZzX2JyZWNfZ290byhzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIGludCBjbnQpXFxuLS1cXG5mcy9oZnNwbHVzL2JmaW5kLmMtMjgwLVxcbmZzL2hmc3BsdXMvYmZpbmQuYzoyODE6XFx0bGVuID0gaGZzX2JyZWNfbGVub2ZmKGJub2RlLCBmZC1cXHUwMDNlcmVjb3JkLCBcXHUwMDI2b2ZmKTtcXG5mcy9oZnNwbHVzL2JmaW5kLmMtMjgyLVxcdGtleWxlbiA9IGhmc19icmVjX2tleWxlbihibm9kZSwgZmQtXFx1MDAzZXJlY29yZCk7XFxuLS1cXG5mcy9oZnNwbHVzL2JyZWMuYz0xNz1zdGF0aWMgaW50IGhmc19idHJlZV9pbmNfaGVpZ2h0KHN0cnVjdCBoZnNfYnRyZWUgKik7XFxuLS1cXG5mcy9oZnNwbHVzL2JyZWMuYy0xOS0vKiBHZXQgdGhlIGxlbmd0aCBhbmQgb2Zmc2V0IG9mIHRoZSBnaXZlbiByZWNvcmQgaW4gdGhlIGdpdmVuIG5vZGUgKi9cXG5mcy9oZnNwbHVzL2JyZWMuYzoyMDp1MTYgaGZzX2JyZWNfbGVub2ZmKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUxNiByZWMsIHUxNiAqb2ZmKVxcbmZzL2hmc3BsdXMvYnJlYy5jLTIxLXtcXG4tLVxcbmZzL2hmc3BsdXMvYnRyZWUuYz0xNDk9c3RhdGljIHN0cnVjdCBwYWdlICpoZnNfYm1hcF9nZXRfbWFwX3BhZ2Uoc3RydWN0IGhmc19ibm9kZSAqbm9kZSxcXG4tLVxcbmZzL2hmc3BsdXMvYnRyZWUuYy0xNjktXFxuZnMvaGZzcGx1cy9idHJlZS5jOjE3MDpcXHRjdHgtXFx1MDAzZWxlbiA9IGhmc19icmVjX2xlbm9mZihub2RlLCByZWNfaWR4LCBcXHUwMDI2b2ZmMTYpO1xcbmZzL2hmc3BsdXMvYnRyZWUuYy0xNzEtXFx0aWYgKCFjdHgtXFx1MDAzZWxlbilcXG4tLVxcbmZzL2hmc3BsdXMvYnRyZWUuYz02MDk9dm9pZCBoZnNfYm1hcF9mcmVlKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUpXFxuLS1cXG5mcy9oZnNwbHVzL2J0cmVlLmMtNjIzLVxcdFxcdHJldHVybjtcXG5mcy9oZnNwbHVzL2J0cmVlLmM6NjI0OlxcdGxlbiA9IGhmc19icmVjX2xlbm9mZihub2RlLCAyLCBcXHUwMDI2b2ZmKTtcXG5mcy9oZnNwbHVzL2J0cmVlLmMtNjI1LVxcdHdoaWxlIChuaWR4IFxcdTAwM2U9IGxlbiAqIDgpIHtcXG4tLVxcbmZzL2hmc3BsdXMvYnRyZWUuYy02NDktXFx0XFx0fVxcbmZzL2hmc3BsdXMvYnRyZWUuYzo2NTA6XFx0XFx0bGVuID0gaGZzX2JyZWNfbGVub2ZmKG5vZGUsIDAsIFxcdTAwMjZvZmYpO1xcbmZzL2hmc3BsdXMvYnRyZWUuYy02NTEtXFx0fVxcbi0tXFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg9MjgwPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgaGZzcGx1c19taW5faW9fc2l6ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMzA5LSNkZWZpbmUgaGZzX2Jub2RlX3B1dCBoZnNwbHVzX2Jub2RlX3B1dFxcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oOjMxMDojZGVmaW5lIGhmc19icmVjX2xlbm9mZiBoZnNwbHVzX2JyZWNfbGVub2ZmXFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMzExLSNkZWZpbmUgaGZzX2JyZWNfa2V5bGVuIGhmc3BsdXNfYnJlY19rZXlsZW5cXG4tLVxcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oPTM5MD1ib29sIGhmc19ibm9kZV9uZWVkX3plcm9vdXQoc3RydWN0IGhmc19idHJlZSAqdHJlZSk7XFxuLS1cXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC0zOTItLyogYnJlYy5jICovXFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg6MzkzOnUxNiBoZnNfYnJlY19sZW5vZmYoc3RydWN0IGhmc19ibm9kZSAqbm9kZSwgdTE2IHJlYywgdTE2ICpvZmYpO1xcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTM5NC11MTYgaGZzX2JyZWNfa2V5bGVuKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUsIHUxNiByZWMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMTowNjozNS4wMDMyMzQ5MDZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjI0MTgzMjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQnJlYWR0aCBvZiBgaGZzX2JyZWNfbGVub2ZmYCBVc2FnZSoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYGhmc19icmVjX2xlbm9mZmAgaXMgYSBwcmV0dHkgZnVuZGFtZW50YWwgZnVuY3Rpb24uIEl0J3MgY2FsbGVkIGZyb20gYSBudW1iZXIgb2Yga2V5IHBsYWNlczogYF9faGZzX2JyZWNfZmluZGAsIGBoZnNfYnJlY19nb3RvYCwgYGhmc19ibWFwX2dldF9tYXBfcGFnZWAsIGFuZCBgaGZzX2JtYXBfZnJlZWAuICBSaWdodCBhd2F5LCBJJ20gdGhpbmtpbmcgdGhhdCBgX19oZnNfYnJlY19maW5kYCBhbmQgYGhmc19icmVjX2dvdG9gIGFyZSBwcm9iYWJseSBnZXR0aW5nIGhpdCAqYSBsb3QqIGR1cmluZyBkaXJlY3RvcnkgdHJhdmVyc2FsIGFuZCBnZW5lcmFsIGZpbGUgbG9va3VwcyDigJMgdGhlIGNvcmUgb3BlcmF0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgbW9kaWZpY2F0aW9ucyB0aGVyZS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgd2hhdCBlbHNlIGlzIHBvdGVudGlhbGx5IGFmZmVjdGVkLiBMZXQncyBzZWUuLi4gYGhmc19ibm9kZV9maW5kYCBhbmQgYGhmc19icmVjX3JlbW92ZWAuIEludGVyZXN0aW5nLiBBbHJpZ2h0LCBsZXQncyBzdGFydCBieSBkaWdnaW5nIGludG8gYGhmc19ibm9kZV9maW5kYCBhbmQgc2VlIHdoYXQgaXQgaXMgZG9pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNTEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTE6MDY6MzkuMjI3NDIyNDg1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzUzNzU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoZnNfYm5vZGVfZmluZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9oZnNwbHVzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9oZnNwbHVzL2JmaW5kLmM9MTU1PWludCBoZnNfYnJlY19maW5kKHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgc2VhcmNoX3N0cmF0ZWd5X3QgZG9fa2V5X2NvbXBhcmUpXFxuLS1cXG5mcy9oZnNwbHVzL2JmaW5kLmMtMTc5LVxcdGZvciAoOzspIHtcXG5mcy9oZnNwbHVzL2JmaW5kLmM6MTgwOlxcdFxcdGJub2RlID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgbmlkeCk7XFxuZnMvaGZzcGx1cy9iZmluZC5jLTE4MS1cXHRcXHRpZiAoSVNfRVJSKGJub2RlKSkge1xcbi0tXFxuZnMvaGZzcGx1cy9iZmluZC5jPTIyOD1pbnQgaGZzX2JyZWNfZ290byhzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIGludCBjbnQpXFxuLS1cXG5mcy9oZnNwbHVzL2JmaW5kLmMtMjUyLVxcdFxcdFxcdGhmc19ibm9kZV9wdXQoYm5vZGUpO1xcbmZzL2hmc3BsdXMvYmZpbmQuYzoyNTM6XFx0XFx0XFx0Ym5vZGUgPSBoZnNfYm5vZGVfZmluZCh0cmVlLCBpZHgpO1xcbmZzL2hmc3BsdXMvYmZpbmQuYy0yNTQtXFx0XFx0XFx0aWYgKElTX0VSUihibm9kZSkpIHtcXG4tLVxcbmZzL2hmc3BsdXMvYmZpbmQuYy0yNzAtXFx0XFx0XFx0aGZzX2Jub2RlX3B1dChibm9kZSk7XFxuZnMvaGZzcGx1cy9iZmluZC5jOjI3MTpcXHRcXHRcXHRibm9kZSA9IGhmc19ibm9kZV9maW5kKHRyZWUsIGlkeCk7XFxuZnMvaGZzcGx1cy9iZmluZC5jLTI3Mi1cXHRcXHRcXHRpZiAoSVNfRVJSKGJub2RlKSkge1xcbi0tXFxuZnMvaGZzcGx1cy9ibm9kZS5jPTM5ND12b2lkIGhmc19ibm9kZV91bmxpbmsoc3RydWN0IGhmc19ibm9kZSAqbm9kZSlcXG4tLVxcbmZzL2hmc3BsdXMvYm5vZGUuYy00MDEtXFx0aWYgKG5vZGUtXFx1MDAzZXByZXYpIHtcXG5mcy9oZnNwbHVzL2Jub2RlLmM6NDAyOlxcdFxcdHRtcCA9IGhmc19ibm9kZV9maW5kKHRyZWUsIG5vZGUtXFx1MDAzZXByZXYpO1xcbmZzL2hmc3BsdXMvYm5vZGUuYy00MDMtXFx0XFx0aWYgKElTX0VSUih0bXApKVxcbi0tXFxuZnMvaGZzcGx1cy9ibm9kZS5jLTQxMy1cXHRpZiAobm9kZS1cXHUwMDNlbmV4dCkge1xcbmZzL2hmc3BsdXMvYm5vZGUuYzo0MTQ6XFx0XFx0dG1wID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgbm9kZS1cXHUwMDNlbmV4dCk7XFxuZnMvaGZzcGx1cy9ibm9kZS5jLTQxNS1cXHRcXHRpZiAoSVNfRVJSKHRtcCkpXFxuLS1cXG5mcy9oZnNwbHVzL2Jub2RlLmM9NDM4PXN0YXRpYyBpbmxpbmUgaW50IGhmc19ibm9kZV9oYXNoKHUzMiBudW0pXFxuLS1cXG5mcy9oZnNwbHVzL2Jub2RlLmMtNDQ0LVxcbmZzL2hmc3BsdXMvYm5vZGUuYzo0NDU6c3RydWN0IGhmc19ibm9kZSAqaGZzX2Jub2RlX2ZpbmRoYXNoKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUsIHUzMiBjbmlkKVxcbmZzL2hmc3BsdXMvYm5vZGUuYy00NDYte1xcbi0tXFxuZnMvaGZzcGx1cy9ibm9kZS5jPTQ2Mj1zdGF0aWMgc3RydWN0IGhmc19ibm9kZSAqX19oZnNfYm5vZGVfY3JlYXRlKHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUsIHUzMiBjbmlkKVxcbi0tXFxuZnMvaGZzcGx1cy9ibm9kZS5jLTQ4Ni1cXHRzcGluX2xvY2soXFx1MDAyNnRyZWUtXFx1MDAzZWhhc2hfbG9jayk7XFxuZnMvaGZzcGx1cy9ibm9kZS5jOjQ4NzpcXHRub2RlMiA9IGhmc19ibm9kZV9maW5kaGFzaCh0cmVlLCBjbmlkKTtcXG5mcy9oZnNwbHVzL2Jub2RlLmMtNDg4LVxcdGlmICghbm9kZTIpIHtcXG4tLVxcbmZzL2hmc3BsdXMvYm5vZGUuYz01MjA9dm9pZCBoZnNfYm5vZGVfdW5oYXNoKHN0cnVjdCBoZnNfYm5vZGUgKm5vZGUpXFxuLS1cXG5mcy9oZnNwbHVzL2Jub2RlLmMtNTM0LS8qIExvYWQgYSBwYXJ0aWN1bGFyIG5vZGUgb3V0IG9mIGEgdHJlZSAqL1xcbmZzL2hmc3BsdXMvYm5vZGUuYzo1MzU6c3RydWN0IGhmc19ibm9kZSAqaGZzX2Jub2RlX2ZpbmQoc3RydWN0IGhmc19idHJlZSAqdHJlZSwgdTMyIG51bSlcXG5mcy9oZnNwbHVzL2Jub2RlLmMtNTM2LXtcXG4tLVxcbmZzL2hmc3BsdXMvYm5vZGUuYy01NDItXFx0c3Bpbl9sb2NrKFxcdTAwMjZ0cmVlLVxcdTAwM2VoYXNoX2xvY2spO1xcbmZzL2hmc3BsdXMvYm5vZGUuYzo1NDM6XFx0bm9kZSA9IGhmc19ibm9kZV9maW5kaGFzaCh0cmVlLCBudW0pO1xcbmZzL2hmc3BsdXMvYm5vZGUuYy01NDQtXFx0aWYgKG5vZGUpIHtcXG4tLVxcbmZzL2hmc3BsdXMvYm5vZGUuYz02MzQ9c3RydWN0IGhmc19ibm9kZSAqaGZzX2Jub2RlX2NyZWF0ZShzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlLCB1MzIgbnVtKVxcbi0tXFxuZnMvaGZzcGx1cy9ibm9kZS5jLTY0MC1cXHRzcGluX2xvY2soXFx1MDAyNnRyZWUtXFx1MDAzZWhhc2hfbG9jayk7XFxuZnMvaGZzcGx1cy9ibm9kZS5jOjY0MTpcXHRub2RlID0gaGZzX2Jub2RlX2ZpbmRoYXNoKHRyZWUsIG51bSk7XFxuZnMvaGZzcGx1cy9ibm9kZS5jLTY0Mi1cXHRzcGluX3VubG9jayhcXHUwMDI2dHJlZS1cXHUwMDNlaGFzaF9sb2NrKTtcXG4tLVxcbmZzL2hmc3BsdXMvYnJlYy5jPTgxPWludCBoZnNfYnJlY19pbnNlcnQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLCB2b2lkICplbnRyeSwgdTMyIGVudHJ5X2xlbilcXG4tLVxcbmZzL2hmc3BsdXMvYnJlYy5jLTkzLVxcdFxcdFxcdGhmc19idHJlZV9pbmNfaGVpZ2h0KHRyZWUpO1xcbmZzL2hmc3BsdXMvYnJlYy5jOjk0OlxcdFxcdG5vZGUgPSBoZnNfYm5vZGVfZmluZCh0cmVlLCB0cmVlLVxcdTAwM2VsZWFmX2hlYWQpO1xcbmZzL2hmc3BsdXMvYnJlYy5jLTk1LVxcdFxcdGlmIChJU19FUlIobm9kZSkpXFxuLS1cXG5mcy9oZnNwbHVzL2JyZWMuYy0xNjgtXFx0XFx0fVxcbmZzL2hmc3BsdXMvYnJlYy5jOjE2OTpcXHRcXHRmZC1cXHUwMDNlYm5vZGUgPSBoZnNfYm5vZGVfZmluZCh0cmVlLCBuZXdfbm9kZS1cXHUwMDNlcGFyZW50KTtcXG5mcy9oZnNwbHVzL2JyZWMuYy0xNzAtXFxuLS1cXG5mcy9oZnNwbHVzL2JyZWMuYz0xOTc9aW50IGhmc19icmVjX3JlbW92ZShzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXFxuLS1cXG5mcy9oZnNwbHVzL2JyZWMuYy0yMjYtXFx0XFx0XFx0cmV0dXJuIDA7XFxuZnMvaGZzcGx1cy9icmVjLmM6MjI3OlxcdFxcdHBhcmVudCA9IGhmc19ibm9kZV9maW5kKHRyZWUsIG5vZGUtXFx1MDAzZXBhcmVudCk7XFxuZnMvaGZzcGx1cy9icmVjLmMtMjI4LVxcdFxcdGlmIChJU19FUlIocGFyZW50KSlcXG4tLVxcbmZzL2hmc3BsdXMvYnJlYy5jPTI2MD1zdGF0aWMgc3RydWN0IGhmc19ibm9kZSAqaGZzX2Jub2RlX3NwbGl0KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcXG4tLVxcbmZzL2hmc3BsdXMvYnJlYy5jLTI4NS1cXHRpZiAobm9kZS1cXHUwMDNlbmV4dClcXG5mcy9oZnNwbHVzL2JyZWMuYzoyODY6XFx0XFx0bmV4dF9ub2RlID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgbm9kZS1cXHUwMDNlbmV4dCk7XFxuZnMvaGZzcGx1cy9icmVjLmMtMjg3LVxcdGVsc2VcXG4tLVxcbmZzL2hmc3BsdXMvYnJlYy5jPTM4OT1zdGF0aWMgaW50IGhmc19icmVjX3VwZGF0ZV9wYXJlbnQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxcbi0tXFxuZnMvaGZzcGx1cy9icmVjLmMtNDAzLWFnYWluOlxcbmZzL2hmc3BsdXMvYnJlYy5jOjQwNDpcXHRwYXJlbnQgPSBoZnNfYm5vZGVfZmluZCh0cmVlLCBub2RlLVxcdTAwM2VwYXJlbnQpO1xcbmZzL2hmc3BsdXMvYnJlYy5jLTQwNS1cXHRpZiAoSVNfRVJSKHBhcmVudCkpXFxuLS1cXG5mcy9oZnNwbHVzL2JyZWMuYy00NjgtXFx0XFx0fVxcbmZzL2hmc3BsdXMvYnJlYy5jOjQ2OTpcXHRcXHRmZC1cXHUwMDNlYm5vZGUgPSBoZnNfYm5vZGVfZmluZCh0cmVlLCBuZXdfbm9kZS1cXHUwMDNlcGFyZW50KTtcXG5mcy9oZnNwbHVzL2JyZWMuYy00NzAtXFx0XFx0LyogY3JlYXRlIGluZGV4IGtleSBhbmQgZW50cnkgKi9cXG4tLVxcbmZzL2hmc3BsdXMvYnJlYy5jPTQ5NT1zdGF0aWMgaW50IGhmc19idHJlZV9pbmNfaGVpZ2h0KHN0cnVjdCBoZnNfYnRyZWUgKnRyZWUpXFxuLS1cXG5mcy9oZnNwbHVzL2JyZWMuYy01MDMtXFx0aWYgKHRyZWUtXFx1MDAzZXJvb3QpIHtcXG5mcy9oZnNwbHVzL2JyZWMuYzo1MDQ6XFx0XFx0bm9kZSA9IGhmc19ibm9kZV9maW5kKHRyZWUsIHRyZWUtXFx1MDAzZXJvb3QpO1xcbmZzL2hmc3BsdXMvYnJlYy5jLTUwNS1cXHRcXHRpZiAoSVNfRVJSKG5vZGUpKVxcbi0tXFxuZnMvaGZzcGx1cy9idHJlZS5jPTI2OD1zdHJ1Y3QgaGZzX2J0cmVlICpoZnNfYnRyZWVfb3BlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgaWQpXFxuLS1cXG5mcy9oZnNwbHVzL2J0cmVlLmMtMzgzLVxcbmZzL2hmc3BsdXMvYnRyZWUuYzozODQ6XFx0bm9kZSA9IGhmc19ibm9kZV9maW5kKHRyZWUsIEhGU1BMVVNfVFJFRV9IRUFEKTtcXG5mcy9oZnNwbHVzL2J0cmVlLmMtMzg1LVxcdGlmIChJU19FUlIobm9kZSkpXFxuLS1cXG5mcy9oZnNwbHVzL2J0cmVlLmM9NDM1PWludCBoZnNfYnRyZWVfd3JpdGUoc3RydWN0IGhmc19idHJlZSAqdHJlZSlcXG4tLVxcbmZzL2hmc3BsdXMvYnRyZWUuYy00NDAtXFxuZnMvaGZzcGx1cy9idHJlZS5jOjQ0MTpcXHRub2RlID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgMCk7XFxuZnMvaGZzcGx1cy9idHJlZS5jLTQ0Mi1cXHRpZiAoSVNfRVJSKG5vZGUpKVxcbi0tXFxuZnMvaGZzcGx1cy9idHJlZS5jPTUyOD1zdHJ1Y3QgaGZzX2Jub2RlICpoZnNfYm1hcF9hbGxvYyhzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlKVxcbi0tXFxuZnMvaGZzcGx1cy9idHJlZS5jLTU0My1cXHRuaWR4ID0gMDtcXG5mcy9oZnNwbHVzL2J0cmVlLmM6NTQ0OlxcdG5vZGUgPSBoZnNfYm5vZGVfZmluZCh0cmVlLCBuaWR4KTtcXG5mcy9oZnNwbHVzL2J0cmVlLmMtNTQ1LVxcdGlmIChJU19FUlIobm9kZSkpXFxuLS1cXG5mcy9oZnNwbHVzL2J0cmVlLmMtNTkyLVxcdFxcdH0gZWxzZVxcbmZzL2hmc3BsdXMvYnRyZWUuYzo1OTM6XFx0XFx0XFx0bmV4dF9ub2RlID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgbmlkeCk7XFxuZnMvaGZzcGx1cy9idHJlZS5jLTU5NC1cXHRcXHRoZnNfYm5vZGVfcHV0KG5vZGUpO1xcbi0tXFxuZnMvaGZzcGx1cy9idHJlZS5jPTYwOT12b2lkIGhmc19ibWFwX2ZyZWUoc3RydWN0IGhmc19ibm9kZSAqbm9kZSlcXG4tLVxcbmZzL2hmc3BsdXMvYnRyZWUuYy02MjAtXFx0bmlkeCA9IG5vZGUtXFx1MDAzZXRoaXM7XFxuZnMvaGZzcGx1cy9idHJlZS5jOjYyMTpcXHRub2RlID0gaGZzX2Jub2RlX2ZpbmQodHJlZSwgMCk7XFxuZnMvaGZzcGx1cy9idHJlZS5jLTYyMi1cXHRpZiAoSVNfRVJSKG5vZGUpKVxcbi0tXFxuZnMvaGZzcGx1cy9idHJlZS5jLTYzOC1cXHRcXHRoZnNfYm5vZGVfcHV0KG5vZGUpO1xcbmZzL2hmc3BsdXMvYnRyZWUuYzo2Mzk6XFx0XFx0bm9kZSA9IGhmc19ibm9kZV9maW5kKHRyZWUsIGkpO1xcbmZzL2hmc3BsdXMvYnRyZWUuYy02NDAtXFx0XFx0aWYgKElTX0VSUihub2RlKSlcXG4tLVxcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oPTI4MD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGhmc3BsdXNfbWluX2lvX3NpemUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTMwMi0jZGVmaW5lIGhmc19ibm9kZV91bmxpbmsgaGZzcGx1c19ibm9kZV91bmxpbmtcXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaDozMDM6I2RlZmluZSBoZnNfYm5vZGVfZmluZGhhc2ggaGZzcGx1c19ibm9kZV9maW5kaGFzaFxcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oOjMwNDojZGVmaW5lIGhmc19ibm9kZV9maW5kIGhmc3BsdXNfYm5vZGVfZmluZFxcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTMwNS0jZGVmaW5lIGhmc19ibm9kZV91bmhhc2ggaGZzcGx1c19ibm9kZV91bmhhc2hcXG4tLVxcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oPTM4Mj12b2lkIGhmc19ibm9kZV91bmxpbmsoc3RydWN0IGhmc19ibm9kZSAqbm9kZSk7XFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg6MzgzOnN0cnVjdCBoZnNfYm5vZGUgKmhmc19ibm9kZV9maW5kaGFzaChzdHJ1Y3QgaGZzX2J0cmVlICp0cmVlLCB1MzIgY25pZCk7XFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMzg0LXZvaWQgaGZzX2Jub2RlX3VuaGFzaChzdHJ1Y3QgaGZzX2Jub2RlICpub2RlKTtcXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaDozODU6c3RydWN0IGhmc19ibm9kZSAqaGZzX2Jub2RlX2ZpbmQoc3RydWN0IGhmc19idHJlZSAqdHJlZSwgdTMyIG51bSk7XFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtMzg2LXZvaWQgaGZzX2Jub2RlX2ZyZWUoc3RydWN0IGhmc19ibm9kZSAqbm9kZSk7XFxuLS1cXG5mcy9oZnNwbHVzL2lub2RlLmM9NjI9c3RhdGljIGJvb2wgaGZzcGx1c19yZWxlYXNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IG1hc2spXFxuLS1cXG5mcy9oZnNwbHVzL2lub2RlLmMtOTEtXFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZ0cmVlLVxcdTAwM2VoYXNoX2xvY2spO1xcbmZzL2hmc3BsdXMvaW5vZGUuYzo5MjpcXHRcXHRub2RlID0gaGZzX2Jub2RlX2ZpbmRoYXNoKHRyZWUsIG5pZHgpO1xcbmZzL2hmc3BsdXMvaW5vZGUuYy05My1cXHRcXHRpZiAoIW5vZGUpXFxuLS1cXG5mcy9oZnNwbHVzL2lub2RlLmMtMTA3LVxcdFxcdGRvIHtcXG5mcy9oZnNwbHVzL2lub2RlLmM6MTA4OlxcdFxcdFxcdG5vZGUgPSBoZnNfYm5vZGVfZmluZGhhc2godHJlZSwgbmlkeCsrKTtcXG5mcy9oZnNwbHVzL2lub2RlLmMtMTA5LVxcdFxcdFxcdGlmICghbm9kZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTE6MDY6MzkuMzMwOTY5MTY1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTIzMzU3MTQ3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIE9wdGltaXphdGlvbiBUYXJnZXRzKipcblxuT2theSwgc28gYGhmc19ibm9kZV9maW5kYCBpcyBwcmV0dHkgdWJpcXVpdG91cyB3aXRoaW4gdGhpcyBjb2RlYmFzZS4gSXQncyB1c2VkIGFsbCBvdmVyIHRoZSBwbGFjZSwgd2hpY2ggbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIHBlcmZvcm1hbmNlIHR1bmluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gZnVuY3Rpb25zIHRoYXQgZGlyZWN0bHkgaW50ZXJhY3Qgd2l0aCB0aGF0LiBgX19oZnNfYnJlY19maW5kYCBhbmQgYGhmc19icmVjX2dvdG9gIGJvdGggc2VlbSBsaWtlIHN0cm9uZyBwb3NzaWJpbGl0aWVzIGZvciBvcHRpbWl6YXRpb24sIGdpdmVuIHRoZWlyIGxpa2VseSByZWxhdGlvbnNoaXAgd2l0aCB0aGUgY29yZSBzZWFyY2ggZnVuY3Rpb25hbGl0eS4gYGhmc19icmVjX3JlbW92ZWAgYWxzbyBjYXRjaGVzIG15IGV5ZSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhhdCwgZXZlbiB0aG91Z2ggaXQgbWF5IGhhdmUgbGVzcyBpbXBhY3Qgb24gZ2VuZXJhbCBzZWFyY2ggYW5kIGxvb2t1cC4gRm9yIG5vdywgbGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBoZnNfYnJlY19yZW1vdmVgIHRvIHNlZSB3aGF0IGtpbmQgb2YgaW1wYWN0IGl0cyBvcHRpbWl6YXRpb24gbWF5IGhhdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzYyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTE6MDY6NDguNTY0NTQ1MzI2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI3MzE3ODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhmc19icmVjX3JlbW92ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9oZnNwbHVzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYz0zMDU9c3RhdGljIGludCBfX2hmc3BsdXNfZGVsZXRlX2F0dHIoc3RydWN0IGlub2RlICppbm9kZSwgdTMyIGNuaWQsXFxuLS1cXG5mcy9oZnNwbHVzL2F0dHJpYnV0ZXMuYy0zMzgtXFxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmM6MzM5OlxcdGVyciA9IGhmc19icmVjX3JlbW92ZShmZCk7XFxuZnMvaGZzcGx1cy9hdHRyaWJ1dGVzLmMtMzQwLVxcdGlmIChlcnIpXFxuLS1cXG5mcy9oZnNwbHVzL2JyZWMuYz04MT1pbnQgaGZzX2JyZWNfaW5zZXJ0KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgdm9pZCAqZW50cnksIHUzMiBlbnRyeV9sZW4pXFxuLS1cXG5mcy9oZnNwbHVzL2JyZWMuYy0xOTYtXFxuZnMvaGZzcGx1cy9icmVjLmM6MTk3OmludCBoZnNfYnJlY19yZW1vdmUoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxcbmZzL2hmc3BsdXMvYnJlYy5jLTE5OC17XFxuLS1cXG5mcy9oZnNwbHVzL2NhdGFsb2cuYz0yNTM9aW50IGhmc3BsdXNfY3JlYXRlX2NhdCh1MzIgY25pZCwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9oZnNwbHVzL2NhdGFsb2cuYy0zMjQtXFx0aWYgKCFoZnNfYnJlY19maW5kKFxcdTAwMjZmZCwgaGZzX2ZpbmRfcmVjX2J5X2tleSkpXFxuZnMvaGZzcGx1cy9jYXRhbG9nLmM6MzI1OlxcdFxcdGhmc19icmVjX3JlbW92ZShcXHUwMDI2ZmQpO1xcbmZzL2hmc3BsdXMvY2F0YWxvZy5jLTMyNi1lcnIyOlxcbi0tXFxuZnMvaGZzcGx1cy9jYXRhbG9nLmM9MzMxPWludCBoZnNwbHVzX2RlbGV0ZV9jYXQodTMyIGNuaWQsIHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqc3RyKVxcbi0tXFxuZnMvaGZzcGx1cy9jYXRhbG9nLmMtMzkzLVxcbmZzL2hmc3BsdXMvY2F0YWxvZy5jOjM5NDpcXHRlcnIgPSBoZnNfYnJlY19yZW1vdmUoXFx1MDAyNmZkKTtcXG5mcy9oZnNwbHVzL2NhdGFsb2cuYy0zOTUtXFx0aWYgKGVycilcXG4tLVxcbmZzL2hmc3BsdXMvY2F0YWxvZy5jLTQwMi1cXG5mcy9oZnNwbHVzL2NhdGFsb2cuYzo0MDM6XFx0ZXJyID0gaGZzX2JyZWNfcmVtb3ZlKFxcdTAwMjZmZCk7XFxuZnMvaGZzcGx1cy9jYXRhbG9nLmMtNDA0LVxcdGlmIChlcnIpXFxuLS1cXG5mcy9oZnNwbHVzL2NhdGFsb2cuYz00MjU9aW50IGhmc3BsdXNfcmVuYW1lX2NhdCh1MzIgY25pZCxcXG4tLVxcbmZzL2hmc3BsdXMvY2F0YWxvZy5jLTQ5OC1cXHRcXHRnb3RvIG91dDtcXG5mcy9oZnNwbHVzL2NhdGFsb2cuYzo0OTk6XFx0ZXJyID0gaGZzX2JyZWNfcmVtb3ZlKFxcdTAwMjZzcmNfZmQpO1xcbmZzL2hmc3BsdXMvY2F0YWxvZy5jLTUwMC1cXHRpZiAoZXJyKVxcbi0tXFxuZnMvaGZzcGx1cy9jYXRhbG9nLmMtNTEyLVxcdHR5cGUgPSBoZnNfYm5vZGVfcmVhZF91MTYoc3JjX2ZkLmJub2RlLCBzcmNfZmQuZW50cnlvZmZzZXQpO1xcbmZzL2hmc3BsdXMvY2F0YWxvZy5jOjUxMzpcXHRlcnIgPSBoZnNfYnJlY19yZW1vdmUoXFx1MDAyNnNyY19mZCk7XFxuZnMvaGZzcGx1cy9jYXRhbG9nLmMtNTE0LVxcdGlmIChlcnIpXFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYz0zOTM9aW50IGhmc3BsdXNfZnJlZV9mb3JrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBjbmlkLFxcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtNDIzLVxcdFxcdHN0YXJ0ID0gYmUzMl90b19jcHUoZmQua2V5LVxcdTAwM2VleHQuc3RhcnRfYmxvY2spO1xcbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjQyNDpcXHRcXHRoZnNfYnJlY19yZW1vdmUoXFx1MDAyNmZkKTtcXG5mcy9oZnNwbHVzL2V4dGVudHMuYy00MjUtXFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYz01NDQ9dm9pZCBoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTYwNi1cXHRcXHRpZiAoYmxrX2NudCBcXHUwMDNjPSBzdGFydClcXG5mcy9oZnNwbHVzL2V4dGVudHMuYzo2MDc6XFx0XFx0XFx0aGZzX2JyZWNfcmVtb3ZlKFxcdTAwMjZmZCk7XFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtNjA4LVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZmQudHJlZS1cXHUwMDNldHJlZV9sb2NrKTtcXG4tLVxcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oPTI4MD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGhmc3BsdXNfbWluX2lvX3NpemUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTMxMi0jZGVmaW5lIGhmc19icmVjX2luc2VydCBoZnNwbHVzX2JyZWNfaW5zZXJ0XFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg6MzEzOiNkZWZpbmUgaGZzX2JyZWNfcmVtb3ZlIGhmc3BsdXNfYnJlY19yZW1vdmVcXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC0zMTQtI2RlZmluZSBoZnNfZmluZF9pbml0IGhmc3BsdXNfZmluZF9pbml0XFxuLS1cXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaD0zOTU9aW50IGhmc19icmVjX2luc2VydChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIHZvaWQgKmVudHJ5LCB1MzIgZW50cnlfbGVuKTtcXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaDozOTY6aW50IGhmc19icmVjX3JlbW92ZShzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpO1xcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTM5Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTE6MDY6NTAuMTkxODcyODg4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODEwMjYzNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBQb3RlbnRpYWw6IGhmc19icmVjX3JlbW92ZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBoZnNfYnJlY19yZW1vdmVgIGFuZCB0aGlua2luZyBhYm91dCBpdHMgcG90ZW50aWFsIGZvciBmdXp6aW5nLiBJJ3ZlIG5vdGljZWQgaXQncyBjYWxsZWQgZnJvbSBhIHNpZ25pZmljYW50IG51bWJlciBvZiBmdW5jdGlvbnMgd2l0aGluIHRoZSBIRlMrIGNvZGU6IGBfX2hmc3BsdXNfZGVsZXRlX2F0dHJgLCB0aGUgZXJyb3IgcGF0aHMgaW4gYGhmc3BsdXNfY3JlYXRlX2NhdGAsIGBoZnNwbHVzX2RlbGV0ZV9jYXRgLCBgaGZzcGx1c19yZW5hbWVfY2F0YCwgYGhmc3BsdXNfZnJlZV9mb3JrYCwgYW5kIGBoZnNwbHVzX2ZpbGVfdHJ1bmNhdGVgLiBUaGF0J3MgYSBwcmV0dHkgZGl2ZXJzZSBzZXQgb2YgY29udGV4dHMsIHdoaWNoIHN1Z2dlc3RzIGl0IGludGVyYWN0cyB3aXRoIGEgbG90IG9mIGRpZmZlcmVudCBkYXRhIHN0cnVjdHVyZXMgYW5kIGxvZ2ljIHBhdGhzLiBUaGlzIG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlLCBpbiBteSB2aWV3LCBiZWNhdXNlIGZ1enppbmcgaXQgaXMgbGlrZWx5IHRvIGV4cG9zZSBhIHJhbmdlIG9mIHZ1bG5lcmFiaWxpdGllcy5cblxuTm93LCBsZXQncyB0dXJuIG91ciBhdHRlbnRpb24gdG8gaXRzIGNvbXBhbmlvbiBmdW5jdGlvbiwgYF9faGZzX2JyZWNfZmluZGAuIEknbSBjdXJpb3VzIHRvIHNlZSBob3cgaXQgd29ya3MgYW5kIGNvbnNpZGVyIHdoZXRoZXIgdGhhdCBmdW5jdGlvbiBpcyBhbm90aGVyIGdvb2QgdGFyZ2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjI0NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDExOjA2OjUzLjc3MjkwMjYxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjkyNDgyMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19oZnNfYnJlY19maW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2hmc3BsdXMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2hmc3BsdXMvYmZpbmQuYz04MT1pbnQgaGZzX2ZpbmRfcmVjX2J5X2tleShzdHJ1Y3QgaGZzX2Jub2RlICpibm9kZSxcXG4tLVxcbmZzL2hmc3BsdXMvYmZpbmQuYy0xMDItLyogRmluZCB0aGUgcmVjb3JkIGluIGJub2RlIHRoYXQgYmVzdCBtYXRjaGVzIGtleSAobm90IGdyZWF0ZXIgdGhhbi4uLikqL1xcbmZzL2hmc3BsdXMvYmZpbmQuYzoxMDM6aW50IF9faGZzX2JyZWNfZmluZChzdHJ1Y3QgaGZzX2Jub2RlICpibm9kZSwgc3RydWN0IGhmc19maW5kX2RhdGEgKmZkLFxcbmZzL2hmc3BsdXMvYmZpbmQuYy0xMDQtXFx0XFx0XFx0XFx0XFx0c2VhcmNoX3N0cmF0ZWd5X3QgcmVjX2ZvdW5kKVxcbi0tXFxuZnMvaGZzcGx1cy9iZmluZC5jPTE1NT1pbnQgaGZzX2JyZWNfZmluZChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIHNlYXJjaF9zdHJhdGVneV90IGRvX2tleV9jb21wYXJlKVxcbi0tXFxuZnMvaGZzcGx1cy9iZmluZC5jLTE5MS1cXG5mcy9oZnNwbHVzL2JmaW5kLmM6MTkyOlxcdFxcdHJlcyA9IF9faGZzX2JyZWNfZmluZChibm9kZSwgZmQsIGRvX2tleV9jb21wYXJlKTtcXG5mcy9oZnNwbHVzL2JmaW5kLmMtMTkzLVxcdFxcdGlmICghaGVpZ2h0KVxcbi0tXFxuZnMvaGZzcGx1cy9icmVjLmM9ODE9aW50IGhmc19icmVjX2luc2VydChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIHZvaWQgKmVudHJ5LCB1MzIgZW50cnlfbGVuKVxcbi0tXFxuZnMvaGZzcGx1cy9icmVjLmMtMTc3LVxcdFxcdGhmc19ibm9kZV9yZWFkX2tleShuZXdfbm9kZSwgZmQtXFx1MDAzZXNlYXJjaF9rZXksIDE0KTtcXG5mcy9oZnNwbHVzL2JyZWMuYzoxNzg6XFx0XFx0X19oZnNfYnJlY19maW5kKGZkLVxcdTAwM2Vibm9kZSwgZmQsIGhmc19maW5kX3JlY19ieV9rZXkpO1xcbmZzL2hmc3BsdXMvYnJlYy5jLTE3OS1cXG4tLVxcbmZzL2hmc3BsdXMvYnJlYy5jPTE5Nz1pbnQgaGZzX2JyZWNfcmVtb3ZlKHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcXG4tLVxcbmZzL2hmc3BsdXMvYnJlYy5jLTIzMi1cXG5mcy9oZnNwbHVzL2JyZWMuYzoyMzM6XFx0XFx0X19oZnNfYnJlY19maW5kKG5vZGUsIGZkLCBoZnNfZmluZF9yZWNfYnlfa2V5KTtcXG5mcy9oZnNwbHVzL2JyZWMuYy0yMzQtXFx0XFx0Z290byBhZ2FpbjtcXG4tLVxcbmZzL2hmc3BsdXMvYnJlYy5jPTM4OT1zdGF0aWMgaW50IGhmc19icmVjX3VwZGF0ZV9wYXJlbnQoc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxcbi0tXFxuZnMvaGZzcGx1cy9icmVjLmMtNDA2LVxcdFxcdHJldHVybiBQVFJfRVJSKHBhcmVudCk7XFxuZnMvaGZzcGx1cy9icmVjLmM6NDA3OlxcdF9faGZzX2JyZWNfZmluZChwYXJlbnQsIGZkLCBoZnNfZmluZF9yZWNfYnlfa2V5KTtcXG5mcy9oZnNwbHVzL2JyZWMuYy00MDgtXFx0aWYgKGZkLVxcdTAwM2VyZWNvcmQgXFx1MDAzYyAwKVxcbi0tXFxuZnMvaGZzcGx1cy9icmVjLmMtNDczLVxcbmZzL2hmc3BsdXMvYnJlYy5jOjQ3NDpcXHRcXHRfX2hmc19icmVjX2ZpbmQoZmQtXFx1MDAzZWJub2RlLCBmZCwgaGZzX2ZpbmRfcmVjX2J5X2tleSk7XFxuZnMvaGZzcGx1cy9icmVjLmMtNDc1LVxcdFxcdGhmc19icmVjX2luc2VydChmZCwgXFx1MDAyNmNuaWQsIHNpemVvZihjbmlkKSk7XFxuLS1cXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaD0yODA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBoZnNwbHVzX21pbl9pb19zaXplKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC0zMTUtI2RlZmluZSBoZnNfZmluZF9leGl0IGhmc3BsdXNfZmluZF9leGl0XFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg6MzE2OiNkZWZpbmUgX19oZnNfYnJlY19maW5kIF9faGZzcGx1c19icmVjX2ZpbmRcXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC0zMTctI2RlZmluZSBoZnNfYnJlY19maW5kIGhmc3BsdXNfYnJlY19maW5kXFxuLS1cXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaD00MDM9aW50IGhmc19maW5kX3JlY19ieV9rZXkoc3RydWN0IGhmc19ibm9kZSAqYm5vZGUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCxcXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC00MDQtXFx0XFx0XFx0aW50ICpiZWdpbiwgaW50ICplbmQsIGludCAqY3VyX3JlYyk7XFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg6NDA1OmludCBfX2hmc19icmVjX2ZpbmQoc3RydWN0IGhmc19ibm9kZSAqYm5vZGUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCxcXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC00MDYtXFx0XFx0ICAgIHNlYXJjaF9zdHJhdGVneV90IHJlY19mb3VuZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDExOjA2OjU0LjIwMjE2NTE0OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODA0NzUyODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6XG5cbioqQW5hbHl6aW5nIENvcmUgSEZTIEItVHJlZSBGdW5jdGlvbmFsaXR5KipcblxuQWxyaWdodCwgbGV0J3MgemVybyBpbiBvbiB0aGlzIGBfX2hmc19icmVjX2ZpbmRgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdHMgd2lkZXNwcmVhZCB1c2Ugc3VnZ2VzdHMgaXQncyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBIRlMgQi10cmVlIHB1enpsZS4gVGhlIGZhY3QgdGhhdCBpdCdzIGNhbGxlZCB3aXRoaW4gYGhmc19icmVjX2ZpbmRgIGl0c2VsZiwgYnV0IGFsc28gaW4gYGhmc19icmVjX2luc2VydGAsIGBoZnNfYnJlY19yZW1vdmVgLCBhbmQgZXZlbiBgaGZzX2JyZWNfdXBkYXRlX3BhcmVudGAuLi4gd2VsbCwgdGhhdCdzIGEgcHJldHR5IHN0cm9uZyBpbmRpY2F0b3Igb2YgYSBjb3JlIGZ1bmN0aW9uLiBJdCdzIGVzc2VudGlhbGx5IHRoZSBmb3VuZGF0aW9uLiBXZSBjYW4gZXhwZWN0IHRoaXMgdG8gYmUgYSBrZXkgZWxlbWVudCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIEItVHJlZSdzIGZ1bmRhbWVudGFsIHRhc2tzIGFyZSBpbXBsZW1lbnRlZC5cblxuR2l2ZW4gaXRzIHBlcnZhc2l2ZSBuYXR1cmUsIEkgdGhpbmsgd2Ugc2hvdWxkIGNoZWNrIGBoZnNfYnJlY19nb3RvYC4gSXQgaXMgYWx3YXlzIGEgZ29vZCBpZGVhIHRvIGNyb3NzLXJlZmVyZW5jZSByZWxhdGVkIGNvbXBvbmVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjg1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTE6MDY6NTguMDA2OTIyODc4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzY0MDA4MDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGZzX2JyZWNfZ290b1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9oZnNwbHVzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9oZnNwbHVzL2JmaW5kLmM9MjE1PWludCBoZnNfYnJlY19yZWFkKHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCwgdm9pZCAqcmVjLCB1MzIgcmVjX2xlbilcXG4tLVxcbmZzL2hmc3BsdXMvYmZpbmQuYy0yMjctXFxuZnMvaGZzcGx1cy9iZmluZC5jOjIyODppbnQgaGZzX2JyZWNfZ290byhzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIGludCBjbnQpXFxuZnMvaGZzcGx1cy9iZmluZC5jLTIyOS17XFxuLS1cXG5mcy9oZnNwbHVzL2Rpci5jPTEzMD1zdGF0aWMgaW50IGhmc3BsdXNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXFxuLS1cXG5mcy9oZnNwbHVzL2Rpci5jLTE5Mi1cXHRcXHRpZiAoZXJyID09IC1FTk9FTlQpXFxuZnMvaGZzcGx1cy9kaXIuYzoxOTM6XFx0XFx0XFx0ZXJyID0gaGZzX2JyZWNfZ290byhcXHUwMDI2ZmQsIDEpO1xcbmZzL2hmc3BsdXMvZGlyLmMtMTk0LVxcdH0gZWxzZSB7XFxuZnMvaGZzcGx1cy9kaXIuYzoxOTU6XFx0XFx0ZXJyID0gaGZzX2JyZWNfZ290byhcXHUwMDI2ZmQsIGN0eC1cXHUwMDNlcG9zIC0gMSk7XFxuZnMvaGZzcGx1cy9kaXIuYy0xOTYtXFx0fVxcbi0tXFxuZnMvaGZzcGx1cy9kaXIuYy0yNjctXFx0XFx0XFx0Z290byBvdXQ7XFxuZnMvaGZzcGx1cy9kaXIuYzoyNjg6XFx0XFx0ZXJyID0gaGZzX2JyZWNfZ290byhcXHUwMDI2ZmQsIDEpO1xcbmZzL2hmc3BsdXMvZGlyLmMtMjY5LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaD0yODA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBoZnNwbHVzX21pbl9pb19zaXplKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC0zMTgtI2RlZmluZSBoZnNfYnJlY19yZWFkIGhmc3BsdXNfYnJlY19yZWFkXFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg6MzE5OiNkZWZpbmUgaGZzX2JyZWNfZ290byBoZnNwbHVzX2JyZWNfZ290b1xcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTMyMC0jZGVmaW5lIGhmc19wYXJ0X2ZpbmQgaGZzcGx1c19wYXJ0X2ZpbmRcXG4tLVxcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oPTQwOD1pbnQgaGZzX2JyZWNfcmVhZChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIHZvaWQgKnJlYywgdTMyIHJlY19sZW4pO1xcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oOjQwOTppbnQgaGZzX2JyZWNfZ290byhzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsIGludCBjbnQpO1xcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTQxMC1cXG4tLVxcbmZzL2hmc3BsdXMveGF0dHIuYz04MDI9c3NpemVfdCBoZnNwbHVzX2xpc3R4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpXFxuLS1cXG5mcy9oZnNwbHVzL3hhdHRyLmMtODkxLVxcbmZzL2hmc3BsdXMveGF0dHIuYzo4OTI6XFx0XFx0aWYgKGhmc19icmVjX2dvdG8oXFx1MDAyNmZkLCAxKSlcXG5mcy9oZnNwbHVzL3hhdHRyLmMtODkzLVxcdFxcdFxcdGdvdG8gZW5kX2xpc3R4YXR0cjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTE6MDY6NTguMTgzMzMyNFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5OTI3MDI0ODU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEhGUysgQi1UcmVlIE5vZGUgRnVuY3Rpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgYGhmc19icmVjX2dvdG9gIGxvb2tlZCBwcm9taXNpbmcsIGFuZCBpdCdzIHVzZWQgd2l0aGluIGBoZnNwbHVzX3JlYWRkaXJgIGFuZCBgaGZzcGx1c19saXN0eGF0dHJgLCBzbyBpdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBjb25zaWRlcmVkIGV4cGFuZGluZyB0aGUgZm9jdXMgdG8gaW5jbHVkZSBgaGZzX2JyZWNfcmVtb3ZlYCBhbmQgYF9faGZzX2JyZWNfZmluZGAgYXMgd2VsbC5cblxuSSB0aGVuIHN0YXJ0ZWQgdG8gZXZhbHVhdGUgY2FuZGlkYXRlcyBhbmQgcXVpY2tseSByZWFsaXplZCB0aGUgaW1wb3J0YW5jZSBvZiBjaGVja2luZyB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlICptb2RpZmllZCosIHBhcnRpY3VsYXJseSBhcm91bmQgYGJub2RlLVx1MDAzZW51bV9yZWNzYCBvciBpdHMgdmFsaWRpdHkuIFR1cm5zIG91dCwgc2V2ZXJhbCBmdW5jdGlvbnMgYXJlIG1vZGlmaWVkOiBgX19oZnNfYnJlY19maW5kYCwgYGhmc19icmVjX2dvdG9gLCBgaGZzX2Jub2RlX2R1bXBgLCBgaGZzX2Jub2RlX2ZpbmRgLCBgaGZzX2JyZWNfbGVub2ZmYCwgYGhmc19icmVjX2tleWxlbmAsIGFuZCBgaGZzX2JyZWNfcmVtb3ZlYC5cblxuTm93LCBjb25zaWRlcmluZyBwZXJmb3JtYW5jZSwgYGhmc19icmVjX2xlbm9mZmAsIGBoZnNfYnJlY19rZXlsZW5gLCBhbmQgYGhmc19ibm9kZV9maW5kYCBhcmUgb24gdGhlIGhvdCBwYXRoLCBhbmQgYm90aCBgX19oZnNfYnJlY19maW5kYCBhbmQgYGhmc19icmVjX2dvdG9gIGFyZSBzdGlsbCBmcmVxdWVudGx5IGNhbGxlZC4gYGhmc19icmVjX3JlbW92ZWAsIG9uIHRoZSBvdGhlciBoYW5kLCBpcyBkZWZpbml0ZWx5IGxlc3MgcGVyZm9ybWFuY2UgY3JpdGljYWwuXG5cbkZvY3VzaW5nIGluIG9uIGZ1bmN0aW9uIGNvbnRleHQsIGBoZnNfYnJlY19nb3RvYCBpcyB1c2VkIGZvciBgcmVhZGRpcmAgYW5kIGBsaXN0eGF0dHJgIGNhbGxzLCB3aGlsZSBgaGZzX2JyZWNfcmVtb3ZlYCBpcyB0aWVkIHRvIGZpbGUgZGVsZXRpb24sIHJlbmFtZSwgYW5kIHRydW5jYXRlIG9wZXJhdGlvbnMuXG5cbkFmdGVyIGV2YWx1YXRpbmcgdGhlc2UgZmFjdG9ycywgSSdtIGxlYW5pbmcgdG93YXJkIHNlbGVjdGluZyBgaGZzX2JyZWNfcmVtb3ZlYCwgYGhmc19icmVjX2dvdG9gLCBhbmQgYF9faGZzX2JyZWNfZmluZGAgYXMgdGhlIHByaW1hcnkgZm9jdXMgZnVuY3Rpb25zLlxuXG5JIG5lZWQgdG8gY29uZmlybSBteSBzZWxlY3Rpb24gYnkgY2hlY2tpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIGVuc3VyZSBJJ20gbm90IG92ZXJsb29raW5nIGFueSByZWxldmFudCBmbGFncy4gTG9va3MgbGlrZSBgSEZTUExVU19GU2AgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIGhlcmUsIGJ1dCBhIGRvdWJsZS1jaGVjayBvZiBgZnMvaGZzcGx1cy9LY29uZmlnYCBpcyBhbHdheXMgYSBnb29kIGlkZWEuIEkgd2lsbCBpbmNsdWRlIHRoZSBhbmFseXNpcyBvZiBgaGZzX2Jub2RlX2ZpbmRgIGluIG15IG1lbnRhbCBtb2RlbCwgYXMgaXQgaXMgYSBmdW5kYW1lbnRhbCBibm9kZSByZWFkLiBCdXQgbXkgcHJpbWFyeSBnb2FsIGlzIHRoZSBvdGhlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzQ1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDExOjA3OjA4LjExMDM2MDgyNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg2NTU1MzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIRlNQTFVTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2hmc3BsdXMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9oZnNwbHVzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9oZnNwbHVzL0tjb25maWc6Mjpjb25maWcgSEZTUExVU19GU1xcbmZzL2hmc3BsdXMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJBcHBsZSBFeHRlbmRlZCBIRlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL2hmc3BsdXMvS2NvbmZpZy0xNy1cXG5mcy9oZnNwbHVzL0tjb25maWc6MTg6Y29uZmlnIEhGU1BMVVNfS1VOSVRfVEVTVFxcbmZzL2hmc3BsdXMvS2NvbmZpZy0xOS1cXHR0cmlzdGF0ZSBcXFwiS1VuaXQgdGVzdHMgZm9yIEhGUysgZmlsZXN5c3RlbVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMTowNzowOC41OTY5MjM3MzdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc3ODkyNzIyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBIRlMrIEItVHJlZSBOb2RlIFZhbGlkYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGxhc2VyLWZvY3VzZWQuIEFmdGVyIHJldmlld2luZyB0aGUgZGV0YWlscywgaXQncyBjbGVhciB0aGUgY29yZSBjb25jZXJuIGlzIHRoZSBgbnVtX3JlY3NgIHZhbGlkYXRpb24gd2l0aGluIEhGUysgYi10cmVlIG5vZGVzLiBUaGUgY2hhbmdlcyBhcmUgYWxsIGFib3V0IGhhcmRlbmluZyB0aG9zZSBmb3VuZGF0aW9uYWwgYi10cmVlIG9wZXJhdGlvbnM6IGZpbmRpbmcgcmVjb3JkcywgcmVtb3ZpbmcgdGhlbSwgYW5kIGl0ZXJhdGluZy4gVGhpcyBoYXMgYSBkaXJlY3QgaW1wYWN0IG9uIHJlYWNoYWJsZSBmaWxlc3lzdGVtIGxvZ2ljLCB0aGluZ3MgbGlrZSBkaXJlY3RvcnkgdHJhdmVyc2FsLCBmaWxlIGRlbGV0aW9uLCBhbmQgaGFuZGxpbmcgYXR0cmlidXRlcy4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gcHJpb3JpdGl6ZSBteSBmdXp6aW5nIGVmZm9ydHMgYXJvdW5kIHRoZXNlIGFyZWFzLlxuXG5CYXNlZCBvbiB0aGUgY29udGV4dCwgdGhlcmUncyBubyBuZWVkIHRvIGNvbnNpZGVyIGFueXRoaW5nIGJleW9uZCB0aGUgYEhGU1BMVVNfRlNgIGNvbmZpZyBmb3IgdGVzdGluZyBwdXJwb3Nlcy4gSXQgc2VlbXMgdGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGUgbG9naWMgb2YgdGhhdCBmaWxlc3lzdGVtLlxuXG5UaGUgc3BlY2lmaWMgZnVuY3Rpb25zIEknbGwgbmVlZCB0byBzY3J1dGluaXplIGFyZSBgaGZzX2JyZWNfcmVtb3ZlYCwgYGhmc19icmVjX2dvdG9gLCBhbmQgYF9faGZzX2JyZWNfZmluZGAuIFRoZXNlIGFyZSB0aGUga2V5IGVudHJ5IHBvaW50cyB3aGVyZSB0aGUgbmV3IGBudW1fcmVjc2AgdmFsaWRhdGlvbiBnZXRzIGV4ZXJjaXNlZC4gQW55IHRlc3QgY2FzZXMgZ2VuZXJhdGVkIHNob3VsZCBiZSBkZXNpZ25lZCB0byBpbnRlbnRpb25hbGx5IGNyZWF0ZSBtYWxmb3JtZWQgYi10cmVlIG5vZGVzLCBwdXNoaW5nIHRoZSB2YWxpZGF0aW9uIHRvIGl0cyBsaW1pdHMgYW5kIGVuc3VyaW5nIGl0IGNvcnJlY3RseSByZWplY3RzIHByb2JsZW1hdGljIHN0cnVjdHVyZXMgd2l0aG91dCBjYXVzaW5nIHBhbmljcyBvciByZWdyZXNzaW9ucy4gSSdtIGdvaW5nIHRvIHNldCB1cCBmdXp6aW5nIHRvIHRhcmdldCB0aGVzZSBzeW1ib2xzIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxNzEsIk91dHB1dFRva2VucyI6MTY3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDExOjA3OjE0LjM3NTg1NDgzNFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDQwOTc2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSEZTUExVU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhmc19icmVjX3JlbW92ZVwiLFxuICAgIFwiaGZzX2JyZWNfZ290b1wiLFxuICAgIFwiX19oZnNfYnJlY19maW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGZvciBgbnVtX3JlY3NgIGluIEhGUysgYi10cmVlIG5vZGVzIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3MgYW5kIG90aGVyIGlzc3Vlcy4gSXQgbW9kaWZpZXMgY29yZSBiLXRyZWUgb3BlcmF0aW9ucyBsaWtlIGZpbmRpbmcsIHJlbW92aW5nLCBhbmQgaXRlcmF0aW5nIG92ZXIgcmVjb3Jkcy4gVGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgYWZmZWN0IHJlYWNoYWJsZSBmaWxlc3lzdGVtIGxvZ2ljLCBwYXJ0aWN1bGFybHkgZHVyaW5nIGRpcmVjdG9yeSB0cmF2ZXJzYWwsIGZpbGUgZGVsZXRpb24sIGFuZCBhdHRyaWJ1dGUgb3BlcmF0aW9ucy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2Ugb3BlcmF0aW9ucyB0byBlbnN1cmUgdGhlIG5ldyB2YWxpZGF0aW9uIGxvZ2ljIGNvcnJlY3RseSBoYW5kbGVzIG1hbGZvcm1lZCBiLXRyZWUgbm9kZXMgd2l0aG91dCBjYXVzaW5nIHJlZ3Jlc3Npb25zIG9yIHBhbmljcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIRlNQTFVTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaGZzX2JyZWNfcmVtb3ZlXCIsXG4gICAgXCJoZnNfYnJlY19nb3RvXCIsXG4gICAgXCJfX2hmc19icmVjX2ZpbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gZm9yIGBudW1fcmVjc2AgaW4gSEZTKyBiLXRyZWUgbm9kZXMgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIGFjY2VzcyBhbmQgb3RoZXIgaXNzdWVzLiBJdCBtb2RpZmllcyBjb3JlIGItdHJlZSBvcGVyYXRpb25zIGxpa2UgZmluZGluZywgcmVtb3ZpbmcsIGFuZCBpdGVyYXRpbmcgb3ZlciByZWNvcmRzLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCBhZmZlY3QgcmVhY2hhYmxlIGZpbGVzeXN0ZW0gbG9naWMsIHBhcnRpY3VsYXJseSBkdXJpbmcgZGlyZWN0b3J5IHRyYXZlcnNhbCwgZmlsZSBkZWxldGlvbiwgYW5kIGF0dHJpYnV0ZSBvcGVyYXRpb25zLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBvcGVyYXRpb25zIHRvIGVuc3VyZSB0aGUgbmV3IHZhbGlkYXRpb24gbG9naWMgY29ycmVjdGx5IGhhbmRsZXMgbWFsZm9ybWVkIGItdHJlZSBub2RlcyB3aXRob3V0IGNhdXNpbmcgcmVncmVzc2lvbnMgb3IgcGFuaWNzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowglq4p[1] Phase: Succeeded StartedAt: 2026-07-01 11:09:29 +0000 UTC FinishedAt: 2026-07-01 11:09:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowglq4p[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-01 11:09:29 +0000 UTC FinishedAt: 2026-07-01 11:09:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowglq4p[2] Phase: Succeeded StartedAt: 2026-07-01 11:09:29 +0000 UTC FinishedAt: 2026-07-01 15:37:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowglq4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_brec_remove","hfs_brec_goto","__hfs_brec_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"c4ef3812-aac4-49ce-bf4e-f4ee56d60112","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-01 11:09:29 +0000 UTC FinishedAt: 2026-07-01 15:37:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_brec_remove","hfs_brec_goto","__hfs_brec_find"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"c4ef3812-aac4-49ce-bf4e-f4ee56d60112","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowglq4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_brec_remove","hfs_brec_goto","__hfs_brec_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"c4ef3812-aac4-49ce-bf4e-f4ee56d60112","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-01 11:09:29 +0000 UTC FinishedAt: 2026-07-01 11:10:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowglq4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_brec_remove","hfs_brec_goto","__hfs_brec_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"c4ef3812-aac4-49ce-bf4e-f4ee56d60112","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-01 11:09:29 +0000 UTC FinishedAt: 2026-07-01 11:10:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowglq4p/series-workflowglq4p-convert-artifact-3540033029/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowglq4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_brec_remove","hfs_brec_goto","__hfs_brec_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"c4ef3812-aac4-49ce-bf4e-f4ee56d60112","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-01 11:10:34 +0000 UTC FinishedAt: 2026-07-01 11:52:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowglq4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_brec_remove","hfs_brec_goto","__hfs_brec_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"c4ef3812-aac4-49ce-bf4e-f4ee56d60112","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-01 11:10:34 +0000 UTC FinishedAt: 2026-07-01 11:52:09 +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:*0f8a11b6-6b50-4f46-b6c1-476a96f22372,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-workflowglq4p/series-workflowglq4p-convert-artifact-3540033029/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": "aba66571-a9d1-4d5d-8f7e-004418b5b626", "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-workflowglq4p/series-workflowglq4p-build-action-3284097451/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowglq4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_brec_remove","hfs_brec_goto","__hfs_brec_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"c4ef3812-aac4-49ce-bf4e-f4ee56d60112","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-01 11:10:34 +0000 UTC FinishedAt: 2026-07-01 11:51:49 +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:*0f8a11b6-6b50-4f46-b6c1-476a96f22372,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-workflowglq4p/series-workflowglq4p-convert-artifact-3540033029/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": "aba66571-a9d1-4d5d-8f7e-004418b5b626", "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-workflowglq4p/series-workflowglq4p-build-action-3284097451/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowglq4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_brec_remove","hfs_brec_goto","__hfs_brec_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"c4ef3812-aac4-49ce-bf4e-f4ee56d60112","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-01 11:52:09 +0000 UTC FinishedAt: 2026-07-01 11:52:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowglq4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_brec_remove","hfs_brec_goto","__hfs_brec_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"c4ef3812-aac4-49ce-bf4e-f4ee56d60112","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-01 11:52:09 +0000 UTC FinishedAt: 2026-07-01 11:52:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowglq4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_brec_remove","hfs_brec_goto","__hfs_brec_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"c4ef3812-aac4-49ce-bf4e-f4ee56d60112","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-01 11:52:09 +0000 UTC FinishedAt: 2026-07-01 11:52:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowglq4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_brec_remove","hfs_brec_goto","__hfs_brec_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"c4ef3812-aac4-49ce-bf4e-f4ee56d60112","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-01 11:52:09 +0000 UTC FinishedAt: 2026-07-01 11:52:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"c4ef3812-aac4-49ce-bf4e-f4ee56d60112","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowglq4p/series-workflowglq4p-convert-artifact-1247173600/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowglq4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_brec_remove","hfs_brec_goto","__hfs_brec_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"c4ef3812-aac4-49ce-bf4e-f4ee56d60112","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-01 11:52:36 +0000 UTC FinishedAt: 2026-07-01 11:55:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowglq4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_brec_remove","hfs_brec_goto","__hfs_brec_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"c4ef3812-aac4-49ce-bf4e-f4ee56d60112","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-01 11:52:36 +0000 UTC FinishedAt: 2026-07-01 11:55:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*aba66571-a9d1-4d5d-8f7e-004418b5b626,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-workflowglq4p/series-workflowglq4p-build-action-3284097451/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-workflowglq4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_brec_remove","hfs_brec_goto","__hfs_brec_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"c4ef3812-aac4-49ce-bf4e-f4ee56d60112","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-01 11:55:12 +0000 UTC FinishedAt: 2026-07-01 11:55:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowglq4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_brec_remove","hfs_brec_goto","__hfs_brec_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"c4ef3812-aac4-49ce-bf4e-f4ee56d60112","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-01 11:55:12 +0000 UTC FinishedAt: 2026-07-01 11:55:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowglq4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_brec_remove","hfs_brec_goto","__hfs_brec_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"c4ef3812-aac4-49ce-bf4e-f4ee56d60112","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-01 11:55:12 +0000 UTC FinishedAt: 2026-07-01 12:30:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowglq4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_brec_remove","hfs_brec_goto","__hfs_brec_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"c4ef3812-aac4-49ce-bf4e-f4ee56d60112","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-01 11:55:12 +0000 UTC FinishedAt: 2026-07-01 12:30:54 +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:*0f8a11b6-6b50-4f46-b6c1-476a96f22372,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-workflowglq4p/series-workflowglq4p-convert-artifact-1247173600/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": "bc8824ac-86e1-4984-a5a9-baa34e750158", "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-workflowglq4p/series-workflowglq4p-build-action-2764621980/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowglq4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_brec_remove","hfs_brec_goto","__hfs_brec_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"c4ef3812-aac4-49ce-bf4e-f4ee56d60112","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-01 11:55:12 +0000 UTC FinishedAt: 2026-07-01 12:30:31 +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:*0f8a11b6-6b50-4f46-b6c1-476a96f22372,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-workflowglq4p/series-workflowglq4p-convert-artifact-1247173600/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": "bc8824ac-86e1-4984-a5a9-baa34e750158", "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-workflowglq4p/series-workflowglq4p-build-action-2764621980/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowglq4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_brec_remove","hfs_brec_goto","__hfs_brec_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"c4ef3812-aac4-49ce-bf4e-f4ee56d60112","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-01 12:30:54 +0000 UTC FinishedAt: 2026-07-01 12:30:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowglq4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_brec_remove","hfs_brec_goto","__hfs_brec_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"c4ef3812-aac4-49ce-bf4e-f4ee56d60112","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-01 12:30:54 +0000 UTC FinishedAt: 2026-07-01 12:30:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowglq4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_brec_remove","hfs_brec_goto","__hfs_brec_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"c4ef3812-aac4-49ce-bf4e-f4ee56d60112","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-01 12:30:54 +0000 UTC FinishedAt: 2026-07-01 12:33:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowglq4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_brec_remove","hfs_brec_goto","__hfs_brec_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"c4ef3812-aac4-49ce-bf4e-f4ee56d60112","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-01 12:30:54 +0000 UTC FinishedAt: 2026-07-01 12:33:09 +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:*bc8824ac-86e1-4984-a5a9-baa34e750158,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-workflowglq4p/series-workflowglq4p-build-action-2764621980/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-workflowglq4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_brec_remove","hfs_brec_goto","__hfs_brec_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"c4ef3812-aac4-49ce-bf4e-f4ee56d60112","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-01 12:33:20 +0000 UTC FinishedAt: 2026-07-01 15:37:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowglq4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_brec_remove","hfs_brec_goto","__hfs_brec_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"c4ef3812-aac4-49ce-bf4e-f4ee56d60112","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-01 12:33:20 +0000 UTC FinishedAt: 2026-07-01 15:37:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_brec_remove","hfs_brec_goto","__hfs_brec_find"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*aba66571-a9d1-4d5d-8f7e-004418b5b626,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bc8824ac-86e1-4984-a5a9-baa34e750158,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-workflowglq4p/series-workflowglq4p-build-action-3284097451/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-workflowglq4p/series-workflowglq4p-build-action-2764621980/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowglq4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_brec_remove","hfs_brec_goto","__hfs_brec_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"c4ef3812-aac4-49ce-bf4e-f4ee56d60112","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-01 12:33:20 +0000 UTC FinishedAt: 2026-07-01 12:33:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowglq4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_brec_remove","hfs_brec_goto","__hfs_brec_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"c4ef3812-aac4-49ce-bf4e-f4ee56d60112","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-01 12:33:20 +0000 UTC FinishedAt: 2026-07-01 12:33:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_brec_remove","hfs_brec_goto","__hfs_brec_find"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowglq4p/series-workflowglq4p-convert-artifact-232622393/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowglq4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_brec_remove","hfs_brec_goto","__hfs_brec_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"c4ef3812-aac4-49ce-bf4e-f4ee56d60112","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-01 12:33:20 +0000 UTC FinishedAt: 2026-07-01 12:33:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowglq4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_brec_remove","hfs_brec_goto","__hfs_brec_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"c4ef3812-aac4-49ce-bf4e-f4ee56d60112","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-01 12:33:20 +0000 UTC FinishedAt: 2026-07-01 12:33:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowglq4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_brec_remove","hfs_brec_goto","__hfs_brec_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"c4ef3812-aac4-49ce-bf4e-f4ee56d60112","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-01 12:33:20 +0000 UTC FinishedAt: 2026-07-01 12:33:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowglq4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_brec_remove","hfs_brec_goto","__hfs_brec_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"c4ef3812-aac4-49ce-bf4e-f4ee56d60112","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-01 12:33:57 +0000 UTC FinishedAt: 2026-07-01 15:37:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowglq4p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfs_brec_remove","hfs_brec_goto","__hfs_brec_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"665159e246749578d4e4bfe106ee3b74edcdab18","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"c4ef3812-aac4-49ce-bf4e-f4ee56d60112","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-01 12:33:57 +0000 UTC FinishedAt: 2026-07-01 15:37:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*aba66571-a9d1-4d5d-8f7e-004418b5b626,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bc8824ac-86e1-4984-a5a9-baa34e750158,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-workflowglq4p/series-workflowglq4p-build-action-3284097451/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-workflowglq4p/series-workflowglq4p-build-action-2764621980/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-workflowglq4p/series-workflowglq4p-convert-artifact-232622393/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,}