Name: series-workflowm62kl Phase: Failed StartedAt: 2026-08-10 09:46:08 +0000 UTC FinishedAt: 2026-08-10 09:49:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm62kl[0] Phase: Succeeded StartedAt: 2026-08-10 09:46:08 +0000 UTC FinishedAt: 2026-08-10 09:49:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm62kl[0].run-triage Phase: Succeeded StartedAt: 2026-08-10 09:46:08 +0000 UTC FinishedAt: 2026-08-10 09:49:49 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1lbGxhbm94IG1seDUgZHJpdmVyLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTM5MzQ1MDkyMmY5OTZkYWJkMjM2Mzc1ZmY3NGQ2ZjkxZjk0MDU4NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDA5OjQ5OjI1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc2QuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc2QuY1xuaW5kZXggZWUyZmRlZmExOTQ1Zi4uNGNkYzUwY2Q2ZjAzOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc2QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zZC5jXG5AQCAtMTksNyAmIzQzOzE5LDcgQEBcbiBcbiBzdHJ1Y3QgbWx4NV9zZCB7XG4gXHR1MzIgZ3JvdXBfaWQ7XG4tXHR1OCBob3N0X2J1c2VzO1xuJiM0MztcdHU4IGdyb3VwX3NpemU7XG4gXHRzdHJ1Y3QgbWx4NV9kZXZjb21fY29tcF9kZXYgKmRldmNvbTtcbiBcdHN0cnVjdCBkZW50cnkgKmRmcztcbiBcdHU4IHN0YXRlO1xuQEAgLTQ2LDE0ICYjNDM7NDYsMTQgQEAgZW51bSBtbHg1X3NkX3N0YXRlIHtcbiBcdE1MWDVfU0RfU1RBVEVfVVAsXG4gfTtcbiBcbi1zdGF0aWMgaW50IG1seDVfc2RfZ2V0X2hvc3RfYnVzZXMoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbiYjNDM7c3RhdGljIGludCBtbHg1X3NkX2dldF9ncm91cF9zaXplKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG4ge1xuIFx0c3RydWN0IG1seDVfc2QgKnNkID0gbWx4NV9nZXRfc2QoZGV2KTtcbiBcbiBcdGlmICghc2QpXG4gXHRcdHJldHVybiAxO1xuIFxuLVx0cmV0dXJuIHNkLVx1MDAzZWhvc3RfYnVzZXM7XG4mIzQzO1x0cmV0dXJuIHNkLVx1MDAzZWdyb3VwX3NpemU7XG4gfVxuIFxuIHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptbHg1X3NkX2dldF9wcmltYXJ5KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG5AQCAtMTA3LDcgJiM0MzsxMDcsNyBAQCBpbnQgbWx4NV9zZF9wZl9udW1fZ2V0KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG4gXHRcdGlmIChwb3MgPT0gZGV2KVxuIFx0XHRcdGJyZWFrO1xuIFxuLVx0cmV0dXJuIHBmX251bSAqIHNkLVx1MDAzZWhvc3RfYnVzZXMgJiM0MzsgaTtcbiYjNDM7XHRyZXR1cm4gcGZfbnVtICogc2QtXHUwMDNlZ3JvdXBfc2l6ZSAmIzQzOyBpO1xuIH1cbiBcbiBzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqXG5AQCAtMTE4LDcgJiM0MzsxMTgsNyBAQCBtbHg1X3NkX3ByaW1hcnlfZ2V0X3BlZXIoc3RydWN0IG1seDVfY29yZV9kZXYgKnByaW1hcnksIGludCBpZHgpXG4gXHRpZiAoaWR4ID09IDApXG4gXHRcdHJldHVybiBwcmltYXJ5O1xuIFxuLVx0aWYgKGlkeCBcdTAwM2U9IG1seDVfc2RfZ2V0X2hvc3RfYnVzZXMocHJpbWFyeSkpXG4mIzQzO1x0aWYgKGlkeCBcdTAwM2U9IG1seDVfc2RfZ2V0X2dyb3VwX3NpemUocHJpbWFyeSkpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0c2QgPSBtbHg1X2dldF9zZChwcmltYXJ5KTtcbkBAIC0xMzAsNyAmIzQzOzEzMCw3IEBAIGludCBtbHg1X3NkX2NoX2l4X2dldF9kZXZfaXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgaW50IGNoX2l4KVxuIFx0aWYgKGlzX21kZXZfc3dpdGNoZGV2X21vZGUoZGV2KSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZXR1cm4gY2hfaXggJSBtbHg1X3NkX2dldF9ob3N0X2J1c2VzKGRldik7XG4mIzQzO1x0cmV0dXJuIGNoX2l4ICUgbWx4NV9zZF9nZXRfZ3JvdXBfc2l6ZShkZXYpO1xuIH1cbiBcbiBpbnQgbWx4NV9zZF9jaF9peF9nZXRfdmVjX2l4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGludCBjaF9peClcbkBAIC0xMzgsNyAmIzQzOzEzOCw3IEBAIGludCBtbHg1X3NkX2NoX2l4X2dldF92ZWNfaXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgaW50IGNoX2l4KVxuIFx0aWYgKGlzX21kZXZfc3dpdGNoZGV2X21vZGUoZGV2KSlcbiBcdFx0cmV0dXJuIGNoX2l4O1xuIFxuLVx0cmV0dXJuIGNoX2l4IC8gbWx4NV9zZF9nZXRfaG9zdF9idXNlcyhkZXYpO1xuJiM0MztcdHJldHVybiBjaF9peCAvIG1seDVfc2RfZ2V0X2dyb3VwX3NpemUoZGV2KTtcbiB9XG4gXG4gc3RydWN0IG1seDVfY29yZV9kZXYgKm1seDVfc2RfY2hfaXhfZ2V0X2RldihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqcHJpbWFyeSwgaW50IGNoX2l4KVxuQEAgLTE2NCw3ICYjNDM7MTY0LDcgQEAgc3RhdGljIGJvb2wgZnRfY3JlYXRlX2FsaWFzX3N1cHBvcnRlZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuIH1cbiBcbiBzdGF0aWMgaW50IG1seDVfcXVlcnlfc2Qoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgYm9vbCAqc2RtLFxuLVx0XHRcdCB1OCAqaG9zdF9idXNlcylcbiYjNDM7XHRcdFx0IHU4ICpncm91cF9zaXplKVxuIHtcbiBcdHUzMiBvdXRbTUxYNV9TVF9TWl9EVyhtcGlyX3JlZyldO1xuIFx0aW50IGVycjtcbkBAIC0xNzQsNyAmIzQzOzE3NCw3IEBAIHN0YXRpYyBpbnQgbWx4NV9xdWVyeV9zZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBib29sICpzZG0sXG4gXHRcdHJldHVybiBlcnI7XG4gXG4gXHQqc2RtID0gTUxYNV9HRVQobXBpcl9yZWcsIG91dCwgc2RtKTtcbi1cdCpob3N0X2J1c2VzID0gTUxYNV9HRVQobXBpcl9yZWcsIG91dCwgaG9zdF9idXNlcyk7XG4mIzQzO1x0Kmdyb3VwX3NpemUgPSBNTFg1X0dFVChtcGlyX3JlZywgb3V0LCBob3N0X2J1c2VzKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0xODQsMTAgJiM0MzsxODQsMTAgQEAgc3RhdGljIHUzMiBtbHg1X3NkX2dyb3VwX2lkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHU4IHNkX2dyb3VwKVxuIFx0cmV0dXJuICh1MzIpKChNTFg1X0NBUF9HRU4oZGV2LCBuYXRpdmVfcG9ydF9udW0pIFx1MDAzY1x1MDAzYyA4KSB8IHNkX2dyb3VwKTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgbWx4NV9zZF9jYXBzX3N1cHBvcnRlZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1OCBob3N0X2J1c2VzKVxuJiM0MztzdGF0aWMgYm9vbCBtbHg1X3NkX2NhcHNfc3VwcG9ydGVkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHU4IGdyb3VwX3NpemUpXG4ge1xuIFx0LyogSG9ub3IgdGhlIFNXIGltcGxlbWVudGF0aW9uIGxpbWl0ICovXG4tXHRpZiAoaG9zdF9idXNlcyBcdTAwM2UgTUxYNV9TRF9NQVhfR1JPVVBfU1opXG4mIzQzO1x0aWYgKGdyb3VwX3NpemUgXHUwMDNlIE1MWDVfU0RfTUFYX0dST1VQX1NaKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHQvKiBEaXNjb25uZWN0IHNlY29uZGFyaWVzIGZyb20gdGhlIG5ldHdvcmsgKi9cbkBAIC0yMDAsNyAmIzQzOzIwMCw3IEBAIHN0YXRpYyBib29sIG1seDVfc2RfY2Fwc19zdXBwb3J0ZWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTggaG9zdF9idXNlcylcbiBcdC8qIFJYIHN0ZWVyaW5nIGZyb20gcHJpbWFyeSB0byBzZWNvbmRhcmllcyAqL1xuIFx0aWYgKCFNTFg1X0NBUF9HRU4oZGV2LCBjcm9zc192aGNhX3JxdCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbi1cdGlmIChob3N0X2J1c2VzIFx1MDAzZSBNTFg1X0NBUF9HRU5fMihkZXYsIG1heF9ycXRfdmhjYV9pZCkpXG4mIzQzO1x0aWYgKGdyb3VwX3NpemUgXHUwMDNlIE1MWDVfQ0FQX0dFTl8yKGRldiwgbWF4X3JxdF92aGNhX2lkKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0LyogVFggc3RlZXJpbmcgZnJvbSBzZWNvbmRhcmllcyB0byBwcmltYXJ5ICovXG5AQCAtMjE0LDcgJiM0MzsyMTQsNyBAQCBzdGF0aWMgYm9vbCBtbHg1X3NkX2NhcHNfc3VwcG9ydGVkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHU4IGhvc3RfYnVzZXMpXG4gXG4gYm9vbCBtbHg1X3NkX2lzX3N1cHBvcnRlZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuIHtcbi1cdHU4IGhvc3RfYnVzZXMsIHNkX2dyb3VwO1xuJiM0MztcdHU4IGdyb3VwX3NpemUgPSBVOF9NQVgsIHNkX2dyb3VwO1xuIFx0Ym9vbCBzZG07XG4gXHRpbnQgZXJyO1xuIFxuQEAgLTIyMiwyMyAmIzQzOzIyMiwyNSBAQCBib29sIG1seDVfc2RfaXNfc3VwcG9ydGVkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG4gXHRpZiAoIW1seDVfY29yZV9pc19wZihkZXYpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRlcnIgPSBtbHg1X3F1ZXJ5X25pY192cG9ydF9zZF9ncm91cChkZXYsIFx1MDAyNnNkX2dyb3VwKTtcbi1cdGlmIChlcnIgfHwgIXNkX2dyb3VwKVxuJiM0MztcdGVyciA9IG1seDVfcXVlcnlfbmljX3Zwb3J0X3NkX2dyb3VwKGRldiwgXHUwMDI2c2RfZ3JvdXAsIFx1MDAyNmdyb3VwX3NpemUpO1xuJiM0MztcdGlmIChlcnIgfHwgIXNkX2dyb3VwIHx8IGdyb3VwX3NpemUgXHUwMDNjIE1MWDVfU0RfTUlOX0dST1VQX1NaKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRpZiAoIU1MWDVfQ0FQX01DQU1fUkVHKGRldiwgbXBpcikpXG4tXHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRpZiAoZ3JvdXBfc2l6ZSA9PSBVOF9NQVgpIHtcbiYjNDM7XHRcdGlmICghTUxYNV9DQVBfTUNBTV9SRUcoZGV2LCBtcGlyKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0ZXJyID0gbWx4NV9xdWVyeV9zZChkZXYsIFx1MDAyNnNkbSwgXHUwMDI2aG9zdF9idXNlcyk7XG4tXHRpZiAoZXJyIHx8ICFzZG0pXG4tXHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdGVyciA9IG1seDVfcXVlcnlfc2QoZGV2LCBcdTAwMjZzZG0sIFx1MDAyNmdyb3VwX3NpemUpO1xuJiM0MztcdFx0aWYgKGVyciB8fCAhc2RtKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuIFxuLVx0cmV0dXJuIG1seDVfc2RfY2Fwc19zdXBwb3J0ZWQoZGV2LCBob3N0X2J1c2VzKTtcbiYjNDM7XHRyZXR1cm4gbWx4NV9zZF9jYXBzX3N1cHBvcnRlZChkZXYsIGdyb3VwX3NpemUpO1xuIH1cbiBcbiBzdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbiB7XG4tXHR1OCBob3N0X2J1c2VzLCBzZF9ncm91cDtcbiYjNDM7XHR1OCBncm91cF9zaXplID0gVThfTUFYLCBzZF9ncm91cDtcbiBcdHN0cnVjdCBtbHg1X3NkICpzZDtcbiBcdHUzMiBncm91cF9pZDtcbiBcdGJvb2wgc2RtO1xuQEAgLTI0OCwyNiAmIzQzOzI1MCwyNyBAQCBzdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbiBcdGlmICghbWx4NV9jb3JlX2lzX3BmKGRldikpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0ZXJyID0gbWx4NV9xdWVyeV9uaWNfdnBvcnRfc2RfZ3JvdXAoZGV2LCBcdTAwMjZzZF9ncm91cCk7XG4mIzQzO1x0ZXJyID0gbWx4NV9xdWVyeV9uaWNfdnBvcnRfc2RfZ3JvdXAoZGV2LCBcdTAwMjZzZF9ncm91cCwgXHUwMDI2Z3JvdXBfc2l6ZSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0aWYgKCFzZF9ncm91cClcbiYjNDM7XHRpZiAoIXNkX2dyb3VwIHx8IGdyb3VwX3NpemUgXHUwMDNjIE1MWDVfU0RfTUlOX0dST1VQX1NaKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmICghTUxYNV9DQVBfTUNBTV9SRUcoZGV2LCBtcGlyKSlcbi1cdFx0cmV0dXJuIDA7XG4mIzQzO1x0aWYgKGdyb3VwX3NpemUgPT0gVThfTUFYKSB7XG4mIzQzO1x0XHRpZiAoIU1MWDVfQ0FQX01DQU1fUkVHKGRldiwgbXBpcikpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuIFxuLVx0ZXJyID0gbWx4NV9xdWVyeV9zZChkZXYsIFx1MDAyNnNkbSwgXHUwMDI2aG9zdF9idXNlcyk7XG4tXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuLVxuLVx0aWYgKCFzZG0pXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdFx0ZXJyID0gbWx4NV9xdWVyeV9zZChkZXYsIFx1MDAyNnNkbSwgXHUwMDI2Z3JvdXBfc2l6ZSk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuIFxuJiM0MztcdFx0aWYgKCFzZG0pXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiBcdGdyb3VwX2lkID0gbWx4NV9zZF9ncm91cF9pZChkZXYsIHNkX2dyb3VwKTtcbiBcbi1cdGlmICghbWx4NV9zZF9jYXBzX3N1cHBvcnRlZChkZXYsIGhvc3RfYnVzZXMpKSB7XG4mIzQzO1x0aWYgKCFtbHg1X3NkX2NhcHNfc3VwcG9ydGVkKGRldiwgZ3JvdXBfc2l6ZSkpIHtcbiBcdFx0c2Rfd2FybihkZXYsIFwmIzM0O2NhbiYjMzk7dCBzdXBwb3J0IHJlcXVlc3RlZCBuZXRkZXYgY29tYmluaW5nIGZvciBncm91cCBpZCAweCV4LCBza2lwcGluZ1xcblwmIzM0OyxcbiBcdFx0XHRncm91cF9pZCk7XG4gXHRcdHJldHVybiAwO1xuQEAgLTI3Nyw3ICYjNDM7MjgwLDcgQEAgc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG4gXHRpZiAoIXNkKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdHNkLVx1MDAzZWhvc3RfYnVzZXMgPSBob3N0X2J1c2VzO1xuJiM0MztcdHNkLVx1MDAzZWdyb3VwX3NpemUgPSBncm91cF9zaXplO1xuIFx0c2QtXHUwMDNlZ3JvdXBfaWQgPSBncm91cF9pZDtcbiBcbiBcdG1seDVfc2V0X3NkKGRldiwgc2QpO1xuQEAgLTU0MCw3ICYjNDM7NTQzLDcgQEAgc3RhdGljIGludCBzZF9yZWdpc3RlcihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuIFx0c2QtXHUwMDNlZGV2Y29tID0gZGV2Y29tO1xuIFxuIFx0bWx4NV9kZXZjb21fY29tcF9sb2NrKGRldmNvbSk7XG4tXHRpZiAobWx4NV9kZXZjb21fY29tcF9nZXRfc2l6ZShkZXZjb20pICE9IHNkLVx1MDAzZWhvc3RfYnVzZXMgfHxcbiYjNDM7XHRpZiAobWx4NV9kZXZjb21fY29tcF9nZXRfc2l6ZShkZXZjb20pICE9IHNkLVx1MDAzZWdyb3VwX3NpemUgfHxcbiBcdCAgICBtbHg1X2RldmNvbV9jb21wX2lzX3JlYWR5KGRldmNvbSkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuQEAgLTU3Niw3ICYjNDM7NTc5LDcgQEAgc3RhdGljIGludCBzZF9yZWdpc3RlcihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuIFx0XHRcdFx0ICAgICAgREVWQ09NX0NBTlRfRkFJTCwgcHJpbWFyeSk7XG4gXG4gXHRwcmltYXJ5X3NkID0gbWx4NV9nZXRfc2QocHJpbWFyeSk7XG4tXHRpZiAocHJpbWFyeV9zZC1cdTAwM2VuZXh0X3NlY29uZGFyeV9pZHggJiM0MzsgMSA9PSBzZC1cdTAwM2Vob3N0X2J1c2VzKVxuJiM0MztcdGlmIChwcmltYXJ5X3NkLVx1MDAzZW5leHRfc2Vjb25kYXJ5X2lkeCAmIzQzOyAxID09IHNkLVx1MDAzZWdyb3VwX3NpemUpXG4gXHRcdG1seDVfZGV2Y29tX2NvbXBfc2V0X3JlYWR5KGRldmNvbSwgdHJ1ZSk7XG4gb3V0OlxuIFx0bWx4NV9kZXZjb21fY29tcF91bmxvY2soZGV2Y29tKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3NkLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3NkLmhcbmluZGV4IGNiODhiZjM0MDc5YWQuLmJjOGRiYzI5OTA3MDQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3NkLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc2QuaFxuQEAgLTYsNiAmIzQzOzYsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbiYjNDM7I2RlZmluZSBNTFg1X1NEX01JTl9HUk9VUF9TWiAyXG4gI2RlZmluZSBNTFg1X1NEX01BWF9HUk9VUF9TWiAyXG4gXG4gc3RydWN0IG1seDVfc2Q7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3Zwb3J0LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvdnBvcnQuY1xuaW5kZXggMzY3NmUyNmFjNmIwOS4uM2Q4NjUxMGFmNjE1MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS92cG9ydC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvdnBvcnQuY1xuQEAgLTU1MCw3ICYjNDM7NTUwLDggQEAgaW50IG1seDVfcXVlcnlfbmljX3Zwb3J0X3N5c3RlbV9pbWFnZV9ndWlkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChtbHg1X3F1ZXJ5X25pY192cG9ydF9zeXN0ZW1faW1hZ2VfZ3VpZCk7XG4gXG4taW50IG1seDVfcXVlcnlfbmljX3Zwb3J0X3NkX2dyb3VwKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LCB1OCAqc2RfZ3JvdXApXG4mIzQzO2ludCBtbHg1X3F1ZXJ5X25pY192cG9ydF9zZF9ncm91cChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiwgdTggKnNkX2dyb3VwLFxuJiM0MztcdFx0XHRcdCAgdTggKnNkX2dyb3VwX3NpemUpXG4ge1xuIFx0aW50IG91dGxlbiA9IE1MWDVfU1RfU1pfQllURVMocXVlcnlfbmljX3Zwb3J0X2NvbnRleHRfb3V0KTtcbiBcdHUzMiAqb3V0O1xuQEAgLTU2Niw2ICYjNDM7NTY3LDkgQEAgaW50IG1seDVfcXVlcnlfbmljX3Zwb3J0X3NkX2dyb3VwKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LCB1OCAqc2RfZ3JvdXApXG4gXG4gXHQqc2RfZ3JvdXAgPSBNTFg1X0dFVChxdWVyeV9uaWNfdnBvcnRfY29udGV4dF9vdXQsIG91dCxcbiBcdFx0XHQgICAgIG5pY192cG9ydF9jb250ZXh0LnNkX2dyb3VwKTtcbiYjNDM7XHRpZiAoTUxYNV9DQVBfR0VOKG1kZXYsIHNkX2dyb3VwX3NpemUpKVxuJiM0MztcdFx0KnNkX2dyb3VwX3NpemUgPSBNTFg1X0dFVChxdWVyeV9uaWNfdnBvcnRfY29udGV4dF9vdXQsIG91dCxcbiYjNDM7XHRcdFx0XHRcdCAgbmljX3Zwb3J0X2NvbnRleHQuc2RfZ3JvdXBfc2l6ZSk7XG4gb3V0OlxuIFx0a3ZmcmVlKG91dCk7XG4gXHRyZXR1cm4gZXJyO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWx4NS92cG9ydC5oIGIvaW5jbHVkZS9saW51eC9tbHg1L3Zwb3J0LmhcbmluZGV4IGVlMzRkM2VkMzM1ZjMuLjU3NzE2OGE0Y2EwYzggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21seDUvdnBvcnQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbHg1L3Zwb3J0LmhcbkBAIC03OCw3ICYjNDM7NzgsOCBAQCBpbnQgbWx4NV9xdWVyeV9uaWNfdnBvcnRfbXR1KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LCB1MTYgKm10dSk7XG4gaW50IG1seDVfbW9kaWZ5X25pY192cG9ydF9tdHUoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsIHUxNiBtdHUpO1xuIGludCBtbHg1X3F1ZXJ5X25pY192cG9ydF9zeXN0ZW1faW1hZ2VfZ3VpZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldixcbiBcdFx0XHRcdFx0ICAgdTY0ICpzeXN0ZW1faW1hZ2VfZ3VpZCk7XG4taW50IG1seDVfcXVlcnlfbmljX3Zwb3J0X3NkX2dyb3VwKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LCB1OCAqc2RfZ3JvdXApO1xuJiM0MztpbnQgbWx4NV9xdWVyeV9uaWNfdnBvcnRfc2RfZ3JvdXAoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsIHU4ICpzZF9ncm91cCxcbiYjNDM7XHRcdFx0XHQgIHU4ICpzZF9ncm91cF9zaXplKTtcbiBpbnQgbWx4NV9xdWVyeV9uaWNfdnBvcnRfbm9kZV9ndWlkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LFxuIFx0XHRcdFx0ICAgdTE2IHZwb3J0LCBib29sIG90aGVyX3Zwb3J0LCB1NjQgKm5vZGVfZ3VpZCk7XG4gaW50IG1seDVfbW9kaWZ5X25pY192cG9ydF9ub2RlX2d1aWQoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNZWxsYW5veCBtbHg1IGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGEzOTM0NTA5MjJmOTk2ZGFiZDIzNjM3NWZmNzRkNmY5MWY5NDA1ODUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxMCAwOTo0OToyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc2QuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc2QuYwppbmRleCBlZTJmZGVmYTE5NDVmLi40Y2RjNTBjZDZmMDM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3NkLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zZC5jCkBAIC0xOSw3ICYjNDM7MTksNyBAQAogCiBzdHJ1Y3QgbWx4NV9zZCB7CiAJdTMyIGdyb3VwX2lkOwotCXU4IGhvc3RfYnVzZXM7CiYjNDM7CXU4IGdyb3VwX3NpemU7CiAJc3RydWN0IG1seDVfZGV2Y29tX2NvbXBfZGV2ICpkZXZjb207CiAJc3RydWN0IGRlbnRyeSAqZGZzOwogCXU4IHN0YXRlOwpAQCAtNDYsMTQgJiM0Mzs0NiwxNCBAQCBlbnVtIG1seDVfc2Rfc3RhdGUgewogCU1MWDVfU0RfU1RBVEVfVVAsCiB9OwogCi1zdGF0aWMgaW50IG1seDVfc2RfZ2V0X2hvc3RfYnVzZXMoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldikKJiM0MztzdGF0aWMgaW50IG1seDVfc2RfZ2V0X2dyb3VwX3NpemUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgbWx4NV9zZCAqc2QgPSBtbHg1X2dldF9zZChkZXYpOwogCiAJaWYgKCFzZCkKIAkJcmV0dXJuIDE7CiAKLQlyZXR1cm4gc2QtJmd0O2hvc3RfYnVzZXM7CiYjNDM7CXJldHVybiBzZC0mZ3Q7Z3JvdXBfc2l6ZTsKIH0KIAogc3RydWN0IG1seDVfY29yZV9kZXYgKm1seDVfc2RfZ2V0X3ByaW1hcnkoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldikKQEAgLTEwNyw3ICYjNDM7MTA3LDcgQEAgaW50IG1seDVfc2RfcGZfbnVtX2dldChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KQogCQlpZiAocG9zID09IGRldikKIAkJCWJyZWFrOwogCi0JcmV0dXJuIHBmX251bSAqIHNkLSZndDtob3N0X2J1c2VzICYjNDM7IGk7CiYjNDM7CXJldHVybiBwZl9udW0gKiBzZC0mZ3Q7Z3JvdXBfc2l6ZSAmIzQzOyBpOwogfQogCiBzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqCkBAIC0xMTgsNyAmIzQzOzExOCw3IEBAIG1seDVfc2RfcHJpbWFyeV9nZXRfcGVlcihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqcHJpbWFyeSwgaW50IGlkeCkKIAlpZiAoaWR4ID09IDApCiAJCXJldHVybiBwcmltYXJ5OwogCi0JaWYgKGlkeCAmZ3Q7PSBtbHg1X3NkX2dldF9ob3N0X2J1c2VzKHByaW1hcnkpKQomIzQzOwlpZiAoaWR4ICZndDs9IG1seDVfc2RfZ2V0X2dyb3VwX3NpemUocHJpbWFyeSkpCiAJCXJldHVybiBOVUxMOwogCiAJc2QgPSBtbHg1X2dldF9zZChwcmltYXJ5KTsKQEAgLTEzMCw3ICYjNDM7MTMwLDcgQEAgaW50IG1seDVfc2RfY2hfaXhfZ2V0X2Rldl9peChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBpbnQgY2hfaXgpCiAJaWYgKGlzX21kZXZfc3dpdGNoZGV2X21vZGUoZGV2KSkKIAkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gY2hfaXggJSBtbHg1X3NkX2dldF9ob3N0X2J1c2VzKGRldik7CiYjNDM7CXJldHVybiBjaF9peCAlIG1seDVfc2RfZ2V0X2dyb3VwX3NpemUoZGV2KTsKIH0KIAogaW50IG1seDVfc2RfY2hfaXhfZ2V0X3ZlY19peChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBpbnQgY2hfaXgpCkBAIC0xMzgsNyAmIzQzOzEzOCw3IEBAIGludCBtbHg1X3NkX2NoX2l4X2dldF92ZWNfaXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgaW50IGNoX2l4KQogCWlmIChpc19tZGV2X3N3aXRjaGRldl9tb2RlKGRldikpCiAJCXJldHVybiBjaF9peDsKIAotCXJldHVybiBjaF9peCAvIG1seDVfc2RfZ2V0X2hvc3RfYnVzZXMoZGV2KTsKJiM0MzsJcmV0dXJuIGNoX2l4IC8gbWx4NV9zZF9nZXRfZ3JvdXBfc2l6ZShkZXYpOwogfQogCiBzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWx4NV9zZF9jaF9peF9nZXRfZGV2KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpwcmltYXJ5LCBpbnQgY2hfaXgpCkBAIC0xNjQsNyAmIzQzOzE2NCw3IEBAIHN0YXRpYyBib29sIGZ0X2NyZWF0ZV9hbGlhc19zdXBwb3J0ZWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldikKIH0KIAogc3RhdGljIGludCBtbHg1X3F1ZXJ5X3NkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGJvb2wgKnNkbSwKLQkJCSB1OCAqaG9zdF9idXNlcykKJiM0MzsJCQkgdTggKmdyb3VwX3NpemUpCiB7CiAJdTMyIG91dFtNTFg1X1NUX1NaX0RXKG1waXJfcmVnKV07CiAJaW50IGVycjsKQEAgLTE3NCw3ICYjNDM7MTc0LDcgQEAgc3RhdGljIGludCBtbHg1X3F1ZXJ5X3NkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGJvb2wgKnNkbSwKIAkJcmV0dXJuIGVycjsKIAogCSpzZG0gPSBNTFg1X0dFVChtcGlyX3JlZywgb3V0LCBzZG0pOwotCSpob3N0X2J1c2VzID0gTUxYNV9HRVQobXBpcl9yZWcsIG91dCwgaG9zdF9idXNlcyk7CiYjNDM7CSpncm91cF9zaXplID0gTUxYNV9HRVQobXBpcl9yZWcsIG91dCwgaG9zdF9idXNlcyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE4NCwxMCAmIzQzOzE4NCwxMCBAQCBzdGF0aWMgdTMyIG1seDVfc2RfZ3JvdXBfaWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTggc2RfZ3JvdXApCiAJcmV0dXJuICh1MzIpKChNTFg1X0NBUF9HRU4oZGV2LCBuYXRpdmVfcG9ydF9udW0pICZsdDsmbHQ7IDgpIHwgc2RfZ3JvdXApOwogfQogCi1zdGF0aWMgYm9vbCBtbHg1X3NkX2NhcHNfc3VwcG9ydGVkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHU4IGhvc3RfYnVzZXMpCiYjNDM7c3RhdGljIGJvb2wgbWx4NV9zZF9jYXBzX3N1cHBvcnRlZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1OCBncm91cF9zaXplKQogewogCS8qIEhvbm9yIHRoZSBTVyBpbXBsZW1lbnRhdGlvbiBsaW1pdCAqLwotCWlmIChob3N0X2J1c2VzICZndDsgTUxYNV9TRF9NQVhfR1JPVVBfU1opCiYjNDM7CWlmIChncm91cF9zaXplICZndDsgTUxYNV9TRF9NQVhfR1JPVVBfU1opCiAJCXJldHVybiBmYWxzZTsKIAogCS8qIERpc2Nvbm5lY3Qgc2Vjb25kYXJpZXMgZnJvbSB0aGUgbmV0d29yayAqLwpAQCAtMjAwLDcgJiM0MzsyMDAsNyBAQCBzdGF0aWMgYm9vbCBtbHg1X3NkX2NhcHNfc3VwcG9ydGVkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHU4IGhvc3RfYnVzZXMpCiAJLyogUlggc3RlZXJpbmcgZnJvbSBwcmltYXJ5IHRvIHNlY29uZGFyaWVzICovCiAJaWYgKCFNTFg1X0NBUF9HRU4oZGV2LCBjcm9zc192aGNhX3JxdCkpCiAJCXJldHVybiBmYWxzZTsKLQlpZiAoaG9zdF9idXNlcyAmZ3Q7IE1MWDVfQ0FQX0dFTl8yKGRldiwgbWF4X3JxdF92aGNhX2lkKSkKJiM0MzsJaWYgKGdyb3VwX3NpemUgJmd0OyBNTFg1X0NBUF9HRU5fMihkZXYsIG1heF9ycXRfdmhjYV9pZCkpCiAJCXJldHVybiBmYWxzZTsKIAogCS8qIFRYIHN0ZWVyaW5nIGZyb20gc2Vjb25kYXJpZXMgdG8gcHJpbWFyeSAqLwpAQCAtMjE0LDcgJiM0MzsyMTQsNyBAQCBzdGF0aWMgYm9vbCBtbHg1X3NkX2NhcHNfc3VwcG9ydGVkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHU4IGhvc3RfYnVzZXMpCiAKIGJvb2wgbWx4NV9zZF9pc19zdXBwb3J0ZWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldikKIHsKLQl1OCBob3N0X2J1c2VzLCBzZF9ncm91cDsKJiM0MzsJdTggZ3JvdXBfc2l6ZSA9IFU4X01BWCwgc2RfZ3JvdXA7CiAJYm9vbCBzZG07CiAJaW50IGVycjsKIApAQCAtMjIyLDIzICYjNDM7MjIyLDI1IEBAIGJvb2wgbWx4NV9zZF9pc19zdXBwb3J0ZWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldikKIAlpZiAoIW1seDVfY29yZV9pc19wZihkZXYpKQogCQlyZXR1cm4gZmFsc2U7CiAKLQllcnIgPSBtbHg1X3F1ZXJ5X25pY192cG9ydF9zZF9ncm91cChkZXYsICZhbXA7c2RfZ3JvdXApOwotCWlmIChlcnIgfHwgIXNkX2dyb3VwKQomIzQzOwllcnIgPSBtbHg1X3F1ZXJ5X25pY192cG9ydF9zZF9ncm91cChkZXYsICZhbXA7c2RfZ3JvdXAsICZhbXA7Z3JvdXBfc2l6ZSk7CiYjNDM7CWlmIChlcnIgfHwgIXNkX2dyb3VwIHx8IGdyb3VwX3NpemUgJmx0OyBNTFg1X1NEX01JTl9HUk9VUF9TWikKIAkJcmV0dXJuIGZhbHNlOwogCi0JaWYgKCFNTFg1X0NBUF9NQ0FNX1JFRyhkZXYsIG1waXIpKQotCQlyZXR1cm4gZmFsc2U7CiYjNDM7CWlmIChncm91cF9zaXplID09IFU4X01BWCkgewomIzQzOwkJaWYgKCFNTFg1X0NBUF9NQ0FNX1JFRyhkZXYsIG1waXIpKQomIzQzOwkJCXJldHVybiBmYWxzZTsKIAotCWVyciA9IG1seDVfcXVlcnlfc2QoZGV2LCAmYW1wO3NkbSwgJmFtcDtob3N0X2J1c2VzKTsKLQlpZiAoZXJyIHx8ICFzZG0pCi0JCXJldHVybiBmYWxzZTsKJiM0MzsJCWVyciA9IG1seDVfcXVlcnlfc2QoZGV2LCAmYW1wO3NkbSwgJmFtcDtncm91cF9zaXplKTsKJiM0MzsJCWlmIChlcnIgfHwgIXNkbSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KIAotCXJldHVybiBtbHg1X3NkX2NhcHNfc3VwcG9ydGVkKGRldiwgaG9zdF9idXNlcyk7CiYjNDM7CXJldHVybiBtbHg1X3NkX2NhcHNfc3VwcG9ydGVkKGRldiwgZ3JvdXBfc2l6ZSk7CiB9CiAKIHN0YXRpYyBpbnQgc2RfaW5pdChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KQogewotCXU4IGhvc3RfYnVzZXMsIHNkX2dyb3VwOwomIzQzOwl1OCBncm91cF9zaXplID0gVThfTUFYLCBzZF9ncm91cDsKIAlzdHJ1Y3QgbWx4NV9zZCAqc2Q7CiAJdTMyIGdyb3VwX2lkOwogCWJvb2wgc2RtOwpAQCAtMjQ4LDI2ICYjNDM7MjUwLDI3IEBAIHN0YXRpYyBpbnQgc2RfaW5pdChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KQogCWlmICghbWx4NV9jb3JlX2lzX3BmKGRldikpCiAJCXJldHVybiAwOwogCi0JZXJyID0gbWx4NV9xdWVyeV9uaWNfdnBvcnRfc2RfZ3JvdXAoZGV2LCAmYW1wO3NkX2dyb3VwKTsKJiM0MzsJZXJyID0gbWx4NV9xdWVyeV9uaWNfdnBvcnRfc2RfZ3JvdXAoZGV2LCAmYW1wO3NkX2dyb3VwLCAmYW1wO2dyb3VwX3NpemUpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlpZiAoIXNkX2dyb3VwKQomIzQzOwlpZiAoIXNkX2dyb3VwIHx8IGdyb3VwX3NpemUgJmx0OyBNTFg1X1NEX01JTl9HUk9VUF9TWikKIAkJcmV0dXJuIDA7CiAKLQlpZiAoIU1MWDVfQ0FQX01DQU1fUkVHKGRldiwgbXBpcikpCi0JCXJldHVybiAwOwomIzQzOwlpZiAoZ3JvdXBfc2l6ZSA9PSBVOF9NQVgpIHsKJiM0MzsJCWlmICghTUxYNV9DQVBfTUNBTV9SRUcoZGV2LCBtcGlyKSkKJiM0MzsJCQlyZXR1cm4gMDsKIAotCWVyciA9IG1seDVfcXVlcnlfc2QoZGV2LCAmYW1wO3NkbSwgJmFtcDtob3N0X2J1c2VzKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JaWYgKCFzZG0pCi0JCXJldHVybiAwOwomIzQzOwkJZXJyID0gbWx4NV9xdWVyeV9zZChkZXYsICZhbXA7c2RtLCAmYW1wO2dyb3VwX3NpemUpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwogCiYjNDM7CQlpZiAoIXNkbSkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJfQogCWdyb3VwX2lkID0gbWx4NV9zZF9ncm91cF9pZChkZXYsIHNkX2dyb3VwKTsKIAotCWlmICghbWx4NV9zZF9jYXBzX3N1cHBvcnRlZChkZXYsIGhvc3RfYnVzZXMpKSB7CiYjNDM7CWlmICghbWx4NV9zZF9jYXBzX3N1cHBvcnRlZChkZXYsIGdyb3VwX3NpemUpKSB7CiAJCXNkX3dhcm4oZGV2LCAmIzM0O2NhbiYjMzk7dCBzdXBwb3J0IHJlcXVlc3RlZCBuZXRkZXYgY29tYmluaW5nIGZvciBncm91cCBpZCAweCV4LCBza2lwcGluZ1xuJiMzNDssCiAJCQlncm91cF9pZCk7CiAJCXJldHVybiAwOwpAQCAtMjc3LDcgJiM0MzsyODAsNyBAQCBzdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldikKIAlpZiAoIXNkKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXNkLSZndDtob3N0X2J1c2VzID0gaG9zdF9idXNlczsKJiM0MzsJc2QtJmd0O2dyb3VwX3NpemUgPSBncm91cF9zaXplOwogCXNkLSZndDtncm91cF9pZCA9IGdyb3VwX2lkOwogCiAJbWx4NV9zZXRfc2QoZGV2LCBzZCk7CkBAIC01NDAsNyAmIzQzOzU0Myw3IEBAIHN0YXRpYyBpbnQgc2RfcmVnaXN0ZXIoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldikKIAlzZC0mZ3Q7ZGV2Y29tID0gZGV2Y29tOwogCiAJbWx4NV9kZXZjb21fY29tcF9sb2NrKGRldmNvbSk7Ci0JaWYgKG1seDVfZGV2Y29tX2NvbXBfZ2V0X3NpemUoZGV2Y29tKSAhPSBzZC0mZ3Q7aG9zdF9idXNlcyB8fAomIzQzOwlpZiAobWx4NV9kZXZjb21fY29tcF9nZXRfc2l6ZShkZXZjb20pICE9IHNkLSZndDtncm91cF9zaXplIHx8CiAJICAgIG1seDVfZGV2Y29tX2NvbXBfaXNfcmVhZHkoZGV2Y29tKSkKIAkJZ290byBvdXQ7CiAKQEAgLTU3Niw3ICYjNDM7NTc5LDcgQEAgc3RhdGljIGludCBzZF9yZWdpc3RlcihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KQogCQkJCSAgICAgIERFVkNPTV9DQU5UX0ZBSUwsIHByaW1hcnkpOwogCiAJcHJpbWFyeV9zZCA9IG1seDVfZ2V0X3NkKHByaW1hcnkpOwotCWlmIChwcmltYXJ5X3NkLSZndDtuZXh0X3NlY29uZGFyeV9pZHggJiM0MzsgMSA9PSBzZC0mZ3Q7aG9zdF9idXNlcykKJiM0MzsJaWYgKHByaW1hcnlfc2QtJmd0O25leHRfc2Vjb25kYXJ5X2lkeCAmIzQzOyAxID09IHNkLSZndDtncm91cF9zaXplKQogCQltbHg1X2RldmNvbV9jb21wX3NldF9yZWFkeShkZXZjb20sIHRydWUpOwogb3V0OgogCW1seDVfZGV2Y29tX2NvbXBfdW5sb2NrKGRldmNvbSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3NkLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3NkLmgKaW5kZXggY2I4OGJmMzQwNzlhZC4uYmM4ZGJjMjk5MDcwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc2QuaApAQCAtNiw2ICYjNDM7Niw3IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwogCiYjNDM7I2RlZmluZSBNTFg1X1NEX01JTl9HUk9VUF9TWiAyCiAjZGVmaW5lIE1MWDVfU0RfTUFYX0dST1VQX1NaIDIKIAogc3RydWN0IG1seDVfc2Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvdnBvcnQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS92cG9ydC5jCmluZGV4IDM2NzZlMjZhYzZiMDkuLjNkODY1MTBhZjYxNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS92cG9ydC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS92cG9ydC5jCkBAIC01NTAsNyAmIzQzOzU1MCw4IEBAIGludCBtbHg1X3F1ZXJ5X25pY192cG9ydF9zeXN0ZW1faW1hZ2VfZ3VpZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiwKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG1seDVfcXVlcnlfbmljX3Zwb3J0X3N5c3RlbV9pbWFnZV9ndWlkKTsKIAotaW50IG1seDVfcXVlcnlfbmljX3Zwb3J0X3NkX2dyb3VwKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LCB1OCAqc2RfZ3JvdXApCiYjNDM7aW50IG1seDVfcXVlcnlfbmljX3Zwb3J0X3NkX2dyb3VwKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LCB1OCAqc2RfZ3JvdXAsCiYjNDM7CQkJCSAgdTggKnNkX2dyb3VwX3NpemUpCiB7CiAJaW50IG91dGxlbiA9IE1MWDVfU1RfU1pfQllURVMocXVlcnlfbmljX3Zwb3J0X2NvbnRleHRfb3V0KTsKIAl1MzIgKm91dDsKQEAgLTU2Niw2ICYjNDM7NTY3LDkgQEAgaW50IG1seDVfcXVlcnlfbmljX3Zwb3J0X3NkX2dyb3VwKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LCB1OCAqc2RfZ3JvdXApCiAKIAkqc2RfZ3JvdXAgPSBNTFg1X0dFVChxdWVyeV9uaWNfdnBvcnRfY29udGV4dF9vdXQsIG91dCwKIAkJCSAgICAgbmljX3Zwb3J0X2NvbnRleHQuc2RfZ3JvdXApOwomIzQzOwlpZiAoTUxYNV9DQVBfR0VOKG1kZXYsIHNkX2dyb3VwX3NpemUpKQomIzQzOwkJKnNkX2dyb3VwX3NpemUgPSBNTFg1X0dFVChxdWVyeV9uaWNfdnBvcnRfY29udGV4dF9vdXQsIG91dCwKJiM0MzsJCQkJCSAgbmljX3Zwb3J0X2NvbnRleHQuc2RfZ3JvdXBfc2l6ZSk7CiBvdXQ6CiAJa3ZmcmVlKG91dCk7CiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWx4NS92cG9ydC5oIGIvaW5jbHVkZS9saW51eC9tbHg1L3Zwb3J0LmgKaW5kZXggZWUzNGQzZWQzMzVmMy4uNTc3MTY4YTRjYTBjOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbHg1L3Zwb3J0LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbHg1L3Zwb3J0LmgKQEAgLTc4LDcgJiM0Mzs3OCw4IEBAIGludCBtbHg1X3F1ZXJ5X25pY192cG9ydF9tdHUoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsIHUxNiAqbXR1KTsKIGludCBtbHg1X21vZGlmeV9uaWNfdnBvcnRfbXR1KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LCB1MTYgbXR1KTsKIGludCBtbHg1X3F1ZXJ5X25pY192cG9ydF9zeXN0ZW1faW1hZ2VfZ3VpZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiwKIAkJCQkJICAgdTY0ICpzeXN0ZW1faW1hZ2VfZ3VpZCk7Ci1pbnQgbWx4NV9xdWVyeV9uaWNfdnBvcnRfc2RfZ3JvdXAoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsIHU4ICpzZF9ncm91cCk7CiYjNDM7aW50IG1seDVfcXVlcnlfbmljX3Zwb3J0X3NkX2dyb3VwKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LCB1OCAqc2RfZ3JvdXAsCiYjNDM7CQkJCSAgdTggKnNkX2dyb3VwX3NpemUpOwogaW50IG1seDVfcXVlcnlfbmljX3Zwb3J0X25vZGVfZ3VpZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiwKIAkJCQkgICB1MTYgdnBvcnQsIGJvb2wgb3RoZXJfdnBvcnQsIHU2NCAqbm9kZV9ndWlkKTsKIGludCBtbHg1X21vZGlmeV9uaWNfdnBvcnRfbm9kZV9ndWlkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTMxCgkJCQkJCQlvdXRwdXQ6IDYxCgkJCQkJCQl0aG91Z2h0czogNDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBEZWNpc2lvbiBmb3IgTWVsbGFub3ggbWx4NSBEcml2ZXIgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSBpbXBhY3RpbmcgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc2QuY2AsIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvdnBvcnQuY2AsIGFuZCBgaW5jbHVkZS9saW51eC9tbHg1L3Zwb3J0LmhgLiBUaGlzIGlzIGNsZWFybHkgdGFyZ2V0aW5nIHRoZSBNZWxsYW5veCBtbHg1IGRyaXZlciwgd2hpY2ggSSBrbm93IGlzIHVzZWQgZm9yIENvbm5lY3RYLTQsIC01LCAtNiwgYW5kIC03IFBDSWUgbmV0d29yayBjYXJkcy4gVGhlc2UgYXJlIGhpZ2gtcGVyZm9ybWFuY2UgU21hcnROSUNzLiBUaGUgaW5zdHJ1Y3Rpb25zIGV4cGxpY2l0bHkgc2F5IHRvIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggY29uY2VybnMgdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgdGhhdCBuZWVkIHBoeXNpY2FsIGhhcmR3YXJlLCB3aGljaCBpc24mIzM5O3QgZW11bGF0ZWQgYnkgUUVNVS4KCk5vdywgdGhlIHF1ZXN0aW9uIGlzLCBkb2VzIFFFTVUgZW11bGF0ZSBtbHg1PyBObywgaXQgZG9lc24mIzM5O3QuIFFFTVUgdXNlcyBkcml2ZXJzIGxpa2UgZTEwMDAsIHZpcnRpby1uZXQsIGFuZCB2bXhuZXQzLCBidXQgbm90IG1seDUuIFNvLCBtbHg1IGFic29sdXRlbHkgbmVlZHMgdGhlIHBoeXNpY2FsIE1lbGxhbm94IGhhcmR3YXJlLiBUaGlzIG1lYW5zLCBJJiMzOTttIG5vdCBnb2luZyB0byBiZSBhYmxlIHRvIHJlYWNoIHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciB1c2luZyBzdGFuZGFyZCBRRU1VLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCYjMzk7cyByZXZpc2l0IHRoZSBmaWxlcyBpbXBhY3RlZDogYGRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc2QuY2AuIFllYWgsIHRoaXMgaXMgY29yZSBtbHg1IGRyaXZlciBjb2RlLCBubyBkb3VidCBhYm91dCBpdC4KClRoZXJlZm9yZSwgbXkgZGVjaXNpb24gaXMgKipgV29ydGhGdXp6aW5nPWZhbHNlYCoqIGFuZCB0aGUgcmVhc29uaW5nIEkmIzM5O20gdXNpbmcgaXMgJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1lbGxhbm94IG1seDUgZHJpdmVyLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMuJiMzNDsKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNZWxsYW5veCBtbHg1IGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1lbGxhbm94IG1seDUgZHJpdmVyLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0OToyNy4xMTAzNjg5OTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE2NTYwMzIyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNZWxsYW5veCBtbHg1IGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDk6MjcuMTEwMzc2Mjc0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTczOTEzNjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTM5MzQ1MDkyMmY5OTZkYWJkMjM2Mzc1ZmY3NGQ2ZjkxZjk0MDU4NVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAxMCAwOTo0OToyNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3NkLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3NkLmNcXG5pbmRleCBlZTJmZGVmYTE5NDVmLi40Y2RjNTBjZDZmMDM4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc2QuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc2QuY1xcbkBAIC0xOSw3ICsxOSw3IEBAXFxuIFxcbiBzdHJ1Y3QgbWx4NV9zZCB7XFxuIFxcdHUzMiBncm91cF9pZDtcXG4tXFx0dTggaG9zdF9idXNlcztcXG4rXFx0dTggZ3JvdXBfc2l6ZTtcXG4gXFx0c3RydWN0IG1seDVfZGV2Y29tX2NvbXBfZGV2ICpkZXZjb207XFxuIFxcdHN0cnVjdCBkZW50cnkgKmRmcztcXG4gXFx0dTggc3RhdGU7XFxuQEAgLTQ2LDE0ICs0NiwxNCBAQCBlbnVtIG1seDVfc2Rfc3RhdGUge1xcbiBcXHRNTFg1X1NEX1NUQVRFX1VQLFxcbiB9O1xcbiBcXG4tc3RhdGljIGludCBtbHg1X3NkX2dldF9ob3N0X2J1c2VzKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXFxuK3N0YXRpYyBpbnQgbWx4NV9zZF9nZXRfZ3JvdXBfc2l6ZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBtbHg1X3NkICpzZCA9IG1seDVfZ2V0X3NkKGRldik7XFxuIFxcbiBcXHRpZiAoIXNkKVxcbiBcXHRcXHRyZXR1cm4gMTtcXG4gXFxuLVxcdHJldHVybiBzZC1cXHUwMDNlaG9zdF9idXNlcztcXG4rXFx0cmV0dXJuIHNkLVxcdTAwM2Vncm91cF9zaXplO1xcbiB9XFxuIFxcbiBzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWx4NV9zZF9nZXRfcHJpbWFyeShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbkBAIC0xMDcsNyArMTA3LDcgQEAgaW50IG1seDVfc2RfcGZfbnVtX2dldChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbiBcXHRcXHRpZiAocG9zID09IGRldilcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbi1cXHRyZXR1cm4gcGZfbnVtICogc2QtXFx1MDAzZWhvc3RfYnVzZXMgKyBpO1xcbitcXHRyZXR1cm4gcGZfbnVtICogc2QtXFx1MDAzZWdyb3VwX3NpemUgKyBpO1xcbiB9XFxuIFxcbiBzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqXFxuQEAgLTExOCw3ICsxMTgsNyBAQCBtbHg1X3NkX3ByaW1hcnlfZ2V0X3BlZXIoc3RydWN0IG1seDVfY29yZV9kZXYgKnByaW1hcnksIGludCBpZHgpXFxuIFxcdGlmIChpZHggPT0gMClcXG4gXFx0XFx0cmV0dXJuIHByaW1hcnk7XFxuIFxcbi1cXHRpZiAoaWR4IFxcdTAwM2U9IG1seDVfc2RfZ2V0X2hvc3RfYnVzZXMocHJpbWFyeSkpXFxuK1xcdGlmIChpZHggXFx1MDAzZT0gbWx4NV9zZF9nZXRfZ3JvdXBfc2l6ZShwcmltYXJ5KSlcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbiBcXHRzZCA9IG1seDVfZ2V0X3NkKHByaW1hcnkpO1xcbkBAIC0xMzAsNyArMTMwLDcgQEAgaW50IG1seDVfc2RfY2hfaXhfZ2V0X2Rldl9peChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBpbnQgY2hfaXgpXFxuIFxcdGlmIChpc19tZGV2X3N3aXRjaGRldl9tb2RlKGRldikpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0cmV0dXJuIGNoX2l4ICUgbWx4NV9zZF9nZXRfaG9zdF9idXNlcyhkZXYpO1xcbitcXHRyZXR1cm4gY2hfaXggJSBtbHg1X3NkX2dldF9ncm91cF9zaXplKGRldik7XFxuIH1cXG4gXFxuIGludCBtbHg1X3NkX2NoX2l4X2dldF92ZWNfaXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgaW50IGNoX2l4KVxcbkBAIC0xMzgsNyArMTM4LDcgQEAgaW50IG1seDVfc2RfY2hfaXhfZ2V0X3ZlY19peChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBpbnQgY2hfaXgpXFxuIFxcdGlmIChpc19tZGV2X3N3aXRjaGRldl9tb2RlKGRldikpXFxuIFxcdFxcdHJldHVybiBjaF9peDtcXG4gXFxuLVxcdHJldHVybiBjaF9peCAvIG1seDVfc2RfZ2V0X2hvc3RfYnVzZXMoZGV2KTtcXG4rXFx0cmV0dXJuIGNoX2l4IC8gbWx4NV9zZF9nZXRfZ3JvdXBfc2l6ZShkZXYpO1xcbiB9XFxuIFxcbiBzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWx4NV9zZF9jaF9peF9nZXRfZGV2KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpwcmltYXJ5LCBpbnQgY2hfaXgpXFxuQEAgLTE2NCw3ICsxNjQsNyBAQCBzdGF0aWMgYm9vbCBmdF9jcmVhdGVfYWxpYXNfc3VwcG9ydGVkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgbWx4NV9xdWVyeV9zZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBib29sICpzZG0sXFxuLVxcdFxcdFxcdCB1OCAqaG9zdF9idXNlcylcXG4rXFx0XFx0XFx0IHU4ICpncm91cF9zaXplKVxcbiB7XFxuIFxcdHUzMiBvdXRbTUxYNV9TVF9TWl9EVyhtcGlyX3JlZyldO1xcbiBcXHRpbnQgZXJyO1xcbkBAIC0xNzQsNyArMTc0LDcgQEAgc3RhdGljIGludCBtbHg1X3F1ZXJ5X3NkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGJvb2wgKnNkbSxcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuIFxcdCpzZG0gPSBNTFg1X0dFVChtcGlyX3JlZywgb3V0LCBzZG0pO1xcbi1cXHQqaG9zdF9idXNlcyA9IE1MWDVfR0VUKG1waXJfcmVnLCBvdXQsIGhvc3RfYnVzZXMpO1xcbitcXHQqZ3JvdXBfc2l6ZSA9IE1MWDVfR0VUKG1waXJfcmVnLCBvdXQsIGhvc3RfYnVzZXMpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMTg0LDEwICsxODQsMTAgQEAgc3RhdGljIHUzMiBtbHg1X3NkX2dyb3VwX2lkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHU4IHNkX2dyb3VwKVxcbiBcXHRyZXR1cm4gKHUzMikoKE1MWDVfQ0FQX0dFTihkZXYsIG5hdGl2ZV9wb3J0X251bSkgXFx1MDAzY1xcdTAwM2MgOCkgfCBzZF9ncm91cCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sIG1seDVfc2RfY2Fwc19zdXBwb3J0ZWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTggaG9zdF9idXNlcylcXG4rc3RhdGljIGJvb2wgbWx4NV9zZF9jYXBzX3N1cHBvcnRlZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1OCBncm91cF9zaXplKVxcbiB7XFxuIFxcdC8qIEhvbm9yIHRoZSBTVyBpbXBsZW1lbnRhdGlvbiBsaW1pdCAqL1xcbi1cXHRpZiAoaG9zdF9idXNlcyBcXHUwMDNlIE1MWDVfU0RfTUFYX0dST1VQX1NaKVxcbitcXHRpZiAoZ3JvdXBfc2l6ZSBcXHUwMDNlIE1MWDVfU0RfTUFYX0dST1VQX1NaKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHQvKiBEaXNjb25uZWN0IHNlY29uZGFyaWVzIGZyb20gdGhlIG5ldHdvcmsgKi9cXG5AQCAtMjAwLDcgKzIwMCw3IEBAIHN0YXRpYyBib29sIG1seDVfc2RfY2Fwc19zdXBwb3J0ZWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTggaG9zdF9idXNlcylcXG4gXFx0LyogUlggc3RlZXJpbmcgZnJvbSBwcmltYXJ5IHRvIHNlY29uZGFyaWVzICovXFxuIFxcdGlmICghTUxYNV9DQVBfR0VOKGRldiwgY3Jvc3NfdmhjYV9ycXQpKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLVxcdGlmIChob3N0X2J1c2VzIFxcdTAwM2UgTUxYNV9DQVBfR0VOXzIoZGV2LCBtYXhfcnF0X3ZoY2FfaWQpKVxcbitcXHRpZiAoZ3JvdXBfc2l6ZSBcXHUwMDNlIE1MWDVfQ0FQX0dFTl8yKGRldiwgbWF4X3JxdF92aGNhX2lkKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gXFx0LyogVFggc3RlZXJpbmcgZnJvbSBzZWNvbmRhcmllcyB0byBwcmltYXJ5ICovXFxuQEAgLTIxNCw3ICsyMTQsNyBAQCBzdGF0aWMgYm9vbCBtbHg1X3NkX2NhcHNfc3VwcG9ydGVkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHU4IGhvc3RfYnVzZXMpXFxuIFxcbiBib29sIG1seDVfc2RfaXNfc3VwcG9ydGVkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXFxuIHtcXG4tXFx0dTggaG9zdF9idXNlcywgc2RfZ3JvdXA7XFxuK1xcdHU4IGdyb3VwX3NpemUgPSBVOF9NQVgsIHNkX2dyb3VwO1xcbiBcXHRib29sIHNkbTtcXG4gXFx0aW50IGVycjtcXG4gXFxuQEAgLTIyMiwyMyArMjIyLDI1IEBAIGJvb2wgbWx4NV9zZF9pc19zdXBwb3J0ZWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcXG4gXFx0aWYgKCFtbHg1X2NvcmVfaXNfcGYoZGV2KSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4tXFx0ZXJyID0gbWx4NV9xdWVyeV9uaWNfdnBvcnRfc2RfZ3JvdXAoZGV2LCBcXHUwMDI2c2RfZ3JvdXApO1xcbi1cXHRpZiAoZXJyIHx8ICFzZF9ncm91cClcXG4rXFx0ZXJyID0gbWx4NV9xdWVyeV9uaWNfdnBvcnRfc2RfZ3JvdXAoZGV2LCBcXHUwMDI2c2RfZ3JvdXAsIFxcdTAwMjZncm91cF9zaXplKTtcXG4rXFx0aWYgKGVyciB8fCAhc2RfZ3JvdXAgfHwgZ3JvdXBfc2l6ZSBcXHUwMDNjIE1MWDVfU0RfTUlOX0dST1VQX1NaKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRpZiAoIU1MWDVfQ0FQX01DQU1fUkVHKGRldiwgbXBpcikpXFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0aWYgKGdyb3VwX3NpemUgPT0gVThfTUFYKSB7XFxuK1xcdFxcdGlmICghTUxYNV9DQVBfTUNBTV9SRUcoZGV2LCBtcGlyKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4tXFx0ZXJyID0gbWx4NV9xdWVyeV9zZChkZXYsIFxcdTAwMjZzZG0sIFxcdTAwMjZob3N0X2J1c2VzKTtcXG4tXFx0aWYgKGVyciB8fCAhc2RtKVxcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdGVyciA9IG1seDVfcXVlcnlfc2QoZGV2LCBcXHUwMDI2c2RtLCBcXHUwMDI2Z3JvdXBfc2l6ZSk7XFxuK1xcdFxcdGlmIChlcnIgfHwgIXNkbSlcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuIFxcbi1cXHRyZXR1cm4gbWx4NV9zZF9jYXBzX3N1cHBvcnRlZChkZXYsIGhvc3RfYnVzZXMpO1xcbitcXHRyZXR1cm4gbWx4NV9zZF9jYXBzX3N1cHBvcnRlZChkZXYsIGdyb3VwX3NpemUpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcXG4ge1xcbi1cXHR1OCBob3N0X2J1c2VzLCBzZF9ncm91cDtcXG4rXFx0dTggZ3JvdXBfc2l6ZSA9IFU4X01BWCwgc2RfZ3JvdXA7XFxuIFxcdHN0cnVjdCBtbHg1X3NkICpzZDtcXG4gXFx0dTMyIGdyb3VwX2lkO1xcbiBcXHRib29sIHNkbTtcXG5AQCAtMjQ4LDI2ICsyNTAsMjcgQEAgc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXFxuIFxcdGlmICghbWx4NV9jb3JlX2lzX3BmKGRldikpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0ZXJyID0gbWx4NV9xdWVyeV9uaWNfdnBvcnRfc2RfZ3JvdXAoZGV2LCBcXHUwMDI2c2RfZ3JvdXApO1xcbitcXHRlcnIgPSBtbHg1X3F1ZXJ5X25pY192cG9ydF9zZF9ncm91cChkZXYsIFxcdTAwMjZzZF9ncm91cCwgXFx1MDAyNmdyb3VwX3NpemUpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4tXFx0aWYgKCFzZF9ncm91cClcXG4rXFx0aWYgKCFzZF9ncm91cCB8fCBncm91cF9zaXplIFxcdTAwM2MgTUxYNV9TRF9NSU5fR1JPVVBfU1opXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0aWYgKCFNTFg1X0NBUF9NQ0FNX1JFRyhkZXYsIG1waXIpKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0aWYgKGdyb3VwX3NpemUgPT0gVThfTUFYKSB7XFxuK1xcdFxcdGlmICghTUxYNV9DQVBfTUNBTV9SRUcoZGV2LCBtcGlyKSlcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHRlcnIgPSBtbHg1X3F1ZXJ5X3NkKGRldiwgXFx1MDAyNnNkbSwgXFx1MDAyNmhvc3RfYnVzZXMpO1xcbi1cXHRpZiAoZXJyKVxcbi1cXHRcXHRyZXR1cm4gZXJyO1xcbi1cXG4tXFx0aWYgKCFzZG0pXFxuLVxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRlcnIgPSBtbHg1X3F1ZXJ5X3NkKGRldiwgXFx1MDAyNnNkbSwgXFx1MDAyNmdyb3VwX3NpemUpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4rXFx0XFx0aWYgKCFzZG0pXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuIFxcdGdyb3VwX2lkID0gbWx4NV9zZF9ncm91cF9pZChkZXYsIHNkX2dyb3VwKTtcXG4gXFxuLVxcdGlmICghbWx4NV9zZF9jYXBzX3N1cHBvcnRlZChkZXYsIGhvc3RfYnVzZXMpKSB7XFxuK1xcdGlmICghbWx4NV9zZF9jYXBzX3N1cHBvcnRlZChkZXYsIGdyb3VwX3NpemUpKSB7XFxuIFxcdFxcdHNkX3dhcm4oZGV2LCBcXFwiY2FuJ3Qgc3VwcG9ydCByZXF1ZXN0ZWQgbmV0ZGV2IGNvbWJpbmluZyBmb3IgZ3JvdXAgaWQgMHgleCwgc2tpcHBpbmdcXFxcblxcXCIsXFxuIFxcdFxcdFxcdGdyb3VwX2lkKTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuQEAgLTI3Nyw3ICsyODAsNyBAQCBzdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcXG4gXFx0aWYgKCFzZClcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbi1cXHRzZC1cXHUwMDNlaG9zdF9idXNlcyA9IGhvc3RfYnVzZXM7XFxuK1xcdHNkLVxcdTAwM2Vncm91cF9zaXplID0gZ3JvdXBfc2l6ZTtcXG4gXFx0c2QtXFx1MDAzZWdyb3VwX2lkID0gZ3JvdXBfaWQ7XFxuIFxcbiBcXHRtbHg1X3NldF9zZChkZXYsIHNkKTtcXG5AQCAtNTQwLDcgKzU0Myw3IEBAIHN0YXRpYyBpbnQgc2RfcmVnaXN0ZXIoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcXG4gXFx0c2QtXFx1MDAzZWRldmNvbSA9IGRldmNvbTtcXG4gXFxuIFxcdG1seDVfZGV2Y29tX2NvbXBfbG9jayhkZXZjb20pO1xcbi1cXHRpZiAobWx4NV9kZXZjb21fY29tcF9nZXRfc2l6ZShkZXZjb20pICE9IHNkLVxcdTAwM2Vob3N0X2J1c2VzIHx8XFxuK1xcdGlmIChtbHg1X2RldmNvbV9jb21wX2dldF9zaXplKGRldmNvbSkgIT0gc2QtXFx1MDAzZWdyb3VwX3NpemUgfHxcXG4gXFx0ICAgIG1seDVfZGV2Y29tX2NvbXBfaXNfcmVhZHkoZGV2Y29tKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbkBAIC01NzYsNyArNTc5LDcgQEAgc3RhdGljIGludCBzZF9yZWdpc3RlcihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbiBcXHRcXHRcXHRcXHQgICAgICBERVZDT01fQ0FOVF9GQUlMLCBwcmltYXJ5KTtcXG4gXFxuIFxcdHByaW1hcnlfc2QgPSBtbHg1X2dldF9zZChwcmltYXJ5KTtcXG4tXFx0aWYgKHByaW1hcnlfc2QtXFx1MDAzZW5leHRfc2Vjb25kYXJ5X2lkeCArIDEgPT0gc2QtXFx1MDAzZWhvc3RfYnVzZXMpXFxuK1xcdGlmIChwcmltYXJ5X3NkLVxcdTAwM2VuZXh0X3NlY29uZGFyeV9pZHggKyAxID09IHNkLVxcdTAwM2Vncm91cF9zaXplKVxcbiBcXHRcXHRtbHg1X2RldmNvbV9jb21wX3NldF9yZWFkeShkZXZjb20sIHRydWUpO1xcbiBvdXQ6XFxuIFxcdG1seDVfZGV2Y29tX2NvbXBfdW5sb2NrKGRldmNvbSk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc2QuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc2QuaFxcbmluZGV4IGNiODhiZjM0MDc5YWQuLmJjOGRiYzI5OTA3MDQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zZC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zZC5oXFxuQEAgLTYsNiArNiw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4gXFxuKyNkZWZpbmUgTUxYNV9TRF9NSU5fR1JPVVBfU1ogMlxcbiAjZGVmaW5lIE1MWDVfU0RfTUFYX0dST1VQX1NaIDJcXG4gXFxuIHN0cnVjdCBtbHg1X3NkO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvdnBvcnQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS92cG9ydC5jXFxuaW5kZXggMzY3NmUyNmFjNmIwOS4uM2Q4NjUxMGFmNjE1MyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvdnBvcnQuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS92cG9ydC5jXFxuQEAgLTU1MCw3ICs1NTAsOCBAQCBpbnQgbWx4NV9xdWVyeV9uaWNfdnBvcnRfc3lzdGVtX2ltYWdlX2d1aWQoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwobWx4NV9xdWVyeV9uaWNfdnBvcnRfc3lzdGVtX2ltYWdlX2d1aWQpO1xcbiBcXG4taW50IG1seDVfcXVlcnlfbmljX3Zwb3J0X3NkX2dyb3VwKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LCB1OCAqc2RfZ3JvdXApXFxuK2ludCBtbHg1X3F1ZXJ5X25pY192cG9ydF9zZF9ncm91cChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiwgdTggKnNkX2dyb3VwLFxcbitcXHRcXHRcXHRcXHQgIHU4ICpzZF9ncm91cF9zaXplKVxcbiB7XFxuIFxcdGludCBvdXRsZW4gPSBNTFg1X1NUX1NaX0JZVEVTKHF1ZXJ5X25pY192cG9ydF9jb250ZXh0X291dCk7XFxuIFxcdHUzMiAqb3V0O1xcbkBAIC01NjYsNiArNTY3LDkgQEAgaW50IG1seDVfcXVlcnlfbmljX3Zwb3J0X3NkX2dyb3VwKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LCB1OCAqc2RfZ3JvdXApXFxuIFxcbiBcXHQqc2RfZ3JvdXAgPSBNTFg1X0dFVChxdWVyeV9uaWNfdnBvcnRfY29udGV4dF9vdXQsIG91dCxcXG4gXFx0XFx0XFx0ICAgICBuaWNfdnBvcnRfY29udGV4dC5zZF9ncm91cCk7XFxuK1xcdGlmIChNTFg1X0NBUF9HRU4obWRldiwgc2RfZ3JvdXBfc2l6ZSkpXFxuK1xcdFxcdCpzZF9ncm91cF9zaXplID0gTUxYNV9HRVQocXVlcnlfbmljX3Zwb3J0X2NvbnRleHRfb3V0LCBvdXQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgbmljX3Zwb3J0X2NvbnRleHQuc2RfZ3JvdXBfc2l6ZSk7XFxuIG91dDpcXG4gXFx0a3ZmcmVlKG91dCk7XFxuIFxcdHJldHVybiBlcnI7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWx4NS92cG9ydC5oIGIvaW5jbHVkZS9saW51eC9tbHg1L3Zwb3J0LmhcXG5pbmRleCBlZTM0ZDNlZDMzNWYzLi41NzcxNjhhNGNhMGM4IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbWx4NS92cG9ydC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbHg1L3Zwb3J0LmhcXG5AQCAtNzgsNyArNzgsOCBAQCBpbnQgbWx4NV9xdWVyeV9uaWNfdnBvcnRfbXR1KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LCB1MTYgKm10dSk7XFxuIGludCBtbHg1X21vZGlmeV9uaWNfdnBvcnRfbXR1KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LCB1MTYgbXR1KTtcXG4gaW50IG1seDVfcXVlcnlfbmljX3Zwb3J0X3N5c3RlbV9pbWFnZV9ndWlkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHQgICB1NjQgKnN5c3RlbV9pbWFnZV9ndWlkKTtcXG4taW50IG1seDVfcXVlcnlfbmljX3Zwb3J0X3NkX2dyb3VwKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LCB1OCAqc2RfZ3JvdXApO1xcbitpbnQgbWx4NV9xdWVyeV9uaWNfdnBvcnRfc2RfZ3JvdXAoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsIHU4ICpzZF9ncm91cCxcXG4rXFx0XFx0XFx0XFx0ICB1OCAqc2RfZ3JvdXBfc2l6ZSk7XFxuIGludCBtbHg1X3F1ZXJ5X25pY192cG9ydF9ub2RlX2d1aWQoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsXFxuIFxcdFxcdFxcdFxcdCAgIHUxNiB2cG9ydCwgYm9vbCBvdGhlcl92cG9ydCwgdTY0ICpub2RlX2d1aWQpO1xcbiBpbnQgbWx4NV9tb2RpZnlfbmljX3Zwb3J0X25vZGVfZ3VpZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDk6MjguNjg3NDgwMjY0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODU4ODQ3MzkxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1lbGxhbm94IG1seDUgZHJpdmVyLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhMzkzNDUwOTIyZjk5NmRhYmQyMzYzNzVmZjc0ZDZmOTFmOTQwNTg1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMDk6NDk6MjUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3NkLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3NkLmNcbmluZGV4IGVlMmZkZWZhMTk0NWYuLjRjZGM1MGNkNmYwMzggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3NkLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc2QuY1xuQEAgLTE5LDcgKzE5LDcgQEBcbiBcbiBzdHJ1Y3QgbWx4NV9zZCB7XG4gXHR1MzIgZ3JvdXBfaWQ7XG4tXHR1OCBob3N0X2J1c2VzO1xuK1x0dTggZ3JvdXBfc2l6ZTtcbiBcdHN0cnVjdCBtbHg1X2RldmNvbV9jb21wX2RldiAqZGV2Y29tO1xuIFx0c3RydWN0IGRlbnRyeSAqZGZzO1xuIFx0dTggc3RhdGU7XG5AQCAtNDYsMTQgKzQ2LDE0IEBAIGVudW0gbWx4NV9zZF9zdGF0ZSB7XG4gXHRNTFg1X1NEX1NUQVRFX1VQLFxuIH07XG4gXG4tc3RhdGljIGludCBtbHg1X3NkX2dldF9ob3N0X2J1c2VzKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG4rc3RhdGljIGludCBtbHg1X3NkX2dldF9ncm91cF9zaXplKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG4ge1xuIFx0c3RydWN0IG1seDVfc2QgKnNkID0gbWx4NV9nZXRfc2QoZGV2KTtcbiBcbiBcdGlmICghc2QpXG4gXHRcdHJldHVybiAxO1xuIFxuLVx0cmV0dXJuIHNkLVx1MDAzZWhvc3RfYnVzZXM7XG4rXHRyZXR1cm4gc2QtXHUwMDNlZ3JvdXBfc2l6ZTtcbiB9XG4gXG4gc3RydWN0IG1seDVfY29yZV9kZXYgKm1seDVfc2RfZ2V0X3ByaW1hcnkoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbkBAIC0xMDcsNyArMTA3LDcgQEAgaW50IG1seDVfc2RfcGZfbnVtX2dldChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuIFx0XHRpZiAocG9zID09IGRldilcbiBcdFx0XHRicmVhaztcbiBcbi1cdHJldHVybiBwZl9udW0gKiBzZC1cdTAwM2Vob3N0X2J1c2VzICsgaTtcbitcdHJldHVybiBwZl9udW0gKiBzZC1cdTAwM2Vncm91cF9zaXplICsgaTtcbiB9XG4gXG4gc3RydWN0IG1seDVfY29yZV9kZXYgKlxuQEAgLTExOCw3ICsxMTgsNyBAQCBtbHg1X3NkX3ByaW1hcnlfZ2V0X3BlZXIoc3RydWN0IG1seDVfY29yZV9kZXYgKnByaW1hcnksIGludCBpZHgpXG4gXHRpZiAoaWR4ID09IDApXG4gXHRcdHJldHVybiBwcmltYXJ5O1xuIFxuLVx0aWYgKGlkeCBcdTAwM2U9IG1seDVfc2RfZ2V0X2hvc3RfYnVzZXMocHJpbWFyeSkpXG4rXHRpZiAoaWR4IFx1MDAzZT0gbWx4NV9zZF9nZXRfZ3JvdXBfc2l6ZShwcmltYXJ5KSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRzZCA9IG1seDVfZ2V0X3NkKHByaW1hcnkpO1xuQEAgLTEzMCw3ICsxMzAsNyBAQCBpbnQgbWx4NV9zZF9jaF9peF9nZXRfZGV2X2l4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGludCBjaF9peClcbiBcdGlmIChpc19tZGV2X3N3aXRjaGRldl9tb2RlKGRldikpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0cmV0dXJuIGNoX2l4ICUgbWx4NV9zZF9nZXRfaG9zdF9idXNlcyhkZXYpO1xuK1x0cmV0dXJuIGNoX2l4ICUgbWx4NV9zZF9nZXRfZ3JvdXBfc2l6ZShkZXYpO1xuIH1cbiBcbiBpbnQgbWx4NV9zZF9jaF9peF9nZXRfdmVjX2l4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGludCBjaF9peClcbkBAIC0xMzgsNyArMTM4LDcgQEAgaW50IG1seDVfc2RfY2hfaXhfZ2V0X3ZlY19peChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBpbnQgY2hfaXgpXG4gXHRpZiAoaXNfbWRldl9zd2l0Y2hkZXZfbW9kZShkZXYpKVxuIFx0XHRyZXR1cm4gY2hfaXg7XG4gXG4tXHRyZXR1cm4gY2hfaXggLyBtbHg1X3NkX2dldF9ob3N0X2J1c2VzKGRldik7XG4rXHRyZXR1cm4gY2hfaXggLyBtbHg1X3NkX2dldF9ncm91cF9zaXplKGRldik7XG4gfVxuIFxuIHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptbHg1X3NkX2NoX2l4X2dldF9kZXYoc3RydWN0IG1seDVfY29yZV9kZXYgKnByaW1hcnksIGludCBjaF9peClcbkBAIC0xNjQsNyArMTY0LDcgQEAgc3RhdGljIGJvb2wgZnRfY3JlYXRlX2FsaWFzX3N1cHBvcnRlZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuIH1cbiBcbiBzdGF0aWMgaW50IG1seDVfcXVlcnlfc2Qoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgYm9vbCAqc2RtLFxuLVx0XHRcdCB1OCAqaG9zdF9idXNlcylcbitcdFx0XHQgdTggKmdyb3VwX3NpemUpXG4ge1xuIFx0dTMyIG91dFtNTFg1X1NUX1NaX0RXKG1waXJfcmVnKV07XG4gXHRpbnQgZXJyO1xuQEAgLTE3NCw3ICsxNzQsNyBAQCBzdGF0aWMgaW50IG1seDVfcXVlcnlfc2Qoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgYm9vbCAqc2RtLFxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuIFx0KnNkbSA9IE1MWDVfR0VUKG1waXJfcmVnLCBvdXQsIHNkbSk7XG4tXHQqaG9zdF9idXNlcyA9IE1MWDVfR0VUKG1waXJfcmVnLCBvdXQsIGhvc3RfYnVzZXMpO1xuK1x0Kmdyb3VwX3NpemUgPSBNTFg1X0dFVChtcGlyX3JlZywgb3V0LCBob3N0X2J1c2VzKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0xODQsMTAgKzE4NCwxMCBAQCBzdGF0aWMgdTMyIG1seDVfc2RfZ3JvdXBfaWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTggc2RfZ3JvdXApXG4gXHRyZXR1cm4gKHUzMikoKE1MWDVfQ0FQX0dFTihkZXYsIG5hdGl2ZV9wb3J0X251bSkgXHUwMDNjXHUwMDNjIDgpIHwgc2RfZ3JvdXApO1xuIH1cbiBcbi1zdGF0aWMgYm9vbCBtbHg1X3NkX2NhcHNfc3VwcG9ydGVkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHU4IGhvc3RfYnVzZXMpXG4rc3RhdGljIGJvb2wgbWx4NV9zZF9jYXBzX3N1cHBvcnRlZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1OCBncm91cF9zaXplKVxuIHtcbiBcdC8qIEhvbm9yIHRoZSBTVyBpbXBsZW1lbnRhdGlvbiBsaW1pdCAqL1xuLVx0aWYgKGhvc3RfYnVzZXMgXHUwMDNlIE1MWDVfU0RfTUFYX0dST1VQX1NaKVxuK1x0aWYgKGdyb3VwX3NpemUgXHUwMDNlIE1MWDVfU0RfTUFYX0dST1VQX1NaKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHQvKiBEaXNjb25uZWN0IHNlY29uZGFyaWVzIGZyb20gdGhlIG5ldHdvcmsgKi9cbkBAIC0yMDAsNyArMjAwLDcgQEAgc3RhdGljIGJvb2wgbWx4NV9zZF9jYXBzX3N1cHBvcnRlZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1OCBob3N0X2J1c2VzKVxuIFx0LyogUlggc3RlZXJpbmcgZnJvbSBwcmltYXJ5IHRvIHNlY29uZGFyaWVzICovXG4gXHRpZiAoIU1MWDVfQ0FQX0dFTihkZXYsIGNyb3NzX3ZoY2FfcnF0KSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuLVx0aWYgKGhvc3RfYnVzZXMgXHUwMDNlIE1MWDVfQ0FQX0dFTl8yKGRldiwgbWF4X3JxdF92aGNhX2lkKSlcbitcdGlmIChncm91cF9zaXplIFx1MDAzZSBNTFg1X0NBUF9HRU5fMihkZXYsIG1heF9ycXRfdmhjYV9pZCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdC8qIFRYIHN0ZWVyaW5nIGZyb20gc2Vjb25kYXJpZXMgdG8gcHJpbWFyeSAqL1xuQEAgLTIxNCw3ICsyMTQsNyBAQCBzdGF0aWMgYm9vbCBtbHg1X3NkX2NhcHNfc3VwcG9ydGVkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHU4IGhvc3RfYnVzZXMpXG4gXG4gYm9vbCBtbHg1X3NkX2lzX3N1cHBvcnRlZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuIHtcbi1cdHU4IGhvc3RfYnVzZXMsIHNkX2dyb3VwO1xuK1x0dTggZ3JvdXBfc2l6ZSA9IFU4X01BWCwgc2RfZ3JvdXA7XG4gXHRib29sIHNkbTtcbiBcdGludCBlcnI7XG4gXG5AQCAtMjIyLDIzICsyMjIsMjUgQEAgYm9vbCBtbHg1X3NkX2lzX3N1cHBvcnRlZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuIFx0aWYgKCFtbHg1X2NvcmVfaXNfcGYoZGV2KSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0ZXJyID0gbWx4NV9xdWVyeV9uaWNfdnBvcnRfc2RfZ3JvdXAoZGV2LCBcdTAwMjZzZF9ncm91cCk7XG4tXHRpZiAoZXJyIHx8ICFzZF9ncm91cClcbitcdGVyciA9IG1seDVfcXVlcnlfbmljX3Zwb3J0X3NkX2dyb3VwKGRldiwgXHUwMDI2c2RfZ3JvdXAsIFx1MDAyNmdyb3VwX3NpemUpO1xuK1x0aWYgKGVyciB8fCAhc2RfZ3JvdXAgfHwgZ3JvdXBfc2l6ZSBcdTAwM2MgTUxYNV9TRF9NSU5fR1JPVVBfU1opXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdGlmICghTUxYNV9DQVBfTUNBTV9SRUcoZGV2LCBtcGlyKSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuK1x0aWYgKGdyb3VwX3NpemUgPT0gVThfTUFYKSB7XG4rXHRcdGlmICghTUxYNV9DQVBfTUNBTV9SRUcoZGV2LCBtcGlyKSlcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRlcnIgPSBtbHg1X3F1ZXJ5X3NkKGRldiwgXHUwMDI2c2RtLCBcdTAwMjZob3N0X2J1c2VzKTtcbi1cdGlmIChlcnIgfHwgIXNkbSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHRlcnIgPSBtbHg1X3F1ZXJ5X3NkKGRldiwgXHUwMDI2c2RtLCBcdTAwMjZncm91cF9zaXplKTtcbitcdFx0aWYgKGVyciB8fCAhc2RtKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcdH1cbiBcbi1cdHJldHVybiBtbHg1X3NkX2NhcHNfc3VwcG9ydGVkKGRldiwgaG9zdF9idXNlcyk7XG4rXHRyZXR1cm4gbWx4NV9zZF9jYXBzX3N1cHBvcnRlZChkZXYsIGdyb3VwX3NpemUpO1xuIH1cbiBcbiBzdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbiB7XG4tXHR1OCBob3N0X2J1c2VzLCBzZF9ncm91cDtcbitcdHU4IGdyb3VwX3NpemUgPSBVOF9NQVgsIHNkX2dyb3VwO1xuIFx0c3RydWN0IG1seDVfc2QgKnNkO1xuIFx0dTMyIGdyb3VwX2lkO1xuIFx0Ym9vbCBzZG07XG5AQCAtMjQ4LDI2ICsyNTAsMjcgQEAgc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG4gXHRpZiAoIW1seDVfY29yZV9pc19wZihkZXYpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGVyciA9IG1seDVfcXVlcnlfbmljX3Zwb3J0X3NkX2dyb3VwKGRldiwgXHUwMDI2c2RfZ3JvdXApO1xuK1x0ZXJyID0gbWx4NV9xdWVyeV9uaWNfdnBvcnRfc2RfZ3JvdXAoZGV2LCBcdTAwMjZzZF9ncm91cCwgXHUwMDI2Z3JvdXBfc2l6ZSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0aWYgKCFzZF9ncm91cClcbitcdGlmICghc2RfZ3JvdXAgfHwgZ3JvdXBfc2l6ZSBcdTAwM2MgTUxYNV9TRF9NSU5fR1JPVVBfU1opXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWYgKCFNTFg1X0NBUF9NQ0FNX1JFRyhkZXYsIG1waXIpKVxuLVx0XHRyZXR1cm4gMDtcbitcdGlmIChncm91cF9zaXplID09IFU4X01BWCkge1xuK1x0XHRpZiAoIU1MWDVfQ0FQX01DQU1fUkVHKGRldiwgbXBpcikpXG4rXHRcdFx0cmV0dXJuIDA7XG4gXG4tXHRlcnIgPSBtbHg1X3F1ZXJ5X3NkKGRldiwgXHUwMDI2c2RtLCBcdTAwMjZob3N0X2J1c2VzKTtcbi1cdGlmIChlcnIpXG4tXHRcdHJldHVybiBlcnI7XG4tXG4tXHRpZiAoIXNkbSlcbi1cdFx0cmV0dXJuIDA7XG4rXHRcdGVyciA9IG1seDVfcXVlcnlfc2QoZGV2LCBcdTAwMjZzZG0sIFx1MDAyNmdyb3VwX3NpemUpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdHJldHVybiBlcnI7XG4gXG4rXHRcdGlmICghc2RtKVxuK1x0XHRcdHJldHVybiAwO1xuK1x0fVxuIFx0Z3JvdXBfaWQgPSBtbHg1X3NkX2dyb3VwX2lkKGRldiwgc2RfZ3JvdXApO1xuIFxuLVx0aWYgKCFtbHg1X3NkX2NhcHNfc3VwcG9ydGVkKGRldiwgaG9zdF9idXNlcykpIHtcbitcdGlmICghbWx4NV9zZF9jYXBzX3N1cHBvcnRlZChkZXYsIGdyb3VwX3NpemUpKSB7XG4gXHRcdHNkX3dhcm4oZGV2LCBcImNhbid0IHN1cHBvcnQgcmVxdWVzdGVkIG5ldGRldiBjb21iaW5pbmcgZm9yIGdyb3VwIGlkIDB4JXgsIHNraXBwaW5nXFxuXCIsXG4gXHRcdFx0Z3JvdXBfaWQpO1xuIFx0XHRyZXR1cm4gMDtcbkBAIC0yNzcsNyArMjgwLDcgQEAgc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG4gXHRpZiAoIXNkKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdHNkLVx1MDAzZWhvc3RfYnVzZXMgPSBob3N0X2J1c2VzO1xuK1x0c2QtXHUwMDNlZ3JvdXBfc2l6ZSA9IGdyb3VwX3NpemU7XG4gXHRzZC1cdTAwM2Vncm91cF9pZCA9IGdyb3VwX2lkO1xuIFxuIFx0bWx4NV9zZXRfc2QoZGV2LCBzZCk7XG5AQCAtNTQwLDcgKzU0Myw3IEBAIHN0YXRpYyBpbnQgc2RfcmVnaXN0ZXIoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbiBcdHNkLVx1MDAzZWRldmNvbSA9IGRldmNvbTtcbiBcbiBcdG1seDVfZGV2Y29tX2NvbXBfbG9jayhkZXZjb20pO1xuLVx0aWYgKG1seDVfZGV2Y29tX2NvbXBfZ2V0X3NpemUoZGV2Y29tKSAhPSBzZC1cdTAwM2Vob3N0X2J1c2VzIHx8XG4rXHRpZiAobWx4NV9kZXZjb21fY29tcF9nZXRfc2l6ZShkZXZjb20pICE9IHNkLVx1MDAzZWdyb3VwX3NpemUgfHxcbiBcdCAgICBtbHg1X2RldmNvbV9jb21wX2lzX3JlYWR5KGRldmNvbSkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuQEAgLTU3Niw3ICs1NzksNyBAQCBzdGF0aWMgaW50IHNkX3JlZ2lzdGVyKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG4gXHRcdFx0XHQgICAgICBERVZDT01fQ0FOVF9GQUlMLCBwcmltYXJ5KTtcbiBcbiBcdHByaW1hcnlfc2QgPSBtbHg1X2dldF9zZChwcmltYXJ5KTtcbi1cdGlmIChwcmltYXJ5X3NkLVx1MDAzZW5leHRfc2Vjb25kYXJ5X2lkeCArIDEgPT0gc2QtXHUwMDNlaG9zdF9idXNlcylcbitcdGlmIChwcmltYXJ5X3NkLVx1MDAzZW5leHRfc2Vjb25kYXJ5X2lkeCArIDEgPT0gc2QtXHUwMDNlZ3JvdXBfc2l6ZSlcbiBcdFx0bWx4NV9kZXZjb21fY29tcF9zZXRfcmVhZHkoZGV2Y29tLCB0cnVlKTtcbiBvdXQ6XG4gXHRtbHg1X2RldmNvbV9jb21wX3VubG9jayhkZXZjb20pO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc2QuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc2QuaFxuaW5kZXggY2I4OGJmMzQwNzlhZC4uYmM4ZGJjMjk5MDcwNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc2QuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zZC5oXG5AQCAtNiw2ICs2LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gXG4rI2RlZmluZSBNTFg1X1NEX01JTl9HUk9VUF9TWiAyXG4gI2RlZmluZSBNTFg1X1NEX01BWF9HUk9VUF9TWiAyXG4gXG4gc3RydWN0IG1seDVfc2Q7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3Zwb3J0LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvdnBvcnQuY1xuaW5kZXggMzY3NmUyNmFjNmIwOS4uM2Q4NjUxMGFmNjE1MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS92cG9ydC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvdnBvcnQuY1xuQEAgLTU1MCw3ICs1NTAsOCBAQCBpbnQgbWx4NV9xdWVyeV9uaWNfdnBvcnRfc3lzdGVtX2ltYWdlX2d1aWQoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKG1seDVfcXVlcnlfbmljX3Zwb3J0X3N5c3RlbV9pbWFnZV9ndWlkKTtcbiBcbi1pbnQgbWx4NV9xdWVyeV9uaWNfdnBvcnRfc2RfZ3JvdXAoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsIHU4ICpzZF9ncm91cClcbitpbnQgbWx4NV9xdWVyeV9uaWNfdnBvcnRfc2RfZ3JvdXAoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsIHU4ICpzZF9ncm91cCxcbitcdFx0XHRcdCAgdTggKnNkX2dyb3VwX3NpemUpXG4ge1xuIFx0aW50IG91dGxlbiA9IE1MWDVfU1RfU1pfQllURVMocXVlcnlfbmljX3Zwb3J0X2NvbnRleHRfb3V0KTtcbiBcdHUzMiAqb3V0O1xuQEAgLTU2Niw2ICs1NjcsOSBAQCBpbnQgbWx4NV9xdWVyeV9uaWNfdnBvcnRfc2RfZ3JvdXAoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsIHU4ICpzZF9ncm91cClcbiBcbiBcdCpzZF9ncm91cCA9IE1MWDVfR0VUKHF1ZXJ5X25pY192cG9ydF9jb250ZXh0X291dCwgb3V0LFxuIFx0XHRcdCAgICAgbmljX3Zwb3J0X2NvbnRleHQuc2RfZ3JvdXApO1xuK1x0aWYgKE1MWDVfQ0FQX0dFTihtZGV2LCBzZF9ncm91cF9zaXplKSlcbitcdFx0KnNkX2dyb3VwX3NpemUgPSBNTFg1X0dFVChxdWVyeV9uaWNfdnBvcnRfY29udGV4dF9vdXQsIG91dCxcbitcdFx0XHRcdFx0ICBuaWNfdnBvcnRfY29udGV4dC5zZF9ncm91cF9zaXplKTtcbiBvdXQ6XG4gXHRrdmZyZWUob3V0KTtcbiBcdHJldHVybiBlcnI7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbHg1L3Zwb3J0LmggYi9pbmNsdWRlL2xpbnV4L21seDUvdnBvcnQuaFxuaW5kZXggZWUzNGQzZWQzMzVmMy4uNTc3MTY4YTRjYTBjOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWx4NS92cG9ydC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21seDUvdnBvcnQuaFxuQEAgLTc4LDcgKzc4LDggQEAgaW50IG1seDVfcXVlcnlfbmljX3Zwb3J0X210dShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiwgdTE2ICptdHUpO1xuIGludCBtbHg1X21vZGlmeV9uaWNfdnBvcnRfbXR1KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LCB1MTYgbXR1KTtcbiBpbnQgbWx4NV9xdWVyeV9uaWNfdnBvcnRfc3lzdGVtX2ltYWdlX2d1aWQoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsXG4gXHRcdFx0XHRcdCAgIHU2NCAqc3lzdGVtX2ltYWdlX2d1aWQpO1xuLWludCBtbHg1X3F1ZXJ5X25pY192cG9ydF9zZF9ncm91cChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiwgdTggKnNkX2dyb3VwKTtcbitpbnQgbWx4NV9xdWVyeV9uaWNfdnBvcnRfc2RfZ3JvdXAoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsIHU4ICpzZF9ncm91cCxcbitcdFx0XHRcdCAgdTggKnNkX2dyb3VwX3NpemUpO1xuIGludCBtbHg1X3F1ZXJ5X25pY192cG9ydF9ub2RlX2d1aWQoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsXG4gXHRcdFx0XHQgICB1MTYgdnBvcnQsIGJvb2wgb3RoZXJfdnBvcnQsIHU2NCAqbm9kZV9ndWlkKTtcbiBpbnQgbWx4NV9tb2RpZnlfbmljX3Zwb3J0X25vZGVfZ3VpZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldixcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ5OjI4LjY4NzQ4MzcxNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1ODg0Mzg3NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nIERlY2lzaW9uIGZvciBNZWxsYW5veCBtbHg1IERyaXZlciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIGltcGFjdGluZyBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zZC5jYCwgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS92cG9ydC5jYCwgYW5kIGBpbmNsdWRlL2xpbnV4L21seDUvdnBvcnQuaGAuIFRoaXMgaXMgY2xlYXJseSB0YXJnZXRpbmcgdGhlIE1lbGxhbm94IG1seDUgZHJpdmVyLCB3aGljaCBJIGtub3cgaXMgdXNlZCBmb3IgQ29ubmVjdFgtNCwgLTUsIC02LCBhbmQgLTcgUENJZSBuZXR3b3JrIGNhcmRzLiBUaGVzZSBhcmUgaGlnaC1wZXJmb3JtYW5jZSBTbWFydE5JQ3MuIFRoZSBpbnN0cnVjdGlvbnMgZXhwbGljaXRseSBzYXkgdG8gc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBjb25jZXJucyB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycyB0aGF0IG5lZWQgcGh5c2ljYWwgaGFyZHdhcmUsIHdoaWNoIGlzbid0IGVtdWxhdGVkIGJ5IFFFTVUuXG5cbk5vdywgdGhlIHF1ZXN0aW9uIGlzLCBkb2VzIFFFTVUgZW11bGF0ZSBtbHg1PyBObywgaXQgZG9lc24ndC4gUUVNVSB1c2VzIGRyaXZlcnMgbGlrZSBlMTAwMCwgdmlydGlvLW5ldCwgYW5kIHZteG5ldDMsIGJ1dCBub3QgbWx4NS4gU28sIG1seDUgYWJzb2x1dGVseSBuZWVkcyB0aGUgcGh5c2ljYWwgTWVsbGFub3ggaGFyZHdhcmUuIFRoaXMgbWVhbnMsIEknbSBub3QgZ29pbmcgdG8gYmUgYWJsZSB0byByZWFjaCB0aGlzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgdXNpbmcgc3RhbmRhcmQgUUVNVS5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCdzIHJldmlzaXQgdGhlIGZpbGVzIGltcGFjdGVkOiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zZC5jYC4gWWVhaCwgdGhpcyBpcyBjb3JlIG1seDUgZHJpdmVyIGNvZGUsIG5vIGRvdWJ0IGFib3V0IGl0LlxuXG5UaGVyZWZvcmUsIG15IGRlY2lzaW9uIGlzICoqYFdvcnRoRnV6emluZz1mYWxzZWAqKiBhbmQgdGhlIHJlYXNvbmluZyBJJ20gdXNpbmcgaXMgXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1lbGxhbm94IG1seDUgZHJpdmVyLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMuXCJcblxuXG4iLCJJbnB1dFRva2VucyI6NTkzMSwiT3V0cHV0VG9rZW5zIjo2MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ5OjM3LjI3NTkyNTYzN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1lbGxhbm94IG1seDUgZHJpdmVyLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWVsbGFub3ggbWx4NSBkcml2ZXIsIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ5OjM3LjI3NTk1NjYyN1oiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowm62kl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-10 09:46:08 +0000 UTC FinishedAt: 2026-08-10 09:49:39 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1lbGxhbm94IG1seDUgZHJpdmVyLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTM5MzQ1MDkyMmY5OTZkYWJkMjM2Mzc1ZmY3NGQ2ZjkxZjk0MDU4NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDA5OjQ5OjI1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc2QuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc2QuY1xuaW5kZXggZWUyZmRlZmExOTQ1Zi4uNGNkYzUwY2Q2ZjAzOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc2QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zZC5jXG5AQCAtMTksNyAmIzQzOzE5LDcgQEBcbiBcbiBzdHJ1Y3QgbWx4NV9zZCB7XG4gXHR1MzIgZ3JvdXBfaWQ7XG4tXHR1OCBob3N0X2J1c2VzO1xuJiM0MztcdHU4IGdyb3VwX3NpemU7XG4gXHRzdHJ1Y3QgbWx4NV9kZXZjb21fY29tcF9kZXYgKmRldmNvbTtcbiBcdHN0cnVjdCBkZW50cnkgKmRmcztcbiBcdHU4IHN0YXRlO1xuQEAgLTQ2LDE0ICYjNDM7NDYsMTQgQEAgZW51bSBtbHg1X3NkX3N0YXRlIHtcbiBcdE1MWDVfU0RfU1RBVEVfVVAsXG4gfTtcbiBcbi1zdGF0aWMgaW50IG1seDVfc2RfZ2V0X2hvc3RfYnVzZXMoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbiYjNDM7c3RhdGljIGludCBtbHg1X3NkX2dldF9ncm91cF9zaXplKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG4ge1xuIFx0c3RydWN0IG1seDVfc2QgKnNkID0gbWx4NV9nZXRfc2QoZGV2KTtcbiBcbiBcdGlmICghc2QpXG4gXHRcdHJldHVybiAxO1xuIFxuLVx0cmV0dXJuIHNkLVx1MDAzZWhvc3RfYnVzZXM7XG4mIzQzO1x0cmV0dXJuIHNkLVx1MDAzZWdyb3VwX3NpemU7XG4gfVxuIFxuIHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptbHg1X3NkX2dldF9wcmltYXJ5KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG5AQCAtMTA3LDcgJiM0MzsxMDcsNyBAQCBpbnQgbWx4NV9zZF9wZl9udW1fZ2V0KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG4gXHRcdGlmIChwb3MgPT0gZGV2KVxuIFx0XHRcdGJyZWFrO1xuIFxuLVx0cmV0dXJuIHBmX251bSAqIHNkLVx1MDAzZWhvc3RfYnVzZXMgJiM0MzsgaTtcbiYjNDM7XHRyZXR1cm4gcGZfbnVtICogc2QtXHUwMDNlZ3JvdXBfc2l6ZSAmIzQzOyBpO1xuIH1cbiBcbiBzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqXG5AQCAtMTE4LDcgJiM0MzsxMTgsNyBAQCBtbHg1X3NkX3ByaW1hcnlfZ2V0X3BlZXIoc3RydWN0IG1seDVfY29yZV9kZXYgKnByaW1hcnksIGludCBpZHgpXG4gXHRpZiAoaWR4ID09IDApXG4gXHRcdHJldHVybiBwcmltYXJ5O1xuIFxuLVx0aWYgKGlkeCBcdTAwM2U9IG1seDVfc2RfZ2V0X2hvc3RfYnVzZXMocHJpbWFyeSkpXG4mIzQzO1x0aWYgKGlkeCBcdTAwM2U9IG1seDVfc2RfZ2V0X2dyb3VwX3NpemUocHJpbWFyeSkpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0c2QgPSBtbHg1X2dldF9zZChwcmltYXJ5KTtcbkBAIC0xMzAsNyAmIzQzOzEzMCw3IEBAIGludCBtbHg1X3NkX2NoX2l4X2dldF9kZXZfaXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgaW50IGNoX2l4KVxuIFx0aWYgKGlzX21kZXZfc3dpdGNoZGV2X21vZGUoZGV2KSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZXR1cm4gY2hfaXggJSBtbHg1X3NkX2dldF9ob3N0X2J1c2VzKGRldik7XG4mIzQzO1x0cmV0dXJuIGNoX2l4ICUgbWx4NV9zZF9nZXRfZ3JvdXBfc2l6ZShkZXYpO1xuIH1cbiBcbiBpbnQgbWx4NV9zZF9jaF9peF9nZXRfdmVjX2l4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGludCBjaF9peClcbkBAIC0xMzgsNyAmIzQzOzEzOCw3IEBAIGludCBtbHg1X3NkX2NoX2l4X2dldF92ZWNfaXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgaW50IGNoX2l4KVxuIFx0aWYgKGlzX21kZXZfc3dpdGNoZGV2X21vZGUoZGV2KSlcbiBcdFx0cmV0dXJuIGNoX2l4O1xuIFxuLVx0cmV0dXJuIGNoX2l4IC8gbWx4NV9zZF9nZXRfaG9zdF9idXNlcyhkZXYpO1xuJiM0MztcdHJldHVybiBjaF9peCAvIG1seDVfc2RfZ2V0X2dyb3VwX3NpemUoZGV2KTtcbiB9XG4gXG4gc3RydWN0IG1seDVfY29yZV9kZXYgKm1seDVfc2RfY2hfaXhfZ2V0X2RldihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqcHJpbWFyeSwgaW50IGNoX2l4KVxuQEAgLTE2NCw3ICYjNDM7MTY0LDcgQEAgc3RhdGljIGJvb2wgZnRfY3JlYXRlX2FsaWFzX3N1cHBvcnRlZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuIH1cbiBcbiBzdGF0aWMgaW50IG1seDVfcXVlcnlfc2Qoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgYm9vbCAqc2RtLFxuLVx0XHRcdCB1OCAqaG9zdF9idXNlcylcbiYjNDM7XHRcdFx0IHU4ICpncm91cF9zaXplKVxuIHtcbiBcdHUzMiBvdXRbTUxYNV9TVF9TWl9EVyhtcGlyX3JlZyldO1xuIFx0aW50IGVycjtcbkBAIC0xNzQsNyAmIzQzOzE3NCw3IEBAIHN0YXRpYyBpbnQgbWx4NV9xdWVyeV9zZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBib29sICpzZG0sXG4gXHRcdHJldHVybiBlcnI7XG4gXG4gXHQqc2RtID0gTUxYNV9HRVQobXBpcl9yZWcsIG91dCwgc2RtKTtcbi1cdCpob3N0X2J1c2VzID0gTUxYNV9HRVQobXBpcl9yZWcsIG91dCwgaG9zdF9idXNlcyk7XG4mIzQzO1x0Kmdyb3VwX3NpemUgPSBNTFg1X0dFVChtcGlyX3JlZywgb3V0LCBob3N0X2J1c2VzKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0xODQsMTAgJiM0MzsxODQsMTAgQEAgc3RhdGljIHUzMiBtbHg1X3NkX2dyb3VwX2lkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHU4IHNkX2dyb3VwKVxuIFx0cmV0dXJuICh1MzIpKChNTFg1X0NBUF9HRU4oZGV2LCBuYXRpdmVfcG9ydF9udW0pIFx1MDAzY1x1MDAzYyA4KSB8IHNkX2dyb3VwKTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgbWx4NV9zZF9jYXBzX3N1cHBvcnRlZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1OCBob3N0X2J1c2VzKVxuJiM0MztzdGF0aWMgYm9vbCBtbHg1X3NkX2NhcHNfc3VwcG9ydGVkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHU4IGdyb3VwX3NpemUpXG4ge1xuIFx0LyogSG9ub3IgdGhlIFNXIGltcGxlbWVudGF0aW9uIGxpbWl0ICovXG4tXHRpZiAoaG9zdF9idXNlcyBcdTAwM2UgTUxYNV9TRF9NQVhfR1JPVVBfU1opXG4mIzQzO1x0aWYgKGdyb3VwX3NpemUgXHUwMDNlIE1MWDVfU0RfTUFYX0dST1VQX1NaKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHQvKiBEaXNjb25uZWN0IHNlY29uZGFyaWVzIGZyb20gdGhlIG5ldHdvcmsgKi9cbkBAIC0yMDAsNyAmIzQzOzIwMCw3IEBAIHN0YXRpYyBib29sIG1seDVfc2RfY2Fwc19zdXBwb3J0ZWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTggaG9zdF9idXNlcylcbiBcdC8qIFJYIHN0ZWVyaW5nIGZyb20gcHJpbWFyeSB0byBzZWNvbmRhcmllcyAqL1xuIFx0aWYgKCFNTFg1X0NBUF9HRU4oZGV2LCBjcm9zc192aGNhX3JxdCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbi1cdGlmIChob3N0X2J1c2VzIFx1MDAzZSBNTFg1X0NBUF9HRU5fMihkZXYsIG1heF9ycXRfdmhjYV9pZCkpXG4mIzQzO1x0aWYgKGdyb3VwX3NpemUgXHUwMDNlIE1MWDVfQ0FQX0dFTl8yKGRldiwgbWF4X3JxdF92aGNhX2lkKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0LyogVFggc3RlZXJpbmcgZnJvbSBzZWNvbmRhcmllcyB0byBwcmltYXJ5ICovXG5AQCAtMjE0LDcgJiM0MzsyMTQsNyBAQCBzdGF0aWMgYm9vbCBtbHg1X3NkX2NhcHNfc3VwcG9ydGVkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHU4IGhvc3RfYnVzZXMpXG4gXG4gYm9vbCBtbHg1X3NkX2lzX3N1cHBvcnRlZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuIHtcbi1cdHU4IGhvc3RfYnVzZXMsIHNkX2dyb3VwO1xuJiM0MztcdHU4IGdyb3VwX3NpemUgPSBVOF9NQVgsIHNkX2dyb3VwO1xuIFx0Ym9vbCBzZG07XG4gXHRpbnQgZXJyO1xuIFxuQEAgLTIyMiwyMyAmIzQzOzIyMiwyNSBAQCBib29sIG1seDVfc2RfaXNfc3VwcG9ydGVkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG4gXHRpZiAoIW1seDVfY29yZV9pc19wZihkZXYpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRlcnIgPSBtbHg1X3F1ZXJ5X25pY192cG9ydF9zZF9ncm91cChkZXYsIFx1MDAyNnNkX2dyb3VwKTtcbi1cdGlmIChlcnIgfHwgIXNkX2dyb3VwKVxuJiM0MztcdGVyciA9IG1seDVfcXVlcnlfbmljX3Zwb3J0X3NkX2dyb3VwKGRldiwgXHUwMDI2c2RfZ3JvdXAsIFx1MDAyNmdyb3VwX3NpemUpO1xuJiM0MztcdGlmIChlcnIgfHwgIXNkX2dyb3VwIHx8IGdyb3VwX3NpemUgXHUwMDNjIE1MWDVfU0RfTUlOX0dST1VQX1NaKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRpZiAoIU1MWDVfQ0FQX01DQU1fUkVHKGRldiwgbXBpcikpXG4tXHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRpZiAoZ3JvdXBfc2l6ZSA9PSBVOF9NQVgpIHtcbiYjNDM7XHRcdGlmICghTUxYNV9DQVBfTUNBTV9SRUcoZGV2LCBtcGlyKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0ZXJyID0gbWx4NV9xdWVyeV9zZChkZXYsIFx1MDAyNnNkbSwgXHUwMDI2aG9zdF9idXNlcyk7XG4tXHRpZiAoZXJyIHx8ICFzZG0pXG4tXHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdGVyciA9IG1seDVfcXVlcnlfc2QoZGV2LCBcdTAwMjZzZG0sIFx1MDAyNmdyb3VwX3NpemUpO1xuJiM0MztcdFx0aWYgKGVyciB8fCAhc2RtKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuIFxuLVx0cmV0dXJuIG1seDVfc2RfY2Fwc19zdXBwb3J0ZWQoZGV2LCBob3N0X2J1c2VzKTtcbiYjNDM7XHRyZXR1cm4gbWx4NV9zZF9jYXBzX3N1cHBvcnRlZChkZXYsIGdyb3VwX3NpemUpO1xuIH1cbiBcbiBzdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbiB7XG4tXHR1OCBob3N0X2J1c2VzLCBzZF9ncm91cDtcbiYjNDM7XHR1OCBncm91cF9zaXplID0gVThfTUFYLCBzZF9ncm91cDtcbiBcdHN0cnVjdCBtbHg1X3NkICpzZDtcbiBcdHUzMiBncm91cF9pZDtcbiBcdGJvb2wgc2RtO1xuQEAgLTI0OCwyNiAmIzQzOzI1MCwyNyBAQCBzdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbiBcdGlmICghbWx4NV9jb3JlX2lzX3BmKGRldikpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0ZXJyID0gbWx4NV9xdWVyeV9uaWNfdnBvcnRfc2RfZ3JvdXAoZGV2LCBcdTAwMjZzZF9ncm91cCk7XG4mIzQzO1x0ZXJyID0gbWx4NV9xdWVyeV9uaWNfdnBvcnRfc2RfZ3JvdXAoZGV2LCBcdTAwMjZzZF9ncm91cCwgXHUwMDI2Z3JvdXBfc2l6ZSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0aWYgKCFzZF9ncm91cClcbiYjNDM7XHRpZiAoIXNkX2dyb3VwIHx8IGdyb3VwX3NpemUgXHUwMDNjIE1MWDVfU0RfTUlOX0dST1VQX1NaKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmICghTUxYNV9DQVBfTUNBTV9SRUcoZGV2LCBtcGlyKSlcbi1cdFx0cmV0dXJuIDA7XG4mIzQzO1x0aWYgKGdyb3VwX3NpemUgPT0gVThfTUFYKSB7XG4mIzQzO1x0XHRpZiAoIU1MWDVfQ0FQX01DQU1fUkVHKGRldiwgbXBpcikpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuIFxuLVx0ZXJyID0gbWx4NV9xdWVyeV9zZChkZXYsIFx1MDAyNnNkbSwgXHUwMDI2aG9zdF9idXNlcyk7XG4tXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuLVxuLVx0aWYgKCFzZG0pXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdFx0ZXJyID0gbWx4NV9xdWVyeV9zZChkZXYsIFx1MDAyNnNkbSwgXHUwMDI2Z3JvdXBfc2l6ZSk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuIFxuJiM0MztcdFx0aWYgKCFzZG0pXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiBcdGdyb3VwX2lkID0gbWx4NV9zZF9ncm91cF9pZChkZXYsIHNkX2dyb3VwKTtcbiBcbi1cdGlmICghbWx4NV9zZF9jYXBzX3N1cHBvcnRlZChkZXYsIGhvc3RfYnVzZXMpKSB7XG4mIzQzO1x0aWYgKCFtbHg1X3NkX2NhcHNfc3VwcG9ydGVkKGRldiwgZ3JvdXBfc2l6ZSkpIHtcbiBcdFx0c2Rfd2FybihkZXYsIFwmIzM0O2NhbiYjMzk7dCBzdXBwb3J0IHJlcXVlc3RlZCBuZXRkZXYgY29tYmluaW5nIGZvciBncm91cCBpZCAweCV4LCBza2lwcGluZ1xcblwmIzM0OyxcbiBcdFx0XHRncm91cF9pZCk7XG4gXHRcdHJldHVybiAwO1xuQEAgLTI3Nyw3ICYjNDM7MjgwLDcgQEAgc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG4gXHRpZiAoIXNkKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdHNkLVx1MDAzZWhvc3RfYnVzZXMgPSBob3N0X2J1c2VzO1xuJiM0MztcdHNkLVx1MDAzZWdyb3VwX3NpemUgPSBncm91cF9zaXplO1xuIFx0c2QtXHUwMDNlZ3JvdXBfaWQgPSBncm91cF9pZDtcbiBcbiBcdG1seDVfc2V0X3NkKGRldiwgc2QpO1xuQEAgLTU0MCw3ICYjNDM7NTQzLDcgQEAgc3RhdGljIGludCBzZF9yZWdpc3RlcihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuIFx0c2QtXHUwMDNlZGV2Y29tID0gZGV2Y29tO1xuIFxuIFx0bWx4NV9kZXZjb21fY29tcF9sb2NrKGRldmNvbSk7XG4tXHRpZiAobWx4NV9kZXZjb21fY29tcF9nZXRfc2l6ZShkZXZjb20pICE9IHNkLVx1MDAzZWhvc3RfYnVzZXMgfHxcbiYjNDM7XHRpZiAobWx4NV9kZXZjb21fY29tcF9nZXRfc2l6ZShkZXZjb20pICE9IHNkLVx1MDAzZWdyb3VwX3NpemUgfHxcbiBcdCAgICBtbHg1X2RldmNvbV9jb21wX2lzX3JlYWR5KGRldmNvbSkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuQEAgLTU3Niw3ICYjNDM7NTc5LDcgQEAgc3RhdGljIGludCBzZF9yZWdpc3RlcihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuIFx0XHRcdFx0ICAgICAgREVWQ09NX0NBTlRfRkFJTCwgcHJpbWFyeSk7XG4gXG4gXHRwcmltYXJ5X3NkID0gbWx4NV9nZXRfc2QocHJpbWFyeSk7XG4tXHRpZiAocHJpbWFyeV9zZC1cdTAwM2VuZXh0X3NlY29uZGFyeV9pZHggJiM0MzsgMSA9PSBzZC1cdTAwM2Vob3N0X2J1c2VzKVxuJiM0MztcdGlmIChwcmltYXJ5X3NkLVx1MDAzZW5leHRfc2Vjb25kYXJ5X2lkeCAmIzQzOyAxID09IHNkLVx1MDAzZWdyb3VwX3NpemUpXG4gXHRcdG1seDVfZGV2Y29tX2NvbXBfc2V0X3JlYWR5KGRldmNvbSwgdHJ1ZSk7XG4gb3V0OlxuIFx0bWx4NV9kZXZjb21fY29tcF91bmxvY2soZGV2Y29tKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3NkLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3NkLmhcbmluZGV4IGNiODhiZjM0MDc5YWQuLmJjOGRiYzI5OTA3MDQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3NkLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc2QuaFxuQEAgLTYsNiAmIzQzOzYsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiBcbiYjNDM7I2RlZmluZSBNTFg1X1NEX01JTl9HUk9VUF9TWiAyXG4gI2RlZmluZSBNTFg1X1NEX01BWF9HUk9VUF9TWiAyXG4gXG4gc3RydWN0IG1seDVfc2Q7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3Zwb3J0LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvdnBvcnQuY1xuaW5kZXggMzY3NmUyNmFjNmIwOS4uM2Q4NjUxMGFmNjE1MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS92cG9ydC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvdnBvcnQuY1xuQEAgLTU1MCw3ICYjNDM7NTUwLDggQEAgaW50IG1seDVfcXVlcnlfbmljX3Zwb3J0X3N5c3RlbV9pbWFnZV9ndWlkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChtbHg1X3F1ZXJ5X25pY192cG9ydF9zeXN0ZW1faW1hZ2VfZ3VpZCk7XG4gXG4taW50IG1seDVfcXVlcnlfbmljX3Zwb3J0X3NkX2dyb3VwKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LCB1OCAqc2RfZ3JvdXApXG4mIzQzO2ludCBtbHg1X3F1ZXJ5X25pY192cG9ydF9zZF9ncm91cChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiwgdTggKnNkX2dyb3VwLFxuJiM0MztcdFx0XHRcdCAgdTggKnNkX2dyb3VwX3NpemUpXG4ge1xuIFx0aW50IG91dGxlbiA9IE1MWDVfU1RfU1pfQllURVMocXVlcnlfbmljX3Zwb3J0X2NvbnRleHRfb3V0KTtcbiBcdHUzMiAqb3V0O1xuQEAgLTU2Niw2ICYjNDM7NTY3LDkgQEAgaW50IG1seDVfcXVlcnlfbmljX3Zwb3J0X3NkX2dyb3VwKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LCB1OCAqc2RfZ3JvdXApXG4gXG4gXHQqc2RfZ3JvdXAgPSBNTFg1X0dFVChxdWVyeV9uaWNfdnBvcnRfY29udGV4dF9vdXQsIG91dCxcbiBcdFx0XHQgICAgIG5pY192cG9ydF9jb250ZXh0LnNkX2dyb3VwKTtcbiYjNDM7XHRpZiAoTUxYNV9DQVBfR0VOKG1kZXYsIHNkX2dyb3VwX3NpemUpKVxuJiM0MztcdFx0KnNkX2dyb3VwX3NpemUgPSBNTFg1X0dFVChxdWVyeV9uaWNfdnBvcnRfY29udGV4dF9vdXQsIG91dCxcbiYjNDM7XHRcdFx0XHRcdCAgbmljX3Zwb3J0X2NvbnRleHQuc2RfZ3JvdXBfc2l6ZSk7XG4gb3V0OlxuIFx0a3ZmcmVlKG91dCk7XG4gXHRyZXR1cm4gZXJyO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWx4NS92cG9ydC5oIGIvaW5jbHVkZS9saW51eC9tbHg1L3Zwb3J0LmhcbmluZGV4IGVlMzRkM2VkMzM1ZjMuLjU3NzE2OGE0Y2EwYzggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21seDUvdnBvcnQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbHg1L3Zwb3J0LmhcbkBAIC03OCw3ICYjNDM7NzgsOCBAQCBpbnQgbWx4NV9xdWVyeV9uaWNfdnBvcnRfbXR1KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LCB1MTYgKm10dSk7XG4gaW50IG1seDVfbW9kaWZ5X25pY192cG9ydF9tdHUoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsIHUxNiBtdHUpO1xuIGludCBtbHg1X3F1ZXJ5X25pY192cG9ydF9zeXN0ZW1faW1hZ2VfZ3VpZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldixcbiBcdFx0XHRcdFx0ICAgdTY0ICpzeXN0ZW1faW1hZ2VfZ3VpZCk7XG4taW50IG1seDVfcXVlcnlfbmljX3Zwb3J0X3NkX2dyb3VwKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LCB1OCAqc2RfZ3JvdXApO1xuJiM0MztpbnQgbWx4NV9xdWVyeV9uaWNfdnBvcnRfc2RfZ3JvdXAoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsIHU4ICpzZF9ncm91cCxcbiYjNDM7XHRcdFx0XHQgIHU4ICpzZF9ncm91cF9zaXplKTtcbiBpbnQgbWx4NV9xdWVyeV9uaWNfdnBvcnRfbm9kZV9ndWlkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LFxuIFx0XHRcdFx0ICAgdTE2IHZwb3J0LCBib29sIG90aGVyX3Zwb3J0LCB1NjQgKm5vZGVfZ3VpZCk7XG4gaW50IG1seDVfbW9kaWZ5X25pY192cG9ydF9ub2RlX2d1aWQoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNZWxsYW5veCBtbHg1IGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGEzOTM0NTA5MjJmOTk2ZGFiZDIzNjM3NWZmNzRkNmY5MWY5NDA1ODUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxMCAwOTo0OToyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc2QuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc2QuYwppbmRleCBlZTJmZGVmYTE5NDVmLi40Y2RjNTBjZDZmMDM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3NkLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zZC5jCkBAIC0xOSw3ICYjNDM7MTksNyBAQAogCiBzdHJ1Y3QgbWx4NV9zZCB7CiAJdTMyIGdyb3VwX2lkOwotCXU4IGhvc3RfYnVzZXM7CiYjNDM7CXU4IGdyb3VwX3NpemU7CiAJc3RydWN0IG1seDVfZGV2Y29tX2NvbXBfZGV2ICpkZXZjb207CiAJc3RydWN0IGRlbnRyeSAqZGZzOwogCXU4IHN0YXRlOwpAQCAtNDYsMTQgJiM0Mzs0NiwxNCBAQCBlbnVtIG1seDVfc2Rfc3RhdGUgewogCU1MWDVfU0RfU1RBVEVfVVAsCiB9OwogCi1zdGF0aWMgaW50IG1seDVfc2RfZ2V0X2hvc3RfYnVzZXMoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldikKJiM0MztzdGF0aWMgaW50IG1seDVfc2RfZ2V0X2dyb3VwX3NpemUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgbWx4NV9zZCAqc2QgPSBtbHg1X2dldF9zZChkZXYpOwogCiAJaWYgKCFzZCkKIAkJcmV0dXJuIDE7CiAKLQlyZXR1cm4gc2QtJmd0O2hvc3RfYnVzZXM7CiYjNDM7CXJldHVybiBzZC0mZ3Q7Z3JvdXBfc2l6ZTsKIH0KIAogc3RydWN0IG1seDVfY29yZV9kZXYgKm1seDVfc2RfZ2V0X3ByaW1hcnkoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldikKQEAgLTEwNyw3ICYjNDM7MTA3LDcgQEAgaW50IG1seDVfc2RfcGZfbnVtX2dldChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KQogCQlpZiAocG9zID09IGRldikKIAkJCWJyZWFrOwogCi0JcmV0dXJuIHBmX251bSAqIHNkLSZndDtob3N0X2J1c2VzICYjNDM7IGk7CiYjNDM7CXJldHVybiBwZl9udW0gKiBzZC0mZ3Q7Z3JvdXBfc2l6ZSAmIzQzOyBpOwogfQogCiBzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqCkBAIC0xMTgsNyAmIzQzOzExOCw3IEBAIG1seDVfc2RfcHJpbWFyeV9nZXRfcGVlcihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqcHJpbWFyeSwgaW50IGlkeCkKIAlpZiAoaWR4ID09IDApCiAJCXJldHVybiBwcmltYXJ5OwogCi0JaWYgKGlkeCAmZ3Q7PSBtbHg1X3NkX2dldF9ob3N0X2J1c2VzKHByaW1hcnkpKQomIzQzOwlpZiAoaWR4ICZndDs9IG1seDVfc2RfZ2V0X2dyb3VwX3NpemUocHJpbWFyeSkpCiAJCXJldHVybiBOVUxMOwogCiAJc2QgPSBtbHg1X2dldF9zZChwcmltYXJ5KTsKQEAgLTEzMCw3ICYjNDM7MTMwLDcgQEAgaW50IG1seDVfc2RfY2hfaXhfZ2V0X2Rldl9peChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBpbnQgY2hfaXgpCiAJaWYgKGlzX21kZXZfc3dpdGNoZGV2X21vZGUoZGV2KSkKIAkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gY2hfaXggJSBtbHg1X3NkX2dldF9ob3N0X2J1c2VzKGRldik7CiYjNDM7CXJldHVybiBjaF9peCAlIG1seDVfc2RfZ2V0X2dyb3VwX3NpemUoZGV2KTsKIH0KIAogaW50IG1seDVfc2RfY2hfaXhfZ2V0X3ZlY19peChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBpbnQgY2hfaXgpCkBAIC0xMzgsNyAmIzQzOzEzOCw3IEBAIGludCBtbHg1X3NkX2NoX2l4X2dldF92ZWNfaXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgaW50IGNoX2l4KQogCWlmIChpc19tZGV2X3N3aXRjaGRldl9tb2RlKGRldikpCiAJCXJldHVybiBjaF9peDsKIAotCXJldHVybiBjaF9peCAvIG1seDVfc2RfZ2V0X2hvc3RfYnVzZXMoZGV2KTsKJiM0MzsJcmV0dXJuIGNoX2l4IC8gbWx4NV9zZF9nZXRfZ3JvdXBfc2l6ZShkZXYpOwogfQogCiBzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWx4NV9zZF9jaF9peF9nZXRfZGV2KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpwcmltYXJ5LCBpbnQgY2hfaXgpCkBAIC0xNjQsNyAmIzQzOzE2NCw3IEBAIHN0YXRpYyBib29sIGZ0X2NyZWF0ZV9hbGlhc19zdXBwb3J0ZWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldikKIH0KIAogc3RhdGljIGludCBtbHg1X3F1ZXJ5X3NkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGJvb2wgKnNkbSwKLQkJCSB1OCAqaG9zdF9idXNlcykKJiM0MzsJCQkgdTggKmdyb3VwX3NpemUpCiB7CiAJdTMyIG91dFtNTFg1X1NUX1NaX0RXKG1waXJfcmVnKV07CiAJaW50IGVycjsKQEAgLTE3NCw3ICYjNDM7MTc0LDcgQEAgc3RhdGljIGludCBtbHg1X3F1ZXJ5X3NkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGJvb2wgKnNkbSwKIAkJcmV0dXJuIGVycjsKIAogCSpzZG0gPSBNTFg1X0dFVChtcGlyX3JlZywgb3V0LCBzZG0pOwotCSpob3N0X2J1c2VzID0gTUxYNV9HRVQobXBpcl9yZWcsIG91dCwgaG9zdF9idXNlcyk7CiYjNDM7CSpncm91cF9zaXplID0gTUxYNV9HRVQobXBpcl9yZWcsIG91dCwgaG9zdF9idXNlcyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE4NCwxMCAmIzQzOzE4NCwxMCBAQCBzdGF0aWMgdTMyIG1seDVfc2RfZ3JvdXBfaWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTggc2RfZ3JvdXApCiAJcmV0dXJuICh1MzIpKChNTFg1X0NBUF9HRU4oZGV2LCBuYXRpdmVfcG9ydF9udW0pICZsdDsmbHQ7IDgpIHwgc2RfZ3JvdXApOwogfQogCi1zdGF0aWMgYm9vbCBtbHg1X3NkX2NhcHNfc3VwcG9ydGVkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHU4IGhvc3RfYnVzZXMpCiYjNDM7c3RhdGljIGJvb2wgbWx4NV9zZF9jYXBzX3N1cHBvcnRlZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1OCBncm91cF9zaXplKQogewogCS8qIEhvbm9yIHRoZSBTVyBpbXBsZW1lbnRhdGlvbiBsaW1pdCAqLwotCWlmIChob3N0X2J1c2VzICZndDsgTUxYNV9TRF9NQVhfR1JPVVBfU1opCiYjNDM7CWlmIChncm91cF9zaXplICZndDsgTUxYNV9TRF9NQVhfR1JPVVBfU1opCiAJCXJldHVybiBmYWxzZTsKIAogCS8qIERpc2Nvbm5lY3Qgc2Vjb25kYXJpZXMgZnJvbSB0aGUgbmV0d29yayAqLwpAQCAtMjAwLDcgJiM0MzsyMDAsNyBAQCBzdGF0aWMgYm9vbCBtbHg1X3NkX2NhcHNfc3VwcG9ydGVkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHU4IGhvc3RfYnVzZXMpCiAJLyogUlggc3RlZXJpbmcgZnJvbSBwcmltYXJ5IHRvIHNlY29uZGFyaWVzICovCiAJaWYgKCFNTFg1X0NBUF9HRU4oZGV2LCBjcm9zc192aGNhX3JxdCkpCiAJCXJldHVybiBmYWxzZTsKLQlpZiAoaG9zdF9idXNlcyAmZ3Q7IE1MWDVfQ0FQX0dFTl8yKGRldiwgbWF4X3JxdF92aGNhX2lkKSkKJiM0MzsJaWYgKGdyb3VwX3NpemUgJmd0OyBNTFg1X0NBUF9HRU5fMihkZXYsIG1heF9ycXRfdmhjYV9pZCkpCiAJCXJldHVybiBmYWxzZTsKIAogCS8qIFRYIHN0ZWVyaW5nIGZyb20gc2Vjb25kYXJpZXMgdG8gcHJpbWFyeSAqLwpAQCAtMjE0LDcgJiM0MzsyMTQsNyBAQCBzdGF0aWMgYm9vbCBtbHg1X3NkX2NhcHNfc3VwcG9ydGVkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHU4IGhvc3RfYnVzZXMpCiAKIGJvb2wgbWx4NV9zZF9pc19zdXBwb3J0ZWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldikKIHsKLQl1OCBob3N0X2J1c2VzLCBzZF9ncm91cDsKJiM0MzsJdTggZ3JvdXBfc2l6ZSA9IFU4X01BWCwgc2RfZ3JvdXA7CiAJYm9vbCBzZG07CiAJaW50IGVycjsKIApAQCAtMjIyLDIzICYjNDM7MjIyLDI1IEBAIGJvb2wgbWx4NV9zZF9pc19zdXBwb3J0ZWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldikKIAlpZiAoIW1seDVfY29yZV9pc19wZihkZXYpKQogCQlyZXR1cm4gZmFsc2U7CiAKLQllcnIgPSBtbHg1X3F1ZXJ5X25pY192cG9ydF9zZF9ncm91cChkZXYsICZhbXA7c2RfZ3JvdXApOwotCWlmIChlcnIgfHwgIXNkX2dyb3VwKQomIzQzOwllcnIgPSBtbHg1X3F1ZXJ5X25pY192cG9ydF9zZF9ncm91cChkZXYsICZhbXA7c2RfZ3JvdXAsICZhbXA7Z3JvdXBfc2l6ZSk7CiYjNDM7CWlmIChlcnIgfHwgIXNkX2dyb3VwIHx8IGdyb3VwX3NpemUgJmx0OyBNTFg1X1NEX01JTl9HUk9VUF9TWikKIAkJcmV0dXJuIGZhbHNlOwogCi0JaWYgKCFNTFg1X0NBUF9NQ0FNX1JFRyhkZXYsIG1waXIpKQotCQlyZXR1cm4gZmFsc2U7CiYjNDM7CWlmIChncm91cF9zaXplID09IFU4X01BWCkgewomIzQzOwkJaWYgKCFNTFg1X0NBUF9NQ0FNX1JFRyhkZXYsIG1waXIpKQomIzQzOwkJCXJldHVybiBmYWxzZTsKIAotCWVyciA9IG1seDVfcXVlcnlfc2QoZGV2LCAmYW1wO3NkbSwgJmFtcDtob3N0X2J1c2VzKTsKLQlpZiAoZXJyIHx8ICFzZG0pCi0JCXJldHVybiBmYWxzZTsKJiM0MzsJCWVyciA9IG1seDVfcXVlcnlfc2QoZGV2LCAmYW1wO3NkbSwgJmFtcDtncm91cF9zaXplKTsKJiM0MzsJCWlmIChlcnIgfHwgIXNkbSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KIAotCXJldHVybiBtbHg1X3NkX2NhcHNfc3VwcG9ydGVkKGRldiwgaG9zdF9idXNlcyk7CiYjNDM7CXJldHVybiBtbHg1X3NkX2NhcHNfc3VwcG9ydGVkKGRldiwgZ3JvdXBfc2l6ZSk7CiB9CiAKIHN0YXRpYyBpbnQgc2RfaW5pdChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KQogewotCXU4IGhvc3RfYnVzZXMsIHNkX2dyb3VwOwomIzQzOwl1OCBncm91cF9zaXplID0gVThfTUFYLCBzZF9ncm91cDsKIAlzdHJ1Y3QgbWx4NV9zZCAqc2Q7CiAJdTMyIGdyb3VwX2lkOwogCWJvb2wgc2RtOwpAQCAtMjQ4LDI2ICYjNDM7MjUwLDI3IEBAIHN0YXRpYyBpbnQgc2RfaW5pdChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KQogCWlmICghbWx4NV9jb3JlX2lzX3BmKGRldikpCiAJCXJldHVybiAwOwogCi0JZXJyID0gbWx4NV9xdWVyeV9uaWNfdnBvcnRfc2RfZ3JvdXAoZGV2LCAmYW1wO3NkX2dyb3VwKTsKJiM0MzsJZXJyID0gbWx4NV9xdWVyeV9uaWNfdnBvcnRfc2RfZ3JvdXAoZGV2LCAmYW1wO3NkX2dyb3VwLCAmYW1wO2dyb3VwX3NpemUpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlpZiAoIXNkX2dyb3VwKQomIzQzOwlpZiAoIXNkX2dyb3VwIHx8IGdyb3VwX3NpemUgJmx0OyBNTFg1X1NEX01JTl9HUk9VUF9TWikKIAkJcmV0dXJuIDA7CiAKLQlpZiAoIU1MWDVfQ0FQX01DQU1fUkVHKGRldiwgbXBpcikpCi0JCXJldHVybiAwOwomIzQzOwlpZiAoZ3JvdXBfc2l6ZSA9PSBVOF9NQVgpIHsKJiM0MzsJCWlmICghTUxYNV9DQVBfTUNBTV9SRUcoZGV2LCBtcGlyKSkKJiM0MzsJCQlyZXR1cm4gMDsKIAotCWVyciA9IG1seDVfcXVlcnlfc2QoZGV2LCAmYW1wO3NkbSwgJmFtcDtob3N0X2J1c2VzKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JaWYgKCFzZG0pCi0JCXJldHVybiAwOwomIzQzOwkJZXJyID0gbWx4NV9xdWVyeV9zZChkZXYsICZhbXA7c2RtLCAmYW1wO2dyb3VwX3NpemUpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwogCiYjNDM7CQlpZiAoIXNkbSkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJfQogCWdyb3VwX2lkID0gbWx4NV9zZF9ncm91cF9pZChkZXYsIHNkX2dyb3VwKTsKIAotCWlmICghbWx4NV9zZF9jYXBzX3N1cHBvcnRlZChkZXYsIGhvc3RfYnVzZXMpKSB7CiYjNDM7CWlmICghbWx4NV9zZF9jYXBzX3N1cHBvcnRlZChkZXYsIGdyb3VwX3NpemUpKSB7CiAJCXNkX3dhcm4oZGV2LCAmIzM0O2NhbiYjMzk7dCBzdXBwb3J0IHJlcXVlc3RlZCBuZXRkZXYgY29tYmluaW5nIGZvciBncm91cCBpZCAweCV4LCBza2lwcGluZ1xuJiMzNDssCiAJCQlncm91cF9pZCk7CiAJCXJldHVybiAwOwpAQCAtMjc3LDcgJiM0MzsyODAsNyBAQCBzdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldikKIAlpZiAoIXNkKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXNkLSZndDtob3N0X2J1c2VzID0gaG9zdF9idXNlczsKJiM0MzsJc2QtJmd0O2dyb3VwX3NpemUgPSBncm91cF9zaXplOwogCXNkLSZndDtncm91cF9pZCA9IGdyb3VwX2lkOwogCiAJbWx4NV9zZXRfc2QoZGV2LCBzZCk7CkBAIC01NDAsNyAmIzQzOzU0Myw3IEBAIHN0YXRpYyBpbnQgc2RfcmVnaXN0ZXIoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldikKIAlzZC0mZ3Q7ZGV2Y29tID0gZGV2Y29tOwogCiAJbWx4NV9kZXZjb21fY29tcF9sb2NrKGRldmNvbSk7Ci0JaWYgKG1seDVfZGV2Y29tX2NvbXBfZ2V0X3NpemUoZGV2Y29tKSAhPSBzZC0mZ3Q7aG9zdF9idXNlcyB8fAomIzQzOwlpZiAobWx4NV9kZXZjb21fY29tcF9nZXRfc2l6ZShkZXZjb20pICE9IHNkLSZndDtncm91cF9zaXplIHx8CiAJICAgIG1seDVfZGV2Y29tX2NvbXBfaXNfcmVhZHkoZGV2Y29tKSkKIAkJZ290byBvdXQ7CiAKQEAgLTU3Niw3ICYjNDM7NTc5LDcgQEAgc3RhdGljIGludCBzZF9yZWdpc3RlcihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KQogCQkJCSAgICAgIERFVkNPTV9DQU5UX0ZBSUwsIHByaW1hcnkpOwogCiAJcHJpbWFyeV9zZCA9IG1seDVfZ2V0X3NkKHByaW1hcnkpOwotCWlmIChwcmltYXJ5X3NkLSZndDtuZXh0X3NlY29uZGFyeV9pZHggJiM0MzsgMSA9PSBzZC0mZ3Q7aG9zdF9idXNlcykKJiM0MzsJaWYgKHByaW1hcnlfc2QtJmd0O25leHRfc2Vjb25kYXJ5X2lkeCAmIzQzOyAxID09IHNkLSZndDtncm91cF9zaXplKQogCQltbHg1X2RldmNvbV9jb21wX3NldF9yZWFkeShkZXZjb20sIHRydWUpOwogb3V0OgogCW1seDVfZGV2Y29tX2NvbXBfdW5sb2NrKGRldmNvbSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3NkLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3NkLmgKaW5kZXggY2I4OGJmMzQwNzlhZC4uYmM4ZGJjMjk5MDcwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc2QuaApAQCAtNiw2ICYjNDM7Niw3IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwogCiYjNDM7I2RlZmluZSBNTFg1X1NEX01JTl9HUk9VUF9TWiAyCiAjZGVmaW5lIE1MWDVfU0RfTUFYX0dST1VQX1NaIDIKIAogc3RydWN0IG1seDVfc2Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvdnBvcnQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS92cG9ydC5jCmluZGV4IDM2NzZlMjZhYzZiMDkuLjNkODY1MTBhZjYxNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS92cG9ydC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS92cG9ydC5jCkBAIC01NTAsNyAmIzQzOzU1MCw4IEBAIGludCBtbHg1X3F1ZXJ5X25pY192cG9ydF9zeXN0ZW1faW1hZ2VfZ3VpZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiwKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG1seDVfcXVlcnlfbmljX3Zwb3J0X3N5c3RlbV9pbWFnZV9ndWlkKTsKIAotaW50IG1seDVfcXVlcnlfbmljX3Zwb3J0X3NkX2dyb3VwKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LCB1OCAqc2RfZ3JvdXApCiYjNDM7aW50IG1seDVfcXVlcnlfbmljX3Zwb3J0X3NkX2dyb3VwKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LCB1OCAqc2RfZ3JvdXAsCiYjNDM7CQkJCSAgdTggKnNkX2dyb3VwX3NpemUpCiB7CiAJaW50IG91dGxlbiA9IE1MWDVfU1RfU1pfQllURVMocXVlcnlfbmljX3Zwb3J0X2NvbnRleHRfb3V0KTsKIAl1MzIgKm91dDsKQEAgLTU2Niw2ICYjNDM7NTY3LDkgQEAgaW50IG1seDVfcXVlcnlfbmljX3Zwb3J0X3NkX2dyb3VwKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LCB1OCAqc2RfZ3JvdXApCiAKIAkqc2RfZ3JvdXAgPSBNTFg1X0dFVChxdWVyeV9uaWNfdnBvcnRfY29udGV4dF9vdXQsIG91dCwKIAkJCSAgICAgbmljX3Zwb3J0X2NvbnRleHQuc2RfZ3JvdXApOwomIzQzOwlpZiAoTUxYNV9DQVBfR0VOKG1kZXYsIHNkX2dyb3VwX3NpemUpKQomIzQzOwkJKnNkX2dyb3VwX3NpemUgPSBNTFg1X0dFVChxdWVyeV9uaWNfdnBvcnRfY29udGV4dF9vdXQsIG91dCwKJiM0MzsJCQkJCSAgbmljX3Zwb3J0X2NvbnRleHQuc2RfZ3JvdXBfc2l6ZSk7CiBvdXQ6CiAJa3ZmcmVlKG91dCk7CiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWx4NS92cG9ydC5oIGIvaW5jbHVkZS9saW51eC9tbHg1L3Zwb3J0LmgKaW5kZXggZWUzNGQzZWQzMzVmMy4uNTc3MTY4YTRjYTBjOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbHg1L3Zwb3J0LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbHg1L3Zwb3J0LmgKQEAgLTc4LDcgJiM0Mzs3OCw4IEBAIGludCBtbHg1X3F1ZXJ5X25pY192cG9ydF9tdHUoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsIHUxNiAqbXR1KTsKIGludCBtbHg1X21vZGlmeV9uaWNfdnBvcnRfbXR1KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LCB1MTYgbXR1KTsKIGludCBtbHg1X3F1ZXJ5X25pY192cG9ydF9zeXN0ZW1faW1hZ2VfZ3VpZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiwKIAkJCQkJICAgdTY0ICpzeXN0ZW1faW1hZ2VfZ3VpZCk7Ci1pbnQgbWx4NV9xdWVyeV9uaWNfdnBvcnRfc2RfZ3JvdXAoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsIHU4ICpzZF9ncm91cCk7CiYjNDM7aW50IG1seDVfcXVlcnlfbmljX3Zwb3J0X3NkX2dyb3VwKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LCB1OCAqc2RfZ3JvdXAsCiYjNDM7CQkJCSAgdTggKnNkX2dyb3VwX3NpemUpOwogaW50IG1seDVfcXVlcnlfbmljX3Zwb3J0X25vZGVfZ3VpZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiwKIAkJCQkgICB1MTYgdnBvcnQsIGJvb2wgb3RoZXJfdnBvcnQsIHU2NCAqbm9kZV9ndWlkKTsKIGludCBtbHg1X21vZGlmeV9uaWNfdnBvcnRfbm9kZV9ndWlkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTMxCgkJCQkJCQlvdXRwdXQ6IDYxCgkJCQkJCQl0aG91Z2h0czogNDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBEZWNpc2lvbiBmb3IgTWVsbGFub3ggbWx4NSBEcml2ZXIgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSBpbXBhY3RpbmcgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc2QuY2AsIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvdnBvcnQuY2AsIGFuZCBgaW5jbHVkZS9saW51eC9tbHg1L3Zwb3J0LmhgLiBUaGlzIGlzIGNsZWFybHkgdGFyZ2V0aW5nIHRoZSBNZWxsYW5veCBtbHg1IGRyaXZlciwgd2hpY2ggSSBrbm93IGlzIHVzZWQgZm9yIENvbm5lY3RYLTQsIC01LCAtNiwgYW5kIC03IFBDSWUgbmV0d29yayBjYXJkcy4gVGhlc2UgYXJlIGhpZ2gtcGVyZm9ybWFuY2UgU21hcnROSUNzLiBUaGUgaW5zdHJ1Y3Rpb25zIGV4cGxpY2l0bHkgc2F5IHRvIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggY29uY2VybnMgdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgdGhhdCBuZWVkIHBoeXNpY2FsIGhhcmR3YXJlLCB3aGljaCBpc24mIzM5O3QgZW11bGF0ZWQgYnkgUUVNVS4KCk5vdywgdGhlIHF1ZXN0aW9uIGlzLCBkb2VzIFFFTVUgZW11bGF0ZSBtbHg1PyBObywgaXQgZG9lc24mIzM5O3QuIFFFTVUgdXNlcyBkcml2ZXJzIGxpa2UgZTEwMDAsIHZpcnRpby1uZXQsIGFuZCB2bXhuZXQzLCBidXQgbm90IG1seDUuIFNvLCBtbHg1IGFic29sdXRlbHkgbmVlZHMgdGhlIHBoeXNpY2FsIE1lbGxhbm94IGhhcmR3YXJlLiBUaGlzIG1lYW5zLCBJJiMzOTttIG5vdCBnb2luZyB0byBiZSBhYmxlIHRvIHJlYWNoIHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciB1c2luZyBzdGFuZGFyZCBRRU1VLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCYjMzk7cyByZXZpc2l0IHRoZSBmaWxlcyBpbXBhY3RlZDogYGRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc2QuY2AuIFllYWgsIHRoaXMgaXMgY29yZSBtbHg1IGRyaXZlciBjb2RlLCBubyBkb3VidCBhYm91dCBpdC4KClRoZXJlZm9yZSwgbXkgZGVjaXNpb24gaXMgKipgV29ydGhGdXp6aW5nPWZhbHNlYCoqIGFuZCB0aGUgcmVhc29uaW5nIEkmIzM5O20gdXNpbmcgaXMgJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1lbGxhbm94IG1seDUgZHJpdmVyLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMuJiMzNDsKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNZWxsYW5veCBtbHg1IGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1lbGxhbm94IG1seDUgZHJpdmVyLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0OToyNy4xMTAzNjg5OTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE2NTYwMzIyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNZWxsYW5veCBtbHg1IGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDk6MjcuMTEwMzc2Mjc0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTczOTEzNjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTM5MzQ1MDkyMmY5OTZkYWJkMjM2Mzc1ZmY3NGQ2ZjkxZjk0MDU4NVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAxMCAwOTo0OToyNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3NkLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3NkLmNcXG5pbmRleCBlZTJmZGVmYTE5NDVmLi40Y2RjNTBjZDZmMDM4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc2QuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc2QuY1xcbkBAIC0xOSw3ICsxOSw3IEBAXFxuIFxcbiBzdHJ1Y3QgbWx4NV9zZCB7XFxuIFxcdHUzMiBncm91cF9pZDtcXG4tXFx0dTggaG9zdF9idXNlcztcXG4rXFx0dTggZ3JvdXBfc2l6ZTtcXG4gXFx0c3RydWN0IG1seDVfZGV2Y29tX2NvbXBfZGV2ICpkZXZjb207XFxuIFxcdHN0cnVjdCBkZW50cnkgKmRmcztcXG4gXFx0dTggc3RhdGU7XFxuQEAgLTQ2LDE0ICs0NiwxNCBAQCBlbnVtIG1seDVfc2Rfc3RhdGUge1xcbiBcXHRNTFg1X1NEX1NUQVRFX1VQLFxcbiB9O1xcbiBcXG4tc3RhdGljIGludCBtbHg1X3NkX2dldF9ob3N0X2J1c2VzKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXFxuK3N0YXRpYyBpbnQgbWx4NV9zZF9nZXRfZ3JvdXBfc2l6ZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBtbHg1X3NkICpzZCA9IG1seDVfZ2V0X3NkKGRldik7XFxuIFxcbiBcXHRpZiAoIXNkKVxcbiBcXHRcXHRyZXR1cm4gMTtcXG4gXFxuLVxcdHJldHVybiBzZC1cXHUwMDNlaG9zdF9idXNlcztcXG4rXFx0cmV0dXJuIHNkLVxcdTAwM2Vncm91cF9zaXplO1xcbiB9XFxuIFxcbiBzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWx4NV9zZF9nZXRfcHJpbWFyeShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbkBAIC0xMDcsNyArMTA3LDcgQEAgaW50IG1seDVfc2RfcGZfbnVtX2dldChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbiBcXHRcXHRpZiAocG9zID09IGRldilcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbi1cXHRyZXR1cm4gcGZfbnVtICogc2QtXFx1MDAzZWhvc3RfYnVzZXMgKyBpO1xcbitcXHRyZXR1cm4gcGZfbnVtICogc2QtXFx1MDAzZWdyb3VwX3NpemUgKyBpO1xcbiB9XFxuIFxcbiBzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqXFxuQEAgLTExOCw3ICsxMTgsNyBAQCBtbHg1X3NkX3ByaW1hcnlfZ2V0X3BlZXIoc3RydWN0IG1seDVfY29yZV9kZXYgKnByaW1hcnksIGludCBpZHgpXFxuIFxcdGlmIChpZHggPT0gMClcXG4gXFx0XFx0cmV0dXJuIHByaW1hcnk7XFxuIFxcbi1cXHRpZiAoaWR4IFxcdTAwM2U9IG1seDVfc2RfZ2V0X2hvc3RfYnVzZXMocHJpbWFyeSkpXFxuK1xcdGlmIChpZHggXFx1MDAzZT0gbWx4NV9zZF9nZXRfZ3JvdXBfc2l6ZShwcmltYXJ5KSlcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbiBcXHRzZCA9IG1seDVfZ2V0X3NkKHByaW1hcnkpO1xcbkBAIC0xMzAsNyArMTMwLDcgQEAgaW50IG1seDVfc2RfY2hfaXhfZ2V0X2Rldl9peChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBpbnQgY2hfaXgpXFxuIFxcdGlmIChpc19tZGV2X3N3aXRjaGRldl9tb2RlKGRldikpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0cmV0dXJuIGNoX2l4ICUgbWx4NV9zZF9nZXRfaG9zdF9idXNlcyhkZXYpO1xcbitcXHRyZXR1cm4gY2hfaXggJSBtbHg1X3NkX2dldF9ncm91cF9zaXplKGRldik7XFxuIH1cXG4gXFxuIGludCBtbHg1X3NkX2NoX2l4X2dldF92ZWNfaXgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgaW50IGNoX2l4KVxcbkBAIC0xMzgsNyArMTM4LDcgQEAgaW50IG1seDVfc2RfY2hfaXhfZ2V0X3ZlY19peChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBpbnQgY2hfaXgpXFxuIFxcdGlmIChpc19tZGV2X3N3aXRjaGRldl9tb2RlKGRldikpXFxuIFxcdFxcdHJldHVybiBjaF9peDtcXG4gXFxuLVxcdHJldHVybiBjaF9peCAvIG1seDVfc2RfZ2V0X2hvc3RfYnVzZXMoZGV2KTtcXG4rXFx0cmV0dXJuIGNoX2l4IC8gbWx4NV9zZF9nZXRfZ3JvdXBfc2l6ZShkZXYpO1xcbiB9XFxuIFxcbiBzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWx4NV9zZF9jaF9peF9nZXRfZGV2KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpwcmltYXJ5LCBpbnQgY2hfaXgpXFxuQEAgLTE2NCw3ICsxNjQsNyBAQCBzdGF0aWMgYm9vbCBmdF9jcmVhdGVfYWxpYXNfc3VwcG9ydGVkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgbWx4NV9xdWVyeV9zZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBib29sICpzZG0sXFxuLVxcdFxcdFxcdCB1OCAqaG9zdF9idXNlcylcXG4rXFx0XFx0XFx0IHU4ICpncm91cF9zaXplKVxcbiB7XFxuIFxcdHUzMiBvdXRbTUxYNV9TVF9TWl9EVyhtcGlyX3JlZyldO1xcbiBcXHRpbnQgZXJyO1xcbkBAIC0xNzQsNyArMTc0LDcgQEAgc3RhdGljIGludCBtbHg1X3F1ZXJ5X3NkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGJvb2wgKnNkbSxcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuIFxcdCpzZG0gPSBNTFg1X0dFVChtcGlyX3JlZywgb3V0LCBzZG0pO1xcbi1cXHQqaG9zdF9idXNlcyA9IE1MWDVfR0VUKG1waXJfcmVnLCBvdXQsIGhvc3RfYnVzZXMpO1xcbitcXHQqZ3JvdXBfc2l6ZSA9IE1MWDVfR0VUKG1waXJfcmVnLCBvdXQsIGhvc3RfYnVzZXMpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMTg0LDEwICsxODQsMTAgQEAgc3RhdGljIHUzMiBtbHg1X3NkX2dyb3VwX2lkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHU4IHNkX2dyb3VwKVxcbiBcXHRyZXR1cm4gKHUzMikoKE1MWDVfQ0FQX0dFTihkZXYsIG5hdGl2ZV9wb3J0X251bSkgXFx1MDAzY1xcdTAwM2MgOCkgfCBzZF9ncm91cCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sIG1seDVfc2RfY2Fwc19zdXBwb3J0ZWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTggaG9zdF9idXNlcylcXG4rc3RhdGljIGJvb2wgbWx4NV9zZF9jYXBzX3N1cHBvcnRlZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1OCBncm91cF9zaXplKVxcbiB7XFxuIFxcdC8qIEhvbm9yIHRoZSBTVyBpbXBsZW1lbnRhdGlvbiBsaW1pdCAqL1xcbi1cXHRpZiAoaG9zdF9idXNlcyBcXHUwMDNlIE1MWDVfU0RfTUFYX0dST1VQX1NaKVxcbitcXHRpZiAoZ3JvdXBfc2l6ZSBcXHUwMDNlIE1MWDVfU0RfTUFYX0dST1VQX1NaKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHQvKiBEaXNjb25uZWN0IHNlY29uZGFyaWVzIGZyb20gdGhlIG5ldHdvcmsgKi9cXG5AQCAtMjAwLDcgKzIwMCw3IEBAIHN0YXRpYyBib29sIG1seDVfc2RfY2Fwc19zdXBwb3J0ZWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTggaG9zdF9idXNlcylcXG4gXFx0LyogUlggc3RlZXJpbmcgZnJvbSBwcmltYXJ5IHRvIHNlY29uZGFyaWVzICovXFxuIFxcdGlmICghTUxYNV9DQVBfR0VOKGRldiwgY3Jvc3NfdmhjYV9ycXQpKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLVxcdGlmIChob3N0X2J1c2VzIFxcdTAwM2UgTUxYNV9DQVBfR0VOXzIoZGV2LCBtYXhfcnF0X3ZoY2FfaWQpKVxcbitcXHRpZiAoZ3JvdXBfc2l6ZSBcXHUwMDNlIE1MWDVfQ0FQX0dFTl8yKGRldiwgbWF4X3JxdF92aGNhX2lkKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gXFx0LyogVFggc3RlZXJpbmcgZnJvbSBzZWNvbmRhcmllcyB0byBwcmltYXJ5ICovXFxuQEAgLTIxNCw3ICsyMTQsNyBAQCBzdGF0aWMgYm9vbCBtbHg1X3NkX2NhcHNfc3VwcG9ydGVkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHU4IGhvc3RfYnVzZXMpXFxuIFxcbiBib29sIG1seDVfc2RfaXNfc3VwcG9ydGVkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXFxuIHtcXG4tXFx0dTggaG9zdF9idXNlcywgc2RfZ3JvdXA7XFxuK1xcdHU4IGdyb3VwX3NpemUgPSBVOF9NQVgsIHNkX2dyb3VwO1xcbiBcXHRib29sIHNkbTtcXG4gXFx0aW50IGVycjtcXG4gXFxuQEAgLTIyMiwyMyArMjIyLDI1IEBAIGJvb2wgbWx4NV9zZF9pc19zdXBwb3J0ZWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcXG4gXFx0aWYgKCFtbHg1X2NvcmVfaXNfcGYoZGV2KSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4tXFx0ZXJyID0gbWx4NV9xdWVyeV9uaWNfdnBvcnRfc2RfZ3JvdXAoZGV2LCBcXHUwMDI2c2RfZ3JvdXApO1xcbi1cXHRpZiAoZXJyIHx8ICFzZF9ncm91cClcXG4rXFx0ZXJyID0gbWx4NV9xdWVyeV9uaWNfdnBvcnRfc2RfZ3JvdXAoZGV2LCBcXHUwMDI2c2RfZ3JvdXAsIFxcdTAwMjZncm91cF9zaXplKTtcXG4rXFx0aWYgKGVyciB8fCAhc2RfZ3JvdXAgfHwgZ3JvdXBfc2l6ZSBcXHUwMDNjIE1MWDVfU0RfTUlOX0dST1VQX1NaKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRpZiAoIU1MWDVfQ0FQX01DQU1fUkVHKGRldiwgbXBpcikpXFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0aWYgKGdyb3VwX3NpemUgPT0gVThfTUFYKSB7XFxuK1xcdFxcdGlmICghTUxYNV9DQVBfTUNBTV9SRUcoZGV2LCBtcGlyKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4tXFx0ZXJyID0gbWx4NV9xdWVyeV9zZChkZXYsIFxcdTAwMjZzZG0sIFxcdTAwMjZob3N0X2J1c2VzKTtcXG4tXFx0aWYgKGVyciB8fCAhc2RtKVxcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdGVyciA9IG1seDVfcXVlcnlfc2QoZGV2LCBcXHUwMDI2c2RtLCBcXHUwMDI2Z3JvdXBfc2l6ZSk7XFxuK1xcdFxcdGlmIChlcnIgfHwgIXNkbSlcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuIFxcbi1cXHRyZXR1cm4gbWx4NV9zZF9jYXBzX3N1cHBvcnRlZChkZXYsIGhvc3RfYnVzZXMpO1xcbitcXHRyZXR1cm4gbWx4NV9zZF9jYXBzX3N1cHBvcnRlZChkZXYsIGdyb3VwX3NpemUpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcXG4ge1xcbi1cXHR1OCBob3N0X2J1c2VzLCBzZF9ncm91cDtcXG4rXFx0dTggZ3JvdXBfc2l6ZSA9IFU4X01BWCwgc2RfZ3JvdXA7XFxuIFxcdHN0cnVjdCBtbHg1X3NkICpzZDtcXG4gXFx0dTMyIGdyb3VwX2lkO1xcbiBcXHRib29sIHNkbTtcXG5AQCAtMjQ4LDI2ICsyNTAsMjcgQEAgc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXFxuIFxcdGlmICghbWx4NV9jb3JlX2lzX3BmKGRldikpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0ZXJyID0gbWx4NV9xdWVyeV9uaWNfdnBvcnRfc2RfZ3JvdXAoZGV2LCBcXHUwMDI2c2RfZ3JvdXApO1xcbitcXHRlcnIgPSBtbHg1X3F1ZXJ5X25pY192cG9ydF9zZF9ncm91cChkZXYsIFxcdTAwMjZzZF9ncm91cCwgXFx1MDAyNmdyb3VwX3NpemUpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4tXFx0aWYgKCFzZF9ncm91cClcXG4rXFx0aWYgKCFzZF9ncm91cCB8fCBncm91cF9zaXplIFxcdTAwM2MgTUxYNV9TRF9NSU5fR1JPVVBfU1opXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0aWYgKCFNTFg1X0NBUF9NQ0FNX1JFRyhkZXYsIG1waXIpKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0aWYgKGdyb3VwX3NpemUgPT0gVThfTUFYKSB7XFxuK1xcdFxcdGlmICghTUxYNV9DQVBfTUNBTV9SRUcoZGV2LCBtcGlyKSlcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHRlcnIgPSBtbHg1X3F1ZXJ5X3NkKGRldiwgXFx1MDAyNnNkbSwgXFx1MDAyNmhvc3RfYnVzZXMpO1xcbi1cXHRpZiAoZXJyKVxcbi1cXHRcXHRyZXR1cm4gZXJyO1xcbi1cXG4tXFx0aWYgKCFzZG0pXFxuLVxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRlcnIgPSBtbHg1X3F1ZXJ5X3NkKGRldiwgXFx1MDAyNnNkbSwgXFx1MDAyNmdyb3VwX3NpemUpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4rXFx0XFx0aWYgKCFzZG0pXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuIFxcdGdyb3VwX2lkID0gbWx4NV9zZF9ncm91cF9pZChkZXYsIHNkX2dyb3VwKTtcXG4gXFxuLVxcdGlmICghbWx4NV9zZF9jYXBzX3N1cHBvcnRlZChkZXYsIGhvc3RfYnVzZXMpKSB7XFxuK1xcdGlmICghbWx4NV9zZF9jYXBzX3N1cHBvcnRlZChkZXYsIGdyb3VwX3NpemUpKSB7XFxuIFxcdFxcdHNkX3dhcm4oZGV2LCBcXFwiY2FuJ3Qgc3VwcG9ydCByZXF1ZXN0ZWQgbmV0ZGV2IGNvbWJpbmluZyBmb3IgZ3JvdXAgaWQgMHgleCwgc2tpcHBpbmdcXFxcblxcXCIsXFxuIFxcdFxcdFxcdGdyb3VwX2lkKTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuQEAgLTI3Nyw3ICsyODAsNyBAQCBzdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcXG4gXFx0aWYgKCFzZClcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbi1cXHRzZC1cXHUwMDNlaG9zdF9idXNlcyA9IGhvc3RfYnVzZXM7XFxuK1xcdHNkLVxcdTAwM2Vncm91cF9zaXplID0gZ3JvdXBfc2l6ZTtcXG4gXFx0c2QtXFx1MDAzZWdyb3VwX2lkID0gZ3JvdXBfaWQ7XFxuIFxcbiBcXHRtbHg1X3NldF9zZChkZXYsIHNkKTtcXG5AQCAtNTQwLDcgKzU0Myw3IEBAIHN0YXRpYyBpbnQgc2RfcmVnaXN0ZXIoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcXG4gXFx0c2QtXFx1MDAzZWRldmNvbSA9IGRldmNvbTtcXG4gXFxuIFxcdG1seDVfZGV2Y29tX2NvbXBfbG9jayhkZXZjb20pO1xcbi1cXHRpZiAobWx4NV9kZXZjb21fY29tcF9nZXRfc2l6ZShkZXZjb20pICE9IHNkLVxcdTAwM2Vob3N0X2J1c2VzIHx8XFxuK1xcdGlmIChtbHg1X2RldmNvbV9jb21wX2dldF9zaXplKGRldmNvbSkgIT0gc2QtXFx1MDAzZWdyb3VwX3NpemUgfHxcXG4gXFx0ICAgIG1seDVfZGV2Y29tX2NvbXBfaXNfcmVhZHkoZGV2Y29tKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbkBAIC01NzYsNyArNTc5LDcgQEAgc3RhdGljIGludCBzZF9yZWdpc3RlcihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbiBcXHRcXHRcXHRcXHQgICAgICBERVZDT01fQ0FOVF9GQUlMLCBwcmltYXJ5KTtcXG4gXFxuIFxcdHByaW1hcnlfc2QgPSBtbHg1X2dldF9zZChwcmltYXJ5KTtcXG4tXFx0aWYgKHByaW1hcnlfc2QtXFx1MDAzZW5leHRfc2Vjb25kYXJ5X2lkeCArIDEgPT0gc2QtXFx1MDAzZWhvc3RfYnVzZXMpXFxuK1xcdGlmIChwcmltYXJ5X3NkLVxcdTAwM2VuZXh0X3NlY29uZGFyeV9pZHggKyAxID09IHNkLVxcdTAwM2Vncm91cF9zaXplKVxcbiBcXHRcXHRtbHg1X2RldmNvbV9jb21wX3NldF9yZWFkeShkZXZjb20sIHRydWUpO1xcbiBvdXQ6XFxuIFxcdG1seDVfZGV2Y29tX2NvbXBfdW5sb2NrKGRldmNvbSk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc2QuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc2QuaFxcbmluZGV4IGNiODhiZjM0MDc5YWQuLmJjOGRiYzI5OTA3MDQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zZC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zZC5oXFxuQEAgLTYsNiArNiw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4gXFxuKyNkZWZpbmUgTUxYNV9TRF9NSU5fR1JPVVBfU1ogMlxcbiAjZGVmaW5lIE1MWDVfU0RfTUFYX0dST1VQX1NaIDJcXG4gXFxuIHN0cnVjdCBtbHg1X3NkO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvdnBvcnQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS92cG9ydC5jXFxuaW5kZXggMzY3NmUyNmFjNmIwOS4uM2Q4NjUxMGFmNjE1MyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvdnBvcnQuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS92cG9ydC5jXFxuQEAgLTU1MCw3ICs1NTAsOCBAQCBpbnQgbWx4NV9xdWVyeV9uaWNfdnBvcnRfc3lzdGVtX2ltYWdlX2d1aWQoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwobWx4NV9xdWVyeV9uaWNfdnBvcnRfc3lzdGVtX2ltYWdlX2d1aWQpO1xcbiBcXG4taW50IG1seDVfcXVlcnlfbmljX3Zwb3J0X3NkX2dyb3VwKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LCB1OCAqc2RfZ3JvdXApXFxuK2ludCBtbHg1X3F1ZXJ5X25pY192cG9ydF9zZF9ncm91cChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiwgdTggKnNkX2dyb3VwLFxcbitcXHRcXHRcXHRcXHQgIHU4ICpzZF9ncm91cF9zaXplKVxcbiB7XFxuIFxcdGludCBvdXRsZW4gPSBNTFg1X1NUX1NaX0JZVEVTKHF1ZXJ5X25pY192cG9ydF9jb250ZXh0X291dCk7XFxuIFxcdHUzMiAqb3V0O1xcbkBAIC01NjYsNiArNTY3LDkgQEAgaW50IG1seDVfcXVlcnlfbmljX3Zwb3J0X3NkX2dyb3VwKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LCB1OCAqc2RfZ3JvdXApXFxuIFxcbiBcXHQqc2RfZ3JvdXAgPSBNTFg1X0dFVChxdWVyeV9uaWNfdnBvcnRfY29udGV4dF9vdXQsIG91dCxcXG4gXFx0XFx0XFx0ICAgICBuaWNfdnBvcnRfY29udGV4dC5zZF9ncm91cCk7XFxuK1xcdGlmIChNTFg1X0NBUF9HRU4obWRldiwgc2RfZ3JvdXBfc2l6ZSkpXFxuK1xcdFxcdCpzZF9ncm91cF9zaXplID0gTUxYNV9HRVQocXVlcnlfbmljX3Zwb3J0X2NvbnRleHRfb3V0LCBvdXQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgbmljX3Zwb3J0X2NvbnRleHQuc2RfZ3JvdXBfc2l6ZSk7XFxuIG91dDpcXG4gXFx0a3ZmcmVlKG91dCk7XFxuIFxcdHJldHVybiBlcnI7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWx4NS92cG9ydC5oIGIvaW5jbHVkZS9saW51eC9tbHg1L3Zwb3J0LmhcXG5pbmRleCBlZTM0ZDNlZDMzNWYzLi41NzcxNjhhNGNhMGM4IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbWx4NS92cG9ydC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbHg1L3Zwb3J0LmhcXG5AQCAtNzgsNyArNzgsOCBAQCBpbnQgbWx4NV9xdWVyeV9uaWNfdnBvcnRfbXR1KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LCB1MTYgKm10dSk7XFxuIGludCBtbHg1X21vZGlmeV9uaWNfdnBvcnRfbXR1KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LCB1MTYgbXR1KTtcXG4gaW50IG1seDVfcXVlcnlfbmljX3Zwb3J0X3N5c3RlbV9pbWFnZV9ndWlkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHQgICB1NjQgKnN5c3RlbV9pbWFnZV9ndWlkKTtcXG4taW50IG1seDVfcXVlcnlfbmljX3Zwb3J0X3NkX2dyb3VwKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LCB1OCAqc2RfZ3JvdXApO1xcbitpbnQgbWx4NV9xdWVyeV9uaWNfdnBvcnRfc2RfZ3JvdXAoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsIHU4ICpzZF9ncm91cCxcXG4rXFx0XFx0XFx0XFx0ICB1OCAqc2RfZ3JvdXBfc2l6ZSk7XFxuIGludCBtbHg1X3F1ZXJ5X25pY192cG9ydF9ub2RlX2d1aWQoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsXFxuIFxcdFxcdFxcdFxcdCAgIHUxNiB2cG9ydCwgYm9vbCBvdGhlcl92cG9ydCwgdTY0ICpub2RlX2d1aWQpO1xcbiBpbnQgbWx4NV9tb2RpZnlfbmljX3Zwb3J0X25vZGVfZ3VpZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDk6MjguNjg3NDgwMjY0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODU4ODQ3MzkxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1lbGxhbm94IG1seDUgZHJpdmVyLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhMzkzNDUwOTIyZjk5NmRhYmQyMzYzNzVmZjc0ZDZmOTFmOTQwNTg1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMDk6NDk6MjUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3NkLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3NkLmNcbmluZGV4IGVlMmZkZWZhMTk0NWYuLjRjZGM1MGNkNmYwMzggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3NkLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc2QuY1xuQEAgLTE5LDcgKzE5LDcgQEBcbiBcbiBzdHJ1Y3QgbWx4NV9zZCB7XG4gXHR1MzIgZ3JvdXBfaWQ7XG4tXHR1OCBob3N0X2J1c2VzO1xuK1x0dTggZ3JvdXBfc2l6ZTtcbiBcdHN0cnVjdCBtbHg1X2RldmNvbV9jb21wX2RldiAqZGV2Y29tO1xuIFx0c3RydWN0IGRlbnRyeSAqZGZzO1xuIFx0dTggc3RhdGU7XG5AQCAtNDYsMTQgKzQ2LDE0IEBAIGVudW0gbWx4NV9zZF9zdGF0ZSB7XG4gXHRNTFg1X1NEX1NUQVRFX1VQLFxuIH07XG4gXG4tc3RhdGljIGludCBtbHg1X3NkX2dldF9ob3N0X2J1c2VzKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG4rc3RhdGljIGludCBtbHg1X3NkX2dldF9ncm91cF9zaXplKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG4ge1xuIFx0c3RydWN0IG1seDVfc2QgKnNkID0gbWx4NV9nZXRfc2QoZGV2KTtcbiBcbiBcdGlmICghc2QpXG4gXHRcdHJldHVybiAxO1xuIFxuLVx0cmV0dXJuIHNkLVx1MDAzZWhvc3RfYnVzZXM7XG4rXHRyZXR1cm4gc2QtXHUwMDNlZ3JvdXBfc2l6ZTtcbiB9XG4gXG4gc3RydWN0IG1seDVfY29yZV9kZXYgKm1seDVfc2RfZ2V0X3ByaW1hcnkoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbkBAIC0xMDcsNyArMTA3LDcgQEAgaW50IG1seDVfc2RfcGZfbnVtX2dldChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuIFx0XHRpZiAocG9zID09IGRldilcbiBcdFx0XHRicmVhaztcbiBcbi1cdHJldHVybiBwZl9udW0gKiBzZC1cdTAwM2Vob3N0X2J1c2VzICsgaTtcbitcdHJldHVybiBwZl9udW0gKiBzZC1cdTAwM2Vncm91cF9zaXplICsgaTtcbiB9XG4gXG4gc3RydWN0IG1seDVfY29yZV9kZXYgKlxuQEAgLTExOCw3ICsxMTgsNyBAQCBtbHg1X3NkX3ByaW1hcnlfZ2V0X3BlZXIoc3RydWN0IG1seDVfY29yZV9kZXYgKnByaW1hcnksIGludCBpZHgpXG4gXHRpZiAoaWR4ID09IDApXG4gXHRcdHJldHVybiBwcmltYXJ5O1xuIFxuLVx0aWYgKGlkeCBcdTAwM2U9IG1seDVfc2RfZ2V0X2hvc3RfYnVzZXMocHJpbWFyeSkpXG4rXHRpZiAoaWR4IFx1MDAzZT0gbWx4NV9zZF9nZXRfZ3JvdXBfc2l6ZShwcmltYXJ5KSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRzZCA9IG1seDVfZ2V0X3NkKHByaW1hcnkpO1xuQEAgLTEzMCw3ICsxMzAsNyBAQCBpbnQgbWx4NV9zZF9jaF9peF9nZXRfZGV2X2l4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGludCBjaF9peClcbiBcdGlmIChpc19tZGV2X3N3aXRjaGRldl9tb2RlKGRldikpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0cmV0dXJuIGNoX2l4ICUgbWx4NV9zZF9nZXRfaG9zdF9idXNlcyhkZXYpO1xuK1x0cmV0dXJuIGNoX2l4ICUgbWx4NV9zZF9nZXRfZ3JvdXBfc2l6ZShkZXYpO1xuIH1cbiBcbiBpbnQgbWx4NV9zZF9jaF9peF9nZXRfdmVjX2l4KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGludCBjaF9peClcbkBAIC0xMzgsNyArMTM4LDcgQEAgaW50IG1seDVfc2RfY2hfaXhfZ2V0X3ZlY19peChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBpbnQgY2hfaXgpXG4gXHRpZiAoaXNfbWRldl9zd2l0Y2hkZXZfbW9kZShkZXYpKVxuIFx0XHRyZXR1cm4gY2hfaXg7XG4gXG4tXHRyZXR1cm4gY2hfaXggLyBtbHg1X3NkX2dldF9ob3N0X2J1c2VzKGRldik7XG4rXHRyZXR1cm4gY2hfaXggLyBtbHg1X3NkX2dldF9ncm91cF9zaXplKGRldik7XG4gfVxuIFxuIHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptbHg1X3NkX2NoX2l4X2dldF9kZXYoc3RydWN0IG1seDVfY29yZV9kZXYgKnByaW1hcnksIGludCBjaF9peClcbkBAIC0xNjQsNyArMTY0LDcgQEAgc3RhdGljIGJvb2wgZnRfY3JlYXRlX2FsaWFzX3N1cHBvcnRlZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuIH1cbiBcbiBzdGF0aWMgaW50IG1seDVfcXVlcnlfc2Qoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgYm9vbCAqc2RtLFxuLVx0XHRcdCB1OCAqaG9zdF9idXNlcylcbitcdFx0XHQgdTggKmdyb3VwX3NpemUpXG4ge1xuIFx0dTMyIG91dFtNTFg1X1NUX1NaX0RXKG1waXJfcmVnKV07XG4gXHRpbnQgZXJyO1xuQEAgLTE3NCw3ICsxNzQsNyBAQCBzdGF0aWMgaW50IG1seDVfcXVlcnlfc2Qoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgYm9vbCAqc2RtLFxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuIFx0KnNkbSA9IE1MWDVfR0VUKG1waXJfcmVnLCBvdXQsIHNkbSk7XG4tXHQqaG9zdF9idXNlcyA9IE1MWDVfR0VUKG1waXJfcmVnLCBvdXQsIGhvc3RfYnVzZXMpO1xuK1x0Kmdyb3VwX3NpemUgPSBNTFg1X0dFVChtcGlyX3JlZywgb3V0LCBob3N0X2J1c2VzKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0xODQsMTAgKzE4NCwxMCBAQCBzdGF0aWMgdTMyIG1seDVfc2RfZ3JvdXBfaWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTggc2RfZ3JvdXApXG4gXHRyZXR1cm4gKHUzMikoKE1MWDVfQ0FQX0dFTihkZXYsIG5hdGl2ZV9wb3J0X251bSkgXHUwMDNjXHUwMDNjIDgpIHwgc2RfZ3JvdXApO1xuIH1cbiBcbi1zdGF0aWMgYm9vbCBtbHg1X3NkX2NhcHNfc3VwcG9ydGVkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHU4IGhvc3RfYnVzZXMpXG4rc3RhdGljIGJvb2wgbWx4NV9zZF9jYXBzX3N1cHBvcnRlZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1OCBncm91cF9zaXplKVxuIHtcbiBcdC8qIEhvbm9yIHRoZSBTVyBpbXBsZW1lbnRhdGlvbiBsaW1pdCAqL1xuLVx0aWYgKGhvc3RfYnVzZXMgXHUwMDNlIE1MWDVfU0RfTUFYX0dST1VQX1NaKVxuK1x0aWYgKGdyb3VwX3NpemUgXHUwMDNlIE1MWDVfU0RfTUFYX0dST1VQX1NaKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHQvKiBEaXNjb25uZWN0IHNlY29uZGFyaWVzIGZyb20gdGhlIG5ldHdvcmsgKi9cbkBAIC0yMDAsNyArMjAwLDcgQEAgc3RhdGljIGJvb2wgbWx4NV9zZF9jYXBzX3N1cHBvcnRlZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1OCBob3N0X2J1c2VzKVxuIFx0LyogUlggc3RlZXJpbmcgZnJvbSBwcmltYXJ5IHRvIHNlY29uZGFyaWVzICovXG4gXHRpZiAoIU1MWDVfQ0FQX0dFTihkZXYsIGNyb3NzX3ZoY2FfcnF0KSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuLVx0aWYgKGhvc3RfYnVzZXMgXHUwMDNlIE1MWDVfQ0FQX0dFTl8yKGRldiwgbWF4X3JxdF92aGNhX2lkKSlcbitcdGlmIChncm91cF9zaXplIFx1MDAzZSBNTFg1X0NBUF9HRU5fMihkZXYsIG1heF9ycXRfdmhjYV9pZCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdC8qIFRYIHN0ZWVyaW5nIGZyb20gc2Vjb25kYXJpZXMgdG8gcHJpbWFyeSAqL1xuQEAgLTIxNCw3ICsyMTQsNyBAQCBzdGF0aWMgYm9vbCBtbHg1X3NkX2NhcHNfc3VwcG9ydGVkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHU4IGhvc3RfYnVzZXMpXG4gXG4gYm9vbCBtbHg1X3NkX2lzX3N1cHBvcnRlZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuIHtcbi1cdHU4IGhvc3RfYnVzZXMsIHNkX2dyb3VwO1xuK1x0dTggZ3JvdXBfc2l6ZSA9IFU4X01BWCwgc2RfZ3JvdXA7XG4gXHRib29sIHNkbTtcbiBcdGludCBlcnI7XG4gXG5AQCAtMjIyLDIzICsyMjIsMjUgQEAgYm9vbCBtbHg1X3NkX2lzX3N1cHBvcnRlZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuIFx0aWYgKCFtbHg1X2NvcmVfaXNfcGYoZGV2KSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0ZXJyID0gbWx4NV9xdWVyeV9uaWNfdnBvcnRfc2RfZ3JvdXAoZGV2LCBcdTAwMjZzZF9ncm91cCk7XG4tXHRpZiAoZXJyIHx8ICFzZF9ncm91cClcbitcdGVyciA9IG1seDVfcXVlcnlfbmljX3Zwb3J0X3NkX2dyb3VwKGRldiwgXHUwMDI2c2RfZ3JvdXAsIFx1MDAyNmdyb3VwX3NpemUpO1xuK1x0aWYgKGVyciB8fCAhc2RfZ3JvdXAgfHwgZ3JvdXBfc2l6ZSBcdTAwM2MgTUxYNV9TRF9NSU5fR1JPVVBfU1opXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdGlmICghTUxYNV9DQVBfTUNBTV9SRUcoZGV2LCBtcGlyKSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuK1x0aWYgKGdyb3VwX3NpemUgPT0gVThfTUFYKSB7XG4rXHRcdGlmICghTUxYNV9DQVBfTUNBTV9SRUcoZGV2LCBtcGlyKSlcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRlcnIgPSBtbHg1X3F1ZXJ5X3NkKGRldiwgXHUwMDI2c2RtLCBcdTAwMjZob3N0X2J1c2VzKTtcbi1cdGlmIChlcnIgfHwgIXNkbSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHRlcnIgPSBtbHg1X3F1ZXJ5X3NkKGRldiwgXHUwMDI2c2RtLCBcdTAwMjZncm91cF9zaXplKTtcbitcdFx0aWYgKGVyciB8fCAhc2RtKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcdH1cbiBcbi1cdHJldHVybiBtbHg1X3NkX2NhcHNfc3VwcG9ydGVkKGRldiwgaG9zdF9idXNlcyk7XG4rXHRyZXR1cm4gbWx4NV9zZF9jYXBzX3N1cHBvcnRlZChkZXYsIGdyb3VwX3NpemUpO1xuIH1cbiBcbiBzdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbiB7XG4tXHR1OCBob3N0X2J1c2VzLCBzZF9ncm91cDtcbitcdHU4IGdyb3VwX3NpemUgPSBVOF9NQVgsIHNkX2dyb3VwO1xuIFx0c3RydWN0IG1seDVfc2QgKnNkO1xuIFx0dTMyIGdyb3VwX2lkO1xuIFx0Ym9vbCBzZG07XG5AQCAtMjQ4LDI2ICsyNTAsMjcgQEAgc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG4gXHRpZiAoIW1seDVfY29yZV9pc19wZihkZXYpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGVyciA9IG1seDVfcXVlcnlfbmljX3Zwb3J0X3NkX2dyb3VwKGRldiwgXHUwMDI2c2RfZ3JvdXApO1xuK1x0ZXJyID0gbWx4NV9xdWVyeV9uaWNfdnBvcnRfc2RfZ3JvdXAoZGV2LCBcdTAwMjZzZF9ncm91cCwgXHUwMDI2Z3JvdXBfc2l6ZSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0aWYgKCFzZF9ncm91cClcbitcdGlmICghc2RfZ3JvdXAgfHwgZ3JvdXBfc2l6ZSBcdTAwM2MgTUxYNV9TRF9NSU5fR1JPVVBfU1opXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWYgKCFNTFg1X0NBUF9NQ0FNX1JFRyhkZXYsIG1waXIpKVxuLVx0XHRyZXR1cm4gMDtcbitcdGlmIChncm91cF9zaXplID09IFU4X01BWCkge1xuK1x0XHRpZiAoIU1MWDVfQ0FQX01DQU1fUkVHKGRldiwgbXBpcikpXG4rXHRcdFx0cmV0dXJuIDA7XG4gXG4tXHRlcnIgPSBtbHg1X3F1ZXJ5X3NkKGRldiwgXHUwMDI2c2RtLCBcdTAwMjZob3N0X2J1c2VzKTtcbi1cdGlmIChlcnIpXG4tXHRcdHJldHVybiBlcnI7XG4tXG4tXHRpZiAoIXNkbSlcbi1cdFx0cmV0dXJuIDA7XG4rXHRcdGVyciA9IG1seDVfcXVlcnlfc2QoZGV2LCBcdTAwMjZzZG0sIFx1MDAyNmdyb3VwX3NpemUpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdHJldHVybiBlcnI7XG4gXG4rXHRcdGlmICghc2RtKVxuK1x0XHRcdHJldHVybiAwO1xuK1x0fVxuIFx0Z3JvdXBfaWQgPSBtbHg1X3NkX2dyb3VwX2lkKGRldiwgc2RfZ3JvdXApO1xuIFxuLVx0aWYgKCFtbHg1X3NkX2NhcHNfc3VwcG9ydGVkKGRldiwgaG9zdF9idXNlcykpIHtcbitcdGlmICghbWx4NV9zZF9jYXBzX3N1cHBvcnRlZChkZXYsIGdyb3VwX3NpemUpKSB7XG4gXHRcdHNkX3dhcm4oZGV2LCBcImNhbid0IHN1cHBvcnQgcmVxdWVzdGVkIG5ldGRldiBjb21iaW5pbmcgZm9yIGdyb3VwIGlkIDB4JXgsIHNraXBwaW5nXFxuXCIsXG4gXHRcdFx0Z3JvdXBfaWQpO1xuIFx0XHRyZXR1cm4gMDtcbkBAIC0yNzcsNyArMjgwLDcgQEAgc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG4gXHRpZiAoIXNkKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdHNkLVx1MDAzZWhvc3RfYnVzZXMgPSBob3N0X2J1c2VzO1xuK1x0c2QtXHUwMDNlZ3JvdXBfc2l6ZSA9IGdyb3VwX3NpemU7XG4gXHRzZC1cdTAwM2Vncm91cF9pZCA9IGdyb3VwX2lkO1xuIFxuIFx0bWx4NV9zZXRfc2QoZGV2LCBzZCk7XG5AQCAtNTQwLDcgKzU0Myw3IEBAIHN0YXRpYyBpbnQgc2RfcmVnaXN0ZXIoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbiBcdHNkLVx1MDAzZWRldmNvbSA9IGRldmNvbTtcbiBcbiBcdG1seDVfZGV2Y29tX2NvbXBfbG9jayhkZXZjb20pO1xuLVx0aWYgKG1seDVfZGV2Y29tX2NvbXBfZ2V0X3NpemUoZGV2Y29tKSAhPSBzZC1cdTAwM2Vob3N0X2J1c2VzIHx8XG4rXHRpZiAobWx4NV9kZXZjb21fY29tcF9nZXRfc2l6ZShkZXZjb20pICE9IHNkLVx1MDAzZWdyb3VwX3NpemUgfHxcbiBcdCAgICBtbHg1X2RldmNvbV9jb21wX2lzX3JlYWR5KGRldmNvbSkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuQEAgLTU3Niw3ICs1NzksNyBAQCBzdGF0aWMgaW50IHNkX3JlZ2lzdGVyKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG4gXHRcdFx0XHQgICAgICBERVZDT01fQ0FOVF9GQUlMLCBwcmltYXJ5KTtcbiBcbiBcdHByaW1hcnlfc2QgPSBtbHg1X2dldF9zZChwcmltYXJ5KTtcbi1cdGlmIChwcmltYXJ5X3NkLVx1MDAzZW5leHRfc2Vjb25kYXJ5X2lkeCArIDEgPT0gc2QtXHUwMDNlaG9zdF9idXNlcylcbitcdGlmIChwcmltYXJ5X3NkLVx1MDAzZW5leHRfc2Vjb25kYXJ5X2lkeCArIDEgPT0gc2QtXHUwMDNlZ3JvdXBfc2l6ZSlcbiBcdFx0bWx4NV9kZXZjb21fY29tcF9zZXRfcmVhZHkoZGV2Y29tLCB0cnVlKTtcbiBvdXQ6XG4gXHRtbHg1X2RldmNvbV9jb21wX3VubG9jayhkZXZjb20pO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc2QuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc2QuaFxuaW5kZXggY2I4OGJmMzQwNzlhZC4uYmM4ZGJjMjk5MDcwNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvc2QuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zZC5oXG5AQCAtNiw2ICs2LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gXG4rI2RlZmluZSBNTFg1X1NEX01JTl9HUk9VUF9TWiAyXG4gI2RlZmluZSBNTFg1X1NEX01BWF9HUk9VUF9TWiAyXG4gXG4gc3RydWN0IG1seDVfc2Q7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3Zwb3J0LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvdnBvcnQuY1xuaW5kZXggMzY3NmUyNmFjNmIwOS4uM2Q4NjUxMGFmNjE1MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS92cG9ydC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvdnBvcnQuY1xuQEAgLTU1MCw3ICs1NTAsOCBAQCBpbnQgbWx4NV9xdWVyeV9uaWNfdnBvcnRfc3lzdGVtX2ltYWdlX2d1aWQoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKG1seDVfcXVlcnlfbmljX3Zwb3J0X3N5c3RlbV9pbWFnZV9ndWlkKTtcbiBcbi1pbnQgbWx4NV9xdWVyeV9uaWNfdnBvcnRfc2RfZ3JvdXAoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsIHU4ICpzZF9ncm91cClcbitpbnQgbWx4NV9xdWVyeV9uaWNfdnBvcnRfc2RfZ3JvdXAoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsIHU4ICpzZF9ncm91cCxcbitcdFx0XHRcdCAgdTggKnNkX2dyb3VwX3NpemUpXG4ge1xuIFx0aW50IG91dGxlbiA9IE1MWDVfU1RfU1pfQllURVMocXVlcnlfbmljX3Zwb3J0X2NvbnRleHRfb3V0KTtcbiBcdHUzMiAqb3V0O1xuQEAgLTU2Niw2ICs1NjcsOSBAQCBpbnQgbWx4NV9xdWVyeV9uaWNfdnBvcnRfc2RfZ3JvdXAoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsIHU4ICpzZF9ncm91cClcbiBcbiBcdCpzZF9ncm91cCA9IE1MWDVfR0VUKHF1ZXJ5X25pY192cG9ydF9jb250ZXh0X291dCwgb3V0LFxuIFx0XHRcdCAgICAgbmljX3Zwb3J0X2NvbnRleHQuc2RfZ3JvdXApO1xuK1x0aWYgKE1MWDVfQ0FQX0dFTihtZGV2LCBzZF9ncm91cF9zaXplKSlcbitcdFx0KnNkX2dyb3VwX3NpemUgPSBNTFg1X0dFVChxdWVyeV9uaWNfdnBvcnRfY29udGV4dF9vdXQsIG91dCxcbitcdFx0XHRcdFx0ICBuaWNfdnBvcnRfY29udGV4dC5zZF9ncm91cF9zaXplKTtcbiBvdXQ6XG4gXHRrdmZyZWUob3V0KTtcbiBcdHJldHVybiBlcnI7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbHg1L3Zwb3J0LmggYi9pbmNsdWRlL2xpbnV4L21seDUvdnBvcnQuaFxuaW5kZXggZWUzNGQzZWQzMzVmMy4uNTc3MTY4YTRjYTBjOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWx4NS92cG9ydC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21seDUvdnBvcnQuaFxuQEAgLTc4LDcgKzc4LDggQEAgaW50IG1seDVfcXVlcnlfbmljX3Zwb3J0X210dShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiwgdTE2ICptdHUpO1xuIGludCBtbHg1X21vZGlmeV9uaWNfdnBvcnRfbXR1KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2LCB1MTYgbXR1KTtcbiBpbnQgbWx4NV9xdWVyeV9uaWNfdnBvcnRfc3lzdGVtX2ltYWdlX2d1aWQoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsXG4gXHRcdFx0XHRcdCAgIHU2NCAqc3lzdGVtX2ltYWdlX2d1aWQpO1xuLWludCBtbHg1X3F1ZXJ5X25pY192cG9ydF9zZF9ncm91cChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiwgdTggKnNkX2dyb3VwKTtcbitpbnQgbWx4NV9xdWVyeV9uaWNfdnBvcnRfc2RfZ3JvdXAoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsIHU4ICpzZF9ncm91cCxcbitcdFx0XHRcdCAgdTggKnNkX2dyb3VwX3NpemUpO1xuIGludCBtbHg1X3F1ZXJ5X25pY192cG9ydF9ub2RlX2d1aWQoc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYsXG4gXHRcdFx0XHQgICB1MTYgdnBvcnQsIGJvb2wgb3RoZXJfdnBvcnQsIHU2NCAqbm9kZV9ndWlkKTtcbiBpbnQgbWx4NV9tb2RpZnlfbmljX3Zwb3J0X25vZGVfZ3VpZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldixcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ5OjI4LjY4NzQ4MzcxNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1ODg0Mzg3NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nIERlY2lzaW9uIGZvciBNZWxsYW5veCBtbHg1IERyaXZlciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIGltcGFjdGluZyBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zZC5jYCwgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS92cG9ydC5jYCwgYW5kIGBpbmNsdWRlL2xpbnV4L21seDUvdnBvcnQuaGAuIFRoaXMgaXMgY2xlYXJseSB0YXJnZXRpbmcgdGhlIE1lbGxhbm94IG1seDUgZHJpdmVyLCB3aGljaCBJIGtub3cgaXMgdXNlZCBmb3IgQ29ubmVjdFgtNCwgLTUsIC02LCBhbmQgLTcgUENJZSBuZXR3b3JrIGNhcmRzLiBUaGVzZSBhcmUgaGlnaC1wZXJmb3JtYW5jZSBTbWFydE5JQ3MuIFRoZSBpbnN0cnVjdGlvbnMgZXhwbGljaXRseSBzYXkgdG8gc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBjb25jZXJucyB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycyB0aGF0IG5lZWQgcGh5c2ljYWwgaGFyZHdhcmUsIHdoaWNoIGlzbid0IGVtdWxhdGVkIGJ5IFFFTVUuXG5cbk5vdywgdGhlIHF1ZXN0aW9uIGlzLCBkb2VzIFFFTVUgZW11bGF0ZSBtbHg1PyBObywgaXQgZG9lc24ndC4gUUVNVSB1c2VzIGRyaXZlcnMgbGlrZSBlMTAwMCwgdmlydGlvLW5ldCwgYW5kIHZteG5ldDMsIGJ1dCBub3QgbWx4NS4gU28sIG1seDUgYWJzb2x1dGVseSBuZWVkcyB0aGUgcGh5c2ljYWwgTWVsbGFub3ggaGFyZHdhcmUuIFRoaXMgbWVhbnMsIEknbSBub3QgZ29pbmcgdG8gYmUgYWJsZSB0byByZWFjaCB0aGlzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgdXNpbmcgc3RhbmRhcmQgUUVNVS5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCdzIHJldmlzaXQgdGhlIGZpbGVzIGltcGFjdGVkOiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi9zZC5jYC4gWWVhaCwgdGhpcyBpcyBjb3JlIG1seDUgZHJpdmVyIGNvZGUsIG5vIGRvdWJ0IGFib3V0IGl0LlxuXG5UaGVyZWZvcmUsIG15IGRlY2lzaW9uIGlzICoqYFdvcnRoRnV6emluZz1mYWxzZWAqKiBhbmQgdGhlIHJlYXNvbmluZyBJJ20gdXNpbmcgaXMgXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1lbGxhbm94IG1seDUgZHJpdmVyLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMuXCJcblxuXG4iLCJJbnB1dFRva2VucyI6NTkzMSwiT3V0cHV0VG9rZW5zIjo2MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ5OjM3LjI3NTkyNTYzN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1lbGxhbm94IG1seDUgZHJpdmVyLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWVsbGFub3ggbWx4NSBkcml2ZXIsIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ5OjM3LjI3NTk1NjYyN1oiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowm62kl[1] Phase: Running StartedAt: 2026-08-10 09:49:49 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm62kl[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-10 09:49:49 +0000 UTC FinishedAt: 2026-08-10 09:49:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}