Name: series-workflowz9vvc Phase: Failed StartedAt: 2026-07-03 09:07:04 +0000 UTC FinishedAt: 2026-07-03 09:28:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz9vvc[0] Phase: Succeeded StartedAt: 2026-07-03 09:07:04 +0000 UTC FinishedAt: 2026-07-03 09:27:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz9vvc[0].run-triage Phase: Succeeded StartedAt: 2026-07-03 09:07:04 +0000 UTC FinishedAt: 2026-07-03 09:27:51 +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+CgkJCTx0ZD4yMDI2LzA3LzAzIDA5OjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby8pIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDk6Mjc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjNjJjZWQ2OWVmZmU2MzI3ZmY3MzhmOWRlYjA1YzY3NjkyMjBmYTViXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMyAwOToyNzoyMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9NYWtlZmlsZVxuaW5kZXggMmMzMmM0OGRiNTA5ODUuLjhmZDZhZmQzMzRlNTMyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9NYWtlZmlsZVxuQEAgLTEsNiAmIzQzOzEsNiBAQFxuIEFSQ0ggPz0gJChzaGVsbCB1bmFtZSAtbSlcbiBcbi1pZmVxICgsJChmaWx0ZXIgJChBUkNIKSxhYXJjaDY0IGFybTY0IHg4NiB4ODZfNjQpKVxuJiM0MztpZmVxICgsJChmaWx0ZXIgJChBUkNIKSxhYXJjaDY0IGFybTY0IHg4NiB4ODZfNjQgcHBjNjQgcHBjNjRsZSkpXG4gIyBEbyBub3RoaW5nIG9uIHVuc3VwcG9ydGVkIGFyY2hpdGVjdHVyZXNcbiBpbmNsdWRlIC4uL2xpYi5ta1xuIGVsc2VcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby5oXG5pbmRleCAwNzg2MmI0NzA3NzdiZC4uYzBiNGEyYWIwNmM1YWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8uaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvLmhcbkBAIC0yNCw2ICYjNDM7MjQsMTUgQEBcbiBjb25zdCBjaGFyICp2ZmlvX3NlbGZ0ZXN0c19nZXRfYmRmKGludCAqYXJnYywgY2hhciAqYXJndltdKTtcbiBjaGFyICoqdmZpb19zZWxmdGVzdHNfZ2V0X2JkZnMoaW50ICphcmdjLCBjaGFyICphcmd2W10sIGludCAqbnJfYmRmcyk7XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFJldHVybiB0aGUgSU9NTVUgbW9kZSBzdHJpbmcgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVcbiYjNDM7ICogJFZGSU9fU0VMRlRFU1RTX0lPTU1VX01PREUuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnMgTlVMTCBpZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCwgYWxsb3dpbmdcbiYjNDM7ICogdGVzdHMgdG8gdXNlIHRoZWlyIGRlZmF1bHQgbW9kZS5cbiYjNDM7ICovXG4mIzQzO2NvbnN0IGNoYXIgKnZmaW9fc2VsZnRlc3RzX2dldF9pb21tdV9tb2RlKHZvaWQpO1xuJiM0MztcbiAvKlxuICAqIFJlc2VydmUgdmlydHVhbCBhZGRyZXNzIHNwYWNlIG9mIHNpemUgYXQgYW4gYWRkcmVzcyBzYXRpc2Z5aW5nXG4gICogKHZhZGRyICUgYWxpZ24pID09IG9mZnNldC5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vaW9tbXUuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby9pb21tdS5oXG5pbmRleCBlOWEzMzg2YTQ3MTkzYS4uYzliOWFiOTI5ZjFmOWIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vaW9tbXUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL2lvbW11LmhcbkBAIC0yNCwxMiAmIzQzOzI0LDI2IEBAIHN0cnVjdCBkbWFfcmVnaW9uIHtcbiBcdHU2NCBzaXplO1xuIH07XG4gXG4mIzQzO3N0cnVjdCBzcGFwcl90Y2Vfd2luZG93IHtcbiYjNDM7XHR1NjQgc3RhcnQ7XG4mIzQzO1x0dTY0IHNpemU7XG4mIzQzO1x0dTMyIHBhZ2Vfc2hpZnQ7XG4mIzQzO1x0Ym9vbCB2YWxpZDtcbiYjNDM7XHRib29sIGR5bmFtaWM7XG4mIzQzO1x0Ym9vbCByZW1vdmVfb25fY2xlYW51cDtcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IGlvbW11IHtcbiBcdGNvbnN0IHN0cnVjdCBpb21tdV9tb2RlICptb2RlO1xuIFx0aW50IGNvbnRhaW5lcl9mZDtcbiBcdGludCBpb21tdWZkO1xuIFx0dTMyIGlvYXNfaWQ7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGRtYV9yZWdpb25zO1xuJiM0MzsjaWZkZWYgX19wb3dlcnBjX19cbiYjNDM7XHRzdHJ1Y3Qgc3BhcHJfdGNlX3dpbmRvdyBkZWZhdWx0X3dpbmRvdztcbiYjNDM7XHRzdHJ1Y3Qgc3BhcHJfdGNlX3dpbmRvdyBkZHdfd2luZG93O1xuJiM0MztcdHN0cnVjdCBzcGFwcl90Y2Vfd2luZG93ICphY3RpdmVfd2luZG93O1xuJiM0MzsjZW5kaWZcbiB9O1xuIFxuIHN0cnVjdCBpb21tdSAqaW9tbXVfaW5pdChjb25zdCBjaGFyICppb21tdV9tb2RlKTtcbkBAIC02MSwyMiAmIzQzOzc1LDM0IEBAIGlvdmFfdCBpb21tdV9odmEyaW92YShzdHJ1Y3QgaW9tbXUgKmlvbW11LCB2b2lkICp2YWRkcik7XG4gXG4gc3RydWN0IGlvbW11X2lvdmFfcmFuZ2UgKmlvbW11X2lvdmFfcmFuZ2VzKHN0cnVjdCBpb21tdSAqaW9tbXUsIHUzMiAqbnJhbmdlcyk7XG4gXG4mIzQzO2ludCBpb21tdV9wcmVwYXJlX2RtYV93aW5kb3coc3RydWN0IGlvbW11ICppb21tdSwgdTY0IG1pbl9zaXplLFxuJiM0MztcdFx0XHQgICAgIHU2NCBwYWdlX3NpemUsIGJvb2wgZm9yY2VfZHluYW1pYyk7XG4mIzQzO2Jvb2wgaW9tbXVfc3VwcG9ydHNfdW5tYXBfYWxsKHN0cnVjdCBpb21tdSAqaW9tbXUpO1xuJiM0MztcbiAjZGVmaW5lIE1PREVfVkZJT19UWVBFMV9JT01NVSBcJiMzNDt2ZmlvX3R5cGUxX2lvbW11XCYjMzQ7XG4gI2RlZmluZSBNT0RFX1ZGSU9fVFlQRTFWMl9JT01NVSBcJiMzNDt2ZmlvX3R5cGUxdjJfaW9tbXVcJiMzNDtcbiAjZGVmaW5lIE1PREVfSU9NTVVGRF9DT01QQVRfVFlQRTEgXCYjMzQ7aW9tbXVmZF9jb21wYXRfdHlwZTFcJiMzNDtcbiAjZGVmaW5lIE1PREVfSU9NTVVGRF9DT01QQVRfVFlQRTFWMiBcJiMzNDtpb21tdWZkX2NvbXBhdF90eXBlMXYyXCYjMzQ7XG4gI2RlZmluZSBNT0RFX0lPTU1VRkQgXCYjMzQ7aW9tbXVmZFwmIzM0O1xuJiM0MzsjaWZkZWYgX19wb3dlcnBjX19cbiYjNDM7I2RlZmluZSBNT0RFX1ZGSU9fU1BBUFJfVENFX1YyX0lPTU1VIFwmIzM0O3ZmaW9fc3BhcHJfdGNlX3YyX2lvbW11XCYjMzQ7XG4mIzQzOyNlbmRpZlxuIFxuIC8qXG4gICogR2VuZXJhdG9yIGZvciBWRklPIHNlbGZ0ZXN0cyBmaXh0dXJlIHZhcmlhbnRzIHRoYXQgcmVwbGljYXRlIGFjcm9zcyBhbGxcbiAgKiBwb3NzaWJsZSBJT01NVSBtb2Rlcy4gVGVzdHMgbXVzdCBkZWZpbmUgRklYVFVSRV9WQVJJQU5UX0FERF9JT01NVV9NT0RFKClcbiAgKiB3aGljaCBzaG91bGQgdGhlbiB1c2UgRklYVFVSRV9WQVJJQU5UX0FERCgpIHRvIGNyZWF0ZSB0aGUgdmFyaWFudC5cbiAgKi9cbiYjNDM7I2lmZGVmIF9fcG93ZXJwY19fXG4mIzQzOyNkZWZpbmUgRklYVFVSRV9WQVJJQU5UX0FERF9BTExfSU9NTVVfTU9ERVMoLi4uKSBcXFxuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREUodmZpb19zcGFwcl90Y2VfdjJfaW9tbXUsICMjX19WQV9BUkdTX18pXG4mIzQzOyNlbHNlXG4gI2RlZmluZSBGSVhUVVJFX1ZBUklBTlRfQUREX0FMTF9JT01NVV9NT0RFUyguLi4pIFxcXG4gRklYVFVSRV9WQVJJQU5UX0FERF9JT01NVV9NT0RFKHZmaW9fdHlwZTFfaW9tbXUsICMjX19WQV9BUkdTX18pOyBcXFxuIEZJWFRVUkVfVkFSSUFOVF9BRERfSU9NTVVfTU9ERSh2ZmlvX3R5cGUxdjJfaW9tbXUsICMjX19WQV9BUkdTX18pOyBcXFxuIEZJWFRVUkVfVkFSSUFOVF9BRERfSU9NTVVfTU9ERShpb21tdWZkX2NvbXBhdF90eXBlMSwgIyNfX1ZBX0FSR1NfXyk7IFxcXG4gRklYVFVSRV9WQVJJQU5UX0FERF9JT01NVV9NT0RFKGlvbW11ZmRfY29tcGF0X3R5cGUxdjIsICMjX19WQV9BUkdTX18pOyBcXFxuIEZJWFRVUkVfVkFSSUFOVF9BRERfSU9NTVVfTU9ERShpb21tdWZkLCAjI19fVkFfQVJHU19fKVxuJiM0MzsjZW5kaWZcbiBcbiAjZW5kaWYgLyogU0VMRlRFU1RTX1ZGSU9fTElCX0lOQ0xVREVfTElCVkZJT19JT01NVV9IICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW9tbXUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2lvbW11LmNcbmluZGV4IDAzNWRhYzA2OWQ2MDE2Li4xOWQxOWJiNDVhMTRiNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2lvbW11LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2lvbW11LmNcbkBAIC0xNiw5ICYjNDM7MTYsMTEgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdmZpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW9tbXVmZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpemVzLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDsuLi8uLi8uLi9rc2VsZnRlc3QuaFwmIzM0O1xuICNpbmNsdWRlIFx1MDAzY2xpYnZmaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW1pdHMuaFx1MDAzZVxuIFxuIGNvbnN0IGNoYXIgKmRlZmF1bHRfaW9tbXVfbW9kZSA9IE1PREVfSU9NTVVGRDtcbiBcbkBAIC00Nyw2ICYjNDM7NDksMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpb21tdV9tb2RlIGlvbW11X21vZGVzW10gPSB7XG4gXHR7XG4gXHRcdC5uYW1lID0gTU9ERV9JT01NVUZELFxuIFx0fSxcbiYjNDM7I2lmZGVmIF9fcG93ZXJwY19fXG4mIzQzO1x0e1xuJiM0MztcdFx0Lm5hbWUgPSBNT0RFX1ZGSU9fU1BBUFJfVENFX1YyX0lPTU1VLFxuJiM0MztcdFx0LmNvbnRhaW5lcl9wYXRoID0gXCYjMzQ7L2Rldi92ZmlvL3ZmaW9cJiMzNDssXG4mIzQzO1x0XHQuaW9tbXVfdHlwZSA9IFZGSU9fU1BBUFJfVENFX3YyX0lPTU1VLFxuJiM0MztcdH0sXG4mIzQzOyNlbmRpZlxuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBpb21tdV9tb2RlICpsb29rdXBfaW9tbXVfbW9kZShjb25zdCBjaGFyICppb21tdV9tb2RlKVxuQEAgLTg2LDYgJiM0Mzs5NSwyMzMgQEAgaW50IF9faW9tbXVfaHZhMmlvdmEoc3RydWN0IGlvbW11ICppb21tdSwgdm9pZCAqdmFkZHIsIGlvdmFfdCAqaW92YSlcbiBcdHJldHVybiAtRU5PRU5UO1xuIH1cbiBcbiYjNDM7I2lmZGVmIF9fcG93ZXJwY19fXG4mIzQzO3N0YXRpYyBib29sIGlvbW11X2lzX3NwYXByX3RjZV92MihzdHJ1Y3QgaW9tbXUgKmlvbW11KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuICEhKGlvbW11LVx1MDAzZW1vZGUtXHUwMDNlaW9tbXVfdHlwZSA9PSBWRklPX1NQQVBSX1RDRV92Ml9JT01NVSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB1MzIgcGFnZV9zaXplX3RvX3NoaWZ0KHU2NCBwYWdlX3NpemUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gX19idWlsdGluX2N0emxsKHBhZ2Vfc2l6ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgc3BhcHJfdGNlX3JlYWRfZGVmYXVsdF93aW5kb3coc3RydWN0IGlvbW11ICppb21tdSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB2ZmlvX2lvbW11X3NwYXByX3RjZV9pbmZvIGluZm8gPSB7XG4mIzQzO1x0XHQuYXJnc3ogPSBzaXplb2YoaW5mbyksXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0aWYgKGlvbW11LVx1MDAzZWRlZmF1bHRfd2luZG93LnZhbGlkKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChpb2N0bChpb21tdS1cdTAwM2Vjb250YWluZXJfZmQsIFZGSU9fSU9NTVVfU1BBUFJfVENFX0dFVF9JTkZPLCBcdTAwMjZpbmZvKSlcbiYjNDM7XHRcdHJldHVybiAtZXJybm87XG4mIzQzO1xuJiM0MztcdGlvbW11LVx1MDAzZWRlZmF1bHRfd2luZG93LnN0YXJ0ID0gaW5mby5kbWEzMl93aW5kb3dfc3RhcnQ7XG4mIzQzO1x0aW9tbXUtXHUwMDNlZGVmYXVsdF93aW5kb3cuc2l6ZSA9IGluZm8uZG1hMzJfd2luZG93X3NpemU7XG4mIzQzO1x0aW9tbXUtXHUwMDNlZGVmYXVsdF93aW5kb3cucGFnZV9zaGlmdCA9IHBhZ2Vfc2l6ZV90b19zaGlmdChnZXRwYWdlc2l6ZSgpKTtcbiYjNDM7XHRpb21tdS1cdTAwM2VkZWZhdWx0X3dpbmRvdy52YWxpZCA9IHRydWU7XG4mIzQzO1x0aW9tbXUtXHUwMDNlZGVmYXVsdF93aW5kb3cuZHluYW1pYyA9IGZhbHNlO1xuJiM0MztcdGlvbW11LVx1MDAzZWRlZmF1bHRfd2luZG93LnJlbW92ZV9vbl9jbGVhbnVwID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHNwYXByX3RjZV9jcmVhdGVfZGR3KHN0cnVjdCBpb21tdSAqaW9tbXUsIHU2NCBtaW5fc2l6ZSwgdTMyIHBhZ2Vfc2hpZnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdmZpb19pb21tdV9zcGFwcl90Y2VfY3JlYXRlIGNyZWF0ZSA9IHtcbiYjNDM7XHRcdC5hcmdzeiA9IHNpemVvZihjcmVhdGUpLFxuJiM0MztcdFx0LnBhZ2Vfc2hpZnQgPSBwYWdlX3NoaWZ0LFxuJiM0MztcdFx0LmxldmVscyA9IDEsXG4mIzQzO1x0XHQud2luZG93X3NpemUgPSBtaW5fc2l6ZSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRpZiAoaW9jdGwoaW9tbXUtXHUwMDNlY29udGFpbmVyX2ZkLCBWRklPX0lPTU1VX1NQQVBSX1RDRV9DUkVBVEUsIFx1MDAyNmNyZWF0ZSkpXG4mIzQzO1x0XHRyZXR1cm4gLWVycm5vO1xuJiM0MztcbiYjNDM7XHRpb21tdS1cdTAwM2VkZHdfd2luZG93LnN0YXJ0ID0gY3JlYXRlLnN0YXJ0X2FkZHI7XG4mIzQzO1x0aW9tbXUtXHUwMDNlZGR3X3dpbmRvdy5zaXplID0gY3JlYXRlLndpbmRvd19zaXplO1xuJiM0MztcdGlvbW11LVx1MDAzZWRkd193aW5kb3cucGFnZV9zaGlmdCA9IHBhZ2Vfc2hpZnQ7XG4mIzQzO1x0aW9tbXUtXHUwMDNlZGR3X3dpbmRvdy52YWxpZCA9IHRydWU7XG4mIzQzO1x0aW9tbXUtXHUwMDNlZGR3X3dpbmRvdy5keW5hbWljID0gdHJ1ZTtcbiYjNDM7XHRpb21tdS1cdTAwM2VkZHdfd2luZG93LnJlbW92ZV9vbl9jbGVhbnVwID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgc3BhcHJfdGNlX3JlbW92ZV93aW5kb3coc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IHNwYXByX3RjZV93aW5kb3cgKndpbmRvdylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB2ZmlvX2lvbW11X3NwYXByX3RjZV9yZW1vdmUgcmVtb3ZlID0ge1xuJiM0MztcdFx0LmFyZ3N6ID0gc2l6ZW9mKHJlbW92ZSksXG4mIzQzO1x0XHQuc3RhcnRfYWRkciA9IHdpbmRvdy1cdTAwM2VzdGFydCxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRpZiAoIXdpbmRvdy1cdTAwM2V2YWxpZCB8fCAhd2luZG93LVx1MDAzZXJlbW92ZV9vbl9jbGVhbnVwKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChpb2N0bChpb21tdS1cdTAwM2Vjb250YWluZXJfZmQsIFZGSU9fSU9NTVVfU1BBUFJfVENFX1JFTU9WRSwgXHUwMDI2cmVtb3ZlKSlcbiYjNDM7XHRcdHJldHVybiAtZXJybm87XG4mIzQzO1xuJiM0MztcdHdpbmRvdy1cdTAwM2V2YWxpZCA9IGZhbHNlO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBzcGFwcl90Y2Vfd2luZG93X3NhdGlzZmllcyhzdHJ1Y3Qgc3BhcHJfdGNlX3dpbmRvdyAqd2luZG93LFxuJiM0MztcdFx0XHRcdCAgICAgICB1NjQgbWluX3NpemUsIHUzMiBwYWdlX3NoaWZ0LFxuJiM0MztcdFx0XHRcdCAgICAgICBib29sIHJlcXVpcmVfZHluYW1pYylcbiYjNDM7e1xuJiM0MztcdGlmICghd2luZG93IHx8ICF3aW5kb3ctXHUwMDNldmFsaWQpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmIChyZXF1aXJlX2R5bmFtaWMgXHUwMDI2XHUwMDI2ICF3aW5kb3ctXHUwMDNlZHluYW1pYylcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHdpbmRvdy1cdTAwM2VzaXplIFx1MDAzYyBtaW5fc2l6ZSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHdpbmRvdy1cdTAwM2VwYWdlX3NoaWZ0ICE9IHBhZ2Vfc2hpZnQpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGlvbW11X2lvdmFfcmFuZ2UgKnNwYXByX3RjZV9pb3ZhX3JhbmdlcyhzdHJ1Y3QgaW9tbXUgKmlvbW11LCB1MzIgKm5yYW5nZXMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW9tbXVfaW92YV9yYW5nZSAqcmFuZ2VzO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghaW9tbXUtXHUwMDNlYWN0aXZlX3dpbmRvdykge1xuJiM0MztcdFx0cmV0ID0gaW9tbXVfcHJlcGFyZV9kbWFfd2luZG93KGlvbW11LCBTWl8xRywgZ2V0cGFnZXNpemUoKSwgZmFsc2UpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyYW5nZXMgPSBjYWxsb2MoMSwgc2l6ZW9mKCpyYW5nZXMpKTtcbiYjNDM7XHRWRklPX0FTU0VSVF9OT1RfTlVMTChyYW5nZXMpO1xuJiM0MztcbiYjNDM7XHRyYW5nZXNbMF0uc3RhcnQgPSBpb21tdS1cdTAwM2VhY3RpdmVfd2luZG93LVx1MDAzZXN0YXJ0O1xuJiM0MztcdHJhbmdlc1swXS5sYXN0ID0gaW9tbXUtXHUwMDNlYWN0aXZlX3dpbmRvdy1cdTAwM2VzdGFydCAmIzQzOyBpb21tdS1cdTAwM2VhY3RpdmVfd2luZG93LVx1MDAzZXNpemUgLSAxO1xuJiM0MztcbiYjNDM7XHQqbnJhbmdlcyA9IDE7XG4mIzQzO1x0cmV0dXJuIHJhbmdlcztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgc3BhcHJfdGNlX2lvdmFfaW5zaWRlX3dpbmRvdyhzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNwYXByX3RjZV93aW5kb3cgKndpbmRvdyA9IGlvbW11LVx1MDAzZWFjdGl2ZV93aW5kb3c7XG4mIzQzO1xuJiM0MztcdGlmICghd2luZG93IHx8ICF3aW5kb3ctXHUwMDNldmFsaWQpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmIChyZWdpb24tXHUwMDNlaW92YSBcdTAwM2Mgd2luZG93LVx1MDAzZXN0YXJ0KVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpZiAocmVnaW9uLVx1MDAzZWlvdmEgJiM0MzsgcmVnaW9uLVx1MDAzZXNpemUgXHUwMDNlIHdpbmRvdy1cdTAwM2VzdGFydCAmIzQzOyB3aW5kb3ctXHUwMDNlc2l6ZSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgc3BhcHJfcmVnaXN0ZXJfbWVtb3J5KHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdmZpb19pb21tdV9zcGFwcl9yZWdpc3Rlcl9tZW1vcnkgYXJncyA9IHtcbiYjNDM7XHRcdC5hcmdzeiA9IHNpemVvZihhcmdzKSxcbiYjNDM7XHRcdC52YWRkciA9ICh1NjQpcmVnaW9uLVx1MDAzZXZhZGRyLFxuJiM0MztcdFx0LnNpemUgPSByZWdpb24tXHUwMDNlc2l6ZSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRpZiAoaW9jdGwoaW9tbXUtXHUwMDNlY29udGFpbmVyX2ZkLCBWRklPX0lPTU1VX1NQQVBSX1JFR0lTVEVSX01FTU9SWSwgXHUwMDI2YXJncykpXG4mIzQzO1x0XHRyZXR1cm4gLWVycm5vO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBzcGFwcl91bnJlZ2lzdGVyX21lbW9yeShzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHZmaW9faW9tbXVfc3BhcHJfcmVnaXN0ZXJfbWVtb3J5IGFyZ3MgPSB7XG4mIzQzO1x0XHQuYXJnc3ogPSBzaXplb2YoYXJncyksXG4mIzQzO1x0XHQudmFkZHIgPSAodTY0KXJlZ2lvbi1cdTAwM2V2YWRkcixcbiYjNDM7XHRcdC5zaXplID0gcmVnaW9uLVx1MDAzZXNpemUsXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0aWYgKGlvY3RsKGlvbW11LVx1MDAzZWNvbnRhaW5lcl9mZCwgVkZJT19JT01NVV9TUEFQUl9VTlJFR0lTVEVSX01FTU9SWSwgXHUwMDI2YXJncykpXG4mIzQzO1x0XHRyZXR1cm4gLWVycm5vO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IGlvbW11X3ByZXBhcmVfZG1hX3dpbmRvdyhzdHJ1Y3QgaW9tbXUgKmlvbW11LCB1NjQgbWluX3NpemUsXG4mIzQzO1x0XHRcdCAgICAgdTY0IHBhZ2Vfc2l6ZSwgYm9vbCBmb3JjZV9keW5hbWljKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHBhZ2Vfc2hpZnQ7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFpb21tdV9pc19zcGFwcl90Y2VfdjIoaW9tbXUpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmICghcGFnZV9zaXplKVxuJiM0MztcdFx0cGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTtcbiYjNDM7XG4mIzQzO1x0cGFnZV9zaGlmdCA9IHBhZ2Vfc2l6ZV90b19zaGlmdChwYWdlX3NpemUpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBzcGFwcl90Y2VfcmVhZF9kZWZhdWx0X3dpbmRvdyhpb21tdSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTm9ybWFsIG1hcHBpbmcgcGF0aDpcbiYjNDM7XHQgKiB1c2UgZGVmYXVsdCB3aW5kb3cgd2hlbiBpdCBzYXRpc2ZpZXMgdGhlIHJlcXVlc3QuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFmb3JjZV9keW5hbWljIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBzcGFwcl90Y2Vfd2luZG93X3NhdGlzZmllcyhcdTAwMjZpb21tdS1cdTAwM2VkZWZhdWx0X3dpbmRvdyxcbiYjNDM7XHRcdFx0XHQgICAgICAgbWluX3NpemUsIHBhZ2Vfc2hpZnQsIGZhbHNlKSkge1xuJiM0MztcdFx0aW9tbXUtXHUwMDNlYWN0aXZlX3dpbmRvdyA9IFx1MDAyNmlvbW11LVx1MDAzZWRlZmF1bHRfd2luZG93O1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIER5bmFtaWMgcGF0aDpcbiYjNDM7XHQgKiB1c2UgZXhpc3RpbmcgRERXIGlmIGl0IGFscmVhZHkgc2F0aXNmaWVzIHRoZSByZXF1ZXN0LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChzcGFwcl90Y2Vfd2luZG93X3NhdGlzZmllcyhcdTAwMjZpb21tdS1cdTAwM2VkZHdfd2luZG93LFxuJiM0MztcdFx0XHRcdCAgICAgICBtaW5fc2l6ZSwgcGFnZV9zaGlmdCwgdHJ1ZSkpIHtcbiYjNDM7XHRcdGlvbW11LVx1MDAzZWFjdGl2ZV93aW5kb3cgPSBcdTAwMjZpb21tdS1cdTAwM2VkZHdfd2luZG93O1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE5laXRoZXIgZGVmYXVsdCBub3IgRERXIGlzIHN1ZmZpY2llbnQuXG4mIzQzO1x0ICogUmVtb3ZlIG9ubHkgdGhlIHNlbGZ0ZXN0LWNyZWF0ZWQgRERXLCB0aGVuIGNyZWF0ZSBhIG5ldyBERFcuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0ID0gc3BhcHJfdGNlX3JlbW92ZV93aW5kb3coaW9tbXUsIFx1MDAyNmlvbW11LVx1MDAzZWRkd193aW5kb3cpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBzcGFwcl90Y2VfY3JlYXRlX2Rkdyhpb21tdSwgbWluX3NpemUsIHBhZ2Vfc2hpZnQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpb21tdS1cdTAwM2VhY3RpdmVfd2luZG93ID0gXHUwMDI2aW9tbXUtXHUwMDNlZGR3X3dpbmRvdztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MzsjZWxzZVxuJiM0MztpbnQgaW9tbXVfcHJlcGFyZV9kbWFfd2luZG93KHN0cnVjdCBpb21tdSAqaW9tbXUsIHU2NCBtaW5fc2l6ZSxcbiYjNDM7XHRcdFx0ICAgICB1NjQgcGFnZV9zaXplLCBib29sIGZvcmNlX2R5bmFtaWMpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzO2Jvb2wgaW9tbXVfc3VwcG9ydHNfdW5tYXBfYWxsKHN0cnVjdCBpb21tdSAqaW9tbXUpXG4mIzQzO3tcbiYjNDM7I2lmZGVmIF9fcG93ZXJwY19fXG4mIzQzO1x0aWYgKGlvbW11X2lzX3NwYXByX3RjZV92Mihpb21tdSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzOyNlbmRpZlxuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuIGlvdmFfdCBpb21tdV9odmEyaW92YShzdHJ1Y3QgaW9tbXUgKmlvbW11LCB2b2lkICp2YWRkcilcbiB7XG4gXHRpb3ZhX3QgaW92YTtcbkBAIC0xMDYsOSAmIzQzOzM0MiwyNyBAQCBzdGF0aWMgaW50IHZmaW9faW9tbXVfbWFwKHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24pXG4gXHRcdC5pb3ZhID0gcmVnaW9uLVx1MDAzZWlvdmEsXG4gXHRcdC5zaXplID0gcmVnaW9uLVx1MDAzZXNpemUsXG4gXHR9O1xuJiM0MztcdGludCByZXQ7XG4gXG4tXHRpZiAoaW9jdGwoaW9tbXUtXHUwMDNlY29udGFpbmVyX2ZkLCBWRklPX0lPTU1VX01BUF9ETUEsIFx1MDAyNmFyZ3MpKVxuJiM0MzsjaWZkZWYgX19wb3dlcnBjX19cbiYjNDM7XHRpZiAoaW9tbXVfaXNfc3BhcHJfdGNlX3YyKGlvbW11KSkge1xuJiM0MztcdFx0aWYgKCFzcGFwcl90Y2VfaW92YV9pbnNpZGVfd2luZG93KGlvbW11LCByZWdpb24pKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBzcGFwcl9yZWdpc3Rlcl9tZW1vcnkoaW9tbXUsIHJlZ2lvbik7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MztcdHJldCA9IGlvY3RsKGlvbW11LVx1MDAzZWNvbnRhaW5lcl9mZCwgVkZJT19JT01NVV9NQVBfRE1BLCBcdTAwMjZhcmdzKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzOyNpZmRlZiBfX3Bvd2VycGNfX1xuJiM0MztcdFx0aWYgKGlvbW11X2lzX3NwYXByX3RjZV92Mihpb21tdSkpXG4mIzQzO1x0XHRcdHNwYXByX3VucmVnaXN0ZXJfbWVtb3J5KGlvbW11LCByZWdpb24pO1xuJiM0MzsjZW5kaWZcbiBcdFx0cmV0dXJuIC1lcnJubztcbiYjNDM7XHR9XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMTcwLDggJiM0Mzs0MjQsMTggQEAgc3RhdGljIGludCBfX3ZmaW9faW9tbXVfdW5tYXAoaW50IGZkLCB1NjQgaW92YSwgdTY0IHNpemUsIHUzMiBmbGFncywgdTY0ICp1bm1hcHBcbiBzdGF0aWMgaW50IHZmaW9faW9tbXVfdW5tYXAoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbixcbiBcdFx0XHQgICAgdTY0ICp1bm1hcHBlZClcbiB7XG4tXHRyZXR1cm4gX192ZmlvX2lvbW11X3VubWFwKGlvbW11LVx1MDAzZWNvbnRhaW5lcl9mZCwgcmVnaW9uLVx1MDAzZWlvdmEsXG4tXHRcdFx0XHQgIHJlZ2lvbi1cdTAwM2VzaXplLCAwLCB1bm1hcHBlZCk7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX192ZmlvX2lvbW11X3VubWFwKGlvbW11LVx1MDAzZWNvbnRhaW5lcl9mZCwgcmVnaW9uLVx1MDAzZWlvdmEsXG4mIzQzO1x0XHRcdFx0IHJlZ2lvbi1cdTAwM2VzaXplLCAwLCB1bm1hcHBlZCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzOyNpZmRlZiBfX3Bvd2VycGNfX1xuJiM0MztcdGlmIChpb21tdV9pc19zcGFwcl90Y2VfdjIoaW9tbXUpKVxuJiM0MztcdFx0cmV0ID0gc3BhcHJfdW5yZWdpc3Rlcl9tZW1vcnkoaW9tbXUsIHJlZ2lvbik7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW50IF9faW9tbXVmZF91bm1hcChpbnQgZmQsIHU2NCBpb3ZhLCB1NjQgbGVuZ3RoLCB1MzIgaW9hc19pZCwgdTY0ICp1bm1hcHBlZClcbkBAIC0zMTcsNiAmIzQzOzU4MSwxMSBAQCBzdGF0aWMgc3RydWN0IGlvbW11X2lvdmFfcmFuZ2UgKnZmaW9faW9tbXVfaW92YV9yYW5nZXMoc3RydWN0IGlvbW11ICppb21tdSxcbiBcdHN0cnVjdCB2ZmlvX2luZm9fY2FwX2hlYWRlciAqaGRyO1xuIFx0c3RydWN0IGlvbW11X2lvdmFfcmFuZ2UgKnJhbmdlcyA9IE5VTEw7XG4gXG4mIzQzOyNpZmRlZiBfX3Bvd2VycGNfX1xuJiM0MztcdGlmIChpb21tdV9pc19zcGFwcl90Y2VfdjIoaW9tbXUpKVxuJiM0MztcdFx0cmV0dXJuIHNwYXByX3RjZV9pb3ZhX3Jhbmdlcyhpb21tdSwgbnJhbmdlcyk7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBcdGluZm8gPSB2ZmlvX2lvbW11X2dldF9pbmZvKGlvbW11LVx1MDAzZWNvbnRhaW5lcl9mZCk7XG4gXHRoZHIgPSB2ZmlvX2lvbW11X2luZm9fY2FwX2hkcihpbmZvLCBWRklPX0lPTU1VX1RZUEUxX0lORk9fQ0FQX0lPVkFfUkFOR0UpO1xuIFx0VkZJT19BU1NFUlRfTk9UX05VTEwoaGRyKTtcbkBAIC00NTUsNiAmIzQzOzcyNCwxMSBAQCBzdHJ1Y3QgaW9tbXUgKmlvbW11X2luaXQoY29uc3QgY2hhciAqaW9tbXVfbW9kZSlcbiBcbiB2b2lkIGlvbW11X2NsZWFudXAoc3RydWN0IGlvbW11ICppb21tdSlcbiB7XG4mIzQzOyNpZmRlZiBfX3Bvd2VycGNfX1xuJiM0MztcdGlmIChpb21tdV9pc19zcGFwcl90Y2VfdjIoaW9tbXUpKVxuJiM0MztcdFx0c3BhcHJfdGNlX3JlbW92ZV93aW5kb3coaW9tbXUsIFx1MDAyNmlvbW11LVx1MDAzZWRkd193aW5kb3cpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gXHRpZiAoaW9tbXUtXHUwMDNlaW9tbXVmZClcbiBcdFx0VkZJT19BU1NFUlRfRVEoY2xvc2UoaW9tbXUtXHUwMDNlaW9tbXVmZCksIDApO1xuIFx0ZWxzZVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8uY1xuaW5kZXggM2EzZDFlZDYzNWMxZGYuLjEyZjczMTk2M2IwNThhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLmNcbkBAIC0xMDEsMyAmIzQzOzEwMSw0MCBAQCB2b2lkICptbWFwX3Jlc2VydmUoc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbiwgc2l6ZV90IG9mZnNldClcbiBcbiBcdHJldHVybiBtYXBfYWxpZ247XG4gfVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKmdldF9pb21tdV9tb2RlX2Vudih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgY2hhciAqbW9kZTtcbiYjNDM7XHRzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHZhbGlkX21vZGVzW10gPSB7XG4mIzQzO1x0XHRNT0RFX1ZGSU9fVFlQRTFfSU9NTVUsXG4mIzQzO1x0XHRNT0RFX1ZGSU9fVFlQRTFWMl9JT01NVSxcbiYjNDM7XHRcdE1PREVfSU9NTVVGRF9DT01QQVRfVFlQRTEsXG4mIzQzO1x0XHRNT0RFX0lPTU1VRkRfQ09NUEFUX1RZUEUxVjIsXG4mIzQzO1x0XHRNT0RFX0lPTU1VRkQsXG4mIzQzOyNpZmRlZiBfX3Bvd2VycGNfX1xuJiM0MztcdFx0TU9ERV9WRklPX1NQQVBSX1RDRV9WMl9JT01NVSxcbiYjNDM7I2VuZGlmXG4mIzQzO1x0fTtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0bW9kZSA9IGdldGVudihcJiMzNDtWRklPX1NFTEZURVNUU19JT01NVV9NT0RFXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIW1vZGUpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh2YWxpZF9tb2Rlcyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAoIXN0cmNtcChtb2RlLCB2YWxpZF9tb2Rlc1tpXSkpXG4mIzQzO1x0XHRcdHJldHVybiBtb2RlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZnByaW50ZihzdGRlcnIsIFwmIzM0O0ludmFsaWQgVkZJT19TRUxGVEVTVFNfSU9NTVVfTU9ERTogJXNcXG5cJiMzNDssIG1vZGUpO1xuJiM0MztcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtWYWxpZCBtb2RlcyBhcmU6XFxuXCYjMzQ7KTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHZhbGlkX21vZGVzKTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ICAlc1xcblwmIzM0OywgdmFsaWRfbW9kZXNbaV0pO1xuJiM0MztcdGV4aXQoS1NGVF9TS0lQKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3QgY2hhciAqdmZpb19zZWxmdGVzdHNfZ2V0X2lvbW11X21vZGUodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBnZXRfaW9tbXVfbW9kZV9lbnYoKTtcbiYjNDM7fVxuJiM0MztcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL3ZmaW9fZG1hX21hcHBpbmdfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX2RtYV9tYXBwaW5nX3Rlc3QuY1xuaW5kZXggN2QwZGU4Yzc5ZGUxM2YuLmNkMmQzMjc2YTQ2YzQ2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX2RtYV9tYXBwaW5nX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX2RtYV9tYXBwaW5nX3Rlc3QuY1xuQEAgLTEsNSAmIzQzOzEsNiBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4gXG5AQCAtMTE5LDggJiM0MzsxMjAsMTkgQEAgRklYVFVSRV9WQVJJQU5UX0FERF9BTExfSU9NTVVfTU9ERVMoYW5vbnltb3VzX2h1Z2V0bGJfMWdiLCBTWl8xRywgTUFQX0hVR0VUTEIgfFxuIFxuIEZJWFRVUkVfU0VUVVAodmZpb19kbWFfbWFwcGluZ190ZXN0KVxuIHtcbiYjNDM7XHRjb25zdCB1NjQgcGFnZV9zaXplID0gdmFyaWFudC1cdTAwM2VzaXplID86IGdldHBhZ2VzaXplKCk7XG4mIzQzO1x0Y29uc3QgYm9vbCBmb3JjZV9keW5hbWljID0gISF2YXJpYW50LVx1MDAzZXNpemU7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4gXHRzZWxmLVx1MDAzZWlvbW11ID0gaW9tbXVfaW5pdCh2YXJpYW50LVx1MDAzZWlvbW11X21vZGUpO1xuIFx0c2VsZi1cdTAwM2VkZXZpY2UgPSB2ZmlvX3BjaV9kZXZpY2VfaW5pdChkZXZpY2VfYmRmLCBzZWxmLVx1MDAzZWlvbW11KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gaW9tbXVfcHJlcGFyZV9kbWFfd2luZG93KHNlbGYtXHUwMDNlaW9tbXUsIHBhZ2Vfc2l6ZSwgcGFnZV9zaXplLFxuJiM0MztcdFx0XHRcdCAgICAgICBmb3JjZV9keW5hbWljKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O0RNQSB3aW5kb3cgdW5hdmFpbGFibGU6ICVzICglZClcXG5cJiMzNDssXG4mIzQzO1x0XHQgICAgIHN0cmVycm9yKC1yZXQpLCAtcmV0KTtcbiYjNDM7XG4gXHRzZWxmLVx1MDAzZWlvdmFfYWxsb2NhdG9yID0gaW92YV9hbGxvY2F0b3JfaW5pdChzZWxmLVx1MDAzZWlvbW11KTtcbiB9XG4gXG5AQCAtMjI3LDYgJiM0MzsyMzksNyBAQCBGSVhUVVJFX1NFVFVQKHZmaW9fZG1hX21hcF9saW1pdF90ZXN0KVxuIFx0dTY0IHJlZ2lvbl9zaXplID0gZ2V0cGFnZXNpemUoKTtcbiBcdGlvdmFfdCBsYXN0X2lvdmE7XG4gXHR1MzIgbnJhbmdlcztcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0LypcbiBcdCAqIE92ZXItYWxsb2NhdGUgbW1hcCBieSBkb3VibGUgdGhlIHNpemUgdG8gcHJvdmlkZSBlbm91Z2ggYmFja2luZyB2YWRkclxuQEAgLTIzNiw2ICYjNDM7MjQ5LDEzIEBAIEZJWFRVUkVfU0VUVVAodmZpb19kbWFfbWFwX2xpbWl0X3Rlc3QpXG4gXG4gXHRzZWxmLVx1MDAzZWlvbW11ID0gaW9tbXVfaW5pdCh2YXJpYW50LVx1MDAzZWlvbW11X21vZGUpO1xuIFx0c2VsZi1cdTAwM2VkZXZpY2UgPSB2ZmlvX3BjaV9kZXZpY2VfaW5pdChkZXZpY2VfYmRmLCBzZWxmLVx1MDAzZWlvbW11KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gaW9tbXVfcHJlcGFyZV9kbWFfd2luZG93KHNlbGYtXHUwMDNlaW9tbXUsIHJlZ2lvbl9zaXplLCByZWdpb25fc2l6ZSxcbiYjNDM7XHRcdFx0XHQgICAgICAgZmFsc2UpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRTS0lQKHJldHVybiwgXCYjMzQ7RE1BIHdpbmRvdyB1bmF2YWlsYWJsZTogJXMgKCVkKVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgICAgc3RyZXJyb3IoLXJldCksIC1yZXQpO1xuJiM0MztcbiBcdHJlZ2lvbi1cdTAwM2V2YWRkciA9IG1tYXAoTlVMTCwgc2VsZi1cdTAwM2VtbWFwX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4gXHRcdFx0ICAgICBNQVBfQU5PTllNT1VTIHwgTUFQX1BSSVZBVEUsIC0xLCAwKTtcbiBcdEFTU0VSVF9ORShyZWdpb24tXHUwMDNldmFkZHIsIE1BUF9GQUlMRUQpO1xuQEAgLTI3Nyw2ICYjNDM7Mjk3LDggQEAgVEVTVF9GKHZmaW9fZG1hX21hcF9saW1pdF90ZXN0LCB1bm1hcF9hbGwpXG4gXHR1NjQgdW5tYXBwZWQ7XG4gXHRpbnQgcmM7XG4gXG4mIzQzO1x0aWYgKCFpb21tdV9zdXBwb3J0c191bm1hcF9hbGwoc2VsZi1cdTAwM2Vpb21tdSkpXG4mIzQzO1x0XHRTS0lQKHJldHVybiwgXCYjMzQ7SU9NTVUgYmFja2VuZCBkb2VzIG5vdCBzdXBwb3J0IHVubWFwLWFsbFxcblwmIzM0Oyk7XG4gXHRpb21tdV9tYXAoc2VsZi1cdTAwM2Vpb21tdSwgcmVnaW9uKTtcbiBcdEFTU0VSVF9FUShyZWdpb24tXHUwMDNlaW92YSwgdG9faW92YShzZWxmLVx1MDAzZWRldmljZSwgcmVnaW9uLVx1MDAzZXZhZGRyKSk7XG4gXG5AQCAtMjk0LDEwICYjNDM7MzE2LDE4IEBAIFRFU1RfRih2ZmlvX2RtYV9tYXBfbGltaXRfdGVzdCwgb3ZlcmZsb3cpXG4gXHRyZWdpb24tXHUwMDNlc2l6ZSA9IHNlbGYtXHUwMDNlbW1hcF9zaXplO1xuIFxuIFx0cmMgPSBfX2lvbW11X21hcChzZWxmLVx1MDAzZWlvbW11LCByZWdpb24pO1xuJiM0MzsjaWZkZWYgX19wb3dlcnBjX19cbiYjNDM7XHRBU1NFUlRfRVEocmMsIC1FTlhJTyk7XG4mIzQzOyNlbHNlXG4gXHRBU1NFUlRfRVEocmMsIC1FT1ZFUkZMT1cpO1xuJiM0MzsjZW5kaWZcbiBcbiBcdHJjID0gX19pb21tdV91bm1hcChzZWxmLVx1MDAzZWlvbW11LCByZWdpb24sIE5VTEwpO1xuJiM0MzsjaWZkZWYgX19wb3dlcnBjX19cbiYjNDM7XHRBU1NFUlRfRVEocmMsIC1FTlhJTyk7XG4mIzQzOyNlbHNlXG4gXHRBU1NFUlRfRVEocmMsIC1FT1ZFUkZMT1cpO1xuJiM0MzsjZW5kaWZcbiB9XG4gXG4gaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL3ZmaW9fcGNpX2RldmljZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL3ZmaW9fcGNpX2RldmljZV90ZXN0LmNcbmluZGV4IDkzYzExZmQ1ZTA4MTgyLi40NWI4YmY2MDUyN2E4NiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19wY2lfZGV2aWNlX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX3BjaV9kZXZpY2VfdGVzdC5jXG5AQCAtMjksNyAmIzQzOzI5LDcgQEAgRklYVFVSRSh2ZmlvX3BjaV9kZXZpY2VfdGVzdCkge1xuIFxuIEZJWFRVUkVfU0VUVVAodmZpb19wY2lfZGV2aWNlX3Rlc3QpXG4ge1xuLVx0c2VsZi1cdTAwM2Vpb21tdSA9IGlvbW11X2luaXQoZGVmYXVsdF9pb21tdV9tb2RlKTtcbiYjNDM7XHRzZWxmLVx1MDAzZWlvbW11ID0gaW9tbXVfaW5pdCh2ZmlvX3NlbGZ0ZXN0c19nZXRfaW9tbXVfbW9kZSgpKTtcbiBcdHNlbGYtXHUwMDNlZGV2aWNlID0gdmZpb19wY2lfZGV2aWNlX2luaXQoZGV2aWNlX2JkZiwgc2VsZi1cdTAwM2Vpb21tdSk7XG4gfVxuIFxuQEAgLTEyMSw3ICYjNDM7MTIxLDcgQEAgRklYVFVSRV9WQVJJQU5UX0FERCh2ZmlvX3BjaV9pcnFfdGVzdCwgbXNpeCkge1xuIFxuIEZJWFRVUkVfU0VUVVAodmZpb19wY2lfaXJxX3Rlc3QpXG4ge1xuLVx0c2VsZi1cdTAwM2Vpb21tdSA9IGlvbW11X2luaXQoZGVmYXVsdF9pb21tdV9tb2RlKTtcbiYjNDM7XHRzZWxmLVx1MDAzZWlvbW11ID0gaW9tbXVfaW5pdCh2ZmlvX3NlbGZ0ZXN0c19nZXRfaW9tbXVfbW9kZSgpKTtcbiBcdHNlbGYtXHUwMDNlZGV2aWNlID0gdmZpb19wY2lfZGV2aWNlX2luaXQoZGV2aWNlX2JkZiwgc2VsZi1cdTAwM2Vpb21tdSk7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA5OjI3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby8pIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM2MmNlZDY5ZWZmZTYzMjdmZjczOGY5ZGViMDVjNjc2OTIyMGZhNWIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAzIDA5OjI3OjIwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vTWFrZWZpbGUKaW5kZXggMmMzMmM0OGRiNTA5ODUuLjhmZDZhZmQzMzRlNTMyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vTWFrZWZpbGUKQEAgLTEsNiAmIzQzOzEsNiBAQAogQVJDSCA/PSAkKHNoZWxsIHVuYW1lIC1tKQogCi1pZmVxICgsJChmaWx0ZXIgJChBUkNIKSxhYXJjaDY0IGFybTY0IHg4NiB4ODZfNjQpKQomIzQzO2lmZXEgKCwkKGZpbHRlciAkKEFSQ0gpLGFhcmNoNjQgYXJtNjQgeDg2IHg4Nl82NCBwcGM2NCBwcGM2NGxlKSkKICMgRG8gbm90aGluZyBvbiB1bnN1cHBvcnRlZCBhcmNoaXRlY3R1cmVzCiBpbmNsdWRlIC4uL2xpYi5tawogZWxzZQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8uaAppbmRleCAwNzg2MmI0NzA3NzdiZC4uYzBiNGEyYWIwNmM1YWUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby5oCkBAIC0yNCw2ICYjNDM7MjQsMTUgQEAKIGNvbnN0IGNoYXIgKnZmaW9fc2VsZnRlc3RzX2dldF9iZGYoaW50ICphcmdjLCBjaGFyICphcmd2W10pOwogY2hhciAqKnZmaW9fc2VsZnRlc3RzX2dldF9iZGZzKGludCAqYXJnYywgY2hhciAqYXJndltdLCBpbnQgKm5yX2JkZnMpOwogCiYjNDM7LyoKJiM0MzsgKiBSZXR1cm4gdGhlIElPTU1VIG1vZGUgc3RyaW5nIGZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlCiYjNDM7ICogJFZGSU9fU0VMRlRFU1RTX0lPTU1VX01PREUuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zIE5VTEwgaWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBzZXQsIGFsbG93aW5nCiYjNDM7ICogdGVzdHMgdG8gdXNlIHRoZWlyIGRlZmF1bHQgbW9kZS4KJiM0MzsgKi8KJiM0Mztjb25zdCBjaGFyICp2ZmlvX3NlbGZ0ZXN0c19nZXRfaW9tbXVfbW9kZSh2b2lkKTsKJiM0MzsKIC8qCiAgKiBSZXNlcnZlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBvZiBzaXplIGF0IGFuIGFkZHJlc3Mgc2F0aXNmeWluZwogICogKHZhZGRyICUgYWxpZ24pID09IG9mZnNldC4KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby9pb21tdS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL2lvbW11LmgKaW5kZXggZTlhMzM4NmE0NzE5M2EuLmM5YjlhYjkyOWYxZjliIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vaW9tbXUuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vaW9tbXUuaApAQCAtMjQsMTIgJiM0MzsyNCwyNiBAQCBzdHJ1Y3QgZG1hX3JlZ2lvbiB7CiAJdTY0IHNpemU7CiB9OwogCiYjNDM7c3RydWN0IHNwYXByX3RjZV93aW5kb3cgewomIzQzOwl1NjQgc3RhcnQ7CiYjNDM7CXU2NCBzaXplOwomIzQzOwl1MzIgcGFnZV9zaGlmdDsKJiM0MzsJYm9vbCB2YWxpZDsKJiM0MzsJYm9vbCBkeW5hbWljOwomIzQzOwlib29sIHJlbW92ZV9vbl9jbGVhbnVwOwomIzQzO307CiYjNDM7CiBzdHJ1Y3QgaW9tbXUgewogCWNvbnN0IHN0cnVjdCBpb21tdV9tb2RlICptb2RlOwogCWludCBjb250YWluZXJfZmQ7CiAJaW50IGlvbW11ZmQ7CiAJdTMyIGlvYXNfaWQ7CiAJc3RydWN0IGxpc3RfaGVhZCBkbWFfcmVnaW9uczsKJiM0MzsjaWZkZWYgX19wb3dlcnBjX18KJiM0MzsJc3RydWN0IHNwYXByX3RjZV93aW5kb3cgZGVmYXVsdF93aW5kb3c7CiYjNDM7CXN0cnVjdCBzcGFwcl90Y2Vfd2luZG93IGRkd193aW5kb3c7CiYjNDM7CXN0cnVjdCBzcGFwcl90Y2Vfd2luZG93ICphY3RpdmVfd2luZG93OwomIzQzOyNlbmRpZgogfTsKIAogc3RydWN0IGlvbW11ICppb21tdV9pbml0KGNvbnN0IGNoYXIgKmlvbW11X21vZGUpOwpAQCAtNjEsMjIgJiM0Mzs3NSwzNCBAQCBpb3ZhX3QgaW9tbXVfaHZhMmlvdmEoc3RydWN0IGlvbW11ICppb21tdSwgdm9pZCAqdmFkZHIpOwogCiBzdHJ1Y3QgaW9tbXVfaW92YV9yYW5nZSAqaW9tbXVfaW92YV9yYW5nZXMoc3RydWN0IGlvbW11ICppb21tdSwgdTMyICpucmFuZ2VzKTsKIAomIzQzO2ludCBpb21tdV9wcmVwYXJlX2RtYV93aW5kb3coc3RydWN0IGlvbW11ICppb21tdSwgdTY0IG1pbl9zaXplLAomIzQzOwkJCSAgICAgdTY0IHBhZ2Vfc2l6ZSwgYm9vbCBmb3JjZV9keW5hbWljKTsKJiM0Mztib29sIGlvbW11X3N1cHBvcnRzX3VubWFwX2FsbChzdHJ1Y3QgaW9tbXUgKmlvbW11KTsKJiM0MzsKICNkZWZpbmUgTU9ERV9WRklPX1RZUEUxX0lPTU1VICYjMzQ7dmZpb190eXBlMV9pb21tdSYjMzQ7CiAjZGVmaW5lIE1PREVfVkZJT19UWVBFMVYyX0lPTU1VICYjMzQ7dmZpb190eXBlMXYyX2lvbW11JiMzNDsKICNkZWZpbmUgTU9ERV9JT01NVUZEX0NPTVBBVF9UWVBFMSAmIzM0O2lvbW11ZmRfY29tcGF0X3R5cGUxJiMzNDsKICNkZWZpbmUgTU9ERV9JT01NVUZEX0NPTVBBVF9UWVBFMVYyICYjMzQ7aW9tbXVmZF9jb21wYXRfdHlwZTF2MiYjMzQ7CiAjZGVmaW5lIE1PREVfSU9NTVVGRCAmIzM0O2lvbW11ZmQmIzM0OwomIzQzOyNpZmRlZiBfX3Bvd2VycGNfXwomIzQzOyNkZWZpbmUgTU9ERV9WRklPX1NQQVBSX1RDRV9WMl9JT01NVSAmIzM0O3ZmaW9fc3BhcHJfdGNlX3YyX2lvbW11JiMzNDsKJiM0MzsjZW5kaWYKIAogLyoKICAqIEdlbmVyYXRvciBmb3IgVkZJTyBzZWxmdGVzdHMgZml4dHVyZSB2YXJpYW50cyB0aGF0IHJlcGxpY2F0ZSBhY3Jvc3MgYWxsCiAgKiBwb3NzaWJsZSBJT01NVSBtb2Rlcy4gVGVzdHMgbXVzdCBkZWZpbmUgRklYVFVSRV9WQVJJQU5UX0FERF9JT01NVV9NT0RFKCkKICAqIHdoaWNoIHNob3VsZCB0aGVuIHVzZSBGSVhUVVJFX1ZBUklBTlRfQUREKCkgdG8gY3JlYXRlIHRoZSB2YXJpYW50LgogICovCiYjNDM7I2lmZGVmIF9fcG93ZXJwY19fCiYjNDM7I2RlZmluZSBGSVhUVVJFX1ZBUklBTlRfQUREX0FMTF9JT01NVV9NT0RFUyguLi4pIFwKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREUodmZpb19zcGFwcl90Y2VfdjJfaW9tbXUsICMjX19WQV9BUkdTX18pCiYjNDM7I2Vsc2UKICNkZWZpbmUgRklYVFVSRV9WQVJJQU5UX0FERF9BTExfSU9NTVVfTU9ERVMoLi4uKSBcCiBGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREUodmZpb190eXBlMV9pb21tdSwgIyNfX1ZBX0FSR1NfXyk7IFwKIEZJWFRVUkVfVkFSSUFOVF9BRERfSU9NTVVfTU9ERSh2ZmlvX3R5cGUxdjJfaW9tbXUsICMjX19WQV9BUkdTX18pOyBcCiBGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREUoaW9tbXVmZF9jb21wYXRfdHlwZTEsICMjX19WQV9BUkdTX18pOyBcCiBGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREUoaW9tbXVmZF9jb21wYXRfdHlwZTF2MiwgIyNfX1ZBX0FSR1NfXyk7IFwKIEZJWFRVUkVfVkFSSUFOVF9BRERfSU9NTVVfTU9ERShpb21tdWZkLCAjI19fVkFfQVJHU19fKQomIzQzOyNlbmRpZgogCiAjZW5kaWYgLyogU0VMRlRFU1RTX1ZGSU9fTElCX0lOQ0xVREVfTElCVkZJT19JT01NVV9IICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pb21tdS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW9tbXUuYwppbmRleCAwMzVkYWMwNjlkNjAxNi4uMTlkMTliYjQ1YTE0YjUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2lvbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW9tbXUuYwpAQCAtMTYsOSAmIzQzOzE2LDExIEBACiAjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC92ZmlvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW9tbXVmZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zaXplcy5oJmd0OwogCiAjaW5jbHVkZSAmIzM0Oy4uLy4uLy4uL2tzZWxmdGVzdC5oJiMzNDsKICNpbmNsdWRlICZsdDtsaWJ2ZmlvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbWl0cy5oJmd0OwogCiBjb25zdCBjaGFyICpkZWZhdWx0X2lvbW11X21vZGUgPSBNT0RFX0lPTU1VRkQ7CiAKQEAgLTQ3LDYgJiM0Mzs0OSwxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlvbW11X21vZGUgaW9tbXVfbW9kZXNbXSA9IHsKIAl7CiAJCS5uYW1lID0gTU9ERV9JT01NVUZELAogCX0sCiYjNDM7I2lmZGVmIF9fcG93ZXJwY19fCiYjNDM7CXsKJiM0MzsJCS5uYW1lID0gTU9ERV9WRklPX1NQQVBSX1RDRV9WMl9JT01NVSwKJiM0MzsJCS5jb250YWluZXJfcGF0aCA9ICYjMzQ7L2Rldi92ZmlvL3ZmaW8mIzM0OywKJiM0MzsJCS5pb21tdV90eXBlID0gVkZJT19TUEFQUl9UQ0VfdjJfSU9NTVUsCiYjNDM7CX0sCiYjNDM7I2VuZGlmCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlvbW11X21vZGUgKmxvb2t1cF9pb21tdV9tb2RlKGNvbnN0IGNoYXIgKmlvbW11X21vZGUpCkBAIC04Niw2ICYjNDM7OTUsMjMzIEBAIGludCBfX2lvbW11X2h2YTJpb3ZhKHN0cnVjdCBpb21tdSAqaW9tbXUsIHZvaWQgKnZhZGRyLCBpb3ZhX3QgKmlvdmEpCiAJcmV0dXJuIC1FTk9FTlQ7CiB9CiAKJiM0MzsjaWZkZWYgX19wb3dlcnBjX18KJiM0MztzdGF0aWMgYm9vbCBpb21tdV9pc19zcGFwcl90Y2VfdjIoc3RydWN0IGlvbW11ICppb21tdSkKJiM0Mzt7CiYjNDM7CXJldHVybiAhIShpb21tdS0mZ3Q7bW9kZS0mZ3Q7aW9tbXVfdHlwZSA9PSBWRklPX1NQQVBSX1RDRV92Ml9JT01NVSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB1MzIgcGFnZV9zaXplX3RvX3NoaWZ0KHU2NCBwYWdlX3NpemUpCiYjNDM7ewomIzQzOwlyZXR1cm4gX19idWlsdGluX2N0emxsKHBhZ2Vfc2l6ZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgc3BhcHJfdGNlX3JlYWRfZGVmYXVsdF93aW5kb3coc3RydWN0IGlvbW11ICppb21tdSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2ZmlvX2lvbW11X3NwYXByX3RjZV9pbmZvIGluZm8gPSB7CiYjNDM7CQkuYXJnc3ogPSBzaXplb2YoaW5mbyksCiYjNDM7CX07CiYjNDM7CiYjNDM7CWlmIChpb21tdS0mZ3Q7ZGVmYXVsdF93aW5kb3cudmFsaWQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKGlvY3RsKGlvbW11LSZndDtjb250YWluZXJfZmQsIFZGSU9fSU9NTVVfU1BBUFJfVENFX0dFVF9JTkZPLCAmYW1wO2luZm8pKQomIzQzOwkJcmV0dXJuIC1lcnJubzsKJiM0MzsKJiM0MzsJaW9tbXUtJmd0O2RlZmF1bHRfd2luZG93LnN0YXJ0ID0gaW5mby5kbWEzMl93aW5kb3dfc3RhcnQ7CiYjNDM7CWlvbW11LSZndDtkZWZhdWx0X3dpbmRvdy5zaXplID0gaW5mby5kbWEzMl93aW5kb3dfc2l6ZTsKJiM0MzsJaW9tbXUtJmd0O2RlZmF1bHRfd2luZG93LnBhZ2Vfc2hpZnQgPSBwYWdlX3NpemVfdG9fc2hpZnQoZ2V0cGFnZXNpemUoKSk7CiYjNDM7CWlvbW11LSZndDtkZWZhdWx0X3dpbmRvdy52YWxpZCA9IHRydWU7CiYjNDM7CWlvbW11LSZndDtkZWZhdWx0X3dpbmRvdy5keW5hbWljID0gZmFsc2U7CiYjNDM7CWlvbW11LSZndDtkZWZhdWx0X3dpbmRvdy5yZW1vdmVfb25fY2xlYW51cCA9IGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBzcGFwcl90Y2VfY3JlYXRlX2RkdyhzdHJ1Y3QgaW9tbXUgKmlvbW11LCB1NjQgbWluX3NpemUsIHUzMiBwYWdlX3NoaWZ0KQomIzQzO3sKJiM0MzsJc3RydWN0IHZmaW9faW9tbXVfc3BhcHJfdGNlX2NyZWF0ZSBjcmVhdGUgPSB7CiYjNDM7CQkuYXJnc3ogPSBzaXplb2YoY3JlYXRlKSwKJiM0MzsJCS5wYWdlX3NoaWZ0ID0gcGFnZV9zaGlmdCwKJiM0MzsJCS5sZXZlbHMgPSAxLAomIzQzOwkJLndpbmRvd19zaXplID0gbWluX3NpemUsCiYjNDM7CX07CiYjNDM7CiYjNDM7CWlmIChpb2N0bChpb21tdS0mZ3Q7Y29udGFpbmVyX2ZkLCBWRklPX0lPTU1VX1NQQVBSX1RDRV9DUkVBVEUsICZhbXA7Y3JlYXRlKSkKJiM0MzsJCXJldHVybiAtZXJybm87CiYjNDM7CiYjNDM7CWlvbW11LSZndDtkZHdfd2luZG93LnN0YXJ0ID0gY3JlYXRlLnN0YXJ0X2FkZHI7CiYjNDM7CWlvbW11LSZndDtkZHdfd2luZG93LnNpemUgPSBjcmVhdGUud2luZG93X3NpemU7CiYjNDM7CWlvbW11LSZndDtkZHdfd2luZG93LnBhZ2Vfc2hpZnQgPSBwYWdlX3NoaWZ0OwomIzQzOwlpb21tdS0mZ3Q7ZGR3X3dpbmRvdy52YWxpZCA9IHRydWU7CiYjNDM7CWlvbW11LSZndDtkZHdfd2luZG93LmR5bmFtaWMgPSB0cnVlOwomIzQzOwlpb21tdS0mZ3Q7ZGR3X3dpbmRvdy5yZW1vdmVfb25fY2xlYW51cCA9IHRydWU7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHNwYXByX3RjZV9yZW1vdmVfd2luZG93KHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBzcGFwcl90Y2Vfd2luZG93ICp3aW5kb3cpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdmZpb19pb21tdV9zcGFwcl90Y2VfcmVtb3ZlIHJlbW92ZSA9IHsKJiM0MzsJCS5hcmdzeiA9IHNpemVvZihyZW1vdmUpLAomIzQzOwkJLnN0YXJ0X2FkZHIgPSB3aW5kb3ctJmd0O3N0YXJ0LAomIzQzOwl9OwomIzQzOwomIzQzOwlpZiAoIXdpbmRvdy0mZ3Q7dmFsaWQgfHwgIXdpbmRvdy0mZ3Q7cmVtb3ZlX29uX2NsZWFudXApCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKGlvY3RsKGlvbW11LSZndDtjb250YWluZXJfZmQsIFZGSU9fSU9NTVVfU1BBUFJfVENFX1JFTU9WRSwgJmFtcDtyZW1vdmUpKQomIzQzOwkJcmV0dXJuIC1lcnJubzsKJiM0MzsKJiM0MzsJd2luZG93LSZndDt2YWxpZCA9IGZhbHNlOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgc3BhcHJfdGNlX3dpbmRvd19zYXRpc2ZpZXMoc3RydWN0IHNwYXByX3RjZV93aW5kb3cgKndpbmRvdywKJiM0MzsJCQkJICAgICAgIHU2NCBtaW5fc2l6ZSwgdTMyIHBhZ2Vfc2hpZnQsCiYjNDM7CQkJCSAgICAgICBib29sIHJlcXVpcmVfZHluYW1pYykKJiM0Mzt7CiYjNDM7CWlmICghd2luZG93IHx8ICF3aW5kb3ctJmd0O3ZhbGlkKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAocmVxdWlyZV9keW5hbWljICZhbXA7JmFtcDsgIXdpbmRvdy0mZ3Q7ZHluYW1pYykKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKHdpbmRvdy0mZ3Q7c2l6ZSAmbHQ7IG1pbl9zaXplKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAod2luZG93LSZndDtwYWdlX3NoaWZ0ICE9IHBhZ2Vfc2hpZnQpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGlvbW11X2lvdmFfcmFuZ2UgKnNwYXByX3RjZV9pb3ZhX3JhbmdlcyhzdHJ1Y3QgaW9tbXUgKmlvbW11LCB1MzIgKm5yYW5nZXMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaW9tbXVfaW92YV9yYW5nZSAqcmFuZ2VzOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIWlvbW11LSZndDthY3RpdmVfd2luZG93KSB7CiYjNDM7CQlyZXQgPSBpb21tdV9wcmVwYXJlX2RtYV93aW5kb3coaW9tbXUsIFNaXzFHLCBnZXRwYWdlc2l6ZSgpLCBmYWxzZSk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiBOVUxMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJhbmdlcyA9IGNhbGxvYygxLCBzaXplb2YoKnJhbmdlcykpOwomIzQzOwlWRklPX0FTU0VSVF9OT1RfTlVMTChyYW5nZXMpOwomIzQzOwomIzQzOwlyYW5nZXNbMF0uc3RhcnQgPSBpb21tdS0mZ3Q7YWN0aXZlX3dpbmRvdy0mZ3Q7c3RhcnQ7CiYjNDM7CXJhbmdlc1swXS5sYXN0ID0gaW9tbXUtJmd0O2FjdGl2ZV93aW5kb3ctJmd0O3N0YXJ0ICYjNDM7IGlvbW11LSZndDthY3RpdmVfd2luZG93LSZndDtzaXplIC0gMTsKJiM0MzsKJiM0MzsJKm5yYW5nZXMgPSAxOwomIzQzOwlyZXR1cm4gcmFuZ2VzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBzcGFwcl90Y2VfaW92YV9pbnNpZGVfd2luZG93KHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24pCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc3BhcHJfdGNlX3dpbmRvdyAqd2luZG93ID0gaW9tbXUtJmd0O2FjdGl2ZV93aW5kb3c7CiYjNDM7CiYjNDM7CWlmICghd2luZG93IHx8ICF3aW5kb3ctJmd0O3ZhbGlkKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAocmVnaW9uLSZndDtpb3ZhICZsdDsgd2luZG93LSZndDtzdGFydCkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKHJlZ2lvbi0mZ3Q7aW92YSAmIzQzOyByZWdpb24tJmd0O3NpemUgJmd0OyB3aW5kb3ctJmd0O3N0YXJ0ICYjNDM7IHdpbmRvdy0mZ3Q7c2l6ZSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgc3BhcHJfcmVnaXN0ZXJfbWVtb3J5KHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdmZpb19pb21tdV9zcGFwcl9yZWdpc3Rlcl9tZW1vcnkgYXJncyA9IHsKJiM0MzsJCS5hcmdzeiA9IHNpemVvZihhcmdzKSwKJiM0MzsJCS52YWRkciA9ICh1NjQpcmVnaW9uLSZndDt2YWRkciwKJiM0MzsJCS5zaXplID0gcmVnaW9uLSZndDtzaXplLAomIzQzOwl9OwomIzQzOwomIzQzOwlpZiAoaW9jdGwoaW9tbXUtJmd0O2NvbnRhaW5lcl9mZCwgVkZJT19JT01NVV9TUEFQUl9SRUdJU1RFUl9NRU1PUlksICZhbXA7YXJncykpCiYjNDM7CQlyZXR1cm4gLWVycm5vOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBzcGFwcl91bnJlZ2lzdGVyX21lbW9yeShzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uKQomIzQzO3sKJiM0MzsJc3RydWN0IHZmaW9faW9tbXVfc3BhcHJfcmVnaXN0ZXJfbWVtb3J5IGFyZ3MgPSB7CiYjNDM7CQkuYXJnc3ogPSBzaXplb2YoYXJncyksCiYjNDM7CQkudmFkZHIgPSAodTY0KXJlZ2lvbi0mZ3Q7dmFkZHIsCiYjNDM7CQkuc2l6ZSA9IHJlZ2lvbi0mZ3Q7c2l6ZSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJaWYgKGlvY3RsKGlvbW11LSZndDtjb250YWluZXJfZmQsIFZGSU9fSU9NTVVfU1BBUFJfVU5SRUdJU1RFUl9NRU1PUlksICZhbXA7YXJncykpCiYjNDM7CQlyZXR1cm4gLWVycm5vOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IGlvbW11X3ByZXBhcmVfZG1hX3dpbmRvdyhzdHJ1Y3QgaW9tbXUgKmlvbW11LCB1NjQgbWluX3NpemUsCiYjNDM7CQkJICAgICB1NjQgcGFnZV9zaXplLCBib29sIGZvcmNlX2R5bmFtaWMpCiYjNDM7ewomIzQzOwl1MzIgcGFnZV9zaGlmdDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCFpb21tdV9pc19zcGFwcl90Y2VfdjIoaW9tbXUpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmICghcGFnZV9zaXplKQomIzQzOwkJcGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTsKJiM0MzsKJiM0MzsJcGFnZV9zaGlmdCA9IHBhZ2Vfc2l6ZV90b19zaGlmdChwYWdlX3NpemUpOwomIzQzOwomIzQzOwlyZXQgPSBzcGFwcl90Y2VfcmVhZF9kZWZhdWx0X3dpbmRvdyhpb21tdSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBOb3JtYWwgbWFwcGluZyBwYXRoOgomIzQzOwkgKiB1c2UgZGVmYXVsdCB3aW5kb3cgd2hlbiBpdCBzYXRpc2ZpZXMgdGhlIHJlcXVlc3QuCiYjNDM7CSAqLwomIzQzOwlpZiAoIWZvcmNlX2R5bmFtaWMgJmFtcDsmYW1wOwomIzQzOwkgICAgc3BhcHJfdGNlX3dpbmRvd19zYXRpc2ZpZXMoJmFtcDtpb21tdS0mZ3Q7ZGVmYXVsdF93aW5kb3csCiYjNDM7CQkJCSAgICAgICBtaW5fc2l6ZSwgcGFnZV9zaGlmdCwgZmFsc2UpKSB7CiYjNDM7CQlpb21tdS0mZ3Q7YWN0aXZlX3dpbmRvdyA9ICZhbXA7aW9tbXUtJmd0O2RlZmF1bHRfd2luZG93OwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRHluYW1pYyBwYXRoOgomIzQzOwkgKiB1c2UgZXhpc3RpbmcgRERXIGlmIGl0IGFscmVhZHkgc2F0aXNmaWVzIHRoZSByZXF1ZXN0LgomIzQzOwkgKi8KJiM0MzsJaWYgKHNwYXByX3RjZV93aW5kb3dfc2F0aXNmaWVzKCZhbXA7aW9tbXUtJmd0O2Rkd193aW5kb3csCiYjNDM7CQkJCSAgICAgICBtaW5fc2l6ZSwgcGFnZV9zaGlmdCwgdHJ1ZSkpIHsKJiM0MzsJCWlvbW11LSZndDthY3RpdmVfd2luZG93ID0gJmFtcDtpb21tdS0mZ3Q7ZGR3X3dpbmRvdzsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE5laXRoZXIgZGVmYXVsdCBub3IgRERXIGlzIHN1ZmZpY2llbnQuCiYjNDM7CSAqIFJlbW92ZSBvbmx5IHRoZSBzZWxmdGVzdC1jcmVhdGVkIEREVywgdGhlbiBjcmVhdGUgYSBuZXcgRERXLgomIzQzOwkgKi8KJiM0MzsJcmV0ID0gc3BhcHJfdGNlX3JlbW92ZV93aW5kb3coaW9tbXUsICZhbXA7aW9tbXUtJmd0O2Rkd193aW5kb3cpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gc3BhcHJfdGNlX2NyZWF0ZV9kZHcoaW9tbXUsIG1pbl9zaXplLCBwYWdlX3NoaWZ0KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlvbW11LSZndDthY3RpdmVfd2luZG93ID0gJmFtcDtpb21tdS0mZ3Q7ZGR3X3dpbmRvdzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOyNlbHNlCiYjNDM7aW50IGlvbW11X3ByZXBhcmVfZG1hX3dpbmRvdyhzdHJ1Y3QgaW9tbXUgKmlvbW11LCB1NjQgbWluX3NpemUsCiYjNDM7CQkJICAgICB1NjQgcGFnZV9zaXplLCBib29sIGZvcmNlX2R5bmFtaWMpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7Ym9vbCBpb21tdV9zdXBwb3J0c191bm1hcF9hbGwoc3RydWN0IGlvbW11ICppb21tdSkKJiM0Mzt7CiYjNDM7I2lmZGVmIF9fcG93ZXJwY19fCiYjNDM7CWlmIChpb21tdV9pc19zcGFwcl90Y2VfdjIoaW9tbXUpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOyNlbmRpZgomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiBpb3ZhX3QgaW9tbXVfaHZhMmlvdmEoc3RydWN0IGlvbW11ICppb21tdSwgdm9pZCAqdmFkZHIpCiB7CiAJaW92YV90IGlvdmE7CkBAIC0xMDYsOSAmIzQzOzM0MiwyNyBAQCBzdGF0aWMgaW50IHZmaW9faW9tbXVfbWFwKHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24pCiAJCS5pb3ZhID0gcmVnaW9uLSZndDtpb3ZhLAogCQkuc2l6ZSA9IHJlZ2lvbi0mZ3Q7c2l6ZSwKIAl9OwomIzQzOwlpbnQgcmV0OwogCi0JaWYgKGlvY3RsKGlvbW11LSZndDtjb250YWluZXJfZmQsIFZGSU9fSU9NTVVfTUFQX0RNQSwgJmFtcDthcmdzKSkKJiM0MzsjaWZkZWYgX19wb3dlcnBjX18KJiM0MzsJaWYgKGlvbW11X2lzX3NwYXByX3RjZV92Mihpb21tdSkpIHsKJiM0MzsJCWlmICghc3BhcHJfdGNlX2lvdmFfaW5zaWRlX3dpbmRvdyhpb21tdSwgcmVnaW9uKSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCXJldCA9IHNwYXByX3JlZ2lzdGVyX21lbW9yeShpb21tdSwgcmVnaW9uKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOyNlbmRpZgomIzQzOwomIzQzOwlyZXQgPSBpb2N0bChpb21tdS0mZ3Q7Y29udGFpbmVyX2ZkLCBWRklPX0lPTU1VX01BUF9ETUEsICZhbXA7YXJncyk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsjaWZkZWYgX19wb3dlcnBjX18KJiM0MzsJCWlmIChpb21tdV9pc19zcGFwcl90Y2VfdjIoaW9tbXUpKQomIzQzOwkJCXNwYXByX3VucmVnaXN0ZXJfbWVtb3J5KGlvbW11LCByZWdpb24pOwomIzQzOyNlbmRpZgogCQlyZXR1cm4gLWVycm5vOwomIzQzOwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE3MCw4ICYjNDM7NDI0LDE4IEBAIHN0YXRpYyBpbnQgX192ZmlvX2lvbW11X3VubWFwKGludCBmZCwgdTY0IGlvdmEsIHU2NCBzaXplLCB1MzIgZmxhZ3MsIHU2NCAqdW5tYXBwCiBzdGF0aWMgaW50IHZmaW9faW9tbXVfdW5tYXAoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbiwKIAkJCSAgICB1NjQgKnVubWFwcGVkKQogewotCXJldHVybiBfX3ZmaW9faW9tbXVfdW5tYXAoaW9tbXUtJmd0O2NvbnRhaW5lcl9mZCwgcmVnaW9uLSZndDtpb3ZhLAotCQkJCSAgcmVnaW9uLSZndDtzaXplLCAwLCB1bm1hcHBlZCk7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IF9fdmZpb19pb21tdV91bm1hcChpb21tdS0mZ3Q7Y29udGFpbmVyX2ZkLCByZWdpb24tJmd0O2lvdmEsCiYjNDM7CQkJCSByZWdpb24tJmd0O3NpemUsIDAsIHVubWFwcGVkKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7I2lmZGVmIF9fcG93ZXJwY19fCiYjNDM7CWlmIChpb21tdV9pc19zcGFwcl90Y2VfdjIoaW9tbXUpKQomIzQzOwkJcmV0ID0gc3BhcHJfdW5yZWdpc3Rlcl9tZW1vcnkoaW9tbXUsIHJlZ2lvbik7CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgX19pb21tdWZkX3VubWFwKGludCBmZCwgdTY0IGlvdmEsIHU2NCBsZW5ndGgsIHUzMiBpb2FzX2lkLCB1NjQgKnVubWFwcGVkKQpAQCAtMzE3LDYgJiM0Mzs1ODEsMTEgQEAgc3RhdGljIHN0cnVjdCBpb21tdV9pb3ZhX3JhbmdlICp2ZmlvX2lvbW11X2lvdmFfcmFuZ2VzKHN0cnVjdCBpb21tdSAqaW9tbXUsCiAJc3RydWN0IHZmaW9faW5mb19jYXBfaGVhZGVyICpoZHI7CiAJc3RydWN0IGlvbW11X2lvdmFfcmFuZ2UgKnJhbmdlcyA9IE5VTEw7CiAKJiM0MzsjaWZkZWYgX19wb3dlcnBjX18KJiM0MzsJaWYgKGlvbW11X2lzX3NwYXByX3RjZV92Mihpb21tdSkpCiYjNDM7CQlyZXR1cm4gc3BhcHJfdGNlX2lvdmFfcmFuZ2VzKGlvbW11LCBucmFuZ2VzKTsKJiM0MzsjZW5kaWYKJiM0MzsKIAlpbmZvID0gdmZpb19pb21tdV9nZXRfaW5mbyhpb21tdS0mZ3Q7Y29udGFpbmVyX2ZkKTsKIAloZHIgPSB2ZmlvX2lvbW11X2luZm9fY2FwX2hkcihpbmZvLCBWRklPX0lPTU1VX1RZUEUxX0lORk9fQ0FQX0lPVkFfUkFOR0UpOwogCVZGSU9fQVNTRVJUX05PVF9OVUxMKGhkcik7CkBAIC00NTUsNiAmIzQzOzcyNCwxMSBAQCBzdHJ1Y3QgaW9tbXUgKmlvbW11X2luaXQoY29uc3QgY2hhciAqaW9tbXVfbW9kZSkKIAogdm9pZCBpb21tdV9jbGVhbnVwKHN0cnVjdCBpb21tdSAqaW9tbXUpCiB7CiYjNDM7I2lmZGVmIF9fcG93ZXJwY19fCiYjNDM7CWlmIChpb21tdV9pc19zcGFwcl90Y2VfdjIoaW9tbXUpKQomIzQzOwkJc3BhcHJfdGNlX3JlbW92ZV93aW5kb3coaW9tbXUsICZhbXA7aW9tbXUtJmd0O2Rkd193aW5kb3cpOwomIzQzOyNlbmRpZgomIzQzOwogCWlmIChpb21tdS0mZ3Q7aW9tbXVmZCkKIAkJVkZJT19BU1NFUlRfRVEoY2xvc2UoaW9tbXUtJmd0O2lvbW11ZmQpLCAwKTsKIAllbHNlCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLmMKaW5kZXggM2EzZDFlZDYzNWMxZGYuLjEyZjczMTk2M2IwNThhIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5jCkBAIC0xMDEsMyAmIzQzOzEwMSw0MCBAQCB2b2lkICptbWFwX3Jlc2VydmUoc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbiwgc2l6ZV90IG9mZnNldCkKIAogCXJldHVybiBtYXBfYWxpZ247CiB9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKmdldF9pb21tdV9tb2RlX2Vudih2b2lkKQomIzQzO3sKJiM0MzsJY29uc3QgY2hhciAqbW9kZTsKJiM0MzsJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB2YWxpZF9tb2Rlc1tdID0gewomIzQzOwkJTU9ERV9WRklPX1RZUEUxX0lPTU1VLAomIzQzOwkJTU9ERV9WRklPX1RZUEUxVjJfSU9NTVUsCiYjNDM7CQlNT0RFX0lPTU1VRkRfQ09NUEFUX1RZUEUxLAomIzQzOwkJTU9ERV9JT01NVUZEX0NPTVBBVF9UWVBFMVYyLAomIzQzOwkJTU9ERV9JT01NVUZELAomIzQzOyNpZmRlZiBfX3Bvd2VycGNfXwomIzQzOwkJTU9ERV9WRklPX1NQQVBSX1RDRV9WMl9JT01NVSwKJiM0MzsjZW5kaWYKJiM0MzsJfTsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CW1vZGUgPSBnZXRlbnYoJiMzNDtWRklPX1NFTEZURVNUU19JT01NVV9NT0RFJiMzNDspOwomIzQzOwlpZiAoIW1vZGUpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUodmFsaWRfbW9kZXMpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKCFzdHJjbXAobW9kZSwgdmFsaWRfbW9kZXNbaV0pKQomIzQzOwkJCXJldHVybiBtb2RlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZwcmludGYoc3RkZXJyLCAmIzM0O0ludmFsaWQgVkZJT19TRUxGVEVTVFNfSU9NTVVfTU9ERTogJXNcbiYjMzQ7LCBtb2RlKTsKJiM0MzsJZnByaW50ZihzdGRlcnIsICYjMzQ7VmFsaWQgbW9kZXMgYXJlOlxuJiMzNDspOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRSh2YWxpZF9tb2Rlcyk7IGkmIzQzOyYjNDM7KQomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7ICAlc1xuJiMzNDssIHZhbGlkX21vZGVzW2ldKTsKJiM0MzsJZXhpdChLU0ZUX1NLSVApOwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBjaGFyICp2ZmlvX3NlbGZ0ZXN0c19nZXRfaW9tbXVfbW9kZSh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIGdldF9pb21tdV9tb2RlX2VudigpOwomIzQzO30KJiM0MzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19kbWFfbWFwcGluZ190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL3ZmaW9fZG1hX21hcHBpbmdfdGVzdC5jCmluZGV4IDdkMGRlOGM3OWRlMTNmLi5jZDJkMzI3NmE0NmM0NiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX2RtYV9tYXBwaW5nX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL3ZmaW9fZG1hX21hcHBpbmdfdGVzdC5jCkBAIC0xLDUgJiM0MzsxLDYgQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKICNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKICNpbmNsdWRlICZsdDtzeXMvbW1hbi5oJmd0OwogI2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwogCkBAIC0xMTksOCAmIzQzOzEyMCwxOSBAQCBGSVhUVVJFX1ZBUklBTlRfQUREX0FMTF9JT01NVV9NT0RFUyhhbm9ueW1vdXNfaHVnZXRsYl8xZ2IsIFNaXzFHLCBNQVBfSFVHRVRMQiB8CiAKIEZJWFRVUkVfU0VUVVAodmZpb19kbWFfbWFwcGluZ190ZXN0KQogewomIzQzOwljb25zdCB1NjQgcGFnZV9zaXplID0gdmFyaWFudC0mZ3Q7c2l6ZSA/OiBnZXRwYWdlc2l6ZSgpOwomIzQzOwljb25zdCBib29sIGZvcmNlX2R5bmFtaWMgPSAhIXZhcmlhbnQtJmd0O3NpemU7CiYjNDM7CWludCByZXQ7CiYjNDM7CiAJc2VsZi0mZ3Q7aW9tbXUgPSBpb21tdV9pbml0KHZhcmlhbnQtJmd0O2lvbW11X21vZGUpOwogCXNlbGYtJmd0O2RldmljZSA9IHZmaW9fcGNpX2RldmljZV9pbml0KGRldmljZV9iZGYsIHNlbGYtJmd0O2lvbW11KTsKJiM0MzsKJiM0MzsJcmV0ID0gaW9tbXVfcHJlcGFyZV9kbWFfd2luZG93KHNlbGYtJmd0O2lvbW11LCBwYWdlX3NpemUsIHBhZ2Vfc2l6ZSwKJiM0MzsJCQkJICAgICAgIGZvcmNlX2R5bmFtaWMpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7RE1BIHdpbmRvdyB1bmF2YWlsYWJsZTogJXMgKCVkKVxuJiMzNDssCiYjNDM7CQkgICAgIHN0cmVycm9yKC1yZXQpLCAtcmV0KTsKJiM0MzsKIAlzZWxmLSZndDtpb3ZhX2FsbG9jYXRvciA9IGlvdmFfYWxsb2NhdG9yX2luaXQoc2VsZi0mZ3Q7aW9tbXUpOwogfQogCkBAIC0yMjcsNiAmIzQzOzIzOSw3IEBAIEZJWFRVUkVfU0VUVVAodmZpb19kbWFfbWFwX2xpbWl0X3Rlc3QpCiAJdTY0IHJlZ2lvbl9zaXplID0gZ2V0cGFnZXNpemUoKTsKIAlpb3ZhX3QgbGFzdF9pb3ZhOwogCXUzMiBucmFuZ2VzOwomIzQzOwlpbnQgcmV0OwogCiAJLyoKIAkgKiBPdmVyLWFsbG9jYXRlIG1tYXAgYnkgZG91YmxlIHRoZSBzaXplIHRvIHByb3ZpZGUgZW5vdWdoIGJhY2tpbmcgdmFkZHIKQEAgLTIzNiw2ICYjNDM7MjQ5LDEzIEBAIEZJWFRVUkVfU0VUVVAodmZpb19kbWFfbWFwX2xpbWl0X3Rlc3QpCiAKIAlzZWxmLSZndDtpb21tdSA9IGlvbW11X2luaXQodmFyaWFudC0mZ3Q7aW9tbXVfbW9kZSk7CiAJc2VsZi0mZ3Q7ZGV2aWNlID0gdmZpb19wY2lfZGV2aWNlX2luaXQoZGV2aWNlX2JkZiwgc2VsZi0mZ3Q7aW9tbXUpOwomIzQzOwomIzQzOwlyZXQgPSBpb21tdV9wcmVwYXJlX2RtYV93aW5kb3coc2VsZi0mZ3Q7aW9tbXUsIHJlZ2lvbl9zaXplLCByZWdpb25fc2l6ZSwKJiM0MzsJCQkJICAgICAgIGZhbHNlKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O0RNQSB3aW5kb3cgdW5hdmFpbGFibGU6ICVzICglZClcbiYjMzQ7LAomIzQzOwkJICAgICBzdHJlcnJvcigtcmV0KSwgLXJldCk7CiYjNDM7CiAJcmVnaW9uLSZndDt2YWRkciA9IG1tYXAoTlVMTCwgc2VsZi0mZ3Q7bW1hcF9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAogCQkJICAgICBNQVBfQU5PTllNT1VTIHwgTUFQX1BSSVZBVEUsIC0xLCAwKTsKIAlBU1NFUlRfTkUocmVnaW9uLSZndDt2YWRkciwgTUFQX0ZBSUxFRCk7CkBAIC0yNzcsNiAmIzQzOzI5Nyw4IEBAIFRFU1RfRih2ZmlvX2RtYV9tYXBfbGltaXRfdGVzdCwgdW5tYXBfYWxsKQogCXU2NCB1bm1hcHBlZDsKIAlpbnQgcmM7CiAKJiM0MzsJaWYgKCFpb21tdV9zdXBwb3J0c191bm1hcF9hbGwoc2VsZi0mZ3Q7aW9tbXUpKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7SU9NTVUgYmFja2VuZCBkb2VzIG5vdCBzdXBwb3J0IHVubWFwLWFsbFxuJiMzNDspOwogCWlvbW11X21hcChzZWxmLSZndDtpb21tdSwgcmVnaW9uKTsKIAlBU1NFUlRfRVEocmVnaW9uLSZndDtpb3ZhLCB0b19pb3ZhKHNlbGYtJmd0O2RldmljZSwgcmVnaW9uLSZndDt2YWRkcikpOwogCkBAIC0yOTQsMTAgJiM0MzszMTYsMTggQEAgVEVTVF9GKHZmaW9fZG1hX21hcF9saW1pdF90ZXN0LCBvdmVyZmxvdykKIAlyZWdpb24tJmd0O3NpemUgPSBzZWxmLSZndDttbWFwX3NpemU7CiAKIAlyYyA9IF9faW9tbXVfbWFwKHNlbGYtJmd0O2lvbW11LCByZWdpb24pOwomIzQzOyNpZmRlZiBfX3Bvd2VycGNfXwomIzQzOwlBU1NFUlRfRVEocmMsIC1FTlhJTyk7CiYjNDM7I2Vsc2UKIAlBU1NFUlRfRVEocmMsIC1FT1ZFUkZMT1cpOwomIzQzOyNlbmRpZgogCiAJcmMgPSBfX2lvbW11X3VubWFwKHNlbGYtJmd0O2lvbW11LCByZWdpb24sIE5VTEwpOwomIzQzOyNpZmRlZiBfX3Bvd2VycGNfXwomIzQzOwlBU1NFUlRfRVEocmMsIC1FTlhJTyk7CiYjNDM7I2Vsc2UKIAlBU1NFUlRfRVEocmMsIC1FT1ZFUkZMT1cpOwomIzQzOyNlbmRpZgogfQogCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX3BjaV9kZXZpY2VfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX3BjaV9kZXZpY2VfdGVzdC5jCmluZGV4IDkzYzExZmQ1ZTA4MTgyLi40NWI4YmY2MDUyN2E4NiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX3BjaV9kZXZpY2VfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19wY2lfZGV2aWNlX3Rlc3QuYwpAQCAtMjksNyAmIzQzOzI5LDcgQEAgRklYVFVSRSh2ZmlvX3BjaV9kZXZpY2VfdGVzdCkgewogCiBGSVhUVVJFX1NFVFVQKHZmaW9fcGNpX2RldmljZV90ZXN0KQogewotCXNlbGYtJmd0O2lvbW11ID0gaW9tbXVfaW5pdChkZWZhdWx0X2lvbW11X21vZGUpOwomIzQzOwlzZWxmLSZndDtpb21tdSA9IGlvbW11X2luaXQodmZpb19zZWxmdGVzdHNfZ2V0X2lvbW11X21vZGUoKSk7CiAJc2VsZi0mZ3Q7ZGV2aWNlID0gdmZpb19wY2lfZGV2aWNlX2luaXQoZGV2aWNlX2JkZiwgc2VsZi0mZ3Q7aW9tbXUpOwogfQogCkBAIC0xMjEsNyAmIzQzOzEyMSw3IEBAIEZJWFRVUkVfVkFSSUFOVF9BREQodmZpb19wY2lfaXJxX3Rlc3QsIG1zaXgpIHsKIAogRklYVFVSRV9TRVRVUCh2ZmlvX3BjaV9pcnFfdGVzdCkKIHsKLQlzZWxmLSZndDtpb21tdSA9IGlvbW11X2luaXQoZGVmYXVsdF9pb21tdV9tb2RlKTsKJiM0MzsJc2VsZi0mZ3Q7aW9tbXUgPSBpb21tdV9pbml0KHZmaW9fc2VsZnRlc3RzX2dldF9pb21tdV9tb2RlKCkpOwogCXNlbGYtJmd0O2RldmljZSA9IHZmaW9fcGNpX2RldmljZV9pbml0KGRldmljZV9iZGYsIHNlbGYtJmd0O2lvbW11KTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwOToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTg2CgkJCQkJCQlvdXRwdXQ6IDY1CgkJCQkJCQl0aG91Z2h0czogMzUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzOiBTZWxmdGVzdCBVcGRhdGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGFuZCBpdCBhcHBlYXJzIHRvIGJlIGZvY3VzZWQgc29sZWx5IG9uIHVwZGF0ZXMgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2AuIFRoYXQgZGlyZWN0b3J5IHNjcmVhbXMgJiMzNDtzZWxmdGVzdCYjMzQ7IHRvIG1lLCBhbmQgdGhhdCBtZWFucyB1c2Vyc3BhY2UsIG5vdCBrZXJuZWwgY29kZSB3ZSBuZWVkIHRvIHdvcnJ5IGFib3V0IGZ1enppbmcgZGlyZWN0bHkuIEkgbmVlZCB0byBiZSBzdXJlLCB0aG91Z2guIExldCYjMzk7cyBtYWtlIHN1cmUuCgpIbW0sIGxldCYjMzk7cyBjb25maXJtIHRoZSBmaWxlcy4KCkEgcXVpY2sgZGlmZiBjaGVjayBjb25maXJtcyBteSBpbml0aWFsIGltcHJlc3Npb24uIEl0JiMzOTtzIHRvdWNoaW5nIGBNYWtlZmlsZWAsIHNvbWUgaW5jbHVkZSBmaWxlcyAoYGxpYnZmaW8uaGAsIGBpb21tdS5oYCksIGFuZCBhIGZldyBDIGZpbGVzIChgaW9tbXUuY2AsIGBsaWJ2ZmlvLmNgLCBgdmZpb19kbWFfbWFwcGluZ190ZXN0LmNgLCBgdmZpb19wY2lfZGV2aWNlX3Rlc3QuY2ApLiBUaGF0JiMzOTtzIGFsbCB3aXRoaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2Agc3VidHJlZS4gRXhjZWxsZW50LgoKR2l2ZW4gdGhhdCAqYWxsKiB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGUgc2VsZnRlc3QgZGlyZWN0b3J5LCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCB0aGlzIHBhdGNoICpkb2VzbiYjMzk7dCogaW50cm9kdWNlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHdhcnJhbnQgZnV6emluZy4gSXQmIzM5O3MganVzdCBhIHRlc3QgdXBkYXRlLiBTbywgSSB3aWxsIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6IHRoaXMgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzLCBhbmQgdGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiBXZSBjYW4gc2tpcCB0aGlzIG9uZSBmb3IgZnV6emluZyBwdXJwb3Nlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwOToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby8pIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby8pIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwOToyNzoyMS40NjQyMDUxMTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTQ1MzkxNTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vKSBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwOToyNzoyMS40NjQyMTMwMjVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMDU4NDU3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGM2MmNlZDY5ZWZmZTYzMjdmZjczOGY5ZGViMDVjNjc2OTIyMGZhNWJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMyAwOToyNzoyMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9NYWtlZmlsZVxcbmluZGV4IDJjMzJjNDhkYjUwOTg1Li44ZmQ2YWZkMzM0ZTUzMiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9NYWtlZmlsZVxcbkBAIC0xLDYgKzEsNiBAQFxcbiBBUkNIID89ICQoc2hlbGwgdW5hbWUgLW0pXFxuIFxcbi1pZmVxICgsJChmaWx0ZXIgJChBUkNIKSxhYXJjaDY0IGFybTY0IHg4NiB4ODZfNjQpKVxcbitpZmVxICgsJChmaWx0ZXIgJChBUkNIKSxhYXJjaDY0IGFybTY0IHg4NiB4ODZfNjQgcHBjNjQgcHBjNjRsZSkpXFxuICMgRG8gbm90aGluZyBvbiB1bnN1cHBvcnRlZCBhcmNoaXRlY3R1cmVzXFxuIGluY2x1ZGUgLi4vbGliLm1rXFxuIGVsc2VcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8uaFxcbmluZGV4IDA3ODYyYjQ3MDc3N2JkLi5jMGI0YTJhYjA2YzVhZSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8uaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby5oXFxuQEAgLTI0LDYgKzI0LDE1IEBAXFxuIGNvbnN0IGNoYXIgKnZmaW9fc2VsZnRlc3RzX2dldF9iZGYoaW50ICphcmdjLCBjaGFyICphcmd2W10pO1xcbiBjaGFyICoqdmZpb19zZWxmdGVzdHNfZ2V0X2JkZnMoaW50ICphcmdjLCBjaGFyICphcmd2W10sIGludCAqbnJfYmRmcyk7XFxuIFxcbisvKlxcbisgKiBSZXR1cm4gdGhlIElPTU1VIG1vZGUgc3RyaW5nIGZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlXFxuKyAqICRWRklPX1NFTEZURVNUU19JT01NVV9NT0RFLlxcbisgKlxcbisgKiBSZXR1cm5zIE5VTEwgaWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBzZXQsIGFsbG93aW5nXFxuKyAqIHRlc3RzIHRvIHVzZSB0aGVpciBkZWZhdWx0IG1vZGUuXFxuKyAqL1xcbitjb25zdCBjaGFyICp2ZmlvX3NlbGZ0ZXN0c19nZXRfaW9tbXVfbW9kZSh2b2lkKTtcXG4rXFxuIC8qXFxuICAqIFJlc2VydmUgdmlydHVhbCBhZGRyZXNzIHNwYWNlIG9mIHNpemUgYXQgYW4gYWRkcmVzcyBzYXRpc2Z5aW5nXFxuICAqICh2YWRkciAlIGFsaWduKSA9PSBvZmZzZXQuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby9pb21tdS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL2lvbW11LmhcXG5pbmRleCBlOWEzMzg2YTQ3MTkzYS4uYzliOWFiOTI5ZjFmOWIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL2lvbW11LmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vaW9tbXUuaFxcbkBAIC0yNCwxMiArMjQsMjYgQEAgc3RydWN0IGRtYV9yZWdpb24ge1xcbiBcXHR1NjQgc2l6ZTtcXG4gfTtcXG4gXFxuK3N0cnVjdCBzcGFwcl90Y2Vfd2luZG93IHtcXG4rXFx0dTY0IHN0YXJ0O1xcbitcXHR1NjQgc2l6ZTtcXG4rXFx0dTMyIHBhZ2Vfc2hpZnQ7XFxuK1xcdGJvb2wgdmFsaWQ7XFxuK1xcdGJvb2wgZHluYW1pYztcXG4rXFx0Ym9vbCByZW1vdmVfb25fY2xlYW51cDtcXG4rfTtcXG4rXFxuIHN0cnVjdCBpb21tdSB7XFxuIFxcdGNvbnN0IHN0cnVjdCBpb21tdV9tb2RlICptb2RlO1xcbiBcXHRpbnQgY29udGFpbmVyX2ZkO1xcbiBcXHRpbnQgaW9tbXVmZDtcXG4gXFx0dTMyIGlvYXNfaWQ7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgZG1hX3JlZ2lvbnM7XFxuKyNpZmRlZiBfX3Bvd2VycGNfX1xcbitcXHRzdHJ1Y3Qgc3BhcHJfdGNlX3dpbmRvdyBkZWZhdWx0X3dpbmRvdztcXG4rXFx0c3RydWN0IHNwYXByX3RjZV93aW5kb3cgZGR3X3dpbmRvdztcXG4rXFx0c3RydWN0IHNwYXByX3RjZV93aW5kb3cgKmFjdGl2ZV93aW5kb3c7XFxuKyNlbmRpZlxcbiB9O1xcbiBcXG4gc3RydWN0IGlvbW11ICppb21tdV9pbml0KGNvbnN0IGNoYXIgKmlvbW11X21vZGUpO1xcbkBAIC02MSwyMiArNzUsMzQgQEAgaW92YV90IGlvbW11X2h2YTJpb3ZhKHN0cnVjdCBpb21tdSAqaW9tbXUsIHZvaWQgKnZhZGRyKTtcXG4gXFxuIHN0cnVjdCBpb21tdV9pb3ZhX3JhbmdlICppb21tdV9pb3ZhX3JhbmdlcyhzdHJ1Y3QgaW9tbXUgKmlvbW11LCB1MzIgKm5yYW5nZXMpO1xcbiBcXG4raW50IGlvbW11X3ByZXBhcmVfZG1hX3dpbmRvdyhzdHJ1Y3QgaW9tbXUgKmlvbW11LCB1NjQgbWluX3NpemUsXFxuK1xcdFxcdFxcdCAgICAgdTY0IHBhZ2Vfc2l6ZSwgYm9vbCBmb3JjZV9keW5hbWljKTtcXG4rYm9vbCBpb21tdV9zdXBwb3J0c191bm1hcF9hbGwoc3RydWN0IGlvbW11ICppb21tdSk7XFxuK1xcbiAjZGVmaW5lIE1PREVfVkZJT19UWVBFMV9JT01NVSBcXFwidmZpb190eXBlMV9pb21tdVxcXCJcXG4gI2RlZmluZSBNT0RFX1ZGSU9fVFlQRTFWMl9JT01NVSBcXFwidmZpb190eXBlMXYyX2lvbW11XFxcIlxcbiAjZGVmaW5lIE1PREVfSU9NTVVGRF9DT01QQVRfVFlQRTEgXFxcImlvbW11ZmRfY29tcGF0X3R5cGUxXFxcIlxcbiAjZGVmaW5lIE1PREVfSU9NTVVGRF9DT01QQVRfVFlQRTFWMiBcXFwiaW9tbXVmZF9jb21wYXRfdHlwZTF2MlxcXCJcXG4gI2RlZmluZSBNT0RFX0lPTU1VRkQgXFxcImlvbW11ZmRcXFwiXFxuKyNpZmRlZiBfX3Bvd2VycGNfX1xcbisjZGVmaW5lIE1PREVfVkZJT19TUEFQUl9UQ0VfVjJfSU9NTVUgXFxcInZmaW9fc3BhcHJfdGNlX3YyX2lvbW11XFxcIlxcbisjZW5kaWZcXG4gXFxuIC8qXFxuICAqIEdlbmVyYXRvciBmb3IgVkZJTyBzZWxmdGVzdHMgZml4dHVyZSB2YXJpYW50cyB0aGF0IHJlcGxpY2F0ZSBhY3Jvc3MgYWxsXFxuICAqIHBvc3NpYmxlIElPTU1VIG1vZGVzLiBUZXN0cyBtdXN0IGRlZmluZSBGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREUoKVxcbiAgKiB3aGljaCBzaG91bGQgdGhlbiB1c2UgRklYVFVSRV9WQVJJQU5UX0FERCgpIHRvIGNyZWF0ZSB0aGUgdmFyaWFudC5cXG4gICovXFxuKyNpZmRlZiBfX3Bvd2VycGNfX1xcbisjZGVmaW5lIEZJWFRVUkVfVkFSSUFOVF9BRERfQUxMX0lPTU1VX01PREVTKC4uLikgXFxcXFxcbitGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREUodmZpb19zcGFwcl90Y2VfdjJfaW9tbXUsICMjX19WQV9BUkdTX18pXFxuKyNlbHNlXFxuICNkZWZpbmUgRklYVFVSRV9WQVJJQU5UX0FERF9BTExfSU9NTVVfTU9ERVMoLi4uKSBcXFxcXFxuIEZJWFRVUkVfVkFSSUFOVF9BRERfSU9NTVVfTU9ERSh2ZmlvX3R5cGUxX2lvbW11LCAjI19fVkFfQVJHU19fKTsgXFxcXFxcbiBGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREUodmZpb190eXBlMXYyX2lvbW11LCAjI19fVkFfQVJHU19fKTsgXFxcXFxcbiBGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREUoaW9tbXVmZF9jb21wYXRfdHlwZTEsICMjX19WQV9BUkdTX18pOyBcXFxcXFxuIEZJWFRVUkVfVkFSSUFOVF9BRERfSU9NTVVfTU9ERShpb21tdWZkX2NvbXBhdF90eXBlMXYyLCAjI19fVkFfQVJHU19fKTsgXFxcXFxcbiBGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREUoaW9tbXVmZCwgIyNfX1ZBX0FSR1NfXylcXG4rI2VuZGlmXFxuIFxcbiAjZW5kaWYgLyogU0VMRlRFU1RTX1ZGSU9fTElCX0lOQ0xVREVfTElCVkZJT19JT01NVV9IICovXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2lvbW11LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pb21tdS5jXFxuaW5kZXggMDM1ZGFjMDY5ZDYwMTYuLjE5ZDE5YmI0NWExNGI1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2lvbW11LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pb21tdS5jXFxuQEAgLTE2LDkgKzE2LDExIEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdmZpby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW9tbXVmZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2l6ZXMuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCIuLi8uLi8uLi9rc2VsZnRlc3QuaFxcXCJcXG4gI2luY2x1ZGUgXFx1MDAzY2xpYnZmaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbWl0cy5oXFx1MDAzZVxcbiBcXG4gY29uc3QgY2hhciAqZGVmYXVsdF9pb21tdV9tb2RlID0gTU9ERV9JT01NVUZEO1xcbiBcXG5AQCAtNDcsNiArNDksMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpb21tdV9tb2RlIGlvbW11X21vZGVzW10gPSB7XFxuIFxcdHtcXG4gXFx0XFx0Lm5hbWUgPSBNT0RFX0lPTU1VRkQsXFxuIFxcdH0sXFxuKyNpZmRlZiBfX3Bvd2VycGNfX1xcbitcXHR7XFxuK1xcdFxcdC5uYW1lID0gTU9ERV9WRklPX1NQQVBSX1RDRV9WMl9JT01NVSxcXG4rXFx0XFx0LmNvbnRhaW5lcl9wYXRoID0gXFxcIi9kZXYvdmZpby92ZmlvXFxcIixcXG4rXFx0XFx0LmlvbW11X3R5cGUgPSBWRklPX1NQQVBSX1RDRV92Ml9JT01NVSxcXG4rXFx0fSxcXG4rI2VuZGlmXFxuIH07XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGlvbW11X21vZGUgKmxvb2t1cF9pb21tdV9tb2RlKGNvbnN0IGNoYXIgKmlvbW11X21vZGUpXFxuQEAgLTg2LDYgKzk1LDIzMyBAQCBpbnQgX19pb21tdV9odmEyaW92YShzdHJ1Y3QgaW9tbXUgKmlvbW11LCB2b2lkICp2YWRkciwgaW92YV90ICppb3ZhKVxcbiBcXHRyZXR1cm4gLUVOT0VOVDtcXG4gfVxcbiBcXG4rI2lmZGVmIF9fcG93ZXJwY19fXFxuK3N0YXRpYyBib29sIGlvbW11X2lzX3NwYXByX3RjZV92MihzdHJ1Y3QgaW9tbXUgKmlvbW11KVxcbit7XFxuK1xcdHJldHVybiAhIShpb21tdS1cXHUwMDNlbW9kZS1cXHUwMDNlaW9tbXVfdHlwZSA9PSBWRklPX1NQQVBSX1RDRV92Ml9JT01NVSk7XFxuK31cXG4rXFxuK3N0YXRpYyB1MzIgcGFnZV9zaXplX3RvX3NoaWZ0KHU2NCBwYWdlX3NpemUpXFxuK3tcXG4rXFx0cmV0dXJuIF9fYnVpbHRpbl9jdHpsbChwYWdlX3NpemUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHNwYXByX3RjZV9yZWFkX2RlZmF1bHRfd2luZG93KHN0cnVjdCBpb21tdSAqaW9tbXUpXFxuK3tcXG4rXFx0c3RydWN0IHZmaW9faW9tbXVfc3BhcHJfdGNlX2luZm8gaW5mbyA9IHtcXG4rXFx0XFx0LmFyZ3N6ID0gc2l6ZW9mKGluZm8pLFxcbitcXHR9O1xcbitcXG4rXFx0aWYgKGlvbW11LVxcdTAwM2VkZWZhdWx0X3dpbmRvdy52YWxpZClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAoaW9jdGwoaW9tbXUtXFx1MDAzZWNvbnRhaW5lcl9mZCwgVkZJT19JT01NVV9TUEFQUl9UQ0VfR0VUX0lORk8sIFxcdTAwMjZpbmZvKSlcXG4rXFx0XFx0cmV0dXJuIC1lcnJubztcXG4rXFxuK1xcdGlvbW11LVxcdTAwM2VkZWZhdWx0X3dpbmRvdy5zdGFydCA9IGluZm8uZG1hMzJfd2luZG93X3N0YXJ0O1xcbitcXHRpb21tdS1cXHUwMDNlZGVmYXVsdF93aW5kb3cuc2l6ZSA9IGluZm8uZG1hMzJfd2luZG93X3NpemU7XFxuK1xcdGlvbW11LVxcdTAwM2VkZWZhdWx0X3dpbmRvdy5wYWdlX3NoaWZ0ID0gcGFnZV9zaXplX3RvX3NoaWZ0KGdldHBhZ2VzaXplKCkpO1xcbitcXHRpb21tdS1cXHUwMDNlZGVmYXVsdF93aW5kb3cudmFsaWQgPSB0cnVlO1xcbitcXHRpb21tdS1cXHUwMDNlZGVmYXVsdF93aW5kb3cuZHluYW1pYyA9IGZhbHNlO1xcbitcXHRpb21tdS1cXHUwMDNlZGVmYXVsdF93aW5kb3cucmVtb3ZlX29uX2NsZWFudXAgPSBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHNwYXByX3RjZV9jcmVhdGVfZGR3KHN0cnVjdCBpb21tdSAqaW9tbXUsIHU2NCBtaW5fc2l6ZSwgdTMyIHBhZ2Vfc2hpZnQpXFxuK3tcXG4rXFx0c3RydWN0IHZmaW9faW9tbXVfc3BhcHJfdGNlX2NyZWF0ZSBjcmVhdGUgPSB7XFxuK1xcdFxcdC5hcmdzeiA9IHNpemVvZihjcmVhdGUpLFxcbitcXHRcXHQucGFnZV9zaGlmdCA9IHBhZ2Vfc2hpZnQsXFxuK1xcdFxcdC5sZXZlbHMgPSAxLFxcbitcXHRcXHQud2luZG93X3NpemUgPSBtaW5fc2l6ZSxcXG4rXFx0fTtcXG4rXFxuK1xcdGlmIChpb2N0bChpb21tdS1cXHUwMDNlY29udGFpbmVyX2ZkLCBWRklPX0lPTU1VX1NQQVBSX1RDRV9DUkVBVEUsIFxcdTAwMjZjcmVhdGUpKVxcbitcXHRcXHRyZXR1cm4gLWVycm5vO1xcbitcXG4rXFx0aW9tbXUtXFx1MDAzZWRkd193aW5kb3cuc3RhcnQgPSBjcmVhdGUuc3RhcnRfYWRkcjtcXG4rXFx0aW9tbXUtXFx1MDAzZWRkd193aW5kb3cuc2l6ZSA9IGNyZWF0ZS53aW5kb3dfc2l6ZTtcXG4rXFx0aW9tbXUtXFx1MDAzZWRkd193aW5kb3cucGFnZV9zaGlmdCA9IHBhZ2Vfc2hpZnQ7XFxuK1xcdGlvbW11LVxcdTAwM2VkZHdfd2luZG93LnZhbGlkID0gdHJ1ZTtcXG4rXFx0aW9tbXUtXFx1MDAzZWRkd193aW5kb3cuZHluYW1pYyA9IHRydWU7XFxuK1xcdGlvbW11LVxcdTAwM2VkZHdfd2luZG93LnJlbW92ZV9vbl9jbGVhbnVwID0gdHJ1ZTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHNwYXByX3RjZV9yZW1vdmVfd2luZG93KHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBzcGFwcl90Y2Vfd2luZG93ICp3aW5kb3cpXFxuK3tcXG4rXFx0c3RydWN0IHZmaW9faW9tbXVfc3BhcHJfdGNlX3JlbW92ZSByZW1vdmUgPSB7XFxuK1xcdFxcdC5hcmdzeiA9IHNpemVvZihyZW1vdmUpLFxcbitcXHRcXHQuc3RhcnRfYWRkciA9IHdpbmRvdy1cXHUwMDNlc3RhcnQsXFxuK1xcdH07XFxuK1xcbitcXHRpZiAoIXdpbmRvdy1cXHUwMDNldmFsaWQgfHwgIXdpbmRvdy1cXHUwMDNlcmVtb3ZlX29uX2NsZWFudXApXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKGlvY3RsKGlvbW11LVxcdTAwM2Vjb250YWluZXJfZmQsIFZGSU9fSU9NTVVfU1BBUFJfVENFX1JFTU9WRSwgXFx1MDAyNnJlbW92ZSkpXFxuK1xcdFxcdHJldHVybiAtZXJybm87XFxuK1xcbitcXHR3aW5kb3ctXFx1MDAzZXZhbGlkID0gZmFsc2U7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBzcGFwcl90Y2Vfd2luZG93X3NhdGlzZmllcyhzdHJ1Y3Qgc3BhcHJfdGNlX3dpbmRvdyAqd2luZG93LFxcbitcXHRcXHRcXHRcXHQgICAgICAgdTY0IG1pbl9zaXplLCB1MzIgcGFnZV9zaGlmdCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGJvb2wgcmVxdWlyZV9keW5hbWljKVxcbit7XFxuK1xcdGlmICghd2luZG93IHx8ICF3aW5kb3ctXFx1MDAzZXZhbGlkKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAocmVxdWlyZV9keW5hbWljIFxcdTAwMjZcXHUwMDI2ICF3aW5kb3ctXFx1MDAzZWR5bmFtaWMpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmICh3aW5kb3ctXFx1MDAzZXNpemUgXFx1MDAzYyBtaW5fc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWYgKHdpbmRvdy1cXHUwMDNlcGFnZV9zaGlmdCAhPSBwYWdlX3NoaWZ0KVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBpb21tdV9pb3ZhX3JhbmdlICpzcGFwcl90Y2VfaW92YV9yYW5nZXMoc3RydWN0IGlvbW11ICppb21tdSwgdTMyICpucmFuZ2VzKVxcbit7XFxuK1xcdHN0cnVjdCBpb21tdV9pb3ZhX3JhbmdlICpyYW5nZXM7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIWlvbW11LVxcdTAwM2VhY3RpdmVfd2luZG93KSB7XFxuK1xcdFxcdHJldCA9IGlvbW11X3ByZXBhcmVfZG1hX3dpbmRvdyhpb21tdSwgU1pfMUcsIGdldHBhZ2VzaXplKCksIGZhbHNlKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdHJhbmdlcyA9IGNhbGxvYygxLCBzaXplb2YoKnJhbmdlcykpO1xcbitcXHRWRklPX0FTU0VSVF9OT1RfTlVMTChyYW5nZXMpO1xcbitcXG4rXFx0cmFuZ2VzWzBdLnN0YXJ0ID0gaW9tbXUtXFx1MDAzZWFjdGl2ZV93aW5kb3ctXFx1MDAzZXN0YXJ0O1xcbitcXHRyYW5nZXNbMF0ubGFzdCA9IGlvbW11LVxcdTAwM2VhY3RpdmVfd2luZG93LVxcdTAwM2VzdGFydCArIGlvbW11LVxcdTAwM2VhY3RpdmVfd2luZG93LVxcdTAwM2VzaXplIC0gMTtcXG4rXFxuK1xcdCpucmFuZ2VzID0gMTtcXG4rXFx0cmV0dXJuIHJhbmdlcztcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgc3BhcHJfdGNlX2lvdmFfaW5zaWRlX3dpbmRvdyhzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uKVxcbit7XFxuK1xcdHN0cnVjdCBzcGFwcl90Y2Vfd2luZG93ICp3aW5kb3cgPSBpb21tdS1cXHUwMDNlYWN0aXZlX3dpbmRvdztcXG4rXFxuK1xcdGlmICghd2luZG93IHx8ICF3aW5kb3ctXFx1MDAzZXZhbGlkKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAocmVnaW9uLVxcdTAwM2Vpb3ZhIFxcdTAwM2Mgd2luZG93LVxcdTAwM2VzdGFydClcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWYgKHJlZ2lvbi1cXHUwMDNlaW92YSArIHJlZ2lvbi1cXHUwMDNlc2l6ZSBcXHUwMDNlIHdpbmRvdy1cXHUwMDNlc3RhcnQgKyB3aW5kb3ctXFx1MDAzZXNpemUpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHNwYXByX3JlZ2lzdGVyX21lbW9yeShzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uKVxcbit7XFxuK1xcdHN0cnVjdCB2ZmlvX2lvbW11X3NwYXByX3JlZ2lzdGVyX21lbW9yeSBhcmdzID0ge1xcbitcXHRcXHQuYXJnc3ogPSBzaXplb2YoYXJncyksXFxuK1xcdFxcdC52YWRkciA9ICh1NjQpcmVnaW9uLVxcdTAwM2V2YWRkcixcXG4rXFx0XFx0LnNpemUgPSByZWdpb24tXFx1MDAzZXNpemUsXFxuK1xcdH07XFxuK1xcbitcXHRpZiAoaW9jdGwoaW9tbXUtXFx1MDAzZWNvbnRhaW5lcl9mZCwgVkZJT19JT01NVV9TUEFQUl9SRUdJU1RFUl9NRU1PUlksIFxcdTAwMjZhcmdzKSlcXG4rXFx0XFx0cmV0dXJuIC1lcnJubztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHNwYXByX3VucmVnaXN0ZXJfbWVtb3J5KHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24pXFxuK3tcXG4rXFx0c3RydWN0IHZmaW9faW9tbXVfc3BhcHJfcmVnaXN0ZXJfbWVtb3J5IGFyZ3MgPSB7XFxuK1xcdFxcdC5hcmdzeiA9IHNpemVvZihhcmdzKSxcXG4rXFx0XFx0LnZhZGRyID0gKHU2NClyZWdpb24tXFx1MDAzZXZhZGRyLFxcbitcXHRcXHQuc2l6ZSA9IHJlZ2lvbi1cXHUwMDNlc2l6ZSxcXG4rXFx0fTtcXG4rXFxuK1xcdGlmIChpb2N0bChpb21tdS1cXHUwMDNlY29udGFpbmVyX2ZkLCBWRklPX0lPTU1VX1NQQVBSX1VOUkVHSVNURVJfTUVNT1JZLCBcXHUwMDI2YXJncykpXFxuK1xcdFxcdHJldHVybiAtZXJybm87XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4raW50IGlvbW11X3ByZXBhcmVfZG1hX3dpbmRvdyhzdHJ1Y3QgaW9tbXUgKmlvbW11LCB1NjQgbWluX3NpemUsXFxuK1xcdFxcdFxcdCAgICAgdTY0IHBhZ2Vfc2l6ZSwgYm9vbCBmb3JjZV9keW5hbWljKVxcbit7XFxuK1xcdHUzMiBwYWdlX3NoaWZ0O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCFpb21tdV9pc19zcGFwcl90Y2VfdjIoaW9tbXUpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmICghcGFnZV9zaXplKVxcbitcXHRcXHRwYWdlX3NpemUgPSBnZXRwYWdlc2l6ZSgpO1xcbitcXG4rXFx0cGFnZV9zaGlmdCA9IHBhZ2Vfc2l6ZV90b19zaGlmdChwYWdlX3NpemUpO1xcbitcXG4rXFx0cmV0ID0gc3BhcHJfdGNlX3JlYWRfZGVmYXVsdF93aW5kb3coaW9tbXUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0LypcXG4rXFx0ICogTm9ybWFsIG1hcHBpbmcgcGF0aDpcXG4rXFx0ICogdXNlIGRlZmF1bHQgd2luZG93IHdoZW4gaXQgc2F0aXNmaWVzIHRoZSByZXF1ZXN0LlxcbitcXHQgKi9cXG4rXFx0aWYgKCFmb3JjZV9keW5hbWljIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBzcGFwcl90Y2Vfd2luZG93X3NhdGlzZmllcyhcXHUwMDI2aW9tbXUtXFx1MDAzZWRlZmF1bHRfd2luZG93LFxcbitcXHRcXHRcXHRcXHQgICAgICAgbWluX3NpemUsIHBhZ2Vfc2hpZnQsIGZhbHNlKSkge1xcbitcXHRcXHRpb21tdS1cXHUwMDNlYWN0aXZlX3dpbmRvdyA9IFxcdTAwMjZpb21tdS1cXHUwMDNlZGVmYXVsdF93aW5kb3c7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBEeW5hbWljIHBhdGg6XFxuK1xcdCAqIHVzZSBleGlzdGluZyBERFcgaWYgaXQgYWxyZWFkeSBzYXRpc2ZpZXMgdGhlIHJlcXVlc3QuXFxuK1xcdCAqL1xcbitcXHRpZiAoc3BhcHJfdGNlX3dpbmRvd19zYXRpc2ZpZXMoXFx1MDAyNmlvbW11LVxcdTAwM2VkZHdfd2luZG93LFxcbitcXHRcXHRcXHRcXHQgICAgICAgbWluX3NpemUsIHBhZ2Vfc2hpZnQsIHRydWUpKSB7XFxuK1xcdFxcdGlvbW11LVxcdTAwM2VhY3RpdmVfd2luZG93ID0gXFx1MDAyNmlvbW11LVxcdTAwM2VkZHdfd2luZG93O1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogTmVpdGhlciBkZWZhdWx0IG5vciBERFcgaXMgc3VmZmljaWVudC5cXG4rXFx0ICogUmVtb3ZlIG9ubHkgdGhlIHNlbGZ0ZXN0LWNyZWF0ZWQgRERXLCB0aGVuIGNyZWF0ZSBhIG5ldyBERFcuXFxuK1xcdCAqL1xcbitcXHRyZXQgPSBzcGFwcl90Y2VfcmVtb3ZlX3dpbmRvdyhpb21tdSwgXFx1MDAyNmlvbW11LVxcdTAwM2VkZHdfd2luZG93KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHNwYXByX3RjZV9jcmVhdGVfZGR3KGlvbW11LCBtaW5fc2l6ZSwgcGFnZV9zaGlmdCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpb21tdS1cXHUwMDNlYWN0aXZlX3dpbmRvdyA9IFxcdTAwMjZpb21tdS1cXHUwMDNlZGR3X3dpbmRvdztcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rI2Vsc2VcXG4raW50IGlvbW11X3ByZXBhcmVfZG1hX3dpbmRvdyhzdHJ1Y3QgaW9tbXUgKmlvbW11LCB1NjQgbWluX3NpemUsXFxuK1xcdFxcdFxcdCAgICAgdTY0IHBhZ2Vfc2l6ZSwgYm9vbCBmb3JjZV9keW5hbWljKVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuKyNlbmRpZlxcbitcXG4rYm9vbCBpb21tdV9zdXBwb3J0c191bm1hcF9hbGwoc3RydWN0IGlvbW11ICppb21tdSlcXG4re1xcbisjaWZkZWYgX19wb3dlcnBjX19cXG4rXFx0aWYgKGlvbW11X2lzX3NwYXByX3RjZV92Mihpb21tdSkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rI2VuZGlmXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbiBpb3ZhX3QgaW9tbXVfaHZhMmlvdmEoc3RydWN0IGlvbW11ICppb21tdSwgdm9pZCAqdmFkZHIpXFxuIHtcXG4gXFx0aW92YV90IGlvdmE7XFxuQEAgLTEwNiw5ICszNDIsMjcgQEAgc3RhdGljIGludCB2ZmlvX2lvbW11X21hcChzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uKVxcbiBcXHRcXHQuaW92YSA9IHJlZ2lvbi1cXHUwMDNlaW92YSxcXG4gXFx0XFx0LnNpemUgPSByZWdpb24tXFx1MDAzZXNpemUsXFxuIFxcdH07XFxuK1xcdGludCByZXQ7XFxuIFxcbi1cXHRpZiAoaW9jdGwoaW9tbXUtXFx1MDAzZWNvbnRhaW5lcl9mZCwgVkZJT19JT01NVV9NQVBfRE1BLCBcXHUwMDI2YXJncykpXFxuKyNpZmRlZiBfX3Bvd2VycGNfX1xcbitcXHRpZiAoaW9tbXVfaXNfc3BhcHJfdGNlX3YyKGlvbW11KSkge1xcbitcXHRcXHRpZiAoIXNwYXByX3RjZV9pb3ZhX2luc2lkZV93aW5kb3coaW9tbXUsIHJlZ2lvbikpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0cmV0ID0gc3BhcHJfcmVnaXN0ZXJfbWVtb3J5KGlvbW11LCByZWdpb24pO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuKyNlbmRpZlxcbitcXG4rXFx0cmV0ID0gaW9jdGwoaW9tbXUtXFx1MDAzZWNvbnRhaW5lcl9mZCwgVkZJT19JT01NVV9NQVBfRE1BLCBcXHUwMDI2YXJncyk7XFxuK1xcdGlmIChyZXQpIHtcXG4rI2lmZGVmIF9fcG93ZXJwY19fXFxuK1xcdFxcdGlmIChpb21tdV9pc19zcGFwcl90Y2VfdjIoaW9tbXUpKVxcbitcXHRcXHRcXHRzcGFwcl91bnJlZ2lzdGVyX21lbW9yeShpb21tdSwgcmVnaW9uKTtcXG4rI2VuZGlmXFxuIFxcdFxcdHJldHVybiAtZXJybm87XFxuK1xcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTE3MCw4ICs0MjQsMTggQEAgc3RhdGljIGludCBfX3ZmaW9faW9tbXVfdW5tYXAoaW50IGZkLCB1NjQgaW92YSwgdTY0IHNpemUsIHUzMiBmbGFncywgdTY0ICp1bm1hcHBcXG4gc3RhdGljIGludCB2ZmlvX2lvbW11X3VubWFwKHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24sXFxuIFxcdFxcdFxcdCAgICB1NjQgKnVubWFwcGVkKVxcbiB7XFxuLVxcdHJldHVybiBfX3ZmaW9faW9tbXVfdW5tYXAoaW9tbXUtXFx1MDAzZWNvbnRhaW5lcl9mZCwgcmVnaW9uLVxcdTAwM2Vpb3ZhLFxcbi1cXHRcXHRcXHRcXHQgIHJlZ2lvbi1cXHUwMDNlc2l6ZSwgMCwgdW5tYXBwZWQpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gX192ZmlvX2lvbW11X3VubWFwKGlvbW11LVxcdTAwM2Vjb250YWluZXJfZmQsIHJlZ2lvbi1cXHUwMDNlaW92YSxcXG4rXFx0XFx0XFx0XFx0IHJlZ2lvbi1cXHUwMDNlc2l6ZSwgMCwgdW5tYXBwZWQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbisjaWZkZWYgX19wb3dlcnBjX19cXG4rXFx0aWYgKGlvbW11X2lzX3NwYXByX3RjZV92Mihpb21tdSkpXFxuK1xcdFxcdHJldCA9IHNwYXByX3VucmVnaXN0ZXJfbWVtb3J5KGlvbW11LCByZWdpb24pO1xcbisjZW5kaWZcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgX19pb21tdWZkX3VubWFwKGludCBmZCwgdTY0IGlvdmEsIHU2NCBsZW5ndGgsIHUzMiBpb2FzX2lkLCB1NjQgKnVubWFwcGVkKVxcbkBAIC0zMTcsNiArNTgxLDExIEBAIHN0YXRpYyBzdHJ1Y3QgaW9tbXVfaW92YV9yYW5nZSAqdmZpb19pb21tdV9pb3ZhX3JhbmdlcyhzdHJ1Y3QgaW9tbXUgKmlvbW11LFxcbiBcXHRzdHJ1Y3QgdmZpb19pbmZvX2NhcF9oZWFkZXIgKmhkcjtcXG4gXFx0c3RydWN0IGlvbW11X2lvdmFfcmFuZ2UgKnJhbmdlcyA9IE5VTEw7XFxuIFxcbisjaWZkZWYgX19wb3dlcnBjX19cXG4rXFx0aWYgKGlvbW11X2lzX3NwYXByX3RjZV92Mihpb21tdSkpXFxuK1xcdFxcdHJldHVybiBzcGFwcl90Y2VfaW92YV9yYW5nZXMoaW9tbXUsIG5yYW5nZXMpO1xcbisjZW5kaWZcXG4rXFxuIFxcdGluZm8gPSB2ZmlvX2lvbW11X2dldF9pbmZvKGlvbW11LVxcdTAwM2Vjb250YWluZXJfZmQpO1xcbiBcXHRoZHIgPSB2ZmlvX2lvbW11X2luZm9fY2FwX2hkcihpbmZvLCBWRklPX0lPTU1VX1RZUEUxX0lORk9fQ0FQX0lPVkFfUkFOR0UpO1xcbiBcXHRWRklPX0FTU0VSVF9OT1RfTlVMTChoZHIpO1xcbkBAIC00NTUsNiArNzI0LDExIEBAIHN0cnVjdCBpb21tdSAqaW9tbXVfaW5pdChjb25zdCBjaGFyICppb21tdV9tb2RlKVxcbiBcXG4gdm9pZCBpb21tdV9jbGVhbnVwKHN0cnVjdCBpb21tdSAqaW9tbXUpXFxuIHtcXG4rI2lmZGVmIF9fcG93ZXJwY19fXFxuK1xcdGlmIChpb21tdV9pc19zcGFwcl90Y2VfdjIoaW9tbXUpKVxcbitcXHRcXHRzcGFwcl90Y2VfcmVtb3ZlX3dpbmRvdyhpb21tdSwgXFx1MDAyNmlvbW11LVxcdTAwM2VkZHdfd2luZG93KTtcXG4rI2VuZGlmXFxuK1xcbiBcXHRpZiAoaW9tbXUtXFx1MDAzZWlvbW11ZmQpXFxuIFxcdFxcdFZGSU9fQVNTRVJUX0VRKGNsb3NlKGlvbW11LVxcdTAwM2Vpb21tdWZkKSwgMCk7XFxuIFxcdGVsc2VcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5jXFxuaW5kZXggM2EzZDFlZDYzNWMxZGYuLjEyZjczMTk2M2IwNThhIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8uY1xcbkBAIC0xMDEsMyArMTAxLDQwIEBAIHZvaWQgKm1tYXBfcmVzZXJ2ZShzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduLCBzaXplX3Qgb2Zmc2V0KVxcbiBcXG4gXFx0cmV0dXJuIG1hcF9hbGlnbjtcXG4gfVxcbitcXG4rc3RhdGljIGNvbnN0IGNoYXIgKmdldF9pb21tdV9tb2RlX2Vudih2b2lkKVxcbit7XFxuK1xcdGNvbnN0IGNoYXIgKm1vZGU7XFxuK1xcdHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdmFsaWRfbW9kZXNbXSA9IHtcXG4rXFx0XFx0TU9ERV9WRklPX1RZUEUxX0lPTU1VLFxcbitcXHRcXHRNT0RFX1ZGSU9fVFlQRTFWMl9JT01NVSxcXG4rXFx0XFx0TU9ERV9JT01NVUZEX0NPTVBBVF9UWVBFMSxcXG4rXFx0XFx0TU9ERV9JT01NVUZEX0NPTVBBVF9UWVBFMVYyLFxcbitcXHRcXHRNT0RFX0lPTU1VRkQsXFxuKyNpZmRlZiBfX3Bvd2VycGNfX1xcbitcXHRcXHRNT0RFX1ZGSU9fU1BBUFJfVENFX1YyX0lPTU1VLFxcbisjZW5kaWZcXG4rXFx0fTtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRtb2RlID0gZ2V0ZW52KFxcXCJWRklPX1NFTEZURVNUU19JT01NVV9NT0RFXFxcIik7XFxuK1xcdGlmICghbW9kZSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRSh2YWxpZF9tb2Rlcyk7IGkrKykge1xcbitcXHRcXHRpZiAoIXN0cmNtcChtb2RlLCB2YWxpZF9tb2Rlc1tpXSkpXFxuK1xcdFxcdFxcdHJldHVybiBtb2RlO1xcbitcXHR9XFxuK1xcbitcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIkludmFsaWQgVkZJT19TRUxGVEVTVFNfSU9NTVVfTU9ERTogJXNcXFxcblxcXCIsIG1vZGUpO1xcbitcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlZhbGlkIG1vZGVzIGFyZTpcXFxcblxcXCIpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRSh2YWxpZF9tb2Rlcyk7IGkrKylcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCIgICVzXFxcXG5cXFwiLCB2YWxpZF9tb2Rlc1tpXSk7XFxuK1xcdGV4aXQoS1NGVF9TS0lQKTtcXG4rfVxcbitcXG4rY29uc3QgY2hhciAqdmZpb19zZWxmdGVzdHNfZ2V0X2lvbW11X21vZGUodm9pZClcXG4re1xcbitcXHRyZXR1cm4gZ2V0X2lvbW11X21vZGVfZW52KCk7XFxuK31cXG4rXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19kbWFfbWFwcGluZ190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL3ZmaW9fZG1hX21hcHBpbmdfdGVzdC5jXFxuaW5kZXggN2QwZGU4Yzc5ZGUxM2YuLmNkMmQzMjc2YTQ2YzQ2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19kbWFfbWFwcGluZ190ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL3ZmaW9fZG1hX21hcHBpbmdfdGVzdC5jXFxuQEAgLTEsNSArMSw2IEBAXFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdHJpbmcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy9tbWFuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4gXFxuQEAgLTExOSw4ICsxMjAsMTkgQEAgRklYVFVSRV9WQVJJQU5UX0FERF9BTExfSU9NTVVfTU9ERVMoYW5vbnltb3VzX2h1Z2V0bGJfMWdiLCBTWl8xRywgTUFQX0hVR0VUTEIgfFxcbiBcXG4gRklYVFVSRV9TRVRVUCh2ZmlvX2RtYV9tYXBwaW5nX3Rlc3QpXFxuIHtcXG4rXFx0Y29uc3QgdTY0IHBhZ2Vfc2l6ZSA9IHZhcmlhbnQtXFx1MDAzZXNpemUgPzogZ2V0cGFnZXNpemUoKTtcXG4rXFx0Y29uc3QgYm9vbCBmb3JjZV9keW5hbWljID0gISF2YXJpYW50LVxcdTAwM2VzaXplO1xcbitcXHRpbnQgcmV0O1xcbitcXG4gXFx0c2VsZi1cXHUwMDNlaW9tbXUgPSBpb21tdV9pbml0KHZhcmlhbnQtXFx1MDAzZWlvbW11X21vZGUpO1xcbiBcXHRzZWxmLVxcdTAwM2VkZXZpY2UgPSB2ZmlvX3BjaV9kZXZpY2VfaW5pdChkZXZpY2VfYmRmLCBzZWxmLVxcdTAwM2Vpb21tdSk7XFxuK1xcbitcXHRyZXQgPSBpb21tdV9wcmVwYXJlX2RtYV93aW5kb3coc2VsZi1cXHUwMDNlaW9tbXUsIHBhZ2Vfc2l6ZSwgcGFnZV9zaXplLFxcbitcXHRcXHRcXHRcXHQgICAgICAgZm9yY2VfZHluYW1pYyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdFNLSVAocmV0dXJuLCBcXFwiRE1BIHdpbmRvdyB1bmF2YWlsYWJsZTogJXMgKCVkKVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgICBzdHJlcnJvcigtcmV0KSwgLXJldCk7XFxuK1xcbiBcXHRzZWxmLVxcdTAwM2Vpb3ZhX2FsbG9jYXRvciA9IGlvdmFfYWxsb2NhdG9yX2luaXQoc2VsZi1cXHUwMDNlaW9tbXUpO1xcbiB9XFxuIFxcbkBAIC0yMjcsNiArMjM5LDcgQEAgRklYVFVSRV9TRVRVUCh2ZmlvX2RtYV9tYXBfbGltaXRfdGVzdClcXG4gXFx0dTY0IHJlZ2lvbl9zaXplID0gZ2V0cGFnZXNpemUoKTtcXG4gXFx0aW92YV90IGxhc3RfaW92YTtcXG4gXFx0dTMyIG5yYW5nZXM7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBPdmVyLWFsbG9jYXRlIG1tYXAgYnkgZG91YmxlIHRoZSBzaXplIHRvIHByb3ZpZGUgZW5vdWdoIGJhY2tpbmcgdmFkZHJcXG5AQCAtMjM2LDYgKzI0OSwxMyBAQCBGSVhUVVJFX1NFVFVQKHZmaW9fZG1hX21hcF9saW1pdF90ZXN0KVxcbiBcXG4gXFx0c2VsZi1cXHUwMDNlaW9tbXUgPSBpb21tdV9pbml0KHZhcmlhbnQtXFx1MDAzZWlvbW11X21vZGUpO1xcbiBcXHRzZWxmLVxcdTAwM2VkZXZpY2UgPSB2ZmlvX3BjaV9kZXZpY2VfaW5pdChkZXZpY2VfYmRmLCBzZWxmLVxcdTAwM2Vpb21tdSk7XFxuK1xcbitcXHRyZXQgPSBpb21tdV9wcmVwYXJlX2RtYV93aW5kb3coc2VsZi1cXHUwMDNlaW9tbXUsIHJlZ2lvbl9zaXplLCByZWdpb25fc2l6ZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGZhbHNlKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJETUEgd2luZG93IHVuYXZhaWxhYmxlOiAlcyAoJWQpXFxcXG5cXFwiLFxcbitcXHRcXHQgICAgIHN0cmVycm9yKC1yZXQpLCAtcmV0KTtcXG4rXFxuIFxcdHJlZ2lvbi1cXHUwMDNldmFkZHIgPSBtbWFwKE5VTEwsIHNlbGYtXFx1MDAzZW1tYXBfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcXG4gXFx0XFx0XFx0ICAgICBNQVBfQU5PTllNT1VTIHwgTUFQX1BSSVZBVEUsIC0xLCAwKTtcXG4gXFx0QVNTRVJUX05FKHJlZ2lvbi1cXHUwMDNldmFkZHIsIE1BUF9GQUlMRUQpO1xcbkBAIC0yNzcsNiArMjk3LDggQEAgVEVTVF9GKHZmaW9fZG1hX21hcF9saW1pdF90ZXN0LCB1bm1hcF9hbGwpXFxuIFxcdHU2NCB1bm1hcHBlZDtcXG4gXFx0aW50IHJjO1xcbiBcXG4rXFx0aWYgKCFpb21tdV9zdXBwb3J0c191bm1hcF9hbGwoc2VsZi1cXHUwMDNlaW9tbXUpKVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcIklPTU1VIGJhY2tlbmQgZG9lcyBub3Qgc3VwcG9ydCB1bm1hcC1hbGxcXFxcblxcXCIpO1xcbiBcXHRpb21tdV9tYXAoc2VsZi1cXHUwMDNlaW9tbXUsIHJlZ2lvbik7XFxuIFxcdEFTU0VSVF9FUShyZWdpb24tXFx1MDAzZWlvdmEsIHRvX2lvdmEoc2VsZi1cXHUwMDNlZGV2aWNlLCByZWdpb24tXFx1MDAzZXZhZGRyKSk7XFxuIFxcbkBAIC0yOTQsMTAgKzMxNiwxOCBAQCBURVNUX0YodmZpb19kbWFfbWFwX2xpbWl0X3Rlc3QsIG92ZXJmbG93KVxcbiBcXHRyZWdpb24tXFx1MDAzZXNpemUgPSBzZWxmLVxcdTAwM2VtbWFwX3NpemU7XFxuIFxcbiBcXHRyYyA9IF9faW9tbXVfbWFwKHNlbGYtXFx1MDAzZWlvbW11LCByZWdpb24pO1xcbisjaWZkZWYgX19wb3dlcnBjX19cXG4rXFx0QVNTRVJUX0VRKHJjLCAtRU5YSU8pO1xcbisjZWxzZVxcbiBcXHRBU1NFUlRfRVEocmMsIC1FT1ZFUkZMT1cpO1xcbisjZW5kaWZcXG4gXFxuIFxcdHJjID0gX19pb21tdV91bm1hcChzZWxmLVxcdTAwM2Vpb21tdSwgcmVnaW9uLCBOVUxMKTtcXG4rI2lmZGVmIF9fcG93ZXJwY19fXFxuK1xcdEFTU0VSVF9FUShyYywgLUVOWElPKTtcXG4rI2Vsc2VcXG4gXFx0QVNTRVJUX0VRKHJjLCAtRU9WRVJGTE9XKTtcXG4rI2VuZGlmXFxuIH1cXG4gXFxuIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19wY2lfZGV2aWNlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19wY2lfZGV2aWNlX3Rlc3QuY1xcbmluZGV4IDkzYzExZmQ1ZTA4MTgyLi40NWI4YmY2MDUyN2E4NiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL3ZmaW9fcGNpX2RldmljZV90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL3ZmaW9fcGNpX2RldmljZV90ZXN0LmNcXG5AQCAtMjksNyArMjksNyBAQCBGSVhUVVJFKHZmaW9fcGNpX2RldmljZV90ZXN0KSB7XFxuIFxcbiBGSVhUVVJFX1NFVFVQKHZmaW9fcGNpX2RldmljZV90ZXN0KVxcbiB7XFxuLVxcdHNlbGYtXFx1MDAzZWlvbW11ID0gaW9tbXVfaW5pdChkZWZhdWx0X2lvbW11X21vZGUpO1xcbitcXHRzZWxmLVxcdTAwM2Vpb21tdSA9IGlvbW11X2luaXQodmZpb19zZWxmdGVzdHNfZ2V0X2lvbW11X21vZGUoKSk7XFxuIFxcdHNlbGYtXFx1MDAzZWRldmljZSA9IHZmaW9fcGNpX2RldmljZV9pbml0KGRldmljZV9iZGYsIHNlbGYtXFx1MDAzZWlvbW11KTtcXG4gfVxcbiBcXG5AQCAtMTIxLDcgKzEyMSw3IEBAIEZJWFRVUkVfVkFSSUFOVF9BREQodmZpb19wY2lfaXJxX3Rlc3QsIG1zaXgpIHtcXG4gXFxuIEZJWFRVUkVfU0VUVVAodmZpb19wY2lfaXJxX3Rlc3QpXFxuIHtcXG4tXFx0c2VsZi1cXHUwMDNlaW9tbXUgPSBpb21tdV9pbml0KGRlZmF1bHRfaW9tbXVfbW9kZSk7XFxuK1xcdHNlbGYtXFx1MDAzZWlvbW11ID0gaW9tbXVfaW5pdCh2ZmlvX3NlbGZ0ZXN0c19nZXRfaW9tbXVfbW9kZSgpKTtcXG4gXFx0c2VsZi1cXHUwMDNlZGV2aWNlID0gdmZpb19wY2lfZGV2aWNlX2luaXQoZGV2aWNlX2JkZiwgc2VsZi1cXHUwMDNlaW9tbXUpO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwOToyNzoyMS44ODU1NzA2NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUyNDAxNjc0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvLykgYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjNjJjZWQ2OWVmZmU2MzI3ZmY3MzhmOWRlYjA1YzY3NjkyMjBmYTViXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMyAwOToyNzoyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL01ha2VmaWxlXG5pbmRleCAyYzMyYzQ4ZGI1MDk4NS4uOGZkNmFmZDMzNGU1MzIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL01ha2VmaWxlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL01ha2VmaWxlXG5AQCAtMSw2ICsxLDYgQEBcbiBBUkNIID89ICQoc2hlbGwgdW5hbWUgLW0pXG4gXG4taWZlcSAoLCQoZmlsdGVyICQoQVJDSCksYWFyY2g2NCBhcm02NCB4ODYgeDg2XzY0KSlcbitpZmVxICgsJChmaWx0ZXIgJChBUkNIKSxhYXJjaDY0IGFybTY0IHg4NiB4ODZfNjQgcHBjNjQgcHBjNjRsZSkpXG4gIyBEbyBub3RoaW5nIG9uIHVuc3VwcG9ydGVkIGFyY2hpdGVjdHVyZXNcbiBpbmNsdWRlIC4uL2xpYi5ta1xuIGVsc2VcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby5oXG5pbmRleCAwNzg2MmI0NzA3NzdiZC4uYzBiNGEyYWIwNmM1YWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8uaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvLmhcbkBAIC0yNCw2ICsyNCwxNSBAQFxuIGNvbnN0IGNoYXIgKnZmaW9fc2VsZnRlc3RzX2dldF9iZGYoaW50ICphcmdjLCBjaGFyICphcmd2W10pO1xuIGNoYXIgKip2ZmlvX3NlbGZ0ZXN0c19nZXRfYmRmcyhpbnQgKmFyZ2MsIGNoYXIgKmFyZ3ZbXSwgaW50ICpucl9iZGZzKTtcbiBcbisvKlxuKyAqIFJldHVybiB0aGUgSU9NTVUgbW9kZSBzdHJpbmcgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVcbisgKiAkVkZJT19TRUxGVEVTVFNfSU9NTVVfTU9ERS5cbisgKlxuKyAqIFJldHVybnMgTlVMTCBpZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCwgYWxsb3dpbmdcbisgKiB0ZXN0cyB0byB1c2UgdGhlaXIgZGVmYXVsdCBtb2RlLlxuKyAqL1xuK2NvbnN0IGNoYXIgKnZmaW9fc2VsZnRlc3RzX2dldF9pb21tdV9tb2RlKHZvaWQpO1xuK1xuIC8qXG4gICogUmVzZXJ2ZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2Ugb2Ygc2l6ZSBhdCBhbiBhZGRyZXNzIHNhdGlzZnlpbmdcbiAgKiAodmFkZHIgJSBhbGlnbikgPT0gb2Zmc2V0LlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby9pb21tdS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL2lvbW11LmhcbmluZGV4IGU5YTMzODZhNDcxOTNhLi5jOWI5YWI5MjlmMWY5YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby9pb21tdS5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vaW9tbXUuaFxuQEAgLTI0LDEyICsyNCwyNiBAQCBzdHJ1Y3QgZG1hX3JlZ2lvbiB7XG4gXHR1NjQgc2l6ZTtcbiB9O1xuIFxuK3N0cnVjdCBzcGFwcl90Y2Vfd2luZG93IHtcbitcdHU2NCBzdGFydDtcbitcdHU2NCBzaXplO1xuK1x0dTMyIHBhZ2Vfc2hpZnQ7XG4rXHRib29sIHZhbGlkO1xuK1x0Ym9vbCBkeW5hbWljO1xuK1x0Ym9vbCByZW1vdmVfb25fY2xlYW51cDtcbit9O1xuK1xuIHN0cnVjdCBpb21tdSB7XG4gXHRjb25zdCBzdHJ1Y3QgaW9tbXVfbW9kZSAqbW9kZTtcbiBcdGludCBjb250YWluZXJfZmQ7XG4gXHRpbnQgaW9tbXVmZDtcbiBcdHUzMiBpb2FzX2lkO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBkbWFfcmVnaW9ucztcbisjaWZkZWYgX19wb3dlcnBjX19cbitcdHN0cnVjdCBzcGFwcl90Y2Vfd2luZG93IGRlZmF1bHRfd2luZG93O1xuK1x0c3RydWN0IHNwYXByX3RjZV93aW5kb3cgZGR3X3dpbmRvdztcbitcdHN0cnVjdCBzcGFwcl90Y2Vfd2luZG93ICphY3RpdmVfd2luZG93O1xuKyNlbmRpZlxuIH07XG4gXG4gc3RydWN0IGlvbW11ICppb21tdV9pbml0KGNvbnN0IGNoYXIgKmlvbW11X21vZGUpO1xuQEAgLTYxLDIyICs3NSwzNCBAQCBpb3ZhX3QgaW9tbXVfaHZhMmlvdmEoc3RydWN0IGlvbW11ICppb21tdSwgdm9pZCAqdmFkZHIpO1xuIFxuIHN0cnVjdCBpb21tdV9pb3ZhX3JhbmdlICppb21tdV9pb3ZhX3JhbmdlcyhzdHJ1Y3QgaW9tbXUgKmlvbW11LCB1MzIgKm5yYW5nZXMpO1xuIFxuK2ludCBpb21tdV9wcmVwYXJlX2RtYV93aW5kb3coc3RydWN0IGlvbW11ICppb21tdSwgdTY0IG1pbl9zaXplLFxuK1x0XHRcdCAgICAgdTY0IHBhZ2Vfc2l6ZSwgYm9vbCBmb3JjZV9keW5hbWljKTtcbitib29sIGlvbW11X3N1cHBvcnRzX3VubWFwX2FsbChzdHJ1Y3QgaW9tbXUgKmlvbW11KTtcbitcbiAjZGVmaW5lIE1PREVfVkZJT19UWVBFMV9JT01NVSBcInZmaW9fdHlwZTFfaW9tbXVcIlxuICNkZWZpbmUgTU9ERV9WRklPX1RZUEUxVjJfSU9NTVUgXCJ2ZmlvX3R5cGUxdjJfaW9tbXVcIlxuICNkZWZpbmUgTU9ERV9JT01NVUZEX0NPTVBBVF9UWVBFMSBcImlvbW11ZmRfY29tcGF0X3R5cGUxXCJcbiAjZGVmaW5lIE1PREVfSU9NTVVGRF9DT01QQVRfVFlQRTFWMiBcImlvbW11ZmRfY29tcGF0X3R5cGUxdjJcIlxuICNkZWZpbmUgTU9ERV9JT01NVUZEIFwiaW9tbXVmZFwiXG4rI2lmZGVmIF9fcG93ZXJwY19fXG4rI2RlZmluZSBNT0RFX1ZGSU9fU1BBUFJfVENFX1YyX0lPTU1VIFwidmZpb19zcGFwcl90Y2VfdjJfaW9tbXVcIlxuKyNlbmRpZlxuIFxuIC8qXG4gICogR2VuZXJhdG9yIGZvciBWRklPIHNlbGZ0ZXN0cyBmaXh0dXJlIHZhcmlhbnRzIHRoYXQgcmVwbGljYXRlIGFjcm9zcyBhbGxcbiAgKiBwb3NzaWJsZSBJT01NVSBtb2Rlcy4gVGVzdHMgbXVzdCBkZWZpbmUgRklYVFVSRV9WQVJJQU5UX0FERF9JT01NVV9NT0RFKClcbiAgKiB3aGljaCBzaG91bGQgdGhlbiB1c2UgRklYVFVSRV9WQVJJQU5UX0FERCgpIHRvIGNyZWF0ZSB0aGUgdmFyaWFudC5cbiAgKi9cbisjaWZkZWYgX19wb3dlcnBjX19cbisjZGVmaW5lIEZJWFRVUkVfVkFSSUFOVF9BRERfQUxMX0lPTU1VX01PREVTKC4uLikgXFxcbitGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREUodmZpb19zcGFwcl90Y2VfdjJfaW9tbXUsICMjX19WQV9BUkdTX18pXG4rI2Vsc2VcbiAjZGVmaW5lIEZJWFRVUkVfVkFSSUFOVF9BRERfQUxMX0lPTU1VX01PREVTKC4uLikgXFxcbiBGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREUodmZpb190eXBlMV9pb21tdSwgIyNfX1ZBX0FSR1NfXyk7IFxcXG4gRklYVFVSRV9WQVJJQU5UX0FERF9JT01NVV9NT0RFKHZmaW9fdHlwZTF2Ml9pb21tdSwgIyNfX1ZBX0FSR1NfXyk7IFxcXG4gRklYVFVSRV9WQVJJQU5UX0FERF9JT01NVV9NT0RFKGlvbW11ZmRfY29tcGF0X3R5cGUxLCAjI19fVkFfQVJHU19fKTsgXFxcbiBGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREUoaW9tbXVmZF9jb21wYXRfdHlwZTF2MiwgIyNfX1ZBX0FSR1NfXyk7IFxcXG4gRklYVFVSRV9WQVJJQU5UX0FERF9JT01NVV9NT0RFKGlvbW11ZmQsICMjX19WQV9BUkdTX18pXG4rI2VuZGlmXG4gXG4gI2VuZGlmIC8qIFNFTEZURVNUU19WRklPX0xJQl9JTkNMVURFX0xJQlZGSU9fSU9NTVVfSCAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2lvbW11LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pb21tdS5jXG5pbmRleCAwMzVkYWMwNjlkNjAxNi4uMTlkMTliYjQ1YTE0YjUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pb21tdS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pb21tdS5jXG5AQCAtMTYsOSArMTYsMTEgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdmZpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW9tbXVmZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2l6ZXMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiLi4vLi4vLi4va3NlbGZ0ZXN0LmhcIlxuICNpbmNsdWRlIFx1MDAzY2xpYnZmaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbWl0cy5oXHUwMDNlXG4gXG4gY29uc3QgY2hhciAqZGVmYXVsdF9pb21tdV9tb2RlID0gTU9ERV9JT01NVUZEO1xuIFxuQEAgLTQ3LDYgKzQ5LDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tbXVfbW9kZSBpb21tdV9tb2Rlc1tdID0ge1xuIFx0e1xuIFx0XHQubmFtZSA9IE1PREVfSU9NTVVGRCxcbiBcdH0sXG4rI2lmZGVmIF9fcG93ZXJwY19fXG4rXHR7XG4rXHRcdC5uYW1lID0gTU9ERV9WRklPX1NQQVBSX1RDRV9WMl9JT01NVSxcbitcdFx0LmNvbnRhaW5lcl9wYXRoID0gXCIvZGV2L3ZmaW8vdmZpb1wiLFxuK1x0XHQuaW9tbXVfdHlwZSA9IFZGSU9fU1BBUFJfVENFX3YyX0lPTU1VLFxuK1x0fSxcbisjZW5kaWZcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tbXVfbW9kZSAqbG9va3VwX2lvbW11X21vZGUoY29uc3QgY2hhciAqaW9tbXVfbW9kZSlcbkBAIC04Niw2ICs5NSwyMzMgQEAgaW50IF9faW9tbXVfaHZhMmlvdmEoc3RydWN0IGlvbW11ICppb21tdSwgdm9pZCAqdmFkZHIsIGlvdmFfdCAqaW92YSlcbiBcdHJldHVybiAtRU5PRU5UO1xuIH1cbiBcbisjaWZkZWYgX19wb3dlcnBjX19cbitzdGF0aWMgYm9vbCBpb21tdV9pc19zcGFwcl90Y2VfdjIoc3RydWN0IGlvbW11ICppb21tdSlcbit7XG4rXHRyZXR1cm4gISEoaW9tbXUtXHUwMDNlbW9kZS1cdTAwM2Vpb21tdV90eXBlID09IFZGSU9fU1BBUFJfVENFX3YyX0lPTU1VKTtcbit9XG4rXG4rc3RhdGljIHUzMiBwYWdlX3NpemVfdG9fc2hpZnQodTY0IHBhZ2Vfc2l6ZSlcbit7XG4rXHRyZXR1cm4gX19idWlsdGluX2N0emxsKHBhZ2Vfc2l6ZSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgc3BhcHJfdGNlX3JlYWRfZGVmYXVsdF93aW5kb3coc3RydWN0IGlvbW11ICppb21tdSlcbit7XG4rXHRzdHJ1Y3QgdmZpb19pb21tdV9zcGFwcl90Y2VfaW5mbyBpbmZvID0ge1xuK1x0XHQuYXJnc3ogPSBzaXplb2YoaW5mbyksXG4rXHR9O1xuK1xuK1x0aWYgKGlvbW11LVx1MDAzZWRlZmF1bHRfd2luZG93LnZhbGlkKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChpb2N0bChpb21tdS1cdTAwM2Vjb250YWluZXJfZmQsIFZGSU9fSU9NTVVfU1BBUFJfVENFX0dFVF9JTkZPLCBcdTAwMjZpbmZvKSlcbitcdFx0cmV0dXJuIC1lcnJubztcbitcbitcdGlvbW11LVx1MDAzZWRlZmF1bHRfd2luZG93LnN0YXJ0ID0gaW5mby5kbWEzMl93aW5kb3dfc3RhcnQ7XG4rXHRpb21tdS1cdTAwM2VkZWZhdWx0X3dpbmRvdy5zaXplID0gaW5mby5kbWEzMl93aW5kb3dfc2l6ZTtcbitcdGlvbW11LVx1MDAzZWRlZmF1bHRfd2luZG93LnBhZ2Vfc2hpZnQgPSBwYWdlX3NpemVfdG9fc2hpZnQoZ2V0cGFnZXNpemUoKSk7XG4rXHRpb21tdS1cdTAwM2VkZWZhdWx0X3dpbmRvdy52YWxpZCA9IHRydWU7XG4rXHRpb21tdS1cdTAwM2VkZWZhdWx0X3dpbmRvdy5keW5hbWljID0gZmFsc2U7XG4rXHRpb21tdS1cdTAwM2VkZWZhdWx0X3dpbmRvdy5yZW1vdmVfb25fY2xlYW51cCA9IGZhbHNlO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgc3BhcHJfdGNlX2NyZWF0ZV9kZHcoc3RydWN0IGlvbW11ICppb21tdSwgdTY0IG1pbl9zaXplLCB1MzIgcGFnZV9zaGlmdClcbit7XG4rXHRzdHJ1Y3QgdmZpb19pb21tdV9zcGFwcl90Y2VfY3JlYXRlIGNyZWF0ZSA9IHtcbitcdFx0LmFyZ3N6ID0gc2l6ZW9mKGNyZWF0ZSksXG4rXHRcdC5wYWdlX3NoaWZ0ID0gcGFnZV9zaGlmdCxcbitcdFx0LmxldmVscyA9IDEsXG4rXHRcdC53aW5kb3dfc2l6ZSA9IG1pbl9zaXplLFxuK1x0fTtcbitcbitcdGlmIChpb2N0bChpb21tdS1cdTAwM2Vjb250YWluZXJfZmQsIFZGSU9fSU9NTVVfU1BBUFJfVENFX0NSRUFURSwgXHUwMDI2Y3JlYXRlKSlcbitcdFx0cmV0dXJuIC1lcnJubztcbitcbitcdGlvbW11LVx1MDAzZWRkd193aW5kb3cuc3RhcnQgPSBjcmVhdGUuc3RhcnRfYWRkcjtcbitcdGlvbW11LVx1MDAzZWRkd193aW5kb3cuc2l6ZSA9IGNyZWF0ZS53aW5kb3dfc2l6ZTtcbitcdGlvbW11LVx1MDAzZWRkd193aW5kb3cucGFnZV9zaGlmdCA9IHBhZ2Vfc2hpZnQ7XG4rXHRpb21tdS1cdTAwM2VkZHdfd2luZG93LnZhbGlkID0gdHJ1ZTtcbitcdGlvbW11LVx1MDAzZWRkd193aW5kb3cuZHluYW1pYyA9IHRydWU7XG4rXHRpb21tdS1cdTAwM2VkZHdfd2luZG93LnJlbW92ZV9vbl9jbGVhbnVwID0gdHJ1ZTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHNwYXByX3RjZV9yZW1vdmVfd2luZG93KHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBzcGFwcl90Y2Vfd2luZG93ICp3aW5kb3cpXG4re1xuK1x0c3RydWN0IHZmaW9faW9tbXVfc3BhcHJfdGNlX3JlbW92ZSByZW1vdmUgPSB7XG4rXHRcdC5hcmdzeiA9IHNpemVvZihyZW1vdmUpLFxuK1x0XHQuc3RhcnRfYWRkciA9IHdpbmRvdy1cdTAwM2VzdGFydCxcbitcdH07XG4rXG4rXHRpZiAoIXdpbmRvdy1cdTAwM2V2YWxpZCB8fCAhd2luZG93LVx1MDAzZXJlbW92ZV9vbl9jbGVhbnVwKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChpb2N0bChpb21tdS1cdTAwM2Vjb250YWluZXJfZmQsIFZGSU9fSU9NTVVfU1BBUFJfVENFX1JFTU9WRSwgXHUwMDI2cmVtb3ZlKSlcbitcdFx0cmV0dXJuIC1lcnJubztcbitcbitcdHdpbmRvdy1cdTAwM2V2YWxpZCA9IGZhbHNlO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBib29sIHNwYXByX3RjZV93aW5kb3dfc2F0aXNmaWVzKHN0cnVjdCBzcGFwcl90Y2Vfd2luZG93ICp3aW5kb3csXG4rXHRcdFx0XHQgICAgICAgdTY0IG1pbl9zaXplLCB1MzIgcGFnZV9zaGlmdCxcbitcdFx0XHRcdCAgICAgICBib29sIHJlcXVpcmVfZHluYW1pYylcbit7XG4rXHRpZiAoIXdpbmRvdyB8fCAhd2luZG93LVx1MDAzZXZhbGlkKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAocmVxdWlyZV9keW5hbWljIFx1MDAyNlx1MDAyNiAhd2luZG93LVx1MDAzZWR5bmFtaWMpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmICh3aW5kb3ctXHUwMDNlc2l6ZSBcdTAwM2MgbWluX3NpemUpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmICh3aW5kb3ctXHUwMDNlcGFnZV9zaGlmdCAhPSBwYWdlX3NoaWZ0KVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBpb21tdV9pb3ZhX3JhbmdlICpzcGFwcl90Y2VfaW92YV9yYW5nZXMoc3RydWN0IGlvbW11ICppb21tdSwgdTMyICpucmFuZ2VzKVxuK3tcbitcdHN0cnVjdCBpb21tdV9pb3ZhX3JhbmdlICpyYW5nZXM7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCFpb21tdS1cdTAwM2VhY3RpdmVfd2luZG93KSB7XG4rXHRcdHJldCA9IGlvbW11X3ByZXBhcmVfZG1hX3dpbmRvdyhpb21tdSwgU1pfMUcsIGdldHBhZ2VzaXplKCksIGZhbHNlKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbitcdHJhbmdlcyA9IGNhbGxvYygxLCBzaXplb2YoKnJhbmdlcykpO1xuK1x0VkZJT19BU1NFUlRfTk9UX05VTEwocmFuZ2VzKTtcbitcbitcdHJhbmdlc1swXS5zdGFydCA9IGlvbW11LVx1MDAzZWFjdGl2ZV93aW5kb3ctXHUwMDNlc3RhcnQ7XG4rXHRyYW5nZXNbMF0ubGFzdCA9IGlvbW11LVx1MDAzZWFjdGl2ZV93aW5kb3ctXHUwMDNlc3RhcnQgKyBpb21tdS1cdTAwM2VhY3RpdmVfd2luZG93LVx1MDAzZXNpemUgLSAxO1xuK1xuK1x0Km5yYW5nZXMgPSAxO1xuK1x0cmV0dXJuIHJhbmdlcztcbit9XG4rXG4rc3RhdGljIGJvb2wgc3BhcHJfdGNlX2lvdmFfaW5zaWRlX3dpbmRvdyhzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uKVxuK3tcbitcdHN0cnVjdCBzcGFwcl90Y2Vfd2luZG93ICp3aW5kb3cgPSBpb21tdS1cdTAwM2VhY3RpdmVfd2luZG93O1xuK1xuK1x0aWYgKCF3aW5kb3cgfHwgIXdpbmRvdy1cdTAwM2V2YWxpZClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKHJlZ2lvbi1cdTAwM2Vpb3ZhIFx1MDAzYyB3aW5kb3ctXHUwMDNlc3RhcnQpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmIChyZWdpb24tXHUwMDNlaW92YSArIHJlZ2lvbi1cdTAwM2VzaXplIFx1MDAzZSB3aW5kb3ctXHUwMDNlc3RhcnQgKyB3aW5kb3ctXHUwMDNlc2l6ZSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuK3N0YXRpYyBpbnQgc3BhcHJfcmVnaXN0ZXJfbWVtb3J5KHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24pXG4re1xuK1x0c3RydWN0IHZmaW9faW9tbXVfc3BhcHJfcmVnaXN0ZXJfbWVtb3J5IGFyZ3MgPSB7XG4rXHRcdC5hcmdzeiA9IHNpemVvZihhcmdzKSxcbitcdFx0LnZhZGRyID0gKHU2NClyZWdpb24tXHUwMDNldmFkZHIsXG4rXHRcdC5zaXplID0gcmVnaW9uLVx1MDAzZXNpemUsXG4rXHR9O1xuK1xuK1x0aWYgKGlvY3RsKGlvbW11LVx1MDAzZWNvbnRhaW5lcl9mZCwgVkZJT19JT01NVV9TUEFQUl9SRUdJU1RFUl9NRU1PUlksIFx1MDAyNmFyZ3MpKVxuK1x0XHRyZXR1cm4gLWVycm5vO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgc3BhcHJfdW5yZWdpc3Rlcl9tZW1vcnkoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbilcbit7XG4rXHRzdHJ1Y3QgdmZpb19pb21tdV9zcGFwcl9yZWdpc3Rlcl9tZW1vcnkgYXJncyA9IHtcbitcdFx0LmFyZ3N6ID0gc2l6ZW9mKGFyZ3MpLFxuK1x0XHQudmFkZHIgPSAodTY0KXJlZ2lvbi1cdTAwM2V2YWRkcixcbitcdFx0LnNpemUgPSByZWdpb24tXHUwMDNlc2l6ZSxcbitcdH07XG4rXG4rXHRpZiAoaW9jdGwoaW9tbXUtXHUwMDNlY29udGFpbmVyX2ZkLCBWRklPX0lPTU1VX1NQQVBSX1VOUkVHSVNURVJfTUVNT1JZLCBcdTAwMjZhcmdzKSlcbitcdFx0cmV0dXJuIC1lcnJubztcbitcbitcdHJldHVybiAwO1xuK31cbitcbitpbnQgaW9tbXVfcHJlcGFyZV9kbWFfd2luZG93KHN0cnVjdCBpb21tdSAqaW9tbXUsIHU2NCBtaW5fc2l6ZSxcbitcdFx0XHQgICAgIHU2NCBwYWdlX3NpemUsIGJvb2wgZm9yY2VfZHluYW1pYylcbit7XG4rXHR1MzIgcGFnZV9zaGlmdDtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoIWlvbW11X2lzX3NwYXByX3RjZV92Mihpb21tdSkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKCFwYWdlX3NpemUpXG4rXHRcdHBhZ2Vfc2l6ZSA9IGdldHBhZ2VzaXplKCk7XG4rXG4rXHRwYWdlX3NoaWZ0ID0gcGFnZV9zaXplX3RvX3NoaWZ0KHBhZ2Vfc2l6ZSk7XG4rXG4rXHRyZXQgPSBzcGFwcl90Y2VfcmVhZF9kZWZhdWx0X3dpbmRvdyhpb21tdSk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LypcbitcdCAqIE5vcm1hbCBtYXBwaW5nIHBhdGg6XG4rXHQgKiB1c2UgZGVmYXVsdCB3aW5kb3cgd2hlbiBpdCBzYXRpc2ZpZXMgdGhlIHJlcXVlc3QuXG4rXHQgKi9cbitcdGlmICghZm9yY2VfZHluYW1pYyBcdTAwMjZcdTAwMjZcbitcdCAgICBzcGFwcl90Y2Vfd2luZG93X3NhdGlzZmllcyhcdTAwMjZpb21tdS1cdTAwM2VkZWZhdWx0X3dpbmRvdyxcbitcdFx0XHRcdCAgICAgICBtaW5fc2l6ZSwgcGFnZV9zaGlmdCwgZmFsc2UpKSB7XG4rXHRcdGlvbW11LVx1MDAzZWFjdGl2ZV93aW5kb3cgPSBcdTAwMjZpb21tdS1cdTAwM2VkZWZhdWx0X3dpbmRvdztcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogRHluYW1pYyBwYXRoOlxuK1x0ICogdXNlIGV4aXN0aW5nIEREVyBpZiBpdCBhbHJlYWR5IHNhdGlzZmllcyB0aGUgcmVxdWVzdC5cbitcdCAqL1xuK1x0aWYgKHNwYXByX3RjZV93aW5kb3dfc2F0aXNmaWVzKFx1MDAyNmlvbW11LVx1MDAzZWRkd193aW5kb3csXG4rXHRcdFx0XHQgICAgICAgbWluX3NpemUsIHBhZ2Vfc2hpZnQsIHRydWUpKSB7XG4rXHRcdGlvbW11LVx1MDAzZWFjdGl2ZV93aW5kb3cgPSBcdTAwMjZpb21tdS1cdTAwM2VkZHdfd2luZG93O1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBOZWl0aGVyIGRlZmF1bHQgbm9yIEREVyBpcyBzdWZmaWNpZW50LlxuK1x0ICogUmVtb3ZlIG9ubHkgdGhlIHNlbGZ0ZXN0LWNyZWF0ZWQgRERXLCB0aGVuIGNyZWF0ZSBhIG5ldyBERFcuXG4rXHQgKi9cbitcdHJldCA9IHNwYXByX3RjZV9yZW1vdmVfd2luZG93KGlvbW11LCBcdTAwMjZpb21tdS1cdTAwM2VkZHdfd2luZG93KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBzcGFwcl90Y2VfY3JlYXRlX2Rkdyhpb21tdSwgbWluX3NpemUsIHBhZ2Vfc2hpZnQpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlvbW11LVx1MDAzZWFjdGl2ZV93aW5kb3cgPSBcdTAwMjZpb21tdS1cdTAwM2VkZHdfd2luZG93O1xuK1x0cmV0dXJuIDA7XG4rfVxuKyNlbHNlXG4raW50IGlvbW11X3ByZXBhcmVfZG1hX3dpbmRvdyhzdHJ1Y3QgaW9tbXUgKmlvbW11LCB1NjQgbWluX3NpemUsXG4rXHRcdFx0ICAgICB1NjQgcGFnZV9zaXplLCBib29sIGZvcmNlX2R5bmFtaWMpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuKyNlbmRpZlxuK1xuK2Jvb2wgaW9tbXVfc3VwcG9ydHNfdW5tYXBfYWxsKHN0cnVjdCBpb21tdSAqaW9tbXUpXG4re1xuKyNpZmRlZiBfX3Bvd2VycGNfX1xuK1x0aWYgKGlvbW11X2lzX3NwYXByX3RjZV92Mihpb21tdSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbisjZW5kaWZcbitcdHJldHVybiB0cnVlO1xuK31cbitcbiBpb3ZhX3QgaW9tbXVfaHZhMmlvdmEoc3RydWN0IGlvbW11ICppb21tdSwgdm9pZCAqdmFkZHIpXG4ge1xuIFx0aW92YV90IGlvdmE7XG5AQCAtMTA2LDkgKzM0MiwyNyBAQCBzdGF0aWMgaW50IHZmaW9faW9tbXVfbWFwKHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24pXG4gXHRcdC5pb3ZhID0gcmVnaW9uLVx1MDAzZWlvdmEsXG4gXHRcdC5zaXplID0gcmVnaW9uLVx1MDAzZXNpemUsXG4gXHR9O1xuK1x0aW50IHJldDtcbiBcbi1cdGlmIChpb2N0bChpb21tdS1cdTAwM2Vjb250YWluZXJfZmQsIFZGSU9fSU9NTVVfTUFQX0RNQSwgXHUwMDI2YXJncykpXG4rI2lmZGVmIF9fcG93ZXJwY19fXG4rXHRpZiAoaW9tbXVfaXNfc3BhcHJfdGNlX3YyKGlvbW11KSkge1xuK1x0XHRpZiAoIXNwYXByX3RjZV9pb3ZhX2luc2lkZV93aW5kb3coaW9tbXUsIHJlZ2lvbikpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdHJldCA9IHNwYXByX3JlZ2lzdGVyX21lbW9yeShpb21tdSwgcmVnaW9uKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuKyNlbmRpZlxuK1xuK1x0cmV0ID0gaW9jdGwoaW9tbXUtXHUwMDNlY29udGFpbmVyX2ZkLCBWRklPX0lPTU1VX01BUF9ETUEsIFx1MDAyNmFyZ3MpO1xuK1x0aWYgKHJldCkge1xuKyNpZmRlZiBfX3Bvd2VycGNfX1xuK1x0XHRpZiAoaW9tbXVfaXNfc3BhcHJfdGNlX3YyKGlvbW11KSlcbitcdFx0XHRzcGFwcl91bnJlZ2lzdGVyX21lbW9yeShpb21tdSwgcmVnaW9uKTtcbisjZW5kaWZcbiBcdFx0cmV0dXJuIC1lcnJubztcbitcdH1cbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0xNzAsOCArNDI0LDE4IEBAIHN0YXRpYyBpbnQgX192ZmlvX2lvbW11X3VubWFwKGludCBmZCwgdTY0IGlvdmEsIHU2NCBzaXplLCB1MzIgZmxhZ3MsIHU2NCAqdW5tYXBwXG4gc3RhdGljIGludCB2ZmlvX2lvbW11X3VubWFwKHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24sXG4gXHRcdFx0ICAgIHU2NCAqdW5tYXBwZWQpXG4ge1xuLVx0cmV0dXJuIF9fdmZpb19pb21tdV91bm1hcChpb21tdS1cdTAwM2Vjb250YWluZXJfZmQsIHJlZ2lvbi1cdTAwM2Vpb3ZhLFxuLVx0XHRcdFx0ICByZWdpb24tXHUwMDNlc2l6ZSwgMCwgdW5tYXBwZWQpO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IF9fdmZpb19pb21tdV91bm1hcChpb21tdS1cdTAwM2Vjb250YWluZXJfZmQsIHJlZ2lvbi1cdTAwM2Vpb3ZhLFxuK1x0XHRcdFx0IHJlZ2lvbi1cdTAwM2VzaXplLCAwLCB1bm1hcHBlZCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuKyNpZmRlZiBfX3Bvd2VycGNfX1xuK1x0aWYgKGlvbW11X2lzX3NwYXByX3RjZV92Mihpb21tdSkpXG4rXHRcdHJldCA9IHNwYXByX3VucmVnaXN0ZXJfbWVtb3J5KGlvbW11LCByZWdpb24pO1xuKyNlbmRpZlxuK1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGludCBfX2lvbW11ZmRfdW5tYXAoaW50IGZkLCB1NjQgaW92YSwgdTY0IGxlbmd0aCwgdTMyIGlvYXNfaWQsIHU2NCAqdW5tYXBwZWQpXG5AQCAtMzE3LDYgKzU4MSwxMSBAQCBzdGF0aWMgc3RydWN0IGlvbW11X2lvdmFfcmFuZ2UgKnZmaW9faW9tbXVfaW92YV9yYW5nZXMoc3RydWN0IGlvbW11ICppb21tdSxcbiBcdHN0cnVjdCB2ZmlvX2luZm9fY2FwX2hlYWRlciAqaGRyO1xuIFx0c3RydWN0IGlvbW11X2lvdmFfcmFuZ2UgKnJhbmdlcyA9IE5VTEw7XG4gXG4rI2lmZGVmIF9fcG93ZXJwY19fXG4rXHRpZiAoaW9tbXVfaXNfc3BhcHJfdGNlX3YyKGlvbW11KSlcbitcdFx0cmV0dXJuIHNwYXByX3RjZV9pb3ZhX3Jhbmdlcyhpb21tdSwgbnJhbmdlcyk7XG4rI2VuZGlmXG4rXG4gXHRpbmZvID0gdmZpb19pb21tdV9nZXRfaW5mbyhpb21tdS1cdTAwM2Vjb250YWluZXJfZmQpO1xuIFx0aGRyID0gdmZpb19pb21tdV9pbmZvX2NhcF9oZHIoaW5mbywgVkZJT19JT01NVV9UWVBFMV9JTkZPX0NBUF9JT1ZBX1JBTkdFKTtcbiBcdFZGSU9fQVNTRVJUX05PVF9OVUxMKGhkcik7XG5AQCAtNDU1LDYgKzcyNCwxMSBAQCBzdHJ1Y3QgaW9tbXUgKmlvbW11X2luaXQoY29uc3QgY2hhciAqaW9tbXVfbW9kZSlcbiBcbiB2b2lkIGlvbW11X2NsZWFudXAoc3RydWN0IGlvbW11ICppb21tdSlcbiB7XG4rI2lmZGVmIF9fcG93ZXJwY19fXG4rXHRpZiAoaW9tbXVfaXNfc3BhcHJfdGNlX3YyKGlvbW11KSlcbitcdFx0c3BhcHJfdGNlX3JlbW92ZV93aW5kb3coaW9tbXUsIFx1MDAyNmlvbW11LVx1MDAzZWRkd193aW5kb3cpO1xuKyNlbmRpZlxuK1xuIFx0aWYgKGlvbW11LVx1MDAzZWlvbW11ZmQpXG4gXHRcdFZGSU9fQVNTRVJUX0VRKGNsb3NlKGlvbW11LVx1MDAzZWlvbW11ZmQpLCAwKTtcbiBcdGVsc2VcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLmNcbmluZGV4IDNhM2QxZWQ2MzVjMWRmLi4xMmY3MzE5NjNiMDU4YSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5jXG5AQCAtMTAxLDMgKzEwMSw0MCBAQCB2b2lkICptbWFwX3Jlc2VydmUoc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbiwgc2l6ZV90IG9mZnNldClcbiBcbiBcdHJldHVybiBtYXBfYWxpZ247XG4gfVxuK1xuK3N0YXRpYyBjb25zdCBjaGFyICpnZXRfaW9tbXVfbW9kZV9lbnYodm9pZClcbit7XG4rXHRjb25zdCBjaGFyICptb2RlO1xuK1x0c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB2YWxpZF9tb2Rlc1tdID0ge1xuK1x0XHRNT0RFX1ZGSU9fVFlQRTFfSU9NTVUsXG4rXHRcdE1PREVfVkZJT19UWVBFMVYyX0lPTU1VLFxuK1x0XHRNT0RFX0lPTU1VRkRfQ09NUEFUX1RZUEUxLFxuK1x0XHRNT0RFX0lPTU1VRkRfQ09NUEFUX1RZUEUxVjIsXG4rXHRcdE1PREVfSU9NTVVGRCxcbisjaWZkZWYgX19wb3dlcnBjX19cbitcdFx0TU9ERV9WRklPX1NQQVBSX1RDRV9WMl9JT01NVSxcbisjZW5kaWZcbitcdH07XG4rXHRpbnQgaTtcbitcbitcdG1vZGUgPSBnZXRlbnYoXCJWRklPX1NFTEZURVNUU19JT01NVV9NT0RFXCIpO1xuK1x0aWYgKCFtb2RlKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUodmFsaWRfbW9kZXMpOyBpKyspIHtcbitcdFx0aWYgKCFzdHJjbXAobW9kZSwgdmFsaWRfbW9kZXNbaV0pKVxuK1x0XHRcdHJldHVybiBtb2RlO1xuK1x0fVxuK1xuK1x0ZnByaW50ZihzdGRlcnIsIFwiSW52YWxpZCBWRklPX1NFTEZURVNUU19JT01NVV9NT0RFOiAlc1xcblwiLCBtb2RlKTtcbitcdGZwcmludGYoc3RkZXJyLCBcIlZhbGlkIG1vZGVzIGFyZTpcXG5cIik7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHZhbGlkX21vZGVzKTsgaSsrKVxuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCIgICVzXFxuXCIsIHZhbGlkX21vZGVzW2ldKTtcbitcdGV4aXQoS1NGVF9TS0lQKTtcbit9XG4rXG4rY29uc3QgY2hhciAqdmZpb19zZWxmdGVzdHNfZ2V0X2lvbW11X21vZGUodm9pZClcbit7XG4rXHRyZXR1cm4gZ2V0X2lvbW11X21vZGVfZW52KCk7XG4rfVxuK1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19kbWFfbWFwcGluZ190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL3ZmaW9fZG1hX21hcHBpbmdfdGVzdC5jXG5pbmRleCA3ZDBkZThjNzlkZTEzZi4uY2QyZDMyNzZhNDZjNDYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL3ZmaW9fZG1hX21hcHBpbmdfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL3ZmaW9fZG1hX21hcHBpbmdfdGVzdC5jXG5AQCAtMSw1ICsxLDYgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gI2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4gXG5AQCAtMTE5LDggKzEyMCwxOSBAQCBGSVhUVVJFX1ZBUklBTlRfQUREX0FMTF9JT01NVV9NT0RFUyhhbm9ueW1vdXNfaHVnZXRsYl8xZ2IsIFNaXzFHLCBNQVBfSFVHRVRMQiB8XG4gXG4gRklYVFVSRV9TRVRVUCh2ZmlvX2RtYV9tYXBwaW5nX3Rlc3QpXG4ge1xuK1x0Y29uc3QgdTY0IHBhZ2Vfc2l6ZSA9IHZhcmlhbnQtXHUwMDNlc2l6ZSA/OiBnZXRwYWdlc2l6ZSgpO1xuK1x0Y29uc3QgYm9vbCBmb3JjZV9keW5hbWljID0gISF2YXJpYW50LVx1MDAzZXNpemU7XG4rXHRpbnQgcmV0O1xuK1xuIFx0c2VsZi1cdTAwM2Vpb21tdSA9IGlvbW11X2luaXQodmFyaWFudC1cdTAwM2Vpb21tdV9tb2RlKTtcbiBcdHNlbGYtXHUwMDNlZGV2aWNlID0gdmZpb19wY2lfZGV2aWNlX2luaXQoZGV2aWNlX2JkZiwgc2VsZi1cdTAwM2Vpb21tdSk7XG4rXG4rXHRyZXQgPSBpb21tdV9wcmVwYXJlX2RtYV93aW5kb3coc2VsZi1cdTAwM2Vpb21tdSwgcGFnZV9zaXplLCBwYWdlX3NpemUsXG4rXHRcdFx0XHQgICAgICAgZm9yY2VfZHluYW1pYyk7XG4rXHRpZiAocmV0KVxuK1x0XHRTS0lQKHJldHVybiwgXCJETUEgd2luZG93IHVuYXZhaWxhYmxlOiAlcyAoJWQpXFxuXCIsXG4rXHRcdCAgICAgc3RyZXJyb3IoLXJldCksIC1yZXQpO1xuK1xuIFx0c2VsZi1cdTAwM2Vpb3ZhX2FsbG9jYXRvciA9IGlvdmFfYWxsb2NhdG9yX2luaXQoc2VsZi1cdTAwM2Vpb21tdSk7XG4gfVxuIFxuQEAgLTIyNyw2ICsyMzksNyBAQCBGSVhUVVJFX1NFVFVQKHZmaW9fZG1hX21hcF9saW1pdF90ZXN0KVxuIFx0dTY0IHJlZ2lvbl9zaXplID0gZ2V0cGFnZXNpemUoKTtcbiBcdGlvdmFfdCBsYXN0X2lvdmE7XG4gXHR1MzIgbnJhbmdlcztcbitcdGludCByZXQ7XG4gXG4gXHQvKlxuIFx0ICogT3Zlci1hbGxvY2F0ZSBtbWFwIGJ5IGRvdWJsZSB0aGUgc2l6ZSB0byBwcm92aWRlIGVub3VnaCBiYWNraW5nIHZhZGRyXG5AQCAtMjM2LDYgKzI0OSwxMyBAQCBGSVhUVVJFX1NFVFVQKHZmaW9fZG1hX21hcF9saW1pdF90ZXN0KVxuIFxuIFx0c2VsZi1cdTAwM2Vpb21tdSA9IGlvbW11X2luaXQodmFyaWFudC1cdTAwM2Vpb21tdV9tb2RlKTtcbiBcdHNlbGYtXHUwMDNlZGV2aWNlID0gdmZpb19wY2lfZGV2aWNlX2luaXQoZGV2aWNlX2JkZiwgc2VsZi1cdTAwM2Vpb21tdSk7XG4rXG4rXHRyZXQgPSBpb21tdV9wcmVwYXJlX2RtYV93aW5kb3coc2VsZi1cdTAwM2Vpb21tdSwgcmVnaW9uX3NpemUsIHJlZ2lvbl9zaXplLFxuK1x0XHRcdFx0ICAgICAgIGZhbHNlKTtcbitcdGlmIChyZXQpXG4rXHRcdFNLSVAocmV0dXJuLCBcIkRNQSB3aW5kb3cgdW5hdmFpbGFibGU6ICVzICglZClcXG5cIixcbitcdFx0ICAgICBzdHJlcnJvcigtcmV0KSwgLXJldCk7XG4rXG4gXHRyZWdpb24tXHUwMDNldmFkZHIgPSBtbWFwKE5VTEwsIHNlbGYtXHUwMDNlbW1hcF9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuIFx0XHRcdCAgICAgTUFQX0FOT05ZTU9VUyB8IE1BUF9QUklWQVRFLCAtMSwgMCk7XG4gXHRBU1NFUlRfTkUocmVnaW9uLVx1MDAzZXZhZGRyLCBNQVBfRkFJTEVEKTtcbkBAIC0yNzcsNiArMjk3LDggQEAgVEVTVF9GKHZmaW9fZG1hX21hcF9saW1pdF90ZXN0LCB1bm1hcF9hbGwpXG4gXHR1NjQgdW5tYXBwZWQ7XG4gXHRpbnQgcmM7XG4gXG4rXHRpZiAoIWlvbW11X3N1cHBvcnRzX3VubWFwX2FsbChzZWxmLVx1MDAzZWlvbW11KSlcbitcdFx0U0tJUChyZXR1cm4sIFwiSU9NTVUgYmFja2VuZCBkb2VzIG5vdCBzdXBwb3J0IHVubWFwLWFsbFxcblwiKTtcbiBcdGlvbW11X21hcChzZWxmLVx1MDAzZWlvbW11LCByZWdpb24pO1xuIFx0QVNTRVJUX0VRKHJlZ2lvbi1cdTAwM2Vpb3ZhLCB0b19pb3ZhKHNlbGYtXHUwMDNlZGV2aWNlLCByZWdpb24tXHUwMDNldmFkZHIpKTtcbiBcbkBAIC0yOTQsMTAgKzMxNiwxOCBAQCBURVNUX0YodmZpb19kbWFfbWFwX2xpbWl0X3Rlc3QsIG92ZXJmbG93KVxuIFx0cmVnaW9uLVx1MDAzZXNpemUgPSBzZWxmLVx1MDAzZW1tYXBfc2l6ZTtcbiBcbiBcdHJjID0gX19pb21tdV9tYXAoc2VsZi1cdTAwM2Vpb21tdSwgcmVnaW9uKTtcbisjaWZkZWYgX19wb3dlcnBjX19cbitcdEFTU0VSVF9FUShyYywgLUVOWElPKTtcbisjZWxzZVxuIFx0QVNTRVJUX0VRKHJjLCAtRU9WRVJGTE9XKTtcbisjZW5kaWZcbiBcbiBcdHJjID0gX19pb21tdV91bm1hcChzZWxmLVx1MDAzZWlvbW11LCByZWdpb24sIE5VTEwpO1xuKyNpZmRlZiBfX3Bvd2VycGNfX1xuK1x0QVNTRVJUX0VRKHJjLCAtRU5YSU8pO1xuKyNlbHNlXG4gXHRBU1NFUlRfRVEocmMsIC1FT1ZFUkZMT1cpO1xuKyNlbmRpZlxuIH1cbiBcbiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19wY2lfZGV2aWNlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19wY2lfZGV2aWNlX3Rlc3QuY1xuaW5kZXggOTNjMTFmZDVlMDgxODIuLjQ1YjhiZjYwNTI3YTg2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX3BjaV9kZXZpY2VfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL3ZmaW9fcGNpX2RldmljZV90ZXN0LmNcbkBAIC0yOSw3ICsyOSw3IEBAIEZJWFRVUkUodmZpb19wY2lfZGV2aWNlX3Rlc3QpIHtcbiBcbiBGSVhUVVJFX1NFVFVQKHZmaW9fcGNpX2RldmljZV90ZXN0KVxuIHtcbi1cdHNlbGYtXHUwMDNlaW9tbXUgPSBpb21tdV9pbml0KGRlZmF1bHRfaW9tbXVfbW9kZSk7XG4rXHRzZWxmLVx1MDAzZWlvbW11ID0gaW9tbXVfaW5pdCh2ZmlvX3NlbGZ0ZXN0c19nZXRfaW9tbXVfbW9kZSgpKTtcbiBcdHNlbGYtXHUwMDNlZGV2aWNlID0gdmZpb19wY2lfZGV2aWNlX2luaXQoZGV2aWNlX2JkZiwgc2VsZi1cdTAwM2Vpb21tdSk7XG4gfVxuIFxuQEAgLTEyMSw3ICsxMjEsNyBAQCBGSVhUVVJFX1ZBUklBTlRfQUREKHZmaW9fcGNpX2lycV90ZXN0LCBtc2l4KSB7XG4gXG4gRklYVFVSRV9TRVRVUCh2ZmlvX3BjaV9pcnFfdGVzdClcbiB7XG4tXHRzZWxmLVx1MDAzZWlvbW11ID0gaW9tbXVfaW5pdChkZWZhdWx0X2lvbW11X21vZGUpO1xuK1x0c2VsZi1cdTAwM2Vpb21tdSA9IGlvbW11X2luaXQodmZpb19zZWxmdGVzdHNfZ2V0X2lvbW11X21vZGUoKSk7XG4gXHRzZWxmLVx1MDAzZWRldmljZSA9IHZmaW9fcGNpX2RldmljZV9pbml0KGRldmljZV9iZGYsIHNlbGYtXHUwMDNlaW9tbXUpO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA5OjI3OjIxLjg4NTU3MjEzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUyMzk3ODQ2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogU2VsZnRlc3QgVXBkYXRlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgYW5kIGl0IGFwcGVhcnMgdG8gYmUgZm9jdXNlZCBzb2xlbHkgb24gdXBkYXRlcyB3aXRoaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vYC4gVGhhdCBkaXJlY3Rvcnkgc2NyZWFtcyBcInNlbGZ0ZXN0XCIgdG8gbWUsIGFuZCB0aGF0IG1lYW5zIHVzZXJzcGFjZSwgbm90IGtlcm5lbCBjb2RlIHdlIG5lZWQgdG8gd29ycnkgYWJvdXQgZnV6emluZyBkaXJlY3RseS4gSSBuZWVkIHRvIGJlIHN1cmUsIHRob3VnaC4gTGV0J3MgbWFrZSBzdXJlLlxuXG5IbW0sIGxldCdzIGNvbmZpcm0gdGhlIGZpbGVzLlxuXG5BIHF1aWNrIGRpZmYgY2hlY2sgY29uZmlybXMgbXkgaW5pdGlhbCBpbXByZXNzaW9uLiBJdCdzIHRvdWNoaW5nIGBNYWtlZmlsZWAsIHNvbWUgaW5jbHVkZSBmaWxlcyAoYGxpYnZmaW8uaGAsIGBpb21tdS5oYCksIGFuZCBhIGZldyBDIGZpbGVzIChgaW9tbXUuY2AsIGBsaWJ2ZmlvLmNgLCBgdmZpb19kbWFfbWFwcGluZ190ZXN0LmNgLCBgdmZpb19wY2lfZGV2aWNlX3Rlc3QuY2ApLiBUaGF0J3MgYWxsIHdpdGhpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vYCBzdWJ0cmVlLiBFeGNlbGxlbnQuXG5cbkdpdmVuIHRoYXQgKmFsbCogdGhlIG1vZGlmaWNhdGlvbnMgYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIHNlbGZ0ZXN0IGRpcmVjdG9yeSwgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCB0aGlzIHBhdGNoICpkb2Vzbid0KiBpbnRyb2R1Y2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgd2FycmFudCBmdXp6aW5nLiBJdCdzIGp1c3QgYSB0ZXN0IHVwZGF0ZS4gU28sIEkgd2lsbCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgc3RyYWlnaHRmb3J3YXJkOiB0aGlzIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cywgYW5kIHRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4gV2UgY2FuIHNraXAgdGhpcyBvbmUgZm9yIGZ1enppbmcgcHVycG9zZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxODYsIk91dHB1dFRva2VucyI6NjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwOToyNzoyOC40MDk1NTMzMDNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby8pIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby8pIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowz9vvc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-03 09:07:04 +0000 UTC FinishedAt: 2026-07-03 09:27:30 +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+CgkJCTx0ZD4yMDI2LzA3LzAzIDA5OjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby8pIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDk6Mjc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjNjJjZWQ2OWVmZmU2MzI3ZmY3MzhmOWRlYjA1YzY3NjkyMjBmYTViXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMyAwOToyNzoyMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9NYWtlZmlsZVxuaW5kZXggMmMzMmM0OGRiNTA5ODUuLjhmZDZhZmQzMzRlNTMyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9NYWtlZmlsZVxuQEAgLTEsNiAmIzQzOzEsNiBAQFxuIEFSQ0ggPz0gJChzaGVsbCB1bmFtZSAtbSlcbiBcbi1pZmVxICgsJChmaWx0ZXIgJChBUkNIKSxhYXJjaDY0IGFybTY0IHg4NiB4ODZfNjQpKVxuJiM0MztpZmVxICgsJChmaWx0ZXIgJChBUkNIKSxhYXJjaDY0IGFybTY0IHg4NiB4ODZfNjQgcHBjNjQgcHBjNjRsZSkpXG4gIyBEbyBub3RoaW5nIG9uIHVuc3VwcG9ydGVkIGFyY2hpdGVjdHVyZXNcbiBpbmNsdWRlIC4uL2xpYi5ta1xuIGVsc2VcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby5oXG5pbmRleCAwNzg2MmI0NzA3NzdiZC4uYzBiNGEyYWIwNmM1YWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8uaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvLmhcbkBAIC0yNCw2ICYjNDM7MjQsMTUgQEBcbiBjb25zdCBjaGFyICp2ZmlvX3NlbGZ0ZXN0c19nZXRfYmRmKGludCAqYXJnYywgY2hhciAqYXJndltdKTtcbiBjaGFyICoqdmZpb19zZWxmdGVzdHNfZ2V0X2JkZnMoaW50ICphcmdjLCBjaGFyICphcmd2W10sIGludCAqbnJfYmRmcyk7XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFJldHVybiB0aGUgSU9NTVUgbW9kZSBzdHJpbmcgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVcbiYjNDM7ICogJFZGSU9fU0VMRlRFU1RTX0lPTU1VX01PREUuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnMgTlVMTCBpZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCwgYWxsb3dpbmdcbiYjNDM7ICogdGVzdHMgdG8gdXNlIHRoZWlyIGRlZmF1bHQgbW9kZS5cbiYjNDM7ICovXG4mIzQzO2NvbnN0IGNoYXIgKnZmaW9fc2VsZnRlc3RzX2dldF9pb21tdV9tb2RlKHZvaWQpO1xuJiM0MztcbiAvKlxuICAqIFJlc2VydmUgdmlydHVhbCBhZGRyZXNzIHNwYWNlIG9mIHNpemUgYXQgYW4gYWRkcmVzcyBzYXRpc2Z5aW5nXG4gICogKHZhZGRyICUgYWxpZ24pID09IG9mZnNldC5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vaW9tbXUuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby9pb21tdS5oXG5pbmRleCBlOWEzMzg2YTQ3MTkzYS4uYzliOWFiOTI5ZjFmOWIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vaW9tbXUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL2lvbW11LmhcbkBAIC0yNCwxMiAmIzQzOzI0LDI2IEBAIHN0cnVjdCBkbWFfcmVnaW9uIHtcbiBcdHU2NCBzaXplO1xuIH07XG4gXG4mIzQzO3N0cnVjdCBzcGFwcl90Y2Vfd2luZG93IHtcbiYjNDM7XHR1NjQgc3RhcnQ7XG4mIzQzO1x0dTY0IHNpemU7XG4mIzQzO1x0dTMyIHBhZ2Vfc2hpZnQ7XG4mIzQzO1x0Ym9vbCB2YWxpZDtcbiYjNDM7XHRib29sIGR5bmFtaWM7XG4mIzQzO1x0Ym9vbCByZW1vdmVfb25fY2xlYW51cDtcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IGlvbW11IHtcbiBcdGNvbnN0IHN0cnVjdCBpb21tdV9tb2RlICptb2RlO1xuIFx0aW50IGNvbnRhaW5lcl9mZDtcbiBcdGludCBpb21tdWZkO1xuIFx0dTMyIGlvYXNfaWQ7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGRtYV9yZWdpb25zO1xuJiM0MzsjaWZkZWYgX19wb3dlcnBjX19cbiYjNDM7XHRzdHJ1Y3Qgc3BhcHJfdGNlX3dpbmRvdyBkZWZhdWx0X3dpbmRvdztcbiYjNDM7XHRzdHJ1Y3Qgc3BhcHJfdGNlX3dpbmRvdyBkZHdfd2luZG93O1xuJiM0MztcdHN0cnVjdCBzcGFwcl90Y2Vfd2luZG93ICphY3RpdmVfd2luZG93O1xuJiM0MzsjZW5kaWZcbiB9O1xuIFxuIHN0cnVjdCBpb21tdSAqaW9tbXVfaW5pdChjb25zdCBjaGFyICppb21tdV9tb2RlKTtcbkBAIC02MSwyMiAmIzQzOzc1LDM0IEBAIGlvdmFfdCBpb21tdV9odmEyaW92YShzdHJ1Y3QgaW9tbXUgKmlvbW11LCB2b2lkICp2YWRkcik7XG4gXG4gc3RydWN0IGlvbW11X2lvdmFfcmFuZ2UgKmlvbW11X2lvdmFfcmFuZ2VzKHN0cnVjdCBpb21tdSAqaW9tbXUsIHUzMiAqbnJhbmdlcyk7XG4gXG4mIzQzO2ludCBpb21tdV9wcmVwYXJlX2RtYV93aW5kb3coc3RydWN0IGlvbW11ICppb21tdSwgdTY0IG1pbl9zaXplLFxuJiM0MztcdFx0XHQgICAgIHU2NCBwYWdlX3NpemUsIGJvb2wgZm9yY2VfZHluYW1pYyk7XG4mIzQzO2Jvb2wgaW9tbXVfc3VwcG9ydHNfdW5tYXBfYWxsKHN0cnVjdCBpb21tdSAqaW9tbXUpO1xuJiM0MztcbiAjZGVmaW5lIE1PREVfVkZJT19UWVBFMV9JT01NVSBcJiMzNDt2ZmlvX3R5cGUxX2lvbW11XCYjMzQ7XG4gI2RlZmluZSBNT0RFX1ZGSU9fVFlQRTFWMl9JT01NVSBcJiMzNDt2ZmlvX3R5cGUxdjJfaW9tbXVcJiMzNDtcbiAjZGVmaW5lIE1PREVfSU9NTVVGRF9DT01QQVRfVFlQRTEgXCYjMzQ7aW9tbXVmZF9jb21wYXRfdHlwZTFcJiMzNDtcbiAjZGVmaW5lIE1PREVfSU9NTVVGRF9DT01QQVRfVFlQRTFWMiBcJiMzNDtpb21tdWZkX2NvbXBhdF90eXBlMXYyXCYjMzQ7XG4gI2RlZmluZSBNT0RFX0lPTU1VRkQgXCYjMzQ7aW9tbXVmZFwmIzM0O1xuJiM0MzsjaWZkZWYgX19wb3dlcnBjX19cbiYjNDM7I2RlZmluZSBNT0RFX1ZGSU9fU1BBUFJfVENFX1YyX0lPTU1VIFwmIzM0O3ZmaW9fc3BhcHJfdGNlX3YyX2lvbW11XCYjMzQ7XG4mIzQzOyNlbmRpZlxuIFxuIC8qXG4gICogR2VuZXJhdG9yIGZvciBWRklPIHNlbGZ0ZXN0cyBmaXh0dXJlIHZhcmlhbnRzIHRoYXQgcmVwbGljYXRlIGFjcm9zcyBhbGxcbiAgKiBwb3NzaWJsZSBJT01NVSBtb2Rlcy4gVGVzdHMgbXVzdCBkZWZpbmUgRklYVFVSRV9WQVJJQU5UX0FERF9JT01NVV9NT0RFKClcbiAgKiB3aGljaCBzaG91bGQgdGhlbiB1c2UgRklYVFVSRV9WQVJJQU5UX0FERCgpIHRvIGNyZWF0ZSB0aGUgdmFyaWFudC5cbiAgKi9cbiYjNDM7I2lmZGVmIF9fcG93ZXJwY19fXG4mIzQzOyNkZWZpbmUgRklYVFVSRV9WQVJJQU5UX0FERF9BTExfSU9NTVVfTU9ERVMoLi4uKSBcXFxuJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREUodmZpb19zcGFwcl90Y2VfdjJfaW9tbXUsICMjX19WQV9BUkdTX18pXG4mIzQzOyNlbHNlXG4gI2RlZmluZSBGSVhUVVJFX1ZBUklBTlRfQUREX0FMTF9JT01NVV9NT0RFUyguLi4pIFxcXG4gRklYVFVSRV9WQVJJQU5UX0FERF9JT01NVV9NT0RFKHZmaW9fdHlwZTFfaW9tbXUsICMjX19WQV9BUkdTX18pOyBcXFxuIEZJWFRVUkVfVkFSSUFOVF9BRERfSU9NTVVfTU9ERSh2ZmlvX3R5cGUxdjJfaW9tbXUsICMjX19WQV9BUkdTX18pOyBcXFxuIEZJWFRVUkVfVkFSSUFOVF9BRERfSU9NTVVfTU9ERShpb21tdWZkX2NvbXBhdF90eXBlMSwgIyNfX1ZBX0FSR1NfXyk7IFxcXG4gRklYVFVSRV9WQVJJQU5UX0FERF9JT01NVV9NT0RFKGlvbW11ZmRfY29tcGF0X3R5cGUxdjIsICMjX19WQV9BUkdTX18pOyBcXFxuIEZJWFRVUkVfVkFSSUFOVF9BRERfSU9NTVVfTU9ERShpb21tdWZkLCAjI19fVkFfQVJHU19fKVxuJiM0MzsjZW5kaWZcbiBcbiAjZW5kaWYgLyogU0VMRlRFU1RTX1ZGSU9fTElCX0lOQ0xVREVfTElCVkZJT19JT01NVV9IICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW9tbXUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2lvbW11LmNcbmluZGV4IDAzNWRhYzA2OWQ2MDE2Li4xOWQxOWJiNDVhMTRiNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2lvbW11LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2lvbW11LmNcbkBAIC0xNiw5ICYjNDM7MTYsMTEgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdmZpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW9tbXVmZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpemVzLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDsuLi8uLi8uLi9rc2VsZnRlc3QuaFwmIzM0O1xuICNpbmNsdWRlIFx1MDAzY2xpYnZmaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW1pdHMuaFx1MDAzZVxuIFxuIGNvbnN0IGNoYXIgKmRlZmF1bHRfaW9tbXVfbW9kZSA9IE1PREVfSU9NTVVGRDtcbiBcbkBAIC00Nyw2ICYjNDM7NDksMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpb21tdV9tb2RlIGlvbW11X21vZGVzW10gPSB7XG4gXHR7XG4gXHRcdC5uYW1lID0gTU9ERV9JT01NVUZELFxuIFx0fSxcbiYjNDM7I2lmZGVmIF9fcG93ZXJwY19fXG4mIzQzO1x0e1xuJiM0MztcdFx0Lm5hbWUgPSBNT0RFX1ZGSU9fU1BBUFJfVENFX1YyX0lPTU1VLFxuJiM0MztcdFx0LmNvbnRhaW5lcl9wYXRoID0gXCYjMzQ7L2Rldi92ZmlvL3ZmaW9cJiMzNDssXG4mIzQzO1x0XHQuaW9tbXVfdHlwZSA9IFZGSU9fU1BBUFJfVENFX3YyX0lPTU1VLFxuJiM0MztcdH0sXG4mIzQzOyNlbmRpZlxuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBpb21tdV9tb2RlICpsb29rdXBfaW9tbXVfbW9kZShjb25zdCBjaGFyICppb21tdV9tb2RlKVxuQEAgLTg2LDYgJiM0Mzs5NSwyMzMgQEAgaW50IF9faW9tbXVfaHZhMmlvdmEoc3RydWN0IGlvbW11ICppb21tdSwgdm9pZCAqdmFkZHIsIGlvdmFfdCAqaW92YSlcbiBcdHJldHVybiAtRU5PRU5UO1xuIH1cbiBcbiYjNDM7I2lmZGVmIF9fcG93ZXJwY19fXG4mIzQzO3N0YXRpYyBib29sIGlvbW11X2lzX3NwYXByX3RjZV92MihzdHJ1Y3QgaW9tbXUgKmlvbW11KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuICEhKGlvbW11LVx1MDAzZW1vZGUtXHUwMDNlaW9tbXVfdHlwZSA9PSBWRklPX1NQQVBSX1RDRV92Ml9JT01NVSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB1MzIgcGFnZV9zaXplX3RvX3NoaWZ0KHU2NCBwYWdlX3NpemUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gX19idWlsdGluX2N0emxsKHBhZ2Vfc2l6ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgc3BhcHJfdGNlX3JlYWRfZGVmYXVsdF93aW5kb3coc3RydWN0IGlvbW11ICppb21tdSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB2ZmlvX2lvbW11X3NwYXByX3RjZV9pbmZvIGluZm8gPSB7XG4mIzQzO1x0XHQuYXJnc3ogPSBzaXplb2YoaW5mbyksXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0aWYgKGlvbW11LVx1MDAzZWRlZmF1bHRfd2luZG93LnZhbGlkKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChpb2N0bChpb21tdS1cdTAwM2Vjb250YWluZXJfZmQsIFZGSU9fSU9NTVVfU1BBUFJfVENFX0dFVF9JTkZPLCBcdTAwMjZpbmZvKSlcbiYjNDM7XHRcdHJldHVybiAtZXJybm87XG4mIzQzO1xuJiM0MztcdGlvbW11LVx1MDAzZWRlZmF1bHRfd2luZG93LnN0YXJ0ID0gaW5mby5kbWEzMl93aW5kb3dfc3RhcnQ7XG4mIzQzO1x0aW9tbXUtXHUwMDNlZGVmYXVsdF93aW5kb3cuc2l6ZSA9IGluZm8uZG1hMzJfd2luZG93X3NpemU7XG4mIzQzO1x0aW9tbXUtXHUwMDNlZGVmYXVsdF93aW5kb3cucGFnZV9zaGlmdCA9IHBhZ2Vfc2l6ZV90b19zaGlmdChnZXRwYWdlc2l6ZSgpKTtcbiYjNDM7XHRpb21tdS1cdTAwM2VkZWZhdWx0X3dpbmRvdy52YWxpZCA9IHRydWU7XG4mIzQzO1x0aW9tbXUtXHUwMDNlZGVmYXVsdF93aW5kb3cuZHluYW1pYyA9IGZhbHNlO1xuJiM0MztcdGlvbW11LVx1MDAzZWRlZmF1bHRfd2luZG93LnJlbW92ZV9vbl9jbGVhbnVwID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHNwYXByX3RjZV9jcmVhdGVfZGR3KHN0cnVjdCBpb21tdSAqaW9tbXUsIHU2NCBtaW5fc2l6ZSwgdTMyIHBhZ2Vfc2hpZnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdmZpb19pb21tdV9zcGFwcl90Y2VfY3JlYXRlIGNyZWF0ZSA9IHtcbiYjNDM7XHRcdC5hcmdzeiA9IHNpemVvZihjcmVhdGUpLFxuJiM0MztcdFx0LnBhZ2Vfc2hpZnQgPSBwYWdlX3NoaWZ0LFxuJiM0MztcdFx0LmxldmVscyA9IDEsXG4mIzQzO1x0XHQud2luZG93X3NpemUgPSBtaW5fc2l6ZSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRpZiAoaW9jdGwoaW9tbXUtXHUwMDNlY29udGFpbmVyX2ZkLCBWRklPX0lPTU1VX1NQQVBSX1RDRV9DUkVBVEUsIFx1MDAyNmNyZWF0ZSkpXG4mIzQzO1x0XHRyZXR1cm4gLWVycm5vO1xuJiM0MztcbiYjNDM7XHRpb21tdS1cdTAwM2VkZHdfd2luZG93LnN0YXJ0ID0gY3JlYXRlLnN0YXJ0X2FkZHI7XG4mIzQzO1x0aW9tbXUtXHUwMDNlZGR3X3dpbmRvdy5zaXplID0gY3JlYXRlLndpbmRvd19zaXplO1xuJiM0MztcdGlvbW11LVx1MDAzZWRkd193aW5kb3cucGFnZV9zaGlmdCA9IHBhZ2Vfc2hpZnQ7XG4mIzQzO1x0aW9tbXUtXHUwMDNlZGR3X3dpbmRvdy52YWxpZCA9IHRydWU7XG4mIzQzO1x0aW9tbXUtXHUwMDNlZGR3X3dpbmRvdy5keW5hbWljID0gdHJ1ZTtcbiYjNDM7XHRpb21tdS1cdTAwM2VkZHdfd2luZG93LnJlbW92ZV9vbl9jbGVhbnVwID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgc3BhcHJfdGNlX3JlbW92ZV93aW5kb3coc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IHNwYXByX3RjZV93aW5kb3cgKndpbmRvdylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB2ZmlvX2lvbW11X3NwYXByX3RjZV9yZW1vdmUgcmVtb3ZlID0ge1xuJiM0MztcdFx0LmFyZ3N6ID0gc2l6ZW9mKHJlbW92ZSksXG4mIzQzO1x0XHQuc3RhcnRfYWRkciA9IHdpbmRvdy1cdTAwM2VzdGFydCxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRpZiAoIXdpbmRvdy1cdTAwM2V2YWxpZCB8fCAhd2luZG93LVx1MDAzZXJlbW92ZV9vbl9jbGVhbnVwKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChpb2N0bChpb21tdS1cdTAwM2Vjb250YWluZXJfZmQsIFZGSU9fSU9NTVVfU1BBUFJfVENFX1JFTU9WRSwgXHUwMDI2cmVtb3ZlKSlcbiYjNDM7XHRcdHJldHVybiAtZXJybm87XG4mIzQzO1xuJiM0MztcdHdpbmRvdy1cdTAwM2V2YWxpZCA9IGZhbHNlO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBzcGFwcl90Y2Vfd2luZG93X3NhdGlzZmllcyhzdHJ1Y3Qgc3BhcHJfdGNlX3dpbmRvdyAqd2luZG93LFxuJiM0MztcdFx0XHRcdCAgICAgICB1NjQgbWluX3NpemUsIHUzMiBwYWdlX3NoaWZ0LFxuJiM0MztcdFx0XHRcdCAgICAgICBib29sIHJlcXVpcmVfZHluYW1pYylcbiYjNDM7e1xuJiM0MztcdGlmICghd2luZG93IHx8ICF3aW5kb3ctXHUwMDNldmFsaWQpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmIChyZXF1aXJlX2R5bmFtaWMgXHUwMDI2XHUwMDI2ICF3aW5kb3ctXHUwMDNlZHluYW1pYylcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHdpbmRvdy1cdTAwM2VzaXplIFx1MDAzYyBtaW5fc2l6ZSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHdpbmRvdy1cdTAwM2VwYWdlX3NoaWZ0ICE9IHBhZ2Vfc2hpZnQpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGlvbW11X2lvdmFfcmFuZ2UgKnNwYXByX3RjZV9pb3ZhX3JhbmdlcyhzdHJ1Y3QgaW9tbXUgKmlvbW11LCB1MzIgKm5yYW5nZXMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW9tbXVfaW92YV9yYW5nZSAqcmFuZ2VzO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghaW9tbXUtXHUwMDNlYWN0aXZlX3dpbmRvdykge1xuJiM0MztcdFx0cmV0ID0gaW9tbXVfcHJlcGFyZV9kbWFfd2luZG93KGlvbW11LCBTWl8xRywgZ2V0cGFnZXNpemUoKSwgZmFsc2UpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyYW5nZXMgPSBjYWxsb2MoMSwgc2l6ZW9mKCpyYW5nZXMpKTtcbiYjNDM7XHRWRklPX0FTU0VSVF9OT1RfTlVMTChyYW5nZXMpO1xuJiM0MztcbiYjNDM7XHRyYW5nZXNbMF0uc3RhcnQgPSBpb21tdS1cdTAwM2VhY3RpdmVfd2luZG93LVx1MDAzZXN0YXJ0O1xuJiM0MztcdHJhbmdlc1swXS5sYXN0ID0gaW9tbXUtXHUwMDNlYWN0aXZlX3dpbmRvdy1cdTAwM2VzdGFydCAmIzQzOyBpb21tdS1cdTAwM2VhY3RpdmVfd2luZG93LVx1MDAzZXNpemUgLSAxO1xuJiM0MztcbiYjNDM7XHQqbnJhbmdlcyA9IDE7XG4mIzQzO1x0cmV0dXJuIHJhbmdlcztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgc3BhcHJfdGNlX2lvdmFfaW5zaWRlX3dpbmRvdyhzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNwYXByX3RjZV93aW5kb3cgKndpbmRvdyA9IGlvbW11LVx1MDAzZWFjdGl2ZV93aW5kb3c7XG4mIzQzO1xuJiM0MztcdGlmICghd2luZG93IHx8ICF3aW5kb3ctXHUwMDNldmFsaWQpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmIChyZWdpb24tXHUwMDNlaW92YSBcdTAwM2Mgd2luZG93LVx1MDAzZXN0YXJ0KVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpZiAocmVnaW9uLVx1MDAzZWlvdmEgJiM0MzsgcmVnaW9uLVx1MDAzZXNpemUgXHUwMDNlIHdpbmRvdy1cdTAwM2VzdGFydCAmIzQzOyB3aW5kb3ctXHUwMDNlc2l6ZSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgc3BhcHJfcmVnaXN0ZXJfbWVtb3J5KHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdmZpb19pb21tdV9zcGFwcl9yZWdpc3Rlcl9tZW1vcnkgYXJncyA9IHtcbiYjNDM7XHRcdC5hcmdzeiA9IHNpemVvZihhcmdzKSxcbiYjNDM7XHRcdC52YWRkciA9ICh1NjQpcmVnaW9uLVx1MDAzZXZhZGRyLFxuJiM0MztcdFx0LnNpemUgPSByZWdpb24tXHUwMDNlc2l6ZSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRpZiAoaW9jdGwoaW9tbXUtXHUwMDNlY29udGFpbmVyX2ZkLCBWRklPX0lPTU1VX1NQQVBSX1JFR0lTVEVSX01FTU9SWSwgXHUwMDI2YXJncykpXG4mIzQzO1x0XHRyZXR1cm4gLWVycm5vO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBzcGFwcl91bnJlZ2lzdGVyX21lbW9yeShzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHZmaW9faW9tbXVfc3BhcHJfcmVnaXN0ZXJfbWVtb3J5IGFyZ3MgPSB7XG4mIzQzO1x0XHQuYXJnc3ogPSBzaXplb2YoYXJncyksXG4mIzQzO1x0XHQudmFkZHIgPSAodTY0KXJlZ2lvbi1cdTAwM2V2YWRkcixcbiYjNDM7XHRcdC5zaXplID0gcmVnaW9uLVx1MDAzZXNpemUsXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0aWYgKGlvY3RsKGlvbW11LVx1MDAzZWNvbnRhaW5lcl9mZCwgVkZJT19JT01NVV9TUEFQUl9VTlJFR0lTVEVSX01FTU9SWSwgXHUwMDI2YXJncykpXG4mIzQzO1x0XHRyZXR1cm4gLWVycm5vO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IGlvbW11X3ByZXBhcmVfZG1hX3dpbmRvdyhzdHJ1Y3QgaW9tbXUgKmlvbW11LCB1NjQgbWluX3NpemUsXG4mIzQzO1x0XHRcdCAgICAgdTY0IHBhZ2Vfc2l6ZSwgYm9vbCBmb3JjZV9keW5hbWljKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHBhZ2Vfc2hpZnQ7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFpb21tdV9pc19zcGFwcl90Y2VfdjIoaW9tbXUpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmICghcGFnZV9zaXplKVxuJiM0MztcdFx0cGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTtcbiYjNDM7XG4mIzQzO1x0cGFnZV9zaGlmdCA9IHBhZ2Vfc2l6ZV90b19zaGlmdChwYWdlX3NpemUpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBzcGFwcl90Y2VfcmVhZF9kZWZhdWx0X3dpbmRvdyhpb21tdSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTm9ybWFsIG1hcHBpbmcgcGF0aDpcbiYjNDM7XHQgKiB1c2UgZGVmYXVsdCB3aW5kb3cgd2hlbiBpdCBzYXRpc2ZpZXMgdGhlIHJlcXVlc3QuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFmb3JjZV9keW5hbWljIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBzcGFwcl90Y2Vfd2luZG93X3NhdGlzZmllcyhcdTAwMjZpb21tdS1cdTAwM2VkZWZhdWx0X3dpbmRvdyxcbiYjNDM7XHRcdFx0XHQgICAgICAgbWluX3NpemUsIHBhZ2Vfc2hpZnQsIGZhbHNlKSkge1xuJiM0MztcdFx0aW9tbXUtXHUwMDNlYWN0aXZlX3dpbmRvdyA9IFx1MDAyNmlvbW11LVx1MDAzZWRlZmF1bHRfd2luZG93O1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIER5bmFtaWMgcGF0aDpcbiYjNDM7XHQgKiB1c2UgZXhpc3RpbmcgRERXIGlmIGl0IGFscmVhZHkgc2F0aXNmaWVzIHRoZSByZXF1ZXN0LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChzcGFwcl90Y2Vfd2luZG93X3NhdGlzZmllcyhcdTAwMjZpb21tdS1cdTAwM2VkZHdfd2luZG93LFxuJiM0MztcdFx0XHRcdCAgICAgICBtaW5fc2l6ZSwgcGFnZV9zaGlmdCwgdHJ1ZSkpIHtcbiYjNDM7XHRcdGlvbW11LVx1MDAzZWFjdGl2ZV93aW5kb3cgPSBcdTAwMjZpb21tdS1cdTAwM2VkZHdfd2luZG93O1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE5laXRoZXIgZGVmYXVsdCBub3IgRERXIGlzIHN1ZmZpY2llbnQuXG4mIzQzO1x0ICogUmVtb3ZlIG9ubHkgdGhlIHNlbGZ0ZXN0LWNyZWF0ZWQgRERXLCB0aGVuIGNyZWF0ZSBhIG5ldyBERFcuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0ID0gc3BhcHJfdGNlX3JlbW92ZV93aW5kb3coaW9tbXUsIFx1MDAyNmlvbW11LVx1MDAzZWRkd193aW5kb3cpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBzcGFwcl90Y2VfY3JlYXRlX2Rkdyhpb21tdSwgbWluX3NpemUsIHBhZ2Vfc2hpZnQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpb21tdS1cdTAwM2VhY3RpdmVfd2luZG93ID0gXHUwMDI2aW9tbXUtXHUwMDNlZGR3X3dpbmRvdztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MzsjZWxzZVxuJiM0MztpbnQgaW9tbXVfcHJlcGFyZV9kbWFfd2luZG93KHN0cnVjdCBpb21tdSAqaW9tbXUsIHU2NCBtaW5fc2l6ZSxcbiYjNDM7XHRcdFx0ICAgICB1NjQgcGFnZV9zaXplLCBib29sIGZvcmNlX2R5bmFtaWMpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzO2Jvb2wgaW9tbXVfc3VwcG9ydHNfdW5tYXBfYWxsKHN0cnVjdCBpb21tdSAqaW9tbXUpXG4mIzQzO3tcbiYjNDM7I2lmZGVmIF9fcG93ZXJwY19fXG4mIzQzO1x0aWYgKGlvbW11X2lzX3NwYXByX3RjZV92Mihpb21tdSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzOyNlbmRpZlxuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuIGlvdmFfdCBpb21tdV9odmEyaW92YShzdHJ1Y3QgaW9tbXUgKmlvbW11LCB2b2lkICp2YWRkcilcbiB7XG4gXHRpb3ZhX3QgaW92YTtcbkBAIC0xMDYsOSAmIzQzOzM0MiwyNyBAQCBzdGF0aWMgaW50IHZmaW9faW9tbXVfbWFwKHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24pXG4gXHRcdC5pb3ZhID0gcmVnaW9uLVx1MDAzZWlvdmEsXG4gXHRcdC5zaXplID0gcmVnaW9uLVx1MDAzZXNpemUsXG4gXHR9O1xuJiM0MztcdGludCByZXQ7XG4gXG4tXHRpZiAoaW9jdGwoaW9tbXUtXHUwMDNlY29udGFpbmVyX2ZkLCBWRklPX0lPTU1VX01BUF9ETUEsIFx1MDAyNmFyZ3MpKVxuJiM0MzsjaWZkZWYgX19wb3dlcnBjX19cbiYjNDM7XHRpZiAoaW9tbXVfaXNfc3BhcHJfdGNlX3YyKGlvbW11KSkge1xuJiM0MztcdFx0aWYgKCFzcGFwcl90Y2VfaW92YV9pbnNpZGVfd2luZG93KGlvbW11LCByZWdpb24pKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBzcGFwcl9yZWdpc3Rlcl9tZW1vcnkoaW9tbXUsIHJlZ2lvbik7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MztcdHJldCA9IGlvY3RsKGlvbW11LVx1MDAzZWNvbnRhaW5lcl9mZCwgVkZJT19JT01NVV9NQVBfRE1BLCBcdTAwMjZhcmdzKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzOyNpZmRlZiBfX3Bvd2VycGNfX1xuJiM0MztcdFx0aWYgKGlvbW11X2lzX3NwYXByX3RjZV92Mihpb21tdSkpXG4mIzQzO1x0XHRcdHNwYXByX3VucmVnaXN0ZXJfbWVtb3J5KGlvbW11LCByZWdpb24pO1xuJiM0MzsjZW5kaWZcbiBcdFx0cmV0dXJuIC1lcnJubztcbiYjNDM7XHR9XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMTcwLDggJiM0Mzs0MjQsMTggQEAgc3RhdGljIGludCBfX3ZmaW9faW9tbXVfdW5tYXAoaW50IGZkLCB1NjQgaW92YSwgdTY0IHNpemUsIHUzMiBmbGFncywgdTY0ICp1bm1hcHBcbiBzdGF0aWMgaW50IHZmaW9faW9tbXVfdW5tYXAoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbixcbiBcdFx0XHQgICAgdTY0ICp1bm1hcHBlZClcbiB7XG4tXHRyZXR1cm4gX192ZmlvX2lvbW11X3VubWFwKGlvbW11LVx1MDAzZWNvbnRhaW5lcl9mZCwgcmVnaW9uLVx1MDAzZWlvdmEsXG4tXHRcdFx0XHQgIHJlZ2lvbi1cdTAwM2VzaXplLCAwLCB1bm1hcHBlZCk7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX192ZmlvX2lvbW11X3VubWFwKGlvbW11LVx1MDAzZWNvbnRhaW5lcl9mZCwgcmVnaW9uLVx1MDAzZWlvdmEsXG4mIzQzO1x0XHRcdFx0IHJlZ2lvbi1cdTAwM2VzaXplLCAwLCB1bm1hcHBlZCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzOyNpZmRlZiBfX3Bvd2VycGNfX1xuJiM0MztcdGlmIChpb21tdV9pc19zcGFwcl90Y2VfdjIoaW9tbXUpKVxuJiM0MztcdFx0cmV0ID0gc3BhcHJfdW5yZWdpc3Rlcl9tZW1vcnkoaW9tbXUsIHJlZ2lvbik7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW50IF9faW9tbXVmZF91bm1hcChpbnQgZmQsIHU2NCBpb3ZhLCB1NjQgbGVuZ3RoLCB1MzIgaW9hc19pZCwgdTY0ICp1bm1hcHBlZClcbkBAIC0zMTcsNiAmIzQzOzU4MSwxMSBAQCBzdGF0aWMgc3RydWN0IGlvbW11X2lvdmFfcmFuZ2UgKnZmaW9faW9tbXVfaW92YV9yYW5nZXMoc3RydWN0IGlvbW11ICppb21tdSxcbiBcdHN0cnVjdCB2ZmlvX2luZm9fY2FwX2hlYWRlciAqaGRyO1xuIFx0c3RydWN0IGlvbW11X2lvdmFfcmFuZ2UgKnJhbmdlcyA9IE5VTEw7XG4gXG4mIzQzOyNpZmRlZiBfX3Bvd2VycGNfX1xuJiM0MztcdGlmIChpb21tdV9pc19zcGFwcl90Y2VfdjIoaW9tbXUpKVxuJiM0MztcdFx0cmV0dXJuIHNwYXByX3RjZV9pb3ZhX3Jhbmdlcyhpb21tdSwgbnJhbmdlcyk7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBcdGluZm8gPSB2ZmlvX2lvbW11X2dldF9pbmZvKGlvbW11LVx1MDAzZWNvbnRhaW5lcl9mZCk7XG4gXHRoZHIgPSB2ZmlvX2lvbW11X2luZm9fY2FwX2hkcihpbmZvLCBWRklPX0lPTU1VX1RZUEUxX0lORk9fQ0FQX0lPVkFfUkFOR0UpO1xuIFx0VkZJT19BU1NFUlRfTk9UX05VTEwoaGRyKTtcbkBAIC00NTUsNiAmIzQzOzcyNCwxMSBAQCBzdHJ1Y3QgaW9tbXUgKmlvbW11X2luaXQoY29uc3QgY2hhciAqaW9tbXVfbW9kZSlcbiBcbiB2b2lkIGlvbW11X2NsZWFudXAoc3RydWN0IGlvbW11ICppb21tdSlcbiB7XG4mIzQzOyNpZmRlZiBfX3Bvd2VycGNfX1xuJiM0MztcdGlmIChpb21tdV9pc19zcGFwcl90Y2VfdjIoaW9tbXUpKVxuJiM0MztcdFx0c3BhcHJfdGNlX3JlbW92ZV93aW5kb3coaW9tbXUsIFx1MDAyNmlvbW11LVx1MDAzZWRkd193aW5kb3cpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gXHRpZiAoaW9tbXUtXHUwMDNlaW9tbXVmZClcbiBcdFx0VkZJT19BU1NFUlRfRVEoY2xvc2UoaW9tbXUtXHUwMDNlaW9tbXVmZCksIDApO1xuIFx0ZWxzZVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8uY1xuaW5kZXggM2EzZDFlZDYzNWMxZGYuLjEyZjczMTk2M2IwNThhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLmNcbkBAIC0xMDEsMyAmIzQzOzEwMSw0MCBAQCB2b2lkICptbWFwX3Jlc2VydmUoc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbiwgc2l6ZV90IG9mZnNldClcbiBcbiBcdHJldHVybiBtYXBfYWxpZ247XG4gfVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKmdldF9pb21tdV9tb2RlX2Vudih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgY2hhciAqbW9kZTtcbiYjNDM7XHRzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHZhbGlkX21vZGVzW10gPSB7XG4mIzQzO1x0XHRNT0RFX1ZGSU9fVFlQRTFfSU9NTVUsXG4mIzQzO1x0XHRNT0RFX1ZGSU9fVFlQRTFWMl9JT01NVSxcbiYjNDM7XHRcdE1PREVfSU9NTVVGRF9DT01QQVRfVFlQRTEsXG4mIzQzO1x0XHRNT0RFX0lPTU1VRkRfQ09NUEFUX1RZUEUxVjIsXG4mIzQzO1x0XHRNT0RFX0lPTU1VRkQsXG4mIzQzOyNpZmRlZiBfX3Bvd2VycGNfX1xuJiM0MztcdFx0TU9ERV9WRklPX1NQQVBSX1RDRV9WMl9JT01NVSxcbiYjNDM7I2VuZGlmXG4mIzQzO1x0fTtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0bW9kZSA9IGdldGVudihcJiMzNDtWRklPX1NFTEZURVNUU19JT01NVV9NT0RFXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIW1vZGUpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh2YWxpZF9tb2Rlcyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAoIXN0cmNtcChtb2RlLCB2YWxpZF9tb2Rlc1tpXSkpXG4mIzQzO1x0XHRcdHJldHVybiBtb2RlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZnByaW50ZihzdGRlcnIsIFwmIzM0O0ludmFsaWQgVkZJT19TRUxGVEVTVFNfSU9NTVVfTU9ERTogJXNcXG5cJiMzNDssIG1vZGUpO1xuJiM0MztcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtWYWxpZCBtb2RlcyBhcmU6XFxuXCYjMzQ7KTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHZhbGlkX21vZGVzKTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ICAlc1xcblwmIzM0OywgdmFsaWRfbW9kZXNbaV0pO1xuJiM0MztcdGV4aXQoS1NGVF9TS0lQKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3QgY2hhciAqdmZpb19zZWxmdGVzdHNfZ2V0X2lvbW11X21vZGUodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBnZXRfaW9tbXVfbW9kZV9lbnYoKTtcbiYjNDM7fVxuJiM0MztcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL3ZmaW9fZG1hX21hcHBpbmdfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX2RtYV9tYXBwaW5nX3Rlc3QuY1xuaW5kZXggN2QwZGU4Yzc5ZGUxM2YuLmNkMmQzMjc2YTQ2YzQ2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX2RtYV9tYXBwaW5nX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX2RtYV9tYXBwaW5nX3Rlc3QuY1xuQEAgLTEsNSAmIzQzOzEsNiBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4gXG5AQCAtMTE5LDggJiM0MzsxMjAsMTkgQEAgRklYVFVSRV9WQVJJQU5UX0FERF9BTExfSU9NTVVfTU9ERVMoYW5vbnltb3VzX2h1Z2V0bGJfMWdiLCBTWl8xRywgTUFQX0hVR0VUTEIgfFxuIFxuIEZJWFRVUkVfU0VUVVAodmZpb19kbWFfbWFwcGluZ190ZXN0KVxuIHtcbiYjNDM7XHRjb25zdCB1NjQgcGFnZV9zaXplID0gdmFyaWFudC1cdTAwM2VzaXplID86IGdldHBhZ2VzaXplKCk7XG4mIzQzO1x0Y29uc3QgYm9vbCBmb3JjZV9keW5hbWljID0gISF2YXJpYW50LVx1MDAzZXNpemU7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4gXHRzZWxmLVx1MDAzZWlvbW11ID0gaW9tbXVfaW5pdCh2YXJpYW50LVx1MDAzZWlvbW11X21vZGUpO1xuIFx0c2VsZi1cdTAwM2VkZXZpY2UgPSB2ZmlvX3BjaV9kZXZpY2VfaW5pdChkZXZpY2VfYmRmLCBzZWxmLVx1MDAzZWlvbW11KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gaW9tbXVfcHJlcGFyZV9kbWFfd2luZG93KHNlbGYtXHUwMDNlaW9tbXUsIHBhZ2Vfc2l6ZSwgcGFnZV9zaXplLFxuJiM0MztcdFx0XHRcdCAgICAgICBmb3JjZV9keW5hbWljKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O0RNQSB3aW5kb3cgdW5hdmFpbGFibGU6ICVzICglZClcXG5cJiMzNDssXG4mIzQzO1x0XHQgICAgIHN0cmVycm9yKC1yZXQpLCAtcmV0KTtcbiYjNDM7XG4gXHRzZWxmLVx1MDAzZWlvdmFfYWxsb2NhdG9yID0gaW92YV9hbGxvY2F0b3JfaW5pdChzZWxmLVx1MDAzZWlvbW11KTtcbiB9XG4gXG5AQCAtMjI3LDYgJiM0MzsyMzksNyBAQCBGSVhUVVJFX1NFVFVQKHZmaW9fZG1hX21hcF9saW1pdF90ZXN0KVxuIFx0dTY0IHJlZ2lvbl9zaXplID0gZ2V0cGFnZXNpemUoKTtcbiBcdGlvdmFfdCBsYXN0X2lvdmE7XG4gXHR1MzIgbnJhbmdlcztcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0LypcbiBcdCAqIE92ZXItYWxsb2NhdGUgbW1hcCBieSBkb3VibGUgdGhlIHNpemUgdG8gcHJvdmlkZSBlbm91Z2ggYmFja2luZyB2YWRkclxuQEAgLTIzNiw2ICYjNDM7MjQ5LDEzIEBAIEZJWFRVUkVfU0VUVVAodmZpb19kbWFfbWFwX2xpbWl0X3Rlc3QpXG4gXG4gXHRzZWxmLVx1MDAzZWlvbW11ID0gaW9tbXVfaW5pdCh2YXJpYW50LVx1MDAzZWlvbW11X21vZGUpO1xuIFx0c2VsZi1cdTAwM2VkZXZpY2UgPSB2ZmlvX3BjaV9kZXZpY2VfaW5pdChkZXZpY2VfYmRmLCBzZWxmLVx1MDAzZWlvbW11KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gaW9tbXVfcHJlcGFyZV9kbWFfd2luZG93KHNlbGYtXHUwMDNlaW9tbXUsIHJlZ2lvbl9zaXplLCByZWdpb25fc2l6ZSxcbiYjNDM7XHRcdFx0XHQgICAgICAgZmFsc2UpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRTS0lQKHJldHVybiwgXCYjMzQ7RE1BIHdpbmRvdyB1bmF2YWlsYWJsZTogJXMgKCVkKVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgICAgc3RyZXJyb3IoLXJldCksIC1yZXQpO1xuJiM0MztcbiBcdHJlZ2lvbi1cdTAwM2V2YWRkciA9IG1tYXAoTlVMTCwgc2VsZi1cdTAwM2VtbWFwX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4gXHRcdFx0ICAgICBNQVBfQU5PTllNT1VTIHwgTUFQX1BSSVZBVEUsIC0xLCAwKTtcbiBcdEFTU0VSVF9ORShyZWdpb24tXHUwMDNldmFkZHIsIE1BUF9GQUlMRUQpO1xuQEAgLTI3Nyw2ICYjNDM7Mjk3LDggQEAgVEVTVF9GKHZmaW9fZG1hX21hcF9saW1pdF90ZXN0LCB1bm1hcF9hbGwpXG4gXHR1NjQgdW5tYXBwZWQ7XG4gXHRpbnQgcmM7XG4gXG4mIzQzO1x0aWYgKCFpb21tdV9zdXBwb3J0c191bm1hcF9hbGwoc2VsZi1cdTAwM2Vpb21tdSkpXG4mIzQzO1x0XHRTS0lQKHJldHVybiwgXCYjMzQ7SU9NTVUgYmFja2VuZCBkb2VzIG5vdCBzdXBwb3J0IHVubWFwLWFsbFxcblwmIzM0Oyk7XG4gXHRpb21tdV9tYXAoc2VsZi1cdTAwM2Vpb21tdSwgcmVnaW9uKTtcbiBcdEFTU0VSVF9FUShyZWdpb24tXHUwMDNlaW92YSwgdG9faW92YShzZWxmLVx1MDAzZWRldmljZSwgcmVnaW9uLVx1MDAzZXZhZGRyKSk7XG4gXG5AQCAtMjk0LDEwICYjNDM7MzE2LDE4IEBAIFRFU1RfRih2ZmlvX2RtYV9tYXBfbGltaXRfdGVzdCwgb3ZlcmZsb3cpXG4gXHRyZWdpb24tXHUwMDNlc2l6ZSA9IHNlbGYtXHUwMDNlbW1hcF9zaXplO1xuIFxuIFx0cmMgPSBfX2lvbW11X21hcChzZWxmLVx1MDAzZWlvbW11LCByZWdpb24pO1xuJiM0MzsjaWZkZWYgX19wb3dlcnBjX19cbiYjNDM7XHRBU1NFUlRfRVEocmMsIC1FTlhJTyk7XG4mIzQzOyNlbHNlXG4gXHRBU1NFUlRfRVEocmMsIC1FT1ZFUkZMT1cpO1xuJiM0MzsjZW5kaWZcbiBcbiBcdHJjID0gX19pb21tdV91bm1hcChzZWxmLVx1MDAzZWlvbW11LCByZWdpb24sIE5VTEwpO1xuJiM0MzsjaWZkZWYgX19wb3dlcnBjX19cbiYjNDM7XHRBU1NFUlRfRVEocmMsIC1FTlhJTyk7XG4mIzQzOyNlbHNlXG4gXHRBU1NFUlRfRVEocmMsIC1FT1ZFUkZMT1cpO1xuJiM0MzsjZW5kaWZcbiB9XG4gXG4gaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL3ZmaW9fcGNpX2RldmljZV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL3ZmaW9fcGNpX2RldmljZV90ZXN0LmNcbmluZGV4IDkzYzExZmQ1ZTA4MTgyLi40NWI4YmY2MDUyN2E4NiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19wY2lfZGV2aWNlX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX3BjaV9kZXZpY2VfdGVzdC5jXG5AQCAtMjksNyAmIzQzOzI5LDcgQEAgRklYVFVSRSh2ZmlvX3BjaV9kZXZpY2VfdGVzdCkge1xuIFxuIEZJWFRVUkVfU0VUVVAodmZpb19wY2lfZGV2aWNlX3Rlc3QpXG4ge1xuLVx0c2VsZi1cdTAwM2Vpb21tdSA9IGlvbW11X2luaXQoZGVmYXVsdF9pb21tdV9tb2RlKTtcbiYjNDM7XHRzZWxmLVx1MDAzZWlvbW11ID0gaW9tbXVfaW5pdCh2ZmlvX3NlbGZ0ZXN0c19nZXRfaW9tbXVfbW9kZSgpKTtcbiBcdHNlbGYtXHUwMDNlZGV2aWNlID0gdmZpb19wY2lfZGV2aWNlX2luaXQoZGV2aWNlX2JkZiwgc2VsZi1cdTAwM2Vpb21tdSk7XG4gfVxuIFxuQEAgLTEyMSw3ICYjNDM7MTIxLDcgQEAgRklYVFVSRV9WQVJJQU5UX0FERCh2ZmlvX3BjaV9pcnFfdGVzdCwgbXNpeCkge1xuIFxuIEZJWFRVUkVfU0VUVVAodmZpb19wY2lfaXJxX3Rlc3QpXG4ge1xuLVx0c2VsZi1cdTAwM2Vpb21tdSA9IGlvbW11X2luaXQoZGVmYXVsdF9pb21tdV9tb2RlKTtcbiYjNDM7XHRzZWxmLVx1MDAzZWlvbW11ID0gaW9tbXVfaW5pdCh2ZmlvX3NlbGZ0ZXN0c19nZXRfaW9tbXVfbW9kZSgpKTtcbiBcdHNlbGYtXHUwMDNlZGV2aWNlID0gdmZpb19wY2lfZGV2aWNlX2luaXQoZGV2aWNlX2JkZiwgc2VsZi1cdTAwM2Vpb21tdSk7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDA5OjI3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby8pIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM2MmNlZDY5ZWZmZTYzMjdmZjczOGY5ZGViMDVjNjc2OTIyMGZhNWIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAzIDA5OjI3OjIwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vTWFrZWZpbGUKaW5kZXggMmMzMmM0OGRiNTA5ODUuLjhmZDZhZmQzMzRlNTMyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vTWFrZWZpbGUKQEAgLTEsNiAmIzQzOzEsNiBAQAogQVJDSCA/PSAkKHNoZWxsIHVuYW1lIC1tKQogCi1pZmVxICgsJChmaWx0ZXIgJChBUkNIKSxhYXJjaDY0IGFybTY0IHg4NiB4ODZfNjQpKQomIzQzO2lmZXEgKCwkKGZpbHRlciAkKEFSQ0gpLGFhcmNoNjQgYXJtNjQgeDg2IHg4Nl82NCBwcGM2NCBwcGM2NGxlKSkKICMgRG8gbm90aGluZyBvbiB1bnN1cHBvcnRlZCBhcmNoaXRlY3R1cmVzCiBpbmNsdWRlIC4uL2xpYi5tawogZWxzZQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8uaAppbmRleCAwNzg2MmI0NzA3NzdiZC4uYzBiNGEyYWIwNmM1YWUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby5oCkBAIC0yNCw2ICYjNDM7MjQsMTUgQEAKIGNvbnN0IGNoYXIgKnZmaW9fc2VsZnRlc3RzX2dldF9iZGYoaW50ICphcmdjLCBjaGFyICphcmd2W10pOwogY2hhciAqKnZmaW9fc2VsZnRlc3RzX2dldF9iZGZzKGludCAqYXJnYywgY2hhciAqYXJndltdLCBpbnQgKm5yX2JkZnMpOwogCiYjNDM7LyoKJiM0MzsgKiBSZXR1cm4gdGhlIElPTU1VIG1vZGUgc3RyaW5nIGZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlCiYjNDM7ICogJFZGSU9fU0VMRlRFU1RTX0lPTU1VX01PREUuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zIE5VTEwgaWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBzZXQsIGFsbG93aW5nCiYjNDM7ICogdGVzdHMgdG8gdXNlIHRoZWlyIGRlZmF1bHQgbW9kZS4KJiM0MzsgKi8KJiM0Mztjb25zdCBjaGFyICp2ZmlvX3NlbGZ0ZXN0c19nZXRfaW9tbXVfbW9kZSh2b2lkKTsKJiM0MzsKIC8qCiAgKiBSZXNlcnZlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBvZiBzaXplIGF0IGFuIGFkZHJlc3Mgc2F0aXNmeWluZwogICogKHZhZGRyICUgYWxpZ24pID09IG9mZnNldC4KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby9pb21tdS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL2lvbW11LmgKaW5kZXggZTlhMzM4NmE0NzE5M2EuLmM5YjlhYjkyOWYxZjliIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vaW9tbXUuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vaW9tbXUuaApAQCAtMjQsMTIgJiM0MzsyNCwyNiBAQCBzdHJ1Y3QgZG1hX3JlZ2lvbiB7CiAJdTY0IHNpemU7CiB9OwogCiYjNDM7c3RydWN0IHNwYXByX3RjZV93aW5kb3cgewomIzQzOwl1NjQgc3RhcnQ7CiYjNDM7CXU2NCBzaXplOwomIzQzOwl1MzIgcGFnZV9zaGlmdDsKJiM0MzsJYm9vbCB2YWxpZDsKJiM0MzsJYm9vbCBkeW5hbWljOwomIzQzOwlib29sIHJlbW92ZV9vbl9jbGVhbnVwOwomIzQzO307CiYjNDM7CiBzdHJ1Y3QgaW9tbXUgewogCWNvbnN0IHN0cnVjdCBpb21tdV9tb2RlICptb2RlOwogCWludCBjb250YWluZXJfZmQ7CiAJaW50IGlvbW11ZmQ7CiAJdTMyIGlvYXNfaWQ7CiAJc3RydWN0IGxpc3RfaGVhZCBkbWFfcmVnaW9uczsKJiM0MzsjaWZkZWYgX19wb3dlcnBjX18KJiM0MzsJc3RydWN0IHNwYXByX3RjZV93aW5kb3cgZGVmYXVsdF93aW5kb3c7CiYjNDM7CXN0cnVjdCBzcGFwcl90Y2Vfd2luZG93IGRkd193aW5kb3c7CiYjNDM7CXN0cnVjdCBzcGFwcl90Y2Vfd2luZG93ICphY3RpdmVfd2luZG93OwomIzQzOyNlbmRpZgogfTsKIAogc3RydWN0IGlvbW11ICppb21tdV9pbml0KGNvbnN0IGNoYXIgKmlvbW11X21vZGUpOwpAQCAtNjEsMjIgJiM0Mzs3NSwzNCBAQCBpb3ZhX3QgaW9tbXVfaHZhMmlvdmEoc3RydWN0IGlvbW11ICppb21tdSwgdm9pZCAqdmFkZHIpOwogCiBzdHJ1Y3QgaW9tbXVfaW92YV9yYW5nZSAqaW9tbXVfaW92YV9yYW5nZXMoc3RydWN0IGlvbW11ICppb21tdSwgdTMyICpucmFuZ2VzKTsKIAomIzQzO2ludCBpb21tdV9wcmVwYXJlX2RtYV93aW5kb3coc3RydWN0IGlvbW11ICppb21tdSwgdTY0IG1pbl9zaXplLAomIzQzOwkJCSAgICAgdTY0IHBhZ2Vfc2l6ZSwgYm9vbCBmb3JjZV9keW5hbWljKTsKJiM0Mztib29sIGlvbW11X3N1cHBvcnRzX3VubWFwX2FsbChzdHJ1Y3QgaW9tbXUgKmlvbW11KTsKJiM0MzsKICNkZWZpbmUgTU9ERV9WRklPX1RZUEUxX0lPTU1VICYjMzQ7dmZpb190eXBlMV9pb21tdSYjMzQ7CiAjZGVmaW5lIE1PREVfVkZJT19UWVBFMVYyX0lPTU1VICYjMzQ7dmZpb190eXBlMXYyX2lvbW11JiMzNDsKICNkZWZpbmUgTU9ERV9JT01NVUZEX0NPTVBBVF9UWVBFMSAmIzM0O2lvbW11ZmRfY29tcGF0X3R5cGUxJiMzNDsKICNkZWZpbmUgTU9ERV9JT01NVUZEX0NPTVBBVF9UWVBFMVYyICYjMzQ7aW9tbXVmZF9jb21wYXRfdHlwZTF2MiYjMzQ7CiAjZGVmaW5lIE1PREVfSU9NTVVGRCAmIzM0O2lvbW11ZmQmIzM0OwomIzQzOyNpZmRlZiBfX3Bvd2VycGNfXwomIzQzOyNkZWZpbmUgTU9ERV9WRklPX1NQQVBSX1RDRV9WMl9JT01NVSAmIzM0O3ZmaW9fc3BhcHJfdGNlX3YyX2lvbW11JiMzNDsKJiM0MzsjZW5kaWYKIAogLyoKICAqIEdlbmVyYXRvciBmb3IgVkZJTyBzZWxmdGVzdHMgZml4dHVyZSB2YXJpYW50cyB0aGF0IHJlcGxpY2F0ZSBhY3Jvc3MgYWxsCiAgKiBwb3NzaWJsZSBJT01NVSBtb2Rlcy4gVGVzdHMgbXVzdCBkZWZpbmUgRklYVFVSRV9WQVJJQU5UX0FERF9JT01NVV9NT0RFKCkKICAqIHdoaWNoIHNob3VsZCB0aGVuIHVzZSBGSVhUVVJFX1ZBUklBTlRfQUREKCkgdG8gY3JlYXRlIHRoZSB2YXJpYW50LgogICovCiYjNDM7I2lmZGVmIF9fcG93ZXJwY19fCiYjNDM7I2RlZmluZSBGSVhUVVJFX1ZBUklBTlRfQUREX0FMTF9JT01NVV9NT0RFUyguLi4pIFwKJiM0MztGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREUodmZpb19zcGFwcl90Y2VfdjJfaW9tbXUsICMjX19WQV9BUkdTX18pCiYjNDM7I2Vsc2UKICNkZWZpbmUgRklYVFVSRV9WQVJJQU5UX0FERF9BTExfSU9NTVVfTU9ERVMoLi4uKSBcCiBGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREUodmZpb190eXBlMV9pb21tdSwgIyNfX1ZBX0FSR1NfXyk7IFwKIEZJWFRVUkVfVkFSSUFOVF9BRERfSU9NTVVfTU9ERSh2ZmlvX3R5cGUxdjJfaW9tbXUsICMjX19WQV9BUkdTX18pOyBcCiBGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREUoaW9tbXVmZF9jb21wYXRfdHlwZTEsICMjX19WQV9BUkdTX18pOyBcCiBGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREUoaW9tbXVmZF9jb21wYXRfdHlwZTF2MiwgIyNfX1ZBX0FSR1NfXyk7IFwKIEZJWFRVUkVfVkFSSUFOVF9BRERfSU9NTVVfTU9ERShpb21tdWZkLCAjI19fVkFfQVJHU19fKQomIzQzOyNlbmRpZgogCiAjZW5kaWYgLyogU0VMRlRFU1RTX1ZGSU9fTElCX0lOQ0xVREVfTElCVkZJT19JT01NVV9IICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pb21tdS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW9tbXUuYwppbmRleCAwMzVkYWMwNjlkNjAxNi4uMTlkMTliYjQ1YTE0YjUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2lvbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW9tbXUuYwpAQCAtMTYsOSAmIzQzOzE2LDExIEBACiAjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC92ZmlvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW9tbXVmZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zaXplcy5oJmd0OwogCiAjaW5jbHVkZSAmIzM0Oy4uLy4uLy4uL2tzZWxmdGVzdC5oJiMzNDsKICNpbmNsdWRlICZsdDtsaWJ2ZmlvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbWl0cy5oJmd0OwogCiBjb25zdCBjaGFyICpkZWZhdWx0X2lvbW11X21vZGUgPSBNT0RFX0lPTU1VRkQ7CiAKQEAgLTQ3LDYgJiM0Mzs0OSwxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlvbW11X21vZGUgaW9tbXVfbW9kZXNbXSA9IHsKIAl7CiAJCS5uYW1lID0gTU9ERV9JT01NVUZELAogCX0sCiYjNDM7I2lmZGVmIF9fcG93ZXJwY19fCiYjNDM7CXsKJiM0MzsJCS5uYW1lID0gTU9ERV9WRklPX1NQQVBSX1RDRV9WMl9JT01NVSwKJiM0MzsJCS5jb250YWluZXJfcGF0aCA9ICYjMzQ7L2Rldi92ZmlvL3ZmaW8mIzM0OywKJiM0MzsJCS5pb21tdV90eXBlID0gVkZJT19TUEFQUl9UQ0VfdjJfSU9NTVUsCiYjNDM7CX0sCiYjNDM7I2VuZGlmCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlvbW11X21vZGUgKmxvb2t1cF9pb21tdV9tb2RlKGNvbnN0IGNoYXIgKmlvbW11X21vZGUpCkBAIC04Niw2ICYjNDM7OTUsMjMzIEBAIGludCBfX2lvbW11X2h2YTJpb3ZhKHN0cnVjdCBpb21tdSAqaW9tbXUsIHZvaWQgKnZhZGRyLCBpb3ZhX3QgKmlvdmEpCiAJcmV0dXJuIC1FTk9FTlQ7CiB9CiAKJiM0MzsjaWZkZWYgX19wb3dlcnBjX18KJiM0MztzdGF0aWMgYm9vbCBpb21tdV9pc19zcGFwcl90Y2VfdjIoc3RydWN0IGlvbW11ICppb21tdSkKJiM0Mzt7CiYjNDM7CXJldHVybiAhIShpb21tdS0mZ3Q7bW9kZS0mZ3Q7aW9tbXVfdHlwZSA9PSBWRklPX1NQQVBSX1RDRV92Ml9JT01NVSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB1MzIgcGFnZV9zaXplX3RvX3NoaWZ0KHU2NCBwYWdlX3NpemUpCiYjNDM7ewomIzQzOwlyZXR1cm4gX19idWlsdGluX2N0emxsKHBhZ2Vfc2l6ZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgc3BhcHJfdGNlX3JlYWRfZGVmYXVsdF93aW5kb3coc3RydWN0IGlvbW11ICppb21tdSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2ZmlvX2lvbW11X3NwYXByX3RjZV9pbmZvIGluZm8gPSB7CiYjNDM7CQkuYXJnc3ogPSBzaXplb2YoaW5mbyksCiYjNDM7CX07CiYjNDM7CiYjNDM7CWlmIChpb21tdS0mZ3Q7ZGVmYXVsdF93aW5kb3cudmFsaWQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKGlvY3RsKGlvbW11LSZndDtjb250YWluZXJfZmQsIFZGSU9fSU9NTVVfU1BBUFJfVENFX0dFVF9JTkZPLCAmYW1wO2luZm8pKQomIzQzOwkJcmV0dXJuIC1lcnJubzsKJiM0MzsKJiM0MzsJaW9tbXUtJmd0O2RlZmF1bHRfd2luZG93LnN0YXJ0ID0gaW5mby5kbWEzMl93aW5kb3dfc3RhcnQ7CiYjNDM7CWlvbW11LSZndDtkZWZhdWx0X3dpbmRvdy5zaXplID0gaW5mby5kbWEzMl93aW5kb3dfc2l6ZTsKJiM0MzsJaW9tbXUtJmd0O2RlZmF1bHRfd2luZG93LnBhZ2Vfc2hpZnQgPSBwYWdlX3NpemVfdG9fc2hpZnQoZ2V0cGFnZXNpemUoKSk7CiYjNDM7CWlvbW11LSZndDtkZWZhdWx0X3dpbmRvdy52YWxpZCA9IHRydWU7CiYjNDM7CWlvbW11LSZndDtkZWZhdWx0X3dpbmRvdy5keW5hbWljID0gZmFsc2U7CiYjNDM7CWlvbW11LSZndDtkZWZhdWx0X3dpbmRvdy5yZW1vdmVfb25fY2xlYW51cCA9IGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBzcGFwcl90Y2VfY3JlYXRlX2RkdyhzdHJ1Y3QgaW9tbXUgKmlvbW11LCB1NjQgbWluX3NpemUsIHUzMiBwYWdlX3NoaWZ0KQomIzQzO3sKJiM0MzsJc3RydWN0IHZmaW9faW9tbXVfc3BhcHJfdGNlX2NyZWF0ZSBjcmVhdGUgPSB7CiYjNDM7CQkuYXJnc3ogPSBzaXplb2YoY3JlYXRlKSwKJiM0MzsJCS5wYWdlX3NoaWZ0ID0gcGFnZV9zaGlmdCwKJiM0MzsJCS5sZXZlbHMgPSAxLAomIzQzOwkJLndpbmRvd19zaXplID0gbWluX3NpemUsCiYjNDM7CX07CiYjNDM7CiYjNDM7CWlmIChpb2N0bChpb21tdS0mZ3Q7Y29udGFpbmVyX2ZkLCBWRklPX0lPTU1VX1NQQVBSX1RDRV9DUkVBVEUsICZhbXA7Y3JlYXRlKSkKJiM0MzsJCXJldHVybiAtZXJybm87CiYjNDM7CiYjNDM7CWlvbW11LSZndDtkZHdfd2luZG93LnN0YXJ0ID0gY3JlYXRlLnN0YXJ0X2FkZHI7CiYjNDM7CWlvbW11LSZndDtkZHdfd2luZG93LnNpemUgPSBjcmVhdGUud2luZG93X3NpemU7CiYjNDM7CWlvbW11LSZndDtkZHdfd2luZG93LnBhZ2Vfc2hpZnQgPSBwYWdlX3NoaWZ0OwomIzQzOwlpb21tdS0mZ3Q7ZGR3X3dpbmRvdy52YWxpZCA9IHRydWU7CiYjNDM7CWlvbW11LSZndDtkZHdfd2luZG93LmR5bmFtaWMgPSB0cnVlOwomIzQzOwlpb21tdS0mZ3Q7ZGR3X3dpbmRvdy5yZW1vdmVfb25fY2xlYW51cCA9IHRydWU7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHNwYXByX3RjZV9yZW1vdmVfd2luZG93KHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBzcGFwcl90Y2Vfd2luZG93ICp3aW5kb3cpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdmZpb19pb21tdV9zcGFwcl90Y2VfcmVtb3ZlIHJlbW92ZSA9IHsKJiM0MzsJCS5hcmdzeiA9IHNpemVvZihyZW1vdmUpLAomIzQzOwkJLnN0YXJ0X2FkZHIgPSB3aW5kb3ctJmd0O3N0YXJ0LAomIzQzOwl9OwomIzQzOwomIzQzOwlpZiAoIXdpbmRvdy0mZ3Q7dmFsaWQgfHwgIXdpbmRvdy0mZ3Q7cmVtb3ZlX29uX2NsZWFudXApCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKGlvY3RsKGlvbW11LSZndDtjb250YWluZXJfZmQsIFZGSU9fSU9NTVVfU1BBUFJfVENFX1JFTU9WRSwgJmFtcDtyZW1vdmUpKQomIzQzOwkJcmV0dXJuIC1lcnJubzsKJiM0MzsKJiM0MzsJd2luZG93LSZndDt2YWxpZCA9IGZhbHNlOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgc3BhcHJfdGNlX3dpbmRvd19zYXRpc2ZpZXMoc3RydWN0IHNwYXByX3RjZV93aW5kb3cgKndpbmRvdywKJiM0MzsJCQkJICAgICAgIHU2NCBtaW5fc2l6ZSwgdTMyIHBhZ2Vfc2hpZnQsCiYjNDM7CQkJCSAgICAgICBib29sIHJlcXVpcmVfZHluYW1pYykKJiM0Mzt7CiYjNDM7CWlmICghd2luZG93IHx8ICF3aW5kb3ctJmd0O3ZhbGlkKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAocmVxdWlyZV9keW5hbWljICZhbXA7JmFtcDsgIXdpbmRvdy0mZ3Q7ZHluYW1pYykKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKHdpbmRvdy0mZ3Q7c2l6ZSAmbHQ7IG1pbl9zaXplKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAod2luZG93LSZndDtwYWdlX3NoaWZ0ICE9IHBhZ2Vfc2hpZnQpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGlvbW11X2lvdmFfcmFuZ2UgKnNwYXByX3RjZV9pb3ZhX3JhbmdlcyhzdHJ1Y3QgaW9tbXUgKmlvbW11LCB1MzIgKm5yYW5nZXMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaW9tbXVfaW92YV9yYW5nZSAqcmFuZ2VzOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIWlvbW11LSZndDthY3RpdmVfd2luZG93KSB7CiYjNDM7CQlyZXQgPSBpb21tdV9wcmVwYXJlX2RtYV93aW5kb3coaW9tbXUsIFNaXzFHLCBnZXRwYWdlc2l6ZSgpLCBmYWxzZSk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiBOVUxMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJhbmdlcyA9IGNhbGxvYygxLCBzaXplb2YoKnJhbmdlcykpOwomIzQzOwlWRklPX0FTU0VSVF9OT1RfTlVMTChyYW5nZXMpOwomIzQzOwomIzQzOwlyYW5nZXNbMF0uc3RhcnQgPSBpb21tdS0mZ3Q7YWN0aXZlX3dpbmRvdy0mZ3Q7c3RhcnQ7CiYjNDM7CXJhbmdlc1swXS5sYXN0ID0gaW9tbXUtJmd0O2FjdGl2ZV93aW5kb3ctJmd0O3N0YXJ0ICYjNDM7IGlvbW11LSZndDthY3RpdmVfd2luZG93LSZndDtzaXplIC0gMTsKJiM0MzsKJiM0MzsJKm5yYW5nZXMgPSAxOwomIzQzOwlyZXR1cm4gcmFuZ2VzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBzcGFwcl90Y2VfaW92YV9pbnNpZGVfd2luZG93KHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24pCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc3BhcHJfdGNlX3dpbmRvdyAqd2luZG93ID0gaW9tbXUtJmd0O2FjdGl2ZV93aW5kb3c7CiYjNDM7CiYjNDM7CWlmICghd2luZG93IHx8ICF3aW5kb3ctJmd0O3ZhbGlkKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAocmVnaW9uLSZndDtpb3ZhICZsdDsgd2luZG93LSZndDtzdGFydCkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKHJlZ2lvbi0mZ3Q7aW92YSAmIzQzOyByZWdpb24tJmd0O3NpemUgJmd0OyB3aW5kb3ctJmd0O3N0YXJ0ICYjNDM7IHdpbmRvdy0mZ3Q7c2l6ZSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgc3BhcHJfcmVnaXN0ZXJfbWVtb3J5KHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdmZpb19pb21tdV9zcGFwcl9yZWdpc3Rlcl9tZW1vcnkgYXJncyA9IHsKJiM0MzsJCS5hcmdzeiA9IHNpemVvZihhcmdzKSwKJiM0MzsJCS52YWRkciA9ICh1NjQpcmVnaW9uLSZndDt2YWRkciwKJiM0MzsJCS5zaXplID0gcmVnaW9uLSZndDtzaXplLAomIzQzOwl9OwomIzQzOwomIzQzOwlpZiAoaW9jdGwoaW9tbXUtJmd0O2NvbnRhaW5lcl9mZCwgVkZJT19JT01NVV9TUEFQUl9SRUdJU1RFUl9NRU1PUlksICZhbXA7YXJncykpCiYjNDM7CQlyZXR1cm4gLWVycm5vOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBzcGFwcl91bnJlZ2lzdGVyX21lbW9yeShzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uKQomIzQzO3sKJiM0MzsJc3RydWN0IHZmaW9faW9tbXVfc3BhcHJfcmVnaXN0ZXJfbWVtb3J5IGFyZ3MgPSB7CiYjNDM7CQkuYXJnc3ogPSBzaXplb2YoYXJncyksCiYjNDM7CQkudmFkZHIgPSAodTY0KXJlZ2lvbi0mZ3Q7dmFkZHIsCiYjNDM7CQkuc2l6ZSA9IHJlZ2lvbi0mZ3Q7c2l6ZSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJaWYgKGlvY3RsKGlvbW11LSZndDtjb250YWluZXJfZmQsIFZGSU9fSU9NTVVfU1BBUFJfVU5SRUdJU1RFUl9NRU1PUlksICZhbXA7YXJncykpCiYjNDM7CQlyZXR1cm4gLWVycm5vOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IGlvbW11X3ByZXBhcmVfZG1hX3dpbmRvdyhzdHJ1Y3QgaW9tbXUgKmlvbW11LCB1NjQgbWluX3NpemUsCiYjNDM7CQkJICAgICB1NjQgcGFnZV9zaXplLCBib29sIGZvcmNlX2R5bmFtaWMpCiYjNDM7ewomIzQzOwl1MzIgcGFnZV9zaGlmdDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCFpb21tdV9pc19zcGFwcl90Y2VfdjIoaW9tbXUpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmICghcGFnZV9zaXplKQomIzQzOwkJcGFnZV9zaXplID0gZ2V0cGFnZXNpemUoKTsKJiM0MzsKJiM0MzsJcGFnZV9zaGlmdCA9IHBhZ2Vfc2l6ZV90b19zaGlmdChwYWdlX3NpemUpOwomIzQzOwomIzQzOwlyZXQgPSBzcGFwcl90Y2VfcmVhZF9kZWZhdWx0X3dpbmRvdyhpb21tdSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBOb3JtYWwgbWFwcGluZyBwYXRoOgomIzQzOwkgKiB1c2UgZGVmYXVsdCB3aW5kb3cgd2hlbiBpdCBzYXRpc2ZpZXMgdGhlIHJlcXVlc3QuCiYjNDM7CSAqLwomIzQzOwlpZiAoIWZvcmNlX2R5bmFtaWMgJmFtcDsmYW1wOwomIzQzOwkgICAgc3BhcHJfdGNlX3dpbmRvd19zYXRpc2ZpZXMoJmFtcDtpb21tdS0mZ3Q7ZGVmYXVsdF93aW5kb3csCiYjNDM7CQkJCSAgICAgICBtaW5fc2l6ZSwgcGFnZV9zaGlmdCwgZmFsc2UpKSB7CiYjNDM7CQlpb21tdS0mZ3Q7YWN0aXZlX3dpbmRvdyA9ICZhbXA7aW9tbXUtJmd0O2RlZmF1bHRfd2luZG93OwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRHluYW1pYyBwYXRoOgomIzQzOwkgKiB1c2UgZXhpc3RpbmcgRERXIGlmIGl0IGFscmVhZHkgc2F0aXNmaWVzIHRoZSByZXF1ZXN0LgomIzQzOwkgKi8KJiM0MzsJaWYgKHNwYXByX3RjZV93aW5kb3dfc2F0aXNmaWVzKCZhbXA7aW9tbXUtJmd0O2Rkd193aW5kb3csCiYjNDM7CQkJCSAgICAgICBtaW5fc2l6ZSwgcGFnZV9zaGlmdCwgdHJ1ZSkpIHsKJiM0MzsJCWlvbW11LSZndDthY3RpdmVfd2luZG93ID0gJmFtcDtpb21tdS0mZ3Q7ZGR3X3dpbmRvdzsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE5laXRoZXIgZGVmYXVsdCBub3IgRERXIGlzIHN1ZmZpY2llbnQuCiYjNDM7CSAqIFJlbW92ZSBvbmx5IHRoZSBzZWxmdGVzdC1jcmVhdGVkIEREVywgdGhlbiBjcmVhdGUgYSBuZXcgRERXLgomIzQzOwkgKi8KJiM0MzsJcmV0ID0gc3BhcHJfdGNlX3JlbW92ZV93aW5kb3coaW9tbXUsICZhbXA7aW9tbXUtJmd0O2Rkd193aW5kb3cpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gc3BhcHJfdGNlX2NyZWF0ZV9kZHcoaW9tbXUsIG1pbl9zaXplLCBwYWdlX3NoaWZ0KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlvbW11LSZndDthY3RpdmVfd2luZG93ID0gJmFtcDtpb21tdS0mZ3Q7ZGR3X3dpbmRvdzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOyNlbHNlCiYjNDM7aW50IGlvbW11X3ByZXBhcmVfZG1hX3dpbmRvdyhzdHJ1Y3QgaW9tbXUgKmlvbW11LCB1NjQgbWluX3NpemUsCiYjNDM7CQkJICAgICB1NjQgcGFnZV9zaXplLCBib29sIGZvcmNlX2R5bmFtaWMpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7Ym9vbCBpb21tdV9zdXBwb3J0c191bm1hcF9hbGwoc3RydWN0IGlvbW11ICppb21tdSkKJiM0Mzt7CiYjNDM7I2lmZGVmIF9fcG93ZXJwY19fCiYjNDM7CWlmIChpb21tdV9pc19zcGFwcl90Y2VfdjIoaW9tbXUpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOyNlbmRpZgomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiBpb3ZhX3QgaW9tbXVfaHZhMmlvdmEoc3RydWN0IGlvbW11ICppb21tdSwgdm9pZCAqdmFkZHIpCiB7CiAJaW92YV90IGlvdmE7CkBAIC0xMDYsOSAmIzQzOzM0MiwyNyBAQCBzdGF0aWMgaW50IHZmaW9faW9tbXVfbWFwKHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24pCiAJCS5pb3ZhID0gcmVnaW9uLSZndDtpb3ZhLAogCQkuc2l6ZSA9IHJlZ2lvbi0mZ3Q7c2l6ZSwKIAl9OwomIzQzOwlpbnQgcmV0OwogCi0JaWYgKGlvY3RsKGlvbW11LSZndDtjb250YWluZXJfZmQsIFZGSU9fSU9NTVVfTUFQX0RNQSwgJmFtcDthcmdzKSkKJiM0MzsjaWZkZWYgX19wb3dlcnBjX18KJiM0MzsJaWYgKGlvbW11X2lzX3NwYXByX3RjZV92Mihpb21tdSkpIHsKJiM0MzsJCWlmICghc3BhcHJfdGNlX2lvdmFfaW5zaWRlX3dpbmRvdyhpb21tdSwgcmVnaW9uKSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCXJldCA9IHNwYXByX3JlZ2lzdGVyX21lbW9yeShpb21tdSwgcmVnaW9uKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOyNlbmRpZgomIzQzOwomIzQzOwlyZXQgPSBpb2N0bChpb21tdS0mZ3Q7Y29udGFpbmVyX2ZkLCBWRklPX0lPTU1VX01BUF9ETUEsICZhbXA7YXJncyk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsjaWZkZWYgX19wb3dlcnBjX18KJiM0MzsJCWlmIChpb21tdV9pc19zcGFwcl90Y2VfdjIoaW9tbXUpKQomIzQzOwkJCXNwYXByX3VucmVnaXN0ZXJfbWVtb3J5KGlvbW11LCByZWdpb24pOwomIzQzOyNlbmRpZgogCQlyZXR1cm4gLWVycm5vOwomIzQzOwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE3MCw4ICYjNDM7NDI0LDE4IEBAIHN0YXRpYyBpbnQgX192ZmlvX2lvbW11X3VubWFwKGludCBmZCwgdTY0IGlvdmEsIHU2NCBzaXplLCB1MzIgZmxhZ3MsIHU2NCAqdW5tYXBwCiBzdGF0aWMgaW50IHZmaW9faW9tbXVfdW5tYXAoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbiwKIAkJCSAgICB1NjQgKnVubWFwcGVkKQogewotCXJldHVybiBfX3ZmaW9faW9tbXVfdW5tYXAoaW9tbXUtJmd0O2NvbnRhaW5lcl9mZCwgcmVnaW9uLSZndDtpb3ZhLAotCQkJCSAgcmVnaW9uLSZndDtzaXplLCAwLCB1bm1hcHBlZCk7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IF9fdmZpb19pb21tdV91bm1hcChpb21tdS0mZ3Q7Y29udGFpbmVyX2ZkLCByZWdpb24tJmd0O2lvdmEsCiYjNDM7CQkJCSByZWdpb24tJmd0O3NpemUsIDAsIHVubWFwcGVkKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7I2lmZGVmIF9fcG93ZXJwY19fCiYjNDM7CWlmIChpb21tdV9pc19zcGFwcl90Y2VfdjIoaW9tbXUpKQomIzQzOwkJcmV0ID0gc3BhcHJfdW5yZWdpc3Rlcl9tZW1vcnkoaW9tbXUsIHJlZ2lvbik7CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgX19pb21tdWZkX3VubWFwKGludCBmZCwgdTY0IGlvdmEsIHU2NCBsZW5ndGgsIHUzMiBpb2FzX2lkLCB1NjQgKnVubWFwcGVkKQpAQCAtMzE3LDYgJiM0Mzs1ODEsMTEgQEAgc3RhdGljIHN0cnVjdCBpb21tdV9pb3ZhX3JhbmdlICp2ZmlvX2lvbW11X2lvdmFfcmFuZ2VzKHN0cnVjdCBpb21tdSAqaW9tbXUsCiAJc3RydWN0IHZmaW9faW5mb19jYXBfaGVhZGVyICpoZHI7CiAJc3RydWN0IGlvbW11X2lvdmFfcmFuZ2UgKnJhbmdlcyA9IE5VTEw7CiAKJiM0MzsjaWZkZWYgX19wb3dlcnBjX18KJiM0MzsJaWYgKGlvbW11X2lzX3NwYXByX3RjZV92Mihpb21tdSkpCiYjNDM7CQlyZXR1cm4gc3BhcHJfdGNlX2lvdmFfcmFuZ2VzKGlvbW11LCBucmFuZ2VzKTsKJiM0MzsjZW5kaWYKJiM0MzsKIAlpbmZvID0gdmZpb19pb21tdV9nZXRfaW5mbyhpb21tdS0mZ3Q7Y29udGFpbmVyX2ZkKTsKIAloZHIgPSB2ZmlvX2lvbW11X2luZm9fY2FwX2hkcihpbmZvLCBWRklPX0lPTU1VX1RZUEUxX0lORk9fQ0FQX0lPVkFfUkFOR0UpOwogCVZGSU9fQVNTRVJUX05PVF9OVUxMKGhkcik7CkBAIC00NTUsNiAmIzQzOzcyNCwxMSBAQCBzdHJ1Y3QgaW9tbXUgKmlvbW11X2luaXQoY29uc3QgY2hhciAqaW9tbXVfbW9kZSkKIAogdm9pZCBpb21tdV9jbGVhbnVwKHN0cnVjdCBpb21tdSAqaW9tbXUpCiB7CiYjNDM7I2lmZGVmIF9fcG93ZXJwY19fCiYjNDM7CWlmIChpb21tdV9pc19zcGFwcl90Y2VfdjIoaW9tbXUpKQomIzQzOwkJc3BhcHJfdGNlX3JlbW92ZV93aW5kb3coaW9tbXUsICZhbXA7aW9tbXUtJmd0O2Rkd193aW5kb3cpOwomIzQzOyNlbmRpZgomIzQzOwogCWlmIChpb21tdS0mZ3Q7aW9tbXVmZCkKIAkJVkZJT19BU1NFUlRfRVEoY2xvc2UoaW9tbXUtJmd0O2lvbW11ZmQpLCAwKTsKIAllbHNlCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLmMKaW5kZXggM2EzZDFlZDYzNWMxZGYuLjEyZjczMTk2M2IwNThhIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5jCkBAIC0xMDEsMyAmIzQzOzEwMSw0MCBAQCB2b2lkICptbWFwX3Jlc2VydmUoc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbiwgc2l6ZV90IG9mZnNldCkKIAogCXJldHVybiBtYXBfYWxpZ247CiB9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKmdldF9pb21tdV9tb2RlX2Vudih2b2lkKQomIzQzO3sKJiM0MzsJY29uc3QgY2hhciAqbW9kZTsKJiM0MzsJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB2YWxpZF9tb2Rlc1tdID0gewomIzQzOwkJTU9ERV9WRklPX1RZUEUxX0lPTU1VLAomIzQzOwkJTU9ERV9WRklPX1RZUEUxVjJfSU9NTVUsCiYjNDM7CQlNT0RFX0lPTU1VRkRfQ09NUEFUX1RZUEUxLAomIzQzOwkJTU9ERV9JT01NVUZEX0NPTVBBVF9UWVBFMVYyLAomIzQzOwkJTU9ERV9JT01NVUZELAomIzQzOyNpZmRlZiBfX3Bvd2VycGNfXwomIzQzOwkJTU9ERV9WRklPX1NQQVBSX1RDRV9WMl9JT01NVSwKJiM0MzsjZW5kaWYKJiM0MzsJfTsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CW1vZGUgPSBnZXRlbnYoJiMzNDtWRklPX1NFTEZURVNUU19JT01NVV9NT0RFJiMzNDspOwomIzQzOwlpZiAoIW1vZGUpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUodmFsaWRfbW9kZXMpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKCFzdHJjbXAobW9kZSwgdmFsaWRfbW9kZXNbaV0pKQomIzQzOwkJCXJldHVybiBtb2RlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZwcmludGYoc3RkZXJyLCAmIzM0O0ludmFsaWQgVkZJT19TRUxGVEVTVFNfSU9NTVVfTU9ERTogJXNcbiYjMzQ7LCBtb2RlKTsKJiM0MzsJZnByaW50ZihzdGRlcnIsICYjMzQ7VmFsaWQgbW9kZXMgYXJlOlxuJiMzNDspOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRSh2YWxpZF9tb2Rlcyk7IGkmIzQzOyYjNDM7KQomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7ICAlc1xuJiMzNDssIHZhbGlkX21vZGVzW2ldKTsKJiM0MzsJZXhpdChLU0ZUX1NLSVApOwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBjaGFyICp2ZmlvX3NlbGZ0ZXN0c19nZXRfaW9tbXVfbW9kZSh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIGdldF9pb21tdV9tb2RlX2VudigpOwomIzQzO30KJiM0MzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19kbWFfbWFwcGluZ190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL3ZmaW9fZG1hX21hcHBpbmdfdGVzdC5jCmluZGV4IDdkMGRlOGM3OWRlMTNmLi5jZDJkMzI3NmE0NmM0NiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX2RtYV9tYXBwaW5nX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL3ZmaW9fZG1hX21hcHBpbmdfdGVzdC5jCkBAIC0xLDUgJiM0MzsxLDYgQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKICNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKICNpbmNsdWRlICZsdDtzeXMvbW1hbi5oJmd0OwogI2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwogCkBAIC0xMTksOCAmIzQzOzEyMCwxOSBAQCBGSVhUVVJFX1ZBUklBTlRfQUREX0FMTF9JT01NVV9NT0RFUyhhbm9ueW1vdXNfaHVnZXRsYl8xZ2IsIFNaXzFHLCBNQVBfSFVHRVRMQiB8CiAKIEZJWFRVUkVfU0VUVVAodmZpb19kbWFfbWFwcGluZ190ZXN0KQogewomIzQzOwljb25zdCB1NjQgcGFnZV9zaXplID0gdmFyaWFudC0mZ3Q7c2l6ZSA/OiBnZXRwYWdlc2l6ZSgpOwomIzQzOwljb25zdCBib29sIGZvcmNlX2R5bmFtaWMgPSAhIXZhcmlhbnQtJmd0O3NpemU7CiYjNDM7CWludCByZXQ7CiYjNDM7CiAJc2VsZi0mZ3Q7aW9tbXUgPSBpb21tdV9pbml0KHZhcmlhbnQtJmd0O2lvbW11X21vZGUpOwogCXNlbGYtJmd0O2RldmljZSA9IHZmaW9fcGNpX2RldmljZV9pbml0KGRldmljZV9iZGYsIHNlbGYtJmd0O2lvbW11KTsKJiM0MzsKJiM0MzsJcmV0ID0gaW9tbXVfcHJlcGFyZV9kbWFfd2luZG93KHNlbGYtJmd0O2lvbW11LCBwYWdlX3NpemUsIHBhZ2Vfc2l6ZSwKJiM0MzsJCQkJICAgICAgIGZvcmNlX2R5bmFtaWMpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7RE1BIHdpbmRvdyB1bmF2YWlsYWJsZTogJXMgKCVkKVxuJiMzNDssCiYjNDM7CQkgICAgIHN0cmVycm9yKC1yZXQpLCAtcmV0KTsKJiM0MzsKIAlzZWxmLSZndDtpb3ZhX2FsbG9jYXRvciA9IGlvdmFfYWxsb2NhdG9yX2luaXQoc2VsZi0mZ3Q7aW9tbXUpOwogfQogCkBAIC0yMjcsNiAmIzQzOzIzOSw3IEBAIEZJWFRVUkVfU0VUVVAodmZpb19kbWFfbWFwX2xpbWl0X3Rlc3QpCiAJdTY0IHJlZ2lvbl9zaXplID0gZ2V0cGFnZXNpemUoKTsKIAlpb3ZhX3QgbGFzdF9pb3ZhOwogCXUzMiBucmFuZ2VzOwomIzQzOwlpbnQgcmV0OwogCiAJLyoKIAkgKiBPdmVyLWFsbG9jYXRlIG1tYXAgYnkgZG91YmxlIHRoZSBzaXplIHRvIHByb3ZpZGUgZW5vdWdoIGJhY2tpbmcgdmFkZHIKQEAgLTIzNiw2ICYjNDM7MjQ5LDEzIEBAIEZJWFRVUkVfU0VUVVAodmZpb19kbWFfbWFwX2xpbWl0X3Rlc3QpCiAKIAlzZWxmLSZndDtpb21tdSA9IGlvbW11X2luaXQodmFyaWFudC0mZ3Q7aW9tbXVfbW9kZSk7CiAJc2VsZi0mZ3Q7ZGV2aWNlID0gdmZpb19wY2lfZGV2aWNlX2luaXQoZGV2aWNlX2JkZiwgc2VsZi0mZ3Q7aW9tbXUpOwomIzQzOwomIzQzOwlyZXQgPSBpb21tdV9wcmVwYXJlX2RtYV93aW5kb3coc2VsZi0mZ3Q7aW9tbXUsIHJlZ2lvbl9zaXplLCByZWdpb25fc2l6ZSwKJiM0MzsJCQkJICAgICAgIGZhbHNlKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCVNLSVAocmV0dXJuLCAmIzM0O0RNQSB3aW5kb3cgdW5hdmFpbGFibGU6ICVzICglZClcbiYjMzQ7LAomIzQzOwkJICAgICBzdHJlcnJvcigtcmV0KSwgLXJldCk7CiYjNDM7CiAJcmVnaW9uLSZndDt2YWRkciA9IG1tYXAoTlVMTCwgc2VsZi0mZ3Q7bW1hcF9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAogCQkJICAgICBNQVBfQU5PTllNT1VTIHwgTUFQX1BSSVZBVEUsIC0xLCAwKTsKIAlBU1NFUlRfTkUocmVnaW9uLSZndDt2YWRkciwgTUFQX0ZBSUxFRCk7CkBAIC0yNzcsNiAmIzQzOzI5Nyw4IEBAIFRFU1RfRih2ZmlvX2RtYV9tYXBfbGltaXRfdGVzdCwgdW5tYXBfYWxsKQogCXU2NCB1bm1hcHBlZDsKIAlpbnQgcmM7CiAKJiM0MzsJaWYgKCFpb21tdV9zdXBwb3J0c191bm1hcF9hbGwoc2VsZi0mZ3Q7aW9tbXUpKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7SU9NTVUgYmFja2VuZCBkb2VzIG5vdCBzdXBwb3J0IHVubWFwLWFsbFxuJiMzNDspOwogCWlvbW11X21hcChzZWxmLSZndDtpb21tdSwgcmVnaW9uKTsKIAlBU1NFUlRfRVEocmVnaW9uLSZndDtpb3ZhLCB0b19pb3ZhKHNlbGYtJmd0O2RldmljZSwgcmVnaW9uLSZndDt2YWRkcikpOwogCkBAIC0yOTQsMTAgJiM0MzszMTYsMTggQEAgVEVTVF9GKHZmaW9fZG1hX21hcF9saW1pdF90ZXN0LCBvdmVyZmxvdykKIAlyZWdpb24tJmd0O3NpemUgPSBzZWxmLSZndDttbWFwX3NpemU7CiAKIAlyYyA9IF9faW9tbXVfbWFwKHNlbGYtJmd0O2lvbW11LCByZWdpb24pOwomIzQzOyNpZmRlZiBfX3Bvd2VycGNfXwomIzQzOwlBU1NFUlRfRVEocmMsIC1FTlhJTyk7CiYjNDM7I2Vsc2UKIAlBU1NFUlRfRVEocmMsIC1FT1ZFUkZMT1cpOwomIzQzOyNlbmRpZgogCiAJcmMgPSBfX2lvbW11X3VubWFwKHNlbGYtJmd0O2lvbW11LCByZWdpb24sIE5VTEwpOwomIzQzOyNpZmRlZiBfX3Bvd2VycGNfXwomIzQzOwlBU1NFUlRfRVEocmMsIC1FTlhJTyk7CiYjNDM7I2Vsc2UKIAlBU1NFUlRfRVEocmMsIC1FT1ZFUkZMT1cpOwomIzQzOyNlbmRpZgogfQogCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX3BjaV9kZXZpY2VfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX3BjaV9kZXZpY2VfdGVzdC5jCmluZGV4IDkzYzExZmQ1ZTA4MTgyLi40NWI4YmY2MDUyN2E4NiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX3BjaV9kZXZpY2VfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19wY2lfZGV2aWNlX3Rlc3QuYwpAQCAtMjksNyAmIzQzOzI5LDcgQEAgRklYVFVSRSh2ZmlvX3BjaV9kZXZpY2VfdGVzdCkgewogCiBGSVhUVVJFX1NFVFVQKHZmaW9fcGNpX2RldmljZV90ZXN0KQogewotCXNlbGYtJmd0O2lvbW11ID0gaW9tbXVfaW5pdChkZWZhdWx0X2lvbW11X21vZGUpOwomIzQzOwlzZWxmLSZndDtpb21tdSA9IGlvbW11X2luaXQodmZpb19zZWxmdGVzdHNfZ2V0X2lvbW11X21vZGUoKSk7CiAJc2VsZi0mZ3Q7ZGV2aWNlID0gdmZpb19wY2lfZGV2aWNlX2luaXQoZGV2aWNlX2JkZiwgc2VsZi0mZ3Q7aW9tbXUpOwogfQogCkBAIC0xMjEsNyAmIzQzOzEyMSw3IEBAIEZJWFRVUkVfVkFSSUFOVF9BREQodmZpb19wY2lfaXJxX3Rlc3QsIG1zaXgpIHsKIAogRklYVFVSRV9TRVRVUCh2ZmlvX3BjaV9pcnFfdGVzdCkKIHsKLQlzZWxmLSZndDtpb21tdSA9IGlvbW11X2luaXQoZGVmYXVsdF9pb21tdV9tb2RlKTsKJiM0MzsJc2VsZi0mZ3Q7aW9tbXUgPSBpb21tdV9pbml0KHZmaW9fc2VsZnRlc3RzX2dldF9pb21tdV9tb2RlKCkpOwogCXNlbGYtJmd0O2RldmljZSA9IHZmaW9fcGNpX2RldmljZV9pbml0KGRldmljZV9iZGYsIHNlbGYtJmd0O2lvbW11KTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwOToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTg2CgkJCQkJCQlvdXRwdXQ6IDY1CgkJCQkJCQl0aG91Z2h0czogMzUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzOiBTZWxmdGVzdCBVcGRhdGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGFuZCBpdCBhcHBlYXJzIHRvIGJlIGZvY3VzZWQgc29sZWx5IG9uIHVwZGF0ZXMgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2AuIFRoYXQgZGlyZWN0b3J5IHNjcmVhbXMgJiMzNDtzZWxmdGVzdCYjMzQ7IHRvIG1lLCBhbmQgdGhhdCBtZWFucyB1c2Vyc3BhY2UsIG5vdCBrZXJuZWwgY29kZSB3ZSBuZWVkIHRvIHdvcnJ5IGFib3V0IGZ1enppbmcgZGlyZWN0bHkuIEkgbmVlZCB0byBiZSBzdXJlLCB0aG91Z2guIExldCYjMzk7cyBtYWtlIHN1cmUuCgpIbW0sIGxldCYjMzk7cyBjb25maXJtIHRoZSBmaWxlcy4KCkEgcXVpY2sgZGlmZiBjaGVjayBjb25maXJtcyBteSBpbml0aWFsIGltcHJlc3Npb24uIEl0JiMzOTtzIHRvdWNoaW5nIGBNYWtlZmlsZWAsIHNvbWUgaW5jbHVkZSBmaWxlcyAoYGxpYnZmaW8uaGAsIGBpb21tdS5oYCksIGFuZCBhIGZldyBDIGZpbGVzIChgaW9tbXUuY2AsIGBsaWJ2ZmlvLmNgLCBgdmZpb19kbWFfbWFwcGluZ190ZXN0LmNgLCBgdmZpb19wY2lfZGV2aWNlX3Rlc3QuY2ApLiBUaGF0JiMzOTtzIGFsbCB3aXRoaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2Agc3VidHJlZS4gRXhjZWxsZW50LgoKR2l2ZW4gdGhhdCAqYWxsKiB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGUgc2VsZnRlc3QgZGlyZWN0b3J5LCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCB0aGlzIHBhdGNoICpkb2VzbiYjMzk7dCogaW50cm9kdWNlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHdhcnJhbnQgZnV6emluZy4gSXQmIzM5O3MganVzdCBhIHRlc3QgdXBkYXRlLiBTbywgSSB3aWxsIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6IHRoaXMgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzLCBhbmQgdGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiBXZSBjYW4gc2tpcCB0aGlzIG9uZSBmb3IgZnV6emluZyBwdXJwb3Nlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwOToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby8pIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby8pIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwOToyNzoyMS40NjQyMDUxMTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTQ1MzkxNTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vKSBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwOToyNzoyMS40NjQyMTMwMjVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMDU4NDU3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGM2MmNlZDY5ZWZmZTYzMjdmZjczOGY5ZGViMDVjNjc2OTIyMGZhNWJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMyAwOToyNzoyMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9NYWtlZmlsZVxcbmluZGV4IDJjMzJjNDhkYjUwOTg1Li44ZmQ2YWZkMzM0ZTUzMiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9NYWtlZmlsZVxcbkBAIC0xLDYgKzEsNiBAQFxcbiBBUkNIID89ICQoc2hlbGwgdW5hbWUgLW0pXFxuIFxcbi1pZmVxICgsJChmaWx0ZXIgJChBUkNIKSxhYXJjaDY0IGFybTY0IHg4NiB4ODZfNjQpKVxcbitpZmVxICgsJChmaWx0ZXIgJChBUkNIKSxhYXJjaDY0IGFybTY0IHg4NiB4ODZfNjQgcHBjNjQgcHBjNjRsZSkpXFxuICMgRG8gbm90aGluZyBvbiB1bnN1cHBvcnRlZCBhcmNoaXRlY3R1cmVzXFxuIGluY2x1ZGUgLi4vbGliLm1rXFxuIGVsc2VcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8uaFxcbmluZGV4IDA3ODYyYjQ3MDc3N2JkLi5jMGI0YTJhYjA2YzVhZSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8uaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby5oXFxuQEAgLTI0LDYgKzI0LDE1IEBAXFxuIGNvbnN0IGNoYXIgKnZmaW9fc2VsZnRlc3RzX2dldF9iZGYoaW50ICphcmdjLCBjaGFyICphcmd2W10pO1xcbiBjaGFyICoqdmZpb19zZWxmdGVzdHNfZ2V0X2JkZnMoaW50ICphcmdjLCBjaGFyICphcmd2W10sIGludCAqbnJfYmRmcyk7XFxuIFxcbisvKlxcbisgKiBSZXR1cm4gdGhlIElPTU1VIG1vZGUgc3RyaW5nIGZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlXFxuKyAqICRWRklPX1NFTEZURVNUU19JT01NVV9NT0RFLlxcbisgKlxcbisgKiBSZXR1cm5zIE5VTEwgaWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBzZXQsIGFsbG93aW5nXFxuKyAqIHRlc3RzIHRvIHVzZSB0aGVpciBkZWZhdWx0IG1vZGUuXFxuKyAqL1xcbitjb25zdCBjaGFyICp2ZmlvX3NlbGZ0ZXN0c19nZXRfaW9tbXVfbW9kZSh2b2lkKTtcXG4rXFxuIC8qXFxuICAqIFJlc2VydmUgdmlydHVhbCBhZGRyZXNzIHNwYWNlIG9mIHNpemUgYXQgYW4gYWRkcmVzcyBzYXRpc2Z5aW5nXFxuICAqICh2YWRkciAlIGFsaWduKSA9PSBvZmZzZXQuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby9pb21tdS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL2lvbW11LmhcXG5pbmRleCBlOWEzMzg2YTQ3MTkzYS4uYzliOWFiOTI5ZjFmOWIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL2lvbW11LmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vaW9tbXUuaFxcbkBAIC0yNCwxMiArMjQsMjYgQEAgc3RydWN0IGRtYV9yZWdpb24ge1xcbiBcXHR1NjQgc2l6ZTtcXG4gfTtcXG4gXFxuK3N0cnVjdCBzcGFwcl90Y2Vfd2luZG93IHtcXG4rXFx0dTY0IHN0YXJ0O1xcbitcXHR1NjQgc2l6ZTtcXG4rXFx0dTMyIHBhZ2Vfc2hpZnQ7XFxuK1xcdGJvb2wgdmFsaWQ7XFxuK1xcdGJvb2wgZHluYW1pYztcXG4rXFx0Ym9vbCByZW1vdmVfb25fY2xlYW51cDtcXG4rfTtcXG4rXFxuIHN0cnVjdCBpb21tdSB7XFxuIFxcdGNvbnN0IHN0cnVjdCBpb21tdV9tb2RlICptb2RlO1xcbiBcXHRpbnQgY29udGFpbmVyX2ZkO1xcbiBcXHRpbnQgaW9tbXVmZDtcXG4gXFx0dTMyIGlvYXNfaWQ7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgZG1hX3JlZ2lvbnM7XFxuKyNpZmRlZiBfX3Bvd2VycGNfX1xcbitcXHRzdHJ1Y3Qgc3BhcHJfdGNlX3dpbmRvdyBkZWZhdWx0X3dpbmRvdztcXG4rXFx0c3RydWN0IHNwYXByX3RjZV93aW5kb3cgZGR3X3dpbmRvdztcXG4rXFx0c3RydWN0IHNwYXByX3RjZV93aW5kb3cgKmFjdGl2ZV93aW5kb3c7XFxuKyNlbmRpZlxcbiB9O1xcbiBcXG4gc3RydWN0IGlvbW11ICppb21tdV9pbml0KGNvbnN0IGNoYXIgKmlvbW11X21vZGUpO1xcbkBAIC02MSwyMiArNzUsMzQgQEAgaW92YV90IGlvbW11X2h2YTJpb3ZhKHN0cnVjdCBpb21tdSAqaW9tbXUsIHZvaWQgKnZhZGRyKTtcXG4gXFxuIHN0cnVjdCBpb21tdV9pb3ZhX3JhbmdlICppb21tdV9pb3ZhX3JhbmdlcyhzdHJ1Y3QgaW9tbXUgKmlvbW11LCB1MzIgKm5yYW5nZXMpO1xcbiBcXG4raW50IGlvbW11X3ByZXBhcmVfZG1hX3dpbmRvdyhzdHJ1Y3QgaW9tbXUgKmlvbW11LCB1NjQgbWluX3NpemUsXFxuK1xcdFxcdFxcdCAgICAgdTY0IHBhZ2Vfc2l6ZSwgYm9vbCBmb3JjZV9keW5hbWljKTtcXG4rYm9vbCBpb21tdV9zdXBwb3J0c191bm1hcF9hbGwoc3RydWN0IGlvbW11ICppb21tdSk7XFxuK1xcbiAjZGVmaW5lIE1PREVfVkZJT19UWVBFMV9JT01NVSBcXFwidmZpb190eXBlMV9pb21tdVxcXCJcXG4gI2RlZmluZSBNT0RFX1ZGSU9fVFlQRTFWMl9JT01NVSBcXFwidmZpb190eXBlMXYyX2lvbW11XFxcIlxcbiAjZGVmaW5lIE1PREVfSU9NTVVGRF9DT01QQVRfVFlQRTEgXFxcImlvbW11ZmRfY29tcGF0X3R5cGUxXFxcIlxcbiAjZGVmaW5lIE1PREVfSU9NTVVGRF9DT01QQVRfVFlQRTFWMiBcXFwiaW9tbXVmZF9jb21wYXRfdHlwZTF2MlxcXCJcXG4gI2RlZmluZSBNT0RFX0lPTU1VRkQgXFxcImlvbW11ZmRcXFwiXFxuKyNpZmRlZiBfX3Bvd2VycGNfX1xcbisjZGVmaW5lIE1PREVfVkZJT19TUEFQUl9UQ0VfVjJfSU9NTVUgXFxcInZmaW9fc3BhcHJfdGNlX3YyX2lvbW11XFxcIlxcbisjZW5kaWZcXG4gXFxuIC8qXFxuICAqIEdlbmVyYXRvciBmb3IgVkZJTyBzZWxmdGVzdHMgZml4dHVyZSB2YXJpYW50cyB0aGF0IHJlcGxpY2F0ZSBhY3Jvc3MgYWxsXFxuICAqIHBvc3NpYmxlIElPTU1VIG1vZGVzLiBUZXN0cyBtdXN0IGRlZmluZSBGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREUoKVxcbiAgKiB3aGljaCBzaG91bGQgdGhlbiB1c2UgRklYVFVSRV9WQVJJQU5UX0FERCgpIHRvIGNyZWF0ZSB0aGUgdmFyaWFudC5cXG4gICovXFxuKyNpZmRlZiBfX3Bvd2VycGNfX1xcbisjZGVmaW5lIEZJWFRVUkVfVkFSSUFOVF9BRERfQUxMX0lPTU1VX01PREVTKC4uLikgXFxcXFxcbitGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREUodmZpb19zcGFwcl90Y2VfdjJfaW9tbXUsICMjX19WQV9BUkdTX18pXFxuKyNlbHNlXFxuICNkZWZpbmUgRklYVFVSRV9WQVJJQU5UX0FERF9BTExfSU9NTVVfTU9ERVMoLi4uKSBcXFxcXFxuIEZJWFRVUkVfVkFSSUFOVF9BRERfSU9NTVVfTU9ERSh2ZmlvX3R5cGUxX2lvbW11LCAjI19fVkFfQVJHU19fKTsgXFxcXFxcbiBGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREUodmZpb190eXBlMXYyX2lvbW11LCAjI19fVkFfQVJHU19fKTsgXFxcXFxcbiBGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREUoaW9tbXVmZF9jb21wYXRfdHlwZTEsICMjX19WQV9BUkdTX18pOyBcXFxcXFxuIEZJWFRVUkVfVkFSSUFOVF9BRERfSU9NTVVfTU9ERShpb21tdWZkX2NvbXBhdF90eXBlMXYyLCAjI19fVkFfQVJHU19fKTsgXFxcXFxcbiBGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREUoaW9tbXVmZCwgIyNfX1ZBX0FSR1NfXylcXG4rI2VuZGlmXFxuIFxcbiAjZW5kaWYgLyogU0VMRlRFU1RTX1ZGSU9fTElCX0lOQ0xVREVfTElCVkZJT19JT01NVV9IICovXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2lvbW11LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pb21tdS5jXFxuaW5kZXggMDM1ZGFjMDY5ZDYwMTYuLjE5ZDE5YmI0NWExNGI1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2lvbW11LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pb21tdS5jXFxuQEAgLTE2LDkgKzE2LDExIEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdmZpby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW9tbXVmZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2l6ZXMuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCIuLi8uLi8uLi9rc2VsZnRlc3QuaFxcXCJcXG4gI2luY2x1ZGUgXFx1MDAzY2xpYnZmaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbWl0cy5oXFx1MDAzZVxcbiBcXG4gY29uc3QgY2hhciAqZGVmYXVsdF9pb21tdV9tb2RlID0gTU9ERV9JT01NVUZEO1xcbiBcXG5AQCAtNDcsNiArNDksMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpb21tdV9tb2RlIGlvbW11X21vZGVzW10gPSB7XFxuIFxcdHtcXG4gXFx0XFx0Lm5hbWUgPSBNT0RFX0lPTU1VRkQsXFxuIFxcdH0sXFxuKyNpZmRlZiBfX3Bvd2VycGNfX1xcbitcXHR7XFxuK1xcdFxcdC5uYW1lID0gTU9ERV9WRklPX1NQQVBSX1RDRV9WMl9JT01NVSxcXG4rXFx0XFx0LmNvbnRhaW5lcl9wYXRoID0gXFxcIi9kZXYvdmZpby92ZmlvXFxcIixcXG4rXFx0XFx0LmlvbW11X3R5cGUgPSBWRklPX1NQQVBSX1RDRV92Ml9JT01NVSxcXG4rXFx0fSxcXG4rI2VuZGlmXFxuIH07XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGlvbW11X21vZGUgKmxvb2t1cF9pb21tdV9tb2RlKGNvbnN0IGNoYXIgKmlvbW11X21vZGUpXFxuQEAgLTg2LDYgKzk1LDIzMyBAQCBpbnQgX19pb21tdV9odmEyaW92YShzdHJ1Y3QgaW9tbXUgKmlvbW11LCB2b2lkICp2YWRkciwgaW92YV90ICppb3ZhKVxcbiBcXHRyZXR1cm4gLUVOT0VOVDtcXG4gfVxcbiBcXG4rI2lmZGVmIF9fcG93ZXJwY19fXFxuK3N0YXRpYyBib29sIGlvbW11X2lzX3NwYXByX3RjZV92MihzdHJ1Y3QgaW9tbXUgKmlvbW11KVxcbit7XFxuK1xcdHJldHVybiAhIShpb21tdS1cXHUwMDNlbW9kZS1cXHUwMDNlaW9tbXVfdHlwZSA9PSBWRklPX1NQQVBSX1RDRV92Ml9JT01NVSk7XFxuK31cXG4rXFxuK3N0YXRpYyB1MzIgcGFnZV9zaXplX3RvX3NoaWZ0KHU2NCBwYWdlX3NpemUpXFxuK3tcXG4rXFx0cmV0dXJuIF9fYnVpbHRpbl9jdHpsbChwYWdlX3NpemUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHNwYXByX3RjZV9yZWFkX2RlZmF1bHRfd2luZG93KHN0cnVjdCBpb21tdSAqaW9tbXUpXFxuK3tcXG4rXFx0c3RydWN0IHZmaW9faW9tbXVfc3BhcHJfdGNlX2luZm8gaW5mbyA9IHtcXG4rXFx0XFx0LmFyZ3N6ID0gc2l6ZW9mKGluZm8pLFxcbitcXHR9O1xcbitcXG4rXFx0aWYgKGlvbW11LVxcdTAwM2VkZWZhdWx0X3dpbmRvdy52YWxpZClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAoaW9jdGwoaW9tbXUtXFx1MDAzZWNvbnRhaW5lcl9mZCwgVkZJT19JT01NVV9TUEFQUl9UQ0VfR0VUX0lORk8sIFxcdTAwMjZpbmZvKSlcXG4rXFx0XFx0cmV0dXJuIC1lcnJubztcXG4rXFxuK1xcdGlvbW11LVxcdTAwM2VkZWZhdWx0X3dpbmRvdy5zdGFydCA9IGluZm8uZG1hMzJfd2luZG93X3N0YXJ0O1xcbitcXHRpb21tdS1cXHUwMDNlZGVmYXVsdF93aW5kb3cuc2l6ZSA9IGluZm8uZG1hMzJfd2luZG93X3NpemU7XFxuK1xcdGlvbW11LVxcdTAwM2VkZWZhdWx0X3dpbmRvdy5wYWdlX3NoaWZ0ID0gcGFnZV9zaXplX3RvX3NoaWZ0KGdldHBhZ2VzaXplKCkpO1xcbitcXHRpb21tdS1cXHUwMDNlZGVmYXVsdF93aW5kb3cudmFsaWQgPSB0cnVlO1xcbitcXHRpb21tdS1cXHUwMDNlZGVmYXVsdF93aW5kb3cuZHluYW1pYyA9IGZhbHNlO1xcbitcXHRpb21tdS1cXHUwMDNlZGVmYXVsdF93aW5kb3cucmVtb3ZlX29uX2NsZWFudXAgPSBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHNwYXByX3RjZV9jcmVhdGVfZGR3KHN0cnVjdCBpb21tdSAqaW9tbXUsIHU2NCBtaW5fc2l6ZSwgdTMyIHBhZ2Vfc2hpZnQpXFxuK3tcXG4rXFx0c3RydWN0IHZmaW9faW9tbXVfc3BhcHJfdGNlX2NyZWF0ZSBjcmVhdGUgPSB7XFxuK1xcdFxcdC5hcmdzeiA9IHNpemVvZihjcmVhdGUpLFxcbitcXHRcXHQucGFnZV9zaGlmdCA9IHBhZ2Vfc2hpZnQsXFxuK1xcdFxcdC5sZXZlbHMgPSAxLFxcbitcXHRcXHQud2luZG93X3NpemUgPSBtaW5fc2l6ZSxcXG4rXFx0fTtcXG4rXFxuK1xcdGlmIChpb2N0bChpb21tdS1cXHUwMDNlY29udGFpbmVyX2ZkLCBWRklPX0lPTU1VX1NQQVBSX1RDRV9DUkVBVEUsIFxcdTAwMjZjcmVhdGUpKVxcbitcXHRcXHRyZXR1cm4gLWVycm5vO1xcbitcXG4rXFx0aW9tbXUtXFx1MDAzZWRkd193aW5kb3cuc3RhcnQgPSBjcmVhdGUuc3RhcnRfYWRkcjtcXG4rXFx0aW9tbXUtXFx1MDAzZWRkd193aW5kb3cuc2l6ZSA9IGNyZWF0ZS53aW5kb3dfc2l6ZTtcXG4rXFx0aW9tbXUtXFx1MDAzZWRkd193aW5kb3cucGFnZV9zaGlmdCA9IHBhZ2Vfc2hpZnQ7XFxuK1xcdGlvbW11LVxcdTAwM2VkZHdfd2luZG93LnZhbGlkID0gdHJ1ZTtcXG4rXFx0aW9tbXUtXFx1MDAzZWRkd193aW5kb3cuZHluYW1pYyA9IHRydWU7XFxuK1xcdGlvbW11LVxcdTAwM2VkZHdfd2luZG93LnJlbW92ZV9vbl9jbGVhbnVwID0gdHJ1ZTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHNwYXByX3RjZV9yZW1vdmVfd2luZG93KHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBzcGFwcl90Y2Vfd2luZG93ICp3aW5kb3cpXFxuK3tcXG4rXFx0c3RydWN0IHZmaW9faW9tbXVfc3BhcHJfdGNlX3JlbW92ZSByZW1vdmUgPSB7XFxuK1xcdFxcdC5hcmdzeiA9IHNpemVvZihyZW1vdmUpLFxcbitcXHRcXHQuc3RhcnRfYWRkciA9IHdpbmRvdy1cXHUwMDNlc3RhcnQsXFxuK1xcdH07XFxuK1xcbitcXHRpZiAoIXdpbmRvdy1cXHUwMDNldmFsaWQgfHwgIXdpbmRvdy1cXHUwMDNlcmVtb3ZlX29uX2NsZWFudXApXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKGlvY3RsKGlvbW11LVxcdTAwM2Vjb250YWluZXJfZmQsIFZGSU9fSU9NTVVfU1BBUFJfVENFX1JFTU9WRSwgXFx1MDAyNnJlbW92ZSkpXFxuK1xcdFxcdHJldHVybiAtZXJybm87XFxuK1xcbitcXHR3aW5kb3ctXFx1MDAzZXZhbGlkID0gZmFsc2U7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBzcGFwcl90Y2Vfd2luZG93X3NhdGlzZmllcyhzdHJ1Y3Qgc3BhcHJfdGNlX3dpbmRvdyAqd2luZG93LFxcbitcXHRcXHRcXHRcXHQgICAgICAgdTY0IG1pbl9zaXplLCB1MzIgcGFnZV9zaGlmdCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGJvb2wgcmVxdWlyZV9keW5hbWljKVxcbit7XFxuK1xcdGlmICghd2luZG93IHx8ICF3aW5kb3ctXFx1MDAzZXZhbGlkKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAocmVxdWlyZV9keW5hbWljIFxcdTAwMjZcXHUwMDI2ICF3aW5kb3ctXFx1MDAzZWR5bmFtaWMpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmICh3aW5kb3ctXFx1MDAzZXNpemUgXFx1MDAzYyBtaW5fc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWYgKHdpbmRvdy1cXHUwMDNlcGFnZV9zaGlmdCAhPSBwYWdlX3NoaWZ0KVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBpb21tdV9pb3ZhX3JhbmdlICpzcGFwcl90Y2VfaW92YV9yYW5nZXMoc3RydWN0IGlvbW11ICppb21tdSwgdTMyICpucmFuZ2VzKVxcbit7XFxuK1xcdHN0cnVjdCBpb21tdV9pb3ZhX3JhbmdlICpyYW5nZXM7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIWlvbW11LVxcdTAwM2VhY3RpdmVfd2luZG93KSB7XFxuK1xcdFxcdHJldCA9IGlvbW11X3ByZXBhcmVfZG1hX3dpbmRvdyhpb21tdSwgU1pfMUcsIGdldHBhZ2VzaXplKCksIGZhbHNlKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdHJhbmdlcyA9IGNhbGxvYygxLCBzaXplb2YoKnJhbmdlcykpO1xcbitcXHRWRklPX0FTU0VSVF9OT1RfTlVMTChyYW5nZXMpO1xcbitcXG4rXFx0cmFuZ2VzWzBdLnN0YXJ0ID0gaW9tbXUtXFx1MDAzZWFjdGl2ZV93aW5kb3ctXFx1MDAzZXN0YXJ0O1xcbitcXHRyYW5nZXNbMF0ubGFzdCA9IGlvbW11LVxcdTAwM2VhY3RpdmVfd2luZG93LVxcdTAwM2VzdGFydCArIGlvbW11LVxcdTAwM2VhY3RpdmVfd2luZG93LVxcdTAwM2VzaXplIC0gMTtcXG4rXFxuK1xcdCpucmFuZ2VzID0gMTtcXG4rXFx0cmV0dXJuIHJhbmdlcztcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgc3BhcHJfdGNlX2lvdmFfaW5zaWRlX3dpbmRvdyhzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uKVxcbit7XFxuK1xcdHN0cnVjdCBzcGFwcl90Y2Vfd2luZG93ICp3aW5kb3cgPSBpb21tdS1cXHUwMDNlYWN0aXZlX3dpbmRvdztcXG4rXFxuK1xcdGlmICghd2luZG93IHx8ICF3aW5kb3ctXFx1MDAzZXZhbGlkKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAocmVnaW9uLVxcdTAwM2Vpb3ZhIFxcdTAwM2Mgd2luZG93LVxcdTAwM2VzdGFydClcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWYgKHJlZ2lvbi1cXHUwMDNlaW92YSArIHJlZ2lvbi1cXHUwMDNlc2l6ZSBcXHUwMDNlIHdpbmRvdy1cXHUwMDNlc3RhcnQgKyB3aW5kb3ctXFx1MDAzZXNpemUpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHNwYXByX3JlZ2lzdGVyX21lbW9yeShzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uKVxcbit7XFxuK1xcdHN0cnVjdCB2ZmlvX2lvbW11X3NwYXByX3JlZ2lzdGVyX21lbW9yeSBhcmdzID0ge1xcbitcXHRcXHQuYXJnc3ogPSBzaXplb2YoYXJncyksXFxuK1xcdFxcdC52YWRkciA9ICh1NjQpcmVnaW9uLVxcdTAwM2V2YWRkcixcXG4rXFx0XFx0LnNpemUgPSByZWdpb24tXFx1MDAzZXNpemUsXFxuK1xcdH07XFxuK1xcbitcXHRpZiAoaW9jdGwoaW9tbXUtXFx1MDAzZWNvbnRhaW5lcl9mZCwgVkZJT19JT01NVV9TUEFQUl9SRUdJU1RFUl9NRU1PUlksIFxcdTAwMjZhcmdzKSlcXG4rXFx0XFx0cmV0dXJuIC1lcnJubztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHNwYXByX3VucmVnaXN0ZXJfbWVtb3J5KHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24pXFxuK3tcXG4rXFx0c3RydWN0IHZmaW9faW9tbXVfc3BhcHJfcmVnaXN0ZXJfbWVtb3J5IGFyZ3MgPSB7XFxuK1xcdFxcdC5hcmdzeiA9IHNpemVvZihhcmdzKSxcXG4rXFx0XFx0LnZhZGRyID0gKHU2NClyZWdpb24tXFx1MDAzZXZhZGRyLFxcbitcXHRcXHQuc2l6ZSA9IHJlZ2lvbi1cXHUwMDNlc2l6ZSxcXG4rXFx0fTtcXG4rXFxuK1xcdGlmIChpb2N0bChpb21tdS1cXHUwMDNlY29udGFpbmVyX2ZkLCBWRklPX0lPTU1VX1NQQVBSX1VOUkVHSVNURVJfTUVNT1JZLCBcXHUwMDI2YXJncykpXFxuK1xcdFxcdHJldHVybiAtZXJybm87XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4raW50IGlvbW11X3ByZXBhcmVfZG1hX3dpbmRvdyhzdHJ1Y3QgaW9tbXUgKmlvbW11LCB1NjQgbWluX3NpemUsXFxuK1xcdFxcdFxcdCAgICAgdTY0IHBhZ2Vfc2l6ZSwgYm9vbCBmb3JjZV9keW5hbWljKVxcbit7XFxuK1xcdHUzMiBwYWdlX3NoaWZ0O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCFpb21tdV9pc19zcGFwcl90Y2VfdjIoaW9tbXUpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmICghcGFnZV9zaXplKVxcbitcXHRcXHRwYWdlX3NpemUgPSBnZXRwYWdlc2l6ZSgpO1xcbitcXG4rXFx0cGFnZV9zaGlmdCA9IHBhZ2Vfc2l6ZV90b19zaGlmdChwYWdlX3NpemUpO1xcbitcXG4rXFx0cmV0ID0gc3BhcHJfdGNlX3JlYWRfZGVmYXVsdF93aW5kb3coaW9tbXUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0LypcXG4rXFx0ICogTm9ybWFsIG1hcHBpbmcgcGF0aDpcXG4rXFx0ICogdXNlIGRlZmF1bHQgd2luZG93IHdoZW4gaXQgc2F0aXNmaWVzIHRoZSByZXF1ZXN0LlxcbitcXHQgKi9cXG4rXFx0aWYgKCFmb3JjZV9keW5hbWljIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBzcGFwcl90Y2Vfd2luZG93X3NhdGlzZmllcyhcXHUwMDI2aW9tbXUtXFx1MDAzZWRlZmF1bHRfd2luZG93LFxcbitcXHRcXHRcXHRcXHQgICAgICAgbWluX3NpemUsIHBhZ2Vfc2hpZnQsIGZhbHNlKSkge1xcbitcXHRcXHRpb21tdS1cXHUwMDNlYWN0aXZlX3dpbmRvdyA9IFxcdTAwMjZpb21tdS1cXHUwMDNlZGVmYXVsdF93aW5kb3c7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBEeW5hbWljIHBhdGg6XFxuK1xcdCAqIHVzZSBleGlzdGluZyBERFcgaWYgaXQgYWxyZWFkeSBzYXRpc2ZpZXMgdGhlIHJlcXVlc3QuXFxuK1xcdCAqL1xcbitcXHRpZiAoc3BhcHJfdGNlX3dpbmRvd19zYXRpc2ZpZXMoXFx1MDAyNmlvbW11LVxcdTAwM2VkZHdfd2luZG93LFxcbitcXHRcXHRcXHRcXHQgICAgICAgbWluX3NpemUsIHBhZ2Vfc2hpZnQsIHRydWUpKSB7XFxuK1xcdFxcdGlvbW11LVxcdTAwM2VhY3RpdmVfd2luZG93ID0gXFx1MDAyNmlvbW11LVxcdTAwM2VkZHdfd2luZG93O1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogTmVpdGhlciBkZWZhdWx0IG5vciBERFcgaXMgc3VmZmljaWVudC5cXG4rXFx0ICogUmVtb3ZlIG9ubHkgdGhlIHNlbGZ0ZXN0LWNyZWF0ZWQgRERXLCB0aGVuIGNyZWF0ZSBhIG5ldyBERFcuXFxuK1xcdCAqL1xcbitcXHRyZXQgPSBzcGFwcl90Y2VfcmVtb3ZlX3dpbmRvdyhpb21tdSwgXFx1MDAyNmlvbW11LVxcdTAwM2VkZHdfd2luZG93KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHNwYXByX3RjZV9jcmVhdGVfZGR3KGlvbW11LCBtaW5fc2l6ZSwgcGFnZV9zaGlmdCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpb21tdS1cXHUwMDNlYWN0aXZlX3dpbmRvdyA9IFxcdTAwMjZpb21tdS1cXHUwMDNlZGR3X3dpbmRvdztcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rI2Vsc2VcXG4raW50IGlvbW11X3ByZXBhcmVfZG1hX3dpbmRvdyhzdHJ1Y3QgaW9tbXUgKmlvbW11LCB1NjQgbWluX3NpemUsXFxuK1xcdFxcdFxcdCAgICAgdTY0IHBhZ2Vfc2l6ZSwgYm9vbCBmb3JjZV9keW5hbWljKVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuKyNlbmRpZlxcbitcXG4rYm9vbCBpb21tdV9zdXBwb3J0c191bm1hcF9hbGwoc3RydWN0IGlvbW11ICppb21tdSlcXG4re1xcbisjaWZkZWYgX19wb3dlcnBjX19cXG4rXFx0aWYgKGlvbW11X2lzX3NwYXByX3RjZV92Mihpb21tdSkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rI2VuZGlmXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbiBpb3ZhX3QgaW9tbXVfaHZhMmlvdmEoc3RydWN0IGlvbW11ICppb21tdSwgdm9pZCAqdmFkZHIpXFxuIHtcXG4gXFx0aW92YV90IGlvdmE7XFxuQEAgLTEwNiw5ICszNDIsMjcgQEAgc3RhdGljIGludCB2ZmlvX2lvbW11X21hcChzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uKVxcbiBcXHRcXHQuaW92YSA9IHJlZ2lvbi1cXHUwMDNlaW92YSxcXG4gXFx0XFx0LnNpemUgPSByZWdpb24tXFx1MDAzZXNpemUsXFxuIFxcdH07XFxuK1xcdGludCByZXQ7XFxuIFxcbi1cXHRpZiAoaW9jdGwoaW9tbXUtXFx1MDAzZWNvbnRhaW5lcl9mZCwgVkZJT19JT01NVV9NQVBfRE1BLCBcXHUwMDI2YXJncykpXFxuKyNpZmRlZiBfX3Bvd2VycGNfX1xcbitcXHRpZiAoaW9tbXVfaXNfc3BhcHJfdGNlX3YyKGlvbW11KSkge1xcbitcXHRcXHRpZiAoIXNwYXByX3RjZV9pb3ZhX2luc2lkZV93aW5kb3coaW9tbXUsIHJlZ2lvbikpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0cmV0ID0gc3BhcHJfcmVnaXN0ZXJfbWVtb3J5KGlvbW11LCByZWdpb24pO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuKyNlbmRpZlxcbitcXG4rXFx0cmV0ID0gaW9jdGwoaW9tbXUtXFx1MDAzZWNvbnRhaW5lcl9mZCwgVkZJT19JT01NVV9NQVBfRE1BLCBcXHUwMDI2YXJncyk7XFxuK1xcdGlmIChyZXQpIHtcXG4rI2lmZGVmIF9fcG93ZXJwY19fXFxuK1xcdFxcdGlmIChpb21tdV9pc19zcGFwcl90Y2VfdjIoaW9tbXUpKVxcbitcXHRcXHRcXHRzcGFwcl91bnJlZ2lzdGVyX21lbW9yeShpb21tdSwgcmVnaW9uKTtcXG4rI2VuZGlmXFxuIFxcdFxcdHJldHVybiAtZXJybm87XFxuK1xcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTE3MCw4ICs0MjQsMTggQEAgc3RhdGljIGludCBfX3ZmaW9faW9tbXVfdW5tYXAoaW50IGZkLCB1NjQgaW92YSwgdTY0IHNpemUsIHUzMiBmbGFncywgdTY0ICp1bm1hcHBcXG4gc3RhdGljIGludCB2ZmlvX2lvbW11X3VubWFwKHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24sXFxuIFxcdFxcdFxcdCAgICB1NjQgKnVubWFwcGVkKVxcbiB7XFxuLVxcdHJldHVybiBfX3ZmaW9faW9tbXVfdW5tYXAoaW9tbXUtXFx1MDAzZWNvbnRhaW5lcl9mZCwgcmVnaW9uLVxcdTAwM2Vpb3ZhLFxcbi1cXHRcXHRcXHRcXHQgIHJlZ2lvbi1cXHUwMDNlc2l6ZSwgMCwgdW5tYXBwZWQpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gX192ZmlvX2lvbW11X3VubWFwKGlvbW11LVxcdTAwM2Vjb250YWluZXJfZmQsIHJlZ2lvbi1cXHUwMDNlaW92YSxcXG4rXFx0XFx0XFx0XFx0IHJlZ2lvbi1cXHUwMDNlc2l6ZSwgMCwgdW5tYXBwZWQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbisjaWZkZWYgX19wb3dlcnBjX19cXG4rXFx0aWYgKGlvbW11X2lzX3NwYXByX3RjZV92Mihpb21tdSkpXFxuK1xcdFxcdHJldCA9IHNwYXByX3VucmVnaXN0ZXJfbWVtb3J5KGlvbW11LCByZWdpb24pO1xcbisjZW5kaWZcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgX19pb21tdWZkX3VubWFwKGludCBmZCwgdTY0IGlvdmEsIHU2NCBsZW5ndGgsIHUzMiBpb2FzX2lkLCB1NjQgKnVubWFwcGVkKVxcbkBAIC0zMTcsNiArNTgxLDExIEBAIHN0YXRpYyBzdHJ1Y3QgaW9tbXVfaW92YV9yYW5nZSAqdmZpb19pb21tdV9pb3ZhX3JhbmdlcyhzdHJ1Y3QgaW9tbXUgKmlvbW11LFxcbiBcXHRzdHJ1Y3QgdmZpb19pbmZvX2NhcF9oZWFkZXIgKmhkcjtcXG4gXFx0c3RydWN0IGlvbW11X2lvdmFfcmFuZ2UgKnJhbmdlcyA9IE5VTEw7XFxuIFxcbisjaWZkZWYgX19wb3dlcnBjX19cXG4rXFx0aWYgKGlvbW11X2lzX3NwYXByX3RjZV92Mihpb21tdSkpXFxuK1xcdFxcdHJldHVybiBzcGFwcl90Y2VfaW92YV9yYW5nZXMoaW9tbXUsIG5yYW5nZXMpO1xcbisjZW5kaWZcXG4rXFxuIFxcdGluZm8gPSB2ZmlvX2lvbW11X2dldF9pbmZvKGlvbW11LVxcdTAwM2Vjb250YWluZXJfZmQpO1xcbiBcXHRoZHIgPSB2ZmlvX2lvbW11X2luZm9fY2FwX2hkcihpbmZvLCBWRklPX0lPTU1VX1RZUEUxX0lORk9fQ0FQX0lPVkFfUkFOR0UpO1xcbiBcXHRWRklPX0FTU0VSVF9OT1RfTlVMTChoZHIpO1xcbkBAIC00NTUsNiArNzI0LDExIEBAIHN0cnVjdCBpb21tdSAqaW9tbXVfaW5pdChjb25zdCBjaGFyICppb21tdV9tb2RlKVxcbiBcXG4gdm9pZCBpb21tdV9jbGVhbnVwKHN0cnVjdCBpb21tdSAqaW9tbXUpXFxuIHtcXG4rI2lmZGVmIF9fcG93ZXJwY19fXFxuK1xcdGlmIChpb21tdV9pc19zcGFwcl90Y2VfdjIoaW9tbXUpKVxcbitcXHRcXHRzcGFwcl90Y2VfcmVtb3ZlX3dpbmRvdyhpb21tdSwgXFx1MDAyNmlvbW11LVxcdTAwM2VkZHdfd2luZG93KTtcXG4rI2VuZGlmXFxuK1xcbiBcXHRpZiAoaW9tbXUtXFx1MDAzZWlvbW11ZmQpXFxuIFxcdFxcdFZGSU9fQVNTRVJUX0VRKGNsb3NlKGlvbW11LVxcdTAwM2Vpb21tdWZkKSwgMCk7XFxuIFxcdGVsc2VcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5jXFxuaW5kZXggM2EzZDFlZDYzNWMxZGYuLjEyZjczMTk2M2IwNThhIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8uY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8uY1xcbkBAIC0xMDEsMyArMTAxLDQwIEBAIHZvaWQgKm1tYXBfcmVzZXJ2ZShzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduLCBzaXplX3Qgb2Zmc2V0KVxcbiBcXG4gXFx0cmV0dXJuIG1hcF9hbGlnbjtcXG4gfVxcbitcXG4rc3RhdGljIGNvbnN0IGNoYXIgKmdldF9pb21tdV9tb2RlX2Vudih2b2lkKVxcbit7XFxuK1xcdGNvbnN0IGNoYXIgKm1vZGU7XFxuK1xcdHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdmFsaWRfbW9kZXNbXSA9IHtcXG4rXFx0XFx0TU9ERV9WRklPX1RZUEUxX0lPTU1VLFxcbitcXHRcXHRNT0RFX1ZGSU9fVFlQRTFWMl9JT01NVSxcXG4rXFx0XFx0TU9ERV9JT01NVUZEX0NPTVBBVF9UWVBFMSxcXG4rXFx0XFx0TU9ERV9JT01NVUZEX0NPTVBBVF9UWVBFMVYyLFxcbitcXHRcXHRNT0RFX0lPTU1VRkQsXFxuKyNpZmRlZiBfX3Bvd2VycGNfX1xcbitcXHRcXHRNT0RFX1ZGSU9fU1BBUFJfVENFX1YyX0lPTU1VLFxcbisjZW5kaWZcXG4rXFx0fTtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRtb2RlID0gZ2V0ZW52KFxcXCJWRklPX1NFTEZURVNUU19JT01NVV9NT0RFXFxcIik7XFxuK1xcdGlmICghbW9kZSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRSh2YWxpZF9tb2Rlcyk7IGkrKykge1xcbitcXHRcXHRpZiAoIXN0cmNtcChtb2RlLCB2YWxpZF9tb2Rlc1tpXSkpXFxuK1xcdFxcdFxcdHJldHVybiBtb2RlO1xcbitcXHR9XFxuK1xcbitcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIkludmFsaWQgVkZJT19TRUxGVEVTVFNfSU9NTVVfTU9ERTogJXNcXFxcblxcXCIsIG1vZGUpO1xcbitcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIlZhbGlkIG1vZGVzIGFyZTpcXFxcblxcXCIpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRSh2YWxpZF9tb2Rlcyk7IGkrKylcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCIgICVzXFxcXG5cXFwiLCB2YWxpZF9tb2Rlc1tpXSk7XFxuK1xcdGV4aXQoS1NGVF9TS0lQKTtcXG4rfVxcbitcXG4rY29uc3QgY2hhciAqdmZpb19zZWxmdGVzdHNfZ2V0X2lvbW11X21vZGUodm9pZClcXG4re1xcbitcXHRyZXR1cm4gZ2V0X2lvbW11X21vZGVfZW52KCk7XFxuK31cXG4rXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19kbWFfbWFwcGluZ190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL3ZmaW9fZG1hX21hcHBpbmdfdGVzdC5jXFxuaW5kZXggN2QwZGU4Yzc5ZGUxM2YuLmNkMmQzMjc2YTQ2YzQ2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19kbWFfbWFwcGluZ190ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL3ZmaW9fZG1hX21hcHBpbmdfdGVzdC5jXFxuQEAgLTEsNSArMSw2IEBAXFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdHJpbmcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy9tbWFuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4gXFxuQEAgLTExOSw4ICsxMjAsMTkgQEAgRklYVFVSRV9WQVJJQU5UX0FERF9BTExfSU9NTVVfTU9ERVMoYW5vbnltb3VzX2h1Z2V0bGJfMWdiLCBTWl8xRywgTUFQX0hVR0VUTEIgfFxcbiBcXG4gRklYVFVSRV9TRVRVUCh2ZmlvX2RtYV9tYXBwaW5nX3Rlc3QpXFxuIHtcXG4rXFx0Y29uc3QgdTY0IHBhZ2Vfc2l6ZSA9IHZhcmlhbnQtXFx1MDAzZXNpemUgPzogZ2V0cGFnZXNpemUoKTtcXG4rXFx0Y29uc3QgYm9vbCBmb3JjZV9keW5hbWljID0gISF2YXJpYW50LVxcdTAwM2VzaXplO1xcbitcXHRpbnQgcmV0O1xcbitcXG4gXFx0c2VsZi1cXHUwMDNlaW9tbXUgPSBpb21tdV9pbml0KHZhcmlhbnQtXFx1MDAzZWlvbW11X21vZGUpO1xcbiBcXHRzZWxmLVxcdTAwM2VkZXZpY2UgPSB2ZmlvX3BjaV9kZXZpY2VfaW5pdChkZXZpY2VfYmRmLCBzZWxmLVxcdTAwM2Vpb21tdSk7XFxuK1xcbitcXHRyZXQgPSBpb21tdV9wcmVwYXJlX2RtYV93aW5kb3coc2VsZi1cXHUwMDNlaW9tbXUsIHBhZ2Vfc2l6ZSwgcGFnZV9zaXplLFxcbitcXHRcXHRcXHRcXHQgICAgICAgZm9yY2VfZHluYW1pYyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdFNLSVAocmV0dXJuLCBcXFwiRE1BIHdpbmRvdyB1bmF2YWlsYWJsZTogJXMgKCVkKVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgICBzdHJlcnJvcigtcmV0KSwgLXJldCk7XFxuK1xcbiBcXHRzZWxmLVxcdTAwM2Vpb3ZhX2FsbG9jYXRvciA9IGlvdmFfYWxsb2NhdG9yX2luaXQoc2VsZi1cXHUwMDNlaW9tbXUpO1xcbiB9XFxuIFxcbkBAIC0yMjcsNiArMjM5LDcgQEAgRklYVFVSRV9TRVRVUCh2ZmlvX2RtYV9tYXBfbGltaXRfdGVzdClcXG4gXFx0dTY0IHJlZ2lvbl9zaXplID0gZ2V0cGFnZXNpemUoKTtcXG4gXFx0aW92YV90IGxhc3RfaW92YTtcXG4gXFx0dTMyIG5yYW5nZXM7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBPdmVyLWFsbG9jYXRlIG1tYXAgYnkgZG91YmxlIHRoZSBzaXplIHRvIHByb3ZpZGUgZW5vdWdoIGJhY2tpbmcgdmFkZHJcXG5AQCAtMjM2LDYgKzI0OSwxMyBAQCBGSVhUVVJFX1NFVFVQKHZmaW9fZG1hX21hcF9saW1pdF90ZXN0KVxcbiBcXG4gXFx0c2VsZi1cXHUwMDNlaW9tbXUgPSBpb21tdV9pbml0KHZhcmlhbnQtXFx1MDAzZWlvbW11X21vZGUpO1xcbiBcXHRzZWxmLVxcdTAwM2VkZXZpY2UgPSB2ZmlvX3BjaV9kZXZpY2VfaW5pdChkZXZpY2VfYmRmLCBzZWxmLVxcdTAwM2Vpb21tdSk7XFxuK1xcbitcXHRyZXQgPSBpb21tdV9wcmVwYXJlX2RtYV93aW5kb3coc2VsZi1cXHUwMDNlaW9tbXUsIHJlZ2lvbl9zaXplLCByZWdpb25fc2l6ZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGZhbHNlKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0U0tJUChyZXR1cm4sIFxcXCJETUEgd2luZG93IHVuYXZhaWxhYmxlOiAlcyAoJWQpXFxcXG5cXFwiLFxcbitcXHRcXHQgICAgIHN0cmVycm9yKC1yZXQpLCAtcmV0KTtcXG4rXFxuIFxcdHJlZ2lvbi1cXHUwMDNldmFkZHIgPSBtbWFwKE5VTEwsIHNlbGYtXFx1MDAzZW1tYXBfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcXG4gXFx0XFx0XFx0ICAgICBNQVBfQU5PTllNT1VTIHwgTUFQX1BSSVZBVEUsIC0xLCAwKTtcXG4gXFx0QVNTRVJUX05FKHJlZ2lvbi1cXHUwMDNldmFkZHIsIE1BUF9GQUlMRUQpO1xcbkBAIC0yNzcsNiArMjk3LDggQEAgVEVTVF9GKHZmaW9fZG1hX21hcF9saW1pdF90ZXN0LCB1bm1hcF9hbGwpXFxuIFxcdHU2NCB1bm1hcHBlZDtcXG4gXFx0aW50IHJjO1xcbiBcXG4rXFx0aWYgKCFpb21tdV9zdXBwb3J0c191bm1hcF9hbGwoc2VsZi1cXHUwMDNlaW9tbXUpKVxcbitcXHRcXHRTS0lQKHJldHVybiwgXFxcIklPTU1VIGJhY2tlbmQgZG9lcyBub3Qgc3VwcG9ydCB1bm1hcC1hbGxcXFxcblxcXCIpO1xcbiBcXHRpb21tdV9tYXAoc2VsZi1cXHUwMDNlaW9tbXUsIHJlZ2lvbik7XFxuIFxcdEFTU0VSVF9FUShyZWdpb24tXFx1MDAzZWlvdmEsIHRvX2lvdmEoc2VsZi1cXHUwMDNlZGV2aWNlLCByZWdpb24tXFx1MDAzZXZhZGRyKSk7XFxuIFxcbkBAIC0yOTQsMTAgKzMxNiwxOCBAQCBURVNUX0YodmZpb19kbWFfbWFwX2xpbWl0X3Rlc3QsIG92ZXJmbG93KVxcbiBcXHRyZWdpb24tXFx1MDAzZXNpemUgPSBzZWxmLVxcdTAwM2VtbWFwX3NpemU7XFxuIFxcbiBcXHRyYyA9IF9faW9tbXVfbWFwKHNlbGYtXFx1MDAzZWlvbW11LCByZWdpb24pO1xcbisjaWZkZWYgX19wb3dlcnBjX19cXG4rXFx0QVNTRVJUX0VRKHJjLCAtRU5YSU8pO1xcbisjZWxzZVxcbiBcXHRBU1NFUlRfRVEocmMsIC1FT1ZFUkZMT1cpO1xcbisjZW5kaWZcXG4gXFxuIFxcdHJjID0gX19pb21tdV91bm1hcChzZWxmLVxcdTAwM2Vpb21tdSwgcmVnaW9uLCBOVUxMKTtcXG4rI2lmZGVmIF9fcG93ZXJwY19fXFxuK1xcdEFTU0VSVF9FUShyYywgLUVOWElPKTtcXG4rI2Vsc2VcXG4gXFx0QVNTRVJUX0VRKHJjLCAtRU9WRVJGTE9XKTtcXG4rI2VuZGlmXFxuIH1cXG4gXFxuIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19wY2lfZGV2aWNlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19wY2lfZGV2aWNlX3Rlc3QuY1xcbmluZGV4IDkzYzExZmQ1ZTA4MTgyLi40NWI4YmY2MDUyN2E4NiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL3ZmaW9fcGNpX2RldmljZV90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL3ZmaW9fcGNpX2RldmljZV90ZXN0LmNcXG5AQCAtMjksNyArMjksNyBAQCBGSVhUVVJFKHZmaW9fcGNpX2RldmljZV90ZXN0KSB7XFxuIFxcbiBGSVhUVVJFX1NFVFVQKHZmaW9fcGNpX2RldmljZV90ZXN0KVxcbiB7XFxuLVxcdHNlbGYtXFx1MDAzZWlvbW11ID0gaW9tbXVfaW5pdChkZWZhdWx0X2lvbW11X21vZGUpO1xcbitcXHRzZWxmLVxcdTAwM2Vpb21tdSA9IGlvbW11X2luaXQodmZpb19zZWxmdGVzdHNfZ2V0X2lvbW11X21vZGUoKSk7XFxuIFxcdHNlbGYtXFx1MDAzZWRldmljZSA9IHZmaW9fcGNpX2RldmljZV9pbml0KGRldmljZV9iZGYsIHNlbGYtXFx1MDAzZWlvbW11KTtcXG4gfVxcbiBcXG5AQCAtMTIxLDcgKzEyMSw3IEBAIEZJWFRVUkVfVkFSSUFOVF9BREQodmZpb19wY2lfaXJxX3Rlc3QsIG1zaXgpIHtcXG4gXFxuIEZJWFRVUkVfU0VUVVAodmZpb19wY2lfaXJxX3Rlc3QpXFxuIHtcXG4tXFx0c2VsZi1cXHUwMDNlaW9tbXUgPSBpb21tdV9pbml0KGRlZmF1bHRfaW9tbXVfbW9kZSk7XFxuK1xcdHNlbGYtXFx1MDAzZWlvbW11ID0gaW9tbXVfaW5pdCh2ZmlvX3NlbGZ0ZXN0c19nZXRfaW9tbXVfbW9kZSgpKTtcXG4gXFx0c2VsZi1cXHUwMDNlZGV2aWNlID0gdmZpb19wY2lfZGV2aWNlX2luaXQoZGV2aWNlX2JkZiwgc2VsZi1cXHUwMDNlaW9tbXUpO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwOToyNzoyMS44ODU1NzA2NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUyNDAxNjc0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvLykgYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjNjJjZWQ2OWVmZmU2MzI3ZmY3MzhmOWRlYjA1YzY3NjkyMjBmYTViXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMyAwOToyNzoyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL01ha2VmaWxlXG5pbmRleCAyYzMyYzQ4ZGI1MDk4NS4uOGZkNmFmZDMzNGU1MzIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL01ha2VmaWxlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL01ha2VmaWxlXG5AQCAtMSw2ICsxLDYgQEBcbiBBUkNIID89ICQoc2hlbGwgdW5hbWUgLW0pXG4gXG4taWZlcSAoLCQoZmlsdGVyICQoQVJDSCksYWFyY2g2NCBhcm02NCB4ODYgeDg2XzY0KSlcbitpZmVxICgsJChmaWx0ZXIgJChBUkNIKSxhYXJjaDY0IGFybTY0IHg4NiB4ODZfNjQgcHBjNjQgcHBjNjRsZSkpXG4gIyBEbyBub3RoaW5nIG9uIHVuc3VwcG9ydGVkIGFyY2hpdGVjdHVyZXNcbiBpbmNsdWRlIC4uL2xpYi5ta1xuIGVsc2VcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby5oXG5pbmRleCAwNzg2MmI0NzA3NzdiZC4uYzBiNGEyYWIwNmM1YWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8uaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvLmhcbkBAIC0yNCw2ICsyNCwxNSBAQFxuIGNvbnN0IGNoYXIgKnZmaW9fc2VsZnRlc3RzX2dldF9iZGYoaW50ICphcmdjLCBjaGFyICphcmd2W10pO1xuIGNoYXIgKip2ZmlvX3NlbGZ0ZXN0c19nZXRfYmRmcyhpbnQgKmFyZ2MsIGNoYXIgKmFyZ3ZbXSwgaW50ICpucl9iZGZzKTtcbiBcbisvKlxuKyAqIFJldHVybiB0aGUgSU9NTVUgbW9kZSBzdHJpbmcgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVcbisgKiAkVkZJT19TRUxGVEVTVFNfSU9NTVVfTU9ERS5cbisgKlxuKyAqIFJldHVybnMgTlVMTCBpZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCwgYWxsb3dpbmdcbisgKiB0ZXN0cyB0byB1c2UgdGhlaXIgZGVmYXVsdCBtb2RlLlxuKyAqL1xuK2NvbnN0IGNoYXIgKnZmaW9fc2VsZnRlc3RzX2dldF9pb21tdV9tb2RlKHZvaWQpO1xuK1xuIC8qXG4gICogUmVzZXJ2ZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2Ugb2Ygc2l6ZSBhdCBhbiBhZGRyZXNzIHNhdGlzZnlpbmdcbiAgKiAodmFkZHIgJSBhbGlnbikgPT0gb2Zmc2V0LlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby9pb21tdS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL2lvbW11LmhcbmluZGV4IGU5YTMzODZhNDcxOTNhLi5jOWI5YWI5MjlmMWY5YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby9pb21tdS5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vaW9tbXUuaFxuQEAgLTI0LDEyICsyNCwyNiBAQCBzdHJ1Y3QgZG1hX3JlZ2lvbiB7XG4gXHR1NjQgc2l6ZTtcbiB9O1xuIFxuK3N0cnVjdCBzcGFwcl90Y2Vfd2luZG93IHtcbitcdHU2NCBzdGFydDtcbitcdHU2NCBzaXplO1xuK1x0dTMyIHBhZ2Vfc2hpZnQ7XG4rXHRib29sIHZhbGlkO1xuK1x0Ym9vbCBkeW5hbWljO1xuK1x0Ym9vbCByZW1vdmVfb25fY2xlYW51cDtcbit9O1xuK1xuIHN0cnVjdCBpb21tdSB7XG4gXHRjb25zdCBzdHJ1Y3QgaW9tbXVfbW9kZSAqbW9kZTtcbiBcdGludCBjb250YWluZXJfZmQ7XG4gXHRpbnQgaW9tbXVmZDtcbiBcdHUzMiBpb2FzX2lkO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBkbWFfcmVnaW9ucztcbisjaWZkZWYgX19wb3dlcnBjX19cbitcdHN0cnVjdCBzcGFwcl90Y2Vfd2luZG93IGRlZmF1bHRfd2luZG93O1xuK1x0c3RydWN0IHNwYXByX3RjZV93aW5kb3cgZGR3X3dpbmRvdztcbitcdHN0cnVjdCBzcGFwcl90Y2Vfd2luZG93ICphY3RpdmVfd2luZG93O1xuKyNlbmRpZlxuIH07XG4gXG4gc3RydWN0IGlvbW11ICppb21tdV9pbml0KGNvbnN0IGNoYXIgKmlvbW11X21vZGUpO1xuQEAgLTYxLDIyICs3NSwzNCBAQCBpb3ZhX3QgaW9tbXVfaHZhMmlvdmEoc3RydWN0IGlvbW11ICppb21tdSwgdm9pZCAqdmFkZHIpO1xuIFxuIHN0cnVjdCBpb21tdV9pb3ZhX3JhbmdlICppb21tdV9pb3ZhX3JhbmdlcyhzdHJ1Y3QgaW9tbXUgKmlvbW11LCB1MzIgKm5yYW5nZXMpO1xuIFxuK2ludCBpb21tdV9wcmVwYXJlX2RtYV93aW5kb3coc3RydWN0IGlvbW11ICppb21tdSwgdTY0IG1pbl9zaXplLFxuK1x0XHRcdCAgICAgdTY0IHBhZ2Vfc2l6ZSwgYm9vbCBmb3JjZV9keW5hbWljKTtcbitib29sIGlvbW11X3N1cHBvcnRzX3VubWFwX2FsbChzdHJ1Y3QgaW9tbXUgKmlvbW11KTtcbitcbiAjZGVmaW5lIE1PREVfVkZJT19UWVBFMV9JT01NVSBcInZmaW9fdHlwZTFfaW9tbXVcIlxuICNkZWZpbmUgTU9ERV9WRklPX1RZUEUxVjJfSU9NTVUgXCJ2ZmlvX3R5cGUxdjJfaW9tbXVcIlxuICNkZWZpbmUgTU9ERV9JT01NVUZEX0NPTVBBVF9UWVBFMSBcImlvbW11ZmRfY29tcGF0X3R5cGUxXCJcbiAjZGVmaW5lIE1PREVfSU9NTVVGRF9DT01QQVRfVFlQRTFWMiBcImlvbW11ZmRfY29tcGF0X3R5cGUxdjJcIlxuICNkZWZpbmUgTU9ERV9JT01NVUZEIFwiaW9tbXVmZFwiXG4rI2lmZGVmIF9fcG93ZXJwY19fXG4rI2RlZmluZSBNT0RFX1ZGSU9fU1BBUFJfVENFX1YyX0lPTU1VIFwidmZpb19zcGFwcl90Y2VfdjJfaW9tbXVcIlxuKyNlbmRpZlxuIFxuIC8qXG4gICogR2VuZXJhdG9yIGZvciBWRklPIHNlbGZ0ZXN0cyBmaXh0dXJlIHZhcmlhbnRzIHRoYXQgcmVwbGljYXRlIGFjcm9zcyBhbGxcbiAgKiBwb3NzaWJsZSBJT01NVSBtb2Rlcy4gVGVzdHMgbXVzdCBkZWZpbmUgRklYVFVSRV9WQVJJQU5UX0FERF9JT01NVV9NT0RFKClcbiAgKiB3aGljaCBzaG91bGQgdGhlbiB1c2UgRklYVFVSRV9WQVJJQU5UX0FERCgpIHRvIGNyZWF0ZSB0aGUgdmFyaWFudC5cbiAgKi9cbisjaWZkZWYgX19wb3dlcnBjX19cbisjZGVmaW5lIEZJWFRVUkVfVkFSSUFOVF9BRERfQUxMX0lPTU1VX01PREVTKC4uLikgXFxcbitGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREUodmZpb19zcGFwcl90Y2VfdjJfaW9tbXUsICMjX19WQV9BUkdTX18pXG4rI2Vsc2VcbiAjZGVmaW5lIEZJWFRVUkVfVkFSSUFOVF9BRERfQUxMX0lPTU1VX01PREVTKC4uLikgXFxcbiBGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREUodmZpb190eXBlMV9pb21tdSwgIyNfX1ZBX0FSR1NfXyk7IFxcXG4gRklYVFVSRV9WQVJJQU5UX0FERF9JT01NVV9NT0RFKHZmaW9fdHlwZTF2Ml9pb21tdSwgIyNfX1ZBX0FSR1NfXyk7IFxcXG4gRklYVFVSRV9WQVJJQU5UX0FERF9JT01NVV9NT0RFKGlvbW11ZmRfY29tcGF0X3R5cGUxLCAjI19fVkFfQVJHU19fKTsgXFxcbiBGSVhUVVJFX1ZBUklBTlRfQUREX0lPTU1VX01PREUoaW9tbXVmZF9jb21wYXRfdHlwZTF2MiwgIyNfX1ZBX0FSR1NfXyk7IFxcXG4gRklYVFVSRV9WQVJJQU5UX0FERF9JT01NVV9NT0RFKGlvbW11ZmQsICMjX19WQV9BUkdTX18pXG4rI2VuZGlmXG4gXG4gI2VuZGlmIC8qIFNFTEZURVNUU19WRklPX0xJQl9JTkNMVURFX0xJQlZGSU9fSU9NTVVfSCAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2lvbW11LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pb21tdS5jXG5pbmRleCAwMzVkYWMwNjlkNjAxNi4uMTlkMTliYjQ1YTE0YjUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pb21tdS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pb21tdS5jXG5AQCAtMTYsOSArMTYsMTEgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdmZpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW9tbXVmZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2l6ZXMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiLi4vLi4vLi4va3NlbGZ0ZXN0LmhcIlxuICNpbmNsdWRlIFx1MDAzY2xpYnZmaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbWl0cy5oXHUwMDNlXG4gXG4gY29uc3QgY2hhciAqZGVmYXVsdF9pb21tdV9tb2RlID0gTU9ERV9JT01NVUZEO1xuIFxuQEAgLTQ3LDYgKzQ5LDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tbXVfbW9kZSBpb21tdV9tb2Rlc1tdID0ge1xuIFx0e1xuIFx0XHQubmFtZSA9IE1PREVfSU9NTVVGRCxcbiBcdH0sXG4rI2lmZGVmIF9fcG93ZXJwY19fXG4rXHR7XG4rXHRcdC5uYW1lID0gTU9ERV9WRklPX1NQQVBSX1RDRV9WMl9JT01NVSxcbitcdFx0LmNvbnRhaW5lcl9wYXRoID0gXCIvZGV2L3ZmaW8vdmZpb1wiLFxuK1x0XHQuaW9tbXVfdHlwZSA9IFZGSU9fU1BBUFJfVENFX3YyX0lPTU1VLFxuK1x0fSxcbisjZW5kaWZcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tbXVfbW9kZSAqbG9va3VwX2lvbW11X21vZGUoY29uc3QgY2hhciAqaW9tbXVfbW9kZSlcbkBAIC04Niw2ICs5NSwyMzMgQEAgaW50IF9faW9tbXVfaHZhMmlvdmEoc3RydWN0IGlvbW11ICppb21tdSwgdm9pZCAqdmFkZHIsIGlvdmFfdCAqaW92YSlcbiBcdHJldHVybiAtRU5PRU5UO1xuIH1cbiBcbisjaWZkZWYgX19wb3dlcnBjX19cbitzdGF0aWMgYm9vbCBpb21tdV9pc19zcGFwcl90Y2VfdjIoc3RydWN0IGlvbW11ICppb21tdSlcbit7XG4rXHRyZXR1cm4gISEoaW9tbXUtXHUwMDNlbW9kZS1cdTAwM2Vpb21tdV90eXBlID09IFZGSU9fU1BBUFJfVENFX3YyX0lPTU1VKTtcbit9XG4rXG4rc3RhdGljIHUzMiBwYWdlX3NpemVfdG9fc2hpZnQodTY0IHBhZ2Vfc2l6ZSlcbit7XG4rXHRyZXR1cm4gX19idWlsdGluX2N0emxsKHBhZ2Vfc2l6ZSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgc3BhcHJfdGNlX3JlYWRfZGVmYXVsdF93aW5kb3coc3RydWN0IGlvbW11ICppb21tdSlcbit7XG4rXHRzdHJ1Y3QgdmZpb19pb21tdV9zcGFwcl90Y2VfaW5mbyBpbmZvID0ge1xuK1x0XHQuYXJnc3ogPSBzaXplb2YoaW5mbyksXG4rXHR9O1xuK1xuK1x0aWYgKGlvbW11LVx1MDAzZWRlZmF1bHRfd2luZG93LnZhbGlkKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChpb2N0bChpb21tdS1cdTAwM2Vjb250YWluZXJfZmQsIFZGSU9fSU9NTVVfU1BBUFJfVENFX0dFVF9JTkZPLCBcdTAwMjZpbmZvKSlcbitcdFx0cmV0dXJuIC1lcnJubztcbitcbitcdGlvbW11LVx1MDAzZWRlZmF1bHRfd2luZG93LnN0YXJ0ID0gaW5mby5kbWEzMl93aW5kb3dfc3RhcnQ7XG4rXHRpb21tdS1cdTAwM2VkZWZhdWx0X3dpbmRvdy5zaXplID0gaW5mby5kbWEzMl93aW5kb3dfc2l6ZTtcbitcdGlvbW11LVx1MDAzZWRlZmF1bHRfd2luZG93LnBhZ2Vfc2hpZnQgPSBwYWdlX3NpemVfdG9fc2hpZnQoZ2V0cGFnZXNpemUoKSk7XG4rXHRpb21tdS1cdTAwM2VkZWZhdWx0X3dpbmRvdy52YWxpZCA9IHRydWU7XG4rXHRpb21tdS1cdTAwM2VkZWZhdWx0X3dpbmRvdy5keW5hbWljID0gZmFsc2U7XG4rXHRpb21tdS1cdTAwM2VkZWZhdWx0X3dpbmRvdy5yZW1vdmVfb25fY2xlYW51cCA9IGZhbHNlO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgc3BhcHJfdGNlX2NyZWF0ZV9kZHcoc3RydWN0IGlvbW11ICppb21tdSwgdTY0IG1pbl9zaXplLCB1MzIgcGFnZV9zaGlmdClcbit7XG4rXHRzdHJ1Y3QgdmZpb19pb21tdV9zcGFwcl90Y2VfY3JlYXRlIGNyZWF0ZSA9IHtcbitcdFx0LmFyZ3N6ID0gc2l6ZW9mKGNyZWF0ZSksXG4rXHRcdC5wYWdlX3NoaWZ0ID0gcGFnZV9zaGlmdCxcbitcdFx0LmxldmVscyA9IDEsXG4rXHRcdC53aW5kb3dfc2l6ZSA9IG1pbl9zaXplLFxuK1x0fTtcbitcbitcdGlmIChpb2N0bChpb21tdS1cdTAwM2Vjb250YWluZXJfZmQsIFZGSU9fSU9NTVVfU1BBUFJfVENFX0NSRUFURSwgXHUwMDI2Y3JlYXRlKSlcbitcdFx0cmV0dXJuIC1lcnJubztcbitcbitcdGlvbW11LVx1MDAzZWRkd193aW5kb3cuc3RhcnQgPSBjcmVhdGUuc3RhcnRfYWRkcjtcbitcdGlvbW11LVx1MDAzZWRkd193aW5kb3cuc2l6ZSA9IGNyZWF0ZS53aW5kb3dfc2l6ZTtcbitcdGlvbW11LVx1MDAzZWRkd193aW5kb3cucGFnZV9zaGlmdCA9IHBhZ2Vfc2hpZnQ7XG4rXHRpb21tdS1cdTAwM2VkZHdfd2luZG93LnZhbGlkID0gdHJ1ZTtcbitcdGlvbW11LVx1MDAzZWRkd193aW5kb3cuZHluYW1pYyA9IHRydWU7XG4rXHRpb21tdS1cdTAwM2VkZHdfd2luZG93LnJlbW92ZV9vbl9jbGVhbnVwID0gdHJ1ZTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHNwYXByX3RjZV9yZW1vdmVfd2luZG93KHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBzcGFwcl90Y2Vfd2luZG93ICp3aW5kb3cpXG4re1xuK1x0c3RydWN0IHZmaW9faW9tbXVfc3BhcHJfdGNlX3JlbW92ZSByZW1vdmUgPSB7XG4rXHRcdC5hcmdzeiA9IHNpemVvZihyZW1vdmUpLFxuK1x0XHQuc3RhcnRfYWRkciA9IHdpbmRvdy1cdTAwM2VzdGFydCxcbitcdH07XG4rXG4rXHRpZiAoIXdpbmRvdy1cdTAwM2V2YWxpZCB8fCAhd2luZG93LVx1MDAzZXJlbW92ZV9vbl9jbGVhbnVwKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChpb2N0bChpb21tdS1cdTAwM2Vjb250YWluZXJfZmQsIFZGSU9fSU9NTVVfU1BBUFJfVENFX1JFTU9WRSwgXHUwMDI2cmVtb3ZlKSlcbitcdFx0cmV0dXJuIC1lcnJubztcbitcbitcdHdpbmRvdy1cdTAwM2V2YWxpZCA9IGZhbHNlO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBib29sIHNwYXByX3RjZV93aW5kb3dfc2F0aXNmaWVzKHN0cnVjdCBzcGFwcl90Y2Vfd2luZG93ICp3aW5kb3csXG4rXHRcdFx0XHQgICAgICAgdTY0IG1pbl9zaXplLCB1MzIgcGFnZV9zaGlmdCxcbitcdFx0XHRcdCAgICAgICBib29sIHJlcXVpcmVfZHluYW1pYylcbit7XG4rXHRpZiAoIXdpbmRvdyB8fCAhd2luZG93LVx1MDAzZXZhbGlkKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAocmVxdWlyZV9keW5hbWljIFx1MDAyNlx1MDAyNiAhd2luZG93LVx1MDAzZWR5bmFtaWMpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmICh3aW5kb3ctXHUwMDNlc2l6ZSBcdTAwM2MgbWluX3NpemUpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmICh3aW5kb3ctXHUwMDNlcGFnZV9zaGlmdCAhPSBwYWdlX3NoaWZ0KVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBpb21tdV9pb3ZhX3JhbmdlICpzcGFwcl90Y2VfaW92YV9yYW5nZXMoc3RydWN0IGlvbW11ICppb21tdSwgdTMyICpucmFuZ2VzKVxuK3tcbitcdHN0cnVjdCBpb21tdV9pb3ZhX3JhbmdlICpyYW5nZXM7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCFpb21tdS1cdTAwM2VhY3RpdmVfd2luZG93KSB7XG4rXHRcdHJldCA9IGlvbW11X3ByZXBhcmVfZG1hX3dpbmRvdyhpb21tdSwgU1pfMUcsIGdldHBhZ2VzaXplKCksIGZhbHNlKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbitcdHJhbmdlcyA9IGNhbGxvYygxLCBzaXplb2YoKnJhbmdlcykpO1xuK1x0VkZJT19BU1NFUlRfTk9UX05VTEwocmFuZ2VzKTtcbitcbitcdHJhbmdlc1swXS5zdGFydCA9IGlvbW11LVx1MDAzZWFjdGl2ZV93aW5kb3ctXHUwMDNlc3RhcnQ7XG4rXHRyYW5nZXNbMF0ubGFzdCA9IGlvbW11LVx1MDAzZWFjdGl2ZV93aW5kb3ctXHUwMDNlc3RhcnQgKyBpb21tdS1cdTAwM2VhY3RpdmVfd2luZG93LVx1MDAzZXNpemUgLSAxO1xuK1xuK1x0Km5yYW5nZXMgPSAxO1xuK1x0cmV0dXJuIHJhbmdlcztcbit9XG4rXG4rc3RhdGljIGJvb2wgc3BhcHJfdGNlX2lvdmFfaW5zaWRlX3dpbmRvdyhzdHJ1Y3QgaW9tbXUgKmlvbW11LCBzdHJ1Y3QgZG1hX3JlZ2lvbiAqcmVnaW9uKVxuK3tcbitcdHN0cnVjdCBzcGFwcl90Y2Vfd2luZG93ICp3aW5kb3cgPSBpb21tdS1cdTAwM2VhY3RpdmVfd2luZG93O1xuK1xuK1x0aWYgKCF3aW5kb3cgfHwgIXdpbmRvdy1cdTAwM2V2YWxpZClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKHJlZ2lvbi1cdTAwM2Vpb3ZhIFx1MDAzYyB3aW5kb3ctXHUwMDNlc3RhcnQpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmIChyZWdpb24tXHUwMDNlaW92YSArIHJlZ2lvbi1cdTAwM2VzaXplIFx1MDAzZSB3aW5kb3ctXHUwMDNlc3RhcnQgKyB3aW5kb3ctXHUwMDNlc2l6ZSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuK3N0YXRpYyBpbnQgc3BhcHJfcmVnaXN0ZXJfbWVtb3J5KHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24pXG4re1xuK1x0c3RydWN0IHZmaW9faW9tbXVfc3BhcHJfcmVnaXN0ZXJfbWVtb3J5IGFyZ3MgPSB7XG4rXHRcdC5hcmdzeiA9IHNpemVvZihhcmdzKSxcbitcdFx0LnZhZGRyID0gKHU2NClyZWdpb24tXHUwMDNldmFkZHIsXG4rXHRcdC5zaXplID0gcmVnaW9uLVx1MDAzZXNpemUsXG4rXHR9O1xuK1xuK1x0aWYgKGlvY3RsKGlvbW11LVx1MDAzZWNvbnRhaW5lcl9mZCwgVkZJT19JT01NVV9TUEFQUl9SRUdJU1RFUl9NRU1PUlksIFx1MDAyNmFyZ3MpKVxuK1x0XHRyZXR1cm4gLWVycm5vO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgc3BhcHJfdW5yZWdpc3Rlcl9tZW1vcnkoc3RydWN0IGlvbW11ICppb21tdSwgc3RydWN0IGRtYV9yZWdpb24gKnJlZ2lvbilcbit7XG4rXHRzdHJ1Y3QgdmZpb19pb21tdV9zcGFwcl9yZWdpc3Rlcl9tZW1vcnkgYXJncyA9IHtcbitcdFx0LmFyZ3N6ID0gc2l6ZW9mKGFyZ3MpLFxuK1x0XHQudmFkZHIgPSAodTY0KXJlZ2lvbi1cdTAwM2V2YWRkcixcbitcdFx0LnNpemUgPSByZWdpb24tXHUwMDNlc2l6ZSxcbitcdH07XG4rXG4rXHRpZiAoaW9jdGwoaW9tbXUtXHUwMDNlY29udGFpbmVyX2ZkLCBWRklPX0lPTU1VX1NQQVBSX1VOUkVHSVNURVJfTUVNT1JZLCBcdTAwMjZhcmdzKSlcbitcdFx0cmV0dXJuIC1lcnJubztcbitcbitcdHJldHVybiAwO1xuK31cbitcbitpbnQgaW9tbXVfcHJlcGFyZV9kbWFfd2luZG93KHN0cnVjdCBpb21tdSAqaW9tbXUsIHU2NCBtaW5fc2l6ZSxcbitcdFx0XHQgICAgIHU2NCBwYWdlX3NpemUsIGJvb2wgZm9yY2VfZHluYW1pYylcbit7XG4rXHR1MzIgcGFnZV9zaGlmdDtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoIWlvbW11X2lzX3NwYXByX3RjZV92Mihpb21tdSkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKCFwYWdlX3NpemUpXG4rXHRcdHBhZ2Vfc2l6ZSA9IGdldHBhZ2VzaXplKCk7XG4rXG4rXHRwYWdlX3NoaWZ0ID0gcGFnZV9zaXplX3RvX3NoaWZ0KHBhZ2Vfc2l6ZSk7XG4rXG4rXHRyZXQgPSBzcGFwcl90Y2VfcmVhZF9kZWZhdWx0X3dpbmRvdyhpb21tdSk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LypcbitcdCAqIE5vcm1hbCBtYXBwaW5nIHBhdGg6XG4rXHQgKiB1c2UgZGVmYXVsdCB3aW5kb3cgd2hlbiBpdCBzYXRpc2ZpZXMgdGhlIHJlcXVlc3QuXG4rXHQgKi9cbitcdGlmICghZm9yY2VfZHluYW1pYyBcdTAwMjZcdTAwMjZcbitcdCAgICBzcGFwcl90Y2Vfd2luZG93X3NhdGlzZmllcyhcdTAwMjZpb21tdS1cdTAwM2VkZWZhdWx0X3dpbmRvdyxcbitcdFx0XHRcdCAgICAgICBtaW5fc2l6ZSwgcGFnZV9zaGlmdCwgZmFsc2UpKSB7XG4rXHRcdGlvbW11LVx1MDAzZWFjdGl2ZV93aW5kb3cgPSBcdTAwMjZpb21tdS1cdTAwM2VkZWZhdWx0X3dpbmRvdztcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogRHluYW1pYyBwYXRoOlxuK1x0ICogdXNlIGV4aXN0aW5nIEREVyBpZiBpdCBhbHJlYWR5IHNhdGlzZmllcyB0aGUgcmVxdWVzdC5cbitcdCAqL1xuK1x0aWYgKHNwYXByX3RjZV93aW5kb3dfc2F0aXNmaWVzKFx1MDAyNmlvbW11LVx1MDAzZWRkd193aW5kb3csXG4rXHRcdFx0XHQgICAgICAgbWluX3NpemUsIHBhZ2Vfc2hpZnQsIHRydWUpKSB7XG4rXHRcdGlvbW11LVx1MDAzZWFjdGl2ZV93aW5kb3cgPSBcdTAwMjZpb21tdS1cdTAwM2VkZHdfd2luZG93O1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBOZWl0aGVyIGRlZmF1bHQgbm9yIEREVyBpcyBzdWZmaWNpZW50LlxuK1x0ICogUmVtb3ZlIG9ubHkgdGhlIHNlbGZ0ZXN0LWNyZWF0ZWQgRERXLCB0aGVuIGNyZWF0ZSBhIG5ldyBERFcuXG4rXHQgKi9cbitcdHJldCA9IHNwYXByX3RjZV9yZW1vdmVfd2luZG93KGlvbW11LCBcdTAwMjZpb21tdS1cdTAwM2VkZHdfd2luZG93KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBzcGFwcl90Y2VfY3JlYXRlX2Rkdyhpb21tdSwgbWluX3NpemUsIHBhZ2Vfc2hpZnQpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlvbW11LVx1MDAzZWFjdGl2ZV93aW5kb3cgPSBcdTAwMjZpb21tdS1cdTAwM2VkZHdfd2luZG93O1xuK1x0cmV0dXJuIDA7XG4rfVxuKyNlbHNlXG4raW50IGlvbW11X3ByZXBhcmVfZG1hX3dpbmRvdyhzdHJ1Y3QgaW9tbXUgKmlvbW11LCB1NjQgbWluX3NpemUsXG4rXHRcdFx0ICAgICB1NjQgcGFnZV9zaXplLCBib29sIGZvcmNlX2R5bmFtaWMpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuKyNlbmRpZlxuK1xuK2Jvb2wgaW9tbXVfc3VwcG9ydHNfdW5tYXBfYWxsKHN0cnVjdCBpb21tdSAqaW9tbXUpXG4re1xuKyNpZmRlZiBfX3Bvd2VycGNfX1xuK1x0aWYgKGlvbW11X2lzX3NwYXByX3RjZV92Mihpb21tdSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbisjZW5kaWZcbitcdHJldHVybiB0cnVlO1xuK31cbitcbiBpb3ZhX3QgaW9tbXVfaHZhMmlvdmEoc3RydWN0IGlvbW11ICppb21tdSwgdm9pZCAqdmFkZHIpXG4ge1xuIFx0aW92YV90IGlvdmE7XG5AQCAtMTA2LDkgKzM0MiwyNyBAQCBzdGF0aWMgaW50IHZmaW9faW9tbXVfbWFwKHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24pXG4gXHRcdC5pb3ZhID0gcmVnaW9uLVx1MDAzZWlvdmEsXG4gXHRcdC5zaXplID0gcmVnaW9uLVx1MDAzZXNpemUsXG4gXHR9O1xuK1x0aW50IHJldDtcbiBcbi1cdGlmIChpb2N0bChpb21tdS1cdTAwM2Vjb250YWluZXJfZmQsIFZGSU9fSU9NTVVfTUFQX0RNQSwgXHUwMDI2YXJncykpXG4rI2lmZGVmIF9fcG93ZXJwY19fXG4rXHRpZiAoaW9tbXVfaXNfc3BhcHJfdGNlX3YyKGlvbW11KSkge1xuK1x0XHRpZiAoIXNwYXByX3RjZV9pb3ZhX2luc2lkZV93aW5kb3coaW9tbXUsIHJlZ2lvbikpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdHJldCA9IHNwYXByX3JlZ2lzdGVyX21lbW9yeShpb21tdSwgcmVnaW9uKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuKyNlbmRpZlxuK1xuK1x0cmV0ID0gaW9jdGwoaW9tbXUtXHUwMDNlY29udGFpbmVyX2ZkLCBWRklPX0lPTU1VX01BUF9ETUEsIFx1MDAyNmFyZ3MpO1xuK1x0aWYgKHJldCkge1xuKyNpZmRlZiBfX3Bvd2VycGNfX1xuK1x0XHRpZiAoaW9tbXVfaXNfc3BhcHJfdGNlX3YyKGlvbW11KSlcbitcdFx0XHRzcGFwcl91bnJlZ2lzdGVyX21lbW9yeShpb21tdSwgcmVnaW9uKTtcbisjZW5kaWZcbiBcdFx0cmV0dXJuIC1lcnJubztcbitcdH1cbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0xNzAsOCArNDI0LDE4IEBAIHN0YXRpYyBpbnQgX192ZmlvX2lvbW11X3VubWFwKGludCBmZCwgdTY0IGlvdmEsIHU2NCBzaXplLCB1MzIgZmxhZ3MsIHU2NCAqdW5tYXBwXG4gc3RhdGljIGludCB2ZmlvX2lvbW11X3VubWFwKHN0cnVjdCBpb21tdSAqaW9tbXUsIHN0cnVjdCBkbWFfcmVnaW9uICpyZWdpb24sXG4gXHRcdFx0ICAgIHU2NCAqdW5tYXBwZWQpXG4ge1xuLVx0cmV0dXJuIF9fdmZpb19pb21tdV91bm1hcChpb21tdS1cdTAwM2Vjb250YWluZXJfZmQsIHJlZ2lvbi1cdTAwM2Vpb3ZhLFxuLVx0XHRcdFx0ICByZWdpb24tXHUwMDNlc2l6ZSwgMCwgdW5tYXBwZWQpO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IF9fdmZpb19pb21tdV91bm1hcChpb21tdS1cdTAwM2Vjb250YWluZXJfZmQsIHJlZ2lvbi1cdTAwM2Vpb3ZhLFxuK1x0XHRcdFx0IHJlZ2lvbi1cdTAwM2VzaXplLCAwLCB1bm1hcHBlZCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuKyNpZmRlZiBfX3Bvd2VycGNfX1xuK1x0aWYgKGlvbW11X2lzX3NwYXByX3RjZV92Mihpb21tdSkpXG4rXHRcdHJldCA9IHNwYXByX3VucmVnaXN0ZXJfbWVtb3J5KGlvbW11LCByZWdpb24pO1xuKyNlbmRpZlxuK1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGludCBfX2lvbW11ZmRfdW5tYXAoaW50IGZkLCB1NjQgaW92YSwgdTY0IGxlbmd0aCwgdTMyIGlvYXNfaWQsIHU2NCAqdW5tYXBwZWQpXG5AQCAtMzE3LDYgKzU4MSwxMSBAQCBzdGF0aWMgc3RydWN0IGlvbW11X2lvdmFfcmFuZ2UgKnZmaW9faW9tbXVfaW92YV9yYW5nZXMoc3RydWN0IGlvbW11ICppb21tdSxcbiBcdHN0cnVjdCB2ZmlvX2luZm9fY2FwX2hlYWRlciAqaGRyO1xuIFx0c3RydWN0IGlvbW11X2lvdmFfcmFuZ2UgKnJhbmdlcyA9IE5VTEw7XG4gXG4rI2lmZGVmIF9fcG93ZXJwY19fXG4rXHRpZiAoaW9tbXVfaXNfc3BhcHJfdGNlX3YyKGlvbW11KSlcbitcdFx0cmV0dXJuIHNwYXByX3RjZV9pb3ZhX3Jhbmdlcyhpb21tdSwgbnJhbmdlcyk7XG4rI2VuZGlmXG4rXG4gXHRpbmZvID0gdmZpb19pb21tdV9nZXRfaW5mbyhpb21tdS1cdTAwM2Vjb250YWluZXJfZmQpO1xuIFx0aGRyID0gdmZpb19pb21tdV9pbmZvX2NhcF9oZHIoaW5mbywgVkZJT19JT01NVV9UWVBFMV9JTkZPX0NBUF9JT1ZBX1JBTkdFKTtcbiBcdFZGSU9fQVNTRVJUX05PVF9OVUxMKGhkcik7XG5AQCAtNDU1LDYgKzcyNCwxMSBAQCBzdHJ1Y3QgaW9tbXUgKmlvbW11X2luaXQoY29uc3QgY2hhciAqaW9tbXVfbW9kZSlcbiBcbiB2b2lkIGlvbW11X2NsZWFudXAoc3RydWN0IGlvbW11ICppb21tdSlcbiB7XG4rI2lmZGVmIF9fcG93ZXJwY19fXG4rXHRpZiAoaW9tbXVfaXNfc3BhcHJfdGNlX3YyKGlvbW11KSlcbitcdFx0c3BhcHJfdGNlX3JlbW92ZV93aW5kb3coaW9tbXUsIFx1MDAyNmlvbW11LVx1MDAzZWRkd193aW5kb3cpO1xuKyNlbmRpZlxuK1xuIFx0aWYgKGlvbW11LVx1MDAzZWlvbW11ZmQpXG4gXHRcdFZGSU9fQVNTRVJUX0VRKGNsb3NlKGlvbW11LVx1MDAzZWlvbW11ZmQpLCAwKTtcbiBcdGVsc2VcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLmNcbmluZGV4IDNhM2QxZWQ2MzVjMWRmLi4xMmY3MzE5NjNiMDU4YSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5jXG5AQCAtMTAxLDMgKzEwMSw0MCBAQCB2b2lkICptbWFwX3Jlc2VydmUoc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbiwgc2l6ZV90IG9mZnNldClcbiBcbiBcdHJldHVybiBtYXBfYWxpZ247XG4gfVxuK1xuK3N0YXRpYyBjb25zdCBjaGFyICpnZXRfaW9tbXVfbW9kZV9lbnYodm9pZClcbit7XG4rXHRjb25zdCBjaGFyICptb2RlO1xuK1x0c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB2YWxpZF9tb2Rlc1tdID0ge1xuK1x0XHRNT0RFX1ZGSU9fVFlQRTFfSU9NTVUsXG4rXHRcdE1PREVfVkZJT19UWVBFMVYyX0lPTU1VLFxuK1x0XHRNT0RFX0lPTU1VRkRfQ09NUEFUX1RZUEUxLFxuK1x0XHRNT0RFX0lPTU1VRkRfQ09NUEFUX1RZUEUxVjIsXG4rXHRcdE1PREVfSU9NTVVGRCxcbisjaWZkZWYgX19wb3dlcnBjX19cbitcdFx0TU9ERV9WRklPX1NQQVBSX1RDRV9WMl9JT01NVSxcbisjZW5kaWZcbitcdH07XG4rXHRpbnQgaTtcbitcbitcdG1vZGUgPSBnZXRlbnYoXCJWRklPX1NFTEZURVNUU19JT01NVV9NT0RFXCIpO1xuK1x0aWYgKCFtb2RlKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUodmFsaWRfbW9kZXMpOyBpKyspIHtcbitcdFx0aWYgKCFzdHJjbXAobW9kZSwgdmFsaWRfbW9kZXNbaV0pKVxuK1x0XHRcdHJldHVybiBtb2RlO1xuK1x0fVxuK1xuK1x0ZnByaW50ZihzdGRlcnIsIFwiSW52YWxpZCBWRklPX1NFTEZURVNUU19JT01NVV9NT0RFOiAlc1xcblwiLCBtb2RlKTtcbitcdGZwcmludGYoc3RkZXJyLCBcIlZhbGlkIG1vZGVzIGFyZTpcXG5cIik7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHZhbGlkX21vZGVzKTsgaSsrKVxuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCIgICVzXFxuXCIsIHZhbGlkX21vZGVzW2ldKTtcbitcdGV4aXQoS1NGVF9TS0lQKTtcbit9XG4rXG4rY29uc3QgY2hhciAqdmZpb19zZWxmdGVzdHNfZ2V0X2lvbW11X21vZGUodm9pZClcbit7XG4rXHRyZXR1cm4gZ2V0X2lvbW11X21vZGVfZW52KCk7XG4rfVxuK1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19kbWFfbWFwcGluZ190ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL3ZmaW9fZG1hX21hcHBpbmdfdGVzdC5jXG5pbmRleCA3ZDBkZThjNzlkZTEzZi4uY2QyZDMyNzZhNDZjNDYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL3ZmaW9fZG1hX21hcHBpbmdfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL3ZmaW9fZG1hX21hcHBpbmdfdGVzdC5jXG5AQCAtMSw1ICsxLDYgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gI2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4gXG5AQCAtMTE5LDggKzEyMCwxOSBAQCBGSVhUVVJFX1ZBUklBTlRfQUREX0FMTF9JT01NVV9NT0RFUyhhbm9ueW1vdXNfaHVnZXRsYl8xZ2IsIFNaXzFHLCBNQVBfSFVHRVRMQiB8XG4gXG4gRklYVFVSRV9TRVRVUCh2ZmlvX2RtYV9tYXBwaW5nX3Rlc3QpXG4ge1xuK1x0Y29uc3QgdTY0IHBhZ2Vfc2l6ZSA9IHZhcmlhbnQtXHUwMDNlc2l6ZSA/OiBnZXRwYWdlc2l6ZSgpO1xuK1x0Y29uc3QgYm9vbCBmb3JjZV9keW5hbWljID0gISF2YXJpYW50LVx1MDAzZXNpemU7XG4rXHRpbnQgcmV0O1xuK1xuIFx0c2VsZi1cdTAwM2Vpb21tdSA9IGlvbW11X2luaXQodmFyaWFudC1cdTAwM2Vpb21tdV9tb2RlKTtcbiBcdHNlbGYtXHUwMDNlZGV2aWNlID0gdmZpb19wY2lfZGV2aWNlX2luaXQoZGV2aWNlX2JkZiwgc2VsZi1cdTAwM2Vpb21tdSk7XG4rXG4rXHRyZXQgPSBpb21tdV9wcmVwYXJlX2RtYV93aW5kb3coc2VsZi1cdTAwM2Vpb21tdSwgcGFnZV9zaXplLCBwYWdlX3NpemUsXG4rXHRcdFx0XHQgICAgICAgZm9yY2VfZHluYW1pYyk7XG4rXHRpZiAocmV0KVxuK1x0XHRTS0lQKHJldHVybiwgXCJETUEgd2luZG93IHVuYXZhaWxhYmxlOiAlcyAoJWQpXFxuXCIsXG4rXHRcdCAgICAgc3RyZXJyb3IoLXJldCksIC1yZXQpO1xuK1xuIFx0c2VsZi1cdTAwM2Vpb3ZhX2FsbG9jYXRvciA9IGlvdmFfYWxsb2NhdG9yX2luaXQoc2VsZi1cdTAwM2Vpb21tdSk7XG4gfVxuIFxuQEAgLTIyNyw2ICsyMzksNyBAQCBGSVhUVVJFX1NFVFVQKHZmaW9fZG1hX21hcF9saW1pdF90ZXN0KVxuIFx0dTY0IHJlZ2lvbl9zaXplID0gZ2V0cGFnZXNpemUoKTtcbiBcdGlvdmFfdCBsYXN0X2lvdmE7XG4gXHR1MzIgbnJhbmdlcztcbitcdGludCByZXQ7XG4gXG4gXHQvKlxuIFx0ICogT3Zlci1hbGxvY2F0ZSBtbWFwIGJ5IGRvdWJsZSB0aGUgc2l6ZSB0byBwcm92aWRlIGVub3VnaCBiYWNraW5nIHZhZGRyXG5AQCAtMjM2LDYgKzI0OSwxMyBAQCBGSVhUVVJFX1NFVFVQKHZmaW9fZG1hX21hcF9saW1pdF90ZXN0KVxuIFxuIFx0c2VsZi1cdTAwM2Vpb21tdSA9IGlvbW11X2luaXQodmFyaWFudC1cdTAwM2Vpb21tdV9tb2RlKTtcbiBcdHNlbGYtXHUwMDNlZGV2aWNlID0gdmZpb19wY2lfZGV2aWNlX2luaXQoZGV2aWNlX2JkZiwgc2VsZi1cdTAwM2Vpb21tdSk7XG4rXG4rXHRyZXQgPSBpb21tdV9wcmVwYXJlX2RtYV93aW5kb3coc2VsZi1cdTAwM2Vpb21tdSwgcmVnaW9uX3NpemUsIHJlZ2lvbl9zaXplLFxuK1x0XHRcdFx0ICAgICAgIGZhbHNlKTtcbitcdGlmIChyZXQpXG4rXHRcdFNLSVAocmV0dXJuLCBcIkRNQSB3aW5kb3cgdW5hdmFpbGFibGU6ICVzICglZClcXG5cIixcbitcdFx0ICAgICBzdHJlcnJvcigtcmV0KSwgLXJldCk7XG4rXG4gXHRyZWdpb24tXHUwMDNldmFkZHIgPSBtbWFwKE5VTEwsIHNlbGYtXHUwMDNlbW1hcF9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuIFx0XHRcdCAgICAgTUFQX0FOT05ZTU9VUyB8IE1BUF9QUklWQVRFLCAtMSwgMCk7XG4gXHRBU1NFUlRfTkUocmVnaW9uLVx1MDAzZXZhZGRyLCBNQVBfRkFJTEVEKTtcbkBAIC0yNzcsNiArMjk3LDggQEAgVEVTVF9GKHZmaW9fZG1hX21hcF9saW1pdF90ZXN0LCB1bm1hcF9hbGwpXG4gXHR1NjQgdW5tYXBwZWQ7XG4gXHRpbnQgcmM7XG4gXG4rXHRpZiAoIWlvbW11X3N1cHBvcnRzX3VubWFwX2FsbChzZWxmLVx1MDAzZWlvbW11KSlcbitcdFx0U0tJUChyZXR1cm4sIFwiSU9NTVUgYmFja2VuZCBkb2VzIG5vdCBzdXBwb3J0IHVubWFwLWFsbFxcblwiKTtcbiBcdGlvbW11X21hcChzZWxmLVx1MDAzZWlvbW11LCByZWdpb24pO1xuIFx0QVNTRVJUX0VRKHJlZ2lvbi1cdTAwM2Vpb3ZhLCB0b19pb3ZhKHNlbGYtXHUwMDNlZGV2aWNlLCByZWdpb24tXHUwMDNldmFkZHIpKTtcbiBcbkBAIC0yOTQsMTAgKzMxNiwxOCBAQCBURVNUX0YodmZpb19kbWFfbWFwX2xpbWl0X3Rlc3QsIG92ZXJmbG93KVxuIFx0cmVnaW9uLVx1MDAzZXNpemUgPSBzZWxmLVx1MDAzZW1tYXBfc2l6ZTtcbiBcbiBcdHJjID0gX19pb21tdV9tYXAoc2VsZi1cdTAwM2Vpb21tdSwgcmVnaW9uKTtcbisjaWZkZWYgX19wb3dlcnBjX19cbitcdEFTU0VSVF9FUShyYywgLUVOWElPKTtcbisjZWxzZVxuIFx0QVNTRVJUX0VRKHJjLCAtRU9WRVJGTE9XKTtcbisjZW5kaWZcbiBcbiBcdHJjID0gX19pb21tdV91bm1hcChzZWxmLVx1MDAzZWlvbW11LCByZWdpb24sIE5VTEwpO1xuKyNpZmRlZiBfX3Bvd2VycGNfX1xuK1x0QVNTRVJUX0VRKHJjLCAtRU5YSU8pO1xuKyNlbHNlXG4gXHRBU1NFUlRfRVEocmMsIC1FT1ZFUkZMT1cpO1xuKyNlbmRpZlxuIH1cbiBcbiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19wY2lfZGV2aWNlX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vdmZpb19wY2lfZGV2aWNlX3Rlc3QuY1xuaW5kZXggOTNjMTFmZDVlMDgxODIuLjQ1YjhiZjYwNTI3YTg2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby92ZmlvX3BjaV9kZXZpY2VfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL3ZmaW9fcGNpX2RldmljZV90ZXN0LmNcbkBAIC0yOSw3ICsyOSw3IEBAIEZJWFRVUkUodmZpb19wY2lfZGV2aWNlX3Rlc3QpIHtcbiBcbiBGSVhUVVJFX1NFVFVQKHZmaW9fcGNpX2RldmljZV90ZXN0KVxuIHtcbi1cdHNlbGYtXHUwMDNlaW9tbXUgPSBpb21tdV9pbml0KGRlZmF1bHRfaW9tbXVfbW9kZSk7XG4rXHRzZWxmLVx1MDAzZWlvbW11ID0gaW9tbXVfaW5pdCh2ZmlvX3NlbGZ0ZXN0c19nZXRfaW9tbXVfbW9kZSgpKTtcbiBcdHNlbGYtXHUwMDNlZGV2aWNlID0gdmZpb19wY2lfZGV2aWNlX2luaXQoZGV2aWNlX2JkZiwgc2VsZi1cdTAwM2Vpb21tdSk7XG4gfVxuIFxuQEAgLTEyMSw3ICsxMjEsNyBAQCBGSVhUVVJFX1ZBUklBTlRfQUREKHZmaW9fcGNpX2lycV90ZXN0LCBtc2l4KSB7XG4gXG4gRklYVFVSRV9TRVRVUCh2ZmlvX3BjaV9pcnFfdGVzdClcbiB7XG4tXHRzZWxmLVx1MDAzZWlvbW11ID0gaW9tbXVfaW5pdChkZWZhdWx0X2lvbW11X21vZGUpO1xuK1x0c2VsZi1cdTAwM2Vpb21tdSA9IGlvbW11X2luaXQodmZpb19zZWxmdGVzdHNfZ2V0X2lvbW11X21vZGUoKSk7XG4gXHRzZWxmLVx1MDAzZWRldmljZSA9IHZmaW9fcGNpX2RldmljZV9pbml0KGRldmljZV9iZGYsIHNlbGYtXHUwMDNlaW9tbXUpO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDA5OjI3OjIxLjg4NTU3MjEzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUyMzk3ODQ2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogU2VsZnRlc3QgVXBkYXRlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgYW5kIGl0IGFwcGVhcnMgdG8gYmUgZm9jdXNlZCBzb2xlbHkgb24gdXBkYXRlcyB3aXRoaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vYC4gVGhhdCBkaXJlY3Rvcnkgc2NyZWFtcyBcInNlbGZ0ZXN0XCIgdG8gbWUsIGFuZCB0aGF0IG1lYW5zIHVzZXJzcGFjZSwgbm90IGtlcm5lbCBjb2RlIHdlIG5lZWQgdG8gd29ycnkgYWJvdXQgZnV6emluZyBkaXJlY3RseS4gSSBuZWVkIHRvIGJlIHN1cmUsIHRob3VnaC4gTGV0J3MgbWFrZSBzdXJlLlxuXG5IbW0sIGxldCdzIGNvbmZpcm0gdGhlIGZpbGVzLlxuXG5BIHF1aWNrIGRpZmYgY2hlY2sgY29uZmlybXMgbXkgaW5pdGlhbCBpbXByZXNzaW9uLiBJdCdzIHRvdWNoaW5nIGBNYWtlZmlsZWAsIHNvbWUgaW5jbHVkZSBmaWxlcyAoYGxpYnZmaW8uaGAsIGBpb21tdS5oYCksIGFuZCBhIGZldyBDIGZpbGVzIChgaW9tbXUuY2AsIGBsaWJ2ZmlvLmNgLCBgdmZpb19kbWFfbWFwcGluZ190ZXN0LmNgLCBgdmZpb19wY2lfZGV2aWNlX3Rlc3QuY2ApLiBUaGF0J3MgYWxsIHdpdGhpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vYCBzdWJ0cmVlLiBFeGNlbGxlbnQuXG5cbkdpdmVuIHRoYXQgKmFsbCogdGhlIG1vZGlmaWNhdGlvbnMgYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIHNlbGZ0ZXN0IGRpcmVjdG9yeSwgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCB0aGlzIHBhdGNoICpkb2Vzbid0KiBpbnRyb2R1Y2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgd2FycmFudCBmdXp6aW5nLiBJdCdzIGp1c3QgYSB0ZXN0IHVwZGF0ZS4gU28sIEkgd2lsbCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgc3RyYWlnaHRmb3J3YXJkOiB0aGlzIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cywgYW5kIHRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4gV2UgY2FuIHNraXAgdGhpcyBvbmUgZm9yIGZ1enppbmcgcHVycG9zZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxODYsIk91dHB1dFRva2VucyI6NjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwOToyNzoyOC40MDk1NTMzMDNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby8pIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby8pIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowz9vvc[1] Phase: Running StartedAt: 2026-07-03 09:27:51 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz9vvc[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-03 09:27:51 +0000 UTC FinishedAt: 2026-07-03 09:27:57 +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,}