Name: series-workflowjcwc5 Phase: Failed StartedAt: 2026-07-07 01:43:40 +0000 UTC FinishedAt: 2026-07-07 02:02:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcwc5[0] Phase: Succeeded StartedAt: 2026-07-07 01:43:40 +0000 UTC FinishedAt: 2026-07-07 02:02:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcwc5[0].run-triage Phase: Succeeded StartedAt: 2026-07-07 01:43:40 +0000 UTC FinishedAt: 2026-07-07 02:02:05 +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+CgkJCTx0ZD4yMDI2LzA3LzA3IDAyOjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBhbmQgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyBmb3IgbGliYXJlbmEgdW5kZXIgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDAyOjAxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOGM0YzE0NDI5MmNlNWNlOGMwOTYzMDYwM2YzN2Q4NzhhZjUyN2ZkOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDcgMDI6MDE6MjggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvYml0bWFwLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9iaXRtYXAuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jZjZiNjNmNWQ5YTQ1ZlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvYml0bWFwLmhcbkBAIC0wLDAgJiM0MzsxLDM0IEBAXG4mIzQzOyNwcmFnbWEgb25jZVxuJiM0MztcbiYjNDM7I2RlZmluZSBCSVRTX1BFUl9CWVRFXHRcdDhcbiYjNDM7I2RlZmluZSBCWVRFU19UT19CSVRTKG5iKVx0KChuYikgKiBCSVRTX1BFUl9CWVRFKVxuJiM0MztcbiYjNDM7I2RlZmluZSBCSVRTX1BFUl9MT05HX0xPTkdcdChzaXplb2YobG9uZyBsb25nKSAqIEJJVFNfUEVSX0JZVEUpXG4mIzQzOyNkZWZpbmUgQklUU19UT19MT05HX0xPTkdTKG5yKVx0KCgobnIpICYjNDM7IEJJVFNfUEVSX0xPTkdfTE9ORyAtIDEpIC8gQklUU19QRVJfTE9OR19MT05HKVxuJiM0MzsjZGVmaW5lIEJJVF9NQVNLKG5yKVx0XHQoMVVMTCBcdTAwM2NcdTAwM2MgKChucikgJSBCSVRTX1BFUl9MT05HX0xPTkcpKVxuJiM0MzsjZGVmaW5lIEJJVF9XT1JEKG5yKVx0XHQoKG5yKSAvIEJJVFNfUEVSX0xPTkdfTE9ORylcbiYjNDM7XG4mIzQzO3N0cnVjdCBiaXRtYXAge1xuJiM0MztcdHU2NCBiaXRzWzBdO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXBfYWxsb2Moc2l6ZV90IGJpdHMpO1xuJiM0Mzt2b2lkIGJtcF9mcmVlKHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKTtcbiYjNDM7XG4mIzQzO3ZvaWQgX19ibXBfc2V0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcCk7XG4mIzQzO3ZvaWQgX19ibXBfY2xlYXJfYml0KHUzMiBiaXQsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKTtcbiYjNDM7dm9pZCBibXBfc2V0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcCk7XG4mIzQzO3ZvaWQgYm1wX2NsZWFyX2JpdCh1MzIgYml0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcCk7XG4mIzQzO2Jvb2wgYm1wX3Rlc3RfYml0KHUzMiBiaXQsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKTtcbiYjNDM7Ym9vbCBibXBfdGVzdF9hbmRfY2xlYXJfYml0KHUzMiBiaXQsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKTtcbiYjNDM7Ym9vbCBibXBfdGVzdF9hbmRfc2V0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcCk7XG4mIzQzO1xuJiM0Mzt2b2lkIGJtcF9jbGVhcihzaXplX3QgYml0cywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApO1xuJiM0Mzt2b2lkIGJtcF9hbmQoc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqZHN0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKnNyYzEsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqc3JjMik7XG4mIzQzO3ZvaWQgYm1wX29yKHNpemVfdCBiaXRzLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmRzdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpzcmMxLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKnNyYzIpO1xuJiM0Mztib29sIGJtcF9lbXB0eShzaXplX3QgYml0cywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApO1xuJiM0Mzt2b2lkIGJtcF9jb3B5KHNpemVfdCBiaXRzLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmRzdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpzcmMpO1xuJiM0MztcbiYjNDM7Ym9vbCBibXBfaW50ZXJzZWN0cyhzaXplX3QgYml0cywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICphcmcxLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmFyZzIpO1xuJiM0Mztib29sIGJtcF9zdWJzZXQoc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYmlnLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKnNtYWxsKTtcbiYjNDM7dm9pZCBibXBfcHJpbnQoc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9jb21tb24uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2NvbW1vbi5oXG5pbmRleCBhM2ViMTY0MWFjMzZkZi4uOTMxYWNlOWE0OWUyYmQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9jb21tb24uaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvY29tbW9uLmhcbkBAIC00Myw3ICYjNDM7NDMsNyBAQCBzdHJ1Y3Qge1xuICAqIGltcHJlY2lzZS4gVG8gZm9yY2UgdGhlIHZhcmlhYmxlIHRvIGJlIGltcHJlY2lzZSwgaW5pdGlhbGl6ZSBpdCB3aXRoXG4gICogdGhlIG9wYXF1ZSB2b2xhdGlsZSB2YXJpYWJsZSAwIGluc3RlYWQgb2YgdGhlIGNvbnN0YW50IDAuXG4gICovXG4tZXh0ZXJuIGNvbnN0IHZvbGF0aWxlIHUzMiB6ZXJvO1xuJiM0Mzt2b2xhdGlsZSB1MzIgemVybyBfX3dlYWs7XG4gZXh0ZXJuIHZvbGF0aWxlIHU2NCBhc2FuX3Zpb2xhdGVkO1xuIFxuIGludCBhcmVuYV9mbHMoX191NjQgd29yZCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy9zdF9hc2FuX2J1ZGR5LmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2FzYW5fYnVkZHkuYnBmLmNcbnNpbWlsYXJpdHkgaW5kZXggOTglXG5yZW5hbWUgZnJvbSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3N0X2FzYW5fYnVkZHkuYnBmLmNcbnJlbmFtZSB0byB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYXNhbl9idWRkeS5icGYuY1xuaW5kZXggNjg2Y2FiYTJjNjQzYjUuLjMyNjZhMjhmNTNkNzY4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy9zdF9hc2FuX2J1ZGR5LmJwZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYXNhbl9idWRkeS5icGYuY1xuQEAgLTEyLDcgJiM0MzsxMiw3IEBAIGV4dGVybiBzdHJ1Y3QgYnVkZHkgX19hcmVuYSBidWRkeTtcbiBcbiAjaWZkZWYgQlBGX0FSRU5BX0FTQU5cbiBcbi0jaW5jbHVkZSBcJiMzNDtzdF9hc2FuX2NvbW1vbi5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3Rlc3RfYXNhbl9jb21tb24uaFwmIzM0O1xuIFxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGFzYW5fdGVzdF9idWRkeV9vb2Jfc2luZ2xlKHNpemVfdCBhbGxvY19zaXplKVxuIHtcbkBAIC0xNTQsNyAmIzQzOzE1NCw4IEBAIF9fd2VhayBpbnQgYXNhbl90ZXN0X2J1ZGR5X29vYih2b2lkKVxuIFx0c2l6ZV90IHNpemVzW10gPSB7XG4gXHRcdDcsIDgsIDE3LCAxOCwgNjQsIDI1NiwgMzE3LCA1MTIsIDEwMjQsXG4gXHR9O1xuLVx0aW50IHJldCwgaTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdHUzMiBpO1xuIFxuIFx0cmV0ID0gYnVkZHlfaW5pdChcdTAwMjZidWRkeSk7XG4gXHRpZiAocmV0KSB7XG5AQCAtMTYzLDYgJiM0MzsxNjQsNyBAQCBfX3dlYWsgaW50IGFzYW5fdGVzdF9idWRkeV9vb2Iodm9pZClcbiBcdH1cbiBcbiBcdGZvciAoaSA9IHplcm87IGkgXHUwMDNjIHNpemVvZihzaXplcykgLyBzaXplb2Yoc2l6ZXNbMF0pIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGJhcnJpZXJfdmFyKGkpO1xuIFx0XHRyZXQgPSBhc2FuX3Rlc3RfYnVkZHlfb29iX3NpbmdsZShzaXplc1tpXSk7XG4gXHRcdGlmIChyZXQpIHtcbiBcdFx0XHRhcmVuYV9zdGRvdXQoXCYjMzQ7JXM6JWQgRmFpbGVkIGZvciBzaXplICVsdVwmIzM0OywgX19mdW5jX18sXG5AQCAtMTkwLDcgJiM0MzsxOTIsOCBAQCBfX3N0ZGVycihcJiMzNDtDYWxsIHRyYWNlOlxcblwmIzM0O1xuIF9fd2VhayBpbnQgYXNhbl90ZXN0X2J1ZGR5X3VhZih2b2lkKVxuIHtcbiBcdHNpemVfdCBzaXplc1tdID0geyAxNiwgMzIsIDY0LCAxMjgsIDI1NiwgNTEyLCAxMDI0LCAxNjM4NCB9O1xuLVx0aW50IHJldCwgaTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdHUzMiBpO1xuIFxuIFx0cmV0ID0gYnVkZHlfaW5pdChcdTAwMjZidWRkeSk7XG4gXHRpZiAocmV0KSB7XG5AQCAtMTk5LDYgJiM0MzsyMDIsNyBAQCBfX3dlYWsgaW50IGFzYW5fdGVzdF9idWRkeV91YWYodm9pZClcbiBcdH1cbiBcbiBcdGZvciAoaSA9IHplcm87IGkgXHUwMDNjIHNpemVvZihzaXplcykgLyBzaXplb2Yoc2l6ZXNbMF0pIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGJhcnJpZXJfdmFyKGkpO1xuIFx0XHRyZXQgPSBhc2FuX3Rlc3RfYnVkZHlfdWFmX3NpbmdsZShzaXplc1tpXSk7XG4gXHRcdGlmIChyZXQpIHtcbiBcdFx0XHRhcmVuYV9zdGRvdXQoXCYjMzQ7JXM6JWQgRmFpbGVkIGZvciBzaXplICVsdVwmIzM0OywgX19mdW5jX18sXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy9zdF9hc2FuX2NvbW1vbi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2FzYW5fY29tbW9uLmhcbnNpbWlsYXJpdHkgaW5kZXggMTAwJVxucmVuYW1lIGZyb20gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy9zdF9hc2FuX2NvbW1vbi5oXG5yZW5hbWUgdG8gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2FzYW5fY29tbW9uLmhcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYml0bWFwLmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2JpdG1hcC5icGYuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5lN2QzMmY0NGQ2ODcwOVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2JpdG1hcC5icGYuY1xuQEAgLTAsMCAmIzQzOzEsMzk0IEBAXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpYmFyZW5hL2NvbW1vbi5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaWJhcmVuYS9hc2FuLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGliYXJlbmEvYml0bWFwLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNkZWZpbmUgVEVTVF9CSVRTXHQoMiAqIEJJVFNfUEVSX0xPTkdfTE9ORylcbiYjNDM7I2RlZmluZSBURVNUX1dPUkRTXHRCSVRTX1RPX0xPTkdfTE9OR1MoVEVTVF9CSVRTKVxuJiM0MzsjZGVmaW5lIE1JRF9CSVRcdFx0KEJJVFNfUEVSX0xPTkdfTE9ORyAmIzQzOyAxKVxuJiM0MzsjZGVmaW5lIExBU1RfQklUXHQoVEVTVF9CSVRTIC0gMSlcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfYm1wX3NldGFsbChzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcClcbiYjNDM7e1xuJiM0MztcdHZvbGF0aWxlIHUzMiBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSB6ZXJvOyBpIFx1MDAzYyBURVNUX1dPUkRTIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRibXAtXHUwMDNlYml0c1tpXSA9IH4wVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7X193ZWFrIGludCB0ZXN0X2JpdG1hcF9hbGxvY19mcmVlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcDtcbiYjNDM7XG4mIzQzO1x0Ym1wID0gYm1wX2FsbG9jKFRFU1RfQklUUyk7XG4mIzQzO1x0aWYgKCFibXApXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFibXBfZW1wdHkoVEVTVF9CSVRTLCBibXApKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdF9fYm1wX3NldF9iaXQoTEFTVF9CSVQsIGJtcCk7XG4mIzQzO1x0aWYgKCFibXBfdGVzdF9iaXQoTEFTVF9CSVQsIGJtcCkpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0X19ibXBfY2xlYXJfYml0KExBU1RfQklULCBibXApO1xuJiM0MztcdGlmIChibXBfdGVzdF9iaXQoTEFTVF9CSVQsIGJtcCkpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0Ym1wX2ZyZWUoYm1wKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2VycjpcbiYjNDM7XHRibXBfZnJlZShibXApO1xuJiM0MztcdHJldHVybiAtRUlOVkFMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7X193ZWFrIGludCB0ZXN0X2JpdG1hcF9iaXRfb3BzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcDtcbiYjNDM7XG4mIzQzO1x0Ym1wID0gYm1wX2FsbG9jKFRFU1RfQklUUyk7XG4mIzQzO1x0aWYgKCFibXApXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0X19ibXBfc2V0X2JpdCgwLCBibXApO1xuJiM0MztcdGlmICghYm1wX3Rlc3RfYml0KDAsIGJtcCkpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0X19ibXBfc2V0X2JpdChNSURfQklULCBibXApO1xuJiM0MztcdGlmICghYm1wX3Rlc3RfYml0KE1JRF9CSVQsIGJtcCkpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0X19ibXBfc2V0X2JpdChMQVNUX0JJVCwgYm1wKTtcbiYjNDM7XHRpZiAoIWJtcF90ZXN0X2JpdChMQVNUX0JJVCwgYm1wKSlcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoYm1wX3Rlc3RfYml0KE1JRF9CSVQgLSAxLCBibXApKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdF9fYm1wX2NsZWFyX2JpdChNSURfQklULCBibXApO1xuJiM0MztcdGlmIChibXBfdGVzdF9iaXQoTUlEX0JJVCwgYm1wKSlcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoIWJtcF90ZXN0X2JpdCgwLCBibXApKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdGlmICghYm1wX3Rlc3RfYml0KExBU1RfQklULCBibXApKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdF9fYm1wX2NsZWFyX2JpdCgwLCBibXApO1xuJiM0MztcdF9fYm1wX2NsZWFyX2JpdChMQVNUX0JJVCwgYm1wKTtcbiYjNDM7XHRpZiAoIWJtcF9lbXB0eShURVNUX0JJVFMsIGJtcCkpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKGJtcC1cdTAwM2ViaXRzWzBdKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdGlmIChibXAtXHUwMDNlYml0c1sxXSlcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRibXBfZnJlZShibXApO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyOlxuJiM0MztcdGJtcF9mcmVlKGJtcCk7XG4mIzQzO1x0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHRlc3RfYml0bWFwX3Rlc3RfYW5kX2NsZWFyX3NpbmdsZShzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcCwgc2l6ZV90IGluZClcbiYjNDM7e1xuJiM0MztcdGlmIChibXBfdGVzdF9hbmRfY2xlYXJfYml0KGluZCwgYm1wKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0X19ibXBfc2V0X2JpdChpbmQsIGJtcCk7XG4mIzQzO1xuJiM0MztcdGlmICghYm1wX3Rlc3RfYW5kX2NsZWFyX2JpdChpbmQsIGJtcCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmIChibXBfdGVzdF9iaXQoaW5kLCBibXApKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpZiAoYm1wX3Rlc3RfYW5kX2NsZWFyX2JpdChpbmQsIGJtcCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCB0ZXN0X2JpdG1hcF90ZXN0X2FuZF9zZXRfc2luZ2xlKHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wLCBzaXplX3QgaW5kKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGJtcF90ZXN0X2FuZF9zZXRfYml0KGluZCwgYm1wKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFibXBfdGVzdF9hbmRfc2V0X2JpdChpbmQsIGJtcCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmICghYm1wX3Rlc3RfYml0KGluZCwgYm1wKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0X19ibXBfY2xlYXJfYml0KGluZCwgYm1wKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGJtcF90ZXN0X2FuZF9zZXRfYml0KGluZCwgYm1wKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztfX3dlYWsgaW50IHRlc3RfYml0bWFwX3Rlc3RfYW5kX2NsZWFyX2JpdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXA7XG4mIzQzO1xuJiM0MztcdGJtcCA9IGJtcF9hbGxvYyhURVNUX0JJVFMpO1xuJiM0MztcdGlmICghYm1wKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdGlmICghdGVzdF9iaXRtYXBfdGVzdF9hbmRfY2xlYXJfc2luZ2xlKGJtcCwgMCkpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKCF0ZXN0X2JpdG1hcF90ZXN0X2FuZF9jbGVhcl9zaW5nbGUoYm1wLCBNSURfQklUKSlcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoIXRlc3RfYml0bWFwX3Rlc3RfYW5kX2NsZWFyX3NpbmdsZShibXAsIExBU1RfQklUKSlcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoIWJtcF9lbXB0eShURVNUX0JJVFMsIGJtcCkpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0Ym1wX2ZyZWUoYm1wKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2VycjpcbiYjNDM7XHRibXBfZnJlZShibXApO1xuJiM0MztcdHJldHVybiAtRUlOVkFMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7X193ZWFrIGludCB0ZXN0X2JpdG1hcF90ZXN0X2FuZF9zZXRfYml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcDtcbiYjNDM7XG4mIzQzO1x0Ym1wID0gYm1wX2FsbG9jKFRFU1RfQklUUyk7XG4mIzQzO1x0aWYgKCFibXApXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0aWYgKCF0ZXN0X2JpdG1hcF90ZXN0X2FuZF9zZXRfc2luZ2xlKGJtcCwgMCkpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKCF0ZXN0X2JpdG1hcF90ZXN0X2FuZF9zZXRfc2luZ2xlKGJtcCwgTUlEX0JJVCkpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKCF0ZXN0X2JpdG1hcF90ZXN0X2FuZF9zZXRfc2luZ2xlKGJtcCwgTEFTVF9CSVQpKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdGJtcF9mcmVlKGJtcCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnI6XG4mIzQzO1x0Ym1wX2ZyZWUoYm1wKTtcbiYjNDM7XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztfX3dlYWsgaW50IHRlc3RfYml0bWFwX2FuZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJpdG1hcCBfX2FyZW5hICpzcmMxID0gTlVMTCwgKnNyYzIgPSBOVUxMLCAqZHN0ID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0c3JjMSA9IGJtcF9hbGxvYyhURVNUX0JJVFMpO1xuJiM0MztcdHNyYzIgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTtcbiYjNDM7XHRkc3QgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTtcbiYjNDM7XHRpZiAoIXNyYzEgfHwgIXNyYzIgfHwgIWRzdClcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHR0ZXN0X2JtcF9zZXRhbGwoZHN0KTtcbiYjNDM7XG4mIzQzO1x0X19ibXBfc2V0X2JpdCgwLCBzcmMxKTtcbiYjNDM7XHRfX2JtcF9zZXRfYml0KE1JRF9CSVQsIHNyYzEpO1xuJiM0MztcdF9fYm1wX3NldF9iaXQoTEFTVF9CSVQsIHNyYzEpO1xuJiM0MztcbiYjNDM7XHRfX2JtcF9zZXRfYml0KE1JRF9CSVQsIHNyYzIpO1xuJiM0MztcdF9fYm1wX3NldF9iaXQoTEFTVF9CSVQsIHNyYzIpO1xuJiM0MztcbiYjNDM7XHRibXBfYW5kKFRFU1RfQklUUywgZHN0LCBzcmMxLCBzcmMyKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGJtcF90ZXN0X2JpdCgwLCBkc3QpKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1x0aWYgKCFibXBfdGVzdF9iaXQoTUlEX0JJVCwgZHN0KSlcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcdGlmICghYm1wX3Rlc3RfYml0KExBU1RfQklULCBkc3QpKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdGlmIChkc3QtXHUwMDNlYml0c1swXSlcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcdGlmIChkc3QtXHUwMDNlYml0c1sxXSAhPSAoQklUX01BU0soTUlEX0JJVCkgfCBCSVRfTUFTSyhMQVNUX0JJVCkpKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdGJtcF9mcmVlKHNyYzEpO1xuJiM0MztcdGJtcF9mcmVlKHNyYzIpO1xuJiM0MztcdGJtcF9mcmVlKGRzdCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnI6XG4mIzQzO1x0Ym1wX2ZyZWUoc3JjMSk7XG4mIzQzO1x0Ym1wX2ZyZWUoc3JjMik7XG4mIzQzO1x0Ym1wX2ZyZWUoZHN0KTtcbiYjNDM7XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4mIzQzO19fd2VhayBpbnQgdGVzdF9iaXRtYXBfb3Iodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqc3JjMSA9IE5VTEwsICpzcmMyID0gTlVMTCwgKmRzdCA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdHNyYzEgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTtcbiYjNDM7XHRzcmMyID0gYm1wX2FsbG9jKFRFU1RfQklUUyk7XG4mIzQzO1x0ZHN0ID0gYm1wX2FsbG9jKFRFU1RfQklUUyk7XG4mIzQzO1x0aWYgKCFzcmMxIHx8ICFzcmMyIHx8ICFkc3QpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0dGVzdF9ibXBfc2V0YWxsKGRzdCk7XG4mIzQzO1xuJiM0MztcdF9fYm1wX3NldF9iaXQoMCwgc3JjMSk7XG4mIzQzO1x0X19ibXBfc2V0X2JpdChMQVNUX0JJVCwgc3JjMSk7XG4mIzQzO1xuJiM0MztcdF9fYm1wX3NldF9iaXQoTUlEX0JJVCwgc3JjMik7XG4mIzQzO1x0X19ibXBfc2V0X2JpdChMQVNUX0JJVCwgc3JjMik7XG4mIzQzO1xuJiM0MztcdGJtcF9vcihURVNUX0JJVFMsIGRzdCwgc3JjMSwgc3JjMik7XG4mIzQzO1xuJiM0MztcdGlmICghYm1wX3Rlc3RfYml0KDAsIGRzdCkpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XHRpZiAoIWJtcF90ZXN0X2JpdChNSURfQklULCBkc3QpKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1x0aWYgKCFibXBfdGVzdF9iaXQoTEFTVF9CSVQsIGRzdCkpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKGRzdC1cdTAwM2ViaXRzWzBdICE9IEJJVF9NQVNLKDApKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1x0aWYgKGRzdC1cdTAwM2ViaXRzWzFdICE9IChCSVRfTUFTSyhNSURfQklUKSB8IEJJVF9NQVNLKExBU1RfQklUKSkpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0Ym1wX2ZyZWUoc3JjMSk7XG4mIzQzO1x0Ym1wX2ZyZWUoc3JjMik7XG4mIzQzO1x0Ym1wX2ZyZWUoZHN0KTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2VycjpcbiYjNDM7XHRibXBfZnJlZShzcmMxKTtcbiYjNDM7XHRibXBfZnJlZShzcmMyKTtcbiYjNDM7XHRibXBfZnJlZShkc3QpO1xuJiM0MztcdHJldHVybiAtRUlOVkFMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7X193ZWFrIGludCB0ZXN0X2JpdG1hcF9zdWJzZXQodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYmlnID0gTlVMTCwgKnNtYWxsID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0YmlnID0gYm1wX2FsbG9jKFRFU1RfQklUUyk7XG4mIzQzO1x0c21hbGwgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTtcbiYjNDM7XHRpZiAoIWJpZyB8fCAhc21hbGwpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFibXBfc3Vic2V0KFRFU1RfQklUUywgYmlnLCBzbWFsbCkpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0X19ibXBfc2V0X2JpdCgwLCBzbWFsbCk7XG4mIzQzO1x0aWYgKGJtcF9zdWJzZXQoVEVTVF9CSVRTLCBiaWcsIHNtYWxsKSlcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRfX2JtcF9zZXRfYml0KDAsIGJpZyk7XG4mIzQzO1x0aWYgKCFibXBfc3Vic2V0KFRFU1RfQklUUywgYmlnLCBzbWFsbCkpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0X19ibXBfc2V0X2JpdChMQVNUX0JJVCwgc21hbGwpO1xuJiM0MztcdGlmIChibXBfc3Vic2V0KFRFU1RfQklUUywgYmlnLCBzbWFsbCkpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0X19ibXBfc2V0X2JpdChMQVNUX0JJVCwgYmlnKTtcbiYjNDM7XHRfX2JtcF9zZXRfYml0KE1JRF9CSVQsIGJpZyk7XG4mIzQzO1x0aWYgKCFibXBfc3Vic2V0KFRFU1RfQklUUywgYmlnLCBzbWFsbCkpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKGJtcF9zdWJzZXQoVEVTVF9CSVRTLCBzbWFsbCwgYmlnKSlcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRibXBfZnJlZShiaWcpO1xuJiM0MztcdGJtcF9mcmVlKHNtYWxsKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2VycjpcbiYjNDM7XHRibXBfZnJlZShiaWcpO1xuJiM0MztcdGJtcF9mcmVlKHNtYWxsKTtcbiYjNDM7XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztfX3dlYWsgaW50IHRlc3RfYml0bWFwX2ludGVyc2VjdHModm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYXJnMSA9IE5VTEwsICphcmcyID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0YXJnMSA9IGJtcF9hbGxvYyhURVNUX0JJVFMpO1xuJiM0MztcdGFyZzIgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTtcbiYjNDM7XHRpZiAoIWFyZzEgfHwgIWFyZzIpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKGJtcF9pbnRlcnNlY3RzKFRFU1RfQklUUywgYXJnMSwgYXJnMikpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0X19ibXBfc2V0X2JpdCgwLCBhcmcxKTtcbiYjNDM7XHRfX2JtcF9zZXRfYml0KE1JRF9CSVQsIGFyZzIpO1xuJiM0MztcdGlmIChibXBfaW50ZXJzZWN0cyhURVNUX0JJVFMsIGFyZzEsIGFyZzIpKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdF9fYm1wX3NldF9iaXQoTEFTVF9CSVQsIGFyZzEpO1xuJiM0MztcdF9fYm1wX3NldF9iaXQoTEFTVF9CSVQsIGFyZzIpO1xuJiM0MztcdGlmICghYm1wX2ludGVyc2VjdHMoVEVTVF9CSVRTLCBhcmcxLCBhcmcyKSlcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRibXBfZnJlZShhcmcxKTtcbiYjNDM7XHRibXBfZnJlZShhcmcyKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2VycjpcbiYjNDM7XHRibXBfZnJlZShhcmcxKTtcbiYjNDM7XHRibXBfZnJlZShhcmcyKTtcbiYjNDM7XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4mIzQzO19fd2VhayBpbnQgdGVzdF9iaXRtYXBfY29weSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJpdG1hcCBfX2FyZW5hICphcmcxID0gTlVMTCwgKmFyZzIgPSBOVUxMO1xuJiM0MztcbiYjNDM7XHRhcmcxID0gYm1wX2FsbG9jKFRFU1RfQklUUyk7XG4mIzQzO1x0YXJnMiA9IGJtcF9hbGxvYyhURVNUX0JJVFMpO1xuJiM0MztcdGlmICghYXJnMSB8fCAhYXJnMilcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRfX2JtcF9zZXRfYml0KDAsIGFyZzEpO1xuJiM0MztcdF9fYm1wX3NldF9iaXQoTUlEX0JJVCwgYXJnMSk7XG4mIzQzO1xuJiM0MztcdC8qIE1ha2Ugc3VyZSB0aG9zZSBnZXQgb3ZlcndyaXR0ZW4uICovXG4mIzQzO1x0X19ibXBfc2V0X2JpdCgxLCBhcmcyKTtcbiYjNDM7XHRfX2JtcF9zZXRfYml0KE1JRF9CSVQgJiM0MzsgMiwgYXJnMik7XG4mIzQzO1xuJiM0MztcdGJtcF9jb3B5KFRFU1RfQklUUywgYXJnMiwgYXJnMSk7XG4mIzQzO1xuJiM0MztcdC8qIEJpdG1hcHMgYXJlIGVxdWFsIGlmIGEgc3Vic2V0IG9mIGVhY2ggb3RoZXIuICovXG4mIzQzO1x0aWYgKCFibXBfc3Vic2V0KFRFU1RfQklUUywgYXJnMSwgYXJnMikgfHxcbiYjNDM7XHQgICAgIWJtcF9zdWJzZXQoVEVTVF9CSVRTLCBhcmcyLCBhcmcxKSlcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRibXBfZnJlZShhcmcxKTtcbiYjNDM7XHRibXBfZnJlZShhcmcyKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2VycjpcbiYjNDM7XHRibXBfZnJlZShhcmcxKTtcbiYjNDM7XHRibXBfZnJlZShhcmcyKTtcbiYjNDM7XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvc3RfYnVkZHkuYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYnVkZHkuYnBmLmNcbnNpbWlsYXJpdHkgaW5kZXggOTclXG5yZW5hbWUgZnJvbSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3N0X2J1ZGR5LmJwZi5jXG5yZW5hbWUgdG8gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2J1ZGR5LmJwZi5jXG5pbmRleCBiNDVhMzA2ODE2YzBlNC4uNTYyOGYwOTg3MDEyMWMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3N0X2J1ZGR5LmJwZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYnVkZHkuYnBmLmNcbkBAIC0xNzEsNyAmIzQzOzE3MSw4IEBAIF9fd2VhayBpbnQgdGVzdF9idWRkeV9hbGxvY19tdWx0aXBsZSh2b2lkKVxuIFNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuIF9fd2VhayBpbnQgdGVzdF9idWRkeV9hbGlnbm1lbnQodm9pZClcbiB7XG4tXHRpbnQgcmV0LCBpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1x0dTMyIGk7XG4gXG4gXHRyZXQgPSBidWRkeV9pbml0KFx1MDAyNmJ1ZGR5KTtcbiBcdGlmIChyZXQpXG5AQCAtMTc5LDYgJiM0MzsxODAsNyBAQCBfX3dlYWsgaW50IHRlc3RfYnVkZHlfYWxpZ25tZW50KHZvaWQpXG4gXG4gXHQvKiBBbGxvY2F0ZSB2YXJpb3VzIHNpemVzIGFuZCBjaGVjayBhbGlnbm1lbnQgKi9cbiBcdGZvciAoaSA9IHplcm87IGkgXHUwMDNjIDE3IFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGJhcnJpZXJfdmFyKGkpO1xuIFx0XHRwdHJzW2ldID0gYnVkZHlfYWxsb2MoXHUwMDI2YnVkZHksIGFsaWdubWVudF9zaXplc1tpXSk7XG4gXHRcdGlmICghcHRyc1tpXSkge1xuIFx0XHRcdGFyZW5hX3N0ZG91dChcJiMzNDthbGlnbm1lbnQgdGVzdDogYWxsb2MgZmFpbGVkIGZvciBzaXplICVsdVwmIzM0OyxcbkBAIC0xOTgsOCAmIzQzOzIwMCwxMCBAQCBfX3dlYWsgaW50IHRlc3RfYnVkZHlfYWxpZ25tZW50KHZvaWQpXG4gXHR9XG4gXG4gXHQvKiBGcmVlIGFsbCBhbGxvY2F0aW9ucyAqL1xuLVx0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgMTcgXHUwMDI2XHUwMDI2IGNhbl9sb29wOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRmb3IgKGkgPSB6ZXJvOyBpIFx1MDAzYyAxNyBcdTAwMjZcdTAwMjYgY2FuX2xvb3A7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRiYXJyaWVyX3ZhcihpKTtcbiBcdFx0YnVkZHlfZnJlZShcdTAwMjZidWRkeSwgcHRyc1tpXSk7XG4mIzQzO1x0fVxuIFxuIFx0YnVkZHlfZGVzdHJveShcdTAwMjZidWRkeSk7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X3BhcmFsbGVsX2JpdG1hcC5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9wYXJhbGxlbF9iaXRtYXAuYnBmLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZWVjMjg3MWUyYjBkMTBcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9wYXJhbGxlbF9iaXRtYXAuYnBmLmNcbkBAIC0wLDAgJiM0MzsxLDE5MCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTEdQTC0yLjEgT1IgQlNELTItQ2xhdXNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGZfYXRvbWljLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpYmFyZW5hL2NvbW1vbi5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaWJhcmVuYS9hc2FuLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGliYXJlbmEvYml0bWFwLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNkZWZpbmUgVEVTVF9CSVRNQVBfVEhSRUFEU1x0MlxuJiM0MzsjZGVmaW5lIFRFU1RfQklUTUFQX0JJVFNcdCgyICogQklUU19QRVJfTE9OR19MT05HKVxuJiM0MzsjZGVmaW5lIFRFU1RfQklUTUFQX1NZTkNfU1BJTlNcdEJQRl9NQVhfTE9PUFNcbiYjNDM7I2RlZmluZSBURVNUX0JJVE1BUF9JVEVSU1x0MTAgKiAxMDAwICogMTAwMFxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYml0bWFwO1xuJiM0MztzdGF0aWMgdm9sYXRpbGUgdTY0IHN0YXJ0ZWQ7XG4mIzQzO3N0YXRpYyB2b2xhdGlsZSBib29sIHRlc3RfYWJvcnQ7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBUaGUgdGVzdCBuZWVkcyBjbXB4Y2hnIGF0b21pY3Mgb24gYXJlbmEgbWVtb3J5LlxuJiM0MzsgKi9cbiYjNDM7I2lmIGRlZmluZWQoRU5BQkxFX0FUT01JQ1NfVEVTVFMpIFx1MDAyNlx1MDAyNlx0XHRcdFx0ICBcXFxuJiM0MztcdChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfYXJtNjQpIHx8IGRlZmluZWQoX19UQVJHRVRfQVJDSF94ODYpIHx8IFxcXG4mIzQzO1x0IGRlZmluZWQoX19UQVJHRVRfQVJDSF9zMzkwKSB8fCBcXFxuJiM0MztcdCBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfcG93ZXJwYykgfHxcdFx0XHRcdCAgXFxcbiYjNDM7XHQgKGRlZmluZWQoX19UQVJHRVRfQVJDSF9yaXNjdikgXHUwMDI2XHUwMDI2IF9fcmlzY3ZfeGxlbiA9PSA2NCkpXG4mIzQzO3N0YXRpYyBib29sIGJpdG1hcF90ZXN0c19lbmFibGVkKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgYm9vbCBiaXRtYXBfdGVzdHNfZW5hYmxlZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7X193ZWFrXG4mIzQzO2ludCBiaXRtYXBfd2FpdF9mb3Jfc3RhcnQodm9pZClcbiYjNDM7e1xuJiM0MztcdHU2NCBpO1xuJiM0MztcbiYjNDM7XHRfX3N5bmNfZmV0Y2hfYW5kX2FkZChcdTAwMjZzdGFydGVkLCAxKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgVEVTVF9CSVRNQVBfU1lOQ19TUElOUyBcdTAwMjZcdTAwMjYgY2FuX2xvb3A7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAodGVzdF9hYm9ydClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5UUjtcbiYjNDM7XHRcdGlmIChzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnN0YXJ0ZWQpIFx1MDAzZT0gVEVTVF9CSVRNQVBfVEhSRUFEUylcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR0ZXN0X2Fib3J0ID0gdHJ1ZTtcbiYjNDM7XHRyZXR1cm4gLUVUSU1FRE9VVDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVGhlIHRlc3QgbWFrZXMgc3VyZSB3cml0ZXMgZG9uJiMzOTt0IGNsb2JiZXIgZWFjaCBvdGhlciBieSBvdmVyd3JpdGluZ1xuJiM0MzsgKiB0aGUgc2FtZSB3b3JkLiBPbmUgdGhyZWFkIGFsd2F5cyB3cml0ZXMgb24gZXZlbiBiaXRzLCB0aGUgb3RoZXIgb25cbiYjNDM7ICogb2Rkcy4gQm90aCBzaG91bGQgYmUgYWJsZSB0byBvcGVyYXRlIG9uIHRoZSBiaXRtYXAgb2JsaXZpb3VzIG9mIHRoZVxuJiM0MzsgKiBvdGhlciYjMzk7cyBvcGVyYXRpb25zLlxuJiM0MzsgKi9cbiYjNDM7X193ZWFrXG4mIzQzO2ludCBiaXRtYXBfdGVzdF9iaXRfc2VxdWVuY2UodTMyIGJpdClcbiYjNDM7e1xuJiM0MztcdGlmIChibXBfdGVzdF9hbmRfY2xlYXJfYml0KGJpdCwgYml0bWFwKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAoYm1wX3Rlc3RfYW5kX3NldF9iaXQoYml0LCBiaXRtYXApKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0aWYgKCFibXBfdGVzdF9iaXQoYml0LCBiaXRtYXApKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmICghYm1wX3Rlc3RfYW5kX3NldF9iaXQoYml0LCBiaXRtYXApKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0aWYgKCFibXBfdGVzdF9iaXQoYml0LCBiaXRtYXApKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmICghYm1wX3Rlc3RfYW5kX2NsZWFyX2JpdChiaXQsIGJpdG1hcCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRpZiAoYm1wX3Rlc3RfYml0KGJpdCwgYml0bWFwKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAoYm1wX3Rlc3RfYW5kX2NsZWFyX2JpdChiaXQsIGJpdG1hcCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0Ym1wX3NldF9iaXQoYml0LCBiaXRtYXApO1xuJiM0MztcdGlmICghYm1wX3Rlc3RfYml0KGJpdCwgYml0bWFwKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRibXBfY2xlYXJfYml0KGJpdCwgYml0bWFwKTtcbiYjNDM7XHRpZiAoYm1wX3Rlc3RfYml0KGJpdCwgYml0bWFwKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRibXBfc2V0X2JpdChiaXQsIGJpdG1hcCk7XG4mIzQzO1x0aWYgKCFibXBfdGVzdF9iaXQoYml0LCBiaXRtYXApKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYml0bWFwX3Rlc3RfcmVzZXRfc2luZ2xlKGludCBwYXJpdHkpXG4mIzQzO3tcbiYjNDM7XHR1MzIgYml0O1xuJiM0MztcbiYjNDM7XHRmb3IgKGJpdCA9IHBhcml0eTsgYml0IFx1MDAzYyBURVNUX0JJVE1BUF9CSVRTIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgYml0ICYjNDM7PSAyKVxuJiM0MztcdFx0Ym1wX2NsZWFyX2JpdChiaXQsIGJpdG1hcCk7XG4mIzQzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGJpdG1hcF90ZXN0X2NvbW1vbl9zaW5nbGUoaW50IHBhcml0eSlcbiYjNDM7e1xuJiM0MztcdHUzMiBiaXQ7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChiaXQgPSBwYXJpdHk7IGJpdCBcdTAwM2MgVEVTVF9CSVRNQVBfQklUUyBcdTAwMjZcdTAwMjYgY2FuX2xvb3A7IGJpdCAmIzQzOz0gMikge1xuJiM0MztcdFx0aWYgKHRlc3RfYWJvcnQpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVFI7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gYml0bWFwX3Rlc3RfYml0X3NlcXVlbmNlKGJpdCk7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdHRlc3RfYWJvcnQgPSB0cnVlO1xuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYml0bWFwX3Rlc3RfY29tbW9uKGludCBwYXJpdHkpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdHUzMiBpO1xuJiM0MztcbiYjNDM7XHRhcmVuYV9zdWJwcm9nX2luaXQoKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYml0bWFwX3dhaXRfZm9yX3N0YXJ0KCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IHplcm87IGkgXHUwMDNjIFRFU1RfQklUTUFQX0lURVJTIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHJldCA9IGJpdG1hcF90ZXN0X2NvbW1vbl9zaW5nbGUocGFyaXR5KTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHRlc3RfYWJvcnQpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdGJpdG1hcF90ZXN0X3Jlc2V0X3NpbmdsZShwYXJpdHkpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBpbnQgcGFyYWxsZWxfdGVzdF9iaXRtYXBfX2VuYWJsZWQodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBiaXRtYXBfdGVzdHNfZW5hYmxlZCgpID8gMCA6IC1FT1BOT1RTVVBQO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgaW50IHBhcmFsbGVsX3Rlc3RfYml0bWFwX19pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRiaXRtYXAgPSBibXBfYWxsb2MoVEVTVF9CSVRNQVBfQklUUyk7XG4mIzQzO1x0aWYgKCFiaXRtYXApXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBpbnQgcGFyYWxsZWxfdGVzdF9iaXRtYXBfX2Zpbmkodm9pZClcbiYjNDM7e1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIWJpdG1hcClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRibXBfZnJlZShiaXRtYXApO1xuJiM0MztcdGJpdG1hcCA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBpbnQgcGFyYWxsZWxfdGVzdF9iaXRtYXBfXzAodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBiaXRtYXBfdGVzdF9jb21tb24oMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBpbnQgcGFyYWxsZWxfdGVzdF9iaXRtYXBfXzEodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBiaXRtYXBfdGVzdF9jb21tb24oMSk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfcGFyYWxsZWxfc3BtYy5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9wYXJhbGxlbF9zcG1jLmJwZi5jXG5pbmRleCBmMDhmMmE5MmUxOTQ2OC4uNWZhOTZlYjc0MDk1MWMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfcGFyYWxsZWxfc3BtYy5icGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X3BhcmFsbGVsX3NwbWMuYnBmLmNcbkBAIC0xNTUsNyAmIzQzOzE1NSw3IEBAIGludCBzcG1jX3F1aWVzY2Vfb25fb3duZXIodTY0IGVwb2NoKVxuIHtcbiBcdHU2NCBpO1xuIFxuLVx0YnBmX2ZvcihpLCAwLCBURVNUX1NQTUNfU1lOQ19TUElOUykge1xuJiM0MztcdGZvciAoaSA9IHplcm87IGkgXHUwMDNjIFRFU1RfU1BNQ19TWU5DX1NQSU5TIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSYjNDM7JiM0MzspIHtcbiBcdFx0aWYgKHRlc3RfYWJvcnQpXG4gXHRcdFx0cmV0dXJuIC1FSU5UUjtcbiBcdFx0aWYgKHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2b3duZXJfZXBvY2gpIFx1MDAzZT0gZXBvY2gpXG5AQCAtMTc1LDggJiM0MzsxNzUsNyBAQCBpbnQgc3BtY19xdWllc2NlX29uX3N0ZWFsZXIodTY0IGVwb2NoKVxuIFx0aW50IGVyciA9IC1FVElNRURPVVQ7XG4gXG4gXHR0YXJnZXQgPSBTVEVBTEVSX0VQT0NIKGVwb2NoKTtcbi1cdGJwZl9mb3IoaSwgMCwgVEVTVF9TUE1DX1NZTkNfU1BJTlMpIHtcbi1cbiYjNDM7XHRmb3IgKGkgPSB6ZXJvOyBpIFx1MDAzYyBURVNUX1NQTUNfU1lOQ19TUElOUyBcdTAwMjZcdTAwMjYgY2FuX2xvb3A7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGlmICh0ZXN0X2Fib3J0KSB7XG4gXHRcdFx0ZXJyID0gLUVJTlRSO1xuIFx0XHRcdGJyZWFrO1xuQEAgLTM5MSw3ICYjNDM7MzkwLDcgQEAgaW50IHNwbWNfd2FpdF9mb3Jfc3RlYWxlcnNfdG9fc3RhcnQodTY0IHRhcmdldClcbiB7XG4gXHR1NjQgaTtcbiBcbi1cdGJwZl9mb3IoaSwgMCwgVEVTVF9TUE1DX1NZTkNfU1BJTlMpIHtcbiYjNDM7XHRmb3IgKGkgPSB6ZXJvOyBpIFx1MDAzYyBURVNUX1NQTUNfU1lOQ19TUElOUyBcdTAwMjZcdTAwMjYgY2FuX2xvb3A7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGlmICh0ZXN0X2Fib3J0KVxuIFx0XHRcdHJldHVybiAtRUlOVFI7XG4gXHRcdGlmIChSRUFEX09OQ0Uoc3RlYWxlcnNfc3RhcnRlZCkgXHUwMDNlPSB0YXJnZXQpXG5AQCAtNTM3LDcgJiM0Mzs1MzYsNyBAQCBzdGF0aWMgaW50IHNwbWNfd2FpdF9mb3Jfcm91bmRfc3RlYWxzKHU2NCB0YXJnZXQpXG4gXG4gXHRhcmVuYV9zdWJwcm9nX2luaXQoKTtcbiBcbi1cdGJwZl9mb3IoaSwgMCwgVEVTVF9TUE1DX1NZTkNfU1BJTlMpIHtcbiYjNDM7XHRmb3IgKGkgPSB6ZXJvOyBpIFx1MDAzYyBURVNUX1NQTUNfU1lOQ19TUElOUyBcdTAwMjZcdTAwMjYgY2FuX2xvb3A7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGlmICh0ZXN0X2Fib3J0KVxuIFx0XHRcdHJldHVybiAtRUlOVFI7XG4gXHRcdGlmIChyb3VuZF9zdGVhbHMgXHUwMDNlPSB0YXJnZXQpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9iaXRtYXAuYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2JpdG1hcC5icGYuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi44MGU4MTQ0MDFmYjllYVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9iaXRtYXAuYnBmLmNcbkBAIC0wLDAgJiM0MzsxLDI0NSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTEdQTC0yLjEgT1IgQlNELTItQ2xhdXNlXG4mIzQzOy8qXG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNS0yMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjUtMjAyNiBFbWlsIFRzYWxhcGF0aXMgXHUwMDNjZW1pbEBldHNhbGFwYXRpcy5jb21cdTAwM2VcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaWJhcmVuYS9jb21tb24uaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGliYXJlbmEvYXNhbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpYmFyZW5hL2JpdG1hcC5oXHUwMDNlXG4mIzQzO1xuJiM0MztfX3dlYWtcbiYjNDM7c3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXBfYWxsb2Moc2l6ZV90IGJpdHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcDtcbiYjNDM7XHRzaXplX3Qgc2l6ZSA9IEJJVFNfVE9fTE9OR19MT05HUyhiaXRzKSAqIHNpemVvZihibXAtXHUwMDNlYml0c1swXSk7XG4mIzQzO1xuJiM0MztcdC8qIEFzc3VtZSBsb25nLWFsaWduZWQgbWFza3MuICovXG4mIzQzO1x0aWYgKGJpdHMgJSBCSVRTX1BFUl9MT05HX0xPTkcpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0Ym1wID0gKHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqKWFyZW5hX21hbGxvYyhzaXplKTtcbiYjNDM7XHRpZiAoIWJtcClcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRibXBfY2xlYXIoYml0cywgYm1wKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGJtcDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7X193ZWFrXG4mIzQzO3ZvaWQgYm1wX2ZyZWUoc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApXG4mIzQzO3tcbiYjNDM7XHRhcmVuYV9mcmVlKGJtcCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fd2Vha1xuJiM0Mzt2b2lkIF9fYm1wX3NldF9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApXG4mIzQzO3tcbiYjNDM7XHRibXAtXHUwMDNlYml0c1tCSVRfV09SRChiaXQpXSB8PSBCSVRfTUFTSyhiaXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztfX3dlYWtcbiYjNDM7dm9pZCBfX2JtcF9jbGVhcl9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApXG4mIzQzO3tcbiYjNDM7XHRibXAtXHUwMDNlYml0c1tCSVRfV09SRChiaXQpXSBcdTAwMjY9IH5CSVRfTUFTSyhiaXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztfX3dlYWtcbiYjNDM7Ym9vbCBibXBfdGVzdF9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYm1wLVx1MDAzZWJpdHNbQklUX1dPUkQoYml0KV0gXHUwMDI2IEJJVF9NQVNLKGJpdCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fd2Vha1xuJiM0Mztib29sIGJtcF90ZXN0X2FuZF9jbGVhcl9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApXG4mIzQzO3tcbiYjNDM7XHR1NjQgdmFsID0gQklUX01BU0soYml0KTtcbiYjNDM7XHR1MzIgaWR4ID0gQklUX1dPUkQoYml0KTtcbiYjNDM7XHR1NjQgb2xkLCBuZXcsIGFjdHVhbDtcbiYjNDM7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0b2xkID0gYm1wLVx1MDAzZWJpdHNbaWR4XTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIShvbGQgXHUwMDI2IHZhbCkpXG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0XHRuZXcgPSBvbGQgXHUwMDI2IH52YWw7XG4mIzQzO1x0XHRhY3R1YWwgPSBjbXB4Y2hnKFx1MDAyNmJtcC1cdTAwM2ViaXRzW2lkeF0sIG9sZCwgbmV3KTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoYWN0dWFsID09IG9sZClcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdH0gd2hpbGUgKGNhbl9sb29wKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztfX3dlYWtcbiYjNDM7Ym9vbCBibXBfdGVzdF9hbmRfc2V0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcClcbiYjNDM7e1xuJiM0MztcdHU2NCB2YWwgPSBCSVRfTUFTSyhiaXQpO1xuJiM0MztcdHUzMiBpZHggPSBCSVRfV09SRChiaXQpO1xuJiM0MztcdHU2NCBvbGQsIG5ldywgYWN0dWFsO1xuJiM0MztcbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHRvbGQgPSBibXAtXHUwMDNlYml0c1tpZHhdO1xuJiM0MztcbiYjNDM7XHRcdGlmICgob2xkIFx1MDAyNiB2YWwpKVxuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0XHRuZXcgPSBvbGQgfCB2YWw7XG4mIzQzO1x0XHRhY3R1YWwgPSBjbXB4Y2hnKFx1MDAyNmJtcC1cdTAwM2ViaXRzW2lkeF0sIG9sZCwgbmV3KTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoYWN0dWFsID09IG9sZClcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHR9IHdoaWxlIChjYW5fbG9vcCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7X193ZWFrXG4mIzQzO3ZvaWQgYm1wX2NsZWFyX2JpdCh1MzIgYml0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcClcbiYjNDM7e1xuJiM0MztcdHU2NCB2YWwgPSBCSVRfTUFTSyhiaXQpO1xuJiM0MztcdHUzMiBpZHggPSBCSVRfV09SRChiaXQpO1xuJiM0MztcdHU2NCBvbGQsIG5ldywgYWN0dWFsO1xuJiM0MztcbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHRvbGQgPSBibXAtXHUwMDNlYml0c1tpZHhdO1xuJiM0MztcdFx0bmV3ID0gb2xkIFx1MDAyNiB+dmFsO1xuJiM0MztcdFx0YWN0dWFsID0gY21weGNoZyhcdTAwMjZibXAtXHUwMDNlYml0c1tpZHhdLCBvbGQsIG5ldyk7XG4mIzQzO1xuJiM0MztcdH0gd2hpbGUgKGFjdHVhbCAhPSBvbGQgXHUwMDI2XHUwMDI2IGNhbl9sb29wKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7X193ZWFrXG4mIzQzO3ZvaWQgYm1wX3NldF9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApXG4mIzQzO3tcbiYjNDM7XHR1NjQgdmFsID0gQklUX01BU0soYml0KTtcbiYjNDM7XHR1MzIgaWR4ID0gQklUX1dPUkQoYml0KTtcbiYjNDM7XHR1NjQgb2xkLCBuZXcsIGFjdHVhbDtcbiYjNDM7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0b2xkID0gYm1wLVx1MDAzZWJpdHNbaWR4XTtcbiYjNDM7XHRcdG5ldyA9IG9sZCB8IHZhbDtcbiYjNDM7XHRcdGFjdHVhbCA9IGNtcHhjaGcoXHUwMDI2Ym1wLVx1MDAzZWJpdHNbaWR4XSwgb2xkLCBuZXcpO1xuJiM0MztcbiYjNDM7XHR9IHdoaWxlIChhY3R1YWwgIT0gb2xkIFx1MDAyNlx1MDAyNiBjYW5fbG9vcCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fd2Vha1xuJiM0Mzt2b2lkIGJtcF9jbGVhcihzaXplX3QgYml0cywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApXG4mIzQzO3tcbiYjNDM7XHRzaXplX3QgbndvcmRzID0gQklUU19UT19MT05HX0xPTkdTKGJpdHMpO1xuJiM0MztcdHZvbGF0aWxlIHUzMiBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSB6ZXJvOyBpIFx1MDAzYyBud29yZHMgXHUwMDI2XHUwMDI2IGNhbl9sb29wOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGJtcC1cdTAwM2ViaXRzW2ldID0gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB1NjQgYm1wX2xhc3Rfd29yZF9tYXNrKHNpemVfdCBiaXRzKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHJlbSA9IGJpdHMgJSBCSVRTX1BFUl9MT05HX0xPTkc7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZW0gPyAoMVVMTCBcdTAwM2NcdTAwM2MgcmVtKSAtIDEgOiB+MFVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7X193ZWFrXG4mIzQzO3ZvaWQgYm1wX2FuZChzaXplX3QgYml0cywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpkc3QsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqc3JjMSwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpzcmMyKVxuJiM0Mzt7XG4mIzQzO1x0c2l6ZV90IG53b3JkcyA9IEJJVFNfVE9fTE9OR19MT05HUyhiaXRzKTtcbiYjNDM7XHR2b2xhdGlsZSB1MzIgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgbndvcmRzIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRkc3QtXHUwMDNlYml0c1tpXSA9IHNyYzEtXHUwMDNlYml0c1tpXSBcdTAwMjYgc3JjMi1cdTAwM2ViaXRzW2ldO1xuJiM0MztcbiYjNDM7XHRpZiAobndvcmRzIFx1MDAyNlx1MDAyNiBiaXRzICUgQklUU19QRVJfTE9OR19MT05HKVxuJiM0MztcdFx0ZHN0LVx1MDAzZWJpdHNbbndvcmRzIC0gMV0gXHUwMDI2PSBibXBfbGFzdF93b3JkX21hc2soYml0cyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fd2Vha1xuJiM0Mzt2b2lkIGJtcF9vcihzaXplX3QgYml0cywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpkc3QsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqc3JjMSwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpzcmMyKVxuJiM0Mzt7XG4mIzQzO1x0c2l6ZV90IG53b3JkcyA9IEJJVFNfVE9fTE9OR19MT05HUyhiaXRzKTtcbiYjNDM7XHR2b2xhdGlsZSB1MzIgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgbndvcmRzIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRkc3QtXHUwMDNlYml0c1tpXSA9IHNyYzEtXHUwMDNlYml0c1tpXSB8IHNyYzItXHUwMDNlYml0c1tpXTtcbiYjNDM7XG4mIzQzO1x0aWYgKG53b3JkcyBcdTAwMjZcdTAwMjYgYml0cyAlIEJJVFNfUEVSX0xPTkdfTE9ORylcbiYjNDM7XHRcdGRzdC1cdTAwM2ViaXRzW253b3JkcyAtIDFdIFx1MDAyNj0gYm1wX2xhc3Rfd29yZF9tYXNrKGJpdHMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztfX3dlYWtcbiYjNDM7Ym9vbCBibXBfZW1wdHkoc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKVxuJiM0Mzt7XG4mIzQzO1x0c2l6ZV90IG53b3JkcyA9IEJJVFNfVE9fTE9OR19MT05HUyhiaXRzKTtcbiYjNDM7XHR2b2xhdGlsZSB1MzIgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgbndvcmRzIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHU2NCBtYXNrID0gKGkgPT0gbndvcmRzIC0gMSkgPyBibXBfbGFzdF93b3JkX21hc2soYml0cykgOiB+MFVMTDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoYm1wLVx1MDAzZWJpdHNbaV0gXHUwMDI2IG1hc2spXG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztfX3dlYWtcbiYjNDM7dm9pZCBibXBfY29weShzaXplX3QgYml0cywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpkc3QsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqc3JjKVxuJiM0Mzt7XG4mIzQzO1x0c2l6ZV90IG53b3JkcyA9IEJJVFNfVE9fTE9OR19MT05HUyhiaXRzKTtcbiYjNDM7XHR2b2xhdGlsZSB1MzIgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgbndvcmRzIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRkc3QtXHUwMDNlYml0c1tpXSA9IHNyYy1cdTAwM2ViaXRzW2ldO1xuJiM0MztcbiYjNDM7XHRpZiAobndvcmRzIFx1MDAyNlx1MDAyNiBiaXRzICUgQklUU19QRVJfTE9OR19MT05HKVxuJiM0MztcdFx0ZHN0LVx1MDAzZWJpdHNbbndvcmRzIC0gMV0gXHUwMDI2PSBibXBfbGFzdF93b3JkX21hc2soYml0cyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fd2Vha1xuJiM0Mztib29sIGJtcF9zdWJzZXQoc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYmlnLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKnNtYWxsKVxuJiM0Mzt7XG4mIzQzO1x0c2l6ZV90IG53b3JkcyA9IEJJVFNfVE9fTE9OR19MT05HUyhiaXRzKTtcbiYjNDM7XHR2b2xhdGlsZSB1MzIgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgbndvcmRzIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHU2NCBtYXNrID0gKGkgPT0gbndvcmRzIC0gMSkgPyBibXBfbGFzdF93b3JkX21hc2soYml0cykgOiB+MFVMTDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAofmJpZy1cdTAwM2ViaXRzW2ldIFx1MDAyNiBzbWFsbC1cdTAwM2ViaXRzW2ldIFx1MDAyNiBtYXNrKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7X193ZWFrXG4mIzQzO2Jvb2wgYm1wX2ludGVyc2VjdHMoc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYXJnMSwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICphcmcyKVxuJiM0Mzt7XG4mIzQzO1x0c2l6ZV90IG53b3JkcyA9IEJJVFNfVE9fTE9OR19MT05HUyhiaXRzKTtcbiYjNDM7XHR2b2xhdGlsZSB1MzIgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgbndvcmRzIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHU2NCBtYXNrID0gKGkgPT0gbndvcmRzIC0gMSkgPyBibXBfbGFzdF93b3JkX21hc2soYml0cykgOiB+MFVMTDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoYXJnMS1cdTAwM2ViaXRzW2ldIFx1MDAyNiBhcmcyLVx1MDAzZWJpdHNbaV0gXHUwMDI2IG1hc2spXG4mIzQzO1x0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztfX3dlYWtcbiYjNDM7dm9pZCBibXBfcHJpbnQoc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKVxuJiM0Mzt7XG4mIzQzO1x0c2l6ZV90IG53b3JkcyA9IEJJVFNfVE9fTE9OR19MT05HUyhiaXRzKTtcbiYjNDM7XHR2b2xhdGlsZSB1MzIgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgbndvcmRzIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRhcmVuYV9zdGRlcnIoXCYjMzQ7JTAxNmxseCBcJiMzNDssIGJtcC1cdTAwM2ViaXRzW2ldKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvY29tbW9uLmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9jb21tb24uYnBmLmNcbmluZGV4IDUwYmU1NzIxM2RmYjhkLi41NjlmMGY2NGQ1MThiMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvY29tbW9uLmJwZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2NvbW1vbi5icGYuY1xuQEAgLTQsOSAmIzQzOzQsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpYmFyZW5hL2FzYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpYmFyZW5hL2J1ZGR5LmhcdTAwM2VcbiBcbi1jb25zdCB2b2xhdGlsZSB1MzIgemVybyA9IDA7XG4tXG4gc3RydWN0IGJ1ZGR5IF9fYXJlbmEgYnVkZHk7XG4mIzQzO3ZvbGF0aWxlIHUzMiB6ZXJvID0gMDtcbiBcbiBpbnQgYXJlbmFfZmxzKF9fdTY0IHdvcmQpXG4ge1xuQEAgLTM4LDYgJiM0MzszNywxMiBAQCBfX3dlYWsgaW50IGFyZW5hX2J1ZGR5X3Jlc2V0KHZvaWQpXG4gXHRyZXR1cm4gYnVkZHlfaW5pdChcdTAwMjZidWRkeSk7XG4gfVxuIFxuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7X193ZWFrIGludCBhcmVuYV9idWRkeV9kZXN0cm95KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYnVkZHlfZGVzdHJveShcdTAwMjZidWRkeSk7XG4mIzQzO31cbiYjNDM7XG4gX193ZWFrIHZvaWQgX19hcmVuYSAqYXJlbmFfbWFsbG9jKHNpemVfdCBzaXplKVxuIHtcbiBcdHJldHVybiBidWRkeV9hbGxvYyhcdTAwMjZidWRkeSwgc2l6ZSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hLmNcbmluZGV4IDYxZWE2OGRjZTQxMDVmLi5iYTVhNWE1MGY3YzA3ZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hLmNcbkBAIC0xNSw3ICYjNDM7MTUsMTIgQEAgc3RhdGljIHZvaWQgcnVuX2xpYmFyZW5hX3Rlc3Qoc3RydWN0IGxpYmFyZW5hICpza2VsLCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csXG4ge1xuIFx0aW50IHJldDtcbiBcbi1cdGlmICghc3Ryc3RyKG5hbWUsIFwmIzM0O3Rlc3RfYnVkZHlcJiMzNDspKSB7XG4mIzQzO1x0aWYgKHN0cnN0cihuYW1lLCBcJiMzNDt0ZXN0X2J1ZGR5XCYjMzQ7KSkge1xuJiM0MztcdFx0LyogQnVkZHkgdGVzdHMgaW5pdGlhbGl6ZSB0aGUgYWxsb2NhdG9yIGRpcmVjdGx5LiAqL1xuJiM0MztcdFx0cmV0ID0gbGliYXJlbmFfcnVuX3Byb2coYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MuYXJlbmFfYnVkZHlfZGVzdHJveSkpO1xuJiM0MztcdFx0aWYgKCFBU1NFUlRfT0socmV0LCBcJiMzNDthcmVuYV9idWRkeV9kZXN0cm95XCYjMzQ7KSlcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdH0gZWxzZSB7XG4gXHRcdHJldCA9IGxpYmFyZW5hX3J1bl9wcm9nKGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmFyZW5hX2J1ZGR5X3Jlc2V0KSk7XG4gXHRcdGlmICghQVNTRVJUX09LKHJldCwgXCYjMzQ7YXJlbmFfYnVkZHlfcmVzZXRcJiMzNDspKVxuIFx0XHRcdHJldHVybjtcbkBAIC0yNCw3ICYjNDM7MjksNiBAQCBzdGF0aWMgdm9pZCBydW5fbGliYXJlbmFfdGVzdChzdHJ1Y3QgbGliYXJlbmEgKnNrZWwsIHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyxcbiBcdHJldCA9IGxpYmFyZW5hX3J1bl9wcm9nKGJwZl9wcm9ncmFtX19mZChwcm9nKSk7XG4gXG4gXHRBU1NFUlRfT0socmV0LCBuYW1lKTtcbi1cbiB9XG4gXG4gc3RhdGljIHZvaWQgKnJ1bl9saWJhcmVuYV9wYXJhbGxlbF9wcm9nKHZvaWQgKmFyZylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmNcbmluZGV4IGQ1OWQ5ZGQxMmVmMmIyLi5mODk3NDA1ZjcwMWRkNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jXG5AQCAtMTcsNyAmIzQzOzE3LDEyIEBAIHN0YXRpYyB2b2lkIHJ1bl9saWJhcmVuYV9hc2FuX3Rlc3Qoc3RydWN0IGxpYmFyZW5hX2FzYW4gKnNrZWwsXG4ge1xuIFx0aW50IHJldDtcbiBcbi1cdGlmICghc3Ryc3RyKG5hbWUsIFwmIzM0O3Rlc3RfYnVkZHlcJiMzNDspKSB7XG4mIzQzO1x0aWYgKHN0cnN0cihuYW1lLCBcJiMzNDt0ZXN0X2J1ZGR5XCYjMzQ7KSkge1xuJiM0MztcdFx0LyogQnVkZHkgdGVzdHMgaW5pdGlhbGl6ZSB0aGUgYWxsb2NhdG9yIGRpcmVjdGx5LiAqL1xuJiM0MztcdFx0cmV0ID0gbGliYXJlbmFfcnVuX3Byb2coYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MuYXJlbmFfYnVkZHlfZGVzdHJveSkpO1xuJiM0MztcdFx0aWYgKCFBU1NFUlRfT0socmV0LCBcJiMzNDthcmVuYV9idWRkeV9kZXN0cm95XCYjMzQ7KSlcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdH0gZWxzZSB7XG4gXHRcdHJldCA9IGxpYmFyZW5hX3J1bl9wcm9nKGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmFyZW5hX2J1ZGR5X3Jlc2V0KSk7XG4gXHRcdGlmICghQVNTRVJUX09LKHJldCwgXCYjMzQ7YXJlbmFfYnVkZHlfcmVzZXRcJiMzNDspKVxuIFx0XHRcdHJldHVybjtcbkBAIC05MCw0ICYjNDM7OTUsMyBAQCB2b2lkIHRlc3RfbGliYXJlbmFfYXNhbih2b2lkKVxuIFxuIFx0cmV0dXJuO1xuIH1cbi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwMjowMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgYW5kIG1vZGlmaWVzIEJQRiBzZWxmdGVzdHMgZm9yIGxpYmFyZW5hIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZSBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGM0YzE0NDI5MmNlNWNlOGMwOTYzMDYwM2YzN2Q4NzhhZjUyN2ZkOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDcgMDI6MDE6MjggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9iaXRtYXAuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2JpdG1hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jZjZiNjNmNWQ5YTQ1ZgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2JpdG1hcC5oCkBAIC0wLDAgJiM0MzsxLDM0IEBACiYjNDM7I3ByYWdtYSBvbmNlCiYjNDM7CiYjNDM7I2RlZmluZSBCSVRTX1BFUl9CWVRFCQk4CiYjNDM7I2RlZmluZSBCWVRFU19UT19CSVRTKG5iKQkoKG5iKSAqIEJJVFNfUEVSX0JZVEUpCiYjNDM7CiYjNDM7I2RlZmluZSBCSVRTX1BFUl9MT05HX0xPTkcJKHNpemVvZihsb25nIGxvbmcpICogQklUU19QRVJfQllURSkKJiM0MzsjZGVmaW5lIEJJVFNfVE9fTE9OR19MT05HUyhucikJKCgobnIpICYjNDM7IEJJVFNfUEVSX0xPTkdfTE9ORyAtIDEpIC8gQklUU19QRVJfTE9OR19MT05HKQomIzQzOyNkZWZpbmUgQklUX01BU0sobnIpCQkoMVVMTCAmbHQ7Jmx0OyAoKG5yKSAlIEJJVFNfUEVSX0xPTkdfTE9ORykpCiYjNDM7I2RlZmluZSBCSVRfV09SRChucikJCSgobnIpIC8gQklUU19QRVJfTE9OR19MT05HKQomIzQzOwomIzQzO3N0cnVjdCBiaXRtYXAgewomIzQzOwl1NjQgYml0c1swXTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wX2FsbG9jKHNpemVfdCBiaXRzKTsKJiM0Mzt2b2lkIGJtcF9mcmVlKHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKTsKJiM0MzsKJiM0Mzt2b2lkIF9fYm1wX3NldF9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApOwomIzQzO3ZvaWQgX19ibXBfY2xlYXJfYml0KHUzMiBiaXQsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKTsKJiM0Mzt2b2lkIGJtcF9zZXRfYml0KHUzMiBiaXQsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKTsKJiM0Mzt2b2lkIGJtcF9jbGVhcl9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApOwomIzQzO2Jvb2wgYm1wX3Rlc3RfYml0KHUzMiBiaXQsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKTsKJiM0Mztib29sIGJtcF90ZXN0X2FuZF9jbGVhcl9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApOwomIzQzO2Jvb2wgYm1wX3Rlc3RfYW5kX3NldF9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApOwomIzQzOwomIzQzO3ZvaWQgYm1wX2NsZWFyKHNpemVfdCBiaXRzLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcCk7CiYjNDM7dm9pZCBibXBfYW5kKHNpemVfdCBiaXRzLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmRzdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpzcmMxLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKnNyYzIpOwomIzQzO3ZvaWQgYm1wX29yKHNpemVfdCBiaXRzLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmRzdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpzcmMxLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKnNyYzIpOwomIzQzO2Jvb2wgYm1wX2VtcHR5KHNpemVfdCBiaXRzLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcCk7CiYjNDM7dm9pZCBibXBfY29weShzaXplX3QgYml0cywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpkc3QsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqc3JjKTsKJiM0MzsKJiM0Mztib29sIGJtcF9pbnRlcnNlY3RzKHNpemVfdCBiaXRzLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmFyZzEsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYXJnMik7CiYjNDM7Ym9vbCBibXBfc3Vic2V0KHNpemVfdCBiaXRzLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJpZywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpzbWFsbCk7CiYjNDM7dm9pZCBibXBfcHJpbnQoc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2NvbW1vbi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvY29tbW9uLmgKaW5kZXggYTNlYjE2NDFhYzM2ZGYuLjkzMWFjZTlhNDllMmJkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9jb21tb24uaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9jb21tb24uaApAQCAtNDMsNyAmIzQzOzQzLDcgQEAgc3RydWN0IHsKICAqIGltcHJlY2lzZS4gVG8gZm9yY2UgdGhlIHZhcmlhYmxlIHRvIGJlIGltcHJlY2lzZSwgaW5pdGlhbGl6ZSBpdCB3aXRoCiAgKiB0aGUgb3BhcXVlIHZvbGF0aWxlIHZhcmlhYmxlIDAgaW5zdGVhZCBvZiB0aGUgY29uc3RhbnQgMC4KICAqLwotZXh0ZXJuIGNvbnN0IHZvbGF0aWxlIHUzMiB6ZXJvOwomIzQzO3ZvbGF0aWxlIHUzMiB6ZXJvIF9fd2VhazsKIGV4dGVybiB2b2xhdGlsZSB1NjQgYXNhbl92aW9sYXRlZDsKIAogaW50IGFyZW5hX2ZscyhfX3U2NCB3b3JkKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvc3RfYXNhbl9idWRkeS5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9hc2FuX2J1ZGR5LmJwZi5jCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvc3RfYXNhbl9idWRkeS5icGYuYwpyZW5hbWUgdG8gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2FzYW5fYnVkZHkuYnBmLmMKaW5kZXggNjg2Y2FiYTJjNjQzYjUuLjMyNjZhMjhmNTNkNzY4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3N0X2FzYW5fYnVkZHkuYnBmLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2FzYW5fYnVkZHkuYnBmLmMKQEAgLTEyLDcgJiM0MzsxMiw3IEBAIGV4dGVybiBzdHJ1Y3QgYnVkZHkgX19hcmVuYSBidWRkeTsKIAogI2lmZGVmIEJQRl9BUkVOQV9BU0FOCiAKLSNpbmNsdWRlICYjMzQ7c3RfYXNhbl9jb21tb24uaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt0ZXN0X2FzYW5fY29tbW9uLmgmIzM0OwogCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBhc2FuX3Rlc3RfYnVkZHlfb29iX3NpbmdsZShzaXplX3QgYWxsb2Nfc2l6ZSkKIHsKQEAgLTE1NCw3ICYjNDM7MTU0LDggQEAgX193ZWFrIGludCBhc2FuX3Rlc3RfYnVkZHlfb29iKHZvaWQpCiAJc2l6ZV90IHNpemVzW10gPSB7CiAJCTcsIDgsIDE3LCAxOCwgNjQsIDI1NiwgMzE3LCA1MTIsIDEwMjQsCiAJfTsKLQlpbnQgcmV0LCBpOwomIzQzOwlpbnQgcmV0OwomIzQzOwl1MzIgaTsKIAogCXJldCA9IGJ1ZGR5X2luaXQoJmFtcDtidWRkeSk7CiAJaWYgKHJldCkgewpAQCAtMTYzLDYgJiM0MzsxNjQsNyBAQCBfX3dlYWsgaW50IGFzYW5fdGVzdF9idWRkeV9vb2Iodm9pZCkKIAl9CiAKIAlmb3IgKGkgPSB6ZXJvOyBpICZsdDsgc2l6ZW9mKHNpemVzKSAvIHNpemVvZihzaXplc1swXSkgJmFtcDsmYW1wOyBjYW5fbG9vcDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWJhcnJpZXJfdmFyKGkpOwogCQlyZXQgPSBhc2FuX3Rlc3RfYnVkZHlfb29iX3NpbmdsZShzaXplc1tpXSk7CiAJCWlmIChyZXQpIHsKIAkJCWFyZW5hX3N0ZG91dCgmIzM0OyVzOiVkIEZhaWxlZCBmb3Igc2l6ZSAlbHUmIzM0OywgX19mdW5jX18sCkBAIC0xOTAsNyAmIzQzOzE5Miw4IEBAIF9fc3RkZXJyKCYjMzQ7Q2FsbCB0cmFjZTpcbiYjMzQ7CiBfX3dlYWsgaW50IGFzYW5fdGVzdF9idWRkeV91YWYodm9pZCkKIHsKIAlzaXplX3Qgc2l6ZXNbXSA9IHsgMTYsIDMyLCA2NCwgMTI4LCAyNTYsIDUxMiwgMTAyNCwgMTYzODQgfTsKLQlpbnQgcmV0LCBpOwomIzQzOwlpbnQgcmV0OwomIzQzOwl1MzIgaTsKIAogCXJldCA9IGJ1ZGR5X2luaXQoJmFtcDtidWRkeSk7CiAJaWYgKHJldCkgewpAQCAtMTk5LDYgJiM0MzsyMDIsNyBAQCBfX3dlYWsgaW50IGFzYW5fdGVzdF9idWRkeV91YWYodm9pZCkKIAl9CiAKIAlmb3IgKGkgPSB6ZXJvOyBpICZsdDsgc2l6ZW9mKHNpemVzKSAvIHNpemVvZihzaXplc1swXSkgJmFtcDsmYW1wOyBjYW5fbG9vcDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWJhcnJpZXJfdmFyKGkpOwogCQlyZXQgPSBhc2FuX3Rlc3RfYnVkZHlfdWFmX3NpbmdsZShzaXplc1tpXSk7CiAJCWlmIChyZXQpIHsKIAkJCWFyZW5hX3N0ZG91dCgmIzM0OyVzOiVkIEZhaWxlZCBmb3Igc2l6ZSAlbHUmIzM0OywgX19mdW5jX18sCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3N0X2FzYW5fY29tbW9uLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYXNhbl9jb21tb24uaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy9zdF9hc2FuX2NvbW1vbi5oCnJlbmFtZSB0byB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYXNhbl9jb21tb24uaApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2JpdG1hcC5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9iaXRtYXAuYnBmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmU3ZDMyZjQ0ZDY4NzA5Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2JpdG1hcC5icGYuYwpAQCAtMCwwICYjNDM7MSwzOTQgQEAKJiM0MzsjaW5jbHVkZSAmbHQ7bGliYXJlbmEvY29tbW9uLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpYmFyZW5hL2FzYW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGliYXJlbmEvYml0bWFwLmgmZ3Q7CiYjNDM7CiYjNDM7I2RlZmluZSBURVNUX0JJVFMJKDIgKiBCSVRTX1BFUl9MT05HX0xPTkcpCiYjNDM7I2RlZmluZSBURVNUX1dPUkRTCUJJVFNfVE9fTE9OR19MT05HUyhURVNUX0JJVFMpCiYjNDM7I2RlZmluZSBNSURfQklUCQkoQklUU19QRVJfTE9OR19MT05HICYjNDM7IDEpCiYjNDM7I2RlZmluZSBMQVNUX0JJVAkoVEVTVF9CSVRTIC0gMSkKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2JtcF9zZXRhbGwoc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApCiYjNDM7ewomIzQzOwl2b2xhdGlsZSB1MzIgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gemVybzsgaSAmbHQ7IFRFU1RfV09SRFMgJmFtcDsmYW1wOyBjYW5fbG9vcDsgaSYjNDM7JiM0MzspCiYjNDM7CQlibXAtJmd0O2JpdHNbaV0gPSB+MFVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO19fd2VhayBpbnQgdGVzdF9iaXRtYXBfYWxsb2NfZnJlZSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXA7CiYjNDM7CiYjNDM7CWJtcCA9IGJtcF9hbGxvYyhURVNUX0JJVFMpOwomIzQzOwlpZiAoIWJtcCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlpZiAoIWJtcF9lbXB0eShURVNUX0JJVFMsIGJtcCkpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJX19ibXBfc2V0X2JpdChMQVNUX0JJVCwgYm1wKTsKJiM0MzsJaWYgKCFibXBfdGVzdF9iaXQoTEFTVF9CSVQsIGJtcCkpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJX19ibXBfY2xlYXJfYml0KExBU1RfQklULCBibXApOwomIzQzOwlpZiAoYm1wX3Rlc3RfYml0KExBU1RfQklULCBibXApKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CiYjNDM7CWJtcF9mcmVlKGJtcCk7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2VycjoKJiM0MzsJYm1wX2ZyZWUoYm1wKTsKJiM0MzsJcmV0dXJuIC1FSU5WQUw7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztfX3dlYWsgaW50IHRlc3RfYml0bWFwX2JpdF9vcHModm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wOwomIzQzOwomIzQzOwlibXAgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTsKJiM0MzsJaWYgKCFibXApCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJX19ibXBfc2V0X2JpdCgwLCBibXApOwomIzQzOwlpZiAoIWJtcF90ZXN0X2JpdCgwLCBibXApKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CiYjNDM7CV9fYm1wX3NldF9iaXQoTUlEX0JJVCwgYm1wKTsKJiM0MzsJaWYgKCFibXBfdGVzdF9iaXQoTUlEX0JJVCwgYm1wKSkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlfX2JtcF9zZXRfYml0KExBU1RfQklULCBibXApOwomIzQzOwlpZiAoIWJtcF90ZXN0X2JpdChMQVNUX0JJVCwgYm1wKSkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlpZiAoYm1wX3Rlc3RfYml0KE1JRF9CSVQgLSAxLCBibXApKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CiYjNDM7CV9fYm1wX2NsZWFyX2JpdChNSURfQklULCBibXApOwomIzQzOwlpZiAoYm1wX3Rlc3RfYml0KE1JRF9CSVQsIGJtcCkpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJaWYgKCFibXBfdGVzdF9iaXQoMCwgYm1wKSkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlpZiAoIWJtcF90ZXN0X2JpdChMQVNUX0JJVCwgYm1wKSkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlfX2JtcF9jbGVhcl9iaXQoMCwgYm1wKTsKJiM0MzsJX19ibXBfY2xlYXJfYml0KExBU1RfQklULCBibXApOwomIzQzOwlpZiAoIWJtcF9lbXB0eShURVNUX0JJVFMsIGJtcCkpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJaWYgKGJtcC0mZ3Q7Yml0c1swXSkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlpZiAoYm1wLSZndDtiaXRzWzFdKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CiYjNDM7CWJtcF9mcmVlKGJtcCk7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2VycjoKJiM0MzsJYm1wX2ZyZWUoYm1wKTsKJiM0MzsJcmV0dXJuIC1FSU5WQUw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHRlc3RfYml0bWFwX3Rlc3RfYW5kX2NsZWFyX3NpbmdsZShzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcCwgc2l6ZV90IGluZCkKJiM0Mzt7CiYjNDM7CWlmIChibXBfdGVzdF9hbmRfY2xlYXJfYml0KGluZCwgYm1wKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJX19ibXBfc2V0X2JpdChpbmQsIGJtcCk7CiYjNDM7CiYjNDM7CWlmICghYm1wX3Rlc3RfYW5kX2NsZWFyX2JpdChpbmQsIGJtcCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChibXBfdGVzdF9iaXQoaW5kLCBibXApKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAoYm1wX3Rlc3RfYW5kX2NsZWFyX2JpdChpbmQsIGJtcCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCB0ZXN0X2JpdG1hcF90ZXN0X2FuZF9zZXRfc2luZ2xlKHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wLCBzaXplX3QgaW5kKQomIzQzO3sKJiM0MzsJaWYgKGJtcF90ZXN0X2FuZF9zZXRfYml0KGluZCwgYm1wKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKCFibXBfdGVzdF9hbmRfc2V0X2JpdChpbmQsIGJtcCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmICghYm1wX3Rlc3RfYml0KGluZCwgYm1wKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJX19ibXBfY2xlYXJfYml0KGluZCwgYm1wKTsKJiM0MzsKJiM0MzsJaWYgKGJtcF90ZXN0X2FuZF9zZXRfYml0KGluZCwgYm1wKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztfX3dlYWsgaW50IHRlc3RfYml0bWFwX3Rlc3RfYW5kX2NsZWFyX2JpdCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXA7CiYjNDM7CiYjNDM7CWJtcCA9IGJtcF9hbGxvYyhURVNUX0JJVFMpOwomIzQzOwlpZiAoIWJtcCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlpZiAoIXRlc3RfYml0bWFwX3Rlc3RfYW5kX2NsZWFyX3NpbmdsZShibXAsIDApKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CiYjNDM7CWlmICghdGVzdF9iaXRtYXBfdGVzdF9hbmRfY2xlYXJfc2luZ2xlKGJtcCwgTUlEX0JJVCkpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJaWYgKCF0ZXN0X2JpdG1hcF90ZXN0X2FuZF9jbGVhcl9zaW5nbGUoYm1wLCBMQVNUX0JJVCkpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJaWYgKCFibXBfZW1wdHkoVEVTVF9CSVRTLCBibXApKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CiYjNDM7CWJtcF9mcmVlKGJtcCk7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2VycjoKJiM0MzsJYm1wX2ZyZWUoYm1wKTsKJiM0MzsJcmV0dXJuIC1FSU5WQUw7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztfX3dlYWsgaW50IHRlc3RfYml0bWFwX3Rlc3RfYW5kX3NldF9iaXQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wOwomIzQzOwomIzQzOwlibXAgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTsKJiM0MzsJaWYgKCFibXApCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJaWYgKCF0ZXN0X2JpdG1hcF90ZXN0X2FuZF9zZXRfc2luZ2xlKGJtcCwgMCkpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJaWYgKCF0ZXN0X2JpdG1hcF90ZXN0X2FuZF9zZXRfc2luZ2xlKGJtcCwgTUlEX0JJVCkpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJaWYgKCF0ZXN0X2JpdG1hcF90ZXN0X2FuZF9zZXRfc2luZ2xlKGJtcCwgTEFTVF9CSVQpKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CiYjNDM7CWJtcF9mcmVlKGJtcCk7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2VycjoKJiM0MzsJYm1wX2ZyZWUoYm1wKTsKJiM0MzsJcmV0dXJuIC1FSU5WQUw7CiYjNDM7fQomIzQzOwomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztfX3dlYWsgaW50IHRlc3RfYml0bWFwX2FuZCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJpdG1hcCBfX2FyZW5hICpzcmMxID0gTlVMTCwgKnNyYzIgPSBOVUxMLCAqZHN0ID0gTlVMTDsKJiM0MzsKJiM0MzsJc3JjMSA9IGJtcF9hbGxvYyhURVNUX0JJVFMpOwomIzQzOwlzcmMyID0gYm1wX2FsbG9jKFRFU1RfQklUUyk7CiYjNDM7CWRzdCA9IGJtcF9hbGxvYyhURVNUX0JJVFMpOwomIzQzOwlpZiAoIXNyYzEgfHwgIXNyYzIgfHwgIWRzdCkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwl0ZXN0X2JtcF9zZXRhbGwoZHN0KTsKJiM0MzsKJiM0MzsJX19ibXBfc2V0X2JpdCgwLCBzcmMxKTsKJiM0MzsJX19ibXBfc2V0X2JpdChNSURfQklULCBzcmMxKTsKJiM0MzsJX19ibXBfc2V0X2JpdChMQVNUX0JJVCwgc3JjMSk7CiYjNDM7CiYjNDM7CV9fYm1wX3NldF9iaXQoTUlEX0JJVCwgc3JjMik7CiYjNDM7CV9fYm1wX3NldF9iaXQoTEFTVF9CSVQsIHNyYzIpOwomIzQzOwomIzQzOwlibXBfYW5kKFRFU1RfQklUUywgZHN0LCBzcmMxLCBzcmMyKTsKJiM0MzsKJiM0MzsJaWYgKGJtcF90ZXN0X2JpdCgwLCBkc3QpKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CWlmICghYm1wX3Rlc3RfYml0KE1JRF9CSVQsIGRzdCkpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsJaWYgKCFibXBfdGVzdF9iaXQoTEFTVF9CSVQsIGRzdCkpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJaWYgKGRzdC0mZ3Q7Yml0c1swXSkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwlpZiAoZHN0LSZndDtiaXRzWzFdICE9IChCSVRfTUFTSyhNSURfQklUKSB8IEJJVF9NQVNLKExBU1RfQklUKSkpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJYm1wX2ZyZWUoc3JjMSk7CiYjNDM7CWJtcF9mcmVlKHNyYzIpOwomIzQzOwlibXBfZnJlZShkc3QpOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnI6CiYjNDM7CWJtcF9mcmVlKHNyYzEpOwomIzQzOwlibXBfZnJlZShzcmMyKTsKJiM0MzsJYm1wX2ZyZWUoZHN0KTsKJiM0MzsJcmV0dXJuIC1FSU5WQUw7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztfX3dlYWsgaW50IHRlc3RfYml0bWFwX29yKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKnNyYzEgPSBOVUxMLCAqc3JjMiA9IE5VTEwsICpkc3QgPSBOVUxMOwomIzQzOwomIzQzOwlzcmMxID0gYm1wX2FsbG9jKFRFU1RfQklUUyk7CiYjNDM7CXNyYzIgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTsKJiM0MzsJZHN0ID0gYm1wX2FsbG9jKFRFU1RfQklUUyk7CiYjNDM7CWlmICghc3JjMSB8fCAhc3JjMiB8fCAhZHN0KQomIzQzOwkJZ290byBlcnI7CiYjNDM7CiYjNDM7CXRlc3RfYm1wX3NldGFsbChkc3QpOwomIzQzOwomIzQzOwlfX2JtcF9zZXRfYml0KDAsIHNyYzEpOwomIzQzOwlfX2JtcF9zZXRfYml0KExBU1RfQklULCBzcmMxKTsKJiM0MzsKJiM0MzsJX19ibXBfc2V0X2JpdChNSURfQklULCBzcmMyKTsKJiM0MzsJX19ibXBfc2V0X2JpdChMQVNUX0JJVCwgc3JjMik7CiYjNDM7CiYjNDM7CWJtcF9vcihURVNUX0JJVFMsIGRzdCwgc3JjMSwgc3JjMik7CiYjNDM7CiYjNDM7CWlmICghYm1wX3Rlc3RfYml0KDAsIGRzdCkpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsJaWYgKCFibXBfdGVzdF9iaXQoTUlEX0JJVCwgZHN0KSkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwlpZiAoIWJtcF90ZXN0X2JpdChMQVNUX0JJVCwgZHN0KSkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlpZiAoZHN0LSZndDtiaXRzWzBdICE9IEJJVF9NQVNLKDApKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CWlmIChkc3QtJmd0O2JpdHNbMV0gIT0gKEJJVF9NQVNLKE1JRF9CSVQpIHwgQklUX01BU0soTEFTVF9CSVQpKSkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlibXBfZnJlZShzcmMxKTsKJiM0MzsJYm1wX2ZyZWUoc3JjMik7CiYjNDM7CWJtcF9mcmVlKGRzdCk7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2VycjoKJiM0MzsJYm1wX2ZyZWUoc3JjMSk7CiYjNDM7CWJtcF9mcmVlKHNyYzIpOwomIzQzOwlibXBfZnJlZShkc3QpOwomIzQzOwlyZXR1cm4gLUVJTlZBTDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO19fd2VhayBpbnQgdGVzdF9iaXRtYXBfc3Vic2V0KHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJpZyA9IE5VTEwsICpzbWFsbCA9IE5VTEw7CiYjNDM7CiYjNDM7CWJpZyA9IGJtcF9hbGxvYyhURVNUX0JJVFMpOwomIzQzOwlzbWFsbCA9IGJtcF9hbGxvYyhURVNUX0JJVFMpOwomIzQzOwlpZiAoIWJpZyB8fCAhc21hbGwpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJaWYgKCFibXBfc3Vic2V0KFRFU1RfQklUUywgYmlnLCBzbWFsbCkpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJX19ibXBfc2V0X2JpdCgwLCBzbWFsbCk7CiYjNDM7CWlmIChibXBfc3Vic2V0KFRFU1RfQklUUywgYmlnLCBzbWFsbCkpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJX19ibXBfc2V0X2JpdCgwLCBiaWcpOwomIzQzOwlpZiAoIWJtcF9zdWJzZXQoVEVTVF9CSVRTLCBiaWcsIHNtYWxsKSkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlfX2JtcF9zZXRfYml0KExBU1RfQklULCBzbWFsbCk7CiYjNDM7CWlmIChibXBfc3Vic2V0KFRFU1RfQklUUywgYmlnLCBzbWFsbCkpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJX19ibXBfc2V0X2JpdChMQVNUX0JJVCwgYmlnKTsKJiM0MzsJX19ibXBfc2V0X2JpdChNSURfQklULCBiaWcpOwomIzQzOwlpZiAoIWJtcF9zdWJzZXQoVEVTVF9CSVRTLCBiaWcsIHNtYWxsKSkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlpZiAoYm1wX3N1YnNldChURVNUX0JJVFMsIHNtYWxsLCBiaWcpKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CiYjNDM7CWJtcF9mcmVlKGJpZyk7CiYjNDM7CWJtcF9mcmVlKHNtYWxsKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyOgomIzQzOwlibXBfZnJlZShiaWcpOwomIzQzOwlibXBfZnJlZShzbWFsbCk7CiYjNDM7CXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X193ZWFrIGludCB0ZXN0X2JpdG1hcF9pbnRlcnNlY3RzKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmFyZzEgPSBOVUxMLCAqYXJnMiA9IE5VTEw7CiYjNDM7CiYjNDM7CWFyZzEgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTsKJiM0MzsJYXJnMiA9IGJtcF9hbGxvYyhURVNUX0JJVFMpOwomIzQzOwlpZiAoIWFyZzEgfHwgIWFyZzIpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJaWYgKGJtcF9pbnRlcnNlY3RzKFRFU1RfQklUUywgYXJnMSwgYXJnMikpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJX19ibXBfc2V0X2JpdCgwLCBhcmcxKTsKJiM0MzsJX19ibXBfc2V0X2JpdChNSURfQklULCBhcmcyKTsKJiM0MzsJaWYgKGJtcF9pbnRlcnNlY3RzKFRFU1RfQklUUywgYXJnMSwgYXJnMikpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJX19ibXBfc2V0X2JpdChMQVNUX0JJVCwgYXJnMSk7CiYjNDM7CV9fYm1wX3NldF9iaXQoTEFTVF9CSVQsIGFyZzIpOwomIzQzOwlpZiAoIWJtcF9pbnRlcnNlY3RzKFRFU1RfQklUUywgYXJnMSwgYXJnMikpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJYm1wX2ZyZWUoYXJnMSk7CiYjNDM7CWJtcF9mcmVlKGFyZzIpOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnI6CiYjNDM7CWJtcF9mcmVlKGFyZzEpOwomIzQzOwlibXBfZnJlZShhcmcyKTsKJiM0MzsJcmV0dXJuIC1FSU5WQUw7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztfX3dlYWsgaW50IHRlc3RfYml0bWFwX2NvcHkodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYXJnMSA9IE5VTEwsICphcmcyID0gTlVMTDsKJiM0MzsKJiM0MzsJYXJnMSA9IGJtcF9hbGxvYyhURVNUX0JJVFMpOwomIzQzOwlhcmcyID0gYm1wX2FsbG9jKFRFU1RfQklUUyk7CiYjNDM7CWlmICghYXJnMSB8fCAhYXJnMikKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlfX2JtcF9zZXRfYml0KDAsIGFyZzEpOwomIzQzOwlfX2JtcF9zZXRfYml0KE1JRF9CSVQsIGFyZzEpOwomIzQzOwomIzQzOwkvKiBNYWtlIHN1cmUgdGhvc2UgZ2V0IG92ZXJ3cml0dGVuLiAqLwomIzQzOwlfX2JtcF9zZXRfYml0KDEsIGFyZzIpOwomIzQzOwlfX2JtcF9zZXRfYml0KE1JRF9CSVQgJiM0MzsgMiwgYXJnMik7CiYjNDM7CiYjNDM7CWJtcF9jb3B5KFRFU1RfQklUUywgYXJnMiwgYXJnMSk7CiYjNDM7CiYjNDM7CS8qIEJpdG1hcHMgYXJlIGVxdWFsIGlmIGEgc3Vic2V0IG9mIGVhY2ggb3RoZXIuICovCiYjNDM7CWlmICghYm1wX3N1YnNldChURVNUX0JJVFMsIGFyZzEsIGFyZzIpIHx8CiYjNDM7CSAgICAhYm1wX3N1YnNldChURVNUX0JJVFMsIGFyZzIsIGFyZzEpKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CiYjNDM7CWJtcF9mcmVlKGFyZzEpOwomIzQzOwlibXBfZnJlZShhcmcyKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyOgomIzQzOwlibXBfZnJlZShhcmcxKTsKJiM0MzsJYm1wX2ZyZWUoYXJnMik7CiYjNDM7CXJldHVybiAtRUlOVkFMOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvc3RfYnVkZHkuYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYnVkZHkuYnBmLmMKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy9zdF9idWRkeS5icGYuYwpyZW5hbWUgdG8gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2J1ZGR5LmJwZi5jCmluZGV4IGI0NWEzMDY4MTZjMGU0Li41NjI4ZjA5ODcwMTIxYyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy9zdF9idWRkeS5icGYuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYnVkZHkuYnBmLmMKQEAgLTE3MSw3ICYjNDM7MTcxLDggQEAgX193ZWFrIGludCB0ZXN0X2J1ZGR5X2FsbG9jX211bHRpcGxlKHZvaWQpCiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiBfX3dlYWsgaW50IHRlc3RfYnVkZHlfYWxpZ25tZW50KHZvaWQpCiB7Ci0JaW50IHJldCwgaTsKJiM0MzsJaW50IHJldDsKJiM0MzsJdTMyIGk7CiAKIAlyZXQgPSBidWRkeV9pbml0KCZhbXA7YnVkZHkpOwogCWlmIChyZXQpCkBAIC0xNzksNiAmIzQzOzE4MCw3IEBAIF9fd2VhayBpbnQgdGVzdF9idWRkeV9hbGlnbm1lbnQodm9pZCkKIAogCS8qIEFsbG9jYXRlIHZhcmlvdXMgc2l6ZXMgYW5kIGNoZWNrIGFsaWdubWVudCAqLwogCWZvciAoaSA9IHplcm87IGkgJmx0OyAxNyAmYW1wOyZhbXA7IGNhbl9sb29wOyBpJiM0MzsmIzQzOykgewomIzQzOwkJYmFycmllcl92YXIoaSk7CiAJCXB0cnNbaV0gPSBidWRkeV9hbGxvYygmYW1wO2J1ZGR5LCBhbGlnbm1lbnRfc2l6ZXNbaV0pOwogCQlpZiAoIXB0cnNbaV0pIHsKIAkJCWFyZW5hX3N0ZG91dCgmIzM0O2FsaWdubWVudCB0ZXN0OiBhbGxvYyBmYWlsZWQgZm9yIHNpemUgJWx1JiMzNDssCkBAIC0xOTgsOCAmIzQzOzIwMCwxMCBAQCBfX3dlYWsgaW50IHRlc3RfYnVkZHlfYWxpZ25tZW50KHZvaWQpCiAJfQogCiAJLyogRnJlZSBhbGwgYWxsb2NhdGlvbnMgKi8KLQlmb3IgKGkgPSB6ZXJvOyBpICZsdDsgMTcgJmFtcDsmYW1wOyBjYW5fbG9vcDsgaSYjNDM7JiM0MzspCiYjNDM7CWZvciAoaSA9IHplcm87IGkgJmx0OyAxNyAmYW1wOyZhbXA7IGNhbl9sb29wOyBpJiM0MzsmIzQzOykgewomIzQzOwkJYmFycmllcl92YXIoaSk7CiAJCWJ1ZGR5X2ZyZWUoJmFtcDtidWRkeSwgcHRyc1tpXSk7CiYjNDM7CX0KIAogCWJ1ZGR5X2Rlc3Ryb3koJmFtcDtidWRkeSk7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9wYXJhbGxlbF9iaXRtYXAuYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfcGFyYWxsZWxfYml0bWFwLmJwZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5lZWMyODcxZTJiMGQxMAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9wYXJhbGxlbF9iaXRtYXAuYnBmLmMKQEAgLTAsMCAmIzQzOzEsMTkwIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IExHUEwtMi4xIE9SIEJTRC0yLUNsYXVzZQomIzQzOwomIzQzOyNpbmNsdWRlICZsdDticGZfYXRvbWljLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpYmFyZW5hL2NvbW1vbi5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaWJhcmVuYS9hc2FuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpYmFyZW5hL2JpdG1hcC5oJmd0OwomIzQzOwomIzQzOyNkZWZpbmUgVEVTVF9CSVRNQVBfVEhSRUFEUwkyCiYjNDM7I2RlZmluZSBURVNUX0JJVE1BUF9CSVRTCSgyICogQklUU19QRVJfTE9OR19MT05HKQomIzQzOyNkZWZpbmUgVEVTVF9CSVRNQVBfU1lOQ19TUElOUwlCUEZfTUFYX0xPT1BTCiYjNDM7I2RlZmluZSBURVNUX0JJVE1BUF9JVEVSUwkxMCAqIDEwMDAgKiAxMDAwCiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYml0bWFwOwomIzQzO3N0YXRpYyB2b2xhdGlsZSB1NjQgc3RhcnRlZDsKJiM0MztzdGF0aWMgdm9sYXRpbGUgYm9vbCB0ZXN0X2Fib3J0OwomIzQzOwomIzQzOy8qCiYjNDM7ICogVGhlIHRlc3QgbmVlZHMgY21weGNoZyBhdG9taWNzIG9uIGFyZW5hIG1lbW9yeS4KJiM0MzsgKi8KJiM0MzsjaWYgZGVmaW5lZChFTkFCTEVfQVRPTUlDU19URVNUUykgJmFtcDsmYW1wOwkJCQkgIFwKJiM0MzsJKGRlZmluZWQoX19UQVJHRVRfQVJDSF9hcm02NCkgfHwgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3g4NikgfHwgXAomIzQzOwkgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3MzOTApIHx8IFwKJiM0MzsJIGRlZmluZWQoX19UQVJHRVRfQVJDSF9wb3dlcnBjKSB8fAkJCQkgIFwKJiM0MzsJIChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfcmlzY3YpICZhbXA7JmFtcDsgX19yaXNjdl94bGVuID09IDY0KSkKJiM0MztzdGF0aWMgYm9vbCBiaXRtYXBfdGVzdHNfZW5hYmxlZCh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGJvb2wgYml0bWFwX3Rlc3RzX2VuYWJsZWQodm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7X193ZWFrCiYjNDM7aW50IGJpdG1hcF93YWl0X2Zvcl9zdGFydCh2b2lkKQomIzQzO3sKJiM0MzsJdTY0IGk7CiYjNDM7CiYjNDM7CV9fc3luY19mZXRjaF9hbmRfYWRkKCZhbXA7c3RhcnRlZCwgMSk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IHplcm87IGkgJmx0OyBURVNUX0JJVE1BUF9TWU5DX1NQSU5TICZhbXA7JmFtcDsgY2FuX2xvb3A7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAodGVzdF9hYm9ydCkKJiM0MzsJCQlyZXR1cm4gLUVJTlRSOwomIzQzOwkJaWYgKHNtcF9sb2FkX2FjcXVpcmUoJmFtcDtzdGFydGVkKSAmZ3Q7PSBURVNUX0JJVE1BUF9USFJFQURTKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXRlc3RfYWJvcnQgPSB0cnVlOwomIzQzOwlyZXR1cm4gLUVUSU1FRE9VVDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBUaGUgdGVzdCBtYWtlcyBzdXJlIHdyaXRlcyBkb24mIzM5O3QgY2xvYmJlciBlYWNoIG90aGVyIGJ5IG92ZXJ3cml0aW5nCiYjNDM7ICogdGhlIHNhbWUgd29yZC4gT25lIHRocmVhZCBhbHdheXMgd3JpdGVzIG9uIGV2ZW4gYml0cywgdGhlIG90aGVyIG9uCiYjNDM7ICogb2Rkcy4gQm90aCBzaG91bGQgYmUgYWJsZSB0byBvcGVyYXRlIG9uIHRoZSBiaXRtYXAgb2JsaXZpb3VzIG9mIHRoZQomIzQzOyAqIG90aGVyJiMzOTtzIG9wZXJhdGlvbnMuCiYjNDM7ICovCiYjNDM7X193ZWFrCiYjNDM7aW50IGJpdG1hcF90ZXN0X2JpdF9zZXF1ZW5jZSh1MzIgYml0KQomIzQzO3sKJiM0MzsJaWYgKGJtcF90ZXN0X2FuZF9jbGVhcl9iaXQoYml0LCBiaXRtYXApKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChibXBfdGVzdF9hbmRfc2V0X2JpdChiaXQsIGJpdG1hcCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKCFibXBfdGVzdF9iaXQoYml0LCBiaXRtYXApKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmICghYm1wX3Rlc3RfYW5kX3NldF9iaXQoYml0LCBiaXRtYXApKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmICghYm1wX3Rlc3RfYml0KGJpdCwgYml0bWFwKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAoIWJtcF90ZXN0X2FuZF9jbGVhcl9iaXQoYml0LCBiaXRtYXApKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmIChibXBfdGVzdF9iaXQoYml0LCBiaXRtYXApKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChibXBfdGVzdF9hbmRfY2xlYXJfYml0KGJpdCwgYml0bWFwKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlibXBfc2V0X2JpdChiaXQsIGJpdG1hcCk7CiYjNDM7CWlmICghYm1wX3Rlc3RfYml0KGJpdCwgYml0bWFwKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlibXBfY2xlYXJfYml0KGJpdCwgYml0bWFwKTsKJiM0MzsJaWYgKGJtcF90ZXN0X2JpdChiaXQsIGJpdG1hcCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJYm1wX3NldF9iaXQoYml0LCBiaXRtYXApOwomIzQzOwlpZiAoIWJtcF90ZXN0X2JpdChiaXQsIGJpdG1hcCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGJpdG1hcF90ZXN0X3Jlc2V0X3NpbmdsZShpbnQgcGFyaXR5KQomIzQzO3sKJiM0MzsJdTMyIGJpdDsKJiM0MzsKJiM0MzsJZm9yIChiaXQgPSBwYXJpdHk7IGJpdCAmbHQ7IFRFU1RfQklUTUFQX0JJVFMgJmFtcDsmYW1wOyBjYW5fbG9vcDsgYml0ICYjNDM7PSAyKQomIzQzOwkJYm1wX2NsZWFyX2JpdChiaXQsIGJpdG1hcCk7CiYjNDM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYml0bWFwX3Rlc3RfY29tbW9uX3NpbmdsZShpbnQgcGFyaXR5KQomIzQzO3sKJiM0MzsJdTMyIGJpdDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZm9yIChiaXQgPSBwYXJpdHk7IGJpdCAmbHQ7IFRFU1RfQklUTUFQX0JJVFMgJmFtcDsmYW1wOyBjYW5fbG9vcDsgYml0ICYjNDM7PSAyKSB7CiYjNDM7CQlpZiAodGVzdF9hYm9ydCkKJiM0MzsJCQlyZXR1cm4gLUVJTlRSOwomIzQzOwomIzQzOwkJcmV0ID0gYml0bWFwX3Rlc3RfYml0X3NlcXVlbmNlKGJpdCk7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJdGVzdF9hYm9ydCA9IHRydWU7CiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBiaXRtYXBfdGVzdF9jb21tb24oaW50IHBhcml0eSkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CXUzMiBpOwomIzQzOwomIzQzOwlhcmVuYV9zdWJwcm9nX2luaXQoKTsKJiM0MzsKJiM0MzsJcmV0ID0gYml0bWFwX3dhaXRfZm9yX3N0YXJ0KCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlmb3IgKGkgPSB6ZXJvOyBpICZsdDsgVEVTVF9CSVRNQVBfSVRFUlMgJmFtcDsmYW1wOyBjYW5fbG9vcDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXJldCA9IGJpdG1hcF90ZXN0X2NvbW1vbl9zaW5nbGUocGFyaXR5KTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCWlmICh0ZXN0X2Fib3J0KQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJYml0bWFwX3Rlc3RfcmVzZXRfc2luZ2xlKHBhcml0eSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykgaW50IHBhcmFsbGVsX3Rlc3RfYml0bWFwX19lbmFibGVkKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gYml0bWFwX3Rlc3RzX2VuYWJsZWQoKSA/IDAgOiAtRU9QTk9UU1VQUDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KSBpbnQgcGFyYWxsZWxfdGVzdF9iaXRtYXBfX2luaXQodm9pZCkKJiM0Mzt7CiYjNDM7CWJpdG1hcCA9IGJtcF9hbGxvYyhURVNUX0JJVE1BUF9CSVRTKTsKJiM0MzsJaWYgKCFiaXRtYXApCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykgaW50IHBhcmFsbGVsX3Rlc3RfYml0bWFwX19maW5pKHZvaWQpCiYjNDM7ewomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJaWYgKCFiaXRtYXApCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJYm1wX2ZyZWUoYml0bWFwKTsKJiM0MzsJYml0bWFwID0gTlVMTDsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KSBpbnQgcGFyYWxsZWxfdGVzdF9iaXRtYXBfXzAodm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBiaXRtYXBfdGVzdF9jb21tb24oMCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykgaW50IHBhcmFsbGVsX3Rlc3RfYml0bWFwX18xKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gYml0bWFwX3Rlc3RfY29tbW9uKDEpOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9wYXJhbGxlbF9zcG1jLmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X3BhcmFsbGVsX3NwbWMuYnBmLmMKaW5kZXggZjA4ZjJhOTJlMTk0NjguLjVmYTk2ZWI3NDA5NTFjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfcGFyYWxsZWxfc3BtYy5icGYuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfcGFyYWxsZWxfc3BtYy5icGYuYwpAQCAtMTU1LDcgJiM0MzsxNTUsNyBAQCBpbnQgc3BtY19xdWllc2NlX29uX293bmVyKHU2NCBlcG9jaCkKIHsKIAl1NjQgaTsKIAotCWJwZl9mb3IoaSwgMCwgVEVTVF9TUE1DX1NZTkNfU1BJTlMpIHsKJiM0MzsJZm9yIChpID0gemVybzsgaSAmbHQ7IFRFU1RfU1BNQ19TWU5DX1NQSU5TICZhbXA7JmFtcDsgY2FuX2xvb3A7IGkmIzQzOyYjNDM7KSB7CiAJCWlmICh0ZXN0X2Fib3J0KQogCQkJcmV0dXJuIC1FSU5UUjsKIAkJaWYgKHNtcF9sb2FkX2FjcXVpcmUoJmFtcDtvd25lcl9lcG9jaCkgJmd0Oz0gZXBvY2gpCkBAIC0xNzUsOCAmIzQzOzE3NSw3IEBAIGludCBzcG1jX3F1aWVzY2Vfb25fc3RlYWxlcih1NjQgZXBvY2gpCiAJaW50IGVyciA9IC1FVElNRURPVVQ7CiAKIAl0YXJnZXQgPSBTVEVBTEVSX0VQT0NIKGVwb2NoKTsKLQlicGZfZm9yKGksIDAsIFRFU1RfU1BNQ19TWU5DX1NQSU5TKSB7Ci0KJiM0MzsJZm9yIChpID0gemVybzsgaSAmbHQ7IFRFU1RfU1BNQ19TWU5DX1NQSU5TICZhbXA7JmFtcDsgY2FuX2xvb3A7IGkmIzQzOyYjNDM7KSB7CiAJCWlmICh0ZXN0X2Fib3J0KSB7CiAJCQllcnIgPSAtRUlOVFI7CiAJCQlicmVhazsKQEAgLTM5MSw3ICYjNDM7MzkwLDcgQEAgaW50IHNwbWNfd2FpdF9mb3Jfc3RlYWxlcnNfdG9fc3RhcnQodTY0IHRhcmdldCkKIHsKIAl1NjQgaTsKIAotCWJwZl9mb3IoaSwgMCwgVEVTVF9TUE1DX1NZTkNfU1BJTlMpIHsKJiM0MzsJZm9yIChpID0gemVybzsgaSAmbHQ7IFRFU1RfU1BNQ19TWU5DX1NQSU5TICZhbXA7JmFtcDsgY2FuX2xvb3A7IGkmIzQzOyYjNDM7KSB7CiAJCWlmICh0ZXN0X2Fib3J0KQogCQkJcmV0dXJuIC1FSU5UUjsKIAkJaWYgKFJFQURfT05DRShzdGVhbGVyc19zdGFydGVkKSAmZ3Q7PSB0YXJnZXQpCkBAIC01MzcsNyAmIzQzOzUzNiw3IEBAIHN0YXRpYyBpbnQgc3BtY193YWl0X2Zvcl9yb3VuZF9zdGVhbHModTY0IHRhcmdldCkKIAogCWFyZW5hX3N1YnByb2dfaW5pdCgpOwogCi0JYnBmX2ZvcihpLCAwLCBURVNUX1NQTUNfU1lOQ19TUElOUykgewomIzQzOwlmb3IgKGkgPSB6ZXJvOyBpICZsdDsgVEVTVF9TUE1DX1NZTkNfU1BJTlMgJmFtcDsmYW1wOyBjYW5fbG9vcDsgaSYjNDM7JiM0MzspIHsKIAkJaWYgKHRlc3RfYWJvcnQpCiAJCQlyZXR1cm4gLUVJTlRSOwogCQlpZiAocm91bmRfc3RlYWxzICZndDs9IHRhcmdldCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYml0bWFwLmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9iaXRtYXAuYnBmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjgwZTgxNDQwMWZiOWVhCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9iaXRtYXAuYnBmLmMKQEAgLTAsMCAmIzQzOzEsMjQ1IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IExHUEwtMi4xIE9SIEJTRC0yLUNsYXVzZQomIzQzOy8qCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI1LTIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI1LTIwMjYgRW1pbCBUc2FsYXBhdGlzICZsdDtlbWlsQGV0c2FsYXBhdGlzLmNvbSZndDsKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGliYXJlbmEvY29tbW9uLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpYmFyZW5hL2FzYW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGliYXJlbmEvYml0bWFwLmgmZ3Q7CiYjNDM7CiYjNDM7X193ZWFrCiYjNDM7c3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXBfYWxsb2Moc2l6ZV90IGJpdHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcDsKJiM0MzsJc2l6ZV90IHNpemUgPSBCSVRTX1RPX0xPTkdfTE9OR1MoYml0cykgKiBzaXplb2YoYm1wLSZndDtiaXRzWzBdKTsKJiM0MzsKJiM0MzsJLyogQXNzdW1lIGxvbmctYWxpZ25lZCBtYXNrcy4gKi8KJiM0MzsJaWYgKGJpdHMgJSBCSVRTX1BFUl9MT05HX0xPTkcpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJYm1wID0gKHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqKWFyZW5hX21hbGxvYyhzaXplKTsKJiM0MzsJaWYgKCFibXApCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJYm1wX2NsZWFyKGJpdHMsIGJtcCk7CiYjNDM7CiYjNDM7CXJldHVybiBibXA7CiYjNDM7fQomIzQzOwomIzQzO19fd2VhawomIzQzO3ZvaWQgYm1wX2ZyZWUoc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApCiYjNDM7ewomIzQzOwlhcmVuYV9mcmVlKGJtcCk7CiYjNDM7fQomIzQzOwomIzQzO19fd2VhawomIzQzO3ZvaWQgX19ibXBfc2V0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcCkKJiM0Mzt7CiYjNDM7CWJtcC0mZ3Q7Yml0c1tCSVRfV09SRChiaXQpXSB8PSBCSVRfTUFTSyhiaXQpOwomIzQzO30KJiM0MzsKJiM0MztfX3dlYWsKJiM0Mzt2b2lkIF9fYm1wX2NsZWFyX2JpdCh1MzIgYml0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcCkKJiM0Mzt7CiYjNDM7CWJtcC0mZ3Q7Yml0c1tCSVRfV09SRChiaXQpXSAmYW1wOz0gfkJJVF9NQVNLKGJpdCk7CiYjNDM7fQomIzQzOwomIzQzO19fd2VhawomIzQzO2Jvb2wgYm1wX3Rlc3RfYml0KHUzMiBiaXQsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKQomIzQzO3sKJiM0MzsJcmV0dXJuIGJtcC0mZ3Q7Yml0c1tCSVRfV09SRChiaXQpXSAmYW1wOyBCSVRfTUFTSyhiaXQpOwomIzQzO30KJiM0MzsKJiM0MztfX3dlYWsKJiM0Mztib29sIGJtcF90ZXN0X2FuZF9jbGVhcl9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApCiYjNDM7ewomIzQzOwl1NjQgdmFsID0gQklUX01BU0soYml0KTsKJiM0MzsJdTMyIGlkeCA9IEJJVF9XT1JEKGJpdCk7CiYjNDM7CXU2NCBvbGQsIG5ldywgYWN0dWFsOwomIzQzOwomIzQzOwlkbyB7CiYjNDM7CQlvbGQgPSBibXAtJmd0O2JpdHNbaWR4XTsKJiM0MzsKJiM0MzsJCWlmICghKG9sZCAmYW1wOyB2YWwpKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJCW5ldyA9IG9sZCAmYW1wOyB+dmFsOwomIzQzOwkJYWN0dWFsID0gY21weGNoZygmYW1wO2JtcC0mZ3Q7Yml0c1tpZHhdLCBvbGQsIG5ldyk7CiYjNDM7CiYjNDM7CQlpZiAoYWN0dWFsID09IG9sZCkKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJfSB3aGlsZSAoY2FuX2xvb3ApOwomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO19fd2VhawomIzQzO2Jvb2wgYm1wX3Rlc3RfYW5kX3NldF9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApCiYjNDM7ewomIzQzOwl1NjQgdmFsID0gQklUX01BU0soYml0KTsKJiM0MzsJdTMyIGlkeCA9IEJJVF9XT1JEKGJpdCk7CiYjNDM7CXU2NCBvbGQsIG5ldywgYWN0dWFsOwomIzQzOwomIzQzOwlkbyB7CiYjNDM7CQlvbGQgPSBibXAtJmd0O2JpdHNbaWR4XTsKJiM0MzsKJiM0MzsJCWlmICgob2xkICZhbXA7IHZhbCkpCiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CQluZXcgPSBvbGQgfCB2YWw7CiYjNDM7CQlhY3R1YWwgPSBjbXB4Y2hnKCZhbXA7Ym1wLSZndDtiaXRzW2lkeF0sIG9sZCwgbmV3KTsKJiM0MzsKJiM0MzsJCWlmIChhY3R1YWwgPT0gb2xkKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJfSB3aGlsZSAoY2FuX2xvb3ApOwomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO19fd2VhawomIzQzO3ZvaWQgYm1wX2NsZWFyX2JpdCh1MzIgYml0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcCkKJiM0Mzt7CiYjNDM7CXU2NCB2YWwgPSBCSVRfTUFTSyhiaXQpOwomIzQzOwl1MzIgaWR4ID0gQklUX1dPUkQoYml0KTsKJiM0MzsJdTY0IG9sZCwgbmV3LCBhY3R1YWw7CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCW9sZCA9IGJtcC0mZ3Q7Yml0c1tpZHhdOwomIzQzOwkJbmV3ID0gb2xkICZhbXA7IH52YWw7CiYjNDM7CQlhY3R1YWwgPSBjbXB4Y2hnKCZhbXA7Ym1wLSZndDtiaXRzW2lkeF0sIG9sZCwgbmV3KTsKJiM0MzsKJiM0MzsJfSB3aGlsZSAoYWN0dWFsICE9IG9sZCAmYW1wOyZhbXA7IGNhbl9sb29wKTsKJiM0Mzt9CiYjNDM7CiYjNDM7X193ZWFrCiYjNDM7dm9pZCBibXBfc2V0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcCkKJiM0Mzt7CiYjNDM7CXU2NCB2YWwgPSBCSVRfTUFTSyhiaXQpOwomIzQzOwl1MzIgaWR4ID0gQklUX1dPUkQoYml0KTsKJiM0MzsJdTY0IG9sZCwgbmV3LCBhY3R1YWw7CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCW9sZCA9IGJtcC0mZ3Q7Yml0c1tpZHhdOwomIzQzOwkJbmV3ID0gb2xkIHwgdmFsOwomIzQzOwkJYWN0dWFsID0gY21weGNoZygmYW1wO2JtcC0mZ3Q7Yml0c1tpZHhdLCBvbGQsIG5ldyk7CiYjNDM7CiYjNDM7CX0gd2hpbGUgKGFjdHVhbCAhPSBvbGQgJmFtcDsmYW1wOyBjYW5fbG9vcCk7CiYjNDM7fQomIzQzOwomIzQzO19fd2VhawomIzQzO3ZvaWQgYm1wX2NsZWFyKHNpemVfdCBiaXRzLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcCkKJiM0Mzt7CiYjNDM7CXNpemVfdCBud29yZHMgPSBCSVRTX1RPX0xPTkdfTE9OR1MoYml0cyk7CiYjNDM7CXZvbGF0aWxlIHUzMiBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSB6ZXJvOyBpICZsdDsgbndvcmRzICZhbXA7JmFtcDsgY2FuX2xvb3A7IGkmIzQzOyYjNDM7KQomIzQzOwkJYm1wLSZndDtiaXRzW2ldID0gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB1NjQgYm1wX2xhc3Rfd29yZF9tYXNrKHNpemVfdCBiaXRzKQomIzQzO3sKJiM0MzsJdTMyIHJlbSA9IGJpdHMgJSBCSVRTX1BFUl9MT05HX0xPTkc7CiYjNDM7CiYjNDM7CXJldHVybiByZW0gPyAoMVVMTCAmbHQ7Jmx0OyByZW0pIC0gMSA6IH4wVUxMOwomIzQzO30KJiM0MzsKJiM0MztfX3dlYWsKJiM0Mzt2b2lkIGJtcF9hbmQoc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqZHN0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKnNyYzEsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqc3JjMikKJiM0Mzt7CiYjNDM7CXNpemVfdCBud29yZHMgPSBCSVRTX1RPX0xPTkdfTE9OR1MoYml0cyk7CiYjNDM7CXZvbGF0aWxlIHUzMiBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSB6ZXJvOyBpICZsdDsgbndvcmRzICZhbXA7JmFtcDsgY2FuX2xvb3A7IGkmIzQzOyYjNDM7KQomIzQzOwkJZHN0LSZndDtiaXRzW2ldID0gc3JjMS0mZ3Q7Yml0c1tpXSAmYW1wOyBzcmMyLSZndDtiaXRzW2ldOwomIzQzOwomIzQzOwlpZiAobndvcmRzICZhbXA7JmFtcDsgYml0cyAlIEJJVFNfUEVSX0xPTkdfTE9ORykKJiM0MzsJCWRzdC0mZ3Q7Yml0c1tud29yZHMgLSAxXSAmYW1wOz0gYm1wX2xhc3Rfd29yZF9tYXNrKGJpdHMpOwomIzQzO30KJiM0MzsKJiM0MztfX3dlYWsKJiM0Mzt2b2lkIGJtcF9vcihzaXplX3QgYml0cywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpkc3QsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqc3JjMSwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpzcmMyKQomIzQzO3sKJiM0MzsJc2l6ZV90IG53b3JkcyA9IEJJVFNfVE9fTE9OR19MT05HUyhiaXRzKTsKJiM0MzsJdm9sYXRpbGUgdTMyIGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IHplcm87IGkgJmx0OyBud29yZHMgJmFtcDsmYW1wOyBjYW5fbG9vcDsgaSYjNDM7JiM0MzspCiYjNDM7CQlkc3QtJmd0O2JpdHNbaV0gPSBzcmMxLSZndDtiaXRzW2ldIHwgc3JjMi0mZ3Q7Yml0c1tpXTsKJiM0MzsKJiM0MzsJaWYgKG53b3JkcyAmYW1wOyZhbXA7IGJpdHMgJSBCSVRTX1BFUl9MT05HX0xPTkcpCiYjNDM7CQlkc3QtJmd0O2JpdHNbbndvcmRzIC0gMV0gJmFtcDs9IGJtcF9sYXN0X3dvcmRfbWFzayhiaXRzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7X193ZWFrCiYjNDM7Ym9vbCBibXBfZW1wdHkoc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKQomIzQzO3sKJiM0MzsJc2l6ZV90IG53b3JkcyA9IEJJVFNfVE9fTE9OR19MT05HUyhiaXRzKTsKJiM0MzsJdm9sYXRpbGUgdTMyIGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IHplcm87IGkgJmx0OyBud29yZHMgJmFtcDsmYW1wOyBjYW5fbG9vcDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXU2NCBtYXNrID0gKGkgPT0gbndvcmRzIC0gMSkgPyBibXBfbGFzdF93b3JkX21hc2soYml0cykgOiB+MFVMTDsKJiM0MzsKJiM0MzsJCWlmIChibXAtJmd0O2JpdHNbaV0gJmFtcDsgbWFzaykKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO19fd2VhawomIzQzO3ZvaWQgYm1wX2NvcHkoc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqZHN0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKnNyYykKJiM0Mzt7CiYjNDM7CXNpemVfdCBud29yZHMgPSBCSVRTX1RPX0xPTkdfTE9OR1MoYml0cyk7CiYjNDM7CXZvbGF0aWxlIHUzMiBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSB6ZXJvOyBpICZsdDsgbndvcmRzICZhbXA7JmFtcDsgY2FuX2xvb3A7IGkmIzQzOyYjNDM7KQomIzQzOwkJZHN0LSZndDtiaXRzW2ldID0gc3JjLSZndDtiaXRzW2ldOwomIzQzOwomIzQzOwlpZiAobndvcmRzICZhbXA7JmFtcDsgYml0cyAlIEJJVFNfUEVSX0xPTkdfTE9ORykKJiM0MzsJCWRzdC0mZ3Q7Yml0c1tud29yZHMgLSAxXSAmYW1wOz0gYm1wX2xhc3Rfd29yZF9tYXNrKGJpdHMpOwomIzQzO30KJiM0MzsKJiM0MztfX3dlYWsKJiM0Mztib29sIGJtcF9zdWJzZXQoc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYmlnLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKnNtYWxsKQomIzQzO3sKJiM0MzsJc2l6ZV90IG53b3JkcyA9IEJJVFNfVE9fTE9OR19MT05HUyhiaXRzKTsKJiM0MzsJdm9sYXRpbGUgdTMyIGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IHplcm87IGkgJmx0OyBud29yZHMgJmFtcDsmYW1wOyBjYW5fbG9vcDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXU2NCBtYXNrID0gKGkgPT0gbndvcmRzIC0gMSkgPyBibXBfbGFzdF93b3JkX21hc2soYml0cykgOiB+MFVMTDsKJiM0MzsKJiM0MzsJCWlmICh+YmlnLSZndDtiaXRzW2ldICZhbXA7IHNtYWxsLSZndDtiaXRzW2ldICZhbXA7IG1hc2spCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MztfX3dlYWsKJiM0Mztib29sIGJtcF9pbnRlcnNlY3RzKHNpemVfdCBiaXRzLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmFyZzEsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYXJnMikKJiM0Mzt7CiYjNDM7CXNpemVfdCBud29yZHMgPSBCSVRTX1RPX0xPTkdfTE9OR1MoYml0cyk7CiYjNDM7CXZvbGF0aWxlIHUzMiBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSB6ZXJvOyBpICZsdDsgbndvcmRzICZhbXA7JmFtcDsgY2FuX2xvb3A7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl1NjQgbWFzayA9IChpID09IG53b3JkcyAtIDEpID8gYm1wX2xhc3Rfd29yZF9tYXNrKGJpdHMpIDogfjBVTEw7CiYjNDM7CiYjNDM7CQlpZiAoYXJnMS0mZ3Q7Yml0c1tpXSAmYW1wOyBhcmcyLSZndDtiaXRzW2ldICZhbXA7IG1hc2spCiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MztfX3dlYWsKJiM0Mzt2b2lkIGJtcF9wcmludChzaXplX3QgYml0cywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApCiYjNDM7ewomIzQzOwlzaXplX3QgbndvcmRzID0gQklUU19UT19MT05HX0xPTkdTKGJpdHMpOwomIzQzOwl2b2xhdGlsZSB1MzIgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gemVybzsgaSAmbHQ7IG53b3JkcyAmYW1wOyZhbXA7IGNhbl9sb29wOyBpJiM0MzsmIzQzOykKJiM0MzsJCWFyZW5hX3N0ZGVycigmIzM0OyUwMTZsbHggJiMzNDssIGJtcC0mZ3Q7Yml0c1tpXSk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9jb21tb24uYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2NvbW1vbi5icGYuYwppbmRleCA1MGJlNTcyMTNkZmI4ZC4uNTY5ZjBmNjRkNTE4YjMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvY29tbW9uLmJwZi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvY29tbW9uLmJwZi5jCkBAIC00LDkgJiM0Mzs0LDggQEAKICNpbmNsdWRlICZsdDtsaWJhcmVuYS9hc2FuLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGliYXJlbmEvYnVkZHkuaCZndDsKIAotY29uc3Qgdm9sYXRpbGUgdTMyIHplcm8gPSAwOwotCiBzdHJ1Y3QgYnVkZHkgX19hcmVuYSBidWRkeTsKJiM0Mzt2b2xhdGlsZSB1MzIgemVybyA9IDA7CiAKIGludCBhcmVuYV9mbHMoX191NjQgd29yZCkKIHsKQEAgLTM4LDYgJiM0MzszNywxMiBAQCBfX3dlYWsgaW50IGFyZW5hX2J1ZGR5X3Jlc2V0KHZvaWQpCiAJcmV0dXJuIGJ1ZGR5X2luaXQoJmFtcDtidWRkeSk7CiB9CiAKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X193ZWFrIGludCBhcmVuYV9idWRkeV9kZXN0cm95KHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gYnVkZHlfZGVzdHJveSgmYW1wO2J1ZGR5KTsKJiM0Mzt9CiYjNDM7CiBfX3dlYWsgdm9pZCBfX2FyZW5hICphcmVuYV9tYWxsb2Moc2l6ZV90IHNpemUpCiB7CiAJcmV0dXJuIGJ1ZGR5X2FsbG9jKCZhbXA7YnVkZHksIHNpemUpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hLmMKaW5kZXggNjFlYTY4ZGNlNDEwNWYuLmJhNWE1YTUwZjdjMDdkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hLmMKQEAgLTE1LDcgJiM0MzsxNSwxMiBAQCBzdGF0aWMgdm9pZCBydW5fbGliYXJlbmFfdGVzdChzdHJ1Y3QgbGliYXJlbmEgKnNrZWwsIHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywKIHsKIAlpbnQgcmV0OwogCi0JaWYgKCFzdHJzdHIobmFtZSwgJiMzNDt0ZXN0X2J1ZGR5JiMzNDspKSB7CiYjNDM7CWlmIChzdHJzdHIobmFtZSwgJiMzNDt0ZXN0X2J1ZGR5JiMzNDspKSB7CiYjNDM7CQkvKiBCdWRkeSB0ZXN0cyBpbml0aWFsaXplIHRoZSBhbGxvY2F0b3IgZGlyZWN0bHkuICovCiYjNDM7CQlyZXQgPSBsaWJhcmVuYV9ydW5fcHJvZyhicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3MuYXJlbmFfYnVkZHlfZGVzdHJveSkpOwomIzQzOwkJaWYgKCFBU1NFUlRfT0socmV0LCAmIzM0O2FyZW5hX2J1ZGR5X2Rlc3Ryb3kmIzM0OykpCiYjNDM7CQkJcmV0dXJuOwomIzQzOwl9IGVsc2UgewogCQlyZXQgPSBsaWJhcmVuYV9ydW5fcHJvZyhicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3MuYXJlbmFfYnVkZHlfcmVzZXQpKTsKIAkJaWYgKCFBU1NFUlRfT0socmV0LCAmIzM0O2FyZW5hX2J1ZGR5X3Jlc2V0JiMzNDspKQogCQkJcmV0dXJuOwpAQCAtMjQsNyAmIzQzOzI5LDYgQEAgc3RhdGljIHZvaWQgcnVuX2xpYmFyZW5hX3Rlc3Qoc3RydWN0IGxpYmFyZW5hICpza2VsLCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csCiAJcmV0ID0gbGliYXJlbmFfcnVuX3Byb2coYnBmX3Byb2dyYW1fX2ZkKHByb2cpKTsKIAogCUFTU0VSVF9PSyhyZXQsIG5hbWUpOwotCiB9CiAKIHN0YXRpYyB2b2lkICpydW5fbGliYXJlbmFfcGFyYWxsZWxfcHJvZyh2b2lkICphcmcpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmMKaW5kZXggZDU5ZDlkZDEyZWYyYjIuLmY4OTc0MDVmNzAxZGQ1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jCkBAIC0xNyw3ICYjNDM7MTcsMTIgQEAgc3RhdGljIHZvaWQgcnVuX2xpYmFyZW5hX2FzYW5fdGVzdChzdHJ1Y3QgbGliYXJlbmFfYXNhbiAqc2tlbCwKIHsKIAlpbnQgcmV0OwogCi0JaWYgKCFzdHJzdHIobmFtZSwgJiMzNDt0ZXN0X2J1ZGR5JiMzNDspKSB7CiYjNDM7CWlmIChzdHJzdHIobmFtZSwgJiMzNDt0ZXN0X2J1ZGR5JiMzNDspKSB7CiYjNDM7CQkvKiBCdWRkeSB0ZXN0cyBpbml0aWFsaXplIHRoZSBhbGxvY2F0b3IgZGlyZWN0bHkuICovCiYjNDM7CQlyZXQgPSBsaWJhcmVuYV9ydW5fcHJvZyhicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3MuYXJlbmFfYnVkZHlfZGVzdHJveSkpOwomIzQzOwkJaWYgKCFBU1NFUlRfT0socmV0LCAmIzM0O2FyZW5hX2J1ZGR5X2Rlc3Ryb3kmIzM0OykpCiYjNDM7CQkJcmV0dXJuOwomIzQzOwl9IGVsc2UgewogCQlyZXQgPSBsaWJhcmVuYV9ydW5fcHJvZyhicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3MuYXJlbmFfYnVkZHlfcmVzZXQpKTsKIAkJaWYgKCFBU1NFUlRfT0socmV0LCAmIzM0O2FyZW5hX2J1ZGR5X3Jlc2V0JiMzNDspKQogCQkJcmV0dXJuOwpAQCAtOTAsNCAmIzQzOzk1LDMgQEAgdm9pZCB0ZXN0X2xpYmFyZW5hX2FzYW4odm9pZCkKIAogCXJldHVybjsKIH0KLQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwMjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzY4NgoJCQkJCQkJb3V0cHV0OiA3NQoJCQkJCQkJdGhvdWdodHM6IDU3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpczogbGliYXJlbmEgU2VsZnRlc3QgTW9kaWZpY2F0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCBoZXJlLCBhbmQgaXQgc2VlbXMgdG8gYmUgc29sZWx5IGZvY3VzZWQgb24gbW9kaWZ5aW5nIHRoZSBCUEYgc2VsZnRlc3RzIHJlbGF0ZWQgdG8gbGliYXJlbmEuIEkgc2VlIGEgbGlzdCBvZiBmaWxlcyB0aGF0IGhhdmUgYmVlbiB0b3VjaGVkOiBgYml0bWFwLmhgLCBgY29tbW9uLmhgLCByZW5hbWVkIGAuYnBmLmNgIGZpbGVzIChlLmcuLCBgc3RfYXNhbl9idWRkeS5icGYuY2AgdG8gYHRlc3RfYXNhbl9idWRkeS5icGYuY2AsIGFuZCBzbyBvbiksIGFuZCBzb21lIGFzc29jaWF0ZWQgQyBmaWxlcy4gVGhlIGltcG9ydGFudCBiaXQgaXMgdGhhdCAqZXZlcnl0aGluZyogaXMgdW5kZXIgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9gLgoKTm93LCBnaXZlbiBteSBleHBlcnRpc2UsIEkga25vdyBpbW1lZGlhdGVseSB0aGF0IHNlbGZ0ZXN0cyBhcmUganVzdCB0aGF0IOKAkyB0ZXN0cy4gVGhleSYjMzk7cmUgZGVzaWduZWQgdG8gdmFsaWRhdGUgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgY29kZSwgYnV0IHRoZXkmIzM5O3JlICpub3QqIHBhcnQgb2YgdGhlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhbnkgb2YgdGhlIGFyY2hpdGVjdHVyYWwgY29kZS4gVGhleSYjMzk7cmUgdXNlci1zcGFjZSBwcm9ncmFtcyBvciBCUEYgcHJvZ3JhbXMsIGZvciB0ZXN0aW5nIHRoZSBrZXJuZWwuIFRoZXkgYXJlIG5vdCBpbnRlbmRlZCB0byBtb2RpZnkgb3IgY2hhbmdlIHRoZSBrZXJuZWwgaXRzZWxmLCBzbyB0aGVyZSYjMzk7cyBubyBpbmhlcmVudCByaXNrIG9mIGludHJvZHVjaW5nIG5ldyBidWdzIHRvIHRoZSBjb3JlIHN5c3RlbSB2aWEgdGhlc2UgY2hhbmdlcy4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTttIGNoZWNraW5nIGFnYWluIHRvIGVuc3VyZSBubyBmaWxlcyB3ZXJlIG1vZGlmaWVkIGluIG90aGVyIGRpcmVjdG9yaWVzLiBObywgYWxsIGZpbGVzIGFyZSB1bmRlciBgL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9gLCBhcyBjb25maXJtZWQgYnkgdGhlIGxpc3QuCgpUaGVyZWZvcmUsIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGlzIGlzIGEgZGVmaW5pdGUgJiMzNDtXb3J0aEZ1enppbmc9ZmFsc2UmIzM0OyBzY2VuYXJpby4gVGhlIHBhdGNoIGl0c2VsZiBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBzdXJmYWNlIGFyZWEgZm9yIGZ1enppbmcgY29yZSBrZXJuZWwgY29tcG9uZW50cy4gSXQmIzM5O3Mgc3RyaWN0bHkgYWJvdXQgaW1wcm92aW5nIHRlc3QgY292ZXJhZ2Ugb3IgYWRkaW5nIG5ldyB0ZXN0cyB0byB0aGUgbGliYXJlbmEgZnJhbWV3b3JrIHdpdGhpbiB0aGUgQlBGIHNlbGZ0ZXN0cy4KCkFscmlnaHQsIEkmIzM5O2xsIGdvIGFoZWFkIGFuZCB1cGRhdGUgdGhlIHJlc3VsdHMgdG9vbCB3aXRoIHRoaXMgYXNzZXNzbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwMjowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBhbmQgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyBmb3IgbGliYXJlbmEgdW5kZXIgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgYW5kIG1vZGlmaWVzIEJQRiBzZWxmdGVzdHMgZm9yIGxpYmFyZW5hIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZSBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDAyOjAxOjMwLjY3NTc3MzkzN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMjc0ODY4MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBhbmQgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyBmb3IgbGliYXJlbmEgdW5kZXIgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwMjowMTozMC42NzU3Nzk5MTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3NTU1NzM4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDhjNGMxNDQyOTJjZTVjZThjMDk2MzA2MDNmMzdkODc4YWY1MjdmZDhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdWwgNyAwMjowMToyOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9iaXRtYXAuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2JpdG1hcC5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uY2Y2YjYzZjVkOWE0NWZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvYml0bWFwLmhcXG5AQCAtMCwwICsxLDM0IEBAXFxuKyNwcmFnbWEgb25jZVxcbitcXG4rI2RlZmluZSBCSVRTX1BFUl9CWVRFXFx0XFx0OFxcbisjZGVmaW5lIEJZVEVTX1RPX0JJVFMobmIpXFx0KChuYikgKiBCSVRTX1BFUl9CWVRFKVxcbitcXG4rI2RlZmluZSBCSVRTX1BFUl9MT05HX0xPTkdcXHQoc2l6ZW9mKGxvbmcgbG9uZykgKiBCSVRTX1BFUl9CWVRFKVxcbisjZGVmaW5lIEJJVFNfVE9fTE9OR19MT05HUyhucilcXHQoKChucikgKyBCSVRTX1BFUl9MT05HX0xPTkcgLSAxKSAvIEJJVFNfUEVSX0xPTkdfTE9ORylcXG4rI2RlZmluZSBCSVRfTUFTSyhucilcXHRcXHQoMVVMTCBcXHUwMDNjXFx1MDAzYyAoKG5yKSAlIEJJVFNfUEVSX0xPTkdfTE9ORykpXFxuKyNkZWZpbmUgQklUX1dPUkQobnIpXFx0XFx0KChucikgLyBCSVRTX1BFUl9MT05HX0xPTkcpXFxuK1xcbitzdHJ1Y3QgYml0bWFwIHtcXG4rXFx0dTY0IGJpdHNbMF07XFxuK307XFxuK1xcbitzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcF9hbGxvYyhzaXplX3QgYml0cyk7XFxuK3ZvaWQgYm1wX2ZyZWUoc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApO1xcbitcXG4rdm9pZCBfX2JtcF9zZXRfYml0KHUzMiBiaXQsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKTtcXG4rdm9pZCBfX2JtcF9jbGVhcl9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApO1xcbit2b2lkIGJtcF9zZXRfYml0KHUzMiBiaXQsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKTtcXG4rdm9pZCBibXBfY2xlYXJfYml0KHUzMiBiaXQsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKTtcXG4rYm9vbCBibXBfdGVzdF9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApO1xcbitib29sIGJtcF90ZXN0X2FuZF9jbGVhcl9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApO1xcbitib29sIGJtcF90ZXN0X2FuZF9zZXRfYml0KHUzMiBiaXQsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKTtcXG4rXFxuK3ZvaWQgYm1wX2NsZWFyKHNpemVfdCBiaXRzLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcCk7XFxuK3ZvaWQgYm1wX2FuZChzaXplX3QgYml0cywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpkc3QsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqc3JjMSwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpzcmMyKTtcXG4rdm9pZCBibXBfb3Ioc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqZHN0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKnNyYzEsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqc3JjMik7XFxuK2Jvb2wgYm1wX2VtcHR5KHNpemVfdCBiaXRzLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcCk7XFxuK3ZvaWQgYm1wX2NvcHkoc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqZHN0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKnNyYyk7XFxuK1xcbitib29sIGJtcF9pbnRlcnNlY3RzKHNpemVfdCBiaXRzLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmFyZzEsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYXJnMik7XFxuK2Jvb2wgYm1wX3N1YnNldChzaXplX3QgYml0cywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpiaWcsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqc21hbGwpO1xcbit2b2lkIGJtcF9wcmludChzaXplX3QgYml0cywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9jb21tb24uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2NvbW1vbi5oXFxuaW5kZXggYTNlYjE2NDFhYzM2ZGYuLjkzMWFjZTlhNDllMmJkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2NvbW1vbi5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvY29tbW9uLmhcXG5AQCAtNDMsNyArNDMsNyBAQCBzdHJ1Y3Qge1xcbiAgKiBpbXByZWNpc2UuIFRvIGZvcmNlIHRoZSB2YXJpYWJsZSB0byBiZSBpbXByZWNpc2UsIGluaXRpYWxpemUgaXQgd2l0aFxcbiAgKiB0aGUgb3BhcXVlIHZvbGF0aWxlIHZhcmlhYmxlIDAgaW5zdGVhZCBvZiB0aGUgY29uc3RhbnQgMC5cXG4gICovXFxuLWV4dGVybiBjb25zdCB2b2xhdGlsZSB1MzIgemVybztcXG4rdm9sYXRpbGUgdTMyIHplcm8gX193ZWFrO1xcbiBleHRlcm4gdm9sYXRpbGUgdTY0IGFzYW5fdmlvbGF0ZWQ7XFxuIFxcbiBpbnQgYXJlbmFfZmxzKF9fdTY0IHdvcmQpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3N0X2FzYW5fYnVkZHkuYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYXNhbl9idWRkeS5icGYuY1xcbnNpbWlsYXJpdHkgaW5kZXggOTglXFxucmVuYW1lIGZyb20gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy9zdF9hc2FuX2J1ZGR5LmJwZi5jXFxucmVuYW1lIHRvIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9hc2FuX2J1ZGR5LmJwZi5jXFxuaW5kZXggNjg2Y2FiYTJjNjQzYjUuLjMyNjZhMjhmNTNkNzY4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvc3RfYXNhbl9idWRkeS5icGYuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9hc2FuX2J1ZGR5LmJwZi5jXFxuQEAgLTEyLDcgKzEyLDcgQEAgZXh0ZXJuIHN0cnVjdCBidWRkeSBfX2FyZW5hIGJ1ZGR5O1xcbiBcXG4gI2lmZGVmIEJQRl9BUkVOQV9BU0FOXFxuIFxcbi0jaW5jbHVkZSBcXFwic3RfYXNhbl9jb21tb24uaFxcXCJcXG4rI2luY2x1ZGUgXFxcInRlc3RfYXNhbl9jb21tb24uaFxcXCJcXG4gXFxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGFzYW5fdGVzdF9idWRkeV9vb2Jfc2luZ2xlKHNpemVfdCBhbGxvY19zaXplKVxcbiB7XFxuQEAgLTE1NCw3ICsxNTQsOCBAQCBfX3dlYWsgaW50IGFzYW5fdGVzdF9idWRkeV9vb2Iodm9pZClcXG4gXFx0c2l6ZV90IHNpemVzW10gPSB7XFxuIFxcdFxcdDcsIDgsIDE3LCAxOCwgNjQsIDI1NiwgMzE3LCA1MTIsIDEwMjQsXFxuIFxcdH07XFxuLVxcdGludCByZXQsIGk7XFxuK1xcdGludCByZXQ7XFxuK1xcdHUzMiBpO1xcbiBcXG4gXFx0cmV0ID0gYnVkZHlfaW5pdChcXHUwMDI2YnVkZHkpO1xcbiBcXHRpZiAocmV0KSB7XFxuQEAgLTE2Myw2ICsxNjQsNyBAQCBfX3dlYWsgaW50IGFzYW5fdGVzdF9idWRkeV9vb2Iodm9pZClcXG4gXFx0fVxcbiBcXG4gXFx0Zm9yIChpID0gemVybzsgaSBcXHUwMDNjIHNpemVvZihzaXplcykgLyBzaXplb2Yoc2l6ZXNbMF0pIFxcdTAwMjZcXHUwMDI2IGNhbl9sb29wOyBpKyspIHtcXG4rXFx0XFx0YmFycmllcl92YXIoaSk7XFxuIFxcdFxcdHJldCA9IGFzYW5fdGVzdF9idWRkeV9vb2Jfc2luZ2xlKHNpemVzW2ldKTtcXG4gXFx0XFx0aWYgKHJldCkge1xcbiBcXHRcXHRcXHRhcmVuYV9zdGRvdXQoXFxcIiVzOiVkIEZhaWxlZCBmb3Igc2l6ZSAlbHVcXFwiLCBfX2Z1bmNfXyxcXG5AQCAtMTkwLDcgKzE5Miw4IEBAIF9fc3RkZXJyKFxcXCJDYWxsIHRyYWNlOlxcXFxuXFxcIlxcbiBfX3dlYWsgaW50IGFzYW5fdGVzdF9idWRkeV91YWYodm9pZClcXG4ge1xcbiBcXHRzaXplX3Qgc2l6ZXNbXSA9IHsgMTYsIDMyLCA2NCwgMTI4LCAyNTYsIDUxMiwgMTAyNCwgMTYzODQgfTtcXG4tXFx0aW50IHJldCwgaTtcXG4rXFx0aW50IHJldDtcXG4rXFx0dTMyIGk7XFxuIFxcbiBcXHRyZXQgPSBidWRkeV9pbml0KFxcdTAwMjZidWRkeSk7XFxuIFxcdGlmIChyZXQpIHtcXG5AQCAtMTk5LDYgKzIwMiw3IEBAIF9fd2VhayBpbnQgYXNhbl90ZXN0X2J1ZGR5X3VhZih2b2lkKVxcbiBcXHR9XFxuIFxcbiBcXHRmb3IgKGkgPSB6ZXJvOyBpIFxcdTAwM2Mgc2l6ZW9mKHNpemVzKSAvIHNpemVvZihzaXplc1swXSkgXFx1MDAyNlxcdTAwMjYgY2FuX2xvb3A7IGkrKykge1xcbitcXHRcXHRiYXJyaWVyX3ZhcihpKTtcXG4gXFx0XFx0cmV0ID0gYXNhbl90ZXN0X2J1ZGR5X3VhZl9zaW5nbGUoc2l6ZXNbaV0pO1xcbiBcXHRcXHRpZiAocmV0KSB7XFxuIFxcdFxcdFxcdGFyZW5hX3N0ZG91dChcXFwiJXM6JWQgRmFpbGVkIGZvciBzaXplICVsdVxcXCIsIF9fZnVuY19fLFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3N0X2FzYW5fY29tbW9uLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYXNhbl9jb21tb24uaFxcbnNpbWlsYXJpdHkgaW5kZXggMTAwJVxcbnJlbmFtZSBmcm9tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvc3RfYXNhbl9jb21tb24uaFxcbnJlbmFtZSB0byB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYXNhbl9jb21tb24uaFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYml0bWFwLmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2JpdG1hcC5icGYuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmU3ZDMyZjQ0ZDY4NzA5XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9iaXRtYXAuYnBmLmNcXG5AQCAtMCwwICsxLDM5NCBAQFxcbisjaW5jbHVkZSBcXHUwMDNjbGliYXJlbmEvY29tbW9uLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGliYXJlbmEvYXNhbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGliYXJlbmEvYml0bWFwLmhcXHUwMDNlXFxuK1xcbisjZGVmaW5lIFRFU1RfQklUU1xcdCgyICogQklUU19QRVJfTE9OR19MT05HKVxcbisjZGVmaW5lIFRFU1RfV09SRFNcXHRCSVRTX1RPX0xPTkdfTE9OR1MoVEVTVF9CSVRTKVxcbisjZGVmaW5lIE1JRF9CSVRcXHRcXHQoQklUU19QRVJfTE9OR19MT05HICsgMSlcXG4rI2RlZmluZSBMQVNUX0JJVFxcdChURVNUX0JJVFMgLSAxKVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9ibXBfc2V0YWxsKHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKVxcbit7XFxuK1xcdHZvbGF0aWxlIHUzMiBpO1xcbitcXG4rXFx0Zm9yIChpID0gemVybzsgaSBcXHUwMDNjIFRFU1RfV09SRFMgXFx1MDAyNlxcdTAwMjYgY2FuX2xvb3A7IGkrKylcXG4rXFx0XFx0Ym1wLVxcdTAwM2ViaXRzW2ldID0gfjBVTEw7XFxuK31cXG4rXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK19fd2VhayBpbnQgdGVzdF9iaXRtYXBfYWxsb2NfZnJlZSh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wO1xcbitcXG4rXFx0Ym1wID0gYm1wX2FsbG9jKFRFU1RfQklUUyk7XFxuK1xcdGlmICghYm1wKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdGlmICghYm1wX2VtcHR5KFRFU1RfQklUUywgYm1wKSlcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRfX2JtcF9zZXRfYml0KExBU1RfQklULCBibXApO1xcbitcXHRpZiAoIWJtcF90ZXN0X2JpdChMQVNUX0JJVCwgYm1wKSlcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRfX2JtcF9jbGVhcl9iaXQoTEFTVF9CSVQsIGJtcCk7XFxuK1xcdGlmIChibXBfdGVzdF9iaXQoTEFTVF9CSVQsIGJtcCkpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0Ym1wX2ZyZWUoYm1wKTtcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnI6XFxuK1xcdGJtcF9mcmVlKGJtcCk7XFxuK1xcdHJldHVybiAtRUlOVkFMO1xcbit9XFxuK1xcbitTRUMoXFxcInN5c2NhbGxcXFwiKVxcbitfX3dlYWsgaW50IHRlc3RfYml0bWFwX2JpdF9vcHModm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcDtcXG4rXFxuK1xcdGJtcCA9IGJtcF9hbGxvYyhURVNUX0JJVFMpO1xcbitcXHRpZiAoIWJtcClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRfX2JtcF9zZXRfYml0KDAsIGJtcCk7XFxuK1xcdGlmICghYm1wX3Rlc3RfYml0KDAsIGJtcCkpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0X19ibXBfc2V0X2JpdChNSURfQklULCBibXApO1xcbitcXHRpZiAoIWJtcF90ZXN0X2JpdChNSURfQklULCBibXApKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdF9fYm1wX3NldF9iaXQoTEFTVF9CSVQsIGJtcCk7XFxuK1xcdGlmICghYm1wX3Rlc3RfYml0KExBU1RfQklULCBibXApKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdGlmIChibXBfdGVzdF9iaXQoTUlEX0JJVCAtIDEsIGJtcCkpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0X19ibXBfY2xlYXJfYml0KE1JRF9CSVQsIGJtcCk7XFxuK1xcdGlmIChibXBfdGVzdF9iaXQoTUlEX0JJVCwgYm1wKSlcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRpZiAoIWJtcF90ZXN0X2JpdCgwLCBibXApKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdGlmICghYm1wX3Rlc3RfYml0KExBU1RfQklULCBibXApKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdF9fYm1wX2NsZWFyX2JpdCgwLCBibXApO1xcbitcXHRfX2JtcF9jbGVhcl9iaXQoTEFTVF9CSVQsIGJtcCk7XFxuK1xcdGlmICghYm1wX2VtcHR5KFRFU1RfQklUUywgYm1wKSlcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRpZiAoYm1wLVxcdTAwM2ViaXRzWzBdKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdGlmIChibXAtXFx1MDAzZWJpdHNbMV0pXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0Ym1wX2ZyZWUoYm1wKTtcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnI6XFxuK1xcdGJtcF9mcmVlKGJtcCk7XFxuK1xcdHJldHVybiAtRUlOVkFMO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCB0ZXN0X2JpdG1hcF90ZXN0X2FuZF9jbGVhcl9zaW5nbGUoc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXAsIHNpemVfdCBpbmQpXFxuK3tcXG4rXFx0aWYgKGJtcF90ZXN0X2FuZF9jbGVhcl9iaXQoaW5kLCBibXApKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRfX2JtcF9zZXRfYml0KGluZCwgYm1wKTtcXG4rXFxuK1xcdGlmICghYm1wX3Rlc3RfYW5kX2NsZWFyX2JpdChpbmQsIGJtcCkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmIChibXBfdGVzdF9iaXQoaW5kLCBibXApKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAoYm1wX3Rlc3RfYW5kX2NsZWFyX2JpdChpbmQsIGJtcCkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCB0ZXN0X2JpdG1hcF90ZXN0X2FuZF9zZXRfc2luZ2xlKHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wLCBzaXplX3QgaW5kKVxcbit7XFxuK1xcdGlmIChibXBfdGVzdF9hbmRfc2V0X2JpdChpbmQsIGJtcCkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmICghYm1wX3Rlc3RfYW5kX3NldF9iaXQoaW5kLCBibXApKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAoIWJtcF90ZXN0X2JpdChpbmQsIGJtcCkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdF9fYm1wX2NsZWFyX2JpdChpbmQsIGJtcCk7XFxuK1xcbitcXHRpZiAoYm1wX3Rlc3RfYW5kX3NldF9iaXQoaW5kLCBibXApKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4rX193ZWFrIGludCB0ZXN0X2JpdG1hcF90ZXN0X2FuZF9jbGVhcl9iaXQodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcDtcXG4rXFxuK1xcdGJtcCA9IGJtcF9hbGxvYyhURVNUX0JJVFMpO1xcbitcXHRpZiAoIWJtcClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRpZiAoIXRlc3RfYml0bWFwX3Rlc3RfYW5kX2NsZWFyX3NpbmdsZShibXAsIDApKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdGlmICghdGVzdF9iaXRtYXBfdGVzdF9hbmRfY2xlYXJfc2luZ2xlKGJtcCwgTUlEX0JJVCkpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0aWYgKCF0ZXN0X2JpdG1hcF90ZXN0X2FuZF9jbGVhcl9zaW5nbGUoYm1wLCBMQVNUX0JJVCkpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0aWYgKCFibXBfZW1wdHkoVEVTVF9CSVRTLCBibXApKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdGJtcF9mcmVlKGJtcCk7XFxuK1xcdHJldHVybiAwO1xcbitcXG4rZXJyOlxcbitcXHRibXBfZnJlZShibXApO1xcbitcXHRyZXR1cm4gLUVJTlZBTDtcXG4rfVxcbitcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4rX193ZWFrIGludCB0ZXN0X2JpdG1hcF90ZXN0X2FuZF9zZXRfYml0KHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXA7XFxuK1xcbitcXHRibXAgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTtcXG4rXFx0aWYgKCFibXApXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0aWYgKCF0ZXN0X2JpdG1hcF90ZXN0X2FuZF9zZXRfc2luZ2xlKGJtcCwgMCkpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0aWYgKCF0ZXN0X2JpdG1hcF90ZXN0X2FuZF9zZXRfc2luZ2xlKGJtcCwgTUlEX0JJVCkpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0aWYgKCF0ZXN0X2JpdG1hcF90ZXN0X2FuZF9zZXRfc2luZ2xlKGJtcCwgTEFTVF9CSVQpKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdGJtcF9mcmVlKGJtcCk7XFxuK1xcdHJldHVybiAwO1xcbitcXG4rZXJyOlxcbitcXHRibXBfZnJlZShibXApO1xcbitcXHRyZXR1cm4gLUVJTlZBTDtcXG4rfVxcbitcXG4rXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK19fd2VhayBpbnQgdGVzdF9iaXRtYXBfYW5kKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGJpdG1hcCBfX2FyZW5hICpzcmMxID0gTlVMTCwgKnNyYzIgPSBOVUxMLCAqZHN0ID0gTlVMTDtcXG4rXFxuK1xcdHNyYzEgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTtcXG4rXFx0c3JjMiA9IGJtcF9hbGxvYyhURVNUX0JJVFMpO1xcbitcXHRkc3QgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTtcXG4rXFx0aWYgKCFzcmMxIHx8ICFzcmMyIHx8ICFkc3QpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0dGVzdF9ibXBfc2V0YWxsKGRzdCk7XFxuK1xcbitcXHRfX2JtcF9zZXRfYml0KDAsIHNyYzEpO1xcbitcXHRfX2JtcF9zZXRfYml0KE1JRF9CSVQsIHNyYzEpO1xcbitcXHRfX2JtcF9zZXRfYml0KExBU1RfQklULCBzcmMxKTtcXG4rXFxuK1xcdF9fYm1wX3NldF9iaXQoTUlEX0JJVCwgc3JjMik7XFxuK1xcdF9fYm1wX3NldF9iaXQoTEFTVF9CSVQsIHNyYzIpO1xcbitcXG4rXFx0Ym1wX2FuZChURVNUX0JJVFMsIGRzdCwgc3JjMSwgc3JjMik7XFxuK1xcbitcXHRpZiAoYm1wX3Rlc3RfYml0KDAsIGRzdCkpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXHRpZiAoIWJtcF90ZXN0X2JpdChNSURfQklULCBkc3QpKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFx0aWYgKCFibXBfdGVzdF9iaXQoTEFTVF9CSVQsIGRzdCkpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0aWYgKGRzdC1cXHUwMDNlYml0c1swXSlcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcdGlmIChkc3QtXFx1MDAzZWJpdHNbMV0gIT0gKEJJVF9NQVNLKE1JRF9CSVQpIHwgQklUX01BU0soTEFTVF9CSVQpKSlcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRibXBfZnJlZShzcmMxKTtcXG4rXFx0Ym1wX2ZyZWUoc3JjMik7XFxuK1xcdGJtcF9mcmVlKGRzdCk7XFxuK1xcdHJldHVybiAwO1xcbitcXG4rZXJyOlxcbitcXHRibXBfZnJlZShzcmMxKTtcXG4rXFx0Ym1wX2ZyZWUoc3JjMik7XFxuK1xcdGJtcF9mcmVlKGRzdCk7XFxuK1xcdHJldHVybiAtRUlOVkFMO1xcbit9XFxuK1xcbitTRUMoXFxcInN5c2NhbGxcXFwiKVxcbitfX3dlYWsgaW50IHRlc3RfYml0bWFwX29yKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGJpdG1hcCBfX2FyZW5hICpzcmMxID0gTlVMTCwgKnNyYzIgPSBOVUxMLCAqZHN0ID0gTlVMTDtcXG4rXFxuK1xcdHNyYzEgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTtcXG4rXFx0c3JjMiA9IGJtcF9hbGxvYyhURVNUX0JJVFMpO1xcbitcXHRkc3QgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTtcXG4rXFx0aWYgKCFzcmMxIHx8ICFzcmMyIHx8ICFkc3QpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0dGVzdF9ibXBfc2V0YWxsKGRzdCk7XFxuK1xcbitcXHRfX2JtcF9zZXRfYml0KDAsIHNyYzEpO1xcbitcXHRfX2JtcF9zZXRfYml0KExBU1RfQklULCBzcmMxKTtcXG4rXFxuK1xcdF9fYm1wX3NldF9iaXQoTUlEX0JJVCwgc3JjMik7XFxuK1xcdF9fYm1wX3NldF9iaXQoTEFTVF9CSVQsIHNyYzIpO1xcbitcXG4rXFx0Ym1wX29yKFRFU1RfQklUUywgZHN0LCBzcmMxLCBzcmMyKTtcXG4rXFxuK1xcdGlmICghYm1wX3Rlc3RfYml0KDAsIGRzdCkpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXHRpZiAoIWJtcF90ZXN0X2JpdChNSURfQklULCBkc3QpKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFx0aWYgKCFibXBfdGVzdF9iaXQoTEFTVF9CSVQsIGRzdCkpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0aWYgKGRzdC1cXHUwMDNlYml0c1swXSAhPSBCSVRfTUFTSygwKSlcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcdGlmIChkc3QtXFx1MDAzZWJpdHNbMV0gIT0gKEJJVF9NQVNLKE1JRF9CSVQpIHwgQklUX01BU0soTEFTVF9CSVQpKSlcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRibXBfZnJlZShzcmMxKTtcXG4rXFx0Ym1wX2ZyZWUoc3JjMik7XFxuK1xcdGJtcF9mcmVlKGRzdCk7XFxuK1xcdHJldHVybiAwO1xcbitcXG4rZXJyOlxcbitcXHRibXBfZnJlZShzcmMxKTtcXG4rXFx0Ym1wX2ZyZWUoc3JjMik7XFxuK1xcdGJtcF9mcmVlKGRzdCk7XFxuK1xcdHJldHVybiAtRUlOVkFMO1xcbit9XFxuK1xcbitTRUMoXFxcInN5c2NhbGxcXFwiKVxcbitfX3dlYWsgaW50IHRlc3RfYml0bWFwX3N1YnNldCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYmlnID0gTlVMTCwgKnNtYWxsID0gTlVMTDtcXG4rXFxuK1xcdGJpZyA9IGJtcF9hbGxvYyhURVNUX0JJVFMpO1xcbitcXHRzbWFsbCA9IGJtcF9hbGxvYyhURVNUX0JJVFMpO1xcbitcXHRpZiAoIWJpZyB8fCAhc21hbGwpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0aWYgKCFibXBfc3Vic2V0KFRFU1RfQklUUywgYmlnLCBzbWFsbCkpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0X19ibXBfc2V0X2JpdCgwLCBzbWFsbCk7XFxuK1xcdGlmIChibXBfc3Vic2V0KFRFU1RfQklUUywgYmlnLCBzbWFsbCkpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0X19ibXBfc2V0X2JpdCgwLCBiaWcpO1xcbitcXHRpZiAoIWJtcF9zdWJzZXQoVEVTVF9CSVRTLCBiaWcsIHNtYWxsKSlcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRfX2JtcF9zZXRfYml0KExBU1RfQklULCBzbWFsbCk7XFxuK1xcdGlmIChibXBfc3Vic2V0KFRFU1RfQklUUywgYmlnLCBzbWFsbCkpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0X19ibXBfc2V0X2JpdChMQVNUX0JJVCwgYmlnKTtcXG4rXFx0X19ibXBfc2V0X2JpdChNSURfQklULCBiaWcpO1xcbitcXHRpZiAoIWJtcF9zdWJzZXQoVEVTVF9CSVRTLCBiaWcsIHNtYWxsKSlcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRpZiAoYm1wX3N1YnNldChURVNUX0JJVFMsIHNtYWxsLCBiaWcpKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdGJtcF9mcmVlKGJpZyk7XFxuK1xcdGJtcF9mcmVlKHNtYWxsKTtcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnI6XFxuK1xcdGJtcF9mcmVlKGJpZyk7XFxuK1xcdGJtcF9mcmVlKHNtYWxsKTtcXG4rXFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbit9XFxuK1xcbitTRUMoXFxcInN5c2NhbGxcXFwiKVxcbitfX3dlYWsgaW50IHRlc3RfYml0bWFwX2ludGVyc2VjdHModm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmFyZzEgPSBOVUxMLCAqYXJnMiA9IE5VTEw7XFxuK1xcbitcXHRhcmcxID0gYm1wX2FsbG9jKFRFU1RfQklUUyk7XFxuK1xcdGFyZzIgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTtcXG4rXFx0aWYgKCFhcmcxIHx8ICFhcmcyKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdGlmIChibXBfaW50ZXJzZWN0cyhURVNUX0JJVFMsIGFyZzEsIGFyZzIpKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdF9fYm1wX3NldF9iaXQoMCwgYXJnMSk7XFxuK1xcdF9fYm1wX3NldF9iaXQoTUlEX0JJVCwgYXJnMik7XFxuK1xcdGlmIChibXBfaW50ZXJzZWN0cyhURVNUX0JJVFMsIGFyZzEsIGFyZzIpKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdF9fYm1wX3NldF9iaXQoTEFTVF9CSVQsIGFyZzEpO1xcbitcXHRfX2JtcF9zZXRfYml0KExBU1RfQklULCBhcmcyKTtcXG4rXFx0aWYgKCFibXBfaW50ZXJzZWN0cyhURVNUX0JJVFMsIGFyZzEsIGFyZzIpKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdGJtcF9mcmVlKGFyZzEpO1xcbitcXHRibXBfZnJlZShhcmcyKTtcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnI6XFxuK1xcdGJtcF9mcmVlKGFyZzEpO1xcbitcXHRibXBfZnJlZShhcmcyKTtcXG4rXFx0cmV0dXJuIC1FSU5WQUw7XFxuK31cXG4rXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK19fd2VhayBpbnQgdGVzdF9iaXRtYXBfY29weSh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYXJnMSA9IE5VTEwsICphcmcyID0gTlVMTDtcXG4rXFxuK1xcdGFyZzEgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTtcXG4rXFx0YXJnMiA9IGJtcF9hbGxvYyhURVNUX0JJVFMpO1xcbitcXHRpZiAoIWFyZzEgfHwgIWFyZzIpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0X19ibXBfc2V0X2JpdCgwLCBhcmcxKTtcXG4rXFx0X19ibXBfc2V0X2JpdChNSURfQklULCBhcmcxKTtcXG4rXFxuK1xcdC8qIE1ha2Ugc3VyZSB0aG9zZSBnZXQgb3ZlcndyaXR0ZW4uICovXFxuK1xcdF9fYm1wX3NldF9iaXQoMSwgYXJnMik7XFxuK1xcdF9fYm1wX3NldF9iaXQoTUlEX0JJVCArIDIsIGFyZzIpO1xcbitcXG4rXFx0Ym1wX2NvcHkoVEVTVF9CSVRTLCBhcmcyLCBhcmcxKTtcXG4rXFxuK1xcdC8qIEJpdG1hcHMgYXJlIGVxdWFsIGlmIGEgc3Vic2V0IG9mIGVhY2ggb3RoZXIuICovXFxuK1xcdGlmICghYm1wX3N1YnNldChURVNUX0JJVFMsIGFyZzEsIGFyZzIpIHx8XFxuK1xcdCAgICAhYm1wX3N1YnNldChURVNUX0JJVFMsIGFyZzIsIGFyZzEpKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdGJtcF9mcmVlKGFyZzEpO1xcbitcXHRibXBfZnJlZShhcmcyKTtcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnI6XFxuK1xcdGJtcF9mcmVlKGFyZzEpO1xcbitcXHRibXBfZnJlZShhcmcyKTtcXG4rXFx0cmV0dXJuIC1FSU5WQUw7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy9zdF9idWRkeS5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9idWRkeS5icGYuY1xcbnNpbWlsYXJpdHkgaW5kZXggOTclXFxucmVuYW1lIGZyb20gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy9zdF9idWRkeS5icGYuY1xcbnJlbmFtZSB0byB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYnVkZHkuYnBmLmNcXG5pbmRleCBiNDVhMzA2ODE2YzBlNC4uNTYyOGYwOTg3MDEyMWMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy9zdF9idWRkeS5icGYuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9idWRkeS5icGYuY1xcbkBAIC0xNzEsNyArMTcxLDggQEAgX193ZWFrIGludCB0ZXN0X2J1ZGR5X2FsbG9jX211bHRpcGxlKHZvaWQpXFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpXFxuIF9fd2VhayBpbnQgdGVzdF9idWRkeV9hbGlnbm1lbnQodm9pZClcXG4ge1xcbi1cXHRpbnQgcmV0LCBpO1xcbitcXHRpbnQgcmV0O1xcbitcXHR1MzIgaTtcXG4gXFxuIFxcdHJldCA9IGJ1ZGR5X2luaXQoXFx1MDAyNmJ1ZGR5KTtcXG4gXFx0aWYgKHJldClcXG5AQCAtMTc5LDYgKzE4MCw3IEBAIF9fd2VhayBpbnQgdGVzdF9idWRkeV9hbGlnbm1lbnQodm9pZClcXG4gXFxuIFxcdC8qIEFsbG9jYXRlIHZhcmlvdXMgc2l6ZXMgYW5kIGNoZWNrIGFsaWdubWVudCAqL1xcbiBcXHRmb3IgKGkgPSB6ZXJvOyBpIFxcdTAwM2MgMTcgXFx1MDAyNlxcdTAwMjYgY2FuX2xvb3A7IGkrKykge1xcbitcXHRcXHRiYXJyaWVyX3ZhcihpKTtcXG4gXFx0XFx0cHRyc1tpXSA9IGJ1ZGR5X2FsbG9jKFxcdTAwMjZidWRkeSwgYWxpZ25tZW50X3NpemVzW2ldKTtcXG4gXFx0XFx0aWYgKCFwdHJzW2ldKSB7XFxuIFxcdFxcdFxcdGFyZW5hX3N0ZG91dChcXFwiYWxpZ25tZW50IHRlc3Q6IGFsbG9jIGZhaWxlZCBmb3Igc2l6ZSAlbHVcXFwiLFxcbkBAIC0xOTgsOCArMjAwLDEwIEBAIF9fd2VhayBpbnQgdGVzdF9idWRkeV9hbGlnbm1lbnQodm9pZClcXG4gXFx0fVxcbiBcXG4gXFx0LyogRnJlZSBhbGwgYWxsb2NhdGlvbnMgKi9cXG4tXFx0Zm9yIChpID0gemVybzsgaSBcXHUwMDNjIDE3IFxcdTAwMjZcXHUwMDI2IGNhbl9sb29wOyBpKyspXFxuK1xcdGZvciAoaSA9IHplcm87IGkgXFx1MDAzYyAxNyBcXHUwMDI2XFx1MDAyNiBjYW5fbG9vcDsgaSsrKSB7XFxuK1xcdFxcdGJhcnJpZXJfdmFyKGkpO1xcbiBcXHRcXHRidWRkeV9mcmVlKFxcdTAwMjZidWRkeSwgcHRyc1tpXSk7XFxuK1xcdH1cXG4gXFxuIFxcdGJ1ZGR5X2Rlc3Ryb3koXFx1MDAyNmJ1ZGR5KTtcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9wYXJhbGxlbF9iaXRtYXAuYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfcGFyYWxsZWxfYml0bWFwLmJwZi5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZWVjMjg3MWUyYjBkMTBcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X3BhcmFsbGVsX2JpdG1hcC5icGYuY1xcbkBAIC0wLDAgKzEsMTkwIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBMR1BMLTIuMSBPUiBCU0QtMi1DbGF1c2VcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NicGZfYXRvbWljLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGliYXJlbmEvY29tbW9uLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGliYXJlbmEvYXNhbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGliYXJlbmEvYml0bWFwLmhcXHUwMDNlXFxuK1xcbisjZGVmaW5lIFRFU1RfQklUTUFQX1RIUkVBRFNcXHQyXFxuKyNkZWZpbmUgVEVTVF9CSVRNQVBfQklUU1xcdCgyICogQklUU19QRVJfTE9OR19MT05HKVxcbisjZGVmaW5lIFRFU1RfQklUTUFQX1NZTkNfU1BJTlNcXHRCUEZfTUFYX0xPT1BTXFxuKyNkZWZpbmUgVEVTVF9CSVRNQVBfSVRFUlNcXHQxMCAqIDEwMDAgKiAxMDAwXFxuK1xcbitzdGF0aWMgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpiaXRtYXA7XFxuK3N0YXRpYyB2b2xhdGlsZSB1NjQgc3RhcnRlZDtcXG4rc3RhdGljIHZvbGF0aWxlIGJvb2wgdGVzdF9hYm9ydDtcXG4rXFxuKy8qXFxuKyAqIFRoZSB0ZXN0IG5lZWRzIGNtcHhjaGcgYXRvbWljcyBvbiBhcmVuYSBtZW1vcnkuXFxuKyAqL1xcbisjaWYgZGVmaW5lZChFTkFCTEVfQVRPTUlDU19URVNUUykgXFx1MDAyNlxcdTAwMjZcXHRcXHRcXHRcXHQgIFxcXFxcXG4rXFx0KGRlZmluZWQoX19UQVJHRVRfQVJDSF9hcm02NCkgfHwgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3g4NikgfHwgXFxcXFxcbitcXHQgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3MzOTApIHx8IFxcXFxcXG4rXFx0IGRlZmluZWQoX19UQVJHRVRfQVJDSF9wb3dlcnBjKSB8fFxcdFxcdFxcdFxcdCAgXFxcXFxcbitcXHQgKGRlZmluZWQoX19UQVJHRVRfQVJDSF9yaXNjdikgXFx1MDAyNlxcdTAwMjYgX19yaXNjdl94bGVuID09IDY0KSlcXG4rc3RhdGljIGJvb2wgYml0bWFwX3Rlc3RzX2VuYWJsZWQodm9pZClcXG4re1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbisjZWxzZVxcbitzdGF0aWMgYm9vbCBiaXRtYXBfdGVzdHNfZW5hYmxlZCh2b2lkKVxcbit7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbisjZW5kaWZcXG4rXFxuK19fd2Vha1xcbitpbnQgYml0bWFwX3dhaXRfZm9yX3N0YXJ0KHZvaWQpXFxuK3tcXG4rXFx0dTY0IGk7XFxuK1xcbitcXHRfX3N5bmNfZmV0Y2hfYW5kX2FkZChcXHUwMDI2c3RhcnRlZCwgMSk7XFxuK1xcbitcXHRmb3IgKGkgPSB6ZXJvOyBpIFxcdTAwM2MgVEVTVF9CSVRNQVBfU1lOQ19TUElOUyBcXHUwMDI2XFx1MDAyNiBjYW5fbG9vcDsgaSsrKSB7XFxuK1xcdFxcdGlmICh0ZXN0X2Fib3J0KVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlRSO1xcbitcXHRcXHRpZiAoc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2c3RhcnRlZCkgXFx1MDAzZT0gVEVTVF9CSVRNQVBfVEhSRUFEUylcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdHRlc3RfYWJvcnQgPSB0cnVlO1xcbitcXHRyZXR1cm4gLUVUSU1FRE9VVDtcXG4rfVxcbitcXG4rLypcXG4rICogVGhlIHRlc3QgbWFrZXMgc3VyZSB3cml0ZXMgZG9uJ3QgY2xvYmJlciBlYWNoIG90aGVyIGJ5IG92ZXJ3cml0aW5nXFxuKyAqIHRoZSBzYW1lIHdvcmQuIE9uZSB0aHJlYWQgYWx3YXlzIHdyaXRlcyBvbiBldmVuIGJpdHMsIHRoZSBvdGhlciBvblxcbisgKiBvZGRzLiBCb3RoIHNob3VsZCBiZSBhYmxlIHRvIG9wZXJhdGUgb24gdGhlIGJpdG1hcCBvYmxpdmlvdXMgb2YgdGhlXFxuKyAqIG90aGVyJ3Mgb3BlcmF0aW9ucy5cXG4rICovXFxuK19fd2Vha1xcbitpbnQgYml0bWFwX3Rlc3RfYml0X3NlcXVlbmNlKHUzMiBiaXQpXFxuK3tcXG4rXFx0aWYgKGJtcF90ZXN0X2FuZF9jbGVhcl9iaXQoYml0LCBiaXRtYXApKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChibXBfdGVzdF9hbmRfc2V0X2JpdChiaXQsIGJpdG1hcCkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRpZiAoIWJtcF90ZXN0X2JpdChiaXQsIGJpdG1hcCkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKCFibXBfdGVzdF9hbmRfc2V0X2JpdChiaXQsIGJpdG1hcCkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRpZiAoIWJtcF90ZXN0X2JpdChiaXQsIGJpdG1hcCkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKCFibXBfdGVzdF9hbmRfY2xlYXJfYml0KGJpdCwgYml0bWFwKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGlmIChibXBfdGVzdF9iaXQoYml0LCBiaXRtYXApKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChibXBfdGVzdF9hbmRfY2xlYXJfYml0KGJpdCwgYml0bWFwKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRibXBfc2V0X2JpdChiaXQsIGJpdG1hcCk7XFxuK1xcdGlmICghYm1wX3Rlc3RfYml0KGJpdCwgYml0bWFwKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRibXBfY2xlYXJfYml0KGJpdCwgYml0bWFwKTtcXG4rXFx0aWYgKGJtcF90ZXN0X2JpdChiaXQsIGJpdG1hcCkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0Ym1wX3NldF9iaXQoYml0LCBiaXRtYXApO1xcbitcXHRpZiAoIWJtcF90ZXN0X2JpdChiaXQsIGJpdG1hcCkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBiaXRtYXBfdGVzdF9yZXNldF9zaW5nbGUoaW50IHBhcml0eSlcXG4re1xcbitcXHR1MzIgYml0O1xcbitcXG4rXFx0Zm9yIChiaXQgPSBwYXJpdHk7IGJpdCBcXHUwMDNjIFRFU1RfQklUTUFQX0JJVFMgXFx1MDAyNlxcdTAwMjYgY2FuX2xvb3A7IGJpdCArPSAyKVxcbitcXHRcXHRibXBfY2xlYXJfYml0KGJpdCwgYml0bWFwKTtcXG4rXFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYml0bWFwX3Rlc3RfY29tbW9uX3NpbmdsZShpbnQgcGFyaXR5KVxcbit7XFxuK1xcdHUzMiBiaXQ7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRmb3IgKGJpdCA9IHBhcml0eTsgYml0IFxcdTAwM2MgVEVTVF9CSVRNQVBfQklUUyBcXHUwMDI2XFx1MDAyNiBjYW5fbG9vcDsgYml0ICs9IDIpIHtcXG4rXFx0XFx0aWYgKHRlc3RfYWJvcnQpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVFI7XFxuK1xcbitcXHRcXHRyZXQgPSBiaXRtYXBfdGVzdF9iaXRfc2VxdWVuY2UoYml0KTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHR0ZXN0X2Fib3J0ID0gdHJ1ZTtcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBiaXRtYXBfdGVzdF9jb21tb24oaW50IHBhcml0eSlcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXHR1MzIgaTtcXG4rXFxuK1xcdGFyZW5hX3N1YnByb2dfaW5pdCgpO1xcbitcXG4rXFx0cmV0ID0gYml0bWFwX3dhaXRfZm9yX3N0YXJ0KCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRmb3IgKGkgPSB6ZXJvOyBpIFxcdTAwM2MgVEVTVF9CSVRNQVBfSVRFUlMgXFx1MDAyNlxcdTAwMjYgY2FuX2xvb3A7IGkrKykge1xcbitcXHRcXHRyZXQgPSBiaXRtYXBfdGVzdF9jb21tb25fc2luZ2xlKHBhcml0eSk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHRpZiAodGVzdF9hYm9ydClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRiaXRtYXBfdGVzdF9yZXNldF9zaW5nbGUocGFyaXR5KTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpIGludCBwYXJhbGxlbF90ZXN0X2JpdG1hcF9fZW5hYmxlZCh2b2lkKVxcbit7XFxuK1xcdHJldHVybiBiaXRtYXBfdGVzdHNfZW5hYmxlZCgpID8gMCA6IC1FT1BOT1RTVVBQO1xcbit9XFxuK1xcbitTRUMoXFxcInN5c2NhbGxcXFwiKSBpbnQgcGFyYWxsZWxfdGVzdF9iaXRtYXBfX2luaXQodm9pZClcXG4re1xcbitcXHRiaXRtYXAgPSBibXBfYWxsb2MoVEVTVF9CSVRNQVBfQklUUyk7XFxuK1xcdGlmICghYml0bWFwKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcInN5c2NhbGxcXFwiKSBpbnQgcGFyYWxsZWxfdGVzdF9iaXRtYXBfX2Zpbmkodm9pZClcXG4re1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdGlmICghYml0bWFwKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGJtcF9mcmVlKGJpdG1hcCk7XFxuK1xcdGJpdG1hcCA9IE5VTEw7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitTRUMoXFxcInN5c2NhbGxcXFwiKSBpbnQgcGFyYWxsZWxfdGVzdF9iaXRtYXBfXzAodm9pZClcXG4re1xcbitcXHRyZXR1cm4gYml0bWFwX3Rlc3RfY29tbW9uKDApO1xcbit9XFxuK1xcbitTRUMoXFxcInN5c2NhbGxcXFwiKSBpbnQgcGFyYWxsZWxfdGVzdF9iaXRtYXBfXzEodm9pZClcXG4re1xcbitcXHRyZXR1cm4gYml0bWFwX3Rlc3RfY29tbW9uKDEpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9wYXJhbGxlbF9zcG1jLmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X3BhcmFsbGVsX3NwbWMuYnBmLmNcXG5pbmRleCBmMDhmMmE5MmUxOTQ2OC4uNWZhOTZlYjc0MDk1MWMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X3BhcmFsbGVsX3NwbWMuYnBmLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfcGFyYWxsZWxfc3BtYy5icGYuY1xcbkBAIC0xNTUsNyArMTU1LDcgQEAgaW50IHNwbWNfcXVpZXNjZV9vbl9vd25lcih1NjQgZXBvY2gpXFxuIHtcXG4gXFx0dTY0IGk7XFxuIFxcbi1cXHRicGZfZm9yKGksIDAsIFRFU1RfU1BNQ19TWU5DX1NQSU5TKSB7XFxuK1xcdGZvciAoaSA9IHplcm87IGkgXFx1MDAzYyBURVNUX1NQTUNfU1lOQ19TUElOUyBcXHUwMDI2XFx1MDAyNiBjYW5fbG9vcDsgaSsrKSB7XFxuIFxcdFxcdGlmICh0ZXN0X2Fib3J0KVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlRSO1xcbiBcXHRcXHRpZiAoc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2b3duZXJfZXBvY2gpIFxcdTAwM2U9IGVwb2NoKVxcbkBAIC0xNzUsOCArMTc1LDcgQEAgaW50IHNwbWNfcXVpZXNjZV9vbl9zdGVhbGVyKHU2NCBlcG9jaClcXG4gXFx0aW50IGVyciA9IC1FVElNRURPVVQ7XFxuIFxcbiBcXHR0YXJnZXQgPSBTVEVBTEVSX0VQT0NIKGVwb2NoKTtcXG4tXFx0YnBmX2ZvcihpLCAwLCBURVNUX1NQTUNfU1lOQ19TUElOUykge1xcbi1cXG4rXFx0Zm9yIChpID0gemVybzsgaSBcXHUwMDNjIFRFU1RfU1BNQ19TWU5DX1NQSU5TIFxcdTAwMjZcXHUwMDI2IGNhbl9sb29wOyBpKyspIHtcXG4gXFx0XFx0aWYgKHRlc3RfYWJvcnQpIHtcXG4gXFx0XFx0XFx0ZXJyID0gLUVJTlRSO1xcbiBcXHRcXHRcXHRicmVhaztcXG5AQCAtMzkxLDcgKzM5MCw3IEBAIGludCBzcG1jX3dhaXRfZm9yX3N0ZWFsZXJzX3RvX3N0YXJ0KHU2NCB0YXJnZXQpXFxuIHtcXG4gXFx0dTY0IGk7XFxuIFxcbi1cXHRicGZfZm9yKGksIDAsIFRFU1RfU1BNQ19TWU5DX1NQSU5TKSB7XFxuK1xcdGZvciAoaSA9IHplcm87IGkgXFx1MDAzYyBURVNUX1NQTUNfU1lOQ19TUElOUyBcXHUwMDI2XFx1MDAyNiBjYW5fbG9vcDsgaSsrKSB7XFxuIFxcdFxcdGlmICh0ZXN0X2Fib3J0KVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlRSO1xcbiBcXHRcXHRpZiAoUkVBRF9PTkNFKHN0ZWFsZXJzX3N0YXJ0ZWQpIFxcdTAwM2U9IHRhcmdldClcXG5AQCAtNTM3LDcgKzUzNiw3IEBAIHN0YXRpYyBpbnQgc3BtY193YWl0X2Zvcl9yb3VuZF9zdGVhbHModTY0IHRhcmdldClcXG4gXFxuIFxcdGFyZW5hX3N1YnByb2dfaW5pdCgpO1xcbiBcXG4tXFx0YnBmX2ZvcihpLCAwLCBURVNUX1NQTUNfU1lOQ19TUElOUykge1xcbitcXHRmb3IgKGkgPSB6ZXJvOyBpIFxcdTAwM2MgVEVTVF9TUE1DX1NZTkNfU1BJTlMgXFx1MDAyNlxcdTAwMjYgY2FuX2xvb3A7IGkrKykge1xcbiBcXHRcXHRpZiAodGVzdF9hYm9ydClcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5UUjtcXG4gXFx0XFx0aWYgKHJvdW5kX3N0ZWFscyBcXHUwMDNlPSB0YXJnZXQpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYml0bWFwLmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9iaXRtYXAuYnBmLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi44MGU4MTQ0MDFmYjllYVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2JpdG1hcC5icGYuY1xcbkBAIC0wLDAgKzEsMjQ1IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBMR1BMLTIuMSBPUiBCU0QtMi1DbGF1c2VcXG4rLypcXG4rICogQ29weXJpZ2h0IChjKSAyMDI1LTIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXFxuKyAqIENvcHlyaWdodCAoYykgMjAyNS0yMDI2IEVtaWwgVHNhbGFwYXRpcyBcXHUwMDNjZW1pbEBldHNhbGFwYXRpcy5jb21cXHUwMDNlXFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpYmFyZW5hL2NvbW1vbi5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpYmFyZW5hL2FzYW4uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpYmFyZW5hL2JpdG1hcC5oXFx1MDAzZVxcbitcXG4rX193ZWFrXFxuK3N0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wX2FsbG9jKHNpemVfdCBiaXRzKVxcbit7XFxuK1xcdHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wO1xcbitcXHRzaXplX3Qgc2l6ZSA9IEJJVFNfVE9fTE9OR19MT05HUyhiaXRzKSAqIHNpemVvZihibXAtXFx1MDAzZWJpdHNbMF0pO1xcbitcXG4rXFx0LyogQXNzdW1lIGxvbmctYWxpZ25lZCBtYXNrcy4gKi9cXG4rXFx0aWYgKGJpdHMgJSBCSVRTX1BFUl9MT05HX0xPTkcpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0Ym1wID0gKHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqKWFyZW5hX21hbGxvYyhzaXplKTtcXG4rXFx0aWYgKCFibXApXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0Ym1wX2NsZWFyKGJpdHMsIGJtcCk7XFxuK1xcbitcXHRyZXR1cm4gYm1wO1xcbit9XFxuK1xcbitfX3dlYWtcXG4rdm9pZCBibXBfZnJlZShzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcClcXG4re1xcbitcXHRhcmVuYV9mcmVlKGJtcCk7XFxuK31cXG4rXFxuK19fd2Vha1xcbit2b2lkIF9fYm1wX3NldF9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApXFxuK3tcXG4rXFx0Ym1wLVxcdTAwM2ViaXRzW0JJVF9XT1JEKGJpdCldIHw9IEJJVF9NQVNLKGJpdCk7XFxuK31cXG4rXFxuK19fd2Vha1xcbit2b2lkIF9fYm1wX2NsZWFyX2JpdCh1MzIgYml0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcClcXG4re1xcbitcXHRibXAtXFx1MDAzZWJpdHNbQklUX1dPUkQoYml0KV0gXFx1MDAyNj0gfkJJVF9NQVNLKGJpdCk7XFxuK31cXG4rXFxuK19fd2Vha1xcbitib29sIGJtcF90ZXN0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcClcXG4re1xcbitcXHRyZXR1cm4gYm1wLVxcdTAwM2ViaXRzW0JJVF9XT1JEKGJpdCldIFxcdTAwMjYgQklUX01BU0soYml0KTtcXG4rfVxcbitcXG4rX193ZWFrXFxuK2Jvb2wgYm1wX3Rlc3RfYW5kX2NsZWFyX2JpdCh1MzIgYml0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcClcXG4re1xcbitcXHR1NjQgdmFsID0gQklUX01BU0soYml0KTtcXG4rXFx0dTMyIGlkeCA9IEJJVF9XT1JEKGJpdCk7XFxuK1xcdHU2NCBvbGQsIG5ldywgYWN0dWFsO1xcbitcXG4rXFx0ZG8ge1xcbitcXHRcXHRvbGQgPSBibXAtXFx1MDAzZWJpdHNbaWR4XTtcXG4rXFxuK1xcdFxcdGlmICghKG9sZCBcXHUwMDI2IHZhbCkpXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdFxcdG5ldyA9IG9sZCBcXHUwMDI2IH52YWw7XFxuK1xcdFxcdGFjdHVhbCA9IGNtcHhjaGcoXFx1MDAyNmJtcC1cXHUwMDNlYml0c1tpZHhdLCBvbGQsIG5ldyk7XFxuK1xcbitcXHRcXHRpZiAoYWN0dWFsID09IG9sZClcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHR9IHdoaWxlIChjYW5fbG9vcCk7XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK19fd2Vha1xcbitib29sIGJtcF90ZXN0X2FuZF9zZXRfYml0KHUzMiBiaXQsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKVxcbit7XFxuK1xcdHU2NCB2YWwgPSBCSVRfTUFTSyhiaXQpO1xcbitcXHR1MzIgaWR4ID0gQklUX1dPUkQoYml0KTtcXG4rXFx0dTY0IG9sZCwgbmV3LCBhY3R1YWw7XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdG9sZCA9IGJtcC1cXHUwMDNlYml0c1tpZHhdO1xcbitcXG4rXFx0XFx0aWYgKChvbGQgXFx1MDAyNiB2YWwpKVxcbitcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdFxcdG5ldyA9IG9sZCB8IHZhbDtcXG4rXFx0XFx0YWN0dWFsID0gY21weGNoZyhcXHUwMDI2Ym1wLVxcdTAwM2ViaXRzW2lkeF0sIG9sZCwgbmV3KTtcXG4rXFxuK1xcdFxcdGlmIChhY3R1YWwgPT0gb2xkKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHR9IHdoaWxlIChjYW5fbG9vcCk7XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK19fd2Vha1xcbit2b2lkIGJtcF9jbGVhcl9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApXFxuK3tcXG4rXFx0dTY0IHZhbCA9IEJJVF9NQVNLKGJpdCk7XFxuK1xcdHUzMiBpZHggPSBCSVRfV09SRChiaXQpO1xcbitcXHR1NjQgb2xkLCBuZXcsIGFjdHVhbDtcXG4rXFxuK1xcdGRvIHtcXG4rXFx0XFx0b2xkID0gYm1wLVxcdTAwM2ViaXRzW2lkeF07XFxuK1xcdFxcdG5ldyA9IG9sZCBcXHUwMDI2IH52YWw7XFxuK1xcdFxcdGFjdHVhbCA9IGNtcHhjaGcoXFx1MDAyNmJtcC1cXHUwMDNlYml0c1tpZHhdLCBvbGQsIG5ldyk7XFxuK1xcbitcXHR9IHdoaWxlIChhY3R1YWwgIT0gb2xkIFxcdTAwMjZcXHUwMDI2IGNhbl9sb29wKTtcXG4rfVxcbitcXG4rX193ZWFrXFxuK3ZvaWQgYm1wX3NldF9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApXFxuK3tcXG4rXFx0dTY0IHZhbCA9IEJJVF9NQVNLKGJpdCk7XFxuK1xcdHUzMiBpZHggPSBCSVRfV09SRChiaXQpO1xcbitcXHR1NjQgb2xkLCBuZXcsIGFjdHVhbDtcXG4rXFxuK1xcdGRvIHtcXG4rXFx0XFx0b2xkID0gYm1wLVxcdTAwM2ViaXRzW2lkeF07XFxuK1xcdFxcdG5ldyA9IG9sZCB8IHZhbDtcXG4rXFx0XFx0YWN0dWFsID0gY21weGNoZyhcXHUwMDI2Ym1wLVxcdTAwM2ViaXRzW2lkeF0sIG9sZCwgbmV3KTtcXG4rXFxuK1xcdH0gd2hpbGUgKGFjdHVhbCAhPSBvbGQgXFx1MDAyNlxcdTAwMjYgY2FuX2xvb3ApO1xcbit9XFxuK1xcbitfX3dlYWtcXG4rdm9pZCBibXBfY2xlYXIoc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKVxcbit7XFxuK1xcdHNpemVfdCBud29yZHMgPSBCSVRTX1RPX0xPTkdfTE9OR1MoYml0cyk7XFxuK1xcdHZvbGF0aWxlIHUzMiBpO1xcbitcXG4rXFx0Zm9yIChpID0gemVybzsgaSBcXHUwMDNjIG53b3JkcyBcXHUwMDI2XFx1MDAyNiBjYW5fbG9vcDsgaSsrKVxcbitcXHRcXHRibXAtXFx1MDAzZWJpdHNbaV0gPSAwO1xcbit9XFxuK1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHU2NCBibXBfbGFzdF93b3JkX21hc2soc2l6ZV90IGJpdHMpXFxuK3tcXG4rXFx0dTMyIHJlbSA9IGJpdHMgJSBCSVRTX1BFUl9MT05HX0xPTkc7XFxuK1xcbitcXHRyZXR1cm4gcmVtID8gKDFVTEwgXFx1MDAzY1xcdTAwM2MgcmVtKSAtIDEgOiB+MFVMTDtcXG4rfVxcbitcXG4rX193ZWFrXFxuK3ZvaWQgYm1wX2FuZChzaXplX3QgYml0cywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpkc3QsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqc3JjMSwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpzcmMyKVxcbit7XFxuK1xcdHNpemVfdCBud29yZHMgPSBCSVRTX1RPX0xPTkdfTE9OR1MoYml0cyk7XFxuK1xcdHZvbGF0aWxlIHUzMiBpO1xcbitcXG4rXFx0Zm9yIChpID0gemVybzsgaSBcXHUwMDNjIG53b3JkcyBcXHUwMDI2XFx1MDAyNiBjYW5fbG9vcDsgaSsrKVxcbitcXHRcXHRkc3QtXFx1MDAzZWJpdHNbaV0gPSBzcmMxLVxcdTAwM2ViaXRzW2ldIFxcdTAwMjYgc3JjMi1cXHUwMDNlYml0c1tpXTtcXG4rXFxuK1xcdGlmIChud29yZHMgXFx1MDAyNlxcdTAwMjYgYml0cyAlIEJJVFNfUEVSX0xPTkdfTE9ORylcXG4rXFx0XFx0ZHN0LVxcdTAwM2ViaXRzW253b3JkcyAtIDFdIFxcdTAwMjY9IGJtcF9sYXN0X3dvcmRfbWFzayhiaXRzKTtcXG4rfVxcbitcXG4rX193ZWFrXFxuK3ZvaWQgYm1wX29yKHNpemVfdCBiaXRzLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmRzdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpzcmMxLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKnNyYzIpXFxuK3tcXG4rXFx0c2l6ZV90IG53b3JkcyA9IEJJVFNfVE9fTE9OR19MT05HUyhiaXRzKTtcXG4rXFx0dm9sYXRpbGUgdTMyIGk7XFxuK1xcbitcXHRmb3IgKGkgPSB6ZXJvOyBpIFxcdTAwM2MgbndvcmRzIFxcdTAwMjZcXHUwMDI2IGNhbl9sb29wOyBpKyspXFxuK1xcdFxcdGRzdC1cXHUwMDNlYml0c1tpXSA9IHNyYzEtXFx1MDAzZWJpdHNbaV0gfCBzcmMyLVxcdTAwM2ViaXRzW2ldO1xcbitcXG4rXFx0aWYgKG53b3JkcyBcXHUwMDI2XFx1MDAyNiBiaXRzICUgQklUU19QRVJfTE9OR19MT05HKVxcbitcXHRcXHRkc3QtXFx1MDAzZWJpdHNbbndvcmRzIC0gMV0gXFx1MDAyNj0gYm1wX2xhc3Rfd29yZF9tYXNrKGJpdHMpO1xcbit9XFxuK1xcbitfX3dlYWtcXG4rYm9vbCBibXBfZW1wdHkoc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKVxcbit7XFxuK1xcdHNpemVfdCBud29yZHMgPSBCSVRTX1RPX0xPTkdfTE9OR1MoYml0cyk7XFxuK1xcdHZvbGF0aWxlIHUzMiBpO1xcbitcXG4rXFx0Zm9yIChpID0gemVybzsgaSBcXHUwMDNjIG53b3JkcyBcXHUwMDI2XFx1MDAyNiBjYW5fbG9vcDsgaSsrKSB7XFxuK1xcdFxcdHU2NCBtYXNrID0gKGkgPT0gbndvcmRzIC0gMSkgPyBibXBfbGFzdF93b3JkX21hc2soYml0cykgOiB+MFVMTDtcXG4rXFxuK1xcdFxcdGlmIChibXAtXFx1MDAzZWJpdHNbaV0gXFx1MDAyNiBtYXNrKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbitfX3dlYWtcXG4rdm9pZCBibXBfY29weShzaXplX3QgYml0cywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpkc3QsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqc3JjKVxcbit7XFxuK1xcdHNpemVfdCBud29yZHMgPSBCSVRTX1RPX0xPTkdfTE9OR1MoYml0cyk7XFxuK1xcdHZvbGF0aWxlIHUzMiBpO1xcbitcXG4rXFx0Zm9yIChpID0gemVybzsgaSBcXHUwMDNjIG53b3JkcyBcXHUwMDI2XFx1MDAyNiBjYW5fbG9vcDsgaSsrKVxcbitcXHRcXHRkc3QtXFx1MDAzZWJpdHNbaV0gPSBzcmMtXFx1MDAzZWJpdHNbaV07XFxuK1xcbitcXHRpZiAobndvcmRzIFxcdTAwMjZcXHUwMDI2IGJpdHMgJSBCSVRTX1BFUl9MT05HX0xPTkcpXFxuK1xcdFxcdGRzdC1cXHUwMDNlYml0c1tud29yZHMgLSAxXSBcXHUwMDI2PSBibXBfbGFzdF93b3JkX21hc2soYml0cyk7XFxuK31cXG4rXFxuK19fd2Vha1xcbitib29sIGJtcF9zdWJzZXQoc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYmlnLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKnNtYWxsKVxcbit7XFxuK1xcdHNpemVfdCBud29yZHMgPSBCSVRTX1RPX0xPTkdfTE9OR1MoYml0cyk7XFxuK1xcdHZvbGF0aWxlIHUzMiBpO1xcbitcXG4rXFx0Zm9yIChpID0gemVybzsgaSBcXHUwMDNjIG53b3JkcyBcXHUwMDI2XFx1MDAyNiBjYW5fbG9vcDsgaSsrKSB7XFxuK1xcdFxcdHU2NCBtYXNrID0gKGkgPT0gbndvcmRzIC0gMSkgPyBibXBfbGFzdF93b3JkX21hc2soYml0cykgOiB+MFVMTDtcXG4rXFxuK1xcdFxcdGlmICh+YmlnLVxcdTAwM2ViaXRzW2ldIFxcdTAwMjYgc21hbGwtXFx1MDAzZWJpdHNbaV0gXFx1MDAyNiBtYXNrKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbitfX3dlYWtcXG4rYm9vbCBibXBfaW50ZXJzZWN0cyhzaXplX3QgYml0cywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICphcmcxLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmFyZzIpXFxuK3tcXG4rXFx0c2l6ZV90IG53b3JkcyA9IEJJVFNfVE9fTE9OR19MT05HUyhiaXRzKTtcXG4rXFx0dm9sYXRpbGUgdTMyIGk7XFxuK1xcbitcXHRmb3IgKGkgPSB6ZXJvOyBpIFxcdTAwM2MgbndvcmRzIFxcdTAwMjZcXHUwMDI2IGNhbl9sb29wOyBpKyspIHtcXG4rXFx0XFx0dTY0IG1hc2sgPSAoaSA9PSBud29yZHMgLSAxKSA/IGJtcF9sYXN0X3dvcmRfbWFzayhiaXRzKSA6IH4wVUxMO1xcbitcXG4rXFx0XFx0aWYgKGFyZzEtXFx1MDAzZWJpdHNbaV0gXFx1MDAyNiBhcmcyLVxcdTAwM2ViaXRzW2ldIFxcdTAwMjYgbWFzaylcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rX193ZWFrXFxuK3ZvaWQgYm1wX3ByaW50KHNpemVfdCBiaXRzLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcClcXG4re1xcbitcXHRzaXplX3QgbndvcmRzID0gQklUU19UT19MT05HX0xPTkdTKGJpdHMpO1xcbitcXHR2b2xhdGlsZSB1MzIgaTtcXG4rXFxuK1xcdGZvciAoaSA9IHplcm87IGkgXFx1MDAzYyBud29yZHMgXFx1MDAyNlxcdTAwMjYgY2FuX2xvb3A7IGkrKylcXG4rXFx0XFx0YXJlbmFfc3RkZXJyKFxcXCIlMDE2bGx4IFxcXCIsIGJtcC1cXHUwMDNlYml0c1tpXSk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9jb21tb24uYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2NvbW1vbi5icGYuY1xcbmluZGV4IDUwYmU1NzIxM2RmYjhkLi41NjlmMGY2NGQ1MThiMyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2NvbW1vbi5icGYuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvY29tbW9uLmJwZi5jXFxuQEAgLTQsOSArNCw4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaWJhcmVuYS9hc2FuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaWJhcmVuYS9idWRkeS5oXFx1MDAzZVxcbiBcXG4tY29uc3Qgdm9sYXRpbGUgdTMyIHplcm8gPSAwO1xcbi1cXG4gc3RydWN0IGJ1ZGR5IF9fYXJlbmEgYnVkZHk7XFxuK3ZvbGF0aWxlIHUzMiB6ZXJvID0gMDtcXG4gXFxuIGludCBhcmVuYV9mbHMoX191NjQgd29yZClcXG4ge1xcbkBAIC0zOCw2ICszNywxMiBAQCBfX3dlYWsgaW50IGFyZW5hX2J1ZGR5X3Jlc2V0KHZvaWQpXFxuIFxcdHJldHVybiBidWRkeV9pbml0KFxcdTAwMjZidWRkeSk7XFxuIH1cXG4gXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK19fd2VhayBpbnQgYXJlbmFfYnVkZHlfZGVzdHJveSh2b2lkKVxcbit7XFxuK1xcdHJldHVybiBidWRkeV9kZXN0cm95KFxcdTAwMjZidWRkeSk7XFxuK31cXG4rXFxuIF9fd2VhayB2b2lkIF9fYXJlbmEgKmFyZW5hX21hbGxvYyhzaXplX3Qgc2l6ZSlcXG4ge1xcbiBcXHRyZXR1cm4gYnVkZHlfYWxsb2MoXFx1MDAyNmJ1ZGR5LCBzaXplKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hLmNcXG5pbmRleCA2MWVhNjhkY2U0MTA1Zi4uYmE1YTVhNTBmN2MwN2QgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmEuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hLmNcXG5AQCAtMTUsNyArMTUsMTIgQEAgc3RhdGljIHZvaWQgcnVuX2xpYmFyZW5hX3Rlc3Qoc3RydWN0IGxpYmFyZW5hICpza2VsLCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csXFxuIHtcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdGlmICghc3Ryc3RyKG5hbWUsIFxcXCJ0ZXN0X2J1ZGR5XFxcIikpIHtcXG4rXFx0aWYgKHN0cnN0cihuYW1lLCBcXFwidGVzdF9idWRkeVxcXCIpKSB7XFxuK1xcdFxcdC8qIEJ1ZGR5IHRlc3RzIGluaXRpYWxpemUgdGhlIGFsbG9jYXRvciBkaXJlY3RseS4gKi9cXG4rXFx0XFx0cmV0ID0gbGliYXJlbmFfcnVuX3Byb2coYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXFx1MDAzZXByb2dzLmFyZW5hX2J1ZGR5X2Rlc3Ryb3kpKTtcXG4rXFx0XFx0aWYgKCFBU1NFUlRfT0socmV0LCBcXFwiYXJlbmFfYnVkZHlfZGVzdHJveVxcXCIpKVxcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcdH0gZWxzZSB7XFxuIFxcdFxcdHJldCA9IGxpYmFyZW5hX3J1bl9wcm9nKGJwZl9wcm9ncmFtX19mZChza2VsLVxcdTAwM2Vwcm9ncy5hcmVuYV9idWRkeV9yZXNldCkpO1xcbiBcXHRcXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFxcXCJhcmVuYV9idWRkeV9yZXNldFxcXCIpKVxcbiBcXHRcXHRcXHRyZXR1cm47XFxuQEAgLTI0LDcgKzI5LDYgQEAgc3RhdGljIHZvaWQgcnVuX2xpYmFyZW5hX3Rlc3Qoc3RydWN0IGxpYmFyZW5hICpza2VsLCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csXFxuIFxcdHJldCA9IGxpYmFyZW5hX3J1bl9wcm9nKGJwZl9wcm9ncmFtX19mZChwcm9nKSk7XFxuIFxcbiBcXHRBU1NFUlRfT0socmV0LCBuYW1lKTtcXG4tXFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkICpydW5fbGliYXJlbmFfcGFyYWxsZWxfcHJvZyh2b2lkICphcmcpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uY1xcbmluZGV4IGQ1OWQ5ZGQxMmVmMmIyLi5mODk3NDA1ZjcwMWRkNSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmNcXG5AQCAtMTcsNyArMTcsMTIgQEAgc3RhdGljIHZvaWQgcnVuX2xpYmFyZW5hX2FzYW5fdGVzdChzdHJ1Y3QgbGliYXJlbmFfYXNhbiAqc2tlbCxcXG4ge1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0aWYgKCFzdHJzdHIobmFtZSwgXFxcInRlc3RfYnVkZHlcXFwiKSkge1xcbitcXHRpZiAoc3Ryc3RyKG5hbWUsIFxcXCJ0ZXN0X2J1ZGR5XFxcIikpIHtcXG4rXFx0XFx0LyogQnVkZHkgdGVzdHMgaW5pdGlhbGl6ZSB0aGUgYWxsb2NhdG9yIGRpcmVjdGx5LiAqL1xcbitcXHRcXHRyZXQgPSBsaWJhcmVuYV9ydW5fcHJvZyhicGZfcHJvZ3JhbV9fZmQoc2tlbC1cXHUwMDNlcHJvZ3MuYXJlbmFfYnVkZHlfZGVzdHJveSkpO1xcbitcXHRcXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFxcXCJhcmVuYV9idWRkeV9kZXN0cm95XFxcIikpXFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFx0fSBlbHNlIHtcXG4gXFx0XFx0cmV0ID0gbGliYXJlbmFfcnVuX3Byb2coYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXFx1MDAzZXByb2dzLmFyZW5hX2J1ZGR5X3Jlc2V0KSk7XFxuIFxcdFxcdGlmICghQVNTRVJUX09LKHJldCwgXFxcImFyZW5hX2J1ZGR5X3Jlc2V0XFxcIikpXFxuIFxcdFxcdFxcdHJldHVybjtcXG5AQCAtOTAsNCArOTUsMyBAQCB2b2lkIHRlc3RfbGliYXJlbmFfYXNhbih2b2lkKVxcbiBcXG4gXFx0cmV0dXJuO1xcbiB9XFxuLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwMjowMTozMS42NTQyNzMwNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODE0ODk1MTA5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIGFuZCBtb2RpZmllcyBCUEYgc2VsZnRlc3RzIGZvciBsaWJhcmVuYSB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmUgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGM0YzE0NDI5MmNlNWNlOGMwOTYzMDYwM2YzN2Q4NzhhZjUyN2ZkOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDcgMDI6MDE6MjggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9iaXRtYXAuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2JpdG1hcC5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmNmNmI2M2Y1ZDlhNDVmXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9iaXRtYXAuaFxuQEAgLTAsMCArMSwzNCBAQFxuKyNwcmFnbWEgb25jZVxuK1xuKyNkZWZpbmUgQklUU19QRVJfQllURVx0XHQ4XG4rI2RlZmluZSBCWVRFU19UT19CSVRTKG5iKVx0KChuYikgKiBCSVRTX1BFUl9CWVRFKVxuK1xuKyNkZWZpbmUgQklUU19QRVJfTE9OR19MT05HXHQoc2l6ZW9mKGxvbmcgbG9uZykgKiBCSVRTX1BFUl9CWVRFKVxuKyNkZWZpbmUgQklUU19UT19MT05HX0xPTkdTKG5yKVx0KCgobnIpICsgQklUU19QRVJfTE9OR19MT05HIC0gMSkgLyBCSVRTX1BFUl9MT05HX0xPTkcpXG4rI2RlZmluZSBCSVRfTUFTSyhucilcdFx0KDFVTEwgXHUwMDNjXHUwMDNjICgobnIpICUgQklUU19QRVJfTE9OR19MT05HKSlcbisjZGVmaW5lIEJJVF9XT1JEKG5yKVx0XHQoKG5yKSAvIEJJVFNfUEVSX0xPTkdfTE9ORylcbitcbitzdHJ1Y3QgYml0bWFwIHtcbitcdHU2NCBiaXRzWzBdO1xuK307XG4rXG4rc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXBfYWxsb2Moc2l6ZV90IGJpdHMpO1xuK3ZvaWQgYm1wX2ZyZWUoc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApO1xuK1xuK3ZvaWQgX19ibXBfc2V0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcCk7XG4rdm9pZCBfX2JtcF9jbGVhcl9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApO1xuK3ZvaWQgYm1wX3NldF9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApO1xuK3ZvaWQgYm1wX2NsZWFyX2JpdCh1MzIgYml0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcCk7XG4rYm9vbCBibXBfdGVzdF9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApO1xuK2Jvb2wgYm1wX3Rlc3RfYW5kX2NsZWFyX2JpdCh1MzIgYml0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcCk7XG4rYm9vbCBibXBfdGVzdF9hbmRfc2V0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcCk7XG4rXG4rdm9pZCBibXBfY2xlYXIoc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKTtcbit2b2lkIGJtcF9hbmQoc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqZHN0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKnNyYzEsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqc3JjMik7XG4rdm9pZCBibXBfb3Ioc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqZHN0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKnNyYzEsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqc3JjMik7XG4rYm9vbCBibXBfZW1wdHkoc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKTtcbit2b2lkIGJtcF9jb3B5KHNpemVfdCBiaXRzLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmRzdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpzcmMpO1xuK1xuK2Jvb2wgYm1wX2ludGVyc2VjdHMoc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYXJnMSwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICphcmcyKTtcbitib29sIGJtcF9zdWJzZXQoc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYmlnLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKnNtYWxsKTtcbit2b2lkIGJtcF9wcmludChzaXplX3QgYml0cywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2NvbW1vbi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvY29tbW9uLmhcbmluZGV4IGEzZWIxNjQxYWMzNmRmLi45MzFhY2U5YTQ5ZTJiZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2NvbW1vbi5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9jb21tb24uaFxuQEAgLTQzLDcgKzQzLDcgQEAgc3RydWN0IHtcbiAgKiBpbXByZWNpc2UuIFRvIGZvcmNlIHRoZSB2YXJpYWJsZSB0byBiZSBpbXByZWNpc2UsIGluaXRpYWxpemUgaXQgd2l0aFxuICAqIHRoZSBvcGFxdWUgdm9sYXRpbGUgdmFyaWFibGUgMCBpbnN0ZWFkIG9mIHRoZSBjb25zdGFudCAwLlxuICAqL1xuLWV4dGVybiBjb25zdCB2b2xhdGlsZSB1MzIgemVybztcbit2b2xhdGlsZSB1MzIgemVybyBfX3dlYWs7XG4gZXh0ZXJuIHZvbGF0aWxlIHU2NCBhc2FuX3Zpb2xhdGVkO1xuIFxuIGludCBhcmVuYV9mbHMoX191NjQgd29yZCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy9zdF9hc2FuX2J1ZGR5LmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2FzYW5fYnVkZHkuYnBmLmNcbnNpbWlsYXJpdHkgaW5kZXggOTglXG5yZW5hbWUgZnJvbSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3N0X2FzYW5fYnVkZHkuYnBmLmNcbnJlbmFtZSB0byB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYXNhbl9idWRkeS5icGYuY1xuaW5kZXggNjg2Y2FiYTJjNjQzYjUuLjMyNjZhMjhmNTNkNzY4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy9zdF9hc2FuX2J1ZGR5LmJwZi5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYXNhbl9idWRkeS5icGYuY1xuQEAgLTEyLDcgKzEyLDcgQEAgZXh0ZXJuIHN0cnVjdCBidWRkeSBfX2FyZW5hIGJ1ZGR5O1xuIFxuICNpZmRlZiBCUEZfQVJFTkFfQVNBTlxuIFxuLSNpbmNsdWRlIFwic3RfYXNhbl9jb21tb24uaFwiXG4rI2luY2x1ZGUgXCJ0ZXN0X2FzYW5fY29tbW9uLmhcIlxuIFxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGFzYW5fdGVzdF9idWRkeV9vb2Jfc2luZ2xlKHNpemVfdCBhbGxvY19zaXplKVxuIHtcbkBAIC0xNTQsNyArMTU0LDggQEAgX193ZWFrIGludCBhc2FuX3Rlc3RfYnVkZHlfb29iKHZvaWQpXG4gXHRzaXplX3Qgc2l6ZXNbXSA9IHtcbiBcdFx0NywgOCwgMTcsIDE4LCA2NCwgMjU2LCAzMTcsIDUxMiwgMTAyNCxcbiBcdH07XG4tXHRpbnQgcmV0LCBpO1xuK1x0aW50IHJldDtcbitcdHUzMiBpO1xuIFxuIFx0cmV0ID0gYnVkZHlfaW5pdChcdTAwMjZidWRkeSk7XG4gXHRpZiAocmV0KSB7XG5AQCAtMTYzLDYgKzE2NCw3IEBAIF9fd2VhayBpbnQgYXNhbl90ZXN0X2J1ZGR5X29vYih2b2lkKVxuIFx0fVxuIFxuIFx0Zm9yIChpID0gemVybzsgaSBcdTAwM2Mgc2l6ZW9mKHNpemVzKSAvIHNpemVvZihzaXplc1swXSkgXHUwMDI2XHUwMDI2IGNhbl9sb29wOyBpKyspIHtcbitcdFx0YmFycmllcl92YXIoaSk7XG4gXHRcdHJldCA9IGFzYW5fdGVzdF9idWRkeV9vb2Jfc2luZ2xlKHNpemVzW2ldKTtcbiBcdFx0aWYgKHJldCkge1xuIFx0XHRcdGFyZW5hX3N0ZG91dChcIiVzOiVkIEZhaWxlZCBmb3Igc2l6ZSAlbHVcIiwgX19mdW5jX18sXG5AQCAtMTkwLDcgKzE5Miw4IEBAIF9fc3RkZXJyKFwiQ2FsbCB0cmFjZTpcXG5cIlxuIF9fd2VhayBpbnQgYXNhbl90ZXN0X2J1ZGR5X3VhZih2b2lkKVxuIHtcbiBcdHNpemVfdCBzaXplc1tdID0geyAxNiwgMzIsIDY0LCAxMjgsIDI1NiwgNTEyLCAxMDI0LCAxNjM4NCB9O1xuLVx0aW50IHJldCwgaTtcbitcdGludCByZXQ7XG4rXHR1MzIgaTtcbiBcbiBcdHJldCA9IGJ1ZGR5X2luaXQoXHUwMDI2YnVkZHkpO1xuIFx0aWYgKHJldCkge1xuQEAgLTE5OSw2ICsyMDIsNyBAQCBfX3dlYWsgaW50IGFzYW5fdGVzdF9idWRkeV91YWYodm9pZClcbiBcdH1cbiBcbiBcdGZvciAoaSA9IHplcm87IGkgXHUwMDNjIHNpemVvZihzaXplcykgLyBzaXplb2Yoc2l6ZXNbMF0pIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSsrKSB7XG4rXHRcdGJhcnJpZXJfdmFyKGkpO1xuIFx0XHRyZXQgPSBhc2FuX3Rlc3RfYnVkZHlfdWFmX3NpbmdsZShzaXplc1tpXSk7XG4gXHRcdGlmIChyZXQpIHtcbiBcdFx0XHRhcmVuYV9zdGRvdXQoXCIlczolZCBGYWlsZWQgZm9yIHNpemUgJWx1XCIsIF9fZnVuY19fLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvc3RfYXNhbl9jb21tb24uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9hc2FuX2NvbW1vbi5oXG5zaW1pbGFyaXR5IGluZGV4IDEwMCVcbnJlbmFtZSBmcm9tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvc3RfYXNhbl9jb21tb24uaFxucmVuYW1lIHRvIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9hc2FuX2NvbW1vbi5oXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2JpdG1hcC5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9iaXRtYXAuYnBmLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZTdkMzJmNDRkNjg3MDlcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9iaXRtYXAuYnBmLmNcbkBAIC0wLDAgKzEsMzk0IEBAXG4rI2luY2x1ZGUgXHUwMDNjbGliYXJlbmEvY29tbW9uLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcdTAwM2NsaWJhcmVuYS9hc2FuLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaWJhcmVuYS9iaXRtYXAuaFx1MDAzZVxuK1xuKyNkZWZpbmUgVEVTVF9CSVRTXHQoMiAqIEJJVFNfUEVSX0xPTkdfTE9ORylcbisjZGVmaW5lIFRFU1RfV09SRFNcdEJJVFNfVE9fTE9OR19MT05HUyhURVNUX0JJVFMpXG4rI2RlZmluZSBNSURfQklUXHRcdChCSVRTX1BFUl9MT05HX0xPTkcgKyAxKVxuKyNkZWZpbmUgTEFTVF9CSVRcdChURVNUX0JJVFMgLSAxKVxuK1xuK3N0YXRpYyB2b2lkIHRlc3RfYm1wX3NldGFsbChzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcClcbit7XG4rXHR2b2xhdGlsZSB1MzIgaTtcbitcbitcdGZvciAoaSA9IHplcm87IGkgXHUwMDNjIFRFU1RfV09SRFMgXHUwMDI2XHUwMDI2IGNhbl9sb29wOyBpKyspXG4rXHRcdGJtcC1cdTAwM2ViaXRzW2ldID0gfjBVTEw7XG4rfVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitfX3dlYWsgaW50IHRlc3RfYml0bWFwX2FsbG9jX2ZyZWUodm9pZClcbit7XG4rXHRzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcDtcbitcbitcdGJtcCA9IGJtcF9hbGxvYyhURVNUX0JJVFMpO1xuK1x0aWYgKCFibXApXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0aWYgKCFibXBfZW1wdHkoVEVTVF9CSVRTLCBibXApKVxuK1x0XHRnb3RvIGVycjtcbitcbitcdF9fYm1wX3NldF9iaXQoTEFTVF9CSVQsIGJtcCk7XG4rXHRpZiAoIWJtcF90ZXN0X2JpdChMQVNUX0JJVCwgYm1wKSlcbitcdFx0Z290byBlcnI7XG4rXG4rXHRfX2JtcF9jbGVhcl9iaXQoTEFTVF9CSVQsIGJtcCk7XG4rXHRpZiAoYm1wX3Rlc3RfYml0KExBU1RfQklULCBibXApKVxuK1x0XHRnb3RvIGVycjtcbitcbitcdGJtcF9mcmVlKGJtcCk7XG4rXHRyZXR1cm4gMDtcbitcbitlcnI6XG4rXHRibXBfZnJlZShibXApO1xuK1x0cmV0dXJuIC1FSU5WQUw7XG4rfVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitfX3dlYWsgaW50IHRlc3RfYml0bWFwX2JpdF9vcHModm9pZClcbit7XG4rXHRzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcDtcbitcbitcdGJtcCA9IGJtcF9hbGxvYyhURVNUX0JJVFMpO1xuK1x0aWYgKCFibXApXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0X19ibXBfc2V0X2JpdCgwLCBibXApO1xuK1x0aWYgKCFibXBfdGVzdF9iaXQoMCwgYm1wKSlcbitcdFx0Z290byBlcnI7XG4rXG4rXHRfX2JtcF9zZXRfYml0KE1JRF9CSVQsIGJtcCk7XG4rXHRpZiAoIWJtcF90ZXN0X2JpdChNSURfQklULCBibXApKVxuK1x0XHRnb3RvIGVycjtcbitcbitcdF9fYm1wX3NldF9iaXQoTEFTVF9CSVQsIGJtcCk7XG4rXHRpZiAoIWJtcF90ZXN0X2JpdChMQVNUX0JJVCwgYm1wKSlcbitcdFx0Z290byBlcnI7XG4rXG4rXHRpZiAoYm1wX3Rlc3RfYml0KE1JRF9CSVQgLSAxLCBibXApKVxuK1x0XHRnb3RvIGVycjtcbitcbitcdF9fYm1wX2NsZWFyX2JpdChNSURfQklULCBibXApO1xuK1x0aWYgKGJtcF90ZXN0X2JpdChNSURfQklULCBibXApKVxuK1x0XHRnb3RvIGVycjtcbitcbitcdGlmICghYm1wX3Rlc3RfYml0KDAsIGJtcCkpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0aWYgKCFibXBfdGVzdF9iaXQoTEFTVF9CSVQsIGJtcCkpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0X19ibXBfY2xlYXJfYml0KDAsIGJtcCk7XG4rXHRfX2JtcF9jbGVhcl9iaXQoTEFTVF9CSVQsIGJtcCk7XG4rXHRpZiAoIWJtcF9lbXB0eShURVNUX0JJVFMsIGJtcCkpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0aWYgKGJtcC1cdTAwM2ViaXRzWzBdKVxuK1x0XHRnb3RvIGVycjtcbitcbitcdGlmIChibXAtXHUwMDNlYml0c1sxXSlcbitcdFx0Z290byBlcnI7XG4rXG4rXHRibXBfZnJlZShibXApO1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyOlxuK1x0Ym1wX2ZyZWUoYm1wKTtcbitcdHJldHVybiAtRUlOVkFMO1xuK31cbitcbitzdGF0aWMgYm9vbCB0ZXN0X2JpdG1hcF90ZXN0X2FuZF9jbGVhcl9zaW5nbGUoc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXAsIHNpemVfdCBpbmQpXG4re1xuK1x0aWYgKGJtcF90ZXN0X2FuZF9jbGVhcl9iaXQoaW5kLCBibXApKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRfX2JtcF9zZXRfYml0KGluZCwgYm1wKTtcbitcbitcdGlmICghYm1wX3Rlc3RfYW5kX2NsZWFyX2JpdChpbmQsIGJtcCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmIChibXBfdGVzdF9iaXQoaW5kLCBibXApKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoYm1wX3Rlc3RfYW5kX2NsZWFyX2JpdChpbmQsIGJtcCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbitzdGF0aWMgYm9vbCB0ZXN0X2JpdG1hcF90ZXN0X2FuZF9zZXRfc2luZ2xlKHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wLCBzaXplX3QgaW5kKVxuK3tcbitcdGlmIChibXBfdGVzdF9hbmRfc2V0X2JpdChpbmQsIGJtcCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmICghYm1wX3Rlc3RfYW5kX3NldF9iaXQoaW5kLCBibXApKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoIWJtcF90ZXN0X2JpdChpbmQsIGJtcCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdF9fYm1wX2NsZWFyX2JpdChpbmQsIGJtcCk7XG4rXG4rXHRpZiAoYm1wX3Rlc3RfYW5kX3NldF9iaXQoaW5kLCBibXApKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rU0VDKFwic3lzY2FsbFwiKVxuK19fd2VhayBpbnQgdGVzdF9iaXRtYXBfdGVzdF9hbmRfY2xlYXJfYml0KHZvaWQpXG4re1xuK1x0c3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXA7XG4rXG4rXHRibXAgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTtcbitcdGlmICghYm1wKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGlmICghdGVzdF9iaXRtYXBfdGVzdF9hbmRfY2xlYXJfc2luZ2xlKGJtcCwgMCkpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0aWYgKCF0ZXN0X2JpdG1hcF90ZXN0X2FuZF9jbGVhcl9zaW5nbGUoYm1wLCBNSURfQklUKSlcbitcdFx0Z290byBlcnI7XG4rXG4rXHRpZiAoIXRlc3RfYml0bWFwX3Rlc3RfYW5kX2NsZWFyX3NpbmdsZShibXAsIExBU1RfQklUKSlcbitcdFx0Z290byBlcnI7XG4rXG4rXHRpZiAoIWJtcF9lbXB0eShURVNUX0JJVFMsIGJtcCkpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0Ym1wX2ZyZWUoYm1wKTtcbitcdHJldHVybiAwO1xuK1xuK2VycjpcbitcdGJtcF9mcmVlKGJtcCk7XG4rXHRyZXR1cm4gLUVJTlZBTDtcbit9XG4rXG4rU0VDKFwic3lzY2FsbFwiKVxuK19fd2VhayBpbnQgdGVzdF9iaXRtYXBfdGVzdF9hbmRfc2V0X2JpdCh2b2lkKVxuK3tcbitcdHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wO1xuK1xuK1x0Ym1wID0gYm1wX2FsbG9jKFRFU1RfQklUUyk7XG4rXHRpZiAoIWJtcClcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRpZiAoIXRlc3RfYml0bWFwX3Rlc3RfYW5kX3NldF9zaW5nbGUoYm1wLCAwKSlcbitcdFx0Z290byBlcnI7XG4rXG4rXHRpZiAoIXRlc3RfYml0bWFwX3Rlc3RfYW5kX3NldF9zaW5nbGUoYm1wLCBNSURfQklUKSlcbitcdFx0Z290byBlcnI7XG4rXG4rXHRpZiAoIXRlc3RfYml0bWFwX3Rlc3RfYW5kX3NldF9zaW5nbGUoYm1wLCBMQVNUX0JJVCkpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0Ym1wX2ZyZWUoYm1wKTtcbitcdHJldHVybiAwO1xuK1xuK2VycjpcbitcdGJtcF9mcmVlKGJtcCk7XG4rXHRyZXR1cm4gLUVJTlZBTDtcbit9XG4rXG4rXG4rU0VDKFwic3lzY2FsbFwiKVxuK19fd2VhayBpbnQgdGVzdF9iaXRtYXBfYW5kKHZvaWQpXG4re1xuK1x0c3RydWN0IGJpdG1hcCBfX2FyZW5hICpzcmMxID0gTlVMTCwgKnNyYzIgPSBOVUxMLCAqZHN0ID0gTlVMTDtcbitcbitcdHNyYzEgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTtcbitcdHNyYzIgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTtcbitcdGRzdCA9IGJtcF9hbGxvYyhURVNUX0JJVFMpO1xuK1x0aWYgKCFzcmMxIHx8ICFzcmMyIHx8ICFkc3QpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0dGVzdF9ibXBfc2V0YWxsKGRzdCk7XG4rXG4rXHRfX2JtcF9zZXRfYml0KDAsIHNyYzEpO1xuK1x0X19ibXBfc2V0X2JpdChNSURfQklULCBzcmMxKTtcbitcdF9fYm1wX3NldF9iaXQoTEFTVF9CSVQsIHNyYzEpO1xuK1xuK1x0X19ibXBfc2V0X2JpdChNSURfQklULCBzcmMyKTtcbitcdF9fYm1wX3NldF9iaXQoTEFTVF9CSVQsIHNyYzIpO1xuK1xuK1x0Ym1wX2FuZChURVNUX0JJVFMsIGRzdCwgc3JjMSwgc3JjMik7XG4rXG4rXHRpZiAoYm1wX3Rlc3RfYml0KDAsIGRzdCkpXG4rXHRcdGdvdG8gZXJyO1xuK1x0aWYgKCFibXBfdGVzdF9iaXQoTUlEX0JJVCwgZHN0KSlcbitcdFx0Z290byBlcnI7XG4rXHRpZiAoIWJtcF90ZXN0X2JpdChMQVNUX0JJVCwgZHN0KSlcbitcdFx0Z290byBlcnI7XG4rXG4rXHRpZiAoZHN0LVx1MDAzZWJpdHNbMF0pXG4rXHRcdGdvdG8gZXJyO1xuK1x0aWYgKGRzdC1cdTAwM2ViaXRzWzFdICE9IChCSVRfTUFTSyhNSURfQklUKSB8IEJJVF9NQVNLKExBU1RfQklUKSkpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0Ym1wX2ZyZWUoc3JjMSk7XG4rXHRibXBfZnJlZShzcmMyKTtcbitcdGJtcF9mcmVlKGRzdCk7XG4rXHRyZXR1cm4gMDtcbitcbitlcnI6XG4rXHRibXBfZnJlZShzcmMxKTtcbitcdGJtcF9mcmVlKHNyYzIpO1xuK1x0Ym1wX2ZyZWUoZHN0KTtcbitcdHJldHVybiAtRUlOVkFMO1xuK31cbitcbitTRUMoXCJzeXNjYWxsXCIpXG4rX193ZWFrIGludCB0ZXN0X2JpdG1hcF9vcih2b2lkKVxuK3tcbitcdHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqc3JjMSA9IE5VTEwsICpzcmMyID0gTlVMTCwgKmRzdCA9IE5VTEw7XG4rXG4rXHRzcmMxID0gYm1wX2FsbG9jKFRFU1RfQklUUyk7XG4rXHRzcmMyID0gYm1wX2FsbG9jKFRFU1RfQklUUyk7XG4rXHRkc3QgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTtcbitcdGlmICghc3JjMSB8fCAhc3JjMiB8fCAhZHN0KVxuK1x0XHRnb3RvIGVycjtcbitcbitcdHRlc3RfYm1wX3NldGFsbChkc3QpO1xuK1xuK1x0X19ibXBfc2V0X2JpdCgwLCBzcmMxKTtcbitcdF9fYm1wX3NldF9iaXQoTEFTVF9CSVQsIHNyYzEpO1xuK1xuK1x0X19ibXBfc2V0X2JpdChNSURfQklULCBzcmMyKTtcbitcdF9fYm1wX3NldF9iaXQoTEFTVF9CSVQsIHNyYzIpO1xuK1xuK1x0Ym1wX29yKFRFU1RfQklUUywgZHN0LCBzcmMxLCBzcmMyKTtcbitcbitcdGlmICghYm1wX3Rlc3RfYml0KDAsIGRzdCkpXG4rXHRcdGdvdG8gZXJyO1xuK1x0aWYgKCFibXBfdGVzdF9iaXQoTUlEX0JJVCwgZHN0KSlcbitcdFx0Z290byBlcnI7XG4rXHRpZiAoIWJtcF90ZXN0X2JpdChMQVNUX0JJVCwgZHN0KSlcbitcdFx0Z290byBlcnI7XG4rXG4rXHRpZiAoZHN0LVx1MDAzZWJpdHNbMF0gIT0gQklUX01BU0soMCkpXG4rXHRcdGdvdG8gZXJyO1xuK1x0aWYgKGRzdC1cdTAwM2ViaXRzWzFdICE9IChCSVRfTUFTSyhNSURfQklUKSB8IEJJVF9NQVNLKExBU1RfQklUKSkpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0Ym1wX2ZyZWUoc3JjMSk7XG4rXHRibXBfZnJlZShzcmMyKTtcbitcdGJtcF9mcmVlKGRzdCk7XG4rXHRyZXR1cm4gMDtcbitcbitlcnI6XG4rXHRibXBfZnJlZShzcmMxKTtcbitcdGJtcF9mcmVlKHNyYzIpO1xuK1x0Ym1wX2ZyZWUoZHN0KTtcbitcdHJldHVybiAtRUlOVkFMO1xuK31cbitcbitTRUMoXCJzeXNjYWxsXCIpXG4rX193ZWFrIGludCB0ZXN0X2JpdG1hcF9zdWJzZXQodm9pZClcbit7XG4rXHRzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJpZyA9IE5VTEwsICpzbWFsbCA9IE5VTEw7XG4rXG4rXHRiaWcgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTtcbitcdHNtYWxsID0gYm1wX2FsbG9jKFRFU1RfQklUUyk7XG4rXHRpZiAoIWJpZyB8fCAhc21hbGwpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0aWYgKCFibXBfc3Vic2V0KFRFU1RfQklUUywgYmlnLCBzbWFsbCkpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0X19ibXBfc2V0X2JpdCgwLCBzbWFsbCk7XG4rXHRpZiAoYm1wX3N1YnNldChURVNUX0JJVFMsIGJpZywgc21hbGwpKVxuK1x0XHRnb3RvIGVycjtcbitcbitcdF9fYm1wX3NldF9iaXQoMCwgYmlnKTtcbitcdGlmICghYm1wX3N1YnNldChURVNUX0JJVFMsIGJpZywgc21hbGwpKVxuK1x0XHRnb3RvIGVycjtcbitcbitcdF9fYm1wX3NldF9iaXQoTEFTVF9CSVQsIHNtYWxsKTtcbitcdGlmIChibXBfc3Vic2V0KFRFU1RfQklUUywgYmlnLCBzbWFsbCkpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0X19ibXBfc2V0X2JpdChMQVNUX0JJVCwgYmlnKTtcbitcdF9fYm1wX3NldF9iaXQoTUlEX0JJVCwgYmlnKTtcbitcdGlmICghYm1wX3N1YnNldChURVNUX0JJVFMsIGJpZywgc21hbGwpKVxuK1x0XHRnb3RvIGVycjtcbitcbitcdGlmIChibXBfc3Vic2V0KFRFU1RfQklUUywgc21hbGwsIGJpZykpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0Ym1wX2ZyZWUoYmlnKTtcbitcdGJtcF9mcmVlKHNtYWxsKTtcbitcdHJldHVybiAwO1xuK1xuK2VycjpcbitcdGJtcF9mcmVlKGJpZyk7XG4rXHRibXBfZnJlZShzbWFsbCk7XG4rXHRyZXR1cm4gLUVJTlZBTDtcbitcbit9XG4rXG4rU0VDKFwic3lzY2FsbFwiKVxuK19fd2VhayBpbnQgdGVzdF9iaXRtYXBfaW50ZXJzZWN0cyh2b2lkKVxuK3tcbitcdHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYXJnMSA9IE5VTEwsICphcmcyID0gTlVMTDtcbitcbitcdGFyZzEgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTtcbitcdGFyZzIgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTtcbitcdGlmICghYXJnMSB8fCAhYXJnMilcbitcdFx0Z290byBlcnI7XG4rXG4rXHRpZiAoYm1wX2ludGVyc2VjdHMoVEVTVF9CSVRTLCBhcmcxLCBhcmcyKSlcbitcdFx0Z290byBlcnI7XG4rXG4rXHRfX2JtcF9zZXRfYml0KDAsIGFyZzEpO1xuK1x0X19ibXBfc2V0X2JpdChNSURfQklULCBhcmcyKTtcbitcdGlmIChibXBfaW50ZXJzZWN0cyhURVNUX0JJVFMsIGFyZzEsIGFyZzIpKVxuK1x0XHRnb3RvIGVycjtcbitcbitcdF9fYm1wX3NldF9iaXQoTEFTVF9CSVQsIGFyZzEpO1xuK1x0X19ibXBfc2V0X2JpdChMQVNUX0JJVCwgYXJnMik7XG4rXHRpZiAoIWJtcF9pbnRlcnNlY3RzKFRFU1RfQklUUywgYXJnMSwgYXJnMikpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0Ym1wX2ZyZWUoYXJnMSk7XG4rXHRibXBfZnJlZShhcmcyKTtcbitcdHJldHVybiAwO1xuK1xuK2VycjpcbitcdGJtcF9mcmVlKGFyZzEpO1xuK1x0Ym1wX2ZyZWUoYXJnMik7XG4rXHRyZXR1cm4gLUVJTlZBTDtcbit9XG4rXG4rU0VDKFwic3lzY2FsbFwiKVxuK19fd2VhayBpbnQgdGVzdF9iaXRtYXBfY29weSh2b2lkKVxuK3tcbitcdHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYXJnMSA9IE5VTEwsICphcmcyID0gTlVMTDtcbitcbitcdGFyZzEgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTtcbitcdGFyZzIgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTtcbitcdGlmICghYXJnMSB8fCAhYXJnMilcbitcdFx0Z290byBlcnI7XG4rXG4rXHRfX2JtcF9zZXRfYml0KDAsIGFyZzEpO1xuK1x0X19ibXBfc2V0X2JpdChNSURfQklULCBhcmcxKTtcbitcbitcdC8qIE1ha2Ugc3VyZSB0aG9zZSBnZXQgb3ZlcndyaXR0ZW4uICovXG4rXHRfX2JtcF9zZXRfYml0KDEsIGFyZzIpO1xuK1x0X19ibXBfc2V0X2JpdChNSURfQklUICsgMiwgYXJnMik7XG4rXG4rXHRibXBfY29weShURVNUX0JJVFMsIGFyZzIsIGFyZzEpO1xuK1xuK1x0LyogQml0bWFwcyBhcmUgZXF1YWwgaWYgYSBzdWJzZXQgb2YgZWFjaCBvdGhlci4gKi9cbitcdGlmICghYm1wX3N1YnNldChURVNUX0JJVFMsIGFyZzEsIGFyZzIpIHx8XG4rXHQgICAgIWJtcF9zdWJzZXQoVEVTVF9CSVRTLCBhcmcyLCBhcmcxKSlcbitcdFx0Z290byBlcnI7XG4rXG4rXHRibXBfZnJlZShhcmcxKTtcbitcdGJtcF9mcmVlKGFyZzIpO1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyOlxuK1x0Ym1wX2ZyZWUoYXJnMSk7XG4rXHRibXBfZnJlZShhcmcyKTtcbitcdHJldHVybiAtRUlOVkFMO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3N0X2J1ZGR5LmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2J1ZGR5LmJwZi5jXG5zaW1pbGFyaXR5IGluZGV4IDk3JVxucmVuYW1lIGZyb20gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy9zdF9idWRkeS5icGYuY1xucmVuYW1lIHRvIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9idWRkeS5icGYuY1xuaW5kZXggYjQ1YTMwNjgxNmMwZTQuLjU2MjhmMDk4NzAxMjFjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy9zdF9idWRkeS5icGYuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2J1ZGR5LmJwZi5jXG5AQCAtMTcxLDcgKzE3MSw4IEBAIF9fd2VhayBpbnQgdGVzdF9idWRkeV9hbGxvY19tdWx0aXBsZSh2b2lkKVxuIFNFQyhcInN5c2NhbGxcIilcbiBfX3dlYWsgaW50IHRlc3RfYnVkZHlfYWxpZ25tZW50KHZvaWQpXG4ge1xuLVx0aW50IHJldCwgaTtcbitcdGludCByZXQ7XG4rXHR1MzIgaTtcbiBcbiBcdHJldCA9IGJ1ZGR5X2luaXQoXHUwMDI2YnVkZHkpO1xuIFx0aWYgKHJldClcbkBAIC0xNzksNiArMTgwLDcgQEAgX193ZWFrIGludCB0ZXN0X2J1ZGR5X2FsaWdubWVudCh2b2lkKVxuIFxuIFx0LyogQWxsb2NhdGUgdmFyaW91cyBzaXplcyBhbmQgY2hlY2sgYWxpZ25tZW50ICovXG4gXHRmb3IgKGkgPSB6ZXJvOyBpIFx1MDAzYyAxNyBcdTAwMjZcdTAwMjYgY2FuX2xvb3A7IGkrKykge1xuK1x0XHRiYXJyaWVyX3ZhcihpKTtcbiBcdFx0cHRyc1tpXSA9IGJ1ZGR5X2FsbG9jKFx1MDAyNmJ1ZGR5LCBhbGlnbm1lbnRfc2l6ZXNbaV0pO1xuIFx0XHRpZiAoIXB0cnNbaV0pIHtcbiBcdFx0XHRhcmVuYV9zdGRvdXQoXCJhbGlnbm1lbnQgdGVzdDogYWxsb2MgZmFpbGVkIGZvciBzaXplICVsdVwiLFxuQEAgLTE5OCw4ICsyMDAsMTAgQEAgX193ZWFrIGludCB0ZXN0X2J1ZGR5X2FsaWdubWVudCh2b2lkKVxuIFx0fVxuIFxuIFx0LyogRnJlZSBhbGwgYWxsb2NhdGlvbnMgKi9cbi1cdGZvciAoaSA9IHplcm87IGkgXHUwMDNjIDE3IFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSsrKVxuK1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgMTcgXHUwMDI2XHUwMDI2IGNhbl9sb29wOyBpKyspIHtcbitcdFx0YmFycmllcl92YXIoaSk7XG4gXHRcdGJ1ZGR5X2ZyZWUoXHUwMDI2YnVkZHksIHB0cnNbaV0pO1xuK1x0fVxuIFxuIFx0YnVkZHlfZGVzdHJveShcdTAwMjZidWRkeSk7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X3BhcmFsbGVsX2JpdG1hcC5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9wYXJhbGxlbF9iaXRtYXAuYnBmLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZWVjMjg3MWUyYjBkMTBcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9wYXJhbGxlbF9iaXRtYXAuYnBmLmNcbkBAIC0wLDAgKzEsMTkwIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IExHUEwtMi4xIE9SIEJTRC0yLUNsYXVzZVxuK1xuKyNpbmNsdWRlIFx1MDAzY2JwZl9hdG9taWMuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpYmFyZW5hL2NvbW1vbi5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGliYXJlbmEvYXNhbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGliYXJlbmEvYml0bWFwLmhcdTAwM2VcbitcbisjZGVmaW5lIFRFU1RfQklUTUFQX1RIUkVBRFNcdDJcbisjZGVmaW5lIFRFU1RfQklUTUFQX0JJVFNcdCgyICogQklUU19QRVJfTE9OR19MT05HKVxuKyNkZWZpbmUgVEVTVF9CSVRNQVBfU1lOQ19TUElOU1x0QlBGX01BWF9MT09QU1xuKyNkZWZpbmUgVEVTVF9CSVRNQVBfSVRFUlNcdDEwICogMTAwMCAqIDEwMDBcbitcbitzdGF0aWMgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpiaXRtYXA7XG4rc3RhdGljIHZvbGF0aWxlIHU2NCBzdGFydGVkO1xuK3N0YXRpYyB2b2xhdGlsZSBib29sIHRlc3RfYWJvcnQ7XG4rXG4rLypcbisgKiBUaGUgdGVzdCBuZWVkcyBjbXB4Y2hnIGF0b21pY3Mgb24gYXJlbmEgbWVtb3J5LlxuKyAqL1xuKyNpZiBkZWZpbmVkKEVOQUJMRV9BVE9NSUNTX1RFU1RTKSBcdTAwMjZcdTAwMjZcdFx0XHRcdCAgXFxcbitcdChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfYXJtNjQpIHx8IGRlZmluZWQoX19UQVJHRVRfQVJDSF94ODYpIHx8IFxcXG4rXHQgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3MzOTApIHx8IFxcXG4rXHQgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3Bvd2VycGMpIHx8XHRcdFx0XHQgIFxcXG4rXHQgKGRlZmluZWQoX19UQVJHRVRfQVJDSF9yaXNjdikgXHUwMDI2XHUwMDI2IF9fcmlzY3ZfeGxlbiA9PSA2NCkpXG4rc3RhdGljIGJvb2wgYml0bWFwX3Rlc3RzX2VuYWJsZWQodm9pZClcbit7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rI2Vsc2VcbitzdGF0aWMgYm9vbCBiaXRtYXBfdGVzdHNfZW5hYmxlZCh2b2lkKVxuK3tcbitcdHJldHVybiBmYWxzZTtcbit9XG4rI2VuZGlmXG4rXG4rX193ZWFrXG4raW50IGJpdG1hcF93YWl0X2Zvcl9zdGFydCh2b2lkKVxuK3tcbitcdHU2NCBpO1xuK1xuK1x0X19zeW5jX2ZldGNoX2FuZF9hZGQoXHUwMDI2c3RhcnRlZCwgMSk7XG4rXG4rXHRmb3IgKGkgPSB6ZXJvOyBpIFx1MDAzYyBURVNUX0JJVE1BUF9TWU5DX1NQSU5TIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSsrKSB7XG4rXHRcdGlmICh0ZXN0X2Fib3J0KVxuK1x0XHRcdHJldHVybiAtRUlOVFI7XG4rXHRcdGlmIChzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnN0YXJ0ZWQpIFx1MDAzZT0gVEVTVF9CSVRNQVBfVEhSRUFEUylcbitcdFx0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdHRlc3RfYWJvcnQgPSB0cnVlO1xuK1x0cmV0dXJuIC1FVElNRURPVVQ7XG4rfVxuK1xuKy8qXG4rICogVGhlIHRlc3QgbWFrZXMgc3VyZSB3cml0ZXMgZG9uJ3QgY2xvYmJlciBlYWNoIG90aGVyIGJ5IG92ZXJ3cml0aW5nXG4rICogdGhlIHNhbWUgd29yZC4gT25lIHRocmVhZCBhbHdheXMgd3JpdGVzIG9uIGV2ZW4gYml0cywgdGhlIG90aGVyIG9uXG4rICogb2Rkcy4gQm90aCBzaG91bGQgYmUgYWJsZSB0byBvcGVyYXRlIG9uIHRoZSBiaXRtYXAgb2JsaXZpb3VzIG9mIHRoZVxuKyAqIG90aGVyJ3Mgb3BlcmF0aW9ucy5cbisgKi9cbitfX3dlYWtcbitpbnQgYml0bWFwX3Rlc3RfYml0X3NlcXVlbmNlKHUzMiBiaXQpXG4re1xuK1x0aWYgKGJtcF90ZXN0X2FuZF9jbGVhcl9iaXQoYml0LCBiaXRtYXApKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChibXBfdGVzdF9hbmRfc2V0X2JpdChiaXQsIGJpdG1hcCkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKCFibXBfdGVzdF9iaXQoYml0LCBiaXRtYXApKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmICghYm1wX3Rlc3RfYW5kX3NldF9iaXQoYml0LCBiaXRtYXApKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGlmICghYm1wX3Rlc3RfYml0KGJpdCwgYml0bWFwKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAoIWJtcF90ZXN0X2FuZF9jbGVhcl9iaXQoYml0LCBiaXRtYXApKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGlmIChibXBfdGVzdF9iaXQoYml0LCBiaXRtYXApKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChibXBfdGVzdF9hbmRfY2xlYXJfYml0KGJpdCwgYml0bWFwKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRibXBfc2V0X2JpdChiaXQsIGJpdG1hcCk7XG4rXHRpZiAoIWJtcF90ZXN0X2JpdChiaXQsIGJpdG1hcCkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0Ym1wX2NsZWFyX2JpdChiaXQsIGJpdG1hcCk7XG4rXHRpZiAoYm1wX3Rlc3RfYml0KGJpdCwgYml0bWFwKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRibXBfc2V0X2JpdChiaXQsIGJpdG1hcCk7XG4rXHRpZiAoIWJtcF90ZXN0X2JpdChiaXQsIGJpdG1hcCkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmV0dXJuIDA7XG4rXG4rfVxuK1xuK3N0YXRpYyB2b2lkIGJpdG1hcF90ZXN0X3Jlc2V0X3NpbmdsZShpbnQgcGFyaXR5KVxuK3tcbitcdHUzMiBiaXQ7XG4rXG4rXHRmb3IgKGJpdCA9IHBhcml0eTsgYml0IFx1MDAzYyBURVNUX0JJVE1BUF9CSVRTIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgYml0ICs9IDIpXG4rXHRcdGJtcF9jbGVhcl9iaXQoYml0LCBiaXRtYXApO1xuK1xuK31cbitcbitzdGF0aWMgaW50IGJpdG1hcF90ZXN0X2NvbW1vbl9zaW5nbGUoaW50IHBhcml0eSlcbit7XG4rXHR1MzIgYml0O1xuK1x0aW50IHJldDtcbitcbitcdGZvciAoYml0ID0gcGFyaXR5OyBiaXQgXHUwMDNjIFRFU1RfQklUTUFQX0JJVFMgXHUwMDI2XHUwMDI2IGNhbl9sb29wOyBiaXQgKz0gMikge1xuK1x0XHRpZiAodGVzdF9hYm9ydClcbitcdFx0XHRyZXR1cm4gLUVJTlRSO1xuK1xuK1x0XHRyZXQgPSBiaXRtYXBfdGVzdF9iaXRfc2VxdWVuY2UoYml0KTtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdHRlc3RfYWJvcnQgPSB0cnVlO1xuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGJpdG1hcF90ZXN0X2NvbW1vbihpbnQgcGFyaXR5KVxuK3tcbitcdGludCByZXQ7XG4rXHR1MzIgaTtcbitcbitcdGFyZW5hX3N1YnByb2dfaW5pdCgpO1xuK1xuK1x0cmV0ID0gYml0bWFwX3dhaXRfZm9yX3N0YXJ0KCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgVEVTVF9CSVRNQVBfSVRFUlMgXHUwMDI2XHUwMDI2IGNhbl9sb29wOyBpKyspIHtcbitcdFx0cmV0ID0gYml0bWFwX3Rlc3RfY29tbW9uX3NpbmdsZShwYXJpdHkpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdGlmICh0ZXN0X2Fib3J0KVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRiaXRtYXBfdGVzdF9yZXNldF9zaW5nbGUocGFyaXR5KTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJzeXNjYWxsXCIpIGludCBwYXJhbGxlbF90ZXN0X2JpdG1hcF9fZW5hYmxlZCh2b2lkKVxuK3tcbitcdHJldHVybiBiaXRtYXBfdGVzdHNfZW5hYmxlZCgpID8gMCA6IC1FT1BOT1RTVVBQO1xuK31cbitcbitTRUMoXCJzeXNjYWxsXCIpIGludCBwYXJhbGxlbF90ZXN0X2JpdG1hcF9faW5pdCh2b2lkKVxuK3tcbitcdGJpdG1hcCA9IGJtcF9hbGxvYyhURVNUX0JJVE1BUF9CSVRTKTtcbitcdGlmICghYml0bWFwKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJzeXNjYWxsXCIpIGludCBwYXJhbGxlbF90ZXN0X2JpdG1hcF9fZmluaSh2b2lkKVxuK3tcbitcdGludCByZXQgPSAwO1xuK1xuK1x0aWYgKCFiaXRtYXApXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0Ym1wX2ZyZWUoYml0bWFwKTtcbitcdGJpdG1hcCA9IE5VTEw7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitTRUMoXCJzeXNjYWxsXCIpIGludCBwYXJhbGxlbF90ZXN0X2JpdG1hcF9fMCh2b2lkKVxuK3tcbitcdHJldHVybiBiaXRtYXBfdGVzdF9jb21tb24oMCk7XG4rfVxuK1xuK1NFQyhcInN5c2NhbGxcIikgaW50IHBhcmFsbGVsX3Rlc3RfYml0bWFwX18xKHZvaWQpXG4re1xuK1x0cmV0dXJuIGJpdG1hcF90ZXN0X2NvbW1vbigxKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X3BhcmFsbGVsX3NwbWMuYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfcGFyYWxsZWxfc3BtYy5icGYuY1xuaW5kZXggZjA4ZjJhOTJlMTk0NjguLjVmYTk2ZWI3NDA5NTFjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X3BhcmFsbGVsX3NwbWMuYnBmLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9wYXJhbGxlbF9zcG1jLmJwZi5jXG5AQCAtMTU1LDcgKzE1NSw3IEBAIGludCBzcG1jX3F1aWVzY2Vfb25fb3duZXIodTY0IGVwb2NoKVxuIHtcbiBcdHU2NCBpO1xuIFxuLVx0YnBmX2ZvcihpLCAwLCBURVNUX1NQTUNfU1lOQ19TUElOUykge1xuK1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgVEVTVF9TUE1DX1NZTkNfU1BJTlMgXHUwMDI2XHUwMDI2IGNhbl9sb29wOyBpKyspIHtcbiBcdFx0aWYgKHRlc3RfYWJvcnQpXG4gXHRcdFx0cmV0dXJuIC1FSU5UUjtcbiBcdFx0aWYgKHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2b3duZXJfZXBvY2gpIFx1MDAzZT0gZXBvY2gpXG5AQCAtMTc1LDggKzE3NSw3IEBAIGludCBzcG1jX3F1aWVzY2Vfb25fc3RlYWxlcih1NjQgZXBvY2gpXG4gXHRpbnQgZXJyID0gLUVUSU1FRE9VVDtcbiBcbiBcdHRhcmdldCA9IFNURUFMRVJfRVBPQ0goZXBvY2gpO1xuLVx0YnBmX2ZvcihpLCAwLCBURVNUX1NQTUNfU1lOQ19TUElOUykge1xuLVxuK1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgVEVTVF9TUE1DX1NZTkNfU1BJTlMgXHUwMDI2XHUwMDI2IGNhbl9sb29wOyBpKyspIHtcbiBcdFx0aWYgKHRlc3RfYWJvcnQpIHtcbiBcdFx0XHRlcnIgPSAtRUlOVFI7XG4gXHRcdFx0YnJlYWs7XG5AQCAtMzkxLDcgKzM5MCw3IEBAIGludCBzcG1jX3dhaXRfZm9yX3N0ZWFsZXJzX3RvX3N0YXJ0KHU2NCB0YXJnZXQpXG4ge1xuIFx0dTY0IGk7XG4gXG4tXHRicGZfZm9yKGksIDAsIFRFU1RfU1BNQ19TWU5DX1NQSU5TKSB7XG4rXHRmb3IgKGkgPSB6ZXJvOyBpIFx1MDAzYyBURVNUX1NQTUNfU1lOQ19TUElOUyBcdTAwMjZcdTAwMjYgY2FuX2xvb3A7IGkrKykge1xuIFx0XHRpZiAodGVzdF9hYm9ydClcbiBcdFx0XHRyZXR1cm4gLUVJTlRSO1xuIFx0XHRpZiAoUkVBRF9PTkNFKHN0ZWFsZXJzX3N0YXJ0ZWQpIFx1MDAzZT0gdGFyZ2V0KVxuQEAgLTUzNyw3ICs1MzYsNyBAQCBzdGF0aWMgaW50IHNwbWNfd2FpdF9mb3Jfcm91bmRfc3RlYWxzKHU2NCB0YXJnZXQpXG4gXG4gXHRhcmVuYV9zdWJwcm9nX2luaXQoKTtcbiBcbi1cdGJwZl9mb3IoaSwgMCwgVEVTVF9TUE1DX1NZTkNfU1BJTlMpIHtcbitcdGZvciAoaSA9IHplcm87IGkgXHUwMDNjIFRFU1RfU1BNQ19TWU5DX1NQSU5TIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSsrKSB7XG4gXHRcdGlmICh0ZXN0X2Fib3J0KVxuIFx0XHRcdHJldHVybiAtRUlOVFI7XG4gXHRcdGlmIChyb3VuZF9zdGVhbHMgXHUwMDNlPSB0YXJnZXQpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9iaXRtYXAuYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2JpdG1hcC5icGYuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi44MGU4MTQ0MDFmYjllYVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9iaXRtYXAuYnBmLmNcbkBAIC0wLDAgKzEsMjQ1IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IExHUEwtMi4xIE9SIEJTRC0yLUNsYXVzZVxuKy8qXG4rICogQ29weXJpZ2h0IChjKSAyMDI1LTIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4rICogQ29weXJpZ2h0IChjKSAyMDI1LTIwMjYgRW1pbCBUc2FsYXBhdGlzIFx1MDAzY2VtaWxAZXRzYWxhcGF0aXMuY29tXHUwMDNlXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGliYXJlbmEvY29tbW9uLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcdTAwM2NsaWJhcmVuYS9hc2FuLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaWJhcmVuYS9iaXRtYXAuaFx1MDAzZVxuK1xuK19fd2Vha1xuK3N0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wX2FsbG9jKHNpemVfdCBiaXRzKVxuK3tcbitcdHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wO1xuK1x0c2l6ZV90IHNpemUgPSBCSVRTX1RPX0xPTkdfTE9OR1MoYml0cykgKiBzaXplb2YoYm1wLVx1MDAzZWJpdHNbMF0pO1xuK1xuK1x0LyogQXNzdW1lIGxvbmctYWxpZ25lZCBtYXNrcy4gKi9cbitcdGlmIChiaXRzICUgQklUU19QRVJfTE9OR19MT05HKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdGJtcCA9IChzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKilhcmVuYV9tYWxsb2Moc2l6ZSk7XG4rXHRpZiAoIWJtcClcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRibXBfY2xlYXIoYml0cywgYm1wKTtcbitcbitcdHJldHVybiBibXA7XG4rfVxuK1xuK19fd2Vha1xuK3ZvaWQgYm1wX2ZyZWUoc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApXG4re1xuK1x0YXJlbmFfZnJlZShibXApO1xuK31cbitcbitfX3dlYWtcbit2b2lkIF9fYm1wX3NldF9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApXG4re1xuK1x0Ym1wLVx1MDAzZWJpdHNbQklUX1dPUkQoYml0KV0gfD0gQklUX01BU0soYml0KTtcbit9XG4rXG4rX193ZWFrXG4rdm9pZCBfX2JtcF9jbGVhcl9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApXG4re1xuK1x0Ym1wLVx1MDAzZWJpdHNbQklUX1dPUkQoYml0KV0gXHUwMDI2PSB+QklUX01BU0soYml0KTtcbit9XG4rXG4rX193ZWFrXG4rYm9vbCBibXBfdGVzdF9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApXG4re1xuK1x0cmV0dXJuIGJtcC1cdTAwM2ViaXRzW0JJVF9XT1JEKGJpdCldIFx1MDAyNiBCSVRfTUFTSyhiaXQpO1xuK31cbitcbitfX3dlYWtcbitib29sIGJtcF90ZXN0X2FuZF9jbGVhcl9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApXG4re1xuK1x0dTY0IHZhbCA9IEJJVF9NQVNLKGJpdCk7XG4rXHR1MzIgaWR4ID0gQklUX1dPUkQoYml0KTtcbitcdHU2NCBvbGQsIG5ldywgYWN0dWFsO1xuK1xuK1x0ZG8ge1xuK1x0XHRvbGQgPSBibXAtXHUwMDNlYml0c1tpZHhdO1xuK1xuK1x0XHRpZiAoIShvbGQgXHUwMDI2IHZhbCkpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0XHRuZXcgPSBvbGQgXHUwMDI2IH52YWw7XG4rXHRcdGFjdHVhbCA9IGNtcHhjaGcoXHUwMDI2Ym1wLVx1MDAzZWJpdHNbaWR4XSwgb2xkLCBuZXcpO1xuK1xuK1x0XHRpZiAoYWN0dWFsID09IG9sZClcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdH0gd2hpbGUgKGNhbl9sb29wKTtcbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rX193ZWFrXG4rYm9vbCBibXBfdGVzdF9hbmRfc2V0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcClcbit7XG4rXHR1NjQgdmFsID0gQklUX01BU0soYml0KTtcbitcdHUzMiBpZHggPSBCSVRfV09SRChiaXQpO1xuK1x0dTY0IG9sZCwgbmV3LCBhY3R1YWw7XG4rXG4rXHRkbyB7XG4rXHRcdG9sZCA9IGJtcC1cdTAwM2ViaXRzW2lkeF07XG4rXG4rXHRcdGlmICgob2xkIFx1MDAyNiB2YWwpKVxuK1x0XHRcdHJldHVybiB0cnVlO1xuK1xuK1x0XHRuZXcgPSBvbGQgfCB2YWw7XG4rXHRcdGFjdHVhbCA9IGNtcHhjaGcoXHUwMDI2Ym1wLVx1MDAzZWJpdHNbaWR4XSwgb2xkLCBuZXcpO1xuK1xuK1x0XHRpZiAoYWN0dWFsID09IG9sZClcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHR9IHdoaWxlIChjYW5fbG9vcCk7XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK19fd2Vha1xuK3ZvaWQgYm1wX2NsZWFyX2JpdCh1MzIgYml0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcClcbit7XG4rXHR1NjQgdmFsID0gQklUX01BU0soYml0KTtcbitcdHUzMiBpZHggPSBCSVRfV09SRChiaXQpO1xuK1x0dTY0IG9sZCwgbmV3LCBhY3R1YWw7XG4rXG4rXHRkbyB7XG4rXHRcdG9sZCA9IGJtcC1cdTAwM2ViaXRzW2lkeF07XG4rXHRcdG5ldyA9IG9sZCBcdTAwMjYgfnZhbDtcbitcdFx0YWN0dWFsID0gY21weGNoZyhcdTAwMjZibXAtXHUwMDNlYml0c1tpZHhdLCBvbGQsIG5ldyk7XG4rXG4rXHR9IHdoaWxlIChhY3R1YWwgIT0gb2xkIFx1MDAyNlx1MDAyNiBjYW5fbG9vcCk7XG4rfVxuK1xuK19fd2Vha1xuK3ZvaWQgYm1wX3NldF9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApXG4re1xuK1x0dTY0IHZhbCA9IEJJVF9NQVNLKGJpdCk7XG4rXHR1MzIgaWR4ID0gQklUX1dPUkQoYml0KTtcbitcdHU2NCBvbGQsIG5ldywgYWN0dWFsO1xuK1xuK1x0ZG8ge1xuK1x0XHRvbGQgPSBibXAtXHUwMDNlYml0c1tpZHhdO1xuK1x0XHRuZXcgPSBvbGQgfCB2YWw7XG4rXHRcdGFjdHVhbCA9IGNtcHhjaGcoXHUwMDI2Ym1wLVx1MDAzZWJpdHNbaWR4XSwgb2xkLCBuZXcpO1xuK1xuK1x0fSB3aGlsZSAoYWN0dWFsICE9IG9sZCBcdTAwMjZcdTAwMjYgY2FuX2xvb3ApO1xuK31cbitcbitfX3dlYWtcbit2b2lkIGJtcF9jbGVhcihzaXplX3QgYml0cywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApXG4re1xuK1x0c2l6ZV90IG53b3JkcyA9IEJJVFNfVE9fTE9OR19MT05HUyhiaXRzKTtcbitcdHZvbGF0aWxlIHUzMiBpO1xuK1xuK1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgbndvcmRzIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSsrKVxuK1x0XHRibXAtXHUwMDNlYml0c1tpXSA9IDA7XG4rfVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTY0IGJtcF9sYXN0X3dvcmRfbWFzayhzaXplX3QgYml0cylcbit7XG4rXHR1MzIgcmVtID0gYml0cyAlIEJJVFNfUEVSX0xPTkdfTE9ORztcbitcbitcdHJldHVybiByZW0gPyAoMVVMTCBcdTAwM2NcdTAwM2MgcmVtKSAtIDEgOiB+MFVMTDtcbit9XG4rXG4rX193ZWFrXG4rdm9pZCBibXBfYW5kKHNpemVfdCBiaXRzLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmRzdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpzcmMxLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKnNyYzIpXG4re1xuK1x0c2l6ZV90IG53b3JkcyA9IEJJVFNfVE9fTE9OR19MT05HUyhiaXRzKTtcbitcdHZvbGF0aWxlIHUzMiBpO1xuK1xuK1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgbndvcmRzIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSsrKVxuK1x0XHRkc3QtXHUwMDNlYml0c1tpXSA9IHNyYzEtXHUwMDNlYml0c1tpXSBcdTAwMjYgc3JjMi1cdTAwM2ViaXRzW2ldO1xuK1xuK1x0aWYgKG53b3JkcyBcdTAwMjZcdTAwMjYgYml0cyAlIEJJVFNfUEVSX0xPTkdfTE9ORylcbitcdFx0ZHN0LVx1MDAzZWJpdHNbbndvcmRzIC0gMV0gXHUwMDI2PSBibXBfbGFzdF93b3JkX21hc2soYml0cyk7XG4rfVxuK1xuK19fd2Vha1xuK3ZvaWQgYm1wX29yKHNpemVfdCBiaXRzLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmRzdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpzcmMxLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKnNyYzIpXG4re1xuK1x0c2l6ZV90IG53b3JkcyA9IEJJVFNfVE9fTE9OR19MT05HUyhiaXRzKTtcbitcdHZvbGF0aWxlIHUzMiBpO1xuK1xuK1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgbndvcmRzIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSsrKVxuK1x0XHRkc3QtXHUwMDNlYml0c1tpXSA9IHNyYzEtXHUwMDNlYml0c1tpXSB8IHNyYzItXHUwMDNlYml0c1tpXTtcbitcbitcdGlmIChud29yZHMgXHUwMDI2XHUwMDI2IGJpdHMgJSBCSVRTX1BFUl9MT05HX0xPTkcpXG4rXHRcdGRzdC1cdTAwM2ViaXRzW253b3JkcyAtIDFdIFx1MDAyNj0gYm1wX2xhc3Rfd29yZF9tYXNrKGJpdHMpO1xuK31cbitcbitfX3dlYWtcbitib29sIGJtcF9lbXB0eShzaXplX3QgYml0cywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApXG4re1xuK1x0c2l6ZV90IG53b3JkcyA9IEJJVFNfVE9fTE9OR19MT05HUyhiaXRzKTtcbitcdHZvbGF0aWxlIHUzMiBpO1xuK1xuK1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgbndvcmRzIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSsrKSB7XG4rXHRcdHU2NCBtYXNrID0gKGkgPT0gbndvcmRzIC0gMSkgPyBibXBfbGFzdF93b3JkX21hc2soYml0cykgOiB+MFVMTDtcbitcbitcdFx0aWYgKGJtcC1cdTAwM2ViaXRzW2ldIFx1MDAyNiBtYXNrKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbitfX3dlYWtcbit2b2lkIGJtcF9jb3B5KHNpemVfdCBiaXRzLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmRzdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpzcmMpXG4re1xuK1x0c2l6ZV90IG53b3JkcyA9IEJJVFNfVE9fTE9OR19MT05HUyhiaXRzKTtcbitcdHZvbGF0aWxlIHUzMiBpO1xuK1xuK1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgbndvcmRzIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSsrKVxuK1x0XHRkc3QtXHUwMDNlYml0c1tpXSA9IHNyYy1cdTAwM2ViaXRzW2ldO1xuK1xuK1x0aWYgKG53b3JkcyBcdTAwMjZcdTAwMjYgYml0cyAlIEJJVFNfUEVSX0xPTkdfTE9ORylcbitcdFx0ZHN0LVx1MDAzZWJpdHNbbndvcmRzIC0gMV0gXHUwMDI2PSBibXBfbGFzdF93b3JkX21hc2soYml0cyk7XG4rfVxuK1xuK19fd2Vha1xuK2Jvb2wgYm1wX3N1YnNldChzaXplX3QgYml0cywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpiaWcsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqc21hbGwpXG4re1xuK1x0c2l6ZV90IG53b3JkcyA9IEJJVFNfVE9fTE9OR19MT05HUyhiaXRzKTtcbitcdHZvbGF0aWxlIHUzMiBpO1xuK1xuK1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgbndvcmRzIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSsrKSB7XG4rXHRcdHU2NCBtYXNrID0gKGkgPT0gbndvcmRzIC0gMSkgPyBibXBfbGFzdF93b3JkX21hc2soYml0cykgOiB+MFVMTDtcbitcbitcdFx0aWYgKH5iaWctXHUwMDNlYml0c1tpXSBcdTAwMjYgc21hbGwtXHUwMDNlYml0c1tpXSBcdTAwMjYgbWFzaylcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rX193ZWFrXG4rYm9vbCBibXBfaW50ZXJzZWN0cyhzaXplX3QgYml0cywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICphcmcxLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmFyZzIpXG4re1xuK1x0c2l6ZV90IG53b3JkcyA9IEJJVFNfVE9fTE9OR19MT05HUyhiaXRzKTtcbitcdHZvbGF0aWxlIHUzMiBpO1xuK1xuK1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgbndvcmRzIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSsrKSB7XG4rXHRcdHU2NCBtYXNrID0gKGkgPT0gbndvcmRzIC0gMSkgPyBibXBfbGFzdF93b3JkX21hc2soYml0cykgOiB+MFVMTDtcbitcbitcdFx0aWYgKGFyZzEtXHUwMDNlYml0c1tpXSBcdTAwMjYgYXJnMi1cdTAwM2ViaXRzW2ldIFx1MDAyNiBtYXNrKVxuK1x0XHRcdHJldHVybiB0cnVlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitfX3dlYWtcbit2b2lkIGJtcF9wcmludChzaXplX3QgYml0cywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApXG4re1xuK1x0c2l6ZV90IG53b3JkcyA9IEJJVFNfVE9fTE9OR19MT05HUyhiaXRzKTtcbitcdHZvbGF0aWxlIHUzMiBpO1xuK1xuK1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgbndvcmRzIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSsrKVxuK1x0XHRhcmVuYV9zdGRlcnIoXCIlMDE2bGx4IFwiLCBibXAtXHUwMDNlYml0c1tpXSk7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvY29tbW9uLmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9jb21tb24uYnBmLmNcbmluZGV4IDUwYmU1NzIxM2RmYjhkLi41NjlmMGY2NGQ1MThiMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvY29tbW9uLmJwZi5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2NvbW1vbi5icGYuY1xuQEAgLTQsOSArNCw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGliYXJlbmEvYXNhbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGliYXJlbmEvYnVkZHkuaFx1MDAzZVxuIFxuLWNvbnN0IHZvbGF0aWxlIHUzMiB6ZXJvID0gMDtcbi1cbiBzdHJ1Y3QgYnVkZHkgX19hcmVuYSBidWRkeTtcbit2b2xhdGlsZSB1MzIgemVybyA9IDA7XG4gXG4gaW50IGFyZW5hX2ZscyhfX3U2NCB3b3JkKVxuIHtcbkBAIC0zOCw2ICszNywxMiBAQCBfX3dlYWsgaW50IGFyZW5hX2J1ZGR5X3Jlc2V0KHZvaWQpXG4gXHRyZXR1cm4gYnVkZHlfaW5pdChcdTAwMjZidWRkeSk7XG4gfVxuIFxuK1NFQyhcInN5c2NhbGxcIilcbitfX3dlYWsgaW50IGFyZW5hX2J1ZGR5X2Rlc3Ryb3kodm9pZClcbit7XG4rXHRyZXR1cm4gYnVkZHlfZGVzdHJveShcdTAwMjZidWRkeSk7XG4rfVxuK1xuIF9fd2VhayB2b2lkIF9fYXJlbmEgKmFyZW5hX21hbGxvYyhzaXplX3Qgc2l6ZSlcbiB7XG4gXHRyZXR1cm4gYnVkZHlfYWxsb2MoXHUwMDI2YnVkZHksIHNpemUpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYS5jXG5pbmRleCA2MWVhNjhkY2U0MTA1Zi4uYmE1YTVhNTBmN2MwN2QgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYS5jXG5AQCAtMTUsNyArMTUsMTIgQEAgc3RhdGljIHZvaWQgcnVuX2xpYmFyZW5hX3Rlc3Qoc3RydWN0IGxpYmFyZW5hICpza2VsLCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csXG4ge1xuIFx0aW50IHJldDtcbiBcbi1cdGlmICghc3Ryc3RyKG5hbWUsIFwidGVzdF9idWRkeVwiKSkge1xuK1x0aWYgKHN0cnN0cihuYW1lLCBcInRlc3RfYnVkZHlcIikpIHtcbitcdFx0LyogQnVkZHkgdGVzdHMgaW5pdGlhbGl6ZSB0aGUgYWxsb2NhdG9yIGRpcmVjdGx5LiAqL1xuK1x0XHRyZXQgPSBsaWJhcmVuYV9ydW5fcHJvZyhicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5hcmVuYV9idWRkeV9kZXN0cm95KSk7XG4rXHRcdGlmICghQVNTRVJUX09LKHJldCwgXCJhcmVuYV9idWRkeV9kZXN0cm95XCIpKVxuK1x0XHRcdHJldHVybjtcbitcdH0gZWxzZSB7XG4gXHRcdHJldCA9IGxpYmFyZW5hX3J1bl9wcm9nKGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmFyZW5hX2J1ZGR5X3Jlc2V0KSk7XG4gXHRcdGlmICghQVNTRVJUX09LKHJldCwgXCJhcmVuYV9idWRkeV9yZXNldFwiKSlcbiBcdFx0XHRyZXR1cm47XG5AQCAtMjQsNyArMjksNiBAQCBzdGF0aWMgdm9pZCBydW5fbGliYXJlbmFfdGVzdChzdHJ1Y3QgbGliYXJlbmEgKnNrZWwsIHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyxcbiBcdHJldCA9IGxpYmFyZW5hX3J1bl9wcm9nKGJwZl9wcm9ncmFtX19mZChwcm9nKSk7XG4gXG4gXHRBU1NFUlRfT0socmV0LCBuYW1lKTtcbi1cbiB9XG4gXG4gc3RhdGljIHZvaWQgKnJ1bl9saWJhcmVuYV9wYXJhbGxlbF9wcm9nKHZvaWQgKmFyZylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmNcbmluZGV4IGQ1OWQ5ZGQxMmVmMmIyLi5mODk3NDA1ZjcwMWRkNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jXG5AQCAtMTcsNyArMTcsMTIgQEAgc3RhdGljIHZvaWQgcnVuX2xpYmFyZW5hX2FzYW5fdGVzdChzdHJ1Y3QgbGliYXJlbmFfYXNhbiAqc2tlbCxcbiB7XG4gXHRpbnQgcmV0O1xuIFxuLVx0aWYgKCFzdHJzdHIobmFtZSwgXCJ0ZXN0X2J1ZGR5XCIpKSB7XG4rXHRpZiAoc3Ryc3RyKG5hbWUsIFwidGVzdF9idWRkeVwiKSkge1xuK1x0XHQvKiBCdWRkeSB0ZXN0cyBpbml0aWFsaXplIHRoZSBhbGxvY2F0b3IgZGlyZWN0bHkuICovXG4rXHRcdHJldCA9IGxpYmFyZW5hX3J1bl9wcm9nKGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmFyZW5hX2J1ZGR5X2Rlc3Ryb3kpKTtcbitcdFx0aWYgKCFBU1NFUlRfT0socmV0LCBcImFyZW5hX2J1ZGR5X2Rlc3Ryb3lcIikpXG4rXHRcdFx0cmV0dXJuO1xuK1x0fSBlbHNlIHtcbiBcdFx0cmV0ID0gbGliYXJlbmFfcnVuX3Byb2coYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MuYXJlbmFfYnVkZHlfcmVzZXQpKTtcbiBcdFx0aWYgKCFBU1NFUlRfT0socmV0LCBcImFyZW5hX2J1ZGR5X3Jlc2V0XCIpKVxuIFx0XHRcdHJldHVybjtcbkBAIC05MCw0ICs5NSwzIEBAIHZvaWQgdGVzdF9saWJhcmVuYV9hc2FuKHZvaWQpXG4gXG4gXHRyZXR1cm47XG4gfVxuLVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDI6MDE6MzEuNjU0MzE0NTY5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODE0ODgxNDc4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogbGliYXJlbmEgU2VsZnRlc3QgTW9kaWZpY2F0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggaGVyZSwgYW5kIGl0IHNlZW1zIHRvIGJlIHNvbGVseSBmb2N1c2VkIG9uIG1vZGlmeWluZyB0aGUgQlBGIHNlbGZ0ZXN0cyByZWxhdGVkIHRvIGxpYmFyZW5hLiBJIHNlZSBhIGxpc3Qgb2YgZmlsZXMgdGhhdCBoYXZlIGJlZW4gdG91Y2hlZDogYGJpdG1hcC5oYCwgYGNvbW1vbi5oYCwgcmVuYW1lZCBgLmJwZi5jYCBmaWxlcyAoZS5nLiwgYHN0X2FzYW5fYnVkZHkuYnBmLmNgIHRvIGB0ZXN0X2FzYW5fYnVkZHkuYnBmLmNgLCBhbmQgc28gb24pLCBhbmQgc29tZSBhc3NvY2lhdGVkIEMgZmlsZXMuIFRoZSBpbXBvcnRhbnQgYml0IGlzIHRoYXQgKmV2ZXJ5dGhpbmcqIGlzIHVuZGVyIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYC5cblxuTm93LCBnaXZlbiBteSBleHBlcnRpc2UsIEkga25vdyBpbW1lZGlhdGVseSB0aGF0IHNlbGZ0ZXN0cyBhcmUganVzdCB0aGF0IOKAkyB0ZXN0cy4gVGhleSdyZSBkZXNpZ25lZCB0byB2YWxpZGF0ZSB0aGUgZnVuY3Rpb25hbGl0eSBvZiBjb2RlLCBidXQgdGhleSdyZSAqbm90KiBwYXJ0IG9mIHRoZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYW55IG9mIHRoZSBhcmNoaXRlY3R1cmFsIGNvZGUuIFRoZXkncmUgdXNlci1zcGFjZSBwcm9ncmFtcyBvciBCUEYgcHJvZ3JhbXMsIGZvciB0ZXN0aW5nIHRoZSBrZXJuZWwuIFRoZXkgYXJlIG5vdCBpbnRlbmRlZCB0byBtb2RpZnkgb3IgY2hhbmdlIHRoZSBrZXJuZWwgaXRzZWxmLCBzbyB0aGVyZSdzIG5vIGluaGVyZW50IHJpc2sgb2YgaW50cm9kdWNpbmcgbmV3IGJ1Z3MgdG8gdGhlIGNvcmUgc3lzdGVtIHZpYSB0aGVzZSBjaGFuZ2VzLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdtIGNoZWNraW5nIGFnYWluIHRvIGVuc3VyZSBubyBmaWxlcyB3ZXJlIG1vZGlmaWVkIGluIG90aGVyIGRpcmVjdG9yaWVzLiBObywgYWxsIGZpbGVzIGFyZSB1bmRlciBgL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9gLCBhcyBjb25maXJtZWQgYnkgdGhlIGxpc3QuXG5cblRoZXJlZm9yZSwgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIHRoaXMgaXMgYSBkZWZpbml0ZSBcIldvcnRoRnV6emluZz1mYWxzZVwiIHNjZW5hcmlvLiBUaGUgcGF0Y2ggaXRzZWxmIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgc3VyZmFjZSBhcmVhIGZvciBmdXp6aW5nIGNvcmUga2VybmVsIGNvbXBvbmVudHMuIEl0J3Mgc3RyaWN0bHkgYWJvdXQgaW1wcm92aW5nIHRlc3QgY292ZXJhZ2Ugb3IgYWRkaW5nIG5ldyB0ZXN0cyB0byB0aGUgbGliYXJlbmEgZnJhbWV3b3JrIHdpdGhpbiB0aGUgQlBGIHNlbGZ0ZXN0cy5cblxuQWxyaWdodCwgSSdsbCBnbyBhaGVhZCBhbmQgdXBkYXRlIHRoZSByZXN1bHRzIHRvb2wgd2l0aCB0aGlzIGFzc2Vzc21lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjg2LCJPdXRwdXRUb2tlbnMiOjc1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTc0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDI6MDE6MzkuODAzMTMxNjg3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGFkZHMgYW5kIG1vZGlmaWVzIEJQRiBzZWxmdGVzdHMgZm9yIGxpYmFyZW5hIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZSBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIGFuZCBtb2RpZmllcyBCUEYgc2VsZnRlc3RzIGZvciBsaWJhcmVuYSB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmUgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowjcwc5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-07 01:43:40 +0000 UTC FinishedAt: 2026-07-07 02:01:41 +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+CgkJCTx0ZD4yMDI2LzA3LzA3IDAyOjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBhbmQgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyBmb3IgbGliYXJlbmEgdW5kZXIgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDAyOjAxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOGM0YzE0NDI5MmNlNWNlOGMwOTYzMDYwM2YzN2Q4NzhhZjUyN2ZkOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDcgMDI6MDE6MjggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvYml0bWFwLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9iaXRtYXAuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jZjZiNjNmNWQ5YTQ1ZlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvYml0bWFwLmhcbkBAIC0wLDAgJiM0MzsxLDM0IEBAXG4mIzQzOyNwcmFnbWEgb25jZVxuJiM0MztcbiYjNDM7I2RlZmluZSBCSVRTX1BFUl9CWVRFXHRcdDhcbiYjNDM7I2RlZmluZSBCWVRFU19UT19CSVRTKG5iKVx0KChuYikgKiBCSVRTX1BFUl9CWVRFKVxuJiM0MztcbiYjNDM7I2RlZmluZSBCSVRTX1BFUl9MT05HX0xPTkdcdChzaXplb2YobG9uZyBsb25nKSAqIEJJVFNfUEVSX0JZVEUpXG4mIzQzOyNkZWZpbmUgQklUU19UT19MT05HX0xPTkdTKG5yKVx0KCgobnIpICYjNDM7IEJJVFNfUEVSX0xPTkdfTE9ORyAtIDEpIC8gQklUU19QRVJfTE9OR19MT05HKVxuJiM0MzsjZGVmaW5lIEJJVF9NQVNLKG5yKVx0XHQoMVVMTCBcdTAwM2NcdTAwM2MgKChucikgJSBCSVRTX1BFUl9MT05HX0xPTkcpKVxuJiM0MzsjZGVmaW5lIEJJVF9XT1JEKG5yKVx0XHQoKG5yKSAvIEJJVFNfUEVSX0xPTkdfTE9ORylcbiYjNDM7XG4mIzQzO3N0cnVjdCBiaXRtYXAge1xuJiM0MztcdHU2NCBiaXRzWzBdO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXBfYWxsb2Moc2l6ZV90IGJpdHMpO1xuJiM0Mzt2b2lkIGJtcF9mcmVlKHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKTtcbiYjNDM7XG4mIzQzO3ZvaWQgX19ibXBfc2V0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcCk7XG4mIzQzO3ZvaWQgX19ibXBfY2xlYXJfYml0KHUzMiBiaXQsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKTtcbiYjNDM7dm9pZCBibXBfc2V0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcCk7XG4mIzQzO3ZvaWQgYm1wX2NsZWFyX2JpdCh1MzIgYml0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcCk7XG4mIzQzO2Jvb2wgYm1wX3Rlc3RfYml0KHUzMiBiaXQsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKTtcbiYjNDM7Ym9vbCBibXBfdGVzdF9hbmRfY2xlYXJfYml0KHUzMiBiaXQsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKTtcbiYjNDM7Ym9vbCBibXBfdGVzdF9hbmRfc2V0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcCk7XG4mIzQzO1xuJiM0Mzt2b2lkIGJtcF9jbGVhcihzaXplX3QgYml0cywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApO1xuJiM0Mzt2b2lkIGJtcF9hbmQoc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqZHN0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKnNyYzEsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqc3JjMik7XG4mIzQzO3ZvaWQgYm1wX29yKHNpemVfdCBiaXRzLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmRzdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpzcmMxLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKnNyYzIpO1xuJiM0Mztib29sIGJtcF9lbXB0eShzaXplX3QgYml0cywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApO1xuJiM0Mzt2b2lkIGJtcF9jb3B5KHNpemVfdCBiaXRzLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmRzdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpzcmMpO1xuJiM0MztcbiYjNDM7Ym9vbCBibXBfaW50ZXJzZWN0cyhzaXplX3QgYml0cywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICphcmcxLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmFyZzIpO1xuJiM0Mztib29sIGJtcF9zdWJzZXQoc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYmlnLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKnNtYWxsKTtcbiYjNDM7dm9pZCBibXBfcHJpbnQoc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9jb21tb24uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2NvbW1vbi5oXG5pbmRleCBhM2ViMTY0MWFjMzZkZi4uOTMxYWNlOWE0OWUyYmQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9jb21tb24uaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvY29tbW9uLmhcbkBAIC00Myw3ICYjNDM7NDMsNyBAQCBzdHJ1Y3Qge1xuICAqIGltcHJlY2lzZS4gVG8gZm9yY2UgdGhlIHZhcmlhYmxlIHRvIGJlIGltcHJlY2lzZSwgaW5pdGlhbGl6ZSBpdCB3aXRoXG4gICogdGhlIG9wYXF1ZSB2b2xhdGlsZSB2YXJpYWJsZSAwIGluc3RlYWQgb2YgdGhlIGNvbnN0YW50IDAuXG4gICovXG4tZXh0ZXJuIGNvbnN0IHZvbGF0aWxlIHUzMiB6ZXJvO1xuJiM0Mzt2b2xhdGlsZSB1MzIgemVybyBfX3dlYWs7XG4gZXh0ZXJuIHZvbGF0aWxlIHU2NCBhc2FuX3Zpb2xhdGVkO1xuIFxuIGludCBhcmVuYV9mbHMoX191NjQgd29yZCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy9zdF9hc2FuX2J1ZGR5LmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2FzYW5fYnVkZHkuYnBmLmNcbnNpbWlsYXJpdHkgaW5kZXggOTglXG5yZW5hbWUgZnJvbSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3N0X2FzYW5fYnVkZHkuYnBmLmNcbnJlbmFtZSB0byB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYXNhbl9idWRkeS5icGYuY1xuaW5kZXggNjg2Y2FiYTJjNjQzYjUuLjMyNjZhMjhmNTNkNzY4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy9zdF9hc2FuX2J1ZGR5LmJwZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYXNhbl9idWRkeS5icGYuY1xuQEAgLTEyLDcgJiM0MzsxMiw3IEBAIGV4dGVybiBzdHJ1Y3QgYnVkZHkgX19hcmVuYSBidWRkeTtcbiBcbiAjaWZkZWYgQlBGX0FSRU5BX0FTQU5cbiBcbi0jaW5jbHVkZSBcJiMzNDtzdF9hc2FuX2NvbW1vbi5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3Rlc3RfYXNhbl9jb21tb24uaFwmIzM0O1xuIFxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGFzYW5fdGVzdF9idWRkeV9vb2Jfc2luZ2xlKHNpemVfdCBhbGxvY19zaXplKVxuIHtcbkBAIC0xNTQsNyAmIzQzOzE1NCw4IEBAIF9fd2VhayBpbnQgYXNhbl90ZXN0X2J1ZGR5X29vYih2b2lkKVxuIFx0c2l6ZV90IHNpemVzW10gPSB7XG4gXHRcdDcsIDgsIDE3LCAxOCwgNjQsIDI1NiwgMzE3LCA1MTIsIDEwMjQsXG4gXHR9O1xuLVx0aW50IHJldCwgaTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdHUzMiBpO1xuIFxuIFx0cmV0ID0gYnVkZHlfaW5pdChcdTAwMjZidWRkeSk7XG4gXHRpZiAocmV0KSB7XG5AQCAtMTYzLDYgJiM0MzsxNjQsNyBAQCBfX3dlYWsgaW50IGFzYW5fdGVzdF9idWRkeV9vb2Iodm9pZClcbiBcdH1cbiBcbiBcdGZvciAoaSA9IHplcm87IGkgXHUwMDNjIHNpemVvZihzaXplcykgLyBzaXplb2Yoc2l6ZXNbMF0pIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGJhcnJpZXJfdmFyKGkpO1xuIFx0XHRyZXQgPSBhc2FuX3Rlc3RfYnVkZHlfb29iX3NpbmdsZShzaXplc1tpXSk7XG4gXHRcdGlmIChyZXQpIHtcbiBcdFx0XHRhcmVuYV9zdGRvdXQoXCYjMzQ7JXM6JWQgRmFpbGVkIGZvciBzaXplICVsdVwmIzM0OywgX19mdW5jX18sXG5AQCAtMTkwLDcgJiM0MzsxOTIsOCBAQCBfX3N0ZGVycihcJiMzNDtDYWxsIHRyYWNlOlxcblwmIzM0O1xuIF9fd2VhayBpbnQgYXNhbl90ZXN0X2J1ZGR5X3VhZih2b2lkKVxuIHtcbiBcdHNpemVfdCBzaXplc1tdID0geyAxNiwgMzIsIDY0LCAxMjgsIDI1NiwgNTEyLCAxMDI0LCAxNjM4NCB9O1xuLVx0aW50IHJldCwgaTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdHUzMiBpO1xuIFxuIFx0cmV0ID0gYnVkZHlfaW5pdChcdTAwMjZidWRkeSk7XG4gXHRpZiAocmV0KSB7XG5AQCAtMTk5LDYgJiM0MzsyMDIsNyBAQCBfX3dlYWsgaW50IGFzYW5fdGVzdF9idWRkeV91YWYodm9pZClcbiBcdH1cbiBcbiBcdGZvciAoaSA9IHplcm87IGkgXHUwMDNjIHNpemVvZihzaXplcykgLyBzaXplb2Yoc2l6ZXNbMF0pIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGJhcnJpZXJfdmFyKGkpO1xuIFx0XHRyZXQgPSBhc2FuX3Rlc3RfYnVkZHlfdWFmX3NpbmdsZShzaXplc1tpXSk7XG4gXHRcdGlmIChyZXQpIHtcbiBcdFx0XHRhcmVuYV9zdGRvdXQoXCYjMzQ7JXM6JWQgRmFpbGVkIGZvciBzaXplICVsdVwmIzM0OywgX19mdW5jX18sXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy9zdF9hc2FuX2NvbW1vbi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2FzYW5fY29tbW9uLmhcbnNpbWlsYXJpdHkgaW5kZXggMTAwJVxucmVuYW1lIGZyb20gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy9zdF9hc2FuX2NvbW1vbi5oXG5yZW5hbWUgdG8gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2FzYW5fY29tbW9uLmhcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYml0bWFwLmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2JpdG1hcC5icGYuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5lN2QzMmY0NGQ2ODcwOVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2JpdG1hcC5icGYuY1xuQEAgLTAsMCAmIzQzOzEsMzk0IEBAXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpYmFyZW5hL2NvbW1vbi5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaWJhcmVuYS9hc2FuLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGliYXJlbmEvYml0bWFwLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNkZWZpbmUgVEVTVF9CSVRTXHQoMiAqIEJJVFNfUEVSX0xPTkdfTE9ORylcbiYjNDM7I2RlZmluZSBURVNUX1dPUkRTXHRCSVRTX1RPX0xPTkdfTE9OR1MoVEVTVF9CSVRTKVxuJiM0MzsjZGVmaW5lIE1JRF9CSVRcdFx0KEJJVFNfUEVSX0xPTkdfTE9ORyAmIzQzOyAxKVxuJiM0MzsjZGVmaW5lIExBU1RfQklUXHQoVEVTVF9CSVRTIC0gMSlcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3RfYm1wX3NldGFsbChzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcClcbiYjNDM7e1xuJiM0MztcdHZvbGF0aWxlIHUzMiBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSB6ZXJvOyBpIFx1MDAzYyBURVNUX1dPUkRTIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRibXAtXHUwMDNlYml0c1tpXSA9IH4wVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7X193ZWFrIGludCB0ZXN0X2JpdG1hcF9hbGxvY19mcmVlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcDtcbiYjNDM7XG4mIzQzO1x0Ym1wID0gYm1wX2FsbG9jKFRFU1RfQklUUyk7XG4mIzQzO1x0aWYgKCFibXApXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFibXBfZW1wdHkoVEVTVF9CSVRTLCBibXApKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdF9fYm1wX3NldF9iaXQoTEFTVF9CSVQsIGJtcCk7XG4mIzQzO1x0aWYgKCFibXBfdGVzdF9iaXQoTEFTVF9CSVQsIGJtcCkpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0X19ibXBfY2xlYXJfYml0KExBU1RfQklULCBibXApO1xuJiM0MztcdGlmIChibXBfdGVzdF9iaXQoTEFTVF9CSVQsIGJtcCkpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0Ym1wX2ZyZWUoYm1wKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2VycjpcbiYjNDM7XHRibXBfZnJlZShibXApO1xuJiM0MztcdHJldHVybiAtRUlOVkFMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7X193ZWFrIGludCB0ZXN0X2JpdG1hcF9iaXRfb3BzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcDtcbiYjNDM7XG4mIzQzO1x0Ym1wID0gYm1wX2FsbG9jKFRFU1RfQklUUyk7XG4mIzQzO1x0aWYgKCFibXApXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0X19ibXBfc2V0X2JpdCgwLCBibXApO1xuJiM0MztcdGlmICghYm1wX3Rlc3RfYml0KDAsIGJtcCkpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0X19ibXBfc2V0X2JpdChNSURfQklULCBibXApO1xuJiM0MztcdGlmICghYm1wX3Rlc3RfYml0KE1JRF9CSVQsIGJtcCkpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0X19ibXBfc2V0X2JpdChMQVNUX0JJVCwgYm1wKTtcbiYjNDM7XHRpZiAoIWJtcF90ZXN0X2JpdChMQVNUX0JJVCwgYm1wKSlcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoYm1wX3Rlc3RfYml0KE1JRF9CSVQgLSAxLCBibXApKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdF9fYm1wX2NsZWFyX2JpdChNSURfQklULCBibXApO1xuJiM0MztcdGlmIChibXBfdGVzdF9iaXQoTUlEX0JJVCwgYm1wKSlcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoIWJtcF90ZXN0X2JpdCgwLCBibXApKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdGlmICghYm1wX3Rlc3RfYml0KExBU1RfQklULCBibXApKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdF9fYm1wX2NsZWFyX2JpdCgwLCBibXApO1xuJiM0MztcdF9fYm1wX2NsZWFyX2JpdChMQVNUX0JJVCwgYm1wKTtcbiYjNDM7XHRpZiAoIWJtcF9lbXB0eShURVNUX0JJVFMsIGJtcCkpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKGJtcC1cdTAwM2ViaXRzWzBdKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdGlmIChibXAtXHUwMDNlYml0c1sxXSlcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRibXBfZnJlZShibXApO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyOlxuJiM0MztcdGJtcF9mcmVlKGJtcCk7XG4mIzQzO1x0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHRlc3RfYml0bWFwX3Rlc3RfYW5kX2NsZWFyX3NpbmdsZShzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcCwgc2l6ZV90IGluZClcbiYjNDM7e1xuJiM0MztcdGlmIChibXBfdGVzdF9hbmRfY2xlYXJfYml0KGluZCwgYm1wKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0X19ibXBfc2V0X2JpdChpbmQsIGJtcCk7XG4mIzQzO1xuJiM0MztcdGlmICghYm1wX3Rlc3RfYW5kX2NsZWFyX2JpdChpbmQsIGJtcCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmIChibXBfdGVzdF9iaXQoaW5kLCBibXApKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpZiAoYm1wX3Rlc3RfYW5kX2NsZWFyX2JpdChpbmQsIGJtcCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCB0ZXN0X2JpdG1hcF90ZXN0X2FuZF9zZXRfc2luZ2xlKHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wLCBzaXplX3QgaW5kKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGJtcF90ZXN0X2FuZF9zZXRfYml0KGluZCwgYm1wKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFibXBfdGVzdF9hbmRfc2V0X2JpdChpbmQsIGJtcCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmICghYm1wX3Rlc3RfYml0KGluZCwgYm1wKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0X19ibXBfY2xlYXJfYml0KGluZCwgYm1wKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGJtcF90ZXN0X2FuZF9zZXRfYml0KGluZCwgYm1wKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztfX3dlYWsgaW50IHRlc3RfYml0bWFwX3Rlc3RfYW5kX2NsZWFyX2JpdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXA7XG4mIzQzO1xuJiM0MztcdGJtcCA9IGJtcF9hbGxvYyhURVNUX0JJVFMpO1xuJiM0MztcdGlmICghYm1wKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdGlmICghdGVzdF9iaXRtYXBfdGVzdF9hbmRfY2xlYXJfc2luZ2xlKGJtcCwgMCkpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKCF0ZXN0X2JpdG1hcF90ZXN0X2FuZF9jbGVhcl9zaW5nbGUoYm1wLCBNSURfQklUKSlcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoIXRlc3RfYml0bWFwX3Rlc3RfYW5kX2NsZWFyX3NpbmdsZShibXAsIExBU1RfQklUKSlcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoIWJtcF9lbXB0eShURVNUX0JJVFMsIGJtcCkpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0Ym1wX2ZyZWUoYm1wKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2VycjpcbiYjNDM7XHRibXBfZnJlZShibXApO1xuJiM0MztcdHJldHVybiAtRUlOVkFMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7X193ZWFrIGludCB0ZXN0X2JpdG1hcF90ZXN0X2FuZF9zZXRfYml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcDtcbiYjNDM7XG4mIzQzO1x0Ym1wID0gYm1wX2FsbG9jKFRFU1RfQklUUyk7XG4mIzQzO1x0aWYgKCFibXApXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0aWYgKCF0ZXN0X2JpdG1hcF90ZXN0X2FuZF9zZXRfc2luZ2xlKGJtcCwgMCkpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKCF0ZXN0X2JpdG1hcF90ZXN0X2FuZF9zZXRfc2luZ2xlKGJtcCwgTUlEX0JJVCkpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKCF0ZXN0X2JpdG1hcF90ZXN0X2FuZF9zZXRfc2luZ2xlKGJtcCwgTEFTVF9CSVQpKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdGJtcF9mcmVlKGJtcCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnI6XG4mIzQzO1x0Ym1wX2ZyZWUoYm1wKTtcbiYjNDM7XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztfX3dlYWsgaW50IHRlc3RfYml0bWFwX2FuZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJpdG1hcCBfX2FyZW5hICpzcmMxID0gTlVMTCwgKnNyYzIgPSBOVUxMLCAqZHN0ID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0c3JjMSA9IGJtcF9hbGxvYyhURVNUX0JJVFMpO1xuJiM0MztcdHNyYzIgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTtcbiYjNDM7XHRkc3QgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTtcbiYjNDM7XHRpZiAoIXNyYzEgfHwgIXNyYzIgfHwgIWRzdClcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHR0ZXN0X2JtcF9zZXRhbGwoZHN0KTtcbiYjNDM7XG4mIzQzO1x0X19ibXBfc2V0X2JpdCgwLCBzcmMxKTtcbiYjNDM7XHRfX2JtcF9zZXRfYml0KE1JRF9CSVQsIHNyYzEpO1xuJiM0MztcdF9fYm1wX3NldF9iaXQoTEFTVF9CSVQsIHNyYzEpO1xuJiM0MztcbiYjNDM7XHRfX2JtcF9zZXRfYml0KE1JRF9CSVQsIHNyYzIpO1xuJiM0MztcdF9fYm1wX3NldF9iaXQoTEFTVF9CSVQsIHNyYzIpO1xuJiM0MztcbiYjNDM7XHRibXBfYW5kKFRFU1RfQklUUywgZHN0LCBzcmMxLCBzcmMyKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGJtcF90ZXN0X2JpdCgwLCBkc3QpKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1x0aWYgKCFibXBfdGVzdF9iaXQoTUlEX0JJVCwgZHN0KSlcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcdGlmICghYm1wX3Rlc3RfYml0KExBU1RfQklULCBkc3QpKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdGlmIChkc3QtXHUwMDNlYml0c1swXSlcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcdGlmIChkc3QtXHUwMDNlYml0c1sxXSAhPSAoQklUX01BU0soTUlEX0JJVCkgfCBCSVRfTUFTSyhMQVNUX0JJVCkpKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdGJtcF9mcmVlKHNyYzEpO1xuJiM0MztcdGJtcF9mcmVlKHNyYzIpO1xuJiM0MztcdGJtcF9mcmVlKGRzdCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnI6XG4mIzQzO1x0Ym1wX2ZyZWUoc3JjMSk7XG4mIzQzO1x0Ym1wX2ZyZWUoc3JjMik7XG4mIzQzO1x0Ym1wX2ZyZWUoZHN0KTtcbiYjNDM7XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4mIzQzO19fd2VhayBpbnQgdGVzdF9iaXRtYXBfb3Iodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqc3JjMSA9IE5VTEwsICpzcmMyID0gTlVMTCwgKmRzdCA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdHNyYzEgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTtcbiYjNDM7XHRzcmMyID0gYm1wX2FsbG9jKFRFU1RfQklUUyk7XG4mIzQzO1x0ZHN0ID0gYm1wX2FsbG9jKFRFU1RfQklUUyk7XG4mIzQzO1x0aWYgKCFzcmMxIHx8ICFzcmMyIHx8ICFkc3QpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0dGVzdF9ibXBfc2V0YWxsKGRzdCk7XG4mIzQzO1xuJiM0MztcdF9fYm1wX3NldF9iaXQoMCwgc3JjMSk7XG4mIzQzO1x0X19ibXBfc2V0X2JpdChMQVNUX0JJVCwgc3JjMSk7XG4mIzQzO1xuJiM0MztcdF9fYm1wX3NldF9iaXQoTUlEX0JJVCwgc3JjMik7XG4mIzQzO1x0X19ibXBfc2V0X2JpdChMQVNUX0JJVCwgc3JjMik7XG4mIzQzO1xuJiM0MztcdGJtcF9vcihURVNUX0JJVFMsIGRzdCwgc3JjMSwgc3JjMik7XG4mIzQzO1xuJiM0MztcdGlmICghYm1wX3Rlc3RfYml0KDAsIGRzdCkpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XHRpZiAoIWJtcF90ZXN0X2JpdChNSURfQklULCBkc3QpKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1x0aWYgKCFibXBfdGVzdF9iaXQoTEFTVF9CSVQsIGRzdCkpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKGRzdC1cdTAwM2ViaXRzWzBdICE9IEJJVF9NQVNLKDApKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1x0aWYgKGRzdC1cdTAwM2ViaXRzWzFdICE9IChCSVRfTUFTSyhNSURfQklUKSB8IEJJVF9NQVNLKExBU1RfQklUKSkpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0Ym1wX2ZyZWUoc3JjMSk7XG4mIzQzO1x0Ym1wX2ZyZWUoc3JjMik7XG4mIzQzO1x0Ym1wX2ZyZWUoZHN0KTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2VycjpcbiYjNDM7XHRibXBfZnJlZShzcmMxKTtcbiYjNDM7XHRibXBfZnJlZShzcmMyKTtcbiYjNDM7XHRibXBfZnJlZShkc3QpO1xuJiM0MztcdHJldHVybiAtRUlOVkFMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7X193ZWFrIGludCB0ZXN0X2JpdG1hcF9zdWJzZXQodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYmlnID0gTlVMTCwgKnNtYWxsID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0YmlnID0gYm1wX2FsbG9jKFRFU1RfQklUUyk7XG4mIzQzO1x0c21hbGwgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTtcbiYjNDM7XHRpZiAoIWJpZyB8fCAhc21hbGwpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFibXBfc3Vic2V0KFRFU1RfQklUUywgYmlnLCBzbWFsbCkpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0X19ibXBfc2V0X2JpdCgwLCBzbWFsbCk7XG4mIzQzO1x0aWYgKGJtcF9zdWJzZXQoVEVTVF9CSVRTLCBiaWcsIHNtYWxsKSlcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRfX2JtcF9zZXRfYml0KDAsIGJpZyk7XG4mIzQzO1x0aWYgKCFibXBfc3Vic2V0KFRFU1RfQklUUywgYmlnLCBzbWFsbCkpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0X19ibXBfc2V0X2JpdChMQVNUX0JJVCwgc21hbGwpO1xuJiM0MztcdGlmIChibXBfc3Vic2V0KFRFU1RfQklUUywgYmlnLCBzbWFsbCkpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0X19ibXBfc2V0X2JpdChMQVNUX0JJVCwgYmlnKTtcbiYjNDM7XHRfX2JtcF9zZXRfYml0KE1JRF9CSVQsIGJpZyk7XG4mIzQzO1x0aWYgKCFibXBfc3Vic2V0KFRFU1RfQklUUywgYmlnLCBzbWFsbCkpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKGJtcF9zdWJzZXQoVEVTVF9CSVRTLCBzbWFsbCwgYmlnKSlcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRibXBfZnJlZShiaWcpO1xuJiM0MztcdGJtcF9mcmVlKHNtYWxsKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2VycjpcbiYjNDM7XHRibXBfZnJlZShiaWcpO1xuJiM0MztcdGJtcF9mcmVlKHNtYWxsKTtcbiYjNDM7XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztfX3dlYWsgaW50IHRlc3RfYml0bWFwX2ludGVyc2VjdHModm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYXJnMSA9IE5VTEwsICphcmcyID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0YXJnMSA9IGJtcF9hbGxvYyhURVNUX0JJVFMpO1xuJiM0MztcdGFyZzIgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTtcbiYjNDM7XHRpZiAoIWFyZzEgfHwgIWFyZzIpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKGJtcF9pbnRlcnNlY3RzKFRFU1RfQklUUywgYXJnMSwgYXJnMikpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0X19ibXBfc2V0X2JpdCgwLCBhcmcxKTtcbiYjNDM7XHRfX2JtcF9zZXRfYml0KE1JRF9CSVQsIGFyZzIpO1xuJiM0MztcdGlmIChibXBfaW50ZXJzZWN0cyhURVNUX0JJVFMsIGFyZzEsIGFyZzIpKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdF9fYm1wX3NldF9iaXQoTEFTVF9CSVQsIGFyZzEpO1xuJiM0MztcdF9fYm1wX3NldF9iaXQoTEFTVF9CSVQsIGFyZzIpO1xuJiM0MztcdGlmICghYm1wX2ludGVyc2VjdHMoVEVTVF9CSVRTLCBhcmcxLCBhcmcyKSlcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRibXBfZnJlZShhcmcxKTtcbiYjNDM7XHRibXBfZnJlZShhcmcyKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2VycjpcbiYjNDM7XHRibXBfZnJlZShhcmcxKTtcbiYjNDM7XHRibXBfZnJlZShhcmcyKTtcbiYjNDM7XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4mIzQzO19fd2VhayBpbnQgdGVzdF9iaXRtYXBfY29weSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJpdG1hcCBfX2FyZW5hICphcmcxID0gTlVMTCwgKmFyZzIgPSBOVUxMO1xuJiM0MztcbiYjNDM7XHRhcmcxID0gYm1wX2FsbG9jKFRFU1RfQklUUyk7XG4mIzQzO1x0YXJnMiA9IGJtcF9hbGxvYyhURVNUX0JJVFMpO1xuJiM0MztcdGlmICghYXJnMSB8fCAhYXJnMilcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRfX2JtcF9zZXRfYml0KDAsIGFyZzEpO1xuJiM0MztcdF9fYm1wX3NldF9iaXQoTUlEX0JJVCwgYXJnMSk7XG4mIzQzO1xuJiM0MztcdC8qIE1ha2Ugc3VyZSB0aG9zZSBnZXQgb3ZlcndyaXR0ZW4uICovXG4mIzQzO1x0X19ibXBfc2V0X2JpdCgxLCBhcmcyKTtcbiYjNDM7XHRfX2JtcF9zZXRfYml0KE1JRF9CSVQgJiM0MzsgMiwgYXJnMik7XG4mIzQzO1xuJiM0MztcdGJtcF9jb3B5KFRFU1RfQklUUywgYXJnMiwgYXJnMSk7XG4mIzQzO1xuJiM0MztcdC8qIEJpdG1hcHMgYXJlIGVxdWFsIGlmIGEgc3Vic2V0IG9mIGVhY2ggb3RoZXIuICovXG4mIzQzO1x0aWYgKCFibXBfc3Vic2V0KFRFU1RfQklUUywgYXJnMSwgYXJnMikgfHxcbiYjNDM7XHQgICAgIWJtcF9zdWJzZXQoVEVTVF9CSVRTLCBhcmcyLCBhcmcxKSlcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRibXBfZnJlZShhcmcxKTtcbiYjNDM7XHRibXBfZnJlZShhcmcyKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2VycjpcbiYjNDM7XHRibXBfZnJlZShhcmcxKTtcbiYjNDM7XHRibXBfZnJlZShhcmcyKTtcbiYjNDM7XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvc3RfYnVkZHkuYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYnVkZHkuYnBmLmNcbnNpbWlsYXJpdHkgaW5kZXggOTclXG5yZW5hbWUgZnJvbSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3N0X2J1ZGR5LmJwZi5jXG5yZW5hbWUgdG8gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2J1ZGR5LmJwZi5jXG5pbmRleCBiNDVhMzA2ODE2YzBlNC4uNTYyOGYwOTg3MDEyMWMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3N0X2J1ZGR5LmJwZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYnVkZHkuYnBmLmNcbkBAIC0xNzEsNyAmIzQzOzE3MSw4IEBAIF9fd2VhayBpbnQgdGVzdF9idWRkeV9hbGxvY19tdWx0aXBsZSh2b2lkKVxuIFNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuIF9fd2VhayBpbnQgdGVzdF9idWRkeV9hbGlnbm1lbnQodm9pZClcbiB7XG4tXHRpbnQgcmV0LCBpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1x0dTMyIGk7XG4gXG4gXHRyZXQgPSBidWRkeV9pbml0KFx1MDAyNmJ1ZGR5KTtcbiBcdGlmIChyZXQpXG5AQCAtMTc5LDYgJiM0MzsxODAsNyBAQCBfX3dlYWsgaW50IHRlc3RfYnVkZHlfYWxpZ25tZW50KHZvaWQpXG4gXG4gXHQvKiBBbGxvY2F0ZSB2YXJpb3VzIHNpemVzIGFuZCBjaGVjayBhbGlnbm1lbnQgKi9cbiBcdGZvciAoaSA9IHplcm87IGkgXHUwMDNjIDE3IFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGJhcnJpZXJfdmFyKGkpO1xuIFx0XHRwdHJzW2ldID0gYnVkZHlfYWxsb2MoXHUwMDI2YnVkZHksIGFsaWdubWVudF9zaXplc1tpXSk7XG4gXHRcdGlmICghcHRyc1tpXSkge1xuIFx0XHRcdGFyZW5hX3N0ZG91dChcJiMzNDthbGlnbm1lbnQgdGVzdDogYWxsb2MgZmFpbGVkIGZvciBzaXplICVsdVwmIzM0OyxcbkBAIC0xOTgsOCAmIzQzOzIwMCwxMCBAQCBfX3dlYWsgaW50IHRlc3RfYnVkZHlfYWxpZ25tZW50KHZvaWQpXG4gXHR9XG4gXG4gXHQvKiBGcmVlIGFsbCBhbGxvY2F0aW9ucyAqL1xuLVx0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgMTcgXHUwMDI2XHUwMDI2IGNhbl9sb29wOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRmb3IgKGkgPSB6ZXJvOyBpIFx1MDAzYyAxNyBcdTAwMjZcdTAwMjYgY2FuX2xvb3A7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRiYXJyaWVyX3ZhcihpKTtcbiBcdFx0YnVkZHlfZnJlZShcdTAwMjZidWRkeSwgcHRyc1tpXSk7XG4mIzQzO1x0fVxuIFxuIFx0YnVkZHlfZGVzdHJveShcdTAwMjZidWRkeSk7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X3BhcmFsbGVsX2JpdG1hcC5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9wYXJhbGxlbF9iaXRtYXAuYnBmLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZWVjMjg3MWUyYjBkMTBcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9wYXJhbGxlbF9iaXRtYXAuYnBmLmNcbkBAIC0wLDAgJiM0MzsxLDE5MCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTEdQTC0yLjEgT1IgQlNELTItQ2xhdXNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGZfYXRvbWljLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpYmFyZW5hL2NvbW1vbi5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaWJhcmVuYS9hc2FuLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGliYXJlbmEvYml0bWFwLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNkZWZpbmUgVEVTVF9CSVRNQVBfVEhSRUFEU1x0MlxuJiM0MzsjZGVmaW5lIFRFU1RfQklUTUFQX0JJVFNcdCgyICogQklUU19QRVJfTE9OR19MT05HKVxuJiM0MzsjZGVmaW5lIFRFU1RfQklUTUFQX1NZTkNfU1BJTlNcdEJQRl9NQVhfTE9PUFNcbiYjNDM7I2RlZmluZSBURVNUX0JJVE1BUF9JVEVSU1x0MTAgKiAxMDAwICogMTAwMFxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYml0bWFwO1xuJiM0MztzdGF0aWMgdm9sYXRpbGUgdTY0IHN0YXJ0ZWQ7XG4mIzQzO3N0YXRpYyB2b2xhdGlsZSBib29sIHRlc3RfYWJvcnQ7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBUaGUgdGVzdCBuZWVkcyBjbXB4Y2hnIGF0b21pY3Mgb24gYXJlbmEgbWVtb3J5LlxuJiM0MzsgKi9cbiYjNDM7I2lmIGRlZmluZWQoRU5BQkxFX0FUT01JQ1NfVEVTVFMpIFx1MDAyNlx1MDAyNlx0XHRcdFx0ICBcXFxuJiM0MztcdChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfYXJtNjQpIHx8IGRlZmluZWQoX19UQVJHRVRfQVJDSF94ODYpIHx8IFxcXG4mIzQzO1x0IGRlZmluZWQoX19UQVJHRVRfQVJDSF9zMzkwKSB8fCBcXFxuJiM0MztcdCBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfcG93ZXJwYykgfHxcdFx0XHRcdCAgXFxcbiYjNDM7XHQgKGRlZmluZWQoX19UQVJHRVRfQVJDSF9yaXNjdikgXHUwMDI2XHUwMDI2IF9fcmlzY3ZfeGxlbiA9PSA2NCkpXG4mIzQzO3N0YXRpYyBib29sIGJpdG1hcF90ZXN0c19lbmFibGVkKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgYm9vbCBiaXRtYXBfdGVzdHNfZW5hYmxlZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7X193ZWFrXG4mIzQzO2ludCBiaXRtYXBfd2FpdF9mb3Jfc3RhcnQodm9pZClcbiYjNDM7e1xuJiM0MztcdHU2NCBpO1xuJiM0MztcbiYjNDM7XHRfX3N5bmNfZmV0Y2hfYW5kX2FkZChcdTAwMjZzdGFydGVkLCAxKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgVEVTVF9CSVRNQVBfU1lOQ19TUElOUyBcdTAwMjZcdTAwMjYgY2FuX2xvb3A7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAodGVzdF9hYm9ydClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5UUjtcbiYjNDM7XHRcdGlmIChzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnN0YXJ0ZWQpIFx1MDAzZT0gVEVTVF9CSVRNQVBfVEhSRUFEUylcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR0ZXN0X2Fib3J0ID0gdHJ1ZTtcbiYjNDM7XHRyZXR1cm4gLUVUSU1FRE9VVDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVGhlIHRlc3QgbWFrZXMgc3VyZSB3cml0ZXMgZG9uJiMzOTt0IGNsb2JiZXIgZWFjaCBvdGhlciBieSBvdmVyd3JpdGluZ1xuJiM0MzsgKiB0aGUgc2FtZSB3b3JkLiBPbmUgdGhyZWFkIGFsd2F5cyB3cml0ZXMgb24gZXZlbiBiaXRzLCB0aGUgb3RoZXIgb25cbiYjNDM7ICogb2Rkcy4gQm90aCBzaG91bGQgYmUgYWJsZSB0byBvcGVyYXRlIG9uIHRoZSBiaXRtYXAgb2JsaXZpb3VzIG9mIHRoZVxuJiM0MzsgKiBvdGhlciYjMzk7cyBvcGVyYXRpb25zLlxuJiM0MzsgKi9cbiYjNDM7X193ZWFrXG4mIzQzO2ludCBiaXRtYXBfdGVzdF9iaXRfc2VxdWVuY2UodTMyIGJpdClcbiYjNDM7e1xuJiM0MztcdGlmIChibXBfdGVzdF9hbmRfY2xlYXJfYml0KGJpdCwgYml0bWFwKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAoYm1wX3Rlc3RfYW5kX3NldF9iaXQoYml0LCBiaXRtYXApKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0aWYgKCFibXBfdGVzdF9iaXQoYml0LCBiaXRtYXApKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmICghYm1wX3Rlc3RfYW5kX3NldF9iaXQoYml0LCBiaXRtYXApKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0aWYgKCFibXBfdGVzdF9iaXQoYml0LCBiaXRtYXApKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmICghYm1wX3Rlc3RfYW5kX2NsZWFyX2JpdChiaXQsIGJpdG1hcCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRpZiAoYm1wX3Rlc3RfYml0KGJpdCwgYml0bWFwKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAoYm1wX3Rlc3RfYW5kX2NsZWFyX2JpdChiaXQsIGJpdG1hcCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0Ym1wX3NldF9iaXQoYml0LCBiaXRtYXApO1xuJiM0MztcdGlmICghYm1wX3Rlc3RfYml0KGJpdCwgYml0bWFwKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRibXBfY2xlYXJfYml0KGJpdCwgYml0bWFwKTtcbiYjNDM7XHRpZiAoYm1wX3Rlc3RfYml0KGJpdCwgYml0bWFwKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRibXBfc2V0X2JpdChiaXQsIGJpdG1hcCk7XG4mIzQzO1x0aWYgKCFibXBfdGVzdF9iaXQoYml0LCBiaXRtYXApKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYml0bWFwX3Rlc3RfcmVzZXRfc2luZ2xlKGludCBwYXJpdHkpXG4mIzQzO3tcbiYjNDM7XHR1MzIgYml0O1xuJiM0MztcbiYjNDM7XHRmb3IgKGJpdCA9IHBhcml0eTsgYml0IFx1MDAzYyBURVNUX0JJVE1BUF9CSVRTIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgYml0ICYjNDM7PSAyKVxuJiM0MztcdFx0Ym1wX2NsZWFyX2JpdChiaXQsIGJpdG1hcCk7XG4mIzQzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGJpdG1hcF90ZXN0X2NvbW1vbl9zaW5nbGUoaW50IHBhcml0eSlcbiYjNDM7e1xuJiM0MztcdHUzMiBiaXQ7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChiaXQgPSBwYXJpdHk7IGJpdCBcdTAwM2MgVEVTVF9CSVRNQVBfQklUUyBcdTAwMjZcdTAwMjYgY2FuX2xvb3A7IGJpdCAmIzQzOz0gMikge1xuJiM0MztcdFx0aWYgKHRlc3RfYWJvcnQpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVFI7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gYml0bWFwX3Rlc3RfYml0X3NlcXVlbmNlKGJpdCk7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdHRlc3RfYWJvcnQgPSB0cnVlO1xuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYml0bWFwX3Rlc3RfY29tbW9uKGludCBwYXJpdHkpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdHUzMiBpO1xuJiM0MztcbiYjNDM7XHRhcmVuYV9zdWJwcm9nX2luaXQoKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYml0bWFwX3dhaXRfZm9yX3N0YXJ0KCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IHplcm87IGkgXHUwMDNjIFRFU1RfQklUTUFQX0lURVJTIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHJldCA9IGJpdG1hcF90ZXN0X2NvbW1vbl9zaW5nbGUocGFyaXR5KTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHRlc3RfYWJvcnQpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdGJpdG1hcF90ZXN0X3Jlc2V0X3NpbmdsZShwYXJpdHkpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBpbnQgcGFyYWxsZWxfdGVzdF9iaXRtYXBfX2VuYWJsZWQodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBiaXRtYXBfdGVzdHNfZW5hYmxlZCgpID8gMCA6IC1FT1BOT1RTVVBQO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OykgaW50IHBhcmFsbGVsX3Rlc3RfYml0bWFwX19pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRiaXRtYXAgPSBibXBfYWxsb2MoVEVTVF9CSVRNQVBfQklUUyk7XG4mIzQzO1x0aWYgKCFiaXRtYXApXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBpbnQgcGFyYWxsZWxfdGVzdF9iaXRtYXBfX2Zpbmkodm9pZClcbiYjNDM7e1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIWJpdG1hcClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRibXBfZnJlZShiaXRtYXApO1xuJiM0MztcdGJpdG1hcCA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBpbnQgcGFyYWxsZWxfdGVzdF9iaXRtYXBfXzAodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBiaXRtYXBfdGVzdF9jb21tb24oMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KSBpbnQgcGFyYWxsZWxfdGVzdF9iaXRtYXBfXzEodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBiaXRtYXBfdGVzdF9jb21tb24oMSk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfcGFyYWxsZWxfc3BtYy5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9wYXJhbGxlbF9zcG1jLmJwZi5jXG5pbmRleCBmMDhmMmE5MmUxOTQ2OC4uNWZhOTZlYjc0MDk1MWMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfcGFyYWxsZWxfc3BtYy5icGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X3BhcmFsbGVsX3NwbWMuYnBmLmNcbkBAIC0xNTUsNyAmIzQzOzE1NSw3IEBAIGludCBzcG1jX3F1aWVzY2Vfb25fb3duZXIodTY0IGVwb2NoKVxuIHtcbiBcdHU2NCBpO1xuIFxuLVx0YnBmX2ZvcihpLCAwLCBURVNUX1NQTUNfU1lOQ19TUElOUykge1xuJiM0MztcdGZvciAoaSA9IHplcm87IGkgXHUwMDNjIFRFU1RfU1BNQ19TWU5DX1NQSU5TIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSYjNDM7JiM0MzspIHtcbiBcdFx0aWYgKHRlc3RfYWJvcnQpXG4gXHRcdFx0cmV0dXJuIC1FSU5UUjtcbiBcdFx0aWYgKHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2b3duZXJfZXBvY2gpIFx1MDAzZT0gZXBvY2gpXG5AQCAtMTc1LDggJiM0MzsxNzUsNyBAQCBpbnQgc3BtY19xdWllc2NlX29uX3N0ZWFsZXIodTY0IGVwb2NoKVxuIFx0aW50IGVyciA9IC1FVElNRURPVVQ7XG4gXG4gXHR0YXJnZXQgPSBTVEVBTEVSX0VQT0NIKGVwb2NoKTtcbi1cdGJwZl9mb3IoaSwgMCwgVEVTVF9TUE1DX1NZTkNfU1BJTlMpIHtcbi1cbiYjNDM7XHRmb3IgKGkgPSB6ZXJvOyBpIFx1MDAzYyBURVNUX1NQTUNfU1lOQ19TUElOUyBcdTAwMjZcdTAwMjYgY2FuX2xvb3A7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGlmICh0ZXN0X2Fib3J0KSB7XG4gXHRcdFx0ZXJyID0gLUVJTlRSO1xuIFx0XHRcdGJyZWFrO1xuQEAgLTM5MSw3ICYjNDM7MzkwLDcgQEAgaW50IHNwbWNfd2FpdF9mb3Jfc3RlYWxlcnNfdG9fc3RhcnQodTY0IHRhcmdldClcbiB7XG4gXHR1NjQgaTtcbiBcbi1cdGJwZl9mb3IoaSwgMCwgVEVTVF9TUE1DX1NZTkNfU1BJTlMpIHtcbiYjNDM7XHRmb3IgKGkgPSB6ZXJvOyBpIFx1MDAzYyBURVNUX1NQTUNfU1lOQ19TUElOUyBcdTAwMjZcdTAwMjYgY2FuX2xvb3A7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGlmICh0ZXN0X2Fib3J0KVxuIFx0XHRcdHJldHVybiAtRUlOVFI7XG4gXHRcdGlmIChSRUFEX09OQ0Uoc3RlYWxlcnNfc3RhcnRlZCkgXHUwMDNlPSB0YXJnZXQpXG5AQCAtNTM3LDcgJiM0Mzs1MzYsNyBAQCBzdGF0aWMgaW50IHNwbWNfd2FpdF9mb3Jfcm91bmRfc3RlYWxzKHU2NCB0YXJnZXQpXG4gXG4gXHRhcmVuYV9zdWJwcm9nX2luaXQoKTtcbiBcbi1cdGJwZl9mb3IoaSwgMCwgVEVTVF9TUE1DX1NZTkNfU1BJTlMpIHtcbiYjNDM7XHRmb3IgKGkgPSB6ZXJvOyBpIFx1MDAzYyBURVNUX1NQTUNfU1lOQ19TUElOUyBcdTAwMjZcdTAwMjYgY2FuX2xvb3A7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGlmICh0ZXN0X2Fib3J0KVxuIFx0XHRcdHJldHVybiAtRUlOVFI7XG4gXHRcdGlmIChyb3VuZF9zdGVhbHMgXHUwMDNlPSB0YXJnZXQpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9iaXRtYXAuYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2JpdG1hcC5icGYuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi44MGU4MTQ0MDFmYjllYVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9iaXRtYXAuYnBmLmNcbkBAIC0wLDAgJiM0MzsxLDI0NSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTEdQTC0yLjEgT1IgQlNELTItQ2xhdXNlXG4mIzQzOy8qXG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNS0yMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjUtMjAyNiBFbWlsIFRzYWxhcGF0aXMgXHUwMDNjZW1pbEBldHNhbGFwYXRpcy5jb21cdTAwM2VcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaWJhcmVuYS9jb21tb24uaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGliYXJlbmEvYXNhbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpYmFyZW5hL2JpdG1hcC5oXHUwMDNlXG4mIzQzO1xuJiM0MztfX3dlYWtcbiYjNDM7c3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXBfYWxsb2Moc2l6ZV90IGJpdHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcDtcbiYjNDM7XHRzaXplX3Qgc2l6ZSA9IEJJVFNfVE9fTE9OR19MT05HUyhiaXRzKSAqIHNpemVvZihibXAtXHUwMDNlYml0c1swXSk7XG4mIzQzO1xuJiM0MztcdC8qIEFzc3VtZSBsb25nLWFsaWduZWQgbWFza3MuICovXG4mIzQzO1x0aWYgKGJpdHMgJSBCSVRTX1BFUl9MT05HX0xPTkcpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0Ym1wID0gKHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqKWFyZW5hX21hbGxvYyhzaXplKTtcbiYjNDM7XHRpZiAoIWJtcClcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRibXBfY2xlYXIoYml0cywgYm1wKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGJtcDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7X193ZWFrXG4mIzQzO3ZvaWQgYm1wX2ZyZWUoc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApXG4mIzQzO3tcbiYjNDM7XHRhcmVuYV9mcmVlKGJtcCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fd2Vha1xuJiM0Mzt2b2lkIF9fYm1wX3NldF9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApXG4mIzQzO3tcbiYjNDM7XHRibXAtXHUwMDNlYml0c1tCSVRfV09SRChiaXQpXSB8PSBCSVRfTUFTSyhiaXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztfX3dlYWtcbiYjNDM7dm9pZCBfX2JtcF9jbGVhcl9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApXG4mIzQzO3tcbiYjNDM7XHRibXAtXHUwMDNlYml0c1tCSVRfV09SRChiaXQpXSBcdTAwMjY9IH5CSVRfTUFTSyhiaXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztfX3dlYWtcbiYjNDM7Ym9vbCBibXBfdGVzdF9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYm1wLVx1MDAzZWJpdHNbQklUX1dPUkQoYml0KV0gXHUwMDI2IEJJVF9NQVNLKGJpdCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fd2Vha1xuJiM0Mztib29sIGJtcF90ZXN0X2FuZF9jbGVhcl9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApXG4mIzQzO3tcbiYjNDM7XHR1NjQgdmFsID0gQklUX01BU0soYml0KTtcbiYjNDM7XHR1MzIgaWR4ID0gQklUX1dPUkQoYml0KTtcbiYjNDM7XHR1NjQgb2xkLCBuZXcsIGFjdHVhbDtcbiYjNDM7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0b2xkID0gYm1wLVx1MDAzZWJpdHNbaWR4XTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIShvbGQgXHUwMDI2IHZhbCkpXG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0XHRuZXcgPSBvbGQgXHUwMDI2IH52YWw7XG4mIzQzO1x0XHRhY3R1YWwgPSBjbXB4Y2hnKFx1MDAyNmJtcC1cdTAwM2ViaXRzW2lkeF0sIG9sZCwgbmV3KTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoYWN0dWFsID09IG9sZClcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdH0gd2hpbGUgKGNhbl9sb29wKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztfX3dlYWtcbiYjNDM7Ym9vbCBibXBfdGVzdF9hbmRfc2V0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcClcbiYjNDM7e1xuJiM0MztcdHU2NCB2YWwgPSBCSVRfTUFTSyhiaXQpO1xuJiM0MztcdHUzMiBpZHggPSBCSVRfV09SRChiaXQpO1xuJiM0MztcdHU2NCBvbGQsIG5ldywgYWN0dWFsO1xuJiM0MztcbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHRvbGQgPSBibXAtXHUwMDNlYml0c1tpZHhdO1xuJiM0MztcbiYjNDM7XHRcdGlmICgob2xkIFx1MDAyNiB2YWwpKVxuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0XHRuZXcgPSBvbGQgfCB2YWw7XG4mIzQzO1x0XHRhY3R1YWwgPSBjbXB4Y2hnKFx1MDAyNmJtcC1cdTAwM2ViaXRzW2lkeF0sIG9sZCwgbmV3KTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoYWN0dWFsID09IG9sZClcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHR9IHdoaWxlIChjYW5fbG9vcCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7X193ZWFrXG4mIzQzO3ZvaWQgYm1wX2NsZWFyX2JpdCh1MzIgYml0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcClcbiYjNDM7e1xuJiM0MztcdHU2NCB2YWwgPSBCSVRfTUFTSyhiaXQpO1xuJiM0MztcdHUzMiBpZHggPSBCSVRfV09SRChiaXQpO1xuJiM0MztcdHU2NCBvbGQsIG5ldywgYWN0dWFsO1xuJiM0MztcbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHRvbGQgPSBibXAtXHUwMDNlYml0c1tpZHhdO1xuJiM0MztcdFx0bmV3ID0gb2xkIFx1MDAyNiB+dmFsO1xuJiM0MztcdFx0YWN0dWFsID0gY21weGNoZyhcdTAwMjZibXAtXHUwMDNlYml0c1tpZHhdLCBvbGQsIG5ldyk7XG4mIzQzO1xuJiM0MztcdH0gd2hpbGUgKGFjdHVhbCAhPSBvbGQgXHUwMDI2XHUwMDI2IGNhbl9sb29wKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7X193ZWFrXG4mIzQzO3ZvaWQgYm1wX3NldF9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApXG4mIzQzO3tcbiYjNDM7XHR1NjQgdmFsID0gQklUX01BU0soYml0KTtcbiYjNDM7XHR1MzIgaWR4ID0gQklUX1dPUkQoYml0KTtcbiYjNDM7XHR1NjQgb2xkLCBuZXcsIGFjdHVhbDtcbiYjNDM7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0b2xkID0gYm1wLVx1MDAzZWJpdHNbaWR4XTtcbiYjNDM7XHRcdG5ldyA9IG9sZCB8IHZhbDtcbiYjNDM7XHRcdGFjdHVhbCA9IGNtcHhjaGcoXHUwMDI2Ym1wLVx1MDAzZWJpdHNbaWR4XSwgb2xkLCBuZXcpO1xuJiM0MztcbiYjNDM7XHR9IHdoaWxlIChhY3R1YWwgIT0gb2xkIFx1MDAyNlx1MDAyNiBjYW5fbG9vcCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fd2Vha1xuJiM0Mzt2b2lkIGJtcF9jbGVhcihzaXplX3QgYml0cywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApXG4mIzQzO3tcbiYjNDM7XHRzaXplX3QgbndvcmRzID0gQklUU19UT19MT05HX0xPTkdTKGJpdHMpO1xuJiM0MztcdHZvbGF0aWxlIHUzMiBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSB6ZXJvOyBpIFx1MDAzYyBud29yZHMgXHUwMDI2XHUwMDI2IGNhbl9sb29wOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGJtcC1cdTAwM2ViaXRzW2ldID0gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB1NjQgYm1wX2xhc3Rfd29yZF9tYXNrKHNpemVfdCBiaXRzKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHJlbSA9IGJpdHMgJSBCSVRTX1BFUl9MT05HX0xPTkc7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZW0gPyAoMVVMTCBcdTAwM2NcdTAwM2MgcmVtKSAtIDEgOiB+MFVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7X193ZWFrXG4mIzQzO3ZvaWQgYm1wX2FuZChzaXplX3QgYml0cywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpkc3QsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqc3JjMSwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpzcmMyKVxuJiM0Mzt7XG4mIzQzO1x0c2l6ZV90IG53b3JkcyA9IEJJVFNfVE9fTE9OR19MT05HUyhiaXRzKTtcbiYjNDM7XHR2b2xhdGlsZSB1MzIgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgbndvcmRzIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRkc3QtXHUwMDNlYml0c1tpXSA9IHNyYzEtXHUwMDNlYml0c1tpXSBcdTAwMjYgc3JjMi1cdTAwM2ViaXRzW2ldO1xuJiM0MztcbiYjNDM7XHRpZiAobndvcmRzIFx1MDAyNlx1MDAyNiBiaXRzICUgQklUU19QRVJfTE9OR19MT05HKVxuJiM0MztcdFx0ZHN0LVx1MDAzZWJpdHNbbndvcmRzIC0gMV0gXHUwMDI2PSBibXBfbGFzdF93b3JkX21hc2soYml0cyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fd2Vha1xuJiM0Mzt2b2lkIGJtcF9vcihzaXplX3QgYml0cywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpkc3QsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqc3JjMSwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpzcmMyKVxuJiM0Mzt7XG4mIzQzO1x0c2l6ZV90IG53b3JkcyA9IEJJVFNfVE9fTE9OR19MT05HUyhiaXRzKTtcbiYjNDM7XHR2b2xhdGlsZSB1MzIgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgbndvcmRzIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRkc3QtXHUwMDNlYml0c1tpXSA9IHNyYzEtXHUwMDNlYml0c1tpXSB8IHNyYzItXHUwMDNlYml0c1tpXTtcbiYjNDM7XG4mIzQzO1x0aWYgKG53b3JkcyBcdTAwMjZcdTAwMjYgYml0cyAlIEJJVFNfUEVSX0xPTkdfTE9ORylcbiYjNDM7XHRcdGRzdC1cdTAwM2ViaXRzW253b3JkcyAtIDFdIFx1MDAyNj0gYm1wX2xhc3Rfd29yZF9tYXNrKGJpdHMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztfX3dlYWtcbiYjNDM7Ym9vbCBibXBfZW1wdHkoc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKVxuJiM0Mzt7XG4mIzQzO1x0c2l6ZV90IG53b3JkcyA9IEJJVFNfVE9fTE9OR19MT05HUyhiaXRzKTtcbiYjNDM7XHR2b2xhdGlsZSB1MzIgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgbndvcmRzIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHU2NCBtYXNrID0gKGkgPT0gbndvcmRzIC0gMSkgPyBibXBfbGFzdF93b3JkX21hc2soYml0cykgOiB+MFVMTDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoYm1wLVx1MDAzZWJpdHNbaV0gXHUwMDI2IG1hc2spXG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztfX3dlYWtcbiYjNDM7dm9pZCBibXBfY29weShzaXplX3QgYml0cywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpkc3QsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqc3JjKVxuJiM0Mzt7XG4mIzQzO1x0c2l6ZV90IG53b3JkcyA9IEJJVFNfVE9fTE9OR19MT05HUyhiaXRzKTtcbiYjNDM7XHR2b2xhdGlsZSB1MzIgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgbndvcmRzIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRkc3QtXHUwMDNlYml0c1tpXSA9IHNyYy1cdTAwM2ViaXRzW2ldO1xuJiM0MztcbiYjNDM7XHRpZiAobndvcmRzIFx1MDAyNlx1MDAyNiBiaXRzICUgQklUU19QRVJfTE9OR19MT05HKVxuJiM0MztcdFx0ZHN0LVx1MDAzZWJpdHNbbndvcmRzIC0gMV0gXHUwMDI2PSBibXBfbGFzdF93b3JkX21hc2soYml0cyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fd2Vha1xuJiM0Mztib29sIGJtcF9zdWJzZXQoc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYmlnLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKnNtYWxsKVxuJiM0Mzt7XG4mIzQzO1x0c2l6ZV90IG53b3JkcyA9IEJJVFNfVE9fTE9OR19MT05HUyhiaXRzKTtcbiYjNDM7XHR2b2xhdGlsZSB1MzIgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgbndvcmRzIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHU2NCBtYXNrID0gKGkgPT0gbndvcmRzIC0gMSkgPyBibXBfbGFzdF93b3JkX21hc2soYml0cykgOiB+MFVMTDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAofmJpZy1cdTAwM2ViaXRzW2ldIFx1MDAyNiBzbWFsbC1cdTAwM2ViaXRzW2ldIFx1MDAyNiBtYXNrKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7X193ZWFrXG4mIzQzO2Jvb2wgYm1wX2ludGVyc2VjdHMoc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYXJnMSwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICphcmcyKVxuJiM0Mzt7XG4mIzQzO1x0c2l6ZV90IG53b3JkcyA9IEJJVFNfVE9fTE9OR19MT05HUyhiaXRzKTtcbiYjNDM7XHR2b2xhdGlsZSB1MzIgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgbndvcmRzIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHU2NCBtYXNrID0gKGkgPT0gbndvcmRzIC0gMSkgPyBibXBfbGFzdF93b3JkX21hc2soYml0cykgOiB+MFVMTDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoYXJnMS1cdTAwM2ViaXRzW2ldIFx1MDAyNiBhcmcyLVx1MDAzZWJpdHNbaV0gXHUwMDI2IG1hc2spXG4mIzQzO1x0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztfX3dlYWtcbiYjNDM7dm9pZCBibXBfcHJpbnQoc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKVxuJiM0Mzt7XG4mIzQzO1x0c2l6ZV90IG53b3JkcyA9IEJJVFNfVE9fTE9OR19MT05HUyhiaXRzKTtcbiYjNDM7XHR2b2xhdGlsZSB1MzIgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgbndvcmRzIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRhcmVuYV9zdGRlcnIoXCYjMzQ7JTAxNmxseCBcJiMzNDssIGJtcC1cdTAwM2ViaXRzW2ldKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvY29tbW9uLmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9jb21tb24uYnBmLmNcbmluZGV4IDUwYmU1NzIxM2RmYjhkLi41NjlmMGY2NGQ1MThiMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvY29tbW9uLmJwZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2NvbW1vbi5icGYuY1xuQEAgLTQsOSAmIzQzOzQsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpYmFyZW5hL2FzYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpYmFyZW5hL2J1ZGR5LmhcdTAwM2VcbiBcbi1jb25zdCB2b2xhdGlsZSB1MzIgemVybyA9IDA7XG4tXG4gc3RydWN0IGJ1ZGR5IF9fYXJlbmEgYnVkZHk7XG4mIzQzO3ZvbGF0aWxlIHUzMiB6ZXJvID0gMDtcbiBcbiBpbnQgYXJlbmFfZmxzKF9fdTY0IHdvcmQpXG4ge1xuQEAgLTM4LDYgJiM0MzszNywxMiBAQCBfX3dlYWsgaW50IGFyZW5hX2J1ZGR5X3Jlc2V0KHZvaWQpXG4gXHRyZXR1cm4gYnVkZHlfaW5pdChcdTAwMjZidWRkeSk7XG4gfVxuIFxuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7X193ZWFrIGludCBhcmVuYV9idWRkeV9kZXN0cm95KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYnVkZHlfZGVzdHJveShcdTAwMjZidWRkeSk7XG4mIzQzO31cbiYjNDM7XG4gX193ZWFrIHZvaWQgX19hcmVuYSAqYXJlbmFfbWFsbG9jKHNpemVfdCBzaXplKVxuIHtcbiBcdHJldHVybiBidWRkeV9hbGxvYyhcdTAwMjZidWRkeSwgc2l6ZSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hLmNcbmluZGV4IDYxZWE2OGRjZTQxMDVmLi5iYTVhNWE1MGY3YzA3ZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hLmNcbkBAIC0xNSw3ICYjNDM7MTUsMTIgQEAgc3RhdGljIHZvaWQgcnVuX2xpYmFyZW5hX3Rlc3Qoc3RydWN0IGxpYmFyZW5hICpza2VsLCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csXG4ge1xuIFx0aW50IHJldDtcbiBcbi1cdGlmICghc3Ryc3RyKG5hbWUsIFwmIzM0O3Rlc3RfYnVkZHlcJiMzNDspKSB7XG4mIzQzO1x0aWYgKHN0cnN0cihuYW1lLCBcJiMzNDt0ZXN0X2J1ZGR5XCYjMzQ7KSkge1xuJiM0MztcdFx0LyogQnVkZHkgdGVzdHMgaW5pdGlhbGl6ZSB0aGUgYWxsb2NhdG9yIGRpcmVjdGx5LiAqL1xuJiM0MztcdFx0cmV0ID0gbGliYXJlbmFfcnVuX3Byb2coYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MuYXJlbmFfYnVkZHlfZGVzdHJveSkpO1xuJiM0MztcdFx0aWYgKCFBU1NFUlRfT0socmV0LCBcJiMzNDthcmVuYV9idWRkeV9kZXN0cm95XCYjMzQ7KSlcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdH0gZWxzZSB7XG4gXHRcdHJldCA9IGxpYmFyZW5hX3J1bl9wcm9nKGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmFyZW5hX2J1ZGR5X3Jlc2V0KSk7XG4gXHRcdGlmICghQVNTRVJUX09LKHJldCwgXCYjMzQ7YXJlbmFfYnVkZHlfcmVzZXRcJiMzNDspKVxuIFx0XHRcdHJldHVybjtcbkBAIC0yNCw3ICYjNDM7MjksNiBAQCBzdGF0aWMgdm9pZCBydW5fbGliYXJlbmFfdGVzdChzdHJ1Y3QgbGliYXJlbmEgKnNrZWwsIHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyxcbiBcdHJldCA9IGxpYmFyZW5hX3J1bl9wcm9nKGJwZl9wcm9ncmFtX19mZChwcm9nKSk7XG4gXG4gXHRBU1NFUlRfT0socmV0LCBuYW1lKTtcbi1cbiB9XG4gXG4gc3RhdGljIHZvaWQgKnJ1bl9saWJhcmVuYV9wYXJhbGxlbF9wcm9nKHZvaWQgKmFyZylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmNcbmluZGV4IGQ1OWQ5ZGQxMmVmMmIyLi5mODk3NDA1ZjcwMWRkNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jXG5AQCAtMTcsNyAmIzQzOzE3LDEyIEBAIHN0YXRpYyB2b2lkIHJ1bl9saWJhcmVuYV9hc2FuX3Rlc3Qoc3RydWN0IGxpYmFyZW5hX2FzYW4gKnNrZWwsXG4ge1xuIFx0aW50IHJldDtcbiBcbi1cdGlmICghc3Ryc3RyKG5hbWUsIFwmIzM0O3Rlc3RfYnVkZHlcJiMzNDspKSB7XG4mIzQzO1x0aWYgKHN0cnN0cihuYW1lLCBcJiMzNDt0ZXN0X2J1ZGR5XCYjMzQ7KSkge1xuJiM0MztcdFx0LyogQnVkZHkgdGVzdHMgaW5pdGlhbGl6ZSB0aGUgYWxsb2NhdG9yIGRpcmVjdGx5LiAqL1xuJiM0MztcdFx0cmV0ID0gbGliYXJlbmFfcnVuX3Byb2coYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MuYXJlbmFfYnVkZHlfZGVzdHJveSkpO1xuJiM0MztcdFx0aWYgKCFBU1NFUlRfT0socmV0LCBcJiMzNDthcmVuYV9idWRkeV9kZXN0cm95XCYjMzQ7KSlcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdH0gZWxzZSB7XG4gXHRcdHJldCA9IGxpYmFyZW5hX3J1bl9wcm9nKGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmFyZW5hX2J1ZGR5X3Jlc2V0KSk7XG4gXHRcdGlmICghQVNTRVJUX09LKHJldCwgXCYjMzQ7YXJlbmFfYnVkZHlfcmVzZXRcJiMzNDspKVxuIFx0XHRcdHJldHVybjtcbkBAIC05MCw0ICYjNDM7OTUsMyBAQCB2b2lkIHRlc3RfbGliYXJlbmFfYXNhbih2b2lkKVxuIFxuIFx0cmV0dXJuO1xuIH1cbi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwMjowMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgYW5kIG1vZGlmaWVzIEJQRiBzZWxmdGVzdHMgZm9yIGxpYmFyZW5hIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZSBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGM0YzE0NDI5MmNlNWNlOGMwOTYzMDYwM2YzN2Q4NzhhZjUyN2ZkOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDcgMDI6MDE6MjggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9iaXRtYXAuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2JpdG1hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5jZjZiNjNmNWQ5YTQ1ZgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2JpdG1hcC5oCkBAIC0wLDAgJiM0MzsxLDM0IEBACiYjNDM7I3ByYWdtYSBvbmNlCiYjNDM7CiYjNDM7I2RlZmluZSBCSVRTX1BFUl9CWVRFCQk4CiYjNDM7I2RlZmluZSBCWVRFU19UT19CSVRTKG5iKQkoKG5iKSAqIEJJVFNfUEVSX0JZVEUpCiYjNDM7CiYjNDM7I2RlZmluZSBCSVRTX1BFUl9MT05HX0xPTkcJKHNpemVvZihsb25nIGxvbmcpICogQklUU19QRVJfQllURSkKJiM0MzsjZGVmaW5lIEJJVFNfVE9fTE9OR19MT05HUyhucikJKCgobnIpICYjNDM7IEJJVFNfUEVSX0xPTkdfTE9ORyAtIDEpIC8gQklUU19QRVJfTE9OR19MT05HKQomIzQzOyNkZWZpbmUgQklUX01BU0sobnIpCQkoMVVMTCAmbHQ7Jmx0OyAoKG5yKSAlIEJJVFNfUEVSX0xPTkdfTE9ORykpCiYjNDM7I2RlZmluZSBCSVRfV09SRChucikJCSgobnIpIC8gQklUU19QRVJfTE9OR19MT05HKQomIzQzOwomIzQzO3N0cnVjdCBiaXRtYXAgewomIzQzOwl1NjQgYml0c1swXTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wX2FsbG9jKHNpemVfdCBiaXRzKTsKJiM0Mzt2b2lkIGJtcF9mcmVlKHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKTsKJiM0MzsKJiM0Mzt2b2lkIF9fYm1wX3NldF9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApOwomIzQzO3ZvaWQgX19ibXBfY2xlYXJfYml0KHUzMiBiaXQsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKTsKJiM0Mzt2b2lkIGJtcF9zZXRfYml0KHUzMiBiaXQsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKTsKJiM0Mzt2b2lkIGJtcF9jbGVhcl9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApOwomIzQzO2Jvb2wgYm1wX3Rlc3RfYml0KHUzMiBiaXQsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKTsKJiM0Mztib29sIGJtcF90ZXN0X2FuZF9jbGVhcl9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApOwomIzQzO2Jvb2wgYm1wX3Rlc3RfYW5kX3NldF9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApOwomIzQzOwomIzQzO3ZvaWQgYm1wX2NsZWFyKHNpemVfdCBiaXRzLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcCk7CiYjNDM7dm9pZCBibXBfYW5kKHNpemVfdCBiaXRzLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmRzdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpzcmMxLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKnNyYzIpOwomIzQzO3ZvaWQgYm1wX29yKHNpemVfdCBiaXRzLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmRzdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpzcmMxLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKnNyYzIpOwomIzQzO2Jvb2wgYm1wX2VtcHR5KHNpemVfdCBiaXRzLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcCk7CiYjNDM7dm9pZCBibXBfY29weShzaXplX3QgYml0cywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpkc3QsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqc3JjKTsKJiM0MzsKJiM0Mztib29sIGJtcF9pbnRlcnNlY3RzKHNpemVfdCBiaXRzLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmFyZzEsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYXJnMik7CiYjNDM7Ym9vbCBibXBfc3Vic2V0KHNpemVfdCBiaXRzLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJpZywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpzbWFsbCk7CiYjNDM7dm9pZCBibXBfcHJpbnQoc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2NvbW1vbi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvY29tbW9uLmgKaW5kZXggYTNlYjE2NDFhYzM2ZGYuLjkzMWFjZTlhNDllMmJkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9jb21tb24uaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9jb21tb24uaApAQCAtNDMsNyAmIzQzOzQzLDcgQEAgc3RydWN0IHsKICAqIGltcHJlY2lzZS4gVG8gZm9yY2UgdGhlIHZhcmlhYmxlIHRvIGJlIGltcHJlY2lzZSwgaW5pdGlhbGl6ZSBpdCB3aXRoCiAgKiB0aGUgb3BhcXVlIHZvbGF0aWxlIHZhcmlhYmxlIDAgaW5zdGVhZCBvZiB0aGUgY29uc3RhbnQgMC4KICAqLwotZXh0ZXJuIGNvbnN0IHZvbGF0aWxlIHUzMiB6ZXJvOwomIzQzO3ZvbGF0aWxlIHUzMiB6ZXJvIF9fd2VhazsKIGV4dGVybiB2b2xhdGlsZSB1NjQgYXNhbl92aW9sYXRlZDsKIAogaW50IGFyZW5hX2ZscyhfX3U2NCB3b3JkKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvc3RfYXNhbl9idWRkeS5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9hc2FuX2J1ZGR5LmJwZi5jCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvc3RfYXNhbl9idWRkeS5icGYuYwpyZW5hbWUgdG8gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2FzYW5fYnVkZHkuYnBmLmMKaW5kZXggNjg2Y2FiYTJjNjQzYjUuLjMyNjZhMjhmNTNkNzY4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3N0X2FzYW5fYnVkZHkuYnBmLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2FzYW5fYnVkZHkuYnBmLmMKQEAgLTEyLDcgJiM0MzsxMiw3IEBAIGV4dGVybiBzdHJ1Y3QgYnVkZHkgX19hcmVuYSBidWRkeTsKIAogI2lmZGVmIEJQRl9BUkVOQV9BU0FOCiAKLSNpbmNsdWRlICYjMzQ7c3RfYXNhbl9jb21tb24uaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt0ZXN0X2FzYW5fY29tbW9uLmgmIzM0OwogCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBhc2FuX3Rlc3RfYnVkZHlfb29iX3NpbmdsZShzaXplX3QgYWxsb2Nfc2l6ZSkKIHsKQEAgLTE1NCw3ICYjNDM7MTU0LDggQEAgX193ZWFrIGludCBhc2FuX3Rlc3RfYnVkZHlfb29iKHZvaWQpCiAJc2l6ZV90IHNpemVzW10gPSB7CiAJCTcsIDgsIDE3LCAxOCwgNjQsIDI1NiwgMzE3LCA1MTIsIDEwMjQsCiAJfTsKLQlpbnQgcmV0LCBpOwomIzQzOwlpbnQgcmV0OwomIzQzOwl1MzIgaTsKIAogCXJldCA9IGJ1ZGR5X2luaXQoJmFtcDtidWRkeSk7CiAJaWYgKHJldCkgewpAQCAtMTYzLDYgJiM0MzsxNjQsNyBAQCBfX3dlYWsgaW50IGFzYW5fdGVzdF9idWRkeV9vb2Iodm9pZCkKIAl9CiAKIAlmb3IgKGkgPSB6ZXJvOyBpICZsdDsgc2l6ZW9mKHNpemVzKSAvIHNpemVvZihzaXplc1swXSkgJmFtcDsmYW1wOyBjYW5fbG9vcDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWJhcnJpZXJfdmFyKGkpOwogCQlyZXQgPSBhc2FuX3Rlc3RfYnVkZHlfb29iX3NpbmdsZShzaXplc1tpXSk7CiAJCWlmIChyZXQpIHsKIAkJCWFyZW5hX3N0ZG91dCgmIzM0OyVzOiVkIEZhaWxlZCBmb3Igc2l6ZSAlbHUmIzM0OywgX19mdW5jX18sCkBAIC0xOTAsNyAmIzQzOzE5Miw4IEBAIF9fc3RkZXJyKCYjMzQ7Q2FsbCB0cmFjZTpcbiYjMzQ7CiBfX3dlYWsgaW50IGFzYW5fdGVzdF9idWRkeV91YWYodm9pZCkKIHsKIAlzaXplX3Qgc2l6ZXNbXSA9IHsgMTYsIDMyLCA2NCwgMTI4LCAyNTYsIDUxMiwgMTAyNCwgMTYzODQgfTsKLQlpbnQgcmV0LCBpOwomIzQzOwlpbnQgcmV0OwomIzQzOwl1MzIgaTsKIAogCXJldCA9IGJ1ZGR5X2luaXQoJmFtcDtidWRkeSk7CiAJaWYgKHJldCkgewpAQCAtMTk5LDYgJiM0MzsyMDIsNyBAQCBfX3dlYWsgaW50IGFzYW5fdGVzdF9idWRkeV91YWYodm9pZCkKIAl9CiAKIAlmb3IgKGkgPSB6ZXJvOyBpICZsdDsgc2l6ZW9mKHNpemVzKSAvIHNpemVvZihzaXplc1swXSkgJmFtcDsmYW1wOyBjYW5fbG9vcDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWJhcnJpZXJfdmFyKGkpOwogCQlyZXQgPSBhc2FuX3Rlc3RfYnVkZHlfdWFmX3NpbmdsZShzaXplc1tpXSk7CiAJCWlmIChyZXQpIHsKIAkJCWFyZW5hX3N0ZG91dCgmIzM0OyVzOiVkIEZhaWxlZCBmb3Igc2l6ZSAlbHUmIzM0OywgX19mdW5jX18sCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3N0X2FzYW5fY29tbW9uLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYXNhbl9jb21tb24uaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy9zdF9hc2FuX2NvbW1vbi5oCnJlbmFtZSB0byB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYXNhbl9jb21tb24uaApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2JpdG1hcC5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9iaXRtYXAuYnBmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmU3ZDMyZjQ0ZDY4NzA5Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2JpdG1hcC5icGYuYwpAQCAtMCwwICYjNDM7MSwzOTQgQEAKJiM0MzsjaW5jbHVkZSAmbHQ7bGliYXJlbmEvY29tbW9uLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpYmFyZW5hL2FzYW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGliYXJlbmEvYml0bWFwLmgmZ3Q7CiYjNDM7CiYjNDM7I2RlZmluZSBURVNUX0JJVFMJKDIgKiBCSVRTX1BFUl9MT05HX0xPTkcpCiYjNDM7I2RlZmluZSBURVNUX1dPUkRTCUJJVFNfVE9fTE9OR19MT05HUyhURVNUX0JJVFMpCiYjNDM7I2RlZmluZSBNSURfQklUCQkoQklUU19QRVJfTE9OR19MT05HICYjNDM7IDEpCiYjNDM7I2RlZmluZSBMQVNUX0JJVAkoVEVTVF9CSVRTIC0gMSkKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB0ZXN0X2JtcF9zZXRhbGwoc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApCiYjNDM7ewomIzQzOwl2b2xhdGlsZSB1MzIgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gemVybzsgaSAmbHQ7IFRFU1RfV09SRFMgJmFtcDsmYW1wOyBjYW5fbG9vcDsgaSYjNDM7JiM0MzspCiYjNDM7CQlibXAtJmd0O2JpdHNbaV0gPSB+MFVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO19fd2VhayBpbnQgdGVzdF9iaXRtYXBfYWxsb2NfZnJlZSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXA7CiYjNDM7CiYjNDM7CWJtcCA9IGJtcF9hbGxvYyhURVNUX0JJVFMpOwomIzQzOwlpZiAoIWJtcCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlpZiAoIWJtcF9lbXB0eShURVNUX0JJVFMsIGJtcCkpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJX19ibXBfc2V0X2JpdChMQVNUX0JJVCwgYm1wKTsKJiM0MzsJaWYgKCFibXBfdGVzdF9iaXQoTEFTVF9CSVQsIGJtcCkpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJX19ibXBfY2xlYXJfYml0KExBU1RfQklULCBibXApOwomIzQzOwlpZiAoYm1wX3Rlc3RfYml0KExBU1RfQklULCBibXApKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CiYjNDM7CWJtcF9mcmVlKGJtcCk7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2VycjoKJiM0MzsJYm1wX2ZyZWUoYm1wKTsKJiM0MzsJcmV0dXJuIC1FSU5WQUw7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztfX3dlYWsgaW50IHRlc3RfYml0bWFwX2JpdF9vcHModm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wOwomIzQzOwomIzQzOwlibXAgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTsKJiM0MzsJaWYgKCFibXApCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJX19ibXBfc2V0X2JpdCgwLCBibXApOwomIzQzOwlpZiAoIWJtcF90ZXN0X2JpdCgwLCBibXApKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CiYjNDM7CV9fYm1wX3NldF9iaXQoTUlEX0JJVCwgYm1wKTsKJiM0MzsJaWYgKCFibXBfdGVzdF9iaXQoTUlEX0JJVCwgYm1wKSkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlfX2JtcF9zZXRfYml0KExBU1RfQklULCBibXApOwomIzQzOwlpZiAoIWJtcF90ZXN0X2JpdChMQVNUX0JJVCwgYm1wKSkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlpZiAoYm1wX3Rlc3RfYml0KE1JRF9CSVQgLSAxLCBibXApKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CiYjNDM7CV9fYm1wX2NsZWFyX2JpdChNSURfQklULCBibXApOwomIzQzOwlpZiAoYm1wX3Rlc3RfYml0KE1JRF9CSVQsIGJtcCkpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJaWYgKCFibXBfdGVzdF9iaXQoMCwgYm1wKSkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlpZiAoIWJtcF90ZXN0X2JpdChMQVNUX0JJVCwgYm1wKSkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlfX2JtcF9jbGVhcl9iaXQoMCwgYm1wKTsKJiM0MzsJX19ibXBfY2xlYXJfYml0KExBU1RfQklULCBibXApOwomIzQzOwlpZiAoIWJtcF9lbXB0eShURVNUX0JJVFMsIGJtcCkpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJaWYgKGJtcC0mZ3Q7Yml0c1swXSkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlpZiAoYm1wLSZndDtiaXRzWzFdKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CiYjNDM7CWJtcF9mcmVlKGJtcCk7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2VycjoKJiM0MzsJYm1wX2ZyZWUoYm1wKTsKJiM0MzsJcmV0dXJuIC1FSU5WQUw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHRlc3RfYml0bWFwX3Rlc3RfYW5kX2NsZWFyX3NpbmdsZShzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcCwgc2l6ZV90IGluZCkKJiM0Mzt7CiYjNDM7CWlmIChibXBfdGVzdF9hbmRfY2xlYXJfYml0KGluZCwgYm1wKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJX19ibXBfc2V0X2JpdChpbmQsIGJtcCk7CiYjNDM7CiYjNDM7CWlmICghYm1wX3Rlc3RfYW5kX2NsZWFyX2JpdChpbmQsIGJtcCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChibXBfdGVzdF9iaXQoaW5kLCBibXApKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAoYm1wX3Rlc3RfYW5kX2NsZWFyX2JpdChpbmQsIGJtcCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCB0ZXN0X2JpdG1hcF90ZXN0X2FuZF9zZXRfc2luZ2xlKHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wLCBzaXplX3QgaW5kKQomIzQzO3sKJiM0MzsJaWYgKGJtcF90ZXN0X2FuZF9zZXRfYml0KGluZCwgYm1wKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKCFibXBfdGVzdF9hbmRfc2V0X2JpdChpbmQsIGJtcCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmICghYm1wX3Rlc3RfYml0KGluZCwgYm1wKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJX19ibXBfY2xlYXJfYml0KGluZCwgYm1wKTsKJiM0MzsKJiM0MzsJaWYgKGJtcF90ZXN0X2FuZF9zZXRfYml0KGluZCwgYm1wKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztfX3dlYWsgaW50IHRlc3RfYml0bWFwX3Rlc3RfYW5kX2NsZWFyX2JpdCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXA7CiYjNDM7CiYjNDM7CWJtcCA9IGJtcF9hbGxvYyhURVNUX0JJVFMpOwomIzQzOwlpZiAoIWJtcCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlpZiAoIXRlc3RfYml0bWFwX3Rlc3RfYW5kX2NsZWFyX3NpbmdsZShibXAsIDApKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CiYjNDM7CWlmICghdGVzdF9iaXRtYXBfdGVzdF9hbmRfY2xlYXJfc2luZ2xlKGJtcCwgTUlEX0JJVCkpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJaWYgKCF0ZXN0X2JpdG1hcF90ZXN0X2FuZF9jbGVhcl9zaW5nbGUoYm1wLCBMQVNUX0JJVCkpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJaWYgKCFibXBfZW1wdHkoVEVTVF9CSVRTLCBibXApKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CiYjNDM7CWJtcF9mcmVlKGJtcCk7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2VycjoKJiM0MzsJYm1wX2ZyZWUoYm1wKTsKJiM0MzsJcmV0dXJuIC1FSU5WQUw7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztfX3dlYWsgaW50IHRlc3RfYml0bWFwX3Rlc3RfYW5kX3NldF9iaXQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wOwomIzQzOwomIzQzOwlibXAgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTsKJiM0MzsJaWYgKCFibXApCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJaWYgKCF0ZXN0X2JpdG1hcF90ZXN0X2FuZF9zZXRfc2luZ2xlKGJtcCwgMCkpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJaWYgKCF0ZXN0X2JpdG1hcF90ZXN0X2FuZF9zZXRfc2luZ2xlKGJtcCwgTUlEX0JJVCkpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJaWYgKCF0ZXN0X2JpdG1hcF90ZXN0X2FuZF9zZXRfc2luZ2xlKGJtcCwgTEFTVF9CSVQpKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CiYjNDM7CWJtcF9mcmVlKGJtcCk7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2VycjoKJiM0MzsJYm1wX2ZyZWUoYm1wKTsKJiM0MzsJcmV0dXJuIC1FSU5WQUw7CiYjNDM7fQomIzQzOwomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztfX3dlYWsgaW50IHRlc3RfYml0bWFwX2FuZCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJpdG1hcCBfX2FyZW5hICpzcmMxID0gTlVMTCwgKnNyYzIgPSBOVUxMLCAqZHN0ID0gTlVMTDsKJiM0MzsKJiM0MzsJc3JjMSA9IGJtcF9hbGxvYyhURVNUX0JJVFMpOwomIzQzOwlzcmMyID0gYm1wX2FsbG9jKFRFU1RfQklUUyk7CiYjNDM7CWRzdCA9IGJtcF9hbGxvYyhURVNUX0JJVFMpOwomIzQzOwlpZiAoIXNyYzEgfHwgIXNyYzIgfHwgIWRzdCkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwl0ZXN0X2JtcF9zZXRhbGwoZHN0KTsKJiM0MzsKJiM0MzsJX19ibXBfc2V0X2JpdCgwLCBzcmMxKTsKJiM0MzsJX19ibXBfc2V0X2JpdChNSURfQklULCBzcmMxKTsKJiM0MzsJX19ibXBfc2V0X2JpdChMQVNUX0JJVCwgc3JjMSk7CiYjNDM7CiYjNDM7CV9fYm1wX3NldF9iaXQoTUlEX0JJVCwgc3JjMik7CiYjNDM7CV9fYm1wX3NldF9iaXQoTEFTVF9CSVQsIHNyYzIpOwomIzQzOwomIzQzOwlibXBfYW5kKFRFU1RfQklUUywgZHN0LCBzcmMxLCBzcmMyKTsKJiM0MzsKJiM0MzsJaWYgKGJtcF90ZXN0X2JpdCgwLCBkc3QpKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CWlmICghYm1wX3Rlc3RfYml0KE1JRF9CSVQsIGRzdCkpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsJaWYgKCFibXBfdGVzdF9iaXQoTEFTVF9CSVQsIGRzdCkpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJaWYgKGRzdC0mZ3Q7Yml0c1swXSkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwlpZiAoZHN0LSZndDtiaXRzWzFdICE9IChCSVRfTUFTSyhNSURfQklUKSB8IEJJVF9NQVNLKExBU1RfQklUKSkpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJYm1wX2ZyZWUoc3JjMSk7CiYjNDM7CWJtcF9mcmVlKHNyYzIpOwomIzQzOwlibXBfZnJlZShkc3QpOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnI6CiYjNDM7CWJtcF9mcmVlKHNyYzEpOwomIzQzOwlibXBfZnJlZShzcmMyKTsKJiM0MzsJYm1wX2ZyZWUoZHN0KTsKJiM0MzsJcmV0dXJuIC1FSU5WQUw7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztfX3dlYWsgaW50IHRlc3RfYml0bWFwX29yKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKnNyYzEgPSBOVUxMLCAqc3JjMiA9IE5VTEwsICpkc3QgPSBOVUxMOwomIzQzOwomIzQzOwlzcmMxID0gYm1wX2FsbG9jKFRFU1RfQklUUyk7CiYjNDM7CXNyYzIgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTsKJiM0MzsJZHN0ID0gYm1wX2FsbG9jKFRFU1RfQklUUyk7CiYjNDM7CWlmICghc3JjMSB8fCAhc3JjMiB8fCAhZHN0KQomIzQzOwkJZ290byBlcnI7CiYjNDM7CiYjNDM7CXRlc3RfYm1wX3NldGFsbChkc3QpOwomIzQzOwomIzQzOwlfX2JtcF9zZXRfYml0KDAsIHNyYzEpOwomIzQzOwlfX2JtcF9zZXRfYml0KExBU1RfQklULCBzcmMxKTsKJiM0MzsKJiM0MzsJX19ibXBfc2V0X2JpdChNSURfQklULCBzcmMyKTsKJiM0MzsJX19ibXBfc2V0X2JpdChMQVNUX0JJVCwgc3JjMik7CiYjNDM7CiYjNDM7CWJtcF9vcihURVNUX0JJVFMsIGRzdCwgc3JjMSwgc3JjMik7CiYjNDM7CiYjNDM7CWlmICghYm1wX3Rlc3RfYml0KDAsIGRzdCkpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsJaWYgKCFibXBfdGVzdF9iaXQoTUlEX0JJVCwgZHN0KSkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwlpZiAoIWJtcF90ZXN0X2JpdChMQVNUX0JJVCwgZHN0KSkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlpZiAoZHN0LSZndDtiaXRzWzBdICE9IEJJVF9NQVNLKDApKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CWlmIChkc3QtJmd0O2JpdHNbMV0gIT0gKEJJVF9NQVNLKE1JRF9CSVQpIHwgQklUX01BU0soTEFTVF9CSVQpKSkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlibXBfZnJlZShzcmMxKTsKJiM0MzsJYm1wX2ZyZWUoc3JjMik7CiYjNDM7CWJtcF9mcmVlKGRzdCk7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2VycjoKJiM0MzsJYm1wX2ZyZWUoc3JjMSk7CiYjNDM7CWJtcF9mcmVlKHNyYzIpOwomIzQzOwlibXBfZnJlZShkc3QpOwomIzQzOwlyZXR1cm4gLUVJTlZBTDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO19fd2VhayBpbnQgdGVzdF9iaXRtYXBfc3Vic2V0KHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJpZyA9IE5VTEwsICpzbWFsbCA9IE5VTEw7CiYjNDM7CiYjNDM7CWJpZyA9IGJtcF9hbGxvYyhURVNUX0JJVFMpOwomIzQzOwlzbWFsbCA9IGJtcF9hbGxvYyhURVNUX0JJVFMpOwomIzQzOwlpZiAoIWJpZyB8fCAhc21hbGwpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJaWYgKCFibXBfc3Vic2V0KFRFU1RfQklUUywgYmlnLCBzbWFsbCkpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJX19ibXBfc2V0X2JpdCgwLCBzbWFsbCk7CiYjNDM7CWlmIChibXBfc3Vic2V0KFRFU1RfQklUUywgYmlnLCBzbWFsbCkpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJX19ibXBfc2V0X2JpdCgwLCBiaWcpOwomIzQzOwlpZiAoIWJtcF9zdWJzZXQoVEVTVF9CSVRTLCBiaWcsIHNtYWxsKSkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlfX2JtcF9zZXRfYml0KExBU1RfQklULCBzbWFsbCk7CiYjNDM7CWlmIChibXBfc3Vic2V0KFRFU1RfQklUUywgYmlnLCBzbWFsbCkpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJX19ibXBfc2V0X2JpdChMQVNUX0JJVCwgYmlnKTsKJiM0MzsJX19ibXBfc2V0X2JpdChNSURfQklULCBiaWcpOwomIzQzOwlpZiAoIWJtcF9zdWJzZXQoVEVTVF9CSVRTLCBiaWcsIHNtYWxsKSkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlpZiAoYm1wX3N1YnNldChURVNUX0JJVFMsIHNtYWxsLCBiaWcpKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CiYjNDM7CWJtcF9mcmVlKGJpZyk7CiYjNDM7CWJtcF9mcmVlKHNtYWxsKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyOgomIzQzOwlibXBfZnJlZShiaWcpOwomIzQzOwlibXBfZnJlZShzbWFsbCk7CiYjNDM7CXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X193ZWFrIGludCB0ZXN0X2JpdG1hcF9pbnRlcnNlY3RzKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmFyZzEgPSBOVUxMLCAqYXJnMiA9IE5VTEw7CiYjNDM7CiYjNDM7CWFyZzEgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTsKJiM0MzsJYXJnMiA9IGJtcF9hbGxvYyhURVNUX0JJVFMpOwomIzQzOwlpZiAoIWFyZzEgfHwgIWFyZzIpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJaWYgKGJtcF9pbnRlcnNlY3RzKFRFU1RfQklUUywgYXJnMSwgYXJnMikpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJX19ibXBfc2V0X2JpdCgwLCBhcmcxKTsKJiM0MzsJX19ibXBfc2V0X2JpdChNSURfQklULCBhcmcyKTsKJiM0MzsJaWYgKGJtcF9pbnRlcnNlY3RzKFRFU1RfQklUUywgYXJnMSwgYXJnMikpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJX19ibXBfc2V0X2JpdChMQVNUX0JJVCwgYXJnMSk7CiYjNDM7CV9fYm1wX3NldF9iaXQoTEFTVF9CSVQsIGFyZzIpOwomIzQzOwlpZiAoIWJtcF9pbnRlcnNlY3RzKFRFU1RfQklUUywgYXJnMSwgYXJnMikpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJYm1wX2ZyZWUoYXJnMSk7CiYjNDM7CWJtcF9mcmVlKGFyZzIpOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnI6CiYjNDM7CWJtcF9mcmVlKGFyZzEpOwomIzQzOwlibXBfZnJlZShhcmcyKTsKJiM0MzsJcmV0dXJuIC1FSU5WQUw7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztfX3dlYWsgaW50IHRlc3RfYml0bWFwX2NvcHkodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYXJnMSA9IE5VTEwsICphcmcyID0gTlVMTDsKJiM0MzsKJiM0MzsJYXJnMSA9IGJtcF9hbGxvYyhURVNUX0JJVFMpOwomIzQzOwlhcmcyID0gYm1wX2FsbG9jKFRFU1RfQklUUyk7CiYjNDM7CWlmICghYXJnMSB8fCAhYXJnMikKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlfX2JtcF9zZXRfYml0KDAsIGFyZzEpOwomIzQzOwlfX2JtcF9zZXRfYml0KE1JRF9CSVQsIGFyZzEpOwomIzQzOwomIzQzOwkvKiBNYWtlIHN1cmUgdGhvc2UgZ2V0IG92ZXJ3cml0dGVuLiAqLwomIzQzOwlfX2JtcF9zZXRfYml0KDEsIGFyZzIpOwomIzQzOwlfX2JtcF9zZXRfYml0KE1JRF9CSVQgJiM0MzsgMiwgYXJnMik7CiYjNDM7CiYjNDM7CWJtcF9jb3B5KFRFU1RfQklUUywgYXJnMiwgYXJnMSk7CiYjNDM7CiYjNDM7CS8qIEJpdG1hcHMgYXJlIGVxdWFsIGlmIGEgc3Vic2V0IG9mIGVhY2ggb3RoZXIuICovCiYjNDM7CWlmICghYm1wX3N1YnNldChURVNUX0JJVFMsIGFyZzEsIGFyZzIpIHx8CiYjNDM7CSAgICAhYm1wX3N1YnNldChURVNUX0JJVFMsIGFyZzIsIGFyZzEpKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CiYjNDM7CWJtcF9mcmVlKGFyZzEpOwomIzQzOwlibXBfZnJlZShhcmcyKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyOgomIzQzOwlibXBfZnJlZShhcmcxKTsKJiM0MzsJYm1wX2ZyZWUoYXJnMik7CiYjNDM7CXJldHVybiAtRUlOVkFMOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvc3RfYnVkZHkuYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYnVkZHkuYnBmLmMKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy9zdF9idWRkeS5icGYuYwpyZW5hbWUgdG8gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2J1ZGR5LmJwZi5jCmluZGV4IGI0NWEzMDY4MTZjMGU0Li41NjI4ZjA5ODcwMTIxYyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy9zdF9idWRkeS5icGYuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYnVkZHkuYnBmLmMKQEAgLTE3MSw3ICYjNDM7MTcxLDggQEAgX193ZWFrIGludCB0ZXN0X2J1ZGR5X2FsbG9jX211bHRpcGxlKHZvaWQpCiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiBfX3dlYWsgaW50IHRlc3RfYnVkZHlfYWxpZ25tZW50KHZvaWQpCiB7Ci0JaW50IHJldCwgaTsKJiM0MzsJaW50IHJldDsKJiM0MzsJdTMyIGk7CiAKIAlyZXQgPSBidWRkeV9pbml0KCZhbXA7YnVkZHkpOwogCWlmIChyZXQpCkBAIC0xNzksNiAmIzQzOzE4MCw3IEBAIF9fd2VhayBpbnQgdGVzdF9idWRkeV9hbGlnbm1lbnQodm9pZCkKIAogCS8qIEFsbG9jYXRlIHZhcmlvdXMgc2l6ZXMgYW5kIGNoZWNrIGFsaWdubWVudCAqLwogCWZvciAoaSA9IHplcm87IGkgJmx0OyAxNyAmYW1wOyZhbXA7IGNhbl9sb29wOyBpJiM0MzsmIzQzOykgewomIzQzOwkJYmFycmllcl92YXIoaSk7CiAJCXB0cnNbaV0gPSBidWRkeV9hbGxvYygmYW1wO2J1ZGR5LCBhbGlnbm1lbnRfc2l6ZXNbaV0pOwogCQlpZiAoIXB0cnNbaV0pIHsKIAkJCWFyZW5hX3N0ZG91dCgmIzM0O2FsaWdubWVudCB0ZXN0OiBhbGxvYyBmYWlsZWQgZm9yIHNpemUgJWx1JiMzNDssCkBAIC0xOTgsOCAmIzQzOzIwMCwxMCBAQCBfX3dlYWsgaW50IHRlc3RfYnVkZHlfYWxpZ25tZW50KHZvaWQpCiAJfQogCiAJLyogRnJlZSBhbGwgYWxsb2NhdGlvbnMgKi8KLQlmb3IgKGkgPSB6ZXJvOyBpICZsdDsgMTcgJmFtcDsmYW1wOyBjYW5fbG9vcDsgaSYjNDM7JiM0MzspCiYjNDM7CWZvciAoaSA9IHplcm87IGkgJmx0OyAxNyAmYW1wOyZhbXA7IGNhbl9sb29wOyBpJiM0MzsmIzQzOykgewomIzQzOwkJYmFycmllcl92YXIoaSk7CiAJCWJ1ZGR5X2ZyZWUoJmFtcDtidWRkeSwgcHRyc1tpXSk7CiYjNDM7CX0KIAogCWJ1ZGR5X2Rlc3Ryb3koJmFtcDtidWRkeSk7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9wYXJhbGxlbF9iaXRtYXAuYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfcGFyYWxsZWxfYml0bWFwLmJwZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5lZWMyODcxZTJiMGQxMAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9wYXJhbGxlbF9iaXRtYXAuYnBmLmMKQEAgLTAsMCAmIzQzOzEsMTkwIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IExHUEwtMi4xIE9SIEJTRC0yLUNsYXVzZQomIzQzOwomIzQzOyNpbmNsdWRlICZsdDticGZfYXRvbWljLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpYmFyZW5hL2NvbW1vbi5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaWJhcmVuYS9hc2FuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpYmFyZW5hL2JpdG1hcC5oJmd0OwomIzQzOwomIzQzOyNkZWZpbmUgVEVTVF9CSVRNQVBfVEhSRUFEUwkyCiYjNDM7I2RlZmluZSBURVNUX0JJVE1BUF9CSVRTCSgyICogQklUU19QRVJfTE9OR19MT05HKQomIzQzOyNkZWZpbmUgVEVTVF9CSVRNQVBfU1lOQ19TUElOUwlCUEZfTUFYX0xPT1BTCiYjNDM7I2RlZmluZSBURVNUX0JJVE1BUF9JVEVSUwkxMCAqIDEwMDAgKiAxMDAwCiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYml0bWFwOwomIzQzO3N0YXRpYyB2b2xhdGlsZSB1NjQgc3RhcnRlZDsKJiM0MztzdGF0aWMgdm9sYXRpbGUgYm9vbCB0ZXN0X2Fib3J0OwomIzQzOwomIzQzOy8qCiYjNDM7ICogVGhlIHRlc3QgbmVlZHMgY21weGNoZyBhdG9taWNzIG9uIGFyZW5hIG1lbW9yeS4KJiM0MzsgKi8KJiM0MzsjaWYgZGVmaW5lZChFTkFCTEVfQVRPTUlDU19URVNUUykgJmFtcDsmYW1wOwkJCQkgIFwKJiM0MzsJKGRlZmluZWQoX19UQVJHRVRfQVJDSF9hcm02NCkgfHwgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3g4NikgfHwgXAomIzQzOwkgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3MzOTApIHx8IFwKJiM0MzsJIGRlZmluZWQoX19UQVJHRVRfQVJDSF9wb3dlcnBjKSB8fAkJCQkgIFwKJiM0MzsJIChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfcmlzY3YpICZhbXA7JmFtcDsgX19yaXNjdl94bGVuID09IDY0KSkKJiM0MztzdGF0aWMgYm9vbCBiaXRtYXBfdGVzdHNfZW5hYmxlZCh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGJvb2wgYml0bWFwX3Rlc3RzX2VuYWJsZWQodm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7X193ZWFrCiYjNDM7aW50IGJpdG1hcF93YWl0X2Zvcl9zdGFydCh2b2lkKQomIzQzO3sKJiM0MzsJdTY0IGk7CiYjNDM7CiYjNDM7CV9fc3luY19mZXRjaF9hbmRfYWRkKCZhbXA7c3RhcnRlZCwgMSk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IHplcm87IGkgJmx0OyBURVNUX0JJVE1BUF9TWU5DX1NQSU5TICZhbXA7JmFtcDsgY2FuX2xvb3A7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAodGVzdF9hYm9ydCkKJiM0MzsJCQlyZXR1cm4gLUVJTlRSOwomIzQzOwkJaWYgKHNtcF9sb2FkX2FjcXVpcmUoJmFtcDtzdGFydGVkKSAmZ3Q7PSBURVNUX0JJVE1BUF9USFJFQURTKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXRlc3RfYWJvcnQgPSB0cnVlOwomIzQzOwlyZXR1cm4gLUVUSU1FRE9VVDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBUaGUgdGVzdCBtYWtlcyBzdXJlIHdyaXRlcyBkb24mIzM5O3QgY2xvYmJlciBlYWNoIG90aGVyIGJ5IG92ZXJ3cml0aW5nCiYjNDM7ICogdGhlIHNhbWUgd29yZC4gT25lIHRocmVhZCBhbHdheXMgd3JpdGVzIG9uIGV2ZW4gYml0cywgdGhlIG90aGVyIG9uCiYjNDM7ICogb2Rkcy4gQm90aCBzaG91bGQgYmUgYWJsZSB0byBvcGVyYXRlIG9uIHRoZSBiaXRtYXAgb2JsaXZpb3VzIG9mIHRoZQomIzQzOyAqIG90aGVyJiMzOTtzIG9wZXJhdGlvbnMuCiYjNDM7ICovCiYjNDM7X193ZWFrCiYjNDM7aW50IGJpdG1hcF90ZXN0X2JpdF9zZXF1ZW5jZSh1MzIgYml0KQomIzQzO3sKJiM0MzsJaWYgKGJtcF90ZXN0X2FuZF9jbGVhcl9iaXQoYml0LCBiaXRtYXApKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChibXBfdGVzdF9hbmRfc2V0X2JpdChiaXQsIGJpdG1hcCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKCFibXBfdGVzdF9iaXQoYml0LCBiaXRtYXApKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmICghYm1wX3Rlc3RfYW5kX3NldF9iaXQoYml0LCBiaXRtYXApKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmICghYm1wX3Rlc3RfYml0KGJpdCwgYml0bWFwKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAoIWJtcF90ZXN0X2FuZF9jbGVhcl9iaXQoYml0LCBiaXRtYXApKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmIChibXBfdGVzdF9iaXQoYml0LCBiaXRtYXApKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChibXBfdGVzdF9hbmRfY2xlYXJfYml0KGJpdCwgYml0bWFwKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlibXBfc2V0X2JpdChiaXQsIGJpdG1hcCk7CiYjNDM7CWlmICghYm1wX3Rlc3RfYml0KGJpdCwgYml0bWFwKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlibXBfY2xlYXJfYml0KGJpdCwgYml0bWFwKTsKJiM0MzsJaWYgKGJtcF90ZXN0X2JpdChiaXQsIGJpdG1hcCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJYm1wX3NldF9iaXQoYml0LCBiaXRtYXApOwomIzQzOwlpZiAoIWJtcF90ZXN0X2JpdChiaXQsIGJpdG1hcCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGJpdG1hcF90ZXN0X3Jlc2V0X3NpbmdsZShpbnQgcGFyaXR5KQomIzQzO3sKJiM0MzsJdTMyIGJpdDsKJiM0MzsKJiM0MzsJZm9yIChiaXQgPSBwYXJpdHk7IGJpdCAmbHQ7IFRFU1RfQklUTUFQX0JJVFMgJmFtcDsmYW1wOyBjYW5fbG9vcDsgYml0ICYjNDM7PSAyKQomIzQzOwkJYm1wX2NsZWFyX2JpdChiaXQsIGJpdG1hcCk7CiYjNDM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYml0bWFwX3Rlc3RfY29tbW9uX3NpbmdsZShpbnQgcGFyaXR5KQomIzQzO3sKJiM0MzsJdTMyIGJpdDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZm9yIChiaXQgPSBwYXJpdHk7IGJpdCAmbHQ7IFRFU1RfQklUTUFQX0JJVFMgJmFtcDsmYW1wOyBjYW5fbG9vcDsgYml0ICYjNDM7PSAyKSB7CiYjNDM7CQlpZiAodGVzdF9hYm9ydCkKJiM0MzsJCQlyZXR1cm4gLUVJTlRSOwomIzQzOwomIzQzOwkJcmV0ID0gYml0bWFwX3Rlc3RfYml0X3NlcXVlbmNlKGJpdCk7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJdGVzdF9hYm9ydCA9IHRydWU7CiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBiaXRtYXBfdGVzdF9jb21tb24oaW50IHBhcml0eSkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CXUzMiBpOwomIzQzOwomIzQzOwlhcmVuYV9zdWJwcm9nX2luaXQoKTsKJiM0MzsKJiM0MzsJcmV0ID0gYml0bWFwX3dhaXRfZm9yX3N0YXJ0KCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlmb3IgKGkgPSB6ZXJvOyBpICZsdDsgVEVTVF9CSVRNQVBfSVRFUlMgJmFtcDsmYW1wOyBjYW5fbG9vcDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXJldCA9IGJpdG1hcF90ZXN0X2NvbW1vbl9zaW5nbGUocGFyaXR5KTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCWlmICh0ZXN0X2Fib3J0KQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJYml0bWFwX3Rlc3RfcmVzZXRfc2luZ2xlKHBhcml0eSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykgaW50IHBhcmFsbGVsX3Rlc3RfYml0bWFwX19lbmFibGVkKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gYml0bWFwX3Rlc3RzX2VuYWJsZWQoKSA/IDAgOiAtRU9QTk9UU1VQUDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KSBpbnQgcGFyYWxsZWxfdGVzdF9iaXRtYXBfX2luaXQodm9pZCkKJiM0Mzt7CiYjNDM7CWJpdG1hcCA9IGJtcF9hbGxvYyhURVNUX0JJVE1BUF9CSVRTKTsKJiM0MzsJaWYgKCFiaXRtYXApCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykgaW50IHBhcmFsbGVsX3Rlc3RfYml0bWFwX19maW5pKHZvaWQpCiYjNDM7ewomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJaWYgKCFiaXRtYXApCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJYm1wX2ZyZWUoYml0bWFwKTsKJiM0MzsJYml0bWFwID0gTlVMTDsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KSBpbnQgcGFyYWxsZWxfdGVzdF9iaXRtYXBfXzAodm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBiaXRtYXBfdGVzdF9jb21tb24oMCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykgaW50IHBhcmFsbGVsX3Rlc3RfYml0bWFwX18xKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gYml0bWFwX3Rlc3RfY29tbW9uKDEpOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9wYXJhbGxlbF9zcG1jLmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X3BhcmFsbGVsX3NwbWMuYnBmLmMKaW5kZXggZjA4ZjJhOTJlMTk0NjguLjVmYTk2ZWI3NDA5NTFjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfcGFyYWxsZWxfc3BtYy5icGYuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfcGFyYWxsZWxfc3BtYy5icGYuYwpAQCAtMTU1LDcgJiM0MzsxNTUsNyBAQCBpbnQgc3BtY19xdWllc2NlX29uX293bmVyKHU2NCBlcG9jaCkKIHsKIAl1NjQgaTsKIAotCWJwZl9mb3IoaSwgMCwgVEVTVF9TUE1DX1NZTkNfU1BJTlMpIHsKJiM0MzsJZm9yIChpID0gemVybzsgaSAmbHQ7IFRFU1RfU1BNQ19TWU5DX1NQSU5TICZhbXA7JmFtcDsgY2FuX2xvb3A7IGkmIzQzOyYjNDM7KSB7CiAJCWlmICh0ZXN0X2Fib3J0KQogCQkJcmV0dXJuIC1FSU5UUjsKIAkJaWYgKHNtcF9sb2FkX2FjcXVpcmUoJmFtcDtvd25lcl9lcG9jaCkgJmd0Oz0gZXBvY2gpCkBAIC0xNzUsOCAmIzQzOzE3NSw3IEBAIGludCBzcG1jX3F1aWVzY2Vfb25fc3RlYWxlcih1NjQgZXBvY2gpCiAJaW50IGVyciA9IC1FVElNRURPVVQ7CiAKIAl0YXJnZXQgPSBTVEVBTEVSX0VQT0NIKGVwb2NoKTsKLQlicGZfZm9yKGksIDAsIFRFU1RfU1BNQ19TWU5DX1NQSU5TKSB7Ci0KJiM0MzsJZm9yIChpID0gemVybzsgaSAmbHQ7IFRFU1RfU1BNQ19TWU5DX1NQSU5TICZhbXA7JmFtcDsgY2FuX2xvb3A7IGkmIzQzOyYjNDM7KSB7CiAJCWlmICh0ZXN0X2Fib3J0KSB7CiAJCQllcnIgPSAtRUlOVFI7CiAJCQlicmVhazsKQEAgLTM5MSw3ICYjNDM7MzkwLDcgQEAgaW50IHNwbWNfd2FpdF9mb3Jfc3RlYWxlcnNfdG9fc3RhcnQodTY0IHRhcmdldCkKIHsKIAl1NjQgaTsKIAotCWJwZl9mb3IoaSwgMCwgVEVTVF9TUE1DX1NZTkNfU1BJTlMpIHsKJiM0MzsJZm9yIChpID0gemVybzsgaSAmbHQ7IFRFU1RfU1BNQ19TWU5DX1NQSU5TICZhbXA7JmFtcDsgY2FuX2xvb3A7IGkmIzQzOyYjNDM7KSB7CiAJCWlmICh0ZXN0X2Fib3J0KQogCQkJcmV0dXJuIC1FSU5UUjsKIAkJaWYgKFJFQURfT05DRShzdGVhbGVyc19zdGFydGVkKSAmZ3Q7PSB0YXJnZXQpCkBAIC01MzcsNyAmIzQzOzUzNiw3IEBAIHN0YXRpYyBpbnQgc3BtY193YWl0X2Zvcl9yb3VuZF9zdGVhbHModTY0IHRhcmdldCkKIAogCWFyZW5hX3N1YnByb2dfaW5pdCgpOwogCi0JYnBmX2ZvcihpLCAwLCBURVNUX1NQTUNfU1lOQ19TUElOUykgewomIzQzOwlmb3IgKGkgPSB6ZXJvOyBpICZsdDsgVEVTVF9TUE1DX1NZTkNfU1BJTlMgJmFtcDsmYW1wOyBjYW5fbG9vcDsgaSYjNDM7JiM0MzspIHsKIAkJaWYgKHRlc3RfYWJvcnQpCiAJCQlyZXR1cm4gLUVJTlRSOwogCQlpZiAocm91bmRfc3RlYWxzICZndDs9IHRhcmdldCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYml0bWFwLmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9iaXRtYXAuYnBmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjgwZTgxNDQwMWZiOWVhCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9iaXRtYXAuYnBmLmMKQEAgLTAsMCAmIzQzOzEsMjQ1IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IExHUEwtMi4xIE9SIEJTRC0yLUNsYXVzZQomIzQzOy8qCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI1LTIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI1LTIwMjYgRW1pbCBUc2FsYXBhdGlzICZsdDtlbWlsQGV0c2FsYXBhdGlzLmNvbSZndDsKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGliYXJlbmEvY29tbW9uLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpYmFyZW5hL2FzYW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGliYXJlbmEvYml0bWFwLmgmZ3Q7CiYjNDM7CiYjNDM7X193ZWFrCiYjNDM7c3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXBfYWxsb2Moc2l6ZV90IGJpdHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcDsKJiM0MzsJc2l6ZV90IHNpemUgPSBCSVRTX1RPX0xPTkdfTE9OR1MoYml0cykgKiBzaXplb2YoYm1wLSZndDtiaXRzWzBdKTsKJiM0MzsKJiM0MzsJLyogQXNzdW1lIGxvbmctYWxpZ25lZCBtYXNrcy4gKi8KJiM0MzsJaWYgKGJpdHMgJSBCSVRTX1BFUl9MT05HX0xPTkcpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJYm1wID0gKHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqKWFyZW5hX21hbGxvYyhzaXplKTsKJiM0MzsJaWYgKCFibXApCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJYm1wX2NsZWFyKGJpdHMsIGJtcCk7CiYjNDM7CiYjNDM7CXJldHVybiBibXA7CiYjNDM7fQomIzQzOwomIzQzO19fd2VhawomIzQzO3ZvaWQgYm1wX2ZyZWUoc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApCiYjNDM7ewomIzQzOwlhcmVuYV9mcmVlKGJtcCk7CiYjNDM7fQomIzQzOwomIzQzO19fd2VhawomIzQzO3ZvaWQgX19ibXBfc2V0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcCkKJiM0Mzt7CiYjNDM7CWJtcC0mZ3Q7Yml0c1tCSVRfV09SRChiaXQpXSB8PSBCSVRfTUFTSyhiaXQpOwomIzQzO30KJiM0MzsKJiM0MztfX3dlYWsKJiM0Mzt2b2lkIF9fYm1wX2NsZWFyX2JpdCh1MzIgYml0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcCkKJiM0Mzt7CiYjNDM7CWJtcC0mZ3Q7Yml0c1tCSVRfV09SRChiaXQpXSAmYW1wOz0gfkJJVF9NQVNLKGJpdCk7CiYjNDM7fQomIzQzOwomIzQzO19fd2VhawomIzQzO2Jvb2wgYm1wX3Rlc3RfYml0KHUzMiBiaXQsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKQomIzQzO3sKJiM0MzsJcmV0dXJuIGJtcC0mZ3Q7Yml0c1tCSVRfV09SRChiaXQpXSAmYW1wOyBCSVRfTUFTSyhiaXQpOwomIzQzO30KJiM0MzsKJiM0MztfX3dlYWsKJiM0Mztib29sIGJtcF90ZXN0X2FuZF9jbGVhcl9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApCiYjNDM7ewomIzQzOwl1NjQgdmFsID0gQklUX01BU0soYml0KTsKJiM0MzsJdTMyIGlkeCA9IEJJVF9XT1JEKGJpdCk7CiYjNDM7CXU2NCBvbGQsIG5ldywgYWN0dWFsOwomIzQzOwomIzQzOwlkbyB7CiYjNDM7CQlvbGQgPSBibXAtJmd0O2JpdHNbaWR4XTsKJiM0MzsKJiM0MzsJCWlmICghKG9sZCAmYW1wOyB2YWwpKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJCW5ldyA9IG9sZCAmYW1wOyB+dmFsOwomIzQzOwkJYWN0dWFsID0gY21weGNoZygmYW1wO2JtcC0mZ3Q7Yml0c1tpZHhdLCBvbGQsIG5ldyk7CiYjNDM7CiYjNDM7CQlpZiAoYWN0dWFsID09IG9sZCkKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJfSB3aGlsZSAoY2FuX2xvb3ApOwomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO19fd2VhawomIzQzO2Jvb2wgYm1wX3Rlc3RfYW5kX3NldF9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApCiYjNDM7ewomIzQzOwl1NjQgdmFsID0gQklUX01BU0soYml0KTsKJiM0MzsJdTMyIGlkeCA9IEJJVF9XT1JEKGJpdCk7CiYjNDM7CXU2NCBvbGQsIG5ldywgYWN0dWFsOwomIzQzOwomIzQzOwlkbyB7CiYjNDM7CQlvbGQgPSBibXAtJmd0O2JpdHNbaWR4XTsKJiM0MzsKJiM0MzsJCWlmICgob2xkICZhbXA7IHZhbCkpCiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CQluZXcgPSBvbGQgfCB2YWw7CiYjNDM7CQlhY3R1YWwgPSBjbXB4Y2hnKCZhbXA7Ym1wLSZndDtiaXRzW2lkeF0sIG9sZCwgbmV3KTsKJiM0MzsKJiM0MzsJCWlmIChhY3R1YWwgPT0gb2xkKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJfSB3aGlsZSAoY2FuX2xvb3ApOwomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO19fd2VhawomIzQzO3ZvaWQgYm1wX2NsZWFyX2JpdCh1MzIgYml0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcCkKJiM0Mzt7CiYjNDM7CXU2NCB2YWwgPSBCSVRfTUFTSyhiaXQpOwomIzQzOwl1MzIgaWR4ID0gQklUX1dPUkQoYml0KTsKJiM0MzsJdTY0IG9sZCwgbmV3LCBhY3R1YWw7CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCW9sZCA9IGJtcC0mZ3Q7Yml0c1tpZHhdOwomIzQzOwkJbmV3ID0gb2xkICZhbXA7IH52YWw7CiYjNDM7CQlhY3R1YWwgPSBjbXB4Y2hnKCZhbXA7Ym1wLSZndDtiaXRzW2lkeF0sIG9sZCwgbmV3KTsKJiM0MzsKJiM0MzsJfSB3aGlsZSAoYWN0dWFsICE9IG9sZCAmYW1wOyZhbXA7IGNhbl9sb29wKTsKJiM0Mzt9CiYjNDM7CiYjNDM7X193ZWFrCiYjNDM7dm9pZCBibXBfc2V0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcCkKJiM0Mzt7CiYjNDM7CXU2NCB2YWwgPSBCSVRfTUFTSyhiaXQpOwomIzQzOwl1MzIgaWR4ID0gQklUX1dPUkQoYml0KTsKJiM0MzsJdTY0IG9sZCwgbmV3LCBhY3R1YWw7CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCW9sZCA9IGJtcC0mZ3Q7Yml0c1tpZHhdOwomIzQzOwkJbmV3ID0gb2xkIHwgdmFsOwomIzQzOwkJYWN0dWFsID0gY21weGNoZygmYW1wO2JtcC0mZ3Q7Yml0c1tpZHhdLCBvbGQsIG5ldyk7CiYjNDM7CiYjNDM7CX0gd2hpbGUgKGFjdHVhbCAhPSBvbGQgJmFtcDsmYW1wOyBjYW5fbG9vcCk7CiYjNDM7fQomIzQzOwomIzQzO19fd2VhawomIzQzO3ZvaWQgYm1wX2NsZWFyKHNpemVfdCBiaXRzLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcCkKJiM0Mzt7CiYjNDM7CXNpemVfdCBud29yZHMgPSBCSVRTX1RPX0xPTkdfTE9OR1MoYml0cyk7CiYjNDM7CXZvbGF0aWxlIHUzMiBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSB6ZXJvOyBpICZsdDsgbndvcmRzICZhbXA7JmFtcDsgY2FuX2xvb3A7IGkmIzQzOyYjNDM7KQomIzQzOwkJYm1wLSZndDtiaXRzW2ldID0gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB1NjQgYm1wX2xhc3Rfd29yZF9tYXNrKHNpemVfdCBiaXRzKQomIzQzO3sKJiM0MzsJdTMyIHJlbSA9IGJpdHMgJSBCSVRTX1BFUl9MT05HX0xPTkc7CiYjNDM7CiYjNDM7CXJldHVybiByZW0gPyAoMVVMTCAmbHQ7Jmx0OyByZW0pIC0gMSA6IH4wVUxMOwomIzQzO30KJiM0MzsKJiM0MztfX3dlYWsKJiM0Mzt2b2lkIGJtcF9hbmQoc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqZHN0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKnNyYzEsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqc3JjMikKJiM0Mzt7CiYjNDM7CXNpemVfdCBud29yZHMgPSBCSVRTX1RPX0xPTkdfTE9OR1MoYml0cyk7CiYjNDM7CXZvbGF0aWxlIHUzMiBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSB6ZXJvOyBpICZsdDsgbndvcmRzICZhbXA7JmFtcDsgY2FuX2xvb3A7IGkmIzQzOyYjNDM7KQomIzQzOwkJZHN0LSZndDtiaXRzW2ldID0gc3JjMS0mZ3Q7Yml0c1tpXSAmYW1wOyBzcmMyLSZndDtiaXRzW2ldOwomIzQzOwomIzQzOwlpZiAobndvcmRzICZhbXA7JmFtcDsgYml0cyAlIEJJVFNfUEVSX0xPTkdfTE9ORykKJiM0MzsJCWRzdC0mZ3Q7Yml0c1tud29yZHMgLSAxXSAmYW1wOz0gYm1wX2xhc3Rfd29yZF9tYXNrKGJpdHMpOwomIzQzO30KJiM0MzsKJiM0MztfX3dlYWsKJiM0Mzt2b2lkIGJtcF9vcihzaXplX3QgYml0cywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpkc3QsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqc3JjMSwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpzcmMyKQomIzQzO3sKJiM0MzsJc2l6ZV90IG53b3JkcyA9IEJJVFNfVE9fTE9OR19MT05HUyhiaXRzKTsKJiM0MzsJdm9sYXRpbGUgdTMyIGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IHplcm87IGkgJmx0OyBud29yZHMgJmFtcDsmYW1wOyBjYW5fbG9vcDsgaSYjNDM7JiM0MzspCiYjNDM7CQlkc3QtJmd0O2JpdHNbaV0gPSBzcmMxLSZndDtiaXRzW2ldIHwgc3JjMi0mZ3Q7Yml0c1tpXTsKJiM0MzsKJiM0MzsJaWYgKG53b3JkcyAmYW1wOyZhbXA7IGJpdHMgJSBCSVRTX1BFUl9MT05HX0xPTkcpCiYjNDM7CQlkc3QtJmd0O2JpdHNbbndvcmRzIC0gMV0gJmFtcDs9IGJtcF9sYXN0X3dvcmRfbWFzayhiaXRzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7X193ZWFrCiYjNDM7Ym9vbCBibXBfZW1wdHkoc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKQomIzQzO3sKJiM0MzsJc2l6ZV90IG53b3JkcyA9IEJJVFNfVE9fTE9OR19MT05HUyhiaXRzKTsKJiM0MzsJdm9sYXRpbGUgdTMyIGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IHplcm87IGkgJmx0OyBud29yZHMgJmFtcDsmYW1wOyBjYW5fbG9vcDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXU2NCBtYXNrID0gKGkgPT0gbndvcmRzIC0gMSkgPyBibXBfbGFzdF93b3JkX21hc2soYml0cykgOiB+MFVMTDsKJiM0MzsKJiM0MzsJCWlmIChibXAtJmd0O2JpdHNbaV0gJmFtcDsgbWFzaykKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO19fd2VhawomIzQzO3ZvaWQgYm1wX2NvcHkoc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqZHN0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKnNyYykKJiM0Mzt7CiYjNDM7CXNpemVfdCBud29yZHMgPSBCSVRTX1RPX0xPTkdfTE9OR1MoYml0cyk7CiYjNDM7CXZvbGF0aWxlIHUzMiBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSB6ZXJvOyBpICZsdDsgbndvcmRzICZhbXA7JmFtcDsgY2FuX2xvb3A7IGkmIzQzOyYjNDM7KQomIzQzOwkJZHN0LSZndDtiaXRzW2ldID0gc3JjLSZndDtiaXRzW2ldOwomIzQzOwomIzQzOwlpZiAobndvcmRzICZhbXA7JmFtcDsgYml0cyAlIEJJVFNfUEVSX0xPTkdfTE9ORykKJiM0MzsJCWRzdC0mZ3Q7Yml0c1tud29yZHMgLSAxXSAmYW1wOz0gYm1wX2xhc3Rfd29yZF9tYXNrKGJpdHMpOwomIzQzO30KJiM0MzsKJiM0MztfX3dlYWsKJiM0Mztib29sIGJtcF9zdWJzZXQoc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYmlnLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKnNtYWxsKQomIzQzO3sKJiM0MzsJc2l6ZV90IG53b3JkcyA9IEJJVFNfVE9fTE9OR19MT05HUyhiaXRzKTsKJiM0MzsJdm9sYXRpbGUgdTMyIGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IHplcm87IGkgJmx0OyBud29yZHMgJmFtcDsmYW1wOyBjYW5fbG9vcDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXU2NCBtYXNrID0gKGkgPT0gbndvcmRzIC0gMSkgPyBibXBfbGFzdF93b3JkX21hc2soYml0cykgOiB+MFVMTDsKJiM0MzsKJiM0MzsJCWlmICh+YmlnLSZndDtiaXRzW2ldICZhbXA7IHNtYWxsLSZndDtiaXRzW2ldICZhbXA7IG1hc2spCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MztfX3dlYWsKJiM0Mztib29sIGJtcF9pbnRlcnNlY3RzKHNpemVfdCBiaXRzLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmFyZzEsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYXJnMikKJiM0Mzt7CiYjNDM7CXNpemVfdCBud29yZHMgPSBCSVRTX1RPX0xPTkdfTE9OR1MoYml0cyk7CiYjNDM7CXZvbGF0aWxlIHUzMiBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSB6ZXJvOyBpICZsdDsgbndvcmRzICZhbXA7JmFtcDsgY2FuX2xvb3A7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl1NjQgbWFzayA9IChpID09IG53b3JkcyAtIDEpID8gYm1wX2xhc3Rfd29yZF9tYXNrKGJpdHMpIDogfjBVTEw7CiYjNDM7CiYjNDM7CQlpZiAoYXJnMS0mZ3Q7Yml0c1tpXSAmYW1wOyBhcmcyLSZndDtiaXRzW2ldICZhbXA7IG1hc2spCiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MztfX3dlYWsKJiM0Mzt2b2lkIGJtcF9wcmludChzaXplX3QgYml0cywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApCiYjNDM7ewomIzQzOwlzaXplX3QgbndvcmRzID0gQklUU19UT19MT05HX0xPTkdTKGJpdHMpOwomIzQzOwl2b2xhdGlsZSB1MzIgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gemVybzsgaSAmbHQ7IG53b3JkcyAmYW1wOyZhbXA7IGNhbl9sb29wOyBpJiM0MzsmIzQzOykKJiM0MzsJCWFyZW5hX3N0ZGVycigmIzM0OyUwMTZsbHggJiMzNDssIGJtcC0mZ3Q7Yml0c1tpXSk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9jb21tb24uYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2NvbW1vbi5icGYuYwppbmRleCA1MGJlNTcyMTNkZmI4ZC4uNTY5ZjBmNjRkNTE4YjMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvY29tbW9uLmJwZi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvY29tbW9uLmJwZi5jCkBAIC00LDkgJiM0Mzs0LDggQEAKICNpbmNsdWRlICZsdDtsaWJhcmVuYS9hc2FuLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGliYXJlbmEvYnVkZHkuaCZndDsKIAotY29uc3Qgdm9sYXRpbGUgdTMyIHplcm8gPSAwOwotCiBzdHJ1Y3QgYnVkZHkgX19hcmVuYSBidWRkeTsKJiM0Mzt2b2xhdGlsZSB1MzIgemVybyA9IDA7CiAKIGludCBhcmVuYV9mbHMoX191NjQgd29yZCkKIHsKQEAgLTM4LDYgJiM0MzszNywxMiBAQCBfX3dlYWsgaW50IGFyZW5hX2J1ZGR5X3Jlc2V0KHZvaWQpCiAJcmV0dXJuIGJ1ZGR5X2luaXQoJmFtcDtidWRkeSk7CiB9CiAKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X193ZWFrIGludCBhcmVuYV9idWRkeV9kZXN0cm95KHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gYnVkZHlfZGVzdHJveSgmYW1wO2J1ZGR5KTsKJiM0Mzt9CiYjNDM7CiBfX3dlYWsgdm9pZCBfX2FyZW5hICphcmVuYV9tYWxsb2Moc2l6ZV90IHNpemUpCiB7CiAJcmV0dXJuIGJ1ZGR5X2FsbG9jKCZhbXA7YnVkZHksIHNpemUpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hLmMKaW5kZXggNjFlYTY4ZGNlNDEwNWYuLmJhNWE1YTUwZjdjMDdkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hLmMKQEAgLTE1LDcgJiM0MzsxNSwxMiBAQCBzdGF0aWMgdm9pZCBydW5fbGliYXJlbmFfdGVzdChzdHJ1Y3QgbGliYXJlbmEgKnNrZWwsIHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZywKIHsKIAlpbnQgcmV0OwogCi0JaWYgKCFzdHJzdHIobmFtZSwgJiMzNDt0ZXN0X2J1ZGR5JiMzNDspKSB7CiYjNDM7CWlmIChzdHJzdHIobmFtZSwgJiMzNDt0ZXN0X2J1ZGR5JiMzNDspKSB7CiYjNDM7CQkvKiBCdWRkeSB0ZXN0cyBpbml0aWFsaXplIHRoZSBhbGxvY2F0b3IgZGlyZWN0bHkuICovCiYjNDM7CQlyZXQgPSBsaWJhcmVuYV9ydW5fcHJvZyhicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3MuYXJlbmFfYnVkZHlfZGVzdHJveSkpOwomIzQzOwkJaWYgKCFBU1NFUlRfT0socmV0LCAmIzM0O2FyZW5hX2J1ZGR5X2Rlc3Ryb3kmIzM0OykpCiYjNDM7CQkJcmV0dXJuOwomIzQzOwl9IGVsc2UgewogCQlyZXQgPSBsaWJhcmVuYV9ydW5fcHJvZyhicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3MuYXJlbmFfYnVkZHlfcmVzZXQpKTsKIAkJaWYgKCFBU1NFUlRfT0socmV0LCAmIzM0O2FyZW5hX2J1ZGR5X3Jlc2V0JiMzNDspKQogCQkJcmV0dXJuOwpAQCAtMjQsNyAmIzQzOzI5LDYgQEAgc3RhdGljIHZvaWQgcnVuX2xpYmFyZW5hX3Rlc3Qoc3RydWN0IGxpYmFyZW5hICpza2VsLCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csCiAJcmV0ID0gbGliYXJlbmFfcnVuX3Byb2coYnBmX3Byb2dyYW1fX2ZkKHByb2cpKTsKIAogCUFTU0VSVF9PSyhyZXQsIG5hbWUpOwotCiB9CiAKIHN0YXRpYyB2b2lkICpydW5fbGliYXJlbmFfcGFyYWxsZWxfcHJvZyh2b2lkICphcmcpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmMKaW5kZXggZDU5ZDlkZDEyZWYyYjIuLmY4OTc0MDVmNzAxZGQ1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jCkBAIC0xNyw3ICYjNDM7MTcsMTIgQEAgc3RhdGljIHZvaWQgcnVuX2xpYmFyZW5hX2FzYW5fdGVzdChzdHJ1Y3QgbGliYXJlbmFfYXNhbiAqc2tlbCwKIHsKIAlpbnQgcmV0OwogCi0JaWYgKCFzdHJzdHIobmFtZSwgJiMzNDt0ZXN0X2J1ZGR5JiMzNDspKSB7CiYjNDM7CWlmIChzdHJzdHIobmFtZSwgJiMzNDt0ZXN0X2J1ZGR5JiMzNDspKSB7CiYjNDM7CQkvKiBCdWRkeSB0ZXN0cyBpbml0aWFsaXplIHRoZSBhbGxvY2F0b3IgZGlyZWN0bHkuICovCiYjNDM7CQlyZXQgPSBsaWJhcmVuYV9ydW5fcHJvZyhicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3MuYXJlbmFfYnVkZHlfZGVzdHJveSkpOwomIzQzOwkJaWYgKCFBU1NFUlRfT0socmV0LCAmIzM0O2FyZW5hX2J1ZGR5X2Rlc3Ryb3kmIzM0OykpCiYjNDM7CQkJcmV0dXJuOwomIzQzOwl9IGVsc2UgewogCQlyZXQgPSBsaWJhcmVuYV9ydW5fcHJvZyhicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3MuYXJlbmFfYnVkZHlfcmVzZXQpKTsKIAkJaWYgKCFBU1NFUlRfT0socmV0LCAmIzM0O2FyZW5hX2J1ZGR5X3Jlc2V0JiMzNDspKQogCQkJcmV0dXJuOwpAQCAtOTAsNCAmIzQzOzk1LDMgQEAgdm9pZCB0ZXN0X2xpYmFyZW5hX2FzYW4odm9pZCkKIAogCXJldHVybjsKIH0KLQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwMjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzY4NgoJCQkJCQkJb3V0cHV0OiA3NQoJCQkJCQkJdGhvdWdodHM6IDU3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpczogbGliYXJlbmEgU2VsZnRlc3QgTW9kaWZpY2F0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCBoZXJlLCBhbmQgaXQgc2VlbXMgdG8gYmUgc29sZWx5IGZvY3VzZWQgb24gbW9kaWZ5aW5nIHRoZSBCUEYgc2VsZnRlc3RzIHJlbGF0ZWQgdG8gbGliYXJlbmEuIEkgc2VlIGEgbGlzdCBvZiBmaWxlcyB0aGF0IGhhdmUgYmVlbiB0b3VjaGVkOiBgYml0bWFwLmhgLCBgY29tbW9uLmhgLCByZW5hbWVkIGAuYnBmLmNgIGZpbGVzIChlLmcuLCBgc3RfYXNhbl9idWRkeS5icGYuY2AgdG8gYHRlc3RfYXNhbl9idWRkeS5icGYuY2AsIGFuZCBzbyBvbiksIGFuZCBzb21lIGFzc29jaWF0ZWQgQyBmaWxlcy4gVGhlIGltcG9ydGFudCBiaXQgaXMgdGhhdCAqZXZlcnl0aGluZyogaXMgdW5kZXIgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9gLgoKTm93LCBnaXZlbiBteSBleHBlcnRpc2UsIEkga25vdyBpbW1lZGlhdGVseSB0aGF0IHNlbGZ0ZXN0cyBhcmUganVzdCB0aGF0IOKAkyB0ZXN0cy4gVGhleSYjMzk7cmUgZGVzaWduZWQgdG8gdmFsaWRhdGUgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgY29kZSwgYnV0IHRoZXkmIzM5O3JlICpub3QqIHBhcnQgb2YgdGhlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhbnkgb2YgdGhlIGFyY2hpdGVjdHVyYWwgY29kZS4gVGhleSYjMzk7cmUgdXNlci1zcGFjZSBwcm9ncmFtcyBvciBCUEYgcHJvZ3JhbXMsIGZvciB0ZXN0aW5nIHRoZSBrZXJuZWwuIFRoZXkgYXJlIG5vdCBpbnRlbmRlZCB0byBtb2RpZnkgb3IgY2hhbmdlIHRoZSBrZXJuZWwgaXRzZWxmLCBzbyB0aGVyZSYjMzk7cyBubyBpbmhlcmVudCByaXNrIG9mIGludHJvZHVjaW5nIG5ldyBidWdzIHRvIHRoZSBjb3JlIHN5c3RlbSB2aWEgdGhlc2UgY2hhbmdlcy4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTttIGNoZWNraW5nIGFnYWluIHRvIGVuc3VyZSBubyBmaWxlcyB3ZXJlIG1vZGlmaWVkIGluIG90aGVyIGRpcmVjdG9yaWVzLiBObywgYWxsIGZpbGVzIGFyZSB1bmRlciBgL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9gLCBhcyBjb25maXJtZWQgYnkgdGhlIGxpc3QuCgpUaGVyZWZvcmUsIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGlzIGlzIGEgZGVmaW5pdGUgJiMzNDtXb3J0aEZ1enppbmc9ZmFsc2UmIzM0OyBzY2VuYXJpby4gVGhlIHBhdGNoIGl0c2VsZiBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBzdXJmYWNlIGFyZWEgZm9yIGZ1enppbmcgY29yZSBrZXJuZWwgY29tcG9uZW50cy4gSXQmIzM5O3Mgc3RyaWN0bHkgYWJvdXQgaW1wcm92aW5nIHRlc3QgY292ZXJhZ2Ugb3IgYWRkaW5nIG5ldyB0ZXN0cyB0byB0aGUgbGliYXJlbmEgZnJhbWV3b3JrIHdpdGhpbiB0aGUgQlBGIHNlbGZ0ZXN0cy4KCkFscmlnaHQsIEkmIzM5O2xsIGdvIGFoZWFkIGFuZCB1cGRhdGUgdGhlIHJlc3VsdHMgdG9vbCB3aXRoIHRoaXMgYXNzZXNzbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAwMjowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBhbmQgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyBmb3IgbGliYXJlbmEgdW5kZXIgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGFkZHMgYW5kIG1vZGlmaWVzIEJQRiBzZWxmdGVzdHMgZm9yIGxpYmFyZW5hIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZSBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDAyOjAxOjMwLjY3NTc3MzkzN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMjc0ODY4MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBhbmQgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyBmb3IgbGliYXJlbmEgdW5kZXIgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwMjowMTozMC42NzU3Nzk5MTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3NTU1NzM4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDhjNGMxNDQyOTJjZTVjZThjMDk2MzA2MDNmMzdkODc4YWY1MjdmZDhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdWwgNyAwMjowMToyOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9iaXRtYXAuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2JpdG1hcC5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uY2Y2YjYzZjVkOWE0NWZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvYml0bWFwLmhcXG5AQCAtMCwwICsxLDM0IEBAXFxuKyNwcmFnbWEgb25jZVxcbitcXG4rI2RlZmluZSBCSVRTX1BFUl9CWVRFXFx0XFx0OFxcbisjZGVmaW5lIEJZVEVTX1RPX0JJVFMobmIpXFx0KChuYikgKiBCSVRTX1BFUl9CWVRFKVxcbitcXG4rI2RlZmluZSBCSVRTX1BFUl9MT05HX0xPTkdcXHQoc2l6ZW9mKGxvbmcgbG9uZykgKiBCSVRTX1BFUl9CWVRFKVxcbisjZGVmaW5lIEJJVFNfVE9fTE9OR19MT05HUyhucilcXHQoKChucikgKyBCSVRTX1BFUl9MT05HX0xPTkcgLSAxKSAvIEJJVFNfUEVSX0xPTkdfTE9ORylcXG4rI2RlZmluZSBCSVRfTUFTSyhucilcXHRcXHQoMVVMTCBcXHUwMDNjXFx1MDAzYyAoKG5yKSAlIEJJVFNfUEVSX0xPTkdfTE9ORykpXFxuKyNkZWZpbmUgQklUX1dPUkQobnIpXFx0XFx0KChucikgLyBCSVRTX1BFUl9MT05HX0xPTkcpXFxuK1xcbitzdHJ1Y3QgYml0bWFwIHtcXG4rXFx0dTY0IGJpdHNbMF07XFxuK307XFxuK1xcbitzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcF9hbGxvYyhzaXplX3QgYml0cyk7XFxuK3ZvaWQgYm1wX2ZyZWUoc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApO1xcbitcXG4rdm9pZCBfX2JtcF9zZXRfYml0KHUzMiBiaXQsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKTtcXG4rdm9pZCBfX2JtcF9jbGVhcl9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApO1xcbit2b2lkIGJtcF9zZXRfYml0KHUzMiBiaXQsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKTtcXG4rdm9pZCBibXBfY2xlYXJfYml0KHUzMiBiaXQsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKTtcXG4rYm9vbCBibXBfdGVzdF9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApO1xcbitib29sIGJtcF90ZXN0X2FuZF9jbGVhcl9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApO1xcbitib29sIGJtcF90ZXN0X2FuZF9zZXRfYml0KHUzMiBiaXQsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKTtcXG4rXFxuK3ZvaWQgYm1wX2NsZWFyKHNpemVfdCBiaXRzLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcCk7XFxuK3ZvaWQgYm1wX2FuZChzaXplX3QgYml0cywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpkc3QsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqc3JjMSwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpzcmMyKTtcXG4rdm9pZCBibXBfb3Ioc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqZHN0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKnNyYzEsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqc3JjMik7XFxuK2Jvb2wgYm1wX2VtcHR5KHNpemVfdCBiaXRzLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcCk7XFxuK3ZvaWQgYm1wX2NvcHkoc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqZHN0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKnNyYyk7XFxuK1xcbitib29sIGJtcF9pbnRlcnNlY3RzKHNpemVfdCBiaXRzLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmFyZzEsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYXJnMik7XFxuK2Jvb2wgYm1wX3N1YnNldChzaXplX3QgYml0cywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpiaWcsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqc21hbGwpO1xcbit2b2lkIGJtcF9wcmludChzaXplX3QgYml0cywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9jb21tb24uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2NvbW1vbi5oXFxuaW5kZXggYTNlYjE2NDFhYzM2ZGYuLjkzMWFjZTlhNDllMmJkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2NvbW1vbi5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvY29tbW9uLmhcXG5AQCAtNDMsNyArNDMsNyBAQCBzdHJ1Y3Qge1xcbiAgKiBpbXByZWNpc2UuIFRvIGZvcmNlIHRoZSB2YXJpYWJsZSB0byBiZSBpbXByZWNpc2UsIGluaXRpYWxpemUgaXQgd2l0aFxcbiAgKiB0aGUgb3BhcXVlIHZvbGF0aWxlIHZhcmlhYmxlIDAgaW5zdGVhZCBvZiB0aGUgY29uc3RhbnQgMC5cXG4gICovXFxuLWV4dGVybiBjb25zdCB2b2xhdGlsZSB1MzIgemVybztcXG4rdm9sYXRpbGUgdTMyIHplcm8gX193ZWFrO1xcbiBleHRlcm4gdm9sYXRpbGUgdTY0IGFzYW5fdmlvbGF0ZWQ7XFxuIFxcbiBpbnQgYXJlbmFfZmxzKF9fdTY0IHdvcmQpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3N0X2FzYW5fYnVkZHkuYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYXNhbl9idWRkeS5icGYuY1xcbnNpbWlsYXJpdHkgaW5kZXggOTglXFxucmVuYW1lIGZyb20gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy9zdF9hc2FuX2J1ZGR5LmJwZi5jXFxucmVuYW1lIHRvIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9hc2FuX2J1ZGR5LmJwZi5jXFxuaW5kZXggNjg2Y2FiYTJjNjQzYjUuLjMyNjZhMjhmNTNkNzY4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvc3RfYXNhbl9idWRkeS5icGYuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9hc2FuX2J1ZGR5LmJwZi5jXFxuQEAgLTEyLDcgKzEyLDcgQEAgZXh0ZXJuIHN0cnVjdCBidWRkeSBfX2FyZW5hIGJ1ZGR5O1xcbiBcXG4gI2lmZGVmIEJQRl9BUkVOQV9BU0FOXFxuIFxcbi0jaW5jbHVkZSBcXFwic3RfYXNhbl9jb21tb24uaFxcXCJcXG4rI2luY2x1ZGUgXFxcInRlc3RfYXNhbl9jb21tb24uaFxcXCJcXG4gXFxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGFzYW5fdGVzdF9idWRkeV9vb2Jfc2luZ2xlKHNpemVfdCBhbGxvY19zaXplKVxcbiB7XFxuQEAgLTE1NCw3ICsxNTQsOCBAQCBfX3dlYWsgaW50IGFzYW5fdGVzdF9idWRkeV9vb2Iodm9pZClcXG4gXFx0c2l6ZV90IHNpemVzW10gPSB7XFxuIFxcdFxcdDcsIDgsIDE3LCAxOCwgNjQsIDI1NiwgMzE3LCA1MTIsIDEwMjQsXFxuIFxcdH07XFxuLVxcdGludCByZXQsIGk7XFxuK1xcdGludCByZXQ7XFxuK1xcdHUzMiBpO1xcbiBcXG4gXFx0cmV0ID0gYnVkZHlfaW5pdChcXHUwMDI2YnVkZHkpO1xcbiBcXHRpZiAocmV0KSB7XFxuQEAgLTE2Myw2ICsxNjQsNyBAQCBfX3dlYWsgaW50IGFzYW5fdGVzdF9idWRkeV9vb2Iodm9pZClcXG4gXFx0fVxcbiBcXG4gXFx0Zm9yIChpID0gemVybzsgaSBcXHUwMDNjIHNpemVvZihzaXplcykgLyBzaXplb2Yoc2l6ZXNbMF0pIFxcdTAwMjZcXHUwMDI2IGNhbl9sb29wOyBpKyspIHtcXG4rXFx0XFx0YmFycmllcl92YXIoaSk7XFxuIFxcdFxcdHJldCA9IGFzYW5fdGVzdF9idWRkeV9vb2Jfc2luZ2xlKHNpemVzW2ldKTtcXG4gXFx0XFx0aWYgKHJldCkge1xcbiBcXHRcXHRcXHRhcmVuYV9zdGRvdXQoXFxcIiVzOiVkIEZhaWxlZCBmb3Igc2l6ZSAlbHVcXFwiLCBfX2Z1bmNfXyxcXG5AQCAtMTkwLDcgKzE5Miw4IEBAIF9fc3RkZXJyKFxcXCJDYWxsIHRyYWNlOlxcXFxuXFxcIlxcbiBfX3dlYWsgaW50IGFzYW5fdGVzdF9idWRkeV91YWYodm9pZClcXG4ge1xcbiBcXHRzaXplX3Qgc2l6ZXNbXSA9IHsgMTYsIDMyLCA2NCwgMTI4LCAyNTYsIDUxMiwgMTAyNCwgMTYzODQgfTtcXG4tXFx0aW50IHJldCwgaTtcXG4rXFx0aW50IHJldDtcXG4rXFx0dTMyIGk7XFxuIFxcbiBcXHRyZXQgPSBidWRkeV9pbml0KFxcdTAwMjZidWRkeSk7XFxuIFxcdGlmIChyZXQpIHtcXG5AQCAtMTk5LDYgKzIwMiw3IEBAIF9fd2VhayBpbnQgYXNhbl90ZXN0X2J1ZGR5X3VhZih2b2lkKVxcbiBcXHR9XFxuIFxcbiBcXHRmb3IgKGkgPSB6ZXJvOyBpIFxcdTAwM2Mgc2l6ZW9mKHNpemVzKSAvIHNpemVvZihzaXplc1swXSkgXFx1MDAyNlxcdTAwMjYgY2FuX2xvb3A7IGkrKykge1xcbitcXHRcXHRiYXJyaWVyX3ZhcihpKTtcXG4gXFx0XFx0cmV0ID0gYXNhbl90ZXN0X2J1ZGR5X3VhZl9zaW5nbGUoc2l6ZXNbaV0pO1xcbiBcXHRcXHRpZiAocmV0KSB7XFxuIFxcdFxcdFxcdGFyZW5hX3N0ZG91dChcXFwiJXM6JWQgRmFpbGVkIGZvciBzaXplICVsdVxcXCIsIF9fZnVuY19fLFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3N0X2FzYW5fY29tbW9uLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYXNhbl9jb21tb24uaFxcbnNpbWlsYXJpdHkgaW5kZXggMTAwJVxcbnJlbmFtZSBmcm9tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvc3RfYXNhbl9jb21tb24uaFxcbnJlbmFtZSB0byB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYXNhbl9jb21tb24uaFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYml0bWFwLmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2JpdG1hcC5icGYuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmU3ZDMyZjQ0ZDY4NzA5XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9iaXRtYXAuYnBmLmNcXG5AQCAtMCwwICsxLDM5NCBAQFxcbisjaW5jbHVkZSBcXHUwMDNjbGliYXJlbmEvY29tbW9uLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGliYXJlbmEvYXNhbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGliYXJlbmEvYml0bWFwLmhcXHUwMDNlXFxuK1xcbisjZGVmaW5lIFRFU1RfQklUU1xcdCgyICogQklUU19QRVJfTE9OR19MT05HKVxcbisjZGVmaW5lIFRFU1RfV09SRFNcXHRCSVRTX1RPX0xPTkdfTE9OR1MoVEVTVF9CSVRTKVxcbisjZGVmaW5lIE1JRF9CSVRcXHRcXHQoQklUU19QRVJfTE9OR19MT05HICsgMSlcXG4rI2RlZmluZSBMQVNUX0JJVFxcdChURVNUX0JJVFMgLSAxKVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9ibXBfc2V0YWxsKHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKVxcbit7XFxuK1xcdHZvbGF0aWxlIHUzMiBpO1xcbitcXG4rXFx0Zm9yIChpID0gemVybzsgaSBcXHUwMDNjIFRFU1RfV09SRFMgXFx1MDAyNlxcdTAwMjYgY2FuX2xvb3A7IGkrKylcXG4rXFx0XFx0Ym1wLVxcdTAwM2ViaXRzW2ldID0gfjBVTEw7XFxuK31cXG4rXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK19fd2VhayBpbnQgdGVzdF9iaXRtYXBfYWxsb2NfZnJlZSh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wO1xcbitcXG4rXFx0Ym1wID0gYm1wX2FsbG9jKFRFU1RfQklUUyk7XFxuK1xcdGlmICghYm1wKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdGlmICghYm1wX2VtcHR5KFRFU1RfQklUUywgYm1wKSlcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRfX2JtcF9zZXRfYml0KExBU1RfQklULCBibXApO1xcbitcXHRpZiAoIWJtcF90ZXN0X2JpdChMQVNUX0JJVCwgYm1wKSlcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRfX2JtcF9jbGVhcl9iaXQoTEFTVF9CSVQsIGJtcCk7XFxuK1xcdGlmIChibXBfdGVzdF9iaXQoTEFTVF9CSVQsIGJtcCkpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0Ym1wX2ZyZWUoYm1wKTtcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnI6XFxuK1xcdGJtcF9mcmVlKGJtcCk7XFxuK1xcdHJldHVybiAtRUlOVkFMO1xcbit9XFxuK1xcbitTRUMoXFxcInN5c2NhbGxcXFwiKVxcbitfX3dlYWsgaW50IHRlc3RfYml0bWFwX2JpdF9vcHModm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcDtcXG4rXFxuK1xcdGJtcCA9IGJtcF9hbGxvYyhURVNUX0JJVFMpO1xcbitcXHRpZiAoIWJtcClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRfX2JtcF9zZXRfYml0KDAsIGJtcCk7XFxuK1xcdGlmICghYm1wX3Rlc3RfYml0KDAsIGJtcCkpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0X19ibXBfc2V0X2JpdChNSURfQklULCBibXApO1xcbitcXHRpZiAoIWJtcF90ZXN0X2JpdChNSURfQklULCBibXApKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdF9fYm1wX3NldF9iaXQoTEFTVF9CSVQsIGJtcCk7XFxuK1xcdGlmICghYm1wX3Rlc3RfYml0KExBU1RfQklULCBibXApKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdGlmIChibXBfdGVzdF9iaXQoTUlEX0JJVCAtIDEsIGJtcCkpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0X19ibXBfY2xlYXJfYml0KE1JRF9CSVQsIGJtcCk7XFxuK1xcdGlmIChibXBfdGVzdF9iaXQoTUlEX0JJVCwgYm1wKSlcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRpZiAoIWJtcF90ZXN0X2JpdCgwLCBibXApKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdGlmICghYm1wX3Rlc3RfYml0KExBU1RfQklULCBibXApKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdF9fYm1wX2NsZWFyX2JpdCgwLCBibXApO1xcbitcXHRfX2JtcF9jbGVhcl9iaXQoTEFTVF9CSVQsIGJtcCk7XFxuK1xcdGlmICghYm1wX2VtcHR5KFRFU1RfQklUUywgYm1wKSlcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRpZiAoYm1wLVxcdTAwM2ViaXRzWzBdKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdGlmIChibXAtXFx1MDAzZWJpdHNbMV0pXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0Ym1wX2ZyZWUoYm1wKTtcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnI6XFxuK1xcdGJtcF9mcmVlKGJtcCk7XFxuK1xcdHJldHVybiAtRUlOVkFMO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCB0ZXN0X2JpdG1hcF90ZXN0X2FuZF9jbGVhcl9zaW5nbGUoc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXAsIHNpemVfdCBpbmQpXFxuK3tcXG4rXFx0aWYgKGJtcF90ZXN0X2FuZF9jbGVhcl9iaXQoaW5kLCBibXApKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRfX2JtcF9zZXRfYml0KGluZCwgYm1wKTtcXG4rXFxuK1xcdGlmICghYm1wX3Rlc3RfYW5kX2NsZWFyX2JpdChpbmQsIGJtcCkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmIChibXBfdGVzdF9iaXQoaW5kLCBibXApKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAoYm1wX3Rlc3RfYW5kX2NsZWFyX2JpdChpbmQsIGJtcCkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCB0ZXN0X2JpdG1hcF90ZXN0X2FuZF9zZXRfc2luZ2xlKHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wLCBzaXplX3QgaW5kKVxcbit7XFxuK1xcdGlmIChibXBfdGVzdF9hbmRfc2V0X2JpdChpbmQsIGJtcCkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmICghYm1wX3Rlc3RfYW5kX3NldF9iaXQoaW5kLCBibXApKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAoIWJtcF90ZXN0X2JpdChpbmQsIGJtcCkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdF9fYm1wX2NsZWFyX2JpdChpbmQsIGJtcCk7XFxuK1xcbitcXHRpZiAoYm1wX3Rlc3RfYW5kX3NldF9iaXQoaW5kLCBibXApKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4rX193ZWFrIGludCB0ZXN0X2JpdG1hcF90ZXN0X2FuZF9jbGVhcl9iaXQodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcDtcXG4rXFxuK1xcdGJtcCA9IGJtcF9hbGxvYyhURVNUX0JJVFMpO1xcbitcXHRpZiAoIWJtcClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRpZiAoIXRlc3RfYml0bWFwX3Rlc3RfYW5kX2NsZWFyX3NpbmdsZShibXAsIDApKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdGlmICghdGVzdF9iaXRtYXBfdGVzdF9hbmRfY2xlYXJfc2luZ2xlKGJtcCwgTUlEX0JJVCkpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0aWYgKCF0ZXN0X2JpdG1hcF90ZXN0X2FuZF9jbGVhcl9zaW5nbGUoYm1wLCBMQVNUX0JJVCkpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0aWYgKCFibXBfZW1wdHkoVEVTVF9CSVRTLCBibXApKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdGJtcF9mcmVlKGJtcCk7XFxuK1xcdHJldHVybiAwO1xcbitcXG4rZXJyOlxcbitcXHRibXBfZnJlZShibXApO1xcbitcXHRyZXR1cm4gLUVJTlZBTDtcXG4rfVxcbitcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4rX193ZWFrIGludCB0ZXN0X2JpdG1hcF90ZXN0X2FuZF9zZXRfYml0KHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXA7XFxuK1xcbitcXHRibXAgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTtcXG4rXFx0aWYgKCFibXApXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0aWYgKCF0ZXN0X2JpdG1hcF90ZXN0X2FuZF9zZXRfc2luZ2xlKGJtcCwgMCkpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0aWYgKCF0ZXN0X2JpdG1hcF90ZXN0X2FuZF9zZXRfc2luZ2xlKGJtcCwgTUlEX0JJVCkpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0aWYgKCF0ZXN0X2JpdG1hcF90ZXN0X2FuZF9zZXRfc2luZ2xlKGJtcCwgTEFTVF9CSVQpKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdGJtcF9mcmVlKGJtcCk7XFxuK1xcdHJldHVybiAwO1xcbitcXG4rZXJyOlxcbitcXHRibXBfZnJlZShibXApO1xcbitcXHRyZXR1cm4gLUVJTlZBTDtcXG4rfVxcbitcXG4rXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK19fd2VhayBpbnQgdGVzdF9iaXRtYXBfYW5kKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGJpdG1hcCBfX2FyZW5hICpzcmMxID0gTlVMTCwgKnNyYzIgPSBOVUxMLCAqZHN0ID0gTlVMTDtcXG4rXFxuK1xcdHNyYzEgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTtcXG4rXFx0c3JjMiA9IGJtcF9hbGxvYyhURVNUX0JJVFMpO1xcbitcXHRkc3QgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTtcXG4rXFx0aWYgKCFzcmMxIHx8ICFzcmMyIHx8ICFkc3QpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0dGVzdF9ibXBfc2V0YWxsKGRzdCk7XFxuK1xcbitcXHRfX2JtcF9zZXRfYml0KDAsIHNyYzEpO1xcbitcXHRfX2JtcF9zZXRfYml0KE1JRF9CSVQsIHNyYzEpO1xcbitcXHRfX2JtcF9zZXRfYml0KExBU1RfQklULCBzcmMxKTtcXG4rXFxuK1xcdF9fYm1wX3NldF9iaXQoTUlEX0JJVCwgc3JjMik7XFxuK1xcdF9fYm1wX3NldF9iaXQoTEFTVF9CSVQsIHNyYzIpO1xcbitcXG4rXFx0Ym1wX2FuZChURVNUX0JJVFMsIGRzdCwgc3JjMSwgc3JjMik7XFxuK1xcbitcXHRpZiAoYm1wX3Rlc3RfYml0KDAsIGRzdCkpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXHRpZiAoIWJtcF90ZXN0X2JpdChNSURfQklULCBkc3QpKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFx0aWYgKCFibXBfdGVzdF9iaXQoTEFTVF9CSVQsIGRzdCkpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0aWYgKGRzdC1cXHUwMDNlYml0c1swXSlcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcdGlmIChkc3QtXFx1MDAzZWJpdHNbMV0gIT0gKEJJVF9NQVNLKE1JRF9CSVQpIHwgQklUX01BU0soTEFTVF9CSVQpKSlcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRibXBfZnJlZShzcmMxKTtcXG4rXFx0Ym1wX2ZyZWUoc3JjMik7XFxuK1xcdGJtcF9mcmVlKGRzdCk7XFxuK1xcdHJldHVybiAwO1xcbitcXG4rZXJyOlxcbitcXHRibXBfZnJlZShzcmMxKTtcXG4rXFx0Ym1wX2ZyZWUoc3JjMik7XFxuK1xcdGJtcF9mcmVlKGRzdCk7XFxuK1xcdHJldHVybiAtRUlOVkFMO1xcbit9XFxuK1xcbitTRUMoXFxcInN5c2NhbGxcXFwiKVxcbitfX3dlYWsgaW50IHRlc3RfYml0bWFwX29yKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGJpdG1hcCBfX2FyZW5hICpzcmMxID0gTlVMTCwgKnNyYzIgPSBOVUxMLCAqZHN0ID0gTlVMTDtcXG4rXFxuK1xcdHNyYzEgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTtcXG4rXFx0c3JjMiA9IGJtcF9hbGxvYyhURVNUX0JJVFMpO1xcbitcXHRkc3QgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTtcXG4rXFx0aWYgKCFzcmMxIHx8ICFzcmMyIHx8ICFkc3QpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0dGVzdF9ibXBfc2V0YWxsKGRzdCk7XFxuK1xcbitcXHRfX2JtcF9zZXRfYml0KDAsIHNyYzEpO1xcbitcXHRfX2JtcF9zZXRfYml0KExBU1RfQklULCBzcmMxKTtcXG4rXFxuK1xcdF9fYm1wX3NldF9iaXQoTUlEX0JJVCwgc3JjMik7XFxuK1xcdF9fYm1wX3NldF9iaXQoTEFTVF9CSVQsIHNyYzIpO1xcbitcXG4rXFx0Ym1wX29yKFRFU1RfQklUUywgZHN0LCBzcmMxLCBzcmMyKTtcXG4rXFxuK1xcdGlmICghYm1wX3Rlc3RfYml0KDAsIGRzdCkpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXHRpZiAoIWJtcF90ZXN0X2JpdChNSURfQklULCBkc3QpKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFx0aWYgKCFibXBfdGVzdF9iaXQoTEFTVF9CSVQsIGRzdCkpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0aWYgKGRzdC1cXHUwMDNlYml0c1swXSAhPSBCSVRfTUFTSygwKSlcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcdGlmIChkc3QtXFx1MDAzZWJpdHNbMV0gIT0gKEJJVF9NQVNLKE1JRF9CSVQpIHwgQklUX01BU0soTEFTVF9CSVQpKSlcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRibXBfZnJlZShzcmMxKTtcXG4rXFx0Ym1wX2ZyZWUoc3JjMik7XFxuK1xcdGJtcF9mcmVlKGRzdCk7XFxuK1xcdHJldHVybiAwO1xcbitcXG4rZXJyOlxcbitcXHRibXBfZnJlZShzcmMxKTtcXG4rXFx0Ym1wX2ZyZWUoc3JjMik7XFxuK1xcdGJtcF9mcmVlKGRzdCk7XFxuK1xcdHJldHVybiAtRUlOVkFMO1xcbit9XFxuK1xcbitTRUMoXFxcInN5c2NhbGxcXFwiKVxcbitfX3dlYWsgaW50IHRlc3RfYml0bWFwX3N1YnNldCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYmlnID0gTlVMTCwgKnNtYWxsID0gTlVMTDtcXG4rXFxuK1xcdGJpZyA9IGJtcF9hbGxvYyhURVNUX0JJVFMpO1xcbitcXHRzbWFsbCA9IGJtcF9hbGxvYyhURVNUX0JJVFMpO1xcbitcXHRpZiAoIWJpZyB8fCAhc21hbGwpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0aWYgKCFibXBfc3Vic2V0KFRFU1RfQklUUywgYmlnLCBzbWFsbCkpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0X19ibXBfc2V0X2JpdCgwLCBzbWFsbCk7XFxuK1xcdGlmIChibXBfc3Vic2V0KFRFU1RfQklUUywgYmlnLCBzbWFsbCkpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0X19ibXBfc2V0X2JpdCgwLCBiaWcpO1xcbitcXHRpZiAoIWJtcF9zdWJzZXQoVEVTVF9CSVRTLCBiaWcsIHNtYWxsKSlcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRfX2JtcF9zZXRfYml0KExBU1RfQklULCBzbWFsbCk7XFxuK1xcdGlmIChibXBfc3Vic2V0KFRFU1RfQklUUywgYmlnLCBzbWFsbCkpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0X19ibXBfc2V0X2JpdChMQVNUX0JJVCwgYmlnKTtcXG4rXFx0X19ibXBfc2V0X2JpdChNSURfQklULCBiaWcpO1xcbitcXHRpZiAoIWJtcF9zdWJzZXQoVEVTVF9CSVRTLCBiaWcsIHNtYWxsKSlcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRpZiAoYm1wX3N1YnNldChURVNUX0JJVFMsIHNtYWxsLCBiaWcpKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdGJtcF9mcmVlKGJpZyk7XFxuK1xcdGJtcF9mcmVlKHNtYWxsKTtcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnI6XFxuK1xcdGJtcF9mcmVlKGJpZyk7XFxuK1xcdGJtcF9mcmVlKHNtYWxsKTtcXG4rXFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbit9XFxuK1xcbitTRUMoXFxcInN5c2NhbGxcXFwiKVxcbitfX3dlYWsgaW50IHRlc3RfYml0bWFwX2ludGVyc2VjdHModm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmFyZzEgPSBOVUxMLCAqYXJnMiA9IE5VTEw7XFxuK1xcbitcXHRhcmcxID0gYm1wX2FsbG9jKFRFU1RfQklUUyk7XFxuK1xcdGFyZzIgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTtcXG4rXFx0aWYgKCFhcmcxIHx8ICFhcmcyKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdGlmIChibXBfaW50ZXJzZWN0cyhURVNUX0JJVFMsIGFyZzEsIGFyZzIpKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdF9fYm1wX3NldF9iaXQoMCwgYXJnMSk7XFxuK1xcdF9fYm1wX3NldF9iaXQoTUlEX0JJVCwgYXJnMik7XFxuK1xcdGlmIChibXBfaW50ZXJzZWN0cyhURVNUX0JJVFMsIGFyZzEsIGFyZzIpKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdF9fYm1wX3NldF9iaXQoTEFTVF9CSVQsIGFyZzEpO1xcbitcXHRfX2JtcF9zZXRfYml0KExBU1RfQklULCBhcmcyKTtcXG4rXFx0aWYgKCFibXBfaW50ZXJzZWN0cyhURVNUX0JJVFMsIGFyZzEsIGFyZzIpKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdGJtcF9mcmVlKGFyZzEpO1xcbitcXHRibXBfZnJlZShhcmcyKTtcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnI6XFxuK1xcdGJtcF9mcmVlKGFyZzEpO1xcbitcXHRibXBfZnJlZShhcmcyKTtcXG4rXFx0cmV0dXJuIC1FSU5WQUw7XFxuK31cXG4rXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK19fd2VhayBpbnQgdGVzdF9iaXRtYXBfY29weSh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYXJnMSA9IE5VTEwsICphcmcyID0gTlVMTDtcXG4rXFxuK1xcdGFyZzEgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTtcXG4rXFx0YXJnMiA9IGJtcF9hbGxvYyhURVNUX0JJVFMpO1xcbitcXHRpZiAoIWFyZzEgfHwgIWFyZzIpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0X19ibXBfc2V0X2JpdCgwLCBhcmcxKTtcXG4rXFx0X19ibXBfc2V0X2JpdChNSURfQklULCBhcmcxKTtcXG4rXFxuK1xcdC8qIE1ha2Ugc3VyZSB0aG9zZSBnZXQgb3ZlcndyaXR0ZW4uICovXFxuK1xcdF9fYm1wX3NldF9iaXQoMSwgYXJnMik7XFxuK1xcdF9fYm1wX3NldF9iaXQoTUlEX0JJVCArIDIsIGFyZzIpO1xcbitcXG4rXFx0Ym1wX2NvcHkoVEVTVF9CSVRTLCBhcmcyLCBhcmcxKTtcXG4rXFxuK1xcdC8qIEJpdG1hcHMgYXJlIGVxdWFsIGlmIGEgc3Vic2V0IG9mIGVhY2ggb3RoZXIuICovXFxuK1xcdGlmICghYm1wX3N1YnNldChURVNUX0JJVFMsIGFyZzEsIGFyZzIpIHx8XFxuK1xcdCAgICAhYm1wX3N1YnNldChURVNUX0JJVFMsIGFyZzIsIGFyZzEpKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdGJtcF9mcmVlKGFyZzEpO1xcbitcXHRibXBfZnJlZShhcmcyKTtcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnI6XFxuK1xcdGJtcF9mcmVlKGFyZzEpO1xcbitcXHRibXBfZnJlZShhcmcyKTtcXG4rXFx0cmV0dXJuIC1FSU5WQUw7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy9zdF9idWRkeS5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9idWRkeS5icGYuY1xcbnNpbWlsYXJpdHkgaW5kZXggOTclXFxucmVuYW1lIGZyb20gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy9zdF9idWRkeS5icGYuY1xcbnJlbmFtZSB0byB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYnVkZHkuYnBmLmNcXG5pbmRleCBiNDVhMzA2ODE2YzBlNC4uNTYyOGYwOTg3MDEyMWMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy9zdF9idWRkeS5icGYuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9idWRkeS5icGYuY1xcbkBAIC0xNzEsNyArMTcxLDggQEAgX193ZWFrIGludCB0ZXN0X2J1ZGR5X2FsbG9jX211bHRpcGxlKHZvaWQpXFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpXFxuIF9fd2VhayBpbnQgdGVzdF9idWRkeV9hbGlnbm1lbnQodm9pZClcXG4ge1xcbi1cXHRpbnQgcmV0LCBpO1xcbitcXHRpbnQgcmV0O1xcbitcXHR1MzIgaTtcXG4gXFxuIFxcdHJldCA9IGJ1ZGR5X2luaXQoXFx1MDAyNmJ1ZGR5KTtcXG4gXFx0aWYgKHJldClcXG5AQCAtMTc5LDYgKzE4MCw3IEBAIF9fd2VhayBpbnQgdGVzdF9idWRkeV9hbGlnbm1lbnQodm9pZClcXG4gXFxuIFxcdC8qIEFsbG9jYXRlIHZhcmlvdXMgc2l6ZXMgYW5kIGNoZWNrIGFsaWdubWVudCAqL1xcbiBcXHRmb3IgKGkgPSB6ZXJvOyBpIFxcdTAwM2MgMTcgXFx1MDAyNlxcdTAwMjYgY2FuX2xvb3A7IGkrKykge1xcbitcXHRcXHRiYXJyaWVyX3ZhcihpKTtcXG4gXFx0XFx0cHRyc1tpXSA9IGJ1ZGR5X2FsbG9jKFxcdTAwMjZidWRkeSwgYWxpZ25tZW50X3NpemVzW2ldKTtcXG4gXFx0XFx0aWYgKCFwdHJzW2ldKSB7XFxuIFxcdFxcdFxcdGFyZW5hX3N0ZG91dChcXFwiYWxpZ25tZW50IHRlc3Q6IGFsbG9jIGZhaWxlZCBmb3Igc2l6ZSAlbHVcXFwiLFxcbkBAIC0xOTgsOCArMjAwLDEwIEBAIF9fd2VhayBpbnQgdGVzdF9idWRkeV9hbGlnbm1lbnQodm9pZClcXG4gXFx0fVxcbiBcXG4gXFx0LyogRnJlZSBhbGwgYWxsb2NhdGlvbnMgKi9cXG4tXFx0Zm9yIChpID0gemVybzsgaSBcXHUwMDNjIDE3IFxcdTAwMjZcXHUwMDI2IGNhbl9sb29wOyBpKyspXFxuK1xcdGZvciAoaSA9IHplcm87IGkgXFx1MDAzYyAxNyBcXHUwMDI2XFx1MDAyNiBjYW5fbG9vcDsgaSsrKSB7XFxuK1xcdFxcdGJhcnJpZXJfdmFyKGkpO1xcbiBcXHRcXHRidWRkeV9mcmVlKFxcdTAwMjZidWRkeSwgcHRyc1tpXSk7XFxuK1xcdH1cXG4gXFxuIFxcdGJ1ZGR5X2Rlc3Ryb3koXFx1MDAyNmJ1ZGR5KTtcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9wYXJhbGxlbF9iaXRtYXAuYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfcGFyYWxsZWxfYml0bWFwLmJwZi5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZWVjMjg3MWUyYjBkMTBcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X3BhcmFsbGVsX2JpdG1hcC5icGYuY1xcbkBAIC0wLDAgKzEsMTkwIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBMR1BMLTIuMSBPUiBCU0QtMi1DbGF1c2VcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NicGZfYXRvbWljLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGliYXJlbmEvY29tbW9uLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGliYXJlbmEvYXNhbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGliYXJlbmEvYml0bWFwLmhcXHUwMDNlXFxuK1xcbisjZGVmaW5lIFRFU1RfQklUTUFQX1RIUkVBRFNcXHQyXFxuKyNkZWZpbmUgVEVTVF9CSVRNQVBfQklUU1xcdCgyICogQklUU19QRVJfTE9OR19MT05HKVxcbisjZGVmaW5lIFRFU1RfQklUTUFQX1NZTkNfU1BJTlNcXHRCUEZfTUFYX0xPT1BTXFxuKyNkZWZpbmUgVEVTVF9CSVRNQVBfSVRFUlNcXHQxMCAqIDEwMDAgKiAxMDAwXFxuK1xcbitzdGF0aWMgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpiaXRtYXA7XFxuK3N0YXRpYyB2b2xhdGlsZSB1NjQgc3RhcnRlZDtcXG4rc3RhdGljIHZvbGF0aWxlIGJvb2wgdGVzdF9hYm9ydDtcXG4rXFxuKy8qXFxuKyAqIFRoZSB0ZXN0IG5lZWRzIGNtcHhjaGcgYXRvbWljcyBvbiBhcmVuYSBtZW1vcnkuXFxuKyAqL1xcbisjaWYgZGVmaW5lZChFTkFCTEVfQVRPTUlDU19URVNUUykgXFx1MDAyNlxcdTAwMjZcXHRcXHRcXHRcXHQgIFxcXFxcXG4rXFx0KGRlZmluZWQoX19UQVJHRVRfQVJDSF9hcm02NCkgfHwgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3g4NikgfHwgXFxcXFxcbitcXHQgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3MzOTApIHx8IFxcXFxcXG4rXFx0IGRlZmluZWQoX19UQVJHRVRfQVJDSF9wb3dlcnBjKSB8fFxcdFxcdFxcdFxcdCAgXFxcXFxcbitcXHQgKGRlZmluZWQoX19UQVJHRVRfQVJDSF9yaXNjdikgXFx1MDAyNlxcdTAwMjYgX19yaXNjdl94bGVuID09IDY0KSlcXG4rc3RhdGljIGJvb2wgYml0bWFwX3Rlc3RzX2VuYWJsZWQodm9pZClcXG4re1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbisjZWxzZVxcbitzdGF0aWMgYm9vbCBiaXRtYXBfdGVzdHNfZW5hYmxlZCh2b2lkKVxcbit7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbisjZW5kaWZcXG4rXFxuK19fd2Vha1xcbitpbnQgYml0bWFwX3dhaXRfZm9yX3N0YXJ0KHZvaWQpXFxuK3tcXG4rXFx0dTY0IGk7XFxuK1xcbitcXHRfX3N5bmNfZmV0Y2hfYW5kX2FkZChcXHUwMDI2c3RhcnRlZCwgMSk7XFxuK1xcbitcXHRmb3IgKGkgPSB6ZXJvOyBpIFxcdTAwM2MgVEVTVF9CSVRNQVBfU1lOQ19TUElOUyBcXHUwMDI2XFx1MDAyNiBjYW5fbG9vcDsgaSsrKSB7XFxuK1xcdFxcdGlmICh0ZXN0X2Fib3J0KVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlRSO1xcbitcXHRcXHRpZiAoc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2c3RhcnRlZCkgXFx1MDAzZT0gVEVTVF9CSVRNQVBfVEhSRUFEUylcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdHRlc3RfYWJvcnQgPSB0cnVlO1xcbitcXHRyZXR1cm4gLUVUSU1FRE9VVDtcXG4rfVxcbitcXG4rLypcXG4rICogVGhlIHRlc3QgbWFrZXMgc3VyZSB3cml0ZXMgZG9uJ3QgY2xvYmJlciBlYWNoIG90aGVyIGJ5IG92ZXJ3cml0aW5nXFxuKyAqIHRoZSBzYW1lIHdvcmQuIE9uZSB0aHJlYWQgYWx3YXlzIHdyaXRlcyBvbiBldmVuIGJpdHMsIHRoZSBvdGhlciBvblxcbisgKiBvZGRzLiBCb3RoIHNob3VsZCBiZSBhYmxlIHRvIG9wZXJhdGUgb24gdGhlIGJpdG1hcCBvYmxpdmlvdXMgb2YgdGhlXFxuKyAqIG90aGVyJ3Mgb3BlcmF0aW9ucy5cXG4rICovXFxuK19fd2Vha1xcbitpbnQgYml0bWFwX3Rlc3RfYml0X3NlcXVlbmNlKHUzMiBiaXQpXFxuK3tcXG4rXFx0aWYgKGJtcF90ZXN0X2FuZF9jbGVhcl9iaXQoYml0LCBiaXRtYXApKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChibXBfdGVzdF9hbmRfc2V0X2JpdChiaXQsIGJpdG1hcCkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRpZiAoIWJtcF90ZXN0X2JpdChiaXQsIGJpdG1hcCkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKCFibXBfdGVzdF9hbmRfc2V0X2JpdChiaXQsIGJpdG1hcCkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRpZiAoIWJtcF90ZXN0X2JpdChiaXQsIGJpdG1hcCkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKCFibXBfdGVzdF9hbmRfY2xlYXJfYml0KGJpdCwgYml0bWFwKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGlmIChibXBfdGVzdF9iaXQoYml0LCBiaXRtYXApKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChibXBfdGVzdF9hbmRfY2xlYXJfYml0KGJpdCwgYml0bWFwKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRibXBfc2V0X2JpdChiaXQsIGJpdG1hcCk7XFxuK1xcdGlmICghYm1wX3Rlc3RfYml0KGJpdCwgYml0bWFwKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRibXBfY2xlYXJfYml0KGJpdCwgYml0bWFwKTtcXG4rXFx0aWYgKGJtcF90ZXN0X2JpdChiaXQsIGJpdG1hcCkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0Ym1wX3NldF9iaXQoYml0LCBiaXRtYXApO1xcbitcXHRpZiAoIWJtcF90ZXN0X2JpdChiaXQsIGJpdG1hcCkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBiaXRtYXBfdGVzdF9yZXNldF9zaW5nbGUoaW50IHBhcml0eSlcXG4re1xcbitcXHR1MzIgYml0O1xcbitcXG4rXFx0Zm9yIChiaXQgPSBwYXJpdHk7IGJpdCBcXHUwMDNjIFRFU1RfQklUTUFQX0JJVFMgXFx1MDAyNlxcdTAwMjYgY2FuX2xvb3A7IGJpdCArPSAyKVxcbitcXHRcXHRibXBfY2xlYXJfYml0KGJpdCwgYml0bWFwKTtcXG4rXFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYml0bWFwX3Rlc3RfY29tbW9uX3NpbmdsZShpbnQgcGFyaXR5KVxcbit7XFxuK1xcdHUzMiBiaXQ7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRmb3IgKGJpdCA9IHBhcml0eTsgYml0IFxcdTAwM2MgVEVTVF9CSVRNQVBfQklUUyBcXHUwMDI2XFx1MDAyNiBjYW5fbG9vcDsgYml0ICs9IDIpIHtcXG4rXFx0XFx0aWYgKHRlc3RfYWJvcnQpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVFI7XFxuK1xcbitcXHRcXHRyZXQgPSBiaXRtYXBfdGVzdF9iaXRfc2VxdWVuY2UoYml0KTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHR0ZXN0X2Fib3J0ID0gdHJ1ZTtcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBiaXRtYXBfdGVzdF9jb21tb24oaW50IHBhcml0eSlcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXHR1MzIgaTtcXG4rXFxuK1xcdGFyZW5hX3N1YnByb2dfaW5pdCgpO1xcbitcXG4rXFx0cmV0ID0gYml0bWFwX3dhaXRfZm9yX3N0YXJ0KCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRmb3IgKGkgPSB6ZXJvOyBpIFxcdTAwM2MgVEVTVF9CSVRNQVBfSVRFUlMgXFx1MDAyNlxcdTAwMjYgY2FuX2xvb3A7IGkrKykge1xcbitcXHRcXHRyZXQgPSBiaXRtYXBfdGVzdF9jb21tb25fc2luZ2xlKHBhcml0eSk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHRpZiAodGVzdF9hYm9ydClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRiaXRtYXBfdGVzdF9yZXNldF9zaW5nbGUocGFyaXR5KTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpIGludCBwYXJhbGxlbF90ZXN0X2JpdG1hcF9fZW5hYmxlZCh2b2lkKVxcbit7XFxuK1xcdHJldHVybiBiaXRtYXBfdGVzdHNfZW5hYmxlZCgpID8gMCA6IC1FT1BOT1RTVVBQO1xcbit9XFxuK1xcbitTRUMoXFxcInN5c2NhbGxcXFwiKSBpbnQgcGFyYWxsZWxfdGVzdF9iaXRtYXBfX2luaXQodm9pZClcXG4re1xcbitcXHRiaXRtYXAgPSBibXBfYWxsb2MoVEVTVF9CSVRNQVBfQklUUyk7XFxuK1xcdGlmICghYml0bWFwKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcInN5c2NhbGxcXFwiKSBpbnQgcGFyYWxsZWxfdGVzdF9iaXRtYXBfX2Zpbmkodm9pZClcXG4re1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdGlmICghYml0bWFwKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGJtcF9mcmVlKGJpdG1hcCk7XFxuK1xcdGJpdG1hcCA9IE5VTEw7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitTRUMoXFxcInN5c2NhbGxcXFwiKSBpbnQgcGFyYWxsZWxfdGVzdF9iaXRtYXBfXzAodm9pZClcXG4re1xcbitcXHRyZXR1cm4gYml0bWFwX3Rlc3RfY29tbW9uKDApO1xcbit9XFxuK1xcbitTRUMoXFxcInN5c2NhbGxcXFwiKSBpbnQgcGFyYWxsZWxfdGVzdF9iaXRtYXBfXzEodm9pZClcXG4re1xcbitcXHRyZXR1cm4gYml0bWFwX3Rlc3RfY29tbW9uKDEpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9wYXJhbGxlbF9zcG1jLmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X3BhcmFsbGVsX3NwbWMuYnBmLmNcXG5pbmRleCBmMDhmMmE5MmUxOTQ2OC4uNWZhOTZlYjc0MDk1MWMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X3BhcmFsbGVsX3NwbWMuYnBmLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfcGFyYWxsZWxfc3BtYy5icGYuY1xcbkBAIC0xNTUsNyArMTU1LDcgQEAgaW50IHNwbWNfcXVpZXNjZV9vbl9vd25lcih1NjQgZXBvY2gpXFxuIHtcXG4gXFx0dTY0IGk7XFxuIFxcbi1cXHRicGZfZm9yKGksIDAsIFRFU1RfU1BNQ19TWU5DX1NQSU5TKSB7XFxuK1xcdGZvciAoaSA9IHplcm87IGkgXFx1MDAzYyBURVNUX1NQTUNfU1lOQ19TUElOUyBcXHUwMDI2XFx1MDAyNiBjYW5fbG9vcDsgaSsrKSB7XFxuIFxcdFxcdGlmICh0ZXN0X2Fib3J0KVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlRSO1xcbiBcXHRcXHRpZiAoc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2b3duZXJfZXBvY2gpIFxcdTAwM2U9IGVwb2NoKVxcbkBAIC0xNzUsOCArMTc1LDcgQEAgaW50IHNwbWNfcXVpZXNjZV9vbl9zdGVhbGVyKHU2NCBlcG9jaClcXG4gXFx0aW50IGVyciA9IC1FVElNRURPVVQ7XFxuIFxcbiBcXHR0YXJnZXQgPSBTVEVBTEVSX0VQT0NIKGVwb2NoKTtcXG4tXFx0YnBmX2ZvcihpLCAwLCBURVNUX1NQTUNfU1lOQ19TUElOUykge1xcbi1cXG4rXFx0Zm9yIChpID0gemVybzsgaSBcXHUwMDNjIFRFU1RfU1BNQ19TWU5DX1NQSU5TIFxcdTAwMjZcXHUwMDI2IGNhbl9sb29wOyBpKyspIHtcXG4gXFx0XFx0aWYgKHRlc3RfYWJvcnQpIHtcXG4gXFx0XFx0XFx0ZXJyID0gLUVJTlRSO1xcbiBcXHRcXHRcXHRicmVhaztcXG5AQCAtMzkxLDcgKzM5MCw3IEBAIGludCBzcG1jX3dhaXRfZm9yX3N0ZWFsZXJzX3RvX3N0YXJ0KHU2NCB0YXJnZXQpXFxuIHtcXG4gXFx0dTY0IGk7XFxuIFxcbi1cXHRicGZfZm9yKGksIDAsIFRFU1RfU1BNQ19TWU5DX1NQSU5TKSB7XFxuK1xcdGZvciAoaSA9IHplcm87IGkgXFx1MDAzYyBURVNUX1NQTUNfU1lOQ19TUElOUyBcXHUwMDI2XFx1MDAyNiBjYW5fbG9vcDsgaSsrKSB7XFxuIFxcdFxcdGlmICh0ZXN0X2Fib3J0KVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlRSO1xcbiBcXHRcXHRpZiAoUkVBRF9PTkNFKHN0ZWFsZXJzX3N0YXJ0ZWQpIFxcdTAwM2U9IHRhcmdldClcXG5AQCAtNTM3LDcgKzUzNiw3IEBAIHN0YXRpYyBpbnQgc3BtY193YWl0X2Zvcl9yb3VuZF9zdGVhbHModTY0IHRhcmdldClcXG4gXFxuIFxcdGFyZW5hX3N1YnByb2dfaW5pdCgpO1xcbiBcXG4tXFx0YnBmX2ZvcihpLCAwLCBURVNUX1NQTUNfU1lOQ19TUElOUykge1xcbitcXHRmb3IgKGkgPSB6ZXJvOyBpIFxcdTAwM2MgVEVTVF9TUE1DX1NZTkNfU1BJTlMgXFx1MDAyNlxcdTAwMjYgY2FuX2xvb3A7IGkrKykge1xcbiBcXHRcXHRpZiAodGVzdF9hYm9ydClcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5UUjtcXG4gXFx0XFx0aWYgKHJvdW5kX3N0ZWFscyBcXHUwMDNlPSB0YXJnZXQpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvYml0bWFwLmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9iaXRtYXAuYnBmLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi44MGU4MTQ0MDFmYjllYVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2JpdG1hcC5icGYuY1xcbkBAIC0wLDAgKzEsMjQ1IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBMR1BMLTIuMSBPUiBCU0QtMi1DbGF1c2VcXG4rLypcXG4rICogQ29weXJpZ2h0IChjKSAyMDI1LTIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXFxuKyAqIENvcHlyaWdodCAoYykgMjAyNS0yMDI2IEVtaWwgVHNhbGFwYXRpcyBcXHUwMDNjZW1pbEBldHNhbGFwYXRpcy5jb21cXHUwMDNlXFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpYmFyZW5hL2NvbW1vbi5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpYmFyZW5hL2FzYW4uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpYmFyZW5hL2JpdG1hcC5oXFx1MDAzZVxcbitcXG4rX193ZWFrXFxuK3N0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wX2FsbG9jKHNpemVfdCBiaXRzKVxcbit7XFxuK1xcdHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wO1xcbitcXHRzaXplX3Qgc2l6ZSA9IEJJVFNfVE9fTE9OR19MT05HUyhiaXRzKSAqIHNpemVvZihibXAtXFx1MDAzZWJpdHNbMF0pO1xcbitcXG4rXFx0LyogQXNzdW1lIGxvbmctYWxpZ25lZCBtYXNrcy4gKi9cXG4rXFx0aWYgKGJpdHMgJSBCSVRTX1BFUl9MT05HX0xPTkcpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0Ym1wID0gKHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqKWFyZW5hX21hbGxvYyhzaXplKTtcXG4rXFx0aWYgKCFibXApXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0Ym1wX2NsZWFyKGJpdHMsIGJtcCk7XFxuK1xcbitcXHRyZXR1cm4gYm1wO1xcbit9XFxuK1xcbitfX3dlYWtcXG4rdm9pZCBibXBfZnJlZShzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcClcXG4re1xcbitcXHRhcmVuYV9mcmVlKGJtcCk7XFxuK31cXG4rXFxuK19fd2Vha1xcbit2b2lkIF9fYm1wX3NldF9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApXFxuK3tcXG4rXFx0Ym1wLVxcdTAwM2ViaXRzW0JJVF9XT1JEKGJpdCldIHw9IEJJVF9NQVNLKGJpdCk7XFxuK31cXG4rXFxuK19fd2Vha1xcbit2b2lkIF9fYm1wX2NsZWFyX2JpdCh1MzIgYml0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcClcXG4re1xcbitcXHRibXAtXFx1MDAzZWJpdHNbQklUX1dPUkQoYml0KV0gXFx1MDAyNj0gfkJJVF9NQVNLKGJpdCk7XFxuK31cXG4rXFxuK19fd2Vha1xcbitib29sIGJtcF90ZXN0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcClcXG4re1xcbitcXHRyZXR1cm4gYm1wLVxcdTAwM2ViaXRzW0JJVF9XT1JEKGJpdCldIFxcdTAwMjYgQklUX01BU0soYml0KTtcXG4rfVxcbitcXG4rX193ZWFrXFxuK2Jvb2wgYm1wX3Rlc3RfYW5kX2NsZWFyX2JpdCh1MzIgYml0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcClcXG4re1xcbitcXHR1NjQgdmFsID0gQklUX01BU0soYml0KTtcXG4rXFx0dTMyIGlkeCA9IEJJVF9XT1JEKGJpdCk7XFxuK1xcdHU2NCBvbGQsIG5ldywgYWN0dWFsO1xcbitcXG4rXFx0ZG8ge1xcbitcXHRcXHRvbGQgPSBibXAtXFx1MDAzZWJpdHNbaWR4XTtcXG4rXFxuK1xcdFxcdGlmICghKG9sZCBcXHUwMDI2IHZhbCkpXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdFxcdG5ldyA9IG9sZCBcXHUwMDI2IH52YWw7XFxuK1xcdFxcdGFjdHVhbCA9IGNtcHhjaGcoXFx1MDAyNmJtcC1cXHUwMDNlYml0c1tpZHhdLCBvbGQsIG5ldyk7XFxuK1xcbitcXHRcXHRpZiAoYWN0dWFsID09IG9sZClcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHR9IHdoaWxlIChjYW5fbG9vcCk7XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK19fd2Vha1xcbitib29sIGJtcF90ZXN0X2FuZF9zZXRfYml0KHUzMiBiaXQsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKVxcbit7XFxuK1xcdHU2NCB2YWwgPSBCSVRfTUFTSyhiaXQpO1xcbitcXHR1MzIgaWR4ID0gQklUX1dPUkQoYml0KTtcXG4rXFx0dTY0IG9sZCwgbmV3LCBhY3R1YWw7XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdG9sZCA9IGJtcC1cXHUwMDNlYml0c1tpZHhdO1xcbitcXG4rXFx0XFx0aWYgKChvbGQgXFx1MDAyNiB2YWwpKVxcbitcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdFxcdG5ldyA9IG9sZCB8IHZhbDtcXG4rXFx0XFx0YWN0dWFsID0gY21weGNoZyhcXHUwMDI2Ym1wLVxcdTAwM2ViaXRzW2lkeF0sIG9sZCwgbmV3KTtcXG4rXFxuK1xcdFxcdGlmIChhY3R1YWwgPT0gb2xkKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHR9IHdoaWxlIChjYW5fbG9vcCk7XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK19fd2Vha1xcbit2b2lkIGJtcF9jbGVhcl9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApXFxuK3tcXG4rXFx0dTY0IHZhbCA9IEJJVF9NQVNLKGJpdCk7XFxuK1xcdHUzMiBpZHggPSBCSVRfV09SRChiaXQpO1xcbitcXHR1NjQgb2xkLCBuZXcsIGFjdHVhbDtcXG4rXFxuK1xcdGRvIHtcXG4rXFx0XFx0b2xkID0gYm1wLVxcdTAwM2ViaXRzW2lkeF07XFxuK1xcdFxcdG5ldyA9IG9sZCBcXHUwMDI2IH52YWw7XFxuK1xcdFxcdGFjdHVhbCA9IGNtcHhjaGcoXFx1MDAyNmJtcC1cXHUwMDNlYml0c1tpZHhdLCBvbGQsIG5ldyk7XFxuK1xcbitcXHR9IHdoaWxlIChhY3R1YWwgIT0gb2xkIFxcdTAwMjZcXHUwMDI2IGNhbl9sb29wKTtcXG4rfVxcbitcXG4rX193ZWFrXFxuK3ZvaWQgYm1wX3NldF9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApXFxuK3tcXG4rXFx0dTY0IHZhbCA9IEJJVF9NQVNLKGJpdCk7XFxuK1xcdHUzMiBpZHggPSBCSVRfV09SRChiaXQpO1xcbitcXHR1NjQgb2xkLCBuZXcsIGFjdHVhbDtcXG4rXFxuK1xcdGRvIHtcXG4rXFx0XFx0b2xkID0gYm1wLVxcdTAwM2ViaXRzW2lkeF07XFxuK1xcdFxcdG5ldyA9IG9sZCB8IHZhbDtcXG4rXFx0XFx0YWN0dWFsID0gY21weGNoZyhcXHUwMDI2Ym1wLVxcdTAwM2ViaXRzW2lkeF0sIG9sZCwgbmV3KTtcXG4rXFxuK1xcdH0gd2hpbGUgKGFjdHVhbCAhPSBvbGQgXFx1MDAyNlxcdTAwMjYgY2FuX2xvb3ApO1xcbit9XFxuK1xcbitfX3dlYWtcXG4rdm9pZCBibXBfY2xlYXIoc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKVxcbit7XFxuK1xcdHNpemVfdCBud29yZHMgPSBCSVRTX1RPX0xPTkdfTE9OR1MoYml0cyk7XFxuK1xcdHZvbGF0aWxlIHUzMiBpO1xcbitcXG4rXFx0Zm9yIChpID0gemVybzsgaSBcXHUwMDNjIG53b3JkcyBcXHUwMDI2XFx1MDAyNiBjYW5fbG9vcDsgaSsrKVxcbitcXHRcXHRibXAtXFx1MDAzZWJpdHNbaV0gPSAwO1xcbit9XFxuK1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHU2NCBibXBfbGFzdF93b3JkX21hc2soc2l6ZV90IGJpdHMpXFxuK3tcXG4rXFx0dTMyIHJlbSA9IGJpdHMgJSBCSVRTX1BFUl9MT05HX0xPTkc7XFxuK1xcbitcXHRyZXR1cm4gcmVtID8gKDFVTEwgXFx1MDAzY1xcdTAwM2MgcmVtKSAtIDEgOiB+MFVMTDtcXG4rfVxcbitcXG4rX193ZWFrXFxuK3ZvaWQgYm1wX2FuZChzaXplX3QgYml0cywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpkc3QsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqc3JjMSwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpzcmMyKVxcbit7XFxuK1xcdHNpemVfdCBud29yZHMgPSBCSVRTX1RPX0xPTkdfTE9OR1MoYml0cyk7XFxuK1xcdHZvbGF0aWxlIHUzMiBpO1xcbitcXG4rXFx0Zm9yIChpID0gemVybzsgaSBcXHUwMDNjIG53b3JkcyBcXHUwMDI2XFx1MDAyNiBjYW5fbG9vcDsgaSsrKVxcbitcXHRcXHRkc3QtXFx1MDAzZWJpdHNbaV0gPSBzcmMxLVxcdTAwM2ViaXRzW2ldIFxcdTAwMjYgc3JjMi1cXHUwMDNlYml0c1tpXTtcXG4rXFxuK1xcdGlmIChud29yZHMgXFx1MDAyNlxcdTAwMjYgYml0cyAlIEJJVFNfUEVSX0xPTkdfTE9ORylcXG4rXFx0XFx0ZHN0LVxcdTAwM2ViaXRzW253b3JkcyAtIDFdIFxcdTAwMjY9IGJtcF9sYXN0X3dvcmRfbWFzayhiaXRzKTtcXG4rfVxcbitcXG4rX193ZWFrXFxuK3ZvaWQgYm1wX29yKHNpemVfdCBiaXRzLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmRzdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpzcmMxLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKnNyYzIpXFxuK3tcXG4rXFx0c2l6ZV90IG53b3JkcyA9IEJJVFNfVE9fTE9OR19MT05HUyhiaXRzKTtcXG4rXFx0dm9sYXRpbGUgdTMyIGk7XFxuK1xcbitcXHRmb3IgKGkgPSB6ZXJvOyBpIFxcdTAwM2MgbndvcmRzIFxcdTAwMjZcXHUwMDI2IGNhbl9sb29wOyBpKyspXFxuK1xcdFxcdGRzdC1cXHUwMDNlYml0c1tpXSA9IHNyYzEtXFx1MDAzZWJpdHNbaV0gfCBzcmMyLVxcdTAwM2ViaXRzW2ldO1xcbitcXG4rXFx0aWYgKG53b3JkcyBcXHUwMDI2XFx1MDAyNiBiaXRzICUgQklUU19QRVJfTE9OR19MT05HKVxcbitcXHRcXHRkc3QtXFx1MDAzZWJpdHNbbndvcmRzIC0gMV0gXFx1MDAyNj0gYm1wX2xhc3Rfd29yZF9tYXNrKGJpdHMpO1xcbit9XFxuK1xcbitfX3dlYWtcXG4rYm9vbCBibXBfZW1wdHkoc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKVxcbit7XFxuK1xcdHNpemVfdCBud29yZHMgPSBCSVRTX1RPX0xPTkdfTE9OR1MoYml0cyk7XFxuK1xcdHZvbGF0aWxlIHUzMiBpO1xcbitcXG4rXFx0Zm9yIChpID0gemVybzsgaSBcXHUwMDNjIG53b3JkcyBcXHUwMDI2XFx1MDAyNiBjYW5fbG9vcDsgaSsrKSB7XFxuK1xcdFxcdHU2NCBtYXNrID0gKGkgPT0gbndvcmRzIC0gMSkgPyBibXBfbGFzdF93b3JkX21hc2soYml0cykgOiB+MFVMTDtcXG4rXFxuK1xcdFxcdGlmIChibXAtXFx1MDAzZWJpdHNbaV0gXFx1MDAyNiBtYXNrKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbitfX3dlYWtcXG4rdm9pZCBibXBfY29weShzaXplX3QgYml0cywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpkc3QsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqc3JjKVxcbit7XFxuK1xcdHNpemVfdCBud29yZHMgPSBCSVRTX1RPX0xPTkdfTE9OR1MoYml0cyk7XFxuK1xcdHZvbGF0aWxlIHUzMiBpO1xcbitcXG4rXFx0Zm9yIChpID0gemVybzsgaSBcXHUwMDNjIG53b3JkcyBcXHUwMDI2XFx1MDAyNiBjYW5fbG9vcDsgaSsrKVxcbitcXHRcXHRkc3QtXFx1MDAzZWJpdHNbaV0gPSBzcmMtXFx1MDAzZWJpdHNbaV07XFxuK1xcbitcXHRpZiAobndvcmRzIFxcdTAwMjZcXHUwMDI2IGJpdHMgJSBCSVRTX1BFUl9MT05HX0xPTkcpXFxuK1xcdFxcdGRzdC1cXHUwMDNlYml0c1tud29yZHMgLSAxXSBcXHUwMDI2PSBibXBfbGFzdF93b3JkX21hc2soYml0cyk7XFxuK31cXG4rXFxuK19fd2Vha1xcbitib29sIGJtcF9zdWJzZXQoc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYmlnLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKnNtYWxsKVxcbit7XFxuK1xcdHNpemVfdCBud29yZHMgPSBCSVRTX1RPX0xPTkdfTE9OR1MoYml0cyk7XFxuK1xcdHZvbGF0aWxlIHUzMiBpO1xcbitcXG4rXFx0Zm9yIChpID0gemVybzsgaSBcXHUwMDNjIG53b3JkcyBcXHUwMDI2XFx1MDAyNiBjYW5fbG9vcDsgaSsrKSB7XFxuK1xcdFxcdHU2NCBtYXNrID0gKGkgPT0gbndvcmRzIC0gMSkgPyBibXBfbGFzdF93b3JkX21hc2soYml0cykgOiB+MFVMTDtcXG4rXFxuK1xcdFxcdGlmICh+YmlnLVxcdTAwM2ViaXRzW2ldIFxcdTAwMjYgc21hbGwtXFx1MDAzZWJpdHNbaV0gXFx1MDAyNiBtYXNrKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbitfX3dlYWtcXG4rYm9vbCBibXBfaW50ZXJzZWN0cyhzaXplX3QgYml0cywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICphcmcxLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmFyZzIpXFxuK3tcXG4rXFx0c2l6ZV90IG53b3JkcyA9IEJJVFNfVE9fTE9OR19MT05HUyhiaXRzKTtcXG4rXFx0dm9sYXRpbGUgdTMyIGk7XFxuK1xcbitcXHRmb3IgKGkgPSB6ZXJvOyBpIFxcdTAwM2MgbndvcmRzIFxcdTAwMjZcXHUwMDI2IGNhbl9sb29wOyBpKyspIHtcXG4rXFx0XFx0dTY0IG1hc2sgPSAoaSA9PSBud29yZHMgLSAxKSA/IGJtcF9sYXN0X3dvcmRfbWFzayhiaXRzKSA6IH4wVUxMO1xcbitcXG4rXFx0XFx0aWYgKGFyZzEtXFx1MDAzZWJpdHNbaV0gXFx1MDAyNiBhcmcyLVxcdTAwM2ViaXRzW2ldIFxcdTAwMjYgbWFzaylcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rX193ZWFrXFxuK3ZvaWQgYm1wX3ByaW50KHNpemVfdCBiaXRzLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcClcXG4re1xcbitcXHRzaXplX3QgbndvcmRzID0gQklUU19UT19MT05HX0xPTkdTKGJpdHMpO1xcbitcXHR2b2xhdGlsZSB1MzIgaTtcXG4rXFxuK1xcdGZvciAoaSA9IHplcm87IGkgXFx1MDAzYyBud29yZHMgXFx1MDAyNlxcdTAwMjYgY2FuX2xvb3A7IGkrKylcXG4rXFx0XFx0YXJlbmFfc3RkZXJyKFxcXCIlMDE2bGx4IFxcXCIsIGJtcC1cXHUwMDNlYml0c1tpXSk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9jb21tb24uYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2NvbW1vbi5icGYuY1xcbmluZGV4IDUwYmU1NzIxM2RmYjhkLi41NjlmMGY2NGQ1MThiMyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2NvbW1vbi5icGYuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvY29tbW9uLmJwZi5jXFxuQEAgLTQsOSArNCw4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaWJhcmVuYS9hc2FuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaWJhcmVuYS9idWRkeS5oXFx1MDAzZVxcbiBcXG4tY29uc3Qgdm9sYXRpbGUgdTMyIHplcm8gPSAwO1xcbi1cXG4gc3RydWN0IGJ1ZGR5IF9fYXJlbmEgYnVkZHk7XFxuK3ZvbGF0aWxlIHUzMiB6ZXJvID0gMDtcXG4gXFxuIGludCBhcmVuYV9mbHMoX191NjQgd29yZClcXG4ge1xcbkBAIC0zOCw2ICszNywxMiBAQCBfX3dlYWsgaW50IGFyZW5hX2J1ZGR5X3Jlc2V0KHZvaWQpXFxuIFxcdHJldHVybiBidWRkeV9pbml0KFxcdTAwMjZidWRkeSk7XFxuIH1cXG4gXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK19fd2VhayBpbnQgYXJlbmFfYnVkZHlfZGVzdHJveSh2b2lkKVxcbit7XFxuK1xcdHJldHVybiBidWRkeV9kZXN0cm95KFxcdTAwMjZidWRkeSk7XFxuK31cXG4rXFxuIF9fd2VhayB2b2lkIF9fYXJlbmEgKmFyZW5hX21hbGxvYyhzaXplX3Qgc2l6ZSlcXG4ge1xcbiBcXHRyZXR1cm4gYnVkZHlfYWxsb2MoXFx1MDAyNmJ1ZGR5LCBzaXplKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hLmNcXG5pbmRleCA2MWVhNjhkY2U0MTA1Zi4uYmE1YTVhNTBmN2MwN2QgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmEuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hLmNcXG5AQCAtMTUsNyArMTUsMTIgQEAgc3RhdGljIHZvaWQgcnVuX2xpYmFyZW5hX3Rlc3Qoc3RydWN0IGxpYmFyZW5hICpza2VsLCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csXFxuIHtcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdGlmICghc3Ryc3RyKG5hbWUsIFxcXCJ0ZXN0X2J1ZGR5XFxcIikpIHtcXG4rXFx0aWYgKHN0cnN0cihuYW1lLCBcXFwidGVzdF9idWRkeVxcXCIpKSB7XFxuK1xcdFxcdC8qIEJ1ZGR5IHRlc3RzIGluaXRpYWxpemUgdGhlIGFsbG9jYXRvciBkaXJlY3RseS4gKi9cXG4rXFx0XFx0cmV0ID0gbGliYXJlbmFfcnVuX3Byb2coYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXFx1MDAzZXByb2dzLmFyZW5hX2J1ZGR5X2Rlc3Ryb3kpKTtcXG4rXFx0XFx0aWYgKCFBU1NFUlRfT0socmV0LCBcXFwiYXJlbmFfYnVkZHlfZGVzdHJveVxcXCIpKVxcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcdH0gZWxzZSB7XFxuIFxcdFxcdHJldCA9IGxpYmFyZW5hX3J1bl9wcm9nKGJwZl9wcm9ncmFtX19mZChza2VsLVxcdTAwM2Vwcm9ncy5hcmVuYV9idWRkeV9yZXNldCkpO1xcbiBcXHRcXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFxcXCJhcmVuYV9idWRkeV9yZXNldFxcXCIpKVxcbiBcXHRcXHRcXHRyZXR1cm47XFxuQEAgLTI0LDcgKzI5LDYgQEAgc3RhdGljIHZvaWQgcnVuX2xpYmFyZW5hX3Rlc3Qoc3RydWN0IGxpYmFyZW5hICpza2VsLCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csXFxuIFxcdHJldCA9IGxpYmFyZW5hX3J1bl9wcm9nKGJwZl9wcm9ncmFtX19mZChwcm9nKSk7XFxuIFxcbiBcXHRBU1NFUlRfT0socmV0LCBuYW1lKTtcXG4tXFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkICpydW5fbGliYXJlbmFfcGFyYWxsZWxfcHJvZyh2b2lkICphcmcpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uY1xcbmluZGV4IGQ1OWQ5ZGQxMmVmMmIyLi5mODk3NDA1ZjcwMWRkNSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmNcXG5AQCAtMTcsNyArMTcsMTIgQEAgc3RhdGljIHZvaWQgcnVuX2xpYmFyZW5hX2FzYW5fdGVzdChzdHJ1Y3QgbGliYXJlbmFfYXNhbiAqc2tlbCxcXG4ge1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0aWYgKCFzdHJzdHIobmFtZSwgXFxcInRlc3RfYnVkZHlcXFwiKSkge1xcbitcXHRpZiAoc3Ryc3RyKG5hbWUsIFxcXCJ0ZXN0X2J1ZGR5XFxcIikpIHtcXG4rXFx0XFx0LyogQnVkZHkgdGVzdHMgaW5pdGlhbGl6ZSB0aGUgYWxsb2NhdG9yIGRpcmVjdGx5LiAqL1xcbitcXHRcXHRyZXQgPSBsaWJhcmVuYV9ydW5fcHJvZyhicGZfcHJvZ3JhbV9fZmQoc2tlbC1cXHUwMDNlcHJvZ3MuYXJlbmFfYnVkZHlfZGVzdHJveSkpO1xcbitcXHRcXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFxcXCJhcmVuYV9idWRkeV9kZXN0cm95XFxcIikpXFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFx0fSBlbHNlIHtcXG4gXFx0XFx0cmV0ID0gbGliYXJlbmFfcnVuX3Byb2coYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXFx1MDAzZXByb2dzLmFyZW5hX2J1ZGR5X3Jlc2V0KSk7XFxuIFxcdFxcdGlmICghQVNTRVJUX09LKHJldCwgXFxcImFyZW5hX2J1ZGR5X3Jlc2V0XFxcIikpXFxuIFxcdFxcdFxcdHJldHVybjtcXG5AQCAtOTAsNCArOTUsMyBAQCB2b2lkIHRlc3RfbGliYXJlbmFfYXNhbih2b2lkKVxcbiBcXG4gXFx0cmV0dXJuO1xcbiB9XFxuLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QwMjowMTozMS42NTQyNzMwNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODE0ODk1MTA5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIGFuZCBtb2RpZmllcyBCUEYgc2VsZnRlc3RzIGZvciBsaWJhcmVuYSB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmUgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGM0YzE0NDI5MmNlNWNlOGMwOTYzMDYwM2YzN2Q4NzhhZjUyN2ZkOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDcgMDI6MDE6MjggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9iaXRtYXAuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2JpdG1hcC5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmNmNmI2M2Y1ZDlhNDVmXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9iaXRtYXAuaFxuQEAgLTAsMCArMSwzNCBAQFxuKyNwcmFnbWEgb25jZVxuK1xuKyNkZWZpbmUgQklUU19QRVJfQllURVx0XHQ4XG4rI2RlZmluZSBCWVRFU19UT19CSVRTKG5iKVx0KChuYikgKiBCSVRTX1BFUl9CWVRFKVxuK1xuKyNkZWZpbmUgQklUU19QRVJfTE9OR19MT05HXHQoc2l6ZW9mKGxvbmcgbG9uZykgKiBCSVRTX1BFUl9CWVRFKVxuKyNkZWZpbmUgQklUU19UT19MT05HX0xPTkdTKG5yKVx0KCgobnIpICsgQklUU19QRVJfTE9OR19MT05HIC0gMSkgLyBCSVRTX1BFUl9MT05HX0xPTkcpXG4rI2RlZmluZSBCSVRfTUFTSyhucilcdFx0KDFVTEwgXHUwMDNjXHUwMDNjICgobnIpICUgQklUU19QRVJfTE9OR19MT05HKSlcbisjZGVmaW5lIEJJVF9XT1JEKG5yKVx0XHQoKG5yKSAvIEJJVFNfUEVSX0xPTkdfTE9ORylcbitcbitzdHJ1Y3QgYml0bWFwIHtcbitcdHU2NCBiaXRzWzBdO1xuK307XG4rXG4rc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXBfYWxsb2Moc2l6ZV90IGJpdHMpO1xuK3ZvaWQgYm1wX2ZyZWUoc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApO1xuK1xuK3ZvaWQgX19ibXBfc2V0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcCk7XG4rdm9pZCBfX2JtcF9jbGVhcl9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApO1xuK3ZvaWQgYm1wX3NldF9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApO1xuK3ZvaWQgYm1wX2NsZWFyX2JpdCh1MzIgYml0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcCk7XG4rYm9vbCBibXBfdGVzdF9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApO1xuK2Jvb2wgYm1wX3Rlc3RfYW5kX2NsZWFyX2JpdCh1MzIgYml0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcCk7XG4rYm9vbCBibXBfdGVzdF9hbmRfc2V0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcCk7XG4rXG4rdm9pZCBibXBfY2xlYXIoc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKTtcbit2b2lkIGJtcF9hbmQoc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqZHN0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKnNyYzEsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqc3JjMik7XG4rdm9pZCBibXBfb3Ioc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqZHN0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKnNyYzEsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqc3JjMik7XG4rYm9vbCBibXBfZW1wdHkoc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wKTtcbit2b2lkIGJtcF9jb3B5KHNpemVfdCBiaXRzLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmRzdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpzcmMpO1xuK1xuK2Jvb2wgYm1wX2ludGVyc2VjdHMoc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYXJnMSwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICphcmcyKTtcbitib29sIGJtcF9zdWJzZXQoc2l6ZV90IGJpdHMsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYmlnLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKnNtYWxsKTtcbit2b2lkIGJtcF9wcmludChzaXplX3QgYml0cywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2NvbW1vbi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL2luY2x1ZGUvbGliYXJlbmEvY29tbW9uLmhcbmluZGV4IGEzZWIxNjQxYWMzNmRmLi45MzFhY2U5YTQ5ZTJiZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9pbmNsdWRlL2xpYmFyZW5hL2NvbW1vbi5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvaW5jbHVkZS9saWJhcmVuYS9jb21tb24uaFxuQEAgLTQzLDcgKzQzLDcgQEAgc3RydWN0IHtcbiAgKiBpbXByZWNpc2UuIFRvIGZvcmNlIHRoZSB2YXJpYWJsZSB0byBiZSBpbXByZWNpc2UsIGluaXRpYWxpemUgaXQgd2l0aFxuICAqIHRoZSBvcGFxdWUgdm9sYXRpbGUgdmFyaWFibGUgMCBpbnN0ZWFkIG9mIHRoZSBjb25zdGFudCAwLlxuICAqL1xuLWV4dGVybiBjb25zdCB2b2xhdGlsZSB1MzIgemVybztcbit2b2xhdGlsZSB1MzIgemVybyBfX3dlYWs7XG4gZXh0ZXJuIHZvbGF0aWxlIHU2NCBhc2FuX3Zpb2xhdGVkO1xuIFxuIGludCBhcmVuYV9mbHMoX191NjQgd29yZCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy9zdF9hc2FuX2J1ZGR5LmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2FzYW5fYnVkZHkuYnBmLmNcbnNpbWlsYXJpdHkgaW5kZXggOTglXG5yZW5hbWUgZnJvbSB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3N0X2FzYW5fYnVkZHkuYnBmLmNcbnJlbmFtZSB0byB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYXNhbl9idWRkeS5icGYuY1xuaW5kZXggNjg2Y2FiYTJjNjQzYjUuLjMyNjZhMjhmNTNkNzY4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy9zdF9hc2FuX2J1ZGR5LmJwZi5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfYXNhbl9idWRkeS5icGYuY1xuQEAgLTEyLDcgKzEyLDcgQEAgZXh0ZXJuIHN0cnVjdCBidWRkeSBfX2FyZW5hIGJ1ZGR5O1xuIFxuICNpZmRlZiBCUEZfQVJFTkFfQVNBTlxuIFxuLSNpbmNsdWRlIFwic3RfYXNhbl9jb21tb24uaFwiXG4rI2luY2x1ZGUgXCJ0ZXN0X2FzYW5fY29tbW9uLmhcIlxuIFxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IGFzYW5fdGVzdF9idWRkeV9vb2Jfc2luZ2xlKHNpemVfdCBhbGxvY19zaXplKVxuIHtcbkBAIC0xNTQsNyArMTU0LDggQEAgX193ZWFrIGludCBhc2FuX3Rlc3RfYnVkZHlfb29iKHZvaWQpXG4gXHRzaXplX3Qgc2l6ZXNbXSA9IHtcbiBcdFx0NywgOCwgMTcsIDE4LCA2NCwgMjU2LCAzMTcsIDUxMiwgMTAyNCxcbiBcdH07XG4tXHRpbnQgcmV0LCBpO1xuK1x0aW50IHJldDtcbitcdHUzMiBpO1xuIFxuIFx0cmV0ID0gYnVkZHlfaW5pdChcdTAwMjZidWRkeSk7XG4gXHRpZiAocmV0KSB7XG5AQCAtMTYzLDYgKzE2NCw3IEBAIF9fd2VhayBpbnQgYXNhbl90ZXN0X2J1ZGR5X29vYih2b2lkKVxuIFx0fVxuIFxuIFx0Zm9yIChpID0gemVybzsgaSBcdTAwM2Mgc2l6ZW9mKHNpemVzKSAvIHNpemVvZihzaXplc1swXSkgXHUwMDI2XHUwMDI2IGNhbl9sb29wOyBpKyspIHtcbitcdFx0YmFycmllcl92YXIoaSk7XG4gXHRcdHJldCA9IGFzYW5fdGVzdF9idWRkeV9vb2Jfc2luZ2xlKHNpemVzW2ldKTtcbiBcdFx0aWYgKHJldCkge1xuIFx0XHRcdGFyZW5hX3N0ZG91dChcIiVzOiVkIEZhaWxlZCBmb3Igc2l6ZSAlbHVcIiwgX19mdW5jX18sXG5AQCAtMTkwLDcgKzE5Miw4IEBAIF9fc3RkZXJyKFwiQ2FsbCB0cmFjZTpcXG5cIlxuIF9fd2VhayBpbnQgYXNhbl90ZXN0X2J1ZGR5X3VhZih2b2lkKVxuIHtcbiBcdHNpemVfdCBzaXplc1tdID0geyAxNiwgMzIsIDY0LCAxMjgsIDI1NiwgNTEyLCAxMDI0LCAxNjM4NCB9O1xuLVx0aW50IHJldCwgaTtcbitcdGludCByZXQ7XG4rXHR1MzIgaTtcbiBcbiBcdHJldCA9IGJ1ZGR5X2luaXQoXHUwMDI2YnVkZHkpO1xuIFx0aWYgKHJldCkge1xuQEAgLTE5OSw2ICsyMDIsNyBAQCBfX3dlYWsgaW50IGFzYW5fdGVzdF9idWRkeV91YWYodm9pZClcbiBcdH1cbiBcbiBcdGZvciAoaSA9IHplcm87IGkgXHUwMDNjIHNpemVvZihzaXplcykgLyBzaXplb2Yoc2l6ZXNbMF0pIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSsrKSB7XG4rXHRcdGJhcnJpZXJfdmFyKGkpO1xuIFx0XHRyZXQgPSBhc2FuX3Rlc3RfYnVkZHlfdWFmX3NpbmdsZShzaXplc1tpXSk7XG4gXHRcdGlmIChyZXQpIHtcbiBcdFx0XHRhcmVuYV9zdGRvdXQoXCIlczolZCBGYWlsZWQgZm9yIHNpemUgJWx1XCIsIF9fZnVuY19fLFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvc3RfYXNhbl9jb21tb24uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9hc2FuX2NvbW1vbi5oXG5zaW1pbGFyaXR5IGluZGV4IDEwMCVcbnJlbmFtZSBmcm9tIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvc3RfYXNhbl9jb21tb24uaFxucmVuYW1lIHRvIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9hc2FuX2NvbW1vbi5oXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2JpdG1hcC5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9iaXRtYXAuYnBmLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZTdkMzJmNDRkNjg3MDlcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9iaXRtYXAuYnBmLmNcbkBAIC0wLDAgKzEsMzk0IEBAXG4rI2luY2x1ZGUgXHUwMDNjbGliYXJlbmEvY29tbW9uLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcdTAwM2NsaWJhcmVuYS9hc2FuLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaWJhcmVuYS9iaXRtYXAuaFx1MDAzZVxuK1xuKyNkZWZpbmUgVEVTVF9CSVRTXHQoMiAqIEJJVFNfUEVSX0xPTkdfTE9ORylcbisjZGVmaW5lIFRFU1RfV09SRFNcdEJJVFNfVE9fTE9OR19MT05HUyhURVNUX0JJVFMpXG4rI2RlZmluZSBNSURfQklUXHRcdChCSVRTX1BFUl9MT05HX0xPTkcgKyAxKVxuKyNkZWZpbmUgTEFTVF9CSVRcdChURVNUX0JJVFMgLSAxKVxuK1xuK3N0YXRpYyB2b2lkIHRlc3RfYm1wX3NldGFsbChzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcClcbit7XG4rXHR2b2xhdGlsZSB1MzIgaTtcbitcbitcdGZvciAoaSA9IHplcm87IGkgXHUwMDNjIFRFU1RfV09SRFMgXHUwMDI2XHUwMDI2IGNhbl9sb29wOyBpKyspXG4rXHRcdGJtcC1cdTAwM2ViaXRzW2ldID0gfjBVTEw7XG4rfVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitfX3dlYWsgaW50IHRlc3RfYml0bWFwX2FsbG9jX2ZyZWUodm9pZClcbit7XG4rXHRzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcDtcbitcbitcdGJtcCA9IGJtcF9hbGxvYyhURVNUX0JJVFMpO1xuK1x0aWYgKCFibXApXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0aWYgKCFibXBfZW1wdHkoVEVTVF9CSVRTLCBibXApKVxuK1x0XHRnb3RvIGVycjtcbitcbitcdF9fYm1wX3NldF9iaXQoTEFTVF9CSVQsIGJtcCk7XG4rXHRpZiAoIWJtcF90ZXN0X2JpdChMQVNUX0JJVCwgYm1wKSlcbitcdFx0Z290byBlcnI7XG4rXG4rXHRfX2JtcF9jbGVhcl9iaXQoTEFTVF9CSVQsIGJtcCk7XG4rXHRpZiAoYm1wX3Rlc3RfYml0KExBU1RfQklULCBibXApKVxuK1x0XHRnb3RvIGVycjtcbitcbitcdGJtcF9mcmVlKGJtcCk7XG4rXHRyZXR1cm4gMDtcbitcbitlcnI6XG4rXHRibXBfZnJlZShibXApO1xuK1x0cmV0dXJuIC1FSU5WQUw7XG4rfVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitfX3dlYWsgaW50IHRlc3RfYml0bWFwX2JpdF9vcHModm9pZClcbit7XG4rXHRzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcDtcbitcbitcdGJtcCA9IGJtcF9hbGxvYyhURVNUX0JJVFMpO1xuK1x0aWYgKCFibXApXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0X19ibXBfc2V0X2JpdCgwLCBibXApO1xuK1x0aWYgKCFibXBfdGVzdF9iaXQoMCwgYm1wKSlcbitcdFx0Z290byBlcnI7XG4rXG4rXHRfX2JtcF9zZXRfYml0KE1JRF9CSVQsIGJtcCk7XG4rXHRpZiAoIWJtcF90ZXN0X2JpdChNSURfQklULCBibXApKVxuK1x0XHRnb3RvIGVycjtcbitcbitcdF9fYm1wX3NldF9iaXQoTEFTVF9CSVQsIGJtcCk7XG4rXHRpZiAoIWJtcF90ZXN0X2JpdChMQVNUX0JJVCwgYm1wKSlcbitcdFx0Z290byBlcnI7XG4rXG4rXHRpZiAoYm1wX3Rlc3RfYml0KE1JRF9CSVQgLSAxLCBibXApKVxuK1x0XHRnb3RvIGVycjtcbitcbitcdF9fYm1wX2NsZWFyX2JpdChNSURfQklULCBibXApO1xuK1x0aWYgKGJtcF90ZXN0X2JpdChNSURfQklULCBibXApKVxuK1x0XHRnb3RvIGVycjtcbitcbitcdGlmICghYm1wX3Rlc3RfYml0KDAsIGJtcCkpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0aWYgKCFibXBfdGVzdF9iaXQoTEFTVF9CSVQsIGJtcCkpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0X19ibXBfY2xlYXJfYml0KDAsIGJtcCk7XG4rXHRfX2JtcF9jbGVhcl9iaXQoTEFTVF9CSVQsIGJtcCk7XG4rXHRpZiAoIWJtcF9lbXB0eShURVNUX0JJVFMsIGJtcCkpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0aWYgKGJtcC1cdTAwM2ViaXRzWzBdKVxuK1x0XHRnb3RvIGVycjtcbitcbitcdGlmIChibXAtXHUwMDNlYml0c1sxXSlcbitcdFx0Z290byBlcnI7XG4rXG4rXHRibXBfZnJlZShibXApO1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyOlxuK1x0Ym1wX2ZyZWUoYm1wKTtcbitcdHJldHVybiAtRUlOVkFMO1xuK31cbitcbitzdGF0aWMgYm9vbCB0ZXN0X2JpdG1hcF90ZXN0X2FuZF9jbGVhcl9zaW5nbGUoc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXAsIHNpemVfdCBpbmQpXG4re1xuK1x0aWYgKGJtcF90ZXN0X2FuZF9jbGVhcl9iaXQoaW5kLCBibXApKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRfX2JtcF9zZXRfYml0KGluZCwgYm1wKTtcbitcbitcdGlmICghYm1wX3Rlc3RfYW5kX2NsZWFyX2JpdChpbmQsIGJtcCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmIChibXBfdGVzdF9iaXQoaW5kLCBibXApKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoYm1wX3Rlc3RfYW5kX2NsZWFyX2JpdChpbmQsIGJtcCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbitzdGF0aWMgYm9vbCB0ZXN0X2JpdG1hcF90ZXN0X2FuZF9zZXRfc2luZ2xlKHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wLCBzaXplX3QgaW5kKVxuK3tcbitcdGlmIChibXBfdGVzdF9hbmRfc2V0X2JpdChpbmQsIGJtcCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmICghYm1wX3Rlc3RfYW5kX3NldF9iaXQoaW5kLCBibXApKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoIWJtcF90ZXN0X2JpdChpbmQsIGJtcCkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdF9fYm1wX2NsZWFyX2JpdChpbmQsIGJtcCk7XG4rXG4rXHRpZiAoYm1wX3Rlc3RfYW5kX3NldF9iaXQoaW5kLCBibXApKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rU0VDKFwic3lzY2FsbFwiKVxuK19fd2VhayBpbnQgdGVzdF9iaXRtYXBfdGVzdF9hbmRfY2xlYXJfYml0KHZvaWQpXG4re1xuK1x0c3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXA7XG4rXG4rXHRibXAgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTtcbitcdGlmICghYm1wKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGlmICghdGVzdF9iaXRtYXBfdGVzdF9hbmRfY2xlYXJfc2luZ2xlKGJtcCwgMCkpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0aWYgKCF0ZXN0X2JpdG1hcF90ZXN0X2FuZF9jbGVhcl9zaW5nbGUoYm1wLCBNSURfQklUKSlcbitcdFx0Z290byBlcnI7XG4rXG4rXHRpZiAoIXRlc3RfYml0bWFwX3Rlc3RfYW5kX2NsZWFyX3NpbmdsZShibXAsIExBU1RfQklUKSlcbitcdFx0Z290byBlcnI7XG4rXG4rXHRpZiAoIWJtcF9lbXB0eShURVNUX0JJVFMsIGJtcCkpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0Ym1wX2ZyZWUoYm1wKTtcbitcdHJldHVybiAwO1xuK1xuK2VycjpcbitcdGJtcF9mcmVlKGJtcCk7XG4rXHRyZXR1cm4gLUVJTlZBTDtcbit9XG4rXG4rU0VDKFwic3lzY2FsbFwiKVxuK19fd2VhayBpbnQgdGVzdF9iaXRtYXBfdGVzdF9hbmRfc2V0X2JpdCh2b2lkKVxuK3tcbitcdHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wO1xuK1xuK1x0Ym1wID0gYm1wX2FsbG9jKFRFU1RfQklUUyk7XG4rXHRpZiAoIWJtcClcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRpZiAoIXRlc3RfYml0bWFwX3Rlc3RfYW5kX3NldF9zaW5nbGUoYm1wLCAwKSlcbitcdFx0Z290byBlcnI7XG4rXG4rXHRpZiAoIXRlc3RfYml0bWFwX3Rlc3RfYW5kX3NldF9zaW5nbGUoYm1wLCBNSURfQklUKSlcbitcdFx0Z290byBlcnI7XG4rXG4rXHRpZiAoIXRlc3RfYml0bWFwX3Rlc3RfYW5kX3NldF9zaW5nbGUoYm1wLCBMQVNUX0JJVCkpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0Ym1wX2ZyZWUoYm1wKTtcbitcdHJldHVybiAwO1xuK1xuK2VycjpcbitcdGJtcF9mcmVlKGJtcCk7XG4rXHRyZXR1cm4gLUVJTlZBTDtcbit9XG4rXG4rXG4rU0VDKFwic3lzY2FsbFwiKVxuK19fd2VhayBpbnQgdGVzdF9iaXRtYXBfYW5kKHZvaWQpXG4re1xuK1x0c3RydWN0IGJpdG1hcCBfX2FyZW5hICpzcmMxID0gTlVMTCwgKnNyYzIgPSBOVUxMLCAqZHN0ID0gTlVMTDtcbitcbitcdHNyYzEgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTtcbitcdHNyYzIgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTtcbitcdGRzdCA9IGJtcF9hbGxvYyhURVNUX0JJVFMpO1xuK1x0aWYgKCFzcmMxIHx8ICFzcmMyIHx8ICFkc3QpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0dGVzdF9ibXBfc2V0YWxsKGRzdCk7XG4rXG4rXHRfX2JtcF9zZXRfYml0KDAsIHNyYzEpO1xuK1x0X19ibXBfc2V0X2JpdChNSURfQklULCBzcmMxKTtcbitcdF9fYm1wX3NldF9iaXQoTEFTVF9CSVQsIHNyYzEpO1xuK1xuK1x0X19ibXBfc2V0X2JpdChNSURfQklULCBzcmMyKTtcbitcdF9fYm1wX3NldF9iaXQoTEFTVF9CSVQsIHNyYzIpO1xuK1xuK1x0Ym1wX2FuZChURVNUX0JJVFMsIGRzdCwgc3JjMSwgc3JjMik7XG4rXG4rXHRpZiAoYm1wX3Rlc3RfYml0KDAsIGRzdCkpXG4rXHRcdGdvdG8gZXJyO1xuK1x0aWYgKCFibXBfdGVzdF9iaXQoTUlEX0JJVCwgZHN0KSlcbitcdFx0Z290byBlcnI7XG4rXHRpZiAoIWJtcF90ZXN0X2JpdChMQVNUX0JJVCwgZHN0KSlcbitcdFx0Z290byBlcnI7XG4rXG4rXHRpZiAoZHN0LVx1MDAzZWJpdHNbMF0pXG4rXHRcdGdvdG8gZXJyO1xuK1x0aWYgKGRzdC1cdTAwM2ViaXRzWzFdICE9IChCSVRfTUFTSyhNSURfQklUKSB8IEJJVF9NQVNLKExBU1RfQklUKSkpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0Ym1wX2ZyZWUoc3JjMSk7XG4rXHRibXBfZnJlZShzcmMyKTtcbitcdGJtcF9mcmVlKGRzdCk7XG4rXHRyZXR1cm4gMDtcbitcbitlcnI6XG4rXHRibXBfZnJlZShzcmMxKTtcbitcdGJtcF9mcmVlKHNyYzIpO1xuK1x0Ym1wX2ZyZWUoZHN0KTtcbitcdHJldHVybiAtRUlOVkFMO1xuK31cbitcbitTRUMoXCJzeXNjYWxsXCIpXG4rX193ZWFrIGludCB0ZXN0X2JpdG1hcF9vcih2b2lkKVxuK3tcbitcdHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqc3JjMSA9IE5VTEwsICpzcmMyID0gTlVMTCwgKmRzdCA9IE5VTEw7XG4rXG4rXHRzcmMxID0gYm1wX2FsbG9jKFRFU1RfQklUUyk7XG4rXHRzcmMyID0gYm1wX2FsbG9jKFRFU1RfQklUUyk7XG4rXHRkc3QgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTtcbitcdGlmICghc3JjMSB8fCAhc3JjMiB8fCAhZHN0KVxuK1x0XHRnb3RvIGVycjtcbitcbitcdHRlc3RfYm1wX3NldGFsbChkc3QpO1xuK1xuK1x0X19ibXBfc2V0X2JpdCgwLCBzcmMxKTtcbitcdF9fYm1wX3NldF9iaXQoTEFTVF9CSVQsIHNyYzEpO1xuK1xuK1x0X19ibXBfc2V0X2JpdChNSURfQklULCBzcmMyKTtcbitcdF9fYm1wX3NldF9iaXQoTEFTVF9CSVQsIHNyYzIpO1xuK1xuK1x0Ym1wX29yKFRFU1RfQklUUywgZHN0LCBzcmMxLCBzcmMyKTtcbitcbitcdGlmICghYm1wX3Rlc3RfYml0KDAsIGRzdCkpXG4rXHRcdGdvdG8gZXJyO1xuK1x0aWYgKCFibXBfdGVzdF9iaXQoTUlEX0JJVCwgZHN0KSlcbitcdFx0Z290byBlcnI7XG4rXHRpZiAoIWJtcF90ZXN0X2JpdChMQVNUX0JJVCwgZHN0KSlcbitcdFx0Z290byBlcnI7XG4rXG4rXHRpZiAoZHN0LVx1MDAzZWJpdHNbMF0gIT0gQklUX01BU0soMCkpXG4rXHRcdGdvdG8gZXJyO1xuK1x0aWYgKGRzdC1cdTAwM2ViaXRzWzFdICE9IChCSVRfTUFTSyhNSURfQklUKSB8IEJJVF9NQVNLKExBU1RfQklUKSkpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0Ym1wX2ZyZWUoc3JjMSk7XG4rXHRibXBfZnJlZShzcmMyKTtcbitcdGJtcF9mcmVlKGRzdCk7XG4rXHRyZXR1cm4gMDtcbitcbitlcnI6XG4rXHRibXBfZnJlZShzcmMxKTtcbitcdGJtcF9mcmVlKHNyYzIpO1xuK1x0Ym1wX2ZyZWUoZHN0KTtcbitcdHJldHVybiAtRUlOVkFMO1xuK31cbitcbitTRUMoXCJzeXNjYWxsXCIpXG4rX193ZWFrIGludCB0ZXN0X2JpdG1hcF9zdWJzZXQodm9pZClcbit7XG4rXHRzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJpZyA9IE5VTEwsICpzbWFsbCA9IE5VTEw7XG4rXG4rXHRiaWcgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTtcbitcdHNtYWxsID0gYm1wX2FsbG9jKFRFU1RfQklUUyk7XG4rXHRpZiAoIWJpZyB8fCAhc21hbGwpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0aWYgKCFibXBfc3Vic2V0KFRFU1RfQklUUywgYmlnLCBzbWFsbCkpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0X19ibXBfc2V0X2JpdCgwLCBzbWFsbCk7XG4rXHRpZiAoYm1wX3N1YnNldChURVNUX0JJVFMsIGJpZywgc21hbGwpKVxuK1x0XHRnb3RvIGVycjtcbitcbitcdF9fYm1wX3NldF9iaXQoMCwgYmlnKTtcbitcdGlmICghYm1wX3N1YnNldChURVNUX0JJVFMsIGJpZywgc21hbGwpKVxuK1x0XHRnb3RvIGVycjtcbitcbitcdF9fYm1wX3NldF9iaXQoTEFTVF9CSVQsIHNtYWxsKTtcbitcdGlmIChibXBfc3Vic2V0KFRFU1RfQklUUywgYmlnLCBzbWFsbCkpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0X19ibXBfc2V0X2JpdChMQVNUX0JJVCwgYmlnKTtcbitcdF9fYm1wX3NldF9iaXQoTUlEX0JJVCwgYmlnKTtcbitcdGlmICghYm1wX3N1YnNldChURVNUX0JJVFMsIGJpZywgc21hbGwpKVxuK1x0XHRnb3RvIGVycjtcbitcbitcdGlmIChibXBfc3Vic2V0KFRFU1RfQklUUywgc21hbGwsIGJpZykpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0Ym1wX2ZyZWUoYmlnKTtcbitcdGJtcF9mcmVlKHNtYWxsKTtcbitcdHJldHVybiAwO1xuK1xuK2VycjpcbitcdGJtcF9mcmVlKGJpZyk7XG4rXHRibXBfZnJlZShzbWFsbCk7XG4rXHRyZXR1cm4gLUVJTlZBTDtcbitcbit9XG4rXG4rU0VDKFwic3lzY2FsbFwiKVxuK19fd2VhayBpbnQgdGVzdF9iaXRtYXBfaW50ZXJzZWN0cyh2b2lkKVxuK3tcbitcdHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYXJnMSA9IE5VTEwsICphcmcyID0gTlVMTDtcbitcbitcdGFyZzEgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTtcbitcdGFyZzIgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTtcbitcdGlmICghYXJnMSB8fCAhYXJnMilcbitcdFx0Z290byBlcnI7XG4rXG4rXHRpZiAoYm1wX2ludGVyc2VjdHMoVEVTVF9CSVRTLCBhcmcxLCBhcmcyKSlcbitcdFx0Z290byBlcnI7XG4rXG4rXHRfX2JtcF9zZXRfYml0KDAsIGFyZzEpO1xuK1x0X19ibXBfc2V0X2JpdChNSURfQklULCBhcmcyKTtcbitcdGlmIChibXBfaW50ZXJzZWN0cyhURVNUX0JJVFMsIGFyZzEsIGFyZzIpKVxuK1x0XHRnb3RvIGVycjtcbitcbitcdF9fYm1wX3NldF9iaXQoTEFTVF9CSVQsIGFyZzEpO1xuK1x0X19ibXBfc2V0X2JpdChMQVNUX0JJVCwgYXJnMik7XG4rXHRpZiAoIWJtcF9pbnRlcnNlY3RzKFRFU1RfQklUUywgYXJnMSwgYXJnMikpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0Ym1wX2ZyZWUoYXJnMSk7XG4rXHRibXBfZnJlZShhcmcyKTtcbitcdHJldHVybiAwO1xuK1xuK2VycjpcbitcdGJtcF9mcmVlKGFyZzEpO1xuK1x0Ym1wX2ZyZWUoYXJnMik7XG4rXHRyZXR1cm4gLUVJTlZBTDtcbit9XG4rXG4rU0VDKFwic3lzY2FsbFwiKVxuK19fd2VhayBpbnQgdGVzdF9iaXRtYXBfY29weSh2b2lkKVxuK3tcbitcdHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYXJnMSA9IE5VTEwsICphcmcyID0gTlVMTDtcbitcbitcdGFyZzEgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTtcbitcdGFyZzIgPSBibXBfYWxsb2MoVEVTVF9CSVRTKTtcbitcdGlmICghYXJnMSB8fCAhYXJnMilcbitcdFx0Z290byBlcnI7XG4rXG4rXHRfX2JtcF9zZXRfYml0KDAsIGFyZzEpO1xuK1x0X19ibXBfc2V0X2JpdChNSURfQklULCBhcmcxKTtcbitcbitcdC8qIE1ha2Ugc3VyZSB0aG9zZSBnZXQgb3ZlcndyaXR0ZW4uICovXG4rXHRfX2JtcF9zZXRfYml0KDEsIGFyZzIpO1xuK1x0X19ibXBfc2V0X2JpdChNSURfQklUICsgMiwgYXJnMik7XG4rXG4rXHRibXBfY29weShURVNUX0JJVFMsIGFyZzIsIGFyZzEpO1xuK1xuK1x0LyogQml0bWFwcyBhcmUgZXF1YWwgaWYgYSBzdWJzZXQgb2YgZWFjaCBvdGhlci4gKi9cbitcdGlmICghYm1wX3N1YnNldChURVNUX0JJVFMsIGFyZzEsIGFyZzIpIHx8XG4rXHQgICAgIWJtcF9zdWJzZXQoVEVTVF9CSVRTLCBhcmcyLCBhcmcxKSlcbitcdFx0Z290byBlcnI7XG4rXG4rXHRibXBfZnJlZShhcmcxKTtcbitcdGJtcF9mcmVlKGFyZzIpO1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyOlxuK1x0Ym1wX2ZyZWUoYXJnMSk7XG4rXHRibXBfZnJlZShhcmcyKTtcbitcdHJldHVybiAtRUlOVkFMO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3N0X2J1ZGR5LmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2J1ZGR5LmJwZi5jXG5zaW1pbGFyaXR5IGluZGV4IDk3JVxucmVuYW1lIGZyb20gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy9zdF9idWRkeS5icGYuY1xucmVuYW1lIHRvIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9idWRkeS5icGYuY1xuaW5kZXggYjQ1YTMwNjgxNmMwZTQuLjU2MjhmMDk4NzAxMjFjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy9zdF9idWRkeS5icGYuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X2J1ZGR5LmJwZi5jXG5AQCAtMTcxLDcgKzE3MSw4IEBAIF9fd2VhayBpbnQgdGVzdF9idWRkeV9hbGxvY19tdWx0aXBsZSh2b2lkKVxuIFNFQyhcInN5c2NhbGxcIilcbiBfX3dlYWsgaW50IHRlc3RfYnVkZHlfYWxpZ25tZW50KHZvaWQpXG4ge1xuLVx0aW50IHJldCwgaTtcbitcdGludCByZXQ7XG4rXHR1MzIgaTtcbiBcbiBcdHJldCA9IGJ1ZGR5X2luaXQoXHUwMDI2YnVkZHkpO1xuIFx0aWYgKHJldClcbkBAIC0xNzksNiArMTgwLDcgQEAgX193ZWFrIGludCB0ZXN0X2J1ZGR5X2FsaWdubWVudCh2b2lkKVxuIFxuIFx0LyogQWxsb2NhdGUgdmFyaW91cyBzaXplcyBhbmQgY2hlY2sgYWxpZ25tZW50ICovXG4gXHRmb3IgKGkgPSB6ZXJvOyBpIFx1MDAzYyAxNyBcdTAwMjZcdTAwMjYgY2FuX2xvb3A7IGkrKykge1xuK1x0XHRiYXJyaWVyX3ZhcihpKTtcbiBcdFx0cHRyc1tpXSA9IGJ1ZGR5X2FsbG9jKFx1MDAyNmJ1ZGR5LCBhbGlnbm1lbnRfc2l6ZXNbaV0pO1xuIFx0XHRpZiAoIXB0cnNbaV0pIHtcbiBcdFx0XHRhcmVuYV9zdGRvdXQoXCJhbGlnbm1lbnQgdGVzdDogYWxsb2MgZmFpbGVkIGZvciBzaXplICVsdVwiLFxuQEAgLTE5OCw4ICsyMDAsMTAgQEAgX193ZWFrIGludCB0ZXN0X2J1ZGR5X2FsaWdubWVudCh2b2lkKVxuIFx0fVxuIFxuIFx0LyogRnJlZSBhbGwgYWxsb2NhdGlvbnMgKi9cbi1cdGZvciAoaSA9IHplcm87IGkgXHUwMDNjIDE3IFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSsrKVxuK1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgMTcgXHUwMDI2XHUwMDI2IGNhbl9sb29wOyBpKyspIHtcbitcdFx0YmFycmllcl92YXIoaSk7XG4gXHRcdGJ1ZGR5X2ZyZWUoXHUwMDI2YnVkZHksIHB0cnNbaV0pO1xuK1x0fVxuIFxuIFx0YnVkZHlfZGVzdHJveShcdTAwMjZidWRkeSk7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X3BhcmFsbGVsX2JpdG1hcC5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9wYXJhbGxlbF9iaXRtYXAuYnBmLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZWVjMjg3MWUyYjBkMTBcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9wYXJhbGxlbF9iaXRtYXAuYnBmLmNcbkBAIC0wLDAgKzEsMTkwIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IExHUEwtMi4xIE9SIEJTRC0yLUNsYXVzZVxuK1xuKyNpbmNsdWRlIFx1MDAzY2JwZl9hdG9taWMuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpYmFyZW5hL2NvbW1vbi5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGliYXJlbmEvYXNhbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGliYXJlbmEvYml0bWFwLmhcdTAwM2VcbitcbisjZGVmaW5lIFRFU1RfQklUTUFQX1RIUkVBRFNcdDJcbisjZGVmaW5lIFRFU1RfQklUTUFQX0JJVFNcdCgyICogQklUU19QRVJfTE9OR19MT05HKVxuKyNkZWZpbmUgVEVTVF9CSVRNQVBfU1lOQ19TUElOU1x0QlBGX01BWF9MT09QU1xuKyNkZWZpbmUgVEVTVF9CSVRNQVBfSVRFUlNcdDEwICogMTAwMCAqIDEwMDBcbitcbitzdGF0aWMgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpiaXRtYXA7XG4rc3RhdGljIHZvbGF0aWxlIHU2NCBzdGFydGVkO1xuK3N0YXRpYyB2b2xhdGlsZSBib29sIHRlc3RfYWJvcnQ7XG4rXG4rLypcbisgKiBUaGUgdGVzdCBuZWVkcyBjbXB4Y2hnIGF0b21pY3Mgb24gYXJlbmEgbWVtb3J5LlxuKyAqL1xuKyNpZiBkZWZpbmVkKEVOQUJMRV9BVE9NSUNTX1RFU1RTKSBcdTAwMjZcdTAwMjZcdFx0XHRcdCAgXFxcbitcdChkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfYXJtNjQpIHx8IGRlZmluZWQoX19UQVJHRVRfQVJDSF94ODYpIHx8IFxcXG4rXHQgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3MzOTApIHx8IFxcXG4rXHQgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3Bvd2VycGMpIHx8XHRcdFx0XHQgIFxcXG4rXHQgKGRlZmluZWQoX19UQVJHRVRfQVJDSF9yaXNjdikgXHUwMDI2XHUwMDI2IF9fcmlzY3ZfeGxlbiA9PSA2NCkpXG4rc3RhdGljIGJvb2wgYml0bWFwX3Rlc3RzX2VuYWJsZWQodm9pZClcbit7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rI2Vsc2VcbitzdGF0aWMgYm9vbCBiaXRtYXBfdGVzdHNfZW5hYmxlZCh2b2lkKVxuK3tcbitcdHJldHVybiBmYWxzZTtcbit9XG4rI2VuZGlmXG4rXG4rX193ZWFrXG4raW50IGJpdG1hcF93YWl0X2Zvcl9zdGFydCh2b2lkKVxuK3tcbitcdHU2NCBpO1xuK1xuK1x0X19zeW5jX2ZldGNoX2FuZF9hZGQoXHUwMDI2c3RhcnRlZCwgMSk7XG4rXG4rXHRmb3IgKGkgPSB6ZXJvOyBpIFx1MDAzYyBURVNUX0JJVE1BUF9TWU5DX1NQSU5TIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSsrKSB7XG4rXHRcdGlmICh0ZXN0X2Fib3J0KVxuK1x0XHRcdHJldHVybiAtRUlOVFI7XG4rXHRcdGlmIChzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnN0YXJ0ZWQpIFx1MDAzZT0gVEVTVF9CSVRNQVBfVEhSRUFEUylcbitcdFx0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdHRlc3RfYWJvcnQgPSB0cnVlO1xuK1x0cmV0dXJuIC1FVElNRURPVVQ7XG4rfVxuK1xuKy8qXG4rICogVGhlIHRlc3QgbWFrZXMgc3VyZSB3cml0ZXMgZG9uJ3QgY2xvYmJlciBlYWNoIG90aGVyIGJ5IG92ZXJ3cml0aW5nXG4rICogdGhlIHNhbWUgd29yZC4gT25lIHRocmVhZCBhbHdheXMgd3JpdGVzIG9uIGV2ZW4gYml0cywgdGhlIG90aGVyIG9uXG4rICogb2Rkcy4gQm90aCBzaG91bGQgYmUgYWJsZSB0byBvcGVyYXRlIG9uIHRoZSBiaXRtYXAgb2JsaXZpb3VzIG9mIHRoZVxuKyAqIG90aGVyJ3Mgb3BlcmF0aW9ucy5cbisgKi9cbitfX3dlYWtcbitpbnQgYml0bWFwX3Rlc3RfYml0X3NlcXVlbmNlKHUzMiBiaXQpXG4re1xuK1x0aWYgKGJtcF90ZXN0X2FuZF9jbGVhcl9iaXQoYml0LCBiaXRtYXApKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChibXBfdGVzdF9hbmRfc2V0X2JpdChiaXQsIGJpdG1hcCkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKCFibXBfdGVzdF9iaXQoYml0LCBiaXRtYXApKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmICghYm1wX3Rlc3RfYW5kX3NldF9iaXQoYml0LCBiaXRtYXApKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGlmICghYm1wX3Rlc3RfYml0KGJpdCwgYml0bWFwKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAoIWJtcF90ZXN0X2FuZF9jbGVhcl9iaXQoYml0LCBiaXRtYXApKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGlmIChibXBfdGVzdF9iaXQoYml0LCBiaXRtYXApKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChibXBfdGVzdF9hbmRfY2xlYXJfYml0KGJpdCwgYml0bWFwKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRibXBfc2V0X2JpdChiaXQsIGJpdG1hcCk7XG4rXHRpZiAoIWJtcF90ZXN0X2JpdChiaXQsIGJpdG1hcCkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0Ym1wX2NsZWFyX2JpdChiaXQsIGJpdG1hcCk7XG4rXHRpZiAoYm1wX3Rlc3RfYml0KGJpdCwgYml0bWFwKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRibXBfc2V0X2JpdChiaXQsIGJpdG1hcCk7XG4rXHRpZiAoIWJtcF90ZXN0X2JpdChiaXQsIGJpdG1hcCkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmV0dXJuIDA7XG4rXG4rfVxuK1xuK3N0YXRpYyB2b2lkIGJpdG1hcF90ZXN0X3Jlc2V0X3NpbmdsZShpbnQgcGFyaXR5KVxuK3tcbitcdHUzMiBiaXQ7XG4rXG4rXHRmb3IgKGJpdCA9IHBhcml0eTsgYml0IFx1MDAzYyBURVNUX0JJVE1BUF9CSVRTIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgYml0ICs9IDIpXG4rXHRcdGJtcF9jbGVhcl9iaXQoYml0LCBiaXRtYXApO1xuK1xuK31cbitcbitzdGF0aWMgaW50IGJpdG1hcF90ZXN0X2NvbW1vbl9zaW5nbGUoaW50IHBhcml0eSlcbit7XG4rXHR1MzIgYml0O1xuK1x0aW50IHJldDtcbitcbitcdGZvciAoYml0ID0gcGFyaXR5OyBiaXQgXHUwMDNjIFRFU1RfQklUTUFQX0JJVFMgXHUwMDI2XHUwMDI2IGNhbl9sb29wOyBiaXQgKz0gMikge1xuK1x0XHRpZiAodGVzdF9hYm9ydClcbitcdFx0XHRyZXR1cm4gLUVJTlRSO1xuK1xuK1x0XHRyZXQgPSBiaXRtYXBfdGVzdF9iaXRfc2VxdWVuY2UoYml0KTtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdHRlc3RfYWJvcnQgPSB0cnVlO1xuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGJpdG1hcF90ZXN0X2NvbW1vbihpbnQgcGFyaXR5KVxuK3tcbitcdGludCByZXQ7XG4rXHR1MzIgaTtcbitcbitcdGFyZW5hX3N1YnByb2dfaW5pdCgpO1xuK1xuK1x0cmV0ID0gYml0bWFwX3dhaXRfZm9yX3N0YXJ0KCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgVEVTVF9CSVRNQVBfSVRFUlMgXHUwMDI2XHUwMDI2IGNhbl9sb29wOyBpKyspIHtcbitcdFx0cmV0ID0gYml0bWFwX3Rlc3RfY29tbW9uX3NpbmdsZShwYXJpdHkpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdGlmICh0ZXN0X2Fib3J0KVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRiaXRtYXBfdGVzdF9yZXNldF9zaW5nbGUocGFyaXR5KTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJzeXNjYWxsXCIpIGludCBwYXJhbGxlbF90ZXN0X2JpdG1hcF9fZW5hYmxlZCh2b2lkKVxuK3tcbitcdHJldHVybiBiaXRtYXBfdGVzdHNfZW5hYmxlZCgpID8gMCA6IC1FT1BOT1RTVVBQO1xuK31cbitcbitTRUMoXCJzeXNjYWxsXCIpIGludCBwYXJhbGxlbF90ZXN0X2JpdG1hcF9faW5pdCh2b2lkKVxuK3tcbitcdGJpdG1hcCA9IGJtcF9hbGxvYyhURVNUX0JJVE1BUF9CSVRTKTtcbitcdGlmICghYml0bWFwKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJzeXNjYWxsXCIpIGludCBwYXJhbGxlbF90ZXN0X2JpdG1hcF9fZmluaSh2b2lkKVxuK3tcbitcdGludCByZXQgPSAwO1xuK1xuK1x0aWYgKCFiaXRtYXApXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0Ym1wX2ZyZWUoYml0bWFwKTtcbitcdGJpdG1hcCA9IE5VTEw7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitTRUMoXCJzeXNjYWxsXCIpIGludCBwYXJhbGxlbF90ZXN0X2JpdG1hcF9fMCh2b2lkKVxuK3tcbitcdHJldHVybiBiaXRtYXBfdGVzdF9jb21tb24oMCk7XG4rfVxuK1xuK1NFQyhcInN5c2NhbGxcIikgaW50IHBhcmFsbGVsX3Rlc3RfYml0bWFwX18xKHZvaWQpXG4re1xuK1x0cmV0dXJuIGJpdG1hcF90ZXN0X2NvbW1vbigxKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X3BhcmFsbGVsX3NwbWMuYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc2VsZnRlc3RzL3Rlc3RfcGFyYWxsZWxfc3BtYy5icGYuY1xuaW5kZXggZjA4ZjJhOTJlMTk0NjguLjVmYTk2ZWI3NDA5NTFjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NlbGZ0ZXN0cy90ZXN0X3BhcmFsbGVsX3NwbWMuYnBmLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zZWxmdGVzdHMvdGVzdF9wYXJhbGxlbF9zcG1jLmJwZi5jXG5AQCAtMTU1LDcgKzE1NSw3IEBAIGludCBzcG1jX3F1aWVzY2Vfb25fb3duZXIodTY0IGVwb2NoKVxuIHtcbiBcdHU2NCBpO1xuIFxuLVx0YnBmX2ZvcihpLCAwLCBURVNUX1NQTUNfU1lOQ19TUElOUykge1xuK1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgVEVTVF9TUE1DX1NZTkNfU1BJTlMgXHUwMDI2XHUwMDI2IGNhbl9sb29wOyBpKyspIHtcbiBcdFx0aWYgKHRlc3RfYWJvcnQpXG4gXHRcdFx0cmV0dXJuIC1FSU5UUjtcbiBcdFx0aWYgKHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2b3duZXJfZXBvY2gpIFx1MDAzZT0gZXBvY2gpXG5AQCAtMTc1LDggKzE3NSw3IEBAIGludCBzcG1jX3F1aWVzY2Vfb25fc3RlYWxlcih1NjQgZXBvY2gpXG4gXHRpbnQgZXJyID0gLUVUSU1FRE9VVDtcbiBcbiBcdHRhcmdldCA9IFNURUFMRVJfRVBPQ0goZXBvY2gpO1xuLVx0YnBmX2ZvcihpLCAwLCBURVNUX1NQTUNfU1lOQ19TUElOUykge1xuLVxuK1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgVEVTVF9TUE1DX1NZTkNfU1BJTlMgXHUwMDI2XHUwMDI2IGNhbl9sb29wOyBpKyspIHtcbiBcdFx0aWYgKHRlc3RfYWJvcnQpIHtcbiBcdFx0XHRlcnIgPSAtRUlOVFI7XG4gXHRcdFx0YnJlYWs7XG5AQCAtMzkxLDcgKzM5MCw3IEBAIGludCBzcG1jX3dhaXRfZm9yX3N0ZWFsZXJzX3RvX3N0YXJ0KHU2NCB0YXJnZXQpXG4ge1xuIFx0dTY0IGk7XG4gXG4tXHRicGZfZm9yKGksIDAsIFRFU1RfU1BNQ19TWU5DX1NQSU5TKSB7XG4rXHRmb3IgKGkgPSB6ZXJvOyBpIFx1MDAzYyBURVNUX1NQTUNfU1lOQ19TUElOUyBcdTAwMjZcdTAwMjYgY2FuX2xvb3A7IGkrKykge1xuIFx0XHRpZiAodGVzdF9hYm9ydClcbiBcdFx0XHRyZXR1cm4gLUVJTlRSO1xuIFx0XHRpZiAoUkVBRF9PTkNFKHN0ZWFsZXJzX3N0YXJ0ZWQpIFx1MDAzZT0gdGFyZ2V0KVxuQEAgLTUzNyw3ICs1MzYsNyBAQCBzdGF0aWMgaW50IHNwbWNfd2FpdF9mb3Jfcm91bmRfc3RlYWxzKHU2NCB0YXJnZXQpXG4gXG4gXHRhcmVuYV9zdWJwcm9nX2luaXQoKTtcbiBcbi1cdGJwZl9mb3IoaSwgMCwgVEVTVF9TUE1DX1NZTkNfU1BJTlMpIHtcbitcdGZvciAoaSA9IHplcm87IGkgXHUwMDNjIFRFU1RfU1BNQ19TWU5DX1NQSU5TIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSsrKSB7XG4gXHRcdGlmICh0ZXN0X2Fib3J0KVxuIFx0XHRcdHJldHVybiAtRUlOVFI7XG4gXHRcdGlmIChyb3VuZF9zdGVhbHMgXHUwMDNlPSB0YXJnZXQpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9iaXRtYXAuYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2JpdG1hcC5icGYuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi44MGU4MTQ0MDFmYjllYVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9iaXRtYXAuYnBmLmNcbkBAIC0wLDAgKzEsMjQ1IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IExHUEwtMi4xIE9SIEJTRC0yLUNsYXVzZVxuKy8qXG4rICogQ29weXJpZ2h0IChjKSAyMDI1LTIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4rICogQ29weXJpZ2h0IChjKSAyMDI1LTIwMjYgRW1pbCBUc2FsYXBhdGlzIFx1MDAzY2VtaWxAZXRzYWxhcGF0aXMuY29tXHUwMDNlXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGliYXJlbmEvY29tbW9uLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcdTAwM2NsaWJhcmVuYS9hc2FuLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaWJhcmVuYS9iaXRtYXAuaFx1MDAzZVxuK1xuK19fd2Vha1xuK3N0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wX2FsbG9jKHNpemVfdCBiaXRzKVxuK3tcbitcdHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqYm1wO1xuK1x0c2l6ZV90IHNpemUgPSBCSVRTX1RPX0xPTkdfTE9OR1MoYml0cykgKiBzaXplb2YoYm1wLVx1MDAzZWJpdHNbMF0pO1xuK1xuK1x0LyogQXNzdW1lIGxvbmctYWxpZ25lZCBtYXNrcy4gKi9cbitcdGlmIChiaXRzICUgQklUU19QRVJfTE9OR19MT05HKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdGJtcCA9IChzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKilhcmVuYV9tYWxsb2Moc2l6ZSk7XG4rXHRpZiAoIWJtcClcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRibXBfY2xlYXIoYml0cywgYm1wKTtcbitcbitcdHJldHVybiBibXA7XG4rfVxuK1xuK19fd2Vha1xuK3ZvaWQgYm1wX2ZyZWUoc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApXG4re1xuK1x0YXJlbmFfZnJlZShibXApO1xuK31cbitcbitfX3dlYWtcbit2b2lkIF9fYm1wX3NldF9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApXG4re1xuK1x0Ym1wLVx1MDAzZWJpdHNbQklUX1dPUkQoYml0KV0gfD0gQklUX01BU0soYml0KTtcbit9XG4rXG4rX193ZWFrXG4rdm9pZCBfX2JtcF9jbGVhcl9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApXG4re1xuK1x0Ym1wLVx1MDAzZWJpdHNbQklUX1dPUkQoYml0KV0gXHUwMDI2PSB+QklUX01BU0soYml0KTtcbit9XG4rXG4rX193ZWFrXG4rYm9vbCBibXBfdGVzdF9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApXG4re1xuK1x0cmV0dXJuIGJtcC1cdTAwM2ViaXRzW0JJVF9XT1JEKGJpdCldIFx1MDAyNiBCSVRfTUFTSyhiaXQpO1xuK31cbitcbitfX3dlYWtcbitib29sIGJtcF90ZXN0X2FuZF9jbGVhcl9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApXG4re1xuK1x0dTY0IHZhbCA9IEJJVF9NQVNLKGJpdCk7XG4rXHR1MzIgaWR4ID0gQklUX1dPUkQoYml0KTtcbitcdHU2NCBvbGQsIG5ldywgYWN0dWFsO1xuK1xuK1x0ZG8ge1xuK1x0XHRvbGQgPSBibXAtXHUwMDNlYml0c1tpZHhdO1xuK1xuK1x0XHRpZiAoIShvbGQgXHUwMDI2IHZhbCkpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0XHRuZXcgPSBvbGQgXHUwMDI2IH52YWw7XG4rXHRcdGFjdHVhbCA9IGNtcHhjaGcoXHUwMDI2Ym1wLVx1MDAzZWJpdHNbaWR4XSwgb2xkLCBuZXcpO1xuK1xuK1x0XHRpZiAoYWN0dWFsID09IG9sZClcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdH0gd2hpbGUgKGNhbl9sb29wKTtcbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rX193ZWFrXG4rYm9vbCBibXBfdGVzdF9hbmRfc2V0X2JpdCh1MzIgYml0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcClcbit7XG4rXHR1NjQgdmFsID0gQklUX01BU0soYml0KTtcbitcdHUzMiBpZHggPSBCSVRfV09SRChiaXQpO1xuK1x0dTY0IG9sZCwgbmV3LCBhY3R1YWw7XG4rXG4rXHRkbyB7XG4rXHRcdG9sZCA9IGJtcC1cdTAwM2ViaXRzW2lkeF07XG4rXG4rXHRcdGlmICgob2xkIFx1MDAyNiB2YWwpKVxuK1x0XHRcdHJldHVybiB0cnVlO1xuK1xuK1x0XHRuZXcgPSBvbGQgfCB2YWw7XG4rXHRcdGFjdHVhbCA9IGNtcHhjaGcoXHUwMDI2Ym1wLVx1MDAzZWJpdHNbaWR4XSwgb2xkLCBuZXcpO1xuK1xuK1x0XHRpZiAoYWN0dWFsID09IG9sZClcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHR9IHdoaWxlIChjYW5fbG9vcCk7XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK19fd2Vha1xuK3ZvaWQgYm1wX2NsZWFyX2JpdCh1MzIgYml0LCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmJtcClcbit7XG4rXHR1NjQgdmFsID0gQklUX01BU0soYml0KTtcbitcdHUzMiBpZHggPSBCSVRfV09SRChiaXQpO1xuK1x0dTY0IG9sZCwgbmV3LCBhY3R1YWw7XG4rXG4rXHRkbyB7XG4rXHRcdG9sZCA9IGJtcC1cdTAwM2ViaXRzW2lkeF07XG4rXHRcdG5ldyA9IG9sZCBcdTAwMjYgfnZhbDtcbitcdFx0YWN0dWFsID0gY21weGNoZyhcdTAwMjZibXAtXHUwMDNlYml0c1tpZHhdLCBvbGQsIG5ldyk7XG4rXG4rXHR9IHdoaWxlIChhY3R1YWwgIT0gb2xkIFx1MDAyNlx1MDAyNiBjYW5fbG9vcCk7XG4rfVxuK1xuK19fd2Vha1xuK3ZvaWQgYm1wX3NldF9iaXQodTMyIGJpdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApXG4re1xuK1x0dTY0IHZhbCA9IEJJVF9NQVNLKGJpdCk7XG4rXHR1MzIgaWR4ID0gQklUX1dPUkQoYml0KTtcbitcdHU2NCBvbGQsIG5ldywgYWN0dWFsO1xuK1xuK1x0ZG8ge1xuK1x0XHRvbGQgPSBibXAtXHUwMDNlYml0c1tpZHhdO1xuK1x0XHRuZXcgPSBvbGQgfCB2YWw7XG4rXHRcdGFjdHVhbCA9IGNtcHhjaGcoXHUwMDI2Ym1wLVx1MDAzZWJpdHNbaWR4XSwgb2xkLCBuZXcpO1xuK1xuK1x0fSB3aGlsZSAoYWN0dWFsICE9IG9sZCBcdTAwMjZcdTAwMjYgY2FuX2xvb3ApO1xuK31cbitcbitfX3dlYWtcbit2b2lkIGJtcF9jbGVhcihzaXplX3QgYml0cywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApXG4re1xuK1x0c2l6ZV90IG53b3JkcyA9IEJJVFNfVE9fTE9OR19MT05HUyhiaXRzKTtcbitcdHZvbGF0aWxlIHUzMiBpO1xuK1xuK1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgbndvcmRzIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSsrKVxuK1x0XHRibXAtXHUwMDNlYml0c1tpXSA9IDA7XG4rfVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTY0IGJtcF9sYXN0X3dvcmRfbWFzayhzaXplX3QgYml0cylcbit7XG4rXHR1MzIgcmVtID0gYml0cyAlIEJJVFNfUEVSX0xPTkdfTE9ORztcbitcbitcdHJldHVybiByZW0gPyAoMVVMTCBcdTAwM2NcdTAwM2MgcmVtKSAtIDEgOiB+MFVMTDtcbit9XG4rXG4rX193ZWFrXG4rdm9pZCBibXBfYW5kKHNpemVfdCBiaXRzLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmRzdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpzcmMxLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKnNyYzIpXG4re1xuK1x0c2l6ZV90IG53b3JkcyA9IEJJVFNfVE9fTE9OR19MT05HUyhiaXRzKTtcbitcdHZvbGF0aWxlIHUzMiBpO1xuK1xuK1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgbndvcmRzIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSsrKVxuK1x0XHRkc3QtXHUwMDNlYml0c1tpXSA9IHNyYzEtXHUwMDNlYml0c1tpXSBcdTAwMjYgc3JjMi1cdTAwM2ViaXRzW2ldO1xuK1xuK1x0aWYgKG53b3JkcyBcdTAwMjZcdTAwMjYgYml0cyAlIEJJVFNfUEVSX0xPTkdfTE9ORylcbitcdFx0ZHN0LVx1MDAzZWJpdHNbbndvcmRzIC0gMV0gXHUwMDI2PSBibXBfbGFzdF93b3JkX21hc2soYml0cyk7XG4rfVxuK1xuK19fd2Vha1xuK3ZvaWQgYm1wX29yKHNpemVfdCBiaXRzLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmRzdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpzcmMxLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKnNyYzIpXG4re1xuK1x0c2l6ZV90IG53b3JkcyA9IEJJVFNfVE9fTE9OR19MT05HUyhiaXRzKTtcbitcdHZvbGF0aWxlIHUzMiBpO1xuK1xuK1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgbndvcmRzIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSsrKVxuK1x0XHRkc3QtXHUwMDNlYml0c1tpXSA9IHNyYzEtXHUwMDNlYml0c1tpXSB8IHNyYzItXHUwMDNlYml0c1tpXTtcbitcbitcdGlmIChud29yZHMgXHUwMDI2XHUwMDI2IGJpdHMgJSBCSVRTX1BFUl9MT05HX0xPTkcpXG4rXHRcdGRzdC1cdTAwM2ViaXRzW253b3JkcyAtIDFdIFx1MDAyNj0gYm1wX2xhc3Rfd29yZF9tYXNrKGJpdHMpO1xuK31cbitcbitfX3dlYWtcbitib29sIGJtcF9lbXB0eShzaXplX3QgYml0cywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApXG4re1xuK1x0c2l6ZV90IG53b3JkcyA9IEJJVFNfVE9fTE9OR19MT05HUyhiaXRzKTtcbitcdHZvbGF0aWxlIHUzMiBpO1xuK1xuK1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgbndvcmRzIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSsrKSB7XG4rXHRcdHU2NCBtYXNrID0gKGkgPT0gbndvcmRzIC0gMSkgPyBibXBfbGFzdF93b3JkX21hc2soYml0cykgOiB+MFVMTDtcbitcbitcdFx0aWYgKGJtcC1cdTAwM2ViaXRzW2ldIFx1MDAyNiBtYXNrKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbitfX3dlYWtcbit2b2lkIGJtcF9jb3B5KHNpemVfdCBiaXRzLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmRzdCwgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpzcmMpXG4re1xuK1x0c2l6ZV90IG53b3JkcyA9IEJJVFNfVE9fTE9OR19MT05HUyhiaXRzKTtcbitcdHZvbGF0aWxlIHUzMiBpO1xuK1xuK1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgbndvcmRzIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSsrKVxuK1x0XHRkc3QtXHUwMDNlYml0c1tpXSA9IHNyYy1cdTAwM2ViaXRzW2ldO1xuK1xuK1x0aWYgKG53b3JkcyBcdTAwMjZcdTAwMjYgYml0cyAlIEJJVFNfUEVSX0xPTkdfTE9ORylcbitcdFx0ZHN0LVx1MDAzZWJpdHNbbndvcmRzIC0gMV0gXHUwMDI2PSBibXBfbGFzdF93b3JkX21hc2soYml0cyk7XG4rfVxuK1xuK19fd2Vha1xuK2Jvb2wgYm1wX3N1YnNldChzaXplX3QgYml0cywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpiaWcsIHN0cnVjdCBiaXRtYXAgX19hcmVuYSAqc21hbGwpXG4re1xuK1x0c2l6ZV90IG53b3JkcyA9IEJJVFNfVE9fTE9OR19MT05HUyhiaXRzKTtcbitcdHZvbGF0aWxlIHUzMiBpO1xuK1xuK1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgbndvcmRzIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSsrKSB7XG4rXHRcdHU2NCBtYXNrID0gKGkgPT0gbndvcmRzIC0gMSkgPyBibXBfbGFzdF93b3JkX21hc2soYml0cykgOiB+MFVMTDtcbitcbitcdFx0aWYgKH5iaWctXHUwMDNlYml0c1tpXSBcdTAwMjYgc21hbGwtXHUwMDNlYml0c1tpXSBcdTAwMjYgbWFzaylcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rX193ZWFrXG4rYm9vbCBibXBfaW50ZXJzZWN0cyhzaXplX3QgYml0cywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICphcmcxLCBzdHJ1Y3QgYml0bWFwIF9fYXJlbmEgKmFyZzIpXG4re1xuK1x0c2l6ZV90IG53b3JkcyA9IEJJVFNfVE9fTE9OR19MT05HUyhiaXRzKTtcbitcdHZvbGF0aWxlIHUzMiBpO1xuK1xuK1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgbndvcmRzIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSsrKSB7XG4rXHRcdHU2NCBtYXNrID0gKGkgPT0gbndvcmRzIC0gMSkgPyBibXBfbGFzdF93b3JkX21hc2soYml0cykgOiB+MFVMTDtcbitcbitcdFx0aWYgKGFyZzEtXHUwMDNlYml0c1tpXSBcdTAwMjYgYXJnMi1cdTAwM2ViaXRzW2ldIFx1MDAyNiBtYXNrKVxuK1x0XHRcdHJldHVybiB0cnVlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitfX3dlYWtcbit2b2lkIGJtcF9wcmludChzaXplX3QgYml0cywgc3RydWN0IGJpdG1hcCBfX2FyZW5hICpibXApXG4re1xuK1x0c2l6ZV90IG53b3JkcyA9IEJJVFNfVE9fTE9OR19MT05HUyhiaXRzKTtcbitcdHZvbGF0aWxlIHUzMiBpO1xuK1xuK1x0Zm9yIChpID0gemVybzsgaSBcdTAwM2MgbndvcmRzIFx1MDAyNlx1MDAyNiBjYW5fbG9vcDsgaSsrKVxuK1x0XHRhcmVuYV9zdGRlcnIoXCIlMDE2bGx4IFwiLCBibXAtXHUwMDNlYml0c1tpXSk7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvY29tbW9uLmJwZi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2xpYmFyZW5hL3NyYy9jb21tb24uYnBmLmNcbmluZGV4IDUwYmU1NzIxM2RmYjhkLi41NjlmMGY2NGQ1MThiMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9saWJhcmVuYS9zcmMvY29tbW9uLmJwZi5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbGliYXJlbmEvc3JjL2NvbW1vbi5icGYuY1xuQEAgLTQsOSArNCw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGliYXJlbmEvYXNhbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGliYXJlbmEvYnVkZHkuaFx1MDAzZVxuIFxuLWNvbnN0IHZvbGF0aWxlIHUzMiB6ZXJvID0gMDtcbi1cbiBzdHJ1Y3QgYnVkZHkgX19hcmVuYSBidWRkeTtcbit2b2xhdGlsZSB1MzIgemVybyA9IDA7XG4gXG4gaW50IGFyZW5hX2ZscyhfX3U2NCB3b3JkKVxuIHtcbkBAIC0zOCw2ICszNywxMiBAQCBfX3dlYWsgaW50IGFyZW5hX2J1ZGR5X3Jlc2V0KHZvaWQpXG4gXHRyZXR1cm4gYnVkZHlfaW5pdChcdTAwMjZidWRkeSk7XG4gfVxuIFxuK1NFQyhcInN5c2NhbGxcIilcbitfX3dlYWsgaW50IGFyZW5hX2J1ZGR5X2Rlc3Ryb3kodm9pZClcbit7XG4rXHRyZXR1cm4gYnVkZHlfZGVzdHJveShcdTAwMjZidWRkeSk7XG4rfVxuK1xuIF9fd2VhayB2b2lkIF9fYXJlbmEgKmFyZW5hX21hbGxvYyhzaXplX3Qgc2l6ZSlcbiB7XG4gXHRyZXR1cm4gYnVkZHlfYWxsb2MoXHUwMDI2YnVkZHksIHNpemUpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYS5jXG5pbmRleCA2MWVhNjhkY2U0MTA1Zi4uYmE1YTVhNTBmN2MwN2QgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYS5jXG5AQCAtMTUsNyArMTUsMTIgQEAgc3RhdGljIHZvaWQgcnVuX2xpYmFyZW5hX3Rlc3Qoc3RydWN0IGxpYmFyZW5hICpza2VsLCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2csXG4ge1xuIFx0aW50IHJldDtcbiBcbi1cdGlmICghc3Ryc3RyKG5hbWUsIFwidGVzdF9idWRkeVwiKSkge1xuK1x0aWYgKHN0cnN0cihuYW1lLCBcInRlc3RfYnVkZHlcIikpIHtcbitcdFx0LyogQnVkZHkgdGVzdHMgaW5pdGlhbGl6ZSB0aGUgYWxsb2NhdG9yIGRpcmVjdGx5LiAqL1xuK1x0XHRyZXQgPSBsaWJhcmVuYV9ydW5fcHJvZyhicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5hcmVuYV9idWRkeV9kZXN0cm95KSk7XG4rXHRcdGlmICghQVNTRVJUX09LKHJldCwgXCJhcmVuYV9idWRkeV9kZXN0cm95XCIpKVxuK1x0XHRcdHJldHVybjtcbitcdH0gZWxzZSB7XG4gXHRcdHJldCA9IGxpYmFyZW5hX3J1bl9wcm9nKGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmFyZW5hX2J1ZGR5X3Jlc2V0KSk7XG4gXHRcdGlmICghQVNTRVJUX09LKHJldCwgXCJhcmVuYV9idWRkeV9yZXNldFwiKSlcbiBcdFx0XHRyZXR1cm47XG5AQCAtMjQsNyArMjksNiBAQCBzdGF0aWMgdm9pZCBydW5fbGliYXJlbmFfdGVzdChzdHJ1Y3QgbGliYXJlbmEgKnNrZWwsIHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZyxcbiBcdHJldCA9IGxpYmFyZW5hX3J1bl9wcm9nKGJwZl9wcm9ncmFtX19mZChwcm9nKSk7XG4gXG4gXHRBU1NFUlRfT0socmV0LCBuYW1lKTtcbi1cbiB9XG4gXG4gc3RhdGljIHZvaWQgKnJ1bl9saWJhcmVuYV9wYXJhbGxlbF9wcm9nKHZvaWQgKmFyZylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saWJhcmVuYV9hc2FuLmNcbmluZGV4IGQ1OWQ5ZGQxMmVmMmIyLi5mODk3NDA1ZjcwMWRkNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpYmFyZW5hX2FzYW4uY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGliYXJlbmFfYXNhbi5jXG5AQCAtMTcsNyArMTcsMTIgQEAgc3RhdGljIHZvaWQgcnVuX2xpYmFyZW5hX2FzYW5fdGVzdChzdHJ1Y3QgbGliYXJlbmFfYXNhbiAqc2tlbCxcbiB7XG4gXHRpbnQgcmV0O1xuIFxuLVx0aWYgKCFzdHJzdHIobmFtZSwgXCJ0ZXN0X2J1ZGR5XCIpKSB7XG4rXHRpZiAoc3Ryc3RyKG5hbWUsIFwidGVzdF9idWRkeVwiKSkge1xuK1x0XHQvKiBCdWRkeSB0ZXN0cyBpbml0aWFsaXplIHRoZSBhbGxvY2F0b3IgZGlyZWN0bHkuICovXG4rXHRcdHJldCA9IGxpYmFyZW5hX3J1bl9wcm9nKGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmFyZW5hX2J1ZGR5X2Rlc3Ryb3kpKTtcbitcdFx0aWYgKCFBU1NFUlRfT0socmV0LCBcImFyZW5hX2J1ZGR5X2Rlc3Ryb3lcIikpXG4rXHRcdFx0cmV0dXJuO1xuK1x0fSBlbHNlIHtcbiBcdFx0cmV0ID0gbGliYXJlbmFfcnVuX3Byb2coYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MuYXJlbmFfYnVkZHlfcmVzZXQpKTtcbiBcdFx0aWYgKCFBU1NFUlRfT0socmV0LCBcImFyZW5hX2J1ZGR5X3Jlc2V0XCIpKVxuIFx0XHRcdHJldHVybjtcbkBAIC05MCw0ICs5NSwzIEBAIHZvaWQgdGVzdF9saWJhcmVuYV9hc2FuKHZvaWQpXG4gXG4gXHRyZXR1cm47XG4gfVxuLVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDI6MDE6MzEuNjU0MzE0NTY5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODE0ODgxNDc4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogbGliYXJlbmEgU2VsZnRlc3QgTW9kaWZpY2F0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggaGVyZSwgYW5kIGl0IHNlZW1zIHRvIGJlIHNvbGVseSBmb2N1c2VkIG9uIG1vZGlmeWluZyB0aGUgQlBGIHNlbGZ0ZXN0cyByZWxhdGVkIHRvIGxpYmFyZW5hLiBJIHNlZSBhIGxpc3Qgb2YgZmlsZXMgdGhhdCBoYXZlIGJlZW4gdG91Y2hlZDogYGJpdG1hcC5oYCwgYGNvbW1vbi5oYCwgcmVuYW1lZCBgLmJwZi5jYCBmaWxlcyAoZS5nLiwgYHN0X2FzYW5fYnVkZHkuYnBmLmNgIHRvIGB0ZXN0X2FzYW5fYnVkZHkuYnBmLmNgLCBhbmQgc28gb24pLCBhbmQgc29tZSBhc3NvY2lhdGVkIEMgZmlsZXMuIFRoZSBpbXBvcnRhbnQgYml0IGlzIHRoYXQgKmV2ZXJ5dGhpbmcqIGlzIHVuZGVyIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYC5cblxuTm93LCBnaXZlbiBteSBleHBlcnRpc2UsIEkga25vdyBpbW1lZGlhdGVseSB0aGF0IHNlbGZ0ZXN0cyBhcmUganVzdCB0aGF0IOKAkyB0ZXN0cy4gVGhleSdyZSBkZXNpZ25lZCB0byB2YWxpZGF0ZSB0aGUgZnVuY3Rpb25hbGl0eSBvZiBjb2RlLCBidXQgdGhleSdyZSAqbm90KiBwYXJ0IG9mIHRoZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYW55IG9mIHRoZSBhcmNoaXRlY3R1cmFsIGNvZGUuIFRoZXkncmUgdXNlci1zcGFjZSBwcm9ncmFtcyBvciBCUEYgcHJvZ3JhbXMsIGZvciB0ZXN0aW5nIHRoZSBrZXJuZWwuIFRoZXkgYXJlIG5vdCBpbnRlbmRlZCB0byBtb2RpZnkgb3IgY2hhbmdlIHRoZSBrZXJuZWwgaXRzZWxmLCBzbyB0aGVyZSdzIG5vIGluaGVyZW50IHJpc2sgb2YgaW50cm9kdWNpbmcgbmV3IGJ1Z3MgdG8gdGhlIGNvcmUgc3lzdGVtIHZpYSB0aGVzZSBjaGFuZ2VzLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdtIGNoZWNraW5nIGFnYWluIHRvIGVuc3VyZSBubyBmaWxlcyB3ZXJlIG1vZGlmaWVkIGluIG90aGVyIGRpcmVjdG9yaWVzLiBObywgYWxsIGZpbGVzIGFyZSB1bmRlciBgL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9gLCBhcyBjb25maXJtZWQgYnkgdGhlIGxpc3QuXG5cblRoZXJlZm9yZSwgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIHRoaXMgaXMgYSBkZWZpbml0ZSBcIldvcnRoRnV6emluZz1mYWxzZVwiIHNjZW5hcmlvLiBUaGUgcGF0Y2ggaXRzZWxmIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgc3VyZmFjZSBhcmVhIGZvciBmdXp6aW5nIGNvcmUga2VybmVsIGNvbXBvbmVudHMuIEl0J3Mgc3RyaWN0bHkgYWJvdXQgaW1wcm92aW5nIHRlc3QgY292ZXJhZ2Ugb3IgYWRkaW5nIG5ldyB0ZXN0cyB0byB0aGUgbGliYXJlbmEgZnJhbWV3b3JrIHdpdGhpbiB0aGUgQlBGIHNlbGZ0ZXN0cy5cblxuQWxyaWdodCwgSSdsbCBnbyBhaGVhZCBhbmQgdXBkYXRlIHRoZSByZXN1bHRzIHRvb2wgd2l0aCB0aGlzIGFzc2Vzc21lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjg2LCJPdXRwdXRUb2tlbnMiOjc1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTc0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMDI6MDE6MzkuODAzMTMxNjg3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGFkZHMgYW5kIG1vZGlmaWVzIEJQRiBzZWxmdGVzdHMgZm9yIGxpYmFyZW5hIHVuZGVyIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZSBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIGFuZCBtb2RpZmllcyBCUEYgc2VsZnRlc3RzIGZvciBsaWJhcmVuYSB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmUgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowjcwc5[1] Phase: Running StartedAt: 2026-07-07 02:02:05 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjcwc5[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-07 02:02:05 +0000 UTC FinishedAt: 2026-07-07 02:02:30 +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,}