Name: series-workflowt9n6m Phase: Failed StartedAt: 2026-08-07 16:35:00 +0000 UTC FinishedAt: 2026-08-07 16:58:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt9n6m[0] Phase: Succeeded StartedAt: 2026-08-07 16:35:00 +0000 UTC FinishedAt: 2026-08-07 16:57:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt9n6m[0].run-triage Phase: Succeeded StartedAt: 2026-08-07 16:35:00 +0000 UTC FinishedAt: 2026-08-07 16:57:53 +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+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgc2VsZnRlc3RzICh1c2Vyc3BhY2UgdGVzdCBwcm9ncmFtcyBhbmQgdGVzdCBCUEYgcHJvZ3JhbXMpIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjo1NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGRmMjRjYjExY2MyNjE3ZmUyYTZmMjYyNDljNDQ4N2U2OTkzM2Y0YWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDE2OjU3OjI2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jXG5pbmRleCA0NzdhZWRiYjAxYmFkLi5jY2ZkOWU4NDM2YTdiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xuQEAgLTEwMSw2ICYjNDM7MTAxLDcgQEAgaW50IHhza19jb25maWd1cmVfdW1lbShzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqLCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbSwgdm9pZFxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0dW1lbS1cdTAwM2VidWZmZXIgPSBidWZmZXI7XG4mIzQzO1x0cmVmY291bnRfc2V0KFx1MDAyNnVtZW0tXHUwMDNldXNlcnMsIDEpO1xuIFx0aWYgKGlmb2JqLVx1MDAzZXNoYXJlZF91bWVtIFx1MDAyNlx1MDAyNiBpZm9iai1cdTAwM2VyeF9vbikge1xuIFx0XHR1bWVtLVx1MDAzZWJhc2VfYWRkciA9IHVtZW1fc2l6ZSh1bWVtKTtcbiBcdFx0dW1lbS1cdTAwM2VuZXh0X2J1ZmZlciA9IHVtZW1fc2l6ZSh1bWVtKTtcbkBAIC0xNTQsNiAmIzQzOzE1NSw3IEBAIGludCB4c2tfY29uZmlndXJlX3NvY2tldChzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2ssIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtXG4gXHRzdHJ1Y3QgeHNrX3NvY2tldF9jb25maWcgY2ZnID0ge307XG4gXHRzdHJ1Y3QgeHNrX3JpbmdfY29ucyAqcnhyO1xuIFx0c3RydWN0IHhza19yaW5nX3Byb2QgKnR4cjtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0eHNrLVx1MDAzZXVtZW0gPSB1bWVtO1xuIFx0Y2ZnLnJ4X3NpemUgPSB4c2stXHUwMDNlcnhxc2l6ZTtcbkBAIC0xNzAsNyAmIzQzOzE3MiwyMSBAQCBpbnQgeHNrX2NvbmZpZ3VyZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrLCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbVxuIFxuIFx0dHhyID0gaWZvYmplY3QtXHUwMDNldHhfb24gPyBcdTAwMjZ4c2stXHUwMDNldHggOiBOVUxMO1xuIFx0cnhyID0gaWZvYmplY3QtXHUwMDNlcnhfb24gPyBcdTAwMjZ4c2stXHUwMDNlcnggOiBOVUxMO1xuLVx0cmV0dXJuIHhza19zb2NrZXRfX2NyZWF0ZShcdTAwMjZ4c2stXHUwMDNleHNrLCBpZm9iamVjdC1cdTAwM2VpZmluZGV4LCAwLCB1bWVtLVx1MDAzZXVtZW0sIHJ4ciwgdHhyLCBcdTAwMjZjZmcpO1xuJiM0MztcdHJldCA9IHhza19zb2NrZXRfX2NyZWF0ZShcdTAwMjZ4c2stXHUwMDNleHNrLCBpZm9iamVjdC1cdTAwM2VpZmluZGV4LCAwLCB1bWVtLVx1MDAzZXVtZW0sIHJ4ciwgdHhyLCBcdTAwMjZjZmcpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGlmIChzaGFyZWQpXG4mIzQzO1x0XHRcdC8qIFNoYXJlZCBzb2NrZXQgZmFpbGVkIGJlZm9yZSBhY3F1aXJpbmcgYSBVTUVNIHJlZmVyZW5jZS4gKi9cbiYjNDM7XHRcdFx0eHNrLVx1MDAzZXVtZW0gPSBOVUxMO1xuJiM0MztcbiYjNDM7XHRcdC8qIEtlZXAgZmFpbGVkIHNvY2tldCBzdGF0ZSBpbmVydCBmb3IgbGF0ZXIgY2xlYW51cCBwYXRocy4gKi9cbiYjNDM7XHRcdHhzay1cdTAwM2V4c2sgPSBOVUxMO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChzaGFyZWQpXG4mIzQzO1x0XHRyZWZjb3VudF9pbmMoXHUwMDI2dW1lbS1cdTAwM2V1c2Vycyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyBpbnQgc2V0X3Jpbmdfc2l6ZShzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqKVxuQEAgLTIwMyw2ICYjNDM7MjE5LDEyIEBAIGludCBod19yaW5nX3NpemVfcmVzZXQoc3RydWN0IGlmb2JqZWN0ICppZm9iailcbiBzdGF0aWMgdm9pZCBfX3Rlc3Rfc3BlY19pbml0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmpfdHgsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqX3J4KVxuIHtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEtlZXAgdGhlIHNhbWUgZGVmYXVsdCBhcyB4c2t4Y2VpdmVyIHN0YXJ0dXA6IHdoZW4gVFggYW5kIFJYIHNoYXJlIHRoZSBzYW1lIG5ldGRldixcbiYjNDM7XHQgKiBzaGFyZWQgVU1FTSBpcyB0aGUgYmFzZWxpbmUgbW9kZSBmb3IgdGhpcyB0ZXN0IGhhcm5lc3MuIEluZGl2aWR1YWwgdGVzdHMgY2FuIHN0aWxsXG4mIzQzO1x0ICogb3ZlcnJpZGUgdGhpcyBhcyBuZWVkZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0Ym9vbCBzaGFyZWRfZGVmYXVsdCA9IGlmb2JqX3R4LVx1MDAzZWlmaW5kZXggPT0gaWZvYmpfcngtXHUwMDNlaWZpbmRleDtcbiBcdHUzMiBpLCBqO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUFYX0lOVEVSRkFDRVM7IGkmIzQzOyYjNDM7KSB7XG5AQCAtMjE0LDYgJiM0MzsyMzYsNyBAQCBzdGF0aWMgdm9pZCBfX3Rlc3Rfc3BlY19pbml0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmpfdHgsXG4gXHRcdGlmb2JqLVx1MDAzZXVzZV9maWxsX3JpbmcgPSB0cnVlO1xuIFx0XHRpZm9iai1cdTAwM2VyZWxlYXNlX3J4ID0gdHJ1ZTtcbiBcdFx0aWZvYmotXHUwMDNldmFsaWRhdGlvbl9mdW5jID0gTlVMTDtcbiYjNDM7XHRcdGlmb2JqLVx1MDAzZXNoYXJlZF91bWVtID0gc2hhcmVkX2RlZmF1bHQ7XG4gXHRcdGlmb2JqLVx1MDAzZXVzZV9tZXRhZGF0YSA9IGZhbHNlO1xuIFxuIFx0XHRpZiAoaSA9PSAwKSB7XG5AQCAtNTc0LDI2ICYjNDM7NTk3LDEyMiBAQCBzdGF0aWMgaW50IHBrdF9zdHJlYW1fcmVjZWl2ZV9oYWxmKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4gXG4gc3RhdGljIGludCBwa3Rfc3RyZWFtX2V2ZW5fb2RkX3NlcXVlbmNlKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4ge1xuJiM0MztcdHN0cnVjdCBwa3Rfc3RyZWFtICp0eF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9O1xuJiM0MztcdHN0cnVjdCBwa3Rfc3RyZWFtICpyeF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9O1xuIFx0c3RydWN0IHBrdF9zdHJlYW0gKnBrdF9zdHJlYW07XG4gXHR1MzIgaTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlc3QtXHUwMDNlbmJfc29ja2V0czsgaSYjNDM7JiM0MzspIHtcbiBcdFx0cGt0X3N0cmVhbSA9IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtO1xuLVx0XHRwa3Rfc3RyZWFtID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tXHUwMDNlbmJfcGt0cyAvIDIsXG4tXHRcdFx0XHRcdFx0ICAgcGt0X3N0cmVhbS1cdTAwM2Vwa3RzWzBdLmxlbiwgaSwgMik7XG4tXHRcdGlmICghcGt0X3N0cmVhbSlcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdFx0dGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSBwa3Rfc3RyZWFtO1xuJiM0MztcdFx0dHhfc3RyZWFtc1tpXSA9IF9fcGt0X3N0cmVhbV9nZW5lcmF0ZShwa3Rfc3RyZWFtLVx1MDAzZW5iX3BrdHMgLyAyLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICBwa3Rfc3RyZWFtLVx1MDAzZXBrdHNbMF0ubGVuLCBpLCAyKTtcbiYjNDM7XHRcdGlmICghdHhfc3RyZWFtc1tpXSlcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4gXG4gXHRcdHBrdF9zdHJlYW0gPSB0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbTtcbi1cdFx0cGt0X3N0cmVhbSA9IF9fcGt0X3N0cmVhbV9nZW5lcmF0ZShwa3Rfc3RyZWFtLVx1MDAzZW5iX3BrdHMgLyAyLFxuLVx0XHRcdFx0XHRcdCAgIHBrdF9zdHJlYW0tXHUwMDNlcGt0c1swXS5sZW4sIGksIDIpO1xuLVx0XHRpZiAoIXBrdF9zdHJlYW0pXG4tXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRcdHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtID0gcGt0X3N0cmVhbTtcbiYjNDM7XHRcdHJ4X3N0cmVhbXNbaV0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUocGt0X3N0cmVhbS1cdTAwM2VuYl9wa3RzIC8gMixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgcGt0X3N0cmVhbS1cdTAwM2Vwa3RzWzBdLmxlbiwgaSwgMik7XG4mIzQzO1x0XHRpZiAoIXJ4X3N0cmVhbXNbaV0pXG4mIzQzO1x0XHRcdGdvdG8gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGVzdC1cdTAwM2VuYl9zb2NrZXRzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSB0eF9zdHJlYW1zW2ldO1xuJiM0MztcdFx0dGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSByeF9zdHJlYW1zW2ldO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnI6XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGVzdC1cdTAwM2VuYl9zb2NrZXRzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHR4X3N0cmVhbXNbaV0pXG4mIzQzO1x0XHRcdHBrdF9zdHJlYW1fZGVsZXRlKHR4X3N0cmVhbXNbaV0pO1xuJiM0MztcdFx0aWYgKHJ4X3N0cmVhbXNbaV0pXG4mIzQzO1x0XHRcdHBrdF9zdHJlYW1fZGVsZXRlKHJ4X3N0cmVhbXNbaV0pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FTk9NRU07XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGt0X3N0cmVhbV9sZW5fc2VxKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHUzMiBzaG9ydF9sZW4sIHUzMiBsb25nX2xlbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwa3Rfc3RyZWFtICp0eF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9O1xuJiM0MztcdHN0cnVjdCBwa3Rfc3RyZWFtICpyeF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9O1xuJiM0MztcdHN0cnVjdCBwa3Rfc3RyZWFtICpwa3Rfc3RyZWFtO1xuJiM0MztcdHUzMiBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0ZXN0LVx1MDAzZW5iX3NvY2tldHM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1MzIgcGt0X2xlbiA9IGkgPyBsb25nX2xlbiA6IHNob3J0X2xlbjtcbiYjNDM7XG4mIzQzO1x0XHRwa3Rfc3RyZWFtID0gdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW07XG4mIzQzO1x0XHR0eF9zdHJlYW1zW2ldID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tXHUwMDNlbmJfcGt0cyAvIDIsIHBrdF9sZW4sIGksIDIpO1xuJiM0MztcdFx0aWYgKCF0eF9zdHJlYW1zW2ldKVxuJiM0MztcdFx0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0XHRwa3Rfc3RyZWFtID0gdGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW07XG4mIzQzO1x0XHRyeF9zdHJlYW1zW2ldID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tXHUwMDNlbmJfcGt0cyAvIDIsIHBrdF9sZW4sIGksIDIpO1xuJiM0MztcdFx0aWYgKCFyeF9zdHJlYW1zW2ldKVxuJiM0MztcdFx0XHRnb3RvIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlc3QtXHUwMDNlbmJfc29ja2V0czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtID0gdHhfc3RyZWFtc1tpXTtcbiYjNDM7XHRcdHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtID0gcnhfc3RyZWFtc1tpXTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyOlxuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlc3QtXHUwMDNlbmJfc29ja2V0czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmICh0eF9zdHJlYW1zW2ldKVxuJiM0MztcdFx0XHRwa3Rfc3RyZWFtX2RlbGV0ZSh0eF9zdHJlYW1zW2ldKTtcbiYjNDM7XHRcdGlmIChyeF9zdHJlYW1zW2ldKVxuJiM0MztcdFx0XHRwa3Rfc3RyZWFtX2RlbGV0ZShyeF9zdHJlYW1zW2ldKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAtRU5PTUVNO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBrdF9zdHJlYW1fd2VpZ2h0ZWRfdW5ldmVuX2Rpc3Rfc2VxdWVuY2Uoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgdTMyIHRvdGFsX3BrdHMsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICB1MzIgcGt0X2xlbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwa3Rfc3RyZWFtICp0eF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9O1xuJiM0MztcdHN0cnVjdCBwa3Rfc3RyZWFtICpyeF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9O1xuJiM0MztcdHUzMiBpLCBwa3RzX3NvY2swO1xuJiM0MztcbiYjNDM7XHRpZiAodGVzdC1cdTAwM2VuYl9zb2NrZXRzIFx1MDAzYyAyIHx8IHRvdGFsX3BrdHMgXHUwMDNjIDQpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0cGt0c19zb2NrMCA9IHRvdGFsX3BrdHMgLyA0O1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0ZXN0LVx1MDAzZW5iX3NvY2tldHM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1MzIgbmJfcGt0cyA9IChpID09IDApID8gcGt0c19zb2NrMCA6ICh0b3RhbF9wa3RzIC0gcGt0c19zb2NrMCk7XG4mIzQzO1xuJiM0MztcdFx0dHhfc3RyZWFtc1tpXSA9IF9fcGt0X3N0cmVhbV9nZW5lcmF0ZShuYl9wa3RzLCBwa3RfbGVuLCBpLCAyKTtcbiYjNDM7XHRcdGlmICghdHhfc3RyZWFtc1tpXSlcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdFx0cnhfc3RyZWFtc1tpXSA9IF9fcGt0X3N0cmVhbV9nZW5lcmF0ZShuYl9wa3RzLCBwa3RfbGVuLCBpLCAyKTtcbiYjNDM7XHRcdGlmICghcnhfc3RyZWFtc1tpXSlcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0ZXN0LVx1MDAzZW5iX3NvY2tldHM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSA9IHR4X3N0cmVhbXNbaV07XG4mIzQzO1x0XHR0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSA9IHJ4X3N0cmVhbXNbaV07XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2VycjpcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0ZXN0LVx1MDAzZW5iX3NvY2tldHM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAodHhfc3RyZWFtc1tpXSlcbiYjNDM7XHRcdFx0cGt0X3N0cmVhbV9kZWxldGUodHhfc3RyZWFtc1tpXSk7XG4mIzQzO1x0XHRpZiAocnhfc3RyZWFtc1tpXSlcbiYjNDM7XHRcdFx0cGt0X3N0cmVhbV9kZWxldGUocnhfc3RyZWFtc1tpXSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gLUVOT01FTTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcmVsZWFzZV9ldmVuX29kZF9zZXF1ZW5jZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuQEAgLTE0NjgsNiAmIzQzOzE1ODcsMjggQEAgc3RhdGljIGludCB2YWxpZGF0ZV90eF9pbnZhbGlkX2Rlc2NzKHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QpXG4gXHRyZXR1cm4gVEVTVF9QQVNTO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgeHNrX2RlbGV0ZV9zb2NrZXRfYmF0Y2goc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdCwgdTMyIGNvdW50KVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGk7XG4mIzQzO1xuJiM0MztcdGlmICghaWZvYmplY3QpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IGNvdW50OyBpIFx1MDAzZSAwOyBpLS0pXG4mIzQzO1x0XHR4c2tfZGVsZXRlX3NvY2tldChcdTAwMjZpZm9iamVjdC1cdTAwM2V4c2tfYXJyW2kgLSAxXSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHhza19jb25maWd1cmVfcm9sbGJhY2soc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdCwgaW50IGxhc3QpXG4mIzQzO3tcbiYjNDM7XHR1MzIgY291bnQ7XG4mIzQzO1xuJiM0MztcdGlmICghaWZvYmplY3QgfHwgbGFzdCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Y291bnQgPSBsYXN0ICYjNDM7IDE7XG4mIzQzO1x0eHNrX2RlbGV0ZV9zb2NrZXRfYmF0Y2goaWZvYmplY3QsIGNvdW50KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHhza19jb25maWd1cmUoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdCxcbiBcdFx0XHQgIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtLCBib29sIHR4KVxuIHtcbkBAIC0xNDg0LDE0ICYjNDM7MTYyNSwxOCBAQCBzdGF0aWMgaW50IHhza19jb25maWd1cmUoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdCxcbiBcdFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRcdC8qIFJldHJ5IGlmIGl0IGZhaWxzIGFzIHhza19zb2NrZXRfX2NyZWF0ZSgpIGlzIGFzeW5jaHJvbm91cyAqL1xuLVx0XHRcdGlmIChjdHIgXHUwMDNlPSBTT0NLX1JFQ09ORl9DVFIpXG4mIzQzO1x0XHRcdGlmIChjdHIgXHUwMDNlPSBTT0NLX1JFQ09ORl9DVFIpIHtcbiYjNDM7XHRcdFx0XHR4c2tfY29uZmlndXJlX3JvbGxiYWNrKGlmb2JqZWN0LCBpKTtcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRcdH1cbiBcdFx0XHR1c2xlZXAoVVNMRUVQX01BWCk7XG4gXHRcdH1cbiBcdFx0aWYgKGlmb2JqZWN0LVx1MDAzZWJ1c3lfcG9sbCkge1xuIFx0XHRcdHJldCA9IGVuYWJsZV9idXN5X3BvbGwoXHUwMDI2aWZvYmplY3QtXHUwMDNleHNrX2FycltpXSk7XG4tXHRcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRcdHhza19jb25maWd1cmVfcm9sbGJhY2soaWZvYmplY3QsIGkpO1xuIFx0XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdFx0fVxuIFx0XHR9XG4gXHR9XG4gXG5AQCAtMTcwMiwxMiAmIzQzOzE4NDcsNjAgQEAgdm9pZCAqd29ya2VyX3Rlc3RhcHBfdmFsaWRhdGVfcngodm9pZCAqYXJnKVxuIFx0cHRocmVhZF9leGl0KE5VTEwpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB0ZXN0YXBwX2NsZWFuX3hza191bWVtKHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXG4mIzQzO3ZvaWQgeHNrX2RlbGV0ZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrKVxuIHtcbi1cdHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtID0gaWZvYmotXHUwMDNleHNrLVx1MDAzZXVtZW07XG4mIzQzO1x0c3RydWN0IHhza191bWVtX2luZm8gKnVtZW07XG4gXG4tXHR4c2tfdW1lbV9fZGVsZXRlKHVtZW0tXHUwMDNldW1lbSk7XG4tXHRtdW5tYXAodW1lbS1cdTAwM2VidWZmZXIsIHVtZW0tXHUwMDNlbW1hcF9zaXplKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIENhbGxlcnMgbXVzdCBzZXJpYWxpemUgdGVhcmRvd24gZm9yIGEgZ2l2ZW4geHNrL3VtZW0gcGFpci5cbiYjNDM7XHQgKiBUaGlzIGhlbHBlciBkb2VzIHJlZmNvdW50LWJhc2VkIGxpZmV0aW1lIG1hbmFnZW1lbnQgb25seS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXhzaylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0dW1lbSA9IHhzay1cdTAwM2V1bWVtO1xuJiM0MztcdGlmICghdW1lbSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0LyogRGVsZXRlIHRoZSBzb2NrZXQgaGFuZGxlIHdoZW4gYXZhaWxhYmxlLCB0aGVuIGRyb3AgVU1FTSByZWZlcmVuY2UuICovXG4mIzQzO1x0aWYgKHhzay1cdTAwM2V4c2spXG4mIzQzO1x0XHR4c2tfc29ja2V0X19kZWxldGUoeHNrLVx1MDAzZXhzayk7XG4mIzQzO1x0eHNrLVx1MDAzZXhzayA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdC8qIE1hcmsgdGhpcyBzb2NrZXQgYXMgY2xlYW5lZCB1cCB0byBwcmV2ZW50IGRvdWJsZS1kZWNyZW1lbnQgKi9cbiYjNDM7XHR4c2stXHUwMDNldW1lbSA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGVhcmRvd24gbWF5IHdhbGsgdGhlIGZ1bGwgeHNrIGFycmF5LCBpbmNsdWRpbmcgc2xvdHMgdGhhdCBuZXZlciBjb21wbGV0ZWQgc2V0dXAgYnV0XG4mIzQzO1x0ICogc3RpbGwgY2FycnkgYSBwcmVpbml0aWFsaXplZCB1bWVtIHBvaW50ZXIuIEFmdGVyIGEgcGFydGlhbC1zZXR1cCByb2xsYmFjaywgdGhlIGxhc3QgVU1FTVxuJiM0MztcdCAqIHJlZiBtYXkgYWxyZWFkeSBiZSBkcm9wcGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghcmVmY291bnRfcmVhZChcdTAwMjZ1bWVtLVx1MDAzZXVzZXJzKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0LyogQWx3YXlzIGRlY3JlbWVudCByZWZjb3VudCBmb3IgdGhpcyBzb2NrZXQmIzM5O3MgVU1FTSByZWZlcmVuY2UgKi9cbiYjNDM7XHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNnVtZW0tXHUwMDNldXNlcnMpKSB7XG4mIzQzO1x0XHRpZiAodW1lbS1cdTAwM2V1bWVtKSB7XG4mIzQzO1x0XHRcdGludCBlcnIgPSB4c2tfdW1lbV9fZGVsZXRlKHVtZW0tXHUwMDNldW1lbSk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O3hza191bWVtX19kZWxldGUgZmFpbGVkOiAlZCAodW1lbSBzdGlsbCBidXN5PylcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgZXJyKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmICh1bWVtLVx1MDAzZWJ1ZmZlciBcdTAwMjZcdTAwMjYgdW1lbS1cdTAwM2VtbWFwX3NpemUpXG4mIzQzO1x0XHRcdG11bm1hcCh1bWVtLVx1MDAzZWJ1ZmZlciwgdW1lbS1cdTAwM2VtbWFwX3NpemUpO1xuJiM0MztcdFx0dW1lbS1cdTAwM2V1bWVtID0gTlVMTDtcbiYjNDM7XHRcdHVtZW0tXHUwMDNlYnVmZmVyID0gTlVMTDtcbiYjNDM7XHRcdHVtZW0tXHUwMDNlbW1hcF9zaXplID0gMDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iailcbiYjNDM7e1xuJiM0MztcdGlmICghaWZvYmopXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHhza19kZWxldGVfc29ja2V0X2JhdGNoKGlmb2JqLCB0ZXN0LVx1MDAzZW5iX3NvY2tldHMpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCB4ZHBfcHJvZ19jaGFuZ2VkX3J4KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG5AQCAtMTc2OSwyNyAmIzQzOzE5NjIsNiBAQCBzdGF0aWMgaW50IHhza19hdHRhY2hfeGRwX3Byb2dzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmpfclxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tc3RhdGljIHZvaWQgY2xlYW5fc29ja2V0cyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqKVxuLXtcbi1cdHUzMiBpO1xuLVxuLVx0aWYgKCFpZm9iaiB8fCAhdGVzdClcbi1cdFx0cmV0dXJuO1xuLVxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGVzdC1cdTAwM2VuYl9zb2NrZXRzOyBpJiM0MzsmIzQzOylcbi1cdFx0eHNrX3NvY2tldF9fZGVsZXRlKGlmb2JqLVx1MDAzZXhza19hcnJbaV0ueHNrKTtcbi19XG4tXG4tc3RhdGljIHZvaWQgY2xlYW5fdW1lbShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqMSwgc3RydWN0IGlmb2JqZWN0ICppZm9iajIpXG4te1xuLVx0aWYgKCFpZm9iajEpXG4tXHRcdHJldHVybjtcbi1cbi1cdHRlc3RhcHBfY2xlYW5feHNrX3VtZW0oaWZvYmoxKTtcbi1cdGlmIChpZm9iajIgXHUwMDI2XHUwMDI2ICFpZm9iajItXHUwMDNlc2hhcmVkX3VtZW0pXG4tXHRcdHRlc3RhcHBfY2xlYW5feHNrX3VtZW0oaWZvYmoyKTtcbi19XG4tXG4gc3RhdGljIGludCBfX3Rlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqMSxcbiBcdFx0XHRcdCAgICAgIHN0cnVjdCBpZm9iamVjdCAqaWZvYmoyKVxuIHtcbkBAIC0xODQxLDggJiM0MzsyMDEzLDcgQEAgc3RhdGljIGludCBfX3Rlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlcbiBcdFx0aWYgKHB0aHJlYWRfYmFycmllcl9kZXN0cm95KFx1MDAyNmJhcnIpKSB7XG4gXHRcdFx0dGVzdC1cdTAwM2V1c2VfYmFycmllciA9IGZhbHNlO1xuIFx0XHRcdHB0aHJlYWRfam9pbih0MCwgTlVMTCk7XG4tXHRcdFx0Y2xlYW5fc29ja2V0cyh0ZXN0LCBpZm9iajEpO1xuLVx0XHRcdGNsZWFuX3VtZW0odGVzdCwgaWZvYmoxLCBOVUxMKTtcbiYjNDM7XHRcdFx0eHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCBpZm9iajEpO1xuIFx0XHRcdHJldHVybiBURVNUX0ZBSUxVUkU7XG4gXHRcdH1cbiBcdH1cbkBAIC0xODU2LDkgJiM0MzsyMDI3LDggQEAgc3RhdGljIGludCBfX3Rlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlcbiBcdHB0aHJlYWRfam9pbih0MCwgTlVMTCk7XG4gXG4gXHRpZiAodGVzdC1cdTAwM2V0b3RhbF9zdGVwcyA9PSB0ZXN0LVx1MDAzZWN1cnJlbnRfc3RlcCB8fCB0ZXN0LVx1MDAzZWZhaWwpIHtcbi1cdFx0Y2xlYW5fc29ja2V0cyh0ZXN0LCBpZm9iajEpO1xuLVx0XHRjbGVhbl9zb2NrZXRzKHRlc3QsIGlmb2JqMik7XG4tXHRcdGNsZWFuX3VtZW0odGVzdCwgaWZvYmoxLCBpZm9iajIpO1xuJiM0MztcdFx0eHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCBpZm9iajIpO1xuJiM0MztcdFx0eHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCBpZm9iajEpO1xuIFx0fVxuIFxuIFx0aWYgKHRlc3QtXHUwMDNlZmFpbClcbkBAIC0xOTY3LDkgJiM0MzsyMTM3LDggQEAgaW50IHRlc3RhcHBfeGRwX3Byb2dfY2xlYW51cChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuIFx0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuIFxuIFx0aWYgKHN3YXBfeHNrX3Jlc291cmNlcyh0ZXN0KSkge1xuLVx0XHRjbGVhbl9zb2NrZXRzKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfcngpO1xuLVx0XHRjbGVhbl9zb2NrZXRzKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfdHgpO1xuLVx0XHRjbGVhbl91bWVtKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfcngsIHRlc3QtXHUwMDNlaWZvYmpfdHgpO1xuJiM0MztcdFx0eHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCB0ZXN0LVx1MDAzZWlmb2JqX3R4KTtcbiYjNDM7XHRcdHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgdGVzdC1cdTAwM2VpZm9ial9yeCk7XG4gXHRcdHJldHVybiBURVNUX0ZBSUxVUkU7XG4gXHR9XG4gXG5AQCAtMjIyNCw2ICYjNDM7MjM5MywxNjggQEAgaW50IHRlc3RhcHBfeGRwX3NoYXJlZF91bWVtKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBzaGFyZWRfdW1lbV90ZXN0X3ByZXBhcmUoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiYjNDM7e1xuJiM0MztcdHUzMiBpO1xuJiM0MztcbiYjNDM7XHRpZiAodGVzdC1cdTAwM2VuYl9zb2NrZXRzIFx1MDAzZSBNQVhfU09DS0VUUykge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7RVJST1I6IFslc10gaW52YWxpZCBzb2NrZXQgY291bnQgJXVcXG5cJiMzNDssIF9fZnVuY19fLCB0ZXN0LVx1MDAzZW5iX3NvY2tldHMpO1xuJiM0MztcdFx0cmV0dXJuIFRFU1RfRkFJTFVSRTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlc3QtXHUwMDNlbmJfc29ja2V0czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmICghdGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gfHxcbiYjNDM7XHRcdCAgICAhdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0pIHtcbiYjNDM7XHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7RVJST1I6IFslc10gbWlzc2luZyBzdHJlYW0gZm9yIHNvY2tldCAldVxcblwmIzM0OywgX19mdW5jX18sIGkpO1xuJiM0MztcdFx0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIFRFU1RfUEFTUztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBzaGFyZWRfdW1lbV9zZXFfZXZlbl9vZGQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgY29uc3Qgdm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0KHZvaWQpY3R4O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcGt0X3N0cmVhbV9ldmVuX29kZF9zZXF1ZW5jZSh0ZXN0KSA/IFRFU1RfRkFJTFVSRSA6IFRFU1RfUEFTUztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBzaGFyZWRfdW1lbV9zZXFfbGVuKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIGNvbnN0IHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBzaGFyZWRfdW1lbV9sZW5fY3R4ICpjZmcgPSBjdHg7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwa3Rfc3RyZWFtX2xlbl9zZXEodGVzdCwgY2ZnLVx1MDAzZXNob3J0X2xlbiwgY2ZnLVx1MDAzZWxvbmdfbGVuKSA/IFRFU1RfRkFJTFVSRSA6IFRFU1RfUEFTUztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBzaGFyZWRfdW1lbV9zZXFfdW5ldmVuX2Rpc3Qoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgY29uc3Qgdm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHNoYXJlZF91bWVtX3VuZXZlbl9kaXN0X2N0eCAqY2ZnID0gY3R4O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcGt0X3N0cmVhbV93ZWlnaHRlZF91bmV2ZW5fZGlzdF9zZXF1ZW5jZSh0ZXN0LCBjZmctXHUwMDNldG90YWxfcGt0cyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgY2ZnLVx1MDAzZXBrdF9sZW4pID8gVEVTVF9GQUlMVVJFIDogVEVTVF9QQVNTO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHNoYXJlZF91bWVtX3Bvc3RfdW5ldmVuX2Rpc3Qoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgaW50IHJldCwgY29uc3Qgdm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBrdF9zdHJlYW0gKnR4X3N0cmVhbV8wLCAqdHhfc3RyZWFtXzE7XG4mIzQzO1x0c3RydWN0IHBrdF9zdHJlYW0gKnJ4X3N0cmVhbV8wLCAqcnhfc3RyZWFtXzE7XG4mIzQzO1xuJiM0MztcdCh2b2lkKWN0eDtcbiYjNDM7XG4mIzQzO1x0dHhfc3RyZWFtXzAgPSB0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhza19hcnJbMF0ucGt0X3N0cmVhbTtcbiYjNDM7XHR0eF9zdHJlYW1fMSA9IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleHNrX2FyclsxXS5wa3Rfc3RyZWFtO1xuJiM0MztcdHJ4X3N0cmVhbV8wID0gdGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2tfYXJyWzBdLnBrdF9zdHJlYW07XG4mIzQzO1x0cnhfc3RyZWFtXzEgPSB0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhza19hcnJbMV0ucGt0X3N0cmVhbTtcbiYjNDM7XG4mIzQzO1x0aWYgKHR4X3N0cmVhbV8xLVx1MDAzZW5iX3ZhbGlkX2VudHJpZXMgXHUwMDNjPSB0eF9zdHJlYW1fMC1cdTAwM2VuYl92YWxpZF9lbnRyaWVzKVxuJiM0MztcdFx0cmV0dXJuIFRFU1RfRkFJTFVSRTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHJ4X3N0cmVhbV8xLVx1MDAzZW5iX3J4X3BrdHMgXHUwMDNjPSByeF9zdHJlYW1fMC1cdTAwM2VuYl9yeF9wa3RzKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtFUlJPUjogc29ja2V0MSByeF9wa3RzICgldSkgbm90IGdyZWF0ZXIgdGhhbiBzb2NrZXQwICgldSlcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgICByeF9zdHJlYW1fMS1cdTAwM2VuYl9yeF9wa3RzLCByeF9zdHJlYW1fMC1cdTAwM2VuYl9yeF9wa3RzKTtcbiYjNDM7XHRcdHJldCA9IFRFU1RfRkFJTFVSRTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnVuX3NoYXJlZF91bWVtX3Rlc3Qoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGJwZl9wcm9ncmFtICp4ZHBfcHJvZ19yeCxcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgYnBmX3Byb2dyYW0gKnhkcF9wcm9nX3R4LCBzdHJ1Y3QgYnBmX21hcCAqeHNrbWFwX3J4LFxuJiM0MztcdFx0XHRcdHN0cnVjdCBicGZfbWFwICp4c2ttYXBfdHgsIHUzMiBuYl9zb2NrZXRzLFxuJiM0MztcdFx0XHRcdHNoYXJlZF91bWVtX3NlcV9mbiBzZXFfZm4sIHNoYXJlZF91bWVtX3Bvc3RfZm4gcG9zdF9mbixcbiYjNDM7XHRcdFx0XHRjb25zdCB2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHR0ZXN0LVx1MDAzZXRvdGFsX3N0ZXBzID0gMTtcbiYjNDM7XHR0ZXN0LVx1MDAzZW5iX3NvY2tldHMgPSBuYl9zb2NrZXRzO1xuJiM0MztcbiYjNDM7XHR0ZXN0X3NwZWNfc2V0X3hkcF9wcm9nKHRlc3QsIHhkcF9wcm9nX3J4LCB4ZHBfcHJvZ190eCwgeHNrbWFwX3J4LCB4c2ttYXBfdHgpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBzaGFyZWRfdW1lbV90ZXN0X3ByZXBhcmUodGVzdCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHNlcV9mbih0ZXN0LCBjdHgpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB0ZXN0YXBwX3ZhbGlkYXRlX3RyYWZmaWModGVzdCk7XG4mIzQzO1x0aWYgKHBvc3RfZm4pXG4mIzQzO1x0XHRyZXQgPSBwb3N0X2ZuKHRlc3QsIHJldCwgY3R4KTtcbiYjNDM7XG4mIzQzO1x0cmVsZWFzZV9ldmVuX29kZF9zZXF1ZW5jZSh0ZXN0KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fNF9zb2NrZXRzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF9yeCA9IHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleGRwX3Byb2dzO1xuJiM0MztcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3R4ID0gdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4ZHBfcHJvZ3M7XG4mIzQzO1xuJiM0MztcdHJldHVybiBydW5fc2hhcmVkX3VtZW1fdGVzdCh0ZXN0LCBza2VsX3J4LVx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sXG4mIzQzO1x0XHRcdFx0ICAgIHNrZWxfdHgtXHUwMDNlcHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSwgc2tlbF9yeC1cdTAwM2VtYXBzLnhzayxcbiYjNDM7XHRcdFx0XHQgICAgc2tlbF90eC1cdTAwM2VtYXBzLnhzaywgNCwgc2hhcmVkX3VtZW1fc2VxX2V2ZW5fb2RkLCBOVUxMLCBOVUxMKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF9yeCA9IHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleGRwX3Byb2dzO1xuJiM0MztcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3R4ID0gdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4ZHBfcHJvZ3M7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHNoYXJlZF91bWVtX2xlbl9jdHggbGVuX2N0eCA9IHtcbiYjNDM7XHRcdC5zaG9ydF9sZW4gPSBNSU5fUEtUX1NJWkUsXG4mIzQzO1x0XHQubG9uZ19sZW4gPSBNSU5fUEtUX1NJWkUgKiAyLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBydW5fc2hhcmVkX3VtZW1fdGVzdCh0ZXN0LCBza2VsX3J4LVx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkLFxuJiM0MztcdFx0XHRcdCAgICBza2VsX3R4LVx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkLFxuJiM0MztcdFx0XHRcdCAgICBza2VsX3J4LVx1MDAzZW1hcHMueHNrLCBza2VsX3R4LVx1MDAzZW1hcHMueHNrLCAyLCBzaGFyZWRfdW1lbV9zZXFfbGVuLFxuJiM0MztcdFx0XHRcdCAgICBOVUxMLCBcdTAwMjZsZW5fY3R4KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3Qoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3J4ID0gdGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4ZHBfcHJvZ3M7XG4mIzQzO1x0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfdHggPSB0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhkcF9wcm9ncztcbiYjNDM7XHRjb25zdCBzdHJ1Y3Qgc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3RfY3R4IHVuZXZlbl9kaXN0X2N0eCA9IHtcbiYjNDM7XHRcdC50b3RhbF9wa3RzID0gREVGQVVMVF9QS1RfQ05UICogNCxcbiYjNDM7XHRcdC5wa3RfbGVuID0gTUlOX1BLVF9TSVpFLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBydW5fc2hhcmVkX3VtZW1fdGVzdCh0ZXN0LCBza2VsX3J4LVx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sXG4mIzQzO1x0XHRcdFx0ICAgIHNrZWxfdHgtXHUwMDNlcHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSwgc2tlbF9yeC1cdTAwM2VtYXBzLnhzayxcbiYjNDM7XHRcdFx0XHQgICAgc2tlbF90eC1cdTAwM2VtYXBzLnhzaywgMiwgc2hhcmVkX3VtZW1fc2VxX3VuZXZlbl9kaXN0LFxuJiM0MztcdFx0XHRcdCAgICBzaGFyZWRfdW1lbV9wb3N0X3VuZXZlbl9kaXN0LCBcdTAwMjZ1bmV2ZW5fZGlzdF9jdHgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV91bmFsaWduZWQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3J4ID0gdGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4ZHBfcHJvZ3M7XG4mIzQzO1x0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfdHggPSB0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhkcF9wcm9ncztcbiYjNDM7XHRzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdHhfdW1lbSA9IHRlc3QtXHUwMDNlaWZvYmpfdHggXHUwMDI2XHUwMDI2IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleHNrID9cbiYjNDM7XHRcdHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleHNrLVx1MDAzZXVtZW0gOiBOVUxMO1xuJiM0MztcdHN0cnVjdCB4c2tfdW1lbV9pbmZvICpyeF91bWVtID0gdGVzdC1cdTAwM2VpZm9ial9yeCBcdTAwMjZcdTAwMjYgdGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2sgP1xuJiM0MztcdFx0dGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2stXHUwMDNldW1lbSA6IE5VTEw7XG4mIzQzO1x0Ym9vbCB0eF91bmFsaWduZWQgPSB0eF91bWVtID8gdHhfdW1lbS1cdTAwM2V1bmFsaWduZWRfbW9kZSA6IGZhbHNlO1xuJiM0MztcdGJvb2wgcnhfdW5hbGlnbmVkID0gcnhfdW1lbSA/IHJ4X3VtZW0tXHUwMDNldW5hbGlnbmVkX21vZGUgOiBmYWxzZTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHR0ZXN0X3NwZWNfc2V0X3VuYWxpZ25lZCh0ZXN0KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnVuX3NoYXJlZF91bWVtX3Rlc3QodGVzdCwgc2tlbF9yeC1cdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLFxuJiM0MztcdFx0XHRcdCAgIHNrZWxfdHgtXHUwMDNlcHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSwgc2tlbF9yeC1cdTAwM2VtYXBzLnhzayxcbiYjNDM7XHRcdFx0XHQgICBza2VsX3R4LVx1MDAzZW1hcHMueHNrLCAyLCBzaGFyZWRfdW1lbV9zZXFfZXZlbl9vZGQsIE5VTEwsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRpZiAodHhfdW1lbSlcbiYjNDM7XHRcdHR4X3VtZW0tXHUwMDNldW5hbGlnbmVkX21vZGUgPSB0eF91bmFsaWduZWQ7XG4mIzQzO1x0aWYgKHJ4X3VtZW0pXG4mIzQzO1x0XHRyeF91bWVtLVx1MDAzZXVuYWxpZ25lZF9tb2RlID0gcnhfdW5hbGlnbmVkO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIGludCB0ZXN0YXBwX3BvbGxfdHhxX3Rtb3V0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4ge1xuIFx0Ym9vbCBzaGFyZWRfdW1lbSA9IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNlc2hhcmVkX3VtZW07XG5AQCAtMjQ5OCw5ICYjNDM7MjgyOSw4IEBAIGludCB0ZXN0YXBwX2h3X3N3X21heF9yaW5nX3NpemUoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiBcdHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleHNrLVx1MDAzZWJhdGNoX3NpemUgPSB0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXJpbmcudHhfbWF4X3BlbmRpbmcgLSA4O1xuIFx0dGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2stXHUwMDNlYmF0Y2hfc2l6ZSA9IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNlcmluZy50eF9tYXhfcGVuZGluZyAtIDg7XG4gXHRpZiAocGt0X3N0cmVhbV9yZXBsYWNlKHRlc3QsIG1heF9kZXNjcywgTUlOX1BLVF9TSVpFKSkge1xuLVx0XHRjbGVhbl9zb2NrZXRzKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfdHgpO1xuLVx0XHRjbGVhbl9zb2NrZXRzKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfcngpO1xuLVx0XHRjbGVhbl91bWVtKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfcngsIHRlc3QtXHUwMDNlaWZvYmpfdHgpO1xuJiM0MztcdFx0eHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCB0ZXN0LVx1MDAzZWlmb2JqX3R4KTtcbiYjNDM7XHRcdHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgdGVzdC1cdTAwM2VpZm9ial9yeCk7XG4gXHRcdHJldHVybiBURVNUX0ZBSUxVUkU7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmhcbmluZGV4IDAzNzUzZGRjNWRjZGEuLmVmOWM0MjJkNzc2M2UgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5oXG5AQCAtNCw2ICYjNDM7NCw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXRodG9vbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfeGRwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcmVmY291bnQuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0Oy4uL2tzZWxmdGVzdC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7eHNrLmhcJiMzNDtcbkBAIC03OSw2ICYjNDM7ODAsOSBAQCBzdHJ1Y3QgdGVzdF9zcGVjO1xuIHR5cGVkZWYgaW50ICgqdmFsaWRhdGlvbl9mdW5jX3QpKHN0cnVjdCBpZm9iamVjdCAqaWZvYmopO1xuIHR5cGVkZWYgdm9pZCAqKCp0aHJlYWRfZnVuY190KSh2b2lkICphcmcpO1xuIHR5cGVkZWYgaW50ICgqdGVzdF9mdW5jX3QpKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuJiM0Mzt0eXBlZGVmIGludCAoKnNoYXJlZF91bWVtX3NlcV9mbikoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgY29uc3Qgdm9pZCAqY3R4KTtcbiYjNDM7dHlwZWRlZiBpbnQgKCpzaGFyZWRfdW1lbV9wb3N0X2ZuKShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBpbnQgcmV0LFxuJiM0MztcdFx0XHRcdFx0ICAgY29uc3Qgdm9pZCAqY3R4KTtcbiBcbiBzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvIHtcbiBcdHN0cnVjdCB4c2tfcmluZ19jb25zIHJ4O1xuQEAgLTEwNCw2ICYjNDM7MTA4LDcgQEAgc3RydWN0IHhza191bWVtX2luZm8ge1xuIFx0c3RydWN0IHhza191bWVtICp1bWVtO1xuIFx0dTY0IG5leHRfYnVmZmVyO1xuIFx0dTY0IG1tYXBfc2l6ZTtcbiYjNDM7XHRyZWZjb3VudF90IHVzZXJzO1xuIFx0dTMyIG51bV9mcmFtZXM7XG4gXHR1MzIgZnJhbWVfaGVhZHJvb207XG4gXHR2b2lkICpidWZmZXI7XG5AQCAtMTU5LDYgJiM0MzsxNjQsNyBAQCBpbnQgaW5pdF9pZmFjZShzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqLCB0aHJlYWRfZnVuY190IGZ1bmNfcHRyKTtcbiBpbnQgeHNrX2NvbmZpZ3VyZV91bWVtKHN0cnVjdCBpZm9iamVjdCAqaWZvYmosIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtLCB2b2lkICpidWZmZXIsIHU2NCBzaXplKTtcbiBpbnQgeHNrX2NvbmZpZ3VyZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrLCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbSxcbiBcdFx0XHQgc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdCwgYm9vbCBzaGFyZWQpO1xuJiM0Mzt2b2lkIHhza19kZWxldGVfc29ja2V0KHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzayk7XG4gXG4gXG4gc3RydWN0IHBrdCB7XG5AQCAtMTc5LDYgJiM0MzsxODUsMTYgQEAgc3RydWN0IHBrdF9zdHJlYW0ge1xuIFx0Ym9vbCB2ZXJiYXRpbTtcbiB9O1xuIFxuJiM0MztzdHJ1Y3Qgc2hhcmVkX3VtZW1fbGVuX2N0eCB7XG4mIzQzO1x0dTMyIHNob3J0X2xlbjtcbiYjNDM7XHR1MzIgbG9uZ19sZW47XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3Qgc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3RfY3R4IHtcbiYjNDM7XHR1MzIgdG90YWxfcGt0cztcbiYjNDM7XHR1MzIgcGt0X2xlbjtcbiYjNDM7fTtcbiYjNDM7XG4gc3RhdGljIGlubGluZSBib29sIHBrdF9jb250aW51ZXModTMyIG9wdGlvbnMpXG4ge1xuIFx0cmV0dXJuIG9wdGlvbnMgXHUwMDI2IFhEUF9QS1RfQ09OVEQ7XG5AQCAtMjY4LDYgJiM0MzsyODQsMTAgQEAgaW50IHRlc3RhcHBfeGRwX21ldGFkYXRhKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuIGludCB0ZXN0YXBwX3hkcF9tZXRhZGF0YV9tYihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTtcbiBpbnQgdGVzdGFwcF94ZHBfcHJvZ19jbGVhbnVwKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuIGludCB0ZXN0YXBwX3hkcF9zaGFyZWRfdW1lbShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTtcbiYjNDM7aW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fNF9zb2NrZXRzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuJiM0MztpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XG4mIzQzO2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX3VuZXZlbl9kaXN0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuJiM0MztpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV91bmFsaWduZWQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XG4gXG4gdm9pZCAqd29ya2VyX3Rlc3RhcHBfdmFsaWRhdGVfcngodm9pZCAqYXJnKTtcbiB2b2lkICp3b3JrZXJfdGVzdGFwcF92YWxpZGF0ZV90eCh2b2lkICphcmcpO1xuQEAgLTI5MSw2ICYjNDM7MzExLDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdGVzdF9zcGVjIHRlc3RzW10gPSB7XG4gXHR7Lm5hbWUgPSBcJiMzNDtYRFBfUFJPR19DTEVBTlVQXCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF94ZHBfcHJvZ19jbGVhbnVwfSxcbiBcdHsubmFtZSA9IFwmIzM0O1hEUF9EUk9QX0hBTEZcJiMzNDssIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3hkcF9kcm9wfSxcbiBcdHsubmFtZSA9IFwmIzM0O1hEUF9TSEFSRURfVU1FTVwmIzM0OywgLnRlc3RfZnVuYyA9IHRlc3RhcHBfeGRwX3NoYXJlZF91bWVtfSxcbiYjNDM7XHR7Lm5hbWUgPSBcJiMzNDtTSEFSRURfVU1FTV80X1NPQ0tFVFNcJiMzNDssIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3NoYXJlZF91bWVtXzRfc29ja2V0c30sXG4mIzQzO1x0ey5uYW1lID0gXCYjMzQ7U0hBUkVEX1VNRU1fTEVOR1RIX0JBU0VEXCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWR9LFxuJiM0MztcdHsubmFtZSA9IFwmIzM0O1NIQVJFRF9VTUVNX1VORVZFTl9ESVNUXCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF9zaGFyZWRfdW1lbV91bmV2ZW5fZGlzdH0sXG4mIzQzO1x0ey5uYW1lID0gXCYjMzQ7U0hBUkVEX1VNRU1fVU5BTElHTkVEXCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF9zaGFyZWRfdW1lbV91bmFsaWduZWR9LFxuIFx0ey5uYW1lID0gXCYjMzQ7WERQX01FVEFEQVRBX0NPUFlcJiMzNDssIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3hkcF9tZXRhZGF0YX0sXG4gXHR7Lm5hbWUgPSBcJiMzNDtYRFBfTUVUQURBVEFfQ09QWV9NVUxUSV9CVUZGXCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF94ZHBfbWV0YWRhdGFfbWJ9LFxuIFx0ey5uYW1lID0gXCYjMzQ7QUxJR05FRF9JTlZfREVTQ19NVUxUSV9CVUZGXCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF9hbGlnbmVkX2ludl9kZXNjX21ifSxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveHNrX3hkcF9wcm9ncy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hza194ZHBfcHJvZ3MuY1xuaW5kZXggMDIzZDhiZWZkNGNhYi4uNTQzYjYxZGYzYTJiMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94c2tfeGRwX3Byb2dzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94c2tfeGRwX3Byb2dzLmNcbkBAIC0xMCw3ICYjNDM7MTAsNyBAQFxuIFxuIHN0cnVjdCB7XG4gXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1hTS01BUCk7XG4tXHRfX3VpbnQobWF4X2VudHJpZXMsIDIpO1xuJiM0MztcdF9fdWludChtYXhfZW50cmllcywgTUFYX1NPQ0tFVFMpO1xuIFx0X191aW50KGtleV9zaXplLCBzaXplb2YoaW50KSk7XG4gXHRfX3VpbnQodmFsdWVfc2l6ZSwgc2l6ZW9mKGludCkpO1xuIH0geHNrIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG5AQCAtNzUsNiAmIzQzOzc1LDIzIEBAIFNFQyhcJiMzNDt4ZHBcJiMzNDspIGludCB4c2tfeGRwX3NoYXJlZF91bWVtKHN0cnVjdCB4ZHBfbWQgKnhkcClcbiBcdHJldHVybiBicGZfcmVkaXJlY3RfbWFwKFx1MDAyNnhzaywgaWR4LCBYRFBfRFJPUCk7XG4gfVxuIFxuJiM0MztTRUMoXCYjMzQ7eGRwXCYjMzQ7KSBpbnQgeHNrX3hkcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQoc3RydWN0IHhkcF9tZCAqeGRwKVxuJiM0Mzt7XG4mIzQzO1x0dm9pZCAqZGF0YSA9ICh2b2lkICopKGxvbmcpeGRwLVx1MDAzZWRhdGE7XG4mIzQzO1x0dm9pZCAqZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKXhkcC1cdTAwM2VkYXRhX2VuZDtcbiYjNDM7XHRfX3UzMiBwa3RfbGVuID0gZGF0YV9lbmQgLSBkYXRhO1xuJiM0MztcbiYjNDM7XHQvKiBcbiYjNDM7XHQgKiBSb3V0ZSBwYWNrZXRzIGJ5IHRvdGFsIFhEUC12aXNpYmxlIHBhY2tldCBsZW5ndGggKGRhdGFfZW5kIC0gZGF0YSk6XG4mIzQzO1x0ICogLSBTb2NrZXQgMDogcGFja2V0cyBcdTAwM2M9IFNIQVJFRF9VTUVNX0xFTl9TUExJVCBieXRlc1xuJiM0MztcdCAqIC0gU29ja2V0IDE6IHBhY2tldHMgXHUwMDNlIFNIQVJFRF9VTUVNX0xFTl9TUExJVCBieXRlc1xuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwa3RfbGVuIFx1MDAzYz0gU0hBUkVEX1VNRU1fTEVOX1NQTElUKVxuJiM0MztcdFx0cmV0dXJuIGJwZl9yZWRpcmVjdF9tYXAoXHUwMDI2eHNrLCAwLCBYRFBfRFJPUCk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cmV0dXJuIGJwZl9yZWRpcmVjdF9tYXAoXHUwMDI2eHNrLCAxLCBYRFBfRFJPUCk7XG4mIzQzO31cbiYjNDM7XG4gU0VDKFwmIzM0O3hkcC5mcmFnc1wmIzM0OykgaW50IHhza194ZHBfYWRqdXN0X3RhaWwoc3RydWN0IHhkcF9tZCAqeGRwKVxuIHtcbiBcdF9fdTMyIGJ1ZmZfbGVuLCBjdXJyX2J1ZmZfbGVuO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2tfeGRwX2NvbW1vbi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza194ZHBfY29tbW9uLmhcbmluZGV4IDQ1ODEwZmY1NTJkYWUuLmJkOWI1ZGNmOGM4ZWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNrX3hkcF9jb21tb24uaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza194ZHBfY29tbW9uLmhcbkBAIC0zLDcgJiM0MzszLDggQEBcbiAjaWZuZGVmIFhTS19YRFBfQ09NTU9OX0hfXG4gI2RlZmluZSBYU0tfWERQX0NPTU1PTl9IX1xuIFxuLSNkZWZpbmUgTUFYX1NPQ0tFVFMgMlxuJiM0MzsjZGVmaW5lIE1BWF9TT0NLRVRTIDRcbiYjNDM7I2RlZmluZSBTSEFSRURfVU1FTV9MRU5fU1BMSVQgNjRcbiAjZGVmaW5lIFBLVF9IRFJfQUxJR04gKHNpemVvZihzdHJ1Y3QgZXRoaGRyKSAmIzQzOyAyKSAvKiBKdXN0IHRvIGFsaWduIHRoZSBkYXRhIGluIHRoZSBwYWNrZXQgKi9cbiBcbiBzdHJ1Y3QgeGRwX2luZm8ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2t4Y2VpdmVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNreGNlaXZlci5jXG5pbmRleCA3ZGFkODU1NmE3MjJlLi5lZDc3MTZiNjM3NTY3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza3hjZWl2ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza3hjZWl2ZXIuY1xuQEAgLTExNywxMiAmIzQzOzExNywxMyBAQCBzdGF0aWMgdm9pZCBfX2V4aXRfd2l0aF9lcnJvcihpbnQgZXJyb3IsIGNvbnN0IGNoYXIgKmZpbGUsIGNvbnN0IGNoYXIgKmZ1bmMsIGludFxuIFxuICNkZWZpbmUgZXhpdF93aXRoX2Vycm9yKGVycm9yKSBfX2V4aXRfd2l0aF9lcnJvcihlcnJvciwgX19GSUxFX18sIF9fZnVuY19fLCBfX0xJTkVfXylcbiBcbi1zdGF0aWMgYm9vbCBpZm9ial96Y19hdmFpbChzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0KVxuJiM0MztzdGF0aWMgYm9vbCBpZm9ial96Y19hdmFpbChzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqKVxuIHtcbiBcdHNpemVfdCB1bWVtX3N6ID0gREVGQVVMVF9VTUVNX0JVRkZFUlMgKiBYU0tfVU1FTV9fREVGQVVMVF9GUkFNRV9TSVpFO1xuIFx0aW50IG1tYXBfZmxhZ3MgPSBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMgfCBNQVBfTk9SRVNFUlZFO1xuLVx0c3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrO1xuLVx0c3RydWN0IHhza191bWVtX2luZm8gKnVtZW07XG4mIzQzO1x0c3RydWN0IHhza19zb2NrZXRfaW5mbyB4c2sgPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgeHNrX3VtZW1faW5mbyB1bWVtX2luZm8gPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbSA9IFx1MDAyNnVtZW1faW5mbztcbiBcdGJvb2wgemNfYXZhaWwgPSBmYWxzZTtcbiBcdHZvaWQgKmJ1ZnM7XG4gXHRpbnQgcmV0O1xuQEAgLTEzMSwzMiAmIzQzOzEzMiwyMiBAQCBzdGF0aWMgYm9vbCBpZm9ial96Y19hdmFpbChzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0KVxuIFx0aWYgKGJ1ZnMgPT0gTUFQX0ZBSUxFRClcbiBcdFx0ZXhpdF93aXRoX2Vycm9yKGVycm5vKTtcbiBcbi1cdHVtZW0gPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCB4c2tfdW1lbV9pbmZvKSk7XG4tXHRpZiAoIXVtZW0pIHtcbi1cdFx0bXVubWFwKGJ1ZnMsIHVtZW1fc3opO1xuLVx0XHRleGl0X3dpdGhfZXJyb3IoRU5PTUVNKTtcbi1cdH1cbiYjNDM7XHR1bWVtLVx1MDAzZW1tYXBfc2l6ZSA9IHVtZW1fc3o7XG4gXHR1bWVtLVx1MDAzZWZyYW1lX3NpemUgPSBYU0tfVU1FTV9fREVGQVVMVF9GUkFNRV9TSVpFO1xuLVx0cmV0ID0geHNrX2NvbmZpZ3VyZV91bWVtKGlmb2JqZWN0LCB1bWVtLCBidWZzLCB1bWVtX3N6KTtcbiYjNDM7XHRyZXQgPSB4c2tfY29uZmlndXJlX3VtZW0oaWZvYmosIHVtZW0sIGJ1ZnMsIHVtZW1fc3opO1xuIFx0aWYgKHJldClcbiBcdFx0ZXhpdF93aXRoX2Vycm9yKC1yZXQpO1xuIFxuLVx0eHNrID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvKSk7XG4tXHRpZiAoIXhzaylcbi1cdFx0Z290byBvdXQ7XG4tXHRpZm9iamVjdC1cdTAwM2ViaW5kX2ZsYWdzID0gWERQX1VTRV9ORUVEX1dBS0VVUCB8IFhEUF9aRVJPQ09QWTtcbi1cdGlmb2JqZWN0LVx1MDAzZXJ4X29uID0gdHJ1ZTtcbi1cdHhzay1cdTAwM2VyeHFzaXplID0gWFNLX1JJTkdfQ09OU19fREVGQVVMVF9OVU1fREVTQ1M7XG4tXHRyZXQgPSB4c2tfY29uZmlndXJlX3NvY2tldCh4c2ssIHVtZW0sIGlmb2JqZWN0LCBmYWxzZSk7XG4mIzQzO1x0aWZvYmotXHUwMDNlYmluZF9mbGFncyA9IFhEUF9VU0VfTkVFRF9XQUtFVVAgfCBYRFBfWkVST0NPUFk7XG4mIzQzO1x0aWZvYmotXHUwMDNlcnhfb24gPSB0cnVlO1xuJiM0MztcdHhzay5yeHFzaXplID0gWFNLX1JJTkdfQ09OU19fREVGQVVMVF9OVU1fREVTQ1M7XG4mIzQzO1x0cmV0ID0geHNrX2NvbmZpZ3VyZV9zb2NrZXQoXHUwMDI2eHNrLCB1bWVtLCBpZm9iaiwgZmFsc2UpO1xuIFx0aWYgKCFyZXQpXG4gXHRcdHpjX2F2YWlsID0gdHJ1ZTtcbiBcbi1cdHhza19zb2NrZXRfX2RlbGV0ZSh4c2stXHUwMDNleHNrKTtcbi1cdGZyZWUoeHNrKTtcbi1vdXQ6XG4tXHRtdW5tYXAodW1lbS1cdTAwM2VidWZmZXIsIHVtZW1fc3opO1xuLVx0eHNrX3VtZW1fX2RlbGV0ZSh1bWVtLVx1MDAzZXVtZW0pO1xuLVx0ZnJlZSh1bWVtKTtcbiYjNDM7XHQvKiBVc2UgdGhlIHNhbWUgcmVmY291bnQtYmFzZWQgdGVhcmRvd24gcGF0aCBmb3IgYm90aCBzdWNjZXNzIGFuZCBmYWlsdXJlLiAqL1xuJiM0MztcdHhza19kZWxldGVfc29ja2V0KFx1MDAyNnhzayk7XG4mIzQzO1xuIFx0cmV0dXJuIHpjX2F2YWlsO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjo1NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgc2VsZnRlc3RzICh1c2Vyc3BhY2UgdGVzdCBwcm9ncmFtcyBhbmQgdGVzdCBCUEYgcHJvZ3JhbXMpIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRmMjRjYjExY2MyNjE3ZmUyYTZmMjYyNDljNDQ4N2U2OTkzM2Y0YWYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyA3IDE2OjU3OjI2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmMKaW5kZXggNDc3YWVkYmIwMWJhZC4uY2NmZDllODQzNmE3YiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jCkBAIC0xMDEsNiAmIzQzOzEwMSw3IEBAIGludCB4c2tfY29uZmlndXJlX3VtZW0oc3RydWN0IGlmb2JqZWN0ICppZm9iaiwgc3RydWN0IHhza191bWVtX2luZm8gKnVtZW0sIHZvaWQKIAkJcmV0dXJuIHJldDsKIAogCXVtZW0tJmd0O2J1ZmZlciA9IGJ1ZmZlcjsKJiM0MzsJcmVmY291bnRfc2V0KCZhbXA7dW1lbS0mZ3Q7dXNlcnMsIDEpOwogCWlmIChpZm9iai0mZ3Q7c2hhcmVkX3VtZW0gJmFtcDsmYW1wOyBpZm9iai0mZ3Q7cnhfb24pIHsKIAkJdW1lbS0mZ3Q7YmFzZV9hZGRyID0gdW1lbV9zaXplKHVtZW0pOwogCQl1bWVtLSZndDtuZXh0X2J1ZmZlciA9IHVtZW1fc2l6ZSh1bWVtKTsKQEAgLTE1NCw2ICYjNDM7MTU1LDcgQEAgaW50IHhza19jb25maWd1cmVfc29ja2V0KHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzaywgc3RydWN0IHhza191bWVtX2luZm8gKnVtZW0KIAlzdHJ1Y3QgeHNrX3NvY2tldF9jb25maWcgY2ZnID0ge307CiAJc3RydWN0IHhza19yaW5nX2NvbnMgKnJ4cjsKIAlzdHJ1Y3QgeHNrX3JpbmdfcHJvZCAqdHhyOwomIzQzOwlpbnQgcmV0OwogCiAJeHNrLSZndDt1bWVtID0gdW1lbTsKIAljZmcucnhfc2l6ZSA9IHhzay0mZ3Q7cnhxc2l6ZTsKQEAgLTE3MCw3ICYjNDM7MTcyLDIxIEBAIGludCB4c2tfY29uZmlndXJlX3NvY2tldChzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2ssIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtCiAKIAl0eHIgPSBpZm9iamVjdC0mZ3Q7dHhfb24gPyAmYW1wO3hzay0mZ3Q7dHggOiBOVUxMOwogCXJ4ciA9IGlmb2JqZWN0LSZndDtyeF9vbiA/ICZhbXA7eHNrLSZndDtyeCA6IE5VTEw7Ci0JcmV0dXJuIHhza19zb2NrZXRfX2NyZWF0ZSgmYW1wO3hzay0mZ3Q7eHNrLCBpZm9iamVjdC0mZ3Q7aWZpbmRleCwgMCwgdW1lbS0mZ3Q7dW1lbSwgcnhyLCB0eHIsICZhbXA7Y2ZnKTsKJiM0MzsJcmV0ID0geHNrX3NvY2tldF9fY3JlYXRlKCZhbXA7eHNrLSZndDt4c2ssIGlmb2JqZWN0LSZndDtpZmluZGV4LCAwLCB1bWVtLSZndDt1bWVtLCByeHIsIHR4ciwgJmFtcDtjZmcpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlpZiAoc2hhcmVkKQomIzQzOwkJCS8qIFNoYXJlZCBzb2NrZXQgZmFpbGVkIGJlZm9yZSBhY3F1aXJpbmcgYSBVTUVNIHJlZmVyZW5jZS4gKi8KJiM0MzsJCQl4c2stJmd0O3VtZW0gPSBOVUxMOwomIzQzOwomIzQzOwkJLyogS2VlcCBmYWlsZWQgc29ja2V0IHN0YXRlIGluZXJ0IGZvciBsYXRlciBjbGVhbnVwIHBhdGhzLiAqLwomIzQzOwkJeHNrLSZndDt4c2sgPSBOVUxMOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoc2hhcmVkKQomIzQzOwkJcmVmY291bnRfaW5jKCZhbXA7dW1lbS0mZ3Q7dXNlcnMpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHNldF9yaW5nX3NpemUoc3RydWN0IGlmb2JqZWN0ICppZm9iaikKQEAgLTIwMyw2ICYjNDM7MjE5LDEyIEBAIGludCBod19yaW5nX3NpemVfcmVzZXQoc3RydWN0IGlmb2JqZWN0ICppZm9iaikKIHN0YXRpYyB2b2lkIF9fdGVzdF9zcGVjX2luaXQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9ial90eCwKIAkJCSAgICAgc3RydWN0IGlmb2JqZWN0ICppZm9ial9yeCkKIHsKJiM0MzsJLyoKJiM0MzsJICogS2VlcCB0aGUgc2FtZSBkZWZhdWx0IGFzIHhza3hjZWl2ZXIgc3RhcnR1cDogd2hlbiBUWCBhbmQgUlggc2hhcmUgdGhlIHNhbWUgbmV0ZGV2LAomIzQzOwkgKiBzaGFyZWQgVU1FTSBpcyB0aGUgYmFzZWxpbmUgbW9kZSBmb3IgdGhpcyB0ZXN0IGhhcm5lc3MuIEluZGl2aWR1YWwgdGVzdHMgY2FuIHN0aWxsCiYjNDM7CSAqIG92ZXJyaWRlIHRoaXMgYXMgbmVlZGVkLgomIzQzOwkgKi8KJiM0MzsJYm9vbCBzaGFyZWRfZGVmYXVsdCA9IGlmb2JqX3R4LSZndDtpZmluZGV4ID09IGlmb2JqX3J4LSZndDtpZmluZGV4OwogCXUzMiBpLCBqOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IE1BWF9JTlRFUkZBQ0VTOyBpJiM0MzsmIzQzOykgewpAQCAtMjE0LDYgJiM0MzsyMzYsNyBAQCBzdGF0aWMgdm9pZCBfX3Rlc3Rfc3BlY19pbml0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmpfdHgsCiAJCWlmb2JqLSZndDt1c2VfZmlsbF9yaW5nID0gdHJ1ZTsKIAkJaWZvYmotJmd0O3JlbGVhc2VfcnggPSB0cnVlOwogCQlpZm9iai0mZ3Q7dmFsaWRhdGlvbl9mdW5jID0gTlVMTDsKJiM0MzsJCWlmb2JqLSZndDtzaGFyZWRfdW1lbSA9IHNoYXJlZF9kZWZhdWx0OwogCQlpZm9iai0mZ3Q7dXNlX21ldGFkYXRhID0gZmFsc2U7CiAKIAkJaWYgKGkgPT0gMCkgewpAQCAtNTc0LDI2ICYjNDM7NTk3LDEyMiBAQCBzdGF0aWMgaW50IHBrdF9zdHJlYW1fcmVjZWl2ZV9oYWxmKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpCiAKIHN0YXRpYyBpbnQgcGt0X3N0cmVhbV9ldmVuX29kZF9zZXF1ZW5jZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KQogewomIzQzOwlzdHJ1Y3QgcGt0X3N0cmVhbSAqdHhfc3RyZWFtc1tNQVhfU09DS0VUU10gPSB7fTsKJiM0MzsJc3RydWN0IHBrdF9zdHJlYW0gKnJ4X3N0cmVhbXNbTUFYX1NPQ0tFVFNdID0ge307CiAJc3RydWN0IHBrdF9zdHJlYW0gKnBrdF9zdHJlYW07CiAJdTMyIGk7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgdGVzdC0mZ3Q7bmJfc29ja2V0czsgaSYjNDM7JiM0MzspIHsKIAkJcGt0X3N0cmVhbSA9IHRlc3QtJmd0O2lmb2JqX3R4LSZndDt4c2tfYXJyW2ldLnBrdF9zdHJlYW07Ci0JCXBrdF9zdHJlYW0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUocGt0X3N0cmVhbS0mZ3Q7bmJfcGt0cyAvIDIsCi0JCQkJCQkgICBwa3Rfc3RyZWFtLSZndDtwa3RzWzBdLmxlbiwgaSwgMik7Ci0JCWlmICghcGt0X3N0cmVhbSkKLQkJCXJldHVybiAtRU5PTUVNOwotCQl0ZXN0LSZndDtpZm9ial90eC0mZ3Q7eHNrX2FycltpXS5wa3Rfc3RyZWFtID0gcGt0X3N0cmVhbTsKJiM0MzsJCXR4X3N0cmVhbXNbaV0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUocGt0X3N0cmVhbS0mZ3Q7bmJfcGt0cyAvIDIsCiYjNDM7CQkJCQkJICAgICAgcGt0X3N0cmVhbS0mZ3Q7cGt0c1swXS5sZW4sIGksIDIpOwomIzQzOwkJaWYgKCF0eF9zdHJlYW1zW2ldKQomIzQzOwkJCWdvdG8gZXJyOwogCiAJCXBrdF9zdHJlYW0gPSB0ZXN0LSZndDtpZm9ial9yeC0mZ3Q7eHNrX2FycltpXS5wa3Rfc3RyZWFtOwotCQlwa3Rfc3RyZWFtID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tJmd0O25iX3BrdHMgLyAyLAotCQkJCQkJICAgcGt0X3N0cmVhbS0mZ3Q7cGt0c1swXS5sZW4sIGksIDIpOwotCQlpZiAoIXBrdF9zdHJlYW0pCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJdGVzdC0mZ3Q7aWZvYmpfcngtJmd0O3hza19hcnJbaV0ucGt0X3N0cmVhbSA9IHBrdF9zdHJlYW07CiYjNDM7CQlyeF9zdHJlYW1zW2ldID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tJmd0O25iX3BrdHMgLyAyLAomIzQzOwkJCQkJCSAgICAgIHBrdF9zdHJlYW0tJmd0O3BrdHNbMF0ubGVuLCBpLCAyKTsKJiM0MzsJCWlmICghcnhfc3RyZWFtc1tpXSkKJiM0MzsJCQlnb3RvIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdGVzdC0mZ3Q7bmJfc29ja2V0czsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXRlc3QtJmd0O2lmb2JqX3R4LSZndDt4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSB0eF9zdHJlYW1zW2ldOwomIzQzOwkJdGVzdC0mZ3Q7aWZvYmpfcngtJmd0O3hza19hcnJbaV0ucGt0X3N0cmVhbSA9IHJ4X3N0cmVhbXNbaV07CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyOgomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdGVzdC0mZ3Q7bmJfc29ja2V0czsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICh0eF9zdHJlYW1zW2ldKQomIzQzOwkJCXBrdF9zdHJlYW1fZGVsZXRlKHR4X3N0cmVhbXNbaV0pOwomIzQzOwkJaWYgKHJ4X3N0cmVhbXNbaV0pCiYjNDM7CQkJcGt0X3N0cmVhbV9kZWxldGUocnhfc3RyZWFtc1tpXSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIC1FTk9NRU07CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGt0X3N0cmVhbV9sZW5fc2VxKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHUzMiBzaG9ydF9sZW4sIHUzMiBsb25nX2xlbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwa3Rfc3RyZWFtICp0eF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9OwomIzQzOwlzdHJ1Y3QgcGt0X3N0cmVhbSAqcnhfc3RyZWFtc1tNQVhfU09DS0VUU10gPSB7fTsKJiM0MzsJc3RydWN0IHBrdF9zdHJlYW0gKnBrdF9zdHJlYW07CiYjNDM7CXUzMiBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdGVzdC0mZ3Q7bmJfc29ja2V0czsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXUzMiBwa3RfbGVuID0gaSA/IGxvbmdfbGVuIDogc2hvcnRfbGVuOwomIzQzOwomIzQzOwkJcGt0X3N0cmVhbSA9IHRlc3QtJmd0O2lmb2JqX3R4LSZndDt4c2tfYXJyW2ldLnBrdF9zdHJlYW07CiYjNDM7CQl0eF9zdHJlYW1zW2ldID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tJmd0O25iX3BrdHMgLyAyLCBwa3RfbGVuLCBpLCAyKTsKJiM0MzsJCWlmICghdHhfc3RyZWFtc1tpXSkKJiM0MzsJCQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJCXBrdF9zdHJlYW0gPSB0ZXN0LSZndDtpZm9ial9yeC0mZ3Q7eHNrX2FycltpXS5wa3Rfc3RyZWFtOwomIzQzOwkJcnhfc3RyZWFtc1tpXSA9IF9fcGt0X3N0cmVhbV9nZW5lcmF0ZShwa3Rfc3RyZWFtLSZndDtuYl9wa3RzIC8gMiwgcGt0X2xlbiwgaSwgMik7CiYjNDM7CQlpZiAoIXJ4X3N0cmVhbXNbaV0pCiYjNDM7CQkJZ290byBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHRlc3QtJmd0O25iX3NvY2tldHM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl0ZXN0LSZndDtpZm9ial90eC0mZ3Q7eHNrX2FycltpXS5wa3Rfc3RyZWFtID0gdHhfc3RyZWFtc1tpXTsKJiM0MzsJCXRlc3QtJmd0O2lmb2JqX3J4LSZndDt4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSByeF9zdHJlYW1zW2ldOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2VycjoKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHRlc3QtJmd0O25iX3NvY2tldHM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAodHhfc3RyZWFtc1tpXSkKJiM0MzsJCQlwa3Rfc3RyZWFtX2RlbGV0ZSh0eF9zdHJlYW1zW2ldKTsKJiM0MzsJCWlmIChyeF9zdHJlYW1zW2ldKQomIzQzOwkJCXBrdF9zdHJlYW1fZGVsZXRlKHJ4X3N0cmVhbXNbaV0pOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAtRU5PTUVNOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBrdF9zdHJlYW1fd2VpZ2h0ZWRfdW5ldmVuX2Rpc3Rfc2VxdWVuY2Uoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgdTMyIHRvdGFsX3BrdHMsCiYjNDM7CQkJCQkJICAgIHUzMiBwa3RfbGVuKQomIzQzO3sKJiM0MzsJc3RydWN0IHBrdF9zdHJlYW0gKnR4X3N0cmVhbXNbTUFYX1NPQ0tFVFNdID0ge307CiYjNDM7CXN0cnVjdCBwa3Rfc3RyZWFtICpyeF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9OwomIzQzOwl1MzIgaSwgcGt0c19zb2NrMDsKJiM0MzsKJiM0MzsJaWYgKHRlc3QtJmd0O25iX3NvY2tldHMgJmx0OyAyIHx8IHRvdGFsX3BrdHMgJmx0OyA0KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXBrdHNfc29jazAgPSB0b3RhbF9wa3RzIC8gNDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHRlc3QtJmd0O25iX3NvY2tldHM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl1MzIgbmJfcGt0cyA9IChpID09IDApID8gcGt0c19zb2NrMCA6ICh0b3RhbF9wa3RzIC0gcGt0c19zb2NrMCk7CiYjNDM7CiYjNDM7CQl0eF9zdHJlYW1zW2ldID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKG5iX3BrdHMsIHBrdF9sZW4sIGksIDIpOwomIzQzOwkJaWYgKCF0eF9zdHJlYW1zW2ldKQomIzQzOwkJCWdvdG8gZXJyOwomIzQzOwomIzQzOwkJcnhfc3RyZWFtc1tpXSA9IF9fcGt0X3N0cmVhbV9nZW5lcmF0ZShuYl9wa3RzLCBwa3RfbGVuLCBpLCAyKTsKJiM0MzsJCWlmICghcnhfc3RyZWFtc1tpXSkKJiM0MzsJCQlnb3RvIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdGVzdC0mZ3Q7bmJfc29ja2V0czsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXRlc3QtJmd0O2lmb2JqX3R4LSZndDt4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSB0eF9zdHJlYW1zW2ldOwomIzQzOwkJdGVzdC0mZ3Q7aWZvYmpfcngtJmd0O3hza19hcnJbaV0ucGt0X3N0cmVhbSA9IHJ4X3N0cmVhbXNbaV07CiAJfQogCiAJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyOgomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdGVzdC0mZ3Q7bmJfc29ja2V0czsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICh0eF9zdHJlYW1zW2ldKQomIzQzOwkJCXBrdF9zdHJlYW1fZGVsZXRlKHR4X3N0cmVhbXNbaV0pOwomIzQzOwkJaWYgKHJ4X3N0cmVhbXNbaV0pCiYjNDM7CQkJcGt0X3N0cmVhbV9kZWxldGUocnhfc3RyZWFtc1tpXSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIC1FTk9NRU07CiB9CiAKIHN0YXRpYyB2b2lkIHJlbGVhc2VfZXZlbl9vZGRfc2VxdWVuY2Uoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCkKQEAgLTE0NjgsNiAmIzQzOzE1ODcsMjggQEAgc3RhdGljIGludCB2YWxpZGF0ZV90eF9pbnZhbGlkX2Rlc2NzKHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QpCiAJcmV0dXJuIFRFU1RfUEFTUzsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHhza19kZWxldGVfc29ja2V0X2JhdGNoKHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QsIHUzMiBjb3VudCkKJiM0Mzt7CiYjNDM7CXUzMiBpOwomIzQzOwomIzQzOwlpZiAoIWlmb2JqZWN0KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmb3IgKGkgPSBjb3VudDsgaSAmZ3Q7IDA7IGktLSkKJiM0MzsJCXhza19kZWxldGVfc29ja2V0KCZhbXA7aWZvYmplY3QtJmd0O3hza19hcnJbaSAtIDFdKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgeHNrX2NvbmZpZ3VyZV9yb2xsYmFjayhzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0LCBpbnQgbGFzdCkKJiM0Mzt7CiYjNDM7CXUzMiBjb3VudDsKJiM0MzsKJiM0MzsJaWYgKCFpZm9iamVjdCB8fCBsYXN0ICZsdDsgMCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJY291bnQgPSBsYXN0ICYjNDM7IDE7CiYjNDM7CXhza19kZWxldGVfc29ja2V0X2JhdGNoKGlmb2JqZWN0LCBjb3VudCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCB4c2tfY29uZmlndXJlKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QsCiAJCQkgIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtLCBib29sIHR4KQogewpAQCAtMTQ4NCwxNCAmIzQzOzE2MjUsMTggQEAgc3RhdGljIGludCB4c2tfY29uZmlndXJlKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QsCiAJCQkJYnJlYWs7CiAKIAkJCS8qIFJldHJ5IGlmIGl0IGZhaWxzIGFzIHhza19zb2NrZXRfX2NyZWF0ZSgpIGlzIGFzeW5jaHJvbm91cyAqLwotCQkJaWYgKGN0ciAmZ3Q7PSBTT0NLX1JFQ09ORl9DVFIpCiYjNDM7CQkJaWYgKGN0ciAmZ3Q7PSBTT0NLX1JFQ09ORl9DVFIpIHsKJiM0MzsJCQkJeHNrX2NvbmZpZ3VyZV9yb2xsYmFjayhpZm9iamVjdCwgaSk7CiAJCQkJcmV0dXJuIHJldDsKJiM0MzsJCQl9CiAJCQl1c2xlZXAoVVNMRUVQX01BWCk7CiAJCX0KIAkJaWYgKGlmb2JqZWN0LSZndDtidXN5X3BvbGwpIHsKIAkJCXJldCA9IGVuYWJsZV9idXN5X3BvbGwoJmFtcDtpZm9iamVjdC0mZ3Q7eHNrX2FycltpXSk7Ci0JCQlpZiAocmV0KQomIzQzOwkJCWlmIChyZXQpIHsKJiM0MzsJCQkJeHNrX2NvbmZpZ3VyZV9yb2xsYmFjayhpZm9iamVjdCwgaSk7CiAJCQkJcmV0dXJuIHJldDsKJiM0MzsJCQl9CiAJCX0KIAl9CiAKQEAgLTE3MDIsMTIgJiM0MzsxODQ3LDYwIEBAIHZvaWQgKndvcmtlcl90ZXN0YXBwX3ZhbGlkYXRlX3J4KHZvaWQgKmFyZykKIAlwdGhyZWFkX2V4aXQoTlVMTCk7CiB9CiAKLXN0YXRpYyB2b2lkIHRlc3RhcHBfY2xlYW5feHNrX3VtZW0oc3RydWN0IGlmb2JqZWN0ICppZm9iaikKJiM0Mzt2b2lkIHhza19kZWxldGVfc29ja2V0KHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzaykKIHsKLQlzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbSA9IGlmb2JqLSZndDt4c2stJmd0O3VtZW07CiYjNDM7CXN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtOwogCi0JeHNrX3VtZW1fX2RlbGV0ZSh1bWVtLSZndDt1bWVtKTsKLQltdW5tYXAodW1lbS0mZ3Q7YnVmZmVyLCB1bWVtLSZndDttbWFwX3NpemUpOwomIzQzOwkvKgomIzQzOwkgKiBDYWxsZXJzIG11c3Qgc2VyaWFsaXplIHRlYXJkb3duIGZvciBhIGdpdmVuIHhzay91bWVtIHBhaXIuCiYjNDM7CSAqIFRoaXMgaGVscGVyIGRvZXMgcmVmY291bnQtYmFzZWQgbGlmZXRpbWUgbWFuYWdlbWVudCBvbmx5LgomIzQzOwkgKi8KJiM0MzsJaWYgKCF4c2spCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXVtZW0gPSB4c2stJmd0O3VtZW07CiYjNDM7CWlmICghdW1lbSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyogRGVsZXRlIHRoZSBzb2NrZXQgaGFuZGxlIHdoZW4gYXZhaWxhYmxlLCB0aGVuIGRyb3AgVU1FTSByZWZlcmVuY2UuICovCiYjNDM7CWlmICh4c2stJmd0O3hzaykKJiM0MzsJCXhza19zb2NrZXRfX2RlbGV0ZSh4c2stJmd0O3hzayk7CiYjNDM7CXhzay0mZ3Q7eHNrID0gTlVMTDsKJiM0MzsKJiM0MzsJLyogTWFyayB0aGlzIHNvY2tldCBhcyBjbGVhbmVkIHVwIHRvIHByZXZlbnQgZG91YmxlLWRlY3JlbWVudCAqLwomIzQzOwl4c2stJmd0O3VtZW0gPSBOVUxMOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUZWFyZG93biBtYXkgd2FsayB0aGUgZnVsbCB4c2sgYXJyYXksIGluY2x1ZGluZyBzbG90cyB0aGF0IG5ldmVyIGNvbXBsZXRlZCBzZXR1cCBidXQKJiM0MzsJICogc3RpbGwgY2FycnkgYSBwcmVpbml0aWFsaXplZCB1bWVtIHBvaW50ZXIuIEFmdGVyIGEgcGFydGlhbC1zZXR1cCByb2xsYmFjaywgdGhlIGxhc3QgVU1FTQomIzQzOwkgKiByZWYgbWF5IGFscmVhZHkgYmUgZHJvcHBlZC4KJiM0MzsJICovCiYjNDM7CWlmICghcmVmY291bnRfcmVhZCgmYW1wO3VtZW0tJmd0O3VzZXJzKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyogQWx3YXlzIGRlY3JlbWVudCByZWZjb3VudCBmb3IgdGhpcyBzb2NrZXQmIzM5O3MgVU1FTSByZWZlcmVuY2UgKi8KJiM0MzsJaWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO3VtZW0tJmd0O3VzZXJzKSkgewomIzQzOwkJaWYgKHVtZW0tJmd0O3VtZW0pIHsKJiM0MzsJCQlpbnQgZXJyID0geHNrX3VtZW1fX2RlbGV0ZSh1bWVtLSZndDt1bWVtKTsKJiM0MzsKJiM0MzsJCQlpZiAoZXJyKQomIzQzOwkJCQlrc2Z0X3ByaW50X21zZygmIzM0O3hza191bWVtX19kZWxldGUgZmFpbGVkOiAlZCAodW1lbSBzdGlsbCBidXN5PylcbiYjMzQ7LAomIzQzOwkJCQkJICAgICAgIGVycik7CiYjNDM7CQl9CiYjNDM7CQlpZiAodW1lbS0mZ3Q7YnVmZmVyICZhbXA7JmFtcDsgdW1lbS0mZ3Q7bW1hcF9zaXplKQomIzQzOwkJCW11bm1hcCh1bWVtLSZndDtidWZmZXIsIHVtZW0tJmd0O21tYXBfc2l6ZSk7CiYjNDM7CQl1bWVtLSZndDt1bWVtID0gTlVMTDsKJiM0MzsJCXVtZW0tJmd0O2J1ZmZlciA9IE5VTEw7CiYjNDM7CQl1bWVtLSZndDttbWFwX3NpemUgPSAwOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iaikKJiM0Mzt7CiYjNDM7CWlmICghaWZvYmopCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXhza19kZWxldGVfc29ja2V0X2JhdGNoKGlmb2JqLCB0ZXN0LSZndDtuYl9zb2NrZXRzKTsKIH0KIAogc3RhdGljIGJvb2wgeGRwX3Byb2dfY2hhbmdlZF9yeChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KQpAQCAtMTc2OSwyNyAmIzQzOzE5NjIsNiBAQCBzdGF0aWMgaW50IHhza19hdHRhY2hfeGRwX3Byb2dzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmpfcgogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIGNsZWFuX3NvY2tldHMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iaikKLXsKLQl1MzIgaTsKLQotCWlmICghaWZvYmogfHwgIXRlc3QpCi0JCXJldHVybjsKLQotCWZvciAoaSA9IDA7IGkgJmx0OyB0ZXN0LSZndDtuYl9zb2NrZXRzOyBpJiM0MzsmIzQzOykKLQkJeHNrX3NvY2tldF9fZGVsZXRlKGlmb2JqLSZndDt4c2tfYXJyW2ldLnhzayk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNsZWFuX3VtZW0oc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iajEsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmoyKQotewotCWlmICghaWZvYmoxKQotCQlyZXR1cm47Ci0KLQl0ZXN0YXBwX2NsZWFuX3hza191bWVtKGlmb2JqMSk7Ci0JaWYgKGlmb2JqMiAmYW1wOyZhbXA7ICFpZm9iajItJmd0O3NoYXJlZF91bWVtKQotCQl0ZXN0YXBwX2NsZWFuX3hza191bWVtKGlmb2JqMik7Ci19Ci0KIHN0YXRpYyBpbnQgX190ZXN0YXBwX3ZhbGlkYXRlX3RyYWZmaWMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iajEsCiAJCQkJICAgICAgc3RydWN0IGlmb2JqZWN0ICppZm9iajIpCiB7CkBAIC0xODQxLDggJiM0MzsyMDEzLDcgQEAgc3RhdGljIGludCBfX3Rlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmkKIAkJaWYgKHB0aHJlYWRfYmFycmllcl9kZXN0cm95KCZhbXA7YmFycikpIHsKIAkJCXRlc3QtJmd0O3VzZV9iYXJyaWVyID0gZmFsc2U7CiAJCQlwdGhyZWFkX2pvaW4odDAsIE5VTEwpOwotCQkJY2xlYW5fc29ja2V0cyh0ZXN0LCBpZm9iajEpOwotCQkJY2xlYW5fdW1lbSh0ZXN0LCBpZm9iajEsIE5VTEwpOwomIzQzOwkJCXhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgaWZvYmoxKTsKIAkJCXJldHVybiBURVNUX0ZBSUxVUkU7CiAJCX0KIAl9CkBAIC0xODU2LDkgJiM0MzsyMDI3LDggQEAgc3RhdGljIGludCBfX3Rlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmkKIAlwdGhyZWFkX2pvaW4odDAsIE5VTEwpOwogCiAJaWYgKHRlc3QtJmd0O3RvdGFsX3N0ZXBzID09IHRlc3QtJmd0O2N1cnJlbnRfc3RlcCB8fCB0ZXN0LSZndDtmYWlsKSB7Ci0JCWNsZWFuX3NvY2tldHModGVzdCwgaWZvYmoxKTsKLQkJY2xlYW5fc29ja2V0cyh0ZXN0LCBpZm9iajIpOwotCQljbGVhbl91bWVtKHRlc3QsIGlmb2JqMSwgaWZvYmoyKTsKJiM0MzsJCXhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgaWZvYmoyKTsKJiM0MzsJCXhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgaWZvYmoxKTsKIAl9CiAKIAlpZiAodGVzdC0mZ3Q7ZmFpbCkKQEAgLTE5NjcsOSAmIzQzOzIxMzcsOCBAQCBpbnQgdGVzdGFwcF94ZHBfcHJvZ19jbGVhbnVwKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpCiAJCXJldHVybiBURVNUX0ZBSUxVUkU7CiAKIAlpZiAoc3dhcF94c2tfcmVzb3VyY2VzKHRlc3QpKSB7Ci0JCWNsZWFuX3NvY2tldHModGVzdCwgdGVzdC0mZ3Q7aWZvYmpfcngpOwotCQljbGVhbl9zb2NrZXRzKHRlc3QsIHRlc3QtJmd0O2lmb2JqX3R4KTsKLQkJY2xlYW5fdW1lbSh0ZXN0LCB0ZXN0LSZndDtpZm9ial9yeCwgdGVzdC0mZ3Q7aWZvYmpfdHgpOwomIzQzOwkJeHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCB0ZXN0LSZndDtpZm9ial90eCk7CiYjNDM7CQl4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIHRlc3QtJmd0O2lmb2JqX3J4KTsKIAkJcmV0dXJuIFRFU1RfRkFJTFVSRTsKIAl9CiAKQEAgLTIyMjQsNiAmIzQzOzIzOTMsMTY4IEBAIGludCB0ZXN0YXBwX3hkcF9zaGFyZWRfdW1lbShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KQogCXJldHVybiByZXQ7CiB9CiAKJiM0MztzdGF0aWMgaW50IHNoYXJlZF91bWVtX3Rlc3RfcHJlcGFyZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KQomIzQzO3sKJiM0MzsJdTMyIGk7CiYjNDM7CiYjNDM7CWlmICh0ZXN0LSZndDtuYl9zb2NrZXRzICZndDsgTUFYX1NPQ0tFVFMpIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7RVJST1I6IFslc10gaW52YWxpZCBzb2NrZXQgY291bnQgJXVcbiYjMzQ7LCBfX2Z1bmNfXywgdGVzdC0mZ3Q7bmJfc29ja2V0cyk7CiYjNDM7CQlyZXR1cm4gVEVTVF9GQUlMVVJFOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB0ZXN0LSZndDtuYl9zb2NrZXRzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKCF0ZXN0LSZndDtpZm9ial9yeC0mZ3Q7eHNrX2FycltpXS5wa3Rfc3RyZWFtIHx8CiYjNDM7CQkgICAgIXRlc3QtJmd0O2lmb2JqX3R4LSZndDt4c2tfYXJyW2ldLnBrdF9zdHJlYW0pIHsKJiM0MzsJCQlrc2Z0X3ByaW50X21zZygmIzM0O0VSUk9SOiBbJXNdIG1pc3Npbmcgc3RyZWFtIGZvciBzb2NrZXQgJXVcbiYjMzQ7LCBfX2Z1bmNfXywgaSk7CiYjNDM7CQkJcmV0dXJuIFRFU1RfRkFJTFVSRTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gVEVTVF9QQVNTOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHNoYXJlZF91bWVtX3NlcV9ldmVuX29kZChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCB2b2lkICpjdHgpCiYjNDM7ewomIzQzOwkodm9pZCljdHg7CiYjNDM7CiYjNDM7CXJldHVybiBwa3Rfc3RyZWFtX2V2ZW5fb2RkX3NlcXVlbmNlKHRlc3QpID8gVEVTVF9GQUlMVVJFIDogVEVTVF9QQVNTOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHNoYXJlZF91bWVtX3NlcV9sZW4oc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgY29uc3Qgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHNoYXJlZF91bWVtX2xlbl9jdHggKmNmZyA9IGN0eDsKJiM0MzsKJiM0MzsJcmV0dXJuIHBrdF9zdHJlYW1fbGVuX3NlcSh0ZXN0LCBjZmctJmd0O3Nob3J0X2xlbiwgY2ZnLSZndDtsb25nX2xlbikgPyBURVNUX0ZBSUxVUkUgOiBURVNUX1BBU1M7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgc2hhcmVkX3VtZW1fc2VxX3VuZXZlbl9kaXN0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIGNvbnN0IHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBzaGFyZWRfdW1lbV91bmV2ZW5fZGlzdF9jdHggKmNmZyA9IGN0eDsKJiM0MzsKJiM0MzsJcmV0dXJuIHBrdF9zdHJlYW1fd2VpZ2h0ZWRfdW5ldmVuX2Rpc3Rfc2VxdWVuY2UodGVzdCwgY2ZnLSZndDt0b3RhbF9wa3RzLAomIzQzOwkJCQkJCSAgICAgIGNmZy0mZ3Q7cGt0X2xlbikgPyBURVNUX0ZBSUxVUkUgOiBURVNUX1BBU1M7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgc2hhcmVkX3VtZW1fcG9zdF91bmV2ZW5fZGlzdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBpbnQgcmV0LCBjb25zdCB2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGt0X3N0cmVhbSAqdHhfc3RyZWFtXzAsICp0eF9zdHJlYW1fMTsKJiM0MzsJc3RydWN0IHBrdF9zdHJlYW0gKnJ4X3N0cmVhbV8wLCAqcnhfc3RyZWFtXzE7CiYjNDM7CiYjNDM7CSh2b2lkKWN0eDsKJiM0MzsKJiM0MzsJdHhfc3RyZWFtXzAgPSB0ZXN0LSZndDtpZm9ial90eC0mZ3Q7eHNrX2FyclswXS5wa3Rfc3RyZWFtOwomIzQzOwl0eF9zdHJlYW1fMSA9IHRlc3QtJmd0O2lmb2JqX3R4LSZndDt4c2tfYXJyWzFdLnBrdF9zdHJlYW07CiYjNDM7CXJ4X3N0cmVhbV8wID0gdGVzdC0mZ3Q7aWZvYmpfcngtJmd0O3hza19hcnJbMF0ucGt0X3N0cmVhbTsKJiM0MzsJcnhfc3RyZWFtXzEgPSB0ZXN0LSZndDtpZm9ial9yeC0mZ3Q7eHNrX2FyclsxXS5wa3Rfc3RyZWFtOwomIzQzOwomIzQzOwlpZiAodHhfc3RyZWFtXzEtJmd0O25iX3ZhbGlkX2VudHJpZXMgJmx0Oz0gdHhfc3RyZWFtXzAtJmd0O25iX3ZhbGlkX2VudHJpZXMpCiYjNDM7CQlyZXR1cm4gVEVTVF9GQUlMVVJFOwomIzQzOwomIzQzOwlpZiAoIXJldCAmYW1wOyZhbXA7IHJ4X3N0cmVhbV8xLSZndDtuYl9yeF9wa3RzICZsdDs9IHJ4X3N0cmVhbV8wLSZndDtuYl9yeF9wa3RzKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O0VSUk9SOiBzb2NrZXQxIHJ4X3BrdHMgKCV1KSBub3QgZ3JlYXRlciB0aGFuIHNvY2tldDAgKCV1KVxuJiMzNDssCiYjNDM7CQkJICAgICAgIHJ4X3N0cmVhbV8xLSZndDtuYl9yeF9wa3RzLCByeF9zdHJlYW1fMC0mZ3Q7bmJfcnhfcGt0cyk7CiYjNDM7CQlyZXQgPSBURVNUX0ZBSUxVUkU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydW5fc2hhcmVkX3VtZW1fdGVzdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnhkcF9wcm9nX3J4LAomIzQzOwkJCQlzdHJ1Y3QgYnBmX3Byb2dyYW0gKnhkcF9wcm9nX3R4LCBzdHJ1Y3QgYnBmX21hcCAqeHNrbWFwX3J4LAomIzQzOwkJCQlzdHJ1Y3QgYnBmX21hcCAqeHNrbWFwX3R4LCB1MzIgbmJfc29ja2V0cywKJiM0MzsJCQkJc2hhcmVkX3VtZW1fc2VxX2ZuIHNlcV9mbiwgc2hhcmVkX3VtZW1fcG9zdF9mbiBwb3N0X2ZuLAomIzQzOwkJCQljb25zdCB2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwl0ZXN0LSZndDt0b3RhbF9zdGVwcyA9IDE7CiYjNDM7CXRlc3QtJmd0O25iX3NvY2tldHMgPSBuYl9zb2NrZXRzOwomIzQzOwomIzQzOwl0ZXN0X3NwZWNfc2V0X3hkcF9wcm9nKHRlc3QsIHhkcF9wcm9nX3J4LCB4ZHBfcHJvZ190eCwgeHNrbWFwX3J4LCB4c2ttYXBfdHgpOwomIzQzOwomIzQzOwlyZXQgPSBzaGFyZWRfdW1lbV90ZXN0X3ByZXBhcmUodGVzdCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBzZXFfZm4odGVzdCwgY3R4KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHRlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyh0ZXN0KTsKJiM0MzsJaWYgKHBvc3RfZm4pCiYjNDM7CQlyZXQgPSBwb3N0X2ZuKHRlc3QsIHJldCwgY3R4KTsKJiM0MzsKJiM0MzsJcmVsZWFzZV9ldmVuX29kZF9zZXF1ZW5jZSh0ZXN0KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fNF9zb2NrZXRzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF9yeCA9IHRlc3QtJmd0O2lmb2JqX3J4LSZndDt4ZHBfcHJvZ3M7CiYjNDM7CXN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3R4ID0gdGVzdC0mZ3Q7aWZvYmpfdHgtJmd0O3hkcF9wcm9nczsKJiM0MzsKJiM0MzsJcmV0dXJuIHJ1bl9zaGFyZWRfdW1lbV90ZXN0KHRlc3QsIHNrZWxfcngtJmd0O3Byb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sCiYjNDM7CQkJCSAgICBza2VsX3R4LSZndDtwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLCBza2VsX3J4LSZndDttYXBzLnhzaywKJiM0MzsJCQkJICAgIHNrZWxfdHgtJmd0O21hcHMueHNrLCA0LCBzaGFyZWRfdW1lbV9zZXFfZXZlbl9vZGQsIE5VTEwsIE5VTEwpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3J4ID0gdGVzdC0mZ3Q7aWZvYmpfcngtJmd0O3hkcF9wcm9nczsKJiM0MzsJc3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfdHggPSB0ZXN0LSZndDtpZm9ial90eC0mZ3Q7eGRwX3Byb2dzOwomIzQzOwljb25zdCBzdHJ1Y3Qgc2hhcmVkX3VtZW1fbGVuX2N0eCBsZW5fY3R4ID0gewomIzQzOwkJLnNob3J0X2xlbiA9IE1JTl9QS1RfU0laRSwKJiM0MzsJCS5sb25nX2xlbiA9IE1JTl9QS1RfU0laRSAqIDIsCiYjNDM7CX07CiYjNDM7CiYjNDM7CXJldHVybiBydW5fc2hhcmVkX3VtZW1fdGVzdCh0ZXN0LCBza2VsX3J4LSZndDtwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtX2xlbmd0aF9iYXNlZCwKJiM0MzsJCQkJICAgIHNrZWxfdHgtJmd0O3Byb2dzLnhza194ZHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkLAomIzQzOwkJCQkgICAgc2tlbF9yeC0mZ3Q7bWFwcy54c2ssIHNrZWxfdHgtJmd0O21hcHMueHNrLCAyLCBzaGFyZWRfdW1lbV9zZXFfbGVuLAomIzQzOwkJCQkgICAgTlVMTCwgJmFtcDtsZW5fY3R4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3Qoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3J4ID0gdGVzdC0mZ3Q7aWZvYmpfcngtJmd0O3hkcF9wcm9nczsKJiM0MzsJc3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfdHggPSB0ZXN0LSZndDtpZm9ial90eC0mZ3Q7eGRwX3Byb2dzOwomIzQzOwljb25zdCBzdHJ1Y3Qgc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3RfY3R4IHVuZXZlbl9kaXN0X2N0eCA9IHsKJiM0MzsJCS50b3RhbF9wa3RzID0gREVGQVVMVF9QS1RfQ05UICogNCwKJiM0MzsJCS5wa3RfbGVuID0gTUlOX1BLVF9TSVpFLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gcnVuX3NoYXJlZF91bWVtX3Rlc3QodGVzdCwgc2tlbF9yeC0mZ3Q7cHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSwKJiM0MzsJCQkJICAgIHNrZWxfdHgtJmd0O3Byb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sIHNrZWxfcngtJmd0O21hcHMueHNrLAomIzQzOwkJCQkgICAgc2tlbF90eC0mZ3Q7bWFwcy54c2ssIDIsIHNoYXJlZF91bWVtX3NlcV91bmV2ZW5fZGlzdCwKJiM0MzsJCQkJICAgIHNoYXJlZF91bWVtX3Bvc3RfdW5ldmVuX2Rpc3QsICZhbXA7dW5ldmVuX2Rpc3RfY3R4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5hbGlnbmVkKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF9yeCA9IHRlc3QtJmd0O2lmb2JqX3J4LSZndDt4ZHBfcHJvZ3M7CiYjNDM7CXN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3R4ID0gdGVzdC0mZ3Q7aWZvYmpfdHgtJmd0O3hkcF9wcm9nczsKJiM0MzsJc3RydWN0IHhza191bWVtX2luZm8gKnR4X3VtZW0gPSB0ZXN0LSZndDtpZm9ial90eCAmYW1wOyZhbXA7IHRlc3QtJmd0O2lmb2JqX3R4LSZndDt4c2sgPwomIzQzOwkJdGVzdC0mZ3Q7aWZvYmpfdHgtJmd0O3hzay0mZ3Q7dW1lbSA6IE5VTEw7CiYjNDM7CXN0cnVjdCB4c2tfdW1lbV9pbmZvICpyeF91bWVtID0gdGVzdC0mZ3Q7aWZvYmpfcnggJmFtcDsmYW1wOyB0ZXN0LSZndDtpZm9ial9yeC0mZ3Q7eHNrID8KJiM0MzsJCXRlc3QtJmd0O2lmb2JqX3J4LSZndDt4c2stJmd0O3VtZW0gOiBOVUxMOwomIzQzOwlib29sIHR4X3VuYWxpZ25lZCA9IHR4X3VtZW0gPyB0eF91bWVtLSZndDt1bmFsaWduZWRfbW9kZSA6IGZhbHNlOwomIzQzOwlib29sIHJ4X3VuYWxpZ25lZCA9IHJ4X3VtZW0gPyByeF91bWVtLSZndDt1bmFsaWduZWRfbW9kZSA6IGZhbHNlOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwl0ZXN0X3NwZWNfc2V0X3VuYWxpZ25lZCh0ZXN0KTsKJiM0MzsKJiM0MzsJcmV0ID0gcnVuX3NoYXJlZF91bWVtX3Rlc3QodGVzdCwgc2tlbF9yeC0mZ3Q7cHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSwKJiM0MzsJCQkJICAgc2tlbF90eC0mZ3Q7cHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSwgc2tlbF9yeC0mZ3Q7bWFwcy54c2ssCiYjNDM7CQkJCSAgIHNrZWxfdHgtJmd0O21hcHMueHNrLCAyLCBzaGFyZWRfdW1lbV9zZXFfZXZlbl9vZGQsIE5VTEwsIE5VTEwpOwomIzQzOwomIzQzOwlpZiAodHhfdW1lbSkKJiM0MzsJCXR4X3VtZW0tJmd0O3VuYWxpZ25lZF9tb2RlID0gdHhfdW5hbGlnbmVkOwomIzQzOwlpZiAocnhfdW1lbSkKJiM0MzsJCXJ4X3VtZW0tJmd0O3VuYWxpZ25lZF9tb2RlID0gcnhfdW5hbGlnbmVkOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKIGludCB0ZXN0YXBwX3BvbGxfdHhxX3Rtb3V0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpCiB7CiAJYm9vbCBzaGFyZWRfdW1lbSA9IHRlc3QtJmd0O2lmb2JqX3R4LSZndDtzaGFyZWRfdW1lbTsKQEAgLTI0OTgsOSAmIzQzOzI4MjksOCBAQCBpbnQgdGVzdGFwcF9od19zd19tYXhfcmluZ19zaXplKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpCiAJdGVzdC0mZ3Q7aWZvYmpfdHgtJmd0O3hzay0mZ3Q7YmF0Y2hfc2l6ZSA9IHRlc3QtJmd0O2lmb2JqX3R4LSZndDtyaW5nLnR4X21heF9wZW5kaW5nIC0gODsKIAl0ZXN0LSZndDtpZm9ial9yeC0mZ3Q7eHNrLSZndDtiYXRjaF9zaXplID0gdGVzdC0mZ3Q7aWZvYmpfdHgtJmd0O3JpbmcudHhfbWF4X3BlbmRpbmcgLSA4OwogCWlmIChwa3Rfc3RyZWFtX3JlcGxhY2UodGVzdCwgbWF4X2Rlc2NzLCBNSU5fUEtUX1NJWkUpKSB7Ci0JCWNsZWFuX3NvY2tldHModGVzdCwgdGVzdC0mZ3Q7aWZvYmpfdHgpOwotCQljbGVhbl9zb2NrZXRzKHRlc3QsIHRlc3QtJmd0O2lmb2JqX3J4KTsKLQkJY2xlYW5fdW1lbSh0ZXN0LCB0ZXN0LSZndDtpZm9ial9yeCwgdGVzdC0mZ3Q7aWZvYmpfdHgpOwomIzQzOwkJeHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCB0ZXN0LSZndDtpZm9ial90eCk7CiYjNDM7CQl4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIHRlc3QtJmd0O2lmb2JqX3J4KTsKIAkJcmV0dXJuIFRFU1RfRkFJTFVSRTsKIAl9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5oCmluZGV4IDAzNzUzZGRjNWRjZGEuLmVmOWM0MjJkNzc2M2UgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suaApAQCAtNCw2ICYjNDM7NCw3IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9ldGh0b29sLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaWZfeGRwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3JlZmNvdW50LmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7Li4va3NlbGZ0ZXN0LmgmIzM0OwogI2luY2x1ZGUgJiMzNDt4c2suaCYjMzQ7CkBAIC03OSw2ICYjNDM7ODAsOSBAQCBzdHJ1Y3QgdGVzdF9zcGVjOwogdHlwZWRlZiBpbnQgKCp2YWxpZGF0aW9uX2Z1bmNfdCkoc3RydWN0IGlmb2JqZWN0ICppZm9iaik7CiB0eXBlZGVmIHZvaWQgKigqdGhyZWFkX2Z1bmNfdCkodm9pZCAqYXJnKTsKIHR5cGVkZWYgaW50ICgqdGVzdF9mdW5jX3QpKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpOwomIzQzO3R5cGVkZWYgaW50ICgqc2hhcmVkX3VtZW1fc2VxX2ZuKShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCB2b2lkICpjdHgpOwomIzQzO3R5cGVkZWYgaW50ICgqc2hhcmVkX3VtZW1fcG9zdF9mbikoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgaW50IHJldCwKJiM0MzsJCQkJCSAgIGNvbnN0IHZvaWQgKmN0eCk7CiAKIHN0cnVjdCB4c2tfc29ja2V0X2luZm8gewogCXN0cnVjdCB4c2tfcmluZ19jb25zIHJ4OwpAQCAtMTA0LDYgJiM0MzsxMDgsNyBAQCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyB7CiAJc3RydWN0IHhza191bWVtICp1bWVtOwogCXU2NCBuZXh0X2J1ZmZlcjsKIAl1NjQgbW1hcF9zaXplOwomIzQzOwlyZWZjb3VudF90IHVzZXJzOwogCXUzMiBudW1fZnJhbWVzOwogCXUzMiBmcmFtZV9oZWFkcm9vbTsKIAl2b2lkICpidWZmZXI7CkBAIC0xNTksNiAmIzQzOzE2NCw3IEBAIGludCBpbml0X2lmYWNlKHN0cnVjdCBpZm9iamVjdCAqaWZvYmosIHRocmVhZF9mdW5jX3QgZnVuY19wdHIpOwogaW50IHhza19jb25maWd1cmVfdW1lbShzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqLCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbSwgdm9pZCAqYnVmZmVyLCB1NjQgc2l6ZSk7CiBpbnQgeHNrX2NvbmZpZ3VyZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrLCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbSwKIAkJCSBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0LCBib29sIHNoYXJlZCk7CiYjNDM7dm9pZCB4c2tfZGVsZXRlX3NvY2tldChzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2spOwogCiAKIHN0cnVjdCBwa3QgewpAQCAtMTc5LDYgJiM0MzsxODUsMTYgQEAgc3RydWN0IHBrdF9zdHJlYW0gewogCWJvb2wgdmVyYmF0aW07CiB9OwogCiYjNDM7c3RydWN0IHNoYXJlZF91bWVtX2xlbl9jdHggewomIzQzOwl1MzIgc2hvcnRfbGVuOwomIzQzOwl1MzIgbG9uZ19sZW47CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3Qgc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3RfY3R4IHsKJiM0MzsJdTMyIHRvdGFsX3BrdHM7CiYjNDM7CXUzMiBwa3RfbGVuOwomIzQzO307CiYjNDM7CiBzdGF0aWMgaW5saW5lIGJvb2wgcGt0X2NvbnRpbnVlcyh1MzIgb3B0aW9ucykKIHsKIAlyZXR1cm4gb3B0aW9ucyAmYW1wOyBYRFBfUEtUX0NPTlREOwpAQCAtMjY4LDYgJiM0MzsyODQsMTAgQEAgaW50IHRlc3RhcHBfeGRwX21ldGFkYXRhKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpOwogaW50IHRlc3RhcHBfeGRwX21ldGFkYXRhX21iKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpOwogaW50IHRlc3RhcHBfeGRwX3Byb2dfY2xlYW51cChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTsKIGludCB0ZXN0YXBwX3hkcF9zaGFyZWRfdW1lbShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTsKJiM0MztpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV80X3NvY2tldHMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7CiYjNDM7aW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpOwomIzQzO2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX3VuZXZlbl9kaXN0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpOwomIzQzO2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX3VuYWxpZ25lZChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTsKIAogdm9pZCAqd29ya2VyX3Rlc3RhcHBfdmFsaWRhdGVfcngodm9pZCAqYXJnKTsKIHZvaWQgKndvcmtlcl90ZXN0YXBwX3ZhbGlkYXRlX3R4KHZvaWQgKmFyZyk7CkBAIC0yOTEsNiAmIzQzOzMxMSwxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHRlc3Rfc3BlYyB0ZXN0c1tdID0gewogCXsubmFtZSA9ICYjMzQ7WERQX1BST0dfQ0xFQU5VUCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF94ZHBfcHJvZ19jbGVhbnVwfSwKIAl7Lm5hbWUgPSAmIzM0O1hEUF9EUk9QX0hBTEYmIzM0OywgLnRlc3RfZnVuYyA9IHRlc3RhcHBfeGRwX2Ryb3B9LAogCXsubmFtZSA9ICYjMzQ7WERQX1NIQVJFRF9VTUVNJiMzNDssIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3hkcF9zaGFyZWRfdW1lbX0sCiYjNDM7CXsubmFtZSA9ICYjMzQ7U0hBUkVEX1VNRU1fNF9TT0NLRVRTJiMzNDssIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3NoYXJlZF91bWVtXzRfc29ja2V0c30sCiYjNDM7CXsubmFtZSA9ICYjMzQ7U0hBUkVEX1VNRU1fTEVOR1RIX0JBU0VEJiMzNDssIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3NoYXJlZF91bWVtX2xlbmd0aF9iYXNlZH0sCiYjNDM7CXsubmFtZSA9ICYjMzQ7U0hBUkVEX1VNRU1fVU5FVkVOX0RJU1QmIzM0OywgLnRlc3RfZnVuYyA9IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3R9LAomIzQzOwl7Lm5hbWUgPSAmIzM0O1NIQVJFRF9VTUVNX1VOQUxJR05FRCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF9zaGFyZWRfdW1lbV91bmFsaWduZWR9LAogCXsubmFtZSA9ICYjMzQ7WERQX01FVEFEQVRBX0NPUFkmIzM0OywgLnRlc3RfZnVuYyA9IHRlc3RhcHBfeGRwX21ldGFkYXRhfSwKIAl7Lm5hbWUgPSAmIzM0O1hEUF9NRVRBREFUQV9DT1BZX01VTFRJX0JVRkYmIzM0OywgLnRlc3RfZnVuYyA9IHRlc3RhcHBfeGRwX21ldGFkYXRhX21ifSwKIAl7Lm5hbWUgPSAmIzM0O0FMSUdORURfSU5WX0RFU0NfTVVMVElfQlVGRiYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF9hbGlnbmVkX2ludl9kZXNjX21ifSwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94c2tfeGRwX3Byb2dzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveHNrX3hkcF9wcm9ncy5jCmluZGV4IDAyM2Q4YmVmZDRjYWIuLjU0M2I2MWRmM2EyYjEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94c2tfeGRwX3Byb2dzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hza194ZHBfcHJvZ3MuYwpAQCAtMTAsNyAmIzQzOzEwLDcgQEAKIAogc3RydWN0IHsKIAlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1hTS01BUCk7Ci0JX191aW50KG1heF9lbnRyaWVzLCAyKTsKJiM0MzsJX191aW50KG1heF9lbnRyaWVzLCBNQVhfU09DS0VUUyk7CiAJX191aW50KGtleV9zaXplLCBzaXplb2YoaW50KSk7CiAJX191aW50KHZhbHVlX3NpemUsIHNpemVvZihpbnQpKTsKIH0geHNrIFNFQygmIzM0Oy5tYXBzJiMzNDspOwpAQCAtNzUsNiAmIzQzOzc1LDIzIEBAIFNFQygmIzM0O3hkcCYjMzQ7KSBpbnQgeHNrX3hkcF9zaGFyZWRfdW1lbShzdHJ1Y3QgeGRwX21kICp4ZHApCiAJcmV0dXJuIGJwZl9yZWRpcmVjdF9tYXAoJmFtcDt4c2ssIGlkeCwgWERQX0RST1ApOwogfQogCiYjNDM7U0VDKCYjMzQ7eGRwJiMzNDspIGludCB4c2tfeGRwX3NoYXJlZF91bWVtX2xlbmd0aF9iYXNlZChzdHJ1Y3QgeGRwX21kICp4ZHApCiYjNDM7ewomIzQzOwl2b2lkICpkYXRhID0gKHZvaWQgKikobG9uZyl4ZHAtJmd0O2RhdGE7CiYjNDM7CXZvaWQgKmRhdGFfZW5kID0gKHZvaWQgKikobG9uZyl4ZHAtJmd0O2RhdGFfZW5kOwomIzQzOwlfX3UzMiBwa3RfbGVuID0gZGF0YV9lbmQgLSBkYXRhOwomIzQzOwomIzQzOwkvKiAKJiM0MzsJICogUm91dGUgcGFja2V0cyBieSB0b3RhbCBYRFAtdmlzaWJsZSBwYWNrZXQgbGVuZ3RoIChkYXRhX2VuZCAtIGRhdGEpOgomIzQzOwkgKiAtIFNvY2tldCAwOiBwYWNrZXRzICZsdDs9IFNIQVJFRF9VTUVNX0xFTl9TUExJVCBieXRlcwomIzQzOwkgKiAtIFNvY2tldCAxOiBwYWNrZXRzICZndDsgU0hBUkVEX1VNRU1fTEVOX1NQTElUIGJ5dGVzCiYjNDM7CSAqLwomIzQzOwlpZiAocGt0X2xlbiAmbHQ7PSBTSEFSRURfVU1FTV9MRU5fU1BMSVQpCiYjNDM7CQlyZXR1cm4gYnBmX3JlZGlyZWN0X21hcCgmYW1wO3hzaywgMCwgWERQX0RST1ApOwomIzQzOwllbHNlCiYjNDM7CQlyZXR1cm4gYnBmX3JlZGlyZWN0X21hcCgmYW1wO3hzaywgMSwgWERQX0RST1ApOwomIzQzO30KJiM0MzsKIFNFQygmIzM0O3hkcC5mcmFncyYjMzQ7KSBpbnQgeHNrX3hkcF9hZGp1c3RfdGFpbChzdHJ1Y3QgeGRwX21kICp4ZHApCiB7CiAJX191MzIgYnVmZl9sZW4sIGN1cnJfYnVmZl9sZW47CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNrX3hkcF9jb21tb24uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2tfeGRwX2NvbW1vbi5oCmluZGV4IDQ1ODEwZmY1NTJkYWUuLmJkOWI1ZGNmOGM4ZWUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2tfeGRwX2NvbW1vbi5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2tfeGRwX2NvbW1vbi5oCkBAIC0zLDcgJiM0MzszLDggQEAKICNpZm5kZWYgWFNLX1hEUF9DT01NT05fSF8KICNkZWZpbmUgWFNLX1hEUF9DT01NT05fSF8KIAotI2RlZmluZSBNQVhfU09DS0VUUyAyCiYjNDM7I2RlZmluZSBNQVhfU09DS0VUUyA0CiYjNDM7I2RlZmluZSBTSEFSRURfVU1FTV9MRU5fU1BMSVQgNjQKICNkZWZpbmUgUEtUX0hEUl9BTElHTiAoc2l6ZW9mKHN0cnVjdCBldGhoZHIpICYjNDM7IDIpIC8qIEp1c3QgdG8gYWxpZ24gdGhlIGRhdGEgaW4gdGhlIHBhY2tldCAqLwogCiBzdHJ1Y3QgeGRwX2luZm8gewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza3hjZWl2ZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2t4Y2VpdmVyLmMKaW5kZXggN2RhZDg1NTZhNzIyZS4uZWQ3NzE2YjYzNzU2NyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza3hjZWl2ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNreGNlaXZlci5jCkBAIC0xMTcsMTIgJiM0MzsxMTcsMTMgQEAgc3RhdGljIHZvaWQgX19leGl0X3dpdGhfZXJyb3IoaW50IGVycm9yLCBjb25zdCBjaGFyICpmaWxlLCBjb25zdCBjaGFyICpmdW5jLCBpbnQKIAogI2RlZmluZSBleGl0X3dpdGhfZXJyb3IoZXJyb3IpIF9fZXhpdF93aXRoX2Vycm9yKGVycm9yLCBfX0ZJTEVfXywgX19mdW5jX18sIF9fTElORV9fKQogCi1zdGF0aWMgYm9vbCBpZm9ial96Y19hdmFpbChzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0KQomIzQzO3N0YXRpYyBib29sIGlmb2JqX3pjX2F2YWlsKHN0cnVjdCBpZm9iamVjdCAqaWZvYmopCiB7CiAJc2l6ZV90IHVtZW1fc3ogPSBERUZBVUxUX1VNRU1fQlVGRkVSUyAqIFhTS19VTUVNX19ERUZBVUxUX0ZSQU1FX1NJWkU7CiAJaW50IG1tYXBfZmxhZ3MgPSBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMgfCBNQVBfTk9SRVNFUlZFOwotCXN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzazsKLQlzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbTsKJiM0MzsJc3RydWN0IHhza19zb2NrZXRfaW5mbyB4c2sgPSB7fTsKJiM0MzsJc3RydWN0IHhza191bWVtX2luZm8gdW1lbV9pbmZvID0ge307CiYjNDM7CXN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtID0gJmFtcDt1bWVtX2luZm87CiAJYm9vbCB6Y19hdmFpbCA9IGZhbHNlOwogCXZvaWQgKmJ1ZnM7CiAJaW50IHJldDsKQEAgLTEzMSwzMiAmIzQzOzEzMiwyMiBAQCBzdGF0aWMgYm9vbCBpZm9ial96Y19hdmFpbChzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0KQogCWlmIChidWZzID09IE1BUF9GQUlMRUQpCiAJCWV4aXRfd2l0aF9lcnJvcihlcnJubyk7CiAKLQl1bWVtID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgeHNrX3VtZW1faW5mbykpOwotCWlmICghdW1lbSkgewotCQltdW5tYXAoYnVmcywgdW1lbV9zeik7Ci0JCWV4aXRfd2l0aF9lcnJvcihFTk9NRU0pOwotCX0KJiM0MzsJdW1lbS0mZ3Q7bW1hcF9zaXplID0gdW1lbV9zejsKIAl1bWVtLSZndDtmcmFtZV9zaXplID0gWFNLX1VNRU1fX0RFRkFVTFRfRlJBTUVfU0laRTsKLQlyZXQgPSB4c2tfY29uZmlndXJlX3VtZW0oaWZvYmplY3QsIHVtZW0sIGJ1ZnMsIHVtZW1fc3opOwomIzQzOwlyZXQgPSB4c2tfY29uZmlndXJlX3VtZW0oaWZvYmosIHVtZW0sIGJ1ZnMsIHVtZW1fc3opOwogCWlmIChyZXQpCiAJCWV4aXRfd2l0aF9lcnJvcigtcmV0KTsKIAotCXhzayA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHhza19zb2NrZXRfaW5mbykpOwotCWlmICgheHNrKQotCQlnb3RvIG91dDsKLQlpZm9iamVjdC0mZ3Q7YmluZF9mbGFncyA9IFhEUF9VU0VfTkVFRF9XQUtFVVAgfCBYRFBfWkVST0NPUFk7Ci0JaWZvYmplY3QtJmd0O3J4X29uID0gdHJ1ZTsKLQl4c2stJmd0O3J4cXNpemUgPSBYU0tfUklOR19DT05TX19ERUZBVUxUX05VTV9ERVNDUzsKLQlyZXQgPSB4c2tfY29uZmlndXJlX3NvY2tldCh4c2ssIHVtZW0sIGlmb2JqZWN0LCBmYWxzZSk7CiYjNDM7CWlmb2JqLSZndDtiaW5kX2ZsYWdzID0gWERQX1VTRV9ORUVEX1dBS0VVUCB8IFhEUF9aRVJPQ09QWTsKJiM0MzsJaWZvYmotJmd0O3J4X29uID0gdHJ1ZTsKJiM0MzsJeHNrLnJ4cXNpemUgPSBYU0tfUklOR19DT05TX19ERUZBVUxUX05VTV9ERVNDUzsKJiM0MzsJcmV0ID0geHNrX2NvbmZpZ3VyZV9zb2NrZXQoJmFtcDt4c2ssIHVtZW0sIGlmb2JqLCBmYWxzZSk7CiAJaWYgKCFyZXQpCiAJCXpjX2F2YWlsID0gdHJ1ZTsKIAotCXhza19zb2NrZXRfX2RlbGV0ZSh4c2stJmd0O3hzayk7Ci0JZnJlZSh4c2spOwotb3V0OgotCW11bm1hcCh1bWVtLSZndDtidWZmZXIsIHVtZW1fc3opOwotCXhza191bWVtX19kZWxldGUodW1lbS0mZ3Q7dW1lbSk7Ci0JZnJlZSh1bWVtKTsKJiM0MzsJLyogVXNlIHRoZSBzYW1lIHJlZmNvdW50LWJhc2VkIHRlYXJkb3duIHBhdGggZm9yIGJvdGggc3VjY2VzcyBhbmQgZmFpbHVyZS4gKi8KJiM0MzsJeHNrX2RlbGV0ZV9zb2NrZXQoJmFtcDt4c2spOwomIzQzOwogCXJldHVybiB6Y19hdmFpbDsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI0MQoJCQkJCQkJb3V0cHV0OiA2OAoJCQkJCQkJdGhvdWdodHM6IDc4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTt2ZSBnb3QgYSBwYXRjaCB0aGF0JiMzOTtzIHRvdWNoZWQgYSBidW5jaCBvZiBmaWxlcywgYWxsIHVuZGVyIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgaWYgdGhlc2UgY2hhbmdlcyB3YXJyYW50IGZ1enppbmcuIFRoZSBpbnN0cnVjdGlvbnMgYXJlIHByZXR0eSBjbGVhcjogcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCAqb25seSogY29udGFpbnMgbW9kaWZpY2F0aW9ucyB0byB0ZXN0cywgZG9jdW1lbnRhdGlvbiwgY29tbWVudHMsIGRlY29yYXRpdmUgbG9nZ2luZywgbm9uLWZ1bmN0aW9uYWwgbnVtZXJpYyBjaGFuZ2VzLCB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzLCBvciB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycyByZXF1aXJpbmcgc3BlY2lmaWMgaGFyZHdhcmUuCgpSaWdodCwgc28sIGZpcnN0IHRoaW5ncyBmaXJzdDogbGV0IG1lIGlzb2xhdGUgd2hlcmUgdGhlIGNoYW5nZXMgYXJlLiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY2AsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5oYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94c2tfeGRwX3Byb2dzLmNgLCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza194ZHBfY29tbW9uLmhgLCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2t4Y2VpdmVyLmNgLiBCaW5nbyEgQWxsIHRlc3QgY29kZS4KCk5vdyB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBhcmUgdGhlc2Ugc2VsZnRlc3RzIHRvdWNoaW5nIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzPyBUaGUgYW5zd2VyIGlzIG5vLCB0aGlzIGlzIGFsbCB0ZXN0IGluZnJhc3RydWN0dXJlLCB1c2Vyc3BhY2UgcHJvZ3JhbXMsIGFuZCBCUEYgcHJvZ3JhbXMgdXNlZCBmb3IgdGVzdGluZy4gVGhlc2UgZmlsZXMgZG9uJiMzOTt0IGNoYW5nZSBhbnkgb2YgdGhlIGtlcm5lbCYjMzk7cyBmdW5jdGlvbmFsIGJlaGF2aW9yLCBidXQgYXJlIHRlc3QgcHJvZ3JhbXMgZm9yIEJQRi4KClRoZSBndWlkZWxpbmVzIGFyZSBleHBsaWNpdC4gSWYgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMgd2VyZSB0b3VjaGVkLCBJJiMzOTtkIG5lZWQgdG8gY29uZmlybSBleGVjdXRhYmlsaXR5IGFuZCB0aGVuIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLiBIb3dldmVyLCBzaW5jZSBpdCBpcyBvbmx5IGEgY2hhbmdlIHRvIHNlbGZ0ZXN0cywgSSBkb24mIzM5O3Qgc2VlIGFueSBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwuCgpTbywgbGV0IG1lIHJlY29uZmlybTogdGhlIGZpbGVzIG1vZGlmaWVkIGFyZSBsaW1pdGVkIHRvIEJQRiBzZWxmdGVzdHMsIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2AuIFRoaXMgbWVhbnMgdGhlIHBhdGNoICpvbmx5KiBpbXBhY3RzIHRoZSB0ZXN0IHN1aXRlLCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBmdW5jdGlvbmFsIGFsdGVyYXRpb25zIHRvIHRoZSBrZXJuZWwgaXRzZWxmLgoKVGhlcmVmb3JlLCBteSBhc3Nlc3NtZW50IGlzOiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJhdGlvbmFsZSBpcyBzdHJhaWdodGZvcndhcmQ6IFRoaXMgcGF0Y2ggZm9jdXNlcyBzb2xlbHkgb24gbW9kaWZ5aW5nIGFuZCBpbXByb3ZpbmcgQlBGIHNlbGZ0ZXN0cywgbm90IGNvcmUga2VybmVsIGZ1bmN0aW9uYWxpdHksIGFuZCBkb2VzIG5vdCB3YXJyYW50IGZ1enppbmcgdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyAodXNlcnNwYWNlIHRlc3QgcHJvZ3JhbXMgYW5kIHRlc3QgQlBGIHByb2dyYW1zKSBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyAodXNlcnNwYWNlIHRlc3QgcHJvZ3JhbXMgYW5kIHRlc3QgQlBGIHByb2dyYW1zKSBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6NTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjU3OjI3LjYzMTE4NDM5NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTcyNzM2MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgc2VsZnRlc3RzICh1c2Vyc3BhY2UgdGVzdCBwcm9ncmFtcyBhbmQgdGVzdCBCUEYgcHJvZ3JhbXMpIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6NTc6MjcuNjMxMTg4OTk2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzA3Nzk5MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkZjI0Y2IxMWNjMjYxN2ZlMmE2ZjI2MjQ5YzQ0ODdlNjk5MzNmNGFmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDcgMTY6NTc6MjYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmNcXG5pbmRleCA0NzdhZWRiYjAxYmFkLi5jY2ZkOWU4NDM2YTdiIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jXFxuQEAgLTEwMSw2ICsxMDEsNyBAQCBpbnQgeHNrX2NvbmZpZ3VyZV91bWVtKHN0cnVjdCBpZm9iamVjdCAqaWZvYmosIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtLCB2b2lkXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHR1bWVtLVxcdTAwM2VidWZmZXIgPSBidWZmZXI7XFxuK1xcdHJlZmNvdW50X3NldChcXHUwMDI2dW1lbS1cXHUwMDNldXNlcnMsIDEpO1xcbiBcXHRpZiAoaWZvYmotXFx1MDAzZXNoYXJlZF91bWVtIFxcdTAwMjZcXHUwMDI2IGlmb2JqLVxcdTAwM2VyeF9vbikge1xcbiBcXHRcXHR1bWVtLVxcdTAwM2ViYXNlX2FkZHIgPSB1bWVtX3NpemUodW1lbSk7XFxuIFxcdFxcdHVtZW0tXFx1MDAzZW5leHRfYnVmZmVyID0gdW1lbV9zaXplKHVtZW0pO1xcbkBAIC0xNTQsNiArMTU1LDcgQEAgaW50IHhza19jb25maWd1cmVfc29ja2V0KHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzaywgc3RydWN0IHhza191bWVtX2luZm8gKnVtZW1cXG4gXFx0c3RydWN0IHhza19zb2NrZXRfY29uZmlnIGNmZyA9IHt9O1xcbiBcXHRzdHJ1Y3QgeHNrX3JpbmdfY29ucyAqcnhyO1xcbiBcXHRzdHJ1Y3QgeHNrX3JpbmdfcHJvZCAqdHhyO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4gXFx0eHNrLVxcdTAwM2V1bWVtID0gdW1lbTtcXG4gXFx0Y2ZnLnJ4X3NpemUgPSB4c2stXFx1MDAzZXJ4cXNpemU7XFxuQEAgLTE3MCw3ICsxNzIsMjEgQEAgaW50IHhza19jb25maWd1cmVfc29ja2V0KHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzaywgc3RydWN0IHhza191bWVtX2luZm8gKnVtZW1cXG4gXFxuIFxcdHR4ciA9IGlmb2JqZWN0LVxcdTAwM2V0eF9vbiA/IFxcdTAwMjZ4c2stXFx1MDAzZXR4IDogTlVMTDtcXG4gXFx0cnhyID0gaWZvYmplY3QtXFx1MDAzZXJ4X29uID8gXFx1MDAyNnhzay1cXHUwMDNlcnggOiBOVUxMO1xcbi1cXHRyZXR1cm4geHNrX3NvY2tldF9fY3JlYXRlKFxcdTAwMjZ4c2stXFx1MDAzZXhzaywgaWZvYmplY3QtXFx1MDAzZWlmaW5kZXgsIDAsIHVtZW0tXFx1MDAzZXVtZW0sIHJ4ciwgdHhyLCBcXHUwMDI2Y2ZnKTtcXG4rXFx0cmV0ID0geHNrX3NvY2tldF9fY3JlYXRlKFxcdTAwMjZ4c2stXFx1MDAzZXhzaywgaWZvYmplY3QtXFx1MDAzZWlmaW5kZXgsIDAsIHVtZW0tXFx1MDAzZXVtZW0sIHJ4ciwgdHhyLCBcXHUwMDI2Y2ZnKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRpZiAoc2hhcmVkKVxcbitcXHRcXHRcXHQvKiBTaGFyZWQgc29ja2V0IGZhaWxlZCBiZWZvcmUgYWNxdWlyaW5nIGEgVU1FTSByZWZlcmVuY2UuICovXFxuK1xcdFxcdFxcdHhzay1cXHUwMDNldW1lbSA9IE5VTEw7XFxuK1xcbitcXHRcXHQvKiBLZWVwIGZhaWxlZCBzb2NrZXQgc3RhdGUgaW5lcnQgZm9yIGxhdGVyIGNsZWFudXAgcGF0aHMuICovXFxuK1xcdFxcdHhzay1cXHUwMDNleHNrID0gTlVMTDtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHNoYXJlZClcXG4rXFx0XFx0cmVmY291bnRfaW5jKFxcdTAwMjZ1bWVtLVxcdTAwM2V1c2Vycyk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHNldF9yaW5nX3NpemUoc3RydWN0IGlmb2JqZWN0ICppZm9iailcXG5AQCAtMjAzLDYgKzIxOSwxMiBAQCBpbnQgaHdfcmluZ19zaXplX3Jlc2V0KHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXFxuIHN0YXRpYyB2b2lkIF9fdGVzdF9zcGVjX2luaXQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9ial90eCxcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqX3J4KVxcbiB7XFxuK1xcdC8qXFxuK1xcdCAqIEtlZXAgdGhlIHNhbWUgZGVmYXVsdCBhcyB4c2t4Y2VpdmVyIHN0YXJ0dXA6IHdoZW4gVFggYW5kIFJYIHNoYXJlIHRoZSBzYW1lIG5ldGRldixcXG4rXFx0ICogc2hhcmVkIFVNRU0gaXMgdGhlIGJhc2VsaW5lIG1vZGUgZm9yIHRoaXMgdGVzdCBoYXJuZXNzLiBJbmRpdmlkdWFsIHRlc3RzIGNhbiBzdGlsbFxcbitcXHQgKiBvdmVycmlkZSB0aGlzIGFzIG5lZWRlZC5cXG4rXFx0ICovXFxuK1xcdGJvb2wgc2hhcmVkX2RlZmF1bHQgPSBpZm9ial90eC1cXHUwMDNlaWZpbmRleCA9PSBpZm9ial9yeC1cXHUwMDNlaWZpbmRleDtcXG4gXFx0dTMyIGksIGo7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUFYX0lOVEVSRkFDRVM7IGkrKykge1xcbkBAIC0yMTQsNiArMjM2LDcgQEAgc3RhdGljIHZvaWQgX190ZXN0X3NwZWNfaW5pdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqX3R4LFxcbiBcXHRcXHRpZm9iai1cXHUwMDNldXNlX2ZpbGxfcmluZyA9IHRydWU7XFxuIFxcdFxcdGlmb2JqLVxcdTAwM2VyZWxlYXNlX3J4ID0gdHJ1ZTtcXG4gXFx0XFx0aWZvYmotXFx1MDAzZXZhbGlkYXRpb25fZnVuYyA9IE5VTEw7XFxuK1xcdFxcdGlmb2JqLVxcdTAwM2VzaGFyZWRfdW1lbSA9IHNoYXJlZF9kZWZhdWx0O1xcbiBcXHRcXHRpZm9iai1cXHUwMDNldXNlX21ldGFkYXRhID0gZmFsc2U7XFxuIFxcbiBcXHRcXHRpZiAoaSA9PSAwKSB7XFxuQEAgLTU3NCwyNiArNTk3LDEyMiBAQCBzdGF0aWMgaW50IHBrdF9zdHJlYW1fcmVjZWl2ZV9oYWxmKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXFxuIFxcbiBzdGF0aWMgaW50IHBrdF9zdHJlYW1fZXZlbl9vZGRfc2VxdWVuY2Uoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcXG4ge1xcbitcXHRzdHJ1Y3QgcGt0X3N0cmVhbSAqdHhfc3RyZWFtc1tNQVhfU09DS0VUU10gPSB7fTtcXG4rXFx0c3RydWN0IHBrdF9zdHJlYW0gKnJ4X3N0cmVhbXNbTUFYX1NPQ0tFVFNdID0ge307XFxuIFxcdHN0cnVjdCBwa3Rfc3RyZWFtICpwa3Rfc3RyZWFtO1xcbiBcXHR1MzIgaTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0ZXN0LVxcdTAwM2VuYl9zb2NrZXRzOyBpKyspIHtcXG4gXFx0XFx0cGt0X3N0cmVhbSA9IHRlc3QtXFx1MDAzZWlmb2JqX3R4LVxcdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW07XFxuLVxcdFxcdHBrdF9zdHJlYW0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUocGt0X3N0cmVhbS1cXHUwMDNlbmJfcGt0cyAvIDIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgIHBrdF9zdHJlYW0tXFx1MDAzZXBrdHNbMF0ubGVuLCBpLCAyKTtcXG4tXFx0XFx0aWYgKCFwa3Rfc3RyZWFtKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFx0XFx0dGVzdC1cXHUwMDNlaWZvYmpfdHgtXFx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSA9IHBrdF9zdHJlYW07XFxuK1xcdFxcdHR4X3N0cmVhbXNbaV0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUocGt0X3N0cmVhbS1cXHUwMDNlbmJfcGt0cyAvIDIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHBrdF9zdHJlYW0tXFx1MDAzZXBrdHNbMF0ubGVuLCBpLCAyKTtcXG4rXFx0XFx0aWYgKCF0eF9zdHJlYW1zW2ldKVxcbitcXHRcXHRcXHRnb3RvIGVycjtcXG4gXFxuIFxcdFxcdHBrdF9zdHJlYW0gPSB0ZXN0LVxcdTAwM2VpZm9ial9yeC1cXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtO1xcbi1cXHRcXHRwa3Rfc3RyZWFtID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tXFx1MDAzZW5iX3BrdHMgLyAyLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICBwa3Rfc3RyZWFtLVxcdTAwM2Vwa3RzWzBdLmxlbiwgaSwgMik7XFxuLVxcdFxcdGlmICghcGt0X3N0cmVhbSlcXG4tXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcdFxcdHRlc3QtXFx1MDAzZWlmb2JqX3J4LVxcdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSBwa3Rfc3RyZWFtO1xcbitcXHRcXHRyeF9zdHJlYW1zW2ldID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tXFx1MDAzZW5iX3BrdHMgLyAyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBwa3Rfc3RyZWFtLVxcdTAwM2Vwa3RzWzBdLmxlbiwgaSwgMik7XFxuK1xcdFxcdGlmICghcnhfc3RyZWFtc1tpXSlcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0ZXN0LVxcdTAwM2VuYl9zb2NrZXRzOyBpKyspIHtcXG4rXFx0XFx0dGVzdC1cXHUwMDNlaWZvYmpfdHgtXFx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSA9IHR4X3N0cmVhbXNbaV07XFxuK1xcdFxcdHRlc3QtXFx1MDAzZWlmb2JqX3J4LVxcdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSByeF9zdHJlYW1zW2ldO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2VycjpcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRlc3QtXFx1MDAzZW5iX3NvY2tldHM7IGkrKykge1xcbitcXHRcXHRpZiAodHhfc3RyZWFtc1tpXSlcXG4rXFx0XFx0XFx0cGt0X3N0cmVhbV9kZWxldGUodHhfc3RyZWFtc1tpXSk7XFxuK1xcdFxcdGlmIChyeF9zdHJlYW1zW2ldKVxcbitcXHRcXHRcXHRwa3Rfc3RyZWFtX2RlbGV0ZShyeF9zdHJlYW1zW2ldKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIC1FTk9NRU07XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGt0X3N0cmVhbV9sZW5fc2VxKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHUzMiBzaG9ydF9sZW4sIHUzMiBsb25nX2xlbilcXG4re1xcbitcXHRzdHJ1Y3QgcGt0X3N0cmVhbSAqdHhfc3RyZWFtc1tNQVhfU09DS0VUU10gPSB7fTtcXG4rXFx0c3RydWN0IHBrdF9zdHJlYW0gKnJ4X3N0cmVhbXNbTUFYX1NPQ0tFVFNdID0ge307XFxuK1xcdHN0cnVjdCBwa3Rfc3RyZWFtICpwa3Rfc3RyZWFtO1xcbitcXHR1MzIgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0ZXN0LVxcdTAwM2VuYl9zb2NrZXRzOyBpKyspIHtcXG4rXFx0XFx0dTMyIHBrdF9sZW4gPSBpID8gbG9uZ19sZW4gOiBzaG9ydF9sZW47XFxuK1xcbitcXHRcXHRwa3Rfc3RyZWFtID0gdGVzdC1cXHUwMDNlaWZvYmpfdHgtXFx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbTtcXG4rXFx0XFx0dHhfc3RyZWFtc1tpXSA9IF9fcGt0X3N0cmVhbV9nZW5lcmF0ZShwa3Rfc3RyZWFtLVxcdTAwM2VuYl9wa3RzIC8gMiwgcGt0X2xlbiwgaSwgMik7XFxuK1xcdFxcdGlmICghdHhfc3RyZWFtc1tpXSlcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRcXHRwa3Rfc3RyZWFtID0gdGVzdC1cXHUwMDNlaWZvYmpfcngtXFx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbTtcXG4rXFx0XFx0cnhfc3RyZWFtc1tpXSA9IF9fcGt0X3N0cmVhbV9nZW5lcmF0ZShwa3Rfc3RyZWFtLVxcdTAwM2VuYl9wa3RzIC8gMiwgcGt0X2xlbiwgaSwgMik7XFxuK1xcdFxcdGlmICghcnhfc3RyZWFtc1tpXSlcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0ZXN0LVxcdTAwM2VuYl9zb2NrZXRzOyBpKyspIHtcXG4rXFx0XFx0dGVzdC1cXHUwMDNlaWZvYmpfdHgtXFx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSA9IHR4X3N0cmVhbXNbaV07XFxuK1xcdFxcdHRlc3QtXFx1MDAzZWlmb2JqX3J4LVxcdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSByeF9zdHJlYW1zW2ldO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2VycjpcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRlc3QtXFx1MDAzZW5iX3NvY2tldHM7IGkrKykge1xcbitcXHRcXHRpZiAodHhfc3RyZWFtc1tpXSlcXG4rXFx0XFx0XFx0cGt0X3N0cmVhbV9kZWxldGUodHhfc3RyZWFtc1tpXSk7XFxuK1xcdFxcdGlmIChyeF9zdHJlYW1zW2ldKVxcbitcXHRcXHRcXHRwa3Rfc3RyZWFtX2RlbGV0ZShyeF9zdHJlYW1zW2ldKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIC1FTk9NRU07XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGt0X3N0cmVhbV93ZWlnaHRlZF91bmV2ZW5fZGlzdF9zZXF1ZW5jZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCB1MzIgdG90YWxfcGt0cyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHUzMiBwa3RfbGVuKVxcbit7XFxuK1xcdHN0cnVjdCBwa3Rfc3RyZWFtICp0eF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9O1xcbitcXHRzdHJ1Y3QgcGt0X3N0cmVhbSAqcnhfc3RyZWFtc1tNQVhfU09DS0VUU10gPSB7fTtcXG4rXFx0dTMyIGksIHBrdHNfc29jazA7XFxuK1xcbitcXHRpZiAodGVzdC1cXHUwMDNlbmJfc29ja2V0cyBcXHUwMDNjIDIgfHwgdG90YWxfcGt0cyBcXHUwMDNjIDQpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cGt0c19zb2NrMCA9IHRvdGFsX3BrdHMgLyA0O1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRlc3QtXFx1MDAzZW5iX3NvY2tldHM7IGkrKykge1xcbitcXHRcXHR1MzIgbmJfcGt0cyA9IChpID09IDApID8gcGt0c19zb2NrMCA6ICh0b3RhbF9wa3RzIC0gcGt0c19zb2NrMCk7XFxuK1xcbitcXHRcXHR0eF9zdHJlYW1zW2ldID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKG5iX3BrdHMsIHBrdF9sZW4sIGksIDIpO1xcbitcXHRcXHRpZiAoIXR4X3N0cmVhbXNbaV0pXFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0XFx0cnhfc3RyZWFtc1tpXSA9IF9fcGt0X3N0cmVhbV9nZW5lcmF0ZShuYl9wa3RzLCBwa3RfbGVuLCBpLCAyKTtcXG4rXFx0XFx0aWYgKCFyeF9zdHJlYW1zW2ldKVxcbitcXHRcXHRcXHRnb3RvIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRlc3QtXFx1MDAzZW5iX3NvY2tldHM7IGkrKykge1xcbitcXHRcXHR0ZXN0LVxcdTAwM2VpZm9ial90eC1cXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtID0gdHhfc3RyZWFtc1tpXTtcXG4rXFx0XFx0dGVzdC1cXHUwMDNlaWZvYmpfcngtXFx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSA9IHJ4X3N0cmVhbXNbaV07XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbitcXG4rZXJyOlxcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdGVzdC1cXHUwMDNlbmJfc29ja2V0czsgaSsrKSB7XFxuK1xcdFxcdGlmICh0eF9zdHJlYW1zW2ldKVxcbitcXHRcXHRcXHRwa3Rfc3RyZWFtX2RlbGV0ZSh0eF9zdHJlYW1zW2ldKTtcXG4rXFx0XFx0aWYgKHJ4X3N0cmVhbXNbaV0pXFxuK1xcdFxcdFxcdHBrdF9zdHJlYW1fZGVsZXRlKHJ4X3N0cmVhbXNbaV0pO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gLUVOT01FTTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcmVsZWFzZV9ldmVuX29kZF9zZXF1ZW5jZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxcbkBAIC0xNDY4LDYgKzE1ODcsMjggQEAgc3RhdGljIGludCB2YWxpZGF0ZV90eF9pbnZhbGlkX2Rlc2NzKHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QpXFxuIFxcdHJldHVybiBURVNUX1BBU1M7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHhza19kZWxldGVfc29ja2V0X2JhdGNoKHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QsIHUzMiBjb3VudClcXG4re1xcbitcXHR1MzIgaTtcXG4rXFxuK1xcdGlmICghaWZvYmplY3QpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGZvciAoaSA9IGNvdW50OyBpIFxcdTAwM2UgMDsgaS0tKVxcbitcXHRcXHR4c2tfZGVsZXRlX3NvY2tldChcXHUwMDI2aWZvYmplY3QtXFx1MDAzZXhza19hcnJbaSAtIDFdKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgeHNrX2NvbmZpZ3VyZV9yb2xsYmFjayhzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0LCBpbnQgbGFzdClcXG4re1xcbitcXHR1MzIgY291bnQ7XFxuK1xcbitcXHRpZiAoIWlmb2JqZWN0IHx8IGxhc3QgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRjb3VudCA9IGxhc3QgKyAxO1xcbitcXHR4c2tfZGVsZXRlX3NvY2tldF9iYXRjaChpZm9iamVjdCwgY291bnQpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHhza19jb25maWd1cmUoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdCxcXG4gXFx0XFx0XFx0ICBzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbSwgYm9vbCB0eClcXG4ge1xcbkBAIC0xNDg0LDE0ICsxNjI1LDE4IEBAIHN0YXRpYyBpbnQgeHNrX2NvbmZpZ3VyZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0LFxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFxuIFxcdFxcdFxcdC8qIFJldHJ5IGlmIGl0IGZhaWxzIGFzIHhza19zb2NrZXRfX2NyZWF0ZSgpIGlzIGFzeW5jaHJvbm91cyAqL1xcbi1cXHRcXHRcXHRpZiAoY3RyIFxcdTAwM2U9IFNPQ0tfUkVDT05GX0NUUilcXG4rXFx0XFx0XFx0aWYgKGN0ciBcXHUwMDNlPSBTT0NLX1JFQ09ORl9DVFIpIHtcXG4rXFx0XFx0XFx0XFx0eHNrX2NvbmZpZ3VyZV9yb2xsYmFjayhpZm9iamVjdCwgaSk7XFxuIFxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0XFx0dXNsZWVwKFVTTEVFUF9NQVgpO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlmIChpZm9iamVjdC1cXHUwMDNlYnVzeV9wb2xsKSB7XFxuIFxcdFxcdFxcdHJldCA9IGVuYWJsZV9idXN5X3BvbGwoXFx1MDAyNmlmb2JqZWN0LVxcdTAwM2V4c2tfYXJyW2ldKTtcXG4tXFx0XFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRcXHR4c2tfY29uZmlndXJlX3JvbGxiYWNrKGlmb2JqZWN0LCBpKTtcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuQEAgLTE3MDIsMTIgKzE4NDcsNjAgQEAgdm9pZCAqd29ya2VyX3Rlc3RhcHBfdmFsaWRhdGVfcngodm9pZCAqYXJnKVxcbiBcXHRwdGhyZWFkX2V4aXQoTlVMTCk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHRlc3RhcHBfY2xlYW5feHNrX3VtZW0oc3RydWN0IGlmb2JqZWN0ICppZm9iailcXG4rdm9pZCB4c2tfZGVsZXRlX3NvY2tldChzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2spXFxuIHtcXG4tXFx0c3RydWN0IHhza191bWVtX2luZm8gKnVtZW0gPSBpZm9iai1cXHUwMDNleHNrLVxcdTAwM2V1bWVtO1xcbitcXHRzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbTtcXG4gXFxuLVxcdHhza191bWVtX19kZWxldGUodW1lbS1cXHUwMDNldW1lbSk7XFxuLVxcdG11bm1hcCh1bWVtLVxcdTAwM2VidWZmZXIsIHVtZW0tXFx1MDAzZW1tYXBfc2l6ZSk7XFxuK1xcdC8qXFxuK1xcdCAqIENhbGxlcnMgbXVzdCBzZXJpYWxpemUgdGVhcmRvd24gZm9yIGEgZ2l2ZW4geHNrL3VtZW0gcGFpci5cXG4rXFx0ICogVGhpcyBoZWxwZXIgZG9lcyByZWZjb3VudC1iYXNlZCBsaWZldGltZSBtYW5hZ2VtZW50IG9ubHkuXFxuK1xcdCAqL1xcbitcXHRpZiAoIXhzaylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0dW1lbSA9IHhzay1cXHUwMDNldW1lbTtcXG4rXFx0aWYgKCF1bWVtKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHQvKiBEZWxldGUgdGhlIHNvY2tldCBoYW5kbGUgd2hlbiBhdmFpbGFibGUsIHRoZW4gZHJvcCBVTUVNIHJlZmVyZW5jZS4gKi9cXG4rXFx0aWYgKHhzay1cXHUwMDNleHNrKVxcbitcXHRcXHR4c2tfc29ja2V0X19kZWxldGUoeHNrLVxcdTAwM2V4c2spO1xcbitcXHR4c2stXFx1MDAzZXhzayA9IE5VTEw7XFxuK1xcbitcXHQvKiBNYXJrIHRoaXMgc29ja2V0IGFzIGNsZWFuZWQgdXAgdG8gcHJldmVudCBkb3VibGUtZGVjcmVtZW50ICovXFxuK1xcdHhzay1cXHUwMDNldW1lbSA9IE5VTEw7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUZWFyZG93biBtYXkgd2FsayB0aGUgZnVsbCB4c2sgYXJyYXksIGluY2x1ZGluZyBzbG90cyB0aGF0IG5ldmVyIGNvbXBsZXRlZCBzZXR1cCBidXRcXG4rXFx0ICogc3RpbGwgY2FycnkgYSBwcmVpbml0aWFsaXplZCB1bWVtIHBvaW50ZXIuIEFmdGVyIGEgcGFydGlhbC1zZXR1cCByb2xsYmFjaywgdGhlIGxhc3QgVU1FTVxcbitcXHQgKiByZWYgbWF5IGFscmVhZHkgYmUgZHJvcHBlZC5cXG4rXFx0ICovXFxuK1xcdGlmICghcmVmY291bnRfcmVhZChcXHUwMDI2dW1lbS1cXHUwMDNldXNlcnMpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHQvKiBBbHdheXMgZGVjcmVtZW50IHJlZmNvdW50IGZvciB0aGlzIHNvY2tldCdzIFVNRU0gcmVmZXJlbmNlICovXFxuK1xcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNnVtZW0tXFx1MDAzZXVzZXJzKSkge1xcbitcXHRcXHRpZiAodW1lbS1cXHUwMDNldW1lbSkge1xcbitcXHRcXHRcXHRpbnQgZXJyID0geHNrX3VtZW1fX2RlbGV0ZSh1bWVtLVxcdTAwM2V1bWVtKTtcXG4rXFxuK1xcdFxcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJ4c2tfdW1lbV9fZGVsZXRlIGZhaWxlZDogJWQgKHVtZW0gc3RpbGwgYnVzeT8pXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgZXJyKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAodW1lbS1cXHUwMDNlYnVmZmVyIFxcdTAwMjZcXHUwMDI2IHVtZW0tXFx1MDAzZW1tYXBfc2l6ZSlcXG4rXFx0XFx0XFx0bXVubWFwKHVtZW0tXFx1MDAzZWJ1ZmZlciwgdW1lbS1cXHUwMDNlbW1hcF9zaXplKTtcXG4rXFx0XFx0dW1lbS1cXHUwMDNldW1lbSA9IE5VTEw7XFxuK1xcdFxcdHVtZW0tXFx1MDAzZWJ1ZmZlciA9IE5VTEw7XFxuK1xcdFxcdHVtZW0tXFx1MDAzZW1tYXBfc2l6ZSA9IDA7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgeHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqKVxcbit7XFxuK1xcdGlmICghaWZvYmopXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHhza19kZWxldGVfc29ja2V0X2JhdGNoKGlmb2JqLCB0ZXN0LVxcdTAwM2VuYl9zb2NrZXRzKTtcXG4gfVxcbiBcXG4gc3RhdGljIGJvb2wgeGRwX3Byb2dfY2hhbmdlZF9yeChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxcbkBAIC0xNzY5LDI3ICsxOTYyLDYgQEAgc3RhdGljIGludCB4c2tfYXR0YWNoX3hkcF9wcm9ncyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqX3JcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgY2xlYW5fc29ja2V0cyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqKVxcbi17XFxuLVxcdHUzMiBpO1xcbi1cXG4tXFx0aWYgKCFpZm9iaiB8fCAhdGVzdClcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRlc3QtXFx1MDAzZW5iX3NvY2tldHM7IGkrKylcXG4tXFx0XFx0eHNrX3NvY2tldF9fZGVsZXRlKGlmb2JqLVxcdTAwM2V4c2tfYXJyW2ldLnhzayk7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIGNsZWFuX3VtZW0oc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iajEsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmoyKVxcbi17XFxuLVxcdGlmICghaWZvYmoxKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbi1cXHR0ZXN0YXBwX2NsZWFuX3hza191bWVtKGlmb2JqMSk7XFxuLVxcdGlmIChpZm9iajIgXFx1MDAyNlxcdTAwMjYgIWlmb2JqMi1cXHUwMDNlc2hhcmVkX3VtZW0pXFxuLVxcdFxcdHRlc3RhcHBfY2xlYW5feHNrX3VtZW0oaWZvYmoyKTtcXG4tfVxcbi1cXG4gc3RhdGljIGludCBfX3Rlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqMSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGlmb2JqZWN0ICppZm9iajIpXFxuIHtcXG5AQCAtMTg0MSw4ICsyMDEzLDcgQEAgc3RhdGljIGludCBfX3Rlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlcXG4gXFx0XFx0aWYgKHB0aHJlYWRfYmFycmllcl9kZXN0cm95KFxcdTAwMjZiYXJyKSkge1xcbiBcXHRcXHRcXHR0ZXN0LVxcdTAwM2V1c2VfYmFycmllciA9IGZhbHNlO1xcbiBcXHRcXHRcXHRwdGhyZWFkX2pvaW4odDAsIE5VTEwpO1xcbi1cXHRcXHRcXHRjbGVhbl9zb2NrZXRzKHRlc3QsIGlmb2JqMSk7XFxuLVxcdFxcdFxcdGNsZWFuX3VtZW0odGVzdCwgaWZvYmoxLCBOVUxMKTtcXG4rXFx0XFx0XFx0eHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCBpZm9iajEpO1xcbiBcXHRcXHRcXHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG5AQCAtMTg1Niw5ICsyMDI3LDggQEAgc3RhdGljIGludCBfX3Rlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlcXG4gXFx0cHRocmVhZF9qb2luKHQwLCBOVUxMKTtcXG4gXFxuIFxcdGlmICh0ZXN0LVxcdTAwM2V0b3RhbF9zdGVwcyA9PSB0ZXN0LVxcdTAwM2VjdXJyZW50X3N0ZXAgfHwgdGVzdC1cXHUwMDNlZmFpbCkge1xcbi1cXHRcXHRjbGVhbl9zb2NrZXRzKHRlc3QsIGlmb2JqMSk7XFxuLVxcdFxcdGNsZWFuX3NvY2tldHModGVzdCwgaWZvYmoyKTtcXG4tXFx0XFx0Y2xlYW5fdW1lbSh0ZXN0LCBpZm9iajEsIGlmb2JqMik7XFxuK1xcdFxcdHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgaWZvYmoyKTtcXG4rXFx0XFx0eHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCBpZm9iajEpO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAodGVzdC1cXHUwMDNlZmFpbClcXG5AQCAtMTk2Nyw5ICsyMTM3LDggQEAgaW50IHRlc3RhcHBfeGRwX3Byb2dfY2xlYW51cChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxcbiBcXHRcXHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xcbiBcXG4gXFx0aWYgKHN3YXBfeHNrX3Jlc291cmNlcyh0ZXN0KSkge1xcbi1cXHRcXHRjbGVhbl9zb2NrZXRzKHRlc3QsIHRlc3QtXFx1MDAzZWlmb2JqX3J4KTtcXG4tXFx0XFx0Y2xlYW5fc29ja2V0cyh0ZXN0LCB0ZXN0LVxcdTAwM2VpZm9ial90eCk7XFxuLVxcdFxcdGNsZWFuX3VtZW0odGVzdCwgdGVzdC1cXHUwMDNlaWZvYmpfcngsIHRlc3QtXFx1MDAzZWlmb2JqX3R4KTtcXG4rXFx0XFx0eHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCB0ZXN0LVxcdTAwM2VpZm9ial90eCk7XFxuK1xcdFxcdHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgdGVzdC1cXHUwMDNlaWZvYmpfcngpO1xcbiBcXHRcXHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xcbiBcXHR9XFxuIFxcbkBAIC0yMjI0LDYgKzIzOTMsMTY4IEBAIGludCB0ZXN0YXBwX3hkcF9zaGFyZWRfdW1lbShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHNoYXJlZF91bWVtX3Rlc3RfcHJlcGFyZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxcbit7XFxuK1xcdHUzMiBpO1xcbitcXG4rXFx0aWYgKHRlc3QtXFx1MDAzZW5iX3NvY2tldHMgXFx1MDAzZSBNQVhfU09DS0VUUykge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiRVJST1I6IFslc10gaW52YWxpZCBzb2NrZXQgY291bnQgJXVcXFxcblxcXCIsIF9fZnVuY19fLCB0ZXN0LVxcdTAwM2VuYl9zb2NrZXRzKTtcXG4rXFx0XFx0cmV0dXJuIFRFU1RfRkFJTFVSRTtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRlc3QtXFx1MDAzZW5iX3NvY2tldHM7IGkrKykge1xcbitcXHRcXHRpZiAoIXRlc3QtXFx1MDAzZWlmb2JqX3J4LVxcdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gfHxcXG4rXFx0XFx0ICAgICF0ZXN0LVxcdTAwM2VpZm9ial90eC1cXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtKSB7XFxuK1xcdFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJFUlJPUjogWyVzXSBtaXNzaW5nIHN0cmVhbSBmb3Igc29ja2V0ICV1XFxcXG5cXFwiLCBfX2Z1bmNfXywgaSk7XFxuK1xcdFxcdFxcdHJldHVybiBURVNUX0ZBSUxVUkU7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIFRFU1RfUEFTUztcXG4rfVxcbitcXG4rc3RhdGljIGludCBzaGFyZWRfdW1lbV9zZXFfZXZlbl9vZGQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgY29uc3Qgdm9pZCAqY3R4KVxcbit7XFxuK1xcdCh2b2lkKWN0eDtcXG4rXFxuK1xcdHJldHVybiBwa3Rfc3RyZWFtX2V2ZW5fb2RkX3NlcXVlbmNlKHRlc3QpID8gVEVTVF9GQUlMVVJFIDogVEVTVF9QQVNTO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHNoYXJlZF91bWVtX3NlcV9sZW4oc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgY29uc3Qgdm9pZCAqY3R4KVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBzaGFyZWRfdW1lbV9sZW5fY3R4ICpjZmcgPSBjdHg7XFxuK1xcbitcXHRyZXR1cm4gcGt0X3N0cmVhbV9sZW5fc2VxKHRlc3QsIGNmZy1cXHUwMDNlc2hvcnRfbGVuLCBjZmctXFx1MDAzZWxvbmdfbGVuKSA/IFRFU1RfRkFJTFVSRSA6IFRFU1RfUEFTUztcXG4rfVxcbitcXG4rc3RhdGljIGludCBzaGFyZWRfdW1lbV9zZXFfdW5ldmVuX2Rpc3Qoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgY29uc3Qgdm9pZCAqY3R4KVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBzaGFyZWRfdW1lbV91bmV2ZW5fZGlzdF9jdHggKmNmZyA9IGN0eDtcXG4rXFxuK1xcdHJldHVybiBwa3Rfc3RyZWFtX3dlaWdodGVkX3VuZXZlbl9kaXN0X3NlcXVlbmNlKHRlc3QsIGNmZy1cXHUwMDNldG90YWxfcGt0cyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgY2ZnLVxcdTAwM2Vwa3RfbGVuKSA/IFRFU1RfRkFJTFVSRSA6IFRFU1RfUEFTUztcXG4rfVxcbitcXG4rc3RhdGljIGludCBzaGFyZWRfdW1lbV9wb3N0X3VuZXZlbl9kaXN0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIGludCByZXQsIGNvbnN0IHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgcGt0X3N0cmVhbSAqdHhfc3RyZWFtXzAsICp0eF9zdHJlYW1fMTtcXG4rXFx0c3RydWN0IHBrdF9zdHJlYW0gKnJ4X3N0cmVhbV8wLCAqcnhfc3RyZWFtXzE7XFxuK1xcbitcXHQodm9pZCljdHg7XFxuK1xcbitcXHR0eF9zdHJlYW1fMCA9IHRlc3QtXFx1MDAzZWlmb2JqX3R4LVxcdTAwM2V4c2tfYXJyWzBdLnBrdF9zdHJlYW07XFxuK1xcdHR4X3N0cmVhbV8xID0gdGVzdC1cXHUwMDNlaWZvYmpfdHgtXFx1MDAzZXhza19hcnJbMV0ucGt0X3N0cmVhbTtcXG4rXFx0cnhfc3RyZWFtXzAgPSB0ZXN0LVxcdTAwM2VpZm9ial9yeC1cXHUwMDNleHNrX2FyclswXS5wa3Rfc3RyZWFtO1xcbitcXHRyeF9zdHJlYW1fMSA9IHRlc3QtXFx1MDAzZWlmb2JqX3J4LVxcdTAwM2V4c2tfYXJyWzFdLnBrdF9zdHJlYW07XFxuK1xcbitcXHRpZiAodHhfc3RyZWFtXzEtXFx1MDAzZW5iX3ZhbGlkX2VudHJpZXMgXFx1MDAzYz0gdHhfc3RyZWFtXzAtXFx1MDAzZW5iX3ZhbGlkX2VudHJpZXMpXFxuK1xcdFxcdHJldHVybiBURVNUX0ZBSUxVUkU7XFxuK1xcbitcXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiByeF9zdHJlYW1fMS1cXHUwMDNlbmJfcnhfcGt0cyBcXHUwMDNjPSByeF9zdHJlYW1fMC1cXHUwMDNlbmJfcnhfcGt0cykge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiRVJST1I6IHNvY2tldDEgcnhfcGt0cyAoJXUpIG5vdCBncmVhdGVyIHRoYW4gc29ja2V0MCAoJXUpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICAgcnhfc3RyZWFtXzEtXFx1MDAzZW5iX3J4X3BrdHMsIHJ4X3N0cmVhbV8wLVxcdTAwM2VuYl9yeF9wa3RzKTtcXG4rXFx0XFx0cmV0ID0gVEVTVF9GQUlMVVJFO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ1bl9zaGFyZWRfdW1lbV90ZXN0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBicGZfcHJvZ3JhbSAqeGRwX3Byb2dfcngsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBicGZfcHJvZ3JhbSAqeGRwX3Byb2dfdHgsIHN0cnVjdCBicGZfbWFwICp4c2ttYXBfcngsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBicGZfbWFwICp4c2ttYXBfdHgsIHUzMiBuYl9zb2NrZXRzLFxcbitcXHRcXHRcXHRcXHRzaGFyZWRfdW1lbV9zZXFfZm4gc2VxX2ZuLCBzaGFyZWRfdW1lbV9wb3N0X2ZuIHBvc3RfZm4sXFxuK1xcdFxcdFxcdFxcdGNvbnN0IHZvaWQgKmN0eClcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0dGVzdC1cXHUwMDNldG90YWxfc3RlcHMgPSAxO1xcbitcXHR0ZXN0LVxcdTAwM2VuYl9zb2NrZXRzID0gbmJfc29ja2V0cztcXG4rXFxuK1xcdHRlc3Rfc3BlY19zZXRfeGRwX3Byb2codGVzdCwgeGRwX3Byb2dfcngsIHhkcF9wcm9nX3R4LCB4c2ttYXBfcngsIHhza21hcF90eCk7XFxuK1xcbitcXHRyZXQgPSBzaGFyZWRfdW1lbV90ZXN0X3ByZXBhcmUodGVzdCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBzZXFfZm4odGVzdCwgY3R4KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHRlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyh0ZXN0KTtcXG4rXFx0aWYgKHBvc3RfZm4pXFxuK1xcdFxcdHJldCA9IHBvc3RfZm4odGVzdCwgcmV0LCBjdHgpO1xcbitcXG4rXFx0cmVsZWFzZV9ldmVuX29kZF9zZXF1ZW5jZSh0ZXN0KTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtXzRfc29ja2V0cyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxcbit7XFxuK1xcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3J4ID0gdGVzdC1cXHUwMDNlaWZvYmpfcngtXFx1MDAzZXhkcF9wcm9ncztcXG4rXFx0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfdHggPSB0ZXN0LVxcdTAwM2VpZm9ial90eC1cXHUwMDNleGRwX3Byb2dzO1xcbitcXG4rXFx0cmV0dXJuIHJ1bl9zaGFyZWRfdW1lbV90ZXN0KHRlc3QsIHNrZWxfcngtXFx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sXFxuK1xcdFxcdFxcdFxcdCAgICBza2VsX3R4LVxcdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLCBza2VsX3J4LVxcdTAwM2VtYXBzLnhzayxcXG4rXFx0XFx0XFx0XFx0ICAgIHNrZWxfdHgtXFx1MDAzZW1hcHMueHNrLCA0LCBzaGFyZWRfdW1lbV9zZXFfZXZlbl9vZGQsIE5VTEwsIE5VTEwpO1xcbit9XFxuK1xcbitpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcXG4re1xcbitcXHRzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF9yeCA9IHRlc3QtXFx1MDAzZWlmb2JqX3J4LVxcdTAwM2V4ZHBfcHJvZ3M7XFxuK1xcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3R4ID0gdGVzdC1cXHUwMDNlaWZvYmpfdHgtXFx1MDAzZXhkcF9wcm9ncztcXG4rXFx0Y29uc3Qgc3RydWN0IHNoYXJlZF91bWVtX2xlbl9jdHggbGVuX2N0eCA9IHtcXG4rXFx0XFx0LnNob3J0X2xlbiA9IE1JTl9QS1RfU0laRSxcXG4rXFx0XFx0LmxvbmdfbGVuID0gTUlOX1BLVF9TSVpFICogMixcXG4rXFx0fTtcXG4rXFxuK1xcdHJldHVybiBydW5fc2hhcmVkX3VtZW1fdGVzdCh0ZXN0LCBza2VsX3J4LVxcdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtX2xlbmd0aF9iYXNlZCxcXG4rXFx0XFx0XFx0XFx0ICAgIHNrZWxfdHgtXFx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkLFxcbitcXHRcXHRcXHRcXHQgICAgc2tlbF9yeC1cXHUwMDNlbWFwcy54c2ssIHNrZWxfdHgtXFx1MDAzZW1hcHMueHNrLCAyLCBzaGFyZWRfdW1lbV9zZXFfbGVuLFxcbitcXHRcXHRcXHRcXHQgICAgTlVMTCwgXFx1MDAyNmxlbl9jdHgpO1xcbit9XFxuK1xcbitpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV91bmV2ZW5fZGlzdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxcbit7XFxuK1xcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3J4ID0gdGVzdC1cXHUwMDNlaWZvYmpfcngtXFx1MDAzZXhkcF9wcm9ncztcXG4rXFx0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfdHggPSB0ZXN0LVxcdTAwM2VpZm9ial90eC1cXHUwMDNleGRwX3Byb2dzO1xcbitcXHRjb25zdCBzdHJ1Y3Qgc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3RfY3R4IHVuZXZlbl9kaXN0X2N0eCA9IHtcXG4rXFx0XFx0LnRvdGFsX3BrdHMgPSBERUZBVUxUX1BLVF9DTlQgKiA0LFxcbitcXHRcXHQucGt0X2xlbiA9IE1JTl9QS1RfU0laRSxcXG4rXFx0fTtcXG4rXFxuK1xcdHJldHVybiBydW5fc2hhcmVkX3VtZW1fdGVzdCh0ZXN0LCBza2VsX3J4LVxcdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLFxcbitcXHRcXHRcXHRcXHQgICAgc2tlbF90eC1cXHUwMDNlcHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSwgc2tlbF9yeC1cXHUwMDNlbWFwcy54c2ssXFxuK1xcdFxcdFxcdFxcdCAgICBza2VsX3R4LVxcdTAwM2VtYXBzLnhzaywgMiwgc2hhcmVkX3VtZW1fc2VxX3VuZXZlbl9kaXN0LFxcbitcXHRcXHRcXHRcXHQgICAgc2hhcmVkX3VtZW1fcG9zdF91bmV2ZW5fZGlzdCwgXFx1MDAyNnVuZXZlbl9kaXN0X2N0eCk7XFxuK31cXG4rXFxuK2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX3VuYWxpZ25lZChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxcbit7XFxuK1xcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3J4ID0gdGVzdC1cXHUwMDNlaWZvYmpfcngtXFx1MDAzZXhkcF9wcm9ncztcXG4rXFx0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfdHggPSB0ZXN0LVxcdTAwM2VpZm9ial90eC1cXHUwMDNleGRwX3Byb2dzO1xcbitcXHRzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdHhfdW1lbSA9IHRlc3QtXFx1MDAzZWlmb2JqX3R4IFxcdTAwMjZcXHUwMDI2IHRlc3QtXFx1MDAzZWlmb2JqX3R4LVxcdTAwM2V4c2sgP1xcbitcXHRcXHR0ZXN0LVxcdTAwM2VpZm9ial90eC1cXHUwMDNleHNrLVxcdTAwM2V1bWVtIDogTlVMTDtcXG4rXFx0c3RydWN0IHhza191bWVtX2luZm8gKnJ4X3VtZW0gPSB0ZXN0LVxcdTAwM2VpZm9ial9yeCBcXHUwMDI2XFx1MDAyNiB0ZXN0LVxcdTAwM2VpZm9ial9yeC1cXHUwMDNleHNrID9cXG4rXFx0XFx0dGVzdC1cXHUwMDNlaWZvYmpfcngtXFx1MDAzZXhzay1cXHUwMDNldW1lbSA6IE5VTEw7XFxuK1xcdGJvb2wgdHhfdW5hbGlnbmVkID0gdHhfdW1lbSA/IHR4X3VtZW0tXFx1MDAzZXVuYWxpZ25lZF9tb2RlIDogZmFsc2U7XFxuK1xcdGJvb2wgcnhfdW5hbGlnbmVkID0gcnhfdW1lbSA/IHJ4X3VtZW0tXFx1MDAzZXVuYWxpZ25lZF9tb2RlIDogZmFsc2U7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHR0ZXN0X3NwZWNfc2V0X3VuYWxpZ25lZCh0ZXN0KTtcXG4rXFxuK1xcdHJldCA9IHJ1bl9zaGFyZWRfdW1lbV90ZXN0KHRlc3QsIHNrZWxfcngtXFx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sXFxuK1xcdFxcdFxcdFxcdCAgIHNrZWxfdHgtXFx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sIHNrZWxfcngtXFx1MDAzZW1hcHMueHNrLFxcbitcXHRcXHRcXHRcXHQgICBza2VsX3R4LVxcdTAwM2VtYXBzLnhzaywgMiwgc2hhcmVkX3VtZW1fc2VxX2V2ZW5fb2RkLCBOVUxMLCBOVUxMKTtcXG4rXFxuK1xcdGlmICh0eF91bWVtKVxcbitcXHRcXHR0eF91bWVtLVxcdTAwM2V1bmFsaWduZWRfbW9kZSA9IHR4X3VuYWxpZ25lZDtcXG4rXFx0aWYgKHJ4X3VtZW0pXFxuK1xcdFxcdHJ4X3VtZW0tXFx1MDAzZXVuYWxpZ25lZF9tb2RlID0gcnhfdW5hbGlnbmVkO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gaW50IHRlc3RhcHBfcG9sbF90eHFfdG1vdXQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcXG4ge1xcbiBcXHRib29sIHNoYXJlZF91bWVtID0gdGVzdC1cXHUwMDNlaWZvYmpfdHgtXFx1MDAzZXNoYXJlZF91bWVtO1xcbkBAIC0yNDk4LDkgKzI4MjksOCBAQCBpbnQgdGVzdGFwcF9od19zd19tYXhfcmluZ19zaXplKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXFxuIFxcdHRlc3QtXFx1MDAzZWlmb2JqX3R4LVxcdTAwM2V4c2stXFx1MDAzZWJhdGNoX3NpemUgPSB0ZXN0LVxcdTAwM2VpZm9ial90eC1cXHUwMDNlcmluZy50eF9tYXhfcGVuZGluZyAtIDg7XFxuIFxcdHRlc3QtXFx1MDAzZWlmb2JqX3J4LVxcdTAwM2V4c2stXFx1MDAzZWJhdGNoX3NpemUgPSB0ZXN0LVxcdTAwM2VpZm9ial90eC1cXHUwMDNlcmluZy50eF9tYXhfcGVuZGluZyAtIDg7XFxuIFxcdGlmIChwa3Rfc3RyZWFtX3JlcGxhY2UodGVzdCwgbWF4X2Rlc2NzLCBNSU5fUEtUX1NJWkUpKSB7XFxuLVxcdFxcdGNsZWFuX3NvY2tldHModGVzdCwgdGVzdC1cXHUwMDNlaWZvYmpfdHgpO1xcbi1cXHRcXHRjbGVhbl9zb2NrZXRzKHRlc3QsIHRlc3QtXFx1MDAzZWlmb2JqX3J4KTtcXG4tXFx0XFx0Y2xlYW5fdW1lbSh0ZXN0LCB0ZXN0LVxcdTAwM2VpZm9ial9yeCwgdGVzdC1cXHUwMDNlaWZvYmpfdHgpO1xcbitcXHRcXHR4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIHRlc3QtXFx1MDAzZWlmb2JqX3R4KTtcXG4rXFx0XFx0eHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCB0ZXN0LVxcdTAwM2VpZm9ial9yeCk7XFxuIFxcdFxcdHJldHVybiBURVNUX0ZBSUxVUkU7XFxuIFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5oXFxuaW5kZXggMDM3NTNkZGM1ZGNkYS4uZWY5YzQyMmQ3NzYzZSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suaFxcbkBAIC00LDYgKzQsNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V0aHRvb2wuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX3hkcC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcmVmY291bnQuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCIuLi9rc2VsZnRlc3QuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInhzay5oXFxcIlxcbkBAIC03OSw2ICs4MCw5IEBAIHN0cnVjdCB0ZXN0X3NwZWM7XFxuIHR5cGVkZWYgaW50ICgqdmFsaWRhdGlvbl9mdW5jX3QpKHN0cnVjdCBpZm9iamVjdCAqaWZvYmopO1xcbiB0eXBlZGVmIHZvaWQgKigqdGhyZWFkX2Z1bmNfdCkodm9pZCAqYXJnKTtcXG4gdHlwZWRlZiBpbnQgKCp0ZXN0X2Z1bmNfdCkoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XFxuK3R5cGVkZWYgaW50ICgqc2hhcmVkX3VtZW1fc2VxX2ZuKShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCB2b2lkICpjdHgpO1xcbit0eXBlZGVmIGludCAoKnNoYXJlZF91bWVtX3Bvc3RfZm4pKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIGludCByZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHZvaWQgKmN0eCk7XFxuIFxcbiBzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvIHtcXG4gXFx0c3RydWN0IHhza19yaW5nX2NvbnMgcng7XFxuQEAgLTEwNCw2ICsxMDgsNyBAQCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyB7XFxuIFxcdHN0cnVjdCB4c2tfdW1lbSAqdW1lbTtcXG4gXFx0dTY0IG5leHRfYnVmZmVyO1xcbiBcXHR1NjQgbW1hcF9zaXplO1xcbitcXHRyZWZjb3VudF90IHVzZXJzO1xcbiBcXHR1MzIgbnVtX2ZyYW1lcztcXG4gXFx0dTMyIGZyYW1lX2hlYWRyb29tO1xcbiBcXHR2b2lkICpidWZmZXI7XFxuQEAgLTE1OSw2ICsxNjQsNyBAQCBpbnQgaW5pdF9pZmFjZShzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqLCB0aHJlYWRfZnVuY190IGZ1bmNfcHRyKTtcXG4gaW50IHhza19jb25maWd1cmVfdW1lbShzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqLCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbSwgdm9pZCAqYnVmZmVyLCB1NjQgc2l6ZSk7XFxuIGludCB4c2tfY29uZmlndXJlX3NvY2tldChzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2ssIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtLFxcbiBcXHRcXHRcXHQgc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdCwgYm9vbCBzaGFyZWQpO1xcbit2b2lkIHhza19kZWxldGVfc29ja2V0KHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzayk7XFxuIFxcbiBcXG4gc3RydWN0IHBrdCB7XFxuQEAgLTE3OSw2ICsxODUsMTYgQEAgc3RydWN0IHBrdF9zdHJlYW0ge1xcbiBcXHRib29sIHZlcmJhdGltO1xcbiB9O1xcbiBcXG4rc3RydWN0IHNoYXJlZF91bWVtX2xlbl9jdHgge1xcbitcXHR1MzIgc2hvcnRfbGVuO1xcbitcXHR1MzIgbG9uZ19sZW47XFxuK307XFxuK1xcbitzdHJ1Y3Qgc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3RfY3R4IHtcXG4rXFx0dTMyIHRvdGFsX3BrdHM7XFxuK1xcdHUzMiBwa3RfbGVuO1xcbit9O1xcbitcXG4gc3RhdGljIGlubGluZSBib29sIHBrdF9jb250aW51ZXModTMyIG9wdGlvbnMpXFxuIHtcXG4gXFx0cmV0dXJuIG9wdGlvbnMgXFx1MDAyNiBYRFBfUEtUX0NPTlREO1xcbkBAIC0yNjgsNiArMjg0LDEwIEBAIGludCB0ZXN0YXBwX3hkcF9tZXRhZGF0YShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTtcXG4gaW50IHRlc3RhcHBfeGRwX21ldGFkYXRhX21iKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xcbiBpbnQgdGVzdGFwcF94ZHBfcHJvZ19jbGVhbnVwKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xcbiBpbnQgdGVzdGFwcF94ZHBfc2hhcmVkX3VtZW0oc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XFxuK2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtXzRfc29ja2V0cyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTtcXG4raW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xcbitpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV91bmV2ZW5fZGlzdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTtcXG4raW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5hbGlnbmVkKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xcbiBcXG4gdm9pZCAqd29ya2VyX3Rlc3RhcHBfdmFsaWRhdGVfcngodm9pZCAqYXJnKTtcXG4gdm9pZCAqd29ya2VyX3Rlc3RhcHBfdmFsaWRhdGVfdHgodm9pZCAqYXJnKTtcXG5AQCAtMjkxLDYgKzMxMSwxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHRlc3Rfc3BlYyB0ZXN0c1tdID0ge1xcbiBcXHR7Lm5hbWUgPSBcXFwiWERQX1BST0dfQ0xFQU5VUFxcXCIsIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3hkcF9wcm9nX2NsZWFudXB9LFxcbiBcXHR7Lm5hbWUgPSBcXFwiWERQX0RST1BfSEFMRlxcXCIsIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3hkcF9kcm9wfSxcXG4gXFx0ey5uYW1lID0gXFxcIlhEUF9TSEFSRURfVU1FTVxcXCIsIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3hkcF9zaGFyZWRfdW1lbX0sXFxuK1xcdHsubmFtZSA9IFxcXCJTSEFSRURfVU1FTV80X1NPQ0tFVFNcXFwiLCAudGVzdF9mdW5jID0gdGVzdGFwcF9zaGFyZWRfdW1lbV80X3NvY2tldHN9LFxcbitcXHR7Lm5hbWUgPSBcXFwiU0hBUkVEX1VNRU1fTEVOR1RIX0JBU0VEXFxcIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkfSxcXG4rXFx0ey5uYW1lID0gXFxcIlNIQVJFRF9VTUVNX1VORVZFTl9ESVNUXFxcIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3R9LFxcbitcXHR7Lm5hbWUgPSBcXFwiU0hBUkVEX1VNRU1fVU5BTElHTkVEXFxcIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5hbGlnbmVkfSxcXG4gXFx0ey5uYW1lID0gXFxcIlhEUF9NRVRBREFUQV9DT1BZXFxcIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfeGRwX21ldGFkYXRhfSxcXG4gXFx0ey5uYW1lID0gXFxcIlhEUF9NRVRBREFUQV9DT1BZX01VTFRJX0JVRkZcXFwiLCAudGVzdF9mdW5jID0gdGVzdGFwcF94ZHBfbWV0YWRhdGFfbWJ9LFxcbiBcXHR7Lm5hbWUgPSBcXFwiQUxJR05FRF9JTlZfREVTQ19NVUxUSV9CVUZGXFxcIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfYWxpZ25lZF9pbnZfZGVzY19tYn0sXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94c2tfeGRwX3Byb2dzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveHNrX3hkcF9wcm9ncy5jXFxuaW5kZXggMDIzZDhiZWZkNGNhYi4uNTQzYjYxZGYzYTJiMSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveHNrX3hkcF9wcm9ncy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hza194ZHBfcHJvZ3MuY1xcbkBAIC0xMCw3ICsxMCw3IEBAXFxuIFxcbiBzdHJ1Y3Qge1xcbiBcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1hTS01BUCk7XFxuLVxcdF9fdWludChtYXhfZW50cmllcywgMik7XFxuK1xcdF9fdWludChtYXhfZW50cmllcywgTUFYX1NPQ0tFVFMpO1xcbiBcXHRfX3VpbnQoa2V5X3NpemUsIHNpemVvZihpbnQpKTtcXG4gXFx0X191aW50KHZhbHVlX3NpemUsIHNpemVvZihpbnQpKTtcXG4gfSB4c2sgU0VDKFxcXCIubWFwc1xcXCIpO1xcbkBAIC03NSw2ICs3NSwyMyBAQCBTRUMoXFxcInhkcFxcXCIpIGludCB4c2tfeGRwX3NoYXJlZF91bWVtKHN0cnVjdCB4ZHBfbWQgKnhkcClcXG4gXFx0cmV0dXJuIGJwZl9yZWRpcmVjdF9tYXAoXFx1MDAyNnhzaywgaWR4LCBYRFBfRFJPUCk7XFxuIH1cXG4gXFxuK1NFQyhcXFwieGRwXFxcIikgaW50IHhza194ZHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkKHN0cnVjdCB4ZHBfbWQgKnhkcClcXG4re1xcbitcXHR2b2lkICpkYXRhID0gKHZvaWQgKikobG9uZyl4ZHAtXFx1MDAzZWRhdGE7XFxuK1xcdHZvaWQgKmRhdGFfZW5kID0gKHZvaWQgKikobG9uZyl4ZHAtXFx1MDAzZWRhdGFfZW5kO1xcbitcXHRfX3UzMiBwa3RfbGVuID0gZGF0YV9lbmQgLSBkYXRhO1xcbitcXG4rXFx0LyogXFxuK1xcdCAqIFJvdXRlIHBhY2tldHMgYnkgdG90YWwgWERQLXZpc2libGUgcGFja2V0IGxlbmd0aCAoZGF0YV9lbmQgLSBkYXRhKTpcXG4rXFx0ICogLSBTb2NrZXQgMDogcGFja2V0cyBcXHUwMDNjPSBTSEFSRURfVU1FTV9MRU5fU1BMSVQgYnl0ZXNcXG4rXFx0ICogLSBTb2NrZXQgMTogcGFja2V0cyBcXHUwMDNlIFNIQVJFRF9VTUVNX0xFTl9TUExJVCBieXRlc1xcbitcXHQgKi9cXG4rXFx0aWYgKHBrdF9sZW4gXFx1MDAzYz0gU0hBUkVEX1VNRU1fTEVOX1NQTElUKVxcbitcXHRcXHRyZXR1cm4gYnBmX3JlZGlyZWN0X21hcChcXHUwMDI2eHNrLCAwLCBYRFBfRFJPUCk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cmV0dXJuIGJwZl9yZWRpcmVjdF9tYXAoXFx1MDAyNnhzaywgMSwgWERQX0RST1ApO1xcbit9XFxuK1xcbiBTRUMoXFxcInhkcC5mcmFnc1xcXCIpIGludCB4c2tfeGRwX2FkanVzdF90YWlsKHN0cnVjdCB4ZHBfbWQgKnhkcClcXG4ge1xcbiBcXHRfX3UzMiBidWZmX2xlbiwgY3Vycl9idWZmX2xlbjtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza194ZHBfY29tbW9uLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNrX3hkcF9jb21tb24uaFxcbmluZGV4IDQ1ODEwZmY1NTJkYWUuLmJkOWI1ZGNmOGM4ZWUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza194ZHBfY29tbW9uLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNrX3hkcF9jb21tb24uaFxcbkBAIC0zLDcgKzMsOCBAQFxcbiAjaWZuZGVmIFhTS19YRFBfQ09NTU9OX0hfXFxuICNkZWZpbmUgWFNLX1hEUF9DT01NT05fSF9cXG4gXFxuLSNkZWZpbmUgTUFYX1NPQ0tFVFMgMlxcbisjZGVmaW5lIE1BWF9TT0NLRVRTIDRcXG4rI2RlZmluZSBTSEFSRURfVU1FTV9MRU5fU1BMSVQgNjRcXG4gI2RlZmluZSBQS1RfSERSX0FMSUdOIChzaXplb2Yoc3RydWN0IGV0aGhkcikgKyAyKSAvKiBKdXN0IHRvIGFsaWduIHRoZSBkYXRhIGluIHRoZSBwYWNrZXQgKi9cXG4gXFxuIHN0cnVjdCB4ZHBfaW5mbyB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2t4Y2VpdmVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNreGNlaXZlci5jXFxuaW5kZXggN2RhZDg1NTZhNzIyZS4uZWQ3NzE2YjYzNzU2NyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNreGNlaXZlci5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza3hjZWl2ZXIuY1xcbkBAIC0xMTcsMTIgKzExNywxMyBAQCBzdGF0aWMgdm9pZCBfX2V4aXRfd2l0aF9lcnJvcihpbnQgZXJyb3IsIGNvbnN0IGNoYXIgKmZpbGUsIGNvbnN0IGNoYXIgKmZ1bmMsIGludFxcbiBcXG4gI2RlZmluZSBleGl0X3dpdGhfZXJyb3IoZXJyb3IpIF9fZXhpdF93aXRoX2Vycm9yKGVycm9yLCBfX0ZJTEVfXywgX19mdW5jX18sIF9fTElORV9fKVxcbiBcXG4tc3RhdGljIGJvb2wgaWZvYmpfemNfYXZhaWwoc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdClcXG4rc3RhdGljIGJvb2wgaWZvYmpfemNfYXZhaWwoc3RydWN0IGlmb2JqZWN0ICppZm9iailcXG4ge1xcbiBcXHRzaXplX3QgdW1lbV9zeiA9IERFRkFVTFRfVU1FTV9CVUZGRVJTICogWFNLX1VNRU1fX0RFRkFVTFRfRlJBTUVfU0laRTtcXG4gXFx0aW50IG1tYXBfZmxhZ3MgPSBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMgfCBNQVBfTk9SRVNFUlZFO1xcbi1cXHRzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2s7XFxuLVxcdHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtO1xcbitcXHRzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvIHhzayA9IHt9O1xcbitcXHRzdHJ1Y3QgeHNrX3VtZW1faW5mbyB1bWVtX2luZm8gPSB7fTtcXG4rXFx0c3RydWN0IHhza191bWVtX2luZm8gKnVtZW0gPSBcXHUwMDI2dW1lbV9pbmZvO1xcbiBcXHRib29sIHpjX2F2YWlsID0gZmFsc2U7XFxuIFxcdHZvaWQgKmJ1ZnM7XFxuIFxcdGludCByZXQ7XFxuQEAgLTEzMSwzMiArMTMyLDIyIEBAIHN0YXRpYyBib29sIGlmb2JqX3pjX2F2YWlsKHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QpXFxuIFxcdGlmIChidWZzID09IE1BUF9GQUlMRUQpXFxuIFxcdFxcdGV4aXRfd2l0aF9lcnJvcihlcnJubyk7XFxuIFxcbi1cXHR1bWVtID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgeHNrX3VtZW1faW5mbykpO1xcbi1cXHRpZiAoIXVtZW0pIHtcXG4tXFx0XFx0bXVubWFwKGJ1ZnMsIHVtZW1fc3opO1xcbi1cXHRcXHRleGl0X3dpdGhfZXJyb3IoRU5PTUVNKTtcXG4tXFx0fVxcbitcXHR1bWVtLVxcdTAwM2VtbWFwX3NpemUgPSB1bWVtX3N6O1xcbiBcXHR1bWVtLVxcdTAwM2VmcmFtZV9zaXplID0gWFNLX1VNRU1fX0RFRkFVTFRfRlJBTUVfU0laRTtcXG4tXFx0cmV0ID0geHNrX2NvbmZpZ3VyZV91bWVtKGlmb2JqZWN0LCB1bWVtLCBidWZzLCB1bWVtX3N6KTtcXG4rXFx0cmV0ID0geHNrX2NvbmZpZ3VyZV91bWVtKGlmb2JqLCB1bWVtLCBidWZzLCB1bWVtX3N6KTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0ZXhpdF93aXRoX2Vycm9yKC1yZXQpO1xcbiBcXG4tXFx0eHNrID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvKSk7XFxuLVxcdGlmICgheHNrKVxcbi1cXHRcXHRnb3RvIG91dDtcXG4tXFx0aWZvYmplY3QtXFx1MDAzZWJpbmRfZmxhZ3MgPSBYRFBfVVNFX05FRURfV0FLRVVQIHwgWERQX1pFUk9DT1BZO1xcbi1cXHRpZm9iamVjdC1cXHUwMDNlcnhfb24gPSB0cnVlO1xcbi1cXHR4c2stXFx1MDAzZXJ4cXNpemUgPSBYU0tfUklOR19DT05TX19ERUZBVUxUX05VTV9ERVNDUztcXG4tXFx0cmV0ID0geHNrX2NvbmZpZ3VyZV9zb2NrZXQoeHNrLCB1bWVtLCBpZm9iamVjdCwgZmFsc2UpO1xcbitcXHRpZm9iai1cXHUwMDNlYmluZF9mbGFncyA9IFhEUF9VU0VfTkVFRF9XQUtFVVAgfCBYRFBfWkVST0NPUFk7XFxuK1xcdGlmb2JqLVxcdTAwM2VyeF9vbiA9IHRydWU7XFxuK1xcdHhzay5yeHFzaXplID0gWFNLX1JJTkdfQ09OU19fREVGQVVMVF9OVU1fREVTQ1M7XFxuK1xcdHJldCA9IHhza19jb25maWd1cmVfc29ja2V0KFxcdTAwMjZ4c2ssIHVtZW0sIGlmb2JqLCBmYWxzZSk7XFxuIFxcdGlmICghcmV0KVxcbiBcXHRcXHR6Y19hdmFpbCA9IHRydWU7XFxuIFxcbi1cXHR4c2tfc29ja2V0X19kZWxldGUoeHNrLVxcdTAwM2V4c2spO1xcbi1cXHRmcmVlKHhzayk7XFxuLW91dDpcXG4tXFx0bXVubWFwKHVtZW0tXFx1MDAzZWJ1ZmZlciwgdW1lbV9zeik7XFxuLVxcdHhza191bWVtX19kZWxldGUodW1lbS1cXHUwMDNldW1lbSk7XFxuLVxcdGZyZWUodW1lbSk7XFxuK1xcdC8qIFVzZSB0aGUgc2FtZSByZWZjb3VudC1iYXNlZCB0ZWFyZG93biBwYXRoIGZvciBib3RoIHN1Y2Nlc3MgYW5kIGZhaWx1cmUuICovXFxuK1xcdHhza19kZWxldGVfc29ja2V0KFxcdTAwMjZ4c2spO1xcbitcXG4gXFx0cmV0dXJuIHpjX2F2YWlsO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjo1NzoyOC4xNjQwMzEwNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEzNDM5ODcxODI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEJQRiBzZWxmdGVzdHMgKHVzZXJzcGFjZSB0ZXN0IHByb2dyYW1zIGFuZCB0ZXN0IEJQRiBwcm9ncmFtcykgYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkZjI0Y2IxMWNjMjYxN2ZlMmE2ZjI2MjQ5YzQ0ODdlNjk5MzNmNGFmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAxNjo1NzoyNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jXG5pbmRleCA0NzdhZWRiYjAxYmFkLi5jY2ZkOWU4NDM2YTdiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xuQEAgLTEwMSw2ICsxMDEsNyBAQCBpbnQgeHNrX2NvbmZpZ3VyZV91bWVtKHN0cnVjdCBpZm9iamVjdCAqaWZvYmosIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtLCB2b2lkXG4gXHRcdHJldHVybiByZXQ7XG4gXG4gXHR1bWVtLVx1MDAzZWJ1ZmZlciA9IGJ1ZmZlcjtcbitcdHJlZmNvdW50X3NldChcdTAwMjZ1bWVtLVx1MDAzZXVzZXJzLCAxKTtcbiBcdGlmIChpZm9iai1cdTAwM2VzaGFyZWRfdW1lbSBcdTAwMjZcdTAwMjYgaWZvYmotXHUwMDNlcnhfb24pIHtcbiBcdFx0dW1lbS1cdTAwM2ViYXNlX2FkZHIgPSB1bWVtX3NpemUodW1lbSk7XG4gXHRcdHVtZW0tXHUwMDNlbmV4dF9idWZmZXIgPSB1bWVtX3NpemUodW1lbSk7XG5AQCAtMTU0LDYgKzE1NSw3IEBAIGludCB4c2tfY29uZmlndXJlX3NvY2tldChzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2ssIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtXG4gXHRzdHJ1Y3QgeHNrX3NvY2tldF9jb25maWcgY2ZnID0ge307XG4gXHRzdHJ1Y3QgeHNrX3JpbmdfY29ucyAqcnhyO1xuIFx0c3RydWN0IHhza19yaW5nX3Byb2QgKnR4cjtcbitcdGludCByZXQ7XG4gXG4gXHR4c2stXHUwMDNldW1lbSA9IHVtZW07XG4gXHRjZmcucnhfc2l6ZSA9IHhzay1cdTAwM2VyeHFzaXplO1xuQEAgLTE3MCw3ICsxNzIsMjEgQEAgaW50IHhza19jb25maWd1cmVfc29ja2V0KHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzaywgc3RydWN0IHhza191bWVtX2luZm8gKnVtZW1cbiBcbiBcdHR4ciA9IGlmb2JqZWN0LVx1MDAzZXR4X29uID8gXHUwMDI2eHNrLVx1MDAzZXR4IDogTlVMTDtcbiBcdHJ4ciA9IGlmb2JqZWN0LVx1MDAzZXJ4X29uID8gXHUwMDI2eHNrLVx1MDAzZXJ4IDogTlVMTDtcbi1cdHJldHVybiB4c2tfc29ja2V0X19jcmVhdGUoXHUwMDI2eHNrLVx1MDAzZXhzaywgaWZvYmplY3QtXHUwMDNlaWZpbmRleCwgMCwgdW1lbS1cdTAwM2V1bWVtLCByeHIsIHR4ciwgXHUwMDI2Y2ZnKTtcbitcdHJldCA9IHhza19zb2NrZXRfX2NyZWF0ZShcdTAwMjZ4c2stXHUwMDNleHNrLCBpZm9iamVjdC1cdTAwM2VpZmluZGV4LCAwLCB1bWVtLVx1MDAzZXVtZW0sIHJ4ciwgdHhyLCBcdTAwMjZjZmcpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRpZiAoc2hhcmVkKVxuK1x0XHRcdC8qIFNoYXJlZCBzb2NrZXQgZmFpbGVkIGJlZm9yZSBhY3F1aXJpbmcgYSBVTUVNIHJlZmVyZW5jZS4gKi9cbitcdFx0XHR4c2stXHUwMDNldW1lbSA9IE5VTEw7XG4rXG4rXHRcdC8qIEtlZXAgZmFpbGVkIHNvY2tldCBzdGF0ZSBpbmVydCBmb3IgbGF0ZXIgY2xlYW51cCBwYXRocy4gKi9cbitcdFx0eHNrLVx1MDAzZXhzayA9IE5VTEw7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRpZiAoc2hhcmVkKVxuK1x0XHRyZWZjb3VudF9pbmMoXHUwMDI2dW1lbS1cdTAwM2V1c2Vycyk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW50IHNldF9yaW5nX3NpemUoc3RydWN0IGlmb2JqZWN0ICppZm9iailcbkBAIC0yMDMsNiArMjE5LDEyIEBAIGludCBod19yaW5nX3NpemVfcmVzZXQoc3RydWN0IGlmb2JqZWN0ICppZm9iailcbiBzdGF0aWMgdm9pZCBfX3Rlc3Rfc3BlY19pbml0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmpfdHgsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqX3J4KVxuIHtcbitcdC8qXG4rXHQgKiBLZWVwIHRoZSBzYW1lIGRlZmF1bHQgYXMgeHNreGNlaXZlciBzdGFydHVwOiB3aGVuIFRYIGFuZCBSWCBzaGFyZSB0aGUgc2FtZSBuZXRkZXYsXG4rXHQgKiBzaGFyZWQgVU1FTSBpcyB0aGUgYmFzZWxpbmUgbW9kZSBmb3IgdGhpcyB0ZXN0IGhhcm5lc3MuIEluZGl2aWR1YWwgdGVzdHMgY2FuIHN0aWxsXG4rXHQgKiBvdmVycmlkZSB0aGlzIGFzIG5lZWRlZC5cbitcdCAqL1xuK1x0Ym9vbCBzaGFyZWRfZGVmYXVsdCA9IGlmb2JqX3R4LVx1MDAzZWlmaW5kZXggPT0gaWZvYmpfcngtXHUwMDNlaWZpbmRleDtcbiBcdHUzMiBpLCBqO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUFYX0lOVEVSRkFDRVM7IGkrKykge1xuQEAgLTIxNCw2ICsyMzYsNyBAQCBzdGF0aWMgdm9pZCBfX3Rlc3Rfc3BlY19pbml0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmpfdHgsXG4gXHRcdGlmb2JqLVx1MDAzZXVzZV9maWxsX3JpbmcgPSB0cnVlO1xuIFx0XHRpZm9iai1cdTAwM2VyZWxlYXNlX3J4ID0gdHJ1ZTtcbiBcdFx0aWZvYmotXHUwMDNldmFsaWRhdGlvbl9mdW5jID0gTlVMTDtcbitcdFx0aWZvYmotXHUwMDNlc2hhcmVkX3VtZW0gPSBzaGFyZWRfZGVmYXVsdDtcbiBcdFx0aWZvYmotXHUwMDNldXNlX21ldGFkYXRhID0gZmFsc2U7XG4gXG4gXHRcdGlmIChpID09IDApIHtcbkBAIC01NzQsMjYgKzU5NywxMjIgQEAgc3RhdGljIGludCBwa3Rfc3RyZWFtX3JlY2VpdmVfaGFsZihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuIFxuIHN0YXRpYyBpbnQgcGt0X3N0cmVhbV9ldmVuX29kZF9zZXF1ZW5jZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuIHtcbitcdHN0cnVjdCBwa3Rfc3RyZWFtICp0eF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9O1xuK1x0c3RydWN0IHBrdF9zdHJlYW0gKnJ4X3N0cmVhbXNbTUFYX1NPQ0tFVFNdID0ge307XG4gXHRzdHJ1Y3QgcGt0X3N0cmVhbSAqcGt0X3N0cmVhbTtcbiBcdHUzMiBpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGVzdC1cdTAwM2VuYl9zb2NrZXRzOyBpKyspIHtcbiBcdFx0cGt0X3N0cmVhbSA9IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtO1xuLVx0XHRwa3Rfc3RyZWFtID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tXHUwMDNlbmJfcGt0cyAvIDIsXG4tXHRcdFx0XHRcdFx0ICAgcGt0X3N0cmVhbS1cdTAwM2Vwa3RzWzBdLmxlbiwgaSwgMik7XG4tXHRcdGlmICghcGt0X3N0cmVhbSlcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdFx0dGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSBwa3Rfc3RyZWFtO1xuK1x0XHR0eF9zdHJlYW1zW2ldID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tXHUwMDNlbmJfcGt0cyAvIDIsXG4rXHRcdFx0XHRcdFx0ICAgICAgcGt0X3N0cmVhbS1cdTAwM2Vwa3RzWzBdLmxlbiwgaSwgMik7XG4rXHRcdGlmICghdHhfc3RyZWFtc1tpXSlcbitcdFx0XHRnb3RvIGVycjtcbiBcbiBcdFx0cGt0X3N0cmVhbSA9IHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtO1xuLVx0XHRwa3Rfc3RyZWFtID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tXHUwMDNlbmJfcGt0cyAvIDIsXG4tXHRcdFx0XHRcdFx0ICAgcGt0X3N0cmVhbS1cdTAwM2Vwa3RzWzBdLmxlbiwgaSwgMik7XG4tXHRcdGlmICghcGt0X3N0cmVhbSlcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdFx0dGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSBwa3Rfc3RyZWFtO1xuK1x0XHRyeF9zdHJlYW1zW2ldID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tXHUwMDNlbmJfcGt0cyAvIDIsXG4rXHRcdFx0XHRcdFx0ICAgICAgcGt0X3N0cmVhbS1cdTAwM2Vwa3RzWzBdLmxlbiwgaSwgMik7XG4rXHRcdGlmICghcnhfc3RyZWFtc1tpXSlcbitcdFx0XHRnb3RvIGVycjtcbitcdH1cbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlc3QtXHUwMDNlbmJfc29ja2V0czsgaSsrKSB7XG4rXHRcdHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtID0gdHhfc3RyZWFtc1tpXTtcbitcdFx0dGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSByeF9zdHJlYW1zW2ldO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyOlxuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGVzdC1cdTAwM2VuYl9zb2NrZXRzOyBpKyspIHtcbitcdFx0aWYgKHR4X3N0cmVhbXNbaV0pXG4rXHRcdFx0cGt0X3N0cmVhbV9kZWxldGUodHhfc3RyZWFtc1tpXSk7XG4rXHRcdGlmIChyeF9zdHJlYW1zW2ldKVxuK1x0XHRcdHBrdF9zdHJlYW1fZGVsZXRlKHJ4X3N0cmVhbXNbaV0pO1xuK1x0fVxuK1xuK1x0cmV0dXJuIC1FTk9NRU07XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGt0X3N0cmVhbV9sZW5fc2VxKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHUzMiBzaG9ydF9sZW4sIHUzMiBsb25nX2xlbilcbit7XG4rXHRzdHJ1Y3QgcGt0X3N0cmVhbSAqdHhfc3RyZWFtc1tNQVhfU09DS0VUU10gPSB7fTtcbitcdHN0cnVjdCBwa3Rfc3RyZWFtICpyeF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9O1xuK1x0c3RydWN0IHBrdF9zdHJlYW0gKnBrdF9zdHJlYW07XG4rXHR1MzIgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlc3QtXHUwMDNlbmJfc29ja2V0czsgaSsrKSB7XG4rXHRcdHUzMiBwa3RfbGVuID0gaSA/IGxvbmdfbGVuIDogc2hvcnRfbGVuO1xuK1xuK1x0XHRwa3Rfc3RyZWFtID0gdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW07XG4rXHRcdHR4X3N0cmVhbXNbaV0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUocGt0X3N0cmVhbS1cdTAwM2VuYl9wa3RzIC8gMiwgcGt0X2xlbiwgaSwgMik7XG4rXHRcdGlmICghdHhfc3RyZWFtc1tpXSlcbitcdFx0XHRnb3RvIGVycjtcbitcbitcdFx0cGt0X3N0cmVhbSA9IHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtO1xuK1x0XHRyeF9zdHJlYW1zW2ldID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tXHUwMDNlbmJfcGt0cyAvIDIsIHBrdF9sZW4sIGksIDIpO1xuK1x0XHRpZiAoIXJ4X3N0cmVhbXNbaV0pXG4rXHRcdFx0Z290byBlcnI7XG4rXHR9XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0ZXN0LVx1MDAzZW5iX3NvY2tldHM7IGkrKykge1xuK1x0XHR0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSA9IHR4X3N0cmVhbXNbaV07XG4rXHRcdHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtID0gcnhfc3RyZWFtc1tpXTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK1xuK2VycjpcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlc3QtXHUwMDNlbmJfc29ja2V0czsgaSsrKSB7XG4rXHRcdGlmICh0eF9zdHJlYW1zW2ldKVxuK1x0XHRcdHBrdF9zdHJlYW1fZGVsZXRlKHR4X3N0cmVhbXNbaV0pO1xuK1x0XHRpZiAocnhfc3RyZWFtc1tpXSlcbitcdFx0XHRwa3Rfc3RyZWFtX2RlbGV0ZShyeF9zdHJlYW1zW2ldKTtcbitcdH1cbitcbitcdHJldHVybiAtRU5PTUVNO1xuK31cbitcbitzdGF0aWMgaW50IHBrdF9zdHJlYW1fd2VpZ2h0ZWRfdW5ldmVuX2Rpc3Rfc2VxdWVuY2Uoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgdTMyIHRvdGFsX3BrdHMsXG4rXHRcdFx0XHRcdFx0ICAgIHUzMiBwa3RfbGVuKVxuK3tcbitcdHN0cnVjdCBwa3Rfc3RyZWFtICp0eF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9O1xuK1x0c3RydWN0IHBrdF9zdHJlYW0gKnJ4X3N0cmVhbXNbTUFYX1NPQ0tFVFNdID0ge307XG4rXHR1MzIgaSwgcGt0c19zb2NrMDtcbitcbitcdGlmICh0ZXN0LVx1MDAzZW5iX3NvY2tldHMgXHUwMDNjIDIgfHwgdG90YWxfcGt0cyBcdTAwM2MgNClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRwa3RzX3NvY2swID0gdG90YWxfcGt0cyAvIDQ7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0ZXN0LVx1MDAzZW5iX3NvY2tldHM7IGkrKykge1xuK1x0XHR1MzIgbmJfcGt0cyA9IChpID09IDApID8gcGt0c19zb2NrMCA6ICh0b3RhbF9wa3RzIC0gcGt0c19zb2NrMCk7XG4rXG4rXHRcdHR4X3N0cmVhbXNbaV0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUobmJfcGt0cywgcGt0X2xlbiwgaSwgMik7XG4rXHRcdGlmICghdHhfc3RyZWFtc1tpXSlcbitcdFx0XHRnb3RvIGVycjtcbitcbitcdFx0cnhfc3RyZWFtc1tpXSA9IF9fcGt0X3N0cmVhbV9nZW5lcmF0ZShuYl9wa3RzLCBwa3RfbGVuLCBpLCAyKTtcbitcdFx0aWYgKCFyeF9zdHJlYW1zW2ldKVxuK1x0XHRcdGdvdG8gZXJyO1xuK1x0fVxuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGVzdC1cdTAwM2VuYl9zb2NrZXRzOyBpKyspIHtcbitcdFx0dGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSB0eF9zdHJlYW1zW2ldO1xuK1x0XHR0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSA9IHJ4X3N0cmVhbXNbaV07XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbitcbitlcnI6XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0ZXN0LVx1MDAzZW5iX3NvY2tldHM7IGkrKykge1xuK1x0XHRpZiAodHhfc3RyZWFtc1tpXSlcbitcdFx0XHRwa3Rfc3RyZWFtX2RlbGV0ZSh0eF9zdHJlYW1zW2ldKTtcbitcdFx0aWYgKHJ4X3N0cmVhbXNbaV0pXG4rXHRcdFx0cGt0X3N0cmVhbV9kZWxldGUocnhfc3RyZWFtc1tpXSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gLUVOT01FTTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcmVsZWFzZV9ldmVuX29kZF9zZXF1ZW5jZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuQEAgLTE0NjgsNiArMTU4NywyOCBAQCBzdGF0aWMgaW50IHZhbGlkYXRlX3R4X2ludmFsaWRfZGVzY3Moc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdClcbiBcdHJldHVybiBURVNUX1BBU1M7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHhza19kZWxldGVfc29ja2V0X2JhdGNoKHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QsIHUzMiBjb3VudClcbit7XG4rXHR1MzIgaTtcbitcbitcdGlmICghaWZvYmplY3QpXG4rXHRcdHJldHVybjtcbitcbitcdGZvciAoaSA9IGNvdW50OyBpIFx1MDAzZSAwOyBpLS0pXG4rXHRcdHhza19kZWxldGVfc29ja2V0KFx1MDAyNmlmb2JqZWN0LVx1MDAzZXhza19hcnJbaSAtIDFdKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgeHNrX2NvbmZpZ3VyZV9yb2xsYmFjayhzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0LCBpbnQgbGFzdClcbit7XG4rXHR1MzIgY291bnQ7XG4rXG4rXHRpZiAoIWlmb2JqZWN0IHx8IGxhc3QgXHUwMDNjIDApXG4rXHRcdHJldHVybjtcbitcbitcdGNvdW50ID0gbGFzdCArIDE7XG4rXHR4c2tfZGVsZXRlX3NvY2tldF9iYXRjaChpZm9iamVjdCwgY291bnQpO1xuK31cbitcbiBzdGF0aWMgaW50IHhza19jb25maWd1cmUoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdCxcbiBcdFx0XHQgIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtLCBib29sIHR4KVxuIHtcbkBAIC0xNDg0LDE0ICsxNjI1LDE4IEBAIHN0YXRpYyBpbnQgeHNrX2NvbmZpZ3VyZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0LFxuIFx0XHRcdFx0YnJlYWs7XG4gXG4gXHRcdFx0LyogUmV0cnkgaWYgaXQgZmFpbHMgYXMgeHNrX3NvY2tldF9fY3JlYXRlKCkgaXMgYXN5bmNocm9ub3VzICovXG4tXHRcdFx0aWYgKGN0ciBcdTAwM2U9IFNPQ0tfUkVDT05GX0NUUilcbitcdFx0XHRpZiAoY3RyIFx1MDAzZT0gU09DS19SRUNPTkZfQ1RSKSB7XG4rXHRcdFx0XHR4c2tfY29uZmlndXJlX3JvbGxiYWNrKGlmb2JqZWN0LCBpKTtcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4rXHRcdFx0fVxuIFx0XHRcdHVzbGVlcChVU0xFRVBfTUFYKTtcbiBcdFx0fVxuIFx0XHRpZiAoaWZvYmplY3QtXHUwMDNlYnVzeV9wb2xsKSB7XG4gXHRcdFx0cmV0ID0gZW5hYmxlX2J1c3lfcG9sbChcdTAwMjZpZm9iamVjdC1cdTAwM2V4c2tfYXJyW2ldKTtcbi1cdFx0XHRpZiAocmV0KVxuK1x0XHRcdGlmIChyZXQpIHtcbitcdFx0XHRcdHhza19jb25maWd1cmVfcm9sbGJhY2soaWZvYmplY3QsIGkpO1xuIFx0XHRcdFx0cmV0dXJuIHJldDtcbitcdFx0XHR9XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC0xNzAyLDEyICsxODQ3LDYwIEBAIHZvaWQgKndvcmtlcl90ZXN0YXBwX3ZhbGlkYXRlX3J4KHZvaWQgKmFyZylcbiBcdHB0aHJlYWRfZXhpdChOVUxMKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgdGVzdGFwcF9jbGVhbl94c2tfdW1lbShzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqKVxuK3ZvaWQgeHNrX2RlbGV0ZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrKVxuIHtcbi1cdHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtID0gaWZvYmotXHUwMDNleHNrLVx1MDAzZXVtZW07XG4rXHRzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbTtcbiBcbi1cdHhza191bWVtX19kZWxldGUodW1lbS1cdTAwM2V1bWVtKTtcbi1cdG11bm1hcCh1bWVtLVx1MDAzZWJ1ZmZlciwgdW1lbS1cdTAwM2VtbWFwX3NpemUpO1xuK1x0LypcbitcdCAqIENhbGxlcnMgbXVzdCBzZXJpYWxpemUgdGVhcmRvd24gZm9yIGEgZ2l2ZW4geHNrL3VtZW0gcGFpci5cbitcdCAqIFRoaXMgaGVscGVyIGRvZXMgcmVmY291bnQtYmFzZWQgbGlmZXRpbWUgbWFuYWdlbWVudCBvbmx5LlxuK1x0ICovXG4rXHRpZiAoIXhzaylcbitcdFx0cmV0dXJuO1xuK1xuK1x0dW1lbSA9IHhzay1cdTAwM2V1bWVtO1xuK1x0aWYgKCF1bWVtKVxuK1x0XHRyZXR1cm47XG4rXG4rXHQvKiBEZWxldGUgdGhlIHNvY2tldCBoYW5kbGUgd2hlbiBhdmFpbGFibGUsIHRoZW4gZHJvcCBVTUVNIHJlZmVyZW5jZS4gKi9cbitcdGlmICh4c2stXHUwMDNleHNrKVxuK1x0XHR4c2tfc29ja2V0X19kZWxldGUoeHNrLVx1MDAzZXhzayk7XG4rXHR4c2stXHUwMDNleHNrID0gTlVMTDtcbitcbitcdC8qIE1hcmsgdGhpcyBzb2NrZXQgYXMgY2xlYW5lZCB1cCB0byBwcmV2ZW50IGRvdWJsZS1kZWNyZW1lbnQgKi9cbitcdHhzay1cdTAwM2V1bWVtID0gTlVMTDtcbitcbitcdC8qXG4rXHQgKiBUZWFyZG93biBtYXkgd2FsayB0aGUgZnVsbCB4c2sgYXJyYXksIGluY2x1ZGluZyBzbG90cyB0aGF0IG5ldmVyIGNvbXBsZXRlZCBzZXR1cCBidXRcbitcdCAqIHN0aWxsIGNhcnJ5IGEgcHJlaW5pdGlhbGl6ZWQgdW1lbSBwb2ludGVyLiBBZnRlciBhIHBhcnRpYWwtc2V0dXAgcm9sbGJhY2ssIHRoZSBsYXN0IFVNRU1cbitcdCAqIHJlZiBtYXkgYWxyZWFkeSBiZSBkcm9wcGVkLlxuK1x0ICovXG4rXHRpZiAoIXJlZmNvdW50X3JlYWQoXHUwMDI2dW1lbS1cdTAwM2V1c2VycykpXG4rXHRcdHJldHVybjtcbitcbitcdC8qIEFsd2F5cyBkZWNyZW1lbnQgcmVmY291bnQgZm9yIHRoaXMgc29ja2V0J3MgVU1FTSByZWZlcmVuY2UgKi9cbitcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2dW1lbS1cdTAwM2V1c2VycykpIHtcbitcdFx0aWYgKHVtZW0tXHUwMDNldW1lbSkge1xuK1x0XHRcdGludCBlcnIgPSB4c2tfdW1lbV9fZGVsZXRlKHVtZW0tXHUwMDNldW1lbSk7XG4rXG4rXHRcdFx0aWYgKGVycilcbitcdFx0XHRcdGtzZnRfcHJpbnRfbXNnKFwieHNrX3VtZW1fX2RlbGV0ZSBmYWlsZWQ6ICVkICh1bWVtIHN0aWxsIGJ1c3k/KVxcblwiLFxuK1x0XHRcdFx0XHQgICAgICAgZXJyKTtcbitcdFx0fVxuK1x0XHRpZiAodW1lbS1cdTAwM2VidWZmZXIgXHUwMDI2XHUwMDI2IHVtZW0tXHUwMDNlbW1hcF9zaXplKVxuK1x0XHRcdG11bm1hcCh1bWVtLVx1MDAzZWJ1ZmZlciwgdW1lbS1cdTAwM2VtbWFwX3NpemUpO1xuK1x0XHR1bWVtLVx1MDAzZXVtZW0gPSBOVUxMO1xuK1x0XHR1bWVtLVx1MDAzZWJ1ZmZlciA9IE5VTEw7XG4rXHRcdHVtZW0tXHUwMDNlbW1hcF9zaXplID0gMDtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgeHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqKVxuK3tcbitcdGlmICghaWZvYmopXG4rXHRcdHJldHVybjtcbitcbitcdHhza19kZWxldGVfc29ja2V0X2JhdGNoKGlmb2JqLCB0ZXN0LVx1MDAzZW5iX3NvY2tldHMpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCB4ZHBfcHJvZ19jaGFuZ2VkX3J4KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG5AQCAtMTc2OSwyNyArMTk2Miw2IEBAIHN0YXRpYyBpbnQgeHNrX2F0dGFjaF94ZHBfcHJvZ3Moc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9ial9yXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBjbGVhbl9zb2NrZXRzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXG4te1xuLVx0dTMyIGk7XG4tXG4tXHRpZiAoIWlmb2JqIHx8ICF0ZXN0KVxuLVx0XHRyZXR1cm47XG4tXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0ZXN0LVx1MDAzZW5iX3NvY2tldHM7IGkrKylcbi1cdFx0eHNrX3NvY2tldF9fZGVsZXRlKGlmb2JqLVx1MDAzZXhza19hcnJbaV0ueHNrKTtcbi19XG4tXG4tc3RhdGljIHZvaWQgY2xlYW5fdW1lbShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqMSwgc3RydWN0IGlmb2JqZWN0ICppZm9iajIpXG4te1xuLVx0aWYgKCFpZm9iajEpXG4tXHRcdHJldHVybjtcbi1cbi1cdHRlc3RhcHBfY2xlYW5feHNrX3VtZW0oaWZvYmoxKTtcbi1cdGlmIChpZm9iajIgXHUwMDI2XHUwMDI2ICFpZm9iajItXHUwMDNlc2hhcmVkX3VtZW0pXG4tXHRcdHRlc3RhcHBfY2xlYW5feHNrX3VtZW0oaWZvYmoyKTtcbi19XG4tXG4gc3RhdGljIGludCBfX3Rlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqMSxcbiBcdFx0XHRcdCAgICAgIHN0cnVjdCBpZm9iamVjdCAqaWZvYmoyKVxuIHtcbkBAIC0xODQxLDggKzIwMTMsNyBAQCBzdGF0aWMgaW50IF9fdGVzdGFwcF92YWxpZGF0ZV90cmFmZmljKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaVxuIFx0XHRpZiAocHRocmVhZF9iYXJyaWVyX2Rlc3Ryb3koXHUwMDI2YmFycikpIHtcbiBcdFx0XHR0ZXN0LVx1MDAzZXVzZV9iYXJyaWVyID0gZmFsc2U7XG4gXHRcdFx0cHRocmVhZF9qb2luKHQwLCBOVUxMKTtcbi1cdFx0XHRjbGVhbl9zb2NrZXRzKHRlc3QsIGlmb2JqMSk7XG4tXHRcdFx0Y2xlYW5fdW1lbSh0ZXN0LCBpZm9iajEsIE5VTEwpO1xuK1x0XHRcdHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgaWZvYmoxKTtcbiBcdFx0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuIFx0XHR9XG4gXHR9XG5AQCAtMTg1Niw5ICsyMDI3LDggQEAgc3RhdGljIGludCBfX3Rlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlcbiBcdHB0aHJlYWRfam9pbih0MCwgTlVMTCk7XG4gXG4gXHRpZiAodGVzdC1cdTAwM2V0b3RhbF9zdGVwcyA9PSB0ZXN0LVx1MDAzZWN1cnJlbnRfc3RlcCB8fCB0ZXN0LVx1MDAzZWZhaWwpIHtcbi1cdFx0Y2xlYW5fc29ja2V0cyh0ZXN0LCBpZm9iajEpO1xuLVx0XHRjbGVhbl9zb2NrZXRzKHRlc3QsIGlmb2JqMik7XG4tXHRcdGNsZWFuX3VtZW0odGVzdCwgaWZvYmoxLCBpZm9iajIpO1xuK1x0XHR4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIGlmb2JqMik7XG4rXHRcdHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgaWZvYmoxKTtcbiBcdH1cbiBcbiBcdGlmICh0ZXN0LVx1MDAzZWZhaWwpXG5AQCAtMTk2Nyw5ICsyMTM3LDggQEAgaW50IHRlc3RhcHBfeGRwX3Byb2dfY2xlYW51cChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuIFx0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuIFxuIFx0aWYgKHN3YXBfeHNrX3Jlc291cmNlcyh0ZXN0KSkge1xuLVx0XHRjbGVhbl9zb2NrZXRzKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfcngpO1xuLVx0XHRjbGVhbl9zb2NrZXRzKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfdHgpO1xuLVx0XHRjbGVhbl91bWVtKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfcngsIHRlc3QtXHUwMDNlaWZvYmpfdHgpO1xuK1x0XHR4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfdHgpO1xuK1x0XHR4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfcngpO1xuIFx0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuIFx0fVxuIFxuQEAgLTIyMjQsNiArMjM5MywxNjggQEAgaW50IHRlc3RhcHBfeGRwX3NoYXJlZF91bWVtKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbitzdGF0aWMgaW50IHNoYXJlZF91bWVtX3Rlc3RfcHJlcGFyZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuK3tcbitcdHUzMiBpO1xuK1xuK1x0aWYgKHRlc3QtXHUwMDNlbmJfc29ja2V0cyBcdTAwM2UgTUFYX1NPQ0tFVFMpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJFUlJPUjogWyVzXSBpbnZhbGlkIHNvY2tldCBjb3VudCAldVxcblwiLCBfX2Z1bmNfXywgdGVzdC1cdTAwM2VuYl9zb2NrZXRzKTtcbitcdFx0cmV0dXJuIFRFU1RfRkFJTFVSRTtcbitcdH1cbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlc3QtXHUwMDNlbmJfc29ja2V0czsgaSsrKSB7XG4rXHRcdGlmICghdGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gfHxcbitcdFx0ICAgICF0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSkge1xuK1x0XHRcdGtzZnRfcHJpbnRfbXNnKFwiRVJST1I6IFslc10gbWlzc2luZyBzdHJlYW0gZm9yIHNvY2tldCAldVxcblwiLCBfX2Z1bmNfXywgaSk7XG4rXHRcdFx0cmV0dXJuIFRFU1RfRkFJTFVSRTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIFRFU1RfUEFTUztcbit9XG4rXG4rc3RhdGljIGludCBzaGFyZWRfdW1lbV9zZXFfZXZlbl9vZGQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgY29uc3Qgdm9pZCAqY3R4KVxuK3tcbitcdCh2b2lkKWN0eDtcbitcbitcdHJldHVybiBwa3Rfc3RyZWFtX2V2ZW5fb2RkX3NlcXVlbmNlKHRlc3QpID8gVEVTVF9GQUlMVVJFIDogVEVTVF9QQVNTO1xuK31cbitcbitzdGF0aWMgaW50IHNoYXJlZF91bWVtX3NlcV9sZW4oc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgY29uc3Qgdm9pZCAqY3R4KVxuK3tcbitcdGNvbnN0IHN0cnVjdCBzaGFyZWRfdW1lbV9sZW5fY3R4ICpjZmcgPSBjdHg7XG4rXG4rXHRyZXR1cm4gcGt0X3N0cmVhbV9sZW5fc2VxKHRlc3QsIGNmZy1cdTAwM2VzaG9ydF9sZW4sIGNmZy1cdTAwM2Vsb25nX2xlbikgPyBURVNUX0ZBSUxVUkUgOiBURVNUX1BBU1M7XG4rfVxuK1xuK3N0YXRpYyBpbnQgc2hhcmVkX3VtZW1fc2VxX3VuZXZlbl9kaXN0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIGNvbnN0IHZvaWQgKmN0eClcbit7XG4rXHRjb25zdCBzdHJ1Y3Qgc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3RfY3R4ICpjZmcgPSBjdHg7XG4rXG4rXHRyZXR1cm4gcGt0X3N0cmVhbV93ZWlnaHRlZF91bmV2ZW5fZGlzdF9zZXF1ZW5jZSh0ZXN0LCBjZmctXHUwMDNldG90YWxfcGt0cyxcbitcdFx0XHRcdFx0XHQgICAgICBjZmctXHUwMDNlcGt0X2xlbikgPyBURVNUX0ZBSUxVUkUgOiBURVNUX1BBU1M7XG4rfVxuK1xuK3N0YXRpYyBpbnQgc2hhcmVkX3VtZW1fcG9zdF91bmV2ZW5fZGlzdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBpbnQgcmV0LCBjb25zdCB2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IHBrdF9zdHJlYW0gKnR4X3N0cmVhbV8wLCAqdHhfc3RyZWFtXzE7XG4rXHRzdHJ1Y3QgcGt0X3N0cmVhbSAqcnhfc3RyZWFtXzAsICpyeF9zdHJlYW1fMTtcbitcbitcdCh2b2lkKWN0eDtcbitcbitcdHR4X3N0cmVhbV8wID0gdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2tfYXJyWzBdLnBrdF9zdHJlYW07XG4rXHR0eF9zdHJlYW1fMSA9IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleHNrX2FyclsxXS5wa3Rfc3RyZWFtO1xuK1x0cnhfc3RyZWFtXzAgPSB0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhza19hcnJbMF0ucGt0X3N0cmVhbTtcbitcdHJ4X3N0cmVhbV8xID0gdGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2tfYXJyWzFdLnBrdF9zdHJlYW07XG4rXG4rXHRpZiAodHhfc3RyZWFtXzEtXHUwMDNlbmJfdmFsaWRfZW50cmllcyBcdTAwM2M9IHR4X3N0cmVhbV8wLVx1MDAzZW5iX3ZhbGlkX2VudHJpZXMpXG4rXHRcdHJldHVybiBURVNUX0ZBSUxVUkU7XG4rXG4rXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgcnhfc3RyZWFtXzEtXHUwMDNlbmJfcnhfcGt0cyBcdTAwM2M9IHJ4X3N0cmVhbV8wLVx1MDAzZW5iX3J4X3BrdHMpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJFUlJPUjogc29ja2V0MSByeF9wa3RzICgldSkgbm90IGdyZWF0ZXIgdGhhbiBzb2NrZXQwICgldSlcXG5cIixcbitcdFx0XHQgICAgICAgcnhfc3RyZWFtXzEtXHUwMDNlbmJfcnhfcGt0cywgcnhfc3RyZWFtXzAtXHUwMDNlbmJfcnhfcGt0cyk7XG4rXHRcdHJldCA9IFRFU1RfRkFJTFVSRTtcbitcdH1cbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnVuX3NoYXJlZF91bWVtX3Rlc3Qoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGJwZl9wcm9ncmFtICp4ZHBfcHJvZ19yeCxcbitcdFx0XHRcdHN0cnVjdCBicGZfcHJvZ3JhbSAqeGRwX3Byb2dfdHgsIHN0cnVjdCBicGZfbWFwICp4c2ttYXBfcngsXG4rXHRcdFx0XHRzdHJ1Y3QgYnBmX21hcCAqeHNrbWFwX3R4LCB1MzIgbmJfc29ja2V0cyxcbitcdFx0XHRcdHNoYXJlZF91bWVtX3NlcV9mbiBzZXFfZm4sIHNoYXJlZF91bWVtX3Bvc3RfZm4gcG9zdF9mbixcbitcdFx0XHRcdGNvbnN0IHZvaWQgKmN0eClcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0dGVzdC1cdTAwM2V0b3RhbF9zdGVwcyA9IDE7XG4rXHR0ZXN0LVx1MDAzZW5iX3NvY2tldHMgPSBuYl9zb2NrZXRzO1xuK1xuK1x0dGVzdF9zcGVjX3NldF94ZHBfcHJvZyh0ZXN0LCB4ZHBfcHJvZ19yeCwgeGRwX3Byb2dfdHgsIHhza21hcF9yeCwgeHNrbWFwX3R4KTtcbitcbitcdHJldCA9IHNoYXJlZF91bWVtX3Rlc3RfcHJlcGFyZSh0ZXN0KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBzZXFfZm4odGVzdCwgY3R4KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB0ZXN0YXBwX3ZhbGlkYXRlX3RyYWZmaWModGVzdCk7XG4rXHRpZiAocG9zdF9mbilcbitcdFx0cmV0ID0gcG9zdF9mbih0ZXN0LCByZXQsIGN0eCk7XG4rXG4rXHRyZWxlYXNlX2V2ZW5fb2RkX3NlcXVlbmNlKHRlc3QpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4raW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fNF9zb2NrZXRzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4re1xuK1x0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfcnggPSB0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhkcF9wcm9ncztcbitcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3R4ID0gdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4ZHBfcHJvZ3M7XG4rXG4rXHRyZXR1cm4gcnVuX3NoYXJlZF91bWVtX3Rlc3QodGVzdCwgc2tlbF9yeC1cdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLFxuK1x0XHRcdFx0ICAgIHNrZWxfdHgtXHUwMDNlcHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSwgc2tlbF9yeC1cdTAwM2VtYXBzLnhzayxcbitcdFx0XHRcdCAgICBza2VsX3R4LVx1MDAzZW1hcHMueHNrLCA0LCBzaGFyZWRfdW1lbV9zZXFfZXZlbl9vZGQsIE5VTEwsIE5VTEwpO1xuK31cbitcbitpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbit7XG4rXHRzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF9yeCA9IHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleGRwX3Byb2dzO1xuK1x0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfdHggPSB0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhkcF9wcm9ncztcbitcdGNvbnN0IHN0cnVjdCBzaGFyZWRfdW1lbV9sZW5fY3R4IGxlbl9jdHggPSB7XG4rXHRcdC5zaG9ydF9sZW4gPSBNSU5fUEtUX1NJWkUsXG4rXHRcdC5sb25nX2xlbiA9IE1JTl9QS1RfU0laRSAqIDIsXG4rXHR9O1xuK1xuK1x0cmV0dXJuIHJ1bl9zaGFyZWRfdW1lbV90ZXN0KHRlc3QsIHNrZWxfcngtXHUwMDNlcHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQsXG4rXHRcdFx0XHQgICAgc2tlbF90eC1cdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtX2xlbmd0aF9iYXNlZCxcbitcdFx0XHRcdCAgICBza2VsX3J4LVx1MDAzZW1hcHMueHNrLCBza2VsX3R4LVx1MDAzZW1hcHMueHNrLCAyLCBzaGFyZWRfdW1lbV9zZXFfbGVuLFxuK1x0XHRcdFx0ICAgIE5VTEwsIFx1MDAyNmxlbl9jdHgpO1xuK31cbitcbitpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV91bmV2ZW5fZGlzdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuK3tcbitcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3J4ID0gdGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4ZHBfcHJvZ3M7XG4rXHRzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF90eCA9IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleGRwX3Byb2dzO1xuK1x0Y29uc3Qgc3RydWN0IHNoYXJlZF91bWVtX3VuZXZlbl9kaXN0X2N0eCB1bmV2ZW5fZGlzdF9jdHggPSB7XG4rXHRcdC50b3RhbF9wa3RzID0gREVGQVVMVF9QS1RfQ05UICogNCxcbitcdFx0LnBrdF9sZW4gPSBNSU5fUEtUX1NJWkUsXG4rXHR9O1xuK1xuK1x0cmV0dXJuIHJ1bl9zaGFyZWRfdW1lbV90ZXN0KHRlc3QsIHNrZWxfcngtXHUwMDNlcHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSxcbitcdFx0XHRcdCAgICBza2VsX3R4LVx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sIHNrZWxfcngtXHUwMDNlbWFwcy54c2ssXG4rXHRcdFx0XHQgICAgc2tlbF90eC1cdTAwM2VtYXBzLnhzaywgMiwgc2hhcmVkX3VtZW1fc2VxX3VuZXZlbl9kaXN0LFxuK1x0XHRcdFx0ICAgIHNoYXJlZF91bWVtX3Bvc3RfdW5ldmVuX2Rpc3QsIFx1MDAyNnVuZXZlbl9kaXN0X2N0eCk7XG4rfVxuK1xuK2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX3VuYWxpZ25lZChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuK3tcbitcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3J4ID0gdGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4ZHBfcHJvZ3M7XG4rXHRzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF90eCA9IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleGRwX3Byb2dzO1xuK1x0c3RydWN0IHhza191bWVtX2luZm8gKnR4X3VtZW0gPSB0ZXN0LVx1MDAzZWlmb2JqX3R4IFx1MDAyNlx1MDAyNiB0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhzayA/XG4rXHRcdHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleHNrLVx1MDAzZXVtZW0gOiBOVUxMO1xuK1x0c3RydWN0IHhza191bWVtX2luZm8gKnJ4X3VtZW0gPSB0ZXN0LVx1MDAzZWlmb2JqX3J4IFx1MDAyNlx1MDAyNiB0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhzayA/XG4rXHRcdHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleHNrLVx1MDAzZXVtZW0gOiBOVUxMO1xuK1x0Ym9vbCB0eF91bmFsaWduZWQgPSB0eF91bWVtID8gdHhfdW1lbS1cdTAwM2V1bmFsaWduZWRfbW9kZSA6IGZhbHNlO1xuK1x0Ym9vbCByeF91bmFsaWduZWQgPSByeF91bWVtID8gcnhfdW1lbS1cdTAwM2V1bmFsaWduZWRfbW9kZSA6IGZhbHNlO1xuK1x0aW50IHJldDtcbitcbitcdHRlc3Rfc3BlY19zZXRfdW5hbGlnbmVkKHRlc3QpO1xuK1xuK1x0cmV0ID0gcnVuX3NoYXJlZF91bWVtX3Rlc3QodGVzdCwgc2tlbF9yeC1cdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLFxuK1x0XHRcdFx0ICAgc2tlbF90eC1cdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLCBza2VsX3J4LVx1MDAzZW1hcHMueHNrLFxuK1x0XHRcdFx0ICAgc2tlbF90eC1cdTAwM2VtYXBzLnhzaywgMiwgc2hhcmVkX3VtZW1fc2VxX2V2ZW5fb2RkLCBOVUxMLCBOVUxMKTtcbitcbitcdGlmICh0eF91bWVtKVxuK1x0XHR0eF91bWVtLVx1MDAzZXVuYWxpZ25lZF9tb2RlID0gdHhfdW5hbGlnbmVkO1xuK1x0aWYgKHJ4X3VtZW0pXG4rXHRcdHJ4X3VtZW0tXHUwMDNldW5hbGlnbmVkX21vZGUgPSByeF91bmFsaWduZWQ7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbiBpbnQgdGVzdGFwcF9wb2xsX3R4cV90bW91dChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuIHtcbiBcdGJvb2wgc2hhcmVkX3VtZW0gPSB0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXNoYXJlZF91bWVtO1xuQEAgLTI0OTgsOSArMjgyOSw4IEBAIGludCB0ZXN0YXBwX2h3X3N3X21heF9yaW5nX3NpemUoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiBcdHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleHNrLVx1MDAzZWJhdGNoX3NpemUgPSB0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXJpbmcudHhfbWF4X3BlbmRpbmcgLSA4O1xuIFx0dGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2stXHUwMDNlYmF0Y2hfc2l6ZSA9IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNlcmluZy50eF9tYXhfcGVuZGluZyAtIDg7XG4gXHRpZiAocGt0X3N0cmVhbV9yZXBsYWNlKHRlc3QsIG1heF9kZXNjcywgTUlOX1BLVF9TSVpFKSkge1xuLVx0XHRjbGVhbl9zb2NrZXRzKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfdHgpO1xuLVx0XHRjbGVhbl9zb2NrZXRzKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfcngpO1xuLVx0XHRjbGVhbl91bWVtKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfcngsIHRlc3QtXHUwMDNlaWZvYmpfdHgpO1xuK1x0XHR4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfdHgpO1xuK1x0XHR4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfcngpO1xuIFx0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5oXG5pbmRleCAwMzc1M2RkYzVkY2RhLi5lZjljNDIyZDc3NjNlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suaFxuQEAgLTQsNiArNCw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXRodG9vbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfeGRwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWZjb3VudC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCIuLi9rc2VsZnRlc3QuaFwiXG4gI2luY2x1ZGUgXCJ4c2suaFwiXG5AQCAtNzksNiArODAsOSBAQCBzdHJ1Y3QgdGVzdF9zcGVjO1xuIHR5cGVkZWYgaW50ICgqdmFsaWRhdGlvbl9mdW5jX3QpKHN0cnVjdCBpZm9iamVjdCAqaWZvYmopO1xuIHR5cGVkZWYgdm9pZCAqKCp0aHJlYWRfZnVuY190KSh2b2lkICphcmcpO1xuIHR5cGVkZWYgaW50ICgqdGVzdF9mdW5jX3QpKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuK3R5cGVkZWYgaW50ICgqc2hhcmVkX3VtZW1fc2VxX2ZuKShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCB2b2lkICpjdHgpO1xuK3R5cGVkZWYgaW50ICgqc2hhcmVkX3VtZW1fcG9zdF9mbikoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgaW50IHJldCxcbitcdFx0XHRcdFx0ICAgY29uc3Qgdm9pZCAqY3R4KTtcbiBcbiBzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvIHtcbiBcdHN0cnVjdCB4c2tfcmluZ19jb25zIHJ4O1xuQEAgLTEwNCw2ICsxMDgsNyBAQCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyB7XG4gXHRzdHJ1Y3QgeHNrX3VtZW0gKnVtZW07XG4gXHR1NjQgbmV4dF9idWZmZXI7XG4gXHR1NjQgbW1hcF9zaXplO1xuK1x0cmVmY291bnRfdCB1c2VycztcbiBcdHUzMiBudW1fZnJhbWVzO1xuIFx0dTMyIGZyYW1lX2hlYWRyb29tO1xuIFx0dm9pZCAqYnVmZmVyO1xuQEAgLTE1OSw2ICsxNjQsNyBAQCBpbnQgaW5pdF9pZmFjZShzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqLCB0aHJlYWRfZnVuY190IGZ1bmNfcHRyKTtcbiBpbnQgeHNrX2NvbmZpZ3VyZV91bWVtKHN0cnVjdCBpZm9iamVjdCAqaWZvYmosIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtLCB2b2lkICpidWZmZXIsIHU2NCBzaXplKTtcbiBpbnQgeHNrX2NvbmZpZ3VyZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrLCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbSxcbiBcdFx0XHQgc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdCwgYm9vbCBzaGFyZWQpO1xuK3ZvaWQgeHNrX2RlbGV0ZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrKTtcbiBcbiBcbiBzdHJ1Y3QgcGt0IHtcbkBAIC0xNzksNiArMTg1LDE2IEBAIHN0cnVjdCBwa3Rfc3RyZWFtIHtcbiBcdGJvb2wgdmVyYmF0aW07XG4gfTtcbiBcbitzdHJ1Y3Qgc2hhcmVkX3VtZW1fbGVuX2N0eCB7XG4rXHR1MzIgc2hvcnRfbGVuO1xuK1x0dTMyIGxvbmdfbGVuO1xuK307XG4rXG4rc3RydWN0IHNoYXJlZF91bWVtX3VuZXZlbl9kaXN0X2N0eCB7XG4rXHR1MzIgdG90YWxfcGt0cztcbitcdHUzMiBwa3RfbGVuO1xuK307XG4rXG4gc3RhdGljIGlubGluZSBib29sIHBrdF9jb250aW51ZXModTMyIG9wdGlvbnMpXG4ge1xuIFx0cmV0dXJuIG9wdGlvbnMgXHUwMDI2IFhEUF9QS1RfQ09OVEQ7XG5AQCAtMjY4LDYgKzI4NCwxMCBAQCBpbnQgdGVzdGFwcF94ZHBfbWV0YWRhdGEoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XG4gaW50IHRlc3RhcHBfeGRwX21ldGFkYXRhX21iKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuIGludCB0ZXN0YXBwX3hkcF9wcm9nX2NsZWFudXAoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XG4gaW50IHRlc3RhcHBfeGRwX3NoYXJlZF91bWVtKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuK2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtXzRfc29ja2V0cyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTtcbitpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XG4raW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3Qoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XG4raW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5hbGlnbmVkKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuIFxuIHZvaWQgKndvcmtlcl90ZXN0YXBwX3ZhbGlkYXRlX3J4KHZvaWQgKmFyZyk7XG4gdm9pZCAqd29ya2VyX3Rlc3RhcHBfdmFsaWRhdGVfdHgodm9pZCAqYXJnKTtcbkBAIC0yOTEsNiArMzExLDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdGVzdF9zcGVjIHRlc3RzW10gPSB7XG4gXHR7Lm5hbWUgPSBcIlhEUF9QUk9HX0NMRUFOVVBcIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfeGRwX3Byb2dfY2xlYW51cH0sXG4gXHR7Lm5hbWUgPSBcIlhEUF9EUk9QX0hBTEZcIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfeGRwX2Ryb3B9LFxuIFx0ey5uYW1lID0gXCJYRFBfU0hBUkVEX1VNRU1cIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfeGRwX3NoYXJlZF91bWVtfSxcbitcdHsubmFtZSA9IFwiU0hBUkVEX1VNRU1fNF9TT0NLRVRTXCIsIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3NoYXJlZF91bWVtXzRfc29ja2V0c30sXG4rXHR7Lm5hbWUgPSBcIlNIQVJFRF9VTUVNX0xFTkdUSF9CQVNFRFwiLCAudGVzdF9mdW5jID0gdGVzdGFwcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWR9LFxuK1x0ey5uYW1lID0gXCJTSEFSRURfVU1FTV9VTkVWRU5fRElTVFwiLCAudGVzdF9mdW5jID0gdGVzdGFwcF9zaGFyZWRfdW1lbV91bmV2ZW5fZGlzdH0sXG4rXHR7Lm5hbWUgPSBcIlNIQVJFRF9VTUVNX1VOQUxJR05FRFwiLCAudGVzdF9mdW5jID0gdGVzdGFwcF9zaGFyZWRfdW1lbV91bmFsaWduZWR9LFxuIFx0ey5uYW1lID0gXCJYRFBfTUVUQURBVEFfQ09QWVwiLCAudGVzdF9mdW5jID0gdGVzdGFwcF94ZHBfbWV0YWRhdGF9LFxuIFx0ey5uYW1lID0gXCJYRFBfTUVUQURBVEFfQ09QWV9NVUxUSV9CVUZGXCIsIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3hkcF9tZXRhZGF0YV9tYn0sXG4gXHR7Lm5hbWUgPSBcIkFMSUdORURfSU5WX0RFU0NfTVVMVElfQlVGRlwiLCAudGVzdF9mdW5jID0gdGVzdGFwcF9hbGlnbmVkX2ludl9kZXNjX21ifSxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveHNrX3hkcF9wcm9ncy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hza194ZHBfcHJvZ3MuY1xuaW5kZXggMDIzZDhiZWZkNGNhYi4uNTQzYjYxZGYzYTJiMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94c2tfeGRwX3Byb2dzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94c2tfeGRwX3Byb2dzLmNcbkBAIC0xMCw3ICsxMCw3IEBAXG4gXG4gc3RydWN0IHtcbiBcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfWFNLTUFQKTtcbi1cdF9fdWludChtYXhfZW50cmllcywgMik7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIE1BWF9TT0NLRVRTKTtcbiBcdF9fdWludChrZXlfc2l6ZSwgc2l6ZW9mKGludCkpO1xuIFx0X191aW50KHZhbHVlX3NpemUsIHNpemVvZihpbnQpKTtcbiB9IHhzayBTRUMoXCIubWFwc1wiKTtcbkBAIC03NSw2ICs3NSwyMyBAQCBTRUMoXCJ4ZHBcIikgaW50IHhza194ZHBfc2hhcmVkX3VtZW0oc3RydWN0IHhkcF9tZCAqeGRwKVxuIFx0cmV0dXJuIGJwZl9yZWRpcmVjdF9tYXAoXHUwMDI2eHNrLCBpZHgsIFhEUF9EUk9QKTtcbiB9XG4gXG4rU0VDKFwieGRwXCIpIGludCB4c2tfeGRwX3NoYXJlZF91bWVtX2xlbmd0aF9iYXNlZChzdHJ1Y3QgeGRwX21kICp4ZHApXG4re1xuK1x0dm9pZCAqZGF0YSA9ICh2b2lkICopKGxvbmcpeGRwLVx1MDAzZWRhdGE7XG4rXHR2b2lkICpkYXRhX2VuZCA9ICh2b2lkICopKGxvbmcpeGRwLVx1MDAzZWRhdGFfZW5kO1xuK1x0X191MzIgcGt0X2xlbiA9IGRhdGFfZW5kIC0gZGF0YTtcbitcbitcdC8qIFxuK1x0ICogUm91dGUgcGFja2V0cyBieSB0b3RhbCBYRFAtdmlzaWJsZSBwYWNrZXQgbGVuZ3RoIChkYXRhX2VuZCAtIGRhdGEpOlxuK1x0ICogLSBTb2NrZXQgMDogcGFja2V0cyBcdTAwM2M9IFNIQVJFRF9VTUVNX0xFTl9TUExJVCBieXRlc1xuK1x0ICogLSBTb2NrZXQgMTogcGFja2V0cyBcdTAwM2UgU0hBUkVEX1VNRU1fTEVOX1NQTElUIGJ5dGVzXG4rXHQgKi9cbitcdGlmIChwa3RfbGVuIFx1MDAzYz0gU0hBUkVEX1VNRU1fTEVOX1NQTElUKVxuK1x0XHRyZXR1cm4gYnBmX3JlZGlyZWN0X21hcChcdTAwMjZ4c2ssIDAsIFhEUF9EUk9QKTtcbitcdGVsc2VcbitcdFx0cmV0dXJuIGJwZl9yZWRpcmVjdF9tYXAoXHUwMDI2eHNrLCAxLCBYRFBfRFJPUCk7XG4rfVxuK1xuIFNFQyhcInhkcC5mcmFnc1wiKSBpbnQgeHNrX3hkcF9hZGp1c3RfdGFpbChzdHJ1Y3QgeGRwX21kICp4ZHApXG4ge1xuIFx0X191MzIgYnVmZl9sZW4sIGN1cnJfYnVmZl9sZW47XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza194ZHBfY29tbW9uLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNrX3hkcF9jb21tb24uaFxuaW5kZXggNDU4MTBmZjU1MmRhZS4uYmQ5YjVkY2Y4YzhlZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2tfeGRwX2NvbW1vbi5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNrX3hkcF9jb21tb24uaFxuQEAgLTMsNyArMyw4IEBAXG4gI2lmbmRlZiBYU0tfWERQX0NPTU1PTl9IX1xuICNkZWZpbmUgWFNLX1hEUF9DT01NT05fSF9cbiBcbi0jZGVmaW5lIE1BWF9TT0NLRVRTIDJcbisjZGVmaW5lIE1BWF9TT0NLRVRTIDRcbisjZGVmaW5lIFNIQVJFRF9VTUVNX0xFTl9TUExJVCA2NFxuICNkZWZpbmUgUEtUX0hEUl9BTElHTiAoc2l6ZW9mKHN0cnVjdCBldGhoZHIpICsgMikgLyogSnVzdCB0byBhbGlnbiB0aGUgZGF0YSBpbiB0aGUgcGFja2V0ICovXG4gXG4gc3RydWN0IHhkcF9pbmZvIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNreGNlaXZlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza3hjZWl2ZXIuY1xuaW5kZXggN2RhZDg1NTZhNzIyZS4uZWQ3NzE2YjYzNzU2NyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2t4Y2VpdmVyLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2t4Y2VpdmVyLmNcbkBAIC0xMTcsMTIgKzExNywxMyBAQCBzdGF0aWMgdm9pZCBfX2V4aXRfd2l0aF9lcnJvcihpbnQgZXJyb3IsIGNvbnN0IGNoYXIgKmZpbGUsIGNvbnN0IGNoYXIgKmZ1bmMsIGludFxuIFxuICNkZWZpbmUgZXhpdF93aXRoX2Vycm9yKGVycm9yKSBfX2V4aXRfd2l0aF9lcnJvcihlcnJvciwgX19GSUxFX18sIF9fZnVuY19fLCBfX0xJTkVfXylcbiBcbi1zdGF0aWMgYm9vbCBpZm9ial96Y19hdmFpbChzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0KVxuK3N0YXRpYyBib29sIGlmb2JqX3pjX2F2YWlsKHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXG4ge1xuIFx0c2l6ZV90IHVtZW1fc3ogPSBERUZBVUxUX1VNRU1fQlVGRkVSUyAqIFhTS19VTUVNX19ERUZBVUxUX0ZSQU1FX1NJWkU7XG4gXHRpbnQgbW1hcF9mbGFncyA9IE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUyB8IE1BUF9OT1JFU0VSVkU7XG4tXHRzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2s7XG4tXHRzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbTtcbitcdHN0cnVjdCB4c2tfc29ja2V0X2luZm8geHNrID0ge307XG4rXHRzdHJ1Y3QgeHNrX3VtZW1faW5mbyB1bWVtX2luZm8gPSB7fTtcbitcdHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtID0gXHUwMDI2dW1lbV9pbmZvO1xuIFx0Ym9vbCB6Y19hdmFpbCA9IGZhbHNlO1xuIFx0dm9pZCAqYnVmcztcbiBcdGludCByZXQ7XG5AQCAtMTMxLDMyICsxMzIsMjIgQEAgc3RhdGljIGJvb2wgaWZvYmpfemNfYXZhaWwoc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdClcbiBcdGlmIChidWZzID09IE1BUF9GQUlMRUQpXG4gXHRcdGV4aXRfd2l0aF9lcnJvcihlcnJubyk7XG4gXG4tXHR1bWVtID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgeHNrX3VtZW1faW5mbykpO1xuLVx0aWYgKCF1bWVtKSB7XG4tXHRcdG11bm1hcChidWZzLCB1bWVtX3N6KTtcbi1cdFx0ZXhpdF93aXRoX2Vycm9yKEVOT01FTSk7XG4tXHR9XG4rXHR1bWVtLVx1MDAzZW1tYXBfc2l6ZSA9IHVtZW1fc3o7XG4gXHR1bWVtLVx1MDAzZWZyYW1lX3NpemUgPSBYU0tfVU1FTV9fREVGQVVMVF9GUkFNRV9TSVpFO1xuLVx0cmV0ID0geHNrX2NvbmZpZ3VyZV91bWVtKGlmb2JqZWN0LCB1bWVtLCBidWZzLCB1bWVtX3N6KTtcbitcdHJldCA9IHhza19jb25maWd1cmVfdW1lbShpZm9iaiwgdW1lbSwgYnVmcywgdW1lbV9zeik7XG4gXHRpZiAocmV0KVxuIFx0XHRleGl0X3dpdGhfZXJyb3IoLXJldCk7XG4gXG4tXHR4c2sgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCB4c2tfc29ja2V0X2luZm8pKTtcbi1cdGlmICgheHNrKVxuLVx0XHRnb3RvIG91dDtcbi1cdGlmb2JqZWN0LVx1MDAzZWJpbmRfZmxhZ3MgPSBYRFBfVVNFX05FRURfV0FLRVVQIHwgWERQX1pFUk9DT1BZO1xuLVx0aWZvYmplY3QtXHUwMDNlcnhfb24gPSB0cnVlO1xuLVx0eHNrLVx1MDAzZXJ4cXNpemUgPSBYU0tfUklOR19DT05TX19ERUZBVUxUX05VTV9ERVNDUztcbi1cdHJldCA9IHhza19jb25maWd1cmVfc29ja2V0KHhzaywgdW1lbSwgaWZvYmplY3QsIGZhbHNlKTtcbitcdGlmb2JqLVx1MDAzZWJpbmRfZmxhZ3MgPSBYRFBfVVNFX05FRURfV0FLRVVQIHwgWERQX1pFUk9DT1BZO1xuK1x0aWZvYmotXHUwMDNlcnhfb24gPSB0cnVlO1xuK1x0eHNrLnJ4cXNpemUgPSBYU0tfUklOR19DT05TX19ERUZBVUxUX05VTV9ERVNDUztcbitcdHJldCA9IHhza19jb25maWd1cmVfc29ja2V0KFx1MDAyNnhzaywgdW1lbSwgaWZvYmosIGZhbHNlKTtcbiBcdGlmICghcmV0KVxuIFx0XHR6Y19hdmFpbCA9IHRydWU7XG4gXG4tXHR4c2tfc29ja2V0X19kZWxldGUoeHNrLVx1MDAzZXhzayk7XG4tXHRmcmVlKHhzayk7XG4tb3V0OlxuLVx0bXVubWFwKHVtZW0tXHUwMDNlYnVmZmVyLCB1bWVtX3N6KTtcbi1cdHhza191bWVtX19kZWxldGUodW1lbS1cdTAwM2V1bWVtKTtcbi1cdGZyZWUodW1lbSk7XG4rXHQvKiBVc2UgdGhlIHNhbWUgcmVmY291bnQtYmFzZWQgdGVhcmRvd24gcGF0aCBmb3IgYm90aCBzdWNjZXNzIGFuZCBmYWlsdXJlLiAqL1xuK1x0eHNrX2RlbGV0ZV9zb2NrZXQoXHUwMDI2eHNrKTtcbitcbiBcdHJldHVybiB6Y19hdmFpbDtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjo1NzoyOC4xNjQwMzMzNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNDM5ODI5NjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBc3Nlc3NtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ3ZlIGdvdCBhIHBhdGNoIHRoYXQncyB0b3VjaGVkIGEgYnVuY2ggb2YgZmlsZXMsIGFsbCB1bmRlciBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2AuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIGlmIHRoZXNlIGNoYW5nZXMgd2FycmFudCBmdXp6aW5nLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBwcmV0dHkgY2xlYXI6IHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggKm9ubHkqIGNvbnRhaW5zIG1vZGlmaWNhdGlvbnMgdG8gdGVzdHMsIGRvY3VtZW50YXRpb24sIGNvbW1lbnRzLCBkZWNvcmF0aXZlIGxvZ2dpbmcsIG5vbi1mdW5jdGlvbmFsIG51bWVyaWMgY2hhbmdlcywgdW5yZWFjaGFibGUgY29kZSBwYXRocywgb3IgdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgcmVxdWlyaW5nIHNwZWNpZmljIGhhcmR3YXJlLlxuXG5SaWdodCwgc28sIGZpcnN0IHRoaW5ncyBmaXJzdDogbGV0IG1lIGlzb2xhdGUgd2hlcmUgdGhlIGNoYW5nZXMgYXJlLiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY2AsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5oYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94c2tfeGRwX3Byb2dzLmNgLCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza194ZHBfY29tbW9uLmhgLCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2t4Y2VpdmVyLmNgLiBCaW5nbyEgQWxsIHRlc3QgY29kZS5cblxuTm93IHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IGFyZSB0aGVzZSBzZWxmdGVzdHMgdG91Y2hpbmcgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXM/IFRoZSBhbnN3ZXIgaXMgbm8sIHRoaXMgaXMgYWxsIHRlc3QgaW5mcmFzdHJ1Y3R1cmUsIHVzZXJzcGFjZSBwcm9ncmFtcywgYW5kIEJQRiBwcm9ncmFtcyB1c2VkIGZvciB0ZXN0aW5nLiBUaGVzZSBmaWxlcyBkb24ndCBjaGFuZ2UgYW55IG9mIHRoZSBrZXJuZWwncyBmdW5jdGlvbmFsIGJlaGF2aW9yLCBidXQgYXJlIHRlc3QgcHJvZ3JhbXMgZm9yIEJQRi5cblxuVGhlIGd1aWRlbGluZXMgYXJlIGV4cGxpY2l0LiBJZiBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcyB3ZXJlIHRvdWNoZWQsIEknZCBuZWVkIHRvIGNvbmZpcm0gZXhlY3V0YWJpbGl0eSBhbmQgdGhlbiByZXR1cm4gYFdvcnRoRnV6emluZz10cnVlYC4gSG93ZXZlciwgc2luY2UgaXQgaXMgb25seSBhIGNoYW5nZSB0byBzZWxmdGVzdHMsIEkgZG9uJ3Qgc2VlIGFueSBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwuXG5cblNvLCBsZXQgbWUgcmVjb25maXJtOiB0aGUgZmlsZXMgbW9kaWZpZWQgYXJlIGxpbWl0ZWQgdG8gQlBGIHNlbGZ0ZXN0cywgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYC4gVGhpcyBtZWFucyB0aGUgcGF0Y2ggKm9ubHkqIGltcGFjdHMgdGhlIHRlc3Qgc3VpdGUsIGFuZCBkb2Vzbid0IGludHJvZHVjZSBhbnkgZnVuY3Rpb25hbCBhbHRlcmF0aW9ucyB0byB0aGUga2VybmVsIGl0c2VsZi5cblxuVGhlcmVmb3JlLCBteSBhc3Nlc3NtZW50IGlzOiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJhdGlvbmFsZSBpcyBzdHJhaWdodGZvcndhcmQ6IFRoaXMgcGF0Y2ggZm9jdXNlcyBzb2xlbHkgb24gbW9kaWZ5aW5nIGFuZCBpbXByb3ZpbmcgQlBGIHNlbGZ0ZXN0cywgbm90IGNvcmUga2VybmVsIGZ1bmN0aW9uYWxpdHksIGFuZCBkb2VzIG5vdCB3YXJyYW50IGZ1enppbmcgdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyNDEsIk91dHB1dFRva2VucyI6NjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjo1Nzo0MS42MDM4NjY0MzZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0MjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyAodXNlcnNwYWNlIHRlc3QgcHJvZ3JhbXMgYW5kIHRlc3QgQlBGIHByb2dyYW1zKSBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyAodXNlcnNwYWNlIHRlc3QgcHJvZ3JhbXMgYW5kIHRlc3QgQlBGIHByb2dyYW1zKSBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjU3OjQxLjYwMzkwNTUxNloiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowt9n6m[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-07 16:35:00 +0000 UTC FinishedAt: 2026-08-07 16:57:43 +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+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgc2VsZnRlc3RzICh1c2Vyc3BhY2UgdGVzdCBwcm9ncmFtcyBhbmQgdGVzdCBCUEYgcHJvZ3JhbXMpIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjo1NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGRmMjRjYjExY2MyNjE3ZmUyYTZmMjYyNDljNDQ4N2U2OTkzM2Y0YWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDE2OjU3OjI2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jXG5pbmRleCA0NzdhZWRiYjAxYmFkLi5jY2ZkOWU4NDM2YTdiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xuQEAgLTEwMSw2ICYjNDM7MTAxLDcgQEAgaW50IHhza19jb25maWd1cmVfdW1lbShzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqLCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbSwgdm9pZFxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0dW1lbS1cdTAwM2VidWZmZXIgPSBidWZmZXI7XG4mIzQzO1x0cmVmY291bnRfc2V0KFx1MDAyNnVtZW0tXHUwMDNldXNlcnMsIDEpO1xuIFx0aWYgKGlmb2JqLVx1MDAzZXNoYXJlZF91bWVtIFx1MDAyNlx1MDAyNiBpZm9iai1cdTAwM2VyeF9vbikge1xuIFx0XHR1bWVtLVx1MDAzZWJhc2VfYWRkciA9IHVtZW1fc2l6ZSh1bWVtKTtcbiBcdFx0dW1lbS1cdTAwM2VuZXh0X2J1ZmZlciA9IHVtZW1fc2l6ZSh1bWVtKTtcbkBAIC0xNTQsNiAmIzQzOzE1NSw3IEBAIGludCB4c2tfY29uZmlndXJlX3NvY2tldChzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2ssIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtXG4gXHRzdHJ1Y3QgeHNrX3NvY2tldF9jb25maWcgY2ZnID0ge307XG4gXHRzdHJ1Y3QgeHNrX3JpbmdfY29ucyAqcnhyO1xuIFx0c3RydWN0IHhza19yaW5nX3Byb2QgKnR4cjtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0eHNrLVx1MDAzZXVtZW0gPSB1bWVtO1xuIFx0Y2ZnLnJ4X3NpemUgPSB4c2stXHUwMDNlcnhxc2l6ZTtcbkBAIC0xNzAsNyAmIzQzOzE3MiwyMSBAQCBpbnQgeHNrX2NvbmZpZ3VyZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrLCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbVxuIFxuIFx0dHhyID0gaWZvYmplY3QtXHUwMDNldHhfb24gPyBcdTAwMjZ4c2stXHUwMDNldHggOiBOVUxMO1xuIFx0cnhyID0gaWZvYmplY3QtXHUwMDNlcnhfb24gPyBcdTAwMjZ4c2stXHUwMDNlcnggOiBOVUxMO1xuLVx0cmV0dXJuIHhza19zb2NrZXRfX2NyZWF0ZShcdTAwMjZ4c2stXHUwMDNleHNrLCBpZm9iamVjdC1cdTAwM2VpZmluZGV4LCAwLCB1bWVtLVx1MDAzZXVtZW0sIHJ4ciwgdHhyLCBcdTAwMjZjZmcpO1xuJiM0MztcdHJldCA9IHhza19zb2NrZXRfX2NyZWF0ZShcdTAwMjZ4c2stXHUwMDNleHNrLCBpZm9iamVjdC1cdTAwM2VpZmluZGV4LCAwLCB1bWVtLVx1MDAzZXVtZW0sIHJ4ciwgdHhyLCBcdTAwMjZjZmcpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGlmIChzaGFyZWQpXG4mIzQzO1x0XHRcdC8qIFNoYXJlZCBzb2NrZXQgZmFpbGVkIGJlZm9yZSBhY3F1aXJpbmcgYSBVTUVNIHJlZmVyZW5jZS4gKi9cbiYjNDM7XHRcdFx0eHNrLVx1MDAzZXVtZW0gPSBOVUxMO1xuJiM0MztcbiYjNDM7XHRcdC8qIEtlZXAgZmFpbGVkIHNvY2tldCBzdGF0ZSBpbmVydCBmb3IgbGF0ZXIgY2xlYW51cCBwYXRocy4gKi9cbiYjNDM7XHRcdHhzay1cdTAwM2V4c2sgPSBOVUxMO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChzaGFyZWQpXG4mIzQzO1x0XHRyZWZjb3VudF9pbmMoXHUwMDI2dW1lbS1cdTAwM2V1c2Vycyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyBpbnQgc2V0X3Jpbmdfc2l6ZShzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqKVxuQEAgLTIwMyw2ICYjNDM7MjE5LDEyIEBAIGludCBod19yaW5nX3NpemVfcmVzZXQoc3RydWN0IGlmb2JqZWN0ICppZm9iailcbiBzdGF0aWMgdm9pZCBfX3Rlc3Rfc3BlY19pbml0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmpfdHgsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqX3J4KVxuIHtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEtlZXAgdGhlIHNhbWUgZGVmYXVsdCBhcyB4c2t4Y2VpdmVyIHN0YXJ0dXA6IHdoZW4gVFggYW5kIFJYIHNoYXJlIHRoZSBzYW1lIG5ldGRldixcbiYjNDM7XHQgKiBzaGFyZWQgVU1FTSBpcyB0aGUgYmFzZWxpbmUgbW9kZSBmb3IgdGhpcyB0ZXN0IGhhcm5lc3MuIEluZGl2aWR1YWwgdGVzdHMgY2FuIHN0aWxsXG4mIzQzO1x0ICogb3ZlcnJpZGUgdGhpcyBhcyBuZWVkZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0Ym9vbCBzaGFyZWRfZGVmYXVsdCA9IGlmb2JqX3R4LVx1MDAzZWlmaW5kZXggPT0gaWZvYmpfcngtXHUwMDNlaWZpbmRleDtcbiBcdHUzMiBpLCBqO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUFYX0lOVEVSRkFDRVM7IGkmIzQzOyYjNDM7KSB7XG5AQCAtMjE0LDYgJiM0MzsyMzYsNyBAQCBzdGF0aWMgdm9pZCBfX3Rlc3Rfc3BlY19pbml0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmpfdHgsXG4gXHRcdGlmb2JqLVx1MDAzZXVzZV9maWxsX3JpbmcgPSB0cnVlO1xuIFx0XHRpZm9iai1cdTAwM2VyZWxlYXNlX3J4ID0gdHJ1ZTtcbiBcdFx0aWZvYmotXHUwMDNldmFsaWRhdGlvbl9mdW5jID0gTlVMTDtcbiYjNDM7XHRcdGlmb2JqLVx1MDAzZXNoYXJlZF91bWVtID0gc2hhcmVkX2RlZmF1bHQ7XG4gXHRcdGlmb2JqLVx1MDAzZXVzZV9tZXRhZGF0YSA9IGZhbHNlO1xuIFxuIFx0XHRpZiAoaSA9PSAwKSB7XG5AQCAtNTc0LDI2ICYjNDM7NTk3LDEyMiBAQCBzdGF0aWMgaW50IHBrdF9zdHJlYW1fcmVjZWl2ZV9oYWxmKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4gXG4gc3RhdGljIGludCBwa3Rfc3RyZWFtX2V2ZW5fb2RkX3NlcXVlbmNlKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4ge1xuJiM0MztcdHN0cnVjdCBwa3Rfc3RyZWFtICp0eF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9O1xuJiM0MztcdHN0cnVjdCBwa3Rfc3RyZWFtICpyeF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9O1xuIFx0c3RydWN0IHBrdF9zdHJlYW0gKnBrdF9zdHJlYW07XG4gXHR1MzIgaTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlc3QtXHUwMDNlbmJfc29ja2V0czsgaSYjNDM7JiM0MzspIHtcbiBcdFx0cGt0X3N0cmVhbSA9IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtO1xuLVx0XHRwa3Rfc3RyZWFtID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tXHUwMDNlbmJfcGt0cyAvIDIsXG4tXHRcdFx0XHRcdFx0ICAgcGt0X3N0cmVhbS1cdTAwM2Vwa3RzWzBdLmxlbiwgaSwgMik7XG4tXHRcdGlmICghcGt0X3N0cmVhbSlcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdFx0dGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSBwa3Rfc3RyZWFtO1xuJiM0MztcdFx0dHhfc3RyZWFtc1tpXSA9IF9fcGt0X3N0cmVhbV9nZW5lcmF0ZShwa3Rfc3RyZWFtLVx1MDAzZW5iX3BrdHMgLyAyLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICBwa3Rfc3RyZWFtLVx1MDAzZXBrdHNbMF0ubGVuLCBpLCAyKTtcbiYjNDM7XHRcdGlmICghdHhfc3RyZWFtc1tpXSlcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4gXG4gXHRcdHBrdF9zdHJlYW0gPSB0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbTtcbi1cdFx0cGt0X3N0cmVhbSA9IF9fcGt0X3N0cmVhbV9nZW5lcmF0ZShwa3Rfc3RyZWFtLVx1MDAzZW5iX3BrdHMgLyAyLFxuLVx0XHRcdFx0XHRcdCAgIHBrdF9zdHJlYW0tXHUwMDNlcGt0c1swXS5sZW4sIGksIDIpO1xuLVx0XHRpZiAoIXBrdF9zdHJlYW0pXG4tXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRcdHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtID0gcGt0X3N0cmVhbTtcbiYjNDM7XHRcdHJ4X3N0cmVhbXNbaV0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUocGt0X3N0cmVhbS1cdTAwM2VuYl9wa3RzIC8gMixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgcGt0X3N0cmVhbS1cdTAwM2Vwa3RzWzBdLmxlbiwgaSwgMik7XG4mIzQzO1x0XHRpZiAoIXJ4X3N0cmVhbXNbaV0pXG4mIzQzO1x0XHRcdGdvdG8gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGVzdC1cdTAwM2VuYl9zb2NrZXRzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSB0eF9zdHJlYW1zW2ldO1xuJiM0MztcdFx0dGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSByeF9zdHJlYW1zW2ldO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnI6XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGVzdC1cdTAwM2VuYl9zb2NrZXRzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHR4X3N0cmVhbXNbaV0pXG4mIzQzO1x0XHRcdHBrdF9zdHJlYW1fZGVsZXRlKHR4X3N0cmVhbXNbaV0pO1xuJiM0MztcdFx0aWYgKHJ4X3N0cmVhbXNbaV0pXG4mIzQzO1x0XHRcdHBrdF9zdHJlYW1fZGVsZXRlKHJ4X3N0cmVhbXNbaV0pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FTk9NRU07XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGt0X3N0cmVhbV9sZW5fc2VxKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHUzMiBzaG9ydF9sZW4sIHUzMiBsb25nX2xlbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwa3Rfc3RyZWFtICp0eF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9O1xuJiM0MztcdHN0cnVjdCBwa3Rfc3RyZWFtICpyeF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9O1xuJiM0MztcdHN0cnVjdCBwa3Rfc3RyZWFtICpwa3Rfc3RyZWFtO1xuJiM0MztcdHUzMiBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0ZXN0LVx1MDAzZW5iX3NvY2tldHM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1MzIgcGt0X2xlbiA9IGkgPyBsb25nX2xlbiA6IHNob3J0X2xlbjtcbiYjNDM7XG4mIzQzO1x0XHRwa3Rfc3RyZWFtID0gdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW07XG4mIzQzO1x0XHR0eF9zdHJlYW1zW2ldID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tXHUwMDNlbmJfcGt0cyAvIDIsIHBrdF9sZW4sIGksIDIpO1xuJiM0MztcdFx0aWYgKCF0eF9zdHJlYW1zW2ldKVxuJiM0MztcdFx0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0XHRwa3Rfc3RyZWFtID0gdGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW07XG4mIzQzO1x0XHRyeF9zdHJlYW1zW2ldID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tXHUwMDNlbmJfcGt0cyAvIDIsIHBrdF9sZW4sIGksIDIpO1xuJiM0MztcdFx0aWYgKCFyeF9zdHJlYW1zW2ldKVxuJiM0MztcdFx0XHRnb3RvIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlc3QtXHUwMDNlbmJfc29ja2V0czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtID0gdHhfc3RyZWFtc1tpXTtcbiYjNDM7XHRcdHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtID0gcnhfc3RyZWFtc1tpXTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyOlxuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlc3QtXHUwMDNlbmJfc29ja2V0czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmICh0eF9zdHJlYW1zW2ldKVxuJiM0MztcdFx0XHRwa3Rfc3RyZWFtX2RlbGV0ZSh0eF9zdHJlYW1zW2ldKTtcbiYjNDM7XHRcdGlmIChyeF9zdHJlYW1zW2ldKVxuJiM0MztcdFx0XHRwa3Rfc3RyZWFtX2RlbGV0ZShyeF9zdHJlYW1zW2ldKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAtRU5PTUVNO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBrdF9zdHJlYW1fd2VpZ2h0ZWRfdW5ldmVuX2Rpc3Rfc2VxdWVuY2Uoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgdTMyIHRvdGFsX3BrdHMsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICB1MzIgcGt0X2xlbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwa3Rfc3RyZWFtICp0eF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9O1xuJiM0MztcdHN0cnVjdCBwa3Rfc3RyZWFtICpyeF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9O1xuJiM0MztcdHUzMiBpLCBwa3RzX3NvY2swO1xuJiM0MztcbiYjNDM7XHRpZiAodGVzdC1cdTAwM2VuYl9zb2NrZXRzIFx1MDAzYyAyIHx8IHRvdGFsX3BrdHMgXHUwMDNjIDQpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0cGt0c19zb2NrMCA9IHRvdGFsX3BrdHMgLyA0O1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0ZXN0LVx1MDAzZW5iX3NvY2tldHM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1MzIgbmJfcGt0cyA9IChpID09IDApID8gcGt0c19zb2NrMCA6ICh0b3RhbF9wa3RzIC0gcGt0c19zb2NrMCk7XG4mIzQzO1xuJiM0MztcdFx0dHhfc3RyZWFtc1tpXSA9IF9fcGt0X3N0cmVhbV9nZW5lcmF0ZShuYl9wa3RzLCBwa3RfbGVuLCBpLCAyKTtcbiYjNDM7XHRcdGlmICghdHhfc3RyZWFtc1tpXSlcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdFx0cnhfc3RyZWFtc1tpXSA9IF9fcGt0X3N0cmVhbV9nZW5lcmF0ZShuYl9wa3RzLCBwa3RfbGVuLCBpLCAyKTtcbiYjNDM7XHRcdGlmICghcnhfc3RyZWFtc1tpXSlcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0ZXN0LVx1MDAzZW5iX3NvY2tldHM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSA9IHR4X3N0cmVhbXNbaV07XG4mIzQzO1x0XHR0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSA9IHJ4X3N0cmVhbXNbaV07XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2VycjpcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0ZXN0LVx1MDAzZW5iX3NvY2tldHM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAodHhfc3RyZWFtc1tpXSlcbiYjNDM7XHRcdFx0cGt0X3N0cmVhbV9kZWxldGUodHhfc3RyZWFtc1tpXSk7XG4mIzQzO1x0XHRpZiAocnhfc3RyZWFtc1tpXSlcbiYjNDM7XHRcdFx0cGt0X3N0cmVhbV9kZWxldGUocnhfc3RyZWFtc1tpXSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gLUVOT01FTTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcmVsZWFzZV9ldmVuX29kZF9zZXF1ZW5jZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuQEAgLTE0NjgsNiAmIzQzOzE1ODcsMjggQEAgc3RhdGljIGludCB2YWxpZGF0ZV90eF9pbnZhbGlkX2Rlc2NzKHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QpXG4gXHRyZXR1cm4gVEVTVF9QQVNTO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgeHNrX2RlbGV0ZV9zb2NrZXRfYmF0Y2goc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdCwgdTMyIGNvdW50KVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGk7XG4mIzQzO1xuJiM0MztcdGlmICghaWZvYmplY3QpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IGNvdW50OyBpIFx1MDAzZSAwOyBpLS0pXG4mIzQzO1x0XHR4c2tfZGVsZXRlX3NvY2tldChcdTAwMjZpZm9iamVjdC1cdTAwM2V4c2tfYXJyW2kgLSAxXSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHhza19jb25maWd1cmVfcm9sbGJhY2soc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdCwgaW50IGxhc3QpXG4mIzQzO3tcbiYjNDM7XHR1MzIgY291bnQ7XG4mIzQzO1xuJiM0MztcdGlmICghaWZvYmplY3QgfHwgbGFzdCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Y291bnQgPSBsYXN0ICYjNDM7IDE7XG4mIzQzO1x0eHNrX2RlbGV0ZV9zb2NrZXRfYmF0Y2goaWZvYmplY3QsIGNvdW50KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHhza19jb25maWd1cmUoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdCxcbiBcdFx0XHQgIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtLCBib29sIHR4KVxuIHtcbkBAIC0xNDg0LDE0ICYjNDM7MTYyNSwxOCBAQCBzdGF0aWMgaW50IHhza19jb25maWd1cmUoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdCxcbiBcdFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRcdC8qIFJldHJ5IGlmIGl0IGZhaWxzIGFzIHhza19zb2NrZXRfX2NyZWF0ZSgpIGlzIGFzeW5jaHJvbm91cyAqL1xuLVx0XHRcdGlmIChjdHIgXHUwMDNlPSBTT0NLX1JFQ09ORl9DVFIpXG4mIzQzO1x0XHRcdGlmIChjdHIgXHUwMDNlPSBTT0NLX1JFQ09ORl9DVFIpIHtcbiYjNDM7XHRcdFx0XHR4c2tfY29uZmlndXJlX3JvbGxiYWNrKGlmb2JqZWN0LCBpKTtcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRcdH1cbiBcdFx0XHR1c2xlZXAoVVNMRUVQX01BWCk7XG4gXHRcdH1cbiBcdFx0aWYgKGlmb2JqZWN0LVx1MDAzZWJ1c3lfcG9sbCkge1xuIFx0XHRcdHJldCA9IGVuYWJsZV9idXN5X3BvbGwoXHUwMDI2aWZvYmplY3QtXHUwMDNleHNrX2FycltpXSk7XG4tXHRcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRcdHhza19jb25maWd1cmVfcm9sbGJhY2soaWZvYmplY3QsIGkpO1xuIFx0XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdFx0fVxuIFx0XHR9XG4gXHR9XG4gXG5AQCAtMTcwMiwxMiAmIzQzOzE4NDcsNjAgQEAgdm9pZCAqd29ya2VyX3Rlc3RhcHBfdmFsaWRhdGVfcngodm9pZCAqYXJnKVxuIFx0cHRocmVhZF9leGl0KE5VTEwpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB0ZXN0YXBwX2NsZWFuX3hza191bWVtKHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXG4mIzQzO3ZvaWQgeHNrX2RlbGV0ZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrKVxuIHtcbi1cdHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtID0gaWZvYmotXHUwMDNleHNrLVx1MDAzZXVtZW07XG4mIzQzO1x0c3RydWN0IHhza191bWVtX2luZm8gKnVtZW07XG4gXG4tXHR4c2tfdW1lbV9fZGVsZXRlKHVtZW0tXHUwMDNldW1lbSk7XG4tXHRtdW5tYXAodW1lbS1cdTAwM2VidWZmZXIsIHVtZW0tXHUwMDNlbW1hcF9zaXplKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIENhbGxlcnMgbXVzdCBzZXJpYWxpemUgdGVhcmRvd24gZm9yIGEgZ2l2ZW4geHNrL3VtZW0gcGFpci5cbiYjNDM7XHQgKiBUaGlzIGhlbHBlciBkb2VzIHJlZmNvdW50LWJhc2VkIGxpZmV0aW1lIG1hbmFnZW1lbnQgb25seS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXhzaylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0dW1lbSA9IHhzay1cdTAwM2V1bWVtO1xuJiM0MztcdGlmICghdW1lbSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0LyogRGVsZXRlIHRoZSBzb2NrZXQgaGFuZGxlIHdoZW4gYXZhaWxhYmxlLCB0aGVuIGRyb3AgVU1FTSByZWZlcmVuY2UuICovXG4mIzQzO1x0aWYgKHhzay1cdTAwM2V4c2spXG4mIzQzO1x0XHR4c2tfc29ja2V0X19kZWxldGUoeHNrLVx1MDAzZXhzayk7XG4mIzQzO1x0eHNrLVx1MDAzZXhzayA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdC8qIE1hcmsgdGhpcyBzb2NrZXQgYXMgY2xlYW5lZCB1cCB0byBwcmV2ZW50IGRvdWJsZS1kZWNyZW1lbnQgKi9cbiYjNDM7XHR4c2stXHUwMDNldW1lbSA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGVhcmRvd24gbWF5IHdhbGsgdGhlIGZ1bGwgeHNrIGFycmF5LCBpbmNsdWRpbmcgc2xvdHMgdGhhdCBuZXZlciBjb21wbGV0ZWQgc2V0dXAgYnV0XG4mIzQzO1x0ICogc3RpbGwgY2FycnkgYSBwcmVpbml0aWFsaXplZCB1bWVtIHBvaW50ZXIuIEFmdGVyIGEgcGFydGlhbC1zZXR1cCByb2xsYmFjaywgdGhlIGxhc3QgVU1FTVxuJiM0MztcdCAqIHJlZiBtYXkgYWxyZWFkeSBiZSBkcm9wcGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghcmVmY291bnRfcmVhZChcdTAwMjZ1bWVtLVx1MDAzZXVzZXJzKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0LyogQWx3YXlzIGRlY3JlbWVudCByZWZjb3VudCBmb3IgdGhpcyBzb2NrZXQmIzM5O3MgVU1FTSByZWZlcmVuY2UgKi9cbiYjNDM7XHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNnVtZW0tXHUwMDNldXNlcnMpKSB7XG4mIzQzO1x0XHRpZiAodW1lbS1cdTAwM2V1bWVtKSB7XG4mIzQzO1x0XHRcdGludCBlcnIgPSB4c2tfdW1lbV9fZGVsZXRlKHVtZW0tXHUwMDNldW1lbSk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O3hza191bWVtX19kZWxldGUgZmFpbGVkOiAlZCAodW1lbSBzdGlsbCBidXN5PylcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgZXJyKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmICh1bWVtLVx1MDAzZWJ1ZmZlciBcdTAwMjZcdTAwMjYgdW1lbS1cdTAwM2VtbWFwX3NpemUpXG4mIzQzO1x0XHRcdG11bm1hcCh1bWVtLVx1MDAzZWJ1ZmZlciwgdW1lbS1cdTAwM2VtbWFwX3NpemUpO1xuJiM0MztcdFx0dW1lbS1cdTAwM2V1bWVtID0gTlVMTDtcbiYjNDM7XHRcdHVtZW0tXHUwMDNlYnVmZmVyID0gTlVMTDtcbiYjNDM7XHRcdHVtZW0tXHUwMDNlbW1hcF9zaXplID0gMDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iailcbiYjNDM7e1xuJiM0MztcdGlmICghaWZvYmopXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHhza19kZWxldGVfc29ja2V0X2JhdGNoKGlmb2JqLCB0ZXN0LVx1MDAzZW5iX3NvY2tldHMpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCB4ZHBfcHJvZ19jaGFuZ2VkX3J4KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG5AQCAtMTc2OSwyNyAmIzQzOzE5NjIsNiBAQCBzdGF0aWMgaW50IHhza19hdHRhY2hfeGRwX3Byb2dzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmpfclxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tc3RhdGljIHZvaWQgY2xlYW5fc29ja2V0cyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqKVxuLXtcbi1cdHUzMiBpO1xuLVxuLVx0aWYgKCFpZm9iaiB8fCAhdGVzdClcbi1cdFx0cmV0dXJuO1xuLVxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGVzdC1cdTAwM2VuYl9zb2NrZXRzOyBpJiM0MzsmIzQzOylcbi1cdFx0eHNrX3NvY2tldF9fZGVsZXRlKGlmb2JqLVx1MDAzZXhza19hcnJbaV0ueHNrKTtcbi19XG4tXG4tc3RhdGljIHZvaWQgY2xlYW5fdW1lbShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqMSwgc3RydWN0IGlmb2JqZWN0ICppZm9iajIpXG4te1xuLVx0aWYgKCFpZm9iajEpXG4tXHRcdHJldHVybjtcbi1cbi1cdHRlc3RhcHBfY2xlYW5feHNrX3VtZW0oaWZvYmoxKTtcbi1cdGlmIChpZm9iajIgXHUwMDI2XHUwMDI2ICFpZm9iajItXHUwMDNlc2hhcmVkX3VtZW0pXG4tXHRcdHRlc3RhcHBfY2xlYW5feHNrX3VtZW0oaWZvYmoyKTtcbi19XG4tXG4gc3RhdGljIGludCBfX3Rlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqMSxcbiBcdFx0XHRcdCAgICAgIHN0cnVjdCBpZm9iamVjdCAqaWZvYmoyKVxuIHtcbkBAIC0xODQxLDggJiM0MzsyMDEzLDcgQEAgc3RhdGljIGludCBfX3Rlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlcbiBcdFx0aWYgKHB0aHJlYWRfYmFycmllcl9kZXN0cm95KFx1MDAyNmJhcnIpKSB7XG4gXHRcdFx0dGVzdC1cdTAwM2V1c2VfYmFycmllciA9IGZhbHNlO1xuIFx0XHRcdHB0aHJlYWRfam9pbih0MCwgTlVMTCk7XG4tXHRcdFx0Y2xlYW5fc29ja2V0cyh0ZXN0LCBpZm9iajEpO1xuLVx0XHRcdGNsZWFuX3VtZW0odGVzdCwgaWZvYmoxLCBOVUxMKTtcbiYjNDM7XHRcdFx0eHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCBpZm9iajEpO1xuIFx0XHRcdHJldHVybiBURVNUX0ZBSUxVUkU7XG4gXHRcdH1cbiBcdH1cbkBAIC0xODU2LDkgJiM0MzsyMDI3LDggQEAgc3RhdGljIGludCBfX3Rlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlcbiBcdHB0aHJlYWRfam9pbih0MCwgTlVMTCk7XG4gXG4gXHRpZiAodGVzdC1cdTAwM2V0b3RhbF9zdGVwcyA9PSB0ZXN0LVx1MDAzZWN1cnJlbnRfc3RlcCB8fCB0ZXN0LVx1MDAzZWZhaWwpIHtcbi1cdFx0Y2xlYW5fc29ja2V0cyh0ZXN0LCBpZm9iajEpO1xuLVx0XHRjbGVhbl9zb2NrZXRzKHRlc3QsIGlmb2JqMik7XG4tXHRcdGNsZWFuX3VtZW0odGVzdCwgaWZvYmoxLCBpZm9iajIpO1xuJiM0MztcdFx0eHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCBpZm9iajIpO1xuJiM0MztcdFx0eHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCBpZm9iajEpO1xuIFx0fVxuIFxuIFx0aWYgKHRlc3QtXHUwMDNlZmFpbClcbkBAIC0xOTY3LDkgJiM0MzsyMTM3LDggQEAgaW50IHRlc3RhcHBfeGRwX3Byb2dfY2xlYW51cChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuIFx0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuIFxuIFx0aWYgKHN3YXBfeHNrX3Jlc291cmNlcyh0ZXN0KSkge1xuLVx0XHRjbGVhbl9zb2NrZXRzKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfcngpO1xuLVx0XHRjbGVhbl9zb2NrZXRzKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfdHgpO1xuLVx0XHRjbGVhbl91bWVtKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfcngsIHRlc3QtXHUwMDNlaWZvYmpfdHgpO1xuJiM0MztcdFx0eHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCB0ZXN0LVx1MDAzZWlmb2JqX3R4KTtcbiYjNDM7XHRcdHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgdGVzdC1cdTAwM2VpZm9ial9yeCk7XG4gXHRcdHJldHVybiBURVNUX0ZBSUxVUkU7XG4gXHR9XG4gXG5AQCAtMjIyNCw2ICYjNDM7MjM5MywxNjggQEAgaW50IHRlc3RhcHBfeGRwX3NoYXJlZF91bWVtKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBzaGFyZWRfdW1lbV90ZXN0X3ByZXBhcmUoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiYjNDM7e1xuJiM0MztcdHUzMiBpO1xuJiM0MztcbiYjNDM7XHRpZiAodGVzdC1cdTAwM2VuYl9zb2NrZXRzIFx1MDAzZSBNQVhfU09DS0VUUykge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7RVJST1I6IFslc10gaW52YWxpZCBzb2NrZXQgY291bnQgJXVcXG5cJiMzNDssIF9fZnVuY19fLCB0ZXN0LVx1MDAzZW5iX3NvY2tldHMpO1xuJiM0MztcdFx0cmV0dXJuIFRFU1RfRkFJTFVSRTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlc3QtXHUwMDNlbmJfc29ja2V0czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmICghdGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gfHxcbiYjNDM7XHRcdCAgICAhdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0pIHtcbiYjNDM7XHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7RVJST1I6IFslc10gbWlzc2luZyBzdHJlYW0gZm9yIHNvY2tldCAldVxcblwmIzM0OywgX19mdW5jX18sIGkpO1xuJiM0MztcdFx0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIFRFU1RfUEFTUztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBzaGFyZWRfdW1lbV9zZXFfZXZlbl9vZGQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgY29uc3Qgdm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0KHZvaWQpY3R4O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcGt0X3N0cmVhbV9ldmVuX29kZF9zZXF1ZW5jZSh0ZXN0KSA/IFRFU1RfRkFJTFVSRSA6IFRFU1RfUEFTUztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBzaGFyZWRfdW1lbV9zZXFfbGVuKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIGNvbnN0IHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBzaGFyZWRfdW1lbV9sZW5fY3R4ICpjZmcgPSBjdHg7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwa3Rfc3RyZWFtX2xlbl9zZXEodGVzdCwgY2ZnLVx1MDAzZXNob3J0X2xlbiwgY2ZnLVx1MDAzZWxvbmdfbGVuKSA/IFRFU1RfRkFJTFVSRSA6IFRFU1RfUEFTUztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBzaGFyZWRfdW1lbV9zZXFfdW5ldmVuX2Rpc3Qoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgY29uc3Qgdm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHNoYXJlZF91bWVtX3VuZXZlbl9kaXN0X2N0eCAqY2ZnID0gY3R4O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcGt0X3N0cmVhbV93ZWlnaHRlZF91bmV2ZW5fZGlzdF9zZXF1ZW5jZSh0ZXN0LCBjZmctXHUwMDNldG90YWxfcGt0cyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgY2ZnLVx1MDAzZXBrdF9sZW4pID8gVEVTVF9GQUlMVVJFIDogVEVTVF9QQVNTO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHNoYXJlZF91bWVtX3Bvc3RfdW5ldmVuX2Rpc3Qoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgaW50IHJldCwgY29uc3Qgdm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBrdF9zdHJlYW0gKnR4X3N0cmVhbV8wLCAqdHhfc3RyZWFtXzE7XG4mIzQzO1x0c3RydWN0IHBrdF9zdHJlYW0gKnJ4X3N0cmVhbV8wLCAqcnhfc3RyZWFtXzE7XG4mIzQzO1xuJiM0MztcdCh2b2lkKWN0eDtcbiYjNDM7XG4mIzQzO1x0dHhfc3RyZWFtXzAgPSB0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhza19hcnJbMF0ucGt0X3N0cmVhbTtcbiYjNDM7XHR0eF9zdHJlYW1fMSA9IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleHNrX2FyclsxXS5wa3Rfc3RyZWFtO1xuJiM0MztcdHJ4X3N0cmVhbV8wID0gdGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2tfYXJyWzBdLnBrdF9zdHJlYW07XG4mIzQzO1x0cnhfc3RyZWFtXzEgPSB0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhza19hcnJbMV0ucGt0X3N0cmVhbTtcbiYjNDM7XG4mIzQzO1x0aWYgKHR4X3N0cmVhbV8xLVx1MDAzZW5iX3ZhbGlkX2VudHJpZXMgXHUwMDNjPSB0eF9zdHJlYW1fMC1cdTAwM2VuYl92YWxpZF9lbnRyaWVzKVxuJiM0MztcdFx0cmV0dXJuIFRFU1RfRkFJTFVSRTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHJ4X3N0cmVhbV8xLVx1MDAzZW5iX3J4X3BrdHMgXHUwMDNjPSByeF9zdHJlYW1fMC1cdTAwM2VuYl9yeF9wa3RzKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtFUlJPUjogc29ja2V0MSByeF9wa3RzICgldSkgbm90IGdyZWF0ZXIgdGhhbiBzb2NrZXQwICgldSlcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgICByeF9zdHJlYW1fMS1cdTAwM2VuYl9yeF9wa3RzLCByeF9zdHJlYW1fMC1cdTAwM2VuYl9yeF9wa3RzKTtcbiYjNDM7XHRcdHJldCA9IFRFU1RfRkFJTFVSRTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnVuX3NoYXJlZF91bWVtX3Rlc3Qoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGJwZl9wcm9ncmFtICp4ZHBfcHJvZ19yeCxcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgYnBmX3Byb2dyYW0gKnhkcF9wcm9nX3R4LCBzdHJ1Y3QgYnBmX21hcCAqeHNrbWFwX3J4LFxuJiM0MztcdFx0XHRcdHN0cnVjdCBicGZfbWFwICp4c2ttYXBfdHgsIHUzMiBuYl9zb2NrZXRzLFxuJiM0MztcdFx0XHRcdHNoYXJlZF91bWVtX3NlcV9mbiBzZXFfZm4sIHNoYXJlZF91bWVtX3Bvc3RfZm4gcG9zdF9mbixcbiYjNDM7XHRcdFx0XHRjb25zdCB2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHR0ZXN0LVx1MDAzZXRvdGFsX3N0ZXBzID0gMTtcbiYjNDM7XHR0ZXN0LVx1MDAzZW5iX3NvY2tldHMgPSBuYl9zb2NrZXRzO1xuJiM0MztcbiYjNDM7XHR0ZXN0X3NwZWNfc2V0X3hkcF9wcm9nKHRlc3QsIHhkcF9wcm9nX3J4LCB4ZHBfcHJvZ190eCwgeHNrbWFwX3J4LCB4c2ttYXBfdHgpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBzaGFyZWRfdW1lbV90ZXN0X3ByZXBhcmUodGVzdCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHNlcV9mbih0ZXN0LCBjdHgpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB0ZXN0YXBwX3ZhbGlkYXRlX3RyYWZmaWModGVzdCk7XG4mIzQzO1x0aWYgKHBvc3RfZm4pXG4mIzQzO1x0XHRyZXQgPSBwb3N0X2ZuKHRlc3QsIHJldCwgY3R4KTtcbiYjNDM7XG4mIzQzO1x0cmVsZWFzZV9ldmVuX29kZF9zZXF1ZW5jZSh0ZXN0KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fNF9zb2NrZXRzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF9yeCA9IHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleGRwX3Byb2dzO1xuJiM0MztcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3R4ID0gdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4ZHBfcHJvZ3M7XG4mIzQzO1xuJiM0MztcdHJldHVybiBydW5fc2hhcmVkX3VtZW1fdGVzdCh0ZXN0LCBza2VsX3J4LVx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sXG4mIzQzO1x0XHRcdFx0ICAgIHNrZWxfdHgtXHUwMDNlcHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSwgc2tlbF9yeC1cdTAwM2VtYXBzLnhzayxcbiYjNDM7XHRcdFx0XHQgICAgc2tlbF90eC1cdTAwM2VtYXBzLnhzaywgNCwgc2hhcmVkX3VtZW1fc2VxX2V2ZW5fb2RkLCBOVUxMLCBOVUxMKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF9yeCA9IHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleGRwX3Byb2dzO1xuJiM0MztcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3R4ID0gdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4ZHBfcHJvZ3M7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHNoYXJlZF91bWVtX2xlbl9jdHggbGVuX2N0eCA9IHtcbiYjNDM7XHRcdC5zaG9ydF9sZW4gPSBNSU5fUEtUX1NJWkUsXG4mIzQzO1x0XHQubG9uZ19sZW4gPSBNSU5fUEtUX1NJWkUgKiAyLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBydW5fc2hhcmVkX3VtZW1fdGVzdCh0ZXN0LCBza2VsX3J4LVx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkLFxuJiM0MztcdFx0XHRcdCAgICBza2VsX3R4LVx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkLFxuJiM0MztcdFx0XHRcdCAgICBza2VsX3J4LVx1MDAzZW1hcHMueHNrLCBza2VsX3R4LVx1MDAzZW1hcHMueHNrLCAyLCBzaGFyZWRfdW1lbV9zZXFfbGVuLFxuJiM0MztcdFx0XHRcdCAgICBOVUxMLCBcdTAwMjZsZW5fY3R4KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3Qoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3J4ID0gdGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4ZHBfcHJvZ3M7XG4mIzQzO1x0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfdHggPSB0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhkcF9wcm9ncztcbiYjNDM7XHRjb25zdCBzdHJ1Y3Qgc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3RfY3R4IHVuZXZlbl9kaXN0X2N0eCA9IHtcbiYjNDM7XHRcdC50b3RhbF9wa3RzID0gREVGQVVMVF9QS1RfQ05UICogNCxcbiYjNDM7XHRcdC5wa3RfbGVuID0gTUlOX1BLVF9TSVpFLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBydW5fc2hhcmVkX3VtZW1fdGVzdCh0ZXN0LCBza2VsX3J4LVx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sXG4mIzQzO1x0XHRcdFx0ICAgIHNrZWxfdHgtXHUwMDNlcHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSwgc2tlbF9yeC1cdTAwM2VtYXBzLnhzayxcbiYjNDM7XHRcdFx0XHQgICAgc2tlbF90eC1cdTAwM2VtYXBzLnhzaywgMiwgc2hhcmVkX3VtZW1fc2VxX3VuZXZlbl9kaXN0LFxuJiM0MztcdFx0XHRcdCAgICBzaGFyZWRfdW1lbV9wb3N0X3VuZXZlbl9kaXN0LCBcdTAwMjZ1bmV2ZW5fZGlzdF9jdHgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV91bmFsaWduZWQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3J4ID0gdGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4ZHBfcHJvZ3M7XG4mIzQzO1x0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfdHggPSB0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhkcF9wcm9ncztcbiYjNDM7XHRzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdHhfdW1lbSA9IHRlc3QtXHUwMDNlaWZvYmpfdHggXHUwMDI2XHUwMDI2IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleHNrID9cbiYjNDM7XHRcdHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleHNrLVx1MDAzZXVtZW0gOiBOVUxMO1xuJiM0MztcdHN0cnVjdCB4c2tfdW1lbV9pbmZvICpyeF91bWVtID0gdGVzdC1cdTAwM2VpZm9ial9yeCBcdTAwMjZcdTAwMjYgdGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2sgP1xuJiM0MztcdFx0dGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2stXHUwMDNldW1lbSA6IE5VTEw7XG4mIzQzO1x0Ym9vbCB0eF91bmFsaWduZWQgPSB0eF91bWVtID8gdHhfdW1lbS1cdTAwM2V1bmFsaWduZWRfbW9kZSA6IGZhbHNlO1xuJiM0MztcdGJvb2wgcnhfdW5hbGlnbmVkID0gcnhfdW1lbSA/IHJ4X3VtZW0tXHUwMDNldW5hbGlnbmVkX21vZGUgOiBmYWxzZTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHR0ZXN0X3NwZWNfc2V0X3VuYWxpZ25lZCh0ZXN0KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnVuX3NoYXJlZF91bWVtX3Rlc3QodGVzdCwgc2tlbF9yeC1cdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLFxuJiM0MztcdFx0XHRcdCAgIHNrZWxfdHgtXHUwMDNlcHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSwgc2tlbF9yeC1cdTAwM2VtYXBzLnhzayxcbiYjNDM7XHRcdFx0XHQgICBza2VsX3R4LVx1MDAzZW1hcHMueHNrLCAyLCBzaGFyZWRfdW1lbV9zZXFfZXZlbl9vZGQsIE5VTEwsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRpZiAodHhfdW1lbSlcbiYjNDM7XHRcdHR4X3VtZW0tXHUwMDNldW5hbGlnbmVkX21vZGUgPSB0eF91bmFsaWduZWQ7XG4mIzQzO1x0aWYgKHJ4X3VtZW0pXG4mIzQzO1x0XHRyeF91bWVtLVx1MDAzZXVuYWxpZ25lZF9tb2RlID0gcnhfdW5hbGlnbmVkO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIGludCB0ZXN0YXBwX3BvbGxfdHhxX3Rtb3V0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4ge1xuIFx0Ym9vbCBzaGFyZWRfdW1lbSA9IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNlc2hhcmVkX3VtZW07XG5AQCAtMjQ5OCw5ICYjNDM7MjgyOSw4IEBAIGludCB0ZXN0YXBwX2h3X3N3X21heF9yaW5nX3NpemUoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiBcdHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleHNrLVx1MDAzZWJhdGNoX3NpemUgPSB0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXJpbmcudHhfbWF4X3BlbmRpbmcgLSA4O1xuIFx0dGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2stXHUwMDNlYmF0Y2hfc2l6ZSA9IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNlcmluZy50eF9tYXhfcGVuZGluZyAtIDg7XG4gXHRpZiAocGt0X3N0cmVhbV9yZXBsYWNlKHRlc3QsIG1heF9kZXNjcywgTUlOX1BLVF9TSVpFKSkge1xuLVx0XHRjbGVhbl9zb2NrZXRzKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfdHgpO1xuLVx0XHRjbGVhbl9zb2NrZXRzKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfcngpO1xuLVx0XHRjbGVhbl91bWVtKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfcngsIHRlc3QtXHUwMDNlaWZvYmpfdHgpO1xuJiM0MztcdFx0eHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCB0ZXN0LVx1MDAzZWlmb2JqX3R4KTtcbiYjNDM7XHRcdHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgdGVzdC1cdTAwM2VpZm9ial9yeCk7XG4gXHRcdHJldHVybiBURVNUX0ZBSUxVUkU7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmhcbmluZGV4IDAzNzUzZGRjNWRjZGEuLmVmOWM0MjJkNzc2M2UgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5oXG5AQCAtNCw2ICYjNDM7NCw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXRodG9vbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfeGRwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcmVmY291bnQuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0Oy4uL2tzZWxmdGVzdC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7eHNrLmhcJiMzNDtcbkBAIC03OSw2ICYjNDM7ODAsOSBAQCBzdHJ1Y3QgdGVzdF9zcGVjO1xuIHR5cGVkZWYgaW50ICgqdmFsaWRhdGlvbl9mdW5jX3QpKHN0cnVjdCBpZm9iamVjdCAqaWZvYmopO1xuIHR5cGVkZWYgdm9pZCAqKCp0aHJlYWRfZnVuY190KSh2b2lkICphcmcpO1xuIHR5cGVkZWYgaW50ICgqdGVzdF9mdW5jX3QpKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuJiM0Mzt0eXBlZGVmIGludCAoKnNoYXJlZF91bWVtX3NlcV9mbikoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgY29uc3Qgdm9pZCAqY3R4KTtcbiYjNDM7dHlwZWRlZiBpbnQgKCpzaGFyZWRfdW1lbV9wb3N0X2ZuKShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBpbnQgcmV0LFxuJiM0MztcdFx0XHRcdFx0ICAgY29uc3Qgdm9pZCAqY3R4KTtcbiBcbiBzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvIHtcbiBcdHN0cnVjdCB4c2tfcmluZ19jb25zIHJ4O1xuQEAgLTEwNCw2ICYjNDM7MTA4LDcgQEAgc3RydWN0IHhza191bWVtX2luZm8ge1xuIFx0c3RydWN0IHhza191bWVtICp1bWVtO1xuIFx0dTY0IG5leHRfYnVmZmVyO1xuIFx0dTY0IG1tYXBfc2l6ZTtcbiYjNDM7XHRyZWZjb3VudF90IHVzZXJzO1xuIFx0dTMyIG51bV9mcmFtZXM7XG4gXHR1MzIgZnJhbWVfaGVhZHJvb207XG4gXHR2b2lkICpidWZmZXI7XG5AQCAtMTU5LDYgJiM0MzsxNjQsNyBAQCBpbnQgaW5pdF9pZmFjZShzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqLCB0aHJlYWRfZnVuY190IGZ1bmNfcHRyKTtcbiBpbnQgeHNrX2NvbmZpZ3VyZV91bWVtKHN0cnVjdCBpZm9iamVjdCAqaWZvYmosIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtLCB2b2lkICpidWZmZXIsIHU2NCBzaXplKTtcbiBpbnQgeHNrX2NvbmZpZ3VyZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrLCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbSxcbiBcdFx0XHQgc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdCwgYm9vbCBzaGFyZWQpO1xuJiM0Mzt2b2lkIHhza19kZWxldGVfc29ja2V0KHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzayk7XG4gXG4gXG4gc3RydWN0IHBrdCB7XG5AQCAtMTc5LDYgJiM0MzsxODUsMTYgQEAgc3RydWN0IHBrdF9zdHJlYW0ge1xuIFx0Ym9vbCB2ZXJiYXRpbTtcbiB9O1xuIFxuJiM0MztzdHJ1Y3Qgc2hhcmVkX3VtZW1fbGVuX2N0eCB7XG4mIzQzO1x0dTMyIHNob3J0X2xlbjtcbiYjNDM7XHR1MzIgbG9uZ19sZW47XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3Qgc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3RfY3R4IHtcbiYjNDM7XHR1MzIgdG90YWxfcGt0cztcbiYjNDM7XHR1MzIgcGt0X2xlbjtcbiYjNDM7fTtcbiYjNDM7XG4gc3RhdGljIGlubGluZSBib29sIHBrdF9jb250aW51ZXModTMyIG9wdGlvbnMpXG4ge1xuIFx0cmV0dXJuIG9wdGlvbnMgXHUwMDI2IFhEUF9QS1RfQ09OVEQ7XG5AQCAtMjY4LDYgJiM0MzsyODQsMTAgQEAgaW50IHRlc3RhcHBfeGRwX21ldGFkYXRhKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuIGludCB0ZXN0YXBwX3hkcF9tZXRhZGF0YV9tYihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTtcbiBpbnQgdGVzdGFwcF94ZHBfcHJvZ19jbGVhbnVwKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuIGludCB0ZXN0YXBwX3hkcF9zaGFyZWRfdW1lbShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTtcbiYjNDM7aW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fNF9zb2NrZXRzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuJiM0MztpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XG4mIzQzO2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX3VuZXZlbl9kaXN0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuJiM0MztpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV91bmFsaWduZWQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XG4gXG4gdm9pZCAqd29ya2VyX3Rlc3RhcHBfdmFsaWRhdGVfcngodm9pZCAqYXJnKTtcbiB2b2lkICp3b3JrZXJfdGVzdGFwcF92YWxpZGF0ZV90eCh2b2lkICphcmcpO1xuQEAgLTI5MSw2ICYjNDM7MzExLDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdGVzdF9zcGVjIHRlc3RzW10gPSB7XG4gXHR7Lm5hbWUgPSBcJiMzNDtYRFBfUFJPR19DTEVBTlVQXCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF94ZHBfcHJvZ19jbGVhbnVwfSxcbiBcdHsubmFtZSA9IFwmIzM0O1hEUF9EUk9QX0hBTEZcJiMzNDssIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3hkcF9kcm9wfSxcbiBcdHsubmFtZSA9IFwmIzM0O1hEUF9TSEFSRURfVU1FTVwmIzM0OywgLnRlc3RfZnVuYyA9IHRlc3RhcHBfeGRwX3NoYXJlZF91bWVtfSxcbiYjNDM7XHR7Lm5hbWUgPSBcJiMzNDtTSEFSRURfVU1FTV80X1NPQ0tFVFNcJiMzNDssIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3NoYXJlZF91bWVtXzRfc29ja2V0c30sXG4mIzQzO1x0ey5uYW1lID0gXCYjMzQ7U0hBUkVEX1VNRU1fTEVOR1RIX0JBU0VEXCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWR9LFxuJiM0MztcdHsubmFtZSA9IFwmIzM0O1NIQVJFRF9VTUVNX1VORVZFTl9ESVNUXCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF9zaGFyZWRfdW1lbV91bmV2ZW5fZGlzdH0sXG4mIzQzO1x0ey5uYW1lID0gXCYjMzQ7U0hBUkVEX1VNRU1fVU5BTElHTkVEXCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF9zaGFyZWRfdW1lbV91bmFsaWduZWR9LFxuIFx0ey5uYW1lID0gXCYjMzQ7WERQX01FVEFEQVRBX0NPUFlcJiMzNDssIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3hkcF9tZXRhZGF0YX0sXG4gXHR7Lm5hbWUgPSBcJiMzNDtYRFBfTUVUQURBVEFfQ09QWV9NVUxUSV9CVUZGXCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF94ZHBfbWV0YWRhdGFfbWJ9LFxuIFx0ey5uYW1lID0gXCYjMzQ7QUxJR05FRF9JTlZfREVTQ19NVUxUSV9CVUZGXCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF9hbGlnbmVkX2ludl9kZXNjX21ifSxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveHNrX3hkcF9wcm9ncy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hza194ZHBfcHJvZ3MuY1xuaW5kZXggMDIzZDhiZWZkNGNhYi4uNTQzYjYxZGYzYTJiMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94c2tfeGRwX3Byb2dzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94c2tfeGRwX3Byb2dzLmNcbkBAIC0xMCw3ICYjNDM7MTAsNyBAQFxuIFxuIHN0cnVjdCB7XG4gXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1hTS01BUCk7XG4tXHRfX3VpbnQobWF4X2VudHJpZXMsIDIpO1xuJiM0MztcdF9fdWludChtYXhfZW50cmllcywgTUFYX1NPQ0tFVFMpO1xuIFx0X191aW50KGtleV9zaXplLCBzaXplb2YoaW50KSk7XG4gXHRfX3VpbnQodmFsdWVfc2l6ZSwgc2l6ZW9mKGludCkpO1xuIH0geHNrIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG5AQCAtNzUsNiAmIzQzOzc1LDIzIEBAIFNFQyhcJiMzNDt4ZHBcJiMzNDspIGludCB4c2tfeGRwX3NoYXJlZF91bWVtKHN0cnVjdCB4ZHBfbWQgKnhkcClcbiBcdHJldHVybiBicGZfcmVkaXJlY3RfbWFwKFx1MDAyNnhzaywgaWR4LCBYRFBfRFJPUCk7XG4gfVxuIFxuJiM0MztTRUMoXCYjMzQ7eGRwXCYjMzQ7KSBpbnQgeHNrX3hkcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQoc3RydWN0IHhkcF9tZCAqeGRwKVxuJiM0Mzt7XG4mIzQzO1x0dm9pZCAqZGF0YSA9ICh2b2lkICopKGxvbmcpeGRwLVx1MDAzZWRhdGE7XG4mIzQzO1x0dm9pZCAqZGF0YV9lbmQgPSAodm9pZCAqKShsb25nKXhkcC1cdTAwM2VkYXRhX2VuZDtcbiYjNDM7XHRfX3UzMiBwa3RfbGVuID0gZGF0YV9lbmQgLSBkYXRhO1xuJiM0MztcbiYjNDM7XHQvKiBcbiYjNDM7XHQgKiBSb3V0ZSBwYWNrZXRzIGJ5IHRvdGFsIFhEUC12aXNpYmxlIHBhY2tldCBsZW5ndGggKGRhdGFfZW5kIC0gZGF0YSk6XG4mIzQzO1x0ICogLSBTb2NrZXQgMDogcGFja2V0cyBcdTAwM2M9IFNIQVJFRF9VTUVNX0xFTl9TUExJVCBieXRlc1xuJiM0MztcdCAqIC0gU29ja2V0IDE6IHBhY2tldHMgXHUwMDNlIFNIQVJFRF9VTUVNX0xFTl9TUExJVCBieXRlc1xuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwa3RfbGVuIFx1MDAzYz0gU0hBUkVEX1VNRU1fTEVOX1NQTElUKVxuJiM0MztcdFx0cmV0dXJuIGJwZl9yZWRpcmVjdF9tYXAoXHUwMDI2eHNrLCAwLCBYRFBfRFJPUCk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cmV0dXJuIGJwZl9yZWRpcmVjdF9tYXAoXHUwMDI2eHNrLCAxLCBYRFBfRFJPUCk7XG4mIzQzO31cbiYjNDM7XG4gU0VDKFwmIzM0O3hkcC5mcmFnc1wmIzM0OykgaW50IHhza194ZHBfYWRqdXN0X3RhaWwoc3RydWN0IHhkcF9tZCAqeGRwKVxuIHtcbiBcdF9fdTMyIGJ1ZmZfbGVuLCBjdXJyX2J1ZmZfbGVuO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2tfeGRwX2NvbW1vbi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza194ZHBfY29tbW9uLmhcbmluZGV4IDQ1ODEwZmY1NTJkYWUuLmJkOWI1ZGNmOGM4ZWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNrX3hkcF9jb21tb24uaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza194ZHBfY29tbW9uLmhcbkBAIC0zLDcgJiM0MzszLDggQEBcbiAjaWZuZGVmIFhTS19YRFBfQ09NTU9OX0hfXG4gI2RlZmluZSBYU0tfWERQX0NPTU1PTl9IX1xuIFxuLSNkZWZpbmUgTUFYX1NPQ0tFVFMgMlxuJiM0MzsjZGVmaW5lIE1BWF9TT0NLRVRTIDRcbiYjNDM7I2RlZmluZSBTSEFSRURfVU1FTV9MRU5fU1BMSVQgNjRcbiAjZGVmaW5lIFBLVF9IRFJfQUxJR04gKHNpemVvZihzdHJ1Y3QgZXRoaGRyKSAmIzQzOyAyKSAvKiBKdXN0IHRvIGFsaWduIHRoZSBkYXRhIGluIHRoZSBwYWNrZXQgKi9cbiBcbiBzdHJ1Y3QgeGRwX2luZm8ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2t4Y2VpdmVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNreGNlaXZlci5jXG5pbmRleCA3ZGFkODU1NmE3MjJlLi5lZDc3MTZiNjM3NTY3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza3hjZWl2ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza3hjZWl2ZXIuY1xuQEAgLTExNywxMiAmIzQzOzExNywxMyBAQCBzdGF0aWMgdm9pZCBfX2V4aXRfd2l0aF9lcnJvcihpbnQgZXJyb3IsIGNvbnN0IGNoYXIgKmZpbGUsIGNvbnN0IGNoYXIgKmZ1bmMsIGludFxuIFxuICNkZWZpbmUgZXhpdF93aXRoX2Vycm9yKGVycm9yKSBfX2V4aXRfd2l0aF9lcnJvcihlcnJvciwgX19GSUxFX18sIF9fZnVuY19fLCBfX0xJTkVfXylcbiBcbi1zdGF0aWMgYm9vbCBpZm9ial96Y19hdmFpbChzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0KVxuJiM0MztzdGF0aWMgYm9vbCBpZm9ial96Y19hdmFpbChzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqKVxuIHtcbiBcdHNpemVfdCB1bWVtX3N6ID0gREVGQVVMVF9VTUVNX0JVRkZFUlMgKiBYU0tfVU1FTV9fREVGQVVMVF9GUkFNRV9TSVpFO1xuIFx0aW50IG1tYXBfZmxhZ3MgPSBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMgfCBNQVBfTk9SRVNFUlZFO1xuLVx0c3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrO1xuLVx0c3RydWN0IHhza191bWVtX2luZm8gKnVtZW07XG4mIzQzO1x0c3RydWN0IHhza19zb2NrZXRfaW5mbyB4c2sgPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgeHNrX3VtZW1faW5mbyB1bWVtX2luZm8gPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbSA9IFx1MDAyNnVtZW1faW5mbztcbiBcdGJvb2wgemNfYXZhaWwgPSBmYWxzZTtcbiBcdHZvaWQgKmJ1ZnM7XG4gXHRpbnQgcmV0O1xuQEAgLTEzMSwzMiAmIzQzOzEzMiwyMiBAQCBzdGF0aWMgYm9vbCBpZm9ial96Y19hdmFpbChzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0KVxuIFx0aWYgKGJ1ZnMgPT0gTUFQX0ZBSUxFRClcbiBcdFx0ZXhpdF93aXRoX2Vycm9yKGVycm5vKTtcbiBcbi1cdHVtZW0gPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCB4c2tfdW1lbV9pbmZvKSk7XG4tXHRpZiAoIXVtZW0pIHtcbi1cdFx0bXVubWFwKGJ1ZnMsIHVtZW1fc3opO1xuLVx0XHRleGl0X3dpdGhfZXJyb3IoRU5PTUVNKTtcbi1cdH1cbiYjNDM7XHR1bWVtLVx1MDAzZW1tYXBfc2l6ZSA9IHVtZW1fc3o7XG4gXHR1bWVtLVx1MDAzZWZyYW1lX3NpemUgPSBYU0tfVU1FTV9fREVGQVVMVF9GUkFNRV9TSVpFO1xuLVx0cmV0ID0geHNrX2NvbmZpZ3VyZV91bWVtKGlmb2JqZWN0LCB1bWVtLCBidWZzLCB1bWVtX3N6KTtcbiYjNDM7XHRyZXQgPSB4c2tfY29uZmlndXJlX3VtZW0oaWZvYmosIHVtZW0sIGJ1ZnMsIHVtZW1fc3opO1xuIFx0aWYgKHJldClcbiBcdFx0ZXhpdF93aXRoX2Vycm9yKC1yZXQpO1xuIFxuLVx0eHNrID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvKSk7XG4tXHRpZiAoIXhzaylcbi1cdFx0Z290byBvdXQ7XG4tXHRpZm9iamVjdC1cdTAwM2ViaW5kX2ZsYWdzID0gWERQX1VTRV9ORUVEX1dBS0VVUCB8IFhEUF9aRVJPQ09QWTtcbi1cdGlmb2JqZWN0LVx1MDAzZXJ4X29uID0gdHJ1ZTtcbi1cdHhzay1cdTAwM2VyeHFzaXplID0gWFNLX1JJTkdfQ09OU19fREVGQVVMVF9OVU1fREVTQ1M7XG4tXHRyZXQgPSB4c2tfY29uZmlndXJlX3NvY2tldCh4c2ssIHVtZW0sIGlmb2JqZWN0LCBmYWxzZSk7XG4mIzQzO1x0aWZvYmotXHUwMDNlYmluZF9mbGFncyA9IFhEUF9VU0VfTkVFRF9XQUtFVVAgfCBYRFBfWkVST0NPUFk7XG4mIzQzO1x0aWZvYmotXHUwMDNlcnhfb24gPSB0cnVlO1xuJiM0MztcdHhzay5yeHFzaXplID0gWFNLX1JJTkdfQ09OU19fREVGQVVMVF9OVU1fREVTQ1M7XG4mIzQzO1x0cmV0ID0geHNrX2NvbmZpZ3VyZV9zb2NrZXQoXHUwMDI2eHNrLCB1bWVtLCBpZm9iaiwgZmFsc2UpO1xuIFx0aWYgKCFyZXQpXG4gXHRcdHpjX2F2YWlsID0gdHJ1ZTtcbiBcbi1cdHhza19zb2NrZXRfX2RlbGV0ZSh4c2stXHUwMDNleHNrKTtcbi1cdGZyZWUoeHNrKTtcbi1vdXQ6XG4tXHRtdW5tYXAodW1lbS1cdTAwM2VidWZmZXIsIHVtZW1fc3opO1xuLVx0eHNrX3VtZW1fX2RlbGV0ZSh1bWVtLVx1MDAzZXVtZW0pO1xuLVx0ZnJlZSh1bWVtKTtcbiYjNDM7XHQvKiBVc2UgdGhlIHNhbWUgcmVmY291bnQtYmFzZWQgdGVhcmRvd24gcGF0aCBmb3IgYm90aCBzdWNjZXNzIGFuZCBmYWlsdXJlLiAqL1xuJiM0MztcdHhza19kZWxldGVfc29ja2V0KFx1MDAyNnhzayk7XG4mIzQzO1xuIFx0cmV0dXJuIHpjX2F2YWlsO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjo1NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgc2VsZnRlc3RzICh1c2Vyc3BhY2UgdGVzdCBwcm9ncmFtcyBhbmQgdGVzdCBCUEYgcHJvZ3JhbXMpIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRmMjRjYjExY2MyNjE3ZmUyYTZmMjYyNDljNDQ4N2U2OTkzM2Y0YWYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyA3IDE2OjU3OjI2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmMKaW5kZXggNDc3YWVkYmIwMWJhZC4uY2NmZDllODQzNmE3YiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jCkBAIC0xMDEsNiAmIzQzOzEwMSw3IEBAIGludCB4c2tfY29uZmlndXJlX3VtZW0oc3RydWN0IGlmb2JqZWN0ICppZm9iaiwgc3RydWN0IHhza191bWVtX2luZm8gKnVtZW0sIHZvaWQKIAkJcmV0dXJuIHJldDsKIAogCXVtZW0tJmd0O2J1ZmZlciA9IGJ1ZmZlcjsKJiM0MzsJcmVmY291bnRfc2V0KCZhbXA7dW1lbS0mZ3Q7dXNlcnMsIDEpOwogCWlmIChpZm9iai0mZ3Q7c2hhcmVkX3VtZW0gJmFtcDsmYW1wOyBpZm9iai0mZ3Q7cnhfb24pIHsKIAkJdW1lbS0mZ3Q7YmFzZV9hZGRyID0gdW1lbV9zaXplKHVtZW0pOwogCQl1bWVtLSZndDtuZXh0X2J1ZmZlciA9IHVtZW1fc2l6ZSh1bWVtKTsKQEAgLTE1NCw2ICYjNDM7MTU1LDcgQEAgaW50IHhza19jb25maWd1cmVfc29ja2V0KHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzaywgc3RydWN0IHhza191bWVtX2luZm8gKnVtZW0KIAlzdHJ1Y3QgeHNrX3NvY2tldF9jb25maWcgY2ZnID0ge307CiAJc3RydWN0IHhza19yaW5nX2NvbnMgKnJ4cjsKIAlzdHJ1Y3QgeHNrX3JpbmdfcHJvZCAqdHhyOwomIzQzOwlpbnQgcmV0OwogCiAJeHNrLSZndDt1bWVtID0gdW1lbTsKIAljZmcucnhfc2l6ZSA9IHhzay0mZ3Q7cnhxc2l6ZTsKQEAgLTE3MCw3ICYjNDM7MTcyLDIxIEBAIGludCB4c2tfY29uZmlndXJlX3NvY2tldChzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2ssIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtCiAKIAl0eHIgPSBpZm9iamVjdC0mZ3Q7dHhfb24gPyAmYW1wO3hzay0mZ3Q7dHggOiBOVUxMOwogCXJ4ciA9IGlmb2JqZWN0LSZndDtyeF9vbiA/ICZhbXA7eHNrLSZndDtyeCA6IE5VTEw7Ci0JcmV0dXJuIHhza19zb2NrZXRfX2NyZWF0ZSgmYW1wO3hzay0mZ3Q7eHNrLCBpZm9iamVjdC0mZ3Q7aWZpbmRleCwgMCwgdW1lbS0mZ3Q7dW1lbSwgcnhyLCB0eHIsICZhbXA7Y2ZnKTsKJiM0MzsJcmV0ID0geHNrX3NvY2tldF9fY3JlYXRlKCZhbXA7eHNrLSZndDt4c2ssIGlmb2JqZWN0LSZndDtpZmluZGV4LCAwLCB1bWVtLSZndDt1bWVtLCByeHIsIHR4ciwgJmFtcDtjZmcpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlpZiAoc2hhcmVkKQomIzQzOwkJCS8qIFNoYXJlZCBzb2NrZXQgZmFpbGVkIGJlZm9yZSBhY3F1aXJpbmcgYSBVTUVNIHJlZmVyZW5jZS4gKi8KJiM0MzsJCQl4c2stJmd0O3VtZW0gPSBOVUxMOwomIzQzOwomIzQzOwkJLyogS2VlcCBmYWlsZWQgc29ja2V0IHN0YXRlIGluZXJ0IGZvciBsYXRlciBjbGVhbnVwIHBhdGhzLiAqLwomIzQzOwkJeHNrLSZndDt4c2sgPSBOVUxMOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoc2hhcmVkKQomIzQzOwkJcmVmY291bnRfaW5jKCZhbXA7dW1lbS0mZ3Q7dXNlcnMpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHNldF9yaW5nX3NpemUoc3RydWN0IGlmb2JqZWN0ICppZm9iaikKQEAgLTIwMyw2ICYjNDM7MjE5LDEyIEBAIGludCBod19yaW5nX3NpemVfcmVzZXQoc3RydWN0IGlmb2JqZWN0ICppZm9iaikKIHN0YXRpYyB2b2lkIF9fdGVzdF9zcGVjX2luaXQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9ial90eCwKIAkJCSAgICAgc3RydWN0IGlmb2JqZWN0ICppZm9ial9yeCkKIHsKJiM0MzsJLyoKJiM0MzsJICogS2VlcCB0aGUgc2FtZSBkZWZhdWx0IGFzIHhza3hjZWl2ZXIgc3RhcnR1cDogd2hlbiBUWCBhbmQgUlggc2hhcmUgdGhlIHNhbWUgbmV0ZGV2LAomIzQzOwkgKiBzaGFyZWQgVU1FTSBpcyB0aGUgYmFzZWxpbmUgbW9kZSBmb3IgdGhpcyB0ZXN0IGhhcm5lc3MuIEluZGl2aWR1YWwgdGVzdHMgY2FuIHN0aWxsCiYjNDM7CSAqIG92ZXJyaWRlIHRoaXMgYXMgbmVlZGVkLgomIzQzOwkgKi8KJiM0MzsJYm9vbCBzaGFyZWRfZGVmYXVsdCA9IGlmb2JqX3R4LSZndDtpZmluZGV4ID09IGlmb2JqX3J4LSZndDtpZmluZGV4OwogCXUzMiBpLCBqOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IE1BWF9JTlRFUkZBQ0VTOyBpJiM0MzsmIzQzOykgewpAQCAtMjE0LDYgJiM0MzsyMzYsNyBAQCBzdGF0aWMgdm9pZCBfX3Rlc3Rfc3BlY19pbml0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmpfdHgsCiAJCWlmb2JqLSZndDt1c2VfZmlsbF9yaW5nID0gdHJ1ZTsKIAkJaWZvYmotJmd0O3JlbGVhc2VfcnggPSB0cnVlOwogCQlpZm9iai0mZ3Q7dmFsaWRhdGlvbl9mdW5jID0gTlVMTDsKJiM0MzsJCWlmb2JqLSZndDtzaGFyZWRfdW1lbSA9IHNoYXJlZF9kZWZhdWx0OwogCQlpZm9iai0mZ3Q7dXNlX21ldGFkYXRhID0gZmFsc2U7CiAKIAkJaWYgKGkgPT0gMCkgewpAQCAtNTc0LDI2ICYjNDM7NTk3LDEyMiBAQCBzdGF0aWMgaW50IHBrdF9zdHJlYW1fcmVjZWl2ZV9oYWxmKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpCiAKIHN0YXRpYyBpbnQgcGt0X3N0cmVhbV9ldmVuX29kZF9zZXF1ZW5jZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KQogewomIzQzOwlzdHJ1Y3QgcGt0X3N0cmVhbSAqdHhfc3RyZWFtc1tNQVhfU09DS0VUU10gPSB7fTsKJiM0MzsJc3RydWN0IHBrdF9zdHJlYW0gKnJ4X3N0cmVhbXNbTUFYX1NPQ0tFVFNdID0ge307CiAJc3RydWN0IHBrdF9zdHJlYW0gKnBrdF9zdHJlYW07CiAJdTMyIGk7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgdGVzdC0mZ3Q7bmJfc29ja2V0czsgaSYjNDM7JiM0MzspIHsKIAkJcGt0X3N0cmVhbSA9IHRlc3QtJmd0O2lmb2JqX3R4LSZndDt4c2tfYXJyW2ldLnBrdF9zdHJlYW07Ci0JCXBrdF9zdHJlYW0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUocGt0X3N0cmVhbS0mZ3Q7bmJfcGt0cyAvIDIsCi0JCQkJCQkgICBwa3Rfc3RyZWFtLSZndDtwa3RzWzBdLmxlbiwgaSwgMik7Ci0JCWlmICghcGt0X3N0cmVhbSkKLQkJCXJldHVybiAtRU5PTUVNOwotCQl0ZXN0LSZndDtpZm9ial90eC0mZ3Q7eHNrX2FycltpXS5wa3Rfc3RyZWFtID0gcGt0X3N0cmVhbTsKJiM0MzsJCXR4X3N0cmVhbXNbaV0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUocGt0X3N0cmVhbS0mZ3Q7bmJfcGt0cyAvIDIsCiYjNDM7CQkJCQkJICAgICAgcGt0X3N0cmVhbS0mZ3Q7cGt0c1swXS5sZW4sIGksIDIpOwomIzQzOwkJaWYgKCF0eF9zdHJlYW1zW2ldKQomIzQzOwkJCWdvdG8gZXJyOwogCiAJCXBrdF9zdHJlYW0gPSB0ZXN0LSZndDtpZm9ial9yeC0mZ3Q7eHNrX2FycltpXS5wa3Rfc3RyZWFtOwotCQlwa3Rfc3RyZWFtID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tJmd0O25iX3BrdHMgLyAyLAotCQkJCQkJICAgcGt0X3N0cmVhbS0mZ3Q7cGt0c1swXS5sZW4sIGksIDIpOwotCQlpZiAoIXBrdF9zdHJlYW0pCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJdGVzdC0mZ3Q7aWZvYmpfcngtJmd0O3hza19hcnJbaV0ucGt0X3N0cmVhbSA9IHBrdF9zdHJlYW07CiYjNDM7CQlyeF9zdHJlYW1zW2ldID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tJmd0O25iX3BrdHMgLyAyLAomIzQzOwkJCQkJCSAgICAgIHBrdF9zdHJlYW0tJmd0O3BrdHNbMF0ubGVuLCBpLCAyKTsKJiM0MzsJCWlmICghcnhfc3RyZWFtc1tpXSkKJiM0MzsJCQlnb3RvIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdGVzdC0mZ3Q7bmJfc29ja2V0czsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXRlc3QtJmd0O2lmb2JqX3R4LSZndDt4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSB0eF9zdHJlYW1zW2ldOwomIzQzOwkJdGVzdC0mZ3Q7aWZvYmpfcngtJmd0O3hza19hcnJbaV0ucGt0X3N0cmVhbSA9IHJ4X3N0cmVhbXNbaV07CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyOgomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdGVzdC0mZ3Q7bmJfc29ja2V0czsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICh0eF9zdHJlYW1zW2ldKQomIzQzOwkJCXBrdF9zdHJlYW1fZGVsZXRlKHR4X3N0cmVhbXNbaV0pOwomIzQzOwkJaWYgKHJ4X3N0cmVhbXNbaV0pCiYjNDM7CQkJcGt0X3N0cmVhbV9kZWxldGUocnhfc3RyZWFtc1tpXSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIC1FTk9NRU07CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGt0X3N0cmVhbV9sZW5fc2VxKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHUzMiBzaG9ydF9sZW4sIHUzMiBsb25nX2xlbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwa3Rfc3RyZWFtICp0eF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9OwomIzQzOwlzdHJ1Y3QgcGt0X3N0cmVhbSAqcnhfc3RyZWFtc1tNQVhfU09DS0VUU10gPSB7fTsKJiM0MzsJc3RydWN0IHBrdF9zdHJlYW0gKnBrdF9zdHJlYW07CiYjNDM7CXUzMiBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdGVzdC0mZ3Q7bmJfc29ja2V0czsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXUzMiBwa3RfbGVuID0gaSA/IGxvbmdfbGVuIDogc2hvcnRfbGVuOwomIzQzOwomIzQzOwkJcGt0X3N0cmVhbSA9IHRlc3QtJmd0O2lmb2JqX3R4LSZndDt4c2tfYXJyW2ldLnBrdF9zdHJlYW07CiYjNDM7CQl0eF9zdHJlYW1zW2ldID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tJmd0O25iX3BrdHMgLyAyLCBwa3RfbGVuLCBpLCAyKTsKJiM0MzsJCWlmICghdHhfc3RyZWFtc1tpXSkKJiM0MzsJCQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJCXBrdF9zdHJlYW0gPSB0ZXN0LSZndDtpZm9ial9yeC0mZ3Q7eHNrX2FycltpXS5wa3Rfc3RyZWFtOwomIzQzOwkJcnhfc3RyZWFtc1tpXSA9IF9fcGt0X3N0cmVhbV9nZW5lcmF0ZShwa3Rfc3RyZWFtLSZndDtuYl9wa3RzIC8gMiwgcGt0X2xlbiwgaSwgMik7CiYjNDM7CQlpZiAoIXJ4X3N0cmVhbXNbaV0pCiYjNDM7CQkJZ290byBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHRlc3QtJmd0O25iX3NvY2tldHM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl0ZXN0LSZndDtpZm9ial90eC0mZ3Q7eHNrX2FycltpXS5wa3Rfc3RyZWFtID0gdHhfc3RyZWFtc1tpXTsKJiM0MzsJCXRlc3QtJmd0O2lmb2JqX3J4LSZndDt4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSByeF9zdHJlYW1zW2ldOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2VycjoKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHRlc3QtJmd0O25iX3NvY2tldHM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAodHhfc3RyZWFtc1tpXSkKJiM0MzsJCQlwa3Rfc3RyZWFtX2RlbGV0ZSh0eF9zdHJlYW1zW2ldKTsKJiM0MzsJCWlmIChyeF9zdHJlYW1zW2ldKQomIzQzOwkJCXBrdF9zdHJlYW1fZGVsZXRlKHJ4X3N0cmVhbXNbaV0pOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAtRU5PTUVNOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBrdF9zdHJlYW1fd2VpZ2h0ZWRfdW5ldmVuX2Rpc3Rfc2VxdWVuY2Uoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgdTMyIHRvdGFsX3BrdHMsCiYjNDM7CQkJCQkJICAgIHUzMiBwa3RfbGVuKQomIzQzO3sKJiM0MzsJc3RydWN0IHBrdF9zdHJlYW0gKnR4X3N0cmVhbXNbTUFYX1NPQ0tFVFNdID0ge307CiYjNDM7CXN0cnVjdCBwa3Rfc3RyZWFtICpyeF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9OwomIzQzOwl1MzIgaSwgcGt0c19zb2NrMDsKJiM0MzsKJiM0MzsJaWYgKHRlc3QtJmd0O25iX3NvY2tldHMgJmx0OyAyIHx8IHRvdGFsX3BrdHMgJmx0OyA0KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXBrdHNfc29jazAgPSB0b3RhbF9wa3RzIC8gNDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHRlc3QtJmd0O25iX3NvY2tldHM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl1MzIgbmJfcGt0cyA9IChpID09IDApID8gcGt0c19zb2NrMCA6ICh0b3RhbF9wa3RzIC0gcGt0c19zb2NrMCk7CiYjNDM7CiYjNDM7CQl0eF9zdHJlYW1zW2ldID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKG5iX3BrdHMsIHBrdF9sZW4sIGksIDIpOwomIzQzOwkJaWYgKCF0eF9zdHJlYW1zW2ldKQomIzQzOwkJCWdvdG8gZXJyOwomIzQzOwomIzQzOwkJcnhfc3RyZWFtc1tpXSA9IF9fcGt0X3N0cmVhbV9nZW5lcmF0ZShuYl9wa3RzLCBwa3RfbGVuLCBpLCAyKTsKJiM0MzsJCWlmICghcnhfc3RyZWFtc1tpXSkKJiM0MzsJCQlnb3RvIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdGVzdC0mZ3Q7bmJfc29ja2V0czsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXRlc3QtJmd0O2lmb2JqX3R4LSZndDt4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSB0eF9zdHJlYW1zW2ldOwomIzQzOwkJdGVzdC0mZ3Q7aWZvYmpfcngtJmd0O3hza19hcnJbaV0ucGt0X3N0cmVhbSA9IHJ4X3N0cmVhbXNbaV07CiAJfQogCiAJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyOgomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdGVzdC0mZ3Q7bmJfc29ja2V0czsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICh0eF9zdHJlYW1zW2ldKQomIzQzOwkJCXBrdF9zdHJlYW1fZGVsZXRlKHR4X3N0cmVhbXNbaV0pOwomIzQzOwkJaWYgKHJ4X3N0cmVhbXNbaV0pCiYjNDM7CQkJcGt0X3N0cmVhbV9kZWxldGUocnhfc3RyZWFtc1tpXSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIC1FTk9NRU07CiB9CiAKIHN0YXRpYyB2b2lkIHJlbGVhc2VfZXZlbl9vZGRfc2VxdWVuY2Uoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCkKQEAgLTE0NjgsNiAmIzQzOzE1ODcsMjggQEAgc3RhdGljIGludCB2YWxpZGF0ZV90eF9pbnZhbGlkX2Rlc2NzKHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QpCiAJcmV0dXJuIFRFU1RfUEFTUzsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHhza19kZWxldGVfc29ja2V0X2JhdGNoKHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QsIHUzMiBjb3VudCkKJiM0Mzt7CiYjNDM7CXUzMiBpOwomIzQzOwomIzQzOwlpZiAoIWlmb2JqZWN0KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmb3IgKGkgPSBjb3VudDsgaSAmZ3Q7IDA7IGktLSkKJiM0MzsJCXhza19kZWxldGVfc29ja2V0KCZhbXA7aWZvYmplY3QtJmd0O3hza19hcnJbaSAtIDFdKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgeHNrX2NvbmZpZ3VyZV9yb2xsYmFjayhzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0LCBpbnQgbGFzdCkKJiM0Mzt7CiYjNDM7CXUzMiBjb3VudDsKJiM0MzsKJiM0MzsJaWYgKCFpZm9iamVjdCB8fCBsYXN0ICZsdDsgMCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJY291bnQgPSBsYXN0ICYjNDM7IDE7CiYjNDM7CXhza19kZWxldGVfc29ja2V0X2JhdGNoKGlmb2JqZWN0LCBjb3VudCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCB4c2tfY29uZmlndXJlKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QsCiAJCQkgIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtLCBib29sIHR4KQogewpAQCAtMTQ4NCwxNCAmIzQzOzE2MjUsMTggQEAgc3RhdGljIGludCB4c2tfY29uZmlndXJlKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QsCiAJCQkJYnJlYWs7CiAKIAkJCS8qIFJldHJ5IGlmIGl0IGZhaWxzIGFzIHhza19zb2NrZXRfX2NyZWF0ZSgpIGlzIGFzeW5jaHJvbm91cyAqLwotCQkJaWYgKGN0ciAmZ3Q7PSBTT0NLX1JFQ09ORl9DVFIpCiYjNDM7CQkJaWYgKGN0ciAmZ3Q7PSBTT0NLX1JFQ09ORl9DVFIpIHsKJiM0MzsJCQkJeHNrX2NvbmZpZ3VyZV9yb2xsYmFjayhpZm9iamVjdCwgaSk7CiAJCQkJcmV0dXJuIHJldDsKJiM0MzsJCQl9CiAJCQl1c2xlZXAoVVNMRUVQX01BWCk7CiAJCX0KIAkJaWYgKGlmb2JqZWN0LSZndDtidXN5X3BvbGwpIHsKIAkJCXJldCA9IGVuYWJsZV9idXN5X3BvbGwoJmFtcDtpZm9iamVjdC0mZ3Q7eHNrX2FycltpXSk7Ci0JCQlpZiAocmV0KQomIzQzOwkJCWlmIChyZXQpIHsKJiM0MzsJCQkJeHNrX2NvbmZpZ3VyZV9yb2xsYmFjayhpZm9iamVjdCwgaSk7CiAJCQkJcmV0dXJuIHJldDsKJiM0MzsJCQl9CiAJCX0KIAl9CiAKQEAgLTE3MDIsMTIgJiM0MzsxODQ3LDYwIEBAIHZvaWQgKndvcmtlcl90ZXN0YXBwX3ZhbGlkYXRlX3J4KHZvaWQgKmFyZykKIAlwdGhyZWFkX2V4aXQoTlVMTCk7CiB9CiAKLXN0YXRpYyB2b2lkIHRlc3RhcHBfY2xlYW5feHNrX3VtZW0oc3RydWN0IGlmb2JqZWN0ICppZm9iaikKJiM0Mzt2b2lkIHhza19kZWxldGVfc29ja2V0KHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzaykKIHsKLQlzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbSA9IGlmb2JqLSZndDt4c2stJmd0O3VtZW07CiYjNDM7CXN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtOwogCi0JeHNrX3VtZW1fX2RlbGV0ZSh1bWVtLSZndDt1bWVtKTsKLQltdW5tYXAodW1lbS0mZ3Q7YnVmZmVyLCB1bWVtLSZndDttbWFwX3NpemUpOwomIzQzOwkvKgomIzQzOwkgKiBDYWxsZXJzIG11c3Qgc2VyaWFsaXplIHRlYXJkb3duIGZvciBhIGdpdmVuIHhzay91bWVtIHBhaXIuCiYjNDM7CSAqIFRoaXMgaGVscGVyIGRvZXMgcmVmY291bnQtYmFzZWQgbGlmZXRpbWUgbWFuYWdlbWVudCBvbmx5LgomIzQzOwkgKi8KJiM0MzsJaWYgKCF4c2spCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXVtZW0gPSB4c2stJmd0O3VtZW07CiYjNDM7CWlmICghdW1lbSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyogRGVsZXRlIHRoZSBzb2NrZXQgaGFuZGxlIHdoZW4gYXZhaWxhYmxlLCB0aGVuIGRyb3AgVU1FTSByZWZlcmVuY2UuICovCiYjNDM7CWlmICh4c2stJmd0O3hzaykKJiM0MzsJCXhza19zb2NrZXRfX2RlbGV0ZSh4c2stJmd0O3hzayk7CiYjNDM7CXhzay0mZ3Q7eHNrID0gTlVMTDsKJiM0MzsKJiM0MzsJLyogTWFyayB0aGlzIHNvY2tldCBhcyBjbGVhbmVkIHVwIHRvIHByZXZlbnQgZG91YmxlLWRlY3JlbWVudCAqLwomIzQzOwl4c2stJmd0O3VtZW0gPSBOVUxMOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUZWFyZG93biBtYXkgd2FsayB0aGUgZnVsbCB4c2sgYXJyYXksIGluY2x1ZGluZyBzbG90cyB0aGF0IG5ldmVyIGNvbXBsZXRlZCBzZXR1cCBidXQKJiM0MzsJICogc3RpbGwgY2FycnkgYSBwcmVpbml0aWFsaXplZCB1bWVtIHBvaW50ZXIuIEFmdGVyIGEgcGFydGlhbC1zZXR1cCByb2xsYmFjaywgdGhlIGxhc3QgVU1FTQomIzQzOwkgKiByZWYgbWF5IGFscmVhZHkgYmUgZHJvcHBlZC4KJiM0MzsJICovCiYjNDM7CWlmICghcmVmY291bnRfcmVhZCgmYW1wO3VtZW0tJmd0O3VzZXJzKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyogQWx3YXlzIGRlY3JlbWVudCByZWZjb3VudCBmb3IgdGhpcyBzb2NrZXQmIzM5O3MgVU1FTSByZWZlcmVuY2UgKi8KJiM0MzsJaWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO3VtZW0tJmd0O3VzZXJzKSkgewomIzQzOwkJaWYgKHVtZW0tJmd0O3VtZW0pIHsKJiM0MzsJCQlpbnQgZXJyID0geHNrX3VtZW1fX2RlbGV0ZSh1bWVtLSZndDt1bWVtKTsKJiM0MzsKJiM0MzsJCQlpZiAoZXJyKQomIzQzOwkJCQlrc2Z0X3ByaW50X21zZygmIzM0O3hza191bWVtX19kZWxldGUgZmFpbGVkOiAlZCAodW1lbSBzdGlsbCBidXN5PylcbiYjMzQ7LAomIzQzOwkJCQkJICAgICAgIGVycik7CiYjNDM7CQl9CiYjNDM7CQlpZiAodW1lbS0mZ3Q7YnVmZmVyICZhbXA7JmFtcDsgdW1lbS0mZ3Q7bW1hcF9zaXplKQomIzQzOwkJCW11bm1hcCh1bWVtLSZndDtidWZmZXIsIHVtZW0tJmd0O21tYXBfc2l6ZSk7CiYjNDM7CQl1bWVtLSZndDt1bWVtID0gTlVMTDsKJiM0MzsJCXVtZW0tJmd0O2J1ZmZlciA9IE5VTEw7CiYjNDM7CQl1bWVtLSZndDttbWFwX3NpemUgPSAwOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iaikKJiM0Mzt7CiYjNDM7CWlmICghaWZvYmopCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXhza19kZWxldGVfc29ja2V0X2JhdGNoKGlmb2JqLCB0ZXN0LSZndDtuYl9zb2NrZXRzKTsKIH0KIAogc3RhdGljIGJvb2wgeGRwX3Byb2dfY2hhbmdlZF9yeChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KQpAQCAtMTc2OSwyNyAmIzQzOzE5NjIsNiBAQCBzdGF0aWMgaW50IHhza19hdHRhY2hfeGRwX3Byb2dzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmpfcgogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIGNsZWFuX3NvY2tldHMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iaikKLXsKLQl1MzIgaTsKLQotCWlmICghaWZvYmogfHwgIXRlc3QpCi0JCXJldHVybjsKLQotCWZvciAoaSA9IDA7IGkgJmx0OyB0ZXN0LSZndDtuYl9zb2NrZXRzOyBpJiM0MzsmIzQzOykKLQkJeHNrX3NvY2tldF9fZGVsZXRlKGlmb2JqLSZndDt4c2tfYXJyW2ldLnhzayk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNsZWFuX3VtZW0oc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iajEsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmoyKQotewotCWlmICghaWZvYmoxKQotCQlyZXR1cm47Ci0KLQl0ZXN0YXBwX2NsZWFuX3hza191bWVtKGlmb2JqMSk7Ci0JaWYgKGlmb2JqMiAmYW1wOyZhbXA7ICFpZm9iajItJmd0O3NoYXJlZF91bWVtKQotCQl0ZXN0YXBwX2NsZWFuX3hza191bWVtKGlmb2JqMik7Ci19Ci0KIHN0YXRpYyBpbnQgX190ZXN0YXBwX3ZhbGlkYXRlX3RyYWZmaWMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iajEsCiAJCQkJICAgICAgc3RydWN0IGlmb2JqZWN0ICppZm9iajIpCiB7CkBAIC0xODQxLDggJiM0MzsyMDEzLDcgQEAgc3RhdGljIGludCBfX3Rlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmkKIAkJaWYgKHB0aHJlYWRfYmFycmllcl9kZXN0cm95KCZhbXA7YmFycikpIHsKIAkJCXRlc3QtJmd0O3VzZV9iYXJyaWVyID0gZmFsc2U7CiAJCQlwdGhyZWFkX2pvaW4odDAsIE5VTEwpOwotCQkJY2xlYW5fc29ja2V0cyh0ZXN0LCBpZm9iajEpOwotCQkJY2xlYW5fdW1lbSh0ZXN0LCBpZm9iajEsIE5VTEwpOwomIzQzOwkJCXhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgaWZvYmoxKTsKIAkJCXJldHVybiBURVNUX0ZBSUxVUkU7CiAJCX0KIAl9CkBAIC0xODU2LDkgJiM0MzsyMDI3LDggQEAgc3RhdGljIGludCBfX3Rlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmkKIAlwdGhyZWFkX2pvaW4odDAsIE5VTEwpOwogCiAJaWYgKHRlc3QtJmd0O3RvdGFsX3N0ZXBzID09IHRlc3QtJmd0O2N1cnJlbnRfc3RlcCB8fCB0ZXN0LSZndDtmYWlsKSB7Ci0JCWNsZWFuX3NvY2tldHModGVzdCwgaWZvYmoxKTsKLQkJY2xlYW5fc29ja2V0cyh0ZXN0LCBpZm9iajIpOwotCQljbGVhbl91bWVtKHRlc3QsIGlmb2JqMSwgaWZvYmoyKTsKJiM0MzsJCXhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgaWZvYmoyKTsKJiM0MzsJCXhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgaWZvYmoxKTsKIAl9CiAKIAlpZiAodGVzdC0mZ3Q7ZmFpbCkKQEAgLTE5NjcsOSAmIzQzOzIxMzcsOCBAQCBpbnQgdGVzdGFwcF94ZHBfcHJvZ19jbGVhbnVwKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpCiAJCXJldHVybiBURVNUX0ZBSUxVUkU7CiAKIAlpZiAoc3dhcF94c2tfcmVzb3VyY2VzKHRlc3QpKSB7Ci0JCWNsZWFuX3NvY2tldHModGVzdCwgdGVzdC0mZ3Q7aWZvYmpfcngpOwotCQljbGVhbl9zb2NrZXRzKHRlc3QsIHRlc3QtJmd0O2lmb2JqX3R4KTsKLQkJY2xlYW5fdW1lbSh0ZXN0LCB0ZXN0LSZndDtpZm9ial9yeCwgdGVzdC0mZ3Q7aWZvYmpfdHgpOwomIzQzOwkJeHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCB0ZXN0LSZndDtpZm9ial90eCk7CiYjNDM7CQl4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIHRlc3QtJmd0O2lmb2JqX3J4KTsKIAkJcmV0dXJuIFRFU1RfRkFJTFVSRTsKIAl9CiAKQEAgLTIyMjQsNiAmIzQzOzIzOTMsMTY4IEBAIGludCB0ZXN0YXBwX3hkcF9zaGFyZWRfdW1lbShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KQogCXJldHVybiByZXQ7CiB9CiAKJiM0MztzdGF0aWMgaW50IHNoYXJlZF91bWVtX3Rlc3RfcHJlcGFyZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KQomIzQzO3sKJiM0MzsJdTMyIGk7CiYjNDM7CiYjNDM7CWlmICh0ZXN0LSZndDtuYl9zb2NrZXRzICZndDsgTUFYX1NPQ0tFVFMpIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7RVJST1I6IFslc10gaW52YWxpZCBzb2NrZXQgY291bnQgJXVcbiYjMzQ7LCBfX2Z1bmNfXywgdGVzdC0mZ3Q7bmJfc29ja2V0cyk7CiYjNDM7CQlyZXR1cm4gVEVTVF9GQUlMVVJFOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB0ZXN0LSZndDtuYl9zb2NrZXRzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKCF0ZXN0LSZndDtpZm9ial9yeC0mZ3Q7eHNrX2FycltpXS5wa3Rfc3RyZWFtIHx8CiYjNDM7CQkgICAgIXRlc3QtJmd0O2lmb2JqX3R4LSZndDt4c2tfYXJyW2ldLnBrdF9zdHJlYW0pIHsKJiM0MzsJCQlrc2Z0X3ByaW50X21zZygmIzM0O0VSUk9SOiBbJXNdIG1pc3Npbmcgc3RyZWFtIGZvciBzb2NrZXQgJXVcbiYjMzQ7LCBfX2Z1bmNfXywgaSk7CiYjNDM7CQkJcmV0dXJuIFRFU1RfRkFJTFVSRTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gVEVTVF9QQVNTOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHNoYXJlZF91bWVtX3NlcV9ldmVuX29kZChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCB2b2lkICpjdHgpCiYjNDM7ewomIzQzOwkodm9pZCljdHg7CiYjNDM7CiYjNDM7CXJldHVybiBwa3Rfc3RyZWFtX2V2ZW5fb2RkX3NlcXVlbmNlKHRlc3QpID8gVEVTVF9GQUlMVVJFIDogVEVTVF9QQVNTOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHNoYXJlZF91bWVtX3NlcV9sZW4oc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgY29uc3Qgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHNoYXJlZF91bWVtX2xlbl9jdHggKmNmZyA9IGN0eDsKJiM0MzsKJiM0MzsJcmV0dXJuIHBrdF9zdHJlYW1fbGVuX3NlcSh0ZXN0LCBjZmctJmd0O3Nob3J0X2xlbiwgY2ZnLSZndDtsb25nX2xlbikgPyBURVNUX0ZBSUxVUkUgOiBURVNUX1BBU1M7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgc2hhcmVkX3VtZW1fc2VxX3VuZXZlbl9kaXN0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIGNvbnN0IHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBzaGFyZWRfdW1lbV91bmV2ZW5fZGlzdF9jdHggKmNmZyA9IGN0eDsKJiM0MzsKJiM0MzsJcmV0dXJuIHBrdF9zdHJlYW1fd2VpZ2h0ZWRfdW5ldmVuX2Rpc3Rfc2VxdWVuY2UodGVzdCwgY2ZnLSZndDt0b3RhbF9wa3RzLAomIzQzOwkJCQkJCSAgICAgIGNmZy0mZ3Q7cGt0X2xlbikgPyBURVNUX0ZBSUxVUkUgOiBURVNUX1BBU1M7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgc2hhcmVkX3VtZW1fcG9zdF91bmV2ZW5fZGlzdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBpbnQgcmV0LCBjb25zdCB2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGt0X3N0cmVhbSAqdHhfc3RyZWFtXzAsICp0eF9zdHJlYW1fMTsKJiM0MzsJc3RydWN0IHBrdF9zdHJlYW0gKnJ4X3N0cmVhbV8wLCAqcnhfc3RyZWFtXzE7CiYjNDM7CiYjNDM7CSh2b2lkKWN0eDsKJiM0MzsKJiM0MzsJdHhfc3RyZWFtXzAgPSB0ZXN0LSZndDtpZm9ial90eC0mZ3Q7eHNrX2FyclswXS5wa3Rfc3RyZWFtOwomIzQzOwl0eF9zdHJlYW1fMSA9IHRlc3QtJmd0O2lmb2JqX3R4LSZndDt4c2tfYXJyWzFdLnBrdF9zdHJlYW07CiYjNDM7CXJ4X3N0cmVhbV8wID0gdGVzdC0mZ3Q7aWZvYmpfcngtJmd0O3hza19hcnJbMF0ucGt0X3N0cmVhbTsKJiM0MzsJcnhfc3RyZWFtXzEgPSB0ZXN0LSZndDtpZm9ial9yeC0mZ3Q7eHNrX2FyclsxXS5wa3Rfc3RyZWFtOwomIzQzOwomIzQzOwlpZiAodHhfc3RyZWFtXzEtJmd0O25iX3ZhbGlkX2VudHJpZXMgJmx0Oz0gdHhfc3RyZWFtXzAtJmd0O25iX3ZhbGlkX2VudHJpZXMpCiYjNDM7CQlyZXR1cm4gVEVTVF9GQUlMVVJFOwomIzQzOwomIzQzOwlpZiAoIXJldCAmYW1wOyZhbXA7IHJ4X3N0cmVhbV8xLSZndDtuYl9yeF9wa3RzICZsdDs9IHJ4X3N0cmVhbV8wLSZndDtuYl9yeF9wa3RzKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O0VSUk9SOiBzb2NrZXQxIHJ4X3BrdHMgKCV1KSBub3QgZ3JlYXRlciB0aGFuIHNvY2tldDAgKCV1KVxuJiMzNDssCiYjNDM7CQkJICAgICAgIHJ4X3N0cmVhbV8xLSZndDtuYl9yeF9wa3RzLCByeF9zdHJlYW1fMC0mZ3Q7bmJfcnhfcGt0cyk7CiYjNDM7CQlyZXQgPSBURVNUX0ZBSUxVUkU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydW5fc2hhcmVkX3VtZW1fdGVzdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKnhkcF9wcm9nX3J4LAomIzQzOwkJCQlzdHJ1Y3QgYnBmX3Byb2dyYW0gKnhkcF9wcm9nX3R4LCBzdHJ1Y3QgYnBmX21hcCAqeHNrbWFwX3J4LAomIzQzOwkJCQlzdHJ1Y3QgYnBmX21hcCAqeHNrbWFwX3R4LCB1MzIgbmJfc29ja2V0cywKJiM0MzsJCQkJc2hhcmVkX3VtZW1fc2VxX2ZuIHNlcV9mbiwgc2hhcmVkX3VtZW1fcG9zdF9mbiBwb3N0X2ZuLAomIzQzOwkJCQljb25zdCB2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwl0ZXN0LSZndDt0b3RhbF9zdGVwcyA9IDE7CiYjNDM7CXRlc3QtJmd0O25iX3NvY2tldHMgPSBuYl9zb2NrZXRzOwomIzQzOwomIzQzOwl0ZXN0X3NwZWNfc2V0X3hkcF9wcm9nKHRlc3QsIHhkcF9wcm9nX3J4LCB4ZHBfcHJvZ190eCwgeHNrbWFwX3J4LCB4c2ttYXBfdHgpOwomIzQzOwomIzQzOwlyZXQgPSBzaGFyZWRfdW1lbV90ZXN0X3ByZXBhcmUodGVzdCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBzZXFfZm4odGVzdCwgY3R4KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHRlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyh0ZXN0KTsKJiM0MzsJaWYgKHBvc3RfZm4pCiYjNDM7CQlyZXQgPSBwb3N0X2ZuKHRlc3QsIHJldCwgY3R4KTsKJiM0MzsKJiM0MzsJcmVsZWFzZV9ldmVuX29kZF9zZXF1ZW5jZSh0ZXN0KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fNF9zb2NrZXRzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF9yeCA9IHRlc3QtJmd0O2lmb2JqX3J4LSZndDt4ZHBfcHJvZ3M7CiYjNDM7CXN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3R4ID0gdGVzdC0mZ3Q7aWZvYmpfdHgtJmd0O3hkcF9wcm9nczsKJiM0MzsKJiM0MzsJcmV0dXJuIHJ1bl9zaGFyZWRfdW1lbV90ZXN0KHRlc3QsIHNrZWxfcngtJmd0O3Byb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sCiYjNDM7CQkJCSAgICBza2VsX3R4LSZndDtwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLCBza2VsX3J4LSZndDttYXBzLnhzaywKJiM0MzsJCQkJICAgIHNrZWxfdHgtJmd0O21hcHMueHNrLCA0LCBzaGFyZWRfdW1lbV9zZXFfZXZlbl9vZGQsIE5VTEwsIE5VTEwpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3J4ID0gdGVzdC0mZ3Q7aWZvYmpfcngtJmd0O3hkcF9wcm9nczsKJiM0MzsJc3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfdHggPSB0ZXN0LSZndDtpZm9ial90eC0mZ3Q7eGRwX3Byb2dzOwomIzQzOwljb25zdCBzdHJ1Y3Qgc2hhcmVkX3VtZW1fbGVuX2N0eCBsZW5fY3R4ID0gewomIzQzOwkJLnNob3J0X2xlbiA9IE1JTl9QS1RfU0laRSwKJiM0MzsJCS5sb25nX2xlbiA9IE1JTl9QS1RfU0laRSAqIDIsCiYjNDM7CX07CiYjNDM7CiYjNDM7CXJldHVybiBydW5fc2hhcmVkX3VtZW1fdGVzdCh0ZXN0LCBza2VsX3J4LSZndDtwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtX2xlbmd0aF9iYXNlZCwKJiM0MzsJCQkJICAgIHNrZWxfdHgtJmd0O3Byb2dzLnhza194ZHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkLAomIzQzOwkJCQkgICAgc2tlbF9yeC0mZ3Q7bWFwcy54c2ssIHNrZWxfdHgtJmd0O21hcHMueHNrLCAyLCBzaGFyZWRfdW1lbV9zZXFfbGVuLAomIzQzOwkJCQkgICAgTlVMTCwgJmFtcDtsZW5fY3R4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3Qoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3J4ID0gdGVzdC0mZ3Q7aWZvYmpfcngtJmd0O3hkcF9wcm9nczsKJiM0MzsJc3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfdHggPSB0ZXN0LSZndDtpZm9ial90eC0mZ3Q7eGRwX3Byb2dzOwomIzQzOwljb25zdCBzdHJ1Y3Qgc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3RfY3R4IHVuZXZlbl9kaXN0X2N0eCA9IHsKJiM0MzsJCS50b3RhbF9wa3RzID0gREVGQVVMVF9QS1RfQ05UICogNCwKJiM0MzsJCS5wa3RfbGVuID0gTUlOX1BLVF9TSVpFLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gcnVuX3NoYXJlZF91bWVtX3Rlc3QodGVzdCwgc2tlbF9yeC0mZ3Q7cHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSwKJiM0MzsJCQkJICAgIHNrZWxfdHgtJmd0O3Byb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sIHNrZWxfcngtJmd0O21hcHMueHNrLAomIzQzOwkJCQkgICAgc2tlbF90eC0mZ3Q7bWFwcy54c2ssIDIsIHNoYXJlZF91bWVtX3NlcV91bmV2ZW5fZGlzdCwKJiM0MzsJCQkJICAgIHNoYXJlZF91bWVtX3Bvc3RfdW5ldmVuX2Rpc3QsICZhbXA7dW5ldmVuX2Rpc3RfY3R4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5hbGlnbmVkKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF9yeCA9IHRlc3QtJmd0O2lmb2JqX3J4LSZndDt4ZHBfcHJvZ3M7CiYjNDM7CXN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3R4ID0gdGVzdC0mZ3Q7aWZvYmpfdHgtJmd0O3hkcF9wcm9nczsKJiM0MzsJc3RydWN0IHhza191bWVtX2luZm8gKnR4X3VtZW0gPSB0ZXN0LSZndDtpZm9ial90eCAmYW1wOyZhbXA7IHRlc3QtJmd0O2lmb2JqX3R4LSZndDt4c2sgPwomIzQzOwkJdGVzdC0mZ3Q7aWZvYmpfdHgtJmd0O3hzay0mZ3Q7dW1lbSA6IE5VTEw7CiYjNDM7CXN0cnVjdCB4c2tfdW1lbV9pbmZvICpyeF91bWVtID0gdGVzdC0mZ3Q7aWZvYmpfcnggJmFtcDsmYW1wOyB0ZXN0LSZndDtpZm9ial9yeC0mZ3Q7eHNrID8KJiM0MzsJCXRlc3QtJmd0O2lmb2JqX3J4LSZndDt4c2stJmd0O3VtZW0gOiBOVUxMOwomIzQzOwlib29sIHR4X3VuYWxpZ25lZCA9IHR4X3VtZW0gPyB0eF91bWVtLSZndDt1bmFsaWduZWRfbW9kZSA6IGZhbHNlOwomIzQzOwlib29sIHJ4X3VuYWxpZ25lZCA9IHJ4X3VtZW0gPyByeF91bWVtLSZndDt1bmFsaWduZWRfbW9kZSA6IGZhbHNlOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwl0ZXN0X3NwZWNfc2V0X3VuYWxpZ25lZCh0ZXN0KTsKJiM0MzsKJiM0MzsJcmV0ID0gcnVuX3NoYXJlZF91bWVtX3Rlc3QodGVzdCwgc2tlbF9yeC0mZ3Q7cHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSwKJiM0MzsJCQkJICAgc2tlbF90eC0mZ3Q7cHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSwgc2tlbF9yeC0mZ3Q7bWFwcy54c2ssCiYjNDM7CQkJCSAgIHNrZWxfdHgtJmd0O21hcHMueHNrLCAyLCBzaGFyZWRfdW1lbV9zZXFfZXZlbl9vZGQsIE5VTEwsIE5VTEwpOwomIzQzOwomIzQzOwlpZiAodHhfdW1lbSkKJiM0MzsJCXR4X3VtZW0tJmd0O3VuYWxpZ25lZF9tb2RlID0gdHhfdW5hbGlnbmVkOwomIzQzOwlpZiAocnhfdW1lbSkKJiM0MzsJCXJ4X3VtZW0tJmd0O3VuYWxpZ25lZF9tb2RlID0gcnhfdW5hbGlnbmVkOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKIGludCB0ZXN0YXBwX3BvbGxfdHhxX3Rtb3V0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpCiB7CiAJYm9vbCBzaGFyZWRfdW1lbSA9IHRlc3QtJmd0O2lmb2JqX3R4LSZndDtzaGFyZWRfdW1lbTsKQEAgLTI0OTgsOSAmIzQzOzI4MjksOCBAQCBpbnQgdGVzdGFwcF9od19zd19tYXhfcmluZ19zaXplKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpCiAJdGVzdC0mZ3Q7aWZvYmpfdHgtJmd0O3hzay0mZ3Q7YmF0Y2hfc2l6ZSA9IHRlc3QtJmd0O2lmb2JqX3R4LSZndDtyaW5nLnR4X21heF9wZW5kaW5nIC0gODsKIAl0ZXN0LSZndDtpZm9ial9yeC0mZ3Q7eHNrLSZndDtiYXRjaF9zaXplID0gdGVzdC0mZ3Q7aWZvYmpfdHgtJmd0O3JpbmcudHhfbWF4X3BlbmRpbmcgLSA4OwogCWlmIChwa3Rfc3RyZWFtX3JlcGxhY2UodGVzdCwgbWF4X2Rlc2NzLCBNSU5fUEtUX1NJWkUpKSB7Ci0JCWNsZWFuX3NvY2tldHModGVzdCwgdGVzdC0mZ3Q7aWZvYmpfdHgpOwotCQljbGVhbl9zb2NrZXRzKHRlc3QsIHRlc3QtJmd0O2lmb2JqX3J4KTsKLQkJY2xlYW5fdW1lbSh0ZXN0LCB0ZXN0LSZndDtpZm9ial9yeCwgdGVzdC0mZ3Q7aWZvYmpfdHgpOwomIzQzOwkJeHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCB0ZXN0LSZndDtpZm9ial90eCk7CiYjNDM7CQl4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIHRlc3QtJmd0O2lmb2JqX3J4KTsKIAkJcmV0dXJuIFRFU1RfRkFJTFVSRTsKIAl9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5oCmluZGV4IDAzNzUzZGRjNWRjZGEuLmVmOWM0MjJkNzc2M2UgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suaApAQCAtNCw2ICYjNDM7NCw3IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9ldGh0b29sLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaWZfeGRwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3JlZmNvdW50LmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7Li4va3NlbGZ0ZXN0LmgmIzM0OwogI2luY2x1ZGUgJiMzNDt4c2suaCYjMzQ7CkBAIC03OSw2ICYjNDM7ODAsOSBAQCBzdHJ1Y3QgdGVzdF9zcGVjOwogdHlwZWRlZiBpbnQgKCp2YWxpZGF0aW9uX2Z1bmNfdCkoc3RydWN0IGlmb2JqZWN0ICppZm9iaik7CiB0eXBlZGVmIHZvaWQgKigqdGhyZWFkX2Z1bmNfdCkodm9pZCAqYXJnKTsKIHR5cGVkZWYgaW50ICgqdGVzdF9mdW5jX3QpKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpOwomIzQzO3R5cGVkZWYgaW50ICgqc2hhcmVkX3VtZW1fc2VxX2ZuKShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCB2b2lkICpjdHgpOwomIzQzO3R5cGVkZWYgaW50ICgqc2hhcmVkX3VtZW1fcG9zdF9mbikoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgaW50IHJldCwKJiM0MzsJCQkJCSAgIGNvbnN0IHZvaWQgKmN0eCk7CiAKIHN0cnVjdCB4c2tfc29ja2V0X2luZm8gewogCXN0cnVjdCB4c2tfcmluZ19jb25zIHJ4OwpAQCAtMTA0LDYgJiM0MzsxMDgsNyBAQCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyB7CiAJc3RydWN0IHhza191bWVtICp1bWVtOwogCXU2NCBuZXh0X2J1ZmZlcjsKIAl1NjQgbW1hcF9zaXplOwomIzQzOwlyZWZjb3VudF90IHVzZXJzOwogCXUzMiBudW1fZnJhbWVzOwogCXUzMiBmcmFtZV9oZWFkcm9vbTsKIAl2b2lkICpidWZmZXI7CkBAIC0xNTksNiAmIzQzOzE2NCw3IEBAIGludCBpbml0X2lmYWNlKHN0cnVjdCBpZm9iamVjdCAqaWZvYmosIHRocmVhZF9mdW5jX3QgZnVuY19wdHIpOwogaW50IHhza19jb25maWd1cmVfdW1lbShzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqLCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbSwgdm9pZCAqYnVmZmVyLCB1NjQgc2l6ZSk7CiBpbnQgeHNrX2NvbmZpZ3VyZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrLCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbSwKIAkJCSBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0LCBib29sIHNoYXJlZCk7CiYjNDM7dm9pZCB4c2tfZGVsZXRlX3NvY2tldChzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2spOwogCiAKIHN0cnVjdCBwa3QgewpAQCAtMTc5LDYgJiM0MzsxODUsMTYgQEAgc3RydWN0IHBrdF9zdHJlYW0gewogCWJvb2wgdmVyYmF0aW07CiB9OwogCiYjNDM7c3RydWN0IHNoYXJlZF91bWVtX2xlbl9jdHggewomIzQzOwl1MzIgc2hvcnRfbGVuOwomIzQzOwl1MzIgbG9uZ19sZW47CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3Qgc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3RfY3R4IHsKJiM0MzsJdTMyIHRvdGFsX3BrdHM7CiYjNDM7CXUzMiBwa3RfbGVuOwomIzQzO307CiYjNDM7CiBzdGF0aWMgaW5saW5lIGJvb2wgcGt0X2NvbnRpbnVlcyh1MzIgb3B0aW9ucykKIHsKIAlyZXR1cm4gb3B0aW9ucyAmYW1wOyBYRFBfUEtUX0NPTlREOwpAQCAtMjY4LDYgJiM0MzsyODQsMTAgQEAgaW50IHRlc3RhcHBfeGRwX21ldGFkYXRhKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpOwogaW50IHRlc3RhcHBfeGRwX21ldGFkYXRhX21iKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpOwogaW50IHRlc3RhcHBfeGRwX3Byb2dfY2xlYW51cChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTsKIGludCB0ZXN0YXBwX3hkcF9zaGFyZWRfdW1lbShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTsKJiM0MztpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV80X3NvY2tldHMoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7CiYjNDM7aW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpOwomIzQzO2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX3VuZXZlbl9kaXN0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpOwomIzQzO2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX3VuYWxpZ25lZChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTsKIAogdm9pZCAqd29ya2VyX3Rlc3RhcHBfdmFsaWRhdGVfcngodm9pZCAqYXJnKTsKIHZvaWQgKndvcmtlcl90ZXN0YXBwX3ZhbGlkYXRlX3R4KHZvaWQgKmFyZyk7CkBAIC0yOTEsNiAmIzQzOzMxMSwxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHRlc3Rfc3BlYyB0ZXN0c1tdID0gewogCXsubmFtZSA9ICYjMzQ7WERQX1BST0dfQ0xFQU5VUCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF94ZHBfcHJvZ19jbGVhbnVwfSwKIAl7Lm5hbWUgPSAmIzM0O1hEUF9EUk9QX0hBTEYmIzM0OywgLnRlc3RfZnVuYyA9IHRlc3RhcHBfeGRwX2Ryb3B9LAogCXsubmFtZSA9ICYjMzQ7WERQX1NIQVJFRF9VTUVNJiMzNDssIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3hkcF9zaGFyZWRfdW1lbX0sCiYjNDM7CXsubmFtZSA9ICYjMzQ7U0hBUkVEX1VNRU1fNF9TT0NLRVRTJiMzNDssIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3NoYXJlZF91bWVtXzRfc29ja2V0c30sCiYjNDM7CXsubmFtZSA9ICYjMzQ7U0hBUkVEX1VNRU1fTEVOR1RIX0JBU0VEJiMzNDssIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3NoYXJlZF91bWVtX2xlbmd0aF9iYXNlZH0sCiYjNDM7CXsubmFtZSA9ICYjMzQ7U0hBUkVEX1VNRU1fVU5FVkVOX0RJU1QmIzM0OywgLnRlc3RfZnVuYyA9IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3R9LAomIzQzOwl7Lm5hbWUgPSAmIzM0O1NIQVJFRF9VTUVNX1VOQUxJR05FRCYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF9zaGFyZWRfdW1lbV91bmFsaWduZWR9LAogCXsubmFtZSA9ICYjMzQ7WERQX01FVEFEQVRBX0NPUFkmIzM0OywgLnRlc3RfZnVuYyA9IHRlc3RhcHBfeGRwX21ldGFkYXRhfSwKIAl7Lm5hbWUgPSAmIzM0O1hEUF9NRVRBREFUQV9DT1BZX01VTFRJX0JVRkYmIzM0OywgLnRlc3RfZnVuYyA9IHRlc3RhcHBfeGRwX21ldGFkYXRhX21ifSwKIAl7Lm5hbWUgPSAmIzM0O0FMSUdORURfSU5WX0RFU0NfTVVMVElfQlVGRiYjMzQ7LCAudGVzdF9mdW5jID0gdGVzdGFwcF9hbGlnbmVkX2ludl9kZXNjX21ifSwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94c2tfeGRwX3Byb2dzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveHNrX3hkcF9wcm9ncy5jCmluZGV4IDAyM2Q4YmVmZDRjYWIuLjU0M2I2MWRmM2EyYjEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94c2tfeGRwX3Byb2dzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hza194ZHBfcHJvZ3MuYwpAQCAtMTAsNyAmIzQzOzEwLDcgQEAKIAogc3RydWN0IHsKIAlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1hTS01BUCk7Ci0JX191aW50KG1heF9lbnRyaWVzLCAyKTsKJiM0MzsJX191aW50KG1heF9lbnRyaWVzLCBNQVhfU09DS0VUUyk7CiAJX191aW50KGtleV9zaXplLCBzaXplb2YoaW50KSk7CiAJX191aW50KHZhbHVlX3NpemUsIHNpemVvZihpbnQpKTsKIH0geHNrIFNFQygmIzM0Oy5tYXBzJiMzNDspOwpAQCAtNzUsNiAmIzQzOzc1LDIzIEBAIFNFQygmIzM0O3hkcCYjMzQ7KSBpbnQgeHNrX3hkcF9zaGFyZWRfdW1lbShzdHJ1Y3QgeGRwX21kICp4ZHApCiAJcmV0dXJuIGJwZl9yZWRpcmVjdF9tYXAoJmFtcDt4c2ssIGlkeCwgWERQX0RST1ApOwogfQogCiYjNDM7U0VDKCYjMzQ7eGRwJiMzNDspIGludCB4c2tfeGRwX3NoYXJlZF91bWVtX2xlbmd0aF9iYXNlZChzdHJ1Y3QgeGRwX21kICp4ZHApCiYjNDM7ewomIzQzOwl2b2lkICpkYXRhID0gKHZvaWQgKikobG9uZyl4ZHAtJmd0O2RhdGE7CiYjNDM7CXZvaWQgKmRhdGFfZW5kID0gKHZvaWQgKikobG9uZyl4ZHAtJmd0O2RhdGFfZW5kOwomIzQzOwlfX3UzMiBwa3RfbGVuID0gZGF0YV9lbmQgLSBkYXRhOwomIzQzOwomIzQzOwkvKiAKJiM0MzsJICogUm91dGUgcGFja2V0cyBieSB0b3RhbCBYRFAtdmlzaWJsZSBwYWNrZXQgbGVuZ3RoIChkYXRhX2VuZCAtIGRhdGEpOgomIzQzOwkgKiAtIFNvY2tldCAwOiBwYWNrZXRzICZsdDs9IFNIQVJFRF9VTUVNX0xFTl9TUExJVCBieXRlcwomIzQzOwkgKiAtIFNvY2tldCAxOiBwYWNrZXRzICZndDsgU0hBUkVEX1VNRU1fTEVOX1NQTElUIGJ5dGVzCiYjNDM7CSAqLwomIzQzOwlpZiAocGt0X2xlbiAmbHQ7PSBTSEFSRURfVU1FTV9MRU5fU1BMSVQpCiYjNDM7CQlyZXR1cm4gYnBmX3JlZGlyZWN0X21hcCgmYW1wO3hzaywgMCwgWERQX0RST1ApOwomIzQzOwllbHNlCiYjNDM7CQlyZXR1cm4gYnBmX3JlZGlyZWN0X21hcCgmYW1wO3hzaywgMSwgWERQX0RST1ApOwomIzQzO30KJiM0MzsKIFNFQygmIzM0O3hkcC5mcmFncyYjMzQ7KSBpbnQgeHNrX3hkcF9hZGp1c3RfdGFpbChzdHJ1Y3QgeGRwX21kICp4ZHApCiB7CiAJX191MzIgYnVmZl9sZW4sIGN1cnJfYnVmZl9sZW47CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNrX3hkcF9jb21tb24uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2tfeGRwX2NvbW1vbi5oCmluZGV4IDQ1ODEwZmY1NTJkYWUuLmJkOWI1ZGNmOGM4ZWUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2tfeGRwX2NvbW1vbi5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2tfeGRwX2NvbW1vbi5oCkBAIC0zLDcgJiM0MzszLDggQEAKICNpZm5kZWYgWFNLX1hEUF9DT01NT05fSF8KICNkZWZpbmUgWFNLX1hEUF9DT01NT05fSF8KIAotI2RlZmluZSBNQVhfU09DS0VUUyAyCiYjNDM7I2RlZmluZSBNQVhfU09DS0VUUyA0CiYjNDM7I2RlZmluZSBTSEFSRURfVU1FTV9MRU5fU1BMSVQgNjQKICNkZWZpbmUgUEtUX0hEUl9BTElHTiAoc2l6ZW9mKHN0cnVjdCBldGhoZHIpICYjNDM7IDIpIC8qIEp1c3QgdG8gYWxpZ24gdGhlIGRhdGEgaW4gdGhlIHBhY2tldCAqLwogCiBzdHJ1Y3QgeGRwX2luZm8gewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza3hjZWl2ZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2t4Y2VpdmVyLmMKaW5kZXggN2RhZDg1NTZhNzIyZS4uZWQ3NzE2YjYzNzU2NyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza3hjZWl2ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNreGNlaXZlci5jCkBAIC0xMTcsMTIgJiM0MzsxMTcsMTMgQEAgc3RhdGljIHZvaWQgX19leGl0X3dpdGhfZXJyb3IoaW50IGVycm9yLCBjb25zdCBjaGFyICpmaWxlLCBjb25zdCBjaGFyICpmdW5jLCBpbnQKIAogI2RlZmluZSBleGl0X3dpdGhfZXJyb3IoZXJyb3IpIF9fZXhpdF93aXRoX2Vycm9yKGVycm9yLCBfX0ZJTEVfXywgX19mdW5jX18sIF9fTElORV9fKQogCi1zdGF0aWMgYm9vbCBpZm9ial96Y19hdmFpbChzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0KQomIzQzO3N0YXRpYyBib29sIGlmb2JqX3pjX2F2YWlsKHN0cnVjdCBpZm9iamVjdCAqaWZvYmopCiB7CiAJc2l6ZV90IHVtZW1fc3ogPSBERUZBVUxUX1VNRU1fQlVGRkVSUyAqIFhTS19VTUVNX19ERUZBVUxUX0ZSQU1FX1NJWkU7CiAJaW50IG1tYXBfZmxhZ3MgPSBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMgfCBNQVBfTk9SRVNFUlZFOwotCXN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzazsKLQlzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbTsKJiM0MzsJc3RydWN0IHhza19zb2NrZXRfaW5mbyB4c2sgPSB7fTsKJiM0MzsJc3RydWN0IHhza191bWVtX2luZm8gdW1lbV9pbmZvID0ge307CiYjNDM7CXN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtID0gJmFtcDt1bWVtX2luZm87CiAJYm9vbCB6Y19hdmFpbCA9IGZhbHNlOwogCXZvaWQgKmJ1ZnM7CiAJaW50IHJldDsKQEAgLTEzMSwzMiAmIzQzOzEzMiwyMiBAQCBzdGF0aWMgYm9vbCBpZm9ial96Y19hdmFpbChzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0KQogCWlmIChidWZzID09IE1BUF9GQUlMRUQpCiAJCWV4aXRfd2l0aF9lcnJvcihlcnJubyk7CiAKLQl1bWVtID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgeHNrX3VtZW1faW5mbykpOwotCWlmICghdW1lbSkgewotCQltdW5tYXAoYnVmcywgdW1lbV9zeik7Ci0JCWV4aXRfd2l0aF9lcnJvcihFTk9NRU0pOwotCX0KJiM0MzsJdW1lbS0mZ3Q7bW1hcF9zaXplID0gdW1lbV9zejsKIAl1bWVtLSZndDtmcmFtZV9zaXplID0gWFNLX1VNRU1fX0RFRkFVTFRfRlJBTUVfU0laRTsKLQlyZXQgPSB4c2tfY29uZmlndXJlX3VtZW0oaWZvYmplY3QsIHVtZW0sIGJ1ZnMsIHVtZW1fc3opOwomIzQzOwlyZXQgPSB4c2tfY29uZmlndXJlX3VtZW0oaWZvYmosIHVtZW0sIGJ1ZnMsIHVtZW1fc3opOwogCWlmIChyZXQpCiAJCWV4aXRfd2l0aF9lcnJvcigtcmV0KTsKIAotCXhzayA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHhza19zb2NrZXRfaW5mbykpOwotCWlmICgheHNrKQotCQlnb3RvIG91dDsKLQlpZm9iamVjdC0mZ3Q7YmluZF9mbGFncyA9IFhEUF9VU0VfTkVFRF9XQUtFVVAgfCBYRFBfWkVST0NPUFk7Ci0JaWZvYmplY3QtJmd0O3J4X29uID0gdHJ1ZTsKLQl4c2stJmd0O3J4cXNpemUgPSBYU0tfUklOR19DT05TX19ERUZBVUxUX05VTV9ERVNDUzsKLQlyZXQgPSB4c2tfY29uZmlndXJlX3NvY2tldCh4c2ssIHVtZW0sIGlmb2JqZWN0LCBmYWxzZSk7CiYjNDM7CWlmb2JqLSZndDtiaW5kX2ZsYWdzID0gWERQX1VTRV9ORUVEX1dBS0VVUCB8IFhEUF9aRVJPQ09QWTsKJiM0MzsJaWZvYmotJmd0O3J4X29uID0gdHJ1ZTsKJiM0MzsJeHNrLnJ4cXNpemUgPSBYU0tfUklOR19DT05TX19ERUZBVUxUX05VTV9ERVNDUzsKJiM0MzsJcmV0ID0geHNrX2NvbmZpZ3VyZV9zb2NrZXQoJmFtcDt4c2ssIHVtZW0sIGlmb2JqLCBmYWxzZSk7CiAJaWYgKCFyZXQpCiAJCXpjX2F2YWlsID0gdHJ1ZTsKIAotCXhza19zb2NrZXRfX2RlbGV0ZSh4c2stJmd0O3hzayk7Ci0JZnJlZSh4c2spOwotb3V0OgotCW11bm1hcCh1bWVtLSZndDtidWZmZXIsIHVtZW1fc3opOwotCXhza191bWVtX19kZWxldGUodW1lbS0mZ3Q7dW1lbSk7Ci0JZnJlZSh1bWVtKTsKJiM0MzsJLyogVXNlIHRoZSBzYW1lIHJlZmNvdW50LWJhc2VkIHRlYXJkb3duIHBhdGggZm9yIGJvdGggc3VjY2VzcyBhbmQgZmFpbHVyZS4gKi8KJiM0MzsJeHNrX2RlbGV0ZV9zb2NrZXQoJmFtcDt4c2spOwomIzQzOwogCXJldHVybiB6Y19hdmFpbDsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI0MQoJCQkJCQkJb3V0cHV0OiA2OAoJCQkJCQkJdGhvdWdodHM6IDc4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTt2ZSBnb3QgYSBwYXRjaCB0aGF0JiMzOTtzIHRvdWNoZWQgYSBidW5jaCBvZiBmaWxlcywgYWxsIHVuZGVyIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgaWYgdGhlc2UgY2hhbmdlcyB3YXJyYW50IGZ1enppbmcuIFRoZSBpbnN0cnVjdGlvbnMgYXJlIHByZXR0eSBjbGVhcjogcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCAqb25seSogY29udGFpbnMgbW9kaWZpY2F0aW9ucyB0byB0ZXN0cywgZG9jdW1lbnRhdGlvbiwgY29tbWVudHMsIGRlY29yYXRpdmUgbG9nZ2luZywgbm9uLWZ1bmN0aW9uYWwgbnVtZXJpYyBjaGFuZ2VzLCB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzLCBvciB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycyByZXF1aXJpbmcgc3BlY2lmaWMgaGFyZHdhcmUuCgpSaWdodCwgc28sIGZpcnN0IHRoaW5ncyBmaXJzdDogbGV0IG1lIGlzb2xhdGUgd2hlcmUgdGhlIGNoYW5nZXMgYXJlLiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY2AsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5oYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94c2tfeGRwX3Byb2dzLmNgLCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza194ZHBfY29tbW9uLmhgLCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2t4Y2VpdmVyLmNgLiBCaW5nbyEgQWxsIHRlc3QgY29kZS4KCk5vdyB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBhcmUgdGhlc2Ugc2VsZnRlc3RzIHRvdWNoaW5nIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzPyBUaGUgYW5zd2VyIGlzIG5vLCB0aGlzIGlzIGFsbCB0ZXN0IGluZnJhc3RydWN0dXJlLCB1c2Vyc3BhY2UgcHJvZ3JhbXMsIGFuZCBCUEYgcHJvZ3JhbXMgdXNlZCBmb3IgdGVzdGluZy4gVGhlc2UgZmlsZXMgZG9uJiMzOTt0IGNoYW5nZSBhbnkgb2YgdGhlIGtlcm5lbCYjMzk7cyBmdW5jdGlvbmFsIGJlaGF2aW9yLCBidXQgYXJlIHRlc3QgcHJvZ3JhbXMgZm9yIEJQRi4KClRoZSBndWlkZWxpbmVzIGFyZSBleHBsaWNpdC4gSWYgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMgd2VyZSB0b3VjaGVkLCBJJiMzOTtkIG5lZWQgdG8gY29uZmlybSBleGVjdXRhYmlsaXR5IGFuZCB0aGVuIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLiBIb3dldmVyLCBzaW5jZSBpdCBpcyBvbmx5IGEgY2hhbmdlIHRvIHNlbGZ0ZXN0cywgSSBkb24mIzM5O3Qgc2VlIGFueSBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwuCgpTbywgbGV0IG1lIHJlY29uZmlybTogdGhlIGZpbGVzIG1vZGlmaWVkIGFyZSBsaW1pdGVkIHRvIEJQRiBzZWxmdGVzdHMsIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2AuIFRoaXMgbWVhbnMgdGhlIHBhdGNoICpvbmx5KiBpbXBhY3RzIHRoZSB0ZXN0IHN1aXRlLCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBmdW5jdGlvbmFsIGFsdGVyYXRpb25zIHRvIHRoZSBrZXJuZWwgaXRzZWxmLgoKVGhlcmVmb3JlLCBteSBhc3Nlc3NtZW50IGlzOiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJhdGlvbmFsZSBpcyBzdHJhaWdodGZvcndhcmQ6IFRoaXMgcGF0Y2ggZm9jdXNlcyBzb2xlbHkgb24gbW9kaWZ5aW5nIGFuZCBpbXByb3ZpbmcgQlBGIHNlbGZ0ZXN0cywgbm90IGNvcmUga2VybmVsIGZ1bmN0aW9uYWxpdHksIGFuZCBkb2VzIG5vdCB3YXJyYW50IGZ1enppbmcgdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyAodXNlcnNwYWNlIHRlc3QgcHJvZ3JhbXMgYW5kIHRlc3QgQlBGIHByb2dyYW1zKSBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyAodXNlcnNwYWNlIHRlc3QgcHJvZ3JhbXMgYW5kIHRlc3QgQlBGIHByb2dyYW1zKSBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6NTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjU3OjI3LjYzMTE4NDM5NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTcyNzM2MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgc2VsZnRlc3RzICh1c2Vyc3BhY2UgdGVzdCBwcm9ncmFtcyBhbmQgdGVzdCBCUEYgcHJvZ3JhbXMpIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6NTc6MjcuNjMxMTg4OTk2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzA3Nzk5MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkZjI0Y2IxMWNjMjYxN2ZlMmE2ZjI2MjQ5YzQ0ODdlNjk5MzNmNGFmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDcgMTY6NTc6MjYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmNcXG5pbmRleCA0NzdhZWRiYjAxYmFkLi5jY2ZkOWU4NDM2YTdiIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jXFxuQEAgLTEwMSw2ICsxMDEsNyBAQCBpbnQgeHNrX2NvbmZpZ3VyZV91bWVtKHN0cnVjdCBpZm9iamVjdCAqaWZvYmosIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtLCB2b2lkXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHR1bWVtLVxcdTAwM2VidWZmZXIgPSBidWZmZXI7XFxuK1xcdHJlZmNvdW50X3NldChcXHUwMDI2dW1lbS1cXHUwMDNldXNlcnMsIDEpO1xcbiBcXHRpZiAoaWZvYmotXFx1MDAzZXNoYXJlZF91bWVtIFxcdTAwMjZcXHUwMDI2IGlmb2JqLVxcdTAwM2VyeF9vbikge1xcbiBcXHRcXHR1bWVtLVxcdTAwM2ViYXNlX2FkZHIgPSB1bWVtX3NpemUodW1lbSk7XFxuIFxcdFxcdHVtZW0tXFx1MDAzZW5leHRfYnVmZmVyID0gdW1lbV9zaXplKHVtZW0pO1xcbkBAIC0xNTQsNiArMTU1LDcgQEAgaW50IHhza19jb25maWd1cmVfc29ja2V0KHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzaywgc3RydWN0IHhza191bWVtX2luZm8gKnVtZW1cXG4gXFx0c3RydWN0IHhza19zb2NrZXRfY29uZmlnIGNmZyA9IHt9O1xcbiBcXHRzdHJ1Y3QgeHNrX3JpbmdfY29ucyAqcnhyO1xcbiBcXHRzdHJ1Y3QgeHNrX3JpbmdfcHJvZCAqdHhyO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4gXFx0eHNrLVxcdTAwM2V1bWVtID0gdW1lbTtcXG4gXFx0Y2ZnLnJ4X3NpemUgPSB4c2stXFx1MDAzZXJ4cXNpemU7XFxuQEAgLTE3MCw3ICsxNzIsMjEgQEAgaW50IHhza19jb25maWd1cmVfc29ja2V0KHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzaywgc3RydWN0IHhza191bWVtX2luZm8gKnVtZW1cXG4gXFxuIFxcdHR4ciA9IGlmb2JqZWN0LVxcdTAwM2V0eF9vbiA/IFxcdTAwMjZ4c2stXFx1MDAzZXR4IDogTlVMTDtcXG4gXFx0cnhyID0gaWZvYmplY3QtXFx1MDAzZXJ4X29uID8gXFx1MDAyNnhzay1cXHUwMDNlcnggOiBOVUxMO1xcbi1cXHRyZXR1cm4geHNrX3NvY2tldF9fY3JlYXRlKFxcdTAwMjZ4c2stXFx1MDAzZXhzaywgaWZvYmplY3QtXFx1MDAzZWlmaW5kZXgsIDAsIHVtZW0tXFx1MDAzZXVtZW0sIHJ4ciwgdHhyLCBcXHUwMDI2Y2ZnKTtcXG4rXFx0cmV0ID0geHNrX3NvY2tldF9fY3JlYXRlKFxcdTAwMjZ4c2stXFx1MDAzZXhzaywgaWZvYmplY3QtXFx1MDAzZWlmaW5kZXgsIDAsIHVtZW0tXFx1MDAzZXVtZW0sIHJ4ciwgdHhyLCBcXHUwMDI2Y2ZnKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRpZiAoc2hhcmVkKVxcbitcXHRcXHRcXHQvKiBTaGFyZWQgc29ja2V0IGZhaWxlZCBiZWZvcmUgYWNxdWlyaW5nIGEgVU1FTSByZWZlcmVuY2UuICovXFxuK1xcdFxcdFxcdHhzay1cXHUwMDNldW1lbSA9IE5VTEw7XFxuK1xcbitcXHRcXHQvKiBLZWVwIGZhaWxlZCBzb2NrZXQgc3RhdGUgaW5lcnQgZm9yIGxhdGVyIGNsZWFudXAgcGF0aHMuICovXFxuK1xcdFxcdHhzay1cXHUwMDNleHNrID0gTlVMTDtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHNoYXJlZClcXG4rXFx0XFx0cmVmY291bnRfaW5jKFxcdTAwMjZ1bWVtLVxcdTAwM2V1c2Vycyk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHNldF9yaW5nX3NpemUoc3RydWN0IGlmb2JqZWN0ICppZm9iailcXG5AQCAtMjAzLDYgKzIxOSwxMiBAQCBpbnQgaHdfcmluZ19zaXplX3Jlc2V0KHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXFxuIHN0YXRpYyB2b2lkIF9fdGVzdF9zcGVjX2luaXQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9ial90eCxcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqX3J4KVxcbiB7XFxuK1xcdC8qXFxuK1xcdCAqIEtlZXAgdGhlIHNhbWUgZGVmYXVsdCBhcyB4c2t4Y2VpdmVyIHN0YXJ0dXA6IHdoZW4gVFggYW5kIFJYIHNoYXJlIHRoZSBzYW1lIG5ldGRldixcXG4rXFx0ICogc2hhcmVkIFVNRU0gaXMgdGhlIGJhc2VsaW5lIG1vZGUgZm9yIHRoaXMgdGVzdCBoYXJuZXNzLiBJbmRpdmlkdWFsIHRlc3RzIGNhbiBzdGlsbFxcbitcXHQgKiBvdmVycmlkZSB0aGlzIGFzIG5lZWRlZC5cXG4rXFx0ICovXFxuK1xcdGJvb2wgc2hhcmVkX2RlZmF1bHQgPSBpZm9ial90eC1cXHUwMDNlaWZpbmRleCA9PSBpZm9ial9yeC1cXHUwMDNlaWZpbmRleDtcXG4gXFx0dTMyIGksIGo7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTUFYX0lOVEVSRkFDRVM7IGkrKykge1xcbkBAIC0yMTQsNiArMjM2LDcgQEAgc3RhdGljIHZvaWQgX190ZXN0X3NwZWNfaW5pdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqX3R4LFxcbiBcXHRcXHRpZm9iai1cXHUwMDNldXNlX2ZpbGxfcmluZyA9IHRydWU7XFxuIFxcdFxcdGlmb2JqLVxcdTAwM2VyZWxlYXNlX3J4ID0gdHJ1ZTtcXG4gXFx0XFx0aWZvYmotXFx1MDAzZXZhbGlkYXRpb25fZnVuYyA9IE5VTEw7XFxuK1xcdFxcdGlmb2JqLVxcdTAwM2VzaGFyZWRfdW1lbSA9IHNoYXJlZF9kZWZhdWx0O1xcbiBcXHRcXHRpZm9iai1cXHUwMDNldXNlX21ldGFkYXRhID0gZmFsc2U7XFxuIFxcbiBcXHRcXHRpZiAoaSA9PSAwKSB7XFxuQEAgLTU3NCwyNiArNTk3LDEyMiBAQCBzdGF0aWMgaW50IHBrdF9zdHJlYW1fcmVjZWl2ZV9oYWxmKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXFxuIFxcbiBzdGF0aWMgaW50IHBrdF9zdHJlYW1fZXZlbl9vZGRfc2VxdWVuY2Uoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcXG4ge1xcbitcXHRzdHJ1Y3QgcGt0X3N0cmVhbSAqdHhfc3RyZWFtc1tNQVhfU09DS0VUU10gPSB7fTtcXG4rXFx0c3RydWN0IHBrdF9zdHJlYW0gKnJ4X3N0cmVhbXNbTUFYX1NPQ0tFVFNdID0ge307XFxuIFxcdHN0cnVjdCBwa3Rfc3RyZWFtICpwa3Rfc3RyZWFtO1xcbiBcXHR1MzIgaTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0ZXN0LVxcdTAwM2VuYl9zb2NrZXRzOyBpKyspIHtcXG4gXFx0XFx0cGt0X3N0cmVhbSA9IHRlc3QtXFx1MDAzZWlmb2JqX3R4LVxcdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW07XFxuLVxcdFxcdHBrdF9zdHJlYW0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUocGt0X3N0cmVhbS1cXHUwMDNlbmJfcGt0cyAvIDIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgIHBrdF9zdHJlYW0tXFx1MDAzZXBrdHNbMF0ubGVuLCBpLCAyKTtcXG4tXFx0XFx0aWYgKCFwa3Rfc3RyZWFtKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFx0XFx0dGVzdC1cXHUwMDNlaWZvYmpfdHgtXFx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSA9IHBrdF9zdHJlYW07XFxuK1xcdFxcdHR4X3N0cmVhbXNbaV0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUocGt0X3N0cmVhbS1cXHUwMDNlbmJfcGt0cyAvIDIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHBrdF9zdHJlYW0tXFx1MDAzZXBrdHNbMF0ubGVuLCBpLCAyKTtcXG4rXFx0XFx0aWYgKCF0eF9zdHJlYW1zW2ldKVxcbitcXHRcXHRcXHRnb3RvIGVycjtcXG4gXFxuIFxcdFxcdHBrdF9zdHJlYW0gPSB0ZXN0LVxcdTAwM2VpZm9ial9yeC1cXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtO1xcbi1cXHRcXHRwa3Rfc3RyZWFtID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tXFx1MDAzZW5iX3BrdHMgLyAyLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICBwa3Rfc3RyZWFtLVxcdTAwM2Vwa3RzWzBdLmxlbiwgaSwgMik7XFxuLVxcdFxcdGlmICghcGt0X3N0cmVhbSlcXG4tXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcdFxcdHRlc3QtXFx1MDAzZWlmb2JqX3J4LVxcdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSBwa3Rfc3RyZWFtO1xcbitcXHRcXHRyeF9zdHJlYW1zW2ldID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tXFx1MDAzZW5iX3BrdHMgLyAyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBwa3Rfc3RyZWFtLVxcdTAwM2Vwa3RzWzBdLmxlbiwgaSwgMik7XFxuK1xcdFxcdGlmICghcnhfc3RyZWFtc1tpXSlcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0ZXN0LVxcdTAwM2VuYl9zb2NrZXRzOyBpKyspIHtcXG4rXFx0XFx0dGVzdC1cXHUwMDNlaWZvYmpfdHgtXFx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSA9IHR4X3N0cmVhbXNbaV07XFxuK1xcdFxcdHRlc3QtXFx1MDAzZWlmb2JqX3J4LVxcdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSByeF9zdHJlYW1zW2ldO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2VycjpcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRlc3QtXFx1MDAzZW5iX3NvY2tldHM7IGkrKykge1xcbitcXHRcXHRpZiAodHhfc3RyZWFtc1tpXSlcXG4rXFx0XFx0XFx0cGt0X3N0cmVhbV9kZWxldGUodHhfc3RyZWFtc1tpXSk7XFxuK1xcdFxcdGlmIChyeF9zdHJlYW1zW2ldKVxcbitcXHRcXHRcXHRwa3Rfc3RyZWFtX2RlbGV0ZShyeF9zdHJlYW1zW2ldKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIC1FTk9NRU07XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGt0X3N0cmVhbV9sZW5fc2VxKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHUzMiBzaG9ydF9sZW4sIHUzMiBsb25nX2xlbilcXG4re1xcbitcXHRzdHJ1Y3QgcGt0X3N0cmVhbSAqdHhfc3RyZWFtc1tNQVhfU09DS0VUU10gPSB7fTtcXG4rXFx0c3RydWN0IHBrdF9zdHJlYW0gKnJ4X3N0cmVhbXNbTUFYX1NPQ0tFVFNdID0ge307XFxuK1xcdHN0cnVjdCBwa3Rfc3RyZWFtICpwa3Rfc3RyZWFtO1xcbitcXHR1MzIgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0ZXN0LVxcdTAwM2VuYl9zb2NrZXRzOyBpKyspIHtcXG4rXFx0XFx0dTMyIHBrdF9sZW4gPSBpID8gbG9uZ19sZW4gOiBzaG9ydF9sZW47XFxuK1xcbitcXHRcXHRwa3Rfc3RyZWFtID0gdGVzdC1cXHUwMDNlaWZvYmpfdHgtXFx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbTtcXG4rXFx0XFx0dHhfc3RyZWFtc1tpXSA9IF9fcGt0X3N0cmVhbV9nZW5lcmF0ZShwa3Rfc3RyZWFtLVxcdTAwM2VuYl9wa3RzIC8gMiwgcGt0X2xlbiwgaSwgMik7XFxuK1xcdFxcdGlmICghdHhfc3RyZWFtc1tpXSlcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRcXHRwa3Rfc3RyZWFtID0gdGVzdC1cXHUwMDNlaWZvYmpfcngtXFx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbTtcXG4rXFx0XFx0cnhfc3RyZWFtc1tpXSA9IF9fcGt0X3N0cmVhbV9nZW5lcmF0ZShwa3Rfc3RyZWFtLVxcdTAwM2VuYl9wa3RzIC8gMiwgcGt0X2xlbiwgaSwgMik7XFxuK1xcdFxcdGlmICghcnhfc3RyZWFtc1tpXSlcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0ZXN0LVxcdTAwM2VuYl9zb2NrZXRzOyBpKyspIHtcXG4rXFx0XFx0dGVzdC1cXHUwMDNlaWZvYmpfdHgtXFx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSA9IHR4X3N0cmVhbXNbaV07XFxuK1xcdFxcdHRlc3QtXFx1MDAzZWlmb2JqX3J4LVxcdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSByeF9zdHJlYW1zW2ldO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2VycjpcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRlc3QtXFx1MDAzZW5iX3NvY2tldHM7IGkrKykge1xcbitcXHRcXHRpZiAodHhfc3RyZWFtc1tpXSlcXG4rXFx0XFx0XFx0cGt0X3N0cmVhbV9kZWxldGUodHhfc3RyZWFtc1tpXSk7XFxuK1xcdFxcdGlmIChyeF9zdHJlYW1zW2ldKVxcbitcXHRcXHRcXHRwa3Rfc3RyZWFtX2RlbGV0ZShyeF9zdHJlYW1zW2ldKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIC1FTk9NRU07XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGt0X3N0cmVhbV93ZWlnaHRlZF91bmV2ZW5fZGlzdF9zZXF1ZW5jZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCB1MzIgdG90YWxfcGt0cyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHUzMiBwa3RfbGVuKVxcbit7XFxuK1xcdHN0cnVjdCBwa3Rfc3RyZWFtICp0eF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9O1xcbitcXHRzdHJ1Y3QgcGt0X3N0cmVhbSAqcnhfc3RyZWFtc1tNQVhfU09DS0VUU10gPSB7fTtcXG4rXFx0dTMyIGksIHBrdHNfc29jazA7XFxuK1xcbitcXHRpZiAodGVzdC1cXHUwMDNlbmJfc29ja2V0cyBcXHUwMDNjIDIgfHwgdG90YWxfcGt0cyBcXHUwMDNjIDQpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cGt0c19zb2NrMCA9IHRvdGFsX3BrdHMgLyA0O1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRlc3QtXFx1MDAzZW5iX3NvY2tldHM7IGkrKykge1xcbitcXHRcXHR1MzIgbmJfcGt0cyA9IChpID09IDApID8gcGt0c19zb2NrMCA6ICh0b3RhbF9wa3RzIC0gcGt0c19zb2NrMCk7XFxuK1xcbitcXHRcXHR0eF9zdHJlYW1zW2ldID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKG5iX3BrdHMsIHBrdF9sZW4sIGksIDIpO1xcbitcXHRcXHRpZiAoIXR4X3N0cmVhbXNbaV0pXFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0XFx0cnhfc3RyZWFtc1tpXSA9IF9fcGt0X3N0cmVhbV9nZW5lcmF0ZShuYl9wa3RzLCBwa3RfbGVuLCBpLCAyKTtcXG4rXFx0XFx0aWYgKCFyeF9zdHJlYW1zW2ldKVxcbitcXHRcXHRcXHRnb3RvIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRlc3QtXFx1MDAzZW5iX3NvY2tldHM7IGkrKykge1xcbitcXHRcXHR0ZXN0LVxcdTAwM2VpZm9ial90eC1cXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtID0gdHhfc3RyZWFtc1tpXTtcXG4rXFx0XFx0dGVzdC1cXHUwMDNlaWZvYmpfcngtXFx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSA9IHJ4X3N0cmVhbXNbaV07XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbitcXG4rZXJyOlxcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdGVzdC1cXHUwMDNlbmJfc29ja2V0czsgaSsrKSB7XFxuK1xcdFxcdGlmICh0eF9zdHJlYW1zW2ldKVxcbitcXHRcXHRcXHRwa3Rfc3RyZWFtX2RlbGV0ZSh0eF9zdHJlYW1zW2ldKTtcXG4rXFx0XFx0aWYgKHJ4X3N0cmVhbXNbaV0pXFxuK1xcdFxcdFxcdHBrdF9zdHJlYW1fZGVsZXRlKHJ4X3N0cmVhbXNbaV0pO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gLUVOT01FTTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcmVsZWFzZV9ldmVuX29kZF9zZXF1ZW5jZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxcbkBAIC0xNDY4LDYgKzE1ODcsMjggQEAgc3RhdGljIGludCB2YWxpZGF0ZV90eF9pbnZhbGlkX2Rlc2NzKHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QpXFxuIFxcdHJldHVybiBURVNUX1BBU1M7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHhza19kZWxldGVfc29ja2V0X2JhdGNoKHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QsIHUzMiBjb3VudClcXG4re1xcbitcXHR1MzIgaTtcXG4rXFxuK1xcdGlmICghaWZvYmplY3QpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGZvciAoaSA9IGNvdW50OyBpIFxcdTAwM2UgMDsgaS0tKVxcbitcXHRcXHR4c2tfZGVsZXRlX3NvY2tldChcXHUwMDI2aWZvYmplY3QtXFx1MDAzZXhza19hcnJbaSAtIDFdKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgeHNrX2NvbmZpZ3VyZV9yb2xsYmFjayhzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0LCBpbnQgbGFzdClcXG4re1xcbitcXHR1MzIgY291bnQ7XFxuK1xcbitcXHRpZiAoIWlmb2JqZWN0IHx8IGxhc3QgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRjb3VudCA9IGxhc3QgKyAxO1xcbitcXHR4c2tfZGVsZXRlX3NvY2tldF9iYXRjaChpZm9iamVjdCwgY291bnQpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHhza19jb25maWd1cmUoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdCxcXG4gXFx0XFx0XFx0ICBzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbSwgYm9vbCB0eClcXG4ge1xcbkBAIC0xNDg0LDE0ICsxNjI1LDE4IEBAIHN0YXRpYyBpbnQgeHNrX2NvbmZpZ3VyZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0LFxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFxuIFxcdFxcdFxcdC8qIFJldHJ5IGlmIGl0IGZhaWxzIGFzIHhza19zb2NrZXRfX2NyZWF0ZSgpIGlzIGFzeW5jaHJvbm91cyAqL1xcbi1cXHRcXHRcXHRpZiAoY3RyIFxcdTAwM2U9IFNPQ0tfUkVDT05GX0NUUilcXG4rXFx0XFx0XFx0aWYgKGN0ciBcXHUwMDNlPSBTT0NLX1JFQ09ORl9DVFIpIHtcXG4rXFx0XFx0XFx0XFx0eHNrX2NvbmZpZ3VyZV9yb2xsYmFjayhpZm9iamVjdCwgaSk7XFxuIFxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0XFx0dXNsZWVwKFVTTEVFUF9NQVgpO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlmIChpZm9iamVjdC1cXHUwMDNlYnVzeV9wb2xsKSB7XFxuIFxcdFxcdFxcdHJldCA9IGVuYWJsZV9idXN5X3BvbGwoXFx1MDAyNmlmb2JqZWN0LVxcdTAwM2V4c2tfYXJyW2ldKTtcXG4tXFx0XFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRcXHR4c2tfY29uZmlndXJlX3JvbGxiYWNrKGlmb2JqZWN0LCBpKTtcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuQEAgLTE3MDIsMTIgKzE4NDcsNjAgQEAgdm9pZCAqd29ya2VyX3Rlc3RhcHBfdmFsaWRhdGVfcngodm9pZCAqYXJnKVxcbiBcXHRwdGhyZWFkX2V4aXQoTlVMTCk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHRlc3RhcHBfY2xlYW5feHNrX3VtZW0oc3RydWN0IGlmb2JqZWN0ICppZm9iailcXG4rdm9pZCB4c2tfZGVsZXRlX3NvY2tldChzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2spXFxuIHtcXG4tXFx0c3RydWN0IHhza191bWVtX2luZm8gKnVtZW0gPSBpZm9iai1cXHUwMDNleHNrLVxcdTAwM2V1bWVtO1xcbitcXHRzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbTtcXG4gXFxuLVxcdHhza191bWVtX19kZWxldGUodW1lbS1cXHUwMDNldW1lbSk7XFxuLVxcdG11bm1hcCh1bWVtLVxcdTAwM2VidWZmZXIsIHVtZW0tXFx1MDAzZW1tYXBfc2l6ZSk7XFxuK1xcdC8qXFxuK1xcdCAqIENhbGxlcnMgbXVzdCBzZXJpYWxpemUgdGVhcmRvd24gZm9yIGEgZ2l2ZW4geHNrL3VtZW0gcGFpci5cXG4rXFx0ICogVGhpcyBoZWxwZXIgZG9lcyByZWZjb3VudC1iYXNlZCBsaWZldGltZSBtYW5hZ2VtZW50IG9ubHkuXFxuK1xcdCAqL1xcbitcXHRpZiAoIXhzaylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0dW1lbSA9IHhzay1cXHUwMDNldW1lbTtcXG4rXFx0aWYgKCF1bWVtKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHQvKiBEZWxldGUgdGhlIHNvY2tldCBoYW5kbGUgd2hlbiBhdmFpbGFibGUsIHRoZW4gZHJvcCBVTUVNIHJlZmVyZW5jZS4gKi9cXG4rXFx0aWYgKHhzay1cXHUwMDNleHNrKVxcbitcXHRcXHR4c2tfc29ja2V0X19kZWxldGUoeHNrLVxcdTAwM2V4c2spO1xcbitcXHR4c2stXFx1MDAzZXhzayA9IE5VTEw7XFxuK1xcbitcXHQvKiBNYXJrIHRoaXMgc29ja2V0IGFzIGNsZWFuZWQgdXAgdG8gcHJldmVudCBkb3VibGUtZGVjcmVtZW50ICovXFxuK1xcdHhzay1cXHUwMDNldW1lbSA9IE5VTEw7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUZWFyZG93biBtYXkgd2FsayB0aGUgZnVsbCB4c2sgYXJyYXksIGluY2x1ZGluZyBzbG90cyB0aGF0IG5ldmVyIGNvbXBsZXRlZCBzZXR1cCBidXRcXG4rXFx0ICogc3RpbGwgY2FycnkgYSBwcmVpbml0aWFsaXplZCB1bWVtIHBvaW50ZXIuIEFmdGVyIGEgcGFydGlhbC1zZXR1cCByb2xsYmFjaywgdGhlIGxhc3QgVU1FTVxcbitcXHQgKiByZWYgbWF5IGFscmVhZHkgYmUgZHJvcHBlZC5cXG4rXFx0ICovXFxuK1xcdGlmICghcmVmY291bnRfcmVhZChcXHUwMDI2dW1lbS1cXHUwMDNldXNlcnMpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHQvKiBBbHdheXMgZGVjcmVtZW50IHJlZmNvdW50IGZvciB0aGlzIHNvY2tldCdzIFVNRU0gcmVmZXJlbmNlICovXFxuK1xcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNnVtZW0tXFx1MDAzZXVzZXJzKSkge1xcbitcXHRcXHRpZiAodW1lbS1cXHUwMDNldW1lbSkge1xcbitcXHRcXHRcXHRpbnQgZXJyID0geHNrX3VtZW1fX2RlbGV0ZSh1bWVtLVxcdTAwM2V1bWVtKTtcXG4rXFxuK1xcdFxcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJ4c2tfdW1lbV9fZGVsZXRlIGZhaWxlZDogJWQgKHVtZW0gc3RpbGwgYnVzeT8pXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgZXJyKTtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAodW1lbS1cXHUwMDNlYnVmZmVyIFxcdTAwMjZcXHUwMDI2IHVtZW0tXFx1MDAzZW1tYXBfc2l6ZSlcXG4rXFx0XFx0XFx0bXVubWFwKHVtZW0tXFx1MDAzZWJ1ZmZlciwgdW1lbS1cXHUwMDNlbW1hcF9zaXplKTtcXG4rXFx0XFx0dW1lbS1cXHUwMDNldW1lbSA9IE5VTEw7XFxuK1xcdFxcdHVtZW0tXFx1MDAzZWJ1ZmZlciA9IE5VTEw7XFxuK1xcdFxcdHVtZW0tXFx1MDAzZW1tYXBfc2l6ZSA9IDA7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgeHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqKVxcbit7XFxuK1xcdGlmICghaWZvYmopXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHhza19kZWxldGVfc29ja2V0X2JhdGNoKGlmb2JqLCB0ZXN0LVxcdTAwM2VuYl9zb2NrZXRzKTtcXG4gfVxcbiBcXG4gc3RhdGljIGJvb2wgeGRwX3Byb2dfY2hhbmdlZF9yeChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxcbkBAIC0xNzY5LDI3ICsxOTYyLDYgQEAgc3RhdGljIGludCB4c2tfYXR0YWNoX3hkcF9wcm9ncyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqX3JcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgY2xlYW5fc29ja2V0cyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqKVxcbi17XFxuLVxcdHUzMiBpO1xcbi1cXG4tXFx0aWYgKCFpZm9iaiB8fCAhdGVzdClcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRlc3QtXFx1MDAzZW5iX3NvY2tldHM7IGkrKylcXG4tXFx0XFx0eHNrX3NvY2tldF9fZGVsZXRlKGlmb2JqLVxcdTAwM2V4c2tfYXJyW2ldLnhzayk7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIGNsZWFuX3VtZW0oc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iajEsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmoyKVxcbi17XFxuLVxcdGlmICghaWZvYmoxKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbi1cXHR0ZXN0YXBwX2NsZWFuX3hza191bWVtKGlmb2JqMSk7XFxuLVxcdGlmIChpZm9iajIgXFx1MDAyNlxcdTAwMjYgIWlmb2JqMi1cXHUwMDNlc2hhcmVkX3VtZW0pXFxuLVxcdFxcdHRlc3RhcHBfY2xlYW5feHNrX3VtZW0oaWZvYmoyKTtcXG4tfVxcbi1cXG4gc3RhdGljIGludCBfX3Rlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqMSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGlmb2JqZWN0ICppZm9iajIpXFxuIHtcXG5AQCAtMTg0MSw4ICsyMDEzLDcgQEAgc3RhdGljIGludCBfX3Rlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlcXG4gXFx0XFx0aWYgKHB0aHJlYWRfYmFycmllcl9kZXN0cm95KFxcdTAwMjZiYXJyKSkge1xcbiBcXHRcXHRcXHR0ZXN0LVxcdTAwM2V1c2VfYmFycmllciA9IGZhbHNlO1xcbiBcXHRcXHRcXHRwdGhyZWFkX2pvaW4odDAsIE5VTEwpO1xcbi1cXHRcXHRcXHRjbGVhbl9zb2NrZXRzKHRlc3QsIGlmb2JqMSk7XFxuLVxcdFxcdFxcdGNsZWFuX3VtZW0odGVzdCwgaWZvYmoxLCBOVUxMKTtcXG4rXFx0XFx0XFx0eHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCBpZm9iajEpO1xcbiBcXHRcXHRcXHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG5AQCAtMTg1Niw5ICsyMDI3LDggQEAgc3RhdGljIGludCBfX3Rlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlcXG4gXFx0cHRocmVhZF9qb2luKHQwLCBOVUxMKTtcXG4gXFxuIFxcdGlmICh0ZXN0LVxcdTAwM2V0b3RhbF9zdGVwcyA9PSB0ZXN0LVxcdTAwM2VjdXJyZW50X3N0ZXAgfHwgdGVzdC1cXHUwMDNlZmFpbCkge1xcbi1cXHRcXHRjbGVhbl9zb2NrZXRzKHRlc3QsIGlmb2JqMSk7XFxuLVxcdFxcdGNsZWFuX3NvY2tldHModGVzdCwgaWZvYmoyKTtcXG4tXFx0XFx0Y2xlYW5fdW1lbSh0ZXN0LCBpZm9iajEsIGlmb2JqMik7XFxuK1xcdFxcdHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgaWZvYmoyKTtcXG4rXFx0XFx0eHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCBpZm9iajEpO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAodGVzdC1cXHUwMDNlZmFpbClcXG5AQCAtMTk2Nyw5ICsyMTM3LDggQEAgaW50IHRlc3RhcHBfeGRwX3Byb2dfY2xlYW51cChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxcbiBcXHRcXHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xcbiBcXG4gXFx0aWYgKHN3YXBfeHNrX3Jlc291cmNlcyh0ZXN0KSkge1xcbi1cXHRcXHRjbGVhbl9zb2NrZXRzKHRlc3QsIHRlc3QtXFx1MDAzZWlmb2JqX3J4KTtcXG4tXFx0XFx0Y2xlYW5fc29ja2V0cyh0ZXN0LCB0ZXN0LVxcdTAwM2VpZm9ial90eCk7XFxuLVxcdFxcdGNsZWFuX3VtZW0odGVzdCwgdGVzdC1cXHUwMDNlaWZvYmpfcngsIHRlc3QtXFx1MDAzZWlmb2JqX3R4KTtcXG4rXFx0XFx0eHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCB0ZXN0LVxcdTAwM2VpZm9ial90eCk7XFxuK1xcdFxcdHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgdGVzdC1cXHUwMDNlaWZvYmpfcngpO1xcbiBcXHRcXHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xcbiBcXHR9XFxuIFxcbkBAIC0yMjI0LDYgKzIzOTMsMTY4IEBAIGludCB0ZXN0YXBwX3hkcF9zaGFyZWRfdW1lbShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHNoYXJlZF91bWVtX3Rlc3RfcHJlcGFyZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxcbit7XFxuK1xcdHUzMiBpO1xcbitcXG4rXFx0aWYgKHRlc3QtXFx1MDAzZW5iX3NvY2tldHMgXFx1MDAzZSBNQVhfU09DS0VUUykge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiRVJST1I6IFslc10gaW52YWxpZCBzb2NrZXQgY291bnQgJXVcXFxcblxcXCIsIF9fZnVuY19fLCB0ZXN0LVxcdTAwM2VuYl9zb2NrZXRzKTtcXG4rXFx0XFx0cmV0dXJuIFRFU1RfRkFJTFVSRTtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRlc3QtXFx1MDAzZW5iX3NvY2tldHM7IGkrKykge1xcbitcXHRcXHRpZiAoIXRlc3QtXFx1MDAzZWlmb2JqX3J4LVxcdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gfHxcXG4rXFx0XFx0ICAgICF0ZXN0LVxcdTAwM2VpZm9ial90eC1cXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtKSB7XFxuK1xcdFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJFUlJPUjogWyVzXSBtaXNzaW5nIHN0cmVhbSBmb3Igc29ja2V0ICV1XFxcXG5cXFwiLCBfX2Z1bmNfXywgaSk7XFxuK1xcdFxcdFxcdHJldHVybiBURVNUX0ZBSUxVUkU7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIFRFU1RfUEFTUztcXG4rfVxcbitcXG4rc3RhdGljIGludCBzaGFyZWRfdW1lbV9zZXFfZXZlbl9vZGQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgY29uc3Qgdm9pZCAqY3R4KVxcbit7XFxuK1xcdCh2b2lkKWN0eDtcXG4rXFxuK1xcdHJldHVybiBwa3Rfc3RyZWFtX2V2ZW5fb2RkX3NlcXVlbmNlKHRlc3QpID8gVEVTVF9GQUlMVVJFIDogVEVTVF9QQVNTO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHNoYXJlZF91bWVtX3NlcV9sZW4oc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgY29uc3Qgdm9pZCAqY3R4KVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBzaGFyZWRfdW1lbV9sZW5fY3R4ICpjZmcgPSBjdHg7XFxuK1xcbitcXHRyZXR1cm4gcGt0X3N0cmVhbV9sZW5fc2VxKHRlc3QsIGNmZy1cXHUwMDNlc2hvcnRfbGVuLCBjZmctXFx1MDAzZWxvbmdfbGVuKSA/IFRFU1RfRkFJTFVSRSA6IFRFU1RfUEFTUztcXG4rfVxcbitcXG4rc3RhdGljIGludCBzaGFyZWRfdW1lbV9zZXFfdW5ldmVuX2Rpc3Qoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgY29uc3Qgdm9pZCAqY3R4KVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBzaGFyZWRfdW1lbV91bmV2ZW5fZGlzdF9jdHggKmNmZyA9IGN0eDtcXG4rXFxuK1xcdHJldHVybiBwa3Rfc3RyZWFtX3dlaWdodGVkX3VuZXZlbl9kaXN0X3NlcXVlbmNlKHRlc3QsIGNmZy1cXHUwMDNldG90YWxfcGt0cyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgY2ZnLVxcdTAwM2Vwa3RfbGVuKSA/IFRFU1RfRkFJTFVSRSA6IFRFU1RfUEFTUztcXG4rfVxcbitcXG4rc3RhdGljIGludCBzaGFyZWRfdW1lbV9wb3N0X3VuZXZlbl9kaXN0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIGludCByZXQsIGNvbnN0IHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgcGt0X3N0cmVhbSAqdHhfc3RyZWFtXzAsICp0eF9zdHJlYW1fMTtcXG4rXFx0c3RydWN0IHBrdF9zdHJlYW0gKnJ4X3N0cmVhbV8wLCAqcnhfc3RyZWFtXzE7XFxuK1xcbitcXHQodm9pZCljdHg7XFxuK1xcbitcXHR0eF9zdHJlYW1fMCA9IHRlc3QtXFx1MDAzZWlmb2JqX3R4LVxcdTAwM2V4c2tfYXJyWzBdLnBrdF9zdHJlYW07XFxuK1xcdHR4X3N0cmVhbV8xID0gdGVzdC1cXHUwMDNlaWZvYmpfdHgtXFx1MDAzZXhza19hcnJbMV0ucGt0X3N0cmVhbTtcXG4rXFx0cnhfc3RyZWFtXzAgPSB0ZXN0LVxcdTAwM2VpZm9ial9yeC1cXHUwMDNleHNrX2FyclswXS5wa3Rfc3RyZWFtO1xcbitcXHRyeF9zdHJlYW1fMSA9IHRlc3QtXFx1MDAzZWlmb2JqX3J4LVxcdTAwM2V4c2tfYXJyWzFdLnBrdF9zdHJlYW07XFxuK1xcbitcXHRpZiAodHhfc3RyZWFtXzEtXFx1MDAzZW5iX3ZhbGlkX2VudHJpZXMgXFx1MDAzYz0gdHhfc3RyZWFtXzAtXFx1MDAzZW5iX3ZhbGlkX2VudHJpZXMpXFxuK1xcdFxcdHJldHVybiBURVNUX0ZBSUxVUkU7XFxuK1xcbitcXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiByeF9zdHJlYW1fMS1cXHUwMDNlbmJfcnhfcGt0cyBcXHUwMDNjPSByeF9zdHJlYW1fMC1cXHUwMDNlbmJfcnhfcGt0cykge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiRVJST1I6IHNvY2tldDEgcnhfcGt0cyAoJXUpIG5vdCBncmVhdGVyIHRoYW4gc29ja2V0MCAoJXUpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICAgcnhfc3RyZWFtXzEtXFx1MDAzZW5iX3J4X3BrdHMsIHJ4X3N0cmVhbV8wLVxcdTAwM2VuYl9yeF9wa3RzKTtcXG4rXFx0XFx0cmV0ID0gVEVTVF9GQUlMVVJFO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ1bl9zaGFyZWRfdW1lbV90ZXN0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBicGZfcHJvZ3JhbSAqeGRwX3Byb2dfcngsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBicGZfcHJvZ3JhbSAqeGRwX3Byb2dfdHgsIHN0cnVjdCBicGZfbWFwICp4c2ttYXBfcngsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBicGZfbWFwICp4c2ttYXBfdHgsIHUzMiBuYl9zb2NrZXRzLFxcbitcXHRcXHRcXHRcXHRzaGFyZWRfdW1lbV9zZXFfZm4gc2VxX2ZuLCBzaGFyZWRfdW1lbV9wb3N0X2ZuIHBvc3RfZm4sXFxuK1xcdFxcdFxcdFxcdGNvbnN0IHZvaWQgKmN0eClcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0dGVzdC1cXHUwMDNldG90YWxfc3RlcHMgPSAxO1xcbitcXHR0ZXN0LVxcdTAwM2VuYl9zb2NrZXRzID0gbmJfc29ja2V0cztcXG4rXFxuK1xcdHRlc3Rfc3BlY19zZXRfeGRwX3Byb2codGVzdCwgeGRwX3Byb2dfcngsIHhkcF9wcm9nX3R4LCB4c2ttYXBfcngsIHhza21hcF90eCk7XFxuK1xcbitcXHRyZXQgPSBzaGFyZWRfdW1lbV90ZXN0X3ByZXBhcmUodGVzdCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBzZXFfZm4odGVzdCwgY3R4KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IHRlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyh0ZXN0KTtcXG4rXFx0aWYgKHBvc3RfZm4pXFxuK1xcdFxcdHJldCA9IHBvc3RfZm4odGVzdCwgcmV0LCBjdHgpO1xcbitcXG4rXFx0cmVsZWFzZV9ldmVuX29kZF9zZXF1ZW5jZSh0ZXN0KTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtXzRfc29ja2V0cyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxcbit7XFxuK1xcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3J4ID0gdGVzdC1cXHUwMDNlaWZvYmpfcngtXFx1MDAzZXhkcF9wcm9ncztcXG4rXFx0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfdHggPSB0ZXN0LVxcdTAwM2VpZm9ial90eC1cXHUwMDNleGRwX3Byb2dzO1xcbitcXG4rXFx0cmV0dXJuIHJ1bl9zaGFyZWRfdW1lbV90ZXN0KHRlc3QsIHNrZWxfcngtXFx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sXFxuK1xcdFxcdFxcdFxcdCAgICBza2VsX3R4LVxcdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLCBza2VsX3J4LVxcdTAwM2VtYXBzLnhzayxcXG4rXFx0XFx0XFx0XFx0ICAgIHNrZWxfdHgtXFx1MDAzZW1hcHMueHNrLCA0LCBzaGFyZWRfdW1lbV9zZXFfZXZlbl9vZGQsIE5VTEwsIE5VTEwpO1xcbit9XFxuK1xcbitpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcXG4re1xcbitcXHRzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF9yeCA9IHRlc3QtXFx1MDAzZWlmb2JqX3J4LVxcdTAwM2V4ZHBfcHJvZ3M7XFxuK1xcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3R4ID0gdGVzdC1cXHUwMDNlaWZvYmpfdHgtXFx1MDAzZXhkcF9wcm9ncztcXG4rXFx0Y29uc3Qgc3RydWN0IHNoYXJlZF91bWVtX2xlbl9jdHggbGVuX2N0eCA9IHtcXG4rXFx0XFx0LnNob3J0X2xlbiA9IE1JTl9QS1RfU0laRSxcXG4rXFx0XFx0LmxvbmdfbGVuID0gTUlOX1BLVF9TSVpFICogMixcXG4rXFx0fTtcXG4rXFxuK1xcdHJldHVybiBydW5fc2hhcmVkX3VtZW1fdGVzdCh0ZXN0LCBza2VsX3J4LVxcdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtX2xlbmd0aF9iYXNlZCxcXG4rXFx0XFx0XFx0XFx0ICAgIHNrZWxfdHgtXFx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkLFxcbitcXHRcXHRcXHRcXHQgICAgc2tlbF9yeC1cXHUwMDNlbWFwcy54c2ssIHNrZWxfdHgtXFx1MDAzZW1hcHMueHNrLCAyLCBzaGFyZWRfdW1lbV9zZXFfbGVuLFxcbitcXHRcXHRcXHRcXHQgICAgTlVMTCwgXFx1MDAyNmxlbl9jdHgpO1xcbit9XFxuK1xcbitpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV91bmV2ZW5fZGlzdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxcbit7XFxuK1xcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3J4ID0gdGVzdC1cXHUwMDNlaWZvYmpfcngtXFx1MDAzZXhkcF9wcm9ncztcXG4rXFx0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfdHggPSB0ZXN0LVxcdTAwM2VpZm9ial90eC1cXHUwMDNleGRwX3Byb2dzO1xcbitcXHRjb25zdCBzdHJ1Y3Qgc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3RfY3R4IHVuZXZlbl9kaXN0X2N0eCA9IHtcXG4rXFx0XFx0LnRvdGFsX3BrdHMgPSBERUZBVUxUX1BLVF9DTlQgKiA0LFxcbitcXHRcXHQucGt0X2xlbiA9IE1JTl9QS1RfU0laRSxcXG4rXFx0fTtcXG4rXFxuK1xcdHJldHVybiBydW5fc2hhcmVkX3VtZW1fdGVzdCh0ZXN0LCBza2VsX3J4LVxcdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLFxcbitcXHRcXHRcXHRcXHQgICAgc2tlbF90eC1cXHUwMDNlcHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSwgc2tlbF9yeC1cXHUwMDNlbWFwcy54c2ssXFxuK1xcdFxcdFxcdFxcdCAgICBza2VsX3R4LVxcdTAwM2VtYXBzLnhzaywgMiwgc2hhcmVkX3VtZW1fc2VxX3VuZXZlbl9kaXN0LFxcbitcXHRcXHRcXHRcXHQgICAgc2hhcmVkX3VtZW1fcG9zdF91bmV2ZW5fZGlzdCwgXFx1MDAyNnVuZXZlbl9kaXN0X2N0eCk7XFxuK31cXG4rXFxuK2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX3VuYWxpZ25lZChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxcbit7XFxuK1xcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3J4ID0gdGVzdC1cXHUwMDNlaWZvYmpfcngtXFx1MDAzZXhkcF9wcm9ncztcXG4rXFx0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfdHggPSB0ZXN0LVxcdTAwM2VpZm9ial90eC1cXHUwMDNleGRwX3Byb2dzO1xcbitcXHRzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdHhfdW1lbSA9IHRlc3QtXFx1MDAzZWlmb2JqX3R4IFxcdTAwMjZcXHUwMDI2IHRlc3QtXFx1MDAzZWlmb2JqX3R4LVxcdTAwM2V4c2sgP1xcbitcXHRcXHR0ZXN0LVxcdTAwM2VpZm9ial90eC1cXHUwMDNleHNrLVxcdTAwM2V1bWVtIDogTlVMTDtcXG4rXFx0c3RydWN0IHhza191bWVtX2luZm8gKnJ4X3VtZW0gPSB0ZXN0LVxcdTAwM2VpZm9ial9yeCBcXHUwMDI2XFx1MDAyNiB0ZXN0LVxcdTAwM2VpZm9ial9yeC1cXHUwMDNleHNrID9cXG4rXFx0XFx0dGVzdC1cXHUwMDNlaWZvYmpfcngtXFx1MDAzZXhzay1cXHUwMDNldW1lbSA6IE5VTEw7XFxuK1xcdGJvb2wgdHhfdW5hbGlnbmVkID0gdHhfdW1lbSA/IHR4X3VtZW0tXFx1MDAzZXVuYWxpZ25lZF9tb2RlIDogZmFsc2U7XFxuK1xcdGJvb2wgcnhfdW5hbGlnbmVkID0gcnhfdW1lbSA/IHJ4X3VtZW0tXFx1MDAzZXVuYWxpZ25lZF9tb2RlIDogZmFsc2U7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHR0ZXN0X3NwZWNfc2V0X3VuYWxpZ25lZCh0ZXN0KTtcXG4rXFxuK1xcdHJldCA9IHJ1bl9zaGFyZWRfdW1lbV90ZXN0KHRlc3QsIHNrZWxfcngtXFx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sXFxuK1xcdFxcdFxcdFxcdCAgIHNrZWxfdHgtXFx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sIHNrZWxfcngtXFx1MDAzZW1hcHMueHNrLFxcbitcXHRcXHRcXHRcXHQgICBza2VsX3R4LVxcdTAwM2VtYXBzLnhzaywgMiwgc2hhcmVkX3VtZW1fc2VxX2V2ZW5fb2RkLCBOVUxMLCBOVUxMKTtcXG4rXFxuK1xcdGlmICh0eF91bWVtKVxcbitcXHRcXHR0eF91bWVtLVxcdTAwM2V1bmFsaWduZWRfbW9kZSA9IHR4X3VuYWxpZ25lZDtcXG4rXFx0aWYgKHJ4X3VtZW0pXFxuK1xcdFxcdHJ4X3VtZW0tXFx1MDAzZXVuYWxpZ25lZF9tb2RlID0gcnhfdW5hbGlnbmVkO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gaW50IHRlc3RhcHBfcG9sbF90eHFfdG1vdXQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcXG4ge1xcbiBcXHRib29sIHNoYXJlZF91bWVtID0gdGVzdC1cXHUwMDNlaWZvYmpfdHgtXFx1MDAzZXNoYXJlZF91bWVtO1xcbkBAIC0yNDk4LDkgKzI4MjksOCBAQCBpbnQgdGVzdGFwcF9od19zd19tYXhfcmluZ19zaXplKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXFxuIFxcdHRlc3QtXFx1MDAzZWlmb2JqX3R4LVxcdTAwM2V4c2stXFx1MDAzZWJhdGNoX3NpemUgPSB0ZXN0LVxcdTAwM2VpZm9ial90eC1cXHUwMDNlcmluZy50eF9tYXhfcGVuZGluZyAtIDg7XFxuIFxcdHRlc3QtXFx1MDAzZWlmb2JqX3J4LVxcdTAwM2V4c2stXFx1MDAzZWJhdGNoX3NpemUgPSB0ZXN0LVxcdTAwM2VpZm9ial90eC1cXHUwMDNlcmluZy50eF9tYXhfcGVuZGluZyAtIDg7XFxuIFxcdGlmIChwa3Rfc3RyZWFtX3JlcGxhY2UodGVzdCwgbWF4X2Rlc2NzLCBNSU5fUEtUX1NJWkUpKSB7XFxuLVxcdFxcdGNsZWFuX3NvY2tldHModGVzdCwgdGVzdC1cXHUwMDNlaWZvYmpfdHgpO1xcbi1cXHRcXHRjbGVhbl9zb2NrZXRzKHRlc3QsIHRlc3QtXFx1MDAzZWlmb2JqX3J4KTtcXG4tXFx0XFx0Y2xlYW5fdW1lbSh0ZXN0LCB0ZXN0LVxcdTAwM2VpZm9ial9yeCwgdGVzdC1cXHUwMDNlaWZvYmpfdHgpO1xcbitcXHRcXHR4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIHRlc3QtXFx1MDAzZWlmb2JqX3R4KTtcXG4rXFx0XFx0eHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyh0ZXN0LCB0ZXN0LVxcdTAwM2VpZm9ial9yeCk7XFxuIFxcdFxcdHJldHVybiBURVNUX0ZBSUxVUkU7XFxuIFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5oXFxuaW5kZXggMDM3NTNkZGM1ZGNkYS4uZWY5YzQyMmQ3NzYzZSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suaFxcbkBAIC00LDYgKzQsNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V0aHRvb2wuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX3hkcC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcmVmY291bnQuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCIuLi9rc2VsZnRlc3QuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInhzay5oXFxcIlxcbkBAIC03OSw2ICs4MCw5IEBAIHN0cnVjdCB0ZXN0X3NwZWM7XFxuIHR5cGVkZWYgaW50ICgqdmFsaWRhdGlvbl9mdW5jX3QpKHN0cnVjdCBpZm9iamVjdCAqaWZvYmopO1xcbiB0eXBlZGVmIHZvaWQgKigqdGhyZWFkX2Z1bmNfdCkodm9pZCAqYXJnKTtcXG4gdHlwZWRlZiBpbnQgKCp0ZXN0X2Z1bmNfdCkoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XFxuK3R5cGVkZWYgaW50ICgqc2hhcmVkX3VtZW1fc2VxX2ZuKShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCB2b2lkICpjdHgpO1xcbit0eXBlZGVmIGludCAoKnNoYXJlZF91bWVtX3Bvc3RfZm4pKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIGludCByZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHZvaWQgKmN0eCk7XFxuIFxcbiBzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvIHtcXG4gXFx0c3RydWN0IHhza19yaW5nX2NvbnMgcng7XFxuQEAgLTEwNCw2ICsxMDgsNyBAQCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyB7XFxuIFxcdHN0cnVjdCB4c2tfdW1lbSAqdW1lbTtcXG4gXFx0dTY0IG5leHRfYnVmZmVyO1xcbiBcXHR1NjQgbW1hcF9zaXplO1xcbitcXHRyZWZjb3VudF90IHVzZXJzO1xcbiBcXHR1MzIgbnVtX2ZyYW1lcztcXG4gXFx0dTMyIGZyYW1lX2hlYWRyb29tO1xcbiBcXHR2b2lkICpidWZmZXI7XFxuQEAgLTE1OSw2ICsxNjQsNyBAQCBpbnQgaW5pdF9pZmFjZShzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqLCB0aHJlYWRfZnVuY190IGZ1bmNfcHRyKTtcXG4gaW50IHhza19jb25maWd1cmVfdW1lbShzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqLCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbSwgdm9pZCAqYnVmZmVyLCB1NjQgc2l6ZSk7XFxuIGludCB4c2tfY29uZmlndXJlX3NvY2tldChzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2ssIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtLFxcbiBcXHRcXHRcXHQgc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdCwgYm9vbCBzaGFyZWQpO1xcbit2b2lkIHhza19kZWxldGVfc29ja2V0KHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzayk7XFxuIFxcbiBcXG4gc3RydWN0IHBrdCB7XFxuQEAgLTE3OSw2ICsxODUsMTYgQEAgc3RydWN0IHBrdF9zdHJlYW0ge1xcbiBcXHRib29sIHZlcmJhdGltO1xcbiB9O1xcbiBcXG4rc3RydWN0IHNoYXJlZF91bWVtX2xlbl9jdHgge1xcbitcXHR1MzIgc2hvcnRfbGVuO1xcbitcXHR1MzIgbG9uZ19sZW47XFxuK307XFxuK1xcbitzdHJ1Y3Qgc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3RfY3R4IHtcXG4rXFx0dTMyIHRvdGFsX3BrdHM7XFxuK1xcdHUzMiBwa3RfbGVuO1xcbit9O1xcbitcXG4gc3RhdGljIGlubGluZSBib29sIHBrdF9jb250aW51ZXModTMyIG9wdGlvbnMpXFxuIHtcXG4gXFx0cmV0dXJuIG9wdGlvbnMgXFx1MDAyNiBYRFBfUEtUX0NPTlREO1xcbkBAIC0yNjgsNiArMjg0LDEwIEBAIGludCB0ZXN0YXBwX3hkcF9tZXRhZGF0YShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTtcXG4gaW50IHRlc3RhcHBfeGRwX21ldGFkYXRhX21iKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xcbiBpbnQgdGVzdGFwcF94ZHBfcHJvZ19jbGVhbnVwKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xcbiBpbnQgdGVzdGFwcF94ZHBfc2hhcmVkX3VtZW0oc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XFxuK2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtXzRfc29ja2V0cyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTtcXG4raW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xcbitpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV91bmV2ZW5fZGlzdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTtcXG4raW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5hbGlnbmVkKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xcbiBcXG4gdm9pZCAqd29ya2VyX3Rlc3RhcHBfdmFsaWRhdGVfcngodm9pZCAqYXJnKTtcXG4gdm9pZCAqd29ya2VyX3Rlc3RhcHBfdmFsaWRhdGVfdHgodm9pZCAqYXJnKTtcXG5AQCAtMjkxLDYgKzMxMSwxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHRlc3Rfc3BlYyB0ZXN0c1tdID0ge1xcbiBcXHR7Lm5hbWUgPSBcXFwiWERQX1BST0dfQ0xFQU5VUFxcXCIsIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3hkcF9wcm9nX2NsZWFudXB9LFxcbiBcXHR7Lm5hbWUgPSBcXFwiWERQX0RST1BfSEFMRlxcXCIsIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3hkcF9kcm9wfSxcXG4gXFx0ey5uYW1lID0gXFxcIlhEUF9TSEFSRURfVU1FTVxcXCIsIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3hkcF9zaGFyZWRfdW1lbX0sXFxuK1xcdHsubmFtZSA9IFxcXCJTSEFSRURfVU1FTV80X1NPQ0tFVFNcXFwiLCAudGVzdF9mdW5jID0gdGVzdGFwcF9zaGFyZWRfdW1lbV80X3NvY2tldHN9LFxcbitcXHR7Lm5hbWUgPSBcXFwiU0hBUkVEX1VNRU1fTEVOR1RIX0JBU0VEXFxcIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkfSxcXG4rXFx0ey5uYW1lID0gXFxcIlNIQVJFRF9VTUVNX1VORVZFTl9ESVNUXFxcIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3R9LFxcbitcXHR7Lm5hbWUgPSBcXFwiU0hBUkVEX1VNRU1fVU5BTElHTkVEXFxcIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5hbGlnbmVkfSxcXG4gXFx0ey5uYW1lID0gXFxcIlhEUF9NRVRBREFUQV9DT1BZXFxcIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfeGRwX21ldGFkYXRhfSxcXG4gXFx0ey5uYW1lID0gXFxcIlhEUF9NRVRBREFUQV9DT1BZX01VTFRJX0JVRkZcXFwiLCAudGVzdF9mdW5jID0gdGVzdGFwcF94ZHBfbWV0YWRhdGFfbWJ9LFxcbiBcXHR7Lm5hbWUgPSBcXFwiQUxJR05FRF9JTlZfREVTQ19NVUxUSV9CVUZGXFxcIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfYWxpZ25lZF9pbnZfZGVzY19tYn0sXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94c2tfeGRwX3Byb2dzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveHNrX3hkcF9wcm9ncy5jXFxuaW5kZXggMDIzZDhiZWZkNGNhYi4uNTQzYjYxZGYzYTJiMSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveHNrX3hkcF9wcm9ncy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hza194ZHBfcHJvZ3MuY1xcbkBAIC0xMCw3ICsxMCw3IEBAXFxuIFxcbiBzdHJ1Y3Qge1xcbiBcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1hTS01BUCk7XFxuLVxcdF9fdWludChtYXhfZW50cmllcywgMik7XFxuK1xcdF9fdWludChtYXhfZW50cmllcywgTUFYX1NPQ0tFVFMpO1xcbiBcXHRfX3VpbnQoa2V5X3NpemUsIHNpemVvZihpbnQpKTtcXG4gXFx0X191aW50KHZhbHVlX3NpemUsIHNpemVvZihpbnQpKTtcXG4gfSB4c2sgU0VDKFxcXCIubWFwc1xcXCIpO1xcbkBAIC03NSw2ICs3NSwyMyBAQCBTRUMoXFxcInhkcFxcXCIpIGludCB4c2tfeGRwX3NoYXJlZF91bWVtKHN0cnVjdCB4ZHBfbWQgKnhkcClcXG4gXFx0cmV0dXJuIGJwZl9yZWRpcmVjdF9tYXAoXFx1MDAyNnhzaywgaWR4LCBYRFBfRFJPUCk7XFxuIH1cXG4gXFxuK1NFQyhcXFwieGRwXFxcIikgaW50IHhza194ZHBfc2hhcmVkX3VtZW1fbGVuZ3RoX2Jhc2VkKHN0cnVjdCB4ZHBfbWQgKnhkcClcXG4re1xcbitcXHR2b2lkICpkYXRhID0gKHZvaWQgKikobG9uZyl4ZHAtXFx1MDAzZWRhdGE7XFxuK1xcdHZvaWQgKmRhdGFfZW5kID0gKHZvaWQgKikobG9uZyl4ZHAtXFx1MDAzZWRhdGFfZW5kO1xcbitcXHRfX3UzMiBwa3RfbGVuID0gZGF0YV9lbmQgLSBkYXRhO1xcbitcXG4rXFx0LyogXFxuK1xcdCAqIFJvdXRlIHBhY2tldHMgYnkgdG90YWwgWERQLXZpc2libGUgcGFja2V0IGxlbmd0aCAoZGF0YV9lbmQgLSBkYXRhKTpcXG4rXFx0ICogLSBTb2NrZXQgMDogcGFja2V0cyBcXHUwMDNjPSBTSEFSRURfVU1FTV9MRU5fU1BMSVQgYnl0ZXNcXG4rXFx0ICogLSBTb2NrZXQgMTogcGFja2V0cyBcXHUwMDNlIFNIQVJFRF9VTUVNX0xFTl9TUExJVCBieXRlc1xcbitcXHQgKi9cXG4rXFx0aWYgKHBrdF9sZW4gXFx1MDAzYz0gU0hBUkVEX1VNRU1fTEVOX1NQTElUKVxcbitcXHRcXHRyZXR1cm4gYnBmX3JlZGlyZWN0X21hcChcXHUwMDI2eHNrLCAwLCBYRFBfRFJPUCk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cmV0dXJuIGJwZl9yZWRpcmVjdF9tYXAoXFx1MDAyNnhzaywgMSwgWERQX0RST1ApO1xcbit9XFxuK1xcbiBTRUMoXFxcInhkcC5mcmFnc1xcXCIpIGludCB4c2tfeGRwX2FkanVzdF90YWlsKHN0cnVjdCB4ZHBfbWQgKnhkcClcXG4ge1xcbiBcXHRfX3UzMiBidWZmX2xlbiwgY3Vycl9idWZmX2xlbjtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza194ZHBfY29tbW9uLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNrX3hkcF9jb21tb24uaFxcbmluZGV4IDQ1ODEwZmY1NTJkYWUuLmJkOWI1ZGNmOGM4ZWUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza194ZHBfY29tbW9uLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNrX3hkcF9jb21tb24uaFxcbkBAIC0zLDcgKzMsOCBAQFxcbiAjaWZuZGVmIFhTS19YRFBfQ09NTU9OX0hfXFxuICNkZWZpbmUgWFNLX1hEUF9DT01NT05fSF9cXG4gXFxuLSNkZWZpbmUgTUFYX1NPQ0tFVFMgMlxcbisjZGVmaW5lIE1BWF9TT0NLRVRTIDRcXG4rI2RlZmluZSBTSEFSRURfVU1FTV9MRU5fU1BMSVQgNjRcXG4gI2RlZmluZSBQS1RfSERSX0FMSUdOIChzaXplb2Yoc3RydWN0IGV0aGhkcikgKyAyKSAvKiBKdXN0IHRvIGFsaWduIHRoZSBkYXRhIGluIHRoZSBwYWNrZXQgKi9cXG4gXFxuIHN0cnVjdCB4ZHBfaW5mbyB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2t4Y2VpdmVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNreGNlaXZlci5jXFxuaW5kZXggN2RhZDg1NTZhNzIyZS4uZWQ3NzE2YjYzNzU2NyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNreGNlaXZlci5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza3hjZWl2ZXIuY1xcbkBAIC0xMTcsMTIgKzExNywxMyBAQCBzdGF0aWMgdm9pZCBfX2V4aXRfd2l0aF9lcnJvcihpbnQgZXJyb3IsIGNvbnN0IGNoYXIgKmZpbGUsIGNvbnN0IGNoYXIgKmZ1bmMsIGludFxcbiBcXG4gI2RlZmluZSBleGl0X3dpdGhfZXJyb3IoZXJyb3IpIF9fZXhpdF93aXRoX2Vycm9yKGVycm9yLCBfX0ZJTEVfXywgX19mdW5jX18sIF9fTElORV9fKVxcbiBcXG4tc3RhdGljIGJvb2wgaWZvYmpfemNfYXZhaWwoc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdClcXG4rc3RhdGljIGJvb2wgaWZvYmpfemNfYXZhaWwoc3RydWN0IGlmb2JqZWN0ICppZm9iailcXG4ge1xcbiBcXHRzaXplX3QgdW1lbV9zeiA9IERFRkFVTFRfVU1FTV9CVUZGRVJTICogWFNLX1VNRU1fX0RFRkFVTFRfRlJBTUVfU0laRTtcXG4gXFx0aW50IG1tYXBfZmxhZ3MgPSBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMgfCBNQVBfTk9SRVNFUlZFO1xcbi1cXHRzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2s7XFxuLVxcdHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtO1xcbitcXHRzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvIHhzayA9IHt9O1xcbitcXHRzdHJ1Y3QgeHNrX3VtZW1faW5mbyB1bWVtX2luZm8gPSB7fTtcXG4rXFx0c3RydWN0IHhza191bWVtX2luZm8gKnVtZW0gPSBcXHUwMDI2dW1lbV9pbmZvO1xcbiBcXHRib29sIHpjX2F2YWlsID0gZmFsc2U7XFxuIFxcdHZvaWQgKmJ1ZnM7XFxuIFxcdGludCByZXQ7XFxuQEAgLTEzMSwzMiArMTMyLDIyIEBAIHN0YXRpYyBib29sIGlmb2JqX3pjX2F2YWlsKHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QpXFxuIFxcdGlmIChidWZzID09IE1BUF9GQUlMRUQpXFxuIFxcdFxcdGV4aXRfd2l0aF9lcnJvcihlcnJubyk7XFxuIFxcbi1cXHR1bWVtID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgeHNrX3VtZW1faW5mbykpO1xcbi1cXHRpZiAoIXVtZW0pIHtcXG4tXFx0XFx0bXVubWFwKGJ1ZnMsIHVtZW1fc3opO1xcbi1cXHRcXHRleGl0X3dpdGhfZXJyb3IoRU5PTUVNKTtcXG4tXFx0fVxcbitcXHR1bWVtLVxcdTAwM2VtbWFwX3NpemUgPSB1bWVtX3N6O1xcbiBcXHR1bWVtLVxcdTAwM2VmcmFtZV9zaXplID0gWFNLX1VNRU1fX0RFRkFVTFRfRlJBTUVfU0laRTtcXG4tXFx0cmV0ID0geHNrX2NvbmZpZ3VyZV91bWVtKGlmb2JqZWN0LCB1bWVtLCBidWZzLCB1bWVtX3N6KTtcXG4rXFx0cmV0ID0geHNrX2NvbmZpZ3VyZV91bWVtKGlmb2JqLCB1bWVtLCBidWZzLCB1bWVtX3N6KTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0ZXhpdF93aXRoX2Vycm9yKC1yZXQpO1xcbiBcXG4tXFx0eHNrID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvKSk7XFxuLVxcdGlmICgheHNrKVxcbi1cXHRcXHRnb3RvIG91dDtcXG4tXFx0aWZvYmplY3QtXFx1MDAzZWJpbmRfZmxhZ3MgPSBYRFBfVVNFX05FRURfV0FLRVVQIHwgWERQX1pFUk9DT1BZO1xcbi1cXHRpZm9iamVjdC1cXHUwMDNlcnhfb24gPSB0cnVlO1xcbi1cXHR4c2stXFx1MDAzZXJ4cXNpemUgPSBYU0tfUklOR19DT05TX19ERUZBVUxUX05VTV9ERVNDUztcXG4tXFx0cmV0ID0geHNrX2NvbmZpZ3VyZV9zb2NrZXQoeHNrLCB1bWVtLCBpZm9iamVjdCwgZmFsc2UpO1xcbitcXHRpZm9iai1cXHUwMDNlYmluZF9mbGFncyA9IFhEUF9VU0VfTkVFRF9XQUtFVVAgfCBYRFBfWkVST0NPUFk7XFxuK1xcdGlmb2JqLVxcdTAwM2VyeF9vbiA9IHRydWU7XFxuK1xcdHhzay5yeHFzaXplID0gWFNLX1JJTkdfQ09OU19fREVGQVVMVF9OVU1fREVTQ1M7XFxuK1xcdHJldCA9IHhza19jb25maWd1cmVfc29ja2V0KFxcdTAwMjZ4c2ssIHVtZW0sIGlmb2JqLCBmYWxzZSk7XFxuIFxcdGlmICghcmV0KVxcbiBcXHRcXHR6Y19hdmFpbCA9IHRydWU7XFxuIFxcbi1cXHR4c2tfc29ja2V0X19kZWxldGUoeHNrLVxcdTAwM2V4c2spO1xcbi1cXHRmcmVlKHhzayk7XFxuLW91dDpcXG4tXFx0bXVubWFwKHVtZW0tXFx1MDAzZWJ1ZmZlciwgdW1lbV9zeik7XFxuLVxcdHhza191bWVtX19kZWxldGUodW1lbS1cXHUwMDNldW1lbSk7XFxuLVxcdGZyZWUodW1lbSk7XFxuK1xcdC8qIFVzZSB0aGUgc2FtZSByZWZjb3VudC1iYXNlZCB0ZWFyZG93biBwYXRoIGZvciBib3RoIHN1Y2Nlc3MgYW5kIGZhaWx1cmUuICovXFxuK1xcdHhza19kZWxldGVfc29ja2V0KFxcdTAwMjZ4c2spO1xcbitcXG4gXFx0cmV0dXJuIHpjX2F2YWlsO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjo1NzoyOC4xNjQwMzEwNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEzNDM5ODcxODI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEJQRiBzZWxmdGVzdHMgKHVzZXJzcGFjZSB0ZXN0IHByb2dyYW1zIGFuZCB0ZXN0IEJQRiBwcm9ncmFtcykgYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkZjI0Y2IxMWNjMjYxN2ZlMmE2ZjI2MjQ5YzQ0ODdlNjk5MzNmNGFmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAxNjo1NzoyNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5jXG5pbmRleCA0NzdhZWRiYjAxYmFkLi5jY2ZkOWU4NDM2YTdiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY1xuQEAgLTEwMSw2ICsxMDEsNyBAQCBpbnQgeHNrX2NvbmZpZ3VyZV91bWVtKHN0cnVjdCBpZm9iamVjdCAqaWZvYmosIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtLCB2b2lkXG4gXHRcdHJldHVybiByZXQ7XG4gXG4gXHR1bWVtLVx1MDAzZWJ1ZmZlciA9IGJ1ZmZlcjtcbitcdHJlZmNvdW50X3NldChcdTAwMjZ1bWVtLVx1MDAzZXVzZXJzLCAxKTtcbiBcdGlmIChpZm9iai1cdTAwM2VzaGFyZWRfdW1lbSBcdTAwMjZcdTAwMjYgaWZvYmotXHUwMDNlcnhfb24pIHtcbiBcdFx0dW1lbS1cdTAwM2ViYXNlX2FkZHIgPSB1bWVtX3NpemUodW1lbSk7XG4gXHRcdHVtZW0tXHUwMDNlbmV4dF9idWZmZXIgPSB1bWVtX3NpemUodW1lbSk7XG5AQCAtMTU0LDYgKzE1NSw3IEBAIGludCB4c2tfY29uZmlndXJlX3NvY2tldChzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2ssIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtXG4gXHRzdHJ1Y3QgeHNrX3NvY2tldF9jb25maWcgY2ZnID0ge307XG4gXHRzdHJ1Y3QgeHNrX3JpbmdfY29ucyAqcnhyO1xuIFx0c3RydWN0IHhza19yaW5nX3Byb2QgKnR4cjtcbitcdGludCByZXQ7XG4gXG4gXHR4c2stXHUwMDNldW1lbSA9IHVtZW07XG4gXHRjZmcucnhfc2l6ZSA9IHhzay1cdTAwM2VyeHFzaXplO1xuQEAgLTE3MCw3ICsxNzIsMjEgQEAgaW50IHhza19jb25maWd1cmVfc29ja2V0KHN0cnVjdCB4c2tfc29ja2V0X2luZm8gKnhzaywgc3RydWN0IHhza191bWVtX2luZm8gKnVtZW1cbiBcbiBcdHR4ciA9IGlmb2JqZWN0LVx1MDAzZXR4X29uID8gXHUwMDI2eHNrLVx1MDAzZXR4IDogTlVMTDtcbiBcdHJ4ciA9IGlmb2JqZWN0LVx1MDAzZXJ4X29uID8gXHUwMDI2eHNrLVx1MDAzZXJ4IDogTlVMTDtcbi1cdHJldHVybiB4c2tfc29ja2V0X19jcmVhdGUoXHUwMDI2eHNrLVx1MDAzZXhzaywgaWZvYmplY3QtXHUwMDNlaWZpbmRleCwgMCwgdW1lbS1cdTAwM2V1bWVtLCByeHIsIHR4ciwgXHUwMDI2Y2ZnKTtcbitcdHJldCA9IHhza19zb2NrZXRfX2NyZWF0ZShcdTAwMjZ4c2stXHUwMDNleHNrLCBpZm9iamVjdC1cdTAwM2VpZmluZGV4LCAwLCB1bWVtLVx1MDAzZXVtZW0sIHJ4ciwgdHhyLCBcdTAwMjZjZmcpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRpZiAoc2hhcmVkKVxuK1x0XHRcdC8qIFNoYXJlZCBzb2NrZXQgZmFpbGVkIGJlZm9yZSBhY3F1aXJpbmcgYSBVTUVNIHJlZmVyZW5jZS4gKi9cbitcdFx0XHR4c2stXHUwMDNldW1lbSA9IE5VTEw7XG4rXG4rXHRcdC8qIEtlZXAgZmFpbGVkIHNvY2tldCBzdGF0ZSBpbmVydCBmb3IgbGF0ZXIgY2xlYW51cCBwYXRocy4gKi9cbitcdFx0eHNrLVx1MDAzZXhzayA9IE5VTEw7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRpZiAoc2hhcmVkKVxuK1x0XHRyZWZjb3VudF9pbmMoXHUwMDI2dW1lbS1cdTAwM2V1c2Vycyk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW50IHNldF9yaW5nX3NpemUoc3RydWN0IGlmb2JqZWN0ICppZm9iailcbkBAIC0yMDMsNiArMjE5LDEyIEBAIGludCBod19yaW5nX3NpemVfcmVzZXQoc3RydWN0IGlmb2JqZWN0ICppZm9iailcbiBzdGF0aWMgdm9pZCBfX3Rlc3Rfc3BlY19pbml0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmpfdHgsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqX3J4KVxuIHtcbitcdC8qXG4rXHQgKiBLZWVwIHRoZSBzYW1lIGRlZmF1bHQgYXMgeHNreGNlaXZlciBzdGFydHVwOiB3aGVuIFRYIGFuZCBSWCBzaGFyZSB0aGUgc2FtZSBuZXRkZXYsXG4rXHQgKiBzaGFyZWQgVU1FTSBpcyB0aGUgYmFzZWxpbmUgbW9kZSBmb3IgdGhpcyB0ZXN0IGhhcm5lc3MuIEluZGl2aWR1YWwgdGVzdHMgY2FuIHN0aWxsXG4rXHQgKiBvdmVycmlkZSB0aGlzIGFzIG5lZWRlZC5cbitcdCAqL1xuK1x0Ym9vbCBzaGFyZWRfZGVmYXVsdCA9IGlmb2JqX3R4LVx1MDAzZWlmaW5kZXggPT0gaWZvYmpfcngtXHUwMDNlaWZpbmRleDtcbiBcdHUzMiBpLCBqO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUFYX0lOVEVSRkFDRVM7IGkrKykge1xuQEAgLTIxNCw2ICsyMzYsNyBAQCBzdGF0aWMgdm9pZCBfX3Rlc3Rfc3BlY19pbml0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmpfdHgsXG4gXHRcdGlmb2JqLVx1MDAzZXVzZV9maWxsX3JpbmcgPSB0cnVlO1xuIFx0XHRpZm9iai1cdTAwM2VyZWxlYXNlX3J4ID0gdHJ1ZTtcbiBcdFx0aWZvYmotXHUwMDNldmFsaWRhdGlvbl9mdW5jID0gTlVMTDtcbitcdFx0aWZvYmotXHUwMDNlc2hhcmVkX3VtZW0gPSBzaGFyZWRfZGVmYXVsdDtcbiBcdFx0aWZvYmotXHUwMDNldXNlX21ldGFkYXRhID0gZmFsc2U7XG4gXG4gXHRcdGlmIChpID09IDApIHtcbkBAIC01NzQsMjYgKzU5NywxMjIgQEAgc3RhdGljIGludCBwa3Rfc3RyZWFtX3JlY2VpdmVfaGFsZihzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuIFxuIHN0YXRpYyBpbnQgcGt0X3N0cmVhbV9ldmVuX29kZF9zZXF1ZW5jZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuIHtcbitcdHN0cnVjdCBwa3Rfc3RyZWFtICp0eF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9O1xuK1x0c3RydWN0IHBrdF9zdHJlYW0gKnJ4X3N0cmVhbXNbTUFYX1NPQ0tFVFNdID0ge307XG4gXHRzdHJ1Y3QgcGt0X3N0cmVhbSAqcGt0X3N0cmVhbTtcbiBcdHUzMiBpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGVzdC1cdTAwM2VuYl9zb2NrZXRzOyBpKyspIHtcbiBcdFx0cGt0X3N0cmVhbSA9IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtO1xuLVx0XHRwa3Rfc3RyZWFtID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tXHUwMDNlbmJfcGt0cyAvIDIsXG4tXHRcdFx0XHRcdFx0ICAgcGt0X3N0cmVhbS1cdTAwM2Vwa3RzWzBdLmxlbiwgaSwgMik7XG4tXHRcdGlmICghcGt0X3N0cmVhbSlcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdFx0dGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSBwa3Rfc3RyZWFtO1xuK1x0XHR0eF9zdHJlYW1zW2ldID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tXHUwMDNlbmJfcGt0cyAvIDIsXG4rXHRcdFx0XHRcdFx0ICAgICAgcGt0X3N0cmVhbS1cdTAwM2Vwa3RzWzBdLmxlbiwgaSwgMik7XG4rXHRcdGlmICghdHhfc3RyZWFtc1tpXSlcbitcdFx0XHRnb3RvIGVycjtcbiBcbiBcdFx0cGt0X3N0cmVhbSA9IHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtO1xuLVx0XHRwa3Rfc3RyZWFtID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tXHUwMDNlbmJfcGt0cyAvIDIsXG4tXHRcdFx0XHRcdFx0ICAgcGt0X3N0cmVhbS1cdTAwM2Vwa3RzWzBdLmxlbiwgaSwgMik7XG4tXHRcdGlmICghcGt0X3N0cmVhbSlcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdFx0dGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSBwa3Rfc3RyZWFtO1xuK1x0XHRyeF9zdHJlYW1zW2ldID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tXHUwMDNlbmJfcGt0cyAvIDIsXG4rXHRcdFx0XHRcdFx0ICAgICAgcGt0X3N0cmVhbS1cdTAwM2Vwa3RzWzBdLmxlbiwgaSwgMik7XG4rXHRcdGlmICghcnhfc3RyZWFtc1tpXSlcbitcdFx0XHRnb3RvIGVycjtcbitcdH1cbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlc3QtXHUwMDNlbmJfc29ja2V0czsgaSsrKSB7XG4rXHRcdHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtID0gdHhfc3RyZWFtc1tpXTtcbitcdFx0dGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSByeF9zdHJlYW1zW2ldO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyOlxuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGVzdC1cdTAwM2VuYl9zb2NrZXRzOyBpKyspIHtcbitcdFx0aWYgKHR4X3N0cmVhbXNbaV0pXG4rXHRcdFx0cGt0X3N0cmVhbV9kZWxldGUodHhfc3RyZWFtc1tpXSk7XG4rXHRcdGlmIChyeF9zdHJlYW1zW2ldKVxuK1x0XHRcdHBrdF9zdHJlYW1fZGVsZXRlKHJ4X3N0cmVhbXNbaV0pO1xuK1x0fVxuK1xuK1x0cmV0dXJuIC1FTk9NRU07XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGt0X3N0cmVhbV9sZW5fc2VxKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHUzMiBzaG9ydF9sZW4sIHUzMiBsb25nX2xlbilcbit7XG4rXHRzdHJ1Y3QgcGt0X3N0cmVhbSAqdHhfc3RyZWFtc1tNQVhfU09DS0VUU10gPSB7fTtcbitcdHN0cnVjdCBwa3Rfc3RyZWFtICpyeF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9O1xuK1x0c3RydWN0IHBrdF9zdHJlYW0gKnBrdF9zdHJlYW07XG4rXHR1MzIgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlc3QtXHUwMDNlbmJfc29ja2V0czsgaSsrKSB7XG4rXHRcdHUzMiBwa3RfbGVuID0gaSA/IGxvbmdfbGVuIDogc2hvcnRfbGVuO1xuK1xuK1x0XHRwa3Rfc3RyZWFtID0gdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW07XG4rXHRcdHR4X3N0cmVhbXNbaV0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUocGt0X3N0cmVhbS1cdTAwM2VuYl9wa3RzIC8gMiwgcGt0X2xlbiwgaSwgMik7XG4rXHRcdGlmICghdHhfc3RyZWFtc1tpXSlcbitcdFx0XHRnb3RvIGVycjtcbitcbitcdFx0cGt0X3N0cmVhbSA9IHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtO1xuK1x0XHRyeF9zdHJlYW1zW2ldID0gX19wa3Rfc3RyZWFtX2dlbmVyYXRlKHBrdF9zdHJlYW0tXHUwMDNlbmJfcGt0cyAvIDIsIHBrdF9sZW4sIGksIDIpO1xuK1x0XHRpZiAoIXJ4X3N0cmVhbXNbaV0pXG4rXHRcdFx0Z290byBlcnI7XG4rXHR9XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0ZXN0LVx1MDAzZW5iX3NvY2tldHM7IGkrKykge1xuK1x0XHR0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSA9IHR4X3N0cmVhbXNbaV07XG4rXHRcdHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleHNrX2FycltpXS5wa3Rfc3RyZWFtID0gcnhfc3RyZWFtc1tpXTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK1xuK2VycjpcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlc3QtXHUwMDNlbmJfc29ja2V0czsgaSsrKSB7XG4rXHRcdGlmICh0eF9zdHJlYW1zW2ldKVxuK1x0XHRcdHBrdF9zdHJlYW1fZGVsZXRlKHR4X3N0cmVhbXNbaV0pO1xuK1x0XHRpZiAocnhfc3RyZWFtc1tpXSlcbitcdFx0XHRwa3Rfc3RyZWFtX2RlbGV0ZShyeF9zdHJlYW1zW2ldKTtcbitcdH1cbitcbitcdHJldHVybiAtRU5PTUVNO1xuK31cbitcbitzdGF0aWMgaW50IHBrdF9zdHJlYW1fd2VpZ2h0ZWRfdW5ldmVuX2Rpc3Rfc2VxdWVuY2Uoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgdTMyIHRvdGFsX3BrdHMsXG4rXHRcdFx0XHRcdFx0ICAgIHUzMiBwa3RfbGVuKVxuK3tcbitcdHN0cnVjdCBwa3Rfc3RyZWFtICp0eF9zdHJlYW1zW01BWF9TT0NLRVRTXSA9IHt9O1xuK1x0c3RydWN0IHBrdF9zdHJlYW0gKnJ4X3N0cmVhbXNbTUFYX1NPQ0tFVFNdID0ge307XG4rXHR1MzIgaSwgcGt0c19zb2NrMDtcbitcbitcdGlmICh0ZXN0LVx1MDAzZW5iX3NvY2tldHMgXHUwMDNjIDIgfHwgdG90YWxfcGt0cyBcdTAwM2MgNClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRwa3RzX3NvY2swID0gdG90YWxfcGt0cyAvIDQ7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0ZXN0LVx1MDAzZW5iX3NvY2tldHM7IGkrKykge1xuK1x0XHR1MzIgbmJfcGt0cyA9IChpID09IDApID8gcGt0c19zb2NrMCA6ICh0b3RhbF9wa3RzIC0gcGt0c19zb2NrMCk7XG4rXG4rXHRcdHR4X3N0cmVhbXNbaV0gPSBfX3BrdF9zdHJlYW1fZ2VuZXJhdGUobmJfcGt0cywgcGt0X2xlbiwgaSwgMik7XG4rXHRcdGlmICghdHhfc3RyZWFtc1tpXSlcbitcdFx0XHRnb3RvIGVycjtcbitcbitcdFx0cnhfc3RyZWFtc1tpXSA9IF9fcGt0X3N0cmVhbV9nZW5lcmF0ZShuYl9wa3RzLCBwa3RfbGVuLCBpLCAyKTtcbitcdFx0aWYgKCFyeF9zdHJlYW1zW2ldKVxuK1x0XHRcdGdvdG8gZXJyO1xuK1x0fVxuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGVzdC1cdTAwM2VuYl9zb2NrZXRzOyBpKyspIHtcbitcdFx0dGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gPSB0eF9zdHJlYW1zW2ldO1xuK1x0XHR0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSA9IHJ4X3N0cmVhbXNbaV07XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbitcbitlcnI6XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0ZXN0LVx1MDAzZW5iX3NvY2tldHM7IGkrKykge1xuK1x0XHRpZiAodHhfc3RyZWFtc1tpXSlcbitcdFx0XHRwa3Rfc3RyZWFtX2RlbGV0ZSh0eF9zdHJlYW1zW2ldKTtcbitcdFx0aWYgKHJ4X3N0cmVhbXNbaV0pXG4rXHRcdFx0cGt0X3N0cmVhbV9kZWxldGUocnhfc3RyZWFtc1tpXSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gLUVOT01FTTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcmVsZWFzZV9ldmVuX29kZF9zZXF1ZW5jZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuQEAgLTE0NjgsNiArMTU4NywyOCBAQCBzdGF0aWMgaW50IHZhbGlkYXRlX3R4X2ludmFsaWRfZGVzY3Moc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdClcbiBcdHJldHVybiBURVNUX1BBU1M7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHhza19kZWxldGVfc29ja2V0X2JhdGNoKHN0cnVjdCBpZm9iamVjdCAqaWZvYmplY3QsIHUzMiBjb3VudClcbit7XG4rXHR1MzIgaTtcbitcbitcdGlmICghaWZvYmplY3QpXG4rXHRcdHJldHVybjtcbitcbitcdGZvciAoaSA9IGNvdW50OyBpIFx1MDAzZSAwOyBpLS0pXG4rXHRcdHhza19kZWxldGVfc29ja2V0KFx1MDAyNmlmb2JqZWN0LVx1MDAzZXhza19hcnJbaSAtIDFdKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgeHNrX2NvbmZpZ3VyZV9yb2xsYmFjayhzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0LCBpbnQgbGFzdClcbit7XG4rXHR1MzIgY291bnQ7XG4rXG4rXHRpZiAoIWlmb2JqZWN0IHx8IGxhc3QgXHUwMDNjIDApXG4rXHRcdHJldHVybjtcbitcbitcdGNvdW50ID0gbGFzdCArIDE7XG4rXHR4c2tfZGVsZXRlX3NvY2tldF9iYXRjaChpZm9iamVjdCwgY291bnQpO1xuK31cbitcbiBzdGF0aWMgaW50IHhza19jb25maWd1cmUoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdCxcbiBcdFx0XHQgIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtLCBib29sIHR4KVxuIHtcbkBAIC0xNDg0LDE0ICsxNjI1LDE4IEBAIHN0YXRpYyBpbnQgeHNrX2NvbmZpZ3VyZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0LFxuIFx0XHRcdFx0YnJlYWs7XG4gXG4gXHRcdFx0LyogUmV0cnkgaWYgaXQgZmFpbHMgYXMgeHNrX3NvY2tldF9fY3JlYXRlKCkgaXMgYXN5bmNocm9ub3VzICovXG4tXHRcdFx0aWYgKGN0ciBcdTAwM2U9IFNPQ0tfUkVDT05GX0NUUilcbitcdFx0XHRpZiAoY3RyIFx1MDAzZT0gU09DS19SRUNPTkZfQ1RSKSB7XG4rXHRcdFx0XHR4c2tfY29uZmlndXJlX3JvbGxiYWNrKGlmb2JqZWN0LCBpKTtcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4rXHRcdFx0fVxuIFx0XHRcdHVzbGVlcChVU0xFRVBfTUFYKTtcbiBcdFx0fVxuIFx0XHRpZiAoaWZvYmplY3QtXHUwMDNlYnVzeV9wb2xsKSB7XG4gXHRcdFx0cmV0ID0gZW5hYmxlX2J1c3lfcG9sbChcdTAwMjZpZm9iamVjdC1cdTAwM2V4c2tfYXJyW2ldKTtcbi1cdFx0XHRpZiAocmV0KVxuK1x0XHRcdGlmIChyZXQpIHtcbitcdFx0XHRcdHhza19jb25maWd1cmVfcm9sbGJhY2soaWZvYmplY3QsIGkpO1xuIFx0XHRcdFx0cmV0dXJuIHJldDtcbitcdFx0XHR9XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC0xNzAyLDEyICsxODQ3LDYwIEBAIHZvaWQgKndvcmtlcl90ZXN0YXBwX3ZhbGlkYXRlX3J4KHZvaWQgKmFyZylcbiBcdHB0aHJlYWRfZXhpdChOVUxMKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgdGVzdGFwcF9jbGVhbl94c2tfdW1lbShzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqKVxuK3ZvaWQgeHNrX2RlbGV0ZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrKVxuIHtcbi1cdHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtID0gaWZvYmotXHUwMDNleHNrLVx1MDAzZXVtZW07XG4rXHRzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbTtcbiBcbi1cdHhza191bWVtX19kZWxldGUodW1lbS1cdTAwM2V1bWVtKTtcbi1cdG11bm1hcCh1bWVtLVx1MDAzZWJ1ZmZlciwgdW1lbS1cdTAwM2VtbWFwX3NpemUpO1xuK1x0LypcbitcdCAqIENhbGxlcnMgbXVzdCBzZXJpYWxpemUgdGVhcmRvd24gZm9yIGEgZ2l2ZW4geHNrL3VtZW0gcGFpci5cbitcdCAqIFRoaXMgaGVscGVyIGRvZXMgcmVmY291bnQtYmFzZWQgbGlmZXRpbWUgbWFuYWdlbWVudCBvbmx5LlxuK1x0ICovXG4rXHRpZiAoIXhzaylcbitcdFx0cmV0dXJuO1xuK1xuK1x0dW1lbSA9IHhzay1cdTAwM2V1bWVtO1xuK1x0aWYgKCF1bWVtKVxuK1x0XHRyZXR1cm47XG4rXG4rXHQvKiBEZWxldGUgdGhlIHNvY2tldCBoYW5kbGUgd2hlbiBhdmFpbGFibGUsIHRoZW4gZHJvcCBVTUVNIHJlZmVyZW5jZS4gKi9cbitcdGlmICh4c2stXHUwMDNleHNrKVxuK1x0XHR4c2tfc29ja2V0X19kZWxldGUoeHNrLVx1MDAzZXhzayk7XG4rXHR4c2stXHUwMDNleHNrID0gTlVMTDtcbitcbitcdC8qIE1hcmsgdGhpcyBzb2NrZXQgYXMgY2xlYW5lZCB1cCB0byBwcmV2ZW50IGRvdWJsZS1kZWNyZW1lbnQgKi9cbitcdHhzay1cdTAwM2V1bWVtID0gTlVMTDtcbitcbitcdC8qXG4rXHQgKiBUZWFyZG93biBtYXkgd2FsayB0aGUgZnVsbCB4c2sgYXJyYXksIGluY2x1ZGluZyBzbG90cyB0aGF0IG5ldmVyIGNvbXBsZXRlZCBzZXR1cCBidXRcbitcdCAqIHN0aWxsIGNhcnJ5IGEgcHJlaW5pdGlhbGl6ZWQgdW1lbSBwb2ludGVyLiBBZnRlciBhIHBhcnRpYWwtc2V0dXAgcm9sbGJhY2ssIHRoZSBsYXN0IFVNRU1cbitcdCAqIHJlZiBtYXkgYWxyZWFkeSBiZSBkcm9wcGVkLlxuK1x0ICovXG4rXHRpZiAoIXJlZmNvdW50X3JlYWQoXHUwMDI2dW1lbS1cdTAwM2V1c2VycykpXG4rXHRcdHJldHVybjtcbitcbitcdC8qIEFsd2F5cyBkZWNyZW1lbnQgcmVmY291bnQgZm9yIHRoaXMgc29ja2V0J3MgVU1FTSByZWZlcmVuY2UgKi9cbitcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2dW1lbS1cdTAwM2V1c2VycykpIHtcbitcdFx0aWYgKHVtZW0tXHUwMDNldW1lbSkge1xuK1x0XHRcdGludCBlcnIgPSB4c2tfdW1lbV9fZGVsZXRlKHVtZW0tXHUwMDNldW1lbSk7XG4rXG4rXHRcdFx0aWYgKGVycilcbitcdFx0XHRcdGtzZnRfcHJpbnRfbXNnKFwieHNrX3VtZW1fX2RlbGV0ZSBmYWlsZWQ6ICVkICh1bWVtIHN0aWxsIGJ1c3k/KVxcblwiLFxuK1x0XHRcdFx0XHQgICAgICAgZXJyKTtcbitcdFx0fVxuK1x0XHRpZiAodW1lbS1cdTAwM2VidWZmZXIgXHUwMDI2XHUwMDI2IHVtZW0tXHUwMDNlbW1hcF9zaXplKVxuK1x0XHRcdG11bm1hcCh1bWVtLVx1MDAzZWJ1ZmZlciwgdW1lbS1cdTAwM2VtbWFwX3NpemUpO1xuK1x0XHR1bWVtLVx1MDAzZXVtZW0gPSBOVUxMO1xuK1x0XHR1bWVtLVx1MDAzZWJ1ZmZlciA9IE5VTEw7XG4rXHRcdHVtZW0tXHUwMDNlbW1hcF9zaXplID0gMDtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgeHNrX2RlbGV0ZV9hbGxfaWZvYmpfc29ja2V0cyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqKVxuK3tcbitcdGlmICghaWZvYmopXG4rXHRcdHJldHVybjtcbitcbitcdHhza19kZWxldGVfc29ja2V0X2JhdGNoKGlmb2JqLCB0ZXN0LVx1MDAzZW5iX3NvY2tldHMpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCB4ZHBfcHJvZ19jaGFuZ2VkX3J4KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG5AQCAtMTc2OSwyNyArMTk2Miw2IEBAIHN0YXRpYyBpbnQgeHNrX2F0dGFjaF94ZHBfcHJvZ3Moc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGlmb2JqZWN0ICppZm9ial9yXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBjbGVhbl9zb2NrZXRzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXG4te1xuLVx0dTMyIGk7XG4tXG4tXHRpZiAoIWlmb2JqIHx8ICF0ZXN0KVxuLVx0XHRyZXR1cm47XG4tXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0ZXN0LVx1MDAzZW5iX3NvY2tldHM7IGkrKylcbi1cdFx0eHNrX3NvY2tldF9fZGVsZXRlKGlmb2JqLVx1MDAzZXhza19hcnJbaV0ueHNrKTtcbi19XG4tXG4tc3RhdGljIHZvaWQgY2xlYW5fdW1lbShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqMSwgc3RydWN0IGlmb2JqZWN0ICppZm9iajIpXG4te1xuLVx0aWYgKCFpZm9iajEpXG4tXHRcdHJldHVybjtcbi1cbi1cdHRlc3RhcHBfY2xlYW5feHNrX3VtZW0oaWZvYmoxKTtcbi1cdGlmIChpZm9iajIgXHUwMDI2XHUwMDI2ICFpZm9iajItXHUwMDNlc2hhcmVkX3VtZW0pXG4tXHRcdHRlc3RhcHBfY2xlYW5feHNrX3VtZW0oaWZvYmoyKTtcbi19XG4tXG4gc3RhdGljIGludCBfX3Rlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqMSxcbiBcdFx0XHRcdCAgICAgIHN0cnVjdCBpZm9iamVjdCAqaWZvYmoyKVxuIHtcbkBAIC0xODQxLDggKzIwMTMsNyBAQCBzdGF0aWMgaW50IF9fdGVzdGFwcF92YWxpZGF0ZV90cmFmZmljKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIHN0cnVjdCBpZm9iamVjdCAqaVxuIFx0XHRpZiAocHRocmVhZF9iYXJyaWVyX2Rlc3Ryb3koXHUwMDI2YmFycikpIHtcbiBcdFx0XHR0ZXN0LVx1MDAzZXVzZV9iYXJyaWVyID0gZmFsc2U7XG4gXHRcdFx0cHRocmVhZF9qb2luKHQwLCBOVUxMKTtcbi1cdFx0XHRjbGVhbl9zb2NrZXRzKHRlc3QsIGlmb2JqMSk7XG4tXHRcdFx0Y2xlYW5fdW1lbSh0ZXN0LCBpZm9iajEsIE5VTEwpO1xuK1x0XHRcdHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgaWZvYmoxKTtcbiBcdFx0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuIFx0XHR9XG4gXHR9XG5AQCAtMTg1Niw5ICsyMDI3LDggQEAgc3RhdGljIGludCBfX3Rlc3RhcHBfdmFsaWRhdGVfdHJhZmZpYyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBzdHJ1Y3QgaWZvYmplY3QgKmlcbiBcdHB0aHJlYWRfam9pbih0MCwgTlVMTCk7XG4gXG4gXHRpZiAodGVzdC1cdTAwM2V0b3RhbF9zdGVwcyA9PSB0ZXN0LVx1MDAzZWN1cnJlbnRfc3RlcCB8fCB0ZXN0LVx1MDAzZWZhaWwpIHtcbi1cdFx0Y2xlYW5fc29ja2V0cyh0ZXN0LCBpZm9iajEpO1xuLVx0XHRjbGVhbl9zb2NrZXRzKHRlc3QsIGlmb2JqMik7XG4tXHRcdGNsZWFuX3VtZW0odGVzdCwgaWZvYmoxLCBpZm9iajIpO1xuK1x0XHR4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIGlmb2JqMik7XG4rXHRcdHhza19kZWxldGVfYWxsX2lmb2JqX3NvY2tldHModGVzdCwgaWZvYmoxKTtcbiBcdH1cbiBcbiBcdGlmICh0ZXN0LVx1MDAzZWZhaWwpXG5AQCAtMTk2Nyw5ICsyMTM3LDggQEAgaW50IHRlc3RhcHBfeGRwX3Byb2dfY2xlYW51cChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuIFx0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuIFxuIFx0aWYgKHN3YXBfeHNrX3Jlc291cmNlcyh0ZXN0KSkge1xuLVx0XHRjbGVhbl9zb2NrZXRzKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfcngpO1xuLVx0XHRjbGVhbl9zb2NrZXRzKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfdHgpO1xuLVx0XHRjbGVhbl91bWVtKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfcngsIHRlc3QtXHUwMDNlaWZvYmpfdHgpO1xuK1x0XHR4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfdHgpO1xuK1x0XHR4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfcngpO1xuIFx0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuIFx0fVxuIFxuQEAgLTIyMjQsNiArMjM5MywxNjggQEAgaW50IHRlc3RhcHBfeGRwX3NoYXJlZF91bWVtKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbitzdGF0aWMgaW50IHNoYXJlZF91bWVtX3Rlc3RfcHJlcGFyZShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuK3tcbitcdHUzMiBpO1xuK1xuK1x0aWYgKHRlc3QtXHUwMDNlbmJfc29ja2V0cyBcdTAwM2UgTUFYX1NPQ0tFVFMpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJFUlJPUjogWyVzXSBpbnZhbGlkIHNvY2tldCBjb3VudCAldVxcblwiLCBfX2Z1bmNfXywgdGVzdC1cdTAwM2VuYl9zb2NrZXRzKTtcbitcdFx0cmV0dXJuIFRFU1RfRkFJTFVSRTtcbitcdH1cbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlc3QtXHUwMDNlbmJfc29ja2V0czsgaSsrKSB7XG4rXHRcdGlmICghdGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2tfYXJyW2ldLnBrdF9zdHJlYW0gfHxcbitcdFx0ICAgICF0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhza19hcnJbaV0ucGt0X3N0cmVhbSkge1xuK1x0XHRcdGtzZnRfcHJpbnRfbXNnKFwiRVJST1I6IFslc10gbWlzc2luZyBzdHJlYW0gZm9yIHNvY2tldCAldVxcblwiLCBfX2Z1bmNfXywgaSk7XG4rXHRcdFx0cmV0dXJuIFRFU1RfRkFJTFVSRTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIFRFU1RfUEFTUztcbit9XG4rXG4rc3RhdGljIGludCBzaGFyZWRfdW1lbV9zZXFfZXZlbl9vZGQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgY29uc3Qgdm9pZCAqY3R4KVxuK3tcbitcdCh2b2lkKWN0eDtcbitcbitcdHJldHVybiBwa3Rfc3RyZWFtX2V2ZW5fb2RkX3NlcXVlbmNlKHRlc3QpID8gVEVTVF9GQUlMVVJFIDogVEVTVF9QQVNTO1xuK31cbitcbitzdGF0aWMgaW50IHNoYXJlZF91bWVtX3NlcV9sZW4oc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgY29uc3Qgdm9pZCAqY3R4KVxuK3tcbitcdGNvbnN0IHN0cnVjdCBzaGFyZWRfdW1lbV9sZW5fY3R4ICpjZmcgPSBjdHg7XG4rXG4rXHRyZXR1cm4gcGt0X3N0cmVhbV9sZW5fc2VxKHRlc3QsIGNmZy1cdTAwM2VzaG9ydF9sZW4sIGNmZy1cdTAwM2Vsb25nX2xlbikgPyBURVNUX0ZBSUxVUkUgOiBURVNUX1BBU1M7XG4rfVxuK1xuK3N0YXRpYyBpbnQgc2hhcmVkX3VtZW1fc2VxX3VuZXZlbl9kaXN0KHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsIGNvbnN0IHZvaWQgKmN0eClcbit7XG4rXHRjb25zdCBzdHJ1Y3Qgc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3RfY3R4ICpjZmcgPSBjdHg7XG4rXG4rXHRyZXR1cm4gcGt0X3N0cmVhbV93ZWlnaHRlZF91bmV2ZW5fZGlzdF9zZXF1ZW5jZSh0ZXN0LCBjZmctXHUwMDNldG90YWxfcGt0cyxcbitcdFx0XHRcdFx0XHQgICAgICBjZmctXHUwMDNlcGt0X2xlbikgPyBURVNUX0ZBSUxVUkUgOiBURVNUX1BBU1M7XG4rfVxuK1xuK3N0YXRpYyBpbnQgc2hhcmVkX3VtZW1fcG9zdF91bmV2ZW5fZGlzdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBpbnQgcmV0LCBjb25zdCB2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IHBrdF9zdHJlYW0gKnR4X3N0cmVhbV8wLCAqdHhfc3RyZWFtXzE7XG4rXHRzdHJ1Y3QgcGt0X3N0cmVhbSAqcnhfc3RyZWFtXzAsICpyeF9zdHJlYW1fMTtcbitcbitcdCh2b2lkKWN0eDtcbitcbitcdHR4X3N0cmVhbV8wID0gdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4c2tfYXJyWzBdLnBrdF9zdHJlYW07XG4rXHR0eF9zdHJlYW1fMSA9IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleHNrX2FyclsxXS5wa3Rfc3RyZWFtO1xuK1x0cnhfc3RyZWFtXzAgPSB0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhza19hcnJbMF0ucGt0X3N0cmVhbTtcbitcdHJ4X3N0cmVhbV8xID0gdGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2tfYXJyWzFdLnBrdF9zdHJlYW07XG4rXG4rXHRpZiAodHhfc3RyZWFtXzEtXHUwMDNlbmJfdmFsaWRfZW50cmllcyBcdTAwM2M9IHR4X3N0cmVhbV8wLVx1MDAzZW5iX3ZhbGlkX2VudHJpZXMpXG4rXHRcdHJldHVybiBURVNUX0ZBSUxVUkU7XG4rXG4rXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgcnhfc3RyZWFtXzEtXHUwMDNlbmJfcnhfcGt0cyBcdTAwM2M9IHJ4X3N0cmVhbV8wLVx1MDAzZW5iX3J4X3BrdHMpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJFUlJPUjogc29ja2V0MSByeF9wa3RzICgldSkgbm90IGdyZWF0ZXIgdGhhbiBzb2NrZXQwICgldSlcXG5cIixcbitcdFx0XHQgICAgICAgcnhfc3RyZWFtXzEtXHUwMDNlbmJfcnhfcGt0cywgcnhfc3RyZWFtXzAtXHUwMDNlbmJfcnhfcGt0cyk7XG4rXHRcdHJldCA9IFRFU1RfRkFJTFVSRTtcbitcdH1cbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnVuX3NoYXJlZF91bWVtX3Rlc3Qoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgc3RydWN0IGJwZl9wcm9ncmFtICp4ZHBfcHJvZ19yeCxcbitcdFx0XHRcdHN0cnVjdCBicGZfcHJvZ3JhbSAqeGRwX3Byb2dfdHgsIHN0cnVjdCBicGZfbWFwICp4c2ttYXBfcngsXG4rXHRcdFx0XHRzdHJ1Y3QgYnBmX21hcCAqeHNrbWFwX3R4LCB1MzIgbmJfc29ja2V0cyxcbitcdFx0XHRcdHNoYXJlZF91bWVtX3NlcV9mbiBzZXFfZm4sIHNoYXJlZF91bWVtX3Bvc3RfZm4gcG9zdF9mbixcbitcdFx0XHRcdGNvbnN0IHZvaWQgKmN0eClcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0dGVzdC1cdTAwM2V0b3RhbF9zdGVwcyA9IDE7XG4rXHR0ZXN0LVx1MDAzZW5iX3NvY2tldHMgPSBuYl9zb2NrZXRzO1xuK1xuK1x0dGVzdF9zcGVjX3NldF94ZHBfcHJvZyh0ZXN0LCB4ZHBfcHJvZ19yeCwgeGRwX3Byb2dfdHgsIHhza21hcF9yeCwgeHNrbWFwX3R4KTtcbitcbitcdHJldCA9IHNoYXJlZF91bWVtX3Rlc3RfcHJlcGFyZSh0ZXN0KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBzZXFfZm4odGVzdCwgY3R4KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB0ZXN0YXBwX3ZhbGlkYXRlX3RyYWZmaWModGVzdCk7XG4rXHRpZiAocG9zdF9mbilcbitcdFx0cmV0ID0gcG9zdF9mbih0ZXN0LCByZXQsIGN0eCk7XG4rXG4rXHRyZWxlYXNlX2V2ZW5fb2RkX3NlcXVlbmNlKHRlc3QpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4raW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fNF9zb2NrZXRzKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4re1xuK1x0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfcnggPSB0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhkcF9wcm9ncztcbitcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3R4ID0gdGVzdC1cdTAwM2VpZm9ial90eC1cdTAwM2V4ZHBfcHJvZ3M7XG4rXG4rXHRyZXR1cm4gcnVuX3NoYXJlZF91bWVtX3Rlc3QodGVzdCwgc2tlbF9yeC1cdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLFxuK1x0XHRcdFx0ICAgIHNrZWxfdHgtXHUwMDNlcHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSwgc2tlbF9yeC1cdTAwM2VtYXBzLnhzayxcbitcdFx0XHRcdCAgICBza2VsX3R4LVx1MDAzZW1hcHMueHNrLCA0LCBzaGFyZWRfdW1lbV9zZXFfZXZlbl9vZGQsIE5VTEwsIE5VTEwpO1xuK31cbitcbitpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbit7XG4rXHRzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF9yeCA9IHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleGRwX3Byb2dzO1xuK1x0c3RydWN0IHhza194ZHBfcHJvZ3MgKnNrZWxfdHggPSB0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhkcF9wcm9ncztcbitcdGNvbnN0IHN0cnVjdCBzaGFyZWRfdW1lbV9sZW5fY3R4IGxlbl9jdHggPSB7XG4rXHRcdC5zaG9ydF9sZW4gPSBNSU5fUEtUX1NJWkUsXG4rXHRcdC5sb25nX2xlbiA9IE1JTl9QS1RfU0laRSAqIDIsXG4rXHR9O1xuK1xuK1x0cmV0dXJuIHJ1bl9zaGFyZWRfdW1lbV90ZXN0KHRlc3QsIHNrZWxfcngtXHUwMDNlcHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQsXG4rXHRcdFx0XHQgICAgc2tlbF90eC1cdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtX2xlbmd0aF9iYXNlZCxcbitcdFx0XHRcdCAgICBza2VsX3J4LVx1MDAzZW1hcHMueHNrLCBza2VsX3R4LVx1MDAzZW1hcHMueHNrLCAyLCBzaGFyZWRfdW1lbV9zZXFfbGVuLFxuK1x0XHRcdFx0ICAgIE5VTEwsIFx1MDAyNmxlbl9jdHgpO1xuK31cbitcbitpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV91bmV2ZW5fZGlzdChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuK3tcbitcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3J4ID0gdGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4ZHBfcHJvZ3M7XG4rXHRzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF90eCA9IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleGRwX3Byb2dzO1xuK1x0Y29uc3Qgc3RydWN0IHNoYXJlZF91bWVtX3VuZXZlbl9kaXN0X2N0eCB1bmV2ZW5fZGlzdF9jdHggPSB7XG4rXHRcdC50b3RhbF9wa3RzID0gREVGQVVMVF9QS1RfQ05UICogNCxcbitcdFx0LnBrdF9sZW4gPSBNSU5fUEtUX1NJWkUsXG4rXHR9O1xuK1xuK1x0cmV0dXJuIHJ1bl9zaGFyZWRfdW1lbV90ZXN0KHRlc3QsIHNrZWxfcngtXHUwMDNlcHJvZ3MueHNrX3hkcF9zaGFyZWRfdW1lbSxcbitcdFx0XHRcdCAgICBza2VsX3R4LVx1MDAzZXByb2dzLnhza194ZHBfc2hhcmVkX3VtZW0sIHNrZWxfcngtXHUwMDNlbWFwcy54c2ssXG4rXHRcdFx0XHQgICAgc2tlbF90eC1cdTAwM2VtYXBzLnhzaywgMiwgc2hhcmVkX3VtZW1fc2VxX3VuZXZlbl9kaXN0LFxuK1x0XHRcdFx0ICAgIHNoYXJlZF91bWVtX3Bvc3RfdW5ldmVuX2Rpc3QsIFx1MDAyNnVuZXZlbl9kaXN0X2N0eCk7XG4rfVxuK1xuK2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtX3VuYWxpZ25lZChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuK3tcbitcdHN0cnVjdCB4c2tfeGRwX3Byb2dzICpza2VsX3J4ID0gdGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4ZHBfcHJvZ3M7XG4rXHRzdHJ1Y3QgeHNrX3hkcF9wcm9ncyAqc2tlbF90eCA9IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleGRwX3Byb2dzO1xuK1x0c3RydWN0IHhza191bWVtX2luZm8gKnR4X3VtZW0gPSB0ZXN0LVx1MDAzZWlmb2JqX3R4IFx1MDAyNlx1MDAyNiB0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXhzayA/XG4rXHRcdHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleHNrLVx1MDAzZXVtZW0gOiBOVUxMO1xuK1x0c3RydWN0IHhza191bWVtX2luZm8gKnJ4X3VtZW0gPSB0ZXN0LVx1MDAzZWlmb2JqX3J4IFx1MDAyNlx1MDAyNiB0ZXN0LVx1MDAzZWlmb2JqX3J4LVx1MDAzZXhzayA/XG4rXHRcdHRlc3QtXHUwMDNlaWZvYmpfcngtXHUwMDNleHNrLVx1MDAzZXVtZW0gOiBOVUxMO1xuK1x0Ym9vbCB0eF91bmFsaWduZWQgPSB0eF91bWVtID8gdHhfdW1lbS1cdTAwM2V1bmFsaWduZWRfbW9kZSA6IGZhbHNlO1xuK1x0Ym9vbCByeF91bmFsaWduZWQgPSByeF91bWVtID8gcnhfdW1lbS1cdTAwM2V1bmFsaWduZWRfbW9kZSA6IGZhbHNlO1xuK1x0aW50IHJldDtcbitcbitcdHRlc3Rfc3BlY19zZXRfdW5hbGlnbmVkKHRlc3QpO1xuK1xuK1x0cmV0ID0gcnVuX3NoYXJlZF91bWVtX3Rlc3QodGVzdCwgc2tlbF9yeC1cdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLFxuK1x0XHRcdFx0ICAgc2tlbF90eC1cdTAwM2Vwcm9ncy54c2tfeGRwX3NoYXJlZF91bWVtLCBza2VsX3J4LVx1MDAzZW1hcHMueHNrLFxuK1x0XHRcdFx0ICAgc2tlbF90eC1cdTAwM2VtYXBzLnhzaywgMiwgc2hhcmVkX3VtZW1fc2VxX2V2ZW5fb2RkLCBOVUxMLCBOVUxMKTtcbitcbitcdGlmICh0eF91bWVtKVxuK1x0XHR0eF91bWVtLVx1MDAzZXVuYWxpZ25lZF9tb2RlID0gdHhfdW5hbGlnbmVkO1xuK1x0aWYgKHJ4X3VtZW0pXG4rXHRcdHJ4X3VtZW0tXHUwMDNldW5hbGlnbmVkX21vZGUgPSByeF91bmFsaWduZWQ7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbiBpbnQgdGVzdGFwcF9wb2xsX3R4cV90bW91dChzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxuIHtcbiBcdGJvb2wgc2hhcmVkX3VtZW0gPSB0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXNoYXJlZF91bWVtO1xuQEAgLTI0OTgsOSArMjgyOSw4IEBAIGludCB0ZXN0YXBwX2h3X3N3X21heF9yaW5nX3NpemUoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiBcdHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNleHNrLVx1MDAzZWJhdGNoX3NpemUgPSB0ZXN0LVx1MDAzZWlmb2JqX3R4LVx1MDAzZXJpbmcudHhfbWF4X3BlbmRpbmcgLSA4O1xuIFx0dGVzdC1cdTAwM2VpZm9ial9yeC1cdTAwM2V4c2stXHUwMDNlYmF0Y2hfc2l6ZSA9IHRlc3QtXHUwMDNlaWZvYmpfdHgtXHUwMDNlcmluZy50eF9tYXhfcGVuZGluZyAtIDg7XG4gXHRpZiAocGt0X3N0cmVhbV9yZXBsYWNlKHRlc3QsIG1heF9kZXNjcywgTUlOX1BLVF9TSVpFKSkge1xuLVx0XHRjbGVhbl9zb2NrZXRzKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfdHgpO1xuLVx0XHRjbGVhbl9zb2NrZXRzKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfcngpO1xuLVx0XHRjbGVhbl91bWVtKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfcngsIHRlc3QtXHUwMDNlaWZvYmpfdHgpO1xuK1x0XHR4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfdHgpO1xuK1x0XHR4c2tfZGVsZXRlX2FsbF9pZm9ial9zb2NrZXRzKHRlc3QsIHRlc3QtXHUwMDNlaWZvYmpfcngpO1xuIFx0XHRyZXR1cm4gVEVTVF9GQUlMVVJFO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3RfeHNrLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5oXG5pbmRleCAwMzc1M2RkYzVkY2RhLi5lZjljNDIyZDc3NjNlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suaFxuQEAgLTQsNiArNCw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXRodG9vbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfeGRwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWZjb3VudC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCIuLi9rc2VsZnRlc3QuaFwiXG4gI2luY2x1ZGUgXCJ4c2suaFwiXG5AQCAtNzksNiArODAsOSBAQCBzdHJ1Y3QgdGVzdF9zcGVjO1xuIHR5cGVkZWYgaW50ICgqdmFsaWRhdGlvbl9mdW5jX3QpKHN0cnVjdCBpZm9iamVjdCAqaWZvYmopO1xuIHR5cGVkZWYgdm9pZCAqKCp0aHJlYWRfZnVuY190KSh2b2lkICphcmcpO1xuIHR5cGVkZWYgaW50ICgqdGVzdF9mdW5jX3QpKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuK3R5cGVkZWYgaW50ICgqc2hhcmVkX3VtZW1fc2VxX2ZuKShzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LCBjb25zdCB2b2lkICpjdHgpO1xuK3R5cGVkZWYgaW50ICgqc2hhcmVkX3VtZW1fcG9zdF9mbikoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwgaW50IHJldCxcbitcdFx0XHRcdFx0ICAgY29uc3Qgdm9pZCAqY3R4KTtcbiBcbiBzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvIHtcbiBcdHN0cnVjdCB4c2tfcmluZ19jb25zIHJ4O1xuQEAgLTEwNCw2ICsxMDgsNyBAQCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyB7XG4gXHRzdHJ1Y3QgeHNrX3VtZW0gKnVtZW07XG4gXHR1NjQgbmV4dF9idWZmZXI7XG4gXHR1NjQgbW1hcF9zaXplO1xuK1x0cmVmY291bnRfdCB1c2VycztcbiBcdHUzMiBudW1fZnJhbWVzO1xuIFx0dTMyIGZyYW1lX2hlYWRyb29tO1xuIFx0dm9pZCAqYnVmZmVyO1xuQEAgLTE1OSw2ICsxNjQsNyBAQCBpbnQgaW5pdF9pZmFjZShzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqLCB0aHJlYWRfZnVuY190IGZ1bmNfcHRyKTtcbiBpbnQgeHNrX2NvbmZpZ3VyZV91bWVtKHN0cnVjdCBpZm9iamVjdCAqaWZvYmosIHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtLCB2b2lkICpidWZmZXIsIHU2NCBzaXplKTtcbiBpbnQgeHNrX2NvbmZpZ3VyZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrLCBzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbSxcbiBcdFx0XHQgc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdCwgYm9vbCBzaGFyZWQpO1xuK3ZvaWQgeHNrX2RlbGV0ZV9zb2NrZXQoc3RydWN0IHhza19zb2NrZXRfaW5mbyAqeHNrKTtcbiBcbiBcbiBzdHJ1Y3QgcGt0IHtcbkBAIC0xNzksNiArMTg1LDE2IEBAIHN0cnVjdCBwa3Rfc3RyZWFtIHtcbiBcdGJvb2wgdmVyYmF0aW07XG4gfTtcbiBcbitzdHJ1Y3Qgc2hhcmVkX3VtZW1fbGVuX2N0eCB7XG4rXHR1MzIgc2hvcnRfbGVuO1xuK1x0dTMyIGxvbmdfbGVuO1xuK307XG4rXG4rc3RydWN0IHNoYXJlZF91bWVtX3VuZXZlbl9kaXN0X2N0eCB7XG4rXHR1MzIgdG90YWxfcGt0cztcbitcdHUzMiBwa3RfbGVuO1xuK307XG4rXG4gc3RhdGljIGlubGluZSBib29sIHBrdF9jb250aW51ZXModTMyIG9wdGlvbnMpXG4ge1xuIFx0cmV0dXJuIG9wdGlvbnMgXHUwMDI2IFhEUF9QS1RfQ09OVEQ7XG5AQCAtMjY4LDYgKzI4NCwxMCBAQCBpbnQgdGVzdGFwcF94ZHBfbWV0YWRhdGEoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XG4gaW50IHRlc3RhcHBfeGRwX21ldGFkYXRhX21iKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuIGludCB0ZXN0YXBwX3hkcF9wcm9nX2NsZWFudXAoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XG4gaW50IHRlc3RhcHBfeGRwX3NoYXJlZF91bWVtKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuK2ludCB0ZXN0YXBwX3NoYXJlZF91bWVtXzRfc29ja2V0cyhzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KTtcbitpbnQgdGVzdGFwcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWQoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XG4raW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5ldmVuX2Rpc3Qoc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCk7XG4raW50IHRlc3RhcHBfc2hhcmVkX3VtZW1fdW5hbGlnbmVkKHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpO1xuIFxuIHZvaWQgKndvcmtlcl90ZXN0YXBwX3ZhbGlkYXRlX3J4KHZvaWQgKmFyZyk7XG4gdm9pZCAqd29ya2VyX3Rlc3RhcHBfdmFsaWRhdGVfdHgodm9pZCAqYXJnKTtcbkBAIC0yOTEsNiArMzExLDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdGVzdF9zcGVjIHRlc3RzW10gPSB7XG4gXHR7Lm5hbWUgPSBcIlhEUF9QUk9HX0NMRUFOVVBcIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfeGRwX3Byb2dfY2xlYW51cH0sXG4gXHR7Lm5hbWUgPSBcIlhEUF9EUk9QX0hBTEZcIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfeGRwX2Ryb3B9LFxuIFx0ey5uYW1lID0gXCJYRFBfU0hBUkVEX1VNRU1cIiwgLnRlc3RfZnVuYyA9IHRlc3RhcHBfeGRwX3NoYXJlZF91bWVtfSxcbitcdHsubmFtZSA9IFwiU0hBUkVEX1VNRU1fNF9TT0NLRVRTXCIsIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3NoYXJlZF91bWVtXzRfc29ja2V0c30sXG4rXHR7Lm5hbWUgPSBcIlNIQVJFRF9VTUVNX0xFTkdUSF9CQVNFRFwiLCAudGVzdF9mdW5jID0gdGVzdGFwcF9zaGFyZWRfdW1lbV9sZW5ndGhfYmFzZWR9LFxuK1x0ey5uYW1lID0gXCJTSEFSRURfVU1FTV9VTkVWRU5fRElTVFwiLCAudGVzdF9mdW5jID0gdGVzdGFwcF9zaGFyZWRfdW1lbV91bmV2ZW5fZGlzdH0sXG4rXHR7Lm5hbWUgPSBcIlNIQVJFRF9VTUVNX1VOQUxJR05FRFwiLCAudGVzdF9mdW5jID0gdGVzdGFwcF9zaGFyZWRfdW1lbV91bmFsaWduZWR9LFxuIFx0ey5uYW1lID0gXCJYRFBfTUVUQURBVEFfQ09QWVwiLCAudGVzdF9mdW5jID0gdGVzdGFwcF94ZHBfbWV0YWRhdGF9LFxuIFx0ey5uYW1lID0gXCJYRFBfTUVUQURBVEFfQ09QWV9NVUxUSV9CVUZGXCIsIC50ZXN0X2Z1bmMgPSB0ZXN0YXBwX3hkcF9tZXRhZGF0YV9tYn0sXG4gXHR7Lm5hbWUgPSBcIkFMSUdORURfSU5WX0RFU0NfTVVMVElfQlVGRlwiLCAudGVzdF9mdW5jID0gdGVzdGFwcF9hbGlnbmVkX2ludl9kZXNjX21ifSxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MveHNrX3hkcF9wcm9ncy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3hza194ZHBfcHJvZ3MuY1xuaW5kZXggMDIzZDhiZWZkNGNhYi4uNTQzYjYxZGYzYTJiMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94c2tfeGRwX3Byb2dzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94c2tfeGRwX3Byb2dzLmNcbkBAIC0xMCw3ICsxMCw3IEBAXG4gXG4gc3RydWN0IHtcbiBcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfWFNLTUFQKTtcbi1cdF9fdWludChtYXhfZW50cmllcywgMik7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIE1BWF9TT0NLRVRTKTtcbiBcdF9fdWludChrZXlfc2l6ZSwgc2l6ZW9mKGludCkpO1xuIFx0X191aW50KHZhbHVlX3NpemUsIHNpemVvZihpbnQpKTtcbiB9IHhzayBTRUMoXCIubWFwc1wiKTtcbkBAIC03NSw2ICs3NSwyMyBAQCBTRUMoXCJ4ZHBcIikgaW50IHhza194ZHBfc2hhcmVkX3VtZW0oc3RydWN0IHhkcF9tZCAqeGRwKVxuIFx0cmV0dXJuIGJwZl9yZWRpcmVjdF9tYXAoXHUwMDI2eHNrLCBpZHgsIFhEUF9EUk9QKTtcbiB9XG4gXG4rU0VDKFwieGRwXCIpIGludCB4c2tfeGRwX3NoYXJlZF91bWVtX2xlbmd0aF9iYXNlZChzdHJ1Y3QgeGRwX21kICp4ZHApXG4re1xuK1x0dm9pZCAqZGF0YSA9ICh2b2lkICopKGxvbmcpeGRwLVx1MDAzZWRhdGE7XG4rXHR2b2lkICpkYXRhX2VuZCA9ICh2b2lkICopKGxvbmcpeGRwLVx1MDAzZWRhdGFfZW5kO1xuK1x0X191MzIgcGt0X2xlbiA9IGRhdGFfZW5kIC0gZGF0YTtcbitcbitcdC8qIFxuK1x0ICogUm91dGUgcGFja2V0cyBieSB0b3RhbCBYRFAtdmlzaWJsZSBwYWNrZXQgbGVuZ3RoIChkYXRhX2VuZCAtIGRhdGEpOlxuK1x0ICogLSBTb2NrZXQgMDogcGFja2V0cyBcdTAwM2M9IFNIQVJFRF9VTUVNX0xFTl9TUExJVCBieXRlc1xuK1x0ICogLSBTb2NrZXQgMTogcGFja2V0cyBcdTAwM2UgU0hBUkVEX1VNRU1fTEVOX1NQTElUIGJ5dGVzXG4rXHQgKi9cbitcdGlmIChwa3RfbGVuIFx1MDAzYz0gU0hBUkVEX1VNRU1fTEVOX1NQTElUKVxuK1x0XHRyZXR1cm4gYnBmX3JlZGlyZWN0X21hcChcdTAwMjZ4c2ssIDAsIFhEUF9EUk9QKTtcbitcdGVsc2VcbitcdFx0cmV0dXJuIGJwZl9yZWRpcmVjdF9tYXAoXHUwMDI2eHNrLCAxLCBYRFBfRFJPUCk7XG4rfVxuK1xuIFNFQyhcInhkcC5mcmFnc1wiKSBpbnQgeHNrX3hkcF9hZGp1c3RfdGFpbChzdHJ1Y3QgeGRwX21kICp4ZHApXG4ge1xuIFx0X191MzIgYnVmZl9sZW4sIGN1cnJfYnVmZl9sZW47XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza194ZHBfY29tbW9uLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNrX3hkcF9jb21tb24uaFxuaW5kZXggNDU4MTBmZjU1MmRhZS4uYmQ5YjVkY2Y4YzhlZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2tfeGRwX2NvbW1vbi5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNrX3hkcF9jb21tb24uaFxuQEAgLTMsNyArMyw4IEBAXG4gI2lmbmRlZiBYU0tfWERQX0NPTU1PTl9IX1xuICNkZWZpbmUgWFNLX1hEUF9DT01NT05fSF9cbiBcbi0jZGVmaW5lIE1BWF9TT0NLRVRTIDJcbisjZGVmaW5lIE1BWF9TT0NLRVRTIDRcbisjZGVmaW5lIFNIQVJFRF9VTUVNX0xFTl9TUExJVCA2NFxuICNkZWZpbmUgUEtUX0hEUl9BTElHTiAoc2l6ZW9mKHN0cnVjdCBldGhoZHIpICsgMikgLyogSnVzdCB0byBhbGlnbiB0aGUgZGF0YSBpbiB0aGUgcGFja2V0ICovXG4gXG4gc3RydWN0IHhkcF9pbmZvIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveHNreGNlaXZlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza3hjZWl2ZXIuY1xuaW5kZXggN2RhZDg1NTZhNzIyZS4uZWQ3NzE2YjYzNzU2NyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2t4Y2VpdmVyLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2t4Y2VpdmVyLmNcbkBAIC0xMTcsMTIgKzExNywxMyBAQCBzdGF0aWMgdm9pZCBfX2V4aXRfd2l0aF9lcnJvcihpbnQgZXJyb3IsIGNvbnN0IGNoYXIgKmZpbGUsIGNvbnN0IGNoYXIgKmZ1bmMsIGludFxuIFxuICNkZWZpbmUgZXhpdF93aXRoX2Vycm9yKGVycm9yKSBfX2V4aXRfd2l0aF9lcnJvcihlcnJvciwgX19GSUxFX18sIF9fZnVuY19fLCBfX0xJTkVfXylcbiBcbi1zdGF0aWMgYm9vbCBpZm9ial96Y19hdmFpbChzdHJ1Y3QgaWZvYmplY3QgKmlmb2JqZWN0KVxuK3N0YXRpYyBib29sIGlmb2JqX3pjX2F2YWlsKHN0cnVjdCBpZm9iamVjdCAqaWZvYmopXG4ge1xuIFx0c2l6ZV90IHVtZW1fc3ogPSBERUZBVUxUX1VNRU1fQlVGRkVSUyAqIFhTS19VTUVNX19ERUZBVUxUX0ZSQU1FX1NJWkU7XG4gXHRpbnQgbW1hcF9mbGFncyA9IE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUyB8IE1BUF9OT1JFU0VSVkU7XG4tXHRzdHJ1Y3QgeHNrX3NvY2tldF9pbmZvICp4c2s7XG4tXHRzdHJ1Y3QgeHNrX3VtZW1faW5mbyAqdW1lbTtcbitcdHN0cnVjdCB4c2tfc29ja2V0X2luZm8geHNrID0ge307XG4rXHRzdHJ1Y3QgeHNrX3VtZW1faW5mbyB1bWVtX2luZm8gPSB7fTtcbitcdHN0cnVjdCB4c2tfdW1lbV9pbmZvICp1bWVtID0gXHUwMDI2dW1lbV9pbmZvO1xuIFx0Ym9vbCB6Y19hdmFpbCA9IGZhbHNlO1xuIFx0dm9pZCAqYnVmcztcbiBcdGludCByZXQ7XG5AQCAtMTMxLDMyICsxMzIsMjIgQEAgc3RhdGljIGJvb2wgaWZvYmpfemNfYXZhaWwoc3RydWN0IGlmb2JqZWN0ICppZm9iamVjdClcbiBcdGlmIChidWZzID09IE1BUF9GQUlMRUQpXG4gXHRcdGV4aXRfd2l0aF9lcnJvcihlcnJubyk7XG4gXG4tXHR1bWVtID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgeHNrX3VtZW1faW5mbykpO1xuLVx0aWYgKCF1bWVtKSB7XG4tXHRcdG11bm1hcChidWZzLCB1bWVtX3N6KTtcbi1cdFx0ZXhpdF93aXRoX2Vycm9yKEVOT01FTSk7XG4tXHR9XG4rXHR1bWVtLVx1MDAzZW1tYXBfc2l6ZSA9IHVtZW1fc3o7XG4gXHR1bWVtLVx1MDAzZWZyYW1lX3NpemUgPSBYU0tfVU1FTV9fREVGQVVMVF9GUkFNRV9TSVpFO1xuLVx0cmV0ID0geHNrX2NvbmZpZ3VyZV91bWVtKGlmb2JqZWN0LCB1bWVtLCBidWZzLCB1bWVtX3N6KTtcbitcdHJldCA9IHhza19jb25maWd1cmVfdW1lbShpZm9iaiwgdW1lbSwgYnVmcywgdW1lbV9zeik7XG4gXHRpZiAocmV0KVxuIFx0XHRleGl0X3dpdGhfZXJyb3IoLXJldCk7XG4gXG4tXHR4c2sgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCB4c2tfc29ja2V0X2luZm8pKTtcbi1cdGlmICgheHNrKVxuLVx0XHRnb3RvIG91dDtcbi1cdGlmb2JqZWN0LVx1MDAzZWJpbmRfZmxhZ3MgPSBYRFBfVVNFX05FRURfV0FLRVVQIHwgWERQX1pFUk9DT1BZO1xuLVx0aWZvYmplY3QtXHUwMDNlcnhfb24gPSB0cnVlO1xuLVx0eHNrLVx1MDAzZXJ4cXNpemUgPSBYU0tfUklOR19DT05TX19ERUZBVUxUX05VTV9ERVNDUztcbi1cdHJldCA9IHhza19jb25maWd1cmVfc29ja2V0KHhzaywgdW1lbSwgaWZvYmplY3QsIGZhbHNlKTtcbitcdGlmb2JqLVx1MDAzZWJpbmRfZmxhZ3MgPSBYRFBfVVNFX05FRURfV0FLRVVQIHwgWERQX1pFUk9DT1BZO1xuK1x0aWZvYmotXHUwMDNlcnhfb24gPSB0cnVlO1xuK1x0eHNrLnJ4cXNpemUgPSBYU0tfUklOR19DT05TX19ERUZBVUxUX05VTV9ERVNDUztcbitcdHJldCA9IHhza19jb25maWd1cmVfc29ja2V0KFx1MDAyNnhzaywgdW1lbSwgaWZvYmosIGZhbHNlKTtcbiBcdGlmICghcmV0KVxuIFx0XHR6Y19hdmFpbCA9IHRydWU7XG4gXG4tXHR4c2tfc29ja2V0X19kZWxldGUoeHNrLVx1MDAzZXhzayk7XG4tXHRmcmVlKHhzayk7XG4tb3V0OlxuLVx0bXVubWFwKHVtZW0tXHUwMDNlYnVmZmVyLCB1bWVtX3N6KTtcbi1cdHhza191bWVtX19kZWxldGUodW1lbS1cdTAwM2V1bWVtKTtcbi1cdGZyZWUodW1lbSk7XG4rXHQvKiBVc2UgdGhlIHNhbWUgcmVmY291bnQtYmFzZWQgdGVhcmRvd24gcGF0aCBmb3IgYm90aCBzdWNjZXNzIGFuZCBmYWlsdXJlLiAqL1xuK1x0eHNrX2RlbGV0ZV9zb2NrZXQoXHUwMDI2eHNrKTtcbitcbiBcdHJldHVybiB6Y19hdmFpbDtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjo1NzoyOC4xNjQwMzMzNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNDM5ODI5NjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBc3Nlc3NtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ3ZlIGdvdCBhIHBhdGNoIHRoYXQncyB0b3VjaGVkIGEgYnVuY2ggb2YgZmlsZXMsIGFsbCB1bmRlciBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2AuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIGlmIHRoZXNlIGNoYW5nZXMgd2FycmFudCBmdXp6aW5nLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBwcmV0dHkgY2xlYXI6IHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggKm9ubHkqIGNvbnRhaW5zIG1vZGlmaWNhdGlvbnMgdG8gdGVzdHMsIGRvY3VtZW50YXRpb24sIGNvbW1lbnRzLCBkZWNvcmF0aXZlIGxvZ2dpbmcsIG5vbi1mdW5jdGlvbmFsIG51bWVyaWMgY2hhbmdlcywgdW5yZWFjaGFibGUgY29kZSBwYXRocywgb3IgdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgcmVxdWlyaW5nIHNwZWNpZmljIGhhcmR3YXJlLlxuXG5SaWdodCwgc28sIGZpcnN0IHRoaW5ncyBmaXJzdDogbGV0IG1lIGlzb2xhdGUgd2hlcmUgdGhlIGNoYW5nZXMgYXJlLiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF94c2suY2AsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3hzay5oYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy94c2tfeGRwX3Byb2dzLmNgLCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hza194ZHBfY29tbW9uLmhgLCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94c2t4Y2VpdmVyLmNgLiBCaW5nbyEgQWxsIHRlc3QgY29kZS5cblxuTm93IHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IGFyZSB0aGVzZSBzZWxmdGVzdHMgdG91Y2hpbmcgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXM/IFRoZSBhbnN3ZXIgaXMgbm8sIHRoaXMgaXMgYWxsIHRlc3QgaW5mcmFzdHJ1Y3R1cmUsIHVzZXJzcGFjZSBwcm9ncmFtcywgYW5kIEJQRiBwcm9ncmFtcyB1c2VkIGZvciB0ZXN0aW5nLiBUaGVzZSBmaWxlcyBkb24ndCBjaGFuZ2UgYW55IG9mIHRoZSBrZXJuZWwncyBmdW5jdGlvbmFsIGJlaGF2aW9yLCBidXQgYXJlIHRlc3QgcHJvZ3JhbXMgZm9yIEJQRi5cblxuVGhlIGd1aWRlbGluZXMgYXJlIGV4cGxpY2l0LiBJZiBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcyB3ZXJlIHRvdWNoZWQsIEknZCBuZWVkIHRvIGNvbmZpcm0gZXhlY3V0YWJpbGl0eSBhbmQgdGhlbiByZXR1cm4gYFdvcnRoRnV6emluZz10cnVlYC4gSG93ZXZlciwgc2luY2UgaXQgaXMgb25seSBhIGNoYW5nZSB0byBzZWxmdGVzdHMsIEkgZG9uJ3Qgc2VlIGFueSBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwuXG5cblNvLCBsZXQgbWUgcmVjb25maXJtOiB0aGUgZmlsZXMgbW9kaWZpZWQgYXJlIGxpbWl0ZWQgdG8gQlBGIHNlbGZ0ZXN0cywgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYC4gVGhpcyBtZWFucyB0aGUgcGF0Y2ggKm9ubHkqIGltcGFjdHMgdGhlIHRlc3Qgc3VpdGUsIGFuZCBkb2Vzbid0IGludHJvZHVjZSBhbnkgZnVuY3Rpb25hbCBhbHRlcmF0aW9ucyB0byB0aGUga2VybmVsIGl0c2VsZi5cblxuVGhlcmVmb3JlLCBteSBhc3Nlc3NtZW50IGlzOiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJhdGlvbmFsZSBpcyBzdHJhaWdodGZvcndhcmQ6IFRoaXMgcGF0Y2ggZm9jdXNlcyBzb2xlbHkgb24gbW9kaWZ5aW5nIGFuZCBpbXByb3ZpbmcgQlBGIHNlbGZ0ZXN0cywgbm90IGNvcmUga2VybmVsIGZ1bmN0aW9uYWxpdHksIGFuZCBkb2VzIG5vdCB3YXJyYW50IGZ1enppbmcgdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyNDEsIk91dHB1dFRva2VucyI6NjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjo1Nzo0MS42MDM4NjY0MzZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0MjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyAodXNlcnNwYWNlIHRlc3QgcHJvZ3JhbXMgYW5kIHRlc3QgQlBGIHByb2dyYW1zKSBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyAodXNlcnNwYWNlIHRlc3QgcHJvZ3JhbXMgYW5kIHRlc3QgQlBGIHByb2dyYW1zKSBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjU3OjQxLjYwMzkwNTUxNloiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowt9n6m[1] Phase: Running StartedAt: 2026-08-07 16:57:53 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt9n6m[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-07 16:57:53 +0000 UTC FinishedAt: 2026-08-07 16:57:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}