Name: series-workflow5zkdj Phase: Succeeded StartedAt: 2026-07-22 19:22:22 +0000 UTC FinishedAt: 2026-07-23 00:32:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zkdj[0] Phase: Succeeded StartedAt: 2026-07-22 19:22:22 +0000 UTC FinishedAt: 2026-07-22 19:43:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zkdj[0].run-triage Phase: Succeeded StartedAt: 2026-07-22 19:22:22 +0000 UTC FinishedAt: 2026-07-22 19:43:23 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OCFS2_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OCFS2_FS" ], "series_id": "eb3d038b-800d-4365-a6af-df28b6b634a3" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "ocfs2_acl_init_prepare", "ocfs2_init_acl", "ocfs2_calc_xattr_init", "ocfs2_init_security_and_acl", "ocfs2_xattr_set_handle" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE5OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09DRlMyX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b2NmczJfYWNsX2luaXRfcHJlcGFyZSYjMzQ7LAogICAgJiMzNDtvY2ZzMl9pbml0X2FjbCYjMzQ7LAogICAgJiMzNDtvY2ZzMl9jYWxjX3hhdHRyX2luaXQmIzM0OywKICAgICYjMzQ7b2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsJiMzNDssCiAgICAmIzM0O29jZnMyX3hhdHRyX3NldF9oYW5kbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIEFDTCBpbml0aWFsaXphdGlvbiBpbiBPQ0ZTMiwgaW50cm9kdWNpbmcgbmV3IGZ1bmN0aW9ucyBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAgYW5kIGBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlYCwgYW5kIG1vZGlmeWluZyBgb2NmczJfaW5pdF9hY2xgIGFuZCBgb2NmczJfY2FsY194YXR0cl9pbml0YC4gSXQgYWxzbyByZW1vdmVzIGEgbG9jayAoYGlwX3hhdHRyX3NlbWApIGZyb20gYG9jZnMyX3hhdHRyX3NldF9oYW5kbGVgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBmaWxlc3lzdGVtJiMzOTtzIGNvcmUgbG9naWMgYW5kIHhhdHRyIGhhbmRsaW5nLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzdGFuZGFyZCBmaWxlc3lzdGVtIG9wZXJhdGlvbnMgKGUuZy4sIG1rbm9kLCBta2Rpciwgc2V0eGF0dHIpLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBtb2RpZmllZCBmdW5jdGlvbnMgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyAoZHVlIHRvIHRoZSByZW1vdmVkIGxvY2spIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE5OjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjkwNmY2MzQ2MjRkMGZmYjA1Yjg1NDZlODRjMGE1NzI2ODE1NWMwNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDIyIDE5OjQyOjM0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FjbC5jIGIvZnMvb2NmczIvYWNsLmNcbmluZGV4IGFmMWUyY2VkYjIxN2YxLi4wOTBlYzYwZmI1NzZhNiAxMDA2NDRcbi0tLSBhL2ZzL29jZnMyL2FjbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9vY2ZzMi9hY2wuY1xuQEAgLTExMCw4ICYjNDM7MTEwLDcgQEAgc3RhdGljIHZvaWQgKm9jZnMyX2FjbF90b194YXR0cihjb25zdCBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIHNpemVfdCAqc2l6ZSlcbiBcdHJldHVybiBvY2ZzMl9hY2w7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9nZXRfYWNsX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdFx0XHQgICAgICBpbnQgdHlwZSxcbiYjNDM7c3RhdGljIHN0cnVjdCBwb3NpeF9hY2wgKm9jZnMyX2dldF9hY2xfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLFxuIFx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoKVxuIHtcbiBcdGludCBuYW1lX2luZGV4O1xuQEAgLTM0OSw2MyAmIzQzOzM0OCwxMDUgQEAgaW50IG9jZnMyX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuICAqIEluaXRpYWxpemUgdGhlIEFDTHMgb2YgYSBuZXcgaW5vZGUuIElmIHBhcmVudCBkaXJlY3RvcnkgaGFzIGRlZmF1bHQgQUNMLFxuICAqIHRoZW4gY2xvbmUgdG8gbmV3IGlub2RlLiBDYWxsZWQgZnJvbSBvY2ZzMl9ta25vZC5cbiAgKi9cbi1pbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSxcbi1cdFx0ICAgc3RydWN0IGlub2RlICppbm9kZSxcbi1cdFx0ICAgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsXG4tXHRcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLFxuLVx0XHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYyxcbi1cdFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMpXG4mIzQzO3ZvaWQgb2NmczJfYWNsX2luaXRfcmVsZWFzZShzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSlcbiYjNDM7e1xuJiM0MztcdHBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKTtcbiYjNDM7XHRwb3NpeF9hY2xfcmVsZWFzZShzdGF0ZS1cdTAwM2VhY2wpO1xuJiM0MztcdHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsID0gTlVMTDtcbiYjNDM7XHRzdGF0ZS1cdTAwM2VhY2wgPSBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgb2NmczJfYWNsX2luaXRfcHJlcGFyZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHRcdFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKVxuIHtcbiBcdHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4tXHRzdHJ1Y3QgcG9zaXhfYWNsICphY2wgPSBOVUxMO1xuLVx0aW50IHJldCA9IDAsIHJldDI7XG4tXHR1bW9kZV90IG1vZGU7XG4tXG4tXHRpZiAoIVNfSVNMTksoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuLVx0XHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbi1cdFx0XHRkb3duX3JlYWQoXHUwMDI2T0NGUzJfSShkaXIpLVx1MDAzZWlwX3hhdHRyX3NlbSk7XG4tXHRcdFx0YWNsID0gb2NmczJfZ2V0X2FjbF9ub2xvY2soZGlyLCBBQ0xfVFlQRV9ERUZBVUxULFxuLVx0XHRcdFx0XHRcdCAgIGRpcl9iaCk7XG4tXHRcdFx0dXBfcmVhZChcdTAwMjZPQ0ZTMl9JKGRpciktXHUwMDNlaXBfeGF0dHJfc2VtKTtcbi1cdFx0XHRpZiAoSVNfRVJSKGFjbCkpXG4tXHRcdFx0XHRyZXR1cm4gUFRSX0VSUihhY2wpO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCA9IE5VTEw7XG4mIzQzO1x0c3RhdGUtXHUwMDNlYWNsID0gTlVMTDtcbiYjNDM7XHRzdGF0ZS1cdTAwM2Vtb2RlID0gaW5vZGUtXHUwMDNlaV9tb2RlO1xuJiM0MztcbiYjNDM7XHRpZiAoU19JU0xOSyhpbm9kZS1cdTAwM2VpX21vZGUpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuJiM0MztcdFx0ZG93bl9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuJiM0MztcdFx0c3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wgPVxuJiM0MztcdFx0XHRvY2ZzMl9nZXRfYWNsX25vbG9jayhkaXIsIEFDTF9UWVBFX0RFRkFVTFQsIGRpcl9iaCk7XG4mIzQzO1x0XHR1cF9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuJiM0MztcdFx0aWYgKElTX0VSUihzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCkpIHtcbiYjNDM7XHRcdFx0cmV0ID0gUFRSX0VSUihzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCk7XG4mIzQzO1x0XHRcdHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsID0gTlVMTDtcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0fVxuLVx0XHRpZiAoIWFjbCkge1xuLVx0XHRcdG1vZGUgPSBpbm9kZS1cdTAwM2VpX21vZGUgXHUwMDI2IH5jdXJyZW50X3VtYXNrKCk7XG4tXHRcdFx0cmV0ID0gb2NmczJfYWNsX3NldF9tb2RlKGlub2RlLCBkaV9iaCwgaGFuZGxlLCBtb2RlKTtcbi1cdFx0XHRpZiAocmV0KSB7XG4tXHRcdFx0XHRtbG9nX2Vycm5vKHJldCk7XG4mIzQzO1x0XHRpZiAoc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wpIHtcbiYjNDM7XHRcdFx0c3RhdGUtXHUwMDNlYWNsID0gcG9zaXhfYWNsX2R1cChzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCk7XG4mIzQzO1x0XHRcdGlmICghc3RhdGUtXHUwMDNlYWNsKSB7XG4mIzQzO1x0XHRcdFx0cmV0ID0gLUVOT01FTTtcbiBcdFx0XHRcdGdvdG8gY2xlYW51cDtcbiBcdFx0XHR9XG4mIzQzO1x0XHRcdHJldCA9IF9fcG9zaXhfYWNsX2NyZWF0ZShcdTAwMjZzdGF0ZS1cdTAwM2VhY2wsIEdGUF9OT0ZTLFxuJiM0MztcdFx0XHRcdFx0XHQgXHUwMDI2c3RhdGUtXHUwMDNlbW9kZSk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdFx0XHRpZiAocmV0ID09IDApIHtcbiYjNDM7XHRcdFx0XHRwb3NpeF9hY2xfcmVsZWFzZShzdGF0ZS1cdTAwM2VhY2wpO1xuJiM0MztcdFx0XHRcdHN0YXRlLVx1MDAzZWFjbCA9IE5VTEw7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0aWYgKCFTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbiYjNDM7XHRcdFx0XHRwb3NpeF9hY2xfcmVsZWFzZShzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCk7XG4mIzQzO1x0XHRcdFx0c3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wgPSBOVUxMO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRzdGF0ZS1cdTAwM2Vtb2RlIFx1MDAyNj0gfmN1cnJlbnRfdW1hc2soKTtcbiBcdFx0fVxuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRzdGF0ZS1cdTAwM2Vtb2RlIFx1MDAyNj0gfmN1cnJlbnRfdW1hc2soKTtcbiBcdH1cbi1cdGlmICgob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIFx1MDAyNlx1MDAyNiBhY2wpIHtcbi1cdFx0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7Y2xlYW51cDpcbiYjNDM7XHRvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKHN0YXRlKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiYjNDM7XHRcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsXG4mIzQzO1x0XHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYyxcbiYjNDM7XHRcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjLFxuJiM0MztcdFx0ICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoU19JU0xOSyhpbm9kZS1cdTAwM2VpX21vZGUpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuJiM0MztcdFx0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSBcdTAwMjZcdTAwMjYgc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wpIHtcbiBcdFx0XHRyZXQgPSBvY2ZzMl9zZXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpX2JoLFxuLVx0XHRcdFx0XHQgICAgQUNMX1RZUEVfREVGQVVMVCwgYWNsLFxuLVx0XHRcdFx0XHQgICAgbWV0YV9hYywgZGF0YV9hYyk7XG4mIzQzO1x0XHRcdFx0XHQgICAgQUNMX1RZUEVfREVGQVVMVCxcbiYjNDM7XHRcdFx0XHRcdCAgICBzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCwgbWV0YV9hYyxcbiYjNDM7XHRcdFx0XHRcdCAgICBkYXRhX2FjKTtcbiBcdFx0XHRpZiAocmV0KVxuLVx0XHRcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdH1cbi1cdFx0bW9kZSA9IGlub2RlLVx1MDAzZWlfbW9kZTtcbi1cdFx0cmV0ID0gX19wb3NpeF9hY2xfY3JlYXRlKFx1MDAyNmFjbCwgR0ZQX05PRlMsIFx1MDAyNm1vZGUpO1xuLVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuIFxuLVx0XHRyZXQyID0gb2NmczJfYWNsX3NldF9tb2RlKGlub2RlLCBkaV9iaCwgaGFuZGxlLCBtb2RlKTtcbi1cdFx0aWYgKHJldDIpIHtcbi1cdFx0XHRtbG9nX2Vycm5vKHJldDIpO1xuLVx0XHRcdHJldCA9IHJldDI7XG4tXHRcdFx0Z290byBjbGVhbnVwO1xuLVx0XHR9XG4tXHRcdGlmIChyZXQgXHUwMDNlIDApIHtcbi1cdFx0XHRyZXQgPSBvY2ZzMl9zZXRfYWNsKGhhbmRsZSwgaW5vZGUsXG4tXHRcdFx0XHRcdCAgICBkaV9iaCwgQUNMX1RZUEVfQUNDRVNTLFxuLVx0XHRcdFx0XHQgICAgYWNsLCBtZXRhX2FjLCBkYXRhX2FjKTtcbiYjNDM7XHRyZXQgPSBvY2ZzMl9hY2xfc2V0X21vZGUoaW5vZGUsIGRpX2JoLCBoYW5kbGUsIHN0YXRlLVx1MDAzZW1vZGUpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdG1sb2dfZXJybm8ocmV0KTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbiYjNDM7XHRcdGlmIChzdGF0ZS1cdTAwM2VhY2wpIHtcbiYjNDM7XHRcdFx0cmV0ID0gb2NmczJfc2V0X2FjbChoYW5kbGUsIGlub2RlLCBkaV9iaCxcbiYjNDM7XHRcdFx0XHRcdCAgICBBQ0xfVFlQRV9BQ0NFU1MsIHN0YXRlLVx1MDAzZWFjbCxcbiYjNDM7XHRcdFx0XHRcdCAgICBtZXRhX2FjLCBkYXRhX2FjKTtcbiBcdFx0fVxuIFx0fVxuLWNsZWFudXA6XG4tXHRwb3NpeF9hY2xfcmVsZWFzZShhY2wpO1xuJiM0MztcbiBcdHJldHVybiByZXQ7XG4gfVxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FjbC5oIGIvZnMvb2NmczIvYWNsLmhcbmluZGV4IDY2N2M2ZjAzZmE2MDZmLi5hOTFmOWNlMjc4ZDZkMyAxMDA2NDRcbi0tLSBhL2ZzL29jZnMyL2FjbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9vY2ZzMi9hY2wuaFxuQEAgLTIwLDkgJiM0MzsyMCwyMCBAQCBzdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9pb3BfZ2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgYm9vbCByY3UpO1xuIGludCBvY2ZzMl9pb3Bfc2V0X2FjbChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0XHQgICAgICBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIGludCB0eXBlKTtcbiBleHRlcm4gaW50IG9jZnMyX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICopO1xuLWV4dGVybiBpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBpbm9kZSAqLFxuLVx0XHRcdCAgc3RydWN0IGJ1ZmZlcl9oZWFkICosIHN0cnVjdCBidWZmZXJfaGVhZCAqLFxuLVx0XHRcdCAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKixcbi1cdFx0XHQgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICopO1xuJiM0MztzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlIHtcbiYjNDM7XHRzdHJ1Y3QgcG9zaXhfYWNsICpkZWZhdWx0X2FjbDtcbiYjNDM7XHRzdHJ1Y3QgcG9zaXhfYWNsICphY2w7XG4mIzQzO1x0dW1vZGVfdCBtb2RlO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7aW50IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLFxuJiM0MztcdFx0XHQgICBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSk7XG4mIzQzO3ZvaWQgb2NmczJfYWNsX2luaXRfcmVsZWFzZShzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSk7XG4mIzQzO2ludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiM0MztcdFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCxcbiYjNDM7XHRcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLFxuJiM0MztcdFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMsXG4mIzQzO1x0XHQgICBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSk7XG4gXG4gI2VuZGlmIC8qIE9DRlMyX0FDTF9IICovXG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvbmFtZWkuYyBiL2ZzL29jZnMyL25hbWVpLmNcbmluZGV4IDEyNzc2NjZjNzdjZDJkLi5kOWFiYTE2YThmMjhhNyAxMDA2NDRcbi0tLSBhL2ZzL29jZnMyL25hbWVpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL25hbWVpLmNcbkBAIC0yNTYsNiAmIzQzOzI1Niw3IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRzaWdzZXRfdCBvbGRzZXQ7XG4gXHRpbnQgZGlkX2Jsb2NrX3NpZ25hbHMgPSAwO1xuIFx0c3RydWN0IG9jZnMyX2RlbnRyeV9sb2NrICpkbCA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IG9jZnMyX2FjbF9zdGF0ZSBhY2xfc3RhdGUgPSB7IDAgfTtcbiBcbiBcdHRyYWNlX29jZnMyX21rbm9kKGRpciwgZGVudHJ5LCBkZW50cnktXHUwMDNlZF9uYW1lLmxlbiwgZGVudHJ5LVx1MDAzZWRfbmFtZS5uYW1lLFxuIFx0XHRcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGRpciktXHUwMDNlaXBfYmxrbm8sXG5AQCAtMzMwLDEwICYjNDM7MzMxLDEzIEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdH1cbiBcdH1cbiBcbiYjNDM7XHRzdGF0dXMgPSBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKGlub2RlLCBkaXIsIHBhcmVudF9mZV9iaCwgXHUwMDI2YWNsX3N0YXRlKTtcbiYjNDM7XHRpZiAoc3RhdHVzIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBsZWF2ZTtcbiYjNDM7XG4gXHQvKiBjYWxjdWxhdGUgbWV0YSBkYXRhL2NsdXN0ZXJzIGZvciBzZXR0aW5nIHNlY3VyaXR5IGFuZCBhY2wgeGF0dHIgKi9cbi1cdHN0YXR1cyA9IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChkaXIsIHBhcmVudF9mZV9iaCwgbW9kZSxcbi1cdFx0XHRcdCAgICAgICBcdTAwMjZzaSwgXHUwMDI2d2FudF9jbHVzdGVycyxcbi1cdFx0XHRcdCAgICAgICBcdTAwMjZ4YXR0cl9jcmVkaXRzLCBcdTAwMjZ3YW50X21ldGEpO1xuJiM0MztcdHN0YXR1cyA9IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChkaXIsIG1vZGUsIFx1MDAyNnNpLCBcdTAwMjZ3YW50X2NsdXN0ZXJzLFxuJiM0MztcdFx0XHRcdCAgICAgICBcdTAwMjZ4YXR0cl9jcmVkaXRzLCBcdTAwMjZ3YW50X21ldGEsIFx1MDAyNmFjbF9zdGF0ZSk7XG4gXHRpZiAoc3RhdHVzIFx1MDAzYyAwKSB7XG4gXHRcdG1sb2dfZXJybm8oc3RhdHVzKTtcbiBcdFx0Z290byBsZWF2ZTtcbkBAIC00MTEsOCAmIzQzOzQxNSw4IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdGluY19ubGluayhkaXIpO1xuIFx0fVxuIFxuLVx0c3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgZGlyLCBuZXdfZmVfYmgsIHBhcmVudF9mZV9iaCxcbi1cdFx0XHQgbWV0YV9hYywgZGF0YV9hYyk7XG4mIzQzO1x0c3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgbmV3X2ZlX2JoLCBtZXRhX2FjLCBkYXRhX2FjLFxuJiM0MztcdFx0XHRcdFx1MDAyNmFjbF9zdGF0ZSk7XG4gXG4gXHRpZiAoc3RhdHVzIFx1MDAzYyAwKSB7XG4gXHRcdG1sb2dfZXJybm8oc3RhdHVzKTtcbkBAIC00NzcsNiAmIzQzOzQ4MSw4IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRicmVsc2UocGFyZW50X2ZlX2JoKTtcbiBcdGtmcmVlKHNpLnZhbHVlKTtcbiBcbiYjNDM7XHRvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKFx1MDAyNmFjbF9zdGF0ZSk7XG4mIzQzO1xuIFx0b2NmczJfZnJlZV9kaXJfbG9va3VwX3Jlc3VsdChcdTAwMjZsb29rdXApO1xuIFxuIFx0aWYgKGlub2RlX2FjKVxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3hhdHRyLmMgYi9mcy9vY2ZzMi94YXR0ci5jXG5pbmRleCBmY2RkZDNjMTNhY2RkZC4uNGNmNWI2OWQxM2IwOTUgMTAwNjQ0XG4tLS0gYS9mcy9vY2ZzMi94YXR0ci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9vY2ZzMi94YXR0ci5jXG5AQCAtNjExLDEzICYjNDM7NjExLDEwIEBAIGludCBvY2ZzMl9jYWxjX3NlY3VyaXR5X2luaXQoc3RydWN0IGlub2RlICpkaXIsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1pbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdCAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsXG4tXHRcdFx0ICB1bW9kZV90IG1vZGUsXG4mIzQzO2ludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSxcbiBcdFx0XHQgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICpzaSxcbi1cdFx0XHQgIGludCAqd2FudF9jbHVzdGVycyxcbi1cdFx0XHQgIGludCAqeGF0dHJfY3JlZGl0cyxcbi1cdFx0XHQgIGludCAqd2FudF9tZXRhKVxuJiM0MztcdFx0XHQgIGludCAqd2FudF9jbHVzdGVycywgaW50ICp4YXR0cl9jcmVkaXRzLFxuJiM0MztcdFx0XHQgIGludCAqd2FudF9tZXRhLCBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICphY2xfc3RhdGUpXG4ge1xuIFx0aW50IHJldCA9IDA7XG4gXHRzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGRpci1cdTAwM2VpX3NiKTtcbkBAIC02MjgsMTkgJiM0Mzs2MjUsMTUgQEAgaW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRcdFx0XHQgICAgIHNpLVx1MDAzZXZhbHVlX2xlbik7XG4gXG4gXHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbi1cdFx0ZG93bl9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuLVx0XHRhY2xfbGVuID0gb2NmczJfeGF0dHJfZ2V0X25vbG9jayhkaXIsIGRpcl9iaCxcbi1cdFx0XHRcdFx0T0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFQsXG4tXHRcdFx0XHRcdFwmIzM0O1wmIzM0OywgTlVMTCwgMCk7XG4tXHRcdHVwX3JlYWQoXHUwMDI2T0NGUzJfSShkaXIpLVx1MDAzZWlwX3hhdHRyX3NlbSk7XG4tXHRcdGlmIChhY2xfbGVuIFx1MDAzZSAwKSB7XG4tXHRcdFx0YV9zaXplID0gb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKDAsIGFjbF9sZW4pO1xuLVx0XHRcdGlmIChTX0lTRElSKG1vZGUpKVxuLVx0XHRcdFx0YV9zaXplIFx1MDAzY1x1MDAzYz0gMTtcbi1cdFx0fSBlbHNlIGlmIChhY2xfbGVuICE9IDAgXHUwMDI2XHUwMDI2IGFjbF9sZW4gIT0gLUVOT0RBVEEpIHtcbi1cdFx0XHRyZXQgPSBhY2xfbGVuO1xuLVx0XHRcdG1sb2dfZXJybm8ocmV0KTtcbi1cdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0aWYgKGFjbF9zdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCBcdTAwMjZcdTAwMjYgU19JU0RJUihtb2RlKSkge1xuJiM0MztcdFx0XHRhY2xfbGVuID0gYWNsX3N0YXRlLVx1MDAzZWRlZmF1bHRfYWNsLVx1MDAzZWFfY291bnQgKlxuJiM0MztcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xuJiM0MztcdFx0XHRhX3NpemUgJiM0Mzs9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmIChhY2xfc3RhdGUtXHUwMDNlYWNsKSB7XG4mIzQzO1x0XHRcdGFjbF9sZW4gPSBhY2xfc3RhdGUtXHUwMDNlYWNsLVx1MDAzZWFfY291bnQgKlxuJiM0MztcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xuJiM0MztcdFx0XHRhX3NpemUgJiM0Mzs9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTtcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTY4MywxNCAmIzQzOzY3NiwyOSBAQCBpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdFx0XHRcdFx0ICAgbmV3X2NsdXN0ZXJzKTtcbiBcdFx0KndhbnRfY2x1c3RlcnMgJiM0Mzs9IG5ld19jbHVzdGVycztcbiBcdH1cbi1cdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCBcdTAwMjZcdTAwMjZcbi1cdCAgICBhY2xfbGVuIFx1MDAzZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkge1xuLVx0XHQvKiBmb3IgZGlyZWN0b3J5LCBpdCBoYXMgREVGQVVMVCBhbmQgQUNDRVNTIHR3byB0eXBlcyBvZiBhY2xzICovXG4tXHRcdG5ld19jbHVzdGVycyA9IChTX0lTRElSKG1vZGUpID8gMiA6IDEpICpcbi1cdFx0XHRcdG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhkaXItXHUwMDNlaV9zYiwgYWNsX2xlbik7XG4tXHRcdCp4YXR0cl9jcmVkaXRzICYjNDM7PSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoZGlyLVx1MDAzZWlfc2IsXG4tXHRcdFx0XHRcdFx0XHQgICBuZXdfY2x1c3RlcnMpO1xuLVx0XHQqd2FudF9jbHVzdGVycyAmIzQzOz0gbmV3X2NsdXN0ZXJzO1xuJiM0MztcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuJiM0MztcdFx0aWYgKGFjbF9zdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCBcdTAwMjZcdTAwMjYgU19JU0RJUihtb2RlKSkge1xuJiM0MztcdFx0XHRhY2xfbGVuID0gYWNsX3N0YXRlLVx1MDAzZWRlZmF1bHRfYWNsLVx1MDAzZWFfY291bnQgKlxuJiM0MztcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xuJiM0MztcdFx0XHRpZiAoYWNsX2xlbiBcdTAwM2UgT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpIHtcbiYjNDM7XHRcdFx0XHRuZXdfY2x1c3RlcnMgPSBvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoZGlyLVx1MDAzZWlfc2IsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRcdGFjbF9sZW4pO1xuJiM0MztcdFx0XHRcdCp4YXR0cl9jcmVkaXRzICYjNDM7PSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoZGlyLVx1MDAzZWlfc2IsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRcdCAgIG5ld19jbHVzdGVycyk7XG4mIzQzO1x0XHRcdFx0KndhbnRfY2x1c3RlcnMgJiM0Mzs9IG5ld19jbHVzdGVycztcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdFx0aWYgKGFjbF9zdGF0ZS1cdTAwM2VhY2wpIHtcbiYjNDM7XHRcdFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cdTAwM2VhY2wtXHUwMDNlYV9jb3VudCAqXG4mIzQzO1x0XHRcdFx0ICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7XG4mIzQzO1x0XHRcdGlmIChhY2xfbGVuIFx1MDAzZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkge1xuJiM0MztcdFx0XHRcdG5ld19jbHVzdGVycyA9IG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhkaXItXHUwMDNlaV9zYixcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdFx0YWNsX2xlbik7XG4mIzQzO1x0XHRcdFx0KnhhdHRyX2NyZWRpdHMgJiM0Mzs9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhkaXItXHUwMDNlaV9zYixcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdFx0ICAgbmV3X2NsdXN0ZXJzKTtcbiYjNDM7XHRcdFx0XHQqd2FudF9jbHVzdGVycyAmIzQzOz0gbmV3X2NsdXN0ZXJzO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHRyZXR1cm4gcmV0O1xuQEAgLTM1NDIsOCAmIzQzOzM1NTAsNiBAQCBpbnQgb2NmczJfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGVfdCAqaGFuZGxlLFxuIFx0eGlzLmlub2RlX2JoID0geGJzLmlub2RlX2JoID0gZGlfYmg7XG4gXHRkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopZGlfYmgtXHUwMDNlYl9kYXRhO1xuIFxuLVx0ZG93bl93cml0ZShcdTAwMjZPQ0ZTMl9JKGlub2RlKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuLVxuIFx0cmV0ID0gb2NmczJfeGF0dHJfaWJvZHlfZmluZChpbm9kZSwgbmFtZV9pbmRleCwgbmFtZSwgXHUwMDI2eGlzKTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gY2xlYW51cDtcbkBAIC0zNTU2LDcgJiM0MzszNTYyLDYgQEAgaW50IG9jZnMyX3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSxcbiBcdHJldCA9IF9fb2NmczJfeGF0dHJfc2V0X2hhbmRsZShpbm9kZSwgZGksIFx1MDAyNnhpLCBcdTAwMjZ4aXMsIFx1MDAyNnhicywgXHUwMDI2Y3R4dCk7XG4gXG4gY2xlYW51cDpcbi1cdHVwX3dyaXRlKFx1MDAyNk9DRlMyX0koaW5vZGUpLVx1MDAzZWlwX3hhdHRyX3NlbSk7XG4gXHRicmVsc2UoeGJzLnhhdHRyX2JoKTtcbiBcdG9jZnMyX3hhdHRyX2J1Y2tldF9mcmVlKHhicy5idWNrZXQpO1xuIFxuQEAgLTcyNTcsNiAmIzQzOzcyNjIsNyBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLFxuIHtcbiBcdGludCByZXQgPSAwO1xuIFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmggPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgYWNsX3N0YXRlID0geyAwIH07XG4gXG4gXHRyZXQgPSBvY2ZzMl9pbml0X3NlY3VyaXR5X2dldChpbm9kZSwgZGlyLCBxc3RyLCBOVUxMKTtcbiBcdGlmIChyZXQpIHtcbkBAIC03MjY5LDEwICYjNDM7NzI3NSwxNyBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRtbG9nX2Vycm5vKHJldCk7XG4gXHRcdGdvdG8gbGVhdmU7XG4gXHR9XG4tXHRyZXQgPSBvY2ZzMl9pbml0X2FjbChOVUxMLCBpbm9kZSwgZGlyLCBOVUxMLCBkaXJfYmgsIE5VTEwsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKGlub2RlLCBkaXIsIGRpcl9iaCwgXHUwMDI2YWNsX3N0YXRlKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byB1bmxvY2s7XG4mIzQzO1xuJiM0MztcdHJldCA9IG9jZnMyX2luaXRfYWNsKE5VTEwsIGlub2RlLCBOVUxMLCBOVUxMLCBOVUxMLCBcdTAwMjZhY2xfc3RhdGUpO1xuIFx0aWYgKHJldClcbiBcdFx0bWxvZ19lcnJubyhyZXQpO1xuIFxuJiM0Mzt1bmxvY2s6XG4mIzQzO1x0b2NmczJfYWNsX2luaXRfcmVsZWFzZShcdTAwMjZhY2xfc3RhdGUpO1xuIFx0b2NmczJfaW5vZGVfdW5sb2NrKGRpciwgMCk7XG4gXHRicmVsc2UoZGlyX2JoKTtcbiBsZWF2ZTpcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5oIGIvZnMvb2NmczIveGF0dHIuaFxuaW5kZXggNjVlOWFhNzQzOTE5OWUuLjVjZGQ2YzZiNDAwNjRiIDEwMDY0NFxuLS0tIGEvZnMvb2NmczIveGF0dHIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIveGF0dHIuaFxuQEAgLTU1LDkgJiM0Mzs1NSwxMiBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9zZXQoaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICosXG4gaW50IG9jZnMyX2NhbGNfc2VjdXJpdHlfaW5pdChzdHJ1Y3QgaW5vZGUgKixcbiBcdFx0XHQgICAgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICosXG4gXHRcdFx0ICAgICBpbnQgKiwgaW50ICosIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICoqKTtcbi1pbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKixcbi1cdFx0XHQgIHVtb2RlX3QsIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICosXG4tXHRcdFx0ICBpbnQgKiwgaW50ICosIGludCAqKTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBvY2ZzMl9hY2xfc3RhdGU7XG4mIzQzO2ludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSxcbiYjNDM7XHRcdFx0ICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqc2ksXG4mIzQzO1x0XHRcdCAgaW50ICp3YW50X2NsdXN0ZXJzLCBpbnQgKnhhdHRyX2NyZWRpdHMsXG4mIzQzO1x0XHRcdCAgaW50ICp3YW50X21ldGEsIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKmFjbF9zdGF0ZSk7XG4gXG4gLypcbiAgKiB4YXR0cnMgY2FuIGxpdmUgaW5zaWRlIGFuIGlub2RlLCBhcyBwYXJ0IG9mIGFuIGV4dGVybmFsIHhhdHRyIGJsb2NrLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE5OjQyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPQ0ZTMl9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O29jZnMyX2FjbF9pbml0X3ByZXBhcmUmIzM0OywKICAgICYjMzQ7b2NmczJfaW5pdF9hY2wmIzM0OywKICAgICYjMzQ7b2NmczJfY2FsY194YXR0cl9pbml0JiMzNDssCiAgICAmIzM0O29jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbCYjMzQ7LAogICAgJiMzNDtvY2ZzMl94YXR0cl9zZXRfaGFuZGxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBBQ0wgaW5pdGlhbGl6YXRpb24gaW4gT0NGUzIsIGludHJvZHVjaW5nIG5ldyBmdW5jdGlvbnMgYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgIGFuZCBgb2NmczJfYWNsX2luaXRfcmVsZWFzZWAsIGFuZCBtb2RpZnlpbmcgYG9jZnMyX2luaXRfYWNsYCBhbmQgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAuIEl0IGFsc28gcmVtb3ZlcyBhIGxvY2sgKGBpcF94YXR0cl9zZW1gKSBmcm9tIGBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZmlsZXN5c3RlbSYjMzk7cyBjb3JlIGxvZ2ljIGFuZCB4YXR0ciBoYW5kbGluZywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3RhbmRhcmQgZmlsZXN5c3RlbSBvcGVyYXRpb25zIChlLmcuLCBta25vZCwgbWtkaXIsIHNldHhhdHRyKS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgbW9kaWZpZWQgZnVuY3Rpb25zIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBjb25jdXJyZW5jeSBpc3N1ZXMgKGR1ZSB0byB0aGUgcmVtb3ZlZCBsb2NrKSBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjkwNmY2MzQ2MjRkMGZmYjA1Yjg1NDZlODRjMGE1NzI2ODE1NWMwNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDIyIDE5OjQyOjM0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvYWNsLmMgYi9mcy9vY2ZzMi9hY2wuYwppbmRleCBhZjFlMmNlZGIyMTdmMS4uMDkwZWM2MGZiNTc2YTYgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2FjbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL2FjbC5jCkBAIC0xMTAsOCAmIzQzOzExMCw3IEBAIHN0YXRpYyB2b2lkICpvY2ZzMl9hY2xfdG9feGF0dHIoY29uc3Qgc3RydWN0IHBvc2l4X2FjbCAqYWNsLCBzaXplX3QgKnNpemUpCiAJcmV0dXJuIG9jZnMyX2FjbDsKIH0KIAotc3RhdGljIHN0cnVjdCBwb3NpeF9hY2wgKm9jZnMyX2dldF9hY2xfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJCSAgICAgIGludCB0eXBlLAomIzQzO3N0YXRpYyBzdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9nZXRfYWNsX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwKIAkJCQkJICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCkKIHsKIAlpbnQgbmFtZV9pbmRleDsKQEAgLTM0OSw2MyAmIzQzOzM0OCwxMDUgQEAgaW50IG9jZnMyX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQogICogSW5pdGlhbGl6ZSB0aGUgQUNMcyBvZiBhIG5ldyBpbm9kZS4gSWYgcGFyZW50IGRpcmVjdG9yeSBoYXMgZGVmYXVsdCBBQ0wsCiAgKiB0aGVuIGNsb25lIHRvIG5ldyBpbm9kZS4gQ2FsbGVkIGZyb20gb2NmczJfbWtub2QuCiAgKi8KLWludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqaGFuZGxlLAotCQkgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkgICBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCwKLQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsCi0JCSAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLAotCQkgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYykKJiM0Mzt2b2lkIG9jZnMyX2FjbF9pbml0X3JlbGVhc2Uoc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpCiYjNDM7ewomIzQzOwlwb3NpeF9hY2xfcmVsZWFzZShzdGF0ZS0mZ3Q7ZGVmYXVsdF9hY2wpOwomIzQzOwlwb3NpeF9hY2xfcmVsZWFzZShzdGF0ZS0mZ3Q7YWNsKTsKJiM0MzsJc3RhdGUtJmd0O2RlZmF1bHRfYWNsID0gTlVMTDsKJiM0MzsJc3RhdGUtJmd0O2FjbCA9IE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO2ludCBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLAomIzQzOwkJCSAgIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKQogewogCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtJmd0O2lfc2IpOwotCXN0cnVjdCBwb3NpeF9hY2wgKmFjbCA9IE5VTEw7Ci0JaW50IHJldCA9IDAsIHJldDI7Ci0JdW1vZGVfdCBtb2RlOwotCi0JaWYgKCFTX0lTTE5LKGlub2RlLSZndDtpX21vZGUpKSB7Ci0JCWlmIChvc2ItJmd0O3NfbW91bnRfb3B0ICZhbXA7IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkgewotCQkJZG93bl9yZWFkKCZhbXA7T0NGUzJfSShkaXIpLSZndDtpcF94YXR0cl9zZW0pOwotCQkJYWNsID0gb2NmczJfZ2V0X2FjbF9ub2xvY2soZGlyLCBBQ0xfVFlQRV9ERUZBVUxULAotCQkJCQkJICAgZGlyX2JoKTsKLQkJCXVwX3JlYWQoJmFtcDtPQ0ZTMl9JKGRpciktJmd0O2lwX3hhdHRyX3NlbSk7Ci0JCQlpZiAoSVNfRVJSKGFjbCkpCi0JCQkJcmV0dXJuIFBUUl9FUlIoYWNsKTsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CXN0YXRlLSZndDtkZWZhdWx0X2FjbCA9IE5VTEw7CiYjNDM7CXN0YXRlLSZndDthY2wgPSBOVUxMOwomIzQzOwlzdGF0ZS0mZ3Q7bW9kZSA9IGlub2RlLSZndDtpX21vZGU7CiYjNDM7CiYjNDM7CWlmIChTX0lTTE5LKGlub2RlLSZndDtpX21vZGUpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChvc2ItJmd0O3NfbW91bnRfb3B0ICZhbXA7IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkgewomIzQzOwkJZG93bl9yZWFkKCZhbXA7T0NGUzJfSShkaXIpLSZndDtpcF94YXR0cl9zZW0pOwomIzQzOwkJc3RhdGUtJmd0O2RlZmF1bHRfYWNsID0KJiM0MzsJCQlvY2ZzMl9nZXRfYWNsX25vbG9jayhkaXIsIEFDTF9UWVBFX0RFRkFVTFQsIGRpcl9iaCk7CiYjNDM7CQl1cF9yZWFkKCZhbXA7T0NGUzJfSShkaXIpLSZndDtpcF94YXR0cl9zZW0pOwomIzQzOwkJaWYgKElTX0VSUihzdGF0ZS0mZ3Q7ZGVmYXVsdF9hY2wpKSB7CiYjNDM7CQkJcmV0ID0gUFRSX0VSUihzdGF0ZS0mZ3Q7ZGVmYXVsdF9hY2wpOwomIzQzOwkJCXN0YXRlLSZndDtkZWZhdWx0X2FjbCA9IE5VTEw7CiYjNDM7CQkJcmV0dXJuIHJldDsKIAkJfQotCQlpZiAoIWFjbCkgewotCQkJbW9kZSA9IGlub2RlLSZndDtpX21vZGUgJmFtcDsgfmN1cnJlbnRfdW1hc2soKTsKLQkJCXJldCA9IG9jZnMyX2FjbF9zZXRfbW9kZShpbm9kZSwgZGlfYmgsIGhhbmRsZSwgbW9kZSk7Ci0JCQlpZiAocmV0KSB7Ci0JCQkJbWxvZ19lcnJubyhyZXQpOwomIzQzOwkJaWYgKHN0YXRlLSZndDtkZWZhdWx0X2FjbCkgewomIzQzOwkJCXN0YXRlLSZndDthY2wgPSBwb3NpeF9hY2xfZHVwKHN0YXRlLSZndDtkZWZhdWx0X2FjbCk7CiYjNDM7CQkJaWYgKCFzdGF0ZS0mZ3Q7YWNsKSB7CiYjNDM7CQkJCXJldCA9IC1FTk9NRU07CiAJCQkJZ290byBjbGVhbnVwOwogCQkJfQomIzQzOwkJCXJldCA9IF9fcG9zaXhfYWNsX2NyZWF0ZSgmYW1wO3N0YXRlLSZndDthY2wsIEdGUF9OT0ZTLAomIzQzOwkJCQkJCSAmYW1wO3N0YXRlLSZndDttb2RlKTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBjbGVhbnVwOwomIzQzOwkJCWlmIChyZXQgPT0gMCkgewomIzQzOwkJCQlwb3NpeF9hY2xfcmVsZWFzZShzdGF0ZS0mZ3Q7YWNsKTsKJiM0MzsJCQkJc3RhdGUtJmd0O2FjbCA9IE5VTEw7CiYjNDM7CQkJfQomIzQzOwkJCWlmICghU19JU0RJUihpbm9kZS0mZ3Q7aV9tb2RlKSkgewomIzQzOwkJCQlwb3NpeF9hY2xfcmVsZWFzZShzdGF0ZS0mZ3Q7ZGVmYXVsdF9hY2wpOwomIzQzOwkJCQlzdGF0ZS0mZ3Q7ZGVmYXVsdF9hY2wgPSBOVUxMOwomIzQzOwkJCX0KJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJc3RhdGUtJmd0O21vZGUgJmFtcDs9IH5jdXJyZW50X3VtYXNrKCk7CiAJCX0KJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXN0YXRlLSZndDttb2RlICZhbXA7PSB+Y3VycmVudF91bWFzaygpOwogCX0KLQlpZiAoKG9zYi0mZ3Q7c19tb3VudF9vcHQgJmFtcDsgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSAmYW1wOyZhbXA7IGFjbCkgewotCQlpZiAoU19JU0RJUihpbm9kZS0mZ3Q7aV9tb2RlKSkgewomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MztjbGVhbnVwOgomIzQzOwlvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKHN0YXRlKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiYjNDM7CQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLAomIzQzOwkJICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCiYjNDM7CQkgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYywKJiM0MzsJCSAgIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0mZ3Q7aV9zYik7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlpZiAoU19JU0xOSyhpbm9kZS0mZ3Q7aV9tb2RlKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAob3NiLSZndDtzX21vdW50X29wdCAmYW1wOyBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHsKJiM0MzsJCWlmIChTX0lTRElSKGlub2RlLSZndDtpX21vZGUpICZhbXA7JmFtcDsgc3RhdGUtJmd0O2RlZmF1bHRfYWNsKSB7CiAJCQlyZXQgPSBvY2ZzMl9zZXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpX2JoLAotCQkJCQkgICAgQUNMX1RZUEVfREVGQVVMVCwgYWNsLAotCQkJCQkgICAgbWV0YV9hYywgZGF0YV9hYyk7CiYjNDM7CQkJCQkgICAgQUNMX1RZUEVfREVGQVVMVCwKJiM0MzsJCQkJCSAgICBzdGF0ZS0mZ3Q7ZGVmYXVsdF9hY2wsIG1ldGFfYWMsCiYjNDM7CQkJCQkgICAgZGF0YV9hYyk7CiAJCQlpZiAocmV0KQotCQkJCWdvdG8gY2xlYW51cDsKJiM0MzsJCQkJcmV0dXJuIHJldDsKIAkJfQotCQltb2RlID0gaW5vZGUtJmd0O2lfbW9kZTsKLQkJcmV0ID0gX19wb3NpeF9hY2xfY3JlYXRlKCZhbXA7YWNsLCBHRlBfTk9GUywgJmFtcDttb2RlKTsKLQkJaWYgKHJldCAmbHQ7IDApCi0JCQlyZXR1cm4gcmV0OwomIzQzOwl9CiAKLQkJcmV0MiA9IG9jZnMyX2FjbF9zZXRfbW9kZShpbm9kZSwgZGlfYmgsIGhhbmRsZSwgbW9kZSk7Ci0JCWlmIChyZXQyKSB7Ci0JCQltbG9nX2Vycm5vKHJldDIpOwotCQkJcmV0ID0gcmV0MjsKLQkJCWdvdG8gY2xlYW51cDsKLQkJfQotCQlpZiAocmV0ICZndDsgMCkgewotCQkJcmV0ID0gb2NmczJfc2V0X2FjbChoYW5kbGUsIGlub2RlLAotCQkJCQkgICAgZGlfYmgsIEFDTF9UWVBFX0FDQ0VTUywKLQkJCQkJICAgIGFjbCwgbWV0YV9hYywgZGF0YV9hYyk7CiYjNDM7CXJldCA9IG9jZnMyX2FjbF9zZXRfbW9kZShpbm9kZSwgZGlfYmgsIGhhbmRsZSwgc3RhdGUtJmd0O21vZGUpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQltbG9nX2Vycm5vKHJldCk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChvc2ItJmd0O3NfbW91bnRfb3B0ICZhbXA7IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkgewomIzQzOwkJaWYgKHN0YXRlLSZndDthY2wpIHsKJiM0MzsJCQlyZXQgPSBvY2ZzMl9zZXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpX2JoLAomIzQzOwkJCQkJICAgIEFDTF9UWVBFX0FDQ0VTUywgc3RhdGUtJmd0O2FjbCwKJiM0MzsJCQkJCSAgICBtZXRhX2FjLCBkYXRhX2FjKTsKIAkJfQogCX0KLWNsZWFudXA6Ci0JcG9zaXhfYWNsX3JlbGVhc2UoYWNsKTsKJiM0MzsKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvYWNsLmggYi9mcy9vY2ZzMi9hY2wuaAppbmRleCA2NjdjNmYwM2ZhNjA2Zi4uYTkxZjljZTI3OGQ2ZDMgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2FjbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL2FjbC5oCkBAIC0yMCw5ICYjNDM7MjAsMjAgQEAgc3RydWN0IHBvc2l4X2FjbCAqb2NmczJfaW9wX2dldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsIGJvb2wgcmN1KTsKIGludCBvY2ZzMl9pb3Bfc2V0X2FjbChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCQkgICAgICBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIGludCB0eXBlKTsKIGV4dGVybiBpbnQgb2NmczJfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7Ci1leHRlcm4gaW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKiwKLQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICosIHN0cnVjdCBidWZmZXJfaGVhZCAqLAotCQkJICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqLAotCQkJICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKTsKJiM0MztzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlIHsKJiM0MzsJc3RydWN0IHBvc2l4X2FjbCAqZGVmYXVsdF9hY2w7CiYjNDM7CXN0cnVjdCBwb3NpeF9hY2wgKmFjbDsKJiM0MzsJdW1vZGVfdCBtb2RlOwomIzQzO307CiYjNDM7CiYjNDM7aW50IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsCiYjNDM7CQkJICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpOwomIzQzO3ZvaWQgb2NmczJfYWNsX2luaXRfcmVsZWFzZShzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSk7CiYjNDM7aW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiYjNDM7CQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLAomIzQzOwkJICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCiYjNDM7CQkgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYywKJiM0MzsJCSAgIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKTsKIAogI2VuZGlmIC8qIE9DRlMyX0FDTF9IICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9uYW1laS5jIGIvZnMvb2NmczIvbmFtZWkuYwppbmRleCAxMjc3NjY2Yzc3Y2QyZC4uZDlhYmExNmE4ZjI4YTcgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL25hbWVpLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIvbmFtZWkuYwpAQCAtMjU2LDYgJiM0MzsyNTYsNyBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCXNpZ3NldF90IG9sZHNldDsKIAlpbnQgZGlkX2Jsb2NrX3NpZ25hbHMgPSAwOwogCXN0cnVjdCBvY2ZzMl9kZW50cnlfbG9jayAqZGwgPSBOVUxMOwomIzQzOwlzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlIGFjbF9zdGF0ZSA9IHsgMCB9OwogCiAJdHJhY2Vfb2NmczJfbWtub2QoZGlyLCBkZW50cnksIGRlbnRyeS0mZ3Q7ZF9uYW1lLmxlbiwgZGVudHJ5LSZndDtkX25hbWUubmFtZSwKIAkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGRpciktJmd0O2lwX2Jsa25vLApAQCAtMzMwLDEwICYjNDM7MzMxLDEzIEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJCX0KIAl9CiAKJiM0MzsJc3RhdHVzID0gb2NmczJfYWNsX2luaXRfcHJlcGFyZShpbm9kZSwgZGlyLCBwYXJlbnRfZmVfYmgsICZhbXA7YWNsX3N0YXRlKTsKJiM0MzsJaWYgKHN0YXR1cyAmbHQ7IDApCiYjNDM7CQlnb3RvIGxlYXZlOwomIzQzOwogCS8qIGNhbGN1bGF0ZSBtZXRhIGRhdGEvY2x1c3RlcnMgZm9yIHNldHRpbmcgc2VjdXJpdHkgYW5kIGFjbCB4YXR0ciAqLwotCXN0YXR1cyA9IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChkaXIsIHBhcmVudF9mZV9iaCwgbW9kZSwKLQkJCQkgICAgICAgJmFtcDtzaSwgJmFtcDt3YW50X2NsdXN0ZXJzLAotCQkJCSAgICAgICAmYW1wO3hhdHRyX2NyZWRpdHMsICZhbXA7d2FudF9tZXRhKTsKJiM0MzsJc3RhdHVzID0gb2NmczJfY2FsY194YXR0cl9pbml0KGRpciwgbW9kZSwgJmFtcDtzaSwgJmFtcDt3YW50X2NsdXN0ZXJzLAomIzQzOwkJCQkgICAgICAgJmFtcDt4YXR0cl9jcmVkaXRzLCAmYW1wO3dhbnRfbWV0YSwgJmFtcDthY2xfc3RhdGUpOwogCWlmIChzdGF0dXMgJmx0OyAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBsZWF2ZTsKQEAgLTQxMSw4ICYjNDM7NDE1LDggQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAkJaW5jX25saW5rKGRpcik7CiAJfQogCi0Jc3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgZGlyLCBuZXdfZmVfYmgsIHBhcmVudF9mZV9iaCwKLQkJCSBtZXRhX2FjLCBkYXRhX2FjKTsKJiM0MzsJc3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgbmV3X2ZlX2JoLCBtZXRhX2FjLCBkYXRhX2FjLAomIzQzOwkJCQkmYW1wO2FjbF9zdGF0ZSk7CiAKIAlpZiAoc3RhdHVzICZsdDsgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC00NzcsNiAmIzQzOzQ4MSw4IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJYnJlbHNlKHBhcmVudF9mZV9iaCk7CiAJa2ZyZWUoc2kudmFsdWUpOwogCiYjNDM7CW9jZnMyX2FjbF9pbml0X3JlbGVhc2UoJmFtcDthY2xfc3RhdGUpOwomIzQzOwogCW9jZnMyX2ZyZWVfZGlyX2xvb2t1cF9yZXN1bHQoJmFtcDtsb29rdXApOwogCiAJaWYgKGlub2RlX2FjKQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIveGF0dHIuYyBiL2ZzL29jZnMyL3hhdHRyLmMKaW5kZXggZmNkZGQzYzEzYWNkZGQuLjRjZjViNjlkMTNiMDk1IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi94YXR0ci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL3hhdHRyLmMKQEAgLTYxMSwxMyAmIzQzOzYxMSwxMCBAQCBpbnQgb2NmczJfY2FsY19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLAogCXJldHVybiByZXQ7CiB9CiAKLWludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsCi0JCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLAotCQkJICB1bW9kZV90IG1vZGUsCiYjNDM7aW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLAogCQkJICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqc2ksCi0JCQkgIGludCAqd2FudF9jbHVzdGVycywKLQkJCSAgaW50ICp4YXR0cl9jcmVkaXRzLAotCQkJICBpbnQgKndhbnRfbWV0YSkKJiM0MzsJCQkgIGludCAqd2FudF9jbHVzdGVycywgaW50ICp4YXR0cl9jcmVkaXRzLAomIzQzOwkJCSAgaW50ICp3YW50X21ldGEsIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKmFjbF9zdGF0ZSkKIHsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGRpci0mZ3Q7aV9zYik7CkBAIC02MjgsMTkgJiM0Mzs2MjUsMTUgQEAgaW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJCQkJCSAgICAgc2ktJmd0O3ZhbHVlX2xlbik7CiAKIAlpZiAob3NiLSZndDtzX21vdW50X29wdCAmYW1wOyBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHsKLQkJZG93bl9yZWFkKCZhbXA7T0NGUzJfSShkaXIpLSZndDtpcF94YXR0cl9zZW0pOwotCQlhY2xfbGVuID0gb2NmczJfeGF0dHJfZ2V0X25vbG9jayhkaXIsIGRpcl9iaCwKLQkJCQkJT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFQsCi0JCQkJCSYjMzQ7JiMzNDssIE5VTEwsIDApOwotCQl1cF9yZWFkKCZhbXA7T0NGUzJfSShkaXIpLSZndDtpcF94YXR0cl9zZW0pOwotCQlpZiAoYWNsX2xlbiAmZ3Q7IDApIHsKLQkJCWFfc2l6ZSA9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTsKLQkJCWlmIChTX0lTRElSKG1vZGUpKQotCQkJCWFfc2l6ZSAmbHQ7Jmx0Oz0gMTsKLQkJfSBlbHNlIGlmIChhY2xfbGVuICE9IDAgJmFtcDsmYW1wOyBhY2xfbGVuICE9IC1FTk9EQVRBKSB7Ci0JCQlyZXQgPSBhY2xfbGVuOwotCQkJbWxvZ19lcnJubyhyZXQpOwotCQkJcmV0dXJuIHJldDsKJiM0MzsJCWlmIChhY2xfc3RhdGUtJmd0O2RlZmF1bHRfYWNsICZhbXA7JmFtcDsgU19JU0RJUihtb2RlKSkgewomIzQzOwkJCWFjbF9sZW4gPSBhY2xfc3RhdGUtJmd0O2RlZmF1bHRfYWNsLSZndDthX2NvdW50ICoKJiM0MzsJCQkJICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7CiYjNDM7CQkJYV9zaXplICYjNDM7PSBvY2ZzMl94YXR0cl9lbnRyeV9yZWFsX3NpemUoMCwgYWNsX2xlbik7CiYjNDM7CQl9CiYjNDM7CQlpZiAoYWNsX3N0YXRlLSZndDthY2wpIHsKJiM0MzsJCQlhY2xfbGVuID0gYWNsX3N0YXRlLSZndDthY2wtJmd0O2FfY291bnQgKgomIzQzOwkJCQkgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTsKJiM0MzsJCQlhX3NpemUgJiM0Mzs9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTsKIAkJfQogCX0KIApAQCAtNjgzLDE0ICYjNDM7Njc2LDI5IEBAIGludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsCiAJCQkJCQkJICAgbmV3X2NsdXN0ZXJzKTsKIAkJKndhbnRfY2x1c3RlcnMgJiM0Mzs9IG5ld19jbHVzdGVyczsKIAl9Ci0JaWYgKG9zYi0mZ3Q7c19tb3VudF9vcHQgJmFtcDsgT0NGUzJfTU9VTlRfUE9TSVhfQUNMICZhbXA7JmFtcDsKLQkgICAgYWNsX2xlbiAmZ3Q7IE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7Ci0JCS8qIGZvciBkaXJlY3RvcnksIGl0IGhhcyBERUZBVUxUIGFuZCBBQ0NFU1MgdHdvIHR5cGVzIG9mIGFjbHMgKi8KLQkJbmV3X2NsdXN0ZXJzID0gKFNfSVNESVIobW9kZSkgPyAyIDogMSkgKgotCQkJCW9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhkaXItJmd0O2lfc2IsIGFjbF9sZW4pOwotCQkqeGF0dHJfY3JlZGl0cyAmIzQzOz0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGRpci0mZ3Q7aV9zYiwKLQkJCQkJCQkgICBuZXdfY2x1c3RlcnMpOwotCQkqd2FudF9jbHVzdGVycyAmIzQzOz0gbmV3X2NsdXN0ZXJzOwomIzQzOwlpZiAob3NiLSZndDtzX21vdW50X29wdCAmYW1wOyBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHsKJiM0MzsJCWlmIChhY2xfc3RhdGUtJmd0O2RlZmF1bHRfYWNsICZhbXA7JmFtcDsgU19JU0RJUihtb2RlKSkgewomIzQzOwkJCWFjbF9sZW4gPSBhY2xfc3RhdGUtJmd0O2RlZmF1bHRfYWNsLSZndDthX2NvdW50ICoKJiM0MzsJCQkJICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7CiYjNDM7CQkJaWYgKGFjbF9sZW4gJmd0OyBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkgewomIzQzOwkJCQluZXdfY2x1c3RlcnMgPSBvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoZGlyLSZndDtpX3NiLAomIzQzOwkJCQkJCQkJCWFjbF9sZW4pOwomIzQzOwkJCQkqeGF0dHJfY3JlZGl0cyAmIzQzOz0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGRpci0mZ3Q7aV9zYiwKJiM0MzsJCQkJCQkJCQkgICBuZXdfY2x1c3RlcnMpOwomIzQzOwkJCQkqd2FudF9jbHVzdGVycyAmIzQzOz0gbmV3X2NsdXN0ZXJzOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsJCWlmIChhY2xfc3RhdGUtJmd0O2FjbCkgewomIzQzOwkJCWFjbF9sZW4gPSBhY2xfc3RhdGUtJmd0O2FjbC0mZ3Q7YV9jb3VudCAqCiYjNDM7CQkJCSAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpOwomIzQzOwkJCWlmIChhY2xfbGVuICZndDsgT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpIHsKJiM0MzsJCQkJbmV3X2NsdXN0ZXJzID0gb2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGRpci0mZ3Q7aV9zYiwKJiM0MzsJCQkJCQkJCQlhY2xfbGVuKTsKJiM0MzsJCQkJKnhhdHRyX2NyZWRpdHMgJiM0Mzs9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhkaXItJmd0O2lfc2IsCiYjNDM7CQkJCQkJCQkJICAgbmV3X2NsdXN0ZXJzKTsKJiM0MzsJCQkJKndhbnRfY2x1c3RlcnMgJiM0Mzs9IG5ld19jbHVzdGVyczsKJiM0MzsJCQl9CiYjNDM7CQl9CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTM1NDIsOCAmIzQzOzM1NTAsNiBAQCBpbnQgb2NmczJfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGVfdCAqaGFuZGxlLAogCXhpcy5pbm9kZV9iaCA9IHhicy5pbm9kZV9iaCA9IGRpX2JoOwogCWRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilkaV9iaC0mZ3Q7Yl9kYXRhOwogCi0JZG93bl93cml0ZSgmYW1wO09DRlMyX0koaW5vZGUpLSZndDtpcF94YXR0cl9zZW0pOwotCiAJcmV0ID0gb2NmczJfeGF0dHJfaWJvZHlfZmluZChpbm9kZSwgbmFtZV9pbmRleCwgbmFtZSwgJmFtcDt4aXMpOwogCWlmIChyZXQpCiAJCWdvdG8gY2xlYW51cDsKQEAgLTM1NTYsNyAmIzQzOzM1NjIsNiBAQCBpbnQgb2NmczJfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGVfdCAqaGFuZGxlLAogCXJldCA9IF9fb2NmczJfeGF0dHJfc2V0X2hhbmRsZShpbm9kZSwgZGksICZhbXA7eGksICZhbXA7eGlzLCAmYW1wO3hicywgJmFtcDtjdHh0KTsKIAogY2xlYW51cDoKLQl1cF93cml0ZSgmYW1wO09DRlMyX0koaW5vZGUpLSZndDtpcF94YXR0cl9zZW0pOwogCWJyZWxzZSh4YnMueGF0dHJfYmgpOwogCW9jZnMyX3hhdHRyX2J1Y2tldF9mcmVlKHhicy5idWNrZXQpOwogCkBAIC03MjU3LDYgJiM0Mzs3MjYyLDcgQEAgaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpciwKIHsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCA9IE5VTEw7CiYjNDM7CXN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgYWNsX3N0YXRlID0geyAwIH07CiAKIAlyZXQgPSBvY2ZzMl9pbml0X3NlY3VyaXR5X2dldChpbm9kZSwgZGlyLCBxc3RyLCBOVUxMKTsKIAlpZiAocmV0KSB7CkBAIC03MjY5LDEwICYjNDM7NzI3NSwxNyBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLAogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gbGVhdmU7CiAJfQotCXJldCA9IG9jZnMyX2luaXRfYWNsKE5VTEwsIGlub2RlLCBkaXIsIE5VTEwsIGRpcl9iaCwgTlVMTCwgTlVMTCk7CiYjNDM7CiYjNDM7CXJldCA9IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoaW5vZGUsIGRpciwgZGlyX2JoLCAmYW1wO2FjbF9zdGF0ZSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIHVubG9jazsKJiM0MzsKJiM0MzsJcmV0ID0gb2NmczJfaW5pdF9hY2woTlVMTCwgaW5vZGUsIE5VTEwsIE5VTEwsIE5VTEwsICZhbXA7YWNsX3N0YXRlKTsKIAlpZiAocmV0KQogCQltbG9nX2Vycm5vKHJldCk7CiAKJiM0Mzt1bmxvY2s6CiYjNDM7CW9jZnMyX2FjbF9pbml0X3JlbGVhc2UoJmFtcDthY2xfc3RhdGUpOwogCW9jZnMyX2lub2RlX3VubG9jayhkaXIsIDApOwogCWJyZWxzZShkaXJfYmgpOwogbGVhdmU6CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5oIGIvZnMvb2NmczIveGF0dHIuaAppbmRleCA2NWU5YWE3NDM5MTk5ZS4uNWNkZDZjNmI0MDA2NGIgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3hhdHRyLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIveGF0dHIuaApAQCAtNTUsOSAmIzQzOzU1LDEyIEBAIGludCBvY2ZzMl9pbml0X3NlY3VyaXR5X3NldChoYW5kbGVfdCAqLCBzdHJ1Y3QgaW5vZGUgKiwKIGludCBvY2ZzMl9jYWxjX3NlY3VyaXR5X2luaXQoc3RydWN0IGlub2RlICosCiAJCQkgICAgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICosCiAJCQkgICAgIGludCAqLCBpbnQgKiwgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKiopOwotaW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICosCi0JCQkgIHVtb2RlX3QsIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICosCi0JCQkgIGludCAqLCBpbnQgKiwgaW50ICopOwomIzQzOwomIzQzO3N0cnVjdCBvY2ZzMl9hY2xfc3RhdGU7CiYjNDM7aW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLAomIzQzOwkJCSAgc3RydWN0IG9jZnMyX3NlY3VyaXR5X3hhdHRyX2luZm8gKnNpLAomIzQzOwkJCSAgaW50ICp3YW50X2NsdXN0ZXJzLCBpbnQgKnhhdHRyX2NyZWRpdHMsCiYjNDM7CQkJICBpbnQgKndhbnRfbWV0YSwgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqYWNsX3N0YXRlKTsKIAogLyoKICAqIHhhdHRycyBjYW4gbGl2ZSBpbnNpZGUgYW4gaW5vZGUsIGFzIHBhcnQgb2YgYW4gZXh0ZXJuYWwgeGF0dHIgYmxvY2ssCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE5OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyMjYKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA1NzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBPQ0ZTMiBBQ0wgYW5kIFhhdHRyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdG91Y2hlcyBzZXZlcmFsIGNvcmUgT0NGUzIgZmlsZXM6IGBhY2wuY2AsIGBuYW1laS5jYCwgYHhhdHRyLmNgLCBhbmQgYHhhdHRyLmhgLiBJdCBzZWVtcyBsaWtlIGEgcmVmYWN0b3JpbmcgZWZmb3J0IHJlbGF0ZWQgdG8gQUNMIGluaXRpYWxpemF0aW9uLCBzcGVjaWZpY2FsbHkgaW50cm9kdWNpbmcgdGhlc2UgbmV3IGZ1bmN0aW9uczogYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgLCBgb2NmczJfYWNsX2luaXRfcmVsZWFzZWAsIGFuZCBtb2RpZnlpbmcgYG9jZnMyX2luaXRfYWNsYCBhbmQgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIG9yZ2FuaXphdGlvbmFsIGNoYW5nZSwgaG9wZWZ1bGx5IGFpbWVkIGF0IGltcHJvdmluZyBtb2R1bGFyaXR5IG9yIHBlcmZvcm1hbmNlIGluIHRob3NlIEFDTCByb3V0aW5lcy4KCk5vdywgdGhpcyBwYXJ0IGhlcmXigKYgdGhlIHJlbW92YWwgb2YgYGRvd25fd3JpdGUoJmFtcDtPQ0ZTMl9JKGlub2RlKS0mZ3Q7aXBfeGF0dHJfc2VtKTtgIGZyb20gYG9jZnMyX3hhdHRyX3NldF9oYW5kbGVgLi4uIFRoYXQmIzM5O3MgZ290IG15IGF0dGVudGlvbi4gV2h5IGlzIHRoZSBzZW1hcGhvcmUgYmVpbmcgcmVtb3ZlZCBpbiBgZnMvb2NmczIveGF0dHIuY2A/IExldCBtZSBkb3VibGUtY2hlY2suIFl1cCwgdGhlcmUgaXQgaXMuIExvb2tzIGxpa2UgdGhleSYjMzk7dmUgdGFrZW4gb3V0IHRoZSBsb2NraW5nIHRoYXQgc3Vycm91bmRlZCB0aGUgeGF0dHIgb3BlcmF0aW9uLiBUaGlzIGlzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSwgbm90IGp1c3QgYW4gb3JnYW5pemF0aW9uYWwgb25lLiBXZSBuZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgY29uY3VycmVudCBhY2Nlc3MgYW5kIGRhdGEgaW50ZWdyaXR5IGlmIHRoaXMgY2hhbmdlIGlzIGNvcnJlY3QuCgpJIHNlZSB0aGV5JiMzOTt2ZSByZW1vdmVkIHRoZSBkb3duIGFuZCB1cCB3cml0ZSBjYWxscyB0byB0aGUgc2VtYXBob3JlLiBUaGlzIGhhcyBzZXJpb3VzIGltcGxpY2F0aW9ucyBmb3IgY29uY3VycmVudCB4YXR0ciBvcGVyYXRpb25zLiBXZSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIGhvdyB4YXR0ciBvcGVyYXRpb25zIGFyZSBub3cgc3luY2hyb25pemVkLCBpZiBhdCBhbGwuIEl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyB3YXMgZGVlbWVkIHNhZmUgb3IgbmVjZXNzYXJ5LiBJcyB0aGVyZSBhIG5ldyBsb2NraW5nIG1lY2hhbmlzbSBpbnRyb2R1Y2VkLCBvciBpcyB0aGUgb3JpZ2luYWwgbG9ja2luZyBwYXR0ZXJuIHNvbWVob3cgcmVkdW5kYW50PwoKQWxyaWdodCwgT0NGUzIgaXMgYSBmaWxlc3lzdGVtLCBzbywgdGhhbmtmdWxseSwgdGhpcyBpcyB0ZXN0YWJsZTsgd2UgY2FuIG1vdW50IGl0IGFuZCBydW4gdGhyb3VnaCBhIHN1aXRlIG9mIHRlc3RzIHRvIHNlZSBpZiBhbnl0aGluZyBicmVha3MuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB3ZSBoYXZlIHRvIGRlYWwgd2l0aC4gQWgsIGBDT05GSUdfT0NGUzJfRlNgIGlzIHRoZSBvYnZpb3VzIG9uZSwgd2hpY2ggZW5hYmxlcyB0aGUgT0NGUzIgZmlsZXN5c3RlbS4gQW5kIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYENPTkZJR19PQ0ZTMl9GU19QT1NJWF9BQ0xgIGp1c3QgdG8gYmUgc3VyZSwgdGhhdCBQT1NJWCBBQ0xzIG1pZ2h0IGJlIHJlcXVpcmVkIGZvciB0aGlzIHBhdGNoIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxOTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgT0NGUzJfRlMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvb2NmczIvS2NvbmZpZzoyOmNvbmZpZyBPQ0ZTMl9GU1xuZnMvb2NmczIvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7T0NGUzIgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL29jZnMyL0tjb25maWctMjctXG5mcy9vY2ZzMi9LY29uZmlnOjI4OmNvbmZpZyBPQ0ZTMl9GU19PMkNCXG5mcy9vY2ZzMi9LY29uZmlnLTI5LVx0dHJpc3RhdGUgXCYjMzQ7TzJDQiBLZXJuZWxzcGFjZSBDbHVzdGVyaW5nXCYjMzQ7XG4tLVxuZnMvb2NmczIvS2NvbmZpZy00MS1cbmZzL29jZnMyL0tjb25maWc6NDI6Y29uZmlnIE9DRlMyX0ZTX1VTRVJTUEFDRV9DTFVTVEVSXG5mcy9vY2ZzMi9LY29uZmlnLTQzLVx0dHJpc3RhdGUgXCYjMzQ7T0NGUzIgVXNlcnNwYWNlIENsdXN0ZXJpbmdcJiMzNDtcbi0tXG5mcy9vY2ZzMi9LY29uZmlnLTUzLVxuZnMvb2NmczIvS2NvbmZpZzo1NDpjb25maWcgT0NGUzJfRlNfU1RBVFNcbmZzL29jZnMyL0tjb25maWctNTUtXHRib29sIFwmIzM0O09DRlMyIHN0YXRpc3RpY3NcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxOTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTYyCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkNoZWNraW5nIGZvciBQT1NJWCBBQ0wgU3VwcG9ydCBpbiBPQ0ZTMioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGZpbGVzeXN0ZW0gdGhhdCBuYXRpdmVseSBzdXBwb3J0cyBQT1NJWCBBQ0xzLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHByb2JpbmcgZm9yIHRoZSBwcmVzZW5jZSBvZiB0aGUgYE9DRlMyX0ZTX1BPU0lYX0FDTGAgZmxhZywgb3Igc29tZXRoaW5nIGFuYWxvZ291cy4gSXQmIzM5O3MgdGhlIG1vc3QgY29tbW9uIGFuZCBkaXJlY3QgaW5kaWNhdG9yLiBJZiB0aGF0JiMzOTtzIHByZXNlbnQsIEkgY2FuIGluZmVyIGEgY2VydGFpbiBsZXZlbCBvZiBzdXBwb3J0IGFuZCB0YWlsb3Igc3Vic2VxdWVudCBvcGVyYXRpb25zIGJhc2VkIG9uIHRoYXQga25vd2xlZGdlLiBJZiBpdCYjMzk7cyAqbm90KiBwcmVzZW50LCB0aGVuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlci4gSSYjMzk7bGwgbmVlZCB0byBtb3ZlIG9uIHRvIGNoZWNrIGZvciBhIGNvbXBhdGliaWxpdHkgbGF5ZXIgb3Igb3RoZXIgbWVjaGFuaXNtIHRvIHN1cHBvcnQgdGhpcywgaWYgdGhlIGZpbGVzeXN0ZW0gYWR2ZXJ0aXNlcyBhbnl0aGluZyBvdGhlciB0aGFuIG5vdCBzdXBwb3J0aW5nIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTk6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE9DRlMyX0ZTXyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9vY2ZzMi9LY29uZmlnPTI9Y29uZmlnIE9DRlMyX0ZTXG4tLVxuZnMvb2NmczIvS2NvbmZpZy0yNy1cbmZzL29jZnMyL0tjb25maWc6Mjg6Y29uZmlnIE9DRlMyX0ZTX08yQ0JcbmZzL29jZnMyL0tjb25maWctMjktXHR0cmlzdGF0ZSBcJiMzNDtPMkNCIEtlcm5lbHNwYWNlIENsdXN0ZXJpbmdcJiMzNDtcbi0tXG5mcy9vY2ZzMi9LY29uZmlnLTQxLVxuZnMvb2NmczIvS2NvbmZpZzo0Mjpjb25maWcgT0NGUzJfRlNfVVNFUlNQQUNFX0NMVVNURVJcbmZzL29jZnMyL0tjb25maWctNDMtXHR0cmlzdGF0ZSBcJiMzNDtPQ0ZTMiBVc2Vyc3BhY2UgQ2x1c3RlcmluZ1wmIzM0O1xuLS1cbmZzL29jZnMyL0tjb25maWctNTMtXG5mcy9vY2ZzMi9LY29uZmlnOjU0OmNvbmZpZyBPQ0ZTMl9GU19TVEFUU1xuZnMvb2NmczIvS2NvbmZpZy01NS1cdGJvb2wgXCYjMzQ7T0NGUzIgc3RhdGlzdGljc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE5OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5ODYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBBYnNlbmNlIG9mIGBPQ0ZTMl9GU19QT1NJWF9BQ0xgKioKCkhtbSwgaXQgc2VlbXMgdGhhdCBgT0NGUzJfRlNfUE9TSVhfQUNMYCBpc24mIzM5O3QgZGVmaW5lZC4gVGhhdCYjMzk7cyBhIGJpdCBvZGQuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBjb2RlIHRvIGZpbmQgd2hlcmUgdGhpcyBpcyBjb25maWd1cmVkLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlcyB0byBzdGFydCBsb29raW5nIGZvciB0aGlzIHdvdWxkIGJlIHRoZSBgZnMvb2NmczIvTWFrZWZpbGVgIGFuZCBgZnMvb2NmczIvS2NvbmZpZ2AgZmlsZXMuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aG9zZSwgdGhlIE1ha2VmaWxlIHNob3VsZCBiZSByZWxhdGVkIHRvIGNvbXBpbGF0aW9uIGFuZCB0aGUgS2NvbmZpZyB0byBrZXJuZWwgY29uZmlndXJhdGlvbnMsIGFzIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBBQ0wgaXMgYmVpbmcgaGFuZGxlZCBpbiBPQ0ZTMi4gSSB3aWxsIGJlIGxvb2tpbmcgZm9yIGhvdyBBQ0wgc3VwcG9ydCBpcyBlbmFibGVkIGFuZCB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxOTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQT1NJWF9BQ0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9vY2ZzMi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvS2NvbmZpZz0yPWNvbmZpZyBPQ0ZTMl9GU1xuLS1cbmZzL29jZnMyL0tjb25maWctOS1cdHNlbGVjdCBRVU9UQV9UUkVFXG5mcy9vY2ZzMi9LY29uZmlnOjEwOlx0c2VsZWN0IEZTX1BPU0lYX0FDTFxuZnMvb2NmczIvS2NvbmZpZy0xMS1cdHNlbGVjdCBMRUdBQ1lfRElSRUNUX0lPXG4tLVxuZnMvb2NmczIvYWNsLmM9MTEzPXN0YXRpYyBzdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9nZXRfYWNsX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSxcbi0tXG5mcy9vY2ZzMi9hY2wuYy0xMjItXHRjYXNlIEFDTF9UWVBFX0FDQ0VTUzpcbmZzL29jZnMyL2FjbC5jOjEyMzpcdFx0bmFtZV9pbmRleCA9IE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1M7XG5mcy9vY2ZzMi9hY2wuYy0xMjQtXHRcdGJyZWFrO1xuZnMvb2NmczIvYWNsLmMtMTI1LVx0Y2FzZSBBQ0xfVFlQRV9ERUZBVUxUOlxuZnMvb2NmczIvYWNsLmM6MTI2Olx0XHRuYW1lX2luZGV4ID0gT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFQ7XG5mcy9vY2ZzMi9hY2wuYy0xMjctXHRcdGJyZWFrO1xuLS1cbmZzL29jZnMyL2FjbC5jPTIxND1zdGF0aWMgaW50IG9jZnMyX3NldF9hY2woaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9vY2ZzMi9hY2wuYy0yMzEtXHRjYXNlIEFDTF9UWVBFX0FDQ0VTUzpcbmZzL29jZnMyL2FjbC5jOjIzMjpcdFx0bmFtZV9pbmRleCA9IE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1M7XG5mcy9vY2ZzMi9hY2wuYy0yMzMtXHRcdGJyZWFrO1xuZnMvb2NmczIvYWNsLmMtMjM0LVx0Y2FzZSBBQ0xfVFlQRV9ERUZBVUxUOlxuZnMvb2NmczIvYWNsLmM6MjM1Olx0XHRuYW1lX2luZGV4ID0gT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFQ7XG5mcy9vY2ZzMi9hY2wuYy0yMzYtXHRcdGlmICghU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKVxuLS1cbmZzL29jZnMyL2FjbC5jPTI5Mz1zdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9pb3BfZ2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgYm9vbCByY3UpXG4tLVxuZnMvb2NmczIvYWNsLmMtMzA0LVx0b3NiID0gT0NGUzJfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG5mcy9vY2ZzMi9hY2wuYzozMDU6XHRpZiAoIShvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkpXG5mcy9vY2ZzMi9hY2wuYy0zMDYtXHRcdHJldHVybiBOVUxMO1xuLS1cbmZzL29jZnMyL2FjbC5jPTMyMT1pbnQgb2NmczJfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG4tLVxuZnMvb2NmczIvYWNsLmMtMzI5LVxuZnMvb2NmczIvYWNsLmM6MzMwOlx0aWYgKCEob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpKVxuZnMvb2NmczIvYWNsLmMtMzMxLVx0XHRyZXR1cm4gMDtcbi0tXG5mcy9vY2ZzMi9hY2wuYz0zNTk9aW50IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvb2NmczIvYWNsLmMtMzcyLVxuZnMvb2NmczIvYWNsLmM6MzczOlx0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG5mcy9vY2ZzMi9hY2wuYy0zNzQtXHRcdGRvd25fcmVhZChcdTAwMjZPQ0ZTMl9JKGRpciktXHUwMDNlaXBfeGF0dHJfc2VtKTtcbi0tXG5mcy9vY2ZzMi9hY2wuYz00MTQ9aW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvb2NmczIvYWNsLmMtNDI1LVxuZnMvb2NmczIvYWNsLmM6NDI2Olx0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG5mcy9vY2ZzMi9hY2wuYy00MjctXHRcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkgXHUwMDI2XHUwMDI2IHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKSB7XG4tLVxuZnMvb2NmczIvYWNsLmMtNDQyLVxuZnMvb2NmczIvYWNsLmM6NDQzOlx0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG5mcy9vY2ZzMi9hY2wuYy00NDQtXHRcdGlmIChzdGF0ZS1cdTAwM2VhY2wpIHtcbi0tXG5mcy9vY2ZzMi9vY2ZzMi5oPTI1Nz1lbnVtIG9jZnMyX21vdW50X29wdGlvbnNcbi0tXG5mcy9vY2ZzMi9vY2ZzMi5oLTI2Ni1cdE9DRlMyX01PVU5UX0lOT0RFNjQgPSAxIFx1MDAzY1x1MDAzYyA3LFx0LyogQWxsb3cgaW5vZGUgbnVtYmVycyBcdTAwM2UgMl4zMiAqL1xuZnMvb2NmczIvb2NmczIuaDoyNjc6XHRPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wgPSAxIFx1MDAzY1x1MDAzYyA4LFx0LyogRm9yY2UgUE9TSVggYWNjZXNzIGNvbnRyb2wgbGlzdHMgKi9cbmZzL29jZnMyL29jZnMyLmg6MjY4Olx0T0NGUzJfTU9VTlRfTk9fUE9TSVhfQUNMID0gMSBcdTAwM2NcdTAwM2MgOSxcdC8qIERpc2FibGUgUE9TSVggYWNjZXNzXG5mcy9vY2ZzMi9vY2ZzMi5oLTI2OS1cdFx0XHRcdFx0XHQgICBjb250cm9sIGxpc3RzICovXG4tLVxuZnMvb2NmczIvc3VwZXIuYz02MDc9c3RhdGljIGludCBvY2ZzMl9yZWNvbmZpZ3VyZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvb2NmczIvc3VwZXIuYy03MTctXHRcdHNiLVx1MDAzZXNfZmxhZ3MgPSAoc2ItXHUwMDNlc19mbGFncyBcdTAwMjYgflNCX1BPU0lYQUNMKSB8XG5mcy9vY2ZzMi9zdXBlci5jOjcxODpcdFx0XHQoKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSA/XG5mcy9vY2ZzMi9zdXBlci5jLTcxOS1cdFx0XHRcdFx0XHRcdFNCX1BPU0lYQUNMIDogMCk7XG4tLVxuZnMvb2NmczIvc3VwZXIuYz05NzM9c3RhdGljIGludCBvY2ZzMl9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9vY2ZzMi9zdXBlci5jLTEwMjQtXHRzYi1cdTAwM2VzX2ZsYWdzID0gKHNiLVx1MDAzZXNfZmxhZ3MgXHUwMDI2IH4oU0JfUE9TSVhBQ0wgfCBTQl9OT1NFQykpIHxcbmZzL29jZnMyL3N1cGVyLmM6MTAyNTpcdFx0KChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkgPyBTQl9QT1NJWEFDTCA6IDApO1xuZnMvb2NmczIvc3VwZXIuYy0xMDI2LVxuLS1cbmZzL29jZnMyL3N1cGVyLmM9MTIzMj1zdGF0aWMgaW50IG9jZnMyX2NoZWNrX3NldF9vcHRpb25zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvb2NmczIvc3VwZXIuYy0xMjYwLVx0fVxuZnMvb2NmczIvc3VwZXIuYzoxMjYxOlx0aWYgKG9wdGlvbnMtXHUwMDNlbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wgXHUwMDI2XHUwMDI2XG5mcy9vY2ZzMi9zdXBlci5jLTEyNjItXHQgICAgIU9DRlMyX0hBU19JTkNPTVBBVF9GRUFUVVJFKHNiLCBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX1hBVFRSKSkge1xuLS1cbmZzL29jZnMyL3N1cGVyLmMtMTI2Ny1cdC8qIE5vIEFDTCBzZXR0aW5nIHNwZWNpZmllZD8gVXNlIFhBVFRSIGZlYXR1cmUuLi4gKi9cbmZzL29jZnMyL3N1cGVyLmM6MTI2ODpcdGlmICghKG9wdGlvbnMtXHUwMDNlbW91bnRfb3B0IFx1MDAyNiAoT0NGUzJfTU9VTlRfUE9TSVhfQUNMIHxcbmZzL29jZnMyL3N1cGVyLmM6MTI2OTpcdFx0XHRcdCAgICBPQ0ZTMl9NT1VOVF9OT19QT1NJWF9BQ0wpKSkge1xuZnMvb2NmczIvc3VwZXIuYy0xMjcwLVx0XHRpZiAoT0NGUzJfSEFTX0lOQ09NUEFUX0ZFQVRVUkUoc2IsIE9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfWEFUVFIpKVxuZnMvb2NmczIvc3VwZXIuYzoxMjcxOlx0XHRcdG9wdGlvbnMtXHUwMDNlbW91bnRfb3B0IHw9IE9DRlMyX01PVU5UX1BPU0lYX0FDTDtcbmZzL29jZnMyL3N1cGVyLmMtMTI3Mi1cdFx0ZWxzZVxuZnMvb2NmczIvc3VwZXIuYzoxMjczOlx0XHRcdG9wdGlvbnMtXHUwMDNlbW91bnRfb3B0IHw9IE9DRlMyX01PVU5UX05PX1BPU0lYX0FDTDtcbmZzL29jZnMyL3N1cGVyLmMtMTI3NC1cdH1cbi0tXG5mcy9vY2ZzMi9zdXBlci5jPTEyNzg9c3RhdGljIGludCBvY2ZzMl9wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKVxuLS1cbmZzL29jZnMyL3N1cGVyLmMtMTM4NC1cdFx0aWYgKHJlc3VsdC5uZWdhdGVkKSB7XG5mcy9vY2ZzMi9zdXBlci5jOjEzODU6XHRcdFx0bW9wdC1cdTAwM2Vtb3VudF9vcHQgfD0gT0NGUzJfTU9VTlRfTk9fUE9TSVhfQUNMO1xuZnMvb2NmczIvc3VwZXIuYzoxMzg2Olx0XHRcdG1vcHQtXHUwMDNlbW91bnRfb3B0IFx1MDAyNj0gfk9DRlMyX01PVU5UX1BPU0lYX0FDTDtcbmZzL29jZnMyL3N1cGVyLmMtMTM4Ny1cdFx0fSBlbHNlIHtcbmZzL29jZnMyL3N1cGVyLmM6MTM4ODpcdFx0XHRtb3B0LVx1MDAzZW1vdW50X29wdCB8PSBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0w7XG5mcy9vY2ZzMi9zdXBlci5jOjEzODk6XHRcdFx0bW9wdC1cdTAwM2Vtb3VudF9vcHQgXHUwMDI2PSB+T0NGUzJfTU9VTlRfTk9fUE9TSVhfQUNMO1xuZnMvb2NmczIvc3VwZXIuYy0xMzkwLVx0XHR9XG4tLVxuZnMvb2NmczIvc3VwZXIuYz0xNDE2PXN0YXRpYyBpbnQgb2NmczJfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IGRlbnRyeSAqcm9vdClcbi0tXG5mcy9vY2ZzMi9zdXBlci5jLTE0ODQtXG5mcy9vY2ZzMi9zdXBlci5jOjE0ODU6XHRpZiAob3B0cyBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKVxuZnMvb2NmczIvc3VwZXIuYy0xNDg2LVx0XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyxhY2xcJiMzNDspO1xuLS1cbmZzL29jZnMyL3hhdHRyLmM9MTAxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqIGNvbnN0IG9jZnMyX3hhdHRyX2hhbmRsZXJfbWFwW09DRlMyX1hBVFRSX01BWF0gPSB7XG5mcy9vY2ZzMi94YXR0ci5jLTEwMi1cdFtPQ0ZTMl9YQVRUUl9JTkRFWF9VU0VSXVx0XHQ9IFx1MDAyNm9jZnMyX3hhdHRyX3VzZXJfaGFuZGxlcixcbmZzL29jZnMyL3hhdHRyLmM6MTAzOlx0W09DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1NdXHQ9IFx1MDAyNm5vcF9wb3NpeF9hY2xfYWNjZXNzLFxuZnMvb2NmczIveGF0dHIuYzoxMDQ6XHRbT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFRdXHQ9IFx1MDAyNm5vcF9wb3NpeF9hY2xfZGVmYXVsdCxcbmZzL29jZnMyL3hhdHRyLmMtMTA1LVx0W09DRlMyX1hBVFRSX0lOREVYX1RSVVNURURdXHRcdD0gXHUwMDI2b2NmczJfeGF0dHJfdHJ1c3RlZF9oYW5kbGVyLFxuLS1cbmZzL29jZnMyL3hhdHRyLmM9NjE0PWludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSxcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTYyNi1cbmZzL29jZnMyL3hhdHRyLmM6NjI3Olx0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG5mcy9vY2ZzMi94YXR0ci5jLTYyOC1cdFx0aWYgKGFjbF9zdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCBcdTAwMjZcdTAwMjYgU19JU0RJUihtb2RlKSkge1xuLS1cbmZzL29jZnMyL3hhdHRyLmMtNjc4LVx0fVxuZnMvb2NmczIveGF0dHIuYzo2Nzk6XHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbmZzL29jZnMyL3hhdHRyLmMtNjgwLVx0XHRpZiAoYWNsX3N0YXRlLVx1MDAzZWRlZmF1bHRfYWNsIFx1MDAyNlx1MDAyNiBTX0lTRElSKG1vZGUpKSB7XG4tLVxuZnMvb2NmczIveGF0dHIuYz04ODc9c3RhdGljIGludCBvY2ZzMl94YXR0cl9saXN0X2VudHJ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvb2NmczIveGF0dHIuYy05MDItXG5mcy9vY2ZzMi94YXR0ci5jOjkwMzpcdGNhc2UgT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0FDQ0VTUzpcbmZzL29jZnMyL3hhdHRyLmM6OTA0Olx0Y2FzZSBPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfREVGQVVMVDpcbmZzL29jZnMyL3hhdHRyLmMtOTA1LVx0XHRpZiAoIShzYi1cdTAwM2VzX2ZsYWdzIFx1MDAyNiBTQl9QT1NJWEFDTCkpXG4tLVxuZnMvb2NmczIveGF0dHIuYz03MTY4PXN0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl9ub19zZWN1cml0eShzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKnhlKVxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNzE3Mi1cdHJldHVybiB0eXBlICE9IE9DRlMyX1hBVFRSX0lOREVYX1NFQ1VSSVRZIFx1MDAyNlx1MDAyNlxuZnMvb2NmczIveGF0dHIuYzo3MTczOlx0ICAgICAgIHR5cGUgIT0gT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0FDQ0VTUyBcdTAwMjZcdTAwMjZcbmZzL29jZnMyL3hhdHRyLmM6NzE3NDpcdCAgICAgICB0eXBlICE9IE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9ERUZBVUxUO1xuZnMvb2NmczIveGF0dHIuYy03MTc1LX1cbi0tXG5mcy9vY2ZzMi94YXR0ci5oPTE0PWVudW0gb2NmczJfeGF0dHJfdHlwZSB7XG5mcy9vY2ZzMi94YXR0ci5oLTE1LVx0T0NGUzJfWEFUVFJfSU5ERVhfVVNFUiA9IDEsXG5mcy9vY2ZzMi94YXR0ci5oOjE2Olx0T0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0FDQ0VTUyxcbmZzL29jZnMyL3hhdHRyLmg6MTc6XHRPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfREVGQVVMVCxcbmZzL29jZnMyL3hhdHRyLmgtMTgtXHRPQ0ZTMl9YQVRUUl9JTkRFWF9UUlVTVEVELFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE5OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDg1CgkJCQkJCQlvdXRwdXQ6IDI1NAoJCQkJCQkJdGhvdWdodHM6IDkwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipPQ0ZTMiBBQ0wgSW5pdGlhbGl6YXRpb24gYW5kIFhhdHRyIEhhbmRsaW5nIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBjbGVhciB0aGUgY2hhbmdlcyByZXZvbHZlIGFyb3VuZCBBQ0wgaW5pdGlhbGl6YXRpb24gd2l0aGluIHRoZSBPQ0ZTMiBmaWxlc3lzdGVtLiBUaGUgY29uZmlndXJhdGlvbiBzZWxlY3Rpb24gc3RhcnRzIHdpdGggYE9DRlMyX0ZTYCwgd2hpY2ggdGhlbiBpbXBsaWVzIGBGU19QT1NJWF9BQ0xgLCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIFBPU0lYIEFDTHMgaGVyZS4KClRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyBtb2RpZmljYXRpb25zIHRvIHNldmVyYWwgZnVuY3Rpb25zOiBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAsIGBvY2ZzMl9pbml0X2FjbGAsIGFuZCBgb2NmczJfY2FsY194YXR0cl9pbml0YC4gVGhlc2UgYXJlIGNyaXRpY2FsIGJlY2F1c2UgdGhleSYjMzk7cmUgY2FsbGVkIGR1cmluZyBub2RlIGNyZWF0aW9uIGFuZCBpbml0aWFsaXphdGlvbi4gU3BlY2lmaWNhbGx5LCBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAgaXMgY2FsbGVkIGZyb20gYG9jZnMyX21rbm9kYCwgYW5kIHRoZW4gYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAgY2FsbHMgdGhvc2UgZnVuY3Rpb25zLiBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCBpcyBzdWJzZXF1ZW50bHkgY2FsbGVkIGZyb20gYG9jZnMyX3N5bWxpbmtgIGFuZCBgb2NmczJfbWtkaXJgLCBldGMuCgpJIGNoZWNrZWQgYG9jZnMyX21rbm9kYCBpbiBgZnMvb2NmczIvbmFtZWkuY2AsIGFuZCBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZSB0aHJvdWdoIGZ1enppbmcsIHdoaWNoIG1lYW5zIHRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCBleHBvc2VkIHRvIHRoZSB1c2VyLgoKTXkgaW5pdGlhbCBmb2N1cyBzeW1ib2xzIHdlcmUgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucywgYnV0IEkmIzM5O3ZlIHJlZmluZWQgdGhhdC4gV2hpbGUgYG9jZnMyX21rbm9kYCBpdHNlbGYgaXMgYSBnb29kIGVudHJ5IHBvaW50LCBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAgaXMgZXZlbiBtb3JlIHNwZWNpZmljIGFuZCBpbnRlcmVzdGluZy4gTm93LCBhZnRlciBmdXJ0aGVyIGludmVzdGlnYXRpb24sIHRoZSBmb2N1cyBzeW1ib2xzIEkmIzM5O3ZlIGlkZW50aWZpZWQgYXJlOiBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAsIGBvY2ZzMl9pbml0X2FjbGAsIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgLCBhbmQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAuIFRoZSBsb2NhdGlvbiBvZiB0aGVzZSBzeW1ib2xzIGFyZSBgZnMvb2NmczIvYWNsLmNgIChmb3IgYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgIGFuZCBgb2NmczJfaW5pdF9hY2xgKSwgYGZzL29jZnMyL3hhdHRyLmNgIChmb3IgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgKS4KCkEgc2lnbmlmaWNhbnQgY2hhbmdlIGlzIHRoZSByZW1vdmFsIG9mIHRoZSBsb2NrIGBkb3duX3dyaXRlKCZhbXA7T0NGUzJfSShpbm9kZSktJmd0O2lwX3hhdHRyX3NlbSk7YCBmcm9tIGBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlYCwgYWxzbyBsb2NhdGVkIGluIGBmcy9vY2ZzMi94YXR0ci5jYC4gVGhpcyBpcyBhIGNvbmN1cnJlbmN5LXJlbGF0ZWQgY2hhbmdlLCBhbmQgdGhpcyBpcyB3aHkgYG9jZnMyX3hhdHRyX3NldF9oYW5kbGVgIHNob3VsZCBhbHNvIGJlIGFkZGVkIHRvIHRoZSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMuCgpUaGUga2V5IGNvbmZpZ3VyYXRpb24gaXMgYE9DRlMyX0ZTYCwgYW5kIGl0IGF1dG9tYXRpY2FsbHkgZW5hYmxlcyBgRlNfUE9TSVhfQUNMYCwgc28gdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgY29uZmlncyBuZWVkZWQuCgoqKkluIHN1bW1hcnk6KioKCiogICAqKldvcnRoRnV6emluZyoqOiBgdHJ1ZWAKKiAgICoqRm9jdXNTeW1ib2xzKio6CiAgICAqICAgYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgCiAgICAqICAgYG9jZnMyX2luaXRfYWNsYAogICAgKiAgIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgCiAgICAqICAgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAKICAgICogICBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWAKKiAgICoqRW5hYmxlQ29uZmlncyoqOiBgT0NGUzJfRlNgCgpUaGUgcmF0aW9uYWxlIGhlcmUgaXMgdGhhdCB0aGlzIHBhdGNoIG1vZGlmaWVzIGNvcmUgQUNMIGluaXRpYWxpemF0aW9uIGFuZCB4YXR0ciBoYW5kbGluZyB3aXRoaW4gT0NGUzIsIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIHR5cGljYWwgZmlsZXN5c3RlbSBvcGVyYXRpb25zLiBUaGUgbG9jayByZW1vdmFsIGluIGBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlYCBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBiZWNhdXNlIGl0IGNhbiBpbnRyb2R1Y2UgY29uY3VycmVuY3kgaXNzdWVzLCBhbmQgdGhpcyBpcyB3aHkgZnV6emluZyBzaG91bGQgYmUgZGlyZWN0ZWQgdG93YXJkcyB0aGVzZSBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE5OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPQ0ZTMl9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O29jZnMyX2FjbF9pbml0X3ByZXBhcmUmIzM0OywKICAgICYjMzQ7b2NmczJfaW5pdF9hY2wmIzM0OywKICAgICYjMzQ7b2NmczJfY2FsY194YXR0cl9pbml0JiMzNDssCiAgICAmIzM0O29jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbCYjMzQ7LAogICAgJiMzNDtvY2ZzMl94YXR0cl9zZXRfaGFuZGxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBBQ0wgaW5pdGlhbGl6YXRpb24gaW4gT0NGUzIsIGludHJvZHVjaW5nIG5ldyBmdW5jdGlvbnMgYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgIGFuZCBgb2NmczJfYWNsX2luaXRfcmVsZWFzZWAsIGFuZCBtb2RpZnlpbmcgYG9jZnMyX2luaXRfYWNsYCBhbmQgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAuIEl0IGFsc28gcmVtb3ZlcyBhIGxvY2sgKGBpcF94YXR0cl9zZW1gKSBmcm9tIGBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZmlsZXN5c3RlbSYjMzk7cyBjb3JlIGxvZ2ljIGFuZCB4YXR0ciBoYW5kbGluZywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3RhbmRhcmQgZmlsZXN5c3RlbSBvcGVyYXRpb25zIChlLmcuLCBta25vZCwgbWtkaXIsIHNldHhhdHRyKS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgbW9kaWZpZWQgZnVuY3Rpb25zIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBjb25jdXJyZW5jeSBpc3N1ZXMgKGR1ZSB0byB0aGUgcmVtb3ZlZCBsb2NrKSBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T0NGUzJfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlJiMzNDssCiAgICAmIzM0O29jZnMyX2luaXRfYWNsJiMzNDssCiAgICAmIzM0O29jZnMyX2NhbGNfeGF0dHJfaW5pdCYjMzQ7LAogICAgJiMzNDtvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2wmIzM0OywKICAgICYjMzQ7b2NmczJfeGF0dHJfc2V0X2hhbmRsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgQUNMIGluaXRpYWxpemF0aW9uIGluIE9DRlMyLCBpbnRyb2R1Y2luZyBuZXcgZnVuY3Rpb25zIGBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlYCBhbmQgYG9jZnMyX2FjbF9pbml0X3JlbGVhc2VgLCBhbmQgbW9kaWZ5aW5nIGBvY2ZzMl9pbml0X2FjbGAgYW5kIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgLiBJdCBhbHNvIHJlbW92ZXMgYSBsb2NrIChgaXBfeGF0dHJfc2VtYCkgZnJvbSBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGZpbGVzeXN0ZW0mIzM5O3MgY29yZSBsb2dpYyBhbmQgeGF0dHIgaGFuZGxpbmcsIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHN0YW5kYXJkIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyAoZS5nLiwgbWtub2QsIG1rZGlyLCBzZXR4YXR0cikuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIG1vZGlmaWVkIGZ1bmN0aW9ucyB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgY29uY3VycmVuY3kgaXNzdWVzIChkdWUgdG8gdGhlIHJlbW92ZWQgbG9jaykgYXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxOTo0MjozNi4wNTk0MjA0NTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDEzNDk2NTcyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPQ0ZTMl9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm9jZnMyX2FjbF9pbml0X3ByZXBhcmVcIixcbiAgICBcIm9jZnMyX2luaXRfYWNsXCIsXG4gICAgXCJvY2ZzMl9jYWxjX3hhdHRyX2luaXRcIixcbiAgICBcIm9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbFwiLFxuICAgIFwib2NmczJfeGF0dHJfc2V0X2hhbmRsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBBQ0wgaW5pdGlhbGl6YXRpb24gaW4gT0NGUzIsIGludHJvZHVjaW5nIG5ldyBmdW5jdGlvbnMgYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgIGFuZCBgb2NmczJfYWNsX2luaXRfcmVsZWFzZWAsIGFuZCBtb2RpZnlpbmcgYG9jZnMyX2luaXRfYWNsYCBhbmQgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAuIEl0IGFsc28gcmVtb3ZlcyBhIGxvY2sgKGBpcF94YXR0cl9zZW1gKSBmcm9tIGBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZmlsZXN5c3RlbSdzIGNvcmUgbG9naWMgYW5kIHhhdHRyIGhhbmRsaW5nLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzdGFuZGFyZCBmaWxlc3lzdGVtIG9wZXJhdGlvbnMgKGUuZy4sIG1rbm9kLCBta2Rpciwgc2V0eGF0dHIpLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBtb2RpZmllZCBmdW5jdGlvbnMgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyAoZHVlIHRvIHRoZSByZW1vdmVkIGxvY2spIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxOTo0MjozNi4wNTk0MjgxNjdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NDAxNzg4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGI5MDZmNjM0NjI0ZDBmZmIwNWI4NTQ2ZTg0YzBhNTcyNjgxNTVjMDVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMjIgMTk6NDI6MzQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvYWNsLmMgYi9mcy9vY2ZzMi9hY2wuY1xcbmluZGV4IGFmMWUyY2VkYjIxN2YxLi4wOTBlYzYwZmI1NzZhNiAxMDA2NDRcXG4tLS0gYS9mcy9vY2ZzMi9hY2wuY1xcbisrKyBiL2ZzL29jZnMyL2FjbC5jXFxuQEAgLTExMCw4ICsxMTAsNyBAQCBzdGF0aWMgdm9pZCAqb2NmczJfYWNsX3RvX3hhdHRyKGNvbnN0IHN0cnVjdCBwb3NpeF9hY2wgKmFjbCwgc2l6ZV90ICpzaXplKVxcbiBcXHRyZXR1cm4gb2NmczJfYWNsO1xcbiB9XFxuIFxcbi1zdGF0aWMgc3RydWN0IHBvc2l4X2FjbCAqb2NmczJfZ2V0X2FjbF9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgaW50IHR5cGUsXFxuK3N0YXRpYyBzdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9nZXRfYWNsX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaClcXG4ge1xcbiBcXHRpbnQgbmFtZV9pbmRleDtcXG5AQCAtMzQ5LDYzICszNDgsMTA1IEBAIGludCBvY2ZzMl9hY2xfY2htb2Qoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcXG4gICogSW5pdGlhbGl6ZSB0aGUgQUNMcyBvZiBhIG5ldyBpbm9kZS4gSWYgcGFyZW50IGRpcmVjdG9yeSBoYXMgZGVmYXVsdCBBQ0wsXFxuICAqIHRoZW4gY2xvbmUgdG8gbmV3IGlub2RlLiBDYWxsZWQgZnJvbSBvY2ZzMl9ta25vZC5cXG4gICovXFxuLWludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqaGFuZGxlLFxcbi1cXHRcXHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi1cXHRcXHQgICBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCxcXG4tXFx0XFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsXFxuLVxcdFxcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLFxcbi1cXHRcXHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYylcXG4rdm9pZCBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKVxcbit7XFxuK1xcdHBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbCk7XFxuK1xcdHBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLVxcdTAwM2VhY2wpO1xcbitcXHRzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wgPSBOVUxMO1xcbitcXHRzdGF0ZS1cXHUwMDNlYWNsID0gTlVMTDtcXG4rfVxcbitcXG4raW50IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLFxcbitcXHRcXHRcXHQgICBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSlcXG4ge1xcbiBcXHRzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4tXFx0c3RydWN0IHBvc2l4X2FjbCAqYWNsID0gTlVMTDtcXG4tXFx0aW50IHJldCA9IDAsIHJldDI7XFxuLVxcdHVtb2RlX3QgbW9kZTtcXG4tXFxuLVxcdGlmICghU19JU0xOSyhpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbi1cXHRcXHRpZiAob3NiLVxcdTAwM2VzX21vdW50X29wdCBcXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xcbi1cXHRcXHRcXHRkb3duX3JlYWQoXFx1MDAyNk9DRlMyX0koZGlyKS1cXHUwMDNlaXBfeGF0dHJfc2VtKTtcXG4tXFx0XFx0XFx0YWNsID0gb2NmczJfZ2V0X2FjbF9ub2xvY2soZGlyLCBBQ0xfVFlQRV9ERUZBVUxULFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICBkaXJfYmgpO1xcbi1cXHRcXHRcXHR1cF9yZWFkKFxcdTAwMjZPQ0ZTMl9JKGRpciktXFx1MDAzZWlwX3hhdHRyX3NlbSk7XFxuLVxcdFxcdFxcdGlmIChJU19FUlIoYWNsKSlcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoYWNsKTtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wgPSBOVUxMO1xcbitcXHRzdGF0ZS1cXHUwMDNlYWNsID0gTlVMTDtcXG4rXFx0c3RhdGUtXFx1MDAzZW1vZGUgPSBpbm9kZS1cXHUwMDNlaV9tb2RlO1xcbitcXG4rXFx0aWYgKFNfSVNMTksoaW5vZGUtXFx1MDAzZWlfbW9kZSkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcXG4rXFx0XFx0ZG93bl9yZWFkKFxcdTAwMjZPQ0ZTMl9JKGRpciktXFx1MDAzZWlwX3hhdHRyX3NlbSk7XFxuK1xcdFxcdHN0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbCA9XFxuK1xcdFxcdFxcdG9jZnMyX2dldF9hY2xfbm9sb2NrKGRpciwgQUNMX1RZUEVfREVGQVVMVCwgZGlyX2JoKTtcXG4rXFx0XFx0dXBfcmVhZChcXHUwMDI2T0NGUzJfSShkaXIpLVxcdTAwM2VpcF94YXR0cl9zZW0pO1xcbitcXHRcXHRpZiAoSVNfRVJSKHN0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbCkpIHtcXG4rXFx0XFx0XFx0cmV0ID0gUFRSX0VSUihzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wpO1xcbitcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wgPSBOVUxMO1xcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHRcXHR9XFxuLVxcdFxcdGlmICghYWNsKSB7XFxuLVxcdFxcdFxcdG1vZGUgPSBpbm9kZS1cXHUwMDNlaV9tb2RlIFxcdTAwMjYgfmN1cnJlbnRfdW1hc2soKTtcXG4tXFx0XFx0XFx0cmV0ID0gb2NmczJfYWNsX3NldF9tb2RlKGlub2RlLCBkaV9iaCwgaGFuZGxlLCBtb2RlKTtcXG4tXFx0XFx0XFx0aWYgKHJldCkge1xcbi1cXHRcXHRcXHRcXHRtbG9nX2Vycm5vKHJldCk7XFxuK1xcdFxcdGlmIChzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wpIHtcXG4rXFx0XFx0XFx0c3RhdGUtXFx1MDAzZWFjbCA9IHBvc2l4X2FjbF9kdXAoc3RhdGUtXFx1MDAzZWRlZmF1bHRfYWNsKTtcXG4rXFx0XFx0XFx0aWYgKCFzdGF0ZS1cXHUwMDNlYWNsKSB7XFxuK1xcdFxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuIFxcdFxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRyZXQgPSBfX3Bvc2l4X2FjbF9jcmVhdGUoXFx1MDAyNnN0YXRlLVxcdTAwM2VhY2wsIEdGUF9OT0ZTLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnN0YXRlLVxcdTAwM2Vtb2RlKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0XFx0XFx0aWYgKHJldCA9PSAwKSB7XFxuK1xcdFxcdFxcdFxcdHBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLVxcdTAwM2VhY2wpO1xcbitcXHRcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlYWNsID0gTlVMTDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRpZiAoIVNfSVNESVIoaW5vZGUtXFx1MDAzZWlfbW9kZSkpIHtcXG4rXFx0XFx0XFx0XFx0cG9zaXhfYWNsX3JlbGVhc2Uoc3RhdGUtXFx1MDAzZWRlZmF1bHRfYWNsKTtcXG4rXFx0XFx0XFx0XFx0c3RhdGUtXFx1MDAzZWRlZmF1bHRfYWNsID0gTlVMTDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlbW9kZSBcXHUwMDI2PSB+Y3VycmVudF91bWFzaygpO1xcbiBcXHRcXHR9XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHN0YXRlLVxcdTAwM2Vtb2RlIFxcdTAwMjY9IH5jdXJyZW50X3VtYXNrKCk7XFxuIFxcdH1cXG4tXFx0aWYgKChvc2ItXFx1MDAzZXNfbW91bnRfb3B0IFxcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSBcXHUwMDI2XFx1MDAyNiBhY2wpIHtcXG4tXFx0XFx0aWYgKFNfSVNESVIoaW5vZGUtXFx1MDAzZWlfbW9kZSkpIHtcXG4rXFxuK1xcdHJldHVybiAwO1xcbitjbGVhbnVwOlxcbitcXHRvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKHN0YXRlKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4raW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuK1xcdFxcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsXFxuK1xcdFxcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLFxcbitcXHRcXHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYyxcXG4rXFx0XFx0ICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpXFxuK3tcXG4rXFx0c3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS1cXHUwMDNlaV9zYik7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0aWYgKFNfSVNMTksoaW5vZGUtXFx1MDAzZWlfbW9kZSkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcXG4rXFx0XFx0aWYgKFNfSVNESVIoaW5vZGUtXFx1MDAzZWlfbW9kZSkgXFx1MDAyNlxcdTAwMjYgc3RhdGUtXFx1MDAzZWRlZmF1bHRfYWNsKSB7XFxuIFxcdFxcdFxcdHJldCA9IG9jZnMyX3NldF9hY2woaGFuZGxlLCBpbm9kZSwgZGlfYmgsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBBQ0xfVFlQRV9ERUZBVUxULCBhY2wsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBtZXRhX2FjLCBkYXRhX2FjKTtcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIEFDTF9UWVBFX0RFRkFVTFQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wsIG1ldGFfYWMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBkYXRhX2FjKTtcXG4gXFx0XFx0XFx0aWYgKHJldClcXG4tXFx0XFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHRcXHR9XFxuLVxcdFxcdG1vZGUgPSBpbm9kZS1cXHUwMDNlaV9tb2RlO1xcbi1cXHRcXHRyZXQgPSBfX3Bvc2l4X2FjbF9jcmVhdGUoXFx1MDAyNmFjbCwgR0ZQX05PRlMsIFxcdTAwMjZtb2RlKTtcXG4tXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4gXFxuLVxcdFxcdHJldDIgPSBvY2ZzMl9hY2xfc2V0X21vZGUoaW5vZGUsIGRpX2JoLCBoYW5kbGUsIG1vZGUpO1xcbi1cXHRcXHRpZiAocmV0Mikge1xcbi1cXHRcXHRcXHRtbG9nX2Vycm5vKHJldDIpO1xcbi1cXHRcXHRcXHRyZXQgPSByZXQyO1xcbi1cXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuLVxcdFxcdH1cXG4tXFx0XFx0aWYgKHJldCBcXHUwMDNlIDApIHtcXG4tXFx0XFx0XFx0cmV0ID0gb2NmczJfc2V0X2FjbChoYW5kbGUsIGlub2RlLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgZGlfYmgsIEFDTF9UWVBFX0FDQ0VTUyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIGFjbCwgbWV0YV9hYywgZGF0YV9hYyk7XFxuK1xcdHJldCA9IG9jZnMyX2FjbF9zZXRfbW9kZShpbm9kZSwgZGlfYmgsIGhhbmRsZSwgc3RhdGUtXFx1MDAzZW1vZGUpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdG1sb2dfZXJybm8ocmV0KTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcXG4rXFx0XFx0aWYgKHN0YXRlLVxcdTAwM2VhY2wpIHtcXG4rXFx0XFx0XFx0cmV0ID0gb2NmczJfc2V0X2FjbChoYW5kbGUsIGlub2RlLCBkaV9iaCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIEFDTF9UWVBFX0FDQ0VTUywgc3RhdGUtXFx1MDAzZWFjbCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIG1ldGFfYWMsIGRhdGFfYWMpO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4tY2xlYW51cDpcXG4tXFx0cG9zaXhfYWNsX3JlbGVhc2UoYWNsKTtcXG4rXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvYWNsLmggYi9mcy9vY2ZzMi9hY2wuaFxcbmluZGV4IDY2N2M2ZjAzZmE2MDZmLi5hOTFmOWNlMjc4ZDZkMyAxMDA2NDRcXG4tLS0gYS9mcy9vY2ZzMi9hY2wuaFxcbisrKyBiL2ZzL29jZnMyL2FjbC5oXFxuQEAgLTIwLDkgKzIwLDIwIEBAIHN0cnVjdCBwb3NpeF9hY2wgKm9jZnMyX2lvcF9nZXRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLCBib29sIHJjdSk7XFxuIGludCBvY2ZzMl9pb3Bfc2V0X2FjbChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiBcXHRcXHQgICAgICBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIGludCB0eXBlKTtcXG4gZXh0ZXJuIGludCBvY2ZzMl9hY2xfY2htb2Qoc3RydWN0IGlub2RlICosIHN0cnVjdCBidWZmZXJfaGVhZCAqKTtcXG4tZXh0ZXJuIGludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqLCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlub2RlICosXFxuLVxcdFxcdFxcdCAgc3RydWN0IGJ1ZmZlcl9oZWFkICosIHN0cnVjdCBidWZmZXJfaGVhZCAqLFxcbi1cXHRcXHRcXHQgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICosXFxuLVxcdFxcdFxcdCAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKik7XFxuK3N0cnVjdCBvY2ZzMl9hY2xfc3RhdGUge1xcbitcXHRzdHJ1Y3QgcG9zaXhfYWNsICpkZWZhdWx0X2FjbDtcXG4rXFx0c3RydWN0IHBvc2l4X2FjbCAqYWNsO1xcbitcXHR1bW9kZV90IG1vZGU7XFxuK307XFxuK1xcbitpbnQgb2NmczJfYWNsX2luaXRfcHJlcGFyZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0XFx0XFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKTtcXG4rdm9pZCBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKTtcXG4raW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuK1xcdFxcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsXFxuK1xcdFxcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLFxcbitcXHRcXHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYyxcXG4rXFx0XFx0ICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpO1xcbiBcXG4gI2VuZGlmIC8qIE9DRlMyX0FDTF9IICovXFxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL25hbWVpLmMgYi9mcy9vY2ZzMi9uYW1laS5jXFxuaW5kZXggMTI3NzY2NmM3N2NkMmQuLmQ5YWJhMTZhOGYyOGE3IDEwMDY0NFxcbi0tLSBhL2ZzL29jZnMyL25hbWVpLmNcXG4rKysgYi9mcy9vY2ZzMi9uYW1laS5jXFxuQEAgLTI1Niw2ICsyNTYsNyBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRzaWdzZXRfdCBvbGRzZXQ7XFxuIFxcdGludCBkaWRfYmxvY2tfc2lnbmFscyA9IDA7XFxuIFxcdHN0cnVjdCBvY2ZzMl9kZW50cnlfbG9jayAqZGwgPSBOVUxMO1xcbitcXHRzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlIGFjbF9zdGF0ZSA9IHsgMCB9O1xcbiBcXG4gXFx0dHJhY2Vfb2NmczJfbWtub2QoZGlyLCBkZW50cnksIGRlbnRyeS1cXHUwMDNlZF9uYW1lLmxlbiwgZGVudHJ5LVxcdTAwM2VkX25hbWUubmFtZSxcXG4gXFx0XFx0XFx0ICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koZGlyKS1cXHUwMDNlaXBfYmxrbm8sXFxuQEAgLTMzMCwxMCArMzMxLDEzIEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4rXFx0c3RhdHVzID0gb2NmczJfYWNsX2luaXRfcHJlcGFyZShpbm9kZSwgZGlyLCBwYXJlbnRfZmVfYmgsIFxcdTAwMjZhY2xfc3RhdGUpO1xcbitcXHRpZiAoc3RhdHVzIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBsZWF2ZTtcXG4rXFxuIFxcdC8qIGNhbGN1bGF0ZSBtZXRhIGRhdGEvY2x1c3RlcnMgZm9yIHNldHRpbmcgc2VjdXJpdHkgYW5kIGFjbCB4YXR0ciAqL1xcbi1cXHRzdGF0dXMgPSBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoZGlyLCBwYXJlbnRfZmVfYmgsIG1vZGUsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2c2ksIFxcdTAwMjZ3YW50X2NsdXN0ZXJzLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnhhdHRyX2NyZWRpdHMsIFxcdTAwMjZ3YW50X21ldGEpO1xcbitcXHRzdGF0dXMgPSBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoZGlyLCBtb2RlLCBcXHUwMDI2c2ksIFxcdTAwMjZ3YW50X2NsdXN0ZXJzLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnhhdHRyX2NyZWRpdHMsIFxcdTAwMjZ3YW50X21ldGEsIFxcdTAwMjZhY2xfc3RhdGUpO1xcbiBcXHRpZiAoc3RhdHVzIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRtbG9nX2Vycm5vKHN0YXR1cyk7XFxuIFxcdFxcdGdvdG8gbGVhdmU7XFxuQEAgLTQxMSw4ICs0MTUsOCBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRcXHRpbmNfbmxpbmsoZGlyKTtcXG4gXFx0fVxcbiBcXG4tXFx0c3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgZGlyLCBuZXdfZmVfYmgsIHBhcmVudF9mZV9iaCxcXG4tXFx0XFx0XFx0IG1ldGFfYWMsIGRhdGFfYWMpO1xcbitcXHRzdGF0dXMgPSBvY2ZzMl9pbml0X2FjbChoYW5kbGUsIGlub2RlLCBuZXdfZmVfYmgsIG1ldGFfYWMsIGRhdGFfYWMsXFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZhY2xfc3RhdGUpO1xcbiBcXG4gXFx0aWYgKHN0YXR1cyBcXHUwMDNjIDApIHtcXG4gXFx0XFx0bWxvZ19lcnJubyhzdGF0dXMpO1xcbkBAIC00NzcsNiArNDgxLDggQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4gXFx0YnJlbHNlKHBhcmVudF9mZV9iaCk7XFxuIFxcdGtmcmVlKHNpLnZhbHVlKTtcXG4gXFxuK1xcdG9jZnMyX2FjbF9pbml0X3JlbGVhc2UoXFx1MDAyNmFjbF9zdGF0ZSk7XFxuK1xcbiBcXHRvY2ZzMl9mcmVlX2Rpcl9sb29rdXBfcmVzdWx0KFxcdTAwMjZsb29rdXApO1xcbiBcXG4gXFx0aWYgKGlub2RlX2FjKVxcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5jIGIvZnMvb2NmczIveGF0dHIuY1xcbmluZGV4IGZjZGRkM2MxM2FjZGRkLi40Y2Y1YjY5ZDEzYjA5NSAxMDA2NDRcXG4tLS0gYS9mcy9vY2ZzMi94YXR0ci5jXFxuKysrIGIvZnMvb2NmczIveGF0dHIuY1xcbkBAIC02MTEsMTMgKzYxMSwxMCBAQCBpbnQgb2NmczJfY2FsY19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi1pbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHRcXHQgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLFxcbi1cXHRcXHRcXHQgIHVtb2RlX3QgbW9kZSxcXG4raW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLFxcbiBcXHRcXHRcXHQgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICpzaSxcXG4tXFx0XFx0XFx0ICBpbnQgKndhbnRfY2x1c3RlcnMsXFxuLVxcdFxcdFxcdCAgaW50ICp4YXR0cl9jcmVkaXRzLFxcbi1cXHRcXHRcXHQgIGludCAqd2FudF9tZXRhKVxcbitcXHRcXHRcXHQgIGludCAqd2FudF9jbHVzdGVycywgaW50ICp4YXR0cl9jcmVkaXRzLFxcbitcXHRcXHRcXHQgIGludCAqd2FudF9tZXRhLCBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICphY2xfc3RhdGUpXFxuIHtcXG4gXFx0aW50IHJldCA9IDA7XFxuIFxcdHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoZGlyLVxcdTAwM2VpX3NiKTtcXG5AQCAtNjI4LDE5ICs2MjUsMTUgQEAgaW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzaS1cXHUwMDNldmFsdWVfbGVuKTtcXG4gXFxuIFxcdGlmIChvc2ItXFx1MDAzZXNfbW91bnRfb3B0IFxcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XFxuLVxcdFxcdGRvd25fcmVhZChcXHUwMDI2T0NGUzJfSShkaXIpLVxcdTAwM2VpcF94YXR0cl9zZW0pO1xcbi1cXHRcXHRhY2xfbGVuID0gb2NmczJfeGF0dHJfZ2V0X25vbG9jayhkaXIsIGRpcl9iaCxcXG4tXFx0XFx0XFx0XFx0XFx0T0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFQsXFxuLVxcdFxcdFxcdFxcdFxcdFxcXCJcXFwiLCBOVUxMLCAwKTtcXG4tXFx0XFx0dXBfcmVhZChcXHUwMDI2T0NGUzJfSShkaXIpLVxcdTAwM2VpcF94YXR0cl9zZW0pO1xcbi1cXHRcXHRpZiAoYWNsX2xlbiBcXHUwMDNlIDApIHtcXG4tXFx0XFx0XFx0YV9zaXplID0gb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKDAsIGFjbF9sZW4pO1xcbi1cXHRcXHRcXHRpZiAoU19JU0RJUihtb2RlKSlcXG4tXFx0XFx0XFx0XFx0YV9zaXplIFxcdTAwM2NcXHUwMDNjPSAxO1xcbi1cXHRcXHR9IGVsc2UgaWYgKGFjbF9sZW4gIT0gMCBcXHUwMDI2XFx1MDAyNiBhY2xfbGVuICE9IC1FTk9EQVRBKSB7XFxuLVxcdFxcdFxcdHJldCA9IGFjbF9sZW47XFxuLVxcdFxcdFxcdG1sb2dfZXJybm8ocmV0KTtcXG4tXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0aWYgKGFjbF9zdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wgXFx1MDAyNlxcdTAwMjYgU19JU0RJUihtb2RlKSkge1xcbitcXHRcXHRcXHRhY2xfbGVuID0gYWNsX3N0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbC1cXHUwMDNlYV9jb3VudCAqXFxuK1xcdFxcdFxcdFxcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xcbitcXHRcXHRcXHRhX3NpemUgKz0gb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKDAsIGFjbF9sZW4pO1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChhY2xfc3RhdGUtXFx1MDAzZWFjbCkge1xcbitcXHRcXHRcXHRhY2xfbGVuID0gYWNsX3N0YXRlLVxcdTAwM2VhY2wtXFx1MDAzZWFfY291bnQgKlxcbitcXHRcXHRcXHRcXHQgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTtcXG4rXFx0XFx0XFx0YV9zaXplICs9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbkBAIC02ODMsMTQgKzY3NiwyOSBAQCBpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBuZXdfY2x1c3RlcnMpO1xcbiBcXHRcXHQqd2FudF9jbHVzdGVycyArPSBuZXdfY2x1c3RlcnM7XFxuIFxcdH1cXG4tXFx0aWYgKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIGFjbF9sZW4gXFx1MDAzZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkge1xcbi1cXHRcXHQvKiBmb3IgZGlyZWN0b3J5LCBpdCBoYXMgREVGQVVMVCBhbmQgQUNDRVNTIHR3byB0eXBlcyBvZiBhY2xzICovXFxuLVxcdFxcdG5ld19jbHVzdGVycyA9IChTX0lTRElSKG1vZGUpID8gMiA6IDEpICpcXG4tXFx0XFx0XFx0XFx0b2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGRpci1cXHUwMDNlaV9zYiwgYWNsX2xlbik7XFxuLVxcdFxcdCp4YXR0cl9jcmVkaXRzICs9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhkaXItXFx1MDAzZWlfc2IsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIG5ld19jbHVzdGVycyk7XFxuLVxcdFxcdCp3YW50X2NsdXN0ZXJzICs9IG5ld19jbHVzdGVycztcXG4rXFx0aWYgKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcXG4rXFx0XFx0aWYgKGFjbF9zdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wgXFx1MDAyNlxcdTAwMjYgU19JU0RJUihtb2RlKSkge1xcbitcXHRcXHRcXHRhY2xfbGVuID0gYWNsX3N0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbC1cXHUwMDNlYV9jb3VudCAqXFxuK1xcdFxcdFxcdFxcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xcbitcXHRcXHRcXHRpZiAoYWNsX2xlbiBcXHUwMDNlIE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7XFxuK1xcdFxcdFxcdFxcdG5ld19jbHVzdGVycyA9IG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhkaXItXFx1MDAzZWlfc2IsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGFjbF9sZW4pO1xcbitcXHRcXHRcXHRcXHQqeGF0dHJfY3JlZGl0cyArPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoZGlyLVxcdTAwM2VpX3NiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBuZXdfY2x1c3RlcnMpO1xcbitcXHRcXHRcXHRcXHQqd2FudF9jbHVzdGVycyArPSBuZXdfY2x1c3RlcnM7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAoYWNsX3N0YXRlLVxcdTAwM2VhY2wpIHtcXG4rXFx0XFx0XFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cXHUwMDNlYWNsLVxcdTAwM2VhX2NvdW50ICpcXG4rXFx0XFx0XFx0XFx0ICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7XFxuK1xcdFxcdFxcdGlmIChhY2xfbGVuIFxcdTAwM2UgT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpIHtcXG4rXFx0XFx0XFx0XFx0bmV3X2NsdXN0ZXJzID0gb2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGRpci1cXHUwMDNlaV9zYixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0YWNsX2xlbik7XFxuK1xcdFxcdFxcdFxcdCp4YXR0cl9jcmVkaXRzICs9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhkaXItXFx1MDAzZWlfc2IsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIG5ld19jbHVzdGVycyk7XFxuK1xcdFxcdFxcdFxcdCp3YW50X2NsdXN0ZXJzICs9IG5ld19jbHVzdGVycztcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuQEAgLTM1NDIsOCArMzU1MCw2IEBAIGludCBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICpoYW5kbGUsXFxuIFxcdHhpcy5pbm9kZV9iaCA9IHhicy5pbm9kZV9iaCA9IGRpX2JoO1xcbiBcXHRkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopZGlfYmgtXFx1MDAzZWJfZGF0YTtcXG4gXFxuLVxcdGRvd25fd3JpdGUoXFx1MDAyNk9DRlMyX0koaW5vZGUpLVxcdTAwM2VpcF94YXR0cl9zZW0pO1xcbi1cXG4gXFx0cmV0ID0gb2NmczJfeGF0dHJfaWJvZHlfZmluZChpbm9kZSwgbmFtZV9pbmRleCwgbmFtZSwgXFx1MDAyNnhpcyk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG5AQCAtMzU1Niw3ICszNTYyLDYgQEAgaW50IG9jZnMyX3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSxcXG4gXFx0cmV0ID0gX19vY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGlub2RlLCBkaSwgXFx1MDAyNnhpLCBcXHUwMDI2eGlzLCBcXHUwMDI2eGJzLCBcXHUwMDI2Y3R4dCk7XFxuIFxcbiBjbGVhbnVwOlxcbi1cXHR1cF93cml0ZShcXHUwMDI2T0NGUzJfSShpbm9kZSktXFx1MDAzZWlwX3hhdHRyX3NlbSk7XFxuIFxcdGJyZWxzZSh4YnMueGF0dHJfYmgpO1xcbiBcXHRvY2ZzMl94YXR0cl9idWNrZXRfZnJlZSh4YnMuYnVja2V0KTtcXG4gXFxuQEAgLTcyNTcsNiArNzI2Miw3IEBAIGludCBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2woc3RydWN0IGlub2RlICpkaXIsXFxuIHtcXG4gXFx0aW50IHJldCA9IDA7XFxuIFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoID0gTlVMTDtcXG4rXFx0c3RydWN0IG9jZnMyX2FjbF9zdGF0ZSBhY2xfc3RhdGUgPSB7IDAgfTtcXG4gXFxuIFxcdHJldCA9IG9jZnMyX2luaXRfc2VjdXJpdHlfZ2V0KGlub2RlLCBkaXIsIHFzdHIsIE5VTEwpO1xcbiBcXHRpZiAocmV0KSB7XFxuQEAgLTcyNjksMTAgKzcyNzUsMTcgQEAgaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0XFx0bWxvZ19lcnJubyhyZXQpO1xcbiBcXHRcXHRnb3RvIGxlYXZlO1xcbiBcXHR9XFxuLVxcdHJldCA9IG9jZnMyX2luaXRfYWNsKE5VTEwsIGlub2RlLCBkaXIsIE5VTEwsIGRpcl9iaCwgTlVMTCwgTlVMTCk7XFxuK1xcbitcXHRyZXQgPSBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKGlub2RlLCBkaXIsIGRpcl9iaCwgXFx1MDAyNmFjbF9zdGF0ZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gdW5sb2NrO1xcbitcXG4rXFx0cmV0ID0gb2NmczJfaW5pdF9hY2woTlVMTCwgaW5vZGUsIE5VTEwsIE5VTEwsIE5VTEwsIFxcdTAwMjZhY2xfc3RhdGUpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRtbG9nX2Vycm5vKHJldCk7XFxuIFxcbit1bmxvY2s6XFxuK1xcdG9jZnMyX2FjbF9pbml0X3JlbGVhc2UoXFx1MDAyNmFjbF9zdGF0ZSk7XFxuIFxcdG9jZnMyX2lub2RlX3VubG9jayhkaXIsIDApO1xcbiBcXHRicmVsc2UoZGlyX2JoKTtcXG4gbGVhdmU6XFxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3hhdHRyLmggYi9mcy9vY2ZzMi94YXR0ci5oXFxuaW5kZXggNjVlOWFhNzQzOTE5OWUuLjVjZGQ2YzZiNDAwNjRiIDEwMDY0NFxcbi0tLSBhL2ZzL29jZnMyL3hhdHRyLmhcXG4rKysgYi9mcy9vY2ZzMi94YXR0ci5oXFxuQEAgLTU1LDkgKzU1LDEyIEBAIGludCBvY2ZzMl9pbml0X3NlY3VyaXR5X3NldChoYW5kbGVfdCAqLCBzdHJ1Y3QgaW5vZGUgKixcXG4gaW50IG9jZnMyX2NhbGNfc2VjdXJpdHlfaW5pdChzdHJ1Y3QgaW5vZGUgKixcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqLFxcbiBcXHRcXHRcXHQgICAgIGludCAqLCBpbnQgKiwgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKiopO1xcbi1pbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKixcXG4tXFx0XFx0XFx0ICB1bW9kZV90LCBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqLFxcbi1cXHRcXHRcXHQgIGludCAqLCBpbnQgKiwgaW50ICopO1xcbitcXG4rc3RydWN0IG9jZnMyX2FjbF9zdGF0ZTtcXG4raW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLFxcbitcXHRcXHRcXHQgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICpzaSxcXG4rXFx0XFx0XFx0ICBpbnQgKndhbnRfY2x1c3RlcnMsIGludCAqeGF0dHJfY3JlZGl0cyxcXG4rXFx0XFx0XFx0ICBpbnQgKndhbnRfbWV0YSwgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqYWNsX3N0YXRlKTtcXG4gXFxuIC8qXFxuICAqIHhhdHRycyBjYW4gbGl2ZSBpbnNpZGUgYW4gaW5vZGUsIGFzIHBhcnQgb2YgYW4gZXh0ZXJuYWwgeGF0dHIgYmxvY2ssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE5OjQyOjM2LjgzNDMzODYzNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjMzMzYwMDI5NzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9DRlMyX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib2NmczJfYWNsX2luaXRfcHJlcGFyZVwiLFxuICAgIFwib2NmczJfaW5pdF9hY2xcIixcbiAgICBcIm9jZnMyX2NhbGNfeGF0dHJfaW5pdFwiLFxuICAgIFwib2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsXCIsXG4gICAgXCJvY2ZzMl94YXR0cl9zZXRfaGFuZGxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIEFDTCBpbml0aWFsaXphdGlvbiBpbiBPQ0ZTMiwgaW50cm9kdWNpbmcgbmV3IGZ1bmN0aW9ucyBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAgYW5kIGBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlYCwgYW5kIG1vZGlmeWluZyBgb2NmczJfaW5pdF9hY2xgIGFuZCBgb2NmczJfY2FsY194YXR0cl9pbml0YC4gSXQgYWxzbyByZW1vdmVzIGEgbG9jayAoYGlwX3hhdHRyX3NlbWApIGZyb20gYG9jZnMyX3hhdHRyX3NldF9oYW5kbGVgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBmaWxlc3lzdGVtJ3MgY29yZSBsb2dpYyBhbmQgeGF0dHIgaGFuZGxpbmcsIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHN0YW5kYXJkIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyAoZS5nLiwgbWtub2QsIG1rZGlyLCBzZXR4YXR0cikuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIG1vZGlmaWVkIGZ1bmN0aW9ucyB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgY29uY3VycmVuY3kgaXNzdWVzIChkdWUgdG8gdGhlIHJlbW92ZWQgbG9jaykgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjkwNmY2MzQ2MjRkMGZmYjA1Yjg1NDZlODRjMGE1NzI2ODE1NWMwNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDIyIDE5OjQyOjM0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvYWNsLmMgYi9mcy9vY2ZzMi9hY2wuY1xuaW5kZXggYWYxZTJjZWRiMjE3ZjEuLjA5MGVjNjBmYjU3NmE2IDEwMDY0NFxuLS0tIGEvZnMvb2NmczIvYWNsLmNcbisrKyBiL2ZzL29jZnMyL2FjbC5jXG5AQCAtMTEwLDggKzExMCw3IEBAIHN0YXRpYyB2b2lkICpvY2ZzMl9hY2xfdG9feGF0dHIoY29uc3Qgc3RydWN0IHBvc2l4X2FjbCAqYWNsLCBzaXplX3QgKnNpemUpXG4gXHRyZXR1cm4gb2NmczJfYWNsO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IHBvc2l4X2FjbCAqb2NmczJfZ2V0X2FjbF9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSxcbi1cdFx0XHRcdFx0ICAgICAgaW50IHR5cGUsXG4rc3RhdGljIHN0cnVjdCBwb3NpeF9hY2wgKm9jZnMyX2dldF9hY2xfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLFxuIFx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoKVxuIHtcbiBcdGludCBuYW1lX2luZGV4O1xuQEAgLTM0OSw2MyArMzQ4LDEwNSBAQCBpbnQgb2NmczJfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG4gICogSW5pdGlhbGl6ZSB0aGUgQUNMcyBvZiBhIG5ldyBpbm9kZS4gSWYgcGFyZW50IGRpcmVjdG9yeSBoYXMgZGVmYXVsdCBBQ0wsXG4gICogdGhlbiBjbG9uZSB0byBuZXcgaW5vZGUuIENhbGxlZCBmcm9tIG9jZnMyX21rbm9kLlxuICAqL1xuLWludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqaGFuZGxlLFxuLVx0XHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHQgICBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCxcbi1cdFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsXG4tXHRcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLFxuLVx0XHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYylcbit2b2lkIG9jZnMyX2FjbF9pbml0X3JlbGVhc2Uoc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpXG4re1xuK1x0cG9zaXhfYWNsX3JlbGVhc2Uoc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wpO1xuK1x0cG9zaXhfYWNsX3JlbGVhc2Uoc3RhdGUtXHUwMDNlYWNsKTtcbitcdHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsID0gTlVMTDtcbitcdHN0YXRlLVx1MDAzZWFjbCA9IE5VTEw7XG4rfVxuK1xuK2ludCBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLFxuK1x0XHRcdCAgIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKVxuIHtcbiBcdHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4tXHRzdHJ1Y3QgcG9zaXhfYWNsICphY2wgPSBOVUxMO1xuLVx0aW50IHJldCA9IDAsIHJldDI7XG4tXHR1bW9kZV90IG1vZGU7XG4tXG4tXHRpZiAoIVNfSVNMTksoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuLVx0XHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbi1cdFx0XHRkb3duX3JlYWQoXHUwMDI2T0NGUzJfSShkaXIpLVx1MDAzZWlwX3hhdHRyX3NlbSk7XG4tXHRcdFx0YWNsID0gb2NmczJfZ2V0X2FjbF9ub2xvY2soZGlyLCBBQ0xfVFlQRV9ERUZBVUxULFxuLVx0XHRcdFx0XHRcdCAgIGRpcl9iaCk7XG4tXHRcdFx0dXBfcmVhZChcdTAwMjZPQ0ZTMl9JKGRpciktXHUwMDNlaXBfeGF0dHJfc2VtKTtcbi1cdFx0XHRpZiAoSVNfRVJSKGFjbCkpXG4tXHRcdFx0XHRyZXR1cm4gUFRSX0VSUihhY2wpO1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCA9IE5VTEw7XG4rXHRzdGF0ZS1cdTAwM2VhY2wgPSBOVUxMO1xuK1x0c3RhdGUtXHUwMDNlbW9kZSA9IGlub2RlLVx1MDAzZWlfbW9kZTtcbitcbitcdGlmIChTX0lTTE5LKGlub2RlLVx1MDAzZWlfbW9kZSkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG4rXHRcdGRvd25fcmVhZChcdTAwMjZPQ0ZTMl9JKGRpciktXHUwMDNlaXBfeGF0dHJfc2VtKTtcbitcdFx0c3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wgPVxuK1x0XHRcdG9jZnMyX2dldF9hY2xfbm9sb2NrKGRpciwgQUNMX1RZUEVfREVGQVVMVCwgZGlyX2JoKTtcbitcdFx0dXBfcmVhZChcdTAwMjZPQ0ZTMl9JKGRpciktXHUwMDNlaXBfeGF0dHJfc2VtKTtcbitcdFx0aWYgKElTX0VSUihzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCkpIHtcbitcdFx0XHRyZXQgPSBQVFJfRVJSKHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKTtcbitcdFx0XHRzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCA9IE5VTEw7XG4rXHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0fVxuLVx0XHRpZiAoIWFjbCkge1xuLVx0XHRcdG1vZGUgPSBpbm9kZS1cdTAwM2VpX21vZGUgXHUwMDI2IH5jdXJyZW50X3VtYXNrKCk7XG4tXHRcdFx0cmV0ID0gb2NmczJfYWNsX3NldF9tb2RlKGlub2RlLCBkaV9iaCwgaGFuZGxlLCBtb2RlKTtcbi1cdFx0XHRpZiAocmV0KSB7XG4tXHRcdFx0XHRtbG9nX2Vycm5vKHJldCk7XG4rXHRcdGlmIChzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCkge1xuK1x0XHRcdHN0YXRlLVx1MDAzZWFjbCA9IHBvc2l4X2FjbF9kdXAoc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wpO1xuK1x0XHRcdGlmICghc3RhdGUtXHUwMDNlYWNsKSB7XG4rXHRcdFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRcdFx0Z290byBjbGVhbnVwO1xuIFx0XHRcdH1cbitcdFx0XHRyZXQgPSBfX3Bvc2l4X2FjbF9jcmVhdGUoXHUwMDI2c3RhdGUtXHUwMDNlYWNsLCBHRlBfTk9GUyxcbitcdFx0XHRcdFx0XHQgXHUwMDI2c3RhdGUtXHUwMDNlbW9kZSk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gY2xlYW51cDtcbitcdFx0XHRpZiAocmV0ID09IDApIHtcbitcdFx0XHRcdHBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLVx1MDAzZWFjbCk7XG4rXHRcdFx0XHRzdGF0ZS1cdTAwM2VhY2wgPSBOVUxMO1xuK1x0XHRcdH1cbitcdFx0XHRpZiAoIVNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuK1x0XHRcdFx0cG9zaXhfYWNsX3JlbGVhc2Uoc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wpO1xuK1x0XHRcdFx0c3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wgPSBOVUxMO1xuK1x0XHRcdH1cbitcdFx0fSBlbHNlIHtcbitcdFx0XHRzdGF0ZS1cdTAwM2Vtb2RlIFx1MDAyNj0gfmN1cnJlbnRfdW1hc2soKTtcbiBcdFx0fVxuK1x0fSBlbHNlIHtcbitcdFx0c3RhdGUtXHUwMDNlbW9kZSBcdTAwMjY9IH5jdXJyZW50X3VtYXNrKCk7XG4gXHR9XG4tXHRpZiAoKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSBcdTAwMjZcdTAwMjYgYWNsKSB7XG4tXHRcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbitcbitcdHJldHVybiAwO1xuK2NsZWFudXA6XG4rXHRvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKHN0YXRlKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK2ludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuK1x0XHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLFxuK1x0XHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYyxcbitcdFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMsXG4rXHRcdCAgIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKVxuK3tcbitcdHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdGlmIChTX0lTTE5LKGlub2RlLVx1MDAzZWlfbW9kZSkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG4rXHRcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkgXHUwMDI2XHUwMDI2IHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKSB7XG4gXHRcdFx0cmV0ID0gb2NmczJfc2V0X2FjbChoYW5kbGUsIGlub2RlLCBkaV9iaCxcbi1cdFx0XHRcdFx0ICAgIEFDTF9UWVBFX0RFRkFVTFQsIGFjbCxcbi1cdFx0XHRcdFx0ICAgIG1ldGFfYWMsIGRhdGFfYWMpO1xuK1x0XHRcdFx0XHQgICAgQUNMX1RZUEVfREVGQVVMVCxcbitcdFx0XHRcdFx0ICAgIHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsLCBtZXRhX2FjLFxuK1x0XHRcdFx0XHQgICAgZGF0YV9hYyk7XG4gXHRcdFx0aWYgKHJldClcbi1cdFx0XHRcdGdvdG8gY2xlYW51cDtcbitcdFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdH1cbi1cdFx0bW9kZSA9IGlub2RlLVx1MDAzZWlfbW9kZTtcbi1cdFx0cmV0ID0gX19wb3NpeF9hY2xfY3JlYXRlKFx1MDAyNmFjbCwgR0ZQX05PRlMsIFx1MDAyNm1vZGUpO1xuLVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4gXG4tXHRcdHJldDIgPSBvY2ZzMl9hY2xfc2V0X21vZGUoaW5vZGUsIGRpX2JoLCBoYW5kbGUsIG1vZGUpO1xuLVx0XHRpZiAocmV0Mikge1xuLVx0XHRcdG1sb2dfZXJybm8ocmV0Mik7XG4tXHRcdFx0cmV0ID0gcmV0Mjtcbi1cdFx0XHRnb3RvIGNsZWFudXA7XG4tXHRcdH1cbi1cdFx0aWYgKHJldCBcdTAwM2UgMCkge1xuLVx0XHRcdHJldCA9IG9jZnMyX3NldF9hY2woaGFuZGxlLCBpbm9kZSxcbi1cdFx0XHRcdFx0ICAgIGRpX2JoLCBBQ0xfVFlQRV9BQ0NFU1MsXG4tXHRcdFx0XHRcdCAgICBhY2wsIG1ldGFfYWMsIGRhdGFfYWMpO1xuK1x0cmV0ID0gb2NmczJfYWNsX3NldF9tb2RlKGlub2RlLCBkaV9iaCwgaGFuZGxlLCBzdGF0ZS1cdTAwM2Vtb2RlKTtcbitcdGlmIChyZXQpIHtcbitcdFx0bWxvZ19lcnJubyhyZXQpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG4rXHRcdGlmIChzdGF0ZS1cdTAwM2VhY2wpIHtcbitcdFx0XHRyZXQgPSBvY2ZzMl9zZXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpX2JoLFxuK1x0XHRcdFx0XHQgICAgQUNMX1RZUEVfQUNDRVNTLCBzdGF0ZS1cdTAwM2VhY2wsXG4rXHRcdFx0XHRcdCAgICBtZXRhX2FjLCBkYXRhX2FjKTtcbiBcdFx0fVxuIFx0fVxuLWNsZWFudXA6XG4tXHRwb3NpeF9hY2xfcmVsZWFzZShhY2wpO1xuK1xuIFx0cmV0dXJuIHJldDtcbiB9XG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvYWNsLmggYi9mcy9vY2ZzMi9hY2wuaFxuaW5kZXggNjY3YzZmMDNmYTYwNmYuLmE5MWY5Y2UyNzhkNmQzIDEwMDY0NFxuLS0tIGEvZnMvb2NmczIvYWNsLmhcbisrKyBiL2ZzL29jZnMyL2FjbC5oXG5AQCAtMjAsOSArMjAsMjAgQEAgc3RydWN0IHBvc2l4X2FjbCAqb2NmczJfaW9wX2dldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsIGJvb2wgcmN1KTtcbiBpbnQgb2NmczJfaW9wX3NldF9hY2woc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdFx0ICAgICAgc3RydWN0IHBvc2l4X2FjbCAqYWNsLCBpbnQgdHlwZSk7XG4gZXh0ZXJuIGludCBvY2ZzMl9hY2xfY2htb2Qoc3RydWN0IGlub2RlICosIHN0cnVjdCBidWZmZXJfaGVhZCAqKTtcbi1leHRlcm4gaW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKixcbi1cdFx0XHQgIHN0cnVjdCBidWZmZXJfaGVhZCAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKixcbi1cdFx0XHQgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICosXG4tXHRcdFx0ICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKTtcbitzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlIHtcbitcdHN0cnVjdCBwb3NpeF9hY2wgKmRlZmF1bHRfYWNsO1xuK1x0c3RydWN0IHBvc2l4X2FjbCAqYWNsO1xuK1x0dW1vZGVfdCBtb2RlO1xuK307XG4rXG4raW50IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsXG4rXHRcdFx0ICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpO1xuK3ZvaWQgb2NmczJfYWNsX2luaXRfcmVsZWFzZShzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSk7XG4raW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rXHRcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsXG4rXHRcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLFxuK1x0XHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYyxcbitcdFx0ICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpO1xuIFxuICNlbmRpZiAvKiBPQ0ZTMl9BQ0xfSCAqL1xuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL25hbWVpLmMgYi9mcy9vY2ZzMi9uYW1laS5jXG5pbmRleCAxMjc3NjY2Yzc3Y2QyZC4uZDlhYmExNmE4ZjI4YTcgMTAwNjQ0XG4tLS0gYS9mcy9vY2ZzMi9uYW1laS5jXG4rKysgYi9mcy9vY2ZzMi9uYW1laS5jXG5AQCAtMjU2LDYgKzI1Niw3IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRzaWdzZXRfdCBvbGRzZXQ7XG4gXHRpbnQgZGlkX2Jsb2NrX3NpZ25hbHMgPSAwO1xuIFx0c3RydWN0IG9jZnMyX2RlbnRyeV9sb2NrICpkbCA9IE5VTEw7XG4rXHRzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlIGFjbF9zdGF0ZSA9IHsgMCB9O1xuIFxuIFx0dHJhY2Vfb2NmczJfbWtub2QoZGlyLCBkZW50cnksIGRlbnRyeS1cdTAwM2VkX25hbWUubGVuLCBkZW50cnktXHUwMDNlZF9uYW1lLm5hbWUsXG4gXHRcdFx0ICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koZGlyKS1cdTAwM2VpcF9ibGtubyxcbkBAIC0zMzAsMTAgKzMzMSwxMyBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHR9XG4gXHR9XG4gXG4rXHRzdGF0dXMgPSBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKGlub2RlLCBkaXIsIHBhcmVudF9mZV9iaCwgXHUwMDI2YWNsX3N0YXRlKTtcbitcdGlmIChzdGF0dXMgXHUwMDNjIDApXG4rXHRcdGdvdG8gbGVhdmU7XG4rXG4gXHQvKiBjYWxjdWxhdGUgbWV0YSBkYXRhL2NsdXN0ZXJzIGZvciBzZXR0aW5nIHNlY3VyaXR5IGFuZCBhY2wgeGF0dHIgKi9cbi1cdHN0YXR1cyA9IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChkaXIsIHBhcmVudF9mZV9iaCwgbW9kZSxcbi1cdFx0XHRcdCAgICAgICBcdTAwMjZzaSwgXHUwMDI2d2FudF9jbHVzdGVycyxcbi1cdFx0XHRcdCAgICAgICBcdTAwMjZ4YXR0cl9jcmVkaXRzLCBcdTAwMjZ3YW50X21ldGEpO1xuK1x0c3RhdHVzID0gb2NmczJfY2FsY194YXR0cl9pbml0KGRpciwgbW9kZSwgXHUwMDI2c2ksIFx1MDAyNndhbnRfY2x1c3RlcnMsXG4rXHRcdFx0XHQgICAgICAgXHUwMDI2eGF0dHJfY3JlZGl0cywgXHUwMDI2d2FudF9tZXRhLCBcdTAwMjZhY2xfc3RhdGUpO1xuIFx0aWYgKHN0YXR1cyBcdTAwM2MgMCkge1xuIFx0XHRtbG9nX2Vycm5vKHN0YXR1cyk7XG4gXHRcdGdvdG8gbGVhdmU7XG5AQCAtNDExLDggKzQxNSw4IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdGluY19ubGluayhkaXIpO1xuIFx0fVxuIFxuLVx0c3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgZGlyLCBuZXdfZmVfYmgsIHBhcmVudF9mZV9iaCxcbi1cdFx0XHQgbWV0YV9hYywgZGF0YV9hYyk7XG4rXHRzdGF0dXMgPSBvY2ZzMl9pbml0X2FjbChoYW5kbGUsIGlub2RlLCBuZXdfZmVfYmgsIG1ldGFfYWMsIGRhdGFfYWMsXG4rXHRcdFx0XHRcdTAwMjZhY2xfc3RhdGUpO1xuIFxuIFx0aWYgKHN0YXR1cyBcdTAwM2MgMCkge1xuIFx0XHRtbG9nX2Vycm5vKHN0YXR1cyk7XG5AQCAtNDc3LDYgKzQ4MSw4IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRicmVsc2UocGFyZW50X2ZlX2JoKTtcbiBcdGtmcmVlKHNpLnZhbHVlKTtcbiBcbitcdG9jZnMyX2FjbF9pbml0X3JlbGVhc2UoXHUwMDI2YWNsX3N0YXRlKTtcbitcbiBcdG9jZnMyX2ZyZWVfZGlyX2xvb2t1cF9yZXN1bHQoXHUwMDI2bG9va3VwKTtcbiBcbiBcdGlmIChpbm9kZV9hYylcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5jIGIvZnMvb2NmczIveGF0dHIuY1xuaW5kZXggZmNkZGQzYzEzYWNkZGQuLjRjZjViNjlkMTNiMDk1IDEwMDY0NFxuLS0tIGEvZnMvb2NmczIveGF0dHIuY1xuKysrIGIvZnMvb2NmczIveGF0dHIuY1xuQEAgLTYxMSwxMyArNjExLDEwIEBAIGludCBvY2ZzMl9jYWxjX3NlY3VyaXR5X2luaXQoc3RydWN0IGlub2RlICpkaXIsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1pbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdCAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsXG4tXHRcdFx0ICB1bW9kZV90IG1vZGUsXG4raW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLFxuIFx0XHRcdCAgc3RydWN0IG9jZnMyX3NlY3VyaXR5X3hhdHRyX2luZm8gKnNpLFxuLVx0XHRcdCAgaW50ICp3YW50X2NsdXN0ZXJzLFxuLVx0XHRcdCAgaW50ICp4YXR0cl9jcmVkaXRzLFxuLVx0XHRcdCAgaW50ICp3YW50X21ldGEpXG4rXHRcdFx0ICBpbnQgKndhbnRfY2x1c3RlcnMsIGludCAqeGF0dHJfY3JlZGl0cyxcbitcdFx0XHQgIGludCAqd2FudF9tZXRhLCBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICphY2xfc3RhdGUpXG4ge1xuIFx0aW50IHJldCA9IDA7XG4gXHRzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGRpci1cdTAwM2VpX3NiKTtcbkBAIC02MjgsMTkgKzYyNSwxNSBAQCBpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdFx0XHRcdCAgICAgc2ktXHUwMDNldmFsdWVfbGVuKTtcbiBcbiBcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuLVx0XHRkb3duX3JlYWQoXHUwMDI2T0NGUzJfSShkaXIpLVx1MDAzZWlwX3hhdHRyX3NlbSk7XG4tXHRcdGFjbF9sZW4gPSBvY2ZzMl94YXR0cl9nZXRfbm9sb2NrKGRpciwgZGlyX2JoLFxuLVx0XHRcdFx0XHRPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfREVGQVVMVCxcbi1cdFx0XHRcdFx0XCJcIiwgTlVMTCwgMCk7XG4tXHRcdHVwX3JlYWQoXHUwMDI2T0NGUzJfSShkaXIpLVx1MDAzZWlwX3hhdHRyX3NlbSk7XG4tXHRcdGlmIChhY2xfbGVuIFx1MDAzZSAwKSB7XG4tXHRcdFx0YV9zaXplID0gb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKDAsIGFjbF9sZW4pO1xuLVx0XHRcdGlmIChTX0lTRElSKG1vZGUpKVxuLVx0XHRcdFx0YV9zaXplIFx1MDAzY1x1MDAzYz0gMTtcbi1cdFx0fSBlbHNlIGlmIChhY2xfbGVuICE9IDAgXHUwMDI2XHUwMDI2IGFjbF9sZW4gIT0gLUVOT0RBVEEpIHtcbi1cdFx0XHRyZXQgPSBhY2xfbGVuO1xuLVx0XHRcdG1sb2dfZXJybm8ocmV0KTtcbi1cdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRpZiAoYWNsX3N0YXRlLVx1MDAzZWRlZmF1bHRfYWNsIFx1MDAyNlx1MDAyNiBTX0lTRElSKG1vZGUpKSB7XG4rXHRcdFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbC1cdTAwM2VhX2NvdW50ICpcbitcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xuK1x0XHRcdGFfc2l6ZSArPSBvY2ZzMl94YXR0cl9lbnRyeV9yZWFsX3NpemUoMCwgYWNsX2xlbik7XG4rXHRcdH1cbitcdFx0aWYgKGFjbF9zdGF0ZS1cdTAwM2VhY2wpIHtcbitcdFx0XHRhY2xfbGVuID0gYWNsX3N0YXRlLVx1MDAzZWFjbC1cdTAwM2VhX2NvdW50ICpcbitcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xuK1x0XHRcdGFfc2l6ZSArPSBvY2ZzMl94YXR0cl9lbnRyeV9yZWFsX3NpemUoMCwgYWNsX2xlbik7XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC02ODMsMTQgKzY3NiwyOSBAQCBpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdFx0XHRcdFx0ICAgbmV3X2NsdXN0ZXJzKTtcbiBcdFx0KndhbnRfY2x1c3RlcnMgKz0gbmV3X2NsdXN0ZXJzO1xuIFx0fVxuLVx0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMIFx1MDAyNlx1MDAyNlxuLVx0ICAgIGFjbF9sZW4gXHUwMDNlIE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7XG4tXHRcdC8qIGZvciBkaXJlY3RvcnksIGl0IGhhcyBERUZBVUxUIGFuZCBBQ0NFU1MgdHdvIHR5cGVzIG9mIGFjbHMgKi9cbi1cdFx0bmV3X2NsdXN0ZXJzID0gKFNfSVNESVIobW9kZSkgPyAyIDogMSkgKlxuLVx0XHRcdFx0b2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGRpci1cdTAwM2VpX3NiLCBhY2xfbGVuKTtcbi1cdFx0KnhhdHRyX2NyZWRpdHMgKz0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGRpci1cdTAwM2VpX3NiLFxuLVx0XHRcdFx0XHRcdFx0ICAgbmV3X2NsdXN0ZXJzKTtcbi1cdFx0KndhbnRfY2x1c3RlcnMgKz0gbmV3X2NsdXN0ZXJzO1xuK1x0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG4rXHRcdGlmIChhY2xfc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wgXHUwMDI2XHUwMDI2IFNfSVNESVIobW9kZSkpIHtcbitcdFx0XHRhY2xfbGVuID0gYWNsX3N0YXRlLVx1MDAzZWRlZmF1bHRfYWNsLVx1MDAzZWFfY291bnQgKlxuK1x0XHRcdFx0ICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7XG4rXHRcdFx0aWYgKGFjbF9sZW4gXHUwMDNlIE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7XG4rXHRcdFx0XHRuZXdfY2x1c3RlcnMgPSBvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoZGlyLVx1MDAzZWlfc2IsXG4rXHRcdFx0XHRcdFx0XHRcdFx0YWNsX2xlbik7XG4rXHRcdFx0XHQqeGF0dHJfY3JlZGl0cyArPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoZGlyLVx1MDAzZWlfc2IsXG4rXHRcdFx0XHRcdFx0XHRcdFx0ICAgbmV3X2NsdXN0ZXJzKTtcbitcdFx0XHRcdCp3YW50X2NsdXN0ZXJzICs9IG5ld19jbHVzdGVycztcbitcdFx0XHR9XG4rXHRcdH1cbitcdFx0aWYgKGFjbF9zdGF0ZS1cdTAwM2VhY2wpIHtcbitcdFx0XHRhY2xfbGVuID0gYWNsX3N0YXRlLVx1MDAzZWFjbC1cdTAwM2VhX2NvdW50ICpcbitcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xuK1x0XHRcdGlmIChhY2xfbGVuIFx1MDAzZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkge1xuK1x0XHRcdFx0bmV3X2NsdXN0ZXJzID0gb2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGRpci1cdTAwM2VpX3NiLFxuK1x0XHRcdFx0XHRcdFx0XHRcdGFjbF9sZW4pO1xuK1x0XHRcdFx0KnhhdHRyX2NyZWRpdHMgKz0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGRpci1cdTAwM2VpX3NiLFxuK1x0XHRcdFx0XHRcdFx0XHRcdCAgIG5ld19jbHVzdGVycyk7XG4rXHRcdFx0XHQqd2FudF9jbHVzdGVycyArPSBuZXdfY2x1c3RlcnM7XG4rXHRcdFx0fVxuK1x0XHR9XG4gXHR9XG4gXG4gXHRyZXR1cm4gcmV0O1xuQEAgLTM1NDIsOCArMzU1MCw2IEBAIGludCBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICpoYW5kbGUsXG4gXHR4aXMuaW5vZGVfYmggPSB4YnMuaW5vZGVfYmggPSBkaV9iaDtcbiBcdGRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilkaV9iaC1cdTAwM2ViX2RhdGE7XG4gXG4tXHRkb3duX3dyaXRlKFx1MDAyNk9DRlMyX0koaW5vZGUpLVx1MDAzZWlwX3hhdHRyX3NlbSk7XG4tXG4gXHRyZXQgPSBvY2ZzMl94YXR0cl9pYm9keV9maW5kKGlub2RlLCBuYW1lX2luZGV4LCBuYW1lLCBcdTAwMjZ4aXMpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBjbGVhbnVwO1xuQEAgLTM1NTYsNyArMzU2Miw2IEBAIGludCBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRyZXQgPSBfX29jZnMyX3hhdHRyX3NldF9oYW5kbGUoaW5vZGUsIGRpLCBcdTAwMjZ4aSwgXHUwMDI2eGlzLCBcdTAwMjZ4YnMsIFx1MDAyNmN0eHQpO1xuIFxuIGNsZWFudXA6XG4tXHR1cF93cml0ZShcdTAwMjZPQ0ZTMl9JKGlub2RlKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuIFx0YnJlbHNlKHhicy54YXR0cl9iaCk7XG4gXHRvY2ZzMl94YXR0cl9idWNrZXRfZnJlZSh4YnMuYnVja2V0KTtcbiBcbkBAIC03MjU3LDYgKzcyNjIsNyBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLFxuIHtcbiBcdGludCByZXQgPSAwO1xuIFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmggPSBOVUxMO1xuK1x0c3RydWN0IG9jZnMyX2FjbF9zdGF0ZSBhY2xfc3RhdGUgPSB7IDAgfTtcbiBcbiBcdHJldCA9IG9jZnMyX2luaXRfc2VjdXJpdHlfZ2V0KGlub2RlLCBkaXIsIHFzdHIsIE5VTEwpO1xuIFx0aWYgKHJldCkge1xuQEAgLTcyNjksMTAgKzcyNzUsMTcgQEAgaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0bWxvZ19lcnJubyhyZXQpO1xuIFx0XHRnb3RvIGxlYXZlO1xuIFx0fVxuLVx0cmV0ID0gb2NmczJfaW5pdF9hY2woTlVMTCwgaW5vZGUsIGRpciwgTlVMTCwgZGlyX2JoLCBOVUxMLCBOVUxMKTtcbitcbitcdHJldCA9IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoaW5vZGUsIGRpciwgZGlyX2JoLCBcdTAwMjZhY2xfc3RhdGUpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byB1bmxvY2s7XG4rXG4rXHRyZXQgPSBvY2ZzMl9pbml0X2FjbChOVUxMLCBpbm9kZSwgTlVMTCwgTlVMTCwgTlVMTCwgXHUwMDI2YWNsX3N0YXRlKTtcbiBcdGlmIChyZXQpXG4gXHRcdG1sb2dfZXJybm8ocmV0KTtcbiBcbit1bmxvY2s6XG4rXHRvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKFx1MDAyNmFjbF9zdGF0ZSk7XG4gXHRvY2ZzMl9pbm9kZV91bmxvY2soZGlyLCAwKTtcbiBcdGJyZWxzZShkaXJfYmgpO1xuIGxlYXZlOlxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3hhdHRyLmggYi9mcy9vY2ZzMi94YXR0ci5oXG5pbmRleCA2NWU5YWE3NDM5MTk5ZS4uNWNkZDZjNmI0MDA2NGIgMTAwNjQ0XG4tLS0gYS9mcy9vY2ZzMi94YXR0ci5oXG4rKysgYi9mcy9vY2ZzMi94YXR0ci5oXG5AQCAtNTUsOSArNTUsMTIgQEAgaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfc2V0KGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLFxuIGludCBvY2ZzMl9jYWxjX3NlY3VyaXR5X2luaXQoc3RydWN0IGlub2RlICosXG4gXHRcdFx0ICAgICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqLFxuIFx0XHRcdCAgICAgaW50ICosIGludCAqLCBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKik7XG4taW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICosXG4tXHRcdFx0ICB1bW9kZV90LCBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqLFxuLVx0XHRcdCAgaW50ICosIGludCAqLCBpbnQgKik7XG4rXG4rc3RydWN0IG9jZnMyX2FjbF9zdGF0ZTtcbitpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLCB1bW9kZV90IG1vZGUsXG4rXHRcdFx0ICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqc2ksXG4rXHRcdFx0ICBpbnQgKndhbnRfY2x1c3RlcnMsIGludCAqeGF0dHJfY3JlZGl0cyxcbitcdFx0XHQgIGludCAqd2FudF9tZXRhLCBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICphY2xfc3RhdGUpO1xuIFxuIC8qXG4gICogeGF0dHJzIGNhbiBsaXZlIGluc2lkZSBhbiBpbm9kZSwgYXMgcGFydCBvZiBhbiBleHRlcm5hbCB4YXR0ciBibG9jayxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE5OjQyOjM2LjgzNDM0MDU2NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4MDYyNTE3MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBPQ0ZTMiBBQ0wgYW5kIFhhdHRyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHRvdWNoZXMgc2V2ZXJhbCBjb3JlIE9DRlMyIGZpbGVzOiBgYWNsLmNgLCBgbmFtZWkuY2AsIGB4YXR0ci5jYCwgYW5kIGB4YXR0ci5oYC4gSXQgc2VlbXMgbGlrZSBhIHJlZmFjdG9yaW5nIGVmZm9ydCByZWxhdGVkIHRvIEFDTCBpbml0aWFsaXphdGlvbiwgc3BlY2lmaWNhbGx5IGludHJvZHVjaW5nIHRoZXNlIG5ldyBmdW5jdGlvbnM6IGBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlYCwgYG9jZnMyX2FjbF9pbml0X3JlbGVhc2VgLCBhbmQgbW9kaWZ5aW5nIGBvY2ZzMl9pbml0X2FjbGAgYW5kIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgLiBUaGF0J3MgYSByZWFzb25hYmxlIG9yZ2FuaXphdGlvbmFsIGNoYW5nZSwgaG9wZWZ1bGx5IGFpbWVkIGF0IGltcHJvdmluZyBtb2R1bGFyaXR5IG9yIHBlcmZvcm1hbmNlIGluIHRob3NlIEFDTCByb3V0aW5lcy5cblxuTm93LCB0aGlzIHBhcnQgaGVyZeKApiB0aGUgcmVtb3ZhbCBvZiBgZG93bl93cml0ZShcdTAwMjZPQ0ZTMl9JKGlub2RlKS1cdTAwM2VpcF94YXR0cl9zZW0pO2AgZnJvbSBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWAuLi4gVGhhdCdzIGdvdCBteSBhdHRlbnRpb24uIFdoeSBpcyB0aGUgc2VtYXBob3JlIGJlaW5nIHJlbW92ZWQgaW4gYGZzL29jZnMyL3hhdHRyLmNgPyBMZXQgbWUgZG91YmxlLWNoZWNrLiBZdXAsIHRoZXJlIGl0IGlzLiBMb29rcyBsaWtlIHRoZXkndmUgdGFrZW4gb3V0IHRoZSBsb2NraW5nIHRoYXQgc3Vycm91bmRlZCB0aGUgeGF0dHIgb3BlcmF0aW9uLiBUaGlzIGlzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSwgbm90IGp1c3QgYW4gb3JnYW5pemF0aW9uYWwgb25lLiBXZSBuZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgY29uY3VycmVudCBhY2Nlc3MgYW5kIGRhdGEgaW50ZWdyaXR5IGlmIHRoaXMgY2hhbmdlIGlzIGNvcnJlY3QuXG5cbkkgc2VlIHRoZXkndmUgcmVtb3ZlZCB0aGUgZG93biBhbmQgdXAgd3JpdGUgY2FsbHMgdG8gdGhlIHNlbWFwaG9yZS4gVGhpcyBoYXMgc2VyaW91cyBpbXBsaWNhdGlvbnMgZm9yIGNvbmN1cnJlbnQgeGF0dHIgb3BlcmF0aW9ucy4gV2UnbGwgbmVlZCB0byBzY3J1dGluaXplIGhvdyB4YXR0ciBvcGVyYXRpb25zIGFyZSBub3cgc3luY2hyb25pemVkLCBpZiBhdCBhbGwuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIHdhcyBkZWVtZWQgc2FmZSBvciBuZWNlc3NhcnkuIElzIHRoZXJlIGEgbmV3IGxvY2tpbmcgbWVjaGFuaXNtIGludHJvZHVjZWQsIG9yIGlzIHRoZSBvcmlnaW5hbCBsb2NraW5nIHBhdHRlcm4gc29tZWhvdyByZWR1bmRhbnQ/XG5cbkFscmlnaHQsIE9DRlMyIGlzIGEgZmlsZXN5c3RlbSwgc28sIHRoYW5rZnVsbHksIHRoaXMgaXMgdGVzdGFibGU7IHdlIGNhbiBtb3VudCBpdCBhbmQgcnVuIHRocm91Z2ggYSBzdWl0ZSBvZiB0ZXN0cyB0byBzZWUgaWYgYW55dGhpbmcgYnJlYWtzLiBMZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB3ZSBoYXZlIHRvIGRlYWwgd2l0aC4gQWgsIGBDT05GSUdfT0NGUzJfRlNgIGlzIHRoZSBvYnZpb3VzIG9uZSwgd2hpY2ggZW5hYmxlcyB0aGUgT0NGUzIgZmlsZXN5c3RlbS4gQW5kIEknbSBnb2luZyB0byBsb29rIGZvciBgQ09ORklHX09DRlMyX0ZTX1BPU0lYX0FDTGAganVzdCB0byBiZSBzdXJlLCB0aGF0IFBPU0lYIEFDTHMgbWlnaHQgYmUgcmVxdWlyZWQgZm9yIHRoaXMgcGF0Y2ggdG8gZnVuY3Rpb24gY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjI2LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTc3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTk6NDI6NDQuNjQwNTk2MTI4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MjU0NzgwMTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE9DRlMyX0ZTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL29jZnMyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9vY2ZzMi9LY29uZmlnOjI6Y29uZmlnIE9DRlMyX0ZTXFxuZnMvb2NmczIvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJPQ0ZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvb2NmczIvS2NvbmZpZy0yNy1cXG5mcy9vY2ZzMi9LY29uZmlnOjI4OmNvbmZpZyBPQ0ZTMl9GU19PMkNCXFxuZnMvb2NmczIvS2NvbmZpZy0yOS1cXHR0cmlzdGF0ZSBcXFwiTzJDQiBLZXJuZWxzcGFjZSBDbHVzdGVyaW5nXFxcIlxcbi0tXFxuZnMvb2NmczIvS2NvbmZpZy00MS1cXG5mcy9vY2ZzMi9LY29uZmlnOjQyOmNvbmZpZyBPQ0ZTMl9GU19VU0VSU1BBQ0VfQ0xVU1RFUlxcbmZzL29jZnMyL0tjb25maWctNDMtXFx0dHJpc3RhdGUgXFxcIk9DRlMyIFVzZXJzcGFjZSBDbHVzdGVyaW5nXFxcIlxcbi0tXFxuZnMvb2NmczIvS2NvbmZpZy01My1cXG5mcy9vY2ZzMi9LY29uZmlnOjU0OmNvbmZpZyBPQ0ZTMl9GU19TVEFUU1xcbmZzL29jZnMyL0tjb25maWctNTUtXFx0Ym9vbCBcXFwiT0NGUzIgc3RhdGlzdGljc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTk6NDI6NDcuMjY2MDgxNDQyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg1OTU4NzA2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkNoZWNraW5nIGZvciBQT1NJWCBBQ0wgU3VwcG9ydCBpbiBPQ0ZTMioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBmaWxlc3lzdGVtIHRoYXQgbmF0aXZlbHkgc3VwcG9ydHMgUE9TSVggQUNMcy4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHByb2JpbmcgZm9yIHRoZSBwcmVzZW5jZSBvZiB0aGUgYE9DRlMyX0ZTX1BPU0lYX0FDTGAgZmxhZywgb3Igc29tZXRoaW5nIGFuYWxvZ291cy4gSXQncyB0aGUgbW9zdCBjb21tb24gYW5kIGRpcmVjdCBpbmRpY2F0b3IuIElmIHRoYXQncyBwcmVzZW50LCBJIGNhbiBpbmZlciBhIGNlcnRhaW4gbGV2ZWwgb2Ygc3VwcG9ydCBhbmQgdGFpbG9yIHN1YnNlcXVlbnQgb3BlcmF0aW9ucyBiYXNlZCBvbiB0aGF0IGtub3dsZWRnZS4gSWYgaXQncyAqbm90KiBwcmVzZW50LCB0aGVuIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyLiBJJ2xsIG5lZWQgdG8gbW92ZSBvbiB0byBjaGVjayBmb3IgYSBjb21wYXRpYmlsaXR5IGxheWVyIG9yIG90aGVyIG1lY2hhbmlzbSB0byBzdXBwb3J0IHRoaXMsIGlmIHRoZSBmaWxlc3lzdGVtIGFkdmVydGlzZXMgYW55dGhpbmcgb3RoZXIgdGhhbiBub3Qgc3VwcG9ydGluZyB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTYyLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTk6NDI6NTEuMTI1NjcyMzM5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwOTM1OTUwNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE9DRlMyX0ZTX1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vY2ZzMi9LY29uZmlnPTI9Y29uZmlnIE9DRlMyX0ZTXFxuLS1cXG5mcy9vY2ZzMi9LY29uZmlnLTI3LVxcbmZzL29jZnMyL0tjb25maWc6Mjg6Y29uZmlnIE9DRlMyX0ZTX08yQ0JcXG5mcy9vY2ZzMi9LY29uZmlnLTI5LVxcdHRyaXN0YXRlIFxcXCJPMkNCIEtlcm5lbHNwYWNlIENsdXN0ZXJpbmdcXFwiXFxuLS1cXG5mcy9vY2ZzMi9LY29uZmlnLTQxLVxcbmZzL29jZnMyL0tjb25maWc6NDI6Y29uZmlnIE9DRlMyX0ZTX1VTRVJTUEFDRV9DTFVTVEVSXFxuZnMvb2NmczIvS2NvbmZpZy00My1cXHR0cmlzdGF0ZSBcXFwiT0NGUzIgVXNlcnNwYWNlIENsdXN0ZXJpbmdcXFwiXFxuLS1cXG5mcy9vY2ZzMi9LY29uZmlnLTUzLVxcbmZzL29jZnMyL0tjb25maWc6NTQ6Y29uZmlnIE9DRlMyX0ZTX1NUQVRTXFxuZnMvb2NmczIvS2NvbmZpZy01NS1cXHRib29sIFxcXCJPQ0ZTMiBzdGF0aXN0aWNzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxOTo0Mjo1NC4yMTkyNzQyNjlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDI5MTA4NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBBYnNlbmNlIG9mIGBPQ0ZTMl9GU19QT1NJWF9BQ0xgKipcblxuSG1tLCBpdCBzZWVtcyB0aGF0IGBPQ0ZTMl9GU19QT1NJWF9BQ0xgIGlzbid0IGRlZmluZWQuIFRoYXQncyBhIGJpdCBvZGQuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBjb2RlIHRvIGZpbmQgd2hlcmUgdGhpcyBpcyBjb25maWd1cmVkLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlcyB0byBzdGFydCBsb29raW5nIGZvciB0aGlzIHdvdWxkIGJlIHRoZSBgZnMvb2NmczIvTWFrZWZpbGVgIGFuZCBgZnMvb2NmczIvS2NvbmZpZ2AgZmlsZXMuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRob3NlLCB0aGUgTWFrZWZpbGUgc2hvdWxkIGJlIHJlbGF0ZWQgdG8gY29tcGlsYXRpb24gYW5kIHRoZSBLY29uZmlnIHRvIGtlcm5lbCBjb25maWd1cmF0aW9ucywgYXMgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IEFDTCBpcyBiZWluZyBoYW5kbGVkIGluIE9DRlMyLiBJIHdpbGwgYmUgbG9va2luZyBmb3IgaG93IEFDTCBzdXBwb3J0IGlzIGVuYWJsZWQgYW5kIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTg2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTk6NDI6NTcuNjQ4Mzg3MDRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2ODQyODc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlBPU0lYX0FDTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9vY2ZzMi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvb2NmczIvS2NvbmZpZz0yPWNvbmZpZyBPQ0ZTMl9GU1xcbi0tXFxuZnMvb2NmczIvS2NvbmZpZy05LVxcdHNlbGVjdCBRVU9UQV9UUkVFXFxuZnMvb2NmczIvS2NvbmZpZzoxMDpcXHRzZWxlY3QgRlNfUE9TSVhfQUNMXFxuZnMvb2NmczIvS2NvbmZpZy0xMS1cXHRzZWxlY3QgTEVHQUNZX0RJUkVDVF9JT1xcbi0tXFxuZnMvb2NmczIvYWNsLmM9MTEzPXN0YXRpYyBzdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9nZXRfYWNsX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSxcXG4tLVxcbmZzL29jZnMyL2FjbC5jLTEyMi1cXHRjYXNlIEFDTF9UWVBFX0FDQ0VTUzpcXG5mcy9vY2ZzMi9hY2wuYzoxMjM6XFx0XFx0bmFtZV9pbmRleCA9IE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1M7XFxuZnMvb2NmczIvYWNsLmMtMTI0LVxcdFxcdGJyZWFrO1xcbmZzL29jZnMyL2FjbC5jLTEyNS1cXHRjYXNlIEFDTF9UWVBFX0RFRkFVTFQ6XFxuZnMvb2NmczIvYWNsLmM6MTI2OlxcdFxcdG5hbWVfaW5kZXggPSBPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfREVGQVVMVDtcXG5mcy9vY2ZzMi9hY2wuYy0xMjctXFx0XFx0YnJlYWs7XFxuLS1cXG5mcy9vY2ZzMi9hY2wuYz0yMTQ9c3RhdGljIGludCBvY2ZzMl9zZXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsXFxuLS1cXG5mcy9vY2ZzMi9hY2wuYy0yMzEtXFx0Y2FzZSBBQ0xfVFlQRV9BQ0NFU1M6XFxuZnMvb2NmczIvYWNsLmM6MjMyOlxcdFxcdG5hbWVfaW5kZXggPSBPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfQUNDRVNTO1xcbmZzL29jZnMyL2FjbC5jLTIzMy1cXHRcXHRicmVhaztcXG5mcy9vY2ZzMi9hY2wuYy0yMzQtXFx0Y2FzZSBBQ0xfVFlQRV9ERUZBVUxUOlxcbmZzL29jZnMyL2FjbC5jOjIzNTpcXHRcXHRuYW1lX2luZGV4ID0gT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFQ7XFxuZnMvb2NmczIvYWNsLmMtMjM2LVxcdFxcdGlmICghU19JU0RJUihpbm9kZS1cXHUwMDNlaV9tb2RlKSlcXG4tLVxcbmZzL29jZnMyL2FjbC5jPTI5Mz1zdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9pb3BfZ2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgYm9vbCByY3UpXFxuLS1cXG5mcy9vY2ZzMi9hY2wuYy0zMDQtXFx0b3NiID0gT0NGUzJfU0IoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbmZzL29jZnMyL2FjbC5jOjMwNTpcXHRpZiAoIShvc2ItXFx1MDAzZXNfbW91bnRfb3B0IFxcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSlcXG5mcy9vY2ZzMi9hY2wuYy0zMDYtXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5mcy9vY2ZzMi9hY2wuYz0zMjE9aW50IG9jZnMyX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxcbi0tXFxuZnMvb2NmczIvYWNsLmMtMzI5LVxcbmZzL29jZnMyL2FjbC5jOjMzMDpcXHRpZiAoIShvc2ItXFx1MDAzZXNfbW91bnRfb3B0IFxcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSlcXG5mcy9vY2ZzMi9hY2wuYy0zMzEtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5mcy9vY2ZzMi9hY2wuYz0zNTk9aW50IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9vY2ZzMi9hY2wuYy0zNzItXFxuZnMvb2NmczIvYWNsLmM6MzczOlxcdGlmIChvc2ItXFx1MDAzZXNfbW91bnRfb3B0IFxcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XFxuZnMvb2NmczIvYWNsLmMtMzc0LVxcdFxcdGRvd25fcmVhZChcXHUwMDI2T0NGUzJfSShkaXIpLVxcdTAwM2VpcF94YXR0cl9zZW0pO1xcbi0tXFxuZnMvb2NmczIvYWNsLmM9NDE0PWludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvb2NmczIvYWNsLmMtNDI1LVxcbmZzL29jZnMyL2FjbC5jOjQyNjpcXHRpZiAob3NiLVxcdTAwM2VzX21vdW50X29wdCBcXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xcbmZzL29jZnMyL2FjbC5jLTQyNy1cXHRcXHRpZiAoU19JU0RJUihpbm9kZS1cXHUwMDNlaV9tb2RlKSBcXHUwMDI2XFx1MDAyNiBzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wpIHtcXG4tLVxcbmZzL29jZnMyL2FjbC5jLTQ0Mi1cXG5mcy9vY2ZzMi9hY2wuYzo0NDM6XFx0aWYgKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcXG5mcy9vY2ZzMi9hY2wuYy00NDQtXFx0XFx0aWYgKHN0YXRlLVxcdTAwM2VhY2wpIHtcXG4tLVxcbmZzL29jZnMyL29jZnMyLmg9MjU3PWVudW0gb2NmczJfbW91bnRfb3B0aW9uc1xcbi0tXFxuZnMvb2NmczIvb2NmczIuaC0yNjYtXFx0T0NGUzJfTU9VTlRfSU5PREU2NCA9IDEgXFx1MDAzY1xcdTAwM2MgNyxcXHQvKiBBbGxvdyBpbm9kZSBudW1iZXJzIFxcdTAwM2UgMl4zMiAqL1xcbmZzL29jZnMyL29jZnMyLmg6MjY3OlxcdE9DRlMyX01PVU5UX1BPU0lYX0FDTCA9IDEgXFx1MDAzY1xcdTAwM2MgOCxcXHQvKiBGb3JjZSBQT1NJWCBhY2Nlc3MgY29udHJvbCBsaXN0cyAqL1xcbmZzL29jZnMyL29jZnMyLmg6MjY4OlxcdE9DRlMyX01PVU5UX05PX1BPU0lYX0FDTCA9IDEgXFx1MDAzY1xcdTAwM2MgOSxcXHQvKiBEaXNhYmxlIFBPU0lYIGFjY2Vzc1xcbmZzL29jZnMyL29jZnMyLmgtMjY5LVxcdFxcdFxcdFxcdFxcdFxcdCAgIGNvbnRyb2wgbGlzdHMgKi9cXG4tLVxcbmZzL29jZnMyL3N1cGVyLmM9NjA3PXN0YXRpYyBpbnQgb2NmczJfcmVjb25maWd1cmUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvb2NmczIvc3VwZXIuYy03MTctXFx0XFx0c2ItXFx1MDAzZXNfZmxhZ3MgPSAoc2ItXFx1MDAzZXNfZmxhZ3MgXFx1MDAyNiB+U0JfUE9TSVhBQ0wpIHxcXG5mcy9vY2ZzMi9zdXBlci5jOjcxODpcXHRcXHRcXHQoKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpID9cXG5mcy9vY2ZzMi9zdXBlci5jLTcxOS1cXHRcXHRcXHRcXHRcXHRcXHRcXHRTQl9QT1NJWEFDTCA6IDApO1xcbi0tXFxuZnMvb2NmczIvc3VwZXIuYz05NzM9c3RhdGljIGludCBvY2ZzMl9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL29jZnMyL3N1cGVyLmMtMTAyNC1cXHRzYi1cXHUwMDNlc19mbGFncyA9IChzYi1cXHUwMDNlc19mbGFncyBcXHUwMDI2IH4oU0JfUE9TSVhBQ0wgfCBTQl9OT1NFQykpIHxcXG5mcy9vY2ZzMi9zdXBlci5jOjEwMjU6XFx0XFx0KChvc2ItXFx1MDAzZXNfbW91bnRfb3B0IFxcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSA/IFNCX1BPU0lYQUNMIDogMCk7XFxuZnMvb2NmczIvc3VwZXIuYy0xMDI2LVxcbi0tXFxuZnMvb2NmczIvc3VwZXIuYz0xMjMyPXN0YXRpYyBpbnQgb2NmczJfY2hlY2tfc2V0X29wdGlvbnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL29jZnMyL3N1cGVyLmMtMTI2MC1cXHR9XFxuZnMvb2NmczIvc3VwZXIuYzoxMjYxOlxcdGlmIChvcHRpb25zLVxcdTAwM2Vtb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wgXFx1MDAyNlxcdTAwMjZcXG5mcy9vY2ZzMi9zdXBlci5jLTEyNjItXFx0ICAgICFPQ0ZTMl9IQVNfSU5DT01QQVRfRkVBVFVSRShzYiwgT0NGUzJfRkVBVFVSRV9JTkNPTVBBVF9YQVRUUikpIHtcXG4tLVxcbmZzL29jZnMyL3N1cGVyLmMtMTI2Ny1cXHQvKiBObyBBQ0wgc2V0dGluZyBzcGVjaWZpZWQ/IFVzZSBYQVRUUiBmZWF0dXJlLi4uICovXFxuZnMvb2NmczIvc3VwZXIuYzoxMjY4OlxcdGlmICghKG9wdGlvbnMtXFx1MDAzZW1vdW50X29wdCBcXHUwMDI2IChPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wgfFxcbmZzL29jZnMyL3N1cGVyLmM6MTI2OTpcXHRcXHRcXHRcXHQgICAgT0NGUzJfTU9VTlRfTk9fUE9TSVhfQUNMKSkpIHtcXG5mcy9vY2ZzMi9zdXBlci5jLTEyNzAtXFx0XFx0aWYgKE9DRlMyX0hBU19JTkNPTVBBVF9GRUFUVVJFKHNiLCBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX1hBVFRSKSlcXG5mcy9vY2ZzMi9zdXBlci5jOjEyNzE6XFx0XFx0XFx0b3B0aW9ucy1cXHUwMDNlbW91bnRfb3B0IHw9IE9DRlMyX01PVU5UX1BPU0lYX0FDTDtcXG5mcy9vY2ZzMi9zdXBlci5jLTEyNzItXFx0XFx0ZWxzZVxcbmZzL29jZnMyL3N1cGVyLmM6MTI3MzpcXHRcXHRcXHRvcHRpb25zLVxcdTAwM2Vtb3VudF9vcHQgfD0gT0NGUzJfTU9VTlRfTk9fUE9TSVhfQUNMO1xcbmZzL29jZnMyL3N1cGVyLmMtMTI3NC1cXHR9XFxuLS1cXG5mcy9vY2ZzMi9zdXBlci5jPTEyNzg9c3RhdGljIGludCBvY2ZzMl9wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKVxcbi0tXFxuZnMvb2NmczIvc3VwZXIuYy0xMzg0LVxcdFxcdGlmIChyZXN1bHQubmVnYXRlZCkge1xcbmZzL29jZnMyL3N1cGVyLmM6MTM4NTpcXHRcXHRcXHRtb3B0LVxcdTAwM2Vtb3VudF9vcHQgfD0gT0NGUzJfTU9VTlRfTk9fUE9TSVhfQUNMO1xcbmZzL29jZnMyL3N1cGVyLmM6MTM4NjpcXHRcXHRcXHRtb3B0LVxcdTAwM2Vtb3VudF9vcHQgXFx1MDAyNj0gfk9DRlMyX01PVU5UX1BPU0lYX0FDTDtcXG5mcy9vY2ZzMi9zdXBlci5jLTEzODctXFx0XFx0fSBlbHNlIHtcXG5mcy9vY2ZzMi9zdXBlci5jOjEzODg6XFx0XFx0XFx0bW9wdC1cXHUwMDNlbW91bnRfb3B0IHw9IE9DRlMyX01PVU5UX1BPU0lYX0FDTDtcXG5mcy9vY2ZzMi9zdXBlci5jOjEzODk6XFx0XFx0XFx0bW9wdC1cXHUwMDNlbW91bnRfb3B0IFxcdTAwMjY9IH5PQ0ZTMl9NT1VOVF9OT19QT1NJWF9BQ0w7XFxuZnMvb2NmczIvc3VwZXIuYy0xMzkwLVxcdFxcdH1cXG4tLVxcbmZzL29jZnMyL3N1cGVyLmM9MTQxNj1zdGF0aWMgaW50IG9jZnMyX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBkZW50cnkgKnJvb3QpXFxuLS1cXG5mcy9vY2ZzMi9zdXBlci5jLTE0ODQtXFxuZnMvb2NmczIvc3VwZXIuYzoxNDg1OlxcdGlmIChvcHRzIFxcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKVxcbmZzL29jZnMyL3N1cGVyLmMtMTQ4Ni1cXHRcXHRzZXFfcHJpbnRmKHMsIFxcXCIsYWNsXFxcIik7XFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jPTEwMT1zdGF0aWMgY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKiBjb25zdCBvY2ZzMl94YXR0cl9oYW5kbGVyX21hcFtPQ0ZTMl9YQVRUUl9NQVhdID0ge1xcbmZzL29jZnMyL3hhdHRyLmMtMTAyLVxcdFtPQ0ZTMl9YQVRUUl9JTkRFWF9VU0VSXVxcdFxcdD0gXFx1MDAyNm9jZnMyX3hhdHRyX3VzZXJfaGFuZGxlcixcXG5mcy9vY2ZzMi94YXR0ci5jOjEwMzpcXHRbT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0FDQ0VTU11cXHQ9IFxcdTAwMjZub3BfcG9zaXhfYWNsX2FjY2VzcyxcXG5mcy9vY2ZzMi94YXR0ci5jOjEwNDpcXHRbT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFRdXFx0PSBcXHUwMDI2bm9wX3Bvc2l4X2FjbF9kZWZhdWx0LFxcbmZzL29jZnMyL3hhdHRyLmMtMTA1LVxcdFtPQ0ZTMl9YQVRUUl9JTkRFWF9UUlVTVEVEXVxcdFxcdD0gXFx1MDAyNm9jZnMyX3hhdHRyX3RydXN0ZWRfaGFuZGxlcixcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmM9NjE0PWludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSxcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNjI2LVxcbmZzL29jZnMyL3hhdHRyLmM6NjI3OlxcdGlmIChvc2ItXFx1MDAzZXNfbW91bnRfb3B0IFxcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XFxuZnMvb2NmczIveGF0dHIuYy02MjgtXFx0XFx0aWYgKGFjbF9zdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wgXFx1MDAyNlxcdTAwMjYgU19JU0RJUihtb2RlKSkge1xcbi0tXFxuZnMvb2NmczIveGF0dHIuYy02NzgtXFx0fVxcbmZzL29jZnMyL3hhdHRyLmM6Njc5OlxcdGlmIChvc2ItXFx1MDAzZXNfbW91bnRfb3B0IFxcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XFxuZnMvb2NmczIveGF0dHIuYy02ODAtXFx0XFx0aWYgKGFjbF9zdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wgXFx1MDAyNlxcdTAwMjYgU19JU0RJUihtb2RlKSkge1xcbi0tXFxuZnMvb2NmczIveGF0dHIuYz04ODc9c3RhdGljIGludCBvY2ZzMl94YXR0cl9saXN0X2VudHJ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTkwMi1cXG5mcy9vY2ZzMi94YXR0ci5jOjkwMzpcXHRjYXNlIE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1M6XFxuZnMvb2NmczIveGF0dHIuYzo5MDQ6XFx0Y2FzZSBPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfREVGQVVMVDpcXG5mcy9vY2ZzMi94YXR0ci5jLTkwNS1cXHRcXHRpZiAoIShzYi1cXHUwMDNlc19mbGFncyBcXHUwMDI2IFNCX1BPU0lYQUNMKSlcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmM9NzE2OD1zdGF0aWMgaW50IG9jZnMyX3JlZmxpbmtfeGF0dHJfbm9fc2VjdXJpdHkoc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5ICp4ZSlcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNzE3Mi1cXHRyZXR1cm4gdHlwZSAhPSBPQ0ZTMl9YQVRUUl9JTkRFWF9TRUNVUklUWSBcXHUwMDI2XFx1MDAyNlxcbmZzL29jZnMyL3hhdHRyLmM6NzE3MzpcXHQgICAgICAgdHlwZSAhPSBPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfQUNDRVNTIFxcdTAwMjZcXHUwMDI2XFxuZnMvb2NmczIveGF0dHIuYzo3MTc0OlxcdCAgICAgICB0eXBlICE9IE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9ERUZBVUxUO1xcbmZzL29jZnMyL3hhdHRyLmMtNzE3NS19XFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5oPTE0PWVudW0gb2NmczJfeGF0dHJfdHlwZSB7XFxuZnMvb2NmczIveGF0dHIuaC0xNS1cXHRPQ0ZTMl9YQVRUUl9JTkRFWF9VU0VSID0gMSxcXG5mcy9vY2ZzMi94YXR0ci5oOjE2OlxcdE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1MsXFxuZnMvb2NmczIveGF0dHIuaDoxNzpcXHRPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfREVGQVVMVCxcXG5mcy9vY2ZzMi94YXR0ci5oLTE4LVxcdE9DRlMyX1hBVFRSX0lOREVYX1RSVVNURUQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE5OjQyOjU3Ljg0NTIzNzkwNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMTQ4NDkyMzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk9DRlMyIEFDTCBJbml0aWFsaXphdGlvbiBhbmQgWGF0dHIgSGFuZGxpbmcgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIGNsZWFyIHRoZSBjaGFuZ2VzIHJldm9sdmUgYXJvdW5kIEFDTCBpbml0aWFsaXphdGlvbiB3aXRoaW4gdGhlIE9DRlMyIGZpbGVzeXN0ZW0uIFRoZSBjb25maWd1cmF0aW9uIHNlbGVjdGlvbiBzdGFydHMgd2l0aCBgT0NGUzJfRlNgLCB3aGljaCB0aGVuIGltcGxpZXMgYEZTX1BPU0lYX0FDTGAsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBQT1NJWCBBQ0xzIGhlcmUuXG5cblRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyBtb2RpZmljYXRpb25zIHRvIHNldmVyYWwgZnVuY3Rpb25zOiBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAsIGBvY2ZzMl9pbml0X2FjbGAsIGFuZCBgb2NmczJfY2FsY194YXR0cl9pbml0YC4gVGhlc2UgYXJlIGNyaXRpY2FsIGJlY2F1c2UgdGhleSdyZSBjYWxsZWQgZHVyaW5nIG5vZGUgY3JlYXRpb24gYW5kIGluaXRpYWxpemF0aW9uLiBTcGVjaWZpY2FsbHksIGBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlYCBpcyBjYWxsZWQgZnJvbSBgb2NmczJfbWtub2RgLCBhbmQgdGhlbiBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCBjYWxscyB0aG9zZSBmdW5jdGlvbnMuIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgIGlzIHN1YnNlcXVlbnRseSBjYWxsZWQgZnJvbSBgb2NmczJfc3ltbGlua2AgYW5kIGBvY2ZzMl9ta2RpcmAsIGV0Yy5cblxuSSBjaGVja2VkIGBvY2ZzMl9ta25vZGAgaW4gYGZzL29jZnMyL25hbWVpLmNgLCBhbmQgaXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZSB0aHJvdWdoIGZ1enppbmcsIHdoaWNoIG1lYW5zIHRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCBleHBvc2VkIHRvIHRoZSB1c2VyLlxuXG5NeSBpbml0aWFsIGZvY3VzIHN5bWJvbHMgd2VyZSB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zLCBidXQgSSd2ZSByZWZpbmVkIHRoYXQuIFdoaWxlIGBvY2ZzMl9ta25vZGAgaXRzZWxmIGlzIGEgZ29vZCBlbnRyeSBwb2ludCwgYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgIGlzIGV2ZW4gbW9yZSBzcGVjaWZpYyBhbmQgaW50ZXJlc3RpbmcuIE5vdywgYWZ0ZXIgZnVydGhlciBpbnZlc3RpZ2F0aW9uLCB0aGUgZm9jdXMgc3ltYm9scyBJJ3ZlIGlkZW50aWZpZWQgYXJlOiBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAsIGBvY2ZzMl9pbml0X2FjbGAsIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgLCBhbmQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAuIFRoZSBsb2NhdGlvbiBvZiB0aGVzZSBzeW1ib2xzIGFyZSBgZnMvb2NmczIvYWNsLmNgIChmb3IgYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgIGFuZCBgb2NmczJfaW5pdF9hY2xgKSwgYGZzL29jZnMyL3hhdHRyLmNgIChmb3IgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgKS5cblxuQSBzaWduaWZpY2FudCBjaGFuZ2UgaXMgdGhlIHJlbW92YWwgb2YgdGhlIGxvY2sgYGRvd25fd3JpdGUoXHUwMDI2T0NGUzJfSShpbm9kZSktXHUwMDNlaXBfeGF0dHJfc2VtKTtgIGZyb20gYG9jZnMyX3hhdHRyX3NldF9oYW5kbGVgLCBhbHNvIGxvY2F0ZWQgaW4gYGZzL29jZnMyL3hhdHRyLmNgLiBUaGlzIGlzIGEgY29uY3VycmVuY3ktcmVsYXRlZCBjaGFuZ2UsIGFuZCB0aGlzIGlzIHdoeSBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWAgc2hvdWxkIGFsc28gYmUgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgZm9jdXMgc3ltYm9scy5cblxuVGhlIGtleSBjb25maWd1cmF0aW9uIGlzIGBPQ0ZTMl9GU2AsIGFuZCBpdCBhdXRvbWF0aWNhbGx5IGVuYWJsZXMgYEZTX1BPU0lYX0FDTGAsIHNvIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgY29uZmlncyBuZWVkZWQuXG5cbioqSW4gc3VtbWFyeToqKlxuXG4qICAgKipXb3J0aEZ1enppbmcqKjogYHRydWVgXG4qICAgKipGb2N1c1N5bWJvbHMqKjpcbiAgICAqICAgYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgXG4gICAgKiAgIGBvY2ZzMl9pbml0X2FjbGBcbiAgICAqICAgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGBcbiAgICAqICAgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGBcbiAgICAqICAgYG9jZnMyX3hhdHRyX3NldF9oYW5kbGVgXG4qICAgKipFbmFibGVDb25maWdzKio6IGBPQ0ZTMl9GU2BcblxuVGhlIHJhdGlvbmFsZSBoZXJlIGlzIHRoYXQgdGhpcyBwYXRjaCBtb2RpZmllcyBjb3JlIEFDTCBpbml0aWFsaXphdGlvbiBhbmQgeGF0dHIgaGFuZGxpbmcgd2l0aGluIE9DRlMyLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSB0eXBpY2FsIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucy4gVGhlIGxvY2sgcmVtb3ZhbCBpbiBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWAgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgYmVjYXVzZSBpdCBjYW4gaW50cm9kdWNlIGNvbmN1cnJlbmN5IGlzc3VlcywgYW5kIHRoaXMgaXMgd2h5IGZ1enppbmcgc2hvdWxkIGJlIGRpcmVjdGVkIHRvd2FyZHMgdGhlc2UgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ4NSwiT3V0cHV0VG9rZW5zIjoyNTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTk6NDM6MDkuOTkzNzM0MjExWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAwNjI2ODU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPQ0ZTMl9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm9jZnMyX2FjbF9pbml0X3ByZXBhcmVcIixcbiAgICBcIm9jZnMyX2luaXRfYWNsXCIsXG4gICAgXCJvY2ZzMl9jYWxjX3hhdHRyX2luaXRcIixcbiAgICBcIm9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbFwiLFxuICAgIFwib2NmczJfeGF0dHJfc2V0X2hhbmRsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBBQ0wgaW5pdGlhbGl6YXRpb24gaW4gT0NGUzIsIGludHJvZHVjaW5nIG5ldyBmdW5jdGlvbnMgYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgIGFuZCBgb2NmczJfYWNsX2luaXRfcmVsZWFzZWAsIGFuZCBtb2RpZnlpbmcgYG9jZnMyX2luaXRfYWNsYCBhbmQgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAuIEl0IGFsc28gcmVtb3ZlcyBhIGxvY2sgKGBpcF94YXR0cl9zZW1gKSBmcm9tIGBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZmlsZXN5c3RlbSdzIGNvcmUgbG9naWMgYW5kIHhhdHRyIGhhbmRsaW5nLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzdGFuZGFyZCBmaWxlc3lzdGVtIG9wZXJhdGlvbnMgKGUuZy4sIG1rbm9kLCBta2Rpciwgc2V0eGF0dHIpLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBtb2RpZmllZCBmdW5jdGlvbnMgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyAoZHVlIHRvIHRoZSByZW1vdmVkIGxvY2spIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9DRlMyX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib2NmczJfYWNsX2luaXRfcHJlcGFyZVwiLFxuICAgIFwib2NmczJfaW5pdF9hY2xcIixcbiAgICBcIm9jZnMyX2NhbGNfeGF0dHJfaW5pdFwiLFxuICAgIFwib2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsXCIsXG4gICAgXCJvY2ZzMl94YXR0cl9zZXRfaGFuZGxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIEFDTCBpbml0aWFsaXphdGlvbiBpbiBPQ0ZTMiwgaW50cm9kdWNpbmcgbmV3IGZ1bmN0aW9ucyBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAgYW5kIGBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlYCwgYW5kIG1vZGlmeWluZyBgb2NmczJfaW5pdF9hY2xgIGFuZCBgb2NmczJfY2FsY194YXR0cl9pbml0YC4gSXQgYWxzbyByZW1vdmVzIGEgbG9jayAoYGlwX3hhdHRyX3NlbWApIGZyb20gYG9jZnMyX3hhdHRyX3NldF9oYW5kbGVgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBmaWxlc3lzdGVtJ3MgY29yZSBsb2dpYyBhbmQgeGF0dHIgaGFuZGxpbmcsIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHN0YW5kYXJkIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyAoZS5nLiwgbWtub2QsIG1rZGlyLCBzZXR4YXR0cikuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIG1vZGlmaWVkIGZ1bmN0aW9ucyB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgY29uY3VycmVuY3kgaXNzdWVzIChkdWUgdG8gdGhlIHJlbW92ZWQgbG9jaykgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5zkdj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-22 19:22:22 +0000 UTC FinishedAt: 2026-07-22 19:43:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OCFS2_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OCFS2_FS" ], "series_id": "eb3d038b-800d-4365-a6af-df28b6b634a3" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "ocfs2_acl_init_prepare", "ocfs2_init_acl", "ocfs2_calc_xattr_init", "ocfs2_init_security_and_acl", "ocfs2_xattr_set_handle" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE5OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09DRlMyX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b2NmczJfYWNsX2luaXRfcHJlcGFyZSYjMzQ7LAogICAgJiMzNDtvY2ZzMl9pbml0X2FjbCYjMzQ7LAogICAgJiMzNDtvY2ZzMl9jYWxjX3hhdHRyX2luaXQmIzM0OywKICAgICYjMzQ7b2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsJiMzNDssCiAgICAmIzM0O29jZnMyX3hhdHRyX3NldF9oYW5kbGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIEFDTCBpbml0aWFsaXphdGlvbiBpbiBPQ0ZTMiwgaW50cm9kdWNpbmcgbmV3IGZ1bmN0aW9ucyBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAgYW5kIGBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlYCwgYW5kIG1vZGlmeWluZyBgb2NmczJfaW5pdF9hY2xgIGFuZCBgb2NmczJfY2FsY194YXR0cl9pbml0YC4gSXQgYWxzbyByZW1vdmVzIGEgbG9jayAoYGlwX3hhdHRyX3NlbWApIGZyb20gYG9jZnMyX3hhdHRyX3NldF9oYW5kbGVgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBmaWxlc3lzdGVtJiMzOTtzIGNvcmUgbG9naWMgYW5kIHhhdHRyIGhhbmRsaW5nLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzdGFuZGFyZCBmaWxlc3lzdGVtIG9wZXJhdGlvbnMgKGUuZy4sIG1rbm9kLCBta2Rpciwgc2V0eGF0dHIpLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBtb2RpZmllZCBmdW5jdGlvbnMgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyAoZHVlIHRvIHRoZSByZW1vdmVkIGxvY2spIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE5OjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjkwNmY2MzQ2MjRkMGZmYjA1Yjg1NDZlODRjMGE1NzI2ODE1NWMwNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDIyIDE5OjQyOjM0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FjbC5jIGIvZnMvb2NmczIvYWNsLmNcbmluZGV4IGFmMWUyY2VkYjIxN2YxLi4wOTBlYzYwZmI1NzZhNiAxMDA2NDRcbi0tLSBhL2ZzL29jZnMyL2FjbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9vY2ZzMi9hY2wuY1xuQEAgLTExMCw4ICYjNDM7MTEwLDcgQEAgc3RhdGljIHZvaWQgKm9jZnMyX2FjbF90b194YXR0cihjb25zdCBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIHNpemVfdCAqc2l6ZSlcbiBcdHJldHVybiBvY2ZzMl9hY2w7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9nZXRfYWNsX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdFx0XHQgICAgICBpbnQgdHlwZSxcbiYjNDM7c3RhdGljIHN0cnVjdCBwb3NpeF9hY2wgKm9jZnMyX2dldF9hY2xfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLFxuIFx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoKVxuIHtcbiBcdGludCBuYW1lX2luZGV4O1xuQEAgLTM0OSw2MyAmIzQzOzM0OCwxMDUgQEAgaW50IG9jZnMyX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuICAqIEluaXRpYWxpemUgdGhlIEFDTHMgb2YgYSBuZXcgaW5vZGUuIElmIHBhcmVudCBkaXJlY3RvcnkgaGFzIGRlZmF1bHQgQUNMLFxuICAqIHRoZW4gY2xvbmUgdG8gbmV3IGlub2RlLiBDYWxsZWQgZnJvbSBvY2ZzMl9ta25vZC5cbiAgKi9cbi1pbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSxcbi1cdFx0ICAgc3RydWN0IGlub2RlICppbm9kZSxcbi1cdFx0ICAgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsXG4tXHRcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLFxuLVx0XHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYyxcbi1cdFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMpXG4mIzQzO3ZvaWQgb2NmczJfYWNsX2luaXRfcmVsZWFzZShzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSlcbiYjNDM7e1xuJiM0MztcdHBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKTtcbiYjNDM7XHRwb3NpeF9hY2xfcmVsZWFzZShzdGF0ZS1cdTAwM2VhY2wpO1xuJiM0MztcdHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsID0gTlVMTDtcbiYjNDM7XHRzdGF0ZS1cdTAwM2VhY2wgPSBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgb2NmczJfYWNsX2luaXRfcHJlcGFyZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHRcdFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKVxuIHtcbiBcdHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4tXHRzdHJ1Y3QgcG9zaXhfYWNsICphY2wgPSBOVUxMO1xuLVx0aW50IHJldCA9IDAsIHJldDI7XG4tXHR1bW9kZV90IG1vZGU7XG4tXG4tXHRpZiAoIVNfSVNMTksoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuLVx0XHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbi1cdFx0XHRkb3duX3JlYWQoXHUwMDI2T0NGUzJfSShkaXIpLVx1MDAzZWlwX3hhdHRyX3NlbSk7XG4tXHRcdFx0YWNsID0gb2NmczJfZ2V0X2FjbF9ub2xvY2soZGlyLCBBQ0xfVFlQRV9ERUZBVUxULFxuLVx0XHRcdFx0XHRcdCAgIGRpcl9iaCk7XG4tXHRcdFx0dXBfcmVhZChcdTAwMjZPQ0ZTMl9JKGRpciktXHUwMDNlaXBfeGF0dHJfc2VtKTtcbi1cdFx0XHRpZiAoSVNfRVJSKGFjbCkpXG4tXHRcdFx0XHRyZXR1cm4gUFRSX0VSUihhY2wpO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCA9IE5VTEw7XG4mIzQzO1x0c3RhdGUtXHUwMDNlYWNsID0gTlVMTDtcbiYjNDM7XHRzdGF0ZS1cdTAwM2Vtb2RlID0gaW5vZGUtXHUwMDNlaV9tb2RlO1xuJiM0MztcbiYjNDM7XHRpZiAoU19JU0xOSyhpbm9kZS1cdTAwM2VpX21vZGUpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuJiM0MztcdFx0ZG93bl9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuJiM0MztcdFx0c3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wgPVxuJiM0MztcdFx0XHRvY2ZzMl9nZXRfYWNsX25vbG9jayhkaXIsIEFDTF9UWVBFX0RFRkFVTFQsIGRpcl9iaCk7XG4mIzQzO1x0XHR1cF9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuJiM0MztcdFx0aWYgKElTX0VSUihzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCkpIHtcbiYjNDM7XHRcdFx0cmV0ID0gUFRSX0VSUihzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCk7XG4mIzQzO1x0XHRcdHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsID0gTlVMTDtcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0fVxuLVx0XHRpZiAoIWFjbCkge1xuLVx0XHRcdG1vZGUgPSBpbm9kZS1cdTAwM2VpX21vZGUgXHUwMDI2IH5jdXJyZW50X3VtYXNrKCk7XG4tXHRcdFx0cmV0ID0gb2NmczJfYWNsX3NldF9tb2RlKGlub2RlLCBkaV9iaCwgaGFuZGxlLCBtb2RlKTtcbi1cdFx0XHRpZiAocmV0KSB7XG4tXHRcdFx0XHRtbG9nX2Vycm5vKHJldCk7XG4mIzQzO1x0XHRpZiAoc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wpIHtcbiYjNDM7XHRcdFx0c3RhdGUtXHUwMDNlYWNsID0gcG9zaXhfYWNsX2R1cChzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCk7XG4mIzQzO1x0XHRcdGlmICghc3RhdGUtXHUwMDNlYWNsKSB7XG4mIzQzO1x0XHRcdFx0cmV0ID0gLUVOT01FTTtcbiBcdFx0XHRcdGdvdG8gY2xlYW51cDtcbiBcdFx0XHR9XG4mIzQzO1x0XHRcdHJldCA9IF9fcG9zaXhfYWNsX2NyZWF0ZShcdTAwMjZzdGF0ZS1cdTAwM2VhY2wsIEdGUF9OT0ZTLFxuJiM0MztcdFx0XHRcdFx0XHQgXHUwMDI2c3RhdGUtXHUwMDNlbW9kZSk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdFx0XHRpZiAocmV0ID09IDApIHtcbiYjNDM7XHRcdFx0XHRwb3NpeF9hY2xfcmVsZWFzZShzdGF0ZS1cdTAwM2VhY2wpO1xuJiM0MztcdFx0XHRcdHN0YXRlLVx1MDAzZWFjbCA9IE5VTEw7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0aWYgKCFTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbiYjNDM7XHRcdFx0XHRwb3NpeF9hY2xfcmVsZWFzZShzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCk7XG4mIzQzO1x0XHRcdFx0c3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wgPSBOVUxMO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRzdGF0ZS1cdTAwM2Vtb2RlIFx1MDAyNj0gfmN1cnJlbnRfdW1hc2soKTtcbiBcdFx0fVxuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRzdGF0ZS1cdTAwM2Vtb2RlIFx1MDAyNj0gfmN1cnJlbnRfdW1hc2soKTtcbiBcdH1cbi1cdGlmICgob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIFx1MDAyNlx1MDAyNiBhY2wpIHtcbi1cdFx0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7Y2xlYW51cDpcbiYjNDM7XHRvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKHN0YXRlKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiYjNDM7XHRcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsXG4mIzQzO1x0XHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYyxcbiYjNDM7XHRcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjLFxuJiM0MztcdFx0ICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoU19JU0xOSyhpbm9kZS1cdTAwM2VpX21vZGUpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuJiM0MztcdFx0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSBcdTAwMjZcdTAwMjYgc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wpIHtcbiBcdFx0XHRyZXQgPSBvY2ZzMl9zZXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpX2JoLFxuLVx0XHRcdFx0XHQgICAgQUNMX1RZUEVfREVGQVVMVCwgYWNsLFxuLVx0XHRcdFx0XHQgICAgbWV0YV9hYywgZGF0YV9hYyk7XG4mIzQzO1x0XHRcdFx0XHQgICAgQUNMX1RZUEVfREVGQVVMVCxcbiYjNDM7XHRcdFx0XHRcdCAgICBzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCwgbWV0YV9hYyxcbiYjNDM7XHRcdFx0XHRcdCAgICBkYXRhX2FjKTtcbiBcdFx0XHRpZiAocmV0KVxuLVx0XHRcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdH1cbi1cdFx0bW9kZSA9IGlub2RlLVx1MDAzZWlfbW9kZTtcbi1cdFx0cmV0ID0gX19wb3NpeF9hY2xfY3JlYXRlKFx1MDAyNmFjbCwgR0ZQX05PRlMsIFx1MDAyNm1vZGUpO1xuLVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuIFxuLVx0XHRyZXQyID0gb2NmczJfYWNsX3NldF9tb2RlKGlub2RlLCBkaV9iaCwgaGFuZGxlLCBtb2RlKTtcbi1cdFx0aWYgKHJldDIpIHtcbi1cdFx0XHRtbG9nX2Vycm5vKHJldDIpO1xuLVx0XHRcdHJldCA9IHJldDI7XG4tXHRcdFx0Z290byBjbGVhbnVwO1xuLVx0XHR9XG4tXHRcdGlmIChyZXQgXHUwMDNlIDApIHtcbi1cdFx0XHRyZXQgPSBvY2ZzMl9zZXRfYWNsKGhhbmRsZSwgaW5vZGUsXG4tXHRcdFx0XHRcdCAgICBkaV9iaCwgQUNMX1RZUEVfQUNDRVNTLFxuLVx0XHRcdFx0XHQgICAgYWNsLCBtZXRhX2FjLCBkYXRhX2FjKTtcbiYjNDM7XHRyZXQgPSBvY2ZzMl9hY2xfc2V0X21vZGUoaW5vZGUsIGRpX2JoLCBoYW5kbGUsIHN0YXRlLVx1MDAzZW1vZGUpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdG1sb2dfZXJybm8ocmV0KTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbiYjNDM7XHRcdGlmIChzdGF0ZS1cdTAwM2VhY2wpIHtcbiYjNDM7XHRcdFx0cmV0ID0gb2NmczJfc2V0X2FjbChoYW5kbGUsIGlub2RlLCBkaV9iaCxcbiYjNDM7XHRcdFx0XHRcdCAgICBBQ0xfVFlQRV9BQ0NFU1MsIHN0YXRlLVx1MDAzZWFjbCxcbiYjNDM7XHRcdFx0XHRcdCAgICBtZXRhX2FjLCBkYXRhX2FjKTtcbiBcdFx0fVxuIFx0fVxuLWNsZWFudXA6XG4tXHRwb3NpeF9hY2xfcmVsZWFzZShhY2wpO1xuJiM0MztcbiBcdHJldHVybiByZXQ7XG4gfVxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FjbC5oIGIvZnMvb2NmczIvYWNsLmhcbmluZGV4IDY2N2M2ZjAzZmE2MDZmLi5hOTFmOWNlMjc4ZDZkMyAxMDA2NDRcbi0tLSBhL2ZzL29jZnMyL2FjbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9vY2ZzMi9hY2wuaFxuQEAgLTIwLDkgJiM0MzsyMCwyMCBAQCBzdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9pb3BfZ2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgYm9vbCByY3UpO1xuIGludCBvY2ZzMl9pb3Bfc2V0X2FjbChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0XHQgICAgICBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIGludCB0eXBlKTtcbiBleHRlcm4gaW50IG9jZnMyX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICopO1xuLWV4dGVybiBpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBpbm9kZSAqLFxuLVx0XHRcdCAgc3RydWN0IGJ1ZmZlcl9oZWFkICosIHN0cnVjdCBidWZmZXJfaGVhZCAqLFxuLVx0XHRcdCAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKixcbi1cdFx0XHQgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICopO1xuJiM0MztzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlIHtcbiYjNDM7XHRzdHJ1Y3QgcG9zaXhfYWNsICpkZWZhdWx0X2FjbDtcbiYjNDM7XHRzdHJ1Y3QgcG9zaXhfYWNsICphY2w7XG4mIzQzO1x0dW1vZGVfdCBtb2RlO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7aW50IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLFxuJiM0MztcdFx0XHQgICBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSk7XG4mIzQzO3ZvaWQgb2NmczJfYWNsX2luaXRfcmVsZWFzZShzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSk7XG4mIzQzO2ludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiM0MztcdFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCxcbiYjNDM7XHRcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLFxuJiM0MztcdFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMsXG4mIzQzO1x0XHQgICBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSk7XG4gXG4gI2VuZGlmIC8qIE9DRlMyX0FDTF9IICovXG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvbmFtZWkuYyBiL2ZzL29jZnMyL25hbWVpLmNcbmluZGV4IDEyNzc2NjZjNzdjZDJkLi5kOWFiYTE2YThmMjhhNyAxMDA2NDRcbi0tLSBhL2ZzL29jZnMyL25hbWVpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL25hbWVpLmNcbkBAIC0yNTYsNiAmIzQzOzI1Niw3IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRzaWdzZXRfdCBvbGRzZXQ7XG4gXHRpbnQgZGlkX2Jsb2NrX3NpZ25hbHMgPSAwO1xuIFx0c3RydWN0IG9jZnMyX2RlbnRyeV9sb2NrICpkbCA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IG9jZnMyX2FjbF9zdGF0ZSBhY2xfc3RhdGUgPSB7IDAgfTtcbiBcbiBcdHRyYWNlX29jZnMyX21rbm9kKGRpciwgZGVudHJ5LCBkZW50cnktXHUwMDNlZF9uYW1lLmxlbiwgZGVudHJ5LVx1MDAzZWRfbmFtZS5uYW1lLFxuIFx0XHRcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGRpciktXHUwMDNlaXBfYmxrbm8sXG5AQCAtMzMwLDEwICYjNDM7MzMxLDEzIEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdH1cbiBcdH1cbiBcbiYjNDM7XHRzdGF0dXMgPSBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKGlub2RlLCBkaXIsIHBhcmVudF9mZV9iaCwgXHUwMDI2YWNsX3N0YXRlKTtcbiYjNDM7XHRpZiAoc3RhdHVzIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBsZWF2ZTtcbiYjNDM7XG4gXHQvKiBjYWxjdWxhdGUgbWV0YSBkYXRhL2NsdXN0ZXJzIGZvciBzZXR0aW5nIHNlY3VyaXR5IGFuZCBhY2wgeGF0dHIgKi9cbi1cdHN0YXR1cyA9IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChkaXIsIHBhcmVudF9mZV9iaCwgbW9kZSxcbi1cdFx0XHRcdCAgICAgICBcdTAwMjZzaSwgXHUwMDI2d2FudF9jbHVzdGVycyxcbi1cdFx0XHRcdCAgICAgICBcdTAwMjZ4YXR0cl9jcmVkaXRzLCBcdTAwMjZ3YW50X21ldGEpO1xuJiM0MztcdHN0YXR1cyA9IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChkaXIsIG1vZGUsIFx1MDAyNnNpLCBcdTAwMjZ3YW50X2NsdXN0ZXJzLFxuJiM0MztcdFx0XHRcdCAgICAgICBcdTAwMjZ4YXR0cl9jcmVkaXRzLCBcdTAwMjZ3YW50X21ldGEsIFx1MDAyNmFjbF9zdGF0ZSk7XG4gXHRpZiAoc3RhdHVzIFx1MDAzYyAwKSB7XG4gXHRcdG1sb2dfZXJybm8oc3RhdHVzKTtcbiBcdFx0Z290byBsZWF2ZTtcbkBAIC00MTEsOCAmIzQzOzQxNSw4IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdGluY19ubGluayhkaXIpO1xuIFx0fVxuIFxuLVx0c3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgZGlyLCBuZXdfZmVfYmgsIHBhcmVudF9mZV9iaCxcbi1cdFx0XHQgbWV0YV9hYywgZGF0YV9hYyk7XG4mIzQzO1x0c3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgbmV3X2ZlX2JoLCBtZXRhX2FjLCBkYXRhX2FjLFxuJiM0MztcdFx0XHRcdFx1MDAyNmFjbF9zdGF0ZSk7XG4gXG4gXHRpZiAoc3RhdHVzIFx1MDAzYyAwKSB7XG4gXHRcdG1sb2dfZXJybm8oc3RhdHVzKTtcbkBAIC00NzcsNiAmIzQzOzQ4MSw4IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRicmVsc2UocGFyZW50X2ZlX2JoKTtcbiBcdGtmcmVlKHNpLnZhbHVlKTtcbiBcbiYjNDM7XHRvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKFx1MDAyNmFjbF9zdGF0ZSk7XG4mIzQzO1xuIFx0b2NmczJfZnJlZV9kaXJfbG9va3VwX3Jlc3VsdChcdTAwMjZsb29rdXApO1xuIFxuIFx0aWYgKGlub2RlX2FjKVxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3hhdHRyLmMgYi9mcy9vY2ZzMi94YXR0ci5jXG5pbmRleCBmY2RkZDNjMTNhY2RkZC4uNGNmNWI2OWQxM2IwOTUgMTAwNjQ0XG4tLS0gYS9mcy9vY2ZzMi94YXR0ci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9vY2ZzMi94YXR0ci5jXG5AQCAtNjExLDEzICYjNDM7NjExLDEwIEBAIGludCBvY2ZzMl9jYWxjX3NlY3VyaXR5X2luaXQoc3RydWN0IGlub2RlICpkaXIsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1pbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdCAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsXG4tXHRcdFx0ICB1bW9kZV90IG1vZGUsXG4mIzQzO2ludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSxcbiBcdFx0XHQgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICpzaSxcbi1cdFx0XHQgIGludCAqd2FudF9jbHVzdGVycyxcbi1cdFx0XHQgIGludCAqeGF0dHJfY3JlZGl0cyxcbi1cdFx0XHQgIGludCAqd2FudF9tZXRhKVxuJiM0MztcdFx0XHQgIGludCAqd2FudF9jbHVzdGVycywgaW50ICp4YXR0cl9jcmVkaXRzLFxuJiM0MztcdFx0XHQgIGludCAqd2FudF9tZXRhLCBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICphY2xfc3RhdGUpXG4ge1xuIFx0aW50IHJldCA9IDA7XG4gXHRzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGRpci1cdTAwM2VpX3NiKTtcbkBAIC02MjgsMTkgJiM0Mzs2MjUsMTUgQEAgaW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRcdFx0XHQgICAgIHNpLVx1MDAzZXZhbHVlX2xlbik7XG4gXG4gXHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbi1cdFx0ZG93bl9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuLVx0XHRhY2xfbGVuID0gb2NmczJfeGF0dHJfZ2V0X25vbG9jayhkaXIsIGRpcl9iaCxcbi1cdFx0XHRcdFx0T0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFQsXG4tXHRcdFx0XHRcdFwmIzM0O1wmIzM0OywgTlVMTCwgMCk7XG4tXHRcdHVwX3JlYWQoXHUwMDI2T0NGUzJfSShkaXIpLVx1MDAzZWlwX3hhdHRyX3NlbSk7XG4tXHRcdGlmIChhY2xfbGVuIFx1MDAzZSAwKSB7XG4tXHRcdFx0YV9zaXplID0gb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKDAsIGFjbF9sZW4pO1xuLVx0XHRcdGlmIChTX0lTRElSKG1vZGUpKVxuLVx0XHRcdFx0YV9zaXplIFx1MDAzY1x1MDAzYz0gMTtcbi1cdFx0fSBlbHNlIGlmIChhY2xfbGVuICE9IDAgXHUwMDI2XHUwMDI2IGFjbF9sZW4gIT0gLUVOT0RBVEEpIHtcbi1cdFx0XHRyZXQgPSBhY2xfbGVuO1xuLVx0XHRcdG1sb2dfZXJybm8ocmV0KTtcbi1cdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0aWYgKGFjbF9zdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCBcdTAwMjZcdTAwMjYgU19JU0RJUihtb2RlKSkge1xuJiM0MztcdFx0XHRhY2xfbGVuID0gYWNsX3N0YXRlLVx1MDAzZWRlZmF1bHRfYWNsLVx1MDAzZWFfY291bnQgKlxuJiM0MztcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xuJiM0MztcdFx0XHRhX3NpemUgJiM0Mzs9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmIChhY2xfc3RhdGUtXHUwMDNlYWNsKSB7XG4mIzQzO1x0XHRcdGFjbF9sZW4gPSBhY2xfc3RhdGUtXHUwMDNlYWNsLVx1MDAzZWFfY291bnQgKlxuJiM0MztcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xuJiM0MztcdFx0XHRhX3NpemUgJiM0Mzs9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTtcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTY4MywxNCAmIzQzOzY3NiwyOSBAQCBpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdFx0XHRcdFx0ICAgbmV3X2NsdXN0ZXJzKTtcbiBcdFx0KndhbnRfY2x1c3RlcnMgJiM0Mzs9IG5ld19jbHVzdGVycztcbiBcdH1cbi1cdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCBcdTAwMjZcdTAwMjZcbi1cdCAgICBhY2xfbGVuIFx1MDAzZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkge1xuLVx0XHQvKiBmb3IgZGlyZWN0b3J5LCBpdCBoYXMgREVGQVVMVCBhbmQgQUNDRVNTIHR3byB0eXBlcyBvZiBhY2xzICovXG4tXHRcdG5ld19jbHVzdGVycyA9IChTX0lTRElSKG1vZGUpID8gMiA6IDEpICpcbi1cdFx0XHRcdG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhkaXItXHUwMDNlaV9zYiwgYWNsX2xlbik7XG4tXHRcdCp4YXR0cl9jcmVkaXRzICYjNDM7PSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoZGlyLVx1MDAzZWlfc2IsXG4tXHRcdFx0XHRcdFx0XHQgICBuZXdfY2x1c3RlcnMpO1xuLVx0XHQqd2FudF9jbHVzdGVycyAmIzQzOz0gbmV3X2NsdXN0ZXJzO1xuJiM0MztcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuJiM0MztcdFx0aWYgKGFjbF9zdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCBcdTAwMjZcdTAwMjYgU19JU0RJUihtb2RlKSkge1xuJiM0MztcdFx0XHRhY2xfbGVuID0gYWNsX3N0YXRlLVx1MDAzZWRlZmF1bHRfYWNsLVx1MDAzZWFfY291bnQgKlxuJiM0MztcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xuJiM0MztcdFx0XHRpZiAoYWNsX2xlbiBcdTAwM2UgT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpIHtcbiYjNDM7XHRcdFx0XHRuZXdfY2x1c3RlcnMgPSBvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoZGlyLVx1MDAzZWlfc2IsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRcdGFjbF9sZW4pO1xuJiM0MztcdFx0XHRcdCp4YXR0cl9jcmVkaXRzICYjNDM7PSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoZGlyLVx1MDAzZWlfc2IsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRcdCAgIG5ld19jbHVzdGVycyk7XG4mIzQzO1x0XHRcdFx0KndhbnRfY2x1c3RlcnMgJiM0Mzs9IG5ld19jbHVzdGVycztcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdFx0aWYgKGFjbF9zdGF0ZS1cdTAwM2VhY2wpIHtcbiYjNDM7XHRcdFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cdTAwM2VhY2wtXHUwMDNlYV9jb3VudCAqXG4mIzQzO1x0XHRcdFx0ICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7XG4mIzQzO1x0XHRcdGlmIChhY2xfbGVuIFx1MDAzZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkge1xuJiM0MztcdFx0XHRcdG5ld19jbHVzdGVycyA9IG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhkaXItXHUwMDNlaV9zYixcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdFx0YWNsX2xlbik7XG4mIzQzO1x0XHRcdFx0KnhhdHRyX2NyZWRpdHMgJiM0Mzs9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhkaXItXHUwMDNlaV9zYixcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdFx0ICAgbmV3X2NsdXN0ZXJzKTtcbiYjNDM7XHRcdFx0XHQqd2FudF9jbHVzdGVycyAmIzQzOz0gbmV3X2NsdXN0ZXJzO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHRyZXR1cm4gcmV0O1xuQEAgLTM1NDIsOCAmIzQzOzM1NTAsNiBAQCBpbnQgb2NmczJfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGVfdCAqaGFuZGxlLFxuIFx0eGlzLmlub2RlX2JoID0geGJzLmlub2RlX2JoID0gZGlfYmg7XG4gXHRkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopZGlfYmgtXHUwMDNlYl9kYXRhO1xuIFxuLVx0ZG93bl93cml0ZShcdTAwMjZPQ0ZTMl9JKGlub2RlKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuLVxuIFx0cmV0ID0gb2NmczJfeGF0dHJfaWJvZHlfZmluZChpbm9kZSwgbmFtZV9pbmRleCwgbmFtZSwgXHUwMDI2eGlzKTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gY2xlYW51cDtcbkBAIC0zNTU2LDcgJiM0MzszNTYyLDYgQEAgaW50IG9jZnMyX3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSxcbiBcdHJldCA9IF9fb2NmczJfeGF0dHJfc2V0X2hhbmRsZShpbm9kZSwgZGksIFx1MDAyNnhpLCBcdTAwMjZ4aXMsIFx1MDAyNnhicywgXHUwMDI2Y3R4dCk7XG4gXG4gY2xlYW51cDpcbi1cdHVwX3dyaXRlKFx1MDAyNk9DRlMyX0koaW5vZGUpLVx1MDAzZWlwX3hhdHRyX3NlbSk7XG4gXHRicmVsc2UoeGJzLnhhdHRyX2JoKTtcbiBcdG9jZnMyX3hhdHRyX2J1Y2tldF9mcmVlKHhicy5idWNrZXQpO1xuIFxuQEAgLTcyNTcsNiAmIzQzOzcyNjIsNyBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLFxuIHtcbiBcdGludCByZXQgPSAwO1xuIFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmggPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgYWNsX3N0YXRlID0geyAwIH07XG4gXG4gXHRyZXQgPSBvY2ZzMl9pbml0X3NlY3VyaXR5X2dldChpbm9kZSwgZGlyLCBxc3RyLCBOVUxMKTtcbiBcdGlmIChyZXQpIHtcbkBAIC03MjY5LDEwICYjNDM7NzI3NSwxNyBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRtbG9nX2Vycm5vKHJldCk7XG4gXHRcdGdvdG8gbGVhdmU7XG4gXHR9XG4tXHRyZXQgPSBvY2ZzMl9pbml0X2FjbChOVUxMLCBpbm9kZSwgZGlyLCBOVUxMLCBkaXJfYmgsIE5VTEwsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKGlub2RlLCBkaXIsIGRpcl9iaCwgXHUwMDI2YWNsX3N0YXRlKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byB1bmxvY2s7XG4mIzQzO1xuJiM0MztcdHJldCA9IG9jZnMyX2luaXRfYWNsKE5VTEwsIGlub2RlLCBOVUxMLCBOVUxMLCBOVUxMLCBcdTAwMjZhY2xfc3RhdGUpO1xuIFx0aWYgKHJldClcbiBcdFx0bWxvZ19lcnJubyhyZXQpO1xuIFxuJiM0Mzt1bmxvY2s6XG4mIzQzO1x0b2NmczJfYWNsX2luaXRfcmVsZWFzZShcdTAwMjZhY2xfc3RhdGUpO1xuIFx0b2NmczJfaW5vZGVfdW5sb2NrKGRpciwgMCk7XG4gXHRicmVsc2UoZGlyX2JoKTtcbiBsZWF2ZTpcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5oIGIvZnMvb2NmczIveGF0dHIuaFxuaW5kZXggNjVlOWFhNzQzOTE5OWUuLjVjZGQ2YzZiNDAwNjRiIDEwMDY0NFxuLS0tIGEvZnMvb2NmczIveGF0dHIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIveGF0dHIuaFxuQEAgLTU1LDkgJiM0Mzs1NSwxMiBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9zZXQoaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICosXG4gaW50IG9jZnMyX2NhbGNfc2VjdXJpdHlfaW5pdChzdHJ1Y3QgaW5vZGUgKixcbiBcdFx0XHQgICAgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICosXG4gXHRcdFx0ICAgICBpbnQgKiwgaW50ICosIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICoqKTtcbi1pbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKixcbi1cdFx0XHQgIHVtb2RlX3QsIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICosXG4tXHRcdFx0ICBpbnQgKiwgaW50ICosIGludCAqKTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBvY2ZzMl9hY2xfc3RhdGU7XG4mIzQzO2ludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSxcbiYjNDM7XHRcdFx0ICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqc2ksXG4mIzQzO1x0XHRcdCAgaW50ICp3YW50X2NsdXN0ZXJzLCBpbnQgKnhhdHRyX2NyZWRpdHMsXG4mIzQzO1x0XHRcdCAgaW50ICp3YW50X21ldGEsIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKmFjbF9zdGF0ZSk7XG4gXG4gLypcbiAgKiB4YXR0cnMgY2FuIGxpdmUgaW5zaWRlIGFuIGlub2RlLCBhcyBwYXJ0IG9mIGFuIGV4dGVybmFsIHhhdHRyIGJsb2NrLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE5OjQyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPQ0ZTMl9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O29jZnMyX2FjbF9pbml0X3ByZXBhcmUmIzM0OywKICAgICYjMzQ7b2NmczJfaW5pdF9hY2wmIzM0OywKICAgICYjMzQ7b2NmczJfY2FsY194YXR0cl9pbml0JiMzNDssCiAgICAmIzM0O29jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbCYjMzQ7LAogICAgJiMzNDtvY2ZzMl94YXR0cl9zZXRfaGFuZGxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBBQ0wgaW5pdGlhbGl6YXRpb24gaW4gT0NGUzIsIGludHJvZHVjaW5nIG5ldyBmdW5jdGlvbnMgYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgIGFuZCBgb2NmczJfYWNsX2luaXRfcmVsZWFzZWAsIGFuZCBtb2RpZnlpbmcgYG9jZnMyX2luaXRfYWNsYCBhbmQgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAuIEl0IGFsc28gcmVtb3ZlcyBhIGxvY2sgKGBpcF94YXR0cl9zZW1gKSBmcm9tIGBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZmlsZXN5c3RlbSYjMzk7cyBjb3JlIGxvZ2ljIGFuZCB4YXR0ciBoYW5kbGluZywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3RhbmRhcmQgZmlsZXN5c3RlbSBvcGVyYXRpb25zIChlLmcuLCBta25vZCwgbWtkaXIsIHNldHhhdHRyKS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgbW9kaWZpZWQgZnVuY3Rpb25zIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBjb25jdXJyZW5jeSBpc3N1ZXMgKGR1ZSB0byB0aGUgcmVtb3ZlZCBsb2NrKSBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjkwNmY2MzQ2MjRkMGZmYjA1Yjg1NDZlODRjMGE1NzI2ODE1NWMwNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDIyIDE5OjQyOjM0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvYWNsLmMgYi9mcy9vY2ZzMi9hY2wuYwppbmRleCBhZjFlMmNlZGIyMTdmMS4uMDkwZWM2MGZiNTc2YTYgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2FjbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL2FjbC5jCkBAIC0xMTAsOCAmIzQzOzExMCw3IEBAIHN0YXRpYyB2b2lkICpvY2ZzMl9hY2xfdG9feGF0dHIoY29uc3Qgc3RydWN0IHBvc2l4X2FjbCAqYWNsLCBzaXplX3QgKnNpemUpCiAJcmV0dXJuIG9jZnMyX2FjbDsKIH0KIAotc3RhdGljIHN0cnVjdCBwb3NpeF9hY2wgKm9jZnMyX2dldF9hY2xfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJCSAgICAgIGludCB0eXBlLAomIzQzO3N0YXRpYyBzdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9nZXRfYWNsX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwKIAkJCQkJICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCkKIHsKIAlpbnQgbmFtZV9pbmRleDsKQEAgLTM0OSw2MyAmIzQzOzM0OCwxMDUgQEAgaW50IG9jZnMyX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQogICogSW5pdGlhbGl6ZSB0aGUgQUNMcyBvZiBhIG5ldyBpbm9kZS4gSWYgcGFyZW50IGRpcmVjdG9yeSBoYXMgZGVmYXVsdCBBQ0wsCiAgKiB0aGVuIGNsb25lIHRvIG5ldyBpbm9kZS4gQ2FsbGVkIGZyb20gb2NmczJfbWtub2QuCiAgKi8KLWludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqaGFuZGxlLAotCQkgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkgICBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCwKLQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsCi0JCSAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLAotCQkgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYykKJiM0Mzt2b2lkIG9jZnMyX2FjbF9pbml0X3JlbGVhc2Uoc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpCiYjNDM7ewomIzQzOwlwb3NpeF9hY2xfcmVsZWFzZShzdGF0ZS0mZ3Q7ZGVmYXVsdF9hY2wpOwomIzQzOwlwb3NpeF9hY2xfcmVsZWFzZShzdGF0ZS0mZ3Q7YWNsKTsKJiM0MzsJc3RhdGUtJmd0O2RlZmF1bHRfYWNsID0gTlVMTDsKJiM0MzsJc3RhdGUtJmd0O2FjbCA9IE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO2ludCBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLAomIzQzOwkJCSAgIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKQogewogCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtJmd0O2lfc2IpOwotCXN0cnVjdCBwb3NpeF9hY2wgKmFjbCA9IE5VTEw7Ci0JaW50IHJldCA9IDAsIHJldDI7Ci0JdW1vZGVfdCBtb2RlOwotCi0JaWYgKCFTX0lTTE5LKGlub2RlLSZndDtpX21vZGUpKSB7Ci0JCWlmIChvc2ItJmd0O3NfbW91bnRfb3B0ICZhbXA7IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkgewotCQkJZG93bl9yZWFkKCZhbXA7T0NGUzJfSShkaXIpLSZndDtpcF94YXR0cl9zZW0pOwotCQkJYWNsID0gb2NmczJfZ2V0X2FjbF9ub2xvY2soZGlyLCBBQ0xfVFlQRV9ERUZBVUxULAotCQkJCQkJICAgZGlyX2JoKTsKLQkJCXVwX3JlYWQoJmFtcDtPQ0ZTMl9JKGRpciktJmd0O2lwX3hhdHRyX3NlbSk7Ci0JCQlpZiAoSVNfRVJSKGFjbCkpCi0JCQkJcmV0dXJuIFBUUl9FUlIoYWNsKTsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CXN0YXRlLSZndDtkZWZhdWx0X2FjbCA9IE5VTEw7CiYjNDM7CXN0YXRlLSZndDthY2wgPSBOVUxMOwomIzQzOwlzdGF0ZS0mZ3Q7bW9kZSA9IGlub2RlLSZndDtpX21vZGU7CiYjNDM7CiYjNDM7CWlmIChTX0lTTE5LKGlub2RlLSZndDtpX21vZGUpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChvc2ItJmd0O3NfbW91bnRfb3B0ICZhbXA7IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkgewomIzQzOwkJZG93bl9yZWFkKCZhbXA7T0NGUzJfSShkaXIpLSZndDtpcF94YXR0cl9zZW0pOwomIzQzOwkJc3RhdGUtJmd0O2RlZmF1bHRfYWNsID0KJiM0MzsJCQlvY2ZzMl9nZXRfYWNsX25vbG9jayhkaXIsIEFDTF9UWVBFX0RFRkFVTFQsIGRpcl9iaCk7CiYjNDM7CQl1cF9yZWFkKCZhbXA7T0NGUzJfSShkaXIpLSZndDtpcF94YXR0cl9zZW0pOwomIzQzOwkJaWYgKElTX0VSUihzdGF0ZS0mZ3Q7ZGVmYXVsdF9hY2wpKSB7CiYjNDM7CQkJcmV0ID0gUFRSX0VSUihzdGF0ZS0mZ3Q7ZGVmYXVsdF9hY2wpOwomIzQzOwkJCXN0YXRlLSZndDtkZWZhdWx0X2FjbCA9IE5VTEw7CiYjNDM7CQkJcmV0dXJuIHJldDsKIAkJfQotCQlpZiAoIWFjbCkgewotCQkJbW9kZSA9IGlub2RlLSZndDtpX21vZGUgJmFtcDsgfmN1cnJlbnRfdW1hc2soKTsKLQkJCXJldCA9IG9jZnMyX2FjbF9zZXRfbW9kZShpbm9kZSwgZGlfYmgsIGhhbmRsZSwgbW9kZSk7Ci0JCQlpZiAocmV0KSB7Ci0JCQkJbWxvZ19lcnJubyhyZXQpOwomIzQzOwkJaWYgKHN0YXRlLSZndDtkZWZhdWx0X2FjbCkgewomIzQzOwkJCXN0YXRlLSZndDthY2wgPSBwb3NpeF9hY2xfZHVwKHN0YXRlLSZndDtkZWZhdWx0X2FjbCk7CiYjNDM7CQkJaWYgKCFzdGF0ZS0mZ3Q7YWNsKSB7CiYjNDM7CQkJCXJldCA9IC1FTk9NRU07CiAJCQkJZ290byBjbGVhbnVwOwogCQkJfQomIzQzOwkJCXJldCA9IF9fcG9zaXhfYWNsX2NyZWF0ZSgmYW1wO3N0YXRlLSZndDthY2wsIEdGUF9OT0ZTLAomIzQzOwkJCQkJCSAmYW1wO3N0YXRlLSZndDttb2RlKTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBjbGVhbnVwOwomIzQzOwkJCWlmIChyZXQgPT0gMCkgewomIzQzOwkJCQlwb3NpeF9hY2xfcmVsZWFzZShzdGF0ZS0mZ3Q7YWNsKTsKJiM0MzsJCQkJc3RhdGUtJmd0O2FjbCA9IE5VTEw7CiYjNDM7CQkJfQomIzQzOwkJCWlmICghU19JU0RJUihpbm9kZS0mZ3Q7aV9tb2RlKSkgewomIzQzOwkJCQlwb3NpeF9hY2xfcmVsZWFzZShzdGF0ZS0mZ3Q7ZGVmYXVsdF9hY2wpOwomIzQzOwkJCQlzdGF0ZS0mZ3Q7ZGVmYXVsdF9hY2wgPSBOVUxMOwomIzQzOwkJCX0KJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJc3RhdGUtJmd0O21vZGUgJmFtcDs9IH5jdXJyZW50X3VtYXNrKCk7CiAJCX0KJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXN0YXRlLSZndDttb2RlICZhbXA7PSB+Y3VycmVudF91bWFzaygpOwogCX0KLQlpZiAoKG9zYi0mZ3Q7c19tb3VudF9vcHQgJmFtcDsgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSAmYW1wOyZhbXA7IGFjbCkgewotCQlpZiAoU19JU0RJUihpbm9kZS0mZ3Q7aV9tb2RlKSkgewomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MztjbGVhbnVwOgomIzQzOwlvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKHN0YXRlKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiYjNDM7CQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLAomIzQzOwkJICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCiYjNDM7CQkgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYywKJiM0MzsJCSAgIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0mZ3Q7aV9zYik7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlpZiAoU19JU0xOSyhpbm9kZS0mZ3Q7aV9tb2RlKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAob3NiLSZndDtzX21vdW50X29wdCAmYW1wOyBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHsKJiM0MzsJCWlmIChTX0lTRElSKGlub2RlLSZndDtpX21vZGUpICZhbXA7JmFtcDsgc3RhdGUtJmd0O2RlZmF1bHRfYWNsKSB7CiAJCQlyZXQgPSBvY2ZzMl9zZXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpX2JoLAotCQkJCQkgICAgQUNMX1RZUEVfREVGQVVMVCwgYWNsLAotCQkJCQkgICAgbWV0YV9hYywgZGF0YV9hYyk7CiYjNDM7CQkJCQkgICAgQUNMX1RZUEVfREVGQVVMVCwKJiM0MzsJCQkJCSAgICBzdGF0ZS0mZ3Q7ZGVmYXVsdF9hY2wsIG1ldGFfYWMsCiYjNDM7CQkJCQkgICAgZGF0YV9hYyk7CiAJCQlpZiAocmV0KQotCQkJCWdvdG8gY2xlYW51cDsKJiM0MzsJCQkJcmV0dXJuIHJldDsKIAkJfQotCQltb2RlID0gaW5vZGUtJmd0O2lfbW9kZTsKLQkJcmV0ID0gX19wb3NpeF9hY2xfY3JlYXRlKCZhbXA7YWNsLCBHRlBfTk9GUywgJmFtcDttb2RlKTsKLQkJaWYgKHJldCAmbHQ7IDApCi0JCQlyZXR1cm4gcmV0OwomIzQzOwl9CiAKLQkJcmV0MiA9IG9jZnMyX2FjbF9zZXRfbW9kZShpbm9kZSwgZGlfYmgsIGhhbmRsZSwgbW9kZSk7Ci0JCWlmIChyZXQyKSB7Ci0JCQltbG9nX2Vycm5vKHJldDIpOwotCQkJcmV0ID0gcmV0MjsKLQkJCWdvdG8gY2xlYW51cDsKLQkJfQotCQlpZiAocmV0ICZndDsgMCkgewotCQkJcmV0ID0gb2NmczJfc2V0X2FjbChoYW5kbGUsIGlub2RlLAotCQkJCQkgICAgZGlfYmgsIEFDTF9UWVBFX0FDQ0VTUywKLQkJCQkJICAgIGFjbCwgbWV0YV9hYywgZGF0YV9hYyk7CiYjNDM7CXJldCA9IG9jZnMyX2FjbF9zZXRfbW9kZShpbm9kZSwgZGlfYmgsIGhhbmRsZSwgc3RhdGUtJmd0O21vZGUpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQltbG9nX2Vycm5vKHJldCk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChvc2ItJmd0O3NfbW91bnRfb3B0ICZhbXA7IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkgewomIzQzOwkJaWYgKHN0YXRlLSZndDthY2wpIHsKJiM0MzsJCQlyZXQgPSBvY2ZzMl9zZXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpX2JoLAomIzQzOwkJCQkJICAgIEFDTF9UWVBFX0FDQ0VTUywgc3RhdGUtJmd0O2FjbCwKJiM0MzsJCQkJCSAgICBtZXRhX2FjLCBkYXRhX2FjKTsKIAkJfQogCX0KLWNsZWFudXA6Ci0JcG9zaXhfYWNsX3JlbGVhc2UoYWNsKTsKJiM0MzsKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvYWNsLmggYi9mcy9vY2ZzMi9hY2wuaAppbmRleCA2NjdjNmYwM2ZhNjA2Zi4uYTkxZjljZTI3OGQ2ZDMgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2FjbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL2FjbC5oCkBAIC0yMCw5ICYjNDM7MjAsMjAgQEAgc3RydWN0IHBvc2l4X2FjbCAqb2NmczJfaW9wX2dldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsIGJvb2wgcmN1KTsKIGludCBvY2ZzMl9pb3Bfc2V0X2FjbChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCQkgICAgICBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIGludCB0eXBlKTsKIGV4dGVybiBpbnQgb2NmczJfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7Ci1leHRlcm4gaW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKiwKLQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICosIHN0cnVjdCBidWZmZXJfaGVhZCAqLAotCQkJICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqLAotCQkJICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKTsKJiM0MztzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlIHsKJiM0MzsJc3RydWN0IHBvc2l4X2FjbCAqZGVmYXVsdF9hY2w7CiYjNDM7CXN0cnVjdCBwb3NpeF9hY2wgKmFjbDsKJiM0MzsJdW1vZGVfdCBtb2RlOwomIzQzO307CiYjNDM7CiYjNDM7aW50IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsCiYjNDM7CQkJICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpOwomIzQzO3ZvaWQgb2NmczJfYWNsX2luaXRfcmVsZWFzZShzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSk7CiYjNDM7aW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiYjNDM7CQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLAomIzQzOwkJICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCiYjNDM7CQkgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYywKJiM0MzsJCSAgIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKTsKIAogI2VuZGlmIC8qIE9DRlMyX0FDTF9IICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9uYW1laS5jIGIvZnMvb2NmczIvbmFtZWkuYwppbmRleCAxMjc3NjY2Yzc3Y2QyZC4uZDlhYmExNmE4ZjI4YTcgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL25hbWVpLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIvbmFtZWkuYwpAQCAtMjU2LDYgJiM0MzsyNTYsNyBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCXNpZ3NldF90IG9sZHNldDsKIAlpbnQgZGlkX2Jsb2NrX3NpZ25hbHMgPSAwOwogCXN0cnVjdCBvY2ZzMl9kZW50cnlfbG9jayAqZGwgPSBOVUxMOwomIzQzOwlzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlIGFjbF9zdGF0ZSA9IHsgMCB9OwogCiAJdHJhY2Vfb2NmczJfbWtub2QoZGlyLCBkZW50cnksIGRlbnRyeS0mZ3Q7ZF9uYW1lLmxlbiwgZGVudHJ5LSZndDtkX25hbWUubmFtZSwKIAkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGRpciktJmd0O2lwX2Jsa25vLApAQCAtMzMwLDEwICYjNDM7MzMxLDEzIEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJCX0KIAl9CiAKJiM0MzsJc3RhdHVzID0gb2NmczJfYWNsX2luaXRfcHJlcGFyZShpbm9kZSwgZGlyLCBwYXJlbnRfZmVfYmgsICZhbXA7YWNsX3N0YXRlKTsKJiM0MzsJaWYgKHN0YXR1cyAmbHQ7IDApCiYjNDM7CQlnb3RvIGxlYXZlOwomIzQzOwogCS8qIGNhbGN1bGF0ZSBtZXRhIGRhdGEvY2x1c3RlcnMgZm9yIHNldHRpbmcgc2VjdXJpdHkgYW5kIGFjbCB4YXR0ciAqLwotCXN0YXR1cyA9IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChkaXIsIHBhcmVudF9mZV9iaCwgbW9kZSwKLQkJCQkgICAgICAgJmFtcDtzaSwgJmFtcDt3YW50X2NsdXN0ZXJzLAotCQkJCSAgICAgICAmYW1wO3hhdHRyX2NyZWRpdHMsICZhbXA7d2FudF9tZXRhKTsKJiM0MzsJc3RhdHVzID0gb2NmczJfY2FsY194YXR0cl9pbml0KGRpciwgbW9kZSwgJmFtcDtzaSwgJmFtcDt3YW50X2NsdXN0ZXJzLAomIzQzOwkJCQkgICAgICAgJmFtcDt4YXR0cl9jcmVkaXRzLCAmYW1wO3dhbnRfbWV0YSwgJmFtcDthY2xfc3RhdGUpOwogCWlmIChzdGF0dXMgJmx0OyAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBsZWF2ZTsKQEAgLTQxMSw4ICYjNDM7NDE1LDggQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAkJaW5jX25saW5rKGRpcik7CiAJfQogCi0Jc3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgZGlyLCBuZXdfZmVfYmgsIHBhcmVudF9mZV9iaCwKLQkJCSBtZXRhX2FjLCBkYXRhX2FjKTsKJiM0MzsJc3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgbmV3X2ZlX2JoLCBtZXRhX2FjLCBkYXRhX2FjLAomIzQzOwkJCQkmYW1wO2FjbF9zdGF0ZSk7CiAKIAlpZiAoc3RhdHVzICZsdDsgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC00NzcsNiAmIzQzOzQ4MSw4IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJYnJlbHNlKHBhcmVudF9mZV9iaCk7CiAJa2ZyZWUoc2kudmFsdWUpOwogCiYjNDM7CW9jZnMyX2FjbF9pbml0X3JlbGVhc2UoJmFtcDthY2xfc3RhdGUpOwomIzQzOwogCW9jZnMyX2ZyZWVfZGlyX2xvb2t1cF9yZXN1bHQoJmFtcDtsb29rdXApOwogCiAJaWYgKGlub2RlX2FjKQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIveGF0dHIuYyBiL2ZzL29jZnMyL3hhdHRyLmMKaW5kZXggZmNkZGQzYzEzYWNkZGQuLjRjZjViNjlkMTNiMDk1IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi94YXR0ci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL3hhdHRyLmMKQEAgLTYxMSwxMyAmIzQzOzYxMSwxMCBAQCBpbnQgb2NmczJfY2FsY19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLAogCXJldHVybiByZXQ7CiB9CiAKLWludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsCi0JCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLAotCQkJICB1bW9kZV90IG1vZGUsCiYjNDM7aW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLAogCQkJICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqc2ksCi0JCQkgIGludCAqd2FudF9jbHVzdGVycywKLQkJCSAgaW50ICp4YXR0cl9jcmVkaXRzLAotCQkJICBpbnQgKndhbnRfbWV0YSkKJiM0MzsJCQkgIGludCAqd2FudF9jbHVzdGVycywgaW50ICp4YXR0cl9jcmVkaXRzLAomIzQzOwkJCSAgaW50ICp3YW50X21ldGEsIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKmFjbF9zdGF0ZSkKIHsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGRpci0mZ3Q7aV9zYik7CkBAIC02MjgsMTkgJiM0Mzs2MjUsMTUgQEAgaW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJCQkJCSAgICAgc2ktJmd0O3ZhbHVlX2xlbik7CiAKIAlpZiAob3NiLSZndDtzX21vdW50X29wdCAmYW1wOyBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHsKLQkJZG93bl9yZWFkKCZhbXA7T0NGUzJfSShkaXIpLSZndDtpcF94YXR0cl9zZW0pOwotCQlhY2xfbGVuID0gb2NmczJfeGF0dHJfZ2V0X25vbG9jayhkaXIsIGRpcl9iaCwKLQkJCQkJT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFQsCi0JCQkJCSYjMzQ7JiMzNDssIE5VTEwsIDApOwotCQl1cF9yZWFkKCZhbXA7T0NGUzJfSShkaXIpLSZndDtpcF94YXR0cl9zZW0pOwotCQlpZiAoYWNsX2xlbiAmZ3Q7IDApIHsKLQkJCWFfc2l6ZSA9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTsKLQkJCWlmIChTX0lTRElSKG1vZGUpKQotCQkJCWFfc2l6ZSAmbHQ7Jmx0Oz0gMTsKLQkJfSBlbHNlIGlmIChhY2xfbGVuICE9IDAgJmFtcDsmYW1wOyBhY2xfbGVuICE9IC1FTk9EQVRBKSB7Ci0JCQlyZXQgPSBhY2xfbGVuOwotCQkJbWxvZ19lcnJubyhyZXQpOwotCQkJcmV0dXJuIHJldDsKJiM0MzsJCWlmIChhY2xfc3RhdGUtJmd0O2RlZmF1bHRfYWNsICZhbXA7JmFtcDsgU19JU0RJUihtb2RlKSkgewomIzQzOwkJCWFjbF9sZW4gPSBhY2xfc3RhdGUtJmd0O2RlZmF1bHRfYWNsLSZndDthX2NvdW50ICoKJiM0MzsJCQkJICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7CiYjNDM7CQkJYV9zaXplICYjNDM7PSBvY2ZzMl94YXR0cl9lbnRyeV9yZWFsX3NpemUoMCwgYWNsX2xlbik7CiYjNDM7CQl9CiYjNDM7CQlpZiAoYWNsX3N0YXRlLSZndDthY2wpIHsKJiM0MzsJCQlhY2xfbGVuID0gYWNsX3N0YXRlLSZndDthY2wtJmd0O2FfY291bnQgKgomIzQzOwkJCQkgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTsKJiM0MzsJCQlhX3NpemUgJiM0Mzs9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTsKIAkJfQogCX0KIApAQCAtNjgzLDE0ICYjNDM7Njc2LDI5IEBAIGludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsCiAJCQkJCQkJICAgbmV3X2NsdXN0ZXJzKTsKIAkJKndhbnRfY2x1c3RlcnMgJiM0Mzs9IG5ld19jbHVzdGVyczsKIAl9Ci0JaWYgKG9zYi0mZ3Q7c19tb3VudF9vcHQgJmFtcDsgT0NGUzJfTU9VTlRfUE9TSVhfQUNMICZhbXA7JmFtcDsKLQkgICAgYWNsX2xlbiAmZ3Q7IE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7Ci0JCS8qIGZvciBkaXJlY3RvcnksIGl0IGhhcyBERUZBVUxUIGFuZCBBQ0NFU1MgdHdvIHR5cGVzIG9mIGFjbHMgKi8KLQkJbmV3X2NsdXN0ZXJzID0gKFNfSVNESVIobW9kZSkgPyAyIDogMSkgKgotCQkJCW9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhkaXItJmd0O2lfc2IsIGFjbF9sZW4pOwotCQkqeGF0dHJfY3JlZGl0cyAmIzQzOz0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGRpci0mZ3Q7aV9zYiwKLQkJCQkJCQkgICBuZXdfY2x1c3RlcnMpOwotCQkqd2FudF9jbHVzdGVycyAmIzQzOz0gbmV3X2NsdXN0ZXJzOwomIzQzOwlpZiAob3NiLSZndDtzX21vdW50X29wdCAmYW1wOyBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHsKJiM0MzsJCWlmIChhY2xfc3RhdGUtJmd0O2RlZmF1bHRfYWNsICZhbXA7JmFtcDsgU19JU0RJUihtb2RlKSkgewomIzQzOwkJCWFjbF9sZW4gPSBhY2xfc3RhdGUtJmd0O2RlZmF1bHRfYWNsLSZndDthX2NvdW50ICoKJiM0MzsJCQkJICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7CiYjNDM7CQkJaWYgKGFjbF9sZW4gJmd0OyBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkgewomIzQzOwkJCQluZXdfY2x1c3RlcnMgPSBvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoZGlyLSZndDtpX3NiLAomIzQzOwkJCQkJCQkJCWFjbF9sZW4pOwomIzQzOwkJCQkqeGF0dHJfY3JlZGl0cyAmIzQzOz0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGRpci0mZ3Q7aV9zYiwKJiM0MzsJCQkJCQkJCQkgICBuZXdfY2x1c3RlcnMpOwomIzQzOwkJCQkqd2FudF9jbHVzdGVycyAmIzQzOz0gbmV3X2NsdXN0ZXJzOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsJCWlmIChhY2xfc3RhdGUtJmd0O2FjbCkgewomIzQzOwkJCWFjbF9sZW4gPSBhY2xfc3RhdGUtJmd0O2FjbC0mZ3Q7YV9jb3VudCAqCiYjNDM7CQkJCSAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpOwomIzQzOwkJCWlmIChhY2xfbGVuICZndDsgT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpIHsKJiM0MzsJCQkJbmV3X2NsdXN0ZXJzID0gb2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGRpci0mZ3Q7aV9zYiwKJiM0MzsJCQkJCQkJCQlhY2xfbGVuKTsKJiM0MzsJCQkJKnhhdHRyX2NyZWRpdHMgJiM0Mzs9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhkaXItJmd0O2lfc2IsCiYjNDM7CQkJCQkJCQkJICAgbmV3X2NsdXN0ZXJzKTsKJiM0MzsJCQkJKndhbnRfY2x1c3RlcnMgJiM0Mzs9IG5ld19jbHVzdGVyczsKJiM0MzsJCQl9CiYjNDM7CQl9CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTM1NDIsOCAmIzQzOzM1NTAsNiBAQCBpbnQgb2NmczJfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGVfdCAqaGFuZGxlLAogCXhpcy5pbm9kZV9iaCA9IHhicy5pbm9kZV9iaCA9IGRpX2JoOwogCWRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilkaV9iaC0mZ3Q7Yl9kYXRhOwogCi0JZG93bl93cml0ZSgmYW1wO09DRlMyX0koaW5vZGUpLSZndDtpcF94YXR0cl9zZW0pOwotCiAJcmV0ID0gb2NmczJfeGF0dHJfaWJvZHlfZmluZChpbm9kZSwgbmFtZV9pbmRleCwgbmFtZSwgJmFtcDt4aXMpOwogCWlmIChyZXQpCiAJCWdvdG8gY2xlYW51cDsKQEAgLTM1NTYsNyAmIzQzOzM1NjIsNiBAQCBpbnQgb2NmczJfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGVfdCAqaGFuZGxlLAogCXJldCA9IF9fb2NmczJfeGF0dHJfc2V0X2hhbmRsZShpbm9kZSwgZGksICZhbXA7eGksICZhbXA7eGlzLCAmYW1wO3hicywgJmFtcDtjdHh0KTsKIAogY2xlYW51cDoKLQl1cF93cml0ZSgmYW1wO09DRlMyX0koaW5vZGUpLSZndDtpcF94YXR0cl9zZW0pOwogCWJyZWxzZSh4YnMueGF0dHJfYmgpOwogCW9jZnMyX3hhdHRyX2J1Y2tldF9mcmVlKHhicy5idWNrZXQpOwogCkBAIC03MjU3LDYgJiM0Mzs3MjYyLDcgQEAgaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpciwKIHsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCA9IE5VTEw7CiYjNDM7CXN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgYWNsX3N0YXRlID0geyAwIH07CiAKIAlyZXQgPSBvY2ZzMl9pbml0X3NlY3VyaXR5X2dldChpbm9kZSwgZGlyLCBxc3RyLCBOVUxMKTsKIAlpZiAocmV0KSB7CkBAIC03MjY5LDEwICYjNDM7NzI3NSwxNyBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLAogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gbGVhdmU7CiAJfQotCXJldCA9IG9jZnMyX2luaXRfYWNsKE5VTEwsIGlub2RlLCBkaXIsIE5VTEwsIGRpcl9iaCwgTlVMTCwgTlVMTCk7CiYjNDM7CiYjNDM7CXJldCA9IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoaW5vZGUsIGRpciwgZGlyX2JoLCAmYW1wO2FjbF9zdGF0ZSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIHVubG9jazsKJiM0MzsKJiM0MzsJcmV0ID0gb2NmczJfaW5pdF9hY2woTlVMTCwgaW5vZGUsIE5VTEwsIE5VTEwsIE5VTEwsICZhbXA7YWNsX3N0YXRlKTsKIAlpZiAocmV0KQogCQltbG9nX2Vycm5vKHJldCk7CiAKJiM0Mzt1bmxvY2s6CiYjNDM7CW9jZnMyX2FjbF9pbml0X3JlbGVhc2UoJmFtcDthY2xfc3RhdGUpOwogCW9jZnMyX2lub2RlX3VubG9jayhkaXIsIDApOwogCWJyZWxzZShkaXJfYmgpOwogbGVhdmU6CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5oIGIvZnMvb2NmczIveGF0dHIuaAppbmRleCA2NWU5YWE3NDM5MTk5ZS4uNWNkZDZjNmI0MDA2NGIgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3hhdHRyLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIveGF0dHIuaApAQCAtNTUsOSAmIzQzOzU1LDEyIEBAIGludCBvY2ZzMl9pbml0X3NlY3VyaXR5X3NldChoYW5kbGVfdCAqLCBzdHJ1Y3QgaW5vZGUgKiwKIGludCBvY2ZzMl9jYWxjX3NlY3VyaXR5X2luaXQoc3RydWN0IGlub2RlICosCiAJCQkgICAgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICosCiAJCQkgICAgIGludCAqLCBpbnQgKiwgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKiopOwotaW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICosCi0JCQkgIHVtb2RlX3QsIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICosCi0JCQkgIGludCAqLCBpbnQgKiwgaW50ICopOwomIzQzOwomIzQzO3N0cnVjdCBvY2ZzMl9hY2xfc3RhdGU7CiYjNDM7aW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLAomIzQzOwkJCSAgc3RydWN0IG9jZnMyX3NlY3VyaXR5X3hhdHRyX2luZm8gKnNpLAomIzQzOwkJCSAgaW50ICp3YW50X2NsdXN0ZXJzLCBpbnQgKnhhdHRyX2NyZWRpdHMsCiYjNDM7CQkJICBpbnQgKndhbnRfbWV0YSwgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqYWNsX3N0YXRlKTsKIAogLyoKICAqIHhhdHRycyBjYW4gbGl2ZSBpbnNpZGUgYW4gaW5vZGUsIGFzIHBhcnQgb2YgYW4gZXh0ZXJuYWwgeGF0dHIgYmxvY2ssCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE5OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyMjYKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA1NzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBPQ0ZTMiBBQ0wgYW5kIFhhdHRyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdG91Y2hlcyBzZXZlcmFsIGNvcmUgT0NGUzIgZmlsZXM6IGBhY2wuY2AsIGBuYW1laS5jYCwgYHhhdHRyLmNgLCBhbmQgYHhhdHRyLmhgLiBJdCBzZWVtcyBsaWtlIGEgcmVmYWN0b3JpbmcgZWZmb3J0IHJlbGF0ZWQgdG8gQUNMIGluaXRpYWxpemF0aW9uLCBzcGVjaWZpY2FsbHkgaW50cm9kdWNpbmcgdGhlc2UgbmV3IGZ1bmN0aW9uczogYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgLCBgb2NmczJfYWNsX2luaXRfcmVsZWFzZWAsIGFuZCBtb2RpZnlpbmcgYG9jZnMyX2luaXRfYWNsYCBhbmQgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIG9yZ2FuaXphdGlvbmFsIGNoYW5nZSwgaG9wZWZ1bGx5IGFpbWVkIGF0IGltcHJvdmluZyBtb2R1bGFyaXR5IG9yIHBlcmZvcm1hbmNlIGluIHRob3NlIEFDTCByb3V0aW5lcy4KCk5vdywgdGhpcyBwYXJ0IGhlcmXigKYgdGhlIHJlbW92YWwgb2YgYGRvd25fd3JpdGUoJmFtcDtPQ0ZTMl9JKGlub2RlKS0mZ3Q7aXBfeGF0dHJfc2VtKTtgIGZyb20gYG9jZnMyX3hhdHRyX3NldF9oYW5kbGVgLi4uIFRoYXQmIzM5O3MgZ290IG15IGF0dGVudGlvbi4gV2h5IGlzIHRoZSBzZW1hcGhvcmUgYmVpbmcgcmVtb3ZlZCBpbiBgZnMvb2NmczIveGF0dHIuY2A/IExldCBtZSBkb3VibGUtY2hlY2suIFl1cCwgdGhlcmUgaXQgaXMuIExvb2tzIGxpa2UgdGhleSYjMzk7dmUgdGFrZW4gb3V0IHRoZSBsb2NraW5nIHRoYXQgc3Vycm91bmRlZCB0aGUgeGF0dHIgb3BlcmF0aW9uLiBUaGlzIGlzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSwgbm90IGp1c3QgYW4gb3JnYW5pemF0aW9uYWwgb25lLiBXZSBuZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgY29uY3VycmVudCBhY2Nlc3MgYW5kIGRhdGEgaW50ZWdyaXR5IGlmIHRoaXMgY2hhbmdlIGlzIGNvcnJlY3QuCgpJIHNlZSB0aGV5JiMzOTt2ZSByZW1vdmVkIHRoZSBkb3duIGFuZCB1cCB3cml0ZSBjYWxscyB0byB0aGUgc2VtYXBob3JlLiBUaGlzIGhhcyBzZXJpb3VzIGltcGxpY2F0aW9ucyBmb3IgY29uY3VycmVudCB4YXR0ciBvcGVyYXRpb25zLiBXZSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIGhvdyB4YXR0ciBvcGVyYXRpb25zIGFyZSBub3cgc3luY2hyb25pemVkLCBpZiBhdCBhbGwuIEl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyB3YXMgZGVlbWVkIHNhZmUgb3IgbmVjZXNzYXJ5LiBJcyB0aGVyZSBhIG5ldyBsb2NraW5nIG1lY2hhbmlzbSBpbnRyb2R1Y2VkLCBvciBpcyB0aGUgb3JpZ2luYWwgbG9ja2luZyBwYXR0ZXJuIHNvbWVob3cgcmVkdW5kYW50PwoKQWxyaWdodCwgT0NGUzIgaXMgYSBmaWxlc3lzdGVtLCBzbywgdGhhbmtmdWxseSwgdGhpcyBpcyB0ZXN0YWJsZTsgd2UgY2FuIG1vdW50IGl0IGFuZCBydW4gdGhyb3VnaCBhIHN1aXRlIG9mIHRlc3RzIHRvIHNlZSBpZiBhbnl0aGluZyBicmVha3MuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB3ZSBoYXZlIHRvIGRlYWwgd2l0aC4gQWgsIGBDT05GSUdfT0NGUzJfRlNgIGlzIHRoZSBvYnZpb3VzIG9uZSwgd2hpY2ggZW5hYmxlcyB0aGUgT0NGUzIgZmlsZXN5c3RlbS4gQW5kIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYENPTkZJR19PQ0ZTMl9GU19QT1NJWF9BQ0xgIGp1c3QgdG8gYmUgc3VyZSwgdGhhdCBQT1NJWCBBQ0xzIG1pZ2h0IGJlIHJlcXVpcmVkIGZvciB0aGlzIHBhdGNoIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxOTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgT0NGUzJfRlMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvb2NmczIvS2NvbmZpZzoyOmNvbmZpZyBPQ0ZTMl9GU1xuZnMvb2NmczIvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7T0NGUzIgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL29jZnMyL0tjb25maWctMjctXG5mcy9vY2ZzMi9LY29uZmlnOjI4OmNvbmZpZyBPQ0ZTMl9GU19PMkNCXG5mcy9vY2ZzMi9LY29uZmlnLTI5LVx0dHJpc3RhdGUgXCYjMzQ7TzJDQiBLZXJuZWxzcGFjZSBDbHVzdGVyaW5nXCYjMzQ7XG4tLVxuZnMvb2NmczIvS2NvbmZpZy00MS1cbmZzL29jZnMyL0tjb25maWc6NDI6Y29uZmlnIE9DRlMyX0ZTX1VTRVJTUEFDRV9DTFVTVEVSXG5mcy9vY2ZzMi9LY29uZmlnLTQzLVx0dHJpc3RhdGUgXCYjMzQ7T0NGUzIgVXNlcnNwYWNlIENsdXN0ZXJpbmdcJiMzNDtcbi0tXG5mcy9vY2ZzMi9LY29uZmlnLTUzLVxuZnMvb2NmczIvS2NvbmZpZzo1NDpjb25maWcgT0NGUzJfRlNfU1RBVFNcbmZzL29jZnMyL0tjb25maWctNTUtXHRib29sIFwmIzM0O09DRlMyIHN0YXRpc3RpY3NcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxOTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTYyCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkNoZWNraW5nIGZvciBQT1NJWCBBQ0wgU3VwcG9ydCBpbiBPQ0ZTMioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGZpbGVzeXN0ZW0gdGhhdCBuYXRpdmVseSBzdXBwb3J0cyBQT1NJWCBBQ0xzLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHByb2JpbmcgZm9yIHRoZSBwcmVzZW5jZSBvZiB0aGUgYE9DRlMyX0ZTX1BPU0lYX0FDTGAgZmxhZywgb3Igc29tZXRoaW5nIGFuYWxvZ291cy4gSXQmIzM5O3MgdGhlIG1vc3QgY29tbW9uIGFuZCBkaXJlY3QgaW5kaWNhdG9yLiBJZiB0aGF0JiMzOTtzIHByZXNlbnQsIEkgY2FuIGluZmVyIGEgY2VydGFpbiBsZXZlbCBvZiBzdXBwb3J0IGFuZCB0YWlsb3Igc3Vic2VxdWVudCBvcGVyYXRpb25zIGJhc2VkIG9uIHRoYXQga25vd2xlZGdlLiBJZiBpdCYjMzk7cyAqbm90KiBwcmVzZW50LCB0aGVuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlci4gSSYjMzk7bGwgbmVlZCB0byBtb3ZlIG9uIHRvIGNoZWNrIGZvciBhIGNvbXBhdGliaWxpdHkgbGF5ZXIgb3Igb3RoZXIgbWVjaGFuaXNtIHRvIHN1cHBvcnQgdGhpcywgaWYgdGhlIGZpbGVzeXN0ZW0gYWR2ZXJ0aXNlcyBhbnl0aGluZyBvdGhlciB0aGFuIG5vdCBzdXBwb3J0aW5nIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTk6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE9DRlMyX0ZTXyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9vY2ZzMi9LY29uZmlnPTI9Y29uZmlnIE9DRlMyX0ZTXG4tLVxuZnMvb2NmczIvS2NvbmZpZy0yNy1cbmZzL29jZnMyL0tjb25maWc6Mjg6Y29uZmlnIE9DRlMyX0ZTX08yQ0JcbmZzL29jZnMyL0tjb25maWctMjktXHR0cmlzdGF0ZSBcJiMzNDtPMkNCIEtlcm5lbHNwYWNlIENsdXN0ZXJpbmdcJiMzNDtcbi0tXG5mcy9vY2ZzMi9LY29uZmlnLTQxLVxuZnMvb2NmczIvS2NvbmZpZzo0Mjpjb25maWcgT0NGUzJfRlNfVVNFUlNQQUNFX0NMVVNURVJcbmZzL29jZnMyL0tjb25maWctNDMtXHR0cmlzdGF0ZSBcJiMzNDtPQ0ZTMiBVc2Vyc3BhY2UgQ2x1c3RlcmluZ1wmIzM0O1xuLS1cbmZzL29jZnMyL0tjb25maWctNTMtXG5mcy9vY2ZzMi9LY29uZmlnOjU0OmNvbmZpZyBPQ0ZTMl9GU19TVEFUU1xuZnMvb2NmczIvS2NvbmZpZy01NS1cdGJvb2wgXCYjMzQ7T0NGUzIgc3RhdGlzdGljc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE5OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5ODYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBBYnNlbmNlIG9mIGBPQ0ZTMl9GU19QT1NJWF9BQ0xgKioKCkhtbSwgaXQgc2VlbXMgdGhhdCBgT0NGUzJfRlNfUE9TSVhfQUNMYCBpc24mIzM5O3QgZGVmaW5lZC4gVGhhdCYjMzk7cyBhIGJpdCBvZGQuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBjb2RlIHRvIGZpbmQgd2hlcmUgdGhpcyBpcyBjb25maWd1cmVkLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlcyB0byBzdGFydCBsb29raW5nIGZvciB0aGlzIHdvdWxkIGJlIHRoZSBgZnMvb2NmczIvTWFrZWZpbGVgIGFuZCBgZnMvb2NmczIvS2NvbmZpZ2AgZmlsZXMuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aG9zZSwgdGhlIE1ha2VmaWxlIHNob3VsZCBiZSByZWxhdGVkIHRvIGNvbXBpbGF0aW9uIGFuZCB0aGUgS2NvbmZpZyB0byBrZXJuZWwgY29uZmlndXJhdGlvbnMsIGFzIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBBQ0wgaXMgYmVpbmcgaGFuZGxlZCBpbiBPQ0ZTMi4gSSB3aWxsIGJlIGxvb2tpbmcgZm9yIGhvdyBBQ0wgc3VwcG9ydCBpcyBlbmFibGVkIGFuZCB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxOTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQT1NJWF9BQ0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9vY2ZzMi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvS2NvbmZpZz0yPWNvbmZpZyBPQ0ZTMl9GU1xuLS1cbmZzL29jZnMyL0tjb25maWctOS1cdHNlbGVjdCBRVU9UQV9UUkVFXG5mcy9vY2ZzMi9LY29uZmlnOjEwOlx0c2VsZWN0IEZTX1BPU0lYX0FDTFxuZnMvb2NmczIvS2NvbmZpZy0xMS1cdHNlbGVjdCBMRUdBQ1lfRElSRUNUX0lPXG4tLVxuZnMvb2NmczIvYWNsLmM9MTEzPXN0YXRpYyBzdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9nZXRfYWNsX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSxcbi0tXG5mcy9vY2ZzMi9hY2wuYy0xMjItXHRjYXNlIEFDTF9UWVBFX0FDQ0VTUzpcbmZzL29jZnMyL2FjbC5jOjEyMzpcdFx0bmFtZV9pbmRleCA9IE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1M7XG5mcy9vY2ZzMi9hY2wuYy0xMjQtXHRcdGJyZWFrO1xuZnMvb2NmczIvYWNsLmMtMTI1LVx0Y2FzZSBBQ0xfVFlQRV9ERUZBVUxUOlxuZnMvb2NmczIvYWNsLmM6MTI2Olx0XHRuYW1lX2luZGV4ID0gT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFQ7XG5mcy9vY2ZzMi9hY2wuYy0xMjctXHRcdGJyZWFrO1xuLS1cbmZzL29jZnMyL2FjbC5jPTIxND1zdGF0aWMgaW50IG9jZnMyX3NldF9hY2woaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9vY2ZzMi9hY2wuYy0yMzEtXHRjYXNlIEFDTF9UWVBFX0FDQ0VTUzpcbmZzL29jZnMyL2FjbC5jOjIzMjpcdFx0bmFtZV9pbmRleCA9IE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1M7XG5mcy9vY2ZzMi9hY2wuYy0yMzMtXHRcdGJyZWFrO1xuZnMvb2NmczIvYWNsLmMtMjM0LVx0Y2FzZSBBQ0xfVFlQRV9ERUZBVUxUOlxuZnMvb2NmczIvYWNsLmM6MjM1Olx0XHRuYW1lX2luZGV4ID0gT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFQ7XG5mcy9vY2ZzMi9hY2wuYy0yMzYtXHRcdGlmICghU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKVxuLS1cbmZzL29jZnMyL2FjbC5jPTI5Mz1zdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9pb3BfZ2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgYm9vbCByY3UpXG4tLVxuZnMvb2NmczIvYWNsLmMtMzA0LVx0b3NiID0gT0NGUzJfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG5mcy9vY2ZzMi9hY2wuYzozMDU6XHRpZiAoIShvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkpXG5mcy9vY2ZzMi9hY2wuYy0zMDYtXHRcdHJldHVybiBOVUxMO1xuLS1cbmZzL29jZnMyL2FjbC5jPTMyMT1pbnQgb2NmczJfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG4tLVxuZnMvb2NmczIvYWNsLmMtMzI5LVxuZnMvb2NmczIvYWNsLmM6MzMwOlx0aWYgKCEob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpKVxuZnMvb2NmczIvYWNsLmMtMzMxLVx0XHRyZXR1cm4gMDtcbi0tXG5mcy9vY2ZzMi9hY2wuYz0zNTk9aW50IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvb2NmczIvYWNsLmMtMzcyLVxuZnMvb2NmczIvYWNsLmM6MzczOlx0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG5mcy9vY2ZzMi9hY2wuYy0zNzQtXHRcdGRvd25fcmVhZChcdTAwMjZPQ0ZTMl9JKGRpciktXHUwMDNlaXBfeGF0dHJfc2VtKTtcbi0tXG5mcy9vY2ZzMi9hY2wuYz00MTQ9aW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvb2NmczIvYWNsLmMtNDI1LVxuZnMvb2NmczIvYWNsLmM6NDI2Olx0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG5mcy9vY2ZzMi9hY2wuYy00MjctXHRcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkgXHUwMDI2XHUwMDI2IHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKSB7XG4tLVxuZnMvb2NmczIvYWNsLmMtNDQyLVxuZnMvb2NmczIvYWNsLmM6NDQzOlx0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG5mcy9vY2ZzMi9hY2wuYy00NDQtXHRcdGlmIChzdGF0ZS1cdTAwM2VhY2wpIHtcbi0tXG5mcy9vY2ZzMi9vY2ZzMi5oPTI1Nz1lbnVtIG9jZnMyX21vdW50X29wdGlvbnNcbi0tXG5mcy9vY2ZzMi9vY2ZzMi5oLTI2Ni1cdE9DRlMyX01PVU5UX0lOT0RFNjQgPSAxIFx1MDAzY1x1MDAzYyA3LFx0LyogQWxsb3cgaW5vZGUgbnVtYmVycyBcdTAwM2UgMl4zMiAqL1xuZnMvb2NmczIvb2NmczIuaDoyNjc6XHRPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wgPSAxIFx1MDAzY1x1MDAzYyA4LFx0LyogRm9yY2UgUE9TSVggYWNjZXNzIGNvbnRyb2wgbGlzdHMgKi9cbmZzL29jZnMyL29jZnMyLmg6MjY4Olx0T0NGUzJfTU9VTlRfTk9fUE9TSVhfQUNMID0gMSBcdTAwM2NcdTAwM2MgOSxcdC8qIERpc2FibGUgUE9TSVggYWNjZXNzXG5mcy9vY2ZzMi9vY2ZzMi5oLTI2OS1cdFx0XHRcdFx0XHQgICBjb250cm9sIGxpc3RzICovXG4tLVxuZnMvb2NmczIvc3VwZXIuYz02MDc9c3RhdGljIGludCBvY2ZzMl9yZWNvbmZpZ3VyZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvb2NmczIvc3VwZXIuYy03MTctXHRcdHNiLVx1MDAzZXNfZmxhZ3MgPSAoc2ItXHUwMDNlc19mbGFncyBcdTAwMjYgflNCX1BPU0lYQUNMKSB8XG5mcy9vY2ZzMi9zdXBlci5jOjcxODpcdFx0XHQoKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSA/XG5mcy9vY2ZzMi9zdXBlci5jLTcxOS1cdFx0XHRcdFx0XHRcdFNCX1BPU0lYQUNMIDogMCk7XG4tLVxuZnMvb2NmczIvc3VwZXIuYz05NzM9c3RhdGljIGludCBvY2ZzMl9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9vY2ZzMi9zdXBlci5jLTEwMjQtXHRzYi1cdTAwM2VzX2ZsYWdzID0gKHNiLVx1MDAzZXNfZmxhZ3MgXHUwMDI2IH4oU0JfUE9TSVhBQ0wgfCBTQl9OT1NFQykpIHxcbmZzL29jZnMyL3N1cGVyLmM6MTAyNTpcdFx0KChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkgPyBTQl9QT1NJWEFDTCA6IDApO1xuZnMvb2NmczIvc3VwZXIuYy0xMDI2LVxuLS1cbmZzL29jZnMyL3N1cGVyLmM9MTIzMj1zdGF0aWMgaW50IG9jZnMyX2NoZWNrX3NldF9vcHRpb25zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvb2NmczIvc3VwZXIuYy0xMjYwLVx0fVxuZnMvb2NmczIvc3VwZXIuYzoxMjYxOlx0aWYgKG9wdGlvbnMtXHUwMDNlbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wgXHUwMDI2XHUwMDI2XG5mcy9vY2ZzMi9zdXBlci5jLTEyNjItXHQgICAgIU9DRlMyX0hBU19JTkNPTVBBVF9GRUFUVVJFKHNiLCBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX1hBVFRSKSkge1xuLS1cbmZzL29jZnMyL3N1cGVyLmMtMTI2Ny1cdC8qIE5vIEFDTCBzZXR0aW5nIHNwZWNpZmllZD8gVXNlIFhBVFRSIGZlYXR1cmUuLi4gKi9cbmZzL29jZnMyL3N1cGVyLmM6MTI2ODpcdGlmICghKG9wdGlvbnMtXHUwMDNlbW91bnRfb3B0IFx1MDAyNiAoT0NGUzJfTU9VTlRfUE9TSVhfQUNMIHxcbmZzL29jZnMyL3N1cGVyLmM6MTI2OTpcdFx0XHRcdCAgICBPQ0ZTMl9NT1VOVF9OT19QT1NJWF9BQ0wpKSkge1xuZnMvb2NmczIvc3VwZXIuYy0xMjcwLVx0XHRpZiAoT0NGUzJfSEFTX0lOQ09NUEFUX0ZFQVRVUkUoc2IsIE9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfWEFUVFIpKVxuZnMvb2NmczIvc3VwZXIuYzoxMjcxOlx0XHRcdG9wdGlvbnMtXHUwMDNlbW91bnRfb3B0IHw9IE9DRlMyX01PVU5UX1BPU0lYX0FDTDtcbmZzL29jZnMyL3N1cGVyLmMtMTI3Mi1cdFx0ZWxzZVxuZnMvb2NmczIvc3VwZXIuYzoxMjczOlx0XHRcdG9wdGlvbnMtXHUwMDNlbW91bnRfb3B0IHw9IE9DRlMyX01PVU5UX05PX1BPU0lYX0FDTDtcbmZzL29jZnMyL3N1cGVyLmMtMTI3NC1cdH1cbi0tXG5mcy9vY2ZzMi9zdXBlci5jPTEyNzg9c3RhdGljIGludCBvY2ZzMl9wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKVxuLS1cbmZzL29jZnMyL3N1cGVyLmMtMTM4NC1cdFx0aWYgKHJlc3VsdC5uZWdhdGVkKSB7XG5mcy9vY2ZzMi9zdXBlci5jOjEzODU6XHRcdFx0bW9wdC1cdTAwM2Vtb3VudF9vcHQgfD0gT0NGUzJfTU9VTlRfTk9fUE9TSVhfQUNMO1xuZnMvb2NmczIvc3VwZXIuYzoxMzg2Olx0XHRcdG1vcHQtXHUwMDNlbW91bnRfb3B0IFx1MDAyNj0gfk9DRlMyX01PVU5UX1BPU0lYX0FDTDtcbmZzL29jZnMyL3N1cGVyLmMtMTM4Ny1cdFx0fSBlbHNlIHtcbmZzL29jZnMyL3N1cGVyLmM6MTM4ODpcdFx0XHRtb3B0LVx1MDAzZW1vdW50X29wdCB8PSBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0w7XG5mcy9vY2ZzMi9zdXBlci5jOjEzODk6XHRcdFx0bW9wdC1cdTAwM2Vtb3VudF9vcHQgXHUwMDI2PSB+T0NGUzJfTU9VTlRfTk9fUE9TSVhfQUNMO1xuZnMvb2NmczIvc3VwZXIuYy0xMzkwLVx0XHR9XG4tLVxuZnMvb2NmczIvc3VwZXIuYz0xNDE2PXN0YXRpYyBpbnQgb2NmczJfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IGRlbnRyeSAqcm9vdClcbi0tXG5mcy9vY2ZzMi9zdXBlci5jLTE0ODQtXG5mcy9vY2ZzMi9zdXBlci5jOjE0ODU6XHRpZiAob3B0cyBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKVxuZnMvb2NmczIvc3VwZXIuYy0xNDg2LVx0XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyxhY2xcJiMzNDspO1xuLS1cbmZzL29jZnMyL3hhdHRyLmM9MTAxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqIGNvbnN0IG9jZnMyX3hhdHRyX2hhbmRsZXJfbWFwW09DRlMyX1hBVFRSX01BWF0gPSB7XG5mcy9vY2ZzMi94YXR0ci5jLTEwMi1cdFtPQ0ZTMl9YQVRUUl9JTkRFWF9VU0VSXVx0XHQ9IFx1MDAyNm9jZnMyX3hhdHRyX3VzZXJfaGFuZGxlcixcbmZzL29jZnMyL3hhdHRyLmM6MTAzOlx0W09DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1NdXHQ9IFx1MDAyNm5vcF9wb3NpeF9hY2xfYWNjZXNzLFxuZnMvb2NmczIveGF0dHIuYzoxMDQ6XHRbT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFRdXHQ9IFx1MDAyNm5vcF9wb3NpeF9hY2xfZGVmYXVsdCxcbmZzL29jZnMyL3hhdHRyLmMtMTA1LVx0W09DRlMyX1hBVFRSX0lOREVYX1RSVVNURURdXHRcdD0gXHUwMDI2b2NmczJfeGF0dHJfdHJ1c3RlZF9oYW5kbGVyLFxuLS1cbmZzL29jZnMyL3hhdHRyLmM9NjE0PWludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSxcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTYyNi1cbmZzL29jZnMyL3hhdHRyLmM6NjI3Olx0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG5mcy9vY2ZzMi94YXR0ci5jLTYyOC1cdFx0aWYgKGFjbF9zdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCBcdTAwMjZcdTAwMjYgU19JU0RJUihtb2RlKSkge1xuLS1cbmZzL29jZnMyL3hhdHRyLmMtNjc4LVx0fVxuZnMvb2NmczIveGF0dHIuYzo2Nzk6XHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbmZzL29jZnMyL3hhdHRyLmMtNjgwLVx0XHRpZiAoYWNsX3N0YXRlLVx1MDAzZWRlZmF1bHRfYWNsIFx1MDAyNlx1MDAyNiBTX0lTRElSKG1vZGUpKSB7XG4tLVxuZnMvb2NmczIveGF0dHIuYz04ODc9c3RhdGljIGludCBvY2ZzMl94YXR0cl9saXN0X2VudHJ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvb2NmczIveGF0dHIuYy05MDItXG5mcy9vY2ZzMi94YXR0ci5jOjkwMzpcdGNhc2UgT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0FDQ0VTUzpcbmZzL29jZnMyL3hhdHRyLmM6OTA0Olx0Y2FzZSBPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfREVGQVVMVDpcbmZzL29jZnMyL3hhdHRyLmMtOTA1LVx0XHRpZiAoIShzYi1cdTAwM2VzX2ZsYWdzIFx1MDAyNiBTQl9QT1NJWEFDTCkpXG4tLVxuZnMvb2NmczIveGF0dHIuYz03MTY4PXN0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl9ub19zZWN1cml0eShzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKnhlKVxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNzE3Mi1cdHJldHVybiB0eXBlICE9IE9DRlMyX1hBVFRSX0lOREVYX1NFQ1VSSVRZIFx1MDAyNlx1MDAyNlxuZnMvb2NmczIveGF0dHIuYzo3MTczOlx0ICAgICAgIHR5cGUgIT0gT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0FDQ0VTUyBcdTAwMjZcdTAwMjZcbmZzL29jZnMyL3hhdHRyLmM6NzE3NDpcdCAgICAgICB0eXBlICE9IE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9ERUZBVUxUO1xuZnMvb2NmczIveGF0dHIuYy03MTc1LX1cbi0tXG5mcy9vY2ZzMi94YXR0ci5oPTE0PWVudW0gb2NmczJfeGF0dHJfdHlwZSB7XG5mcy9vY2ZzMi94YXR0ci5oLTE1LVx0T0NGUzJfWEFUVFJfSU5ERVhfVVNFUiA9IDEsXG5mcy9vY2ZzMi94YXR0ci5oOjE2Olx0T0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0FDQ0VTUyxcbmZzL29jZnMyL3hhdHRyLmg6MTc6XHRPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfREVGQVVMVCxcbmZzL29jZnMyL3hhdHRyLmgtMTgtXHRPQ0ZTMl9YQVRUUl9JTkRFWF9UUlVTVEVELFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE5OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDg1CgkJCQkJCQlvdXRwdXQ6IDI1NAoJCQkJCQkJdGhvdWdodHM6IDkwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipPQ0ZTMiBBQ0wgSW5pdGlhbGl6YXRpb24gYW5kIFhhdHRyIEhhbmRsaW5nIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBjbGVhciB0aGUgY2hhbmdlcyByZXZvbHZlIGFyb3VuZCBBQ0wgaW5pdGlhbGl6YXRpb24gd2l0aGluIHRoZSBPQ0ZTMiBmaWxlc3lzdGVtLiBUaGUgY29uZmlndXJhdGlvbiBzZWxlY3Rpb24gc3RhcnRzIHdpdGggYE9DRlMyX0ZTYCwgd2hpY2ggdGhlbiBpbXBsaWVzIGBGU19QT1NJWF9BQ0xgLCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIFBPU0lYIEFDTHMgaGVyZS4KClRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyBtb2RpZmljYXRpb25zIHRvIHNldmVyYWwgZnVuY3Rpb25zOiBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAsIGBvY2ZzMl9pbml0X2FjbGAsIGFuZCBgb2NmczJfY2FsY194YXR0cl9pbml0YC4gVGhlc2UgYXJlIGNyaXRpY2FsIGJlY2F1c2UgdGhleSYjMzk7cmUgY2FsbGVkIGR1cmluZyBub2RlIGNyZWF0aW9uIGFuZCBpbml0aWFsaXphdGlvbi4gU3BlY2lmaWNhbGx5LCBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAgaXMgY2FsbGVkIGZyb20gYG9jZnMyX21rbm9kYCwgYW5kIHRoZW4gYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAgY2FsbHMgdGhvc2UgZnVuY3Rpb25zLiBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCBpcyBzdWJzZXF1ZW50bHkgY2FsbGVkIGZyb20gYG9jZnMyX3N5bWxpbmtgIGFuZCBgb2NmczJfbWtkaXJgLCBldGMuCgpJIGNoZWNrZWQgYG9jZnMyX21rbm9kYCBpbiBgZnMvb2NmczIvbmFtZWkuY2AsIGFuZCBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZSB0aHJvdWdoIGZ1enppbmcsIHdoaWNoIG1lYW5zIHRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCBleHBvc2VkIHRvIHRoZSB1c2VyLgoKTXkgaW5pdGlhbCBmb2N1cyBzeW1ib2xzIHdlcmUgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucywgYnV0IEkmIzM5O3ZlIHJlZmluZWQgdGhhdC4gV2hpbGUgYG9jZnMyX21rbm9kYCBpdHNlbGYgaXMgYSBnb29kIGVudHJ5IHBvaW50LCBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAgaXMgZXZlbiBtb3JlIHNwZWNpZmljIGFuZCBpbnRlcmVzdGluZy4gTm93LCBhZnRlciBmdXJ0aGVyIGludmVzdGlnYXRpb24sIHRoZSBmb2N1cyBzeW1ib2xzIEkmIzM5O3ZlIGlkZW50aWZpZWQgYXJlOiBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAsIGBvY2ZzMl9pbml0X2FjbGAsIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgLCBhbmQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAuIFRoZSBsb2NhdGlvbiBvZiB0aGVzZSBzeW1ib2xzIGFyZSBgZnMvb2NmczIvYWNsLmNgIChmb3IgYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgIGFuZCBgb2NmczJfaW5pdF9hY2xgKSwgYGZzL29jZnMyL3hhdHRyLmNgIChmb3IgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgKS4KCkEgc2lnbmlmaWNhbnQgY2hhbmdlIGlzIHRoZSByZW1vdmFsIG9mIHRoZSBsb2NrIGBkb3duX3dyaXRlKCZhbXA7T0NGUzJfSShpbm9kZSktJmd0O2lwX3hhdHRyX3NlbSk7YCBmcm9tIGBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlYCwgYWxzbyBsb2NhdGVkIGluIGBmcy9vY2ZzMi94YXR0ci5jYC4gVGhpcyBpcyBhIGNvbmN1cnJlbmN5LXJlbGF0ZWQgY2hhbmdlLCBhbmQgdGhpcyBpcyB3aHkgYG9jZnMyX3hhdHRyX3NldF9oYW5kbGVgIHNob3VsZCBhbHNvIGJlIGFkZGVkIHRvIHRoZSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMuCgpUaGUga2V5IGNvbmZpZ3VyYXRpb24gaXMgYE9DRlMyX0ZTYCwgYW5kIGl0IGF1dG9tYXRpY2FsbHkgZW5hYmxlcyBgRlNfUE9TSVhfQUNMYCwgc28gdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgY29uZmlncyBuZWVkZWQuCgoqKkluIHN1bW1hcnk6KioKCiogICAqKldvcnRoRnV6emluZyoqOiBgdHJ1ZWAKKiAgICoqRm9jdXNTeW1ib2xzKio6CiAgICAqICAgYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgCiAgICAqICAgYG9jZnMyX2luaXRfYWNsYAogICAgKiAgIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgCiAgICAqICAgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAKICAgICogICBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWAKKiAgICoqRW5hYmxlQ29uZmlncyoqOiBgT0NGUzJfRlNgCgpUaGUgcmF0aW9uYWxlIGhlcmUgaXMgdGhhdCB0aGlzIHBhdGNoIG1vZGlmaWVzIGNvcmUgQUNMIGluaXRpYWxpemF0aW9uIGFuZCB4YXR0ciBoYW5kbGluZyB3aXRoaW4gT0NGUzIsIHdoaWNoIGFyZSByZWFjaGFibGUgdmlhIHR5cGljYWwgZmlsZXN5c3RlbSBvcGVyYXRpb25zLiBUaGUgbG9jayByZW1vdmFsIGluIGBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlYCBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBiZWNhdXNlIGl0IGNhbiBpbnRyb2R1Y2UgY29uY3VycmVuY3kgaXNzdWVzLCBhbmQgdGhpcyBpcyB3aHkgZnV6emluZyBzaG91bGQgYmUgZGlyZWN0ZWQgdG93YXJkcyB0aGVzZSBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE5OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPQ0ZTMl9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O29jZnMyX2FjbF9pbml0X3ByZXBhcmUmIzM0OywKICAgICYjMzQ7b2NmczJfaW5pdF9hY2wmIzM0OywKICAgICYjMzQ7b2NmczJfY2FsY194YXR0cl9pbml0JiMzNDssCiAgICAmIzM0O29jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbCYjMzQ7LAogICAgJiMzNDtvY2ZzMl94YXR0cl9zZXRfaGFuZGxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBBQ0wgaW5pdGlhbGl6YXRpb24gaW4gT0NGUzIsIGludHJvZHVjaW5nIG5ldyBmdW5jdGlvbnMgYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgIGFuZCBgb2NmczJfYWNsX2luaXRfcmVsZWFzZWAsIGFuZCBtb2RpZnlpbmcgYG9jZnMyX2luaXRfYWNsYCBhbmQgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAuIEl0IGFsc28gcmVtb3ZlcyBhIGxvY2sgKGBpcF94YXR0cl9zZW1gKSBmcm9tIGBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZmlsZXN5c3RlbSYjMzk7cyBjb3JlIGxvZ2ljIGFuZCB4YXR0ciBoYW5kbGluZywgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3RhbmRhcmQgZmlsZXN5c3RlbSBvcGVyYXRpb25zIChlLmcuLCBta25vZCwgbWtkaXIsIHNldHhhdHRyKS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgbW9kaWZpZWQgZnVuY3Rpb25zIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBjb25jdXJyZW5jeSBpc3N1ZXMgKGR1ZSB0byB0aGUgcmVtb3ZlZCBsb2NrKSBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T0NGUzJfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlJiMzNDssCiAgICAmIzM0O29jZnMyX2luaXRfYWNsJiMzNDssCiAgICAmIzM0O29jZnMyX2NhbGNfeGF0dHJfaW5pdCYjMzQ7LAogICAgJiMzNDtvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2wmIzM0OywKICAgICYjMzQ7b2NmczJfeGF0dHJfc2V0X2hhbmRsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgQUNMIGluaXRpYWxpemF0aW9uIGluIE9DRlMyLCBpbnRyb2R1Y2luZyBuZXcgZnVuY3Rpb25zIGBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlYCBhbmQgYG9jZnMyX2FjbF9pbml0X3JlbGVhc2VgLCBhbmQgbW9kaWZ5aW5nIGBvY2ZzMl9pbml0X2FjbGAgYW5kIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgLiBJdCBhbHNvIHJlbW92ZXMgYSBsb2NrIChgaXBfeGF0dHJfc2VtYCkgZnJvbSBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGZpbGVzeXN0ZW0mIzM5O3MgY29yZSBsb2dpYyBhbmQgeGF0dHIgaGFuZGxpbmcsIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHN0YW5kYXJkIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyAoZS5nLiwgbWtub2QsIG1rZGlyLCBzZXR4YXR0cikuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIG1vZGlmaWVkIGZ1bmN0aW9ucyB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgY29uY3VycmVuY3kgaXNzdWVzIChkdWUgdG8gdGhlIHJlbW92ZWQgbG9jaykgYXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxOTo0MjozNi4wNTk0MjA0NTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDEzNDk2NTcyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPQ0ZTMl9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm9jZnMyX2FjbF9pbml0X3ByZXBhcmVcIixcbiAgICBcIm9jZnMyX2luaXRfYWNsXCIsXG4gICAgXCJvY2ZzMl9jYWxjX3hhdHRyX2luaXRcIixcbiAgICBcIm9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbFwiLFxuICAgIFwib2NmczJfeGF0dHJfc2V0X2hhbmRsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBBQ0wgaW5pdGlhbGl6YXRpb24gaW4gT0NGUzIsIGludHJvZHVjaW5nIG5ldyBmdW5jdGlvbnMgYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgIGFuZCBgb2NmczJfYWNsX2luaXRfcmVsZWFzZWAsIGFuZCBtb2RpZnlpbmcgYG9jZnMyX2luaXRfYWNsYCBhbmQgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAuIEl0IGFsc28gcmVtb3ZlcyBhIGxvY2sgKGBpcF94YXR0cl9zZW1gKSBmcm9tIGBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZmlsZXN5c3RlbSdzIGNvcmUgbG9naWMgYW5kIHhhdHRyIGhhbmRsaW5nLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzdGFuZGFyZCBmaWxlc3lzdGVtIG9wZXJhdGlvbnMgKGUuZy4sIG1rbm9kLCBta2Rpciwgc2V0eGF0dHIpLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBtb2RpZmllZCBmdW5jdGlvbnMgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyAoZHVlIHRvIHRoZSByZW1vdmVkIGxvY2spIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxOTo0MjozNi4wNTk0MjgxNjdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NDAxNzg4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGI5MDZmNjM0NjI0ZDBmZmIwNWI4NTQ2ZTg0YzBhNTcyNjgxNTVjMDVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMjIgMTk6NDI6MzQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvYWNsLmMgYi9mcy9vY2ZzMi9hY2wuY1xcbmluZGV4IGFmMWUyY2VkYjIxN2YxLi4wOTBlYzYwZmI1NzZhNiAxMDA2NDRcXG4tLS0gYS9mcy9vY2ZzMi9hY2wuY1xcbisrKyBiL2ZzL29jZnMyL2FjbC5jXFxuQEAgLTExMCw4ICsxMTAsNyBAQCBzdGF0aWMgdm9pZCAqb2NmczJfYWNsX3RvX3hhdHRyKGNvbnN0IHN0cnVjdCBwb3NpeF9hY2wgKmFjbCwgc2l6ZV90ICpzaXplKVxcbiBcXHRyZXR1cm4gb2NmczJfYWNsO1xcbiB9XFxuIFxcbi1zdGF0aWMgc3RydWN0IHBvc2l4X2FjbCAqb2NmczJfZ2V0X2FjbF9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgaW50IHR5cGUsXFxuK3N0YXRpYyBzdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9nZXRfYWNsX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaClcXG4ge1xcbiBcXHRpbnQgbmFtZV9pbmRleDtcXG5AQCAtMzQ5LDYzICszNDgsMTA1IEBAIGludCBvY2ZzMl9hY2xfY2htb2Qoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcXG4gICogSW5pdGlhbGl6ZSB0aGUgQUNMcyBvZiBhIG5ldyBpbm9kZS4gSWYgcGFyZW50IGRpcmVjdG9yeSBoYXMgZGVmYXVsdCBBQ0wsXFxuICAqIHRoZW4gY2xvbmUgdG8gbmV3IGlub2RlLiBDYWxsZWQgZnJvbSBvY2ZzMl9ta25vZC5cXG4gICovXFxuLWludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqaGFuZGxlLFxcbi1cXHRcXHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi1cXHRcXHQgICBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCxcXG4tXFx0XFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsXFxuLVxcdFxcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLFxcbi1cXHRcXHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYylcXG4rdm9pZCBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKVxcbit7XFxuK1xcdHBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbCk7XFxuK1xcdHBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLVxcdTAwM2VhY2wpO1xcbitcXHRzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wgPSBOVUxMO1xcbitcXHRzdGF0ZS1cXHUwMDNlYWNsID0gTlVMTDtcXG4rfVxcbitcXG4raW50IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLFxcbitcXHRcXHRcXHQgICBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSlcXG4ge1xcbiBcXHRzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4tXFx0c3RydWN0IHBvc2l4X2FjbCAqYWNsID0gTlVMTDtcXG4tXFx0aW50IHJldCA9IDAsIHJldDI7XFxuLVxcdHVtb2RlX3QgbW9kZTtcXG4tXFxuLVxcdGlmICghU19JU0xOSyhpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbi1cXHRcXHRpZiAob3NiLVxcdTAwM2VzX21vdW50X29wdCBcXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xcbi1cXHRcXHRcXHRkb3duX3JlYWQoXFx1MDAyNk9DRlMyX0koZGlyKS1cXHUwMDNlaXBfeGF0dHJfc2VtKTtcXG4tXFx0XFx0XFx0YWNsID0gb2NmczJfZ2V0X2FjbF9ub2xvY2soZGlyLCBBQ0xfVFlQRV9ERUZBVUxULFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICBkaXJfYmgpO1xcbi1cXHRcXHRcXHR1cF9yZWFkKFxcdTAwMjZPQ0ZTMl9JKGRpciktXFx1MDAzZWlwX3hhdHRyX3NlbSk7XFxuLVxcdFxcdFxcdGlmIChJU19FUlIoYWNsKSlcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoYWNsKTtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wgPSBOVUxMO1xcbitcXHRzdGF0ZS1cXHUwMDNlYWNsID0gTlVMTDtcXG4rXFx0c3RhdGUtXFx1MDAzZW1vZGUgPSBpbm9kZS1cXHUwMDNlaV9tb2RlO1xcbitcXG4rXFx0aWYgKFNfSVNMTksoaW5vZGUtXFx1MDAzZWlfbW9kZSkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcXG4rXFx0XFx0ZG93bl9yZWFkKFxcdTAwMjZPQ0ZTMl9JKGRpciktXFx1MDAzZWlwX3hhdHRyX3NlbSk7XFxuK1xcdFxcdHN0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbCA9XFxuK1xcdFxcdFxcdG9jZnMyX2dldF9hY2xfbm9sb2NrKGRpciwgQUNMX1RZUEVfREVGQVVMVCwgZGlyX2JoKTtcXG4rXFx0XFx0dXBfcmVhZChcXHUwMDI2T0NGUzJfSShkaXIpLVxcdTAwM2VpcF94YXR0cl9zZW0pO1xcbitcXHRcXHRpZiAoSVNfRVJSKHN0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbCkpIHtcXG4rXFx0XFx0XFx0cmV0ID0gUFRSX0VSUihzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wpO1xcbitcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wgPSBOVUxMO1xcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHRcXHR9XFxuLVxcdFxcdGlmICghYWNsKSB7XFxuLVxcdFxcdFxcdG1vZGUgPSBpbm9kZS1cXHUwMDNlaV9tb2RlIFxcdTAwMjYgfmN1cnJlbnRfdW1hc2soKTtcXG4tXFx0XFx0XFx0cmV0ID0gb2NmczJfYWNsX3NldF9tb2RlKGlub2RlLCBkaV9iaCwgaGFuZGxlLCBtb2RlKTtcXG4tXFx0XFx0XFx0aWYgKHJldCkge1xcbi1cXHRcXHRcXHRcXHRtbG9nX2Vycm5vKHJldCk7XFxuK1xcdFxcdGlmIChzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wpIHtcXG4rXFx0XFx0XFx0c3RhdGUtXFx1MDAzZWFjbCA9IHBvc2l4X2FjbF9kdXAoc3RhdGUtXFx1MDAzZWRlZmF1bHRfYWNsKTtcXG4rXFx0XFx0XFx0aWYgKCFzdGF0ZS1cXHUwMDNlYWNsKSB7XFxuK1xcdFxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuIFxcdFxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4gXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRyZXQgPSBfX3Bvc2l4X2FjbF9jcmVhdGUoXFx1MDAyNnN0YXRlLVxcdTAwM2VhY2wsIEdGUF9OT0ZTLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnN0YXRlLVxcdTAwM2Vtb2RlKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0XFx0XFx0aWYgKHJldCA9PSAwKSB7XFxuK1xcdFxcdFxcdFxcdHBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLVxcdTAwM2VhY2wpO1xcbitcXHRcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlYWNsID0gTlVMTDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRpZiAoIVNfSVNESVIoaW5vZGUtXFx1MDAzZWlfbW9kZSkpIHtcXG4rXFx0XFx0XFx0XFx0cG9zaXhfYWNsX3JlbGVhc2Uoc3RhdGUtXFx1MDAzZWRlZmF1bHRfYWNsKTtcXG4rXFx0XFx0XFx0XFx0c3RhdGUtXFx1MDAzZWRlZmF1bHRfYWNsID0gTlVMTDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlbW9kZSBcXHUwMDI2PSB+Y3VycmVudF91bWFzaygpO1xcbiBcXHRcXHR9XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHN0YXRlLVxcdTAwM2Vtb2RlIFxcdTAwMjY9IH5jdXJyZW50X3VtYXNrKCk7XFxuIFxcdH1cXG4tXFx0aWYgKChvc2ItXFx1MDAzZXNfbW91bnRfb3B0IFxcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSBcXHUwMDI2XFx1MDAyNiBhY2wpIHtcXG4tXFx0XFx0aWYgKFNfSVNESVIoaW5vZGUtXFx1MDAzZWlfbW9kZSkpIHtcXG4rXFxuK1xcdHJldHVybiAwO1xcbitjbGVhbnVwOlxcbitcXHRvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKHN0YXRlKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4raW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuK1xcdFxcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsXFxuK1xcdFxcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLFxcbitcXHRcXHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYyxcXG4rXFx0XFx0ICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpXFxuK3tcXG4rXFx0c3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS1cXHUwMDNlaV9zYik7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0aWYgKFNfSVNMTksoaW5vZGUtXFx1MDAzZWlfbW9kZSkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcXG4rXFx0XFx0aWYgKFNfSVNESVIoaW5vZGUtXFx1MDAzZWlfbW9kZSkgXFx1MDAyNlxcdTAwMjYgc3RhdGUtXFx1MDAzZWRlZmF1bHRfYWNsKSB7XFxuIFxcdFxcdFxcdHJldCA9IG9jZnMyX3NldF9hY2woaGFuZGxlLCBpbm9kZSwgZGlfYmgsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBBQ0xfVFlQRV9ERUZBVUxULCBhY2wsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBtZXRhX2FjLCBkYXRhX2FjKTtcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIEFDTF9UWVBFX0RFRkFVTFQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wsIG1ldGFfYWMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBkYXRhX2FjKTtcXG4gXFx0XFx0XFx0aWYgKHJldClcXG4tXFx0XFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHRcXHR9XFxuLVxcdFxcdG1vZGUgPSBpbm9kZS1cXHUwMDNlaV9tb2RlO1xcbi1cXHRcXHRyZXQgPSBfX3Bvc2l4X2FjbF9jcmVhdGUoXFx1MDAyNmFjbCwgR0ZQX05PRlMsIFxcdTAwMjZtb2RlKTtcXG4tXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4gXFxuLVxcdFxcdHJldDIgPSBvY2ZzMl9hY2xfc2V0X21vZGUoaW5vZGUsIGRpX2JoLCBoYW5kbGUsIG1vZGUpO1xcbi1cXHRcXHRpZiAocmV0Mikge1xcbi1cXHRcXHRcXHRtbG9nX2Vycm5vKHJldDIpO1xcbi1cXHRcXHRcXHRyZXQgPSByZXQyO1xcbi1cXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuLVxcdFxcdH1cXG4tXFx0XFx0aWYgKHJldCBcXHUwMDNlIDApIHtcXG4tXFx0XFx0XFx0cmV0ID0gb2NmczJfc2V0X2FjbChoYW5kbGUsIGlub2RlLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgZGlfYmgsIEFDTF9UWVBFX0FDQ0VTUyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIGFjbCwgbWV0YV9hYywgZGF0YV9hYyk7XFxuK1xcdHJldCA9IG9jZnMyX2FjbF9zZXRfbW9kZShpbm9kZSwgZGlfYmgsIGhhbmRsZSwgc3RhdGUtXFx1MDAzZW1vZGUpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdG1sb2dfZXJybm8ocmV0KTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcXG4rXFx0XFx0aWYgKHN0YXRlLVxcdTAwM2VhY2wpIHtcXG4rXFx0XFx0XFx0cmV0ID0gb2NmczJfc2V0X2FjbChoYW5kbGUsIGlub2RlLCBkaV9iaCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIEFDTF9UWVBFX0FDQ0VTUywgc3RhdGUtXFx1MDAzZWFjbCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIG1ldGFfYWMsIGRhdGFfYWMpO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4tY2xlYW51cDpcXG4tXFx0cG9zaXhfYWNsX3JlbGVhc2UoYWNsKTtcXG4rXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvYWNsLmggYi9mcy9vY2ZzMi9hY2wuaFxcbmluZGV4IDY2N2M2ZjAzZmE2MDZmLi5hOTFmOWNlMjc4ZDZkMyAxMDA2NDRcXG4tLS0gYS9mcy9vY2ZzMi9hY2wuaFxcbisrKyBiL2ZzL29jZnMyL2FjbC5oXFxuQEAgLTIwLDkgKzIwLDIwIEBAIHN0cnVjdCBwb3NpeF9hY2wgKm9jZnMyX2lvcF9nZXRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLCBib29sIHJjdSk7XFxuIGludCBvY2ZzMl9pb3Bfc2V0X2FjbChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiBcXHRcXHQgICAgICBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIGludCB0eXBlKTtcXG4gZXh0ZXJuIGludCBvY2ZzMl9hY2xfY2htb2Qoc3RydWN0IGlub2RlICosIHN0cnVjdCBidWZmZXJfaGVhZCAqKTtcXG4tZXh0ZXJuIGludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqLCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlub2RlICosXFxuLVxcdFxcdFxcdCAgc3RydWN0IGJ1ZmZlcl9oZWFkICosIHN0cnVjdCBidWZmZXJfaGVhZCAqLFxcbi1cXHRcXHRcXHQgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICosXFxuLVxcdFxcdFxcdCAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKik7XFxuK3N0cnVjdCBvY2ZzMl9hY2xfc3RhdGUge1xcbitcXHRzdHJ1Y3QgcG9zaXhfYWNsICpkZWZhdWx0X2FjbDtcXG4rXFx0c3RydWN0IHBvc2l4X2FjbCAqYWNsO1xcbitcXHR1bW9kZV90IG1vZGU7XFxuK307XFxuK1xcbitpbnQgb2NmczJfYWNsX2luaXRfcHJlcGFyZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0XFx0XFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKTtcXG4rdm9pZCBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKTtcXG4raW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuK1xcdFxcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsXFxuK1xcdFxcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLFxcbitcXHRcXHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYyxcXG4rXFx0XFx0ICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpO1xcbiBcXG4gI2VuZGlmIC8qIE9DRlMyX0FDTF9IICovXFxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL25hbWVpLmMgYi9mcy9vY2ZzMi9uYW1laS5jXFxuaW5kZXggMTI3NzY2NmM3N2NkMmQuLmQ5YWJhMTZhOGYyOGE3IDEwMDY0NFxcbi0tLSBhL2ZzL29jZnMyL25hbWVpLmNcXG4rKysgYi9mcy9vY2ZzMi9uYW1laS5jXFxuQEAgLTI1Niw2ICsyNTYsNyBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRzaWdzZXRfdCBvbGRzZXQ7XFxuIFxcdGludCBkaWRfYmxvY2tfc2lnbmFscyA9IDA7XFxuIFxcdHN0cnVjdCBvY2ZzMl9kZW50cnlfbG9jayAqZGwgPSBOVUxMO1xcbitcXHRzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlIGFjbF9zdGF0ZSA9IHsgMCB9O1xcbiBcXG4gXFx0dHJhY2Vfb2NmczJfbWtub2QoZGlyLCBkZW50cnksIGRlbnRyeS1cXHUwMDNlZF9uYW1lLmxlbiwgZGVudHJ5LVxcdTAwM2VkX25hbWUubmFtZSxcXG4gXFx0XFx0XFx0ICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koZGlyKS1cXHUwMDNlaXBfYmxrbm8sXFxuQEAgLTMzMCwxMCArMzMxLDEzIEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4rXFx0c3RhdHVzID0gb2NmczJfYWNsX2luaXRfcHJlcGFyZShpbm9kZSwgZGlyLCBwYXJlbnRfZmVfYmgsIFxcdTAwMjZhY2xfc3RhdGUpO1xcbitcXHRpZiAoc3RhdHVzIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBsZWF2ZTtcXG4rXFxuIFxcdC8qIGNhbGN1bGF0ZSBtZXRhIGRhdGEvY2x1c3RlcnMgZm9yIHNldHRpbmcgc2VjdXJpdHkgYW5kIGFjbCB4YXR0ciAqL1xcbi1cXHRzdGF0dXMgPSBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoZGlyLCBwYXJlbnRfZmVfYmgsIG1vZGUsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2c2ksIFxcdTAwMjZ3YW50X2NsdXN0ZXJzLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnhhdHRyX2NyZWRpdHMsIFxcdTAwMjZ3YW50X21ldGEpO1xcbitcXHRzdGF0dXMgPSBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoZGlyLCBtb2RlLCBcXHUwMDI2c2ksIFxcdTAwMjZ3YW50X2NsdXN0ZXJzLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnhhdHRyX2NyZWRpdHMsIFxcdTAwMjZ3YW50X21ldGEsIFxcdTAwMjZhY2xfc3RhdGUpO1xcbiBcXHRpZiAoc3RhdHVzIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRtbG9nX2Vycm5vKHN0YXR1cyk7XFxuIFxcdFxcdGdvdG8gbGVhdmU7XFxuQEAgLTQxMSw4ICs0MTUsOCBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRcXHRpbmNfbmxpbmsoZGlyKTtcXG4gXFx0fVxcbiBcXG4tXFx0c3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgZGlyLCBuZXdfZmVfYmgsIHBhcmVudF9mZV9iaCxcXG4tXFx0XFx0XFx0IG1ldGFfYWMsIGRhdGFfYWMpO1xcbitcXHRzdGF0dXMgPSBvY2ZzMl9pbml0X2FjbChoYW5kbGUsIGlub2RlLCBuZXdfZmVfYmgsIG1ldGFfYWMsIGRhdGFfYWMsXFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZhY2xfc3RhdGUpO1xcbiBcXG4gXFx0aWYgKHN0YXR1cyBcXHUwMDNjIDApIHtcXG4gXFx0XFx0bWxvZ19lcnJubyhzdGF0dXMpO1xcbkBAIC00NzcsNiArNDgxLDggQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4gXFx0YnJlbHNlKHBhcmVudF9mZV9iaCk7XFxuIFxcdGtmcmVlKHNpLnZhbHVlKTtcXG4gXFxuK1xcdG9jZnMyX2FjbF9pbml0X3JlbGVhc2UoXFx1MDAyNmFjbF9zdGF0ZSk7XFxuK1xcbiBcXHRvY2ZzMl9mcmVlX2Rpcl9sb29rdXBfcmVzdWx0KFxcdTAwMjZsb29rdXApO1xcbiBcXG4gXFx0aWYgKGlub2RlX2FjKVxcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5jIGIvZnMvb2NmczIveGF0dHIuY1xcbmluZGV4IGZjZGRkM2MxM2FjZGRkLi40Y2Y1YjY5ZDEzYjA5NSAxMDA2NDRcXG4tLS0gYS9mcy9vY2ZzMi94YXR0ci5jXFxuKysrIGIvZnMvb2NmczIveGF0dHIuY1xcbkBAIC02MTEsMTMgKzYxMSwxMCBAQCBpbnQgb2NmczJfY2FsY19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi1pbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHRcXHQgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLFxcbi1cXHRcXHRcXHQgIHVtb2RlX3QgbW9kZSxcXG4raW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLFxcbiBcXHRcXHRcXHQgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICpzaSxcXG4tXFx0XFx0XFx0ICBpbnQgKndhbnRfY2x1c3RlcnMsXFxuLVxcdFxcdFxcdCAgaW50ICp4YXR0cl9jcmVkaXRzLFxcbi1cXHRcXHRcXHQgIGludCAqd2FudF9tZXRhKVxcbitcXHRcXHRcXHQgIGludCAqd2FudF9jbHVzdGVycywgaW50ICp4YXR0cl9jcmVkaXRzLFxcbitcXHRcXHRcXHQgIGludCAqd2FudF9tZXRhLCBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICphY2xfc3RhdGUpXFxuIHtcXG4gXFx0aW50IHJldCA9IDA7XFxuIFxcdHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoZGlyLVxcdTAwM2VpX3NiKTtcXG5AQCAtNjI4LDE5ICs2MjUsMTUgQEAgaW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzaS1cXHUwMDNldmFsdWVfbGVuKTtcXG4gXFxuIFxcdGlmIChvc2ItXFx1MDAzZXNfbW91bnRfb3B0IFxcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XFxuLVxcdFxcdGRvd25fcmVhZChcXHUwMDI2T0NGUzJfSShkaXIpLVxcdTAwM2VpcF94YXR0cl9zZW0pO1xcbi1cXHRcXHRhY2xfbGVuID0gb2NmczJfeGF0dHJfZ2V0X25vbG9jayhkaXIsIGRpcl9iaCxcXG4tXFx0XFx0XFx0XFx0XFx0T0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFQsXFxuLVxcdFxcdFxcdFxcdFxcdFxcXCJcXFwiLCBOVUxMLCAwKTtcXG4tXFx0XFx0dXBfcmVhZChcXHUwMDI2T0NGUzJfSShkaXIpLVxcdTAwM2VpcF94YXR0cl9zZW0pO1xcbi1cXHRcXHRpZiAoYWNsX2xlbiBcXHUwMDNlIDApIHtcXG4tXFx0XFx0XFx0YV9zaXplID0gb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKDAsIGFjbF9sZW4pO1xcbi1cXHRcXHRcXHRpZiAoU19JU0RJUihtb2RlKSlcXG4tXFx0XFx0XFx0XFx0YV9zaXplIFxcdTAwM2NcXHUwMDNjPSAxO1xcbi1cXHRcXHR9IGVsc2UgaWYgKGFjbF9sZW4gIT0gMCBcXHUwMDI2XFx1MDAyNiBhY2xfbGVuICE9IC1FTk9EQVRBKSB7XFxuLVxcdFxcdFxcdHJldCA9IGFjbF9sZW47XFxuLVxcdFxcdFxcdG1sb2dfZXJybm8ocmV0KTtcXG4tXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0aWYgKGFjbF9zdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wgXFx1MDAyNlxcdTAwMjYgU19JU0RJUihtb2RlKSkge1xcbitcXHRcXHRcXHRhY2xfbGVuID0gYWNsX3N0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbC1cXHUwMDNlYV9jb3VudCAqXFxuK1xcdFxcdFxcdFxcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xcbitcXHRcXHRcXHRhX3NpemUgKz0gb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKDAsIGFjbF9sZW4pO1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChhY2xfc3RhdGUtXFx1MDAzZWFjbCkge1xcbitcXHRcXHRcXHRhY2xfbGVuID0gYWNsX3N0YXRlLVxcdTAwM2VhY2wtXFx1MDAzZWFfY291bnQgKlxcbitcXHRcXHRcXHRcXHQgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTtcXG4rXFx0XFx0XFx0YV9zaXplICs9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbkBAIC02ODMsMTQgKzY3NiwyOSBAQCBpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBuZXdfY2x1c3RlcnMpO1xcbiBcXHRcXHQqd2FudF9jbHVzdGVycyArPSBuZXdfY2x1c3RlcnM7XFxuIFxcdH1cXG4tXFx0aWYgKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIGFjbF9sZW4gXFx1MDAzZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkge1xcbi1cXHRcXHQvKiBmb3IgZGlyZWN0b3J5LCBpdCBoYXMgREVGQVVMVCBhbmQgQUNDRVNTIHR3byB0eXBlcyBvZiBhY2xzICovXFxuLVxcdFxcdG5ld19jbHVzdGVycyA9IChTX0lTRElSKG1vZGUpID8gMiA6IDEpICpcXG4tXFx0XFx0XFx0XFx0b2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGRpci1cXHUwMDNlaV9zYiwgYWNsX2xlbik7XFxuLVxcdFxcdCp4YXR0cl9jcmVkaXRzICs9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhkaXItXFx1MDAzZWlfc2IsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIG5ld19jbHVzdGVycyk7XFxuLVxcdFxcdCp3YW50X2NsdXN0ZXJzICs9IG5ld19jbHVzdGVycztcXG4rXFx0aWYgKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcXG4rXFx0XFx0aWYgKGFjbF9zdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wgXFx1MDAyNlxcdTAwMjYgU19JU0RJUihtb2RlKSkge1xcbitcXHRcXHRcXHRhY2xfbGVuID0gYWNsX3N0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbC1cXHUwMDNlYV9jb3VudCAqXFxuK1xcdFxcdFxcdFxcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xcbitcXHRcXHRcXHRpZiAoYWNsX2xlbiBcXHUwMDNlIE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7XFxuK1xcdFxcdFxcdFxcdG5ld19jbHVzdGVycyA9IG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhkaXItXFx1MDAzZWlfc2IsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGFjbF9sZW4pO1xcbitcXHRcXHRcXHRcXHQqeGF0dHJfY3JlZGl0cyArPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoZGlyLVxcdTAwM2VpX3NiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBuZXdfY2x1c3RlcnMpO1xcbitcXHRcXHRcXHRcXHQqd2FudF9jbHVzdGVycyArPSBuZXdfY2x1c3RlcnM7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAoYWNsX3N0YXRlLVxcdTAwM2VhY2wpIHtcXG4rXFx0XFx0XFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cXHUwMDNlYWNsLVxcdTAwM2VhX2NvdW50ICpcXG4rXFx0XFx0XFx0XFx0ICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7XFxuK1xcdFxcdFxcdGlmIChhY2xfbGVuIFxcdTAwM2UgT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpIHtcXG4rXFx0XFx0XFx0XFx0bmV3X2NsdXN0ZXJzID0gb2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGRpci1cXHUwMDNlaV9zYixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0YWNsX2xlbik7XFxuK1xcdFxcdFxcdFxcdCp4YXR0cl9jcmVkaXRzICs9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhkaXItXFx1MDAzZWlfc2IsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIG5ld19jbHVzdGVycyk7XFxuK1xcdFxcdFxcdFxcdCp3YW50X2NsdXN0ZXJzICs9IG5ld19jbHVzdGVycztcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuQEAgLTM1NDIsOCArMzU1MCw2IEBAIGludCBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICpoYW5kbGUsXFxuIFxcdHhpcy5pbm9kZV9iaCA9IHhicy5pbm9kZV9iaCA9IGRpX2JoO1xcbiBcXHRkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopZGlfYmgtXFx1MDAzZWJfZGF0YTtcXG4gXFxuLVxcdGRvd25fd3JpdGUoXFx1MDAyNk9DRlMyX0koaW5vZGUpLVxcdTAwM2VpcF94YXR0cl9zZW0pO1xcbi1cXG4gXFx0cmV0ID0gb2NmczJfeGF0dHJfaWJvZHlfZmluZChpbm9kZSwgbmFtZV9pbmRleCwgbmFtZSwgXFx1MDAyNnhpcyk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG5AQCAtMzU1Niw3ICszNTYyLDYgQEAgaW50IG9jZnMyX3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSxcXG4gXFx0cmV0ID0gX19vY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGlub2RlLCBkaSwgXFx1MDAyNnhpLCBcXHUwMDI2eGlzLCBcXHUwMDI2eGJzLCBcXHUwMDI2Y3R4dCk7XFxuIFxcbiBjbGVhbnVwOlxcbi1cXHR1cF93cml0ZShcXHUwMDI2T0NGUzJfSShpbm9kZSktXFx1MDAzZWlwX3hhdHRyX3NlbSk7XFxuIFxcdGJyZWxzZSh4YnMueGF0dHJfYmgpO1xcbiBcXHRvY2ZzMl94YXR0cl9idWNrZXRfZnJlZSh4YnMuYnVja2V0KTtcXG4gXFxuQEAgLTcyNTcsNiArNzI2Miw3IEBAIGludCBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2woc3RydWN0IGlub2RlICpkaXIsXFxuIHtcXG4gXFx0aW50IHJldCA9IDA7XFxuIFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoID0gTlVMTDtcXG4rXFx0c3RydWN0IG9jZnMyX2FjbF9zdGF0ZSBhY2xfc3RhdGUgPSB7IDAgfTtcXG4gXFxuIFxcdHJldCA9IG9jZnMyX2luaXRfc2VjdXJpdHlfZ2V0KGlub2RlLCBkaXIsIHFzdHIsIE5VTEwpO1xcbiBcXHRpZiAocmV0KSB7XFxuQEAgLTcyNjksMTAgKzcyNzUsMTcgQEAgaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0XFx0bWxvZ19lcnJubyhyZXQpO1xcbiBcXHRcXHRnb3RvIGxlYXZlO1xcbiBcXHR9XFxuLVxcdHJldCA9IG9jZnMyX2luaXRfYWNsKE5VTEwsIGlub2RlLCBkaXIsIE5VTEwsIGRpcl9iaCwgTlVMTCwgTlVMTCk7XFxuK1xcbitcXHRyZXQgPSBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKGlub2RlLCBkaXIsIGRpcl9iaCwgXFx1MDAyNmFjbF9zdGF0ZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gdW5sb2NrO1xcbitcXG4rXFx0cmV0ID0gb2NmczJfaW5pdF9hY2woTlVMTCwgaW5vZGUsIE5VTEwsIE5VTEwsIE5VTEwsIFxcdTAwMjZhY2xfc3RhdGUpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRtbG9nX2Vycm5vKHJldCk7XFxuIFxcbit1bmxvY2s6XFxuK1xcdG9jZnMyX2FjbF9pbml0X3JlbGVhc2UoXFx1MDAyNmFjbF9zdGF0ZSk7XFxuIFxcdG9jZnMyX2lub2RlX3VubG9jayhkaXIsIDApO1xcbiBcXHRicmVsc2UoZGlyX2JoKTtcXG4gbGVhdmU6XFxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3hhdHRyLmggYi9mcy9vY2ZzMi94YXR0ci5oXFxuaW5kZXggNjVlOWFhNzQzOTE5OWUuLjVjZGQ2YzZiNDAwNjRiIDEwMDY0NFxcbi0tLSBhL2ZzL29jZnMyL3hhdHRyLmhcXG4rKysgYi9mcy9vY2ZzMi94YXR0ci5oXFxuQEAgLTU1LDkgKzU1LDEyIEBAIGludCBvY2ZzMl9pbml0X3NlY3VyaXR5X3NldChoYW5kbGVfdCAqLCBzdHJ1Y3QgaW5vZGUgKixcXG4gaW50IG9jZnMyX2NhbGNfc2VjdXJpdHlfaW5pdChzdHJ1Y3QgaW5vZGUgKixcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqLFxcbiBcXHRcXHRcXHQgICAgIGludCAqLCBpbnQgKiwgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKiopO1xcbi1pbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKixcXG4tXFx0XFx0XFx0ICB1bW9kZV90LCBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqLFxcbi1cXHRcXHRcXHQgIGludCAqLCBpbnQgKiwgaW50ICopO1xcbitcXG4rc3RydWN0IG9jZnMyX2FjbF9zdGF0ZTtcXG4raW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLFxcbitcXHRcXHRcXHQgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICpzaSxcXG4rXFx0XFx0XFx0ICBpbnQgKndhbnRfY2x1c3RlcnMsIGludCAqeGF0dHJfY3JlZGl0cyxcXG4rXFx0XFx0XFx0ICBpbnQgKndhbnRfbWV0YSwgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqYWNsX3N0YXRlKTtcXG4gXFxuIC8qXFxuICAqIHhhdHRycyBjYW4gbGl2ZSBpbnNpZGUgYW4gaW5vZGUsIGFzIHBhcnQgb2YgYW4gZXh0ZXJuYWwgeGF0dHIgYmxvY2ssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE5OjQyOjM2LjgzNDMzODYzNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjMzMzYwMDI5NzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9DRlMyX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib2NmczJfYWNsX2luaXRfcHJlcGFyZVwiLFxuICAgIFwib2NmczJfaW5pdF9hY2xcIixcbiAgICBcIm9jZnMyX2NhbGNfeGF0dHJfaW5pdFwiLFxuICAgIFwib2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsXCIsXG4gICAgXCJvY2ZzMl94YXR0cl9zZXRfaGFuZGxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIEFDTCBpbml0aWFsaXphdGlvbiBpbiBPQ0ZTMiwgaW50cm9kdWNpbmcgbmV3IGZ1bmN0aW9ucyBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAgYW5kIGBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlYCwgYW5kIG1vZGlmeWluZyBgb2NmczJfaW5pdF9hY2xgIGFuZCBgb2NmczJfY2FsY194YXR0cl9pbml0YC4gSXQgYWxzbyByZW1vdmVzIGEgbG9jayAoYGlwX3hhdHRyX3NlbWApIGZyb20gYG9jZnMyX3hhdHRyX3NldF9oYW5kbGVgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBmaWxlc3lzdGVtJ3MgY29yZSBsb2dpYyBhbmQgeGF0dHIgaGFuZGxpbmcsIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHN0YW5kYXJkIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyAoZS5nLiwgbWtub2QsIG1rZGlyLCBzZXR4YXR0cikuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIG1vZGlmaWVkIGZ1bmN0aW9ucyB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgY29uY3VycmVuY3kgaXNzdWVzIChkdWUgdG8gdGhlIHJlbW92ZWQgbG9jaykgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjkwNmY2MzQ2MjRkMGZmYjA1Yjg1NDZlODRjMGE1NzI2ODE1NWMwNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDIyIDE5OjQyOjM0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvYWNsLmMgYi9mcy9vY2ZzMi9hY2wuY1xuaW5kZXggYWYxZTJjZWRiMjE3ZjEuLjA5MGVjNjBmYjU3NmE2IDEwMDY0NFxuLS0tIGEvZnMvb2NmczIvYWNsLmNcbisrKyBiL2ZzL29jZnMyL2FjbC5jXG5AQCAtMTEwLDggKzExMCw3IEBAIHN0YXRpYyB2b2lkICpvY2ZzMl9hY2xfdG9feGF0dHIoY29uc3Qgc3RydWN0IHBvc2l4X2FjbCAqYWNsLCBzaXplX3QgKnNpemUpXG4gXHRyZXR1cm4gb2NmczJfYWNsO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IHBvc2l4X2FjbCAqb2NmczJfZ2V0X2FjbF9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSxcbi1cdFx0XHRcdFx0ICAgICAgaW50IHR5cGUsXG4rc3RhdGljIHN0cnVjdCBwb3NpeF9hY2wgKm9jZnMyX2dldF9hY2xfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLFxuIFx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoKVxuIHtcbiBcdGludCBuYW1lX2luZGV4O1xuQEAgLTM0OSw2MyArMzQ4LDEwNSBAQCBpbnQgb2NmczJfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG4gICogSW5pdGlhbGl6ZSB0aGUgQUNMcyBvZiBhIG5ldyBpbm9kZS4gSWYgcGFyZW50IGRpcmVjdG9yeSBoYXMgZGVmYXVsdCBBQ0wsXG4gICogdGhlbiBjbG9uZSB0byBuZXcgaW5vZGUuIENhbGxlZCBmcm9tIG9jZnMyX21rbm9kLlxuICAqL1xuLWludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqaGFuZGxlLFxuLVx0XHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHQgICBzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCxcbi1cdFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsXG4tXHRcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLFxuLVx0XHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYylcbit2b2lkIG9jZnMyX2FjbF9pbml0X3JlbGVhc2Uoc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpXG4re1xuK1x0cG9zaXhfYWNsX3JlbGVhc2Uoc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wpO1xuK1x0cG9zaXhfYWNsX3JlbGVhc2Uoc3RhdGUtXHUwMDNlYWNsKTtcbitcdHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsID0gTlVMTDtcbitcdHN0YXRlLVx1MDAzZWFjbCA9IE5VTEw7XG4rfVxuK1xuK2ludCBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuK1x0XHRcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLFxuK1x0XHRcdCAgIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKVxuIHtcbiBcdHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4tXHRzdHJ1Y3QgcG9zaXhfYWNsICphY2wgPSBOVUxMO1xuLVx0aW50IHJldCA9IDAsIHJldDI7XG4tXHR1bW9kZV90IG1vZGU7XG4tXG4tXHRpZiAoIVNfSVNMTksoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuLVx0XHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbi1cdFx0XHRkb3duX3JlYWQoXHUwMDI2T0NGUzJfSShkaXIpLVx1MDAzZWlwX3hhdHRyX3NlbSk7XG4tXHRcdFx0YWNsID0gb2NmczJfZ2V0X2FjbF9ub2xvY2soZGlyLCBBQ0xfVFlQRV9ERUZBVUxULFxuLVx0XHRcdFx0XHRcdCAgIGRpcl9iaCk7XG4tXHRcdFx0dXBfcmVhZChcdTAwMjZPQ0ZTMl9JKGRpciktXHUwMDNlaXBfeGF0dHJfc2VtKTtcbi1cdFx0XHRpZiAoSVNfRVJSKGFjbCkpXG4tXHRcdFx0XHRyZXR1cm4gUFRSX0VSUihhY2wpO1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCA9IE5VTEw7XG4rXHRzdGF0ZS1cdTAwM2VhY2wgPSBOVUxMO1xuK1x0c3RhdGUtXHUwMDNlbW9kZSA9IGlub2RlLVx1MDAzZWlfbW9kZTtcbitcbitcdGlmIChTX0lTTE5LKGlub2RlLVx1MDAzZWlfbW9kZSkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG4rXHRcdGRvd25fcmVhZChcdTAwMjZPQ0ZTMl9JKGRpciktXHUwMDNlaXBfeGF0dHJfc2VtKTtcbitcdFx0c3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wgPVxuK1x0XHRcdG9jZnMyX2dldF9hY2xfbm9sb2NrKGRpciwgQUNMX1RZUEVfREVGQVVMVCwgZGlyX2JoKTtcbitcdFx0dXBfcmVhZChcdTAwMjZPQ0ZTMl9JKGRpciktXHUwMDNlaXBfeGF0dHJfc2VtKTtcbitcdFx0aWYgKElTX0VSUihzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCkpIHtcbitcdFx0XHRyZXQgPSBQVFJfRVJSKHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKTtcbitcdFx0XHRzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCA9IE5VTEw7XG4rXHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0fVxuLVx0XHRpZiAoIWFjbCkge1xuLVx0XHRcdG1vZGUgPSBpbm9kZS1cdTAwM2VpX21vZGUgXHUwMDI2IH5jdXJyZW50X3VtYXNrKCk7XG4tXHRcdFx0cmV0ID0gb2NmczJfYWNsX3NldF9tb2RlKGlub2RlLCBkaV9iaCwgaGFuZGxlLCBtb2RlKTtcbi1cdFx0XHRpZiAocmV0KSB7XG4tXHRcdFx0XHRtbG9nX2Vycm5vKHJldCk7XG4rXHRcdGlmIChzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCkge1xuK1x0XHRcdHN0YXRlLVx1MDAzZWFjbCA9IHBvc2l4X2FjbF9kdXAoc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wpO1xuK1x0XHRcdGlmICghc3RhdGUtXHUwMDNlYWNsKSB7XG4rXHRcdFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRcdFx0Z290byBjbGVhbnVwO1xuIFx0XHRcdH1cbitcdFx0XHRyZXQgPSBfX3Bvc2l4X2FjbF9jcmVhdGUoXHUwMDI2c3RhdGUtXHUwMDNlYWNsLCBHRlBfTk9GUyxcbitcdFx0XHRcdFx0XHQgXHUwMDI2c3RhdGUtXHUwMDNlbW9kZSk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gY2xlYW51cDtcbitcdFx0XHRpZiAocmV0ID09IDApIHtcbitcdFx0XHRcdHBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLVx1MDAzZWFjbCk7XG4rXHRcdFx0XHRzdGF0ZS1cdTAwM2VhY2wgPSBOVUxMO1xuK1x0XHRcdH1cbitcdFx0XHRpZiAoIVNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuK1x0XHRcdFx0cG9zaXhfYWNsX3JlbGVhc2Uoc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wpO1xuK1x0XHRcdFx0c3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wgPSBOVUxMO1xuK1x0XHRcdH1cbitcdFx0fSBlbHNlIHtcbitcdFx0XHRzdGF0ZS1cdTAwM2Vtb2RlIFx1MDAyNj0gfmN1cnJlbnRfdW1hc2soKTtcbiBcdFx0fVxuK1x0fSBlbHNlIHtcbitcdFx0c3RhdGUtXHUwMDNlbW9kZSBcdTAwMjY9IH5jdXJyZW50X3VtYXNrKCk7XG4gXHR9XG4tXHRpZiAoKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSBcdTAwMjZcdTAwMjYgYWNsKSB7XG4tXHRcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbitcbitcdHJldHVybiAwO1xuK2NsZWFudXA6XG4rXHRvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKHN0YXRlKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK2ludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuK1x0XHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLFxuK1x0XHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYyxcbitcdFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMsXG4rXHRcdCAgIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKVxuK3tcbitcdHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdGlmIChTX0lTTE5LKGlub2RlLVx1MDAzZWlfbW9kZSkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG4rXHRcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkgXHUwMDI2XHUwMDI2IHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKSB7XG4gXHRcdFx0cmV0ID0gb2NmczJfc2V0X2FjbChoYW5kbGUsIGlub2RlLCBkaV9iaCxcbi1cdFx0XHRcdFx0ICAgIEFDTF9UWVBFX0RFRkFVTFQsIGFjbCxcbi1cdFx0XHRcdFx0ICAgIG1ldGFfYWMsIGRhdGFfYWMpO1xuK1x0XHRcdFx0XHQgICAgQUNMX1RZUEVfREVGQVVMVCxcbitcdFx0XHRcdFx0ICAgIHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsLCBtZXRhX2FjLFxuK1x0XHRcdFx0XHQgICAgZGF0YV9hYyk7XG4gXHRcdFx0aWYgKHJldClcbi1cdFx0XHRcdGdvdG8gY2xlYW51cDtcbitcdFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdH1cbi1cdFx0bW9kZSA9IGlub2RlLVx1MDAzZWlfbW9kZTtcbi1cdFx0cmV0ID0gX19wb3NpeF9hY2xfY3JlYXRlKFx1MDAyNmFjbCwgR0ZQX05PRlMsIFx1MDAyNm1vZGUpO1xuLVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4gXG4tXHRcdHJldDIgPSBvY2ZzMl9hY2xfc2V0X21vZGUoaW5vZGUsIGRpX2JoLCBoYW5kbGUsIG1vZGUpO1xuLVx0XHRpZiAocmV0Mikge1xuLVx0XHRcdG1sb2dfZXJybm8ocmV0Mik7XG4tXHRcdFx0cmV0ID0gcmV0Mjtcbi1cdFx0XHRnb3RvIGNsZWFudXA7XG4tXHRcdH1cbi1cdFx0aWYgKHJldCBcdTAwM2UgMCkge1xuLVx0XHRcdHJldCA9IG9jZnMyX3NldF9hY2woaGFuZGxlLCBpbm9kZSxcbi1cdFx0XHRcdFx0ICAgIGRpX2JoLCBBQ0xfVFlQRV9BQ0NFU1MsXG4tXHRcdFx0XHRcdCAgICBhY2wsIG1ldGFfYWMsIGRhdGFfYWMpO1xuK1x0cmV0ID0gb2NmczJfYWNsX3NldF9tb2RlKGlub2RlLCBkaV9iaCwgaGFuZGxlLCBzdGF0ZS1cdTAwM2Vtb2RlKTtcbitcdGlmIChyZXQpIHtcbitcdFx0bWxvZ19lcnJubyhyZXQpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG4rXHRcdGlmIChzdGF0ZS1cdTAwM2VhY2wpIHtcbitcdFx0XHRyZXQgPSBvY2ZzMl9zZXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpX2JoLFxuK1x0XHRcdFx0XHQgICAgQUNMX1RZUEVfQUNDRVNTLCBzdGF0ZS1cdTAwM2VhY2wsXG4rXHRcdFx0XHRcdCAgICBtZXRhX2FjLCBkYXRhX2FjKTtcbiBcdFx0fVxuIFx0fVxuLWNsZWFudXA6XG4tXHRwb3NpeF9hY2xfcmVsZWFzZShhY2wpO1xuK1xuIFx0cmV0dXJuIHJldDtcbiB9XG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvYWNsLmggYi9mcy9vY2ZzMi9hY2wuaFxuaW5kZXggNjY3YzZmMDNmYTYwNmYuLmE5MWY5Y2UyNzhkNmQzIDEwMDY0NFxuLS0tIGEvZnMvb2NmczIvYWNsLmhcbisrKyBiL2ZzL29jZnMyL2FjbC5oXG5AQCAtMjAsOSArMjAsMjAgQEAgc3RydWN0IHBvc2l4X2FjbCAqb2NmczJfaW9wX2dldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsIGJvb2wgcmN1KTtcbiBpbnQgb2NmczJfaW9wX3NldF9hY2woc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdFx0ICAgICAgc3RydWN0IHBvc2l4X2FjbCAqYWNsLCBpbnQgdHlwZSk7XG4gZXh0ZXJuIGludCBvY2ZzMl9hY2xfY2htb2Qoc3RydWN0IGlub2RlICosIHN0cnVjdCBidWZmZXJfaGVhZCAqKTtcbi1leHRlcm4gaW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKixcbi1cdFx0XHQgIHN0cnVjdCBidWZmZXJfaGVhZCAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKixcbi1cdFx0XHQgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICosXG4tXHRcdFx0ICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKTtcbitzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlIHtcbitcdHN0cnVjdCBwb3NpeF9hY2wgKmRlZmF1bHRfYWNsO1xuK1x0c3RydWN0IHBvc2l4X2FjbCAqYWNsO1xuK1x0dW1vZGVfdCBtb2RlO1xuK307XG4rXG4raW50IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsXG4rXHRcdFx0ICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpO1xuK3ZvaWQgb2NmczJfYWNsX2luaXRfcmVsZWFzZShzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSk7XG4raW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rXHRcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsXG4rXHRcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLFxuK1x0XHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYyxcbitcdFx0ICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpO1xuIFxuICNlbmRpZiAvKiBPQ0ZTMl9BQ0xfSCAqL1xuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL25hbWVpLmMgYi9mcy9vY2ZzMi9uYW1laS5jXG5pbmRleCAxMjc3NjY2Yzc3Y2QyZC4uZDlhYmExNmE4ZjI4YTcgMTAwNjQ0XG4tLS0gYS9mcy9vY2ZzMi9uYW1laS5jXG4rKysgYi9mcy9vY2ZzMi9uYW1laS5jXG5AQCAtMjU2LDYgKzI1Niw3IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRzaWdzZXRfdCBvbGRzZXQ7XG4gXHRpbnQgZGlkX2Jsb2NrX3NpZ25hbHMgPSAwO1xuIFx0c3RydWN0IG9jZnMyX2RlbnRyeV9sb2NrICpkbCA9IE5VTEw7XG4rXHRzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlIGFjbF9zdGF0ZSA9IHsgMCB9O1xuIFxuIFx0dHJhY2Vfb2NmczJfbWtub2QoZGlyLCBkZW50cnksIGRlbnRyeS1cdTAwM2VkX25hbWUubGVuLCBkZW50cnktXHUwMDNlZF9uYW1lLm5hbWUsXG4gXHRcdFx0ICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koZGlyKS1cdTAwM2VpcF9ibGtubyxcbkBAIC0zMzAsMTAgKzMzMSwxMyBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHR9XG4gXHR9XG4gXG4rXHRzdGF0dXMgPSBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKGlub2RlLCBkaXIsIHBhcmVudF9mZV9iaCwgXHUwMDI2YWNsX3N0YXRlKTtcbitcdGlmIChzdGF0dXMgXHUwMDNjIDApXG4rXHRcdGdvdG8gbGVhdmU7XG4rXG4gXHQvKiBjYWxjdWxhdGUgbWV0YSBkYXRhL2NsdXN0ZXJzIGZvciBzZXR0aW5nIHNlY3VyaXR5IGFuZCBhY2wgeGF0dHIgKi9cbi1cdHN0YXR1cyA9IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChkaXIsIHBhcmVudF9mZV9iaCwgbW9kZSxcbi1cdFx0XHRcdCAgICAgICBcdTAwMjZzaSwgXHUwMDI2d2FudF9jbHVzdGVycyxcbi1cdFx0XHRcdCAgICAgICBcdTAwMjZ4YXR0cl9jcmVkaXRzLCBcdTAwMjZ3YW50X21ldGEpO1xuK1x0c3RhdHVzID0gb2NmczJfY2FsY194YXR0cl9pbml0KGRpciwgbW9kZSwgXHUwMDI2c2ksIFx1MDAyNndhbnRfY2x1c3RlcnMsXG4rXHRcdFx0XHQgICAgICAgXHUwMDI2eGF0dHJfY3JlZGl0cywgXHUwMDI2d2FudF9tZXRhLCBcdTAwMjZhY2xfc3RhdGUpO1xuIFx0aWYgKHN0YXR1cyBcdTAwM2MgMCkge1xuIFx0XHRtbG9nX2Vycm5vKHN0YXR1cyk7XG4gXHRcdGdvdG8gbGVhdmU7XG5AQCAtNDExLDggKzQxNSw4IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdGluY19ubGluayhkaXIpO1xuIFx0fVxuIFxuLVx0c3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgZGlyLCBuZXdfZmVfYmgsIHBhcmVudF9mZV9iaCxcbi1cdFx0XHQgbWV0YV9hYywgZGF0YV9hYyk7XG4rXHRzdGF0dXMgPSBvY2ZzMl9pbml0X2FjbChoYW5kbGUsIGlub2RlLCBuZXdfZmVfYmgsIG1ldGFfYWMsIGRhdGFfYWMsXG4rXHRcdFx0XHRcdTAwMjZhY2xfc3RhdGUpO1xuIFxuIFx0aWYgKHN0YXR1cyBcdTAwM2MgMCkge1xuIFx0XHRtbG9nX2Vycm5vKHN0YXR1cyk7XG5AQCAtNDc3LDYgKzQ4MSw4IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRicmVsc2UocGFyZW50X2ZlX2JoKTtcbiBcdGtmcmVlKHNpLnZhbHVlKTtcbiBcbitcdG9jZnMyX2FjbF9pbml0X3JlbGVhc2UoXHUwMDI2YWNsX3N0YXRlKTtcbitcbiBcdG9jZnMyX2ZyZWVfZGlyX2xvb2t1cF9yZXN1bHQoXHUwMDI2bG9va3VwKTtcbiBcbiBcdGlmIChpbm9kZV9hYylcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5jIGIvZnMvb2NmczIveGF0dHIuY1xuaW5kZXggZmNkZGQzYzEzYWNkZGQuLjRjZjViNjlkMTNiMDk1IDEwMDY0NFxuLS0tIGEvZnMvb2NmczIveGF0dHIuY1xuKysrIGIvZnMvb2NmczIveGF0dHIuY1xuQEAgLTYxMSwxMyArNjExLDEwIEBAIGludCBvY2ZzMl9jYWxjX3NlY3VyaXR5X2luaXQoc3RydWN0IGlub2RlICpkaXIsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1pbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdCAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsXG4tXHRcdFx0ICB1bW9kZV90IG1vZGUsXG4raW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLFxuIFx0XHRcdCAgc3RydWN0IG9jZnMyX3NlY3VyaXR5X3hhdHRyX2luZm8gKnNpLFxuLVx0XHRcdCAgaW50ICp3YW50X2NsdXN0ZXJzLFxuLVx0XHRcdCAgaW50ICp4YXR0cl9jcmVkaXRzLFxuLVx0XHRcdCAgaW50ICp3YW50X21ldGEpXG4rXHRcdFx0ICBpbnQgKndhbnRfY2x1c3RlcnMsIGludCAqeGF0dHJfY3JlZGl0cyxcbitcdFx0XHQgIGludCAqd2FudF9tZXRhLCBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICphY2xfc3RhdGUpXG4ge1xuIFx0aW50IHJldCA9IDA7XG4gXHRzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGRpci1cdTAwM2VpX3NiKTtcbkBAIC02MjgsMTkgKzYyNSwxNSBAQCBpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdFx0XHRcdCAgICAgc2ktXHUwMDNldmFsdWVfbGVuKTtcbiBcbiBcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuLVx0XHRkb3duX3JlYWQoXHUwMDI2T0NGUzJfSShkaXIpLVx1MDAzZWlwX3hhdHRyX3NlbSk7XG4tXHRcdGFjbF9sZW4gPSBvY2ZzMl94YXR0cl9nZXRfbm9sb2NrKGRpciwgZGlyX2JoLFxuLVx0XHRcdFx0XHRPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfREVGQVVMVCxcbi1cdFx0XHRcdFx0XCJcIiwgTlVMTCwgMCk7XG4tXHRcdHVwX3JlYWQoXHUwMDI2T0NGUzJfSShkaXIpLVx1MDAzZWlwX3hhdHRyX3NlbSk7XG4tXHRcdGlmIChhY2xfbGVuIFx1MDAzZSAwKSB7XG4tXHRcdFx0YV9zaXplID0gb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKDAsIGFjbF9sZW4pO1xuLVx0XHRcdGlmIChTX0lTRElSKG1vZGUpKVxuLVx0XHRcdFx0YV9zaXplIFx1MDAzY1x1MDAzYz0gMTtcbi1cdFx0fSBlbHNlIGlmIChhY2xfbGVuICE9IDAgXHUwMDI2XHUwMDI2IGFjbF9sZW4gIT0gLUVOT0RBVEEpIHtcbi1cdFx0XHRyZXQgPSBhY2xfbGVuO1xuLVx0XHRcdG1sb2dfZXJybm8ocmV0KTtcbi1cdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRpZiAoYWNsX3N0YXRlLVx1MDAzZWRlZmF1bHRfYWNsIFx1MDAyNlx1MDAyNiBTX0lTRElSKG1vZGUpKSB7XG4rXHRcdFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbC1cdTAwM2VhX2NvdW50ICpcbitcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xuK1x0XHRcdGFfc2l6ZSArPSBvY2ZzMl94YXR0cl9lbnRyeV9yZWFsX3NpemUoMCwgYWNsX2xlbik7XG4rXHRcdH1cbitcdFx0aWYgKGFjbF9zdGF0ZS1cdTAwM2VhY2wpIHtcbitcdFx0XHRhY2xfbGVuID0gYWNsX3N0YXRlLVx1MDAzZWFjbC1cdTAwM2VhX2NvdW50ICpcbitcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xuK1x0XHRcdGFfc2l6ZSArPSBvY2ZzMl94YXR0cl9lbnRyeV9yZWFsX3NpemUoMCwgYWNsX2xlbik7XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC02ODMsMTQgKzY3NiwyOSBAQCBpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdFx0XHRcdFx0ICAgbmV3X2NsdXN0ZXJzKTtcbiBcdFx0KndhbnRfY2x1c3RlcnMgKz0gbmV3X2NsdXN0ZXJzO1xuIFx0fVxuLVx0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMIFx1MDAyNlx1MDAyNlxuLVx0ICAgIGFjbF9sZW4gXHUwMDNlIE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7XG4tXHRcdC8qIGZvciBkaXJlY3RvcnksIGl0IGhhcyBERUZBVUxUIGFuZCBBQ0NFU1MgdHdvIHR5cGVzIG9mIGFjbHMgKi9cbi1cdFx0bmV3X2NsdXN0ZXJzID0gKFNfSVNESVIobW9kZSkgPyAyIDogMSkgKlxuLVx0XHRcdFx0b2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGRpci1cdTAwM2VpX3NiLCBhY2xfbGVuKTtcbi1cdFx0KnhhdHRyX2NyZWRpdHMgKz0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGRpci1cdTAwM2VpX3NiLFxuLVx0XHRcdFx0XHRcdFx0ICAgbmV3X2NsdXN0ZXJzKTtcbi1cdFx0KndhbnRfY2x1c3RlcnMgKz0gbmV3X2NsdXN0ZXJzO1xuK1x0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG4rXHRcdGlmIChhY2xfc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wgXHUwMDI2XHUwMDI2IFNfSVNESVIobW9kZSkpIHtcbitcdFx0XHRhY2xfbGVuID0gYWNsX3N0YXRlLVx1MDAzZWRlZmF1bHRfYWNsLVx1MDAzZWFfY291bnQgKlxuK1x0XHRcdFx0ICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7XG4rXHRcdFx0aWYgKGFjbF9sZW4gXHUwMDNlIE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7XG4rXHRcdFx0XHRuZXdfY2x1c3RlcnMgPSBvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoZGlyLVx1MDAzZWlfc2IsXG4rXHRcdFx0XHRcdFx0XHRcdFx0YWNsX2xlbik7XG4rXHRcdFx0XHQqeGF0dHJfY3JlZGl0cyArPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoZGlyLVx1MDAzZWlfc2IsXG4rXHRcdFx0XHRcdFx0XHRcdFx0ICAgbmV3X2NsdXN0ZXJzKTtcbitcdFx0XHRcdCp3YW50X2NsdXN0ZXJzICs9IG5ld19jbHVzdGVycztcbitcdFx0XHR9XG4rXHRcdH1cbitcdFx0aWYgKGFjbF9zdGF0ZS1cdTAwM2VhY2wpIHtcbitcdFx0XHRhY2xfbGVuID0gYWNsX3N0YXRlLVx1MDAzZWFjbC1cdTAwM2VhX2NvdW50ICpcbitcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xuK1x0XHRcdGlmIChhY2xfbGVuIFx1MDAzZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkge1xuK1x0XHRcdFx0bmV3X2NsdXN0ZXJzID0gb2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGRpci1cdTAwM2VpX3NiLFxuK1x0XHRcdFx0XHRcdFx0XHRcdGFjbF9sZW4pO1xuK1x0XHRcdFx0KnhhdHRyX2NyZWRpdHMgKz0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGRpci1cdTAwM2VpX3NiLFxuK1x0XHRcdFx0XHRcdFx0XHRcdCAgIG5ld19jbHVzdGVycyk7XG4rXHRcdFx0XHQqd2FudF9jbHVzdGVycyArPSBuZXdfY2x1c3RlcnM7XG4rXHRcdFx0fVxuK1x0XHR9XG4gXHR9XG4gXG4gXHRyZXR1cm4gcmV0O1xuQEAgLTM1NDIsOCArMzU1MCw2IEBAIGludCBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICpoYW5kbGUsXG4gXHR4aXMuaW5vZGVfYmggPSB4YnMuaW5vZGVfYmggPSBkaV9iaDtcbiBcdGRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilkaV9iaC1cdTAwM2ViX2RhdGE7XG4gXG4tXHRkb3duX3dyaXRlKFx1MDAyNk9DRlMyX0koaW5vZGUpLVx1MDAzZWlwX3hhdHRyX3NlbSk7XG4tXG4gXHRyZXQgPSBvY2ZzMl94YXR0cl9pYm9keV9maW5kKGlub2RlLCBuYW1lX2luZGV4LCBuYW1lLCBcdTAwMjZ4aXMpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBjbGVhbnVwO1xuQEAgLTM1NTYsNyArMzU2Miw2IEBAIGludCBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRyZXQgPSBfX29jZnMyX3hhdHRyX3NldF9oYW5kbGUoaW5vZGUsIGRpLCBcdTAwMjZ4aSwgXHUwMDI2eGlzLCBcdTAwMjZ4YnMsIFx1MDAyNmN0eHQpO1xuIFxuIGNsZWFudXA6XG4tXHR1cF93cml0ZShcdTAwMjZPQ0ZTMl9JKGlub2RlKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuIFx0YnJlbHNlKHhicy54YXR0cl9iaCk7XG4gXHRvY2ZzMl94YXR0cl9idWNrZXRfZnJlZSh4YnMuYnVja2V0KTtcbiBcbkBAIC03MjU3LDYgKzcyNjIsNyBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLFxuIHtcbiBcdGludCByZXQgPSAwO1xuIFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmggPSBOVUxMO1xuK1x0c3RydWN0IG9jZnMyX2FjbF9zdGF0ZSBhY2xfc3RhdGUgPSB7IDAgfTtcbiBcbiBcdHJldCA9IG9jZnMyX2luaXRfc2VjdXJpdHlfZ2V0KGlub2RlLCBkaXIsIHFzdHIsIE5VTEwpO1xuIFx0aWYgKHJldCkge1xuQEAgLTcyNjksMTAgKzcyNzUsMTcgQEAgaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0bWxvZ19lcnJubyhyZXQpO1xuIFx0XHRnb3RvIGxlYXZlO1xuIFx0fVxuLVx0cmV0ID0gb2NmczJfaW5pdF9hY2woTlVMTCwgaW5vZGUsIGRpciwgTlVMTCwgZGlyX2JoLCBOVUxMLCBOVUxMKTtcbitcbitcdHJldCA9IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoaW5vZGUsIGRpciwgZGlyX2JoLCBcdTAwMjZhY2xfc3RhdGUpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byB1bmxvY2s7XG4rXG4rXHRyZXQgPSBvY2ZzMl9pbml0X2FjbChOVUxMLCBpbm9kZSwgTlVMTCwgTlVMTCwgTlVMTCwgXHUwMDI2YWNsX3N0YXRlKTtcbiBcdGlmIChyZXQpXG4gXHRcdG1sb2dfZXJybm8ocmV0KTtcbiBcbit1bmxvY2s6XG4rXHRvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKFx1MDAyNmFjbF9zdGF0ZSk7XG4gXHRvY2ZzMl9pbm9kZV91bmxvY2soZGlyLCAwKTtcbiBcdGJyZWxzZShkaXJfYmgpO1xuIGxlYXZlOlxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3hhdHRyLmggYi9mcy9vY2ZzMi94YXR0ci5oXG5pbmRleCA2NWU5YWE3NDM5MTk5ZS4uNWNkZDZjNmI0MDA2NGIgMTAwNjQ0XG4tLS0gYS9mcy9vY2ZzMi94YXR0ci5oXG4rKysgYi9mcy9vY2ZzMi94YXR0ci5oXG5AQCAtNTUsOSArNTUsMTIgQEAgaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfc2V0KGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLFxuIGludCBvY2ZzMl9jYWxjX3NlY3VyaXR5X2luaXQoc3RydWN0IGlub2RlICosXG4gXHRcdFx0ICAgICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqLFxuIFx0XHRcdCAgICAgaW50ICosIGludCAqLCBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKik7XG4taW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICosXG4tXHRcdFx0ICB1bW9kZV90LCBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqLFxuLVx0XHRcdCAgaW50ICosIGludCAqLCBpbnQgKik7XG4rXG4rc3RydWN0IG9jZnMyX2FjbF9zdGF0ZTtcbitpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLCB1bW9kZV90IG1vZGUsXG4rXHRcdFx0ICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqc2ksXG4rXHRcdFx0ICBpbnQgKndhbnRfY2x1c3RlcnMsIGludCAqeGF0dHJfY3JlZGl0cyxcbitcdFx0XHQgIGludCAqd2FudF9tZXRhLCBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICphY2xfc3RhdGUpO1xuIFxuIC8qXG4gICogeGF0dHJzIGNhbiBsaXZlIGluc2lkZSBhbiBpbm9kZSwgYXMgcGFydCBvZiBhbiBleHRlcm5hbCB4YXR0ciBibG9jayxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE5OjQyOjM2LjgzNDM0MDU2NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4MDYyNTE3MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBPQ0ZTMiBBQ0wgYW5kIFhhdHRyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHRvdWNoZXMgc2V2ZXJhbCBjb3JlIE9DRlMyIGZpbGVzOiBgYWNsLmNgLCBgbmFtZWkuY2AsIGB4YXR0ci5jYCwgYW5kIGB4YXR0ci5oYC4gSXQgc2VlbXMgbGlrZSBhIHJlZmFjdG9yaW5nIGVmZm9ydCByZWxhdGVkIHRvIEFDTCBpbml0aWFsaXphdGlvbiwgc3BlY2lmaWNhbGx5IGludHJvZHVjaW5nIHRoZXNlIG5ldyBmdW5jdGlvbnM6IGBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlYCwgYG9jZnMyX2FjbF9pbml0X3JlbGVhc2VgLCBhbmQgbW9kaWZ5aW5nIGBvY2ZzMl9pbml0X2FjbGAgYW5kIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgLiBUaGF0J3MgYSByZWFzb25hYmxlIG9yZ2FuaXphdGlvbmFsIGNoYW5nZSwgaG9wZWZ1bGx5IGFpbWVkIGF0IGltcHJvdmluZyBtb2R1bGFyaXR5IG9yIHBlcmZvcm1hbmNlIGluIHRob3NlIEFDTCByb3V0aW5lcy5cblxuTm93LCB0aGlzIHBhcnQgaGVyZeKApiB0aGUgcmVtb3ZhbCBvZiBgZG93bl93cml0ZShcdTAwMjZPQ0ZTMl9JKGlub2RlKS1cdTAwM2VpcF94YXR0cl9zZW0pO2AgZnJvbSBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWAuLi4gVGhhdCdzIGdvdCBteSBhdHRlbnRpb24uIFdoeSBpcyB0aGUgc2VtYXBob3JlIGJlaW5nIHJlbW92ZWQgaW4gYGZzL29jZnMyL3hhdHRyLmNgPyBMZXQgbWUgZG91YmxlLWNoZWNrLiBZdXAsIHRoZXJlIGl0IGlzLiBMb29rcyBsaWtlIHRoZXkndmUgdGFrZW4gb3V0IHRoZSBsb2NraW5nIHRoYXQgc3Vycm91bmRlZCB0aGUgeGF0dHIgb3BlcmF0aW9uLiBUaGlzIGlzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSwgbm90IGp1c3QgYW4gb3JnYW5pemF0aW9uYWwgb25lLiBXZSBuZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgY29uY3VycmVudCBhY2Nlc3MgYW5kIGRhdGEgaW50ZWdyaXR5IGlmIHRoaXMgY2hhbmdlIGlzIGNvcnJlY3QuXG5cbkkgc2VlIHRoZXkndmUgcmVtb3ZlZCB0aGUgZG93biBhbmQgdXAgd3JpdGUgY2FsbHMgdG8gdGhlIHNlbWFwaG9yZS4gVGhpcyBoYXMgc2VyaW91cyBpbXBsaWNhdGlvbnMgZm9yIGNvbmN1cnJlbnQgeGF0dHIgb3BlcmF0aW9ucy4gV2UnbGwgbmVlZCB0byBzY3J1dGluaXplIGhvdyB4YXR0ciBvcGVyYXRpb25zIGFyZSBub3cgc3luY2hyb25pemVkLCBpZiBhdCBhbGwuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIHdhcyBkZWVtZWQgc2FmZSBvciBuZWNlc3NhcnkuIElzIHRoZXJlIGEgbmV3IGxvY2tpbmcgbWVjaGFuaXNtIGludHJvZHVjZWQsIG9yIGlzIHRoZSBvcmlnaW5hbCBsb2NraW5nIHBhdHRlcm4gc29tZWhvdyByZWR1bmRhbnQ/XG5cbkFscmlnaHQsIE9DRlMyIGlzIGEgZmlsZXN5c3RlbSwgc28sIHRoYW5rZnVsbHksIHRoaXMgaXMgdGVzdGFibGU7IHdlIGNhbiBtb3VudCBpdCBhbmQgcnVuIHRocm91Z2ggYSBzdWl0ZSBvZiB0ZXN0cyB0byBzZWUgaWYgYW55dGhpbmcgYnJlYWtzLiBMZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB3ZSBoYXZlIHRvIGRlYWwgd2l0aC4gQWgsIGBDT05GSUdfT0NGUzJfRlNgIGlzIHRoZSBvYnZpb3VzIG9uZSwgd2hpY2ggZW5hYmxlcyB0aGUgT0NGUzIgZmlsZXN5c3RlbS4gQW5kIEknbSBnb2luZyB0byBsb29rIGZvciBgQ09ORklHX09DRlMyX0ZTX1BPU0lYX0FDTGAganVzdCB0byBiZSBzdXJlLCB0aGF0IFBPU0lYIEFDTHMgbWlnaHQgYmUgcmVxdWlyZWQgZm9yIHRoaXMgcGF0Y2ggdG8gZnVuY3Rpb24gY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjI2LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTc3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTk6NDI6NDQuNjQwNTk2MTI4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MjU0NzgwMTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE9DRlMyX0ZTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL29jZnMyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9vY2ZzMi9LY29uZmlnOjI6Y29uZmlnIE9DRlMyX0ZTXFxuZnMvb2NmczIvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJPQ0ZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvb2NmczIvS2NvbmZpZy0yNy1cXG5mcy9vY2ZzMi9LY29uZmlnOjI4OmNvbmZpZyBPQ0ZTMl9GU19PMkNCXFxuZnMvb2NmczIvS2NvbmZpZy0yOS1cXHR0cmlzdGF0ZSBcXFwiTzJDQiBLZXJuZWxzcGFjZSBDbHVzdGVyaW5nXFxcIlxcbi0tXFxuZnMvb2NmczIvS2NvbmZpZy00MS1cXG5mcy9vY2ZzMi9LY29uZmlnOjQyOmNvbmZpZyBPQ0ZTMl9GU19VU0VSU1BBQ0VfQ0xVU1RFUlxcbmZzL29jZnMyL0tjb25maWctNDMtXFx0dHJpc3RhdGUgXFxcIk9DRlMyIFVzZXJzcGFjZSBDbHVzdGVyaW5nXFxcIlxcbi0tXFxuZnMvb2NmczIvS2NvbmZpZy01My1cXG5mcy9vY2ZzMi9LY29uZmlnOjU0OmNvbmZpZyBPQ0ZTMl9GU19TVEFUU1xcbmZzL29jZnMyL0tjb25maWctNTUtXFx0Ym9vbCBcXFwiT0NGUzIgc3RhdGlzdGljc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTk6NDI6NDcuMjY2MDgxNDQyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg1OTU4NzA2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkNoZWNraW5nIGZvciBQT1NJWCBBQ0wgU3VwcG9ydCBpbiBPQ0ZTMioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBmaWxlc3lzdGVtIHRoYXQgbmF0aXZlbHkgc3VwcG9ydHMgUE9TSVggQUNMcy4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHByb2JpbmcgZm9yIHRoZSBwcmVzZW5jZSBvZiB0aGUgYE9DRlMyX0ZTX1BPU0lYX0FDTGAgZmxhZywgb3Igc29tZXRoaW5nIGFuYWxvZ291cy4gSXQncyB0aGUgbW9zdCBjb21tb24gYW5kIGRpcmVjdCBpbmRpY2F0b3IuIElmIHRoYXQncyBwcmVzZW50LCBJIGNhbiBpbmZlciBhIGNlcnRhaW4gbGV2ZWwgb2Ygc3VwcG9ydCBhbmQgdGFpbG9yIHN1YnNlcXVlbnQgb3BlcmF0aW9ucyBiYXNlZCBvbiB0aGF0IGtub3dsZWRnZS4gSWYgaXQncyAqbm90KiBwcmVzZW50LCB0aGVuIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyLiBJJ2xsIG5lZWQgdG8gbW92ZSBvbiB0byBjaGVjayBmb3IgYSBjb21wYXRpYmlsaXR5IGxheWVyIG9yIG90aGVyIG1lY2hhbmlzbSB0byBzdXBwb3J0IHRoaXMsIGlmIHRoZSBmaWxlc3lzdGVtIGFkdmVydGlzZXMgYW55dGhpbmcgb3RoZXIgdGhhbiBub3Qgc3VwcG9ydGluZyB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTYyLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTk6NDI6NTEuMTI1NjcyMzM5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwOTM1OTUwNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE9DRlMyX0ZTX1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vY2ZzMi9LY29uZmlnPTI9Y29uZmlnIE9DRlMyX0ZTXFxuLS1cXG5mcy9vY2ZzMi9LY29uZmlnLTI3LVxcbmZzL29jZnMyL0tjb25maWc6Mjg6Y29uZmlnIE9DRlMyX0ZTX08yQ0JcXG5mcy9vY2ZzMi9LY29uZmlnLTI5LVxcdHRyaXN0YXRlIFxcXCJPMkNCIEtlcm5lbHNwYWNlIENsdXN0ZXJpbmdcXFwiXFxuLS1cXG5mcy9vY2ZzMi9LY29uZmlnLTQxLVxcbmZzL29jZnMyL0tjb25maWc6NDI6Y29uZmlnIE9DRlMyX0ZTX1VTRVJTUEFDRV9DTFVTVEVSXFxuZnMvb2NmczIvS2NvbmZpZy00My1cXHR0cmlzdGF0ZSBcXFwiT0NGUzIgVXNlcnNwYWNlIENsdXN0ZXJpbmdcXFwiXFxuLS1cXG5mcy9vY2ZzMi9LY29uZmlnLTUzLVxcbmZzL29jZnMyL0tjb25maWc6NTQ6Y29uZmlnIE9DRlMyX0ZTX1NUQVRTXFxuZnMvb2NmczIvS2NvbmZpZy01NS1cXHRib29sIFxcXCJPQ0ZTMiBzdGF0aXN0aWNzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxOTo0Mjo1NC4yMTkyNzQyNjlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDI5MTA4NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBBYnNlbmNlIG9mIGBPQ0ZTMl9GU19QT1NJWF9BQ0xgKipcblxuSG1tLCBpdCBzZWVtcyB0aGF0IGBPQ0ZTMl9GU19QT1NJWF9BQ0xgIGlzbid0IGRlZmluZWQuIFRoYXQncyBhIGJpdCBvZGQuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBjb2RlIHRvIGZpbmQgd2hlcmUgdGhpcyBpcyBjb25maWd1cmVkLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlcyB0byBzdGFydCBsb29raW5nIGZvciB0aGlzIHdvdWxkIGJlIHRoZSBgZnMvb2NmczIvTWFrZWZpbGVgIGFuZCBgZnMvb2NmczIvS2NvbmZpZ2AgZmlsZXMuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRob3NlLCB0aGUgTWFrZWZpbGUgc2hvdWxkIGJlIHJlbGF0ZWQgdG8gY29tcGlsYXRpb24gYW5kIHRoZSBLY29uZmlnIHRvIGtlcm5lbCBjb25maWd1cmF0aW9ucywgYXMgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IEFDTCBpcyBiZWluZyBoYW5kbGVkIGluIE9DRlMyLiBJIHdpbGwgYmUgbG9va2luZyBmb3IgaG93IEFDTCBzdXBwb3J0IGlzIGVuYWJsZWQgYW5kIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTg2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTk6NDI6NTcuNjQ4Mzg3MDRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2ODQyODc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlBPU0lYX0FDTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9vY2ZzMi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvb2NmczIvS2NvbmZpZz0yPWNvbmZpZyBPQ0ZTMl9GU1xcbi0tXFxuZnMvb2NmczIvS2NvbmZpZy05LVxcdHNlbGVjdCBRVU9UQV9UUkVFXFxuZnMvb2NmczIvS2NvbmZpZzoxMDpcXHRzZWxlY3QgRlNfUE9TSVhfQUNMXFxuZnMvb2NmczIvS2NvbmZpZy0xMS1cXHRzZWxlY3QgTEVHQUNZX0RJUkVDVF9JT1xcbi0tXFxuZnMvb2NmczIvYWNsLmM9MTEzPXN0YXRpYyBzdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9nZXRfYWNsX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSxcXG4tLVxcbmZzL29jZnMyL2FjbC5jLTEyMi1cXHRjYXNlIEFDTF9UWVBFX0FDQ0VTUzpcXG5mcy9vY2ZzMi9hY2wuYzoxMjM6XFx0XFx0bmFtZV9pbmRleCA9IE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1M7XFxuZnMvb2NmczIvYWNsLmMtMTI0LVxcdFxcdGJyZWFrO1xcbmZzL29jZnMyL2FjbC5jLTEyNS1cXHRjYXNlIEFDTF9UWVBFX0RFRkFVTFQ6XFxuZnMvb2NmczIvYWNsLmM6MTI2OlxcdFxcdG5hbWVfaW5kZXggPSBPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfREVGQVVMVDtcXG5mcy9vY2ZzMi9hY2wuYy0xMjctXFx0XFx0YnJlYWs7XFxuLS1cXG5mcy9vY2ZzMi9hY2wuYz0yMTQ9c3RhdGljIGludCBvY2ZzMl9zZXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsXFxuLS1cXG5mcy9vY2ZzMi9hY2wuYy0yMzEtXFx0Y2FzZSBBQ0xfVFlQRV9BQ0NFU1M6XFxuZnMvb2NmczIvYWNsLmM6MjMyOlxcdFxcdG5hbWVfaW5kZXggPSBPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfQUNDRVNTO1xcbmZzL29jZnMyL2FjbC5jLTIzMy1cXHRcXHRicmVhaztcXG5mcy9vY2ZzMi9hY2wuYy0yMzQtXFx0Y2FzZSBBQ0xfVFlQRV9ERUZBVUxUOlxcbmZzL29jZnMyL2FjbC5jOjIzNTpcXHRcXHRuYW1lX2luZGV4ID0gT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFQ7XFxuZnMvb2NmczIvYWNsLmMtMjM2LVxcdFxcdGlmICghU19JU0RJUihpbm9kZS1cXHUwMDNlaV9tb2RlKSlcXG4tLVxcbmZzL29jZnMyL2FjbC5jPTI5Mz1zdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9pb3BfZ2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgYm9vbCByY3UpXFxuLS1cXG5mcy9vY2ZzMi9hY2wuYy0zMDQtXFx0b3NiID0gT0NGUzJfU0IoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbmZzL29jZnMyL2FjbC5jOjMwNTpcXHRpZiAoIShvc2ItXFx1MDAzZXNfbW91bnRfb3B0IFxcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSlcXG5mcy9vY2ZzMi9hY2wuYy0zMDYtXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5mcy9vY2ZzMi9hY2wuYz0zMjE9aW50IG9jZnMyX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxcbi0tXFxuZnMvb2NmczIvYWNsLmMtMzI5LVxcbmZzL29jZnMyL2FjbC5jOjMzMDpcXHRpZiAoIShvc2ItXFx1MDAzZXNfbW91bnRfb3B0IFxcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSlcXG5mcy9vY2ZzMi9hY2wuYy0zMzEtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5mcy9vY2ZzMi9hY2wuYz0zNTk9aW50IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9vY2ZzMi9hY2wuYy0zNzItXFxuZnMvb2NmczIvYWNsLmM6MzczOlxcdGlmIChvc2ItXFx1MDAzZXNfbW91bnRfb3B0IFxcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XFxuZnMvb2NmczIvYWNsLmMtMzc0LVxcdFxcdGRvd25fcmVhZChcXHUwMDI2T0NGUzJfSShkaXIpLVxcdTAwM2VpcF94YXR0cl9zZW0pO1xcbi0tXFxuZnMvb2NmczIvYWNsLmM9NDE0PWludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvb2NmczIvYWNsLmMtNDI1LVxcbmZzL29jZnMyL2FjbC5jOjQyNjpcXHRpZiAob3NiLVxcdTAwM2VzX21vdW50X29wdCBcXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xcbmZzL29jZnMyL2FjbC5jLTQyNy1cXHRcXHRpZiAoU19JU0RJUihpbm9kZS1cXHUwMDNlaV9tb2RlKSBcXHUwMDI2XFx1MDAyNiBzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wpIHtcXG4tLVxcbmZzL29jZnMyL2FjbC5jLTQ0Mi1cXG5mcy9vY2ZzMi9hY2wuYzo0NDM6XFx0aWYgKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcXG5mcy9vY2ZzMi9hY2wuYy00NDQtXFx0XFx0aWYgKHN0YXRlLVxcdTAwM2VhY2wpIHtcXG4tLVxcbmZzL29jZnMyL29jZnMyLmg9MjU3PWVudW0gb2NmczJfbW91bnRfb3B0aW9uc1xcbi0tXFxuZnMvb2NmczIvb2NmczIuaC0yNjYtXFx0T0NGUzJfTU9VTlRfSU5PREU2NCA9IDEgXFx1MDAzY1xcdTAwM2MgNyxcXHQvKiBBbGxvdyBpbm9kZSBudW1iZXJzIFxcdTAwM2UgMl4zMiAqL1xcbmZzL29jZnMyL29jZnMyLmg6MjY3OlxcdE9DRlMyX01PVU5UX1BPU0lYX0FDTCA9IDEgXFx1MDAzY1xcdTAwM2MgOCxcXHQvKiBGb3JjZSBQT1NJWCBhY2Nlc3MgY29udHJvbCBsaXN0cyAqL1xcbmZzL29jZnMyL29jZnMyLmg6MjY4OlxcdE9DRlMyX01PVU5UX05PX1BPU0lYX0FDTCA9IDEgXFx1MDAzY1xcdTAwM2MgOSxcXHQvKiBEaXNhYmxlIFBPU0lYIGFjY2Vzc1xcbmZzL29jZnMyL29jZnMyLmgtMjY5LVxcdFxcdFxcdFxcdFxcdFxcdCAgIGNvbnRyb2wgbGlzdHMgKi9cXG4tLVxcbmZzL29jZnMyL3N1cGVyLmM9NjA3PXN0YXRpYyBpbnQgb2NmczJfcmVjb25maWd1cmUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvb2NmczIvc3VwZXIuYy03MTctXFx0XFx0c2ItXFx1MDAzZXNfZmxhZ3MgPSAoc2ItXFx1MDAzZXNfZmxhZ3MgXFx1MDAyNiB+U0JfUE9TSVhBQ0wpIHxcXG5mcy9vY2ZzMi9zdXBlci5jOjcxODpcXHRcXHRcXHQoKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpID9cXG5mcy9vY2ZzMi9zdXBlci5jLTcxOS1cXHRcXHRcXHRcXHRcXHRcXHRcXHRTQl9QT1NJWEFDTCA6IDApO1xcbi0tXFxuZnMvb2NmczIvc3VwZXIuYz05NzM9c3RhdGljIGludCBvY2ZzMl9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL29jZnMyL3N1cGVyLmMtMTAyNC1cXHRzYi1cXHUwMDNlc19mbGFncyA9IChzYi1cXHUwMDNlc19mbGFncyBcXHUwMDI2IH4oU0JfUE9TSVhBQ0wgfCBTQl9OT1NFQykpIHxcXG5mcy9vY2ZzMi9zdXBlci5jOjEwMjU6XFx0XFx0KChvc2ItXFx1MDAzZXNfbW91bnRfb3B0IFxcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSA/IFNCX1BPU0lYQUNMIDogMCk7XFxuZnMvb2NmczIvc3VwZXIuYy0xMDI2LVxcbi0tXFxuZnMvb2NmczIvc3VwZXIuYz0xMjMyPXN0YXRpYyBpbnQgb2NmczJfY2hlY2tfc2V0X29wdGlvbnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL29jZnMyL3N1cGVyLmMtMTI2MC1cXHR9XFxuZnMvb2NmczIvc3VwZXIuYzoxMjYxOlxcdGlmIChvcHRpb25zLVxcdTAwM2Vtb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wgXFx1MDAyNlxcdTAwMjZcXG5mcy9vY2ZzMi9zdXBlci5jLTEyNjItXFx0ICAgICFPQ0ZTMl9IQVNfSU5DT01QQVRfRkVBVFVSRShzYiwgT0NGUzJfRkVBVFVSRV9JTkNPTVBBVF9YQVRUUikpIHtcXG4tLVxcbmZzL29jZnMyL3N1cGVyLmMtMTI2Ny1cXHQvKiBObyBBQ0wgc2V0dGluZyBzcGVjaWZpZWQ/IFVzZSBYQVRUUiBmZWF0dXJlLi4uICovXFxuZnMvb2NmczIvc3VwZXIuYzoxMjY4OlxcdGlmICghKG9wdGlvbnMtXFx1MDAzZW1vdW50X29wdCBcXHUwMDI2IChPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wgfFxcbmZzL29jZnMyL3N1cGVyLmM6MTI2OTpcXHRcXHRcXHRcXHQgICAgT0NGUzJfTU9VTlRfTk9fUE9TSVhfQUNMKSkpIHtcXG5mcy9vY2ZzMi9zdXBlci5jLTEyNzAtXFx0XFx0aWYgKE9DRlMyX0hBU19JTkNPTVBBVF9GRUFUVVJFKHNiLCBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX1hBVFRSKSlcXG5mcy9vY2ZzMi9zdXBlci5jOjEyNzE6XFx0XFx0XFx0b3B0aW9ucy1cXHUwMDNlbW91bnRfb3B0IHw9IE9DRlMyX01PVU5UX1BPU0lYX0FDTDtcXG5mcy9vY2ZzMi9zdXBlci5jLTEyNzItXFx0XFx0ZWxzZVxcbmZzL29jZnMyL3N1cGVyLmM6MTI3MzpcXHRcXHRcXHRvcHRpb25zLVxcdTAwM2Vtb3VudF9vcHQgfD0gT0NGUzJfTU9VTlRfTk9fUE9TSVhfQUNMO1xcbmZzL29jZnMyL3N1cGVyLmMtMTI3NC1cXHR9XFxuLS1cXG5mcy9vY2ZzMi9zdXBlci5jPTEyNzg9c3RhdGljIGludCBvY2ZzMl9wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKVxcbi0tXFxuZnMvb2NmczIvc3VwZXIuYy0xMzg0LVxcdFxcdGlmIChyZXN1bHQubmVnYXRlZCkge1xcbmZzL29jZnMyL3N1cGVyLmM6MTM4NTpcXHRcXHRcXHRtb3B0LVxcdTAwM2Vtb3VudF9vcHQgfD0gT0NGUzJfTU9VTlRfTk9fUE9TSVhfQUNMO1xcbmZzL29jZnMyL3N1cGVyLmM6MTM4NjpcXHRcXHRcXHRtb3B0LVxcdTAwM2Vtb3VudF9vcHQgXFx1MDAyNj0gfk9DRlMyX01PVU5UX1BPU0lYX0FDTDtcXG5mcy9vY2ZzMi9zdXBlci5jLTEzODctXFx0XFx0fSBlbHNlIHtcXG5mcy9vY2ZzMi9zdXBlci5jOjEzODg6XFx0XFx0XFx0bW9wdC1cXHUwMDNlbW91bnRfb3B0IHw9IE9DRlMyX01PVU5UX1BPU0lYX0FDTDtcXG5mcy9vY2ZzMi9zdXBlci5jOjEzODk6XFx0XFx0XFx0bW9wdC1cXHUwMDNlbW91bnRfb3B0IFxcdTAwMjY9IH5PQ0ZTMl9NT1VOVF9OT19QT1NJWF9BQ0w7XFxuZnMvb2NmczIvc3VwZXIuYy0xMzkwLVxcdFxcdH1cXG4tLVxcbmZzL29jZnMyL3N1cGVyLmM9MTQxNj1zdGF0aWMgaW50IG9jZnMyX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBkZW50cnkgKnJvb3QpXFxuLS1cXG5mcy9vY2ZzMi9zdXBlci5jLTE0ODQtXFxuZnMvb2NmczIvc3VwZXIuYzoxNDg1OlxcdGlmIChvcHRzIFxcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKVxcbmZzL29jZnMyL3N1cGVyLmMtMTQ4Ni1cXHRcXHRzZXFfcHJpbnRmKHMsIFxcXCIsYWNsXFxcIik7XFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jPTEwMT1zdGF0aWMgY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKiBjb25zdCBvY2ZzMl94YXR0cl9oYW5kbGVyX21hcFtPQ0ZTMl9YQVRUUl9NQVhdID0ge1xcbmZzL29jZnMyL3hhdHRyLmMtMTAyLVxcdFtPQ0ZTMl9YQVRUUl9JTkRFWF9VU0VSXVxcdFxcdD0gXFx1MDAyNm9jZnMyX3hhdHRyX3VzZXJfaGFuZGxlcixcXG5mcy9vY2ZzMi94YXR0ci5jOjEwMzpcXHRbT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0FDQ0VTU11cXHQ9IFxcdTAwMjZub3BfcG9zaXhfYWNsX2FjY2VzcyxcXG5mcy9vY2ZzMi94YXR0ci5jOjEwNDpcXHRbT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFRdXFx0PSBcXHUwMDI2bm9wX3Bvc2l4X2FjbF9kZWZhdWx0LFxcbmZzL29jZnMyL3hhdHRyLmMtMTA1LVxcdFtPQ0ZTMl9YQVRUUl9JTkRFWF9UUlVTVEVEXVxcdFxcdD0gXFx1MDAyNm9jZnMyX3hhdHRyX3RydXN0ZWRfaGFuZGxlcixcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmM9NjE0PWludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSxcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNjI2LVxcbmZzL29jZnMyL3hhdHRyLmM6NjI3OlxcdGlmIChvc2ItXFx1MDAzZXNfbW91bnRfb3B0IFxcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XFxuZnMvb2NmczIveGF0dHIuYy02MjgtXFx0XFx0aWYgKGFjbF9zdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wgXFx1MDAyNlxcdTAwMjYgU19JU0RJUihtb2RlKSkge1xcbi0tXFxuZnMvb2NmczIveGF0dHIuYy02NzgtXFx0fVxcbmZzL29jZnMyL3hhdHRyLmM6Njc5OlxcdGlmIChvc2ItXFx1MDAzZXNfbW91bnRfb3B0IFxcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XFxuZnMvb2NmczIveGF0dHIuYy02ODAtXFx0XFx0aWYgKGFjbF9zdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wgXFx1MDAyNlxcdTAwMjYgU19JU0RJUihtb2RlKSkge1xcbi0tXFxuZnMvb2NmczIveGF0dHIuYz04ODc9c3RhdGljIGludCBvY2ZzMl94YXR0cl9saXN0X2VudHJ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTkwMi1cXG5mcy9vY2ZzMi94YXR0ci5jOjkwMzpcXHRjYXNlIE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1M6XFxuZnMvb2NmczIveGF0dHIuYzo5MDQ6XFx0Y2FzZSBPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfREVGQVVMVDpcXG5mcy9vY2ZzMi94YXR0ci5jLTkwNS1cXHRcXHRpZiAoIShzYi1cXHUwMDNlc19mbGFncyBcXHUwMDI2IFNCX1BPU0lYQUNMKSlcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmM9NzE2OD1zdGF0aWMgaW50IG9jZnMyX3JlZmxpbmtfeGF0dHJfbm9fc2VjdXJpdHkoc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5ICp4ZSlcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNzE3Mi1cXHRyZXR1cm4gdHlwZSAhPSBPQ0ZTMl9YQVRUUl9JTkRFWF9TRUNVUklUWSBcXHUwMDI2XFx1MDAyNlxcbmZzL29jZnMyL3hhdHRyLmM6NzE3MzpcXHQgICAgICAgdHlwZSAhPSBPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfQUNDRVNTIFxcdTAwMjZcXHUwMDI2XFxuZnMvb2NmczIveGF0dHIuYzo3MTc0OlxcdCAgICAgICB0eXBlICE9IE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9ERUZBVUxUO1xcbmZzL29jZnMyL3hhdHRyLmMtNzE3NS19XFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5oPTE0PWVudW0gb2NmczJfeGF0dHJfdHlwZSB7XFxuZnMvb2NmczIveGF0dHIuaC0xNS1cXHRPQ0ZTMl9YQVRUUl9JTkRFWF9VU0VSID0gMSxcXG5mcy9vY2ZzMi94YXR0ci5oOjE2OlxcdE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1MsXFxuZnMvb2NmczIveGF0dHIuaDoxNzpcXHRPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfREVGQVVMVCxcXG5mcy9vY2ZzMi94YXR0ci5oLTE4LVxcdE9DRlMyX1hBVFRSX0lOREVYX1RSVVNURUQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE5OjQyOjU3Ljg0NTIzNzkwNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMTQ4NDkyMzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk9DRlMyIEFDTCBJbml0aWFsaXphdGlvbiBhbmQgWGF0dHIgSGFuZGxpbmcgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIGNsZWFyIHRoZSBjaGFuZ2VzIHJldm9sdmUgYXJvdW5kIEFDTCBpbml0aWFsaXphdGlvbiB3aXRoaW4gdGhlIE9DRlMyIGZpbGVzeXN0ZW0uIFRoZSBjb25maWd1cmF0aW9uIHNlbGVjdGlvbiBzdGFydHMgd2l0aCBgT0NGUzJfRlNgLCB3aGljaCB0aGVuIGltcGxpZXMgYEZTX1BPU0lYX0FDTGAsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBQT1NJWCBBQ0xzIGhlcmUuXG5cblRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyBtb2RpZmljYXRpb25zIHRvIHNldmVyYWwgZnVuY3Rpb25zOiBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAsIGBvY2ZzMl9pbml0X2FjbGAsIGFuZCBgb2NmczJfY2FsY194YXR0cl9pbml0YC4gVGhlc2UgYXJlIGNyaXRpY2FsIGJlY2F1c2UgdGhleSdyZSBjYWxsZWQgZHVyaW5nIG5vZGUgY3JlYXRpb24gYW5kIGluaXRpYWxpemF0aW9uLiBTcGVjaWZpY2FsbHksIGBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlYCBpcyBjYWxsZWQgZnJvbSBgb2NmczJfbWtub2RgLCBhbmQgdGhlbiBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCBjYWxscyB0aG9zZSBmdW5jdGlvbnMuIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgIGlzIHN1YnNlcXVlbnRseSBjYWxsZWQgZnJvbSBgb2NmczJfc3ltbGlua2AgYW5kIGBvY2ZzMl9ta2RpcmAsIGV0Yy5cblxuSSBjaGVja2VkIGBvY2ZzMl9ta25vZGAgaW4gYGZzL29jZnMyL25hbWVpLmNgLCBhbmQgaXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZSB0aHJvdWdoIGZ1enppbmcsIHdoaWNoIG1lYW5zIHRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCBleHBvc2VkIHRvIHRoZSB1c2VyLlxuXG5NeSBpbml0aWFsIGZvY3VzIHN5bWJvbHMgd2VyZSB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zLCBidXQgSSd2ZSByZWZpbmVkIHRoYXQuIFdoaWxlIGBvY2ZzMl9ta25vZGAgaXRzZWxmIGlzIGEgZ29vZCBlbnRyeSBwb2ludCwgYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgIGlzIGV2ZW4gbW9yZSBzcGVjaWZpYyBhbmQgaW50ZXJlc3RpbmcuIE5vdywgYWZ0ZXIgZnVydGhlciBpbnZlc3RpZ2F0aW9uLCB0aGUgZm9jdXMgc3ltYm9scyBJJ3ZlIGlkZW50aWZpZWQgYXJlOiBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAsIGBvY2ZzMl9pbml0X2FjbGAsIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgLCBhbmQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAuIFRoZSBsb2NhdGlvbiBvZiB0aGVzZSBzeW1ib2xzIGFyZSBgZnMvb2NmczIvYWNsLmNgIChmb3IgYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgIGFuZCBgb2NmczJfaW5pdF9hY2xgKSwgYGZzL29jZnMyL3hhdHRyLmNgIChmb3IgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgKS5cblxuQSBzaWduaWZpY2FudCBjaGFuZ2UgaXMgdGhlIHJlbW92YWwgb2YgdGhlIGxvY2sgYGRvd25fd3JpdGUoXHUwMDI2T0NGUzJfSShpbm9kZSktXHUwMDNlaXBfeGF0dHJfc2VtKTtgIGZyb20gYG9jZnMyX3hhdHRyX3NldF9oYW5kbGVgLCBhbHNvIGxvY2F0ZWQgaW4gYGZzL29jZnMyL3hhdHRyLmNgLiBUaGlzIGlzIGEgY29uY3VycmVuY3ktcmVsYXRlZCBjaGFuZ2UsIGFuZCB0aGlzIGlzIHdoeSBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWAgc2hvdWxkIGFsc28gYmUgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgZm9jdXMgc3ltYm9scy5cblxuVGhlIGtleSBjb25maWd1cmF0aW9uIGlzIGBPQ0ZTMl9GU2AsIGFuZCBpdCBhdXRvbWF0aWNhbGx5IGVuYWJsZXMgYEZTX1BPU0lYX0FDTGAsIHNvIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgY29uZmlncyBuZWVkZWQuXG5cbioqSW4gc3VtbWFyeToqKlxuXG4qICAgKipXb3J0aEZ1enppbmcqKjogYHRydWVgXG4qICAgKipGb2N1c1N5bWJvbHMqKjpcbiAgICAqICAgYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgXG4gICAgKiAgIGBvY2ZzMl9pbml0X2FjbGBcbiAgICAqICAgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGBcbiAgICAqICAgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGBcbiAgICAqICAgYG9jZnMyX3hhdHRyX3NldF9oYW5kbGVgXG4qICAgKipFbmFibGVDb25maWdzKio6IGBPQ0ZTMl9GU2BcblxuVGhlIHJhdGlvbmFsZSBoZXJlIGlzIHRoYXQgdGhpcyBwYXRjaCBtb2RpZmllcyBjb3JlIEFDTCBpbml0aWFsaXphdGlvbiBhbmQgeGF0dHIgaGFuZGxpbmcgd2l0aGluIE9DRlMyLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSB0eXBpY2FsIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucy4gVGhlIGxvY2sgcmVtb3ZhbCBpbiBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWAgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgYmVjYXVzZSBpdCBjYW4gaW50cm9kdWNlIGNvbmN1cnJlbmN5IGlzc3VlcywgYW5kIHRoaXMgaXMgd2h5IGZ1enppbmcgc2hvdWxkIGJlIGRpcmVjdGVkIHRvd2FyZHMgdGhlc2UgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ4NSwiT3V0cHV0VG9rZW5zIjoyNTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTk6NDM6MDkuOTkzNzM0MjExWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAwNjI2ODU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPQ0ZTMl9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm9jZnMyX2FjbF9pbml0X3ByZXBhcmVcIixcbiAgICBcIm9jZnMyX2luaXRfYWNsXCIsXG4gICAgXCJvY2ZzMl9jYWxjX3hhdHRyX2luaXRcIixcbiAgICBcIm9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbFwiLFxuICAgIFwib2NmczJfeGF0dHJfc2V0X2hhbmRsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBBQ0wgaW5pdGlhbGl6YXRpb24gaW4gT0NGUzIsIGludHJvZHVjaW5nIG5ldyBmdW5jdGlvbnMgYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgIGFuZCBgb2NmczJfYWNsX2luaXRfcmVsZWFzZWAsIGFuZCBtb2RpZnlpbmcgYG9jZnMyX2luaXRfYWNsYCBhbmQgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAuIEl0IGFsc28gcmVtb3ZlcyBhIGxvY2sgKGBpcF94YXR0cl9zZW1gKSBmcm9tIGBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZmlsZXN5c3RlbSdzIGNvcmUgbG9naWMgYW5kIHhhdHRyIGhhbmRsaW5nLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzdGFuZGFyZCBmaWxlc3lzdGVtIG9wZXJhdGlvbnMgKGUuZy4sIG1rbm9kLCBta2Rpciwgc2V0eGF0dHIpLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBtb2RpZmllZCBmdW5jdGlvbnMgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyAoZHVlIHRvIHRoZSByZW1vdmVkIGxvY2spIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9DRlMyX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib2NmczJfYWNsX2luaXRfcHJlcGFyZVwiLFxuICAgIFwib2NmczJfaW5pdF9hY2xcIixcbiAgICBcIm9jZnMyX2NhbGNfeGF0dHJfaW5pdFwiLFxuICAgIFwib2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsXCIsXG4gICAgXCJvY2ZzMl94YXR0cl9zZXRfaGFuZGxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIEFDTCBpbml0aWFsaXphdGlvbiBpbiBPQ0ZTMiwgaW50cm9kdWNpbmcgbmV3IGZ1bmN0aW9ucyBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAgYW5kIGBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlYCwgYW5kIG1vZGlmeWluZyBgb2NmczJfaW5pdF9hY2xgIGFuZCBgb2NmczJfY2FsY194YXR0cl9pbml0YC4gSXQgYWxzbyByZW1vdmVzIGEgbG9jayAoYGlwX3hhdHRyX3NlbWApIGZyb20gYG9jZnMyX3hhdHRyX3NldF9oYW5kbGVgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBmaWxlc3lzdGVtJ3MgY29yZSBsb2dpYyBhbmQgeGF0dHIgaGFuZGxpbmcsIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHN0YW5kYXJkIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyAoZS5nLiwgbWtub2QsIG1rZGlyLCBzZXR4YXR0cikuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIG1vZGlmaWVkIGZ1bmN0aW9ucyB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgY29uY3VycmVuY3kgaXNzdWVzIChkdWUgdG8gdGhlIHJlbW92ZWQgbG9jaykgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5zkdj[1] Phase: Succeeded StartedAt: 2026-07-22 19:43:23 +0000 UTC FinishedAt: 2026-07-22 19:43:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zkdj[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-22 19:43:24 +0000 UTC FinishedAt: 2026-07-22 19:43:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zkdj[2] Phase: Succeeded StartedAt: 2026-07-22 19:43:24 +0000 UTC FinishedAt: 2026-07-23 00:32:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zkdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"eb3d038b-800d-4365-a6af-df28b6b634a3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-22 19:43:24 +0000 UTC FinishedAt: 2026-07-23 00:32:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl","ocfs2_xattr_set_handle"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"eb3d038b-800d-4365-a6af-df28b6b634a3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow5zkdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"eb3d038b-800d-4365-a6af-df28b6b634a3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-22 19:43:24 +0000 UTC FinishedAt: 2026-07-22 19:43:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zkdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"eb3d038b-800d-4365-a6af-df28b6b634a3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-22 19:43:24 +0000 UTC FinishedAt: 2026-07-22 19:43:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5zkdj/series-workflow5zkdj-convert-artifact-1241867711/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5zkdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"eb3d038b-800d-4365-a6af-df28b6b634a3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-22 19:43:59 +0000 UTC FinishedAt: 2026-07-22 20:37:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zkdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"eb3d038b-800d-4365-a6af-df28b6b634a3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-22 19:43:59 +0000 UTC FinishedAt: 2026-07-22 20:37:47 +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:*ceb3398a-0128-4682-9308-8b7c8424abcc,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-workflow5zkdj/series-workflow5zkdj-convert-artifact-1241867711/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": "9b5998d7-f721-4a6a-9c8f-6d417f72fcdd", "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-workflow5zkdj/series-workflow5zkdj-build-action-2290970693/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5zkdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"eb3d038b-800d-4365-a6af-df28b6b634a3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-22 19:43:59 +0000 UTC FinishedAt: 2026-07-22 20:37:37 +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:*ceb3398a-0128-4682-9308-8b7c8424abcc,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-workflow5zkdj/series-workflow5zkdj-convert-artifact-1241867711/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": "9b5998d7-f721-4a6a-9c8f-6d417f72fcdd", "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-workflow5zkdj/series-workflow5zkdj-build-action-2290970693/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5zkdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"eb3d038b-800d-4365-a6af-df28b6b634a3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-22 20:37:47 +0000 UTC FinishedAt: 2026-07-22 20:37:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zkdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"eb3d038b-800d-4365-a6af-df28b6b634a3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-22 20:37:47 +0000 UTC FinishedAt: 2026-07-22 20:37:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zkdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"eb3d038b-800d-4365-a6af-df28b6b634a3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-22 20:37:47 +0000 UTC FinishedAt: 2026-07-22 20:37:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zkdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"eb3d038b-800d-4365-a6af-df28b6b634a3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-22 20:37:47 +0000 UTC FinishedAt: 2026-07-22 20:37:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"eb3d038b-800d-4365-a6af-df28b6b634a3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5zkdj/series-workflow5zkdj-convert-artifact-3022046158/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5zkdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"eb3d038b-800d-4365-a6af-df28b6b634a3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-22 20:37:57 +0000 UTC FinishedAt: 2026-07-22 20:39:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zkdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"eb3d038b-800d-4365-a6af-df28b6b634a3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-22 20:37:57 +0000 UTC FinishedAt: 2026-07-22 20:39:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9b5998d7-f721-4a6a-9c8f-6d417f72fcdd,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-workflow5zkdj/series-workflow5zkdj-build-action-2290970693/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-workflow5zkdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"eb3d038b-800d-4365-a6af-df28b6b634a3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-22 20:39:55 +0000 UTC FinishedAt: 2026-07-22 20:39:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zkdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"eb3d038b-800d-4365-a6af-df28b6b634a3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-22 20:39:55 +0000 UTC FinishedAt: 2026-07-22 20:39:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zkdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"eb3d038b-800d-4365-a6af-df28b6b634a3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-22 20:39:55 +0000 UTC FinishedAt: 2026-07-22 21:27:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zkdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"eb3d038b-800d-4365-a6af-df28b6b634a3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-22 20:39:55 +0000 UTC FinishedAt: 2026-07-22 21:27:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*ceb3398a-0128-4682-9308-8b7c8424abcc,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-workflow5zkdj/series-workflow5zkdj-convert-artifact-3022046158/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": "a3a16d5c-cc38-4041-a07d-538294a02ec5", "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-workflow5zkdj/series-workflow5zkdj-build-action-3344393570/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5zkdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"eb3d038b-800d-4365-a6af-df28b6b634a3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-22 20:39:55 +0000 UTC FinishedAt: 2026-07-22 21:26:56 +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:*ceb3398a-0128-4682-9308-8b7c8424abcc,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-workflow5zkdj/series-workflow5zkdj-convert-artifact-3022046158/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": "a3a16d5c-cc38-4041-a07d-538294a02ec5", "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-workflow5zkdj/series-workflow5zkdj-build-action-3344393570/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5zkdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"eb3d038b-800d-4365-a6af-df28b6b634a3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-22 21:27:30 +0000 UTC FinishedAt: 2026-07-22 21:27:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zkdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"eb3d038b-800d-4365-a6af-df28b6b634a3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-22 21:27:30 +0000 UTC FinishedAt: 2026-07-22 21:27:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zkdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"eb3d038b-800d-4365-a6af-df28b6b634a3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-22 21:27:30 +0000 UTC FinishedAt: 2026-07-22 21:29:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zkdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"eb3d038b-800d-4365-a6af-df28b6b634a3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-22 21:27:30 +0000 UTC FinishedAt: 2026-07-22 21:29:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a3a16d5c-cc38-4041-a07d-538294a02ec5,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-workflow5zkdj/series-workflow5zkdj-build-action-3344393570/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-workflow5zkdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"eb3d038b-800d-4365-a6af-df28b6b634a3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-22 21:29:32 +0000 UTC FinishedAt: 2026-07-23 00:32:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zkdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"eb3d038b-800d-4365-a6af-df28b6b634a3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-22 21:29:32 +0000 UTC FinishedAt: 2026-07-23 00:32:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl","ocfs2_xattr_set_handle"],"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:*9b5998d7-f721-4a6a-9c8f-6d417f72fcdd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a3a16d5c-cc38-4041-a07d-538294a02ec5,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-workflow5zkdj/series-workflow5zkdj-build-action-2290970693/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-workflow5zkdj/series-workflow5zkdj-build-action-3344393570/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow5zkdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"eb3d038b-800d-4365-a6af-df28b6b634a3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-22 21:29:32 +0000 UTC FinishedAt: 2026-07-22 21:29:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zkdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"eb3d038b-800d-4365-a6af-df28b6b634a3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-22 21:29:32 +0000 UTC FinishedAt: 2026-07-22 21:29:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl","ocfs2_xattr_set_handle"],"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-workflow5zkdj/series-workflow5zkdj-convert-artifact-1401833715/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5zkdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"eb3d038b-800d-4365-a6af-df28b6b634a3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-22 21:29:32 +0000 UTC FinishedAt: 2026-07-22 21:29:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zkdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"eb3d038b-800d-4365-a6af-df28b6b634a3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-22 21:29:32 +0000 UTC FinishedAt: 2026-07-22 21:29:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zkdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"eb3d038b-800d-4365-a6af-df28b6b634a3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-22 21:29:33 +0000 UTC FinishedAt: 2026-07-22 21:29:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zkdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"eb3d038b-800d-4365-a6af-df28b6b634a3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-22 21:29:43 +0000 UTC FinishedAt: 2026-07-23 00:32:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zkdj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl","ocfs2_xattr_set_handle"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"eb3d038b-800d-4365-a6af-df28b6b634a3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-22 21:29:43 +0000 UTC FinishedAt: 2026-07-23 00:32:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9b5998d7-f721-4a6a-9c8f-6d417f72fcdd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a3a16d5c-cc38-4041-a07d-538294a02ec5,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-workflow5zkdj/series-workflow5zkdj-build-action-2290970693/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-workflow5zkdj/series-workflow5zkdj-build-action-3344393570/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-workflow5zkdj/series-workflow5zkdj-convert-artifact-1401833715/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,}